yaz-5.28.0/0000755000175000017500000000000013572540030007411 500000000000000yaz-5.28.0/libstemmer_c/0000755000175000017500000000000013572540027012064 500000000000000yaz-5.28.0/libstemmer_c/src_c/0000755000175000017500000000000013572540027013155 500000000000000yaz-5.28.0/libstemmer_c/src_c/stem_UTF_8_porter.h0000644000175000017500000000046613250277666016575 00000000000000 /* This file was generated automatically by the Snowball to ANSI C compiler */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * porter_UTF_8_create_env(void); extern void porter_UTF_8_close_env(struct SN_env * z); extern int porter_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif yaz-5.28.0/libstemmer_c/src_c/stem_UTF_8_english.c0000644000175000017500000011426013250277666016704 00000000000000 /* This file was generated automatically by the Snowball to ANSI C compiler */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int english_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_exception2(struct SN_env * z); static int r_exception1(struct SN_env * z); static int r_Step_5(struct SN_env * z); static int r_Step_4(struct SN_env * z); static int r_Step_3(struct SN_env * z); static int r_Step_2(struct SN_env * z); static int r_Step_1c(struct SN_env * z); static int r_Step_1b(struct SN_env * z); static int r_Step_1a(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_shortv(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * english_UTF_8_create_env(void); extern void english_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[5] = { 'a', 'r', 's', 'e', 'n' }; static const symbol s_0_1[6] = { 'c', 'o', 'm', 'm', 'u', 'n' }; static const symbol s_0_2[5] = { 'g', 'e', 'n', 'e', 'r' }; static const struct among a_0[3] = { /* 0 */ { 5, s_0_0, -1, -1, 0}, /* 1 */ { 6, s_0_1, -1, -1, 0}, /* 2 */ { 5, s_0_2, -1, -1, 0} }; static const symbol s_1_0[1] = { '\'' }; static const symbol s_1_1[3] = { '\'', 's', '\'' }; static const symbol s_1_2[2] = { '\'', 's' }; static const struct among a_1[3] = { /* 0 */ { 1, s_1_0, -1, 1, 0}, /* 1 */ { 3, s_1_1, 0, 1, 0}, /* 2 */ { 2, s_1_2, -1, 1, 0} }; static const symbol s_2_0[3] = { 'i', 'e', 'd' }; static const symbol s_2_1[1] = { 's' }; static const symbol s_2_2[3] = { 'i', 'e', 's' }; static const symbol s_2_3[4] = { 's', 's', 'e', 's' }; static const symbol s_2_4[2] = { 's', 's' }; static const symbol s_2_5[2] = { 'u', 's' }; static const struct among a_2[6] = { /* 0 */ { 3, s_2_0, -1, 2, 0}, /* 1 */ { 1, s_2_1, -1, 3, 0}, /* 2 */ { 3, s_2_2, 1, 2, 0}, /* 3 */ { 4, s_2_3, 1, 1, 0}, /* 4 */ { 2, s_2_4, 1, -1, 0}, /* 5 */ { 2, s_2_5, 1, -1, 0} }; static const symbol s_3_1[2] = { 'b', 'b' }; static const symbol s_3_2[2] = { 'd', 'd' }; static const symbol s_3_3[2] = { 'f', 'f' }; static const symbol s_3_4[2] = { 'g', 'g' }; static const symbol s_3_5[2] = { 'b', 'l' }; static const symbol s_3_6[2] = { 'm', 'm' }; static const symbol s_3_7[2] = { 'n', 'n' }; static const symbol s_3_8[2] = { 'p', 'p' }; static const symbol s_3_9[2] = { 'r', 'r' }; static const symbol s_3_10[2] = { 'a', 't' }; static const symbol s_3_11[2] = { 't', 't' }; static const symbol s_3_12[2] = { 'i', 'z' }; static const struct among a_3[13] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 2, s_3_1, 0, 2, 0}, /* 2 */ { 2, s_3_2, 0, 2, 0}, /* 3 */ { 2, s_3_3, 0, 2, 0}, /* 4 */ { 2, s_3_4, 0, 2, 0}, /* 5 */ { 2, s_3_5, 0, 1, 0}, /* 6 */ { 2, s_3_6, 0, 2, 0}, /* 7 */ { 2, s_3_7, 0, 2, 0}, /* 8 */ { 2, s_3_8, 0, 2, 0}, /* 9 */ { 2, s_3_9, 0, 2, 0}, /* 10 */ { 2, s_3_10, 0, 1, 0}, /* 11 */ { 2, s_3_11, 0, 2, 0}, /* 12 */ { 2, s_3_12, 0, 1, 0} }; static const symbol s_4_0[2] = { 'e', 'd' }; static const symbol s_4_1[3] = { 'e', 'e', 'd' }; static const symbol s_4_2[3] = { 'i', 'n', 'g' }; static const symbol s_4_3[4] = { 'e', 'd', 'l', 'y' }; static const symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' }; static const symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' }; static const struct among a_4[6] = { /* 0 */ { 2, s_4_0, -1, 2, 0}, /* 1 */ { 3, s_4_1, 0, 1, 0}, /* 2 */ { 3, s_4_2, -1, 2, 0}, /* 3 */ { 4, s_4_3, -1, 2, 0}, /* 4 */ { 5, s_4_4, 3, 1, 0}, /* 5 */ { 5, s_4_5, -1, 2, 0} }; static const symbol s_5_0[4] = { 'a', 'n', 'c', 'i' }; static const symbol s_5_1[4] = { 'e', 'n', 'c', 'i' }; static const symbol s_5_2[3] = { 'o', 'g', 'i' }; static const symbol s_5_3[2] = { 'l', 'i' }; static const symbol s_5_4[3] = { 'b', 'l', 'i' }; static const symbol s_5_5[4] = { 'a', 'b', 'l', 'i' }; static const symbol s_5_6[4] = { 'a', 'l', 'l', 'i' }; static const symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' }; static const symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' }; static const symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' }; static const symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' }; static const symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' }; static const symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; static const symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' }; static const symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' }; static const symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' }; static const symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; static const symbol s_5_19[4] = { 'i', 'z', 'e', 'r' }; static const symbol s_5_20[4] = { 'a', 't', 'o', 'r' }; static const symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; static const symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; static const symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; static const struct among a_5[24] = { /* 0 */ { 4, s_5_0, -1, 3, 0}, /* 1 */ { 4, s_5_1, -1, 2, 0}, /* 2 */ { 3, s_5_2, -1, 13, 0}, /* 3 */ { 2, s_5_3, -1, 16, 0}, /* 4 */ { 3, s_5_4, 3, 12, 0}, /* 5 */ { 4, s_5_5, 4, 4, 0}, /* 6 */ { 4, s_5_6, 3, 8, 0}, /* 7 */ { 5, s_5_7, 3, 14, 0}, /* 8 */ { 6, s_5_8, 3, 15, 0}, /* 9 */ { 5, s_5_9, 3, 10, 0}, /* 10 */ { 5, s_5_10, 3, 5, 0}, /* 11 */ { 5, s_5_11, -1, 8, 0}, /* 12 */ { 6, s_5_12, -1, 12, 0}, /* 13 */ { 5, s_5_13, -1, 11, 0}, /* 14 */ { 6, s_5_14, -1, 1, 0}, /* 15 */ { 7, s_5_15, 14, 7, 0}, /* 16 */ { 5, s_5_16, -1, 8, 0}, /* 17 */ { 5, s_5_17, -1, 7, 0}, /* 18 */ { 7, s_5_18, 17, 6, 0}, /* 19 */ { 4, s_5_19, -1, 6, 0}, /* 20 */ { 4, s_5_20, -1, 7, 0}, /* 21 */ { 7, s_5_21, -1, 11, 0}, /* 22 */ { 7, s_5_22, -1, 9, 0}, /* 23 */ { 7, s_5_23, -1, 10, 0} }; static const symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' }; static const symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' }; static const symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' }; static const symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' }; static const symbol s_6_4[4] = { 'i', 'c', 'a', 'l' }; static const symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_6_7[3] = { 'f', 'u', 'l' }; static const symbol s_6_8[4] = { 'n', 'e', 's', 's' }; static const struct among a_6[9] = { /* 0 */ { 5, s_6_0, -1, 4, 0}, /* 1 */ { 5, s_6_1, -1, 6, 0}, /* 2 */ { 5, s_6_2, -1, 3, 0}, /* 3 */ { 5, s_6_3, -1, 4, 0}, /* 4 */ { 4, s_6_4, -1, 4, 0}, /* 5 */ { 6, s_6_5, -1, 1, 0}, /* 6 */ { 7, s_6_6, 5, 2, 0}, /* 7 */ { 3, s_6_7, -1, 5, 0}, /* 8 */ { 4, s_6_8, -1, 5, 0} }; static const symbol s_7_0[2] = { 'i', 'c' }; static const symbol s_7_1[4] = { 'a', 'n', 'c', 'e' }; static const symbol s_7_2[4] = { 'e', 'n', 'c', 'e' }; static const symbol s_7_3[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_7_4[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_7_5[3] = { 'a', 't', 'e' }; static const symbol s_7_6[3] = { 'i', 'v', 'e' }; static const symbol s_7_7[3] = { 'i', 'z', 'e' }; static const symbol s_7_8[3] = { 'i', 't', 'i' }; static const symbol s_7_9[2] = { 'a', 'l' }; static const symbol s_7_10[3] = { 'i', 's', 'm' }; static const symbol s_7_11[3] = { 'i', 'o', 'n' }; static const symbol s_7_12[2] = { 'e', 'r' }; static const symbol s_7_13[3] = { 'o', 'u', 's' }; static const symbol s_7_14[3] = { 'a', 'n', 't' }; static const symbol s_7_15[3] = { 'e', 'n', 't' }; static const symbol s_7_16[4] = { 'm', 'e', 'n', 't' }; static const symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' }; static const struct among a_7[18] = { /* 0 */ { 2, s_7_0, -1, 1, 0}, /* 1 */ { 4, s_7_1, -1, 1, 0}, /* 2 */ { 4, s_7_2, -1, 1, 0}, /* 3 */ { 4, s_7_3, -1, 1, 0}, /* 4 */ { 4, s_7_4, -1, 1, 0}, /* 5 */ { 3, s_7_5, -1, 1, 0}, /* 6 */ { 3, s_7_6, -1, 1, 0}, /* 7 */ { 3, s_7_7, -1, 1, 0}, /* 8 */ { 3, s_7_8, -1, 1, 0}, /* 9 */ { 2, s_7_9, -1, 1, 0}, /* 10 */ { 3, s_7_10, -1, 1, 0}, /* 11 */ { 3, s_7_11, -1, 2, 0}, /* 12 */ { 2, s_7_12, -1, 1, 0}, /* 13 */ { 3, s_7_13, -1, 1, 0}, /* 14 */ { 3, s_7_14, -1, 1, 0}, /* 15 */ { 3, s_7_15, -1, 1, 0}, /* 16 */ { 4, s_7_16, 15, 1, 0}, /* 17 */ { 5, s_7_17, 16, 1, 0} }; static const symbol s_8_0[1] = { 'e' }; static const symbol s_8_1[1] = { 'l' }; static const struct among a_8[2] = { /* 0 */ { 1, s_8_0, -1, 1, 0}, /* 1 */ { 1, s_8_1, -1, 2, 0} }; static const symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' }; static const symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' }; static const symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' }; static const symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' }; static const symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' }; static const symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' }; static const symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' }; static const symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' }; static const struct among a_9[8] = { /* 0 */ { 7, s_9_0, -1, -1, 0}, /* 1 */ { 7, s_9_1, -1, -1, 0}, /* 2 */ { 6, s_9_2, -1, -1, 0}, /* 3 */ { 7, s_9_3, -1, -1, 0}, /* 4 */ { 6, s_9_4, -1, -1, 0}, /* 5 */ { 7, s_9_5, -1, -1, 0}, /* 6 */ { 7, s_9_6, -1, -1, 0}, /* 7 */ { 6, s_9_7, -1, -1, 0} }; static const symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' }; static const symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' }; static const symbol s_10_2[4] = { 'b', 'i', 'a', 's' }; static const symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' }; static const symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' }; static const symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' }; static const symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' }; static const symbol s_10_7[4] = { 'h', 'o', 'w', 'e' }; static const symbol s_10_8[4] = { 'i', 'd', 'l', 'y' }; static const symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' }; static const symbol s_10_10[4] = { 'n', 'e', 'w', 's' }; static const symbol s_10_11[4] = { 'o', 'n', 'l', 'y' }; static const symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' }; static const symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' }; static const symbol s_10_14[4] = { 's', 'k', 'i', 's' }; static const symbol s_10_15[3] = { 's', 'k', 'y' }; static const symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' }; static const symbol s_10_17[4] = { 'u', 'g', 'l', 'y' }; static const struct among a_10[18] = { /* 0 */ { 5, s_10_0, -1, -1, 0}, /* 1 */ { 5, s_10_1, -1, -1, 0}, /* 2 */ { 4, s_10_2, -1, -1, 0}, /* 3 */ { 6, s_10_3, -1, -1, 0}, /* 4 */ { 5, s_10_4, -1, 3, 0}, /* 5 */ { 5, s_10_5, -1, 9, 0}, /* 6 */ { 6, s_10_6, -1, 7, 0}, /* 7 */ { 4, s_10_7, -1, -1, 0}, /* 8 */ { 4, s_10_8, -1, 6, 0}, /* 9 */ { 5, s_10_9, -1, 4, 0}, /* 10 */ { 4, s_10_10, -1, -1, 0}, /* 11 */ { 4, s_10_11, -1, 10, 0}, /* 12 */ { 6, s_10_12, -1, 11, 0}, /* 13 */ { 5, s_10_13, -1, 2, 0}, /* 14 */ { 4, s_10_14, -1, 1, 0}, /* 15 */ { 3, s_10_15, -1, -1, 0}, /* 16 */ { 5, s_10_16, -1, 5, 0}, /* 17 */ { 4, s_10_17, -1, 8, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1 }; static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; static const unsigned char g_valid_LI[] = { 55, 141, 2 }; static const symbol s_0[] = { '\'' }; static const symbol s_1[] = { 'y' }; static const symbol s_2[] = { 'Y' }; static const symbol s_3[] = { 'y' }; static const symbol s_4[] = { 'Y' }; static const symbol s_5[] = { 's', 's' }; static const symbol s_6[] = { 'i' }; static const symbol s_7[] = { 'i', 'e' }; static const symbol s_8[] = { 'e', 'e' }; static const symbol s_9[] = { 'e' }; static const symbol s_10[] = { 'e' }; static const symbol s_11[] = { 'y' }; static const symbol s_12[] = { 'Y' }; static const symbol s_13[] = { 'i' }; static const symbol s_14[] = { 't', 'i', 'o', 'n' }; static const symbol s_15[] = { 'e', 'n', 'c', 'e' }; static const symbol s_16[] = { 'a', 'n', 'c', 'e' }; static const symbol s_17[] = { 'a', 'b', 'l', 'e' }; static const symbol s_18[] = { 'e', 'n', 't' }; static const symbol s_19[] = { 'i', 'z', 'e' }; static const symbol s_20[] = { 'a', 't', 'e' }; static const symbol s_21[] = { 'a', 'l' }; static const symbol s_22[] = { 'f', 'u', 'l' }; static const symbol s_23[] = { 'o', 'u', 's' }; static const symbol s_24[] = { 'i', 'v', 'e' }; static const symbol s_25[] = { 'b', 'l', 'e' }; static const symbol s_26[] = { 'l' }; static const symbol s_27[] = { 'o', 'g' }; static const symbol s_28[] = { 'f', 'u', 'l' }; static const symbol s_29[] = { 'l', 'e', 's', 's' }; static const symbol s_30[] = { 't', 'i', 'o', 'n' }; static const symbol s_31[] = { 'a', 't', 'e' }; static const symbol s_32[] = { 'a', 'l' }; static const symbol s_33[] = { 'i', 'c' }; static const symbol s_34[] = { 's' }; static const symbol s_35[] = { 't' }; static const symbol s_36[] = { 'l' }; static const symbol s_37[] = { 's', 'k', 'i' }; static const symbol s_38[] = { 's', 'k', 'y' }; static const symbol s_39[] = { 'd', 'i', 'e' }; static const symbol s_40[] = { 'l', 'i', 'e' }; static const symbol s_41[] = { 't', 'i', 'e' }; static const symbol s_42[] = { 'i', 'd', 'l' }; static const symbol s_43[] = { 'g', 'e', 'n', 't', 'l' }; static const symbol s_44[] = { 'u', 'g', 'l', 'i' }; static const symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' }; static const symbol s_46[] = { 'o', 'n', 'l', 'i' }; static const symbol s_47[] = { 's', 'i', 'n', 'g', 'l' }; static const symbol s_48[] = { 'Y' }; static const symbol s_49[] = { 'y' }; static int r_prelude(struct SN_env * z) { z->B[0] = 0; /* unset Y_found, line 26 */ { int c1 = z->c; /* do, line 27 */ z->bra = z->c; /* [, line 27 */ if (!(eq_s(z, 1, s_0))) goto lab0; z->ket = z->c; /* ], line 27 */ { int ret = slice_del(z); /* delete, line 27 */ if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 28 */ z->bra = z->c; /* [, line 28 */ if (!(eq_s(z, 1, s_1))) goto lab1; z->ket = z->c; /* ], line 28 */ { int ret = slice_from_s(z, 1, s_2); /* <-, line 28 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 28 */ lab1: z->c = c2; } { int c3 = z->c; /* do, line 29 */ while(1) { /* repeat, line 29 */ int c4 = z->c; while(1) { /* goto, line 29 */ int c5 = z->c; if (in_grouping_U(z, g_v, 97, 121, 0)) goto lab4; z->bra = z->c; /* [, line 29 */ if (!(eq_s(z, 1, s_3))) goto lab4; z->ket = z->c; /* ], line 29 */ z->c = c5; break; lab4: z->c = c5; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab3; z->c = ret; /* goto, line 29 */ } } { int ret = slice_from_s(z, 1, s_4); /* <-, line 29 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 29 */ continue; lab3: z->c = c4; break; } z->c = c3; } return 1; } static int r_mark_regions(struct SN_env * z) { z->I[0] = z->l; z->I[1] = z->l; { int c1 = z->c; /* do, line 35 */ { int c2 = z->c; /* or, line 41 */ if (z->c + 4 >= z->l || z->p[z->c + 4] >> 5 != 3 || !((2375680 >> (z->p[z->c + 4] & 0x1f)) & 1)) goto lab2; if (!(find_among(z, a_0, 3))) goto lab2; /* among, line 36 */ goto lab1; lab2: z->c = c2; { /* gopast */ /* grouping v, line 41 */ int ret = out_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* non v, line 41 */ int ret = in_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } } lab1: z->I[0] = z->c; /* setmark p1, line 42 */ { /* gopast */ /* grouping v, line 43 */ int ret = out_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* non v, line 43 */ int ret = in_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 43 */ lab0: z->c = c1; } return 1; } static int r_shortv(struct SN_env * z) { { int m1 = z->l - z->c; (void)m1; /* or, line 51 */ if (out_grouping_b_U(z, g_v_WXY, 89, 121, 0)) goto lab1; if (in_grouping_b_U(z, g_v, 97, 121, 0)) goto lab1; if (out_grouping_b_U(z, g_v, 97, 121, 0)) goto lab1; goto lab0; lab1: z->c = z->l - m1; if (out_grouping_b_U(z, g_v, 97, 121, 0)) return 0; if (in_grouping_b_U(z, g_v, 97, 121, 0)) return 0; if (z->c > z->lb) return 0; /* atlimit, line 52 */ } lab0: return 1; } static int r_R1(struct SN_env * z) { if (!(z->I[0] <= z->c)) return 0; return 1; } static int r_R2(struct SN_env * z) { if (!(z->I[1] <= z->c)) return 0; return 1; } static int r_Step_1a(struct SN_env * z) { int among_var; { int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 59 */ z->ket = z->c; /* [, line 60 */ if (z->c <= z->lb || (z->p[z->c - 1] != 39 && z->p[z->c - 1] != 115)) { z->c = z->l - m_keep; goto lab0; } among_var = find_among_b(z, a_1, 3); /* substring, line 60 */ if (!(among_var)) { z->c = z->l - m_keep; goto lab0; } z->bra = z->c; /* ], line 60 */ switch(among_var) { case 0: { z->c = z->l - m_keep; goto lab0; } case 1: { int ret = slice_del(z); /* delete, line 62 */ if (ret < 0) return ret; } break; } lab0: ; } z->ket = z->c; /* [, line 65 */ if (z->c <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 115)) return 0; among_var = find_among_b(z, a_2, 6); /* substring, line 65 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 65 */ switch(among_var) { case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_5); /* <-, line 66 */ if (ret < 0) return ret; } break; case 2: { int m1 = z->l - z->c; (void)m1; /* or, line 68 */ { int ret = skip_utf8(z->p, z->c, z->lb, z->l, - 2); if (ret < 0) goto lab2; z->c = ret; /* hop, line 68 */ } { int ret = slice_from_s(z, 1, s_6); /* <-, line 68 */ if (ret < 0) return ret; } goto lab1; lab2: z->c = z->l - m1; { int ret = slice_from_s(z, 2, s_7); /* <-, line 68 */ if (ret < 0) return ret; } } lab1: break; case 3: { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 69 */ } { /* gopast */ /* grouping v, line 69 */ int ret = out_grouping_b_U(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } { int ret = slice_del(z); /* delete, line 69 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_1b(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 75 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33554576 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; among_var = find_among_b(z, a_4, 6); /* substring, line 75 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 75 */ switch(among_var) { case 0: return 0; case 1: { int ret = r_R1(z); if (ret == 0) return 0; /* call R1, line 77 */ if (ret < 0) return ret; } { int ret = slice_from_s(z, 2, s_8); /* <-, line 77 */ if (ret < 0) return ret; } break; case 2: { int m_test = z->l - z->c; /* test, line 80 */ { /* gopast */ /* grouping v, line 80 */ int ret = out_grouping_b_U(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } z->c = z->l - m_test; } { int ret = slice_del(z); /* delete, line 80 */ if (ret < 0) return ret; } { int m_test = z->l - z->c; /* test, line 81 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else among_var = find_among_b(z, a_3, 13); /* substring, line 81 */ if (!(among_var)) return 0; z->c = z->l - m_test; } switch(among_var) { case 0: return 0; case 1: { int c_keep = z->c; int ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 83 */ z->c = c_keep; if (ret < 0) return ret; } break; case 2: z->ket = z->c; /* [, line 86 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 86 */ } z->bra = z->c; /* ], line 86 */ { int ret = slice_del(z); /* delete, line 86 */ if (ret < 0) return ret; } break; case 3: if (z->c != z->I[0]) return 0; /* atmark, line 87 */ { int m_test = z->l - z->c; /* test, line 87 */ { int ret = r_shortv(z); if (ret == 0) return 0; /* call shortv, line 87 */ if (ret < 0) return ret; } z->c = z->l - m_test; } { int c_keep = z->c; int ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 87 */ z->c = c_keep; if (ret < 0) return ret; } break; } break; } return 1; } static int r_Step_1c(struct SN_env * z) { z->ket = z->c; /* [, line 94 */ { int m1 = z->l - z->c; (void)m1; /* or, line 94 */ if (!(eq_s_b(z, 1, s_11))) goto lab1; goto lab0; lab1: z->c = z->l - m1; if (!(eq_s_b(z, 1, s_12))) return 0; } lab0: z->bra = z->c; /* ], line 94 */ if (out_grouping_b_U(z, g_v, 97, 121, 0)) return 0; { int m2 = z->l - z->c; (void)m2; /* not, line 95 */ if (z->c > z->lb) goto lab2; /* atlimit, line 95 */ return 0; lab2: z->c = z->l - m2; } { int ret = slice_from_s(z, 1, s_13); /* <-, line 96 */ if (ret < 0) return ret; } return 1; } static int r_Step_2(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 100 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; among_var = find_among_b(z, a_5, 24); /* substring, line 100 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 100 */ { int ret = r_R1(z); if (ret == 0) return 0; /* call R1, line 100 */ if (ret < 0) return ret; } switch(among_var) { case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_14); /* <-, line 101 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 4, s_15); /* <-, line 102 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 4, s_16); /* <-, line 103 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 4, s_17); /* <-, line 104 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 3, s_18); /* <-, line 105 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 3, s_19); /* <-, line 107 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 3, s_20); /* <-, line 109 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 2, s_21); /* <-, line 111 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 3, s_22); /* <-, line 112 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 3, s_23); /* <-, line 114 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 3, s_24); /* <-, line 116 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_from_s(z, 3, s_25); /* <-, line 118 */ if (ret < 0) return ret; } break; case 13: if (!(eq_s_b(z, 1, s_26))) return 0; { int ret = slice_from_s(z, 2, s_27); /* <-, line 119 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_from_s(z, 3, s_28); /* <-, line 120 */ if (ret < 0) return ret; } break; case 15: { int ret = slice_from_s(z, 4, s_29); /* <-, line 121 */ if (ret < 0) return ret; } break; case 16: if (in_grouping_b_U(z, g_valid_LI, 99, 116, 0)) return 0; { int ret = slice_del(z); /* delete, line 122 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_3(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 127 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; among_var = find_among_b(z, a_6, 9); /* substring, line 127 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 127 */ { int ret = r_R1(z); if (ret == 0) return 0; /* call R1, line 127 */ if (ret < 0) return ret; } switch(among_var) { case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_30); /* <-, line 128 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 3, s_31); /* <-, line 129 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_32); /* <-, line 130 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 2, s_33); /* <-, line 132 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } break; case 6: { int ret = r_R2(z); if (ret == 0) return 0; /* call R2, line 136 */ if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 136 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_4(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 141 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1864232 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; among_var = find_among_b(z, a_7, 18); /* substring, line 141 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 141 */ { int ret = r_R2(z); if (ret == 0) return 0; /* call R2, line 141 */ if (ret < 0) return ret; } switch(among_var) { case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 144 */ if (ret < 0) return ret; } break; case 2: { int m1 = z->l - z->c; (void)m1; /* or, line 145 */ if (!(eq_s_b(z, 1, s_34))) goto lab1; goto lab0; lab1: z->c = z->l - m1; if (!(eq_s_b(z, 1, s_35))) return 0; } lab0: { int ret = slice_del(z); /* delete, line 145 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_5(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 150 */ if (z->c <= z->lb || (z->p[z->c - 1] != 101 && z->p[z->c - 1] != 108)) return 0; among_var = find_among_b(z, a_8, 2); /* substring, line 150 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 150 */ switch(among_var) { case 0: return 0; case 1: { int m1 = z->l - z->c; (void)m1; /* or, line 151 */ { int ret = r_R2(z); if (ret == 0) goto lab1; /* call R2, line 151 */ if (ret < 0) return ret; } goto lab0; lab1: z->c = z->l - m1; { int ret = r_R1(z); if (ret == 0) return 0; /* call R1, line 151 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* not, line 151 */ { int ret = r_shortv(z); if (ret == 0) goto lab2; /* call shortv, line 151 */ if (ret < 0) return ret; } return 0; lab2: z->c = z->l - m2; } } lab0: { int ret = slice_del(z); /* delete, line 151 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); if (ret == 0) return 0; /* call R2, line 152 */ if (ret < 0) return ret; } if (!(eq_s_b(z, 1, s_36))) return 0; { int ret = slice_del(z); /* delete, line 152 */ if (ret < 0) return ret; } break; } return 1; } static int r_exception2(struct SN_env * z) { z->ket = z->c; /* [, line 158 */ if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0; if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 158 */ z->bra = z->c; /* ], line 158 */ if (z->c > z->lb) return 0; /* atlimit, line 158 */ return 1; } static int r_exception1(struct SN_env * z) { int among_var; z->bra = z->c; /* [, line 170 */ if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 3 || !((42750482 >> (z->p[z->c + 2] & 0x1f)) & 1)) return 0; among_var = find_among(z, a_10, 18); /* substring, line 170 */ if (!(among_var)) return 0; z->ket = z->c; /* ], line 170 */ if (z->c < z->l) return 0; /* atlimit, line 170 */ switch(among_var) { case 0: return 0; case 1: { int ret = slice_from_s(z, 3, s_37); /* <-, line 174 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 3, s_38); /* <-, line 175 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 3, s_39); /* <-, line 176 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 3, s_40); /* <-, line 177 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 3, s_41); /* <-, line 178 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 3, s_42); /* <-, line 182 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 5, s_43); /* <-, line 183 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 4, s_44); /* <-, line 184 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 5, s_45); /* <-, line 185 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 4, s_46); /* <-, line 186 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 5, s_47); /* <-, line 187 */ if (ret < 0) return ret; } break; } return 1; } static int r_postlude(struct SN_env * z) { if (!(z->B[0])) return 0; /* Boolean test Y_found, line 203 */ while(1) { /* repeat, line 203 */ int c1 = z->c; while(1) { /* goto, line 203 */ int c2 = z->c; z->bra = z->c; /* [, line 203 */ if (!(eq_s(z, 1, s_48))) goto lab1; z->ket = z->c; /* ], line 203 */ z->c = c2; break; lab1: z->c = c2; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* goto, line 203 */ } } { int ret = slice_from_s(z, 1, s_49); /* <-, line 203 */ if (ret < 0) return ret; } continue; lab0: z->c = c1; break; } return 1; } extern int english_UTF_8_stem(struct SN_env * z) { { int c1 = z->c; /* or, line 207 */ { int ret = r_exception1(z); if (ret == 0) goto lab1; /* call exception1, line 207 */ if (ret < 0) return ret; } goto lab0; lab1: z->c = c1; { int c2 = z->c; /* not, line 208 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, + 3); if (ret < 0) goto lab3; z->c = ret; /* hop, line 208 */ } goto lab2; lab3: z->c = c2; } goto lab0; lab2: z->c = c1; { int c3 = z->c; /* do, line 209 */ { int ret = r_prelude(z); if (ret == 0) goto lab4; /* call prelude, line 209 */ if (ret < 0) return ret; } lab4: z->c = c3; } { int c4 = z->c; /* do, line 210 */ { int ret = r_mark_regions(z); if (ret == 0) goto lab5; /* call mark_regions, line 210 */ if (ret < 0) return ret; } lab5: z->c = c4; } z->lb = z->c; z->c = z->l; /* backwards, line 211 */ { int m5 = z->l - z->c; (void)m5; /* do, line 213 */ { int ret = r_Step_1a(z); if (ret == 0) goto lab6; /* call Step_1a, line 213 */ if (ret < 0) return ret; } lab6: z->c = z->l - m5; } { int m6 = z->l - z->c; (void)m6; /* or, line 215 */ { int ret = r_exception2(z); if (ret == 0) goto lab8; /* call exception2, line 215 */ if (ret < 0) return ret; } goto lab7; lab8: z->c = z->l - m6; { int m7 = z->l - z->c; (void)m7; /* do, line 217 */ { int ret = r_Step_1b(z); if (ret == 0) goto lab9; /* call Step_1b, line 217 */ if (ret < 0) return ret; } lab9: z->c = z->l - m7; } { int m8 = z->l - z->c; (void)m8; /* do, line 218 */ { int ret = r_Step_1c(z); if (ret == 0) goto lab10; /* call Step_1c, line 218 */ if (ret < 0) return ret; } lab10: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 220 */ { int ret = r_Step_2(z); if (ret == 0) goto lab11; /* call Step_2, line 220 */ if (ret < 0) return ret; } lab11: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 221 */ { int ret = r_Step_3(z); if (ret == 0) goto lab12; /* call Step_3, line 221 */ if (ret < 0) return ret; } lab12: z->c = z->l - m10; } { int m11 = z->l - z->c; (void)m11; /* do, line 222 */ { int ret = r_Step_4(z); if (ret == 0) goto lab13; /* call Step_4, line 222 */ if (ret < 0) return ret; } lab13: z->c = z->l - m11; } { int m12 = z->l - z->c; (void)m12; /* do, line 224 */ { int ret = r_Step_5(z); if (ret == 0) goto lab14; /* call Step_5, line 224 */ if (ret < 0) return ret; } lab14: z->c = z->l - m12; } } lab7: z->c = z->lb; { int c13 = z->c; /* do, line 227 */ { int ret = r_postlude(z); if (ret == 0) goto lab15; /* call postlude, line 227 */ if (ret < 0) return ret; } lab15: z->c = c13; } } lab0: return 1; } extern struct SN_env * english_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } extern void english_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } yaz-5.28.0/libstemmer_c/src_c/stem_UTF_8_porter.c0000644000175000017500000006117313250277666016572 00000000000000 /* This file was generated automatically by the Snowball to ANSI C compiler */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int porter_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_Step_5b(struct SN_env * z); static int r_Step_5a(struct SN_env * z); static int r_Step_4(struct SN_env * z); static int r_Step_3(struct SN_env * z); static int r_Step_2(struct SN_env * z); static int r_Step_1c(struct SN_env * z); static int r_Step_1b(struct SN_env * z); static int r_Step_1a(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_shortv(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * porter_UTF_8_create_env(void); extern void porter_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[1] = { 's' }; static const symbol s_0_1[3] = { 'i', 'e', 's' }; static const symbol s_0_2[4] = { 's', 's', 'e', 's' }; static const symbol s_0_3[2] = { 's', 's' }; static const struct among a_0[4] = { /* 0 */ { 1, s_0_0, -1, 3, 0}, /* 1 */ { 3, s_0_1, 0, 2, 0}, /* 2 */ { 4, s_0_2, 0, 1, 0}, /* 3 */ { 2, s_0_3, 0, -1, 0} }; static const symbol s_1_1[2] = { 'b', 'b' }; static const symbol s_1_2[2] = { 'd', 'd' }; static const symbol s_1_3[2] = { 'f', 'f' }; static const symbol s_1_4[2] = { 'g', 'g' }; static const symbol s_1_5[2] = { 'b', 'l' }; static const symbol s_1_6[2] = { 'm', 'm' }; static const symbol s_1_7[2] = { 'n', 'n' }; static const symbol s_1_8[2] = { 'p', 'p' }; static const symbol s_1_9[2] = { 'r', 'r' }; static const symbol s_1_10[2] = { 'a', 't' }; static const symbol s_1_11[2] = { 't', 't' }; static const symbol s_1_12[2] = { 'i', 'z' }; static const struct among a_1[13] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 2, s_1_1, 0, 2, 0}, /* 2 */ { 2, s_1_2, 0, 2, 0}, /* 3 */ { 2, s_1_3, 0, 2, 0}, /* 4 */ { 2, s_1_4, 0, 2, 0}, /* 5 */ { 2, s_1_5, 0, 1, 0}, /* 6 */ { 2, s_1_6, 0, 2, 0}, /* 7 */ { 2, s_1_7, 0, 2, 0}, /* 8 */ { 2, s_1_8, 0, 2, 0}, /* 9 */ { 2, s_1_9, 0, 2, 0}, /* 10 */ { 2, s_1_10, 0, 1, 0}, /* 11 */ { 2, s_1_11, 0, 2, 0}, /* 12 */ { 2, s_1_12, 0, 1, 0} }; static const symbol s_2_0[2] = { 'e', 'd' }; static const symbol s_2_1[3] = { 'e', 'e', 'd' }; static const symbol s_2_2[3] = { 'i', 'n', 'g' }; static const struct among a_2[3] = { /* 0 */ { 2, s_2_0, -1, 2, 0}, /* 1 */ { 3, s_2_1, 0, 1, 0}, /* 2 */ { 3, s_2_2, -1, 2, 0} }; static const symbol s_3_0[4] = { 'a', 'n', 'c', 'i' }; static const symbol s_3_1[4] = { 'e', 'n', 'c', 'i' }; static const symbol s_3_2[4] = { 'a', 'b', 'l', 'i' }; static const symbol s_3_3[3] = { 'e', 'l', 'i' }; static const symbol s_3_4[4] = { 'a', 'l', 'l', 'i' }; static const symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' }; static const symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' }; static const symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' }; static const symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; static const symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' }; static const symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' }; static const symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' }; static const symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; static const symbol s_3_15[4] = { 'i', 'z', 'e', 'r' }; static const symbol s_3_16[4] = { 'a', 't', 'o', 'r' }; static const symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; static const symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; static const symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; static const struct among a_3[20] = { /* 0 */ { 4, s_3_0, -1, 3, 0}, /* 1 */ { 4, s_3_1, -1, 2, 0}, /* 2 */ { 4, s_3_2, -1, 4, 0}, /* 3 */ { 3, s_3_3, -1, 6, 0}, /* 4 */ { 4, s_3_4, -1, 9, 0}, /* 5 */ { 5, s_3_5, -1, 12, 0}, /* 6 */ { 5, s_3_6, -1, 5, 0}, /* 7 */ { 5, s_3_7, -1, 10, 0}, /* 8 */ { 6, s_3_8, -1, 14, 0}, /* 9 */ { 5, s_3_9, -1, 13, 0}, /* 10 */ { 6, s_3_10, -1, 1, 0}, /* 11 */ { 7, s_3_11, 10, 8, 0}, /* 12 */ { 5, s_3_12, -1, 10, 0}, /* 13 */ { 5, s_3_13, -1, 8, 0}, /* 14 */ { 7, s_3_14, 13, 7, 0}, /* 15 */ { 4, s_3_15, -1, 7, 0}, /* 16 */ { 4, s_3_16, -1, 8, 0}, /* 17 */ { 7, s_3_17, -1, 13, 0}, /* 18 */ { 7, s_3_18, -1, 11, 0}, /* 19 */ { 7, s_3_19, -1, 12, 0} }; static const symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' }; static const symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' }; static const symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' }; static const symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' }; static const symbol s_4_4[4] = { 'i', 'c', 'a', 'l' }; static const symbol s_4_5[3] = { 'f', 'u', 'l' }; static const symbol s_4_6[4] = { 'n', 'e', 's', 's' }; static const struct among a_4[7] = { /* 0 */ { 5, s_4_0, -1, 2, 0}, /* 1 */ { 5, s_4_1, -1, 3, 0}, /* 2 */ { 5, s_4_2, -1, 1, 0}, /* 3 */ { 5, s_4_3, -1, 2, 0}, /* 4 */ { 4, s_4_4, -1, 2, 0}, /* 5 */ { 3, s_4_5, -1, 3, 0}, /* 6 */ { 4, s_4_6, -1, 3, 0} }; static const symbol s_5_0[2] = { 'i', 'c' }; static const symbol s_5_1[4] = { 'a', 'n', 'c', 'e' }; static const symbol s_5_2[4] = { 'e', 'n', 'c', 'e' }; static const symbol s_5_3[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_5_4[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_5_5[3] = { 'a', 't', 'e' }; static const symbol s_5_6[3] = { 'i', 'v', 'e' }; static const symbol s_5_7[3] = { 'i', 'z', 'e' }; static const symbol s_5_8[3] = { 'i', 't', 'i' }; static const symbol s_5_9[2] = { 'a', 'l' }; static const symbol s_5_10[3] = { 'i', 's', 'm' }; static const symbol s_5_11[3] = { 'i', 'o', 'n' }; static const symbol s_5_12[2] = { 'e', 'r' }; static const symbol s_5_13[3] = { 'o', 'u', 's' }; static const symbol s_5_14[3] = { 'a', 'n', 't' }; static const symbol s_5_15[3] = { 'e', 'n', 't' }; static const symbol s_5_16[4] = { 'm', 'e', 'n', 't' }; static const symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' }; static const symbol s_5_18[2] = { 'o', 'u' }; static const struct among a_5[19] = { /* 0 */ { 2, s_5_0, -1, 1, 0}, /* 1 */ { 4, s_5_1, -1, 1, 0}, /* 2 */ { 4, s_5_2, -1, 1, 0}, /* 3 */ { 4, s_5_3, -1, 1, 0}, /* 4 */ { 4, s_5_4, -1, 1, 0}, /* 5 */ { 3, s_5_5, -1, 1, 0}, /* 6 */ { 3, s_5_6, -1, 1, 0}, /* 7 */ { 3, s_5_7, -1, 1, 0}, /* 8 */ { 3, s_5_8, -1, 1, 0}, /* 9 */ { 2, s_5_9, -1, 1, 0}, /* 10 */ { 3, s_5_10, -1, 1, 0}, /* 11 */ { 3, s_5_11, -1, 2, 0}, /* 12 */ { 2, s_5_12, -1, 1, 0}, /* 13 */ { 3, s_5_13, -1, 1, 0}, /* 14 */ { 3, s_5_14, -1, 1, 0}, /* 15 */ { 3, s_5_15, -1, 1, 0}, /* 16 */ { 4, s_5_16, 15, 1, 0}, /* 17 */ { 5, s_5_17, 16, 1, 0}, /* 18 */ { 2, s_5_18, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1 }; static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; static const symbol s_0[] = { 's', 's' }; static const symbol s_1[] = { 'i' }; static const symbol s_2[] = { 'e', 'e' }; static const symbol s_3[] = { 'e' }; static const symbol s_4[] = { 'e' }; static const symbol s_5[] = { 'y' }; static const symbol s_6[] = { 'Y' }; static const symbol s_7[] = { 'i' }; static const symbol s_8[] = { 't', 'i', 'o', 'n' }; static const symbol s_9[] = { 'e', 'n', 'c', 'e' }; static const symbol s_10[] = { 'a', 'n', 'c', 'e' }; static const symbol s_11[] = { 'a', 'b', 'l', 'e' }; static const symbol s_12[] = { 'e', 'n', 't' }; static const symbol s_13[] = { 'e' }; static const symbol s_14[] = { 'i', 'z', 'e' }; static const symbol s_15[] = { 'a', 't', 'e' }; static const symbol s_16[] = { 'a', 'l' }; static const symbol s_17[] = { 'a', 'l' }; static const symbol s_18[] = { 'f', 'u', 'l' }; static const symbol s_19[] = { 'o', 'u', 's' }; static const symbol s_20[] = { 'i', 'v', 'e' }; static const symbol s_21[] = { 'b', 'l', 'e' }; static const symbol s_22[] = { 'a', 'l' }; static const symbol s_23[] = { 'i', 'c' }; static const symbol s_24[] = { 's' }; static const symbol s_25[] = { 't' }; static const symbol s_26[] = { 'e' }; static const symbol s_27[] = { 'l' }; static const symbol s_28[] = { 'l' }; static const symbol s_29[] = { 'y' }; static const symbol s_30[] = { 'Y' }; static const symbol s_31[] = { 'y' }; static const symbol s_32[] = { 'Y' }; static const symbol s_33[] = { 'Y' }; static const symbol s_34[] = { 'y' }; static int r_shortv(struct SN_env * z) { if (out_grouping_b_U(z, g_v_WXY, 89, 121, 0)) return 0; if (in_grouping_b_U(z, g_v, 97, 121, 0)) return 0; if (out_grouping_b_U(z, g_v, 97, 121, 0)) return 0; return 1; } static int r_R1(struct SN_env * z) { if (!(z->I[0] <= z->c)) return 0; return 1; } static int r_R2(struct SN_env * z) { if (!(z->I[1] <= z->c)) return 0; return 1; } static int r_Step_1a(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 25 */ if (z->c <= z->lb || z->p[z->c - 1] != 115) return 0; among_var = find_among_b(z, a_0, 4); /* substring, line 25 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 25 */ switch(among_var) { case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_0); /* <-, line 26 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 27 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 29 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_1b(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 34 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0; among_var = find_among_b(z, a_2, 3); /* substring, line 34 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 34 */ switch(among_var) { case 0: return 0; case 1: { int ret = r_R1(z); if (ret == 0) return 0; /* call R1, line 35 */ if (ret < 0) return ret; } { int ret = slice_from_s(z, 2, s_2); /* <-, line 35 */ if (ret < 0) return ret; } break; case 2: { int m_test = z->l - z->c; /* test, line 38 */ { /* gopast */ /* grouping v, line 38 */ int ret = out_grouping_b_U(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } z->c = z->l - m_test; } { int ret = slice_del(z); /* delete, line 38 */ if (ret < 0) return ret; } { int m_test = z->l - z->c; /* test, line 39 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else among_var = find_among_b(z, a_1, 13); /* substring, line 39 */ if (!(among_var)) return 0; z->c = z->l - m_test; } switch(among_var) { case 0: return 0; case 1: { int c_keep = z->c; int ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */ z->c = c_keep; if (ret < 0) return ret; } break; case 2: z->ket = z->c; /* [, line 44 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 44 */ } z->bra = z->c; /* ], line 44 */ { int ret = slice_del(z); /* delete, line 44 */ if (ret < 0) return ret; } break; case 3: if (z->c != z->I[0]) return 0; /* atmark, line 45 */ { int m_test = z->l - z->c; /* test, line 45 */ { int ret = r_shortv(z); if (ret == 0) return 0; /* call shortv, line 45 */ if (ret < 0) return ret; } z->c = z->l - m_test; } { int c_keep = z->c; int ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */ z->c = c_keep; if (ret < 0) return ret; } break; } break; } return 1; } static int r_Step_1c(struct SN_env * z) { z->ket = z->c; /* [, line 52 */ { int m1 = z->l - z->c; (void)m1; /* or, line 52 */ if (!(eq_s_b(z, 1, s_5))) goto lab1; goto lab0; lab1: z->c = z->l - m1; if (!(eq_s_b(z, 1, s_6))) return 0; } lab0: z->bra = z->c; /* ], line 52 */ { /* gopast */ /* grouping v, line 53 */ int ret = out_grouping_b_U(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } { int ret = slice_from_s(z, 1, s_7); /* <-, line 54 */ if (ret < 0) return ret; } return 1; } static int r_Step_2(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 58 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; among_var = find_among_b(z, a_3, 20); /* substring, line 58 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 58 */ { int ret = r_R1(z); if (ret == 0) return 0; /* call R1, line 58 */ if (ret < 0) return ret; } switch(among_var) { case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_8); /* <-, line 59 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 4, s_9); /* <-, line 60 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 4, s_10); /* <-, line 61 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 4, s_11); /* <-, line 62 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 3, s_12); /* <-, line 63 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 1, s_13); /* <-, line 64 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 3, s_14); /* <-, line 66 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 3, s_15); /* <-, line 68 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 2, s_16); /* <-, line 69 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 2, s_17); /* <-, line 71 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 3, s_18); /* <-, line 72 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_from_s(z, 3, s_19); /* <-, line 74 */ if (ret < 0) return ret; } break; case 13: { int ret = slice_from_s(z, 3, s_20); /* <-, line 76 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_from_s(z, 3, s_21); /* <-, line 77 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_3(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 82 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; among_var = find_among_b(z, a_4, 7); /* substring, line 82 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 82 */ { int ret = r_R1(z); if (ret == 0) return 0; /* call R1, line 82 */ if (ret < 0) return ret; } switch(among_var) { case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_22); /* <-, line 83 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_23); /* <-, line 85 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 87 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_4(struct SN_env * z) { int among_var; z->ket = z->c; /* [, line 92 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((3961384 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; among_var = find_among_b(z, a_5, 19); /* substring, line 92 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 92 */ { int ret = r_R2(z); if (ret == 0) return 0; /* call R2, line 92 */ if (ret < 0) return ret; } switch(among_var) { case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 95 */ if (ret < 0) return ret; } break; case 2: { int m1 = z->l - z->c; (void)m1; /* or, line 96 */ if (!(eq_s_b(z, 1, s_24))) goto lab1; goto lab0; lab1: z->c = z->l - m1; if (!(eq_s_b(z, 1, s_25))) return 0; } lab0: { int ret = slice_del(z); /* delete, line 96 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_5a(struct SN_env * z) { z->ket = z->c; /* [, line 101 */ if (!(eq_s_b(z, 1, s_26))) return 0; z->bra = z->c; /* ], line 101 */ { int m1 = z->l - z->c; (void)m1; /* or, line 102 */ { int ret = r_R2(z); if (ret == 0) goto lab1; /* call R2, line 102 */ if (ret < 0) return ret; } goto lab0; lab1: z->c = z->l - m1; { int ret = r_R1(z); if (ret == 0) return 0; /* call R1, line 102 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* not, line 102 */ { int ret = r_shortv(z); if (ret == 0) goto lab2; /* call shortv, line 102 */ if (ret < 0) return ret; } return 0; lab2: z->c = z->l - m2; } } lab0: { int ret = slice_del(z); /* delete, line 103 */ if (ret < 0) return ret; } return 1; } static int r_Step_5b(struct SN_env * z) { z->ket = z->c; /* [, line 107 */ if (!(eq_s_b(z, 1, s_27))) return 0; z->bra = z->c; /* ], line 107 */ { int ret = r_R2(z); if (ret == 0) return 0; /* call R2, line 108 */ if (ret < 0) return ret; } if (!(eq_s_b(z, 1, s_28))) return 0; { int ret = slice_del(z); /* delete, line 109 */ if (ret < 0) return ret; } return 1; } extern int porter_UTF_8_stem(struct SN_env * z) { z->B[0] = 0; /* unset Y_found, line 115 */ { int c1 = z->c; /* do, line 116 */ z->bra = z->c; /* [, line 116 */ if (!(eq_s(z, 1, s_29))) goto lab0; z->ket = z->c; /* ], line 116 */ { int ret = slice_from_s(z, 1, s_30); /* <-, line 116 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 116 */ lab0: z->c = c1; } { int c2 = z->c; /* do, line 117 */ while(1) { /* repeat, line 117 */ int c3 = z->c; while(1) { /* goto, line 117 */ int c4 = z->c; if (in_grouping_U(z, g_v, 97, 121, 0)) goto lab3; z->bra = z->c; /* [, line 117 */ if (!(eq_s(z, 1, s_31))) goto lab3; z->ket = z->c; /* ], line 117 */ z->c = c4; break; lab3: z->c = c4; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab2; z->c = ret; /* goto, line 117 */ } } { int ret = slice_from_s(z, 1, s_32); /* <-, line 117 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 117 */ continue; lab2: z->c = c3; break; } z->c = c2; } z->I[0] = z->l; z->I[1] = z->l; { int c5 = z->c; /* do, line 121 */ { /* gopast */ /* grouping v, line 122 */ int ret = out_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 122 */ int ret = in_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 122 */ { /* gopast */ /* grouping v, line 123 */ int ret = out_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 123 */ int ret = in_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 123 */ lab4: z->c = c5; } z->lb = z->c; z->c = z->l; /* backwards, line 126 */ { int m6 = z->l - z->c; (void)m6; /* do, line 127 */ { int ret = r_Step_1a(z); if (ret == 0) goto lab5; /* call Step_1a, line 127 */ if (ret < 0) return ret; } lab5: z->c = z->l - m6; } { int m7 = z->l - z->c; (void)m7; /* do, line 128 */ { int ret = r_Step_1b(z); if (ret == 0) goto lab6; /* call Step_1b, line 128 */ if (ret < 0) return ret; } lab6: z->c = z->l - m7; } { int m8 = z->l - z->c; (void)m8; /* do, line 129 */ { int ret = r_Step_1c(z); if (ret == 0) goto lab7; /* call Step_1c, line 129 */ if (ret < 0) return ret; } lab7: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 130 */ { int ret = r_Step_2(z); if (ret == 0) goto lab8; /* call Step_2, line 130 */ if (ret < 0) return ret; } lab8: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 131 */ { int ret = r_Step_3(z); if (ret == 0) goto lab9; /* call Step_3, line 131 */ if (ret < 0) return ret; } lab9: z->c = z->l - m10; } { int m11 = z->l - z->c; (void)m11; /* do, line 132 */ { int ret = r_Step_4(z); if (ret == 0) goto lab10; /* call Step_4, line 132 */ if (ret < 0) return ret; } lab10: z->c = z->l - m11; } { int m12 = z->l - z->c; (void)m12; /* do, line 133 */ { int ret = r_Step_5a(z); if (ret == 0) goto lab11; /* call Step_5a, line 133 */ if (ret < 0) return ret; } lab11: z->c = z->l - m12; } { int m13 = z->l - z->c; (void)m13; /* do, line 134 */ { int ret = r_Step_5b(z); if (ret == 0) goto lab12; /* call Step_5b, line 134 */ if (ret < 0) return ret; } lab12: z->c = z->l - m13; } z->c = z->lb; { int c14 = z->c; /* do, line 137 */ if (!(z->B[0])) goto lab13; /* Boolean test Y_found, line 137 */ while(1) { /* repeat, line 137 */ int c15 = z->c; while(1) { /* goto, line 137 */ int c16 = z->c; z->bra = z->c; /* [, line 137 */ if (!(eq_s(z, 1, s_33))) goto lab15; z->ket = z->c; /* ], line 137 */ z->c = c16; break; lab15: z->c = c16; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab14; z->c = ret; /* goto, line 137 */ } } { int ret = slice_from_s(z, 1, s_34); /* <-, line 137 */ if (ret < 0) return ret; } continue; lab14: z->c = c15; break; } lab13: z->c = c14; } return 1; } extern struct SN_env * porter_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } extern void porter_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } yaz-5.28.0/libstemmer_c/src_c/stem_UTF_8_english.h0000644000175000017500000000047113250277666016707 00000000000000 /* This file was generated automatically by the Snowball to ANSI C compiler */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * english_UTF_8_create_env(void); extern void english_UTF_8_close_env(struct SN_env * z); extern int english_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif yaz-5.28.0/libstemmer_c/runtime/0000755000175000017500000000000013572540027013547 500000000000000yaz-5.28.0/libstemmer_c/runtime/api.c0000644000175000017500000000255013250277666014417 00000000000000 #include /* for calloc, free */ #include "header.h" extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size) { struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); if (z == NULL) return NULL; z->p = create_s(); if (z->p == NULL) goto error; if (S_size) { int i; z->S = (symbol * *) calloc(S_size, sizeof(symbol *)); if (z->S == NULL) goto error; for (i = 0; i < S_size; i++) { z->S[i] = create_s(); if (z->S[i] == NULL) goto error; } } if (I_size) { z->I = (int *) calloc(I_size, sizeof(int)); if (z->I == NULL) goto error; } if (B_size) { z->B = (unsigned char *) calloc(B_size, sizeof(unsigned char)); if (z->B == NULL) goto error; } return z; error: SN_close_env(z, S_size); return NULL; } extern void SN_close_env(struct SN_env * z, int S_size) { if (z == NULL) return; if (S_size) { int i; for (i = 0; i < S_size; i++) { lose_s(z->S[i]); } free(z->S); } free(z->I); free(z->B); if (z->p) lose_s(z->p); free(z); } extern int SN_set_current(struct SN_env * z, int size, const symbol * s) { int err = replace_s(z, 0, z->l, size, s, NULL); z->c = 0; return err; } yaz-5.28.0/libstemmer_c/runtime/utilities.c0000644000175000017500000003134313250277666015663 00000000000000 #include #include #include #include "header.h" #define unless(C) if(!(C)) #define CREATE_SIZE 1 extern symbol * create_s(void) { symbol * p; void * mem = malloc(HEAD + (CREATE_SIZE + 1) * sizeof(symbol)); if (mem == NULL) return NULL; p = (symbol *) (HEAD + (char *) mem); CAPACITY(p) = CREATE_SIZE; SET_SIZE(p, CREATE_SIZE); return p; } extern void lose_s(symbol * p) { if (p == NULL) return; free((char *) p - HEAD); } /* new_p = skip_utf8(p, c, lb, l, n); skips n characters forwards from p + c if n +ve, or n characters backwards from p + c - 1 if n -ve. new_p is the new position, or 0 on failure. -- used to implement hop and next in the utf8 case. */ extern int skip_utf8(const symbol * p, int c, int lb, int l, int n) { int b; if (n >= 0) { for (; n > 0; n--) { if (c >= l) return -1; b = p[c++]; if (b >= 0xC0) { /* 1100 0000 */ while (c < l) { b = p[c]; if (b >= 0xC0 || b < 0x80) break; /* break unless b is 10------ */ c++; } } } } else { for (; n < 0; n++) { if (c <= lb) return -1; b = p[--c]; if (b >= 0x80) { /* 1000 0000 */ while (c > lb) { b = p[c]; if (b >= 0xC0) break; /* 1100 0000 */ c--; } } } } return c; } /* Code for character groupings: utf8 cases */ static int get_utf8(const symbol * p, int c, int l, int * slot) { int b0, b1; if (c >= l) return 0; b0 = p[c++]; if (b0 < 0xC0 || c == l) { /* 1100 0000 */ * slot = b0; return 1; } b1 = p[c++]; if (b0 < 0xE0 || c == l) { /* 1110 0000 */ * slot = (b0 & 0x1F) << 6 | (b1 & 0x3F); return 2; } * slot = (b0 & 0xF) << 12 | (b1 & 0x3F) << 6 | (p[c] & 0x3F); return 3; } static int get_b_utf8(const symbol * p, int c, int lb, int * slot) { int b0, b1; if (c <= lb) return 0; b0 = p[--c]; if (b0 < 0x80 || c == lb) { /* 1000 0000 */ * slot = b0; return 1; } b1 = p[--c]; if (b1 >= 0xC0 || c == lb) { /* 1100 0000 */ * slot = (b1 & 0x1F) << 6 | (b0 & 0x3F); return 2; } * slot = (p[c] & 0xF) << 12 | (b1 & 0x3F) << 6 | (b0 & 0x3F); return 3; } extern int in_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; int w = get_utf8(z->p, z->c, z->l, & ch); unless (w) return -1; if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return w; z->c += w; } while (repeat); return 0; } extern int in_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; int w = get_b_utf8(z->p, z->c, z->lb, & ch); unless (w) return -1; if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return w; z->c -= w; } while (repeat); return 0; } extern int out_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; int w = get_utf8(z->p, z->c, z->l, & ch); unless (w) return -1; unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return w; z->c += w; } while (repeat); return 0; } extern int out_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; int w = get_b_utf8(z->p, z->c, z->lb, & ch); unless (w) return -1; unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return w; z->c -= w; } while (repeat); return 0; } /* Code for character groupings: non-utf8 cases */ extern int in_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; if (z->c >= z->l) return -1; ch = z->p[z->c]; if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 1; z->c++; } while (repeat); return 0; } extern int in_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; if (z->c <= z->lb) return -1; ch = z->p[z->c - 1]; if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 1; z->c--; } while (repeat); return 0; } extern int out_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; if (z->c >= z->l) return -1; ch = z->p[z->c]; unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 1; z->c++; } while (repeat); return 0; } extern int out_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; if (z->c <= z->lb) return -1; ch = z->p[z->c - 1]; unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 1; z->c--; } while (repeat); return 0; } extern int eq_s(struct SN_env * z, int s_size, const symbol * s) { if (z->l - z->c < s_size || memcmp(z->p + z->c, s, s_size * sizeof(symbol)) != 0) return 0; z->c += s_size; return 1; } extern int eq_s_b(struct SN_env * z, int s_size, const symbol * s) { if (z->c - z->lb < s_size || memcmp(z->p + z->c - s_size, s, s_size * sizeof(symbol)) != 0) return 0; z->c -= s_size; return 1; } extern int eq_v(struct SN_env * z, const symbol * p) { return eq_s(z, SIZE(p), p); } extern int eq_v_b(struct SN_env * z, const symbol * p) { return eq_s_b(z, SIZE(p), p); } extern int find_among(struct SN_env * z, const struct among * v, int v_size) { int i = 0; int j = v_size; int c = z->c; int l = z->l; symbol * q = z->p + c; const struct among * w; int common_i = 0; int common_j = 0; int first_key_inspected = 0; while(1) { int k = i + ((j - i) >> 1); int diff = 0; int common = common_i < common_j ? common_i : common_j; /* smaller */ w = v + k; { int i2; for (i2 = common; i2 < w->s_size; i2++) { if (c + common == l) { diff = -1; break; } diff = q[common] - w->s[i2]; if (diff != 0) break; common++; } } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) break; /* v->s has been inspected */ if (j == i) break; /* only one item in v */ /* - but now we need to go round once more to get v->s inspected. This looks messy, but is actually the optimal approach. */ if (first_key_inspected) break; first_key_inspected = 1; } } while(1) { w = v + i; if (common_i >= w->s_size) { z->c = c + w->s_size; if (w->function == 0) return w->result; { int res = w->function(z); z->c = c + w->s_size; if (res) return w->result; } } i = w->substring_i; if (i < 0) return 0; } } /* find_among_b is for backwards processing. Same comments apply */ extern int find_among_b(struct SN_env * z, const struct among * v, int v_size) { int i = 0; int j = v_size; int c = z->c; int lb = z->lb; symbol * q = z->p + c - 1; const struct among * w; int common_i = 0; int common_j = 0; int first_key_inspected = 0; while(1) { int k = i + ((j - i) >> 1); int diff = 0; int common = common_i < common_j ? common_i : common_j; w = v + k; { int i2; for (i2 = w->s_size - 1 - common; i2 >= 0; i2--) { if (c - common == lb) { diff = -1; break; } diff = q[- common] - w->s[i2]; if (diff != 0) break; common++; } } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) break; if (j == i) break; if (first_key_inspected) break; first_key_inspected = 1; } } while(1) { w = v + i; if (common_i >= w->s_size) { z->c = c - w->s_size; if (w->function == 0) return w->result; { int res = w->function(z); z->c = c - w->s_size; if (res) return w->result; } } i = w->substring_i; if (i < 0) return 0; } } /* Increase the size of the buffer pointed to by p to at least n symbols. * If insufficient memory, returns NULL and frees the old buffer. */ static symbol * increase_size(symbol * p, int n) { symbol * q; int new_size = n + 20; void * mem = realloc((char *) p - HEAD, HEAD + (new_size + 1) * sizeof(symbol)); if (mem == NULL) { lose_s(p); return NULL; } q = (symbol *) (HEAD + (char *)mem); CAPACITY(q) = new_size; return q; } /* to replace symbols between c_bra and c_ket in z->p by the s_size symbols at s. Returns 0 on success, -1 on error. Also, frees z->p (and sets it to NULL) on error. */ extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjptr) { int adjustment; int len; if (z->p == NULL) { z->p = create_s(); if (z->p == NULL) return -1; } adjustment = s_size - (c_ket - c_bra); len = SIZE(z->p); if (adjustment != 0) { if (adjustment + len > CAPACITY(z->p)) { z->p = increase_size(z->p, adjustment + len); if (z->p == NULL) return -1; } memmove(z->p + c_ket + adjustment, z->p + c_ket, (len - c_ket) * sizeof(symbol)); SET_SIZE(z->p, adjustment + len); z->l += adjustment; if (z->c >= c_ket) z->c += adjustment; else if (z->c > c_bra) z->c = c_bra; } unless (s_size == 0) memmove(z->p + c_bra, s, s_size * sizeof(symbol)); if (adjptr != NULL) *adjptr = adjustment; return 0; } static int slice_check(struct SN_env * z) { if (z->bra < 0 || z->bra > z->ket || z->ket > z->l || z->p == NULL || z->l > SIZE(z->p)) /* this line could be removed */ { #if 0 fprintf(stderr, "faulty slice operation:\n"); debug(z, -1, 0); #endif return -1; } return 0; } extern int slice_from_s(struct SN_env * z, int s_size, const symbol * s) { if (slice_check(z)) return -1; return replace_s(z, z->bra, z->ket, s_size, s, NULL); } extern int slice_from_v(struct SN_env * z, const symbol * p) { return slice_from_s(z, SIZE(p), p); } extern int slice_del(struct SN_env * z) { return slice_from_s(z, 0, 0); } extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, const symbol * s) { int adjustment; if (replace_s(z, bra, ket, s_size, s, &adjustment)) return -1; if (bra <= z->bra) z->bra += adjustment; if (bra <= z->ket) z->ket += adjustment; return 0; } extern int insert_v(struct SN_env * z, int bra, int ket, const symbol * p) { int adjustment; if (replace_s(z, bra, ket, SIZE(p), p, &adjustment)) return -1; if (bra <= z->bra) z->bra += adjustment; if (bra <= z->ket) z->ket += adjustment; return 0; } extern symbol * slice_to(struct SN_env * z, symbol * p) { if (slice_check(z)) { lose_s(p); return NULL; } { int len = z->ket - z->bra; if (CAPACITY(p) < len) { p = increase_size(p, len); if (p == NULL) return NULL; } memmove(p, z->p + z->bra, len * sizeof(symbol)); SET_SIZE(p, len); } return p; } extern symbol * assign_to(struct SN_env * z, symbol * p) { int len = z->l; if (CAPACITY(p) < len) { p = increase_size(p, len); if (p == NULL) return NULL; } memmove(p, z->p, len * sizeof(symbol)); SET_SIZE(p, len); return p; } #if 0 extern void debug(struct SN_env * z, int number, int line_count) { int i; int limit = SIZE(z->p); /*if (number >= 0) printf("%3d (line %4d): '", number, line_count);*/ if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit); for (i = 0; i <= limit; i++) { if (z->lb == i) printf("{"); if (z->bra == i) printf("["); if (z->c == i) printf("|"); if (z->ket == i) printf("]"); if (z->l == i) printf("}"); if (i < limit) { int ch = z->p[i]; if (ch == 0) ch = '#'; printf("%c", ch); } } printf("'\n"); } #endif yaz-5.28.0/libstemmer_c/runtime/api.h0000644000175000017500000000137313250277666014426 00000000000000 typedef unsigned char symbol; /* Or replace 'char' above with 'short' for 16 bit characters. More precisely, replace 'char' with whatever type guarantees the character width you need. Note however that sizeof(symbol) should divide HEAD, defined in header.h as 2*sizeof(int), without remainder, otherwise there is an alignment problem. In the unlikely event of a problem here, consult Martin Porter. */ struct SN_env { symbol * p; int c; int l; int lb; int bra; int ket; symbol * * S; int * I; unsigned char * B; }; extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size); extern void SN_close_env(struct SN_env * z, int S_size); extern int SN_set_current(struct SN_env * z, int size, const symbol * s); yaz-5.28.0/libstemmer_c/runtime/header.h0000644000175000017500000000466713250277666015116 00000000000000 #include #include "api.h" #define MAXINT INT_MAX #define MININT INT_MIN #define HEAD 2*sizeof(int) #define SIZE(p) ((int *)(p))[-1] #define SET_SIZE(p, n) ((int *)(p))[-1] = n #define CAPACITY(p) ((int *)(p))[-2] struct among { int s_size; /* number of chars in string */ const symbol * s; /* search string */ int substring_i;/* index to longest matching substring */ int result; /* result of the lookup */ int (* function)(struct SN_env *); }; extern symbol * create_s(void); extern void lose_s(symbol * p); extern int skip_utf8(const symbol * p, int c, int lb, int l, int n); extern int in_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int in_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int out_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int out_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int in_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int in_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int out_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int out_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int eq_s(struct SN_env * z, int s_size, const symbol * s); extern int eq_s_b(struct SN_env * z, int s_size, const symbol * s); extern int eq_v(struct SN_env * z, const symbol * p); extern int eq_v_b(struct SN_env * z, const symbol * p); extern int find_among(struct SN_env * z, const struct among * v, int v_size); extern int find_among_b(struct SN_env * z, const struct among * v, int v_size); extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjustment); extern int slice_from_s(struct SN_env * z, int s_size, const symbol * s); extern int slice_from_v(struct SN_env * z, const symbol * p); extern int slice_del(struct SN_env * z); extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, const symbol * s); extern int insert_v(struct SN_env * z, int bra, int ket, const symbol * p); extern symbol * slice_to(struct SN_env * z, symbol * p); extern symbol * assign_to(struct SN_env * z, symbol * p); extern void debug(struct SN_env * z, int number, int line_count); yaz-5.28.0/libstemmer_c/include/0000755000175000017500000000000013572540027013507 500000000000000yaz-5.28.0/libstemmer_c/include/libstemmer.h0000644000175000017500000000554413250277666015764 00000000000000 /* Make header file work when included from C++ */ #ifdef __cplusplus extern "C" { #endif struct sb_stemmer; typedef unsigned char sb_symbol; /* FIXME - should be able to get a version number for each stemming * algorithm (which will be incremented each time the output changes). */ /** Returns an array of the names of the available stemming algorithms. * Note that these are the canonical names - aliases (ie, other names for * the same algorithm) will not be included in the list. * The list is terminated with a null pointer. * * The list must not be modified in any way. */ const char ** sb_stemmer_list(void); /** Create a new stemmer object, using the specified algorithm, for the * specified character encoding. * * All algorithms will usually be available in UTF-8, but may also be * available in other character encodings. * * @param algorithm The algorithm name. This is either the english * name of the algorithm, or the 2 or 3 letter ISO 639 codes for the * language. Note that case is significant in this parameter - the * value should be supplied in lower case. * * @param charenc The character encoding. NULL may be passed as * this value, in which case UTF-8 encoding will be assumed. Otherwise, * the argument may be one of "UTF_8", "ISO_8859_1" (ie, Latin 1), * "CP850" (ie, MS-DOS Latin 1) or "KOI8_R" (Russian). Note that * case is significant in this parameter. * * @return NULL if the specified algorithm is not recognised, or the * algorithm is not available for the requested encoding. Otherwise, * returns a pointer to a newly created stemmer for the requested algorithm. * The returned pointer must be deleted by calling sb_stemmer_delete(). * * @note NULL will also be returned if an out of memory error occurs. */ struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc); /** Delete a stemmer object. * * This frees all resources allocated for the stemmer. After calling * this function, the supplied stemmer may no longer be used in any way. * * It is safe to pass a null pointer to this function - this will have * no effect. */ void sb_stemmer_delete(struct sb_stemmer * stemmer); /** Stem a word. * * The return value is owned by the stemmer - it must not be freed or * modified, and it will become invalid when the stemmer is called again, * or if the stemmer is freed. * * The length of the return value can be obtained using sb_stemmer_length(). * * If an out-of-memory error occurs, this will return NULL. */ const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size); /** Get the length of the result of the last stemmed word. * This should not be called before sb_stemmer_stem() has been called. */ int sb_stemmer_length(struct sb_stemmer * stemmer); #ifdef __cplusplus } #endif yaz-5.28.0/libstemmer_c/libstemmer/0000755000175000017500000000000013572540027014227 500000000000000yaz-5.28.0/libstemmer_c/libstemmer/libstemmer.c0000644000175000017500000000425313250277666016473 00000000000000 #include #include #include "../include/libstemmer.h" #include "../runtime/api.h" #include "modules.h" struct sb_stemmer { struct SN_env * (*create)(void); void (*close)(struct SN_env *); int (*stem)(struct SN_env *); struct SN_env * env; }; extern const char ** sb_stemmer_list(void) { return algorithm_names; } static stemmer_encoding_t sb_getenc(const char * charenc) { struct stemmer_encoding * encoding; if (charenc == NULL) return ENC_UTF_8; for (encoding = encodings; encoding->name != 0; encoding++) { if (strcmp(encoding->name, charenc) == 0) break; } if (encoding->name == NULL) return ENC_UNKNOWN; return encoding->enc; } extern struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc) { stemmer_encoding_t enc; struct stemmer_modules * module; struct sb_stemmer * stemmer; enc = sb_getenc(charenc); if (enc == ENC_UNKNOWN) return NULL; for (module = modules; module->name != 0; module++) { if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break; } if (module->name == NULL) return NULL; stemmer = (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer)); if (stemmer == NULL) return NULL; stemmer->create = module->create; stemmer->close = module->close; stemmer->stem = module->stem; stemmer->env = stemmer->create(); if (stemmer->env == NULL) { sb_stemmer_delete(stemmer); return NULL; } return stemmer; } void sb_stemmer_delete(struct sb_stemmer * stemmer) { if (stemmer == 0) return; if (stemmer->close == 0) return; stemmer->close(stemmer->env); stemmer->close = 0; free(stemmer); } const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size) { int ret; if (SN_set_current(stemmer->env, size, (const symbol *)(word))) { stemmer->env->l = 0; return NULL; } ret = stemmer->stem(stemmer->env); if (ret < 0) return NULL; stemmer->env->p[stemmer->env->l] = 0; return (const sb_symbol *)(stemmer->env->p); } int sb_stemmer_length(struct sb_stemmer * stemmer) { return stemmer->env->l; } yaz-5.28.0/libstemmer_c/libstemmer/modules.h0000644000175000017500000003114513250277666016005 00000000000000/* libstemmer/modules.h: List of stemming modules. * * This file is generated by mkmodules.pl from a list of module names. * Do not edit manually. * * Modules included by this file are: danish, dutch, english, finnish, french, * german, hungarian, italian, norwegian, porter, portuguese, romanian, * russian, spanish, swedish, turkish */ /* #include "../src_c/stem_ISO_8859_1_danish.h" #include "../src_c/stem_UTF_8_danish.h" #include "../src_c/stem_ISO_8859_1_dutch.h" #include "../src_c/stem_UTF_8_dutch.h" #include "../src_c/stem_ISO_8859_1_english.h" */ #include "../src_c/stem_UTF_8_english.h" /* #include "../src_c/stem_ISO_8859_1_finnish.h" #include "../src_c/stem_UTF_8_finnish.h" #include "../src_c/stem_ISO_8859_1_french.h" #include "../src_c/stem_UTF_8_french.h" #include "../src_c/stem_ISO_8859_1_german.h" #include "../src_c/stem_UTF_8_german.h" #include "../src_c/stem_ISO_8859_1_hungarian.h" #include "../src_c/stem_UTF_8_hungarian.h" #include "../src_c/stem_ISO_8859_1_italian.h" #include "../src_c/stem_UTF_8_italian.h" #include "../src_c/stem_ISO_8859_1_norwegian.h" #include "../src_c/stem_UTF_8_norwegian.h" #include "../src_c/stem_ISO_8859_1_porter.h" */ #include "../src_c/stem_UTF_8_porter.h" /* #include "../src_c/stem_ISO_8859_1_portuguese.h" #include "../src_c/stem_UTF_8_portuguese.h" #include "../src_c/stem_ISO_8859_2_romanian.h" #include "../src_c/stem_UTF_8_romanian.h" #include "../src_c/stem_KOI8_R_russian.h" #include "../src_c/stem_UTF_8_russian.h" #include "../src_c/stem_ISO_8859_1_spanish.h" #include "../src_c/stem_UTF_8_spanish.h" #include "../src_c/stem_ISO_8859_1_swedish.h" #include "../src_c/stem_UTF_8_swedish.h" #include "../src_c/stem_UTF_8_turkish.h" */ typedef enum { ENC_UNKNOWN=0, ENC_ISO_8859_1, ENC_ISO_8859_2, ENC_KOI8_R, ENC_UTF_8 } stemmer_encoding_t; struct stemmer_encoding { const char * name; stemmer_encoding_t enc; }; static struct stemmer_encoding encodings[] = { /* {"ISO_8859_1", ENC_ISO_8859_1}, {"ISO_8859_2", ENC_ISO_8859_2}, {"KOI8_R", ENC_KOI8_R}, */ {"UTF_8", ENC_UTF_8}, {0,ENC_UNKNOWN} }; struct stemmer_modules { const char * name; stemmer_encoding_t enc; struct SN_env * (*create)(void); void (*close)(struct SN_env *); int (*stem)(struct SN_env *); }; static struct stemmer_modules modules[] = { /* {"da", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, {"da", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, {"dan", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, {"dan", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, {"danish", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, {"danish", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, {"de", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, {"de", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"deu", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, {"deu", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"dut", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, {"dut", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"dutch", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, {"dutch", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"en", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, */ {"en", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, // {"eng", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, {"eng", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, // {"english", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, {"english", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, /* {"es", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, {"es", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"esl", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, {"esl", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"fi", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, {"fi", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, {"fin", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, {"fin", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, {"finnish", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, {"finnish", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, {"fr", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, {"fr", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"fra", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, {"fra", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"fre", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, {"fre", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"french", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, {"french", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"ger", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, {"ger", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"german", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, {"german", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"hu", ENC_ISO_8859_1, hungarian_ISO_8859_1_create_env, hungarian_ISO_8859_1_close_env, hungarian_ISO_8859_1_stem}, {"hu", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem}, {"hun", ENC_ISO_8859_1, hungarian_ISO_8859_1_create_env, hungarian_ISO_8859_1_close_env, hungarian_ISO_8859_1_stem}, {"hun", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem}, {"hungarian", ENC_ISO_8859_1, hungarian_ISO_8859_1_create_env, hungarian_ISO_8859_1_close_env, hungarian_ISO_8859_1_stem}, {"hungarian", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem}, {"it", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, {"it", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, {"ita", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, {"ita", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, {"italian", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, {"italian", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, {"nl", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, {"nl", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"nld", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, {"nld", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"no", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, {"no", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, {"nor", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, {"nor", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, {"norwegian", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, {"norwegian", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, {"por", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, {"por", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, {"porter", ENC_ISO_8859_1, porter_ISO_8859_1_create_env, porter_ISO_8859_1_close_env, porter_ISO_8859_1_stem}, {"porter", ENC_UTF_8, porter_UTF_8_create_env, porter_UTF_8_close_env, porter_UTF_8_stem}, {"portuguese", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, {"portuguese", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, {"pt", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, {"pt", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, {"ro", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem}, {"ro", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"romanian", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem}, {"romanian", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"ron", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem}, {"ron", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"ru", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, {"ru", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, {"rum", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem}, {"rum", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"rus", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, {"rus", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, {"russian", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, {"russian", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, {"spa", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, {"spa", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"spanish", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, {"spanish", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"sv", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, {"sv", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, {"swe", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, {"swe", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, {"swedish", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, {"swedish", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, {"tr", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem}, {"tur", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem}, {"turkish", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem}, */ {0,ENC_UNKNOWN,0,0,0} }; static const char * algorithm_names[] = { /* "danish", "dutch", */ "english", /* "finnish", "french", "german", "hungarian", "italian", "norwegian", */ "porter", /* "portuguese", "romanian", "russian", "spanish", "swedish", "turkish", */ 0 }; yaz-5.28.0/yaz.spec0000644000175000017500000001025313572540001011007 00000000000000# This file is part of the YAZ toolkit # Copyright (C) Index Data # See the file LICENSE for details. # # spec file for YAZ %define idmetaversion %(. ./IDMETA; echo $VERSION) Name: yaz Summary: Z39.50 Programs Version: %{idmetaversion} Release: 1.indexdata # determine system %define is_redhat5 %(grep 'release 5' /etc/redhat-release >/dev/null 2>&1 && echo 1 || echo 0) %define is_redhat8 %(grep 'release 8' /etc/redhat-release >/dev/null 2>&1 && echo 1 || echo 0) %define is_mandrake %(test -e /etc/mandrake-release && echo 1 || echo 0) %define is_suse %(test -e /etc/SuSE-release >/dev/null && echo 1 || echo 0) %define is_suse11 %(grep 'VERSION = 11' /etc/SuSE-release >/dev/null 2>&1 && echo 1 || echo 0) %define is_fedora %(test -e /etc/fedora-release && echo 1 || echo 0) Requires: readline, libyaz5 = %{version} License: BSD Group: Applications/Internet Vendor: Index Data ApS Source: yaz-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-root Prefix: %{_prefix} %define TCPWRAPPER tcp_wrappers-devel %if %is_redhat5 %define TCPWRAPPER tcp_wrappers %endif %if %is_redhat8 %define TCPWRAPPER %endif %if %is_suse %define TCPWRAPPER tcpd-devel %endif BuildRequires: %{TCPWRAPPER} %if %is_suse11 BuildRequires: libgnutls-devel %else BuildRequires: gnutls-devel %endif BuildRequires: pkgconfig BuildRequires: libxml2-devel BuildRequires: libxslt-devel BuildRequires: readline-devel BuildRequires: libicu-devel BuildRequires: wget Packager: Adam Dickmeiss URL: http://www.indexdata.com/yaz %description This package contains both a test-server and clients (normal & ssl) for the ANSI/NISO Z39.50 protocol for Information Retrieval. %package -n libyaz5 Summary: Z39.50 Library Group: Libraries Requires: libxslt, gnutls, libicu %description -n libyaz5 YAZ is a library for the ANSI/NISO Z39.50 protocol for Information Retrieval. %post -n libyaz5 -p /sbin/ldconfig %postun -n libyaz5 -p /sbin/ldconfig %package -n libyaz5-devel Summary: Z39.50 Library - development package Group: Development/Libraries Requires: libyaz5 = %{version}, libxml2-devel, libxslt-devel, libicu-devel Conflicts: libyaz-devel, libyaz4-devel %description -n libyaz5-devel Development libraries and includes for the libyaz package. %package -n yaz-illclient Summary: ILL client Group: Applications/Communication Requires: readline, libyaz5 = %{version} %description -n yaz-illclient yaz-illclient: an ISO ILL client. %package -n yaz-icu Summary: Command line utility for ICU utilities of YAZ Group: Applications/Communication Requires: libyaz5 = %{version} %description -n yaz-icu The yaz-icu program is a command-line based client which exposes the ICU chain facility of YAZ. %prep %setup %build CFLAGS="$RPM_OPT_FLAGS" \ ./configure --prefix=%{_prefix} --libdir=%{_libdir} --mandir=%{_mandir} \ --enable-shared --enable-tcpd --with-xslt --with-gnutls --with-icu \ --without-memcached %if %{?make_build:1}%{!?make_build:0} %make_build %else make -j4 CFLAGS="$RPM_OPT_FLAGS" %endif %install rm -fr ${RPM_BUILD_ROOT} make install DESTDIR=${RPM_BUILD_ROOT} rm ${RPM_BUILD_ROOT}/%{_libdir}/*.la %clean rm -fr ${RPM_BUILD_ROOT} %files %defattr(-,root,root) %doc README.md LICENSE NEWS %{_bindir}/yaz-client %{_bindir}/yaz-ztest %{_bindir}/zoomsh %{_bindir}/yaz-marcdump %{_bindir}/yaz-iconv %{_bindir}/yaz-json-parse %{_bindir}/yaz-url %{_bindir}/yaz-record-conv %{_mandir}/man1/yaz-client.* %{_mandir}/man1/yaz-json-parse.* %{_mandir}/man1/yaz-url.* %{_mandir}/man8/yaz-ztest.* %{_mandir}/man1/zoomsh.* %{_mandir}/man1/yaz-marcdump.* %{_mandir}/man1/yaz-iconv.* %{_mandir}/man1/yaz-record-conv.* %{_mandir}/man7/yaz-log.* %{_mandir}/man7/bib1-attr.* %files -n libyaz5 %defattr(-,root,root) %{_libdir}/*.so.* %files -n libyaz5-devel %defattr(-,root,root) %{_bindir}/yaz-config %{_bindir}/yaz-asncomp %{_includedir}/yaz %{_libdir}/pkgconfig/yaz.pc %{_libdir}/*.so %{_libdir}/*.a %{_datadir}/aclocal/yaz.m4 %{_mandir}/man1/yaz-asncomp.* %{_mandir}/man7/yaz.* %{_mandir}/man?/yaz-config.* %{_datadir}/doc/yaz %{_datadir}/yaz %files -n yaz-illclient %defattr(-,root,root) %{_bindir}/yaz-illclient %{_mandir}/man1/yaz-illclient.* %files -n yaz-icu %defattr(-,root,root) %{_bindir}/yaz-icu %{_mandir}/man1/yaz-icu.* yaz-5.28.0/src/0000755000175000017500000000000013572540027010206 500000000000000yaz-5.28.0/src/oclc-ill-req-ext.c0000644000175000017500000000401413273126163013351 00000000000000/** \file oclc-ill-req-ext.c \brief ASN.1 Module OCLCILLRequestExtension Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int ill_OCLCILLRequestExtension(ODR o, ILL_OCLCILLRequestExtension **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_String, &(*p)->clientDepartment, ODR_CONTEXT, 0, 1, "clientDepartment") && odr_explicit_tag(o, ill_String, &(*p)->paymentMethod, ODR_CONTEXT, 1, 1, "paymentMethod") && odr_explicit_tag(o, ill_String, &(*p)->uniformTitle, ODR_CONTEXT, 2, 1, "uniformTitle") && odr_explicit_tag(o, ill_String, &(*p)->dissertation, ODR_CONTEXT, 3, 1, "dissertation") && odr_explicit_tag(o, ill_String, &(*p)->issueNumber, ODR_CONTEXT, 4, 1, "issueNumber") && odr_explicit_tag(o, ill_String, &(*p)->volume, ODR_CONTEXT, 5, 1, "volume") && odr_explicit_tag(o, ill_String, &(*p)->affiliations, ODR_CONTEXT, 6, 1, "affiliations") && odr_explicit_tag(o, ill_String, &(*p)->source, ODR_CONTEXT, 7, 1, "source") && odr_sequence_end(o); } int ill_SystemNo_s(ODR o, ILL_SystemNo_s **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return ill_System(o, &(*p)->System, 0, "System") && ill_RecordNo(o, &(*p)->recordNo, 0, "recordNo") && odr_sequence_end(o); } int ill_SystemNo(ODR o, ILL_SystemNo **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) ill_SystemNo_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_System(ODR o, ILL_System **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_RecordNo(ODR o, ILL_RecordNo **p, int opt, const char *name) { return ill_String (o, p, opt, name); } yaz-5.28.0/src/iconv_encode_wchar.c0000644000175000017500000000417613265142510014113 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief WCHAR_T iconv encoding / decoding */ #if HAVE_CONFIG_H #include #endif #include #include #include #if HAVE_WCHAR_H #include #endif #include #include "iconv-p.h" struct encoder_data { unsigned long compose_char; }; #if HAVE_WCHAR_H static size_t write_wchar_t(yaz_iconv_t cd, yaz_iconv_encoder_t en, unsigned long x, char **outbuf, size_t *outbytesleft) { unsigned char *outp = (unsigned char *) *outbuf; if (*outbytesleft >= sizeof(wchar_t)) { wchar_t wch = x; memcpy(outp, &wch, sizeof(wch)); outp += sizeof(wch); (*outbytesleft) -= sizeof(wch); } else { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t)(-1); } *outbuf = (char *) outp; return 0; } #endif yaz_iconv_encoder_t yaz_wchar_encoder(const char *tocode, yaz_iconv_encoder_t e) { #if HAVE_WCHAR_H if (!yaz_matchstr(tocode, "wchar_t")) { e->write_handle = write_wchar_t; return e; } #endif return 0; } #if HAVE_WCHAR_H static unsigned long read_wchar_t(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { unsigned long x = 0; if (inbytesleft < sizeof(wchar_t)) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); /* incomplete input */ *no_read = 0; } else { wchar_t wch; memcpy(&wch, inp, sizeof(wch)); x = wch; *no_read = sizeof(wch); } return x; } #endif yaz_iconv_decoder_t yaz_wchar_decoder(const char *fromcode, yaz_iconv_decoder_t d) { #if HAVE_WCHAR_H if (!yaz_matchstr(fromcode, "wchar_t")) { d->read_handle = read_wchar_t; return d; } #endif return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/sru_update.csv0000644000175000017500000000525213250277530013021 000000000000001, "Invalid component: record rejected" 2, "Invalid component: component rejected" 3, "Invalid component: warning only" 4, "Invalid component: default value applied" 5, "Invalid component: data corrected by server" 6, "Invalid repetition of component: record rejected" 7, "Invalid repetition of component: component rejected" 8, "Invalid repetition of component: warning only" 9, "Missing mandatory element: record rejected" 10, "Missing mandatory element: warning only" 11, "Missing mandatory element: default value applied" 12, "Invalid data structure: record rejected" 13, "Invalid data structure: component rejected" 14, "Invalid data structure: warning only" 15, "Invalid data structure: default value applied" 16, "Invalid data structure: data corrected by server" 17, "Incorrect element length: record rejected" 18, "Incorrect element length : component rejected" 19, "Incorrect element length : warning only" 20, "Incorrect element length : default value applied" 21, "Incorrect element length : data corrected by server" 22, "Invalid record identifier : record rejected" 23, "Invalid record identifier : warning only" 24, "Invalid record identifier : default applied" 25, "Invalid record identifier : data corrected by server" 26, "Invalid component identifier : record rejected" 27, "Invalid component identifier: component rejected" 28, "Invalid component identifier: warning only" 29, "Invalid component identifier: data corrected by server" 30, "Record schema unacceptable: record rejected" 31, "Record schema unacceptable: component rejected" 32, "Record schema unrecognised: warning only" 33, "Record schema unacceptable: record converted" 50, "Record not found (replacement or delete)" 51, "Component not found (replacement or delete)" 52, "Record protected or locked by another user" 53, "Cannot delete or replace record or component, authorization failure" 54, "Cannot delete or replace record or component without locking first" 55, "Cannot process update, incorrect or invalid version" 56, "Linked records exist, cannot delete record" 57, "Record or component not found, replacement request processed as an insert" 58, "Suspect duplicate: record or component insert rejected" 59, "Suspect duplicate: warning only" 60, "Incoming record matches with database record, records merged" 61, "Unspecified database error" 62, "Cannot process or store record, insufficent space" 63, " 'record' is ignored, while Both 'recordIdentifier' and 'record' were included on a 'delete' action." 64, "'recordIdentifier' is ignored, while Both 'recordIdentifier' and 'record' were included on a 'delete' action." 65, "Not processed (replace or delete). Record identifier retrieved ore than one record" 100, "Invalid action" yaz-5.28.0/src/cqlstring.c0000644000175000017500000000171113265142510012272 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cqlstring.c * \brief Implements query stream reader that reads from a C string. */ #if HAVE_CONFIG_H #include #endif #include struct cql_buf_info { const char *str; int off; }; static int getbuf(void *vp) { struct cql_buf_info *bi = (struct cql_buf_info *) vp; if (bi->str[bi->off] == 0) return 0; return bi->str[bi->off++]; } static void ungetbuf(int b, void *vp) { struct cql_buf_info *bi = (struct cql_buf_info *) vp; if (b) (bi->off--); } int cql_parser_string(CQL_parser cp, const char *str) { struct cql_buf_info b; b.str = str; b.off = 0; return cql_parser_stream(cp, getbuf, ungetbuf, &b); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/marc_read_line.c0000644000175000017500000001660013265142510013213 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file marc_read_line.c * \brief Implements reading of MARC in line format */ #if HAVE_CONFIG_H #include #endif #ifdef WIN32 #include #endif #include #include #include #include #include #include static int yaz_gets(int (*getbyte)(void *client_data), void (*ungetbyte)(int b, void *client_data), void *client_data, WRBUF w) { size_t sz = 0; int ch = getbyte(client_data); while (ch != '\0' && ch != '\r' && ch != '\n') { wrbuf_putc(w, ch); sz++; ch = getbyte(client_data); } if (ch == '\r') { ch = getbyte(client_data); if (ch != '\n' && ch != '\0') ungetbyte(ch, client_data); } else if (ch == '\n') { ch = getbyte(client_data); if (ch != '\r' && ch != '\0') ungetbyte(ch, client_data); } if (sz) { return 1; } return 0; } static int yaz_marc_line_gets(int (*getbyte)(void *client_data), void (*ungetbyte)(int b, void *client_data), void *client_data, WRBUF w) { int more; wrbuf_rewind(w); more = yaz_gets(getbyte, ungetbyte, client_data, w); if (!more) return 0; while (more) { int i; for (i = 0; i<4; i++) { int ch = getbyte(client_data); if (ch != ' ') { if (ch) ungetbyte(ch, client_data); return 1; } } if (wrbuf_len(w) > 60 && wrbuf_buf(w)[wrbuf_len(w)-1] == '=') wrbuf_cut_right(w, 1); else wrbuf_puts(w, " "); more = yaz_gets(getbyte, ungetbyte, client_data, w); } return 1; } int yaz_marc_read_line(yaz_marc_t mt, int (*getbyte)(void *client_data), void (*ungetbyte)(int b, void *client_data), void *client_data) { int indicator_length; int identifier_length; int base_address; int length_data_entry; int length_starting; int length_implementation; int marker_ch = 0; int marker_skip = 0; int header_created = 0; WRBUF wrbuf_line = wrbuf_alloc(); yaz_marc_reset(mt); while (yaz_marc_line_gets(getbyte, ungetbyte, client_data, wrbuf_line)) { const char *line = wrbuf_cstr(wrbuf_line); int val; size_t line_len = strlen(line); if (line_len == 0) /* empty line indicates end of record */ { if (header_created) break; } else if (line[0] == '$') /* indicates beginning/end of record */ { if (header_created) break; } else if (line[0] == '(') /* annotation, skip it */ ; else if (line_len == 24 && atoi_n_check(line, 5, &val)) { /* deal with header lines: 00366nam 22001698a 4500 */ if (header_created) break; yaz_marc_set_leader(mt, line, &indicator_length, &identifier_length, &base_address, &length_data_entry, &length_starting, &length_implementation); header_created = 1; } else if (line_len > 4 && line[0] != ' ' && line[1] != ' ' && line[2] != ' ' && line[3] == ' ' ) { /* deal with data/control lines: 245 12 ........ */ char tag[4]; const char *datafield_start = line+6; marker_ch = 0; marker_skip = 0; memcpy(tag, line, 3); tag[3] = '\0'; if (line_len >= 8) /* control - or datafield ? */ { if (*datafield_start == ' ') datafield_start++; /* skip blank after indicator */ if (strchr("$_*", *datafield_start)) { marker_ch = *datafield_start; if (datafield_start[2] == ' ') marker_skip = 1; /* subfields has blank before data */ } } if (!header_created) { const char *leader = "01000cam 2200265 i 4500"; yaz_marc_set_leader(mt, leader, &indicator_length, &identifier_length, &base_address, &length_data_entry, &length_starting, &length_implementation); header_created = 1; } if (marker_ch == 0) { /* control field */ yaz_marc_add_controlfield(mt, tag, line+4, strlen(line+4)); } else { /* data field */ const char *indicator = line+4; int indicator_len = 2; const char *cp = datafield_start; yaz_marc_add_datafield(mt, tag, indicator, indicator_len); for (;;) { const char *next; size_t len; assert(cp[0] == marker_ch); cp++; next = cp; while ((next = strchr(next, marker_ch))) { if ((next[1] >= 'A' && next[1] <= 'Z') ||(next[1] >= 'a' && next[1] <= 'z') ||(next[1] >= '0' && next[1] <= '9')) { if (!marker_skip) break; else if (next[2] == ' ') break; } next++; } len = strlen(cp); if (next) len = next - cp - marker_skip; if (marker_skip) { /* remove ' ' after subfield marker */ char *cp_blank = strchr(cp, ' '); if (cp_blank) { len--; while (cp_blank != cp) { cp_blank[0] = cp_blank[-1]; cp_blank--; } cp++; } } yaz_marc_add_subfield(mt, cp, len); if (!next) break; cp = next; } } } else { yaz_marc_cprintf(mt, "Ignoring line: %s", line); } } wrbuf_destroy(wrbuf_line); if (!header_created) return -1; return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/solrtransform.c0000644000175000017500000000302613265142510013200 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file solrtransform.c * \brief Old wrappers * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include solr_transform_t solr_transform_create(void) { return cql_transform_create(); } solr_transform_t solr_transform_open_FILE(FILE *f) { return cql_transform_open_FILE(f); } solr_transform_t solr_transform_open_fname(const char *fname) { return cql_transform_open_fname(fname); } int solr_transform_define_pattern(cql_transform_t ct, const char *pattern, const char *value) { return cql_transform_define_pattern(ct, pattern, value); } void solr_transform_close(solr_transform_t ct) { cql_transform_close(ct); } int solr_transform_error(solr_transform_t ct, const char **addinfo) { return cql_transform_error(ct, addinfo); } void solr_transform_set_error(solr_transform_t ct, int error, const char *addinfo) { cql_transform_set_error(ct, error, addinfo); } const char *solr_lookup_reverse(solr_transform_t ct, const char *category, Z_AttributeList *attributes) { return cql_lookup_reverse(ct, category, attributes); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/esupdate.asn0000644000175000017500000001055613250277530012451 00000000000000ESFormat-Update {Z39-50-extendedService Update (5) revisions (1) revision-1 (1)} DEFINITIONS ::= -- oid is 1.2.840.10003.9.5.1.1 BEGIN IMPORTS DiagRec, InternationalString FROM Z39-50-APDU-1995; Update ::= CHOICE{ esRequest [1] IMPLICIT SEQUENCE{ toKeep [1] OriginPartToKeep, notToKeep [2] OriginPartNotToKeep}, taskPackage [2] IMPLICIT SEQUENCE{ originPart [1] OriginPartToKeep, targetPart [2] TargetPart}} OriginPartToKeep ::= SEQUENCE{ action [1] IMPLICIT INTEGER{ recordInsert (1), recordReplace (2), recordDelete (3), elementUpdate (4), specialUpdate (5)}, databaseName [2] IMPLICIT InternationalString, schema [3] IMPLICIT OBJECT IDENTIFIER OPTIONAL, elementSetName [4] IMPLICIT InternationalString OPTIONAL, actionQualifier [5] IMPLICIT EXTERNAL OPTIONAL} OriginPartNotToKeep ::= SuppliedRecords TargetPart ::= SEQUENCE{ updateStatus [1] IMPLICIT INTEGER{ success (1), partial (2), failure (3)}, globalDiagnostics [2] IMPLICIT SEQUENCE OF DiagRec OPTIONAL, -- These are non-surrogate -- diagnosticsrelating to the task, -- not to individual records. taskPackageRecords [3] IMPLICIT SEQUENCE OF TaskPackageRecordStructure -- There should be a -- TaskPackageRecordStructure -- for every record supplied. -- The target should create -- such a structure for every -- record immediately upon -- creating the task package -- to include correlation -- information and status. -- The record itself would not -- be included until processing -- for that record is complete. } -- Auxiliary definitions for Update SuppliedRecords ::= SEQUENCE OF SEQUENCE{ recordId [1] CHOICE{ number [1] IMPLICIT INTEGER, string [2] IMPLICIT InternationalString, opaque [3] IMPLICIT OCTET STRING} OPTIONAL, supplementalId [2] CHOICE{ timeStamp [1] IMPLICIT GeneralizedTime, versionNumber [2] IMPLICIT InternationalString, previousVersion [3] IMPLICIT EXTERNAL} OPTIONAL, correlationInfo [3] IMPLICIT CorrelationInfo OPTIONAL, record [4] IMPLICIT EXTERNAL} CorrelationInfo ::= SEQUENCE{ -- origin may supply one or both for any record: note [1] IMPLICIT InternationalString OPTIONAL, id [2] IMPLICIT INTEGER OPTIONAL} TaskPackageRecordStructure ::= SEQUENCE{ recordOrSurDiag [1] CHOICE { record [1] IMPLICIT EXTERNAL, -- Choose 'record' if -- recordStatus is 'success', and -- elementSetName was supplied. surrogateDiagnostics [2] IMPLICIT SEQUENCE OF DiagRec -- Choose 'SurrogateDiagnostics', if -- RecordStatus is failure. } OPTIONAL, -- The parameter recordOrSurDiag -- will thus be omitted only if -- 'elementSetName' was omitted and -- recordStatus is 'success'; or --if record status is 'queued' -- or in 'process'. correlationInfo [2] IMPLICIT CorrelationInfo OPTIONAL, -- This should be included -- if it was supplied by the origin. recordStatus [3] IMPLICIT INTEGER{ success (1), queued (2), inProcess (3), failure (4)}, supplementalDiagnostics [4] IMPLICIT SEQUENCE OF DiagRec OPTIONAL} END yaz-5.28.0/src/item-req.c0000644000175000017500000000675613273126163012032 00000000000000/** \file item-req.c \brief ASN.1 Module Z39.50-extendedService-ItemOrder-ItemRequest-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int ill_ItemRequest(ODR o, ILL_ItemRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 1, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 1, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_Transaction_Type, &(*p)->transaction_type, ODR_CONTEXT, 5, 0, "transaction_type") && odr_implicit_tag(o, ill_Delivery_Address, &(*p)->delivery_address, ODR_CONTEXT, 6, 1, "delivery_address") && ill_Delivery_Service(o, &(*p)->delivery_service, 1, "delivery_service") && odr_implicit_tag(o, ill_Delivery_Address, &(*p)->billing_address, ODR_CONTEXT, 8, 1, "billing_address") && odr_implicit_settag(o, ODR_CONTEXT, 9) && (odr_sequence_of(o, (Odr_fun) ill_Service_Type, &(*p)->iLL_service_type, &(*p)->num_iLL_service_type, "iLL_service_type") || odr_ok(o)) && odr_explicit_tag(o, odr_external, &(*p)->responder_specific_service, ODR_CONTEXT, 10, 1, "responder_specific_service") && odr_implicit_tag(o, ill_Requester_Optional_Messages_Type, &(*p)->requester_optional_messages, ODR_CONTEXT, 11, 1, "requester_optional_messages") && odr_implicit_tag(o, ill_Search_Type, &(*p)->search_type, ODR_CONTEXT, 12, 1, "search_type") && odr_implicit_settag(o, ODR_CONTEXT, 13) && (odr_sequence_of(o, (Odr_fun) ill_Supply_Medium_Info_Type, &(*p)->supply_medium_info_type, &(*p)->num_supply_medium_info_type, "supply_medium_info_type") || odr_ok(o)) && odr_implicit_tag(o, ill_Place_On_Hold_Type, &(*p)->place_on_hold, ODR_CONTEXT, 14, 0, "place_on_hold") && odr_implicit_tag(o, ill_Client_Id, &(*p)->client_id, ODR_CONTEXT, 15, 1, "client_id") && odr_implicit_tag(o, ill_Item_Id, &(*p)->item_id, ODR_CONTEXT, 16, 1, "item_id") && odr_implicit_tag(o, ill_Supplemental_Item_Description, &(*p)->supplemental_item_description, ODR_CONTEXT, 17, 1, "supplemental_item_description") && odr_implicit_tag(o, ill_Cost_Info_Type, &(*p)->cost_info_type, ODR_CONTEXT, 18, 1, "cost_info_type") && odr_explicit_tag(o, ill_String, &(*p)->copyright_compliance, ODR_CONTEXT, 19, 1, "copyright_compliance") && odr_implicit_tag(o, ill_Third_Party_Info_Type, &(*p)->third_party_info_type, ODR_CONTEXT, 20, 1, "third_party_info_type") && odr_implicit_tag(o, odr_bool, &(*p)->retry_flag, ODR_CONTEXT, 21, 0, "retry_flag") && odr_implicit_tag(o, odr_bool, &(*p)->forward_flag, ODR_CONTEXT, 22, 0, "forward_flag") && odr_explicit_tag(o, ill_String, &(*p)->requester_note, ODR_CONTEXT, 46, 1, "requester_note") && odr_explicit_tag(o, ill_String, &(*p)->forward_note, ODR_CONTEXT, 47, 1, "forward_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->iLL_request_extensions, &(*p)->num_iLL_request_extensions, "iLL_request_extensions") || odr_ok(o)) && odr_sequence_end(o); } yaz-5.28.0/src/z-uifr1.c0000644000175000017500000000774413273126163011602 00000000000000/** \file z-uifr1.c \brief ASN.1 Module UserInfoFormat-searchResult-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_SearchInfoReport_s(ODR o, Z_SearchInfoReport_s **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->subqueryId, ODR_CONTEXT, 1, 1, "subqueryId") && odr_implicit_tag(o, odr_bool, &(*p)->fullQuery, ODR_CONTEXT, 2, 0, "fullQuery") && odr_explicit_tag(o, z_QueryExpression, &(*p)->subqueryExpression, ODR_CONTEXT, 3, 1, "subqueryExpression") && odr_explicit_tag(o, z_QueryExpression, &(*p)->subqueryInterpretation, ODR_CONTEXT, 4, 1, "subqueryInterpretation") && odr_explicit_tag(o, z_QueryExpression, &(*p)->subqueryRecommendation, ODR_CONTEXT, 5, 1, "subqueryRecommendation") && odr_implicit_tag(o, odr_integer, &(*p)->subqueryCount, ODR_CONTEXT, 6, 1, "subqueryCount") && odr_implicit_tag(o, z_IntUnit, &(*p)->subqueryWeight, ODR_CONTEXT, 7, 1, "subqueryWeight") && odr_implicit_tag(o, z_ResultsByDB, &(*p)->resultsByDB, ODR_CONTEXT, 8, 1, "resultsByDB") && odr_sequence_end(o); } int z_SearchInfoReport(ODR o, Z_SearchInfoReport **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_SearchInfoReport_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ResultsByDB_sList(ODR o, Z_ResultsByDB_sList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_DatabaseName, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ResultsByDB_s(ODR o, Z_ResultsByDB_s **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ResultsByDB_s_all, (Odr_fun) odr_null, "all"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ResultsByDB_s_list, (Odr_fun) z_ResultsByDB_sList, "list"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "databases") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_implicit_tag(o, odr_integer, &(*p)->count, ODR_CONTEXT, 2, 1, "count") && odr_implicit_tag(o, z_InternationalString, &(*p)->resultSetName, ODR_CONTEXT, 3, 1, "resultSetName") && odr_sequence_end(o); } int z_ResultsByDB(ODR o, Z_ResultsByDB **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_ResultsByDB_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_QueryExpressionTerm(ODR o, Z_QueryExpressionTerm **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_Term, &(*p)->queryTerm, ODR_CONTEXT, 1, 0, "queryTerm") && odr_implicit_tag(o, z_InternationalString, &(*p)->termComment, ODR_CONTEXT, 2, 1, "termComment") && odr_sequence_end(o); } int z_QueryExpression(ODR o, Z_QueryExpression **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_QueryExpression_term, (Odr_fun) z_QueryExpressionTerm, "term"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_QueryExpression_query, (Odr_fun) z_Query, "query"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } yaz-5.28.0/src/diagsru_update.c0000644000175000017500000000630713273126163013277 00000000000000/** \file diagsru_update.c \brief Diagnostics: Generated by csvtodiag.tcl from ./sru_update.csv */ #ifdef HAVE_CONFIG_H #include #endif #include "diag-entry.h" #include "./../include/yaz/diagsru_update.h" struct yaz_diag_entry yaz_diag_sru_update_tab[] = { {1, "Invalid component: record rejected"}, {2, "Invalid component: component rejected"}, {3, "Invalid component: warning only"}, {4, "Invalid component: default value applied"}, {5, "Invalid component: data corrected by server"}, {6, "Invalid repetition of component: record rejected"}, {7, "Invalid repetition of component: component rejected"}, {8, "Invalid repetition of component: warning only"}, {9, "Missing mandatory element: record rejected"}, {10, "Missing mandatory element: warning only"}, {11, "Missing mandatory element: default value applied"}, {12, "Invalid data structure: record rejected"}, {13, "Invalid data structure: component rejected"}, {14, "Invalid data structure: warning only"}, {15, "Invalid data structure: default value applied"}, {16, "Invalid data structure: data corrected by server"}, {17, "Incorrect element length: record rejected"}, {18, "Incorrect element length : component rejected"}, {19, "Incorrect element length : warning only"}, {20, "Incorrect element length : default value applied"}, {21, "Incorrect element length : data corrected by server"}, {22, "Invalid record identifier : record rejected"}, {23, "Invalid record identifier : warning only"}, {24, "Invalid record identifier : default applied"}, {25, "Invalid record identifier : data corrected by server"}, {26, "Invalid component identifier : record rejected"}, {27, "Invalid component identifier: component rejected"}, {28, "Invalid component identifier: warning only"}, {29, "Invalid component identifier: data corrected by server"}, {30, "Record schema unacceptable: record rejected"}, {31, "Record schema unacceptable: component rejected"}, {32, "Record schema unrecognised: warning only"}, {33, "Record schema unacceptable: record converted"}, {50, "Record not found (replacement or delete)"}, {51, "Component not found (replacement or delete)"}, {52, "Record protected or locked by another user"}, {53, "Cannot delete or replace record or component, authorization failure"}, {54, "Cannot delete or replace record or component without locking first"}, {55, "Cannot process update, incorrect or invalid version"}, {56, "Linked records exist, cannot delete record"}, {57, "Record or component not found, replacement request processed as an insert"}, {58, "Suspect duplicate: record or component insert rejected"}, {59, "Suspect duplicate: warning only"}, {60, "Incoming record matches with database record, records merged"}, {61, "Unspecified database error"}, {62, "Cannot process or store record, insufficent space"}, {63, " 'record' is ignored, while Both 'recordIdentifier' and 'record' were included on a 'delete' action."}, {64, "'recordIdentifier' is ignored, while Both 'recordIdentifier' and 'record' were included on a 'delete' action."}, {65, "Not processed (replace or delete). Record identifier retrieved ore than one record"}, {100, "Invalid action"}, {0, 0}}; const char *yaz_diag_sru_update_str(int code) { return yaz_diag_to_str(yaz_diag_sru_update_tab, code); } yaz-5.28.0/src/z-accform1.c0000644000175000017500000001253413273126163012240 00000000000000/** \file z-accform1.c \brief ASN.1 Module AccessControlFormat-prompt-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_PromptObject1(ODR o, Z_PromptObject1 **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptObject1_challenge, (Odr_fun) z_Challenge1, "challenge"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptObject1_response, (Odr_fun) z_Response1, "response"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ChallengeUnit1(ODR o, Z_ChallengeUnit1 **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ChallengeUnit1_character, (Odr_fun) z_InternationalString, "character"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ChallengeUnit1_encrypted, (Odr_fun) z_Encryption, "encrypted"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_PromptId, &(*p)->promptId, ODR_CONTEXT, 1, 0, "promptId") && odr_implicit_tag(o, z_InternationalString, &(*p)->defaultResponse, ODR_CONTEXT, 2, 1, "defaultResponse") && ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 3, "promptInfo") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_implicit_tag(o, z_InternationalString, &(*p)->regExpr, ODR_CONTEXT, 4, 1, "regExpr") && odr_implicit_tag(o, odr_null, &(*p)->responseRequired, ODR_CONTEXT, 5, 1, "responseRequired") && odr_implicit_settag(o, ODR_CONTEXT, 6) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->allowedValues, &(*p)->num_allowedValues, "allowedValues") || odr_ok(o)) && odr_implicit_tag(o, odr_null, &(*p)->shouldSave, ODR_CONTEXT, 7, 1, "shouldSave") && odr_implicit_tag(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 8, 1, "dataType") && odr_implicit_tag(o, z_External, &(*p)->diagnostic, ODR_CONTEXT, 9, 1, "diagnostic") && odr_sequence_end(o); } int z_Challenge1(ODR o, Z_Challenge1 **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_ChallengeUnit1, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ResponseUnit1(ODR o, Z_ResponseUnit1 **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ResponseUnit1_string, (Odr_fun) z_InternationalString, "string"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ResponseUnit1_accept, (Odr_fun) odr_bool, "accept"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ResponseUnit1_acknowledge, (Odr_fun) odr_null, "acknowledge"}, {ODR_EXPLICIT, ODR_CONTEXT, 4, Z_ResponseUnit1_diagnostic, (Odr_fun) z_DiagRec, "diagnostic"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ResponseUnit1_encrypted, (Odr_fun) z_Encryption, "encrypted"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_PromptId, &(*p)->promptId, ODR_CONTEXT, 1, 0, "promptId") && odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 2, "promptResponse") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_sequence_end(o); } int z_Response1(ODR o, Z_Response1 **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_ResponseUnit1, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PromptIdEnumeratedPrompt(ODR o, Z_PromptIdEnumeratedPrompt **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->type, ODR_CONTEXT, 1, 0, "type") && odr_implicit_tag(o, z_InternationalString, &(*p)->suggestedString, ODR_CONTEXT, 2, 1, "suggestedString") && odr_sequence_end(o); } int z_PromptId(ODR o, Z_PromptId **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptId_enumeratedPrompt, (Odr_fun) z_PromptIdEnumeratedPrompt, "enumeratedPrompt"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptId_nonEnumeratedPrompt, (Odr_fun) z_InternationalString, "nonEnumeratedPrompt"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Encryption(ODR o, Z_Encryption **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_octetstring, &(*p)->cryptType, ODR_CONTEXT, 1, 1, "cryptType") && odr_implicit_tag(o, odr_octetstring, &(*p)->credential, ODR_CONTEXT, 2, 1, "credential") && odr_implicit_tag(o, odr_octetstring, &(*p)->data, ODR_CONTEXT, 3, 0, "data") && odr_sequence_end(o); } yaz-5.28.0/src/xcqlutil.c0000644000175000017500000002105513265142510012134 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file xcqlutil.c * \brief Implements CQL to XCQL conversion. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include static void pr_n(const char *buf, void (*pr)(const char *buf, void *client_data), void *client_data, int n) { int i; for (i = 0; i': (*pr)(">", client_data); break; default: bf[0] = *src; bf[1] = 0; (*pr)(bf, client_data); } src++; } } static void prefixes(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data, int level) { int head = 0; if (cn->u.st.index_uri) { pr_n("\n", pr, client_data, level); head = 1; pr_n("\n", pr, client_data, level+2); pr_n("", pr, client_data, level+4); pr_cdata(cn->u.st.index_uri, pr, client_data); pr_n("\n", pr, client_data, 0); pr_n("\n", pr, client_data, level+2); } if (cn->u.st.relation_uri && cn->u.st.relation) { if (!head) pr_n("\n", pr, client_data, level); pr_n("\n", pr, client_data, level+2); pr_n("", pr, client_data, level+4); pr_cdata("rel", pr, client_data); pr_n("\n", pr, client_data, 0); pr_n("", pr, client_data, level+4); pr_cdata(cn->u.st.relation_uri, pr, client_data); pr_n("\n", pr, client_data, 0); pr_n("\n", pr, client_data, level+2); } if (head) pr_n("\n", pr, client_data, level); } static void cql_to_xml_mod(struct cql_node *m, void (*pr)(const char *buf, void *client_data), void *client_data, int level) { if (m) { pr_n("\n", pr, client_data, level); for (; m; m = m->u.st.modifiers) { pr_n("\n", pr, client_data, level+2); pr_n("", pr, client_data, level+4); pr_cdata(m->u.st.index, pr, client_data); pr_n("\n", pr, client_data, 0); if (m->u.st.relation) { pr_n("", pr, client_data, level+4); pr_cdata(m->u.st.relation, pr, client_data); pr_n("\n", pr, client_data, 0); } if (m->u.st.term) { pr_n("", pr, client_data, level+4); pr_cdata(m->u.st.term, pr, client_data); pr_n("\n", pr, client_data, 0); } pr_n("\n", pr, client_data, level+2); } pr_n("\n", pr, client_data, level); } } static void cql_sort_to_xml(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data, int level) { if (cn) { pr_n("\n", pr, client_data, level); for (; cn; cn = cn->u.sort.next) { pr_n("\n", pr, client_data, level+2); if (cn->u.sort.index) { pr_n("", pr, client_data, level+4); pr_cdata(cn->u.sort.index, pr, client_data); pr_n("\n", pr, client_data, 0); cql_to_xml_mod(cn->u.sort.modifiers, pr, client_data, level+6); } pr_n("\n", pr, client_data, level+2); } pr_n("\n", pr, client_data, level); } } static void cql_to_xml_r(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data, int level, struct cql_node *sort_node) { if (!cn) return; switch (cn->which) { case CQL_NODE_ST: pr_n("\n", pr, client_data, level); prefixes(cn, pr, client_data, level+2); if (cn->u.st.index) { pr_n("", pr, client_data, level+2); pr_cdata(cn->u.st.index, pr, client_data); pr_n("\n", pr, client_data, 0); } if (cn->u.st.relation) { pr_n("\n", pr, client_data, level+2); pr_n("", pr, client_data, level+4); if (cn->u.st.relation_uri) pr_cdata("rel.", pr, client_data); pr_cdata(cn->u.st.relation, pr, client_data); pr_n("\n", pr, client_data, 0); if (cn->u.st.relation_uri) { pr_n("", pr, client_data, level+4); pr_cdata(cn->u.st.relation_uri, pr, client_data); pr_n("\n", pr, client_data, 0); } cql_to_xml_mod(cn->u.st.modifiers, pr, client_data, level+4); pr_n("\n", pr, client_data, level+2); } if (cn->u.st.term) { pr_n("", pr, client_data, level+2); pr_cdata(cn->u.st.term, pr, client_data); pr_n("\n", pr, client_data, 0); } if (cn->u.st.extra_terms) { struct cql_node *n = cn->u.st.extra_terms; for (; n; n = n->u.st.extra_terms) { pr_n("", pr, client_data, level+2); pr_cdata(n->u.st.term, pr, client_data); pr_n("\n", pr, client_data, 0); } } cql_sort_to_xml(sort_node, pr, client_data, level+2); pr_n("\n", pr, client_data, level); break; case CQL_NODE_BOOL: pr_n("\n", pr, client_data, level); if (cn->u.boolean.value) { pr_n("\n", pr, client_data, level+2); pr_n("", pr, client_data, level+4); pr_cdata(cn->u.boolean.value, pr, client_data); pr_n("\n", pr, client_data, 0); cql_to_xml_mod(cn->u.boolean.modifiers, pr, client_data, level+4); pr_n("\n", pr, client_data, level+2); } if (cn->u.boolean.left) { printf ("%*s\n", level+2, ""); cql_to_xml_r(cn->u.boolean.left, pr, client_data, level+4, 0); printf ("%*s\n", level+2, ""); } if (cn->u.boolean.right) { printf ("%*s\n", level+2, ""); cql_to_xml_r(cn->u.boolean.right, pr, client_data, level+4, 0); printf ("%*s\n", level+2, ""); } cql_sort_to_xml(sort_node, pr, client_data, level+2); pr_n("\n", pr, client_data, level); break; case CQL_NODE_SORT: cql_to_xml_r(cn->u.sort.search, pr, client_data, level, cn); } } void cql_to_xml(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data) { cql_to_xml_r(cn, pr, client_data, 0, 0); } void cql_to_xml_stdio(struct cql_node *cn, FILE *f) { cql_to_xml(cn, cql_fputs, f); } void cql_buf_write_handler (const char *b, void *client_data) { struct cql_buf_write_info *info = (struct cql_buf_write_info *)client_data; int l = strlen(b); if (info->off < 0 || (info->off + l >= info->max)) { info->off = -1; return; } memcpy (info->buf + info->off, b, l); info->off += l; } int cql_to_xml_buf(struct cql_node *cn, char *out, int max) { struct cql_buf_write_info info; info.off = 0; info.max = max; info.buf = out; cql_to_xml(cn, cql_buf_write_handler, &info); if (info.off >= 0) info.buf[info.off] = '\0'; return info.off; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cclerrms.c0000644000175000017500000000225113265142510012076 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cclerrms.c * \brief Implements CCL error code to error string map. * * This source file implements mapping between CCL error code and * their string equivalents. */ #if HAVE_CONFIG_H #include #endif #include static char *err_msg_array[] = { "Ok", "Search word expected", "')' expected", "Set name expected", "Operator expected", "Unbalanced ')'", "Unknown qualifier", "Qualifiers applied twice", "'=' expected", "Bad relation", "Left truncation not supported", "Both left - and right truncation not supported", "Right truncation not supported", "Embedded truncation not supported", "Single character mask not supported" }; const char *ccl_err_msg(int ccl_errno) { if (ccl_errno >= 0 && ccl_errno < sizeof(err_msg_array)/sizeof(*err_msg_array)) return err_msg_array[ccl_errno]; else return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_util.c0000644000175000017500000000550113265142510012106 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_util.c * \brief Implements various ODR utilities */ #if HAVE_CONFIG_H #include #endif #include #include #include "odr-priv.h" #include void odr_prname(ODR o, const char *name) { if (o->op->indent < 16) odr_printf(o, "%*s", o->op->indent * 2, ""); else odr_printf(o, "level=%-7d%*s", o->op->indent, 2 * (o->op->indent % 8) , ""); if (name) odr_printf(o, "%s ", name); } int odp_more_chunks(ODR o, const char *base, int len) { if (!len) return 0; if (len < 0) /* indefinite length */ { if (*o->op->bp == 0 && *(o->op->bp + 1) == 0) { o->op->bp += 2; return 0; } else return 1; } else return o->op->bp - base < len; } Odr_oid *odr_oiddup_nmem(NMEM nmem, const Odr_oid *o) { Odr_oid *r; if (!o) return 0; if (!(r = (Odr_oid *) nmem_malloc(nmem, (oid_oidlen(o) + 1) * sizeof(Odr_oid)))) return 0; oid_oidcpy(r, o); return r; } Odr_oid *odr_oiddup(ODR odr, const Odr_oid *o) { return odr_oiddup_nmem(odr_getmem(odr), o); } Odr_oid *odr_getoidbystr_nmem(NMEM nmem, const char *str) { Odr_oid oid[OID_SIZE]; Odr_oid *ret; if (oid_dotstring_to_oid(str, oid)) return 0; ret = (Odr_oid *)nmem_malloc(nmem, sizeof(*ret)*(oid_oidlen(oid) + 1)); oid_oidcpy(ret, oid); return ret; } Odr_oid *odr_getoidbystr(ODR o, const char *str) { return odr_getoidbystr_nmem(odr_getmem(o), str); } int odr_missing(ODR o, int opt, const char *name) { if (o->error) return 0; if (!opt) { odr_seterror(o, OREQUIRED, 53); odr_setelement(o, name); } return opt; } /* * Reallocate the buffer `old', using the ODR memory pool `o' to be * big enough to hold its existing value (if any) plus `prefix' (if * any) and a separator character. Copy `prefix', a forward slash and * the old value into the new area and return its address. Can be * used as follows: * initRequest->implementationName = odr_prepend(o, * initRequest->implementationName, "ZOOM-C"); */ char *odr_prepend(ODR o, const char *prefix, const char *old) { int plen = (prefix == 0) ? 0 : strlen(prefix); int olen = (old == 0) ? 0 : strlen(old); char *res = (char*) odr_malloc (o, olen + plen + 2); *res = '\0'; if (plen > 0) strcpy(res, prefix); if (plen > 0 && old != 0) strcat(res, "/"); if (old != 0) strcat(res, old); return res; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/iconv_decode_danmarc.c0000644000175000017500000000566213265142510014403 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief Danmarc2 character set decoding * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include "iconv-p.h" struct decoder_data { unsigned long x_back; }; static unsigned long read_danmarc(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { struct decoder_data *data = (struct decoder_data *) d->data; unsigned long x = inp[0]; if (data->x_back) { *no_read = 1; x = data->x_back; data->x_back = 0; return x; } if (x == '@') { if (inbytesleft < 2) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); *no_read = 0; return 0; } switch(inp[1]) { case '@': case '*': case 0xa4: /* CURRENCY SIGN */ x = inp[1]; *no_read = 2; break; case 0xe5: /* LATIN SMALL LETTER A WITH RING ABOVE */ x = 0xa733; *no_read = 2; break; case 0xc5: /* LATIN CAPITAL LETTER A WITH RING ABOVE */ x = 0xa732; *no_read = 2; break; default: if (inbytesleft < 5) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); *no_read = 0; return 0; } else { unsigned long v; sscanf((const char *) inp+1, "%4lx", &v); *no_read = 5; x = v; } } } else *no_read = 1; return x; } static size_t init_danmarc(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { struct decoder_data *data = (struct decoder_data *) d->data; data->x_back = 0; return 0; } void destroy_danmarc(yaz_iconv_decoder_t d) { struct decoder_data *data = (struct decoder_data *) d->data; xfree(data); } yaz_iconv_decoder_t yaz_danmarc_decoder(const char *fromcode, yaz_iconv_decoder_t d) { if (!yaz_matchstr(fromcode, "danmarc")) { struct decoder_data *data = (struct decoder_data *) xmalloc(sizeof(*data)); d->data = data; data->x_back = 0; d->read_handle = read_danmarc; d->init_handle = init_danmarc; d->destroy_handle = destroy_danmarc; return d; } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_bit.c0000644000175000017500000000346613265142510011717 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_bit.c * \brief Implements ODR BITSTRING codec */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" /* * Top level bitstring string en/decoder. * Returns 1 on success, 0 on error. */ int odr_bitstring(ODR o, Odr_bitmask **p, int opt, const char *name) { int res, cons = 0; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_BITSTRING; } res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name); if (res < 0) return 0; if (!res) return odr_missing(o, opt, name); if (o->direction == ODR_PRINT) { int i = ODR_BITMASK_SIZE; int j; odr_prname(o, name); odr_printf(o, "BITSTRING(len=%d) ",(*p)->top + 1); while (--i > 0) if (ODR_MASK_GET(*p, i)) break; for (j = 0; j <= i; j++) { odr_printf(o, "%c", ODR_MASK_GET(*p, j) ? '1' : '0'); if (j && ((j+1)&7) == 0) odr_printf(o, "-"); } odr_printf(o, "\n"); return 1; } if (o->direction == ODR_DECODE) { *p = (Odr_bitmask *)odr_malloc(o, sizeof(Odr_bitmask)); memset((*p)->bits, 0, ODR_BITMASK_SIZE); (*p)->top = -1; } #if 0 /* ignoring the cons helps with at least one target. * http://bugzilla.indexdata.dk/cgi-bin/bugzilla/show_bug.cgi?id=24 */ return ber_bitstring(o, *p, 0); #else return ber_bitstring(o, *p, cons); #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/poll.c0000644000175000017500000001107713265142510011240 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief Select, poll wrapper */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_TIME_H #include #endif #if HAVE_SYS_POLL_H #include #endif #if HAVE_SYS_SELECT_H #include #endif #ifdef WIN32 #if FD_SETSIZE < 512 #define FD_SETSIZE 512 #endif #include #endif /* Note that yaz_poll_select is limited as to how many file descriptors it can multiplex due to its use of select() which in turn uses the statically defined fd_set type to be a bitmap of the file descriptors to check. On Ubuntu 6.06 (and almost certainly on Debian, and probably on all Linuxes, and maybe all Unixes) this is by default set to 1024 (though it may be possible to override this using a #define before including -- I've not tried this). 1024 file descriptors is a lot, but not enough in all cases, e.g. when running IRSpy on a large target database. So you should ensure that YAZ uses ZOOM_yaz_poll_poll() when possible. */ int yaz_poll_select(struct yaz_poll_fd *fds, int num_fds, int sec, int nsec) { struct timeval tv; fd_set input, output, except; int i, r; int max_fd = 0; FD_ZERO(&input); FD_ZERO(&output); FD_ZERO(&except); assert(num_fds >= 0); for (i = 0; i < num_fds; i++) { enum yaz_poll_mask mask = fds[i].input_mask; int fd = fds[i].fd; /* Timeout events */ if (fd < 0) continue; if (mask & yaz_poll_read) FD_SET(fd, &input); if (mask & yaz_poll_write) FD_SET(fd, &output); if (mask & yaz_poll_except) FD_SET(fd, &except); if (max_fd < fd) max_fd = fd; } tv.tv_sec = sec; tv.tv_usec = nsec / 1000; r = select(max_fd+1, &input, &output, &except, (sec == -1 ? 0 : &tv)); if (r >= 0) { for (i = 0; i < num_fds; i++) { enum yaz_poll_mask mask = yaz_poll_none; int fd = fds[i].fd; if (!r) yaz_poll_add(mask, yaz_poll_timeout); else if (fd >= 0) { if (FD_ISSET(fd, &input)) yaz_poll_add(mask, yaz_poll_read); if (FD_ISSET(fd, &output)) yaz_poll_add(mask, yaz_poll_write); if (FD_ISSET(fd, &except)) yaz_poll_add(mask, yaz_poll_except); } fds[i].output_mask = mask; } } return r; } #if HAVE_SYS_POLL_H int yaz_poll_poll(struct yaz_poll_fd *fds, int num_fds, int sec, int nsec) { int i, r; struct pollfd *pollfds = 0; if (num_fds > 0) pollfds = (struct pollfd *) xmalloc(num_fds * sizeof *pollfds); assert(num_fds >= 0); for (i = 0; i < num_fds; i++) { enum yaz_poll_mask mask = fds[i].input_mask; int fd = fds[i].fd; short poll_events = 0; if (mask & yaz_poll_read) poll_events += POLLIN; if (mask & yaz_poll_write) poll_events += POLLOUT; if (mask & yaz_poll_except) poll_events += POLLERR; pollfds[i].fd = fd; pollfds[i].events = poll_events; pollfds[i].revents = 0; } r = poll(pollfds, num_fds, sec == -1 ? -1 : sec*1000 + nsec/1000000); if (r >= 0) { for (i = 0; i < num_fds; i++) { enum yaz_poll_mask mask = yaz_poll_none; if (!r) yaz_poll_add(mask, yaz_poll_timeout); else { if (pollfds[i].revents & POLLIN) yaz_poll_add(mask, yaz_poll_read); if (pollfds[i].revents & POLLOUT) yaz_poll_add(mask, yaz_poll_write); if (pollfds[i].revents & ~(POLLIN | POLLOUT)) { yaz_poll_add(mask, yaz_poll_except); } } fds[i].output_mask = mask; } } xfree(pollfds); return r; } #endif int yaz_poll(struct yaz_poll_fd *fds, int num_fds, int sec, int nsec) { #if HAVE_SYS_POLL_H return yaz_poll_poll(fds, num_fds, sec, nsec); #else return yaz_poll_select(fds, num_fds, sec, nsec); #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cql2ccl.c0000644000175000017500000001565213330052464011621 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cql2ccl.c * \brief Implements CQL to CCL conversion. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include static int cql_to_ccl_r(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data); static void pr_term(const char **cpp, int stop_at_space, void (*pr)(const char *buf, void *client_data), void *client_data) { const char *cp; int quote_mode = 0; for (cp = *cpp; *cp; cp++) { char x[4]; if (*cp == '\\' && cp[1]) { if (!quote_mode) { pr("\"", client_data); quote_mode = 1; } cp++; if (*cp == '\"' || *cp == '\\') pr("\\", client_data); x[0] = *cp; x[1] = '\0'; pr(x, client_data); } else if (*cp == '*') { if (quote_mode) { pr("\"", client_data); quote_mode = 0; } pr("?", client_data); } else if (*cp == '?') { if (quote_mode) { pr("\"", client_data); quote_mode = 0; } pr("#", client_data); } else if (*cp == ' ' && stop_at_space) break; else { if (!quote_mode) { pr("\"", client_data); quote_mode = 1; } x[0] = *cp; x[1] = '\0'; pr(x, client_data); } } if (quote_mode) pr("\"", client_data); if (cp == *cpp) pr("\"\"", client_data); *cpp = cp; } static int node(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data) { const char *ccl_field = 0; const char *split_op = 0; const char *ccl_rel = 0; const char *rel = cn->u.st.relation; if (cn->u.st.index && cql_strcmp(cn->u.st.index, "cql.serverChoice")) ccl_field = cn->u.st.index; if (!rel) ; else if (!strcmp(rel, "<") || !strcmp(rel, "<=") || !strcmp(rel, ">") || !strcmp(rel, ">=") || !strcmp(rel, "<>") || !strcmp(rel, "=")) ccl_rel = rel; else if (!cql_strcmp(rel, "all")) { ccl_rel = "="; split_op = "and"; } else if (!cql_strcmp(rel, "any")) { ccl_rel = "="; split_op = "or"; } else if (!strcmp(rel, "==") || !cql_strcmp(rel, "adj")) { ccl_rel = "="; } else { /* unsupported relation */ return -1; } for (; cn; cn = cn->u.st.extra_terms) { const char *cp = cn->u.st.term; while (1) { if (ccl_field && ccl_rel) { pr(ccl_field, client_data); pr(ccl_rel, client_data); if (!split_op) ccl_rel = 0; } pr_term(&cp, split_op ? 1 : 0, pr, client_data); while (*cp == ' ') cp++; if (*cp == '\0') break; pr(" ", client_data); if (split_op) { pr(split_op, client_data); pr(" ", client_data); } } if (cn->u.st.extra_terms) { pr(" ", client_data); if (split_op) { pr(split_op, client_data); pr(" ", client_data); } } } return 0; } static int bool(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data) { char *value = cn->u.boolean.value; int r; pr("(", client_data); r = cql_to_ccl_r(cn->u.boolean.left, pr, client_data); if (r) return r; pr(") ", client_data); if (cql_strcmp(value, "prox")) { /* not proximity. assuming boolean */ pr(value, client_data); } else { struct cql_node *n = cn->u.boolean.modifiers; int ordered = 0; int distance = 1; for (; n ; n = n->u.st.modifiers) if (n->which == CQL_NODE_ST) { if (!cql_strcmp(n->u.st.index, "unit")) { if (!cql_strcmp(n->u.st.term, "word")) ; else return -1; } else if (!cql_strcmp(n->u.st.index, "distance")) { if (!strcmp(n->u.st.relation, "<=")) distance = atoi(n->u.st.term); else if (!strcmp(n->u.st.relation, "<")) distance = atoi(n->u.st.term) - 1; else return -1; } else if (!cql_strcmp(n->u.st.index, "unordered")) { ordered = 0; } else if (!cql_strcmp(n->u.st.index, "ordered")) { ordered = 1; } else return -1; } pr(ordered ? "!" : "%", client_data); if (distance != 1) { char x[40]; sprintf(x, "%d", distance); pr(x, client_data); } } pr(" (", client_data); r = cql_to_ccl_r(cn->u.boolean.right, pr, client_data); pr(")", client_data); return r; } static int cql_to_ccl_r(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data) { if (!cn) return -1; switch (cn->which) { case CQL_NODE_ST: return node(cn, pr, client_data); case CQL_NODE_BOOL: return bool(cn, pr, client_data); case CQL_NODE_SORT: return cql_to_ccl_r(cn->u.sort.search, pr, client_data); } return -1; } int cql_to_ccl(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data) { return cql_to_ccl_r(cn, pr, client_data); } void cql_to_ccl_stdio(struct cql_node *cn, FILE *f) { cql_to_ccl(cn, cql_fputs, f); } int cql_to_ccl_buf(struct cql_node *cn, char *out, int max) { struct cql_buf_write_info info; int r; info.off = 0; info.max = max; info.buf = out; r = cql_to_ccl(cn, cql_buf_write_handler, &info); if (info.off >= 0) info.buf[info.off] = '\0'; else return -2; /* buffer overflow */ return r; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/oid_util.c0000644000175000017500000000346013265142510012077 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file oid_util.c * \brief Implements OID base utilities * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include void oid_oidcpy(Odr_oid *t, const Odr_oid *s) { while ((*(t++) = *(s++)) > -1); } void oid_oidcat(Odr_oid *t, const Odr_oid *s) { while (*t > -1) t++; while ((*(t++) = *(s++)) > -1); } int oid_oidcmp(const Odr_oid *o1, const Odr_oid *o2) { while (*o1 == *o2 && *o1 > -1) { o1++; o2++; } if (*o1 == *o2) return 0; else if (*o1 > *o2) return 1; else return -1; } int oid_oidlen(const Odr_oid *o) { int len = 0; while (*(o++) >= 0) len++; return len; } char *oid_oid_to_dotstring(const Odr_oid *oid, char *oidbuf) { char tmpbuf[20]; int i; oidbuf[0] = '\0'; for (i = 0; oid[i] != -1 && i < OID_SIZE; i++) { yaz_snprintf(tmpbuf, sizeof(tmpbuf)-1, "%d", oid[i]); if (i > 0) strcat(oidbuf, "."); strcat(oidbuf, tmpbuf); } return oidbuf; } int oid_dotstring_to_oid(const char *name, Odr_oid *oid) { int i = 0; int val = 0; while (yaz_isdigit (*name)) { val = val*10 + (*name - '0'); name++; if (*name == '.') { if (i < OID_SIZE-1) oid[i++] = val; val = 0; name++; } } if (i == 0) return -1; oid[i] = val; oid[i+1] = -1; return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/nmem.c0000644000175000017500000001137113265142510011223 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file nmem.c * \brief Implements Nibble Memory * * This is a simple and fairly wasteful little module for nibble memory * allocation. * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #if YAZ_POSIX_THREADS #include #endif #if YAZ_POSIX_THREADS static pthread_mutex_t nmem_mutex = PTHREAD_MUTEX_INITIALIZER; #endif static size_t no_nmem_handles = 0; static size_t no_nmem_blocks = 0; static size_t nmem_allocated = 0; #define NMEM_CHUNK (4*1024) struct nmem_block { char *buf; /* memory allocated in this block */ size_t size; /* size of buf */ size_t top; /* top of buffer */ struct nmem_block *next; }; struct nmem_control { size_t total; struct nmem_block *blocks; struct nmem_control *next; }; struct align { char x; union { char c; short s; int i; long l; #if HAVE_LONG_LONG long long ll; #endif float f; double d; } u; }; #define NMEM_ALIGN (offsetof(struct align, u)) static int log_level = 0; static int log_level_initialized = 0; static void nmem_lock(void) { #if YAZ_POSIX_THREADS pthread_mutex_lock(&nmem_mutex); #endif } static void nmem_unlock(void) { #if YAZ_POSIX_THREADS pthread_mutex_unlock(&nmem_mutex); #endif } static void free_block(struct nmem_block *p) { nmem_lock(); no_nmem_blocks--; nmem_allocated -= p->size; nmem_unlock(); xfree(p->buf); xfree(p); if (log_level) yaz_log(log_level, "nmem free_block p=%p", p); } /* * acquire a block with a minimum of size free bytes. */ static struct nmem_block *get_block(size_t size) { struct nmem_block *r; size_t get = NMEM_CHUNK; if (log_level) yaz_log(log_level, "nmem get_block size=%ld", (long) size); if (get < size) get = size; if (log_level) yaz_log(log_level, "nmem get_block alloc new block size=%ld", (long) get); r = (struct nmem_block *) xmalloc(sizeof(*r)); r->buf = (char *)xmalloc(r->size = get); r->top = 0; nmem_lock(); no_nmem_blocks++; nmem_allocated += r->size; nmem_unlock(); return r; } void nmem_reset(NMEM n) { struct nmem_block *t; yaz_log(log_level, "nmem_reset p=%p", n); if (!n) return; while (n->blocks) { t = n->blocks; n->blocks = n->blocks->next; free_block(t); } n->total = 0; } void *nmem_malloc(NMEM n, size_t size) { struct nmem_block *p; char *r; if (!n) { yaz_log(YLOG_FATAL, "calling nmem_malloc with an null pointer"); abort(); } p = n->blocks; if (!p || p->size < size + p->top) { p = get_block(size); p->next = n->blocks; n->blocks = p; } r = p->buf + p->top; /* align size */ p->top += (size + (NMEM_ALIGN - 1)) & ~(NMEM_ALIGN - 1); n->total += size; return r; } size_t nmem_total(NMEM n) { return n->total; } void nmem_init_globals(void) { #if YAZ_POSIX_THREADS pthread_atfork(nmem_lock, nmem_unlock, nmem_unlock); #endif } NMEM nmem_create(void) { NMEM r; nmem_lock(); no_nmem_handles++; nmem_unlock(); if (!log_level_initialized) { /* below will call nmem_init_globals once */ log_level = yaz_log_module_level("nmem"); log_level_initialized = 1; } r = (struct nmem_control *)xmalloc(sizeof(*r)); r->blocks = 0; r->total = 0; r->next = 0; return r; } void nmem_destroy(NMEM n) { if (!n) return; nmem_reset(n); xfree(n); nmem_lock(); no_nmem_handles--; nmem_unlock(); } void nmem_transfer(NMEM dst, NMEM src) { struct nmem_block *t; while ((t = src->blocks)) { src->blocks = t->next; t->next = dst->blocks; dst->blocks = t; } dst->total += src->total; src->total = 0; } int nmem_get_status(char *dst, size_t l) { size_t handles, blocks, allocated; nmem_lock(); handles = no_nmem_handles; blocks = no_nmem_blocks; allocated = nmem_allocated; nmem_unlock(); yaz_snprintf(dst, l, "\n" " %zd\n" " %zd\n" " %zd\n" "\n", handles, blocks, allocated); return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/otherinfo.c0000644000175000017500000001345113265142510012265 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file otherinfo.c * \brief Implements Z39.50 OtherInfo utilities */ #if HAVE_CONFIG_H #include #endif #include #include #include void yaz_oi_APDU(Z_APDU *apdu, Z_OtherInformation ***oip) { switch (apdu->which) { case Z_APDU_initRequest: *oip = &apdu->u.initRequest->otherInfo; break; case Z_APDU_searchRequest: *oip = &apdu->u.searchRequest->otherInfo; break; case Z_APDU_presentRequest: *oip = &apdu->u.presentRequest->otherInfo; break; case Z_APDU_sortRequest: *oip = &apdu->u.sortRequest->otherInfo; break; case Z_APDU_scanRequest: *oip = &apdu->u.scanRequest->otherInfo; break; case Z_APDU_extendedServicesRequest: *oip = &apdu->u.extendedServicesRequest->otherInfo; break; case Z_APDU_deleteResultSetRequest: *oip = &apdu->u.deleteResultSetRequest->otherInfo; break; case Z_APDU_initResponse: *oip = &apdu->u.initResponse->otherInfo; break; case Z_APDU_searchResponse: *oip = &apdu->u.searchResponse->otherInfo; break; case Z_APDU_presentResponse: *oip = &apdu->u.presentResponse->otherInfo; break; case Z_APDU_sortResponse: *oip = &apdu->u.sortResponse->otherInfo; break; case Z_APDU_scanResponse: *oip = &apdu->u.scanResponse->otherInfo; break; case Z_APDU_extendedServicesResponse: *oip = &apdu->u.extendedServicesResponse->otherInfo; break; case Z_APDU_deleteResultSetResponse: *oip = &apdu->u.deleteResultSetResponse->otherInfo; break; case Z_APDU_duplicateDetectionRequest: *oip = &apdu->u.duplicateDetectionRequest->otherInfo; break; case Z_APDU_duplicateDetectionResponse: *oip = &apdu->u.duplicateDetectionResponse->otherInfo; break; default: *oip = 0; break; } } Z_OtherInformationUnit *yaz_oi_update( Z_OtherInformation **otherInformationP, ODR odr, const Odr_oid *oid, int categoryValue, int delete_flag) { int i; Z_OtherInformation *otherInformation; if (!otherInformationP) return 0; otherInformation = *otherInformationP; if (!otherInformation) { if (!odr) return 0; otherInformation = *otherInformationP = (Z_OtherInformation *) odr_malloc (odr, sizeof(*otherInformation)); otherInformation->num_elements = 0; otherInformation->list = 0; } for (i = 0; inum_elements; i++) { if (!oid) { /* DS: Want does this do? Returns the first element without a category */ if (!otherInformation->list[i]->category) return otherInformation->list[i]; } else { if (otherInformation->list[i]->category && categoryValue == *otherInformation->list[i]->category->categoryValue && !oid_oidcmp (oid, otherInformation->list[i]->category-> categoryTypeId)) { Z_OtherInformationUnit *this_list = otherInformation->list[i]; if (delete_flag) { (otherInformation->num_elements)--; while (i < otherInformation->num_elements) { otherInformation->list[i] = otherInformation->list[i+1]; i++; } } return this_list; } } } if (!odr) return 0; else { Z_OtherInformationUnit **newlist = (Z_OtherInformationUnit**) odr_malloc(odr, (otherInformation->num_elements+1) * sizeof(*newlist)); for (i = 0; inum_elements; i++) newlist[i] = otherInformation->list[i]; otherInformation->list = newlist; otherInformation->list[i] = (Z_OtherInformationUnit*) odr_malloc (odr, sizeof(Z_OtherInformationUnit)); if (oid) { otherInformation->list[i]->category = (Z_InfoCategory*) odr_malloc (odr, sizeof(Z_InfoCategory)); otherInformation->list[i]->category->categoryTypeId = (Odr_oid*) odr_oiddup (odr, oid); otherInformation->list[i]->category->categoryValue = odr_intdup(odr, categoryValue); } else otherInformation->list[i]->category = 0; otherInformation->list[i]->which = Z_OtherInfo_characterInfo; otherInformation->list[i]->information.characterInfo = 0; otherInformation->num_elements = i+1; return otherInformation->list[i]; } } void yaz_oi_set_string_oid ( Z_OtherInformation **otherInformation, ODR odr, const Odr_oid *oid, int categoryValue, const char *str) { Z_OtherInformationUnit *oi = yaz_oi_update(otherInformation, odr, oid, categoryValue, 0); if (!oi) return; oi->which = Z_OtherInfo_characterInfo; oi->information.characterInfo = odr_strdup (odr, str); } char *yaz_oi_get_string_oid ( Z_OtherInformation **otherInformation, const Odr_oid *oid, int categoryValue, int delete_flag) { Z_OtherInformationUnit *oi; if ((oi = yaz_oi_update(otherInformation, 0, oid, categoryValue, delete_flag)) && oi->which == Z_OtherInfo_characterInfo) return oi->information.characterInfo; return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zes-update0.c0000644000175000017500000001464213273126163012441 00000000000000/** \file zes-update0.c \brief ASN.1 Module ESFormat-Update0 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_IU0UpdateEsRequest(ODR o, Z_IU0UpdateEsRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_IU0OriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT, 1, 0, "toKeep") && odr_explicit_tag(o, z_IU0OriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT, 2, 0, "notToKeep") && odr_sequence_end(o); } int z_IU0UpdateTaskPackage(ODR o, Z_IU0UpdateTaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_IU0OriginPartToKeep, &(*p)->originPart, ODR_CONTEXT, 1, 0, "originPart") && odr_explicit_tag(o, z_IU0TargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 0, "targetPart") && odr_sequence_end(o); } int z_IU0Update(ODR o, Z_IU0Update **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IU0Update_esRequest, (Odr_fun) z_IU0UpdateEsRequest, "esRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IU0Update_taskPackage, (Odr_fun) z_IU0UpdateTaskPackage, "taskPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_IU0OriginPartToKeep(ODR o, Z_IU0OriginPartToKeep **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->action, ODR_CONTEXT, 1, 0, "action") && odr_implicit_tag(o, z_InternationalString, &(*p)->databaseName, ODR_CONTEXT, 2, 0, "databaseName") && odr_implicit_tag(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 3, 1, "schema") && odr_implicit_tag(o, z_InternationalString, &(*p)->elementSetName, ODR_CONTEXT, 4, 1, "elementSetName") && odr_sequence_end(o); } int z_IU0OriginPartNotToKeep(ODR o, Z_IU0OriginPartNotToKeep **p, int opt, const char *name) { return z_IU0SuppliedRecords (o, p, opt, name); } int z_IU0TargetPart(ODR o, Z_IU0TargetPart **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->updateStatus, ODR_CONTEXT, 1, 0, "updateStatus") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->globalDiagnostics, &(*p)->num_globalDiagnostics, "globalDiagnostics") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_IU0TaskPackageRecordStructure, &(*p)->taskPackageRecords, &(*p)->num_taskPackageRecords, "taskPackageRecords") || odr_ok(o)) && odr_sequence_end(o); } int z_IU0SuppliedRecordsId(ODR o, Z_IU0SuppliedRecordsId **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IU0SuppliedRecordsId_timeStamp, (Odr_fun) odr_generalizedtime, "timeStamp"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IU0SuppliedRecordsId_versionNumber, (Odr_fun) z_InternationalString, "versionNumber"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IU0SuppliedRecordsId_previousVersion, (Odr_fun) z_External, "previousVersion"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_IU0SuppliedRecords_elem(ODR o, Z_IU0SuppliedRecords_elem **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IU0SuppliedRecords_elem_number, (Odr_fun) odr_integer, "number"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IU0SuppliedRecords_elem_string, (Odr_fun) z_InternationalString, "string"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IU0SuppliedRecords_elem_opaque, (Odr_fun) odr_octetstring, "opaque"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "recordId") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_explicit_tag(o, z_IU0SuppliedRecordsId, &(*p)->supplementalId, ODR_CONTEXT, 2, 1, "supplementalId") && odr_implicit_tag(o, z_IU0CorrelationInfo, &(*p)->correlationInfo, ODR_CONTEXT, 3, 1, "correlationInfo") && odr_implicit_tag(o, z_External, &(*p)->record, ODR_CONTEXT, 4, 0, "record") && odr_sequence_end(o); } int z_IU0SuppliedRecords(ODR o, Z_IU0SuppliedRecords **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_IU0SuppliedRecords_elem, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_IU0CorrelationInfo(ODR o, Z_IU0CorrelationInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->note, ODR_CONTEXT, 1, 1, "note") && odr_implicit_tag(o, odr_integer, &(*p)->id, ODR_CONTEXT, 2, 1, "id") && odr_sequence_end(o); } int z_IU0TaskPackageRecordStructure(ODR o, Z_IU0TaskPackageRecordStructure **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IU0TaskPackageRecordStructure_record, (Odr_fun) z_External, "record"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_IU0TaskPackageRecordStructure_diagnostic, (Odr_fun) z_DiagRec, "diagnostic"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "recordOrSurDiag") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_implicit_tag(o, z_IU0CorrelationInfo, &(*p)->correlationInfo, ODR_CONTEXT, 2, 1, "correlationInfo") && odr_implicit_tag(o, odr_integer, &(*p)->recordStatus, ODR_CONTEXT, 3, 0, "recordStatus") && odr_sequence_end(o); } yaz-5.28.0/src/z-exp.c0000644000175000017500000015671613273126163011354 00000000000000/** \file z-exp.c \brief ASN.1 Module RecordSyntax-explain Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_Explain_targetInfo, (Odr_fun) z_TargetInfo, "targetInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Explain_databaseInfo, (Odr_fun) z_DatabaseInfo, "databaseInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Explain_schemaInfo, (Odr_fun) z_SchemaInfo, "schemaInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Explain_tagSetInfo, (Odr_fun) z_TagSetInfo, "tagSetInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Explain_recordSyntaxInfo, (Odr_fun) z_RecordSyntaxInfo, "recordSyntaxInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Explain_attributeSetInfo, (Odr_fun) z_AttributeSetInfo, "attributeSetInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_Explain_termListInfo, (Odr_fun) z_TermListInfo, "termListInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Explain_extendedServicesInfo, (Odr_fun) z_ExtendedServicesInfo, "extendedServicesInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Explain_attributeDetails, (Odr_fun) z_AttributeDetails, "attributeDetails"}, {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_Explain_termListDetails, (Odr_fun) z_TermListDetails, "termListDetails"}, {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_Explain_elementSetDetails, (Odr_fun) z_ElementSetDetails, "elementSetDetails"}, {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_Explain_retrievalRecordDetails, (Odr_fun) z_RetrievalRecordDetails, "retrievalRecordDetails"}, {ODR_IMPLICIT, ODR_CONTEXT, 12, Z_Explain_sortDetails, (Odr_fun) z_SortDetails, "sortDetails"}, {ODR_IMPLICIT, ODR_CONTEXT, 13, Z_Explain_processing, (Odr_fun) z_ProcessingInformation, "processing"}, {ODR_IMPLICIT, ODR_CONTEXT, 14, Z_Explain_variants, (Odr_fun) z_VariantSetInfo, "variants"}, {ODR_IMPLICIT, ODR_CONTEXT, 15, Z_Explain_units, (Odr_fun) z_UnitInfo, "units"}, {ODR_IMPLICIT, ODR_CONTEXT, 100, Z_Explain_categoryList, (Odr_fun) z_CategoryList, "categoryList"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_TargetInfo(ODR o, Z_TargetInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 1, 0, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->recentNews, ODR_CONTEXT, 2, 1, "recentNews") && odr_implicit_tag(o, z_IconObject, &(*p)->icon, ODR_CONTEXT, 3, 1, "icon") && odr_implicit_tag(o, odr_bool, &(*p)->namedResultSets, ODR_CONTEXT, 4, 0, "namedResultSets") && odr_implicit_tag(o, odr_bool, &(*p)->multipleDBsearch, ODR_CONTEXT, 5, 0, "multipleDBsearch") && odr_implicit_tag(o, odr_integer, &(*p)->maxResultSets, ODR_CONTEXT, 6, 1, "maxResultSets") && odr_implicit_tag(o, odr_integer, &(*p)->maxResultSize, ODR_CONTEXT, 7, 1, "maxResultSize") && odr_implicit_tag(o, odr_integer, &(*p)->maxTerms, ODR_CONTEXT, 8, 1, "maxTerms") && odr_implicit_tag(o, z_IntUnit, &(*p)->timeoutInterval, ODR_CONTEXT, 9, 1, "timeoutInterval") && odr_implicit_tag(o, z_HumanString, &(*p)->welcomeMessage, ODR_CONTEXT, 10, 1, "welcomeMessage") && odr_implicit_tag(o, z_ContactInfo, &(*p)->contactInfo, ODR_CONTEXT, 11, 1, "contactInfo") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 12, 1, "description") && odr_implicit_settag(o, ODR_CONTEXT, 13) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->nicknames, &(*p)->num_nicknames, "nicknames") || odr_ok(o)) && odr_implicit_tag(o, z_HumanString, &(*p)->usageRest, ODR_CONTEXT, 14, 1, "usageRest") && odr_implicit_tag(o, z_HumanString, &(*p)->paymentAddr, ODR_CONTEXT, 15, 1, "paymentAddr") && odr_implicit_tag(o, z_HumanString, &(*p)->hours, ODR_CONTEXT, 16, 1, "hours") && odr_implicit_settag(o, ODR_CONTEXT, 17) && (odr_sequence_of(o, (Odr_fun) z_DatabaseList, &(*p)->dbCombinations, &(*p)->num_dbCombinations, "dbCombinations") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 18) && (odr_sequence_of(o, (Odr_fun) z_NetworkAddress, &(*p)->addresses, &(*p)->num_addresses, "addresses") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 101) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->languages, &(*p)->num_languages, "languages") || odr_ok(o)) && odr_implicit_tag(o, z_AccessInfo, &(*p)->commonAccessInfo, ODR_CONTEXT, 19, 1, "commonAccessInfo") && odr_sequence_end(o); } int z_DatabaseInfo(ODR o, Z_DatabaseInfo **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_DatabaseInfo_actualNumber, (Odr_fun) odr_integer, "actualNumber"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DatabaseInfo_approxNumber, (Odr_fun) odr_integer, "approxNumber"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_DatabaseName, &(*p)->name, ODR_CONTEXT, 1, 0, "name") && odr_implicit_tag(o, odr_null, &(*p)->explainDatabase, ODR_CONTEXT, 2, 1, "explainDatabase") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_DatabaseName, &(*p)->nicknames, &(*p)->num_nicknames, "nicknames") || odr_ok(o)) && odr_implicit_tag(o, z_IconObject, &(*p)->icon, ODR_CONTEXT, 4, 1, "icon") && odr_implicit_tag(o, odr_bool, &(*p)->userFee, ODR_CONTEXT, 5, 0, "userFee") && odr_implicit_tag(o, odr_bool, &(*p)->available, ODR_CONTEXT, 6, 0, "available") && odr_implicit_tag(o, z_HumanString, &(*p)->titleString, ODR_CONTEXT, 7, 1, "titleString") && odr_implicit_settag(o, ODR_CONTEXT, 8) && (odr_sequence_of(o, (Odr_fun) z_HumanString, &(*p)->keywords, &(*p)->num_keywords, "keywords") || odr_ok(o)) && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 9, 1, "description") && odr_implicit_tag(o, z_DatabaseList, &(*p)->associatedDbs, ODR_CONTEXT, 10, 1, "associatedDbs") && odr_implicit_tag(o, z_DatabaseList, &(*p)->subDbs, ODR_CONTEXT, 11, 1, "subDbs") && odr_implicit_tag(o, z_HumanString, &(*p)->disclaimers, ODR_CONTEXT, 12, 1, "disclaimers") && odr_implicit_tag(o, z_HumanString, &(*p)->news, ODR_CONTEXT, 13, 1, "news") && ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 14, "recordCount") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_implicit_tag(o, z_HumanString, &(*p)->defaultOrder, ODR_CONTEXT, 15, 1, "defaultOrder") && odr_implicit_tag(o, odr_integer, &(*p)->avRecordSize, ODR_CONTEXT, 16, 1, "avRecordSize") && odr_implicit_tag(o, odr_integer, &(*p)->maxRecordSize, ODR_CONTEXT, 17, 1, "maxRecordSize") && odr_implicit_tag(o, z_HumanString, &(*p)->hours, ODR_CONTEXT, 18, 1, "hours") && odr_implicit_tag(o, z_HumanString, &(*p)->bestTime, ODR_CONTEXT, 19, 1, "bestTime") && odr_implicit_tag(o, odr_generalizedtime, &(*p)->lastUpdate, ODR_CONTEXT, 20, 1, "lastUpdate") && odr_implicit_tag(o, z_IntUnit, &(*p)->updateInterval, ODR_CONTEXT, 21, 1, "updateInterval") && odr_implicit_tag(o, z_HumanString, &(*p)->coverage, ODR_CONTEXT, 22, 1, "coverage") && odr_implicit_tag(o, odr_bool, &(*p)->proprietary, ODR_CONTEXT, 23, 1, "proprietary") && odr_implicit_tag(o, z_HumanString, &(*p)->copyrightText, ODR_CONTEXT, 24, 1, "copyrightText") && odr_implicit_tag(o, z_HumanString, &(*p)->copyrightNotice, ODR_CONTEXT, 25, 1, "copyrightNotice") && odr_implicit_tag(o, z_ContactInfo, &(*p)->producerContactInfo, ODR_CONTEXT, 26, 1, "producerContactInfo") && odr_implicit_tag(o, z_ContactInfo, &(*p)->supplierContactInfo, ODR_CONTEXT, 27, 1, "supplierContactInfo") && odr_implicit_tag(o, z_ContactInfo, &(*p)->submissionContactInfo, ODR_CONTEXT, 28, 1, "submissionContactInfo") && odr_implicit_tag(o, z_AccessInfo, &(*p)->accessInfo, ODR_CONTEXT, 29, 1, "accessInfo") && odr_sequence_end(o); } int z_TagTypeMapping(ODR o, Z_TagTypeMapping **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 0, 0, "tagType") && odr_implicit_tag(o, odr_oid, &(*p)->tagSet, ODR_CONTEXT, 1, 1, "tagSet") && odr_implicit_tag(o, odr_null, &(*p)->defaultTagType, ODR_CONTEXT, 2, 1, "defaultTagType") && odr_sequence_end(o); } int z_SchemaInfo(ODR o, Z_SchemaInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 1, 0, "schema") && odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 0, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 3, 1, "description") && odr_implicit_settag(o, ODR_CONTEXT, 4) && (odr_sequence_of(o, (Odr_fun) z_TagTypeMapping, &(*p)->tagTypeMapping, &(*p)->num_tagTypeMapping, "tagTypeMapping") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 5) && (odr_sequence_of(o, (Odr_fun) z_ElementInfo, &(*p)->recordStructure, &(*p)->num_recordStructure, "recordStructure") || odr_ok(o)) && odr_sequence_end(o); } int z_ElementInfo(ODR o, Z_ElementInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->elementName, ODR_CONTEXT, 1, 0, "elementName") && odr_implicit_tag(o, z_Path, &(*p)->elementTagPath, ODR_CONTEXT, 2, 0, "elementTagPath") && odr_explicit_tag(o, z_ElementDataType, &(*p)->dataType, ODR_CONTEXT, 3, 1, "dataType") && odr_implicit_tag(o, odr_bool, &(*p)->required, ODR_CONTEXT, 4, 0, "required") && odr_implicit_tag(o, odr_bool, &(*p)->repeatable, ODR_CONTEXT, 5, 0, "repeatable") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 6, 1, "description") && odr_sequence_end(o); } int z_PathUnit(ODR o, Z_PathUnit **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 0, "tagType") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT, 2, 0, "tagValue") && odr_sequence_end(o); } int z_Path(ODR o, Z_Path **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_PathUnit, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ElementInfoList(ODR o, Z_ElementInfoList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_ElementInfo, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ElementDataType(ODR o, Z_ElementDataType **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ElementDataType_primitive, (Odr_fun) z_PrimitiveDataType, "primitive"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementDataType_structured, (Odr_fun) z_ElementInfoList, "structured"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PrimitiveDataType(ODR o, Z_PrimitiveDataType **p, int opt, const char *name) { return odr_integer (o, p, opt, name); } int z_TagSetElements(ODR o, Z_TagSetElements **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->elementname, ODR_CONTEXT, 1, 0, "elementname") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->nicknames, &(*p)->num_nicknames, "nicknames") || odr_ok(o)) && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->elementTag, ODR_CONTEXT, 3, 0, "elementTag") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1, "description") && odr_explicit_tag(o, z_PrimitiveDataType, &(*p)->dataType, ODR_CONTEXT, 5, 1, "dataType") && z_OtherInformation(o, &(*p)->otherTagInfo, 1, "otherTagInfo") && odr_sequence_end(o); } int z_TagSetInfo(ODR o, Z_TagSetInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, odr_oid, &(*p)->tagSet, ODR_CONTEXT, 1, 0, "tagSet") && odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 0, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 3, 1, "description") && odr_implicit_settag(o, ODR_CONTEXT, 4) && (odr_sequence_of(o, (Odr_fun) z_TagSetElements, &(*p)->elements, &(*p)->num_elements, "elements") || odr_ok(o)) && odr_sequence_end(o); } int z_RecordSyntaxInfo(ODR o, Z_RecordSyntaxInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 1, 0, "recordSyntax") && odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 0, "name") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->transferSyntaxes, &(*p)->num_transferSyntaxes, "transferSyntaxes") || odr_ok(o)) && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1, "description") && odr_implicit_tag(o, z_InternationalString, &(*p)->asn1Module, ODR_CONTEXT, 5, 1, "asn1Module") && odr_implicit_settag(o, ODR_CONTEXT, 6) && (odr_sequence_of(o, (Odr_fun) z_ElementInfo, &(*p)->abstractStructure, &(*p)->num_abstractStructure, "abstractStructure") || odr_ok(o)) && odr_sequence_end(o); } int z_AttributeSetInfo(ODR o, Z_AttributeSetInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_AttributeSetId, &(*p)->attributeSet, ODR_CONTEXT, 1, 0, "attributeSet") && odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 0, "name") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_AttributeType, &(*p)->attributes, &(*p)->num_attributes, "attributes") || odr_ok(o)) && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1, "description") && odr_sequence_end(o); } int z_AttributeType(ODR o, Z_AttributeType **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_implicit_tag(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 2, 0, "attributeType") && odr_implicit_settag(o, ODR_CONTEXT, 3) && odr_sequence_of(o, (Odr_fun) z_AttributeDescription, &(*p)->attributeValues, &(*p)->num_attributeValues, "attributeValues") && odr_sequence_end(o); } int z_AttributeDescription(ODR o, Z_AttributeDescription **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->attributeValue, ODR_CONTEXT, 2, 0, "attributeValue") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_StringOrNumeric, &(*p)->equivalentAttributes, &(*p)->num_equivalentAttributes, "equivalentAttributes") || odr_ok(o)) && odr_sequence_end(o); } int z_TermListElement(ODR o, Z_TermListElement **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 1, 0, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->title, ODR_CONTEXT, 2, 1, "title") && odr_implicit_tag(o, odr_integer, &(*p)->searchCost, ODR_CONTEXT, 3, 1, "searchCost") && odr_implicit_tag(o, odr_bool, &(*p)->scanable, ODR_CONTEXT, 4, 0, "scanable") && odr_implicit_settag(o, ODR_CONTEXT, 5) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->broader, &(*p)->num_broader, "broader") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 6) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->narrower, &(*p)->num_narrower, "narrower") || odr_ok(o)) && odr_sequence_end(o); } int z_TermListInfo(ODR o, Z_TermListInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0, "databaseName") && odr_implicit_settag(o, ODR_CONTEXT, 2) && odr_sequence_of(o, (Odr_fun) z_TermListElement, &(*p)->termLists, &(*p)->num_termLists, "termLists") && odr_sequence_end(o); } int z_ExtendedServicesInfo(ODR o, Z_ExtendedServicesInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, odr_oid, &(*p)->type, ODR_CONTEXT, 1, 0, "type") && odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 1, "name") && odr_implicit_tag(o, odr_bool, &(*p)->privateType, ODR_CONTEXT, 3, 0, "privateType") && odr_implicit_tag(o, odr_bool, &(*p)->restrictionsApply, ODR_CONTEXT, 5, 0, "restrictionsApply") && odr_implicit_tag(o, odr_bool, &(*p)->feeApply, ODR_CONTEXT, 6, 0, "feeApply") && odr_implicit_tag(o, odr_bool, &(*p)->available, ODR_CONTEXT, 7, 0, "available") && odr_implicit_tag(o, odr_bool, &(*p)->retentionSupported, ODR_CONTEXT, 8, 0, "retentionSupported") && odr_implicit_tag(o, odr_integer, &(*p)->waitAction, ODR_CONTEXT, 9, 0, "waitAction") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 10, 1, "description") && odr_implicit_tag(o, z_External, &(*p)->specificExplain, ODR_CONTEXT, 11, 1, "specificExplain") && odr_implicit_tag(o, z_InternationalString, &(*p)->esASN, ODR_CONTEXT, 12, 1, "esASN") && odr_sequence_end(o); } int z_AttributeDetails(ODR o, Z_AttributeDetails **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0, "databaseName") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_AttributeSetDetails, &(*p)->attributesBySet, &(*p)->num_attributesBySet, "attributesBySet") || odr_ok(o)) && odr_implicit_tag(o, z_AttributeCombinations, &(*p)->attributeCombinations, ODR_CONTEXT, 3, 1, "attributeCombinations") && odr_sequence_end(o); } int z_AttributeSetDetails(ODR o, Z_AttributeSetDetails **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_AttributeSetId, &(*p)->attributeSet, ODR_CONTEXT, 0, 0, "attributeSet") && odr_implicit_settag(o, ODR_CONTEXT, 1) && odr_sequence_of(o, (Odr_fun) z_AttributeTypeDetails, &(*p)->attributesByType, &(*p)->num_attributesByType, "attributesByType") && odr_sequence_end(o); } int z_AttributeTypeDetails(ODR o, Z_AttributeTypeDetails **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 0, 0, "attributeType") && odr_implicit_tag(o, z_OmittedAttributeInterpretation, &(*p)->defaultIfOmitted, ODR_CONTEXT, 1, 1, "defaultIfOmitted") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_AttributeValue, &(*p)->attributeValues, &(*p)->num_attributeValues, "attributeValues") || odr_ok(o)) && odr_sequence_end(o); } int z_OmittedAttributeInterpretation(ODR o, Z_OmittedAttributeInterpretation **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_StringOrNumeric, &(*p)->defaultValue, ODR_CONTEXT, 0, 1, "defaultValue") && odr_implicit_tag(o, z_HumanString, &(*p)->defaultDescription, ODR_CONTEXT, 1, 1, "defaultDescription") && odr_sequence_end(o); } int z_AttributeValue(ODR o, Z_AttributeValue **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_StringOrNumeric, &(*p)->value, ODR_CONTEXT, 0, 0, "value") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_StringOrNumeric, &(*p)->subAttributes, &(*p)->num_subAttributes, "subAttributes") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_StringOrNumeric, &(*p)->superAttributes, &(*p)->num_superAttributes, "superAttributes") || odr_ok(o)) && odr_implicit_tag(o, odr_null, &(*p)->partialSupport, ODR_CONTEXT, 4, 1, "partialSupport") && odr_sequence_end(o); } int z_EScanInfo(ODR o, Z_EScanInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->maxStepSize, ODR_CONTEXT, 0, 1, "maxStepSize") && odr_implicit_tag(o, z_HumanString, &(*p)->collatingSequence, ODR_CONTEXT, 1, 1, "collatingSequence") && odr_implicit_tag(o, odr_bool, &(*p)->increasing, ODR_CONTEXT, 2, 1, "increasing") && odr_sequence_end(o); } int z_TermListDetails(ODR o, Z_TermListDetails **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_InternationalString, &(*p)->termListName, ODR_CONTEXT, 1, 0, "termListName") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 2, 1, "description") && odr_implicit_tag(o, z_AttributeCombinations, &(*p)->attributes, ODR_CONTEXT, 3, 1, "attributes") && odr_implicit_tag(o, z_EScanInfo, &(*p)->scanInfo, ODR_CONTEXT, 4, 1, "scanInfo") && odr_implicit_tag(o, odr_integer, &(*p)->estNumberTerms, ODR_CONTEXT, 5, 1, "estNumberTerms") && odr_implicit_settag(o, ODR_CONTEXT, 6) && (odr_sequence_of(o, (Odr_fun) z_Term, &(*p)->sampleTerms, &(*p)->num_sampleTerms, "sampleTerms") || odr_ok(o)) && odr_sequence_end(o); } int z_ElementSetDetails(ODR o, Z_ElementSetDetails **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0, "databaseName") && odr_implicit_tag(o, z_ElementSetName, &(*p)->elementSetName, ODR_CONTEXT, 2, 0, "elementSetName") && odr_implicit_tag(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 3, 0, "recordSyntax") && odr_implicit_tag(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 4, 0, "schema") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 5, 1, "description") && odr_implicit_settag(o, ODR_CONTEXT, 6) && (odr_sequence_of(o, (Odr_fun) z_PerElementDetails, &(*p)->detailsPerElement, &(*p)->num_detailsPerElement, "detailsPerElement") || odr_ok(o)) && odr_sequence_end(o); } int z_RetrievalRecordDetails(ODR o, Z_RetrievalRecordDetails **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0, "databaseName") && odr_implicit_tag(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 2, 0, "schema") && odr_implicit_tag(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 3, 0, "recordSyntax") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1, "description") && odr_implicit_settag(o, ODR_CONTEXT, 5) && (odr_sequence_of(o, (Odr_fun) z_PerElementDetails, &(*p)->detailsPerElement, &(*p)->num_detailsPerElement, "detailsPerElement") || odr_ok(o)) && odr_sequence_end(o); } int z_PerElementDetails(ODR o, Z_PerElementDetails **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1, "name") && odr_implicit_tag(o, z_RecordTag, &(*p)->recordTag, ODR_CONTEXT, 1, 1, "recordTag") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_Path, &(*p)->schemaTags, &(*p)->num_schemaTags, "schemaTags") || odr_ok(o)) && odr_implicit_tag(o, odr_integer, &(*p)->maxSize, ODR_CONTEXT, 3, 1, "maxSize") && odr_implicit_tag(o, odr_integer, &(*p)->minSize, ODR_CONTEXT, 4, 1, "minSize") && odr_implicit_tag(o, odr_integer, &(*p)->avgSize, ODR_CONTEXT, 5, 1, "avgSize") && odr_implicit_tag(o, odr_integer, &(*p)->fixedSize, ODR_CONTEXT, 6, 1, "fixedSize") && odr_implicit_tag(o, odr_bool, &(*p)->repeatable, ODR_CONTEXT, 8, 0, "repeatable") && odr_implicit_tag(o, odr_bool, &(*p)->required, ODR_CONTEXT, 9, 0, "required") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 12, 1, "description") && odr_implicit_tag(o, z_HumanString, &(*p)->contents, ODR_CONTEXT, 13, 1, "contents") && odr_implicit_tag(o, z_HumanString, &(*p)->billingInfo, ODR_CONTEXT, 14, 1, "billingInfo") && odr_implicit_tag(o, z_HumanString, &(*p)->restrictions, ODR_CONTEXT, 15, 1, "restrictions") && odr_implicit_settag(o, ODR_CONTEXT, 16) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->alternateNames, &(*p)->num_alternateNames, "alternateNames") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 17) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->genericNames, &(*p)->num_genericNames, "genericNames") || odr_ok(o)) && odr_implicit_tag(o, z_AttributeCombinations, &(*p)->searchAccess, ODR_CONTEXT, 18, 1, "searchAccess") && odr_sequence_end(o); } int z_RecordTag(ODR o, Z_RecordTag **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_StringOrNumeric, &(*p)->qualifier, ODR_CONTEXT, 0, 1, "qualifier") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT, 1, 0, "tagValue") && odr_sequence_end(o); } int z_SortDetails(ODR o, Z_SortDetails **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0, "databaseName") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_SortKeyDetails, &(*p)->sortKeys, &(*p)->num_sortKeys, "sortKeys") || odr_ok(o)) && odr_sequence_end(o); } int z_SortKeyDetails(ODR o, Z_SortKeyDetails **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortKeyDetails_character, (Odr_fun) odr_null, "character"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortKeyDetails_numeric, (Odr_fun) odr_null, "numeric"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortKeyDetails_structured, (Odr_fun) z_HumanString, "structured"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 0, 1, "description") && odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) z_Specification, &(*p)->elementSpecifications, &(*p)->num_elementSpecifications, "elementSpecifications") || odr_ok(o)) && odr_implicit_tag(o, z_AttributeCombinations, &(*p)->attributeSpecifications, ODR_CONTEXT, 2, 1, "attributeSpecifications") && ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 3, "sortType") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_implicit_tag(o, odr_integer, &(*p)->caseSensitivity, ODR_CONTEXT, 4, 1, "caseSensitivity") && odr_sequence_end(o); } int z_ProcessingInformation(ODR o, Z_ProcessingInformation **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0, "databaseName") && odr_implicit_tag(o, odr_integer, &(*p)->processingContext, ODR_CONTEXT, 2, 0, "processingContext") && odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 3, 0, "name") && odr_implicit_tag(o, odr_oid, &(*p)->oid, ODR_CONTEXT, 4, 0, "oid") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 5, 1, "description") && odr_implicit_tag(o, z_External, &(*p)->instructions, ODR_CONTEXT, 6, 1, "instructions") && odr_sequence_end(o); } int z_VariantSetInfo(ODR o, Z_VariantSetInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, odr_oid, &(*p)->variantSet, ODR_CONTEXT, 1, 0, "variantSet") && odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 0, "name") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_VariantClass, &(*p)->variants, &(*p)->num_variants, "variants") || odr_ok(o)) && odr_sequence_end(o); } int z_VariantClass(ODR o, Z_VariantClass **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_implicit_tag(o, odr_integer, &(*p)->variantClass, ODR_CONTEXT, 2, 0, "variantClass") && odr_implicit_settag(o, ODR_CONTEXT, 3) && odr_sequence_of(o, (Odr_fun) z_VariantType, &(*p)->variantTypes, &(*p)->num_variantTypes, "variantTypes") && odr_sequence_end(o); } int z_VariantType(ODR o, Z_VariantType **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_implicit_tag(o, odr_integer, &(*p)->variantType, ODR_CONTEXT, 2, 0, "variantType") && odr_implicit_tag(o, z_VariantValue, &(*p)->variantValue, ODR_CONTEXT, 3, 1, "variantValue") && odr_sequence_end(o); } int z_VariantValue(ODR o, Z_VariantValue **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_PrimitiveDataType, &(*p)->dataType, ODR_CONTEXT, 0, 0, "dataType") && odr_explicit_tag(o, z_ValueSet, &(*p)->values, ODR_CONTEXT, 1, 1, "values") && odr_sequence_end(o); } int z_ValueSetEnumerated(ODR o, Z_ValueSetEnumerated **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_ValueDescription, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ValueSet(ODR o, Z_ValueSet **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ValueSet_range, (Odr_fun) z_ValueRange, "range"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ValueSet_enumerated, (Odr_fun) z_ValueSetEnumerated, "enumerated"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ValueRange(ODR o, Z_ValueRange **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_ValueDescription, &(*p)->lower, ODR_CONTEXT, 0, 1, "lower") && odr_explicit_tag(o, z_ValueDescription, &(*p)->upper, ODR_CONTEXT, 1, 1, "upper") && odr_sequence_end(o); } int z_ValueDescription(ODR o, Z_ValueDescription **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, Z_ValueDescription_integer, (Odr_fun) odr_integer, "integer"}, {-1, -1, -1, Z_ValueDescription_string, (Odr_fun) z_InternationalString, "string"}, {-1, -1, -1, Z_ValueDescription_octets, (Odr_fun) odr_octetstring, "octets"}, {-1, -1, -1, Z_ValueDescription_oid, (Odr_fun) odr_oid, "oid"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ValueDescription_unit, (Odr_fun) z_Unit, "unit"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ValueDescription_valueAndUnit, (Odr_fun) z_IntUnit, "valueAndUnit"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_UnitInfo(ODR o, Z_UnitInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_tag(o, z_InternationalString, &(*p)->unitSystem, ODR_CONTEXT, 1, 0, "unitSystem") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 2, 1, "description") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_UnitType, &(*p)->units, &(*p)->num_units, "units") || odr_ok(o)) && odr_sequence_end(o); } int z_UnitType(ODR o, Z_UnitType **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->unitType, ODR_CONTEXT, 2, 0, "unitType") && odr_implicit_settag(o, ODR_CONTEXT, 3) && odr_sequence_of(o, (Odr_fun) z_Units, &(*p)->units, &(*p)->num_units, "units") && odr_sequence_end(o); } int z_Units(ODR o, Z_Units **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->unit, ODR_CONTEXT, 2, 0, "unit") && odr_sequence_end(o); } int z_CategoryList(ODR o, Z_CategoryList **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1, "commonInfo") && odr_implicit_settag(o, ODR_CONTEXT, 1) && odr_sequence_of(o, (Odr_fun) z_CategoryInfo, &(*p)->categories, &(*p)->num_categories, "categories") && odr_sequence_end(o); } int z_CategoryInfo(ODR o, Z_CategoryInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->category, ODR_CONTEXT, 1, 0, "category") && odr_implicit_tag(o, z_InternationalString, &(*p)->originalCategory, ODR_CONTEXT, 2, 1, "originalCategory") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 3, 1, "description") && odr_implicit_tag(o, z_InternationalString, &(*p)->asn1Module, ODR_CONTEXT, 4, 1, "asn1Module") && odr_sequence_end(o); } int z_CommonInfo(ODR o, Z_CommonInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_generalizedtime, &(*p)->dateAdded, ODR_CONTEXT, 0, 1, "dateAdded") && odr_implicit_tag(o, odr_generalizedtime, &(*p)->dateChanged, ODR_CONTEXT, 1, 1, "dateChanged") && odr_implicit_tag(o, odr_generalizedtime, &(*p)->expiry, ODR_CONTEXT, 2, 1, "expiry") && odr_implicit_tag(o, z_LanguageCode, &(*p)->humanStringLanguage, ODR_CONTEXT, 3, 1, "humanStringLanguage") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_HumanStringUnit(ODR o, Z_HumanStringUnit **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_LanguageCode, &(*p)->language, ODR_CONTEXT, 0, 1, "language") && odr_implicit_tag(o, z_InternationalString, &(*p)->text, ODR_CONTEXT, 1, 0, "text") && odr_sequence_end(o); } int z_HumanString(ODR o, Z_HumanString **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_HumanStringUnit, &(*p)->strings, &(*p)->num_strings, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_IconObjectUnit(ODR o, Z_IconObjectUnit **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IconObjectUnit_ianaType, (Odr_fun) z_InternationalString, "ianaType"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IconObjectUnit_z3950type, (Odr_fun) z_InternationalString, "z3950type"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IconObjectUnit_otherType, (Odr_fun) z_InternationalString, "otherType"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "bodyType") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_implicit_tag(o, odr_octetstring, &(*p)->content, ODR_CONTEXT, 2, 0, "content") && odr_sequence_end(o); } int z_IconObject(ODR o, Z_IconObject **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_IconObjectUnit, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_LanguageCode(ODR o, Z_LanguageCode **p, int opt, const char *name) { return z_InternationalString (o, p, opt, name); } int z_ContactInfo(ODR o, Z_ContactInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1, "name") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_implicit_tag(o, z_HumanString, &(*p)->address, ODR_CONTEXT, 2, 1, "address") && odr_implicit_tag(o, z_InternationalString, &(*p)->email, ODR_CONTEXT, 3, 1, "email") && odr_implicit_tag(o, z_InternationalString, &(*p)->phone, ODR_CONTEXT, 4, 1, "phone") && odr_sequence_end(o); } int z_NetworkAddressIA(ODR o, Z_NetworkAddressIA **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->hostAddress, ODR_CONTEXT, 0, 0, "hostAddress") && odr_implicit_tag(o, odr_integer, &(*p)->port, ODR_CONTEXT, 1, 0, "port") && odr_sequence_end(o); } int z_NetworkAddressOPA(ODR o, Z_NetworkAddressOPA **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->pSel, ODR_CONTEXT, 0, 0, "pSel") && odr_implicit_tag(o, z_InternationalString, &(*p)->sSel, ODR_CONTEXT, 1, 1, "sSel") && odr_implicit_tag(o, z_InternationalString, &(*p)->tSel, ODR_CONTEXT, 2, 1, "tSel") && odr_implicit_tag(o, z_InternationalString, &(*p)->nSap, ODR_CONTEXT, 3, 0, "nSap") && odr_sequence_end(o); } int z_NetworkAddressOther(ODR o, Z_NetworkAddressOther **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->type, ODR_CONTEXT, 0, 0, "type") && odr_implicit_tag(o, z_InternationalString, &(*p)->address, ODR_CONTEXT, 1, 0, "address") && odr_sequence_end(o); } int z_NetworkAddress(ODR o, Z_NetworkAddress **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_NetworkAddress_iA, (Odr_fun) z_NetworkAddressIA, "internetAddress"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_NetworkAddress_oPA, (Odr_fun) z_NetworkAddressOPA, "osiPresentationAddress"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_NetworkAddress_other, (Odr_fun) z_NetworkAddressOther, "other"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_AccessInfo(ODR o, Z_AccessInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 0) && (odr_sequence_of(o, (Odr_fun) z_QueryTypeDetails, &(*p)->queryTypesSupported, &(*p)->num_queryTypesSupported, "queryTypesSupported") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->diagnosticsSets, &(*p)->num_diagnosticsSets, "diagnosticsSets") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_AttributeSetId, &(*p)->attributeSetIds, &(*p)->num_attributeSetIds, "attributeSetIds") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->schemas, &(*p)->num_schemas, "schemas") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 4) && (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->recordSyntaxes, &(*p)->num_recordSyntaxes, "recordSyntaxes") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 5) && (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->resourceChallenges, &(*p)->num_resourceChallenges, "resourceChallenges") || odr_ok(o)) && odr_implicit_tag(o, z_AccessRestrictions, &(*p)->restrictedAccess, ODR_CONTEXT, 6, 1, "restrictedAccess") && odr_implicit_tag(o, z_Costs, &(*p)->costInfo, ODR_CONTEXT, 8, 1, "costInfo") && odr_implicit_settag(o, ODR_CONTEXT, 9) && (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->variantSets, &(*p)->num_variantSets, "variantSets") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 10) && (odr_sequence_of(o, (Odr_fun) z_ElementSetName, &(*p)->elementSetNames, &(*p)->num_elementSetNames, "elementSetNames") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 11) && odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->unitSystems, &(*p)->num_unitSystems, "unitSystems") && odr_sequence_end(o); } int z_QueryTypeDetails(ODR o, Z_QueryTypeDetails **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_QueryTypeDetails_private, (Odr_fun) z_PrivateCapabilities, "zprivate"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_QueryTypeDetails_rpn, (Odr_fun) z_RpnCapabilities, "rpn"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_QueryTypeDetails_iso8777, (Odr_fun) z_Iso8777Capabilities, "iso8777"}, {ODR_IMPLICIT, ODR_CONTEXT, 100, Z_QueryTypeDetails_z39_58, (Odr_fun) z_HumanString, "z39_58"}, {ODR_IMPLICIT, ODR_CONTEXT, 101, Z_QueryTypeDetails_erpn, (Odr_fun) z_RpnCapabilities, "erpn"}, {ODR_IMPLICIT, ODR_CONTEXT, 102, Z_QueryTypeDetails_rankedList, (Odr_fun) z_HumanString, "rankedList"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PrivateCapOperator(ODR o, Z_PrivateCapOperator **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->roperator, ODR_CONTEXT, 0, 0, "roperator") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_sequence_end(o); } int z_PrivateCapabilities(ODR o, Z_PrivateCapabilities **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 0) && (odr_sequence_of(o, (Odr_fun) z_PrivateCapOperator, &(*p)->operators, &(*p)->num_operators, "operators") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) z_SearchKey, &(*p)->searchKeys, &(*p)->num_searchKeys, "searchKeys") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_HumanString, &(*p)->description, &(*p)->num_description, "description") || odr_ok(o)) && odr_sequence_end(o); } int z_RpnCapabilities(ODR o, Z_RpnCapabilities **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 0) && (odr_sequence_of(o, (Odr_fun) odr_integer, &(*p)->operators, &(*p)->num_operators, "operators") || odr_ok(o)) && odr_implicit_tag(o, odr_bool, &(*p)->resultSetAsOperandSupported, ODR_CONTEXT, 1, 0, "resultSetAsOperandSupported") && odr_implicit_tag(o, odr_bool, &(*p)->restrictionOperandSupported, ODR_CONTEXT, 2, 0, "restrictionOperandSupported") && odr_implicit_tag(o, z_ProximitySupport, &(*p)->proximity, ODR_CONTEXT, 3, 1, "proximity") && odr_sequence_end(o); } int z_Iso8777Capabilities(ODR o, Z_Iso8777Capabilities **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 0) && odr_sequence_of(o, (Odr_fun) z_SearchKey, &(*p)->searchKeys, &(*p)->num_searchKeys, "searchKeys") && odr_implicit_tag(o, z_HumanString, &(*p)->restrictions, ODR_CONTEXT, 1, 1, "restrictions") && odr_sequence_end(o); } int z_ProxSupportPrivate(ODR o, Z_ProxSupportPrivate **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->unit, ODR_CONTEXT, 0, 0, "unit") && odr_explicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_sequence_end(o); } int z_ProxSupportUnit(ODR o, Z_ProxSupportUnit **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ProxSupportUnit_known, (Odr_fun) odr_integer, "known"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ProxSupportUnit_private, (Odr_fun) z_ProxSupportPrivate, "zprivate"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ProximitySupport(ODR o, Z_ProximitySupport **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_bool, &(*p)->anySupport, ODR_CONTEXT, 0, 0, "anySupport") && odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) z_ProxSupportUnit, &(*p)->unitsSupported, &(*p)->num_unitsSupported, "unitsSupported") || odr_ok(o)) && odr_sequence_end(o); } int z_SearchKey(ODR o, Z_SearchKey **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->searchKey, ODR_CONTEXT, 0, 0, "searchKey") && odr_implicit_tag(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1, "description") && odr_sequence_end(o); } int z_AccessRestrictionsUnit(ODR o, Z_AccessRestrictionsUnit **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, odr_integer, &(*p)->accessType, ODR_CONTEXT, 0, 0, "accessType") && odr_implicit_tag(o, z_HumanString, &(*p)->accessText, ODR_CONTEXT, 1, 1, "accessText") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->accessChallenges, &(*p)->num_accessChallenges, "accessChallenges") || odr_ok(o)) && odr_sequence_end(o); } int z_AccessRestrictions(ODR o, Z_AccessRestrictions **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_AccessRestrictionsUnit, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_CostsOtherCharge(ODR o, Z_CostsOtherCharge **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_HumanString, &(*p)->forWhat, ODR_CONTEXT, 1, 0, "forWhat") && odr_implicit_tag(o, z_Charge, &(*p)->charge, ODR_CONTEXT, 2, 0, "charge") && odr_sequence_end(o); } int z_Costs(ODR o, Z_Costs **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_Charge, &(*p)->connectCharge, ODR_CONTEXT, 0, 1, "connectCharge") && odr_implicit_tag(o, z_Charge, &(*p)->connectTime, ODR_CONTEXT, 1, 1, "connectTime") && odr_implicit_tag(o, z_Charge, &(*p)->displayCharge, ODR_CONTEXT, 2, 1, "displayCharge") && odr_implicit_tag(o, z_Charge, &(*p)->searchCharge, ODR_CONTEXT, 3, 1, "searchCharge") && odr_implicit_tag(o, z_Charge, &(*p)->subscriptCharge, ODR_CONTEXT, 4, 1, "subscriptCharge") && odr_implicit_settag(o, ODR_CONTEXT, 5) && (odr_sequence_of(o, (Odr_fun) z_CostsOtherCharge, &(*p)->otherCharges, &(*p)->num_otherCharges, "otherCharges") || odr_ok(o)) && odr_sequence_end(o); } int z_Charge(ODR o, Z_Charge **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_IntUnit, &(*p)->cost, ODR_CONTEXT, 1, 0, "cost") && odr_implicit_tag(o, z_Unit, &(*p)->perWhat, ODR_CONTEXT, 2, 1, "perWhat") && odr_implicit_tag(o, z_HumanString, &(*p)->text, ODR_CONTEXT, 3, 1, "text") && odr_sequence_end(o); } int z_DatabaseList(ODR o, Z_DatabaseList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_DatabaseName, &(*p)->databases, &(*p)->num_databases, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_AttributeCombinations(ODR o, Z_AttributeCombinations **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_AttributeSetId, &(*p)->defaultAttributeSet, ODR_CONTEXT, 0, 0, "defaultAttributeSet") && odr_implicit_settag(o, ODR_CONTEXT, 1) && odr_sequence_of(o, (Odr_fun) z_AttributeCombination, &(*p)->legalCombinations, &(*p)->num_legalCombinations, "legalCombinations") && odr_sequence_end(o); } int z_AttributeCombination(ODR o, Z_AttributeCombination **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_AttributeOccurrence, &(*p)->occurrences, &(*p)->num_occurrences, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_AttributeValueList(ODR o, Z_AttributeValueList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_StringOrNumeric, &(*p)->attributes, &(*p)->num_attributes, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_AttributeOccurrence(ODR o, Z_AttributeOccurrence **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AttributeOcc_any_or_none, (Odr_fun) odr_null, "any_or_none"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AttributeOcc_specific, (Odr_fun) z_AttributeValueList, "specific"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_AttributeSetId, &(*p)->attributeSet, ODR_CONTEXT, 0, 1, "attributeSet") && odr_implicit_tag(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 1, 0, "attributeType") && odr_implicit_tag(o, odr_null, &(*p)->mustBeSupplied, ODR_CONTEXT, 2, 1, "mustBeSupplied") && odr_choice(o, arm, &(*p)->attributeValues, &(*p)->which, 0) && odr_sequence_end(o); } yaz-5.28.0/src/wrbuf.c0000644000175000017500000001765613265142510011430 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file wrbuf.c * \brief Implements WRBUF (growing buffer) */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include WRBUF wrbuf_alloc(void) { WRBUF n; if (!(n = (WRBUF)xmalloc(sizeof(*n)))) abort(); n->buf = 0; n->size = 0; n->pos = 0; wrbuf_grow(n, 1); return n; } void wrbuf_destroy(WRBUF b) { if (b) { xfree(b->buf); xfree(b); } } void wrbuf_rewind(WRBUF b) { b->pos = 0; } int wrbuf_grow(WRBUF b, size_t minsize) { size_t togrow; if (!b->size) togrow = 1024; else togrow = b->size; if (togrow < minsize) togrow = minsize; b->buf = (char *) xrealloc(b->buf, 1 + (b->size += togrow)); if (!b->buf) abort(); return 0; } void wrbuf_write(WRBUF b, const char *buf, size_t size) { if (size <= 0) return; if (b->pos + size >= b->size) wrbuf_grow(b, size); memcpy(b->buf + b->pos, buf, size); b->pos += size; } void wrbuf_insert(WRBUF b, size_t pos, const char *buf, size_t size) { if (size <= 0 || pos > b->pos) return; if (b->pos + size >= b->size) wrbuf_grow(b, size); memmove(b->buf + pos + size, b->buf + pos, b->pos - pos); memcpy(b->buf + pos, buf, size); b->pos += size; } void wrbuf_puts(WRBUF b, const char *buf) { wrbuf_write(b, buf, strlen(buf)); } void wrbuf_vp_puts(const char *buf, void *client_data) { WRBUF b = (WRBUF) client_data; wrbuf_puts(b, buf); } void wrbuf_puts_replace_char(WRBUF b, const char *buf, const char from, const char to) { while(*buf) { if (*buf == from) wrbuf_putc(b, to); else wrbuf_putc(b, *buf); buf++; } } void wrbuf_puts_replace_str(WRBUF b, const char *buf, const char *from, const char *to) { const char *cp0 = buf; for (;;) { const char *cp1 = strstr(cp0, from); if (!cp1) break; if (cp1 != cp0) wrbuf_write(b, cp0, cp1 - cp0); wrbuf_puts(b, to); cp0 = cp1 + strlen(from); } wrbuf_puts(b, cp0); } void wrbuf_chop_right(WRBUF b) { while (b->pos && b->buf[b->pos-1] == ' ') { (b->pos)--; } } void wrbuf_xmlputs(WRBUF b, const char *cp) { wrbuf_xmlputs_n(b, cp, strlen(cp)); } void wrbuf_xmlputs_n(WRBUF b, const char *cp, size_t size) { for (; size; size--) { /* only TAB,CR,LF of ASCII CTRL are allowed in XML 1.0! */ if (*cp >= 0 && *cp <= 31) if (*cp != 9 && *cp != 10 && *cp != 13) { cp++; /* we silently ignore (delete) these.. */ continue; } switch(*cp) { case '<': wrbuf_puts(b, "<"); break; case '>': wrbuf_puts(b, ">"); break; case '&': wrbuf_puts(b, "&"); break; case '"': wrbuf_puts(b, """); break; case '\'': wrbuf_puts(b, "'"); break; default: wrbuf_putc(b, *cp); } cp++; } } void wrbuf_printf(WRBUF b, const char *fmt, ...) { va_list ap; char buf[4096]; va_start(ap, fmt); yaz_vsnprintf(buf, sizeof(buf)-1, fmt, ap); wrbuf_puts (b, buf); va_end(ap); } int wrbuf_iconv_write2(WRBUF b, yaz_iconv_t cd, const char *buf, size_t size, void (*wfunc)(WRBUF, const char *, size_t)) { int ret = 0; if (cd) { char outbuf[128]; size_t inbytesleft = size; const char *inp = buf; while (inbytesleft) { size_t outbytesleft = sizeof(outbuf); char *outp = outbuf; size_t r = yaz_iconv(cd, (char**) &inp, &inbytesleft, &outp, &outbytesleft); if (r == (size_t) (-1)) { int e = yaz_iconv_error(cd); if (e != YAZ_ICONV_E2BIG) { ret = -1; break; } } (*wfunc)(b, outbuf, outp - outbuf); } } else (*wfunc)(b, buf, size); return ret; } int wrbuf_iconv_write_x(WRBUF b, yaz_iconv_t cd, const char *buf, size_t size, int cdata) { return wrbuf_iconv_write2(b, cd, buf, size, cdata ? wrbuf_xmlputs_n : wrbuf_write); } void wrbuf_iconv_write(WRBUF b, yaz_iconv_t cd, const char *buf, size_t size) { wrbuf_iconv_write2(b, cd, buf, size, wrbuf_write); } void wrbuf_iconv_puts(WRBUF b, yaz_iconv_t cd, const char *strz) { wrbuf_iconv_write(b, cd, strz, strlen(strz)); } void wrbuf_iconv_putchar(WRBUF b, yaz_iconv_t cd, int ch) { char buf[1]; buf[0] = ch; wrbuf_iconv_write(b, cd, buf, 1); } void wrbuf_iconv_write_cdata(WRBUF b, yaz_iconv_t cd, const char *buf, size_t size) { wrbuf_iconv_write2(b, cd, buf, size, wrbuf_xmlputs_n); } void wrbuf_iconv_puts_cdata(WRBUF b, yaz_iconv_t cd, const char *strz) { wrbuf_iconv_write2(b, cd, strz, strlen(strz), wrbuf_xmlputs_n); } void wrbuf_iconv_json_write(WRBUF b, yaz_iconv_t cd, const char *buf, size_t size) { wrbuf_iconv_write2(b, cd, buf, size, wrbuf_json_write); } void wrbuf_iconv_json_puts(WRBUF b, yaz_iconv_t cd, const char *strz) { wrbuf_iconv_write2(b, cd, strz, strlen(strz), wrbuf_json_write); } void wrbuf_iconv_reset(WRBUF b, yaz_iconv_t cd) { if (cd) { char outbuf[16]; size_t outbytesleft = sizeof(outbuf); char *outp = outbuf; size_t r = yaz_iconv(cd, 0, 0, &outp, &outbytesleft); if (r != (size_t) (-1)) wrbuf_write(b, outbuf, outp - outbuf); } } const char *wrbuf_cstr(WRBUF b) { assert(b && b->pos <= b->size); b->buf[b->pos] = '\0'; return b->buf; } const char *wrbuf_cstr_null(WRBUF b) { if (!b || b->pos == 0) return 0; assert(b->pos <= b->size); b->buf[b->pos] = '\0'; return b->buf; } void wrbuf_cut_right(WRBUF b, size_t no_to_remove) { if (no_to_remove > b->pos) no_to_remove = b->pos; b->pos = b->pos - no_to_remove; } void wrbuf_puts_escaped(WRBUF b, const char *str) { wrbuf_write_escaped(b, str, strlen(str)); } void wrbuf_write_escaped(WRBUF b, const char *str, size_t len) { size_t i; for (i = 0; i < len; i++) if (str[i] < ' ' || str[i] > 126) wrbuf_printf(b, "\\x%02X", str[i] & 0xff); else wrbuf_putc(b, str[i]); } void wrbuf_json_write(WRBUF b, const char *cp, size_t sz) { size_t i; for (i = 0; i < sz; i++) { if (cp[i] > 0 && cp[i] < 32) { wrbuf_putc(b, '\\'); switch (cp[i]) { case '\b': wrbuf_putc(b, 'b'); break; case '\f': wrbuf_putc(b, 'f'); break; case '\n': wrbuf_putc(b, 'n'); break; case '\r': wrbuf_putc(b, 'r'); break; case '\t': wrbuf_putc(b, 't'); break; default: wrbuf_printf(b, "u%04x", cp[i]); } } else if (cp[i] == '"') { wrbuf_putc(b, '\\'); wrbuf_putc(b, '"'); } else if (cp[i] == '\\') { wrbuf_putc(b, '\\'); wrbuf_putc(b, '\\'); } else { /* leave encoding as raw UTF-8 */ wrbuf_putc(b, cp[i]); } } } void wrbuf_json_puts(WRBUF b, const char *str) { wrbuf_json_write(b, str, strlen(str)); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/univres.asn0000644000175000017500000000073313250277530012326 00000000000000ResourceReport-Format-Universe-1 {Z39-50-resourceReport universe-1 (1000)} DEFINITIONS ::= BEGIN IMPORTS StringOrNumeric FROM Z39-50-APDU-1995; -- UniverseReportHits ::= SEQUENCE { database StringOrNumeric, hits StringOrNumeric } UniverseReportDuplicate ::= SEQUENCE { hitno StringOrNumeric } UniverseReport ::= SEQUENCE { totalHits INTEGER, report CHOICE { databaseHits [0] IMPLICIT UniverseReportHits, duplicate [1] IMPLICIT UniverseReportDuplicate } } END yaz-5.28.0/src/codetables.xml0000644000175000017500001036575113265142510012771 00000000000000 The first column in this table contains the MARC-8 code (in hex) for the character as coming from the G0 graphic set, the second column contains the MARC-8 code (in hex) for the character as coming from the G1 graphic set, the third column contains the UCS/Unicode 16-bit code (in hex), the fourth column contains the UTF-8 code (in hex) for the UCS characters, the fifth column contains a representation of the character (where possible), the sixth column contains the MARC character name, followed by the UCS name. If the MARC name is the same as or very similar to the UCS name, only the UCS name is given. For some tables alternate encodings in Unicode and UTF-8 are given. When that occurs the alternate Unicode and alternate UTF-8 columns follow the character name. 1B 001B 1B ESCAPE (Unlikely to occur in UCS/Unicode) 1D 001D 1D RECORD TERMINATOR / GROUP SEPARATOR 1E 001E 1E FIELD TERMINATOR / RECORD SEPARATOR 1F 001F 1F SUBFIELD DELIMITER / UNIT SEPARATOR 20 0020 20 SPACE, BLANK / SPACE 21 0021 21 EXCLAMATION MARK 22 0022 22 QUOTATION MARK 23 0023 23 NUMBER SIGN 24 0024 24 DOLLAR SIGN 25 0025 25 PERCENT SIGN 26 0026 26 AMPERSAND 27 0027 27 APOSTROPHE 28 0028 28 OPENING PARENTHESIS / LEFT PARENTHESIS 29 0029 29 CLOSING PARENTHESIS / CLOSING PARENTHESIS 2A 002A 2A ASTERISK 2B 002B 2B PLUS SIGN 2C 002C 2C COMMA 2D 002D 2D HYPHEN-MINUS 2E 002E 2E PERIOD, DECIMAL POINT / FULL STOP 2F 002F 2F SLASH / SOLIDUS 30 0030 30 DIGIT ZERO 31 0031 31 DIGIT ONE 32 0032 32 DIGIT TWO 33 0033 33 DIGIT THREE 34 0034 34 DIGIT FOUR 35 0035 35 DIGIT FIVE 36 0036 36 DIGIT SIX 37 0037 37 DIGIT SEVEN 38 0038 38 DIGIT EIGHT 39 0039 39 DIGIT NINE 3A 003A 3A COLON 3B 003B 3B SEMICOLON 3C 003C 3C LESS-THAN SIGN 3D 003D 3D EQUALS SIGN 3E 003E 3E GREATER-THAN SIGN 3F 003F 3F QUESTION MARK 40 0040 40 COMMERCIAL AT 41 0041 41 LATIN CAPITAL LETTER A 42 0042 42 LATIN CAPITAL LETTER B 43 0043 43 LATIN CAPITAL LETTER C 44 0044 44 LATIN CAPITAL LETTER D 45 0045 45 LATIN CAPITAL LETTER E 46 0046 46 LATIN CAPITAL LETTER F 47 0047 47 LATIN CAPITAL LETTER G 48 0048 48 LATIN CAPITAL LETTER H 49 0049 49 LATIN CAPITAL LETTER I 4A 004A 4A LATIN CAPITAL LETTER J 4B 004B 4B LATIN CAPITAL LETTER K 4C 004C 4C LATIN CAPITAL LETTER L 4D 004D 4D LATIN CAPITAL LETTER M 4E 004E 4E LATIN CAPITAL LETTER N 4F 004F 4F LATIN CAPITAL LETTER O 50 0050 50 LATIN CAPITAL LETTER P 51 0051 51 LATIN CAPITAL LETTER Q 52 0052 52 LATIN CAPITAL LETTER R 53 0053 53 LATIN CAPITAL LETTER S 54 0054 54 LATIN CAPITAL LETTER T 55 0055 55 LATIN CAPITAL LETTER U 56 0056 56 LATIN CAPITAL LETTER V 57 0057 57 LATIN CAPITAL LETTER W 58 0058 58 LATIN CAPITAL LETTER X 59 0059 59 LATIN CAPITAL LETTER Y 5A 005A 5A LATIN CAPITAL LETTER Z 5B 005B 5B OPENING SQUARE BRACKET / LEFT SQUARE BRACKET 5C 005C 5C REVERSE SLASH / REVERSE SOLIDUS 5D 005D 5D CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET 5E 005E 5E SPACING CIRCUMFLEX / CIRCUMFLEX ACCENT 5F 005F 5F SPACING UNDERSCORE / LOW LINE 60 0060 60 SPACING GRAVE / GRAVE ACCENT 61 0061 61 LATIN SMALL LETTER A 62 0062 62 LATIN SMALL LETTER B 63 0063 63 LATIN SMALL LETTER C 64 0064 64 LATIN SMALL LETTER D 65 0065 65 LATIN SMALL LETTER E 66 0066 66 LATIN SMALL LETTER F 67 0067 67 LATIN SMALL LETTER G 68 0068 68 LATIN SMALL LETTER H 69 0069 69 LATIN SMALL LETTER I 6A 006A 6A LATIN SMALL LETTER J 6B 006B 6B LATIN SMALL LETTER K 6C 006C 6C LATIN SMALL LETTER L 6D 006D 6D LATIN SMALL LETTER M 6E 006E 6E LATIN SMALL LETTER N 6F 006F 6F LATIN SMALL LETTER O 70 0070 70 LATIN SMALL LETTER P 71 0071 71 LATIN SMALL LETTER Q 72 0072 72 LATIN SMALL LETTER R 73 0073 73 LATIN SMALL LETTER S 74 0074 74 LATIN SMALL LETTER T 75 0075 75 LATIN SMALL LETTER U 76 0076 76 LATIN SMALL LETTER V 77 0077 77 LATIN SMALL LETTER W 78 0078 78 LATIN SMALL LETTER X 79 0079 79 LATIN SMALL LETTER Y 7A 007A 7A LATIN SMALL LETTER Z 7B 007B 7B OPENING CURLY BRACKET / LEFT CURLY BRACKET 7C 007C 7C VERTICAL BAR (FILL) / VERTICAL LINE 7D 007D 7D CLOSING CURLY BRACKET / RIGHT CURLY BRACKET 7E 007E 7E SPACING TILDE / TILDE Revised June 2004 to add the Eszett (M+C7) and the Euro Sign (M+C8) to the MARC-8 set. Revised September 2004 to change the mapping from MARC-8 to Unicode for the Ligature (M+EB and M+EC) from U+FE20 and U+FE21 to U+0361. Revised September 2004 to change the mapping from MARC-8 to Unicode for the Double Tilde (M+FA and M+FB) from U+FE22 and U+FE23 to U+0360. Revised March 2005 to change the mapping from MARC-8 to Unicode for the Alif (M+2E) from U+02BE to U+02BC. 88 0098 C298 NON-SORT BEGIN / START OF STRING 89 009C C29C NON-SORT END / STRING TERMINATOR 8D 200D E2808D JOINER / ZERO WIDTH JOINER 8E 200C E2808C NON-JOINER / ZERO WIDTH NON-JOINER A1 0141 C581 UPPERCASE POLISH L / LATIN CAPITAL LETTER L WITH STROKE A2 00D8 C398 UPPERCASE SCANDINAVIAN O / LATIN CAPITAL LETTER O WITH STROKE A3 0110 C490 UPPERCASE D WITH CROSSBAR / LATIN CAPITAL LETTER D WITH STROKE A4 00DE C39E UPPERCASE ICELANDIC THORN / LATIN CAPITAL LETTER THORN (Icelandic) A5 00C6 C386 UPPERCASE DIGRAPH AE / LATIN CAPITAL LIGATURE AE A6 0152 C592 UPPERCASE DIGRAPH OE / LATIN CAPITAL LIGATURE OE A7 02B9 CAB9 SOFT SIGN, PRIME / MODIFIER LETTER PRIME A8 00B7 C2B7 MIDDLE DOT A9 266D E299AD MUSIC FLAT SIGN AA 00AE C2AE PATENT MARK / REGISTERED SIGN AB 00B1 C2B1 PLUS OR MINUS / PLUS-MINUS SIGN AC 01A0 C6A0 UPPERCASE O-HOOK / LATIN CAPITAL LETTER O WITH HORN AD 01AF C6AF UPPERCASE U-HOOK / LATIN CAPITAL LETTER U WITH HORN AE 02BC CABC CABE ALIF / MODIFIER LETTER APOSTROPHE B0 02BB CABB AYN / MODIFIER LETTER TURNED COMMA B1 0142 C582 LOWERCASE POLISH L / LATIN SMALL LETTER L WITH STROKE B2 00F8 C3B8 LOWERCASE SCANDINAVIAN O / LATIN SMALL LETTER O WITH STROKE B3 0111 C491 LOWERCASE D WITH CROSSBAR / LATIN SMALL LETTER D WITH STROKE B4 00FE C3BE LOWERCASE ICELANDIC THORN / LATIN SMALL LETTER THORN (Icelandic) B5 00E6 C3A6 LOWERCASE DIGRAPH AE / LATIN SMALL LIGATURE AE B6 0153 C593 LOWERCASE DIGRAPH OE / LATIN SMALL LIGATURE OE B7 02BA CABA HARD SIGN, DOUBLE PRIME / MODIFIER LETTER DOUBLE PRIME B8 0131 C4B1 LOWERCASE TURKISH I / LATIN SMALL LETTER DOTLESS I B9 00A3 C2A3 BRITISH POUND / POUND SIGN BA 00F0 C3B0 LOWERCASE ETH / LATIN SMALL LETTER ETH (Icelandic) BC 01A1 C6A1 LOWERCASE O-HOOK / LATIN SMALL LETTER O WITH HORN BD 01B0 C6B0 LOWERCASE U-HOOK / LATIN SMALL LETTER U WITH HORN C0 00B0 C2B0 DEGREE SIGN C1 2113 E28493 SCRIPT SMALL L C2 2117 E28497 SOUND RECORDING COPYRIGHT C3 00A9 C2A9 COPYRIGHT SIGN C4 266F E299AF MUSIC SHARP SIGN C5 00BF C2BF INVERTED QUESTION MARK C6 00A1 C2A1 INVERTED EXCLAMATION MARK C7 00DF C39F ESZETT SYMBOL C8 20AC E282AC EURO SIGN true E0 0309 CC89 PSEUDO QUESTION MARK / COMBINING HOOK ABOVE true E1 0300 CC80 GRAVE / COMBINING GRAVE ACCENT (Varia) true E2 0301 CC81 ACUTE / COMBINING ACUTE ACCENT (Oxia) true E3 0302 CC82 CIRCUMFLEX / COMBINING CIRCUMFLEX ACCENT true E4 0303 CC83 TILDE / COMBINING TILDE true E5 0304 CC84 MACRON / COMBINING MACRON true E6 0306 CC86 BREVE / COMBINING BREVE (Vrachy) true E7 0307 CC87 SUPERIOR DOT / COMBINING DOT ABOVE true E8 0308 CC88 UMLAUT, DIAERESIS / COMBINING DIAERESIS (Dialytika) true E9 030C CC8C HACEK / COMBINING CARON true EA 030A CC8A CIRCLE ABOVE, ANGSTROM / COMBINING RING ABOVE true EB 0361 CDA1 FE20 EFB8A0 LIGATURE, FIRST HALF / COMBINING DOUBLE INVERTED BREVE true EC FE21 EFB8A1 LIGATURE, SECOND HALF / COMBINING LIGATURE RIGHT HALF The Ligature that spans two characters is constructed of two halves in MARC-8: EB (Ligature, first half) and EC (Ligature, second half). The preferred Unicode/UTF-8 mapping is to the single character Ligature that spans two characters, U+0361. The single character Ligature is encoded between the two characters to be spanned. The two half Ligatures in Unicode, to which the Ligature has been mapped since 1996, are indicated in the mapping as alternatives, but their use is not recommended. It is expected that font support for the single character Ligature mark will be more easily obtained than for the two halves. true ED 0315 CC95 HIGH COMMA, OFF CENTER / COMBINING COMMA ABOVE RIGHT true EE 030B CC8B DOUBLE ACUTE / COMBINING DOUBLE ACUTE ACCENT true EF 0310 CC90 CANDRABINDU / COMBINING CANDRABINDU true F0 0327 CCA7 CEDILLA / COMBINING CEDILLA true F1 0328 CCA8 RIGHT HOOK, OGONEK / COMBINING OGONEK true F2 0323 CCA3 DOT BELOW / COMBINING DOT BELOW true F3 0324 CCA4 DOUBLE DOT BELOW / COMBINING DIAERESIS BELOW true F4 0325 CCA5 CIRCLE BELOW / COMBINING RING BELOW true F5 0333 CCB3 DOUBLE UNDERSCORE / COMBINING DOUBLE LOW LINE true F6 0332 CCB2 UNDERSCORE / COMBINING LOW LINE true F7 0326 CCA6 LEFT HOOK (COMMA BELOW) / COMBINING COMMA BELOW true F8 031C CC9C RIGHT CEDILLA / COMBINING LEFT HALF RING BELOW true F9 032E CCAE UPADHMANIYA / COMBINING BREVE BELOW true FA 0360 CDA0 FE22 EFB8A2 DOUBLE TILDE, FIRST HALF / COMBINING DOUBLE TILDE true FB FE23 EFB8A3 DOUBLE TILDE, SECOND HALF / COMBINING DOUBLE TILDE RIGHT HALF The Double Tilde that spans two characters is constructed of two halves in MARC-8: FA (Double Tilde, first half) and FB (Double Tilde, second half). The preferred Unicode/UTF-8 mapping is to the single character Double Tilde that spans two characters, U+0360. The single character Double Tilde is encoded between the two characters to be spanned. The two half Double Tildes in Unicode, to which the MARC8 Double Tilde has been mapped since 1996, are indicated in the mapping as alternatives, but their use is not recommended. It is expected that font support for the single character Double Tilde mark will be more easily obtained than for the two halves. true FE 0313 CC93 HIGH COMMA, CENTERED / COMBINING COMMA ABOVE (Psili) The first column in this table contains the MARC-8 code (in hex) for the character, the second column contains the UCS/Unicode 16-bit code (in hex), the third column contains the UTF-8 code (in hex) for the UCS character, the fourth column contains a representation of the character (where possible), the fifth column contains the MARC character name, followed by the UCS name. If the MARC name is the same as or very similar to the UCS name, only the UCS name is given. Note added September 2004: The alpha, beta and gamma symbols that have been part of a special extension of the MARC8 character set since 1970 do not have reversible mappings to Unicode since they duplicate characters in the Greek script set. These special characters map to the Greek set in Unicode, thus when being remapped to MARC-8 they go to the MARC-8 Greek set, not the special extension to the Latin set. It is recommended that the spelling out of the characters be used when the Latin extension Greek characters would formerly have been used, i.e., when they occur in Latin text. The following substitutions would be made: [alpha], [beta], and [gamma]. 61 03B1 CEB1 GREEK SMALL LETTER ALPHA 62 03B2 CEB2 GREEK SMALL LETTER BETA 63 03B3 CEB3 GREEK SMALL LETTER GAMMA The first column in this table contains the MARC-8 code (in hex) for the character, the second column contains the UCS/Unicode 16-bit code (in hex), the third column contains the UTF-8 code (in hex) for the UCS character, the fourth column contains a representation of the character (where possible), the fifth column contains the MARC character name, followed by the UCS name. If the MARC name is the same as or very similar to the UCS name, only the UCS name is given. 28 208D E2828D SUBSCRIPT OPENING PARENTHESIS / SUBSCRIPT LEFT PARENTHESIS 29 208E E2828E SUBSCRIPT CLOSING PARENTHESIS / SUBSCRIPT RIGHT PARENTHESIS 2B 208A E2828A SUBSCRIPT PLUS SIGN 2D 208B E2828B SUBSCRIPT HYPHEN-MINUS / SUBSCRIPT MINUS 30 2080 E28280 SUBSCRIPT DIGIT ZERO 31 2081 E28281 SUBSCRIPT DIGIT ONE 32 2082 E28282 SUBSCRIPT DIGIT TWO 33 2083 E28283 SUBSCRIPT DIGIT THREE 34 2084 E28284 SUBSCRIPT DIGIT FOUR 35 2085 E28285 SUBSCRIPT DIGIT FIVE 36 2086 E28286 SUBSCRIPT DIGIT SIX 37 2087 E28287 SUBSCRIPT DIGIT SEVEN 38 2088 E28288 SUBSCRIPT DIGIT EIGHT 39 2089 E28289 SUBSCRIPT DIGIT NINE The first column in this table contains the MARC-8 code (in hex) for the character, the second column contains the UCS/Unicode 16-bit code (in hex), the third column contains the UTF-8 code (in hex) for the UCS character, the fourth column contains a representation of the character (where possible), the fifth column conatins the MARC character name, followed by the UCS name. If the MARC name is the same as or very similar to the UCS name, only the UCS name is given. 28 207D E281BD SUPERSCRIPT OPENING PARENTHESIS / SUPERSCRIPT LEFT PARENTHESIS 29 207E E281BE SUPERSCRIPT CLOSING PARENTHESIS / SUPERSCRIPT RIGHT PARENTHESIS 2B 207A E281BA SUPERSCRIPT PLUS SIGN 2D 207B E281BB SUPERSCRIPT HYPHEN-MINUS / SUPERSCRIPT MINUS 30 2070 E281B0 SUPERSCRIPT DIGIT ZERO 31 00B9 C2B9 SUPERSCRIPT DIGIT ONE 32 00B2 C2B2 SUPERSCRIPT DIGIT TWO 33 00B3 C2B3 SUPERSCRIPT DIGIT THREE 34 2074 E281B4 SUPERSCRIPT DIGIT FOUR 35 2075 E281B5 SUPERSCRIPT DIGIT FIVE 36 2076 E281B6 SUPERSCRIPT DIGIT SIX 37 2077 E281B7 SUPERSCRIPT DIGIT SEVEN 38 2078 E281B8 SUPERSCRIPT DIGIT EIGHT 39 2079 E281B9 SUPERSCRIPT DIGIT NINE The first column in this table contains the MARC-8 code (in hex) for the character as coming from the G0 graphic set, the second column contains the MARC-8 code (in hex) for the character as coming from the G1 graphic set, the third column contains the UCS/Unicode 16-bit code (in hex), the fourth column contains the UTF-8 code (in hex) for the UCS characters, the fifth column contains a representation of the character (where possible), the sixth column contains the MARC character name, followed by the UCS name. If the MARC name is the same as or very similar to the UCS name, only the UCS name is given. 21 0021 21 EXCLAMATION MARK 22 05F4 D7B4 QUOTATION MARK, GERSHAYIM / HEBREW PUNCTUATION GERSHAYIM 23 0023 23 NUMBER SIGN 24 0024 24 DOLLAR SIGN 25 0025 25 PERCENT SIGN 26 0026 26 AMPERSAND 27 05F3 D7B3 APOSTROPHE, GERESH / HEBREW PUNCTUATION GERESH 28 0028 28 OPENING PARENTHESIS / LEFT PARENTHESIS 29 0029 29 CLOSING PARENTHESIS / RIGHT PARENTHESIS 2A 002A 2A ASTERISK 2B 002B 2B PLUS SIGN 2C 002C 2C COMMA 2D 05BE D6BE HYPHEN-MINUS, MAKEF / HEBREW PUNCTUATION MAQAF 2E 002E 2E PERIOD, DECIMAL POINT / FULL STOP 2F 002F 2F SLASH / SOLIDUS 30 0030 30 DIGIT ZERO 31 0031 31 DIGIT ONE 32 0032 32 DIGIT TWO 33 0033 33 DIGIT THREE 34 0034 34 DIGIT FOUR 35 0035 35 DIGIT FIVE 36 0036 36 DIGIT SIX 37 0037 37 DIGIT SEVEN 38 0038 38 DIGIT EIGHT 39 0039 39 DIGIT NINE 3A 003A 3A COLON 3B 003B 3B SEMICOLON 3C 003C 3C LESS-THAN SIGN 3D 003D 3D EQUALS SIGN 3E 003E 3E GREATER-THAN SIGN 3F 003F 3F QUESTION MARK true 40 05B7 D6B7 HEBREW POINT PATAH true 41 05B8 D6B8 KAMATS / HEBREW POINT QAMATS true 42 05B6 D6B6 HEBREW POINT SEGOL true 43 05B5 D6B5 TSEREH / HEBREW POINT TSERE true 44 05B4 D6B4 HIRIK / HEBREW POINT HIRIQ true 45 05B9 D6B9 HOLAM, LEFT SIN DOT / HEBREW POINT HOLAM true 46 05BB D6BB KUBUTS / HEBREW POINT QUBUTS true 47 05B0 D6B0 HEBREW POINT SHEVA true 48 05B2 D6B2 HEBREW POINT HATAF PATAH true 49 05B3 D6B3 HATAF KAMATS / HEBREW POINT HATAF QAMATS true 4A 05B1 D6B1 HEBREW POINT HATAF SEGOL true 4B 05BC D6BC HEBREW POINT DAGESH OR MAPIQ true 4C 05BF D6BF RAFEH / HEBREW POINT RAFE true 4D 05C1 D781 RIGHT SHIN DOT / HEBREW POINT SHIN DOT true 4E FB1E EFAC9E VARIKA / HEBREW POINT JUDEO-SPANISH VARIKA 5B 005B 5B OPENING SQUARE BRACKET / LEFT SQUARE BRACKET 5D 005D 5D CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET 60 05D0 D790 HEBREW LETTER ALEF 61 05D1 D791 HEBREW LETTER BET 62 05D2 D792 HEBREW LETTER GIMEL 63 05D3 D793 HEBREW LETTER DALET 64 05D4 D794 HEBREW LETTER HE 65 05D5 D795 HEBREW LETTER VAV 66 05D6 D796 HEBREW LETTER ZAYIN 67 05D7 D797 HEBREW LETTER HET 68 05D8 D798 HEBREW LETTER TET 69 05D9 D799 HEBREW LETTER YOD 6A 05DA D79A HEBREW LETTER FINAL KAF 6B 05DB D79B HEBREW LETTER KAF 6C 05DC D79C HEBREW LETTER LAMED 6D 05DD D79D HEBREW LETTER FINAL MEM 6E 05DE D79E HEBREW LETTER MEM 6F 05DF D79F HEBREW LETTER FINAL NUN 70 05E0 D7A0 HEBREW LETTER NUN 71 05E1 D7A1 HEBREW LETTER SAMEKH 72 05E2 D7A2 HEBREW LETTER AYIN 73 05E3 D7A3 HEBREW LETTER FINAL PE 74 05E4 D7A4 HEBREW LETTER PE 75 05E5 D7A5 HEBREW LETTER FINAL TSADI 76 05E6 D7A6 HEBREW LETTER TSADI 77 05E7 D7A7 HEBREW LETTER QOF / KOF 78 05E8 D7A8 HEBREW LETTER RESH 79 05E9 D7A9 HEBREW LETTER SHIN 7A 05EA D7AA HEBREW LETTER TAV 7B 05F0 D7B0 HEBREW LIGATURE YIDDISH DOUBLE VAV / TSVEY VOVN 7C 05F1 D7B1 HEBREW LIGATURE YIDDISH VAV YOD / VOV YUD 7D 05F2 D7B2 HEBREW LIGATURE YIDDISH DOUBLE YOD / TSVEY YUDN The first column in this table contains the MARC-8 code (in hex) for the character as coming from the G0 graphic set, the second column contains the MARC-8 code (in hex) for the character as coming from the G1 graphic set, the third column contains the UCS/Unicode 16-bit code (in hex), the fourth column contains the UTF-8 code (in hex) for the UCS characters, the fifth column contains a representation of the character (where possible), the sixth column contains the MARC character name, followed by the UCS name. If the MARC name is the same as or very similar to the UCS name, only the UCS name is given. 21 0021 21 EXCLAMATION MARK 22 0022 22 QUOTATION MARK 23 0023 23 NUMBER SIGN 24 0024 24 DOLLAR SIGN 25 0025 25 PERCENT SIGN 26 0026 26 AMPERSAND 27 0027 27 APOSTROPHE 28 0028 28 OPENING PARENTHESIS / LEFT PARENTHESIS 29 0029 29 CLOSING PARENTHESIS / RIGHT PARENTHESIS 2A 002A 2A ASTERISK 2B 002B 2B PLUS SIGN 2C 002C 2C COMMA 2D 002D 2D HYPHEN-MINUS 2E 002E 2E PERIOD, DECIMAL POINT / FULL STOP 2F 002F 2F SLASH / SOLIDUS 30 0030 30 DIGIT ZERO 31 0031 31 DIGIT ONE 32 0032 32 DIGIT TWO 33 0033 33 DIGIT THREE 34 0034 34 DIGIT FOUR 35 0035 35 DIGIT FIVE 36 0036 36 DIGIT SIX 37 0037 37 DIGIT SEVEN 38 0038 38 DIGIT EIGHT 39 0039 39 DIGIT NINE 3A 003A 3A COLON 3B 003B 3B SEMICOLON 3C 003C 3C LESS-THAN SIGN 3D 003D 3D EQUALS SIGN 3E 003E 3E GREATER-THAN SIGN 3F 003F 3F QUESTION MARK 40 044E D18E LOWERCASE IU / CYRILLIC SMALL LETTER YU 41 0430 D0B0 CYRILLIC SMALL LETTER A 42 0431 D0B1 CYRILLIC SMALL LETTER BE 43 0446 D186 CYRILLIC SMALL LETTER TSE 44 0434 D0B4 CYRILLIC SMALL LETTER DE 45 0435 D0B5 CYRILLIC SMALL LETTER IE 46 0444 D184 CYRILLIC SMALL LETTER EF 47 0433 D0B3 LOWERCASE GE / CYRILLIC SMALL LETTER GHE 48 0445 D185 LOWERCASE KHA / CYRILLIC SMALL LETTER HA 49 0438 D0B8 LOWERCASE II / CYRILLIC SMALL LETTER I 4A 0439 D0B9 LOWERCASE SHORT II / CYRILLIC SMALL LETTER SHORT I 4B 043A D0BA CYRILLIC SMALL LETTER KA 4C 043B D0BB CYRILLIC SMALL LETTER EL 4D 043C D0BC CYRILLIC SMALL LETTER EM 4E 043D D0BD CYRILLIC SMALL LETTER EN 4F 043E D0BE CYRILLIC SMALL LETTER O 50 043F D0BF CYRILLIC SMALL LETTER PE 51 044F D18F LOWERCASE IA / CYRILLIC SMALL LETTER YA 52 0440 D180 CYRILLIC SMALL LETTER ER 53 0441 D181 CYRILLIC SMALL LETTER ES 54 0442 D182 CYRILLIC SMALL LETTER TE 55 0443 D183 CYRILLIC SMALL LETTER U 56 0436 D0B6 CYRILLIC SMALL LETTER ZHE 57 0432 D0B2 CYRILLIC SMALL LETTER VE 58 044C D18C CYRILLIC SMALL LETTER SOFT SIGN 59 044B D18B LOWERCASE YERI / CYRILLIC SMALL LETTER YERI 5A 0437 D0B7 CYRILLIC SMALL LETTER ZE 5B 0448 D188 CYRILLIC SMALL LETTER SHA 5C 044D D18D LOWERCASE REVERSED E / CYRILLIC SMALL LETTER E 5D 0449 D189 CYRILLIC SMALL LETTER SHCHA 5E 0447 D187 CYRILLIC SMALL LETTER CHE 5F 044A D18A CYRILLIC SMALL LETTER HARD SIGN 60 042E D0AE UPPERCASE IU / CYRILLIC CAPITAL LETTER YU 61 0410 D090 CYRILLIC CAPITAL LETTER A 62 0411 D091 CYRILLIC CAPITAL LETTER BE 63 0426 D0A6 CYRILLIC CAPITAL LETTER TSE 64 0414 D094 CYRILLIC CAPITAL LETTER DE 65 0415 D095 CYRILLIC CAPITAL LETTER IE 66 0424 D0A4 CYRILLIC CAPITAL LETTER EF 67 0413 D093 UPPERCASE GE / CYRILLIC CAPITAL LETTER GHE 68 0425 D0A5 UPPERCASE KHA / CYRILLIC CAPITAL LETTER HA 69 0418 D098 UPPERCASE II / CYRILLIC CAPITAL LETTER I 6A 0419 D099 UPPERCASE SHORT II / CYRILLIC CAPITAL LETTER SHORT I 6B 041A D09A CYRILLIC CAPITAL LETTER KA 6C 041B D09B CYRILLIC CAPITAL LETTER EL 6D 041C D09C CYRILLIC CAPITAL LETTER EM 6E 041D D09D CYRILLIC CAPITAL LETTER EN 6F 041E D09E CYRILLIC CAPITAL LETTER O 70 041F D09F CYRILLIC CAPITAL LETTER PE 71 042F D0AF UPPERCASE IA / CYRILLIC CAPITAL LETTER YA 72 0420 D0A0 CYRILLIC CAPITAL LETTER ER 73 0421 D0A1 CYRILLIC CAPITAL LETTER ES 74 0422 D0A2 CYRILLIC CAPITAL LETTER TE 75 0423 D0A3 CYRILLIC CAPITAL LETTER U 76 0416 D096 CYRILLIC CAPITAL LETTER ZHE 77 0412 D092 CYRILLIC CAPITAL LETTER VE 78 042C D0AC CYRILLIC CAPITAL LETTER SOFT SIGN 79 042B D0AB UPPERCASE YERI / CYRILLIC CAPITAL LETTER YERI 7A 0417 D097 CYRILLIC CAPITAL LETTER ZE 7B 0428 D0A8 CYRILLIC CAPITAL LETTER SHA 7C 042D D0AD CYRILLIC CAPITAL LETTER E 7D 0429 D0A9 CYRILLIC CAPITAL LETTER SHCHA 7E 0427 D0A7 CYRILLIC CAPITAL LETTER CHE 40 0491 D291 LOWERCASE GE WITH UPTURN / CYRILLIC SMALL LETTER GHE WITH UPTURN 41 0452 D192 LOWERCASE DJE / CYRILLIC SMALL LETTER DJE (Serbian) 42 0453 D193 CYRILLIC SMALL LETTER GJE 43 0454 D194 LOWERCASE E / CYRILLIC SMALL LETTER UKRAINIAN IE 44 0451 D191 CYRILLIC SMALL LETTER IO 45 0455 D195 CYRILLIC SMALL LETTER DZE 46 0456 D196 LOWERCASE I / CYRILLIC SMALL LETTER BYELORUSSIAN-UKRANIAN I 47 0457 D197 LOWERCASE YI / CYRILLIC SMALL LETTER YI (Ukrainian) 48 0458 D198 CYRILLIC SMALL LETTER JE 49 0459 D199 CYRILLIC SMALL LETTER LJE 4A 045A D19A CYRILLIC SMALL LETTER NJE 4B 045B D19B LOWERCASE TSHE / CYRILLIC SMALL LETTER TSHE (Serbian) 4C 045C D19C CYRILLIC SMALL LETTER KJE 4D 045E D19E LOWERCASE SHORT U / CYRILLIC SMALL LETTER SHORT U (Byelorussian) 4E 045F D19F CYRILLIC SMALL LETTER DZHE 50 0463 D1A3 CYRILLIC SMALL LETTER YAT 51 0473 D1B3 CYRILLIC SMALL LETTER FITA 52 0475 D1B5 CYRILLIC SMALL LETTER IZHITSA 53 046B D1AB CYRILLIC SMALL LETTER BIG YUS 5B 005B 5B OPENING SQUARE BRACKET / LEFT SQUARE BRACKET 5D 005D 5D CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET 5F 005F 5F SPACING UNDERSCORE / LOW LINE 60 0490 D290 UPPERCASE GE WITH UPTURN / CYRILLIC CAPITAL LETTER GHE WITH UPTURN 61 0402 D082 UPPERCASE DJE / CYRILLIC CAPITAL LETTER DJE (Serbian) 62 0403 D083 CYRILLIC CAPITAL LETTER GJE 63 0404 D084 UPPERCASE E / CYRILLIC CAPITAL LETTER UKRAINIAN IE 64 0401 D081 CYRILLIC CAPITAL LETTER IO 65 0405 D085 CYRILLIC CAPITAL LETTER DZE 66 0406 D086 UPPERCASE I / CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRANIAN I 67 0407 D087 UPPERCASE YI / CYRILLIC CAPITAL LETTER YI (Ukrainian) 68 0408 D088 CYRILLIC CAPITAL LETTER JE 69 0409 D089 CYRILLIC CAPITAL LETTER LJE 6A 040A D08A CYRILLIC CAPITAL LETTER NJE 6B 040B D08B UPPERCASE TSHE / CYRILLIC CAPITAL LETTER TSHE (Serbian) 6C 040C D08C CYRILLIC CAPITAL LETTER KJE 6D 040E D08E UPPERCASE SHORT U / CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) 6E 040F D08F CYRILLIC CAPITAL LETTER DZHE 6F 042A D0AA CYRILLIC CAPITAL LETTER HARD SIGN 70 0462 D1A2 CYRILLIC CAPITAL LETTER YAT 71 0472 D1B2 CYRILLIC CAPITAL LETTER FITA 72 0474 D1B4 CYRILLIC CAPITAL LETTER IZHITSA 73 046A D1AA CYRILLIC CAPITAL LETTER BIG YUS The first column in this table contains the MARC-8 code (in hex) for the character as coming from the G0 graphic set, the second column contains the MARC-8 code (in hex) for the character as coming from the G1 graphic set, the third column contains the UCS/Unicode 16-bit code (in hex), the fourth column contains the UTF-8 code (in hex) for the UCS characters, the fifth column contains a representation of the character (where possible), the sixth column contains the MARC character name, followed by the UCS name. If the MARC name is the same as or very similar to the UCS name, only the UCS name is given. 21 0021 21 EXCLAMATION MARK 22 0022 22 QUOTATION MARK 23 0023 23 NUMBER SIGN 24 0024 24 DOLLAR SIGN 25 066A D9AA PERCENT SIGN / ARABIC PERCENT SIGN 26 0026 26 AMPERSAND 27 0027 27 APOSTROPHE 28 0028 28 OPENING PARENTHESIS / LEFT PARENTHESIS 29 0029 29 CLOSING PARENTHESIS / RIGHT PARENTHESIS 2A 066D D9AD ASTERISK / ARABIC FIVE POINTED STAR 2B 002B 2B PLUS SIGN 2C 060C D88C ARABIC COMMA 2D 002D 2D HYPHEN-MINUS 2E 002E 2E PERIOD, DECIMAL POINT / FULL STOP 2F 002F 2F SLASH / SOLIDUS 30 0660 D9A0 ARABIC-INDIC DIGIT ZERO 31 0661 D9A1 ARABIC-INDIC DIGIT ONE 32 0662 D9A2 ARABIC-INDIC DIGIT TWO 33 0663 D9A3 ARABIC-INDIC DIGIT THREE 34 0664 D9A4 ARABIC-INDIC DIGIT FOUR 35 0665 D9A5 ARABIC-INDIC DIGIT FIVE 36 0666 D9A6 ARABIC-INDIC DIGIT SIX 37 0667 D9A7 ARABIC-INDIC DIGIT SEVEN 38 0668 D9A8 ARABIC-INDIC DIGIT EIGHT 39 0669 D9A9 ARABIC-INDIC DIGIT NINE 3A 003A 3A COLON 3B 061B D89B ARABIC SEMICOLON 3C 003C 3C LESS-THAN SIGN 3D 003D 3D EQUALS SIGN 3E 003E 3E GREATER-THAN SIGN 3F 061F D89F ARABIC QUESTION MARK 41 0621 D8A1 HAMZAH / ARABIC LETTER HAMZA 42 0622 D8A2 ARABIC LETTER ALEF WITH MADDA ABOVE 43 0623 D8A3 ARABIC LETTER ALEF WITH HAMZA ABOVE 44 0624 D8A4 ARABIC LETTER WAW WITH HAMZA ABOVE 45 0625 D8A5 ARABIC LETTER ALEF WITH HAMZA BELOW 46 0626 D8A6 ARABIC LETTER YEH WITH HAMZA ABOVE 47 0627 D8A7 ARABIC LETTER ALEF 48 0628 D8A8 ARABIC LETTER BEH 49 0629 D8A9 ARABIC LETTER TEH MARBUTA 4A 062A D8AA ARABIC LETTER TEH 4B 062B D8AB ARABIC LETTER THEH 4C 062C D8AC ARABIC LETTER JEEM 4D 062D D8AD ARABIC LETTER HAH 4E 062E D8AE ARABIC LETTER KHAH 4F 062F D8AF ARABIC LETTER DAL 50 0630 D8B0 ARABIC LETTER THAL 51 0631 D8B1 ARABIC LETTER REH 52 0632 D8B2 ARABIC LETTER ZAIN 53 0633 D8B3 ARABIC LETTER SEEN 54 0634 D8B4 ARABIC LETTER SHEEN 55 0635 D8B5 ARABIC LETTER SAD 56 0636 D8B6 ARABIC LETTER DAD 57 0637 D8B7 ARABIC LETTER TAH 58 0638 D8B8 ARABIC LETTER ZAH 59 0639 D8B9 ARABIC LETTER AIN 5A 063A D8BA ARABIC LETTER GHAIN 5B 005B 5B OPENING SQUARE BRACKET / LEFT SQUARE BRACKET 5D 005D 5D CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET 60 0640 D980 ARABIC TATWEEL 61 0641 D981 ARABIC LETTER FEH 62 0642 D982 ARABIC LETTER QAF 63 0643 D983 ARABIC LETTER KAF 64 0644 D984 ARABIC LETTER LAM 65 0645 D985 ARABIC LETTER MEEM 66 0646 D986 ARABIC LETTER NOON 67 0647 D987 ARABIC LETTER HEH 68 0648 D988 ARABIC LETTER WAW 69 0649 D989 ARABIC LETTER ALEF MAKSURA 6A 064A D98A ARABIC LETTER YEH true 6B 064B D98B ARABIC FATHATAN true 6C 064C D98C ARABIC DAMMATAN true 6D 064D D98D ARABIC KASRATAN true 6E 064E D98E ARABIC FATHA true 6F 064F D98F ARABIC DAMMA true 70 0650 D990 ARABIC KASRA true 71 0651 D991 ARABIC SHADDA true 72 0652 D992 ARABIC SUKUN 73 0671 D9B1 ARABIC LETTER ALEF WASLA 74 0670 D9B0 ARABIC LETTER SUPERSCRIPT ALEF 78 066C D9AC ARABIC THOUSANDS SEPARATOR 79 201D E2809D RIGHT DOUBLE QUOTATION MARK 7A 201C E2809C LEFT DOUBLE QUOTATION MARK 21 06FD DBBD DOUBLE ALEF WITH HAMZA ABOVE / ARABIC SIGN SINDHI AMPERSAND 22 0672 D9B2 ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE 23 0673 D9B3 ARABIC LETTER ALEF WITH WAVY HAMZA BELOW 24 0679 D9B9 ARABIC LETTER TTEH 25 067A D9BA ARABIC LETTER TTEHEH 26 067B D9BB ARABIC LETTER BBEH 27 067C D9BC ARABIC LETTER TEH WITH RING 28 067D D9BD ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS 29 067E D9BE ARABIC LETTER PEH 2A 067F D9BF ARABIC LETTER TEHEH 2B 0680 DA80 ARABIC LETTER BEHEH 2C 0681 DA81 ARABIC LETTER HAH WITH HAMZA ABOVE 2D 0682 DA82 ARABIC LETTER HAH WITH TWO ABOVE DOTS VERTICAL ABOVE 2E 0683 DA83 ARABIC LETTER NYEH 2F 0684 DA84 ARABIC LETTER DYEH 30 0685 DA85 ARABIC LETTER HAH WITH THREE DOTS ABOVE 31 0686 DA86 ARABIC LETTER TCHEH 32 06BF DABF ARABIC LETTER TCHEH WITH DOT ABOVE 33 0687 DA87 ARABIC LETTER TCHEHEH 34 0688 DA88 ARABIC LETTER DDAL 35 0689 DA89 ARABIC LETTER DAL WITH RING 36 068A DA8A ARABIC LETTER DAL WITH DOT BELOW 37 068B DA8B ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH 38 068C DA8C ARABIC LETTER DAHAL 39 068D DA8D ARABIC LETTER DDAHAL 3A 068E DA8E ARABIC LETTER DUL 3B 068F DA8F ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS 3C 0690 DA90 ARABIC LETTER DAL WITH FOUR DOTS ABOVE 3D 0691 DA91 ARABIC LETTER RREH 3E 0692 DA92 ARABIC LETTER REH WITH SMALL V 3F 0693 DA93 ARABIC LETTER REH WITH RING 40 0694 DA94 ARABIC LETTER REH WITH DOT BELOW 41 0695 DA95 ARABIC LETTER REH WITH SMALL V BELOW 42 0696 DA96 ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE 43 0697 DA97 ARABIC LETTER REH WITH TWO DOTS ABOVE 44 0698 DA98 ARABIC LETTER JEH 45 0699 DA99 ARABIC LETTER REH WITH FOUR DOTS ABOVE 46 069A DA9A ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE 47 069B DA9B ARABIC LETTER SEEN WITH THREE DOTS BELOW 48 069C DA9C ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE 49 06FA DBBA ARABIC LETTER SHEEN WITH DOT BELOW 4A 069D DA9D ARABIC LETTER SAD WITH TWO DOTS BELOW 4B 069E DA9E ARABIC LETTER SAD WITH THREE DOTS ABOVE 4C 06FB DBBB ARABIC LETTER DAD WITH DOT BELOW 4D 069F DA9F ARABIC LETTER TAH WITH THREE DOTS ABOVE 4E 06A0 DAA0 ARABIC LETTER AIN WITH THREE DOTS ABOVE 4F 06FC DBBC ARABIC LETTER GHAIN WITH DOT BELOW 50 06A1 DAA1 ARABIC LETTER DOTLESS FEH 51 06A2 DAA2 ARABIC LETTER FEH WITH DOT MOVED BELOW 52 06A3 DAA3 ARABIC LETTER FEH WITH DOT BELOW 53 06A4 DAA4 ARABIC LETTER VEH 54 06A5 DAA5 ARABIC LETTER FEH WITH THREE DOTS BELOW 55 06A6 DAA6 ARABIC LETTER PEHEH 56 06A7 DAA7 ARABIC LETTER QAF WITH DOT ABOVE 57 06A8 DAA8 ARABIC LETTER QAF WITH THREE DOTS ABOVE 58 06A9 DAA9 ARABIC LETTER KEHEH 59 06AA DAAA ARABIC LETTER SWASH KAF 5A 06AB DAAB ARABIC LETTER KAF WITH RING 5B 06AC DAAC ARABIC LETTER KAF WITH DOT ABOVE 5C 06AD DAAD ARABIC LETTER NG 5D 06AE DAAE ARABIC LETTER KAF WITH THREE DOTS BELOW 5E 06AF DAAF ARABIC LETTER GAF 5F 06B0 DAB0 ARABIC LETTER GAF WITH RING 60 06B1 DAB1 ARABIC LETTER NGOEH 61 06B2 DAB2 ARABIC LETTER GAF WITH TWO DOTS BELOW 62 06B3 DAB3 ARABIC LETTER GUEH 63 06B4 DAB4 ARABIC LETTER GAF WITH THREE DOTS ABOVE 64 06B5 DAB5 ARABIC LETTER LAM WITH SMALL V 65 06B6 DAB6 ARABIC LETTER LAM WITH DOT ABOVE 66 06B7 DAB7 ARABIC LETTER LAM WITH THREE DOTS ABOVE 67 06B8 DAB8 ARABIC LETTER LAM WITH THREE DOTS BELOW 68 06BA DABA ARABIC LETTER NOON GHUNNA 69 06BB DABB ARABIC LETTER RNOON 6A 06BC DABC ARABIC LETTER NOON WITH RING 6B 06BD DABD ARABIC LETTER NOON WITH THREE DOTS ABOVE 6C 06B9 DAB9 ARABIC LETTER NOON WITH DOT BELOW 6D 06BE DABE ARABIC LETTER HEH DOACHASHMEE 6E 06C0 DB80 HEH WITH HAMZA ABOVE / ARABIC LETTER HEH WITH YEH ABOVE 6F 06C4 DB84 ARABIC LETTER WAW WITH RING 70 06C5 DB85 KYRGHYZ OE / ARABIC LETTER KIRGHIZ OE 71 06C6 DB86 ARABIC LETTER OE 72 06CA DB8A ARABIC LETTER WAW WITH TWO DOTS ABOVE 73 06CB DB8B ARABIC LETTER VE 74 06CD DB8D ARABIC LETTER YEH WITH TAIL 75 06CE DB8E ARABIC LETTER YEH WITH SMALL V 76 06D0 DB90 ARABIC LETTER E 77 06D2 DB92 ARABIC LETTER YEH BARREE 78 06D3 DB93 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE true 7D 0306 CC86 SHORT E / COMBINING BREVE true 7E 030C CC8C SHORT U / COMBINING CARON The first column in this table contains the MARC-8 code (in hex) for the character as coming from the G0 graphic set, the second column contains the MARC-8 code (in hex) for the character as coming from the G1 graphic set, the third column contains the UCS/Unicode 16-bit code (in hex), the fourth column contains the UTF-8 code (in hex) for the UCS characters, the fifth column contains a representation of the character (where possible), the sixth column contains the MARC character name, followed by the UCS name. If the MARC name is the same as or very similar to the UCS name, only the UCS name is given. true 21 0300 CC80 COMBINING GRAVE ACCENT true 22 0301 CC81 COMBINING ACUTE ACCENT true 23 0308 CC88 COMBINING DIAERESIS true 24 0342 CD82 COMBINING GREEK PERISPOMENI / CIRCUMFLEX true 25 0313 CC93 COMBINING COMMA ABOVE / SMOOTH BREATHING true 26 0314 CC94 COMBINING REVERSED COMMA ABOVE / ROUGH BREATHING true 27 0345 CD85 COMBINING GREEK YPOGEGRAMMENI / IOTA SUBSCRIPT 30 00AB C2AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 31 00BB C2BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 32 201C E2809C LEFT DOUBLE QUOTATION MARK 33 201D E2809D RIGHT DOUBLE QUOTATION MARK 34 0374 CDB4 GREEK NUMERAL SIGN / UPPER PRIME 35 0375 CDB5 GREEK LOWER NUMERAL SIGN / LOWER PRIME 3B 0387 CE87 GREEK ANO TELEIA / RAISED DOT, GREEK SEMICOLON 3F 037E CDBE GREEK QUESTION MARK 41 0391 CE91 GREEK CAPITAL LETTER ALPHA 42 0392 CE92 GREEK CAPITAL LETTER BETA 44 0393 CE93 GREEK CAPITAL LETTER GAMMA 45 0394 CE94 GREEK CAPITAL LETTER DELTA 46 0395 CE95 GREEK CAPITAL LETTER EPSILON 47 03DA CF9A GREEK LETTER STIGMA 48 03DC CF9C GREEK LETTER DIGAMMA 49 0396 CE96 GREEK CAPITAL LETTER ZETA 4A 0397 CE97 GREEK CAPITAL LETTER ETA 4B 0398 CE98 GREEK CAPITAL LETTER THETA 4C 0399 CE99 GREEK CAPITAL LETTER IOTA 4D 039A CE9A GREEK CAPITAL LETTER KAPPA 4E 039B CE9B GREEK CAPITAL LETTER LAMDA 4F 039C CE9C GREEK CAPITAL LETTER MU 50 039D CE9D GREEK CAPITAL LETTER NU 51 039E CE9E GREEK CAPITAL LETTER XI 52 039F CE9F GREEK CAPITAL LETTER OMICRON 53 03A0 CEA0 GREEK CAPITAL LETTER PI 54 03DE CF9E GREEK LETTER KOPPA 55 03A1 CEA1 GREEK CAPITAL LETTER RHO 56 03A3 CEA3 GREEK CAPITAL LETTER SIGMA 58 03A4 CEA4 GREEK CAPITAL LETTER TAU 59 03A5 CEA5 GREEK CAPITAL LETTER UPSILON 5A 03A6 CEA6 GREEK CAPITAL LETTER PHI 5B 03A7 CEA7 GREEK CAPITAL LETTER CHI 5C 03A8 CEA8 GREEK CAPITAL LETTER PSI 5D 03A9 CEA9 GREEK CAPITAL LETTER OMEGA 5E 03E0 CFA0 GREEK LETTER SAMPI 61 03B1 CEB1 GREEK SMALL LETTER ALPHA 62 03B2 CEB2 GREEK SMALL LETTER BETA / SMALL LETTER BETA BEGINNING OF WORD 63 03D0 CF90 GREEK BETA SYMBOL / SMALL LETTER BETA MIDDLE OF WORD 64 03B3 CEB3 GREEK SMALL LETTER GAMMA 65 03B4 CEB4 GREEK SMALL LETTER DELTA 66 03B5 CEB5 GREEK SMALL LETTER EPSILON 67 03DB CF9B GREEK SMALL LETTER STIGMA 68 03DD CF9D GREEK SMALL LETTER DIGAMMA 69 03B6 CEB6 GREEK SMALL LETTER ZETA 6A 03B7 CEB7 GREEK SMALL LETTER ETA 6B 03B8 CEB8 GREEK SMALL LETTER THETA 6C 03B9 CEB9 GREEK SMALL LETTER IOTA 6D 03BA CEBA GREEK SMALL LETTER KAPPA 6E 03BB CEBB GREEK SMALL LETTER LAMDA 6F 03BC CEBC GREEK SMALL LETTER MU 70 03BD CEBD GREEK SMALL LETTER NU 71 03BE CEBE GREEK SMALL LETTER XI 72 03BF CEBF GREEK SMALL LETTER OMICRON 73 03C0 CF80 GREEK SMALL LETTER PI 74 03DF CF9F GREEK SMALL LETTER KOPPA 75 03C1 CF81 GREEK SMALL LETTER RHO 76 03C3 CF83 GREEK SMALL LETTER SIGMA 77 03C2 CF82 GREEK SMALL LETTER FINAL SIGMA / SMALL LETTER SIGMA END OF WORD 78 03C4 CF84 GREEK SMALL LETTER TAU 79 03C5 CF85 GREEK SMALL LETTER UPSILON 7A 03C6 CF86 GREEK SMALL LETTER PHI 7B 03C7 CF87 GREEK SMALL LETTER CHI 7C 03C8 CF88 GREEK SMALL LETTER PSI 7D 03C9 CF89 GREEK SMALL LETTER OMEGA 7E 03E1 CFA1 GREEK SMALL LETTER SAMPI

This table contains 13,478 mappings of character encodings for East Asian ideographs from the East Asian Coded Character set (ANSI/NISO Z39.64, or "EACC", including 10 "Version J" additions that did not appear in the published standard) to character encodings in the Universal Character Set (UCS, ISO-IEC 10646)/Unicode. Character codes are given in hexadecimal notation. Each character is presented on a separate row.

The first column contains the MARC-8 EACC 24-bit code (in hex), the second column contains the corresponding UCS/Unicode 16-bit code (in hex), the third column contains the UTF-8 code (in hex) for the UCS character, the fourth column contains a representation of the character (where possible), the fifth column contains a character name or description. Most East Asian ideographs are not given unique names in the MARC-8 or UCS/Unicode.

The characters in this table are sorted in EACC character code order.

212F30 3007 E38087 East Asian ideograph (number zero) 213021 4E00 E4B880 East Asian ideograph 213022 4E01 E4B881 East Asian ideograph 213023 4E03 E4B883 East Asian ideograph 213024 4E09 E4B889 East Asian ideograph 213025 4E0B E4B88B East Asian ideograph 213026 4E0A E4B88A East Asian ideograph 213027 4E08 E4B888 East Asian ideograph 213029 4E10 E4B890 East Asian ideograph 21302A 4E0D E4B88D East Asian ideograph 21302B 4E14 E4B894 East Asian ideograph 21302C 4E19 E4B899 East Asian ideograph 21302D 4E16 E4B896 East Asian ideograph 21302E 4E15 E4B895 East Asian ideograph 21302F 4E18 E4B898 East Asian ideograph 213030 4E22 E4B8A2 East Asian ideograph 213031 4E1E E4B89E East Asian ideograph 213032 4E26 E4B8A6 East Asian ideograph 213034 4E2D E4B8AD East Asian ideograph 213035 4E32 E4B8B2 East Asian ideograph 213036 51E1 E587A1 East Asian ideograph 213037 4E38 E4B8B8 East Asian ideograph 213038 4E39 E4B8B9 East Asian ideograph 213039 4E3B E4B8BB East Asian ideograph 21303A 4E43 E4B983 East Asian ideograph 21303B 4E45 E4B985 East Asian ideograph 21303D 4E4B E4B98B East Asian ideograph 21303E 5C39 E5B0B9 East Asian ideograph 21303F 4E4F E4B98F East Asian ideograph 213040 4E4E E4B98E East Asian ideograph 213041 4E4D E4B98D East Asian ideograph 213042 4E52 E4B992 East Asian ideograph 213043 4E53 E4B993 East Asian ideograph 213044 4E56 E4B996 East Asian ideograph 213045 4E58 E4B998 East Asian ideograph 213046 4E59 E4B999 East Asian ideograph 213047 4E5D E4B99D East Asian ideograph 213048 4E5F E4B99F East Asian ideograph 213049 4E5E E4B99E East Asian ideograph 21304B 4E73 E4B9B3 East Asian ideograph 21304C 4E7E E4B9BE East Asian ideograph 21304D 4E82 E4BA82 East Asian ideograph 213050 4E8B E4BA8B East Asian ideograph 213051 4E8C E4BA8C East Asian ideograph 213052 4E8E E4BA8E East Asian ideograph 213053 4E95 E4BA95 East Asian ideograph 213054 4E94 E4BA94 East Asian ideograph 213055 4E92 E4BA92 East Asian ideograph 213057 4E99 E4BA99 East Asian ideograph (variant of EACC 4B3057) 213058 4E9E E4BA9E East Asian ideograph 213059 4E9B E4BA9B East Asian ideograph 21305A 4E9F E4BA9F East Asian ideograph 21305B 4EA1 E4BAA1 East Asian ideograph 21305C 4EA6 E4BAA6 East Asian ideograph 21305D 4EA5 E4BAA5 East Asian ideograph 21305E 4EA4 E4BAA4 East Asian ideograph 21305F 4EA8 E4BAA8 East Asian ideograph 213060 4EAB E4BAAB East Asian ideograph 213061 4EAC E4BAAC East Asian ideograph 213062 4EAD E4BAAD East Asian ideograph 213063 4EAE E4BAAE East Asian ideograph 213064 4EBA E4BABA East Asian ideograph 213065 4ECA E4BB8A East Asian ideograph 213066 4EC1 E4BB81 East Asian ideograph 213068 4EC3 E4BB83 East Asian ideograph 213069 4EC4 E4BB84 East Asian ideograph 21306B 4ECD E4BB8D East Asian ideograph 21306C 4EC7 E4BB87 East Asian ideograph 21306D 4ECB E4BB8B East Asian ideograph 21306E 4EE4 E4BBA4 East Asian ideograph 21306F 4ED8 E4BB98 East Asian ideograph 213070 4ED5 E4BB95 East Asian ideograph 213071 4ED6 E4BB96 East Asian ideograph 213072 4EDE E4BB9E East Asian ideograph 213073 4EE3 E4BBA3 East Asian ideograph 213074 4ED4 E4BB94 East Asian ideograph 213075 4ED7 E4BB97 East Asian ideograph 213076 4ED9 E4BB99 East Asian ideograph 213077 4EE5 E4BBA5 East Asian ideograph 213078 4EFF E4BBBF East Asian ideograph 213079 4F09 E4BC89 East Asian ideograph 21307C 4EFB E4BBBB East Asian ideograph 21307D 4F0A E4BC8A East Asian ideograph 21307E 4F15 E4BC95 East Asian ideograph 213121 4F11 E4BC91 East Asian ideograph 213122 4F10 E4BC90 East Asian ideograph 213123 4F0F E4BC8F East Asian ideograph 213124 4EF2 E4BBB2 East Asian ideograph 213125 4F01 E4BC81 East Asian ideograph 213126 4EF3 E4BBB3 East Asian ideograph 213127 4EF6 E4BBB6 East Asian ideograph 213128 4EF0 E4BBB0 East Asian ideograph 21312A 4F4F E4BD8F East Asian ideograph 21312B 4F4D E4BD8D East Asian ideograph 21312C 4F34 E4BCB4 East Asian ideograph 21312D 4F47 E4BD87 East Asian ideograph 21312E 4F57 E4BD97 East Asian ideograph 21312F 4F3A E4BCBA East Asian ideograph 213130 4F5E E4BD9E East Asian ideograph 213132 4F5B E4BD9B East Asian ideograph 213133 4F55 E4BD95 East Asian ideograph 213134 4F30 E4BCB0 East Asian ideograph 213135 4F50 E4BD90 East Asian ideograph 213136 4F51 E4BD91 East Asian ideograph 213137 4F3D E4BCBD East Asian ideograph 213138 4F48 E4BD88 East Asian ideograph 213139 4F46 E4BD86 East Asian ideograph 21313A 4F38 E4BCB8 East Asian ideograph 21313B 4F43 E4BD83 East Asian ideograph 21313C 4F54 E4BD94 East Asian ideograph 21313D 4F3C E4BCBC East Asian ideograph 21313E 4F63 E4BDA3 East Asian ideograph 21313F 4F5C E4BD9C East Asian ideograph 213140 4F60 E4BDA0 East Asian ideograph 213141 4F2F E4BCAF East Asian ideograph 213142 4F4E E4BD8E East Asian ideograph 213143 4F5D E4BD9D East Asian ideograph 213144 4F36 E4BCB6 East Asian ideograph 213145 4F9D E4BE9D East Asian ideograph 213146 4F6F E4BDAF East Asian ideograph 213147 4F75 E4BDB5 East Asian ideograph 213148 4F8D E4BE8D East Asian ideograph 213149 4F73 E4BDB3 East Asian ideograph 21314A 4F7F E4BDBF East Asian ideograph 21314B 4F9B E4BE9B East Asian ideograph 21314C 4F86 E4BE86 East Asian ideograph 21314D 4F6C E4BDAC East Asian ideograph 21314E 4F8B E4BE8B East Asian ideograph 21314F 4F96 E4BE96 East Asian ideograph 213151 4F83 E4BE83 East Asian ideograph 213152 4F7B E4BDBB East Asian ideograph 213153 4F88 E4BE88 East Asian ideograph 213154 4F69 E4BDA9 East Asian ideograph 213155 4F8F E4BE8F East Asian ideograph 213156 4F7E E4BDBE East Asian ideograph 213157 4FE1 E4BFA1 East Asian ideograph 213158 4FD1 E4BF91 East Asian ideograph 213159 4FB5 E4BEB5 East Asian ideograph 21315A 4FAF E4BEAF East Asian ideograph 21315B 4FBF E4BEBF East Asian ideograph 21315C 4FDE E4BF9E East Asian ideograph 21315D 4FE0 E4BFA0 East Asian ideograph 21315E 4FCF E4BF8F East Asian ideograph 21315F 4FB6 E4BEB6 East Asian ideograph 213160 4FDA E4BF9A East Asian ideograph 213161 4FDD E4BF9D East Asian ideograph 213162 4FC3 E4BF83 East Asian ideograph 213163 4FD8 E4BF98 East Asian ideograph 213164 4FDF E4BF9F East Asian ideograph 213165 4FCA E4BF8A East Asian ideograph 213166 4FAE E4BEAE East Asian ideograph 213167 4FD0 E4BF90 East Asian ideograph 213168 4FC4 E4BF84 East Asian ideograph 213169 4FC2 E4BF82 East Asian ideograph 21316A 4FCE E4BF8E East Asian ideograph 21316B 4FD7 E4BF97 East Asian ideograph 21316C 5009 E58089 East Asian ideograph 21316E 500D E5808D East Asian ideograph 21316F 4FEF E4BFAF East Asian ideograph 213170 5026 E580A6 East Asian ideograph 213171 500C E5808C East Asian ideograph 213172 5025 E580A5 East Asian ideograph 213173 5011 E58091 East Asian ideograph 213174 4FF8 E4BFB8 East Asian ideograph 213175 5028 E580A8 East Asian ideograph 213176 5014 E58094 East Asian ideograph 213177 5016 E58096 East Asian ideograph 213178 5029 E580A9 East Asian ideograph 213179 5006 E58086 East Asian ideograph 21317B 5012 E58092 East Asian ideograph 21317C 503C E580BC East Asian ideograph 21317D 501A E5809A East Asian ideograph 21317E 4FFA E4BFBA East Asian ideograph 213221 5018 E58098 East Asian ideograph 213222 4FF1 E4BFB1 East Asian ideograph 213223 5021 E580A1 East Asian ideograph 213224 500B E5808B East Asian ideograph 213225 5019 E58099 East Asian ideograph 213226 5000 E58080 East Asian ideograph 213227 4FEE E4BFAE East Asian ideograph 213228 4FF3 E4BFB3 East Asian ideograph 213229 502D E580AD East Asian ideograph 21322A 5003 E58083 East Asian ideograph 21322B 4FFE E4BFBE East Asian ideograph 21322C 502A E580AA East Asian ideograph 21322D 502B E580AB East Asian ideograph 21322E 505C E5819C East Asian ideograph 21322F 504F E5818F East Asian ideograph 213230 5065 E581A5 East Asian ideograph 213231 5047 E58187 East Asian ideograph 213232 505A E5819A East Asian ideograph 213233 5049 E58189 East Asian ideograph 213234 5043 E58183 East Asian ideograph 213235 5074 E581B4 East Asian ideograph 213236 5076 E581B6 East Asian ideograph 213237 504E E5818E East Asian ideograph 213238 5075 E581B5 East Asian ideograph 213239 504C E5818C East Asian ideograph 21323A 5055 E58195 East Asian ideograph 21323B 500F E5808F East Asian ideograph 21323C 5077 E581B7 East Asian ideograph 21323D 508D E5828D East Asian ideograph 21323E 50A2 E582A2 East Asian ideograph 21323F 5085 E58285 East Asian ideograph 213240 5099 E58299 East Asian ideograph 213241 5091 E58291 East Asian ideograph 213242 5080 E58280 East Asian ideograph 213243 5096 E58296 East Asian ideograph 213244 5098 E58298 East Asian ideograph 213245 50AD E582AD East Asian ideograph 213246 50B3 E582B3 East Asian ideograph 213247 50B5 E582B5 East Asian ideograph 213248 50B2 E582B2 East Asian ideograph 213249 50C5 E58385 East Asian ideograph 21324A 50BE E582BE East Asian ideograph 21324B 50AC E582AC East Asian ideograph 21324C 50B7 E582B7 East Asian ideograph 21324D 50AF E582AF East Asian ideograph 21324E 50E7 E583A7 East Asian ideograph 21324F 50EE E583AE East Asian ideograph 213250 50F1 E583B1 East Asian ideograph 213251 50E5 E583A5 East Asian ideograph 213252 50D6 E58396 East Asian ideograph 213253 50ED E583AD East Asian ideograph 213254 50DA E5839A East Asian ideograph 213255 50D5 E58395 East Asian ideograph 213256 507D E581BD East Asian ideograph 213257 50CF E5838F East Asian ideograph 213258 50D1 E58391 East Asian ideograph 213259 5100 E58480 East Asian ideograph 21325A 5104 E58484 East Asian ideograph 21325B 50FB E583BB East Asian ideograph 21325C 50F5 E583B5 East Asian ideograph 21325D 50F9 E583B9 East Asian ideograph 21325E 5102 E58482 East Asian ideograph 21325F 510D E5848D East Asian ideograph 213260 5108 E58488 East Asian ideograph 213261 5109 E58489 East Asian ideograph 213262 5110 E58490 East Asian ideograph 213263 5118 E58498 East Asian ideograph 213264 5112 E58492 East Asian ideograph 213265 5114 E58494 East Asian ideograph 213266 512A E584AA East Asian ideograph 213267 511F E5849F East Asian ideograph 213268 5121 E584A1 East Asian ideograph 213269 5132 E584B2 East Asian ideograph 21326A 5137 E584B7 East Asian ideograph 21326B 513C E584BC East Asian ideograph 21326C 5140 E58580 East Asian ideograph 21326D 5143 E58583 East Asian ideograph 21326E 5141 E58581 East Asian ideograph 21326F 5145 E58585 East Asian ideograph 213270 5144 E58584 East Asian ideograph 213271 5146 E58586 East Asian ideograph 213272 5149 E58589 East Asian ideograph 213273 5147 E58587 East Asian ideograph 213274 5148 E58588 East Asian ideograph 213275 514C E5858C East Asian ideograph 213277 514D E5858D East Asian ideograph 213278 5155 E58595 East Asian ideograph 213279 5154 E58594 East Asian ideograph 21327A 5152 E58592 East Asian ideograph 21327B 5157 E58597 East Asian ideograph 21327C 515C E5859C East Asian ideograph 21327D 5162 E585A2 East Asian ideograph 21327E 5165 E585A5 East Asian ideograph 213321 5167 E585A7 East Asian ideograph 213322 5168 E585A8 East Asian ideograph 213323 5169 E585A9 East Asian ideograph 213324 516B E585AB East Asian ideograph 213325 516D E585AD East Asian ideograph 213326 516E E585AE East Asian ideograph 213327 516C E585AC East Asian ideograph 213328 5171 E585B1 East Asian ideograph 213329 5175 E585B5 East Asian ideograph 21332A 5176 E585B6 East Asian ideograph 21332B 5177 E585B7 East Asian ideograph 21332C 5178 E585B8 East Asian ideograph 21332D 517C E585BC East Asian ideograph 21332E 5180 E58680 East Asian ideograph 21332F 5189 E58689 East Asian ideograph 213330 518C E5868C East Asian ideograph 213331 518D E5868D East Asian ideograph 213332 5192 E58692 East Asian ideograph 213333 5191 E58691 East Asian ideograph 213334 5195 E58695 East Asian ideograph 213335 6700 E69C80 East Asian ideograph 213336 5197 E58697 East Asian ideograph 213337 51A0 E586A0 East Asian ideograph 213339 51A5 E586A5 East Asian ideograph 21333C 51B0 E586B0 East Asian ideograph 21333D 51B6 E586B6 East Asian ideograph 21333E 51B7 E586B7 East Asian ideograph 213340 51CD E5878D East Asian ideograph 213341 51CC E5878C East Asian ideograph 213344 51DC E5879C East Asian ideograph 213345 51DD E5879D East Asian ideograph 213347 51F0 E587B0 East Asian ideograph 213348 51F1 E587B1 East Asian ideograph 213349 51F3 E587B3 East Asian ideograph 21334B 51FA E587BA East Asian ideograph 21334C 51F9 E587B9 East Asian ideograph 21334D 51F8 E587B8 East Asian ideograph 21334E 51FD E587BD East Asian ideograph 21334F 5200 E58880 East Asian ideograph 213350 5201 E58881 East Asian ideograph 213351 5203 E58883 East Asian ideograph 213352 5207 E58887 East Asian ideograph 213353 5206 E58886 East Asian ideograph 213354 5208 E58888 East Asian ideograph 213355 520A E5888A East Asian ideograph 213356 5211 E58891 East Asian ideograph 213357 5217 E58897 East Asian ideograph 213359 520E E5888E East Asian ideograph 21335A 5224 E588A4 East Asian ideograph 21335B 5225 E588A5 East Asian ideograph 21335C 5220 E588A0 East Asian ideograph 21335D 5228 E588A8 East Asian ideograph 21335E 5229 E588A9 East Asian ideograph 21335F 5238 E588B8 East Asian ideograph 213360 523B E588BB East Asian ideograph 213361 5237 E588B7 East Asian ideograph 213362 5230 E588B0 East Asian ideograph 213363 523A E588BA East Asian ideograph 213366 5241 E58981 East Asian ideograph 213367 5239 E588B9 East Asian ideograph 213368 5243 E58983 East Asian ideograph 213369 524D E5898D East Asian ideograph 21336A 524C E5898C East Asian ideograph 21336B 524B E5898B East Asian ideograph 21336C 524A E5898A East Asian ideograph 21336D 5247 E58987 East Asian ideograph 21336E 525C E5899C East Asian ideograph 21336F 5256 E58996 East Asian ideograph 213370 525B E5899B East Asian ideograph 213371 5254 E58994 East Asian ideograph 213372 525D E5899D East Asian ideograph 213373 526A E589AA East Asian ideograph 213374 526F E589AF East Asian ideograph 213375 5272 E589B2 East Asian ideograph 213376 5274 E589B4 East Asian ideograph 213377 5269 E589A9 East Asian ideograph 213378 5275 E589B5 East Asian ideograph 21337A 527D E589BD East Asian ideograph 21337B 527F E589BF East Asian ideograph 21337C 5283 E58A83 East Asian ideograph 21337D 5288 E58A88 East Asian ideograph 21337E 5287 E58A87 East Asian ideograph 213421 528D E58A8D East Asian ideograph 213422 5289 E58A89 East Asian ideograph 213423 5291 E58A91 East Asian ideograph 213424 529B E58A9B East Asian ideograph 213425 529F E58A9F East Asian ideograph 213426 52A0 E58AA0 East Asian ideograph 213427 52A3 E58AA3 East Asian ideograph 213428 52AB E58AAB East Asian ideograph 213429 52A9 E58AA9 East Asian ideograph 21342A 52AC E58AAC East Asian ideograph 21342B 52AA E58AAA East Asian ideograph 21342C 52BE E58ABE East Asian ideograph 21342D 52C7 E58B87 East Asian ideograph 21342E 52C3 E58B83 East Asian ideograph 21342F 52C1 E58B81 East Asian ideograph 213430 52C9 E58B89 East Asian ideograph 213431 52D8 E58B98 East Asian ideograph 213432 52D2 E58B92 East Asian ideograph 213433 52D9 E58B99 East Asian ideograph 213434 52D5 E58B95 East Asian ideograph 213435 52DE E58B9E East Asian ideograph 213436 52DB E58B9B East Asian ideograph 213437 52DD E58B9D East Asian ideograph 213438 52E2 E58BA2 East Asian ideograph 213439 52E4 E58BA4 East Asian ideograph 21343A 52DF E58B9F East Asian ideograph 21343C 52F5 E58BB5 East Asian ideograph 21343D 52F8 E58BB8 East Asian ideograph 21343E 52FB E58BBB East Asian ideograph 213440 52FF E58BBF East Asian ideograph 213441 5305 E58C85 East Asian ideograph 213442 5306 E58C86 East Asian ideograph 213443 5308 E58C88 East Asian ideograph 213444 530D E58C8D East Asian ideograph 213445 5310 E58C90 East Asian ideograph 213446 530F E58C8F East Asian ideograph 213447 5315 E58C95 East Asian ideograph 213448 5316 E58C96 East Asian ideograph 213449 5317 E58C97 East Asian ideograph 21344A 5319 E58C99 East Asian ideograph 21344B 53F5 E58FB5 East Asian ideograph 21344C 531D E58C9D East Asian ideograph 21344D 5321 E58CA1 East Asian ideograph 21344E 5320 E58CA0 East Asian ideograph 21344F 5323 E58CA3 East Asian ideograph 213450 532A E58CAA East Asian ideograph 213451 532F E58CAF East Asian ideograph 213452 5331 E58CB1 East Asian ideograph 213453 5339 E58CB9 East Asian ideograph 213454 533E E58CBE East Asian ideograph 213455 5340 E58D80 East Asian ideograph 213456 533F E58CBF East Asian ideograph 213457 5341 E58D81 East Asian ideograph 213458 5343 E58D83 East Asian ideograph 213459 5345 E58D85 East Asian ideograph 21345A 5348 E58D88 East Asian ideograph 21345B 5347 E58D87 East Asian ideograph 21345C 534A E58D8A East Asian ideograph 21345D 5349 E58D89 East Asian ideograph (variant of EACC 2D345D) 21345F 5352 E58D92 East Asian ideograph 213460 5354 E58D94 East Asian ideograph 213461 5353 E58D93 East Asian ideograph 213462 5351 E58D91 East Asian ideograph 213463 5357 E58D97 East Asian ideograph 213464 535A E58D9A East Asian ideograph 213466 535E E58D9E East Asian ideograph 213467 5361 E58DA1 East Asian ideograph 213469 5366 E58DA6 East Asian ideograph 21346A 536F E58DAF East Asian ideograph 21346B 536E E58DAE East Asian ideograph 21346C 5370 E58DB0 East Asian ideograph 21346D 5371 E58DB1 East Asian ideograph 21346E 537D E58DBD East Asian ideograph 21346F 5375 E58DB5 East Asian ideograph 213471 5378 E58DB8 East Asian ideograph 213473 537B E58DBB East Asian ideograph 213474 537F E58DBF East Asian ideograph 213475 5384 E58E84 East Asian ideograph 213476 539A E58E9A East Asian ideograph 213477 539D E58E9D East Asian ideograph 213478 539F E58E9F East Asian ideograph 213479 53A5 E58EA5 East Asian ideograph 21347A 53AD E58EAD East Asian ideograph 21347B 53B2 E58EB2 East Asian ideograph 21347C 53BB E58EBB East Asian ideograph 21347D 53C3 E58F83 East Asian ideograph 21347E 53C8 E58F88 East Asian ideograph 213521 53C9 E58F89 East Asian ideograph 213522 53CB E58F8B East Asian ideograph 213523 53CA E58F8A East Asian ideograph 213524 53CD E58F8D East Asian ideograph 213525 53D6 E58F96 East Asian ideograph 213526 53D4 E58F94 East Asian ideograph 213527 53D7 E58F97 East Asian ideograph 213528 53DB E58F9B East Asian ideograph 213529 53DF E58F9F East Asian ideograph 21352A 66FC E69BBC East Asian ideograph 21352B 53E2 E58FA2 East Asian ideograph 21352C 53E3 E58FA3 East Asian ideograph 21352D 53F8 E58FB8 East Asian ideograph 21352E 53E4 E58FA4 East Asian ideograph 21352F 53EE E58FAE East Asian ideograph 213530 53EF E58FAF East Asian ideograph 213531 53E9 E58FA9 East Asian ideograph 213532 53F3 E58FB3 East Asian ideograph 213533 53FC E58FBC East Asian ideograph 213534 53E8 E58FA8 East Asian ideograph 213535 53E6 E58FA6 East Asian ideograph 213536 53EC E58FAC East Asian ideograph 213537 53EB E58FAB East Asian ideograph 213538 53F0 E58FB0 East Asian ideograph (duplicate simplified) 213539 53E5 E58FA5 East Asian ideograph 21353A 53F1 E58FB1 East Asian ideograph 21353B 53ED E58FAD East Asian ideograph 21353C 53EA E58FAA East Asian ideograph 21353D 53F2 E58FB2 East Asian ideograph 21353F 540B E5908B East Asian ideograph 213540 5409 E59089 East Asian ideograph 213541 5410 E59090 East Asian ideograph 213542 540F E5908F East Asian ideograph 213543 540C E5908C East Asian ideograph 213544 540A E5908A East Asian ideograph 213545 540D E5908D East Asian ideograph 213546 5404 E59084 East Asian ideograph 213547 5403 E59083 East Asian ideograph 213548 5412 E59092 East Asian ideograph 21354A 5406 E59086 East Asian ideograph 21354D 542D E590AD East Asian ideograph 21354E 541D E5909D East Asian ideograph 21354F 541E E5909E East Asian ideograph 213550 541B E5909B East Asian ideograph 213551 544E E5918E East Asian ideograph 213552 543E E590BE East Asian ideograph 213553 5427 E590A7 East Asian ideograph 213554 5440 E59180 East Asian ideograph 213555 5431 E590B1 East Asian ideograph 213556 5446 E59186 East Asian ideograph 213557 543C E590BC East Asian ideograph 213558 5443 E59183 East Asian ideograph 213559 5426 E590A6 East Asian ideograph 21355A 5420 E590A0 East Asian ideograph 21355B 5436 E590B6 East Asian ideograph 21355C 5433 E590B3 East Asian ideograph 21355D 5435 E590B5 East Asian ideograph 21355E 542E E590AE East Asian ideograph 21355F 544A E5918A East Asian ideograph 213560 5448 E59188 East Asian ideograph 213561 543B E590BB East Asian ideograph 213562 5438 E590B8 East Asian ideograph 213563 5439 E590B9 East Asian ideograph 213564 5442 E59182 East Asian ideograph 213565 542B E590AB East Asian ideograph 213566 541F E5909F East Asian ideograph 213567 5429 E590A9 East Asian ideograph 213568 5473 E591B3 East Asian ideograph 213569 5462 E591A2 East Asian ideograph 21356A 5475 E591B5 East Asian ideograph 21356B 5495 E59295 East Asian ideograph 21356C 5478 E591B8 East Asian ideograph 21356D 5496 E59296 East Asian ideograph 21356E 5477 E591B7 East Asian ideograph 21356F 547B E591BB East Asian ideograph 213571 5492 E59292 East Asian ideograph 213572 5484 E59284 East Asian ideograph 213573 547C E591BC East Asian ideograph 213574 5468 E591A8 East Asian ideograph 213575 5486 E59286 East Asian ideograph 213576 548B E5928B East Asian ideograph 213577 548C E5928C East Asian ideograph 213578 5490 E59290 East Asian ideograph 213579 547D E591BD East Asian ideograph 21357A 5476 E591B6 East Asian ideograph 21357B 5471 E591B1 East Asian ideograph 21357C 549A E5929A East Asian ideograph 21357D 548E E5928E East Asian ideograph 21357E 54A9 E592A9 East Asian ideograph 213621 54AA E592AA East Asian ideograph 213622 54A8 E592A8 East Asian ideograph 213623 54AC E592AC East Asian ideograph 213624 54C0 E59380 East Asian ideograph 213625 54B3 E592B3 East Asian ideograph 213626 54A6 E592A6 East Asian ideograph 213627 54AB E592AB East Asian ideograph 213628 54C7 E59387 East Asian ideograph 213629 54C9 E59389 East Asian ideograph 21362A 54C4 E59384 East Asian ideograph 21362B 54C2 E59382 East Asian ideograph 21362D 54C1 E59381 East Asian ideograph 21362F 54CE E5938E East Asian ideograph 213630 54B1 E592B1 East Asian ideograph 213631 54BB E592BB East Asian ideograph 213632 54AF E592AF East Asian ideograph 213633 54C8 E59388 East Asian ideograph 213634 5501 E59481 East Asian ideograph 213635 54FC E593BC East Asian ideograph 213636 5510 E59490 East Asian ideograph 213637 54EA E593AA East Asian ideograph 213638 5514 E59494 East Asian ideograph 213639 54FA E593BA East Asian ideograph 21363A 54E5 E593A5 East Asian ideograph 21363B 54EE E593AE East Asian ideograph 21363C 54F2 E593B2 East Asian ideograph 21363D 54E8 E593A8 East Asian ideograph 21363E 54E1 E593A1 East Asian ideograph 21363F 54E9 E593A9 East Asian ideograph 213640 54ED E593AD East Asian ideograph 213641 5506 E59486 East Asian ideograph 213642 5509 E59489 East Asian ideograph 213643 54E6 E593A6 East Asian ideograph 213644 5556 E59596 East Asian ideograph 213645 5533 E594B3 East Asian ideograph 213646 5546 E59586 East Asian ideograph 213647 5537 E594B7 East Asian ideograph (Version J extension) 213648 554F E5958F East Asian ideograph 213649 555E E5959E East Asian ideograph 21364A 5566 E595A6 East Asian ideograph 21364B 556A E595AA East Asian ideograph 21364C 554A E5958A East Asian ideograph 21364D 5544 E59584 East Asian ideograph 21364E 555C E5959C East Asian ideograph 21364F 5531 E594B1 East Asian ideograph 213650 5543 E59583 East Asian ideograph 213651 552C E594AC East Asian ideograph 213652 5561 E595A1 East Asian ideograph 213653 553E E594BE East Asian ideograph 213654 5563 E595A3 East Asian ideograph 213655 5555 E59595 East Asian ideograph 213656 552F E594AF East Asian ideograph 213657 552E E594AE East Asian ideograph 213658 5564 E595A4 East Asian ideograph 213659 5538 E594B8 East Asian ideograph 21365A 55A7 E596A7 East Asian ideograph 21365B 5580 E59680 East Asian ideograph 21365C 557B E595BB East Asian ideograph 21365D 557C E595BC East Asian ideograph 21365E 5527 E594A7 East Asian ideograph 21365F 5594 E59694 East Asian ideograph 213660 5587 E59687 East Asian ideograph 213661 559C E5969C East Asian ideograph 213662 558B E5968B East Asian ideograph 213663 55AA E596AA East Asian ideograph 213664 55B3 E596B3 East Asian ideograph 213665 558A E5968A East Asian ideograph 213666 5583 E59683 East Asian ideograph 213667 55B1 E596B1 East Asian ideograph 213668 55AE E596AE East Asian ideograph 213669 5582 E59682 East Asian ideograph 21366A 559F E5969F East Asian ideograph 21366B 559D E5969D East Asian ideograph 21366C 5598 E59698 East Asian ideograph 21366D 559A E5969A East Asian ideograph 21366E 557E E595BE East Asian ideograph 21366F 55AC E596AC East Asian ideograph 213670 5589 E59689 East Asian ideograph 213671 55B2 E596B2 East Asian ideograph 213672 55BB E596BB East Asian ideograph 213673 55E8 E597A8 East Asian ideograph 213674 55DF E5979F East Asian ideograph 213675 55D1 E59791 East Asian ideograph 213676 55DC E5979C East Asian ideograph 213677 55E6 E597A6 East Asian ideograph 213678 55C7 E59787 East Asian ideograph 213679 55D3 E59793 East Asian ideograph 21367A 55CE E5978E East Asian ideograph 21367B 55E3 E597A3 East Asian ideograph 21367C 55EF E597AF East Asian ideograph 21367D 55E4 E597A4 East Asian ideograph 21367E 55C5 E59785 East Asian ideograph 213721 55DA E5979A East Asian ideograph 213722 55C6 E59786 East Asian ideograph 213723 55E1 E597A1 East Asian ideograph 213724 5600 E59880 East Asian ideograph 213725 561B E5989B East Asian ideograph 213726 55FE E597BE East Asian ideograph 213727 5616 E59896 East Asian ideograph 213728 55F7 E597B7 East Asian ideograph 213729 5608 E59888 East Asian ideograph 21372A 561F E5989F East Asian ideograph 21372B 55FD E597BD East Asian ideograph 21372C 5606 E59886 East Asian ideograph (variant of EACC 4B372C) 21372D 5609 E59889 East Asian ideograph 21372E 5614 E59894 East Asian ideograph 21372F 560E E5988E East Asian ideograph 213730 5617 E59897 East Asian ideograph 213731 560D E5988D East Asian ideograph 213732 562E E598AE East Asian ideograph 213733 562F E598AF East Asian ideograph 213734 564E E5998E East Asian ideograph 213735 5636 E598B6 East Asian ideograph 213736 5632 E598B2 East Asian ideograph 213737 563B E598BB East Asian ideograph 213738 5639 E598B9 East Asian ideograph 213739 5657 E59997 East Asian ideograph 21373B 5653 E59993 East Asian ideograph 21373C 563F E598BF East Asian ideograph 21373D 5634 E598B4 East Asian ideograph 21373E 5637 E598B7 East Asian ideograph 21373F 5659 E59999 East Asian ideograph 213740 5630 E598B0 East Asian ideograph 213741 566B E599AB East Asian ideograph 213742 5664 E599A4 East Asian ideograph 213743 5669 E599A9 East Asian ideograph 213744 5678 E599B8 East Asian ideograph 213745 5674 E599B4 East Asian ideograph 213746 5679 E599B9 East Asian ideograph 213747 5665 E599A5 East Asian ideograph 213748 566A E599AA East Asian ideograph 213749 5668 E599A8 East Asian ideograph 21374A 5671 E599B1 East Asian ideograph 21374B 566F E599AF East Asian ideograph 21374C 5662 E599A2 East Asian ideograph (variant of EACC 4B374C) 21374D 566C E599AC East Asian ideograph 21374E 5680 E59A80 East Asian ideograph 21374F 568E E59A8E East Asian ideograph 213750 5685 E59A85 East Asian ideograph 213751 5687 E59A87 East Asian ideograph 213752 5690 E59A90 East Asian ideograph 213753 568F E59A8F East Asian ideograph 213754 5695 E59A95 East Asian ideograph 213755 56AE E59AAE East Asian ideograph (variant of EACC 453755) 213756 56A8 E59AA8 East Asian ideograph 213757 56B0 E59AB0 East Asian ideograph 213758 56A5 E59AA5 East Asian ideograph 213759 56B7 E59AB7 East Asian ideograph 21375A 56B4 E59AB4 East Asian ideograph 21375B 56B6 E59AB6 East Asian ideograph 21375C 56C0 E59B80 East Asian ideograph 21375D 56C1 E59B81 East Asian ideograph 21375E 56C2 E59B82 East Asian ideograph 21375F 56BC E59ABC East Asian ideograph 213760 56CA E59B8A East Asian ideograph 213761 56C9 E59B89 East Asian ideograph 213762 56C8 E59B88 East Asian ideograph 213764 56D1 E59B91 East Asian ideograph 213765 56DB E59B9B East Asian ideograph 213766 56DA E59B9A East Asian ideograph 213767 56E0 E59BA0 East Asian ideograph 213768 56DE E59B9E East Asian ideograph 213769 56E4 E59BA4 East Asian ideograph 21376B 56F1 E59BB1 East Asian ideograph 21376C 56FA E59BBA East Asian ideograph 21376D 5703 E59C83 East Asian ideograph 21376E 5708 E59C88 East Asian ideograph 21376F 570B E59C8B East Asian ideograph 213770 570D E59C8D East Asian ideograph 213771 5712 E59C92 East Asian ideograph 213772 5713 E59C93 East Asian ideograph 213773 5718 E59C98 East Asian ideograph 213774 5716 E59C96 East Asian ideograph 213775 571F E59C9F East Asian ideograph 213777 572D E59CAD East Asian ideograph 213778 572F E59CAF East Asian ideograph 213779 5730 E59CB0 East Asian ideograph 21377A 5728 E59CA8 East Asian ideograph 21377B 5733 E59CB3 East Asian ideograph 21377C 5751 E59D91 East Asian ideograph 21377D 574A E59D8A East Asian ideograph 213821 5740 E59D80 East Asian ideograph 213822 5747 E59D87 East Asian ideograph 213823 574D E59D8D East Asian ideograph 213824 573E E59CBE East Asian ideograph 213825 574E E59D8E East Asian ideograph 213827 5783 E59E83 East Asian ideograph 213828 576A E59DAA East Asian ideograph 213829 5769 E59DA9 East Asian ideograph 21382A 5777 E59DB7 East Asian ideograph 21382B 5761 E59DA1 East Asian ideograph 21382C 5764 E59DA4 East Asian ideograph 21382D 5766 E59DA6 East Asian ideograph 21382E 5782 E59E82 East Asian ideograph 21382F 577C E59DBC East Asian ideograph 213830 57A0 E59EA0 East Asian ideograph 213831 578B E59E8B East Asian ideograph 213832 57A3 E59EA3 East Asian ideograph 213833 57AE E59EAE East Asian ideograph 213834 57A2 E59EA2 East Asian ideograph 213835 57D4 E59F94 East Asian ideograph 213836 57C2 E59F82 East Asian ideograph 213837 57CE E59F8E East Asian ideograph 213838 57CB E59F8B East Asian ideograph 213839 57C3 E59F83 East Asian ideograph 21383A 57F9 E59FB9 East Asian ideograph 21383B 57F7 E59FB7 East Asian ideograph 21383C 57FA E59FBA East Asian ideograph 21383D 57DF E59F9F East Asian ideograph 21383E 580A E5A08A East Asian ideograph 21383F 5805 E5A085 East Asian ideograph 213840 5802 E5A082 East Asian ideograph 213841 5806 E5A086 East Asian ideograph 213842 57E4 E59FA4 East Asian ideograph 213843 57E0 E59FA0 East Asian ideograph 213844 5831 E5A0B1 East Asian ideograph 213845 582F E5A0AF East Asian ideograph 213846 5835 E5A0B5 East Asian ideograph 213847 582A E5A0AA East Asian ideograph 213848 5830 E5A0B0 East Asian ideograph 213849 5824 E5A0A4 East Asian ideograph 21384A 5834 E5A0B4 East Asian ideograph 21384B 5821 E5A0A1 East Asian ideograph 21384C 585E E5A19E East Asian ideograph 21384D 5857 E5A197 East Asian ideograph 21384E 5858 E5A198 East Asian ideograph 21384F 5851 E5A191 East Asian ideograph 213850 586B E5A1AB East Asian ideograph 213851 584C E5A18C East Asian ideograph 213852 585A E5A19A East Asian ideograph 213853 586D E5A1AD East Asian ideograph 213854 5854 E5A194 East Asian ideograph 213855 5862 E5A1A2 East Asian ideograph 213856 584A E5A18A East Asian ideograph 213857 5883 E5A283 East Asian ideograph 213858 587E E5A1BE East Asian ideograph 213859 5875 E5A1B5 East Asian ideograph 21385A 588A E5A28A East Asian ideograph 21385B 5879 E5A1B9 East Asian ideograph 21385C 5885 E5A285 East Asian ideograph 21385D 5893 E5A293 East Asian ideograph 21385E 589E E5A29E East Asian ideograph 21385F 5880 E5A280 East Asian ideograph 213860 58B3 E5A2B3 East Asian ideograph 213861 589C E5A29C East Asian ideograph 213862 58AE E5A2AE East Asian ideograph 213863 589F E5A29F East Asian ideograph 213864 58C7 E5A387 East Asian ideograph (variant of EACC 4B3864) 213865 58C5 E5A385 East Asian ideograph 213866 58C1 E5A381 East Asian ideograph 213867 58BE E5A2BE East Asian ideograph 213868 58D5 E5A395 East Asian ideograph 213869 58D3 E5A393 East Asian ideograph 21386A 58D1 E5A391 East Asian ideograph 21386B 58D9 E5A399 East Asian ideograph 21386C 58D8 E5A398 East Asian ideograph 21386D 58DF E5A39F East Asian ideograph 21386E 58DE E5A39E East Asian ideograph 21386F 58E2 E5A3A2 East Asian ideograph 213870 58E4 E5A3A4 East Asian ideograph 213871 58E9 E5A3A9 East Asian ideograph 213872 58EB E5A3AB East Asian ideograph 213873 58EC E5A3AC East Asian ideograph 213874 58EF E5A3AF East Asian ideograph 213876 58FA E5A3BA East Asian ideograph 213877 58FD E5A3BD East Asian ideograph 213878 590F E5A48F East Asian ideograph 213879 5914 E5A494 East Asian ideograph 21387A 5915 E5A495 East Asian ideograph 21387B 5916 E5A496 East Asian ideograph 21387C 5919 E5A499 East Asian ideograph 21387D 591A E5A49A East Asian ideograph 21387E 591C E5A49C East Asian ideograph 213921 5920 E5A4A0 East Asian ideograph 213922 5924 E5A4A4 East Asian ideograph 213923 5925 E5A4A5 East Asian ideograph 213924 5922 E5A4A2 East Asian ideograph 213925 5927 E5A4A7 East Asian ideograph 213926 592A E5A4AA East Asian ideograph 213927 592B E5A4AB East Asian ideograph 213928 5929 E5A4A9 East Asian ideograph 213929 592D E5A4AD East Asian ideograph 21392A 592E E5A4AE East Asian ideograph 21392B 5931 E5A4B1 East Asian ideograph 21392C 5937 E5A4B7 East Asian ideograph 21392E 593E E5A4BE East Asian ideograph 21392F 5954 E5A594 East Asian ideograph 213930 5949 E5A589 East Asian ideograph 213931 5948 E5A588 East Asian ideograph 213932 5947 E5A587 East Asian ideograph 213933 5944 E5A584 East Asian ideograph 213934 5955 E5A595 East Asian ideograph 213935 5951 E5A591 East Asian ideograph 213936 594E E5A58E East Asian ideograph 213937 594F E5A58F East Asian ideograph 213938 5950 E5A590 East Asian ideograph 213939 5957 E5A597 East Asian ideograph 21393A 5958 E5A598 East Asian ideograph 21393B 595A E5A59A East Asian ideograph 21393C 5960 E5A5A0 East Asian ideograph 21393D 5962 E5A5A2 East Asian ideograph 21393E 5967 E5A5A7 East Asian ideograph 21393F 5969 E5A5A9 East Asian ideograph 213940 596A E5A5AA East Asian ideograph 213941 596E E5A5AE East Asian ideograph 213942 5973 E5A5B3 East Asian ideograph 213943 5974 E5A5B4 East Asian ideograph 213944 5976 E5A5B6 East Asian ideograph 213945 5984 E5A684 East Asian ideograph 213946 5983 E5A683 East Asian ideograph 213947 5978 E5A5B8 East Asian ideograph 213948 597D E5A5BD East Asian ideograph 213949 5979 E5A5B9 East Asian ideograph 21394A 5982 E5A682 East Asian ideograph 21394B 5981 E5A681 East Asian ideograph 21394C 59A8 E5A6A8 East Asian ideograph 21394D 5992 E5A692 East Asian ideograph 21394F 59A4 E5A6A4 East Asian ideograph 213950 59A3 E5A6A3 East Asian ideograph 213951 5993 E5A693 East Asian ideograph 213952 599E E5A69E East Asian ideograph 213953 599D E5A69D East Asian ideograph 213954 5999 E5A699 East Asian ideograph 213955 59A5 E5A6A5 East Asian ideograph 213956 598A E5A68A East Asian ideograph 213957 5996 E5A696 East Asian ideograph 213958 59BE E5A6BE East Asian ideograph 213959 59BB E5A6BB East Asian ideograph 21395A 59AE E5A6AE East Asian ideograph 21395B 59D1 E5A791 East Asian ideograph 21395C 59B9 E5A6B9 East Asian ideograph 21395D 59C6 E5A786 East Asian ideograph 21395E 59D0 E5A790 East Asian ideograph 21395F 59D7 E5A797 East Asian ideograph 213960 59AF E5A6AF East Asian ideograph 213961 59D2 E5A792 East Asian ideograph 213962 59D3 E5A793 East Asian ideograph 213963 59CA E5A78A East Asian ideograph 213965 59CB E5A78B East Asian ideograph 213966 59D4 E5A794 East Asian ideograph 213967 59E3 E5A7A3 East Asian ideograph 213969 59FF E5A7BF East Asian ideograph 21396A 59D8 E5A798 East Asian ideograph 21396B 5A03 E5A883 East Asian ideograph 21396C 59E8 E5A7A8 East Asian ideograph 21396D 59E5 E5A7A5 East Asian ideograph 21396E 59EA E5A7AA East Asian ideograph 21396F 5A01 E5A881 East Asian ideograph 213970 59FB E5A7BB East Asian ideograph 213971 59E6 E5A7A6 East Asian ideograph 213972 59DA E5A79A East Asian ideograph 213973 5A11 E5A891 East Asian ideograph 213974 5A18 E5A898 East Asian ideograph 213975 5A23 E5A8A3 East Asian ideograph 213976 5A1C E5A89C East Asian ideograph 213977 5A13 E5A893 East Asian ideograph 213978 59EC E5A7AC East Asian ideograph 213979 5A20 E5A8A0 East Asian ideograph 21397A 5A1F E5A89F East Asian ideograph 21397B 5A1B E5A89B East Asian ideograph 21397C 5A0C E5A88C East Asian ideograph 21397D 5A29 E5A8A9 East Asian ideograph 21397E 5A25 E5A8A5 East Asian ideograph 213A21 5A46 E5A986 East Asian ideograph 213A22 5A49 E5A989 East Asian ideograph 213A23 5A6A E5A9AA East Asian ideograph 213A24 5A36 E5A8B6 East Asian ideograph 213A25 5A4A E5A98A East Asian ideograph 213A26 5A40 E5A980 East Asian ideograph 213A27 5A66 E5A9A6 East Asian ideograph 213A28 5A41 E5A981 East Asian ideograph 213A29 5A3C E5A8BC East Asian ideograph 213A2A 5A62 E5A9A2 East Asian ideograph 213A2B 5A5A E5A99A East Asian ideograph 213A2C 5A77 E5A9B7 East Asian ideograph 213A2D 5A9A E5AA9A East Asian ideograph 213A2E 5A92 E5AA92 East Asian ideograph 213A2F 5A7F E5A9BF East Asian ideograph 213A30 5ABC E5AABC East Asian ideograph 213A31 5A9B E5AA9B East Asian ideograph 213A32 5ACC E5AB8C East Asian ideograph 213A33 5AC1 E5AB81 East Asian ideograph 213A34 5AC9 E5AB89 East Asian ideograph 213A35 5ABE E5AABE East Asian ideograph 213A36 5ABD E5AABD East Asian ideograph 213A37 5AB2 E5AAB2 East Asian ideograph 213A38 5AC2 E5AB82 East Asian ideograph 213A39 5AB3 E5AAB3 East Asian ideograph 213A3A 5AE1 E5ABA1 East Asian ideograph 213A3B 5AD7 E5AB97 East Asian ideograph 213A3C 5AD6 E5AB96 East Asian ideograph 213A3D 5AE3 E5ABA3 East Asian ideograph 213A3E 5AE9 E5ABA9 East Asian ideograph 213A3F 5AD8 E5AB98 East Asian ideograph 213A40 5AE6 E5ABA6 East Asian ideograph 213A41 5AFB E5ABBB East Asian ideograph 213A42 5B09 E5AC89 East Asian ideograph 213A43 5B0B E5AC8B East Asian ideograph 213A44 5B0C E5AC8C East Asian ideograph 213A45 5AF5 E5ABB5 East Asian ideograph 213A46 5B34 E5ACB4 East Asian ideograph 213A47 5B1D E5AC9D East Asian ideograph 213A48 5B2A E5ACAA East Asian ideograph 213A49 5B24 E5ACA4 East Asian ideograph 213A4A 5B30 E5ACB0 East Asian ideograph 213A4B 5B38 E5ACB8 East Asian ideograph 213A4C 5B40 E5AD80 East Asian ideograph 213A4D 5B50 E5AD90 East Asian ideograph 213A4E 5B51 E5AD91 East Asian ideograph 213A4F 5B53 E5AD93 East Asian ideograph 213A50 5B54 E5AD94 East Asian ideograph 213A51 5B55 E5AD95 East Asian ideograph 213A52 5B57 E5AD97 East Asian ideograph 213A53 5B58 E5AD98 East Asian ideograph 213A54 5B5D E5AD9D East Asian ideograph 213A55 5B5C E5AD9C East Asian ideograph 213A57 5B5F E5AD9F East Asian ideograph 213A58 5B63 E5ADA3 East Asian ideograph 213A59 5B64 E5ADA4 East Asian ideograph 213A5A 5B69 E5ADA9 East Asian ideograph 213A5B 5B6B E5ADAB East Asian ideograph 213A5C 5B70 E5ADB0 East Asian ideograph 213A5D 5B73 E5ADB3 East Asian ideograph 213A5E 5B71 E5ADB1 East Asian ideograph 213A5F 5B75 E5ADB5 East Asian ideograph 213A60 5B78 E5ADB8 East Asian ideograph 213A61 5B7A E5ADBA East Asian ideograph 213A62 5B7D E5ADBD East Asian ideograph 213A63 5B7F E5ADBF East Asian ideograph 213A65 5B87 E5AE87 East Asian ideograph 213A66 5B88 E5AE88 East Asian ideograph 213A67 5B89 E5AE89 East Asian ideograph 213A68 5B85 E5AE85 East Asian ideograph 213A69 5B8C E5AE8C East Asian ideograph 213A6A 5B8B E5AE8B East Asian ideograph 213A6B 5B8F E5AE8F East Asian ideograph 213A6C 5B97 E5AE97 East Asian ideograph 213A6D 5B9A E5AE9A East Asian ideograph 213A6E 5B9C E5AE9C East Asian ideograph 213A6F 5B98 E5AE98 East Asian ideograph 213A70 5B99 E5AE99 East Asian ideograph 213A71 5B9B E5AE9B East Asian ideograph 213A72 5BA5 E5AEA5 East Asian ideograph 213A73 5BA3 E5AEA3 East Asian ideograph 213A74 5BA6 E5AEA6 East Asian ideograph 213A75 5BA4 E5AEA4 East Asian ideograph 213A76 5BA2 E5AEA2 East Asian ideograph 213A77 5BB0 E5AEB0 East Asian ideograph 213A78 5BB8 E5AEB8 East Asian ideograph 213A7A 5BB5 E5AEB5 East Asian ideograph 213A7B 5BB4 E5AEB4 East Asian ideograph 213A7C 5BAE E5AEAE East Asian ideograph 213A7D 5BB9 E5AEB9 East Asian ideograph 213A7E 5BB3 E5AEB3 East Asian ideograph 213B21 5BC6 E5AF86 East Asian ideograph 213B22 5BC7 E5AF87 East Asian ideograph 213B23 5BC5 E5AF85 East Asian ideograph 213B24 5BC4 E5AF84 East Asian ideograph 213B25 5BC2 E5AF82 East Asian ideograph 213B26 5BBF E5AEBF East Asian ideograph 213B27 5BCC E5AF8C East Asian ideograph 213B28 5BD2 E5AF92 East Asian ideograph 213B29 5BD0 E5AF90 East Asian ideograph 213B2A 5BD3 E5AF93 East Asian ideograph 213B2B 5BE1 E5AFA1 East Asian ideograph 213B2C 5BE5 E5AFA5 East Asian ideograph 213B2D 5BE8 E5AFA8 East Asian ideograph 213B2E 5BE2 E5AFA2 East Asian ideograph 213B2F 5BE4 E5AFA4 East Asian ideograph 213B30 5BDE E5AF9E East Asian ideograph 213B31 5BE6 E5AFA6 East Asian ideograph 213B32 5BE7 E5AFA7 East Asian ideograph 213B33 5BDF E5AF9F East Asian ideograph 213B34 5BEE E5AFAE East Asian ideograph 213B35 5BEC E5AFAC East Asian ideograph 213B36 5BE9 E5AFA9 East Asian ideograph 213B37 5BEB E5AFAB East Asian ideograph 213B38 5BF5 E5AFB5 East Asian ideograph 213B39 5BF6 E5AFB6 East Asian ideograph 213B3A 5BF8 E5AFB8 East Asian ideograph 213B3B 5BFA E5AFBA East Asian ideograph 213B3C 5C01 E5B081 East Asian ideograph 213B3D 5C04 E5B084 East Asian ideograph 213B3E 5C09 E5B089 East Asian ideograph 213B3F 5C08 E5B088 East Asian ideograph 213B40 5C07 E5B087 East Asian ideograph 213B41 5C0A E5B08A East Asian ideograph 213B42 5C0B E5B08B East Asian ideograph 213B43 5C0D E5B08D East Asian ideograph 213B44 5C0E E5B08E East Asian ideograph 213B45 5C0F E5B08F East Asian ideograph 213B46 5C11 E5B091 East Asian ideograph 213B47 5C16 E5B096 East Asian ideograph 213B48 5C1A E5B09A East Asian ideograph 213B49 5C24 E5B0A4 East Asian ideograph 213B4A 5C2C E5B0AC East Asian ideograph 213B4B 5C31 E5B0B1 East Asian ideograph 213B4C 5C37 E5B0B7 East Asian ideograph 213B4D 5C38 E5B0B8 East Asian ideograph 213B4E 5C3A E5B0BA East Asian ideograph 213B4F 5C3C E5B0BC East Asian ideograph 213B50 5C40 E5B180 East Asian ideograph 213B51 5C41 E5B181 East Asian ideograph 213B52 5C3F E5B0BF East Asian ideograph 213B53 5C3E E5B0BE East Asian ideograph 213B54 5C46 E5B186 East Asian ideograph 213B55 5C45 E5B185 East Asian ideograph 213B56 5C48 E5B188 East Asian ideograph 213B57 5C4E E5B18E East Asian ideograph 213B58 5C4B E5B18B East Asian ideograph 213B59 5C4D E5B18D East Asian ideograph 213B5A 5C55 E5B195 East Asian ideograph 213B5B 5C51 E5B191 East Asian ideograph 213B5C 5C50 E5B190 East Asian ideograph 213B5D 5C5B E5B19B East Asian ideograph 213B5E 5C60 E5B1A0 East Asian ideograph 213B5F 5C5C E5B19C East Asian ideograph 213B60 5C62 E5B1A2 East Asian ideograph 213B61 5C64 E5B1A4 East Asian ideograph (variant of EACC 4B3B61) 213B62 5C65 E5B1A5 East Asian ideograph 213B63 5C6C E5B1AC East Asian ideograph 213B64 5C6F E5B1AF East Asian ideograph 213B65 5C71 E5B1B1 East Asian ideograph 213B66 5C79 E5B1B9 East Asian ideograph 213B67 5C90 E5B290 East Asian ideograph 213B68 5C8C E5B28C East Asian ideograph 213B69 5C91 E5B291 East Asian ideograph 213B6A 5C94 E5B294 East Asian ideograph 213B6B 5CB7 E5B2B7 East Asian ideograph 213B6C 5CB8 E5B2B8 East Asian ideograph 213B6E 5CA1 E5B2A1 East Asian ideograph 213B6F 5CAB E5B2AB East Asian ideograph 213B71 5CB1 E5B2B1 East Asian ideograph 213B72 5CD9 E5B399 East Asian ideograph 213B73 5D01 E5B481 East Asian ideograph 213B74 5CFD E5B3BD East Asian ideograph 213B75 5CED E5B3AD East Asian ideograph 213B76 5CFB E5B3BB East Asian ideograph 213B77 5CE8 E5B3A8 East Asian ideograph 213B78 5CF0 E5B3B0 East Asian ideograph 213B79 5CF6 E5B3B6 East Asian ideograph 213B7A 5CEA E5B3AA East Asian ideograph 213B7B 5D07 E5B487 East Asian ideograph 213B7C 5D06 E5B486 East Asian ideograph 213B7D 5D1B E5B49B East Asian ideograph 213B7E 5D16 E5B496 East Asian ideograph 213C21 5D0E E5B48E East Asian ideograph 213C22 5D11 E5B491 East Asian ideograph 213C23 5D22 E5B4A2 East Asian ideograph 213C24 5D29 E5B4A9 East Asian ideograph 213C25 5D14 E5B494 East Asian ideograph 213C26 5D19 E5B499 East Asian ideograph 213C27 5D4C E5B58C East Asian ideograph 213C28 5D50 E5B590 East Asian ideograph 213C29 5D69 E5B5A9 East Asian ideograph 213C2A 5D84 E5B684 East Asian ideograph 213C2B 5D87 E5B687 East Asian ideograph 213C2C 5D9D E5B69D East Asian ideograph 213C2D 5DBC E5B6BC East Asian ideograph 213C2E 5DBD E5B6BD East Asian ideograph 213C2F 5DBA E5B6BA East Asian ideograph (variant of EACC 4B3C2F) 213C30 5DCD E5B78D East Asian ideograph 213C31 5DD2 E5B792 East Asian ideograph 213C32 5DD4 E5B794 East Asian ideograph 213C33 5DD6 E5B796 East Asian ideograph 213C34 5DDD E5B79D East Asian ideograph 213C35 5DDE E5B79E East Asian ideograph 213C36 5DE2 E5B7A2 East Asian ideograph 213C37 5DE5 E5B7A5 East Asian ideograph 213C38 5DE8 E5B7A8 East Asian ideograph 213C39 5DE7 E5B7A7 East Asian ideograph 213C3A 5DE6 E5B7A6 East Asian ideograph 213C3B 5DEB E5B7AB East Asian ideograph 213C3C 5DEE E5B7AE East Asian ideograph 213C3D 5DF1 E5B7B1 East Asian ideograph 213C3E 5DF2 E5B7B2 East Asian ideograph 213C3F 5DF3 E5B7B3 East Asian ideograph 213C40 5DF4 E5B7B4 East Asian ideograph 213C41 5DF7 E5B7B7 East Asian ideograph 213C42 5DFD E5B7BD East Asian ideograph 213C43 5DFE E5B7BE East Asian ideograph 213C44 5E02 E5B882 East Asian ideograph 213C46 5E06 E5B886 East Asian ideograph 213C49 5E1A E5B89A East Asian ideograph 213C4A 5E16 E5B896 East Asian ideograph 213C4B 5E15 E5B895 East Asian ideograph 213C4C 5E1B E5B89B East Asian ideograph 213C4D 5E11 E5B891 East Asian ideograph 213C4E 5E1D E5B89D East Asian ideograph 213C4F 5E25 E5B8A5 East Asian ideograph 213C51 5E2B E5B8AB East Asian ideograph 213C52 5E33 E5B8B3 East Asian ideograph 213C53 5E36 E5B8B6 East Asian ideograph 213C54 5E38 E5B8B8 East Asian ideograph 213C55 5E37 E5B8B7 East Asian ideograph 213C56 5E45 E5B985 East Asian ideograph 213C57 5E3D E5B8BD East Asian ideograph 213C58 5E40 E5B980 East Asian ideograph 213C59 5E4C E5B98C East Asian ideograph 213C5A 5E5B E5B99B East Asian ideograph 213C5B 5E54 E5B994 East Asian ideograph 213C5C 5E57 E5B997 East Asian ideograph 213C5D 5E55 E5B995 East Asian ideograph 213C5E 5E63 E5B9A3 East Asian ideograph 213C5F 5E62 E5B9A2 East Asian ideograph 213C60 5E5F E5B99F East Asian ideograph 213C61 5E6B E5B9AB East Asian ideograph 213C63 5E73 E5B9B3 East Asian ideograph 213C65 5E74 E5B9B4 East Asian ideograph 213C68 5E7B E5B9BB East Asian ideograph 213C69 5E7C E5B9BC East Asian ideograph 213C6A 5E7D E5B9BD East Asian ideograph 213C6B 5E7E E5B9BE East Asian ideograph 213C6C 5E8F E5BA8F East Asian ideograph 213C6D 5E87 E5BA87 East Asian ideograph 213C6E 5E8A E5BA8A East Asian ideograph 213C6F 5E9A E5BA9A East Asian ideograph 213C70 5E97 E5BA97 East Asian ideograph 213C71 5E96 E5BA96 East Asian ideograph 213C72 5E9C E5BA9C East Asian ideograph 213C73 5E95 E5BA95 East Asian ideograph 213C74 5EA0 E5BAA0 East Asian ideograph 213C75 5EA6 E5BAA6 East Asian ideograph 213C76 5EAB E5BAAB East Asian ideograph 213C77 5EA7 E5BAA7 East Asian ideograph 213C78 5EAD E5BAAD East Asian ideograph 213C79 5EB7 E5BAB7 East Asian ideograph 213C7A 5EB8 E5BAB8 East Asian ideograph 213C7B 5EB6 E5BAB6 East Asian ideograph 213C7C 5EB5 E5BAB5 East Asian ideograph 213C7D 5EC2 E5BB82 East Asian ideograph 213C7E 5EC1 E5BB81 East Asian ideograph 213D21 5EBE E5BABE East Asian ideograph 213D22 5ECA E5BB8A East Asian ideograph 213D23 5EC9 E5BB89 East Asian ideograph 213D24 5EC8 E5BB88 East Asian ideograph 213D25 5ED3 E5BB93 East Asian ideograph 213D26 5ED6 E5BB96 East Asian ideograph 213D27 5EE2 E5BBA2 East Asian ideograph 213D28 5EDA E5BB9A East Asian ideograph 213D29 5EDD E5BB9D East Asian ideograph 213D2A 5EE3 E5BBA3 East Asian ideograph (variant of EACC 4B3D2A) 213D2B 5EDF E5BB9F East Asian ideograph 213D2C 5EE0 E5BBA0 East Asian ideograph 213D2D 9F90 E9BE90 East Asian ideograph 213D2E 5EEC E5BBAC East Asian ideograph 213D2F 5EF3 E5BBB3 East Asian ideograph 213D30 5EF7 E5BBB7 East Asian ideograph 213D32 5EF6 E5BBB6 East Asian ideograph 213D33 5EFA E5BBBA East Asian ideograph 213D34 5EFF E5BBBF East Asian ideograph 213D36 5F04 E5BC84 East Asian ideograph 213D37 5F08 E5BC88 East Asian ideograph 213D38 5F0A E5BC8A East Asian ideograph 213D39 5F0F E5BC8F East Asian ideograph 213D3A 5F12 E5BC92 East Asian ideograph 213D3B 5F13 E5BC93 East Asian ideograph 213D3C 5F15 E5BC95 East Asian ideograph 213D3D 5F14 E5BC94 East Asian ideograph 213D3E 5F18 E5BC98 East Asian ideograph 213D3F 5F17 E5BC97 East Asian ideograph 213D40 5F1B E5BC9B East Asian ideograph 213D41 5F1F E5BC9F East Asian ideograph 213D42 5F26 E5BCA6 East Asian ideograph 213D43 5F27 E5BCA7 East Asian ideograph 213D44 5F29 E5BCA9 East Asian ideograph 213D45 5F2D E5BCAD East Asian ideograph 213D46 5F31 E5BCB1 East Asian ideograph 213D47 5F35 E5BCB5 East Asian ideograph 213D48 5F37 E5BCB7 East Asian ideograph 213D49 5F3C E5BCBC East Asian ideograph 213D4A 5F46 E5BD86 East Asian ideograph 213D4B 5F48 E5BD88 East Asian ideograph 213D4C 5F4C E5BD8C East Asian ideograph 213D4D 5F4E E5BD8E East Asian ideograph 213D4E 5F57 E5BD97 East Asian ideograph 213D4F 5F59 E5BD99 East Asian ideograph 213D50 5F5D E5BD9D East Asian ideograph 213D51 5F62 E5BDA2 East Asian ideograph 213D52 5F64 E5BDA4 East Asian ideograph 213D53 5F65 E5BDA5 East Asian ideograph 213D54 5F6C E5BDAC East Asian ideograph 213D55 5F69 E5BDA9 East Asian ideograph 213D57 5F6D E5BDAD East Asian ideograph 213D58 5F70 E5BDB0 East Asian ideograph 213D59 5F71 E5BDB1 East Asian ideograph 213D5B 5F79 E5BDB9 East Asian ideograph 213D5C 5F80 E5BE80 East Asian ideograph 213D5E 5F7F E5BDBF East Asian ideograph 213D5F 5F7C E5BDBC East Asian ideograph 213D60 5F85 E5BE85 East Asian ideograph 213D61 5F88 E5BE88 East Asian ideograph 213D62 5F8B E5BE8B East Asian ideograph 213D63 5F8A E5BE8A East Asian ideograph 213D64 5F87 E5BE87 East Asian ideograph 213D65 5F8C E5BE8C East Asian ideograph 213D66 5F92 E5BE92 East Asian ideograph 213D67 5F91 E5BE91 East Asian ideograph 213D68 5F90 E5BE90 East Asian ideograph 213D69 5F98 E5BE98 East Asian ideograph 213D6A 5F97 E5BE97 East Asian ideograph 213D6B 5F99 E5BE99 East Asian ideograph 213D6C 5F9E E5BE9E East Asian ideograph 213D6F 5FA9 E5BEA9 East Asian ideograph 213D71 5FAA E5BEAA East Asian ideograph 213D72 5FAC E5BEAC East Asian ideograph 213D73 5FAE E5BEAE East Asian ideograph 213D74 5FB9 E5BEB9 East Asian ideograph 213D75 5FB7 E5BEB7 East Asian ideograph 213D76 5FB5 E5BEB5 East Asian ideograph 213D77 5FBD E5BEBD East Asian ideograph 213D78 5FC3 E5BF83 East Asian ideograph 213D79 5FC5 E5BF85 East Asian ideograph 213D7A 5FD9 E5BF99 East Asian ideograph 213D7B 5FD8 E5BF98 East Asian ideograph 213D7C 5FCC E5BF8C East Asian ideograph 213D7D 5FD6 E5BF96 East Asian ideograph 213E21 5FCD E5BF8D East Asian ideograph 213E22 5FEB E5BFAB East Asian ideograph 213E23 5FE0 E5BFA0 East Asian ideograph 213E24 5FF1 E5BFB1 East Asian ideograph 213E25 5FFD E5BFBD East Asian ideograph 213E26 5FDD E5BF9D East Asian ideograph 213E27 5FF5 E5BFB5 East Asian ideograph 213E28 5FFF E5BFBF East Asian ideograph 213E29 6014 E68094 East Asian ideograph 213E2A 6035 E680B5 East Asian ideograph (variant of EACC 4B3E2A) 213E2B 602A E680AA East Asian ideograph 213E2C 602F E680AF East Asian ideograph 213E2D 6016 E68096 East Asian ideograph 213E2E 601D E6809D East Asian ideograph 213E2F 600F E6808F East Asian ideograph 213E30 6021 E680A1 East Asian ideograph 213E31 6020 E680A0 East Asian ideograph 213E32 6028 E680A8 East Asian ideograph 213E33 6025 E680A5 East Asian ideograph 213E34 6027 E680A7 East Asian ideograph 213E35 600E E6808E East Asian ideograph 213E36 6015 E68095 East Asian ideograph 213E37 6012 E68092 East Asian ideograph 213E38 6059 E68199 East Asian ideograph 213E39 6063 E681A3 East Asian ideograph 213E3A 6068 E681A8 East Asian ideograph 213E3B 6043 E68183 East Asian ideograph 213E3C 6065 E681A5 East Asian ideograph 213E3D 6050 E68190 East Asian ideograph 213E3E 606D E681AD East Asian ideograph 213E3F 6062 E681A2 East Asian ideograph 213E40 6046 E68186 East Asian ideograph (variant of EACC 4B3E40) 213E41 604D E6818D East Asian ideograph 213E42 606B E681AB East Asian ideograph 213E43 6069 E681A9 East Asian ideograph 213E44 606C E681AC East Asian ideograph 213E45 606F E681AF East Asian ideograph 213E46 606A E681AA East Asian ideograph 213E47 6064 E681A4 East Asian ideograph 213E48 6070 E681B0 East Asian ideograph 213E49 6055 E68195 East Asian ideograph 213E4A 608C E6828C East Asian ideograph 213E4B 60A6 E682A6 East Asian ideograph 213E4C 607F E681BF East Asian ideograph 213E4D 609F E6829F East Asian ideograph 213E4E 609A E6829A East Asian ideograph 213E4F 6096 E68296 East Asian ideograph 213E50 6084 E68284 East Asian ideograph 213E51 608D E6828D East Asian ideograph 213E52 60A3 E682A3 East Asian ideograph 213E53 6089 E68289 East Asian ideograph 213E54 6094 E68294 East Asian ideograph 213E55 60A0 E682A0 East Asian ideograph 213E56 60A8 E682A8 East Asian ideograph 213E57 60B4 E682B4 East Asian ideograph 213E58 60E6 E683A6 East Asian ideograph 213E59 60CB E6838B East Asian ideograph 213E5B 60C5 E68385 East Asian ideograph (variant of EACC 4B3E5B) 213E5C 60B6 E682B6 East Asian ideograph 213E5D 60D1 E68391 East Asian ideograph 213E5E 60B5 E682B5 East Asian ideograph 213E5F 60BB E682BB East Asian ideograph 213E60 60E0 E683A0 East Asian ideograph 213E61 60E1 E683A1 East Asian ideograph 213E62 60DC E6839C East Asian ideograph 213E63 60D8 E68398 East Asian ideograph 213E64 60D5 E68395 East Asian ideograph 213E65 60BC E682BC East Asian ideograph 213E66 60B2 E682B2 East Asian ideograph 213E67 60C6 E68386 East Asian ideograph 213E68 60B8 E682B8 East Asian ideograph 213E69 60DA E6839A East Asian ideograph 213E6A 60DF E6839F East Asian ideograph 213E6B 610F E6848F East Asian ideograph 213E6C 611C E6849C East Asian ideograph 213E6D 60F3 E683B3 East Asian ideograph 213E6E 611F E6849F East Asian ideograph 213E6F 60F0 E683B0 East Asian ideograph 213E70 60FB E683BB East Asian ideograph 213E71 60FA E683BA East Asian ideograph 213E72 611A E6849A East Asian ideograph 213E73 6115 E68495 East Asian ideograph 213E74 60F9 E683B9 East Asian ideograph 213E75 6123 E684A3 East Asian ideograph 213E76 60F4 E683B4 East Asian ideograph 213E77 611B E6849B East Asian ideograph 213E78 610E E6848E East Asian ideograph 213E79 6100 E68480 East Asian ideograph 213E7A 6101 E68481 East Asian ideograph 213E7B 60F6 E683B6 East Asian ideograph 213E7C 6109 E68489 East Asian ideograph 213E7D 6108 E68488 East Asian ideograph 213E7E 60F1 E683B1 East Asian ideograph 213F21 6148 E68588 East Asian ideograph 213F22 6168 E685A8 East Asian ideograph 213F24 613C E684BC East Asian ideograph 213F26 614C E6858C East Asian ideograph 213F27 614D E6858D East Asian ideograph 213F28 614B E6858B East Asian ideograph 213F29 613E E684BE East Asian ideograph 213F2A 6127 E684A7 East Asian ideograph 213F2B 6134 E684B4 East Asian ideograph 213F2C 6147 E68587 East Asian ideograph 213F2D 6177 E685B7 East Asian ideograph 213F2E 6176 E685B6 East Asian ideograph 213F2F 6167 E685A7 East Asian ideograph 213F30 6170 E685B0 East Asian ideograph 213F31 615A E6859A East Asian ideograph 213F32 615D E6859D East Asian ideograph 213F33 6182 E68682 East Asian ideograph 213F34 617C E685BC East Asian ideograph 213F35 6162 E685A2 East Asian ideograph 213F36 616E E685AE East Asian ideograph 213F37 6155 E68595 East Asian ideograph 213F38 6158 E68598 East Asian ideograph 213F39 6163 E685A3 East Asian ideograph 213F3A 615F E6859F East Asian ideograph 213F3B 616B E685AB East Asian ideograph 213F3C 617E E685BE East Asian ideograph 213F3D 61A7 E686A7 East Asian ideograph 213F3E 61B2 E686B2 East Asian ideograph 213F3F 6191 E68691 East Asian ideograph 213F40 618E E6868E East Asian ideograph 213F41 61AB E686AB East Asian ideograph 213F42 61A4 E686A4 East Asian ideograph 213F43 61AC E686AC East Asian ideograph 213F44 619A E6869A East Asian ideograph 213F45 61A9 E686A9 East Asian ideograph 213F46 6194 E68694 East Asian ideograph 213F47 618A E6868A East Asian ideograph 213F48 61B6 E686B6 East Asian ideograph 213F49 61CD E6878D East Asian ideograph 213F4A 61C9 E68789 East Asian ideograph 213F4B 6190 E68690 East Asian ideograph 213F4C 61BE E686BE East Asian ideograph 213F4D 61C2 E68782 East Asian ideograph 213F4E 61C7 E68787 East Asian ideograph 213F4F 61C8 E68788 East Asian ideograph 213F50 61CA E6878A East Asian ideograph 213F51 61E3 E687A3 East Asian ideograph 213F52 61E6 E687A6 East Asian ideograph 213F53 61F2 E687B2 East Asian ideograph (variant of EACC 4B3F53) 213F54 61F7 E687B7 East Asian ideograph 213F55 61F6 E687B6 East Asian ideograph 213F56 61F8 E687B8 East Asian ideograph 213F57 61F5 E687B5 East Asian ideograph 213F58 61FA E687BA East Asian ideograph 213F59 61FE E687BE East Asian ideograph 213F5A 61FF E687BF East Asian ideograph 213F5B 61FC E687BC East Asian ideograph 213F5C 6200 E68880 East Asian ideograph 213F5D 6208 E68888 East Asian ideograph 213F5E 620A E6888A East Asian ideograph 213F5F 620E E6888E East Asian ideograph 213F60 620D E6888D East Asian ideograph 213F61 620C E6888C East Asian ideograph 213F62 6210 E68890 East Asian ideograph 213F63 6212 E68892 East Asian ideograph 213F64 6211 E68891 East Asian ideograph 213F65 6216 E68896 East Asian ideograph 213F66 6215 E68895 East Asian ideograph 213F67 621B E6889B East Asian ideograph 213F68 621A E6889A East Asian ideograph 213F69 621F E6889F East Asian ideograph 213F6A 6221 E688A1 East Asian ideograph 213F6B 6222 E688A2 East Asian ideograph 213F6C 622A E688AA East Asian ideograph 213F6D 622E E688AE East Asian ideograph 213F6E 6230 E688B0 East Asian ideograph 213F6F 6232 E688B2 East Asian ideograph 213F70 6234 E688B4 East Asian ideograph 213F71 6233 E688B3 East Asian ideograph 213F72 6236 E688B6 East Asian ideograph 213F73 623F E688BF East Asian ideograph 213F74 623E E688BE East Asian ideograph 213F75 6240 E68980 East Asian ideograph 213F76 6241 E68981 East Asian ideograph 213F78 6248 E68988 East Asian ideograph 213F79 6249 E68989 East Asian ideograph 213F7A 624B E6898B East Asian ideograph 213F7D 6253 E68993 East Asian ideograph 213F7E 6254 E68994 East Asian ideograph 214021 6252 E68992 East Asian ideograph 214022 625B E6899B East Asian ideograph 214023 6263 E689A3 East Asian ideograph 214024 6258 E68998 East Asian ideograph 214025 6296 E68A96 East Asian ideograph 214026 6297 E68A97 East Asian ideograph 214027 6292 E68A92 East Asian ideograph 214028 6276 E689B6 East Asian ideograph 214029 6289 E68A89 East Asian ideograph 21402A 627F E689BF East Asian ideograph 21402B 6279 E689B9 East Asian ideograph 21402C 6280 E68A80 East Asian ideograph 21402D 628A E68A8A East Asian ideograph 21402E 626D E689AD East Asian ideograph 21402F 627C E689BC East Asian ideograph 214030 627E E689BE East Asian ideograph 214031 626F E689AF East Asian ideograph 214032 6284 E68A84 East Asian ideograph 214033 6295 E68A95 East Asian ideograph 214034 6291 E68A91 East Asian ideograph 214035 6298 E68A98 East Asian ideograph 214036 626E E689AE East Asian ideograph 214037 6273 E689B3 East Asian ideograph 214038 6293 E68A93 East Asian ideograph 214039 62C9 E68B89 East Asian ideograph 21403A 62C4 E68B84 East Asian ideograph 21403B 62CC E68B8C East Asian ideograph 21403C 62A8 E68AA8 East Asian ideograph 21403D 62DC E68B9C East Asian ideograph 21403E 62BF E68ABF East Asian ideograph 21403F 62C2 E68B82 East Asian ideograph 214040 62B9 E68AB9 East Asian ideograph 214041 62D2 E68B92 East Asian ideograph 214042 62D3 E68B93 East Asian ideograph 214043 62DB E68B9B East Asian ideograph 214044 62AB E68AAB East Asian ideograph 214045 62CB E68B8B East Asian ideograph 214046 62D4 E68B94 East Asian ideograph 214047 62BD E68ABD East Asian ideograph 214048 62BC E68ABC East Asian ideograph 214049 62D0 E68B90 East Asian ideograph (variant of EACC 4B4049) 21404A 62C8 E68B88 East Asian ideograph 21404B 62D9 E68B99 East Asian ideograph 21404C 62DA E68B9A East Asian ideograph 21404D 62AC E68AAC East Asian ideograph 21404E 62C7 E68B87 East Asian ideograph 21404F 62B1 E68AB1 East Asian ideograph 214050 62D6 E68B96 East Asian ideograph 214051 62D8 E68B98 East Asian ideograph 214052 62CD E68B8D East Asian ideograph 214053 62B5 E68AB5 East Asian ideograph 214054 62CE E68B8E East Asian ideograph 214055 62D7 E68B97 East Asian ideograph 214056 62C6 E68B86 East Asian ideograph 214057 6309 E68C89 East Asian ideograph 214058 6316 E68C96 East Asian ideograph 214059 62FC E68BBC East Asian ideograph 21405A 62F3 E68BB3 East Asian ideograph 21405B 6308 E68C88 East Asian ideograph 21405C 62ED E68BAD East Asian ideograph 21405D 6301 E68C81 East Asian ideograph 21405E 62EE E68BAE East Asian ideograph 21405F 62EF E68BAF East Asian ideograph 214060 62F7 E68BB7 East Asian ideograph 214061 6307 E68C87 East Asian ideograph 214062 62F1 E68BB1 East Asian ideograph 214063 62FD E68BBD East Asian ideograph 214064 6311 E68C91 East Asian ideograph 214065 62EC E68BAC East Asian ideograph 214066 62F4 E68BB4 East Asian ideograph (variant of EACC 4B4066) 214067 62FF E68BBF East Asian ideograph 214069 6342 E68D82 East Asian ideograph 21406A 632A E68CAA East Asian ideograph 21406B 6355 E68D95 East Asian ideograph 21406C 633E E68CBE East Asian ideograph 21406D 632F E68CAF East Asian ideograph 21406E 634E E68D8E East Asian ideograph 21406F 634F E68D8F East Asian ideograph 214070 6350 E68D90 East Asian ideograph 214071 6349 E68D89 East Asian ideograph 214073 632B E68CAB East Asian ideograph 214074 6328 E68CA8 East Asian ideograph 214075 633A E68CBA East Asian ideograph 214076 63A5 E68EA5 East Asian ideograph 214077 6369 E68DA9 East Asian ideograph 214078 63A0 E68EA0 East Asian ideograph 214079 6396 E68E96 East Asian ideograph 21407A 63A7 E68EA7 East Asian ideograph 21407B 6372 E68DB2 East Asian ideograph 21407C 6377 E68DB7 East Asian ideograph 21407D 6383 E68E83 East Asian ideograph 21407E 636B E68DAB East Asian ideograph 214121 6367 E68DA7 East Asian ideograph 214122 6398 E68E98 East Asian ideograph 214123 639B E68E9B East Asian ideograph 214124 63AA E68EAA East Asian ideograph 214125 6371 E68DB1 East Asian ideograph 214126 63A9 E68EA9 East Asian ideograph 214127 638C E68E8C East Asian ideograph 214128 6389 E68E89 East Asian ideograph 214129 63A2 E68EA2 East Asian ideograph 21412A 6399 E68E99 East Asian ideograph 21412B 63A1 E68EA1 East Asian ideograph 21412C 6388 E68E88 East Asian ideograph 21412D 63AC E68EAC East Asian ideograph 21412E 633D E68CBD East Asian ideograph 21412F 6392 E68E92 East Asian ideograph 214130 63A3 E68EA3 East Asian ideograph 214131 6376 E68DB6 East Asian ideograph 214132 638F E68E8F East Asian ideograph 214133 63A8 E68EA8 East Asian ideograph 214134 637B E68DBB East Asian ideograph 214135 6368 E68DA8 East Asian ideograph (variant of EACC 4B4135) 214136 6384 E68E84 East Asian ideograph 214137 6380 E68E80 East Asian ideograph 214138 63C6 E68F86 East Asian ideograph 214139 63C9 E68F89 East Asian ideograph 21413A 63CD E68F8D East Asian ideograph 21413B 63E1 E68FA1 East Asian ideograph 21413C 63C0 E68F80 East Asian ideograph 21413D 63E9 E68FA9 East Asian ideograph 21413E 63D0 E68F90 East Asian ideograph 21413F 63DA E68F9A East Asian ideograph 214140 63D6 E68F96 East Asian ideograph 214141 63ED E68FAD East Asian ideograph 214142 63EE E68FAE East Asian ideograph 214143 63CF E68F8F East Asian ideograph 214144 63E3 E68FA3 East Asian ideograph 214145 63F4 E68FB4 East Asian ideograph 214146 63DB E68F9B East Asian ideograph (variant of EACC 454146) 214147 63D2 E68F92 East Asian ideograph 214148 63EA E68FAA East Asian ideograph 214149 641E E6909E East Asian ideograph 21414A 642A E690AA East Asian ideograph 21414B 643E E690BE East Asian ideograph 21414C 6413 E69093 East Asian ideograph 21414D 640F E6908F East Asian ideograph 21414E 6414 E69094 East Asian ideograph 21414F 640D E6908D East Asian ideograph 214150 642D E690AD East Asian ideograph 214151 643D E690BD East Asian ideograph 214152 6416 E69096 East Asian ideograph 214153 6417 E69097 East Asian ideograph 214154 641C E6909C East Asian ideograph 214155 6436 E690B6 East Asian ideograph 214156 642C E690AC East Asian ideograph 214157 6458 E69198 East Asian ideograph 214158 6469 E691A9 East Asian ideograph 214159 6454 E69194 East Asian ideograph 21415A 6452 E69192 East Asian ideograph 21415B 646F E691AF East Asian ideograph 21415C 6478 E691B8 East Asian ideograph 21415D 6479 E691B9 East Asian ideograph 21415E 647A E691BA East Asian ideograph 21415F 645F E6919F East Asian ideograph 214160 6451 E69191 East Asian ideograph 214161 6467 E691A7 East Asian ideograph 214162 649E E6929E East Asian ideograph 214163 64A4 E692A4 East Asian ideograph 214164 6487 E69287 East Asian ideograph 214165 6488 E69288 East Asian ideograph 214166 64A5 E692A5 East Asian ideograph 214167 64B0 E692B0 East Asian ideograph 214168 6493 E69293 East Asian ideograph 214169 6495 E69295 East Asian ideograph 21416A 6492 E69292 East Asian ideograph 21416B 64A9 E692A9 East Asian ideograph 21416C 6491 E69291 East Asian ideograph 21416D 64AE E692AE East Asian ideograph 21416E 64B2 E692B2 East Asian ideograph 21416F 64AD E692AD East Asian ideograph 214170 649A E6929A East Asian ideograph 214171 64AB E692AB East Asian ideograph 214172 64AC E692AC East Asian ideograph 214173 64C5 E69385 East Asian ideograph 214174 64C1 E69381 East Asian ideograph 214175 64D8 E69398 East Asian ideograph 214176 64CA E6938A East Asian ideograph 214177 64BB E692BB East Asian ideograph 214178 64C2 E69382 East Asian ideograph 214179 64BC E692BC East Asian ideograph 21417A 64CB E6938B East Asian ideograph 21417B 64CD E6938D East Asian ideograph 21417C 64DA E6939A East Asian ideograph 21417D 64C4 E69384 East Asian ideograph 21417E 64C7 E69387 East Asian ideograph 214221 64CE E6938E East Asian ideograph 214222 64D4 E69394 East Asian ideograph 214223 64D2 E69392 East Asian ideograph 214224 64BF E692BF East Asian ideograph 214225 64E0 E693A0 East Asian ideograph 214226 64F0 E693B0 East Asian ideograph 214227 64E6 E693A6 East Asian ideograph 214228 64EC E693AC East Asian ideograph 214229 64F1 E693B1 East Asian ideograph 21422A 64F4 E693B4 East Asian ideograph 21422B 64F2 E693B2 East Asian ideograph 21422C 6506 E69486 East Asian ideograph 21422D 6500 E69480 East Asian ideograph 21422E 64FE E693BE East Asian ideograph 21422F 64FB E693BB East Asian ideograph 214230 64FA E693BA East Asian ideograph 214231 650F E6948F East Asian ideograph 214232 6518 E69498 East Asian ideograph 214233 6514 E69494 East Asian ideograph 214234 6519 E69499 East Asian ideograph 214235 651D E6949D East Asian ideograph 214236 651C E6949C East Asian ideograph 214237 6523 E694A3 East Asian ideograph 214238 6524 E694A4 East Asian ideograph 214239 652B E694AB East Asian ideograph 21423A 652A E694AA East Asian ideograph 21423B 652C E694AC East Asian ideograph 21423C 652F E694AF East Asian ideograph 21423D 6536 E694B6 East Asian ideograph 21423E 6539 E694B9 East Asian ideograph 21423F 653B E694BB East Asian ideograph 214240 653E E694BE East Asian ideograph 214241 653F E694BF East Asian ideograph 214242 6545 E69585 East Asian ideograph 214243 6548 E69588 East Asian ideograph 214244 654E E6958E East Asian ideograph 214245 6556 E69596 East Asian ideograph 214246 6551 E69591 East Asian ideograph 214247 6557 E69597 East Asian ideograph 214248 655D E6959D East Asian ideograph 214249 6558 E69598 East Asian ideograph 21424A 654F E6958F East Asian ideograph 21424B 6566 E695A6 East Asian ideograph 21424C 6562 E695A2 East Asian ideograph 21424D 6563 E695A3 East Asian ideograph 21424E 655E E6959E East Asian ideograph 21424F 5553 E59593 East Asian ideograph 214250 656C E695AC East Asian ideograph 214251 6572 E695B2 East Asian ideograph 214252 6575 E695B5 East Asian ideograph 214253 6577 E695B7 East Asian ideograph 214254 6578 E695B8 East Asian ideograph 214255 6574 E695B4 East Asian ideograph 214256 6582 E69682 East Asian ideograph 214257 6583 E69683 East Asian ideograph 214258 6587 E69687 East Asian ideograph 214259 6591 E69691 East Asian ideograph 21425A 6590 E69690 East Asian ideograph 21425C 6599 E69699 East Asian ideograph 21425D 659C E6969C East Asian ideograph 21425E 659F E6969F East Asian ideograph 21425F 65A1 E696A1 East Asian ideograph 214260 65A4 E696A4 East Asian ideograph 214261 65A5 E696A5 East Asian ideograph 214262 65A7 E696A7 East Asian ideograph 214263 65AC E696AC East Asian ideograph 214264 65AF E696AF East Asian ideograph 214265 65B0 E696B0 East Asian ideograph 214266 65B7 E696B7 East Asian ideograph 214267 65B9 E696B9 East Asian ideograph 214269 65BD E696BD East Asian ideograph 21426A 65C1 E69781 East Asian ideograph 21426B 65C5 E69785 East Asian ideograph 21426C 65CE E6978E East Asian ideograph 21426D 65CB E6978B East Asian ideograph 21426E 65CC E6978C East Asian ideograph 21426F 65CF E6978F East Asian ideograph 214270 65D7 E69797 East Asian ideograph 214271 65D6 E69796 East Asian ideograph 214272 65E2 E697A2 East Asian ideograph 214273 65E5 E697A5 East Asian ideograph 214275 65E9 E697A9 East Asian ideograph 214276 65EC E697AC East Asian ideograph 214277 65ED E697AD East Asian ideograph 214278 65E8 E697A8 East Asian ideograph 214279 65F1 E697B1 East Asian ideograph 21427A 65FA E697BA East Asian ideograph 21427B 6606 E69886 East Asian ideograph 21427C 6614 E69894 East Asian ideograph 21427D 660C E6988C East Asian ideograph 21427E 6600 E69880 East Asian ideograph 214321 660E E6988E East Asian ideograph 214322 6613 E69893 East Asian ideograph 214323 6602 E69882 East Asian ideograph 214324 660F E6988F East Asian ideograph 214325 6625 E698A5 East Asian ideograph 214326 6627 E698A7 East Asian ideograph 214327 662F E698AF East Asian ideograph 214328 662D E698AD East Asian ideograph 214329 6620 E698A0 East Asian ideograph 21432A 661F E6989F East Asian ideograph 21432B 6628 E698A8 East Asian ideograph 21432C 664F E6998F East Asian ideograph 21432D 6642 E69982 East Asian ideograph 21432E 6652 E69992 East Asian ideograph 21432F 6649 E69989 East Asian ideograph 214330 6643 E69983 East Asian ideograph 214331 664C E6998C East Asian ideograph 214332 665D E6999D East Asian ideograph 214333 6664 E699A4 East Asian ideograph 214334 6668 E699A8 East Asian ideograph 214335 6666 E699A6 East Asian ideograph 214336 665A E6999A East Asian ideograph 214337 666F E699AF East Asian ideograph 214338 666E E699AE East Asian ideograph 214339 6674 E699B4 East Asian ideograph (variant of EACC 4B4339) 21433A 6691 E69A91 East Asian ideograph 21433B 6670 E699B0 East Asian ideograph 21433C 6676 E699B6 East Asian ideograph 21433D 667A E699BA East Asian ideograph 21433E 6697 E69A97 East Asian ideograph 21433F 6687 E69A87 East Asian ideograph 214340 6689 E69A89 East Asian ideograph 214341 6688 E69A88 East Asian ideograph 214342 6696 E69A96 East Asian ideograph 214343 66A2 E69AA2 East Asian ideograph 214344 66AB E69AAB East Asian ideograph 214345 66B4 E69AB4 East Asian ideograph 214346 66AE E69AAE East Asian ideograph 214347 66C1 E69B81 East Asian ideograph 214348 66C9 E69B89 East Asian ideograph 214349 66C6 E69B86 East Asian ideograph 21434A 66B9 E69AB9 East Asian ideograph 21434B 66D6 E69B96 East Asian ideograph 21434C 66D9 E69B99 East Asian ideograph 21434D 66E0 E69BA0 East Asian ideograph 21434E 66DD E69B9D East Asian ideograph 21434F 66E6 E69BA6 East Asian ideograph 214350 66F0 E69BB0 East Asian ideograph 214351 66F2 E69BB2 East Asian ideograph 214352 66F3 E69BB3 East Asian ideograph 214353 66F4 E69BB4 East Asian ideograph 214354 66F7 E69BB7 East Asian ideograph 214355 66F8 E69BB8 East Asian ideograph 214356 66F9 E69BB9 East Asian ideograph 214357 52D7 E58B97 East Asian ideograph 214358 66FE E69BBE East Asian ideograph 214359 66FF E69BBF East Asian ideograph 21435A 6703 E69C83 East Asian ideograph 21435B 6708 E69C88 East Asian ideograph 21435C 6709 E69C89 East Asian ideograph 21435D 670D E69C8D East Asian ideograph 21435E 670B E69C8B East Asian ideograph 21435F 6717 E69C97 East Asian ideograph 214360 6715 E69C95 East Asian ideograph 214361 6714 E69C94 East Asian ideograph 214362 671B E69C9B East Asian ideograph 214363 671D E69C9D East Asian ideograph 214364 671F E69C9F East Asian ideograph 214366 6727 E69CA7 East Asian ideograph 214367 6728 E69CA8 East Asian ideograph 214369 672C E69CAC East Asian ideograph 21436A 672B E69CAB East Asian ideograph 21436B 672A E69CAA East Asian ideograph 21436D 673D E69CBD East Asian ideograph 21436F 6731 E69CB1 East Asian ideograph 214370 6735 E69CB5 East Asian ideograph 214371 675E E69D9E East Asian ideograph 214372 6751 E69D91 East Asian ideograph 214373 674E E69D8E East Asian ideograph 214374 675C E69D9C East Asian ideograph 214375 6750 E69D90 East Asian ideograph 214376 6756 E69D96 East Asian ideograph 214377 675F E69D9F East Asian ideograph 214378 674F E69D8F East Asian ideograph 214379 6749 E69D89 East Asian ideograph 21437B 676D E69DAD East Asian ideograph 21437C 678B E69E8B East Asian ideograph 21437D 6795 E69E95 East Asian ideograph 21437E 6789 E69E89 East Asian ideograph 214421 6787 E69E87 East Asian ideograph 214422 6777 E69DB7 East Asian ideograph 214423 679D E69E9D East Asian ideograph 214424 6797 E69E97 East Asian ideograph 214425 676F E69DAF East Asian ideograph 214426 6771 E69DB1 East Asian ideograph 214427 6773 E69DB3 East Asian ideograph 214428 679C E69E9C East Asian ideograph 214429 6775 E69DB5 East Asian ideograph 21442A 679A E69E9A East Asian ideograph 21442B 6790 E69E90 East Asian ideograph 21442D 677E E69DBE East Asian ideograph 21442E 67D3 E69F93 East Asian ideograph 21442F 67F1 E69FB1 East Asian ideograph 214430 67FF E69FBF East Asian ideograph 214431 67D4 E69F94 East Asian ideograph 214432 67C4 E69F84 East Asian ideograph 214433 67AF E69EAF East Asian ideograph 214434 67D0 E69F90 East Asian ideograph 214435 67D1 E69F91 East Asian ideograph 214436 67EF E69FAF East Asian ideograph 214437 67E9 E69FA9 East Asian ideograph 214438 67B6 E69EB6 East Asian ideograph 214439 67EC E69FAC East Asian ideograph 21443A 67E5 E69FA5 East Asian ideograph 21443B 67FA E69FBA East Asian ideograph 21443C 67DA E69F9A East Asian ideograph 21443D 6805 E6A085 East Asian ideograph 21443E 67DE E69F9E East Asian ideograph 21443F 67B8 E69EB8 East Asian ideograph 214440 67CF E69F8F East Asian ideograph 214441 67F3 E69FB3 East Asian ideograph 214442 6848 E6A188 East Asian ideograph 214443 6821 E6A0A1 East Asian ideograph 214444 6838 E6A0B8 East Asian ideograph 214445 6853 E6A193 East Asian ideograph 214446 6846 E6A186 East Asian ideograph 214447 6842 E6A182 East Asian ideograph 214448 6854 E6A194 East Asian ideograph 214449 6817 E6A097 East Asian ideograph 21444A 683D E6A0BD East Asian ideograph 21444B 6851 E6A191 East Asian ideograph 21444C 6829 E6A0A9 East Asian ideograph 21444D 6850 E6A190 East Asian ideograph 21444E 6839 E6A0B9 East Asian ideograph 214450 67F4 E69FB4 East Asian ideograph 214451 6843 E6A183 East Asian ideograph 214452 6840 E6A180 East Asian ideograph 214453 682A E6A0AA East Asian ideograph 214454 6845 E6A185 East Asian ideograph 214455 683C E6A0BC East Asian ideograph 214456 6813 E6A093 East Asian ideograph (variant of EACC 4B4456) 214457 6881 E6A281 East Asian ideograph 214458 6893 E6A293 East Asian ideograph 214459 68AF E6A2AF East Asian ideograph 21445A 6876 E6A1B6 East Asian ideograph 21445B 68B0 E6A2B0 East Asian ideograph 21445C 68A7 E6A2A7 East Asian ideograph 21445D 6897 E6A297 East Asian ideograph 21445E 68B5 E6A2B5 East Asian ideograph 21445F 68B3 E6A2B3 East Asian ideograph 214460 68A2 E6A2A2 East Asian ideograph 214461 687F E6A1BF East Asian ideograph 214462 68B1 E6A2B1 East Asian ideograph 214463 689D E6A29D East Asian ideograph 214464 68AD E6A2AD East Asian ideograph 214465 6886 E6A286 East Asian ideograph 214466 6885 E6A285 East Asian ideograph 214467 68A8 E6A2A8 East Asian ideograph 214468 689F E6A29F East Asian ideograph 214469 6894 E6A294 East Asian ideograph 21446A 6883 E6A283 East Asian ideograph 21446B 68D5 E6A395 East Asian ideograph 21446C 68FA E6A3BA East Asian ideograph 21446D 68C4 E6A384 East Asian ideograph 21446E 68F2 E6A3B2 East Asian ideograph 21446F 68D2 E6A392 East Asian ideograph 214470 68E3 E6A3A3 East Asian ideograph 214471 68DF E6A39F East Asian ideograph 214472 68CB E6A38B East Asian ideograph 214473 68EE E6A3AE East Asian ideograph 214474 690D E6A48D East Asian ideograph 214475 6905 E6A485 East Asian ideograph 214476 68E7 E6A3A7 East Asian ideograph 214477 68E0 E6A3A0 East Asian ideograph 214478 68F5 E6A3B5 East Asian ideograph 214479 68CD E6A38D East Asian ideograph 21447A 68D7 E6A397 East Asian ideograph 21447B 68D8 E6A398 East Asian ideograph 21447C 6912 E6A492 East Asian ideograph 21447D 68F9 E6A3B9 East Asian ideograph 21447E 68DA E6A39A East Asian ideograph 214521 690E E6A48E East Asian ideograph 214522 68C9 E6A389 East Asian ideograph 214523 6954 E6A594 East Asian ideograph 214524 6930 E6A4B0 East Asian ideograph 214525 6977 E6A5B7 East Asian ideograph 214526 6975 E6A5B5 East Asian ideograph 214527 695A E6A59A East Asian ideograph 214528 6960 E6A5A0 East Asian ideograph 214529 696B E6A5AB East Asian ideograph 21452A 694A E6A58A East Asian ideograph 21452B 6968 E6A5A8 East Asian ideograph 21452C 695E E6A59E East Asian ideograph 21452D 696D E6A5AD East Asian ideograph 21452E 6979 E6A5B9 East Asian ideograph 21452F 6953 E6A593 East Asian ideograph 214530 6986 E6A686 East Asian ideograph 214531 69A8 E6A6A8 East Asian ideograph 214532 6995 E6A695 East Asian ideograph 214533 699C E6A69C East Asian ideograph 214534 6994 E6A694 East Asian ideograph 214535 69C1 E6A781 East Asian ideograph 214536 69B7 E6A6B7 East Asian ideograph 214537 69AE E6A6AE East Asian ideograph 214538 699B E6A69B East Asian ideograph 214539 69CB E6A78B East Asian ideograph 21453A 69D3 E6A793 East Asian ideograph 21453B 69BB E6A6BB East Asian ideograph 21453C 69AB E6A6AB East Asian ideograph 21453D 69CC E6A78C East Asian ideograph 21453E 69AD E6A6AD East Asian ideograph 21453F 69D0 E6A790 East Asian ideograph 214540 69CD E6A78D East Asian ideograph 214541 69B4 E6A6B4 East Asian ideograph 214542 6A1F E6A89F East Asian ideograph 214543 69E8 E6A7A8 East Asian ideograph 214544 6A23 E6A8A3 East Asian ideograph 214545 69EA E6A7AA East Asian ideograph 214546 6A01 E6A881 East Asian ideograph 214547 6A19 E6A899 East Asian ideograph 214548 69FD E6A7BD East Asian ideograph 214549 6A1E E6A89E East Asian ideograph 21454A 6A13 E6A893 East Asian ideograph 21454B 6A21 E6A8A1 East Asian ideograph 21454C 69F3 E6A7B3 East Asian ideograph 21454D 6A0A E6A88A East Asian ideograph 21454E 6A02 E6A882 East Asian ideograph 21454F 6A05 E6A885 East Asian ideograph 214550 6A3D E6A8BD East Asian ideograph 214551 6A58 E6A998 East Asian ideograph 214552 6A59 E6A999 East Asian ideograph 214553 6A62 E6A9A2 East Asian ideograph 214554 6A44 E6A984 East Asian ideograph 214555 6A39 E6A8B9 East Asian ideograph 214556 6A6B E6A9AB East Asian ideograph 214557 6A3A E6A8BA East Asian ideograph 214558 6A38 E6A8B8 East Asian ideograph 214559 6A47 E6A987 East Asian ideograph 21455A 6A61 E6A9A1 East Asian ideograph 21455B 6A4B E6A98B East Asian ideograph 21455C 6A35 E6A8B5 East Asian ideograph 21455D 6A5F E6A99F East Asian ideograph 21455E 6A80 E6AA80 East Asian ideograph 21455F 6A94 E6AA94 East Asian ideograph 214560 6A84 E6AA84 East Asian ideograph 214561 6AA2 E6AAA2 East Asian ideograph 214562 6A9C E6AA9C East Asian ideograph 214563 6AB8 E6AAB8 East Asian ideograph 214564 6AB3 E6AAB3 East Asian ideograph 214565 6AC3 E6AB83 East Asian ideograph 214566 6ABB E6AABB East Asian ideograph 214568 6AAC E6AAAC East Asian ideograph 214569 6AE5 E6ABA5 East Asian ideograph 21456A 6ADA E6AB9A East Asian ideograph 21456B 6ADD E6AB9D East Asian ideograph 21456C 6ADB E6AB9B East Asian ideograph 21456D 6AD3 E6AB93 East Asian ideograph 21456E 6B04 E6AC84 East Asian ideograph 21456F 6AFB E6ABBB East Asian ideograph 214570 6B0A E6AC8A East Asian ideograph 214571 6B16 E6AC96 East Asian ideograph 214573 6B21 E6ACA1 East Asian ideograph 214574 6B23 E6ACA3 East Asian ideograph 214576 6B3E E6ACBE East Asian ideograph 214577 6B3A E6ACBA East Asian ideograph 214578 6B3D E6ACBD East Asian ideograph 214579 6B47 E6AD87 East Asian ideograph 21457A 6B49 E6AD89 East Asian ideograph 21457B 6B4C E6AD8C East Asian ideograph 21457C 6B50 E6AD90 East Asian ideograph 21457D 6B59 E6AD99 East Asian ideograph 21457E 6B5F E6AD9F East Asian ideograph 214621 6B61 E6ADA1 East Asian ideograph 214623 6B63 E6ADA3 East Asian ideograph 214624 6B64 E6ADA4 East Asian ideograph 214625 6B65 E6ADA5 East Asian ideograph 214627 6B66 E6ADA6 East Asian ideograph 214628 6B6A E6ADAA East Asian ideograph 214629 6B72 E6ADB2 East Asian ideograph 21462A 6B77 E6ADB7 East Asian ideograph 21462B 6B78 E6ADB8 East Asian ideograph 21462C 6B79 E6ADB9 East Asian ideograph 21462D 6B7B E6ADBB East Asian ideograph 21462E 6B7F E6ADBF East Asian ideograph 21462F 6B83 E6AE83 East Asian ideograph 214630 6B86 E6AE86 East Asian ideograph 214631 6B8A E6AE8A East Asian ideograph 214632 6B89 E6AE89 East Asian ideograph 214633 6B98 E6AE98 East Asian ideograph 214634 6B96 E6AE96 East Asian ideograph 214635 6BA4 E6AEA4 East Asian ideograph 214636 6BAE E6AEAE East Asian ideograph 214637 6BAF E6AEAF East Asian ideograph 214638 6BB2 E6AEB2 East Asian ideograph 214639 6BB5 E6AEB5 East Asian ideograph 21463A 6BB7 E6AEB7 East Asian ideograph 21463B 6BBA E6AEBA East Asian ideograph 21463C 6BBC E6AEBC East Asian ideograph 21463D 6BC0 E6AF80 East Asian ideograph 21463E 6BBF E6AEBF East Asian ideograph 21463F 6BC5 E6AF85 East Asian ideograph 214640 6BC6 E6AF86 East Asian ideograph 214641 6BCB E6AF8B East Asian ideograph 214642 6BCD E6AF8D East Asian ideograph 214643 6BCF E6AF8F East Asian ideograph 214644 6BD2 E6AF92 East Asian ideograph 214646 6BD4 E6AF94 East Asian ideograph 214647 6BD7 E6AF97 East Asian ideograph 214648 6BDB E6AF9B East Asian ideograph 214649 6BEB E6AFAB East Asian ideograph 21464A 6BEF E6AFAF East Asian ideograph 21464B 6BFD E6AFBD East Asian ideograph 21464C 6C0F E6B08F East Asian ideograph 21464D 6C11 E6B091 East Asian ideograph 21464E 6C10 E6B090 East Asian ideograph 21464F 6C13 E6B093 East Asian ideograph 214650 6C16 E6B096 East Asian ideograph 214651 6C1B E6B09B East Asian ideograph 214652 6C1F E6B09F East Asian ideograph 214653 6C27 E6B0A7 East Asian ideograph 214654 6C26 E6B0A6 East Asian ideograph 214655 6C23 E6B0A3 East Asian ideograph 214656 6C28 E6B0A8 East Asian ideograph 214657 6C24 E6B0A4 East Asian ideograph 214658 6C2B E6B0AB East Asian ideograph 214659 6C2E E6B0AE East Asian ideograph 21465A 6C33 E6B0B3 East Asian ideograph 21465B 6C2F E6B0AF East Asian ideograph (variant of EACC 45465B) 21465C 6C34 E6B0B4 East Asian ideograph 21465D 6C38 E6B0B8 East Asian ideograph 21465E 6C41 E6B181 East Asian ideograph 214660 6C40 E6B180 East Asian ideograph 214661 6C42 E6B182 East Asian ideograph 214662 6C5E E6B19E East Asian ideograph 214663 6C57 E6B197 East Asian ideograph 214664 6C5F E6B19F East Asian ideograph 214665 6C59 E6B199 East Asian ideograph 214666 6C60 E6B1A0 East Asian ideograph 214667 6C55 E6B195 East Asian ideograph 214668 6C50 E6B190 East Asian ideograph 214669 6C5D E6B19D East Asian ideograph 21466A 6C9B E6B29B East Asian ideograph 21466B 6C81 E6B281 East Asian ideograph 21466D 6C7A E6B1BA East Asian ideograph 21466E 6C6A E6B1AA East Asian ideograph 21466F 6C8C E6B28C East Asian ideograph 214670 6C90 E6B290 East Asian ideograph 214671 6C72 E6B1B2 East Asian ideograph 214672 6C70 E6B1B0 East Asian ideograph 214673 6C68 E6B1A8 East Asian ideograph 214674 6C96 E6B296 East Asian ideograph 214676 6C89 E6B289 East Asian ideograph (variant of EACC 4B4676) 214677 6C99 E6B299 East Asian ideograph 214678 6C7E E6B1BE East Asian ideograph 214679 6C7D E6B1BD East Asian ideograph 21467A 6C92 E6B292 East Asian ideograph 21467B 6C83 E6B283 East Asian ideograph 21467C 6CB1 E6B2B1 East Asian ideograph 21467E 6CF3 E6B3B3 East Asian ideograph 214721 6CE3 E6B3A3 East Asian ideograph 214722 6CF0 E6B3B0 East Asian ideograph 214723 6CB8 E6B2B8 East Asian ideograph 214724 6CD3 E6B393 East Asian ideograph 214725 6CAB E6B2AB East Asian ideograph 214726 6CE5 E6B3A5 East Asian ideograph 214727 6CBD E6B2BD East Asian ideograph 214728 6CB3 E6B2B3 East Asian ideograph 214729 6CC4 E6B384 East Asian ideograph 21472A 6CD5 E6B395 East Asian ideograph 21472B 6CE2 E6B3A2 East Asian ideograph 21472C 6CBC E6B2BC East Asian ideograph 21472D 6CAE E6B2AE East Asian ideograph 21472E 6CB9 E6B2B9 East Asian ideograph 21472F 6CF1 E6B3B1 East Asian ideograph 214730 6CC1 E6B381 East Asian ideograph 214731 6CBE E6B2BE East Asian ideograph 214732 6CC5 E6B385 East Asian ideograph 214733 6CD7 E6B397 East Asian ideograph 214734 6CBB E6B2BB East Asian ideograph 214735 6CDB E6B39B East Asian ideograph 214736 6CE1 E6B3A1 East Asian ideograph 214737 6CBF E6B2BF East Asian ideograph 214738 6CCA E6B38A East Asian ideograph 214739 6CCC E6B38C East Asian ideograph 21473A 6CC9 E6B389 East Asian ideograph 21473B 6D41 E6B581 East Asian ideograph 21473C 6D0B E6B48B East Asian ideograph 21473D 6D32 E6B4B2 East Asian ideograph 21473E 6D25 E6B4A5 East Asian ideograph 21473F 6D31 E6B4B1 East Asian ideograph 214740 6D2A E6B4AA East Asian ideograph 214741 6D0C E6B48C East Asian ideograph 214742 6D1E E6B49E East Asian ideograph 214743 6D17 E6B497 East Asian ideograph 214744 6D3B E6B4BB East Asian ideograph 214745 6D1B E6B49B East Asian ideograph 214746 6D36 E6B4B6 East Asian ideograph 214747 6D3D E6B4BD East Asian ideograph 214748 6D3E E6B4BE East Asian ideograph 214749 6D6A E6B5AA East Asian ideograph 21474A 6D95 E6B695 East Asian ideograph 21474B 6D78 E6B5B8 East Asian ideograph 21474C 6D66 E6B5A6 East Asian ideograph 21474D 6D59 E6B599 East Asian ideograph 21474E 6D87 E6B687 East Asian ideograph 21474F 6D88 E6B688 East Asian ideograph 214750 6D6C E6B5AC East Asian ideograph 214751 6D93 E6B693 East Asian ideograph 214752 6D89 E6B689 East Asian ideograph 214753 6D6E E6B5AE East Asian ideograph 214754 6D74 E6B5B4 East Asian ideograph 214755 6D5A E6B59A East Asian ideograph 214756 6D69 E6B5A9 East Asian ideograph 214757 6D77 E6B5B7 East Asian ideograph 214758 6DD9 E6B799 East Asian ideograph 214759 6DDA E6B79A East Asian ideograph 21475A 6DF3 E6B7B3 East Asian ideograph 21475B 6DBC E6B6BC East Asian ideograph 21475C 6DE4 E6B7A4 East Asian ideograph 21475D 6DB2 E6B6B2 East Asian ideograph 21475E 6DE1 E6B7A1 East Asian ideograph 21475F 6DD2 E6B792 East Asian ideograph 214760 6DAE E6B6AE East Asian ideograph 214761 6DF8 E6B7B8 East Asian ideograph 214762 6DC7 E6B787 East Asian ideograph 214763 6DCB E6B78B East Asian ideograph 214764 6DC5 E6B785 East Asian ideograph 214765 6DDE E6B79E East Asian ideograph 214766 6DAF E6B6AF East Asian ideograph 214767 6DB5 E6B6B5 East Asian ideograph 214768 6DFA E6B7BA East Asian ideograph 214769 6DF9 E6B7B9 East Asian ideograph 21476A 6DCC E6B78C East Asian ideograph 21476B 6DF7 E6B7B7 East Asian ideograph 21476C 6DB8 E6B6B8 East Asian ideograph 21476D 6DD1 E6B791 East Asian ideograph 21476E 6DF1 E6B7B1 East Asian ideograph 21476F 6DE8 E6B7A8 East Asian ideograph 214770 6DEB E6B7AB East Asian ideograph 214771 6DD8 E6B798 East Asian ideograph 214772 6DFB E6B7BB East Asian ideograph 214773 6DEE E6B7AE East Asian ideograph 214774 6DF5 E6B7B5 East Asian ideograph 214775 6D8E E6B68E East Asian ideograph 214776 6DC6 E6B786 East Asian ideograph 214777 6DEA E6B7AA East Asian ideograph 214778 6DC4 E6B784 East Asian ideograph 214779 6E54 E6B994 East Asian ideograph 21477A 6E21 E6B8A1 East Asian ideograph 21477B 6E38 E6B8B8 East Asian ideograph 21477C 6E32 E6B8B2 East Asian ideograph 21477D 6E67 E6B9A7 East Asian ideograph 21477E 6E20 E6B8A0 East Asian ideograph 214821 6E5B E6B99B East Asian ideograph 214822 6E1A E6B89A East Asian ideograph 214823 6E56 E6B996 East Asian ideograph 214824 6E2F E6B8AF East Asian ideograph 214825 6E6E E6B9AE East Asian ideograph 214826 6E58 E6B998 East Asian ideograph 214827 6E23 E6B8A3 East Asian ideograph 214828 6E24 E6B8A4 East Asian ideograph 214829 6E1B E6B89B East Asian ideograph 21482A 6E25 E6B8A5 East Asian ideograph 21482B 6E4A E6B98A East Asian ideograph 21482C 6E3A E6B8BA East Asian ideograph 21482D 6E6F E6B9AF East Asian ideograph 21482E 6E2D E6B8AD East Asian ideograph 21482F 6E34 E6B8B4 East Asian ideograph 214830 6E2C E6B8AC East Asian ideograph 214831 6E26 E6B8A6 East Asian ideograph 214832 6E4D E6B98D East Asian ideograph 214833 6E3E E6B8BE East Asian ideograph 214834 6E43 E6B983 East Asian ideograph 214835 6E19 E6B899 East Asian ideograph 214836 6E1D E6B89D East Asian ideograph 214837 6ED3 E6BB93 East Asian ideograph 214838 6EB6 E6BAB6 East Asian ideograph 214839 6EC2 E6BB82 East Asian ideograph 21483B 6EAF E6BAAF East Asian ideograph 21483C 6EA2 E6BAA2 East Asian ideograph 21483D 6E9D E6BA9D East Asian ideograph 21483F 6EA5 E6BAA5 East Asian ideograph 214840 6E98 E6BA98 East Asian ideograph 214841 6E90 E6BA90 East Asian ideograph 214842 6EC5 E6BB85 East Asian ideograph 214843 6EC7 E6BB87 East Asian ideograph 214844 6EBC E6BABC East Asian ideograph 214845 6EAB E6BAAB East Asian ideograph 214846 6ED1 E6BB91 East Asian ideograph 214847 6ECB E6BB8B East Asian ideograph 214848 6EC4 E6BB84 East Asian ideograph 214849 6ED4 E6BB94 East Asian ideograph 21484A 6EAA E6BAAA East Asian ideograph 21484B 6E96 E6BA96 East Asian ideograph 21484C 6E9C E6BA9C East Asian ideograph 21484D 6F33 E6BCB3 East Asian ideograph 21484E 6EF4 E6BBB4 East Asian ideograph 21484F 6EEC E6BBAC East Asian ideograph 214850 6EFE E6BBBE East Asian ideograph 214851 6F29 E6BCA9 East Asian ideograph 214852 6F14 E6BC94 East Asian ideograph 214853 6F3E E6BCBE East Asian ideograph 214854 6F2C E6BCAC East Asian ideograph 214855 6F32 E6BCB2 East Asian ideograph 214856 6F0F E6BC8F East Asian ideograph 214857 6F22 E6BCA2 East Asian ideograph (variant of EACC 4B4857) 214858 6EFF E6BBBF East Asian ideograph 214859 6F23 E6BCA3 East Asian ideograph 21485A 6F38 E6BCB8 East Asian ideograph 21485B 6F15 E6BC95 East Asian ideograph 21485C 6F31 E6BCB1 East Asian ideograph 21485D 6F02 E6BC82 East Asian ideograph 21485E 6F06 E6BC86 East Asian ideograph 21485F 6EEF E6BBAF East Asian ideograph 214860 6F2B E6BCAB East Asian ideograph 214861 6F2F E6BCAF East Asian ideograph 214862 6F20 E6BCA0 East Asian ideograph 214863 6F3F E6BCBF East Asian ideograph 214864 6EF2 E6BBB2 East Asian ideograph 214865 6F01 E6BC81 East Asian ideograph 214866 6F11 E6BC91 East Asian ideograph 214867 6ECC E6BB8C East Asian ideograph 214868 6F2A E6BCAA East Asian ideograph 214869 6F7C E6BDBC East Asian ideograph 21486A 6F88 E6BE88 East Asian ideograph 21486B 6F84 E6BE84 East Asian ideograph 21486C 6F51 E6BD91 East Asian ideograph 21486D 6F64 E6BDA4 East Asian ideograph 21486E 6F97 E6BE97 East Asian ideograph 21486F 6F54 E6BD94 East Asian ideograph 214870 6F7A E6BDBA East Asian ideograph 214871 6F86 E6BE86 East Asian ideograph 214872 6F8E E6BE8E East Asian ideograph 214873 6F6D E6BDAD East Asian ideograph 214874 6F5B E6BD9B East Asian ideograph 214875 6F6E E6BDAE East Asian ideograph 214876 6F78 E6BDB8 East Asian ideograph 214877 6F66 E6BDA6 East Asian ideograph 214878 6F70 E6BDB0 East Asian ideograph 214879 6F58 E6BD98 East Asian ideograph 21487A 6FC2 E6BF82 East Asian ideograph 21487B 6FB1 E6BEB1 East Asian ideograph 21487C 6FC3 E6BF83 East Asian ideograph 21487D 6FA7 E6BEA7 East Asian ideograph 21487E 6FA1 E6BEA1 East Asian ideograph 214921 6FA4 E6BEA4 East Asian ideograph 214922 6FC1 E6BF81 East Asian ideograph 214924 6FC0 E6BF80 East Asian ideograph 214925 6FB3 E6BEB3 East Asian ideograph 214926 6FDF E6BF9F East Asian ideograph 214927 6FD8 E6BF98 East Asian ideograph 214928 6FF1 E6BFB1 East Asian ideograph 214929 6FE0 E6BFA0 East Asian ideograph 21492A 6FEF E6BFAF East Asian ideograph 21492B 6FEB E6BFAB East Asian ideograph (variant of EACC 4B492B) 21492C 6FE1 E6BFA1 East Asian ideograph 21492D 6FE4 E6BFA4 East Asian ideograph 21492E 6F80 E6BE80 East Asian ideograph 214931 700B E7808B East Asian ideograph 214932 7009 E78089 East Asian ideograph 214933 7006 E78086 East Asian ideograph 214934 6FFA E6BFBA East Asian ideograph 214935 7011 E78091 East Asian ideograph 214936 6FFE E6BFBE East Asian ideograph 214937 700F E7808F East Asian ideograph 214938 701B E7809B East Asian ideograph 214939 701A E7809A East Asian ideograph 21493A 7028 E780A8 East Asian ideograph 21493B 701D E7809D East Asian ideograph 21493C 7015 E78095 East Asian ideograph 21493D 701F E7809F East Asian ideograph 21493F 703E E780BE East Asian ideograph 214940 704C E7818C East Asian ideograph 214941 7051 E78191 East Asian ideograph 214942 7058 E78198 East Asian ideograph 214943 7063 E781A3 East Asian ideograph 214944 7064 E781A4 East Asian ideograph 214945 706B E781AB East Asian ideograph 214946 7070 E781B0 East Asian ideograph 214947 7076 E781B6 East Asian ideograph 214948 707C E781BC East Asian ideograph 214949 7078 E781B8 East Asian ideograph 21494A 707D E781BD East Asian ideograph 21494B 7095 E78295 East Asian ideograph 21494C 708E E7828E East Asian ideograph 21494D 7092 E78292 East Asian ideograph 21494E 7099 E78299 East Asian ideograph 21494F 708A E7828A East Asian ideograph 214950 70AB E782AB East Asian ideograph 214951 70BA E782BA East Asian ideograph 214952 70AC E782AC East Asian ideograph 214953 70B3 E782B3 East Asian ideograph 214954 70AF E782AF East Asian ideograph 214955 70AD E782AD East Asian ideograph 214956 70AE E782AE East Asian ideograph 214957 70B8 E782B8 East Asian ideograph 214958 70CA E7838A East Asian ideograph 214959 70E4 E783A4 East Asian ideograph 21495A 70D8 E78398 East Asian ideograph 21495B 70C8 E78388 East Asian ideograph 21495C 70D9 E78399 East Asian ideograph 21495D 70CF E7838F East Asian ideograph 21495E 70F9 E783B9 East Asian ideograph 21495F 7109 E78489 East Asian ideograph 214960 710A E7848A East Asian ideograph 214961 70FD E783BD East Asian ideograph 214962 7119 E78499 East Asian ideograph 214963 716E E785AE East Asian ideograph 214964 711A E7849A East Asian ideograph 214965 7136 E784B6 East Asian ideograph 214966 7121 E784A1 East Asian ideograph 214967 7130 E784B0 East Asian ideograph 214968 7126 E784A6 East Asian ideograph 214969 714E E7858E East Asian ideograph 21496A 7149 E78589 East Asian ideograph 21496B 7159 E78599 East Asian ideograph 21496C 7164 E785A4 East Asian ideograph 21496D 7169 E785A9 East Asian ideograph 21496E 715C E7859C East Asian ideograph 21496F 716C E785AC East Asian ideograph 214970 7166 E785A6 East Asian ideograph 214971 7167 E785A7 East Asian ideograph 214972 715E E7859E East Asian ideograph 214973 7165 E785A5 East Asian ideograph 214974 714C E7858C East Asian ideograph 214975 717D E785BD East Asian ideograph 214977 7199 E78699 East Asian ideograph 214978 718A E7868A East Asian ideograph 214979 7184 E78684 East Asian ideograph 21497A 719F E7869F East Asian ideograph 21497B 71A8 E786A8 East Asian ideograph 21497C 71AC E786AC East Asian ideograph 21497D 71B1 E786B1 East Asian ideograph 21497E 71D9 E78799 East Asian ideograph 214A21 71BE E786BE East Asian ideograph 214A22 71C9 E78789 East Asian ideograph 214A23 71D0 E78790 East Asian ideograph 214A24 71C8 E78788 East Asian ideograph 214A25 71DC E7879C East Asian ideograph 214A26 71D2 E78792 East Asian ideograph 214A27 71B9 E786B9 East Asian ideograph 214A28 71D5 E78795 East Asian ideograph 214A29 71CE E7878E East Asian ideograph 214A2A 71C3 E78783 East Asian ideograph 214A2B 71C4 E78784 East Asian ideograph 214A2C 71EE E787AE East Asian ideograph 214A2D 71E7 E787A7 East Asian ideograph 214A2E 71DF E7879F East Asian ideograph 214A2F 71E5 E787A5 East Asian ideograph 214A30 71ED E787AD East Asian ideograph 214A31 71E6 E787A6 East Asian ideograph 214A32 71EC E787AC East Asian ideograph 214A33 71F4 E787B4 East Asian ideograph 214A34 71FB E787BB East Asian ideograph 214A35 7206 E78886 East Asian ideograph 214A36 720D E7888D East Asian ideograph 214A37 7210 E78890 East Asian ideograph 214A38 721B E7889B East Asian ideograph 214A39 7228 E788A8 East Asian ideograph 214A3A 722A E788AA East Asian ideograph 214A3B 722D E788AD East Asian ideograph 214A3C 722C E788AC East Asian ideograph 214A3D 7230 E788B0 East Asian ideograph 214A3E 7235 E788B5 East Asian ideograph (variant of EACC 4B4A3E) 214A3F 7236 E788B6 East Asian ideograph 214A40 7238 E788B8 East Asian ideograph 214A41 7239 E788B9 East Asian ideograph 214A42 723A E788BA East Asian ideograph 214A43 723B E788BB East Asian ideograph 214A44 723D E788BD East Asian ideograph 214A45 723E E788BE East Asian ideograph 214A46 7246 E78986 East Asian ideograph 214A47 7247 E78987 East Asian ideograph 214A48 7248 E78988 East Asian ideograph 214A49 724C E7898C East Asian ideograph 214A4A 7252 E78992 East Asian ideograph 214A4B 7256 E78996 East Asian ideograph 214A4C 7258 E78998 East Asian ideograph 214A4D 7259 E78999 East Asian ideograph 214A4E 725B E7899B East Asian ideograph 214A4F 725F E7899F East Asian ideograph 214A50 725D E7899D East Asian ideograph 214A51 7262 E789A2 East Asian ideograph 214A52 7261 E789A1 East Asian ideograph 214A53 7260 E789A0 East Asian ideograph 214A54 7267 E789A7 East Asian ideograph 214A55 7269 E789A9 East Asian ideograph 214A56 726F E789AF East Asian ideograph 214A57 7272 E789B2 East Asian ideograph 214A58 7274 E789B4 East Asian ideograph 214A59 7279 E789B9 East Asian ideograph 214A5A 727D E789BD East Asian ideograph 214A5B 7281 E78A81 East Asian ideograph 214A5C 7280 E78A80 East Asian ideograph 214A5D 7284 E78A84 East Asian ideograph 214A5E 7296 E78A96 East Asian ideograph 214A5F 7292 E78A92 East Asian ideograph 214A60 729B E78A9B East Asian ideograph 214A61 72A2 E78AA2 East Asian ideograph 214A62 72A7 E78AA7 East Asian ideograph 214A63 72AC E78AAC East Asian ideograph 214A64 72AF E78AAF East Asian ideograph 214A65 72C4 E78B84 East Asian ideograph 214A66 72C2 E78B82 East Asian ideograph 214A67 72D9 E78B99 East Asian ideograph 214A68 72C0 E78B80 East Asian ideograph 214A69 72CE E78B8E East Asian ideograph 214A6A 72D7 E78B97 East Asian ideograph 214A6B 72D0 E78B90 East Asian ideograph 214A6C 72E1 E78BA1 East Asian ideograph 214A6D 72E9 E78BA9 East Asian ideograph 214A6E 72E0 E78BA0 East Asian ideograph 214A6F 72FC E78BBC East Asian ideograph 214A70 72F9 E78BB9 East Asian ideograph 214A72 72FD E78BBD East Asian ideograph 214A73 72F7 E78BB7 East Asian ideograph 214A74 731C E78C9C East Asian ideograph 214A75 731B E78C9B East Asian ideograph 214A76 7313 E78C93 East Asian ideograph 214A77 7316 E78C96 East Asian ideograph 214A78 7319 E78C99 East Asian ideograph 214A79 7336 E78CB6 East Asian ideograph 214A7A 7337 E78CB7 East Asian ideograph 214A7B 7329 E78CA9 East Asian ideograph 214A7C 7325 E78CA5 East Asian ideograph 214A7D 7334 E78CB4 East Asian ideograph 214A7E 7344 E78D84 East Asian ideograph 214B21 733F E78CBF East Asian ideograph 214B22 733E E78CBE East Asian ideograph 214B23 7345 E78D85 East Asian ideograph 214B24 7350 E78D90 East Asian ideograph 214B26 7357 E78D97 East Asian ideograph 214B27 7368 E78DA8 East Asian ideograph 214B28 7370 E78DB0 East Asian ideograph 214B29 7372 E78DB2 East Asian ideograph 214B2A 7377 E78DB7 East Asian ideograph 214B2B 7378 E78DB8 East Asian ideograph 214B2C 7375 E78DB5 East Asian ideograph 214B2D 737A E78DBA East Asian ideograph 214B2E 737B E78DBB East Asian ideograph 214B2F 7380 E78E80 East Asian ideograph 214B30 7384 E78E84 East Asian ideograph 214B31 7387 E78E87 East Asian ideograph 214B32 7389 E78E89 East Asian ideograph 214B33 738B E78E8B East Asian ideograph 214B34 7396 E78E96 East Asian ideograph 214B35 739F E78E9F East Asian ideograph 214B36 73A8 E78EA8 East Asian ideograph 214B37 73A9 E78EA9 East Asian ideograph 214B38 73AB E78EAB East Asian ideograph 214B39 73BB E78EBB East Asian ideograph 214B3A 73CA E78F8A East Asian ideograph 214B3B 73B7 E78EB7 East Asian ideograph 214B3C 73C0 E78F80 East Asian ideograph 214B3E 73B2 E78EB2 East Asian ideograph 214B3F 73CD E78F8D East Asian ideograph 214B40 73ED E78FAD East Asian ideograph 214B41 73EE E78FAE East Asian ideograph 214B42 73E0 E78FA0 East Asian ideograph 214B43 7405 E79085 East Asian ideograph 214B44 7409 E79089 East Asian ideograph 214B45 7403 E79083 East Asian ideograph 214B46 740A E7908A East Asian ideograph 214B47 73FE E78FBE East Asian ideograph 214B48 7406 E79086 East Asian ideograph 214B49 740D E7908D East Asian ideograph 214B4A 743A E790BA East Asian ideograph 214B4B 7435 E790B5 East Asian ideograph 214B4C 7436 E790B6 East Asian ideograph 214B4D 7434 E790B4 East Asian ideograph 214B4E 742A E790AA East Asian ideograph 214B4F 7433 E790B3 East Asian ideograph 214B50 7422 E790A2 East Asian ideograph 214B51 7425 E790A5 East Asian ideograph 214B53 7455 E79195 East Asian ideograph 214B54 745F E7919F East Asian ideograph 214B55 745A E7919A East Asian ideograph 214B56 7441 E79181 East Asian ideograph 214B57 743F E790BF East Asian ideograph 214B58 745B E7919B East Asian ideograph 214B59 745E E7919E East Asian ideograph 214B5A 745C E7919C East Asian ideograph 214B5B 7459 E79199 East Asian ideograph 214B5C 7483 E79283 East Asian ideograph 214B5D 7469 E791A9 East Asian ideograph 214B5E 746A E791AA East Asian ideograph 214B5F 7463 E791A3 East Asian ideograph 214B60 7464 E791A4 East Asian ideograph 214B61 7470 E791B0 East Asian ideograph 214B62 748B E7928B East Asian ideograph 214B63 749C E7929C East Asian ideograph (variant of EACC 4B4B63) 214B64 74A3 E792A3 East Asian ideograph 214B65 74A7 E792A7 East Asian ideograph 214B66 74A9 E792A9 East Asian ideograph 214B67 74B0 E792B0 East Asian ideograph 214B68 74A6 E792A6 East Asian ideograph 214B69 74BD E792BD East Asian ideograph 214B6A 74CA E7938A East Asian ideograph 214B6B 74CF E7938F East Asian ideograph 214B6C 74DC E7939C East Asian ideograph 214B6D 74E0 E793A0 East Asian ideograph 214B6E 74E2 E793A2 East Asian ideograph 214B6F 74E3 E793A3 East Asian ideograph 214B70 74E6 E793A6 East Asian ideograph 214B71 74F6 E793B6 East Asian ideograph 214B72 74F7 E793B7 East Asian ideograph 214B73 7504 E79484 East Asian ideograph 214B74 750C E7948C East Asian ideograph 214B75 7515 E79495 East Asian ideograph 214B76 7518 E79498 East Asian ideograph 214B77 751A E7949A East Asian ideograph 214B78 751C E7949C East Asian ideograph 214B79 751F E7949F East Asian ideograph 214B7A 7522 E794A2 East Asian ideograph 214B7B 7526 E794A6 East Asian ideograph 214B7C 7525 E794A5 East Asian ideograph 214B7D 7528 E794A8 East Asian ideograph 214B7E 7529 E794A9 East Asian ideograph 214C21 752C E794AC East Asian ideograph 214C22 752B E794AB East Asian ideograph 214C23 752D E794AD East Asian ideograph 214C24 7530 E794B0 East Asian ideograph 214C25 7532 E794B2 East Asian ideograph 214C26 7531 E794B1 East Asian ideograph 214C27 7533 E794B3 East Asian ideograph 214C28 7537 E794B7 East Asian ideograph 214C29 7538 E794B8 East Asian ideograph 214C2A 753D E794BD East Asian ideograph 214C2B 754F E7958F East Asian ideograph 214C2C 754C E7958C East Asian ideograph 214C2D 755D E7959D East Asian ideograph 214C2E 755C E7959C East Asian ideograph 214C2F 7554 E79594 East Asian ideograph 214C30 755A E7959A East Asian ideograph 214C31 7559 E79599 East Asian ideograph 214C32 7566 E795A6 East Asian ideograph 214C33 7562 E795A2 East Asian ideograph 214C34 7570 E795B0 East Asian ideograph 214C35 7565 E795A5 East Asian ideograph 214C36 756B E795AB East Asian ideograph 214C37 756A E795AA East Asian ideograph 214C38 7578 E795B8 East Asian ideograph 214C39 7576 E795B6 East Asian ideograph 214C3A 7586 E79686 East Asian ideograph 214C3B 7587 E79687 East Asian ideograph 214C3C 758A E7968A East Asian ideograph 214C3E 758F E7968F East Asian ideograph 214C3F 7591 E79691 East Asian ideograph 214C40 759D E7969D East Asian ideograph 214C41 7599 E79699 East Asian ideograph 214C42 759A E7969A East Asian ideograph 214C43 75A4 E796A4 East Asian ideograph 214C44 75AB E796AB East Asian ideograph 214C45 75A5 E796A5 East Asian ideograph 214C46 75C7 E79787 East Asian ideograph 214C47 75C5 E79785 East Asian ideograph 214C48 75B3 E796B3 East Asian ideograph 214C49 75B2 E796B2 East Asian ideograph 214C4A 75BD E796BD East Asian ideograph 214C4B 75BE E796BE East Asian ideograph 214C4C 75BC E796BC East Asian ideograph 214C4D 75B9 E796B9 East Asian ideograph 214C4E 75D5 E79795 East Asian ideograph 214C4F 75D4 E79794 East Asian ideograph 214C50 75B5 E796B5 East Asian ideograph 214C51 75CA E7978A East Asian ideograph (variant of EACC 4B4C51) 214C52 75DB E7979B East Asian ideograph 214C53 75E3 E797A3 East Asian ideograph 214C54 75D8 E79798 East Asian ideograph 214C55 75DE E7979E East Asian ideograph 214C56 75D9 E79799 East Asian ideograph 214C57 75E2 E797A2 East Asian ideograph 214C58 7601 E79881 East Asian ideograph 214C59 7600 E79880 East Asian ideograph 214C5A 75F0 E797B0 East Asian ideograph 214C5B 75F2 E797B2 East Asian ideograph 214C5C 75F1 E797B1 East Asian ideograph 214C5D 75F4 E797B4 East Asian ideograph 214C5E 75FF E797BF East Asian ideograph 214C5F 75FA E797BA East Asian ideograph 214C60 760D E7988D East Asian ideograph 214C61 7627 E798A7 East Asian ideograph 214C62 7613 E79893 East Asian ideograph 214C63 760B E7988B East Asian ideograph 214C65 7620 E798A0 East Asian ideograph 214C66 7629 E798A9 East Asian ideograph 214C67 761F E7989F East Asian ideograph 214C68 7624 E798A4 East Asian ideograph 214C69 7626 E798A6 East Asian ideograph 214C6A 7621 E798A1 East Asian ideograph 214C6B 7634 E798B4 East Asian ideograph 214C6C 7638 E798B8 East Asian ideograph 214C6D 7646 E79986 East Asian ideograph 214C6E 7642 E79982 East Asian ideograph 214C6F 764C E7998C East Asian ideograph 214C70 7656 E79996 East Asian ideograph 214C71 7658 E79998 East Asian ideograph 214C73 7662 E799A2 East Asian ideograph 214C74 7665 E799A5 East Asian ideograph 214C75 7669 E799A9 East Asian ideograph 214C76 766E E799AE East Asian ideograph 214C77 766C E799AC East Asian ideograph 214C78 7671 E799B1 East Asian ideograph 214C79 7672 E799B2 East Asian ideograph (variant of EACC 4B4C79) 214C7A 7678 E799B8 East Asian ideograph 214C7B 767C E799BC East Asian ideograph 214C7C 767B E799BB East Asian ideograph 214C7D 767D E799BD East Asian ideograph 214C7E 767E E799BE East Asian ideograph 214D21 7682 E79A82 East Asian ideograph 214D22 7684 E79A84 East Asian ideograph 214D23 7687 E79A87 East Asian ideograph 214D24 7686 E79A86 East Asian ideograph 214D26 768E E79A8E East Asian ideograph 214D27 7696 E79A96 East Asian ideograph 214D28 7693 E79A93 East Asian ideograph 214D29 769A E79A9A East Asian ideograph 214D2A 76AE E79AAE East Asian ideograph 214D2B 76B0 E79AB0 East Asian ideograph 214D2C 76B4 E79AB4 East Asian ideograph 214D2D 76BA E79ABA East Asian ideograph 214D2E 76BF E79ABF East Asian ideograph 214D2F 76C2 E79B82 East Asian ideograph 214D31 76C8 E79B88 East Asian ideograph 214D32 76C6 E79B86 East Asian ideograph 214D33 76CA E79B8A East Asian ideograph 214D34 76CD E79B8D East Asian ideograph 214D35 76CE E79B8E East Asian ideograph 214D36 76D4 E79B94 East Asian ideograph 214D37 76D2 E79B92 East Asian ideograph 214D38 76DC E79B9C East Asian ideograph 214D39 76DB E79B9B East Asian ideograph 214D3A 76DE E79B9E East Asian ideograph 214D3B 76DF E79B9F East Asian ideograph 214D3C 76E1 E79BA1 East Asian ideograph 214D3D 76E3 E79BA3 East Asian ideograph 214D3E 76E4 E79BA4 East Asian ideograph 214D3F 76E7 E79BA7 East Asian ideograph 214D40 76E5 E79BA5 East Asian ideograph 214D41 76EA E79BAA East Asian ideograph 214D42 76EE E79BAE East Asian ideograph 214D43 76EF E79BAF East Asian ideograph 214D44 76F2 E79BB2 East Asian ideograph 214D45 76F4 E79BB4 East Asian ideograph 214D46 7709 E79C89 East Asian ideograph 214D47 76F9 E79BB9 East Asian ideograph 214D48 76F8 E79BB8 East Asian ideograph 214D49 7701 E79C81 East Asian ideograph 214D4A 770B E79C8B East Asian ideograph 214D4B 76FC E79BBC East Asian ideograph 214D4C 76FE E79BBE East Asian ideograph 214D4D 7729 E79CA9 East Asian ideograph 214D4E 7720 E79CA0 East Asian ideograph 214D4F 771E E79C9E East Asian ideograph 214D50 7728 E79CA8 East Asian ideograph 214D51 7737 E79CB7 East Asian ideograph 214D52 773C E79CBC East Asian ideograph 214D53 7736 E79CB6 East Asian ideograph 214D54 7738 E79CB8 East Asian ideograph 214D55 773A E79CBA East Asian ideograph 214D56 773E E79CBE East Asian ideograph 214D57 774F E79D8F East Asian ideograph 214D58 776B E79DAB East Asian ideograph 214D59 775B E79D9B East Asian ideograph 214D5A 776A E79DAA East Asian ideograph 214D5B 7766 E79DA6 East Asian ideograph 214D5C 7779 E79DB9 East Asian ideograph 214D5D 775E E79D9E East Asian ideograph 214D5E 7763 E79DA3 East Asian ideograph 214D5F 775C E79D9C East Asian ideograph 214D60 776C E79DAC East Asian ideograph 214D61 7768 E79DA8 East Asian ideograph 214D62 7765 E79DA5 East Asian ideograph 214D63 777D E79DBD East Asian ideograph 214D64 7771 E79DB1 East Asian ideograph 214D65 777F E79DBF East Asian ideograph 214D66 7784 E79E84 East Asian ideograph 214D67 7761 E79DA1 East Asian ideograph 214D68 7787 E79E87 East Asian ideograph 214D69 778E E79E8E East Asian ideograph 214D6A 778C E79E8C East Asian ideograph 214D6B 7791 E79E91 East Asian ideograph 214D6C 779F E79E9F East Asian ideograph 214D6D 779E E79E9E East Asian ideograph 214D6E 77A0 E79EA0 East Asian ideograph 214D6F 77A5 E79EA5 East Asian ideograph 214D70 77B3 E79EB3 East Asian ideograph 214D71 77AA E79EAA East Asian ideograph 214D72 77B0 E79EB0 East Asian ideograph 214D73 77AD E79EAD East Asian ideograph 214D74 77AC E79EAC East Asian ideograph 214D75 77A7 E79EA7 East Asian ideograph 214D76 77BD E79EBD East Asian ideograph 214D77 77BF E79EBF East Asian ideograph 214D78 77BB E79EBB East Asian ideograph 214D7A 77D3 E79F93 East Asian ideograph 214D7B 77D7 E79F97 East Asian ideograph 214D7C 77DA E79F9A East Asian ideograph 214D7D 77DB E79F9B East Asian ideograph 214D7E 77DC E79F9C East Asian ideograph 214E21 77E2 E79FA2 East Asian ideograph 214E22 77E3 E79FA3 East Asian ideograph 214E23 77E5 E79FA5 East Asian ideograph 214E24 77E9 E79FA9 East Asian ideograph 214E25 77ED E79FAD East Asian ideograph 214E26 77EE E79FAE East Asian ideograph 214E27 77EF E79FAF East Asian ideograph 214E28 77F3 E79FB3 East Asian ideograph 214E29 77FD E79FBD East Asian ideograph 214E2A 7802 E7A082 East Asian ideograph 214E2B 780D E7A08D East Asian ideograph 214E2C 780C E7A08C East Asian ideograph 214E2D 65AB E696AB East Asian ideograph 214E2E 7830 E7A0B0 East Asian ideograph 214E2F 781D E7A09D East Asian ideograph 214E30 7834 E7A0B4 East Asian ideograph 214E31 7838 E7A0B8 East Asian ideograph 214E32 7837 E7A0B7 East Asian ideograph 214E33 7827 E7A0A7 East Asian ideograph 214E34 782D E7A0AD East Asian ideograph 214E35 7825 E7A0A5 East Asian ideograph 214E36 786B E7A1AB East Asian ideograph 214E37 784F E7A18F East Asian ideograph 214E38 7843 E7A183 East Asian ideograph 214E39 786C E7A1AC East Asian ideograph 214E3A 785D E7A19D East Asian ideograph 214E3B 786F E7A1AF East Asian ideograph 214E3C 78B0 E7A2B0 East Asian ideograph 214E3D 7897 E7A297 East Asian ideograph 214E3E 788E E7A28E East Asian ideograph 214E3F 7898 E7A298 East Asian ideograph 214E40 7889 E7A289 East Asian ideograph 214E41 7891 E7A291 East Asian ideograph 214E42 787C E7A1BC East Asian ideograph 214E43 788C E7A28C East Asian ideograph 214E44 78A7 E7A2A7 East Asian ideograph 214E45 78A9 E7A2A9 East Asian ideograph 214E46 789F E7A29F East Asian ideograph 214E47 78B3 E7A2B3 East Asian ideograph 214E48 78CB E7A38B East Asian ideograph 214E49 78BA E7A2BA East Asian ideograph 214E4A 78C1 E7A381 East Asian ideograph 214E4B 78C5 E7A385 East Asian ideograph 214E4C 78BC E7A2BC East Asian ideograph 214E4D 78D5 E7A395 East Asian ideograph 214E4E 78BE E7A2BE East Asian ideograph 214E4F 78CA E7A38A East Asian ideograph 214E50 78D0 E7A390 East Asian ideograph 214E51 78E8 E7A3A8 East Asian ideograph 214E52 78EC E7A3AC East Asian ideograph 214E53 78DA E7A39A East Asian ideograph 214E54 78F7 E7A3B7 East Asian ideograph 214E55 78F4 E7A3B4 East Asian ideograph 214E56 78FA E7A3BA East Asian ideograph (variant of EACC 4B4E56) 214E57 7901 E7A481 East Asian ideograph 214E58 78EF E7A3AF East Asian ideograph 214E59 790E E7A48E East Asian ideograph 214E5A 7919 E7A499 East Asian ideograph 214E5B 7926 E7A4A6 East Asian ideograph 214E5C 792C E7A4AC East Asian ideograph 214E5D 792A E7A4AA East Asian ideograph 214E5E 792B E7A4AB East Asian ideograph 214E5F 793A E7A4BA East Asian ideograph 214E60 7940 E7A580 East Asian ideograph 214E61 793E E7A4BE East Asian ideograph 214E62 7941 E7A581 East Asian ideograph 214E63 7945 E7A585 East Asian ideograph 214E64 7949 E7A589 East Asian ideograph 214E65 7948 E7A588 East Asian ideograph 214E66 7947 E7A587 East Asian ideograph 214E67 7955 E7A595 East Asian ideograph 214E68 7960 E7A5A0 East Asian ideograph 214E69 7950 E7A590 East Asian ideograph 214E6A 7956 E7A596 East Asian ideograph 214E6B 795E E7A59E East Asian ideograph 214E6C 795D E7A59D East Asian ideograph 214E6D 795F E7A59F East Asian ideograph 214E6E 795A E7A59A East Asian ideograph 214E6F 7957 E7A597 East Asian ideograph 214E70 7965 E7A5A5 East Asian ideograph 214E71 7968 E7A5A8 East Asian ideograph 214E72 796D E7A5AD East Asian ideograph 214E73 797A E7A5BA East Asian ideograph 214E74 7981 E7A681 East Asian ideograph 214E75 797F E7A5BF East Asian ideograph 214E76 798F E7A68F East Asian ideograph 214E77 798D E7A68D East Asian ideograph 214E78 798E E7A68E East Asian ideograph 214E79 79A6 E7A6A6 East Asian ideograph 214E7A 79A7 E7A6A7 East Asian ideograph 214E7B 79AA E7A6AA East Asian ideograph 214E7C 79AE E7A6AE East Asian ideograph 214E7D 79B1 E7A6B1 East Asian ideograph 214E7E 79B9 E7A6B9 East Asian ideograph 214F21 79BD E7A6BD East Asian ideograph 214F22 842C E890AC East Asian ideograph 214F23 79BE E7A6BE East Asian ideograph 214F24 79C0 E7A780 East Asian ideograph 214F25 79C1 E7A781 East Asian ideograph 214F26 79BF E7A6BF East Asian ideograph 214F27 79C9 E7A789 East Asian ideograph 214F28 79D1 E7A791 East Asian ideograph 214F29 79CB E7A78B East Asian ideograph 214F2A 79D2 E7A792 East Asian ideograph 214F2B 79E4 E7A7A4 East Asian ideograph 214F2C 79E6 E7A7A6 East Asian ideograph 214F2D 79E3 E7A7A3 East Asian ideograph 214F2E 79DF E7A79F East Asian ideograph 214F2F 79E7 E7A7A7 East Asian ideograph 214F30 79E9 E7A7A9 East Asian ideograph 214F31 79FB E7A7BB East Asian ideograph 214F32 7A05 E7A885 East Asian ideograph 214F33 7A0D E7A88D East Asian ideograph 214F34 7A08 E7A888 East Asian ideograph 214F35 7A0B E7A88B East Asian ideograph 214F36 7A00 E7A880 East Asian ideograph 214F37 7A1F E7A89F East Asian ideograph 214F39 7A20 E7A8A0 East Asian ideograph 214F3A 7A1A E7A89A East Asian ideograph 214F3B 7A14 E7A894 East Asian ideograph 214F3C 7A31 E7A8B1 East Asian ideograph 214F3D 7A2E E7A8AE East Asian ideograph 214F3E 7A3F E7A8BF East Asian ideograph 214F3F 7A3C E7A8BC East Asian ideograph 214F40 7A40 E7A980 East Asian ideograph 214F41 7A3D E7A8BD East Asian ideograph 214F42 7A37 E7A8B7 East Asian ideograph 214F43 7A3B E7A8BB East Asian ideograph 214F44 7A4D E7A98D East Asian ideograph 214F45 7A4E E7A98E East Asian ideograph 214F46 7A4C E7A98C East Asian ideograph 214F47 7A46 E7A986 East Asian ideograph 214F48 7A57 E7A997 East Asian ideograph 214F49 7A61 E7A9A1 East Asian ideograph 214F4A 7A62 E7A9A2 East Asian ideograph 214F4B 7A6B E7A9AB East Asian ideograph 214F4C 7A69 E7A9A9 East Asian ideograph 214F4D 7A74 E7A9B4 East Asian ideograph 214F4E 7A76 E7A9B6 East Asian ideograph 214F4F 7A79 E7A9B9 East Asian ideograph 214F50 7A7A E7A9BA East Asian ideograph 214F51 7A7F E7A9BF East Asian ideograph 214F52 7A81 E7AA81 East Asian ideograph 214F53 7A84 E7AA84 East Asian ideograph 214F54 7A88 E7AA88 East Asian ideograph 214F55 7A92 E7AA92 East Asian ideograph 214F56 7A95 E7AA95 East Asian ideograph 214F57 7A98 E7AA98 East Asian ideograph 214F58 7A96 E7AA96 East Asian ideograph 214F59 7A97 E7AA97 East Asian ideograph 214F5A 7A9F E7AA9F East Asian ideograph 214F5B 7AA0 E7AAA0 East Asian ideograph 214F5C 7AAA E7AAAA East Asian ideograph 214F5D 7AA9 E7AAA9 East Asian ideograph 214F5E 7AAF E7AAAF East Asian ideograph 214F5F 7AAE E7AAAE East Asian ideograph 214F60 7ABA E7AABA East Asian ideograph 214F61 7AC5 E7AB85 East Asian ideograph 214F62 7AC4 E7AB84 East Asian ideograph 214F63 7AC7 E7AB87 East Asian ideograph 214F64 7ACA E7AB8A East Asian ideograph 214F65 7ACB E7AB8B East Asian ideograph 214F66 7AD9 E7AB99 East Asian ideograph 214F67 7AE5 E7ABA5 East Asian ideograph 214F68 7AE3 E7ABA3 East Asian ideograph 214F69 7AED E7ABAD East Asian ideograph 214F6A 7AEF E7ABAF East Asian ideograph 214F6B 7AF6 E7ABB6 East Asian ideograph 214F6C 7AF9 E7ABB9 East Asian ideograph 214F6D 7AFA E7ABBA East Asian ideograph 214F6E 7AFF E7ABBF East Asian ideograph 214F6F 7AFD E7ABBD East Asian ideograph 214F70 7B06 E7AC86 East Asian ideograph 214F71 7B11 E7AC91 East Asian ideograph 214F72 7B20 E7ACA0 East Asian ideograph 214F73 7B2C E7ACAC East Asian ideograph 214F74 7B28 E7ACA8 East Asian ideograph 214F75 7B1B E7AC9B East Asian ideograph 214F76 7B1E E7AC9E East Asian ideograph 214F77 7B19 E7AC99 East Asian ideograph 214F78 7B26 E7ACA6 East Asian ideograph 214F79 7B46 E7AD86 East Asian ideograph 214F7A 7B49 E7AD89 East Asian ideograph 214F7B 7B50 E7AD90 East Asian ideograph 214F7C 7B56 E7AD96 East Asian ideograph 214F7D 7B52 E7AD92 East Asian ideograph 214F7E 7B4B E7AD8B East Asian ideograph 215021 7B4D E7AD8D East Asian ideograph 215022 7B4F E7AD8F East Asian ideograph 215023 7B54 E7AD94 East Asian ideograph 215024 7B60 E7ADA0 East Asian ideograph 215025 7B77 E7ADB7 East Asian ideograph 215026 7B75 E7ADB5 East Asian ideograph 215027 7BA1 E7AEA1 East Asian ideograph 215028 7B94 E7AE94 East Asian ideograph 215029 7B95 E7AE95 East Asian ideograph 21502A 7B9D E7AE9D East Asian ideograph 21502B 7B8B E7AE8B East Asian ideograph 21502C 7B97 E7AE97 East Asian ideograph 21502D 7B8F E7AE8F East Asian ideograph 21502E 7BC7 E7AF87 East Asian ideograph 21502F 7BAD E7AEAD East Asian ideograph 215030 7BC4 E7AF84 East Asian ideograph 215031 7BB1 E7AEB1 East Asian ideograph 215032 7BB4 E7AEB4 East Asian ideograph 215033 7BC0 E7AF80 East Asian ideograph 215034 7BC6 E7AF86 East Asian ideograph 215035 7BC1 E7AF81 East Asian ideograph 215036 7C11 E7B091 East Asian ideograph 215037 7BD9 E7AF99 East Asian ideograph 215038 7BDB E7AF9B East Asian ideograph 215039 7BE4 E7AFA4 East Asian ideograph 21503A 7BC9 E7AF89 East Asian ideograph 21503B 7BE1 E7AFA1 East Asian ideograph 21503C 7BE9 E7AFA9 East Asian ideograph 21503D 7C07 E7B087 East Asian ideograph 21503E 7C0D E7B08D East Asian ideograph 21503F 7BFE E7AFBE East Asian ideograph 215040 7BF7 E7AFB7 East Asian ideograph 215041 7C21 E7B0A1 East Asian ideograph 215042 7C2B E7B0AB East Asian ideograph 215043 7C2A E7B0AA East Asian ideograph 215044 7C27 E7B0A7 East Asian ideograph 215045 7C1E E7B09E East Asian ideograph 215046 7C23 E7B0A3 East Asian ideograph 215047 7C3F E7B0BF East Asian ideograph 215048 7C3E E7B0BE East Asian ideograph 215049 7C38 E7B0B8 East Asian ideograph 21504A 7C37 E7B0B7 East Asian ideograph 21504B 7C3D E7B0BD East Asian ideograph 21504C 7C43 E7B183 East Asian ideograph 21504D 7C4C E7B18C East Asian ideograph 21504E 7C4D E7B18D East Asian ideograph 21504F 7C50 E7B190 East Asian ideograph 215050 7C60 E7B1A0 East Asian ideograph 215051 7C5F E7B19F East Asian ideograph 215052 7C64 E7B1A4 East Asian ideograph 215053 7C6C E7B1AC East Asian ideograph 215054 7C6E E7B1AE East Asian ideograph 215055 7C72 E7B1B2 East Asian ideograph 215056 7C73 E7B1B3 East Asian ideograph 215057 7C89 E7B289 East Asian ideograph 215058 7C92 E7B292 East Asian ideograph 215059 7C97 E7B297 East Asian ideograph 21505A 7C9F E7B29F East Asian ideograph 21505B 7CA5 E7B2A5 East Asian ideograph 21505C 7CA4 E7B2A4 East Asian ideograph 21505D 7CB1 E7B2B1 East Asian ideograph 21505E 7CB3 E7B2B3 East Asian ideograph 21505F 7CBD E7B2BD East Asian ideograph 215060 7CB9 E7B2B9 East Asian ideograph 215061 7CBE E7B2BE East Asian ideograph (variant of EACC 4B5061) 215062 7CCA E7B38A East Asian ideograph 215063 7CD6 E7B396 East Asian ideograph 215064 7CD5 E7B395 East Asian ideograph 215065 7CE0 E7B3A0 East Asian ideograph 215066 7CDC E7B39C East Asian ideograph 215067 7CDF E7B39F East Asian ideograph 215068 7CDE E7B39E East Asian ideograph 215069 7CE2 E7B3A2 East Asian ideograph 21506A 7CD9 E7B399 East Asian ideograph 21506B 7CE7 E7B3A7 East Asian ideograph 21506C 7CEF E7B3AF East Asian ideograph 21506E 7CFB E7B3BB East Asian ideograph 21506F 7CFE E7B3BE East Asian ideograph 215070 7D00 E7B480 East Asian ideograph 215071 7D02 E7B482 East Asian ideograph 215072 7D05 E7B485 East Asian ideograph 215073 7D09 E7B489 East Asian ideograph 215074 7D04 E7B484 East Asian ideograph 215075 7D07 E7B487 East Asian ideograph 215076 7D21 E7B4A1 East Asian ideograph 215077 7D0B E7B48B East Asian ideograph 215078 7D0A E7B48A East Asian ideograph 215079 7D20 E7B4A0 East Asian ideograph 21507A 7D1C E7B49C East Asian ideograph 21507B 7D22 E7B4A2 East Asian ideograph 21507C 7D15 E7B495 East Asian ideograph 21507D 7D14 E7B494 East Asian ideograph 21507E 7D10 E7B490 East Asian ideograph 215121 7D17 E7B497 East Asian ideograph 215122 7D0D E7B48D East Asian ideograph (variant of EACC 455122) 215123 7D1A E7B49A East Asian ideograph 215124 7D19 E7B499 East Asian ideograph 215125 7D1B E7B49B East Asian ideograph 215126 7D46 E7B586 East Asian ideograph 215128 7D3C E7B4BC East Asian ideograph 215129 7D2E E7B4AE East Asian ideograph 21512A 7D39 E7B4B9 East Asian ideograph 21512B 7D44 E7B584 East Asian ideograph 21512C 7D30 E7B4B0 East Asian ideograph 21512D 7D33 E7B4B3 East Asian ideograph 21512E 7D2F E7B4AF East Asian ideograph 21512F 7D40 E7B580 East Asian ideograph 215130 7D42 E7B582 East Asian ideograph 215131 7D71 E7B5B1 East Asian ideograph 215132 7D5E E7B59E East Asian ideograph 215133 7D68 E7B5A8 East Asian ideograph 215134 7D50 E7B590 East Asian ideograph 215135 7D2B E7B4AB East Asian ideograph 215136 7D62 E7B5A2 East Asian ideograph 215137 7D76 E7B5B6 East Asian ideograph 215138 7D61 E7B5A1 East Asian ideograph 215139 7D66 E7B5A6 East Asian ideograph 21513A 7D6E E7B5AE East Asian ideograph 21513B 7D72 E7B5B2 East Asian ideograph 21513C 7D93 E7B693 East Asian ideograph 21513D 7D91 E7B691 East Asian ideograph 21513E 7D79 E7B5B9 East Asian ideograph 21513F 7D8F E7B68F East Asian ideograph 215140 7D81 E7B681 East Asian ideograph 215141 7D9C E7B69C East Asian ideograph 215142 7DBB E7B6BB East Asian ideograph 215143 7DB0 E7B6B0 East Asian ideograph 215144 7DCA E7B78A East Asian ideograph 215145 7DBE E7B6BE East Asian ideograph 215146 7DB4 E7B6B4 East Asian ideograph 215147 7DBA E7B6BA East Asian ideograph 215148 7DB2 E7B6B2 East Asian ideograph 215149 7DB1 E7B6B1 East Asian ideograph 21514A 7DBD E7B6BD East Asian ideograph 21514B 7DB5 E7B6B5 East Asian ideograph 21514C 7DA0 E7B6A0 East Asian ideograph 21514D 7DA2 E7B6A2 East Asian ideograph 21514E 7DAD E7B6AD East Asian ideograph 21514F 7DBF E7B6BF East Asian ideograph 215150 7DB8 E7B6B8 East Asian ideograph 215151 7DC7 E7B787 East Asian ideograph 215152 7DE0 E7B7A0 East Asian ideograph 215153 7DEF E7B7AF East Asian ideograph 215154 7DF4 E7B7B4 East Asian ideograph (variant of EACC 4B5154) 215155 7DD6 E7B796 East Asian ideograph 215156 7DD8 E7B798 East Asian ideograph 215157 7DEC E7B7AC East Asian ideograph 215158 7DDD E7B79D East Asian ideograph 215159 7DE9 E7B7A9 East Asian ideograph 21515A 7DE3 E7B7A3 East Asian ideograph 21515B 7DE8 E7B7A8 East Asian ideograph 21515C 7DDA E7B79A East Asian ideograph 21515D 7D9E E7B69E East Asian ideograph 21515E 7DDE E7B79E East Asian ideograph 21515F 7E11 E7B891 East Asian ideograph 215160 7E0A E7B88A East Asian ideograph 215161 7E08 E7B888 East Asian ideograph 215162 7E1B E7B89B East Asian ideograph 215163 7DFB E7B7BB East Asian ideograph 215164 7E23 E7B8A3 East Asian ideograph 215165 7E2E E7B8AE East Asian ideograph 215166 7E3E E7B8BE East Asian ideograph 215167 7E46 E7B986 East Asian ideograph 215168 7E37 E7B8B7 East Asian ideograph 215169 7E32 E7B8B2 East Asian ideograph 21516A 7E43 E7B983 East Asian ideograph 21516B 7E41 E7B981 East Asian ideograph 21516C 7E2B E7B8AB East Asian ideograph 21516D 7E3D E7B8BD East Asian ideograph 21516E 7E31 E7B8B1 East Asian ideograph 21516F 7E45 E7B985 East Asian ideograph 215170 7E55 E7B995 East Asian ideograph 215171 7E54 E7B994 East Asian ideograph 215172 7E61 E7B9A1 East Asian ideograph 215173 7E5E E7B99E East Asian ideograph 215174 7E5A E7B99A East Asian ideograph 215175 7E6B E7B9AB East Asian ideograph 215176 7E69 E7B9A9 East Asian ideograph 215177 7E6D E7B9AD East Asian ideograph 215178 7E79 E7B9B9 East Asian ideograph 215179 7E6A E7B9AA East Asian ideograph 21517A 8FAE E8BEAE East Asian ideograph 21517B 7E7D E7B9BD East Asian ideograph 21517C 7E82 E7BA82 East Asian ideograph 21517D 7E7C E7B9BC East Asian ideograph 21517E 7E8F E7BA8F East Asian ideograph 215221 7E8C E7BA8C East Asian ideograph 215222 7E93 E7BA93 East Asian ideograph 215223 7E96 E7BA96 East Asian ideograph 215224 7E9C E7BA9C East Asian ideograph 215226 7F38 E7BCB8 East Asian ideograph 215227 7F3A E7BCBA East Asian ideograph 215228 7F3D E7BCBD East Asian ideograph 215229 7F44 E7BD84 East Asian ideograph 21522B 7F50 E7BD90 East Asian ideograph 21522C 7F55 E7BD95 East Asian ideograph 21522D 7F54 E7BD94 East Asian ideograph 21522E 7F5F E7BD9F East Asian ideograph 21522F 7F72 E7BDB2 East Asian ideograph 215230 7F6E E7BDAE East Asian ideograph 215231 7F69 E7BDA9 East Asian ideograph 215232 7F6A E7BDAA East Asian ideograph 215233 7F70 E7BDB0 East Asian ideograph 215234 7F75 E7BDB5 East Asian ideograph 215235 7F77 E7BDB7 East Asian ideograph 215236 7F79 E7BDB9 East Asian ideograph 215237 7F85 E7BE85 East Asian ideograph 215238 7F88 E7BE88 East Asian ideograph 215239 7F8A E7BE8A East Asian ideograph 21523A 7F8C E7BE8C East Asian ideograph 21523B 7F8E E7BE8E East Asian ideograph 21523C 7F94 E7BE94 East Asian ideograph 21523D 7F9E E7BE9E East Asian ideograph 21523E 7F9A E7BE9A East Asian ideograph 21523F 5584 E59684 East Asian ideograph 215240 7FA8 E7BEA8 East Asian ideograph 215241 7FA4 E7BEA4 East Asian ideograph 215242 7FA9 E7BEA9 East Asian ideograph 215243 7FAF E7BEAF East Asian ideograph 215244 7FB2 E7BEB2 East Asian ideograph 215245 7FB6 E7BEB6 East Asian ideograph 215246 7FB8 E7BEB8 East Asian ideograph 215247 7FB9 E7BEB9 East Asian ideograph 215248 7FBD E7BEBD East Asian ideograph 215249 7FBF E7BEBF East Asian ideograph 21524A 7FC5 E7BF85 East Asian ideograph 21524B 7FC1 E7BF81 East Asian ideograph 21524C 7FCC E7BF8C East Asian ideograph 21524D 7FD2 E7BF92 East Asian ideograph 21524E 7FCE E7BF8E East Asian ideograph (variant of EACC 4B524E) 21524F 7FD4 E7BF94 East Asian ideograph 215250 7FD5 E7BF95 East Asian ideograph 215251 7FE0 E7BFA0 East Asian ideograph 215252 7FE1 E7BFA1 East Asian ideograph 215253 7FDF E7BF9F East Asian ideograph 215254 7FE9 E7BFA9 East Asian ideograph 215255 7FF0 E7BFB0 East Asian ideograph 215256 7FF3 E7BFB3 East Asian ideograph 215257 7FFC E7BFBC East Asian ideograph 215258 7FF9 E7BFB9 East Asian ideograph 215259 7FFB E7BFBB East Asian ideograph 21525A 7FF1 E7BFB1 East Asian ideograph 21525B 8000 E88080 East Asian ideograph 21525C 8001 E88081 East Asian ideograph 21525D 8003 E88083 East Asian ideograph 21525E 8006 E88086 East Asian ideograph 21525F 8005 E88085 East Asian ideograph 215260 800C E8808C East Asian ideograph 215261 8010 E88090 East Asian ideograph 215262 800D E8808D East Asian ideograph 215263 8012 E88092 East Asian ideograph 215264 8015 E88095 East Asian ideograph 215265 8018 E88098 East Asian ideograph 215266 8019 E88099 East Asian ideograph 215267 8017 E88097 East Asian ideograph 215268 801C E8809C East Asian ideograph 215269 8033 E880B3 East Asian ideograph 21526A 8036 E880B6 East Asian ideograph 21526B 803F E880BF East Asian ideograph 21526C 803D E880BD East Asian ideograph 21526D 804A E8818A East Asian ideograph 21526E 8046 E88186 East Asian ideograph 21526F 8056 E88196 East Asian ideograph 215270 8058 E88198 East Asian ideograph 215271 805E E8819E East Asian ideograph 215272 805A E8819A East Asian ideograph 215273 8071 E881B1 East Asian ideograph 215274 8072 E881B2 East Asian ideograph 215275 8073 E881B3 East Asian ideograph 215276 8070 E881B0 East Asian ideograph 215277 806F E881AF East Asian ideograph 215278 8077 E881B7 East Asian ideograph 215279 8076 E881B6 East Asian ideograph 21527A 807E E881BE East Asian ideograph 21527B 807D E881BD East Asian ideograph 21527C 807F E881BF East Asian ideograph 21527E 8084 E88284 East Asian ideograph 215321 8085 E88285 East Asian ideograph 215322 8087 E88287 East Asian ideograph 215323 8089 E88289 East Asian ideograph 215324 808B E8828B East Asian ideograph 215325 808C E8828C East Asian ideograph 215326 8093 E88293 East Asian ideograph 215327 809D E8829D East Asian ideograph 215328 8098 E88298 East Asian ideograph 215329 809B E8829B East Asian ideograph 21532A 809A E8829A East Asian ideograph 21532B 8096 E88296 East Asian ideograph 21532C 80B2 E882B2 East Asian ideograph 21532D 80AA E882AA East Asian ideograph 21532E 80BA E882BA East Asian ideograph 21532F 80A5 E882A5 East Asian ideograph 215330 80A2 E882A2 East Asian ideograph 215331 80AB E882AB East Asian ideograph 215332 80B1 E882B1 East Asian ideograph 215333 80AF E882AF East Asian ideograph 215334 80A1 E882A1 East Asian ideograph 215335 80A9 E882A9 East Asian ideograph 215336 80B4 E882B4 East Asian ideograph 215337 80D6 E88396 East Asian ideograph 215338 80CC E8838C East Asian ideograph 215339 80E5 E883A5 East Asian ideograph 21533A 80DA E8839A East Asian ideograph 21533B 80E1 E883A1 East Asian ideograph 21533C 80C3 E88383 East Asian ideograph 21533D 80DB E8839B East Asian ideograph 21533E 80C4 E88384 East Asian ideograph 21533F 80CE E8838E East Asian ideograph 215340 80DE E8839E East Asian ideograph 215341 80E4 E883A4 East Asian ideograph 215342 80F0 E883B0 East Asian ideograph 215343 8102 E88482 East Asian ideograph 215344 8105 E88485 East Asian ideograph 215345 80F1 E883B1 East Asian ideograph 215346 80F4 E883B4 East Asian ideograph 215347 80ED E883AD East Asian ideograph 215348 80FD E883BD East Asian ideograph 215349 8106 E88486 East Asian ideograph 21534A 80F3 E883B3 East Asian ideograph 21534B 80F8 E883B8 East Asian ideograph 21534C 810A E8848A East Asian ideograph 21534D 8108 E88488 East Asian ideograph 21534E 812B E884AB East Asian ideograph 21534F 812F E884AF East Asian ideograph 215350 8116 E88496 East Asian ideograph 215352 8129 E884A9 East Asian ideograph 215353 8155 E88595 East Asian ideograph 215354 8154 E88594 East Asian ideograph 215355 814B E8858B East Asian ideograph 215356 8151 E88591 East Asian ideograph 215357 8150 E88590 East Asian ideograph 215358 814E E8858E East Asian ideograph 215359 8139 E884B9 East Asian ideograph 21535A 8146 E88586 East Asian ideograph 21535B 813E E884BE East Asian ideograph 21535C 8171 E885B1 East Asian ideograph 21535D 8170 E885B0 East Asian ideograph 21535E 8178 E885B8 East Asian ideograph 21535F 8165 E885A5 East Asian ideograph 215360 816E E885AE East Asian ideograph 215361 8173 E885B3 East Asian ideograph 215362 816B E885AB East Asian ideograph 215363 8179 E885B9 East Asian ideograph 215364 817A E885BA East Asian ideograph 215365 8166 E885A6 East Asian ideograph 215366 8180 E88680 East Asian ideograph 215367 818F E8868F East Asian ideograph 215368 817F E885BF East Asian ideograph 215369 818A E8868A East Asian ideograph 21536A 8188 E88688 East Asian ideograph 21536B 819D E8869D East Asian ideograph 21536C 81A0 E886A0 East Asian ideograph 21536D 819B E8869B East Asian ideograph 21536E 819A E8869A East Asian ideograph 21536F 819C E8869C East Asian ideograph 215370 81B3 E886B3 East Asian ideograph 215371 81A9 E886A9 East Asian ideograph 215372 81A8 E886A8 East Asian ideograph 215373 81C6 E88786 East Asian ideograph 215374 81BA E886BA East Asian ideograph 215375 81C3 E88783 East Asian ideograph 215376 81C0 E88780 East Asian ideograph 215377 81C2 E88782 East Asian ideograph 215378 81BF E886BF East Asian ideograph 215379 81BD E886BD East Asian ideograph 21537A 81C9 E88789 East Asian ideograph 21537B 81BE E886BE East Asian ideograph 21537C 81CD E8878D East Asian ideograph 21537D 81CF E8878F East Asian ideograph 21537E 81D8 E88798 East Asian ideograph 215421 81DA E8879A East Asian ideograph 215422 81DF E8879F East Asian ideograph 215423 81E3 E887A3 East Asian ideograph 215424 81E5 E887A5 East Asian ideograph 215425 81E8 E887A8 East Asian ideograph 215426 81EA E887AA East Asian ideograph 215427 81EC E887AC East Asian ideograph 215428 81ED E887AD East Asian ideograph 215429 81F3 E887B3 East Asian ideograph 21542B 81FA E887BA East Asian ideograph 21542C 81FB E887BB East Asian ideograph 21542D 81FC E887BC East Asian ideograph 21542E 81FE E887BE East Asian ideograph 21542F 8200 E88880 East Asian ideograph 215430 8202 E88882 East Asian ideograph 215431 8205 E88885 East Asian ideograph 215432 8207 E88887 East Asian ideograph 215433 8208 E88888 East Asian ideograph 215434 8209 E88889 East Asian ideograph 215435 820A E8888A East Asian ideograph 215436 820C E8888C East Asian ideograph 215437 820D E8888D East Asian ideograph 215438 8210 E88890 East Asian ideograph 215439 8212 E88892 East Asian ideograph 21543A 8214 E88894 East Asian ideograph 21543B 821B E8889B East Asian ideograph 21543C 821C E8889C East Asian ideograph 21543D 821E E8889E East Asian ideograph 21543E 821F E8889F East Asian ideograph 21543F 8222 E888A2 East Asian ideograph 215440 822A E888AA East Asian ideograph 215441 822B E888AB East Asian ideograph 215442 822C E888AC East Asian ideograph 215443 8228 E888A8 East Asian ideograph 215444 8237 E888B7 East Asian ideograph 215445 8235 E888B5 East Asian ideograph 215446 8239 E888B9 East Asian ideograph 215447 8236 E888B6 East Asian ideograph 215448 8247 E88987 East Asian ideograph 215449 8258 E88998 East Asian ideograph 21544A 8259 E88999 East Asian ideograph 21544B 8266 E889A6 East Asian ideograph 21544C 826E E889AE East Asian ideograph 21544D 826F E889AF East Asian ideograph 21544E 8271 E889B1 East Asian ideograph 21544F 8272 E889B2 East Asian ideograph 215450 827E E889BE East Asian ideograph 215451 8292 E88A92 East Asian ideograph 215452 828B E88A8B East Asian ideograph 215453 828D E88A8D East Asian ideograph 215454 82B3 E88AB3 East Asian ideograph 215455 829D E88A9D East Asian ideograph 215456 8299 E88A99 East Asian ideograph 215457 82BD E88ABD East Asian ideograph 215458 82AD E88AAD East Asian ideograph 215459 82AC E88AAC East Asian ideograph 21545A 82A5 E88AA5 East Asian ideograph 21545B 829F E88A9F East Asian ideograph 21545C 82BB E88ABB East Asian ideograph 21545D 82B1 E88AB1 East Asian ideograph 21545E 82B9 E88AB9 East Asian ideograph 215460 82E7 E88BA7 East Asian ideograph 215461 8305 E88C85 East Asian ideograph 215462 8309 E88C89 East Asian ideograph 215463 82E3 E88BA3 East Asian ideograph 215464 82DB E88B9B East Asian ideograph 215465 82E6 E88BA6 East Asian ideograph 215466 8304 E88C84 East Asian ideograph 215467 82E5 E88BA5 East Asian ideograph 215468 8302 E88C82 East Asian ideograph 215469 82DC E88B9C East Asian ideograph 21546A 82D7 E88B97 East Asian ideograph 21546B 82F1 E88BB1 East Asian ideograph 21546C 8301 E88C81 East Asian ideograph 21546D 82D3 E88B93 East Asian ideograph 21546E 82D4 E88B94 East Asian ideograph 21546F 82D1 E88B91 East Asian ideograph 215470 82DE E88B9E East Asian ideograph 215471 82DF E88B9F East Asian ideograph 215472 832B E88CAB East Asian ideograph 215473 8352 E88D92 East Asian ideograph 215474 834A E88D8A East Asian ideograph 215475 8338 E88CB8 East Asian ideograph 215476 8354 E88D94 East Asian ideograph 215477 8350 E88D90 East Asian ideograph 215478 8349 E88D89 East Asian ideograph 215479 8335 E88CB5 East Asian ideograph 21547A 8334 E88CB4 East Asian ideograph 21547B 8336 E88CB6 East Asian ideograph 21547C 8331 E88CB1 East Asian ideograph 21547D 8340 E88D80 East Asian ideograph 21547E 8317 E88C97 East Asian ideograph 215521 5179 E585B9 East Asian ideograph 215522 834F E88D8F East Asian ideograph 215523 8339 E88CB9 East Asian ideograph 215524 838E E88E8E East Asian ideograph 215525 8398 E88E98 East Asian ideograph 215526 839E E88E9E East Asian ideograph 215527 8378 E88DB8 East Asian ideograph 215528 83A2 E88EA2 East Asian ideograph 215529 8396 E88E96 East Asian ideograph 21552A 83A7 E88EA7 East Asian ideograph 21552B 83AB E88EAB East Asian ideograph 21552C 8392 E88E92 East Asian ideograph (variant of EACC 4B552C) 21552D 838A E88E8A East Asian ideograph 21552E 8393 E88E93 East Asian ideograph 21552F 83A0 E88EA0 East Asian ideograph 215530 8389 E88E89 East Asian ideograph 215531 8377 E88DB7 East Asian ideograph 215532 837C E88DBC East Asian ideograph 215533 837B E88DBB East Asian ideograph 215534 840D E8908D East Asian ideograph 215535 83E0 E88FA0 East Asian ideograph 215536 83E9 E88FA9 East Asian ideograph 215538 8403 E89083 East Asian ideograph 215539 83C5 E88F85 East Asian ideograph 21553A 83C1 E88F81 East Asian ideograph 21553B 840B E8908B East Asian ideograph 21553C 83EF E88FAF East Asian ideograph 21553E 83F1 E88FB1 East Asian ideograph 21553F 83BD E88EBD East Asian ideograph 215541 840A E8908A East Asian ideograph 215542 840C E8908C East Asian ideograph 215543 83CC E88F8C East Asian ideograph 215544 83DC E88F9C East Asian ideograph 215545 83CA E88F8A East Asian ideograph 215546 83F2 E88FB2 East Asian ideograph 215547 840E E8908E East Asian ideograph 215548 8404 E89084 East Asian ideograph 215549 843D E890BD East Asian ideograph 21554A 8482 E89282 East Asian ideograph 21554B 8431 E890B1 East Asian ideograph 21554C 8475 E891B5 East Asian ideograph 21554D 8466 E891A6 East Asian ideograph 21554E 8457 E89197 East Asian ideograph 21554F 8449 E89189 East Asian ideograph 215550 846C E891AC East Asian ideograph 215551 846B E891AB East Asian ideograph 215552 845B E8919B East Asian ideograph 215553 8477 E891B7 East Asian ideograph 215554 843C E890BC East Asian ideograph 215555 8435 E890B5 East Asian ideograph 215556 8461 E891A1 East Asian ideograph 215557 8463 E891A3 East Asian ideograph 215558 8469 E891A9 East Asian ideograph 215559 8438 E890B8 East Asian ideograph 21555A 84B2 E892B2 East Asian ideograph 21555B 849E E8929E East Asian ideograph 21555C 84BF E892BF East Asian ideograph 21555D 84C6 E89386 East Asian ideograph 21555E 84C4 E89384 East Asian ideograph 21555F 84C9 E89389 East Asian ideograph 215560 849C E8929C East Asian ideograph 215561 84CB E8938B East Asian ideograph 215562 84B8 E892B8 East Asian ideograph 215563 84C0 E89380 East Asian ideograph 215564 8499 E89299 East Asian ideograph 215565 84D3 E89393 East Asian ideograph 215566 8490 E89290 East Asian ideograph 215567 84BC E892BC East Asian ideograph 215568 853D E894BD East Asian ideograph 215569 84FF E893BF East Asian ideograph 21556A 8517 E89497 East Asian ideograph 21556B 851A E8949A East Asian ideograph 21556C 84EE E893AE East Asian ideograph 21556D 852C E894AC East Asian ideograph 21556E 852D E894AD East Asian ideograph 21556F 8513 E89493 East Asian ideograph 215571 8523 E894A3 East Asian ideograph 215572 8521 E894A1 East Asian ideograph 215573 8514 E89494 East Asian ideograph 215574 84EC E893AC East Asian ideograph 215575 8525 E894A5 East Asian ideograph 215576 8569 E895A9 East Asian ideograph 215577 854A E8958A East Asian ideograph 215578 8559 E89599 East Asian ideograph 215579 8548 E89588 East Asian ideograph 21557A 8568 E895A8 East Asian ideograph 21557B 8543 E89583 East Asian ideograph 21557C 856A E895AA East Asian ideograph 21557D 8549 E89589 East Asian ideograph 21557E 8584 E89684 East Asian ideograph 215621 85AA E896AA East Asian ideograph 215622 856D E895AD East Asian ideograph 215623 859B E8969B East Asian ideograph 215624 8591 E89691 East Asian ideograph 215625 857E E895BE East Asian ideograph 215626 8594 E89694 East Asian ideograph 215627 859C E8969C East Asian ideograph 215628 8587 E89687 East Asian ideograph 215629 85CD E8978D East Asian ideograph (variant of EACC 4B5629) 21562A 85A9 E896A9 East Asian ideograph 21562B 85CF E8978F East Asian ideograph 21562C 85AF E896AF East Asian ideograph 21562D 85D0 E89790 East Asian ideograph 21562E 85C9 E89789 East Asian ideograph 21562F 85B0 E896B0 East Asian ideograph 215630 85E9 E897A9 East Asian ideograph 215631 85DD E8979D East Asian ideograph 215632 85EA E897AA East Asian ideograph 215633 85E4 E897A4 East Asian ideograph 215634 85D5 E89795 East Asian ideograph 215635 85E5 E897A5 East Asian ideograph 215636 85FB E897BB East Asian ideograph 215637 85F9 E897B9 East Asian ideograph 215638 8611 E89891 East Asian ideograph 215639 85FA E897BA East Asian ideograph 21563A 8606 E89886 East Asian ideograph 21563B 860B E8988B East Asian ideograph 21563C 8607 E89887 East Asian ideograph 21563D 860A E8988A East Asian ideograph 21563E 862D E898AD East Asian ideograph 21563F 8617 E89897 East Asian ideograph 215640 861A E8989A East Asian ideograph 215641 8638 E898B8 East Asian ideograph 215642 863F E898BF East Asian ideograph 215643 864E E8998E East Asian ideograph 215644 8650 E89990 East Asian ideograph 215645 8654 E89994 East Asian ideograph 215646 5F6A E5BDAA East Asian ideograph 215647 8655 E89995 East Asian ideograph 215648 865C E8999C East Asian ideograph 215649 865B E8999B East Asian ideograph 21564A 865F E8999F East Asian ideograph 21564B 865E E8999E East Asian ideograph 21564C 8667 E899A7 East Asian ideograph 21564F 8679 E899B9 East Asian ideograph 215650 86A9 E89AA9 East Asian ideograph 215651 86AA E89AAA East Asian ideograph 215652 868A E89A8A East Asian ideograph 215653 8693 E89A93 East Asian ideograph 215654 86A4 E89AA4 East Asian ideograph 215655 868C E89A8C East Asian ideograph 215656 86A3 E89AA3 East Asian ideograph 215657 86C0 E89B80 East Asian ideograph 215658 86C7 E89B87 East Asian ideograph 215659 86B5 E89AB5 East Asian ideograph 21565A 86CB E89B8B East Asian ideograph 21565B 86B6 E89AB6 East Asian ideograph 21565C 86C4 E89B84 East Asian ideograph 21565D 86C6 E89B86 East Asian ideograph 21565E 86B1 E89AB1 East Asian ideograph 21565F 86AF E89AAF East Asian ideograph 215660 86DF E89B9F East Asian ideograph 215661 86D9 E89B99 East Asian ideograph 215662 86ED E89BAD East Asian ideograph 215663 86D4 E89B94 East Asian ideograph 215664 86DB E89B9B East Asian ideograph 215665 86E4 E89BA4 East Asian ideograph 215666 86FB E89BBB East Asian ideograph 215667 86F9 E89BB9 East Asian ideograph 215668 8707 E89C87 East Asian ideograph 215669 8703 E89C83 East Asian ideograph 21566A 8708 E89C88 East Asian ideograph 21566B 8700 E89C80 East Asian ideograph 21566C 86FE E89BBE East Asian ideograph 21566D 8713 E89C93 East Asian ideograph 21566E 8702 E89C82 East Asian ideograph 21566F 871C E89C9C East Asian ideograph 215670 873F E89CBF East Asian ideograph 215671 873B E89CBB East Asian ideograph 215672 8722 E89CA2 East Asian ideograph 215673 8725 E89CA5 East Asian ideograph 215674 8734 E89CB4 East Asian ideograph 215675 8718 E89C98 East Asian ideograph 215676 8755 E89D95 East Asian ideograph 215677 8760 E89DA0 East Asian ideograph 215678 8776 E89DB6 East Asian ideograph 215679 8774 E89DB4 East Asian ideograph 21567A 8766 E89DA6 East Asian ideograph 21567B 8778 E89DB8 East Asian ideograph 21567C 8768 E89DA8 East Asian ideograph 21567D 874C E89D8C East Asian ideograph 21567E 8757 E89D97 East Asian ideograph 215721 8759 E89D99 East Asian ideograph 215722 8783 E89E83 East Asian ideograph 215723 8782 E89E82 East Asian ideograph 215724 87A2 E89EA2 East Asian ideograph 215725 879E E89E9E East Asian ideograph 215726 878D E89E8D East Asian ideograph 215727 879F E89E9F East Asian ideograph 215728 87D1 E89F91 East Asian ideograph 215729 87C0 E89F80 East Asian ideograph 21572A 87AB E89EAB East Asian ideograph 21572B 87B3 E89EB3 East Asian ideograph 21572C 87BB E89EBB East Asian ideograph 21572D 87C8 E89F88 East Asian ideograph 21572E 87D2 E89F92 East Asian ideograph 21572F 87BA E89EBA East Asian ideograph 215730 87C6 E89F86 East Asian ideograph 215731 87CB E89F8B East Asian ideograph 215732 87EF E89FAF East Asian ideograph 215733 87F2 E89FB2 East Asian ideograph 215734 87EC E89FAC East Asian ideograph 215735 87FB E89FBB East Asian ideograph 215736 8805 E8A085 East Asian ideograph 215737 880D E8A08D East Asian ideograph 215738 87F9 E89FB9 East Asian ideograph 215739 8814 E8A094 East Asian ideograph 21573A 8815 E8A095 East Asian ideograph 21573B 8822 E8A0A2 East Asian ideograph 21573C 8823 E8A0A3 East Asian ideograph 21573D 8821 E8A0A1 East Asian ideograph 21573E 881F E8A09F East Asian ideograph 21573F 8831 E8A0B1 East Asian ideograph 215740 8839 E8A0B9 East Asian ideograph 215741 8836 E8A0B6 East Asian ideograph 215742 883B E8A0BB East Asian ideograph 215743 8840 E8A180 East Asian ideograph 215744 884C E8A18C East Asian ideograph 215745 884D E8A18D East Asian ideograph 215746 8853 E8A193 East Asian ideograph (variant of EACC 4B5746) 215747 8857 E8A197 East Asian ideograph 215748 8859 E8A199 East Asian ideograph 215749 885B E8A19B East Asian ideograph 21574A 885D E8A19D East Asian ideograph 21574B 8861 E8A1A1 East Asian ideograph 21574C 8862 E8A1A2 East Asian ideograph 21574D 8863 E8A1A3 East Asian ideograph 21574E 521D E5889D East Asian ideograph 21574F 8868 E8A1A8 East Asian ideograph 215750 886B E8A1AB East Asian ideograph 215751 8882 E8A282 East Asian ideograph 215752 8881 E8A281 East Asian ideograph 215753 8870 E8A1B0 East Asian ideograph 215754 8877 E8A1B7 East Asian ideograph 215755 8888 E8A288 East Asian ideograph 215756 88AB E8A2AB East Asian ideograph 215757 8892 E8A292 East Asian ideograph 215758 8896 E8A296 East Asian ideograph 215759 888D E8A28D East Asian ideograph 21575A 888B E8A28B East Asian ideograph 21575B 889E E8A29E East Asian ideograph 21575C 88C1 E8A381 East Asian ideograph 21575D 88C2 E8A382 East Asian ideograph 21575E 88B1 E8A2B1 East Asian ideograph 21575F 88DF E8A39F East Asian ideograph 215760 88D9 E8A399 East Asian ideograph 215761 88D8 E8A398 East Asian ideograph 215762 88DC E8A39C East Asian ideograph 215763 88CF E8A38F East Asian ideograph 215764 88D4 E8A394 East Asian ideograph 215765 88DD E8A39D East Asian ideograph 215766 88D5 E8A395 East Asian ideograph 215767 8902 E8A482 East Asian ideograph 215768 88F3 E8A3B3 East Asian ideograph 215769 88F8 E8A3B8 East Asian ideograph 21576A 88F9 E8A3B9 East Asian ideograph 21576B 88F4 E8A3B4 East Asian ideograph 21576C 88FD E8A3BD East Asian ideograph 21576D 88E8 E8A3A8 East Asian ideograph 21576E 891A E8A49A East Asian ideograph 21576F 8910 E8A490 East Asian ideograph 215771 8913 E8A493 East Asian ideograph 215772 8912 E8A492 East Asian ideograph 215773 8932 E8A4B2 East Asian ideograph 215774 892A E8A4AA East Asian ideograph 215775 8925 E8A4A5 East Asian ideograph 215776 892B E8A4AB East Asian ideograph 215777 893B E8A4BB East Asian ideograph 215778 8936 E8A4B6 East Asian ideograph 215779 8938 E8A4B8 East Asian ideograph 21577A 8944 E8A584 East Asian ideograph 21577B 895F E8A59F East Asian ideograph 21577C 8960 E8A5A0 East Asian ideograph 21577D 8956 E8A596 East Asian ideograph 21577E 8964 E8A5A4 East Asian ideograph 215821 896A E8A5AA East Asian ideograph 215822 896F E8A5AF East Asian ideograph 215823 8972 E8A5B2 East Asian ideograph 215824 897F E8A5BF East Asian ideograph 215825 8981 E8A681 East Asian ideograph 215826 8983 E8A683 East Asian ideograph 215828 898B E8A68B East Asian ideograph 215829 898F E8A68F East Asian ideograph 21582A 8993 E8A693 East Asian ideograph 21582B 8996 E8A696 East Asian ideograph 21582C 89AA E8A6AA East Asian ideograph 21582D 89A6 E8A6A6 East Asian ideograph 21582E 89AC E8A6AC East Asian ideograph 21582F 89B2 E8A6B2 East Asian ideograph 215830 89BA E8A6BA East Asian ideograph 215831 89BD E8A6BD East Asian ideograph 215832 89C0 E8A780 East Asian ideograph 215833 89D2 E8A792 East Asian ideograph 215834 89E3 E8A7A3 East Asian ideograph 215835 89F4 E8A7B4 East Asian ideograph 215836 89F8 E8A7B8 East Asian ideograph 215837 8A00 E8A880 East Asian ideograph 215838 8A08 E8A888 East Asian ideograph 215839 8A02 E8A882 East Asian ideograph 21583A 8A03 E8A883 East Asian ideograph 21583B 8A10 E8A890 East Asian ideograph 21583C 8A18 E8A898 East Asian ideograph 21583D 8A0E E8A88E East Asian ideograph 21583E 8A0C E8A88C East Asian ideograph 21583F 8A15 E8A895 East Asian ideograph 215840 8A0A E8A88A East Asian ideograph 215841 8A16 E8A896 East Asian ideograph 215842 8A17 E8A897 East Asian ideograph 215843 8A13 E8A893 East Asian ideograph 215844 8A2A E8A8AA East Asian ideograph 215845 8A23 E8A8A3 East Asian ideograph 215846 8A1D E8A89D East Asian ideograph 215847 8A25 E8A8A5 East Asian ideograph 215848 8A31 E8A8B1 East Asian ideograph 215849 8A2D E8A8AD East Asian ideograph 21584A 8A1B E8A89B East Asian ideograph 21584B 8A1F E8A89F East Asian ideograph 21584C 8A3B E8A8BB East Asian ideograph 21584D 8A60 E8A9A0 East Asian ideograph 21584E 8A55 E8A995 East Asian ideograph 21584F 8A5E E8A99E East Asian ideograph 215851 8A41 E8A981 East Asian ideograph 215852 8A54 E8A994 East Asian ideograph 215853 8A5B E8A99B East Asian ideograph 215854 8A50 E8A990 East Asian ideograph 215855 8A46 E8A986 East Asian ideograph 215856 8A34 E8A8B4 East Asian ideograph 215857 8A3A E8A8BA East Asian ideograph 215858 8A6B E8A9AB East Asian ideograph 215859 8A72 E8A9B2 East Asian ideograph 21585A 8A73 E8A9B3 East Asian ideograph 21585B 8A66 E8A9A6 East Asian ideograph 21585C 8A69 E8A9A9 East Asian ideograph 21585D 8A70 E8A9B0 East Asian ideograph 21585E 8A63 E8A9A3 East Asian ideograph 21585F 8A7C E8A9BC East Asian ideograph 215860 8AA0 E8AAA0 East Asian ideograph 215861 8A87 E8AA87 East Asian ideograph 215862 8A85 E8AA85 East Asian ideograph 215863 8A6D E8A9AD East Asian ideograph 215864 8A79 E8A9B9 East Asian ideograph 215865 8A62 E8A9A2 East Asian ideograph 215866 8A71 E8A9B1 East Asian ideograph 215867 8A6E E8A9AE East Asian ideograph 215868 8A6C E8A9AC East Asian ideograph 215869 8AAA E8AAAA East Asian ideograph 21586A 8AA6 E8AAA6 East Asian ideograph 21586B 8AA1 E8AAA1 East Asian ideograph 21586C 8A9E E8AA9E East Asian ideograph 21586D 8A8C E8AA8C East Asian ideograph 21586E 8A93 E8AA93 East Asian ideograph 21586F 8AA3 E8AAA3 East Asian ideograph 215870 8A8D E8AA8D East Asian ideograph 215871 8AA4 E8AAA4 East Asian ideograph (variant of EACC 4B5871) 215872 8AA8 E8AAA8 East Asian ideograph 215873 8AA5 E8AAA5 East Asian ideograph 215874 8A98 E8AA98 East Asian ideograph 215875 8A91 E8AA91 East Asian ideograph 215876 8ABC E8AABC East Asian ideograph 215877 8AC4 E8AB84 East Asian ideograph 215878 8AD2 E8AB92 East Asian ideograph 215879 8AC7 E8AB87 East Asian ideograph 21587A 8ACB E8AB8B East Asian ideograph (variant of EACC 4B587A) 21587B 8AF8 E8ABB8 East Asian ideograph 21587C 8AB2 E8AAB2 East Asian ideograph 21587D 8ABF E8AABF East Asian ideograph 21587E 8AC9 E8AB89 East Asian ideograph 215921 8AC2 E8AB82 East Asian ideograph 215922 8AB0 E8AAB0 East Asian ideograph 215923 8A95 E8AA95 East Asian ideograph 215924 8AD6 E8AB96 East Asian ideograph 215925 8AE6 E8ABA6 East Asian ideograph 215926 8AFA E8ABBA East Asian ideograph 215927 8AEB E8ABAB East Asian ideograph 215928 8AF1 E8ABB1 East Asian ideograph 215929 8AE7 E8ABA7 East Asian ideograph 21592A 8ADC E8AB9C East Asian ideograph 21592B 8B00 E8AC80 East Asian ideograph 21592C 8B01 E8AC81 East Asian ideograph (variant of EACC 2D592C) 21592D 8B02 E8AC82 East Asian ideograph 21592E 8AFE E8ABBE East Asian ideograph 21592F 8AF7 E8ABB7 East Asian ideograph 215930 8AED E8ABAD East Asian ideograph 215931 8B17 E8AC97 East Asian ideograph 215932 8B19 E8AC99 East Asian ideograph 215933 8B0E E8AC8E East Asian ideograph 215934 8B1B E8AC9B East Asian ideograph 215935 8B0A E8AC8A East Asian ideograph 215936 8B21 E8ACA1 East Asian ideograph 215937 8B04 E8AC84 East Asian ideograph 215938 8B1D E8AC9D East Asian ideograph 215939 8B39 E8ACB9 East Asian ideograph 21593A 8B2C E8ACAC East Asian ideograph 21593B 8B28 E8ACA8 East Asian ideograph 21593C 8B58 E8AD98 East Asian ideograph 21593D 8B5C E8AD9C East Asian ideograph 21593E 8B4E E8AD8E East Asian ideograph 21593F 8B49 E8AD89 East Asian ideograph 215940 8B5A E8AD9A East Asian ideograph 215941 8B41 E8AD81 East Asian ideograph 215942 8B4F E8AD8F East Asian ideograph 215943 8B70 E8ADB0 East Asian ideograph 215944 8B6C E8ADAC East Asian ideograph 215945 8B66 E8ADA6 East Asian ideograph 215946 8B6F E8ADAF East Asian ideograph 215947 8B74 E8ADB4 East Asian ideograph 215948 8B77 E8ADB7 East Asian ideograph 215949 8B7D E8ADBD East Asian ideograph 21594A 8B80 E8AE80 East Asian ideograph 21594B 8B8A E8AE8A East Asian ideograph 21594C 8B93 E8AE93 East Asian ideograph 21594D 8B96 E8AE96 East Asian ideograph 21594E 8B92 E8AE92 East Asian ideograph 21594F 8B9A E8AE9A East Asian ideograph 215951 8C41 E8B181 East Asian ideograph 215952 8C3F E8B0BF East Asian ideograph 215953 8C46 E8B186 East Asian ideograph 215954 8C48 E8B188 East Asian ideograph 215955 8C49 E8B189 East Asian ideograph 215956 8C4C E8B18C East Asian ideograph 215957 8C4E E8B18E East Asian ideograph 215958 8C50 E8B190 East Asian ideograph 215959 8C54 E8B194 East Asian ideograph 21595A 8C5A E8B19A East Asian ideograph 21595C 8C62 E8B1A2 East Asian ideograph 21595D 8C6A E8B1AA East Asian ideograph 21595E 8C6B E8B1AB East Asian ideograph 21595F 8C6C E8B1AC East Asian ideograph 215960 8C7A E8B1BA East Asian ideograph 215961 8C79 E8B1B9 East Asian ideograph 215962 8C82 E8B282 East Asian ideograph 215963 8C8A E8B28A East Asian ideograph 215964 8C89 E8B289 East Asian ideograph 215965 8C8D E8B28D East Asian ideograph 215966 8C8C E8B28C East Asian ideograph 215967 8C93 E8B293 East Asian ideograph 215968 8C9D E8B29D East Asian ideograph 215969 8C9E E8B29E East Asian ideograph 21596A 8CA0 E8B2A0 East Asian ideograph 21596B 8CA2 E8B2A2 East Asian ideograph 21596C 8CA1 E8B2A1 East Asian ideograph 21596D 8CAC E8B2AC East Asian ideograph 21596E 8CAB E8B2AB East Asian ideograph 21596F 8CA8 E8B2A8 East Asian ideograph 215970 8CAA E8B2AA East Asian ideograph 215971 8CA7 E8B2A7 East Asian ideograph 215972 8CA9 E8B2A9 East Asian ideograph 215973 8CAF E8B2AF East Asian ideograph 215975 8CBB E8B2BB East Asian ideograph 215976 8CC1 E8B381 East Asian ideograph 215977 8CC0 E8B380 East Asian ideograph 215978 8CB4 E8B2B4 East Asian ideograph 215979 8CBC E8B2BC East Asian ideograph 21597A 8CB7 E8B2B7 East Asian ideograph 21597B 8CB6 E8B2B6 East Asian ideograph 21597C 8CBD E8B2BD East Asian ideograph 21597D 8CB8 E8B2B8 East Asian ideograph 21597E 8CBF E8B2BF East Asian ideograph 215A21 8CC5 E8B385 East Asian ideograph 215A22 8CC7 E8B387 East Asian ideograph 215A23 8CCA E8B38A East Asian ideograph 215A24 8CC8 E8B388 East Asian ideograph 215A25 8CC4 E8B384 East Asian ideograph 215A26 8CB2 E8B2B2 East Asian ideograph 215A27 8CC3 E8B383 East Asian ideograph 215A28 8CC2 E8B382 East Asian ideograph 215A29 8CD3 E8B393 East Asian ideograph 215A2A 8CD1 E8B391 East Asian ideograph 215A2B 8CD2 E8B392 East Asian ideograph 215A2C 8CE0 E8B3A0 East Asian ideograph 215A2D 8CE6 E8B3A6 East Asian ideograph 215A2F 8CE3 E8B3A3 East Asian ideograph 215A30 8CE2 E8B3A2 East Asian ideograph 215A31 8CE4 E8B3A4 East Asian ideograph 215A32 8CDE E8B39E East Asian ideograph 215A33 8CDC E8B39C East Asian ideograph 215A34 8CEA E8B3AA East Asian ideograph 215A35 8CED E8B3AD East Asian ideograph 215A36 8CF4 E8B3B4 East Asian ideograph 215A37 8CFD E8B3BD East Asian ideograph 215A38 8CFA E8B3BA East Asian ideograph 215A39 8D05 E8B485 East Asian ideograph 215A3A 8CFC E8B3BC East Asian ideograph 215A3B 8D08 E8B488 East Asian ideograph (variant of EACC 4B5A3B) 215A3C 8D0B E8B48B East Asian ideograph 215A3D 8D0A E8B48A East Asian ideograph 215A3E 8D0F E8B48F East Asian ideograph 215A3F 8D0D E8B48D East Asian ideograph 215A40 8D13 E8B493 East Asian ideograph 215A41 8D16 E8B496 East Asian ideograph 215A42 8D1B E8B49B East Asian ideograph 215A43 8D64 E8B5A4 East Asian ideograph 215A44 8D67 E8B5A7 East Asian ideograph 215A45 8D66 E8B5A6 East Asian ideograph 215A46 8D6B E8B5AB East Asian ideograph 215A47 8D6D E8B5AD East Asian ideograph 215A48 8D70 E8B5B0 East Asian ideograph 215A49 8D74 E8B5B4 East Asian ideograph 215A4A 8D73 E8B5B3 East Asian ideograph 215A4B 8D77 E8B5B7 East Asian ideograph 215A4C 8D85 E8B685 East Asian ideograph 215A4D 8D8A E8B68A East Asian ideograph 215A4E 8D81 E8B681 East Asian ideograph 215A4F 8D99 E8B699 East Asian ideograph 215A50 8D95 E8B695 East Asian ideograph 215A51 8DA3 E8B6A3 East Asian ideograph 215A52 8D9F E8B69F East Asian ideograph 215A53 8DA8 E8B6A8 East Asian ideograph 215A54 8DB3 E8B6B3 East Asian ideograph 215A55 8DB4 E8B6B4 East Asian ideograph 215A56 8DBE E8B6BE East Asian ideograph 215A57 8DCE E8B78E East Asian ideograph 215A58 8DDD E8B79D East Asian ideograph 215A59 8DDB E8B79B East Asian ideograph 215A5A 8DCB E8B78B East Asian ideograph 215A5B 8DDA E8B79A East Asian ideograph 215A5C 8DC6 E8B786 East Asian ideograph 215A5D 8DD1 E8B791 East Asian ideograph 215A5E 8DCC E8B78C East Asian ideograph 215A5F 8DE1 E8B7A1 East Asian ideograph 215A60 8DDF E8B79F East Asian ideograph 215A61 8DE8 E8B7A8 East Asian ideograph 215A62 8DF3 E8B7B3 East Asian ideograph 215A63 8DFA E8B7BA East Asian ideograph 215A64 8DEA E8B7AA East Asian ideograph 215A65 8DEF E8B7AF East Asian ideograph 215A66 8DFC E8B7BC East Asian ideograph 215A67 8E2B E8B8AB East Asian ideograph 215A68 8E10 E8B890 East Asian ideograph 215A69 8E22 E8B8A2 East Asian ideograph 215A6A 8E1D E8B89D East Asian ideograph 215A6B 8E0F E8B88F East Asian ideograph 215A6C 8E29 E8B8A9 East Asian ideograph 215A6D 8E1F E8B89F East Asian ideograph 215A6E 8E44 E8B984 East Asian ideograph 215A6F 8E31 E8B8B1 East Asian ideograph 215A70 8E42 E8B982 East Asian ideograph 215A71 8E34 E8B8B4 East Asian ideograph 215A72 8E39 E8B8B9 East Asian ideograph 215A73 8E35 E8B8B5 East Asian ideograph 215A74 8E49 E8B989 East Asian ideograph 215A75 8E4B E8B98B East Asian ideograph 215A76 8E48 E8B988 East Asian ideograph 215A77 8E4A E8B98A East Asian ideograph 215A78 8E63 E8B9A3 East Asian ideograph 215A79 8E59 E8B999 East Asian ideograph 215A7A 8E66 E8B9A6 East Asian ideograph 215A7B 8E64 E8B9A4 East Asian ideograph 215A7C 8E72 E8B9B2 East Asian ideograph 215A7D 8E6C E8B9AC East Asian ideograph 215A7E 8E7A E8B9BA East Asian ideograph 215B21 8E76 E8B9B6 East Asian ideograph 215B22 8E7C E8B9BC East Asian ideograph 215B23 8E82 E8BA82 East Asian ideograph 215B24 8E81 E8BA81 East Asian ideograph 215B25 8E87 E8BA87 East Asian ideograph 215B26 8E89 E8BA89 East Asian ideograph 215B27 8E85 E8BA85 East Asian ideograph 215B28 8E8A E8BA8A East Asian ideograph 215B29 8E8D E8BA8D East Asian ideograph (variant of EACC 4B5B29) 215B2A 8E91 E8BA91 East Asian ideograph 215B2B 8EA1 E8BAA1 East Asian ideograph 215B2C 8EAA E8BAAA East Asian ideograph 215B2D 8EAB E8BAAB East Asian ideograph 215B2E 8EAC E8BAAC East Asian ideograph 215B2F 8EB2 E8BAB2 East Asian ideograph 215B30 8EBA E8BABA East Asian ideograph 215B31 8EC0 E8BB80 East Asian ideograph 215B32 8ECA E8BB8A East Asian ideograph 215B33 8ECB E8BB8B East Asian ideograph 215B34 8ECD E8BB8D East Asian ideograph 215B35 8ECC E8BB8C East Asian ideograph 215B36 8ED2 E8BB92 East Asian ideograph 215B37 8ED4 E8BB94 East Asian ideograph 215B38 8EDF E8BB9F East Asian ideograph 215B39 8EDB E8BB9B East Asian ideograph 215B3A 8EFB E8BBBB East Asian ideograph 215B3B 8EF8 E8BBB8 East Asian ideograph 215B3C 8EFC E8BBBC East Asian ideograph 215B3D 8F03 E8BC83 East Asian ideograph 215B3E 8EFE E8BBBE East Asian ideograph 215B3F 8F09 E8BC89 East Asian ideograph 215B40 8F0A E8BC8A East Asian ideograph 215B41 8F14 E8BC94 East Asian ideograph 215B42 8F12 E8BC92 East Asian ideograph 215B43 8F15 E8BC95 East Asian ideograph 215B44 8F13 E8BC93 East Asian ideograph 215B45 8F26 E8BCA6 East Asian ideograph 215B46 8F1B E8BC9B East Asian ideograph 215B47 8F1F E8BC9F East Asian ideograph 215B48 8F1D E8BC9D East Asian ideograph 215B49 8F29 E8BCA9 East Asian ideograph 215B4A 8F2A E8BCAA East Asian ideograph 215B4B 8F1C E8BC9C East Asian ideograph 215B4C 8F3B E8BCBB East Asian ideograph 215B4D 8F2F E8BCAF East Asian ideograph 215B4E 8F38 E8BCB8 East Asian ideograph 215B4F 8F44 E8BD84 East Asian ideograph 215B50 8F3E E8BCBE East Asian ideograph 215B51 8F45 E8BD85 East Asian ideograph 215B52 8F42 E8BD82 East Asian ideograph (variant of EACC 4B5B52) 215B53 8F3F E8BCBF East Asian ideograph 215B54 8F4D E8BD8D East Asian ideograph 215B55 8F49 E8BD89 East Asian ideograph 215B56 8F54 E8BD94 East Asian ideograph 215B57 8F4E E8BD8E East Asian ideograph 215B58 8F5F E8BD9F East Asian ideograph 215B59 8F61 E8BDA1 East Asian ideograph 215B5A 8F9B E8BE9B East Asian ideograph 215B5B 8F9C E8BE9C East Asian ideograph 215B5C 8F9F E8BE9F East Asian ideograph 215B5D 8FA3 E8BEA3 East Asian ideograph 215B5E 8FA8 E8BEA8 East Asian ideograph 215B5F 8FA6 E8BEA6 East Asian ideograph 215B60 8FAD E8BEAD East Asian ideograph 215B61 8FAF E8BEAF East Asian ideograph 215B62 8FB0 E8BEB0 East Asian ideograph 215B63 8FB1 E8BEB1 East Asian ideograph 215B64 8FB2 E8BEB2 East Asian ideograph 215B66 8FC6 E8BF86 East Asian ideograph 215B67 8FC5 E8BF85 East Asian ideograph 215B68 8FC4 E8BF84 East Asian ideograph 215B69 5DE1 E5B7A1 East Asian ideograph 215B6A 8FCE E8BF8E East Asian ideograph 215B6B 8FD1 E8BF91 East Asian ideograph 215B6C 8FD4 E8BF94 East Asian ideograph 215B6D 8FF0 E8BFB0 East Asian ideograph (variant of EACC 275B6D) 215B6E 8FE6 E8BFA6 East Asian ideograph 215B6F 8FE2 E8BFA2 East Asian ideograph 215B70 8FEA E8BFAA East Asian ideograph 215B71 8FE5 E8BFA5 East Asian ideograph 215B73 8FEB E8BFAB East Asian ideograph 215B74 9001 E98081 East Asian ideograph 215B75 9006 E98086 East Asian ideograph 215B76 8FF7 E8BFB7 East Asian ideograph 215B77 9000 E98080 East Asian ideograph 215B7A 9003 E98083 East Asian ideograph 215B7B 8FFD E8BFBD East Asian ideograph 215B7C 9005 E98085 East Asian ideograph 215B7D 9019 E98099 East Asian ideograph 215B7E 9023 E980A3 East Asian ideograph 215C21 901F E9809F East Asian ideograph 215C22 9017 E98097 East Asian ideograph 215C23 901D E9809D East Asian ideograph 215C24 9010 E98090 East Asian ideograph 215C26 900D E9808D East Asian ideograph 215C27 901E E9809E East Asian ideograph 215C28 901A E9809A East Asian ideograph 215C29 9020 E980A0 East Asian ideograph 215C2A 900F E9808F East Asian ideograph 215C2B 9022 E980A2 East Asian ideograph 215C2C 9016 E98096 East Asian ideograph 215C2D 901B E9809B East Asian ideograph 215C2E 9014 E98094 East Asian ideograph 215C2F 902E E980AE East Asian ideograph 215C30 9035 E980B5 East Asian ideograph 215C31 9031 E980B1 East Asian ideograph 215C32 9038 E980B8 East Asian ideograph (variant of EACC 4B5C32) 215C33 9032 E980B2 East Asian ideograph 215C34 904B E9818B East Asian ideograph 215C36 9053 E98193 East Asian ideograph 215C37 9042 E98182 East Asian ideograph 215C38 9050 E98190 East Asian ideograph 215C39 9054 E98194 East Asian ideograph 215C3A 9055 E98195 East Asian ideograph 215C3B 903C E980BC East Asian ideograph 215C3C 9047 E98187 East Asian ideograph 215C3D 904F E9818F East Asian ideograph 215C3E 904E E9818E East Asian ideograph 215C3F 904D E9818D East Asian ideograph 215C40 9051 E98191 East Asian ideograph 215C41 9041 E98181 East Asian ideograph 215C42 903E E980BE East Asian ideograph 215C43 9058 E98198 East Asian ideograph 215C44 9060 E981A0 East Asian ideograph 215C45 905C E9819C East Asian ideograph 215C46 9063 E981A3 East Asian ideograph 215C47 9065 E981A5 East Asian ideograph 215C48 905E E9819E East Asian ideograph 215C49 9069 E981A9 East Asian ideograph 215C4A 906E E981AE East Asian ideograph 215C4B 9068 E981A8 East Asian ideograph 215C4C 906D E981AD East Asian ideograph 215C4D 9075 E981B5 East Asian ideograph 215C4E 9074 E981B4 East Asian ideograph 215C4F 9078 E981B8 East Asian ideograph 215C50 9072 E981B2 East Asian ideograph 215C51 9077 E981B7 East Asian ideograph 215C52 907C E981BC East Asian ideograph 215C53 907A E981BA East Asian ideograph 215C54 907F E981BF East Asian ideograph 215C55 907D E981BD East Asian ideograph 215C56 9081 E98281 East Asian ideograph 215C57 9084 E98284 East Asian ideograph 215C58 9082 E98282 East Asian ideograph 215C59 9080 E98280 East Asian ideograph 215C5A 9087 E98287 East Asian ideograph 215C5B 908A E9828A East Asian ideograph 215C5C 9090 E98290 East Asian ideograph 215C5D 908F E9828F East Asian ideograph 215C5E 9091 E98291 East Asian ideograph 215C5F 9095 E98295 East Asian ideograph 215C60 90A3 E982A3 East Asian ideograph 215C61 90A2 E982A2 East Asian ideograph 215C62 90AA E982AA East Asian ideograph 215C63 90A6 E982A6 East Asian ideograph 215C64 90B5 E982B5 East Asian ideograph 215C65 90B1 E982B1 East Asian ideograph 215C66 90B8 E982B8 East Asian ideograph 215C67 90CE E9838E East Asian ideograph 215C68 90CA E9838A East Asian ideograph 215C6A 90E1 E983A1 East Asian ideograph 215C6B 90E8 E983A8 East Asian ideograph 215C6C 90ED E983AD East Asian ideograph 215C6D 90F5 E983B5 East Asian ideograph 215C6E 90FD E983BD East Asian ideograph 215C6F 9102 E98482 East Asian ideograph 215C70 9109 E98489 East Asian ideograph 215C71 9112 E98492 East Asian ideograph 215C72 9119 E98499 East Asian ideograph 215C73 912D E984AD East Asian ideograph 215C74 9130 E984B0 East Asian ideograph 215C75 9127 E984A7 East Asian ideograph 215C76 9131 E984B1 East Asian ideograph 215C77 9139 E984B9 East Asian ideograph (variant of EACC 4B5C77) 215C78 9149 E98589 East Asian ideograph 215C79 914B E9858B East Asian ideograph 215C7A 914A E9858A East Asian ideograph 215C7B 9152 E98592 East Asian ideograph 215C7C 914D E9858D East Asian ideograph 215C7D 914C E9858C East Asian ideograph 215C7E 9157 E98597 East Asian ideograph 215D21 9163 E985A3 East Asian ideograph 215D22 9165 E985A5 East Asian ideograph 215D23 916C E985AC East Asian ideograph 215D24 9169 E985A9 East Asian ideograph 215D25 916A E985AA East Asian ideograph 215D26 9175 E985B5 East Asian ideograph 215D27 9178 E985B8 East Asian ideograph 215D28 9177 E985B7 East Asian ideograph 215D29 9187 E98687 East Asian ideograph 215D2A 9189 E98689 East Asian ideograph 215D2B 918B E9868B East Asian ideograph 215D2C 9183 E98683 East Asian ideograph 215D2D 9192 E98692 East Asian ideograph 215D2E 91A3 E986A3 East Asian ideograph 215D2F 919E E9869E East Asian ideograph 215D30 919C E9869C East Asian ideograph 215D31 91AB E986AB East Asian ideograph 215D32 91AC E986AC East Asian ideograph 215D33 91BA E986BA East Asian ideograph 215D34 91C0 E98780 East Asian ideograph 215D35 91C1 E98781 East Asian ideograph 215D36 91C7 E98787 East Asian ideograph 215D37 91C9 E98789 East Asian ideograph 215D38 91CB E9878B East Asian ideograph 215D3A 91CD E9878D East Asian ideograph 215D3B 91CE E9878E East Asian ideograph 215D3C 91CF E9878F East Asian ideograph 215D3D 91D0 E98790 East Asian ideograph 215D3E 91D1 E98791 East Asian ideograph 215D3F 91DD E9879D East Asian ideograph 215D40 91D8 E98798 East Asian ideograph 215D41 91D7 E98797 East Asian ideograph 215D42 91DC E9879C East Asian ideograph 215D43 91F5 E987B5 East Asian ideograph 215D44 91E6 E987A6 East Asian ideograph 215D45 91E3 E987A3 East Asian ideograph 215D46 91E7 E987A7 East Asian ideograph 215D47 9223 E988A3 East Asian ideograph 215D48 920D E9888D East Asian ideograph 215D49 9215 E98895 East Asian ideograph 215D4A 9209 E98889 East Asian ideograph 215D4B 9214 E98894 East Asian ideograph 215D4C 921E E9889E East Asian ideograph 215D4D 9210 E98890 East Asian ideograph 215D4F 9237 E988B7 East Asian ideograph 215D50 9238 E988B8 East Asian ideograph 215D51 923D E988BD East Asian ideograph 215D52 923E E988BE East Asian ideograph 215D53 9240 E98980 East Asian ideograph 215D54 924B E9898B East Asian ideograph 215D55 925B E9899B East Asian ideograph 215D56 9264 E989A4 East Asian ideograph 215D57 9251 E98991 East Asian ideograph 215D58 9234 E988B4 East Asian ideograph (variant of EACC 4B5D58) 215D59 9278 E989B8 East Asian ideograph 215D5A 9280 E98A80 East Asian ideograph 215D5B 92AC E98AAC East Asian ideograph 215D5C 9285 E98A85 East Asian ideograph 215D5D 9298 E98A98 East Asian ideograph 215D5E 9296 E98A96 East Asian ideograph 215D5F 927B E989BB East Asian ideograph 215D60 9293 E98A93 East Asian ideograph 215D61 929C E98A9C East Asian ideograph 215D62 92C5 E98B85 East Asian ideograph 215D63 92BB E98ABB East Asian ideograph 215D64 92B3 E98AB3 East Asian ideograph 215D65 92EA E98BAA East Asian ideograph 215D66 92B7 E98AB7 East Asian ideograph 215D67 92C1 E98B81 East Asian ideograph 215D68 92E4 E98BA4 East Asian ideograph 215D69 92BC E98ABC East Asian ideograph 215D6A 92D2 E98B92 East Asian ideograph 215D6B 9320 E98CA0 East Asian ideograph 215D6C 9336 E98CB6 East Asian ideograph 215D6D 92F8 E98BB8 East Asian ideograph 215D6E 9333 E98CB3 East Asian ideograph 215D6F 932F E98CAF East Asian ideograph 215D70 9322 E98CA2 East Asian ideograph 215D71 92FC E98BBC East Asian ideograph 215D72 932B E98CAB East Asian ideograph 215D73 931A E98C9A East Asian ideograph 215D74 9304 E98C84 East Asian ideograph 215D75 9310 E98C90 East Asian ideograph 215D76 9326 E98CA6 East Asian ideograph 215D77 934D E98D8D East Asian ideograph 215D78 9382 E98E82 East Asian ideograph 215D79 9375 E98DB5 East Asian ideograph 215D7A 9365 E98DA5 East Asian ideograph 215D7C 934B E98D8B East Asian ideograph 215D7D 9328 E98CA8 East Asian ideograph 215D7E 9370 E98DB0 East Asian ideograph 215E21 937E E98DBE East Asian ideograph 215E22 9318 E98C98 East Asian ideograph 215E23 936C E98DAC East Asian ideograph 215E24 935B E98D9B East Asian ideograph 215E25 938A E98E8A East Asian ideograph 215E26 9394 E98E94 East Asian ideograph 215E27 93AE E98EAE East Asian ideograph 215E28 9396 E98E96 East Asian ideograph 215E29 93A2 E98EA2 East Asian ideograph 215E2A 93B3 E98EB3 East Asian ideograph 215E2B 93E1 E98FA1 East Asian ideograph 215E2C 93D1 E98F91 East Asian ideograph 215E2D 93D6 E98F96 East Asian ideograph 215E2E 93C3 E98F83 East Asian ideograph 215E2F 93DF E98F9F East Asian ideograph 215E30 93D7 E98F97 East Asian ideograph 215E31 93C8 E98F88 East Asian ideograph 215E32 93E2 E98FA2 East Asian ideograph 215E33 93DC E98F9C East Asian ideograph 215E34 93E4 E98FA4 East Asian ideograph 215E35 93DD E98F9D East Asian ideograph 215E36 93CD E98F8D East Asian ideograph 215E37 93D8 E98F98 East Asian ideograph 215E39 9403 E99083 East Asian ideograph 215E3A 942E E990AE East Asian ideograph 215E3B 93FD E98FBD East Asian ideograph 215E3C 9433 E990B3 East Asian ideograph 215E3D 9435 E990B5 East Asian ideograph 215E3E 943A E990BA East Asian ideograph 215E3F 9438 E990B8 East Asian ideograph 215E40 9432 E990B2 East Asian ideograph 215E42 9451 E99191 East Asian ideograph 215E43 9444 E99184 East Asian ideograph 215E44 9463 E991A3 East Asian ideograph 215E45 9460 E991A0 East Asian ideograph 215E46 9472 E991B2 East Asian ideograph 215E47 9470 E991B0 East Asian ideograph 215E48 947E E991BE East Asian ideograph 215E49 947C E991BC East Asian ideograph 215E4A 947D E991BD East Asian ideograph 215E4B 947F E991BF East Asian ideograph 215E4C 9577 E995B7 East Asian ideograph 215E4D 9580 E99680 East Asian ideograph 215E4E 9582 E99682 East Asian ideograph 215E4F 9583 E99683 East Asian ideograph 215E50 9589 E99689 East Asian ideograph 215E51 9594 E99694 East Asian ideograph 215E52 958F E9968F East Asian ideograph 215E53 958B E9968B East Asian ideograph 215E54 9591 E99691 East Asian ideograph 215E55 9593 E99693 East Asian ideograph 215E56 9592 E99692 East Asian ideograph 215E57 9598 E99698 East Asian ideograph 215E58 95A1 E996A1 East Asian ideograph 215E59 95A8 E996A8 East Asian ideograph 215E5A 95A9 E996A9 East Asian ideograph 215E5B 95A3 E996A3 East Asian ideograph 215E5C 95A5 E996A5 East Asian ideograph 215E5D 95A4 E996A4 East Asian ideograph 215E5E 95B1 E996B1 East Asian ideograph 215E5F 95AD E996AD East Asian ideograph 215E60 95BB E996BB East Asian ideograph 215E61 95CA E9978A East Asian ideograph 215E62 95CB E9978B East Asian ideograph 215E63 95CC E9978C East Asian ideograph 215E64 95C8 E99788 East Asian ideograph 215E65 95C6 E99786 East Asian ideograph 215E67 95D6 E99796 East Asian ideograph 215E68 95D0 E99790 East Asian ideograph 215E69 95DC E9979C East Asian ideograph 215E6A 95E1 E997A1 East Asian ideograph 215E6B 95E2 E997A2 East Asian ideograph 215E6C 961C E9989C East Asian ideograph 215E6D 9621 E998A1 East Asian ideograph 215E6E 9632 E998B2 East Asian ideograph 215E6F 9631 E998B1 East Asian ideograph 215E70 962E E998AE East Asian ideograph 215E71 962A E998AA East Asian ideograph 215E72 9640 E99980 East Asian ideograph 215E73 963F E998BF East Asian ideograph 215E74 963B E998BB East Asian ideograph 215E75 9644 E99984 East Asian ideograph 215E76 9650 E99990 East Asian ideograph 215E77 964C E9998C East Asian ideograph 215E78 964B E9998B East Asian ideograph 215E79 964D E9998D East Asian ideograph 215E7A 9662 E999A2 East Asian ideograph 215E7B 9663 E999A3 East Asian ideograph 215E7C 965B E9999B East Asian ideograph 215E7D 9661 E999A1 East Asian ideograph 215E7E 965D E9999D East Asian ideograph 215F21 9664 E999A4 East Asian ideograph 215F22 966A E999AA East Asian ideograph 215F23 9673 E999B3 East Asian ideograph 215F24 9678 E999B8 East Asian ideograph 215F25 9675 E999B5 East Asian ideograph 215F26 9672 E999B2 East Asian ideograph 215F27 9676 E999B6 East Asian ideograph 215F28 9677 E999B7 East Asian ideograph 215F29 9674 E999B4 East Asian ideograph 215F2A 9670 E999B0 East Asian ideograph 215F2B 968A E99A8A East Asian ideograph 215F2C 968E E99A8E East Asian ideograph 215F2D 968B E99A8B East Asian ideograph 215F2E 967D E999BD East Asian ideograph 215F2F 9685 E99A85 East Asian ideograph 215F30 9686 E99A86 East Asian ideograph 215F31 968D E99A8D East Asian ideograph 215F32 9698 E99A98 East Asian ideograph 215F33 9694 E99A94 East Asian ideograph 215F34 9699 E99A99 East Asian ideograph 215F35 9695 E99A95 East Asian ideograph 215F36 969C E99A9C East Asian ideograph 215F37 969B E99A9B East Asian ideograph 215F38 96A7 E99AA7 East Asian ideograph 215F39 96A8 E99AA8 East Asian ideograph 215F3A 96AA E99AAA East Asian ideograph 215F3B 96B1 E99AB1 East Asian ideograph 215F3C 96B4 E99AB4 East Asian ideograph 215F3D 96B8 E99AB8 East Asian ideograph 215F3E 96BB E99ABB East Asian ideograph 215F3F 96C0 E99B80 East Asian ideograph 215F40 96C7 E99B87 East Asian ideograph 215F41 96C6 E99B86 East Asian ideograph 215F42 96C4 E99B84 East Asian ideograph 215F43 96C1 E99B81 East Asian ideograph 215F44 96C5 E99B85 East Asian ideograph 215F45 96CD E99B8D East Asian ideograph 215F46 96CB E99B8B East Asian ideograph 215F47 96C9 E99B89 East Asian ideograph 215F48 96CC E99B8C East Asian ideograph 215F49 96D5 E99B95 East Asian ideograph 215F4A 96D6 E99B96 East Asian ideograph 215F4B 96DC E99B9C East Asian ideograph 215F4C 96DE E99B9E East Asian ideograph 215F4D 96DB E99B9B East Asian ideograph 215F4E 96D9 E99B99 East Asian ideograph 215F4F 96E2 E99BA2 East Asian ideograph 215F50 96E3 E99BA3 East Asian ideograph (variant of EACC 4B5F50) 215F51 96E8 E99BA8 East Asian ideograph 215F52 96EA E99BAA East Asian ideograph 215F53 96EF E99BAF East Asian ideograph 215F54 96F2 E99BB2 East Asian ideograph 215F55 96FB E99BBB East Asian ideograph 215F56 96F7 E99BB7 East Asian ideograph 215F57 96F9 E99BB9 East Asian ideograph 215F58 96F6 E99BB6 East Asian ideograph 215F59 9700 E99C80 East Asian ideograph 215F5A 9707 E99C87 East Asian ideograph 215F5B 9704 E99C84 East Asian ideograph 215F5C 9709 E99C89 East Asian ideograph 215F5D 9706 E99C86 East Asian ideograph 215F5E 9711 E99C91 East Asian ideograph 215F5F 970E E99C8E East Asian ideograph 215F60 9716 E99C96 East Asian ideograph 215F61 970F E99C8F East Asian ideograph 215F62 970D E99C8D East Asian ideograph 215F63 9713 E99C93 East Asian ideograph 215F64 971C E99C9C East Asian ideograph 215F65 971E E99C9E East Asian ideograph 215F66 972A E99CAA East Asian ideograph 215F67 9727 E99CA7 East Asian ideograph 215F68 9738 E99CB8 East Asian ideograph 215F69 9739 E99CB9 East Asian ideograph 215F6A 9732 E99CB2 East Asian ideograph 215F6B 973D E99CBD East Asian ideograph 215F6C 973E E99CBE East Asian ideograph 215F6D 9744 E99D84 East Asian ideograph 215F6E 9742 E99D82 East Asian ideograph 215F6F 9748 E99D88 East Asian ideograph 215F70 9751 E99D91 East Asian ideograph 215F71 9756 E99D96 East Asian ideograph (variant of EACC 4B5F71) 215F72 975B E99D9B East Asian ideograph (variant of EACC 4B5F72) 215F73 975C E99D9C East Asian ideograph 215F74 975E E99D9E East Asian ideograph 215F75 9760 E99DA0 East Asian ideograph 215F76 9761 E99DA1 East Asian ideograph 215F78 9766 E99DA6 East Asian ideograph 215F79 9768 E99DA8 East Asian ideograph 215F7A 9769 E99DA9 East Asian ideograph 215F7B 9776 E99DB6 East Asian ideograph 215F7C 9774 E99DB4 East Asian ideograph 215F7D 977C E99DBC East Asian ideograph 215F7E 9785 E99E85 East Asian ideograph 216021 978D E99E8D East Asian ideograph 216022 978B E99E8B East Asian ideograph 216023 978F E99E8F East Asian ideograph 216024 9798 E99E98 East Asian ideograph 216025 97A0 E99EA0 East Asian ideograph 216026 97A3 E99EA3 East Asian ideograph 216027 97A6 E99EA6 East Asian ideograph 216028 97AD E99EAD East Asian ideograph 216029 97C3 E99F83 East Asian ideograph 21602A 97C1 E99F81 East Asian ideograph 21602B 97C6 E99F86 East Asian ideograph 21602C 97CB E99F8B East Asian ideograph 21602D 97CC E99F8C East Asian ideograph 21602E 97D3 E99F93 East Asian ideograph 21602F 97DC E99F9C East Asian ideograph 216030 97ED E99FAD East Asian ideograph 216031 97F3 E99FB3 East Asian ideograph 216032 7AE0 E7ABA0 East Asian ideograph 216033 7ADF E7AB9F East Asian ideograph 216034 97F6 E99FB6 East Asian ideograph 216035 97FB E99FBB East Asian ideograph 216036 97FF E99FBF East Asian ideograph (variant of EACC 456036) 216037 9801 E9A081 East Asian ideograph 216038 9802 E9A082 East Asian ideograph 216039 9803 E9A083 East Asian ideograph 21603A 9805 E9A085 East Asian ideograph 21603B 9806 E9A086 East Asian ideograph 21603C 9808 E9A088 East Asian ideograph 21603D 9810 E9A090 East Asian ideograph 21603E 980A E9A08A East Asian ideograph 21603F 9811 E9A091 East Asian ideograph 216040 9813 E9A093 East Asian ideograph 216041 9812 E9A092 East Asian ideograph 216042 980C E9A08C East Asian ideograph 216043 9817 E9A097 East Asian ideograph 216044 9818 E9A098 East Asian ideograph (variant of EACC 4B6044) 216045 9821 E9A0A1 East Asian ideograph 216046 982D E9A0AD East Asian ideograph 216047 9830 E9A0B0 East Asian ideograph 216048 9838 E9A0B8 East Asian ideograph 216049 983B E9A0BB East Asian ideograph 21604A 9839 E9A0B9 East Asian ideograph 21604B 9837 E9A0B7 East Asian ideograph 21604C 9824 E9A0A4 East Asian ideograph 21604D 9846 E9A186 East Asian ideograph 21604E 9854 E9A194 East Asian ideograph 21604F 984D E9A18D East Asian ideograph 216050 984C E9A18C East Asian ideograph 216051 984E E9A18E East Asian ideograph 216052 9853 E9A193 East Asian ideograph 216053 985E E9A19E East Asian ideograph (variant of EACC 4B6053) 216054 985A E9A19A East Asian ideograph 216055 9858 E9A198 East Asian ideograph 216056 9867 E9A1A7 East Asian ideograph 216057 986B E9A1AB East Asian ideograph 216058 986F E9A1AF East Asian ideograph 216059 9871 E9A1B1 East Asian ideograph 21605A 9870 E9A1B0 East Asian ideograph 21605B 98A8 E9A2A8 East Asian ideograph 21605C 98AF E9A2AF East Asian ideograph 21605D 98B1 E9A2B1 East Asian ideograph 21605E 98B3 E9A2B3 East Asian ideograph 21605F 98B6 E9A2B6 East Asian ideograph 216060 98BA E9A2BA East Asian ideograph 216061 98BC E9A2BC East Asian ideograph 216062 98C4 E9A384 East Asian ideograph 216063 98DB E9A39B East Asian ideograph 216064 98DF E9A39F East Asian ideograph 216065 98E2 E9A3A2 East Asian ideograph 216066 98E7 E9A3A7 East Asian ideograph 216067 98E9 E9A3A9 East Asian ideograph 216068 98ED E9A3AD East Asian ideograph 216069 98EA E9A3AA East Asian ideograph 21606A 98EE E9A3AE East Asian ideograph 21606B 98EF E9A3AF East Asian ideograph 21606C 98FC E9A3BC East Asian ideograph 21606D 98F4 E9A3B4 East Asian ideograph 21606E 98FD E9A3BD East Asian ideograph 21606F 98FE E9A3BE East Asian ideograph 216070 9903 E9A483 East Asian ideograph 216071 990A E9A48A East Asian ideograph 216072 990C E9A48C East Asian ideograph 216073 9909 E9A489 East Asian ideograph 216074 9910 E9A490 East Asian ideograph 216075 9912 E9A492 East Asian ideograph 216076 9918 E9A498 East Asian ideograph 216077 9913 E9A493 East Asian ideograph 216078 9905 E9A485 East Asian ideograph 216079 9928 E9A4A8 East Asian ideograph 21607A 991E E9A49E East Asian ideograph 21607B 991B E9A49B East Asian ideograph 21607C 9921 E9A4A1 East Asian ideograph 21607D 9935 E9A4B5 East Asian ideograph 21607E 993E E9A4BE East Asian ideograph 216121 993F E9A4BF East Asian ideograph 216122 993D E9A4BD East Asian ideograph 216123 9945 E9A585 East Asian ideograph 216124 9952 E9A592 East Asian ideograph 216125 9951 E9A591 East Asian ideograph 216126 995C E9A59C East Asian ideograph 216127 995E E9A59E East Asian ideograph 216128 9996 E9A696 East Asian ideograph 216129 9999 E9A699 East Asian ideograph 21612A 99A5 E9A6A5 East Asian ideograph 21612B 99A8 E9A6A8 East Asian ideograph 21612C 99AC E9A6AC East Asian ideograph 21612D 99AE E9A6AE East Asian ideograph 21612E 99AD E9A6AD East Asian ideograph 21612F 99B3 E9A6B3 East Asian ideograph 216130 99B1 E9A6B1 East Asian ideograph 216131 99B4 E9A6B4 East Asian ideograph 216132 99C1 E9A781 East Asian ideograph 216133 99D0 E9A790 East Asian ideograph 216134 99DD E9A79D East Asian ideograph 216135 99D5 E9A795 East Asian ideograph 216136 99DF E9A79F East Asian ideograph 216137 99DB E9A79B East Asian ideograph 216138 99D2 E9A792 East Asian ideograph 216139 99D9 E9A799 East Asian ideograph 21613A 99D1 E9A791 East Asian ideograph 21613B 99ED E9A7AD East Asian ideograph 21613C 99F1 E9A7B1 East Asian ideograph 21613D 9A01 E9A881 East Asian ideograph 21613E 99FF E9A7BF East Asian ideograph 21613F 99E2 E9A7A2 East Asian ideograph 216140 9A0E E9A88E East Asian ideograph 216141 9A19 E9A899 East Asian ideograph 216142 9A16 E9A896 East Asian ideograph 216143 9A2B E9A8AB East Asian ideograph 216144 9A30 E9A8B0 East Asian ideograph 216145 9A37 E9A8B7 East Asian ideograph 216146 9A43 E9A983 East Asian ideograph 216147 9A45 E9A985 East Asian ideograph 216148 9A40 E9A980 East Asian ideograph 216149 9A3E E9A8BE East Asian ideograph 21614A 9A55 E9A995 East Asian ideograph 21614B 9A5A E9A99A East Asian ideograph 21614C 9A5B E9A99B East Asian ideograph 21614D 9A57 E9A997 East Asian ideograph 21614E 9A5F E9A99F East Asian ideograph 21614F 9A62 E9A9A2 East Asian ideograph 216150 9A65 E9A9A5 East Asian ideograph 216151 9A6A E9A9AA East Asian ideograph 216152 9AA8 E9AAA8 East Asian ideograph 216153 9AAF E9AAAF East Asian ideograph 216154 9AB0 E9AAB0 East Asian ideograph 216155 9AB7 E9AAB7 East Asian ideograph 216156 9AB8 E9AAB8 East Asian ideograph 216157 9ABC E9AABC East Asian ideograph 216158 9ACF E9AB8F East Asian ideograph 216159 9AD3 E9AB93 East Asian ideograph 21615A 9AD4 E9AB94 East Asian ideograph 21615B 9AD2 E9AB92 East Asian ideograph 21615C 9AD8 E9AB98 East Asian ideograph 21615D 9AE5 E9ABA5 East Asian ideograph 21615F 9AEE E9ABAE East Asian ideograph 216160 9AFB E9ABBB East Asian ideograph 216161 9AED E9ABAD East Asian ideograph 216162 9B03 E9AC83 East Asian ideograph 216163 9B06 E9AC86 East Asian ideograph 216164 9B0D E9AC8D East Asian ideograph 216165 9B1A E9AC9A East Asian ideograph 216166 9B22 E9ACA2 East Asian ideograph 216167 9B25 E9ACA5 East Asian ideograph 216168 9B27 E9ACA7 East Asian ideograph 21616A 9B31 E9ACB1 East Asian ideograph 21616B 9B32 E9ACB2 East Asian ideograph 21616C 9B3C E9ACBC East Asian ideograph 21616D 9B41 E9AD81 East Asian ideograph 21616E 9B42 E9AD82 East Asian ideograph 21616F 9B45 E9AD85 East Asian ideograph 216170 9B44 E9AD84 East Asian ideograph 216171 9B4F E9AD8F East Asian ideograph 216172 9B54 E9AD94 East Asian ideograph 216173 9B58 E9AD98 East Asian ideograph 216174 9B5A E9AD9A East Asian ideograph 216175 9B77 E9ADB7 East Asian ideograph 216176 9B6F E9ADAF East Asian ideograph 216177 9B91 E9AE91 East Asian ideograph 216178 9BAB E9AEAB East Asian ideograph 216179 9BAE E9AEAE East Asian ideograph 21617A 9BAA E9AEAA East Asian ideograph 21617B 9BCA E9AF8A East Asian ideograph 21617C 9BC9 E9AF89 East Asian ideograph 21617D 9BE8 E9AFA8 East Asian ideograph 21617E 9BE7 E9AFA7 East Asian ideograph 216221 9C13 E9B093 East Asian ideograph 216222 9C0D E9B08D East Asian ideograph 216223 9BFD E9AFBD East Asian ideograph 216224 9C2D E9B0AD East Asian ideograph 216225 9C25 E9B0A5 East Asian ideograph 216226 9C31 E9B0B1 East Asian ideograph 216227 9C3E E9B0BE East Asian ideograph 216228 9C3B E9B0BB East Asian ideograph 216229 9C54 E9B194 East Asian ideograph 21622A 9C57 E9B197 East Asian ideograph 21622B 9C56 E9B196 East Asian ideograph 21622C 9C49 E9B189 East Asian ideograph 21622D 9C77 E9B1B7 East Asian ideograph 21622E 9C78 E9B1B8 East Asian ideograph 21622F 9CE5 E9B3A5 East Asian ideograph 216230 9CE9 E9B3A9 East Asian ideograph 216231 9CF6 E9B3B6 East Asian ideograph 216232 9CF4 E9B3B4 East Asian ideograph 216233 9CF3 E9B3B3 East Asian ideograph 216234 9D06 E9B486 East Asian ideograph 216235 9D09 E9B489 East Asian ideograph 216236 9D15 E9B495 East Asian ideograph 216237 9D23 E9B4A3 East Asian ideograph 216238 9D28 E9B4A8 East Asian ideograph 216239 9D26 E9B4A6 East Asian ideograph 21623A 9D1B E9B49B East Asian ideograph 21623B 9D12 E9B492 East Asian ideograph (variant of EACC 4B623B) 21623C 9D3B E9B4BB East Asian ideograph 21623D 9D3F E9B4BF East Asian ideograph 21623E 9D61 E9B5A1 East Asian ideograph 21623F 9D51 E9B591 East Asian ideograph 216240 9D60 E9B5A0 East Asian ideograph 216241 9D5D E9B59D East Asian ideograph 216242 9D89 E9B689 East Asian ideograph 216243 9D72 E9B5B2 East Asian ideograph 216244 9D6A E9B5AA East Asian ideograph 216245 9D6C E9B5AC East Asian ideograph 216246 9DB4 E9B6B4 East Asian ideograph 216247 9DAF E9B6AF East Asian ideograph 216248 9DC2 E9B782 East Asian ideograph 216249 9DD3 E9B793 East Asian ideograph 21624A 9DD7 E9B797 East Asian ideograph 21624B 9DE5 E9B7A5 East Asian ideograph 21624C 9DF9 E9B7B9 East Asian ideograph 21624D 9DFA E9B7BA East Asian ideograph 21624E 9E1A E9B89A East Asian ideograph 21624F 9E1E E9B89E East Asian ideograph 216250 9E79 E9B9B9 East Asian ideograph 216251 9E7D E9B9BD East Asian ideograph 216252 9E7C E9B9BC East Asian ideograph 216253 9E7F E9B9BF East Asian ideograph 216254 9E82 E9BA82 East Asian ideograph 216255 9E8B E9BA8B East Asian ideograph 216256 9E97 E9BA97 East Asian ideograph 216257 9E92 E9BA92 East Asian ideograph 216258 9E93 E9BA93 East Asian ideograph 216259 9E9D E9BA9D East Asian ideograph 21625A 9E9F E9BA9F East Asian ideograph 21625B 9EA5 E9BAA5 East Asian ideograph 21625C 9EA9 E9BAA9 East Asian ideograph 21625D 9EB4 E9BAB4 East Asian ideograph 21625E 9EB5 E9BAB5 East Asian ideograph 21625F 9EBB E9BABB East Asian ideograph 216260 9EBC E9BABC East Asian ideograph 216261 9EBE E9BABE East Asian ideograph 216262 9EC3 E9BB83 East Asian ideograph 216263 9ECD E9BB8D East Asian ideograph 216264 9ECE E9BB8E East Asian ideograph 216265 9ECF E9BB8F East Asian ideograph 216266 9ED1 E9BB91 East Asian ideograph 216267 58A8 E5A2A8 East Asian ideograph 216268 9ED8 E9BB98 East Asian ideograph 216269 9ED4 E9BB94 East Asian ideograph 21626A 9EDE E9BB9E East Asian ideograph 21626B 9EDC E9BB9C East Asian ideograph 21626C 9EDB E9BB9B East Asian ideograph 21626D 9EDD E9BB9D East Asian ideograph 21626E 9EE0 E9BBA0 East Asian ideograph 21626F 9EE8 E9BBA8 East Asian ideograph 216270 9EEF E9BBAF East Asian ideograph 216271 9EF4 E9BBB4 East Asian ideograph 216272 9EF7 E9BBB7 East Asian ideograph 216273 9F07 E9BC87 East Asian ideograph 216274 9F0E E9BC8E East Asian ideograph 216275 9F13 E9BC93 East Asian ideograph 216276 9F15 E9BC95 East Asian ideograph 216277 9F19 E9BC99 East Asian ideograph 216278 9F20 E9BCA0 East Asian ideograph 216279 9F2C E9BCAC East Asian ideograph 21627A 9F34 E9BCB4 East Asian ideograph 21627B 9F3B E9BCBB East Asian ideograph 21627C 9F3E E9BCBE East Asian ideograph 21627D 9F4A E9BD8A East Asian ideograph 21627E 9F4B E9BD8B East Asian ideograph 216321 9F52 E9BD92 East Asian ideograph 216322 9F5F E9BD9F East Asian ideograph 216323 9F63 E9BDA3 East Asian ideograph 216324 9F61 E9BDA1 East Asian ideograph (variant of EACC 456324) 216325 9F66 E9BDA6 East Asian ideograph 216326 9F5C E9BD9C East Asian ideograph 216327 9F6C E9BDAC East Asian ideograph 216328 9F6A E9BDAA East Asian ideograph 216329 9F77 E9BDB7 East Asian ideograph 21632A 9F72 E9BDB2 East Asian ideograph 21632B 9F8D E9BE8D East Asian ideograph 21632C 9F94 E9BE94 East Asian ideograph 21632D 9F9C E9BE9C East Asian ideograph 216330 8288 E88A88 East Asian ideograph 216424 4E0F E4B88F East Asian ideograph 216425 5187 E58687 East Asian ideograph 216429 4E28 E4B8A8 East Asian ideograph 21642E 4E31 E4B8B1 East Asian ideograph 216431 4E36 E4B8B6 East Asian ideograph 216433 4E3F E4B8BF East Asian ideograph 216434 4E42 E4B982 East Asian ideograph 216437 738D E78E8D East Asian ideograph 21643C 4E5C E4B99C East Asian ideograph 21643F 6C39 E6B0B9 East Asian ideograph 216446 4E85 E4BA85 East Asian ideograph 216450 4EA0 E4BAA0 East Asian ideograph 216451 4EA2 E4BAA2 East Asian ideograph 216452 4EB3 E4BAB3 East Asian ideograph 216455 4EB6 E4BAB6 East Asian ideograph (variant of EACC 4B6455) 216458 4EB9 E4BAB9 East Asian ideograph 21645A 4EBC E4BABC East Asian ideograph 21645E 4EC9 E4BB89 East Asian ideograph 216461 4EC8 E4BB88 East Asian ideograph 216462 4ECE E4BB8E East Asian ideograph 216463 4EE8 E4BBA8 East Asian ideograph 21646B 4EE1 E4BBA1 East Asian ideograph 216472 4F08 E4BC88 East Asian ideograph 216473 4F0E E4BC8E East Asian ideograph 216475 4F03 E4BC83 East Asian ideograph 21647C 4F22 E4BCA2 East Asian ideograph 216527 4EF5 E4BBB5 East Asian ideograph 216528 4F07 E4BC87 East Asian ideograph 21652A 4F00 E4BC80 East Asian ideograph 21652C 4F0B E4BC8B East Asian ideograph 216532 4F3B E4BCBB East Asian ideograph 216536 4F58 E4BD98 East Asian ideograph 216537 4F62 E4BDA2 East Asian ideograph 216539 4F64 E4BDA4 East Asian ideograph 21653A 4F49 E4BD89 East Asian ideograph 21653F 4F3E E4BCBE East Asian ideograph 216540 4F66 E4BDA6 East Asian ideograph 216544 4F67 E4BDA7 East Asian ideograph 21654D 4F68 E4BDA8 East Asian ideograph 21654E 4F5A E4BD9A East Asian ideograph 21654F 4F5F E4BD9F East Asian ideograph 216556 4F82 E4BE82 East Asian ideograph 216557 4F7C E4BDBC East Asian ideograph 21655A 4F98 E4BE98 East Asian ideograph 21655B 4F92 E4BE92 East Asian ideograph 21655C 4F7D E4BDBD East Asian ideograph 216560 4F80 E4BE80 East Asian ideograph 216561 4F74 E4BDB4 East Asian ideograph 216562 4F76 E4BDB6 East Asian ideograph 216564 4FA2 E4BEA2 East Asian ideograph 216566 4F91 E4BE91 East Asian ideograph 216567 4F95 E4BE95 East Asian ideograph 21656C 4F4C E4BD8C East Asian ideograph 21656D 4F97 E4BE97 East Asian ideograph 21656E 4F94 E4BE94 East Asian ideograph 216570 4F79 E4BDB9 East Asian ideograph 216571 4F9A E4BE9A East Asian ideograph 216572 4F81 E4BE81 East Asian ideograph 216573 4F78 E4BDB8 East Asian ideograph 216576 4F9C E4BE9C East Asian ideograph 216577 4F90 E4BE90 East Asian ideograph 21657B 4F7A E4BDBA East Asian ideograph 21657C 4FCD E4BF8D East Asian ideograph 216622 4FE4 E4BFA4 East Asian ideograph 216626 4FB7 E4BEB7 East Asian ideograph 216627 4FC5 E4BF85 East Asian ideograph 216629 4FC9 E4BF89 East Asian ideograph 21662A 4FE5 E4BFA5 East Asian ideograph 21662C 4FE7 E4BFA7 East Asian ideograph 216633 4FDC E4BF9C East Asian ideograph 216635 4FD4 E4BF94 East Asian ideograph 216637 4FC1 E4BF81 East Asian ideograph 21663B 4FDB E4BF9B East Asian ideograph 21663E 4FC6 E4BF86 East Asian ideograph 216643 4FB9 E4BEB9 East Asian ideograph 216646 501E E5809E East Asian ideograph 216648 503F E580BF East Asian ideograph 216649 5005 E58085 East Asian ideograph 21664C 5007 E58087 East Asian ideograph 21664D 5013 E58093 East Asian ideograph 21664E 5022 E580A2 East Asian ideograph 216652 4FF5 E4BFB5 East Asian ideograph 216659 4FF4 E4BFB4 East Asian ideograph 21665B 5037 E580B7 East Asian ideograph 21665E 502E E580AE East Asian ideograph 216661 4FF6 E4BFB6 East Asian ideograph 216662 501C E5809C East Asian ideograph 216666 502C E580AC East Asian ideograph 216669 5010 E58090 East Asian ideograph 216679 503D E580BD East Asian ideograph 216722 506F E581AF East Asian ideograph 216723 5050 E58190 East Asian ideograph 216725 5070 E581B0 East Asian ideograph 216729 5053 E58193 East Asian ideograph 21672A 506A E581AA East Asian ideograph 21672C 5056 E58196 East Asian ideograph 216731 506D E581AD East Asian ideograph 216738 505D E5819D East Asian ideograph 216739 5048 E58188 East Asian ideograph 21673B 5058 E58198 East Asian ideograph 21673C 5072 E581B2 East Asian ideograph 216741 5041 E58181 East Asian ideograph 216746 5015 E58095 East Asian ideograph 216748 507A E581BA East Asian ideograph 21674A 506C E581AC East Asian ideograph 21674B 505F E5819F East Asian ideograph 21674D 506B E581AB East Asian ideograph 21674E 5094 E58294 East Asian ideograph 216750 509E E5829E East Asian ideograph 216752 509B E5829B East Asian ideograph 216753 509A E5829A East Asian ideograph 216757 50A3 E582A3 East Asian ideograph 21675A 508C E5828C East Asian ideograph 21675C 5088 E58288 East Asian ideograph 216762 508E E5828E East Asian ideograph 216764 5095 E58295 East Asian ideograph 216767 50A6 E582A6 East Asian ideograph 21676A 5092 E58292 East Asian ideograph 21676C 509C E5829C East Asian ideograph 216771 50C7 E58387 East Asian ideograph 216775 50C9 E58389 East Asian ideograph 21677B 50CA E5838A East Asian ideograph 21677C 50B4 E582B4 East Asian ideograph 216822 50C2 E58382 East Asian ideograph 21682C 50BA E582BA East Asian ideograph 21682E 50CD E5838D East Asian ideograph 216832 50D4 E58394 East Asian ideograph 216834 50EF E583AF East Asian ideograph 216835 50E6 E583A6 East Asian ideograph 21683A 50F4 E583B4 East Asian ideograph 21683B 50CE E5838E East Asian ideograph 21683C 50DD E5839D East Asian ideograph 216841 50F3 E583B3 East Asian ideograph 216842 50E8 E583A8 East Asian ideograph 216844 50F0 E583B0 East Asian ideograph 216846 50D9 E58399 East Asian ideograph 216855 50EC E583AC East Asian ideograph 21685B 510E E5848E East Asian ideograph 21685F 5105 E58485 East Asian ideograph 216861 50FC E583BC East Asian ideograph 216865 5106 E58486 East Asian ideograph 216866 5107 E58487 East Asian ideograph 216867 510F E5848F East Asian ideograph 216868 50FE E583BE East Asian ideograph 216869 510B E5848B East Asian ideograph 21686A 50FD E583BD East Asian ideograph 21686D 5101 E58481 East Asian ideograph 216871 5115 E58495 East Asian ideograph 216872 5113 E58493 East Asian ideograph 216878 511A E5849A East Asian ideograph 216879 9797 E99E97 East Asian ideograph 21687E 5126 E584A6 East Asian ideograph 216929 5124 E584A4 East Asian ideograph 21692B 5129 E584A9 East Asian ideograph 216930 5131 E584B1 East Asian ideograph 21693E 5135 E584B5 East Asian ideograph 216940 5133 E584B3 East Asian ideograph 216944 513A E584BA East Asian ideograph 216947 5139 E584B9 East Asian ideograph 216948 513B E584BB East Asian ideograph 216951 5159 E58599 East Asian ideograph 216952 515B E5859B East Asian ideograph 216955 515D E5859D East Asian ideograph 216956 515E E5859E East Asian ideograph 216958 515F E5859F East Asian ideograph 216959 5161 E585A1 East Asian ideograph 21695C 5163 E585A3 East Asian ideograph 216967 5182 E58682 East Asian ideograph 216969 5184 E58684 East Asian ideograph 21696E 518F E5868F East Asian ideograph 216970 5194 E58694 East Asian ideograph 216971 5193 E58693 East Asian ideograph 216975 5196 E58696 East Asian ideograph 21697B 51A1 E586A1 East Asian ideograph 21697C 51A3 E586A3 East Asian ideograph 216A22 51AA E586AA East Asian ideograph 216A23 51AB E586AB East Asian ideograph 216A26 51B1 E586B1 East Asian ideograph 216A35 51BC E586BC East Asian ideograph 216A43 51CA E5878A East Asian ideograph 216A46 51C7 E58787 East Asian ideograph 216A4E 51D1 E58791 East Asian ideograph 216A4F 51D0 E58790 East Asian ideograph 216A54 51D3 E58793 East Asian ideograph 216A63 51D9 E58799 East Asian ideograph 216A66 51DF E5879F East Asian ideograph 216A68 51E2 E587A2 East Asian ideograph 216A73 5160 E585A0 East Asian ideograph 216A78 51F5 E587B5 East Asian ideograph 216A79 51F7 E587B7 East Asian ideograph 216B24 5213 E58893 East Asian ideograph 216B26 5216 E58896 East Asian ideograph 216B2A 521C E5889C East Asian ideograph 216B33 5231 E588B1 East Asian ideograph 216B36 5235 E588B5 East Asian ideograph 216B37 5232 E588B2 East Asian ideograph 216B39 5233 E588B3 East Asian ideograph 216B3E 5244 E58984 East Asian ideograph 216B43 5249 E58989 East Asian ideograph 216B47 5260 E589A0 East Asian ideograph 216B4B 525A E5899A East Asian ideograph 216B4C 5252 E58992 East Asian ideograph 216B4D 525E E5899E East Asian ideograph 216B50 525F E5899F East Asian ideograph 216B53 5255 E58995 East Asian ideograph 216B5B 526E E589AE East Asian ideograph 216B5E 5268 E589A8 East Asian ideograph 216B5F 7B9A E7AE9A East Asian ideograph 216B6B 5278 E589B8 East Asian ideograph 216B74 5282 E58A82 East Asian ideograph 216B75 5281 E58A81 East Asian ideograph 216B79 528C E58A8C East Asian ideograph 216B7A 528A E58A8A East Asian ideograph 216B7C 5290 E58A90 East Asian ideograph 216C21 5293 E58A93 East Asian ideograph 216C27 5296 E58A96 East Asian ideograph 216C29 5298 E58A98 East Asian ideograph 216C2B 529A E58A9A East Asian ideograph 216C2C 5299 E58A99 East Asian ideograph 216C2E 52A6 E58AA6 East Asian ideograph 216C31 52AD E58AAD East Asian ideograph 216C33 52AE E58AAE East Asian ideograph 216C37 52BB E58ABB East Asian ideograph 216C38 52BC E58ABC East Asian ideograph 216C3C 52CA E58B8A East Asian ideograph 216C3D 52CD E58B8D East Asian ideograph 216C40 52D0 E58B90 East Asian ideograph 216C41 52D1 E58B91 East Asian ideograph 216C46 52D4 E58B94 East Asian ideograph 216C48 52D6 E58B96 East Asian ideograph 216C4C 52E3 E58BA3 East Asian ideograph 216C4E 52E1 E58BA1 East Asian ideograph 216C50 55E7 E597A7 East Asian ideograph 216C53 52E9 E58BA9 East Asian ideograph 216C58 52F0 E58BB0 East Asian ideograph 216C5A 52F1 E58BB1 East Asian ideograph 216C5E 52F7 E58BB7 East Asian ideograph 216C61 52F9 E58BB9 East Asian ideograph 216C62 52FA E58BBA East Asian ideograph 216C64 52FC E58BBC East Asian ideograph 216C69 5307 E58C87 East Asian ideograph 216C6A 5303 E58C83 East Asian ideograph 216C6B 5306 E58C86 East Asian ideograph 216C6E 530A E58C8A East Asian ideograph 216C6F 530B E58C8B East Asian ideograph 216C77 5311 E58C91 East Asian ideograph 216C7B 6706 E69C86 East Asian ideograph 216D23 531A E58C9A East Asian ideograph 216D24 531C E58C9C East Asian ideograph 216D25 531F E58C9F East Asian ideograph 216D2E 532D E58CAD East Asian ideograph 216D33 5330 E58CB0 East Asian ideograph 216D36 5335 E58CB5 East Asian ideograph 216D3A 5338 E58CB8 East Asian ideograph 216D3E 533D E58CBD East Asian ideograph 216D41 534C E58D8C East Asian ideograph 216D42 534D E58D8D East Asian ideograph 216D4B 535D E58D9D East Asian ideograph 216D4C 5363 E58DA3 East Asian ideograph 216D4E 5365 E58DA5 East Asian ideograph 216D53 536C E58DAC East Asian ideograph 216D57 5372 E58DB2 East Asian ideograph 216D58 537A E58DBA East Asian ideograph 216D5D 5380 E58E80 East Asian ideograph 216D64 538E E58E8E East Asian ideograph 216D66 5393 E58E93 East Asian ideograph 216D67 5394 E58E94 East Asian ideograph 216D6D 5399 E58E99 East Asian ideograph 216D74 8652 E89992 East Asian ideograph 216D7A 53A4 E58EA4 East Asian ideograph 216D7B 53AB E58EAB East Asian ideograph 216E2C 53B5 E58EB5 East Asian ideograph 216E2E 53B9 E58EB9 East Asian ideograph 216E3E 53D0 E58F90 East Asian ideograph 216E48 53DA E58F9A East Asian ideograph 216E57 53FB E58FBB East Asian ideograph 216E58 535F E58D9F East Asian ideograph 216E61 5414 E59094 East Asian ideograph 216E68 5406 E59086 East Asian ideograph 216E6C 544C E5918C East Asian ideograph 216E6D 5445 E59185 East Asian ideograph 216E6F 541A E5909A East Asian ideograph 216E70 5432 E590B2 East Asian ideograph 216E76 5421 E590A1 East Asian ideograph 216E78 5430 E590B0 East Asian ideograph 216E79 5454 E59194 East Asian ideograph 216E7D 543D E590BD East Asian ideograph 216F21 544F E5918F East Asian ideograph 216F24 542A E590AA East Asian ideograph 216F26 5422 E590A2 East Asian ideograph 216F27 5423 E590A3 East Asian ideograph 216F2E 545F E5919F East Asian ideograph 216F2F 549C E5929C East Asian ideograph 216F35 5488 E59288 East Asian ideograph 216F37 547F E591BF East Asian ideograph 216F39 5482 E59282 East Asian ideograph 216F3A 546D E591AD East Asian ideograph 216F3B 5491 E59291 East Asian ideograph 216F42 5494 E59294 East Asian ideograph 216F43 546B E591AB East Asian ideograph 216F49 548D E5928D East Asian ideograph 216F4A 5463 E591A3 East Asian ideograph 216F4B 5474 E591B4 East Asian ideograph 216F52 5466 E591A6 East Asian ideograph 216F53 5464 E591A4 East Asian ideograph 216F55 54A4 E592A4 East Asian ideograph 216F58 54A1 E592A1 East Asian ideograph 216F5A 54AD E592AD East Asian ideograph 216F5B 54BA E592BA East Asian ideograph 216F5C 54CF E5938F East Asian ideograph 216F5E 54BE E592BE East Asian ideograph 216F60 54A5 E592A5 East Asian ideograph 216F63 54A7 E592A7 East Asian ideograph 216F64 54B5 E592B5 East Asian ideograph 216F66 54A2 E592A2 East Asian ideograph 216F67 5472 E591B2 East Asian ideograph 216F68 5470 E591B0 East Asian ideograph 216F69 54BC E592BC East Asian ideograph 216F6A 54B7 E592B7 East Asian ideograph 216F6B 54DE E5939E East Asian ideograph 216F6C 54D6 E59396 East Asian ideograph 216F6D 54AE E592AE East Asian ideograph 216F71 54BF E592BF East Asian ideograph 216F74 54C6 E59386 East Asian ideograph 216F7B 551A E5949A East Asian ideograph 216F7C 54E2 E593A2 East Asian ideograph 216F7D 5507 E59487 East Asian ideograph 217023 5517 E59497 East Asian ideograph 217024 54FD E593BD East Asian ideograph 217025 54E7 E593A7 East Asian ideograph 217027 54F3 E593B3 East Asian ideograph 21702A 54E4 E593A4 East Asian ideograph 21702B 550A E5948A East Asian ideograph 21702D 54FF E593BF East Asian ideograph 21702E 5518 E59498 East Asian ideograph 217030 5504 E59484 East Asian ideograph 217032 54EF E593AF East Asian ideograph 217034 5508 E59488 East Asian ideograph 217038 54F6 E593B6 East Asian ideograph 217039 54F7 E593B7 East Asian ideograph 21703E 550E E5948E East Asian ideograph 217044 5523 E594A3 East Asian ideograph 217046 550F E5948F East Asian ideograph 217047 5511 E59491 East Asian ideograph 21704B 5575 E595B5 East Asian ideograph 21704D 5573 E595B3 East Asian ideograph 21704E 554C E5958C East Asian ideograph 21704F 5576 E595B6 East Asian ideograph 217050 554D E5958D East Asian ideograph 217051 555A E5959A East Asian ideograph 217053 553C E594BC East Asian ideograph 217055 5550 E59590 East Asian ideograph 217057 5539 E594B9 East Asian ideograph 217058 5548 E59588 East Asian ideograph 217059 552D E594AD East Asian ideograph 21705A 5551 E59591 East Asian ideograph 21705D 552A E594AA East Asian ideograph 217060 5562 E595A2 East Asian ideograph 217061 5536 E594B6 East Asian ideograph 217064 5549 E59589 East Asian ideograph 217068 5530 E594B0 East Asian ideograph 21706A 5540 E59580 East Asian ideograph 21706B 5535 E594B5 East Asian ideograph 217070 5545 E59585 East Asian ideograph 217079 553F E594BF East Asian ideograph 21707B 5541 E59581 East Asian ideograph 21707D 5565 E595A5 East Asian ideograph 217123 5591 E59691 East Asian ideograph 217125 5577 E595B7 East Asian ideograph 217126 55A8 E596A8 East Asian ideograph 217127 55AD E596AD East Asian ideograph 21712A 5605 E59885 East Asian ideograph 21712D 5593 E59693 East Asian ideograph 21712F 5586 E59686 East Asian ideograph 217134 5588 E59688 East Asian ideograph 217136 55B4 E596B4 East Asian ideograph 217143 55E2 E597A2 East Asian ideograph (variant of EACC 2D7143) 217144 5581 E59681 East Asian ideograph 217145 558E E5968E East Asian ideograph 217147 55B5 E596B5 East Asian ideograph 217149 558F E5968F East Asian ideograph 21714B 5559 E59599 East Asian ideograph 217150 55A4 E596A4 East Asian ideograph 217151 5592 E59692 East Asian ideograph 217152 5599 E59699 East Asian ideograph 217156 55F4 E597B4 East Asian ideograph 217158 55CC E5978C East Asian ideograph 217159 55D0 E59790 East Asian ideograph 21715A 55DB E5979B East Asian ideograph 21715B 55CD E5978D East Asian ideograph 21715C 55DE E5979E East Asian ideograph 21715D 55D9 E59799 East Asian ideograph 21715E 55C3 E59783 East Asian ideograph 21715F 55C9 E59789 East Asian ideograph 217161 55CA E5978A East Asian ideograph 217162 55DD E5979D East Asian ideograph 217164 55D4 E59794 East Asian ideograph 217165 55C4 E59784 East Asian ideograph 217169 55E9 E597A9 East Asian ideograph 21716F 55CF E5978F East Asian ideograph 217170 55D2 E59792 East Asian ideograph 217175 55E5 E597A5 East Asian ideograph 217177 55D6 E59796 East Asian ideograph 217178 55C1 E59781 East Asian ideograph 217179 55F2 E597B2 East Asian ideograph 21717E 5627 E598A7 East Asian ideograph 217224 55FB E597BB East Asian ideograph 217225 5612 E59892 East Asian ideograph 217227 55F8 E597B8 East Asian ideograph 217228 560F E5988F East Asian ideograph 21722B 55F9 E597B9 East Asian ideograph 21722E 561E E5989E East Asian ideograph 217231 560C E5988C East Asian ideograph 217234 561C E5989C East Asian ideograph 217235 5610 E59890 East Asian ideograph 217236 5601 E59881 East Asian ideograph 217238 5613 E59893 East Asian ideograph 217239 55F6 E597B6 East Asian ideograph 21723C 5602 E59882 East Asian ideograph 217242 561D E5989D East Asian ideograph 217244 55FF E597BF East Asian ideograph 217247 5642 E59982 East Asian ideograph 217248 564C E5998C East Asian ideograph 21724B 564B E5998B East Asian ideograph 217252 5640 E59980 East Asian ideograph 217255 5635 E598B5 East Asian ideograph 217257 5649 E59989 East Asian ideograph 217258 5641 E59981 East Asian ideograph 21725C 5658 E59998 East Asian ideograph 21725D 5620 E598A0 East Asian ideograph 21725E 5654 E59994 East Asian ideograph 217260 562A E598AA East Asian ideograph 217261 563D E598BD East Asian ideograph 217264 562C E598AC East Asian ideograph 217267 5638 E598B8 East Asian ideograph 217269 564D E5998D East Asian ideograph 21726B 562B E598AB East Asian ideograph 21726C 564F E5998F East Asian ideograph 21726E 5670 E599B0 East Asian ideograph 21726F 565F E5999F East Asian ideograph 217270 567C E599BC East Asian ideograph 217272 5660 E599A0 East Asian ideograph 217278 5676 E599B6 East Asian ideograph 21727A 5666 E599A6 East Asian ideograph 21727B 5673 E599B3 East Asian ideograph 21727C 566D E599AD East Asian ideograph 21727E 5672 E599B2 East Asian ideograph 217325 5693 E59A93 East Asian ideograph 217328 568C E59A8C East Asian ideograph 217332 56BA E59ABA East Asian ideograph 217334 5686 E59A86 East Asian ideograph 217335 5684 E59A84 East Asian ideograph 217336 5691 E59A91 East Asian ideograph 217337 568A E59A8A East Asian ideograph 21733E 569E E59A9E East Asian ideograph 217341 569C E59A9C East Asian ideograph 217342 569A E59A9A East Asian ideograph 217345 5699 E59A99 East Asian ideograph 21734B 56AD E59AAD East Asian ideograph 21734C 56A6 E59AA6 East Asian ideograph 21734E 56AC E59AAC East Asian ideograph 217353 56B2 E59AB2 East Asian ideograph 21735A 56B3 E59AB3 East Asian ideograph 21735B 56C3 E59B83 East Asian ideograph 217360 56C5 E59B85 East Asian ideograph 217362 56CF E59B8F East Asian ideograph 217367 56CD E59B8D East Asian ideograph 21736A 56D4 E59B94 East Asian ideograph 21736B 56D7 E59B97 East Asian ideograph 21736D 56DD E59B9D East Asian ideograph 21736F 56E1 E59BA1 East Asian ideograph 217370 56DF E59B9F East Asian ideograph 217375 56EB E59BAB East Asian ideograph 217376 56EE E59BAE East Asian ideograph 217377 56E7 E59BA7 East Asian ideograph 217379 56FB E59BBB East Asian ideograph 21737E 56F7 E59BB7 East Asian ideograph 217421 56F9 E59BB9 East Asian ideograph 217424 56FF E59BBF East Asian ideograph 217427 5705 E59C85 East Asian ideograph 217428 5704 E59C84 East Asian ideograph 217429 5702 E59C82 East Asian ideograph 21742C 570A E59C8A East Asian ideograph 21742D 5709 E59C89 East Asian ideograph 21742E 5707 E59C87 East Asian ideograph 217430 570C E59C8C East Asian ideograph 217431 5715 E59C95 East Asian ideograph 217432 5714 E59C94 East Asian ideograph 217435 571A E59C9A East Asian ideograph 217436 571B E59C9B East Asian ideograph 217437 571C E59C9C East Asian ideograph 217439 571D E59C9D East Asian ideograph 21743A 571E E59C9E East Asian ideograph 217441 5724 E59CA4 East Asian ideograph 217442 572E E59CAE East Asian ideograph 217443 5729 E59CA9 East Asian ideograph 217448 5738 E59CB8 East Asian ideograph 21744C 572A E59CAA East Asian ideograph 217463 5749 E59D89 East Asian ideograph 217465 5745 E59D85 East Asian ideograph 217468 574B E59D8B East Asian ideograph 217469 574C E59D8C East Asian ideograph 21746A 573F E59CBF East Asian ideograph 217470 5768 E59DA8 East Asian ideograph 217475 578A E59E8A East Asian ideograph 217477 576D E59DAD East Asian ideograph 217479 5774 E59DB4 East Asian ideograph 21747A 5767 E59DA7 East Asian ideograph 217526 5770 E59DB0 East Asian ideograph 217528 5771 E59DB1 East Asian ideograph 21752A 576E E59DAE East Asian ideograph 21752D 5776 E59DB6 East Asian ideograph 21752E 5789 E59E89 East Asian ideograph 217530 577F E59DBF East Asian ideograph 217531 5775 E59DB5 East Asian ideograph 217532 577B E59DBB East Asian ideograph 217533 5788 E59E88 East Asian ideograph 217535 5773 E59DB3 East Asian ideograph 217538 579F E59E9F East Asian ideograph 217539 5790 E59E90 East Asian ideograph 21753A 5793 E59E93 East Asian ideograph 21753F 579E E59E9E East Asian ideograph 217540 57B5 E59EB5 East Asian ideograph 217543 579A E59E9A East Asian ideograph 217545 5794 E59E94 East Asian ideograph 217547 57A4 E59EA4 East Asian ideograph 217548 5799 E59E99 East Asian ideograph 217549 578C E59E8C East Asian ideograph 21754B 5797 E59E97 East Asian ideograph 21754E 579D E59E9D East Asian ideograph 217552 579C E59E9C East Asian ideograph 217554 57A7 E59EA7 East Asian ideograph 217557 57A1 E59EA1 East Asian ideograph 217559 212C4 East Asian ideograph (Unicode CJK Extension B) 21755B 5795 E59E95 East Asian ideograph 21755F 57B8 E59EB8 East Asian ideograph 217560 57C7 E59F87 East Asian ideograph 21756A 5809 E5A089 East Asian ideograph 21756C 57BE E59EBE East Asian ideograph 217571 57DB E59F9B East Asian ideograph 217573 57D5 E59F95 East Asian ideograph 217577 57D2 E59F92 East Asian ideograph 21757E 57C6 E59F86 East Asian ideograph 217622 57C4 E59F84 East Asian ideograph 217627 70FE E783BE East Asian ideograph 217629 57E3 E59FA3 East Asian ideograph 21762A 57FB E59FBB East Asian ideograph 21762B 5803 E5A083 East Asian ideograph 21762C 57F6 E59FB6 East Asian ideograph 21762D 57E6 E59FA6 East Asian ideograph 217631 57ED E59FAD East Asian ideograph 217633 5800 E5A080 East Asian ideograph 217635 57EC E59FAC East Asian ideograph 217636 5807 E5A087 East Asian ideograph 217639 580E E5A08E East Asian ideograph 21763B 580F E5A08F East Asian ideograph 21763D 57F4 E59FB4 East Asian ideograph 21763E 5810 E5A090 East Asian ideograph 217640 580D E5A08D East Asian ideograph 217643 57EF E59FAF East Asian ideograph 217648 5801 E5A081 East Asian ideograph 217649 5812 E5A092 East Asian ideograph 21764D 57FD E59FBD East Asian ideograph 21764E 57F8 E59FB8 East Asian ideograph 217650 580C E5A08C East Asian ideograph 217651 5813 E5A093 East Asian ideograph 217652 57F0 E59FB0 East Asian ideograph 217656 580B E5A08B East Asian ideograph 217658 57F3 E59FB3 East Asian ideograph 217659 5804 E5A084 East Asian ideograph 21765A 57CF E59F8F East Asian ideograph 21765B 57DD E59F9D East Asian ideograph 21765F 5847 E5A187 East Asian ideograph 217667 581B E5A09B East Asian ideograph 217669 5819 E5A099 East Asian ideograph 21766A 5833 E5A0B3 East Asian ideograph 21766C 581E E5A09E East Asian ideograph 21766D 583F E5A0BF East Asian ideograph 217671 5827 E5A0A7 East Asian ideograph 217676 5828 E5A0A8 East Asian ideograph 217678 582E E5A0AE East Asian ideograph 21767A 581D E5A09D East Asian ideograph 21767D 5844 E5A184 East Asian ideograph 217721 5848 E5A188 East Asian ideograph 217723 5818 E5A098 East Asian ideograph 217726 57F5 E59FB5 East Asian ideograph 217729 582D E5A0AD East Asian ideograph 21772B 5820 E5A0A0 East Asian ideograph 217730 584E E5A18E East Asian ideograph 217733 585D E5A19D East Asian ideograph 217735 5859 E5A199 East Asian ideograph 217737 584B E5A18B East Asian ideograph 21773D 5865 E5A1A5 East Asian ideograph 217740 586C E5A1AC East Asian ideograph 217742 5852 E5A192 East Asian ideograph 217745 5864 E5A1A4 East Asian ideograph 217747 5853 E5A193 East Asian ideograph 217748 584F E5A18F East Asian ideograph 217749 583D E5A0BD East Asian ideograph 21774D 584D E5A18D East Asian ideograph 21774E 5856 E5A196 East Asian ideograph 217755 589A E5A29A East Asian ideograph 217758 5892 E5A292 East Asian ideograph 21775A 588E E5A28E East Asian ideograph 21775C 5889 E5A289 East Asian ideograph 21775F 5840 E5A180 East Asian ideograph 217760 589B E5A29B East Asian ideograph 217761 587C E5A1BC East Asian ideograph 217763 5888 E5A288 East Asian ideograph 217765 5890 E5A290 East Asian ideograph 217768 5898 E5A298 East Asian ideograph 21776B 587D E5A1BD East Asian ideograph 21776F 587F E5A1BF East Asian ideograph 217770 5881 E5A281 East Asian ideograph 21777B 58A9 E5A2A9 East Asian ideograph 21777E 58A1 E5A2A1 East Asian ideograph 217824 58B1 E5A2B1 East Asian ideograph 21782B 58AD E5A2AD East Asian ideograph 21782E 58A0 E5A2A0 East Asian ideograph 217830 58A3 E5A2A3 East Asian ideograph 217832 58A6 E5A2A6 East Asian ideograph 21783A 58C8 E5A388 East Asian ideograph 217841 58BC E5A2BC East Asian ideograph 217849 58BF E5A2BF East Asian ideograph 21784B 58C6 E5A386 East Asian ideograph 21784C 58BA E5A2BA East Asian ideograph 217850 58D6 E5A396 East Asian ideograph 217854 58D2 E5A392 East Asian ideograph 217856 58CE E5A38E East Asian ideograph 21785A 58E0 E5A3A0 East Asian ideograph 21785E 58DA E5A39A East Asian ideograph 21786C 58FC E5A3BC East Asian ideograph 217870 5902 E5A482 East Asian ideograph 217873 5906 E5A486 East Asian ideograph 217874 6535 E694B5 East Asian ideograph 21787A 5910 E5A490 East Asian ideograph 21787C 8641 E89981 East Asian ideograph 217928 592C E5A4AC East Asian ideograph 21792B 592F E5A4AF East Asian ideograph 217930 593C E5A4BC East Asian ideograph 217933 5940 E5A580 East Asian ideograph 217938 594D E5A58D East Asian ideograph 217943 5953 E5A593 East Asian ideograph 21794B 595C E5A59C East Asian ideograph 21794F 5961 E5A5A1 East Asian ideograph 217954 596C E5A5AC East Asian ideograph 217955 596D E5A5AD East Asian ideograph 217965 597C E5A5BC East Asian ideograph 217969 59A7 E5A6A7 East Asian ideograph 21796B 5998 E5A698 East Asian ideograph 21796F 599A E5A69A East Asian ideograph 217971 59A0 E5A6A0 East Asian ideograph 21797C 5997 E5A697 East Asian ideograph 217A21 5990 E5A690 East Asian ideograph 217A24 59C5 E5A785 East Asian ideograph 217A25 59B5 E5A6B5 East Asian ideograph 217A28 59CF E5A78F East Asian ideograph 217A2A 59BA E5A6BA East Asian ideograph 217A2C 59B8 E5A6B8 East Asian ideograph 217A35 59B2 E5A6B2 East Asian ideograph 217A3A 59B7 E5A6B7 East Asian ideograph 217A3E 59C1 E5A781 East Asian ideograph 217A43 59F9 E5A7B9 East Asian ideograph 217A44 59F8 E5A7B8 East Asian ideograph 217A4F 59EE E5A7AE East Asian ideograph 217A50 59F1 E5A7B1 East Asian ideograph 217A51 5A00 E5A880 East Asian ideograph 217A52 59DE E5A79E East Asian ideograph 217A56 59FD E5A7BD East Asian ideograph 217A5D 59F6 E5A7B6 East Asian ideograph 217A5E 59DD E5A79D East Asian ideograph 217A5F 59FA E5A7BA East Asian ideograph 217A61 59E4 E5A7A4 East Asian ideograph 217A6E 5A2A E5A8AA East Asian ideograph 217A75 5A16 E5A896 East Asian ideograph 217A78 5A09 E5A889 East Asian ideograph 217A7E 5A12 E5A892 East Asian ideograph 217B2C 5A60 E5A9A0 East Asian ideograph 217B31 5A67 E5A9A7 East Asian ideograph 217B3A 5A38 E5A8B8 East Asian ideograph 217B3B 5A5E E5A99E East Asian ideograph 217B3C 5A6D E5A9AD East Asian ideograph 217B3D 5A35 E5A8B5 East Asian ideograph 217B3E 5A55 E5A995 East Asian ideograph 217B41 5A2C E5A8AC East Asian ideograph 217B48 5A50 E5A990 East Asian ideograph 217B49 5A65 E5A9A5 East Asian ideograph 217B52 5A64 E5A9A4 East Asian ideograph 217B65 5A8A E5AA8A East Asian ideograph 217B69 5ACF E5AB8F East Asian ideograph 217B6A 5A7A E5A9BA East Asian ideograph 217B71 5A9F E5AA9F East Asian ideograph 217B75 5AA0 E5AAA0 East Asian ideograph 217C21 5AA6 E5AAA6 East Asian ideograph 217C22 5A8C E5AA8C East Asian ideograph 217C24 5AA7 E5AAA7 East Asian ideograph 217C25 5A9E E5AA9E East Asian ideograph 217C26 5AA2 E5AAA2 East Asian ideograph 217C27 5A9C E5AA9C East Asian ideograph 217C28 5A7C E5A9BC East Asian ideograph 217C29 5A96 E5AA96 East Asian ideograph 217C30 5A93 E5AA93 East Asian ideograph 217C31 5AAC E5AAAC East Asian ideograph 217C34 5AAE E5AAAE East Asian ideograph 217C35 5A95 E5AA95 East Asian ideograph 217C36 5AAF E5AAAF East Asian ideograph 217C39 5AC8 E5AB88 East Asian ideograph 217C3E 5AB5 E5AAB5 East Asian ideograph 217C41 5AC4 E5AB84 East Asian ideograph 217C45 5AB7 E5AAB7 East Asian ideograph 217C49 5AD1 E5AB91 East Asian ideograph 217C4A 5A90 E5AA90 East Asian ideograph 217C4F 5AB8 E5AAB8 East Asian ideograph 217C50 5ABA E5AABA East Asian ideograph 217C52 5AAA E5AAAA East Asian ideograph 217C59 5AD3 E5AB93 East Asian ideograph 217C5B 5AB1 E5AAB1 East Asian ideograph 217C60 5ADC E5AB9C East Asian ideograph 217C6D 5AE5 E5ABA5 East Asian ideograph 217C6E 5AE0 E5ABA0 East Asian ideograph 217C72 5AEA E5ABAA East Asian ideograph 217C7B 5ADA E5AB9A East Asian ideograph 217C7C 5AEB E5ABAB East Asian ideograph 217D26 5AFF E5ABBF East Asian ideograph 217D2A 5AFD E5ABBD East Asian ideograph 217D2B 5B08 E5AC88 East Asian ideograph 217D2E 5B0D E5AC8D East Asian ideograph 217D38 5B03 E5AC83 East Asian ideograph 217D3D 5B17 E5AC97 East Asian ideograph 217D3E 5B16 E5AC96 East Asian ideograph 217D40 5B19 E5AC99 East Asian ideograph 217D47 5B1B E5AC9B East Asian ideograph 217D48 5B21 E5ACA1 East Asian ideograph 217D52 5B2C E5ACAC East Asian ideograph 217D59 5B32 E5ACB2 East Asian ideograph 217D63 5B3F E5ACBF East Asian ideograph 217D6E 5B45 E5AD85 East Asian ideograph 217D74 5B4C E5AD8C East Asian ideograph 217D76 5B4B E5AD8B East Asian ideograph 217D7C 5B56 E5AD96 East Asian ideograph 217E21 5B5B E5AD9B East Asian ideograph 217E23 5B62 E5ADA2 East Asian ideograph 217E24 5B65 E5ADA5 East Asian ideograph 217E25 5B67 E5ADA7 East Asian ideograph 217E27 5C58 E5B198 East Asian ideograph 217E28 5B6C E5ADAC East Asian ideograph 217E2A 5B6E E5ADAE East Asian ideograph 217E30 5B7B E5ADBB East Asian ideograph 217E31 5B7C E5ADBC East Asian ideograph 217E32 5B80 E5AE80 East Asian ideograph 217E34 5B84 E5AE84 East Asian ideograph 217E35 5B82 E5AE82 East Asian ideograph 217E40 5B95 E5AE95 East Asian ideograph 217E43 5B93 E5AE93 East Asian ideograph 217E49 5BAC E5AEAC East Asian ideograph 217E52 5BA7 E5AEA7 East Asian ideograph 217E55 5BB7 E5AEB7 East Asian ideograph 217E59 5BC1 E5AF81 East Asian ideograph 217E5B 3761 E39DA1 East Asian ideograph (Unicode CJK Extension A) 217E60 5BC9 E5AF89 East Asian ideograph 217E68 5BD4 E5AF94 East Asian ideograph 217E6A 5BC3 E5AF83 East Asian ideograph 217E6E 5BD6 E5AF96 East Asian ideograph 217E75 5BD7 E5AF97 East Asian ideograph 217E79 5BE0 E5AFA0 East Asian ideograph 217E7E 5BEA E5AFAA East Asian ideograph 222224 5BF0 E5AFB0 East Asian ideograph 222225 5BEF E5AFAF East Asian ideograph 222233 5C00 E5B080 East Asian ideograph 222235 5C57 E5B197 East Asian ideograph 22223C 5C15 E5B095 East Asian ideograph 222246 5C22 E5B0A2 East Asian ideograph 222248 5C25 E5B0A5 East Asian ideograph 22224B 5C2A E5B0AA East Asian ideograph 222252 5C2F E5B0AF East Asian ideograph 22225B 5C32 E5B0B2 East Asian ideograph 222263 5C3B E5B0BB East Asian ideograph 222265 5C44 E5B184 East Asian ideograph 222267 5C49 E5B189 East Asian ideograph 222279 5C59 E5B199 East Asian ideograph 22227B 5C5D E5B19D East Asian ideograph 22227C 5C5F E5B19F East Asian ideograph 222323 5C63 E5B1A3 East Asian ideograph 222329 5C67 E5B1A7 East Asian ideograph 22232B 5C68 E5B1A8 East Asian ideograph 222330 5C6D E5B1AD East Asian ideograph 222331 5C6E E5B1AE East Asian ideograph 222337 5C74 E5B1B4 East Asian ideograph 222339 5C73 E5B1B3 East Asian ideograph 22233B 5C77 E5B1B7 East Asian ideograph 22233C 5C7A E5B1BA East Asian ideograph 222340 5C7C E5B1BC East Asian ideograph 222346 5C8F E5B28F East Asian ideograph 222349 5C88 E5B288 East Asian ideograph 22234B 5C8D E5B28D East Asian ideograph 22234D 5C99 E5B299 East Asian ideograph 222355 5CA6 E5B2A6 East Asian ideograph 222357 5CA0 E5B2A0 East Asian ideograph 22235C 5CA2 E5B2A2 East Asian ideograph 222360 5CB5 E5B2B5 East Asian ideograph 222361 5CA7 E5B2A7 East Asian ideograph 222366 5CA8 E5B2A8 East Asian ideograph 222367 5CAC E5B2AC East Asian ideograph 22236B 5CA3 E5B2A3 East Asian ideograph 22236C 5CB6 E5B2B6 East Asian ideograph 22236D 5CC1 E5B381 East Asian ideograph 22236F 5CAD E5B2AD East Asian ideograph 222370 5CD5 E5B395 East Asian ideograph 222378 5CD3 E5B393 East Asian ideograph 222379 5C8D E5B28D East Asian ideograph 222426 5CE0 E5B3A0 East Asian ideograph 222428 5CD2 E5B392 East Asian ideograph 222429 5CDD E5B39D East Asian ideograph 22242B 5CCB E5B38B East Asian ideograph 222430 5CC7 E5B387 East Asian ideograph 222431 5CDC E5B39C East Asian ideograph 222434 5D00 E5B480 East Asian ideograph 22243B 5CFF E5B3BF East Asian ideograph 22243C 5CEB E5B3AB East Asian ideograph 222441 5CF4 E5B3B4 East Asian ideograph 222446 5CF1 E5B3B1 East Asian ideograph 222449 5D1E E5B49E East Asian ideograph 22244A 5D12 E5B492 East Asian ideograph 222450 5D1A E5B49A East Asian ideograph 222452 5D0C E5B48C East Asian ideograph 222453 5D20 E5B4A0 East Asian ideograph 222454 5D21 E5B4A1 East Asian ideograph 222457 5D27 E5B4A7 East Asian ideograph 222458 5D0D E5B48D East Asian ideograph 22245A 5D26 E5B4A6 East Asian ideograph 22245D 5D2E E5B4AE East Asian ideograph 222469 5D24 E5B4A4 East Asian ideograph 222471 5D36 E5B4B6 East Asian ideograph 222472 5D3E E5B4BE East Asian ideograph 222474 5D4B E5B58B East Asian ideograph 222476 5D57 E5B597 East Asian ideograph 222477 5D34 E5B4B4 East Asian ideograph 222525 5D3F E5B4BF East Asian ideograph 222526 5D52 E5B592 East Asian ideograph 222527 5D3D E5B4BD East Asian ideograph 222528 5D4E E5B58E East Asian ideograph 22252C 5D59 E5B599 East Asian ideograph 22252D 5D47 E5B587 East Asian ideograph 22252F 5D32 E5B4B2 East Asian ideograph 222531 5D42 E5B582 East Asian ideograph 222534 5D74 E5B5B4 East Asian ideograph 222539 5D6F E5B5AF East Asian ideograph 22253A 5D6B E5B5AB East Asian ideograph 22253F 5D75 E5B5B5 East Asian ideograph 222544 5D4A E5B58A East Asian ideograph 222549 5D6C E5B5AC East Asian ideograph 22254A 5D62 E5B5A2 East Asian ideograph 22254D 5D82 E5B682 East Asian ideograph 222550 5D79 E5B5B9 East Asian ideograph 222551 5D8E E5B68E East Asian ideograph 22255A 5D81 E5B681 East Asian ideograph 222560 5D7E E5B5BE East Asian ideograph 222566 5D92 E5B692 East Asian ideograph 222568 5D99 E5B699 East Asian ideograph 222569 5D97 E5B697 East Asian ideograph 22256A 5DA2 E5B6A2 East Asian ideograph 222573 5DA1 E5B6A1 East Asian ideograph 222575 5D93 E5B693 East Asian ideograph 222577 5DA0 E5B6A0 East Asian ideograph 22257B 5D94 E5B694 East Asian ideograph 22257E 5DAC E5B6AC East Asian ideograph 222626 5DA7 E5B6A7 East Asian ideograph 22262A 5DB0 E5B6B0 East Asian ideograph 22262E 5DB4 E5B6B4 East Asian ideograph 22262F 5DAE E5B6AE East Asian ideograph 222630 5DB6 E5B6B6 East Asian ideograph 222632 5DB8 E5B6B8 East Asian ideograph 222634 5DBF E5B6BF East Asian ideograph 222636 5DB7 E5B6B7 East Asian ideograph 22263E 5DC3 E5B783 East Asian ideograph 222644 5DC7 E5B787 East Asian ideograph 222646 5DC9 E5B789 East Asian ideograph 222647 5DCB E5B78B East Asian ideograph 22264E 5DD8 E5B798 East Asian ideograph 222650 5DDB E5B79B East Asian ideograph 222652 5DDC E5B79C East Asian ideograph 222656 5DE4 E5B7A4 East Asian ideograph 222662 5E00 E5B880 East Asian ideograph 222664 51E7 E587A7 East Asian ideograph 222672 5E14 E5B894 East Asian ideograph 222673 5E17 E5B897 East Asian ideograph 222676 5E19 E5B899 East Asian ideograph 222677 5E12 E5B892 East Asian ideograph 222678 5E1F E5B89F East Asian ideograph 22267A 5E23 E5B8A3 East Asian ideograph 22267B 5E21 E5B8A1 East Asian ideograph 222722 5E22 E5B8A2 East Asian ideograph 222724 5E28 E5B8A8 East Asian ideograph 222735 5E44 E5B984 East Asian ideograph 222736 5E43 E5B983 East Asian ideograph 222739 5E42 E5B982 East Asian ideograph 22273F 5E4E E5B98E East Asian ideograph 222747 5E58 E5B998 East Asian ideograph 222748 5E48 E5B988 East Asian ideograph 222757 5E5E E5B99E East Asian ideograph 222758 5E61 E5B9A1 East Asian ideograph 22275D 5E68 E5B9A8 East Asian ideograph 22275F 5E6C E5B9AC East Asian ideograph 222760 5E6A E5B9AA East Asian ideograph 222763 5E6E E5B9AE East Asian ideograph 222764 5E6D E5B9AD East Asian ideograph 222765 5E70 E5B9B0 East Asian ideograph 22276D 5E75 E5B9B5 East Asian ideograph 222777 5E80 E5BA80 East Asian ideograph 22277E 5E8B E5BA8B East Asian ideograph 22282F 5EA4 E5BAA4 East Asian ideograph 222835 5EA5 E5BAA5 East Asian ideograph 222836 5EAF E5BAAF East Asian ideograph 222842 5EB9 E5BAB9 East Asian ideograph 22284B 5EB3 E5BAB3 East Asian ideograph 22284C 5EC4 E5BB84 East Asian ideograph 222851 5ECC E5BB8C East Asian ideograph 222855 5ECB E5BB8B East Asian ideograph 222857 5ECD E5BB8D East Asian ideograph 22285A 5ED2 E5BB92 East Asian ideograph 22285B 5ED1 E5BB91 East Asian ideograph 22285C 5ED5 E5BB95 East Asian ideograph 22285F 5ED4 E5BB94 East Asian ideograph 222860 5ED9 E5BB99 East Asian ideograph 222861 5ECE E5BB8E East Asian ideograph 222868 5EE1 E5BBA1 East Asian ideograph 22286D 5EE7 E5BBA7 East Asian ideograph 222871 5EE8 E5BBA8 East Asian ideograph 22287C 5EED E5BBAD East Asian ideograph 222921 5EF1 E5BBB1 East Asian ideograph 222923 5EF4 E5BBB4 East Asian ideograph 222935 5F07 E5BC87 East Asian ideograph 22293A 5F0B E5BC8B East Asian ideograph 22294A 5F28 E5BCA8 East Asian ideograph 22294B 5F22 E5BCA2 East Asian ideograph 22294C 5F23 E5BCA3 East Asian ideograph 22294D 5F24 E5BCA4 East Asian ideograph 222951 5F33 E5BCB3 East Asian ideograph 222952 5F30 E5BCB0 East Asian ideograph 222958 5F38 E5BCB8 East Asian ideograph 22295C 5F40 E5BD80 East Asian ideograph 22295F 5F44 E5BD84 East Asian ideograph 222962 5F4D E5BD8D East Asian ideograph 222968 5F50 E5BD90 East Asian ideograph 222969 5F54 E5BD94 East Asian ideograph 22296A 5F56 E5BD96 East Asian ideograph 22296C 5F58 E5BD98 East Asian ideograph 222970 5F60 E5BDA0 East Asian ideograph 222971 5F61 E5BDA1 East Asian ideograph 222972 5F63 E5BDA3 East Asian ideograph 222973 809C E8829C East Asian ideograph 222974 5F67 E5BDA7 East Asian ideograph 222978 5F72 E5BDB2 East Asian ideograph 222979 5F73 E5BDB3 East Asian ideograph 22297C 5F74 E5BDB4 East Asian ideograph 222A23 5F82 E5BE82 East Asian ideograph 222A27 5F89 E5BE89 East Asian ideograph 222A2B 5F94 E5BE94 East Asian ideograph 222A34 2251B East Asian ideograph (Unicode CJK Extension B) 222A39 5F9C E5BE9C East Asian ideograph 222A3D 5F9A E5BE9A East Asian ideograph 222A46 5FAF E5BEAF East Asian ideograph 222A50 5FBC E5BEBC East Asian ideograph 222A57 5FC9 E5BF89 East Asian ideograph 222A5F 5FD1 E5BF91 East Asian ideograph 222A61 5FD2 E5BF92 East Asian ideograph 222A63 5FD0 E5BF90 East Asian ideograph 222A67 5FCE E5BF8E East Asian ideograph 222A68 5FED E5BFAD East Asian ideograph 222A72 5FEE E5BFAE East Asian ideograph 222A73 5FF8 E5BFB8 East Asian ideograph 222A78 5FE1 E5BFA1 East Asian ideograph 222A7B 5FE4 E5BFA4 East Asian ideograph 222B24 5FEA E5BFAA East Asian ideograph 222B2A 6026 E680A6 East Asian ideograph 222B2C 6029 E680A9 East Asian ideograph 222B2D 602B E680AB East Asian ideograph 222B30 6019 E68099 East Asian ideograph 222B31 6008 E68088 East Asian ideograph 222B36 600A E6808A East Asian ideograph 222B37 600C E6808C East Asian ideograph 222B38 601B E6809B East Asian ideograph 222B3C 6017 E68097 East Asian ideograph 222B3D 6033 E680B3 East Asian ideograph 222B45 600D E6808D East Asian ideograph 222B46 6010 E68090 East Asian ideograph 222B4B 6039 E680B9 East Asian ideograph 222B50 6013 E68093 East Asian ideograph 222B53 6054 E68194 East Asian ideograph 222B57 605D E6819D East Asian ideograph 222B5A 6047 E68187 East Asian ideograph 222B5E 6049 E68189 East Asian ideograph 222B5F 6053 E68193 East Asian ideograph 222B68 6067 E681A7 East Asian ideograph 222B6F 604C E6818C East Asian ideograph 222B71 6041 E68181 East Asian ideograph 222B72 6077 E681B7 East Asian ideograph 222B74 6042 E68182 East Asian ideograph 222B76 605F E6819F East Asian ideograph 222B7A 6061 E681A1 East Asian ideograph 222C24 608A E6828A East Asian ideograph 222C2B 6092 E68292 East Asian ideograph 222C2C 609D E6829D East Asian ideograph 222C2D 6081 E68281 East Asian ideograph 222C2F 609E E6829E East Asian ideograph 222C30 6083 E68283 East Asian ideograph 222C32 6097 E68297 East Asian ideograph 222C34 60A7 E682A7 East Asian ideograph 222C3A 6095 E68295 East Asian ideograph 222C3E 60C7 E68387 East Asian ideograph 222C42 60B0 E682B0 East Asian ideograph 222C46 60BE E682BE East Asian ideograph 222C47 60D3 E68393 East Asian ideograph 222C48 60D4 E68394 East Asian ideograph 222C4E 60CE E6838E East Asian ideograph 222C51 60CF E6838F East Asian ideograph 222C53 60D9 E68399 East Asian ideograph 222C54 60B3 E682B3 East Asian ideograph 222C56 60DD E6839D East Asian ideograph 222C5D 60C4 E68384 East Asian ideograph 222C60 60B1 E682B1 East Asian ideograph 222C62 60E3 E683A3 East Asian ideograph 222C66 60E2 E683A2 East Asian ideograph 222C67 60E5 E683A5 East Asian ideograph 222C69 60DB E6839B East Asian ideograph 222C6E 60E9 E683A9 East Asian ideograph 222C70 6114 E68494 East Asian ideograph 222C73 6103 E68483 East Asian ideograph 222C75 6119 E68499 East Asian ideograph 222C7C 60FD E683BD East Asian ideograph 222C7D 610D E6848D East Asian ideograph 222D2A 610A E6848A East Asian ideograph 222D2C 6110 E68490 East Asian ideograph 222D32 6112 E68492 East Asian ideograph 222D34 60F2 E683B2 East Asian ideograph 222D37 6125 E684A5 East Asian ideograph 222D3B 60F8 E683B8 East Asian ideograph 222D3F 6121 E684A1 East Asian ideograph 222D41 60FC E683BC East Asian ideograph 222D43 6106 E68486 East Asian ideograph 222D48 6149 E68589 East Asian ideograph 222D4A 614A E6858A East Asian ideograph 222D4E 612B E684AB East Asian ideograph 222D50 6129 E684A9 East Asian ideograph 222D51 6150 E68590 East Asian ideograph 222D56 53AF E58EAF East Asian ideograph 222D58 6130 E684B0 East Asian ideograph 222D5B 6141 E68581 East Asian ideograph 222D5E 6137 E684B7 East Asian ideograph 222D61 6146 E68586 East Asian ideograph 222D66 615E E6859E East Asian ideograph 222D67 6175 E685B5 East Asian ideograph 222D68 6174 E685B4 East Asian ideograph 222D6B 6183 E68683 East Asian ideograph 222D70 6171 E685B1 East Asian ideograph 222D74 616A E685AA East Asian ideograph 222D77 6173 E685B3 East Asian ideograph 222D79 6164 E685A4 East Asian ideograph 222D7B 6153 E68593 East Asian ideograph 222E23 618B E6868B East Asian ideograph 222E2C 616F E685AF East Asian ideograph 222E2D 6165 E685A5 East Asian ideograph 222E2F 615C E6859C East Asian ideograph 222E32 619D E6869D East Asian ideograph 222E33 61A6 E686A6 East Asian ideograph 222E3D 61A2 E686A2 East Asian ideograph 222E40 61A8 E686A8 East Asian ideograph 222E42 619C E6869C East Asian ideograph 222E43 61AF E686AF East Asian ideograph 222E45 6196 E68696 East Asian ideograph 222E46 6197 E68697 East Asian ideograph 222E47 61AD E686AD East Asian ideograph 222E4C 6192 E68692 East Asian ideograph 222E52 61AE E686AE East Asian ideograph 222E55 618D E6868D East Asian ideograph 222E5A 61CB E6878B East Asian ideograph 222E5C 61CC E6878C East Asian ideograph 222E5D 61C6 E68786 East Asian ideograph 222E68 61BA E686BA East Asian ideograph 222E6A 61B8 E686B8 East Asian ideograph 222E71 61E0 E687A0 East Asian ideograph 222E77 61E5 E687A5 East Asian ideograph 222E7D 61DC E6879C East Asian ideograph 222E7E 61DF E6879F East Asian ideograph 222F29 61F3 E687B3 East Asian ideograph 222F3D 6201 E68881 East Asian ideograph 222F41 6204 E68884 East Asian ideograph 222F43 6207 E68887 East Asian ideograph 222F44 6209 E68889 East Asian ideograph 222F47 6214 E68894 East Asian ideograph 222F56 6223 E688A3 East Asian ideograph 222F5B 6225 E688A5 East Asian ideograph 222F5D 6224 E688A4 East Asian ideograph 222F61 6229 E688A9 East Asian ideograph 222F67 622D E688AD East Asian ideograph 222F69 97EF E99FAF East Asian ideograph 222F6E 6239 E688B9 East Asian ideograph 222F6F 623A E688BA East Asian ideograph 222F70 623D E688BD East Asian ideograph 222F75 6243 E68983 East Asian ideograph 222F77 6246 E68986 East Asian ideograph 222F78 6245 E68985 East Asian ideograph 222F79 624A E6898A East Asian ideograph 222F7A 6250 E68990 East Asian ideograph 222F7C 625E E6899E East Asian ideograph 223026 6268 E689A8 East Asian ideograph 223028 6260 E689A0 East Asian ideograph 22302B 625A E6899A East Asian ideograph 22302C 6262 E689A2 East Asian ideograph 22302D 6266 E689A6 East Asian ideograph 223031 6286 E68A86 East Asian ideograph 223032 628E E68A8E East Asian ideograph 223041 62A3 E68AA3 East Asian ideograph 223043 6282 E68A82 East Asian ideograph 223046 6285 E68A85 East Asian ideograph 22304B 629D E68A9D East Asian ideograph 223056 62A6 E68AA6 East Asian ideograph 223057 62D1 E68B91 East Asian ideograph 223061 62E4 E68BA4 East Asian ideograph 223069 62B6 E68AB6 East Asian ideograph 22306A 62C3 E68B83 East Asian ideograph 223072 630D E68C8D East Asian ideograph 223125 62F5 E68BB5 East Asian ideograph 223131 630C E68C8C East Asian ideograph 223132 6360 E68DA0 East Asian ideograph 223137 62F6 E68BB6 East Asian ideograph 22313A 6331 E68CB1 East Asian ideograph 223142 6345 E68D85 East Asian ideograph 223144 6343 E68D83 East Asian ideograph 223145 6335 E68CB5 East Asian ideograph 223147 6353 E68D93 East Asian ideograph 223148 6364 E68DA4 East Asian ideograph 223149 6336 E68CB6 East Asian ideograph 22314A 6344 E68D84 East Asian ideograph 223154 6339 E68CB9 East Asian ideograph 223158 6357 E68D97 East Asian ideograph 22315A 633C E68CBC East Asian ideograph 22315B 6358 E68D98 East Asian ideograph 22315C 634B E68D8B East Asian ideograph 22315F 6354 E68D94 East Asian ideograph 223168 637D E68DBD East Asian ideograph 22316A 63B6 E68EB6 East Asian ideograph 22316B 6382 E68E82 East Asian ideograph 22316C 636C E68DAC East Asian ideograph 22316E 639F E68E9F East Asian ideograph 223172 639E E68E9E East Asian ideograph 223173 637F E68DBF East Asian ideograph 223179 6381 E68E81 East Asian ideograph 22317B 6397 E68E97 East Asian ideograph 22317D 63AB E68EAB East Asian ideograph 223225 6387 E68E87 East Asian ideograph 223226 637A E68DBA East Asian ideograph 223227 638E E68E8E East Asian ideograph 22322A 6386 E68E86 East Asian ideograph 22322F 6375 E68DB5 East Asian ideograph 223230 63AF E68EAF East Asian ideograph 223237 63B1 E68EB1 East Asian ideograph 223238 63B0 E68EB0 East Asian ideograph 223239 63AE E68EAE East Asian ideograph 22323A 637C E68DBC East Asian ideograph 22323B 6390 E68E90 East Asian ideograph 22323D 63AD E68EAD East Asian ideograph 223241 636D E68DAD East Asian ideograph 223243 63DE E68F9E East Asian ideograph 223244 63E5 E68FA5 East Asian ideograph 223247 63D3 E68F93 East Asian ideograph 22324F 63BD E68EBD East Asian ideograph 223250 63C3 E68F83 East Asian ideograph 223252 63F5 E68FB5 East Asian ideograph 223258 63E6 E68FA6 East Asian ideograph 22325B 63E0 E68FA0 East Asian ideograph 22325C 63D5 E68F95 East Asian ideograph 22325D 63F6 E68FB6 East Asian ideograph 22325E 63F2 E68FB2 East Asian ideograph 22325F 63F8 E68FB8 East Asian ideograph 223266 63C5 E68F85 East Asian ideograph 22326A 63F9 E68FB9 East Asian ideograph 223270 63BE E68EBE East Asian ideograph 223272 63EB E68FAB East Asian ideograph 223273 63DD E68F9D East Asian ideograph 223276 63D1 E68F91 East Asian ideograph 223279 63C4 E68F84 East Asian ideograph 22327A 63DC E68F9C East Asian ideograph 22327B 63D7 E68F97 East Asian ideograph 22327E 6412 E69092 East Asian ideograph 223322 6410 E69090 East Asian ideograph 223324 6434 E690B4 East Asian ideograph 223329 641B E6909B East Asian ideograph 22332B 6420 E690A0 East Asian ideograph 22332C 6424 E690A4 East Asian ideograph 22332F 6426 E690A6 East Asian ideograph 223331 640C E6908C East Asian ideograph 223336 6415 E69095 East Asian ideograph 223337 6418 E69098 East Asian ideograph 223338 640E E6908E East Asian ideograph 223339 22C4D East Asian ideograph (Unicode CJK Extension B) 22333B 6422 E690A2 East Asian ideograph 22333D 6421 E690A1 East Asian ideograph 223344 6430 E690B0 East Asian ideograph 223345 6441 E69181 East Asian ideograph 223348 6435 E690B5 East Asian ideograph 22334C 6409 E69089 East Asian ideograph 223351 640A E6908A East Asian ideograph 223353 6440 E69180 East Asian ideograph 223359 6407 E69087 East Asian ideograph 22335B 643B E690BB East Asian ideograph 22335D 643F E690BF East Asian ideograph 223368 645B E6919B East Asian ideograph 22336A 644F E6918F East Asian ideograph 22336C 646B E691AB East Asian ideograph 22336F 6476 E691B6 East Asian ideograph 223376 6474 E691B4 East Asian ideograph 223378 647D E691BD East Asian ideograph 22337B 6473 E691B3 East Asian ideograph 223423 644E E6918E East Asian ideograph 223424 6464 E691A4 East Asian ideograph 223427 6482 E69282 East Asian ideograph 223428 645E E6919E East Asian ideograph 22342C 647B E691BB East Asian ideograph 22342E 645C E6919C East Asian ideograph 22343C 649D E6929D East Asian ideograph 22343F 6499 E69299 East Asian ideograph 223442 648F E6928F East Asian ideograph 22344D 6496 E69296 East Asian ideograph 22344E 64A2 E692A2 East Asian ideograph 223454 6490 E69290 East Asian ideograph 22345B 64B6 E692B6 East Asian ideograph 223461 6498 E69298 East Asian ideograph 223462 649F E6929F East Asian ideograph 223465 64A7 E692A7 East Asian ideograph 223466 64B3 E692B3 East Asian ideograph 22346A 64D7 E69397 East Asian ideograph 22346C 64D3 E69393 East Asian ideograph 223474 64BE E692BE East Asian ideograph 223475 64D0 E69390 East Asian ideograph 22352A 64EF E693AF East Asian ideograph 22352D 64E1 E693A1 East Asian ideograph 22352E 64E5 E693A5 East Asian ideograph 223531 64EB E693AB East Asian ideograph 223533 64E2 E693A2 East Asian ideograph 223536 64ED E693AD East Asian ideograph 223538 64E4 E693A4 East Asian ideograph 223542 64F7 E693B7 East Asian ideograph 223546 6504 E69484 East Asian ideograph 22354B 64FD E693BD East Asian ideograph 22354F 6508 E69488 East Asian ideograph 223553 6509 E69489 East Asian ideograph 223559 651A E6949A East Asian ideograph 22355B 6516 E69496 East Asian ideograph 223561 651B E6949B East Asian ideograph 223569 6527 E694A7 East Asian ideograph 22356D 6522 E694A2 East Asian ideograph 22356F 6529 E694A9 East Asian ideograph 223572 6525 E694A5 East Asian ideograph 223577 652E E694AE East Asian ideograph 22357C 6541 E69581 East Asian ideograph 22362C 6538 E694B8 East Asian ideograph 223634 6542 E69582 East Asian ideograph 223636 6549 E69589 East Asian ideograph 22363E 6554 E69594 East Asian ideograph 22363F 6555 E69595 East Asian ideograph 223645 6567 E695A7 East Asian ideograph 223647 6561 E695A1 East Asian ideograph 22364F 656D E695AD East Asian ideograph 223654 657A E695BA East Asian ideograph 223664 6585 E69685 East Asian ideograph 22366E 658C E6968C East Asian ideograph 223670 6592 E69692 East Asian ideograph 223671 6595 E69695 East Asian ideograph 223675 659B E6969B East Asian ideograph 223677 659D E6969D East Asian ideograph 22367A 65A0 E696A0 East Asian ideograph 223722 65A8 E696A8 East Asian ideograph 223723 65A6 E696A6 East Asian ideograph 223727 65AE E696AE East Asian ideograph 22372A 65B6 E696B6 East Asian ideograph 22372C 65B8 E696B8 East Asian ideograph 22372F 65BF E696BF East Asian ideograph 223731 65C6 E69786 East Asian ideograph 223732 65C3 E69783 East Asian ideograph 223733 65C4 E69784 East Asian ideograph 223734 65C2 E69782 East Asian ideograph 22373B 65D0 E69790 East Asian ideograph 22373C 65D2 E69792 East Asian ideograph 223744 65DB E6979B East Asian ideograph 223745 65DC E6979C East Asian ideograph 223747 65DD E6979D East Asian ideograph 223748 65DF E6979F East Asian ideograph 22374A 65E1 E697A1 East Asian ideograph 22374E 65E4 E697A4 East Asian ideograph 223754 65F4 E697B4 East Asian ideograph 223755 65F0 E697B0 East Asian ideograph 22375A 6609 E69889 East Asian ideograph 22375B 65FB E697BB East Asian ideograph 22375C 65FC E697BC East Asian ideograph 22375E 660A E6988A East Asian ideograph 223764 6603 E69883 East Asian ideograph 22376A 6611 E69891 East Asian ideograph 22376B 6615 E69895 East Asian ideograph 22376D 6604 E69884 East Asian ideograph 22376E 6631 E698B1 East Asian ideograph 223772 6621 E698A1 East Asian ideograph 223775 662C E698AC East Asian ideograph 223777 6635 E698B5 East Asian ideograph 22377C 661E E6989E East Asian ideograph 22377D 663A E698BA East Asian ideograph 223827 6633 E698B3 East Asian ideograph 223828 662B E698AB East Asian ideograph 22382B 6634 E698B4 East Asian ideograph 22382C 6624 E698A4 East Asian ideograph 223831 6645 E69985 East Asian ideograph 223832 665F E6999F East Asian ideograph 22383D 6665 E699A5 East Asian ideograph 22383E 665C E6999C East Asian ideograph 22383F 6661 E699A1 East Asian ideograph 223848 665B E6999B East Asian ideograph 223849 6659 E69999 East Asian ideograph 22384A 6667 E699A7 East Asian ideograph 22384C 665E E6999E East Asian ideograph 22384D 6657 E69997 East Asian ideograph 223850 667E E699BE East Asian ideograph 223851 666C E699AC East Asian ideograph 22385A 6678 E699B8 East Asian ideograph 223860 6673 E699B3 East Asian ideograph 223866 666D E699AD East Asian ideograph 223868 6677 E699B7 East Asian ideograph 223870 6684 E69A84 East Asian ideograph 223871 668C E69A8C East Asian ideograph 223872 6693 E69A93 East Asian ideograph 223875 668B E69A8B East Asian ideograph 223876 6690 E69A90 East Asian ideograph 223879 6694 E69A94 East Asian ideograph 22387A 668A E69A8A East Asian ideograph 22387C 6698 E69A98 East Asian ideograph 22387D 668D E69A8D East Asian ideograph 223924 7A25 E7A8A5 East Asian ideograph 22392A 66A0 E69AA0 East Asian ideograph 223930 5C21 E5B0A1 East Asian ideograph 223932 669D E69A9D East Asian ideograph 22393A 66B2 E69AB2 East Asian ideograph 223940 66B5 E69AB5 East Asian ideograph 223941 66AA E69AAA East Asian ideograph 223943 66AC E69AAC East Asian ideograph 223947 66B1 E69AB1 East Asian ideograph 22394E 66C8 E69B88 East Asian ideograph 22394F 66BE E69ABE East Asian ideograph 223954 66C0 E69B80 East Asian ideograph 223955 66C7 E69B87 East Asian ideograph 22395A 66BB E69ABB East Asian ideograph 22395C 66C4 E69B84 East Asian ideograph 223960 66CF E69B8F East Asian ideograph 223971 66DA E69B9A East Asian ideograph 223972 66DB E69B9B East Asian ideograph 223973 66E2 E69BA2 East Asian ideograph 223976 66E1 E69BA1 East Asian ideograph 223978 66E8 E69BA8 East Asian ideograph 22397C 66E9 E69BA9 East Asian ideograph 223A28 6705 E69C85 East Asian ideograph 223A30 670F E69C8F East Asian ideograph 223A31 6710 E69C90 East Asian ideograph 223A33 6712 E69C92 East Asian ideograph 223A34 6713 E69C93 East Asian ideograph 223A38 6719 E69C99 East Asian ideograph 223A39 6718 E69C98 East Asian ideograph 223A47 6723 E69CA3 East Asian ideograph 223A4C 673E E69CBE East Asian ideograph 223A4E 673F E69CBF East Asian ideograph 223A58 6757 E69D97 East Asian ideograph 223A5B 6745 E69D85 East Asian ideograph 223A5C 6747 E69D87 East Asian ideograph 223A60 675D E69D9D East Asian ideograph 223A61 6755 E69D95 East Asian ideograph 223A66 674C E69D8C East Asian ideograph 223A67 6759 E69D99 East Asian ideograph 223A68 6748 E69D88 East Asian ideograph 223A6B 6763 E69DA3 East Asian ideograph 223A6E 6753 E69D93 East Asian ideograph 223A71 674A E69D8A East Asian ideograph 223A75 6793 E69E93 East Asian ideograph 223A78 677C E69DBC East Asian ideograph 223A7A 679F E69E9F East Asian ideograph 223A7C 6785 E69E85 East Asian ideograph 223B21 677B E69DBB East Asian ideograph 223B22 6792 E69E92 East Asian ideograph 223B23 6776 E69DB6 East Asian ideograph 223B25 6791 E69E91 East Asian ideograph 223B26 6799 E69E99 East Asian ideograph 223B28 67A4 E69EA4 East Asian ideograph 223B2E 678F E69E8F East Asian ideograph 223B30 6772 E69DB2 East Asian ideograph 223B31 6798 E69E98 East Asian ideograph (variant of EACC 4C3B31) 223B32 676A E69DAA East Asian ideograph 223B39 67AC E69EAC East Asian ideograph 223B3B 67A0 E69EA0 East Asian ideograph 223B3F 67A1 E69EA1 East Asian ideograph 223B44 67F9 E69FB9 East Asian ideograph 223B48 678D E69E8D East Asian ideograph 223B49 678C E69E8C East Asian ideograph 223B4C 67FC E69FBC East Asian ideograph 223B4E 6810 E6A090 East Asian ideograph 223B51 67C8 E69F88 East Asian ideograph 223B54 67CC E69F8C East Asian ideograph 223B58 67C5 E69F85 East Asian ideograph 223B5C 67BB E69EBB East Asian ideograph 223B5F 67B0 E69EB0 East Asian ideograph 223B60 6803 E6A083 East Asian ideograph 223B61 67F8 E69FB8 East Asian ideograph 223B63 67D8 E69F98 East Asian ideograph 223B64 67B7 E69EB7 East Asian ideograph 223B6D 6802 E6A082 East Asian ideograph 223B6F 67E4 E69FA4 East Asian ideograph 223B70 67D9 E69F99 East Asian ideograph 223B71 67DB E69F9B East Asian ideograph 223B72 67B5 E69EB5 East Asian ideograph 223B74 67DF E69F9F East Asian ideograph 223B75 67F7 E69FB7 East Asian ideograph 223B77 67B3 E69EB3 East Asian ideograph 223B78 6806 E6A086 East Asian ideograph 223B79 67AE E69EAE East Asian ideograph 223B7A 67F6 E69FB6 East Asian ideograph 223B7C 67EE E69FAE East Asian ideograph 223B7D 6AAF E6AAAF East Asian ideograph 223B7E 67B2 E69EB2 East Asian ideograph 223C21 67B9 E69EB9 East Asian ideograph 223C23 67C2 E69F82 East Asian ideograph 223C24 67E3 E69FA3 East Asian ideograph 223C26 67CA E69F8A East Asian ideograph 223C28 67CE E69F8E East Asian ideograph 223C29 67E2 E69FA2 East Asian ideograph 223C2A 67F2 E69FB2 East Asian ideograph 223C2B 67C3 E69F83 East Asian ideograph 223C2D 67DD E69F9D East Asian ideograph 223C2F 67E7 E69FA7 East Asian ideograph 223C30 6849 E6A189 East Asian ideograph 223C31 683E E6A0BE East Asian ideograph 223C36 6814 E6A094 East Asian ideograph 223C37 684B E6A18B East Asian ideograph 223C38 681E E6A09E East Asian ideograph 223C3B 6833 E6A0B3 East Asian ideograph 223C40 6831 E6A0B1 East Asian ideograph 223C41 6832 E6A0B2 East Asian ideograph 223C42 6835 E6A0B5 East Asian ideograph 223C43 683B E6A0BB East Asian ideograph 223C44 684E E6A18E East Asian ideograph 223C47 682B E6A0AB East Asian ideograph 223C48 682D E6A0AD East Asian ideograph 223C4A 684D E6A18D East Asian ideograph 223C4F 6844 E6A184 East Asian ideograph 223C55 685D E6A19D East Asian ideograph 223C56 685E E6A19E East Asian ideograph 223C58 6834 E6A0B4 East Asian ideograph 223C59 6812 E6A092 East Asian ideograph 223C65 685A E6A19A East Asian ideograph 223C68 686B E6A1AB East Asian ideograph 223C69 686C E6A1AC East Asian ideograph 223C6B 6879 E6A1B9 East Asian ideograph 223C6E 68B2 E6A2B2 East Asian ideograph 223C71 689B E6A29B East Asian ideograph 223C72 687E E6A1BE East Asian ideograph 223C74 68B6 E6A2B6 East Asian ideograph 223C76 6882 E6A282 East Asian ideograph 223C7A 6890 E6A290 East Asian ideograph 223D21 6872 E6A1B2 East Asian ideograph 223D22 689C E6A29C East Asian ideograph 223D25 686D E6A1AD East Asian ideograph 223D2E 68A9 E6A2A9 East Asian ideograph 223D30 6898 E6A298 East Asian ideograph 223D32 688B E6A28B East Asian ideograph 223D33 68A0 E6A2A0 East Asian ideograph 223D34 686F E6A1AF East Asian ideograph 223D39 68A3 E6A2A3 East Asian ideograph 223D3B 6874 E6A1B4 East Asian ideograph 223D3C 6875 E6A1B5 East Asian ideograph 223D3F 6877 E6A1B7 East Asian ideograph 223D40 688F E6A28F East Asian ideograph 223D43 687B E6A1BB East Asian ideograph 223D44 688E E6A28E East Asian ideograph 223D4B 68B4 E6A2B4 East Asian ideograph 223D50 692C E6A4AC East Asian ideograph 223D51 6917 E6A497 East Asian ideograph 223D53 690C E6A48C East Asian ideograph 223D56 690B E6A48B East Asian ideograph 223D58 68D3 E6A393 East Asian ideograph 223D59 6904 E6A484 East Asian ideograph 223D5B 690A E6A48A East Asian ideograph 223D5C 6909 E6A489 East Asian ideograph 223D5D 6929 E6A4A9 East Asian ideograph 223D62 68EC E6A3AC East Asian ideograph 223D63 692A E6A4AA East Asian ideograph 223D64 68EA E6A3AA East Asian ideograph 223D65 681F E6A09F East Asian ideograph 223D66 7439 E790B9 East Asian ideograph 223D6A 6910 E6A490 East Asian ideograph 223D6E 68D6 E6A396 East Asian ideograph 223D6F 68EB E6A3AB East Asian ideograph 223D73 68F1 E6A3B1 East Asian ideograph 223D78 68FD E6A3BD East Asian ideograph 223D79 68FC E6A3BC East Asian ideograph 223D7B 68F3 E6A3B3 East Asian ideograph 223D7C 6913 E6A493 East Asian ideograph 223E21 6907 E6A487 East Asian ideograph 223E23 691A E6A49A East Asian ideograph 223E24 6919 E6A499 East Asian ideograph 223E2A 68DE E6A39E East Asian ideograph 223E2B 691B E6A49B East Asian ideograph 223E2D 68FB E6A3BB East Asian ideograph 223E33 68E1 E6A3A1 East Asian ideograph 223E37 68D1 E6A391 East Asian ideograph 223E38 68D0 E6A390 East Asian ideograph 223E39 6908 E6A488 East Asian ideograph 223E3E 68E8 E6A3A8 East Asian ideograph 223E3F 68F0 E6A3B0 East Asian ideograph 223E40 68C3 E6A383 East Asian ideograph 223E44 6911 E6A491 East Asian ideograph 223E46 68D4 E6A394 East Asian ideograph 223E47 68EF E6A3AF East Asian ideograph 223E49 68C6 E6A386 East Asian ideograph 223E4B 68C7 E6A387 East Asian ideograph 223E53 6974 E6A5B4 East Asian ideograph 223E55 6938 E6A4B8 East Asian ideograph 223E58 6962 E6A5A2 East Asian ideograph 223E5D 6958 E6A598 East Asian ideograph 223E5F 6957 E6A597 East Asian ideograph 223E60 693F E6A4BF East Asian ideograph 223E61 6971 E6A5B1 East Asian ideograph 223E64 6945 E6A585 East Asian ideograph 223E65 695D E6A59D East Asian ideograph 223E66 6932 E6A4B2 East Asian ideograph 223E69 696E E6A5AE East Asian ideograph 223E6A 6963 E6A5A3 East Asian ideograph 223E6B 6948 E6A588 East Asian ideograph 223E6E 6939 E6A4B9 East Asian ideograph 223E70 696A E6A5AA East Asian ideograph 223E73 6937 E6A4B7 East Asian ideograph 223E7A 696C E6A5AC East Asian ideograph 223E7B 694E E6A58E East Asian ideograph 223E7D 6980 E6A680 East Asian ideograph 223E7E 6933 E6A4B3 East Asian ideograph 223F21 6952 E6A592 East Asian ideograph 223F25 695B E6A59B East Asian ideograph 223F2D 6985 E6A685 East Asian ideograph 223F32 693D E6A4BD East Asian ideograph 223F35 6978 E6A5B8 East Asian ideograph 223F37 697B E6A5BB East Asian ideograph 223F3A 6934 E6A4B4 East Asian ideograph 223F3B 6969 E6A5A9 East Asian ideograph 223F3D 6944 E6A584 East Asian ideograph 223F3E 696F E6A5AF East Asian ideograph 223F44 698A E6A68A East Asian ideograph 223F45 69A0 E6A6A0 East Asian ideograph 223F46 69B1 E6A6B1 East Asian ideograph 223F50 69CE E6A78E East Asian ideograph 223F51 69CA E6A78A East Asian ideograph 223F59 698D E6A68D East Asian ideograph 223F5A 6991 E6A691 East Asian ideograph 223F5C 69AA E6A6AA East Asian ideograph 223F60 69BC E6A6BC East Asian ideograph 223F61 69A7 E6A6A7 East Asian ideograph 223F65 699E E6A69E East Asian ideograph 223F68 69D9 E6A799 East Asian ideograph 223F6A 698E E6A68E East Asian ideograph 223F6D 69D6 E6A796 East Asian ideograph 223F75 69A5 E6A6A5 East Asian ideograph 223F77 69BE E6A6BE East Asian ideograph 223F78 69D1 E6A791 East Asian ideograph 223F7A 69F6 E6A7B6 East Asian ideograph 223F7E 69D5 E6A795 East Asian ideograph 224027 69BF E6A6BF East Asian ideograph 22402D 69A3 E6A6A3 East Asian ideograph 22402E 69A4 E6A6A4 East Asian ideograph 224034 69D4 E6A794 East Asian ideograph 224038 69C3 E6A783 East Asian ideograph 22403D 6A12 E6A892 East Asian ideograph 22403E 6A11 E6A891 East Asian ideograph 224041 6A00 E6A880 East Asian ideograph 224046 69E6 E6A7A6 East Asian ideograph 22404B 6A0B E6A88B East Asian ideograph 22404C 69E5 E6A7A5 East Asian ideograph 22404D 69E9 E6A7A9 East Asian ideograph 224050 69FC E6A7BC East Asian ideograph 224054 6A17 E6A897 East Asian ideograph 224056 69E7 E6A7A7 East Asian ideograph 224057 69EB E6A7AB East Asian ideograph 22405B 69F1 E6A7B1 East Asian ideograph 22405E 6A2B E6A8AB East Asian ideograph 22405F 69FF E6A7BF East Asian ideograph 224060 6A20 E6A8A0 East Asian ideograph 224064 69ED E6A7AD East Asian ideograph 224067 6A1B E6A89B East Asian ideograph 224068 6A2D E6A8AD East Asian ideograph 22406E 6A18 E6A898 East Asian ideograph 224072 6A1D E6A89D East Asian ideograph 224075 6A0C E6A88C East Asian ideograph 224076 6A0F E6A88F East Asian ideograph 22407C 69EE E6A7AE East Asian ideograph 224123 69F0 E6A7B0 East Asian ideograph 224124 69F2 E6A7B2 East Asian ideograph 224128 6A14 E6A894 East Asian ideograph 224129 6A63 E6A9A3 East Asian ideograph 224137 6A67 E6A9A7 East Asian ideograph 224139 6A43 E6A983 East Asian ideograph 22413A 6A33 E6A8B3 East Asian ideograph 22413B 6A32 E6A8B2 East Asian ideograph 22413C 6A5A E6A99A East Asian ideograph 22413F 6A28 E6A8A8 East Asian ideograph 224140 6A48 E6A988 East Asian ideograph 224141 6A50 E6A990 East Asian ideograph 224142 6A52 E6A992 East Asian ideograph 224143 6A72 E6A9B2 East Asian ideograph 224145 6A3E E6A8BE East Asian ideograph 224146 6A77 E6A9B7 East Asian ideograph 224147 6A5B E6A99B East Asian ideograph 22414A 6A5E E6A99E East Asian ideograph 22414B 6A5C E6A99C East Asian ideograph 22414F 6A51 E6A991 East Asian ideograph 224151 6A56 E6A996 East Asian ideograph 224153 6A36 E6A8B6 East Asian ideograph 224156 6A7A E6A9BA East Asian ideograph 224158 6A3F E6A8BF East Asian ideograph 22416C 69F9 E6A7B9 East Asian ideograph 22416D 6A64 E6A9A4 East Asian ideograph 224173 6A8D E6AA8D East Asian ideograph 224175 6AA8 E6AAA8 East Asian ideograph 224177 6AA5 E6AAA5 East Asian ideograph 224179 6A96 E6AA96 East Asian ideograph 22417E 6A7D E6A9BD East Asian ideograph 224222 6A7F E6A9BF East Asian ideograph 224223 6A89 E6AA89 East Asian ideograph 224224 6A91 E6AA91 East Asian ideograph 224226 6A9F E6AA9F East Asian ideograph 22422A 6A92 E6AA92 East Asian ideograph 22422B 6AA3 E6AAA3 East Asian ideograph 224234 6A99 E6AA99 East Asian ideograph 224235 6A9D E6AA9D East Asian ideograph 224236 6A7E E6A9BE East Asian ideograph 224237 6A9B E6AA9B East Asian ideograph 224242 6AA0 E6AAA0 East Asian ideograph 224247 6A90 E6AA90 East Asian ideograph 224249 6A9E E6AA9E East Asian ideograph 22424A 6A87 E6AA87 East Asian ideograph 22424B 6A8E E6AA8E East Asian ideograph 224251 6AAB E6AAAB East Asian ideograph 224255 6AC8 E6AB88 East Asian ideograph 224257 6AAE E6AAAE East Asian ideograph 22425D 6ABF E6AABF East Asian ideograph 224264 6ACA E6AB8A East Asian ideograph 224268 6AB4 E6AAB4 East Asian ideograph 224279 6AE6 E6ABA6 East Asian ideograph 22427E 6AED E6ABAD East Asian ideograph 224325 6ACC E6AB8C East Asian ideograph 224328 6AD1 E6AB91 East Asian ideograph 224333 6ADF E6AB9F East Asian ideograph 224334 6ACD E6AB8D East Asian ideograph 224335 6ADE E6AB9E East Asian ideograph 224337 6AEC E6ABAC East Asian ideograph 224339 6AF3 E6ABB3 East Asian ideograph 22433A 6AE7 E6ABA7 East Asian ideograph 22433F 6AEB E6ABAB East Asian ideograph 224340 6AEA E6ABAA East Asian ideograph 224344 6AF1 E6ABB1 East Asian ideograph 224345 6AE8 E6ABA8 East Asian ideograph 224348 6AF5 E6ABB5 East Asian ideograph 22434E 6AFD E6ABBD East Asian ideograph 224350 6AFA E6ABBA East Asian ideograph 224352 6B01 E6AC81 East Asian ideograph 224358 6B03 E6AC83 East Asian ideograph 224359 6AF8 E6ABB8 East Asian ideograph 22435F 6B0D E6AC8D East Asian ideograph 224360 6B09 E6AC89 East Asian ideograph 224361 6B0E E6AC8E East Asian ideograph 224367 6B11 E6AC91 East Asian ideograph 22436D 6B19 E6AC99 East Asian ideograph 22436E 6B17 E6AC97 East Asian ideograph 224372 6B1E E6AC9E East Asian ideograph 22437E 6B2C E6ACAC East Asian ideograph 22442A 6B35 E6ACB5 East Asian ideograph 22442C 6B37 E6ACB7 East Asian ideograph 22442D 6B3B E6ACBB East Asian ideograph 224432 6B39 E6ACB9 East Asian ideograph 224435 6B3F E6ACBF East Asian ideograph 224437 6B46 E6AD86 East Asian ideograph 224438 6B41 E6AD81 East Asian ideograph 22443A 6B40 E6AD80 East Asian ideograph 22443B 6B42 E6AD82 East Asian ideograph 22443C 6B43 E6AD83 East Asian ideograph 22443E 6B48 E6AD88 East Asian ideograph 22443F 6B4A E6AD8A East Asian ideograph 224446 6B4E E6AD8E East Asian ideograph (variant of EACC 4C4446) 22444A 6B57 E6AD97 East Asian ideograph 22444C 6B54 E6AD94 East Asian ideograph 22444E 6B55 E6AD95 East Asian ideograph 224451 6B5C E6AD9C East Asian ideograph 224453 6B5E E6AD9E East Asian ideograph 224454 6B60 E6ADA0 East Asian ideograph 22445B 6B6B E6ADAB East Asian ideograph 22445D 6B6C E6ADAC East Asian ideograph 22445F 6B6E E6ADAE East Asian ideograph 224461 6B71 E6ADB1 East Asian ideograph 22446B 6B7E E6ADBE East Asian ideograph 224471 6B82 E6AE82 East Asian ideograph 224473 6B84 E6AE84 East Asian ideograph 224479 6B8D E6AE8D East Asian ideograph 22447B 6B95 E6AE95 East Asian ideograph 224525 6B99 E6AE99 East Asian ideograph 224529 6B9B E6AE9B East Asian ideograph 224535 6BA3 E6AEA3 East Asian ideograph 224536 6BA2 E6AEA2 East Asian ideograph 224538 6BAA E6AEAA East Asian ideograph 224539 6BAB E6AEAB East Asian ideograph 22453B 6BAD E6AEAD East Asian ideograph 22453D 6BB0 E6AEB0 East Asian ideograph 22453F 6BB3 E6AEB3 East Asian ideograph 224547 6BBD E6AEBD East Asian ideograph 22454D 6996 E6A696 East Asian ideograph 224554 6BC8 E6AF88 East Asian ideograph 22455B 6BD6 E6AF96 East Asian ideograph 224560 6BDA E6AF9A East Asian ideograph 224562 6BDC E6AF9C East Asian ideograph 224563 6BDD E6AF9D East Asian ideograph 224565 6BDF E6AF9F East Asian ideograph 22456F 6BE7 E6AFA7 East Asian ideograph 224570 6BEA E6AFAA East Asian ideograph 224571 6BE8 E6AFA8 East Asian ideograph 22462A 6BF6 E6AFB6 East Asian ideograph 22462C 6BF3 E6AFB3 East Asian ideograph 224633 6BF8 E6AFB8 East Asian ideograph 224637 6BFA E6AFBA East Asian ideograph 224638 6BF9 E6AFB9 East Asian ideograph 224642 6BFF E6AFBF East Asian ideograph 224644 6C06 E6B086 East Asian ideograph 224648 6C04 E6B084 East Asian ideograph 22464A 6C05 E6B085 East Asian ideograph 22464C 6C08 E6B088 East Asian ideograph 224651 6C0C E6B08C East Asian ideograph 224652 6C0D E6B08D East Asian ideograph 224659 6C15 E6B095 East Asian ideograph 22465A 6C18 E6B098 East Asian ideograph 22465B 6C19 E6B099 East Asian ideograph 22465C 6C1A E6B09A East Asian ideograph 22465E 6C1D E6B09D East Asian ideograph 224660 6C20 E6B0A0 East Asian ideograph 224662 6C21 E6B0A1 East Asian ideograph 224664 6C2A E6B0AA East Asian ideograph 224666 6C2D E6B0AD East Asian ideograph 224667 6C30 E6B0B0 East Asian ideograph 224668 6C2C E6B0AC East Asian ideograph 224669 6C31 E6B0B1 East Asian ideograph 224670 6C3B E6B0BB East Asian ideograph 224674 6C3F E6B0BF East Asian ideograph 224678 6C46 E6B186 East Asian ideograph 22467A 6C52 E6B192 East Asian ideograph 22467B 6C62 E6B1A2 East Asian ideograph 22467C 6C4A E6B18A East Asian ideograph 224724 6C5C E6B19C East Asian ideograph 224726 6C5B E6B19B East Asian ideograph 224727 6C4D E6B18D East Asian ideograph 22472B 6C4B E6B18B East Asian ideograph 22472C 6C54 E6B194 East Asian ideograph 22472D 6C63 E6B1A3 East Asian ideograph 224730 6C78 E6B1B8 East Asian ideograph 224731 6C74 E6B1B4 East Asian ideograph 224732 6C86 E6B286 East Asian ideograph 224733 6C76 E6B1B6 East Asian ideograph 224738 6C6C E6B1AC East Asian ideograph 224739 6C67 E6B1A7 East Asian ideograph 22473B 6C84 E6B284 East Asian ideograph 22473E 6C94 E6B294 East Asian ideograph 224740 6C8F E6B28F East Asian ideograph 224742 6C65 E6B1A5 East Asian ideograph 224747 6C6F E6B1AF East Asian ideograph 224749 6C9D E6B29D East Asian ideograph 22474A 6C69 E6B1A9 East Asian ideograph 22474B 6C9A E6B29A East Asian ideograph 22474C 6C6D E6B1AD East Asian ideograph 22474D 6C93 E6B293 East Asian ideograph 224751 6C87 E6B287 East Asian ideograph 224752 6C6E E6B1AE East Asian ideograph 224756 6C95 E6B295 East Asian ideograph 22475A 6C82 E6B282 East Asian ideograph 22475C 6CA0 E6B2A0 East Asian ideograph 224762 6CEB E6B3AB East Asian ideograph 224763 6CEE E6B3AE East Asian ideograph 224764 6CC0 E6B380 East Asian ideograph 224766 6CEF E6B3AF East Asian ideograph 224767 6CAC E6B2AC East Asian ideograph 22476E 6CAD E6B2AD East Asian ideograph (variant of EACC 4C476E) 224770 6CAF E6B2AF East Asian ideograph 224772 6CF5 E6B3B5 East Asian ideograph 22477A 6CBA E6B2BA East Asian ideograph 22477B 7553 E79593 East Asian ideograph 22477D 6CC2 E6B382 East Asian ideograph 224824 6CD8 E6B398 East Asian ideograph 224826 6CC6 E6B386 East Asian ideograph 224828 6CCE E6B38E East Asian ideograph 224829 6CE9 E6B3A9 East Asian ideograph 22482D 6CF2 E6B3B2 East Asian ideograph 22482F 6CE0 E6B3A0 East Asian ideograph 224830 6CD1 E6B391 East Asian ideograph 224832 6CD2 E6B392 East Asian ideograph 224833 6CB4 E6B2B4 East Asian ideograph 224837 6D1D E6B49D East Asian ideograph 22483B 6D28 E6B4A8 East Asian ideograph 224844 6D39 E6B4B9 East Asian ideograph 22484D 6D26 E6B4A6 East Asian ideograph 22484E 6D27 E6B4A7 East Asian ideograph 22484F 6D0F E6B48F East Asian ideograph 224850 6D0A E6B48A East Asian ideograph 224851 6D3F E6B4BF East Asian ideograph 22485A 6D07 E6B487 East Asian ideograph 22485B 6D04 E6B484 East Asian ideograph 22485C 6CDA E6B39A East Asian ideograph 224860 6D2E E6B4AE East Asian ideograph 224861 6D35 E6B4B5 East Asian ideograph 224862 6D3A E6B4BA East Asian ideograph 224864 6D19 E6B499 East Asian ideograph 224867 6D0E E6B48E East Asian ideograph 22486A 6D2B E6B4AB East Asian ideograph 22486B 6D11 E6B491 East Asian ideograph 22486C 6D00 E6B480 East Asian ideograph 22486D 6D24 E6B4A4 East Asian ideograph 22486F 6D33 E6B4B3 East Asian ideograph 224873 6D63 E6B5A3 East Asian ideograph 224877 6DA5 E6B6A5 East Asian ideograph 22487D 6D92 E6B692 East Asian ideograph 224925 6D6D E6B5AD East Asian ideograph 224926 6D6F E6B5AF East Asian ideograph 224928 6D61 E6B5A1 East Asian ideograph 224929 6D91 E6B691 East Asian ideograph 22492C 6D81 E6B681 East Asian ideograph 22492E 6D8A E6B68A East Asian ideograph 22492F 6D34 E6B4B4 East Asian ideograph (variant of EACC 34492F) 224934 6D79 E6B5B9 East Asian ideograph 224935 6DEF E6B7AF East Asian ideograph 224939 6D7F E6B5BF East Asian ideograph 22493B 6D85 E6B685 East Asian ideograph 22493C 6D65 E6B5A5 East Asian ideograph 22493E 6D5E E6B59E East Asian ideograph 224940 6D67 E6B5A7 East Asian ideograph 224943 6D94 E6B694 East Asian ideograph 224946 6D60 E6B5A0 East Asian ideograph 224948 6D98 E6B698 East Asian ideograph 22494B 6D7C E6B5BC East Asian ideograph 22494C 6D70 E6B5B0 East Asian ideograph 22494F 6D96 E6B696 East Asian ideograph 224959 6DAB E6B6AB East Asian ideograph 22495A 6DB4 E6B6B4 East Asian ideograph 22495C 6DAA E6B6AA East Asian ideograph 224960 6DEC E6B7AC East Asian ideograph 22496A 6DAC E6B6AC East Asian ideograph 22496B 6DB7 E6B6B7 East Asian ideograph 22496C 6DE2 E6B7A2 East Asian ideograph 22496D 6DD5 E6B795 East Asian ideograph 22496E 6DE9 E6B7A9 East Asian ideograph 224971 6DF6 E6B7B6 East Asian ideograph 224979 6E0F E6B88F East Asian ideograph 22497B 6DBF E6B6BF East Asian ideograph 224A2A 6DDF E6B79F East Asian ideograph 224A2D 6DD3 E6B793 East Asian ideograph 224A32 6DFC E6B7BC East Asian ideograph 224A35 6DDD E6B79D East Asian ideograph 224A36 6DDC E6B79C East Asian ideograph 224A39 6DDB E6B79B East Asian ideograph 224A3D 6DA4 E6B6A4 East Asian ideograph 224A44 6E12 E6B892 East Asian ideograph 224A46 6DF0 E6B7B0 East Asian ideograph 224A4A 6DE6 E6B7A6 East Asian ideograph 224A4C 6E1F E6B89F East Asian ideograph 224A50 6E27 E6B8A7 East Asian ideograph 224A55 6E49 E6B989 East Asian ideograph 224A58 6E3C E6B8BC East Asian ideograph 224A60 6E8A E6BA8A East Asian ideograph 224A62 6E4B E6B98B East Asian ideograph 224A66 6E62 E6B9A2 East Asian ideograph 224A6A 6E51 E6B991 East Asian ideograph 224A6B 6E44 E6B984 East Asian ideograph 224A6D 6E63 E6B9A3 East Asian ideograph 224A71 6E73 E6B9B3 East Asian ideograph 224A74 6E4F E6B98F East Asian ideograph 224A77 6E4E E6B98E East Asian ideograph 224B22 6E28 E6B8A8 East Asian ideograph 224B24 6E5C E6B99C East Asian ideograph 224B26 6E31 E6B8B1 East Asian ideograph 224B28 6E5E E6B99E East Asian ideograph 224B2C 6E84 E6BA84 East Asian ideograph 224B2E 6E2E E6B8AE East Asian ideograph 224B30 6E36 E6B8B6 East Asian ideograph 224B31 6E5D E6B99D East Asian ideograph 224B32 6E72 E6B9B2 East Asian ideograph 224B33 6E30 E6B8B0 East Asian ideograph 224B34 6E53 E6B993 East Asian ideograph 224B36 6E39 E6B8B9 East Asian ideograph 224B37 6E71 E6B9B1 East Asian ideograph 224B38 6E69 E6B9A9 East Asian ideograph 224B39 6E6B E6B9AB East Asian ideograph 224B3B 6E8B E6BA8B East Asian ideograph 224B3E 6E76 E6B9B6 East Asian ideograph 224B40 6E2A E6B8AA East Asian ideograph 224B41 6E4C E6B98C East Asian ideograph 224B42 6E22 E6B8A2 East Asian ideograph 224B43 6ECE E6BB8E East Asian ideograph 224B45 6E9B E6BA9B East Asian ideograph 224B46 6E9F E6BA9F East Asian ideograph 224B48 6EC8 E6BB88 East Asian ideograph 224B49 6ED8 E6BB98 East Asian ideograph 224B4A 6E8F E6BA8F East Asian ideograph 224B4D 6E93 E6BA93 East Asian ideograph 224B4F 6EA0 E6BAA0 East Asian ideograph 224B51 6EB1 E6BAB1 East Asian ideograph 224B57 6EA8 E6BAA8 East Asian ideograph 224B59 6E92 E6BA92 East Asian ideograph 224B5A 6EA7 E6BAA7 East Asian ideograph 224B5E 6E8E E6BA8E East Asian ideograph 224B60 6ED9 E6BB99 East Asian ideograph 224B61 6EBD E6BABD East Asian ideograph 224B63 6EC1 E6BB81 East Asian ideograph 224B69 6EBB E6BABB East Asian ideograph 224B6A 6EC9 E6BB89 East Asian ideograph 224B6C 6EB3 E6BAB3 East Asian ideograph 224B6D 6EB7 E6BAB7 East Asian ideograph 224B75 6EA4 E6BAA4 East Asian ideograph 224B79 6ECF E6BB8F East Asian ideograph 224B7C 6ECA E6BB8A East Asian ideograph 224B7D 6ED5 E6BB95 East Asian ideograph 224C21 6EC3 E6BB83 East Asian ideograph 224C24 6EB4 E6BAB4 East Asian ideograph 224C26 6EB2 E6BAB2 East Asian ideograph 224C29 6EB5 E6BAB5 East Asian ideograph 224C2E 6EF8 E6BBB8 East Asian ideograph 224C30 6F37 E6BCB7 East Asian ideograph 224C34 6EFD E6BBBD East Asian ideograph 224C35 6F09 E6BC89 East Asian ideograph 224C3C 6F3B E6BCBB East Asian ideograph 224C3D 6F63 E6BDA3 East Asian ideograph 224C3E 6F12 E6BC92 East Asian ideograph 224C3F 6F26 E6BCA6 East Asian ideograph 224C41 6F1A E6BC9A East Asian ideograph 224C42 6EF6 E6BBB6 East Asian ideograph 224C43 6F19 E6BC99 East Asian ideograph 224C44 6F00 E6BC80 East Asian ideograph 224C4B 6F24 E6BCA4 East Asian ideograph 224C51 6F18 E6BC98 East Asian ideograph 224C57 6F1F E6BC9F East Asian ideograph 224C5A 6F0A E6BC8A East Asian ideograph 224C5E 6F36 E6BCB6 East Asian ideograph 224C60 6EF9 E6BBB9 East Asian ideograph 224C61 6EEE E6BBAE East Asian ideograph 224C62 6F41 E6BD81 East Asian ideograph 224C64 6F95 E6BE95 East Asian ideograph 224C65 6F2D E6BCAD East Asian ideograph 224C67 6F34 E6BCB4 East Asian ideograph 224C6B 6F49 E6BD89 East Asian ideograph 224C6D 6F30 E6BCB0 East Asian ideograph 224C76 6EFA E6BBBA East Asian ideograph 224C77 6EEB E6BBAB East Asian ideograph 224C78 6F08 E6BC88 East Asian ideograph 224C79 6F0E E6BC8E East Asian ideograph 224C7B 6F35 E6BCB5 East Asian ideograph 224D23 6F7E E6BDBE East Asian ideograph 224D24 6F9D E6BE9D East Asian ideograph 224D27 6F87 E6BE87 East Asian ideograph 224D2B 6F6F E6BDAF East Asian ideograph 224D2F 6F5A E6BD9A East Asian ideograph 224D30 6F60 E6BDA0 East Asian ideograph 224D35 6F90 E6BE90 East Asian ideograph 224D37 6F8D E6BE8D East Asian ideograph 224D39 6F92 E6BE92 East Asian ideograph 224D3A 6F89 E6BE89 East Asian ideograph 224D3C 6F8C E6BE8C East Asian ideograph 224D3D 6F62 E6BDA2 East Asian ideograph (variant of EACC 4C4D3D) 224D44 6F0B E6BC8B East Asian ideograph 224D4B 6F6C E6BDAC East Asian ideograph 224D4D 6F8B E6BE8B East Asian ideograph 224D58 6E88 E6BA88 East Asian ideograph 224D5A 6F55 E6BD95 East Asian ideograph 224D5F 6F72 E6BDB2 East Asian ideograph 224D62 6F57 E6BD97 East Asian ideograph 224D63 6F5F E6BD9F East Asian ideograph 224D68 6F5D E6BD9D East Asian ideograph 224D73 6FB6 E6BEB6 East Asian ideograph 224D74 6F9F E6BE9F East Asian ideograph 224D79 6FA6 E6BEA6 East Asian ideograph 224D7C 6FC6 E6BF86 East Asian ideograph 224D7D 6FBC E6BEBC East Asian ideograph 224E21 6FAA E6BEAA East Asian ideograph 224E25 6FBF E6BEBF East Asian ideograph 224E26 6FC7 E6BF87 East Asian ideograph 224E2D 6FC9 E6BF89 East Asian ideograph 224E2E 6F5E E6BD9E East Asian ideograph 224E2F 6FC8 E6BF88 East Asian ideograph 224E30 6FA0 E6BEA0 East Asian ideograph 224E32 6FCA E6BF8A East Asian ideograph 224E35 6FB4 E6BEB4 East Asian ideograph 224E37 6FAF E6BEAF East Asian ideograph 224E3C 6FA8 E6BEA8 East Asian ideograph 224E40 6FA5 E6BEA5 East Asian ideograph 224E41 6FB0 E6BEB0 East Asian ideograph 224E42 6FAE E6BEAE East Asian ideograph 224E43 6FD9 E6BF99 East Asian ideograph 224E44 6FDA E6BF9A East Asian ideograph 224E50 6FD4 E6BF94 East Asian ideograph 224E56 6FE9 E6BFA9 East Asian ideograph 224E57 6FF8 E6BFB8 East Asian ideograph 224E5D 6FDE E6BF9E East Asian ideograph 224E5E 6FEE E6BFAE East Asian ideograph 224E62 6FF0 E6BFB0 East Asian ideograph 224E66 7005 E78085 East Asian ideograph 224E67 700C E7808C East Asian ideograph 224E6A 700D E7808D East Asian ideograph 224E72 7026 E780A6 East Asian ideograph 224F24 7020 E780A0 East Asian ideograph 224F26 7027 E780A7 East Asian ideograph 224F2B 701E E7809E East Asian ideograph (variant of EACC 4C4F2B) 224F2F 702E E780AE East Asian ideograph 224F31 702D E780AD East Asian ideograph 224F35 7021 E780A1 East Asian ideograph 224F39 7018 E78098 East Asian ideograph 224F3A 7023 E780A3 East Asian ideograph 224F41 703C E780BC East Asian ideograph 224F44 7035 E780B5 East Asian ideograph 224F51 7034 E780B4 East Asian ideograph 224F53 7039 E780B9 East Asian ideograph 224F54 703A E780BA East Asian ideograph 224F5D 7043 E78183 East Asian ideograph 224F61 7044 E78184 East Asian ideograph 224F67 7047 E78187 East Asian ideograph 224F69 7049 E78189 East Asian ideograph 224F6B 7055 E78195 East Asian ideograph 224F71 7052 E78192 East Asian ideograph 224F73 705C E7819C East Asian ideograph 224F78 7059 E78199 East Asian ideograph 224F7B 705E E7819E East Asian ideograph 224F7C 7061 E781A1 East Asian ideograph 224F7D 705D E7819D East Asian ideograph 225021 9E02 E9B882 East Asian ideograph 225025 7066 E781A6 East Asian ideograph 225027 7065 E781A5 East Asian ideograph 225028 7068 E781A8 East Asian ideograph 225029 7054 E78194 East Asian ideograph 225039 7074 E781B4 East Asian ideograph 22503B 707A E781BA East Asian ideograph 225040 7093 E78293 East Asian ideograph 225042 7086 E78286 East Asian ideograph 225048 7096 E78296 East Asian ideograph 225049 7084 E78284 East Asian ideograph 22504A 7081 E78281 East Asian ideograph 225056 7088 E78288 East Asian ideograph 225057 7098 E78298 East Asian ideograph 225059 708C E7828C East Asian ideograph 22505C 70B7 E782B7 East Asian ideograph 225062 70A1 E782A1 East Asian ideograph 225063 70A3 E782A3 East Asian ideograph 225068 7551 E79591 East Asian ideograph 22506F 70A7 E782A7 East Asian ideograph 225070 79CC E7A78C East Asian ideograph 225071 70B5 E782B5 East Asian ideograph 225072 70BF E782BF East Asian ideograph 225073 70A9 E782A9 East Asian ideograph 225078 70EA E783AA East Asian ideograph 22507B 70E5 E783A5 East Asian ideograph 22507C 70DC E7839C East Asian ideograph 22507D 70D3 E78393 East Asian ideograph 225122 70DD E7839D East Asian ideograph 225123 70E1 E783A1 East Asian ideograph 225126 70E3 E783A3 East Asian ideograph 225128 70E0 E783A0 East Asian ideograph 22512B 70D4 E78394 East Asian ideograph 22512E 70D1 E78391 East Asian ideograph 225138 70CB E7838B East Asian ideograph 22513A 70D0 E78390 East Asian ideograph 22513B 70C7 E78387 East Asian ideograph 22513C 70DA E7839A East Asian ideograph 22513D 70C6 E78386 East Asian ideograph 22513F 70FA E783BA East Asian ideograph 225142 70F7 E783B7 East Asian ideograph 225144 7104 E78484 East Asian ideograph 225148 70F3 E783B3 East Asian ideograph 22514A 7110 E78490 East Asian ideograph 22514C 7103 E78483 East Asian ideograph 225150 70F4 E783B4 East Asian ideograph 225155 7111 E78491 East Asian ideograph 225156 7112 E78492 East Asian ideograph 22515C 710C E7848C East Asian ideograph 225160 70F6 E783B6 East Asian ideograph 225166 7113 E78493 East Asian ideograph 225167 70EF E783AF East Asian ideograph 225168 7100 E78480 East Asian ideograph 22516C 711E E7849E East Asian ideograph 22516D 7134 E784B4 East Asian ideograph 22516E 7120 E784A0 East Asian ideograph 22516F 713F E784BF East Asian ideograph 225174 7131 E784B1 East Asian ideograph 225175 712D E784AD East Asian ideograph 225227 7139 E784B9 East Asian ideograph 225228 7135 E784B5 East Asian ideograph 22522C 713B E784BB East Asian ideograph 22522E 711C E7849C East Asian ideograph 225232 713D E784BD East Asian ideograph 225235 712F E784AF East Asian ideograph 22523B 7129 E784A9 East Asian ideograph 225243 712E E784AE East Asian ideograph 225248 7177 E785B7 East Asian ideograph 225251 7146 E78586 East Asian ideograph 225252 7152 E78592 East Asian ideograph 225254 714F E7858F East Asian ideograph 225255 715D E7859D East Asian ideograph 225256 7141 E78581 East Asian ideograph 225257 7160 E785A0 East Asian ideograph 225259 7175 E785B5 East Asian ideograph 22525A 7173 E785B3 East Asian ideograph 22525C 7143 E78583 East Asian ideograph 22525D 715A E7859A East Asian ideograph 22525E 7176 E785B6 East Asian ideograph 225260 714B E7858B East Asian ideograph 225262 7147 E78587 East Asian ideograph 225265 7168 E785A8 East Asian ideograph 225266 7171 E785B1 East Asian ideograph 225267 715F E7859F East Asian ideograph 225269 7150 E78590 East Asian ideograph 22526B 7153 E78593 East Asian ideograph 225270 7144 E78584 East Asian ideograph 225276 7172 E785B2 East Asian ideograph 225278 7178 E785B8 East Asian ideograph 22527B 7187 E78687 East Asian ideograph 22527C 717B E785BB East Asian ideograph 225323 7192 E78692 East Asian ideograph 22532B 7180 E78680 East Asian ideograph 22532C 7189 E78689 East Asian ideograph 225332 7185 E78685 East Asian ideograph 225333 7196 E78696 East Asian ideograph 225336 717C E785BC East Asian ideograph 225339 7198 E78698 East Asian ideograph 22533C 7197 E78697 East Asian ideograph 22533E 71B5 E786B5 East Asian ideograph 22533F 71A9 E786A9 East Asian ideograph 225342 71A5 E786A5 East Asian ideograph 225346 719E E7869E East Asian ideograph 225347 71B2 E786B2 East Asian ideograph 22534A 719B E7869B East Asian ideograph 22534E 71AF E786AF East Asian ideograph 225351 71A4 E786A4 East Asian ideograph 225352 71A0 E786A0 East Asian ideograph 225355 719A E7869A East Asian ideograph 225357 71B3 E786B3 East Asian ideograph 225359 71B4 E786B4 East Asian ideograph 225367 71D1 E78791 East Asian ideograph 225369 71C7 E78787 East Asian ideograph 22536A 71B7 E786B7 East Asian ideograph 22536D 71CA E7878A East Asian ideograph 22536F 71CF E7878F East Asian ideograph 225370 71D6 E78796 East Asian ideograph 225372 71BA E786BA East Asian ideograph 225375 71C2 E78782 East Asian ideograph 225377 71C5 E78785 East Asian ideograph 22537A 71BF E786BF East Asian ideograph 22537C 71B8 E786B8 East Asian ideograph 225421 71DD E7879D East Asian ideograph 225422 71C0 E78780 East Asian ideograph 225424 71C1 E78781 East Asian ideograph 225426 71D4 E78794 East Asian ideograph 225429 71CB E7878B East Asian ideograph 22542A 71DE E7879E East Asian ideograph 225432 71EB E787AB East Asian ideograph 225436 71E8 E787A8 East Asian ideograph 22543A 71F5 E787B5 East Asian ideograph 22543D 71F3 E787B3 East Asian ideograph 22543F 71E1 E787A1 East Asian ideograph 225447 71E0 E787A0 East Asian ideograph 22544B 720C E7888C East Asian ideograph 22544F 71FC E787BC East Asian ideograph 225456 71F9 E787B9 East Asian ideograph 22545B 720E E7888E East Asian ideograph 22545C 5911 E5A491 East Asian ideograph 22545E 720A E7888A East Asian ideograph 225460 7217 E78897 East Asian ideograph 225461 7207 E78887 East Asian ideograph 225466 7215 E78895 East Asian ideograph 225469 7213 E78893 East Asian ideograph 22546E 7218 E78898 East Asian ideograph 225471 720B E7888B East Asian ideograph 225479 721A E7889A East Asian ideograph 22547D 721F E7889F East Asian ideograph 225521 721D E7889D East Asian ideograph 225529 7225 E788A5 East Asian ideograph 22552A 7226 E788A6 East Asian ideograph 225541 723F E788BF East Asian ideograph 225543 7241 E78981 East Asian ideograph 225544 7242 E78982 East Asian ideograph 22554F 7250 E78990 East Asian ideograph 225551 724F E7898F East Asian ideograph 225552 7253 E78993 East Asian ideograph 225553 7255 E78995 East Asian ideograph 225556 725A E7899A East Asian ideograph 225559 7263 E789A3 East Asian ideograph 225561 7273 E789B3 East Asian ideograph 225563 726E E789AE East Asian ideograph 225566 7276 E789B6 East Asian ideograph 225568 7277 E789B7 East Asian ideograph 22556B 727E E789BE East Asian ideograph 22556D 727C E789BC East Asian ideograph 225571 727F E789BF East Asian ideograph 225574 7289 E78A89 East Asian ideograph 22557C 728B E78A8B East Asian ideograph 225622 728D E78A8D East Asian ideograph 225628 728F E78A8F East Asian ideograph 225648 72A8 E78AA8 East Asian ideograph 22564C 72AB E78AAB East Asian ideograph 22564E 72B0 E78AB0 East Asian ideograph 22564F 72B4 E78AB4 East Asian ideograph 225651 72C6 E78B86 East Asian ideograph 225652 72B5 E78AB5 East Asian ideograph 225656 72BC E78ABC East Asian ideograph 225658 72C3 E78B83 East Asian ideograph 22565B 72C1 E78B81 East Asian ideograph 225660 72D6 E78B96 East Asian ideograph 225664 72D2 E78B92 East Asian ideograph 225667 72C9 E78B89 East Asian ideograph 22566C 72CC E78B8C East Asian ideograph 22566E 72DB E78B9B East Asian ideograph 22566F 72CD E78B8D East Asian ideograph 225673 72E8 E78BA8 East Asian ideograph 225676 72EB E78BAB East Asian ideograph 225679 72E5 E78BA5 East Asian ideograph 22567E 72FA E78BBA East Asian ideograph 225724 72F4 E78BB4 East Asian ideograph 225725 72FE E78BBE East Asian ideograph 225729 7302 E78C82 East Asian ideograph 22572C 72FB E78BBB East Asian ideograph 22572D 7301 E78C81 East Asian ideograph 22572E 72F3 E78BB3 East Asian ideograph 225731 731D E78C9D East Asian ideograph 225735 730B E78C8B East Asian ideograph 225736 7317 E78C97 East Asian ideograph 22573B 7307 E78C87 East Asian ideograph 22573E 7318 E78C98 East Asian ideograph 225742 731E E78C9E East Asian ideograph 225746 7331 E78CB1 East Asian ideograph 225749 7338 E78CB8 East Asian ideograph 22574A 7322 E78CA2 East Asian ideograph 22574C 7332 E78CB2 East Asian ideograph 22574D 732C E78CAC East Asian ideograph 22574E 7327 E78CA7 East Asian ideograph 22574F 732B E78CAB East Asian ideograph 225752 732F E78CAF East Asian ideograph 225755 7328 E78CA8 East Asian ideograph 22575A 7347 E78D87 East Asian ideograph 22575B 7348 E78D88 East Asian ideograph 22575C 7349 E78D89 East Asian ideograph 22575F 733B E78CBB East Asian ideograph 225762 733A E78CBA East Asian ideograph 225765 7340 E78D80 East Asian ideograph 225768 734D E78D8D East Asian ideograph 22576B 7352 E78D92 East Asian ideograph 225772 735E E78D9E East Asian ideograph 225774 735D E78D9D East Asian ideograph 225779 7360 E78DA0 East Asian ideograph 22577B 7358 E78D98 East Asian ideograph 22577E 7362 E78DA2 East Asian ideograph 225821 734B E78D8B East Asian ideograph 225825 7367 E78DA7 East Asian ideograph 225829 736C E78DAC East Asian ideograph 22582B 736B E78DAB East Asian ideograph 22582F 736F E78DAF East Asian ideograph 225836 737C E78DBC East Asian ideograph 225838 737E E78DBE East Asian ideograph 22583B 7381 E78E81 East Asian ideograph 22583F 7388 E78E88 East Asian ideograph 225842 738E E78E8E East Asian ideograph 225846 7395 E78E95 East Asian ideograph 225847 7392 E78E92 East Asian ideograph 225848 7397 E78E97 East Asian ideograph 22584C 7393 E78E93 East Asian ideograph 22584D 7394 E78E94 East Asian ideograph 225851 739E E78E9E East Asian ideograph 225852 73A6 E78EA6 East Asian ideograph 22585D 73A5 E78EA5 East Asian ideograph 225862 73A2 E78EA2 East Asian ideograph 225863 73A0 E78EA0 East Asian ideograph 225867 73B6 E78EB6 East Asian ideograph 225868 73CF E78F8F East Asian ideograph 22586A 73C2 E78F82 East Asian ideograph 22586B 73D0 E78F90 East Asian ideograph 22586F 73BF E78EBF East Asian ideograph 225870 73C8 E78F88 East Asian ideograph 22587D 73CC E78F8C East Asian ideograph 225921 73D3 E78F93 East Asian ideograph 225927 73EA E78FAA East Asian ideograph 225928 73E5 E78FA5 East Asian ideograph 22592A 73D9 E78F99 East Asian ideograph 22592B 73EF E78FAF East Asian ideograph 22592F 73D4 E78F94 East Asian ideograph 225930 73DB E78F9B East Asian ideograph 225932 73D6 E78F96 East Asian ideograph 225935 73BC E78EBC East Asian ideograph 225936 73E7 E78FA7 East Asian ideograph 225938 73E3 E78FA3 East Asian ideograph 22593A 73DE E78F9E East Asian ideograph 22593C 73E6 E78FA6 East Asian ideograph 22593F 73E9 E78FA9 East Asian ideograph 225945 73F6 E78FB6 East Asian ideograph 225947 73FA E78FBA East Asian ideograph 22594A 73F8 E78FB8 East Asian ideograph 225954 73F5 E78FB5 East Asian ideograph 22595A 73FD E78FBD East Asian ideograph 22595C 7407 E79087 East Asian ideograph 22595E 7412 E79092 East Asian ideograph 225963 743C E790BC East Asian ideograph 225966 742E E790AE East Asian ideograph 225967 742F E790AF East Asian ideograph 225969 7414 E79094 East Asian ideograph 22596A 742C E790AC East Asian ideograph 22596C 7430 E790B0 East Asian ideograph 22596E 742B E790AB East Asian ideograph 225970 73F7 E78FB7 East Asian ideograph 225971 741A E7909A East Asian ideograph 225978 7416 E79096 East Asian ideograph 22597A 7426 E790A6 East Asian ideograph 225A21 7428 E790A8 East Asian ideograph 225A23 7429 E790A9 East Asian ideograph 225A28 7420 E790A0 East Asian ideograph 225A2A 741B E7909B East Asian ideograph 225A2B 7424 E790A4 East Asian ideograph 225A2C 7432 E790B2 East Asian ideograph 225A2D 742D E790AD East Asian ideograph 225A30 7415 E79095 East Asian ideograph 225A32 743B E790BB East Asian ideograph 225A36 7444 E79184 East Asian ideograph 225A40 7447 E79187 East Asian ideograph 225A43 7458 E79198 East Asian ideograph 225A45 7442 E79182 East Asian ideograph 225A47 744B E7918B East Asian ideograph 225A4A 744A E7918A East Asian ideograph 225A4F 7452 E79192 East Asian ideograph 225A55 7457 E79197 East Asian ideograph 225A56 7451 E79191 East Asian ideograph 225A5A 745D E7919D East Asian ideograph 225A5B 7454 E79194 East Asian ideograph 225A5D 7440 E79180 East Asian ideograph 225A60 746D E791AD East Asian ideograph 225A61 7462 E791A2 East Asian ideograph 225A62 7473 E791B3 East Asian ideograph 225A68 7474 E791B4 East Asian ideograph 225A69 746E E791AE East Asian ideograph 225A6A 7471 E791B1 East Asian ideograph 225A6B 7468 E791A8 East Asian ideograph 225A78 7460 E791A0 East Asian ideograph 225A79 7472 E791B2 East Asian ideograph 225A7A 7484 E79284 East Asian ideograph 225A7B 7487 E79287 East Asian ideograph 225A7E 7488 E79288 East Asian ideograph 225B21 7489 E79289 East Asian ideograph 225B22 747C E791BC East Asian ideograph 225B27 7482 E79282 East Asian ideograph 225B28 747E E791BE East Asian ideograph 225B2A 748A E7928A East Asian ideograph 225B2D 7486 E79286 East Asian ideograph 225B30 747A E791BA East Asian ideograph 225B38 7480 E79280 East Asian ideograph 225B3C 7481 E79281 East Asian ideograph 225B3E 747D E791BD East Asian ideograph 225B3F 7485 E79285 East Asian ideograph 225B40 7497 E79297 East Asian ideograph 225B43 7498 E79298 East Asian ideograph 225B45 749A E7929A East Asian ideograph 225B4D 74A4 E792A4 East Asian ideograph 225B54 749F E7929F East Asian ideograph 225B55 749D E7929D East Asian ideograph 225B56 748D E7928D East Asian ideograph 225B57 749E E7929E East Asian ideograph 225B59 74A0 E792A0 East Asian ideograph 225B5D 74A1 E792A1 East Asian ideograph 225B60 74B2 E792B2 East Asian ideograph 225B61 74B1 E792B1 East Asian ideograph 225B66 74B4 E792B4 East Asian ideograph 225B67 74AB E792AB East Asian ideograph 225B69 74AA E792AA East Asian ideograph 225B6A 7490 E79290 East Asian ideograph 225B6C 74A5 E792A5 East Asian ideograph 225B6E 74A8 E792A8 East Asian ideograph 225B76 74B8 E792B8 East Asian ideograph 225B7A 74C0 E79380 East Asian ideograph 225C25 74BF E792BF East Asian ideograph 225C28 74B5 E792B5 East Asian ideograph 225C29 74BA E792BA East Asian ideograph 225C30 74C8 E79388 East Asian ideograph 225C31 74C5 E79385 East Asian ideograph 225C32 74CC E7938C East Asian ideograph 225C38 74D6 E79396 East Asian ideograph 225C3A 74D4 E79394 East Asian ideograph 225C3D 74D8 E79398 East Asian ideograph 225C40 74DA E7939A East Asian ideograph 225C41 74DB E7939B East Asian ideograph 225C47 74DE E7939E East Asian ideograph 225C50 74E4 E793A4 East Asian ideograph 225C52 74E7 E793A7 East Asian ideograph 225C54 74E9 E793A9 East Asian ideograph 225C58 74F1 E793B1 East Asian ideograph 225C5A 74F0 E793B0 East Asian ideograph 225C5C 74EE E793AE East Asian ideograph 225C61 74F4 E793B4 East Asian ideograph 225C63 74F8 E793B8 East Asian ideograph 225C66 74FB E793BB East Asian ideograph 225C67 74FF E793BF East Asian ideograph 225C71 7505 E79485 East Asian ideograph 225C77 7503 E79483 East Asian ideograph 225C7D 7507 E79487 East Asian ideograph 225D25 750E E7948E East Asian ideograph 225D28 750D E7948D East Asian ideograph 225D2C 7511 E79491 East Asian ideograph 225D2D 750F E7948F East Asian ideograph 225D32 7512 E79492 East Asian ideograph 225D33 7513 E79493 East Asian ideograph 225D39 7517 E79497 East Asian ideograph 225D42 7521 E794A1 East Asian ideograph 225D44 7524 E794A4 East Asian ideograph 225D49 752F E794AF East Asian ideograph 225D4D 753A E794BA East Asian ideograph 225D4F 753F E794BF East Asian ideograph 225D51 7540 E79580 East Asian ideograph 225D52 753E E794BE East Asian ideograph 225D55 754A E7958A East Asian ideograph 225D57 754E E7958E East Asian ideograph 225D58 7547 E79587 East Asian ideograph 225D59 754B E7958B East Asian ideograph 225D5A 7548 E79588 East Asian ideograph 225D5F 755F E7959F East Asian ideograph 225D60 755B E7959B East Asian ideograph 225D62 7564 E795A4 East Asian ideograph 225D67 7563 E795A3 East Asian ideograph 225D69 756F E795AF East Asian ideograph 225D6B 756C E795AC East Asian ideograph 225D6D 7579 E795B9 East Asian ideograph 225D6E 757A E795BA East Asian ideograph 225D71 7577 E795B7 East Asian ideograph 225D75 7571 E795B1 East Asian ideograph 225D79 757D E795BD East Asian ideograph 225D7E 757F E795BF East Asian ideograph 225E25 7583 E79683 East Asian ideograph 225E2C 7590 E79690 East Asian ideograph 225E2D 7592 E79692 East Asian ideograph 225E2E 7594 E79694 East Asian ideograph 225E31 7595 E79695 East Asian ideograph 225E35 7598 E79698 East Asian ideograph 225E37 75A2 E796A2 East Asian ideograph 225E3B 75A3 E796A3 East Asian ideograph 225E3E 75BA E796BA East Asian ideograph 225E43 75B0 E796B0 East Asian ideograph 225E44 75C3 E79783 East Asian ideograph 225E46 75BF E796BF East Asian ideograph 225E47 75B4 E796B4 East Asian ideograph 225E4A 75C2 E79782 East Asian ideograph 225E4E 75C1 E79781 East Asian ideograph 225E50 75B1 E796B1 East Asian ideograph 225E51 75C4 E79784 East Asian ideograph 225E58 75CD E7978D East Asian ideograph 225E5C 75CF E7978F East Asian ideograph 225E5E 75CC E7978C East Asian ideograph 225E5F 75D0 E79790 East Asian ideograph 225E63 75E7 E797A7 East Asian ideograph 225E66 75E1 E797A1 East Asian ideograph 225E67 75E6 E797A6 East Asian ideograph 225E71 75E4 E797A4 East Asian ideograph 225E72 75E0 E797A0 East Asian ideograph 225E73 75D7 E79797 East Asian ideograph 225E7A 7602 E79882 East Asian ideograph 225E7E 7603 E79883 East Asian ideograph 225F21 75F9 E797B9 East Asian ideograph 225F22 75FC E797BC East Asian ideograph 225F29 7616 E79896 East Asian ideograph 225F2C 7608 E79888 East Asian ideograph 225F2D 7615 E79895 East Asian ideograph 225F2E 760C E7988C East Asian ideograph 225F2F 760F E7988F East Asian ideograph 225F3B 7610 E79890 East Asian ideograph 225F3C 760A E7988A East Asian ideograph 225F3E 7625 E798A5 East Asian ideograph 225F3F 761A E7989A East Asian ideograph 225F40 761B E7989B East Asian ideograph 225F47 7619 E79899 East Asian ideograph 225F48 761E E7989E East Asian ideograph 225F4C 761D E7989D East Asian ideograph 225F50 7622 E798A2 East Asian ideograph 225F51 762F E798AF East Asian ideograph 225F54 762D E798AD East Asian ideograph 225F5C 7633 E798B3 East Asian ideograph 225F5E 763B E798BB East Asian ideograph 225F5F 7630 E798B0 East Asian ideograph 225F60 763C E798BC East Asian ideograph 225F62 7635 E798B5 East Asian ideograph 225F67 7648 E79988 East Asian ideograph 225F68 764E E7998E East Asian ideograph 225F69 7647 E79987 East Asian ideograph 225F6A 7643 E79983 East Asian ideograph 225F6E 764D E7998D East Asian ideograph 225F6F 7649 E79989 East Asian ideograph 225F75 7654 E79994 East Asian ideograph 225F7A 765C E7999C East Asian ideograph 225F7B 7657 E79997 East Asian ideograph 226022 7664 E799A4 East Asian ideograph 226024 7659 E79999 East Asian ideograph 22602B 765F E7999F East Asian ideograph 226032 7667 E799A7 East Asian ideograph 226035 766A E799AA East Asian ideograph 226037 766D E799AD East Asian ideograph 226038 766F E799AF East Asian ideograph 22603A 7670 E799B0 East Asian ideograph 226040 7676 E799B6 East Asian ideograph 226041 7677 E799B7 East Asian ideograph 226048 7680 E79A80 East Asian ideograph 22604A 768B E79A8B East Asian ideograph 226052 7695 E79A95 East Asian ideograph 226055 656B E695AB East Asian ideograph 226059 7699 E79A99 East Asian ideograph 22605D 769C E79A9C East Asian ideograph 22605F 769D E79A9D East Asian ideograph 226065 76A4 E79AA4 East Asian ideograph 226066 76A5 E79AA5 East Asian ideograph 226067 76A6 E79AA6 East Asian ideograph 22606A 76AA E79AAA East Asian ideograph 22606D 76AD E79AAD East Asian ideograph 226074 76B8 E79AB8 East Asian ideograph 226077 76BD E79ABD East Asian ideograph 226123 76CB E79B8B East Asian ideograph 226126 76CC E79B8C East Asian ideograph 22613B 76E6 E79BA6 East Asian ideograph 22613C 76E9 E79BA9 East Asian ideograph 226140 76EC E79BAC East Asian ideograph 226144 76ED E79BAD East Asian ideograph 226148 76F1 E79BB1 East Asian ideograph 22614B 7704 E79C84 East Asian ideograph 22614F 7708 E79C88 East Asian ideograph 226150 7707 E79C87 East Asian ideograph 226153 76F7 E79BB7 East Asian ideograph 226154 770A E79C8A East Asian ideograph 226159 76FB E79BBB East Asian ideograph 22615E 772B E79CAB East Asian ideograph 226160 770E E79C8E East Asian ideograph 226162 771B E79C9B East Asian ideograph 226163 7724 E79CA4 East Asian ideograph 22616C 7722 E79CA2 East Asian ideograph 22616D 771A E79C9A East Asian ideograph 22616F 7721 E79CA1 East Asian ideograph 226174 7740 E79D80 East Asian ideograph 226175 7739 E79CB9 East Asian ideograph 226176 772F E79CAF East Asian ideograph 226177 7731 E79CB1 East Asian ideograph 226222 7725 E79CA5 East Asian ideograph 226225 7735 E79CB5 East Asian ideograph 226226 7734 E79CB4 East Asian ideograph 22622D 7747 E79D87 East Asian ideograph 226231 7745 E79D85 East Asian ideograph 226232 774D E79D8D East Asian ideograph 226233 774A E79D8A East Asian ideograph 226235 7743 E79D83 East Asian ideograph 226237 774E E79D8E East Asian ideograph 22623A 775F E79D9F East Asian ideograph 22623D 7760 E79DA0 East Asian ideograph 22623E 7752 E79D92 East Asian ideograph 226242 7758 E79D98 East Asian ideograph 226244 7756 E79D96 East Asian ideograph 226245 775A E79D9A East Asian ideograph 22624F 7762 E79DA2 East Asian ideograph 226252 7780 E79E80 East Asian ideograph 226256 776F E79DAF East Asian ideograph 22625D 777E E79DBE East Asian ideograph 22625F 7785 E79E85 East Asian ideograph 226260 777A E79DBA East Asian ideograph 226266 778B E79E8B East Asian ideograph (variant of EACC 4C6266) 22626A 778D E79E8D East Asian ideograph 226272 7798 E79E98 East Asian ideograph 226273 7796 E79E96 East Asian ideograph 226275 77A2 E79EA2 East Asian ideograph 226276 7799 E79E99 East Asian ideograph 22627A 77B5 E79EB5 East Asian ideograph 22627D 77B7 E79EB7 East Asian ideograph 226323 77B6 E79EB6 East Asian ideograph 226329 77BE E79EBE East Asian ideograph 22632B 77B9 E79EB9 East Asian ideograph 22632C 77BC E79EBC East Asian ideograph 226335 77CD E79F8D East Asian ideograph 22633A 77D1 E79F91 East Asian ideograph 226345 77DE E79F9E East Asian ideograph 226346 77DF E79F9F East Asian ideograph 22634F 77E7 E79FA7 East Asian ideograph 226352 77E6 E79FA6 East Asian ideograph 226355 77EC E79FAC East Asian ideograph 226359 77F0 E79FB0 East Asian ideograph 22635A 77F1 E79FB1 East Asian ideograph 22635C 77F4 E79FB4 East Asian ideograph 226360 77FC E79FBC East Asian ideograph 226367 77F8 E79FB8 East Asian ideograph 226368 77FB E79FBB East Asian ideograph 226370 7809 E7A089 East Asian ideograph 226371 7806 E7A086 East Asian ideograph 226373 7819 E7A099 East Asian ideograph 226374 7811 E7A091 East Asian ideograph 226378 7812 E7A092 East Asian ideograph 226424 781B E7A09B East Asian ideograph 226426 782C E7A0AC East Asian ideograph 226427 7823 E7A0A3 East Asian ideograph 226428 782B E7A0AB East Asian ideograph 22642A 7829 E7A0A9 East Asian ideograph 22642D 7822 E7A0A2 East Asian ideograph 226431 7835 E7A0B5 East Asian ideograph 226432 7833 E7A0B3 East Asian ideograph 226433 782E E7A0AE East Asian ideograph 226435 7820 E7A0A0 East Asian ideograph 226438 783D E7A0BD East Asian ideograph 22643B 781F E7A09F East Asian ideograph 22643D 7831 E7A0B1 East Asian ideograph 226444 784D E7A18D East Asian ideograph 226448 7848 E7A188 East Asian ideograph 226449 7853 E7A193 East Asian ideograph 22644A 7854 E7A194 East Asian ideograph 22644B 7845 E7A185 East Asian ideograph 22644C 7852 E7A192 East Asian ideograph 22644E 7850 E7A190 East Asian ideograph 22644F 7858 E7A198 East Asian ideograph 226450 7826 E7A0A6 East Asian ideograph 226452 7847 E7A187 East Asian ideograph 226456 784C E7A18C East Asian ideograph 22645A 7868 E7A1A8 East Asian ideograph 22645B 786D E7A1AD East Asian ideograph 226460 7864 E7A1A4 East Asian ideograph 226461 785C E7A19C East Asian ideograph 226464 7876 E7A1B6 East Asian ideograph 226466 786A E7A1AA East Asian ideograph 226469 7886 E7A286 East Asian ideograph 22646B 789A E7A29A East Asian ideograph 22646C 787F E7A1BF East Asian ideograph 22646D 7887 E7A287 East Asian ideograph 226470 7894 E7A294 East Asian ideograph 226476 788F E7A28F East Asian ideograph 22647E 7899 E7A299 East Asian ideograph 226529 7893 E7A293 East Asian ideograph 22652C 7892 E7A292 East Asian ideograph 22652D 7896 E7A296 East Asian ideograph 22652F 78B2 E7A2B2 East Asian ideograph 226531 78A1 E7A2A1 East Asian ideograph 226532 78B6 E7A2B6 East Asian ideograph 226539 78B7 E7A2B7 East Asian ideograph 22653B 78A4 E7A2A4 East Asian ideograph 22653E 78B4 E7A2B4 East Asian ideograph 226540 78AD E7A2AD East Asian ideograph 226541 78A3 E7A2A3 East Asian ideograph 226543 789E E7A29E East Asian ideograph 226544 78A8 E7A2A8 East Asian ideograph 226548 78AB E7A2AB East Asian ideograph 22654E 78BB E7A2BB East Asian ideograph 226555 78CC E7A38C East Asian ideograph 226556 78C9 E7A389 East Asian ideograph 226558 78D1 E7A391 East Asian ideograph 22655A 78D8 E7A398 East Asian ideograph 22655E 78C8 E7A388 East Asian ideograph 226560 78D4 E7A394 East Asian ideograph 226568 78DF E7A39F East Asian ideograph 22656A 78E7 E7A3A7 East Asian ideograph 22656E 78DB E7A39B East Asian ideograph 22656F 78E1 E7A3A1 East Asian ideograph 226573 78E0 E7A3A0 East Asian ideograph 226576 78EE E7A3AE East Asian ideograph 226577 78E3 E7A3A3 East Asian ideograph 226579 78F2 E7A3B2 East Asian ideograph 22657E 7905 E7A485 East Asian ideograph 226621 78F9 E7A3B9 East Asian ideograph 226622 78FD E7A3BD East Asian ideograph 226627 78FE E7A3BE East Asian ideograph 226629 78FB E7A3BB East Asian ideograph 22662B 7904 E7A484 East Asian ideograph 22662E 7912 E7A492 East Asian ideograph 226632 790C E7A48C East Asian ideograph 226634 7913 E7A493 East Asian ideograph 226635 7911 E7A491 East Asian ideograph 226643 791E E7A49E East Asian ideograph 226646 7922 E7A4A2 East Asian ideograph 22664C 7924 E7A4A4 East Asian ideograph 22664D 7927 E7A4A7 East Asian ideograph 226650 7929 E7A4A9 East Asian ideograph 226655 7931 E7A4B1 East Asian ideograph 22665D 7934 E7A4B4 East Asian ideograph 226660 7936 E7A4B6 East Asian ideograph 226665 793D E7A4BD East Asian ideograph 226667 7942 E7A582 East Asian ideograph 226668 793F E7A4BF East Asian ideograph 22666A 794A E7A58A East Asian ideograph 22666B 794D E7A58D East Asian ideograph 226675 7946 E7A586 East Asian ideograph 226677 7958 E7A598 East Asian ideograph 226679 795B E7A59B East Asian ideograph 22667A 795C E7A59C East Asian ideograph 22667B 794F E7A58F East Asian ideograph 22667C 7953 E7A593 East Asian ideograph 22667D 7953 E7A593 East Asian ideograph (unrelated variant of EACC 22667C) 226721 7951 E7A591 East Asian ideograph 226723 7954 E7A594 East Asian ideograph 22672A 7967 E7A5A7 East Asian ideograph 22672D 796B E7A5AB East Asian ideograph 226730 7972 E7A5B2 East Asian ideograph 22673E 797C E7A5BC East Asian ideograph 22674A 7998 E7A698 East Asian ideograph 22674B 798A E7A68A East Asian ideograph 22674D 7999 E7A699 East Asian ideograph 22674E 7995 E7A695 East Asian ideograph 22674F 798B E7A68B East Asian ideograph 226750 7996 E7A696 East Asian ideograph 226754 7994 E7A694 East Asian ideograph 226755 7993 E7A693 East Asian ideograph 22675C 799A E7A69A East Asian ideograph 22675F 79A1 E7A6A1 East Asian ideograph 226760 799B E7A69B East Asian ideograph 226761 79A3 E7A6A3 East Asian ideograph 226764 799D E7A69D East Asian ideograph 22676E 79A9 E7A6A9 East Asian ideograph 226770 79AB E7A6AB East Asian ideograph 226771 79A8 E7A6A8 East Asian ideograph 226775 79B0 E7A6B0 East Asian ideograph 22677A 79B3 E7A6B3 East Asian ideograph 22677B 79B4 E7A6B4 East Asian ideograph 226822 79B8 E7A6B8 East Asian ideograph 226823 79BA E7A6BA East Asian ideograph 226825 79BC E7A6BC East Asian ideograph 226828 79C6 E7A786 East Asian ideograph 22682A 79C8 E7A788 East Asian ideograph 22682D 79D4 E7A794 East Asian ideograph 22682E 79D5 E7A795 East Asian ideograph 226832 79D6 E7A796 East Asian ideograph 22683D 79EC E7A7AC East Asian ideograph 22683E 79EB E7A7AB East Asian ideograph (variant of EACC 4C683E) 226842 79E1 E7A7A1 East Asian ideograph 226844 79DD E7A79D East Asian ideograph 226845 79ED E7A7AD East Asian ideograph 226848 79F8 E7A7B8 East Asian ideograph 22684F 7A02 E7A882 East Asian ideograph 226850 7A0A E7A88A East Asian ideograph 226854 7A09 E7A889 East Asian ideograph 22685C 7A03 E7A883 East Asian ideograph 226861 7A0C E7A88C East Asian ideograph 22686B 7A11 E7A891 East Asian ideograph 22686C 7A18 E7A898 East Asian ideograph 22686F 7A19 E7A899 East Asian ideograph (variant of EACC 2E686F) 226871 7A1E E7A89E East Asian ideograph 226876 7A17 E7A897 East Asian ideograph 22687E 7A2D E7A8AD East Asian ideograph 226922 7A2C E7A8AC East Asian ideograph 226939 7A48 E7A988 East Asian ideograph 22693D 7A4B E7A98B East Asian ideograph 22693E 7A47 E7A987 East Asian ideograph 22693F 7A44 E7A984 East Asian ideograph 226940 7A5C E7A99C East Asian ideograph 22694D 7A5F E7A99F East Asian ideograph 22694F 7A60 E7A9A0 East Asian ideograph 226957 7A6E E7A9AE East Asian ideograph 22695F 7A70 E7A9B0 East Asian ideograph 226966 7A75 E7A9B5 East Asian ideograph 226969 7A78 E7A9B8 East Asian ideograph 22696B 7A80 E7AA80 East Asian ideograph 226970 7A85 E7AA85 East Asian ideograph 226975 7A86 E7AA86 East Asian ideograph 226978 7A8A E7AA8A East Asian ideograph 22697A 7A94 E7AA94 East Asian ideograph 22697E 68A5 E6A2A5 East Asian ideograph 226A28 7AA3 E7AAA3 East Asian ideograph 226A2B 7A9E E7AA9E East Asian ideograph 226A2C 7AA7 E7AAA7 East Asian ideograph 226A2E 7AA8 E7AAA8 East Asian ideograph 226A31 7AAC E7AAAC East Asian ideograph 226A36 7AB3 E7AAB3 East Asian ideograph 226A3A 7ABD E7AABD East Asian ideograph 226A3C 7AB6 E7AAB6 East Asian ideograph 226A3D 7AB8 E7AAB8 East Asian ideograph 226A3E 7AB5 E7AAB5 East Asian ideograph 226A3F 7ABB E7AABB East Asian ideograph 226A43 7ABF E7AABF East Asian ideograph 226A49 7ACD E7AB8D East Asian ideograph 226A4B 7ACF E7AB8F East Asian ideograph 226A4F 7AD1 E7AB91 East Asian ideograph 226A51 7AD3 E7AB93 East Asian ideograph 226A52 7AD4 E7AB94 East Asian ideograph 226A54 7AD5 E7AB95 East Asian ideograph 226A55 7ADA E7AB9A East Asian ideograph 226A5A 7AE1 E7ABA1 East Asian ideograph 226A5E 7AE6 E7ABA6 East Asian ideograph 226A66 7AEB E7ABAB East Asian ideograph 226A6B 7AF0 E7ABB0 East Asian ideograph 226A76 7AF5 E7ABB5 East Asian ideograph 226A7C 7AFE E7ABBE East Asian ideograph 226B27 7B39 E7ACB9 East Asian ideograph 226B2D 7B0F E7AC8F East Asian ideograph 226B2E 7B08 E7AC88 East Asian ideograph 226B33 7B0A E7AC8A East Asian ideograph 226B35 7B35 E7ACB5 East Asian ideograph 226B36 7B25 E7ACA5 East Asian ideograph 226B39 7B38 E7ACB8 East Asian ideograph 226B3B 7B3B E7ACBB East Asian ideograph 226B3F 7B24 E7ACA4 East Asian ideograph 226B40 7B33 E7ACB3 East Asian ideograph 226B42 7B2A E7ACAA East Asian ideograph 226B44 7B18 E7AC98 East Asian ideograph 226B47 7B31 E7ACB1 East Asian ideograph 226B4A 7B2B E7ACAB East Asian ideograph 226B4B 7B37 E7ACB7 East Asian ideograph 226B4D 7B1F E7AC9F East Asian ideograph 226B52 7B4A E7AD8A East Asian ideograph 226B53 7B59 E7AD99 East Asian ideograph 226B54 7B04 E7AC84 East Asian ideograph (variant of EACC 2E6B54) 226B55 7B47 E7AD87 East Asian ideograph 226B59 7B58 E7AD98 East Asian ideograph 226B5B 7B6C E7ADAC East Asian ideograph 226B60 7B48 E7AD88 East Asian ideograph 226B61 7B45 E7AD85 East Asian ideograph 226B62 7B4C E7AD8C East Asian ideograph 226B63 7B4E E7AD8E East Asian ideograph 226B68 7B66 E7ADA6 East Asian ideograph 226B6C 7B64 E7ADA4 East Asian ideograph 226B6E 7B69 E7ADA9 East Asian ideograph 226B70 7B6D E7ADAD East Asian ideograph 226B74 7B62 E7ADA2 East Asian ideograph 226B75 7B6E E7ADAE East Asian ideograph 226B76 7B74 E7ADB4 East Asian ideograph 226B79 7B72 E7ADB2 East Asian ideograph 226B7A 7B78 E7ADB8 East Asian ideograph 226B7B 7B6F E7ADAF East Asian ideograph 226B7C 7B67 E7ADA7 East Asian ideograph 226B7E 7B65 E7ADA5 East Asian ideograph 226C26 7B71 E7ADB1 East Asian ideograph 226C27 7B70 E7ADB0 East Asian ideograph 226C29 7B73 E7ADB3 East Asian ideograph 226C2D 7B9C E7AE9C East Asian ideograph 226C33 7B92 E7AE92 East Asian ideograph 226C34 7B91 E7AE91 East Asian ideograph 226C35 7B90 E7AE90 East Asian ideograph 226C38 7BA3 E7AEA3 East Asian ideograph 226C3A 7B8D E7AE8D East Asian ideograph 226C41 7B85 E7AE85 East Asian ideograph 226C43 7B8E E7AE8E East Asian ideograph 226C44 7B98 E7AE98 East Asian ideograph 226C46 7B86 E7AE86 East Asian ideograph 226C48 7B99 E7AE99 East Asian ideograph 226C52 7BB2 E7AEB2 East Asian ideograph 226C58 7BCB E7AF8B East Asian ideograph 226C59 7BB8 E7AEB8 East Asian ideograph 226C5A 7BCF E7AF8F East Asian ideograph 226C5C 7BD0 E7AF90 East Asian ideograph 226C60 7BBE E7AEBE East Asian ideograph 226C6F 7BCC E7AF8C East Asian ideograph 226D22 7BDD E7AF9D East Asian ideograph 226D24 7BE5 E7AFA5 East Asian ideograph 226D29 7BE8 E7AFA8 East Asian ideograph 226D2E 7BF9 E7AFB9 East Asian ideograph 226D2F 7BD4 E7AF94 East Asian ideograph 226D32 7BDF E7AF9F East Asian ideograph 226D35 7BD8 E7AF98 East Asian ideograph 226D37 7BEA E7AFAA East Asian ideograph (unrelated variant of EACC 3A6A7C) 226D3B 7C06 E7B086 East Asian ideograph 226D3E 7BF0 E7AFB0 East Asian ideograph 226D41 7C0F E7B08F East Asian ideograph 226D46 7C0B E7B08B East Asian ideograph 226D47 7C00 E7B080 East Asian ideograph 226D4B 7C0C E7B08C East Asian ideograph 226D4F 7BF4 E7AFB4 East Asian ideograph 226D54 7BF3 E7AFB3 East Asian ideograph 226D5A 7C09 E7B089 East Asian ideograph 226D5B 7C03 E7B083 East Asian ideograph 226D5C 7BFC E7AFBC East Asian ideograph 226D5F 7C1C E7B09C East Asian ideograph 226D61 7C26 E7B0A6 East Asian ideograph 226D62 7C28 E7B0A8 East Asian ideograph 226D63 7C20 E7B0A0 East Asian ideograph 226D66 7C1F E7B09F East Asian ideograph 226D68 7C2F E7B0AF East Asian ideograph 226D75 7C30 E7B0B0 East Asian ideograph 226E27 7C35 E7B0B5 East Asian ideograph 226E2A 7C40 E7B180 East Asian ideograph 226E30 7C39 E7B0B9 East Asian ideograph 226E34 7C3B E7B0BB East Asian ideograph 226E35 7C34 E7B0B4 East Asian ideograph 226E3B 7C42 E7B182 East Asian ideograph 226E46 7C4E E7B18E East Asian ideograph 226E54 7C5D E7B19D East Asian ideograph 226E56 7C5C E7B19C East Asian ideograph 226E57 7C5A E7B19A East Asian ideograph 226E58 7C5B E7B19B East Asian ideograph 226E59 7C59 E7B199 East Asian ideograph 226E5B 7C5E E7B19E East Asian ideograph 226E5C 7C67 E7B1A7 East Asian ideograph 226E5E 7C63 E7B1A3 East Asian ideograph 226E61 7C68 E7B1A8 East Asian ideograph 226E62 7C65 E7B1A5 East Asian ideograph 226E6F 7C6F E7B1AF East Asian ideograph 226E75 7C75 E7B1B5 East Asian ideograph 226E79 7C7E E7B1BE East Asian ideograph 226E7A 7C78 E7B1B8 East Asian ideograph 226E7D 7C7D E7B1BD East Asian ideograph 226F21 7C81 E7B281 East Asian ideograph 226F28 7C8E E7B28E East Asian ideograph 226F29 7C91 E7B291 East Asian ideograph 226F2A 7C83 E7B283 East Asian ideograph 226F2C 7C8D E7B28D East Asian ideograph 226F3A 7C99 E7B299 East Asian ideograph 226F3B 7C98 E7B298 East Asian ideograph 226F3E 7C9C E7B29C East Asian ideograph 226F40 7C95 E7B295 East Asian ideograph 226F42 7CA7 E7B2A7 East Asian ideograph 226F43 7CA2 E7B2A2 East Asian ideograph 226F45 7C9E E7B29E East Asian ideograph 226F46 7CA9 E7B2A9 East Asian ideograph 226F48 7CA8 E7B2A8 East Asian ideograph 226F49 7CA1 E7B2A1 East Asian ideograph 226F4A 7CAC E7B2AC East Asian ideograph 226F4C 7CA6 E7B2A6 East Asian ideograph 226F54 7CB2 E7B2B2 East Asian ideograph 226F58 7CBB E7B2BB East Asian ideograph 226F59 7CBF E7B2BF East Asian ideograph 226F5E 7CBA E7B2BA East Asian ideograph 226F5F 7CBC E7B2BC East Asian ideograph 226F64 7CC2 E7B382 East Asian ideograph 226F66 7CCE E7B38E East Asian ideograph 226F68 7CC8 E7B388 East Asian ideograph 226F69 7CC5 E7B385 East Asian ideograph 226F6D 7CCC E7B38C East Asian ideograph 226F6F 7CC9 E7B389 East Asian ideograph 226F71 7CD2 E7B392 East Asian ideograph 226F75 7CD7 E7B397 East Asian ideograph 226F77 7CE1 E7B3A1 East Asian ideograph 226F7B 7CE8 E7B3A8 East Asian ideograph (variant of EACC 4C6F7B) 227022 7CDD E7B39D East Asian ideograph 227028 7CED E7B3AD East Asian ideograph 22702E 7CF0 E7B3B0 East Asian ideograph 227030 7CF2 E7B3B2 East Asian ideograph 227035 7CF4 E7B3B4 East Asian ideograph 227039 7CF6 E7B3B6 East Asian ideograph 227042 7D06 E7B486 East Asian ideograph 227044 7D03 E7B483 East Asian ideograph 227045 7D08 E7B488 East Asian ideograph 227049 7D0F E7B48F East Asian ideograph 22704A 7D13 E7B493 East Asian ideograph 227050 7D18 E7B498 East Asian ideograph 227051 7D1E E7B49E East Asian ideograph 227052 7D1D E7B49D East Asian ideograph 227059 7D35 E7B4B5 East Asian ideograph 22705A 7D3D E7B4BD East Asian ideograph 227061 7D3A E7B4BA East Asian ideograph 227062 7D32 E7B4B2 East Asian ideograph 227065 7D31 E7B4B1 East Asian ideograph 227068 7D45 E7B585 East Asian ideograph 22706A 7D3F E7B4BF East Asian ideograph 22706C 7D29 E7B4A9 East Asian ideograph 22706F 7D41 E7B581 East Asian ideograph 227071 7D3E E7B4BE East Asian ideograph 22707A 7D5C E7B59C East Asian ideograph 22707C 7D53 E7B593 East Asian ideograph 22707E 7D5A E7B59A East Asian ideograph 227122 7D70 E7B5B0 East Asian ideograph 227129 7D67 E7B5A7 East Asian ideograph 22712B 7D6A E7B5AA East Asian ideograph 22712C 7D6B E7B5AB East Asian ideograph 227130 7D73 E7B5B3 East Asian ideograph 227134 7D4E E7B58E East Asian ideograph 227137 7D8B E7B68B East Asian ideograph 227139 7D88 E7B688 East Asian ideograph 22713B 7D85 E7B685 East Asian ideograph 22713D 7D8E E7B68E East Asian ideograph 227142 7D7F E7B5BF East Asian ideograph 227144 7D86 E7B686 East Asian ideograph 227148 7D8D E7B68D East Asian ideograph 22714B 7D9B E7B69B East Asian ideograph 22714D 7D83 E7B683 East Asian ideograph 22714F 7D7D E7B5BD East Asian ideograph 227154 7D7B E7B5BB East Asian ideograph 227158 7D7A E7B5BA East Asian ideograph 227159 7D96 E7B696 East Asian ideograph 22715A 7D5B E7B59B East Asian ideograph 22715B 7D8C E7B68C East Asian ideograph 227161 7DA3 E7B6A3 East Asian ideograph 227162 7DAE E7B6AE East Asian ideograph 227167 7DCB E7B78B East Asian ideograph 227169 7DAA E7B6AA East Asian ideograph 22716A 7DCE E7B78E East Asian ideograph 22716B 7DC9 E7B789 East Asian ideograph 22716E 7DC5 E7B785 East Asian ideograph 22716F 7DA6 E7B6A6 East Asian ideograph 227174 7DC4 E7B784 East Asian ideograph 227178 7DAC E7B6AC East Asian ideograph 22717D 7DB9 E7B6B9 East Asian ideograph 227222 7D9F E7B69F East Asian ideograph 227229 7DE1 E7B7A1 East Asian ideograph 22722A 7DD9 E7B799 East Asian ideograph 22722B 7DE4 E7B7A4 East Asian ideograph 227231 7DD7 E7B797 East Asian ideograph 227236 7DF9 E7B7B9 East Asian ideograph 22723A 7E06 E7B886 East Asian ideograph 22723C 7DF2 E7B7B2 East Asian ideograph 22723E 7DE6 E7B7A6 East Asian ideograph 227246 7DDC E7B79C East Asian ideograph 227247 7DF1 E7B7B1 East Asian ideograph 227248 7DF6 E7B7B6 East Asian ideograph 227249 7DE5 E7B7A5 East Asian ideograph 22724B 7DF5 E7B7B5 East Asian ideograph 227250 7E17 E7B897 East Asian ideograph 227251 7E1E E7B89E East Asian ideograph 227252 7E21 E7B8A1 East Asian ideograph 227253 7E0B E7B88B East Asian ideograph 227255 7E12 E7B892 East Asian ideograph 227256 7E22 E7B8A2 East Asian ideograph 22725B 7E20 E7B8A0 East Asian ideograph 22725D 7E1D E7B89D East Asian ideograph 22725E 7E09 E7B889 East Asian ideograph 22725F 7E1F E7B89F East Asian ideograph 227265 7E15 E7B895 East Asian ideograph 227269 7E10 E7B890 East Asian ideograph 22726A 7E0F E7B88F East Asian ideograph 22726D 7E3B E7B8BB East Asian ideograph 227271 7E34 E7B8B4 East Asian ideograph 227272 7E2D E7B8AD East Asian ideograph 227273 7E2F E7B8AF East Asian ideograph 227275 7E36 E7B8B6 East Asian ideograph 227277 7E3A E7B8BA East Asian ideograph 227279 7E39 E7B8B9 East Asian ideograph 22727D 7E44 E7B984 East Asian ideograph 227321 7E35 E7B8B5 East Asian ideograph 227326 7E3F E7B8BF East Asian ideograph 227328 7E47 E7B987 East Asian ideograph 22732D 7E52 E7B992 East Asian ideograph 22732F 7E51 E7B991 East Asian ideograph 227333 7E50 E7B990 East Asian ideograph 227334 7E67 E7B9A7 East Asian ideograph 227337 7E56 E7B996 East Asian ideograph 227348 7E68 E7B9A8 East Asian ideograph 227349 7E6E E7B9AE East Asian ideograph 22734E 7E70 E7B9B0 East Asian ideograph 227351 7E6F E7B9AF East Asian ideograph 227352 7E73 E7B9B3 East Asian ideograph 227358 7E7B E7B9BB East Asian ideograph 227359 7E7E E7B9BE East Asian ideograph 22735B 7E81 E7BA81 East Asian ideograph 22735D 7E8A E7BA8A East Asian ideograph 22735E 7E87 E7BA87 East Asian ideograph 227360 7E88 E7BA88 East Asian ideograph 227364 7E86 E7BA86 East Asian ideograph 22736A 7E91 E7BA91 East Asian ideograph 22736B 7E95 E7BA95 East Asian ideograph 22736D 7E94 E7BA94 East Asian ideograph 227370 7E9B E7BA9B East Asian ideograph 227371 7E9A E7BA9A East Asian ideograph 227373 7E99 E7BA99 East Asian ideograph 227374 7E98 E7BA98 East Asian ideograph 227425 7F43 E7BD83 East Asian ideograph 227427 7F46 E7BD86 East Asian ideograph 227428 7F45 E7BD85 East Asian ideograph 22742B 7F4B E7BD8B East Asian ideograph 22742E 7F4C E7BD8C East Asian ideograph 22742F 7F4D E7BD8D East Asian ideograph 227431 7F4E E7BD8E East Asian ideograph 227432 7F4F E7BD8F East Asian ideograph 22743E 7F60 E7BDA0 East Asian ideograph 22743F 7F61 E7BDA1 East Asian ideograph 227443 7F5D E7BD9D East Asian ideograph 227445 7F5B E7BD9B East Asian ideograph 227447 7F63 E7BDA3 East Asian ideograph 227450 7F65 E7BDA5 East Asian ideograph 227451 7F66 E7BDA6 East Asian ideograph 227453 7F6D E7BDAD East Asian ideograph 227454 7F6B E7BDAB East Asian ideograph 227455 7F67 E7BDA7 East Asian ideograph 227457 7F68 E7BDA8 East Asian ideograph 22745E 7F71 E7BDB1 East Asian ideograph 227460 7F73 E7BDB3 East Asian ideograph 227463 7F76 E7BDB6 East Asian ideograph 22746A 7F7F E7BDBF East Asian ideograph 22746B 7F7E E7BDBE East Asian ideograph 22746C 7F7D E7BDBD East Asian ideograph 227472 7F86 E7BE86 East Asian ideograph 22747A 7F91 E7BE91 East Asian ideograph 22747E 7F96 E7BE96 East Asian ideograph 227523 7F97 E7BE97 East Asian ideograph 227524 7F95 E7BE95 East Asian ideograph 22752C 7FA2 E7BEA2 East Asian ideograph 227533 7FA7 E7BEA7 East Asian ideograph 22753B 7FB0 E7BEB0 East Asian ideograph 22753C 7FAD E7BEAD East Asian ideograph 22753F 7FB1 E7BEB1 East Asian ideograph 227540 7FB4 E7BEB4 East Asian ideograph 227542 7FB5 E7BEB5 East Asian ideograph 22754A 7FBC E7BEBC East Asian ideograph 22754C 7FBE E7BEBE East Asian ideograph 227551 7FC3 E7BF83 East Asian ideograph 227557 7FCA E7BF8A East Asian ideograph 227567 7FDB E7BF9B East Asian ideograph 227568 7FE3 E7BFA3 East Asian ideograph 22756C 7FE6 E7BFA6 East Asian ideograph 22756F 7FE5 E7BFA5 East Asian ideograph 227572 7FEC E7BFAC East Asian ideograph 227573 7FEB E7BFAB East Asian ideograph 227577 7FEF E7BFAF East Asian ideograph 22757A 7FEE E7BFAE East Asian ideograph 227629 7FFD E7BFBD East Asian ideograph 22762A 7FFE E7BFBE East Asian ideograph 22762C 7FFF E7BFBF East Asian ideograph 22762E 8004 E88084 East Asian ideograph 227631 8008 E88088 East Asian ideograph 227633 800B E8808B East Asian ideograph 227634 800E E8808E East Asian ideograph 227635 8011 E88091 East Asian ideograph 227636 800F E8808F East Asian ideograph 227637 8014 E88094 East Asian ideograph 227639 8016 E88096 East Asian ideograph 22763B 801F E8809F East Asian ideograph 22763D 801E E8809E East Asian ideograph 22763E 801D E8809D East Asian ideograph 22764B 8025 E880A5 East Asian ideograph 22764C 8026 E880A6 East Asian ideograph 22764D 802A E880AA East Asian ideograph 22764E 8029 E880A9 East Asian ideograph 22764F 8028 E880A8 East Asian ideograph 22765B 8030 E880B0 East Asian ideograph 22765D 8031 E880B1 East Asian ideograph 227660 8035 E880B5 East Asian ideograph 227669 8039 E880B9 East Asian ideograph 22766B 8041 E88181 East Asian ideograph 227670 8043 E88183 East Asian ideograph 22767B 8052 E88192 East Asian ideograph 22767E 8062 E881A2 East Asian ideograph 227728 8063 E881A3 East Asian ideograph 227732 806C E881AC East Asian ideograph 227739 8075 E881B5 East Asian ideograph 22773E 807B E881BB East Asian ideograph 22773F 8079 E881B9 East Asian ideograph 227747 808A E8828A East Asian ideograph 227749 808E E8828E East Asian ideograph 22774E 809F E8829F East Asian ideograph 22775C 670A E69C8A East Asian ideograph 227760 80A7 E882A7 East Asian ideograph 227761 80B0 E882B0 East Asian ideograph 227768 80B8 E882B8 East Asian ideograph 227769 80B5 E882B5 East Asian ideograph 22776A 80A6 E882A6 East Asian ideograph 227773 80E0 E883A0 East Asian ideograph 227775 6711 E69C91 East Asian ideograph 22777B 80DF E8839F East Asian ideograph 22777D 80C2 E88382 East Asian ideograph 227827 80D9 E88399 East Asian ideograph 22782A 80DD E8839D East Asian ideograph 22782D 80CF E8838F East Asian ideograph 22782F 80CD E8838D East Asian ideograph 227830 80D7 E88397 East Asian ideograph 227833 80F2 E883B2 East Asian ideograph 227834 80FA E883BA East Asian ideograph 227838 80FE E883BE East Asian ideograph 22783C 8103 E88483 East Asian ideograph 227840 80F9 E883B9 East Asian ideograph 227841 80EF E883AF East Asian ideograph 227842 80D4 E88394 East Asian ideograph 227849 811D E8849D East Asian ideograph 22784B 8118 E88498 East Asian ideograph 227850 8130 E884B0 East Asian ideograph 227854 8124 E884A4 East Asian ideograph 227855 811B E8849B East Asian ideograph 227860 812A E884AA East Asian ideograph 227861 811E E8849E East Asian ideograph 227864 8121 E884A1 East Asian ideograph 227866 8117 E88497 East Asian ideograph 227869 813A E884BA East Asian ideograph 22786A 815A E8859A East Asian ideograph 22786D 8148 E88588 East Asian ideograph 227877 814C E8858C East Asian ideograph 22787C 8153 E88593 East Asian ideograph 22787D 8141 E88581 East Asian ideograph 227925 814D E8858D East Asian ideograph 22792E 6720 E69CA0 East Asian ideograph 227932 8160 E885A0 East Asian ideograph 22793B 8169 E885A9 East Asian ideograph 22793C 817C E885BC East Asian ideograph 227941 8161 E885A1 East Asian ideograph 227946 8176 E885B6 East Asian ideograph 227947 8174 E885B4 East Asian ideograph 227948 8167 E885A7 East Asian ideograph 22794B 816F E885AF East Asian ideograph 22794D 8182 E88682 East Asian ideograph 227951 818B E8868B East Asian ideograph 227952 8186 E88686 East Asian ideograph 227959 8183 E88683 East Asian ideograph 22796A 819F E8869F East Asian ideograph 22796B 81A3 E886A3 East Asian ideograph 227970 8198 E88698 East Asian ideograph 227975 8195 E88695 East Asian ideograph 227977 8197 E88697 East Asian ideograph 22797C 81AA E886AA East Asian ideograph 22797D 81A6 E886A6 East Asian ideograph 22797E 6725 E69CA5 East Asian ideograph 227A2C 81B5 E886B5 East Asian ideograph 227A2E 81B0 E886B0 East Asian ideograph 227A2F 81B4 E886B4 East Asian ideograph 227A33 81B7 E886B7 East Asian ideograph 227A37 81BB E886BB East Asian ideograph 227A38 81C1 E88781 East Asian ideograph 227A39 81CC E8878C East Asian ideograph 227A3A 81CA E8878A East Asian ideograph 227A3B 81C4 E88784 East Asian ideograph 227A40 81D1 E88791 East Asian ideograph 227A41 81CE E8878E East Asian ideograph 227A43 81D0 E88790 East Asian ideograph 227A4B 81DB E8879B East Asian ideograph 227A4F 81DD E8879D East Asian ideograph 227A53 81DE E8879E East Asian ideograph 227A56 81E0 E887A0 East Asian ideograph 227A57 81E2 E887A2 East Asian ideograph 227A5B 81E7 E887A7 East Asian ideograph 227A60 81EF E887AF East Asian ideograph 227A65 81F2 E887B2 East Asian ideograph 227A68 81F6 E887B6 East Asian ideograph 227A70 8201 E88881 East Asian ideograph 227A72 8201 E88881 East Asian ideograph 227A74 8203 E88883 East Asian ideograph 227A75 8204 E88884 East Asian ideograph 227A77 820B E8888B East Asian ideograph 227B27 821D E8889D East Asian ideograph 227B29 8220 E888A0 East Asian ideograph 227B2E 822D E888AD East Asian ideograph 227B2F 822F E888AF East Asian ideograph 227B32 8238 E888B8 East Asian ideograph 227B34 823A E888BA East Asian ideograph 227B35 8233 E888B3 East Asian ideograph 227B36 8234 E888B4 East Asian ideograph 227B3A 8232 E888B2 East Asian ideograph 227B42 8248 E88988 East Asian ideograph 227B43 8249 E88989 East Asian ideograph 227B45 8244 E88984 East Asian ideograph 227B47 8240 E88980 East Asian ideograph 227B48 8241 E88981 East Asian ideograph 227B4A 8245 E88985 East Asian ideograph 227B4B 824B E8898B East Asian ideograph 227B50 824F E8898F East Asian ideograph 227B53 824E E8898E East Asian ideograph 227B56 8256 E88996 East Asian ideograph 227B57 8257 E88997 East Asian ideograph 227B5E 825A E8899A East Asian ideograph 227B62 825F E8899F East Asian ideograph 227B67 8262 E889A2 East Asian ideograph 227B6B 8268 E889A8 East Asian ideograph 227B6F 826D E889AD East Asian ideograph 227B77 8278 E889B8 East Asian ideograph 227B7D 827F E889BF East Asian ideograph 227C24 828E E88A8E East Asian ideograph 227C25 8291 E88A91 East Asian ideograph 227C27 828F E88A8F East Asian ideograph 227C28 8284 E88A84 East Asian ideograph 227C2D 8283 E88A83 East Asian ideograph 227C2E 828A E88A8A East Asian ideograph 227C31 82AF E88AAF East Asian ideograph 227C34 82A7 E88AA7 East Asian ideograph 227C38 82AB E88AAB East Asian ideograph 227C3A 82B0 E88AB0 East Asian ideograph 227C3C 82A4 E88AA4 East Asian ideograph 227C3F 829A E88A9A East Asian ideograph 227C42 82A3 E88AA3 East Asian ideograph 227C44 82B7 E88AB7 East Asian ideograph 227C45 82AE E88AAE East Asian ideograph (variant of EACC 4C7C45) 227C46 82A9 E88AA9 East Asian ideograph 227C49 82BC E88ABC East Asian ideograph 227C4C 82A8 E88AA8 East Asian ideograph 227C4E 82B4 E88AB4 East Asian ideograph 227C50 82A1 E88AA1 East Asian ideograph 227C53 82AA E88AAA East Asian ideograph 227C55 82D9 E88B99 East Asian ideograph 227C57 82FE E88BBE East Asian ideograph 227C5A 82E0 E88BA0 East Asian ideograph 227C5B 82D0 E88B90 East Asian ideograph 227C5C 8300 E88C80 East Asian ideograph 227C5F 82EA E88BAA East Asian ideograph 227C60 82F7 E88BB7 East Asian ideograph 227C62 82EF E88BAF East Asian ideograph 227C63 833A E88CBA East Asian ideograph 227C64 82E4 E88BA4 East Asian ideograph 227C65 82D5 E88B95 East Asian ideograph 227C67 8307 E88C87 East Asian ideograph 227C68 82FA E88BBA East Asian ideograph 227C69 82F4 E88BB4 East Asian ideograph 227C6A 82E2 E88BA2 East Asian ideograph 227C6D 82D2 E88B92 East Asian ideograph 227C6E 8314 E88C94 East Asian ideograph 227C71 82EB E88BAB East Asian ideograph 227C72 82D8 E88B98 East Asian ideograph 227C73 82E1 E88BA1 East Asian ideograph 227C75 82F6 E88BB6 East Asian ideograph 227C7B 8310 E88C90 East Asian ideograph 227C7C 82F3 E88BB3 East Asian ideograph 227D21 830C E88C8C East Asian ideograph 227D22 82FB E88BBB East Asian ideograph 227D24 82FD E88BBD East Asian ideograph 227D26 8333 E88CB3 East Asian ideograph 227D29 8328 E88CA8 East Asian ideograph 227D2B 8344 E88D84 East Asian ideograph 227D2E 8351 E88D91 East Asian ideograph 227D35 831B E88C9B East Asian ideograph 227D3B 8356 E88D96 East Asian ideograph 227D3F 8322 E88CA2 East Asian ideograph 227D40 832C E88CAC East Asian ideograph 227D48 833C E88CBC East Asian ideograph 227D4A 834D E88D8D East Asian ideograph 227D4D 8343 E88D83 East Asian ideograph (variant of EACC 4C7D4D) 227D52 832F E88CAF East Asian ideograph 227D53 8348 E88D88 East Asian ideograph 227D54 8312 E88C92 East Asian ideograph 227D56 8316 E88C96 East Asian ideograph 227D58 831A E88C9A East Asian ideograph 227D5F 8347 E88D87 East Asian ideograph 227D62 83A8 E88EA8 East Asian ideograph 227D67 83AD E88EAD East Asian ideograph 227D6D 8373 E88DB3 East Asian ideograph 227D72 83B0 E88EB0 East Asian ideograph 227D76 831D E88C9D East Asian ideograph 227D7A 838F E88E8F East Asian ideograph 227D7C 8395 E88E95 East Asian ideograph 227D7E 8375 E88DB5 East Asian ideograph 227E21 837F E88DBF East Asian ideograph 227E22 8399 E88E99 East Asian ideograph 227E23 83A6 E88EA6 East Asian ideograph 227E25 8387 E88E87 East Asian ideograph 227E26 83B9 E88EB9 East Asian ideograph 227E2B 83A9 E88EA9 East Asian ideograph 227E2F 839B E88E9B East Asian ideograph 227E33 83AA E88EAA East Asian ideograph 227E37 839C E88E9C East Asian ideograph 227E38 839F E88E9F East Asian ideograph 227E41 83CF E88F8F East Asian ideograph 227E43 83F9 E88FB9 East Asian ideograph 227E45 8421 E890A1 East Asian ideograph 227E51 8423 E890A3 East Asian ideograph 227E52 83EA E88FAA East Asian ideograph 227E53 8413 E89093 East Asian ideograph 227E56 83FC E88FBC East Asian ideograph 227E57 83F6 E88FB6 East Asian ideograph 227E59 8410 E89090 East Asian ideograph 227E5A 83E1 E88FA1 East Asian ideograph 227E60 83C6 E88F86 East Asian ideograph 227E61 8407 E89087 East Asian ideograph 227E63 83EB E88FAB East Asian ideograph 227E6A 83BF E88EBF East Asian ideograph 227E6B 83E2 E88FA2 East Asian ideograph 227E6D 8401 E89081 East Asian ideograph 227E71 83D8 E88F98 East Asian ideograph 227E72 83E5 E88FA5 East Asian ideograph 227E74 8418 E89098 East Asian ideograph 227E79 83CE E88F8E East Asian ideograph 227E7B 83D3 E88F93 East Asian ideograph 227E7D 83D6 E88F96 East Asian ideograph 232223 83FD E88FBD East Asian ideograph 232225 841E E8909E East Asian ideograph 232229 83C9 E88F89 East Asian ideograph 23222A 83DF E88F9F East Asian ideograph 23222C 841F E8909F East Asian ideograph 23222E 840F E8908F East Asian ideograph 232230 8411 E89091 East Asian ideograph 232236 839A E88E9A East Asian ideograph 23223C 83F3 E88FB3 East Asian ideograph 232243 83D1 E88F91 East Asian ideograph 232248 8453 E89193 East Asian ideograph 23224A 848E E8928E East Asian ideograph 23224C 8439 E890B9 East Asian ideograph 23224D 8476 E891B6 East Asian ideograph 23224E 8479 E891B9 East Asian ideograph 23225C 8451 E89191 East Asian ideograph 23225F 847D E891BD East Asian ideograph 232262 845A E8919A East Asian ideograph 232266 8459 E89199 East Asian ideograph 232269 8473 E891B3 East Asian ideograph 23226E 843E E890BE East Asian ideograph 232271 846D E891AD East Asian ideograph 232278 847A E891BA East Asian ideograph 23227B 8484 E89284 East Asian ideograph 23227C 8478 E891B8 East Asian ideograph 232324 8432 E890B2 East Asian ideograph 232329 845C E8919C East Asian ideograph 23232D 842A E890AA East Asian ideograph 23232E 8429 E890A9 East Asian ideograph 232332 8471 E891B1 East Asian ideograph 232335 845F E8919F East Asian ideograph 232336 8460 E891A0 East Asian ideograph 232337 846E E891AE East Asian ideograph 23233A 8446 E89186 East Asian ideograph 23233C 8452 E89192 East Asian ideograph 23233F 844A E8918A East Asian ideograph 232345 844E E8918E East Asian ideograph 232349 8497 E89297 East Asian ideograph 232350 84A1 E892A1 East Asian ideograph 232353 849F E8929F East Asian ideograph 232356 84BA E892BA East Asian ideograph 232358 84B9 E892B9 East Asian ideograph 23235C 84B4 E892B4 East Asian ideograph 23235E 84C1 E89381 East Asian ideograph 23235F 84BB E892BB East Asian ideograph 232368 84CD E8938D East Asian ideograph 232370 84B1 E892B1 East Asian ideograph 232371 849D E8929D East Asian ideograph 232372 84D0 E89390 East Asian ideograph 232375 8494 E89294 East Asian ideograph 232379 84C7 E89387 East Asian ideograph 23237A 84BD E892BD East Asian ideograph 23237C 84C2 E89382 East Asian ideograph 232421 8495 E89295 East Asian ideograph 232427 84AF E892AF East Asian ideograph 232429 84AD E892AD East Asian ideograph 232432 84A8 E892A8 East Asian ideograph 232433 84D6 E89396 East Asian ideograph 232435 84DA E8939A East Asian ideograph 23243A 8493 E89293 East Asian ideograph 23243F 84CF E8938F East Asian ideograph 232441 84CA E8938A East Asian ideograph 232446 8506 E89486 East Asian ideograph 232447 850B E8948B East Asian ideograph 23244D 8500 E89480 East Asian ideograph 232459 851F E8949F East Asian ideograph 23245C 853B E894BB East Asian ideograph 23245F 84EA E893AA East Asian ideograph 232466 84F4 E893B4 East Asian ideograph 23246A 850C E8948C East Asian ideograph 232472 852F E894AF East Asian ideograph 232475 8515 E89495 East Asian ideograph 232477 84F7 E893B7 East Asian ideograph 23247A 84FC E893BC East Asian ideograph 23247C 84EB E893AB East Asian ideograph 23247D 84FD E893BD East Asian ideograph 232524 851E E8949E East Asian ideograph 23252A 8518 E89498 East Asian ideograph 23252D 8526 E894A6 East Asian ideograph 23252E 8507 E89487 East Asian ideograph (variant of EACC 2F252E) 23252F 84E7 E893A7 East Asian ideograph 232534 84F0 E893B0 East Asian ideograph 232535 84EF E893AF East Asian ideograph 232536 8556 E89596 East Asian ideograph 232546 8541 E89581 East Asian ideograph 23254B 8558 E89598 East Asian ideograph 23254D 8553 E89593 East Asian ideograph 23254E 8561 E895A1 East Asian ideograph 23254F 8540 E89580 East Asian ideograph 23255A 8546 E89586 East Asian ideograph 23255C 8564 E895A4 East Asian ideograph 23255D 855E E8959E East Asian ideograph 23255E 8573 E895B3 East Asian ideograph 23255F 8551 E89591 East Asian ideograph 232564 8562 E895A2 East Asian ideograph 23256B 8563 E895A3 East Asian ideograph 23256C 848D E8928D East Asian ideograph 23256D 8542 E89582 East Asian ideograph 232571 854E E8958E East Asian ideograph 232574 8555 E89595 East Asian ideograph 232576 855D E8959D East Asian ideograph 232577 858C E8968C East Asian ideograph 232625 8580 E89680 East Asian ideograph 232628 858F E8968F East Asian ideograph 23262D 8579 E895B9 East Asian ideograph 232632 857F E895BF East Asian ideograph 232633 8577 E895B7 East Asian ideograph 232634 8578 E895B8 East Asian ideograph 232635 8598 E89698 East Asian ideograph 232636 857B E895BB East Asian ideograph 23263D 85A4 E896A4 East Asian ideograph 232642 857A E895BA East Asian ideograph 232644 8597 E89697 East Asian ideograph 232645 8557 E89597 East Asian ideograph 232649 85A8 E896A8 East Asian ideograph 23264E 8586 E89686 East Asian ideograph 232650 8599 E89699 East Asian ideograph 232651 858A E8968A East Asian ideograph 232652 85A2 E896A2 East Asian ideograph 232654 8590 E89690 East Asian ideograph 232656 8585 E89685 East Asian ideograph 232657 8588 E89688 East Asian ideograph 23265A 85B8 E896B8 East Asian ideograph 23265D 85C1 E89781 East Asian ideograph 232661 85BA E896BA East Asian ideograph 232668 85CE E8978E East Asian ideograph 23266A 85C2 E89782 East Asian ideograph 23266B 85B7 E896B7 East Asian ideograph 23266C 85B9 E896B9 East Asian ideograph 23266E 85B3 E896B3 East Asian ideograph 23266F 85BD E896BD East Asian ideograph 232670 85C4 E89784 East Asian ideograph 232672 85BF E896BF East Asian ideograph 232675 85BE E896BE East Asian ideograph 23267E 85B6 E896B6 East Asian ideograph 232724 8624 E898A4 East Asian ideograph 232728 85F7 E897B7 East Asian ideograph 23272C 85E6 E897A6 East Asian ideograph 23272E 85D4 E89794 East Asian ideograph 232731 85ED E897AD East Asian ideograph 232739 85DA E8979A East Asian ideograph 232743 85DF E8979F East Asian ideograph 232745 85D8 E89798 East Asian ideograph 23274C 85DC E8979C East Asian ideograph 23274E 85F5 E897B5 East Asian ideograph 232752 8622 E898A2 East Asian ideograph 232754 8610 E89890 East Asian ideograph 232757 85FC E897BC East Asian ideograph 23275B 85FF E897BF East Asian ideograph 23275E 85FE E897BE East Asian ideograph 232760 8600 E89880 East Asian ideograph 232768 8604 E89884 East Asian ideograph 232771 8605 E89885 East Asian ideograph 232775 862B E898AB East Asian ideograph 232822 8627 E898A7 East Asian ideograph 232826 8629 E898A9 East Asian ideograph 232832 8637 E898B7 East Asian ideograph 232838 8636 E898B6 East Asian ideograph 23283E 863C E898BC East Asian ideograph 23283F 8640 E89980 East Asian ideograph 232840 863A E898BA East Asian ideograph 23284C 8645 E89985 East Asian ideograph 232859 864D E8998D East Asian ideograph 23285A 8653 E89993 East Asian ideograph 23285E 8659 E89999 East Asian ideograph 232866 8661 E899A1 East Asian ideograph 232869 8662 E899A2 East Asian ideograph 23286A 8663 E899A3 East Asian ideograph 232871 8669 E899A9 East Asian ideograph 232878 866C E899AC East Asian ideograph 23287B 8672 E899B2 East Asian ideograph 23287C 866F E899AF East Asian ideograph 23287E 867B E899BB East Asian ideograph 232925 867A E899BA East Asian ideograph 232926 8673 E899B3 East Asian ideograph 232927 867C E899BC East Asian ideograph 23292E 8696 E89A96 East Asian ideograph 23292F 86A8 E89AA8 East Asian ideograph 232936 8691 E89A91 East Asian ideograph 232937 869C E89A9C East Asian ideograph 232939 8698 E89A98 East Asian ideograph 23293C 868D E89A8D East Asian ideograph 23293D 868B E89A8B East Asian ideograph 232940 86A6 E89AA6 East Asian ideograph 232942 869D E89A9D East Asian ideograph 232946 86A0 E89AA0 East Asian ideograph 232948 86A7 E89AA7 East Asian ideograph 23294B 86BF E89ABF East Asian ideograph 232958 86BA E89ABA East Asian ideograph 232959 86B0 E89AB0 East Asian ideograph 232960 86B3 E89AB3 East Asian ideograph 232962 86C9 E89B89 East Asian ideograph 232963 86B4 E89AB4 East Asian ideograph 232967 86D8 E89B98 East Asian ideograph 23296E 86E3 E89BA3 East Asian ideograph 23296F 86E9 E89BA9 East Asian ideograph 232971 86EC E89BAC East Asian ideograph 232974 86D5 E89B95 East Asian ideograph 232977 86D0 E89B90 East Asian ideograph 23297A 86D1 E89B91 East Asian ideograph 23297E 86DE E89B9E East Asian ideograph 232A25 870B E89C8B East Asian ideograph 232A2F 86FA E89BBA East Asian ideograph 232A33 86F8 E89BB8 East Asian ideograph 232A34 8706 E89C86 East Asian ideograph 232A36 870E E89C8E East Asian ideograph 232A38 8709 E89C89 East Asian ideograph 232A3A 870A E89C8A East Asian ideograph 232A3E 870D E89C8D East Asian ideograph 232A42 874A E89D8A East Asian ideograph 232A43 8723 E89CA3 East Asian ideograph 232A44 8737 E89CB7 East Asian ideograph 232A45 8728 E89CA8 East Asian ideograph 232A49 8740 E89D80 East Asian ideograph 232A4B 872E E89CAE East Asian ideograph 232A4C 873D E89CBD East Asian ideograph 232A4E 871E E89C9E East Asian ideograph 232A53 8743 E89D83 East Asian ideograph 232A55 8744 E89D84 East Asian ideograph 232A57 873E E89CBE East Asian ideograph 232A59 8729 E89CA9 East Asian ideograph 232A5A 8739 E89CB9 East Asian ideograph 232A5F 871A E89C9A East Asian ideograph 232A64 8731 E89CB1 East Asian ideograph 232A65 8711 E89C91 East Asian ideograph 232A66 8712 E89C92 East Asian ideograph 232A6B 874F E89D8F East Asian ideograph 232A6C 8771 E89DB1 East Asian ideograph 232A6D 8763 E89DA3 East Asian ideograph 232A71 8764 E89DA4 East Asian ideograph 232A73 8765 E89DA5 East Asian ideograph 232A74 877D E89DBD East Asian ideograph 232A79 8758 E89D98 East Asian ideograph 232A7B 877B E89DBB East Asian ideograph 232B21 8761 E89DA1 East Asian ideograph 232B24 876A E89DAA East Asian ideograph 232B27 874E E89D8E East Asian ideograph 232B28 875F E89D9F East Asian ideograph 232B2D 876F E89DAF East Asian ideograph 232B2E 875D E89D9D East Asian ideograph 232B30 876E E89DAE East Asian ideograph 232B33 874D E89D8D East Asian ideograph 232B35 8753 E89D93 East Asian ideograph 232B3A 87A3 E89EA3 East Asian ideograph 232B3D 8793 E89E93 East Asian ideograph 232B45 8799 E89E99 East Asian ideograph 232B48 8788 E89E88 East Asian ideograph 232B4C 8798 E89E98 East Asian ideograph 232B53 8785 E89E85 East Asian ideograph 232B54 878B E89E8B East Asian ideograph 232B55 8784 E89E84 East Asian ideograph 232B58 87A9 E89EA9 East Asian ideograph 232B5D 8789 E89E89 East Asian ideograph 232B60 87AD E89EAD East Asian ideograph 232B66 87BE E89EBE East Asian ideograph 232B6E 87C4 E89F84 East Asian ideograph 232B6F 87AF E89EAF East Asian ideograph 232B72 87AC E89EAC East Asian ideograph 232B78 87AE E89EAE East Asian ideograph 232B7E 87BF E89EBF East Asian ideograph 232C24 87BD E89EBD East Asian ideograph 232C2C 87EE E89FAE East Asian ideograph 232C30 87F3 E89FB3 East Asian ideograph 232C31 87F0 E89FB0 East Asian ideograph 232C34 87EA E89FAA East Asian ideograph 232C36 87DB E89F9B East Asian ideograph 232C37 87E2 E89FA2 East Asian ideograph 232C39 87EB E89FAB East Asian ideograph 232C3A 87D6 E89F96 East Asian ideograph 232C3F 87F5 E89FB5 East Asian ideograph 232C47 87E0 E89FA0 East Asian ideograph 232C48 87D3 E89F93 East Asian ideograph 232C49 87DC E89F9C East Asian ideograph 232C4C 87E3 E89FA3 East Asian ideograph 232C4D 8801 E8A081 East Asian ideograph 232C4F 8803 E8A083 East Asian ideograph 232C50 880A E8A08A East Asian ideograph 232C55 87F6 E89FB6 East Asian ideograph 232C57 87F7 E89FB7 East Asian ideograph 232C5C 880B E8A08B East Asian ideograph 232C5D 8806 E8A086 East Asian ideograph 232C5F 87FE E89FBE East Asian ideograph 232C61 8810 E8A090 East Asian ideograph 232C63 8819 E8A099 East Asian ideograph 232C64 8811 E8A091 East Asian ideograph 232C66 8818 E8A098 East Asian ideograph 232C6A 8813 E8A093 East Asian ideograph 232C6B 8816 E8A096 East Asian ideograph 232C72 8834 E8A0B4 East Asian ideograph 232C73 881C E8A09C East Asian ideograph 232C7A 881B E8A09B East Asian ideograph 232D23 8828 E8A0A8 East Asian ideograph 232D2A 8832 E8A0B2 East Asian ideograph 232D2E 882E E8A0AE East Asian ideograph 232D32 882D E8A0AD East Asian ideograph 232D3C 883C E8A0BC East Asian ideograph 232D41 8841 E8A181 East Asian ideograph 232D42 4610 E49890 East Asian ideograph 232D44 8844 E8A184 East Asian ideograph 232D4B 8847 E8A187 East Asian ideograph 232D51 884A E8A18A East Asian ideograph 232D53 884E E8A18E East Asian ideograph 232D56 8852 E8A192 East Asian ideograph 232D57 8850 E8A190 East Asian ideograph 232D59 8856 E8A196 East Asian ideograph 232D5A 8855 E8A195 East Asian ideograph 232D5E 885C E8A19C East Asian ideograph 232D5F 885A E8A19A East Asian ideograph 232D69 8869 E8A1A9 East Asian ideograph 232D6D 886D E8A1AD East Asian ideograph 232D6E 887A E8A1BA East Asian ideograph 232D71 8875 E8A1B5 East Asian ideograph 232D75 8872 E8A1B2 East Asian ideograph 232D79 887D E8A1BD East Asian ideograph 232D7C 8879 E8A1B9 East Asian ideograph 232D7D 887F E8A1BF East Asian ideograph 232D7E 887E E8A1BE East Asian ideograph 232E28 88A2 E8A2A2 East Asian ideograph 232E2A 88A4 E8A2A4 East Asian ideograph 232E2F 88AA E8A2AA East Asian ideograph 232E34 889A E8A29A East Asian ideograph 232E3A 8890 E8A290 East Asian ideograph 232E3B 888C E8A28C East Asian ideograph 232E3D 88A0 E8A2A0 East Asian ideograph 232E40 8899 E8A299 East Asian ideograph 232E45 8897 E8A297 East Asian ideograph 232E48 88C9 E8A389 East Asian ideograph 232E49 88BF E8A2BF East Asian ideograph 232E4A 88BA E8A2BA East Asian ideograph 232E4F 88C0 E8A380 East Asian ideograph 232E51 88B2 E8A2B2 East Asian ideograph 232E54 88BC E8A2BC East Asian ideograph 232E57 88B7 E8A2B7 East Asian ideograph 232E59 88BD E8A2BD East Asian ideograph 232E5A 88C4 E8A384 East Asian ideograph 232E5E 88CB E8A38B East Asian ideograph 232E60 88CC E8A38C East Asian ideograph 232E62 88DB E8A39B East Asian ideograph 232E64 88CE E8A38E East Asian ideograph 232E68 88D2 E8A392 East Asian ideograph 232E71 88F1 E8A3B1 East Asian ideograph 232E72 88FE E8A3BE East Asian ideograph 232E75 88F2 E8A3B2 East Asian ideograph 232E78 8900 E8A480 East Asian ideograph 232E7A 88F0 E8A3B0 East Asian ideograph 232F21 88FC E8A3BC East Asian ideograph 232F23 88EF E8A3AF East Asian ideograph 232F24 8903 E8A483 East Asian ideograph 232F2D 8909 E8A489 East Asian ideograph 232F2F 8918 E8A498 East Asian ideograph 232F35 8906 E8A486 East Asian ideograph 232F36 890C E8A48C East Asian ideograph 232F37 8919 E8A499 East Asian ideograph 232F3D 890A E8A48A East Asian ideograph 232F43 8915 E8A495 East Asian ideograph 232F45 892F E8A4AF East Asian ideograph 232F47 8930 E8A4B0 East Asian ideograph 232F4E 8921 E8A4A1 East Asian ideograph 232F4F 8927 E8A4A7 East Asian ideograph 232F51 891F E8A49F East Asian ideograph 232F53 8931 E8A4B1 East Asian ideograph 232F54 891E E8A49E East Asian ideograph 232F56 8926 E8A4A6 East Asian ideograph 232F57 8922 E8A4A2 East Asian ideograph 232F5A 8935 E8A4B5 East Asian ideograph 232F5D 8941 E8A581 East Asian ideograph 232F60 8933 E8A4B3 East Asian ideograph 232F66 8954 E8A594 East Asian ideograph 232F6F 894F E8A58F East Asian ideograph 232F72 8947 E8A587 East Asian ideograph 232F7A 894C E8A58C East Asian ideograph 232F7B 8946 E8A586 East Asian ideograph 233021 894D E8A58D East Asian ideograph 233023 8962 E8A5A2 East Asian ideograph 233024 895A E8A59A East Asian ideograph 233025 895E E8A59E East Asian ideograph 233029 895B E8A59B East Asian ideograph 23302C 895C E8A59C East Asian ideograph 23302D 895D E8A59D East Asian ideograph 233031 8966 E8A5A6 East Asian ideograph 233037 896D E8A5AD East Asian ideograph 23303A 896B E8A5AB East Asian ideograph 23303B 896E E8A5AE East Asian ideograph 23303C 896C E8A5AC East Asian ideograph 233041 8976 E8A5B6 East Asian ideograph 233042 8974 E8A5B4 East Asian ideograph 233049 897B E8A5BB East Asian ideograph 23304A 897C E8A5BC East Asian ideograph 233053 8984 E8A684 East Asian ideograph 233055 8985 E8A685 East Asian ideograph 233062 8991 E8A691 East Asian ideograph 233064 8997 E8A697 East Asian ideograph 233066 8998 E8A698 East Asian ideograph 23306B 899C E8A69C East Asian ideograph 23306F 89A1 E8A6A1 East Asian ideograph 233076 89A5 E8A6A5 East Asian ideograph 233079 89A9 E8A6A9 East Asian ideograph 23307D 89AF E8A6AF East Asian ideograph 23312A 89B8 E8A6B8 East Asian ideograph 23312B 89B7 E8A6B7 East Asian ideograph 23312C 89B6 E8A6B6 East Asian ideograph 23312F 89BC E8A6BC East Asian ideograph 233132 89BF E8A6BF East Asian ideograph 23313A 89D6 E8A796 East Asian ideograph 23313B 89D5 E8A795 East Asian ideograph 23313F 89DA E8A79A East Asian ideograph 233143 89E5 E8A7A5 East Asian ideograph 233145 89DC E8A79C East Asian ideograph 233147 89E1 E8A7A1 East Asian ideograph 23314C 89E9 E8A7A9 East Asian ideograph 23314D 89EB E8A7AB East Asian ideograph 233153 89ED E8A7AD East Asian ideograph 233158 89F1 E8A7B1 East Asian ideograph 23315C 89F3 E8A7B3 East Asian ideograph 23315E 89F5 E8A7B5 East Asian ideograph 233160 89F6 E8A7B6 East Asian ideograph 233164 89F7 E8A7B7 East Asian ideograph 23316B 89FF E8A7BF East Asian ideograph 23316C 8A06 E8A886 East Asian ideograph 23316D 8A07 E8A887 East Asian ideograph 23316E 8A04 E8A884 East Asian ideograph 233170 8A0F E8A88F East Asian ideograph 233171 8A11 E8A891 East Asian ideograph 233172 8A12 E8A892 East Asian ideograph 233173 8A0D E8A88D East Asian ideograph 23317A 8A27 E8A8A7 East Asian ideograph 23317D 8A29 E8A8A9 East Asian ideograph 233225 8A22 E8A8A2 East Asian ideograph 233227 8A51 E8A991 East Asian ideograph 233228 8A4A E8A98A East Asian ideograph 23322A 8A4E E8A98E East Asian ideograph 233230 8A56 E8A996 East Asian ideograph 233237 8A57 E8A997 East Asian ideograph 233239 8A48 E8A988 East Asian ideograph 23323B 8A58 E8A998 East Asian ideograph 23323C 8A52 E8A992 East Asian ideograph 233240 8A3D E8A8BD East Asian ideograph 233242 8A45 E8A985 East Asian ideograph 23324F 8A7F E8A9BF East Asian ideograph 233250 8A86 E8AA86 East Asian ideograph 233256 8A61 E8A9A1 East Asian ideograph 233258 8A3E E8A8BE East Asian ideograph 233259 8A82 E8AA82 East Asian ideograph 23325D 8A84 E8AA84 East Asian ideograph 23325E 8A75 E8A9B5 East Asian ideograph 233269 8A8F E8AA8F East Asian ideograph 23326F 8A96 E8AA96 East Asian ideograph 233271 8A9A E8AA9A East Asian ideograph 23327E 8AB6 E8AAB6 East Asian ideograph 233321 8ABE E8AABE East Asian ideograph 233325 8ACF E8AB8F East Asian ideograph 233327 8AC6 E8AB86 East Asian ideograph 23332C 8AD1 E8AB91 East Asian ideograph 23332D 8AD3 E8AB93 East Asian ideograph 233331 8AAF E8AAAF East Asian ideograph 233333 8AD4 E8AB94 East Asian ideograph 233336 8ACD E8AB8D East Asian ideograph 233338 8AB9 E8AAB9 East Asian ideograph 23333B 8ADB E8AB9B East Asian ideograph 23333F 8AD0 E8AB90 East Asian ideograph 233340 8AD7 E8AB97 East Asian ideograph 233344 8AF3 E8ABB3 East Asian ideograph 233345 8AE2 E8ABA2 East Asian ideograph 233349 8B4C E8AD8C East Asian ideograph 23334C 8ADD E8AB9D East Asian ideograph 23334E 8AF6 E8ABB6 East Asian ideograph 23334F 8AF4 E8ABB4 East Asian ideograph 233350 8AF5 E8ABB5 East Asian ideograph 233353 8ADF E8AB9F East Asian ideograph 233356 8B03 E8AC83 East Asian ideograph 233357 8AE4 E8ABA4 East Asian ideograph 233359 8B14 E8AC94 East Asian ideograph 23335D 8AFC E8ABBC East Asian ideograph 233362 8ADE E8AB9E East Asian ideograph 233363 8AE1 E8ABA1 East Asian ideograph 233364 8B07 E8AC87 East Asian ideograph 23336B 8B0C E8AC8C East Asian ideograph 23336F 8B1C E8AC9C East Asian ideograph 233373 8B16 E8AC96 East Asian ideograph 233376 8B1F E8AC9F East Asian ideograph 233378 8B0B E8AC8B East Asian ideograph 233379 8B06 E8AC86 East Asian ideograph 23337A 8B05 E8AC85 East Asian ideograph 23337C 8B0F E8AC8F East Asian ideograph 23337D 8B10 E8AC90 East Asian ideograph 233422 8B2B E8ACAB East Asian ideograph 23342A 8B37 E8ACB7 East Asian ideograph 23342D 8B26 E8ACA6 East Asian ideograph 233430 8B33 E8ACB3 East Asian ideograph 233438 8B3E E8ACBE East Asian ideograph 23343A 8B29 E8ACA9 East Asian ideograph 233442 8B48 E8AD88 East Asian ideograph 233444 8B54 E8AD94 East Asian ideograph 233448 8B53 E8AD93 East Asian ideograph 233449 8B4A E8AD8A East Asian ideograph 23344A 8B46 E8AD86 East Asian ideograph 23344D 8B56 E8AD96 East Asian ideograph 23344F 8B3F E8ACBF East Asian ideograph 233459 8B59 E8AD99 East Asian ideograph 23345F 8B4D E8AD8D East Asian ideograph 233468 8B6B E8ADAB East Asian ideograph 23346B 8B6D E8ADAD East Asian ideograph 233470 8B78 E8ADB8 East Asian ideograph 233473 8B45 E8AD85 East Asian ideograph 233478 8B85 E8AE85 East Asian ideograph 233479 8B81 E8AE81 East Asian ideograph 23347B 8B7E E8ADBE East Asian ideograph 233523 8B8B E8AE8B East Asian ideograph 233526 8B87 E8AE87 East Asian ideograph 23352D 8B95 E8AE95 East Asian ideograph 23352E 8B94 E8AE94 East Asian ideograph 233537 8B9C E8AE9C East Asian ideograph 23353A 8B9F E8AE9F East Asian ideograph 23353D 8C3A E8B0BA East Asian ideograph 233544 8C40 E8B180 East Asian ideograph 233545 8C42 E8B182 East Asian ideograph 23354B 8C47 E8B187 East Asian ideograph 23354D 8C4B E8B18B East Asian ideograph 233550 8C4F E8B18F East Asian ideograph 233552 8C55 E8B195 East Asian ideograph 233554 8C57 E8B197 East Asian ideograph 233555 8C5C E8B19C East Asian ideograph 233556 8C5D E8B19D East Asian ideograph 23355C 86C3 E89B83 East Asian ideograph 233563 8C68 E8B1A8 East Asian ideograph 233565 8C6D E8B1AD East Asian ideograph 23356D 8C73 E8B1B3 East Asian ideograph 23356F 8C74 E8B1B4 East Asian ideograph 233571 8C75 E8B1B5 East Asian ideograph 233573 8C77 E8B1B7 East Asian ideograph 233574 8C76 E8B1B6 East Asian ideograph 23357B 8C78 E8B1B8 East Asian ideograph 23357D 8C7B E8B1BB East Asian ideograph 23362A 8C86 E8B286 East Asian ideograph 23362D 8C85 E8B285 East Asian ideograph 23362E 8C88 E8B288 East Asian ideograph 233639 8C94 E8B294 East Asian ideograph 233641 8C9B E8B29B East Asian ideograph 233643 8C9F E8B29F East Asian ideograph 233644 8CA4 E8B2A4 East Asian ideograph 23364E 8CB0 E8B2B0 East Asian ideograph 233651 8CBA E8B2BA East Asian ideograph 233652 8CB5 E8B2B5 East Asian ideograph 233653 8CB9 E8B2B9 East Asian ideograph 233657 8CCD E8B38D East Asian ideograph 23365E 8CD8 E8B398 East Asian ideograph 23365F 8CD5 E8B395 East Asian ideograph 233667 8CE8 E8B3A8 East Asian ideograph 233668 8CE9 E8B3A9 East Asian ideograph 23366A 8CE1 E8B3A1 East Asian ideograph 23366F 8CEB E8B3AB East Asian ideograph 233670 8CDA E8B39A East Asian ideograph 233672 8CDD E8B39D East Asian ideograph 233674 8CD9 E8B399 East Asian ideograph 233676 8CEE E8B3AE East Asian ideograph 23367B 8CF1 E8B3B1 East Asian ideograph 23367C 8CF5 E8B3B5 East Asian ideograph 23367E 8CFB E8B3BB East Asian ideograph 233721 8CF7 E8B3B7 East Asian ideograph 233725 8D04 E8B484 East Asian ideograph 233726 8CFE E8B3BE East Asian ideograph 23372B 8D07 E8B487 East Asian ideograph 23372D 8D09 E8B489 East Asian ideograph 233732 8D0C E8B48C East Asian ideograph 233739 8D11 E8B491 East Asian ideograph 23373A 8D10 E8B490 East Asian ideograph 23373B 8D12 E8B492 East Asian ideograph 23373D 8D14 E8B494 East Asian ideograph 23373E 8D18 E8B498 East Asian ideograph 233748 8D6C E8B5AC East Asian ideograph 233752 8D78 E8B5B8 East Asian ideograph 23375C 8D7A E8B5BA East Asian ideograph 233761 8D84 E8B684 East Asian ideograph 233771 8D94 E8B694 East Asian ideograph 233775 8D8D E8B68D East Asian ideograph 233822 8D96 E8B696 East Asian ideograph 23382F 8DA1 E8B6A1 East Asian ideograph 233833 8DA6 E8B6A6 East Asian ideograph 233852 8DAB E8B6AB East Asian ideograph 233859 8DAF E8B6AF East Asian ideograph 23385A 8DB0 E8B6B0 East Asian ideograph 233866 8DB2 E8B6B2 East Asian ideograph 23386E 8DBC E8B6BC East Asian ideograph 23386F 8DBA E8B6BA East Asian ideograph 233870 8DB9 E8B6B9 East Asian ideograph 233871 8DC2 E8B782 East Asian ideograph 233872 8DC1 E8B781 East Asian ideograph 233873 8DBF E8B6BF East Asian ideograph 233921 8DCF E8B78F East Asian ideograph 233922 8DD6 E8B796 East Asian ideograph 233927 8DD0 E8B790 East Asian ideograph 23392B 8DC5 E8B785 East Asian ideograph 23392F 8DE4 E8B7A4 East Asian ideograph 233934 8DEC E8B7AC East Asian ideograph 233935 8DEB E8B7AB East Asian ideograph 233936 8DF4 E8B7B4 East Asian ideograph 233938 8DE9 E8B7A9 East Asian ideograph 23393A 8DE6 E8B7A6 East Asian ideograph 23393B 8DE3 E8B7A3 East Asian ideograph 23393D 8DE7 E8B7A7 East Asian ideograph 23393E 8DF2 E8B7B2 East Asian ideograph 23393F 8E09 E8B889 East Asian ideograph 233941 8DFD E8B7BD East Asian ideograph 233944 8DFF E8B7BF East Asian ideograph 233946 8E05 E8B885 East Asian ideograph 233949 8E01 E8B881 East Asian ideograph 23394E 8E04 E8B884 East Asian ideograph 233950 8E06 E8B886 East Asian ideograph 233952 8E2A E8B8AA East Asian ideograph 233954 8E23 E8B8A3 East Asian ideograph 233957 8E2E E8B8AE East Asian ideograph 233958 8E21 E8B8A1 East Asian ideograph 23395C 8E1E E8B89E East Asian ideograph 233964 8E16 E8B896 East Asian ideograph 233966 8E26 E8B8A6 East Asian ideograph 233967 8E27 E8B8A7 East Asian ideograph 233968 8E14 E8B894 East Asian ideograph 233969 8E18 E8B898 East Asian ideograph 23396F 8E41 E8B981 East Asian ideograph 233977 8E40 E8B980 East Asian ideograph 233979 8E36 E8B8B6 East Asian ideograph 23397E 8E3D E8B8BD East Asian ideograph 233A21 8E30 E8B8B0 East Asian ideograph 233A24 8E47 E8B987 East Asian ideograph 233A26 8E46 E8B986 East Asian ideograph 233A2E 8E4C E8B98C East Asian ideograph 233A30 8E50 E8B990 East Asian ideograph 233A32 8E4F E8B98F East Asian ideograph 233A34 8E5C E8B99C East Asian ideograph 233A35 8E62 E8B9A2 East Asian ideograph 233A36 8E60 E8B9A0 East Asian ideograph 233A3A 8E54 E8B994 East Asian ideograph 233A3B 8E67 E8B9A7 East Asian ideograph 233A3E 8E5A E8B99A East Asian ideograph 233A3F 8E5E E8B99E East Asian ideograph 233A40 8E55 E8B995 East Asian ideograph 233A41 8E61 E8B9A1 East Asian ideograph 233A43 8E5D E8B99D East Asian ideograph 233A44 8E75 E8B9B5 East Asian ideograph 233A45 8E74 E8B9B4 East Asian ideograph 233A46 8E95 E8BA95 East Asian ideograph 233A48 8E6D E8B9AD East Asian ideograph 233A4B 8E69 E8B9A9 East Asian ideograph 233A52 8E83 E8BA83 East Asian ideograph 233A53 8E84 E8BA84 East Asian ideograph 233A57 8E8B E8BA8B East Asian ideograph 233A5D 8E94 E8BA94 East Asian ideograph 233A5E 8E9A E8BA9A East Asian ideograph 233A5F 8E92 E8BA92 East Asian ideograph 233A60 8E93 E8BA93 East Asian ideograph 233A62 8E90 E8BA90 East Asian ideograph 233A63 8E98 E8BA98 East Asian ideograph 233A64 8E9E E8BA9E East Asian ideograph 233A6B 8EA5 E8BAA5 East Asian ideograph 233A6F 8EA7 E8BAA7 East Asian ideograph 233A71 8EA9 E8BAA9 East Asian ideograph 233A72 8E99 E8BA99 East Asian ideograph 233A78 8EB3 E8BAB3 East Asian ideograph 233A7A 8EBC E8BABC East Asian ideograph 233A7D 8EB6 E8BAB6 East Asian ideograph 233B2E 8EC9 E8BB89 East Asian ideograph 233B2F 8ECF E8BB8F East Asian ideograph 233B31 8ECE E8BB8E East Asian ideograph 233B33 8ED5 E8BB95 East Asian ideograph 233B3F 8EFA E8BBBA East Asian ideograph 233B42 8EF9 E8BBB9 East Asian ideograph 233B4B 8EE8 E8BBA8 East Asian ideograph 233B4F 8EEB E8BBAB East Asian ideograph 233B51 8EFF E8BBBF East Asian ideograph 233B56 8F00 E8BC80 East Asian ideograph 233B59 8F05 E8BC85 East Asian ideograph 233B5A 8F08 E8BC88 East Asian ideograph 233B5B 8F07 E8BC87 East Asian ideograph 233B63 8F27 E8BCA7 East Asian ideograph 233B64 8F2C E8BCAC East Asian ideograph 233B6B 8F1E E8BC9E East Asian ideograph 233B6D 8F25 E8BCA5 East Asian ideograph 233B6E 8F20 E8BCA0 East Asian ideograph 233B75 8F17 E8BC97 East Asian ideograph 233B78 8F36 E8BCB6 East Asian ideograph 233B79 8F2E E8BCAE East Asian ideograph 233B7A 8F33 E8BCB3 East Asian ideograph 233B7D 8F2D E8BCAD East Asian ideograph 233C26 8F39 E8BCB9 East Asian ideograph 233C27 8F34 E8BCB4 East Asian ideograph 233C2D 8F40 E8BD80 East Asian ideograph 233C30 8F46 E8BD86 East Asian ideograph 233C31 8F4A E8BD8A East Asian ideograph 233C33 8F47 E8BD87 East Asian ideograph 233C3D 8F52 E8BD92 East Asian ideograph 233C48 8F56 E8BD96 East Asian ideograph 233C49 8F57 E8BD97 East Asian ideograph 233C4B 8F55 E8BD95 East Asian ideograph 233C4C 8F58 E8BD98 East Asian ideograph 233C4D 8F5C E8BD9C East Asian ideograph 233C4E 8F5E E8BD9E East Asian ideograph 233C53 8F5D E8BD9D East Asian ideograph 233C57 8F62 E8BDA2 East Asian ideograph 233C59 8F63 E8BDA3 East Asian ideograph 233C5A 8F64 E8BDA4 East Asian ideograph 233C65 8FA4 E8BEA4 East Asian ideograph 233C66 8FA5 E8BEA5 East Asian ideograph 233C6C 8FB5 E8BEB5 East Asian ideograph 233C6D 8FB7 E8BEB7 East Asian ideograph 233C6E 8FBB E8BEBB East Asian ideograph 233C70 8FBC E8BEBC East Asian ideograph 233C74 8FBF E8BEBF East Asian ideograph 233C75 8FD2 E8BF92 East Asian ideograph 233C77 8FCB E8BF8B East Asian ideograph 233C7A 8FCA E8BF8A East Asian ideograph 233C7B 8FD3 E8BF93 East Asian ideograph 233C7D 8FCD E8BF8D East Asian ideograph 233D21 8FDA E8BF9A East Asian ideograph 233D22 8FD5 E8BF95 East Asian ideograph 233D2F 8FE4 E8BFA4 East Asian ideograph 233D30 8FEE E8BFAE East Asian ideograph 233D35 8FF9 E8BFB9 East Asian ideograph 233D3C 8FFB E8BFBB East Asian ideograph 233D3F 9004 E98084 East Asian ideograph 233D40 9008 E98088 East Asian ideograph 233D44 9011 E98091 East Asian ideograph 233D45 900B E9808B East Asian ideograph 233D48 900C E9808C East Asian ideograph 233D49 9021 E980A1 East Asian ideograph 233D4A 902D E980AD East Asian ideograph 233D4E 902C E980AC East Asian ideograph 233D56 9037 E980B7 East Asian ideograph 233D57 9034 E980B4 East Asian ideograph 233D58 902F E980AF East Asian ideograph 233D59 9036 E980B6 East Asian ideograph 233D5B 9046 E98186 East Asian ideograph 233D5D 9052 E98192 East Asian ideograph 233D67 9049 E98189 East Asian ideograph 233D6A 9044 E98184 East Asian ideograph 233D74 9062 E981A2 East Asian ideograph 233D75 905D E9819D East Asian ideograph 233D78 905B E9819B East Asian ideograph 233D7B 906B E981AB East Asian ideograph 233E21 9070 E981B0 East Asian ideograph 233E25 906F E981AF East Asian ideograph 233E26 9079 E981B9 East Asian ideograph 233E28 9076 E981B6 East Asian ideograph 233E2A 907B E981BB East Asian ideograph 233E2C 9085 E98285 East Asian ideograph 233E34 9083 E98283 East Asian ideograph 233E37 9088 E98288 East Asian ideograph 233E3A 908B E9828B East Asian ideograph 233E3F 9099 E98299 East Asian ideograph 233E40 9097 E98297 East Asian ideograph 233E43 909B E9829B East Asian ideograph 233E44 909C E9829C East Asian ideograph 233E48 90A1 E982A1 East Asian ideograph 233E51 90A8 E982A8 East Asian ideograph 233E54 90A0 E982A0 East Asian ideograph 233E58 90AF E982AF East Asian ideograph 233E59 90B3 E982B3 East Asian ideograph 233E5B 90B6 E982B6 East Asian ideograph 233E5D 90B0 E982B0 East Asian ideograph 233E5F 90AD E982AD East Asian ideograph 233E61 90B2 E982B2 East Asian ideograph 233E68 90C9 E98389 East Asian ideograph 233E6A 90BD E982BD East Asian ideograph 233E6F 90D5 E98395 East Asian ideograph 233E72 90BE E982BE East Asian ideograph 233E75 90C7 E98387 East Asian ideograph 233E78 90C8 E98388 East Asian ideograph 233E79 90C3 E98383 East Asian ideograph 233F22 90DD E9839D East Asian ideograph 233F23 90DF E9839F East Asian ideograph 233F26 90E2 E983A2 East Asian ideograph 233F27 90D8 E98398 East Asian ideograph 233F28 90DB E9839B East Asian ideograph 233F2A 90DC E9839C East Asian ideograph 233F2C 90D7 E98397 East Asian ideograph 233F2D 90E4 E983A4 East Asian ideograph 233F2E 90EF E983AF East Asian ideograph 233F2F 90EA E983AA East Asian ideograph 233F32 90F0 E983B0 East Asian ideograph 233F33 90F4 E983B4 East Asian ideograph 233F34 90F2 E983B2 East Asian ideograph 233F3E 90EB E983AB East Asian ideograph 233F3F 90F3 E983B3 East Asian ideograph 233F46 90FC E983BC East Asian ideograph 233F47 90FE E983BE East Asian ideograph 233F49 9104 E98484 East Asian ideograph 233F4A 90FF E983BF East Asian ideograph 233F4C 9106 E98486 East Asian ideograph 233F4E 9100 E98480 East Asian ideograph 233F50 9107 E98487 East Asian ideograph 233F57 910F E9848F East Asian ideograph 233F58 9111 E98491 East Asian ideograph 233F5A 9116 E98496 East Asian ideograph 233F5C 9114 E98494 East Asian ideograph 233F60 910B E9848B East Asian ideograph 233F62 9123 E984A3 East Asian ideograph (Version J extension) 233F63 9118 E98498 East Asian ideograph 233F64 911C E9849C East Asian ideograph 233F66 9120 E984A0 East Asian ideograph 233F67 9122 E984A2 East Asian ideograph 233F6A 911E E9849E East Asian ideograph 233F71 9124 E984A4 East Asian ideograph 233F72 911A E9849A East Asian ideograph 233F74 9125 E984A5 East Asian ideograph 233F77 912F E984AF East Asian ideograph 233F79 912B E984AB East Asian ideograph 234021 9132 E984B2 East Asian ideograph 234024 9126 E984A6 East Asian ideograph 23402B 9134 E984B4 East Asian ideograph 23402C 9136 E984B6 East Asian ideograph 234031 913A E984BA East Asian ideograph 234032 913B E984BB East Asian ideograph 23403B 9143 E98583 East Asian ideograph 23403E 9146 E98586 East Asian ideograph 23403F 9145 E98585 East Asian ideograph 234040 9148 E98588 East Asian ideograph 234041 9147 E98587 East Asian ideograph 234042 9150 E98590 East Asian ideograph 234043 914E E9858E East Asian ideograph 234048 9159 E98599 East Asian ideograph 234049 915C E9859C East Asian ideograph 23404D 9156 E98596 East Asian ideograph 234050 9158 E98598 East Asian ideograph 234052 915A E9859A East Asian ideograph 234053 9161 E985A1 East Asian ideograph 234056 9164 E985A4 East Asian ideograph 234061 916F E985AF East Asian ideograph 234062 916E E985AE East Asian ideograph 234066 917A E985BA East Asian ideograph 234068 9172 E985B2 East Asian ideograph 234069 9179 E985B9 East Asian ideograph 23406A 9176 E985B6 East Asian ideograph 23406B 9174 E985B4 East Asian ideograph 23406C 9173 E985B3 East Asian ideograph 23406D 9185 E98685 East Asian ideograph 23406F 9182 E98682 East Asian ideograph 234070 918A E9868A East Asian ideograph 234071 9186 E98686 East Asian ideograph 234072 918C E9868C East Asian ideograph 234073 9181 E98681 East Asian ideograph 23407B 9191 E98691 East Asian ideograph 23407D 9190 E98690 East Asian ideograph 23407E 918E E9868E East Asian ideograph 234124 918D E9868D East Asian ideograph 234125 9193 E98693 East Asian ideograph 23412B 919D E9869D East Asian ideograph 23412C 919A E9869A East Asian ideograph 234130 91A2 E986A2 East Asian ideograph 234134 919B E9869B East Asian ideograph (variant of EACC 4D4134) 234137 91A8 E986A8 East Asian ideograph 23413D 91AA E986AA East Asian ideograph 234141 91AF E986AF East Asian ideograph 234142 91B1 E986B1 East Asian ideograph 234147 91AD E986AD East Asian ideograph 234148 91AE E986AE East Asian ideograph 23414B 91B4 E986B4 East Asian ideograph 23414C 91B2 E986B2 East Asian ideograph 23414D 91B5 E986B5 East Asian ideograph 234156 91BF E986BF East Asian ideograph 234157 91BD E986BD East Asian ideograph 23415A 91C2 E98782 East Asian ideograph 23415B 91C4 E98784 East Asian ideograph 23415C 91C3 E98783 East Asian ideograph 234161 91D4 E98794 East Asian ideograph 234162 91D3 E98793 East Asian ideograph 234163 91D5 E98795 East Asian ideograph 234164 91D9 E98799 East Asian ideograph 234168 91E2 E987A2 East Asian ideograph 234169 91ED E987AD East Asian ideograph 23416A 91F7 E987B7 East Asian ideograph 23416B 91FA E987BA East Asian ideograph 23416F 91F2 E987B2 East Asian ideograph 234171 91E8 E987A8 East Asian ideograph 234172 91F6 E987B6 East Asian ideograph 234173 91EE E987AE East Asian ideograph 234174 91F4 E987B4 East Asian ideograph 234177 91F1 E987B1 East Asian ideograph 234179 91E9 E987A9 East Asian ideograph 23417A 91F8 E987B8 East Asian ideograph 234221 91F9 E987B9 East Asian ideograph 234222 91E4 E987A4 East Asian ideograph 234223 9204 E98884 East Asian ideograph 234225 9201 E98881 East Asian ideograph 234226 922B E988AB East Asian ideograph 234227 920A E9888A East Asian ideograph 234228 9225 E988A5 East Asian ideograph 23422A 9292 E98A92 East Asian ideograph 23422C 9228 E988A8 East Asian ideograph 23422E 9207 E98887 East Asian ideograph 23422F 9203 E98883 East Asian ideograph 234231 9200 E98880 East Asian ideograph 234232 9218 E98898 East Asian ideograph 234233 91FE E987BE East Asian ideograph 234236 9208 E98888 East Asian ideograph 234237 9226 E988A6 East Asian ideograph 234238 921C E9889C East Asian ideograph 23423B 9224 E988A4 East Asian ideograph 234243 9212 E98892 East Asian ideograph 234248 91FF E987BF East Asian ideograph 23424A 9216 E98896 East Asian ideograph 23424B 9211 E98891 East Asian ideograph 23424E 9206 E98886 East Asian ideograph 23424F 92A2 E98AA2 East Asian ideograph 234251 9230 E988B0 East Asian ideograph 234252 9249 E98989 East Asian ideograph 234254 924D E9898D East Asian ideograph 234255 9248 E98988 East Asian ideograph 234258 923A E988BA East Asian ideograph 23425C 922E E988AE East Asian ideograph 23425F 9233 E988B3 East Asian ideograph 234261 9266 E989A6 East Asian ideograph 234264 925E E9899E East Asian ideograph 234268 9235 E988B5 East Asian ideograph 23426B 9250 E98990 East Asian ideograph 23426C 926B E989AB East Asian ideograph 23426D 9239 E988B9 East Asian ideograph 23426F 926D E989AD East Asian ideograph 234270 926C E989AC East Asian ideograph 234271 924F E9898F East Asian ideograph 234274 923F E988BF East Asian ideograph 234277 9260 E989A0 East Asian ideograph 23427E 9236 E988B6 East Asian ideograph 234323 924E E9898E East Asian ideograph 234326 924C E9898C East Asian ideograph 234327 9256 E98996 East Asian ideograph 23432B 925A E9899A East Asian ideograph 23432E 9241 E98981 East Asian ideograph 23432F 9283 E98A83 East Asian ideograph 234331 92A5 E98AA5 East Asian ideograph 234333 9282 E98A82 East Asian ideograph 234335 92A8 E98AA8 East Asian ideograph 234337 927C E989BC East Asian ideograph 234338 92A4 E98AA4 East Asian ideograph 23433E 9276 E989B6 East Asian ideograph 23433F 928D E98A8D East Asian ideograph 234340 92EE E98BAE East Asian ideograph 234342 9288 E98A88 East Asian ideograph 234343 927A E989BA East Asian ideograph 234345 928E E98A8E East Asian ideograph 234346 92A0 E98AA0 East Asian ideograph 234347 9277 E989B7 East Asian ideograph 234349 92AA E98AAA East Asian ideograph 234350 92A6 E98AA6 East Asian ideograph 234354 927E E989BE East Asian ideograph 234355 929A E98A9A East Asian ideograph 234358 92AB E98AAB East Asian ideograph 23435B 9291 E98A91 East Asian ideograph 23435D 929B E98A9B East Asian ideograph 234362 927F E989BF East Asian ideograph 234364 92A3 E98AA3 East Asian ideograph 234366 92C8 E98B88 East Asian ideograph 23436A 92C3 E98B83 East Asian ideograph 23436F 92D0 E98B90 East Asian ideograph 234371 92F1 E98BB1 East Asian ideograph 234372 92DF E98B9F East Asian ideograph 234375 92E6 E98BA6 East Asian ideograph 234376 92B6 E98AB6 East Asian ideograph 234377 92C0 E98B80 East Asian ideograph 234379 92BE E98ABE East Asian ideograph 23437A 92D9 E98B99 East Asian ideograph 23437E 92D5 E98B95 East Asian ideograph 234421 92C6 E98B86 East Asian ideograph 234425 92F4 E98BB4 East Asian ideograph 234427 92CF E98B8F East Asian ideograph 23442A 92B2 E98AB2 East Asian ideograph 23442C 92E7 E98BA7 East Asian ideograph 23442D 92C7 E98B87 East Asian ideograph 23442E 92F0 E98BB0 East Asian ideograph 23442F 92DB E98B9B East Asian ideograph 234430 92DC E98B9C East Asian ideograph 234431 92D8 E98B98 East Asian ideograph 234433 92E9 E98BA9 East Asian ideograph 234435 92DD E98B9D East Asian ideograph 234439 92D1 E98B91 East Asian ideograph 23443A 92CA E98B8A East Asian ideograph 23443C 92C2 E98B82 East Asian ideograph 23443E 92CC E98B8C East Asian ideograph 234440 92EF E98BAF East Asian ideograph 234441 92E8 E98BA8 East Asian ideograph 234443 92EB E98BAB East Asian ideograph 234445 92F5 E98BB5 East Asian ideograph 234448 92F2 E98BB2 East Asian ideograph 23444C 9303 E98C83 East Asian ideograph 23444D 9307 E98C87 East Asian ideograph 23444E 931E E98C9E East Asian ideograph 23444F 9344 E98D84 East Asian ideograph 234453 931D E98C9D East Asian ideograph 234454 92FA E98BBA East Asian ideograph 234458 931F E98C9F East Asian ideograph 23445A 9331 E98CB1 East Asian ideograph 23445B 9306 E98C86 East Asian ideograph 23445D 92F9 E98BB9 East Asian ideograph 23445F 930F E98C8F East Asian ideograph 234462 9302 E98C82 East Asian ideograph 234464 9324 E98CA4 East Asian ideograph 234466 9312 E98C92 East Asian ideograph 234469 9338 E98CB8 East Asian ideograph 23446A 9323 E98CA3 East Asian ideograph 23446C 9321 E98CA1 East Asian ideograph 234471 9340 E98D80 East Asian ideograph 234472 9301 E98C81 East Asian ideograph 234474 9315 E98C95 East Asian ideograph 234476 9329 E98CA9 East Asian ideograph 234478 932E E98CAE East Asian ideograph 234479 932A E98CAA East Asian ideograph 23447B 933F E98CBF East Asian ideograph 23447C 933A E98CBA East Asian ideograph 23447E 9335 E98CB5 East Asian ideograph 234522 9314 E98C94 East Asian ideograph 234528 92FE E98BBE East Asian ideograph 23452F 9342 E98D82 East Asian ideograph 234531 9341 E98D81 East Asian ideograph 234532 9319 E98C99 East Asian ideograph 234535 934C E98D8C East Asian ideograph 234541 9379 E98DB9 East Asian ideograph 234544 9386 E98E86 East Asian ideograph 234547 936A E98DAA East Asian ideograph 234548 935C E98D9C East Asian ideograph 23454C 934F E98D8F East Asian ideograph 23454D 9347 E98D87 East Asian ideograph 234551 937A E98DBA East Asian ideograph 234553 9356 E98D96 East Asian ideograph 234554 9371 E98DB1 East Asian ideograph 234556 937C E98DBC East Asian ideograph 23455C 9377 E98DB7 East Asian ideograph 23455D 9349 E98D89 East Asian ideograph 23455E 9358 E98D98 East Asian ideograph 23455F 935A E98D9A East Asian ideograph 234560 93BE E98EBE East Asian ideograph 234562 935F E98D9F East Asian ideograph 234564 9376 E98DB6 East Asian ideograph 234566 9355 E98D95 East Asian ideograph 234567 9354 E98D94 East Asian ideograph 23456A 9348 E98D88 East Asian ideograph 23456B 9374 E98DB4 East Asian ideograph 23456E 9351 E98D91 East Asian ideograph 23456F 9364 E98DA4 East Asian ideograph 234571 936B E98DAB East Asian ideograph 234572 936D E98DAD East Asian ideograph 234573 9360 E98DA0 East Asian ideograph 234577 936E E98DAE East Asian ideograph 234579 938F E98E8F East Asian ideograph 23457A 93AC E98EAC East Asian ideograph 23457B 9395 E98E95 East Asian ideograph 23457E 938B E98E8B East Asian ideograph 234621 93B5 E98EB5 East Asian ideograph 234622 938C E98E8C East Asian ideograph 234623 9388 E98E88 East Asian ideograph 234625 93B9 E98EB9 East Asian ideograph 234627 93A1 E98EA1 East Asian ideograph 234628 93B0 E98EB0 East Asian ideograph 234629 93A3 E98EA3 East Asian ideograph 23462A 93B7 E98EB7 East Asian ideograph 23462B 939B E98E9B East Asian ideograph 23462D 9398 E98E98 East Asian ideograph 23463C 9389 E98E89 East Asian ideograph 23463D 93A4 E98EA4 East Asian ideograph 234640 93BC E98EBC East Asian ideograph 234642 93A7 E98EA7 East Asian ideograph 234644 93BD E98EBD East Asian ideograph 234647 93A6 E98EA6 East Asian ideograph 234648 939A E98E9A East Asian ideograph 23464A 93AA E98EAA East Asian ideograph 23464D 939E E98E9E East Asian ideograph 23464F 9397 E98E97 East Asian ideograph 234651 93BB E98EBB East Asian ideograph 234653 93F1 E98FB1 East Asian ideograph 234656 93DE E98F9E East Asian ideograph 234657 93EE E98FAE East Asian ideograph 23465A 93C7 E98F87 East Asian ideograph 23465B 93F2 E98FB2 East Asian ideograph 23465D 93D4 E98F94 East Asian ideograph 23465F 93E5 E98FA5 East Asian ideograph 234662 93F9 E98FB9 East Asian ideograph 234663 93CA E98F8A East Asian ideograph 234664 93C4 E98F84 East Asian ideograph 234666 93E8 E98FA8 East Asian ideograph 234667 93E7 E98FA7 East Asian ideograph 234672 93DA E98F9A East Asian ideograph 234673 93D0 E98F90 East Asian ideograph 234674 93EF E98FAF East Asian ideograph 234675 93DB E98F9B East Asian ideograph 23467C 93CC E98F8C East Asian ideograph 23472C 93D3 E98F93 East Asian ideograph 23472F 93A9 E98EA9 East Asian ideograph 234730 93E6 E98FA6 East Asian ideograph 234732 940B E9908B East Asian ideograph 234734 9413 E99093 East Asian ideograph 23473B 940F E9908F East Asian ideograph 23473C 9420 E990A0 East Asian ideograph 23473D 93FB E98FBB East Asian ideograph 234749 93FA E98FBA East Asian ideograph 23474D 9419 E99099 East Asian ideograph 23474E 940D E9908D East Asian ideograph 234750 9426 E990A6 East Asian ideograph 234751 9427 E990A7 East Asian ideograph 234755 9409 E99089 East Asian ideograph 234758 9414 E99094 East Asian ideograph 234759 9404 E99084 East Asian ideograph 23475C 9422 E990A2 East Asian ideograph 23475D 9406 E99086 East Asian ideograph 234760 9410 E99090 East Asian ideograph 234762 9423 E990A3 East Asian ideograph 234767 93F5 E98FB5 East Asian ideograph 234769 93F7 E98FB7 East Asian ideograph 23476A 9407 E99087 East Asian ideograph 23476F 940E E9908E East Asian ideograph 234771 9411 E99091 East Asian ideograph 234774 943F E990BF East Asian ideograph 234779 9429 E990A9 East Asian ideograph 23477C 943D E990BD East Asian ideograph 234827 93F4 E98FB4 East Asian ideograph 234828 9436 E990B6 East Asian ideograph 23482B 943B E990BB East Asian ideograph 23482D 9424 E990A4 East Asian ideograph 234830 9437 E990B7 East Asian ideograph 234832 9440 E99180 East Asian ideograph 234835 942B E990AB East Asian ideograph 234836 942D E990AD East Asian ideograph 234837 9441 E99181 East Asian ideograph 234838 9431 E990B1 East Asian ideograph 23483D 9467 E991A7 East Asian ideograph 23483E 944C E9918C East Asian ideograph 234840 9445 E99185 East Asian ideograph 234842 9450 E99190 East Asian ideograph 23484A 944A E9918A East Asian ideograph 234853 9466 E991A6 East Asian ideograph 234857 9464 E991A4 East Asian ideograph 234858 9462 E991A2 East Asian ideograph 23485C 9465 E991A5 East Asian ideograph 23485D 9455 E99195 East Asian ideograph 23485E 945E E9919E East Asian ideograph 234862 946A E991AA East Asian ideograph 234868 946B E991AB East Asian ideograph 234869 946D E991AD East Asian ideograph 23486C 946F E991AF East Asian ideograph 23486D 9471 E991B1 East Asian ideograph 234871 9477 E991B7 East Asian ideograph 23487B 9482 E99282 East Asian ideograph 23487C 9481 E99281 East Asian ideograph 23492E 9585 E99685 East Asian ideograph 234930 9588 E99688 East Asian ideograph 234931 958C E9968C East Asian ideograph 234934 9597 E99697 East Asian ideograph 234936 958E E9968E East Asian ideograph 234938 959F E9969F East Asian ideograph 23493A 95A0 E996A0 East Asian ideograph 234942 95AC E996AC East Asian ideograph 234944 95AB E996AB East Asian ideograph 234948 95BC E996BC East Asian ideograph 234949 95BE E996BE East Asian ideograph 23494A 95CD E9978D East Asian ideograph 23494D 95B9 E996B9 East Asian ideograph 23494E 95BA E996BA East Asian ideograph 23494F 95B6 E996B6 East Asian ideograph 234950 95BF E996BF East Asian ideograph 234952 95BD E996BD East Asian ideograph 234959 95C9 E99789 East Asian ideograph 23495D 95CE E9978E East Asian ideograph 234960 95D5 E99795 East Asian ideograph 234962 95D2 E99792 East Asian ideograph 234963 95D3 E99793 East Asian ideograph 234964 95D1 E99791 East Asian ideograph 234965 95C3 E99783 East Asian ideograph 234966 95DA E9979A East Asian ideograph 234969 95DE E9979E East Asian ideograph 23496A 95E0 E997A0 East Asian ideograph 23496F 95E5 E997A5 East Asian ideograph 234972 95E4 E997A4 East Asian ideograph 234976 95E7 E997A7 East Asian ideograph 23497A 961E E9989E East Asian ideograph 23497B 9624 E998A4 East Asian ideograph 23497C 9622 E998A2 East Asian ideograph 234A21 9627 E998A7 East Asian ideograph 234A2F 9642 E99982 East Asian ideograph 234A30 963D E998BD East Asian ideograph 234A32 963C E998BC East Asian ideograph 234A3C 9651 E99991 East Asian ideograph 234A42 9660 E999A0 East Asian ideograph 234A44 965C E9999C East Asian ideograph 234A46 9658 E99998 East Asian ideograph 234A4A 965F E9999F East Asian ideograph 234A4B 9656 E99996 East Asian ideograph 234A51 966C E999AC East Asian ideograph 234A5D 967B E999BB East Asian ideograph 234A5E 967F E999BF East Asian ideograph 234A62 967E E999BE East Asian ideograph 234A63 9684 E99A84 East Asian ideograph 234A65 9688 E99A88 East Asian ideograph 234A6C 9689 E99A89 East Asian ideograph 234A6D 9682 E99A82 East Asian ideograph 234A6E 9683 E99A83 East Asian ideograph 234A79 9696 E99A96 East Asian ideograph 234A7A 9697 E99A97 East Asian ideograph 234B2F 96A4 E99AA4 East Asian ideograph 234B35 96A9 E99AA9 East Asian ideograph 234B37 96AE E99AAE East Asian ideograph 234B3B 96B0 E99AB0 East Asian ideograph 234B3C 96B2 E99AB2 East Asian ideograph 234B3E 96B3 E99AB3 East Asian ideograph 234B48 96B9 E99AB9 East Asian ideograph 234B49 96BC E99ABC East Asian ideograph 234B52 96CE E99B8E East Asian ideograph 234B53 96CA E99B8A East Asian ideograph 234B57 96D2 E99B92 East Asian ideograph 234B64 96DF E99B9F East Asian ideograph 234B66 96D8 E99B98 East Asian ideograph 234B67 96DD E99B9D East Asian ideograph 234B71 96E9 E99BA9 East Asian ideograph 234B74 96F1 E99BB1 East Asian ideograph 234B76 96F0 E99BB0 East Asian ideograph 234B77 96F4 E99BB4 East Asian ideograph 234B78 96FA E99BBA East Asian ideograph 234B7A 96F5 E99BB5 East Asian ideograph 234C22 96FF E99BBF East Asian ideograph 234C27 9702 E99C82 East Asian ideograph 234C29 9708 E99C88 East Asian ideograph 234C2A 9705 E99C85 East Asian ideograph 234C38 971B E99C9B East Asian ideograph 234C3D 971D E99C9D East Asian ideograph 234C3E 9719 E99C99 East Asian ideograph 234C47 9723 E99CA3 East Asian ideograph 234C49 9722 E99CA2 East Asian ideograph 234C4A 9724 E99CA4 East Asian ideograph 234C4E 9728 E99CA8 East Asian ideograph 234C50 9726 E99CA6 East Asian ideograph 234C52 9731 E99CB1 East Asian ideograph 234C58 9730 E99CB0 East Asian ideograph 234C5C 9736 E99CB6 East Asian ideograph 234C6A 9741 E99D81 East Asian ideograph 234C6B 9747 E99D87 East Asian ideograph 234C6C 9746 E99D86 East Asian ideograph 234C6E 9749 E99D89 East Asian ideograph 234C75 9758 E99D98 East Asian ideograph 234C76 975A E99D9A East Asian ideograph 234C78 975D E99D9D East Asian ideograph 234C7B 975F E99D9F East Asian ideograph 234C7D 9764 E99DA4 East Asian ideograph 234D25 9767 E99DA7 East Asian ideograph 234D2C 976B E99DAB East Asian ideograph 234D30 976E E99DAE East Asian ideograph 234D31 9777 E99DB7 East Asian ideograph 234D32 9778 E99DB8 East Asian ideograph 234D35 9773 E99DB3 East Asian ideograph 234D37 9783 E99E83 East Asian ideograph 234D38 977A E99DBA East Asian ideograph 234D3A 9780 E99E80 East Asian ideograph 234D3C 9781 E99E81 East Asian ideograph 234D40 9784 E99E84 East Asian ideograph 234D43 977F E99DBF East Asian ideograph 234D49 9789 E99E89 East Asian ideograph 234D54 9794 E99E94 East Asian ideograph 234D59 979B E99E9B East Asian ideograph 234D5A 979F E99E9F East Asian ideograph 234D5C 979A E99E9A East Asian ideograph 234D62 979C E99E9C East Asian ideograph 234D6A 97AC E99EAC East Asian ideograph 234D70 97AE E99EAE East Asian ideograph 234D71 97A8 E99EA8 East Asian ideograph 234D74 97AB E99EAB East Asian ideograph 234D78 97A5 E99EA5 East Asian ideograph 234D7A 97B2 E99EB2 East Asian ideograph 234D7C 97B4 E99EB4 East Asian ideograph 234E24 97B3 E99EB3 East Asian ideograph 234E26 97B5 E99EB5 East Asian ideograph 234E29 97B9 E99EB9 East Asian ideograph 234E2D 97B8 E99EB8 East Asian ideograph 234E35 97BE E99EBE East Asian ideograph 234E38 97C0 E99F80 East Asian ideograph 234E3B 97C5 E99F85 East Asian ideograph 234E43 97C9 E99F89 East Asian ideograph 234E4B 97CE E99F8E East Asian ideograph 234E4C 97CD E99F8D East Asian ideograph 234E4E 97D0 E99F90 East Asian ideograph 234E51 97D4 E99F94 East Asian ideograph 234E53 97D8 E99F98 East Asian ideograph 234E54 97D9 E99F99 East Asian ideograph 234E59 97DD E99F9D East Asian ideograph 234E5C 97DE E99F9E East Asian ideograph 234E5E 97E0 E99FA0 East Asian ideograph 234E60 97E1 E99FA1 East Asian ideograph 234E6C 97F5 E99FB5 East Asian ideograph 234E73 97FA E99FBA East Asian ideograph 234E79 9807 E9A087 East Asian ideograph 234E7B 980F E9A08F East Asian ideograph 234E7E 980D E9A08D East Asian ideograph 234F23 980E E9A08E East Asian ideograph 234F26 9816 E9A096 East Asian ideograph 234F2C 9826 E9A0A6 East Asian ideograph 234F2D 981E E9A09E East Asian ideograph 234F34 982B E9A0AB East Asian ideograph 234F37 9820 E9A0A0 East Asian ideograph 234F38 981F E9A09F East Asian ideograph 234F3D 9833 E9A0B3 East Asian ideograph 234F40 982E E9A0AE East Asian ideograph 234F44 982F E9A0AF East Asian ideograph 234F45 9832 E9A0B2 East Asian ideograph 234F4B 9847 E9A187 East Asian ideograph 234F4E 9844 E9A184 East Asian ideograph 234F60 9852 E9A192 East Asian ideograph 234F62 984B E9A18B East Asian ideograph 234F66 983F E9A0BF East Asian ideograph 234F6A 985C E9A19C East Asian ideograph 234F6B 9859 E9A199 East Asian ideograph 234F6F 9857 E9A197 East Asian ideograph 234F72 9856 E9A196 East Asian ideograph 234F77 9862 E9A1A2 East Asian ideograph 234F7E 9868 E9A1A8 East Asian ideograph 235021 9865 E9A1A5 East Asian ideograph 235022 9866 E9A1A6 East Asian ideograph 235029 986C E9A1AC East Asian ideograph 235030 9873 E9A1B3 East Asian ideograph 235031 9874 E9A1B4 East Asian ideograph 235039 98AD E9A2AD East Asian ideograph 235040 98B4 E9A2B4 East Asian ideograph 235048 98B8 E9A2B8 East Asian ideograph 23504A 98BF E9A2BF East Asian ideograph 23504D 98BB E9A2BB East Asian ideograph 23504E 98C0 E9A380 East Asian ideograph 235053 98C6 E9A386 East Asian ideograph 23505F 98E1 E9A3A1 East Asian ideograph 235060 98E3 E9A3A3 East Asian ideograph 235061 98E4 E9A3A4 East Asian ideograph 235063 98E5 E9A3A5 East Asian ideograph 235068 98F1 E9A3B1 East Asian ideograph 23506C 98EB E9A3AB East Asian ideograph 235124 9907 E9A487 East Asian ideograph 235128 9902 E9A482 East Asian ideograph 23512F 9916 E9A496 East Asian ideograph 235130 9914 E9A494 East Asian ideograph 235131 9917 E9A497 East Asian ideograph 235132 9911 E9A491 East Asian ideograph 235138 9915 E9A495 East Asian ideograph 23513A 9924 E9A4A4 East Asian ideograph 23513B 991F E9A49F East Asian ideograph 235140 991C E9A49C East Asian ideograph 235143 9929 E9A4A9 East Asian ideograph 235145 9927 E9A4A7 East Asian ideograph 235147 991A E9A49A East Asian ideograph 23514F 992E E9A4AE East Asian ideograph 235150 992C E9A4AC East Asian ideograph 235151 992A E9A4AA East Asian ideograph 235153 9933 E9A4B3 East Asian ideograph 235154 9942 E9A582 East Asian ideograph (variant of EACC 4D5154) 235155 9932 E9A4B2 East Asian ideograph 235156 992B E9A4AB East Asian ideograph 235158 9931 E9A4B1 East Asian ideograph 23515C 993B E9A4BB East Asian ideograph 235160 993A E9A4BA East Asian ideograph 235161 9941 E9A581 East Asian ideograph 235164 9940 E9A580 East Asian ideograph 235166 993C E9A4BC East Asian ideograph 23516A 9948 E9A588 East Asian ideograph 23516C 9947 E9A587 East Asian ideograph 23516D 9949 E9A589 East Asian ideograph 235170 9943 E9A583 East Asian ideograph 235171 994D E9A58D East Asian ideograph 235172 994C E9A58C East Asian ideograph 235173 994E E9A58E East Asian ideograph 235174 9950 E9A590 East Asian ideograph 23517A 9958 E9A598 East Asian ideograph 23517B 9954 E9A594 East Asian ideograph 23517E 9955 E9A595 East Asian ideograph 235222 9957 E9A597 East Asian ideograph (variant of EACC 475222) 235229 995D E9A59D East Asian ideograph 23522B 995F E9A59F East Asian ideograph 23522F 9997 E9A697 East Asian ideograph 235230 9998 E9A698 East Asian ideograph 23523B 99A3 E9A6A3 East Asian ideograph 23523C 99A1 E9A6A1 East Asian ideograph 23523E 99A6 E9A6A6 East Asian ideograph 235241 99A9 E9A6A9 East Asian ideograph 235242 99AA E9A6AA East Asian ideograph 235249 99B5 E9A6B5 East Asian ideograph 23524D 99BF E9A6BF East Asian ideograph 23524E 99BC E9A6BC East Asian ideograph 23524F 99C3 E9A783 East Asian ideograph 235253 99B9 E9A6B9 East Asian ideograph 235254 99BD E9A6BD East Asian ideograph 235261 99D3 E9A793 East Asian ideograph 235263 99D4 E9A794 East Asian ideograph 235265 99C9 E9A789 East Asian ideograph 235269 99D8 E9A798 East Asian ideograph 235274 99EC E9A7AC East Asian ideograph 23527A 99F0 E9A7B0 East Asian ideograph 23527B 99E3 E9A7A3 East Asian ideograph 23527C 99EA E9A7AA East Asian ideograph 235324 9A02 E9A882 East Asian ideograph 235329 99F8 E9A7B8 East Asian ideograph 23532A 99F4 E9A7B4 East Asian ideograph 235330 99FB E9A7BB East Asian ideograph 235331 99FD E9A7BD East Asian ideograph 23533D 9A0F E9A88F East Asian ideograph 23533E 9A0B E9A88B East Asian ideograph 23533F 9A09 E9A889 East Asian ideograph 235344 9A04 E9A884 East Asian ideograph 235345 9A11 E9A891 East Asian ideograph 235347 9A05 E9A885 East Asian ideograph 235348 9A10 E9A890 East Asian ideograph 23534C 9A24 E9A8A4 East Asian ideograph 23534D 9A22 E9A8A2 East Asian ideograph 23534F 9A20 E9A8A0 East Asian ideograph 235352 9A27 E9A8A7 East Asian ideograph 235359 9A2F E9A8AF East Asian ideograph 23535A 9A38 E9A8B8 East Asian ideograph 235360 9A2D E9A8AD East Asian ideograph 235361 9A35 E9A8B5 East Asian ideograph 235364 9A32 E9A8B2 East Asian ideograph 235369 9A36 E9A8B6 East Asian ideograph 23536A 9A2E E9A8AE East Asian ideograph 235370 9A41 E9A981 East Asian ideograph 235374 9A3B E9A8BB East Asian ideograph 235379 9A42 E9A982 East Asian ideograph 23537A 9A44 E9A984 East Asian ideograph 23537D 9A48 E9A988 East Asian ideograph 23537E 9A4C E9A98C East Asian ideograph 235422 9A4D E9A98D East Asian ideograph 235424 9A52 E9A992 East Asian ideograph 235427 9A4A E9A98A East Asian ideograph 23542A 9A58 E9A998 East Asian ideograph 23542C 9A56 E9A996 East Asian ideograph 235433 9A64 E9A9A4 East Asian ideograph 235434 9A66 E9A9A6 East Asian ideograph 23543A 9A6B E9A9AB East Asian ideograph 23543F 9AAD E9AAAD East Asian ideograph 235441 9AAB E9AAAB East Asian ideograph 235443 9AB1 E9AAB1 East Asian ideograph 235445 9AB3 E9AAB3 East Asian ideograph 235449 9AB6 E9AAB6 East Asian ideograph 23544C 9ABB E9AABB East Asian ideograph 235450 9ABA E9AABA East Asian ideograph 235454 9ABD E9AABD East Asian ideograph 235457 9AC1 E9AB81 East Asian ideograph 235459 9AC0 E9AB80 East Asian ideograph 23545A 9AC2 E9AB82 East Asian ideograph 23545D 9AC8 E9AB88 East Asian ideograph 235466 9AD0 E9AB90 East Asian ideograph 23546A 9AD1 E9AB91 East Asian ideograph 23546D 9AD6 E9AB96 East Asian ideograph 235472 9ADC E9AB9C East Asian ideograph 235474 9ADF E9AB9F East Asian ideograph 235476 9AE0 E9ABA0 East Asian ideograph 235477 9AE2 E9ABA2 East Asian ideograph 235521 9AE7 E9ABA7 East Asian ideograph 235527 9AEB E9ABAB East Asian ideograph 235528 9AF2 E9ABB2 East Asian ideograph 23552A 9AEF E9ABAF East Asian ideograph 235532 9AF9 E9ABB9 East Asian ideograph 235535 9AFD E9ABBD East Asian ideograph 235536 9B01 E9AC81 East Asian ideograph 235538 9B02 E9AC82 East Asian ideograph 23553B 9B00 E9AC80 East Asian ideograph 23553C 9B08 E9AC88 East Asian ideograph 23553E 9B04 E9AC84 East Asian ideograph 235541 9B05 E9AC85 East Asian ideograph 235543 9B0B E9AC8B East Asian ideograph 235547 9B0E E9AC8E East Asian ideograph 23554E 9B11 E9AC91 East Asian ideograph 23554F 9B10 E9AC90 East Asian ideograph 235554 9B18 E9AC98 East Asian ideograph 235556 9B1D E9AC9D East Asian ideograph 23555E 9B1F E9AC9F East Asian ideograph 235566 9B23 E9ACA3 East Asian ideograph 23556C 9B29 E9ACA9 East Asian ideograph 235573 9B2D E9ACAD East Asian ideograph 235574 9B2E E9ACAE East Asian ideograph 235576 9B2F E9ACAF East Asian ideograph 23557D 9B34 E9ACB4 East Asian ideograph 235622 9B35 E9ACB5 East Asian ideograph 235623 9B37 E9ACB7 East Asian ideograph 235636 9B43 E9AD83 East Asian ideograph 23563A 9B48 E9AD88 East Asian ideograph 23563C 9B4E E9AD8E East Asian ideograph 23563E 9B4D E9AD8D East Asian ideograph 235641 9B4B E9AD8B East Asian ideograph 235647 9B51 E9AD91 East Asian ideograph 23565D 9B74 E9ADB4 East Asian ideograph 235663 9B68 E9ADA8 East Asian ideograph 235672 9B80 E9AE80 East Asian ideograph 235673 9B8C E9AE8C East Asian ideograph 23567A 9B95 E9AE95 East Asian ideograph 23567B 9B7D E9ADBD East Asian ideograph 235721 9B83 E9AE83 East Asian ideograph 235729 9B8E E9AE8E East Asian ideograph 23572B 9B90 E9AE90 East Asian ideograph 23572E 9B93 E9AE93 East Asian ideograph 23572F 9B97 E9AE97 East Asian ideograph 235731 9B92 E9AE92 East Asian ideograph 235732 9B98 E9AE98 East Asian ideograph 235736 9B9F E9AE9F East Asian ideograph 235739 9B9D E9AE9D East Asian ideograph 23573C 9BAD E9AEAD East Asian ideograph 23573D 9B9A E9AE9A East Asian ideograph 23573F 9BA8 E9AEA8 East Asian ideograph 235742 9B9E E9AE9E East Asian ideograph 235743 9B99 E9AE99 East Asian ideograph 235749 9B86 E9AE86 East Asian ideograph 23574E 9BA0 E9AEA0 East Asian ideograph 235756 9BC7 E9AF87 East Asian ideograph 235759 9BD2 E9AF92 East Asian ideograph 23575D 9BC6 E9AF86 East Asian ideograph 23575E 9BBF E9AEBF East Asian ideograph 23575F 9BC1 E9AF81 East Asian ideograph 235766 9BB9 E9AEB9 East Asian ideograph 23576B 9BBB E9AEBB East Asian ideograph 23576C 9BD3 E9AF93 East Asian ideograph 23576E 9BC0 E9AF80 East Asian ideograph 235772 9BC8 E9AF88 East Asian ideograph 235777 9BD7 E9AF97 East Asian ideograph 23577A 9BD6 E9AF96 East Asian ideograph 23577C 9BEB E9AFAB East Asian ideograph 235823 9BD5 E9AF95 East Asian ideograph 235827 9BE4 E9AFA4 East Asian ideograph 23582B 9BF1 E9AFB1 East Asian ideograph 23582C 9BE1 E9AFA1 East Asian ideograph 23582D 9BDB E9AF9B East Asian ideograph 23582F 9BE2 E9AFA2 East Asian ideograph 235831 9BF0 E9AFB0 East Asian ideograph 235834 9BD4 E9AF94 East Asian ideograph 23583E 9BFF E9AFBF East Asian ideograph 235843 9C06 E9B086 East Asian ideograph 235844 9C15 E9B095 East Asian ideograph 235849 9C0A E9B08A East Asian ideograph 23584B 9C08 E9B088 East Asian ideograph 23584C 9C14 E9B094 East Asian ideograph 23584D 9C04 E9B084 East Asian ideograph 235852 9C02 E9B082 East Asian ideograph 235854 9C10 E9B090 East Asian ideograph 235859 9C12 E9B092 East Asian ideograph 23585C 9C09 E9B089 East Asian ideograph 235866 9C1C E9B09C East Asian ideograph 235869 9C2F E9B0AF East Asian ideograph 23586E 9C23 E9B0A3 East Asian ideograph 235870 9C2E E9B0AE East Asian ideograph 235871 9C28 E9B0A8 East Asian ideograph 235878 9C21 E9B0A1 East Asian ideograph 235879 9C24 E9B0A4 East Asian ideograph 23587E 9C46 E9B186 East Asian ideograph 235925 9C32 E9B0B2 East Asian ideograph 235926 9C44 E9B184 East Asian ideograph 235928 9C48 E9B188 East Asian ideograph 235929 9C39 E9B0B9 East Asian ideograph 23592A 9C33 E9B0B3 East Asian ideograph 235930 9C47 E9B187 East Asian ideograph 235932 9C35 E9B0B5 East Asian ideograph 235934 9C37 E9B0B7 East Asian ideograph 235938 9C52 E9B192 East Asian ideograph 23593B 9C58 E9B198 East Asian ideograph 235945 9C51 E9B191 East Asian ideograph 235949 9C63 E9B1A3 East Asian ideograph 23594F 9C67 E9B1A7 East Asian ideograph 235955 9C5F E9B19F East Asian ideograph 235956 9C60 E9B1A0 East Asian ideograph 235958 9C6D E9B1AD East Asian ideograph 23595B 9C68 E9B1A8 East Asian ideograph 23595C 9C6F E9B1AF East Asian ideograph 23595E 9C6E E9B1AE East Asian ideograph 23596B 9C7A E9B1BA East Asian ideograph 235973 9CE7 E9B3A7 East Asian ideograph 235974 9CF0 E9B3B0 East Asian ideograph 235977 9CF2 E9B3B2 East Asian ideograph 235A21 9D02 E9B482 East Asian ideograph 235A22 9D03 E9B483 East Asian ideograph 235A23 9CF7 E9B3B7 East Asian ideograph 235A24 9D04 E9B484 East Asian ideograph 235A28 9D07 E9B487 East Asian ideograph 235A2C 9CF8 E9B3B8 East Asian ideograph 235A2F 9D2A E9B4AA East Asian ideograph 235A30 9D25 E9B4A5 East Asian ideograph 235A3F 9D1E E9B49E East Asian ideograph 235A44 9D1D E9B49D East Asian ideograph 235A48 9D1F E9B49F East Asian ideograph 235A4F 9D41 E9B581 East Asian ideograph 235A53 9D36 E9B4B6 East Asian ideograph 235A63 9D3E E9B4BE East Asian ideograph 235A65 9D30 E9B4B0 East Asian ideograph 235A68 9D42 E9B582 East Asian ideograph 235A69 9D40 E9B580 East Asian ideograph 235A6B 9D3D E9B4BD East Asian ideograph 235A70 9D5C E9B59C East Asian ideograph 235A75 9D53 E9B593 East Asian ideograph 235A7B 9D59 E9B599 East Asian ideograph 235B26 9D5A E9B59A East Asian ideograph 235B2A 9D52 E9B592 East Asian ideograph 235B2C 9D77 E9B5B7 East Asian ideograph 235B2E 9D8A E9B68A East Asian ideograph 235B2F 9D7A E9B5BA East Asian ideograph 235B35 9D87 E9B687 East Asian ideograph 235B3F 9D78 E9B5B8 East Asian ideograph 235B42 9D7E E9B5BE East Asian ideograph 235B47 9D69 E9B5A9 East Asian ideograph 235B4D 9D7B E9B5BB East Asian ideograph 235B4F 9D83 E9B683 East Asian ideograph 235B52 9D6F E9B5AF East Asian ideograph 235B59 9DA9 E9B6A9 East Asian ideograph 235B5E 9D92 E9B692 East Asian ideograph 235B60 9D98 E9B698 East Asian ideograph 235B66 9DA4 E9B6A4 East Asian ideograph 235B67 9DAA E9B6AA East Asian ideograph 235B6A 9DA1 E9B6A1 East Asian ideograph 235B6B 9D9A E9B69A East Asian ideograph 235B70 9D96 E9B696 East Asian ideograph 235B74 9DB1 E9B6B1 East Asian ideograph 235B76 9DB6 E9B6B6 East Asian ideograph 235B77 9DBC E9B6BC East Asian ideograph 235B79 9DC0 E9B780 East Asian ideograph 235B7A 9DC1 E9B781 East Asian ideograph 235B7B 9DB8 E9B6B8 East Asian ideograph 235B7C 9DBA E9B6BA East Asian ideograph 235B7E 9DCF E9B78F East Asian ideograph 235C22 9DC7 E9B787 East Asian ideograph 235C27 9DC3 E9B783 East Asian ideograph 235C28 9DBB E9B6BB East Asian ideograph 235C32 9DB9 E9B6B9 East Asian ideograph 235C34 9DAC E9B6AC East Asian ideograph 235C36 9DB2 E9B6B2 East Asian ideograph 235C3A 9DDF E9B79F East Asian ideograph 235C3E 9DD9 E9B799 East Asian ideograph 235C45 9DD6 E9B796 East Asian ideograph 235C46 9DDE E9B79E East Asian ideograph 235C4F 9DE9 E9B7A9 East Asian ideograph 235C57 9DF2 E9B7B2 East Asian ideograph 235C5B 9DF8 E9B7B8 East Asian ideograph 235C5C 9DFC E9B7BC East Asian ideograph 235C5F 9DEB E9B7AB East Asian ideograph 235C65 9DEF E9B7AF East Asian ideograph 235C6A 9DED E9B7AD East Asian ideograph 235C6C 9DE6 E9B7A6 East Asian ideograph 235C6D 9DEE E9B7AE East Asian ideograph 235C71 9E07 E9B887 East Asian ideograph 235C7E 9DFD E9B7BD East Asian ideograph 235D27 9E0E E9B88E East Asian ideograph 235D2B 9E11 E9B891 East Asian ideograph 235D36 9E15 E9B895 East Asian ideograph 235D37 9E18 E9B898 East Asian ideograph 235D39 9E1C E9B89C East Asian ideograph 235D3A 9E1B E9B89B East Asian ideograph 235D3B 9E1D E9B89D East Asian ideograph 235D3C 9E75 E9B9B5 East Asian ideograph 235D42 9E7A E9B9BA East Asian ideograph 235D43 9E7B E9B9BB East Asian ideograph 235D47 9E80 E9BA80 East Asian ideograph 235D48 9E83 E9BA83 East Asian ideograph 235D49 9E84 E9BA84 East Asian ideograph 235D4B 9E88 E9BA88 East Asian ideograph 235D4F 9E87 E9BA87 East Asian ideograph 235D55 9E90 E9BA90 East Asian ideograph 235D58 9E8C E9BA8C East Asian ideograph 235D5A 9E95 E9BA95 East Asian ideograph 235D5C 9E91 E9BA91 East Asian ideograph 235D5D 9E9B E9BA9B East Asian ideograph 235D66 9E9E E9BA9E East Asian ideograph 235D77 9EAD E9BAAD East Asian ideograph 235D79 9EAF E9BAAF East Asian ideograph 235D7A 9EB0 E9BAB0 East Asian ideograph 235E30 9EC1 E9BB81 East Asian ideograph 235E35 9EC6 E9BB86 East Asian ideograph 235E37 9EC8 E9BB88 East Asian ideograph 235E42 9ECC E9BB8C East Asian ideograph 235E4A 9ED0 E9BB90 East Asian ideograph 235E4C 9ED3 E9BB93 East Asian ideograph 235E53 9EDA E9BB9A East Asian ideograph 235E55 9EDF E9BB9F East Asian ideograph 235E57 9EE3 E9BBA3 East Asian ideograph 235E59 9EE5 E9BBA5 East Asian ideograph 235E5C 9EE7 E9BBA7 East Asian ideograph 235E60 9EEE E9BBAE East Asian ideograph 235E66 9EF0 E9BBB0 East Asian ideograph 235E6F 9EF6 E9BBB6 East Asian ideograph 235E74 9EF9 E9BBB9 East Asian ideograph 235E76 9EFB E9BBBB East Asian ideograph 235E77 9EFC E9BBBC East Asian ideograph 235E7A 9EFD E9BBBD East Asian ideograph 235E7B 9EFE E9BBBE East Asian ideograph 235E7C 9EFF E9BBBF East Asian ideograph 235E7D 9F02 E9BC82 East Asian ideograph 235F2F 9F0F E9BC8F East Asian ideograph 235F31 9F10 E9BC90 East Asian ideograph 235F32 9F12 E9BC92 East Asian ideograph 235F33 9F16 E9BC96 East Asian ideograph 235F34 9F17 E9BC97 East Asian ideograph 235F37 9F1A E9BC9A East Asian ideograph 235F45 9F22 E9BCA2 East Asian ideograph 235F48 9F2B E9BCAB East Asian ideograph 235F49 9F26 E9BCA6 East Asian ideograph 235F53 9F2F E9BCAF East Asian ideograph 235F5E 9F39 E9BCB9 East Asian ideograph 235F5F 9F37 E9BCB7 East Asian ideograph 235F64 9F3D E9BCBD East Asian ideograph 235F69 9F41 E9BD81 East Asian ideograph 235F6D 9F45 E9BD85 East Asian ideograph 235F6F 9F46 E9BD86 East Asian ideograph 235F71 9F48 E9BD88 East Asian ideograph 235F73 9F49 E9BD89 East Asian ideograph 235F79 9F4E E9BD8E East Asian ideograph 235F7B 9F4F E9BD8F East Asian ideograph 235F7C 9F54 E9BD94 East Asian ideograph 235F7E 9F55 E9BD95 East Asian ideograph 236023 9F57 E9BD97 East Asian ideograph 236028 9F60 E9BDA0 East Asian ideograph 23603F 9F6E E9BDAE East Asian ideograph 236040 9F6F E9BDAF East Asian ideograph 236047 9F76 E9BDB6 East Asian ideograph 23605B 9F8E E9BE8E East Asian ideograph 236061 9F93 E9BE93 East Asian ideograph 236062 9F95 E9BE95 East Asian ideograph 23606B 9FA0 E9BEA0 East Asian ideograph 236071 9FA5 E9BEA5 East Asian ideograph 236072 9FA4 E9BEA4 East Asian ideograph 273032 5E76 E5B9B6 East Asian ideograph 27304C 5E72 E5B9B2 East Asian ideograph 27304D 4E71 E4B9B1 East Asian ideograph 273058 4E9A E4BA9A East Asian ideograph 273138 5E03 E5B883 East Asian ideograph 27313C 5360 E58DA0 East Asian ideograph 27314C 6765 E69DA5 East Asian ideograph 27314F 4ED1 E4BB91 East Asian ideograph 27315D 4FA0 E4BEA0 East Asian ideograph 273169 7CFB E7B3BB East Asian ideograph (duplicate simplified) 27316C 4ED3 E4BB93 East Asian ideograph 273173 4EEC E4BBAC East Asian ideograph 273179 4FE9 E4BFA9 East Asian ideograph 273224 4E2A E4B8AA East Asian ideograph 273226 4F25 E4BCA5 East Asian ideograph 27322D 4F26 E4BCA6 East Asian ideograph 27322E 4EC3 E4BB83 East Asian ideograph (duplicate simplified) 273233 4F1F E4BC9F East Asian ideograph 273235 4FA7 E4BEA7 East Asian ideograph 273238 4FA6 E4BEA6 East Asian ideograph 27323E 5BB6 E5AEB6 East Asian ideograph 273240 5907 E5A487 East Asian ideograph 273241 6770 E69DB0 East Asian ideograph 273243 4F27 E4BCA7 East Asian ideograph 273244 4F1E E4BC9E East Asian ideograph 273246 4F20 E4BCA0 East Asian ideograph 273247 503A E580BA East Asian ideograph 273249 4EC5 E4BB85 East Asian ideograph 27324A 503E E580BE East Asian ideograph 27324C 4F24 E4BCA4 East Asian ideograph 273251 4FA5 E4BEA5 East Asian ideograph 273255 4EC6 E4BB86 East Asian ideograph 273256 4F2A E4BCAA East Asian ideograph 273257 8C61 E8B1A1 East Asian ideograph 273258 4FA8 E4BEA8 East Asian ideograph 273259 4EEA E4BBAA East Asian ideograph 27325A 4EBF E4BABF East Asian ideograph 27325D 4EF7 E4BBB7 East Asian ideograph 27325E 4FAC E4BEAC East Asian ideograph 273260 4FA9 E4BEA9 East Asian ideograph 273261 4FED E4BFAD East Asian ideograph 273262 50A7 E582A7 East Asian ideograph 273263 5C3D E5B0BD East Asian ideograph (duplicate simplified) 273265 4FE6 E4BFA6 East Asian ideograph 273266 4F18 E4BC98 East Asian ideograph 273267 507F E581BF East Asian ideograph 273269 50A8 E582A8 East Asian ideograph 27326A 4FEA E4BFAA East Asian ideograph 27326B 4FE8 E4BFA8 East Asian ideograph 273273 51F6 E587B6 East Asian ideograph 27327A 513F E584BF East Asian ideograph 27327B 5156 E58596 East Asian ideograph 273323 4E24 E4B8A4 East Asian ideograph 273340 51BB E586BB East Asian ideograph 273348 51EF E587AF East Asian ideograph 27336B 514B E5858B East Asian ideograph 27336D 5219 E58899 East Asian ideograph 273370 521A E5889A East Asian ideograph 273376 5240 E58980 East Asian ideograph 273378 521B E5889B East Asian ideograph 27337C 5212 E58892 East Asian ideograph 27337E 5267 E589A7 East Asian ideograph 273421 5251 E58991 East Asian ideograph 273422 5218 E58898 East Asian ideograph 273423 5242 E58982 East Asian ideograph 27342F 52B2 E58AB2 East Asian ideograph 273433 52A1 E58AA1 East Asian ideograph 273434 52A8 E58AA8 East Asian ideograph 273435 52B3 E58AB3 East Asian ideograph 273436 52CB E58B8B East Asian ideograph 273437 80DC E8839C East Asian ideograph 273438 52BF E58ABF East Asian ideograph 27343C 52B1 E58AB1 East Asian ideograph 27343D 529D E58A9D East Asian ideograph 273451 6C47 E6B187 East Asian ideograph 273452 532E E58CAE East Asian ideograph 273455 533A E58CBA East Asian ideograph 27345F 5346 E58D86 East Asian ideograph 273460 534F E58D8F East Asian ideograph 27347A 538C E58E8C East Asian ideograph 27347B 5389 E58E89 East Asian ideograph 27347D 53C2 E58F82 East Asian ideograph 27352B 4E1B E4B89B East Asian ideograph 27363E 5458 E59198 East Asian ideograph 273648 95EE E997AE East Asian ideograph 273649 54D1 E59391 East Asian ideograph 273663 4E27 E4B8A7 East Asian ideograph 273668 5355 E58D95 East Asian ideograph 27366D 5524 E594A4 East Asian ideograph 27366F 4E54 E4B994 East Asian ideograph 273671 54DF E5939F East Asian ideograph 273678 556C E595AC East Asian ideograph 27367A 5417 E59097 East Asian ideograph 273721 545C E5919C East Asian ideograph 273722 545B E5919B East Asian ideograph 273727 5567 E595A7 East Asian ideograph 27372C 53F9 E58FB9 East Asian ideograph 27372E 5455 E59195 East Asian ideograph 273730 5C1D E5B09D East Asian ideograph 273731 55BD E596BD East Asian ideograph 273732 5520 E594A0 East Asian ideograph 273733 5578 E595B8 East Asian ideograph 27373D 5480 E59280 East Asian ideograph 273740 53FD E58FBD East Asian ideograph 273744 5428 E590A8 East Asian ideograph 273745 55B7 E596B7 East Asian ideograph 273746 5F53 E5BD93 East Asian ideograph (duplicate simplified) 273747 54DD E5939D East Asian ideograph 27374B 55F3 E597B3 East Asian ideograph 27374E 549B E5929B East Asian ideograph 273751 5413 E59093 East Asian ideograph 273754 565C E5999C East Asian ideograph 273755 5411 E59091 East Asian ideograph 273756 5499 E59299 East Asian ideograph 27375A 4E25 E4B8A5 East Asian ideograph 27375B 5624 E598A4 East Asian ideograph 27375C 556D E595AD East Asian ideograph 27375D 55EB E597AB East Asian ideograph 27375E 56A3 E59AA3 East Asian ideograph 273761 7F57 E7BD97 East Asian ideograph (duplicate simplified) 273762 5453 E59193 East Asian ideograph 273764 5631 E598B1 East Asian ideograph 27376F 56EF E59BAF East Asian ideograph 273770 56F4 E59BB4 East Asian ideograph 273771 56ED E59BAD East Asian ideograph 273772 5706 E59C86 East Asian ideograph 273773 56E2 E59BA2 East Asian ideograph 273774 56FE E59BBE East Asian ideograph 27383B 6267 E689A7 East Asian ideograph 27383E 57A9 E59EA9 East Asian ideograph 273844 62A5 E68AA5 East Asian ideograph 273845 5C27 E5B0A7 East Asian ideograph 27384A 573A E59CBA East Asian ideograph 27384D 6D82 E6B682 East Asian ideograph 273855 575E E59D9E East Asian ideograph 273856 5757 E59D97 East Asian ideograph 273859 5C18 E5B098 East Asian ideograph 27385A 57AB E59EAB East Asian ideograph 27385B 5811 E5A091 East Asian ideograph 273860 575F E59D9F East Asian ideograph 273861 5760 E59DA0 East Asian ideograph 273862 5815 E5A095 East Asian ideograph 273864 575B E59D9B East Asian ideograph 273867 57A6 E59EA6 East Asian ideograph 273869 538B E58E8B East Asian ideograph 27386B 5739 E59CB9 East Asian ideograph 27386C 5792 E59E92 East Asian ideograph 27386D 5784 E59E84 East Asian ideograph 27386E 574F E59D8F East Asian ideograph 27386F 575C E59D9C East Asian ideograph 273871 575D E59D9D East Asian ideograph 273874 58EE E5A3AE East Asian ideograph 273876 58F6 E5A3B6 East Asian ideograph 273877 5BFF E5AFBF East Asian ideograph 273923 4F19 E4BC99 East Asian ideograph 273924 68A6 E6A2A6 East Asian ideograph 27392E 5939 E5A4B9 East Asian ideograph 27393F 5941 E5A581 East Asian ideograph 273940 593A E5A4BA East Asian ideograph 273941 594B E5A58B East Asian ideograph 273953 5986 E5A686 East Asian ideograph 273A27 5987 E5A687 East Asian ideograph 273A28 5A04 E5A884 East Asian ideograph 273A36 5988 E5A688 East Asian ideograph 273A3B 59AA E5A6AA East Asian ideograph 273A41 5A34 E5A8B4 East Asian ideograph 273A43 5A75 E5A9B5 East Asian ideograph 273A44 5A07 E5A887 East Asian ideograph 273A45 59A9 E5A6A9 East Asian ideograph 273A48 5AD4 E5AB94 East Asian ideograph 273A4A 5A74 E5A9B4 East Asian ideograph 273A4B 5A76 E5A9B6 East Asian ideograph 273A5B 5B59 E5AD99 East Asian ideograph 273A5F 5B5A E5AD9A East Asian ideograph 273A60 5B66 E5ADA6 East Asian ideograph 273A63 5B6A E5ADAA East Asian ideograph 273B2E 5BDD E5AF9D East Asian ideograph 273B31 5B9E E5AE9E East Asian ideograph 273B32 5B81 E5AE81 East Asian ideograph 273B35 5BBD E5AEBD East Asian ideograph 273B36 5BA1 E5AEA1 East Asian ideograph 273B37 5199 E58699 East Asian ideograph 273B38 5BA0 E5AEA0 East Asian ideograph 273B39 5B9D E5AE9D East Asian ideograph 273B3F 4E13 E4B893 East Asian ideograph 273B40 5C06 E5B086 East Asian ideograph 273B42 5BFB E5AFBB East Asian ideograph 273B43 5BF9 E5AFB9 East Asian ideograph 273B44 5BFC E5AFBC East Asian ideograph 273B4C 5C34 E5B0B4 East Asian ideograph 273B60 5C61 E5B1A1 East Asian ideograph 273B61 5C42 E5B182 East Asian ideograph 273B63 5C5E E5B19E East Asian ideograph 273B6E 5188 E58688 East Asian ideograph 273B74 5CE1 E5B3A1 East Asian ideograph 273B79 5C9B E5B29B East Asian ideograph 273C28 5C9A E5B29A East Asian ideograph 273C2A 5D2D E5B4AD East Asian ideograph 273C2B 5C96 E5B296 East Asian ideograph 273C2D 5C7F E5B1BF East Asian ideograph 273C2E 5CB3 E5B2B3 East Asian ideograph 273C31 5CE6 E5B3A6 East Asian ideograph 273C32 5DC5 E5B785 East Asian ideograph 273C33 5CA9 E5B2A9 East Asian ideograph 273C4F 5E05 E5B885 East Asian ideograph 273C51 5E08 E5B888 East Asian ideograph 273C52 5E10 E5B890 East Asian ideograph 273C53 5E26 E5B8A6 East Asian ideograph 273C58 5E27 E5B8A7 East Asian ideograph 273C5C 5E3C E5B8BC East Asian ideograph 273C5E 5E01 E5B881 East Asian ideograph 273C60 5E1C E5B89C East Asian ideograph 273C61 5E2E E5B8AE East Asian ideograph 273C67 5E72 E5B9B2 East Asian ideograph (Version J extension) 273C6B 51E0 E587A0 East Asian ideograph 273C76 5E93 E5BA93 East Asian ideograph 273C77 5750 E59D90 East Asian ideograph 273C7E 5395 E58E95 East Asian ideograph 273D27 5E9F E5BA9F East Asian ideograph 273D2A 5E7F E5B9BF East Asian ideograph 273D2B 5E99 E5BA99 East Asian ideograph 273D2C 5382 E58E82 East Asian ideograph 273D2D 5E9E E5BA9E East Asian ideograph 273D2E 5E90 E5BA90 East Asian ideograph 273D2F 5385 E58E85 East Asian ideograph 273D47 5F20 E5BCA0 East Asian ideograph 273D4B 5F39 E5BCB9 East Asian ideograph 273D4C 5F25 E5BCA5 East Asian ideograph 273D4D 5F2F E5BCAF East Asian ideograph 273D4F 6C47 E6B187 East Asian ideograph (duplicate simplified) 273D65 540E E5908E East Asian ideograph 273D67 5F84 E5BE84 East Asian ideograph 273D6C 4ECE E4BB8E East Asian ideograph 273D6F 590D E5A48D East Asian ideograph 273D74 5F7B E5BDBB East Asian ideograph 273D76 5F81 E5BE81 East Asian ideograph 273E57 5FF0 E5BFB0 East Asian ideograph 273E5C 95F7 E997B7 East Asian ideograph 273E5E 6005 E68085 East Asian ideograph 273E61 6076 E681B6 East Asian ideograph 273E6C 60EC E683AC East Asian ideograph 273E70 607B E681BB East Asian ideograph 273E77 7231 E788B1 East Asian ideograph 273E7E 607C E681BC East Asian ideograph 273F28 6001 E68081 East Asian ideograph 273F29 5FFE E5BFBE East Asian ideograph 273F2B 6006 E68086 East Asian ideograph 273F2E 5E86 E5BA86 East Asian ideograph 273F31 60ED E683AD East Asian ideograph 273F33 5FE7 E5BFA7 East Asian ideograph 273F36 8651 E89991 East Asian ideograph 273F38 60E8 E683A8 East Asian ideograph 273F39 60EF E683AF East Asian ideograph 273F3A 6078 E681B8 East Asian ideograph 273F3B 6002 E68082 East Asian ideograph 273F3C 6B32 E6ACB2 East Asian ideograph 273F3E 5BAA E5AEAA East Asian ideograph 273F3F 51ED E587AD East Asian ideograph 273F41 60AF E682AF East Asian ideograph 273F42 6124 E684A4 East Asian ideograph 273F44 60EE E683AE East Asian ideograph 273F45 6187 E68687 East Asian ideograph 273F47 60EB E683AB East Asian ideograph 273F48 5FC6 E5BF86 East Asian ideograph 273F4A 5E94 E5BA94 East Asian ideograph 273F4B 601C E6809C East Asian ideograph 273F4E 6073 E681B3 East Asian ideograph 273F54 6000 E68080 East Asian ideograph 273F55 61D2 E68792 East Asian ideograph 273F56 60AC E682AC East Asian ideograph 273F58 5FCF E5BF8F East Asian ideograph 273F59 6151 E68591 East Asian ideograph 273F5B 60E7 E683A7 East Asian ideograph 273F5C 604B E6818B East Asian ideograph 273F6E 6218 E68898 East Asian ideograph 273F6F 620F E6888F East Asian ideograph 27406C 631F E68C9F East Asian ideograph 27407B 5377 E58DB7 East Asian ideograph 27407D 626B E689AB East Asian ideograph 27407E 626A E689AA East Asian ideograph 274123 6302 E68C82 East Asian ideograph 274136 62A1 E68AA1 East Asian ideograph 27413C 62E3 E68BA3 East Asian ideograph 27413F 626C E689AC East Asian ideograph 274142 6325 E68CA5 East Asian ideograph 27414F 635F E68D9F East Asian ideograph 274153 6363 E68DA3 East Asian ideograph 274155 62A2 E68AA2 East Asian ideograph 27415A 5C4F E5B18F East Asian ideograph 27415B 631A E68C9A East Asian ideograph 27415F 6402 E69082 East Asian ideograph 274160 63B4 E68EB4 East Asian ideograph 274165 635E E68D9E East Asian ideograph 274166 62E8 E68BA8 East Asian ideograph 274168 6320 E68CA0 East Asian ideograph 27416E 6251 E68991 East Asian ideograph 274171 629A E68A9A East Asian ideograph 274174 62E5 E68BA5 East Asian ideograph 274176 51FB E587BB East Asian ideograph 274177 631E E68C9E East Asian ideograph 27417A 6321 E68CA1 East Asian ideograph 27417C 636E E68DAE East Asian ideograph 27417D 63B3 E68EB3 East Asian ideograph 27417E 62E9 E68BA9 East Asian ideograph 274222 62C5 E68B85 East Asian ideograph 274224 6361 E68DA1 East Asian ideograph 274225 6324 E68CA4 East Asian ideograph 274226 62E7 E68BA7 East Asian ideograph 274228 62DF E68B9F East Asian ideograph 274229 6401 E69081 East Asian ideograph 27422A 6269 E689A9 East Asian ideograph 27422B 63B7 E68EB7 East Asian ideograph 27422C 64B5 E692B5 East Asian ideograph 27422E 6270 E689B0 East Asian ideograph 27422F 64DE E6939E East Asian ideograph 274230 6446 E69186 East Asian ideograph 274231 62E2 E68BA2 East Asian ideograph 274233 62E6 E68BA6 East Asian ideograph 274234 6400 E69080 East Asian ideograph 274235 6444 E69184 East Asian ideograph 274237 631B E68C9B East Asian ideograph 274238 644A E6918A East Asian ideograph 27423A 6405 E69085 East Asian ideograph 27423B 63FD E68FBD East Asian ideograph 274247 8D25 E8B4A5 East Asian ideograph 27424F 542F E590AF East Asian ideograph 274252 654C E6958C East Asian ideograph 274254 6570 E695B0 East Asian ideograph 274256 655B E6959B East Asian ideograph 274257 6BD9 E6AF99 East Asian ideograph 274263 65A9 E696A9 East Asian ideograph 274266 65AD E696AD East Asian ideograph 27432D 65F6 E697B6 East Asian ideograph 274332 663C E698BC East Asian ideograph 274340 6656 E69996 East Asian ideograph 274341 6655 E69995 East Asian ideograph 274343 7545 E79585 East Asian ideograph 274344 6682 E69A82 East Asian ideograph 274348 6653 E69993 East Asian ideograph 274349 5386 E58E86 East Asian ideograph (duplicate simplified) 27434B 66A7 E69AA7 East Asian ideograph 27434D 65F7 E697B7 East Asian ideograph 274355 4E66 E4B9A6 East Asian ideograph 27435A 4F1A E4BC9A East Asian ideograph 274366 80E7 E883A7 East Asian ideograph 274426 4E1C E4B89C East Asian ideograph 274463 6761 E69DA1 East Asian ideograph 274468 67AD E69EAD East Asian ideograph 274469 6800 E6A080 East Asian ideograph 27446D 5F03 E5BC83 East Asian ideograph 27446E 6816 E6A096 East Asian ideograph 274471 680B E6A08B East Asian ideograph 274476 6808 E6A088 East Asian ideograph 27447A 67A3 E69EA3 East Asian ideograph 27447C 832D E88CAD East Asian ideograph 274526 6781 E69E81 East Asian ideograph 27452A 6768 E69DA8 East Asian ideograph 27452B 6862 E6A1A2 East Asian ideograph 27452D 4E1A E4B89A East Asian ideograph 27452F 67AB E69EAB East Asian ideograph 274537 8363 E88DA3 East Asian ideograph 274539 6784 E69E84 East Asian ideograph 274540 67AA E69EAA East Asian ideograph 274544 6837 E6A0B7 East Asian ideograph 274546 6869 E6A1A9 East Asian ideograph 274547 6807 E6A087 East Asian ideograph 274549 67A2 E69EA2 East Asian ideograph 27454A 697C E6A5BC East Asian ideograph 27454C 6868 E6A1A8 East Asian ideograph 27454E 4E50 E4B990 East Asian ideograph 27454F 679E E69E9E East Asian ideograph 274553 692D E6A4AD East Asian ideograph 274555 6811 E6A091 East Asian ideograph 274557 6866 E6A1A6 East Asian ideograph 274558 6734 E69CB4 East Asian ideograph 27455B 6865 E6A1A5 East Asian ideograph 27455D 673A E69CBA East Asian ideograph 27455F 6863 E6A1A3 East Asian ideograph 274561 68C0 E6A380 East Asian ideograph 274562 6867 E6A1A7 East Asian ideograph 274563 67E0 E69FA0 East Asian ideograph 274564 69DF E6A79F East Asian ideograph 274565 67DC E69F9C East Asian ideograph 274566 69DB E6A79B East Asian ideograph 27456A 6988 E6A688 East Asian ideograph 27456B 691F E6A49F East Asian ideograph 27456C 6809 E6A089 East Asian ideograph 27456D 6A79 E6A9B9 East Asian ideograph 27456E 680F E6A08F East Asian ideograph 27456F 6A31 E6A8B1 East Asian ideograph 274570 6743 E69D83 East Asian ideograph 274571 6984 E6A684 East Asian ideograph 274578 94A6 E992A6 East Asian ideograph 27457A 6B20 E6ACA0 East Asian ideograph (duplicate simplified) 27457C 6B27 E6ACA7 East Asian ideograph 27457E 6B24 E6ACA4 East Asian ideograph 274621 6B22 E6ACA2 East Asian ideograph 274629 5C81 E5B281 East Asian ideograph 27462A 5386 E58E86 East Asian ideograph 27462B 5F52 E5BD92 East Asian ideograph 274633 6B8B E6AE8B East Asian ideograph 274635 6B87 E6AE87 East Asian ideograph 274636 6B93 E6AE93 East Asian ideograph 274637 6BA1 E6AEA1 East Asian ideograph 274638 6B7C E6ADBC East Asian ideograph 27463B 6740 E69D80 East Asian ideograph 27463C 58F3 E5A3B3 East Asian ideograph 274640 6BB4 E6AEB4 East Asian ideograph 274655 6C14 E6B094 East Asian ideograph 274658 6C22 E6B0A2 East Asian ideograph 27474E 6CFE E6B3BE East Asian ideograph 274759 6CEA E6B3AA East Asian ideograph 274768 6D45 E6B585 East Asian ideograph 274774 6E0A E6B88A East Asian ideograph 274777 6CA6 E6B2A6 East Asian ideograph 27477D 6D8C E6B68C East Asian ideograph 27482D 6C64 E6B1A4 East Asian ideograph 274830 6D4B E6B58B East Asian ideograph 274831 6DA1 E6B6A1 East Asian ideograph 274833 6D51 E6B591 East Asian ideograph 27483D 6C9F E6B29F East Asian ideograph 274841 6C85 E6B285 East Asian ideograph 274842 706D E781AD East Asian ideograph 274844 6E7F E6B9BF East Asian ideograph 274848 6CA7 E6B2A7 East Asian ideograph 27484B 51C6 E58786 East Asian ideograph 27484F 6CAA E6B2AA East Asian ideograph 274854 6E0D E6B88D East Asian ideograph 274855 6DA8 E6B6A8 East Asian ideograph 274857 6C49 E6B189 East Asian ideograph 274858 6EE1 E6BBA1 East Asian ideograph 274859 6D9F E6B69F East Asian ideograph 27485A 6E10 E6B890 East Asian ideograph 27485F 6EDE E6BB9E East Asian ideograph 274863 6D46 E6B586 East Asian ideograph 274864 6E17 E6B897 East Asian ideograph 274865 6E14 E6B894 East Asian ideograph 27486C 6CFC E6B3BC East Asian ideograph 27486D 6DA6 E6B6A6 East Asian ideograph 27486E 6DA7 E6B6A7 East Asian ideograph 27486F 6D01 E6B481 East Asian ideograph 274871 6D47 E6B587 East Asian ideograph 274878 6E83 E6BA83 East Asian ideograph 27487B 6DC0 E6B780 East Asian ideograph 27487C 6D53 E6B593 East Asian ideograph 274921 6CFD E6B3BD East Asian ideograph 274922 6D4A E6B58A East Asian ideograph 274926 6D4E E6B58E East Asian ideograph 274927 6CDE E6B39E East Asian ideograph 274928 6EE8 E6BBA8 East Asian ideograph 27492B 6EE5 E6BBA5 East Asian ideograph 27492D 6D9B E6B69B East Asian ideograph 27492E 6DA9 E6B6A9 East Asian ideograph 274931 6C88 E6B288 East Asian ideograph 274932 6CFB E6B3BB East Asian ideograph 274933 6E0E E6B88E East Asian ideograph 274934 6E85 E6BA85 East Asian ideograph 274936 6EE4 E6BBA4 East Asian ideograph 274937 6D4F E6B58F East Asian ideograph 27493A 6FD1 E6BF91 East Asian ideograph 27493B 6CA5 E6B2A5 East Asian ideograph 27493C 6FD2 E6BF92 East Asian ideograph 27493D 6F47 E6BD87 East Asian ideograph 27493F 6F9C E6BE9C East Asian ideograph 274941 6D12 E6B492 East Asian ideograph 274942 6EE9 E6BBA9 East Asian ideograph 274943 6E7E E6B9BE East Asian ideograph 274944 6EE6 E6BBA6 East Asian ideograph 27494A 707E E781BE East Asian ideograph 274951 4E3A E4B8BA East Asian ideograph 27495D 4E4C E4B98C East Asian ideograph 274966 65E0 E697A0 East Asian ideograph 27496A 70BC E782BC East Asian ideograph 27496D 70E6 E783A6 East Asian ideograph 27496F 7080 E78280 East Asian ideograph 274975 6247 E68987 East Asian ideograph 27497D 70ED E783AD East Asian ideograph 27497E 70EB E783AB East Asian ideograph 274A21 70BD E782BD East Asian ideograph 274A22 7096 E78296 East Asian ideograph 274A24 706F E781AF East Asian ideograph 274A25 7116 E78496 East Asian ideograph 274A26 70E7 E783A7 East Asian ideograph 274A2E 8425 E890A5 East Asian ideograph 274A30 70DB E7839B East Asian ideograph 274A31 707F E781BF East Asian ideograph 274A33 70E9 E783A9 East Asian ideograph 274A36 70C1 E78381 East Asian ideograph 274A37 7089 E78289 East Asian ideograph 274A38 70C2 E78382 East Asian ideograph 274A42 7237 E788B7 East Asian ideograph 274A45 5C14 E5B094 East Asian ideograph 274A46 5899 E5A299 East Asian ideograph 274A4C 724D E7898D East Asian ideograph 274A53 5B83 E5AE83 East Asian ideograph 274A5A 7275 E789B5 East Asian ideograph 274A5E 8366 E88DA6 East Asian ideograph 274A61 728A E78A8A East Asian ideograph 274A62 727A E789BA East Asian ideograph 274A68 72B6 E78AB6 East Asian ideograph 274A70 72ED E78BAD East Asian ideograph 274A72 72C8 E78B88 East Asian ideograph 274A79 72B9 E78AB9 East Asian ideograph 274A7E 72F1 E78BB1 East Asian ideograph 274B22 72EF E78BAF East Asian ideograph 274B23 72EE E78BAE East Asian ideograph 274B27 72EC E78BAC East Asian ideograph 274B28 72DE E78B9E East Asian ideograph 274B29 83B7 E88EB7 East Asian ideograph 274B2A 72B7 E78AB7 East Asian ideograph 274B2B 517D E585BD East Asian ideograph 274B2C 730E E78C8E East Asian ideograph 274B2D 736D E78DAD East Asian ideograph 274B2E 732E E78CAE East Asian ideograph 274B2F 7321 E78CA1 East Asian ideograph 274B47 73B0 E78EB0 East Asian ideograph 274B57 73F2 E78FB2 East Asian ideograph 274B5E 739B E78E9B East Asian ideograph 274B5F 7410 E79090 East Asian ideograph 274B64 7391 E78E91 East Asian ideograph 274B67 73AF E78EAF East Asian ideograph 274B68 7477 E791B7 East Asian ideograph 274B69 73BA E78EBA East Asian ideograph 274B6B 73D1 E78F91 East Asian ideograph 274B74 74EF E793AF East Asian ideograph 274B7A 4EA7 E4BAA7 East Asian ideograph 274C2D 4EA9 E4BAA9 East Asian ideograph 274C31 7544 E79584 East Asian ideograph 274C33 6BD5 E6AF95 East Asian ideograph 274C34 5F02 E5BC82 East Asian ideograph 274C36 753B E794BB East Asian ideograph 274C39 5F53 E5BD93 East Asian ideograph 274C3B 7574 E795B4 East Asian ideograph 274C3C 8FED E8BFAD East Asian ideograph 274C56 75C9 E79789 East Asian ideograph 274C60 75A1 E796A1 East Asian ideograph 274C61 759F E7969F East Asian ideograph 274C62 75EA E797AA East Asian ideograph 274C63 75AF E796AF East Asian ideograph 274C6A 75AE E796AE East Asian ideograph 274C6D 75E8 E797A8 East Asian ideograph 274C6E 7597 E79697 East Asian ideograph 274C71 75A0 E796A0 East Asian ideograph 274C73 75D2 E79792 East Asian ideograph 274C75 765E E7999E East Asian ideograph 274C76 763E E798BE East Asian ideograph 274C77 7663 E799A3 East Asian ideograph 274C78 762B E798AB East Asian ideograph 274C79 766B E799AB East Asian ideograph 274C7B 53D1 E58F91 East Asian ideograph 274D29 7691 E79A91 East Asian ideograph 274D2D 76B1 E79AB1 East Asian ideograph 274D3A 76CF E79B8F East Asian ideograph 274D3C 5C3D E5B0BD East Asian ideograph 274D3D 76D1 E79B91 East Asian ideograph 274D3E 76D8 E79B98 East Asian ideograph 274D3F 5362 E58DA2 East Asian ideograph 274D56 4F17 E4BC97 East Asian ideograph 274D57 56F0 E59BB0 East Asian ideograph 274D5D 7750 E79D90 East Asian ideograph 274D73 4E86 E4BA86 East Asian ideograph 274D7C 77A9 E79EA9 East Asian ideograph 274E27 77EB E79FAB East Asian ideograph 274E3B 781A E7A09A East Asian ideograph 274E3E 7815 E7A095 East Asian ideograph 274E45 7855 E7A195 East Asian ideograph 274E49 786E E7A1AE East Asian ideograph 274E4C 7801 E7A081 East Asian ideograph 274E53 7816 E7A096 East Asian ideograph 274E58 77F6 E79FB6 East Asian ideograph 274E59 7840 E7A180 East Asian ideograph 274E5A 788D E7A28D East Asian ideograph 274E5B 77FF E79FBF East Asian ideograph 274E5C 77FE E79FBE East Asian ideograph 274E5D 783A E7A0BA East Asian ideograph 274E5E 783E E7A0BE East Asian ideograph 274E6F 53EA E58FAA East Asian ideograph (duplicate simplified) 274E77 7978 E7A5B8 East Asian ideograph 274E78 796F E7A5AF East Asian ideograph 274E7B 7985 E7A685 East Asian ideograph 274E7C 793C E7A4BC East Asian ideograph 274E7D 7977 E7A5B7 East Asian ideograph 274F22 4E07 E4B887 East Asian ideograph 274F25 53B6 E58EB6 East Asian ideograph 274F36 5E0C E5B88C East Asian ideograph 274F3C 79F0 E7A7B0 East Asian ideograph 274F3D 79CD E7A78D East Asian ideograph 274F40 8C37 E8B0B7 East Asian ideograph 274F44 79EF E7A7AF East Asian ideograph 274F46 7A23 E7A8A3 East Asian ideograph 274F49 7A51 E7A991 East Asian ideograph 274F4A 79FD E7A7BD East Asian ideograph 274F4B 83B7 E88EB7 East Asian ideograph (duplicate simplified) 274F4C 7A33 E7A8B3 East Asian ideograph 274F5C 6D3C E6B4BC East Asian ideograph 274F5D 7A9D E7AA9D East Asian ideograph 274F5F 7A77 E7A9B7 East Asian ideograph 274F60 7AA5 E7AAA5 East Asian ideograph 274F61 7A8D E7AA8D East Asian ideograph 274F62 7A9C E7AA9C East Asian ideograph 274F63 7AA6 E7AAA6 East Asian ideograph 274F64 7A83 E7AA83 East Asian ideograph 274F6B 7ADE E7AB9E East Asian ideograph 274F70 5DF4 E5B7B4 East Asian ideograph (duplicate simplified) 274F79 7B14 E7AC94 East Asian ideograph 275021 7B0B E7AC8B East Asian ideograph 275023 8345 E88D85 East Asian ideograph 27502A 94B3 E992B3 East Asian ideograph 27502B 7B3A E7ACBA East Asian ideograph 275030 8303 E88C83 East Asian ideograph 275033 8282 E88A82 East Asian ideograph 275038 7BAC E7AEAC East Asian ideograph 275039 7B03 E7AC83 East Asian ideograph 27503A 7B51 E7AD91 East Asian ideograph 27503C 7B5B E7AD9B East Asian ideograph 27503E 7BD3 E7AF93 East Asian ideograph 275041 7B80 E7AE80 East Asian ideograph 275042 7BAB E7AEAB East Asian ideograph 275045 7BAA E7AEAA East Asian ideograph 275046 7BD1 E7AF91 East Asian ideograph 275048 5E18 E5B898 East Asian ideograph 27504B 7B7E E7ADBE East Asian ideograph 27504C 7BEE E7AFAE East Asian ideograph 27504D 7B79 E7ADB9 East Asian ideograph 275050 7B3C E7ACBC East Asian ideograph 275051 7C41 E7B181 East Asian ideograph 275052 7B7E E7ADBE East Asian ideograph (duplicate simplified) 275053 7BF1 E7AFB1 East Asian ideograph 275054 7BA9 E7AEA9 East Asian ideograph 275055 5401 E59081 East Asian ideograph 275060 7C8B E7B28B East Asian ideograph 275062 80E1 E883A1 East Asian ideograph (duplicate simplified) 275068 7CAA E7B2AA East Asian ideograph 27506B 7CAE E7B2AE East Asian ideograph 27506F 7EA0 E7BAA0 East Asian ideograph 275070 7EAA E7BAAA East Asian ideograph 275071 7EA3 E7BAA3 East Asian ideograph 275072 7EA2 E7BAA2 East Asian ideograph 275073 7EAB E7BAAB East Asian ideograph 275074 7EA6 E7BAA6 East Asian ideograph 275075 7EA5 E7BAA5 East Asian ideograph 275076 7EBA E7BABA East Asian ideograph 275077 7EB9 E7BAB9 East Asian ideograph 27507A 7EAD E7BAAD East Asian ideograph 27507C 7EB0 E7BAB0 East Asian ideograph 27507D 7EAF E7BAAF East Asian ideograph 27507E 7EBD E7BABD East Asian ideograph 275121 7EB1 E7BAB1 East Asian ideograph 275122 7EB3 E7BAB3 East Asian ideograph 275123 7EA7 E7BAA7 East Asian ideograph 275124 7EB8 E7BAB8 East Asian ideograph 275125 7EB7 E7BAB7 East Asian ideograph 275126 7ECA E7BB8A East Asian ideograph 275128 7ECB E7BB8B East Asian ideograph 275129 624E E6898E East Asian ideograph 27512A 7ECD E7BB8D East Asian ideograph 27512B 7EC4 E7BB84 East Asian ideograph 27512C 7EC6 E7BB86 East Asian ideograph 27512D 7EC5 E7BB85 East Asian ideograph 27512F 7ECC E7BB8C East Asian ideograph 275130 7EC8 E7BB88 East Asian ideograph 275131 7EDF E7BB9F East Asian ideograph 275132 7EDE E7BB9E East Asian ideograph 275133 7ED2 E7BB92 East Asian ideograph 275134 7ED3 E7BB93 East Asian ideograph 275136 7EDA E7BB9A East Asian ideograph 275137 7EDD E7BB9D East Asian ideograph 275138 7EDC E7BB9C East Asian ideograph 275139 7ED9 E7BB99 East Asian ideograph 27513B 4E1D E4B89D East Asian ideograph 27513C 7ECF E7BB8F East Asian ideograph 27513D 6346 E68D86 East Asian ideograph 27513E 7EE2 E7BBA2 East Asian ideograph 27513F 7EE5 E7BBA5 East Asian ideograph 275140 7ED1 E7BB91 East Asian ideograph 275141 7EFC E7BBBC East Asian ideograph 275142 7EFD E7BBBD East Asian ideograph 275143 7EFE E7BBBE East Asian ideograph 275144 7D27 E7B4A7 East Asian ideograph 275145 7EEB E7BBAB East Asian ideograph 275146 7F00 E7BC80 East Asian ideograph 275148 7F51 E7BD91 East Asian ideograph 275149 7EB2 E7BAB2 East Asian ideograph 27514A 7EF0 E7BBB0 East Asian ideograph 27514C 7EFF E7BBBF East Asian ideograph 27514D 7EF8 E7BBB8 East Asian ideograph 27514E 7EF4 E7BBB4 East Asian ideograph 27514F 7EF5 E7BBB5 East Asian ideograph 275150 7EB6 E7BAB6 East Asian ideograph 275151 7F01 E7BC81 East Asian ideograph 275152 7F14 E7BC94 East Asian ideograph 275153 7EAC E7BAAC East Asian ideograph 275154 7EC3 E7BB83 East Asian ideograph 275155 7EEA E7BBAA East Asian ideograph 275156 7F04 E7BC84 East Asian ideograph 275157 7F05 E7BC85 East Asian ideograph 275158 7F09 E7BC89 East Asian ideograph 275159 7F13 E7BC93 East Asian ideograph 27515A 7F18 E7BC98 East Asian ideograph 27515B 7F16 E7BC96 East Asian ideograph 27515C 7EBF E7BABF East Asian ideograph 27515D 7F0D E7BC8D East Asian ideograph 27515E 7F0E E7BC8E East Asian ideograph 27515F 7F23 E7BCA3 East Asian ideograph 275160 7F22 E7BCA2 East Asian ideograph 275161 8426 E890A6 East Asian ideograph 275162 7F1A E7BC9A East Asian ideograph 275163 81F4 E887B4 East Asian ideograph 275164 53BF E58EBF East Asian ideograph (variant of EACC 455164) 275165 7F29 E7BCA9 East Asian ideograph 275166 7EE9 E7BBA9 East Asian ideograph 275167 7F2A E7BCAA East Asian ideograph 275168 7F15 E7BC95 East Asian ideograph 275169 7F27 E7BCA7 East Asian ideograph 27516C 7F1D E7BC9D East Asian ideograph 27516D 603B E680BB East Asian ideograph 27516E 7EB5 E7BAB5 East Asian ideograph 27516F 7F2B E7BCAB East Asian ideograph 275170 7F2E E7BCAE East Asian ideograph 275171 7EC7 E7BB87 East Asian ideograph 275172 7EE3 E7BBA3 East Asian ideograph 275173 7ED5 E7BB95 East Asian ideograph 275174 7F2D E7BCAD East Asian ideograph 275175 7CFB E7B3BB East Asian ideograph (duplicate simplified) 275176 7EF3 E7BBB3 East Asian ideograph 275177 8327 E88CA7 East Asian ideograph 275178 7ECE E7BB8E East Asian ideograph 275179 7ED8 E7BB98 East Asian ideograph 27517A 8FAB E8BEAB East Asian ideograph 27517B 7F24 E7BCA4 East Asian ideograph 27517D 7EE7 E7BBA7 East Asian ideograph 27517E 7F20 E7BCA0 East Asian ideograph 275221 7EED E7BBAD East Asian ideograph 275222 7F28 E7BCA8 East Asian ideograph 275223 7EA4 E7BAA4 East Asian ideograph 275224 7F06 E7BC86 East Asian ideograph 275233 7F5A E7BD9A East Asian ideograph 275234 9A82 E9AA82 East Asian ideograph 275235 7F62 E7BDA2 East Asian ideograph 275237 7F57 E7BD97 East Asian ideograph 275238 7F81 E7BE81 East Asian ideograph 275242 4E49 E4B989 East Asian ideograph 27524D 4E60 E4B9A0 East Asian ideograph 275251 7FC6 E7BF86 East Asian ideograph 275258 7FD8 E7BF98 East Asian ideograph 27526F 5723 E59CA3 East Asian ideograph 275271 95FB E997BB East Asian ideograph 275274 58F0 E5A3B0 East Asian ideograph 275275 8038 E880B8 East Asian ideograph 275276 806A E881AA East Asian ideograph 275277 8054 E88194 East Asian ideograph 275278 804C E8818C East Asian ideograph 275279 8042 E88182 East Asian ideograph 27527A 804B E8818B East Asian ideograph 27527B 542C E590AC East Asian ideograph 275321 8083 E88283 East Asian ideograph 275344 80C1 E88381 East Asian ideograph 27534A 8090 E88290 East Asian ideograph 27534D 8109 E88489 East Asian ideograph 275358 80BE E882BE East Asian ideograph 275359 80C0 E88380 East Asian ideograph 27535E 80A0 E882A0 East Asian ideograph 275362 80BF E882BF East Asian ideograph 275365 8111 E88491 East Asian ideograph 27536C 80F6 E883B6 East Asian ideograph 27536E 80A4 E882A4 East Asian ideograph 275371 817B E885BB East Asian ideograph 275378 8113 E88493 East Asian ideograph 275379 80C6 E88386 East Asian ideograph 27537A 8138 E884B8 East Asian ideograph 27537B 810D E8848D East Asian ideograph 27537C 8110 E88490 East Asian ideograph 27537D 8191 E88691 East Asian ideograph 27537E 814A E8858A East Asian ideograph 275421 80EA E883AA East Asian ideograph 275422 810F E8848F East Asian ideograph (duplicate simplified) 275425 4E34 E4B8B4 East Asian ideograph 27542B 53F0 E58FB0 East Asian ideograph 275432 4E0E E4B88E East Asian ideograph 275433 5174 E585B4 East Asian ideograph 275434 4E3E E4B8BE East Asian ideograph 275435 65E7 E697A7 East Asian ideograph 27544A 8231 E888B1 East Asian ideograph 27544B 8230 E888B0 East Asian ideograph 27544E 8270 E889B0 East Asian ideograph 275458 5DF4 E5B7B4 East Asian ideograph (duplicate simplified) 27545C 520D E5888D East Asian ideograph 275528 835A E88D9A East Asian ideograph 275529 830E E88C8E East Asian ideograph 27552A 82CB E88B8B East Asian ideograph 27552D 5E84 E5BA84 East Asian ideograph 27553C 534E E58D8E East Asian ideograph 275541 83B1 E88EB1 East Asian ideograph 27554D 82C7 E88B87 East Asian ideograph 27554F 53F6 E58FB6 East Asian ideograph 275551 80E1 E883A1 East Asian ideograph (duplicate simplified) 275553 8364 E88DA4 East Asian ideograph 275555 83B4 E88EB4 East Asian ideograph 27555D 5E2D E5B8AD East Asian ideograph 275563 836A E88DAA East Asian ideograph 275564 82CE E88B8E East Asian ideograph 275567 82CD E88B8D East Asian ideograph 275568 8298 E88A98 East Asian ideograph 27556C 83B2 E88EB2 East Asian ideograph 27556E 836B E88DAB East Asian ideograph 275571 848B E8928B East Asian ideograph 275573 535C E58D9C East Asian ideograph 275576 8361 E88DA1 East Asian ideograph 27557C 829C E88A9C East Asian ideograph 275622 8427 E890A7 East Asian ideograph 275624 59DC E5A79C East Asian ideograph 275626 8537 E894B7 East Asian ideograph 275629 84DD E8939D East Asian ideograph 27562A 8428 E890A8 East Asian ideograph 27562E 501F E5809F East Asian ideograph 275631 827A E889BA East Asian ideograph 275632 85AE E896AE East Asian ideograph 275635 836F E88DAF East Asian ideograph 275637 853C E894BC East Asian ideograph 275639 853A E894BA East Asian ideograph 27563A 82A6 E88AA6 East Asian ideograph 27563B 82F9 E88BB9 East Asian ideograph 27563C 82CF E88B8F East Asian ideograph 27563D 8574 E895B4 East Asian ideograph 27563E 5170 E585B0 East Asian ideograph 275640 85D3 E89793 East Asian ideograph 275642 841D E8909D East Asian ideograph 275644 4E47 E4B987 East Asian ideograph 275647 5904 E5A484 East Asian ideograph 275648 864F E8998F East Asian ideograph 27564A 53F7 E58FB7 East Asian ideograph 27564C 4E8F E4BA8F East Asian ideograph 27565A 65E6 E697A6 East Asian ideograph 275676 8680 E89A80 East Asian ideograph 275679 80E1 E883A1 East Asian ideograph (duplicate simplified) 27567A 867E E899BE East Asian ideograph 275724 8424 E890A4 East Asian ideograph 275725 8682 E89A82 East Asian ideograph 27572C 877C E89DBC East Asian ideograph 275732 86F2 E89BB2 East Asian ideograph 275733 866B E899AB East Asian ideograph 275734 8749 E89D89 East Asian ideograph 275735 8681 E89A81 East Asian ideograph 275736 8747 E89D87 East Asian ideograph 27573C 86CE E89B8E East Asian ideograph 27573E 8721 E89CA1 East Asian ideograph 27573F 86CA E89B8A East Asian ideograph 275741 8695 E89A95 East Asian ideograph 275742 86EE E89BAE East Asian ideograph 275746 672E E69CAE East Asian ideograph 275747 4E8D E4BA8D East Asian ideograph 275749 536B E58DAB East Asian ideograph 27574A 51B2 E586B2 East Asian ideograph (duplicate simplified) 275762 8865 E8A1A5 East Asian ideograph 275763 91CC E9878C East Asian ideograph 275765 88C5 E8A385 East Asian ideograph 27576C 5236 E588B6 East Asian ideograph 275771 8934 E8A4B4 East Asian ideograph 275773 88E4 E8A3A4 East Asian ideograph 275777 4EB5 E4BAB5 East Asian ideograph 275779 891B E8A49B East Asian ideograph 27577C 88C6 E8A386 East Asian ideograph 27577D 8884 E8A284 East Asian ideograph 275821 889C E8A29C East Asian ideograph 275822 886C E8A1AC East Asian ideograph 275823 88AD E8A2AD East Asian ideograph 275828 89C1 E8A781 East Asian ideograph 275829 89C4 E8A784 East Asian ideograph 27582A 89C5 E8A785 East Asian ideograph 27582B 89C6 E8A786 East Asian ideograph 27582C 4EB2 E4BAB2 East Asian ideograph 27582D 89CE E8A78E East Asian ideograph 27582E 89CA E8A78A East Asian ideograph 27582F 89D0 E8A790 East Asian ideograph 275830 89C9 E8A789 East Asian ideograph 275831 89C8 E8A788 East Asian ideograph 275832 89C2 E8A782 East Asian ideograph 275835 89DE E8A79E East Asian ideograph 275838 8BA1 E8AEA1 East Asian ideograph 275839 8BA2 E8AEA2 East Asian ideograph 27583A 8BA3 E8AEA3 East Asian ideograph 27583B 8BA6 E8AEA6 East Asian ideograph 27583C 8BB0 E8AEB0 East Asian ideograph 27583D 8BA8 E8AEA8 East Asian ideograph 27583E 8BA7 E8AEA7 East Asian ideograph 27583F 8BAA E8AEAA East Asian ideograph 275840 8BAF E8AEAF East Asian ideograph 275841 8BAB E8AEAB East Asian ideograph 275843 8BAD E8AEAD East Asian ideograph 275844 8BBF E8AEBF East Asian ideograph 275845 8BC0 E8AF80 East Asian ideograph 275846 8BB6 E8AEB6 East Asian ideograph 275847 8BB7 E8AEB7 East Asian ideograph 275848 8BB8 E8AEB8 East Asian ideograph 275849 8BBE E8AEBE East Asian ideograph 27584A 8BB9 E8AEB9 East Asian ideograph 27584B 8BBC E8AEBC East Asian ideograph 27584C 6CE8 E6B3A8 East Asian ideograph 27584E 8BC4 E8AF84 East Asian ideograph 27584F 8BCD E8AF8D East Asian ideograph 275851 8BC2 E8AF82 East Asian ideograph 275852 8BCF E8AF8F East Asian ideograph 275853 8BC5 E8AF85 East Asian ideograph 275854 8BC8 E8AF88 East Asian ideograph 275855 8BCB E8AF8B East Asian ideograph 275856 8BC9 E8AF89 East Asian ideograph 275857 8BCA E8AF8A East Asian ideograph 275858 8BE7 E8AFA7 East Asian ideograph 275859 8BE5 E8AFA5 East Asian ideograph 27585A 8BE6 E8AFA6 East Asian ideograph 27585B 8BD5 E8AF95 East Asian ideograph 27585C 8BD7 E8AF97 East Asian ideograph 27585D 8BD8 E8AF98 East Asian ideograph 27585E 8BE3 E8AFA3 East Asian ideograph 27585F 8BD9 E8AF99 East Asian ideograph 275860 8BDA E8AF9A East Asian ideograph 275861 5938 E5A4B8 East Asian ideograph 275862 8BDB E8AF9B East Asian ideograph 275863 8BE1 E8AFA1 East Asian ideograph 275865 8BE2 E8AFA2 East Asian ideograph 275866 8BDD E8AF9D East Asian ideograph 275867 8BE0 E8AFA0 East Asian ideograph 275868 8BDF E8AF9F East Asian ideograph 275869 8BF4 E8AFB4 East Asian ideograph 27586A 8BF5 E8AFB5 East Asian ideograph 27586B 8BEB E8AFAB East Asian ideograph 27586C 8BED E8AFAD East Asian ideograph 27586D 5FD7 E5BF97 East Asian ideograph 27586F 8BEC E8AFAC East Asian ideograph 275870 8BA4 E8AEA4 East Asian ideograph 275871 8BEF E8AFAF East Asian ideograph 275872 8BF2 E8AFB2 East Asian ideograph 275873 8BF0 E8AFB0 East Asian ideograph 275874 8BF1 E8AFB1 East Asian ideograph 275875 8BF3 E8AFB3 East Asian ideograph 275876 8C0A E8B08A East Asian ideograph 275877 8C06 E8B086 East Asian ideograph 275878 8C05 E8B085 East Asian ideograph 275879 8C08 E8B088 East Asian ideograph 27587A 8BF7 E8AFB7 East Asian ideograph 27587B 8BF8 E8AFB8 East Asian ideograph 27587C 8BFE E8AFBE East Asian ideograph 27587D 8C03 E8B083 East Asian ideograph 27587E 8BFF E8AFBF East Asian ideograph 275921 8C04 E8B084 East Asian ideograph 275922 8C01 E8B081 East Asian ideograph 275923 8BDE E8AF9E East Asian ideograph 275924 8BBA E8AEBA East Asian ideograph 275925 8C1B E8B09B East Asian ideograph 275926 8C1A E8B09A East Asian ideograph 275927 8C0F E8B08F East Asian ideograph 275928 8BB3 E8AEB3 East Asian ideograph 275929 8C10 E8B090 East Asian ideograph 27592A 8C0D E8B08D East Asian ideograph 27592B 8C0B E8B08B East Asian ideograph 27592C 8C12 E8B092 East Asian ideograph 27592D 8C13 E8B093 East Asian ideograph 27592E 8BFA E8AFBA East Asian ideograph 27592F 8BBD E8AEBD East Asian ideograph 275930 8C15 E8B095 East Asian ideograph 275931 8C24 E8B0A4 East Asian ideograph 275932 8C26 E8B0A6 East Asian ideograph 275933 8C1C E8B09C East Asian ideograph 275934 8BB2 E8AEB2 East Asian ideograph 275935 8C0E E8B08E East Asian ideograph 275936 8C23 E8B0A3 East Asian ideograph 275937 8A8A E8AA8A East Asian ideograph 275938 8C22 E8B0A2 East Asian ideograph 275939 8C28 E8B0A8 East Asian ideograph 27593A 8C2C E8B0AC East Asian ideograph 27593B 8C1F E8B09F East Asian ideograph 27593C 8BC6 E8AF86 East Asian ideograph 27593D 8C31 E8B0B1 East Asian ideograph 27593E 8C32 E8B0B2 East Asian ideograph 27593F 8BC1 E8AF81 East Asian ideograph 275940 8C2D E8B0AD East Asian ideograph 275942 8BA5 E8AEA5 East Asian ideograph 275943 8BAE E8AEAE East Asian ideograph 275946 8BD1 E8AF91 East Asian ideograph 275947 8C34 E8B0B4 East Asian ideograph 275948 62A4 E68AA4 East Asian ideograph 275949 8A89 E8AA89 East Asian ideograph 27594A 8BFB E8AFBB East Asian ideograph 27594B 53D8 E58F98 East Asian ideograph 27594C 8BA9 E8AEA9 East Asian ideograph 27594D 8C36 E8B0B6 East Asian ideograph 27594E 8C17 E8B097 East Asian ideograph 275954 5C82 E5B282 East Asian ideograph 275957 7AD6 E7AB96 East Asian ideograph 275958 4E30 E4B8B0 East Asian ideograph 27595E 4E88 E4BA88 East Asian ideograph 275966 7683 E79A83 East Asian ideograph 275968 8D1D E8B49D East Asian ideograph 275969 8D1E E8B49E East Asian ideograph 27596A 8D1F E8B49F East Asian ideograph 27596B 8D21 E8B4A1 East Asian ideograph 27596C 8D22 E8B4A2 East Asian ideograph 27596D 8D23 E8B4A3 East Asian ideograph 27596E 8D2F E8B4AF East Asian ideograph 27596F 8D27 E8B4A7 East Asian ideograph 275970 8D2A E8B4AA East Asian ideograph 275971 8D2B E8B4AB East Asian ideograph 275972 8D29 E8B4A9 East Asian ideograph 275975 8D39 E8B4B9 East Asian ideograph 275976 8D32 E8B4B2 East Asian ideograph 275977 8D3A E8B4BA East Asian ideograph 275978 8D35 E8B4B5 East Asian ideograph 275979 8D34 E8B4B4 East Asian ideograph 27597A 4E70 E4B9B0 East Asian ideograph 27597B 8D2C E8B4AC East Asian ideograph 27597C 8D3B E8B4BB East Asian ideograph 27597D 8D37 E8B4B7 East Asian ideograph 27597E 8D38 E8B4B8 East Asian ideograph 275A21 8D45 E8B585 East Asian ideograph 275A22 8D44 E8B584 East Asian ideograph 275A23 8D3C E8B4BC East Asian ideograph 275A24 8D3E E8B4BE East Asian ideograph 275A25 8D3F E8B4BF East Asian ideograph 275A26 8D40 E8B580 East Asian ideograph 275A27 8D41 E8B581 East Asian ideograph 275A28 8D42 E8B582 East Asian ideograph 275A29 5BBE E5AEBE East Asian ideograph 275A2A 8D48 E8B588 East Asian ideograph 275A2B 8D4A E8B58A East Asian ideograph 275A2C 8D54 E8B594 East Asian ideograph 275A2D 8D4B E8B58B East Asian ideograph 275A2F 5356 E58D96 East Asian ideograph 275A30 8D24 E8B4A4 East Asian ideograph 275A31 8D31 E8B4B1 East Asian ideograph 275A32 8D4F E8B58F East Asian ideograph 275A33 8D50 E8B590 East Asian ideograph 275A34 8D28 E8B4A8 East Asian ideograph 275A35 8D4C E8B58C East Asian ideograph 275A36 8D56 E8B596 East Asian ideograph 275A37 8D5B E8B59B East Asian ideograph 275A38 8D5A E8B59A East Asian ideograph 275A39 8D58 E8B598 East Asian ideograph 275A3A 8D2D E8B4AD East Asian ideograph 275A3B 8D60 E8B5A0 East Asian ideograph 275A3C 8D5D E8B59D East Asian ideograph 275A3D 8D5E E8B59E East Asian ideograph 275A3E 8D62 E8B5A2 East Asian ideograph 275A3F 8D61 E8B5A1 East Asian ideograph 275A40 8D43 E8B583 East Asian ideograph 275A41 8D4E E8B58E East Asian ideograph 275A42 8D63 E8B5A3 East Asian ideograph 275A4F 8D75 E8B5B5 East Asian ideograph 275A50 8D76 E8B5B6 East Asian ideograph 275A53 8D8B E8B68B East Asian ideograph 275A68 8DF5 E8B7B5 East Asian ideograph 275A71 8E0A E8B88A East Asian ideograph 275A78 8E52 E8B992 East Asian ideograph 275A7E 8DF7 E8B7B7 East Asian ideograph 275B26 8DB8 E8B6B8 East Asian ideograph 275B28 8E0C E8B88C East Asian ideograph 275B29 8DC3 E8B783 East Asian ideograph 275B2A 8E2F E8B8AF East Asian ideograph 275B2B 8E51 E8B991 East Asian ideograph 275B2C 8E8F E8BA8F East Asian ideograph 275B31 8EAF E8BAAF East Asian ideograph 275B32 8F66 E8BDA6 East Asian ideograph 275B33 8F67 E8BDA7 East Asian ideograph 275B34 519B E5869B East Asian ideograph 275B35 8F68 E8BDA8 East Asian ideograph 275B36 8F69 E8BDA9 East Asian ideograph 275B37 8F6B E8BDAB East Asian ideograph 275B38 8F6F E8BDAF East Asian ideograph 275B39 8F6D E8BDAD East Asian ideograph 275B3A 8F72 E8BDB2 East Asian ideograph 275B3B 8F74 E8BDB4 East Asian ideograph 275B3C 8F76 E8BDB6 East Asian ideograph 275B3D 8F83 E8BE83 East Asian ideograph 275B3E 8F7C E8BDBC East Asian ideograph 275B3F 8F7D E8BDBD East Asian ideograph 275B40 8F7E E8BDBE East Asian ideograph 275B41 8F85 E8BE85 East Asian ideograph 275B42 8F84 E8BE84 East Asian ideograph 275B43 8F7B E8BDBB East Asian ideograph 275B45 8F87 E8BE87 East Asian ideograph 275B46 8F86 E8BE86 East Asian ideograph 275B47 8F8D E8BE8D East Asian ideograph 275B48 8F89 E8BE89 East Asian ideograph 275B49 8F88 E8BE88 East Asian ideograph 275B4A 8F6E E8BDAE East Asian ideograph 275B4B 8F8E E8BE8E East Asian ideograph 275B4C 8F90 E8BE90 East Asian ideograph 275B4D 8F91 E8BE91 East Asian ideograph 275B4E 8F93 E8BE93 East Asian ideograph 275B4F 8F96 E8BE96 East Asian ideograph 275B50 8F97 E8BE97 East Asian ideograph 275B51 8F95 E8BE95 East Asian ideograph 275B52 6BC2 E6AF82 East Asian ideograph 275B53 8206 E88886 East Asian ideograph 275B54 8F99 E8BE99 East Asian ideograph 275B55 8F6C E8BDAC East Asian ideograph 275B56 8F9A E8BE9A East Asian ideograph 275B57 8F7F E8BDBF East Asian ideograph 275B58 8F70 E8BDB0 East Asian ideograph 275B59 8F94 E8BE94 East Asian ideograph 275B5F 529E E58A9E East Asian ideograph 275B60 8F9E E8BE9E East Asian ideograph 275B61 8FA9 E8BEA9 East Asian ideograph 275B64 519C E5869C East Asian ideograph 275B6D 8FF0 E8BFB0 East Asian ideograph 275B7D 8FD9 E8BF99 East Asian ideograph 275B7E 8FDE E8BF9E East Asian ideograph 275C33 8FDB E8BF9B East Asian ideograph 275C34 8FD0 E8BF90 East Asian ideograph 275C39 8FBE E8BEBE East Asian ideograph 275C3A 8FDD E8BF9D East Asian ideograph 275C3C 8FC2 E8BF82 East Asian ideograph 275C3E 8FC7 E8BF87 East Asian ideograph 275C44 8FDC E8BF9C East Asian ideograph 275C45 900A E9808A East Asian ideograph 275C48 9012 E98092 East Asian ideograph 275C49 9002 E98082 East Asian ideograph 275C4F 9009 E98089 East Asian ideograph 275C50 8FDF E8BF9F East Asian ideograph 275C51 8FC1 E8BF81 East Asian ideograph 275C52 8FBD E8BEBD East Asian ideograph 275C53 9057 E98197 East Asian ideograph 275C56 8FC8 E8BF88 East Asian ideograph 275C57 8FD8 E8BF98 East Asian ideograph 275C5A 8FE9 E8BFA9 East Asian ideograph (variant of EACC 2D5C5A) 275C5B 8FB9 E8BEB9 East Asian ideograph 275C5C 9026 E980A6 East Asian ideograph 275C5D 903B E980BB East Asian ideograph 275C6B 5369 E58DA9 East Asian ideograph 275C6D 90AE E982AE East Asian ideograph 275C70 4E61 E4B9A1 East Asian ideograph 275C71 90B9 E982B9 East Asian ideograph 275C73 90D1 E98391 East Asian ideograph 275C74 90BB E982BB East Asian ideograph 275C75 9093 E98293 East Asian ideograph 275D2A 9154 E98594 East Asian ideograph 275D2F 915D E9859D East Asian ideograph 275D30 4E11 E4B891 East Asian ideograph 275D31 533B E58CBB East Asian ideograph 275D32 9171 E985B1 East Asian ideograph 275D34 917F E985BF East Asian ideograph 275D35 8845 E8A185 East Asian ideograph 275D38 91CA E9878A East Asian ideograph 275D3D 5398 E58E98 East Asian ideograph 275D3F 9488 E99288 East Asian ideograph 275D40 9489 E99289 East Asian ideograph 275D41 948A E9928A East Asian ideograph 275D43 9497 E99297 East Asian ideograph 275D45 9493 E99293 East Asian ideograph 275D46 948F E9928F East Asian ideograph 275D47 9499 E99299 East Asian ideograph 275D48 949D E9929D East Asian ideograph 275D49 94AE E992AE East Asian ideograph 275D4A 94A0 E992A0 East Asian ideograph 275D4B 949E E9929E East Asian ideograph 275D4C 94A7 E992A7 East Asian ideograph 275D4D 94A4 E992A4 East Asian ideograph 275D4F 94B4 E992B4 East Asian ideograph 275D50 94B9 E992B9 East Asian ideograph 275D51 94B8 E992B8 East Asian ideograph 275D52 94C0 E99380 East Asian ideograph 275D53 94BE E992BE East Asian ideograph 275D55 94C5 E99385 East Asian ideograph 275D56 94A9 E992A9 East Asian ideograph 275D57 94C2 E99382 East Asian ideograph 275D58 94C3 E99383 East Asian ideograph 275D59 94F0 E993B0 East Asian ideograph 275D5A 94F6 E993B6 East Asian ideograph 275D5B 94D0 E99390 East Asian ideograph 275D5C 94DC E9939C East Asian ideograph 275D5D 94ED E993AD East Asian ideograph 275D5E 94E2 E993A2 East Asian ideograph 275D5F 94EC E993AC East Asian ideograph 275D60 94E8 E993A8 East Asian ideograph 275D61 8854 E8A194 East Asian ideograph 275D62 950C E9948C East Asian ideograph 275D63 9511 E99491 East Asian ideograph 275D64 9510 E99490 East Asian ideograph 275D65 94FA E993BA East Asian ideograph 275D66 9500 E99480 East Asian ideograph 275D67 94DD E9939D East Asian ideograph 275D68 9504 E99484 East Asian ideograph 275D69 9509 E99489 East Asian ideograph 275D6A 950B E9948B East Asian ideograph 275D6B 952D E994AD East Asian ideograph 275D6D 952F E994AF East Asian ideograph 275D6E 9530 E994B0 East Asian ideograph 275D6F 9519 E99499 East Asian ideograph 275D70 94B1 E992B1 East Asian ideograph 275D71 94A2 E992A2 East Asian ideograph 275D72 9521 E994A1 East Asian ideograph 275D73 94EE E993AE East Asian ideograph 275D74 5F55 E5BD95 East Asian ideograph 275D75 9525 E994A5 East Asian ideograph 275D76 9526 E994A6 East Asian ideograph 275D77 9540 E99580 East Asian ideograph 275D78 9541 E99581 East Asian ideograph 275D79 952E E994AE East Asian ideograph 275D7A 9532 E994B2 East Asian ideograph 275D7C 9505 E99485 East Asian ideograph 275D7D 951A E9949A East Asian ideograph 275D7E 953E E994BE East Asian ideograph 275E21 949F E9929F East Asian ideograph 275E22 9524 E994A4 East Asian ideograph 275E23 9539 E994B9 East Asian ideograph 275E24 953B E994BB East Asian ideograph 275E25 9551 E99591 East Asian ideograph 275E27 9547 E99587 East Asian ideograph 275E28 9501 E99481 East Asian ideograph 275E29 94A8 E992A8 East Asian ideograph 275E2A 954D E9958D East Asian ideograph 275E2B 955C E9959C East Asian ideograph 275E2C 955D E9959D East Asian ideograph 275E2E 955E E9959E East Asian ideograph 275E2F 94F2 E993B2 East Asian ideograph 275E30 94FF E993BF East Asian ideograph 275E31 94FE E993BE East Asian ideograph 275E32 9556 E99596 East Asian ideograph 275E33 9557 E99597 East Asian ideograph 275E34 9542 E99582 East Asian ideograph 275E35 9558 E99598 East Asian ideograph 275E36 9559 E99599 East Asian ideograph 275E37 9535 E994B5 East Asian ideograph 275E39 94D9 E99399 East Asian ideograph 275E3A 9570 E995B0 East Asian ideograph 275E3B 9508 E99488 East Asian ideograph 275E3C 956D E995AD East Asian ideograph 275E3D 94C1 E99381 East Asian ideograph 275E3E 94DB E9939B East Asian ideograph 275E3F 94CE E9938E East Asian ideograph 275E40 956F E995AF East Asian ideograph 275E43 94F8 E993B8 East Asian ideograph 275E44 9573 E995B3 East Asian ideograph 275E45 94C4 E99384 East Asian ideograph 275E46 9576 E995B6 East Asian ideograph 275E47 94A5 E992A5 East Asian ideograph 275E48 92AE E98AAE East Asian ideograph 275E49 9523 E994A3 East Asian ideograph 275E4A 94BB E992BB East Asian ideograph 275E4B 51FF E587BF East Asian ideograph 275E4C 957F E995BF East Asian ideograph 275E4D 95E8 E997A8 East Asian ideograph 275E4E 95E9 E997A9 East Asian ideograph 275E4F 95EA E997AA East Asian ideograph 275E50 95ED E997AD East Asian ideograph 275E51 95F5 E997B5 East Asian ideograph 275E52 95F0 E997B0 East Asian ideograph 275E53 5F00 E5BC80 East Asian ideograph 275E54 95F2 E997B2 East Asian ideograph 275E55 95F4 E997B4 East Asian ideograph 275E57 95F8 E997B8 East Asian ideograph 275E58 9602 E99882 East Asian ideograph 275E59 95FA E997BA East Asian ideograph 275E5A 95FD E997BD East Asian ideograph 275E5B 9601 E99881 East Asian ideograph 275E5C 9600 E99880 East Asian ideograph 275E5D 5408 E59088 East Asian ideograph 275E5E 9605 E99885 East Asian ideograph 275E5F 95FE E997BE East Asian ideograph 275E60 960E E9988E East Asian ideograph 275E61 9614 E99894 East Asian ideograph 275E62 9615 E99895 East Asian ideograph 275E63 9611 E99891 East Asian ideograph 275E64 95F1 E997B1 East Asian ideograph 275E65 677F E69DBF East Asian ideograph 275E67 95EF E997AF East Asian ideograph 275E68 9617 E99897 East Asian ideograph 275E69 5173 E585B3 East Asian ideograph 275E6A 9610 E99890 East Asian ideograph 275E6B 8F9F E8BE9F East Asian ideograph (duplicate simplified) 275E7B 9635 E998B5 East Asian ideograph 275F23 9648 E99988 East Asian ideograph 275F24 9646 E99986 East Asian ideograph 275F2A 9634 E998B4 East Asian ideograph 275F2B 961F E9989F East Asian ideograph 275F2C 9636 E998B6 East Asian ideograph 275F2E 9633 E998B3 East Asian ideograph 275F37 9645 E99985 East Asian ideograph 275F39 968F E99A8F East Asian ideograph 275F3A 9669 E999A9 East Asian ideograph 275F3B 9690 E99A90 East Asian ideograph 275F3C 9647 E99987 East Asian ideograph 275F3D 96B6 E99AB6 East Asian ideograph 275F3E 53EA E58FAA East Asian ideograph (duplicate simplified) 275F4A 867D E899BD East Asian ideograph 275F4B 6742 E69D82 East Asian ideograph 275F4C 9E21 E9B8A1 East Asian ideograph 275F4D 96CF E99B8F East Asian ideograph 275F4E 53CC E58F8C East Asian ideograph 275F4F 79BB E7A6BB East Asian ideograph 275F50 96BE E99ABE East Asian ideograph 275F54 4E91 E4BA91 East Asian ideograph 275F55 7535 E794B5 East Asian ideograph 275F67 96FE E99BBE East Asian ideograph 275F6B 9701 E99C81 East Asian ideograph 275F6D 972D E99CAD East Asian ideograph 275F6E 96F3 E99BB3 East Asian ideograph 275F6F 7075 E781B5 East Asian ideograph 275F79 9765 E99DA5 East Asian ideograph 276023 5DE9 E5B7A9 East Asian ideograph 276029 9791 E99E91 East Asian ideograph 27602C 97E6 E99FA6 East Asian ideograph 27602D 97E7 E99FA7 East Asian ideograph 27602E 97E9 E99FA9 East Asian ideograph 27602F 97EC E99FAC East Asian ideograph 276030 827D E889BD East Asian ideograph 276036 54CD E5938D East Asian ideograph 276037 9875 E9A1B5 East Asian ideograph 276038 9876 E9A1B6 East Asian ideograph 276039 9877 E9A1B7 East Asian ideograph 27603A 9879 E9A1B9 East Asian ideograph 27603B 987A E9A1BA East Asian ideograph 27603C 987B E9A1BB East Asian ideograph 27603D 9884 E9A284 East Asian ideograph 27603E 987C E9A1BC East Asian ideograph 27603F 987D E9A1BD East Asian ideograph 276040 987F E9A1BF East Asian ideograph 276041 9881 E9A281 East Asian ideograph 276042 9882 E9A282 East Asian ideograph 276043 9887 E9A287 East Asian ideograph 276044 9886 E9A286 East Asian ideograph 276045 9889 E9A289 East Asian ideograph 276046 5934 E5A4B4 East Asian ideograph 276047 988A E9A28A East Asian ideograph 276048 9888 E9A288 East Asian ideograph 276049 9891 E9A291 East Asian ideograph 27604A 9893 E9A293 East Asian ideograph 27604B 9894 E9A294 East Asian ideograph 27604C 9890 E9A290 East Asian ideograph 27604D 9897 E9A297 East Asian ideograph 27604E 989C E9A29C East Asian ideograph 27604F 989D E9A29D East Asian ideograph 276050 9898 E9A298 East Asian ideograph 276051 989A E9A29A East Asian ideograph 276052 989B E9A29B East Asian ideograph 276053 7C7B E7B1BB East Asian ideograph 276054 98A0 E9A2A0 East Asian ideograph 276055 613F E684BF East Asian ideograph 276056 987E E9A1BE East Asian ideograph 276057 98A4 E9A2A4 East Asian ideograph 276058 663E E698BE East Asian ideograph 276059 9885 E9A285 East Asian ideograph 27605A 98A6 E9A2A6 East Asian ideograph 27605B 98CE E9A38E East Asian ideograph 27605C 98D2 E9A392 East Asian ideograph 27605D 53F0 E58FB0 East Asian ideograph (duplicate simplified) 27605E 522E E588AE East Asian ideograph 27605F 98D3 E9A393 East Asian ideograph 276061 98D5 E9A395 East Asian ideograph 276062 98D8 E9A398 East Asian ideograph 276063 98DE E9A39E East Asian ideograph 276065 9965 E9A5A5 East Asian ideograph 276067 9968 E9A5A8 East Asian ideograph 276068 996C E9A5AC East Asian ideograph 276069 996A E9A5AA East Asian ideograph 27606A 996E E9A5AE East Asian ideograph 27606B 996D E9A5AD East Asian ideograph 27606C 9972 E9A5B2 East Asian ideograph 27606D 9974 E9A5B4 East Asian ideograph 27606E 9971 E9A5B1 East Asian ideograph 27606F 9970 E9A5B0 East Asian ideograph 276070 997A E9A5BA East Asian ideograph 276071 517B E585BB East Asian ideograph 276072 9975 E9A5B5 East Asian ideograph 276073 9977 E9A5B7 East Asian ideograph 276075 9981 E9A681 East Asian ideograph 276076 4F59 E4BD99 East Asian ideograph 276077 997F E9A5BF East Asian ideograph 276078 997C E9A5BC East Asian ideograph 276079 9986 E9A686 East Asian ideograph 27607A 996F E9A5AF East Asian ideograph 27607B 9984 E9A684 East Asian ideograph 27607C 9985 E9A685 East Asian ideograph 27607E 998F E9A68F East Asian ideograph 276121 998A E9A68A East Asian ideograph 276123 9992 E9A692 East Asian ideograph 276124 9976 E9A5B6 East Asian ideograph 276126 990D E9A48D East Asian ideograph 276127 998B E9A68B East Asian ideograph 27612C 9A6C E9A9AC East Asian ideograph 27612D 51AF E586AF East Asian ideograph 27612E 9A6D E9A9AD East Asian ideograph 27612F 9A70 E9A9B0 East Asian ideograph 276130 9A6E E9A9AE East Asian ideograph 276131 9A6F E9A9AF East Asian ideograph 276132 9A73 E9A9B3 East Asian ideograph 276133 9A7B E9A9BB East Asian ideograph 276134 9A7C E9A9BC East Asian ideograph 276135 9A7E E9A9BE East Asian ideograph 276136 9A77 E9A9B7 East Asian ideograph 276137 9A76 E9A9B6 East Asian ideograph 276138 9A79 E9A9B9 East Asian ideograph 276139 9A78 E9A9B8 East Asian ideograph 27613A 9A7D E9A9BD East Asian ideograph 27613B 9A87 E9AA87 East Asian ideograph 27613C 9A86 E9AA86 East Asian ideograph 27613D 9A8B E9AA8B East Asian ideograph 27613E 9A8F E9AA8F East Asian ideograph 27613F 9A88 E9AA88 East Asian ideograph 276140 9A91 E9AA91 East Asian ideograph 276141 9A97 E9AA97 East Asian ideograph 276142 9A9B E9AA9B East Asian ideograph 276143 9A9E E9AA9E East Asian ideograph 276144 817E E885BE East Asian ideograph 276145 9A9A E9AA9A East Asian ideograph 276146 9AA0 E9AAA0 East Asian ideograph 276147 9A71 E9A9B1 East Asian ideograph 276148 84E6 E893A6 East Asian ideograph 276149 9AA1 E9AAA1 East Asian ideograph 27614A 9A84 E9AA84 East Asian ideograph 27614B 60CA E6838A East Asian ideograph 27614C 9A7F E9A9BF East Asian ideograph 27614D 9A8C E9AA8C East Asian ideograph 27614E 9AA4 E9AAA4 East Asian ideograph 27614F 9A74 E9A9B4 East Asian ideograph 276150 9AA5 E9AAA5 East Asian ideograph 276151 9A8A E9AA8A East Asian ideograph 276153 80AE E882AE East Asian ideograph 276158 9AC5 E9AB85 East Asian ideograph 27615A 4F53 E4BD93 East Asian ideograph 27615B 810F E8848F East Asian ideograph 27615F 53D1 E58F91 East Asian ideograph (duplicate simplified) 276163 677E E69DBE East Asian ideograph (duplicate simplified) 276164 80E1 E883A1 East Asian ideograph (duplicate simplified) 276165 987B E9A1BB East Asian ideograph (duplicate simplified) 276166 9B13 E9AC93 East Asian ideograph 276167 6597 E69697 East Asian ideograph 276168 95F9 E997B9 East Asian ideograph 27616A 90C1 E98381 East Asian ideograph 276173 9B47 E9AD87 East Asian ideograph 276174 9C7C E9B1BC East Asian ideograph 276175 9C7F E9B1BF East Asian ideograph 276176 9C81 E9B281 East Asian ideograph 276177 9C8D E9B28D East Asian ideograph 276178 9C9B E9B29B East Asian ideograph 276179 9C9C E9B29C East Asian ideograph 27617A 9C94 E9B294 East Asian ideograph 27617B 9CA8 E9B2A8 East Asian ideograph 27617C 9CA4 E9B2A4 East Asian ideograph 27617D 9CB8 E9B2B8 East Asian ideograph 27617E 9CB3 E9B2B3 East Asian ideograph 276221 9CC3 E9B383 East Asian ideograph 276222 9CC5 E9B385 East Asian ideograph 276223 9CAB E9B2AB East Asian ideograph 276224 9CCD E9B38D East Asian ideograph 276225 9CCF E9B38F East Asian ideograph 276226 9CA2 E9B2A2 East Asian ideograph 276227 9CD4 E9B394 East Asian ideograph 276228 9CD7 E9B397 East Asian ideograph 276229 9CDD E9B39D East Asian ideograph 27622A 9CDE E9B39E East Asian ideograph 27622B 9CDC E9B39C East Asian ideograph 27622C 9CD6 E9B396 East Asian ideograph 27622E 9C88 E9B288 East Asian ideograph 27622F 9E1F E9B89F East Asian ideograph 276230 9E20 E9B8A0 East Asian ideograph 276231 9E22 E9B8A2 East Asian ideograph 276232 9E23 E9B8A3 East Asian ideograph 276233 51E4 E587A4 East Asian ideograph 276234 9E29 E9B8A9 East Asian ideograph 276235 9E26 E9B8A6 East Asian ideograph 276236 9E35 E9B8B5 East Asian ideograph 276237 9E2A E9B8AA East Asian ideograph 276238 9E2D E9B8AD East Asian ideograph 276239 9E2F E9B8AF East Asian ideograph 27623A 9E33 E9B8B3 East Asian ideograph 27623C 9E3F E9B8BF East Asian ideograph 27623D 9E3D E9B8BD East Asian ideograph 27623E 9E49 E9B989 East Asian ideograph 27623F 9E43 E9B983 East Asian ideograph 276240 9E44 E9B984 East Asian ideograph 276241 9E45 E9B985 East Asian ideograph 276242 9E51 E9B991 East Asian ideograph 276243 9E4A E9B98A East Asian ideograph 276244 9E4C E9B98C East Asian ideograph 276245 9E4F E9B98F East Asian ideograph 276246 9E64 E9B9A4 East Asian ideograph 276247 83BA E88EBA East Asian ideograph 276248 9E5E E9B99E East Asian ideograph 276249 9E67 E9B9A7 East Asian ideograph 27624A 9E25 E9B8A5 East Asian ideograph 27624B 9E36 E9B8B6 East Asian ideograph 27624C 9E70 E9B9B0 East Asian ideograph 27624D 9E6D E9B9AD East Asian ideograph 27624E 9E66 E9B9A6 East Asian ideograph 27624F 9E3E E9B8BE East Asian ideograph 276250 54B8 E592B8 East Asian ideograph 276251 76D0 E79B90 East Asian ideograph 276252 7877 E7A1B7 East Asian ideograph 276256 4E3D E4B8BD East Asian ideograph 27625B 9EA6 E9BAA6 East Asian ideograph 27625C 9EB8 E9BAB8 East Asian ideograph 27625E 9762 E99DA2 East Asian ideograph 276260 4E48 E4B988 East Asian ideograph 27626A 70B9 E782B9 East Asian ideograph 27626F 515A E5859A East Asian ideograph 276272 9EE9 E9BBA9 East Asian ideograph 276276 51AC E586AC East Asian ideograph 27627D 9F50 E9BD90 East Asian ideograph 27627E 658E E6968E East Asian ideograph 276321 9F7F E9BDBF East Asian ideograph 276322 9F83 E9BE83 East Asian ideograph 276324 9F84 E9BE84 East Asian ideograph 276325 9F88 E9BE88 East Asian ideograph 276326 9F87 E9BE87 East Asian ideograph 276327 9F89 E9BE89 East Asian ideograph 276328 9F8A E9BE8A East Asian ideograph 276329 9F8C E9BE8C East Asian ideograph 27632A 9F8B E9BE8B East Asian ideograph 27632B 9F99 E9BE99 East Asian ideograph 27632C 9F9A E9BE9A East Asian ideograph 27632D 9F9F E9BE9F East Asian ideograph 276649 4F1C E4BC9C East Asian ideograph 276775 4F65 E4BDA5 East Asian ideograph 27677C 4F1B E4BC9B East Asian ideograph 276822 507B E581BB East Asian ideograph 276842 507E E581BE East Asian ideograph 276871 4FAA E4BEAA East Asian ideograph 276944 50A9 E582A9 East Asian ideograph 276948 50A5 E582A5 East Asian ideograph 276B3E 522D E588AD East Asian ideograph 276B5B 5250 E58990 East Asian ideograph 276B5F 672D E69CAD East Asian ideograph 276B79 523F E588BF East Asian ideograph 276B7A 523D E588BD East Asian ideograph 276D2E 5326 E58CA6 East Asian ideograph 276D6D 538D E58E8D East Asian ideograph 276E2A 53A3 E58EA3 East Asian ideograph 276F69 5459 E59199 East Asian ideograph 277030 5457 E59197 East Asian ideograph 277169 5522 E594A2 East Asian ideograph 277234 551B E5949B East Asian ideograph 277239 54D4 E59394 East Asian ideograph 277255 54D3 E59393 East Asian ideograph 277258 6076 E681B6 East Asian ideograph (duplicate simplified) 277267 5452 E59192 East Asian ideograph 277272 54D2 E59392 East Asian ideograph 27727A 54D5 E59395 East Asian ideograph 27727E 54D9 E59399 East Asian ideograph 277328 54DC E5939C East Asian ideograph 277345 556E E595AE East Asian ideograph 27734C 5456 E59196 East Asian ideograph 27735A 55BE E596BE East Asian ideograph 277360 5181 E58681 East Asian ideograph 27742E 56F5 E59BB5 East Asian ideograph 277638 57AD E59EAD East Asian ideograph 27767A 57DA E59F9A East Asian ideograph 277742 57D8 E59F98 East Asian ideograph 277745 57D9 E59F99 East Asian ideograph 277748 57B2 E59EB2 East Asian ideograph 27785A 5785 E59E85 East Asian ideograph 27785E 5786 E59E86 East Asian ideograph 277954 5956 E5A596 East Asian ideograph 277B3C 5A05 E5A885 East Asian ideograph 277C24 5A32 E5A8B2 East Asian ideograph 277C36 59AB E5A6AB East Asian ideograph 277D2B 5A06 E5A886 East Asian ideograph 277D40 5AF1 E5ABB1 East Asian ideograph 277D48 5AD2 E5AB92 East Asian ideograph 277D74 5A08 E5A888 East Asian ideograph 28232B 5C66 E5B1A6 East Asian ideograph 282441 5C98 E5B298 East Asian ideograph 282458 5D03 E5B483 East Asian ideograph 28255A 5D5D E5B59D East Asian ideograph 282569 5D02 E5B482 East Asian ideograph 282577 5CE4 E5B3A4 East Asian ideograph 282626 5CC4 E5B384 East Asian ideograph 282632 5D58 E5B598 East Asian ideograph 282647 5CBF E5B2BF East Asian ideograph 282659 5DEF E5B7AF East Asian ideograph 282736 5E0F E5B88F East Asian ideograph 282747 5E3B E5B8BB East Asian ideograph 28275F 5E31 E5B8B1 East Asian ideograph 282868 5E91 E5BA91 East Asian ideograph 282951 5F2A E5BCAA East Asian ideograph 282D34 607D E681BD East Asian ideograph 282D5E 607A E681BA East Asian ideograph 282D74 6004 E68084 East Asian ideograph 282D77 60AD E682AD East Asian ideograph 282D79 60AB E682AB East Asian ideograph 282E4C 6126 E684A6 East Asian ideograph 282E52 6003 E68083 East Asian ideograph 282E5C 603F E680BF East Asian ideograph 282E79 6079 E681B9 East Asian ideograph 282E7E 603C E680BC East Asian ideograph 282F43 6206 E68886 East Asian ideograph 282F47 620B E6888B East Asian ideograph 282F66 6217 E68897 East Asian ideograph 28336F 629F E68A9F East Asian ideograph 28337B 62A0 E68AA0 East Asian ideograph 28342C 63BA E68EBA East Asian ideograph 28342E 63BC E68EBC East Asian ideograph 283457 63B8 E68EB8 East Asian ideograph 283462 6322 E68CA2 East Asian ideograph 283466 63FF E68FBF East Asian ideograph 28352A 6448 E69188 East Asian ideograph 283542 64B7 E692B7 East Asian ideograph 283546 6445 E69185 East Asian ideograph 28355B 6484 E69284 East Asian ideograph 283561 64BA E692BA East Asian ideograph 28356D 6512 E69492 East Asian ideograph 283671 6593 E69693 East Asian ideograph 283955 6619 E69899 East Asian ideograph 28395C 6654 E69994 East Asian ideograph 283B22 4E2B E4B8AB East Asian ideograph 283B7D 53F0 E58FB0 East Asian ideograph (duplicate simplified) 283D30 67A7 E69EA7 East Asian ideograph 283D6E 67A8 E69EA8 East Asian ideograph 283F30 6966 E6A5A6 East Asian ideograph 283F5C 6769 E69DA9 East Asian ideograph 284027 6864 E6A1A4 East Asian ideograph 284056 6920 E6A4A0 East Asian ideograph 28405E 67FD E69FBD East Asian ideograph 284140 6861 E6A1A1 East Asian ideograph 28422B 6A2F E6A8AF East Asian ideograph 284257 68BC E6A2BC East Asian ideograph 284333 680E E6A08E East Asian ideograph 284335 6A7C E6A9BC East Asian ideograph 284337 6987 E6A687 East Asian ideograph 284339 680A E6A08A East Asian ideograph 28433A 69E0 E6A7A0 East Asian ideograph 284340 67A5 E69EA5 East Asian ideograph 284345 680C E6A08C East Asian ideograph 284350 68C2 E6A382 East Asian ideograph 284359 6989 E6A689 East Asian ideograph 284366 6924 E6A4A4 East Asian ideograph 284539 6B9A E6AE9A East Asian ideograph 284642 6BF5 E6AFB5 East Asian ideograph 28464C 6BE1 E6AFA1 East Asian ideograph 284651 6C07 E6B087 East Asian ideograph 284668 6C29 E6B0A9 East Asian ideograph 284934 6D43 E6B583 East Asian ideograph 284971 6D9E E6B69E East Asian ideograph 284B28 6D48 E6B588 East Asian ideograph 284B43 8365 E88DA5 East Asian ideograph 284C2E 6D52 E6B592 East Asian ideograph 284C41 6CA4 E6B2A4 East Asian ideograph 284C62 988D E9A28D East Asian ideograph 284D27 6D9D E6B69D East Asian ideograph 284D2B 6D54 E6B594 East Asian ideograph 284D49 6DA0 E6B6A0 East Asian ideograph 284D58 6CA9 E6B2A9 East Asian ideograph 284D59 6ED7 E6BB97 East Asian ideograph 284E30 6E11 E6B891 East Asian ideograph 284E3E 6CF6 E6B3B6 East Asian ideograph 284E41 6F4B E6BD8B East Asian ideograph 284E42 6D4D E6B58D East Asian ideograph 284E62 6F4D E6BD8D East Asian ideograph 284E66 6EE2 E6BBA2 East Asian ideograph 284F26 6CF7 E6B3B7 East Asian ideograph 284F39 6CF8 E6B3B8 East Asian ideograph 284F5D 6CA3 E6B2A3 East Asian ideograph 284F61 6EE0 E6BBA0 East Asian ideograph 284F6B 6F13 E6BC93 East Asian ideograph 284F7D 704F E7818F East Asian ideograph 285029 6EDF E6BB9F East Asian ideograph 285150 70C3 E78383 East Asian ideograph 285252 709C E7829C East Asian ideograph 285323 8367 E88DA7 East Asian ideograph 28533C 709D E7829D East Asian ideograph 285424 70E8 E783A8 East Asian ideograph 28544F 70EC E783AC East Asian ideograph 28575E 72B8 E78AB8 East Asian ideograph 28575F 72F2 E78BB2 East Asian ideograph 28582B 7303 E78C83 East Asian ideograph 285836 7315 E78C95 East Asian ideograph 285A47 73AE E78EAE East Asian ideograph 285B21 740F E7908F East Asian ideograph 285C3A 748E E7928E East Asian ideograph 285C40 74D2 E79392 East Asian ideograph 285D6B 7572 E795B2 East Asian ideograph 285E7A 75D6 E79796 East Asian ideograph 285F48 7617 E79897 East Asian ideograph 285F5E 7618 E79898 East Asian ideograph 285F6F 7605 E79885 East Asian ideograph 28602B 762A E798AA East Asian ideograph 286032 75AC E796AC East Asian ideograph 286037 763F E798BF East Asian ideograph 28603A 75C8 E79788 East Asian ideograph 286222 7726 E79CA6 East Asian ideograph 286272 770D E79C8D East Asian ideograph 28632C 7751 E79D91 East Asian ideograph 28645A 7817 E7A097 East Asian ideograph 286460 7856 E7A196 East Asian ideograph 286540 7800 E7A080 East Asian ideograph 28656A 789B E7A29B East Asian ideograph 286577 789C E7A29C East Asian ideograph 286622 7857 E7A197 East Asian ideograph 286655 783B E7A0BB East Asian ideograph 286A3C 7AAD E7AAAD East Asian ideograph 286B7C 7B15 E7AC95 East Asian ideograph 286C58 7BA7 E7AEA7 East Asian ideograph 286D47 7BA6 E7AEA6 East Asian ideograph 286D54 7B5A E7AD9A East Asian ideograph 286E56 7BA8 E7AEA8 East Asian ideograph 286E68 7B3E E7ACBE East Asian ideograph 286E69 7C16 E7B096 East Asian ideograph 287022 7CC1 E7B381 East Asian ideograph 28702E 56E2 E59BA2 East Asian ideograph (duplicate simplified) 287030 7C9D E7B29D East Asian ideograph 287035 7C74 E7B1B4 East Asian ideograph 287042 7EA1 E7BAA1 East Asian ideograph 287045 7EA8 E7BAA8 East Asian ideograph 28704A 7EBE E7BABE East Asian ideograph 287061 7EC0 E7BB80 East Asian ideograph 287062 7EC1 E7BB81 East Asian ideograph 287065 7EC2 E7BB82 East Asian ideograph 28706A 7ED0 E7BB90 East Asian ideograph 287130 7EDB E7BB9B East Asian ideograph 287134 7ED7 E7BB97 East Asian ideograph 287139 7EE8 E7BBA8 East Asian ideograph 287144 7EE0 E7BBA0 East Asian ideograph 28714D 7EE1 E7BBA1 East Asian ideograph 287161 7EFB E7BBBB East Asian ideograph 287167 7EEF E7BBAF East Asian ideograph 287174 7EF2 E7BBB2 East Asian ideograph 287178 7EF6 E7BBB6 East Asian ideograph 28717D 7EFA E7BBBA East Asian ideograph 287229 7F17 E7BC97 East Asian ideograph 28722A 7F02 E7BC82 East Asian ideograph 287231 7F03 E7BC83 East Asian ideograph 287236 7F07 E7BC87 East Asian ideograph 28723C 7F08 E7BC88 East Asian ideograph 28723E 7F0C E7BC8C East Asian ideograph 287247 7F11 E7BC91 East Asian ideograph 287248 7F0F E7BC8F East Asian ideograph 287251 7F1F E7BC9F East Asian ideograph 287253 7F12 E7BC92 East Asian ideograph 28725D 7F1C E7BC9C East Asian ideograph 28725E 7F19 E7BC99 East Asian ideograph 28725F 7F1B E7BC9B East Asian ideograph 287269 7EC9 E7BB89 East Asian ideograph 287271 7EA4 E7BAA4 East Asian ideograph (duplicate simplified) 287272 7F21 E7BCA1 East Asian ideograph 287275 7D77 E7B5B7 East Asian ideograph 287279 7F25 E7BCA5 East Asian ideograph 287321 7F26 E7BCA6 East Asian ideograph 28732D 7F2F E7BCAF East Asian ideograph 287349 7F30 E7BCB0 East Asian ideograph 28734E 7F32 E7BCB2 East Asian ideograph 287351 7F33 E7BCB3 East Asian ideograph 287352 7F34 E7BCB4 East Asian ideograph 287359 7F31 E7BCB1 East Asian ideograph 28735D 7EA9 E7BAA9 East Asian ideograph 287360 7F2C E7BCAC East Asian ideograph 28736D 624D E6898D East Asian ideograph 287374 7F35 E7BCB5 East Asian ideograph 28742E 7F42 E7BD82 East Asian ideograph 287431 575B E59D9B East Asian ideograph (duplicate simplified) 287472 7F74 E7BDB4 East Asian ideograph 287531 7F9F E7BE9F East Asian ideograph 287655 8027 E880A7 East Asian ideograph 287739 8069 E881A9 East Asian ideograph 28773F 804D E8818D East Asian ideograph 287855 80EB E883AB East Asian ideograph 28786E 80E8 E883A8 East Asian ideograph 287941 8136 E884B6 East Asian ideograph 287A56 8114 E88494 East Asian ideograph 287E61 82CC E88B8C East Asian ideograph 29233C 836D E88DAD East Asian ideograph 29233D 836E E88DAE East Asian ideograph 292375 83B3 E88EB3 East Asian ideograph 292433 8298 E88A98 East Asian ideograph (duplicate simplified) 29243A 83BC E88EBC East Asian ideograph 29247D 835C E88D9C East Asian ideograph 292524 848C E8928C East Asian ideograph 29252D 8311 E88C91 East Asian ideograph 292535 82C1 E88B81 East Asian ideograph 292546 8368 E88DA8 East Asian ideograph 29254B 835B E88D9B East Asian ideograph 29255A 8487 E89287 East Asian ideograph 292564 8489 E89289 East Asian ideograph 292567 836C E88DAC East Asian ideograph 292571 835E E88D9E East Asian ideograph 292574 83B8 E88EB8 East Asian ideograph 292577 8297 E88A97 East Asian ideograph 292633 84E3 E893A3 East Asian ideograph 292651 84DF E8939F East Asian ideograph 292657 835F E88D9F East Asian ideograph 292658 83B6 E88EB6 East Asian ideograph 292661 8360 E88DA0 East Asian ideograph 292668 8369 E88DA9 East Asian ideograph 292752 830F E88C8F East Asian ideograph 292765 82C8 E88B88 East Asian ideograph 292768 8572 E895B2 East Asian ideograph 29282A 8539 E894B9 East Asian ideograph 292840 84E0 E893A0 East Asian ideograph 292A2F 86F1 E89BB1 East Asian ideograph 292A34 86AC E89AAC East Asian ideograph 292B55 86F3 E89BB3 East Asian ideograph 292B6E 86F0 E89BB0 East Asian ideograph 292C4C 866E E899AE East Asian ideograph 292C55 86CF E89B8F East Asian ideograph 292C5D 867F E899BF East Asian ideograph 292C61 86F4 E89BB4 East Asian ideograph 292C64 877E E89DBE East Asian ideograph 292D51 8511 E89491 East Asian ideograph 292F60 88E2 E8A3A2 East Asian ideograph 292F72 88E5 E8A3A5 East Asian ideograph 29302D 88E3 E8A3A3 East Asian ideograph 293032 7962 E7A5A2 East Asian ideograph 293066 89C7 E8A787 East Asian ideograph 29306F 89CB E8A78B East Asian ideograph 29307D 89CF E8A78F East Asian ideograph 29312B 89D1 E8A791 East Asian ideograph 293132 89CC E8A78C East Asian ideograph 293160 89EF E8A7AF East Asian ideograph 29322A 8BB5 E8AEB5 East Asian ideograph 29323B 8BCE E8AF8E East Asian ideograph 29323C 8BD2 E8AF92 East Asian ideograph 29324F 8BD6 E8AF96 East Asian ideograph 293250 8BD3 E8AF93 East Asian ideograph 293256 8BE9 E8AFA9 East Asian ideograph 29325D 8BD4 E8AF94 East Asian ideograph 29325E 8BDC E8AF9C East Asian ideograph 293271 8BEE E8AFAE East Asian ideograph 29327E 8C07 E8B087 East Asian ideograph 293325 8BF9 E8AFB9 East Asian ideograph 29332C 8BFC E8AFBC East Asian ideograph 293336 8BE4 E8AFA4 East Asian ideograph 293338 8BFD E8AFBD East Asian ideograph 29333B 8C00 E8B080 East Asian ideograph 293340 8C02 E8B082 East Asian ideograph 293344 8C19 E8B099 East Asian ideograph 293345 8BE8 E8AFA8 East Asian ideograph 29334E 8C0C E8B08C East Asian ideograph 293357 8C14 E8B094 East Asian ideograph 293359 8C11 E8B091 East Asian ideograph 29335D 8C16 E8B096 East Asian ideograph 293362 8C1D E8B09D East Asian ideograph 293373 8C21 E8B0A1 East Asian ideograph 29337A 8BCC E8AF8C East Asian ideograph 29337D 8C27 E8B0A7 East Asian ideograph 293430 8BB4 E8AEB4 East Asian ideograph 293438 8C29 E8B0A9 East Asian ideograph 29344D 8C2E E8B0AE East Asian ideograph 293459 8C2F E8B0AF East Asian ideograph 293468 8C35 E8B0B5 East Asian ideograph 29352D 8C30 E8B0B0 East Asian ideograph 293537 8C20 E8B0A0 East Asian ideograph 293539 8C33 E8B0B3 East Asian ideograph 29364E 8D33 E8B4B3 East Asian ideograph 293651 8D36 E8B4B6 East Asian ideograph 29365F 8D47 E8B587 East Asian ideograph 29366A 8D53 E8B593 East Asian ideograph 29366B 8D55 E8B595 East Asian ideograph 293670 8D49 E8B589 East Asian ideograph 29367E 8D59 E8B599 East Asian ideograph 293725 8D3D E8B4BD East Asian ideograph 293726 8D5C E8B59C East Asian ideograph 29373A 8D46 E8B586 East Asian ideograph 293866 8DB1 E8B6B1 East Asian ideograph 293A2E 8DC4 E8B784 East Asian ideograph 293A40 8DF8 E8B7B8 East Asian ideograph 293A46 8E70 E8B9B0 East Asian ideograph 293A57 8DFB E8B7BB East Asian ideograph 293A5E 8DF9 E8B7B9 East Asian ideograph 293A5F 8DDE E8B79E East Asian ideograph 293A60 8E2C E8B8AC East Asian ideograph 293A6B 8E7F E8B9BF East Asian ideograph 293A70 8E9C E8BA9C East Asian ideograph 293B3E 8F71 E8BDB1 East Asian ideograph 293B3F 8F7A E8BDBA East Asian ideograph 293B42 8F75 E8BDB5 East Asian ideograph 293B47 8F77 E8BDB7 East Asian ideograph 293B4F 8F78 E8BDB8 East Asian ideograph 293B59 8F82 E8BE82 East Asian ideograph 293B5B 8F81 E8BE81 East Asian ideograph 293B6B 8F8B E8BE8B East Asian ideograph 293B6D 8F8A E8BE8A East Asian ideograph 293B7A 8F8F E8BE8F East Asian ideograph 293C30 8F98 E8BE98 East Asian ideograph 293C57 8F79 E8BDB9 East Asian ideograph 293C5A 8F73 E8BDB3 East Asian ideograph 293D4E 8FF8 E8BFB8 East Asian ideograph 293F23 90CF E9838F East Asian ideograph 293F4C 90D3 E98393 East Asian ideograph 293F5A 90E7 E983A7 East Asian ideograph 293F5C 90AC E982AC East Asian ideograph 294021 90F8 E983B8 East Asian ideograph 29402B 90BA E982BA East Asian ideograph 29402C 90D0 E98390 East Asian ideograph 294031 909D E9829D East Asian ideograph 294040 90E6 E983A6 East Asian ideograph 29415C 917E E985BE East Asian ideograph 29415D 917D E985BD East Asian ideograph 294161 9487 E99287 East Asian ideograph 294162 9486 E99286 East Asian ideograph 294163 948C E9928C East Asian ideograph 294164 948B E9928B East Asian ideograph 29416A 948D E9928D East Asian ideograph 29416B 948E E9928E East Asian ideograph 294179 9492 E99292 East Asian ideograph 294221 9495 E99295 East Asian ideograph 294222 9490 E99290 East Asian ideograph 294223 94AD E992AD East Asian ideograph 294224 94AA E992AA East Asian ideograph 294225 94AB E992AB East Asian ideograph 294228 94AC E992AC East Asian ideograph 294231 94AF E992AF East Asian ideograph 294237 949B E9929B East Asian ideograph 29424B 94A3 E992A3 East Asian ideograph 294251 94C8 E99388 East Asian ideograph 294252 94C9 E99389 East Asian ideograph 294254 94CB E9938B East Asian ideograph 294255 94CA E9938A East Asian ideograph 294258 94B0 E992B0 East Asian ideograph 29425C 94CC E9938C East Asian ideograph 29425F 94B6 E992B6 East Asian ideograph 294260 94B7 E992B7 East Asian ideograph 294261 94B2 E992B2 East Asian ideograph 294264 94BA E992BA East Asian ideograph 29426D 94CD E9938D East Asian ideograph 29426F 94BD E992BD East Asian ideograph 294274 94BF E992BF East Asian ideograph 29432B 94C6 E99386 East Asian ideograph 29432F 94F3 E993B3 East Asian ideograph 294331 94F1 E993B1 East Asian ideograph 294335 94F5 E993B5 East Asian ideograph 294340 94D6 E99396 East Asian ideograph 294343 94D2 E99392 East Asian ideograph 294346 94D1 E99391 East Asian ideograph 294349 94D5 E99395 East Asian ideograph 29434F 94DE E9939E East Asian ideograph 294350 94DF E9939F East Asian ideograph 294355 94EB E993AB East Asian ideograph 294358 94EF E993AF East Asian ideograph 294359 94E5 E993A5 East Asian ideograph 29435B 94E3 E993A3 East Asian ideograph 294362 94EA E993AA East Asian ideograph 294364 94F7 E993B7 East Asian ideograph 29436A 9512 E99492 East Asian ideograph 29436C 950D E9948D East Asian ideograph 294371 94FD E993BD East Asian ideograph 294372 9513 E99493 East Asian ideograph 294375 9514 E99494 East Asian ideograph 29437D 94D8 E99398 East Asian ideograph 294427 94D7 E99397 East Asian ideograph 29442B 9503 E99483 East Asian ideograph 29442D 94A1 E992A1 East Asian ideograph 29442E 9502 E99482 East Asian ideograph 294435 950A E9948A East Asian ideograph 29443E 94E4 E993A4 East Asian ideograph 294440 9506 E99486 East Asian ideograph 294441 9507 E99487 East Asian ideograph 29444D 952B E994AB East Asian ideograph 294457 9529 E994A9 East Asian ideograph 294458 952C E994AC East Asian ideograph 29445B 9516 E99496 East Asian ideograph 294466 9515 E99495 East Asian ideograph 294469 94FC E993BC East Asian ideograph 29446D 951B E9949B East Asian ideograph 294471 951D E9949D East Asian ideograph 294472 951E E9949E East Asian ideograph 294474 951F E9949F East Asian ideograph 294475 9494 E99294 East Asian ideograph 294478 9522 E994A2 East Asian ideograph 294531 9528 E994A8 East Asian ideograph 294532 9531 E994B1 East Asian ideograph 29454D 9534 E994B4 East Asian ideograph 29454E 9545 E99585 East Asian ideograph 294551 9517 E99497 East Asian ideograph 29455E 94E1 E993A1 East Asian ideograph 294564 9536 E994B6 East Asian ideograph 294567 9537 E994B7 East Asian ideograph 294568 9518 E99498 East Asian ideograph 29456F 9538 E994B8 East Asian ideograph 29457A 9550 E99590 East Asian ideograph 294621 9553 E99593 East Asian ideograph 294628 9552 E99592 East Asian ideograph 294629 84E5 E893A5 East Asian ideograph 29462D 9549 E99589 East Asian ideograph 294642 94E0 E993A0 East Asian ideograph 294647 954F E9958F East Asian ideograph 29464A 953C E994BC East Asian ideograph 294656 955B E9959B East Asian ideograph 29465A 955F E9959F East Asian ideograph 294662 956A E995AA East Asian ideograph 294666 933E E98CBE East Asian ideograph 29467C 9546 E99586 East Asian ideograph 29472F 94E9 E993A9 East Asian ideograph 294732 94F4 E993B4 East Asian ideograph 294734 9566 E995A6 East Asian ideograph 29473C 9568 E995A8 East Asian ideograph 29473E 94F9 E993B9 East Asian ideograph 29474D 956B E995AB East Asian ideograph 294750 950E E9948E East Asian ideograph 294751 950F E9948F East Asian ideograph 294758 9561 E995A1 East Asian ideograph 29475E 9562 E995A2 East Asian ideograph 294760 9563 E995A3 East Asian ideograph 294767 94E7 E993A7 East Asian ideograph 294769 9564 E995A4 East Asian ideograph 294774 9571 E995B1 East Asian ideograph 29483E 9554 E99594 East Asian ideograph 29483F 9572 E995B2 East Asian ideograph 29484A 956C E995AC East Asian ideograph 29485C 9565 E995A5 East Asian ideograph 294869 9567 E995A7 East Asian ideograph 29486F 9569 E995A9 East Asian ideograph 294871 954A E9958A East Asian ideograph 294936 95F3 E997B3 East Asian ideograph 294942 9606 E99886 East Asian ideograph 294944 9603 E99883 East Asian ideograph 294948 960F E9988F East Asian ideograph 294949 9608 E99888 East Asian ideograph 29494D 9609 E99889 East Asian ideograph 29494F 960A E9988A East Asian ideograph 294950 960C E9988C East Asian ideograph 294952 960D E9988D East Asian ideograph 29495A 9612 E99892 East Asian ideograph 294960 9619 E99899 East Asian ideograph 294969 961A E9989A East Asian ideograph 29496F 95FC E997BC East Asian ideograph 294A44 9655 E99995 East Asian ideograph 294A46 9649 E99989 East Asian ideograph 294C76 9753 E99D93 East Asian ideograph 294E43 97AF E99EAF East Asian ideograph 294E54 97EA E99FAA East Asian ideograph 294E5C 97EB E99FAB East Asian ideograph 294E79 9878 E9A1B8 East Asian ideograph 294E7B 9883 E9A283 East Asian ideograph 294F23 9880 E9A280 East Asian ideograph 294F2C 988F E9A28F East Asian ideograph 294F6B 98A1 E9A2A1 East Asian ideograph 294F77 989F E9A29F East Asian ideograph 295021 98A2 E9A2A2 East Asian ideograph 295029 98A5 E9A2A5 East Asian ideograph 295030 989E E9A29E East Asian ideograph 295031 98A7 E9A2A7 East Asian ideograph 295053 98D9 E9A399 East Asian ideograph 29506C 996B E9A5AB East Asian ideograph 295132 997D E9A5BD East Asian ideograph 295153 9967 E9A5A7 East Asian ideograph 295166 9969 E9A5A9 East Asian ideograph 29516A 9990 E9A690 East Asian ideograph 29516D 9991 E9A691 East Asian ideograph 295170 998D E9A68D East Asian ideograph 295172 9994 E9A694 East Asian ideograph 295175 9993 E9A693 East Asian ideograph 295222 98E8 E9A3A8 East Asian ideograph 295263 9A75 E9A9B5 East Asian ideograph 295269 9A80 E9AA80 East Asian ideograph 29533D 9A90 E9AA90 East Asian ideograph 295340 9A92 E9AA92 East Asian ideograph 295347 9A93 E9AA93 East Asian ideograph 29535A 9A9F E9AA9F East Asian ideograph 295360 9A98 E9AA98 East Asian ideograph 295369 9A7A E9A9BA East Asian ideograph 29536A 9A9D E9AA9D East Asian ideograph 295370 9A9C E9AA9C East Asian ideograph 295379 9A96 E9AA96 East Asian ideograph 29537A 9AA2 E9AAA2 East Asian ideograph 295421 9AA3 E9AAA3 East Asian ideograph 295422 9A81 E9AA81 East Asian ideograph 295427 9A85 E9AA85 East Asian ideograph 295433 9AA7 E9AAA7 East Asian ideograph 29546D 9ACB E9AB8B East Asian ideograph 29556C 960B E9988B East Asian ideograph 295574 9604 E99884 East Asian ideograph 29563C 9B49 E9AD89 East Asian ideograph 29565D 9C82 E9B282 East Asian ideograph 295721 9C86 E9B286 East Asian ideograph 295729 9C87 E9B287 East Asian ideograph 29572B 9C90 E9B290 East Asian ideograph 295731 9C8B E9B28B East Asian ideograph 295739 9C9E E9B29E East Asian ideograph 29573C 9C91 E9B291 East Asian ideograph 29573D 9C92 E9B292 East Asian ideograph 295742 9C95 E9B295 East Asian ideograph 295756 9CA9 E9B2A9 East Asian ideograph 29575F 9CA0 E9B2A0 East Asian ideograph 29576E 9CA7 E9B2A7 East Asian ideograph 29577A 9CAD E9B2AD East Asian ideograph 29577C 9CB0 E9B2B0 East Asian ideograph 295822 9CAE E9B2AE East Asian ideograph 295825 9CBA E9B2BA East Asian ideograph 295827 9CB2 E9B2B2 East Asian ideograph 295828 9CB4 E9B2B4 East Asian ideograph 29582C 9CB1 E9B2B1 East Asian ideograph 29582D 9CB7 E9B2B7 East Asian ideograph 29582F 9CB5 E9B2B5 East Asian ideograph 295831 9CB6 E9B2B6 East Asian ideograph 295834 9CBB E9B2BB East Asian ideograph 29583E 9CCA E9B38A East Asian ideograph 29584B 9CBD E9B2BD East Asian ideograph 295854 9CC4 E9B384 East Asian ideograph 295859 9CC6 E9B386 East Asian ideograph 29585C 9CC7 E9B387 East Asian ideograph 29586A 9CCB E9B38B East Asian ideograph 29586E 9CA5 E9B2A5 East Asian ideograph 295871 9CCE E9B38E East Asian ideograph 295921 9CD9 E9B399 East Asian ideograph 295925 9CCC E9B38C East Asian ideograph 295928 9CD5 E9B395 East Asian ideograph 295929 9CA3 E9B2A3 East Asian ideograph 29592A 9CD3 E9B393 East Asian ideograph 295932 9CD8 E9B398 East Asian ideograph 295938 9CDF E9B39F East Asian ideograph 29593A 9C85 E9B285 East Asian ideograph 29593B 9C9F E9B29F East Asian ideograph 295940 9CBC E9B2BC East Asian ideograph 29594F 9CE2 E9B3A2 East Asian ideograph 295955 9C8E E9B28E East Asian ideograph 295958 9C9A E9B29A East Asian ideograph 29596B 9CA1 E9B2A1 East Asian ideograph 295A28 9E28 E9B8A8 East Asian ideograph 295A44 9E32 E9B8B2 East Asian ideograph 295A48 9E31 E9B8B1 East Asian ideograph 295A59 9E38 E9B8B8 East Asian ideograph 295A65 9E39 E9B8B9 East Asian ideograph 295A68 9E3A E9B8BA East Asian ideograph 295A70 9E48 E9B988 East Asian ideograph 295A75 9E41 E9B981 East Asian ideograph 295B2A 9E46 E9B986 East Asian ideograph 295B35 9E2B E9B8AB East Asian ideograph 295B52 9E4E E9B98E East Asian ideograph 295B59 9E5C E9B99C East Asian ideograph 295B5C 9E5B E9B99B East Asian ideograph 295B60 9E55 E9B995 East Asian ideograph 295B6B 9E57 E9B997 East Asian ideograph 295B6C 9E4B E9B98B East Asian ideograph 295B77 9E63 E9B9A3 East Asian ideograph 295B79 9E5A E9B99A East Asian ideograph 295C28 9E58 E9B998 East Asian ideograph 295C3E 9E37 E9B8B7 East Asian ideograph 295C47 9E68 E9B9A8 East Asian ideograph 295C49 9E47 E9B987 East Asian ideograph 295C57 9E6B E9B9AB East Asian ideograph 295C5B 9E6C E9B9AC East Asian ideograph 295C65 9E69 E9B9A9 East Asian ideograph 295C6C 9E6A E9B9AA East Asian ideograph 295D29 9E71 E9B9B1 East Asian ideograph 295D36 9E2C E9B8AC East Asian ideograph 295D3A 9E73 E9B9B3 East Asian ideograph 295D3B 9E42 E9B982 East Asian ideograph 295D3C 5364 E58DA4 East Asian ideograph 295D42 9E7E E9B9BE East Asian ideograph 295E6A 9EEA E9BBAA East Asian ideograph 295E7A 9EFE E9BBBE East Asian ideograph 295E7C 9F0B E9BC8B East Asian ideograph 295F2B 9F0D E9BC8D East Asian ideograph 295F7B 9F51 E9BD91 East Asian ideograph 295F7C 9F80 E9BE80 East Asian ideograph 296028 9F86 E9BE86 East Asian ideograph 29602B 9F85 E9BE85 East Asian ideograph 296062 9F9B E9BE9B East Asian ideograph 2D3021 5F0C E5BC8C East Asian ideograph 2D302D 4E17 E4B897 East Asian ideograph 2D3032 7ADD E7AB9D East Asian ideograph 2D3045 4E57 E4B997 East Asian ideograph 2D3051 5F0D E5BC8D East Asian ideograph 2D3053 4E3C E4B8BC East Asian ideograph 2D3058 4E9C E4BA9C East Asian ideograph 2D305B 4EBE E4BABE East Asian ideograph 2D3061 4EB0 E4BAB0 East Asian ideograph 2D306C 8B8E E8AE8E East Asian ideograph 2D3132 4ECF E4BB8F East Asian ideograph 2D313A 62BB E68ABB East Asian ideograph 2D3140 4F32 E4BCB2 East Asian ideograph 2D3147 5002 E58082 East Asian ideograph 2D314C 5008 E58088 East Asian ideograph 2D315F 4FA3 E4BEA3 East Asian ideograph 2D3164 7AE2 E7ABA2 East Asian ideograph 2D3165 349E E3929E East Asian ideograph (Unicode CJK Extension A) 2D3177 5E78 E5B9B8 East Asian ideograph 2D3224 7B87 E7AE87 East Asian ideograph 2D3251 510C E5848C East Asian ideograph 2D3253 50E3 E583A3 East Asian ideograph 2D325F 50BB E582BB East Asian ideograph (variant of EACC 4B325F) 2D3261 5039 E580B9 East Asian ideograph 2D3263 4FAD E4BEAD East Asian ideograph 2D3272 706E E781AE East Asian ideograph 2D3279 514E E5858E East Asian ideograph 2D3324 634C E68D8C East Asian ideograph 2D332A 4E0C E4B88C East Asian ideograph 2D3332 5190 E58690 East Asian ideograph 2D334F 5202 E58882 East Asian ideograph 2D3356 5211 E58891 East Asian ideograph 2D335F 52B5 E58AB5 East Asian ideograph 2D3366 5234 E588B4 East Asian ideograph 2D336B 5C05 E5B085 East Asian ideograph 2D3372 5265 E589A5 East Asian ideograph 2D3377 8CF8 E8B3B8 East Asian ideograph 2D3421 5294 E58A94 East Asian ideograph 2D3428 5226 E588A6 East Asian ideograph 2D342E 8274 E889B4 East Asian ideograph 2D3436 52F3 E58BB3 East Asian ideograph 2D343C 52A2 E58AA2 East Asian ideograph 2D343D 52E7 E58BA7 East Asian ideograph 2D3453 758B E7968B East Asian ideograph 2D3457 62FE E68BBE East Asian ideograph 2D3458 4EDF E4BB9F East Asian ideograph 2D345B 6607 E69887 East Asian ideograph 2D345D 5349 E58D89 East Asian ideograph 2D3464 613D E684BD East Asian ideograph 2D346A 5918 E5A498 East Asian ideograph 2D346E 5373 E58DB3 East Asian ideograph 2D3473 5374 E58DB4 East Asian ideograph 2D3539 52FE E58BBE East Asian ideograph 2D353C 6B62 E6ADA2 East Asian ideograph 2D3543 4EDD E4BB9D East Asian ideograph 2D3547 55AB E596AB East Asian ideograph 2D3556 7343 E78D83 East Asian ideograph 2D355C 5434 E590B4 East Asian ideograph 2D356A 8A36 E8A8B6 East Asian ideograph 2D3571 546A E591AA East Asian ideograph 2D3622 8AEE E8ABAE East Asian ideograph 2D362A 95A7 E996A7 East Asian ideograph 2D3632 8A7B E8A9BB East Asian ideograph 2D3642 6B38 E6ACB8 East Asian ideograph 2D3644 5557 E59597 East Asian ideograph 2D3661 6199 E68699 East Asian ideograph 2D3730 751E E7949E East Asian ideograph 2D3748 8B5F E8AD9F East Asian ideograph 2D3749 5650 E59990 East Asian ideograph 2D3758 54BD E592BD East Asian ideograph 2D3765 8086 E88286 East Asian ideograph 2D3768 56EC E59BAC East Asian ideograph 2D376F 5700 E59C80 East Asian ideograph 2D377C 962C E998AC East Asian ideograph 2D3821 962F E998AF East Asian ideograph 2D3830 573B E59CBB East Asian ideograph 2D383F 575A E59D9A East Asian ideograph 2D384A 5872 E5A1B2 East Asian ideograph 2D3852 51A2 E586A2 East Asian ideograph 2D3854 5896 E5A296 East Asian ideograph 2D386E 58CA E5A38A East Asian ideograph 2D3876 58F7 E5A3B7 East Asian ideograph 2D3877 5900 E5A480 East Asian ideograph 2D3921 591F E5A49F East Asian ideograph 2D3929 6B80 E6AE80 East Asian ideograph 2D392F 7287 E78A87 East Asian ideograph 2D3931 67F0 E69FB0 East Asian ideograph 2D3932 7AD2 E7AB92 East Asian ideograph 2D3944 511E E5849E East Asian ideograph 2D394D 59AC E5A6AC East Asian ideograph 2D3954 7385 E78E85 East Asian ideograph 2D3956 59D9 E5A799 East Asian ideograph 2D396E 4F84 E4BE84 East Asian ideograph 2D3970 5A63 E5A9A3 East Asian ideograph 2D3974 5B43 E5AD83 East Asian ideograph 2D397B 5A31 E5A8B1 East Asian ideograph 2D3A26 5A3F E5A8BF East Asian ideograph 2D3A2F 58FB E5A3BB East Asian ideograph 2D3A41 5AFA E5ABBA East Asian ideograph 2D3A47 5ACB E5AB8B East Asian ideograph 2D3A60 6588 E69688 East Asian ideograph 2D3B27 51A8 E586A8 East Asian ideograph 2D3B2A 5EBD E5BABD East Asian ideograph 2D3B33 8A67 E8A9A7 East Asian ideograph 2D3B3F 5C02 E5B082 East Asian ideograph 2D3B40 5C06 E5B086 East Asian ideograph (variant of EACC 273B40) 2D3B52 6EBA E6BABA East Asian ideograph 2D3B54 5C4A E5B18A East Asian ideograph 2D3B6E 5D17 E5B497 East Asian ideograph 2D3B77 5CE9 E5B3A9 East Asian ideograph 2D3B78 5CEF E5B3AF East Asian ideograph 2D3B79 5D8B E5B68B East Asian ideograph 2D3B7B 5D08 E5B488 East Asian ideograph 2D3C21 57FC E59FBC East Asian ideograph 2D3C22 5D10 E5B490 East Asian ideograph 2D3C26 5D18 E5B498 East Asian ideograph 2D3C36 5DE3 E5B7A3 East Asian ideograph 2D3C38 9245 E98985 East Asian ideograph 2D3C49 83F7 E88FB7 East Asian ideograph 2D3C5F 6A66 E6A9A6 East Asian ideograph 2D3C61 5E47 E5B987 East Asian ideograph 2D3C65 79CA E7A78A East Asian ideograph 2D3C6A 51FC E587BC East Asian ideograph 2D3C6D 8298 E88A98 East Asian ideograph (duplicate simplified) 2D3C6E 7240 E78980 East Asian ideograph 2D3C70 576B E59DAB East Asian ideograph 2D3C7C 83F4 E88FB4 East Asian ideograph 2D3C7D 53A2 E58EA2 East Asian ideograph 2D3C7E 53A0 E58EA0 East Asian ideograph 2D3D29 53AE E58EAE East Asian ideograph 2D3D2B 5EBF E5BABF East Asian ideograph 2D3D2D 5396 E58E96 East Asian ideograph 2D3D2F 539B E58E9B East Asian ideograph 2D3D34 5EFE E5BBBE East Asian ideograph 2D3D48 5F4A E5BD8A East Asian ideograph 2D3D4E 7BF2 E7AFB2 East Asian ideograph 2D3D50 5F5C E5BD9C East Asian ideograph 2D3D5E 9AF4 E9ABB4 East Asian ideograph 2D3D67 9015 E98095 East Asian ideograph 2D3D6C 5F93 E5BE93 East Asian ideograph 2D3D75 60EA E683AA East Asian ideograph 2D3D76 5FB4 E5BEB4 East Asian ideograph 2D3E2B 6060 E681A0 East Asian ideograph 2D3E3C 803B E880BB East Asian ideograph 2D3E40 6052 E68192 East Asian ideograph 2D3E60 6075 E681B5 East Asian ideograph 2D3F24 661A E6989A East Asian ideograph 2D3F27 6120 E684A0 East Asian ideograph 2D3F2A 5ABF E5AABF East Asian ideograph 2D3F31 6159 E68599 East Asian ideograph 2D3F3A 6185 E68685 East Asian ideograph 2D3F54 61D0 E68790 East Asian ideograph 2D3F67 621E E6889E East Asian ideograph 2D3F6E 6226 E688A6 East Asian ideograph 2D3F6F 622F E688AF East Asian ideograph 2D3F76 78A5 E7A2A5 East Asian ideograph 2D4029 5214 E58894 East Asian ideograph 2D4031 64A6 E692A6 East Asian ideograph 2D4039 67C6 E69F86 East Asian ideograph 2D403F 6255 E68995 East Asian ideograph 2D4049 67B4 E69EB4 East Asian ideograph 2D404C 6283 E68A83 East Asian ideograph 2D404F 6294 E68A94 East Asian ideograph 2D4066 63CE E68F8E East Asian ideograph 2D4067 62CF E68B8F East Asian ideograph 2D4122 6485 E69285 East Asian ideograph 2D4132 642F E690AF East Asian ideograph 2D4141 63B2 E68EB2 East Asian ideograph 2D4147 6271 E689B1 East Asian ideograph 2D4150 6428 E690A8 East Asian ideograph 2D4152 6447 E69187 East Asian ideograph 2D4153 64E3 E693A3 East Asian ideograph 2D4154 635C E68D9C East Asian ideograph 2D416E 6534 E694B4 East Asian ideograph 2D4171 62CA E68B8A East Asian ideograph 2D4176 6483 E69283 East Asian ideograph 2D4228 5117 E58497 East Asian ideograph 2D4249 53D9 E58F99 East Asian ideograph 2D424F 555F E5959F East Asian ideograph 2D4272 65E3 E697A3 East Asian ideograph 2D4277 65EE E697AE East Asian ideograph 2D4327 6630 E698B0 East Asian ideograph 2D4329 668E E69A8E East Asian ideograph 2D432E 66EC E69BAC East Asian ideograph 2D433B 6662 E699A2 East Asian ideograph 2D433E 667B E699BB East Asian ideograph 2D4343 6636 E698B6 East Asian ideograph 2D4348 6681 E69A81 East Asian ideograph 2D4349 66A6 E69AA6 East Asian ideograph 2D435F 6716 E69C96 East Asian ideograph 2D4362 6722 E69CA2 East Asian ideograph 2D4364 671E E69C9E East Asian ideograph 2D4370 6736 E69CB6 East Asian ideograph 2D4425 686E E6A1AE East Asian ideograph 2D442D 6780 E69E80 East Asian ideograph 2D4437 67FE E69FBE East Asian ideograph 2D443A 6942 E6A582 East Asian ideograph 2D4440 6822 E6A0A2 East Asian ideograph 2D4444 69C5 E6A785 East Asian ideograph 2D444B 6852 E6A192 East Asian ideograph 2D4450 8308 E88C88 East Asian ideograph 2D4461 6746 E69D86 East Asian ideograph 2D4466 6973 E6A5B3 East Asian ideograph 2D446B 6936 E6A4B6 East Asian ideograph 2D4472 68CA E6A38A East Asian ideograph 2D4474 690D E6A48D East Asian ideograph (variant of EACC 214474) 2D447D 684C E6A18C East Asian ideograph 2D4539 6406 E69086 East Asian ideograph 2D453A 6760 E69DA0 East Asian ideograph 2D4543 6901 E6A481 East Asian ideograph 2D454E 697D E6A5BD East Asian ideograph 2D4550 58AB E5A2AB East Asian ideograph 2D4562 681D E6A09D East Asian ideograph 2D4564 68B9 E6A2B9 East Asian ideograph 2D4569 6AC9 E6AB89 East Asian ideograph 2D4574 5FFB E5BFBB East Asian ideograph 2D4621 61FD E687BD East Asian ideograph 2D462C 6B7A E6ADBA East Asian ideograph 2D4647 6BD8 E6AF98 East Asian ideograph 2D466D 51B3 E586B3 East Asian ideograph 2D4674 51B2 E586B2 East Asian ideograph 2D467C 6CB2 E6B2B2 East Asian ideograph 2D4729 6D29 E6B4A9 East Asian ideograph 2D4730 51B5 E586B5 East Asian ideograph 2D4735 6C4E E6B18E East Asian ideograph 2D4738 6FFC E6BFBC East Asian ideograph 2D4746 6C79 E6B1B9 East Asian ideograph 2D4756 6F94 E6BE94 East Asian ideograph 2D475B 51C9 E58789 East Asian ideograph 2D475F 51C4 E58784 East Asian ideograph 2D4768 6D45 E6B585 East Asian ideograph (variant of EACC 274768) 2D4829 51CF E5878F East Asian ideograph 2D482F 6E07 E6B887 East Asian ideograph 2D4844 6FD5 E6BF95 East Asian ideograph 2D4845 6E29 E6B8A9 East Asian ideograph 2D4850 6EDA E6BB9A East Asian ideograph 2D4853 7001 E78081 East Asian ideograph 2D485C 6F44 E6BD84 East Asian ideograph 2D486B 6F82 E6BE82 East Asian ideograph 2D486E 6F97 E6BE97 East Asian ideograph 2D4874 6F5C E6BD9C East Asian ideograph 2D493A 702C E780AC East Asian ideograph 2D4947 7AC8 E7AB88 East Asian ideograph 2D4954 70F1 E783B1 East Asian ideograph 2D4956 70B0 E782B0 East Asian ideograph 2D496B 70DF E7839F East Asian ideograph 2D4971 70A4 E782A4 East Asian ideograph 2D4A26 713C E784BC East Asian ideograph 2D4A28 8B8C E8AE8C East Asian ideograph 2D4A34 718F E7868F East Asian ideograph 2D4A3B 4E89 E4BA89 East Asian ideograph 2D4A45 5C12 E5B092 East Asian ideograph 2D4A46 58BB E5A2BB East Asian ideograph 2D4A58 7F9D E7BE9D East Asian ideograph 2D4A5B 7282 E78A82 East Asian ideograph 2D4A60 6C02 E6B082 East Asian ideograph 2D4B22 736A E78DAA East Asian ideograph 2D4B35 73C9 E78F89 East Asian ideograph 2D4B3F 73CE E78F8E East Asian ideograph 2D4B43 746F E791AF East Asian ideograph 2D4B45 6BEC E6AFAC East Asian ideograph 2D4B5B 78AF E7A2AF East Asian ideograph 2D4B71 7F3E E7BCBE East Asian ideograph 2D4B72 7506 E79486 East Asian ideograph 2D4C2C 583A E5A0BA East Asian ideograph 2D4C2D 756E E795AE East Asian ideograph 2D4C35 7567 E795A7 East Asian ideograph 2D4C3C 53E0 E58FA0 East Asian ideograph 2D4C3E 758E E7968E East Asian ideograph 2D4C5D 7661 E799A1 East Asian ideograph 2D4C7E 4F70 E4BDB0 East Asian ideograph 2D4D21 7681 E79A81 East Asian ideograph 2D4D34 76C7 E79B87 East Asian ideograph 2D4D38 76D7 E79B97 East Asian ideograph 2D4D4F 771F E79C9F East Asian ideograph 2D4D5F 7741 E79D81 East Asian ideograph 2D4D65 53E1 E58FA1 East Asian ideograph 2D4D6D 7792 E79E92 East Asian ideograph 2D4D71 7719 E79C99 East Asian ideograph 2D4E24 6998 E6A698 East Asian ideograph 2D4E33 78AA E7A2AA East Asian ideograph 2D4E5B 945B E9919B East Asian ideograph 2D4E79 5FA1 E5BEA1 East Asian ideograph 2D4F29 9F9D E9BE9D East Asian ideograph 2D4F37 7980 E7A680 East Asian ideograph 2D4F3E 7A3E E7A8BE East Asian ideograph 2D4F41 4E69 E4B9A9 East Asian ideograph 2D4F45 9834 E9A0B4 East Asian ideograph 2D4F48 7A42 E7A982 East Asian ideograph 2D4F5E 7AB0 E7AAB0 East Asian ideograph 2D4F6B 7AF8 E7ABB8 East Asian ideograph 2D4F7C 7B5E E7AD9E East Asian ideograph 2D502B 693E E6A4BE East Asian ideograph 2D502D 7B5D E7AD9D East Asian ideograph 2D5036 84D1 E89391 East Asian ideograph 2D504F 7C58 E7B198 East Asian ideograph 2D506F 7CFA E7B3BA East Asian ideograph 2D5124 5E0B E5B88B East Asian ideograph 2D5129 7D25 E7B4A5 East Asian ideograph 2D514A 6DD6 E6B796 East Asian ideograph 2D514D 7D2C E7B4AC East Asian ideograph 2D516A 7DB3 E7B6B3 East Asian ideograph 2D5179 7E62 E7B9A2 East Asian ideograph 2D517D 7D99 E7B699 East Asian ideograph 2D5228 9262 E989A2 East Asian ideograph 2D522B 9475 E991B5 East Asian ideograph 2D5232 8FA0 E8BEA0 East Asian ideograph 2D5233 7F78 E7BDB8 East Asian ideograph 2D5238 898A E8A68A East Asian ideograph 2D5240 7FA1 E7BEA1 East Asian ideograph 2D5241 7FA3 E7BEA3 East Asian ideograph 2D524A 7FC4 E7BF84 East Asian ideograph 2D5259 98DC E9A39C East Asian ideograph 2D525D 6537 E694B7 East Asian ideograph 2D5265 79D0 E7A790 East Asian ideograph 2D5267 79CF E7A78F East Asian ideograph 2D526B 7085 E78285 East Asian ideograph 2D526C 8EAD E8BAAD East Asian ideograph 2D527B 8074 E881B4 East Asian ideograph 2D5321 7C9B E7B29B East Asian ideograph 2D5323 5B8D E5AE8D East Asian ideograph 2D532C 6BD3 E6AF93 East Asian ideograph 2D5340 812C E884AC East Asian ideograph 2D5344 8107 E88487 East Asian ideograph 2D534B 80F7 E883B7 East Asian ideograph 2D535E 8193 E88693 East Asian ideograph 2D5361 811A E8849A East Asian ideograph 2D537E 81C8 E88788 East Asian ideograph 2D5421 9AD7 E9AB97 East Asian ideograph 2D5424 5367 E58DA7 East Asian ideograph 2D5434 64E7 E693A7 East Asian ideograph 2D5440 6841 E6A181 East Asian ideograph 2D5446 8229 E888A9 East Asian ideograph 2D5447 824A E8898A East Asian ideograph 2D5461 8306 E88C86 East Asian ideograph 2D5468 6959 E6A599 East Asian ideograph 2D546F 83C0 E88F80 East Asian ideograph 2D5476 8318 E88C98 East Asian ideograph 2D5529 830E E88C8E East Asian ideograph (variant of EACC 275529) 2D552D 8358 E88D98 East Asian ideograph 2D552E 82FA E88BBA East Asian ideograph (variant of EACC 227C68) 2D5547 837D E88DBD East Asian ideograph 2D5550 585F E5A19F East Asian ideograph 2D5554 855A E8959A East Asian ideograph 2D555A 8386 E88E86 East Asian ideograph 2D555B 8385 E88E85 East Asian ideograph 2D5561 76D6 E79B96 East Asian ideograph 2D5573 83D4 E88F94 East Asian ideograph 2D562E 8024 E880A4 East Asian ideograph 2D5635 846F E891AF East Asian ideograph 2D563C 8613 E89893 East Asian ideograph 2D563F 6A97 E6AA97 East Asian ideograph 2D5664 9F04 E9BC84 East Asian ideograph 2D5675 9F05 E9BC85 East Asian ideograph 2D567B 8717 E89C97 East Asian ideograph 2D572B 8797 E89E97 East Asian ideograph 2D572D 8748 E89D88 East Asian ideograph 2D5730 87C7 E89F87 East Asian ideograph 2D573B 60F7 E683B7 East Asian ideograph 2D5749 885E E8A19E East Asian ideograph 2D5758 890E E8A48E East Asian ideograph 2D575B 886E E8A1AE East Asian ideograph 2D5760 5E2C E5B8AC East Asian ideograph 2D5763 88E1 E8A3A1 East Asian ideograph 2D5773 7D5D E7B59D East Asian ideograph 2D5831 89A7 E8A6A7 East Asian ideograph 2D5833 752A E794AA East Asian ideograph 2D5836 89E6 E8A7A6 East Asian ideograph 2D584D 548F E5928F East Asian ideograph 2D5856 612C E684AC East Asian ideograph 2D5927 8ACC E8AB8C East Asian ideograph 2D592C 8B01 E8AC81 East Asian ideograph 2D593D 8AE9 E8ABA9 East Asian ideograph 2D5941 5629 E598A9 East Asian ideograph 2D594C 8B72 E8ADB2 East Asian ideograph 2D594F 8B83 E8AE83 East Asian ideograph 2D5957 7AEA E7ABAA East Asian ideograph 2D5959 8277 E889B7 East Asian ideograph 2D595F 732A E78CAA East Asian ideograph 2D5960 72B2 E78AB2 East Asian ideograph 2D5963 8C98 E8B298 East Asian ideograph 2D5965 72F8 E78BB8 East Asian ideograph 2D5A34 8CAD E8B2AD East Asian ideograph 2D5A3D 8CDB E8B39B East Asian ideograph 2D5A48 8D71 E8B5B1 East Asian ideograph 2D5A4E 8D82 E8B682 East Asian ideograph 2D5A5F 8E5F E8B99F East Asian ideograph 2D5A63 8DE5 E8B7A5 East Asian ideograph 2D5A7E 8E7B E8B9BB East Asian ideograph 2D5B2F 8EB1 E8BAB1 East Asian ideograph 2D5B42 8F19 E8BC99 East Asian ideograph 2D5B43 8EFD E8BBBD East Asian ideograph 2D5B5D 8FA2 E8BEA2 East Asian ideograph 2D5B5E 8FA7 E8BEA7 East Asian ideograph 2D5B69 5EF5 E5BBB5 East Asian ideograph 2D5B7A 8FEF E8BFAF East Asian ideograph 2D5C2F 8FE8 E8BFA8 East Asian ideograph 2D5C3F 5FA7 E5BEA7 East Asian ideograph 2D5C40 5FA8 E5BEA8 East Asian ideograph 2D5C48 9013 E98093 East Asian ideograph 2D5C5A 8FE9 E8BFA9 East Asian ideograph 2D5C5B 9089 E98289 East Asian ideograph 2D5C74 96A3 E99AA3 East Asian ideograph 2D5D23 9167 E985A7 East Asian ideograph 2D5D2F 9196 E98696 East Asian ideograph 2D5D56 920E E9888E East Asian ideograph 2D5D65 8216 E88896 East Asian ideograph 2D5D68 8021 E880A1 East Asian ideograph 2D5E21 9418 E99098 East Asian ideograph 2D5E24 7145 E78585 East Asian ideograph 2D5E26 7194 E78694 East Asian ideograph 2D5E28 93C1 E98F81 East Asian ideograph 2D5E3B 92B9 E98AB9 East Asian ideograph 2D5E43 92F3 E98BB3 East Asian ideograph 2D5E4A 945A E9919A East Asian ideograph 2D5E50 9587 E99687 East Asian ideograph 2D5E61 6FF6 E6BFB6 East Asian ideograph 2D5F28 9665 E999A5 East Asian ideograph 2D5F2C 5826 E5A0A6 East Asian ideograph 2D5F2D 964F E9998F East Asian ideograph 2D5F2E 661C E6989C East Asian ideograph 2D5F35 78D2 E7A392 East Asian ideograph 2D5F3B 96A0 E99AA0 East Asian ideograph 2D5F43 9CEB E9B3AB East Asian ideograph 2D5F46 96BD E99ABD East Asian ideograph 2D5F4B 96D1 E99B91 East Asian ideograph 2D5F4C 9DC4 E9B784 East Asian ideograph 2D5F63 873A E89CBA East Asian ideograph 2D5F73 975A E99D9A East Asian ideograph (unrelated variant of EACC 234C76) 2D6021 978C E99E8C East Asian ideograph 2D602D 976D E99DAD East Asian ideograph 2D6030 97EE E99FAE East Asian ideograph 2D6056 980B E9A08B East Asian ideograph 2D6078 9920 E9A4A0 East Asian ideograph 2D6079 8218 E88898 East Asian ideograph 2D6132 99EE E9A7AE East Asian ideograph 2D6134 99DE E9A79E East Asian ideograph 2D6147 99C8 E9A788 East Asian ideograph 2D6159 9AC4 E9AB84 East Asian ideograph 2D615A 8EC6 E8BB86 East Asian ideograph 2D6162 9A0C E9A88C East Asian ideograph 2D616A 6B1D E6AC9D East Asian ideograph 2D6222 9C0C E9B08C East Asian ideograph 2D6229 9C53 E9B193 East Asian ideograph 2D622C 9F08 E9BC88 East Asian ideograph 2D6235 9D76 E9B5B6 East Asian ideograph 2D6241 9D5E E9B59E East Asian ideograph 2D6251 5869 E5A1A9 East Asian ideograph 2D6252 78B1 E7A2B1 East Asian ideograph 2D625F 83FB E88FBB East Asian ideograph 2D6260 5E85 E5BA85 East Asian ideograph 2D6262 9EC4 E9BB84 East Asian ideograph 2D6275 76B7 E79AB7 East Asian ideograph 2D627E 658B E6968B East Asian ideograph 2D632B 5C28 E5B0A8 East Asian ideograph 2D632D 4E80 E4BA80 East Asian ideograph 2D6B33 5231 E588B1 East Asian ideograph 2D6B5F 5273 E589B3 East Asian ideograph 2D6F7D 8123 E884A3 East Asian ideograph 2D7143 55E2 E597A2 East Asian ideograph 2D7164 55D4 E59794 East Asian ideograph (variant of EACC 217164) 2D7345 56D3 E59B93 East Asian ideograph 2D753A 9654 E99994 East Asian ideograph 2D7552 579B E59E9B East Asian ideograph 2D7A44 598D E5A68D East Asian ideograph 2D7E6A 51A4 E586A4 East Asian ideograph 2E257B 5D1F E5B49F East Asian ideograph 2E284C 5ECF E5BB8F East Asian ideograph 2E2968 5F51 E5BD91 East Asian ideograph 2E2B5B 605A E6819A East Asian ideograph 2E2B74 609B E6829B East Asian ideograph 2E2D79 6128 E684A8 East Asian ideograph 2E2F7A 6738 E69CB8 East Asian ideograph 2E2F7C 634D E68D8D East Asian ideograph 2E3028 640B E6908B East Asian ideograph 2E313A 6332 E68CB2 East Asian ideograph 2E3144 651F E6949F East Asian ideograph 2E3172 5261 E589A1 East Asian ideograph 2E3328 6528 E694A8 East Asian ideograph 2E337B 630E E68C8E East Asian ideograph 2E363F 52C5 E58B85 East Asian ideograph 2E3645 69E3 E6A7A3 East Asian ideograph 2E3654 657F E695BF East Asian ideograph 2E3729 65B5 E696B5 East Asian ideograph 2E3870 714A E7858A East Asian ideograph 2E3936 66CD E69B8D East Asian ideograph 2E3A26 661D E6989D East Asian ideograph 2E3A33 80AD E882AD East Asian ideograph 2E3B22 690F E6A48F East Asian ideograph 2E3D62 684A E6A18A East Asian ideograph 2E3D73 7A1C E7A89C East Asian ideograph 2E3E3F 7BA0 E7AEA0 East Asian ideograph 2E3F2D 69B2 E6A6B2 East Asian ideograph 2E403D 6AC1 E6AB81 East Asian ideograph 2E4174 6AA9 E6AAA9 East Asian ideograph 2E4670 6CD0 E6B390 East Asian ideograph 2E4731 6C73 E6B1B3 East Asian ideograph 2E4739 6C67 E6B1A7 East Asian ideograph (variant of EACC 224739) 2E4747 6D64 E6B5A4 East Asian ideograph 2E4873 6FA3 E6BEA3 East Asian ideograph 2E492F 6CD9 E6B399 East Asian ideograph 2E493B 6E7C E6B9BC East Asian ideograph 2E4A6B 6EA6 E6BAA6 East Asian ideograph 2E4C35 6DE5 E6B7A5 East Asian ideograph 2E4C7B 6E86 E6BA86 East Asian ideograph 2E4D3D 6D38 E6B4B8 East Asian ideograph 2E4E41 7032 E780B2 East Asian ideograph 2E4E56 9800 E9A080 East Asian ideograph 2E4E5D 6DE0 E6B7A0 East Asian ideograph 2E4E72 6F74 E6BDB4 East Asian ideograph 2E506D 70B1 E782B1 East Asian ideograph 2E525D 715B E7859B East Asian ideograph 2E5452 71FE E787BE East Asian ideograph 2E5A40 73B3 E78EB3 East Asian ideograph 2E5A78 74A2 E792A2 East Asian ideograph 2E5F6F 75B8 E796B8 East Asian ideograph 2E604A 7690 E79A90 East Asian ideograph 2E6060 76A1 E79AA1 East Asian ideograph 2E624F 772D E79CAD East Asian ideograph 2E625F 77C1 E79F81 East Asian ideograph 2E684E 8020 E880A0 East Asian ideograph 2E686F 7A19 E7A899 East Asian ideograph 2E6B54 7B04 E7AC84 East Asian ideograph 2E6C26 7BE0 E7AFA0 East Asian ideograph 2E6C27 7B2E E7ACAE East Asian ideograph 2E6C3E 7B59 E7AD99 East Asian ideograph 2E6C46 7BE6 E7AFA6 East Asian ideograph 2E6F35 6CD4 E6B394 East Asian ideograph 2E6F43 9908 E9A488 East Asian ideograph 2E7062 7D4F E7B58F East Asian ideograph 2E715A 7E27 E7B8A7 East Asian ideograph 2E717C 7D63 E7B5A3 East Asian ideograph 2E7328 5FAD E5BEAD East Asian ideograph 2E735D 7D56 E7B596 East Asian ideograph 2E7374 7E89 E7BA89 East Asian ideograph 2E742E 7516 E79496 East Asian ideograph 2E7431 7F48 E7BD88 East Asian ideograph 2E7450 7F82 E7BE82 East Asian ideograph 2E7451 7F58 E7BD98 East Asian ideograph 2E765F 8037 E880B7 East Asian ideograph 2E7C2E 831C E88C9C East Asian ideograph 2E7D24 83F0 E88FB0 East Asian ideograph 2F252D 6A22 E6A8A2 East Asian ideograph 2F252E 8507 E89487 East Asian ideograph 2F2A5A 868B E89A8B East Asian ideograph (unrelated variant of EACC 23293D) 2F2A64 87B5 E89EB5 East Asian ideograph 2F2A73 87CA E89F8A East Asian ideograph 2F2D79 88B5 E8A2B5 East Asian ideograph 2F2F5D 7E48 E7B988 East Asian ideograph 2F312B 89BB E8A6BB East Asian ideograph 2F3143 89F5 E8A7B5 East Asian ideograph (unrelated variant of EACC 23315E) 2F317D 8A7E E8A9BE East Asian ideograph 2F3363 8B1A E8AC9A East Asian ideograph 2F3639 8C7C E8B1BC East Asian ideograph 2F3833 8D91 E8B691 East Asian ideograph 2F386F 8DD7 E8B797 East Asian ideograph 2F3A5E 8E6E E8B9AE East Asian ideograph 2F3B63 5E32 E5B8B2 East Asian ideograph 2F3C2D 8F3C E8BCBC East Asian ideograph 2F3D5D 900E E9808E East Asian ideograph 2F4053 914F E9858F East Asian ideograph 2F4231 8019 E88099 East Asian ideograph (unrelated variant of EACC 215266) 2F445F 941A E9909A East Asian ideograph 2F4A2E 90B4 E982B4 East Asian ideograph 2F4A4A 5F8F E5BE8F East Asian ideograph 2F5158 7CC7 E7B387 East Asian ideograph 2F5476 9AE1 E9ABA1 East Asian ideograph 2F575F 9ABE E9AABE East Asian ideograph 2F585C 9C51 E9B191 East Asian ideograph (unrelated variant of EACC 235945) 2F5870 9C1B E9B09B East Asian ideograph 2F5973 9CEC E9B3AC East Asian ideograph 2F5A48 9D44 E9B584 East Asian ideograph 2F5D3C 6EF7 E6BBB7 East Asian ideograph 2F5D49 9EA4 E9BAA4 East Asian ideograph 2F5D5C 730A E78C8A East Asian ideograph 2F5E42 9EC9 E9BB89 East Asian ideograph 2F5E66 9B12 E9AC92 East Asian ideograph 2F5E7D 6641 E69981 East Asian ideograph 2F5F45 86A1 E89AA1 East Asian ideograph 333021 58F9 E5A3B9 East Asian ideograph 33303A 8FFA E8BFBA East Asian ideograph 33304C 4E79 E4B9B9 East Asian ideograph 333051 8CB3 E8B2B3 East Asian ideograph 333060 4EAF E4BAAF East Asian ideograph 333066 5FC8 E5BF88 East Asian ideograph 33306C 8B90 E8AE90 East Asian ideograph 333078 5F77 E5BDB7 East Asian ideograph 33314C 5FA0 E5BEA0 East Asian ideograph 333240 4FFB E4BFBB East Asian ideograph 333251 5FBA E5BEBA East Asian ideograph 33325D 4FA1 E4BEA1 East Asian ideograph 33327A 5150 E58590 East Asian ideograph 333323 4E21 E4B8A1 East Asian ideograph 33332A 4E93 E4BA93 East Asian ideograph 333330 518A E5868A East Asian ideograph 33333C 6C37 E6B0B7 East Asian ideograph 333344 51DB E5879B East Asian ideograph 33334E 51FE E587BE East Asian ideograph 333377 5270 E589B0 East Asian ideograph 33337B 52E6 E58BA6 East Asian ideograph 333421 91FC E987BC East Asian ideograph 333423 5264 E589A4 East Asian ideograph 333428 523C E588BC East Asian ideograph 333475 9628 E998A8 East Asian ideograph 33347D 53C1 E58F81 East Asian ideograph 333529 53DC E58F9C East Asian ideograph 33354E 608B E6828B East Asian ideograph 333556 9A03 E9A883 East Asian ideograph 33355C 5449 E59189 East Asian ideograph 333564 5415 E59095 East Asian ideograph 333573 8656 E89996 East Asian ideograph 333623 9F69 E9BDA9 East Asian ideograph 33362A 9B28 E9ACA8 East Asian ideograph 333642 8A92 E8AA92 East Asian ideograph 33365A 5405 E59085 East Asian ideograph 333768 8FF4 E8BFB4 East Asian ideograph 33386E 576F E59DAF East Asian ideograph 33392F 9029 E980A9 East Asian ideograph 333944 5B2D E5ACAD East Asian ideograph 333963 59C9 E5A789 East Asian ideograph 333C21 7895 E7A295 East Asian ideograph 333C52 8CEC E8B3AC East Asian ideograph 333D28 53A8 E58EA8 East Asian ideograph 333D2A 5E83 E5BA83 East Asian ideograph 333D2F 5E81 E5BA81 East Asian ideograph 333D42 7D43 E7B583 East Asian ideograph 333D48 5F3A E5BCBA East Asian ideograph 333D4C 7030 E780B0 East Asian ideograph 333D54 4EFD E4BBBD East Asian ideograph 333D75 5FB3 E5BEB3 East Asian ideograph 333E7D 7652 E79992 East Asian ideograph 333F22 6168 E685A8 East Asian ideograph (variant of EACC 213F22) 333F24 7718 E79C98 East Asian ideograph 333F3F 51F4 E587B4 East Asian ideograph 333F55 5B3E E5ACBE East Asian ideograph 333F58 61F4 E687B4 East Asian ideograph 333F5B 6133 E684B3 East Asian ideograph 334045 629B E68A9B East Asian ideograph 334050 62D5 E68B95 East Asian ideograph 334131 6425 E690A5 East Asian ideograph 33417E 629E E68A9E East Asian ideograph 33422A 62E1 E68BA1 East Asian ideograph 33423D 53CE E58F8E East Asian ideograph 334243 52B9 E58AB9 East Asian ideograph 334244 6559 E69599 East Asian ideograph 334256 6B5B E6AD9B East Asian ideograph 334260 89D4 E8A794 East Asian ideograph 334277 65EF E697AF East Asian ideograph 33432F 664B E6998B East Asian ideograph 33433E 95C7 E99787 East Asian ideograph 334342 7156 E78596 East Asian ideograph 334357 6702 E69C82 East Asian ideograph 334369 5932 E5A4B2 East Asian ideograph 334425 76C3 E79B83 East Asian ideograph 334449 6144 E68584 East Asian ideograph 334527 6918 E6A498 East Asian ideograph 334550 7F47 E7BD87 East Asian ideograph 33456D 826A E889AA East Asian ideograph 334621 8B99 E8AE99 East Asian ideograph 334633 6B8B E6AE8B East Asian ideograph (variant of EACC 274633) 33463C 6BBB E6AEBB East Asian ideograph 334665 6C61 E6B1A1 East Asian ideograph 334674 76C5 E79B85 East Asian ideograph 33467A 6CA1 E6B2A1 East Asian ideograph 334729 6E2B E6B8AB East Asian ideograph 334730 6E5F E6B99F East Asian ideograph 334740 6D1A E6B49A East Asian ideograph 33474A 6D1F E6B49F East Asian ideograph 334755 6FEC E6BFAC East Asian ideograph 33475E 6FB9 E6BEB9 East Asian ideograph 33475F 60BD E682BD East Asian ideograph 33476F 6D44 E6B584 East Asian ideograph 334770 5A6C E5A9AC East Asian ideograph 33477B 904A E9818A East Asian ideograph 33483B 6CDD E6B39D East Asian ideograph 33485E 67D2 E69F92 East Asian ideograph 33492E 6F81 E6BE81 East Asian ideograph 33494A 70D6 E78396 East Asian ideograph 334968 7133 E784B3 East Asian ideograph 33496A 934A E98D8A East Asian ideograph 334A28 91BC E986BC East Asian ideograph 334A58 89DD E8A79D East Asian ideograph 334C2C 754D E7958D East Asian ideograph 334C36 753B E794BB East Asian ideograph (variant of EACC 274C36) 334C37 8E6F E8B9AF East Asian ideograph 334C3E 8E08 E8B888 East Asian ideograph 334C7B 767A E799BA East Asian ideograph 334E37 784E E7A18E East Asian ideograph 334E73 79A5 E7A6A5 East Asian ideograph 334F37 5EE9 E5BBA9 East Asian ideograph 334F3A 7A49 E7A989 East Asian ideograph 334F59 7A93 E7AA93 East Asian ideograph 334F5E 7A91 E7AA91 East Asian ideograph 334F71 54B2 E592B2 East Asian ideograph 33502A 9257 E98997 East Asian ideograph 33502B 724B E7898B East Asian ideograph 335065 7A45 E7A985 East Asian ideograph 33512E 7E8D E7BA8D East Asian ideograph 33513C 7D4C E7B58C East Asian ideograph 335147 7EEE E7BBAE East Asian ideograph 33514C 7DD1 E7B791 East Asian ideograph 33515C 7DAB E7B6AB East Asian ideograph 33516B 7DD0 E7B790 East Asian ideograph 33516D 6374 E68DB4 East Asian ideograph 335172 7D89 E7B689 East Asian ideograph 335223 7E8E E7BA8E East Asian ideograph 335228 94B5 E992B5 East Asian ideograph 335230 7F6E E7BDAE East Asian ideograph (variant of EACC 215230) 335234 99E1 E9A7A1 East Asian ideograph 335238 8989 E8A689 East Asian ideograph 33523F 8B71 E8ADB1 East Asian ideograph 335259 7E59 E7B999 East Asian ideograph 33525B 71FF E787BF East Asian ideograph 335276 8061 E881A1 East Asian ideograph 335333 80BB E882BB East Asian ideograph 335347 81D9 E88799 East Asian ideograph 33537D 9AD5 E9AB95 East Asian ideograph 335445 67C1 E69F81 East Asian ideograph 335446 8221 E888A1 East Asian ideograph 335461 6CD6 E6B396 East Asian ideograph 335561 8462 E891A2 East Asian ideograph 335568 8406 E89086 East Asian ideograph 335577 8602 E89882 East Asian ideograph 335635 85AC E896AC East Asian ideograph 335652 87C1 E89F81 East Asian ideograph 33567C 8671 E899B1 East Asian ideograph 33572E 880E E8A08E East Asian ideograph 335738 880F E8A08F East Asian ideograph 335760 88E0 E8A3A0 East Asian ideograph 335772 8943 E8A583 East Asian ideograph 335773 88B4 E8A2B4 East Asian ideograph 335821 97C8 E99F88 East Asian ideograph 335830 658D E6968D East Asian ideograph 335834 89E7 E8A7A7 East Asian ideograph 335941 54D7 E59397 East Asian ideograph 335958 8C4A E8B18A East Asian ideograph 335A7B 8E28 E8B8A8 East Asian ideograph 335B70 5EF8 E5BBB8 East Asian ideograph 335D23 8A76 E8A9B6 East Asian ideograph 335D3B 57DC E59F9C East Asian ideograph 335E21 9221 E988A1 East Asian ideograph 335E2F 5257 E58997 East Asian ideograph 335E3D 9244 E98984 East Asian ideograph 335E42 9452 E99192 East Asian ideograph 335F34 90C4 E98384 East Asian ideograph 335F3D 96B7 E99AB7 East Asian ideograph 335F43 9D08 E9B488 East Asian ideograph 335F49 9D70 E9B5B0 East Asian ideograph 335F73 9759 E99D99 East Asian ideograph 336054 985B E9A19B East Asian ideograph 336058 9855 E9A195 East Asian ideograph 336062 98C3 E9A383 East Asian ideograph 33615A 8EB0 E8BAB0 East Asian ideograph 336162 9A23 E9A8A3 East Asian ideograph 336179 9C7B E9B1BB East Asian ideograph 33625E 9EAA E9BAAA East Asian ideograph 33625F 8534 E894B4 East Asian ideograph 336275 76BC E79ABC East Asian ideograph 33627D 6589 E69689 East Asian ideograph 336321 6B6F E6ADAF East Asian ideograph 33632B 7ADC E7AB9C East Asian ideograph 336B33 524F E5898F East Asian ideograph 336C6B 6031 E680B1 East Asian ideograph 337345 9F67 E9BDA7 East Asian ideograph 342453 5CBD E5B2BD East Asian ideograph 343875 5FDE E5BF9E East Asian ideograph 343A5B 572C E59CAC East Asian ideograph 343E38 7BDA E7AF9A East Asian ideograph 344138 8022 E880A2 East Asian ideograph 344177 8264 E889A4 East Asian ideograph 34492F 6D34 E6B4B4 East Asian ideograph 345175 7162 E785A2 East Asian ideograph 345452 7118 E78498 East Asian ideograph 345D6B 756D E795AD East Asian ideograph 345E3B 80AC E882AC East Asian ideograph 345E47 75FE E797BE East Asian ideograph 346126 6900 E6A480 East Asian ideograph 346622 589D E5A29D East Asian ideograph 34682A 7C7C E7B1BC East Asian ideograph 34715A 7E1A E7B89A East Asian ideograph 347431 58DC E5A39C East Asian ideograph 34782A 90C5 E98385 East Asian ideograph 347D24 83C7 E88F87 East Asian ideograph 35344D 8B5B E8AD9B East Asian ideograph 35347B 8B2D E8ACAD East Asian ideograph 354156 91BE E986BE East Asian ideograph 355053 98C8 E9A388 East Asian ideograph 355739 9C76 E9B1B6 East Asian ideograph 355D5C 8C8E E8B28E East Asian ideograph 355E76 82BE E88ABE East Asian ideograph 39302D 534B E58D8B East Asian ideograph 39303A 5EFC E5BBBC East Asian ideograph 39304C 4E81 E4BA81 East Asian ideograph 393052 65BC E696BC East Asian ideograph 393054 4F0D E4BC8D East Asian ideograph 393078 9AE3 E9ABA3 East Asian ideograph 393246 4F1D E4BC9D East Asian ideograph 393428 5227 E588A7 East Asian ideograph 393439 61C3 E68783 East Asian ideograph 39345B 965E E9999E East Asian ideograph 393460 604A E6818A East Asian ideograph 393573 5611 E59891 East Asian ideograph 393577 9FA2 E9BEA2 East Asian ideograph 39365A 8AE0 E8ABA0 East Asian ideograph 39365E 559E E5969E East Asian ideograph 393770 56F2 E59BB2 East Asian ideograph 393944 59B3 E5A6B3 East Asian ideograph 393B39 5BF3 E5AFB3 East Asian ideograph 393B6E 5C97 E5B297 East Asian ideograph 393B78 5CC4 E5B384 East Asian ideograph (duplicate simplified) 393C52 8D26 E8B4A6 East Asian ideograph 393D6F 8907 E8A487 East Asian ideograph 393E47 8CC9 E8B389 East Asian ideograph 393E4C 6142 E68582 East Asian ideograph 393E61 60AA E682AA East Asian ideograph 393E7D 7609 E79889 East Asian ideograph 394022 6443 E69183 East Asian ideograph 394042 646D E691AD East Asian ideograph 39417C 62E0 E68BA0 East Asian ideograph 394243 4FF2 E4BFB2 East Asian ideograph 39424F 5554 E59594 East Asian ideograph 394330 6644 E69984 East Asian ideograph 394444 8988 E8A688 East Asian ideograph 39447D 6AC2 E6AB82 East Asian ideograph 39456D 826B E889AB East Asian ideograph 394634 6B96 E6AE96 East Asian ideograph (variant of EACC 214634) 394735 6C3E E6B0BE East Asian ideograph 39476F 51C0 E58780 East Asian ideograph 39483B 9061 E981A1 East Asian ideograph 394928 6D5C E6B59C East Asian ideograph 394944 6B12 E6AC92 East Asian ideograph 394956 792E E7A4AE East Asian ideograph 394A60 9AE6 E9ABA6 East Asian ideograph 394C2D 7546 E79586 East Asian ideograph 395050 7BED E7AFAD East Asian ideograph 39505B 9B3B E9ACBB East Asian ideograph 395063 9939 E9A4B9 East Asian ideograph 395179 7D75 E7B5B5 East Asian ideograph 395230 5BD8 E5AF98 East Asian ideograph 39525B 66DC E69B9C East Asian ideograph 39526B 7094 E78294 East Asian ideograph 395477 85A6 E896A6 East Asian ideograph 39553C 5D0B E5B48B East Asian ideograph 395564 6726 E69CA6 East Asian ideograph 395568 83DD E88F9D East Asian ideograph 395577 854B E8958B East Asian ideograph 39563C 56CC E59B8C East Asian ideograph 395643 4E55 E4B995 East Asian ideograph 395652 87A1 E89EA1 East Asian ideograph 395773 7DAF E7B6AF East Asian ideograph 395821 97E4 E99FA4 East Asian ideograph 395829 69FB E6A7BB East Asian ideograph 39593F 8A3C E8A8BC East Asian ideograph 395A2F 58F2 E5A3B2 East Asian ideograph 395A36 983C E9A0BC East Asian ideograph 395D23 91BB E986BB East Asian ideograph 395E2F 5277 E589B7 East Asian ideograph 395E3D 9295 E98A95 East Asian ideograph 395E42 9274 E989B4 East Asian ideograph 395E6F 7A7D E7A9BD East Asian ideograph 395E71 5742 E59D82 East Asian ideograph 395F49 5F6B E5BDAB East Asian ideograph 395F68 8987 E8A687 East Asian ideograph 396074 55B0 E596B0 East Asian ideograph 396167 9B2A E9ACAA East Asian ideograph 396179 5C20 E5B0A0 East Asian ideograph 396223 9BFD E9AFBD East Asian ideograph (variant of EACC 216223) 396B2F 521F E5889F East Asian ideograph 396B33 5259 E58999 East Asian ideograph 396C6B 60A4 E682A4 East Asian ideograph 3A284C 53A9 E58EA9 East Asian ideograph (variant of EACC 4C284C) 3A2F7C 64C0 E69380 East Asian ideograph 3A3B7D 67B1 E69EB1 East Asian ideograph 3A4034 6855 E6A195 East Asian ideograph 3A6A7C 7BEA E7AFAA East Asian ideograph 3A787D 80FC E883BC East Asian ideograph 3A7970 81D5 E88795 East Asian ideograph 3B2D44 8842 E8A182 East Asian ideograph 3B3922 8DB5 E8B6B5 East Asian ideograph 3F304C 5E79 E5B9B9 East Asian ideograph 3F3078 5023 E580A3 East Asian ideograph 3F347D 84E1 E893A1 East Asian ideograph 3F3573 8B3C E8ACBC East Asian ideograph 3F377B 784E E7A18E East Asian ideograph (Version J extension) 3F3D6F 8986 E8A686 East Asian ideograph 3F3E47 5379 E58DB9 East Asian ideograph 3F3F24 614E E6858E East Asian ideograph 3F404F 638A E68E8A East Asian ideograph 3F424F 542F E590AF East Asian ideograph (variant of EACC 27424F) 3F4472 7881 E7A281 East Asian ideograph 3F456D 8263 E889A3 East Asian ideograph 3F4621 9A69 E9A9A9 East Asian ideograph 3F4629 4E97 E4BA97 East Asian ideograph 3F462B 5E30 E5B8B0 East Asian ideograph 3F476F 51C8 E58788 East Asian ideograph 3F4926 6E08 E6B888 East Asian ideograph 3F4956 7832 E7A0B2 East Asian ideograph 3F4A28 9DF0 E9B7B0 East Asian ideograph 3F4A60 7266 E789A6 East Asian ideograph 3F4C3C 7582 E79682 East Asian ideograph 3F516D 6403 E69083 East Asian ideograph 3F5564 61DE E6879E East Asian ideograph 3F5631 517F E585BF East Asian ideograph 3F5959 8276 E889B6 East Asian ideograph 3F5E60 9586 E99686 East Asian ideograph 3F5F34 9699 E99A99 East Asian ideograph 3F5F35 6B9E E6AE9E East Asian ideograph 3F5F49 7431 E790B1 East Asian ideograph 3F614C 99C5 E9A785 East Asian ideograph 3F6179 5C1F E5B09F East Asian ideograph 45304C 69A6 E6A6A6 East Asian ideograph 453051 8D30 E8B4B0 East Asian ideograph 453336 5B82 E5AE82 East Asian ideograph 453421 5271 E589B1 East Asian ideograph 453666 5AD0 E5AB90 East Asian ideograph 453755 56AE E59AAE East Asian ideograph 453768 5EFB E5BBBB East Asian ideograph 453D53 5F66 E5BDA6 East Asian ideograph 453F6D 52E0 E58BA0 East Asian ideograph 454146 63DB E68F9B East Asian ideograph 45456D 6A10 E6A890 East Asian ideograph 45462B 7688 E79A88 East Asian ideograph 45465B 6C2F E6B0AF East Asian ideograph 454738 6CFA E6B3BA East Asian ideograph 454774 6E15 E6B895 East Asian ideograph 454B7A 7523 E794A3 East Asian ideograph 454C3C 7589 E79689 East Asian ideograph 454E43 788C E7A28C East Asian ideograph (variant of EACC 214E43) 454E75 7984 E7A684 East Asian ideograph 454F45 9896 E9A296 East Asian ideograph 455122 7D0D E7B48D East Asian ideograph 455164 53BF E58EBF East Asian ideograph 455564 6FDB E6BF9B East Asian ideograph (Version J extension) 45564B 865E E8999E East Asian ideograph (variant of EACC 21564B) 455746 672F E69CAF East Asian ideograph 455837 8BA0 E8AEA0 East Asian ideograph 455847 8A25 E8A8A5 East Asian ideograph (variant of EACC 215847) 455D3E 9485 E99285 East Asian ideograph 455E21 953A E994BA East Asian ideograph 455E60 95EB E997AB East Asian ideograph (Version J extension) 455F35 9668 E999A8 East Asian ideograph (Version J extension) 456036 97FF E99FBF East Asian ideograph 45604E 984F E9A18F East Asian ideograph 456064 9963 E9A5A3 East Asian ideograph 45606B 98F0 E9A3B0 East Asian ideograph 456076 9980 E9A680 East Asian ideograph 456260 5E7A E5B9BA East Asian ideograph 456324 9F61 E9BDA1 East Asian ideograph 46284C 5ED0 E5BB90 East Asian ideograph 466074 76B2 E79AB2 East Asian ideograph 472C4D 8801 E8A081 East Asian ideograph (variant of EACC 232C4D) 473422 8C2A E8B0AA East Asian ideograph 47347B 8C2B E8B0AB East Asian ideograph 473539 8B9E E8AE9E East Asian ideograph 47366F 8D4D E8B58D East Asian ideograph 474236 949A E9929A East Asian ideograph 474270 94BC E992BC East Asian ideograph 474931 95F6 E997B6 East Asian ideograph 474E5C 97DE E99F9E East Asian ideograph (variant of EACC 234E5C) 475222 9957 E9A597 East Asian ideograph 47577A 9BD6 E9AF96 East Asian ideograph (variant of EACC 23577A) 47594E 9C3A E9B0BA East Asian ideograph 4B3021 58F1 E5A3B1 East Asian ideograph 4B3050 4E8A E4BA8A East Asian ideograph 4B3051 5F10 E5BC90 East Asian ideograph 4B3052 6275 E689B5 East Asian ideograph 4B3057 4E99 E4BA99 East Asian ideograph 4B306C 96E0 E99BA0 East Asian ideograph 4B306E 4EE4 E4BBA4 East Asian ideograph (variant of EACC 21306E) 4B3072 4EED E4BBAD East Asian ideograph 4B312D 4F2B E4BCAB East Asian ideograph 4B3130 4FAB E4BEAB East Asian ideograph 4B3144 4F36 E4BCB6 East Asian ideograph (variant of EACC 213144) 4B314C 5F95 E5BE95 East Asian ideograph 4B316A 723C E788BC East Asian ideograph 4B3178 5029 E580A9 East Asian ideograph (variant of EACC 213178) 4B317C 5024 E580A4 East Asian ideograph 4B3231 4EEE E4BBAE East Asian ideograph 4B3248 50B2 E582B2 East Asian ideograph 4B324E 50E7 E583A7 East Asian ideograph (variant of EACC 21324E) 4B325F 50BB E582BB East Asian ideograph 4B3321 5185 E58685 East Asian ideograph 4B3322 5168 E585A8 East Asian ideograph (variant of EACC 213322) 4B3324 634C E68D8C East Asian ideograph (variant of EACC 2D3324) 4B333E 51B7 E586B7 East Asian ideograph (variant of EACC 21333E) 4B3351 5204 E58884 East Asian ideograph 4B3354 82C5 E88B85 East Asian ideograph 4B3355 520B E5888B East Asian ideograph 4B335B 522B E588AB East Asian ideograph 4B3421 5263 E589A3 East Asian ideograph 4B3435 52B4 E58AB4 East Asian ideograph 4B3436 52F2 E58BB2 East Asian ideograph 4B346B 5DF5 E5B7B5 East Asian ideograph 4B3474 537F E58DBF East Asian ideograph (variant of EACC 213474) 4B356A 55EC E597AC East Asian ideograph 4B357B 54CC E5938C East Asian ideograph 4B3622 8C18 E8B098 East Asian ideograph 4B3642 8BF6 E8AFB6 East Asian ideograph 4B3666 5A1A E5A89A East Asian ideograph 4B3668 5358 E58D98 East Asian ideograph 4B372C 5606 E59886 East Asian ideograph 4B372F 5C1C E5B09C East Asian ideograph 4B3749 5668 E599A8 East Asian ideograph (variant of EACC 213749) 4B374C 5662 E599A2 East Asian ideograph 4B3758 56A5 E59AA5 East Asian ideograph (variant of EACC 213758) 4B375A 53B3 E58EB3 East Asian ideograph 4B3768 56D8 E59B98 East Asian ideograph 4B376F 56FD E59BBD East Asian ideograph 4B3772 5186 E58686 East Asian ideograph 4B3773 56E3 E59BA3 East Asian ideograph 4B3774 56F3 E59BB3 East Asian ideograph 4B382E 57C0 E59F80 East Asian ideograph 4B3850 5861 E5A1A1 East Asian ideograph (variant of EACC 213850) 4B3853 586D E5A1AD East Asian ideograph 4B385E 5897 E5A297 East Asian ideograph 4B3864 58C7 E5A387 East Asian ideograph 4B3869 5727 E59CA7 East Asian ideograph 4B386C 5841 E5A181 East Asian ideograph 4B3870 58CC E5A38C East Asian ideograph 4B3871 57BB E59EBB East Asian ideograph 4B387D 591B E5A49B East Asian ideograph 4B3938 5942 E5A582 East Asian ideograph 4B393A 5F09 E5BC89 East Asian ideograph 4B393E 5965 E5A5A5 East Asian ideograph 4B393F 5333 E58CB3 East Asian ideograph 4B3974 5B22 E5ACA2 East Asian ideograph 4B397B 5A2F E5A8AF East Asian ideograph 4B3A2F 805F E8819F East Asian ideograph 4B3A47 88CA E8A38A East Asian ideograph 4B3A49 5B37 E5ACB7 East Asian ideograph 4B3B22 51A6 E586A6 East Asian ideograph 4B3B31 5B9F E5AE9F East Asian ideograph 4B3B37 51A9 E586A9 East Asian ideograph 4B3B43 5BFE E5AFBE East Asian ideograph 4B3B52 8132 E884B2 East Asian ideograph 4B3B61 5C64 E5B1A4 East Asian ideograph 4B3B67 6B67 E6ADA7 East Asian ideograph 4B3B79 5D8C E5B68C East Asian ideograph 4B3B7E 5D15 E5B495 East Asian ideograph 4B3C21 5D5C E5B59C East Asian ideograph 4B3C23 5CE5 E5B3A5 East Asian ideograph 4B3C2B 67C3 E69F83 East Asian ideograph (Version J extension) 4B3C2F 5DBA E5B6BA East Asian ideograph 4B3C32 5DD3 E5B793 East Asian ideograph 4B3C33 5DCC E5B78C East Asian ideograph 4B3C38 949C E9929C East Asian ideograph 4B3C53 5E2F E5B8AF East Asian ideograph 4B3C5E 5E64 E5B9A4 East Asian ideograph 4B3D24 53A6 E58EA6 East Asian ideograph 4B3D27 5EC3 E5BB83 East Asian ideograph 4B3D2A 5EE3 E5BBA3 East Asian ideograph 4B3D2C 53B0 E58EB0 East Asian ideograph 4B3D2F 5EF0 E5BBB0 East Asian ideograph 4B3D4B 5F3E E5BCBE East Asian ideograph 4B3D4C 5F25 E5BCA5 East Asian ideograph (variant of EACC 273D4C) 4B3D5C 5F83 E5BE83 East Asian ideograph 4B3D67 5F84 E5BE84 East Asian ideograph (variant of EACC 273D67) 4B3E2A 6035 E680B5 East Asian ideograph 4B3E40 6046 E68186 East Asian ideograph 4B3E5B 60C5 E68385 East Asian ideograph 4B3E7E 60A9 E682A9 East Asian ideograph 4B3F40 618E E6868E East Asian ideograph (variant of EACC 213F40) 4B3F4A 5FDC E5BF9C East Asian ideograph 4B3F4B 601C E6809C East Asian ideograph (variant of EACC 273F4B) 4B3F50 61CA E6878A East Asian ideograph (variant of EACC 213F50) 4B3F51 61D1 E68791 East Asian ideograph 4B3F53 61F2 E687B2 East Asian ideograph 4B3F74 623B E688BB East Asian ideograph 4B403D 62DD E68B9D East Asian ideograph 4B4046 629C E68A9C East Asian ideograph 4B4049 62D0 E68B90 East Asian ideograph 4B4053 627A E689BA East Asian ideograph 4B4066 62F4 E68BB4 East Asian ideograph 4B412A 6323 E68CA3 East Asian ideograph 4B4135 6368 E68DA8 East Asian ideograph 4B4146 6362 E68DA2 East Asian ideograph 4B4147 633F E68CBF East Asian ideograph 4B4235 6442 E69182 East Asian ideograph 4B4236 643A E690BA East Asian ideograph 4B423A 64B9 E692B9 East Asian ideograph 4B4339 6674 E699B4 East Asian ideograph 4B4347 66A8 E69AA8 East Asian ideograph 4B434D 663F E698BF East Asian ideograph 4B4352 66F5 E69BB5 East Asian ideograph 4B4358 66FD E69BBD East Asian ideograph 4B442D 67A9 E69EA9 East Asian ideograph 4B4444 8988 E8A688 East Asian ideograph (Version J extension) 4B4456 6813 E6A093 East Asian ideograph 4B4476 685F E6A19F East Asian ideograph 4B4534 6994 E6A694 East Asian ideograph (variant of EACC 214534) 4B4537 6804 E6A084 East Asian ideograph 4B4544 69D8 E6A798 East Asian ideograph 4B4545 6982 E6A682 East Asian ideograph 4B4553 6955 E6A595 East Asian ideograph 4B4556 6A2A E6A8AA East Asian ideograph 4B4559 9792 E99E92 East Asian ideograph 4B4561 691C E6A49C East Asian ideograph 4B4569 6A71 E6A9B1 East Asian ideograph 4B456C 6ADB E6AB9B East Asian ideograph (variant of EACC 21456C) 4B456D 823B E888BB East Asian ideograph 4B456F 685C E6A19C East Asian ideograph 4B4570 6A29 E6A8A9 East Asian ideograph 4B4621 6B53 E6AD93 East Asian ideograph 4B462A 6B74 E6ADB4 East Asian ideograph 4B462E 6B81 E6AE81 East Asian ideograph 4B4638 6BB1 E6AEB1 East Asian ideograph 4B4655 6C17 E6B097 East Asian ideograph 4B465A 6C32 E6B0B2 East Asian ideograph 4B4676 6C89 E6B289 East Asian ideograph 4B4741 51BD E586BD East Asian ideograph 4B4759 6D99 E6B699 East Asian ideograph 4B4761 6E05 E6B885 East Asian ideograph 4B4767 6DB5 E6B6B5 East Asian ideograph (variant of EACC 214767) 4B476C 51C5 E58785 East Asian ideograph 4B4835 6DA3 E6B6A3 East Asian ideograph 4B4846 78C6 E7A386 East Asian ideograph 4B484A 6E13 E6B893 East Asian ideograph 4B484B 51D6 E58796 East Asian ideograph 4B484C 6F91 E6BE91 East Asian ideograph 4B4857 6F22 E6BCA2 East Asian ideograph 4B4858 6E80 E6BA80 East Asian ideograph 4B485F 6EDE E6BB9E East Asian ideograph (variant of EACC 27485F) 4B4866 6E89 E6BA89 East Asian ideograph 4B4874 6FF3 E6BFB3 East Asian ideograph 4B4921 6CA2 E6B2A2 East Asian ideograph 4B4925 6FB3 E6BEB3 East Asian ideograph (variant of EACC 214925) 4B492B 6FEB E6BFAB East Asian ideograph 4B492E 6E0B E6B88B East Asian ideograph 4B4931 6E16 E6B896 East Asian ideograph 4B4937 56A0 E59AA0 East Asian ideograph 4B4940 6F45 E6BD85 East Asian ideograph 4B4947 7AC3 E7AB83 East Asian ideograph 4B496A 932C E98CAC East Asian ideograph 4B496B 83F8 E88FB8 East Asian ideograph 4B4973 7115 E78495 East Asian ideograph 4B4975 6427 E690A7 East Asian ideograph 4B4977 7188 E78688 East Asian ideograph 4B4A2E 55B6 E596B6 East Asian ideograph 4B4A38 71D7 E78797 East Asian ideograph 4B4A3E 7235 E788B5 East Asian ideograph 4B4A45 5C13 E5B093 East Asian ideograph 4B4A62 72A0 E78AA0 East Asian ideograph 4B4A74 731C E78C9C East Asian ideograph (variant of EACC 214A74) 4B4A78 72F0 E78BB0 East Asian ideograph 4B4B2B 7363 E78DA3 East Asian ideograph 4B4B2C 731F E78C9F East Asian ideograph 4B4B3E 73B2 E78EB2 East Asian ideograph (variant of EACC 214B3E) 4B4B63 749C E7929C East Asian ideograph 4B4B71 7F3E E7BCBE East Asian ideograph (variant of EACC 2D4B71) 4B4B77 4EC0 E4BB80 East Asian ideograph 4B4C36 7575 E795B5 East Asian ideograph 4B4C3C 7573 E795B3 East Asian ideograph 4B4C51 75CA E7978A East Asian ideograph 4B4C5B 75F3 E797B3 East Asian ideograph 4B4C67 761F E7989F East Asian ideograph (variant of EACC 214C67) 4B4C79 7672 E799B2 East Asian ideograph 4B4D41 862F E898AF East Asian ideograph 4B4D45 76F4 E79BB4 East Asian ideograph (variant of EACC 214D45) 4B4D56 8846 E8A186 East Asian ideograph 4B4D59 775B E79D9B East Asian ideograph (variant of EACC 214D59) 4B4D73 66B8 E69AB8 East Asian ideograph 4B4D7B 77D7 E79F97 East Asian ideograph (variant of EACC 214D7B) 4B4E21 7B36 E7ACB6 East Asian ideograph 4B4E37 7814 E7A094 East Asian ideograph 4B4E39 5CFA E5B3BA East Asian ideograph 4B4E56 78FA E7A3BA East Asian ideograph 4B4E5B 783F E7A0BF East Asian ideograph 4B4E67 79D8 E7A798 East Asian ideograph 4B4E7B 7985 E7A685 East Asian ideograph (variant of EACC 274E7B) 4B4F29 7A50 E7A990 East Asian ideograph 4B4F3C 79F0 E7A7B0 East Asian ideograph (variant of EACC 274F3C) 4B4F43 7A32 E7A8B2 East Asian ideograph 4B4F4C 7A4F E7A98F East Asian ideograph 4B4F7B 7B7A E7ADBA East Asian ideograph 4B5036 7C14 E7B094 East Asian ideograph 4B503B 7C12 E7B092 East Asian ideograph 4B5044 7C27 E7B0A7 East Asian ideograph (variant of EACC 215044) 4B5052 7C56 E7B196 East Asian ideograph 4B5061 7CBE E7B2BE East Asian ideograph 4B506C 7CAB E7B2AB East Asian ideograph 4B513B 7CF8 E7B3B8 East Asian ideograph 4B5154 7DF4 E7B7B4 East Asian ideograph 4B515A 7E01 E7B881 East Asian ideograph 4B5164 770C E79C8C East Asian ideograph 4B516A 7EF7 E7BBB7 East Asian ideograph 4B516D 7DCF E7B78F East Asian ideograph 4B516E 7E26 E7B8A6 East Asian ideograph 4B5176 7E04 E7B884 East Asian ideograph 4B5179 7F0B E7BC8B East Asian ideograph 4B517E 7E92 E7BA92 East Asian ideograph 4B5221 7D9A E7B69A East Asian ideograph 4B5223 7E4A E7B98A East Asian ideograph 4B5227 6B20 E6ACA0 East Asian ideograph 4B522B 7F36 E7BCB6 East Asian ideograph 4B5238 7F87 E7BE87 East Asian ideograph 4B523E 7F9A E7BE9A East Asian ideograph (variant of EACC 21523E) 4B5247 7FAE E7BEAE East Asian ideograph 4B524E 7FCE E7BF8E East Asian ideograph 4B525A 7FFA E7BFBA East Asian ideograph 4B525B 66DC E69B9C East Asian ideograph (variant of EACC 39525B) 4B525C 8002 E88082 East Asian ideograph 4B526E 8046 E88186 East Asian ideograph (variant of EACC 21526E) 4B5277 8068 E881A8 East Asian ideograph 4B527C 8080 E88280 East Asian ideograph 4B533B 695C E6A59C East Asian ideograph 4B5361 89D2 E8A792 East Asian ideograph (duplicate simplified) 4B5365 8133 E884B3 East Asian ideograph 4B537D 9ACC E9AB8C East Asian ideograph 4B5422 81D3 E88793 East Asian ideograph 4B5428 81ED E887AD East Asian ideograph (variant of EACC 215428) 4B5434 6319 E68C99 East Asian ideograph 4B5437 820E E8888E East Asian ideograph 4B546D 82D3 E88B93 East Asian ideograph (variant of EACC 21546D) 4B5521 8332 E88CB2 East Asian ideograph 4B552C 8392 E88E92 East Asian ideograph 4B553A 83C1 E88F81 East Asian ideograph (variant of EACC 21553A) 4B553F 83BD E88EBD East Asian ideograph (variant of EACC 21553F) 4B5542 8420 E890A0 East Asian ideograph 4B5564 77C7 E79F87 East Asian ideograph 4B5629 85CD E8978D East Asian ideograph 4B562B 8535 E894B5 East Asian ideograph 4B5631 82B8 E88AB8 East Asian ideograph 4B5632 7C54 E7B194 East Asian ideograph 4B563A 82A6 E88AA6 East Asian ideograph (variant of EACC 27563A) 4B563F 6A98 E6AA98 East Asian ideograph 4B5647 51E6 E587A6 East Asian ideograph 4B566A 8708 E89C88 East Asian ideograph (variant of EACC 21566A) 4B5671 873B E89CBB East Asian ideograph (variant of EACC 215671) 4B5724 86CD E89B8D East Asian ideograph 4B5736 877F E89DBF East Asian ideograph 4B5740 8827 E8A0A7 East Asian ideograph 4B5746 8853 E8A193 East Asian ideograph 4B576C 523E E588BE East Asian ideograph 4B576F 8910 E8A490 East Asian ideograph (variant of EACC 21576F) 4B5773 7ED4 E7BB94 East Asian ideograph 4B577E 7E7F E7B9BF East Asian ideograph 4B5824 897E E8A5BE East Asian ideograph 4B5826 8983 E8A683 East Asian ideograph (variant of EACC 215826) 4B5830 899A E8A69A East Asian ideograph 4B5832 89B3 E8A6B3 East Asian ideograph 4B5861 4F89 E4BE89 East Asian ideograph 4B5871 8AA4 E8AAA4 East Asian ideograph 4B587A 8ACB E8AB8B East Asian ideograph 4B5936 8B20 E8ACA0 East Asian ideograph 4B5946 8A33 E8A8B3 East Asian ideograph 4B594A 8AAD E8AAAD East Asian ideograph 4B594B 5909 E5A489 East Asian ideograph 4B5959 8273 E889B3 East Asian ideograph 4B5963 734F E78D8F East Asian ideograph 4B5964 72E2 E78BA2 East Asian ideograph 4B5973 8D2E E8B4AE East Asian ideograph 4B5A23 621D E6889D East Asian ideograph 4B5A31 8CCE E8B38E East Asian ideograph 4B5A3B 8D08 E8B488 East Asian ideograph 4B5A68 8DF5 E8B7B5 East Asian ideograph (variant of EACC 275A68) 4B5A7E 5C69 E5B1A9 East Asian ideograph 4B5B29 8E8D E8BA8D East Asian ideograph 4B5B46 8F0C E8BC8C East Asian ideograph 4B5B52 8F42 E8BD82 East Asian ideograph 4B5B55 8EE2 E8BBA2 East Asian ideograph 4B5B58 8EE3 E8BBA3 East Asian ideograph 4B5B5E 5F01 E5BC81 East Asian ideograph 4B5C32 9038 E980B8 East Asian ideograph 4B5C39 9039 E980B9 East Asian ideograph 4B5C47 9059 E98199 East Asian ideograph 4B5C50 9045 E98185 East Asian ideograph 4B5C54 8F9F E8BE9F East Asian ideograph (duplicate simplified) 4B5C5B 8FBA E8BEBA East Asian ideograph 4B5C5E 961D E9989D East Asian ideograph 4B5C72 9119 E98499 East Asian ideograph (variant of EACC 215C72) 4B5C77 9139 E984B9 East Asian ideograph 4B5D2B 9162 E985A2 East Asian ideograph 4B5D34 91B8 E986B8 East Asian ideograph 4B5D36 91C6 E98786 East Asian ideograph 4B5D38 91C8 E98788 East Asian ideograph 4B5D42 91E1 E987A1 East Asian ideograph 4B5D58 9234 E988B4 East Asian ideograph 4B5D65 8217 E88897 East Asian ideograph 4B5D70 92AD E98AAD East Asian ideograph 4B5E27 93AD E98EAD East Asian ideograph 4B5E3D 9421 E990A1 East Asian ideograph 4B5E3F 922C E988AC East Asian ideograph 4B5E5D 95D4 E99794 East Asian ideograph 4B5E69 95A2 E996A2 East Asian ideograph 4B5E6C 961D E9989D East Asian ideograph (duplicate simplified) 4B5F30 9686 E99A86 East Asian ideograph (variant of EACC 215F30) 4B5F35 6B92 E6AE92 East Asian ideograph 4B5F3A 967A E999BA East Asian ideograph 4B5F49 51CB E5878B East Asian ideograph 4B5F4C 9D8F E9B68F East Asian ideograph 4B5F50 96E3 E99BA3 East Asian ideograph 4B5F58 96F6 E99BB6 East Asian ideograph (variant of EACC 215F58 4B5F62 7668 E799A8 East Asian ideograph 4B5F6F 970A E99C8A East Asian ideograph 4B5F70 9752 E99D92 East Asian ideograph 4B5F71 9756 E99D96 East Asian ideograph 4B5F72 975B E99D9B East Asian ideograph 4B5F73 975C E99D9C East Asian ideograph (variant of EACC 215F73) 4B602D 9771 E99DB1 East Asian ideograph 4B6044 9818 E9A098 East Asian ideograph 4B6048 981A E9A09A East Asian ideograph 4B6053 985E E9A19E East Asian ideograph 4B606F 991D E9A49D East Asian ideograph 4B6122 994B E9A58B East Asian ideograph 4B6130 99C4 E9A784 East Asian ideograph 4B613F 9A08 E9A888 East Asian ideograph 4B6145 9A12 E9A892 East Asian ideograph 4B6147 99C6 E9A786 East Asian ideograph 4B614D 9A13 E9A893 East Asian ideograph 4B6159 81B8 E886B8 East Asian ideograph 4B615F 9AEA E9ABAA East Asian ideograph 4B6167 95D8 E99798 East Asian ideograph 4B6168 9599 E99699 East Asian ideograph 4B623B 9D12 E9B492 East Asian ideograph 4B6247 9D2C E9B4AC East Asian ideograph 4B624F 9D49 E9B589 East Asian ideograph 4B6258 68BA E6A2BA East Asian ideograph 4B625C 9EB8 E9BAB8 East Asian ideograph (variant of EACC 27625C) 4B6260 9EBD E9BABD East Asian ideograph 4B6266 9ED2 E9BB92 East Asian ideograph 4B6268 9ED9 E9BB99 East Asian ideograph 4B6278 9F21 E9BCA1 East Asian ideograph 4B6324 9F62 E9BDA2 East Asian ideograph 4B6455 4EB6 E4BAB6 East Asian ideograph 4B6637 4FE3 E4BFA3 East Asian ideograph 4B682E 4EC2 E4BB82 East Asian ideograph 4B6A22 7F83 E7BE83 East Asian ideograph 4B6A26 6C8D E6B28D East Asian ideograph 4B7421 56F9 E59BB9 East Asian ideograph (variant of EACC 217421) 4B7577 57D3 E59F93 East Asian ideograph 4B763D 57F4 E59FB4 East Asian ideograph (variant of EACC 21763D) 4B7874 590A E5A48A East Asian ideograph 4B7954 5968 E5A5A8 East Asian ideograph 4B7E6A 5BC3 E5AF83 East Asian ideograph (variant of EACC 217E6A) 4C2330 5C53 E5B193 East Asian ideograph 4C233F 5C76 E5B1B6 East Asian ideograph 4C2532 5D5B E5B59B East Asian ideograph 4C2539 5D73 E5B5B3 East Asian ideograph 4C284C 53A9 E58EA9 East Asian ideograph 4C2867 5EDB E5BB9B East Asian ideograph 4C2962 5F4D E5BD8D East Asian ideograph (variant of EACC 222962) 4C2F61 622C E688AC East Asian ideograph 4C3474 631D E68C9D East Asian ideograph 4C354A 64B8 E692B8 East Asian ideograph 4C3744 65D9 E69799 East Asian ideograph 4C3A33 80AD E882AD East Asian ideograph (variant of EACC 2E3A33) 4C3A55 6741 E69D81 East Asian ideograph 4C3A5B 6859 E6A199 East Asian ideograph 4C3B22 6860 E6A1A0 East Asian ideograph 4C3B31 6798 E69E98 East Asian ideograph 4C3B60 6764 E69DA4 East Asian ideograph 4C3F68 69C7 E6A787 East Asian ideograph 4C3F7A 6922 E6A4A2 East Asian ideograph 4C4146 8538 E894B8 East Asian ideograph 4C4177 8223 E888A3 East Asian ideograph 4C4333 6AAA E6AAAA East Asian ideograph 4C4339 69DE E6A79E East Asian ideograph 4C433F 6A65 E6A9A5 East Asian ideograph 4C4345 67A6 E69EA6 East Asian ideograph 4C4359 6B05 E6AC85 East Asian ideograph 4C4446 6B4E E6AD8E East Asian ideograph 4C476E 6CAD E6B2AD East Asian ideograph 4C4C35 6E0C E6B88C East Asian ideograph 4C4D3D 6F62 E6BDA2 East Asian ideograph 4C4D63 6F99 E6BE99 East Asian ideograph 4C4F24 6F46 E6BD86 East Asian ideograph 4C4F26 6EDD E6BB9D East Asian ideograph 4C4F2B 701E E7809E East Asian ideograph 4C5175 8315 E88C95 East Asian ideograph 4C523A 717A E785BA East Asian ideograph 4C5447 71E0 E787A0 East Asian ideograph (variant of EACC 225447) 4C5541 4E2C E4B8AC East Asian ideograph 4C5638 729F E78A9F East Asian ideograph 4C5C3A 73F1 E78FB1 East Asian ideograph 4C5C61 74F4 E793B4 East Asian ideograph (variant of EACC 225C61) 4C5F58 7640 E79980 East Asian ideograph 4C5F69 75EB E797AB East Asian ideograph 4C6022 7596 E79696 East Asian ideograph 4C6074 76B9 E79AB9 East Asian ideograph 4C6266 778B E79E8B East Asian ideograph 4C6376 7839 E7A0B9 East Asian ideograph 4C6564 78D9 E7A399 East Asian ideograph 4C6565 78B9 E7A2B9 East Asian ideograph 4C6775 7962 E7A5A2 East Asian ideograph (unrelated variant of EACC 293032) 4C683E 79EB E7A7AB East Asian ideograph 4C695C 7A06 E7A886 East Asian ideograph 4C695F 7A63 E7A9A3 East Asian ideograph 4C6B62 7B4C E7AD8C East Asian ideograph (variant of EACC 226B62) 4C6C46 7B9F E7AE9F East Asian ideograph 4C6E42 7C31 E7B0B1 East Asian ideograph 4C6F43 7CCD E7B38D East Asian ideograph 4C6F7B 7CE8 E7B3A8 East Asian ideograph 4C715A 7EE6 E7BBA6 East Asian ideograph 4C725D 7A39 E7A8B9 East Asian ideograph 4C7265 7DFC E7B7BC East Asian ideograph 4C7328 5FAD E5BEAD East Asian ideograph (variant of EACC 2E7328) 4C735D 7D4B E7B58B East Asian ideograph 4C794E 80B7 E882B7 East Asian ideograph 4C7959 817D E885BD East Asian ideograph 4C796B 815F E8859F East Asian ideograph 4C7C45 82AE E88AAE East Asian ideograph 4C7D4D 8343 E88D83 East Asian ideograph 4C7D6A 8323 E88CA3 East Asian ideograph 4D222A 83B5 E88EB5 East Asian ideograph 4D2925 8770 E89DB0 East Asian ideograph 4D2962 86C9 E89B89 East Asian ideograph (variant of EACC 232962) 4D2C3C 87E5 E89FA5 East Asian ideograph 4D2D75 8872 E8A1B2 East Asian ideograph (variant of EACC 232D75) 4D2F5D 8941 E8A581 East Asian ideograph (variant of EACC 232F5D) 4D2F73 7E5D E7B99D East Asian ideograph 4D2F7A 891D E8A49D East Asian ideograph 4D3032 88AE E8A2AE East Asian ideograph 4D3359 56AF E59AAF East Asian ideograph 4D3363 8C25 E8B0A5 East Asian ideograph 4D386F 544B E5918B East Asian ideograph 4D3C6C 8FB6 E8BEB6 East Asian ideograph 4D4134 919B E9869B East Asian ideograph 4D4176 91DB E9879B East Asian ideograph 4D445B 9306 E98C86 East Asian ideograph (variant of EACC 23445B) 4D446B 954E E9958E East Asian ideograph 4D472C 952A E994AA East Asian ideograph 4D4754 9544 E99584 East Asian ideograph 4D477B 943E E990BE East Asian ideograph 4D4832 953F E994BF East Asian ideograph 4D4835 954C E9958C East Asian ideograph 4D4862 9229 E988A9 East Asian ideograph 4D4A6C 9667 E999A7 East Asian ideograph 4D4D61 7EF1 E7BBB1 East Asian ideograph 4D4F39 988C E9A28C East Asian ideograph 4D503A 98D1 E9A391 East Asian ideograph 4D5053 98DA E9A39A East Asian ideograph 4D5154 9942 E9A582 East Asian ideograph 4D5574 9B2E E9ACAE East Asian ideograph 4D5858 9BE3 E9AFA3 East Asian ideograph 4D5875 9CD0 E9B390 East Asian ideograph 4D5934 9CA6 E9B2A6 East Asian ideograph 4D594E 9BF5 E9AFB5 East Asian ideograph 4D5973 51EB E587AB East Asian ideograph 4D5A6C 9D46 E9B586 East Asian ideograph 4D5B35 9DAB E9B6AB East Asian ideograph 4D5B7E 9DC6 E9B786 East Asian ideograph 4D5C6B 9D50 E9B590 East Asian ideograph 4D5D49 9E81 E9BA81 East Asian ideograph 4D5F70 9F44 E9BD84 East Asian ideograph 4D5F7B 97F2 E99FB2 East Asian ideograph 4D6047 816D E885AD East Asian ideograph 513051 8CAE E8B2AE East Asian ideograph 513057 4E98 E4BA98 East Asian ideograph 513421 91D6 E98796 East Asian ideograph 51356A 8BC3 E8AF83 East Asian ideograph 51384D 51C3 E58783 East Asian ideograph 513A47 8885 E8A285 East Asian ideograph 513B52 6C3D E6B0BD East Asian ideograph 513D67 8FF3 E8BFB3 East Asian ideograph 51456D 822E E888AE East Asian ideograph 51496B 852B E894AB East Asian ideograph 514E5B 9271 E989B1 East Asian ideograph 51513B 7E9F E7BA9F East Asian ideograph 51563F 8616 E89896 East Asian ideograph 515E5D 9616 E99896 East Asian ideograph 516122 9988 E9A688 East Asian ideograph 516A26 51B4 E586B4 East Asian ideograph 517954 734E E78D8E East Asian ideograph 52735D 7E8A E7BA8A East Asian ideograph (variant of EACC 22735D) 693729 7C82 E7B282 East Asian ideograph 693C32 9D2B E9B4AB East Asian ideograph 693C36 96EB E99BAB East Asian ideograph 694664 51EA E587AA East Asian ideograph 694677 5302 E58C82 East Asian ideograph 694823 7872 E7A1B2 East Asian ideograph 69482B 7560 E795A0 East Asian ideograph 694838 567A E599BA East Asian ideograph 694B7B 9EBF E9BABF East Asian ideograph 694C5D 6762 E69DA2 East Asian ideograph 694C68 5301 E58C81 East Asian ideograph 694C7A 9453 E99193 East Asian ideograph 695130 5116 E58496 East Asian ideograph 69515E 51E9 E587A9 East Asian ideograph 69525D 53FA E58FBA East Asian ideograph 695326 54D8 E59398 East Asian ideograph 69533B 555D E5959D East Asian ideograph 695375 56CE E59B8E East Asian ideograph 695429 5726 E59CA6 East Asian ideograph 69542A 5737 E59CB7 East Asian ideograph 695438 57B3 E59EB3 East Asian ideograph 69543A 57AA E59EAA East Asian ideograph 69543B 57B0 E59EB0 East Asian ideograph 695442 57D6 E59F96 East Asian ideograph 69544B 5870 E5A1B0 East Asian ideograph 695451 58B9 E5A2B9 East Asian ideograph 695457 58B8 E5A2B8 East Asian ideograph 69545C 58D7 E5A397 East Asian ideograph 69545F 58E5 E5A3A5 East Asian ideograph 69554E 5B36 E5ACB6 East Asian ideograph 695626 4E62 E4B9A2 East Asian ideograph 69562C 599B E5A69B East Asian ideograph 69562E 5CBB E5B2BB East Asian ideograph 695630 5CBC E5B2BC East Asian ideograph 695632 5CC5 E5B385 East Asian ideograph 695633 5CBE E5B2BE East Asian ideograph 69564E 5D76 E5B5B6 East Asian ideograph 695657 5D90 E5B690 East Asian ideograph 695737 5F16 E5BC96 East Asian ideograph 69573B 5F41 E5BD81 East Asian ideograph 69576A 603A E680BA East Asian ideograph 69594B 6327 E68CA7 East Asian ideograph 69595E 63B5 E68EB5 East Asian ideograph 695A31 64F6 E693B6 East Asian ideograph 695A73 6683 E69A83 East Asian ideograph 695A7E 66BC E69ABC East Asian ideograph 695B37 6737 E69CB7 East Asian ideograph 695B7B 6926 E6A4A6 East Asian ideograph 695C29 6925 E6A4A5 East Asian ideograph 695C2D 6928 E6A4A8 East Asian ideograph 695C30 6923 E6A4A3 East Asian ideograph 695C31 6921 E6A4A1 East Asian ideograph 695C39 697E E6A5BE East Asian ideograph 695C43 6981 E6A681 East Asian ideograph 695C4F 69DD E6A79D East Asian ideograph 695C53 6A2E E6A8AE East Asian ideograph 695C71 6A78 E6A9B8 East Asian ideograph 695D36 6B1F E6AC9F East Asian ideograph 695E63 6E82 E6BA82 East Asian ideograph 695F70 7195 E78695 East Asian ideograph 696126 74F2 E793B2 East Asian ideograph 696136 753C E794BC East Asian ideograph 69613A 7549 E79589 East Asian ideograph 69613E 7569 E795A9 East Asian ideograph 69626D 7874 E7A1B4 East Asian ideograph 696273 78B5 E7A2B5 East Asian ideograph 696325 7907 E7A487 East Asian ideograph 69634E 7A43 E7A983 East Asian ideograph 696373 7B02 E7AC82 East Asian ideograph 696449 7C13 E7B093 East Asian ideograph 69644C 7C17 E7B097 East Asian ideograph 69644E 7BF6 E7AFB6 East Asian ideograph 696464 7C90 E7B290 East Asian ideograph 696466 7CAD E7B2AD East Asian ideograph 696471 7CC0 E7B380 East Asian ideograph 696474 7CD8 E7B398 East Asian ideograph 69654F 7E05 E7B885 East Asian ideograph 69656D 7E83 E7BA83 East Asian ideograph 69656E 7DD5 E7B795 East Asian ideograph 696576 7E90 E7BA90 East Asian ideograph 696733 81A4 E886A4 East Asian ideograph 69675C 825D E8899D East Asian ideograph 69684D 8422 E890A2 East Asian ideograph 696868 84D9 E89399 East Asian ideograph 696946 8630 E898B0 East Asian ideograph 69695B 86AB E89AAB East Asian ideograph 696962 86EF E89BAF East Asian ideograph 696A2C 87D0 E89F90 East Asian ideograph 696A5E 88B0 E8A2B0 East Asian ideograph 696A61 88C3 E8A383 East Asian ideograph 696A6D 8904 E8A484 East Asian ideograph 696B27 8977 E8A5B7 East Asian ideograph 696B5C 8ADA E8AB9A East Asian ideograph 696D3F 8EBE E8BABE East Asian ideograph 696D40 8EC5 E8BB85 East Asian ideograph 696D41 8EC8 E8BB88 East Asian ideograph 696D5A 8F4C E8BD8C East Asian ideograph 696D7A 9027 E980A7 East Asian ideograph 696E28 9056 E98196 East Asian ideograph 696E5C 91DF E9879F East Asian ideograph 696F27 933B E98CBB East Asian ideograph 696F5B 958A E9968A East Asian ideograph 696F5D 9596 E99696 East Asian ideograph 697023 9666 E999A6 East Asian ideograph 697058 9779 E99DB9 East Asian ideograph 69705D 9786 E99E86 East Asian ideograph 697060 9790 E99E90 East Asian ideograph 697124 98AA E9A2AA East Asian ideograph 697152 99F2 E9A7B2 East Asian ideograph 697174 9ADE E9AB9E East Asian ideograph 69717D 9AF1 E9ABB1 East Asian ideograph 69717E 9AF7 E9ABB7 East Asian ideograph 69723B 9B96 E9AE96 East Asian ideograph 697240 9BB4 E9AEB4 East Asian ideograph 697245 9BCF E9AF8F East Asian ideograph 697246 9BD1 E9AF91 East Asian ideograph 69724E 9BF2 E9AFB2 East Asian ideograph 697260 9C30 E9B0B0 East Asian ideograph 697265 9C5A E9B19A East Asian ideograph 69727E 9D48 E9B588 East Asian ideograph 697323 9D64 E9B5A4 East Asian ideograph 704C2A 915E E9859E East Asian ideograph 70586F 4EEB E4BBAB East Asian ideograph 705B71 57B4 E59EB4 East Asian ideograph 705C43 82CA E88B8A East Asian ideograph 705C50 82C4 E88B84 East Asian ideograph 705D46 841C E8909C East Asian ideograph 705D5C 8488 E89288 East Asian ideograph 705F30 7519 E79499 East Asian ideograph 705F39 5416 E59096 East Asian ideograph 705F50 549D E5929D East Asian ideograph 705F51 54D0 E59390 East Asian ideograph 705F54 54B4 E592B4 East Asian ideograph 705F5B 54A3 E592A3 East Asian ideograph 705F61 54DA E5939A East Asian ideograph 70602D 55B9 E596B9 East Asian ideograph 70603A 55EA E597AA East Asian ideograph 70604C 55F5 E597B5 East Asian ideograph 706054 5623 E598A3 East Asian ideograph 706058 562D E598AD East Asian ideograph 706067 567B E599BB East Asian ideograph 706131 5C9C E5B29C East Asian ideograph 70622A 7339 E78CB9 East Asian ideograph 706247 9987 E9A687 East Asian ideograph 70624E 9995 E9A695 East Asian ideograph 706340 61B7 E686B7 East Asian ideograph 706640 80EC E883AC East Asian ideograph 706B42 80BC E882BC East Asian ideograph 706B44 80BD E882BD East Asian ideograph 706B4C 80E9 E883A9 East Asian ideograph 706B5B 810E E8848E East Asian ideograph 706B5F 8112 E88492 East Asian ideograph 706B6A 8159 E88599 East Asian ideograph 706C42 70BB E782BB East Asian ideograph 706C43 70C0 E78380 East Asian ideograph 706D3B 7818 E7A098 East Asian ideograph 706D3F 781C E7A09C East Asian ideograph 706D45 783C E7A0BC East Asian ideograph 70727D 87A8 E89EA8 East Asian ideograph 707360 7B7B E7ADBB East Asian ideograph 70736E 7BA2 E7AEA2 East Asian ideograph 707438 823E E888BE East Asian ideograph 707523 9170 E985B0 East Asian ideograph 70755D 8E3A E8B8BA East Asian ideograph 70775D 9B0F E9AC8F East Asian ideograph 707771 9EE2 E9BBA2 East Asian ideograph (Version J extension)

This table contains 172 mappings of character encodings for Japanese Hiragana and Katakana from the East Asian Coded Character set (ANSI/NISO Z39.64, or "EACC") to character encodings in the Universal Character Set (UCS, ISO-IEC 10646)/Unicode. Character codes are given in hexadecimal notation. Each character is presented on a separate row.

The first column contains the MARC-8 EACC 24-bit code (in hex), the second column contains the corresponding UCS/Unicode 16-bit code (in hex), the third column contains the UTF-8 code (in hex) for the UCS character, the fourth column contains a representation of the character (where possible), the fifth column contains a character name or description.

69213C 30FC E383BC Vowel elongation mark for kana 692421 3041 E38181 Hiragana letter small A 692422 3042 E38182 Hiragana letter A 692423 3043 E38183 Hiragana letter small I 692424 3044 E38184 Hiragana letter I 692425 3045 E38185 Hiragana letter small U 692426 3046 E38186 Hiragana letter U 692427 3047 E38187 Hiragana letter small E 692428 3048 E38188 Hiragana letter E 692429 3049 E38189 Hiragana letter small O 69242A 304A E3818A Hiragana letter O 69242B 304B E3818B Hiragana letter KA 69242C 304C E3818C Hiragana letter GA 69242D 304D E3818D Hiragana letter KI 69242E 304E E3818E Hiragana letter GI 69242F 304F E3818F Hiragana letter KU 692430 3050 E38190 Hiragana letter GU 692431 3051 E38191 Hiragana letter KE 692432 3052 E38192 Hiragana letter GE 692433 3053 E38193 Hiragana letter KO 692434 3054 E38194 Hiragana letter GO 692435 3055 E38195 Hiragana letter SA 692436 3056 E38196 Hiragana letter ZA 692437 3057 E38197 Hiragana letter SI 692438 3058 E38198 Hiragana letter ZI 692439 3059 E38199 Hiragana letter SU 69243A 305A E3819A Hiragana letter ZU 69243B 305B E3819B Hiragana letter SE 69243C 305C E3819C Hiragana letter ZE 69243D 305D E3819D Hiragana letter SO 69243E 305E E3819E Hiragana letter ZO 69243F 305F E3819F Hiragana letter TA 692440 3060 E381A0 Hiragana letter DA 692441 3061 E381A1 Hiragana letter TI 692442 3062 E381A2 Hiragana letter DI 692443 3063 E381A3 Hiragana letter small TU 692444 3064 E381A4 Hiragana letter TU 692445 3065 E381A5 Hiragana letter DU 692446 3066 E381A6 Hiragana letter TE 692447 3067 E381A7 Hiragana letter DE 692448 3068 E381A8 Hiragana letter TO 692449 3069 E381A9 Hiragana letter DO 69244A 306A E381AA Hiragana letter NA 69244B 306B E381AB Hiragana letter NI 69244C 306C E381AC Hiragana letter NU 69244D 306D E381AD Hiragana letter NE 69244E 306E E381AE Hiragana letter NO 69244F 306F E381AF Hiragana letter HA 692450 3070 E381B0 Hiragana letter BA 692451 3071 E381B1 Hiragana letter PA 692452 3072 E381B2 Hiragana letter HI 692453 3073 E381B3 Hiragana letter BI 692454 3074 E381B4 Hiragana letter PI 692455 3075 E381B5 Hiragana letter HU 692456 3076 E381B6 Hiragana letter BU 692457 3077 E381B7 Hiragana letter PU 692458 3078 E381B8 Hiragana letter HE 692459 3079 E381B9 Hiragana letter BE 69245A 307A E381BA Hiragana letter PE 69245B 307B E381BB Hiragana letter HO 69245C 307C E381BC Hiragana letter BO 69245D 307D E381BD Hiragana letter PO 69245E 307E E381BE Hiragana letter MA 69245F 307F E381BF Hiragana letter MI 692460 3080 E38280 Hiragana letter MU 692461 3081 E38281 Hiragana letter ME 692462 3082 E38282 Hiragana letter MO 692463 3083 E38283 Hiragana letter small YA 692464 3084 E38284 Hiragana letter YA 692465 3085 E38285 Hiragana letter small YU 692466 3086 E38286 Hiragana letter YU 692467 3087 E38287 Hiragana letter small YO 692468 3088 E38288 Hiragana letter YO 692469 3089 E38289 Hiragana letter RA 69246A 308A E3828A Hiragana letter RI 69246B 308B E3828B Hiragana letter RU 69246C 308C E3828C Hiragana letter RE 69246D 308D E3828D Hiragana letter RO 69246E 308E E3828E Hiragana letter small WA 69246F 308F E3828F Hiragana letter WA 692470 3090 E38290 Hiragana letter WI 692471 3091 E38291 Hiragana letter WE 692472 3092 E38292 Hiragana letter WO 692473 3093 E38293 Hiragana letter N 692521 30A1 E382A1 Katakana letter small A 692522 30A2 E382A2 Katakana letter A 692523 30A3 E382A3 Katakana letter small I 692524 30A4 E382A4 Katakana letter I 692525 30A5 E382A5 Katakana letter small U 692526 30A6 E382A6 Katakana letter U 692527 30A7 E382A7 Katakana letter small E 692528 30A8 E382A8 Katakana letter E 692529 30A9 E382A9 Katakana letter small O 69252A 30AA E382AA Katakana letter O 69252B 30AB E382AB Katakana letter KA 69252C 30AC E382AC Katakana letter GA 69252D 30AD E382AD Katakana letter KI 69252E 30AE E382AE Katakana letter GI 69252F 30AF E382AF Katakana letter KU 692530 30B0 E382B0 Katakana letter GU 692531 30B1 E382B1 Katakana letter KE 692532 30B2 E382B2 Katakana letter GE 692533 30B3 E382B3 Katakana letter KO 692534 30B4 E382B4 Katakana letter GO 692535 30B5 E382B5 Katakana letter SA 692536 30B6 E382B6 Katakana letter ZA 692537 30B7 E382B7 Katakana letter SI 692538 30B8 E382B8 Katakana letter ZI 692539 30B9 E382B9 Katakana letter SU 69253A 30BA E382BA Katakana letter ZU 69253B 30BB E382BB Katakana letter SE 69253C 30BC E382BC Katakana letter ZE 69253D 30BD E382BD Katakana letter SO 69253E 30BE E382BE Katakana letter ZO 69253F 30BF E382BF Katakana letter TA 692540 30C0 E38380 Katakana letter DA 692541 30C1 E38381 Katakana letter TI 692542 30C2 E38382 Katakana letter DI 692543 30C3 E38383 Katakana letter small TU 692544 30C4 E38384 Katakana letter TU 692545 30C5 E38385 Katakana letter DU 692546 30C6 E38386 Katakana letter TE 692547 30C7 E38387 Katakana letter DE 692548 30C8 E38388 Katakana letter TO 692549 30C9 E38389 Katakana letter DO 69254A 30CA E3838A Katakana letter NA 69254B 30CB E3838B Katakana letter NI 69254C 30CC E3838C Katakana letter NU 69254D 30CD E3838D Katakana letter NE 69254E 30CE E3838E Katakana letter NO 69254F 30CF E3838F Katakana letter HA 692550 30D0 E38390 Katakana letter BA 692551 30D1 E38391 Katakana letter PA 692552 30D2 E38392 Katakana letter HI 692553 30D3 E38393 Katakana letter BI 692554 30D4 E38394 Katakana letter PI 692555 30D5 E38395 Katakana letter HU 692556 30D6 E38396 Katakana letter BU 692557 30D7 E38397 Katakana letter PU 692558 30D8 E38398 Katakana letter HE 692559 30D9 E38399 Katakana letter BE 69255A 30DA E3839A Katakana letter PE 69255B 30DB E3839B Katakana letter HO 69255C 30DC E3839C Katakana letter BO 69255D 30DD E3839D Katakana letter PO 69255E 30DE E3839E Katakana letter MA 69255F 30DF E3839F Katakana letter MI 692560 30E0 E383A0 Katakana letter MU 692561 30E1 E383A1 Katakana letter ME 692562 30E2 E383A2 Katakana letter MO 692563 30E3 E383A3 Katakana letter small YA 692564 30E4 E383A4 Katakana letter YA 692565 30E5 E383A5 Katakana letter small YU 692566 30E6 E383A6 Katakana letter YU 692567 30E7 E383A7 Katakana letter small YO 692568 30E8 E383A8 Katakana letter YO 692569 30E9 E383A9 Katakana letter RA 69256A 30EA E383AA Katakana letter RI 69256B 30EB E383AB Katakana letter RU 69256C 30EC E383AC Katakana letter RE 69256D 30ED E383AD Katakana letter RO 69256E 30EE E383AE Katakana letter small WA 69256F 30EF E383AF Katakana letter WA 692570 30F0 E383B0 Katakana letter WI 692571 30F1 E383B1 Katakana letter WE 692572 30F2 E383B2 Katakana letter WO 692573 30F3 E383B3 Katakana letter N 692574 30F4 E383B4 Katakana letter VU 692575 30F5 E383B5 Katakana letter small KA 692576 30F6 E383B6 Katakana letter small KE 692577 309B E3829B Katakana-hiragana voiced sound mark 692578 309C E3829C Katakana-hiragana semi-voiced sound mark

This table contains 2,028 mappings of character encodings for Korean hangul from the East Asian Coded Character set (ANSI/NISO Z39.64, or "EACC") to character encodings in the Universal Character Set (UCS, ISO-IEC 10646)/Unicode. Character codes are given in hexadecimal notation. Each character is presented on a separate row.

The first column contains the MARC-8 EACC 24-bit code (in hex), the second column contains the corresponding UCS/Unicode 16-bit code (in hex), the third column contains the UTF-8 code (in hex) for the UCS character, the fourth column contains a representation of the character (where possible), the fifth column contains a character name or description. Most East Asian ideographs are not given unique names in the MARC-8 or UCS/Unicode.

For some characters alternate encodings in UCS/Unicode and UTF-8 are given. When that occurs the alternate UCS/Unicode 16-bit code column and alternate UTF-8 code column follow the character name. The alternative UCS/Unicode character codes are provided for cases where MARC-8 characters were mapped to UCS/Unicode characters in the Private Use Area (PUA). The alternative character code is a defined Unicode character which should be supported by applications that claim to support the full repertoire of defined Unicode characters.

The characters in this table are sorted in EACC character code order.

6F2457 3131 E384B1 Korean hangul 6F2458 3134 E384B4 Korean hangul 6F2459 3137 E384B7 Korean hangul 6F245A 3139 E384B9 Korean hangul 6F245B 3141 E38581 Korean hangul 6F245C 3142 E38582 Korean hangul 6F245D 3145 E38585 Korean hangul 6F245E 3147 E38587 Korean hangul 6F245F 3148 E38588 Korean hangul 6F2460 314A E3858A Korean hangul 6F2461 314B E3858B Korean hangul 6F2462 314C E3858C Korean hangul 6F2463 314D E3858D Korean hangul 6F2464 314E E3858E Korean hangul 6F2465 3132 E384B2 Korean hangul 6F2469 3138 E384B8 Korean hangul 6F246E 3143 E38583 Korean hangul 6F2470 3146 E38586 Korean hangul 6F2471 3149 E38589 Korean hangul 6F2472 314F E3858F Korean hangul 6F2473 3150 E38590 Korean hangul 6F2474 3151 E38591 Korean hangul 6F2476 3153 E38593 Korean hangul 6F2477 3154 E38594 Korean hangul 6F2478 3155 E38595 Korean hangul 6F247A 3157 E38597 Korean hangul 6F247B 3158 E38598 Korean hangul 6F247E 315B E3859B Korean hangul 6F2521 315C E3859C Korean hangul 6F2525 3160 E385A0 Korean hangul 6F2526 3161 E385A1 Korean hangul 6F2527 3162 E385A2 Korean hangul 6F2528 3163 E385A3 Korean hangul 6F485F AC00 EAB080 Korean hangul 6F4860 AC01 EAB081 Korean hangul 6F4861 AC02 EAB082 Korean hangul 6F4862 AC04 EAB084 Korean hangul 6F4863 AC07 EAB087 Korean hangul 6F4864 AC08 EAB088 Korean hangul 6F4865 AC09 EAB089 Korean hangul 6F4866 AC10 EAB090 Korean hangul 6F4867 AC11 EAB091 Korean hangul 6F4868 AC12 EAB092 Korean hangul 6F4869 AC13 EAB093 Korean hangul 6F486A AC14 EAB094 Korean hangul 6F486B AC15 EAB095 Korean hangul 6F486C AC16 EAB096 Korean hangul 6F486D AC17 EAB097 Korean hangul 6F486E AC19 EAB099 Korean hangul 6F486F AC1A EAB09A Korean hangul 6F4870 AC1B EAB09B Korean hangul 6F4871 AC1C EAB09C Korean hangul 6F4872 AC1D EAB09D Korean hangul 6F4873 AC20 EAB0A0 Korean hangul 6F4875 AC24 EAB0A4 Korean hangul 6F4876 AC2C EAB0AC Korean hangul 6F4877 AC2D EAB0AD Korean hangul 6F4878 AC2F EAB0AF Korean hangul 6F4879 AC30 EAB0B0 Korean hangul 6F487A AC31 EAB0B1 Korean hangul 6F487B AC38 EAB0B8 Korean hangul 6F487C AC39 EAB0B9 Korean hangul 6F487D AC40 EAB180 Korean hangul 6F487E AC54 EAB194 Korean hangul 6F4921 AC70 EAB1B0 Korean hangul 6F4922 AC71 EAB1B1 Korean hangul 6F4924 AC74 EAB1B4 Korean hangul 6F4925 AC77 EAB1B7 Korean hangul 6F4926 AC78 EAB1B8 Korean hangul 6F4927 AC79 EAB1B9 Korean hangul 6F4929 AC80 EAB280 Korean hangul 6F492A AC81 EAB281 Korean hangul 6F492B AC83 EAB283 Korean hangul 6F492C AC84 EAB284 Korean hangul 6F492D AC85 EAB285 Korean hangul 6F492E AC86 EAB286 Korean hangul 6F4930 AC89 EAB289 Korean hangul 6F4931 AC8A EAB28A Korean hangul 6F4932 AC8B EAB28B Korean hangul 6F4933 AC8C EAB28C Korean hangul 6F4934 AC90 EAB290 Korean hangul 6F4935 AC94 EAB294 Korean hangul 6F4936 AC9C EAB29C Korean hangul 6F4937 AC9F EAB29F Korean hangul 6F4938 ACA0 EAB2A0 Korean hangul 6F4939 ACA1 EAB2A1 Korean hangul 6F493A ACA8 EAB2A8 Korean hangul 6F493B ACA9 EAB2A9 Korean hangul 6F493C ACAA EAB2AA Korean hangul 6F493D ACAC EAB2AC Korean hangul 6F493E ACAF EAB2AF Korean hangul 6F493F ACB0 EAB2B0 Korean hangul 6F4940 ACB8 EAB2B8 Korean hangul 6F4941 ACB9 EAB2B9 Korean hangul 6F4943 ACBC EAB2BC Korean hangul 6F4944 ACBD EAB2BD Korean hangul 6F4945 ACC1 EAB381 Korean hangul 6F4947 ACC4 EAB384 Korean hangul 6F4949 ACD7 EAB397 Korean hangul 6F494A ACE0 EAB3A0 Korean hangul 6F494B ACE1 EAB3A1 Korean hangul 6F494C ACE4 EAB3A4 Korean hangul 6F494D ACE7 EAB3A7 Korean hangul 6F494E ACE8 EAB3A8 Korean hangul 6F494F ACEA EAB3AA Korean hangul 6F4950 ACEC EAB3AC Korean hangul 6F4951 ACEF EAB3AF Korean hangul 6F4952 ACF0 EAB3B0 Korean hangul 6F4953 ACF1 EAB3B1 Korean hangul 6F4954 ACF3 EAB3B3 Korean hangul 6F4955 ACF5 EAB3B5 Korean hangul 6F4956 ACF6 EAB3B6 Korean hangul 6F4957 ACFA EAB3BA Korean hangul 6F4958 ACFC EAB3BC Korean hangul 6F4959 ACFD EAB3BD Korean hangul 6F495A AD00 EAB480 Korean hangul 6F495B AD04 EAB484 Korean hangul 6F495C AD0C EAB48C Korean hangul 6F495D AD0D EAB48D Korean hangul 6F495E AD0F EAB48F Korean hangul 6F495F AD11 EAB491 Korean hangul 6F4960 AD18 EAB498 Korean hangul 6F4961 AD19 EAB499 Korean hangul 6F4962 AD1C EAB49C Korean hangul 6F4963 AD20 EAB4A0 Korean hangul 6F4964 AD28 EAB4A8 Korean hangul 6F4965 AD29 EAB4A9 Korean hangul 6F4966 AD2D EAB4AD Korean hangul 6F4967 AD34 EAB4B4 Korean hangul 6F4968 AD38 EAB4B8 Korean hangul 6F4969 AD3C EAB4BC Korean hangul 6F496A AD44 EAB584 Korean hangul 6F496C AD49 EAB589 Korean hangul 6F496D AD50 EAB590 Korean hangul 6F496E AD6C EAB5AC Korean hangul 6F496F AD6D EAB5AD Korean hangul 6F4970 AD70 EAB5B0 Korean hangul 6F4971 AD73 EAB5B3 Korean hangul 6F4972 AD74 EAB5B4 Korean hangul 6F4973 AD75 EAB5B5 Korean hangul 6F4974 AD76 EAB5B6 Korean hangul 6F4975 AD7C EAB5BC Korean hangul 6F4976 AD7D EAB5BD Korean hangul 6F4977 AD7F EAB5BF Korean hangul 6F4978 AD81 EAB681 Korean hangul 6F4979 AD82 EAB682 Korean hangul 6F497A AD88 EAB688 Korean hangul 6F497B AD8C EAB68C Korean hangul 6F497C AD90 EAB690 Korean hangul 6F497E ADA4 EAB6A4 Korean hangul 6F4A22 ADC0 EAB780 Korean hangul 6F4A23 ADC4 EAB784 Korean hangul 6F4A24 ADC8 EAB788 Korean hangul 6F4A25 ADD0 EAB790 Korean hangul 6F4A26 ADD1 EAB791 Korean hangul 6F4A27 ADD3 EAB793 Korean hangul 6F4A28 ADDC EAB79C Korean hangul 6F4A29 ADE0 EAB7A0 Korean hangul 6F4A2A ADE4 EAB7A4 Korean hangul 6F4A2B ADEC EAB7AC Korean hangul 6F4A2C ADF8 EAB7B8 Korean hangul 6F4A2D ADF9 EAB7B9 Korean hangul 6F4A2E ADFC EAB7BC Korean hangul 6F4A2F ADFF EAB7BF Korean hangul 6F4A30 AE00 EAB880 Korean hangul 6F4A31 AE01 EAB881 Korean hangul 6F4A32 AE08 EAB888 Korean hangul 6F4A33 AE09 EAB889 Korean hangul 6F4A34 AE0B EAB88B Korean hangul 6F4A35 AE0D EAB88D Korean hangul 6F4A36 AE30 EAB8B0 Korean hangul 6F4A37 AE31 EAB8B1 Korean hangul 6F4A38 AE34 EAB8B4 Korean hangul 6F4A39 AE37 EAB8B7 Korean hangul 6F4A3A AE38 EAB8B8 Korean hangul 6F4A3B AE40 EAB980 Korean hangul 6F4A3C AE41 EAB981 Korean hangul 6F4A3D AE43 EAB983 Korean hangul 6F4A3E AE44 EAB984 Korean hangul 6F4A3F AE45 EAB985 Korean hangul 6F4A40 AE4A EAB98A Korean hangul 6F4A43 AE4C EAB98C Korean hangul 6F4A44 AE4D EAB98D Korean hangul 6F4A45 AE4E EAB98E Korean hangul 6F4A46 AE50 EAB990 Korean hangul 6F4A47 AE54 EAB994 Korean hangul 6F4A48 AE5C EAB99C Korean hangul 6F4A49 AE5D EAB99D Korean hangul 6F4A4A AE60 EAB9A0 Korean hangul 6F4A4B AE61 EAB9A1 Korean hangul 6F4A4C AE62 EAB9A2 Korean hangul 6F4A4D AE65 EAB9A5 Korean hangul 6F4A4E AE68 EAB9A8 Korean hangul 6F4A4F AE69 EAB9A9 Korean hangul 6F4A50 AE6C EAB9AC Korean hangul 6F4A51 AE70 EAB9B0 Korean hangul 6F4A52 AE78 EAB9B8 Korean hangul 6F4A53 AE79 EAB9B9 Korean hangul 6F4A54 AE7B EAB9BB Korean hangul 6F4A55 AE7C EAB9BC Korean hangul 6F4A56 AE7D EAB9BD Korean hangul 6F4A57 AE84 EABA84 Korean hangul 6F4A58 AE85 EABA85 Korean hangul 6F4A59 AEBC EABABC Korean hangul 6F4A5A AEBD EABABD Korean hangul 6F4A5B AEBE EABABE Korean hangul 6F4A5C AEC0 EABB80 Korean hangul 6F4A5D AEC4 EABB84 Korean hangul 6F4A5E AECC EABB8C Korean hangul 6F4A5F AECD EABB8D Korean hangul 6F4A60 AECF EABB8F Korean hangul 6F4A61 AED0 EABB90 Korean hangul 6F4A62 AED1 EABB91 Korean hangul 6F4A63 AED8 EABB98 Korean hangul 6F4A64 AEDC EABB9C Korean hangul 6F4A65 AEF4 EABBB4 Korean hangul 6F4A66 AF0D EABC8D Korean hangul 6F4A67 AF2C EABCAC Korean hangul 6F4A68 AF2D EABCAD Korean hangul 6F4A69 AF30 EABCB0 Korean hangul 6F4A6A AF34 EABCB4 Korean hangul 6F4A6B AF3C EABCBC Korean hangul 6F4A6C AF3D EABCBD Korean hangul 6F4A6D AF3F EABCBF Korean hangul 6F4A6E AF41 EABD81 Korean hangul 6F4A6F AF42 EABD82 Korean hangul 6F4A70 AF43 EABD83 Korean hangul 6F4A71 AF48 EABD88 Korean hangul 6F4A72 AF49 EABD89 Korean hangul 6F4A73 AF4C EABD8C Korean hangul 6F4A74 AF58 EABD98 Korean hangul 6F4A75 AF5C EABD9C Korean hangul 6F4A76 AF5D EABD9D Korean hangul 6F4A77 AF64 EABDA4 Korean hangul 6F4A78 AF65 EABDA5 Korean hangul 6F4A79 AF79 EABDB9 Korean hangul 6F4A7A AF80 EABE80 Korean hangul 6F4A7B AF84 EABE84 Korean hangul 6F4A7C AF88 EABE88 Korean hangul 6F4A7D AF90 EABE90 Korean hangul 6F4A7E AF95 EABE95 Korean hangul 6F4B21 AF9C EABE9C Korean hangul 6F4B22 AFB8 EABEB8 Korean hangul 6F4B23 AFB9 EABEB9 Korean hangul 6F4B24 AFBC EABEBC Korean hangul 6F4B25 AFC0 EABF80 Korean hangul 6F4B26 AFC7 EABF87 Korean hangul 6F4B27 AFC8 EABF88 Korean hangul 6F4B28 AFC9 EABF89 Korean hangul 6F4B29 AFCB EABF8B Korean hangul 6F4B2A AFCD EABF8D Korean hangul 6F4B2B AFCE EABF8E Korean hangul 6F4B2C AFD4 EABF94 Korean hangul 6F4B2D AFD8 EABF98 Korean hangul 6F4B2E AFE9 EABFA9 Korean hangul 6F4B2F AFF0 EABFB0 Korean hangul 6F4B30 B000 EB8080 Korean hangul 6F4B32 B00C EB808C Korean hangul 6F4B33 B00D EB808D Korean hangul 6F4B34 B010 EB8090 Korean hangul 6F4B35 B014 EB8094 Korean hangul 6F4B36 B01C EB809C Korean hangul 6F4B37 B01D EB809D Korean hangul 6F4B38 B028 EB80A8 Korean hangul 6F4B39 B044 EB8184 Korean hangul 6F4B3A B045 EB8185 Korean hangul 6F4B3B B048 EB8188 Korean hangul 6F4B3C B04A EB818A Korean hangul 6F4B3D B04C EB818C Korean hangul 6F4B3E B053 EB8193 Korean hangul 6F4B3F B054 EB8194 Korean hangul 6F4B40 B055 EB8195 Korean hangul 6F4B41 B057 EB8197 Korean hangul 6F4B42 B059 EB8199 Korean hangul 6F4B43 B05D EB819D Korean hangul 6F4B44 B07C EB81BC Korean hangul 6F4B45 B07D EB81BD Korean hangul 6F4B46 B080 EB8280 Korean hangul 6F4B47 B084 EB8284 Korean hangul 6F4B48 B08C EB828C Korean hangul 6F4B49 B08D EB828D Korean hangul 6F4B4A B08F EB828F Korean hangul 6F4B4B B090 EB8290 Korean hangul 6F4B4C B091 EB8291 Korean hangul 6F4B4F B098 EB8298 Korean hangul 6F4B50 B099 EB8299 Korean hangul 6F4B51 B09A EB829A Korean hangul 6F4B52 B09C EB829C Korean hangul 6F4B53 B09F EB829F Korean hangul 6F4B54 B0A0 EB82A0 Korean hangul 6F4B55 B0A1 EB82A1 Korean hangul 6F4B56 B0A8 EB82A8 Korean hangul 6F4B57 B0A9 EB82A9 Korean hangul 6F4B58 B0AB EB82AB Korean hangul 6F4B59 B0AC EB82AC Korean hangul 6F4B5A B0AD EB82AD Korean hangul 6F4B5B B0AE EB82AE Korean hangul 6F4B5C B0AF EB82AF Korean hangul 6F4B5D B0B1 EB82B1 Korean hangul 6F4B5E B0B3 EB82B3 Korean hangul 6F4B5F B0B4 EB82B4 Korean hangul 6F4B60 B0B5 EB82B5 Korean hangul 6F4B61 B0B8 EB82B8 Korean hangul 6F4B62 B0BB EB82BB Korean hangul 6F4B63 B0BC EB82BC Korean hangul 6F4B64 B0C4 EB8384 Korean hangul 6F4B65 B0C5 EB8385 Korean hangul 6F4B66 B0C7 EB8387 Korean hangul 6F4B67 B0C8 EB8388 Korean hangul 6F4B68 B0C9 EB8389 Korean hangul 6F4B69 B0D0 EB8390 Korean hangul 6F4B6A B0D1 EB8391 Korean hangul 6F4B6B B0E0 EB83A0 Korean hangul 6F4B6C B0E5 EB83A5 Korean hangul 6F4B6D B0EC EB83AC Korean hangul 6F4B6E B108 EB8488 Korean hangul 6F4B6F B109 EB8489 Korean hangul 6F4B71 B10B EB848B Korean hangul 6F4B72 B10C EB848C Korean hangul 6F4B73 B10F EB848F Korean hangul 6F4B74 B110 EB8490 Korean hangul 6F4B75 B113 EB8493 Korean hangul 6F4B76 B118 EB8498 Korean hangul 6F4B77 B119 EB8499 Korean hangul 6F4B78 B11B EB849B Korean hangul 6F4B79 B11C EB849C Korean hangul 6F4B7A B11D EB849D Korean hangul 6F4B7B B11E EB849E Korean hangul 6F4B7C B123 EB84A3 Korean hangul 6F4B7D B124 EB84A4 Korean hangul 6F4B7E B125 EB84A5 Korean hangul 6F4C21 B128 EB84A8 Korean hangul 6F4C22 B12C EB84AC Korean hangul 6F4C23 B134 EB84B4 Korean hangul 6F4C24 B135 EB84B5 Korean hangul 6F4C25 B137 EB84B7 Korean hangul 6F4C26 B140 EB8580 Korean hangul 6F4C27 B141 EB8581 Korean hangul 6F4C28 B144 EB8584 Korean hangul 6F4C29 B150 EB8590 Korean hangul 6F4C2A B151 EB8591 Korean hangul 6F4C2B B153 EB8593 Korean hangul 6F4C2C B154 EB8594 Korean hangul 6F4C2D B155 EB8595 Korean hangul 6F4C2E B158 EB8598 Korean hangul 6F4C2F B15C EB859C Korean hangul 6F4C30 B178 EB85B8 Korean hangul 6F4C31 B179 EB85B9 Korean hangul 6F4C32 B17A EB85BA Korean hangul 6F4C33 B17C EB85BC Korean hangul 6F4C34 B180 EB8680 Korean hangul 6F4C35 B188 EB8688 Korean hangul 6F4C36 B189 EB8689 Korean hangul 6F4C37 B18B EB868B Korean hangul 6F4C38 B18D EB868D Korean hangul 6F4C39 B192 EB8692 Korean hangul 6F4C3A B193 EB8693 Korean hangul 6F4C3B B194 EB8694 Korean hangul 6F4C3C B1A8 EB86A8 Korean hangul 6F4C3D B1CC EB878C Korean hangul 6F4C3E B1D0 EB8790 Korean hangul 6F4C3F B1D4 EB8794 Korean hangul 6F4C40 B1DC EB879C Korean hangul 6F4C41 B1E8 EB87A8 Korean hangul 6F4C42 B1FD EB87BD Korean hangul 6F4C43 B204 EB8884 Korean hangul 6F4C44 B205 EB8885 Korean hangul 6F4C45 B208 EB8888 Korean hangul 6F4C46 B20B EB888B Korean hangul 6F4C47 B20C EB888C Korean hangul 6F4C48 B213 EB8893 Korean hangul 6F4C49 B214 EB8894 Korean hangul 6F4C4A B215 EB8895 Korean hangul 6F4C4B B217 EB8897 Korean hangul 6F4C4C B220 EB88A0 Korean hangul 6F4C4D B233 EB88B3 Korean hangul 6F4C4E B234 EB88B4 Korean hangul 6F4C4F B258 EB8998 Korean hangul 6F4C50 B25C EB899C Korean hangul 6F4C51 B260 EB89A0 Korean hangul 6F4C52 B268 EB89A8 Korean hangul 6F4C53 B269 EB89A9 Korean hangul 6F4C54 B274 EB89B4 Korean hangul 6F4C55 B284 EB8A84 Korean hangul 6F4C56 B289 EB8A89 Korean hangul 6F4C57 B290 EB8A90 Korean hangul 6F4C58 B291 EB8A91 Korean hangul 6F4C59 B294 EB8A94 Korean hangul 6F4C5A B298 EB8A98 Korean hangul 6F4C5B B299 EB8A99 Korean hangul 6F4C5C B2A0 EB8AA0 Korean hangul 6F4C5D B2A1 EB8AA1 Korean hangul 6F4C5E B2A5 EB8AA5 Korean hangul 6F4C5F B2A6 EB8AA6 Korean hangul 6F4C60 B2AA EB8AAA Korean hangul 6F4C61 B2AC EB8AAC Korean hangul 6F4C62 B2C8 EB8B88 Korean hangul 6F4C63 B2C9 EB8B89 Korean hangul 6F4C64 B2CC EB8B8C Korean hangul 6F4C65 B2D0 EB8B90 Korean hangul 6F4C66 B2D8 EB8B98 Korean hangul 6F4C67 B2D9 EB8B99 Korean hangul 6F4C68 B2DB EB8B9B Korean hangul 6F4C69 B2DD EB8B9D Korean hangul 6F4C6A B2E2 EB8BA2 Korean hangul 6F4C6D B2E4 EB8BA4 Korean hangul 6F4C6E B2E5 EB8BA5 Korean hangul 6F4C6F B2E6 EB8BA6 Korean hangul 6F4C70 B2E8 EB8BA8 Korean hangul 6F4C71 B2EB EB8BAB Korean hangul 6F4C72 B2EC EB8BAC Korean hangul 6F4C73 B2ED EB8BAD Korean hangul 6F4C74 B2EE EB8BAE Korean hangul 6F4C75 B2F3 EB8BB3 Korean hangul 6F4C76 B2F4 EB8BB4 Korean hangul 6F4C77 B2F5 EB8BB5 Korean hangul 6F4C78 B2F7 EB8BB7 Korean hangul 6F4C79 B2F9 EB8BB9 Korean hangul 6F4C7A B2FA EB8BBA Korean hangul 6F4C7B B2FB EB8BBB Korean hangul 6F4C7C B2FF EB8BBF Korean hangul 6F4C7D B300 EB8C80 Korean hangul 6F4C7E B301 EB8C81 Korean hangul 6F4D21 B304 EB8C84 Korean hangul 6F4D22 B308 EB8C88 Korean hangul 6F4D23 B310 EB8C90 Korean hangul 6F4D24 B311 EB8C91 Korean hangul 6F4D25 B313 EB8C93 Korean hangul 6F4D26 B314 EB8C94 Korean hangul 6F4D27 B315 EB8C95 Korean hangul 6F4D28 B354 EB8D94 Korean hangul 6F4D29 B355 EB8D95 Korean hangul 6F4D2A B358 EB8D98 Korean hangul 6F4D2B B35B EB8D9B Korean hangul 6F4D2C B35C EB8D9C Korean hangul 6F4D2D B35F EB8D9F Korean hangul 6F4D2E B364 EB8DA4 Korean hangul 6F4D2F B365 EB8DA5 Korean hangul 6F4D30 B367 EB8DA7 Korean hangul 6F4D31 B368 EB8DA8 Korean hangul 6F4D32 B369 EB8DA9 Korean hangul 6F4D33 B36A EB8DAA Korean hangul 6F4D34 B36B EB8DAB Korean hangul 6F4D35 B36E EB8DAE Korean hangul 6F4D36 B370 EB8DB0 Korean hangul 6F4D37 B371 EB8DB1 Korean hangul 6F4D38 B374 EB8DB4 Korean hangul 6F4D39 B378 EB8DB8 Korean hangul 6F4D3A B380 EB8E80 Korean hangul 6F4D3B B383 EB8E83 Korean hangul 6F4D3C B385 EB8E85 Korean hangul 6F4D3D B38C EB8E8C Korean hangul 6F4D3E B3C4 EB8F84 Korean hangul 6F4D3F B3C5 EB8F85 Korean hangul 6F4D40 B3C8 EB8F88 Korean hangul 6F4D41 B3CB EB8F8B Korean hangul 6F4D42 B3CC EB8F8C Korean hangul 6F4D43 B3D0 EB8F90 Korean hangul 6F4D44 B3D4 EB8F94 Korean hangul 6F4D45 B3D5 EB8F95 Korean hangul 6F4D46 B3D7 EB8F97 Korean hangul 6F4D47 B3D9 EB8F99 Korean hangul 6F4D48 B3DB EB8F9B Korean hangul 6F4D49 B3FC EB8FBC Korean hangul 6F4D4A B400 EB9080 Korean hangul 6F4D4B B410 EB9090 Korean hangul 6F4D4C B418 EB9098 Korean hangul 6F4D4D B41C EB909C Korean hangul 6F4D4E B420 EB90A0 Korean hangul 6F4D4F B428 EB90A8 Korean hangul 6F4D50 B429 EB90A9 Korean hangul 6F4D51 B42B EB90AB Korean hangul 6F4D52 B42C EB90AC Korean hangul 6F4D53 B450 EB9190 Korean hangul 6F4D54 B451 EB9191 Korean hangul 6F4D55 B454 EB9194 Korean hangul 6F4D56 B458 EB9198 Korean hangul 6F4D57 B460 EB91A0 Korean hangul 6F4D58 B461 EB91A1 Korean hangul 6F4D59 B463 EB91A3 Korean hangul 6F4D5A B465 EB91A5 Korean hangul 6F4D5B B46C EB91AC Korean hangul 6F4D5C B480 EB9280 Korean hangul 6F4D5D B488 EB9288 Korean hangul 6F4D5E B4A4 EB92A4 Korean hangul 6F4D5F B4B7 EB92B7 Korean hangul 6F4D60 B4C0 EB9380 Korean hangul 6F4D61 B4D0 EB9390 Korean hangul 6F4D62 B4DC EB939C Korean hangul 6F4D63 B4DD EB939D Korean hangul 6F4D64 B4E0 EB93A0 Korean hangul 6F4D65 B4E3 EB93A3 Korean hangul 6F4D66 B4E4 EB93A4 Korean hangul 6F4D67 B4EC EB93AC Korean hangul 6F4D68 B4ED EB93AD Korean hangul 6F4D69 B4EF EB93AF Korean hangul 6F4D6A B4F1 EB93B1 Korean hangul 6F4D6B B514 EB9494 Korean hangul 6F4D6C B515 EB9495 Korean hangul 6F4D6D B518 EB9498 Korean hangul 6F4D6E B51B EB949B Korean hangul 6F4D6F B51C EB949C Korean hangul 6F4D70 B524 EB94A4 Korean hangul 6F4D71 B525 EB94A5 Korean hangul 6F4D72 B527 EB94A7 Korean hangul 6F4D73 B528 EB94A8 Korean hangul 6F4D74 B529 EB94A9 Korean hangul 6F4D75 B52A EB94AA Korean hangul 6F4D78 B530 EB94B0 Korean hangul 6F4D79 B531 EB94B1 Korean hangul 6F4D7A B532 EB94B2 Korean hangul 6F4D7B B534 EB94B4 Korean hangul 6F4D7C B537 EB94B7 Korean hangul 6F4D7D B538 EB94B8 Korean hangul 6F4E21 B540 EB9580 Korean hangul 6F4E22 B541 EB9581 Korean hangul 6F4E23 B543 EB9583 Korean hangul 6F4E24 B544 EB9584 Korean hangul 6F4E25 B545 EB9585 Korean hangul 6F4E26 B54B EB958B Korean hangul 6F4E27 B54C EB958C Korean hangul 6F4E28 B54D EB958D Korean hangul 6F4E29 B550 EB9590 Korean hangul 6F4E2A B554 EB9594 Korean hangul 6F4E2B B55C EB959C Korean hangul 6F4E2C B55D EB959D Korean hangul 6F4E2D B55F EB959F Korean hangul 6F4E2E B560 EB95A0 Korean hangul 6F4E2F B561 EB95A1 Korean hangul 6F4E30 B5A0 EB96A0 Korean hangul 6F4E31 B5A1 EB96A1 Korean hangul 6F4E32 B5A4 EB96A4 Korean hangul 6F4E33 B5A8 EB96A8 Korean hangul 6F4E34 B5AB EB96AB Korean hangul 6F4E35 B5B0 EB96B0 Korean hangul 6F4E36 B5B1 EB96B1 Korean hangul 6F4E37 B5B3 EB96B3 Korean hangul 6F4E38 B5B4 EB96B4 Korean hangul 6F4E39 B5B5 EB96B5 Korean hangul 6F4E3A B5BB EB96BB Korean hangul 6F4E3B B5BC EB96BC Korean hangul 6F4E3C B5C0 EB9780 Korean hangul 6F4E3D B5C4 EB9784 Korean hangul 6F4E3E B5CC EB978C Korean hangul 6F4E3F B5CF EB978F Korean hangul 6F4E40 B5D1 EB9791 Korean hangul 6F4E41 B610 EB9890 Korean hangul 6F4E42 B611 EB9891 Korean hangul 6F4E43 B614 EB9894 Korean hangul 6F4E44 B618 EB9898 Korean hangul 6F4E45 B625 EB98A5 Korean hangul 6F4E46 B664 EB99A4 Korean hangul 6F4E47 B69C EB9A9C Korean hangul 6F4E48 B69D EB9A9D Korean hangul 6F4E49 B6A4 EB9AA4 Korean hangul 6F4E4A B6AB EB9AAB Korean hangul 6F4E4B B6AC EB9AAC Korean hangul 6F4E4C B6B1 EB9AB1 Korean hangul 6F4E4D B6F0 EB9BB0 Korean hangul 6F4E4E B6F4 EB9BB4 Korean hangul 6F4E4F B6F8 EB9BB8 Korean hangul 6F4E50 B700 EB9C80 Korean hangul 6F4E51 B701 EB9C81 Korean hangul 6F4E52 B728 EB9CA8 Korean hangul 6F4E53 B729 EB9CA9 Korean hangul 6F4E54 B72C EB9CAC Korean hangul 6F4E55 B72F EB9CAF Korean hangul 6F4E56 B730 EB9CB0 Korean hangul 6F4E57 B738 EB9CB8 Korean hangul 6F4E58 B739 EB9CB9 Korean hangul 6F4E59 B73B EB9CBB Korean hangul 6F4E5A B744 EB9D84 Korean hangul 6F4E5B B748 EB9D88 Korean hangul 6F4E5C B760 EB9DA0 Korean hangul 6F4E5D B764 EB9DA4 Korean hangul 6F4E5E B768 EB9DA8 Korean hangul 6F4E5F B770 EB9DB0 Korean hangul 6F4E60 B771 EB9DB1 Korean hangul 6F4E61 B775 EB9DB5 Korean hangul 6F4E64 B77C EB9DBC Korean hangul 6F4E65 B77D EB9DBD Korean hangul 6F4E66 B780 EB9E80 Korean hangul 6F4E67 B784 EB9E84 Korean hangul 6F4E68 B78C EB9E8C Korean hangul 6F4E69 B78D EB9E8D Korean hangul 6F4E6A B78F EB9E8F Korean hangul 6F4E6B B790 EB9E90 Korean hangul 6F4E6C B791 EB9E91 Korean hangul 6F4E6D B797 EB9E97 Korean hangul 6F4E6E B798 EB9E98 Korean hangul 6F4E6F B799 EB9E99 Korean hangul 6F4E70 B79C EB9E9C Korean hangul 6F4E71 B7A0 EB9EA0 Korean hangul 6F4E72 B7A8 EB9EA8 Korean hangul 6F4E73 B7A9 EB9EA9 Korean hangul 6F4E74 B7AB EB9EAB Korean hangul 6F4E75 B7AC EB9EAC Korean hangul 6F4E76 B7AD EB9EAD Korean hangul 6F4E77 B7B4 EB9EB4 Korean hangul 6F4E78 B7B5 EB9EB5 Korean hangul 6F4E79 B7C9 EB9F89 Korean hangul 6F4E7A B7EC EB9FAC Korean hangul 6F4E7B B7ED EB9FAD Korean hangul 6F4E7C B7F0 EB9FB0 Korean hangul 6F4E7D B7F4 EB9FB4 Korean hangul 6F4E7E B7FC EB9FBC Korean hangul 6F4F21 B7FD EB9FBD Korean hangul 6F4F22 B7FF EB9FBF Korean hangul 6F4F23 B800 EBA080 Korean hangul 6F4F24 B801 EBA081 Korean hangul 6F4F25 B807 EBA087 Korean hangul 6F4F26 B808 EBA088 Korean hangul 6F4F27 B809 EBA089 Korean hangul 6F4F28 B80C EBA08C Korean hangul 6F4F29 B810 EBA090 Korean hangul 6F4F2A B818 EBA098 Korean hangul 6F4F2B B819 EBA099 Korean hangul 6F4F2C B81B EBA09B Korean hangul 6F4F2D B81D EBA09D Korean hangul 6F4F2E B824 EBA0A4 Korean hangul 6F4F2F B825 EBA0A5 Korean hangul 6F4F30 B828 EBA0A8 Korean hangul 6F4F31 B82C EBA0AC Korean hangul 6F4F32 B834 EBA0B4 Korean hangul 6F4F33 B835 EBA0B5 Korean hangul 6F4F34 B837 EBA0B7 Korean hangul 6F4F35 B838 EBA0B8 Korean hangul 6F4F36 B839 EBA0B9 Korean hangul 6F4F37 B840 EBA180 Korean hangul 6F4F38 B85C EBA19C Korean hangul 6F4F39 B85D EBA19D Korean hangul 6F4F3A B860 EBA1A0 Korean hangul 6F4F3B B864 EBA1A4 Korean hangul 6F4F3C B86C EBA1AC Korean hangul 6F4F3D B86D EBA1AD Korean hangul 6F4F3E B86F EBA1AF Korean hangul 6F4F3F B871 EBA1B1 Korean hangul 6F4F40 B8B0 EBA2B0 Korean hangul 6F4F41 B8CC EBA38C Korean hangul 6F4F42 B8E1 EBA3A1 Korean hangul 6F4F43 B8E8 EBA3A8 Korean hangul 6F4F44 B8E9 EBA3A9 Korean hangul 6F4F45 B8EC EBA3AC Korean hangul 6F4F46 B8F0 EBA3B0 Korean hangul 6F4F47 B8F8 EBA3B8 Korean hangul 6F4F48 B8F9 EBA3B9 Korean hangul 6F4F49 B8FB EBA3BB Korean hangul 6F4F4A B8FD EBA3BD Korean hangul 6F4F4B B904 EBA484 Korean hangul 6F4F4C B93C EBA4BC Korean hangul 6F4F4D B958 EBA598 Korean hangul 6F4F4E B959 EBA599 Korean hangul 6F4F4F B95C EBA59C Korean hangul 6F4F50 B960 EBA5A0 Korean hangul 6F4F51 B968 EBA5A8 Korean hangul 6F4F52 B96D EBA5AD Korean hangul 6F4F53 B974 EBA5B4 Korean hangul 6F4F54 B975 EBA5B5 Korean hangul 6F4F55 B978 EBA5B8 Korean hangul 6F4F56 B97C EBA5BC Korean hangul 6F4F57 B984 EBA684 Korean hangul 6F4F58 B985 EBA685 Korean hangul 6F4F59 B987 EBA687 Korean hangul 6F4F5A B989 EBA689 Korean hangul 6F4F5B B98E EBA68E Korean hangul 6F4F5C B9AC EBA6AC Korean hangul 6F4F5D B9AD EBA6AD Korean hangul 6F4F5E B9B0 EBA6B0 Korean hangul 6F4F5F B9B4 EBA6B4 Korean hangul 6F4F60 B9BC EBA6BC Korean hangul 6F4F61 B9BD EBA6BD Korean hangul 6F4F62 B9BF EBA6BF Korean hangul 6F4F63 B9C1 EBA781 Korean hangul 6F4F66 B9C8 EBA788 Korean hangul 6F4F67 B9C9 EBA789 Korean hangul 6F4F68 B9CC EBA78C Korean hangul 6F4F69 B9CE EBA78E Korean hangul 6F4F6A B9CF EBA78F Korean hangul 6F4F6B B9D0 EBA790 Korean hangul 6F4F6C B9D1 EBA791 Korean hangul 6F4F6D B9D8 EBA798 Korean hangul 6F4F6E B9D9 EBA799 Korean hangul 6F4F6F B9DB EBA79B Korean hangul 6F4F70 B9DD EBA79D Korean hangul 6F4F71 B9DE EBA79E Korean hangul 6F4F72 B9E1 EBA7A1 Korean hangul 6F4F73 B9E3 EBA7A3 Korean hangul 6F4F74 B9E4 EBA7A4 Korean hangul 6F4F75 B9E5 EBA7A5 Korean hangul 6F4F76 B9E8 EBA7A8 Korean hangul 6F4F77 B9EC EBA7AC Korean hangul 6F4F78 B9F4 EBA7B4 Korean hangul 6F4F79 B9F5 EBA7B5 Korean hangul 6F4F7A B9F7 EBA7B7 Korean hangul 6F4F7B B9F8 EBA7B8 Korean hangul 6F4F7C B9F9 EBA7B9 Korean hangul 6F4F7D B9FA EBA7BA Korean hangul 6F4F7E BA00 EBA880 Korean hangul 6F5021 BA38 EBA8B8 Korean hangul 6F5022 BA39 EBA8B9 Korean hangul 6F5023 BA3C EBA8BC Korean hangul 6F5024 BA40 EBA980 Korean hangul 6F5025 BA48 EBA988 Korean hangul 6F5026 BA49 EBA989 Korean hangul 6F5027 BA4B EBA98B Korean hangul 6F5028 BA4D EBA98D Korean hangul 6F5029 BA4E EBA98E Korean hangul 6F502A BA53 EBA993 Korean hangul 6F502B BA54 EBA994 Korean hangul 6F502C BA55 EBA995 Korean hangul 6F502D BA58 EBA998 Korean hangul 6F502E BA5C EBA99C Korean hangul 6F502F BA64 EBA9A4 Korean hangul 6F5030 BA65 EBA9A5 Korean hangul 6F5031 BA67 EBA9A7 Korean hangul 6F5032 BA70 EBA9B0 Korean hangul 6F5033 BA71 EBA9B1 Korean hangul 6F5034 BA74 EBA9B4 Korean hangul 6F5035 BA78 EBA9B8 Korean hangul 6F5036 BA83 EBAA83 Korean hangul 6F5037 BA84 EBAA84 Korean hangul 6F5038 BA85 EBAA85 Korean hangul 6F5039 BA87 EBAA87 Korean hangul 6F503A BAA8 EBAAA8 Korean hangul 6F503B BAA9 EBAAA9 Korean hangul 6F503C BAAB EBAAAB Korean hangul 6F503D BAAC EBAAAC Korean hangul 6F503E BAB0 EBAAB0 Korean hangul 6F503F BAB8 EBAAB8 Korean hangul 6F5040 BAB9 EBAAB9 Korean hangul 6F5041 BABB EBAABB Korean hangul 6F5042 BABD EBAABD Korean hangul 6F5043 BAC3 EBAB83 Korean hangul 6F5044 BAFC EBABBC Korean hangul 6F5045 BB0F EBAC8F Korean hangul 6F5046 BB18 EBAC98 Korean hangul 6F5047 BB34 EBACB4 Korean hangul 6F5048 BB35 EBACB5 Korean hangul 6F5049 BB36 EBACB6 Korean hangul 6F504A BB38 EBACB8 Korean hangul 6F504B BB3B EBACBB Korean hangul 6F504C BB3C EBACBC Korean hangul 6F504D BB3D EBACBD Korean hangul 6F504E BB44 EBAD84 Korean hangul 6F504F BB47 EBAD87 Korean hangul 6F5050 BB49 EBAD89 Korean hangul 6F5051 BB4D EBAD8D Korean hangul 6F5052 BB4F EBAD8F Korean hangul 6F5053 BB50 EBAD90 Korean hangul 6F5054 BB54 EBAD94 Korean hangul 6F5055 BB58 EBAD98 Korean hangul 6F5056 BB61 EBADA1 Korean hangul 6F5057 BB63 EBADA3 Korean hangul 6F5058 BB88 EBAE88 Korean hangul 6F5059 BB8C EBAE8C Korean hangul 6F505A BBA4 EBAEA4 Korean hangul 6F505B BBC0 EBAF80 Korean hangul 6F505C BBC4 EBAF84 Korean hangul 6F505D BBC8 EBAF88 Korean hangul 6F505E BBD0 EBAF90 Korean hangul 6F505F BBF8 EBAFB8 Korean hangul 6F5060 BBF9 EBAFB9 Korean hangul 6F5061 BBFC EBAFBC Korean hangul 6F5062 BBFF EBAFBF Korean hangul 6F5063 BC00 EBB080 Korean hangul 6F5064 BC08 EBB088 Korean hangul 6F5065 BC09 EBB089 Korean hangul 6F5066 BC0B EBB08B Korean hangul 6F5068 BC0D EBB08D Korean hangul 6F5069 BC0F EBB08F Korean hangul 6F506A BC11 EBB091 Korean hangul 6F506B BBB4 EBAEB4 Korean hangul 6F506D BC14 EBB094 Korean hangul 6F506E BC15 EBB095 Korean hangul 6F506F BC16 EBB096 Korean hangul 6F5070 BC18 EBB098 Korean hangul 6F5071 BC1B EBB09B Korean hangul 6F5072 BC1C EBB09C Korean hangul 6F5073 BC1D EBB09D Korean hangul 6F5074 BC1F EBB09F Korean hangul 6F5075 BC24 EBB0A4 Korean hangul 6F5076 BC25 EBB0A5 Korean hangul 6F5077 BC27 EBB0A7 Korean hangul 6F5078 BC29 EBB0A9 Korean hangul 6F5079 BC2D EBB0AD Korean hangul 6F507A BC30 EBB0B0 Korean hangul 6F507B BC31 EBB0B1 Korean hangul 6F507C BC34 EBB0B4 Korean hangul 6F507D BC37 EBB0B7 Korean hangul 6F507E BC38 EBB0B8 Korean hangul 6F5121 BC40 EBB180 Korean hangul 6F5122 BC41 EBB181 Korean hangul 6F5123 BC43 EBB183 Korean hangul 6F5124 BC44 EBB184 Korean hangul 6F5125 BC45 EBB185 Korean hangul 6F5126 BC84 EBB284 Korean hangul 6F5127 BC85 EBB285 Korean hangul 6F5128 BC88 EBB288 Korean hangul 6F5129 BC8B EBB28B Korean hangul 6F512A BC8C EBB28C Korean hangul 6F512B BC94 EBB294 Korean hangul 6F512C BC95 EBB295 Korean hangul 6F512D BC97 EBB297 Korean hangul 6F512E BC98 EBB298 Korean hangul 6F512F BC99 EBB299 Korean hangul 6F5130 BC9A EBB29A Korean hangul 6F5131 BCA0 EBB2A0 Korean hangul 6F5132 BCA1 EBB2A1 Korean hangul 6F5133 BCA4 EBB2A4 Korean hangul 6F5134 BCA7 EBB2A7 Korean hangul 6F5135 BCA8 EBB2A8 Korean hangul 6F5136 BCB0 EBB2B0 Korean hangul 6F5137 BCB1 EBB2B1 Korean hangul 6F5138 BCB3 EBB2B3 Korean hangul 6F5139 BCB5 EBB2B5 Korean hangul 6F513A BCBC EBB2BC Korean hangul 6F513B BCBD EBB2BD Korean hangul 6F513C BCC0 EBB380 Korean hangul 6F513D BCC4 EBB384 Korean hangul 6F513E BCCC EBB38C Korean hangul 6F513F BCCD EBB38D Korean hangul 6F5140 BCCF EBB38F Korean hangul 6F5141 BCD0 EBB390 Korean hangul 6F5142 BCD1 EBB391 Korean hangul 6F5143 BCD2 EBB392 Korean hangul 6F5144 BCD5 EBB395 Korean hangul 6F5145 BCF4 EBB3B4 Korean hangul 6F5146 BCF5 EBB3B5 Korean hangul 6F5147 BCF6 EBB3B6 Korean hangul 6F5148 BCF8 EBB3B8 Korean hangul 6F5149 BCFC EBB3BC Korean hangul 6F514A BD04 EBB484 Korean hangul 6F514B BD05 EBB485 Korean hangul 6F514C BD07 EBB487 Korean hangul 6F514D BD09 EBB489 Korean hangul 6F514E BD10 EBB490 Korean hangul 6F514F BD14 EBB494 Korean hangul 6F5150 BD24 EBB4A4 Korean hangul 6F5151 BD48 EBB588 Korean hangul 6F5152 BD49 EBB589 Korean hangul 6F5153 BD4C EBB58C Korean hangul 6F5154 BD50 EBB590 Korean hangul 6F5155 BD58 EBB598 Korean hangul 6F5156 BD59 EBB599 Korean hangul 6F5157 BD64 EBB5A4 Korean hangul 6F5158 BD80 EBB680 Korean hangul 6F5159 BD81 EBB681 Korean hangul 6F515A BD84 EBB684 Korean hangul 6F515B BD87 EBB687 Korean hangul 6F515C BD88 EBB688 Korean hangul 6F515D BD89 EBB689 Korean hangul 6F515E BD90 EBB690 Korean hangul 6F515F BD91 EBB691 Korean hangul 6F5160 BD93 EBB693 Korean hangul 6F5161 BD95 EBB695 Korean hangul 6F5162 BD99 EBB699 Korean hangul 6F5163 BD9C EBB69C Korean hangul 6F5164 BDD4 EBB794 Korean hangul 6F5165 BDF0 EBB7B0 Korean hangul 6F5166 BE0C EBB88C Korean hangul 6F5167 BE0D EBB88D Korean hangul 6F5168 BE10 EBB890 Korean hangul 6F5169 BE14 EBB894 Korean hangul 6F516A BE1C EBB89C Korean hangul 6F516B BE1D EBB89D Korean hangul 6F516C BE1F EBB89F Korean hangul 6F516D BE44 EBB984 Korean hangul 6F516E BE45 EBB985 Korean hangul 6F516F BE48 EBB988 Korean hangul 6F5170 BE4B EBB98B Korean hangul 6F5171 BE4C EBB98C Korean hangul 6F5172 BE4E EBB98E Korean hangul 6F5173 BE54 EBB994 Korean hangul 6F5174 BE55 EBB995 Korean hangul 6F5175 BE57 EBB997 Korean hangul 6F5176 BE59 EBB999 Korean hangul 6F5177 BE5A EBB99A Korean hangul 6F5178 BE5B EBB99B Korean hangul 6F517B BE60 EBB9A0 Korean hangul 6F517C BE61 EBB9A1 Korean hangul 6F517D BE64 EBB9A4 Korean hangul 6F517E BE68 EBB9A8 Korean hangul 6F5221 BE70 EBB9B0 Korean hangul 6F5222 BE71 EBB9B1 Korean hangul 6F5223 BE73 EBB9B3 Korean hangul 6F5224 BE74 EBB9B4 Korean hangul 6F5225 BE75 EBB9B5 Korean hangul 6F5226 BE7B EBB9BB Korean hangul 6F5227 BE7C EBB9BC Korean hangul 6F5228 BE7D EBB9BD Korean hangul 6F5229 BE80 EBBA80 Korean hangul 6F522A BE84 EBBA84 Korean hangul 6F522B BE8C EBBA8C Korean hangul 6F522C BE8F EBBA8F Korean hangul 6F522D BE90 EBBA90 Korean hangul 6F522E BE91 EBBA91 Korean hangul 6F522F BE98 EBBA98 Korean hangul 6F5230 BEA8 EBBAA8 Korean hangul 6F5231 BED0 EBBB90 Korean hangul 6F5232 BED1 EBBB91 Korean hangul 6F5233 BED4 EBBB94 Korean hangul 6F5234 BED7 EBBB97 Korean hangul 6F5235 BED8 EBBB98 Korean hangul 6F5236 BEE0 EBBBA0 Korean hangul 6F5237 BEE3 EBBBA3 Korean hangul 6F5238 BEE4 EBBBA4 Korean hangul 6F5239 BEE5 EBBBA5 Korean hangul 6F523A BEEC EBBBAC Korean hangul 6F523B BF08 EBBC88 Korean hangul 6F523C BF09 EBBC89 Korean hangul 6F523D BF18 EBBC98 Korean hangul 6F523E BF1D EBBC9D Korean hangul 6F523F BF40 EBBD80 Korean hangul 6F5240 BF41 EBBD81 Korean hangul 6F5241 BF44 EBBD84 Korean hangul 6F5242 BF48 EBBD88 Korean hangul 6F5243 BF50 EBBD90 Korean hangul 6F5244 BF51 EBBD91 Korean hangul 6F5245 BF55 EBBD95 Korean hangul 6F5246 BFB0 EBBEB0 Korean hangul 6F5247 BFC0 EBBF80 Korean hangul 6F5248 BFC5 EBBF85 Korean hangul 6F5249 BFCC EBBF8C Korean hangul 6F524A BFCD EBBF8D Korean hangul 6F524B BFD0 EBBF90 Korean hangul 6F524C BFD4 EBBF94 Korean hangul 6F524D BFDC EBBF9C Korean hangul 6F524E BFDD EBBF9D Korean hangul 6F524F BFE1 EBBFA1 Korean hangul 6F5250 C058 EC8198 Korean hangul 6F5251 C059 EC8199 Korean hangul 6F5252 C05C EC819C Korean hangul 6F5253 C060 EC81A0 Korean hangul 6F5254 C068 EC81A8 Korean hangul 6F5255 C069 EC81A9 Korean hangul 6F5256 C090 EC8290 Korean hangul 6F5257 C091 EC8291 Korean hangul 6F5258 C094 EC8294 Korean hangul 6F5259 C098 EC8298 Korean hangul 6F525A C0A0 EC82A0 Korean hangul 6F525B C0A3 EC82A3 Korean hangul 6F525C C0A5 EC82A5 Korean hangul 6F525F C0AC EC82AC Korean hangul 6F5260 C0AD EC82AD Korean hangul 6F5261 C0AE EC82AE Korean hangul 6F5262 C0AF EC82AF Korean hangul 6F5263 C0B0 EC82B0 Korean hangul 6F5264 C0B3 EC82B3 Korean hangul 6F5265 C0B4 EC82B4 Korean hangul 6F5266 C0B5 EC82B5 Korean hangul 6F5267 C0B6 EC82B6 Korean hangul 6F5268 C0BC EC82BC Korean hangul 6F5269 C0BD EC82BD Korean hangul 6F526A C0BF EC82BF Korean hangul 6F526B C0C0 EC8380 Korean hangul 6F526C C0C1 EC8381 Korean hangul 6F526D C0C5 EC8385 Korean hangul 6F526E C0C8 EC8388 Korean hangul 6F526F C0C9 EC8389 Korean hangul 6F5270 C0CC EC838C Korean hangul 6F5271 C0CF EC838F Korean hangul 6F5272 C0D0 EC8390 Korean hangul 6F5273 C0D8 EC8398 Korean hangul 6F5274 C0D9 EC8399 Korean hangul 6F5275 C0DB EC839B Korean hangul 6F5276 C0DC EC839C Korean hangul 6F5277 C0DD EC839D Korean hangul 6F5278 C0E4 EC83A4 Korean hangul 6F5279 C0E5 EC83A5 Korean hangul 6F527A C0E8 EC83A8 Korean hangul 6F527B C0EC EC83AC Korean hangul 6F527C C0F4 EC83B4 Korean hangul 6F527D C0F7 EC83B7 Korean hangul 6F527E C0F9 EC83B9 Korean hangul 6F5321 C11C EC849C Korean hangul 6F5322 C11D EC849D Korean hangul 6F5323 C11E EC849E Korean hangul 6F5324 C120 EC84A0 Korean hangul 6F5325 C123 EC84A3 Korean hangul 6F5326 C124 EC84A4 Korean hangul 6F5327 C125 EC84A5 Korean hangul 6F5328 C126 EC84A6 Korean hangul 6F5329 C127 EC84A7 Korean hangul 6F532A C12A EC84AA Korean hangul 6F532B C12C EC84AC Korean hangul 6F532C C12D EC84AD Korean hangul 6F532D C12F EC84AF Korean hangul 6F532E C130 EC84B0 Korean hangul 6F532F C131 EC84B1 Korean hangul 6F5330 C136 EC84B6 Korean hangul 6F5331 C138 EC84B8 Korean hangul 6F5332 C139 EC84B9 Korean hangul 6F5333 C13C EC84BC Korean hangul 6F5334 C140 EC8580 Korean hangul 6F5335 C148 EC8588 Korean hangul 6F5336 C149 EC8589 Korean hangul 6F5337 C14B EC858B Korean hangul 6F5338 C14D EC858D Korean hangul 6F5339 C151 EC8591 Korean hangul 6F533A C154 EC8594 Korean hangul 6F533B C158 EC8598 Korean hangul 6F533C C167 EC85A7 Korean hangul 6F533D C168 EC85A8 Korean hangul 6F533E C170 EC85B0 Korean hangul 6F533F C18C EC868C Korean hangul 6F5340 C18D EC868D Korean hangul 6F5341 C18E EC868E Korean hangul 6F5342 C190 EC8690 Korean hangul 6F5343 C194 EC8694 Korean hangul 6F5344 C19C EC869C Korean hangul 6F5345 C19D EC869D Korean hangul 6F5346 C19F EC869F Korean hangul 6F5347 C1A1 EC86A1 Korean hangul 6F5348 C1A5 EC86A5 Korean hangul 6F5349 C1A8 EC86A8 Korean hangul 6F534A C1A9 EC86A9 Korean hangul 6F534B C1B0 EC86B0 Korean hangul 6F534C C1C4 EC8784 Korean hangul 6F534D C1C8 EC8788 Korean hangul 6F534E C1D7 EC8797 Korean hangul 6F534F C1E0 EC87A0 Korean hangul 6F5350 C1E4 EC87A4 Korean hangul 6F5351 C1E8 EC87A8 Korean hangul 6F5352 C1F0 EC87B0 Korean hangul 6F5353 C1F1 EC87B1 Korean hangul 6F5354 C1F3 EC87B3 Korean hangul 6F5355 C1FC EC87BC Korean hangul 6F5356 C1FD EC87BD Korean hangul 6F5357 C200 EC8880 Korean hangul 6F5358 C204 EC8884 Korean hangul 6F5359 C20D EC888D Korean hangul 6F535B C218 EC8898 Korean hangul 6F535C C219 EC8899 Korean hangul 6F535D C21C EC889C Korean hangul 6F535E C21F EC889F Korean hangul 6F535F C220 EC88A0 Korean hangul 6F5360 C228 EC88A8 Korean hangul 6F5361 C229 EC88A9 Korean hangul 6F5362 C22B EC88AB Korean hangul 6F5363 C22D EC88AD Korean hangul 6F5364 C22F EC88AF Korean hangul 6F5365 C231 EC88B1 Korean hangul 6F5366 C232 EC88B2 Korean hangul 6F5367 C234 EC88B4 Korean hangul 6F5368 C250 EC8990 Korean hangul 6F5369 C258 EC8998 Korean hangul 6F536A C26C EC89AC Korean hangul 6F536B C270 EC89B0 Korean hangul 6F536C C274 EC89B4 Korean hangul 6F536D C27C EC89BC Korean hangul 6F536E C27D EC89BD Korean hangul 6F536F C27F EC89BF Korean hangul 6F5370 C281 EC8A81 Korean hangul 6F5371 C288 EC8A88 Korean hangul 6F5372 C289 EC8A89 Korean hangul 6F5373 C290 EC8A90 Korean hangul 6F5374 C298 EC8A98 Korean hangul 6F5375 C29B EC8A9B Korean hangul 6F5376 C29D EC8A9D Korean hangul 6F5377 C2A4 EC8AA4 Korean hangul 6F5378 C2A5 EC8AA5 Korean hangul 6F5379 C2A8 EC8AA8 Korean hangul 6F537A C2AC EC8AAC Korean hangul 6F537B C2AD EC8AAD Korean hangul 6F537D C2B4 EC8AB4 Korean hangul 6F537E C2B5 EC8AB5 Korean hangul 6F5421 C2B7 EC8AB7 Korean hangul 6F5422 C2B9 EC8AB9 Korean hangul 6F5423 C2DC EC8B9C Korean hangul 6F5424 C2DD EC8B9D Korean hangul 6F5425 C2E0 EC8BA0 Korean hangul 6F5426 C2E3 EC8BA3 Korean hangul 6F5427 C2E4 EC8BA4 Korean hangul 6F5428 C2EB EC8BAB Korean hangul 6F5429 C2EC EC8BAC Korean hangul 6F542A C2ED EC8BAD Korean hangul 6F542B C2EF EC8BAF Korean hangul 6F542C C2F1 EC8BB1 Korean hangul 6F542D C2F6 EC8BB6 Korean hangul 6F5430 C2F8 EC8BB8 Korean hangul 6F5431 C2F9 EC8BB9 Korean hangul 6F5432 C2FC EC8BBC Korean hangul 6F5433 C300 EC8C80 Korean hangul 6F5434 C308 EC8C88 Korean hangul 6F5435 C309 EC8C89 Korean hangul 6F5436 C30B EC8C8B Korean hangul 6F5437 C30C EC8C8C Korean hangul 6F5438 C30D EC8C8D Korean hangul 6F5439 C313 EC8C93 Korean hangul 6F543A C314 EC8C94 Korean hangul 6F543B C315 EC8C95 Korean hangul 6F543C C318 EC8C98 Korean hangul 6F543D C31C EC8C9C Korean hangul 6F543E C324 EC8CA4 Korean hangul 6F543F C327 EC8CA7 Korean hangul 6F5440 C328 EC8CA8 Korean hangul 6F5441 C329 EC8CA9 Korean hangul 6F5442 C330 EC8CB0 Korean hangul 6F5443 C343 EC8D83 Korean hangul 6F5444 C345 EC8D85 Korean hangul 6F5445 C368 EC8DA8 Korean hangul 6F5446 C369 EC8DA9 Korean hangul 6F5447 C36C EC8DAC Korean hangul 6F5448 C370 EC8DB0 Korean hangul 6F5449 C372 EC8DB2 Korean hangul 6F544A C378 EC8DB8 Korean hangul 6F544B C379 EC8DB9 Korean hangul 6F544C C37C EC8DBC Korean hangul 6F544D C37D EC8DBD Korean hangul 6F544E C384 EC8E84 Korean hangul 6F544F C388 EC8E88 Korean hangul 6F5450 C399 EC8E99 Korean hangul 6F5451 C3D8 EC8F98 Korean hangul 6F5452 C3D9 EC8F99 Korean hangul 6F5453 C3DC EC8F9C Korean hangul 6F5454 C3DF EC8F9F Korean hangul 6F5455 C3E0 EC8FA0 Korean hangul 6F5456 C3E8 EC8FA8 Korean hangul 6F5457 C3ED EC8FAD Korean hangul 6F5458 C3F4 EC8FB4 Korean hangul 6F5459 C3F5 EC8FB5 Korean hangul 6F545A C410 EC9090 Korean hangul 6F545B C42C EC90AC Korean hangul 6F545C C430 EC90B0 Korean hangul 6F545D C434 EC90B4 Korean hangul 6F545E C43C EC90BC Korean hangul 6F545F C43F EC90BF Korean hangul 6F5460 C464 EC91A4 Korean hangul 6F5461 C465 EC91A5 Korean hangul 6F5462 C468 EC91A8 Korean hangul 6F5463 C46C EC91AC Korean hangul 6F5464 C474 EC91B4 Korean hangul 6F5465 C479 EC91B9 Korean hangul 6F5466 C480 EC9280 Korean hangul 6F5467 C494 EC9294 Korean hangul 6F5468 C4D4 EC9394 Korean hangul 6F5469 C4D5 EC9395 Korean hangul 6F546A C4F0 EC93B0 Korean hangul 6F546B C4F1 EC93B1 Korean hangul 6F546C C4F4 EC93B4 Korean hangul 6F546D C4F8 EC93B8 Korean hangul 6F546E C500 EC9480 Korean hangul 6F546F C501 EC9481 Korean hangul 6F5470 C50C EC948C Korean hangul 6F5471 C510 EC9490 Korean hangul 6F5472 C528 EC94A8 Korean hangul 6F5473 C529 EC94A9 Korean hangul 6F5474 C52C EC94AC Korean hangul 6F5475 C530 EC94B0 Korean hangul 6F5476 C538 EC94B8 Korean hangul 6F5477 C539 EC94B9 Korean hangul 6F5478 C53B EC94BB Korean hangul 6F5479 C53D EC94BD Korean hangul 6F547C C544 EC9584 Korean hangul 6F547D C545 EC9585 Korean hangul 6F547E C548 EC9588 Korean hangul 6F5521 C549 EC9589 Korean hangul 6F5522 C54A EC958A Korean hangul 6F5523 C54C EC958C Korean hangul 6F5524 C54E EC958E Korean hangul 6F5525 C553 EC9593 Korean hangul 6F5526 C554 EC9594 Korean hangul 6F5527 C555 EC9595 Korean hangul 6F5528 C557 EC9597 Korean hangul 6F5529 C558 EC9598 Korean hangul 6F552A C559 EC9599 Korean hangul 6F552B C55E EC959E Korean hangul 6F552C C55F EC959F Korean hangul 6F552D C560 EC95A0 Korean hangul 6F552E C561 EC95A1 Korean hangul 6F552F C564 EC95A4 Korean hangul 6F5530 C568 EC95A8 Korean hangul 6F5531 C570 EC95B0 Korean hangul 6F5532 C571 EC95B1 Korean hangul 6F5533 C573 EC95B3 Korean hangul 6F5534 C574 EC95B4 Korean hangul 6F5535 C575 EC95B5 Korean hangul 6F5536 C57C EC95BC Korean hangul 6F5537 C57D EC95BD Korean hangul 6F5538 C580 EC9680 Korean hangul 6F5539 C584 EC9684 Korean hangul 6F553A C587 EC9687 Korean hangul 6F553B C58C EC968C Korean hangul 6F553C C58D EC968D Korean hangul 6F553D C58F EC968F Korean hangul 6F553E C590 EC9690 Korean hangul 6F553F C591 EC9691 Korean hangul 6F5540 C595 EC9695 Korean hangul 6F5541 C597 EC9697 Korean hangul 6F5542 C598 EC9698 Korean hangul 6F5543 C59C EC969C Korean hangul 6F5544 C5B4 EC96B4 Korean hangul 6F5545 C5B5 EC96B5 Korean hangul 6F5546 C5B6 EC96B6 Korean hangul 6F5547 C5B8 EC96B8 Korean hangul 6F5548 C5B9 EC96B9 Korean hangul 6F5549 C5BA EC96BA Korean hangul 6F554A C5BB EC96BB Korean hangul 6F554B C5BC EC96BC Korean hangul 6F554C C5BD EC96BD Korean hangul 6F554D C5C4 EC9784 Korean hangul 6F554E C5C5 EC9785 Korean hangul 6F554F C5C6 EC9786 Korean hangul 6F5550 C5C7 EC9787 Korean hangul 6F5551 C5C8 EC9788 Korean hangul 6F5552 C5C9 EC9789 Korean hangul 6F5553 C5CA EC978A Korean hangul 6F5554 C5CC EC978C Korean hangul 6F5555 C5CE EC978E Korean hangul 6F5556 C5D0 EC9790 Korean hangul 6F5557 C5D1 EC9791 Korean hangul 6F5558 C5D4 EC9794 Korean hangul 6F5559 C5D8 EC9798 Korean hangul 6F555A C5E0 EC97A0 Korean hangul 6F555B C5E1 EC97A1 Korean hangul 6F555C C5E3 EC97A3 Korean hangul 6F555D C5E5 EC97A5 Korean hangul 6F555E C5EC EC97AC Korean hangul 6F555F C5ED EC97AD Korean hangul 6F5560 C5EE EC97AE Korean hangul 6F5561 C5F0 EC97B0 Korean hangul 6F5562 C5F4 EC97B4 Korean hangul 6F5563 C5F6 EC97B6 Korean hangul 6F5564 C5F7 EC97B7 Korean hangul 6F5565 C5FC EC97BC Korean hangul 6F5566 C5FD EC97BD Korean hangul 6F5567 C5FE EC97BE Korean hangul 6F5568 C5FF EC97BF Korean hangul 6F5569 C600 EC9880 Korean hangul 6F556A C601 EC9881 Korean hangul 6F556B C606 EC9886 Korean hangul 6F556C C607 EC9887 Korean hangul 6F556D C608 EC9888 Korean hangul 6F556E C60C EC988C Korean hangul 6F556F C610 EC9890 Korean hangul 6F5570 C61B EC989B Korean hangul 6F5571 C624 EC98A4 Korean hangul 6F5572 C625 EC98A5 Korean hangul 6F5573 C628 EC98A8 Korean hangul 6F5574 C62C EC98AC Korean hangul 6F5575 C62D EC98AD Korean hangul 6F5576 C62E EC98AE Korean hangul 6F5577 C633 EC98B3 Korean hangul 6F5578 C634 EC98B4 Korean hangul 6F5579 C635 EC98B5 Korean hangul 6F557A C637 EC98B7 Korean hangul 6F557B C639 EC98B9 Korean hangul 6F557C C63A EC98BA Korean hangul 6F557D C63B EC98BB Korean hangul 6F557E C640 EC9980 Korean hangul 6F5621 C641 EC9981 Korean hangul 6F5622 C644 EC9984 Korean hangul 6F5623 C648 EC9988 Korean hangul 6F5624 C650 EC9990 Korean hangul 6F5625 C651 EC9991 Korean hangul 6F5626 C653 EC9993 Korean hangul 6F5627 C654 EC9994 Korean hangul 6F5629 C65C EC999C Korean hangul 6F562A C65D EC999D Korean hangul 6F562B C660 EC99A0 Korean hangul 6F562C C671 EC99B1 Korean hangul 6F562D C678 EC99B8 Korean hangul 6F562E C679 EC99B9 Korean hangul 6F562F C67C EC99BC Korean hangul 6F5630 C680 EC9A80 Korean hangul 6F5631 C688 EC9A88 Korean hangul 6F5632 C68B EC9A8B Korean hangul 6F5633 C68D EC9A8D Korean hangul 6F5634 C694 EC9A94 Korean hangul 6F5635 C695 EC9A95 Korean hangul 6F5636 C698 EC9A98 Korean hangul 6F5637 C6A5 EC9AA5 Korean hangul 6F5638 C6A7 EC9AA7 Korean hangul 6F5639 C6A9 EC9AA9 Korean hangul 6F563A C6B0 EC9AB0 Korean hangul 6F563B C6B1 EC9AB1 Korean hangul 6F563C C6B4 EC9AB4 Korean hangul 6F563D C6B7 EC9AB7 Korean hangul 6F563E C6B8 EC9AB8 Korean hangul 6F563F C6B9 EC9AB9 Korean hangul 6F5640 C6BA EC9ABA Korean hangul 6F5641 C6C0 EC9B80 Korean hangul 6F5642 C6C1 EC9B81 Korean hangul 6F5643 C6C3 EC9B83 Korean hangul 6F5644 C6C5 EC9B85 Korean hangul 6F5645 C6CC EC9B8C Korean hangul 6F5646 C6CD EC9B8D Korean hangul 6F5647 C6D0 EC9B90 Korean hangul 6F5648 C6D4 EC9B94 Korean hangul 6F5649 C6DC EC9B9C Korean hangul 6F564A C6DD EC9B9D Korean hangul 6F564B C6DF EC9B9F Korean hangul 6F564C C6E0 EC9BA0 Korean hangul 6F564D C6E1 EC9BA1 Korean hangul 6F564E C6E8 EC9BA8 Korean hangul 6F564F C6E9 EC9BA9 Korean hangul 6F5650 C6EC EC9BAC Korean hangul 6F5651 C6F0 EC9BB0 Korean hangul 6F5652 C6F8 EC9BB8 Korean hangul 6F5653 C704 EC9C84 Korean hangul 6F5654 C705 EC9C85 Korean hangul 6F5655 C708 EC9C88 Korean hangul 6F5656 C70C EC9C8C Korean hangul 6F5657 C714 EC9C94 Korean hangul 6F5658 C717 EC9C97 Korean hangul 6F5659 C719 EC9C99 Korean hangul 6F565A C720 EC9CA0 Korean hangul 6F565B C721 EC9CA1 Korean hangul 6F565C C724 EC9CA4 Korean hangul 6F565D C728 EC9CA8 Korean hangul 6F565E C730 EC9CB0 Korean hangul 6F565F C735 EC9CB5 Korean hangul 6F5660 C737 EC9CB7 Korean hangul 6F5661 C73C EC9CBC Korean hangul 6F5662 C73D EC9CBD Korean hangul 6F5663 C740 EC9D80 Korean hangul 6F5664 C744 EC9D84 Korean hangul 6F5665 C74A EC9D8A Korean hangul 6F5666 C74C EC9D8C Korean hangul 6F5667 C74D EC9D8D Korean hangul 6F5668 C751 EC9D91 Korean hangul 6F5669 C758 EC9D98 Korean hangul 6F566A C774 EC9DB4 Korean hangul 6F566B C775 EC9DB5 Korean hangul 6F566C C778 EC9DB8 Korean hangul 6F566D C77C EC9DBC Korean hangul 6F566E C77D EC9DBD Korean hangul 6F566F C783 EC9E83 Korean hangul 6F5670 C784 EC9E84 Korean hangul 6F5671 C785 EC9E85 Korean hangul 6F5672 C787 EC9E87 Korean hangul 6F5673 C788 EC9E88 Korean hangul 6F5674 C789 EC9E89 Korean hangul 6F5675 C78A EC9E8A Korean hangul 6F5676 C78E EC9E8E Korean hangul 6F5677 C655 EC9995 Korean hangul 6F5679 C790 EC9E90 Korean hangul 6F567A C791 EC9E91 Korean hangul 6F567B C794 EC9E94 Korean hangul 6F567C C796 EC9E96 Korean hangul 6F567D C798 EC9E98 Korean hangul 6F567E C7A0 EC9EA0 Korean hangul 6F5721 C7A1 EC9EA1 Korean hangul 6F5722 C7A3 EC9EA3 Korean hangul 6F5723 C7A4 EC9EA4 Korean hangul 6F5724 C7A5 EC9EA5 Korean hangul 6F5725 C7A6 EC9EA6 Korean hangul 6F5726 C7A7 EC9EA7 Korean hangul 6F5727 C7AC EC9EAC Korean hangul 6F5728 C7AD EC9EAD Korean hangul 6F5729 C7B0 EC9EB0 Korean hangul 6F572A C7B4 EC9EB4 Korean hangul 6F572B C7BC EC9EBC Korean hangul 6F572C C7BD EC9EBD Korean hangul 6F572D C7BF EC9EBF Korean hangul 6F572E C7C0 EC9F80 Korean hangul 6F572F C7C1 EC9F81 Korean hangul 6F5730 C7C8 EC9F88 Korean hangul 6F5731 C7C9 EC9F89 Korean hangul 6F5732 C7CC EC9F8C Korean hangul 6F5733 C7D8 EC9F98 Korean hangul 6F5734 C800 ECA080 Korean hangul 6F5735 C801 ECA081 Korean hangul 6F5736 C804 ECA084 Korean hangul 6F5737 C808 ECA088 Korean hangul 6F5738 C80A ECA08A Korean hangul 6F5739 C810 ECA090 Korean hangul 6F573A C811 ECA091 Korean hangul 6F573B C813 ECA093 Korean hangul 6F573C C814 ECA094 Korean hangul 6F573D C815 ECA095 Korean hangul 6F573E C816 ECA096 Korean hangul 6F573F C81C ECA09C Korean hangul 6F5740 C81D ECA09D Korean hangul 6F5741 C820 ECA0A0 Korean hangul 6F5742 C824 ECA0A4 Korean hangul 6F5743 C82C ECA0AC Korean hangul 6F5744 C82D ECA0AD Korean hangul 6F5745 C82F ECA0AF Korean hangul 6F5746 C838 ECA0B8 Korean hangul 6F5747 C83C ECA0BC Korean hangul 6F5748 C84C ECA18C Korean hangul 6F5749 C870 ECA1B0 Korean hangul 6F574A C871 ECA1B1 Korean hangul 6F574B C874 ECA1B4 Korean hangul 6F574C C878 ECA1B8 Korean hangul 6F574D C87A ECA1BA Korean hangul 6F574E C880 ECA280 Korean hangul 6F574F C881 ECA281 Korean hangul 6F5750 C885 ECA285 Korean hangul 6F5751 C886 ECA286 Korean hangul 6F5752 C887 ECA287 Korean hangul 6F5753 C88B ECA28B Korean hangul 6F5754 C88C ECA28C Korean hangul 6F5755 C88D ECA28D Korean hangul 6F5756 C890 ECA290 Korean hangul 6F5757 C894 ECA294 Korean hangul 6F5758 C89C ECA29C Korean hangul 6F5759 C89D ECA29D Korean hangul 6F575A C89F ECA29F Korean hangul 6F575B C8A0 ECA2A0 Korean hangul 6F575D C8A8 ECA2A8 Korean hangul 6F575E C8AC ECA2AC Korean hangul 6F575F C8B0 ECA2B0 Korean hangul 6F5760 C8B8 ECA2B8 Korean hangul 6F5761 C8C4 ECA384 Korean hangul 6F5762 C8C8 ECA388 Korean hangul 6F5763 C8CC ECA38C Korean hangul 6F5764 C8D4 ECA394 Korean hangul 6F5765 C8D5 ECA395 Korean hangul 6F5766 C8D7 ECA397 Korean hangul 6F5767 C8E0 ECA3A0 Korean hangul 6F5768 C8E4 ECA3A4 Korean hangul 6F5769 C8F0 ECA3B0 Korean hangul 6F576A C8F1 ECA3B1 Korean hangul 6F576B C8F5 ECA3B5 Korean hangul 6F576C C8FC ECA3BC Korean hangul 6F576D C8FD ECA3BD Korean hangul 6F576E C900 ECA480 Korean hangul 6F576F C904 ECA484 Korean hangul 6F5770 C906 ECA486 Korean hangul 6F5771 C90C ECA48C Korean hangul 6F5772 C90D ECA48D Korean hangul 6F5773 C90F ECA48F Korean hangul 6F5774 C911 ECA491 Korean hangul 6F5775 C918 ECA498 Korean hangul 6F5776 C92C ECA4AC Korean hangul 6F5777 C950 ECA590 Korean hangul 6F5779 C954 ECA594 Korean hangul 6F577A C958 ECA598 Korean hangul 6F577B C960 ECA5A0 Korean hangul 6F577C C961 ECA5A1 Korean hangul 6F577D C96C ECA5AC Korean hangul 6F577E C970 ECA5B0 Korean hangul 6F5821 C974 ECA5B4 Korean hangul 6F5822 C988 ECA688 Korean hangul 6F5823 C989 ECA689 Korean hangul 6F5824 C98C ECA68C Korean hangul 6F5825 C990 ECA690 Korean hangul 6F5826 C998 ECA698 Korean hangul 6F5827 C999 ECA699 Korean hangul 6F5828 C99D ECA69D Korean hangul 6F5829 C9C0 ECA780 Korean hangul 6F582A C9C1 ECA781 Korean hangul 6F582B C9C4 ECA784 Korean hangul 6F582C C9C7 ECA787 Korean hangul 6F582D C9C8 ECA788 Korean hangul 6F582E C9CA ECA78A Korean hangul 6F582F C9D0 ECA790 Korean hangul 6F5830 C9D1 ECA791 Korean hangul 6F5831 C9D3 ECA793 Korean hangul 6F5832 C9D5 ECA795 Korean hangul 6F5833 C9D6 ECA796 Korean hangul 6F5834 C9D9 ECA799 Korean hangul 6F5835 C9DA ECA79A Korean hangul 6F5838 C9DC ECA79C Korean hangul 6F5839 C9DD ECA79D Korean hangul 6F583A C9E0 ECA7A0 Korean hangul 6F583B C9E2 ECA7A2 Korean hangul 6F583C C9E4 ECA7A4 Korean hangul 6F583E C9E7 ECA7A7 Korean hangul 6F583F C9EC ECA7AC Korean hangul 6F5840 C9ED ECA7AD Korean hangul 6F5841 C9EF ECA7AF Korean hangul 6F5842 C9F0 ECA7B0 Korean hangul 6F5843 C9F1 ECA7B1 Korean hangul 6F5844 C9F8 ECA7B8 Korean hangul 6F5845 C9F9 ECA7B9 Korean hangul 6F5846 C9FC ECA7BC Korean hangul 6F5847 CA00 ECA880 Korean hangul 6F5848 CA08 ECA888 Korean hangul 6F5849 CA09 ECA889 Korean hangul 6F584A CA0B ECA88B Korean hangul 6F584B CA0C ECA88C Korean hangul 6F584C CA0D ECA88D Korean hangul 6F584D CA18 ECA898 Korean hangul 6F584E CA4C ECA98C Korean hangul 6F584F CA4D ECA98D Korean hangul 6F5850 CA50 ECA990 Korean hangul 6F5851 CA54 ECA994 Korean hangul 6F5852 CA5C ECA99C Korean hangul 6F5853 CA5D ECA99D Korean hangul 6F5854 CA61 ECA9A1 Korean hangul 6F5855 CA84 ECAA84 Korean hangul 6F5856 CA98 ECAA98 Korean hangul 6F5857 CABC ECAABC Korean hangul 6F5858 CABD ECAABD Korean hangul 6F5859 CAC0 ECAB80 Korean hangul 6F585A CAC4 ECAB84 Korean hangul 6F585B CACC ECAB8C Korean hangul 6F585C CACD ECAB8D Korean hangul 6F585D CAD1 ECAB91 Korean hangul 6F585E CAD2 ECAB92 Korean hangul 6F585F CAD3 ECAB93 Korean hangul 6F5860 CAD8 ECAB98 Korean hangul 6F5861 CAD9 ECAB99 Korean hangul 6F5862 CB10 ECAC90 Korean hangul 6F5863 CB14 ECAC94 Korean hangul 6F5864 CB18 ECAC98 Korean hangul 6F5865 CB20 ECACA0 Korean hangul 6F5866 CB21 ECACA1 Korean hangul 6F5867 CB41 ECAD81 Korean hangul 6F5868 CB48 ECAD88 Korean hangul 6F5869 CB49 ECAD89 Korean hangul 6F586A CB50 ECAD90 Korean hangul 6F586B CB58 ECAD98 Korean hangul 6F586C CB59 ECAD99 Korean hangul 6F586D CB5D ECAD9D Korean hangul 6F586E CB64 ECADA4 Korean hangul 6F586F CBB8 ECAEB8 Korean hangul 6F5870 CBD4 ECAF94 Korean hangul 6F5871 CBE4 ECAFA4 Korean hangul 6F5872 CBE7 ECAFA7 Korean hangul 6F5873 CC0C ECB08C Korean hangul 6F5874 CC0D ECB08D Korean hangul 6F5875 CC10 ECB090 Korean hangul 6F5876 CC14 ECB094 Korean hangul 6F5877 CC1C ECB09C Korean hangul 6F5878 CC1D ECB09D Korean hangul 6F5879 CC21 ECB0A1 Korean hangul 6F587A CC22 ECB0A2 Korean hangul 6F587B CC27 ECB0A7 Korean hangul 6F587E CC28 ECB0A8 Korean hangul 6F5921 CC29 ECB0A9 Korean hangul 6F5922 CC2C ECB0AC Korean hangul 6F5923 CC2E ECB0AE Korean hangul 6F5924 CC2F ECB0AF Korean hangul 6F5925 CC30 ECB0B0 Korean hangul 6F5926 CC38 ECB0B8 Korean hangul 6F5927 CC39 ECB0B9 Korean hangul 6F5928 CC3B ECB0BB Korean hangul 6F5929 CC3C ECB0BC Korean hangul 6F592A CC3D ECB0BD Korean hangul 6F592B CC3E ECB0BE Korean hangul 6F592C CC3F ECB0BF Korean hangul 6F592D CC44 ECB184 Korean hangul 6F592E CC45 ECB185 Korean hangul 6F592F CC48 ECB188 Korean hangul 6F5930 CC4C ECB18C Korean hangul 6F5931 CC54 ECB194 Korean hangul 6F5932 CC55 ECB195 Korean hangul 6F5933 CC58 ECB198 Korean hangul 6F5934 CC59 ECB199 Korean hangul 6F5935 CC60 ECB1A0 Korean hangul 6F5936 CC64 ECB1A4 Korean hangul 6F5937 CC70 ECB1B0 Korean hangul 6F5938 CC71 ECB1B1 Korean hangul 6F5939 CC98 ECB298 Korean hangul 6F593A CC99 ECB299 Korean hangul 6F593B CC9C ECB29C Korean hangul 6F593C CCA0 ECB2A0 Korean hangul 6F593D CCA8 ECB2A8 Korean hangul 6F593E CCA9 ECB2A9 Korean hangul 6F593F CCAB ECB2AB Korean hangul 6F5940 CCAD ECB2AD Korean hangul 6F5941 CCB4 ECB2B4 Korean hangul 6F5942 CCB5 ECB2B5 Korean hangul 6F5943 CCB8 ECB2B8 Korean hangul 6F5944 CCBC ECB2BC Korean hangul 6F5945 CCC7 ECB387 Korean hangul 6F5946 CCD0 ECB390 Korean hangul 6F5947 CCE4 ECB3A4 Korean hangul 6F5948 CD08 ECB488 Korean hangul 6F5949 CD09 ECB489 Korean hangul 6F594A CD0C ECB48C Korean hangul 6F594B CD10 ECB490 Korean hangul 6F594C CD18 ECB498 Korean hangul 6F594D CD19 ECB499 Korean hangul 6F594E CD1B ECB49B Korean hangul 6F594F CD1D ECB49D Korean hangul 6F5950 CD2C ECB4AC Korean hangul 6F5951 CD5C ECB59C Korean hangul 6F5952 CD78 ECB5B8 Korean hangul 6F5953 CD94 ECB694 Korean hangul 6F5954 CD95 ECB695 Korean hangul 6F5955 CD98 ECB698 Korean hangul 6F5956 CD9C ECB69C Korean hangul 6F5957 CDA4 ECB6A4 Korean hangul 6F5958 CDA5 ECB6A5 Korean hangul 6F5959 CDA7 ECB6A7 Korean hangul 6F595A CDA9 ECB6A9 Korean hangul 6F595B CDB0 ECB6B0 Korean hangul 6F595C CDC4 ECB784 Korean hangul 6F595D CDCC ECB78C Korean hangul 6F595E CDE8 ECB7A8 Korean hangul 6F595F CE04 ECB884 Korean hangul 6F5960 CE20 ECB8A0 Korean hangul 6F5961 CE21 ECB8A1 Korean hangul 6F5962 CE30 ECB8B0 Korean hangul 6F5963 CE35 ECB8B5 Korean hangul 6F5964 CE58 ECB998 Korean hangul 6F5965 CE59 ECB999 Korean hangul 6F5966 CE5C ECB99C Korean hangul 6F5967 CE60 ECB9A0 Korean hangul 6F5968 CE61 ECB9A1 Korean hangul 6F5969 CE68 ECB9A8 Korean hangul 6F596A CE69 ECB9A9 Korean hangul 6F596B CE6B ECB9AB Korean hangul 6F596C CE6D ECB9AD Korean hangul 6F596F CE74 ECB9B4 Korean hangul 6F5970 CE75 ECB9B5 Korean hangul 6F5971 CE78 ECB9B8 Korean hangul 6F5972 CE7C ECB9BC Korean hangul 6F5973 CE84 ECBA84 Korean hangul 6F5974 CE85 ECBA85 Korean hangul 6F5975 CE87 ECBA87 Korean hangul 6F5976 CE89 ECBA89 Korean hangul 6F5977 CE90 ECBA90 Korean hangul 6F5978 CE91 ECBA91 Korean hangul 6F5979 CE94 ECBA94 Korean hangul 6F597A CE98 ECBA98 Korean hangul 6F597B CEA0 ECBAA0 Korean hangul 6F597C CEA1 ECBAA1 Korean hangul 6F597D CEA3 ECBAA3 Korean hangul 6F5A21 CEA5 ECBAA5 Korean hangul 6F5A22 CEAC ECBAAC Korean hangul 6F5A23 CEAD ECBAAD Korean hangul 6F5A24 CEE4 ECBBA4 Korean hangul 6F5A26 CEE8 ECBBA8 Korean hangul 6F5A27 CEEC ECBBAC Korean hangul 6F5A28 CEF4 ECBBB4 Korean hangul 6F5A29 CEF5 ECBBB5 Korean hangul 6F5A2A CEF7 ECBBB7 Korean hangul 6F5A2C CEF9 ECBBB9 Korean hangul 6F5A2E CF00 ECBC80 Korean hangul 6F5A2F CF01 ECBC81 Korean hangul 6F5A30 CF04 ECBC84 Korean hangul 6F5A31 CF08 ECBC88 Korean hangul 6F5A32 CF10 ECBC90 Korean hangul 6F5A33 CF11 ECBC91 Korean hangul 6F5A34 CF13 ECBC93 Korean hangul 6F5A35 CF15 ECBC95 Korean hangul 6F5A36 CF1C ECBC9C Korean hangul 6F5A37 CF20 ECBCA0 Korean hangul 6F5A38 CF24 ECBCA4 Korean hangul 6F5A39 CF2C ECBCAC Korean hangul 6F5A3A CF2D ECBCAD Korean hangul 6F5A3B CF2F ECBCAF Korean hangul 6F5A3C CF30 ECBCB0 Korean hangul 6F5A3D CF54 ECBD94 Korean hangul 6F5A3E CF55 ECBD95 Korean hangul 6F5A3F CF58 ECBD98 Korean hangul 6F5A40 CF5C ECBD9C Korean hangul 6F5A41 CF64 ECBDA4 Korean hangul 6F5A42 CF65 ECBDA5 Korean hangul 6F5A43 CF67 ECBDA7 Korean hangul 6F5A44 CF69 ECBDA9 Korean hangul 6F5A45 CF70 ECBDB0 Korean hangul 6F5A46 CF71 ECBDB1 Korean hangul 6F5A47 CF74 ECBDB4 Korean hangul 6F5A48 CF78 ECBDB8 Korean hangul 6F5A49 CF80 ECBE80 Korean hangul 6F5A4A CF85 ECBE85 Korean hangul 6F5A4B CF8C ECBE8C Korean hangul 6F5A4C CF8D ECBE8D Korean hangul 6F5A4D CFA1 ECBEA1 Korean hangul 6F5A4F CFB0 ECBEB0 Korean hangul 6F5A50 CFC4 ECBF84 Korean hangul 6F5A51 CFE0 ECBFA0 Korean hangul 6F5A52 CFE1 ECBFA1 Korean hangul 6F5A53 CFE4 ECBFA4 Korean hangul 6F5A54 CFE8 ECBFA8 Korean hangul 6F5A55 CFF0 ECBFB0 Korean hangul 6F5A56 CFF3 ECBFB3 Korean hangul 6F5A57 CFF5 ECBFB5 Korean hangul 6F5A58 CFFC ECBFBC Korean hangul 6F5A5A D018 ED8098 Korean hangul 6F5A5B D02D ED80AD Korean hangul 6F5A5C D034 ED80B4 Korean hangul 6F5A5D D035 ED80B5 Korean hangul 6F5A5E D038 ED80B8 Korean hangul 6F5A5F D050 ED8190 Korean hangul 6F5A60 D06C ED81AC Korean hangul 6F5A61 D070 ED81B0 Korean hangul 6F5A62 D074 ED81B4 Korean hangul 6F5A63 D07C ED81BC Korean hangul 6F5A64 D07D ED81BD Korean hangul 6F5A65 D081 ED8281 Korean hangul 6F5A66 D0A4 ED82A4 Korean hangul 6F5A67 D0A5 ED82A5 Korean hangul 6F5A68 D0A8 ED82A8 Korean hangul 6F5A69 D0AC ED82AC Korean hangul 6F5A6A D0B4 ED82B4 Korean hangul 6F5A6B D0B5 ED82B5 Korean hangul 6F5A6C D0B7 ED82B7 Korean hangul 6F5A6D D0B9 ED82B9 Korean hangul 6F5A70 D0C0 ED8380 Korean hangul 6F5A71 D0C1 ED8381 Korean hangul 6F5A72 D0C4 ED8384 Korean hangul 6F5A73 D0C8 ED8388 Korean hangul 6F5A74 D0C9 ED8389 Korean hangul 6F5A75 D0D0 ED8390 Korean hangul 6F5A76 D0D1 ED8391 Korean hangul 6F5A77 D0D3 ED8393 Korean hangul 6F5A78 D0D4 ED8394 Korean hangul 6F5A79 D0D5 ED8395 Korean hangul 6F5A7A D0DC ED839C Korean hangul 6F5A7B D0DD ED839D Korean hangul 6F5A7C D0E0 ED83A0 Korean hangul 6F5A7D D0E4 ED83A4 Korean hangul 6F5A7E D0EC ED83AC Korean hangul 6F5B21 D0ED ED83AD Korean hangul 6F5B22 D0EF ED83AF Korean hangul 6F5B23 D0F0 ED83B0 Korean hangul 6F5B24 D0F1 ED83B1 Korean hangul 6F5B25 D130 ED84B0 Korean hangul 6F5B26 D131 ED84B1 Korean hangul 6F5B27 D134 ED84B4 Korean hangul 6F5B28 D138 ED84B8 Korean hangul 6F5B29 D140 ED8580 Korean hangul 6F5B2A D141 ED8581 Korean hangul 6F5B2B D143 ED8583 Korean hangul 6F5B2C D144 ED8584 Korean hangul 6F5B2D D145 ED8585 Korean hangul 6F5B2E D14C ED858C Korean hangul 6F5B2F D14D ED858D Korean hangul 6F5B30 D150 ED8590 Korean hangul 6F5B31 D154 ED8594 Korean hangul 6F5B32 D15C ED859C Korean hangul 6F5B33 D15D ED859D Korean hangul 6F5B34 D15F ED859F Korean hangul 6F5B35 D160 ED85A0 Korean hangul 6F5B36 D161 ED85A1 Korean hangul 6F5B37 D168 ED85A8 Korean hangul 6F5B38 D1A0 ED86A0 Korean hangul 6F5B39 D1A1 ED86A1 Korean hangul 6F5B3A D1A4 ED86A4 Korean hangul 6F5B3B D1A8 ED86A8 Korean hangul 6F5B3C D1B0 ED86B0 Korean hangul 6F5B3D D1B1 ED86B1 Korean hangul 6F5B3E D1B3 ED86B3 Korean hangul 6F5B3F D1B5 ED86B5 Korean hangul 6F5B40 D1D8 ED8798 Korean hangul 6F5B41 D1F4 ED87B4 Korean hangul 6F5B43 D22C ED88AC Korean hangul 6F5B44 D22D ED88AD Korean hangul 6F5B45 D230 ED88B0 Korean hangul 6F5B46 D234 ED88B4 Korean hangul 6F5B47 D23C ED88BC Korean hangul 6F5B48 D23D ED88BD Korean hangul 6F5B49 D23F ED88BF Korean hangul 6F5B4A D241 ED8981 Korean hangul 6F5B4B D264 ED89A4 Korean hangul 6F5B4C D277 ED89B7 Korean hangul 6F5B4D D280 ED8A80 Korean hangul 6F5B4E D284 ED8A84 Korean hangul 6F5B4F D288 ED8A88 Korean hangul 6F5B50 D290 ED8A90 Korean hangul 6F5B51 D291 ED8A91 Korean hangul 6F5B52 D293 ED8A93 Korean hangul 6F5B53 D295 ED8A95 Korean hangul 6F5B54 D29C ED8A9C Korean hangul 6F5B57 D2AC ED8AAC Korean hangul 6F5B59 D2B8 ED8AB8 Korean hangul 6F5B5A D2B9 ED8AB9 Korean hangul 6F5B5B D2BC ED8ABC Korean hangul 6F5B5C D2BF ED8ABF Korean hangul 6F5B5D D2C0 ED8B80 Korean hangul 6F5B5E D2C8 ED8B88 Korean hangul 6F5B5F D2C9 ED8B89 Korean hangul 6F5B60 D2CB ED8B8B Korean hangul 6F5B61 D2D4 ED8B94 Korean hangul 6F5B62 D1F8 ED87B8 Korean hangul 6F5B63 D2F0 ED8BB0 Korean hangul 6F5B64 D2F1 ED8BB1 Korean hangul 6F5B65 D2F4 ED8BB4 Korean hangul 6F5B66 D2F8 ED8BB8 Korean hangul 6F5B67 D300 ED8C80 Korean hangul 6F5B68 D301 ED8C81 Korean hangul 6F5B69 D305 ED8C85 Korean hangul 6F5B6C D30C ED8C8C Korean hangul 6F5B6D D30D ED8C8D Korean hangul 6F5B6E D30E ED8C8E Korean hangul 6F5B6F D310 ED8C90 Korean hangul 6F5B70 D314 ED8C94 Korean hangul 6F5B71 D31C ED8C9C Korean hangul 6F5B72 D31D ED8C9D Korean hangul 6F5B73 D31F ED8C9F Korean hangul 6F5B74 D320 ED8CA0 Korean hangul 6F5B75 D321 ED8CA1 Korean hangul 6F5B76 D325 ED8CA5 Korean hangul 6F5B77 D328 ED8CA8 Korean hangul 6F5B78 D329 ED8CA9 Korean hangul 6F5B79 D32C ED8CAC Korean hangul 6F5B7A D330 ED8CB0 Korean hangul 6F5B7B D338 ED8CB8 Korean hangul 6F5B7C D339 ED8CB9 Korean hangul 6F5B7D D33B ED8CBB Korean hangul 6F5B7E D33C ED8CBC Korean hangul 6F5C21 D33D ED8CBD Korean hangul 6F5C23 D37C ED8DBC Korean hangul 6F5C24 D37D ED8DBD Korean hangul 6F5C25 D380 ED8E80 Korean hangul 6F5C26 D384 ED8E84 Korean hangul 6F5C27 D38C ED8E8C Korean hangul 6F5C28 D38D ED8E8D Korean hangul 6F5C29 D38F ED8E8F Korean hangul 6F5C2A D390 ED8E90 Korean hangul 6F5C2B D391 ED8E91 Korean hangul 6F5C2C D398 ED8E98 Korean hangul 6F5C2D D399 ED8E99 Korean hangul 6F5C2E D39C ED8E9C Korean hangul 6F5C2F D3A0 ED8EA0 Korean hangul 6F5C30 D3A8 ED8EA8 Korean hangul 6F5C31 D3A9 ED8EA9 Korean hangul 6F5C32 D3AB ED8EAB Korean hangul 6F5C33 D3AD ED8EAD Korean hangul 6F5C34 D3B4 ED8EB4 Korean hangul 6F5C35 D3B5 ED8EB5 Korean hangul 6F5C36 D3B8 ED8EB8 Korean hangul 6F5C37 D3BC ED8EBC Korean hangul 6F5C38 D3C4 ED8F84 Korean hangul 6F5C39 D3C5 ED8F85 Korean hangul 6F5C3A D3C8 ED8F88 Korean hangul 6F5C3B D3C9 ED8F89 Korean hangul 6F5C3C D3D0 ED8F90 Korean hangul 6F5C3D D3EC ED8FAC Korean hangul 6F5C3E D3ED ED8FAD Korean hangul 6F5C3F D3F0 ED8FB0 Korean hangul 6F5C40 D3F4 ED8FB4 Korean hangul 6F5C41 D3FC ED8FBC Korean hangul 6F5C42 D3FD ED8FBD Korean hangul 6F5C43 D3FF ED8FBF Korean hangul 6F5C44 D401 ED9081 Korean hangul 6F5C45 D440 ED9180 Korean hangul 6F5C46 D444 ED9184 Korean hangul 6F5C47 D45C ED919C Korean hangul 6F5C48 D46F ED91AF Korean hangul 6F5C49 D478 ED91B8 Korean hangul 6F5C4A D479 ED91B9 Korean hangul 6F5C4B D47C ED91BC Korean hangul 6F5C4C D480 ED9280 Korean hangul 6F5C4D D488 ED9288 Korean hangul 6F5C4E D489 ED9289 Korean hangul 6F5C4F D48B ED928B Korean hangul 6F5C50 D48D ED928D Korean hangul 6F5C51 D4CC ED938C Korean hangul 6F5C52 D4E8 ED93A8 Korean hangul 6F5C53 D504 ED9484 Korean hangul 6F5C55 D508 ED9488 Korean hangul 6F5C56 D50C ED948C Korean hangul 6F5C57 D514 ED9494 Korean hangul 6F5C58 D515 ED9495 Korean hangul 6F5C59 D53C ED94BC Korean hangul 6F5C5A D53D ED94BD Korean hangul 6F5C5B D540 ED9580 Korean hangul 6F5C5C D544 ED9584 Korean hangul 6F5C5D D54C ED958C Korean hangul 6F5C5E D54D ED958D Korean hangul 6F5C5F D54F ED958F Korean hangul 6F5C60 D551 ED9591 Korean hangul 6F5C63 D558 ED9598 Korean hangul 6F5C64 D559 ED9599 Korean hangul 6F5C65 D55C ED959C Korean hangul 6F5C66 D560 ED95A0 Korean hangul 6F5C67 D565 ED95A5 Korean hangul 6F5C68 D568 ED95A8 Korean hangul 6F5C69 D569 ED95A9 Korean hangul 6F5C6A D56B ED95AB Korean hangul 6F5C6B D56C ED95AC Korean hangul 6F5C6C D56D ED95AD Korean hangul 6F5C6D D571 ED95B1 Korean hangul 6F5C6E D574 ED95B4 Korean hangul 6F5C6F D575 ED95B5 Korean hangul 6F5C70 D578 ED95B8 Korean hangul 6F5C71 D57C ED95BC Korean hangul 6F5C72 D584 ED9684 Korean hangul 6F5C73 D585 ED9685 Korean hangul 6F5C74 D587 ED9687 Korean hangul 6F5C75 D588 ED9688 Korean hangul 6F5C76 D589 ED9689 Korean hangul 6F5C77 D590 ED9690 Korean hangul 6F5C78 D5A5 ED96A5 Korean hangul 6F5C79 D5C8 ED9788 Korean hangul 6F5C7A D5C9 ED9789 Korean hangul 6F5C7B D5CC ED978C Korean hangul 6F5C7C D5D0 ED9790 Korean hangul 6F5C7D D5D2 ED9792 Korean hangul 6F5C7E D5D8 ED9798 Korean hangul 6F5D21 D5D9 ED9799 Korean hangul 6F5D22 D5DB ED979B Korean hangul 6F5D23 D5DD ED979D Korean hangul 6F5D24 D5E4 ED97A4 Korean hangul 6F5D25 D5E5 ED97A5 Korean hangul 6F5D26 D5E8 ED97A8 Korean hangul 6F5D27 D5EC ED97AC Korean hangul 6F5D28 D5F4 ED97B4 Korean hangul 6F5D29 D5F5 ED97B5 Korean hangul 6F5D2A D5F7 ED97B7 Korean hangul 6F5D2B D5F9 ED97B9 Korean hangul 6F5D2C D600 ED9880 Korean hangul 6F5D2D D601 ED9881 Korean hangul 6F5D2E D604 ED9884 Korean hangul 6F5D2F D608 ED9888 Korean hangul 6F5D30 D610 ED9890 Korean hangul 6F5D31 D611 ED9891 Korean hangul 6F5D32 D613 ED9893 Korean hangul 6F5D33 D614 ED9894 Korean hangul 6F5D34 D615 ED9895 Korean hangul 6F5D35 D61C ED989C Korean hangul 6F5D36 D638 ED98B8 Korean hangul 6F5D37 D639 ED98B9 Korean hangul 6F5D38 D63C ED98BC Korean hangul 6F5D39 D640 ED9980 Korean hangul 6F5D3A D648 ED9988 Korean hangul 6F5D3B D649 ED9989 Korean hangul 6F5D3C D64B ED998B Korean hangul 6F5D3D D64D ED998D Korean hangul 6F5D3F D654 ED9994 Korean hangul 6F5D40 D655 ED9995 Korean hangul 6F5D41 D658 ED9998 Korean hangul 6F5D42 D65C ED999C Korean hangul 6F5D44 D667 ED99A7 Korean hangul 6F5D45 D669 ED99A9 Korean hangul 6F5D46 D670 ED99B0 Korean hangul 6F5D47 D671 ED99B1 Korean hangul 6F5D48 D683 ED9A83 Korean hangul 6F5D4A D68C ED9A8C Korean hangul 6F5D4B D68D ED9A8D Korean hangul 6F5D4C D69F ED9A9F Korean hangul 6F5D4D D6A1 ED9AA1 Korean hangul 6F5D4E D6A8 ED9AA8 Korean hangul 6F5D4F D6C4 ED9B84 Korean hangul 6F5D50 D6C5 ED9B85 Korean hangul 6F5D51 D6C8 ED9B88 Korean hangul 6F5D52 D6CC ED9B8C Korean hangul 6F5D53 D6D1 ED9B91 Korean hangul 6F5D54 D6D4 ED9B94 Korean hangul 6F5D55 D6D7 ED9B97 Korean hangul 6F5D56 D6E0 ED9BA0 Korean hangul 6F5D57 D6E4 ED9BA4 Korean hangul 6F5D58 D6E8 ED9BA8 Korean hangul 6F5D59 D6F0 ED9BB0 Korean hangul 6F5D5A D6FC ED9BBC Korean hangul 6F5D5C D700 ED9C80 Korean hangul 6F5D5D D711 ED9C91 Korean hangul 6F5D5E D718 ED9C98 Korean hangul 6F5D5F D719 ED9C99 Korean hangul 6F5D60 D71C ED9C9C Korean hangul 6F5D61 D720 ED9CA0 Korean hangul 6F5D62 D728 ED9CA8 Korean hangul 6F5D63 D729 ED9CA9 Korean hangul 6F5D65 D72D ED9CAD Korean hangul 6F5D66 D734 ED9CB4 Korean hangul 6F5D67 D73C ED9CBC Korean hangul 6F5D68 D744 ED9D84 Korean hangul 6F5D69 D749 ED9D89 Korean hangul 6F5D6A D750 ED9D90 Korean hangul 6F5D6B D751 ED9D91 Korean hangul 6F5D6C D754 ED9D94 Korean hangul 6F5D6D D757 ED9D97 Korean hangul 6F5D6E D758 ED9D98 Korean hangul 6F5D6F D759 ED9D99 Korean hangul 6F5D70 D760 ED9DA0 Korean hangul 6F5D71 D761 ED9DA1 Korean hangul 6F5D72 D763 ED9DA3 Korean hangul 6F5D73 D765 ED9DA5 Korean hangul 6F5D74 D769 ED9DA9 Korean hangul 6F5D75 D76C ED9DAC Korean hangul 6F5D76 D770 ED9DB0 Korean hangul 6F5D77 D774 ED9DB4 Korean hangul 6F5D78 D788 ED9E88 Korean hangul 6F5D79 D789 ED9E89 Korean hangul 6F5D7A D78C ED9E8C Korean hangul 6F5D7B D790 ED9E90 Korean hangul 6F5D7C D798 ED9E98 Korean hangul 6F5D7D D799 ED9E99 Korean hangul 6F5D7E D79B ED9E9B Korean hangul 6F5E21 D79D ED9E9D Korean hangul 6F7621 3181 E38681 Korean hangul 6F7622 3186 E38686 Korean hangul 6F7623 317F E385BF Korean hangul 6F7624 E8B0 EEA2B0 Korean hangul (ancient) 3013 E38093 6F7625 318D E3868D Korean hangul (ancient) 6F7640 E8B2 EEA2B2 Korean hangul (ancient) 3013 E38093 6F7641 E8B3 EEA2B3 Korean hangul (ancient) 3013 E38093 6F7642 E8B4 EEA2B4 Korean hangul (ancient) 3013 E38093 6F7643 E8B5 EEA2B5 Korean hangul (ancient) 3013 E38093 6F7644 E8B6 EEA2B6 Korean hangul (ancient) 3013 E38093 6F7645 E8B7 EEA2B7 Korean hangul (ancient) 3013 E38093 6F7646 E8B8 EEA2B8 Korean hangul (ancient) 3013 E38093 6F7647 E8B9 EEA2B9 Korean hangul (ancient) 3013 E38093 6F7648 E8BA EEA2BA Korean hangul (ancient) 3013 E38093 6F7649 E8BB EEA2BB Korean hangul (ancient) 3013 E38093 6F764A E8BC EEA2BC Korean hangul (ancient) 3013 E38093 6F764B E8BD EEA2BD Korean hangul (ancient) 3013 E38093 6F764C E8BE EEA2BE Korean hangul (ancient) 3013 E38093 6F764D E8BF EEA2BF Korean hangul (ancient) 3013 E38093 6F764E E8C0 EEA380 Korean hangul (ancient) 3013 E38093 6F764F E8C1 EEA381 Korean hangul (ancient) 3013 E38093 6F7650 E8C2 EEA382 Korean hangul (ancient) 3013 E38093 6F7651 E8C3 EEA383 Korean hangul (ancient) 3013 E38093 6F7652 E8C4 EEA384 Korean hangul (ancient) 3013 E38093 6F7653 E8C5 EEA385 Korean hangul (ancient) 3013 E38093 6F7654 E8C6 EEA386 Korean hangul (ancient) 3013 E38093 6F7655 E8C7 EEA387 Korean hangul (ancient) 3013 E38093 6F7656 E8C8 EEA388 Korean hangul (ancient) 3013 E38093 6F7657 E8C9 EEA389 Korean hangul (ancient) 3013 E38093 6F7721 AD35 EAB4B5 Korean hangul 6F7722 AD7B EAB5BB Korean hangul 6F7723 E8CA EEA38A Korean hangul 3013 E38093 6F7724 AD89 EAB689 Korean hangul 6F7725 AD9D EAB69D Korean hangul 6F7726 ADB9 EAB6B9 Korean hangul 6F7727 ADD5 EAB795 Korean hangul 6F7728 AE07 EAB887 Korean hangul 6F7729 AE0E EAB88E Korean hangul 6F772A AE0F EAB88F Korean hangul 6F772B AE11 EAB891 Korean hangul 6F772C AE14 EAB894 Korean hangul 6F772D AE5F EAB99F Korean hangul 6F772E AEED EABBAD Korean hangul 6F772F AF09 EABC89 Korean hangul 6F7730 AF50 EABD90 Korean hangul 6F7731 AFBF EABEBF Korean hangul 6F7732 B060 EB81A0 Korean hangul 6F7733 B9C4 EBA784 Korean hangul 6F7734 C54D EC958D Korean hangul 6F7735 C54F EC958F Korean hangul 6F7736 C552 EC9592 Korean hangul 6F7737 C5AB EC96AB Korean hangul 6F7738 C5B1 EC96B1 Korean hangul 6F7739 C61C EC989C Korean hangul 6F773A C61D EC989D Korean hangul 6F773B C6FD EC9BBD Korean hangul 6F773C C717 EC9C97 Korean hangul (unified with EACC 6F5658) 6F773D C733 EC9CB3 Korean hangul 6F773E CB4C ECAD8C Korean hangul

This table contains 25 mappings of character encodings for East Asian punctuation marks from the East Asian Coded Character set (ANSI/NISO Z39.64, or "EACC") to character encodings in the Universal Character Set (UCS, ISO-IEC 10646)/Unicode. Character codes are given in hexadecimal notation. Each character is presented on a separate row.

The first column contains the MARC-8 EACC 24-bit code (in hex), the second column contains the corresponding UCS/Unicode 16-bit (in hex) code, the third column contains the UTF-8 code (in hex) for the UCS character, the fourth column contains a representation of the character (where possible), the fifth column contains a character name or description.

NOTE: The character IDEOGRAPHIC NUMBER ZERO (EACC 212F30, UCS/Unicode 3007) is not included in this table. It is listed in the mapping table for East Asian Ideographs.

212321 3000 E38080 Ideographic space per ANSI Z39.64 212320 3000 E38080 Ideographic space in some implementations 212328 FF08 EFBC88 Ideographic left parenthesis 212329 FF09 EFBC89 Ideographic right parenthesis 21232D FF0D EFBC8D Ideographic hyphen minus 212A46 3013 E38093 Ideographic geta symbol 212B25 300C E3808C Ideographic left corner bracket 212B26 300D E3808D Ideographic right corner bracket 212B31 FF3B EFBCBB Ideographic left square bracket 212B32 FF3D EFBCBD Ideographic right square bracket 212B33 3002 E38082 Ideographic full stop 212B34 FF0E EFBC8E Ideographic variant full stop 212B35 3001 E38081 Ideographic comma 212B38 FF0C EFBC8C Ideographic variant comma 212B39 FF1B EFBC9B Ideographic semicolon 212B3A FF1A EFBC9A Ideographic colon 212B3B FF1F EFBC9F Ideographic question mark 212B3D FF01 EFBC81 Ideographic exclamation point 212B59 FF0F EFBC8F Ideographic solidus 692126 30FB E383BB Ideographic centered point 692139 3005 E38085 Ideographic iteration mark 692152 3008 E38088 Ideographic less than sign 692153 3009 E38089 Ideographic greater than sign 692154 300A E3808A Ideographic left double angle bracket 692155 300B E3808B Ideographic right double angle bracket

This table contains 35 mappings of encodings for component input method characters from the East Asian Coded Character set (ANSI/NISO Z39.64, or "EACC") to character encodings in the Private Use Area (PUA) of the Universal Character Set (UCS, ISO-IEC 10646)/Unicode. Character codes are given in hexadecimal notation. Each character is presented on a separate row.

The first column contains the MARC-8 EACC 24-bit code (in hex), the second column contains the corresponding UCS/Unicode 16-bit code (in hex), the third column contains the UTF-8 code (in hex) for the UCS character, the fourth column contains a representation of the character (where possible), the fifth column contains a character name or description. Most East Asian ideographs are not given unique names in the MARC-8 or UCS/Unicode.

For some characters alternate encodings in UCS/Unicode and UTF-8 are given. When that occurs the alternate UCS/Unicode 16-bit code column and alternate UTF-8 code column follow the character name. The alternative UCS/Unicode character codes are provided for cases where MARC-8 characters were mapped to UCS/Unicode characters in the Private Use Area (PUA). The alternative character code is a defined Unicode character which should be supported by applications that claim to support the full repertoire of defined Unicode characters.

The characters in this table are sorted in EACC character code order.

212A21 E8D0 EEA390 EACC component character 3013 E38093 212A22 E8D1 EEA391 EACC component character 3013 E38093 212A23 E8D2 EEA392 EACC component character 3013 E38093 212A24 E8D3 EEA393 EACC component character 3013 E38093 212A25 E8D4 EEA394 EACC component character 3013 E38093 212A26 E8D5 EEA395 EACC component character 3013 E38093 212A28 E8D6 EEA396 EACC component character 3013 E38093 212A29 E8D7 EEA397 EACC component character 3013 E38093 212A2A E8D8 EEA398 EACC component character 3013 E38093 212A2B E8D9 EEA399 EACC component character 3013 E38093 212A2C E8DA EEA39A EACC component character 3013 E38093 212A2D E8DB EEA39B EACC component character 3013 E38093 212A2E E8DC EEA39C EACC component character 3013 E38093 212A2F E8DD EEA39D EACC component character 3013 E38093 212A30 E8DE EEA39E EACC component character 3013 E38093 212A32 E8DF EEA39F EACC component character 3013 E38093 212A33 E8E0 EEA3A0 EACC component character 3013 E38093 212A34 E8E1 EEA3A1 EACC component character 3013 E38093 212A35 E8E2 EEA3A2 EACC component character 3013 E38093 212A36 E8E3 EEA3A3 EACC component character 3013 E38093 212A37 E8E4 EEA3A4 EACC component character 3013 E38093 212A38 E8E5 EEA3A5 EACC component character 3013 E38093 212A39 E8E6 EEA3A6 EACC component character 3013 E38093 212A3A E8E7 EEA3A7 EACC component character 3013 E38093 212A3B E8E8 EEA3A8 EACC component character 3013 E38093 212A3C E8E9 EEA3A9 EACC component character 3013 E38093 212A3D E8EA EEA3AA EACC component character 3013 E38093 212A3E E8EB EEA3AB EACC component character 3013 E38093 212A3F E8EC EEA3AC EACC component character 3013 E38093 212A40 E8ED EEA3AD EACC component character 3013 E38093 212A41 E8EE EEA3AE EACC component character 3013 E38093 212A42 E8EF EEA3AF EACC component character 3013 E38093 212A43 E8F0 EEA3B0 EACC component character 3013 E38093 212A44 E8F1 EEA3B1 EACC component character 3013 E38093 212A45 E8F2 EEA3B2 EACC component character 3013 E38093
yaz-5.28.0/src/mime.h0000644000175000017500000000406713265142510011227 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** \file mime.h \brief Small utility to manage MIME types */ #ifndef MIME_H #define MIME_H typedef struct yaz_mime_info *yaz_mime_types; yaz_mime_types yaz_mime_types_create(void); void yaz_mime_types_add(yaz_mime_types t, const char *suffix, const char *mime_type); const char *yaz_mime_lookup_suffix(yaz_mime_types t, const char *suffix); const char *yaz_mime_lookup_fname(yaz_mime_types t, const char *fname); void yaz_mime_types_destroy(yaz_mime_types t); #endif yaz-5.28.0/src/backtrace.c0000644000175000017500000001124713265142510012210 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief get information for abnormal terminated, crashes, etc */ #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #if HAVE_UNISTD_H #include #endif #include #if HAVE_SYS_WAIT_H #include #endif #include #include #include #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_EXECINFO_H #include #endif #define BACKTRACE_SZ 100 static char static_progname[256]; #if HAVE_EXECINFO_H static int yaz_panic_fd = -1; static void yaz_invoke_gdb(void) { int fd = yaz_panic_fd; pid_t pid; int fds[2]; if (pipe(fds) == -1) { const char *cp = "backtrace: pipe failed\n"; write(fd, cp, strlen(cp)); return; } pid = fork(); if (pid == (pid_t) (-1)) { /* error */ const char *cp = "backtrace: fork failure\n"; write(fd, cp, strlen(cp)); } else if (pid == 0) { /* child */ char *arg[20]; int arg_no = 0; char pidstr[40]; const char *cp = "backtrace: could not exec gdb\n"; close(fds[1]); close(0); dup(fds[0]); if (fd != 1) { close(1); dup(fd); } if (fd != 2) { close(2); dup(fd); } arg[arg_no++] = "/usr/bin/gdb"; arg[arg_no++] = "-n"; arg[arg_no++] = "-batch"; arg[arg_no++] = "-ex"; arg[arg_no++] = "info threads"; arg[arg_no++] = "-ex"; arg[arg_no++] = "thread apply all bt"; arg[arg_no++] = static_progname; sprintf(pidstr, NMEM_INT_PRINTF, (nmem_int_t) getppid()); arg[arg_no++] = pidstr; arg[arg_no] = 0; execv(arg[0], arg); write(2, cp, strlen(cp)); /* exec failure if we make it this far */ _exit(1); } else { /* parent */ int sec = 0; close(fds[0]); write(fds[1], "quit\n", 5); while (1) { int status; pid_t s = waitpid(pid, &status, WNOHANG); if (s != 0) break; if (sec == 9) kill(pid, SIGTERM); if (sec == 10) kill(pid, SIGKILL); if (sec == 11) break; if (sec > 3) write(fds[1], "quit\n", 5); sleep(1); sec++; } close(fds[1]); } } static int yaz_panic_signal = 0; static void yaz_panic_alarm(int sig) { const char *cp = "backtrace: backtrace hangs\n"; write(yaz_panic_fd, cp, strlen(cp)); yaz_invoke_gdb(); kill(getpid(), yaz_panic_signal); } static void yaz_invoke_backtrace(int sig) { int fd = yaz_panic_fd; void *backtrace_info[BACKTRACE_SZ]; int sz = BACKTRACE_SZ; yaz_panic_signal = sig; signal(SIGALRM, yaz_panic_alarm); alarm(1); sz = backtrace(backtrace_info, sz); backtrace_symbols_fd(backtrace_info, sz, fd); alarm(0); } static void yaz_panic_sig_handler(int sig) { char buf[512]; FILE *file; signal(SIGABRT, SIG_DFL); signal(SIGSEGV, SIG_DFL); signal(SIGFPE, SIG_DFL); signal(SIGBUS, SIG_DFL); strcpy(buf, "\nYAZ panic received "); switch (sig) { case SIGSEGV: strcat(buf, "SIGSEGV"); break; case SIGABRT: strcat(buf, "SIGABRT"); break; case SIGFPE: strcat(buf, "SIGFPE"); break; case SIGBUS: strcat(buf, "SIGBUS"); break; default: yaz_snprintf(buf + strlen(buf), sizeof buf, "signo=%d", sig); break; } yaz_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf) - 1, " PID=" NMEM_INT_PRINTF "\n", (nmem_int_t) getpid()); file = yaz_log_file(); /* static variable to be used in the following + handlers */ yaz_panic_fd = fileno(file); write(yaz_panic_fd, buf, strlen(buf)); yaz_invoke_backtrace(sig); yaz_invoke_gdb(); kill(getpid(), sig); } #endif void yaz_enable_panic_backtrace(const char *progname) { strncpy(static_progname, progname, sizeof(static_progname) - 1); static_progname[sizeof(static_progname) - 1] = '\0'; #if HAVE_EXECINFO_H signal(SIGABRT, yaz_panic_sig_handler); signal(SIGSEGV, yaz_panic_sig_handler); signal(SIGFPE, yaz_panic_sig_handler); signal(SIGBUS, yaz_panic_sig_handler); #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/iso5428.c0000644000175000017500000002543413265142510011411 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief ISO-5428:1984 encoding and decoding */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "iconv-p.h" static unsigned long read_iso_5428_1984(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { unsigned long x = 0; int tonos = 0; int dialitika = 0; *no_read = 0; while (inbytesleft > 0) { if (*inp == 0xa2) { tonos = 1; } else if (*inp == 0xa3) { dialitika = 1; } else break; inp++; --inbytesleft; (*no_read)++; } if (inbytesleft == 0) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); /* incomplete input */ *no_read = 0; return 0; } switch (*inp) { case 0xe1: /* alpha small */ if (tonos) x = 0x03ac; else x = 0x03b1; break; case 0xc1: /* alpha capital */ if (tonos) x = 0x0386; else x = 0x0391; break; case 0xe2: /* Beta small */ x = 0x03b2; break; case 0xc2: /* Beta capital */ x = 0x0392; break; case 0xe4: /* Gamma small */ x = 0x03b3; break; case 0xc4: /* Gamma capital */ x = 0x0393; break; case 0xe5: /* Delta small */ x = 0x03b4; break; case 0xc5: /* Delta capital */ x = 0x0394; break; case 0xe6: /* epsilon small */ if (tonos) x = 0x03ad; else x = 0x03b5; break; case 0xc6: /* epsilon capital */ if (tonos) x = 0x0388; else x = 0x0395; break; case 0xe9: /* Zeta small */ x = 0x03b6; break; case 0xc9: /* Zeta capital */ x = 0x0396; break; case 0xea: /* Eta small */ if (tonos) x = 0x03ae; else x = 0x03b7; break; case 0xca: /* Eta capital */ if (tonos) x = 0x0389; else x = 0x0397; break; case 0xeb: /* Theta small */ x = 0x03b8; break; case 0xcb: /* Theta capital */ x = 0x0398; break; case 0xec: /* Iota small */ if (tonos) if (dialitika) x = 0x0390; else x = 0x03af; else if (dialitika) x = 0x03ca; else x = 0x03b9; break; case 0xcc: /* Iota capital */ if (tonos) x = 0x038a; else if (dialitika) x = 0x03aa; else x = 0x0399; break; case 0xed: /* Kappa small */ x = 0x03ba; break; case 0xcd: /* Kappa capital */ x = 0x039a; break; case 0xee: /* Lambda small */ x = 0x03bb; break; case 0xce: /* Lambda capital */ x = 0x039b; break; case 0xef: /* Mu small */ x = 0x03bc; break; case 0xcf: /* Mu capital */ x = 0x039c; break; case 0xf0: /* Nu small */ x = 0x03bd; break; case 0xd0: /* Nu capital */ x = 0x039d; break; case 0xf1: /* Xi small */ x = 0x03be; break; case 0xd1: /* Xi capital */ x = 0x039e; break; case 0xf2: /* Omicron small */ if (tonos) x = 0x03cc; else x = 0x03bf; break; case 0xd2: /* Omicron capital */ if (tonos) x = 0x038c; else x = 0x039f; break; case 0xf3: /* Pi small */ x = 0x03c0; break; case 0xd3: /* Pi capital */ x = 0x03a0; break; case 0xf5: /* Rho small */ x = 0x03c1; break; case 0xd5: /* Rho capital */ x = 0x03a1; break; case 0xf7: /* Sigma small (end of words) */ x = 0x03c2; break; case 0xf6: /* Sigma small */ x = 0x03c3; break; case 0xd6: /* Sigma capital */ x = 0x03a3; break; case 0xf8: /* Tau small */ x = 0x03c4; break; case 0xd8: /* Tau capital */ x = 0x03a4; break; case 0xf9: /* Upsilon small */ if (tonos) if (dialitika) x = 0x03b0; else x = 0x03cd; else if (dialitika) x = 0x03cb; else x = 0x03c5; break; case 0xd9: /* Upsilon capital */ if (tonos) x = 0x038e; else if (dialitika) x = 0x03ab; else x = 0x03a5; break; case 0xfa: /* Phi small */ x = 0x03c6; break; case 0xda: /* Phi capital */ x = 0x03a6; break; case 0xfb: /* Chi small */ x = 0x03c7; break; case 0xdb: /* Chi capital */ x = 0x03a7; break; case 0xfc: /* Psi small */ x = 0x03c8; break; case 0xdc: /* Psi capital */ x = 0x03a8; break; case 0xfd: /* Omega small */ if (tonos) x = 0x03ce; else x = 0x03c9; break; case 0xdd: /* Omega capital */ if (tonos) x = 0x038f; else x = 0x03a9; break; default: x = *inp; break; } (*no_read)++; return x; } static size_t write_iso_5428_1984(yaz_iconv_t cd, yaz_iconv_encoder_t en, unsigned long x, char **outbuf, size_t *outbytesleft) { size_t k = 0; unsigned char *out = (unsigned char*) *outbuf; if (*outbytesleft < 3) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); /* not room for output */ return (size_t)(-1); } switch (x) { case 0x03ac : out[k++]=0xa2; out[k++]=0xe1; break; case 0x03b1 : out[k++]=0xe1; break; case 0x0386 : out[k++]=0xa2; out[k++]=0xc1; break; case 0x0391 : out[k++]=0xc1; break; case 0x03b2 : out[k++]=0xe2; break; case 0x0392 : out[k++]=0xc2; break; case 0x03b3 : out[k++]=0xe4; break; case 0x0393 : out[k++]=0xc4; break; case 0x03b4 : out[k++]=0xe5; break; case 0x0394 : out[k++]=0xc5; break; case 0x03ad : out[k++]=0xa2; out[k++]=0xe6; break; case 0x03b5 : out[k++]=0xe6; break; case 0x0388 : out[k++]=0xa2; out[k++]=0xc6; break; case 0x0395 : out[k++]=0xc6; break; case 0x03b6 : out[k++]=0xe9; break; case 0x0396 : out[k++]=0xc9; break; case 0x03ae : out[k++]=0xa2; out[k++]=0xea; break; case 0x03b7 : out[k++]=0xea; break; case 0x0389 : out[k++]=0xa2; out[k++]=0xca; break; case 0x0397 : out[k++]=0xca; break; case 0x03b8 : out[k++]=0xeb; break; case 0x0398 : out[k++]=0xcb; break; case 0x0390 : out[k++]=0xa2; out[k++]=0xa3; out[k++]=0xec; break; case 0x03af : out[k++]=0xa2; out[k++]=0xec; break; case 0x03ca : out[k++]=0xa3; out[k++]=0xec; break; case 0x03b9 : out[k++]=0xec; break; case 0x038a : out[k++]=0xa2; out[k++]=0xcc; break; case 0x03aa : out[k++]=0xa3; out[k++]=0xcc; break; case 0x0399 : out[k++]=0xcc; break; case 0x03ba : out[k++]=0xed; break; case 0x039a : out[k++]=0xcd; break; case 0x03bb : out[k++]=0xee; break; case 0x039b : out[k++]=0xce; break; case 0x03bc : out[k++]=0xef; break; case 0x039c : out[k++]=0xcf; break; case 0x03bd : out[k++]=0xf0; break; case 0x039d : out[k++]=0xd0; break; case 0x03be : out[k++]=0xf1; break; case 0x039e : out[k++]=0xd1; break; case 0x03cc : out[k++]=0xa2; out[k++]=0xf2; break; case 0x03bf : out[k++]=0xf2; break; case 0x038c : out[k++]=0xa2; out[k++]=0xd2; break; case 0x039f : out[k++]=0xd2; break; case 0x03c0 : out[k++]=0xf3; break; case 0x03a0 : out[k++]=0xd3; break; case 0x03c1 : out[k++]=0xf5; break; case 0x03a1 : out[k++]=0xd5; break; case 0x03c2 : out[k++]=0xf7; break; case 0x03c3 : out[k++]=0xf6; break; case 0x03a3 : out[k++]=0xd6; break; case 0x03c4 : out[k++]=0xf8; break; case 0x03a4 : out[k++]=0xd8; break; case 0x03b0 : out[k++]=0xa2; out[k++]=0xa3; out[k++]=0xf9; break; case 0x03cd : out[k++]=0xa2; out[k++]=0xf9; break; case 0x03cb : out[k++]=0xa3; out[k++]=0xf9; break; case 0x03c5 : out[k++]=0xf9; break; case 0x038e : out[k++]=0xa2; out[k++]=0xd9; break; case 0x03ab : out[k++]=0xa3; out[k++]=0xd9; break; case 0x03a5 : out[k++]=0xd9; break; case 0x03c6 : out[k++]=0xfa; break; case 0x03a6 : out[k++]=0xda; break; case 0x03c7 : out[k++]=0xfb; break; case 0x03a7 : out[k++]=0xdb; break; case 0x03c8 : out[k++]=0xfc; break; case 0x03a8 : out[k++]=0xdc; break; case 0x03ce : out[k++]=0xa2; out[k++]=0xfd; break; case 0x03c9 : out[k++]=0xfd; break; case 0x038f : out[k++]=0xa2; out[k++]=0xdd; break; case 0x03a9 : out[k++]=0xdd; break; default: if (x > 255) { yaz_iconv_set_errno(cd, YAZ_ICONV_EILSEQ); return (size_t) -1; } out[k++] = (unsigned char ) x; break; } *outbytesleft -= k; (*outbuf) += k; return 0; } yaz_iconv_encoder_t yaz_iso_5428_encoder(const char *name, yaz_iconv_encoder_t e) { if (!yaz_matchstr(name, "iso54281984") || !yaz_matchstr(name, "iso5428:1984")) { e->write_handle = write_iso_5428_1984; return e; } return 0; } yaz_iconv_decoder_t yaz_iso_5428_decoder(const char *name, yaz_iconv_decoder_t d) { if (!yaz_matchstr(name, "iso54281984") || !yaz_matchstr(name, "iso5428:1984")) { d->read_handle = read_iso_5428_1984; return d; } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_null.c0000644000175000017500000000232113265142510012100 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_null.c * \brief Implements ODR NULL codec */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" /* * Top level null en/decoder. * Returns 1 on success, 0 on error. */ int odr_null(ODR o, Odr_null **p, int opt, const char *name) { int res, cons = 0; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_NULL; } res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name); if (res < 0) return 0; if (!res) return odr_missing(o, opt, name); if (o->direction == ODR_PRINT) { odr_prname(o, name); odr_printf(o, "NULL\n"); return 1; } if (cons) { #ifdef ODR_STRICT_NULL odr_seterror(OPROTO, 42); return 0; #else /* Warning: Bad NULL */ #endif } if (o->direction == ODR_DECODE) *p = odr_nullval(); return ber_null(o); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/eventl.c0000644000175000017500000001344113265142510011564 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file eventl.c * \brief Implements event loop handling for GFS. * * This source implements the main event loop for the Generic Frontend * Server. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_TIME_H #include #endif #include #include #include #include #include #include "eventl.h" #include "session.h" #include static int log_level=0; static int log_level_initialized=0; IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags, int chan_id) { IOCHAN new_iochan; if (!log_level_initialized) { log_level=yaz_log_module_level("eventl"); log_level_initialized=1; } if (!(new_iochan = (IOCHAN)xmalloc(sizeof(*new_iochan)))) return 0; new_iochan->destroyed = 0; new_iochan->fd = fd; new_iochan->flags = flags; new_iochan->fun = cb; new_iochan->force_event = 0; new_iochan->last_event = new_iochan->max_idle = 0; new_iochan->next = NULL; new_iochan->chan_id = chan_id; return new_iochan; } int iochan_is_alive(IOCHAN chan) { struct yaz_poll_fd fds; int res; fds.fd = chan->fd; fds.input_mask = yaz_poll_read; res = yaz_poll(&fds, 1, 0, 0); if (res == 0) return 1; if (!ir_read(chan, EVENT_INPUT)) return 0; return 1; } int iochan_event_loop(IOCHAN *iochans, int *watch_sig) { do /* loop as long as there are active associations to process */ { IOCHAN p, nextp; int i; int tv_sec = 3600; int no_fds = 0; struct yaz_poll_fd *fds = 0; int res; time_t now = time(0); for (p = *iochans; p; p = p->next) no_fds++; fds = (struct yaz_poll_fd *) xmalloc(no_fds * sizeof(*fds)); for (i = 0, p = *iochans; p; p = p->next, i++) { time_t w, ftime; enum yaz_poll_mask input_mask = yaz_poll_none; yaz_log(log_level, "fd=%d flags=%d force_event=%d", p->fd, p->flags, p->force_event); if (p->force_event) tv_sec = 0; /* polling select */ if (p->flags & EVENT_INPUT) yaz_poll_add(input_mask, yaz_poll_read); if (p->flags & EVENT_OUTPUT) yaz_poll_add(input_mask, yaz_poll_write); if (p->flags & EVENT_EXCEPT) yaz_poll_add(input_mask, yaz_poll_except); if (p->max_idle && p->last_event) { ftime = p->last_event + p->max_idle; if (ftime < now) w = p->max_idle; else w = ftime - now; /* tv_sec will be minimum wait.. */ if (w < tv_sec) tv_sec = (int) w; /* can hold it because w < tv_sec */ } fds[i].fd = p->fd; fds[i].input_mask = input_mask; } res = yaz_poll(fds, no_fds, tv_sec, 0); if (res < 0) { if (yaz_errno() == EINTR) { xfree(fds); if (watch_sig && *watch_sig) break; continue; } else { yaz_log(YLOG_WARN|YLOG_ERRNO, "yaz_poll"); xfree(fds); continue; } } now = time(0); for (i = 0, p = *iochans; p; p = p->next, i++) { int force_event = p->force_event; enum yaz_poll_mask output_mask = fds[i].output_mask; p->force_event = 0; if (!p->destroyed && ((output_mask & yaz_poll_read) || force_event == EVENT_INPUT)) { p->last_event = now; (*p->fun)(p, EVENT_INPUT); } if (!p->destroyed && ((output_mask & yaz_poll_write) || force_event == EVENT_OUTPUT)) { p->last_event = now; (*p->fun)(p, EVENT_OUTPUT); } if (!p->destroyed && ((output_mask & yaz_poll_except) || force_event == EVENT_EXCEPT)) { p->last_event = now; (*p->fun)(p, EVENT_EXCEPT); } if (!p->destroyed && ((p->max_idle && now - p->last_event >= p->max_idle) || force_event == EVENT_TIMEOUT)) { p->last_event = now; (*p->fun)(p, EVENT_TIMEOUT); } } xfree(fds); for (p = *iochans; p; p = nextp) { nextp = p->next; if (p->destroyed) { IOCHAN tmp = p, pr; /* We need to inform the threadlist that this channel has been destroyed */ statserv_remove(p); /* Now reset the pointers */ if (p == *iochans) *iochans = p->next; else { for (pr = *iochans; pr; pr = pr->next) if (pr->next == p) break; assert(pr); /* grave error if it weren't there */ pr->next = p->next; } if (nextp == p) nextp = p->next; xfree(tmp); } } } while (*iochans); return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cql.c0000644000175000017500000016252213273126166011063 00000000000000/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.0.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the variable and function names. */ #define yyparse cql_parse #define yylex cql_lex #define yyerror cql_error #define yydebug cql_debug #define yynerrs cql_nerrs /* Copy the first part of user declarations. */ #line 6 "cql.y" /* yacc.c:339 */ /** * \file cql.c * \brief Implements CQL parser. * * This is a YACC parser, but since it must be reentrant, Bison is required. * The original source file is cql.y. */ #if HAVE_CONFIG_H #include #endif #include #include /* avoid that bison stuff defines malloc/free - already in stdlib.h */ #ifdef _MSC_VER #define _STDLIB_H 1 #endif #include #include #include #include #include /** Node in the LALR parse tree. */ typedef struct { /** Inhereted attribute: relation */ struct cql_node *rel; /** Synthesized attribute: CQL node */ struct cql_node *cql; /** string buffer with token */ char *buf; /** length of token */ size_t len; /** size of buffer (len <= size) */ size_t size; } token; struct cql_parser { int (*getbyte)(void *client_data); void (*ungetbyte)(int b, void *client_data); void *client_data; int last_error; int last_pos; struct cql_node *top; NMEM nmem; int strict; }; #define YYSTYPE token int yylex(YYSTYPE *lval, void *vp); int yyerror(void *lval, char *msg); #line 127 "cql.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int cql_debug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { PREFIX_NAME = 258, SIMPLE_STRING = 259, AND = 260, OR = 261, NOT = 262, PROX = 263, GE = 264, LE = 265, NE = 266, EXACT = 267, SORTBY = 268 }; #endif /* Tokens. */ #define PREFIX_NAME 258 #define SIMPLE_STRING 259 #define AND 260 #define OR 261 #define NOT 262 #define PROX 263 #define GE 264 #define LE 265 #define NE 266 #define EXACT 267 #define SORTBY 268 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int cql_parse (void *parm); /* Copy the second part of user declarations. */ #line 200 "cql.c" /* yacc.c:358 */ #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE # if (defined __GNUC__ \ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C # define YY_ATTRIBUTE(Spec) __attribute__(Spec) # else # define YY_ATTRIBUTE(Spec) /* empty */ # endif #endif #ifndef YY_ATTRIBUTE_PURE # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif #if !defined _Noreturn \ && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) # if defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 103 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 20 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 22 /* YYNRULES -- Number of rules. */ #define YYNRULES 49 /* YYNSTATES -- Number of states. */ #define YYNSTATES 66 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 268 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex, without out-of-bounds checking. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 17, 2, 2, 2, 2, 2, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 15, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 69, 69, 69, 86, 87, 91, 95, 100, 105, 106, 113, 115, 115, 121, 121, 130, 132, 132, 147, 147, 154, 161, 161, 171, 178, 185, 185, 185, 185, 187, 196, 205, 210, 210, 213, 214, 215, 216, 217, 218, 219, 223, 226, 227, 228, 229, 230, 231, 232 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "PREFIX_NAME", "SIMPLE_STRING", "AND", "OR", "NOT", "PROX", "GE", "LE", "NE", "EXACT", "SORTBY", "'>'", "'='", "'('", "')'", "'/'", "'<'", "$accept", "top", "@1", "sortby", "sortSpec", "singleSpec", "cqlQuery1", "cqlQuery", "@2", "@3", "scopedClause", "@4", "searchClause", "@5", "@6", "extraTerms", "boolean", "modifiers", "relation", "relation_symbol", "index", "searchTerm", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 62, 61, 40, 41, 47, 60 }; # endif #define YYPACT_NINF -34 #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-34))) #define YYTABLE_NINF -43 #define yytable_value_is_error(Yytable_value) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int8 yypact[] = { -34, 4, 51, -34, -34, -34, -34, -34, -34, -34, -34, 79, -34, 6, 7, 31, -34, 32, 2, -13, 51, 79, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 11, -34, 79, 51, 5, 79, -34, -34, -34, 9, 9, -34, -34, -34, -34, -34, 9, 79, 65, 65, 51, 84, -34, -34, -34, 79, -34 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 2, 0, 0, 1, 44, 43, 45, 46, 47, 48, 49, 0, 19, 4, 0, 11, 16, 0, 25, 14, 0, 0, 3, 10, 26, 27, 28, 29, 32, 33, 38, 39, 40, 41, 36, 35, 37, 32, 34, 25, 21, 0, 0, 0, 5, 7, 32, 42, 17, 22, 24, 12, 15, 20, 6, 8, 0, 0, 0, 0, 30, 18, 23, 13, 0, 31 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -34, -34, -34, -34, -34, -16, -34, -19, -34, -34, -34, -34, -33, -34, -34, -10, -34, -28, -34, -29, -18, -11 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 1, 2, 22, 44, 45, 13, 14, 59, 42, 15, 57, 16, 20, 58, 40, 28, 48, 37, 38, 17, 18 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int8 yytable[] = { 19, 43, 41, 46, 3, -42, 39, -9, 23, 49, 47, -42, -42, -42, -42, 39, -42, -42, 55, 21, -9, -42, 53, 52, 61, 62, 46, 56, 54, 50, 51, 64, 0, 47, 0, 29, 24, 25, 26, 27, 63, 30, 31, 32, 33, 60, 34, 35, 0, 0, 0, 36, 0, 65, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 10, 11, 0, 12, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 10, 0, 0, 12, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 10, 30, 31, 32, 33, 0, 34, 35, 0, 0, 0, 36 }; static const yytype_int8 yycheck[] = { 11, 20, 15, 21, 0, 3, 4, 0, 1, 37, 21, 9, 10, 11, 12, 4, 14, 15, 46, 13, 13, 19, 17, 42, 57, 58, 44, 18, 44, 39, 41, 60, -1, 44, -1, 3, 5, 6, 7, 8, 59, 9, 10, 11, 12, 56, 14, 15, -1, -1, -1, 19, -1, 64, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, 13, 14, -1, 16, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, 13, -1, -1, 16, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, 13, 9, 10, 11, 12, -1, 14, 15, -1, -1, -1, 19 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 21, 22, 0, 3, 4, 5, 6, 7, 8, 13, 14, 16, 26, 27, 30, 32, 40, 41, 41, 33, 13, 23, 1, 5, 6, 7, 8, 36, 3, 9, 10, 11, 12, 14, 15, 19, 38, 39, 4, 35, 15, 29, 27, 24, 25, 40, 41, 37, 37, 35, 41, 27, 17, 25, 37, 18, 31, 34, 28, 41, 32, 32, 27, 39, 41 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 20, 22, 21, 23, 23, 24, 24, 25, 26, 26, 27, 28, 27, 29, 27, 30, 31, 30, 33, 32, 32, 34, 32, 35, 35, 36, 36, 36, 36, 37, 37, 37, 38, 38, 39, 39, 39, 39, 39, 39, 39, 40, 41, 41, 41, 41, 41, 41, 41 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 3, 0, 2, 2, 1, 2, 1, 2, 1, 0, 6, 0, 4, 1, 0, 5, 0, 4, 2, 0, 5, 2, 0, 1, 1, 1, 1, 3, 5, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (parm, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, parm); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*----------------------------------------. | Print this symbol's value on YYOUTPUT. | `----------------------------------------*/ static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void *parm) { FILE *yyo = yyoutput; YYUSE (yyo); YYUSE (parm); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif YYUSE (yytype); } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void *parm) { YYFPRINTF (yyoutput, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, parm); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, void *parm) { unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], &(yyvsp[(yyi + 1) - (yynrhs)]) , parm); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule, parm); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ static YYSIZE_T yystrlen (const char *yystr) { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * yystpcpy (char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, void *parm) { YYUSE (yyvaluep); YYUSE (parm); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*----------. | yyparse. | `----------*/ int yyparse (void *parm) { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ YY_INITIAL_VALUE (static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Number of syntax errors so far. */ int yynerrs; int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (&yylval, parm); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: #line 69 "cql.y" /* yacc.c:1646 */ { (yyval).rel = cql_node_mk_sc(((CQL_parser) parm)->nmem, "cql.serverChoice", "=", 0); ((CQL_parser) parm)->top = 0; } #line 1335 "cql.c" /* yacc.c:1646 */ break; case 3: #line 73 "cql.y" /* yacc.c:1646 */ { cql_node_destroy((yyval).rel); if ((yyvsp[0]).cql) { (yyvsp[0]).cql->u.sort.search = (yyvsp[-1]).cql; ((CQL_parser) parm)->top = (yyvsp[0]).cql; } else { ((CQL_parser) parm)->top = (yyvsp[-1]).cql; } } #line 1350 "cql.c" /* yacc.c:1646 */ break; case 4: #line 86 "cql.y" /* yacc.c:1646 */ { (yyval).cql = 0; } #line 1356 "cql.c" /* yacc.c:1646 */ break; case 5: #line 87 "cql.y" /* yacc.c:1646 */ { (yyval).cql = (yyvsp[0]).cql; } #line 1364 "cql.c" /* yacc.c:1646 */ break; case 6: #line 91 "cql.y" /* yacc.c:1646 */ { (yyval).cql = (yyvsp[-1]).cql; (yyval).cql->u.sort.next = (yyvsp[0]).cql; } #line 1373 "cql.c" /* yacc.c:1646 */ break; case 7: #line 96 "cql.y" /* yacc.c:1646 */ { (yyval).cql = (yyvsp[0]).cql; } #line 1381 "cql.c" /* yacc.c:1646 */ break; case 8: #line 100 "cql.y" /* yacc.c:1646 */ { (yyval).cql = cql_node_mk_sort(((CQL_parser) parm)->nmem, (yyvsp[-1]).buf, (yyvsp[0]).cql); } #line 1389 "cql.c" /* yacc.c:1646 */ break; case 10: #line 106 "cql.y" /* yacc.c:1646 */ { cql_node_destroy((yyvsp[-1]).cql); (yyval).cql = 0; } #line 1398 "cql.c" /* yacc.c:1646 */ break; case 12: #line 115 "cql.y" /* yacc.c:1646 */ { (yyval).rel = (yyvsp[-4]).rel; } #line 1406 "cql.c" /* yacc.c:1646 */ break; case 13: #line 117 "cql.y" /* yacc.c:1646 */ { (yyval).cql = cql_apply_prefix(((CQL_parser) parm)->nmem, (yyvsp[0]).cql, (yyvsp[-4]).buf, (yyvsp[-2]).buf); } #line 1415 "cql.c" /* yacc.c:1646 */ break; case 14: #line 121 "cql.y" /* yacc.c:1646 */ { (yyval).rel = (yyvsp[-2]).rel; } #line 1423 "cql.c" /* yacc.c:1646 */ break; case 15: #line 123 "cql.y" /* yacc.c:1646 */ { (yyval).cql = cql_apply_prefix(((CQL_parser) parm)->nmem, (yyvsp[0]).cql, 0, (yyvsp[-2]).buf); } #line 1432 "cql.c" /* yacc.c:1646 */ break; case 17: #line 132 "cql.y" /* yacc.c:1646 */ { (yyval).rel = (yyvsp[-3]).rel; } #line 1440 "cql.c" /* yacc.c:1646 */ break; case 18: #line 134 "cql.y" /* yacc.c:1646 */ { struct cql_node *cn = cql_node_mk_boolean(((CQL_parser) parm)->nmem, (yyvsp[-3]).buf); cn->u.boolean.modifiers = (yyvsp[-2]).cql; cn->u.boolean.left = (yyvsp[-4]).cql; cn->u.boolean.right = (yyvsp[0]).cql; (yyval).cql = cn; } #line 1455 "cql.c" /* yacc.c:1646 */ break; case 19: #line 147 "cql.y" /* yacc.c:1646 */ { (yyval).rel = (yyvsp[-1]).rel; } #line 1464 "cql.c" /* yacc.c:1646 */ break; case 20: #line 150 "cql.y" /* yacc.c:1646 */ { (yyval).cql = (yyvsp[-1]).cql; } #line 1472 "cql.c" /* yacc.c:1646 */ break; case 21: #line 154 "cql.y" /* yacc.c:1646 */ { struct cql_node *st = cql_node_dup(((CQL_parser) parm)->nmem, (yyvsp[-2]).rel); st->u.st.extra_terms = (yyvsp[0]).cql; st->u.st.term = nmem_strdup(((CQL_parser)parm)->nmem, (yyvsp[-1]).buf); (yyval).cql = st; } #line 1483 "cql.c" /* yacc.c:1646 */ break; case 22: #line 161 "cql.y" /* yacc.c:1646 */ { (yyval).rel = cql_node_mk_sc(((CQL_parser) parm)->nmem, (yyvsp[-2]).buf, (yyvsp[-1]).buf, 0); (yyval).rel->u.st.modifiers = (yyvsp[0]).cql; } #line 1492 "cql.c" /* yacc.c:1646 */ break; case 23: #line 164 "cql.y" /* yacc.c:1646 */ { (yyval).cql = (yyvsp[0]).cql; cql_node_destroy((yyvsp[-1]).rel); } #line 1501 "cql.c" /* yacc.c:1646 */ break; case 24: #line 171 "cql.y" /* yacc.c:1646 */ { struct cql_node *st = cql_node_mk_sc(((CQL_parser) parm)->nmem, /* index */ 0, /* rel */ 0, (yyvsp[-1]).buf); st->u.st.extra_terms = (yyvsp[0]).cql; (yyval).cql = st; } #line 1512 "cql.c" /* yacc.c:1646 */ break; case 25: #line 178 "cql.y" /* yacc.c:1646 */ { (yyval).cql = 0; } #line 1518 "cql.c" /* yacc.c:1646 */ break; case 30: #line 188 "cql.y" /* yacc.c:1646 */ { struct cql_node *mod = cql_node_mk_sc(((CQL_parser)parm)->nmem, (yyvsp[0]).buf, 0, 0); mod->u.st.modifiers = (yyvsp[-2]).cql; (yyval).cql = mod; } #line 1530 "cql.c" /* yacc.c:1646 */ break; case 31: #line 197 "cql.y" /* yacc.c:1646 */ { struct cql_node *mod = cql_node_mk_sc(((CQL_parser)parm)->nmem, (yyvsp[-2]).buf, (yyvsp[-1]).buf, (yyvsp[0]).buf); mod->u.st.modifiers = (yyvsp[-4]).cql; (yyval).cql = mod; } #line 1542 "cql.c" /* yacc.c:1646 */ break; case 32: #line 205 "cql.y" /* yacc.c:1646 */ { (yyval).cql = 0; } #line 1550 "cql.c" /* yacc.c:1646 */ break; #line 1554 "cql.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (parm, YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (parm, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, parm); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, parm); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (parm, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, parm); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, parm); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif return yyresult; } #line 235 "cql.y" /* yacc.c:1906 */ int yyerror(void *locp, char *s) { return 0; } /** * putb is a utility that puts one character to the string * in current lexical token. This routine deallocates as * necessary using NMEM. */ static void putb(YYSTYPE *lval, CQL_parser cp, int c) { if (lval->len+1 >= lval->size) { char *nb = (char *) nmem_malloc(cp->nmem, (lval->size = lval->len * 2 + 20)); memcpy(nb, lval->buf, lval->len); lval->buf = nb; } if (c) lval->buf[lval->len++] = c; lval->buf[lval->len] = '\0'; } /** * yylex returns next token for Bison to be read. In this * case one of the CQL terminals are returned. */ int yylex(YYSTYPE *lval, void *vp) { CQL_parser cp = (CQL_parser) vp; int c; lval->cql = 0; lval->rel = 0; lval->len = 0; lval->size = 10; lval->buf = (char *) nmem_malloc(cp->nmem, lval->size); lval->buf[0] = '\0'; do { c = cp->getbyte(cp->client_data); if (c == 0) return 0; if (c == '\n') return 0; } while (yaz_isspace(c)); if (strchr("()=>getbyte(cp->client_data); if (c1 == '=') { putb(lval, cp, c1); return EXACT; } else cp->ungetbyte(c1, cp->client_data); } else if (c == '>') { c1 = cp->getbyte(cp->client_data); if (c1 == '=') { putb(lval, cp, c1); return GE; } else cp->ungetbyte(c1, cp->client_data); } else if (c == '<') { c1 = cp->getbyte(cp->client_data); if (c1 == '=') { putb(lval, cp, c1); return LE; } else if (c1 == '>') { putb(lval, cp, c1); return NE; } else cp->ungetbyte(c1, cp->client_data); } return c; } if (c == '"') { while ((c = cp->getbyte(cp->client_data)) != 0 && c != '"') { if (c == '\\') { putb(lval, cp, c); c = cp->getbyte(cp->client_data); if (!c) break; } putb(lval, cp, c); } putb(lval, cp, 0); return SIMPLE_STRING; } else { int relation_like = 0; while (c != 0 && !strchr(" \n()=<>/", c)) { if (c == '.') relation_like = 1; if (c == '\\') { putb(lval, cp, c); c = cp->getbyte(cp->client_data); if (!c) break; } putb(lval, cp, c); c = cp->getbyte(cp->client_data); } putb(lval, cp, 0); #if YYDEBUG printf ("got %s\n", lval->buf); #endif if (c != 0) cp->ungetbyte(c, cp->client_data); if (!cql_strcmp(lval->buf, "and")) { lval->buf = "and"; return AND; } if (!cql_strcmp(lval->buf, "or")) { lval->buf = "or"; return OR; } if (!cql_strcmp(lval->buf, "not")) { lval->buf = "not"; return NOT; } if (!cql_strcmp(lval->buf, "prox")) { lval->buf = "prox"; return PROX; } if (!cql_strcmp(lval->buf, "sortby")) { lval->buf = "sortby"; return SORTBY; } if (cp->strict) return PREFIX_NAME; if (!cql_strcmp(lval->buf, "all")) relation_like = 1; if (!cql_strcmp(lval->buf, "any")) relation_like = 1; if (!cql_strcmp(lval->buf, "adj")) relation_like = 1; if (relation_like) return PREFIX_NAME; } return SIMPLE_STRING; } int cql_parser_stream(CQL_parser cp, int (*getbyte)(void *client_data), void (*ungetbyte)(int b, void *client_data), void *client_data) { nmem_reset(cp->nmem); cp->getbyte = getbyte; cp->ungetbyte = ungetbyte; cp->client_data = client_data; cql_node_destroy(cp->top); cql_parse(cp); if (cp->top) return 0; return -1; } CQL_parser cql_parser_create(void) { CQL_parser cp = (CQL_parser) xmalloc(sizeof(*cp)); cp->top = 0; cp->getbyte = 0; cp->ungetbyte = 0; cp->client_data = 0; cp->last_error = 0; cp->last_pos = 0; cp->nmem = nmem_create(); cp->strict = 0; return cp; } void cql_parser_destroy(CQL_parser cp) { cql_node_destroy(cp->top); nmem_destroy(cp->nmem); xfree (cp); } struct cql_node *cql_parser_result(CQL_parser cp) { return cp->top; } void cql_parser_strict(CQL_parser cp, int mode) { cp->strict = mode; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ber_oid.c0000644000175000017500000000641413265142510011674 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ber_oid.c * \brief Implements BER OID encoding and decoding * * This source file implements BER encoding and decoding of * the OID type. */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" int ber_oidc(ODR o, Odr_oid *p, int max_oid_size) { int len, lenp, end; int pos, n, res, id; unsigned char octs[8]; switch (o->direction) { case ODR_DECODE: if ((res = ber_declen(o->op->bp, &len, odr_max(o))) < 1) { odr_seterror(o, OPROTO, 18); return 0; } if (len < 0) { odr_seterror(o, OPROTO, 19); return 0; } o->op->bp += res; if (len > odr_max(o)) { odr_seterror(o, OPROTO, 20); return 0; } pos = 0; while (len) { int id = 0; do { if (!len) { odr_seterror(o, OPROTO, 21); return 0; } id <<= 7; id |= *o->op->bp & 0X7F; len--; } while (*(o->op->bp++) & 0X80); if (id < 0) { odr_seterror(o, ODATA, 23); return 0; } if (pos > 0) p[pos++] = id; else { p[0] = id / 40; if (p[0] > 2) p[0] = 2; p[1] = id - p[0] * 40; pos = 2; } if (pos >= max_oid_size) { odr_seterror(o, OPROTO, 55); return 0; } } if (pos < 2 || p[0] < 0 || p[1] < 0) { odr_seterror(o, ODATA, 23); return 0; } p[pos] = -1; return 1; case ODR_ENCODE: /* we'll allow ourselves the quiet luxury of only doing encodings shorter than 127 */ lenp = odr_tell(o); if (odr_putc(o, 0) < 0) /* dummy */ return 0; if (p[0] < 0 || p[1] < 0) { odr_seterror(o, ODATA, 23); return 0; } for (pos = 1; p[pos] != -1; pos++) { n = 0; if (pos == 1) id = p[0]*40 + p[1]; else id = p[pos]; do { octs[n++] = id & 0X7F; id >>= 7; } while (id); while (n--) { unsigned char p; p = octs[n] | ((n > 0) << 7); if (odr_putc(o, p) < 0) return 0; } } end = odr_tell(o); odr_seek(o, ODR_S_SET, lenp); if (ber_enclen(o, (end - lenp) - 1, 1, 1) != 1) { odr_seterror(o, OOTHER, 52); return 0; } odr_seek(o, ODR_S_END, 0); return 1; default: odr_seterror(o, OOTHER, 22); return 0; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/session.h0000644000175000017500000001262013265142510011755 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file session.h * \brief Internal header for GFS. */ #ifndef SESSION_H #define SESSION_H #include #include #include #include #include #include #include #include "eventl.h" struct gfs_server { statserv_options_block cb; char *host; char *id; int *listen_ref; cql_transform_t cql_transform; CCL_bibset ccl_transform; void *server_node_ptr; char *directory; char *docpath; char *stylesheet; char *client_query_charset; yaz_retrieval_t retrieval; struct gfs_server *next; }; struct gfs_listen { char *id; char *address; struct gfs_listen *next; }; typedef enum { REQUEST_IDLE, /* the request is just sitting in the queue */ REQUEST_PENDING /* operation pending (b'end processing or network I/O*/ /* this list will have more elements when acc/res control is added */ } request_state; typedef struct request { request_state state; Z_GDU *gdu_request; /* Current request */ Z_APDU *apdu_request; /* Current Z39.50 request */ NMEM request_mem; /* memory handle for request */ int size_response; /* size of buffer */ int len_response; /* length of encoded data */ char *response; /* encoded data waiting for transmission */ void *clientData; struct request *next; struct request_q *q; } request; typedef struct request_q { request *head; request *tail; request *list; int num; } request_q; /* * association state. */ typedef enum { ASSOC_NEW, /* not initialized yet or HTTP session */ ASSOC_UP, /* Z39.50 session is UP */ ASSOC_DEAD /* dead. Close if input arrives */ } association_state; typedef struct association { IOCHAN client_chan; /* event-loop control */ COMSTACK client_link; /* communication handle */ ODR decode; /* decoding stream */ ODR encode; /* encoding stream */ ODR print; /* printing stream (for -a) */ char *encode_buffer; /* temporary buffer for encoded data */ int encoded_len; /* length of encoded data */ char *input_buffer; /* input buffer (allocated by comstack) */ int input_buffer_len; /* length (size) of buffer */ int input_apdu_len; /* length of current incoming APDU */ oid_proto proto; /* protocol (PROTO_Z3950/PROTO_SR) */ void *backend; /* backend handle */ request_q incoming; /* Q of incoming PDUs */ request_q outgoing; /* Q of outgoing data buffers (enc. PDUs) */ association_state state; /* session parameters */ int preferredMessageSize; int maximumRecordSize; int version; /* highest version-bit set (2 or 3) */ int cs_get_mask; int cs_put_mask; int cs_accept_mask; struct bend_initrequest *init; statserv_options_block *last_control; struct gfs_server *server; } association; association *create_association(IOCHAN channel, COMSTACK link, const char *apdufile); void destroy_association(association *h); void ir_session(IOCHAN h, int event); void request_enq(request_q *q, request *r); request *request_head(request_q *q); request *request_deq(request_q *q); request *request_deq_x(request_q *q, request *r); void request_initq(request_q *q); void request_delq(request_q *q); request *request_get(request_q *q); void request_release(request *r); int control_association(association *assoc, const char *host, int force); int ir_read(IOCHAN h, int event); #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/marc_read_xml.c0000644000175000017500000003312413265142510013064 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file marc_read_xml.c * \brief Implements reading of MARC as XML */ #if HAVE_CONFIG_H #include #endif #ifdef WIN32 #include #endif #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #endif #if YAZ_HAVE_XML2 static int yaz_marc_read_xml_subfields(yaz_marc_t mt, const xmlNode *ptr) { NMEM nmem = yaz_marc_get_nmem(mt); for (; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE) { if (!strcmp((const char *) ptr->name, "subfield")) { size_t ctrl_data_len = 0; char *ctrl_data_buf = 0; const xmlNode *p = 0, *ptr_code = 0; struct _xmlAttr *attr; for (attr = ptr->properties; attr; attr = attr->next) if (!strcmp((const char *)attr->name, "code")) ptr_code = attr->children; else { yaz_marc_cprintf( mt, "Bad attribute '%.80s' for 'subfield'", attr->name); return -1; } if (!ptr_code) { yaz_marc_cprintf( mt, "Missing attribute 'code' for 'subfield'" ); return -1; } if (ptr_code->type == XML_TEXT_NODE) { ctrl_data_len = strlen((const char *)ptr_code->content); } else { yaz_marc_cprintf( mt, "Missing value for 'code' in 'subfield'" ); return -1; } for (p = ptr->children; p ; p = p->next) if (p->type == XML_TEXT_NODE) ctrl_data_len += strlen((const char *)p->content); ctrl_data_buf = (char *) nmem_malloc(nmem, ctrl_data_len+1); strcpy(ctrl_data_buf, (const char *)ptr_code->content); for (p = ptr->children; p ; p = p->next) if (p->type == XML_TEXT_NODE) strcat(ctrl_data_buf, (const char *)p->content); yaz_marc_add_subfield(mt, ctrl_data_buf, ctrl_data_len); } else { yaz_marc_cprintf( mt, "Expected element 'subfield', got '%.80s'", ptr->name); return -1; } } } return 0; } static char *element_attribute_value_extract(const xmlNode *ptr, const char *attribute_name, NMEM nmem) { const char *name = (const char *) ptr->name; size_t length = strlen(name); xmlAttr *attr; if (length > 1 ) return nmem_strdup(nmem, name+1); // TODO Extract from attribute where matches attribute_name for (attr = ptr->properties; attr; attr = attr->next) if (!strcmp((const char *)attr->name, attribute_name)) return nmem_text_node_cdata(attr->children, nmem); return 0; } static void get_indicator_value(yaz_marc_t mt, const xmlNode *ptr, char *res, int turbo, int indicator_length) { int i; res[0] = '\0'; for (i = 1; i <= indicator_length; i++) { struct _xmlAttr *attr; char attrname[12]; sprintf(attrname, "%s%d", turbo ? "i" : "ind", i); for (attr = ptr->properties; attr; attr = attr->next) { if (!strcmp((const char *)attr->name, attrname) && attr->children && attr->children->type == XML_TEXT_NODE && attr->children->content && strlen((const char *) attr->children->content) < 5) { strcat(res, (const char *)attr->children->content); break; } } if (!attr) strcat(res, " "); } } static int yaz_marc_read_turbo_xml_subfields(yaz_marc_t mt, const xmlNode *ptr) { for (; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE) { if (!strncmp((const char *) ptr->name, "s", 1)) { NMEM nmem = yaz_marc_get_nmem(mt); xmlNode *p; size_t ctrl_data_len = 0; char *ctrl_data_buf = 0; const char *tag_value = element_attribute_value_extract(ptr, "code", nmem); if (!tag_value) { yaz_marc_cprintf( mt, "Missing 'code' value for 'subfield'" ); return -1; } ctrl_data_len = strlen((const char *) tag_value); // Extract (length) from CDATA for (p = ptr->children; p ; p = p->next) if (p->type == XML_TEXT_NODE) ctrl_data_len += strlen((const char *)p->content); // Allocate memory for code value (1 character (can be multi-byte) and data ctrl_data_buf = (char *) nmem_malloc(nmem, ctrl_data_len+1); // Build a string with "" strcpy(ctrl_data_buf, (const char *) tag_value); for (p = ptr->children; p ; p = p->next) if (p->type == XML_TEXT_NODE) strcat(ctrl_data_buf, (const char *)p->content); yaz_marc_add_subfield(mt, ctrl_data_buf, ctrl_data_len); } else { yaz_marc_cprintf( mt, "Expected element 'subfield', got '%.80s'", ptr->name); return -1; } } } return 0; } static int yaz_marc_read_xml_leader(yaz_marc_t mt, const xmlNode **ptr_p, int *indicator_length) { int identifier_length; int base_address; int length_data_entry; int length_starting; int length_implementation; const char *leader = 0; const xmlNode *ptr = *ptr_p; for(; ptr; ptr = ptr->next) if (ptr->type == XML_ELEMENT_NODE) { if ( !strcmp( (const char *) ptr->name, "leader") || (!strncmp((const char *) ptr->name, "l", 1) )) { xmlNode *p = ptr->children; for(; p; p = p->next) if (p->type == XML_TEXT_NODE) leader = (const char *) p->content; ptr = ptr->next; } break; } if (!leader) { yaz_marc_cprintf(mt, "Missing leader. Inserting fake leader"); leader = "00000nam a22000000a 4500"; } if (strlen(leader) != 24) { yaz_marc_cprintf(mt, "Bad length %d of leader data." " Must have length of 24 characters", strlen(leader)); return -1; } yaz_marc_set_leader(mt, leader, indicator_length, &identifier_length, &base_address, &length_data_entry, &length_starting, &length_implementation); *ptr_p = ptr; return 0; } static int yaz_marc_read_xml_fields(yaz_marc_t mt, const xmlNode *ptr, int indicator_length) { for(; ptr; ptr = ptr->next) if (ptr->type == XML_ELEMENT_NODE) { if (!strcmp( (const char *) ptr->name, "controlfield")) { const xmlNode *ptr_tag = 0; struct _xmlAttr *attr; for (attr = ptr->properties; attr; attr = attr->next) if (!strcmp((const char *)attr->name, "tag")) ptr_tag = attr->children; else { yaz_marc_cprintf( mt, "Bad attribute '%.80s' for 'controlfield'", attr->name); return -1; } if (!ptr_tag) { yaz_marc_cprintf( mt, "Missing attribute 'tag' for 'controlfield'" ); return -1; } yaz_marc_add_controlfield_xml(mt, ptr_tag, ptr->children); } else if (!strcmp((const char *) ptr->name, "datafield")) { char indstr[48]; const xmlNode *ptr_tag = 0; struct _xmlAttr *attr; get_indicator_value(mt, ptr, indstr, 0, indicator_length); for (attr = ptr->properties; attr; attr = attr->next) if (!strcmp((const char *)attr->name, "tag")) ptr_tag = attr->children; else if (!strncmp((const char *)attr->name, "ind", 3)) ; else { yaz_marc_cprintf( mt, "Bad attribute '%.80s' for 'datafield'", attr->name); } if (!ptr_tag) { yaz_marc_cprintf( mt, "Missing attribute 'tag' for 'datafield'" ); return -1; } yaz_marc_add_datafield_xml(mt, ptr_tag, indstr, indicator_length); if (yaz_marc_read_xml_subfields(mt, ptr->children)) return -1; } else { yaz_marc_cprintf(mt, "Expected element controlfield or datafield," " got %.80s", ptr->name); return -1; } } return 0; } static int yaz_marc_read_turbo_xml_fields(yaz_marc_t mt, const xmlNode *ptr, int indicator_length) { for(; ptr; ptr = ptr->next) if (ptr->type == XML_ELEMENT_NODE) { if (!strncmp( (const char *) ptr->name, "c", 1)) { NMEM nmem = yaz_marc_get_nmem(mt); char *tag_value = element_attribute_value_extract(ptr, "tag", nmem); if (!tag_value) { yaz_marc_cprintf( mt, "Missing attribute 'tag' for 'controlfield'" ); return -1; } yaz_marc_add_controlfield_xml2(mt, tag_value, ptr->children); } else if (!strncmp((const char *) ptr->name, "d",1)) { struct _xmlAttr *attr; NMEM nmem = yaz_marc_get_nmem(mt); char *tag_value; char *indstr = nmem_malloc(nmem, indicator_length * 5); tag_value = element_attribute_value_extract(ptr, "tag", nmem); if (!tag_value) { yaz_marc_cprintf( mt, "Missing attribute 'tag' for 'datafield'" ); return -1; } get_indicator_value(mt, ptr, indstr, 1, indicator_length); for (attr = ptr->properties; attr; attr = attr->next) if (strlen((const char *)attr->name) == 2 && attr->name[0] == 'i') ; else { yaz_marc_cprintf( mt, "Bad attribute '%.80s' for 'd'", attr->name); } yaz_marc_add_datafield_xml2(mt, tag_value, indstr); if (yaz_marc_read_turbo_xml_subfields(mt, ptr->children /*, indstr */)) return -1; } else { yaz_marc_cprintf(mt, "Expected element controlfield or datafield," " got %.80s", ptr->name); return -1; } } return 0; } #endif #if YAZ_HAVE_XML2 int yaz_marc_read_xml(yaz_marc_t mt, const xmlNode *ptr) { int indicator_length = 0; int format = 0; yaz_marc_reset(mt); for(; ptr; ptr = ptr->next) if (ptr->type == XML_ELEMENT_NODE) { if (!strcmp((const char *) ptr->name, "record")) { format = YAZ_MARC_MARCXML; break; } else if (!strcmp((const char *) ptr->name, "r")) { format = YAZ_MARC_TURBOMARC; break; } else { yaz_marc_cprintf( mt, "Unknown element '%.80s' in MARC XML reader", ptr->name); return -1; } } if (!ptr) { yaz_marc_cprintf(mt, "Missing element 'record' in MARC XML record"); return -1; } /* ptr points to record node now */ ptr = ptr->children; if (yaz_marc_read_xml_leader(mt, &ptr, &indicator_length)) return -1; switch (format) { case YAZ_MARC_MARCXML: return yaz_marc_read_xml_fields(mt, ptr, indicator_length); case YAZ_MARC_TURBOMARC: return yaz_marc_read_turbo_xml_fields(mt, ptr, indicator_length); } return -1; } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/eventl.h0000644000175000017500000000642013265142510011570 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file eventl.h * \brief Definitions for event loop handling for GFS. * * This "private" header defines various functions for the * main event loop in GFS. */ #ifndef EVENTL_H #define EVENTL_H #include struct iochan; typedef void (*IOC_CALLBACK)(struct iochan *i, int event); typedef struct iochan { int fd; int flags; #define EVENT_INPUT 0x01 #define EVENT_OUTPUT 0x02 #define EVENT_EXCEPT 0x04 #define EVENT_TIMEOUT 0x08 int force_event; IOC_CALLBACK fun; void *data; int destroyed; time_t last_event; time_t max_idle; struct iochan *next; int chan_id; /* listening port (0 if none ) */ } *IOCHAN; #define iochan_destroy(i) (void)((i)->destroyed = 1) #define iochan_getfd(i) ((i)->fd) #define iochan_setfd(i, f) ((i)->fd = (f)) #define iochan_getdata(i) ((i)->data) #define iochan_setdata(i, d) ((i)->data = d) #define iochan_getflags(i) ((i)->flags) #define iochan_setflags(i, d) ((i)->flags = d) #define iochan_setflag(i, d) ((i)->flags |= d) #define iochan_clearflag(i, d) ((i)->flags &= ~(d)) #define iochan_getflag(i, d) ((i)->flags & d ? 1 : 0) #define iochan_getfun(i) ((i)->fun) #define iochan_setfun(i, d) ((i)->fun = d) #define iochan_setevent(i, e) ((i)->force_event = (e)) #define iochan_getnext(i) ((i)->next) #define iochan_settimeout(i, t) ((i)->max_idle = (t), (i)->last_event = time(0)) IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags, int port); int iochan_is_alive(IOCHAN chan); int iochan_event_loop(IOCHAN *iochans, int *watch_sig); void statserv_remove (IOCHAN pIOChannel); #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/atoin.c0000644000175000017500000000151713265142510011402 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file atoin.c * \brief Implements atoi_n function. */ #if HAVE_CONFIG_H #include #endif #include #include #include int atoi_n(const char *buf, int len) { int val = 0; while (--len >= 0) { if (yaz_isdigit(*buf)) val = val*10 + (*buf - '0'); buf++; } return val; } int atoi_n_check(const char *buf, int size, int *val) { int i; for (i = 0; i < size; i++) if (!yaz_isdigit(buf[i])) return 0; *val = atoi_n(buf, size); return 1; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/match_glob.c0000644000175000017500000000251413570007121012362 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief Glob expression match */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include int yaz_match_glob(const char *glob, const char *text) { return yaz_match_glob2(glob, text, 0); } int yaz_match_glob2(const char *glob, const char *text, int case_insensitive) { while (1) { if (*glob == '\0') return *text == '\0'; if (*glob == '*') { do { if (yaz_match_glob2(glob+1, text, case_insensitive)) return 1; } while (*text++); return 0; } if (!*text) return 0; if (*glob != '?') { if (case_insensitive) { if (tolower(*glob) != tolower(*text)) return 0; } else if (*glob != *text) return 0; } glob++; text++; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-charneg.c0000644000175000017500000002047113273126163012153 00000000000000/** \file z-charneg.c \brief ASN.1 Module NegotiationRecordDefinition-charSetandLanguageNegotiation-3 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_CharSetandLanguageNegotiation(ODR o, Z_CharSetandLanguageNegotiation **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_CharSetandLanguageNegotiation_proposal, (Odr_fun) z_OriginProposal, "proposal"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_CharSetandLanguageNegotiation_response, (Odr_fun) z_TargetResponse, "response"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_OriginProposal_0(ODR o, Z_OriginProposal_0 **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_OriginProposal_0_iso2022, (Odr_fun) z_Iso2022, "iso2022"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_OriginProposal_0_iso10646, (Odr_fun) z_Iso10646, "iso10646"}, {ODR_EXPLICIT, ODR_CONTEXT, 3, Z_OriginProposal_0_private, (Odr_fun) z_PrivateCharacterSet, "zprivate"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_OriginProposal(ODR o, Z_OriginProposal **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) z_OriginProposal_0, &(*p)->proposedCharSets, &(*p)->num_proposedCharSets, "proposedCharSets") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_LanguageCode, &(*p)->proposedlanguages, &(*p)->num_proposedlanguages, "proposedlanguages") || odr_ok(o)) && odr_implicit_tag(o, odr_bool, &(*p)->recordsInSelectedCharSets, ODR_CONTEXT, 3, 1, "recordsInSelectedCharSets") && odr_sequence_end(o); } int z_TargetResponse(ODR o, Z_TargetResponse **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_TargetResponse_iso2022, (Odr_fun) z_Iso2022, "iso2022"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_TargetResponse_iso10646, (Odr_fun) z_Iso10646, "iso10646"}, {ODR_EXPLICIT, ODR_CONTEXT, 3, Z_TargetResponse_private, (Odr_fun) z_PrivateCharacterSet, "zprivate"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_TargetResponse_none, (Odr_fun) odr_null, "none"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "selectedCharSets") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_implicit_tag(o, z_LanguageCode, &(*p)->selectedLanguage, ODR_CONTEXT, 2, 1, "selectedLanguage") && odr_implicit_tag(o, odr_bool, &(*p)->recordsInSelectedCharSets, ODR_CONTEXT, 3, 1, "recordsInSelectedCharSets") && odr_sequence_end(o); } int z_PrivateCharacterSetViaOid(ODR o, Z_PrivateCharacterSetViaOid **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PrivateCharacterSet(ODR o, Z_PrivateCharacterSet **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PrivateCharacterSet_viaOid, (Odr_fun) z_PrivateCharacterSetViaOid, "viaOid"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PrivateCharacterSet_externallySpecified, (Odr_fun) z_External, "externallySpecified"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_PrivateCharacterSet_previouslyAgreedUpon, (Odr_fun) odr_null, "previouslyAgreedUpon"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Iso2022OriginProposal(ODR o, Z_Iso2022OriginProposal **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_Environment, &(*p)->proposedEnvironment, ODR_CONTEXT, 0, 1, "proposedEnvironment") && odr_implicit_settag(o, ODR_CONTEXT, 1) && odr_sequence_of(o, (Odr_fun) odr_integer, &(*p)->proposedSets, &(*p)->num_proposedSets, "proposedSets") && odr_implicit_settag(o, ODR_CONTEXT, 2) && odr_sequence_of(o, (Odr_fun) z_InitialSet, &(*p)->proposedInitialSets, &(*p)->num_proposedInitialSets, "proposedInitialSets") && odr_implicit_tag(o, z_LeftAndRight, &(*p)->proposedLeftAndRight, ODR_CONTEXT, 3, 0, "proposedLeftAndRight") && odr_sequence_end(o); } int z_Iso2022TargetResponse(ODR o, Z_Iso2022TargetResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_Environment, &(*p)->selectedEnvironment, ODR_CONTEXT, 0, 0, "selectedEnvironment") && odr_implicit_settag(o, ODR_CONTEXT, 1) && odr_sequence_of(o, (Odr_fun) odr_integer, &(*p)->selectedSets, &(*p)->num_selectedSets, "selectedSets") && odr_implicit_tag(o, z_InitialSet, &(*p)->selectedinitialSet, ODR_CONTEXT, 2, 0, "selectedinitialSet") && odr_implicit_tag(o, z_LeftAndRight, &(*p)->selectedLeftAndRight, ODR_CONTEXT, 3, 0, "selectedLeftAndRight") && odr_sequence_end(o); } int z_Iso2022(ODR o, Z_Iso2022 **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Iso2022_originProposal, (Odr_fun) z_Iso2022OriginProposal, "originProposal"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Iso2022_targetResponse, (Odr_fun) z_Iso2022TargetResponse, "targetResponse"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Environment(ODR o, Z_Environment **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Environment_sevenBit, (Odr_fun) odr_null, "sevenBit"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Environment_eightBit, (Odr_fun) odr_null, "eightBit"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_InitialSet(ODR o, Z_InitialSet **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->g0, ODR_CONTEXT, 0, 1, "g0") && odr_implicit_tag(o, odr_integer, &(*p)->g1, ODR_CONTEXT, 1, 1, "g1") && odr_implicit_tag(o, odr_integer, &(*p)->g2, ODR_CONTEXT, 2, 1, "g2") && odr_implicit_tag(o, odr_integer, &(*p)->g3, ODR_CONTEXT, 3, 1, "g3") && odr_implicit_tag(o, odr_integer, &(*p)->c0, ODR_CONTEXT, 4, 0, "c0") && odr_implicit_tag(o, odr_integer, &(*p)->c1, ODR_CONTEXT, 5, 1, "c1") && odr_sequence_end(o); } int z_LeftAndRight(ODR o, Z_LeftAndRight **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->gLeft, ODR_CONTEXT, 3, 0, "gLeft") && odr_implicit_tag(o, odr_integer, &(*p)->gRight, ODR_CONTEXT, 4, 1, "gRight") && odr_sequence_end(o); } int z_Iso10646(ODR o, Z_Iso10646 **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->collections, ODR_CONTEXT, 1, 1, "collections") && odr_implicit_tag(o, odr_oid, &(*p)->encodingLevel, ODR_CONTEXT, 2, 0, "encodingLevel") && odr_sequence_end(o); } yaz-5.28.0/src/thread_id.c0000644000175000017500000000172213265142510012211 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file thread_id.c * \brief Returns printable thread ID * */ #if HAVE_CONFIG_H #include #endif #include #include #ifdef WIN32 #include #endif #if HAVE_SYS_TIME_H #include #endif #if YAZ_POSIX_THREADS #include #endif #include void yaz_thread_id_cstr(char *buf, size_t buf_max) { #ifdef WIN32 *buf = '\0'; #elif YAZ_POSIX_THREADS pthread_t t = pthread_self(); size_t i; *buf = '\0'; for (i = 0; i < sizeof(t); i++) { if (strlen(buf) >= buf_max-2) break; sprintf(buf + strlen(buf), "%02x", ((const unsigned char *) &t)[i]); } #else *buf = '\0'; #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/requestq.c0000644000175000017500000000352313265142510012140 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file requestq.c * \brief Implements Simple queue management for GFS. * * We also use the request-freelist to store encoding buffers, rather than * freeing and xmalloc'ing them on each cycle. */ #if HAVE_CONFIG_H #include #endif #include #include #include "session.h" void request_enq(request_q *q, request *r) { if (q->tail) q->tail->next = r; else q->head = r; q->tail = r; q->num++; } request *request_head(request_q *q) { return q->head; } request *request_deq(request_q *q) { request *r = q->head; if (!r) return 0; q->head = q->head->next; if (!q->head) q->tail = 0; q->num--; return r; } void request_initq(request_q *q) { q->head = q->tail = q->list = 0; q->num = 0; } void request_delq(request_q *q) { request *r1, *r = q->list; while (r) { xfree (r->response); r1 = r; r = r->next; xfree (r1); } } request *request_get(request_q *q) { request *r = q->list; if (r) q->list = r->next; else { if (!(r = (request *)xmalloc(sizeof(*r)))) abort(); r->response = 0; r->size_response = 0; } r->q = q; r->gdu_request = 0; r->apdu_request = 0; r->request_mem = 0; r->len_response = 0; r->clientData = 0; r->state = REQUEST_IDLE; r->next = 0; return r; } void request_release(request *r) { request_q *q = r->q; if (r->request_mem) nmem_destroy(r->request_mem); r->next = q->list; q->list = r; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/json.c0000644000175000017500000004035513265142510011244 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file json.c * \brief JSON encoding/decoding */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include struct json_subst_info { int idx; struct json_subst_info *next; struct json_node *node; }; struct json_parser_s { const char *buf; const char *cp; const char *err_msg; int parse_level; int max_level; struct json_subst_info *subst; }; json_parser_t json_parser_create(void) { json_parser_t p = (json_parser_t) xmalloc(sizeof(*p)); p->buf = 0; p->cp = 0; p->subst = 0; return p; } void json_parser_subst(json_parser_t p, int idx, struct json_node *n) { struct json_subst_info **sb = &p->subst; for (; *sb; sb = &(*sb)->next) if ((*sb)->idx == idx) { (*sb)->node = n; return; } *sb = xmalloc(sizeof(**sb)); (*sb)->next = 0; (*sb)->node = n; (*sb)->idx = idx; } void json_parser_destroy(json_parser_t p) { struct json_subst_info *sb = p->subst; while (sb) { struct json_subst_info *sb_next = sb->next; xfree(sb); sb = sb_next; } xfree(p); } static int look_ch(json_parser_t p) { while (*p->cp && strchr(" \t\r\n", *p->cp)) (p->cp)++; return *p->cp; } static void move_ch(json_parser_t p) { if (*p->cp) (p->cp)++; } static struct json_node *json_new_node(json_parser_t p, enum json_node_type type) { struct json_node *n = (struct json_node *) xmalloc(sizeof(*n)); n->type = type; n->u.link[0] = n->u.link[1] = 0; return n; } void json_remove_node(struct json_node *n) { if (!n) return; switch (n->type) { case json_node_object: case json_node_array: case json_node_list: case json_node_pair: json_remove_node(n->u.link[0]); json_remove_node(n->u.link[1]); break; case json_node_string: xfree(n->u.string); break; case json_node_number: case json_node_true: case json_node_false: case json_node_null: break; } xfree(n); } static struct json_node *json_parse_object(json_parser_t p); static struct json_node *json_parse_array(json_parser_t p); static int json_one_char(const char **p, char *out) { if (**p == '\\' && p[0][1]) { (*p)++; switch(**p) { case '"': *out = '"'; break; case '\\': *out = '\\'; break; case '/': *out = '/'; break; case 'b': *out = '\b'; break; case 'f': *out = '\f'; break; case 'n': *out = '\n'; break; case 'r': *out = '\r'; break; case 't': *out = '\t'; break; case 'u': if (p[0][1] > 0 && p[0][2] > 0 && p[0][3] > 0 && p[0][4] > 0) { unsigned code; char *outp = out; int error; size_t outbytesleft = 6; int no_read = 0; sscanf(*p + 1, "%4x%n", &code, &no_read); if (no_read != 4) return 0; if (!yaz_write_UTF8_char(code, &outp, &outbytesleft, &error)) { *p += 5; return outp - out; } } default: return 0; } (*p)++; return 1; } else if (**p > 0 && **p <= 31) { return 0; } else { *out = **p; (*p)++; return 1; } } static struct json_node *json_parse_string(json_parser_t p) { struct json_node *n; const char *cp; char *dst; int l = 0; if (look_ch(p) != '\"') { p->err_msg = "string expected"; return 0; } move_ch(p); cp = p->cp; while (*cp && *cp != '"') { char out[6]; int r = json_one_char(&cp, out); if (r == 0) { p->err_msg = "invalid character"; return 0; } l += r; } if (!*cp) { p->err_msg = "missing \""; return 0; } n = json_new_node(p, json_node_string); dst = n->u.string = (char *) xmalloc(l + 1); cp = p->cp; while (*cp && *cp != '"') { char out[6]; l = json_one_char(&cp, out); memcpy(dst, out, l); dst += l; } *dst = '\0'; p->cp = cp+1; return n; } static struct json_node *json_parse_number(json_parser_t p) { struct json_node *n; char *endptr; const char *cp; double v; cp = p->cp; if (*cp == '-') cp++; if (*cp == '0') cp++; else if (*cp >= '1' && *cp <= '9') { cp++; while (*cp >= '0' && *cp <= '9') cp++; } else { p->err_msg = "bad number"; return 0; } if (*cp == '.') { cp++; if (*cp >= '0' && *cp <= '9') { while (*cp >= '0' && *cp <= '9') cp++; } else { p->err_msg = "bad number"; return 0; } } if (*cp == 'e' || *cp == 'E') { cp++; if (*cp == '+' || *cp == '-') cp++; if (*cp >= '0' && *cp <= '9') { while (*cp >= '0' && *cp <= '9') cp++; } else { p->err_msg = "bad number"; return 0; } } v = strtod(p->cp, &endptr); if (endptr == p->cp) { p->err_msg = "bad number"; return 0; } if (endptr != cp) { p->err_msg = "bad number"; return 0; } p->cp = endptr; n = json_new_node(p, json_node_number); n->u.number = v; return n; } static struct json_node *json_parse_value(json_parser_t p) { int c = look_ch(p); if (c == '\"') return json_parse_string(p); else if (strchr("0123456789-", c)) return json_parse_number(p); else if (c == '{') return json_parse_object(p); else if (c == '[') return json_parse_array(p); else if (c == '%') { struct json_subst_info *sb; int idx = 0; p->cp++; c = *p->cp; while (c >= '0' && c <= '9') { idx = idx*10 + (c - '0'); p->cp++; c = *p->cp; } for (sb = p->subst; sb; sb = sb->next) if (sb->idx == idx) return sb->node; } else if (c == 0) { return 0; } else { char tok[8]; int i = 0; while (c >= 'a' && c <= 'z' && i < 7) { tok[i++] = c; p->cp++; c = *p->cp; } tok[i] = 0; if (!strcmp(tok, "true")) return json_new_node(p, json_node_true); else if (!strcmp(tok, "false")) return json_new_node(p, json_node_false); else if (!strcmp(tok, "null")) return json_new_node(p, json_node_null); } p->err_msg = "bad token"; return 0; } static struct json_node *json_parse_elements(json_parser_t p) { struct json_node *n1 = json_parse_value(p); struct json_node *m0, *m1; if (!n1) return 0; m0 = m1 = json_new_node(p, json_node_list); m1->u.link[0] = n1; while (look_ch(p) == ',') { struct json_node *n2, *m2; move_ch(p); n2 = json_parse_value(p); if (!n2) { json_remove_node(m0); return 0; } m2 = json_new_node(p, json_node_list); m2->u.link[0] = n2; m1->u.link[1] = m2; m1 = m2; } return m0; } static struct json_node *json_parse_array(json_parser_t p) { struct json_node *n; if (look_ch(p) != '[') { p->err_msg = "expecting ["; return 0; } move_ch(p); if (p->parse_level >= p->max_level) { p->err_msg = "Too much nesting"; return 0; } p->parse_level++; n = json_new_node(p, json_node_array); if (look_ch(p) != ']') n->u.link[0] = json_parse_elements(p); p->parse_level--; if (look_ch(p) != ']') { if (!p->err_msg) p->err_msg = "expecting ]"; json_remove_node(n); return 0; } move_ch(p); return n; } static struct json_node *json_parse_pair(json_parser_t p) { struct json_node *s = json_parse_string(p); struct json_node *v, *n; if (!s) return 0; if (look_ch(p) != ':') { p->err_msg = "missing :"; json_remove_node(s); return 0; } move_ch(p); v = json_parse_value(p); if (!v) { json_remove_node(s); return 0; } n = json_new_node(p, json_node_pair); n->u.link[0] = s; n->u.link[1] = v; return n; } static struct json_node *json_parse_members(json_parser_t p) { struct json_node *n1 = json_parse_pair(p); struct json_node *m0, *m1; if (!n1) return 0; m0 = m1 = json_new_node(p, json_node_list); m1->u.link[0] = n1; while (look_ch(p) == ',') { struct json_node *n2, *m2; move_ch(p); n2 = json_parse_pair(p); if (!n2) { json_remove_node(m0); return 0; } m2 = json_new_node(p, json_node_list); m2->u.link[0] = n2; m1->u.link[1] = m2; m1 = m2; } return m0; } static struct json_node *json_parse_object(json_parser_t p) { struct json_node *n; if (look_ch(p) != '{') { p->err_msg = "{ expected"; return 0; } move_ch(p); n = json_new_node(p, json_node_object); if (look_ch(p) != '}') { struct json_node *m; if (p->parse_level >= p->max_level) { p->err_msg = "Too much nesting"; json_remove_node(n); return 0; } p->parse_level++; m = json_parse_members(p); p->parse_level--; if (!m) { json_remove_node(n); return 0; } n->u.link[0] = m; } if (look_ch(p) != '}') { p->err_msg = "Missing }"; json_remove_node(n); return 0; } move_ch(p); return n; } struct json_node *json_parser_parse(json_parser_t p, const char *json_str) { int c; struct json_node *n; p->buf = json_str; p->cp = p->buf; p->err_msg = 0; p->parse_level = 0; p->max_level = 1000; n = json_parse_value(p); if (!n) return 0; if (p->err_msg) { json_remove_node(n); return 0; } c = look_ch(p); if (c != 0) { p->err_msg = "extra characters"; json_remove_node(n); return 0; } return n; } struct json_node *json_parse2(const char *json_str, const char **errmsg, size_t *pos) { json_parser_t p = json_parser_create(); struct json_node *n = 0; if (!p) { if (errmsg) *errmsg = "could not create parser"; } else { n = json_parser_parse(p, json_str); if (!n && errmsg) *errmsg = json_parser_get_errmsg(p); if (pos) *pos = json_parser_get_position(p); json_parser_destroy(p); } return n; } struct json_node *json_parse(const char *json_str, const char **errmsg) { return json_parse2(json_str, errmsg, 0); } static void json_indent(WRBUF result, int indent) { size_t l = wrbuf_len(result); if (l == 0 || wrbuf_buf(result)[l-1] == '\n') { int i; for (i = 0; i < indent; i++) wrbuf_putc(result, ' '); } } static void json_write_wrbuf_r(struct json_node *node, WRBUF result, int indent) { int sub_indent = -1; if (indent >= 0) sub_indent = indent + 1; switch (node->type) { case json_node_object: json_indent(result, indent); wrbuf_puts(result, "{"); if (indent >= 0) { wrbuf_puts(result, "\n"); json_indent(result, sub_indent); } if (node->u.link[0]) json_write_wrbuf_r(node->u.link[0], result, sub_indent); if (indent >= 0) { wrbuf_puts(result, "\n"); json_indent(result, indent); } wrbuf_puts(result, "}"); break; case json_node_array: json_indent(result, indent); wrbuf_puts(result, "["); if (indent >= 0) { wrbuf_puts(result, "\n"); json_indent(result, sub_indent); } if (node->u.link[0]) { json_write_wrbuf_r(node->u.link[0], result, sub_indent); } if (indent >= 0) { wrbuf_puts(result, "\n"); json_indent(result, indent); } wrbuf_puts(result, "]"); break; case json_node_list: json_write_wrbuf_r(node->u.link[0], result, indent); if (node->u.link[1]) { wrbuf_puts(result, ","); if (indent >= 0) wrbuf_puts(result, " "); json_write_wrbuf_r(node->u.link[1], result, indent); } break; case json_node_pair: json_write_wrbuf_r(node->u.link[0], result, indent); wrbuf_puts(result, ":"); if (indent >= 0) wrbuf_puts(result, " "); json_write_wrbuf_r(node->u.link[1], result, indent); break; case json_node_string: wrbuf_puts(result, "\""); wrbuf_json_puts(result, node->u.string); wrbuf_puts(result, "\""); break; case json_node_number: wrbuf_printf(result, "%lg", node->u.number); break; case json_node_true: wrbuf_puts(result, "true"); break; case json_node_false: wrbuf_puts(result, "false"); break; case json_node_null: wrbuf_puts(result, "null"); break; } } void json_write_wrbuf_pretty(struct json_node *node, WRBUF result) { json_write_wrbuf_r(node, result, 1); } void json_write_wrbuf(struct json_node *node, WRBUF result) { json_write_wrbuf_r(node, result, -1); } static struct json_node **json_get_objectp(struct json_node *n, const char *name) { if (n && n->type == json_node_object) { for (n = n->u.link[0]; n; n = n->u.link[1]) { struct json_node *c = n->u.link[0]; if (c && c->type == json_node_pair && c->u.link[0] && c->u.link[0]->type == json_node_string) if (!strcmp(name, c->u.link[0]->u.string)) return &c->u.link[1]; } } return 0; } struct json_node *json_get_object(struct json_node *n, const char *name) { struct json_node **np = json_get_objectp(n, name); if (np) return *np; return 0; } struct json_node *json_detach_object(struct json_node *n, const char *name) { struct json_node **np = json_get_objectp(n, name); if (np) { struct json_node *n = *np; *np = 0; return n; } return 0; } struct json_node *json_get_elem(struct json_node *n, int idx) { if (n && n->type == json_node_array) { for (n = n->u.link[0]; n; n = n->u.link[1]) { if (--idx < 0) return n->u.link[0]; } } return 0; } int json_count_children(struct json_node *n) { int i = 0; if (n && (n->type == json_node_array || n->type == json_node_object)) { for (n = n->u.link[0]; n; n = n->u.link[1]) i++; } return i; } int json_append_array(struct json_node *dst, struct json_node *src) { if (dst && src && dst->type == json_node_array && src->type == json_node_array) { struct json_node **np = &dst->u.link[0]; while (*np) np = &(*np)->u.link[1]; *np = src->u.link[0]; src->u.link[0] = 0; json_remove_node(src); return 0; } return -1; } const char *json_parser_get_errmsg(json_parser_t p) { return p->err_msg; } size_t json_parser_get_position(json_parser_t p) { return p->cp - p->buf; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/charconv.tcl0000644000175000017500000002715713265142510012443 00000000000000#!/usr/bin/tclsh proc usage {} { puts {charconv.tcl: [-p prefix] [-s split] [-o ofile] file ... } exit 1 } proc preamble_trie {ofilehandle ifiles ofile} { set f $ofilehandle set totype {unsigned } puts $f "/** \\file $ofile" puts $f " \\brief Character conversion, generated from [lindex $ifiles 0]" puts $f "" puts $f " Generated automatically by charconv.tcl" puts $f "*/" puts $f "\#include " puts $f "\#if HAVE_CONFIG_H" puts $f "\#include " puts $f "\#endif" puts $f " struct yaz_iconv_trie_flat { char from\[6\]; unsigned combining : 1; $totype to : 24; }; struct yaz_iconv_trie_dir { int ptr : 15; unsigned combining : 1; $totype to : 24; }; struct yaz_iconv_trie { struct yaz_iconv_trie_flat *flat; struct yaz_iconv_trie_dir *dir; }; " puts $f { static unsigned long lookup(struct yaz_iconv_trie **ptrs, int ptr, unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { struct yaz_iconv_trie *t = ptrs[ptr-1]; if (inbytesleft < 1) return 0; if (t->dir) { size_t ch = (inp[0] & mask) + boffset; unsigned long code; if (t->dir[ch].ptr) { code = lookup(ptrs, t->dir[ch].ptr, inp+1, inbytesleft-1, no_read, combining, mask, boffset); if (code) { (*no_read)++; return code; } } if (t->dir[ch].to) { code = t->dir[ch].to; *combining = t->dir[ch].combining; *no_read = 1; return code; } } else { struct yaz_iconv_trie_flat *flat = t->flat; while (flat->to) { size_t len = strlen(flat->from); if (len <= inbytesleft) { size_t i; for (i = 0; i < len; i++) { if (((unsigned char *) flat->from)[i] != (inp[i] & mask) + boffset) break; } if (i == len) { *no_read = len; *combining = flat->combining; return flat->to; } } flat++; } } return 0; } } } proc reset_trie {} { global trie foreach x [array names trie] { unset trie($x) } set trie(no) 1 set trie(size) 0 set trie(max) 0 set trie(split) 50 set trie(prefix) {} } proc ins_trie {from to combining codename} { global trie if {![info exists trie(no)]} { set trie(no) 1 set trie(size) 0 set trie(max) 0 } if {$trie(max) < $to} { set trie(max) $to } incr trie(size) ins_trie_r [split $from] $to $combining $codename 0 } proc split_trie {this} { global trie set trie($this,type) d foreach e $trie($this,content) { set from [lindex $e 0] set to [lindex $e 1] set combining [lindex $e 2] set codename [lindex $e 3] set ch [lindex $from 0] set rest [lrange $from 1 end] if {[llength $rest]} { if {![info exist trie($this,ptr,$ch)]} { set trie($this,ptr,$ch) $trie(no) incr trie(no) } ins_trie_r $rest $to $combining $codename $trie($this,ptr,$ch) } else { set trie($this,to,$ch) $to set trie($this,combining,$ch) $combining set trie($this,codename,$ch) $codename } } set trie($this,content) missing } proc ins_trie_r {from to combining codename this} { global trie if {![info exist trie($this,type)]} { set trie($this,type) f } if {$trie($this,type) == "f"} { set dup 0 if {[info exists trie($this,content)]} { foreach e $trie($this,content) { set efrom [lindex $e 0] if { $efrom == $from } { set dup 1 } } } if { $dup == 0 } { lappend trie($this,content) [list $from $to $combining $codename] } # split ? if {[llength $trie($this,content)] > $trie(split)} { split_trie $this return [ins_trie_r $from $to $combining $codename $this] } } else { set ch [lindex $from 0] set rest [lrange $from 1 end] if {[llength $rest]} { if {![info exist trie($this,ptr,$ch)]} { set trie($this,ptr,$ch) $trie(no) incr trie(no) } ins_trie_r $rest $to $combining $codename $trie($this,ptr,$ch) } else { if {![info exist trie($this,to,$ch)]} { set trie($this,to,$ch) $to set trie($this,combining,$ch) $combining set trie($this,codename,$ch) $codename } } } } proc dump_trie {ofilehandle} { global trie set f $ofilehandle puts $f "/* TRIE: size $trie(size) */" set this $trie(no) while { [incr this -1] >= 0 } { puts $f "/* PAGE $this */" if {$trie($this,type) == "f"} { puts $f "struct yaz_iconv_trie_flat $trie(prefix)page${this}_flat\[\] = \{" foreach m $trie($this,content) { puts -nonewline $f " \{\"" foreach d [lindex $m 0] { puts -nonewline $f "\\x$d" } puts -nonewline $f "\", [lindex $m 2], 0x[lindex $m 1]" set v [lindex $m 3] puts $f "\}, /* $v */" } puts $f " \{\"\", 0, 0\}" puts $f "\};" puts $f "struct yaz_iconv_trie $trie(prefix)page${this} = \{" puts $f " $trie(prefix)page${this}_flat, 0" puts $f "\};" } else { puts $f "struct yaz_iconv_trie_dir $trie(prefix)page${this}_dir\[256\] = \{" for {set i 0} {$i < 256} {incr i} { puts -nonewline $f " \{" set ch [format %02X $i] set null 1 if {[info exist trie($this,ptr,$ch)]} { puts -nonewline $f "[expr $trie($this,ptr,$ch)+1], " set null 0 } else { puts -nonewline $f "0, " } if {[info exist trie($this,combining,$ch)]} { puts -nonewline $f "$trie($this,combining,$ch), " } else { puts -nonewline $f "0, " } if {[info exist trie($this,to,$ch)]} { puts -nonewline $f "0x$trie($this,to,$ch)\}" set null 0 } else { puts -nonewline $f "0\}" } if {[info exist trie($this,codename,$ch)]} { set v $trie($this,codename,$ch) puts -nonewline $f " /* $v */" } if {$i < 255} { puts $f "," } else { puts $f "" } } puts $f "\};" puts $f "struct yaz_iconv_trie $trie(prefix)page${this} = \{" puts $f " 0, $trie(prefix)page${this}_dir" puts $f "\};" } } puts $f "struct yaz_iconv_trie *$trie(prefix)ptrs \[\] = {" for {set this 0} {$this < $trie(no)} {incr this} { puts $f " &$trie(prefix)page$this," } puts $f "0, };" puts $f "" puts $f "unsigned long yaz_$trie(prefix)_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup($trie(prefix)ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } " } proc readfile {fname ofilehandle prefix omits reverse} { global trie set marc_lines 0 set ucs_lines 0 set utf_lines 0 set altutf_lines 0 set codename_lines 0 set lineno 0 set f [open $fname r] set tablenumber x set combining 0 set codename {} set altutf {} while {1} { incr lineno set cnt [gets $f line] if {$cnt < 0} { break } if {[regexp {} $line s]} { dump_trie $ofilehandle } elseif {[regexp {} $line s]} { if {[string length $ucs]} { if {$reverse} { for {set i 0} {$i < [string length $utf]} {incr i 2} { lappend hex [string range $utf $i [expr $i+1]] } # puts "ins_trie $hex $marc ins_trie $hex $marc $combining $codename unset hex } else { for {set i 0} {$i < [string length $marc]} {incr i 2} { lappend hex [string range $marc $i [expr $i+1]] } # puts "ins_trie $hex $ucs" ins_trie $hex $ucs $combining $codename unset hex } } if {$reverse && [string length $marc]} { for {set i 0} {$i < [string length $altutf]} {incr i 2} { lappend hex [string range $altutf $i [expr $i+1]] } if {[info exists hex]} { ins_trie $hex $marc $combining $codename unset hex } } set marc {} set uni {} set codename {} set combining 0 set altutf {} } elseif {[regexp {([0-9A-Fa-f]*)} $line s marc]} { incr marc_lines } elseif {[regexp {(.*)} $line s codename]} { incr codename_lines } elseif {[regexp {(.*)} $line s codename]} { incr codename_lines incr lineno set cnt [gets $f line] if {$cnt < 0} { break } if {[regexp {(.*)} $line s codename_ex]} { set codename "${codename} ${codename_ex}" } } elseif {[regexp {true} $line s]} { set combining 1 } elseif {[regexp {([0-9A-Fa-f]*)} $line s ucs]} { incr ucs_lines } elseif {[regexp {([0-9A-Fa-f]*)} $line s utf]} { incr utf_lines } elseif {[regexp {([0-9A-Fa-f]*)} $line s altutf]} { incr altutf_lines } } close $f } set verbose 0 set ifile {} set ofile out.c set prefix {c} set reverse_map 0 # Parse command line set l [llength $argv] set i 0 set omits {} while {$i < $l} { set arg [lindex $argv $i] switch -glob -- $arg { -v { incr verbose } -s { if {[string length $arg]} { set arg [lindex $argv [incr i]] } set trie(split) $arg } -p { if {[string length $arg]} { set arg [lindex $argv [incr i]] } set prefix $arg } -o { if {[string length $arg]} { set arg [lindex $argv [incr i]] } set ofile $arg } -O { if {[string length $arg]} { set arg [lindex $argv [incr i]] } lappend omits $arg } -r { set reverse_map 1 } default { lappend ifiles $arg } } incr i } if {![info exists ifiles]} { puts "charconv.tcl: missing input file(s)" usage } set ofilehandle [open ${ofile}.tmp w] preamble_trie $ofilehandle $ifiles $ofile foreach ifile $ifiles { readfile $ifile $ofilehandle $prefix $omits $reverse_map } close $ofilehandle file rename -force ${ofile}.tmp ${ofile} yaz-5.28.0/src/ber_bit.c0000644000175000017500000000412613265142510011675 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ber_bit.c * \brief Implements BER BITSTRING encoding and decoding. * * This source file implements BER encoding and decoding of * the BITSTRING type. */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" int ber_bitstring(ODR o, Odr_bitmask *p, int cons) { int res, len; const char *base; switch (o->direction) { case ODR_DECODE: if ((res = ber_declen(o->op->bp, &len, odr_max(o))) < 0) { odr_seterror(o, OPROTO, 4); return 0; } o->op->bp += res; if (cons) /* fetch component strings */ { base = o->op->bp; while (odp_more_chunks(o, base, len)) if (!odr_bitstring(o, &p, 0, 0)) return 0; return 1; } /* primitive bitstring */ if (len < 0) { odr_seterror(o, OOTHER, 5); return 0; } if (len == 0) return 1; if (len - 1 > ODR_BITMASK_SIZE) { odr_seterror(o, OOTHER, 6); return 0; } if (len > odr_max(o)) { odr_seterror(o, OOTHER, 7); return 0; } o->op->bp++; /* silently ignore the unused-bits field */ len--; memcpy(p->bits + p->top + 1, o->op->bp, len); p->top += len; o->op->bp += len; return 1; case ODR_ENCODE: if ((res = ber_enclen(o, p->top + 2, 5, 0)) < 0) return 0; if (odr_putc(o, 0) < 0) /* no unused bits here */ return 0; if (p->top < 0) return 1; if (odr_write(o, p->bits, p->top + 1) < 0) return 0; return 1; case ODR_PRINT: return 1; default: odr_seterror(o, OOTHER, 8); return 0; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/mutex.c0000644000175000017500000000701413265142510011430 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file mutex.c * \brief Implements MUTEX functions * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #include #ifdef WIN32 #include #include #endif #include #if HAVE_SYS_TIME_H #include #endif #if YAZ_POSIX_THREADS #include #endif #include "mutex-p.h" void yaz_mutex_create(YAZ_MUTEX *p) { if (!*p) { *p = (YAZ_MUTEX) malloc(sizeof(**p)); #ifdef WIN32 InitializeCriticalSection(&(*p)->handle); #elif YAZ_POSIX_THREADS pthread_mutex_init(&(*p)->handle, 0); #endif (*p)->name = 0; (*p)->log_level = 0; } } void yaz_mutex_set_name(YAZ_MUTEX p, int log_level, const char *name) { if (p->name) free(p->name); p->name = 0; p->log_level = 0; if (name) { p->name = strdup(name); p->log_level = log_level; } } void yaz_mutex_enter(YAZ_MUTEX p) { if (p) { #ifdef WIN32 EnterCriticalSection(&p->handle); #elif YAZ_POSIX_THREADS int r = 1; /* signal : not locked (yet) */ if (p->log_level) { /* debugging */ r = pthread_mutex_trylock(&p->handle); if (r) { #if HAVE_SYS_TIME_H long long d; struct timeval tv1, tv2; gettimeofday(&tv1, 0); #endif yaz_log(p->log_level, "yaz_mutex_enter: %p tid=%p name=%s waiting", p, (void *) pthread_self(), p->name); #if HAVE_SYS_TIME_H r = pthread_mutex_lock(&p->handle); gettimeofday(&tv2, 0); d = 1000000LL * ((long long) tv2.tv_sec - tv1.tv_sec) + tv2.tv_usec - tv1.tv_usec; yaz_log(p->log_level, "yaz_mutex_enter: %p tid=%p name=%s " "lock delay %lld", p, (void *) pthread_self(), p->name, d); #endif } else { yaz_log(p->log_level, "yaz_mutex_enter: %p tid=%p name=%s lock", p, (void *) pthread_self(), p->name); } } if (r) { r = pthread_mutex_lock(&p->handle); if (p->log_level) { yaz_log(p->log_level, "yaz_mutex_enter: %p tid=%p name=%s lock", p, (void *) pthread_self(), p->name); } } #endif } } void yaz_mutex_leave(YAZ_MUTEX p) { if (p) { #ifdef WIN32 LeaveCriticalSection(&p->handle); #elif YAZ_POSIX_THREADS pthread_mutex_unlock(&p->handle); if (p->log_level) { yaz_log(p->log_level, "yaz_mutex_leave: %p tid=%p name=%s unlock", p, (void *) pthread_self(), p->name); } #endif } } void yaz_mutex_destroy(YAZ_MUTEX *p) { if (*p) { #ifdef WIN32 DeleteCriticalSection(&(*p)->handle); #elif YAZ_POSIX_THREADS pthread_mutex_destroy(&(*p)->handle); #endif if ((*p)->name) free((*p)->name); free(*p); *p = 0; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/marcdisp.c0000644000175000017500000013271413265142510012076 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file marcdisp.c * \brief Implements MARC conversion utilities */ #if HAVE_CONFIG_H #include #endif #ifdef WIN32 #include #endif #include #include #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include #endif enum yaz_collection_state { no_collection, collection_first, collection_second }; /** \brief node types for yaz_marc_node */ enum YAZ_MARC_NODE_TYPE { YAZ_MARC_DATAFIELD, YAZ_MARC_CONTROLFIELD, YAZ_MARC_COMMENT, YAZ_MARC_LEADER }; /** \brief represents a data field */ struct yaz_marc_datafield { char *tag; char *indicator; struct yaz_marc_subfield *subfields; }; /** \brief represents a control field */ struct yaz_marc_controlfield { char *tag; char *data; }; /** \brief a comment node */ struct yaz_marc_comment { char *comment; }; /** \brief MARC node */ struct yaz_marc_node { enum YAZ_MARC_NODE_TYPE which; union { struct yaz_marc_datafield datafield; struct yaz_marc_controlfield controlfield; char *comment; char *leader; } u; struct yaz_marc_node *next; }; /** \brief represents a subfield */ struct yaz_marc_subfield { char *code_data; struct yaz_marc_subfield *next; }; /** \brief the internals of a yaz_marc_t handle */ struct yaz_marc_t_ { WRBUF m_wr; NMEM nmem; int output_format; int debug; int write_using_libxml2; enum yaz_collection_state enable_collection; yaz_iconv_t iconv_cd; char subfield_str[8]; char endline_str[8]; char *leader_spec; struct yaz_marc_node *nodes; struct yaz_marc_node **nodes_pp; struct yaz_marc_subfield **subfield_pp; }; yaz_marc_t yaz_marc_create(void) { yaz_marc_t mt = (yaz_marc_t) xmalloc(sizeof(*mt)); mt->output_format = YAZ_MARC_LINE; mt->debug = 0; mt->write_using_libxml2 = 0; mt->enable_collection = no_collection; mt->m_wr = wrbuf_alloc(); mt->iconv_cd = 0; mt->leader_spec = 0; strcpy(mt->subfield_str, " $"); strcpy(mt->endline_str, "\n"); mt->nmem = nmem_create(); yaz_marc_reset(mt); return mt; } void yaz_marc_destroy(yaz_marc_t mt) { if (!mt) return ; nmem_destroy(mt->nmem); wrbuf_destroy(mt->m_wr); xfree(mt->leader_spec); xfree(mt); } NMEM yaz_marc_get_nmem(yaz_marc_t mt) { return mt->nmem; } static void marc_iconv_reset(yaz_marc_t mt, WRBUF wr) { wrbuf_iconv_reset(wr, mt->iconv_cd); } static int marc_exec_leader(const char *leader_spec, char *leader, size_t size); #if YAZ_HAVE_XML2 static int yaz_marc_write_xml_turbo_xml(yaz_marc_t mt, xmlNode **root_ptr, const char *ns, const char *format, const char *type); #endif static struct yaz_marc_node *yaz_marc_add_node(yaz_marc_t mt) { struct yaz_marc_node *n = (struct yaz_marc_node *) nmem_malloc(mt->nmem, sizeof(*n)); n->next = 0; *mt->nodes_pp = n; mt->nodes_pp = &n->next; return n; } #if YAZ_HAVE_XML2 void yaz_marc_add_controlfield_xml(yaz_marc_t mt, const xmlNode *ptr_tag, const xmlNode *ptr_data) { struct yaz_marc_node *n = yaz_marc_add_node(mt); n->which = YAZ_MARC_CONTROLFIELD; n->u.controlfield.tag = nmem_text_node_cdata(ptr_tag, mt->nmem); n->u.controlfield.data = nmem_text_node_cdata(ptr_data, mt->nmem); } void yaz_marc_add_controlfield_xml2(yaz_marc_t mt, char *tag, const xmlNode *ptr_data) { struct yaz_marc_node *n = yaz_marc_add_node(mt); n->which = YAZ_MARC_CONTROLFIELD; n->u.controlfield.tag = tag; n->u.controlfield.data = nmem_text_node_cdata(ptr_data, mt->nmem); } #endif void yaz_marc_add_comment(yaz_marc_t mt, char *comment) { struct yaz_marc_node *n = yaz_marc_add_node(mt); n->which = YAZ_MARC_COMMENT; n->u.comment = nmem_strdup(mt->nmem, comment); } void yaz_marc_cprintf(yaz_marc_t mt, const char *fmt, ...) { va_list ap; char buf[200]; va_start(ap, fmt); yaz_vsnprintf(buf, sizeof(buf)-1, fmt, ap); yaz_marc_add_comment(mt, buf); va_end (ap); } int yaz_marc_get_debug(yaz_marc_t mt) { return mt->debug; } void yaz_marc_add_leader(yaz_marc_t mt, const char *leader, size_t leader_len) { struct yaz_marc_node *n = yaz_marc_add_node(mt); n->which = YAZ_MARC_LEADER; n->u.leader = nmem_strdupn(mt->nmem, leader, leader_len); marc_exec_leader(mt->leader_spec, n->u.leader, leader_len); } void yaz_marc_add_controlfield(yaz_marc_t mt, const char *tag, const char *data, size_t data_len) { struct yaz_marc_node *n = yaz_marc_add_node(mt); n->which = YAZ_MARC_CONTROLFIELD; n->u.controlfield.tag = nmem_strdup(mt->nmem, tag); n->u.controlfield.data = nmem_strdupn(mt->nmem, data, data_len); if (mt->debug) { size_t i; char msg[80]; sprintf(msg, "controlfield:"); for (i = 0; i < 16 && i < data_len; i++) sprintf(msg + strlen(msg), " %02X", data[i] & 0xff); if (i < data_len) sprintf(msg + strlen(msg), " .."); yaz_marc_add_comment(mt, msg); } } void yaz_marc_add_datafield(yaz_marc_t mt, const char *tag, const char *indicator, size_t indicator_len) { struct yaz_marc_node *n = yaz_marc_add_node(mt); n->which = YAZ_MARC_DATAFIELD; n->u.datafield.tag = nmem_strdup(mt->nmem, tag); n->u.datafield.indicator = nmem_strdupn(mt->nmem, indicator, indicator_len); n->u.datafield.subfields = 0; /* make subfield_pp the current (last one) */ mt->subfield_pp = &n->u.datafield.subfields; } /** \brief adds a attribute value to the element name if it is plain chars If not, and if the attribute name is not null, it will append a attribute element with the value if attribute name is null it will return a non-zero value meaning it couldnt handle the value. */ static int element_name_append_attribute_value( yaz_marc_t mt, WRBUF buffer, const char *attribute_name, char *code_data, size_t code_len) { /* TODO Map special codes to something possible for XML ELEMENT names */ int encode = 0; size_t index = 0; int success = 0; for (index = 0; index < code_len; index++) { if (!((code_data[index] >= '0' && code_data[index] <= '9') || (code_data[index] >= 'a' && code_data[index] <= 'z') || (code_data[index] >= 'A' && code_data[index] <= 'Z'))) encode = 1; } /* Add as attribute */ if (encode && attribute_name) wrbuf_printf(buffer, " %s=\"", attribute_name); if (!encode || attribute_name) wrbuf_iconv_write_cdata(buffer, mt->iconv_cd, code_data, code_len); else success = -1; if (encode && attribute_name) wrbuf_printf(buffer, "\""); /* return error if we couldn't handle it.*/ return success; } #if YAZ_HAVE_XML2 void yaz_marc_add_datafield_xml(yaz_marc_t mt, const xmlNode *ptr_tag, const char *indicator, size_t indicator_len) { struct yaz_marc_node *n = yaz_marc_add_node(mt); n->which = YAZ_MARC_DATAFIELD; n->u.datafield.tag = nmem_text_node_cdata(ptr_tag, mt->nmem); n->u.datafield.indicator = nmem_strdup(mt->nmem, indicator); n->u.datafield.subfields = 0; /* make subfield_pp the current (last one) */ mt->subfield_pp = &n->u.datafield.subfields; } void yaz_marc_add_datafield_xml2(yaz_marc_t mt, char *tag_value, char *indicators) { struct yaz_marc_node *n = yaz_marc_add_node(mt); n->which = YAZ_MARC_DATAFIELD; n->u.datafield.tag = tag_value; n->u.datafield.indicator = indicators; n->u.datafield.subfields = 0; /* make subfield_pp the current (last one) */ mt->subfield_pp = &n->u.datafield.subfields; } void yaz_marc_datafield_set_indicators(struct yaz_marc_node *n, char *indicator) { n->u.datafield.indicator = indicator; } #endif void yaz_marc_add_subfield(yaz_marc_t mt, const char *code_data, size_t code_data_len) { if (mt->debug) { size_t i; char msg[80]; sprintf(msg, "subfield:"); for (i = 0; i < 16 && i < code_data_len; i++) sprintf(msg + strlen(msg), " %02X", code_data[i] & 0xff); if (i < code_data_len) sprintf(msg + strlen(msg), " .."); yaz_marc_add_comment(mt, msg); } if (mt->subfield_pp) { struct yaz_marc_subfield *n = (struct yaz_marc_subfield *) nmem_malloc(mt->nmem, sizeof(*n)); n->code_data = nmem_strdupn(mt->nmem, code_data, code_data_len); n->next = 0; /* mark subfield_pp to point to this one, so we append here next */ *mt->subfield_pp = n; mt->subfield_pp = &n->next; } } static void check_ascii(yaz_marc_t mt, char *leader, int offset, int ch_default) { if (leader[offset] < ' ' || leader[offset] > 127) { yaz_marc_cprintf(mt, "Leader character at offset %d is non-ASCII. " "Setting value to '%c'", offset, ch_default); leader[offset] = ch_default; } } void yaz_marc_set_leader(yaz_marc_t mt, const char *leader_c, int *indicator_length, int *identifier_length, int *base_address, int *length_data_entry, int *length_starting, int *length_implementation) { char leader[24]; memcpy(leader, leader_c, 24); check_ascii(mt, leader, 5, 'a'); check_ascii(mt, leader, 6, 'a'); check_ascii(mt, leader, 7, 'a'); check_ascii(mt, leader, 8, '#'); check_ascii(mt, leader, 9, '#'); if (!atoi_n_check(leader+10, 1, indicator_length) || *indicator_length == 0) { yaz_marc_cprintf(mt, "Indicator length at offset 10 should" " hold a number 1-9. Assuming 2"); leader[10] = '2'; *indicator_length = 2; } if (!atoi_n_check(leader+11, 1, identifier_length) || *identifier_length == 0) { yaz_marc_cprintf(mt, "Identifier length at offset 11 should " " hold a number 1-9. Assuming 2"); leader[11] = '2'; *identifier_length = 2; } if (!atoi_n_check(leader+12, 5, base_address)) { yaz_marc_cprintf(mt, "Base address at offsets 12..16 should" " hold a number. Assuming 0"); *base_address = 0; } check_ascii(mt, leader, 17, '#'); check_ascii(mt, leader, 18, '#'); check_ascii(mt, leader, 19, '#'); if (!atoi_n_check(leader+20, 1, length_data_entry) || *length_data_entry < 3) { yaz_marc_cprintf(mt, "Length data entry at offset 20 should" " hold a number 3-9. Assuming 4"); *length_data_entry = 4; leader[20] = '4'; } if (!atoi_n_check(leader+21, 1, length_starting) || *length_starting < 4) { yaz_marc_cprintf(mt, "Length starting at offset 21 should" " hold a number 4-9. Assuming 5"); *length_starting = 5; leader[21] = '5'; } if (!atoi_n_check(leader+22, 1, length_implementation)) { yaz_marc_cprintf(mt, "Length implementation at offset 22 should" " hold a number. Assuming 0"); *length_implementation = 0; leader[22] = '0'; } check_ascii(mt, leader, 23, '0'); if (mt->debug) { yaz_marc_cprintf(mt, "Indicator length %5d", *indicator_length); yaz_marc_cprintf(mt, "Identifier length %5d", *identifier_length); yaz_marc_cprintf(mt, "Base address %5d", *base_address); yaz_marc_cprintf(mt, "Length data entry %5d", *length_data_entry); yaz_marc_cprintf(mt, "Length starting %5d", *length_starting); yaz_marc_cprintf(mt, "Length implementation %5d", *length_implementation); } yaz_marc_add_leader(mt, leader, 24); } void yaz_marc_subfield_str(yaz_marc_t mt, const char *s) { strncpy(mt->subfield_str, s, sizeof(mt->subfield_str)-1); mt->subfield_str[sizeof(mt->subfield_str)-1] = '\0'; } void yaz_marc_endline_str(yaz_marc_t mt, const char *s) { strncpy(mt->endline_str, s, sizeof(mt->endline_str)-1); mt->endline_str[sizeof(mt->endline_str)-1] = '\0'; } /* try to guess how many bytes the identifier really is! */ static size_t cdata_one_character(yaz_marc_t mt, const char *buf) { if (mt->iconv_cd) { size_t i; for (i = 1; i<5; i++) { char outbuf[12]; size_t outbytesleft = sizeof(outbuf); char *outp = outbuf; const char *inp = buf; size_t inbytesleft = i; size_t r = yaz_iconv(mt->iconv_cd, (char**) &inp, &inbytesleft, &outp, &outbytesleft); yaz_iconv(mt->iconv_cd, 0, 0, &outp, &outbytesleft); if (r != (size_t) (-1)) return i; /* got a complete sequence */ } return 1; /* giving up */ } else { int error = 0; size_t no_read = 0; (void) yaz_read_UTF8_char((const unsigned char *) buf, 4, &no_read, &error); if (error == 0 && no_read > 0) return no_read; } return 1; /* we don't know */ } size_t yaz_marc_sizeof_char(yaz_marc_t mt, const char *buf) { return cdata_one_character(mt, buf); } void yaz_marc_reset(yaz_marc_t mt) { nmem_reset(mt->nmem); mt->nodes = 0; mt->nodes_pp = &mt->nodes; mt->subfield_pp = 0; } int yaz_marc_write_check(yaz_marc_t mt, WRBUF wr) { struct yaz_marc_node *n; int identifier_length; const char *leader = 0; for (n = mt->nodes; n; n = n->next) if (n->which == YAZ_MARC_LEADER) { leader = n->u.leader; break; } if (!leader) return -1; if (!atoi_n_check(leader+11, 1, &identifier_length)) return -1; for (n = mt->nodes; n; n = n->next) { switch(n->which) { case YAZ_MARC_COMMENT: wrbuf_iconv_write(wr, mt->iconv_cd, n->u.comment, strlen(n->u.comment)); wrbuf_puts(wr, "\n"); break; default: break; } } return 0; } static size_t get_subfield_len(yaz_marc_t mt, const char *data, int identifier_length) { /* if identifier length is 2 (most MARCs) or less (probably an error), the code is a single character .. However we've seen multibyte codes, so see how big it really is */ if (identifier_length > 2) return identifier_length - 1; else return cdata_one_character(mt, data); } int yaz_marc_write_line(yaz_marc_t mt, WRBUF wr) { struct yaz_marc_node *n; int identifier_length; const char *leader = 0; for (n = mt->nodes; n; n = n->next) if (n->which == YAZ_MARC_LEADER) { leader = n->u.leader; break; } if (!leader) return -1; if (!atoi_n_check(leader+11, 1, &identifier_length)) return -1; for (n = mt->nodes; n; n = n->next) { struct yaz_marc_subfield *s; switch(n->which) { case YAZ_MARC_DATAFIELD: wrbuf_printf(wr, "%s %s", n->u.datafield.tag, n->u.datafield.indicator); for (s = n->u.datafield.subfields; s; s = s->next) { size_t using_code_len = get_subfield_len(mt, s->code_data, identifier_length); wrbuf_puts (wr, mt->subfield_str); wrbuf_iconv_write(wr, mt->iconv_cd, s->code_data, using_code_len); wrbuf_iconv_puts(wr, mt->iconv_cd, " "); wrbuf_iconv_puts(wr, mt->iconv_cd, s->code_data + using_code_len); marc_iconv_reset(mt, wr); } wrbuf_puts (wr, mt->endline_str); break; case YAZ_MARC_CONTROLFIELD: wrbuf_printf(wr, "%s", n->u.controlfield.tag); wrbuf_iconv_puts(wr, mt->iconv_cd, " "); wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data); marc_iconv_reset(mt, wr); wrbuf_puts (wr, mt->endline_str); break; case YAZ_MARC_COMMENT: wrbuf_puts(wr, "("); wrbuf_iconv_write(wr, mt->iconv_cd, n->u.comment, strlen(n->u.comment)); marc_iconv_reset(mt, wr); wrbuf_puts(wr, ")\n"); break; case YAZ_MARC_LEADER: wrbuf_printf(wr, "%s\n", n->u.leader); } } wrbuf_puts(wr, "\n"); return 0; } int yaz_marc_write_trailer(yaz_marc_t mt, WRBUF wr) { if (mt->enable_collection == collection_second) { switch(mt->output_format) { case YAZ_MARC_MARCXML: case YAZ_MARC_TURBOMARC: wrbuf_printf(wr, "\n"); break; case YAZ_MARC_XCHANGE: wrbuf_printf(wr, "\n"); break; } } return 0; } void yaz_marc_enable_collection(yaz_marc_t mt) { mt->enable_collection = collection_first; } int yaz_marc_write_mode(yaz_marc_t mt, WRBUF wr) { switch(mt->output_format) { case YAZ_MARC_LINE: return yaz_marc_write_line(mt, wr); case YAZ_MARC_MARCXML: return yaz_marc_write_marcxml(mt, wr); case YAZ_MARC_TURBOMARC: return yaz_marc_write_turbomarc(mt, wr); case YAZ_MARC_XCHANGE: return yaz_marc_write_marcxchange(mt, wr, 0, 0); /* no format, type */ case YAZ_MARC_ISO2709: return yaz_marc_write_iso2709(mt, wr); case YAZ_MARC_CHECK: return yaz_marc_write_check(mt, wr); case YAZ_MARC_JSON: return yaz_marc_write_json(mt, wr); } return -1; } static const char *record_name[2] = { "record", "r"}; static const char *leader_name[2] = { "leader", "l"}; static const char *controlfield_name[2] = { "controlfield", "c"}; static const char *datafield_name[2] = { "datafield", "d"}; static const char *indicator_name[2] = { "ind", "i"}; static const char *subfield_name[2] = { "subfield", "s"}; /** \brief common MARC XML/Xchange/turbomarc writer \param mt handle \param wr WRBUF output \param ns XMLNS for the elements \param format record format (e.g. "MARC21") \param type record type (e.g. "Bibliographic") \param turbo =1 for turbomarc \retval 0 OK \retval -1 failure */ static int yaz_marc_write_marcxml_wrbuf(yaz_marc_t mt, WRBUF wr, const char *ns, const char *format, const char *type, int turbo) { struct yaz_marc_node *n; int identifier_length; const char *leader = 0; for (n = mt->nodes; n; n = n->next) if (n->which == YAZ_MARC_LEADER) { leader = n->u.leader; break; } if (!leader) return -1; if (!atoi_n_check(leader+11, 1, &identifier_length)) return -1; if (mt->enable_collection != no_collection) { if (mt->enable_collection == collection_first) { wrbuf_printf(wr, "\n", ns); mt->enable_collection = collection_second; } wrbuf_printf(wr, "<%s", record_name[turbo]); } else { wrbuf_printf(wr, "<%s xmlns=\"%s\"", record_name[turbo], ns); } if (format) wrbuf_printf(wr, " format=\"%.80s\"", format); if (type) wrbuf_printf(wr, " type=\"%.80s\"", type); wrbuf_printf(wr, ">\n"); for (n = mt->nodes; n; n = n->next) { struct yaz_marc_subfield *s; switch(n->which) { case YAZ_MARC_DATAFIELD: wrbuf_printf(wr, " <%s", datafield_name[turbo]); if (!turbo) wrbuf_printf(wr, " tag=\""); wrbuf_iconv_write_cdata(wr, mt->iconv_cd, n->u.datafield.tag, strlen(n->u.datafield.tag)); if (!turbo) wrbuf_printf(wr, "\""); if (n->u.datafield.indicator) { int i; size_t off = 0; for (i = 0; n->u.datafield.indicator[off]; i++) { size_t ilen = cdata_one_character(mt, n->u.datafield.indicator + off); wrbuf_printf(wr, " %s%d=\"", indicator_name[turbo], i+1); wrbuf_iconv_write_cdata(wr, mt->iconv_cd, n->u.datafield.indicator + off, ilen); off += ilen; wrbuf_iconv_puts(wr, mt->iconv_cd, "\""); } } wrbuf_printf(wr, ">\n"); for (s = n->u.datafield.subfields; s; s = s->next) { size_t using_code_len = get_subfield_len(mt, s->code_data, identifier_length); wrbuf_printf(wr, " <%s", subfield_name[turbo]); if (!turbo) { wrbuf_printf(wr, " code=\""); wrbuf_iconv_write_cdata(wr, mt->iconv_cd, s->code_data, using_code_len); wrbuf_iconv_puts(wr, mt->iconv_cd, "\">"); } else { element_name_append_attribute_value(mt, wr, "code", s->code_data, using_code_len); wrbuf_puts(wr, ">"); } wrbuf_iconv_write_cdata(wr, mt->iconv_cd, s->code_data + using_code_len, strlen(s->code_data + using_code_len)); marc_iconv_reset(mt, wr); wrbuf_printf(wr, "code_data, using_code_len); wrbuf_puts(wr, ">\n"); } wrbuf_printf(wr, " iconv_cd, n->u.datafield.tag, strlen(n->u.datafield.tag)); wrbuf_printf(wr, ">\n"); break; case YAZ_MARC_CONTROLFIELD: wrbuf_printf(wr, " <%s", controlfield_name[turbo]); if (!turbo) { wrbuf_printf(wr, " tag=\""); wrbuf_iconv_write_cdata(wr, mt->iconv_cd, n->u.controlfield.tag, strlen(n->u.controlfield.tag)); wrbuf_iconv_puts(wr, mt->iconv_cd, "\">"); } else { /* TODO convert special */ wrbuf_iconv_write_cdata(wr, mt->iconv_cd, n->u.controlfield.tag, strlen(n->u.controlfield.tag)); wrbuf_iconv_puts(wr, mt->iconv_cd, ">"); } wrbuf_iconv_write_cdata(wr, mt->iconv_cd, n->u.controlfield.data, strlen(n->u.controlfield.data)); marc_iconv_reset(mt, wr); wrbuf_printf(wr, "iconv_cd, n->u.controlfield.tag, strlen(n->u.controlfield.tag)); wrbuf_puts(wr, ">\n"); break; case YAZ_MARC_COMMENT: wrbuf_printf(wr, "\n"); break; case YAZ_MARC_LEADER: wrbuf_printf(wr, " <%s>", leader_name[turbo]); wrbuf_iconv_write_cdata(wr, 0 , /* no charset conversion for leader */ n->u.leader, strlen(n->u.leader)); wrbuf_printf(wr, "\n", leader_name[turbo]); } } wrbuf_printf(wr, "\n", record_name[turbo]); return 0; } static int yaz_marc_write_marcxml_ns(yaz_marc_t mt, WRBUF wr, const char *ns, const char *format, const char *type, int turbo) { if (mt->write_using_libxml2) { #if YAZ_HAVE_XML2 int ret; xmlNode *root_ptr; if (!turbo) ret = yaz_marc_write_xml(mt, &root_ptr, ns, format, type); else ret = yaz_marc_write_xml_turbo_xml(mt, &root_ptr, ns, format, type); if (ret == 0) { xmlChar *buf_out; xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0"); int len_out; xmlDocSetRootElement(doc, root_ptr); xmlDocDumpMemory(doc, &buf_out, &len_out); wrbuf_write(wr, (const char *) buf_out, len_out); wrbuf_puts(wr, ""); xmlFree(buf_out); xmlFreeDoc(doc); } return ret; #else return -1; #endif } else return yaz_marc_write_marcxml_wrbuf(mt, wr, ns, format, type, turbo); } int yaz_marc_write_marcxml(yaz_marc_t mt, WRBUF wr) { /* set leader 09 to 'a' for UNICODE */ /* http://www.loc.gov/marc/bibliographic/ecbdldrd.html#mrcblea */ if (!mt->leader_spec) yaz_marc_modify_leader(mt, 9, "a"); return yaz_marc_write_marcxml_ns(mt, wr, "http://www.loc.gov/MARC21/slim", 0, 0, 0); } int yaz_marc_write_turbomarc(yaz_marc_t mt, WRBUF wr) { /* set leader 09 to 'a' for UNICODE */ /* http://www.loc.gov/marc/bibliographic/ecbdldrd.html#mrcblea */ if (!mt->leader_spec) yaz_marc_modify_leader(mt, 9, "a"); return yaz_marc_write_marcxml_ns(mt, wr, "http://www.indexdata.com/turbomarc", 0, 0, 1); } int yaz_marc_write_marcxchange(yaz_marc_t mt, WRBUF wr, const char *format, const char *type) { return yaz_marc_write_marcxml_ns(mt, wr, "info:lc/xmlns/marcxchange-v1", 0, 0, 0); } #if YAZ_HAVE_XML2 static void write_xml_indicator(yaz_marc_t mt, struct yaz_marc_node *n, xmlNode *ptr, int turbo) { if (n->u.datafield.indicator) { int i; size_t off = 0; for (i = 0; n->u.datafield.indicator[off]; i++) { size_t ilen = cdata_one_character(mt, n->u.datafield.indicator + off); char ind_val[10]; if (ilen < sizeof(ind_val) - 1) { char ind_str[6]; sprintf(ind_str, "%s%d", indicator_name[turbo], i+1); memcpy(ind_val, n->u.datafield.indicator + off, ilen); ind_val[ilen] = '\0'; xmlNewProp(ptr, BAD_CAST ind_str, BAD_CAST ind_val); } off += ilen; } } } static void add_marc_datafield_turbo_xml(yaz_marc_t mt, struct yaz_marc_node *n, xmlNode *record_ptr, xmlNsPtr ns_record, WRBUF wr_cdata, int identifier_length) { xmlNode *ptr; struct yaz_marc_subfield *s; WRBUF subfield_name = wrbuf_alloc(); /* TODO consider if safe */ char field[10]; field[0] = 'd'; strncpy(field + 1, n->u.datafield.tag, 3); field[4] = '\0'; ptr = xmlNewChild(record_ptr, ns_record, BAD_CAST field, 0); write_xml_indicator(mt, n, ptr, 1); for (s = n->u.datafield.subfields; s; s = s->next) { int not_written; xmlNode *ptr_subfield; size_t using_code_len = get_subfield_len(mt, s->code_data, identifier_length); wrbuf_rewind(wr_cdata); wrbuf_iconv_puts(wr_cdata, mt->iconv_cd, s->code_data + using_code_len); marc_iconv_reset(mt, wr_cdata); wrbuf_rewind(subfield_name); wrbuf_puts(subfield_name, "s"); not_written = element_name_append_attribute_value(mt, subfield_name, 0, s->code_data, using_code_len) != 0; ptr_subfield = xmlNewTextChild(ptr, ns_record, BAD_CAST wrbuf_cstr(subfield_name), BAD_CAST wrbuf_cstr(wr_cdata)); if (not_written) { /* Generate code attribute value and add */ wrbuf_rewind(wr_cdata); wrbuf_iconv_write(wr_cdata, mt->iconv_cd,s->code_data, using_code_len); xmlNewProp(ptr_subfield, BAD_CAST "code", BAD_CAST wrbuf_cstr(wr_cdata)); } } wrbuf_destroy(subfield_name); } static int yaz_marc_write_xml_turbo_xml(yaz_marc_t mt, xmlNode **root_ptr, const char *ns, const char *format, const char *type) { struct yaz_marc_node *n; int identifier_length; const char *leader = 0; xmlNode *record_ptr; xmlNsPtr ns_record; WRBUF wr_cdata = 0; for (n = mt->nodes; n; n = n->next) if (n->which == YAZ_MARC_LEADER) { leader = n->u.leader; break; } if (!leader) return -1; if (!atoi_n_check(leader+11, 1, &identifier_length)) return -1; wr_cdata = wrbuf_alloc(); record_ptr = xmlNewNode(0, BAD_CAST "r"); *root_ptr = record_ptr; ns_record = xmlNewNs(record_ptr, BAD_CAST ns, 0); xmlSetNs(record_ptr, ns_record); if (format) xmlNewProp(record_ptr, BAD_CAST "format", BAD_CAST format); if (type) xmlNewProp(record_ptr, BAD_CAST "type", BAD_CAST type); for (n = mt->nodes; n; n = n->next) { xmlNode *ptr; char field[10]; field[0] = 'c'; field[4] = '\0'; switch(n->which) { case YAZ_MARC_DATAFIELD: add_marc_datafield_turbo_xml(mt, n, record_ptr, ns_record, wr_cdata, identifier_length); break; case YAZ_MARC_CONTROLFIELD: wrbuf_rewind(wr_cdata); wrbuf_iconv_puts(wr_cdata, mt->iconv_cd, n->u.controlfield.data); marc_iconv_reset(mt, wr_cdata); strncpy(field + 1, n->u.controlfield.tag, 3); ptr = xmlNewTextChild(record_ptr, ns_record, BAD_CAST field, BAD_CAST wrbuf_cstr(wr_cdata)); break; case YAZ_MARC_COMMENT: ptr = xmlNewComment(BAD_CAST n->u.comment); xmlAddChild(record_ptr, ptr); break; case YAZ_MARC_LEADER: xmlNewTextChild(record_ptr, ns_record, BAD_CAST "l", BAD_CAST n->u.leader); break; } } wrbuf_destroy(wr_cdata); return 0; } int yaz_marc_write_xml(yaz_marc_t mt, xmlNode **root_ptr, const char *ns, const char *format, const char *type) { struct yaz_marc_node *n; int identifier_length; const char *leader = 0; xmlNode *record_ptr; xmlNsPtr ns_record; WRBUF wr_cdata = 0; for (n = mt->nodes; n; n = n->next) if (n->which == YAZ_MARC_LEADER) { leader = n->u.leader; break; } if (!leader) return -1; if (!atoi_n_check(leader+11, 1, &identifier_length)) return -1; wr_cdata = wrbuf_alloc(); record_ptr = xmlNewNode(0, BAD_CAST "record"); *root_ptr = record_ptr; ns_record = xmlNewNs(record_ptr, BAD_CAST ns, 0); xmlSetNs(record_ptr, ns_record); if (format) xmlNewProp(record_ptr, BAD_CAST "format", BAD_CAST format); if (type) xmlNewProp(record_ptr, BAD_CAST "type", BAD_CAST type); for (n = mt->nodes; n; n = n->next) { struct yaz_marc_subfield *s; xmlNode *ptr; switch(n->which) { case YAZ_MARC_DATAFIELD: ptr = xmlNewChild(record_ptr, ns_record, BAD_CAST "datafield", 0); xmlNewProp(ptr, BAD_CAST "tag", BAD_CAST n->u.datafield.tag); write_xml_indicator(mt, n, ptr, 0); for (s = n->u.datafield.subfields; s; s = s->next) { xmlNode *ptr_subfield; size_t using_code_len = get_subfield_len(mt, s->code_data, identifier_length); wrbuf_rewind(wr_cdata); wrbuf_iconv_puts(wr_cdata, mt->iconv_cd, s->code_data + using_code_len); marc_iconv_reset(mt, wr_cdata); ptr_subfield = xmlNewTextChild( ptr, ns_record, BAD_CAST "subfield", BAD_CAST wrbuf_cstr(wr_cdata)); wrbuf_rewind(wr_cdata); wrbuf_iconv_write(wr_cdata, mt->iconv_cd, s->code_data, using_code_len); xmlNewProp(ptr_subfield, BAD_CAST "code", BAD_CAST wrbuf_cstr(wr_cdata)); } break; case YAZ_MARC_CONTROLFIELD: wrbuf_rewind(wr_cdata); wrbuf_iconv_puts(wr_cdata, mt->iconv_cd, n->u.controlfield.data); marc_iconv_reset(mt, wr_cdata); ptr = xmlNewTextChild(record_ptr, ns_record, BAD_CAST "controlfield", BAD_CAST wrbuf_cstr(wr_cdata)); xmlNewProp(ptr, BAD_CAST "tag", BAD_CAST n->u.controlfield.tag); break; case YAZ_MARC_COMMENT: ptr = xmlNewComment(BAD_CAST n->u.comment); xmlAddChild(record_ptr, ptr); break; case YAZ_MARC_LEADER: xmlNewTextChild(record_ptr, ns_record, BAD_CAST "leader", BAD_CAST n->u.leader); break; } } wrbuf_destroy(wr_cdata); return 0; } #endif int yaz_marc_write_iso2709(yaz_marc_t mt, WRBUF wr) { struct yaz_marc_node *n, *cap_node = 0; int indicator_length; int identifier_length; int length_data_entry; int length_starting; int length_implementation; int data_offset = 0; const char *leader = 0; WRBUF wr_dir, wr_head, wr_data_tmp; int base_address; for (n = mt->nodes; n; n = n->next) if (n->which == YAZ_MARC_LEADER) leader = n->u.leader; if (!leader) return -1; if (!atoi_n_check(leader+10, 1, &indicator_length)) return -1; if (!atoi_n_check(leader+11, 1, &identifier_length)) return -1; if (!atoi_n_check(leader+20, 1, &length_data_entry)) return -1; if (!atoi_n_check(leader+21, 1, &length_starting)) return -1; if (!atoi_n_check(leader+22, 1, &length_implementation)) return -1; wr_data_tmp = wrbuf_alloc(); wr_dir = wrbuf_alloc(); for (n = mt->nodes; n; n = n->next) { int data_length = 0; const char *tag = 0; struct yaz_marc_subfield *s; switch(n->which) { case YAZ_MARC_DATAFIELD: tag = n->u.datafield.tag; data_length += strlen(n->u.datafield.indicator); wrbuf_rewind(wr_data_tmp); for (s = n->u.datafield.subfields; s; s = s->next) { /* write dummy IDFS + content */ wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' '); wrbuf_iconv_puts(wr_data_tmp, mt->iconv_cd, s->code_data); marc_iconv_reset(mt, wr_data_tmp); } /* write dummy FS (makes MARC-8 to become ASCII) */ wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' '); marc_iconv_reset(mt, wr_data_tmp); data_length += wrbuf_len(wr_data_tmp); break; case YAZ_MARC_CONTROLFIELD: tag = n->u.controlfield.tag; wrbuf_rewind(wr_data_tmp); wrbuf_iconv_puts(wr_data_tmp, mt->iconv_cd, n->u.controlfield.data); marc_iconv_reset(mt, wr_data_tmp); wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' ');/* field sep */ marc_iconv_reset(mt, wr_data_tmp); data_length += wrbuf_len(wr_data_tmp); break; case YAZ_MARC_COMMENT: break; case YAZ_MARC_LEADER: break; } if (data_length && tag) { if (wrbuf_len(wr_dir) + 40 + data_offset + data_length > 99999) { cap_node = n; break; } wrbuf_printf(wr_dir, "%.3s", tag); wrbuf_printf(wr_dir, "%0*d", length_data_entry, data_length); wrbuf_printf(wr_dir, "%0*d", length_starting, data_offset); data_offset += data_length; } } /* mark end of directory */ wrbuf_putc(wr_dir, ISO2709_FS); /* base address of data (comes after leader+directory) */ base_address = 24 + wrbuf_len(wr_dir); wr_head = wrbuf_alloc(); /* write record length */ wrbuf_printf(wr_head, "%05d", base_address + data_offset + 1); /* from "original" leader */ wrbuf_write(wr_head, leader+5, 7); /* base address of data */ wrbuf_printf(wr_head, "%05d", base_address); /* from "original" leader */ wrbuf_write(wr_head, leader+17, 7); wrbuf_write(wr, wrbuf_buf(wr_head), 24); wrbuf_write(wr, wrbuf_buf(wr_dir), wrbuf_len(wr_dir)); wrbuf_destroy(wr_head); wrbuf_destroy(wr_dir); wrbuf_destroy(wr_data_tmp); for (n = mt->nodes; n != cap_node; n = n->next) { struct yaz_marc_subfield *s; switch(n->which) { case YAZ_MARC_DATAFIELD: wrbuf_puts(wr, n->u.datafield.indicator); for (s = n->u.datafield.subfields; s; s = s->next) { wrbuf_putc(wr, ISO2709_IDFS); wrbuf_iconv_puts(wr, mt->iconv_cd, s->code_data); marc_iconv_reset(mt, wr); } wrbuf_putc(wr, ISO2709_FS); break; case YAZ_MARC_CONTROLFIELD: wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data); marc_iconv_reset(mt, wr); wrbuf_putc(wr, ISO2709_FS); break; case YAZ_MARC_COMMENT: break; case YAZ_MARC_LEADER: break; } } wrbuf_printf(wr, "%c", ISO2709_RS); return 0; } int yaz_marc_write_json(yaz_marc_t mt, WRBUF w) { int identifier_length; struct yaz_marc_node *n; const char *leader = 0; int first = 1; wrbuf_puts(w, "{\n"); for (n = mt->nodes; n; n = n->next) if (n->which == YAZ_MARC_LEADER) leader = n->u.leader; if (!leader) return -1; if (!atoi_n_check(leader+11, 1, &identifier_length)) return -1; wrbuf_puts(w, "\t\"leader\":\""); wrbuf_json_puts(w, leader); wrbuf_puts(w, "\",\n"); wrbuf_puts(w, "\t\"fields\":\n\t[\n"); for (n = mt->nodes; n; n = n->next) { struct yaz_marc_subfield *s; const char *sep = ""; switch (n->which) { case YAZ_MARC_LEADER: case YAZ_MARC_COMMENT: break; case YAZ_MARC_CONTROLFIELD: if (first) first = 0; else wrbuf_puts(w, ",\n"); wrbuf_puts(w, "\t\t{\n\t\t\t\""); wrbuf_iconv_json_puts(w, mt->iconv_cd, n->u.controlfield.tag); wrbuf_puts(w, "\":\""); wrbuf_iconv_json_puts(w, mt->iconv_cd, n->u.controlfield.data); wrbuf_puts(w, "\"\n\t\t}"); break; case YAZ_MARC_DATAFIELD: if (first) first = 0; else wrbuf_puts(w, ",\n"); wrbuf_puts(w, "\t\t{\n\t\t\t\""); wrbuf_json_puts(w, n->u.datafield.tag); wrbuf_puts(w, "\":\n\t\t\t{\n\t\t\t\t\"subfields\":\n\t\t\t\t[\n"); for (s = n->u.datafield.subfields; s; s = s->next) { size_t using_code_len = get_subfield_len(mt, s->code_data, identifier_length); wrbuf_puts(w, sep); sep = ",\n"; wrbuf_puts(w, "\t\t\t\t\t{\n\t\t\t\t\t\t\""); wrbuf_iconv_json_write(w, mt->iconv_cd, s->code_data, using_code_len); wrbuf_puts(w, "\":\""); wrbuf_iconv_json_puts(w, mt->iconv_cd, s->code_data + using_code_len); wrbuf_puts(w, "\"\n\t\t\t\t\t}"); } wrbuf_puts(w, "\n\t\t\t\t]"); if (n->u.datafield.indicator) { int i; size_t off = 0; for (i = 0; n->u.datafield.indicator[off]; i++) { size_t ilen = cdata_one_character(mt, n->u.datafield.indicator + off); wrbuf_printf(w, ",\n\t\t\t\t\"ind%d\":\"", i + 1); wrbuf_json_write(w, &n->u.datafield.indicator[off], ilen); wrbuf_printf(w, "\""); off += ilen; } } wrbuf_puts(w, "\n\t\t\t}\n"); wrbuf_puts(w, "\n\t\t}"); break; } } wrbuf_puts(w, "\n\t]\n"); wrbuf_puts(w, "}\n"); return 0; } int yaz_marc_decode_wrbuf(yaz_marc_t mt, const char *buf, int bsize, WRBUF wr) { int s, r = yaz_marc_read_iso2709(mt, buf, bsize); if (r <= 0) return r; s = yaz_marc_write_mode(mt, wr); /* returns 0 for OK, -1 otherwise */ if (s != 0) return -1; /* error */ return r; /* OK, return length > 0 */ } int yaz_marc_decode_buf (yaz_marc_t mt, const char *buf, int bsize, const char **result, size_t *rsize) { int r; wrbuf_rewind(mt->m_wr); r = yaz_marc_decode_wrbuf(mt, buf, bsize, mt->m_wr); if (result) *result = wrbuf_cstr(mt->m_wr); if (rsize) *rsize = wrbuf_len(mt->m_wr); return r; } void yaz_marc_xml(yaz_marc_t mt, int xmlmode) { mt->output_format = xmlmode; } void yaz_marc_debug(yaz_marc_t mt, int level) { if (mt) mt->debug = level; } void yaz_marc_iconv(yaz_marc_t mt, yaz_iconv_t cd) { mt->iconv_cd = cd; } yaz_iconv_t yaz_marc_get_iconv(yaz_marc_t mt) { return mt->iconv_cd; } void yaz_marc_modify_leader(yaz_marc_t mt, size_t off, const char *str) { struct yaz_marc_node *n; char *leader = 0; for (n = mt->nodes; n; n = n->next) if (n->which == YAZ_MARC_LEADER) { leader = n->u.leader; memcpy(leader+off, str, strlen(str)); break; } } int yaz_marc_leader_spec(yaz_marc_t mt, const char *leader_spec) { xfree(mt->leader_spec); mt->leader_spec = 0; if (leader_spec) { char dummy_leader[24]; if (marc_exec_leader(leader_spec, dummy_leader, 24)) return -1; mt->leader_spec = xstrdup(leader_spec); } return 0; } static int marc_exec_leader(const char *leader_spec, char *leader, size_t size) { const char *cp = leader_spec; while (cp) { char val[21]; int pos; int no_read = 0, no = 0; no = sscanf(cp, "%d=%20[^,]%n", &pos, val, &no_read); if (no < 2 || no_read < 3) return -1; if (pos < 0 || (size_t) pos >= size) return -1; if (*val == '\'') { const char *vp = strchr(val+1, '\''); size_t len; if (!vp) return -1; len = vp-val-1; if (len + pos > size) return -1; memcpy(leader + pos, val+1, len); } else if (*val >= '0' && *val <= '9') { int ch = atoi(val); leader[pos] = ch; } else return -1; cp += no_read; if (*cp != ',') break; cp++; } return 0; } int yaz_marc_decode_formatstr(const char *arg) { int mode = -1; if (!strcmp(arg, "marc")) mode = YAZ_MARC_ISO2709; if (!strcmp(arg, "marcxml")) mode = YAZ_MARC_MARCXML; if (!strcmp(arg, "turbomarc")) mode = YAZ_MARC_TURBOMARC; if (!strcmp(arg, "marcxchange")) mode = YAZ_MARC_XCHANGE; if (!strcmp(arg, "line")) mode = YAZ_MARC_LINE; if (!strcmp(arg, "json")) mode = YAZ_MARC_JSON; return mode; } void yaz_marc_write_using_libxml2(yaz_marc_t mt, int enable) { mt->write_using_libxml2 = enable; } int yaz_marc_check_marc21_coding(const char *charset, const char *marc_buf, int sz) { if (charset && (!yaz_matchstr(charset, "MARC8?") || !yaz_matchstr(charset, "MARC8")) && marc_buf && sz > 25 && marc_buf[9] == 'a') return 1; return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/options.c0000644000175000017500000000604413265142510011763 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file options.c * \brief Implements command line options parsing */ #if HAVE_CONFIG_H #include #endif #include #include #include static int arg_no = 1; static size_t arg_off = 0; static int eof_options = 0; int options(const char *desc, char **argv, int argc, char **arg) { const char *opt_buf = 0; size_t i = 0; int ch = 0; if (arg_no >= argc) return YAZ_OPTIONS_EOF; if (arg_off == 0) { while (argv[arg_no][0] == '\0') { arg_no++; if (arg_no >= argc) return YAZ_OPTIONS_EOF; } if (argv[arg_no][0] != '-' || argv[arg_no][1] == '\0' || eof_options) { *arg = argv[arg_no++]; return 0; } arg_off++; /* skip - */ } /* we're in option mode */ if (argv[arg_no][1] == '-') { /* long opt */ if (argv[arg_no][2] == '\0') /* -- : end of options */ { eof_options = 1; arg_off = 0; ++arg_no; if (arg_no >= argc) return YAZ_OPTIONS_EOF; *arg = argv[arg_no++]; return 0; } opt_buf = argv[arg_no]+2; arg_off = strlen(argv[arg_no]); } else { /* single char opt */ ch = argv[arg_no][arg_off++]; } while (desc[i]) { int desc_char = desc[i++]; int type = 0; while (desc[i] == '{') { size_t i0 = ++i; while (desc[i] && desc[i] != '}') i++; if (opt_buf && (i - i0) == strlen(opt_buf) && memcmp(opt_buf, desc+i0, i - i0) == 0) ch = desc_char; if (desc[i]) i++; } if (desc[i] == ':') { /* option with string argument */ type = desc[i++]; } if (desc_char == ch) { if (type) /* option with argument */ { if (argv[arg_no][arg_off]) { *arg = argv[arg_no]+arg_off; arg_no++; arg_off = 0; } else { arg_no++; arg_off = 0; if (arg_no < argc) *arg = argv[arg_no++]; else *arg = ""; } } else /* option with no argument */ { if (!argv[arg_no][arg_off]) { arg_off = 0; arg_no++; } } return ch; } } *arg = argv[arg_no]+arg_off-1; arg_no = arg_no + 1; arg_off = 0; return YAZ_OPTIONS_ERROR; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/marc_read_iso2709.c0000644000175000017500000001566013265142510013405 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file marc_read_iso2709.c * \brief Implements reading of MARC as ISO2709 */ #if HAVE_CONFIG_H #include #endif #ifdef WIN32 #include #endif #include #include #include #include #include int yaz_marc_read_iso2709(yaz_marc_t mt, const char *buf, int bsize) { int entry_p; int record_length; int indicator_length; int identifier_length; int end_of_directory; int base_address; int length_data_entry; int length_starting; int length_implementation; yaz_marc_reset(mt); if (!atoi_n_check(buf, 5, &record_length)) { yaz_marc_cprintf(mt, "Bad leader"); return -1; } if (record_length < 25) { yaz_marc_cprintf(mt, "Record length %d < 24", record_length); return -1; } /* ballout if bsize is known and record_length is less than that */ if (bsize != -1 && record_length > bsize) { yaz_marc_cprintf(mt, "Record appears to be larger than buffer %d < %d", record_length, bsize); return -1; } if (yaz_marc_get_debug(mt)) yaz_marc_cprintf(mt, "Record length %5d", record_length); yaz_marc_set_leader(mt, buf, &indicator_length, &identifier_length, &base_address, &length_data_entry, &length_starting, &length_implementation); /* First pass. determine length of directory & base of data */ for (entry_p = 24; buf[entry_p] != ISO2709_FS; ) { /* length of directory entry */ int l = 3 + length_data_entry + length_starting; if (entry_p + l >= record_length) { yaz_marc_cprintf(mt, "Directory offset %d: end of record." " Missing FS char", entry_p); return -1; } if (yaz_marc_get_debug(mt)) { WRBUF hex = wrbuf_alloc(); wrbuf_puts(hex, "Tag "); wrbuf_write_escaped(hex, buf + entry_p, 3); wrbuf_puts(hex, ", length "); wrbuf_write_escaped(hex, buf + entry_p + 3, length_data_entry); wrbuf_puts(hex, ", starting "); wrbuf_write_escaped(hex, buf + entry_p + 3 + length_data_entry, length_starting); yaz_marc_cprintf(mt, "Directory offset %d: %s", entry_p, wrbuf_cstr(hex)); wrbuf_destroy(hex); } /* Check for digits in length+starting info */ while (--l >= 3) if (!yaz_isdigit(buf[entry_p + l])) break; if (l >= 3) { WRBUF hex = wrbuf_alloc(); /* Not all digits, so stop directory scan */ wrbuf_write_escaped(hex, buf + entry_p, length_data_entry + length_starting + 3); yaz_marc_cprintf(mt, "Directory offset %d: Bad value for data" " length and/or length starting (%s)", entry_p, wrbuf_cstr(hex)); wrbuf_destroy(hex); break; } entry_p += 3 + length_data_entry + length_starting; } end_of_directory = entry_p; if (base_address != entry_p+1) { yaz_marc_cprintf(mt, "Base address not at end of directory," " base %d, end %d", base_address, entry_p+1); } /* Second pass. parse control - and datafields */ for (entry_p = 24; entry_p != end_of_directory; ) { int data_length; int data_offset; int end_offset; int i; char tag[4]; int identifier_flag = 0; int entry_p0 = entry_p; memcpy (tag, buf+entry_p, 3); entry_p += 3; tag[3] = '\0'; data_length = atoi_n(buf+entry_p, length_data_entry); entry_p += length_data_entry; data_offset = atoi_n(buf+entry_p, length_starting); entry_p += length_starting; i = data_offset + base_address; end_offset = i+data_length-1; if (data_length <= 0 || data_offset < 0) break; if (yaz_marc_get_debug(mt)) { yaz_marc_cprintf(mt, "Tag: %s. Directory offset %d: data-length %d," " data-offset %d", tag, entry_p0, data_length, data_offset); } if (end_offset >= record_length) { yaz_marc_cprintf(mt, "Directory offset %d: Data out of bounds %d >= %d", entry_p0, end_offset, record_length); break; } if (memcmp (tag, "00", 2)) identifier_flag = 1; /* if not 00X assume subfields */ else if (indicator_length < 4 && indicator_length > 0) { /* Danmarc 00X have subfields */ if (buf[i + indicator_length] == ISO2709_IDFS) identifier_flag = 1; else if (buf[i + indicator_length + 1] == ISO2709_IDFS) identifier_flag = 2; } if (identifier_flag) { /* datafield */ i += identifier_flag-1; if (indicator_length) { int j, i_start = i; for (j = 0; j < indicator_length; j++) i += yaz_marc_sizeof_char(mt, buf + i); yaz_marc_add_datafield(mt, tag, buf + i_start, i - i_start); } while (i < end_offset && buf[i] != ISO2709_RS && buf[i] != ISO2709_FS) { int code_offset = i+1; i ++; while (i < end_offset && buf[i] != ISO2709_RS && buf[i] != ISO2709_IDFS && buf[i] != ISO2709_FS) i++; if (i > code_offset) yaz_marc_add_subfield(mt, buf+code_offset, i - code_offset); } } else { /* controlfield */ int i0 = i; while (i < end_offset && buf[i] != ISO2709_RS && buf[i] != ISO2709_FS) i++; yaz_marc_add_controlfield(mt, tag, buf+i0, i-i0); } if (i < end_offset) { yaz_marc_cprintf(mt, "Separator but not at end of field length=%d", data_length); } if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS) { yaz_marc_cprintf(mt, "No separator at end of field length=%d", data_length); } } return record_length; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-rrf1.c0000644000175000017500000000234413273126163011415 00000000000000/** \file z-rrf1.c \brief ASN.1 Module ResourceReport-Format-Resource-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_ResourceReport1(ODR o, Z_ResourceReport1 **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 1) && odr_sequence_of(o, (Odr_fun) z_Estimate1, &(*p)->estimates, &(*p)->num_estimates, "estimates") && odr_implicit_tag(o, z_InternationalString, &(*p)->message, ODR_CONTEXT, 2, 0, "message") && odr_sequence_end(o); } int z_Estimate1(ODR o, Z_Estimate1 **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_EstimateType, &(*p)->type, ODR_CONTEXT, 1, 0, "type") && odr_implicit_tag(o, odr_integer, &(*p)->value, ODR_CONTEXT, 2, 0, "value") && odr_implicit_tag(o, odr_integer, &(*p)->currency_code, ODR_CONTEXT, 3, 1, "currency_code") && odr_sequence_end(o); } int z_EstimateType(ODR o, Z_EstimateType **p, int opt, const char *name) { return odr_integer (o, p, opt, name); } yaz-5.28.0/src/Makefile.in0000644000175000017500000021264713570011145012177 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(illdatadir)" \ "$(DESTDIR)$(tabdatadir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libyaz_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__objects_1 = oid_std.lo marc8.lo marc8r.lo iso5426.lo diagbib1.lo \ diagsrw.lo diagsru_update.lo z-accdes1.lo z-accform1.lo \ z-acckrb1.lo z-core.lo z-facet-1.lo z-diag1.lo z-espec1.lo \ z-estask.lo z-exp.lo z-grs.lo z-mterm2.lo z-opac.lo z-uifr1.lo \ z-rrf1.lo z-rrf2.lo z-sum.lo z-sutrs.lo z-oclcui.lo \ zes-expi.lo zes-exps.lo zes-order.lo zes-pquery.lo \ zes-psched.lo zes-pset.lo zes-update0.lo z-date.lo z-univ.lo \ zes-update.lo zes-admin.lo z-charneg.lo ill-core.lo \ item-req.lo oclc-ill-req-ext.lo am_libyaz_la_OBJECTS = $(am__objects_1) base64.lo version.lo \ options.lo log.lo cookie.lo marcdisp.lo marc_read_json.lo \ marc_read_xml.lo marc_read_iso2709.lo marc_read_line.lo \ wrbuf.lo wrbuf_sha1.lo malloc_info.lo oid_db.lo errno.lo \ nmemsdup.lo xmalloc.lo readconf.lo tpath.lo nmem.lo \ matchstr.lo atoin.lo siconv.lo utf8.lo ucs4.lo iso5428.lo \ advancegreek.lo odr_bool.lo ber_bool.lo ber_len.lo ber_tag.lo \ odr_util.lo facet.lo odr_null.lo ber_null.lo odr_int.lo \ ber_int.lo odr_tag.lo odr_cons.lo odr_seq.lo odr_oct.lo \ ber_oct.lo odr_bit.lo ber_bit.lo odr_oid.lo ber_oid.lo \ odr_use.lo odr_choice.lo odr_any.lo ber_any.lo odr.lo \ odr_mem.lo dumpber.lo odr_enum.lo comstack.lo tcpip.lo unix.lo \ prt-ext.lo proxunit.lo ill-get.lo zget.lo yaz-ccl.lo \ diag-entry.lo logrpn.lo otherinfo.lo pquery.lo sortspec.lo \ charneg.lo initopt.lo init_diag.lo init_globals.lo zoom-c.lo \ zoom-memcached.lo zoom-z3950.lo zoom-sru.lo zoom-query.lo \ zoom-record-cache.lo zoom-event.lo record_render.lo \ zoom-socket.lo zoom-opt.lo sru_facet.lo grs1disp.lo zgdu.lo \ soap.lo srw.lo srwutil.lo uri.lo solr.lo diag_map.lo \ opac_to_xml.lo xml_add.lo xml_match.lo xml_to_opac.lo \ cclfind.lo ccltoken.lo cclerrms.lo cclqual.lo cclptree.lo \ cclqfile.lo cclstr.lo cclxmlconfig.lo ccl_stop_words.lo cql.lo \ cqlstdio.lo cqltransform.lo cqlutil.lo xcqlutil.lo \ cqlstring.lo cql_sortkeys.lo cql2ccl.lo rpn2cql.lo rpn2solr.lo \ solrtransform.lo cqlstrer.lo querytowrbuf.lo tcpdchk.lo \ test.lo timing.lo xml_get.lo xmlquery.lo xmlerror.lo http.lo \ mime.lo oid_util.lo tokenizer.lo record_conv.lo retrieval.lo \ elementset.lo snprintf.lo query-charset.lo copy_types.lo \ match_glob.lo poll.lo daemon.lo iconv_encode_danmarc.lo \ iconv_encode_marc8.lo iconv_encode_iso_8859_1.lo \ iconv_encode_wchar.lo iconv_decode_marc8.lo \ iconv_decode_iso5426.lo iconv_decode_danmarc.lo sc.lo json.lo \ xml_include.lo file_glob.lo dirent.lo mutex.lo condvar.lo \ thread_id.lo gettimeofday.lo thread_create.lo spipe.lo url.lo \ backtrace.lo libyaz_la_OBJECTS = $(am_libyaz_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libyaz_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libyaz_la_LDFLAGS) $(LDFLAGS) -o $@ libyaz_icu_la_DEPENDENCIES = libyaz.la $(am__DEPENDENCIES_1) am__dirstamp = $(am__leading_dot)dirstamp am__objects_2 = \ ../libstemmer_c/libstemmer/libyaz_icu_la-libstemmer.lo \ ../libstemmer_c/runtime/libyaz_icu_la-api.lo \ ../libstemmer_c/runtime/libyaz_icu_la-utilities.lo \ ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_porter.lo \ ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_english.lo am_libyaz_icu_la_OBJECTS = libyaz_icu_la-icu_chain.lo \ libyaz_icu_la-icu_utf16.lo libyaz_icu_la-icu_utf8.lo \ libyaz_icu_la-stemmer.lo libyaz_icu_la-icu_transform.lo \ libyaz_icu_la-icu_casemap.lo libyaz_icu_la-icu_tokenizer.lo \ libyaz_icu_la-icu_sortkey.lo $(am__objects_2) libyaz_icu_la_OBJECTS = $(am_libyaz_icu_la_OBJECTS) libyaz_icu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libyaz_icu_la_LDFLAGS) $(LDFLAGS) -o $@ libyaz_server_la_DEPENDENCIES = libyaz.la am_libyaz_server_la_OBJECTS = statserv.lo seshigh.lo eventl.lo \ requestq.lo libyaz_server_la_OBJECTS = $(am_libyaz_server_la_OBJECTS) libyaz_server_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libyaz_server_la_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = YLWRAP = $(top_srcdir)/config/ylwrap SOURCES = $(libyaz_la_SOURCES) $(libyaz_icu_la_SOURCES) \ $(libyaz_server_la_SOURCES) DIST_SOURCES = $(libyaz_la_SOURCES) $(libyaz_icu_la_SOURCES) \ $(libyaz_server_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(illdata_DATA) $(tabdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \ $(top_srcdir)/config/ylwrap cql.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HIREDIS_LIBS = @HIREDIS_LIBS@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MEMCACHED_LIBS = @MEMCACHED_LIBS@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ YAZ_VERSION_INFO = 5:0:0 lib_LTLIBRARIES = libyaz.la libyaz_server.la libyaz_icu.la tabdatadir = $(pkgdatadir)/z39.50 tabdata_DATA = datetime.asn esupdate.asn univres.asn z3950v3.asn z.tcl \ esadmin.asn charneg-3.asn mterm2.asn oclcui.asn facet.asn illdatadir = $(pkgdatadir)/ill illdata_DATA = ill9702.asn item-req.asn ill.tcl oclc-ill-req-ext.asn EXTRA_DIST = $(tabdata_DATA) $(illdata_DATA) \ charconv.tcl codetables.xml codetables-iso5426.xml \ csvtodiag.tcl bib1.csv srw.csv \ csvtosru_update.tcl sru_update.csv \ oidtoc.tcl oid.csv sc_test.c YAZCOMP = $(top_srcdir)/util/yaz-asncomp YAZCOMP_Z = $(YAZCOMP) -d $(srcdir)/z.tcl -i yaz -I$(top_srcdir)/include YAZCOMP_I = $(YAZCOMP) -d $(srcdir)/ill.tcl -i yaz -I$(top_srcdir)/include AM_CPPFLAGS = -I$(top_srcdir)/include $(XML2_CFLAGS) $(SSL_CFLAGS) libyaz_la_LIBADD = $(SSL_LIBS) $(TCPD_LIBS) \ $(MEMCACHED_LIBS) $(HIREDIS_LIBS) libyaz_server_la_LIBADD = libyaz.la libyaz_icu_la_CPPFLAGS = $(AM_CPPFLAGS) $(ICU_CPPFLAGS) -I$(top_srcdir)/libstemmer_c/include libyaz_icu_la_LIBADD = libyaz.la $(ICU_LIBS) AM_YFLAGS = -p cql_ # Auto-generated C-files GEN_FILES = oid_std.c \ marc8.c marc8r.c iso5426.c \ diagbib1.c diagsrw.c diagsru_update.c \ z-accdes1.c z-accform1.c z-acckrb1.c z-core.c z-facet-1.c \ z-diag1.c z-espec1.c z-estask.c z-exp.c z-grs.c z-mterm2.c z-opac.c \ z-uifr1.c z-rrf1.c z-rrf2.c z-sum.c z-sutrs.c z-oclcui.c\ zes-expi.c zes-exps.c zes-order.c zes-pquery.c zes-psched.c \ zes-pset.c zes-update0.c z-date.c z-univ.c zes-update.c zes-admin.c \ z-charneg.c \ ill-core.c item-req.c oclc-ill-req-ext.c libyaz_la_SOURCES = $(GEN_FILES) \ base64.c version.c options.c log.c \ cookie.c marcdisp.c \ marc_read_json.c marc_read_xml.c marc_read_iso2709.c marc_read_line.c \ wrbuf.c wrbuf_sha1.c malloc_info.c oid_db.c errno.c \ nmemsdup.c xmalloc.c readconf.c tpath.c nmem.c matchstr.c atoin.c \ siconv.c iconv-p.h utf8.c ucs4.c iso5428.c advancegreek.c \ odr_bool.c ber_bool.c ber_len.c ber_tag.c odr_util.c facet.c \ odr_null.c ber_null.c odr_int.c ber_int.c odr_tag.c odr_cons.c \ odr_seq.c odr_oct.c ber_oct.c odr_bit.c ber_bit.c odr_oid.c \ ber_oid.c odr_use.c odr_choice.c odr_any.c ber_any.c odr.c odr_mem.c \ dumpber.c odr_enum.c odr-priv.h \ comstack.c tcpip.c unix.c \ prt-ext.c \ proxunit.c \ ill-get.c \ zget.c yaz-ccl.c diag-entry.c diag-entry.h \ logrpn.c \ otherinfo.c pquery.c sortspec.c charneg.c initopt.c init_diag.c \ init_globals.c \ zoom-c.c zoom-memcached.c zoom-z3950.c zoom-sru.c zoom-query.c \ zoom-record-cache.c zoom-event.c \ record_render.c zoom-socket.c zoom-opt.c zoom-p.h sru_facet.c sru-p.h \ grs1disp.c zgdu.c soap.c srw.c srwutil.c uri.c solr.c diag_map.c \ opac_to_xml.c xml_add.c xml_match.c xml_to_opac.c \ cclfind.c ccltoken.c cclerrms.c cclqual.c cclptree.c cclp.h \ cclqfile.c cclstr.c cclxmlconfig.c ccl_stop_words.c \ cql.y cqlstdio.c cqltransform.c cqlutil.c xcqlutil.c cqlstring.c \ cql_sortkeys.c cql2ccl.c rpn2cql.c \ rpn2solr.c solrtransform.c \ cqlstrer.c querytowrbuf.c \ tcpdchk.c \ test.c timing.c \ xml_get.c xmlquery.c xmlerror.c http.c \ mime.c mime.h oid_util.c tokenizer.c \ record_conv.c retrieval.c elementset.c snprintf.c query-charset.c \ copy_types.c match_glob.c poll.c daemon.c iconv_encode_danmarc.c \ iconv_encode_marc8.c iconv_encode_iso_8859_1.c iconv_encode_wchar.c \ iconv_decode_marc8.c iconv_decode_iso5426.c iconv_decode_danmarc.c sc.c \ json.c xml_include.c file_glob.c dirent.c mutex-p.h mutex.c condvar.c \ thread_id.c gettimeofday.c thread_create.c spipe.c url.c backtrace.c libyaz_la_LDFLAGS = -version-info $(YAZ_VERSION_INFO) libyaz_server_la_SOURCES = statserv.c seshigh.c eventl.c \ requestq.c eventl.h session.h libyaz_server_la_LDFLAGS = -version-info $(YAZ_VERSION_INFO) STEMMER_SOURCES = \ ../libstemmer_c/include/libstemmer.h \ ../libstemmer_c/libstemmer/libstemmer.c \ ../libstemmer_c/libstemmer/modules.h \ ../libstemmer_c/runtime/api.c \ ../libstemmer_c/runtime/api.h \ ../libstemmer_c/runtime/header.h \ ../libstemmer_c/runtime/utilities.c \ ../libstemmer_c/src_c/stem_UTF_8_porter.c \ ../libstemmer_c/src_c/stem_UTF_8_porter.h \ ../libstemmer_c/src_c/stem_UTF_8_english.c \ ../libstemmer_c/src_c/stem_UTF_8_english.h libyaz_icu_la_SOURCES = icu_chain.c icu_utf16.c icu_utf8.c stemmer.c \ icu_transform.c icu_casemap.c icu_tokenizer.c icu_sortkey.c \ $(STEMMER_SOURCES) libyaz_icu_la_LDFLAGS = -version-info $(YAZ_VERSION_INFO) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj .y $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libyaz.la: $(libyaz_la_OBJECTS) $(libyaz_la_DEPENDENCIES) $(EXTRA_libyaz_la_DEPENDENCIES) $(AM_V_CCLD)$(libyaz_la_LINK) -rpath $(libdir) $(libyaz_la_OBJECTS) $(libyaz_la_LIBADD) $(LIBS) ../libstemmer_c/libstemmer/$(am__dirstamp): @$(MKDIR_P) ../libstemmer_c/libstemmer @: > ../libstemmer_c/libstemmer/$(am__dirstamp) ../libstemmer_c/libstemmer/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ../libstemmer_c/libstemmer/$(DEPDIR) @: > ../libstemmer_c/libstemmer/$(DEPDIR)/$(am__dirstamp) ../libstemmer_c/libstemmer/libyaz_icu_la-libstemmer.lo: \ ../libstemmer_c/libstemmer/$(am__dirstamp) \ ../libstemmer_c/libstemmer/$(DEPDIR)/$(am__dirstamp) ../libstemmer_c/runtime/$(am__dirstamp): @$(MKDIR_P) ../libstemmer_c/runtime @: > ../libstemmer_c/runtime/$(am__dirstamp) ../libstemmer_c/runtime/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ../libstemmer_c/runtime/$(DEPDIR) @: > ../libstemmer_c/runtime/$(DEPDIR)/$(am__dirstamp) ../libstemmer_c/runtime/libyaz_icu_la-api.lo: \ ../libstemmer_c/runtime/$(am__dirstamp) \ ../libstemmer_c/runtime/$(DEPDIR)/$(am__dirstamp) ../libstemmer_c/runtime/libyaz_icu_la-utilities.lo: \ ../libstemmer_c/runtime/$(am__dirstamp) \ ../libstemmer_c/runtime/$(DEPDIR)/$(am__dirstamp) ../libstemmer_c/src_c/$(am__dirstamp): @$(MKDIR_P) ../libstemmer_c/src_c @: > ../libstemmer_c/src_c/$(am__dirstamp) ../libstemmer_c/src_c/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ../libstemmer_c/src_c/$(DEPDIR) @: > ../libstemmer_c/src_c/$(DEPDIR)/$(am__dirstamp) ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_porter.lo: \ ../libstemmer_c/src_c/$(am__dirstamp) \ ../libstemmer_c/src_c/$(DEPDIR)/$(am__dirstamp) ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_english.lo: \ ../libstemmer_c/src_c/$(am__dirstamp) \ ../libstemmer_c/src_c/$(DEPDIR)/$(am__dirstamp) libyaz_icu.la: $(libyaz_icu_la_OBJECTS) $(libyaz_icu_la_DEPENDENCIES) $(EXTRA_libyaz_icu_la_DEPENDENCIES) $(AM_V_CCLD)$(libyaz_icu_la_LINK) -rpath $(libdir) $(libyaz_icu_la_OBJECTS) $(libyaz_icu_la_LIBADD) $(LIBS) libyaz_server.la: $(libyaz_server_la_OBJECTS) $(libyaz_server_la_DEPENDENCIES) $(EXTRA_libyaz_server_la_DEPENDENCIES) $(AM_V_CCLD)$(libyaz_server_la_LINK) -rpath $(libdir) $(libyaz_server_la_OBJECTS) $(libyaz_server_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../libstemmer_c/libstemmer/*.$(OBJEXT) -rm -f ../libstemmer_c/libstemmer/*.lo -rm -f ../libstemmer_c/runtime/*.$(OBJEXT) -rm -f ../libstemmer_c/runtime/*.lo -rm -f ../libstemmer_c/src_c/*.$(OBJEXT) -rm -f ../libstemmer_c/src_c/*.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@../libstemmer_c/libstemmer/$(DEPDIR)/libyaz_icu_la-libstemmer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@../libstemmer_c/runtime/$(DEPDIR)/libyaz_icu_la-api.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@../libstemmer_c/runtime/$(DEPDIR)/libyaz_icu_la-utilities.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@../libstemmer_c/src_c/$(DEPDIR)/libyaz_icu_la-stem_UTF_8_english.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@../libstemmer_c/src_c/$(DEPDIR)/libyaz_icu_la-stem_UTF_8_porter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/advancegreek.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atoin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backtrace.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ber_any.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ber_bit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ber_bool.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ber_int.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ber_len.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ber_null.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ber_oct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ber_oid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ber_tag.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccl_stop_words.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cclerrms.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cclfind.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cclptree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cclqfile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cclqual.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cclstr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccltoken.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cclxmlconfig.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/charneg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comstack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/condvar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cookie.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy_types.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cql.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cql2ccl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cql_sortkeys.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cqlstdio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cqlstrer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cqlstring.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cqltransform.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cqlutil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diag-entry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diag_map.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diagbib1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diagsru_update.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diagsrw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dumpber.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errno.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eventl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/facet.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_glob.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grs1disp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconv_decode_danmarc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconv_decode_iso5426.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconv_decode_marc8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconv_encode_danmarc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconv_encode_iso_8859_1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconv_encode_marc8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconv_encode_wchar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ill-core.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ill-get.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init_diag.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init_globals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/initopt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso5426.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso5428.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/item-req.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/json.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libyaz_icu_la-icu_casemap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libyaz_icu_la-icu_chain.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libyaz_icu_la-icu_sortkey.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libyaz_icu_la-icu_tokenizer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libyaz_icu_la-icu_transform.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libyaz_icu_la-icu_utf16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libyaz_icu_la-icu_utf8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libyaz_icu_la-stemmer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logrpn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc_info.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marc8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marc8r.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marc_read_iso2709.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marc_read_json.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marc_read_line.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marc_read_xml.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marcdisp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/match_glob.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matchstr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmemsdup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oclc-ill-req-ext.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_any.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_bit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_bool.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_choice.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_cons.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_enum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_int.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_mem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_null.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_oct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_oid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_seq.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_tag.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_use.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odr_util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oid_db.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oid_std.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oid_util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opac_to_xml.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otherinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poll.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pquery.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxunit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prt-ext.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/query-charset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/querytowrbuf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readconf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/record_conv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/record_render.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/requestq.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/retrieval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpn2cql.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpn2solr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seshigh.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siconv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/soap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solrtransform.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sortspec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spipe.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sru_facet.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srwutil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statserv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcpdchk.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcpip.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread_create.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread_id.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tokenizer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tpath.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ucs4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uri.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrbuf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrbuf_sha1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xcqlutil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_add.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_get.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_include.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_match.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_to_opac.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlerror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlquery.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yaz-ccl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-accdes1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-accform1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-acckrb1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-charneg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-core.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-date.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-diag1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-espec1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-estask.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-exp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-facet-1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-grs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-mterm2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-oclcui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-opac.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-rrf1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-rrf2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-sum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-sutrs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-uifr1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z-univ.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zes-admin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zes-expi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zes-exps.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zes-order.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zes-pquery.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zes-psched.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zes-pset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zes-update.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zes-update0.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zgdu.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zget.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-event.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-memcached.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-opt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-query.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-record-cache.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-socket.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-sru.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-z3950.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libyaz_icu_la-icu_chain.lo: icu_chain.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libyaz_icu_la-icu_chain.lo -MD -MP -MF $(DEPDIR)/libyaz_icu_la-icu_chain.Tpo -c -o libyaz_icu_la-icu_chain.lo `test -f 'icu_chain.c' || echo '$(srcdir)/'`icu_chain.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libyaz_icu_la-icu_chain.Tpo $(DEPDIR)/libyaz_icu_la-icu_chain.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icu_chain.c' object='libyaz_icu_la-icu_chain.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libyaz_icu_la-icu_chain.lo `test -f 'icu_chain.c' || echo '$(srcdir)/'`icu_chain.c libyaz_icu_la-icu_utf16.lo: icu_utf16.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libyaz_icu_la-icu_utf16.lo -MD -MP -MF $(DEPDIR)/libyaz_icu_la-icu_utf16.Tpo -c -o libyaz_icu_la-icu_utf16.lo `test -f 'icu_utf16.c' || echo '$(srcdir)/'`icu_utf16.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libyaz_icu_la-icu_utf16.Tpo $(DEPDIR)/libyaz_icu_la-icu_utf16.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icu_utf16.c' object='libyaz_icu_la-icu_utf16.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libyaz_icu_la-icu_utf16.lo `test -f 'icu_utf16.c' || echo '$(srcdir)/'`icu_utf16.c libyaz_icu_la-icu_utf8.lo: icu_utf8.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libyaz_icu_la-icu_utf8.lo -MD -MP -MF $(DEPDIR)/libyaz_icu_la-icu_utf8.Tpo -c -o libyaz_icu_la-icu_utf8.lo `test -f 'icu_utf8.c' || echo '$(srcdir)/'`icu_utf8.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libyaz_icu_la-icu_utf8.Tpo $(DEPDIR)/libyaz_icu_la-icu_utf8.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icu_utf8.c' object='libyaz_icu_la-icu_utf8.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libyaz_icu_la-icu_utf8.lo `test -f 'icu_utf8.c' || echo '$(srcdir)/'`icu_utf8.c libyaz_icu_la-stemmer.lo: stemmer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libyaz_icu_la-stemmer.lo -MD -MP -MF $(DEPDIR)/libyaz_icu_la-stemmer.Tpo -c -o libyaz_icu_la-stemmer.lo `test -f 'stemmer.c' || echo '$(srcdir)/'`stemmer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libyaz_icu_la-stemmer.Tpo $(DEPDIR)/libyaz_icu_la-stemmer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stemmer.c' object='libyaz_icu_la-stemmer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libyaz_icu_la-stemmer.lo `test -f 'stemmer.c' || echo '$(srcdir)/'`stemmer.c libyaz_icu_la-icu_transform.lo: icu_transform.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libyaz_icu_la-icu_transform.lo -MD -MP -MF $(DEPDIR)/libyaz_icu_la-icu_transform.Tpo -c -o libyaz_icu_la-icu_transform.lo `test -f 'icu_transform.c' || echo '$(srcdir)/'`icu_transform.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libyaz_icu_la-icu_transform.Tpo $(DEPDIR)/libyaz_icu_la-icu_transform.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icu_transform.c' object='libyaz_icu_la-icu_transform.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libyaz_icu_la-icu_transform.lo `test -f 'icu_transform.c' || echo '$(srcdir)/'`icu_transform.c libyaz_icu_la-icu_casemap.lo: icu_casemap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libyaz_icu_la-icu_casemap.lo -MD -MP -MF $(DEPDIR)/libyaz_icu_la-icu_casemap.Tpo -c -o libyaz_icu_la-icu_casemap.lo `test -f 'icu_casemap.c' || echo '$(srcdir)/'`icu_casemap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libyaz_icu_la-icu_casemap.Tpo $(DEPDIR)/libyaz_icu_la-icu_casemap.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icu_casemap.c' object='libyaz_icu_la-icu_casemap.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libyaz_icu_la-icu_casemap.lo `test -f 'icu_casemap.c' || echo '$(srcdir)/'`icu_casemap.c libyaz_icu_la-icu_tokenizer.lo: icu_tokenizer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libyaz_icu_la-icu_tokenizer.lo -MD -MP -MF $(DEPDIR)/libyaz_icu_la-icu_tokenizer.Tpo -c -o libyaz_icu_la-icu_tokenizer.lo `test -f 'icu_tokenizer.c' || echo '$(srcdir)/'`icu_tokenizer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libyaz_icu_la-icu_tokenizer.Tpo $(DEPDIR)/libyaz_icu_la-icu_tokenizer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icu_tokenizer.c' object='libyaz_icu_la-icu_tokenizer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libyaz_icu_la-icu_tokenizer.lo `test -f 'icu_tokenizer.c' || echo '$(srcdir)/'`icu_tokenizer.c libyaz_icu_la-icu_sortkey.lo: icu_sortkey.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libyaz_icu_la-icu_sortkey.lo -MD -MP -MF $(DEPDIR)/libyaz_icu_la-icu_sortkey.Tpo -c -o libyaz_icu_la-icu_sortkey.lo `test -f 'icu_sortkey.c' || echo '$(srcdir)/'`icu_sortkey.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libyaz_icu_la-icu_sortkey.Tpo $(DEPDIR)/libyaz_icu_la-icu_sortkey.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icu_sortkey.c' object='libyaz_icu_la-icu_sortkey.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libyaz_icu_la-icu_sortkey.lo `test -f 'icu_sortkey.c' || echo '$(srcdir)/'`icu_sortkey.c ../libstemmer_c/libstemmer/libyaz_icu_la-libstemmer.lo: ../libstemmer_c/libstemmer/libstemmer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libstemmer_c/libstemmer/libyaz_icu_la-libstemmer.lo -MD -MP -MF ../libstemmer_c/libstemmer/$(DEPDIR)/libyaz_icu_la-libstemmer.Tpo -c -o ../libstemmer_c/libstemmer/libyaz_icu_la-libstemmer.lo `test -f '../libstemmer_c/libstemmer/libstemmer.c' || echo '$(srcdir)/'`../libstemmer_c/libstemmer/libstemmer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libstemmer_c/libstemmer/$(DEPDIR)/libyaz_icu_la-libstemmer.Tpo ../libstemmer_c/libstemmer/$(DEPDIR)/libyaz_icu_la-libstemmer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libstemmer_c/libstemmer/libstemmer.c' object='../libstemmer_c/libstemmer/libyaz_icu_la-libstemmer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libstemmer_c/libstemmer/libyaz_icu_la-libstemmer.lo `test -f '../libstemmer_c/libstemmer/libstemmer.c' || echo '$(srcdir)/'`../libstemmer_c/libstemmer/libstemmer.c ../libstemmer_c/runtime/libyaz_icu_la-api.lo: ../libstemmer_c/runtime/api.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libstemmer_c/runtime/libyaz_icu_la-api.lo -MD -MP -MF ../libstemmer_c/runtime/$(DEPDIR)/libyaz_icu_la-api.Tpo -c -o ../libstemmer_c/runtime/libyaz_icu_la-api.lo `test -f '../libstemmer_c/runtime/api.c' || echo '$(srcdir)/'`../libstemmer_c/runtime/api.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libstemmer_c/runtime/$(DEPDIR)/libyaz_icu_la-api.Tpo ../libstemmer_c/runtime/$(DEPDIR)/libyaz_icu_la-api.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libstemmer_c/runtime/api.c' object='../libstemmer_c/runtime/libyaz_icu_la-api.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libstemmer_c/runtime/libyaz_icu_la-api.lo `test -f '../libstemmer_c/runtime/api.c' || echo '$(srcdir)/'`../libstemmer_c/runtime/api.c ../libstemmer_c/runtime/libyaz_icu_la-utilities.lo: ../libstemmer_c/runtime/utilities.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libstemmer_c/runtime/libyaz_icu_la-utilities.lo -MD -MP -MF ../libstemmer_c/runtime/$(DEPDIR)/libyaz_icu_la-utilities.Tpo -c -o ../libstemmer_c/runtime/libyaz_icu_la-utilities.lo `test -f '../libstemmer_c/runtime/utilities.c' || echo '$(srcdir)/'`../libstemmer_c/runtime/utilities.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libstemmer_c/runtime/$(DEPDIR)/libyaz_icu_la-utilities.Tpo ../libstemmer_c/runtime/$(DEPDIR)/libyaz_icu_la-utilities.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libstemmer_c/runtime/utilities.c' object='../libstemmer_c/runtime/libyaz_icu_la-utilities.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libstemmer_c/runtime/libyaz_icu_la-utilities.lo `test -f '../libstemmer_c/runtime/utilities.c' || echo '$(srcdir)/'`../libstemmer_c/runtime/utilities.c ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_porter.lo: ../libstemmer_c/src_c/stem_UTF_8_porter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_porter.lo -MD -MP -MF ../libstemmer_c/src_c/$(DEPDIR)/libyaz_icu_la-stem_UTF_8_porter.Tpo -c -o ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_porter.lo `test -f '../libstemmer_c/src_c/stem_UTF_8_porter.c' || echo '$(srcdir)/'`../libstemmer_c/src_c/stem_UTF_8_porter.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libstemmer_c/src_c/$(DEPDIR)/libyaz_icu_la-stem_UTF_8_porter.Tpo ../libstemmer_c/src_c/$(DEPDIR)/libyaz_icu_la-stem_UTF_8_porter.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libstemmer_c/src_c/stem_UTF_8_porter.c' object='../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_porter.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_porter.lo `test -f '../libstemmer_c/src_c/stem_UTF_8_porter.c' || echo '$(srcdir)/'`../libstemmer_c/src_c/stem_UTF_8_porter.c ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_english.lo: ../libstemmer_c/src_c/stem_UTF_8_english.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_english.lo -MD -MP -MF ../libstemmer_c/src_c/$(DEPDIR)/libyaz_icu_la-stem_UTF_8_english.Tpo -c -o ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_english.lo `test -f '../libstemmer_c/src_c/stem_UTF_8_english.c' || echo '$(srcdir)/'`../libstemmer_c/src_c/stem_UTF_8_english.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libstemmer_c/src_c/$(DEPDIR)/libyaz_icu_la-stem_UTF_8_english.Tpo ../libstemmer_c/src_c/$(DEPDIR)/libyaz_icu_la-stem_UTF_8_english.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libstemmer_c/src_c/stem_UTF_8_english.c' object='../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_english.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libyaz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libstemmer_c/src_c/libyaz_icu_la-stem_UTF_8_english.lo `test -f '../libstemmer_c/src_c/stem_UTF_8_english.c' || echo '$(srcdir)/'`../libstemmer_c/src_c/stem_UTF_8_english.c .y.c: $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf ../libstemmer_c/libstemmer/.libs ../libstemmer_c/libstemmer/_libs -rm -rf ../libstemmer_c/runtime/.libs ../libstemmer_c/runtime/_libs -rm -rf ../libstemmer_c/src_c/.libs ../libstemmer_c/src_c/_libs install-illdataDATA: $(illdata_DATA) @$(NORMAL_INSTALL) @list='$(illdata_DATA)'; test -n "$(illdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(illdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(illdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(illdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(illdatadir)" || exit $$?; \ done uninstall-illdataDATA: @$(NORMAL_UNINSTALL) @list='$(illdata_DATA)'; test -n "$(illdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(illdatadir)'; $(am__uninstall_files_from_dir) install-tabdataDATA: $(tabdata_DATA) @$(NORMAL_INSTALL) @list='$(tabdata_DATA)'; test -n "$(tabdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(tabdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(tabdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tabdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(tabdatadir)" || exit $$?; \ done uninstall-tabdataDATA: @$(NORMAL_UNINSTALL) @list='$(tabdata_DATA)'; test -n "$(tabdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(tabdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(illdatadir)" "$(DESTDIR)$(tabdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f ../libstemmer_c/libstemmer/$(DEPDIR)/$(am__dirstamp) -rm -f ../libstemmer_c/libstemmer/$(am__dirstamp) -rm -f ../libstemmer_c/runtime/$(DEPDIR)/$(am__dirstamp) -rm -f ../libstemmer_c/runtime/$(am__dirstamp) -rm -f ../libstemmer_c/src_c/$(DEPDIR)/$(am__dirstamp) -rm -f ../libstemmer_c/src_c/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f cql.c clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ../libstemmer_c/libstemmer/$(DEPDIR) ../libstemmer_c/runtime/$(DEPDIR) ../libstemmer_c/src_c/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-illdataDATA install-tabdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ../libstemmer_c/libstemmer/$(DEPDIR) ../libstemmer_c/runtime/$(DEPDIR) ../libstemmer_c/src_c/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-illdataDATA uninstall-libLTLIBRARIES \ uninstall-tabdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am dist-hook distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-illdataDATA install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip install-tabdataDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-illdataDATA \ uninstall-libLTLIBRARIES uninstall-tabdataDATA .PRECIOUS: Makefile dist-hook: test -f $(srcdir)/cql.c || exit 1 # MARC8->UTF8 conversion is generated from codetables.xml marc8.c: charconv.tcl codetables.xml $(TCLSH) $(srcdir)/charconv.tcl -p marc8 $(srcdir)/codetables.xml -o $@ # UTF-8->MARC8 conversion is generated from codetables.xml marc8r.c: charconv.tcl codetables.xml $(TCLSH) $(srcdir)/charconv.tcl -r -p marc8r $(srcdir)/codetables.xml -o $@ # ISO5426->UTF8 conversion is generated from codetables-iso5426.xml iso5426.c: charconv.tcl codetables-iso5426.xml $(TCLSH) $(srcdir)/charconv.tcl -p iso5426 $(srcdir)/codetables-iso5426.xml -o $@ # Generate OID database from CSV oid_std.c $(top_srcdir)/include/yaz/oid_std.h: oidtoc.tcl oid.csv $(TCLSH) $(srcdir)/oidtoc.tcl $(srcdir) $(srcdir)/oid.csv oid_std.c oid_std.h # Generate diagnostics from CSVs diagbib1.c $(top_srcdir)/include/yaz/diagbib1.h: bib1.csv $(TCLSH) $(srcdir)/csvtodiag.tcl $(srcdir)/bib1.csv $(srcdir)/diagbib1.c $(top_srcdir)/include/yaz/diagbib1.h bib1 diagbib1_str diagsrw.c $(top_srcdir)/include/yaz/diagsrw.h: srw.csv $(TCLSH) $(srcdir)/csvtodiag.tcl $(srcdir)/srw.csv $(srcdir)/diagsrw.c $(top_srcdir)/include/yaz/diagsrw.h srw diagsru_update.c $(top_srcdir)/include/yaz/diagsru_update.h: csvtosru_update.tcl sru_update.csv $(TCLSH) $(srcdir)/csvtosru_update.tcl $(srcdir) # Rules for Z39.50 V3 z-accdes1.c \ z-accform1.c \ z-acckrb1.c \ z-diag1.c \ z-espec1.c \ z-estask.c \ z-exp.c \ z-grs.c \ z-opac.c \ z-uifr1.c \ z-rrf1.c \ z-rrf2.c \ z-sum.c \ z-sutrs.c \ zes-expi.c \ zes-exps.c \ zes-order.c \ zes-pquery.c \ zes-psched.c \ zes-pset.c \ zes-update0.c \ $(top_srcdir)/include/yaz/z-accdes1.h \ $(top_srcdir)/include/yaz/z-core.h: z-core.c z-core.c: $(srcdir)/z.tcl $(srcdir)/z3950v3.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/z3950v3.asn # Date extension z-date.c \ $(top_srcdir)/include/yaz/z-date.h: $(srcdir)/z.tcl $(srcdir)/datetime.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/datetime.asn # UNIverse extension z-univ.c \ $(top_srcdir)/include/yaz/z-univ.h: \ $(srcdir)/z.tcl $(srcdir)/univres.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/univres.asn # New Update extended service zes-update.c \ $(top_srcdir)/include/yaz/zes-update.h: \ $(srcdir)/z.tcl $(srcdir)/esupdate.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/esupdate.asn # Admin extended service zes-admin.c \ $(top_srcdir)/include/yaz/zes-admin.h: \ $(srcdir)/z.tcl $(srcdir)/esadmin.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/esadmin.asn # Charset negotiation z-charneg.c \ $(top_srcdir)/include/yaz/z-charneg.h: \ $(srcdir)/z.tcl $(srcdir)/charneg-3.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/charneg-3.asn # UserInfoFormat-multipleSearchTerms-2 z-mterm2.c \ $(top_srcdir)/include/yaz/z-mterm2.h: \ $(srcdir)/z.tcl $(srcdir)/mterm2.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/mterm2.asn # UserInfoFormat-multipleSearchTerms-2 z-oclcui.c \ $(top_srcdir)/include/yaz/z-oclcui.h: \ $(srcdir)/z.tcl $(srcdir)/oclcui.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/oclcui.asn # UserInfoFormat-facet-1 z-facet-1.c \ $(top_srcdir)/include/yaz/z-facet-1.h: $(srcdir)/facet.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/facet.asn # ILL protocol ill-core.c \ $(top_srcdir)/include/yaz/ill-core.h: \ $(srcdir)/ill.tcl $(srcdir)/ill9702.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_I) $(srcdir)/ill9702.asn # OCLC ILL Request Extension oclc-ill-req-ext.c \ $(top_srcdir)/include/yaz/oclc-ill-req-ext.h: \ $(srcdir)/ill.tcl $(srcdir)/oclc-ill-req-ext.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_I) $(srcdir)/oclc-ill-req-ext.asn # Item Request item-req.c \ $(top_srcdir)/include/yaz/item-req.h: \ $(srcdir)/ill.tcl $(srcdir)/item-req.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_I) $(srcdir)/item-req.asn # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-5.28.0/src/z-accdes1.c0000644000175000017500000000232513273126163012045 00000000000000/** \file z-accdes1.c \brief ASN.1 Module AccessControlFormat-des-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_DES_RN_Object(ODR o, Z_DES_RN_Object **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DES_RN_Object_challenge, (Odr_fun) z_DRNType, "challenge"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_DES_RN_Object_response, (Odr_fun) z_DRNType, "response"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_DRNType(ODR o, Z_DRNType **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_octetstring, &(*p)->userId, ODR_CONTEXT, 1, 1, "userId") && odr_implicit_tag(o, odr_octetstring, &(*p)->salt, ODR_CONTEXT, 2, 1, "salt") && odr_implicit_tag(o, odr_octetstring, &(*p)->randomNumber, ODR_CONTEXT, 3, 0, "randomNumber") && odr_sequence_end(o); } yaz-5.28.0/src/z-sum.c0000644000175000017500000000443513273126163011352 00000000000000/** \file z-sum.c \brief ASN.1 Module RecordSyntax-summary Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_BriefBib(ODR o, Z_BriefBib **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->title, ODR_CONTEXT, 1, 0, "title") && odr_implicit_tag(o, z_InternationalString, &(*p)->author, ODR_CONTEXT, 2, 1, "author") && odr_implicit_tag(o, z_InternationalString, &(*p)->callNumber, ODR_CONTEXT, 3, 1, "callNumber") && odr_implicit_tag(o, z_InternationalString, &(*p)->recordType, ODR_CONTEXT, 4, 1, "recordType") && odr_implicit_tag(o, z_InternationalString, &(*p)->bibliographicLevel, ODR_CONTEXT, 5, 1, "bibliographicLevel") && odr_implicit_settag(o, ODR_CONTEXT, 6) && (odr_sequence_of(o, (Odr_fun) z_FormatSpec, &(*p)->format, &(*p)->num_format, "format") || odr_ok(o)) && odr_implicit_tag(o, z_InternationalString, &(*p)->publicationPlace, ODR_CONTEXT, 7, 1, "publicationPlace") && odr_implicit_tag(o, z_InternationalString, &(*p)->publicationDate, ODR_CONTEXT, 8, 1, "publicationDate") && odr_implicit_tag(o, z_InternationalString, &(*p)->targetSystemKey, ODR_CONTEXT, 9, 1, "targetSystemKey") && odr_implicit_tag(o, z_InternationalString, &(*p)->satisfyingElement, ODR_CONTEXT, 10, 1, "satisfyingElement") && odr_implicit_tag(o, odr_integer, &(*p)->rank, ODR_CONTEXT, 11, 1, "rank") && odr_implicit_tag(o, z_InternationalString, &(*p)->documentId, ODR_CONTEXT, 12, 1, "documentId") && odr_implicit_tag(o, z_InternationalString, &(*p)->abstract, ODR_CONTEXT, 13, 1, "abstract") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_FormatSpec(ODR o, Z_FormatSpec **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->type, ODR_CONTEXT, 1, 0, "type") && odr_implicit_tag(o, odr_integer, &(*p)->size, ODR_CONTEXT, 2, 1, "size") && odr_implicit_tag(o, odr_integer, &(*p)->bestPosn, ODR_CONTEXT, 3, 1, "bestPosn") && odr_sequence_end(o); } yaz-5.28.0/src/malloc_info.c0000644000175000017500000000155013265142510012547 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file malloc_info.c * \brief Malloc info reporting via WRBUF */ #if HAVE_CONFIG_H #include #endif #if HAVE_MALLOC_INFO #include #endif #include #include #include int wrbuf_malloc_info(WRBUF b) { int r = -2; #if HAVE_MALLOC_INFO #if HAVE_OPEN_MEMSTREAM char *ptr = 0; size_t sz = 0; FILE *f = open_memstream(&ptr, &sz); if (!f) r = -1; else { r = malloc_info(0, f); fclose(f); wrbuf_write(b, ptr, sz); } if (ptr) free(ptr); #endif #endif return r; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/csvtodiag.tcl0000644000175000017500000001000313265142510012601 00000000000000# This file is part of the YAZ toolkit # Copyright (C) Index Data # See the file LICENSE for details. # # # Converts a CSV file with diagnostics to C+H file for easy # maintenance proc csvtodiag {ifiles name alias} { set uname [string toupper $name] set funcproto "const char *yaz_diag_${name}_str(int code)" if {[string length $alias]} { set funcalias "const char *${alias}(int code)" } set csv [open [lindex $ifiles 0] r] set cfile [open [lindex $ifiles 1] w] set hfile [open [lindex $ifiles 2] w] set lineno 0 puts $cfile "/** \\file [lindex $ifiles 1]" puts $hfile "/** \\file [lindex $ifiles 2]" set preamble " \\brief Diagnostics: Generated by csvtodiag.tcl from [lindex $ifiles 0] */" puts $cfile $preamble puts $cfile "\#ifdef HAVE_CONFIG_H" puts $cfile "\#include " puts $cfile "\#endif" puts $cfile " #include \"diag-entry.h\" \#include \"[lindex $ifiles 2]\" struct yaz_diag_entry yaz_diag_${name}_tab\[\] = \{ " puts $hfile $preamble puts $hfile " \#include \#ifndef YAZ_DIAG_${name}_H \#define YAZ_DIAG_${name}_H YAZ_BEGIN_CDECL YAZ_EXPORT $funcproto;" if {[info exists funcalias]} { puts $hfile "YAZ_EXPORT $funcalias;" } while {1} { incr lineno set cnt [gets $csv line] if {$cnt < 0} { break } if {[regexp {([0-9]+)[^\"]*"([^\"]*)"} $line s code msg]} { puts $cfile "\{$code, \"$msg\"\}," set m [string toupper $msg] regsub -all {DUPLICATE} $m {DUP} m regsub -all {SECURITY CHALLENGE} $m {SEC_CHAL} m regsub -all {COULD NOT} $m {COULDNT} m regsub -all {COULD NOT} $m {COULDNT} m regsub -all {NOT SUPPORTED} $m {UNSUPP} m regsub -all {UNSUPPORTED} $m {UNSUPP} m regsub -all {COMBINATION} $m {COMBI} m regsub -all {PROXIMITY} $m {PROX} m regsub -all {CHARACTERS} $m {CHARS} m regsub -all {CHARACTER} $m {CHAR} m regsub -all {[-/,:;."' \{\}()]} $m _ m set m [string map {___ _ __ _} $m] if {[string length $m] > 55} { set m [string range $m 0 55] set p [string last _ $m] if {$p > 30} { set m [string range $m 0 $p] } } puts $hfile "\#define YAZ_${uname}_${m} $code" } } puts $cfile "\{0, 0\}\}\;" puts $cfile $funcproto puts $cfile "\{" puts $cfile " return yaz_diag_to_str(yaz_diag_${name}_tab, code);" puts $cfile "\}" if {[info exists funcalias]} { puts $cfile $funcalias puts $cfile "\{" puts $cfile " return yaz_diag_to_str(yaz_diag_${name}_tab, code);" puts $cfile "\}" } puts $hfile " YAZ_END_CDECL \#endif " close $csv close $cfile close $hfile } proc csvto_xml {csvfname xmlfname id} { set xfile [open $xmlfname w] set csv [open $csvfname r] puts $xfile "" puts $xfile "" puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile {Code} puts $xfile {Text} puts $xfile {} puts $xfile {} puts $xfile {} set lineno 0 while {1} { incr lineno set cnt [gets $csv line] if {$cnt < 0} { break } if {[regexp {([0-9]+)[^\"]*"([^\"]*)"} $line s code msg]} { puts $xfile {} puts $xfile {} puts $xfile $code puts $xfile {} puts $xfile $msg puts $xfile {} puts $xfile {} } } puts $xfile {} puts $xfile {} puts $xfile {} close $xfile close $csv } if {[llength $argv] >= 4} { set alias {} if {[llength $argv] >= 5} { set alias [lindex $argv 4] } csvtodiag [list [lindex $argv 0] [lindex $argv 1] [lindex $argv 2]] \ [lindex $argv 3] $alias } elseif {[llength $argv] == 3} { csvto_xml [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] }yaz-5.28.0/src/uri.c0000644000175000017500000001004213265142510011060 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file uri.c * \brief Implements URI utilities. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include static int hex_digit (int ch) { if (ch >= '0' && ch <= '9') return ch - '0'; else if (ch >= 'a' && ch <= 'f') return ch - 'a'+10; else if (ch >= 'A' && ch <= 'F') return ch - 'A'+10; return -1; } static void encode_uri_char(char *dst, char ch) { /* mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" */ if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || strchr("-_.!~*'(|)", ch)) { dst[0] = ch; dst[1] = '\0'; } else { dst[0] = '%'; sprintf(dst+1, "%02X", (unsigned char ) ch); } } void yaz_encode_uri_component(char *dst, const char *uri) { for (; *uri; uri++) { encode_uri_char(dst, *uri); dst += strlen(dst); } *dst = '\0'; } static unsigned char decode_uri_char(const char *path, size_t *len) { unsigned char ch; if (*path == '+') { ch = ' '; *len = 1; } else if (*path == '%' && *len >= 3) { int d1 = hex_digit(path[1]); int d2 = hex_digit(path[2]); if (d1 >= 0 && d2 >= 0) { ch = d1 * 16 + d2; *len = 3; } else { ch = *path; *len = 1; } } else { ch = *path; *len = 1; } return ch; } void yaz_decode_uri_component(char *dst, const char *uri, size_t len) { while (len) { size_t sz = len; *dst++ = decode_uri_char(uri, &sz); uri += sz; len = len - sz; } *dst = '\0'; } void yaz_array_to_uri(char **path, ODR o, char **name, char **value) { size_t i, szp = 0, sz = 1; for(i = 0; name[i]; i++) sz += strlen(name[i]) + 3 + strlen(value[i]) * 3; *path = (char *) odr_malloc(o, sz); for(i = 0; name[i]; i++) { size_t ilen; if (i) (*path)[szp++] = '&'; ilen = strlen(name[i]); memcpy(*path+szp, name[i], ilen); szp += ilen; (*path)[szp++] = '='; yaz_encode_uri_component(*path + szp, value[i]); szp += strlen(*path + szp); } (*path)[szp] = '\0'; } int yaz_uri_to_array(const char *path, ODR o, char ***name, char ***val) { int no = 2; const char *cp; *name = 0; if (*path == '?') path++; if (!*path) return 0; cp = path; while ((cp = strchr(cp, '&'))) { cp++; no++; while (*cp && *cp != '=' && *cp != '&') { /* check that x-form names looks sane */ if (*cp <= ' ' || *cp >= 127) return 0; cp++; } } *name = (char **) odr_malloc(o, no * sizeof(char*)); *val = (char **) odr_malloc(o, no * sizeof(char*)); for (no = 0; *path; no++) { while (*path == '&') path++; if (!*path) break; for (cp = path; *cp && *cp != '=' && *cp != '&'; cp++) ; (*name)[no] = odr_strdupn(o, path, cp - path); path = cp; if (*path == '=') { size_t i = 0; char *ret; path++; for (cp = path; *cp && *cp != '&'; cp++) ; (*val)[no] = ret = (char *) odr_malloc(o, cp - path + 1); while (*path && *path != '&') { size_t l = 3; ret[i++] = decode_uri_char(path, &l); path += l; } ret[i] = '\0'; } else (*val)[no] = odr_strdup(o, ""); } (*name)[no] = 0; (*val)[no] = 0; return no; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zes-expi.c0000644000175000017500000001102113273126163012030 00000000000000/** \file zes-expi.c \brief ASN.1 Module ESFormat-ExportInvocation Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_EIExportInvocationEsRequest(ODR o, Z_EIExportInvocationEsRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_EIOriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT, 1, 0, "toKeep") && odr_explicit_tag(o, z_EIOriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT, 2, 0, "notToKeep") && odr_sequence_end(o); } int z_EIExportInvocationTaskPackage(ODR o, Z_EIExportInvocationTaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_EIOriginPartToKeep, &(*p)->originPart, ODR_CONTEXT, 1, 0, "originPart") && odr_explicit_tag(o, z_EITargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 1, "targetPart") && odr_sequence_end(o); } int z_EIExportInvocation(ODR o, Z_EIExportInvocation **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_EIExportInvocation_esRequest, (Odr_fun) z_EIExportInvocationEsRequest, "esRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_EIExportInvocation_taskPackage, (Odr_fun) z_EIExportInvocationTaskPackage, "taskPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_EIOriginPartToKeep(ODR o, Z_EIOriginPartToKeep **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_EIOriginPartToKeep_packageName, (Odr_fun) z_InternationalString, "packageName"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_EIOriginPartToKeep_packageSpec, (Odr_fun) z_ESExportSpecification, "packageSpec"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "exportSpec") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_implicit_tag(o, odr_integer, &(*p)->numberOfCopies, ODR_CONTEXT, 2, 0, "numberOfCopies") && odr_sequence_end(o); } int z_EIOriginPartNotToKeepRanges_s(ODR o, Z_EIOriginPartNotToKeepRanges_s **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->start, ODR_CONTEXT, 1, 0, "start") && odr_implicit_tag(o, odr_integer, &(*p)->count, ODR_CONTEXT, 2, 1, "count") && odr_sequence_end(o); } int z_EIOriginPartNotToKeepRanges(ODR o, Z_EIOriginPartNotToKeepRanges **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_EIOriginPartNotToKeepRanges_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_EIOriginPartNotToKeep(ODR o, Z_EIOriginPartNotToKeep **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_EIOriginPartNotToKeep_all, (Odr_fun) odr_null, "all"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_EIOriginPartNotToKeep_ranges, (Odr_fun) z_EIOriginPartNotToKeepRanges, "ranges"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->resultSetId, ODR_CONTEXT, 1, 0, "resultSetId") && odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 2, "records") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_sequence_end(o); } int z_EITargetPart(ODR o, Z_EITargetPart **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_IntUnit, &(*p)->estimatedQuantity, ODR_CONTEXT, 1, 1, "estimatedQuantity") && odr_implicit_tag(o, z_IntUnit, &(*p)->quantitySoFar, ODR_CONTEXT, 2, 1, "quantitySoFar") && odr_implicit_tag(o, z_IntUnit, &(*p)->estimatedCost, ODR_CONTEXT, 3, 1, "estimatedCost") && odr_implicit_tag(o, z_IntUnit, &(*p)->costSoFar, ODR_CONTEXT, 4, 1, "costSoFar") && odr_sequence_end(o); } yaz-5.28.0/src/ber_bool.c0000644000175000017500000000233713265142510012054 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ber_bool.c * \brief Implements BER BOOLEAN encoding and decoding * * This source file implements BER encoding and decoding of * the BOOLEAN type. */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" int ber_boolean(ODR o, int *val) { int res, len; switch (o->direction) { case ODR_ENCODE: if (ber_enclen(o, 1, 1, 1) != 1) return 0; if (odr_putc(o, *val) < 0) return 0; return 1; case ODR_DECODE: if ((res = ber_declen(o->op->bp, &len, odr_max(o))) < 0) { odr_seterror(o, OPROTO, 9); return 0; } o->op->bp+= res; if (len != 1 || odr_max(o) < len) { odr_seterror(o, OPROTO, 10); return 0; } *val = *o->op->bp; o->op->bp++; return 1; case ODR_PRINT: return 1; default: odr_seterror(o, OOTHER, 11); return 0; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cclxmlconfig.c0000644000175000017500000001627613265142510012750 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file cclxmlconfig.c \brief XML configuration for CCL */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if YAZ_HAVE_XML2 static int ccl_xml_config_combqual(WRBUF wrbuf, const xmlNode *ptr, const char **addinfo) { struct _xmlAttr *attr; const char *name = 0; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "name") && attr->children && attr->children->type == XML_TEXT_NODE) name = (const char *) attr->children->content; else { *addinfo = "bad attribute for 'attr'. " "Expecting 'type', 'value', or 'attrset'"; return 1; } } if (!name) { *addinfo = "missing attribute for 'name' for element 'qual'"; return 1; } wrbuf_printf(wrbuf, "%s", name); return 0; } static int ccl_xml_config_attr(const char *default_set, WRBUF wrbuf, const xmlNode *ptr, const char **addinfo) { struct _xmlAttr *attr; const char *type = 0; const char *value = 0; const char *attrset = default_set; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "type") && attr->children && attr->children->type == XML_TEXT_NODE) type = (const char *) attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "value") && attr->children && attr->children->type == XML_TEXT_NODE) value = (const char *) attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "attrset") && attr->children && attr->children->type == XML_TEXT_NODE) attrset = (const char *) attr->children->content; else { *addinfo = "bad attribute for 'attr'. " "Expecting 'type', 'value', or 'attrset'"; return 1; } } if (!type) { *addinfo = "missing attribute for 'type' for element 'attr'"; return 1; } if (!value) { *addinfo = "missing attribute for 'value' for element 'attr'"; return 1; } if (attrset) wrbuf_printf(wrbuf, "%s,%s=%s", attrset, type, value); else wrbuf_printf(wrbuf, "%s=%s", type, value); return 0; } static int ccl_xml_config_qual(CCL_bibset bibset, const char *default_set, WRBUF wrbuf, const xmlNode *ptr, const char **addinfo) { struct _xmlAttr *attr; const char *name = 0; const xmlNode *a_ptr = ptr->children; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "name") && attr->children && attr->children->type == XML_TEXT_NODE) name = (const char *) attr->children->content; else { *addinfo = "bad attribute for 'qual'. Expecting 'name' only"; return 1; } } if (!name) { *addinfo = "missing attribute 'name' for 'qual' element"; return 1; } for (; a_ptr; a_ptr = a_ptr->next) { if (a_ptr->type == XML_ELEMENT_NODE) { if (!xmlStrcmp(a_ptr->name, BAD_CAST "attr")) { int r = ccl_xml_config_attr(default_set, wrbuf, a_ptr, addinfo); if (r) return r; wrbuf_printf(wrbuf, " "); } else if (!xmlStrcmp(a_ptr->name, BAD_CAST "qual")) { int r = ccl_xml_config_combqual(wrbuf, a_ptr, addinfo); if (r) return r; wrbuf_printf(wrbuf, " "); } else { *addinfo = "bad element: expecting 'attr'"; return 1; } } } ccl_qual_fitem(bibset, wrbuf_cstr(wrbuf), name); return 0; } int ccl_xml_config_directive(CCL_bibset bibset, const xmlNode *ptr, const char **addinfo) { struct _xmlAttr *attr; const char *name = 0; const char *value = 0; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "name") && attr->children && attr->children->type == XML_TEXT_NODE) name = (const char *) attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "value") && attr->children && attr->children->type == XML_TEXT_NODE) value = (const char *) attr->children->content; else { *addinfo = "bad attribute for 'diretive'. " "Expecting 'name' or 'value'"; return 1; } } if (!name) { *addinfo = "missing attribute 'name' for 'directive' element"; return 1; } if (!value) { *addinfo = "missing attribute 'name' for 'value' element"; return 1; } ccl_qual_add_special(bibset, name, value); return 0; } int ccl_xml_config(CCL_bibset bibset, const xmlNode *ptr, const char **addinfo) { if (ptr && ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "cclmap")) { const xmlNode *c_ptr; const char *set = 0; struct _xmlAttr *attr; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "defaultattrset") && attr->children && attr->children->type == XML_TEXT_NODE) set = (const char *) attr->children->content; else { *addinfo = "bad attribute for 'cclmap'. " "expecting 'defaultattrset'"; return 1; } } for (c_ptr = ptr->children; c_ptr; c_ptr = c_ptr->next) { if (c_ptr->type == XML_ELEMENT_NODE) { if (!xmlStrcmp(c_ptr->name, BAD_CAST "qual")) { WRBUF wrbuf = wrbuf_alloc(); int r = ccl_xml_config_qual(bibset, set, wrbuf, c_ptr, addinfo); wrbuf_destroy(wrbuf); if (r) return r; } else if (!xmlStrcmp(c_ptr->name, BAD_CAST "directive")) { int r = ccl_xml_config_directive(bibset, c_ptr, addinfo); if (r) return r; } else { *addinfo = "bad element for 'cclmap'. " "expecting 'directive' or 'qual'"; return 1; } } } } return 0; } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/base64.c0000644000175000017500000000455213265142510011356 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file base64.c * \brief Base64 encode/decode utilities */ #if HAVE_CONFIG_H #include #endif #include #include void yaz_base64encode(const char *in, char *out) { static char encoding[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; unsigned char buf[3]; long n; while (*in != 0) { const char *pad = 0; buf[0] = in[0]; buf[1] = in[1]; if (in[1] == 0) { buf[2] = 0; pad = "=="; } else { buf[2] = in[2]; if (in[2] == 0) pad = "="; } /* Treat three eight-bit numbers as on 24-bit number */ n = (buf[0] << 16) + (buf[1] << 8) + buf[2]; /* Write the six-bit chunks out as four encoded characters */ *out++ = encoding[(n >> 18) & 63]; *out++ = encoding[(n >> 12) & 63]; if (in[1] != 0) *out++ = encoding[(n >> 6) & 63]; if (in[1] != 0 && in[2] != 0) *out++ = encoding[n & 63]; if (pad != 0) { while (*pad != 0) *out++ = *pad++; break; } in += 3; } *out++ = 0; } static int next_char(const char **in, size_t *len) { const char *map = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789+/"; const char *p; while (*len > 0 && strchr("\r\n\t\f ", **in)) { (*len)--; (*in)++; } if (*len > 0 && **in == '=') return -2; if (*len > 0 && (p = strchr(map, **in))) { (*len)--; (*in)++; return p - map; } return -1; } int yaz_base64decode(const char *in, char *out) { size_t len = strlen(in); while (len >= 4) { int i0, i1, i2, i3; i0 = next_char(&in, &len); if (i0 < 0) return -1; i1 = next_char(&in, &len); if (i1 < 0) return -1; *(out++) = i0 << 2 | i1 >> 4; i2 = next_char(&in, &len); if (i2 == -2) break; if (i2 == -1) return -1; *(out++) = i1 << 4 | i2 >> 2; i3 = next_char(&in, &len); if (i3 == -2) break; if (i3 == -1) return -1; *(out++) = i2 << 6 | i3; } *out = '\0'; return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/sortspec.c0000644000175000017500000003076213265142510012136 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file sortspec.c * \brief Implements SortSpec parsing. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include Z_SortKeySpecList *yaz_sort_spec(ODR out, const char *arg) { char sort_string_buf[64], sort_flags[64]; Z_SortKeySpecList *sksl = (Z_SortKeySpecList *) odr_malloc(out, sizeof(*sksl)); int off; sksl->num_specs = 0; sksl->specs = (Z_SortKeySpec **)odr_malloc(out, sizeof(sksl->specs) * 20); while ((sscanf(arg, "%63s %63s%n", sort_string_buf, sort_flags, &off)) == 2 && off > 1) { int i; char *sort_string_sep; char *sort_string = sort_string_buf; Z_SortKeySpec *sks = (Z_SortKeySpec *) odr_malloc(out, sizeof(*sks)); Z_SortKey *sk = (Z_SortKey *) odr_malloc(out, sizeof(*sk)); arg += off; sksl->specs[sksl->num_specs++] = sks; sks->sortElement = (Z_SortElement *) odr_malloc(out, sizeof(*sks->sortElement)); sks->sortElement->which = Z_SortElement_generic; sks->sortElement->u.generic = sk; if ((sort_string_sep = strchr(sort_string, '='))) { int i = 0; sk->which = Z_SortKey_sortAttributes; sk->u.sortAttributes = (Z_SortAttributes *) odr_malloc(out, sizeof(*sk->u.sortAttributes)); sk->u.sortAttributes->id = odr_oiddup(out, yaz_oid_attset_bib_1); sk->u.sortAttributes->list = (Z_AttributeList *) odr_malloc(out, sizeof(*sk->u.sortAttributes->list)); sk->u.sortAttributes->list->attributes = (Z_AttributeElement **) odr_malloc(out, 10 * sizeof(*sk->u.sortAttributes->list->attributes)); while (i < 10 && sort_string && sort_string_sep) { Z_AttributeElement *el = (Z_AttributeElement *) odr_malloc(out, sizeof(*el)); sk->u.sortAttributes->list->attributes[i] = el; el->attributeSet = 0; el->attributeType = odr_intdup(out, atoi(sort_string)); el->which = Z_AttributeValue_numeric; el->value.numeric = odr_intdup(out, odr_atoi(sort_string_sep + 1)); i++; sort_string = strchr(sort_string, ','); if (sort_string) { sort_string++; sort_string_sep = strchr(sort_string, '='); } } sk->u.sortAttributes->list->num_attributes = i; } else { sk->which = Z_SortKey_sortField; sk->u.sortField = odr_strdup (out, sort_string); } sks->sortRelation = odr_intdup(out, Z_SortKeySpec_ascending); sks->caseSensitivity = odr_intdup(out, Z_SortKeySpec_caseInsensitive); sks->which = Z_SortKeySpec_null; sks->u.null = odr_nullval (); for (i = 0; sort_flags[i]; i++) { switch (sort_flags[i]) { case 'd': case 'D': case '>': *sks->sortRelation = Z_SortKeySpec_descending; break; case 'a': case 'A': case '<': *sks->sortRelation = Z_SortKeySpec_ascending; break; case 'i': case 'I': *sks->caseSensitivity = Z_SortKeySpec_caseInsensitive; break; case 'S': case 's': *sks->caseSensitivity = Z_SortKeySpec_caseSensitive; break; case '!': sks->which = Z_SortKeySpec_abort; sks->u.abort = odr_nullval(); break; case '=': sks->which = Z_SortKeySpec_missingValueData; sks->u.missingValueData = (Odr_oct*) odr_malloc(out, sizeof(Odr_oct)); i++; sks->u.missingValueData->len = strlen(sort_flags+i); sks->u.missingValueData->buf = odr_strdup(out, sort_flags+i); i += strlen(sort_flags+i) - 1; break; } } } if (!sksl->num_specs) return 0; return sksl; } int yaz_sort_spec_to_cql(Z_SortKeySpecList *sksl, WRBUF w) { int i; for (i = 0; i < sksl->num_specs; i++) { Z_SortKeySpec *sks = sksl->specs[i]; Z_SortKey *sk; if (sks->sortElement->which != Z_SortElement_generic) return -1; sk = sks->sortElement->u.generic; if (i) wrbuf_puts(w, " "); else wrbuf_puts(w, " SORTBY "); if (sk->which == Z_SortKey_sortAttributes) return -1; else if (sk->which == Z_SortKey_sortField) wrbuf_puts(w, sk->u.sortField); switch (*sks->sortRelation) { case Z_SortKeySpec_ascending: wrbuf_puts(w, "/ascending"); break; case Z_SortKeySpec_descending: wrbuf_puts(w, "/descending"); break; } switch (*sks->caseSensitivity) { case Z_SortKeySpec_caseSensitive: wrbuf_puts(w, "/respectCase"); break; case Z_SortKeySpec_caseInsensitive: wrbuf_puts(w, "/ignoreCase"); break; } switch (sks->which) { case Z_SortKeySpec_null: break; case Z_SortKeySpec_abort: wrbuf_puts(w, "/missingFail"); break; case Z_SortKeySpec_missingValueData: wrbuf_puts(w, "/missingValue="); wrbuf_write(w, (const char *) sks->u.missingValueData->buf, sks->u.missingValueData->len); break; } } return 0; } int yaz_sort_spec_to_type7(Z_SortKeySpecList *sksl, WRBUF pqf) { int i; for (i = 0; i < sksl->num_specs; i++) { Z_SortKeySpec *sks = sksl->specs[i]; Z_SortKey *sk; if (sks->sortElement->which != Z_SortElement_generic) return -1; sk = sks->sortElement->u.generic; wrbuf_insert(pqf, 0, "@or ", 4); if (sk->which == Z_SortKey_sortAttributes) { int j; for (j = 0; j < sk->u.sortAttributes->list->num_attributes; j++) { Z_AttributeElement *el = sk->u.sortAttributes->list->attributes[j]; if (el->which != Z_AttributeValue_numeric) return -1; wrbuf_printf(pqf, " @attr " ODR_INT_PRINTF "=" ODR_INT_PRINTF, *el->attributeType, *el->value.numeric); } } else if (sk->which == Z_SortKey_sortField) { wrbuf_puts(pqf, " @attr 1="); wrbuf_puts(pqf, sk->u.sortField); } switch (*sks->sortRelation) { case Z_SortKeySpec_ascending: wrbuf_puts(pqf, " @attr 7=1 "); break; case Z_SortKeySpec_descending: wrbuf_puts(pqf, " @attr 7=2 "); break; } wrbuf_printf(pqf, "%d", i); } return 0; } int yaz_sort_spec_to_srw_sortkeys(Z_SortKeySpecList *sksl, WRBUF w) { int i; for (i = 0; i < sksl->num_specs; i++) { Z_SortKeySpec *sks = sksl->specs[i]; Z_SortKey *sk; if (sks->sortElement->which != Z_SortElement_generic) return -1; sk = sks->sortElement->u.generic; if (i) wrbuf_puts(w, " "); if (sk->which == Z_SortKey_sortAttributes) return -1; else if (sk->which == Z_SortKey_sortField) { wrbuf_puts(w, sk->u.sortField); } wrbuf_puts(w, ",,"); /* path is absent */ switch (*sks->sortRelation) { case Z_SortKeySpec_ascending: wrbuf_puts(w, "1"); break; case Z_SortKeySpec_descending: wrbuf_puts(w, "0"); break; } wrbuf_puts(w, ","); switch (*sks->caseSensitivity) { case Z_SortKeySpec_caseSensitive: wrbuf_puts(w, "1"); break; case Z_SortKeySpec_caseInsensitive: wrbuf_puts(w, "0"); break; } wrbuf_puts(w, ","); switch (sks->which) { case Z_SortKeySpec_null: wrbuf_puts(w, "highValue"); break; case Z_SortKeySpec_abort: wrbuf_puts(w, "abort"); break; case Z_SortKeySpec_missingValueData: wrbuf_write(w, (const char *) sks->u.missingValueData->buf, sks->u.missingValueData->len); break; } } return 0; } int yaz_sort_spec_to_solr_sortkeys(Z_SortKeySpecList *sksl, WRBUF w) { int i; for (i = 0; i < sksl->num_specs; i++) { Z_SortKeySpec *sks = sksl->specs[i]; Z_SortKey *sk; if (sks->sortElement->which != Z_SortElement_generic) return -1; sk = sks->sortElement->u.generic; if (i) wrbuf_puts(w, ","); if (sk->which == Z_SortKey_sortAttributes) return -1; else if (sk->which == Z_SortKey_sortField) { wrbuf_puts(w, sk->u.sortField); } switch (*sks->sortRelation) { case Z_SortKeySpec_ascending: wrbuf_puts(w, " asc"); break; case Z_SortKeySpec_descending: wrbuf_puts(w, " desc"); break; } } return 0; } int yaz_srw_sortkeys_to_sort_spec(const char *srw_sortkeys, WRBUF w) { /* sru sortkey layout: path,schema,ascending,caseSensitive,missingValue */ /* see cql_sortby_to_sortkeys of YAZ. */ char **sortspec; int num_sortspec = 0; int i; NMEM nmem = nmem_create(); if (srw_sortkeys) nmem_strsplit_blank(nmem, srw_sortkeys, &sortspec, &num_sortspec); for (i = 0; i < num_sortspec; i++) { char **arg; int num_arg; int ascending = 1; int case_sensitive = 0; const char *missing = 0; nmem_strsplitx(nmem, ",", sortspec[i], &arg, &num_arg, 0); if (num_arg > 2 && arg[2][0]) ascending = atoi(arg[2]); if (num_arg > 3 && arg[3][0]) case_sensitive = atoi(arg[3]); if (num_arg > 4 && arg[4][0]) missing = arg[4]; if (i) wrbuf_puts(w, " "); wrbuf_puts(w, arg[0]); /* field */ wrbuf_puts(w, " "); wrbuf_puts(w, ascending ? "a" : "d"); wrbuf_puts(w, case_sensitive ? "s" : "i"); if (missing) { if (!strcmp(missing, "omit")) { ; } else if (!strcmp(missing, "abort")) wrbuf_puts(w, "!"); else if (!strcmp(missing, "lowValue")) { ; } else if (!strcmp(missing, "highValue")) { ; } else { wrbuf_puts(w, "="); wrbuf_puts(w, missing); } } } nmem_destroy(nmem); return 0; } int yaz_solr_sortkeys_to_sort_spec(const char *solr_sortkeys, WRBUF w) { /* Solr sortkey layout: field order[, field order] */ /* see cql_sortby_to_sortkeys of YAZ. */ char **sortspec; int num_sortspec = 0; int i; NMEM nmem = nmem_create(); if (solr_sortkeys) nmem_strsplit(nmem, ",", solr_sortkeys, &sortspec, &num_sortspec); for (i = 0; i < num_sortspec; i++) { char **arg; int num_arg; char order = 'a'; int case_sensitive = 0; nmem_strsplitx(nmem, " ", sortspec[i], &arg, &num_arg, 0); if (num_arg != 2) return -1; if (!yaz_matchstr(arg[1], "asc")) order = 'a'; else if (!yaz_matchstr(arg[1], "desc")) order = 'd'; else return -1; if (i) wrbuf_puts(w, " "); wrbuf_puts(w, arg[0]); /* field */ wrbuf_puts(w, " "); wrbuf_putc(w, order); // Always in-sensitive wrbuf_puts(w, case_sensitive ? "s" : "i"); } nmem_destroy(nmem); return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/sc_test.c0000644000175000017500000000343013265142510011730 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file sc_test.c * \brief Small test for the Windows Service Control utility */ #if HAVE_CONFIG_H #include #endif #ifdef WIN32 #include #include #include #endif #include #include #include #include #include #include #ifdef WIN32 /** \brief handle that is used to stop that service should be stopped */ HANDLE default_stop_event = NULL; /** \brief stop handler which just signals "stop" */ static void default_sc_stop(yaz_sc_t s) { SetEvent(default_stop_event); } /** \brief service control main This does not read argc and argv. Real applications would typically do that. It is very important that yaz_sc_running is called before the application starts to operate . */ static int default_sc_main(yaz_sc_t s, int argc, char **argv) { default_stop_event = CreateEvent( NULL, // default security attributes TRUE, // manual reset event FALSE, // not signaled NULL); // no name if (default_stop_event == NULL) { return 1; } yaz_sc_running(s); WaitForSingleObject(default_stop_event, INFINITE); return 0; } #endif /** \brief the system main function */ int main(int argc, char **argv) { #ifdef WIN32 yaz_sc_t s = yaz_sc_create("yaz_sc_test", "YAZ Service Control Test"); yaz_sc_program(s, argc, argv, default_sc_main, default_sc_stop); yaz_sc_destroy(&s); #else printf("Only on Windows\n"); #endif exit(0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/facet.c0000644000175000017500000001537013265142510011354 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file facet.c * \brief Facet utilities */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include void yaz_oi_set_facetlist( Z_OtherInformation **otherInformation, ODR odr, Z_FacetList *facet_list) { int categoryValue = 1; Z_External *z_external = 0; Z_OtherInformationUnit *oi = yaz_oi_update(otherInformation, odr, yaz_oid_userinfo_facet_1, categoryValue, 0); if (!oi) return; oi->which = Z_OtherInfo_externallyDefinedInfo; z_external = odr_malloc(odr, sizeof(*z_external)); z_external->which = Z_External_userFacets; z_external->direct_reference = odr_oiddup(odr, yaz_oid_userinfo_facet_1); z_external->indirect_reference = 0; z_external->descriptor = 0; z_external->u.facetList = facet_list; oi->information.externallyDefinedInfo = z_external; } Z_FacetList *yaz_oi_get_facetlist(Z_OtherInformation **otherInformation) { Z_OtherInformation *oi = *otherInformation; if (oi) { int i; for (i = 0; i < oi->num_elements; i++) { Z_OtherInformationUnit *oiu = oi->list[i]; if (oiu->which == Z_OtherInfo_externallyDefinedInfo && oiu->information.externallyDefinedInfo->which == Z_External_userFacets) { return oiu->information.externallyDefinedInfo->u.facetList; } } } return 0; } /* Little helper to extract a string attribute */ /* Gets the first string, there is usually only one */ /* in case of errors, returns null */ void yaz_facet_attr_init(struct yaz_facet_attr *attr_values) { attr_values->errcode = 0; attr_values->errstring = 0; attr_values->sortorder = 0; attr_values->useattr = 0; attr_values->useattrbuff[0] = 0; attr_values->limit = 0; attr_values->start = 0; } static const char *stringattr(Z_ComplexAttribute *c) { int i; Z_StringOrNumeric *son; for (i = 0; i < c->num_list; i++) { son = c->list[i]; if ( son->which == Z_StringOrNumeric_string) return son->u.string; } return 0; } /* Use attribute, @attr1, can be numeric or string */ static void useattr(Z_AttributeElement *ae, struct yaz_facet_attr *av) { const char *s; if (ae->which == Z_AttributeValue_complex) { s = stringattr(ae->value.complex); if (s) { if (!av->useattr) av->useattr = s; else { /* already seen one, can't have duplicates */ av->errcode = YAZ_BIB1_UNSUPP_ATTRIBUTE_COMBI; av->errstring = "multiple use attributes"; } } else { /* complex that did not return a string */ av->errcode = YAZ_BIB1_UNSUPP_ATTRIBUTE_COMBI; av->errstring = "non-string complex attribute"; } } else { /* numeric - could translate 4 to 'title' etc */ sprintf(av->useattrbuff, ODR_INT_PRINTF, *ae->value.numeric); av->useattr = av->useattrbuff; } } static void numattr(Z_AttributeElement *ae, struct yaz_facet_attr *av, int *v) { if (ae->which == Z_AttributeValue_numeric) { *v = *ae->value.numeric; } else { av->errcode = YAZ_BIB1_UNSUPP_ATTRIBUTE; av->errstring = "non-numeric limit/sort/start attribute"; } } /* Get the index to be searched from the attributes. @attr 1 can be either "string", or some well-known value like 4 for title Returns a null and sets errors in rr, emtpy string if no attr found, or the string itself - always a pointer to the Z-structs, so no need to free that string! */ void yaz_facet_attr_get_z_attributes(const Z_AttributeList *attributes, struct yaz_facet_attr *av) { int i; Z_AttributeElement *ae; for (i = 0; i < attributes->num_attributes; i++) { ae = attributes->attributes[i]; /* ignoring the attributeSet here */ if (*ae->attributeType == 1) { /* use attribute */ useattr(ae, av); } else if (*ae->attributeType == 2) { numattr(ae, av, &av->sortorder); } else if (*ae->attributeType == 3) { numattr(ae, av, &av->limit); } else if (*ae->attributeType == 4) { numattr(ae, av, &av->start); } else { /* unknown attribute */ av->errcode = YAZ_BIB1_UNSUPP_ATTRIBUTE_TYPE; sprintf(av->useattrbuff, ODR_INT_PRINTF, *ae-> attributeType); av->errstring = av->useattrbuff; yaz_log(YLOG_WARN, "Unsupported attribute type %s", av->useattrbuff); /* would like to give a better message, but the standard */ /* tells me to return the attribute type */ } if (av->errcode) return; /* no need to dig deeper, return on first error */ } return; } Z_FacetTerm *facet_term_create_cstr(ODR odr, const char *cstr, Odr_int freq) { Z_FacetTerm *facet_term = odr_malloc(odr, sizeof(*facet_term)); Z_Term *term = z_Term_create(odr, Z_Term_general, cstr, strlen(cstr)); facet_term->term = term; facet_term->count = odr_intdup(odr, freq); return facet_term; } Z_FacetField* facet_field_create(ODR odr, Z_AttributeList *attributes, int num_terms) { Z_FacetField *facet_field = odr_malloc(odr, sizeof(*facet_field)); facet_field->attributes = attributes; facet_field->num_terms = num_terms; facet_field->terms = odr_malloc(odr, num_terms * sizeof(*facet_field->terms)); return facet_field; } void facet_field_term_set(ODR odr, Z_FacetField *field, Z_FacetTerm *facet_term, int index) { assert(0 <= index && index < field->num_terms); field->terms[index] = facet_term; } Z_FacetList* facet_list_create(ODR odr, int num_facets) { Z_FacetList *facet_list = odr_malloc(odr, sizeof(*facet_list)); facet_list->num = num_facets; facet_list->elements = odr_malloc(odr, facet_list->num * sizeof(*facet_list->elements)); return facet_list; } void facet_list_field_set(ODR odr, Z_FacetList *list, Z_FacetField *field, int index) { assert(0 <= index && index < list->num); list->elements[index] = field; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/solr.c0000644000175000017500000005133313265142510011250 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file solr.c * \brief Implements Solr decoding/encoding */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #include #include "sru-p.h" #if YAZ_HAVE_XML2 #include #include static void extract_text_node(xmlNodePtr node, WRBUF wrbuf) { xmlNodePtr child; for (child = node->children; child ; child = child->next) { if (child->type == XML_TEXT_NODE) wrbuf_puts(wrbuf, (const char *) child->content); } } static int match_xml_node_attribute( xmlNodePtr ptr, const char *node_name, const char *attribute_name, const char *value) { const char *attribute_value; // check if the node name matches if (strcmp((const char*) ptr->name, node_name)) return 0; if (attribute_name) { attribute_value = yaz_element_attribute_value_get(ptr, node_name, attribute_name); if (attribute_value && !strcmp(attribute_value, value)) return 1; } else /* No attribute to check */ return 1; return 0; } static void yaz_solr_decode_result_docs(ODR o, xmlNodePtr ptr, Odr_int start, Z_SRW_searchRetrieveResponse *sr) { xmlNodePtr node; int offset = 0; int i = 0; sr->num_records = 0; for (node = ptr->children; node; node = node->next) if (node->type == XML_ELEMENT_NODE) sr->num_records++; if (sr->num_records) sr->records = odr_malloc(o, sizeof(*sr->records) * sr->num_records); for (node = ptr->children; node; node = node->next) { if (node->type == XML_ELEMENT_NODE) { Z_SRW_record *record = sr->records + i; xmlBufferPtr buf = xmlBufferCreate(); xmlNode *tmp = xmlCopyNode(node, 1); xmlNodeDump(buf, tmp->doc, tmp, 0, 0); xmlFreeNode(tmp); record->recordSchema = 0; record->recordPacking = Z_SRW_recordPacking_XML; record->recordData_len = buf->use; record->recordData_buf = odr_strdupn(o, (const char *) buf->content, buf->use); record->recordPosition = odr_intdup(o, start + offset + 1); xmlBufferFree(buf); offset++; i++; } } } static int yaz_solr_decode_result(ODR o, xmlNodePtr ptr, Z_SRW_searchRetrieveResponse *sr) { Odr_int start = 0; struct _xmlAttr *attr; for (attr = ptr->properties; attr; attr = attr->next) if (attr->children && attr->children->type == XML_TEXT_NODE) { if (!strcmp((const char *) attr->name, "numFound")) { sr->numberOfRecords = odr_intdup(o, odr_atoi( (const char *) attr->children->content)); } else if (!strcmp((const char *) attr->name, "start")) { start = odr_atoi((const char *) attr->children->content); } } if (sr->numberOfRecords && *sr->numberOfRecords > 0) yaz_solr_decode_result_docs(o, ptr, start, sr); if (sr->numberOfRecords) return 0; return -1; } static const char *get_facet_term_count(xmlNodePtr node, Odr_int *freq) { const char *term = yaz_element_attribute_value_get(node, "int", "name"); xmlNodePtr child; WRBUF wrbuf = wrbuf_alloc(); if (!term) return term; for (child = node->children; child ; child = child->next) { if (child->type == XML_TEXT_NODE) wrbuf_puts(wrbuf, (const char *) child->content); } *freq = odr_atoi(wrbuf_cstr(wrbuf)); wrbuf_destroy(wrbuf); return term; } Z_FacetField *yaz_solr_decode_facet_field(ODR o, xmlNodePtr ptr, Z_SRW_searchRetrieveResponse *sr) { Z_AttributeList *list; Z_FacetField *facet_field; int num_terms = 0; int index = 0; xmlNodePtr node; // USE attribute const char* name = yaz_element_attribute_value_get(ptr, "lst", "name"); list = zget_AttributeList_use_string(o, name); for (node = ptr->children; node; node = node->next) num_terms++; facet_field = facet_field_create(o, list, num_terms); index = 0; for (node = ptr->children; node; node = node->next) { Odr_int count = 0; const char *term = get_facet_term_count(node, &count); facet_field_term_set(o, facet_field, facet_term_create_cstr(o, term, count), index); index++; } return facet_field; } static int yaz_solr_decode_facet_counts(ODR o, xmlNodePtr root, Z_SRW_searchRetrieveResponse *sr) { xmlNodePtr ptr; for (ptr = root->children; ptr; ptr = ptr->next) { if (match_xml_node_attribute(ptr, "lst", "name", "facet_fields")) { xmlNodePtr node; Z_FacetList *facet_list; int num_facets = 0; for (node = ptr->children; node; node= node->next) { num_facets++; } facet_list = facet_list_create(o, num_facets); num_facets = 0; for (node = ptr->children; node; node= node->next) { facet_list_field_set(o, facet_list, yaz_solr_decode_facet_field(o, node, sr), num_facets); num_facets++; } sr->facetList = facet_list; break; } } return 0; } static void yaz_solr_decode_suggestion_values(xmlNodePtr listPptr, WRBUF wrbuf) { xmlNodePtr node; for (node = listPptr; node; node= node->next) if (!strcmp((char*) node->name, "lst")) { xmlNodePtr child; for (child = node->children; child; child= child->next) { if (match_xml_node_attribute(child, "str", "name", "word")) { wrbuf_puts(wrbuf, ""); extract_text_node(child, wrbuf); wrbuf_puts(wrbuf, "\n"); } } } } static void yaz_solr_decode_suggestion_lst(xmlNodePtr lstPtr, WRBUF wrbuf) { xmlNodePtr node; for (node = lstPtr; node; node= node->next) if (match_xml_node_attribute(node, "arr", "name", "suggestion")) yaz_solr_decode_suggestion_values(node->children, wrbuf); } static void yaz_solr_decode_misspelled(xmlNodePtr lstPtr, WRBUF wrbuf) { xmlNodePtr node; for (node = lstPtr; node; node= node->next) { if (!strcmp((const char*) node->name, "lst")) { const char *misspelled = yaz_element_attribute_value_get(node, "lst", "name"); if (misspelled) { wrbuf_printf(wrbuf, "\n", misspelled); yaz_solr_decode_suggestion_lst(node->children, wrbuf); wrbuf_puts(wrbuf, "\n"); } } } } static int yaz_solr_decode_spellcheck(ODR o, xmlNodePtr spellcheckPtr, Z_SRW_searchRetrieveResponse *sr) { xmlNodePtr ptr; WRBUF wrbuf = wrbuf_alloc(); wrbuf_puts(wrbuf, ""); for (ptr = spellcheckPtr->children; ptr; ptr = ptr->next) { if (match_xml_node_attribute(ptr, "lst", "name", "suggestions")) { yaz_solr_decode_misspelled(ptr->children, wrbuf); } } sr->suggestions = odr_strdup(o, wrbuf_cstr(wrbuf)); return 0; } static int yaz_solr_decode_scan_result(ODR o, xmlNodePtr ptr, Z_SRW_scanResponse *scr) { xmlNodePtr node; char *pos; int i = 0; /* find the actual list */ for (node = ptr->children; node; node = node->next) if (node->type == XML_ELEMENT_NODE) { ptr = node; break; } scr->num_terms = 0; for (node = ptr->children; node; node = node->next) if (node->type == XML_ELEMENT_NODE && !strcmp((const char *) node->name, "int")) scr->num_terms++; if (scr->num_terms) scr->terms = odr_malloc(o, sizeof(*scr->terms) * scr->num_terms); for (node = ptr->children; node; node = node->next) { if (node->type == XML_ELEMENT_NODE && !strcmp((const char *) node->name, "int")) { Z_SRW_scanTerm *term = scr->terms + i; Odr_int count = 0; const char *val = get_facet_term_count(node, &count); term->numberOfRecords = odr_intdup(o, count); /* if val contains a ^ then it is probably term<^>display term so separate them. This is due to * SOLR not being able to encode them into 2 separate attributes. */ pos = strchr(val, '^'); if (pos != NULL) { term->displayTerm = odr_strdup(o, pos + 1); *pos = '\0'; term->value = odr_strdup(o, val); *pos = '^'; } else { term->value = odr_strdup(o, val); term->displayTerm = NULL; } term->whereInList = NULL; i++; } } if (scr->num_terms) return 0; return -1; } static int yaz_solr_decode_error(ODR o, xmlNode *ptr, Z_SRW_searchRetrieveResponse *sr) { for (ptr = ptr->children; ptr; ptr = ptr->next) if (ptr->type == XML_ELEMENT_NODE && match_xml_node_attribute(ptr, "str", "name", "msg")) { char *msg = nmem_text_node_cdata(ptr->children, odr_getmem(o)); yaz_add_srw_diagnostic(o, &sr->diagnostics, &sr->num_diagnostics, YAZ_SRW_UNSUPP_PARAMETER_VALUE, msg); } return 0; } #endif int yaz_solr_decode_response(ODR o, Z_HTTP_Response *hres, Z_SRW_PDU **pdup) { int ret = -1; Z_SRW_PDU *pdu = 0; #if YAZ_HAVE_XML2 const char *content_buf = hres->content_buf; int content_len = hres->content_len; xmlDocPtr doc = xmlParseMemory(content_buf, content_len); if (doc) { Z_SRW_searchRetrieveResponse *sr = NULL; Z_SRW_scanResponse *scr = NULL; xmlNodePtr ptr; xmlNodePtr root = xmlDocGetRootElement(doc); if (root && !strcmp((const char *) root->name, "response")) { for (ptr = root->children; ptr; ptr = ptr->next) { if (!pdu && ptr->type == XML_ELEMENT_NODE && match_xml_node_attribute(ptr, "lst", "name", "error")) { pdu = yaz_srw_get(o, Z_SRW_searchRetrieve_response); sr = pdu->u.response; ret = yaz_solr_decode_error(o, ptr, sr); } if (ptr->type == XML_ELEMENT_NODE && !strcmp((const char *) ptr->name, "result")) { pdu = yaz_srw_get(o, Z_SRW_searchRetrieve_response); sr = pdu->u.response; ret = yaz_solr_decode_result(o, ptr, sr); } if (ptr->type == XML_ELEMENT_NODE && match_xml_node_attribute(ptr, "lst", "name", "terms")) { pdu = yaz_srw_get(o, Z_SRW_scan_response); scr = pdu->u.scan_response; ret = yaz_solr_decode_scan_result(o, ptr, scr); } /* The check on hits is a work-around to avoid garbled facets on zero results from the SOLR server. The work-around works because the results is before the facets in the xml. */ if (sr && sr->numberOfRecords) { if (*sr->numberOfRecords > 0 && match_xml_node_attribute(ptr, "lst", "name", "facet_counts")) ret = yaz_solr_decode_facet_counts(o, ptr, sr); if (*sr->numberOfRecords == 0 && match_xml_node_attribute(ptr, "lst", "name", "spellcheck")) ret = yaz_solr_decode_spellcheck(o, ptr, sr); } } } xmlFreeDoc(doc); } #endif *pdup = pdu; return ret; } static int yaz_solr_encode_facet_field( ODR encode, char **name, char **value, int *i, Z_FacetField *facet_field) { Z_AttributeList *attribute_list = facet_field->attributes; struct yaz_facet_attr attr_values; yaz_facet_attr_init(&attr_values); yaz_facet_attr_get_z_attributes(attribute_list, &attr_values); if (attr_values.errcode) return -1; if (attr_values.useattr) { WRBUF wrbuf = wrbuf_alloc(); yaz_add_name_value_str(encode, name, value, i, "facet.field", odr_strdup(encode, attr_values.useattr)); if (attr_values.limit > 0) { Odr_int v = attr_values.limit; wrbuf_rewind(wrbuf); wrbuf_printf(wrbuf, "f.%s.facet.limit", attr_values.useattr); yaz_add_name_value_int(encode, name, value, i, odr_strdup(encode, wrbuf_cstr(wrbuf)), &v); } if (attr_values.start > 1) { Odr_int v = attr_values.start - 1; wrbuf_rewind(wrbuf); wrbuf_printf(wrbuf, "f.%s.facet.offset", attr_values.useattr); yaz_add_name_value_int(encode, name, value, i, odr_strdup(encode, wrbuf_cstr(wrbuf)), &v); } if (attr_values.sortorder == 1) { wrbuf_rewind(wrbuf); wrbuf_printf(wrbuf, "f.%s.facet.sort", attr_values.useattr); yaz_add_name_value_str(encode, name, value, i, odr_strdup(encode, wrbuf_cstr(wrbuf)), "index"); } wrbuf_destroy(wrbuf); } else { if (attr_values.limit > 0) { Odr_int v = attr_values.limit; yaz_add_name_value_int(encode, name, value, i, "facet.limit", &v); } if (attr_values.start > 1) { Odr_int v = attr_values.start - 1; yaz_add_name_value_int(encode, name, value, i, "facet.offset", &v); } if (attr_values.sortorder == 1) { yaz_add_name_value_str(encode, name, value, i, "facet.sort", "index"); } } return 0; } static int yaz_solr_encode_facet_list( ODR encode, char **name, char **value, int *i, Z_FacetList *facet_list) { int index; for (index = 0; index < facet_list->num; index++) { int r = yaz_solr_encode_facet_field(encode, name, value, i, facet_list->elements[index]); if (r) return -1; } return 0; } int yaz_solr_encode_request(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, ODR encode, const char *charset) { const char *solr_op = 0; char **name, **value; char *uri_args; char *path; char *q; char *cp; int i = 0; int defType_set = 0; int no_parms = 20; /* safe upper limit of args without extra_args */ Z_SRW_extra_arg *ea; if (srw_pdu->which == Z_SRW_searchRetrieve_request) { /* to make room for facets in yaz_solr_encode_facet_list later */ Z_SRW_searchRetrieveRequest *request = srw_pdu->u.request; if (request->facetList) no_parms += request->facetList->num; } for (ea = srw_pdu->extra_args; ea; ea = ea->next) no_parms++; name = (char **) odr_malloc(encode, sizeof(*name) * no_parms); value = (char **) odr_malloc(encode, sizeof(*value) * no_parms); for (ea = srw_pdu->extra_args; ea; ea = ea->next) { name[i] = ea->name; if (!strcmp(ea->name, "defType")) defType_set = 1; value[i] = ea->value; i++; } z_HTTP_header_add_basic_auth(encode, &hreq->headers, srw_pdu->username, srw_pdu->password); if (srw_pdu->which == Z_SRW_searchRetrieve_request) { Z_SRW_searchRetrieveRequest *request = srw_pdu->u.request; solr_op = "select"; if (!srw_pdu->u.request->query) return -1; if (!defType_set) yaz_add_name_value_str(encode, name, value, &i, "defType", "lucene"); yaz_add_name_value_str(encode, name, value, &i, "q", request->query); if (srw_pdu->u.request->startRecord) { Odr_int start = *request->startRecord - 1; yaz_add_name_value_int(encode, name, value, &i, "start", &start); } yaz_add_name_value_int(encode, name, value, &i, "rows", request->maximumRecords); yaz_add_name_value_str(encode, name, value, &i, "fl", request->recordSchema); switch(srw_pdu->u.request->sort_type) { case Z_SRW_sort_type_none: break; case Z_SRW_sort_type_sort: yaz_add_name_value_str(encode, name, value, &i, "sort", srw_pdu->u.request->sort.sortKeys); break; } if (request->facetList) { Z_FacetList *facet_list = request->facetList; yaz_add_name_value_str(encode, name, value, &i, "facet", "true"); yaz_add_name_value_str(encode, name, value, &i, "facet.mincount", "1"); if (yaz_solr_encode_facet_list(encode, name, value, &i, facet_list)) return -1; } } else if (srw_pdu->which == Z_SRW_scan_request) { Z_SRW_scanRequest *request = srw_pdu->u.scan_request; solr_op = "terms"; if (!srw_pdu->u.scan_request->scanClause) return -1; if (!strcmp(srw_pdu->u.scan_request->queryType, "pqf")) { yaz_add_name_value_str(encode, name, value, &i, "terms.fl", request->scanClause); yaz_add_name_value_str(encode, name, value, &i, "terms.lower", request->scanClause); } else if (!strcmp(srw_pdu->u.scan_request->queryType, "cql")) { q = request->scanClause; cp = strchr(q, ':'); if (cp != NULL) { yaz_add_name_value_str(encode, name, value, &i, "terms.lower", odr_strdup(encode, cp + 1)); *cp = '\0'; yaz_add_name_value_str(encode, name, value, &i, "terms.fl", odr_strdup(encode, q)); *cp = ':'; } else yaz_add_name_value_str(encode, name, value, &i, "terms.lower", odr_strdup(encode, q)); } else return -1; yaz_add_name_value_str(encode, name, value, &i, "terms.sort", "index"); yaz_add_name_value_int(encode, name, value, &i, "terms.limit", request->maximumTerms); } else return -1; name[i++] = 0; yaz_array_to_uri(&uri_args, encode, name, value); hreq->method = "GET"; path = (char *) odr_malloc(encode, strlen(hreq->path) + strlen(uri_args) + strlen(solr_op) + 5); cp = strchr(hreq->path, '#'); if (cp) *cp = '\0'; strcpy(path, hreq->path); cp = strchr(path, '?'); if (cp && strcmp(solr_op, "terms")) { /* complete path with requestHandler */ int last = path[strlen(path)-1]; if (last != '?' && last != '&') strcat(path, "&"); } else { /* add requestHandler ourselves */ cp = strrchr(path, '/'); if (cp) { if (!strcmp(cp, "/select") || !strcmp(cp, "/")) *cp = '\0'; } strcat(path, "/"); strcat(path, solr_op); strcat(path, "?"); } strcat(path, uri_args); hreq->path = path; return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-date.c0000644000175000017500000001233113273126163011455 00000000000000/** \file z-date.c \brief ASN.1 Module UserInfoFormat-dateTime Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_DateTime(ODR o, Z_DateTime **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_Date, &(*p)->date, ODR_CONTEXT, 1, 1, "date") && odr_explicit_tag(o, z_Time, &(*p)->time, ODR_CONTEXT, 2, 1, "time") && odr_sequence_end(o); } int z_DateMonthAndDay(ODR o, Z_DateMonthAndDay **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->month, ODR_CONTEXT, 2, 0, "month") && odr_implicit_tag(o, odr_integer, &(*p)->day, ODR_CONTEXT, 3, 1, "day") && odr_sequence_end(o); } int z_DateQuarter(ODR o, Z_DateQuarter **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DateQuarter_first, (Odr_fun) odr_null, "first"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_DateQuarter_second, (Odr_fun) odr_null, "second"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_DateQuarter_third, (Odr_fun) odr_null, "third"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_DateQuarter_fourth, (Odr_fun) odr_null, "fourth"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_DateSeason(ODR o, Z_DateSeason **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DateSeason_winter, (Odr_fun) odr_null, "winter"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_DateSeason_spring, (Odr_fun) odr_null, "spring"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_DateSeason_summer, (Odr_fun) odr_null, "summer"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_DateSeason_autumn, (Odr_fun) odr_null, "autumn"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Era(ODR o, Z_Era **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Era_decade, (Odr_fun) odr_null, "decade"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Era_century, (Odr_fun) odr_null, "century"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Era_millennium, (Odr_fun) odr_null, "millennium"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_DateFlags(ODR o, Z_DateFlags **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_null, &(*p)->circa, ODR_CONTEXT, 1, 1, "circa") && odr_explicit_tag(o, z_Era, &(*p)->era, ODR_CONTEXT, 2, 1, "era") && odr_sequence_end(o); } int z_Date(ODR o, Z_Date **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Date_monthAndDay, (Odr_fun) z_DateMonthAndDay, "monthAndDay"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Date_julianDay, (Odr_fun) odr_integer, "julianDay"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Date_weekNumber, (Odr_fun) odr_integer, "weekNumber"}, {ODR_EXPLICIT, ODR_CONTEXT, 4, Z_Date_quarter, (Odr_fun) z_DateQuarter, "quarter"}, {ODR_EXPLICIT, ODR_CONTEXT, 5, Z_Date_season, (Odr_fun) z_DateSeason, "season"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->year, ODR_CONTEXT, 1, 0, "year") && ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 2, "partOfYear") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_implicit_tag(o, z_DateFlags, &(*p)->flags, ODR_CONTEXT, 3, 1, "flags") && odr_sequence_end(o); } int z_Time(ODR o, Z_Time **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Time_local, (Odr_fun) odr_null, "local"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Time_utc, (Odr_fun) odr_null, "utc"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Time_utcOffset, (Odr_fun) odr_integer, "utcOffset"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->hour, ODR_CONTEXT, 1, 0, "hour") && odr_implicit_tag(o, odr_integer, &(*p)->minute, ODR_CONTEXT, 2, 1, "minute") && odr_implicit_tag(o, odr_integer, &(*p)->second, ODR_CONTEXT, 3, 1, "second") && odr_implicit_tag(o, z_IntUnit, &(*p)->partOfSecond, ODR_CONTEXT, 4, 1, "partOfSecond") && odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 5, "zone") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_sequence_end(o); } yaz-5.28.0/src/gettimeofday.c0000644000175000017500000000150413265142510012745 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file gettimeofday.c * \brief Implements wrapper for gettimeofday * */ #if HAVE_CONFIG_H #include #endif #include #include #include #ifdef WIN32 #include #include #endif #if HAVE_SYS_TIME_H #include #endif #include int yaz_gettimeofday(struct timeval *tval) { #ifdef WIN32 struct _timeb timeb; _ftime(&timeb); tval->tv_sec = timeb.time; tval->tv_usec = timeb.millitm * 1000; return 0; #else return gettimeofday(tval, 0); #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-grs.c0000644000175000017500000001760513273126163011344 00000000000000/** \file z-grs.c \brief ASN.1 Module RecordSyntax-generic Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_GenericRecord(ODR o, Z_GenericRecord **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_TaggedElement, &(*p)->elements, &(*p)->num_elements, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_TaggedElement(ODR o, Z_TaggedElement **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 1, "tagType") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT, 2, 0, "tagValue") && odr_implicit_tag(o, odr_integer, &(*p)->tagOccurrence, ODR_CONTEXT, 3, 1, "tagOccurrence") && odr_explicit_tag(o, z_ElementData, &(*p)->content, ODR_CONTEXT, 4, 0, "content") && odr_implicit_tag(o, z_ElementMetaData, &(*p)->metaData, ODR_CONTEXT, 5, 1, "metaData") && odr_implicit_tag(o, z_Variant, &(*p)->appliedVariant, ODR_CONTEXT, 6, 1, "appliedVariant") && odr_sequence_end(o); } int z_ElementData(ODR o, Z_ElementData **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, Z_ElementData_octets, (Odr_fun) odr_octetstring, "octets"}, {-1, -1, -1, Z_ElementData_numeric, (Odr_fun) odr_integer, "numeric"}, {-1, -1, -1, Z_ElementData_date, (Odr_fun) odr_generalizedtime, "date"}, {-1, -1, -1, Z_ElementData_ext, (Odr_fun) z_External, "ext"}, {-1, -1, -1, Z_ElementData_string, (Odr_fun) z_InternationalString, "string"}, {-1, -1, -1, Z_ElementData_trueOrFalse, (Odr_fun) odr_bool, "trueOrFalse"}, {-1, -1, -1, Z_ElementData_oid, (Odr_fun) odr_oid, "oid"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementData_intUnit, (Odr_fun) z_IntUnit, "intUnit"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ElementData_elementNotThere, (Odr_fun) odr_null, "elementNotThere"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ElementData_elementEmpty, (Odr_fun) odr_null, "elementEmpty"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_ElementData_noDataRequested, (Odr_fun) odr_null, "noDataRequested"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ElementData_diagnostic, (Odr_fun) z_External, "diagnostic"}, {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_ElementData_subtree, (Odr_fun) z_GenericRecord, "subtree"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ElementMetaData(ODR o, Z_ElementMetaData **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_Order, &(*p)->seriesOrder, ODR_CONTEXT, 1, 1, "seriesOrder") && odr_implicit_tag(o, z_Usage, &(*p)->usageRight, ODR_CONTEXT, 2, 1, "usageRight") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_HitVector, &(*p)->hits, &(*p)->num_hits, "hits") || odr_ok(o)) && odr_implicit_tag(o, z_InternationalString, &(*p)->displayName, ODR_CONTEXT, 4, 1, "displayName") && odr_implicit_settag(o, ODR_CONTEXT, 5) && (odr_sequence_of(o, (Odr_fun) z_Variant, &(*p)->supportedVariants, &(*p)->num_supportedVariants, "supportedVariants") || odr_ok(o)) && odr_implicit_tag(o, z_InternationalString, &(*p)->message, ODR_CONTEXT, 6, 1, "message") && odr_implicit_tag(o, odr_octetstring, &(*p)->elementDescriptor, ODR_CONTEXT, 7, 1, "elementDescriptor") && odr_implicit_tag(o, z_TagPath, &(*p)->surrogateFor, ODR_CONTEXT, 8, 1, "surrogateFor") && odr_implicit_tag(o, z_TagPath, &(*p)->surrogateElement, ODR_CONTEXT, 9, 1, "surrogateElement") && odr_implicit_tag(o, z_External, &(*p)->other, ODR_CONTEXT, 99, 1, "other") && odr_sequence_end(o); } int z_TagPath_s(ODR o, Z_TagPath_s **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 1, "tagType") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT, 2, 0, "tagValue") && odr_implicit_tag(o, odr_integer, &(*p)->tagOccurrence, ODR_CONTEXT, 3, 1, "tagOccurrence") && odr_sequence_end(o); } int z_TagPath(ODR o, Z_TagPath **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_TagPath_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Order(ODR o, Z_Order **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_bool, &(*p)->ascending, ODR_CONTEXT, 1, 0, "ascending") && odr_implicit_tag(o, odr_integer, &(*p)->order, ODR_CONTEXT, 2, 0, "order") && odr_sequence_end(o); } int z_Usage(ODR o, Z_Usage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->type, ODR_CONTEXT, 1, 0, "type") && odr_implicit_tag(o, z_InternationalString, &(*p)->restriction, ODR_CONTEXT, 2, 1, "restriction") && odr_sequence_end(o); } int z_HitVector(ODR o, Z_HitVector **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_Term(o, &(*p)->satisfier, 1, "satisfier") && odr_implicit_tag(o, z_IntUnit, &(*p)->offsetIntoElement, ODR_CONTEXT, 1, 1, "offsetIntoElement") && odr_implicit_tag(o, z_IntUnit, &(*p)->length, ODR_CONTEXT, 2, 1, "length") && odr_implicit_tag(o, odr_integer, &(*p)->hitRank, ODR_CONTEXT, 3, 1, "hitRank") && odr_implicit_tag(o, odr_octetstring, &(*p)->targetToken, ODR_CONTEXT, 4, 1, "targetToken") && odr_sequence_end(o); } int z_Triple(ODR o, Z_Triple **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, Z_Triple_integer, (Odr_fun) odr_integer, "integer"}, {-1, -1, -1, Z_Triple_internationalString, (Odr_fun) z_InternationalString, "internationalString"}, {-1, -1, -1, Z_Triple_octetString, (Odr_fun) odr_octetstring, "octetString"}, {-1, -1, -1, Z_Triple_objectIdentifier, (Odr_fun) odr_oid, "objectIdentifier"}, {-1, -1, -1, Z_Triple_boolean, (Odr_fun) odr_bool, "boolean"}, {-1, -1, -1, Z_Triple_null, (Odr_fun) odr_null, "null"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Triple_unit, (Odr_fun) z_Unit, "unit"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Triple_valueAndUnit, (Odr_fun) z_IntUnit, "valueAndUnit"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->variantSetId, ODR_CONTEXT, 0, 1, "variantSetId") && odr_implicit_tag(o, odr_integer, &(*p)->zclass, ODR_CONTEXT, 1, 0, "zclass") && odr_implicit_tag(o, odr_integer, &(*p)->type, ODR_CONTEXT, 2, 0, "type") && odr_constructed_begin(o, &(*p)->value, ODR_CONTEXT, 3, "value") && odr_choice(o, arm, &(*p)->value, &(*p)->which, 0) && odr_constructed_end(o) && odr_sequence_end(o); } int z_Variant(ODR o, Z_Variant **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->globalVariantSetId, ODR_CONTEXT, 1, 1, "globalVariantSetId") && odr_implicit_settag(o, ODR_CONTEXT, 2) && odr_sequence_of(o, (Odr_fun) z_Triple, &(*p)->triples, &(*p)->num_triples, "triples") && odr_sequence_end(o); } yaz-5.28.0/src/errno.c0000644000175000017500000000306113265142510011411 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file errno.c * \brief errno utilities * * This file unlike other files in YAZ core is thread-aware, due to * the use errno. */ #if HAVE_CONFIG_H #include #endif #ifndef _REENTRANT #define _REENTRANT #endif #include #include #include #include #include #ifdef WIN32 #include #endif int yaz_errno(void) { return errno; } void yaz_set_errno(int v) { errno = v; } void yaz_strerror(char *buf, size_t bufsz) { #ifdef WIN32 DWORD err; #endif char *cp; #ifdef WIN32 err = GetLastError(); if (err) { FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default lang */ (LPTSTR) buf, bufsz-1, NULL); } else *buf = '\0'; #else /* UNIX */ #if HAVE_STRERROR_R *buf = '\0'; strerror_r(errno, buf, bufsz); /* if buffer is unset - use strerror anyway (GLIBC bug) */ if (*buf == '\0') strcpy(buf, strerror(yaz_errno())); #else strcpy(buf, strerror(yaz_errno())); #endif /* UNIX */ #endif if ((cp = strrchr(buf, '\n'))) *cp = '\0'; if ((cp = strrchr(buf, '\r'))) *cp = '\0'; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cql_sortkeys.c0000644000175000017500000000716313265142510013015 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cql_sortkeys.c * \brief CQL sortkeys utilities * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static void pr_n(void (*pr)(const char *buf, void *client_data), const char *buf, int len, void *client_data) { char tmp[4]; int left = len; while (left > 0) { if (left >= sizeof(tmp)) { memcpy(tmp, buf, sizeof(tmp)-1); tmp[sizeof(tmp)-1] = '\0'; left = left - (sizeof(tmp)-1); } else { memcpy(tmp, buf, left); tmp[left] = '\0'; left = 0; } pr(tmp, client_data); } } static int cql_sort_modifiers(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data) { int ascending = 1; int caseSensitive = 0; const char *missingValue = "highValue"; for (; cn; cn = cn->u.st.modifiers) { const char *indx = cn->u.st.index; if (!strncmp(indx, "sort.", 5)) indx = indx + 5; if (!strcmp(indx, "ignoreCase")) caseSensitive = 0; else if (!strcmp(indx, "respectCase")) caseSensitive = 1; else if (!strcmp(indx, "ascending")) ascending = 1; else if (!strcmp(indx, "descending")) ascending = 0; else if (!strcmp(indx, "missingOmit")) missingValue = "omit"; else if (!strcmp(indx, "missingFail")) missingValue = "abort"; else if (!strcmp(indx, "missingLow")) missingValue = "lowValue"; else if (!strcmp(indx, "missingHigh")) missingValue = "highValue"; else return -1; } pr(ascending ? "1" : "0", client_data); pr(",", client_data); pr(caseSensitive ? "1" : "0", client_data); pr(",", client_data); pr(missingValue, client_data); return 0; } int cql_sortby_to_sortkeys(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data) { int r = 0; if (cn && cn->which == CQL_NODE_SORT) { for (; cn; cn = cn->u.sort.next) { const char *indx = cn->u.sort.index; if (indx) { const char *s = strchr(indx, '.'); if (s) { pr(s+1, client_data); pr(",", client_data); pr_n(pr, indx, s - indx, client_data); } else { pr(indx, client_data); pr(",", client_data); } pr(",", client_data); r = cql_sort_modifiers(cn->u.sort.modifiers, pr, client_data); if (r) break; if (cn->u.sort.next) pr(" ", client_data); } } } return r; } int cql_sortby_to_sortkeys_buf(struct cql_node *cn, char *out, int max) { struct cql_buf_write_info info; int r; info.off = 0; info.max = max; info.buf = out; r = cql_sortby_to_sortkeys(cn, cql_buf_write_handler, &info); if (info.off >= 0) info.buf[info.off] = '\0'; return r; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/statserv.c0000644000175000017500000012632713467505553012170 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file statserv.c * \brief Implements GFS logic */ #if HAVE_CONFIG_H #include #endif #include #include #include #ifdef WIN32 #include #include #include #endif #include #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_WAIT_H #include #endif #if HAVE_UNISTD_H #include #endif #if HAVE_PWD_H #include #endif #if YAZ_HAVE_XML2 #include #include #include #endif #if YAZ_POSIX_THREADS #include #endif #include #include #include #include #include #include #include #ifdef USE_XTIMOSI #include #endif #include #include "eventl.h" #include "session.h" #include #include #include static IOCHAN pListener = NULL; static char gfs_root_dir[FILENAME_MAX+1]; static struct gfs_server *gfs_server_list = 0; static struct gfs_listen *gfs_listen_list = 0; static NMEM gfs_nmem = 0; static char *me = "statserver"; /* log prefix */ static char *programname="statserver"; /* full program name */ #ifdef WIN32 DWORD current_control_tls; static int init_control_tls = 0; #elif YAZ_POSIX_THREADS static pthread_key_t current_control_tls; static int init_control_tls = 0; #else static statserv_options_block *current_control_block = 0; #endif /* * default behavior. */ #define STAT_DEFAULT_LOG_LEVEL "server,session,request" int check_options(int argc, char **argv); statserv_options_block control_block = { 1, /* dynamic mode */ 0, /* threaded mode */ 0, /* one shot (single session) */ "", /* no PDUs */ "", /* diagnostic output to stderr */ PROTO_Z3950, /* default application protocol */ 900, /* idle timeout (seconds) */ 64*1024*1024, /* maximum PDU size (approx.) to allow */ "default-config", /* configuration name to pass to backend */ "", /* set user id */ 0, /* bend_start handler */ 0, /* bend_stop handler */ check_options, /* Default routine, for checking the run-time arguments */ check_ip_tcpd, "", 0, /* default value for inet deamon */ 0, /* handle (for service, etc) */ 0, /* bend_init handle */ 0, /* bend_close handle */ #ifdef WIN32 "Z39.50 Server", /* NT Service Name */ "Server", /* NT application Name */ "", /* NT Service Dependencies */ "Z39.50 Server", /* NT Service Display Name */ #endif /* WIN32 */ "", /* PID fname */ 0, /* background daemon */ "", /* SSL certificate filename */ "", /* XML config filename */ 1 /* keepalive */ }; static int max_sessions = 0; static int logbits_set = 0; static int log_session = 0; /* one-line logs for session */ static int log_sessiondetail = 0; /* more detailed stuff */ static int log_server = 0; /** get_logbits sets global loglevel bits */ static void get_logbits(int force) { /* needs to be called after parsing cmd-line args that can set loglevels!*/ if (force || !logbits_set) { logbits_set = 1; log_session = yaz_log_module_level("session"); log_sessiondetail = yaz_log_module_level("sessiondetail"); log_server = yaz_log_module_level("server"); } } static int add_listener(char *where, int listen_id); #if YAZ_HAVE_XML2 static xmlDocPtr xml_config_doc = 0; #endif #if YAZ_HAVE_XML2 static xmlNodePtr xml_config_get_root(void) { xmlNodePtr ptr = 0; if (xml_config_doc) { ptr = xmlDocGetRootElement(xml_config_doc); if (!ptr || ptr->type != XML_ELEMENT_NODE || strcmp((const char *) ptr->name, "yazgfs")) { yaz_log(YLOG_WARN, "Bad/missing root element for config %s", control_block.xml_config); return 0; } } return ptr; } #endif #if YAZ_HAVE_XML2 static char *nmem_dup_xml_content(NMEM n, xmlNodePtr ptr) { unsigned char *cp; xmlNodePtr p; int len = 1; /* start with 1, because of trailing 0 */ unsigned char *str; int first = 1; /* whitespace lead flag .. */ /* determine length */ for (p = ptr; p; p = p->next) { if (p->type == XML_TEXT_NODE) len += xmlStrlen(p->content); } /* now allocate for the string */ str = (unsigned char *) nmem_malloc(n, len); *str = '\0'; /* so we can use strcat */ for (p = ptr; p; p = p->next) { if (p->type == XML_TEXT_NODE) { cp = p->content; if (first) { while(*cp && yaz_isspace(*cp)) cp++; if (*cp) first = 0; /* reset if we got non-whitespace out */ } strcat((char *)str, (const char *)cp); /* append */ } } /* remove trailing whitespace */ cp = strlen((const char *)str) + str; while (cp != str && yaz_isspace(cp[-1])) cp--; *cp = '\0'; /* return resulting string */ return (char *) str; } #endif #if YAZ_HAVE_XML2 static struct gfs_server * gfs_server_new(const char *id) { struct gfs_server *n = (struct gfs_server *) nmem_malloc(gfs_nmem, sizeof(*n)); memcpy(&n->cb, &control_block, sizeof(control_block)); n->next = 0; n->host = 0; n->listen_ref = 0; n->cql_transform = 0; n->ccl_transform = 0; n->server_node_ptr = 0; n->directory = 0; n->docpath = 0; n->stylesheet = 0; n->client_query_charset = 0; n->id = nmem_strdup_null(gfs_nmem, id); n->retrieval = yaz_retrieval_create(); return n; } #endif #if YAZ_HAVE_XML2 static struct gfs_listen * gfs_listen_new(const char *id, const char *address) { struct gfs_listen *n = (struct gfs_listen *) nmem_malloc(gfs_nmem, sizeof(*n)); if (id) n->id = nmem_strdup(gfs_nmem, id); else n->id = 0; n->next = 0; n->address = nmem_strdup(gfs_nmem, address); return n; } #endif static void gfs_server_chdir(struct gfs_server *gfs) { if (gfs_root_dir[0]) { if (chdir(gfs_root_dir)) yaz_log(YLOG_WARN|YLOG_ERRNO, "chdir %s", gfs_root_dir); } if (gfs->directory) { if (chdir(gfs->directory)) yaz_log(YLOG_WARN|YLOG_ERRNO, "chdir %s", gfs->directory); } } int control_association(association *assoc, const char *host, int force_open) { char vhost[128], *cp; if (host) { strncpy(vhost, host, 127); vhost[127] = '\0'; cp = strchr(vhost, ':'); if (cp) *cp = '\0'; host = vhost; } assoc->server = 0; if (control_block.xml_config[0]) { struct gfs_server *gfs; for (gfs = gfs_server_list; gfs; gfs = gfs->next) { int listen_match = 0; int host_match = 0; if ( !gfs->host || (host && gfs->host && !strcmp(host, gfs->host))) host_match = 1; if (!gfs->listen_ref) listen_match = 1; else { int i; for (i = 0; gfs->listen_ref[i] != -1; i++) if (gfs->listen_ref[i] == assoc->client_chan->chan_id) listen_match = 1; } if (listen_match && host_match) { if (force_open || (assoc->last_control != &gfs->cb && assoc->backend)) { statserv_setcontrol(assoc->last_control); if (assoc->backend && assoc->init) { gfs_server_chdir(gfs); (assoc->last_control->bend_close)(assoc->backend); } assoc->backend = 0; xfree(assoc->init); assoc->init = 0; } assoc->server = gfs; assoc->last_control = &gfs->cb; statserv_setcontrol(&gfs->cb); gfs_server_chdir(gfs); break; } } if (!gfs) { statserv_setcontrol(0); assoc->last_control = 0; return 0; } } else { statserv_setcontrol(&control_block); assoc->last_control = &control_block; } yaz_log(YLOG_DEBUG, "server select: config=%s", assoc->last_control->configname); assoc->maximumRecordSize = assoc->last_control->maxrecordsize; assoc->preferredMessageSize = assoc->last_control->maxrecordsize; cs_set_max_recv_bytes(assoc->client_link, assoc->maximumRecordSize); return 1; } #if YAZ_HAVE_XML2 static void xml_config_read(const char *base_path) { struct gfs_server **gfsp = &gfs_server_list; struct gfs_listen **gfslp = &gfs_listen_list; xmlNodePtr ptr = xml_config_get_root(); if (!ptr) return; for (ptr = ptr->children; ptr; ptr = ptr->next) { struct _xmlAttr *attr; if (ptr->type != XML_ELEMENT_NODE) continue; attr = ptr->properties; if (!strcmp((const char *) ptr->name, "listen")) { /* tcp:@:9999 */ const char *id = 0; const char *address = nmem_dup_xml_content(gfs_nmem, ptr->children); for ( ; attr; attr = attr->next) if (!xmlStrcmp(attr->name, BAD_CAST "id") && attr->children && attr->children->type == XML_TEXT_NODE) id = nmem_dup_xml_content(gfs_nmem, attr->children); if (address) { *gfslp = gfs_listen_new(id, address); gfslp = &(*gfslp)->next; *gfslp = 0; /* make listener list consistent for search */ } } else if (!strcmp((const char *) ptr->name, "server")) { xmlNodePtr ptr_server = ptr; xmlNodePtr ptr; const char *listenref = 0; const char *id = 0; struct gfs_server *gfs; for ( ; attr; attr = attr->next) if (!xmlStrcmp(attr->name, BAD_CAST "listenref") && attr->children && attr->children->type == XML_TEXT_NODE) listenref = nmem_dup_xml_content(gfs_nmem, attr->children); else if (!xmlStrcmp(attr->name, BAD_CAST "id") && attr->children && attr->children->type == XML_TEXT_NODE) id = nmem_dup_xml_content(gfs_nmem, attr->children); else yaz_log(YLOG_WARN, "Unknown attribute '%s' for server", attr->name); gfs = *gfsp = gfs_server_new(id); gfs->server_node_ptr = ptr_server; if (listenref) { char **refs; int num, i; nmem_strsplit(gfs_nmem, ",", listenref, &refs, &num); gfs->listen_ref = (int*) nmem_malloc(gfs_nmem, sizeof(int) * (num + 1)); for (i = 0; i < num; i++) { int id_no; struct gfs_listen *gl = gfs_listen_list; gfs->listen_ref[i] = 0; for (id_no = 1; gl; gl = gl->next, id_no++) if (gl->id && !strcmp(gl->id, refs[i])) { gfs->listen_ref[i] = id_no; break; } if (!gl) yaz_log(YLOG_WARN, "Non-existent listenref '%s' " "in server config element", refs[i]); } gfs->listen_ref[i] = -1; } for (ptr = ptr_server->children; ptr; ptr = ptr->next) { if (ptr->type != XML_ELEMENT_NODE) continue; if (!strcmp((const char *) ptr->name, "host")) { gfs->host = nmem_dup_xml_content(gfs_nmem, ptr->children); } else if (!strcmp((const char *) ptr->name, "config")) { char fpath[1024]; strcpy(gfs->cb.configname, nmem_dup_xml_content(gfs_nmem, ptr->children)); if (yaz_filepath_resolve(gfs->cb.configname, base_path, 0, fpath)) strcpy(gfs->cb.configname, fpath); } else if (!strcmp((const char *) ptr->name, "cql2rpn")) { char fpath[1024]; char *fname = nmem_dup_xml_content(gfs_nmem, ptr->children); if (yaz_filepath_resolve(fname, base_path, 0, fpath)) fname = fpath; gfs->cql_transform = cql_transform_open_fname(fname); if (!gfs->cql_transform) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "open CQL transform file '%s'", fname); exit(1); } } else if (!strcmp((const char *) ptr->name, "ccl2rpn")) { char *fname, fpath[1024]; FILE *f; fname = nmem_dup_xml_content(gfs_nmem, ptr->children); if (yaz_filepath_resolve(fname, base_path, 0, fpath)) fname = fpath; if ((f = fopen(fname, "r")) == 0) { yaz_log(YLOG_FATAL, "can't open CCL file '%s'", fname); exit(1); } gfs->ccl_transform = ccl_qual_mk(); ccl_qual_file (gfs->ccl_transform, f); fclose(f); } else if (!strcmp((const char *) ptr->name, "directory")) { gfs->directory = nmem_dup_xml_content(gfs_nmem, ptr->children); } else if (!strcmp((const char *) ptr->name, "docpath")) { gfs->docpath = nmem_dup_xml_content(gfs_nmem, ptr->children); } else if (!strcmp((const char *) ptr->name, "maximumrecordsize")) { gfs->cb.maxrecordsize = atoi( nmem_dup_xml_content(gfs_nmem, ptr->children)); } else if (!strcmp((const char *) ptr->name, "stylesheet")) { char *s = nmem_dup_xml_content(gfs_nmem, ptr->children); gfs->stylesheet = (char *) nmem_malloc(gfs_nmem, strlen(s) + 2); sprintf(gfs->stylesheet, "/%s", s); } else if (!strcmp((const char *) ptr->name, "client_query_charset")) { gfs->client_query_charset = nmem_dup_xml_content(gfs_nmem, ptr->children); } else if (!strcmp((const char *) ptr->name, "explain")) { ; /* being processed separately */ } else if (!strcmp((const char *) ptr->name, "retrievalinfo")) { if (base_path) yaz_retrieval_set_path(gfs->retrieval, base_path); if (yaz_retrieval_configure(gfs->retrieval, ptr)) { yaz_log(YLOG_FATAL, "%s in config %s", yaz_retrieval_get_error(gfs->retrieval), control_block.xml_config); exit(1); } } else { yaz_log(YLOG_FATAL, "Unknown element '%s' in config %s", ptr->name, control_block.xml_config); exit(1); } } gfsp = &(*gfsp)->next; } } *gfsp = 0; } #endif static int xml_config_open(void) { const char *last_p; const char *fname = control_block.xml_config; if (!getcwd(gfs_root_dir, FILENAME_MAX)) { yaz_log(YLOG_WARN|YLOG_ERRNO, "getcwd failed"); gfs_root_dir[0] = '\0'; } #ifdef WIN32 init_control_tls = 1; current_control_tls = TlsAlloc(); #elif YAZ_POSIX_THREADS init_control_tls = 1; pthread_key_create(¤t_control_tls, 0); #endif gfs_nmem = nmem_create(); #if YAZ_HAVE_XML2 if (fname[0] == '\0') return 0; if (!xml_config_doc) { xml_config_doc = xmlParseFile(fname); if (!xml_config_doc) { yaz_log(YLOG_FATAL, "Could not parse %s", fname); return -1; } else { int noSubstitutions = xmlXIncludeProcess(xml_config_doc); if (noSubstitutions == -1) { yaz_log(YLOG_WARN, "XInclude processing failed for config %s", fname); return -1; } } } last_p = strrchr(fname, #ifdef WIN32 '\\' #else '/' #endif ); if (last_p) { WRBUF base_path = wrbuf_alloc(); wrbuf_write(base_path, fname, last_p - fname); xml_config_read(wrbuf_cstr(base_path)); wrbuf_destroy(base_path); } else xml_config_read(0); #endif return 0; } static void xml_config_close(void) { #if YAZ_HAVE_XML2 if (xml_config_doc) { xmlFreeDoc(xml_config_doc); xml_config_doc = 0; } #endif gfs_server_list = 0; nmem_destroy(gfs_nmem); #ifdef WIN32 if (init_control_tls) TlsFree(current_control_tls); #elif YAZ_POSIX_THREADS if (init_control_tls) pthread_key_delete(current_control_tls); #endif } static int xml_config_add_listeners(void) { struct gfs_listen *gfs = gfs_listen_list; int id_no; int ret = 0; for (id_no = 1; gfs; gfs = gfs->next, id_no++) { if (!ret && gfs->address) ret = add_listener(gfs->address, id_no); } return ret; } static void xml_config_bend_start(void) { if (control_block.xml_config[0]) { struct gfs_server *gfs = gfs_server_list; for (; gfs; gfs = gfs->next) { yaz_log(YLOG_DEBUG, "xml_config_bend_start config=%s", gfs->cb.configname); statserv_setcontrol(&gfs->cb); if (control_block.bend_start) { gfs_server_chdir(gfs); (control_block.bend_start)(&gfs->cb); } } } else { yaz_log(YLOG_DEBUG, "xml_config_bend_start default config"); statserv_setcontrol(&control_block); if (control_block.bend_start) (*control_block.bend_start)(&control_block); } } static void xml_config_bend_stop(void) { if (control_block.xml_config[0]) { struct gfs_server *gfs = gfs_server_list; for (; gfs; gfs = gfs->next) { yaz_log(YLOG_DEBUG, "xml_config_bend_stop config=%s", gfs->cb.configname); statserv_setcontrol(&gfs->cb); if (control_block.bend_stop) (control_block.bend_stop)(&gfs->cb); } } else { yaz_log(YLOG_DEBUG, "xml_config_bend_stop default config"); statserv_setcontrol(&control_block); if (control_block.bend_stop) (*control_block.bend_stop)(&control_block); } } static void remove_listeners(void); /* * handle incoming connect requests. * The dynamic mode is a bit tricky mostly because we want to avoid * doing all of the listening and accepting in the parent - it's * safer that way. */ #ifdef WIN32 typedef struct _ThreadList ThreadList; struct _ThreadList { HANDLE hThread; IOCHAN pIOChannel; ThreadList *pNext; }; static ThreadList *pFirstThread; static CRITICAL_SECTION Thread_CritSect; static BOOL bInitialized = FALSE; static void ThreadList_Initialize() { /* Initialize the critical Sections */ InitializeCriticalSection(&Thread_CritSect); /* Set the first thraed */ pFirstThread = NULL; /* we have been initialized */ bInitialized = TRUE; } static void statserv_add(HANDLE hThread, IOCHAN pIOChannel) { /* Only one thread can go through this section at a time */ EnterCriticalSection(&Thread_CritSect); { /* Lets create our new object */ ThreadList *pNewThread = (ThreadList *)malloc(sizeof(ThreadList)); pNewThread->hThread = hThread; pNewThread->pIOChannel = pIOChannel; pNewThread->pNext = pFirstThread; pFirstThread = pNewThread; /* Lets let somebody else create a new object now */ LeaveCriticalSection(&Thread_CritSect); } } void statserv_remove(IOCHAN pIOChannel) { /* Only one thread can go through this section at a time */ EnterCriticalSection(&Thread_CritSect); { ThreadList *pCurrentThread = pFirstThread; ThreadList *pNextThread; ThreadList *pPrevThread =NULL; /* Step through all the threads */ for (; pCurrentThread != NULL; pCurrentThread = pNextThread) { /* We only need to compare on the IO Channel */ if (pCurrentThread->pIOChannel == pIOChannel) { /* We have found the thread we want to delete */ /* First of all reset the next pointers */ if (pPrevThread == NULL) pFirstThread = pCurrentThread->pNext; else pPrevThread->pNext = pCurrentThread->pNext; /* All we need todo now is delete the memory */ free(pCurrentThread); /* No need to look at any more threads */ pNextThread = NULL; } else { /* We need to look at another thread */ pNextThread = pCurrentThread->pNext; pPrevThread = pCurrentThread; } } /* Lets let somebody else remove an object now */ LeaveCriticalSection(&Thread_CritSect); } } /* WIN32 statserv_closedown */ static void statserv_closedown() { /* Shouldn't do anything if we are not initialized */ if (bInitialized) { int iHandles = 0; HANDLE *pThreadHandles = NULL; /* We need to stop threads adding and removing while we */ /* start the closedown process */ EnterCriticalSection(&Thread_CritSect); { /* We have exclusive access to the thread stuff now */ /* Y didn't i use a semaphore - Oh well never mind */ ThreadList *pCurrentThread = pFirstThread; /* Before we do anything else, we need to shutdown the listener */ if (pListener != NULL) iochan_destroy(pListener); for (; pCurrentThread != NULL; pCurrentThread = pCurrentThread->pNext) { /* Just destroy the IOCHAN, that should do the trick */ iochan_destroy(pCurrentThread->pIOChannel); closesocket(pCurrentThread->pIOChannel->fd); /* Keep a running count of our handles */ iHandles++; } if (iHandles > 0) { HANDLE *pCurrentHandle ; /* Allocate the thread handle array */ pThreadHandles = (HANDLE *)malloc(sizeof(HANDLE) * iHandles); pCurrentHandle = pThreadHandles; for (pCurrentThread = pFirstThread; pCurrentThread != NULL; pCurrentThread = pCurrentThread->pNext, pCurrentHandle++) { /* Just the handle */ *pCurrentHandle = pCurrentThread->hThread; } } /* We can now leave the critical section */ LeaveCriticalSection(&Thread_CritSect); } /* Now we can really do something */ if (iHandles > 0) { yaz_log(log_server, "waiting for %d to die", iHandles); /* This will now wait, until all the threads close */ WaitForMultipleObjects(iHandles, pThreadHandles, TRUE, INFINITE); /* Free the memory we allocated for the handle array */ free(pThreadHandles); } xml_config_bend_stop(); /* No longer require the critical section, since all threads are dead */ DeleteCriticalSection(&Thread_CritSect); } xml_config_close(); } void __cdecl event_loop_thread(IOCHAN iochan) { iochan_event_loop(&iochan, 0); } /* WIN32 listener */ static void listener(IOCHAN h, int event) { COMSTACK line = (COMSTACK) iochan_getdata(h); IOCHAN parent_chan = line->user; association *newas; int res; HANDLE newHandle; if (event == EVENT_INPUT) { COMSTACK new_line; IOCHAN new_chan; if ((res = cs_listen(line, 0, 0)) < 0) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "cs_listen failed"); return; } else if (res == 1) return; /* incomplete */ yaz_log(YLOG_DEBUG, "listen ok"); new_line = cs_accept(line); if (!new_line) { yaz_log(YLOG_FATAL, "Accept failed."); return; } yaz_log(YLOG_DEBUG, "Accept ok"); if (!(new_chan = iochan_create(cs_fileno(new_line), ir_session, EVENT_INPUT, parent_chan->chan_id))) { yaz_log(YLOG_FATAL, "Failed to create iochan"); iochan_destroy(h); return; } yaz_log(YLOG_DEBUG, "Creating association"); if (!(newas = create_association(new_chan, new_line, control_block.apdufile))) { yaz_log(YLOG_FATAL, "Failed to create new assoc."); iochan_destroy(h); return; } newas->cs_get_mask = EVENT_INPUT; newas->cs_put_mask = 0; newas->cs_accept_mask = 0; yaz_log(YLOG_DEBUG, "Setting timeout %d", control_block.idle_timeout); iochan_setdata(new_chan, newas); iochan_settimeout(new_chan, 60); /* Now what we need todo is create a new thread with this iochan as the parameter */ newHandle = (HANDLE) _beginthread(event_loop_thread, 0, new_chan); if (newHandle == (HANDLE) -1) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Failed to create new thread."); iochan_destroy(h); return; } /* We successfully created the thread, so add it to the list */ statserv_add(newHandle, new_chan); yaz_log(YLOG_DEBUG, "Created new thread, id = %ld iochan %p",(long) newHandle, new_chan); iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */ } else { yaz_log(YLOG_FATAL, "Bad event on listener."); iochan_destroy(h); return; } } #else /* ! WIN32 */ /* To save having an #ifdef in event_loop we need to define this empty function */ void statserv_remove(IOCHAN pIOChannel) { } static void statserv_closedown(void) { IOCHAN p; xml_config_bend_stop(); for (p = pListener; p; p = p->next) { iochan_destroy(p); } xml_config_close(); } static void *new_session(void *vp); static int no_sessions = 0; /* UNIX listener */ static void listener(IOCHAN h, int event) { COMSTACK line = (COMSTACK) iochan_getdata(h); int res; if (event == EVENT_INPUT) { COMSTACK new_line; if ((res = cs_listen_check(line, 0, 0, control_block.check_ip, control_block.daemon_name)) < 0) { yaz_log(YLOG_WARN|YLOG_ERRNO, "cs_listen failed"); return; } else if (res == 1) { yaz_log(YLOG_WARN, "cs_listen incomplete"); return; } new_line = cs_accept(line); if (!new_line) { yaz_log(YLOG_FATAL, "Accept failed."); iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */ return; } if (control_block.one_shot) remove_listeners(); yaz_log(log_sessiondetail, "Connect from %s", cs_addrstr(new_line)); no_sessions++; if (control_block.dynamic) { if ((res = fork()) < 0) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "fork"); iochan_destroy(h); return; } else if (res == 0) /* child */ { char nbuf[100]; IOCHAN pp; for (pp = pListener; pp; pp = iochan_getnext(pp)) { COMSTACK l = (COMSTACK)iochan_getdata(pp); cs_close(l); iochan_destroy(pp); } sprintf(nbuf, "%s(%d)", me, no_sessions); yaz_log_init_prefix(nbuf); /* ensure that bend_stop is not called when each child exits - only for the main process .. */ control_block.bend_stop = 0; } else /* parent */ { cs_close(new_line); return; } } if (control_block.threads) { #if YAZ_POSIX_THREADS pthread_t child_thread; pthread_create(&child_thread, 0, new_session, new_line); pthread_detach(child_thread); #else new_session(new_line); #endif } else new_session(new_line); } else if (event == EVENT_TIMEOUT) { yaz_log(log_server, "Shutting down listener."); iochan_destroy(h); } else { yaz_log(YLOG_FATAL, "Bad event on listener."); iochan_destroy(h); } } static void *new_session(void *vp) { const char *a; association *newas; IOCHAN new_chan; COMSTACK new_line = (COMSTACK) vp; IOCHAN parent_chan = (IOCHAN) new_line->user; unsigned cs_get_mask, cs_accept_mask, mask = ((new_line->io_pending & CS_WANT_WRITE) ? EVENT_OUTPUT : 0) | ((new_line->io_pending & CS_WANT_READ) ? EVENT_INPUT : 0); if (mask) { cs_accept_mask = mask; /* accept didn't complete */ cs_get_mask = 0; } else { cs_accept_mask = 0; /* accept completed. */ cs_get_mask = mask = EVENT_INPUT; } if (!(new_chan = iochan_create(cs_fileno(new_line), ir_session, mask, parent_chan->chan_id))) { yaz_log(YLOG_FATAL, "Failed to create iochan"); return 0; } if (!(newas = create_association(new_chan, new_line, control_block.apdufile))) { yaz_log(YLOG_FATAL, "Failed to create new assoc."); return 0; } newas->cs_accept_mask = cs_accept_mask; newas->cs_get_mask = cs_get_mask; iochan_setdata(new_chan, newas); iochan_settimeout(new_chan, 60); #if 1 a = cs_addrstr(new_line); #else a = 0; #endif yaz_log_xml_errors(0, YLOG_WARN); yaz_log(log_session, "Session - OK %d %s PID=%ld", no_sessions, a ? a : "[Unknown]", (long) getpid()); if (max_sessions && no_sessions >= max_sessions) control_block.one_shot = 1; if (control_block.threads) { iochan_event_loop(&new_chan, 0); } else { new_chan->next = pListener; pListener = new_chan; } return 0; } /* UNIX */ #endif static void inetd_connection(int what) { COMSTACK line; IOCHAN chan; association *assoc; const char *addr; if ((line = cs_createbysocket(0, tcpip_type, 0, what))) { if ((chan = iochan_create(cs_fileno(line), ir_session, EVENT_INPUT, 0))) { if ((assoc = create_association(chan, line, control_block.apdufile))) { iochan_setdata(chan, assoc); iochan_settimeout(chan, 60); addr = cs_addrstr(line); yaz_log(log_sessiondetail, "Inetd association from %s", addr ? addr : "[UNKNOWN]"); assoc->cs_get_mask = EVENT_INPUT; } else { yaz_log(YLOG_FATAL, "Failed to create association structure"); } chan->next = pListener; pListener = chan; } else { yaz_log(YLOG_FATAL, "Failed to create iochan"); } } else { yaz_log(YLOG_ERRNO|YLOG_FATAL, "Failed to create comstack on socket 0"); } } /* * Set up a listening endpoint, and give it to the event-handler. */ static int add_listener(char *where, int listen_id) { COMSTACK l; void *ap; IOCHAN lst = NULL; const char *mode; if (control_block.dynamic) mode = "dynamic"; else if (control_block.threads) mode = "threaded"; else mode = "static"; yaz_log(log_server, "Adding %s listener on %s id=%d PID=%ld", mode, where, listen_id, (long) getpid()); l = cs_create_host(where, 2, &ap); if (!l) { yaz_log(YLOG_FATAL, "Failed to listen on %s", where); return -1; } if (*control_block.cert_fname) cs_set_ssl_certificate_file(l, control_block.cert_fname); if (cs_bind(l, ap, CS_SERVER) < 0) { if (cs_errno(l) == CSYSERR) yaz_log(YLOG_FATAL|YLOG_ERRNO, "Failed to bind to %s", where); else yaz_log(YLOG_FATAL, "Failed to bind to %s: %s", where, cs_strerror(l)); cs_close(l); return -1; } if (!(lst = iochan_create(cs_fileno(l), listener, EVENT_INPUT | EVENT_EXCEPT, listen_id))) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Failed to create IOCHAN-type"); cs_close(l); return -1; } iochan_setdata(lst, l); /* user-defined data for listener is COMSTACK */ l->user = lst; /* user-defined data for COMSTACK is listener chan */ /* Add listener to chain */ lst->next = pListener; pListener = lst; return 0; /* OK */ } static void remove_listeners(void) { IOCHAN l = pListener; for (; l; l = l->next) iochan_destroy(l); } #ifndef WIN32 /* UNIX only (for windows we don't need to catch the signals) */ static void catchchld(int num) { while (waitpid(-1, 0, WNOHANG) > 0) ; signal(SIGCHLD, catchchld); } #endif statserv_options_block *statserv_getcontrol(void) { #ifdef WIN32 if (init_control_tls) return (statserv_options_block *) TlsGetValue(current_control_tls); else return &control_block; #elif YAZ_POSIX_THREADS if (init_control_tls) return (statserv_options_block *) pthread_getspecific(current_control_tls); else return &control_block; #else if (current_control_block) return current_control_block; return &control_block; #endif } void statserv_setcontrol(statserv_options_block *block) { if (gfs_root_dir[0]) { if (chdir(gfs_root_dir)) yaz_log(YLOG_WARN|YLOG_ERRNO, "chdir %s", gfs_root_dir); } #ifdef WIN32 if (init_control_tls) TlsSetValue(current_control_tls, block); #elif YAZ_POSIX_THREADS if (init_control_tls) pthread_setspecific(current_control_tls, block); #else current_control_block = block; #endif } static void statserv_reset(void) { } static int sig_received = 0; #ifndef WIN32 static void normal_stop_handler(int num) { sig_received = num; } #endif static void daemon_handler(void *data) { IOCHAN *pListener = data; iochan_event_loop(pListener, &sig_received); } static void show_version(void) { char vstr[20], sha1_str[41]; yaz_version(vstr, sha1_str); printf("YAZ version: %s %s\n", YAZ_VERSION, YAZ_VERSION_SHA1); if (strcmp(sha1_str, YAZ_VERSION_SHA1)) printf("YAZ DLL/SO: %s %s\n", vstr, sha1_str); exit(0); } static int statserv_sc_main(yaz_sc_t s, int argc, char **argv) { char sep; #ifdef WIN32 /* We need to initialize the thread list */ ThreadList_Initialize(); /* WIN32 */ #endif #ifdef WIN32 sep = '\\'; #else sep = '/'; #endif if ((me = strrchr(argv[0], sep))) me++; /* get the basename */ else me = argv[0]; programname = argv[0]; if (control_block.options_func(argc, argv)) return 1; if (xml_config_open()) return 1; xml_config_bend_start(); if (control_block.inetd) { #ifdef WIN32 ; /* no inetd on Windows */ #else inetd_connection(control_block.default_proto); #endif } else { if (xml_config_add_listeners()) return 1; if (!pListener) add_listener("tcp:@:9999", 0); #ifndef WIN32 if (control_block.dynamic) signal(SIGCHLD, catchchld); #endif } if (pListener == NULL) return 1; if (s) yaz_sc_running(s); #ifndef WIN32 signal(SIGTERM, normal_stop_handler); #endif yaz_daemon(programname, (control_block.background ? YAZ_DAEMON_FORK : 0), daemon_handler, &pListener, *control_block.pid_fname ? control_block.pid_fname : 0, *control_block.setuid ? control_block.setuid : 0); #ifndef WIN32 if (sig_received) yaz_log(YLOG_LOG, "Received SIGTERM PID=%ld", (long) getpid()); #endif return 0; } static void option_copy(char *dst, const char *src) { strncpy(dst, src ? src : "", BEND_NAME_MAX-1); dst[BEND_NAME_MAX-1] = '\0'; } int check_options(int argc, char **argv) { int ret = 0, r; char *arg; yaz_log_init_level(yaz_log_mask_str(STAT_DEFAULT_LOG_LEVEL)); get_logbits(1); while ((ret = options("1a:iszSTl:v:u:c:w:t:k:Kd:A:p:DC:f:m:r:V", argv, argc, &arg)) != -2) { switch (ret) { case 0: if (add_listener(arg, 0)) return 1; /* failed to create listener */ break; case '1': control_block.one_shot = 1; control_block.dynamic = 0; break; case 'z': control_block.default_proto = PROTO_Z3950; break; case 's': fprintf(stderr, "%s: SR protocol no longer supported\n", me); exit(1); break; case 'S': control_block.dynamic = 0; break; case 'T': #if YAZ_POSIX_THREADS control_block.dynamic = 0; control_block.threads = 1; #else fprintf(stderr, "%s: Threaded mode not available.\n", me); return 1; #endif break; case 'l': option_copy(control_block.logfile, arg); yaz_log_init_file(control_block.logfile); break; case 'm': if (!arg) { fprintf(stderr, "%s: Specify time format for log file.\n", me); return(1); } yaz_log_time_format(arg); break; case 'v': yaz_log_init_level(yaz_log_mask_str(arg)); get_logbits(1); break; case 'a': option_copy(control_block.apdufile, arg); break; case 'u': option_copy(control_block.setuid, arg); break; case 'c': option_copy(control_block.configname, arg); break; case 'C': option_copy(control_block.cert_fname, arg); break; case 'd': option_copy(control_block.daemon_name, arg); break; case 't': if (!arg || !(r = atoi(arg))) { fprintf(stderr, "%s: Specify positive timeout for -t.\n", me); return(1); } control_block.idle_timeout = strchr(arg, 's') ? r : 60 * r; break; case 'k': if (!arg || !(r = atoi(arg))) { fprintf(stderr, "%s: Specify positive size for -k.\n", me); return(1); } control_block.maxrecordsize = r * 1024; break; case 'K': control_block.keepalive = 0; break; case 'i': control_block.inetd = 1; break; case 'w': if (chdir(arg)) { perror(arg); return 1; } break; case 'A': max_sessions = atoi(arg); break; case 'p': option_copy(control_block.pid_fname, arg); break; case 'f': #if YAZ_HAVE_XML2 option_copy(control_block.xml_config, arg); #else fprintf(stderr, "%s: Option -f unsupported since YAZ is compiled without Libxml2 support\n", me); exit(1); #endif break; case 'D': control_block.background = 1; break; case 'r': if (!arg || !(r = atoi(arg))) { fprintf(stderr, "%s: Specify positive size for -r.\n", me); return(1); } yaz_log_init_max_size(r * 1024); break; case 'V': show_version(); break; default: fprintf(stderr, "Usage: %s [ -a -v " " -l -u -c -t " " -k -d -p -C certfile" " -zKiDSTV1 -m -w ... ]\n", me); return 1; } } return 0; } void statserv_sc_stop(yaz_sc_t s) { statserv_closedown(); statserv_reset(); } int statserv_main(int argc, char **argv, bend_initresult *(*bend_init)(bend_initrequest *r), void (*bend_close)(void *handle)) { int ret; struct statserv_options_block *cb = &control_block; /* control block does not have service_name member on Unix */ yaz_sc_t s = yaz_sc_create( #ifdef WIN32 cb->service_name, cb->service_display_name #else 0, 0 #endif ); cb->bend_init = bend_init; cb->bend_close = bend_close; ret = yaz_sc_program(s, argc, argv, statserv_sc_main, statserv_sc_stop); yaz_sc_destroy(&s); return ret; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/sru_facet.c0000644000175000017500000002513213265142510012242 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file sru_facet.c * \brief Implements SRU 2.0 facets */ #if HAVE_CONFIG_H #include #endif #include #include #include #if YAZ_HAVE_XML2 #include #include #include #endif #include "sru-p.h" #include #include static void insert_field(WRBUF w, const char *field, size_t length, const char *attr) { const char *cp0 = wrbuf_cstr(w); const char *cp = cp0; while (1) { const char *cp2 = strstr(cp, "@attr 1="); if (!cp2) break; cp = cp2 + 8; if (!strncmp(cp, field, length) && (cp[length] == ' ' || cp[length] == ',' || cp[length] == '\0')) { /* found the field */ cp += length; wrbuf_insert(w, cp - cp0, attr, strlen(attr)); wrbuf_insert(w, cp - cp0, " ", 1); return; } while (*cp && *cp != ',') cp++; } if (wrbuf_len(w)) wrbuf_puts(w, ","); wrbuf_puts(w, "@attr 1="); wrbuf_write(w, field, length); wrbuf_puts(w, " "); wrbuf_puts(w, attr); } void yaz_sru_facet_request(ODR o, Z_FacetList **facetList, const char **limit, const char **start, const char **sort) { if (o->direction == ODR_ENCODE) { Z_FacetList *fl = *facetList; if (fl) { WRBUF w_limit = wrbuf_alloc(); int general_start = -1; int general_sortorder = -1; int general_limit = -1; int i; for (i = 0; i < fl->num; i++) { struct yaz_facet_attr av; yaz_facet_attr_init(&av); av.start = -1; av.sortorder = -1; av.limit = -1; yaz_facet_attr_get_z_attributes(fl->elements[i]->attributes, &av); if (av.errcode == 0) { if (av.limit != -1) { if (av.useattr) { wrbuf_printf(w_limit, "%d:%s", av.limit, av.useattr); wrbuf_puts(w_limit, ","); } else general_limit = av.limit; } if (av.start != -1) general_start = av.start; if (av.sortorder != -1) general_sortorder = av.sortorder; } } if (general_limit != -1) { char tmp[32]; sprintf(tmp, "%d,", general_limit); wrbuf_insert(w_limit, 0, tmp, strlen(tmp)); } if (wrbuf_len(w_limit) > 1) { wrbuf_cut_right(w_limit, 1); *limit = odr_strdup(o, wrbuf_cstr(w_limit)); } if (general_start != -1) { char tmp[32]; sprintf(tmp, "%d", general_start); *start = odr_strdup(o, tmp); } if (general_sortorder == 1) { *sort = odr_strdup(o, "alphanumeric"); } wrbuf_destroy(w_limit); } } else if (o->direction == ODR_DECODE) { WRBUF w = wrbuf_alloc(); int general_limit = -1; if (*limit) { const char *cp = *limit; int nor = 0; int val = 0; while (sscanf(cp, "%d%n", &val, &nor) >= 1 && nor > 0) { cp += nor; if (*cp == ':') /* field name follows */ { char tmp[40]; const char *cp0 = ++cp; while (*cp && *cp != ',') cp++; sprintf(tmp, "@attr 3=%d", val); insert_field(w, cp0, cp - cp0, tmp); if (*start && strlen(*start) < 20) { sprintf(tmp, "@attr 4=%s", *start); insert_field(w, cp0, cp - cp0, tmp); } if (*sort && !strcmp(*sort, "alphanumeric")) insert_field(w, cp0, cp - cp0, "@attr 2=1"); else insert_field(w, cp0, cp - cp0, "@attr 2=0"); } else general_limit = val; if (*cp != ',') break; cp++; } } if (*sort || *start || general_limit != -1) { if (wrbuf_len(w)) wrbuf_puts(w, ","); if (*sort && !strcmp(*sort, "alphanumeric")) wrbuf_printf(w, " @attr 2=1"); else wrbuf_printf(w, " @attr 2=0"); if (general_limit != -1) wrbuf_printf(w, " @attr 3=%d", general_limit); if (*start) { wrbuf_printf(w, " @attr 4=%s", *start); } } if (wrbuf_len(w)) *facetList = yaz_pqf_parse_facet_list(o, wrbuf_cstr(w)); else *facetList = 0; wrbuf_destroy(w); } } #if YAZ_HAVE_XML2 void yaz_sru_facet_response(ODR o, Z_FacetList **facetList, xmlNodePtr n) { if (o->direction == ODR_ENCODE) { Z_FacetList *fl = *facetList; if (fl) { int i; const char *ns = "http://docs.oasis-open.org/ns/search-ws/facetedResults"; xmlNode *p1 = xmlNewChild(n, 0, BAD_CAST "facetedResults", 0); xmlNsPtr ns_fr = xmlNewNs(p1, BAD_CAST ns, BAD_CAST "fr"); for (i = 0; i < fl->num; i++) { Z_FacetField *ff = fl->elements[i]; xmlNode *p2 = xmlNewChild(p1, ns_fr, BAD_CAST "facet", 0); int j; xmlNode *p3; struct yaz_facet_attr av; yaz_facet_attr_init(&av); yaz_facet_attr_get_z_attributes(ff->attributes, &av); add_xsd_string(p2, "index", av.useattr); p3 = xmlNewChild(p2, 0, BAD_CAST "terms", 0); for (j = 0; j < ff->num_terms; j++) { Z_FacetTerm *ft = ff->terms[j]; Z_Term *zt = ft->term; xmlNode *p4 = xmlNewChild(p3, 0, BAD_CAST "term", 0); if (zt->which == Z_Term_general) add_xsd_string_n(p4, "actualTerm", (char *) zt->u.general->buf, zt->u.general->len); if (ft->count) add_xsd_integer(p4, "count", ft->count); } } } } else if (o->direction == ODR_DECODE) { Z_FacetList *fl = (Z_FacetList *) odr_malloc(o, sizeof(*fl)); xmlNode *p1; fl->num = 0; for (p1 = n->children; p1; p1 = p1->next) if (yaz_match_xsd_element(p1, "facet")) fl->num++; if (fl->num > 0) { int i = 0; *facetList = fl; fl->elements = (Z_FacetField **) odr_malloc(o, sizeof(*fl->elements) * fl->num); for (p1 = n->children; p1; p1 = p1->next) if (yaz_match_xsd_element(p1, "facet")) { char *index_name = 0; xmlNode *p_terms = 0; xmlNode *p2 = p1->children; Z_FacetField *ff = (Z_FacetField *) odr_malloc(o, sizeof(*ff)); fl->elements[i++] = ff; ff->attributes = 0; ff->num_terms = 0; ff->terms = 0; for (; p2; p2 = p2->next) { if (yaz_match_xsd_string(p2, "index", o, &index_name)) ; else if (yaz_match_xsd_element(p2, "terms")) p_terms = p2; } if (index_name) ff->attributes = zget_AttributeList_use_string(o, index_name); if (p_terms) { xmlNode *p; int i = 0; for (p = p_terms->children; p; p = p->next) { if (yaz_match_xsd_element(p, "term")) ff->num_terms++; } if (ff->num_terms) ff->terms = (Z_FacetTerm **) odr_malloc(o, sizeof(*ff->terms) * ff->num_terms); for (p = p_terms->children; p; p = p->next) { if (yaz_match_xsd_element(p, "term")) { char *cstr = 0; Odr_int *count = 0; xmlNode *p2 = p->children; for (; p2; p2 = p2->next) { if (yaz_match_xsd_string(p2, "actualTerm", o, &cstr)) ; else if (yaz_match_xsd_integer(p2, "count", o, &count)) ; else ; } if (cstr && count) { ff->terms[i++] = facet_term_create_cstr(o, cstr, *count); } } } ff->num_terms = i; if (ff->num_terms == 0) ff->terms = 0; } } } } } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zgdu.c0000644000175000017500000000327113265142510011240 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zgdu.c * \brief Implements HTTP and Z39.50 encoding and decoding. */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" #include int z_GDU(ODR o, Z_GDU **p, int opt, const char *name) { const char *buf = o->op->buf; if (o->direction == ODR_DECODE) { *p = (Z_GDU *) odr_malloc(o, sizeof(**p)); if (o->op->size > 10 && !memcmp(buf, "HTTP/", 5)) { (*p)->which = Z_GDU_HTTP_Response; return yaz_decode_http_response(o, &(*p)->u.HTTP_Response); } else if (o->op->size > 5 && buf[0] >= 0x20 && buf[0] < 0x7f && buf[1] >= 0x20 && buf[1] < 0x7f && buf[2] >= 0x20 && buf[2] < 0x7f && buf[3] >= 0x20 && buf[3] < 0x7f) { (*p)->which = Z_GDU_HTTP_Request; return yaz_decode_http_request(o, &(*p)->u.HTTP_Request); } else { (*p)->which = Z_GDU_Z3950; return z_APDU(o, &(*p)->u.z3950, opt, 0); } } else /* ENCODE or PRINT */ { switch((*p)->which) { case Z_GDU_HTTP_Response: return yaz_encode_http_response(o, (*p)->u.HTTP_Response); case Z_GDU_HTTP_Request: return yaz_encode_http_request(o, (*p)->u.HTTP_Request); case Z_GDU_Z3950: return z_APDU(o, &(*p)->u.z3950, opt, 0); } } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/log.c0000644000175000017500000003746613265142510011065 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file log.c * \brief Logging utility */ #if HAVE_CONFIG_H #include #endif #ifdef WIN32 #include #include #endif #if HAVE_SYS_STAT_H #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #if YAZ_POSIX_THREADS #include #endif static int l_level = YLOG_DEFAULT_LEVEL; enum l_file_type { use_stderr, use_none, use_file }; struct { enum l_file_type type; FILE *log_file; char l_prefix[512]; char l_prefix2[512]; char l_fname[512]; } yaz_log_info = { use_stderr, 0, "", "", "" }; static void (*start_hook_func)(int, const char *, void *) = NULL; static void *start_hook_info; static void (*end_hook_func)(int, const char *, void *) = NULL; static void *end_hook_info; static void (*hook_func)(int, const char *, void *) = NULL; static void *hook_info; static char l_old_default_format[] = "%H:%M:%S-%d/%m"; static char l_new_default_format[] = "%Y%m%d-%H%M%S"; #define TIMEFORMAT_LEN 50 #define TID_LEN 30 static char l_custom_format[TIMEFORMAT_LEN] = ""; static char *l_actual_format = l_old_default_format; /** l_max_size tells when to rotate the log. The default value is 0 which means DISABLED. This is to be preffered if YAZ runs as a server using logrotate etc. A positive size specifies the file size in bytes when a log rotate will occur. Note that in order for this to work YAZ must have permissions to do so. */ static int l_max_size = 0; #define MAX_MASK_NAMES 35 /* 32 bits plus a few combo names */ static struct { int mask; char *name; } mask_names[MAX_MASK_NAMES] = { { YLOG_FATAL, "fatal"}, { YLOG_DEBUG, "debug"}, { YLOG_WARN, "warn" }, { YLOG_LOG, "log" }, { YLOG_ERRNO, ""}, { YLOG_MALLOC, "malloc"}, { YLOG_TID, "tid" }, { YLOG_APP, "app" }, { YLOG_NOTIME, "notime" }, { YLOG_APP2, "app2" }, { YLOG_APP3, "app3" }, { YLOG_ALL, "all" }, { YLOG_FLUSH, "flush" }, { YLOG_LOGLVL, "loglevel" }, { 0, "none" }, { 0, NULL } /* the rest will be filled in if the user defines dynamic modules*/ }; static unsigned int next_log_bit = YLOG_LAST_BIT<<1; /* first dynamic bit */ static int yaz_log_reopen_flag = 0; static YAZ_MUTEX log_mutex = 0; static void yaz_log_open(void); void yaz_log_lock(void) { yaz_mutex_enter(log_mutex); } void yaz_log_unlock(void) { yaz_mutex_leave(log_mutex); } void yaz_log_init_globals(void) { char *env; if (log_mutex == 0) yaz_mutex_create(&log_mutex); #if YAZ_POSIX_THREADS pthread_atfork(yaz_log_lock, yaz_log_unlock, yaz_log_unlock); #endif env = getenv("YAZ_LOG"); if (env) l_level = yaz_log_mask_str_x(env, l_level); } FILE *yaz_log_file(void) { FILE *f = 0; switch (yaz_log_info.type) { case use_stderr: f = stderr; break; case use_none: f = 0; break; case use_file: f = yaz_log_info.log_file; break; } return f; } void yaz_log_close(void) { if (yaz_log_info.type == use_file && yaz_log_info.log_file) { fclose(yaz_log_info.log_file); yaz_log_info.log_file = 0; } } void yaz_log_deinit_globals(void) { if (log_mutex) { yaz_mutex_destroy(&log_mutex); yaz_log_close(); } } void yaz_log_init_file(const char *fname) { yaz_init_globals(); yaz_log_close(); if (fname) { if (*fname == '\0') yaz_log_info.type = use_stderr; /* empty name; use stderr */ else yaz_log_info.type = use_file; strncpy(yaz_log_info.l_fname, fname, sizeof(yaz_log_info.l_fname)-1); yaz_log_info.l_fname[sizeof(yaz_log_info.l_fname)-1] = '\0'; } else { yaz_log_info.type = use_none; /* NULL name; use no file at all */ yaz_log_info.l_fname[0] = '\0'; } yaz_log_open(); } static void rotate_log(const char *cur_fname) { int i; #ifdef WIN32 /* windows can't rename a file if it is open */ yaz_log_close(); #endif for (i = 0; i<9; i++) { char fname_str[FILENAME_MAX]; struct stat stat_buf; yaz_snprintf(fname_str, sizeof(fname_str), "%s.%d", cur_fname, i); if (stat(fname_str, &stat_buf) != 0) break; } for (; i >= 0; --i) { char fname_str[2][FILENAME_MAX]; if (i > 0) yaz_snprintf(fname_str[0], sizeof(fname_str[0]), "%s.%d", cur_fname, i-1); else yaz_snprintf(fname_str[0], sizeof(fname_str[0]), "%s", cur_fname); yaz_snprintf(fname_str[1], sizeof(fname_str[1]), "%s.%d", cur_fname, i); #ifdef WIN32 MoveFileEx(fname_str[0], fname_str[1], MOVEFILE_REPLACE_EXISTING); #else rename(fname_str[0], fname_str[1]); #endif } } void yaz_log_init_level(int level) { yaz_init_globals(); if ( (l_level & YLOG_FLUSH) != (level & YLOG_FLUSH) ) { l_level = level; yaz_log_open(); /* make sure we set buffering right */ } else l_level = level; if (l_level & YLOG_LOGLVL) { /* dump the log level bits */ const char *bittype = "Static "; int i, sz; yaz_log(YLOG_LOGLVL, "Setting log level to %d = 0x%08x", l_level, l_level); /* determine size of mask_names (locked) */ for (sz = 0; mask_names[sz].name; sz++) ; /* second pass without lock */ for (i = 0; i < sz; i++) if (mask_names[i].mask && *mask_names[i].name) if (strcmp(mask_names[i].name, "all") != 0) { yaz_log(YLOG_LOGLVL, "%s log bit %08x '%s' is %s", bittype, mask_names[i].mask, mask_names[i].name, (level & mask_names[i].mask)? "ON": "off"); if (mask_names[i].mask > YLOG_LAST_BIT) bittype = "Dynamic"; } } } void yaz_log_init_prefix(const char *prefix) { if (prefix && *prefix) yaz_snprintf(yaz_log_info.l_prefix, sizeof(yaz_log_info.l_prefix), "%s ", prefix); else *yaz_log_info.l_prefix = 0; } void yaz_log_init_prefix2(const char *prefix) { if (prefix && *prefix) yaz_snprintf(yaz_log_info.l_prefix2, sizeof(yaz_log_info.l_prefix2), "%s ", prefix); else *yaz_log_info.l_prefix2 = 0; } void yaz_log_init(int level, const char *prefix, const char *fname) { yaz_init_globals(); yaz_log_init_level(level); yaz_log_init_prefix(prefix); if (fname && *fname) yaz_log_init_file(fname); } void yaz_log_init_max_size(int mx) { if (mx > 0) l_max_size = mx; else l_max_size = 0; } void yaz_log_set_handler(void (*func)(int, const char *, void *), void *info) { hook_func = func; hook_info = info; } void log_event_start(void (*func)(int, const char *, void *), void *info) { start_hook_func = func; start_hook_info = info; } void log_event_end(void (*func)(int, const char *, void *), void *info) { end_hook_func = func; end_hook_info = info; } static void yaz_log_open_check(struct tm *tm, int force, const char *filemode) { char new_filename[512]; static char cur_filename[512] = ""; if (yaz_log_info.type != use_file) return; if (yaz_log_reopen_flag) { force = 1; yaz_log_reopen_flag = 0; } if (*yaz_log_info.l_fname) { strftime(new_filename, sizeof(new_filename)-1, yaz_log_info.l_fname, tm); if (strcmp(new_filename, cur_filename)) { strcpy(cur_filename, new_filename); force = 1; } } if (l_max_size > 0 && yaz_log_info.log_file) { long flen = ftell(yaz_log_info.log_file); if (flen > l_max_size) { rotate_log(cur_filename); force = 1; } } if (force && *cur_filename) { FILE *new_file; #ifdef WIN32 yaz_log_close(); #endif if (!strncmp(cur_filename, "fd=", 3)) new_file = fdopen(atoi(cur_filename + 3), filemode); else new_file = fopen(cur_filename, filemode); if (new_file) { yaz_log_close(); yaz_log_info.log_file = new_file; } else { /* disable log rotate */ l_max_size = 0; } } } static void yaz_log_do_reopen(const char *filemode) { time_t cur_time = time(0); #if HAVE_LOCALTIME_R struct tm tm0, *tm = &tm0; #else struct tm *tm; #endif yaz_log_lock(); #if HAVE_LOCALTIME_R localtime_r(&cur_time, tm); #else tm = localtime(&cur_time); #endif yaz_log_open_check(tm, 1, filemode); yaz_log_unlock(); } void yaz_log_reopen() { yaz_log_reopen_flag = 1; } static void yaz_log_open() { yaz_log_do_reopen("a"); } void yaz_log_trunc() { yaz_log_do_reopen("w"); } static void yaz_strftime(char *dst, size_t sz, const char *fmt, const struct tm *tm) { strftime(dst, sz, fmt, tm); } static void yaz_log_to_file(int level, const char *fmt, va_list ap, const char *error_cp) { FILE *file; time_t ti = time(0); #if HAVE_LOCALTIME_R struct tm tm0, *tm = &tm0; #else struct tm *tm; #endif yaz_log_lock(); #if HAVE_LOCALTIME_R localtime_r(&ti, tm); #else tm = localtime(&ti); #endif yaz_log_open_check(tm, 0, "a"); file = yaz_log_file(); /* file may change in yaz_log_open_check */ if (file) { char tbuf[TIMEFORMAT_LEN]; char tid[TID_LEN]; char flags[1024]; int i; *flags = '\0'; for (i = 0; level && mask_names[i].name; i++) if ( mask_names[i].mask & level) { if (*mask_names[i].name && mask_names[i].mask && mask_names[i].mask != YLOG_ALL) { if (strlen(flags) + strlen(mask_names[i].name) < sizeof(flags) - 4) { strcat(flags, "["); strcat(flags, mask_names[i].name); strcat(flags, "]"); } level &= ~mask_names[i].mask; } } tbuf[0] = '\0'; if (!(l_level & YLOG_NOTIME)) { yaz_strftime(tbuf, TIMEFORMAT_LEN-2, l_actual_format, tm); tbuf[TIMEFORMAT_LEN-2] = '\0'; } if (tbuf[0]) strcat(tbuf, " "); tid[0] = '\0'; if (l_level & YLOG_TID) { yaz_thread_id_cstr(tid, sizeof(tid)-1); if (tid[0]) strcat(tid, " "); } fprintf(file, "%s%s%s%s %s", tbuf, yaz_log_info.l_prefix, tid, flags, yaz_log_info.l_prefix2); vfprintf(file, fmt, ap); if (error_cp) fprintf(file, " [%s]", error_cp); fputs("\n", file); if (l_level & YLOG_FLUSH) fflush(file); } yaz_log_unlock(); } void yaz_log(int level, const char *fmt, ...) { va_list ap; FILE *file; int o_level = level; char *error_cp = 0, error_buf[128]; if (o_level & YLOG_ERRNO) { yaz_strerror(error_buf, sizeof(error_buf)); error_cp = error_buf; } yaz_init_globals(); if (!(level & l_level)) return; va_start(ap, fmt); file = yaz_log_file(); if (start_hook_func || hook_func || end_hook_func) { char buf[1024]; /* 30 is enough for our 'rest of output' message */ yaz_vsnprintf(buf, sizeof(buf)-30, fmt, ap); if (strlen(buf) >= sizeof(buf)-31) strcat(buf, " [rest of output omitted]"); if (start_hook_func) (*start_hook_func)(o_level, buf, start_hook_info); if (hook_func) (*hook_func)(o_level, buf, hook_info); if (file) yaz_log_to_file(level, fmt, ap, error_cp); if (end_hook_func) (*end_hook_func)(o_level, buf, end_hook_info); } else { if (file) yaz_log_to_file(level, fmt, ap, error_cp); } va_end(ap); } void yaz_log_time_format(const char *fmt) { if ( !fmt || !*fmt) { /* no format, default to new */ l_actual_format = l_new_default_format; return; } if (0==strcmp(fmt, "old")) { /* force the old format */ l_actual_format = l_old_default_format; return; } /* else use custom format */ strncpy(l_custom_format, fmt, TIMEFORMAT_LEN-1); l_custom_format[TIMEFORMAT_LEN-1] = '\0'; l_actual_format = l_custom_format; } /** cleans a loglevel name from leading paths and suffixes */ static char *clean_name(const char *name, size_t len, char *namebuf, size_t buflen) { char *p = namebuf; char *start = namebuf; if (buflen <= len) len = buflen-1; strncpy(namebuf, name, len); namebuf[len] = '\0'; while ((p = strchr(start, '/'))) start = p+1; if ((p = strrchr(start, '.'))) *p = '\0'; return start; } static int define_module_bit(const char *name) { size_t i; for (i = 0; mask_names[i].name; i++) if (0 == strcmp(mask_names[i].name, name)) { return mask_names[i].mask; } if ( (i>=MAX_MASK_NAMES) || (next_log_bit & (1U<<31) )) { yaz_log(YLOG_WARN, "No more log bits left, not logging '%s'", name); return 0; } mask_names[i].mask = (int) next_log_bit; /* next_log_bit can hold int */ next_log_bit = next_log_bit<<1; mask_names[i].name = (char *) malloc(strlen(name)+1); strcpy(mask_names[i].name, name); mask_names[i+1].name = NULL; mask_names[i+1].mask = 0; return mask_names[i].mask; } int yaz_log_module_level(const char *name) { int i; char clean[255]; char *n = clean_name(name, strlen(name), clean, sizeof(clean)); yaz_init_globals(); for (i = 0; mask_names[i].name; i++) if (0==strcmp(n, mask_names[i].name)) { yaz_log(YLOG_LOGLVL, "returning log bit 0x%x for '%s' %s", mask_names[i].mask, n, strcmp(n,name) ? name : ""); return mask_names[i].mask; } yaz_log(YLOG_LOGLVL, "returning NO log bit for '%s' %s", n, strcmp(n, name) ? name : "" ); return 0; } int yaz_log_mask_str(const char *str) { yaz_init_globals(); /* since l_level may be affected */ return yaz_log_mask_str_x(str, l_level); } /* this function is called by yaz_log_init_globals & yaz_init_globals and, thus, may not call any of them indirectly */ int yaz_log_mask_str_x(const char *str, int level) { const char *p; while (*str) { int negated = 0; for (p = str; *p && *p != ','; p++) ; if (*str=='-') { negated = 1; str++; } if (yaz_isdigit(*str)) { level = atoi(str); } else { char clean[509]; char *n = clean_name(str, (size_t) (p - str), clean, sizeof(clean)); int mask = define_module_bit(n); if (!mask) level = 0; /* 'none' clears them all */ else if (negated) level &= ~mask; else level |= mask; } if (*p == ',') p++; str = p; } return level; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_cons.c0000644000175000017500000001244413265142510012077 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_cons.c * \brief Implements ODR constructed codec. */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" void odr_setlenlen(ODR o, int len) { o->op->lenlen = len; } int odr_constructed_begin(ODR o, void *xxp, int zclass, int tag, const char *name) { int res; int cons = 1; int lenlen = o->op->lenlen; if (o->error) return 0; o->op->lenlen = 1; /* reset lenlen */ if (o->op->t_class < 0) { o->op->t_class = zclass; o->op->t_tag = tag; } res = ber_tag(o, xxp, o->op->t_class, o->op->t_tag, &cons, 1, name); if (res < 0) return 0; if (!res || !cons) return 0; /* push the odr_constack */ if (o->op->stack_top && o->op->stack_top->next) { /* reuse old entry */ o->op->stack_top = o->op->stack_top->next; } else if (o->op->stack_top && !o->op->stack_top->next) { /* must allocate new entry (not first) */ int sz = 0; struct odr_constack *st; /* check size first */ for (st = o->op->stack_top; st; st = st->prev) sz++; if (sz >= ODR_MAX_STACK) { odr_seterror(o, OSTACK, 30); return 0; } o->op->stack_top->next = (struct odr_constack *) odr_malloc(o, sizeof(*o->op->stack_top)); o->op->stack_top->next->prev = o->op->stack_top; o->op->stack_top->next->next = 0; o->op->stack_top = o->op->stack_top->next; } else if (!o->op->stack_top) { /* stack empty */ if (!o->op->stack_first) { /* first item must be allocated */ o->op->stack_first = (struct odr_constack *) odr_malloc(o, sizeof(*o->op->stack_top)); o->op->stack_first->prev = 0; o->op->stack_first->next = 0; } o->op->stack_top = o->op->stack_first; assert(o->op->stack_top->prev == 0); } o->op->stack_top->lenb = o->op->bp; o->op->stack_top->len_offset = odr_tell(o); o->op->stack_top->name = name ? name : "?"; if (o->direction == ODR_ENCODE) { static char dummy[sizeof(int)+1]; o->op->stack_top->lenlen = lenlen; if (odr_write(o, dummy, lenlen) < 0) /* dummy */ { ODR_STACK_POP(o); return 0; } } else if (o->direction == ODR_DECODE) { if ((res = ber_declen(o->op->bp, &o->op->stack_top->len, odr_max(o))) < 0) { odr_seterror(o, OOTHER, 31); ODR_STACK_POP(o); return 0; } o->op->stack_top->lenlen = res; o->op->bp += res; if (o->op->stack_top->len > odr_max(o)) { odr_seterror(o, OOTHER, 32); ODR_STACK_POP(o); return 0; } } else if (o->direction == ODR_PRINT) { odr_prname(o, name); odr_printf(o, "{\n"); o->op->indent++; } else { odr_seterror(o, OOTHER, 33); ODR_STACK_POP(o); return 0; } o->op->stack_top->base = o->op->bp; o->op->stack_top->base_offset = odr_tell(o); return 1; } int odr_constructed_more(ODR o) { if (o->error) return 0; if (ODR_STACK_EMPTY(o)) return 0; if (o->op->stack_top->len >= 0) return o->op->bp - o->op->stack_top->base < o->op->stack_top->len; else return (!(*o->op->bp == 0 && *(o->op->bp + 1) == 0)); } int odr_constructed_end(ODR o) { int res; int pos; if (o->error) return 0; if (ODR_STACK_EMPTY(o)) { odr_seterror(o, OOTHER, 34); return 0; } switch (o->direction) { case ODR_DECODE: if (o->op->stack_top->len < 0) { if (*o->op->bp++ == 0 && *(o->op->bp++) == 0) { ODR_STACK_POP(o); return 1; } else { odr_seterror(o, OOTHER, 35); return 0; } } else if (o->op->bp - o->op->stack_top->base != o->op->stack_top->len) { odr_seterror(o, OCONLEN, 36); return 0; } ODR_STACK_POP(o); return 1; case ODR_ENCODE: pos = odr_tell(o); odr_seek(o, ODR_S_SET, o->op->stack_top->len_offset); if ((res = ber_enclen(o, pos - o->op->stack_top->base_offset, o->op->stack_top->lenlen, 1)) < 0) { odr_seterror(o, OLENOV, 37); return 0; } odr_seek(o, ODR_S_END, 0); if (res == 0) /* indefinite encoding */ { if (odr_putc(o, 0) < 0 || odr_putc(o, 0) < 0) return 0; } ODR_STACK_POP(o); return 1; case ODR_PRINT: ODR_STACK_POP(o); o->op->indent--; odr_prname(o, 0); odr_printf(o, "}\n"); return 1; default: odr_seterror(o, OOTHER, 38); return 0; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/srw.c0000644000175000017500000014657013265142510011114 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file srw.c * \brief Implements SRW/SRU package encoding and decoding */ #if HAVE_CONFIG_H #include #endif #include #include #include #if YAZ_HAVE_XML2 #include #include #include #include #include #include "sru-p.h" char *yaz_negotiate_sru_version(char *input_ver) { if (!input_ver) return "2.0"; if (!strcmp(input_ver, "1.1")) return "1.1"; if (!strncmp(input_ver, "1.", 2)) return "1.2"; if (!strncmp(input_ver, "2.", 2)) return "2.0"; return 0; } static int yaz_srw_record(ODR o, xmlNodePtr pptr, Z_SRW_record *rec, Z_SRW_extra_record **extra, void *client_data, int version2) { if (o->direction == ODR_DECODE) { Z_SRW_extra_record ex; char *spack = 0; xmlNodePtr ptr; #ifdef Z_SRW_packed rec->packing = 0; #endif rec->recordSchema = 0; rec->recordData_buf = 0; rec->recordData_len = 0; rec->recordPosition = 0; *extra = 0; ex.extraRecordData_buf = 0; ex.extraRecordData_len = 0; ex.recordIdentifier = 0; for (ptr = pptr->children; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "recordSchema", o, &rec->recordSchema)) ; else if (yaz_match_xsd_string(ptr, "recordPacking", o, &spack)) ; /* can't rely on it: in SRU 2.0 it's different semantics */ else if (yaz_match_xsd_integer(ptr, "recordPosition", o, &rec->recordPosition)) ; else if (yaz_match_xsd_element(ptr, "recordData")) { /* we assume XML packing, if any element nodes exist below recordData. Unfortunately, in SRU 2.0 recordPacking means something different */ xmlNode *p = ptr->children; for (; p; p = p->next) if (p->type == XML_ELEMENT_NODE) break; if (p) { yaz_match_xsd_XML_n2( ptr, "recordData", o, &rec->recordData_buf, &rec->recordData_len, 1); rec->recordPacking = Z_SRW_recordPacking_XML; } else { yaz_match_xsd_string_n( ptr, "recordData", o, &rec->recordData_buf, &rec->recordData_len); rec->recordPacking = Z_SRW_recordPacking_string; } } else if (yaz_match_xsd_XML_n(ptr, "extraRecordData", o, &ex.extraRecordData_buf, &ex.extraRecordData_len) ) ; else yaz_match_xsd_string(ptr, "recordIdentifier", o, &ex.recordIdentifier); } if (ex.extraRecordData_buf || ex.recordIdentifier) { *extra = (Z_SRW_extra_record *) odr_malloc(o, sizeof(Z_SRW_extra_record)); memcpy(*extra, &ex, sizeof(Z_SRW_extra_record)); } } else if (o->direction == ODR_ENCODE) { xmlNodePtr ptr = pptr; int pack = rec->recordPacking; const char *spack = yaz_srw_pack_to_str(pack); /* recordSchema and recordData are required */ if (!rec->recordSchema) xmlNewChild(ptr, 0, BAD_CAST "recordSchema", 0); else add_xsd_string(ptr, "recordSchema", rec->recordSchema); if (spack) { if (version2) add_xsd_string(ptr, "recordXMLEscaping", spack); else add_xsd_string(ptr, "recordPacking", spack); } if (!rec->recordData_buf) xmlNewChild(ptr, 0, BAD_CAST "recordData", 0); else { switch (pack) { case Z_SRW_recordPacking_string: add_xsd_string_n(ptr, "recordData", rec->recordData_buf, rec->recordData_len); break; case Z_SRW_recordPacking_XML: add_XML_n(ptr, "recordData", rec->recordData_buf, rec->recordData_len, 0); break; case Z_SRW_recordPacking_URL: add_xsd_string_n(ptr, "recordData", rec->recordData_buf, rec->recordData_len); break; } } if (rec->recordPosition) add_xsd_integer(ptr, "recordPosition", rec->recordPosition ); if (extra && *extra) { if ((*extra)->recordIdentifier) add_xsd_string(ptr, "recordIdentifier", (*extra)->recordIdentifier); if ((*extra)->extraRecordData_buf) add_XML_n(ptr, "extraRecordData", (*extra)->extraRecordData_buf, (*extra)->extraRecordData_len, 0); } } return 0; } static int yaz_srw_records(ODR o, xmlNodePtr pptr, Z_SRW_record **recs, Z_SRW_extra_record ***extra, int *num, void *client_data, int version2) { if (o->direction == ODR_DECODE) { int i; xmlNodePtr ptr; *num = 0; for (ptr = pptr->children; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "record")) (*num)++; } if (!*num) return 1; *recs = (Z_SRW_record *) odr_malloc(o, *num * sizeof(**recs)); *extra = (Z_SRW_extra_record **) odr_malloc(o, *num * sizeof(**extra)); for (i = 0, ptr = pptr->children; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "record")) { yaz_srw_record(o, ptr, *recs + i, *extra + i, client_data, 0); i++; } } } else if (o->direction == ODR_ENCODE) { int i; for (i = 0; i < *num; i++) { xmlNodePtr rptr = xmlNewChild(pptr, 0, BAD_CAST "record", 0); yaz_srw_record(o, rptr, (*recs)+i, (*extra ? *extra + i : 0), client_data, version2); } } return 0; } static int yaz_srw_version(ODR o, xmlNodePtr pptr, Z_SRW_recordVersion *rec, void *client_data, const char *ns) { if (o->direction == ODR_DECODE) { xmlNodePtr ptr; rec->versionType = 0; rec->versionValue = 0; for (ptr = pptr->children; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "versionType", o, &rec->versionType)) ; else yaz_match_xsd_string(ptr, "versionValue", o, &rec->versionValue); } } else if (o->direction == ODR_ENCODE) { xmlNodePtr ptr = pptr; add_xsd_string(ptr, "versionType", rec->versionType); add_xsd_string(ptr, "versionValue", rec->versionValue); } return 0; } static int yaz_srw_versions(ODR o, xmlNodePtr pptr, Z_SRW_recordVersion **vers, int *num, void *client_data, const char *ns) { if (o->direction == ODR_DECODE) { int i; xmlNodePtr ptr; *num = 0; for (ptr = pptr->children; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "recordVersion")) (*num)++; } if (!*num) return 1; *vers = (Z_SRW_recordVersion *) odr_malloc(o, *num * sizeof(**vers)); for (i = 0, ptr = pptr->children; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "recordVersion")) { yaz_srw_version(o, ptr, *vers + i, client_data, ns); i++; } } } else if (o->direction == ODR_ENCODE) { int i; for (i = 0; i < *num; i++) { xmlNodePtr rptr = xmlNewChild(pptr, 0, BAD_CAST "version", 0); yaz_srw_version(o, rptr, (*vers)+i, client_data, ns); } } return 0; } Z_FacetTerm *yaz_sru_proxy_get_facet_term_count(ODR odr, xmlNodePtr node) { Odr_int freq; xmlNodePtr child; WRBUF wrbuf = wrbuf_alloc(); Z_FacetTerm *facet_term; const char *freq_string = yaz_element_attribute_value_get( node, "facetvalue", "est_representation"); if (freq_string) freq = odr_atoi(freq_string); else freq = -1; for (child = node->children; child ; child = child->next) { if (child->type == XML_TEXT_NODE) wrbuf_puts(wrbuf, (const char *) child->content); } facet_term = facet_term_create_cstr(odr, wrbuf_cstr(wrbuf), freq); wrbuf_destroy(wrbuf); return facet_term; } static Z_FacetField *yaz_sru_proxy_decode_facet_field(ODR odr, xmlNodePtr ptr) { Z_AttributeList *list; Z_FacetField *facet_field; int num_terms = 0; int index = 0; xmlNodePtr node; /* USE attribute */ const char* name = yaz_element_attribute_value_get(ptr, "facet", "code"); yaz_log(YLOG_DEBUG, "sru-proxy facet type: %s", name); list = zget_AttributeList_use_string(odr, name); for (node = ptr->children; node; node = node->next) { if (yaz_match_xsd_element(node, "facetvalue")) num_terms++; } facet_field = facet_field_create(odr, list, num_terms); index = 0; for (node = ptr->children; node; node = node->next) { if (yaz_match_xsd_element(node, "facetvalue")) { facet_field_term_set(odr, facet_field, yaz_sru_proxy_get_facet_term_count(odr, node), index); index++; } } return facet_field; } static int yaz_sru_proxy_decode_facets(ODR o, xmlNodePtr root, Z_FacetList **facetList) { xmlNodePtr ptr; for (ptr = root->children; ptr; ptr = ptr->next) { if (yaz_match_xsd_element(ptr, "facets")) { xmlNodePtr node; Z_FacetList *facet_list; int num_facets = 0; for (node = ptr->children; node; node= node->next) { if (node->type == XML_ELEMENT_NODE) num_facets++; } facet_list = facet_list_create(o, num_facets); num_facets = 0; for (node = ptr->children; node; node= node->next) { if (yaz_match_xsd_element(node, "facet")) { facet_list_field_set( o, facet_list, yaz_sru_proxy_decode_facet_field(o, node), num_facets); num_facets++; } } *facetList = facet_list; break; } } return 0; } static int yaz_srw_decode_diagnostics(ODR o, xmlNodePtr pptr, Z_SRW_diagnostic **recs, int *num, void *client_data, const char *ns) { int i; xmlNodePtr ptr; *num = 0; for (ptr = pptr; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "diagnostic")) (*num)++; } if (!*num) return 1; *recs = (Z_SRW_diagnostic *) odr_malloc(o, *num * sizeof(**recs)); for (i = 0; i < *num; i++) { (*recs)[i].uri = 0; (*recs)[i].details = 0; (*recs)[i].message = 0; } for (i = 0, ptr = pptr; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "diagnostic")) { xmlNodePtr rptr; (*recs)[i].uri = 0; (*recs)[i].details = 0; (*recs)[i].message = 0; for (rptr = ptr->children; rptr; rptr = rptr->next) { if (yaz_match_xsd_string(rptr, "uri", o, &(*recs)[i].uri)) ; else if (yaz_match_xsd_string(rptr, "details", o, &(*recs)[i].details)) ; else yaz_match_xsd_string(rptr, "message", o, &(*recs)[i].message); } i++; } } return 0; } int sru_decode_surrogate_diagnostics(const char *buf, size_t len, Z_SRW_diagnostic **diag, int *num, ODR odr) { int ret = 0; xmlDocPtr doc = xmlParseMemory(buf, len); if (doc) { xmlNodePtr ptr = xmlDocGetRootElement(doc); while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (ptr && ptr->ns && !xmlStrcmp(ptr->ns->href, BAD_CAST "http://www.loc.gov/zing/srw/diagnostic/")) { ret = yaz_srw_decode_diagnostics(odr, ptr, diag, num, 0, 0); } xmlFreeDoc(doc); } return ret; } static int yaz_srw_diagnostics(ODR o, xmlNodePtr pptr, Z_SRW_diagnostic **recs, int *num, void *client_data, const char *ns, int version2) { if (o->direction == ODR_DECODE) { return yaz_srw_decode_diagnostics(o, pptr->children, recs, num, client_data, ns); } else if (o->direction == ODR_ENCODE) { int i; xmlNsPtr ns_diag = xmlNewNs(pptr, BAD_CAST (version2 ? YAZ_XMLNS_DIAG_v2 : YAZ_XMLNS_DIAG_v1_1), BAD_CAST "diag" ); for (i = 0; i < *num; i++) { const char *std_diag = "info:srw/diagnostic/1/"; const char *ucp_diag = "info:srw/diagnostic/12/"; xmlNodePtr rptr = xmlNewChild(pptr, ns_diag, BAD_CAST "diagnostic", 0); add_xsd_string(rptr, "uri", (*recs)[i].uri); add_xsd_string(rptr, "details", (*recs)[i].details); if ((*recs)[i].message) add_xsd_string(rptr, "message", (*recs)[i].message); else if ((*recs)[i].uri ) { if (!strncmp((*recs)[i].uri, std_diag, strlen(std_diag))) { int no = atoi((*recs)[i].uri + strlen(std_diag)); const char *message = yaz_diag_srw_str(no); if (message) add_xsd_string(rptr, "message", message); } else if (!strncmp((*recs)[i].uri, ucp_diag, strlen(ucp_diag))) { int no = atoi((*recs)[i].uri + strlen(ucp_diag)); const char *message = yaz_diag_sru_update_str(no); if (message) add_xsd_string(rptr, "message", message); } } } } return 0; } static int yaz_srw_term(ODR o, xmlNodePtr pptr, Z_SRW_scanTerm *term, void *client_data, const char *ns) { if (o->direction == ODR_DECODE) { xmlNodePtr ptr; term->value = 0; term->numberOfRecords = 0; term->displayTerm = 0; term->whereInList = 0; for (ptr = pptr->children; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "value", o, &term->value)) ; else if (yaz_match_xsd_integer(ptr, "numberOfRecords", o, &term->numberOfRecords)) ; else if (yaz_match_xsd_string(ptr, "displayTerm", o, &term->displayTerm)) ; else yaz_match_xsd_string(ptr, "whereInList", o, &term->whereInList); } } else if (o->direction == ODR_ENCODE) { xmlNodePtr ptr = pptr; add_xsd_string(ptr, "value", term->value); add_xsd_integer(ptr, "numberOfRecords", term->numberOfRecords); add_xsd_string(ptr, "displayTerm", term->displayTerm); add_xsd_string(ptr, "whereInList", term->whereInList); } return 0; } static int yaz_srw_terms(ODR o, xmlNodePtr pptr, Z_SRW_scanTerm **terms, int *num, void *client_data, const char *ns) { if (o->direction == ODR_DECODE) { int i; xmlNodePtr ptr; *num = 0; for (ptr = pptr->children; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "term")) (*num)++; } if (!*num) return 1; *terms = (Z_SRW_scanTerm *) odr_malloc(o, *num * sizeof(**terms)); for (i = 0, ptr = pptr->children; ptr; ptr = ptr->next, i++) { if (ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "term")) yaz_srw_term(o, ptr, (*terms)+i, client_data, ns); } } else if (o->direction == ODR_ENCODE) { int i; for (i = 0; i < *num; i++) { xmlNodePtr rptr = xmlNewChild(pptr, 0, BAD_CAST "term", 0); yaz_srw_term(o, rptr, (*terms)+i, client_data, ns); } } return 0; } static void encode_echoed_args(xmlNodePtr ptr, Z_SRW_PDU *p, const char *name) { Z_SRW_extra_arg *ea = p->extra_args; if (ea) { xmlNode *p1 = xmlNewChild(ptr, 0, BAD_CAST name, 0); xmlNode *p2 = 0; for (; ea; ea = ea->next) { if (ea->name && ea->name[0] == 'x' && ea->name[1] == '-') { /* not really according to XSD as of July 2014 */ if (!p2) p2 = xmlNewChild(p1, 0, BAD_CAST "extraRequestData", 0); /* skip +2: "x-" in element */ add_xsd_string(p2, ea->name + 2, ea->value); } else add_xsd_string(p1, ea->name, ea->value); } } } int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, void *client_data, const char *ns) { xmlNodePtr pptr = (xmlNodePtr) vptr; if (o->direction == ODR_DECODE) { Z_SRW_PDU **p = handler_data; xmlNodePtr method = pptr->children; char *neg_version; while (method && method->type == XML_TEXT_NODE) method = method->next; if (!method) return -1; if (method->type != XML_ELEMENT_NODE) return -1; *p = yaz_srw_get_core_v_2_0(o); if (!xmlStrcmp(method->name, BAD_CAST "searchRetrieveRequest")) { xmlNodePtr ptr = method->children; Z_SRW_searchRetrieveRequest *req; char *recordPacking = 0; char *recordXMLEscaping = 0; const char *facetLimit = 0; const char *facetStart = 0; const char *facetSort = 0; (*p)->which = Z_SRW_searchRetrieve_request; req = (*p)->u.request = (Z_SRW_searchRetrieveRequest *) odr_malloc(o, sizeof(*req)); req->queryType = "cql"; req->query = 0; req->sort_type = Z_SRW_sort_type_none; req->sort.none = 0; req->startRecord = 0; req->maximumRecords = 0; req->recordSchema = 0; req->recordPacking = 0; req->packing = 0; req->recordXPath = 0; req->resultSetTTL = 0; req->stylesheet = 0; req->database = 0; for (; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "version", o, &(*p)->srw_version)) ; else if (yaz_match_xsd_string(ptr, "queryType", o, &req->queryType)) ; else if (yaz_match_xsd_string(ptr, "query", o, &req->query)) ; else if (yaz_match_xsd_string(ptr, "pQuery", o, &req->query)) req->queryType = "pqf"; else if (yaz_match_xsd_string(ptr, "xQuery", o, &req->query)) req->queryType = "xcql"; else if (yaz_match_xsd_integer(ptr, "startRecord", o, &req->startRecord)) ; else if (yaz_match_xsd_integer(ptr, "maximumRecords", o, &req->maximumRecords)) ; else if (yaz_match_xsd_string(ptr, "recordPacking", o, &recordPacking)) ; else if (yaz_match_xsd_string(ptr, "recordXMLEscaping", o, &recordXMLEscaping)) ; else if (yaz_match_xsd_string(ptr, "recordSchema", o, &req->recordSchema)) ; else if (yaz_match_xsd_string(ptr, "recordXPath", o, &req->recordXPath)) ; else if (yaz_match_xsd_integer(ptr, "resultSetTTL", o, &req->resultSetTTL)) ; else if (yaz_match_xsd_string(ptr, "sortKeys", o, &req->sort.sortKeys)) req->sort_type = Z_SRW_sort_type_sort; else if (yaz_match_xsd_string(ptr, "stylesheet", o, &req->stylesheet)) ; else if (yaz_match_xsd_string(ptr, "database", o, &req->database)) ; else if (yaz_match_xsd_string(ptr, "facetLimit", o, (char**) &facetLimit)) ; else if (yaz_match_xsd_string(ptr, "facetStart", o, (char**) &facetStart)) ; else if (yaz_match_xsd_string(ptr, "facetSort", o, (char**) &facetSort)) ; else ; } if (!req->query) { /* should put proper diagnostic here */ return -1; } if (!strcmp((*p)->srw_version, "2.0")) { req->recordPacking = recordXMLEscaping; req->packing = recordPacking; } else { req->recordPacking = recordPacking; } yaz_sru_facet_request(o, &req->facetList, &facetLimit, &facetStart, &facetSort); } else if (!xmlStrcmp(method->name, BAD_CAST "searchRetrieveResponse")) { xmlNodePtr ptr = method->children; Z_SRW_searchRetrieveResponse *res; (*p)->which = Z_SRW_searchRetrieve_response; res = (*p)->u.response = (Z_SRW_searchRetrieveResponse *) odr_malloc(o, sizeof(*res)); res->numberOfRecords = 0; res->resultCountPrecision = 0; res->resultSetId = 0; res->resultSetIdleTime = 0; res->records = 0; res->num_records = 0; res->diagnostics = 0; res->num_diagnostics = 0; res->nextRecordPosition = 0; res->facetList = 0; res->suggestions = 0; for (; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "version", o, &(*p)->srw_version)) ; else if (yaz_match_xsd_XML_n(ptr, "extraResponseData", o, &(*p)->extraResponseData_buf, &(*p)->extraResponseData_len)) ; else if (yaz_match_xsd_integer(ptr, "numberOfRecords", o, &res->numberOfRecords)) ; else if (yaz_match_xsd_string(ptr, "resultCountPrecision", o, &res->resultCountPrecision)) ; else if (yaz_match_xsd_string(ptr, "resultSetId", o, &res->resultSetId)) ; else if (yaz_match_xsd_integer(ptr, "resultSetIdleTime", o, &res->resultSetIdleTime)) ; else if (yaz_match_xsd_integer(ptr, "resultSetTTL", o, &res->resultSetIdleTime)) ; else if (yaz_match_xsd_element(ptr, "records")) yaz_srw_records(o, ptr, &res->records, &res->extra_records, &res->num_records, client_data, 0); else if (yaz_match_xsd_integer(ptr, "nextRecordPosition", o, &res->nextRecordPosition)) ; else if (yaz_match_xsd_element(ptr, "diagnostics")) yaz_srw_diagnostics(o, ptr, &res->diagnostics, &res->num_diagnostics, client_data, ns, 0); else if (yaz_match_xsd_element(ptr, "facet_analysis")) yaz_sru_proxy_decode_facets(o, ptr, &res->facetList); else if (yaz_match_xsd_element(ptr, "facetedResults")) yaz_sru_facet_response(o, &res->facetList, ptr); } } else if (!xmlStrcmp(method->name, BAD_CAST "explainRequest")) { Z_SRW_explainRequest *req; xmlNodePtr ptr = method->children; (*p)->which = Z_SRW_explain_request; req = (*p)->u.explain_request = (Z_SRW_explainRequest *) odr_malloc(o, sizeof(*req)); req->recordPacking = 0; req->packing = 0; req->database = 0; req->stylesheet = 0; for (; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "version", o, &(*p)->srw_version)) ; else if (yaz_match_xsd_XML_n(ptr, "extraResponseData", o, &(*p)->extraResponseData_buf, &(*p)->extraResponseData_len)) ; else if (yaz_match_xsd_string(ptr, "stylesheet", o, &req->stylesheet)) ; else if (yaz_match_xsd_string(ptr, "recordPacking", o, &req->recordPacking)) ; else yaz_match_xsd_string(ptr, "database", o, &req->database); } } else if (!xmlStrcmp(method->name, BAD_CAST "explainResponse")) { Z_SRW_explainResponse *res; xmlNodePtr ptr = method->children; (*p)->which = Z_SRW_explain_response; res = (*p)->u.explain_response = (Z_SRW_explainResponse*) odr_malloc(o, sizeof(*res)); res->diagnostics = 0; res->num_diagnostics = 0; res->record.recordSchema = 0; res->record.recordData_buf = 0; res->record.recordData_len = 0; res->record.recordPosition = 0; for (; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "version", o, &(*p)->srw_version)) ; else if (yaz_match_xsd_XML_n(ptr, "extraResponseData", o, &(*p)->extraResponseData_buf, &(*p)->extraResponseData_len)) ; else if (yaz_match_xsd_element(ptr, "record")) yaz_srw_record(o, ptr, &res->record, &res->extra_record, client_data, 0); else if (yaz_match_xsd_element(ptr, "diagnostics")) yaz_srw_diagnostics(o, ptr, &res->diagnostics, &res->num_diagnostics, client_data, ns, 0); ; } } else if (!xmlStrcmp(method->name, BAD_CAST "scanRequest")) { Z_SRW_scanRequest *req; xmlNodePtr ptr = method->children; (*p)->which = Z_SRW_scan_request; req = (*p)->u.scan_request = (Z_SRW_scanRequest *) odr_malloc(o, sizeof(*req)); req->queryType = "cql"; req->scanClause = 0; req->responsePosition = 0; req->maximumTerms = 0; req->stylesheet = 0; req->database = 0; for (; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "version", o, &(*p)->srw_version)) ; else if (yaz_match_xsd_XML_n(ptr, "extraResponseData", o, &(*p)->extraResponseData_buf, &(*p)->extraResponseData_len)) ; else if (yaz_match_xsd_string(ptr, "scanClause", o, &req->scanClause)) ; else if (yaz_match_xsd_string(ptr, "pScanClause", o, &req->scanClause)) { req->queryType = "pqf"; } else if (yaz_match_xsd_integer(ptr, "responsePosition", o, &req->responsePosition)) ; else if (yaz_match_xsd_integer(ptr, "maximumTerms", o, &req->maximumTerms)) ; else if (yaz_match_xsd_string(ptr, "stylesheet", o, &req->stylesheet)) ; else yaz_match_xsd_string(ptr, "database", o, &req->database); } } else if (!xmlStrcmp(method->name, BAD_CAST "scanResponse")) { Z_SRW_scanResponse *res; xmlNodePtr ptr = method->children; (*p)->which = Z_SRW_scan_response; res = (*p)->u.scan_response = (Z_SRW_scanResponse *) odr_malloc(o, sizeof(*res)); res->terms = 0; res->num_terms = 0; res->diagnostics = 0; res->num_diagnostics = 0; for (; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "version", o, &(*p)->srw_version)) ; else if (yaz_match_xsd_XML_n(ptr, "extraResponseData", o, &(*p)->extraResponseData_buf, &(*p)->extraResponseData_len)) ; else if (yaz_match_xsd_element(ptr, "terms")) yaz_srw_terms(o, ptr, &res->terms, &res->num_terms, client_data, ns); else if (yaz_match_xsd_element(ptr, "diagnostics")) yaz_srw_diagnostics(o, ptr, &res->diagnostics, &res->num_diagnostics, client_data, ns, 0); } } else { *p = 0; return -1; } neg_version = yaz_negotiate_sru_version((*p)->srw_version); if (neg_version) (*p)->srw_version = neg_version; } else if (o->direction == ODR_ENCODE) { Z_SRW_PDU **p = handler_data; xmlNsPtr ns_srw; xmlNodePtr ptr = 0; int version2 = !(*p)->srw_version || strcmp((*p)->srw_version, "2.") > 0; if ((*p)->which == Z_SRW_searchRetrieve_request) { Z_SRW_searchRetrieveRequest *req = (*p)->u.request; const char *queryType = req->queryType; if (version2) ns = "http://docs.oasis-open.org/ns/search-ws/sruRequest"; ptr = xmlNewChild(pptr, 0, BAD_CAST "searchRetrieveRequest", 0); ns_srw = xmlNewNs(ptr, BAD_CAST ns, BAD_CAST "zs"); xmlSetNs(ptr, ns_srw); if (!version2) add_xsd_string(ptr, "version", (*p)->srw_version); if (version2) { add_xsd_string(ptr, "query", req->query); } else { if (!queryType || !strcmp(queryType, "cql")) add_xsd_string(ptr, "query", req->query); else if (!strcmp(queryType, "xcql")) add_xsd_string(ptr, "xQuery", req->query); else if (!strcmp(queryType, "pqf")) add_xsd_string(ptr, "pQuery", req->query); queryType = 0; } add_xsd_integer(ptr, "startRecord", req->startRecord); add_xsd_integer(ptr, "maximumRecords", req->maximumRecords); if (version2) add_xsd_string(ptr, "recordXMLEscaping", req->recordPacking); else add_xsd_string(ptr, "recordPacking", req->recordPacking); add_xsd_string(ptr, "recordSchema", req->recordSchema); add_xsd_string(ptr, "recordXPath", req->recordXPath); add_xsd_integer(ptr, "resultSetTTL", req->resultSetTTL); add_xsd_string(ptr, "stylesheet", req->stylesheet); add_xsd_string(ptr, "queryType", queryType); switch (req->sort_type) { case Z_SRW_sort_type_none: break; case Z_SRW_sort_type_sort: add_xsd_string(ptr, "sortKeys", req->sort.sortKeys); break; case Z_SRW_sort_type_xSort: add_xsd_string(ptr, "xSortKeys", req->sort.xSortKeys); break; } /* still unsupported are: renderedBy, httpAccept, responseType */ add_xsd_string(ptr, "database", req->database); if (version2) add_xsd_string(ptr, "recordPacking", req->packing); { const char *limit = 0; const char *start = 0; const char *sort = 0; yaz_sru_facet_request(o, &req->facetList, &limit, &start, &sort); add_xsd_string(ptr, "facetLimit", limit); add_xsd_string(ptr, "facetStart", start); add_xsd_string(ptr, "facetSort", sort); } } else if ((*p)->which == Z_SRW_searchRetrieve_response) { Z_SRW_searchRetrieveResponse *res = (*p)->u.response; if (version2) ns = "http://docs.oasis-open.org/ns/search-ws/sruResponse"; ptr = xmlNewChild(pptr, 0, BAD_CAST "searchRetrieveResponse", 0); ns_srw = xmlNewNs(ptr, BAD_CAST ns, BAD_CAST "zs"); xmlSetNs(ptr, ns_srw); if (!version2) add_xsd_string(ptr, "version", (*p)->srw_version); add_xsd_integer(ptr, "numberOfRecords", res->numberOfRecords); add_xsd_string(ptr, "resultSetId", res->resultSetId); if (!version2) add_xsd_integer(ptr, "resultSetIdleTime", res->resultSetIdleTime); if (res->num_records) { xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "records", 0); yaz_srw_records(o, rptr, &res->records, &res->extra_records, &res->num_records, client_data, version2); } add_xsd_integer(ptr, "nextRecordPosition", res->nextRecordPosition); encode_echoed_args(ptr, *p, "echoedSearchRetrieveRequest"); if (res->num_diagnostics) { xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "diagnostics", 0); yaz_srw_diagnostics(o, rptr, &res->diagnostics, &res->num_diagnostics, client_data, ns, version2); } if (version2) { if (ptr && (*p)->extraResponseData_len) add_XML_n(ptr, "extraResponseData", (*p)->extraResponseData_buf, (*p)->extraResponseData_len, ns_srw); add_xsd_integer(ptr, "resultSetTTL", res->resultSetIdleTime); add_xsd_string(ptr, "resultCountPrecision", res->resultCountPrecision); yaz_sru_facet_response(o, &res->facetList, ptr); return 0; /* so we don't make extra response data twice */ } } else if ((*p)->which == Z_SRW_explain_request) { Z_SRW_explainRequest *req = (*p)->u.explain_request; if (version2) ns = "http://docs.oasis-open.org/ns/search-ws/sruRequest"; ptr = xmlNewChild(pptr, 0, BAD_CAST "explainRequest", 0); ns_srw = xmlNewNs(ptr, BAD_CAST ns, BAD_CAST "zs"); xmlSetNs(ptr, ns_srw); if (!version2) add_xsd_string(ptr, "version", (*p)->srw_version); if (version2) { add_xsd_string(ptr, "recordXMLEscaping", req->recordPacking); add_xsd_string(ptr, "recordPacking", req->packing); } else add_xsd_string(ptr, "recordPacking", req->recordPacking); add_xsd_string(ptr, "stylesheet", req->stylesheet); add_xsd_string(ptr, "database", req->database); } else if ((*p)->which == Z_SRW_explain_response) { Z_SRW_explainResponse *res = (*p)->u.explain_response; if (version2) ns = "http://docs.oasis-open.org/ns/search-ws/sruResponse"; ptr = xmlNewChild(pptr, 0, BAD_CAST "explainResponse", 0); ns_srw = xmlNewNs(ptr, BAD_CAST ns, BAD_CAST "zs"); xmlSetNs(ptr, ns_srw); add_xsd_string(ptr, "version", (*p)->srw_version); if (1) { xmlNodePtr ptr1 = xmlNewChild(ptr, 0, BAD_CAST "record", 0); yaz_srw_record(o, ptr1, &res->record, &res->extra_record, client_data, version2); } encode_echoed_args(ptr, *p, "echoedExplainRequest"); if (res->num_diagnostics) { xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "diagnostics", 0); yaz_srw_diagnostics(o, rptr, &res->diagnostics, &res->num_diagnostics, client_data, ns, version2); } } else if ((*p)->which == Z_SRW_scan_request) { Z_SRW_scanRequest *req = (*p)->u.scan_request; const char *queryType = req->queryType; if (version2) ns = "http://docs.oasis-open.org/ns/search-ws/scan"; ptr = xmlNewChild(pptr, 0, BAD_CAST "scanRequest", 0); ns_srw = xmlNewNs(ptr, BAD_CAST ns, BAD_CAST "zs"); xmlSetNs(ptr, ns_srw); if (!version2) add_xsd_string(ptr, "version", (*p)->srw_version); if (version2) { if (queryType && strcmp(queryType, "cql")) add_xsd_string(ptr, "queryType", queryType); add_xsd_string(ptr, "scanClause", req->scanClause); } else { if (!queryType || !strcmp(queryType, "cql")) add_xsd_string(ptr, "scanClause", req->scanClause); else if (!strcmp(queryType, "pqf")) add_xsd_string(ptr, "pScanClause", req->scanClause); } add_xsd_integer(ptr, "responsePosition", req->responsePosition); add_xsd_integer(ptr, "maximumTerms", req->maximumTerms); add_xsd_string(ptr, "stylesheet", req->stylesheet); add_xsd_string(ptr, "database", req->database); } else if ((*p)->which == Z_SRW_scan_response) { Z_SRW_scanResponse *res = (*p)->u.scan_response; if (version2) ns = "http://docs.oasis-open.org/ns/search-ws/scan"; ptr = xmlNewChild(pptr, 0, BAD_CAST "scanResponse", 0); ns_srw = xmlNewNs(ptr, BAD_CAST ns, BAD_CAST "zs"); xmlSetNs(ptr, ns_srw); if (!version2) add_xsd_string(ptr, "version", (*p)->srw_version); if (res->num_terms) { xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "terms", 0); yaz_srw_terms(o, rptr, &res->terms, &res->num_terms, client_data, ns); } if (res->num_diagnostics) { xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "diagnostics", 0); yaz_srw_diagnostics(o, rptr, &res->diagnostics, &res->num_diagnostics, client_data, ns, version2); } } else return -1; if (ptr && (*p)->extraResponseData_len) add_XML_n(ptr, "extraResponseData", (*p)->extraResponseData_buf, (*p)->extraResponseData_len, ns_srw); } return 0; } int yaz_ucp_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, void *client_data, const char *ns_ucp_str) { xmlNodePtr pptr = (xmlNodePtr) vptr; const char *ns_srw_str = YAZ_XMLNS_SRU_v1_1; if (o->direction == ODR_DECODE) { Z_SRW_PDU **p = handler_data; xmlNodePtr method = pptr->children; while (method && method->type == XML_TEXT_NODE) method = method->next; if (!method) return -1; if (method->type != XML_ELEMENT_NODE) return -1; *p = yaz_srw_get_core_v_2_0(o); if (!xmlStrcmp(method->name, BAD_CAST "updateRequest")) { xmlNodePtr ptr = method->children; Z_SRW_updateRequest *req; char *oper = 0; (*p)->which = Z_SRW_update_request; req = (*p)->u.update_request = (Z_SRW_updateRequest *) odr_malloc(o, sizeof(*req)); req->database = 0; req->operation = 0; req->recordId = 0; req->recordVersions = 0; req->num_recordVersions = 0; req->record = 0; req->extra_record = 0; req->extraRequestData_buf = 0; req->extraRequestData_len = 0; req->stylesheet = 0; for (; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "version", o, &(*p)->srw_version)) ; else if (yaz_match_xsd_string(ptr, "action", o, &oper)){ if (oper) { if (!strcmp(oper, "info:srw/action/1/delete")) req->operation = "delete"; else if (!strcmp(oper,"info:srw/action/1/replace" )) req->operation = "replace"; else if (!strcmp(oper, "info:srw/action/1/create")) req->operation = "insert"; } } else if (yaz_match_xsd_string(ptr, "recordIdentifier", o, &req->recordId)) ; else if (yaz_match_xsd_element(ptr, "recordVersions" ) ) yaz_srw_versions( o, ptr, &req->recordVersions, &req->num_recordVersions, client_data, ns_ucp_str); else if (yaz_match_xsd_element(ptr, "record")) { req->record = yaz_srw_get_record(o); yaz_srw_record(o, ptr, req->record, &req->extra_record, client_data, 0); } else if (yaz_match_xsd_string(ptr, "stylesheet", o, &req->stylesheet)) ; else yaz_match_xsd_string(ptr, "database", o, &req->database); } } else if (!xmlStrcmp(method->name, BAD_CAST "updateResponse")) { xmlNodePtr ptr = method->children; Z_SRW_updateResponse *res; (*p)->which = Z_SRW_update_response; res = (*p)->u.update_response = (Z_SRW_updateResponse *) odr_malloc(o, sizeof(*res)); res->operationStatus = 0; res->recordId = 0; res->recordVersions = 0; res->num_recordVersions = 0; res->diagnostics = 0; res->num_diagnostics = 0; res->record = 0; res->extra_record = 0; res->extraResponseData_buf = 0; res->extraResponseData_len = 0; for (; ptr; ptr = ptr->next) { if (yaz_match_xsd_string(ptr, "version", o, &(*p)->srw_version)) ; else if (yaz_match_xsd_string(ptr, "operationStatus", o, &res->operationStatus )) ; else if (yaz_match_xsd_string(ptr, "recordIdentifier", o, &res->recordId)) ; else if (yaz_match_xsd_element(ptr, "recordVersions" )) yaz_srw_versions(o, ptr, &res->recordVersions, &res->num_recordVersions, client_data, ns_ucp_str); else if (yaz_match_xsd_element(ptr, "record")) { res->record = yaz_srw_get_record(o); yaz_srw_record(o, ptr, res->record, &res->extra_record, client_data, 0); } else if (yaz_match_xsd_element(ptr, "diagnostics")) yaz_srw_diagnostics(o, ptr, &res->diagnostics, &res->num_diagnostics, client_data, ns_ucp_str, 0); } } else if (!xmlStrcmp(method->name, BAD_CAST "explainUpdateRequest")) { } else if (!xmlStrcmp(method->name, BAD_CAST "explainUpdateResponse")) { } else { *p = 0; return -1; } } else if (o->direction == ODR_ENCODE) { Z_SRW_PDU **p = handler_data; xmlNsPtr ns_ucp, ns_srw; if ((*p)->which == Z_SRW_update_request) { Z_SRW_updateRequest *req = (*p)->u.update_request; xmlNodePtr ptr = xmlNewChild(pptr, 0, BAD_CAST "updateRequest", 0); ns_ucp = xmlNewNs(ptr, BAD_CAST ns_ucp_str, BAD_CAST "zu"); xmlSetNs(ptr, ns_ucp); ns_srw = xmlNewNs(ptr, BAD_CAST ns_srw_str, BAD_CAST "zs"); add_xsd_string_ns(ptr, "version", (*p)->srw_version, ns_srw); add_xsd_string(ptr, "action", req->operation); add_xsd_string(ptr, "recordIdentifier", req->recordId ); if (req->recordVersions) yaz_srw_versions( o, ptr, &req->recordVersions, &req->num_recordVersions, client_data, ns_ucp_str); if (req->record && req->record->recordData_len) { xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "record", 0); xmlSetNs(rptr, ns_srw); yaz_srw_record(o, rptr, req->record, &req->extra_record, client_data, 0); } if (req->extraRequestData_len) { add_XML_n(ptr, "extraRequestData", req->extraRequestData_buf, req->extraRequestData_len, ns_srw); } add_xsd_string(ptr, "stylesheet", req->stylesheet); add_xsd_string(ptr, "database", req->database); } else if ((*p)->which == Z_SRW_update_response) { Z_SRW_updateResponse *res = (*p)->u.update_response; xmlNodePtr ptr = xmlNewChild(pptr, 0, (xmlChar *) "updateResponse", 0); ns_ucp = xmlNewNs(ptr, BAD_CAST ns_ucp_str, BAD_CAST "zu"); xmlSetNs(ptr, ns_ucp); ns_srw = xmlNewNs(ptr, BAD_CAST ns_srw_str, BAD_CAST "zs"); add_xsd_string_ns(ptr, "version", (*p)->srw_version, ns_srw); add_xsd_string(ptr, "operationStatus", res->operationStatus ); add_xsd_string(ptr, "recordIdentifier", res->recordId ); if (res->recordVersions) yaz_srw_versions(o, ptr, &res->recordVersions, &res->num_recordVersions, client_data, ns_ucp_str); if (res->record && res->record->recordData_len) { xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "record", 0); xmlSetNs(rptr, ns_srw); yaz_srw_record(o, rptr, res->record, &res->extra_record, client_data, 0); } if (res->num_diagnostics) { xmlNsPtr ns_diag = xmlNewNs(pptr, BAD_CAST YAZ_XMLNS_DIAG_v1_1, BAD_CAST "diag" ); xmlNodePtr rptr = xmlNewChild(ptr, ns_diag, BAD_CAST "diagnostics", 0); yaz_srw_diagnostics(o, rptr, &res->diagnostics, &res->num_diagnostics, client_data, ns_ucp_str, 0); } if (res->extraResponseData_len) add_XML_n(ptr, "extraResponseData", res->extraResponseData_buf, res->extraResponseData_len, ns_srw); } else return -1; } return 0; } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/elementset.c0000644000175000017500000000262313265142510012434 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file elementset.c * \brief Z39.50 element set utilities */ #if HAVE_CONFIG_H #include #endif #include const char *yaz_get_esn(Z_RecordComposition *comp) { if (comp && comp->which == Z_RecordComp_complex) { if (comp->u.complex->generic && comp->u.complex->generic->elementSpec && (comp->u.complex->generic->elementSpec->which == Z_ElementSpec_elementSetName)) return comp->u.complex->generic->elementSpec->u.elementSetName; } else if (comp && comp->which == Z_RecordComp_simple && comp->u.simple->which == Z_ElementSetNames_generic) return comp->u.simple->u.generic; return 0; } void yaz_set_esn(Z_RecordComposition **comp_p, const char *esn, NMEM nmem) { Z_RecordComposition *comp = (Z_RecordComposition *) nmem_malloc(nmem, sizeof(*comp)); comp->which = Z_RecordComp_simple; comp->u.simple = (Z_ElementSetNames *) nmem_malloc(nmem, sizeof(*comp->u.simple)); comp->u.simple->which = Z_ElementSetNames_generic; comp->u.simple->u.generic = nmem_strdup(nmem, esn); *comp_p = comp; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/spipe.c0000644000175000017500000001415313265142510011410 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file spipe.c * \brief Implements socket-pipes * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #if HAVE_UNISTD_H #include #endif #ifdef WIN32 #include #define YAZ_INVALID_SOCKET INVALID_SOCKET #else #define YAZ_INVALID_SOCKET -1 #include #endif #if HAVE_NETINET_IN_H #include #endif #if HAVE_NETDB_H #include #endif #if HAVE_ARPA_INET_H #include #endif #if HAVE_NETINET_TCP_H #include #endif #if HAVE_SYS_SOCKET_H #include #endif #if HAVE_NETINET_IN_H #include #endif #if HAVE_NETDB_H #include #endif #if HAVE_ARPA_INET_H #include #endif #if HAVE_NETINET_TCP_H #include #endif #ifndef YAZ_SOCKLEN_T #define YAZ_SOCKLEN_T int #endif struct yaz_spipe { int m_fd[2]; int m_socket; }; static void yaz_spipe_close(int *fd) { #ifdef WIN32 if (*fd != YAZ_INVALID_SOCKET) closesocket(*fd); #else if (*fd != YAZ_INVALID_SOCKET) close(*fd); #endif *fd = YAZ_INVALID_SOCKET; } static int nonblock(int s) { #ifdef WIN32 unsigned long tru = 1; if (ioctlsocket(s, FIONBIO, &tru)) return -1; #else if (fcntl(s, F_SETFL, O_NONBLOCK)) return -1; #endif return 0; } yaz_spipe_t yaz_spipe_create(int port_to_use, WRBUF *err_msg) { yaz_spipe_t p = xmalloc(sizeof(*p)); #ifdef WIN32 { WSADATA wsaData; WORD wVersionRequested = MAKEWORD(2, 0); if (WSAStartup( wVersionRequested, &wsaData)) { if (err_msg) wrbuf_printf(*err_msg, "WSAStartup failed"); xfree(p); return 0; } } #endif p->m_fd[0] = p->m_fd[1] = YAZ_INVALID_SOCKET; p->m_socket = YAZ_INVALID_SOCKET; if (port_to_use) { struct sockaddr_in add; struct sockaddr *addr = 0; unsigned int tmpadd; struct sockaddr caddr; YAZ_SOCKLEN_T caddr_len = sizeof(caddr); fd_set write_set; /* create server socket */ p->m_socket = socket(AF_INET, SOCK_STREAM, 0); if (p->m_socket == YAZ_INVALID_SOCKET) { if (err_msg) wrbuf_printf(*err_msg, "socket call failed"); yaz_spipe_destroy(p); return 0; } #ifndef WIN32 { unsigned long one = 1; if (setsockopt(p->m_socket, SOL_SOCKET, SO_REUSEADDR, (char*) &one, sizeof(one))) { if (err_msg) wrbuf_printf(*err_msg, "setsockopt call failed"); yaz_spipe_destroy(p); return 0; } } #endif /* bind server socket */ add.sin_family = AF_INET; add.sin_port = htons(port_to_use); add.sin_addr.s_addr = INADDR_ANY; addr = ( struct sockaddr *) &add; if (bind(p->m_socket, addr, sizeof(struct sockaddr_in))) { if (err_msg) wrbuf_printf(*err_msg, "could not bind to socket"); yaz_spipe_destroy(p); return 0; } if (listen(p->m_socket, 3) < 0) { if (err_msg) wrbuf_printf(*err_msg, "could not listen on socket"); yaz_spipe_destroy(p); return 0; } /* client socket */ tmpadd = (unsigned) inet_addr("127.0.0.1"); if (!tmpadd) { if (err_msg) wrbuf_printf(*err_msg, "inet_addr failed"); yaz_spipe_destroy(p); return 0; } memcpy(&add.sin_addr.s_addr, &tmpadd, sizeof(struct in_addr)); p->m_fd[1] = socket(AF_INET, SOCK_STREAM, 0); if (p->m_fd[1] == YAZ_INVALID_SOCKET) { if (err_msg) wrbuf_printf(*err_msg, "socket call failed (2)"); yaz_spipe_destroy(p); return 0; } nonblock(p->m_fd[1]); if (connect(p->m_fd[1], addr, sizeof(*addr))) { if ( #ifdef WIN32 WSAGetLastError() != WSAEWOULDBLOCK #else errno != EINPROGRESS #endif ) { if (err_msg) wrbuf_printf(*err_msg, "connect call failed"); yaz_spipe_destroy(p); return 0; } } /* server accept */ p->m_fd[0] = accept(p->m_socket, &caddr, &caddr_len); if (p->m_fd[0] == YAZ_INVALID_SOCKET) { if (err_msg) wrbuf_printf(*err_msg, "accept failed"); yaz_spipe_destroy(p); return 0; } /* complete connect */ FD_ZERO(&write_set); FD_SET(p->m_fd[1], &write_set); if (select(p->m_fd[1]+1, 0, &write_set, 0, 0) != 1) { if (err_msg) wrbuf_printf(*err_msg, "could not complete connect"); yaz_spipe_destroy(p); return 0; } yaz_spipe_close(&p->m_socket); } else { #ifdef WIN32 yaz_spipe_destroy(p); return 0; #else if (pipe(p->m_fd)) { if (err_msg) wrbuf_printf(*err_msg, "pipe call failed"); yaz_spipe_destroy(p); return 0; } assert(p->m_fd[0] != YAZ_INVALID_SOCKET); assert(p->m_fd[1] != YAZ_INVALID_SOCKET); #endif } return p; } void yaz_spipe_destroy(yaz_spipe_t p) { yaz_spipe_close(&p->m_fd[0]); yaz_spipe_close(&p->m_fd[1]); yaz_spipe_close(&p->m_socket); xfree(p); #ifdef WIN32 WSACleanup(); #endif } int yaz_spipe_get_read_fd(yaz_spipe_t p) { return p->m_fd[0]; } int yaz_spipe_get_write_fd(yaz_spipe_t p) { return p->m_fd[1]; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/oidtoc.tcl0000644000175000017500000001010013265142510012075 00000000000000# This file is part of the YAZ toolkit # Copyright (C) Index Data # See the file LICENSE for details. # # # Converts a CSV file with Object identifiers to C proc readoids {input} { set csv [open $input r] set lineno 0 while {1} { incr lineno set cnt [gets $csv line] if {$cnt < 0} { break } if {![string compare [string index $line 0] \"]} { continue } set tokens [string map {, { }} $line] if {[llength $tokens] != 3} { puts "$input:$lineno: Bad line '$line'" exit 1 } lappend oids $tokens } close $csv if {![info exists oids]} { puts "$input:0 No OIDS" exit 1 } return $oids } proc constant_var {oid} { set lname [string tolower [lindex $oid 2]] set lname [string map {- _ . _ { } _ ( {} ) {}} $lname] set prefix [string tolower [lindex $oid 0]] return yaz_oid_${prefix}_${lname} } proc oid_to_xml {srcdir input xname} { set oids [readoids "${input}"] set xfile [open "${xname}" w] puts $xfile "" puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile {Name} puts $xfile {Class} puts $xfile {Constant / OID} puts $xfile {} puts $xfile {} puts $xfile {} foreach oid $oids { puts $xfile {} puts $xfile {} puts $xfile [lindex $oid 2] puts $xfile {} puts $xfile {} puts $xfile [lindex $oid 0] puts $xfile {} puts $xfile {} set v [constant_var $oid] puts $xfile $v puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile {} puts $xfile [lindex $oid 1] puts $xfile {} puts $xfile {} } puts $xfile {} puts $xfile {} puts $xfile {} close $xfile } proc oid_to_c {srcdir input cname hname} { set oids [readoids "${input}"] set cfile [open "${srcdir}/${cname}" w] set hfile [open "${srcdir}/../include/yaz/${hname}" w] puts $cfile "/** \\file $cname" puts $hfile "/** \\file $hname" set preamble " \\brief Standard Object Identifiers: Generated from $input */" puts $cfile $preamble puts $hfile $preamble puts $hfile "\#ifndef OID_STD_H" puts $hfile "\#define OID_STD_H" puts $cfile "\#if HAVE_CONFIG_H" puts $cfile "\#include " puts $cfile "\#endif" puts $cfile "\#include " puts $cfile "" # To avoid LNK4049 puts $hfile "\#ifdef YAZ_DLL" puts $hfile "\#define OID_EXPORT YAZ_EXPORT" puts $hfile "\#else" puts $hfile "\#define OID_EXPORT YAZ_IMPORT" puts $hfile "\#endif" puts $hfile "YAZ_BEGIN_CDECL" foreach oid $oids { set v [constant_var $oid] puts -nonewline $cfile "YAZ_EXPORT const Odr_oid $v\[\] = \{" puts -nonewline $cfile [string map {. ,} [lindex $oid 1]] puts $cfile ",-1\};" puts $hfile "OID_EXPORT extern const Odr_oid $v\[\];" } puts $cfile "YAZ_EXPORT struct yaz_oid_entry yaz_oid_standard_entries\[\] =" puts $cfile "\{" foreach oid $oids { set v [constant_var $oid] puts -nonewline $cfile "\t\{CLASS_[lindex $oid 0], " puts -nonewline $cfile "$v, " puts -nonewline $cfile \"[lindex $oid 2]\" puts $cfile "\}," } puts $cfile "\t\{CLASS_NOP, 0, 0\}" puts $cfile "\};" puts $hfile "OID_EXPORT extern struct yaz_oid_entry yaz_oid_standard_entries\[\];" puts $hfile "YAZ_END_CDECL" puts $hfile "\#endif" close $cfile close $hfile } if {[llength $argv] == 4} { oid_to_c [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] [lindex $argv 3] } elseif {[llength $argv] == 3} { oid_to_xml [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] } else { puts "oidtoc.tcl srcdir csv cfile hfile" exit 1 } yaz-5.28.0/src/icu_utf8.c0000644000175000017500000000760213265142510012017 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief UTF-8 string utilities for ICU */ #if HAVE_CONFIG_H #include "config.h" #endif #if YAZ_HAVE_ICU #include #include #include #include #include #include #include #include /* some more string fcns*/ #include /* char names */ struct icu_buf_utf8 *icu_buf_utf8_create(size_t capacity) { struct icu_buf_utf8 *buf8 = (struct icu_buf_utf8 *) xmalloc(sizeof(struct icu_buf_utf8)); buf8->utf8_len = 0; buf8->utf8_cap = capacity; if (capacity > 0) { buf8->utf8 = (uint8_t *) xmalloc(sizeof(uint8_t) * capacity); buf8->utf8[0] = (uint8_t) 0; } else buf8->utf8 = 0; return buf8; } struct icu_buf_utf8 *icu_buf_utf8_clear(struct icu_buf_utf8 *buf8) { assert(buf8); if (buf8->utf8) buf8->utf8[0] = (uint8_t) 0; buf8->utf8_len = 0; return buf8; } struct icu_buf_utf8 *icu_buf_utf8_resize(struct icu_buf_utf8 *buf8, size_t capacity) { assert(buf8); if (capacity > 0) { if (0 == buf8->utf8) buf8->utf8 = (uint8_t *) xmalloc(sizeof(uint8_t) * capacity); else buf8->utf8 = (uint8_t *) xrealloc(buf8->utf8, sizeof(uint8_t) * capacity); buf8->utf8_cap = capacity; } return buf8; } const char *icu_buf_utf8_to_cstr(struct icu_buf_utf8 *src8) { assert(src8); if (src8->utf8_len == 0) return ""; if (src8->utf8_len == src8->utf8_cap) src8 = icu_buf_utf8_resize(src8, src8->utf8_len * 2 + 1); src8->utf8[src8->utf8_len] = '\0'; return (const char *) src8->utf8; } void icu_buf_utf8_destroy(struct icu_buf_utf8 *buf8) { if (buf8) xfree(buf8->utf8); xfree(buf8); } UErrorCode icu_utf16_from_utf8_cstr(struct icu_buf_utf16 *dest16, const char *src8cstr, UErrorCode *status) { size_t src8cstr_len = 0; int32_t utf16_len = 0; *status = U_ZERO_ERROR; src8cstr_len = strlen(src8cstr); u_strFromUTF8(dest16->utf16, dest16->utf16_cap, &utf16_len, src8cstr, src8cstr_len, status); /* check for buffer overflow, resize and retry */ if (*status == U_BUFFER_OVERFLOW_ERROR) { icu_buf_utf16_resize(dest16, utf16_len * 2); *status = U_ZERO_ERROR; u_strFromUTF8(dest16->utf16, dest16->utf16_cap, &utf16_len, src8cstr, src8cstr_len, status); } if (U_SUCCESS(*status) && utf16_len <= dest16->utf16_cap) dest16->utf16_len = utf16_len; else icu_buf_utf16_clear(dest16); return *status; } UErrorCode icu_utf16_to_utf8(struct icu_buf_utf8 *dest8, const struct icu_buf_utf16 *src16, UErrorCode *status) { int32_t utf8_len = 0; u_strToUTF8((char *) dest8->utf8, dest8->utf8_cap, &utf8_len, src16->utf16, src16->utf16_len, status); /* check for buffer overflow, resize and retry */ if (*status == U_BUFFER_OVERFLOW_ERROR) { icu_buf_utf8_resize(dest8, utf8_len * 2); *status = U_ZERO_ERROR; u_strToUTF8((char *) dest8->utf8, dest8->utf8_cap, &utf8_len, src16->utf16, src16->utf16_len, status); } if (U_SUCCESS(*status) && utf8_len <= dest8->utf8_cap) dest8->utf8_len = utf8_len; else icu_buf_utf8_clear(dest8); return *status; } #endif /* YAZ_HAVE_ICU */ /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-core.c0000644000175000017500000016776213307451715011515 00000000000000/** \file z-core.c \brief ASN.1 Module Z39-50-APDU-1995 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_APDU(ODR o, Z_APDU **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 20, Z_APDU_initRequest, (Odr_fun) z_InitRequest, "initRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 21, Z_APDU_initResponse, (Odr_fun) z_InitResponse, "initResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 22, Z_APDU_searchRequest, (Odr_fun) z_SearchRequest, "searchRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 23, Z_APDU_searchResponse, (Odr_fun) z_SearchResponse, "searchResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 24, Z_APDU_presentRequest, (Odr_fun) z_PresentRequest, "presentRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 25, Z_APDU_presentResponse, (Odr_fun) z_PresentResponse, "presentResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 26, Z_APDU_deleteResultSetRequest, (Odr_fun) z_DeleteResultSetRequest, "deleteResultSetRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 27, Z_APDU_deleteResultSetResponse, (Odr_fun) z_DeleteResultSetResponse, "deleteResultSetResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 28, Z_APDU_accessControlRequest, (Odr_fun) z_AccessControlRequest, "accessControlRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 29, Z_APDU_accessControlResponse, (Odr_fun) z_AccessControlResponse, "accessControlResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 30, Z_APDU_resourceControlRequest, (Odr_fun) z_ResourceControlRequest, "resourceControlRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 31, Z_APDU_resourceControlResponse, (Odr_fun) z_ResourceControlResponse, "resourceControlResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 32, Z_APDU_triggerResourceControlRequest, (Odr_fun) z_TriggerResourceControlRequest, "triggerResourceControlRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 33, Z_APDU_resourceReportRequest, (Odr_fun) z_ResourceReportRequest, "resourceReportRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 34, Z_APDU_resourceReportResponse, (Odr_fun) z_ResourceReportResponse, "resourceReportResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 35, Z_APDU_scanRequest, (Odr_fun) z_ScanRequest, "scanRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 36, Z_APDU_scanResponse, (Odr_fun) z_ScanResponse, "scanResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 43, Z_APDU_sortRequest, (Odr_fun) z_SortRequest, "sortRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 44, Z_APDU_sortResponse, (Odr_fun) z_SortResponse, "sortResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 45, Z_APDU_segmentRequest, (Odr_fun) z_Segment, "segmentRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 46, Z_APDU_extendedServicesRequest, (Odr_fun) z_ExtendedServicesRequest, "extendedServicesRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 47, Z_APDU_extendedServicesResponse, (Odr_fun) z_ExtendedServicesResponse, "extendedServicesResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 48, Z_APDU_close, (Odr_fun) z_Close, "close"}, {ODR_IMPLICIT, ODR_CONTEXT, 49, Z_APDU_duplicateDetectionRequest, (Odr_fun) z_DuplicateDetectionRequest, "duplicateDetectionRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 50, Z_APDU_duplicateDetectionResponse, (Odr_fun) z_DuplicateDetectionResponse, "duplicateDetectionResponse"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_InitRequest(ODR o, Z_InitRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && z_ProtocolVersion(o, &(*p)->protocolVersion, 0, "protocolVersion") && z_Options(o, &(*p)->options, 0, "options") && odr_implicit_tag(o, odr_integer, &(*p)->preferredMessageSize, ODR_CONTEXT, 5, 0, "preferredMessageSize") && odr_implicit_tag(o, odr_integer, &(*p)->maximumRecordSize, ODR_CONTEXT, 6, 0, "maximumRecordSize") && odr_explicit_tag(o, z_IdAuthentication, &(*p)->idAuthentication, ODR_CONTEXT, 7, 1, "idAuthentication") && odr_implicit_tag(o, z_InternationalString, &(*p)->implementationId, ODR_CONTEXT, 110, 1, "implementationId") && odr_implicit_tag(o, z_InternationalString, &(*p)->implementationName, ODR_CONTEXT, 111, 1, "implementationName") && odr_implicit_tag(o, z_InternationalString, &(*p)->implementationVersion, ODR_CONTEXT, 112, 1, "implementationVersion") && odr_explicit_tag(o, z_External, &(*p)->userInformationField, ODR_CONTEXT, 11, 1, "userInformationField") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_IdPass(ODR o, Z_IdPass **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->groupId, ODR_CONTEXT, 0, 1, "groupId") && odr_implicit_tag(o, z_InternationalString, &(*p)->userId, ODR_CONTEXT, 1, 1, "userId") && odr_implicit_tag(o, z_InternationalString, &(*p)->password, ODR_CONTEXT, 2, 1, "password") && odr_sequence_end(o); } int z_IdAuthentication(ODR o, Z_IdAuthentication **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, Z_IdAuthentication_open, (Odr_fun) odr_visiblestring, "open"}, {-1, -1, -1, Z_IdAuthentication_idPass, (Odr_fun) z_IdPass, "idPass"}, {-1, -1, -1, Z_IdAuthentication_anonymous, (Odr_fun) odr_null, "anonymous"}, {-1, -1, -1, Z_IdAuthentication_other, (Odr_fun) z_External, "other"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (o->direction == ODR_PRINT) return 1; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_InitResponse(ODR o, Z_InitResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && z_ProtocolVersion(o, &(*p)->protocolVersion, 0, "protocolVersion") && z_Options(o, &(*p)->options, 0, "options") && odr_implicit_tag(o, odr_integer, &(*p)->preferredMessageSize, ODR_CONTEXT, 5, 0, "preferredMessageSize") && odr_implicit_tag(o, odr_integer, &(*p)->maximumRecordSize, ODR_CONTEXT, 6, 0, "maximumRecordSize") && odr_implicit_tag(o, odr_bool, &(*p)->result, ODR_CONTEXT, 12, 0, "result") && odr_implicit_tag(o, z_InternationalString, &(*p)->implementationId, ODR_CONTEXT, 110, 1, "implementationId") && odr_implicit_tag(o, z_InternationalString, &(*p)->implementationName, ODR_CONTEXT, 111, 1, "implementationName") && odr_implicit_tag(o, z_InternationalString, &(*p)->implementationVersion, ODR_CONTEXT, 112, 1, "implementationVersion") && odr_explicit_tag(o, z_External, &(*p)->userInformationField, ODR_CONTEXT, 11, 1, "userInformationField") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ProtocolVersion(ODR o, Z_ProtocolVersion **p, int opt, const char *name) { return odr_implicit_tag(o, odr_bitstring, p, ODR_CONTEXT, 3, opt, name); } int z_Options(ODR o, Z_Options **p, int opt, const char *name) { return odr_implicit_tag(o, odr_bitstring, p, ODR_CONTEXT, 4, opt, name); } int z_SearchRequest(ODR o, Z_SearchRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->smallSetUpperBound, ODR_CONTEXT, 13, 0, "smallSetUpperBound") && odr_implicit_tag(o, odr_integer, &(*p)->largeSetLowerBound, ODR_CONTEXT, 14, 0, "largeSetLowerBound") && odr_implicit_tag(o, odr_integer, &(*p)->mediumSetPresentNumber, ODR_CONTEXT, 15, 0, "mediumSetPresentNumber") && odr_implicit_tag(o, odr_bool, &(*p)->replaceIndicator, ODR_CONTEXT, 16, 0, "replaceIndicator") && odr_implicit_tag(o, z_InternationalString, &(*p)->resultSetName, ODR_CONTEXT, 17, 0, "resultSetName") && odr_implicit_settag(o, ODR_CONTEXT, 18) && odr_sequence_of(o, (Odr_fun) z_DatabaseName, &(*p)->databaseNames, &(*p)->num_databaseNames, "databaseNames") && odr_explicit_tag(o, z_ElementSetNames, &(*p)->smallSetElementSetNames, ODR_CONTEXT, 100, 1, "smallSetElementSetNames") && odr_explicit_tag(o, z_ElementSetNames, &(*p)->mediumSetElementSetNames, ODR_CONTEXT, 101, 1, "mediumSetElementSetNames") && odr_implicit_tag(o, odr_oid, &(*p)->preferredRecordSyntax, ODR_CONTEXT, 104, 1, "preferredRecordSyntax") && odr_explicit_tag(o, z_Query, &(*p)->query, ODR_CONTEXT, 21, 0, "query") && odr_implicit_tag(o, z_OtherInformation, &(*p)->additionalSearchInfo, ODR_CONTEXT, 203, 1, "additionalSearchInfo") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_Query(ODR o, Z_Query **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_Query_type_0, (Odr_fun) z_ANY_type_0, "type_0"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Query_type_1, (Odr_fun) z_RPNQuery, "type_1"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Query_type_2, (Odr_fun) odr_octetstring, "type_2"}, {ODR_EXPLICIT, ODR_CONTEXT, 100, Z_Query_type_100, (Odr_fun) odr_octetstring, "type_100"}, {ODR_IMPLICIT, ODR_CONTEXT, 101, Z_Query_type_101, (Odr_fun) z_RPNQuery, "type_101"}, {ODR_EXPLICIT, ODR_CONTEXT, 102, Z_Query_type_102, (Odr_fun) odr_octetstring, "type_102"}, {ODR_IMPLICIT, ODR_CONTEXT, 104, Z_Query_type_104, (Odr_fun) z_External, "type_104"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_RPNQuery(ODR o, Z_RPNQuery **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_AttributeSetId(o, &(*p)->attributeSetId, 0, "attributeSetId") && z_RPNStructure(o, &(*p)->RPNStructure, 0, "RPNStructure") && odr_sequence_end(o); } int z_Complex(ODR o, Z_Complex **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_RPNStructure(o, &(*p)->s1, 0, "s1") && z_RPNStructure(o, &(*p)->s2, 0, "s2") && z_Operator(o, &(*p)->roperator, 0, "roperator") && odr_sequence_end(o); } int z_RPNStructure(ODR o, Z_RPNStructure **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_RPNStructure_simple, (Odr_fun) z_Operand, "simple"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_RPNStructure_complex, (Odr_fun) z_Complex, "complex"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Operand(ODR o, Z_Operand **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, Z_Operand_APT, (Odr_fun) z_AttributesPlusTerm, "attributesPlusTerm"}, {-1, -1, -1, Z_Operand_resultSetId, (Odr_fun) z_ResultSetId, "resultSetId"}, {-1, -1, -1, Z_Operand_resultAttr, (Odr_fun) z_ResultSetPlusAttributes, "resultAttr"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_AttributesPlusTerm(ODR o, Z_AttributesPlusTerm **p, int opt, const char *name) { if (!odr_implicit_settag(o, ODR_CONTEXT, 102) || !odr_sequence_begin (o, p, sizeof(**p), name)) return odr_missing(o, opt, name); return z_AttributeList(o, &(*p)->attributes, 0, "attributes") && z_Term(o, &(*p)->term, 0, "term") && odr_sequence_end(o); } int z_ResultSetPlusAttributes(ODR o, Z_ResultSetPlusAttributes **p, int opt, const char *name) { if (!odr_implicit_settag(o, ODR_CONTEXT, 214) || !odr_sequence_begin (o, p, sizeof(**p), name)) return odr_missing(o, opt, name); return z_ResultSetId(o, &(*p)->resultSet, 0, "resultSet") && z_AttributeList(o, &(*p)->attributes, 0, "attributes") && odr_sequence_end(o); } int z_AttributeList(ODR o, Z_AttributeList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); odr_implicit_settag(o, ODR_CONTEXT, 44); if (odr_sequence_of(o, (Odr_fun) z_AttributeElement, &(*p)->attributes, &(*p)->num_attributes, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Term(ODR o, Z_Term **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 45, Z_Term_general, (Odr_fun) odr_octetstring, "general"}, {ODR_IMPLICIT, ODR_CONTEXT, 215, Z_Term_numeric, (Odr_fun) odr_integer, "numeric"}, {ODR_IMPLICIT, ODR_CONTEXT, 216, Z_Term_characterString, (Odr_fun) z_InternationalString, "characterString"}, {ODR_IMPLICIT, ODR_CONTEXT, 217, Z_Term_oid, (Odr_fun) odr_oid, "oid"}, {ODR_IMPLICIT, ODR_CONTEXT, 218, Z_Term_dateTime, (Odr_fun) odr_generalizedtime, "dateTime"}, {ODR_IMPLICIT, ODR_CONTEXT, 219, Z_Term_external, (Odr_fun) z_External, "external"}, {ODR_IMPLICIT, ODR_CONTEXT, 220, Z_Term_integerAndUnit, (Odr_fun) z_IntUnit, "integerAndUnit"}, {ODR_IMPLICIT, ODR_CONTEXT, 221, Z_Term_null, (Odr_fun) odr_null, "null"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Operator(ODR o, Z_Operator **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_Operator_and, (Odr_fun) odr_null, "op_and"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Operator_or, (Odr_fun) odr_null, "op_or"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Operator_and_not, (Odr_fun) odr_null, "and_not"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Operator_prox, (Odr_fun) z_ProximityOperator, "prox"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_constructed_begin(o, p, ODR_CONTEXT, 46, 0)) return odr_missing(o, opt, name); if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name) && odr_constructed_end(o)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ComplexAttribute(ODR o, Z_ComplexAttribute **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 1) && odr_sequence_of(o, (Odr_fun) z_StringOrNumeric, &(*p)->list, &(*p)->num_list, "list") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) odr_integer, &(*p)->semanticAction, &(*p)->num_semanticAction, "semanticAction") || odr_ok(o)) && odr_sequence_end(o); } int z_AttributeElement(ODR o, Z_AttributeElement **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 121, Z_AttributeValue_numeric, (Odr_fun) odr_integer, "numeric"}, {ODR_IMPLICIT, ODR_CONTEXT, 224, Z_AttributeValue_complex, (Odr_fun) z_ComplexAttribute, "complex"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_AttributeSetId, &(*p)->attributeSet, ODR_CONTEXT, 1, 1, "attributeSet") && odr_implicit_tag(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 120, 0, "attributeType") && odr_choice(o, arm, &(*p)->value, &(*p)->which, 0) && odr_sequence_end(o); } int z_ProximityOperator(ODR o, Z_ProximityOperator **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ProximityOperator_known, (Odr_fun) z_ProxUnit, "known"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ProximityOperator_private, (Odr_fun) odr_integer, "zprivate"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_bool, &(*p)->exclusion, ODR_CONTEXT, 1, 1, "exclusion") && odr_implicit_tag(o, odr_integer, &(*p)->distance, ODR_CONTEXT, 2, 0, "distance") && odr_implicit_tag(o, odr_bool, &(*p)->ordered, ODR_CONTEXT, 3, 0, "ordered") && odr_implicit_tag(o, odr_integer, &(*p)->relationType, ODR_CONTEXT, 4, 0, "relationType") && odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 5, "proximityUnitCode") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_sequence_end(o); } int z_ProxUnit(ODR o, Z_ProxUnit **p, int opt, const char *name) { return odr_integer (o, p, opt, name); } int z_SearchResponse(ODR o, Z_SearchResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->resultCount, ODR_CONTEXT, 23, 0, "resultCount") && odr_implicit_tag(o, odr_integer, &(*p)->numberOfRecordsReturned, ODR_CONTEXT, 24, 0, "numberOfRecordsReturned") && odr_implicit_tag(o, odr_integer, &(*p)->nextResultSetPosition, ODR_CONTEXT, 25, 0, "nextResultSetPosition") && odr_implicit_tag(o, odr_bool, &(*p)->searchStatus, ODR_CONTEXT, 22, 0, "searchStatus") && odr_implicit_tag(o, odr_integer, &(*p)->resultSetStatus, ODR_CONTEXT, 26, 1, "resultSetStatus") && z_PresentStatus(o, &(*p)->presentStatus, 1, "presentStatus") && z_Records(o, &(*p)->records, 1, "records") && odr_implicit_tag(o, z_OtherInformation, &(*p)->additionalSearchInfo, ODR_CONTEXT, 203, 1, "additionalSearchInfo") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_RecordComposition(ODR o, Z_RecordComposition **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 19, Z_RecordComp_simple, (Odr_fun) z_ElementSetNames, "simple"}, {ODR_IMPLICIT, ODR_CONTEXT, 209, Z_RecordComp_complex, (Odr_fun) z_CompSpec, "complex"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PresentRequest(ODR o, Z_PresentRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && z_ResultSetId(o, &(*p)->resultSetId, 0, "resultSetId") && odr_implicit_tag(o, odr_integer, &(*p)->resultSetStartPoint, ODR_CONTEXT, 30, 0, "resultSetStartPoint") && odr_implicit_tag(o, odr_integer, &(*p)->numberOfRecordsRequested, ODR_CONTEXT, 29, 0, "numberOfRecordsRequested") && odr_implicit_settag(o, ODR_CONTEXT, 212) && (odr_sequence_of(o, (Odr_fun) z_Range, &(*p)->additionalRanges, &(*p)->num_ranges, "additionalRanges") || odr_ok(o)) && z_RecordComposition(o, &(*p)->recordComposition, 1, "recordComposition") && odr_implicit_tag(o, odr_oid, &(*p)->preferredRecordSyntax, ODR_CONTEXT, 104, 1, "preferredRecordSyntax") && odr_implicit_tag(o, odr_integer, &(*p)->maxSegmentCount, ODR_CONTEXT, 204, 1, "maxSegmentCount") && odr_implicit_tag(o, odr_integer, &(*p)->maxRecordSize, ODR_CONTEXT, 206, 1, "maxRecordSize") && odr_implicit_tag(o, odr_integer, &(*p)->maxSegmentSize, ODR_CONTEXT, 207, 1, "maxSegmentSize") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_Segment(ODR o, Z_Segment **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->numberOfRecordsReturned, ODR_CONTEXT, 24, 0, "numberOfRecordsReturned") && odr_implicit_settag(o, ODR_CONTEXT, 0) && odr_sequence_of(o, (Odr_fun) z_NamePlusRecord, &(*p)->segmentRecords, &(*p)->num_segmentRecords, "segmentRecords") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_PresentResponse(ODR o, Z_PresentResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->numberOfRecordsReturned, ODR_CONTEXT, 24, 0, "numberOfRecordsReturned") && odr_implicit_tag(o, odr_integer, &(*p)->nextResultSetPosition, ODR_CONTEXT, 25, 0, "nextResultSetPosition") && z_PresentStatus(o, &(*p)->presentStatus, 0, "presentStatus") && z_Records(o, &(*p)->records, 1, "records") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_NamePlusRecordList(ODR o, Z_NamePlusRecordList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_NamePlusRecord, &(*p)->records, &(*p)->num_records, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_DiagRecs(ODR o, Z_DiagRecs **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->diagRecs, &(*p)->num_diagRecs, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Records(ODR o, Z_Records **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 28, Z_Records_DBOSD, (Odr_fun) z_NamePlusRecordList, "databaseOrSurDiagnostics"}, {ODR_IMPLICIT, ODR_CONTEXT, 130, Z_Records_NSD, (Odr_fun) z_DefaultDiagFormat, "nonSurrogateDiagnostic"}, {ODR_IMPLICIT, ODR_CONTEXT, 205, Z_Records_multipleNSD, (Odr_fun) z_DiagRecs, "multipleNonSurDiagnostics"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_NamePlusRecord(ODR o, Z_NamePlusRecord **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_NamePlusRecord_databaseRecord, (Odr_fun) z_External, "databaseRecord"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_NamePlusRecord_surrogateDiagnostic, (Odr_fun) z_DiagRec, "surrogateDiagnostic"}, {ODR_EXPLICIT, ODR_CONTEXT, 3, Z_NamePlusRecord_startingFragment, (Odr_fun) z_FragmentSyntax, "startingFragment"}, {ODR_EXPLICIT, ODR_CONTEXT, 4, Z_NamePlusRecord_intermediateFragment, (Odr_fun) z_FragmentSyntax, "intermediateFragment"}, {ODR_EXPLICIT, ODR_CONTEXT, 5, Z_NamePlusRecord_finalFragment, (Odr_fun) z_FragmentSyntax, "finalFragment"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 0, 1, "databaseName") && odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "record") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_sequence_end(o); } int z_FragmentSyntax(ODR o, Z_FragmentSyntax **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, Z_FragmentSyntax_externallyTagged, (Odr_fun) z_External, "externallyTagged"}, {-1, -1, -1, Z_FragmentSyntax_notExternallyTagged, (Odr_fun) odr_octetstring, "notExternallyTagged"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_DiagRec(ODR o, Z_DiagRec **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, Z_DiagRec_defaultFormat, (Odr_fun) z_DefaultDiagFormat, "defaultFormat"}, {-1, -1, -1, Z_DiagRec_externallyDefined, (Odr_fun) z_External, "externallyDefined"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, Z_DefaultDiagFormat_v2Addinfo, (Odr_fun) odr_visiblestring, "v2Addinfo"}, {-1, -1, -1, Z_DefaultDiagFormat_v3Addinfo, (Odr_fun) z_InternationalString, "v3Addinfo"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_oid(o, &(*p)->diagnosticSetId, 0, "diagnosticSetId") && odr_integer(o, &(*p)->condition, 0, "condition") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_sequence_end(o); } int z_Range(ODR o, Z_Range **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->startingPosition, ODR_CONTEXT, 1, 0, "startingPosition") && odr_implicit_tag(o, odr_integer, &(*p)->numberOfRecords, ODR_CONTEXT, 2, 0, "numberOfRecords") && odr_sequence_end(o); } int z_DatabaseSpecificUnit(ODR o, Z_DatabaseSpecificUnit **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_DatabaseName(o, &(*p)->dbName, 0, "dbName") && z_ElementSetName(o, &(*p)->esn, 0, "esn") && odr_sequence_end(o); } int z_DatabaseSpecific(ODR o, Z_DatabaseSpecific **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_DatabaseSpecificUnit, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ElementSetNames(ODR o, Z_ElementSetNames **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ElementSetNames_generic, (Odr_fun) z_InternationalString, "generic"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementSetNames_databaseSpecific, (Odr_fun) z_DatabaseSpecific, "databaseSpecific"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PresentStatus(ODR o, Z_PresentStatus **p, int opt, const char *name) { return odr_implicit_tag(o, odr_integer, p, ODR_CONTEXT, 27, opt, name); } int z_DbSpecific(ODR o, Z_DbSpecific **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 1, 0, "db") && odr_implicit_tag(o, z_Specification, &(*p)->spec, ODR_CONTEXT, 2, 0, "spec") && odr_sequence_end(o); } int z_CompSpec(ODR o, Z_CompSpec **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_bool, &(*p)->selectAlternativeSyntax, ODR_CONTEXT, 1, 0, "selectAlternativeSyntax") && odr_implicit_tag(o, z_Specification, &(*p)->generic, ODR_CONTEXT, 2, 1, "generic") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_DbSpecific, &(*p)->dbSpecific, &(*p)->num_dbSpecific, "dbSpecific") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 4) && (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->recordSyntax, &(*p)->num_recordSyntax, "recordSyntax") || odr_ok(o)) && odr_sequence_end(o); } int z_ElementSpec(ODR o, Z_ElementSpec **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementSpec_elementSetName, (Odr_fun) z_InternationalString, "elementSetName"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ElementSpec_externalSpec, (Odr_fun) z_External, "externalSpec"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Specification(ODR o, Z_Specification **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Schema_oid, (Odr_fun) odr_oid, "oid"}, {ODR_IMPLICIT, ODR_CONTEXT, 300, Z_Schema_uri, (Odr_fun) z_InternationalString, "uri"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return (odr_choice(o, arm, &(*p)->schema, &(*p)->which, 0) || odr_ok(o)) && odr_explicit_tag(o, z_ElementSpec, &(*p)->elementSpec, ODR_CONTEXT, 2, 1, "elementSpec") && odr_sequence_end(o); } int z_DeleteResultSetRequest(ODR o, Z_DeleteResultSetRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->deleteFunction, ODR_CONTEXT, 32, 0, "deleteFunction") && (odr_sequence_of(o, (Odr_fun) z_ResultSetId, &(*p)->resultSetList, &(*p)->num_resultSetList, "resultSetList") || odr_ok(o)) && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_DeleteResultSetResponse(ODR o, Z_DeleteResultSetResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, z_DeleteStatus, &(*p)->deleteOperationStatus, ODR_CONTEXT, 0, 0, "deleteOperationStatus") && odr_implicit_tag(o, z_ListStatuses, &(*p)->deleteListStatuses, ODR_CONTEXT, 1, 1, "deleteListStatuses") && odr_implicit_tag(o, odr_integer, &(*p)->numberNotDeleted, ODR_CONTEXT, 34, 1, "numberNotDeleted") && odr_implicit_tag(o, z_ListStatuses, &(*p)->bulkStatuses, ODR_CONTEXT, 35, 1, "bulkStatuses") && odr_implicit_tag(o, z_InternationalString, &(*p)->deleteMessage, ODR_CONTEXT, 36, 1, "deleteMessage") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ListStatus(ODR o, Z_ListStatus **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ResultSetId(o, &(*p)->id, 0, "id") && z_DeleteStatus(o, &(*p)->status, 0, "status") && odr_sequence_end(o); } int z_ListStatuses(ODR o, Z_ListStatuses **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_ListStatus, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_DeleteStatus(ODR o, Z_DeleteStatus **p, int opt, const char *name) { return odr_implicit_tag(o, odr_integer, p, ODR_CONTEXT, 33, opt, name); } int z_AccessControlRequest(ODR o, Z_AccessControlRequest **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 37, Z_AccessControlRequest_simpleForm, (Odr_fun) odr_octetstring, "simpleForm"}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_AccessControlRequest_externallyDefined, (Odr_fun) z_External, "externallyDefined"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_AccessControlResponse(ODR o, Z_AccessControlResponse **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 38, Z_AccessControlResponse_simpleForm, (Odr_fun) odr_octetstring, "simpleForm"}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_AccessControlResponse_externallyDefined, (Odr_fun) z_External, "externallyDefined"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) || odr_ok(o)) && odr_explicit_tag(o, z_DiagRec, &(*p)->diagnostic, ODR_CONTEXT, 223, 1, "diagnostic") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ResourceControlRequest(ODR o, Z_ResourceControlRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_bool, &(*p)->suspendedFlag, ODR_CONTEXT, 39, 1, "suspendedFlag") && odr_explicit_tag(o, z_ResourceReport, &(*p)->resourceReport, ODR_CONTEXT, 40, 1, "resourceReport") && odr_implicit_tag(o, odr_integer, &(*p)->partialResultsAvailable, ODR_CONTEXT, 41, 1, "partialResultsAvailable") && odr_implicit_tag(o, odr_bool, &(*p)->responseRequired, ODR_CONTEXT, 42, 0, "responseRequired") && odr_implicit_tag(o, odr_bool, &(*p)->triggeredRequestFlag, ODR_CONTEXT, 43, 1, "triggeredRequestFlag") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ResourceControlResponse(ODR o, Z_ResourceControlResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_bool, &(*p)->continueFlag, ODR_CONTEXT, 44, 0, "continueFlag") && odr_implicit_tag(o, odr_bool, &(*p)->resultSetWanted, ODR_CONTEXT, 45, 1, "resultSetWanted") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_TriggerResourceControlRequest(ODR o, Z_TriggerResourceControlRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->requestedAction, ODR_CONTEXT, 46, 0, "requestedAction") && odr_implicit_tag(o, z_ResourceReportId, &(*p)->prefResourceReportFormat, ODR_CONTEXT, 47, 1, "prefResourceReportFormat") && odr_implicit_tag(o, odr_bool, &(*p)->resultSetWanted, ODR_CONTEXT, 48, 1, "resultSetWanted") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ResourceReportRequest(ODR o, Z_ResourceReportRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, z_ReferenceId, &(*p)->opId, ODR_CONTEXT, 210, 1, "opId") && odr_implicit_tag(o, z_ResourceReportId, &(*p)->prefResourceReportFormat, ODR_CONTEXT, 49, 1, "prefResourceReportFormat") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ResourceReportResponse(ODR o, Z_ResourceReportResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->resourceReportStatus, ODR_CONTEXT, 50, 0, "resourceReportStatus") && odr_explicit_tag(o, z_ResourceReport, &(*p)->resourceReport, ODR_CONTEXT, 51, 1, "resourceReport") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ResourceReport(ODR o, Z_ResourceReport **p, int opt, const char *name) { return z_External (o, p, opt, name); } int z_ResourceReportId(ODR o, Z_ResourceReportId **p, int opt, const char *name) { return odr_oid (o, p, opt, name); } int z_ScanRequest(ODR o, Z_ScanRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_settag(o, ODR_CONTEXT, 3) && odr_sequence_of(o, (Odr_fun) z_DatabaseName, &(*p)->databaseNames, &(*p)->num_databaseNames, "databaseNames") && z_AttributeSetId(o, &(*p)->attributeSet, 1, "attributeSet") && z_AttributesPlusTerm(o, &(*p)->termListAndStartPoint, 0, "termListAndStartPoint") && odr_implicit_tag(o, odr_integer, &(*p)->stepSize, ODR_CONTEXT, 5, 1, "stepSize") && odr_implicit_tag(o, odr_integer, &(*p)->numberOfTermsRequested, ODR_CONTEXT, 6, 0, "numberOfTermsRequested") && odr_implicit_tag(o, odr_integer, &(*p)->preferredPositionInResponse, ODR_CONTEXT, 7, 1, "preferredPositionInResponse") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ScanResponse(ODR o, Z_ScanResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->stepSize, ODR_CONTEXT, 3, 1, "stepSize") && odr_implicit_tag(o, odr_integer, &(*p)->scanStatus, ODR_CONTEXT, 4, 0, "scanStatus") && odr_implicit_tag(o, odr_integer, &(*p)->numberOfEntriesReturned, ODR_CONTEXT, 5, 0, "numberOfEntriesReturned") && odr_implicit_tag(o, odr_integer, &(*p)->positionOfTerm, ODR_CONTEXT, 6, 1, "positionOfTerm") && odr_implicit_tag(o, z_ListEntries, &(*p)->entries, ODR_CONTEXT, 7, 1, "entries") && odr_implicit_tag(o, z_AttributeSetId, &(*p)->attributeSet, ODR_CONTEXT, 8, 1, "attributeSet") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ListEntries(ODR o, Z_ListEntries **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) z_Entry, &(*p)->entries, &(*p)->num_entries, "entries") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->nonsurrogateDiagnostics, &(*p)->num_nonsurrogateDiagnostics, "nonsurrogateDiagnostics") || odr_ok(o)) && odr_sequence_end(o); } int z_Entry(ODR o, Z_Entry **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Entry_termInfo, (Odr_fun) z_TermInfo, "termInfo"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Entry_surrogateDiagnostic, (Odr_fun) z_DiagRec, "surrogateDiagnostic"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_TermInfo(ODR o, Z_TermInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_Term(o, &(*p)->term, 0, "term") && odr_implicit_tag(o, z_InternationalString, &(*p)->displayTerm, ODR_CONTEXT, 0, 1, "displayTerm") && z_AttributeList(o, &(*p)->suggestedAttributes, 1, "suggestedAttributes") && odr_implicit_settag(o, ODR_CONTEXT, 4) && (odr_sequence_of(o, (Odr_fun) z_AttributesPlusTerm, &(*p)->alternativeTerm, &(*p)->num_alternativeTerm, "alternativeTerm") || odr_ok(o)) && odr_implicit_tag(o, odr_integer, &(*p)->globalOccurrences, ODR_CONTEXT, 2, 1, "globalOccurrences") && odr_implicit_tag(o, z_OccurrenceByAttributes, &(*p)->byAttributes, ODR_CONTEXT, 3, 1, "byAttributes") && z_OtherInformation(o, &(*p)->otherTermInfo, 1, "otherTermInfo") && odr_sequence_end(o); } int z_byDatabaseList_s(ODR o, Z_byDatabaseList_s **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_DatabaseName(o, &(*p)->db, 0, "db") && odr_implicit_tag(o, odr_integer, &(*p)->num, ODR_CONTEXT, 1, 1, "num") && z_OtherInformation(o, &(*p)->otherDbInfo, 1, "otherDbInfo") && odr_sequence_end(o); } int z_byDatabaseList(ODR o, Z_byDatabaseList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_byDatabaseList_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_OccurrenceByAttributesElem(ODR o, Z_OccurrenceByAttributesElem **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_OccurrenceByAttributesElem_global, (Odr_fun) odr_integer, "global"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_OccurrenceByAttributesElem_byDatabase, (Odr_fun) z_byDatabaseList, "byDatabase"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_AttributeList, &(*p)->attributes, ODR_CONTEXT, 1, 0, "attributes") && (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) || odr_ok(o)) && z_OtherInformation(o, &(*p)->otherOccurInfo, 1, "otherOccurInfo") && odr_sequence_end(o); } int z_OccurrenceByAttributes(ODR o, Z_OccurrenceByAttributes **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_OccurrenceByAttributesElem, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_SortKeySpecList(ODR o, Z_SortKeySpecList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_SortKeySpec, &(*p)->specs, &(*p)->num_specs, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_SortRequest(ODR o, Z_SortRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_settag(o, ODR_CONTEXT, 3) && odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->inputResultSetNames, &(*p)->num_inputResultSetNames, "inputResultSetNames") && odr_implicit_tag(o, z_InternationalString, &(*p)->sortedResultSetName, ODR_CONTEXT, 4, 0, "sortedResultSetName") && odr_implicit_tag(o, z_SortKeySpecList, &(*p)->sortSequence, ODR_CONTEXT, 5, 0, "sortSequence") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_SortResponse(ODR o, Z_SortResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->sortStatus, ODR_CONTEXT, 3, 0, "sortStatus") && odr_implicit_tag(o, odr_integer, &(*p)->resultSetStatus, ODR_CONTEXT, 4, 1, "resultSetStatus") && odr_implicit_settag(o, ODR_CONTEXT, 5) && (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->diagnostics, &(*p)->num_diagnostics, "diagnostics") || odr_ok(o)) && odr_implicit_tag(o, odr_integer, &(*p)->resultCount, ODR_CONTEXT, 6, 1, "resultCount") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_SortKeySpec(ODR o, Z_SortKeySpec **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortKeySpec_abort, (Odr_fun) odr_null, "abort"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortKeySpec_null, (Odr_fun) odr_null, "null"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortKeySpec_missingValueData, (Odr_fun) odr_octetstring, "missingValueData"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_SortElement(o, &(*p)->sortElement, 0, "sortElement") && odr_implicit_tag(o, odr_integer, &(*p)->sortRelation, ODR_CONTEXT, 1, 0, "sortRelation") && odr_implicit_tag(o, odr_integer, &(*p)->caseSensitivity, ODR_CONTEXT, 2, 0, "caseSensitivity") && ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 3, "missingValueAction") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_sequence_end(o); } int z_SortDbSpecificList_s(ODR o, Z_SortDbSpecificList_s **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_DatabaseName(o, &(*p)->databaseName, 0, "databaseName") && z_SortKey(o, &(*p)->dbSort, 0, "dbSort") && odr_sequence_end(o); } int z_SortDbSpecificList(ODR o, Z_SortDbSpecificList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_SortDbSpecificList_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_SortElement(ODR o, Z_SortElement **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_SortElement_generic, (Odr_fun) z_SortKey, "generic"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortElement_databaseSpecific, (Odr_fun) z_SortDbSpecificList, "databaseSpecific"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_SortAttributes(ODR o, Z_SortAttributes **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_AttributeSetId(o, &(*p)->id, 0, "id") && z_AttributeList(o, &(*p)->list, 0, "list") && odr_sequence_end(o); } int z_SortKey(ODR o, Z_SortKey **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortKey_sortField, (Odr_fun) z_InternationalString, "sortField"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortKey_elementSpec, (Odr_fun) z_Specification, "elementSpec"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortKey_sortAttributes, (Odr_fun) z_SortAttributes, "sortAttributes"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ExtendedServicesRequest(ODR o, Z_ExtendedServicesRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->function, ODR_CONTEXT, 3, 0, "function") && odr_implicit_tag(o, odr_oid, &(*p)->packageType, ODR_CONTEXT, 4, 0, "packageType") && odr_implicit_tag(o, z_InternationalString, &(*p)->packageName, ODR_CONTEXT, 5, 1, "packageName") && odr_implicit_tag(o, z_InternationalString, &(*p)->userId, ODR_CONTEXT, 6, 1, "userId") && odr_implicit_tag(o, z_IntUnit, &(*p)->retentionTime, ODR_CONTEXT, 7, 1, "retentionTime") && odr_implicit_tag(o, z_Permissions, &(*p)->permissions, ODR_CONTEXT, 8, 1, "permissions") && odr_implicit_tag(o, z_InternationalString, &(*p)->description, ODR_CONTEXT, 9, 1, "description") && odr_implicit_tag(o, z_External, &(*p)->taskSpecificParameters, ODR_CONTEXT, 10, 1, "taskSpecificParameters") && odr_implicit_tag(o, odr_integer, &(*p)->waitAction, ODR_CONTEXT, 11, 0, "waitAction") && z_ElementSetName(o, &(*p)->elements, 1, "elements") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ExtendedServicesResponse(ODR o, Z_ExtendedServicesResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->operationStatus, ODR_CONTEXT, 3, 0, "operationStatus") && odr_implicit_settag(o, ODR_CONTEXT, 4) && (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->diagnostics, &(*p)->num_diagnostics, "diagnostics") || odr_ok(o)) && odr_implicit_tag(o, z_External, &(*p)->taskPackage, ODR_CONTEXT, 5, 1, "taskPackage") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_Permissions_s(ODR o, Z_Permissions_s **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->userId, ODR_CONTEXT, 1, 1, "userId") && odr_implicit_settag(o, ODR_CONTEXT, 2) && odr_sequence_of(o, (Odr_fun) odr_integer, &(*p)->allowableFunctions, &(*p)->num_allowableFunctions, "allowableFunctions") && odr_sequence_end(o); } int z_Permissions(ODR o, Z_Permissions **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_Permissions_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Close(ODR o, Z_Close **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && z_CloseReason(o, &(*p)->closeReason, 0, "closeReason") && odr_implicit_tag(o, z_InternationalString, &(*p)->diagnosticInformation, ODR_CONTEXT, 3, 1, "diagnosticInformation") && odr_implicit_tag(o, z_ResourceReportId, &(*p)->resourceReportFormat, ODR_CONTEXT, 4, 1, "resourceReportFormat") && odr_explicit_tag(o, z_ResourceReport, &(*p)->resourceReport, ODR_CONTEXT, 5, 1, "resourceReport") && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_CloseReason(ODR o, Z_CloseReason **p, int opt, const char *name) { return odr_implicit_tag(o, odr_integer, p, ODR_CONTEXT, 211, opt, name); } int z_DuplicateDetectionRequest(ODR o, Z_DuplicateDetectionRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_settag(o, ODR_CONTEXT, 3) && odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->inputResultSetIds, &(*p)->num_inputResultSetIds, "inputResultSetIds") && odr_implicit_tag(o, z_InternationalString, &(*p)->outputResultSetName, ODR_CONTEXT, 4, 0, "outputResultSetName") && odr_implicit_tag(o, z_External, &(*p)->applicablePortionOfRecord, ODR_CONTEXT, 5, 1, "applicablePortionOfRecord") && odr_implicit_settag(o, ODR_CONTEXT, 6) && (odr_sequence_of(o, (Odr_fun) z_DuplicateDetectionCriterion, &(*p)->duplicateDetectionCriteria, &(*p)->num_duplicateDetectionCriteria, "duplicateDetectionCriteria") || odr_ok(o)) && odr_implicit_tag(o, odr_bool, &(*p)->clustering, ODR_CONTEXT, 7, 1, "clustering") && odr_implicit_settag(o, ODR_CONTEXT, 8) && odr_sequence_of(o, (Odr_fun) z_RetentionCriterion, &(*p)->retentionCriteria, &(*p)->num_retentionCriteria, "retentionCriteria") && odr_implicit_settag(o, ODR_CONTEXT, 9) && (odr_sequence_of(o, (Odr_fun) z_SortCriterion, &(*p)->sortCriteria, &(*p)->num_sortCriteria, "sortCriteria") || odr_ok(o)) && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_DuplicateDetectionCriterion(ODR o, Z_DuplicateDetectionCriterion **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DuplicateDetectionCriterion_levelOfMatch, (Odr_fun) odr_integer, "levelOfMatch"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_DuplicateDetectionCriterion_caseSensitive, (Odr_fun) odr_null, "caseSensitive"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_DuplicateDetectionCriterion_punctuationSensitive, (Odr_fun) odr_null, "punctuationSensitive"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_DuplicateDetectionCriterion_regularExpression, (Odr_fun) z_External, "regularExpression"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_DuplicateDetectionCriterion_rsDuplicates, (Odr_fun) odr_null, "rsDuplicates"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_RetentionCriterion(ODR o, Z_RetentionCriterion **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_RetentionCriterion_numberOfEntries, (Odr_fun) odr_integer, "numberOfEntries"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_RetentionCriterion_percentOfEntries, (Odr_fun) odr_integer, "percentOfEntries"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_RetentionCriterion_duplicatesOnly, (Odr_fun) odr_null, "duplicatesOnly"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_RetentionCriterion_discardRsDuplicates, (Odr_fun) odr_null, "discardRsDuplicates"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_SortCriterionPreferredDatabases(ODR o, Z_SortCriterionPreferredDatabases **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_SortCriterion(ODR o, Z_SortCriterion **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortCriterion_mostComprehensive, (Odr_fun) odr_null, "mostComprehensive"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortCriterion_leastConmprehensive, (Odr_fun) odr_null, "leastConmprehensive"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortCriterion_mostRecent, (Odr_fun) odr_null, "mostRecent"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_SortCriterion_oldest, (Odr_fun) odr_null, "oldest"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_SortCriterion_leastCost, (Odr_fun) odr_null, "leastCost"}, {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_SortCriterion_preferredDatabases, (Odr_fun) z_SortCriterionPreferredDatabases, "preferredDatabases"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_DuplicateDetectionResponse(ODR o, Z_DuplicateDetectionResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_ReferenceId(o, &(*p)->referenceId, 1, "referenceId") && odr_implicit_tag(o, odr_integer, &(*p)->status, ODR_CONTEXT, 3, 0, "status") && odr_implicit_tag(o, odr_integer, &(*p)->resultSetCount, ODR_CONTEXT, 4, 1, "resultSetCount") && odr_implicit_settag(o, ODR_CONTEXT, 5) && (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->diagnostics, &(*p)->num_diagnostics, "diagnostics") || odr_ok(o)) && z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") && odr_sequence_end(o); } int z_ReferenceId(ODR o, Z_ReferenceId **p, int opt, const char *name) { return odr_implicit_tag(o, odr_octetstring, p, ODR_CONTEXT, 2, opt, name); } int z_ResultSetId(ODR o, Z_ResultSetId **p, int opt, const char *name) { return odr_implicit_tag(o, z_InternationalString, p, ODR_CONTEXT, 31, opt, name); } int z_ElementSetName(ODR o, Z_ElementSetName **p, int opt, const char *name) { return odr_implicit_tag(o, z_InternationalString, p, ODR_CONTEXT, 103, opt, name); } int z_DatabaseName(ODR o, Z_DatabaseName **p, int opt, const char *name) { return odr_implicit_tag(o, z_InternationalString, p, ODR_CONTEXT, 105, opt, name); } int z_AttributeSetId(ODR o, Z_AttributeSetId **p, int opt, const char *name) { return odr_oid (o, p, opt, name); } int z_OtherInformationUnit(ODR o, Z_OtherInformationUnit **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_OtherInfo_characterInfo, (Odr_fun) z_InternationalString, "characterInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_OtherInfo_binaryInfo, (Odr_fun) odr_octetstring, "binaryInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_OtherInfo_externallyDefinedInfo, (Odr_fun) z_External, "externallyDefinedInfo"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_OtherInfo_oid, (Odr_fun) odr_oid, "oid"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InfoCategory, &(*p)->category, ODR_CONTEXT, 1, 1, "category") && odr_choice(o, arm, &(*p)->information, &(*p)->which, 0) && odr_sequence_end(o); } int z_OtherInformation(ODR o, Z_OtherInformation **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); odr_implicit_settag(o, ODR_CONTEXT, 201); if (odr_sequence_of(o, (Odr_fun) z_OtherInformationUnit, &(*p)->list, &(*p)->num_elements, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_InfoCategory(ODR o, Z_InfoCategory **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->categoryTypeId, ODR_CONTEXT, 1, 1, "categoryTypeId") && odr_implicit_tag(o, odr_integer, &(*p)->categoryValue, ODR_CONTEXT, 2, 0, "categoryValue") && odr_sequence_end(o); } int z_IntUnit(ODR o, Z_IntUnit **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->value, ODR_CONTEXT, 1, 0, "value") && odr_implicit_tag(o, z_Unit, &(*p)->unitUsed, ODR_CONTEXT, 2, 0, "unitUsed") && odr_sequence_end(o); } int z_Unit(ODR o, Z_Unit **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_InternationalString, &(*p)->unitSystem, ODR_CONTEXT, 1, 1, "unitSystem") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->unitType, ODR_CONTEXT, 2, 1, "unitType") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->unit, ODR_CONTEXT, 3, 1, "unit") && odr_implicit_tag(o, odr_integer, &(*p)->scaleFactor, ODR_CONTEXT, 4, 1, "scaleFactor") && odr_sequence_end(o); } int z_InternationalString(ODR o, Z_InternationalString **p, int opt, const char *name) { return odr_generalstring (o, p, opt, name); } int z_StringOrNumeric(ODR o, Z_StringOrNumeric **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_StringOrNumeric_string, (Odr_fun) z_InternationalString, "string"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_StringOrNumeric_numeric, (Odr_fun) odr_integer, "numeric"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } /* the type-0 query ... */ int z_ANY_type_0 (ODR o, void **p, int opt) { return 0; } yaz-5.28.0/src/zes-pset.c0000644000175000017500000000507213273126163012047 00000000000000/** \file zes-pset.c \brief ASN.1 Module ESFormat-PersistentResultSet Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_PRPersistentResultSetEsRequest(ODR o, Z_PRPersistentResultSetEsRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_null, &(*p)->toKeep, ODR_CONTEXT, 1, 0, "toKeep") && odr_explicit_tag(o, z_PROriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT, 2, 1, "notToKeep") && odr_sequence_end(o); } int z_PRPersistentResultSetTaskPackage(ODR o, Z_PRPersistentResultSetTaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_null, &(*p)->originPart, ODR_CONTEXT, 1, 0, "originPart") && odr_explicit_tag(o, z_PRTargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 1, "targetPart") && odr_sequence_end(o); } int z_PRPersistentResultSet(ODR o, Z_PRPersistentResultSet **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PRPersistentResultSet_esRequest, (Odr_fun) z_PRPersistentResultSetEsRequest, "esRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PRPersistentResultSet_taskPackage, (Odr_fun) z_PRPersistentResultSetTaskPackage, "taskPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PROriginPartNotToKeep(ODR o, Z_PROriginPartNotToKeep **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->originSuppliedResultSet, ODR_CONTEXT, 1, 1, "originSuppliedResultSet") && odr_implicit_tag(o, odr_integer, &(*p)->replaceOrAppend, ODR_CONTEXT, 2, 1, "replaceOrAppend") && odr_sequence_end(o); } int z_PRTargetPart(ODR o, Z_PRTargetPart **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->targetSuppliedResultSet, ODR_CONTEXT, 1, 1, "targetSuppliedResultSet") && odr_implicit_tag(o, odr_integer, &(*p)->numberOfRecords, ODR_CONTEXT, 2, 1, "numberOfRecords") && odr_sequence_end(o); } yaz-5.28.0/src/wrbuf_sha1.c0000644000175000017500000001540213265142510012327 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file wrbuf_sha1.c * \brief Implements SHA1 creation over WRBUF */ #if HAVE_CONFIG_H #include #endif #include #include #include #include /* SHA-1 in C By Steve Reid 100% Public Domain */ /* #define SHA1HANDSOFF * Copies data before messing with it. */ #define SHA1HANDSOFF /* VS 2010 and later have stdint.h */ #if defined(_MSC_VER) && _MSC_VER < 1600 typedef unsigned int uint32_t; #else #include #endif typedef struct { uint32_t state[5]; uint32_t count[2]; unsigned char buffer[64]; } SHA1_CTX; #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) /* blk0() and blk() perform the initial expand. */ /* I got the idea of expanding during the round function from SSLeay */ #if WORDS_BIGENDIAN #define blk0(i) block->l[i] #else #define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ |(rol(block->l[i],8)&0x00FF00FF)) #endif #define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ ^block->l[(i+2)&15]^block->l[i&15],1)) /* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ #define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); #define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); #define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); #define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); #define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); /* Hash a single 512-bit block. This is the core of the algorithm. */ static void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]) { uint32_t a, b, c, d, e; typedef union { unsigned char c[64]; uint32_t l[16]; } CHAR64LONG16; #ifdef SHA1HANDSOFF CHAR64LONG16 block[1]; /* use array to appear as a pointer */ memcpy(block, buffer, 64); #else /* The following had better never be used because it causes the * pointer-to-const buffer to be cast into a pointer to non-const. * And the result is written through. I threw a "const" in, hoping * this will cause a diagnostic. */ CHAR64LONG16* block = (const CHAR64LONG16*)buffer; #endif /* Copy context->state[] to working vars */ a = state[0]; b = state[1]; c = state[2]; d = state[3]; e = state[4]; /* 4 rounds of 20 operations each. Loop unrolled. */ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); /* Add the working vars back into context.state[] */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e; /* Wipe variables */ a = b = c = d = e = 0; #ifdef SHA1HANDSOFF memset(block, '\0', sizeof(block)); #endif } /* SHA1Init - Initialize new context */ static void SHA1Init(SHA1_CTX* context) { /* SHA1 initialization constants */ context->state[0] = 0x67452301; context->state[1] = 0xEFCDAB89; context->state[2] = 0x98BADCFE; context->state[3] = 0x10325476; context->state[4] = 0xC3D2E1F0; context->count[0] = context->count[1] = 0; } /* Run your data through this. */ static void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len) { uint32_t i; uint32_t j; j = context->count[0]; if ((context->count[0] += len << 3) < j) context->count[1]++; context->count[1] += (len>>29); j = (j >> 3) & 63; if ((j + len) > 63) { memcpy(&context->buffer[j], data, (i = 64-j)); SHA1Transform(context->state, context->buffer); for ( ; i + 63 < len; i += 64) { SHA1Transform(context->state, &data[i]); } j = 0; } else i = 0; memcpy(&context->buffer[j], &data[i], len - i); } /* Add padding and return the message digest. */ static void SHA1Final(unsigned char digest[20], SHA1_CTX* context) { unsigned i; unsigned char finalcount[8]; unsigned char c; for (i = 0; i < 8; i++) { finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ } c = 0200; SHA1Update(context, &c, 1); while ((context->count[0] & 504) != 448) { c = 0000; SHA1Update(context, &c, 1); } SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ for (i = 0; i < 20; i++) { digest[i] = (unsigned char) ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); } /* Wipe variables */ memset(context, '\0', sizeof(*context)); memset(&finalcount, '\0', sizeof(finalcount)); } int wrbuf_sha1_write(WRBUF b, const char *cp, size_t sz, int hexit) { unsigned char digest[20]; SHA1_CTX ctx; SHA1Init(&ctx); SHA1Update(&ctx, (unsigned char *) cp, sz); SHA1Final(digest, &ctx); if (hexit) { int i; for (i = 0; i < 20; i++) wrbuf_printf(b, "%02x", digest[i]); } else wrbuf_write(b, (const char *) digest, 20); return 0; } int wrbuf_sha1_puts(WRBUF b, const char *cp, int hexit) { return wrbuf_sha1_write(b, cp, strlen(cp), hexit); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/xmlerror.c0000644000175000017500000000263413265142510012143 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file \brief Log XML / XSLT Errors via yaz_log */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include #endif #if YAZ_HAVE_XSLT #include #endif static int xml_error_log_level = YLOG_WARN; #if YAZ_HAVE_XML2 static void xml_error_handler(void *ctx, const char *fmt, ...) { char buf[1024]; const char *prefix = (const char *) ctx; va_list ap; va_start(ap, fmt); yaz_vsnprintf(buf, sizeof(buf), fmt, ap); size_t l = strlen(buf); if (l > 0 && buf[l-1] == '\n') buf[l-1] = '\0'; yaz_log(xml_error_log_level, "%s: %s", prefix, buf); va_end (ap); } #endif void yaz_log_xml_errors(const char *prefix, int log_level) { xml_error_log_level = log_level; #if YAZ_HAVE_XML2 xmlSetGenericErrorFunc((void *) (prefix ? prefix : "XML"), xml_error_handler); #if YAZ_HAVE_XSLT xsltSetGenericErrorFunc((void *) (prefix ? prefix : "XSLT"), xml_error_handler); #endif #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/marc8.c0000644000175000017500000437512313273126167011326 00000000000000/** \file marc8.c \brief Character conversion, generated from ./codetables.xml Generated automatically by charconv.tcl */ #include #if HAVE_CONFIG_H #include #endif struct yaz_iconv_trie_flat { char from[6]; unsigned combining : 1; unsigned to : 24; }; struct yaz_iconv_trie_dir { int ptr : 15; unsigned combining : 1; unsigned to : 24; }; struct yaz_iconv_trie { struct yaz_iconv_trie_flat *flat; struct yaz_iconv_trie_dir *dir; }; static unsigned long lookup(struct yaz_iconv_trie **ptrs, int ptr, unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { struct yaz_iconv_trie *t = ptrs[ptr-1]; if (inbytesleft < 1) return 0; if (t->dir) { size_t ch = (inp[0] & mask) + boffset; unsigned long code; if (t->dir[ch].ptr) { code = lookup(ptrs, t->dir[ch].ptr, inp+1, inbytesleft-1, no_read, combining, mask, boffset); if (code) { (*no_read)++; return code; } } if (t->dir[ch].to) { code = t->dir[ch].to; *combining = t->dir[ch].combining; *no_read = 1; return code; } } else { struct yaz_iconv_trie_flat *flat = t->flat; while (flat->to) { size_t len = strlen(flat->from); if (len <= inbytesleft) { size_t i; for (i = 0; i < len; i++) { if (((unsigned char *) flat->from)[i] != (inp[i] & mask) + boffset) break; } if (i == len) { *no_read = len; *combining = flat->combining; return flat->to; } } flat++; } } return 0; } /* TRIE: size 99 */ /* PAGE 0 */ struct yaz_iconv_trie_dir marc8_42page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x001B} /* ESCAPE (Unlikely to occur in UCS/Unicode) */, {0, 0, 0}, {0, 0, 0x001D} /* RECORD TERMINATOR / GROUP SEPARATOR */, {0, 0, 0x001E} /* FIELD TERMINATOR / RECORD SEPARATOR */, {0, 0, 0x001F} /* SUBFIELD DELIMITER / UNIT SEPARATOR */, {0, 0, 0x0020} /* SPACE, BLANK / SPACE */, {0, 0, 0x0021} /* EXCLAMATION MARK */, {0, 0, 0x0022} /* QUOTATION MARK */, {0, 0, 0x0023} /* NUMBER SIGN */, {0, 0, 0x0024} /* DOLLAR SIGN */, {0, 0, 0x0025} /* PERCENT SIGN */, {0, 0, 0x0026} /* AMPERSAND */, {0, 0, 0x0027} /* APOSTROPHE */, {0, 0, 0x0028} /* OPENING PARENTHESIS / LEFT PARENTHESIS */, {0, 0, 0x0029} /* CLOSING PARENTHESIS / CLOSING PARENTHESIS */, {0, 0, 0x002A} /* ASTERISK */, {0, 0, 0x002B} /* PLUS SIGN */, {0, 0, 0x002C} /* COMMA */, {0, 0, 0x002D} /* HYPHEN-MINUS */, {0, 0, 0x002E} /* PERIOD, DECIMAL POINT / FULL STOP */, {0, 0, 0x002F} /* SLASH / SOLIDUS */, {0, 0, 0x0030} /* DIGIT ZERO */, {0, 0, 0x0031} /* DIGIT ONE */, {0, 0, 0x0032} /* DIGIT TWO */, {0, 0, 0x0033} /* DIGIT THREE */, {0, 0, 0x0034} /* DIGIT FOUR */, {0, 0, 0x0035} /* DIGIT FIVE */, {0, 0, 0x0036} /* DIGIT SIX */, {0, 0, 0x0037} /* DIGIT SEVEN */, {0, 0, 0x0038} /* DIGIT EIGHT */, {0, 0, 0x0039} /* DIGIT NINE */, {0, 0, 0x003A} /* COLON */, {0, 0, 0x003B} /* SEMICOLON */, {0, 0, 0x003C} /* LESS-THAN SIGN */, {0, 0, 0x003D} /* EQUALS SIGN */, {0, 0, 0x003E} /* GREATER-THAN SIGN */, {0, 0, 0x003F} /* QUESTION MARK */, {0, 0, 0x0040} /* COMMERCIAL AT */, {0, 0, 0x0041} /* LATIN CAPITAL LETTER A */, {0, 0, 0x0042} /* LATIN CAPITAL LETTER B */, {0, 0, 0x0043} /* LATIN CAPITAL LETTER C */, {0, 0, 0x0044} /* LATIN CAPITAL LETTER D */, {0, 0, 0x0045} /* LATIN CAPITAL LETTER E */, {0, 0, 0x0046} /* LATIN CAPITAL LETTER F */, {0, 0, 0x0047} /* LATIN CAPITAL LETTER G */, {0, 0, 0x0048} /* LATIN CAPITAL LETTER H */, {0, 0, 0x0049} /* LATIN CAPITAL LETTER I */, {0, 0, 0x004A} /* LATIN CAPITAL LETTER J */, {0, 0, 0x004B} /* LATIN CAPITAL LETTER K */, {0, 0, 0x004C} /* LATIN CAPITAL LETTER L */, {0, 0, 0x004D} /* LATIN CAPITAL LETTER M */, {0, 0, 0x004E} /* LATIN CAPITAL LETTER N */, {0, 0, 0x004F} /* LATIN CAPITAL LETTER O */, {0, 0, 0x0050} /* LATIN CAPITAL LETTER P */, {0, 0, 0x0051} /* LATIN CAPITAL LETTER Q */, {0, 0, 0x0052} /* LATIN CAPITAL LETTER R */, {0, 0, 0x0053} /* LATIN CAPITAL LETTER S */, {0, 0, 0x0054} /* LATIN CAPITAL LETTER T */, {0, 0, 0x0055} /* LATIN CAPITAL LETTER U */, {0, 0, 0x0056} /* LATIN CAPITAL LETTER V */, {0, 0, 0x0057} /* LATIN CAPITAL LETTER W */, {0, 0, 0x0058} /* LATIN CAPITAL LETTER X */, {0, 0, 0x0059} /* LATIN CAPITAL LETTER Y */, {0, 0, 0x005A} /* LATIN CAPITAL LETTER Z */, {0, 0, 0x005B} /* OPENING SQUARE BRACKET / LEFT SQUARE BRACKET */, {0, 0, 0x005C} /* REVERSE SLASH / REVERSE SOLIDUS */, {0, 0, 0x005D} /* CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET */, {0, 0, 0x005E} /* SPACING CIRCUMFLEX / CIRCUMFLEX ACCENT */, {0, 0, 0x005F} /* SPACING UNDERSCORE / LOW LINE */, {0, 0, 0x0060} /* SPACING GRAVE / GRAVE ACCENT */, {0, 0, 0x0061} /* LATIN SMALL LETTER A */, {0, 0, 0x0062} /* LATIN SMALL LETTER B */, {0, 0, 0x0063} /* LATIN SMALL LETTER C */, {0, 0, 0x0064} /* LATIN SMALL LETTER D */, {0, 0, 0x0065} /* LATIN SMALL LETTER E */, {0, 0, 0x0066} /* LATIN SMALL LETTER F */, {0, 0, 0x0067} /* LATIN SMALL LETTER G */, {0, 0, 0x0068} /* LATIN SMALL LETTER H */, {0, 0, 0x0069} /* LATIN SMALL LETTER I */, {0, 0, 0x006A} /* LATIN SMALL LETTER J */, {0, 0, 0x006B} /* LATIN SMALL LETTER K */, {0, 0, 0x006C} /* LATIN SMALL LETTER L */, {0, 0, 0x006D} /* LATIN SMALL LETTER M */, {0, 0, 0x006E} /* LATIN SMALL LETTER N */, {0, 0, 0x006F} /* LATIN SMALL LETTER O */, {0, 0, 0x0070} /* LATIN SMALL LETTER P */, {0, 0, 0x0071} /* LATIN SMALL LETTER Q */, {0, 0, 0x0072} /* LATIN SMALL LETTER R */, {0, 0, 0x0073} /* LATIN SMALL LETTER S */, {0, 0, 0x0074} /* LATIN SMALL LETTER T */, {0, 0, 0x0075} /* LATIN SMALL LETTER U */, {0, 0, 0x0076} /* LATIN SMALL LETTER V */, {0, 0, 0x0077} /* LATIN SMALL LETTER W */, {0, 0, 0x0078} /* LATIN SMALL LETTER X */, {0, 0, 0x0079} /* LATIN SMALL LETTER Y */, {0, 0, 0x007A} /* LATIN SMALL LETTER Z */, {0, 0, 0x007B} /* OPENING CURLY BRACKET / LEFT CURLY BRACKET */, {0, 0, 0x007C} /* VERTICAL BAR (FILL) / VERTICAL LINE */, {0, 0, 0x007D} /* CLOSING CURLY BRACKET / RIGHT CURLY BRACKET */, {0, 0, 0x007E} /* SPACING TILDE / TILDE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_42page0 = { 0, marc8_42page0_dir }; struct yaz_iconv_trie *marc8_42ptrs [] = { &marc8_42page0, 0, }; unsigned long yaz_marc8_42_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_42ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 67 */ /* PAGE 0 */ struct yaz_iconv_trie_dir marc8_45page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x0098} /* NON-SORT BEGIN / START OF STRING */, {0, 0, 0x009C} /* NON-SORT END / STRING TERMINATOR */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x200D} /* JOINER / ZERO WIDTH JOINER */, {0, 0, 0x200C} /* NON-JOINER / ZERO WIDTH NON-JOINER */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x0141} /* UPPERCASE POLISH L / LATIN CAPITAL LETTER L WITH STROKE */, {0, 0, 0x00D8} /* UPPERCASE SCANDINAVIAN O / LATIN CAPITAL LETTER O WITH STROKE */, {0, 0, 0x0110} /* UPPERCASE D WITH CROSSBAR / LATIN CAPITAL LETTER D WITH STROKE */, {0, 0, 0x00DE} /* UPPERCASE ICELANDIC THORN / LATIN CAPITAL LETTER THORN (Icelandic) */, {0, 0, 0x00C6} /* UPPERCASE DIGRAPH AE / LATIN CAPITAL LIGATURE AE */, {0, 0, 0x0152} /* UPPERCASE DIGRAPH OE / LATIN CAPITAL LIGATURE OE */, {0, 0, 0x02B9} /* SOFT SIGN, PRIME / MODIFIER LETTER PRIME */, {0, 0, 0x00B7} /* MIDDLE DOT */, {0, 0, 0x266D} /* MUSIC FLAT SIGN */, {0, 0, 0x00AE} /* PATENT MARK / REGISTERED SIGN */, {0, 0, 0x00B1} /* PLUS OR MINUS / PLUS-MINUS SIGN */, {0, 0, 0x01A0} /* UPPERCASE O-HOOK / LATIN CAPITAL LETTER O WITH HORN */, {0, 0, 0x01AF} /* UPPERCASE U-HOOK / LATIN CAPITAL LETTER U WITH HORN */, {0, 0, 0x02BC} /* ALIF / MODIFIER LETTER APOSTROPHE */, {0, 0, 0}, {0, 0, 0x02BB} /* AYN / MODIFIER LETTER TURNED COMMA */, {0, 0, 0x0142} /* LOWERCASE POLISH L / LATIN SMALL LETTER L WITH STROKE */, {0, 0, 0x00F8} /* LOWERCASE SCANDINAVIAN O / LATIN SMALL LETTER O WITH STROKE */, {0, 0, 0x0111} /* LOWERCASE D WITH CROSSBAR / LATIN SMALL LETTER D WITH STROKE */, {0, 0, 0x00FE} /* LOWERCASE ICELANDIC THORN / LATIN SMALL LETTER THORN (Icelandic) */, {0, 0, 0x00E6} /* LOWERCASE DIGRAPH AE / LATIN SMALL LIGATURE AE */, {0, 0, 0x0153} /* LOWERCASE DIGRAPH OE / LATIN SMALL LIGATURE OE */, {0, 0, 0x02BA} /* HARD SIGN, DOUBLE PRIME / MODIFIER LETTER DOUBLE PRIME */, {0, 0, 0x0131} /* LOWERCASE TURKISH I / LATIN SMALL LETTER DOTLESS I */, {0, 0, 0x00A3} /* BRITISH POUND / POUND SIGN */, {0, 0, 0x00F0} /* LOWERCASE ETH / LATIN SMALL LETTER ETH (Icelandic) */, {0, 0, 0}, {0, 0, 0x01A1} /* LOWERCASE O-HOOK / LATIN SMALL LETTER O WITH HORN */, {0, 0, 0x01B0} /* LOWERCASE U-HOOK / LATIN SMALL LETTER U WITH HORN */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x00B0} /* DEGREE SIGN */, {0, 0, 0x2113} /* SCRIPT SMALL L */, {0, 0, 0x2117} /* SOUND RECORDING COPYRIGHT */, {0, 0, 0x00A9} /* COPYRIGHT SIGN */, {0, 0, 0x266F} /* MUSIC SHARP SIGN */, {0, 0, 0x00BF} /* INVERTED QUESTION MARK */, {0, 0, 0x00A1} /* INVERTED EXCLAMATION MARK */, {0, 0, 0x00DF} /* ESZETT SYMBOL */, {0, 0, 0x20AC} /* EURO SIGN */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 1, 0x0309} /* PSEUDO QUESTION MARK / COMBINING HOOK ABOVE */, {0, 1, 0x0300} /* GRAVE / COMBINING GRAVE ACCENT (Varia) */, {0, 1, 0x0301} /* ACUTE / COMBINING ACUTE ACCENT (Oxia) */, {0, 1, 0x0302} /* CIRCUMFLEX / COMBINING CIRCUMFLEX ACCENT */, {0, 1, 0x0303} /* TILDE / COMBINING TILDE */, {0, 1, 0x0304} /* MACRON / COMBINING MACRON */, {0, 1, 0x0306} /* BREVE / COMBINING BREVE (Vrachy) */, {0, 1, 0x0307} /* SUPERIOR DOT / COMBINING DOT ABOVE */, {0, 1, 0x0308} /* UMLAUT, DIAERESIS / COMBINING DIAERESIS (Dialytika) */, {0, 1, 0x030C} /* HACEK / COMBINING CARON */, {0, 1, 0x030A} /* CIRCLE ABOVE, ANGSTROM / COMBINING RING ABOVE */, {0, 1, 0x0361} /* LIGATURE, FIRST HALF / COMBINING DOUBLE INVERTED BREVE */, {0, 0, 0}, {0, 1, 0x0315} /* HIGH COMMA, OFF CENTER / COMBINING COMMA ABOVE RIGHT */, {0, 1, 0x030B} /* DOUBLE ACUTE / COMBINING DOUBLE ACUTE ACCENT */, {0, 1, 0x0310} /* CANDRABINDU / COMBINING CANDRABINDU */, {0, 1, 0x0327} /* CEDILLA / COMBINING CEDILLA */, {0, 1, 0x0328} /* RIGHT HOOK, OGONEK / COMBINING OGONEK */, {0, 1, 0x0323} /* DOT BELOW / COMBINING DOT BELOW */, {0, 1, 0x0324} /* DOUBLE DOT BELOW / COMBINING DIAERESIS BELOW */, {0, 1, 0x0325} /* CIRCLE BELOW / COMBINING RING BELOW */, {0, 1, 0x0333} /* DOUBLE UNDERSCORE / COMBINING DOUBLE LOW LINE */, {0, 1, 0x0332} /* UNDERSCORE / COMBINING LOW LINE */, {0, 1, 0x0326} /* LEFT HOOK (COMMA BELOW) / COMBINING COMMA BELOW */, {0, 1, 0x031C} /* RIGHT CEDILLA / COMBINING LEFT HALF RING BELOW */, {0, 1, 0x032E} /* UPADHMANIYA / COMBINING BREVE BELOW */, {0, 1, 0x0360} /* DOUBLE TILDE, FIRST HALF / COMBINING DOUBLE TILDE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 1, 0x0313} /* HIGH COMMA, CENTERED / COMBINING COMMA ABOVE (Psili) */, {0, 0, 0} }; struct yaz_iconv_trie marc8_45page0 = { 0, marc8_45page0_dir }; struct yaz_iconv_trie *marc8_45ptrs [] = { &marc8_45page0, 0, }; unsigned long yaz_marc8_45_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_45ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 3 */ /* PAGE 0 */ struct yaz_iconv_trie_flat marc8_67page0_flat[] = { {"\x61", 0, 0x03B1}, /* GREEK SMALL LETTER ALPHA */ {"\x62", 0, 0x03B2}, /* GREEK SMALL LETTER BETA */ {"\x63", 0, 0x03B3}, /* GREEK SMALL LETTER GAMMA */ {"", 0, 0} }; struct yaz_iconv_trie marc8_67page0 = { marc8_67page0_flat, 0 }; struct yaz_iconv_trie *marc8_67ptrs [] = { &marc8_67page0, 0, }; unsigned long yaz_marc8_67_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_67ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 14 */ /* PAGE 0 */ struct yaz_iconv_trie_flat marc8_62page0_flat[] = { {"\x28", 0, 0x208D}, /* SUBSCRIPT OPENING PARENTHESIS / SUBSCRIPT LEFT PARENTHESIS */ {"\x29", 0, 0x208E}, /* SUBSCRIPT CLOSING PARENTHESIS / SUBSCRIPT RIGHT PARENTHESIS */ {"\x2B", 0, 0x208A}, /* SUBSCRIPT PLUS SIGN */ {"\x2D", 0, 0x208B}, /* SUBSCRIPT HYPHEN-MINUS / SUBSCRIPT MINUS */ {"\x30", 0, 0x2080}, /* SUBSCRIPT DIGIT ZERO */ {"\x31", 0, 0x2081}, /* SUBSCRIPT DIGIT ONE */ {"\x32", 0, 0x2082}, /* SUBSCRIPT DIGIT TWO */ {"\x33", 0, 0x2083}, /* SUBSCRIPT DIGIT THREE */ {"\x34", 0, 0x2084}, /* SUBSCRIPT DIGIT FOUR */ {"\x35", 0, 0x2085}, /* SUBSCRIPT DIGIT FIVE */ {"\x36", 0, 0x2086}, /* SUBSCRIPT DIGIT SIX */ {"\x37", 0, 0x2087}, /* SUBSCRIPT DIGIT SEVEN */ {"\x38", 0, 0x2088}, /* SUBSCRIPT DIGIT EIGHT */ {"\x39", 0, 0x2089}, /* SUBSCRIPT DIGIT NINE */ {"", 0, 0} }; struct yaz_iconv_trie marc8_62page0 = { marc8_62page0_flat, 0 }; struct yaz_iconv_trie *marc8_62ptrs [] = { &marc8_62page0, 0, }; unsigned long yaz_marc8_62_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_62ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 14 */ /* PAGE 0 */ struct yaz_iconv_trie_flat marc8_70page0_flat[] = { {"\x28", 0, 0x207D}, /* SUPERSCRIPT OPENING PARENTHESIS / SUPERSCRIPT LEFT PARENTHESIS */ {"\x29", 0, 0x207E}, /* SUPERSCRIPT CLOSING PARENTHESIS / SUPERSCRIPT RIGHT PARENTHESIS */ {"\x2B", 0, 0x207A}, /* SUPERSCRIPT PLUS SIGN */ {"\x2D", 0, 0x207B}, /* SUPERSCRIPT HYPHEN-MINUS / SUPERSCRIPT MINUS */ {"\x30", 0, 0x2070}, /* SUPERSCRIPT DIGIT ZERO */ {"\x31", 0, 0x00B9}, /* SUPERSCRIPT DIGIT ONE */ {"\x32", 0, 0x00B2}, /* SUPERSCRIPT DIGIT TWO */ {"\x33", 0, 0x00B3}, /* SUPERSCRIPT DIGIT THREE */ {"\x34", 0, 0x2074}, /* SUPERSCRIPT DIGIT FOUR */ {"\x35", 0, 0x2075}, /* SUPERSCRIPT DIGIT FIVE */ {"\x36", 0, 0x2076}, /* SUPERSCRIPT DIGIT SIX */ {"\x37", 0, 0x2077}, /* SUPERSCRIPT DIGIT SEVEN */ {"\x38", 0, 0x2078}, /* SUPERSCRIPT DIGIT EIGHT */ {"\x39", 0, 0x2079}, /* SUPERSCRIPT DIGIT NINE */ {"", 0, 0} }; struct yaz_iconv_trie marc8_70page0 = { marc8_70page0_flat, 0 }; struct yaz_iconv_trie *marc8_70ptrs [] = { &marc8_70page0, 0, }; unsigned long yaz_marc8_70_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_70ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 78 */ /* PAGE 0 */ struct yaz_iconv_trie_dir marc8_32page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x0021} /* EXCLAMATION MARK */, {0, 0, 0x05F4} /* QUOTATION MARK, GERSHAYIM / HEBREW PUNCTUATION GERSHAYIM */, {0, 0, 0x0023} /* NUMBER SIGN */, {0, 0, 0x0024} /* DOLLAR SIGN */, {0, 0, 0x0025} /* PERCENT SIGN */, {0, 0, 0x0026} /* AMPERSAND */, {0, 0, 0x05F3} /* APOSTROPHE, GERESH / HEBREW PUNCTUATION GERESH */, {0, 0, 0x0028} /* OPENING PARENTHESIS / LEFT PARENTHESIS */, {0, 0, 0x0029} /* CLOSING PARENTHESIS / RIGHT PARENTHESIS */, {0, 0, 0x002A} /* ASTERISK */, {0, 0, 0x002B} /* PLUS SIGN */, {0, 0, 0x002C} /* COMMA */, {0, 0, 0x05BE} /* HYPHEN-MINUS, MAKEF / HEBREW PUNCTUATION MAQAF */, {0, 0, 0x002E} /* PERIOD, DECIMAL POINT / FULL STOP */, {0, 0, 0x002F} /* SLASH / SOLIDUS */, {0, 0, 0x0030} /* DIGIT ZERO */, {0, 0, 0x0031} /* DIGIT ONE */, {0, 0, 0x0032} /* DIGIT TWO */, {0, 0, 0x0033} /* DIGIT THREE */, {0, 0, 0x0034} /* DIGIT FOUR */, {0, 0, 0x0035} /* DIGIT FIVE */, {0, 0, 0x0036} /* DIGIT SIX */, {0, 0, 0x0037} /* DIGIT SEVEN */, {0, 0, 0x0038} /* DIGIT EIGHT */, {0, 0, 0x0039} /* DIGIT NINE */, {0, 0, 0x003A} /* COLON */, {0, 0, 0x003B} /* SEMICOLON */, {0, 0, 0x003C} /* LESS-THAN SIGN */, {0, 0, 0x003D} /* EQUALS SIGN */, {0, 0, 0x003E} /* GREATER-THAN SIGN */, {0, 0, 0x003F} /* QUESTION MARK */, {0, 1, 0x05B7} /* HEBREW POINT PATAH */, {0, 1, 0x05B8} /* KAMATS / HEBREW POINT QAMATS */, {0, 1, 0x05B6} /* HEBREW POINT SEGOL */, {0, 1, 0x05B5} /* TSEREH / HEBREW POINT TSERE */, {0, 1, 0x05B4} /* HIRIK / HEBREW POINT HIRIQ */, {0, 1, 0x05B9} /* HOLAM, LEFT SIN DOT / HEBREW POINT HOLAM */, {0, 1, 0x05BB} /* KUBUTS / HEBREW POINT QUBUTS */, {0, 1, 0x05B0} /* HEBREW POINT SHEVA */, {0, 1, 0x05B2} /* HEBREW POINT HATAF PATAH */, {0, 1, 0x05B3} /* HATAF KAMATS / HEBREW POINT HATAF QAMATS */, {0, 1, 0x05B1} /* HEBREW POINT HATAF SEGOL */, {0, 1, 0x05BC} /* HEBREW POINT DAGESH OR MAPIQ */, {0, 1, 0x05BF} /* RAFEH / HEBREW POINT RAFE */, {0, 1, 0x05C1} /* RIGHT SHIN DOT / HEBREW POINT SHIN DOT */, {0, 1, 0xFB1E} /* VARIKA / HEBREW POINT JUDEO-SPANISH VARIKA */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x005B} /* OPENING SQUARE BRACKET / LEFT SQUARE BRACKET */, {0, 0, 0}, {0, 0, 0x005D} /* CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x05D0} /* HEBREW LETTER ALEF */, {0, 0, 0x05D1} /* HEBREW LETTER BET */, {0, 0, 0x05D2} /* HEBREW LETTER GIMEL */, {0, 0, 0x05D3} /* HEBREW LETTER DALET */, {0, 0, 0x05D4} /* HEBREW LETTER HE */, {0, 0, 0x05D5} /* HEBREW LETTER VAV */, {0, 0, 0x05D6} /* HEBREW LETTER ZAYIN */, {0, 0, 0x05D7} /* HEBREW LETTER HET */, {0, 0, 0x05D8} /* HEBREW LETTER TET */, {0, 0, 0x05D9} /* HEBREW LETTER YOD */, {0, 0, 0x05DA} /* HEBREW LETTER FINAL KAF */, {0, 0, 0x05DB} /* HEBREW LETTER KAF */, {0, 0, 0x05DC} /* HEBREW LETTER LAMED */, {0, 0, 0x05DD} /* HEBREW LETTER FINAL MEM */, {0, 0, 0x05DE} /* HEBREW LETTER MEM */, {0, 0, 0x05DF} /* HEBREW LETTER FINAL NUN */, {0, 0, 0x05E0} /* HEBREW LETTER NUN */, {0, 0, 0x05E1} /* HEBREW LETTER SAMEKH */, {0, 0, 0x05E2} /* HEBREW LETTER AYIN */, {0, 0, 0x05E3} /* HEBREW LETTER FINAL PE */, {0, 0, 0x05E4} /* HEBREW LETTER PE */, {0, 0, 0x05E5} /* HEBREW LETTER FINAL TSADI */, {0, 0, 0x05E6} /* HEBREW LETTER TSADI */, {0, 0, 0x05E7} /* HEBREW LETTER QOF / KOF */, {0, 0, 0x05E8} /* HEBREW LETTER RESH */, {0, 0, 0x05E9} /* HEBREW LETTER SHIN */, {0, 0, 0x05EA} /* HEBREW LETTER TAV */, {0, 0, 0x05F0} /* HEBREW LIGATURE YIDDISH DOUBLE VAV / TSVEY VOVN */, {0, 0, 0x05F1} /* HEBREW LIGATURE YIDDISH VAV YOD / VOV YUD */, {0, 0, 0x05F2} /* HEBREW LIGATURE YIDDISH DOUBLE YOD / TSVEY YUDN */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_32page0 = { 0, marc8_32page0_dir }; struct yaz_iconv_trie *marc8_32ptrs [] = { &marc8_32page0, 0, }; unsigned long yaz_marc8_32_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_32ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 94 */ /* PAGE 0 */ struct yaz_iconv_trie_dir marc8_4Epage0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x0021} /* EXCLAMATION MARK */, {0, 0, 0x0022} /* QUOTATION MARK */, {0, 0, 0x0023} /* NUMBER SIGN */, {0, 0, 0x0024} /* DOLLAR SIGN */, {0, 0, 0x0025} /* PERCENT SIGN */, {0, 0, 0x0026} /* AMPERSAND */, {0, 0, 0x0027} /* APOSTROPHE */, {0, 0, 0x0028} /* OPENING PARENTHESIS / LEFT PARENTHESIS */, {0, 0, 0x0029} /* CLOSING PARENTHESIS / RIGHT PARENTHESIS */, {0, 0, 0x002A} /* ASTERISK */, {0, 0, 0x002B} /* PLUS SIGN */, {0, 0, 0x002C} /* COMMA */, {0, 0, 0x002D} /* HYPHEN-MINUS */, {0, 0, 0x002E} /* PERIOD, DECIMAL POINT / FULL STOP */, {0, 0, 0x002F} /* SLASH / SOLIDUS */, {0, 0, 0x0030} /* DIGIT ZERO */, {0, 0, 0x0031} /* DIGIT ONE */, {0, 0, 0x0032} /* DIGIT TWO */, {0, 0, 0x0033} /* DIGIT THREE */, {0, 0, 0x0034} /* DIGIT FOUR */, {0, 0, 0x0035} /* DIGIT FIVE */, {0, 0, 0x0036} /* DIGIT SIX */, {0, 0, 0x0037} /* DIGIT SEVEN */, {0, 0, 0x0038} /* DIGIT EIGHT */, {0, 0, 0x0039} /* DIGIT NINE */, {0, 0, 0x003A} /* COLON */, {0, 0, 0x003B} /* SEMICOLON */, {0, 0, 0x003C} /* LESS-THAN SIGN */, {0, 0, 0x003D} /* EQUALS SIGN */, {0, 0, 0x003E} /* GREATER-THAN SIGN */, {0, 0, 0x003F} /* QUESTION MARK */, {0, 0, 0x044E} /* LOWERCASE IU / CYRILLIC SMALL LETTER YU */, {0, 0, 0x0430} /* CYRILLIC SMALL LETTER A */, {0, 0, 0x0431} /* CYRILLIC SMALL LETTER BE */, {0, 0, 0x0446} /* CYRILLIC SMALL LETTER TSE */, {0, 0, 0x0434} /* CYRILLIC SMALL LETTER DE */, {0, 0, 0x0435} /* CYRILLIC SMALL LETTER IE */, {0, 0, 0x0444} /* CYRILLIC SMALL LETTER EF */, {0, 0, 0x0433} /* LOWERCASE GE / CYRILLIC SMALL LETTER GHE */, {0, 0, 0x0445} /* LOWERCASE KHA / CYRILLIC SMALL LETTER HA */, {0, 0, 0x0438} /* LOWERCASE II / CYRILLIC SMALL LETTER I */, {0, 0, 0x0439} /* LOWERCASE SHORT II / CYRILLIC SMALL LETTER SHORT I */, {0, 0, 0x043A} /* CYRILLIC SMALL LETTER KA */, {0, 0, 0x043B} /* CYRILLIC SMALL LETTER EL */, {0, 0, 0x043C} /* CYRILLIC SMALL LETTER EM */, {0, 0, 0x043D} /* CYRILLIC SMALL LETTER EN */, {0, 0, 0x043E} /* CYRILLIC SMALL LETTER O */, {0, 0, 0x043F} /* CYRILLIC SMALL LETTER PE */, {0, 0, 0x044F} /* LOWERCASE IA / CYRILLIC SMALL LETTER YA */, {0, 0, 0x0440} /* CYRILLIC SMALL LETTER ER */, {0, 0, 0x0441} /* CYRILLIC SMALL LETTER ES */, {0, 0, 0x0442} /* CYRILLIC SMALL LETTER TE */, {0, 0, 0x0443} /* CYRILLIC SMALL LETTER U */, {0, 0, 0x0436} /* CYRILLIC SMALL LETTER ZHE */, {0, 0, 0x0432} /* CYRILLIC SMALL LETTER VE */, {0, 0, 0x044C} /* CYRILLIC SMALL LETTER SOFT SIGN */, {0, 0, 0x044B} /* LOWERCASE YERI / CYRILLIC SMALL LETTER YERI */, {0, 0, 0x0437} /* CYRILLIC SMALL LETTER ZE */, {0, 0, 0x0448} /* CYRILLIC SMALL LETTER SHA */, {0, 0, 0x044D} /* LOWERCASE REVERSED E / CYRILLIC SMALL LETTER E */, {0, 0, 0x0449} /* CYRILLIC SMALL LETTER SHCHA */, {0, 0, 0x0447} /* CYRILLIC SMALL LETTER CHE */, {0, 0, 0x044A} /* CYRILLIC SMALL LETTER HARD SIGN */, {0, 0, 0x042E} /* UPPERCASE IU / CYRILLIC CAPITAL LETTER YU */, {0, 0, 0x0410} /* CYRILLIC CAPITAL LETTER A */, {0, 0, 0x0411} /* CYRILLIC CAPITAL LETTER BE */, {0, 0, 0x0426} /* CYRILLIC CAPITAL LETTER TSE */, {0, 0, 0x0414} /* CYRILLIC CAPITAL LETTER DE */, {0, 0, 0x0415} /* CYRILLIC CAPITAL LETTER IE */, {0, 0, 0x0424} /* CYRILLIC CAPITAL LETTER EF */, {0, 0, 0x0413} /* UPPERCASE GE / CYRILLIC CAPITAL LETTER GHE */, {0, 0, 0x0425} /* UPPERCASE KHA / CYRILLIC CAPITAL LETTER HA */, {0, 0, 0x0418} /* UPPERCASE II / CYRILLIC CAPITAL LETTER I */, {0, 0, 0x0419} /* UPPERCASE SHORT II / CYRILLIC CAPITAL LETTER SHORT I */, {0, 0, 0x041A} /* CYRILLIC CAPITAL LETTER KA */, {0, 0, 0x041B} /* CYRILLIC CAPITAL LETTER EL */, {0, 0, 0x041C} /* CYRILLIC CAPITAL LETTER EM */, {0, 0, 0x041D} /* CYRILLIC CAPITAL LETTER EN */, {0, 0, 0x041E} /* CYRILLIC CAPITAL LETTER O */, {0, 0, 0x041F} /* CYRILLIC CAPITAL LETTER PE */, {0, 0, 0x042F} /* UPPERCASE IA / CYRILLIC CAPITAL LETTER YA */, {0, 0, 0x0420} /* CYRILLIC CAPITAL LETTER ER */, {0, 0, 0x0421} /* CYRILLIC CAPITAL LETTER ES */, {0, 0, 0x0422} /* CYRILLIC CAPITAL LETTER TE */, {0, 0, 0x0423} /* CYRILLIC CAPITAL LETTER U */, {0, 0, 0x0416} /* CYRILLIC CAPITAL LETTER ZHE */, {0, 0, 0x0412} /* CYRILLIC CAPITAL LETTER VE */, {0, 0, 0x042C} /* CYRILLIC CAPITAL LETTER SOFT SIGN */, {0, 0, 0x042B} /* UPPERCASE YERI / CYRILLIC CAPITAL LETTER YERI */, {0, 0, 0x0417} /* CYRILLIC CAPITAL LETTER ZE */, {0, 0, 0x0428} /* CYRILLIC CAPITAL LETTER SHA */, {0, 0, 0x042D} /* CYRILLIC CAPITAL LETTER E */, {0, 0, 0x0429} /* CYRILLIC CAPITAL LETTER SHCHA */, {0, 0, 0x0427} /* CYRILLIC CAPITAL LETTER CHE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_4Epage0 = { 0, marc8_4Epage0_dir }; struct yaz_iconv_trie *marc8_4Eptrs [] = { &marc8_4Epage0, 0, }; unsigned long yaz_marc8_4E_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_4Eptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 42 */ /* PAGE 0 */ struct yaz_iconv_trie_flat marc8_51page0_flat[] = { {"\x40", 0, 0x0491}, /* LOWERCASE GE WITH UPTURN / CYRILLIC SMALL LETTER GHE WITH UPTURN */ {"\x41", 0, 0x0452}, /* LOWERCASE DJE / CYRILLIC SMALL LETTER DJE (Serbian) */ {"\x42", 0, 0x0453}, /* CYRILLIC SMALL LETTER GJE */ {"\x43", 0, 0x0454}, /* LOWERCASE E / CYRILLIC SMALL LETTER UKRAINIAN IE */ {"\x44", 0, 0x0451}, /* CYRILLIC SMALL LETTER IO */ {"\x45", 0, 0x0455}, /* CYRILLIC SMALL LETTER DZE */ {"\x46", 0, 0x0456}, /* LOWERCASE I / CYRILLIC SMALL LETTER BYELORUSSIAN-UKRANIAN I */ {"\x47", 0, 0x0457}, /* LOWERCASE YI / CYRILLIC SMALL LETTER YI (Ukrainian) */ {"\x48", 0, 0x0458}, /* CYRILLIC SMALL LETTER JE */ {"\x49", 0, 0x0459}, /* CYRILLIC SMALL LETTER LJE */ {"\x4A", 0, 0x045A}, /* CYRILLIC SMALL LETTER NJE */ {"\x4B", 0, 0x045B}, /* LOWERCASE TSHE / CYRILLIC SMALL LETTER TSHE (Serbian) */ {"\x4C", 0, 0x045C}, /* CYRILLIC SMALL LETTER KJE */ {"\x4D", 0, 0x045E}, /* LOWERCASE SHORT U / CYRILLIC SMALL LETTER SHORT U (Byelorussian) */ {"\x4E", 0, 0x045F}, /* CYRILLIC SMALL LETTER DZHE */ {"\x50", 0, 0x0463}, /* CYRILLIC SMALL LETTER YAT */ {"\x51", 0, 0x0473}, /* CYRILLIC SMALL LETTER FITA */ {"\x52", 0, 0x0475}, /* CYRILLIC SMALL LETTER IZHITSA */ {"\x53", 0, 0x046B}, /* CYRILLIC SMALL LETTER BIG YUS */ {"\x5B", 0, 0x005B}, /* OPENING SQUARE BRACKET / LEFT SQUARE BRACKET */ {"\x5D", 0, 0x005D}, /* CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET */ {"\x5F", 0, 0x005F}, /* SPACING UNDERSCORE / LOW LINE */ {"\x60", 0, 0x0490}, /* UPPERCASE GE WITH UPTURN / CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ {"\x61", 0, 0x0402}, /* UPPERCASE DJE / CYRILLIC CAPITAL LETTER DJE (Serbian) */ {"\x62", 0, 0x0403}, /* CYRILLIC CAPITAL LETTER GJE */ {"\x63", 0, 0x0404}, /* UPPERCASE E / CYRILLIC CAPITAL LETTER UKRAINIAN IE */ {"\x64", 0, 0x0401}, /* CYRILLIC CAPITAL LETTER IO */ {"\x65", 0, 0x0405}, /* CYRILLIC CAPITAL LETTER DZE */ {"\x66", 0, 0x0406}, /* UPPERCASE I / CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRANIAN I */ {"\x67", 0, 0x0407}, /* UPPERCASE YI / CYRILLIC CAPITAL LETTER YI (Ukrainian) */ {"\x68", 0, 0x0408}, /* CYRILLIC CAPITAL LETTER JE */ {"\x69", 0, 0x0409}, /* CYRILLIC CAPITAL LETTER LJE */ {"\x6A", 0, 0x040A}, /* CYRILLIC CAPITAL LETTER NJE */ {"\x6B", 0, 0x040B}, /* UPPERCASE TSHE / CYRILLIC CAPITAL LETTER TSHE (Serbian) */ {"\x6C", 0, 0x040C}, /* CYRILLIC CAPITAL LETTER KJE */ {"\x6D", 0, 0x040E}, /* UPPERCASE SHORT U / CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) */ {"\x6E", 0, 0x040F}, /* CYRILLIC CAPITAL LETTER DZHE */ {"\x6F", 0, 0x042A}, /* CYRILLIC CAPITAL LETTER HARD SIGN */ {"\x70", 0, 0x0462}, /* CYRILLIC CAPITAL LETTER YAT */ {"\x71", 0, 0x0472}, /* CYRILLIC CAPITAL LETTER FITA */ {"\x72", 0, 0x0474}, /* CYRILLIC CAPITAL LETTER IZHITSA */ {"\x73", 0, 0x046A}, /* CYRILLIC CAPITAL LETTER BIG YUS */ {"", 0, 0} }; struct yaz_iconv_trie marc8_51page0 = { marc8_51page0_flat, 0 }; struct yaz_iconv_trie *marc8_51ptrs [] = { &marc8_51page0, 0, }; unsigned long yaz_marc8_51_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_51ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 83 */ /* PAGE 0 */ struct yaz_iconv_trie_dir marc8_33page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x0021} /* EXCLAMATION MARK */, {0, 0, 0x0022} /* QUOTATION MARK */, {0, 0, 0x0023} /* NUMBER SIGN */, {0, 0, 0x0024} /* DOLLAR SIGN */, {0, 0, 0x066A} /* PERCENT SIGN / ARABIC PERCENT SIGN */, {0, 0, 0x0026} /* AMPERSAND */, {0, 0, 0x0027} /* APOSTROPHE */, {0, 0, 0x0028} /* OPENING PARENTHESIS / LEFT PARENTHESIS */, {0, 0, 0x0029} /* CLOSING PARENTHESIS / RIGHT PARENTHESIS */, {0, 0, 0x066D} /* ASTERISK / ARABIC FIVE POINTED STAR */, {0, 0, 0x002B} /* PLUS SIGN */, {0, 0, 0x060C} /* ARABIC COMMA */, {0, 0, 0x002D} /* HYPHEN-MINUS */, {0, 0, 0x002E} /* PERIOD, DECIMAL POINT / FULL STOP */, {0, 0, 0x002F} /* SLASH / SOLIDUS */, {0, 0, 0x0660} /* ARABIC-INDIC DIGIT ZERO */, {0, 0, 0x0661} /* ARABIC-INDIC DIGIT ONE */, {0, 0, 0x0662} /* ARABIC-INDIC DIGIT TWO */, {0, 0, 0x0663} /* ARABIC-INDIC DIGIT THREE */, {0, 0, 0x0664} /* ARABIC-INDIC DIGIT FOUR */, {0, 0, 0x0665} /* ARABIC-INDIC DIGIT FIVE */, {0, 0, 0x0666} /* ARABIC-INDIC DIGIT SIX */, {0, 0, 0x0667} /* ARABIC-INDIC DIGIT SEVEN */, {0, 0, 0x0668} /* ARABIC-INDIC DIGIT EIGHT */, {0, 0, 0x0669} /* ARABIC-INDIC DIGIT NINE */, {0, 0, 0x003A} /* COLON */, {0, 0, 0x061B} /* ARABIC SEMICOLON */, {0, 0, 0x003C} /* LESS-THAN SIGN */, {0, 0, 0x003D} /* EQUALS SIGN */, {0, 0, 0x003E} /* GREATER-THAN SIGN */, {0, 0, 0x061F} /* ARABIC QUESTION MARK */, {0, 0, 0}, {0, 0, 0x0621} /* HAMZAH / ARABIC LETTER HAMZA */, {0, 0, 0x0622} /* ARABIC LETTER ALEF WITH MADDA ABOVE */, {0, 0, 0x0623} /* ARABIC LETTER ALEF WITH HAMZA ABOVE */, {0, 0, 0x0624} /* ARABIC LETTER WAW WITH HAMZA ABOVE */, {0, 0, 0x0625} /* ARABIC LETTER ALEF WITH HAMZA BELOW */, {0, 0, 0x0626} /* ARABIC LETTER YEH WITH HAMZA ABOVE */, {0, 0, 0x0627} /* ARABIC LETTER ALEF */, {0, 0, 0x0628} /* ARABIC LETTER BEH */, {0, 0, 0x0629} /* ARABIC LETTER TEH MARBUTA */, {0, 0, 0x062A} /* ARABIC LETTER TEH */, {0, 0, 0x062B} /* ARABIC LETTER THEH */, {0, 0, 0x062C} /* ARABIC LETTER JEEM */, {0, 0, 0x062D} /* ARABIC LETTER HAH */, {0, 0, 0x062E} /* ARABIC LETTER KHAH */, {0, 0, 0x062F} /* ARABIC LETTER DAL */, {0, 0, 0x0630} /* ARABIC LETTER THAL */, {0, 0, 0x0631} /* ARABIC LETTER REH */, {0, 0, 0x0632} /* ARABIC LETTER ZAIN */, {0, 0, 0x0633} /* ARABIC LETTER SEEN */, {0, 0, 0x0634} /* ARABIC LETTER SHEEN */, {0, 0, 0x0635} /* ARABIC LETTER SAD */, {0, 0, 0x0636} /* ARABIC LETTER DAD */, {0, 0, 0x0637} /* ARABIC LETTER TAH */, {0, 0, 0x0638} /* ARABIC LETTER ZAH */, {0, 0, 0x0639} /* ARABIC LETTER AIN */, {0, 0, 0x063A} /* ARABIC LETTER GHAIN */, {0, 0, 0x005B} /* OPENING SQUARE BRACKET / LEFT SQUARE BRACKET */, {0, 0, 0}, {0, 0, 0x005D} /* CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x0640} /* ARABIC TATWEEL */, {0, 0, 0x0641} /* ARABIC LETTER FEH */, {0, 0, 0x0642} /* ARABIC LETTER QAF */, {0, 0, 0x0643} /* ARABIC LETTER KAF */, {0, 0, 0x0644} /* ARABIC LETTER LAM */, {0, 0, 0x0645} /* ARABIC LETTER MEEM */, {0, 0, 0x0646} /* ARABIC LETTER NOON */, {0, 0, 0x0647} /* ARABIC LETTER HEH */, {0, 0, 0x0648} /* ARABIC LETTER WAW */, {0, 0, 0x0649} /* ARABIC LETTER ALEF MAKSURA */, {0, 0, 0x064A} /* ARABIC LETTER YEH */, {0, 1, 0x064B} /* ARABIC FATHATAN */, {0, 1, 0x064C} /* ARABIC DAMMATAN */, {0, 1, 0x064D} /* ARABIC KASRATAN */, {0, 1, 0x064E} /* ARABIC FATHA */, {0, 1, 0x064F} /* ARABIC DAMMA */, {0, 1, 0x0650} /* ARABIC KASRA */, {0, 1, 0x0651} /* ARABIC SHADDA */, {0, 1, 0x0652} /* ARABIC SUKUN */, {0, 0, 0x0671} /* ARABIC LETTER ALEF WASLA */, {0, 0, 0x0670} /* ARABIC LETTER SUPERSCRIPT ALEF */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x066C} /* ARABIC THOUSANDS SEPARATOR */, {0, 0, 0x201D} /* RIGHT DOUBLE QUOTATION MARK */, {0, 0, 0x201C} /* LEFT DOUBLE QUOTATION MARK */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_33page0 = { 0, marc8_33page0_dir }; struct yaz_iconv_trie *marc8_33ptrs [] = { &marc8_33page0, 0, }; unsigned long yaz_marc8_33_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_33ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 90 */ /* PAGE 0 */ struct yaz_iconv_trie_dir marc8_34page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x06FD} /* DOUBLE ALEF WITH HAMZA ABOVE / ARABIC SIGN SINDHI AMPERSAND */, {0, 0, 0x0672} /* ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE */, {0, 0, 0x0673} /* ARABIC LETTER ALEF WITH WAVY HAMZA BELOW */, {0, 0, 0x0679} /* ARABIC LETTER TTEH */, {0, 0, 0x067A} /* ARABIC LETTER TTEHEH */, {0, 0, 0x067B} /* ARABIC LETTER BBEH */, {0, 0, 0x067C} /* ARABIC LETTER TEH WITH RING */, {0, 0, 0x067D} /* ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS */, {0, 0, 0x067E} /* ARABIC LETTER PEH */, {0, 0, 0x067F} /* ARABIC LETTER TEHEH */, {0, 0, 0x0680} /* ARABIC LETTER BEHEH */, {0, 0, 0x0681} /* ARABIC LETTER HAH WITH HAMZA ABOVE */, {0, 0, 0x0682} /* ARABIC LETTER HAH WITH TWO ABOVE DOTS VERTICAL ABOVE */, {0, 0, 0x0683} /* ARABIC LETTER NYEH */, {0, 0, 0x0684} /* ARABIC LETTER DYEH */, {0, 0, 0x0685} /* ARABIC LETTER HAH WITH THREE DOTS ABOVE */, {0, 0, 0x0686} /* ARABIC LETTER TCHEH */, {0, 0, 0x06BF} /* ARABIC LETTER TCHEH WITH DOT ABOVE */, {0, 0, 0x0687} /* ARABIC LETTER TCHEHEH */, {0, 0, 0x0688} /* ARABIC LETTER DDAL */, {0, 0, 0x0689} /* ARABIC LETTER DAL WITH RING */, {0, 0, 0x068A} /* ARABIC LETTER DAL WITH DOT BELOW */, {0, 0, 0x068B} /* ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH */, {0, 0, 0x068C} /* ARABIC LETTER DAHAL */, {0, 0, 0x068D} /* ARABIC LETTER DDAHAL */, {0, 0, 0x068E} /* ARABIC LETTER DUL */, {0, 0, 0x068F} /* ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS */, {0, 0, 0x0690} /* ARABIC LETTER DAL WITH FOUR DOTS ABOVE */, {0, 0, 0x0691} /* ARABIC LETTER RREH */, {0, 0, 0x0692} /* ARABIC LETTER REH WITH SMALL V */, {0, 0, 0x0693} /* ARABIC LETTER REH WITH RING */, {0, 0, 0x0694} /* ARABIC LETTER REH WITH DOT BELOW */, {0, 0, 0x0695} /* ARABIC LETTER REH WITH SMALL V BELOW */, {0, 0, 0x0696} /* ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE */, {0, 0, 0x0697} /* ARABIC LETTER REH WITH TWO DOTS ABOVE */, {0, 0, 0x0698} /* ARABIC LETTER JEH */, {0, 0, 0x0699} /* ARABIC LETTER REH WITH FOUR DOTS ABOVE */, {0, 0, 0x069A} /* ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE */, {0, 0, 0x069B} /* ARABIC LETTER SEEN WITH THREE DOTS BELOW */, {0, 0, 0x069C} /* ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE */, {0, 0, 0x06FA} /* ARABIC LETTER SHEEN WITH DOT BELOW */, {0, 0, 0x069D} /* ARABIC LETTER SAD WITH TWO DOTS BELOW */, {0, 0, 0x069E} /* ARABIC LETTER SAD WITH THREE DOTS ABOVE */, {0, 0, 0x06FB} /* ARABIC LETTER DAD WITH DOT BELOW */, {0, 0, 0x069F} /* ARABIC LETTER TAH WITH THREE DOTS ABOVE */, {0, 0, 0x06A0} /* ARABIC LETTER AIN WITH THREE DOTS ABOVE */, {0, 0, 0x06FC} /* ARABIC LETTER GHAIN WITH DOT BELOW */, {0, 0, 0x06A1} /* ARABIC LETTER DOTLESS FEH */, {0, 0, 0x06A2} /* ARABIC LETTER FEH WITH DOT MOVED BELOW */, {0, 0, 0x06A3} /* ARABIC LETTER FEH WITH DOT BELOW */, {0, 0, 0x06A4} /* ARABIC LETTER VEH */, {0, 0, 0x06A5} /* ARABIC LETTER FEH WITH THREE DOTS BELOW */, {0, 0, 0x06A6} /* ARABIC LETTER PEHEH */, {0, 0, 0x06A7} /* ARABIC LETTER QAF WITH DOT ABOVE */, {0, 0, 0x06A8} /* ARABIC LETTER QAF WITH THREE DOTS ABOVE */, {0, 0, 0x06A9} /* ARABIC LETTER KEHEH */, {0, 0, 0x06AA} /* ARABIC LETTER SWASH KAF */, {0, 0, 0x06AB} /* ARABIC LETTER KAF WITH RING */, {0, 0, 0x06AC} /* ARABIC LETTER KAF WITH DOT ABOVE */, {0, 0, 0x06AD} /* ARABIC LETTER NG */, {0, 0, 0x06AE} /* ARABIC LETTER KAF WITH THREE DOTS BELOW */, {0, 0, 0x06AF} /* ARABIC LETTER GAF */, {0, 0, 0x06B0} /* ARABIC LETTER GAF WITH RING */, {0, 0, 0x06B1} /* ARABIC LETTER NGOEH */, {0, 0, 0x06B2} /* ARABIC LETTER GAF WITH TWO DOTS BELOW */, {0, 0, 0x06B3} /* ARABIC LETTER GUEH */, {0, 0, 0x06B4} /* ARABIC LETTER GAF WITH THREE DOTS ABOVE */, {0, 0, 0x06B5} /* ARABIC LETTER LAM WITH SMALL V */, {0, 0, 0x06B6} /* ARABIC LETTER LAM WITH DOT ABOVE */, {0, 0, 0x06B7} /* ARABIC LETTER LAM WITH THREE DOTS ABOVE */, {0, 0, 0x06B8} /* ARABIC LETTER LAM WITH THREE DOTS BELOW */, {0, 0, 0x06BA} /* ARABIC LETTER NOON GHUNNA */, {0, 0, 0x06BB} /* ARABIC LETTER RNOON */, {0, 0, 0x06BC} /* ARABIC LETTER NOON WITH RING */, {0, 0, 0x06BD} /* ARABIC LETTER NOON WITH THREE DOTS ABOVE */, {0, 0, 0x06B9} /* ARABIC LETTER NOON WITH DOT BELOW */, {0, 0, 0x06BE} /* ARABIC LETTER HEH DOACHASHMEE */, {0, 0, 0x06C0} /* HEH WITH HAMZA ABOVE / ARABIC LETTER HEH WITH YEH ABOVE */, {0, 0, 0x06C4} /* ARABIC LETTER WAW WITH RING */, {0, 0, 0x06C5} /* KYRGHYZ OE / ARABIC LETTER KIRGHIZ OE */, {0, 0, 0x06C6} /* ARABIC LETTER OE */, {0, 0, 0x06CA} /* ARABIC LETTER WAW WITH TWO DOTS ABOVE */, {0, 0, 0x06CB} /* ARABIC LETTER VE */, {0, 0, 0x06CD} /* ARABIC LETTER YEH WITH TAIL */, {0, 0, 0x06CE} /* ARABIC LETTER YEH WITH SMALL V */, {0, 0, 0x06D0} /* ARABIC LETTER E */, {0, 0, 0x06D2} /* ARABIC LETTER YEH BARREE */, {0, 0, 0x06D3} /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 1, 0x0306} /* SHORT E / COMBINING BREVE */, {0, 1, 0x030C} /* SHORT U / COMBINING CARON */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_34page0 = { 0, marc8_34page0_dir }; struct yaz_iconv_trie *marc8_34ptrs [] = { &marc8_34page0, 0, }; unsigned long yaz_marc8_34_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_34ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 73 */ /* PAGE 0 */ struct yaz_iconv_trie_dir marc8_53page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 1, 0x0300} /* COMBINING GRAVE ACCENT */, {0, 1, 0x0301} /* COMBINING ACUTE ACCENT */, {0, 1, 0x0308} /* COMBINING DIAERESIS */, {0, 1, 0x0342} /* COMBINING GREEK PERISPOMENI / CIRCUMFLEX */, {0, 1, 0x0313} /* COMBINING COMMA ABOVE / SMOOTH BREATHING */, {0, 1, 0x0314} /* COMBINING REVERSED COMMA ABOVE / ROUGH BREATHING */, {0, 1, 0x0345} /* COMBINING GREEK YPOGEGRAMMENI / IOTA SUBSCRIPT */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x00AB} /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */, {0, 0, 0x00BB} /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */, {0, 0, 0x201C} /* LEFT DOUBLE QUOTATION MARK */, {0, 0, 0x201D} /* RIGHT DOUBLE QUOTATION MARK */, {0, 0, 0x0374} /* GREEK NUMERAL SIGN / UPPER PRIME */, {0, 0, 0x0375} /* GREEK LOWER NUMERAL SIGN / LOWER PRIME */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x0387} /* GREEK ANO TELEIA / RAISED DOT, GREEK SEMICOLON */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x037E} /* GREEK QUESTION MARK */, {0, 0, 0}, {0, 0, 0x0391} /* GREEK CAPITAL LETTER ALPHA */, {0, 0, 0x0392} /* GREEK CAPITAL LETTER BETA */, {0, 0, 0}, {0, 0, 0x0393} /* GREEK CAPITAL LETTER GAMMA */, {0, 0, 0x0394} /* GREEK CAPITAL LETTER DELTA */, {0, 0, 0x0395} /* GREEK CAPITAL LETTER EPSILON */, {0, 0, 0x03DA} /* GREEK LETTER STIGMA */, {0, 0, 0x03DC} /* GREEK LETTER DIGAMMA */, {0, 0, 0x0396} /* GREEK CAPITAL LETTER ZETA */, {0, 0, 0x0397} /* GREEK CAPITAL LETTER ETA */, {0, 0, 0x0398} /* GREEK CAPITAL LETTER THETA */, {0, 0, 0x0399} /* GREEK CAPITAL LETTER IOTA */, {0, 0, 0x039A} /* GREEK CAPITAL LETTER KAPPA */, {0, 0, 0x039B} /* GREEK CAPITAL LETTER LAMDA */, {0, 0, 0x039C} /* GREEK CAPITAL LETTER MU */, {0, 0, 0x039D} /* GREEK CAPITAL LETTER NU */, {0, 0, 0x039E} /* GREEK CAPITAL LETTER XI */, {0, 0, 0x039F} /* GREEK CAPITAL LETTER OMICRON */, {0, 0, 0x03A0} /* GREEK CAPITAL LETTER PI */, {0, 0, 0x03DE} /* GREEK LETTER KOPPA */, {0, 0, 0x03A1} /* GREEK CAPITAL LETTER RHO */, {0, 0, 0x03A3} /* GREEK CAPITAL LETTER SIGMA */, {0, 0, 0}, {0, 0, 0x03A4} /* GREEK CAPITAL LETTER TAU */, {0, 0, 0x03A5} /* GREEK CAPITAL LETTER UPSILON */, {0, 0, 0x03A6} /* GREEK CAPITAL LETTER PHI */, {0, 0, 0x03A7} /* GREEK CAPITAL LETTER CHI */, {0, 0, 0x03A8} /* GREEK CAPITAL LETTER PSI */, {0, 0, 0x03A9} /* GREEK CAPITAL LETTER OMEGA */, {0, 0, 0x03E0} /* GREEK LETTER SAMPI */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x03B1} /* GREEK SMALL LETTER ALPHA */, {0, 0, 0x03B2} /* GREEK SMALL LETTER BETA / SMALL LETTER BETA BEGINNING OF WORD */, {0, 0, 0x03D0} /* GREEK BETA SYMBOL / SMALL LETTER BETA MIDDLE OF WORD */, {0, 0, 0x03B3} /* GREEK SMALL LETTER GAMMA */, {0, 0, 0x03B4} /* GREEK SMALL LETTER DELTA */, {0, 0, 0x03B5} /* GREEK SMALL LETTER EPSILON */, {0, 0, 0x03DB} /* GREEK SMALL LETTER STIGMA */, {0, 0, 0x03DD} /* GREEK SMALL LETTER DIGAMMA */, {0, 0, 0x03B6} /* GREEK SMALL LETTER ZETA */, {0, 0, 0x03B7} /* GREEK SMALL LETTER ETA */, {0, 0, 0x03B8} /* GREEK SMALL LETTER THETA */, {0, 0, 0x03B9} /* GREEK SMALL LETTER IOTA */, {0, 0, 0x03BA} /* GREEK SMALL LETTER KAPPA */, {0, 0, 0x03BB} /* GREEK SMALL LETTER LAMDA */, {0, 0, 0x03BC} /* GREEK SMALL LETTER MU */, {0, 0, 0x03BD} /* GREEK SMALL LETTER NU */, {0, 0, 0x03BE} /* GREEK SMALL LETTER XI */, {0, 0, 0x03BF} /* GREEK SMALL LETTER OMICRON */, {0, 0, 0x03C0} /* GREEK SMALL LETTER PI */, {0, 0, 0x03DF} /* GREEK SMALL LETTER KOPPA */, {0, 0, 0x03C1} /* GREEK SMALL LETTER RHO */, {0, 0, 0x03C3} /* GREEK SMALL LETTER SIGMA */, {0, 0, 0x03C2} /* GREEK SMALL LETTER FINAL SIGMA / SMALL LETTER SIGMA END OF WORD */, {0, 0, 0x03C4} /* GREEK SMALL LETTER TAU */, {0, 0, 0x03C5} /* GREEK SMALL LETTER UPSILON */, {0, 0, 0x03C6} /* GREEK SMALL LETTER PHI */, {0, 0, 0x03C7} /* GREEK SMALL LETTER CHI */, {0, 0, 0x03C8} /* GREEK SMALL LETTER PSI */, {0, 0, 0x03C9} /* GREEK SMALL LETTER OMEGA */, {0, 0, 0x03E1} /* GREEK SMALL LETTER SAMPI */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_53page0 = { 0, marc8_53page0_dir }; struct yaz_iconv_trie *marc8_53ptrs [] = { &marc8_53page0, 0, }; unsigned long yaz_marc8_53_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_53ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 15739 */ /* PAGE 827 */ struct yaz_iconv_trie_flat marc8_31page827_flat[] = { {"\x25", 0, 0x300C}, /* Ideographic left corner bracket */ {"\x26", 0, 0x300D}, /* Ideographic right corner bracket */ {"\x31", 0, 0xFF3B}, /* Ideographic left square bracket */ {"\x32", 0, 0xFF3D}, /* Ideographic right square bracket */ {"\x33", 0, 0x3002}, /* Ideographic full stop */ {"\x34", 0, 0xFF0E}, /* Ideographic variant full stop */ {"\x35", 0, 0x3001}, /* Ideographic comma */ {"\x38", 0, 0xFF0C}, /* Ideographic variant comma */ {"\x39", 0, 0xFF1B}, /* Ideographic semicolon */ {"\x3A", 0, 0xFF1A}, /* Ideographic colon */ {"\x3B", 0, 0xFF1F}, /* Ideographic question mark */ {"\x3D", 0, 0xFF01}, /* Ideographic exclamation point */ {"\x59", 0, 0xFF0F}, /* Ideographic solidus */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page827 = { marc8_31page827_flat, 0 }; /* PAGE 826 */ struct yaz_iconv_trie_flat marc8_31page826_flat[] = { {"\x46", 0, 0x3013}, /* Ideographic geta symbol */ {"\x21", 0, 0xE8D0}, /* EACC component character */ {"\x22", 0, 0xE8D1}, /* EACC component character */ {"\x23", 0, 0xE8D2}, /* EACC component character */ {"\x24", 0, 0xE8D3}, /* EACC component character */ {"\x25", 0, 0xE8D4}, /* EACC component character */ {"\x26", 0, 0xE8D5}, /* EACC component character */ {"\x28", 0, 0xE8D6}, /* EACC component character */ {"\x29", 0, 0xE8D7}, /* EACC component character */ {"\x2A", 0, 0xE8D8}, /* EACC component character */ {"\x2B", 0, 0xE8D9}, /* EACC component character */ {"\x2C", 0, 0xE8DA}, /* EACC component character */ {"\x2D", 0, 0xE8DB}, /* EACC component character */ {"\x2E", 0, 0xE8DC}, /* EACC component character */ {"\x2F", 0, 0xE8DD}, /* EACC component character */ {"\x30", 0, 0xE8DE}, /* EACC component character */ {"\x32", 0, 0xE8DF}, /* EACC component character */ {"\x33", 0, 0xE8E0}, /* EACC component character */ {"\x34", 0, 0xE8E1}, /* EACC component character */ {"\x35", 0, 0xE8E2}, /* EACC component character */ {"\x36", 0, 0xE8E3}, /* EACC component character */ {"\x37", 0, 0xE8E4}, /* EACC component character */ {"\x38", 0, 0xE8E5}, /* EACC component character */ {"\x39", 0, 0xE8E6}, /* EACC component character */ {"\x3A", 0, 0xE8E7}, /* EACC component character */ {"\x3B", 0, 0xE8E8}, /* EACC component character */ {"\x3C", 0, 0xE8E9}, /* EACC component character */ {"\x3D", 0, 0xE8EA}, /* EACC component character */ {"\x3E", 0, 0xE8EB}, /* EACC component character */ {"\x3F", 0, 0xE8EC}, /* EACC component character */ {"\x40", 0, 0xE8ED}, /* EACC component character */ {"\x41", 0, 0xE8EE}, /* EACC component character */ {"\x42", 0, 0xE8EF}, /* EACC component character */ {"\x43", 0, 0xE8F0}, /* EACC component character */ {"\x44", 0, 0xE8F1}, /* EACC component character */ {"\x45", 0, 0xE8F2}, /* EACC component character */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page826 = { marc8_31page826_flat, 0 }; /* PAGE 825 */ struct yaz_iconv_trie_flat marc8_31page825_flat[] = { {"\x21", 0, 0x3000}, /* Ideographic space per ANSI Z39.64 */ {"\x20", 0, 0x3000}, /* Ideographic space in some implementations */ {"\x28", 0, 0xFF08}, /* Ideographic left parenthesis */ {"\x29", 0, 0xFF09}, /* Ideographic right parenthesis */ {"\x2D", 0, 0xFF0D}, /* Ideographic hyphen minus */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page825 = { marc8_31page825_flat, 0 }; /* PAGE 824 */ struct yaz_iconv_trie_flat marc8_31page824_flat[] = { {"\x21", 0, 0xAD35}, /* Korean hangul */ {"\x22", 0, 0xAD7B}, /* Korean hangul */ {"\x23", 0, 0xE8CA}, /* Korean hangul */ {"\x24", 0, 0xAD89}, /* Korean hangul */ {"\x25", 0, 0xAD9D}, /* Korean hangul */ {"\x26", 0, 0xADB9}, /* Korean hangul */ {"\x27", 0, 0xADD5}, /* Korean hangul */ {"\x28", 0, 0xAE07}, /* Korean hangul */ {"\x29", 0, 0xAE0E}, /* Korean hangul */ {"\x2A", 0, 0xAE0F}, /* Korean hangul */ {"\x2B", 0, 0xAE11}, /* Korean hangul */ {"\x2C", 0, 0xAE14}, /* Korean hangul */ {"\x2D", 0, 0xAE5F}, /* Korean hangul */ {"\x2E", 0, 0xAEED}, /* Korean hangul */ {"\x2F", 0, 0xAF09}, /* Korean hangul */ {"\x30", 0, 0xAF50}, /* Korean hangul */ {"\x31", 0, 0xAFBF}, /* Korean hangul */ {"\x32", 0, 0xB060}, /* Korean hangul */ {"\x33", 0, 0xB9C4}, /* Korean hangul */ {"\x34", 0, 0xC54D}, /* Korean hangul */ {"\x35", 0, 0xC54F}, /* Korean hangul */ {"\x36", 0, 0xC552}, /* Korean hangul */ {"\x37", 0, 0xC5AB}, /* Korean hangul */ {"\x38", 0, 0xC5B1}, /* Korean hangul */ {"\x39", 0, 0xC61C}, /* Korean hangul */ {"\x3A", 0, 0xC61D}, /* Korean hangul */ {"\x3B", 0, 0xC6FD}, /* Korean hangul */ {"\x3C", 0, 0xC717}, /* Korean hangul (unified with EACC 6F5658) */ {"\x3D", 0, 0xC733}, /* Korean hangul */ {"\x3E", 0, 0xCB4C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page824 = { marc8_31page824_flat, 0 }; /* PAGE 823 */ struct yaz_iconv_trie_flat marc8_31page823_flat[] = { {"\x21", 0, 0x3181}, /* Korean hangul */ {"\x22", 0, 0x3186}, /* Korean hangul */ {"\x23", 0, 0x317F}, /* Korean hangul */ {"\x24", 0, 0xE8B0}, /* Korean hangul (ancient) */ {"\x25", 0, 0x318D}, /* Korean hangul (ancient) */ {"\x40", 0, 0xE8B2}, /* Korean hangul (ancient) */ {"\x41", 0, 0xE8B3}, /* Korean hangul (ancient) */ {"\x42", 0, 0xE8B4}, /* Korean hangul (ancient) */ {"\x43", 0, 0xE8B5}, /* Korean hangul (ancient) */ {"\x44", 0, 0xE8B6}, /* Korean hangul (ancient) */ {"\x45", 0, 0xE8B7}, /* Korean hangul (ancient) */ {"\x46", 0, 0xE8B8}, /* Korean hangul (ancient) */ {"\x47", 0, 0xE8B9}, /* Korean hangul (ancient) */ {"\x48", 0, 0xE8BA}, /* Korean hangul (ancient) */ {"\x49", 0, 0xE8BB}, /* Korean hangul (ancient) */ {"\x4A", 0, 0xE8BC}, /* Korean hangul (ancient) */ {"\x4B", 0, 0xE8BD}, /* Korean hangul (ancient) */ {"\x4C", 0, 0xE8BE}, /* Korean hangul (ancient) */ {"\x4D", 0, 0xE8BF}, /* Korean hangul (ancient) */ {"\x4E", 0, 0xE8C0}, /* Korean hangul (ancient) */ {"\x4F", 0, 0xE8C1}, /* Korean hangul (ancient) */ {"\x50", 0, 0xE8C2}, /* Korean hangul (ancient) */ {"\x51", 0, 0xE8C3}, /* Korean hangul (ancient) */ {"\x52", 0, 0xE8C4}, /* Korean hangul (ancient) */ {"\x53", 0, 0xE8C5}, /* Korean hangul (ancient) */ {"\x54", 0, 0xE8C6}, /* Korean hangul (ancient) */ {"\x55", 0, 0xE8C7}, /* Korean hangul (ancient) */ {"\x56", 0, 0xE8C8}, /* Korean hangul (ancient) */ {"\x57", 0, 0xE8C9}, /* Korean hangul (ancient) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page823 = { marc8_31page823_flat, 0 }; /* PAGE 822 */ struct yaz_iconv_trie_flat marc8_31page822_flat[] = { {"\x21", 0, 0xD79D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page822 = { marc8_31page822_flat, 0 }; /* PAGE 821 */ struct yaz_iconv_trie_dir marc8_31page821_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xD5D9} /* Korean hangul */, {0, 0, 0xD5DB} /* Korean hangul */, {0, 0, 0xD5DD} /* Korean hangul */, {0, 0, 0xD5E4} /* Korean hangul */, {0, 0, 0xD5E5} /* Korean hangul */, {0, 0, 0xD5E8} /* Korean hangul */, {0, 0, 0xD5EC} /* Korean hangul */, {0, 0, 0xD5F4} /* Korean hangul */, {0, 0, 0xD5F5} /* Korean hangul */, {0, 0, 0xD5F7} /* Korean hangul */, {0, 0, 0xD5F9} /* Korean hangul */, {0, 0, 0xD600} /* Korean hangul */, {0, 0, 0xD601} /* Korean hangul */, {0, 0, 0xD604} /* Korean hangul */, {0, 0, 0xD608} /* Korean hangul */, {0, 0, 0xD610} /* Korean hangul */, {0, 0, 0xD611} /* Korean hangul */, {0, 0, 0xD613} /* Korean hangul */, {0, 0, 0xD614} /* Korean hangul */, {0, 0, 0xD615} /* Korean hangul */, {0, 0, 0xD61C} /* Korean hangul */, {0, 0, 0xD638} /* Korean hangul */, {0, 0, 0xD639} /* Korean hangul */, {0, 0, 0xD63C} /* Korean hangul */, {0, 0, 0xD640} /* Korean hangul */, {0, 0, 0xD648} /* Korean hangul */, {0, 0, 0xD649} /* Korean hangul */, {0, 0, 0xD64B} /* Korean hangul */, {0, 0, 0xD64D} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD654} /* Korean hangul */, {0, 0, 0xD655} /* Korean hangul */, {0, 0, 0xD658} /* Korean hangul */, {0, 0, 0xD65C} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD667} /* Korean hangul */, {0, 0, 0xD669} /* Korean hangul */, {0, 0, 0xD670} /* Korean hangul */, {0, 0, 0xD671} /* Korean hangul */, {0, 0, 0xD683} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD68C} /* Korean hangul */, {0, 0, 0xD68D} /* Korean hangul */, {0, 0, 0xD69F} /* Korean hangul */, {0, 0, 0xD6A1} /* Korean hangul */, {0, 0, 0xD6A8} /* Korean hangul */, {0, 0, 0xD6C4} /* Korean hangul */, {0, 0, 0xD6C5} /* Korean hangul */, {0, 0, 0xD6C8} /* Korean hangul */, {0, 0, 0xD6CC} /* Korean hangul */, {0, 0, 0xD6D1} /* Korean hangul */, {0, 0, 0xD6D4} /* Korean hangul */, {0, 0, 0xD6D7} /* Korean hangul */, {0, 0, 0xD6E0} /* Korean hangul */, {0, 0, 0xD6E4} /* Korean hangul */, {0, 0, 0xD6E8} /* Korean hangul */, {0, 0, 0xD6F0} /* Korean hangul */, {0, 0, 0xD6FC} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD700} /* Korean hangul */, {0, 0, 0xD711} /* Korean hangul */, {0, 0, 0xD718} /* Korean hangul */, {0, 0, 0xD719} /* Korean hangul */, {0, 0, 0xD71C} /* Korean hangul */, {0, 0, 0xD720} /* Korean hangul */, {0, 0, 0xD728} /* Korean hangul */, {0, 0, 0xD729} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD72D} /* Korean hangul */, {0, 0, 0xD734} /* Korean hangul */, {0, 0, 0xD73C} /* Korean hangul */, {0, 0, 0xD744} /* Korean hangul */, {0, 0, 0xD749} /* Korean hangul */, {0, 0, 0xD750} /* Korean hangul */, {0, 0, 0xD751} /* Korean hangul */, {0, 0, 0xD754} /* Korean hangul */, {0, 0, 0xD757} /* Korean hangul */, {0, 0, 0xD758} /* Korean hangul */, {0, 0, 0xD759} /* Korean hangul */, {0, 0, 0xD760} /* Korean hangul */, {0, 0, 0xD761} /* Korean hangul */, {0, 0, 0xD763} /* Korean hangul */, {0, 0, 0xD765} /* Korean hangul */, {0, 0, 0xD769} /* Korean hangul */, {0, 0, 0xD76C} /* Korean hangul */, {0, 0, 0xD770} /* Korean hangul */, {0, 0, 0xD774} /* Korean hangul */, {0, 0, 0xD788} /* Korean hangul */, {0, 0, 0xD789} /* Korean hangul */, {0, 0, 0xD78C} /* Korean hangul */, {0, 0, 0xD790} /* Korean hangul */, {0, 0, 0xD798} /* Korean hangul */, {0, 0, 0xD799} /* Korean hangul */, {0, 0, 0xD79B} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page821 = { 0, marc8_31page821_dir }; /* PAGE 820 */ struct yaz_iconv_trie_dir marc8_31page820_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xD33D} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD37C} /* Korean hangul */, {0, 0, 0xD37D} /* Korean hangul */, {0, 0, 0xD380} /* Korean hangul */, {0, 0, 0xD384} /* Korean hangul */, {0, 0, 0xD38C} /* Korean hangul */, {0, 0, 0xD38D} /* Korean hangul */, {0, 0, 0xD38F} /* Korean hangul */, {0, 0, 0xD390} /* Korean hangul */, {0, 0, 0xD391} /* Korean hangul */, {0, 0, 0xD398} /* Korean hangul */, {0, 0, 0xD399} /* Korean hangul */, {0, 0, 0xD39C} /* Korean hangul */, {0, 0, 0xD3A0} /* Korean hangul */, {0, 0, 0xD3A8} /* Korean hangul */, {0, 0, 0xD3A9} /* Korean hangul */, {0, 0, 0xD3AB} /* Korean hangul */, {0, 0, 0xD3AD} /* Korean hangul */, {0, 0, 0xD3B4} /* Korean hangul */, {0, 0, 0xD3B5} /* Korean hangul */, {0, 0, 0xD3B8} /* Korean hangul */, {0, 0, 0xD3BC} /* Korean hangul */, {0, 0, 0xD3C4} /* Korean hangul */, {0, 0, 0xD3C5} /* Korean hangul */, {0, 0, 0xD3C8} /* Korean hangul */, {0, 0, 0xD3C9} /* Korean hangul */, {0, 0, 0xD3D0} /* Korean hangul */, {0, 0, 0xD3EC} /* Korean hangul */, {0, 0, 0xD3ED} /* Korean hangul */, {0, 0, 0xD3F0} /* Korean hangul */, {0, 0, 0xD3F4} /* Korean hangul */, {0, 0, 0xD3FC} /* Korean hangul */, {0, 0, 0xD3FD} /* Korean hangul */, {0, 0, 0xD3FF} /* Korean hangul */, {0, 0, 0xD401} /* Korean hangul */, {0, 0, 0xD440} /* Korean hangul */, {0, 0, 0xD444} /* Korean hangul */, {0, 0, 0xD45C} /* Korean hangul */, {0, 0, 0xD46F} /* Korean hangul */, {0, 0, 0xD478} /* Korean hangul */, {0, 0, 0xD479} /* Korean hangul */, {0, 0, 0xD47C} /* Korean hangul */, {0, 0, 0xD480} /* Korean hangul */, {0, 0, 0xD488} /* Korean hangul */, {0, 0, 0xD489} /* Korean hangul */, {0, 0, 0xD48B} /* Korean hangul */, {0, 0, 0xD48D} /* Korean hangul */, {0, 0, 0xD4CC} /* Korean hangul */, {0, 0, 0xD4E8} /* Korean hangul */, {0, 0, 0xD504} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD508} /* Korean hangul */, {0, 0, 0xD50C} /* Korean hangul */, {0, 0, 0xD514} /* Korean hangul */, {0, 0, 0xD515} /* Korean hangul */, {0, 0, 0xD53C} /* Korean hangul */, {0, 0, 0xD53D} /* Korean hangul */, {0, 0, 0xD540} /* Korean hangul */, {0, 0, 0xD544} /* Korean hangul */, {0, 0, 0xD54C} /* Korean hangul */, {0, 0, 0xD54D} /* Korean hangul */, {0, 0, 0xD54F} /* Korean hangul */, {0, 0, 0xD551} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xD558} /* Korean hangul */, {0, 0, 0xD559} /* Korean hangul */, {0, 0, 0xD55C} /* Korean hangul */, {0, 0, 0xD560} /* Korean hangul */, {0, 0, 0xD565} /* Korean hangul */, {0, 0, 0xD568} /* Korean hangul */, {0, 0, 0xD569} /* Korean hangul */, {0, 0, 0xD56B} /* Korean hangul */, {0, 0, 0xD56C} /* Korean hangul */, {0, 0, 0xD56D} /* Korean hangul */, {0, 0, 0xD571} /* Korean hangul */, {0, 0, 0xD574} /* Korean hangul */, {0, 0, 0xD575} /* Korean hangul */, {0, 0, 0xD578} /* Korean hangul */, {0, 0, 0xD57C} /* Korean hangul */, {0, 0, 0xD584} /* Korean hangul */, {0, 0, 0xD585} /* Korean hangul */, {0, 0, 0xD587} /* Korean hangul */, {0, 0, 0xD588} /* Korean hangul */, {0, 0, 0xD589} /* Korean hangul */, {0, 0, 0xD590} /* Korean hangul */, {0, 0, 0xD5A5} /* Korean hangul */, {0, 0, 0xD5C8} /* Korean hangul */, {0, 0, 0xD5C9} /* Korean hangul */, {0, 0, 0xD5CC} /* Korean hangul */, {0, 0, 0xD5D0} /* Korean hangul */, {0, 0, 0xD5D2} /* Korean hangul */, {0, 0, 0xD5D8} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page820 = { 0, marc8_31page820_dir }; /* PAGE 819 */ struct yaz_iconv_trie_dir marc8_31page819_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xD0ED} /* Korean hangul */, {0, 0, 0xD0EF} /* Korean hangul */, {0, 0, 0xD0F0} /* Korean hangul */, {0, 0, 0xD0F1} /* Korean hangul */, {0, 0, 0xD130} /* Korean hangul */, {0, 0, 0xD131} /* Korean hangul */, {0, 0, 0xD134} /* Korean hangul */, {0, 0, 0xD138} /* Korean hangul */, {0, 0, 0xD140} /* Korean hangul */, {0, 0, 0xD141} /* Korean hangul */, {0, 0, 0xD143} /* Korean hangul */, {0, 0, 0xD144} /* Korean hangul */, {0, 0, 0xD145} /* Korean hangul */, {0, 0, 0xD14C} /* Korean hangul */, {0, 0, 0xD14D} /* Korean hangul */, {0, 0, 0xD150} /* Korean hangul */, {0, 0, 0xD154} /* Korean hangul */, {0, 0, 0xD15C} /* Korean hangul */, {0, 0, 0xD15D} /* Korean hangul */, {0, 0, 0xD15F} /* Korean hangul */, {0, 0, 0xD160} /* Korean hangul */, {0, 0, 0xD161} /* Korean hangul */, {0, 0, 0xD168} /* Korean hangul */, {0, 0, 0xD1A0} /* Korean hangul */, {0, 0, 0xD1A1} /* Korean hangul */, {0, 0, 0xD1A4} /* Korean hangul */, {0, 0, 0xD1A8} /* Korean hangul */, {0, 0, 0xD1B0} /* Korean hangul */, {0, 0, 0xD1B1} /* Korean hangul */, {0, 0, 0xD1B3} /* Korean hangul */, {0, 0, 0xD1B5} /* Korean hangul */, {0, 0, 0xD1D8} /* Korean hangul */, {0, 0, 0xD1F4} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD22C} /* Korean hangul */, {0, 0, 0xD22D} /* Korean hangul */, {0, 0, 0xD230} /* Korean hangul */, {0, 0, 0xD234} /* Korean hangul */, {0, 0, 0xD23C} /* Korean hangul */, {0, 0, 0xD23D} /* Korean hangul */, {0, 0, 0xD23F} /* Korean hangul */, {0, 0, 0xD241} /* Korean hangul */, {0, 0, 0xD264} /* Korean hangul */, {0, 0, 0xD277} /* Korean hangul */, {0, 0, 0xD280} /* Korean hangul */, {0, 0, 0xD284} /* Korean hangul */, {0, 0, 0xD288} /* Korean hangul */, {0, 0, 0xD290} /* Korean hangul */, {0, 0, 0xD291} /* Korean hangul */, {0, 0, 0xD293} /* Korean hangul */, {0, 0, 0xD295} /* Korean hangul */, {0, 0, 0xD29C} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xD2AC} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD2B8} /* Korean hangul */, {0, 0, 0xD2B9} /* Korean hangul */, {0, 0, 0xD2BC} /* Korean hangul */, {0, 0, 0xD2BF} /* Korean hangul */, {0, 0, 0xD2C0} /* Korean hangul */, {0, 0, 0xD2C8} /* Korean hangul */, {0, 0, 0xD2C9} /* Korean hangul */, {0, 0, 0xD2CB} /* Korean hangul */, {0, 0, 0xD2D4} /* Korean hangul */, {0, 0, 0xD1F8} /* Korean hangul */, {0, 0, 0xD2F0} /* Korean hangul */, {0, 0, 0xD2F1} /* Korean hangul */, {0, 0, 0xD2F4} /* Korean hangul */, {0, 0, 0xD2F8} /* Korean hangul */, {0, 0, 0xD300} /* Korean hangul */, {0, 0, 0xD301} /* Korean hangul */, {0, 0, 0xD305} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xD30C} /* Korean hangul */, {0, 0, 0xD30D} /* Korean hangul */, {0, 0, 0xD30E} /* Korean hangul */, {0, 0, 0xD310} /* Korean hangul */, {0, 0, 0xD314} /* Korean hangul */, {0, 0, 0xD31C} /* Korean hangul */, {0, 0, 0xD31D} /* Korean hangul */, {0, 0, 0xD31F} /* Korean hangul */, {0, 0, 0xD320} /* Korean hangul */, {0, 0, 0xD321} /* Korean hangul */, {0, 0, 0xD325} /* Korean hangul */, {0, 0, 0xD328} /* Korean hangul */, {0, 0, 0xD329} /* Korean hangul */, {0, 0, 0xD32C} /* Korean hangul */, {0, 0, 0xD330} /* Korean hangul */, {0, 0, 0xD338} /* Korean hangul */, {0, 0, 0xD339} /* Korean hangul */, {0, 0, 0xD33B} /* Korean hangul */, {0, 0, 0xD33C} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page819 = { 0, marc8_31page819_dir }; /* PAGE 818 */ struct yaz_iconv_trie_dir marc8_31page818_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xCEA5} /* Korean hangul */, {0, 0, 0xCEAC} /* Korean hangul */, {0, 0, 0xCEAD} /* Korean hangul */, {0, 0, 0xCEE4} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xCEE8} /* Korean hangul */, {0, 0, 0xCEEC} /* Korean hangul */, {0, 0, 0xCEF4} /* Korean hangul */, {0, 0, 0xCEF5} /* Korean hangul */, {0, 0, 0xCEF7} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xCEF9} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xCF00} /* Korean hangul */, {0, 0, 0xCF01} /* Korean hangul */, {0, 0, 0xCF04} /* Korean hangul */, {0, 0, 0xCF08} /* Korean hangul */, {0, 0, 0xCF10} /* Korean hangul */, {0, 0, 0xCF11} /* Korean hangul */, {0, 0, 0xCF13} /* Korean hangul */, {0, 0, 0xCF15} /* Korean hangul */, {0, 0, 0xCF1C} /* Korean hangul */, {0, 0, 0xCF20} /* Korean hangul */, {0, 0, 0xCF24} /* Korean hangul */, {0, 0, 0xCF2C} /* Korean hangul */, {0, 0, 0xCF2D} /* Korean hangul */, {0, 0, 0xCF2F} /* Korean hangul */, {0, 0, 0xCF30} /* Korean hangul */, {0, 0, 0xCF54} /* Korean hangul */, {0, 0, 0xCF55} /* Korean hangul */, {0, 0, 0xCF58} /* Korean hangul */, {0, 0, 0xCF5C} /* Korean hangul */, {0, 0, 0xCF64} /* Korean hangul */, {0, 0, 0xCF65} /* Korean hangul */, {0, 0, 0xCF67} /* Korean hangul */, {0, 0, 0xCF69} /* Korean hangul */, {0, 0, 0xCF70} /* Korean hangul */, {0, 0, 0xCF71} /* Korean hangul */, {0, 0, 0xCF74} /* Korean hangul */, {0, 0, 0xCF78} /* Korean hangul */, {0, 0, 0xCF80} /* Korean hangul */, {0, 0, 0xCF85} /* Korean hangul */, {0, 0, 0xCF8C} /* Korean hangul */, {0, 0, 0xCF8D} /* Korean hangul */, {0, 0, 0xCFA1} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xCFB0} /* Korean hangul */, {0, 0, 0xCFC4} /* Korean hangul */, {0, 0, 0xCFE0} /* Korean hangul */, {0, 0, 0xCFE1} /* Korean hangul */, {0, 0, 0xCFE4} /* Korean hangul */, {0, 0, 0xCFE8} /* Korean hangul */, {0, 0, 0xCFF0} /* Korean hangul */, {0, 0, 0xCFF3} /* Korean hangul */, {0, 0, 0xCFF5} /* Korean hangul */, {0, 0, 0xCFFC} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xD018} /* Korean hangul */, {0, 0, 0xD02D} /* Korean hangul */, {0, 0, 0xD034} /* Korean hangul */, {0, 0, 0xD035} /* Korean hangul */, {0, 0, 0xD038} /* Korean hangul */, {0, 0, 0xD050} /* Korean hangul */, {0, 0, 0xD06C} /* Korean hangul */, {0, 0, 0xD070} /* Korean hangul */, {0, 0, 0xD074} /* Korean hangul */, {0, 0, 0xD07C} /* Korean hangul */, {0, 0, 0xD07D} /* Korean hangul */, {0, 0, 0xD081} /* Korean hangul */, {0, 0, 0xD0A4} /* Korean hangul */, {0, 0, 0xD0A5} /* Korean hangul */, {0, 0, 0xD0A8} /* Korean hangul */, {0, 0, 0xD0AC} /* Korean hangul */, {0, 0, 0xD0B4} /* Korean hangul */, {0, 0, 0xD0B5} /* Korean hangul */, {0, 0, 0xD0B7} /* Korean hangul */, {0, 0, 0xD0B9} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xD0C0} /* Korean hangul */, {0, 0, 0xD0C1} /* Korean hangul */, {0, 0, 0xD0C4} /* Korean hangul */, {0, 0, 0xD0C8} /* Korean hangul */, {0, 0, 0xD0C9} /* Korean hangul */, {0, 0, 0xD0D0} /* Korean hangul */, {0, 0, 0xD0D1} /* Korean hangul */, {0, 0, 0xD0D3} /* Korean hangul */, {0, 0, 0xD0D4} /* Korean hangul */, {0, 0, 0xD0D5} /* Korean hangul */, {0, 0, 0xD0DC} /* Korean hangul */, {0, 0, 0xD0DD} /* Korean hangul */, {0, 0, 0xD0E0} /* Korean hangul */, {0, 0, 0xD0E4} /* Korean hangul */, {0, 0, 0xD0EC} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page818 = { 0, marc8_31page818_dir }; /* PAGE 817 */ struct yaz_iconv_trie_dir marc8_31page817_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xCC29} /* Korean hangul */, {0, 0, 0xCC2C} /* Korean hangul */, {0, 0, 0xCC2E} /* Korean hangul */, {0, 0, 0xCC2F} /* Korean hangul */, {0, 0, 0xCC30} /* Korean hangul */, {0, 0, 0xCC38} /* Korean hangul */, {0, 0, 0xCC39} /* Korean hangul */, {0, 0, 0xCC3B} /* Korean hangul */, {0, 0, 0xCC3C} /* Korean hangul */, {0, 0, 0xCC3D} /* Korean hangul */, {0, 0, 0xCC3E} /* Korean hangul */, {0, 0, 0xCC3F} /* Korean hangul */, {0, 0, 0xCC44} /* Korean hangul */, {0, 0, 0xCC45} /* Korean hangul */, {0, 0, 0xCC48} /* Korean hangul */, {0, 0, 0xCC4C} /* Korean hangul */, {0, 0, 0xCC54} /* Korean hangul */, {0, 0, 0xCC55} /* Korean hangul */, {0, 0, 0xCC58} /* Korean hangul */, {0, 0, 0xCC59} /* Korean hangul */, {0, 0, 0xCC60} /* Korean hangul */, {0, 0, 0xCC64} /* Korean hangul */, {0, 0, 0xCC70} /* Korean hangul */, {0, 0, 0xCC71} /* Korean hangul */, {0, 0, 0xCC98} /* Korean hangul */, {0, 0, 0xCC99} /* Korean hangul */, {0, 0, 0xCC9C} /* Korean hangul */, {0, 0, 0xCCA0} /* Korean hangul */, {0, 0, 0xCCA8} /* Korean hangul */, {0, 0, 0xCCA9} /* Korean hangul */, {0, 0, 0xCCAB} /* Korean hangul */, {0, 0, 0xCCAD} /* Korean hangul */, {0, 0, 0xCCB4} /* Korean hangul */, {0, 0, 0xCCB5} /* Korean hangul */, {0, 0, 0xCCB8} /* Korean hangul */, {0, 0, 0xCCBC} /* Korean hangul */, {0, 0, 0xCCC7} /* Korean hangul */, {0, 0, 0xCCD0} /* Korean hangul */, {0, 0, 0xCCE4} /* Korean hangul */, {0, 0, 0xCD08} /* Korean hangul */, {0, 0, 0xCD09} /* Korean hangul */, {0, 0, 0xCD0C} /* Korean hangul */, {0, 0, 0xCD10} /* Korean hangul */, {0, 0, 0xCD18} /* Korean hangul */, {0, 0, 0xCD19} /* Korean hangul */, {0, 0, 0xCD1B} /* Korean hangul */, {0, 0, 0xCD1D} /* Korean hangul */, {0, 0, 0xCD2C} /* Korean hangul */, {0, 0, 0xCD5C} /* Korean hangul */, {0, 0, 0xCD78} /* Korean hangul */, {0, 0, 0xCD94} /* Korean hangul */, {0, 0, 0xCD95} /* Korean hangul */, {0, 0, 0xCD98} /* Korean hangul */, {0, 0, 0xCD9C} /* Korean hangul */, {0, 0, 0xCDA4} /* Korean hangul */, {0, 0, 0xCDA5} /* Korean hangul */, {0, 0, 0xCDA7} /* Korean hangul */, {0, 0, 0xCDA9} /* Korean hangul */, {0, 0, 0xCDB0} /* Korean hangul */, {0, 0, 0xCDC4} /* Korean hangul */, {0, 0, 0xCDCC} /* Korean hangul */, {0, 0, 0xCDE8} /* Korean hangul */, {0, 0, 0xCE04} /* Korean hangul */, {0, 0, 0xCE20} /* Korean hangul */, {0, 0, 0xCE21} /* Korean hangul */, {0, 0, 0xCE30} /* Korean hangul */, {0, 0, 0xCE35} /* Korean hangul */, {0, 0, 0xCE58} /* Korean hangul */, {0, 0, 0xCE59} /* Korean hangul */, {0, 0, 0xCE5C} /* Korean hangul */, {0, 0, 0xCE60} /* Korean hangul */, {0, 0, 0xCE61} /* Korean hangul */, {0, 0, 0xCE68} /* Korean hangul */, {0, 0, 0xCE69} /* Korean hangul */, {0, 0, 0xCE6B} /* Korean hangul */, {0, 0, 0xCE6D} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xCE74} /* Korean hangul */, {0, 0, 0xCE75} /* Korean hangul */, {0, 0, 0xCE78} /* Korean hangul */, {0, 0, 0xCE7C} /* Korean hangul */, {0, 0, 0xCE84} /* Korean hangul */, {0, 0, 0xCE85} /* Korean hangul */, {0, 0, 0xCE87} /* Korean hangul */, {0, 0, 0xCE89} /* Korean hangul */, {0, 0, 0xCE90} /* Korean hangul */, {0, 0, 0xCE91} /* Korean hangul */, {0, 0, 0xCE94} /* Korean hangul */, {0, 0, 0xCE98} /* Korean hangul */, {0, 0, 0xCEA0} /* Korean hangul */, {0, 0, 0xCEA1} /* Korean hangul */, {0, 0, 0xCEA3} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page817 = { 0, marc8_31page817_dir }; /* PAGE 816 */ struct yaz_iconv_trie_dir marc8_31page816_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC974} /* Korean hangul */, {0, 0, 0xC988} /* Korean hangul */, {0, 0, 0xC989} /* Korean hangul */, {0, 0, 0xC98C} /* Korean hangul */, {0, 0, 0xC990} /* Korean hangul */, {0, 0, 0xC998} /* Korean hangul */, {0, 0, 0xC999} /* Korean hangul */, {0, 0, 0xC99D} /* Korean hangul */, {0, 0, 0xC9C0} /* Korean hangul */, {0, 0, 0xC9C1} /* Korean hangul */, {0, 0, 0xC9C4} /* Korean hangul */, {0, 0, 0xC9C7} /* Korean hangul */, {0, 0, 0xC9C8} /* Korean hangul */, {0, 0, 0xC9CA} /* Korean hangul */, {0, 0, 0xC9D0} /* Korean hangul */, {0, 0, 0xC9D1} /* Korean hangul */, {0, 0, 0xC9D3} /* Korean hangul */, {0, 0, 0xC9D5} /* Korean hangul */, {0, 0, 0xC9D6} /* Korean hangul */, {0, 0, 0xC9D9} /* Korean hangul */, {0, 0, 0xC9DA} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC9DC} /* Korean hangul */, {0, 0, 0xC9DD} /* Korean hangul */, {0, 0, 0xC9E0} /* Korean hangul */, {0, 0, 0xC9E2} /* Korean hangul */, {0, 0, 0xC9E4} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xC9E7} /* Korean hangul */, {0, 0, 0xC9EC} /* Korean hangul */, {0, 0, 0xC9ED} /* Korean hangul */, {0, 0, 0xC9EF} /* Korean hangul */, {0, 0, 0xC9F0} /* Korean hangul */, {0, 0, 0xC9F1} /* Korean hangul */, {0, 0, 0xC9F8} /* Korean hangul */, {0, 0, 0xC9F9} /* Korean hangul */, {0, 0, 0xC9FC} /* Korean hangul */, {0, 0, 0xCA00} /* Korean hangul */, {0, 0, 0xCA08} /* Korean hangul */, {0, 0, 0xCA09} /* Korean hangul */, {0, 0, 0xCA0B} /* Korean hangul */, {0, 0, 0xCA0C} /* Korean hangul */, {0, 0, 0xCA0D} /* Korean hangul */, {0, 0, 0xCA18} /* Korean hangul */, {0, 0, 0xCA4C} /* Korean hangul */, {0, 0, 0xCA4D} /* Korean hangul */, {0, 0, 0xCA50} /* Korean hangul */, {0, 0, 0xCA54} /* Korean hangul */, {0, 0, 0xCA5C} /* Korean hangul */, {0, 0, 0xCA5D} /* Korean hangul */, {0, 0, 0xCA61} /* Korean hangul */, {0, 0, 0xCA84} /* Korean hangul */, {0, 0, 0xCA98} /* Korean hangul */, {0, 0, 0xCABC} /* Korean hangul */, {0, 0, 0xCABD} /* Korean hangul */, {0, 0, 0xCAC0} /* Korean hangul */, {0, 0, 0xCAC4} /* Korean hangul */, {0, 0, 0xCACC} /* Korean hangul */, {0, 0, 0xCACD} /* Korean hangul */, {0, 0, 0xCAD1} /* Korean hangul */, {0, 0, 0xCAD2} /* Korean hangul */, {0, 0, 0xCAD3} /* Korean hangul */, {0, 0, 0xCAD8} /* Korean hangul */, {0, 0, 0xCAD9} /* Korean hangul */, {0, 0, 0xCB10} /* Korean hangul */, {0, 0, 0xCB14} /* Korean hangul */, {0, 0, 0xCB18} /* Korean hangul */, {0, 0, 0xCB20} /* Korean hangul */, {0, 0, 0xCB21} /* Korean hangul */, {0, 0, 0xCB41} /* Korean hangul */, {0, 0, 0xCB48} /* Korean hangul */, {0, 0, 0xCB49} /* Korean hangul */, {0, 0, 0xCB50} /* Korean hangul */, {0, 0, 0xCB58} /* Korean hangul */, {0, 0, 0xCB59} /* Korean hangul */, {0, 0, 0xCB5D} /* Korean hangul */, {0, 0, 0xCB64} /* Korean hangul */, {0, 0, 0xCBB8} /* Korean hangul */, {0, 0, 0xCBD4} /* Korean hangul */, {0, 0, 0xCBE4} /* Korean hangul */, {0, 0, 0xCBE7} /* Korean hangul */, {0, 0, 0xCC0C} /* Korean hangul */, {0, 0, 0xCC0D} /* Korean hangul */, {0, 0, 0xCC10} /* Korean hangul */, {0, 0, 0xCC14} /* Korean hangul */, {0, 0, 0xCC1C} /* Korean hangul */, {0, 0, 0xCC1D} /* Korean hangul */, {0, 0, 0xCC21} /* Korean hangul */, {0, 0, 0xCC22} /* Korean hangul */, {0, 0, 0xCC27} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xCC28} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page816 = { 0, marc8_31page816_dir }; /* PAGE 815 */ struct yaz_iconv_trie_dir marc8_31page815_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC7A1} /* Korean hangul */, {0, 0, 0xC7A3} /* Korean hangul */, {0, 0, 0xC7A4} /* Korean hangul */, {0, 0, 0xC7A5} /* Korean hangul */, {0, 0, 0xC7A6} /* Korean hangul */, {0, 0, 0xC7A7} /* Korean hangul */, {0, 0, 0xC7AC} /* Korean hangul */, {0, 0, 0xC7AD} /* Korean hangul */, {0, 0, 0xC7B0} /* Korean hangul */, {0, 0, 0xC7B4} /* Korean hangul */, {0, 0, 0xC7BC} /* Korean hangul */, {0, 0, 0xC7BD} /* Korean hangul */, {0, 0, 0xC7BF} /* Korean hangul */, {0, 0, 0xC7C0} /* Korean hangul */, {0, 0, 0xC7C1} /* Korean hangul */, {0, 0, 0xC7C8} /* Korean hangul */, {0, 0, 0xC7C9} /* Korean hangul */, {0, 0, 0xC7CC} /* Korean hangul */, {0, 0, 0xC7D8} /* Korean hangul */, {0, 0, 0xC800} /* Korean hangul */, {0, 0, 0xC801} /* Korean hangul */, {0, 0, 0xC804} /* Korean hangul */, {0, 0, 0xC808} /* Korean hangul */, {0, 0, 0xC80A} /* Korean hangul */, {0, 0, 0xC810} /* Korean hangul */, {0, 0, 0xC811} /* Korean hangul */, {0, 0, 0xC813} /* Korean hangul */, {0, 0, 0xC814} /* Korean hangul */, {0, 0, 0xC815} /* Korean hangul */, {0, 0, 0xC816} /* Korean hangul */, {0, 0, 0xC81C} /* Korean hangul */, {0, 0, 0xC81D} /* Korean hangul */, {0, 0, 0xC820} /* Korean hangul */, {0, 0, 0xC824} /* Korean hangul */, {0, 0, 0xC82C} /* Korean hangul */, {0, 0, 0xC82D} /* Korean hangul */, {0, 0, 0xC82F} /* Korean hangul */, {0, 0, 0xC838} /* Korean hangul */, {0, 0, 0xC83C} /* Korean hangul */, {0, 0, 0xC84C} /* Korean hangul */, {0, 0, 0xC870} /* Korean hangul */, {0, 0, 0xC871} /* Korean hangul */, {0, 0, 0xC874} /* Korean hangul */, {0, 0, 0xC878} /* Korean hangul */, {0, 0, 0xC87A} /* Korean hangul */, {0, 0, 0xC880} /* Korean hangul */, {0, 0, 0xC881} /* Korean hangul */, {0, 0, 0xC885} /* Korean hangul */, {0, 0, 0xC886} /* Korean hangul */, {0, 0, 0xC887} /* Korean hangul */, {0, 0, 0xC88B} /* Korean hangul */, {0, 0, 0xC88C} /* Korean hangul */, {0, 0, 0xC88D} /* Korean hangul */, {0, 0, 0xC890} /* Korean hangul */, {0, 0, 0xC894} /* Korean hangul */, {0, 0, 0xC89C} /* Korean hangul */, {0, 0, 0xC89D} /* Korean hangul */, {0, 0, 0xC89F} /* Korean hangul */, {0, 0, 0xC8A0} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xC8A8} /* Korean hangul */, {0, 0, 0xC8AC} /* Korean hangul */, {0, 0, 0xC8B0} /* Korean hangul */, {0, 0, 0xC8B8} /* Korean hangul */, {0, 0, 0xC8C4} /* Korean hangul */, {0, 0, 0xC8C8} /* Korean hangul */, {0, 0, 0xC8CC} /* Korean hangul */, {0, 0, 0xC8D4} /* Korean hangul */, {0, 0, 0xC8D5} /* Korean hangul */, {0, 0, 0xC8D7} /* Korean hangul */, {0, 0, 0xC8E0} /* Korean hangul */, {0, 0, 0xC8E4} /* Korean hangul */, {0, 0, 0xC8F0} /* Korean hangul */, {0, 0, 0xC8F1} /* Korean hangul */, {0, 0, 0xC8F5} /* Korean hangul */, {0, 0, 0xC8FC} /* Korean hangul */, {0, 0, 0xC8FD} /* Korean hangul */, {0, 0, 0xC900} /* Korean hangul */, {0, 0, 0xC904} /* Korean hangul */, {0, 0, 0xC906} /* Korean hangul */, {0, 0, 0xC90C} /* Korean hangul */, {0, 0, 0xC90D} /* Korean hangul */, {0, 0, 0xC90F} /* Korean hangul */, {0, 0, 0xC911} /* Korean hangul */, {0, 0, 0xC918} /* Korean hangul */, {0, 0, 0xC92C} /* Korean hangul */, {0, 0, 0xC950} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xC954} /* Korean hangul */, {0, 0, 0xC958} /* Korean hangul */, {0, 0, 0xC960} /* Korean hangul */, {0, 0, 0xC961} /* Korean hangul */, {0, 0, 0xC96C} /* Korean hangul */, {0, 0, 0xC970} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page815 = { 0, marc8_31page815_dir }; /* PAGE 814 */ struct yaz_iconv_trie_dir marc8_31page814_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC641} /* Korean hangul */, {0, 0, 0xC644} /* Korean hangul */, {0, 0, 0xC648} /* Korean hangul */, {0, 0, 0xC650} /* Korean hangul */, {0, 0, 0xC651} /* Korean hangul */, {0, 0, 0xC653} /* Korean hangul */, {0, 0, 0xC654} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xC65C} /* Korean hangul */, {0, 0, 0xC65D} /* Korean hangul */, {0, 0, 0xC660} /* Korean hangul */, {0, 0, 0xC671} /* Korean hangul */, {0, 0, 0xC678} /* Korean hangul */, {0, 0, 0xC679} /* Korean hangul */, {0, 0, 0xC67C} /* Korean hangul */, {0, 0, 0xC680} /* Korean hangul */, {0, 0, 0xC688} /* Korean hangul */, {0, 0, 0xC68B} /* Korean hangul */, {0, 0, 0xC68D} /* Korean hangul */, {0, 0, 0xC694} /* Korean hangul */, {0, 0, 0xC695} /* Korean hangul */, {0, 0, 0xC698} /* Korean hangul */, {0, 0, 0xC6A5} /* Korean hangul */, {0, 0, 0xC6A7} /* Korean hangul */, {0, 0, 0xC6A9} /* Korean hangul */, {0, 0, 0xC6B0} /* Korean hangul */, {0, 0, 0xC6B1} /* Korean hangul */, {0, 0, 0xC6B4} /* Korean hangul */, {0, 0, 0xC6B7} /* Korean hangul */, {0, 0, 0xC6B8} /* Korean hangul */, {0, 0, 0xC6B9} /* Korean hangul */, {0, 0, 0xC6BA} /* Korean hangul */, {0, 0, 0xC6C0} /* Korean hangul */, {0, 0, 0xC6C1} /* Korean hangul */, {0, 0, 0xC6C3} /* Korean hangul */, {0, 0, 0xC6C5} /* Korean hangul */, {0, 0, 0xC6CC} /* Korean hangul */, {0, 0, 0xC6CD} /* Korean hangul */, {0, 0, 0xC6D0} /* Korean hangul */, {0, 0, 0xC6D4} /* Korean hangul */, {0, 0, 0xC6DC} /* Korean hangul */, {0, 0, 0xC6DD} /* Korean hangul */, {0, 0, 0xC6DF} /* Korean hangul */, {0, 0, 0xC6E0} /* Korean hangul */, {0, 0, 0xC6E1} /* Korean hangul */, {0, 0, 0xC6E8} /* Korean hangul */, {0, 0, 0xC6E9} /* Korean hangul */, {0, 0, 0xC6EC} /* Korean hangul */, {0, 0, 0xC6F0} /* Korean hangul */, {0, 0, 0xC6F8} /* Korean hangul */, {0, 0, 0xC704} /* Korean hangul */, {0, 0, 0xC705} /* Korean hangul */, {0, 0, 0xC708} /* Korean hangul */, {0, 0, 0xC70C} /* Korean hangul */, {0, 0, 0xC714} /* Korean hangul */, {0, 0, 0xC717} /* Korean hangul */, {0, 0, 0xC719} /* Korean hangul */, {0, 0, 0xC720} /* Korean hangul */, {0, 0, 0xC721} /* Korean hangul */, {0, 0, 0xC724} /* Korean hangul */, {0, 0, 0xC728} /* Korean hangul */, {0, 0, 0xC730} /* Korean hangul */, {0, 0, 0xC735} /* Korean hangul */, {0, 0, 0xC737} /* Korean hangul */, {0, 0, 0xC73C} /* Korean hangul */, {0, 0, 0xC73D} /* Korean hangul */, {0, 0, 0xC740} /* Korean hangul */, {0, 0, 0xC744} /* Korean hangul */, {0, 0, 0xC74A} /* Korean hangul */, {0, 0, 0xC74C} /* Korean hangul */, {0, 0, 0xC74D} /* Korean hangul */, {0, 0, 0xC751} /* Korean hangul */, {0, 0, 0xC758} /* Korean hangul */, {0, 0, 0xC774} /* Korean hangul */, {0, 0, 0xC775} /* Korean hangul */, {0, 0, 0xC778} /* Korean hangul */, {0, 0, 0xC77C} /* Korean hangul */, {0, 0, 0xC77D} /* Korean hangul */, {0, 0, 0xC783} /* Korean hangul */, {0, 0, 0xC784} /* Korean hangul */, {0, 0, 0xC785} /* Korean hangul */, {0, 0, 0xC787} /* Korean hangul */, {0, 0, 0xC788} /* Korean hangul */, {0, 0, 0xC789} /* Korean hangul */, {0, 0, 0xC78A} /* Korean hangul */, {0, 0, 0xC78E} /* Korean hangul */, {0, 0, 0xC655} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xC790} /* Korean hangul */, {0, 0, 0xC791} /* Korean hangul */, {0, 0, 0xC794} /* Korean hangul */, {0, 0, 0xC796} /* Korean hangul */, {0, 0, 0xC798} /* Korean hangul */, {0, 0, 0xC7A0} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page814 = { 0, marc8_31page814_dir }; /* PAGE 813 */ struct yaz_iconv_trie_dir marc8_31page813_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC549} /* Korean hangul */, {0, 0, 0xC54A} /* Korean hangul */, {0, 0, 0xC54C} /* Korean hangul */, {0, 0, 0xC54E} /* Korean hangul */, {0, 0, 0xC553} /* Korean hangul */, {0, 0, 0xC554} /* Korean hangul */, {0, 0, 0xC555} /* Korean hangul */, {0, 0, 0xC557} /* Korean hangul */, {0, 0, 0xC558} /* Korean hangul */, {0, 0, 0xC559} /* Korean hangul */, {0, 0, 0xC55E} /* Korean hangul */, {0, 0, 0xC55F} /* Korean hangul */, {0, 0, 0xC560} /* Korean hangul */, {0, 0, 0xC561} /* Korean hangul */, {0, 0, 0xC564} /* Korean hangul */, {0, 0, 0xC568} /* Korean hangul */, {0, 0, 0xC570} /* Korean hangul */, {0, 0, 0xC571} /* Korean hangul */, {0, 0, 0xC573} /* Korean hangul */, {0, 0, 0xC574} /* Korean hangul */, {0, 0, 0xC575} /* Korean hangul */, {0, 0, 0xC57C} /* Korean hangul */, {0, 0, 0xC57D} /* Korean hangul */, {0, 0, 0xC580} /* Korean hangul */, {0, 0, 0xC584} /* Korean hangul */, {0, 0, 0xC587} /* Korean hangul */, {0, 0, 0xC58C} /* Korean hangul */, {0, 0, 0xC58D} /* Korean hangul */, {0, 0, 0xC58F} /* Korean hangul */, {0, 0, 0xC590} /* Korean hangul */, {0, 0, 0xC591} /* Korean hangul */, {0, 0, 0xC595} /* Korean hangul */, {0, 0, 0xC597} /* Korean hangul */, {0, 0, 0xC598} /* Korean hangul */, {0, 0, 0xC59C} /* Korean hangul */, {0, 0, 0xC5B4} /* Korean hangul */, {0, 0, 0xC5B5} /* Korean hangul */, {0, 0, 0xC5B6} /* Korean hangul */, {0, 0, 0xC5B8} /* Korean hangul */, {0, 0, 0xC5B9} /* Korean hangul */, {0, 0, 0xC5BA} /* Korean hangul */, {0, 0, 0xC5BB} /* Korean hangul */, {0, 0, 0xC5BC} /* Korean hangul */, {0, 0, 0xC5BD} /* Korean hangul */, {0, 0, 0xC5C4} /* Korean hangul */, {0, 0, 0xC5C5} /* Korean hangul */, {0, 0, 0xC5C6} /* Korean hangul */, {0, 0, 0xC5C7} /* Korean hangul */, {0, 0, 0xC5C8} /* Korean hangul */, {0, 0, 0xC5C9} /* Korean hangul */, {0, 0, 0xC5CA} /* Korean hangul */, {0, 0, 0xC5CC} /* Korean hangul */, {0, 0, 0xC5CE} /* Korean hangul */, {0, 0, 0xC5D0} /* Korean hangul */, {0, 0, 0xC5D1} /* Korean hangul */, {0, 0, 0xC5D4} /* Korean hangul */, {0, 0, 0xC5D8} /* Korean hangul */, {0, 0, 0xC5E0} /* Korean hangul */, {0, 0, 0xC5E1} /* Korean hangul */, {0, 0, 0xC5E3} /* Korean hangul */, {0, 0, 0xC5E5} /* Korean hangul */, {0, 0, 0xC5EC} /* Korean hangul */, {0, 0, 0xC5ED} /* Korean hangul */, {0, 0, 0xC5EE} /* Korean hangul */, {0, 0, 0xC5F0} /* Korean hangul */, {0, 0, 0xC5F4} /* Korean hangul */, {0, 0, 0xC5F6} /* Korean hangul */, {0, 0, 0xC5F7} /* Korean hangul */, {0, 0, 0xC5FC} /* Korean hangul */, {0, 0, 0xC5FD} /* Korean hangul */, {0, 0, 0xC5FE} /* Korean hangul */, {0, 0, 0xC5FF} /* Korean hangul */, {0, 0, 0xC600} /* Korean hangul */, {0, 0, 0xC601} /* Korean hangul */, {0, 0, 0xC606} /* Korean hangul */, {0, 0, 0xC607} /* Korean hangul */, {0, 0, 0xC608} /* Korean hangul */, {0, 0, 0xC60C} /* Korean hangul */, {0, 0, 0xC610} /* Korean hangul */, {0, 0, 0xC61B} /* Korean hangul */, {0, 0, 0xC624} /* Korean hangul */, {0, 0, 0xC625} /* Korean hangul */, {0, 0, 0xC628} /* Korean hangul */, {0, 0, 0xC62C} /* Korean hangul */, {0, 0, 0xC62D} /* Korean hangul */, {0, 0, 0xC62E} /* Korean hangul */, {0, 0, 0xC633} /* Korean hangul */, {0, 0, 0xC634} /* Korean hangul */, {0, 0, 0xC635} /* Korean hangul */, {0, 0, 0xC637} /* Korean hangul */, {0, 0, 0xC639} /* Korean hangul */, {0, 0, 0xC63A} /* Korean hangul */, {0, 0, 0xC63B} /* Korean hangul */, {0, 0, 0xC640} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page813 = { 0, marc8_31page813_dir }; /* PAGE 812 */ struct yaz_iconv_trie_dir marc8_31page812_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC2B7} /* Korean hangul */, {0, 0, 0xC2B9} /* Korean hangul */, {0, 0, 0xC2DC} /* Korean hangul */, {0, 0, 0xC2DD} /* Korean hangul */, {0, 0, 0xC2E0} /* Korean hangul */, {0, 0, 0xC2E3} /* Korean hangul */, {0, 0, 0xC2E4} /* Korean hangul */, {0, 0, 0xC2EB} /* Korean hangul */, {0, 0, 0xC2EC} /* Korean hangul */, {0, 0, 0xC2ED} /* Korean hangul */, {0, 0, 0xC2EF} /* Korean hangul */, {0, 0, 0xC2F1} /* Korean hangul */, {0, 0, 0xC2F6} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC2F8} /* Korean hangul */, {0, 0, 0xC2F9} /* Korean hangul */, {0, 0, 0xC2FC} /* Korean hangul */, {0, 0, 0xC300} /* Korean hangul */, {0, 0, 0xC308} /* Korean hangul */, {0, 0, 0xC309} /* Korean hangul */, {0, 0, 0xC30B} /* Korean hangul */, {0, 0, 0xC30C} /* Korean hangul */, {0, 0, 0xC30D} /* Korean hangul */, {0, 0, 0xC313} /* Korean hangul */, {0, 0, 0xC314} /* Korean hangul */, {0, 0, 0xC315} /* Korean hangul */, {0, 0, 0xC318} /* Korean hangul */, {0, 0, 0xC31C} /* Korean hangul */, {0, 0, 0xC324} /* Korean hangul */, {0, 0, 0xC327} /* Korean hangul */, {0, 0, 0xC328} /* Korean hangul */, {0, 0, 0xC329} /* Korean hangul */, {0, 0, 0xC330} /* Korean hangul */, {0, 0, 0xC343} /* Korean hangul */, {0, 0, 0xC345} /* Korean hangul */, {0, 0, 0xC368} /* Korean hangul */, {0, 0, 0xC369} /* Korean hangul */, {0, 0, 0xC36C} /* Korean hangul */, {0, 0, 0xC370} /* Korean hangul */, {0, 0, 0xC372} /* Korean hangul */, {0, 0, 0xC378} /* Korean hangul */, {0, 0, 0xC379} /* Korean hangul */, {0, 0, 0xC37C} /* Korean hangul */, {0, 0, 0xC37D} /* Korean hangul */, {0, 0, 0xC384} /* Korean hangul */, {0, 0, 0xC388} /* Korean hangul */, {0, 0, 0xC399} /* Korean hangul */, {0, 0, 0xC3D8} /* Korean hangul */, {0, 0, 0xC3D9} /* Korean hangul */, {0, 0, 0xC3DC} /* Korean hangul */, {0, 0, 0xC3DF} /* Korean hangul */, {0, 0, 0xC3E0} /* Korean hangul */, {0, 0, 0xC3E8} /* Korean hangul */, {0, 0, 0xC3ED} /* Korean hangul */, {0, 0, 0xC3F4} /* Korean hangul */, {0, 0, 0xC3F5} /* Korean hangul */, {0, 0, 0xC410} /* Korean hangul */, {0, 0, 0xC42C} /* Korean hangul */, {0, 0, 0xC430} /* Korean hangul */, {0, 0, 0xC434} /* Korean hangul */, {0, 0, 0xC43C} /* Korean hangul */, {0, 0, 0xC43F} /* Korean hangul */, {0, 0, 0xC464} /* Korean hangul */, {0, 0, 0xC465} /* Korean hangul */, {0, 0, 0xC468} /* Korean hangul */, {0, 0, 0xC46C} /* Korean hangul */, {0, 0, 0xC474} /* Korean hangul */, {0, 0, 0xC479} /* Korean hangul */, {0, 0, 0xC480} /* Korean hangul */, {0, 0, 0xC494} /* Korean hangul */, {0, 0, 0xC4D4} /* Korean hangul */, {0, 0, 0xC4D5} /* Korean hangul */, {0, 0, 0xC4F0} /* Korean hangul */, {0, 0, 0xC4F1} /* Korean hangul */, {0, 0, 0xC4F4} /* Korean hangul */, {0, 0, 0xC4F8} /* Korean hangul */, {0, 0, 0xC500} /* Korean hangul */, {0, 0, 0xC501} /* Korean hangul */, {0, 0, 0xC50C} /* Korean hangul */, {0, 0, 0xC510} /* Korean hangul */, {0, 0, 0xC528} /* Korean hangul */, {0, 0, 0xC529} /* Korean hangul */, {0, 0, 0xC52C} /* Korean hangul */, {0, 0, 0xC530} /* Korean hangul */, {0, 0, 0xC538} /* Korean hangul */, {0, 0, 0xC539} /* Korean hangul */, {0, 0, 0xC53B} /* Korean hangul */, {0, 0, 0xC53D} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC544} /* Korean hangul */, {0, 0, 0xC545} /* Korean hangul */, {0, 0, 0xC548} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page812 = { 0, marc8_31page812_dir }; /* PAGE 811 */ struct yaz_iconv_trie_dir marc8_31page811_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC11C} /* Korean hangul */, {0, 0, 0xC11D} /* Korean hangul */, {0, 0, 0xC11E} /* Korean hangul */, {0, 0, 0xC120} /* Korean hangul */, {0, 0, 0xC123} /* Korean hangul */, {0, 0, 0xC124} /* Korean hangul */, {0, 0, 0xC125} /* Korean hangul */, {0, 0, 0xC126} /* Korean hangul */, {0, 0, 0xC127} /* Korean hangul */, {0, 0, 0xC12A} /* Korean hangul */, {0, 0, 0xC12C} /* Korean hangul */, {0, 0, 0xC12D} /* Korean hangul */, {0, 0, 0xC12F} /* Korean hangul */, {0, 0, 0xC130} /* Korean hangul */, {0, 0, 0xC131} /* Korean hangul */, {0, 0, 0xC136} /* Korean hangul */, {0, 0, 0xC138} /* Korean hangul */, {0, 0, 0xC139} /* Korean hangul */, {0, 0, 0xC13C} /* Korean hangul */, {0, 0, 0xC140} /* Korean hangul */, {0, 0, 0xC148} /* Korean hangul */, {0, 0, 0xC149} /* Korean hangul */, {0, 0, 0xC14B} /* Korean hangul */, {0, 0, 0xC14D} /* Korean hangul */, {0, 0, 0xC151} /* Korean hangul */, {0, 0, 0xC154} /* Korean hangul */, {0, 0, 0xC158} /* Korean hangul */, {0, 0, 0xC167} /* Korean hangul */, {0, 0, 0xC168} /* Korean hangul */, {0, 0, 0xC170} /* Korean hangul */, {0, 0, 0xC18C} /* Korean hangul */, {0, 0, 0xC18D} /* Korean hangul */, {0, 0, 0xC18E} /* Korean hangul */, {0, 0, 0xC190} /* Korean hangul */, {0, 0, 0xC194} /* Korean hangul */, {0, 0, 0xC19C} /* Korean hangul */, {0, 0, 0xC19D} /* Korean hangul */, {0, 0, 0xC19F} /* Korean hangul */, {0, 0, 0xC1A1} /* Korean hangul */, {0, 0, 0xC1A5} /* Korean hangul */, {0, 0, 0xC1A8} /* Korean hangul */, {0, 0, 0xC1A9} /* Korean hangul */, {0, 0, 0xC1B0} /* Korean hangul */, {0, 0, 0xC1C4} /* Korean hangul */, {0, 0, 0xC1C8} /* Korean hangul */, {0, 0, 0xC1D7} /* Korean hangul */, {0, 0, 0xC1E0} /* Korean hangul */, {0, 0, 0xC1E4} /* Korean hangul */, {0, 0, 0xC1E8} /* Korean hangul */, {0, 0, 0xC1F0} /* Korean hangul */, {0, 0, 0xC1F1} /* Korean hangul */, {0, 0, 0xC1F3} /* Korean hangul */, {0, 0, 0xC1FC} /* Korean hangul */, {0, 0, 0xC1FD} /* Korean hangul */, {0, 0, 0xC200} /* Korean hangul */, {0, 0, 0xC204} /* Korean hangul */, {0, 0, 0xC20D} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xC218} /* Korean hangul */, {0, 0, 0xC219} /* Korean hangul */, {0, 0, 0xC21C} /* Korean hangul */, {0, 0, 0xC21F} /* Korean hangul */, {0, 0, 0xC220} /* Korean hangul */, {0, 0, 0xC228} /* Korean hangul */, {0, 0, 0xC229} /* Korean hangul */, {0, 0, 0xC22B} /* Korean hangul */, {0, 0, 0xC22D} /* Korean hangul */, {0, 0, 0xC22F} /* Korean hangul */, {0, 0, 0xC231} /* Korean hangul */, {0, 0, 0xC232} /* Korean hangul */, {0, 0, 0xC234} /* Korean hangul */, {0, 0, 0xC250} /* Korean hangul */, {0, 0, 0xC258} /* Korean hangul */, {0, 0, 0xC26C} /* Korean hangul */, {0, 0, 0xC270} /* Korean hangul */, {0, 0, 0xC274} /* Korean hangul */, {0, 0, 0xC27C} /* Korean hangul */, {0, 0, 0xC27D} /* Korean hangul */, {0, 0, 0xC27F} /* Korean hangul */, {0, 0, 0xC281} /* Korean hangul */, {0, 0, 0xC288} /* Korean hangul */, {0, 0, 0xC289} /* Korean hangul */, {0, 0, 0xC290} /* Korean hangul */, {0, 0, 0xC298} /* Korean hangul */, {0, 0, 0xC29B} /* Korean hangul */, {0, 0, 0xC29D} /* Korean hangul */, {0, 0, 0xC2A4} /* Korean hangul */, {0, 0, 0xC2A5} /* Korean hangul */, {0, 0, 0xC2A8} /* Korean hangul */, {0, 0, 0xC2AC} /* Korean hangul */, {0, 0, 0xC2AD} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xC2B4} /* Korean hangul */, {0, 0, 0xC2B5} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page811 = { 0, marc8_31page811_dir }; /* PAGE 810 */ struct yaz_iconv_trie_dir marc8_31page810_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xBE70} /* Korean hangul */, {0, 0, 0xBE71} /* Korean hangul */, {0, 0, 0xBE73} /* Korean hangul */, {0, 0, 0xBE74} /* Korean hangul */, {0, 0, 0xBE75} /* Korean hangul */, {0, 0, 0xBE7B} /* Korean hangul */, {0, 0, 0xBE7C} /* Korean hangul */, {0, 0, 0xBE7D} /* Korean hangul */, {0, 0, 0xBE80} /* Korean hangul */, {0, 0, 0xBE84} /* Korean hangul */, {0, 0, 0xBE8C} /* Korean hangul */, {0, 0, 0xBE8F} /* Korean hangul */, {0, 0, 0xBE90} /* Korean hangul */, {0, 0, 0xBE91} /* Korean hangul */, {0, 0, 0xBE98} /* Korean hangul */, {0, 0, 0xBEA8} /* Korean hangul */, {0, 0, 0xBED0} /* Korean hangul */, {0, 0, 0xBED1} /* Korean hangul */, {0, 0, 0xBED4} /* Korean hangul */, {0, 0, 0xBED7} /* Korean hangul */, {0, 0, 0xBED8} /* Korean hangul */, {0, 0, 0xBEE0} /* Korean hangul */, {0, 0, 0xBEE3} /* Korean hangul */, {0, 0, 0xBEE4} /* Korean hangul */, {0, 0, 0xBEE5} /* Korean hangul */, {0, 0, 0xBEEC} /* Korean hangul */, {0, 0, 0xBF08} /* Korean hangul */, {0, 0, 0xBF09} /* Korean hangul */, {0, 0, 0xBF18} /* Korean hangul */, {0, 0, 0xBF1D} /* Korean hangul */, {0, 0, 0xBF40} /* Korean hangul */, {0, 0, 0xBF41} /* Korean hangul */, {0, 0, 0xBF44} /* Korean hangul */, {0, 0, 0xBF48} /* Korean hangul */, {0, 0, 0xBF50} /* Korean hangul */, {0, 0, 0xBF51} /* Korean hangul */, {0, 0, 0xBF55} /* Korean hangul */, {0, 0, 0xBFB0} /* Korean hangul */, {0, 0, 0xBFC0} /* Korean hangul */, {0, 0, 0xBFC5} /* Korean hangul */, {0, 0, 0xBFCC} /* Korean hangul */, {0, 0, 0xBFCD} /* Korean hangul */, {0, 0, 0xBFD0} /* Korean hangul */, {0, 0, 0xBFD4} /* Korean hangul */, {0, 0, 0xBFDC} /* Korean hangul */, {0, 0, 0xBFDD} /* Korean hangul */, {0, 0, 0xBFE1} /* Korean hangul */, {0, 0, 0xC058} /* Korean hangul */, {0, 0, 0xC059} /* Korean hangul */, {0, 0, 0xC05C} /* Korean hangul */, {0, 0, 0xC060} /* Korean hangul */, {0, 0, 0xC068} /* Korean hangul */, {0, 0, 0xC069} /* Korean hangul */, {0, 0, 0xC090} /* Korean hangul */, {0, 0, 0xC091} /* Korean hangul */, {0, 0, 0xC094} /* Korean hangul */, {0, 0, 0xC098} /* Korean hangul */, {0, 0, 0xC0A0} /* Korean hangul */, {0, 0, 0xC0A3} /* Korean hangul */, {0, 0, 0xC0A5} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xC0AC} /* Korean hangul */, {0, 0, 0xC0AD} /* Korean hangul */, {0, 0, 0xC0AE} /* Korean hangul */, {0, 0, 0xC0AF} /* Korean hangul */, {0, 0, 0xC0B0} /* Korean hangul */, {0, 0, 0xC0B3} /* Korean hangul */, {0, 0, 0xC0B4} /* Korean hangul */, {0, 0, 0xC0B5} /* Korean hangul */, {0, 0, 0xC0B6} /* Korean hangul */, {0, 0, 0xC0BC} /* Korean hangul */, {0, 0, 0xC0BD} /* Korean hangul */, {0, 0, 0xC0BF} /* Korean hangul */, {0, 0, 0xC0C0} /* Korean hangul */, {0, 0, 0xC0C1} /* Korean hangul */, {0, 0, 0xC0C5} /* Korean hangul */, {0, 0, 0xC0C8} /* Korean hangul */, {0, 0, 0xC0C9} /* Korean hangul */, {0, 0, 0xC0CC} /* Korean hangul */, {0, 0, 0xC0CF} /* Korean hangul */, {0, 0, 0xC0D0} /* Korean hangul */, {0, 0, 0xC0D8} /* Korean hangul */, {0, 0, 0xC0D9} /* Korean hangul */, {0, 0, 0xC0DB} /* Korean hangul */, {0, 0, 0xC0DC} /* Korean hangul */, {0, 0, 0xC0DD} /* Korean hangul */, {0, 0, 0xC0E4} /* Korean hangul */, {0, 0, 0xC0E5} /* Korean hangul */, {0, 0, 0xC0E8} /* Korean hangul */, {0, 0, 0xC0EC} /* Korean hangul */, {0, 0, 0xC0F4} /* Korean hangul */, {0, 0, 0xC0F7} /* Korean hangul */, {0, 0, 0xC0F9} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page810 = { 0, marc8_31page810_dir }; /* PAGE 809 */ struct yaz_iconv_trie_dir marc8_31page809_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xBC40} /* Korean hangul */, {0, 0, 0xBC41} /* Korean hangul */, {0, 0, 0xBC43} /* Korean hangul */, {0, 0, 0xBC44} /* Korean hangul */, {0, 0, 0xBC45} /* Korean hangul */, {0, 0, 0xBC84} /* Korean hangul */, {0, 0, 0xBC85} /* Korean hangul */, {0, 0, 0xBC88} /* Korean hangul */, {0, 0, 0xBC8B} /* Korean hangul */, {0, 0, 0xBC8C} /* Korean hangul */, {0, 0, 0xBC94} /* Korean hangul */, {0, 0, 0xBC95} /* Korean hangul */, {0, 0, 0xBC97} /* Korean hangul */, {0, 0, 0xBC98} /* Korean hangul */, {0, 0, 0xBC99} /* Korean hangul */, {0, 0, 0xBC9A} /* Korean hangul */, {0, 0, 0xBCA0} /* Korean hangul */, {0, 0, 0xBCA1} /* Korean hangul */, {0, 0, 0xBCA4} /* Korean hangul */, {0, 0, 0xBCA7} /* Korean hangul */, {0, 0, 0xBCA8} /* Korean hangul */, {0, 0, 0xBCB0} /* Korean hangul */, {0, 0, 0xBCB1} /* Korean hangul */, {0, 0, 0xBCB3} /* Korean hangul */, {0, 0, 0xBCB5} /* Korean hangul */, {0, 0, 0xBCBC} /* Korean hangul */, {0, 0, 0xBCBD} /* Korean hangul */, {0, 0, 0xBCC0} /* Korean hangul */, {0, 0, 0xBCC4} /* Korean hangul */, {0, 0, 0xBCCC} /* Korean hangul */, {0, 0, 0xBCCD} /* Korean hangul */, {0, 0, 0xBCCF} /* Korean hangul */, {0, 0, 0xBCD0} /* Korean hangul */, {0, 0, 0xBCD1} /* Korean hangul */, {0, 0, 0xBCD2} /* Korean hangul */, {0, 0, 0xBCD5} /* Korean hangul */, {0, 0, 0xBCF4} /* Korean hangul */, {0, 0, 0xBCF5} /* Korean hangul */, {0, 0, 0xBCF6} /* Korean hangul */, {0, 0, 0xBCF8} /* Korean hangul */, {0, 0, 0xBCFC} /* Korean hangul */, {0, 0, 0xBD04} /* Korean hangul */, {0, 0, 0xBD05} /* Korean hangul */, {0, 0, 0xBD07} /* Korean hangul */, {0, 0, 0xBD09} /* Korean hangul */, {0, 0, 0xBD10} /* Korean hangul */, {0, 0, 0xBD14} /* Korean hangul */, {0, 0, 0xBD24} /* Korean hangul */, {0, 0, 0xBD48} /* Korean hangul */, {0, 0, 0xBD49} /* Korean hangul */, {0, 0, 0xBD4C} /* Korean hangul */, {0, 0, 0xBD50} /* Korean hangul */, {0, 0, 0xBD58} /* Korean hangul */, {0, 0, 0xBD59} /* Korean hangul */, {0, 0, 0xBD64} /* Korean hangul */, {0, 0, 0xBD80} /* Korean hangul */, {0, 0, 0xBD81} /* Korean hangul */, {0, 0, 0xBD84} /* Korean hangul */, {0, 0, 0xBD87} /* Korean hangul */, {0, 0, 0xBD88} /* Korean hangul */, {0, 0, 0xBD89} /* Korean hangul */, {0, 0, 0xBD90} /* Korean hangul */, {0, 0, 0xBD91} /* Korean hangul */, {0, 0, 0xBD93} /* Korean hangul */, {0, 0, 0xBD95} /* Korean hangul */, {0, 0, 0xBD99} /* Korean hangul */, {0, 0, 0xBD9C} /* Korean hangul */, {0, 0, 0xBDD4} /* Korean hangul */, {0, 0, 0xBDF0} /* Korean hangul */, {0, 0, 0xBE0C} /* Korean hangul */, {0, 0, 0xBE0D} /* Korean hangul */, {0, 0, 0xBE10} /* Korean hangul */, {0, 0, 0xBE14} /* Korean hangul */, {0, 0, 0xBE1C} /* Korean hangul */, {0, 0, 0xBE1D} /* Korean hangul */, {0, 0, 0xBE1F} /* Korean hangul */, {0, 0, 0xBE44} /* Korean hangul */, {0, 0, 0xBE45} /* Korean hangul */, {0, 0, 0xBE48} /* Korean hangul */, {0, 0, 0xBE4B} /* Korean hangul */, {0, 0, 0xBE4C} /* Korean hangul */, {0, 0, 0xBE4E} /* Korean hangul */, {0, 0, 0xBE54} /* Korean hangul */, {0, 0, 0xBE55} /* Korean hangul */, {0, 0, 0xBE57} /* Korean hangul */, {0, 0, 0xBE59} /* Korean hangul */, {0, 0, 0xBE5A} /* Korean hangul */, {0, 0, 0xBE5B} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xBE60} /* Korean hangul */, {0, 0, 0xBE61} /* Korean hangul */, {0, 0, 0xBE64} /* Korean hangul */, {0, 0, 0xBE68} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page809 = { 0, marc8_31page809_dir }; /* PAGE 808 */ struct yaz_iconv_trie_dir marc8_31page808_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xBA38} /* Korean hangul */, {0, 0, 0xBA39} /* Korean hangul */, {0, 0, 0xBA3C} /* Korean hangul */, {0, 0, 0xBA40} /* Korean hangul */, {0, 0, 0xBA48} /* Korean hangul */, {0, 0, 0xBA49} /* Korean hangul */, {0, 0, 0xBA4B} /* Korean hangul */, {0, 0, 0xBA4D} /* Korean hangul */, {0, 0, 0xBA4E} /* Korean hangul */, {0, 0, 0xBA53} /* Korean hangul */, {0, 0, 0xBA54} /* Korean hangul */, {0, 0, 0xBA55} /* Korean hangul */, {0, 0, 0xBA58} /* Korean hangul */, {0, 0, 0xBA5C} /* Korean hangul */, {0, 0, 0xBA64} /* Korean hangul */, {0, 0, 0xBA65} /* Korean hangul */, {0, 0, 0xBA67} /* Korean hangul */, {0, 0, 0xBA70} /* Korean hangul */, {0, 0, 0xBA71} /* Korean hangul */, {0, 0, 0xBA74} /* Korean hangul */, {0, 0, 0xBA78} /* Korean hangul */, {0, 0, 0xBA83} /* Korean hangul */, {0, 0, 0xBA84} /* Korean hangul */, {0, 0, 0xBA85} /* Korean hangul */, {0, 0, 0xBA87} /* Korean hangul */, {0, 0, 0xBAA8} /* Korean hangul */, {0, 0, 0xBAA9} /* Korean hangul */, {0, 0, 0xBAAB} /* Korean hangul */, {0, 0, 0xBAAC} /* Korean hangul */, {0, 0, 0xBAB0} /* Korean hangul */, {0, 0, 0xBAB8} /* Korean hangul */, {0, 0, 0xBAB9} /* Korean hangul */, {0, 0, 0xBABB} /* Korean hangul */, {0, 0, 0xBABD} /* Korean hangul */, {0, 0, 0xBAC3} /* Korean hangul */, {0, 0, 0xBAFC} /* Korean hangul */, {0, 0, 0xBB0F} /* Korean hangul */, {0, 0, 0xBB18} /* Korean hangul */, {0, 0, 0xBB34} /* Korean hangul */, {0, 0, 0xBB35} /* Korean hangul */, {0, 0, 0xBB36} /* Korean hangul */, {0, 0, 0xBB38} /* Korean hangul */, {0, 0, 0xBB3B} /* Korean hangul */, {0, 0, 0xBB3C} /* Korean hangul */, {0, 0, 0xBB3D} /* Korean hangul */, {0, 0, 0xBB44} /* Korean hangul */, {0, 0, 0xBB47} /* Korean hangul */, {0, 0, 0xBB49} /* Korean hangul */, {0, 0, 0xBB4D} /* Korean hangul */, {0, 0, 0xBB4F} /* Korean hangul */, {0, 0, 0xBB50} /* Korean hangul */, {0, 0, 0xBB54} /* Korean hangul */, {0, 0, 0xBB58} /* Korean hangul */, {0, 0, 0xBB61} /* Korean hangul */, {0, 0, 0xBB63} /* Korean hangul */, {0, 0, 0xBB88} /* Korean hangul */, {0, 0, 0xBB8C} /* Korean hangul */, {0, 0, 0xBBA4} /* Korean hangul */, {0, 0, 0xBBC0} /* Korean hangul */, {0, 0, 0xBBC4} /* Korean hangul */, {0, 0, 0xBBC8} /* Korean hangul */, {0, 0, 0xBBD0} /* Korean hangul */, {0, 0, 0xBBF8} /* Korean hangul */, {0, 0, 0xBBF9} /* Korean hangul */, {0, 0, 0xBBFC} /* Korean hangul */, {0, 0, 0xBBFF} /* Korean hangul */, {0, 0, 0xBC00} /* Korean hangul */, {0, 0, 0xBC08} /* Korean hangul */, {0, 0, 0xBC09} /* Korean hangul */, {0, 0, 0xBC0B} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xBC0D} /* Korean hangul */, {0, 0, 0xBC0F} /* Korean hangul */, {0, 0, 0xBC11} /* Korean hangul */, {0, 0, 0xBBB4} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xBC14} /* Korean hangul */, {0, 0, 0xBC15} /* Korean hangul */, {0, 0, 0xBC16} /* Korean hangul */, {0, 0, 0xBC18} /* Korean hangul */, {0, 0, 0xBC1B} /* Korean hangul */, {0, 0, 0xBC1C} /* Korean hangul */, {0, 0, 0xBC1D} /* Korean hangul */, {0, 0, 0xBC1F} /* Korean hangul */, {0, 0, 0xBC24} /* Korean hangul */, {0, 0, 0xBC25} /* Korean hangul */, {0, 0, 0xBC27} /* Korean hangul */, {0, 0, 0xBC29} /* Korean hangul */, {0, 0, 0xBC2D} /* Korean hangul */, {0, 0, 0xBC30} /* Korean hangul */, {0, 0, 0xBC31} /* Korean hangul */, {0, 0, 0xBC34} /* Korean hangul */, {0, 0, 0xBC37} /* Korean hangul */, {0, 0, 0xBC38} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page808 = { 0, marc8_31page808_dir }; /* PAGE 807 */ struct yaz_iconv_trie_dir marc8_31page807_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xB7FD} /* Korean hangul */, {0, 0, 0xB7FF} /* Korean hangul */, {0, 0, 0xB800} /* Korean hangul */, {0, 0, 0xB801} /* Korean hangul */, {0, 0, 0xB807} /* Korean hangul */, {0, 0, 0xB808} /* Korean hangul */, {0, 0, 0xB809} /* Korean hangul */, {0, 0, 0xB80C} /* Korean hangul */, {0, 0, 0xB810} /* Korean hangul */, {0, 0, 0xB818} /* Korean hangul */, {0, 0, 0xB819} /* Korean hangul */, {0, 0, 0xB81B} /* Korean hangul */, {0, 0, 0xB81D} /* Korean hangul */, {0, 0, 0xB824} /* Korean hangul */, {0, 0, 0xB825} /* Korean hangul */, {0, 0, 0xB828} /* Korean hangul */, {0, 0, 0xB82C} /* Korean hangul */, {0, 0, 0xB834} /* Korean hangul */, {0, 0, 0xB835} /* Korean hangul */, {0, 0, 0xB837} /* Korean hangul */, {0, 0, 0xB838} /* Korean hangul */, {0, 0, 0xB839} /* Korean hangul */, {0, 0, 0xB840} /* Korean hangul */, {0, 0, 0xB85C} /* Korean hangul */, {0, 0, 0xB85D} /* Korean hangul */, {0, 0, 0xB860} /* Korean hangul */, {0, 0, 0xB864} /* Korean hangul */, {0, 0, 0xB86C} /* Korean hangul */, {0, 0, 0xB86D} /* Korean hangul */, {0, 0, 0xB86F} /* Korean hangul */, {0, 0, 0xB871} /* Korean hangul */, {0, 0, 0xB8B0} /* Korean hangul */, {0, 0, 0xB8CC} /* Korean hangul */, {0, 0, 0xB8E1} /* Korean hangul */, {0, 0, 0xB8E8} /* Korean hangul */, {0, 0, 0xB8E9} /* Korean hangul */, {0, 0, 0xB8EC} /* Korean hangul */, {0, 0, 0xB8F0} /* Korean hangul */, {0, 0, 0xB8F8} /* Korean hangul */, {0, 0, 0xB8F9} /* Korean hangul */, {0, 0, 0xB8FB} /* Korean hangul */, {0, 0, 0xB8FD} /* Korean hangul */, {0, 0, 0xB904} /* Korean hangul */, {0, 0, 0xB93C} /* Korean hangul */, {0, 0, 0xB958} /* Korean hangul */, {0, 0, 0xB959} /* Korean hangul */, {0, 0, 0xB95C} /* Korean hangul */, {0, 0, 0xB960} /* Korean hangul */, {0, 0, 0xB968} /* Korean hangul */, {0, 0, 0xB96D} /* Korean hangul */, {0, 0, 0xB974} /* Korean hangul */, {0, 0, 0xB975} /* Korean hangul */, {0, 0, 0xB978} /* Korean hangul */, {0, 0, 0xB97C} /* Korean hangul */, {0, 0, 0xB984} /* Korean hangul */, {0, 0, 0xB985} /* Korean hangul */, {0, 0, 0xB987} /* Korean hangul */, {0, 0, 0xB989} /* Korean hangul */, {0, 0, 0xB98E} /* Korean hangul */, {0, 0, 0xB9AC} /* Korean hangul */, {0, 0, 0xB9AD} /* Korean hangul */, {0, 0, 0xB9B0} /* Korean hangul */, {0, 0, 0xB9B4} /* Korean hangul */, {0, 0, 0xB9BC} /* Korean hangul */, {0, 0, 0xB9BD} /* Korean hangul */, {0, 0, 0xB9BF} /* Korean hangul */, {0, 0, 0xB9C1} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xB9C8} /* Korean hangul */, {0, 0, 0xB9C9} /* Korean hangul */, {0, 0, 0xB9CC} /* Korean hangul */, {0, 0, 0xB9CE} /* Korean hangul */, {0, 0, 0xB9CF} /* Korean hangul */, {0, 0, 0xB9D0} /* Korean hangul */, {0, 0, 0xB9D1} /* Korean hangul */, {0, 0, 0xB9D8} /* Korean hangul */, {0, 0, 0xB9D9} /* Korean hangul */, {0, 0, 0xB9DB} /* Korean hangul */, {0, 0, 0xB9DD} /* Korean hangul */, {0, 0, 0xB9DE} /* Korean hangul */, {0, 0, 0xB9E1} /* Korean hangul */, {0, 0, 0xB9E3} /* Korean hangul */, {0, 0, 0xB9E4} /* Korean hangul */, {0, 0, 0xB9E5} /* Korean hangul */, {0, 0, 0xB9E8} /* Korean hangul */, {0, 0, 0xB9EC} /* Korean hangul */, {0, 0, 0xB9F4} /* Korean hangul */, {0, 0, 0xB9F5} /* Korean hangul */, {0, 0, 0xB9F7} /* Korean hangul */, {0, 0, 0xB9F8} /* Korean hangul */, {0, 0, 0xB9F9} /* Korean hangul */, {0, 0, 0xB9FA} /* Korean hangul */, {0, 0, 0xBA00} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page807 = { 0, marc8_31page807_dir }; /* PAGE 806 */ struct yaz_iconv_trie_dir marc8_31page806_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xB540} /* Korean hangul */, {0, 0, 0xB541} /* Korean hangul */, {0, 0, 0xB543} /* Korean hangul */, {0, 0, 0xB544} /* Korean hangul */, {0, 0, 0xB545} /* Korean hangul */, {0, 0, 0xB54B} /* Korean hangul */, {0, 0, 0xB54C} /* Korean hangul */, {0, 0, 0xB54D} /* Korean hangul */, {0, 0, 0xB550} /* Korean hangul */, {0, 0, 0xB554} /* Korean hangul */, {0, 0, 0xB55C} /* Korean hangul */, {0, 0, 0xB55D} /* Korean hangul */, {0, 0, 0xB55F} /* Korean hangul */, {0, 0, 0xB560} /* Korean hangul */, {0, 0, 0xB561} /* Korean hangul */, {0, 0, 0xB5A0} /* Korean hangul */, {0, 0, 0xB5A1} /* Korean hangul */, {0, 0, 0xB5A4} /* Korean hangul */, {0, 0, 0xB5A8} /* Korean hangul */, {0, 0, 0xB5AB} /* Korean hangul */, {0, 0, 0xB5B0} /* Korean hangul */, {0, 0, 0xB5B1} /* Korean hangul */, {0, 0, 0xB5B3} /* Korean hangul */, {0, 0, 0xB5B4} /* Korean hangul */, {0, 0, 0xB5B5} /* Korean hangul */, {0, 0, 0xB5BB} /* Korean hangul */, {0, 0, 0xB5BC} /* Korean hangul */, {0, 0, 0xB5C0} /* Korean hangul */, {0, 0, 0xB5C4} /* Korean hangul */, {0, 0, 0xB5CC} /* Korean hangul */, {0, 0, 0xB5CF} /* Korean hangul */, {0, 0, 0xB5D1} /* Korean hangul */, {0, 0, 0xB610} /* Korean hangul */, {0, 0, 0xB611} /* Korean hangul */, {0, 0, 0xB614} /* Korean hangul */, {0, 0, 0xB618} /* Korean hangul */, {0, 0, 0xB625} /* Korean hangul */, {0, 0, 0xB664} /* Korean hangul */, {0, 0, 0xB69C} /* Korean hangul */, {0, 0, 0xB69D} /* Korean hangul */, {0, 0, 0xB6A4} /* Korean hangul */, {0, 0, 0xB6AB} /* Korean hangul */, {0, 0, 0xB6AC} /* Korean hangul */, {0, 0, 0xB6B1} /* Korean hangul */, {0, 0, 0xB6F0} /* Korean hangul */, {0, 0, 0xB6F4} /* Korean hangul */, {0, 0, 0xB6F8} /* Korean hangul */, {0, 0, 0xB700} /* Korean hangul */, {0, 0, 0xB701} /* Korean hangul */, {0, 0, 0xB728} /* Korean hangul */, {0, 0, 0xB729} /* Korean hangul */, {0, 0, 0xB72C} /* Korean hangul */, {0, 0, 0xB72F} /* Korean hangul */, {0, 0, 0xB730} /* Korean hangul */, {0, 0, 0xB738} /* Korean hangul */, {0, 0, 0xB739} /* Korean hangul */, {0, 0, 0xB73B} /* Korean hangul */, {0, 0, 0xB744} /* Korean hangul */, {0, 0, 0xB748} /* Korean hangul */, {0, 0, 0xB760} /* Korean hangul */, {0, 0, 0xB764} /* Korean hangul */, {0, 0, 0xB768} /* Korean hangul */, {0, 0, 0xB770} /* Korean hangul */, {0, 0, 0xB771} /* Korean hangul */, {0, 0, 0xB775} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xB77C} /* Korean hangul */, {0, 0, 0xB77D} /* Korean hangul */, {0, 0, 0xB780} /* Korean hangul */, {0, 0, 0xB784} /* Korean hangul */, {0, 0, 0xB78C} /* Korean hangul */, {0, 0, 0xB78D} /* Korean hangul */, {0, 0, 0xB78F} /* Korean hangul */, {0, 0, 0xB790} /* Korean hangul */, {0, 0, 0xB791} /* Korean hangul */, {0, 0, 0xB797} /* Korean hangul */, {0, 0, 0xB798} /* Korean hangul */, {0, 0, 0xB799} /* Korean hangul */, {0, 0, 0xB79C} /* Korean hangul */, {0, 0, 0xB7A0} /* Korean hangul */, {0, 0, 0xB7A8} /* Korean hangul */, {0, 0, 0xB7A9} /* Korean hangul */, {0, 0, 0xB7AB} /* Korean hangul */, {0, 0, 0xB7AC} /* Korean hangul */, {0, 0, 0xB7AD} /* Korean hangul */, {0, 0, 0xB7B4} /* Korean hangul */, {0, 0, 0xB7B5} /* Korean hangul */, {0, 0, 0xB7C9} /* Korean hangul */, {0, 0, 0xB7EC} /* Korean hangul */, {0, 0, 0xB7ED} /* Korean hangul */, {0, 0, 0xB7F0} /* Korean hangul */, {0, 0, 0xB7F4} /* Korean hangul */, {0, 0, 0xB7FC} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page806 = { 0, marc8_31page806_dir }; /* PAGE 805 */ struct yaz_iconv_trie_dir marc8_31page805_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xB304} /* Korean hangul */, {0, 0, 0xB308} /* Korean hangul */, {0, 0, 0xB310} /* Korean hangul */, {0, 0, 0xB311} /* Korean hangul */, {0, 0, 0xB313} /* Korean hangul */, {0, 0, 0xB314} /* Korean hangul */, {0, 0, 0xB315} /* Korean hangul */, {0, 0, 0xB354} /* Korean hangul */, {0, 0, 0xB355} /* Korean hangul */, {0, 0, 0xB358} /* Korean hangul */, {0, 0, 0xB35B} /* Korean hangul */, {0, 0, 0xB35C} /* Korean hangul */, {0, 0, 0xB35F} /* Korean hangul */, {0, 0, 0xB364} /* Korean hangul */, {0, 0, 0xB365} /* Korean hangul */, {0, 0, 0xB367} /* Korean hangul */, {0, 0, 0xB368} /* Korean hangul */, {0, 0, 0xB369} /* Korean hangul */, {0, 0, 0xB36A} /* Korean hangul */, {0, 0, 0xB36B} /* Korean hangul */, {0, 0, 0xB36E} /* Korean hangul */, {0, 0, 0xB370} /* Korean hangul */, {0, 0, 0xB371} /* Korean hangul */, {0, 0, 0xB374} /* Korean hangul */, {0, 0, 0xB378} /* Korean hangul */, {0, 0, 0xB380} /* Korean hangul */, {0, 0, 0xB383} /* Korean hangul */, {0, 0, 0xB385} /* Korean hangul */, {0, 0, 0xB38C} /* Korean hangul */, {0, 0, 0xB3C4} /* Korean hangul */, {0, 0, 0xB3C5} /* Korean hangul */, {0, 0, 0xB3C8} /* Korean hangul */, {0, 0, 0xB3CB} /* Korean hangul */, {0, 0, 0xB3CC} /* Korean hangul */, {0, 0, 0xB3D0} /* Korean hangul */, {0, 0, 0xB3D4} /* Korean hangul */, {0, 0, 0xB3D5} /* Korean hangul */, {0, 0, 0xB3D7} /* Korean hangul */, {0, 0, 0xB3D9} /* Korean hangul */, {0, 0, 0xB3DB} /* Korean hangul */, {0, 0, 0xB3FC} /* Korean hangul */, {0, 0, 0xB400} /* Korean hangul */, {0, 0, 0xB410} /* Korean hangul */, {0, 0, 0xB418} /* Korean hangul */, {0, 0, 0xB41C} /* Korean hangul */, {0, 0, 0xB420} /* Korean hangul */, {0, 0, 0xB428} /* Korean hangul */, {0, 0, 0xB429} /* Korean hangul */, {0, 0, 0xB42B} /* Korean hangul */, {0, 0, 0xB42C} /* Korean hangul */, {0, 0, 0xB450} /* Korean hangul */, {0, 0, 0xB451} /* Korean hangul */, {0, 0, 0xB454} /* Korean hangul */, {0, 0, 0xB458} /* Korean hangul */, {0, 0, 0xB460} /* Korean hangul */, {0, 0, 0xB461} /* Korean hangul */, {0, 0, 0xB463} /* Korean hangul */, {0, 0, 0xB465} /* Korean hangul */, {0, 0, 0xB46C} /* Korean hangul */, {0, 0, 0xB480} /* Korean hangul */, {0, 0, 0xB488} /* Korean hangul */, {0, 0, 0xB4A4} /* Korean hangul */, {0, 0, 0xB4B7} /* Korean hangul */, {0, 0, 0xB4C0} /* Korean hangul */, {0, 0, 0xB4D0} /* Korean hangul */, {0, 0, 0xB4DC} /* Korean hangul */, {0, 0, 0xB4DD} /* Korean hangul */, {0, 0, 0xB4E0} /* Korean hangul */, {0, 0, 0xB4E3} /* Korean hangul */, {0, 0, 0xB4E4} /* Korean hangul */, {0, 0, 0xB4EC} /* Korean hangul */, {0, 0, 0xB4ED} /* Korean hangul */, {0, 0, 0xB4EF} /* Korean hangul */, {0, 0, 0xB4F1} /* Korean hangul */, {0, 0, 0xB514} /* Korean hangul */, {0, 0, 0xB515} /* Korean hangul */, {0, 0, 0xB518} /* Korean hangul */, {0, 0, 0xB51B} /* Korean hangul */, {0, 0, 0xB51C} /* Korean hangul */, {0, 0, 0xB524} /* Korean hangul */, {0, 0, 0xB525} /* Korean hangul */, {0, 0, 0xB527} /* Korean hangul */, {0, 0, 0xB528} /* Korean hangul */, {0, 0, 0xB529} /* Korean hangul */, {0, 0, 0xB52A} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xB530} /* Korean hangul */, {0, 0, 0xB531} /* Korean hangul */, {0, 0, 0xB532} /* Korean hangul */, {0, 0, 0xB534} /* Korean hangul */, {0, 0, 0xB537} /* Korean hangul */, {0, 0, 0xB538} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page805 = { 0, marc8_31page805_dir }; /* PAGE 804 */ struct yaz_iconv_trie_dir marc8_31page804_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xB128} /* Korean hangul */, {0, 0, 0xB12C} /* Korean hangul */, {0, 0, 0xB134} /* Korean hangul */, {0, 0, 0xB135} /* Korean hangul */, {0, 0, 0xB137} /* Korean hangul */, {0, 0, 0xB140} /* Korean hangul */, {0, 0, 0xB141} /* Korean hangul */, {0, 0, 0xB144} /* Korean hangul */, {0, 0, 0xB150} /* Korean hangul */, {0, 0, 0xB151} /* Korean hangul */, {0, 0, 0xB153} /* Korean hangul */, {0, 0, 0xB154} /* Korean hangul */, {0, 0, 0xB155} /* Korean hangul */, {0, 0, 0xB158} /* Korean hangul */, {0, 0, 0xB15C} /* Korean hangul */, {0, 0, 0xB178} /* Korean hangul */, {0, 0, 0xB179} /* Korean hangul */, {0, 0, 0xB17A} /* Korean hangul */, {0, 0, 0xB17C} /* Korean hangul */, {0, 0, 0xB180} /* Korean hangul */, {0, 0, 0xB188} /* Korean hangul */, {0, 0, 0xB189} /* Korean hangul */, {0, 0, 0xB18B} /* Korean hangul */, {0, 0, 0xB18D} /* Korean hangul */, {0, 0, 0xB192} /* Korean hangul */, {0, 0, 0xB193} /* Korean hangul */, {0, 0, 0xB194} /* Korean hangul */, {0, 0, 0xB1A8} /* Korean hangul */, {0, 0, 0xB1CC} /* Korean hangul */, {0, 0, 0xB1D0} /* Korean hangul */, {0, 0, 0xB1D4} /* Korean hangul */, {0, 0, 0xB1DC} /* Korean hangul */, {0, 0, 0xB1E8} /* Korean hangul */, {0, 0, 0xB1FD} /* Korean hangul */, {0, 0, 0xB204} /* Korean hangul */, {0, 0, 0xB205} /* Korean hangul */, {0, 0, 0xB208} /* Korean hangul */, {0, 0, 0xB20B} /* Korean hangul */, {0, 0, 0xB20C} /* Korean hangul */, {0, 0, 0xB213} /* Korean hangul */, {0, 0, 0xB214} /* Korean hangul */, {0, 0, 0xB215} /* Korean hangul */, {0, 0, 0xB217} /* Korean hangul */, {0, 0, 0xB220} /* Korean hangul */, {0, 0, 0xB233} /* Korean hangul */, {0, 0, 0xB234} /* Korean hangul */, {0, 0, 0xB258} /* Korean hangul */, {0, 0, 0xB25C} /* Korean hangul */, {0, 0, 0xB260} /* Korean hangul */, {0, 0, 0xB268} /* Korean hangul */, {0, 0, 0xB269} /* Korean hangul */, {0, 0, 0xB274} /* Korean hangul */, {0, 0, 0xB284} /* Korean hangul */, {0, 0, 0xB289} /* Korean hangul */, {0, 0, 0xB290} /* Korean hangul */, {0, 0, 0xB291} /* Korean hangul */, {0, 0, 0xB294} /* Korean hangul */, {0, 0, 0xB298} /* Korean hangul */, {0, 0, 0xB299} /* Korean hangul */, {0, 0, 0xB2A0} /* Korean hangul */, {0, 0, 0xB2A1} /* Korean hangul */, {0, 0, 0xB2A5} /* Korean hangul */, {0, 0, 0xB2A6} /* Korean hangul */, {0, 0, 0xB2AA} /* Korean hangul */, {0, 0, 0xB2AC} /* Korean hangul */, {0, 0, 0xB2C8} /* Korean hangul */, {0, 0, 0xB2C9} /* Korean hangul */, {0, 0, 0xB2CC} /* Korean hangul */, {0, 0, 0xB2D0} /* Korean hangul */, {0, 0, 0xB2D8} /* Korean hangul */, {0, 0, 0xB2D9} /* Korean hangul */, {0, 0, 0xB2DB} /* Korean hangul */, {0, 0, 0xB2DD} /* Korean hangul */, {0, 0, 0xB2E2} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xB2E4} /* Korean hangul */, {0, 0, 0xB2E5} /* Korean hangul */, {0, 0, 0xB2E6} /* Korean hangul */, {0, 0, 0xB2E8} /* Korean hangul */, {0, 0, 0xB2EB} /* Korean hangul */, {0, 0, 0xB2EC} /* Korean hangul */, {0, 0, 0xB2ED} /* Korean hangul */, {0, 0, 0xB2EE} /* Korean hangul */, {0, 0, 0xB2F3} /* Korean hangul */, {0, 0, 0xB2F4} /* Korean hangul */, {0, 0, 0xB2F5} /* Korean hangul */, {0, 0, 0xB2F7} /* Korean hangul */, {0, 0, 0xB2F9} /* Korean hangul */, {0, 0, 0xB2FA} /* Korean hangul */, {0, 0, 0xB2FB} /* Korean hangul */, {0, 0, 0xB2FF} /* Korean hangul */, {0, 0, 0xB300} /* Korean hangul */, {0, 0, 0xB301} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page804 = { 0, marc8_31page804_dir }; /* PAGE 803 */ struct yaz_iconv_trie_dir marc8_31page803_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xAF9C} /* Korean hangul */, {0, 0, 0xAFB8} /* Korean hangul */, {0, 0, 0xAFB9} /* Korean hangul */, {0, 0, 0xAFBC} /* Korean hangul */, {0, 0, 0xAFC0} /* Korean hangul */, {0, 0, 0xAFC7} /* Korean hangul */, {0, 0, 0xAFC8} /* Korean hangul */, {0, 0, 0xAFC9} /* Korean hangul */, {0, 0, 0xAFCB} /* Korean hangul */, {0, 0, 0xAFCD} /* Korean hangul */, {0, 0, 0xAFCE} /* Korean hangul */, {0, 0, 0xAFD4} /* Korean hangul */, {0, 0, 0xAFD8} /* Korean hangul */, {0, 0, 0xAFE9} /* Korean hangul */, {0, 0, 0xAFF0} /* Korean hangul */, {0, 0, 0xB000} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xB00C} /* Korean hangul */, {0, 0, 0xB00D} /* Korean hangul */, {0, 0, 0xB010} /* Korean hangul */, {0, 0, 0xB014} /* Korean hangul */, {0, 0, 0xB01C} /* Korean hangul */, {0, 0, 0xB01D} /* Korean hangul */, {0, 0, 0xB028} /* Korean hangul */, {0, 0, 0xB044} /* Korean hangul */, {0, 0, 0xB045} /* Korean hangul */, {0, 0, 0xB048} /* Korean hangul */, {0, 0, 0xB04A} /* Korean hangul */, {0, 0, 0xB04C} /* Korean hangul */, {0, 0, 0xB053} /* Korean hangul */, {0, 0, 0xB054} /* Korean hangul */, {0, 0, 0xB055} /* Korean hangul */, {0, 0, 0xB057} /* Korean hangul */, {0, 0, 0xB059} /* Korean hangul */, {0, 0, 0xB05D} /* Korean hangul */, {0, 0, 0xB07C} /* Korean hangul */, {0, 0, 0xB07D} /* Korean hangul */, {0, 0, 0xB080} /* Korean hangul */, {0, 0, 0xB084} /* Korean hangul */, {0, 0, 0xB08C} /* Korean hangul */, {0, 0, 0xB08D} /* Korean hangul */, {0, 0, 0xB08F} /* Korean hangul */, {0, 0, 0xB090} /* Korean hangul */, {0, 0, 0xB091} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xB098} /* Korean hangul */, {0, 0, 0xB099} /* Korean hangul */, {0, 0, 0xB09A} /* Korean hangul */, {0, 0, 0xB09C} /* Korean hangul */, {0, 0, 0xB09F} /* Korean hangul */, {0, 0, 0xB0A0} /* Korean hangul */, {0, 0, 0xB0A1} /* Korean hangul */, {0, 0, 0xB0A8} /* Korean hangul */, {0, 0, 0xB0A9} /* Korean hangul */, {0, 0, 0xB0AB} /* Korean hangul */, {0, 0, 0xB0AC} /* Korean hangul */, {0, 0, 0xB0AD} /* Korean hangul */, {0, 0, 0xB0AE} /* Korean hangul */, {0, 0, 0xB0AF} /* Korean hangul */, {0, 0, 0xB0B1} /* Korean hangul */, {0, 0, 0xB0B3} /* Korean hangul */, {0, 0, 0xB0B4} /* Korean hangul */, {0, 0, 0xB0B5} /* Korean hangul */, {0, 0, 0xB0B8} /* Korean hangul */, {0, 0, 0xB0BB} /* Korean hangul */, {0, 0, 0xB0BC} /* Korean hangul */, {0, 0, 0xB0C4} /* Korean hangul */, {0, 0, 0xB0C5} /* Korean hangul */, {0, 0, 0xB0C7} /* Korean hangul */, {0, 0, 0xB0C8} /* Korean hangul */, {0, 0, 0xB0C9} /* Korean hangul */, {0, 0, 0xB0D0} /* Korean hangul */, {0, 0, 0xB0D1} /* Korean hangul */, {0, 0, 0xB0E0} /* Korean hangul */, {0, 0, 0xB0E5} /* Korean hangul */, {0, 0, 0xB0EC} /* Korean hangul */, {0, 0, 0xB108} /* Korean hangul */, {0, 0, 0xB109} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xB10B} /* Korean hangul */, {0, 0, 0xB10C} /* Korean hangul */, {0, 0, 0xB10F} /* Korean hangul */, {0, 0, 0xB110} /* Korean hangul */, {0, 0, 0xB113} /* Korean hangul */, {0, 0, 0xB118} /* Korean hangul */, {0, 0, 0xB119} /* Korean hangul */, {0, 0, 0xB11B} /* Korean hangul */, {0, 0, 0xB11C} /* Korean hangul */, {0, 0, 0xB11D} /* Korean hangul */, {0, 0, 0xB11E} /* Korean hangul */, {0, 0, 0xB123} /* Korean hangul */, {0, 0, 0xB124} /* Korean hangul */, {0, 0, 0xB125} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page803 = { 0, marc8_31page803_dir }; /* PAGE 802 */ struct yaz_iconv_trie_dir marc8_31page802_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xADC0} /* Korean hangul */, {0, 0, 0xADC4} /* Korean hangul */, {0, 0, 0xADC8} /* Korean hangul */, {0, 0, 0xADD0} /* Korean hangul */, {0, 0, 0xADD1} /* Korean hangul */, {0, 0, 0xADD3} /* Korean hangul */, {0, 0, 0xADDC} /* Korean hangul */, {0, 0, 0xADE0} /* Korean hangul */, {0, 0, 0xADE4} /* Korean hangul */, {0, 0, 0xADEC} /* Korean hangul */, {0, 0, 0xADF8} /* Korean hangul */, {0, 0, 0xADF9} /* Korean hangul */, {0, 0, 0xADFC} /* Korean hangul */, {0, 0, 0xADFF} /* Korean hangul */, {0, 0, 0xAE00} /* Korean hangul */, {0, 0, 0xAE01} /* Korean hangul */, {0, 0, 0xAE08} /* Korean hangul */, {0, 0, 0xAE09} /* Korean hangul */, {0, 0, 0xAE0B} /* Korean hangul */, {0, 0, 0xAE0D} /* Korean hangul */, {0, 0, 0xAE30} /* Korean hangul */, {0, 0, 0xAE31} /* Korean hangul */, {0, 0, 0xAE34} /* Korean hangul */, {0, 0, 0xAE37} /* Korean hangul */, {0, 0, 0xAE38} /* Korean hangul */, {0, 0, 0xAE40} /* Korean hangul */, {0, 0, 0xAE41} /* Korean hangul */, {0, 0, 0xAE43} /* Korean hangul */, {0, 0, 0xAE44} /* Korean hangul */, {0, 0, 0xAE45} /* Korean hangul */, {0, 0, 0xAE4A} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xAE4C} /* Korean hangul */, {0, 0, 0xAE4D} /* Korean hangul */, {0, 0, 0xAE4E} /* Korean hangul */, {0, 0, 0xAE50} /* Korean hangul */, {0, 0, 0xAE54} /* Korean hangul */, {0, 0, 0xAE5C} /* Korean hangul */, {0, 0, 0xAE5D} /* Korean hangul */, {0, 0, 0xAE60} /* Korean hangul */, {0, 0, 0xAE61} /* Korean hangul */, {0, 0, 0xAE62} /* Korean hangul */, {0, 0, 0xAE65} /* Korean hangul */, {0, 0, 0xAE68} /* Korean hangul */, {0, 0, 0xAE69} /* Korean hangul */, {0, 0, 0xAE6C} /* Korean hangul */, {0, 0, 0xAE70} /* Korean hangul */, {0, 0, 0xAE78} /* Korean hangul */, {0, 0, 0xAE79} /* Korean hangul */, {0, 0, 0xAE7B} /* Korean hangul */, {0, 0, 0xAE7C} /* Korean hangul */, {0, 0, 0xAE7D} /* Korean hangul */, {0, 0, 0xAE84} /* Korean hangul */, {0, 0, 0xAE85} /* Korean hangul */, {0, 0, 0xAEBC} /* Korean hangul */, {0, 0, 0xAEBD} /* Korean hangul */, {0, 0, 0xAEBE} /* Korean hangul */, {0, 0, 0xAEC0} /* Korean hangul */, {0, 0, 0xAEC4} /* Korean hangul */, {0, 0, 0xAECC} /* Korean hangul */, {0, 0, 0xAECD} /* Korean hangul */, {0, 0, 0xAECF} /* Korean hangul */, {0, 0, 0xAED0} /* Korean hangul */, {0, 0, 0xAED1} /* Korean hangul */, {0, 0, 0xAED8} /* Korean hangul */, {0, 0, 0xAEDC} /* Korean hangul */, {0, 0, 0xAEF4} /* Korean hangul */, {0, 0, 0xAF0D} /* Korean hangul */, {0, 0, 0xAF2C} /* Korean hangul */, {0, 0, 0xAF2D} /* Korean hangul */, {0, 0, 0xAF30} /* Korean hangul */, {0, 0, 0xAF34} /* Korean hangul */, {0, 0, 0xAF3C} /* Korean hangul */, {0, 0, 0xAF3D} /* Korean hangul */, {0, 0, 0xAF3F} /* Korean hangul */, {0, 0, 0xAF41} /* Korean hangul */, {0, 0, 0xAF42} /* Korean hangul */, {0, 0, 0xAF43} /* Korean hangul */, {0, 0, 0xAF48} /* Korean hangul */, {0, 0, 0xAF49} /* Korean hangul */, {0, 0, 0xAF4C} /* Korean hangul */, {0, 0, 0xAF58} /* Korean hangul */, {0, 0, 0xAF5C} /* Korean hangul */, {0, 0, 0xAF5D} /* Korean hangul */, {0, 0, 0xAF64} /* Korean hangul */, {0, 0, 0xAF65} /* Korean hangul */, {0, 0, 0xAF79} /* Korean hangul */, {0, 0, 0xAF80} /* Korean hangul */, {0, 0, 0xAF84} /* Korean hangul */, {0, 0, 0xAF88} /* Korean hangul */, {0, 0, 0xAF90} /* Korean hangul */, {0, 0, 0xAF95} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page802 = { 0, marc8_31page802_dir }; /* PAGE 801 */ struct yaz_iconv_trie_dir marc8_31page801_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0xAC70} /* Korean hangul */, {0, 0, 0xAC71} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xAC74} /* Korean hangul */, {0, 0, 0xAC77} /* Korean hangul */, {0, 0, 0xAC78} /* Korean hangul */, {0, 0, 0xAC79} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xAC80} /* Korean hangul */, {0, 0, 0xAC81} /* Korean hangul */, {0, 0, 0xAC83} /* Korean hangul */, {0, 0, 0xAC84} /* Korean hangul */, {0, 0, 0xAC85} /* Korean hangul */, {0, 0, 0xAC86} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xAC89} /* Korean hangul */, {0, 0, 0xAC8A} /* Korean hangul */, {0, 0, 0xAC8B} /* Korean hangul */, {0, 0, 0xAC8C} /* Korean hangul */, {0, 0, 0xAC90} /* Korean hangul */, {0, 0, 0xAC94} /* Korean hangul */, {0, 0, 0xAC9C} /* Korean hangul */, {0, 0, 0xAC9F} /* Korean hangul */, {0, 0, 0xACA0} /* Korean hangul */, {0, 0, 0xACA1} /* Korean hangul */, {0, 0, 0xACA8} /* Korean hangul */, {0, 0, 0xACA9} /* Korean hangul */, {0, 0, 0xACAA} /* Korean hangul */, {0, 0, 0xACAC} /* Korean hangul */, {0, 0, 0xACAF} /* Korean hangul */, {0, 0, 0xACB0} /* Korean hangul */, {0, 0, 0xACB8} /* Korean hangul */, {0, 0, 0xACB9} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xACBC} /* Korean hangul */, {0, 0, 0xACBD} /* Korean hangul */, {0, 0, 0xACC1} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xACC4} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xACD7} /* Korean hangul */, {0, 0, 0xACE0} /* Korean hangul */, {0, 0, 0xACE1} /* Korean hangul */, {0, 0, 0xACE4} /* Korean hangul */, {0, 0, 0xACE7} /* Korean hangul */, {0, 0, 0xACE8} /* Korean hangul */, {0, 0, 0xACEA} /* Korean hangul */, {0, 0, 0xACEC} /* Korean hangul */, {0, 0, 0xACEF} /* Korean hangul */, {0, 0, 0xACF0} /* Korean hangul */, {0, 0, 0xACF1} /* Korean hangul */, {0, 0, 0xACF3} /* Korean hangul */, {0, 0, 0xACF5} /* Korean hangul */, {0, 0, 0xACF6} /* Korean hangul */, {0, 0, 0xACFA} /* Korean hangul */, {0, 0, 0xACFC} /* Korean hangul */, {0, 0, 0xACFD} /* Korean hangul */, {0, 0, 0xAD00} /* Korean hangul */, {0, 0, 0xAD04} /* Korean hangul */, {0, 0, 0xAD0C} /* Korean hangul */, {0, 0, 0xAD0D} /* Korean hangul */, {0, 0, 0xAD0F} /* Korean hangul */, {0, 0, 0xAD11} /* Korean hangul */, {0, 0, 0xAD18} /* Korean hangul */, {0, 0, 0xAD19} /* Korean hangul */, {0, 0, 0xAD1C} /* Korean hangul */, {0, 0, 0xAD20} /* Korean hangul */, {0, 0, 0xAD28} /* Korean hangul */, {0, 0, 0xAD29} /* Korean hangul */, {0, 0, 0xAD2D} /* Korean hangul */, {0, 0, 0xAD34} /* Korean hangul */, {0, 0, 0xAD38} /* Korean hangul */, {0, 0, 0xAD3C} /* Korean hangul */, {0, 0, 0xAD44} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xAD49} /* Korean hangul */, {0, 0, 0xAD50} /* Korean hangul */, {0, 0, 0xAD6C} /* Korean hangul */, {0, 0, 0xAD6D} /* Korean hangul */, {0, 0, 0xAD70} /* Korean hangul */, {0, 0, 0xAD73} /* Korean hangul */, {0, 0, 0xAD74} /* Korean hangul */, {0, 0, 0xAD75} /* Korean hangul */, {0, 0, 0xAD76} /* Korean hangul */, {0, 0, 0xAD7C} /* Korean hangul */, {0, 0, 0xAD7D} /* Korean hangul */, {0, 0, 0xAD7F} /* Korean hangul */, {0, 0, 0xAD81} /* Korean hangul */, {0, 0, 0xAD82} /* Korean hangul */, {0, 0, 0xAD88} /* Korean hangul */, {0, 0, 0xAD8C} /* Korean hangul */, {0, 0, 0xAD90} /* Korean hangul */, {0, 0, 0}, {0, 0, 0xADA4} /* Korean hangul */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page801 = { 0, marc8_31page801_dir }; /* PAGE 800 */ struct yaz_iconv_trie_flat marc8_31page800_flat[] = { {"\x5F", 0, 0xAC00}, /* Korean hangul */ {"\x60", 0, 0xAC01}, /* Korean hangul */ {"\x61", 0, 0xAC02}, /* Korean hangul */ {"\x62", 0, 0xAC04}, /* Korean hangul */ {"\x63", 0, 0xAC07}, /* Korean hangul */ {"\x64", 0, 0xAC08}, /* Korean hangul */ {"\x65", 0, 0xAC09}, /* Korean hangul */ {"\x66", 0, 0xAC10}, /* Korean hangul */ {"\x67", 0, 0xAC11}, /* Korean hangul */ {"\x68", 0, 0xAC12}, /* Korean hangul */ {"\x69", 0, 0xAC13}, /* Korean hangul */ {"\x6A", 0, 0xAC14}, /* Korean hangul */ {"\x6B", 0, 0xAC15}, /* Korean hangul */ {"\x6C", 0, 0xAC16}, /* Korean hangul */ {"\x6D", 0, 0xAC17}, /* Korean hangul */ {"\x6E", 0, 0xAC19}, /* Korean hangul */ {"\x6F", 0, 0xAC1A}, /* Korean hangul */ {"\x70", 0, 0xAC1B}, /* Korean hangul */ {"\x71", 0, 0xAC1C}, /* Korean hangul */ {"\x72", 0, 0xAC1D}, /* Korean hangul */ {"\x73", 0, 0xAC20}, /* Korean hangul */ {"\x75", 0, 0xAC24}, /* Korean hangul */ {"\x76", 0, 0xAC2C}, /* Korean hangul */ {"\x77", 0, 0xAC2D}, /* Korean hangul */ {"\x78", 0, 0xAC2F}, /* Korean hangul */ {"\x79", 0, 0xAC30}, /* Korean hangul */ {"\x7A", 0, 0xAC31}, /* Korean hangul */ {"\x7B", 0, 0xAC38}, /* Korean hangul */ {"\x7C", 0, 0xAC39}, /* Korean hangul */ {"\x7D", 0, 0xAC40}, /* Korean hangul */ {"\x7E", 0, 0xAC54}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page800 = { marc8_31page800_flat, 0 }; /* PAGE 799 */ struct yaz_iconv_trie_flat marc8_31page799_flat[] = { {"\x21", 0, 0x315C}, /* Korean hangul */ {"\x25", 0, 0x3160}, /* Korean hangul */ {"\x26", 0, 0x3161}, /* Korean hangul */ {"\x27", 0, 0x3162}, /* Korean hangul */ {"\x28", 0, 0x3163}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page799 = { marc8_31page799_flat, 0 }; /* PAGE 798 */ struct yaz_iconv_trie_flat marc8_31page798_flat[] = { {"\x57", 0, 0x3131}, /* Korean hangul */ {"\x58", 0, 0x3134}, /* Korean hangul */ {"\x59", 0, 0x3137}, /* Korean hangul */ {"\x5A", 0, 0x3139}, /* Korean hangul */ {"\x5B", 0, 0x3141}, /* Korean hangul */ {"\x5C", 0, 0x3142}, /* Korean hangul */ {"\x5D", 0, 0x3145}, /* Korean hangul */ {"\x5E", 0, 0x3147}, /* Korean hangul */ {"\x5F", 0, 0x3148}, /* Korean hangul */ {"\x60", 0, 0x314A}, /* Korean hangul */ {"\x61", 0, 0x314B}, /* Korean hangul */ {"\x62", 0, 0x314C}, /* Korean hangul */ {"\x63", 0, 0x314D}, /* Korean hangul */ {"\x64", 0, 0x314E}, /* Korean hangul */ {"\x65", 0, 0x3132}, /* Korean hangul */ {"\x69", 0, 0x3138}, /* Korean hangul */ {"\x6E", 0, 0x3143}, /* Korean hangul */ {"\x70", 0, 0x3146}, /* Korean hangul */ {"\x71", 0, 0x3149}, /* Korean hangul */ {"\x72", 0, 0x314F}, /* Korean hangul */ {"\x73", 0, 0x3150}, /* Korean hangul */ {"\x74", 0, 0x3151}, /* Korean hangul */ {"\x76", 0, 0x3153}, /* Korean hangul */ {"\x77", 0, 0x3154}, /* Korean hangul */ {"\x78", 0, 0x3155}, /* Korean hangul */ {"\x7A", 0, 0x3157}, /* Korean hangul */ {"\x7B", 0, 0x3158}, /* Korean hangul */ {"\x7E", 0, 0x315B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page798 = { marc8_31page798_flat, 0 }; /* PAGE 797 */ struct yaz_iconv_trie_dir marc8_31page797_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {799, 0, 0}, {800, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {801, 0, 0}, {802, 0, 0}, {803, 0, 0}, {804, 0, 0}, {805, 0, 0}, {806, 0, 0}, {807, 0, 0}, {808, 0, 0}, {809, 0, 0}, {810, 0, 0}, {811, 0, 0}, {812, 0, 0}, {813, 0, 0}, {814, 0, 0}, {815, 0, 0}, {816, 0, 0}, {817, 0, 0}, {818, 0, 0}, {819, 0, 0}, {820, 0, 0}, {821, 0, 0}, {822, 0, 0}, {823, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {824, 0, 0}, {825, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page797 = { 0, marc8_31page797_dir }; /* PAGE 796 */ struct yaz_iconv_trie_dir marc8_31page796_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x30A1} /* Katakana letter small A */, {0, 0, 0x30A2} /* Katakana letter A */, {0, 0, 0x30A3} /* Katakana letter small I */, {0, 0, 0x30A4} /* Katakana letter I */, {0, 0, 0x30A5} /* Katakana letter small U */, {0, 0, 0x30A6} /* Katakana letter U */, {0, 0, 0x30A7} /* Katakana letter small E */, {0, 0, 0x30A8} /* Katakana letter E */, {0, 0, 0x30A9} /* Katakana letter small O */, {0, 0, 0x30AA} /* Katakana letter O */, {0, 0, 0x30AB} /* Katakana letter KA */, {0, 0, 0x30AC} /* Katakana letter GA */, {0, 0, 0x30AD} /* Katakana letter KI */, {0, 0, 0x30AE} /* Katakana letter GI */, {0, 0, 0x30AF} /* Katakana letter KU */, {0, 0, 0x30B0} /* Katakana letter GU */, {0, 0, 0x30B1} /* Katakana letter KE */, {0, 0, 0x30B2} /* Katakana letter GE */, {0, 0, 0x30B3} /* Katakana letter KO */, {0, 0, 0x30B4} /* Katakana letter GO */, {0, 0, 0x30B5} /* Katakana letter SA */, {0, 0, 0x30B6} /* Katakana letter ZA */, {0, 0, 0x30B7} /* Katakana letter SI */, {0, 0, 0x30B8} /* Katakana letter ZI */, {0, 0, 0x30B9} /* Katakana letter SU */, {0, 0, 0x30BA} /* Katakana letter ZU */, {0, 0, 0x30BB} /* Katakana letter SE */, {0, 0, 0x30BC} /* Katakana letter ZE */, {0, 0, 0x30BD} /* Katakana letter SO */, {0, 0, 0x30BE} /* Katakana letter ZO */, {0, 0, 0x30BF} /* Katakana letter TA */, {0, 0, 0x30C0} /* Katakana letter DA */, {0, 0, 0x30C1} /* Katakana letter TI */, {0, 0, 0x30C2} /* Katakana letter DI */, {0, 0, 0x30C3} /* Katakana letter small TU */, {0, 0, 0x30C4} /* Katakana letter TU */, {0, 0, 0x30C5} /* Katakana letter DU */, {0, 0, 0x30C6} /* Katakana letter TE */, {0, 0, 0x30C7} /* Katakana letter DE */, {0, 0, 0x30C8} /* Katakana letter TO */, {0, 0, 0x30C9} /* Katakana letter DO */, {0, 0, 0x30CA} /* Katakana letter NA */, {0, 0, 0x30CB} /* Katakana letter NI */, {0, 0, 0x30CC} /* Katakana letter NU */, {0, 0, 0x30CD} /* Katakana letter NE */, {0, 0, 0x30CE} /* Katakana letter NO */, {0, 0, 0x30CF} /* Katakana letter HA */, {0, 0, 0x30D0} /* Katakana letter BA */, {0, 0, 0x30D1} /* Katakana letter PA */, {0, 0, 0x30D2} /* Katakana letter HI */, {0, 0, 0x30D3} /* Katakana letter BI */, {0, 0, 0x30D4} /* Katakana letter PI */, {0, 0, 0x30D5} /* Katakana letter HU */, {0, 0, 0x30D6} /* Katakana letter BU */, {0, 0, 0x30D7} /* Katakana letter PU */, {0, 0, 0x30D8} /* Katakana letter HE */, {0, 0, 0x30D9} /* Katakana letter BE */, {0, 0, 0x30DA} /* Katakana letter PE */, {0, 0, 0x30DB} /* Katakana letter HO */, {0, 0, 0x30DC} /* Katakana letter BO */, {0, 0, 0x30DD} /* Katakana letter PO */, {0, 0, 0x30DE} /* Katakana letter MA */, {0, 0, 0x30DF} /* Katakana letter MI */, {0, 0, 0x30E0} /* Katakana letter MU */, {0, 0, 0x30E1} /* Katakana letter ME */, {0, 0, 0x30E2} /* Katakana letter MO */, {0, 0, 0x30E3} /* Katakana letter small YA */, {0, 0, 0x30E4} /* Katakana letter YA */, {0, 0, 0x30E5} /* Katakana letter small YU */, {0, 0, 0x30E6} /* Katakana letter YU */, {0, 0, 0x30E7} /* Katakana letter small YO */, {0, 0, 0x30E8} /* Katakana letter YO */, {0, 0, 0x30E9} /* Katakana letter RA */, {0, 0, 0x30EA} /* Katakana letter RI */, {0, 0, 0x30EB} /* Katakana letter RU */, {0, 0, 0x30EC} /* Katakana letter RE */, {0, 0, 0x30ED} /* Katakana letter RO */, {0, 0, 0x30EE} /* Katakana letter small WA */, {0, 0, 0x30EF} /* Katakana letter WA */, {0, 0, 0x30F0} /* Katakana letter WI */, {0, 0, 0x30F1} /* Katakana letter WE */, {0, 0, 0x30F2} /* Katakana letter WO */, {0, 0, 0x30F3} /* Katakana letter N */, {0, 0, 0x30F4} /* Katakana letter VU */, {0, 0, 0x30F5} /* Katakana letter small KA */, {0, 0, 0x30F6} /* Katakana letter small KE */, {0, 0, 0x309B} /* Katakana-hiragana voiced sound mark */, {0, 0, 0x309C} /* Katakana-hiragana semi-voiced sound mark */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page796 = { 0, marc8_31page796_dir }; /* PAGE 795 */ struct yaz_iconv_trie_dir marc8_31page795_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x3041} /* Hiragana letter small A */, {0, 0, 0x3042} /* Hiragana letter A */, {0, 0, 0x3043} /* Hiragana letter small I */, {0, 0, 0x3044} /* Hiragana letter I */, {0, 0, 0x3045} /* Hiragana letter small U */, {0, 0, 0x3046} /* Hiragana letter U */, {0, 0, 0x3047} /* Hiragana letter small E */, {0, 0, 0x3048} /* Hiragana letter E */, {0, 0, 0x3049} /* Hiragana letter small O */, {0, 0, 0x304A} /* Hiragana letter O */, {0, 0, 0x304B} /* Hiragana letter KA */, {0, 0, 0x304C} /* Hiragana letter GA */, {0, 0, 0x304D} /* Hiragana letter KI */, {0, 0, 0x304E} /* Hiragana letter GI */, {0, 0, 0x304F} /* Hiragana letter KU */, {0, 0, 0x3050} /* Hiragana letter GU */, {0, 0, 0x3051} /* Hiragana letter KE */, {0, 0, 0x3052} /* Hiragana letter GE */, {0, 0, 0x3053} /* Hiragana letter KO */, {0, 0, 0x3054} /* Hiragana letter GO */, {0, 0, 0x3055} /* Hiragana letter SA */, {0, 0, 0x3056} /* Hiragana letter ZA */, {0, 0, 0x3057} /* Hiragana letter SI */, {0, 0, 0x3058} /* Hiragana letter ZI */, {0, 0, 0x3059} /* Hiragana letter SU */, {0, 0, 0x305A} /* Hiragana letter ZU */, {0, 0, 0x305B} /* Hiragana letter SE */, {0, 0, 0x305C} /* Hiragana letter ZE */, {0, 0, 0x305D} /* Hiragana letter SO */, {0, 0, 0x305E} /* Hiragana letter ZO */, {0, 0, 0x305F} /* Hiragana letter TA */, {0, 0, 0x3060} /* Hiragana letter DA */, {0, 0, 0x3061} /* Hiragana letter TI */, {0, 0, 0x3062} /* Hiragana letter DI */, {0, 0, 0x3063} /* Hiragana letter small TU */, {0, 0, 0x3064} /* Hiragana letter TU */, {0, 0, 0x3065} /* Hiragana letter DU */, {0, 0, 0x3066} /* Hiragana letter TE */, {0, 0, 0x3067} /* Hiragana letter DE */, {0, 0, 0x3068} /* Hiragana letter TO */, {0, 0, 0x3069} /* Hiragana letter DO */, {0, 0, 0x306A} /* Hiragana letter NA */, {0, 0, 0x306B} /* Hiragana letter NI */, {0, 0, 0x306C} /* Hiragana letter NU */, {0, 0, 0x306D} /* Hiragana letter NE */, {0, 0, 0x306E} /* Hiragana letter NO */, {0, 0, 0x306F} /* Hiragana letter HA */, {0, 0, 0x3070} /* Hiragana letter BA */, {0, 0, 0x3071} /* Hiragana letter PA */, {0, 0, 0x3072} /* Hiragana letter HI */, {0, 0, 0x3073} /* Hiragana letter BI */, {0, 0, 0x3074} /* Hiragana letter PI */, {0, 0, 0x3075} /* Hiragana letter HU */, {0, 0, 0x3076} /* Hiragana letter BU */, {0, 0, 0x3077} /* Hiragana letter PU */, {0, 0, 0x3078} /* Hiragana letter HE */, {0, 0, 0x3079} /* Hiragana letter BE */, {0, 0, 0x307A} /* Hiragana letter PE */, {0, 0, 0x307B} /* Hiragana letter HO */, {0, 0, 0x307C} /* Hiragana letter BO */, {0, 0, 0x307D} /* Hiragana letter PO */, {0, 0, 0x307E} /* Hiragana letter MA */, {0, 0, 0x307F} /* Hiragana letter MI */, {0, 0, 0x3080} /* Hiragana letter MU */, {0, 0, 0x3081} /* Hiragana letter ME */, {0, 0, 0x3082} /* Hiragana letter MO */, {0, 0, 0x3083} /* Hiragana letter small YA */, {0, 0, 0x3084} /* Hiragana letter YA */, {0, 0, 0x3085} /* Hiragana letter small YU */, {0, 0, 0x3086} /* Hiragana letter YU */, {0, 0, 0x3087} /* Hiragana letter small YO */, {0, 0, 0x3088} /* Hiragana letter YO */, {0, 0, 0x3089} /* Hiragana letter RA */, {0, 0, 0x308A} /* Hiragana letter RI */, {0, 0, 0x308B} /* Hiragana letter RU */, {0, 0, 0x308C} /* Hiragana letter RE */, {0, 0, 0x308D} /* Hiragana letter RO */, {0, 0, 0x308E} /* Hiragana letter small WA */, {0, 0, 0x308F} /* Hiragana letter WA */, {0, 0, 0x3090} /* Hiragana letter WI */, {0, 0, 0x3091} /* Hiragana letter WE */, {0, 0, 0x3092} /* Hiragana letter WO */, {0, 0, 0x3093} /* Hiragana letter N */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page795 = { 0, marc8_31page795_dir }; /* PAGE 794 */ struct yaz_iconv_trie_flat marc8_31page794_flat[] = { {"\x3C", 0, 0x30FC}, /* Vowel elongation mark for kana */ {"\x26", 0, 0x30FB}, /* Ideographic centered point */ {"\x39", 0, 0x3005}, /* Ideographic iteration mark */ {"\x52", 0, 0x3008}, /* Ideographic less than sign */ {"\x53", 0, 0x3009}, /* Ideographic greater than sign */ {"\x54", 0, 0x300A}, /* Ideographic left double angle bracket */ {"\x55", 0, 0x300B}, /* Ideographic right double angle bracket */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page794 = { marc8_31page794_flat, 0 }; /* PAGE 793 */ struct yaz_iconv_trie_flat marc8_31page793_flat[] = { {"\x4C\x2A", 0, 0x915E}, /* East Asian ideograph */ {"\x58\x6F", 0, 0x4EEB}, /* East Asian ideograph */ {"\x5B\x71", 0, 0x57B4}, /* East Asian ideograph */ {"\x5C\x43", 0, 0x82CA}, /* East Asian ideograph */ {"\x5C\x50", 0, 0x82C4}, /* East Asian ideograph */ {"\x5D\x46", 0, 0x841C}, /* East Asian ideograph */ {"\x5D\x5C", 0, 0x8488}, /* East Asian ideograph */ {"\x5F\x30", 0, 0x7519}, /* East Asian ideograph */ {"\x5F\x39", 0, 0x5416}, /* East Asian ideograph */ {"\x5F\x50", 0, 0x549D}, /* East Asian ideograph */ {"\x5F\x51", 0, 0x54D0}, /* East Asian ideograph */ {"\x5F\x54", 0, 0x54B4}, /* East Asian ideograph */ {"\x5F\x5B", 0, 0x54A3}, /* East Asian ideograph */ {"\x5F\x61", 0, 0x54DA}, /* East Asian ideograph */ {"\x60\x2D", 0, 0x55B9}, /* East Asian ideograph */ {"\x60\x3A", 0, 0x55EA}, /* East Asian ideograph */ {"\x60\x4C", 0, 0x55F5}, /* East Asian ideograph */ {"\x60\x54", 0, 0x5623}, /* East Asian ideograph */ {"\x60\x58", 0, 0x562D}, /* East Asian ideograph */ {"\x60\x67", 0, 0x567B}, /* East Asian ideograph */ {"\x61\x31", 0, 0x5C9C}, /* East Asian ideograph */ {"\x62\x2A", 0, 0x7339}, /* East Asian ideograph */ {"\x62\x47", 0, 0x9987}, /* East Asian ideograph */ {"\x62\x4E", 0, 0x9995}, /* East Asian ideograph */ {"\x63\x40", 0, 0x61B7}, /* East Asian ideograph */ {"\x66\x40", 0, 0x80EC}, /* East Asian ideograph */ {"\x6B\x42", 0, 0x80BC}, /* East Asian ideograph */ {"\x6B\x44", 0, 0x80BD}, /* East Asian ideograph */ {"\x6B\x4C", 0, 0x80E9}, /* East Asian ideograph */ {"\x6B\x5B", 0, 0x810E}, /* East Asian ideograph */ {"\x6B\x5F", 0, 0x8112}, /* East Asian ideograph */ {"\x6B\x6A", 0, 0x8159}, /* East Asian ideograph */ {"\x6C\x42", 0, 0x70BB}, /* East Asian ideograph */ {"\x6C\x43", 0, 0x70C0}, /* East Asian ideograph */ {"\x6D\x3B", 0, 0x7818}, /* East Asian ideograph */ {"\x6D\x3F", 0, 0x781C}, /* East Asian ideograph */ {"\x6D\x45", 0, 0x783C}, /* East Asian ideograph */ {"\x72\x7D", 0, 0x87A8}, /* East Asian ideograph */ {"\x73\x60", 0, 0x7B7B}, /* East Asian ideograph */ {"\x73\x6E", 0, 0x7BA2}, /* East Asian ideograph */ {"\x74\x38", 0, 0x823E}, /* East Asian ideograph */ {"\x75\x23", 0, 0x9170}, /* East Asian ideograph */ {"\x75\x5D", 0, 0x8E3A}, /* East Asian ideograph */ {"\x77\x5D", 0, 0x9B0F}, /* East Asian ideograph */ {"\x77\x71", 0, 0x9EE2}, /* East Asian ideograph (Version J extension) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page793 = { marc8_31page793_flat, 0 }; /* PAGE 792 */ struct yaz_iconv_trie_flat marc8_31page792_flat[] = { {"\x23", 0, 0x9D64}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page792 = { marc8_31page792_flat, 0 }; /* PAGE 791 */ struct yaz_iconv_trie_flat marc8_31page791_flat[] = { {"\x3B", 0, 0x9B96}, /* East Asian ideograph */ {"\x40", 0, 0x9BB4}, /* East Asian ideograph */ {"\x45", 0, 0x9BCF}, /* East Asian ideograph */ {"\x46", 0, 0x9BD1}, /* East Asian ideograph */ {"\x4E", 0, 0x9BF2}, /* East Asian ideograph */ {"\x60", 0, 0x9C30}, /* East Asian ideograph */ {"\x65", 0, 0x9C5A}, /* East Asian ideograph */ {"\x7E", 0, 0x9D48}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page791 = { marc8_31page791_flat, 0 }; /* PAGE 790 */ struct yaz_iconv_trie_flat marc8_31page790_flat[] = { {"\x24", 0, 0x98AA}, /* East Asian ideograph */ {"\x52", 0, 0x99F2}, /* East Asian ideograph */ {"\x74", 0, 0x9ADE}, /* East Asian ideograph */ {"\x7D", 0, 0x9AF1}, /* East Asian ideograph */ {"\x7E", 0, 0x9AF7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page790 = { marc8_31page790_flat, 0 }; /* PAGE 789 */ struct yaz_iconv_trie_flat marc8_31page789_flat[] = { {"\x23", 0, 0x9666}, /* East Asian ideograph */ {"\x58", 0, 0x9779}, /* East Asian ideograph */ {"\x5D", 0, 0x9786}, /* East Asian ideograph */ {"\x60", 0, 0x9790}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page789 = { marc8_31page789_flat, 0 }; /* PAGE 788 */ struct yaz_iconv_trie_flat marc8_31page788_flat[] = { {"\x27", 0, 0x933B}, /* East Asian ideograph */ {"\x5B", 0, 0x958A}, /* East Asian ideograph */ {"\x5D", 0, 0x9596}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page788 = { marc8_31page788_flat, 0 }; /* PAGE 787 */ struct yaz_iconv_trie_flat marc8_31page787_flat[] = { {"\x28", 0, 0x9056}, /* East Asian ideograph */ {"\x5C", 0, 0x91DF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page787 = { marc8_31page787_flat, 0 }; /* PAGE 786 */ struct yaz_iconv_trie_flat marc8_31page786_flat[] = { {"\x3F", 0, 0x8EBE}, /* East Asian ideograph */ {"\x40", 0, 0x8EC5}, /* East Asian ideograph */ {"\x41", 0, 0x8EC8}, /* East Asian ideograph */ {"\x5A", 0, 0x8F4C}, /* East Asian ideograph */ {"\x7A", 0, 0x9027}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page786 = { marc8_31page786_flat, 0 }; /* PAGE 785 */ struct yaz_iconv_trie_flat marc8_31page785_flat[] = { {"\x27", 0, 0x8977}, /* East Asian ideograph */ {"\x5C", 0, 0x8ADA}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page785 = { marc8_31page785_flat, 0 }; /* PAGE 784 */ struct yaz_iconv_trie_flat marc8_31page784_flat[] = { {"\x2C", 0, 0x87D0}, /* East Asian ideograph */ {"\x5E", 0, 0x88B0}, /* East Asian ideograph */ {"\x61", 0, 0x88C3}, /* East Asian ideograph */ {"\x6D", 0, 0x8904}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page784 = { marc8_31page784_flat, 0 }; /* PAGE 783 */ struct yaz_iconv_trie_flat marc8_31page783_flat[] = { {"\x46", 0, 0x8630}, /* East Asian ideograph */ {"\x5B", 0, 0x86AB}, /* East Asian ideograph */ {"\x62", 0, 0x86EF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page783 = { marc8_31page783_flat, 0 }; /* PAGE 782 */ struct yaz_iconv_trie_flat marc8_31page782_flat[] = { {"\x4D", 0, 0x8422}, /* East Asian ideograph */ {"\x68", 0, 0x84D9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page782 = { marc8_31page782_flat, 0 }; /* PAGE 781 */ struct yaz_iconv_trie_flat marc8_31page781_flat[] = { {"\x33", 0, 0x81A4}, /* East Asian ideograph */ {"\x5C", 0, 0x825D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page781 = { marc8_31page781_flat, 0 }; /* PAGE 780 */ struct yaz_iconv_trie_flat marc8_31page780_flat[] = { {"\x4F", 0, 0x7E05}, /* East Asian ideograph */ {"\x6D", 0, 0x7E83}, /* East Asian ideograph */ {"\x6E", 0, 0x7DD5}, /* East Asian ideograph */ {"\x76", 0, 0x7E90}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page780 = { marc8_31page780_flat, 0 }; /* PAGE 779 */ struct yaz_iconv_trie_flat marc8_31page779_flat[] = { {"\x49", 0, 0x7C13}, /* East Asian ideograph */ {"\x4C", 0, 0x7C17}, /* East Asian ideograph */ {"\x4E", 0, 0x7BF6}, /* East Asian ideograph */ {"\x64", 0, 0x7C90}, /* East Asian ideograph */ {"\x66", 0, 0x7CAD}, /* East Asian ideograph */ {"\x71", 0, 0x7CC0}, /* East Asian ideograph */ {"\x74", 0, 0x7CD8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page779 = { marc8_31page779_flat, 0 }; /* PAGE 778 */ struct yaz_iconv_trie_flat marc8_31page778_flat[] = { {"\x25", 0, 0x7907}, /* East Asian ideograph */ {"\x4E", 0, 0x7A43}, /* East Asian ideograph */ {"\x73", 0, 0x7B02}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page778 = { marc8_31page778_flat, 0 }; /* PAGE 777 */ struct yaz_iconv_trie_flat marc8_31page777_flat[] = { {"\x6D", 0, 0x7874}, /* East Asian ideograph */ {"\x73", 0, 0x78B5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page777 = { marc8_31page777_flat, 0 }; /* PAGE 776 */ struct yaz_iconv_trie_flat marc8_31page776_flat[] = { {"\x26", 0, 0x74F2}, /* East Asian ideograph */ {"\x36", 0, 0x753C}, /* East Asian ideograph */ {"\x3A", 0, 0x7549}, /* East Asian ideograph */ {"\x3E", 0, 0x7569}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page776 = { marc8_31page776_flat, 0 }; /* PAGE 775 */ struct yaz_iconv_trie_flat marc8_31page775_flat[] = { {"\x70", 0, 0x7195}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page775 = { marc8_31page775_flat, 0 }; /* PAGE 774 */ struct yaz_iconv_trie_flat marc8_31page774_flat[] = { {"\x63", 0, 0x6E82}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page774 = { marc8_31page774_flat, 0 }; /* PAGE 773 */ struct yaz_iconv_trie_flat marc8_31page773_flat[] = { {"\x36", 0, 0x6B1F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page773 = { marc8_31page773_flat, 0 }; /* PAGE 772 */ struct yaz_iconv_trie_flat marc8_31page772_flat[] = { {"\x29", 0, 0x6925}, /* East Asian ideograph */ {"\x2D", 0, 0x6928}, /* East Asian ideograph */ {"\x30", 0, 0x6923}, /* East Asian ideograph */ {"\x31", 0, 0x6921}, /* East Asian ideograph */ {"\x39", 0, 0x697E}, /* East Asian ideograph */ {"\x43", 0, 0x6981}, /* East Asian ideograph */ {"\x4F", 0, 0x69DD}, /* East Asian ideograph */ {"\x53", 0, 0x6A2E}, /* East Asian ideograph */ {"\x71", 0, 0x6A78}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page772 = { marc8_31page772_flat, 0 }; /* PAGE 771 */ struct yaz_iconv_trie_flat marc8_31page771_flat[] = { {"\x37", 0, 0x6737}, /* East Asian ideograph */ {"\x7B", 0, 0x6926}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page771 = { marc8_31page771_flat, 0 }; /* PAGE 770 */ struct yaz_iconv_trie_flat marc8_31page770_flat[] = { {"\x31", 0, 0x64F6}, /* East Asian ideograph */ {"\x73", 0, 0x6683}, /* East Asian ideograph */ {"\x7E", 0, 0x66BC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page770 = { marc8_31page770_flat, 0 }; /* PAGE 769 */ struct yaz_iconv_trie_flat marc8_31page769_flat[] = { {"\x4B", 0, 0x6327}, /* East Asian ideograph */ {"\x5E", 0, 0x63B5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page769 = { marc8_31page769_flat, 0 }; /* PAGE 768 */ struct yaz_iconv_trie_flat marc8_31page768_flat[] = { {"\x37", 0, 0x5F16}, /* East Asian ideograph */ {"\x3B", 0, 0x5F41}, /* East Asian ideograph */ {"\x6A", 0, 0x603A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page768 = { marc8_31page768_flat, 0 }; /* PAGE 767 */ struct yaz_iconv_trie_flat marc8_31page767_flat[] = { {"\x26", 0, 0x4E62}, /* East Asian ideograph */ {"\x2C", 0, 0x599B}, /* East Asian ideograph */ {"\x2E", 0, 0x5CBB}, /* East Asian ideograph */ {"\x30", 0, 0x5CBC}, /* East Asian ideograph */ {"\x32", 0, 0x5CC5}, /* East Asian ideograph */ {"\x33", 0, 0x5CBE}, /* East Asian ideograph */ {"\x4E", 0, 0x5D76}, /* East Asian ideograph */ {"\x57", 0, 0x5D90}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page767 = { marc8_31page767_flat, 0 }; /* PAGE 766 */ struct yaz_iconv_trie_flat marc8_31page766_flat[] = { {"\x4E", 0, 0x5B36}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page766 = { marc8_31page766_flat, 0 }; /* PAGE 765 */ struct yaz_iconv_trie_flat marc8_31page765_flat[] = { {"\x29", 0, 0x5726}, /* East Asian ideograph */ {"\x2A", 0, 0x5737}, /* East Asian ideograph */ {"\x38", 0, 0x57B3}, /* East Asian ideograph */ {"\x3A", 0, 0x57AA}, /* East Asian ideograph */ {"\x3B", 0, 0x57B0}, /* East Asian ideograph */ {"\x42", 0, 0x57D6}, /* East Asian ideograph */ {"\x4B", 0, 0x5870}, /* East Asian ideograph */ {"\x51", 0, 0x58B9}, /* East Asian ideograph */ {"\x57", 0, 0x58B8}, /* East Asian ideograph */ {"\x5C", 0, 0x58D7}, /* East Asian ideograph */ {"\x5F", 0, 0x58E5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page765 = { marc8_31page765_flat, 0 }; /* PAGE 764 */ struct yaz_iconv_trie_flat marc8_31page764_flat[] = { {"\x26", 0, 0x54D8}, /* East Asian ideograph */ {"\x3B", 0, 0x555D}, /* East Asian ideograph */ {"\x75", 0, 0x56CE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page764 = { marc8_31page764_flat, 0 }; /* PAGE 763 */ struct yaz_iconv_trie_flat marc8_31page763_flat[] = { {"\x5D", 0, 0x53FA}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page763 = { marc8_31page763_flat, 0 }; /* PAGE 762 */ struct yaz_iconv_trie_flat marc8_31page762_flat[] = { {"\x30", 0, 0x5116}, /* East Asian ideograph */ {"\x5E", 0, 0x51E9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page762 = { marc8_31page762_flat, 0 }; /* PAGE 761 */ struct yaz_iconv_trie_flat marc8_31page761_flat[] = { {"\x5D", 0, 0x6762}, /* East Asian ideograph */ {"\x68", 0, 0x5301}, /* East Asian ideograph */ {"\x7A", 0, 0x9453}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page761 = { marc8_31page761_flat, 0 }; /* PAGE 760 */ struct yaz_iconv_trie_flat marc8_31page760_flat[] = { {"\x7B", 0, 0x9EBF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page760 = { marc8_31page760_flat, 0 }; /* PAGE 759 */ struct yaz_iconv_trie_flat marc8_31page759_flat[] = { {"\x23", 0, 0x7872}, /* East Asian ideograph */ {"\x2B", 0, 0x7560}, /* East Asian ideograph */ {"\x38", 0, 0x567A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page759 = { marc8_31page759_flat, 0 }; /* PAGE 758 */ struct yaz_iconv_trie_flat marc8_31page758_flat[] = { {"\x64", 0, 0x51EA}, /* East Asian ideograph */ {"\x77", 0, 0x5302}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page758 = { marc8_31page758_flat, 0 }; /* PAGE 757 */ struct yaz_iconv_trie_flat marc8_31page757_flat[] = { {"\x32", 0, 0x9D2B}, /* East Asian ideograph */ {"\x36", 0, 0x96EB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page757 = { marc8_31page757_flat, 0 }; /* PAGE 756 */ struct yaz_iconv_trie_flat marc8_31page756_flat[] = { {"\x29", 0, 0x7C82}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page756 = { marc8_31page756_flat, 0 }; /* PAGE 755 */ struct yaz_iconv_trie_dir marc8_31page755_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {795, 0, 0}, {0, 0, 0}, {0, 0, 0}, {796, 0, 0}, {797, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {757, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {758, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {759, 0, 0}, {0, 0, 0}, {760, 0, 0}, {0, 0, 0}, {0, 0, 0}, {761, 0, 0}, {762, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {763, 0, 0}, {764, 0, 0}, {765, 0, 0}, {766, 0, 0}, {767, 0, 0}, {768, 0, 0}, {769, 0, 0}, {0, 0, 0}, {770, 0, 0}, {771, 0, 0}, {772, 0, 0}, {773, 0, 0}, {774, 0, 0}, {775, 0, 0}, {776, 0, 0}, {0, 0, 0}, {777, 0, 0}, {778, 0, 0}, {779, 0, 0}, {780, 0, 0}, {781, 0, 0}, {0, 0, 0}, {782, 0, 0}, {783, 0, 0}, {784, 0, 0}, {785, 0, 0}, {786, 0, 0}, {0, 0, 0}, {787, 0, 0}, {788, 0, 0}, {789, 0, 0}, {790, 0, 0}, {791, 0, 0}, {792, 0, 0}, {793, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page755 = { 0, marc8_31page755_dir }; /* PAGE 754 */ struct yaz_iconv_trie_flat marc8_31page754_flat[] = { {"\x73\x5D", 0, 0x7E8A}, /* East Asian ideograph (variant of EACC 22735D) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page754 = { marc8_31page754_flat, 0 }; /* PAGE 753 */ struct yaz_iconv_trie_flat marc8_31page753_flat[] = { {"\x30\x51", 0, 0x8CAE}, /* East Asian ideograph */ {"\x30\x57", 0, 0x4E98}, /* East Asian ideograph */ {"\x34\x21", 0, 0x91D6}, /* East Asian ideograph */ {"\x35\x6A", 0, 0x8BC3}, /* East Asian ideograph */ {"\x38\x4D", 0, 0x51C3}, /* East Asian ideograph */ {"\x3A\x47", 0, 0x8885}, /* East Asian ideograph */ {"\x3B\x52", 0, 0x6C3D}, /* East Asian ideograph */ {"\x3D\x67", 0, 0x8FF3}, /* East Asian ideograph */ {"\x45\x6D", 0, 0x822E}, /* East Asian ideograph */ {"\x49\x6B", 0, 0x852B}, /* East Asian ideograph */ {"\x4E\x5B", 0, 0x9271}, /* East Asian ideograph */ {"\x51\x3B", 0, 0x7E9F}, /* East Asian ideograph */ {"\x56\x3F", 0, 0x8616}, /* East Asian ideograph */ {"\x5E\x5D", 0, 0x9616}, /* East Asian ideograph */ {"\x61\x22", 0, 0x9988}, /* East Asian ideograph */ {"\x6A\x26", 0, 0x51B4}, /* East Asian ideograph */ {"\x79\x54", 0, 0x734E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page753 = { marc8_31page753_flat, 0 }; /* PAGE 752 */ struct yaz_iconv_trie_flat marc8_31page752_flat[] = { {"\x22\x2A", 0, 0x83B5}, /* East Asian ideograph */ {"\x29\x25", 0, 0x8770}, /* East Asian ideograph */ {"\x29\x62", 0, 0x86C9}, /* East Asian ideograph (variant of EACC 232962) */ {"\x2C\x3C", 0, 0x87E5}, /* East Asian ideograph */ {"\x2D\x75", 0, 0x8872}, /* East Asian ideograph (variant of EACC 232D75) */ {"\x2F\x5D", 0, 0x8941}, /* East Asian ideograph (variant of EACC 232F5D) */ {"\x2F\x73", 0, 0x7E5D}, /* East Asian ideograph */ {"\x2F\x7A", 0, 0x891D}, /* East Asian ideograph */ {"\x30\x32", 0, 0x88AE}, /* East Asian ideograph */ {"\x33\x59", 0, 0x56AF}, /* East Asian ideograph */ {"\x33\x63", 0, 0x8C25}, /* East Asian ideograph */ {"\x38\x6F", 0, 0x544B}, /* East Asian ideograph */ {"\x3C\x6C", 0, 0x8FB6}, /* East Asian ideograph */ {"\x41\x34", 0, 0x919B}, /* East Asian ideograph */ {"\x41\x76", 0, 0x91DB}, /* East Asian ideograph */ {"\x44\x5B", 0, 0x9306}, /* East Asian ideograph (variant of EACC 23445B) */ {"\x44\x6B", 0, 0x954E}, /* East Asian ideograph */ {"\x47\x2C", 0, 0x952A}, /* East Asian ideograph */ {"\x47\x54", 0, 0x9544}, /* East Asian ideograph */ {"\x47\x7B", 0, 0x943E}, /* East Asian ideograph */ {"\x48\x32", 0, 0x953F}, /* East Asian ideograph */ {"\x48\x35", 0, 0x954C}, /* East Asian ideograph */ {"\x48\x62", 0, 0x9229}, /* East Asian ideograph */ {"\x4A\x6C", 0, 0x9667}, /* East Asian ideograph */ {"\x4D\x61", 0, 0x7EF1}, /* East Asian ideograph */ {"\x4F\x39", 0, 0x988C}, /* East Asian ideograph */ {"\x50\x3A", 0, 0x98D1}, /* East Asian ideograph */ {"\x50\x53", 0, 0x98DA}, /* East Asian ideograph */ {"\x51\x54", 0, 0x9942}, /* East Asian ideograph */ {"\x55\x74", 0, 0x9B2E}, /* East Asian ideograph */ {"\x58\x58", 0, 0x9BE3}, /* East Asian ideograph */ {"\x58\x75", 0, 0x9CD0}, /* East Asian ideograph */ {"\x59\x34", 0, 0x9CA6}, /* East Asian ideograph */ {"\x59\x4E", 0, 0x9BF5}, /* East Asian ideograph */ {"\x59\x73", 0, 0x51EB}, /* East Asian ideograph */ {"\x5A\x6C", 0, 0x9D46}, /* East Asian ideograph */ {"\x5B\x35", 0, 0x9DAB}, /* East Asian ideograph */ {"\x5B\x7E", 0, 0x9DC6}, /* East Asian ideograph */ {"\x5C\x6B", 0, 0x9D50}, /* East Asian ideograph */ {"\x5D\x49", 0, 0x9E81}, /* East Asian ideograph */ {"\x5F\x70", 0, 0x9F44}, /* East Asian ideograph */ {"\x5F\x7B", 0, 0x97F2}, /* East Asian ideograph */ {"\x60\x47", 0, 0x816D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page752 = { marc8_31page752_flat, 0 }; /* PAGE 751 */ struct yaz_iconv_trie_flat marc8_31page751_flat[] = { {"\x4D", 0, 0x8343}, /* East Asian ideograph */ {"\x6A", 0, 0x8323}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page751 = { marc8_31page751_flat, 0 }; /* PAGE 750 */ struct yaz_iconv_trie_flat marc8_31page750_flat[] = { {"\x45", 0, 0x82AE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page750 = { marc8_31page750_flat, 0 }; /* PAGE 749 */ struct yaz_iconv_trie_flat marc8_31page749_flat[] = { {"\x4E", 0, 0x80B7}, /* East Asian ideograph */ {"\x59", 0, 0x817D}, /* East Asian ideograph */ {"\x6B", 0, 0x815F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page749 = { marc8_31page749_flat, 0 }; /* PAGE 748 */ struct yaz_iconv_trie_flat marc8_31page748_flat[] = { {"\x28", 0, 0x5FAD}, /* East Asian ideograph (variant of EACC 2E7328) */ {"\x5D", 0, 0x7D4B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page748 = { marc8_31page748_flat, 0 }; /* PAGE 747 */ struct yaz_iconv_trie_flat marc8_31page747_flat[] = { {"\x5D", 0, 0x7A39}, /* East Asian ideograph */ {"\x65", 0, 0x7DFC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page747 = { marc8_31page747_flat, 0 }; /* PAGE 746 */ struct yaz_iconv_trie_flat marc8_31page746_flat[] = { {"\x5A", 0, 0x7EE6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page746 = { marc8_31page746_flat, 0 }; /* PAGE 745 */ struct yaz_iconv_trie_flat marc8_31page745_flat[] = { {"\x43", 0, 0x7CCD}, /* East Asian ideograph */ {"\x7B", 0, 0x7CE8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page745 = { marc8_31page745_flat, 0 }; /* PAGE 744 */ struct yaz_iconv_trie_flat marc8_31page744_flat[] = { {"\x42", 0, 0x7C31}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page744 = { marc8_31page744_flat, 0 }; /* PAGE 743 */ struct yaz_iconv_trie_flat marc8_31page743_flat[] = { {"\x46", 0, 0x7B9F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page743 = { marc8_31page743_flat, 0 }; /* PAGE 742 */ struct yaz_iconv_trie_flat marc8_31page742_flat[] = { {"\x62", 0, 0x7B4C}, /* East Asian ideograph (variant of EACC 226B62) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page742 = { marc8_31page742_flat, 0 }; /* PAGE 741 */ struct yaz_iconv_trie_flat marc8_31page741_flat[] = { {"\x5C", 0, 0x7A06}, /* East Asian ideograph */ {"\x5F", 0, 0x7A63}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page741 = { marc8_31page741_flat, 0 }; /* PAGE 740 */ struct yaz_iconv_trie_flat marc8_31page740_flat[] = { {"\x3E", 0, 0x79EB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page740 = { marc8_31page740_flat, 0 }; /* PAGE 739 */ struct yaz_iconv_trie_flat marc8_31page739_flat[] = { {"\x75", 0, 0x7962}, /* East Asian ideograph (unrelated variant of EACC 293032) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page739 = { marc8_31page739_flat, 0 }; /* PAGE 738 */ struct yaz_iconv_trie_flat marc8_31page738_flat[] = { {"\x64", 0, 0x78D9}, /* East Asian ideograph */ {"\x65", 0, 0x78B9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page738 = { marc8_31page738_flat, 0 }; /* PAGE 737 */ struct yaz_iconv_trie_flat marc8_31page737_flat[] = { {"\x76", 0, 0x7839}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page737 = { marc8_31page737_flat, 0 }; /* PAGE 736 */ struct yaz_iconv_trie_flat marc8_31page736_flat[] = { {"\x66", 0, 0x778B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page736 = { marc8_31page736_flat, 0 }; /* PAGE 735 */ struct yaz_iconv_trie_flat marc8_31page735_flat[] = { {"\x22", 0, 0x7596}, /* East Asian ideograph */ {"\x74", 0, 0x76B9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page735 = { marc8_31page735_flat, 0 }; /* PAGE 734 */ struct yaz_iconv_trie_flat marc8_31page734_flat[] = { {"\x58", 0, 0x7640}, /* East Asian ideograph */ {"\x69", 0, 0x75EB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page734 = { marc8_31page734_flat, 0 }; /* PAGE 733 */ struct yaz_iconv_trie_flat marc8_31page733_flat[] = { {"\x3A", 0, 0x73F1}, /* East Asian ideograph */ {"\x61", 0, 0x74F4}, /* East Asian ideograph (variant of EACC 225C61) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page733 = { marc8_31page733_flat, 0 }; /* PAGE 732 */ struct yaz_iconv_trie_flat marc8_31page732_flat[] = { {"\x38", 0, 0x729F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page732 = { marc8_31page732_flat, 0 }; /* PAGE 731 */ struct yaz_iconv_trie_flat marc8_31page731_flat[] = { {"\x41", 0, 0x4E2C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page731 = { marc8_31page731_flat, 0 }; /* PAGE 730 */ struct yaz_iconv_trie_flat marc8_31page730_flat[] = { {"\x47", 0, 0x71E0}, /* East Asian ideograph (variant of EACC 225447) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page730 = { marc8_31page730_flat, 0 }; /* PAGE 729 */ struct yaz_iconv_trie_flat marc8_31page729_flat[] = { {"\x3A", 0, 0x717A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page729 = { marc8_31page729_flat, 0 }; /* PAGE 728 */ struct yaz_iconv_trie_flat marc8_31page728_flat[] = { {"\x75", 0, 0x8315}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page728 = { marc8_31page728_flat, 0 }; /* PAGE 727 */ struct yaz_iconv_trie_flat marc8_31page727_flat[] = { {"\x24", 0, 0x6F46}, /* East Asian ideograph */ {"\x26", 0, 0x6EDD}, /* East Asian ideograph */ {"\x2B", 0, 0x701E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page727 = { marc8_31page727_flat, 0 }; /* PAGE 726 */ struct yaz_iconv_trie_flat marc8_31page726_flat[] = { {"\x3D", 0, 0x6F62}, /* East Asian ideograph */ {"\x63", 0, 0x6F99}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page726 = { marc8_31page726_flat, 0 }; /* PAGE 725 */ struct yaz_iconv_trie_flat marc8_31page725_flat[] = { {"\x35", 0, 0x6E0C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page725 = { marc8_31page725_flat, 0 }; /* PAGE 724 */ struct yaz_iconv_trie_flat marc8_31page724_flat[] = { {"\x6E", 0, 0x6CAD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page724 = { marc8_31page724_flat, 0 }; /* PAGE 723 */ struct yaz_iconv_trie_flat marc8_31page723_flat[] = { {"\x46", 0, 0x6B4E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page723 = { marc8_31page723_flat, 0 }; /* PAGE 722 */ struct yaz_iconv_trie_flat marc8_31page722_flat[] = { {"\x33", 0, 0x6AAA}, /* East Asian ideograph */ {"\x39", 0, 0x69DE}, /* East Asian ideograph */ {"\x3F", 0, 0x6A65}, /* East Asian ideograph */ {"\x45", 0, 0x67A6}, /* East Asian ideograph */ {"\x59", 0, 0x6B05}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page722 = { marc8_31page722_flat, 0 }; /* PAGE 721 */ struct yaz_iconv_trie_flat marc8_31page721_flat[] = { {"\x46", 0, 0x8538}, /* East Asian ideograph */ {"\x77", 0, 0x8223}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page721 = { marc8_31page721_flat, 0 }; /* PAGE 720 */ struct yaz_iconv_trie_flat marc8_31page720_flat[] = { {"\x68", 0, 0x69C7}, /* East Asian ideograph */ {"\x7A", 0, 0x6922}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page720 = { marc8_31page720_flat, 0 }; /* PAGE 719 */ struct yaz_iconv_trie_flat marc8_31page719_flat[] = { {"\x22", 0, 0x6860}, /* East Asian ideograph */ {"\x31", 0, 0x6798}, /* East Asian ideograph */ {"\x60", 0, 0x6764}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page719 = { marc8_31page719_flat, 0 }; /* PAGE 718 */ struct yaz_iconv_trie_flat marc8_31page718_flat[] = { {"\x33", 0, 0x80AD}, /* East Asian ideograph (variant of EACC 2E3A33) */ {"\x55", 0, 0x6741}, /* East Asian ideograph */ {"\x5B", 0, 0x6859}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page718 = { marc8_31page718_flat, 0 }; /* PAGE 717 */ struct yaz_iconv_trie_flat marc8_31page717_flat[] = { {"\x44", 0, 0x65D9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page717 = { marc8_31page717_flat, 0 }; /* PAGE 716 */ struct yaz_iconv_trie_flat marc8_31page716_flat[] = { {"\x4A", 0, 0x64B8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page716 = { marc8_31page716_flat, 0 }; /* PAGE 715 */ struct yaz_iconv_trie_flat marc8_31page715_flat[] = { {"\x74", 0, 0x631D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page715 = { marc8_31page715_flat, 0 }; /* PAGE 714 */ struct yaz_iconv_trie_flat marc8_31page714_flat[] = { {"\x61", 0, 0x622C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page714 = { marc8_31page714_flat, 0 }; /* PAGE 713 */ struct yaz_iconv_trie_flat marc8_31page713_flat[] = { {"\x62", 0, 0x5F4D}, /* East Asian ideograph (variant of EACC 222962) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page713 = { marc8_31page713_flat, 0 }; /* PAGE 712 */ struct yaz_iconv_trie_flat marc8_31page712_flat[] = { {"\x4C", 0, 0x53A9}, /* East Asian ideograph */ {"\x67", 0, 0x5EDB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page712 = { marc8_31page712_flat, 0 }; /* PAGE 711 */ struct yaz_iconv_trie_flat marc8_31page711_flat[] = { {"\x32", 0, 0x5D5B}, /* East Asian ideograph */ {"\x39", 0, 0x5D73}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page711 = { marc8_31page711_flat, 0 }; /* PAGE 710 */ struct yaz_iconv_trie_flat marc8_31page710_flat[] = { {"\x30", 0, 0x5C53}, /* East Asian ideograph */ {"\x3F", 0, 0x5C76}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page710 = { marc8_31page710_flat, 0 }; /* PAGE 709 */ struct yaz_iconv_trie_dir marc8_31page709_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {711, 0, 0}, {0, 0, 0}, {712, 0, 0}, {0, 0, 0}, {0, 0, 0}, {713, 0, 0}, {714, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {715, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {716, 0, 0}, {717, 0, 0}, {0, 0, 0}, {718, 0, 0}, {0, 0, 0}, {0, 0, 0}, {719, 0, 0}, {720, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {721, 0, 0}, {0, 0, 0}, {722, 0, 0}, {0, 0, 0}, {723, 0, 0}, {724, 0, 0}, {0, 0, 0}, {0, 0, 0}, {725, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {726, 0, 0}, {727, 0, 0}, {0, 0, 0}, {728, 0, 0}, {0, 0, 0}, {729, 0, 0}, {730, 0, 0}, {0, 0, 0}, {731, 0, 0}, {732, 0, 0}, {733, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {734, 0, 0}, {0, 0, 0}, {0, 0, 0}, {735, 0, 0}, {736, 0, 0}, {0, 0, 0}, {737, 0, 0}, {738, 0, 0}, {0, 0, 0}, {739, 0, 0}, {0, 0, 0}, {740, 0, 0}, {741, 0, 0}, {742, 0, 0}, {0, 0, 0}, {743, 0, 0}, {744, 0, 0}, {0, 0, 0}, {745, 0, 0}, {746, 0, 0}, {0, 0, 0}, {747, 0, 0}, {748, 0, 0}, {749, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {750, 0, 0}, {0, 0, 0}, {0, 0, 0}, {751, 0, 0}, {752, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page709 = { 0, marc8_31page709_dir }; /* PAGE 708 */ struct yaz_iconv_trie_flat marc8_31page708_flat[] = { {"\x6A", 0, 0x5BC3}, /* East Asian ideograph (variant of EACC 217E6A) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page708 = { marc8_31page708_flat, 0 }; /* PAGE 707 */ struct yaz_iconv_trie_flat marc8_31page707_flat[] = { {"\x54", 0, 0x5968}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page707 = { marc8_31page707_flat, 0 }; /* PAGE 706 */ struct yaz_iconv_trie_flat marc8_31page706_flat[] = { {"\x74", 0, 0x590A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page706 = { marc8_31page706_flat, 0 }; /* PAGE 705 */ struct yaz_iconv_trie_flat marc8_31page705_flat[] = { {"\x3D", 0, 0x57F4}, /* East Asian ideograph (variant of EACC 21763D) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page705 = { marc8_31page705_flat, 0 }; /* PAGE 704 */ struct yaz_iconv_trie_flat marc8_31page704_flat[] = { {"\x77", 0, 0x57D3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page704 = { marc8_31page704_flat, 0 }; /* PAGE 703 */ struct yaz_iconv_trie_flat marc8_31page703_flat[] = { {"\x21", 0, 0x56F9}, /* East Asian ideograph (variant of EACC 217421) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page703 = { marc8_31page703_flat, 0 }; /* PAGE 702 */ struct yaz_iconv_trie_flat marc8_31page702_flat[] = { {"\x22", 0, 0x7F83}, /* East Asian ideograph */ {"\x26", 0, 0x6C8D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page702 = { marc8_31page702_flat, 0 }; /* PAGE 701 */ struct yaz_iconv_trie_flat marc8_31page701_flat[] = { {"\x2E", 0, 0x4EC2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page701 = { marc8_31page701_flat, 0 }; /* PAGE 700 */ struct yaz_iconv_trie_flat marc8_31page700_flat[] = { {"\x37", 0, 0x4FE3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page700 = { marc8_31page700_flat, 0 }; /* PAGE 699 */ struct yaz_iconv_trie_flat marc8_31page699_flat[] = { {"\x55", 0, 0x4EB6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page699 = { marc8_31page699_flat, 0 }; /* PAGE 698 */ struct yaz_iconv_trie_flat marc8_31page698_flat[] = { {"\x24", 0, 0x9F62}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page698 = { marc8_31page698_flat, 0 }; /* PAGE 697 */ struct yaz_iconv_trie_flat marc8_31page697_flat[] = { {"\x3B", 0, 0x9D12}, /* East Asian ideograph */ {"\x47", 0, 0x9D2C}, /* East Asian ideograph */ {"\x4F", 0, 0x9D49}, /* East Asian ideograph */ {"\x58", 0, 0x68BA}, /* East Asian ideograph */ {"\x5C", 0, 0x9EB8}, /* East Asian ideograph (variant of EACC 27625C) */ {"\x60", 0, 0x9EBD}, /* East Asian ideograph */ {"\x66", 0, 0x9ED2}, /* East Asian ideograph */ {"\x68", 0, 0x9ED9}, /* East Asian ideograph */ {"\x78", 0, 0x9F21}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page697 = { marc8_31page697_flat, 0 }; /* PAGE 696 */ struct yaz_iconv_trie_flat marc8_31page696_flat[] = { {"\x22", 0, 0x994B}, /* East Asian ideograph */ {"\x30", 0, 0x99C4}, /* East Asian ideograph */ {"\x3F", 0, 0x9A08}, /* East Asian ideograph */ {"\x45", 0, 0x9A12}, /* East Asian ideograph */ {"\x47", 0, 0x99C6}, /* East Asian ideograph */ {"\x4D", 0, 0x9A13}, /* East Asian ideograph */ {"\x59", 0, 0x81B8}, /* East Asian ideograph */ {"\x5F", 0, 0x9AEA}, /* East Asian ideograph */ {"\x67", 0, 0x95D8}, /* East Asian ideograph */ {"\x68", 0, 0x9599}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page696 = { marc8_31page696_flat, 0 }; /* PAGE 695 */ struct yaz_iconv_trie_flat marc8_31page695_flat[] = { {"\x2D", 0, 0x9771}, /* East Asian ideograph */ {"\x44", 0, 0x9818}, /* East Asian ideograph */ {"\x48", 0, 0x981A}, /* East Asian ideograph */ {"\x53", 0, 0x985E}, /* East Asian ideograph */ {"\x6F", 0, 0x991D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page695 = { marc8_31page695_flat, 0 }; /* PAGE 694 */ struct yaz_iconv_trie_flat marc8_31page694_flat[] = { {"\x30", 0, 0x9686}, /* East Asian ideograph (variant of EACC 215F30) */ {"\x35", 0, 0x6B92}, /* East Asian ideograph */ {"\x3A", 0, 0x967A}, /* East Asian ideograph */ {"\x49", 0, 0x51CB}, /* East Asian ideograph */ {"\x4C", 0, 0x9D8F}, /* East Asian ideograph */ {"\x50", 0, 0x96E3}, /* East Asian ideograph */ {"\x58", 0, 0x96F6}, /* East Asian ideograph (variant of EACC 215F58 */ {"\x62", 0, 0x7668}, /* East Asian ideograph */ {"\x6F", 0, 0x970A}, /* East Asian ideograph */ {"\x70", 0, 0x9752}, /* East Asian ideograph */ {"\x71", 0, 0x9756}, /* East Asian ideograph */ {"\x72", 0, 0x975B}, /* East Asian ideograph */ {"\x73", 0, 0x975C}, /* East Asian ideograph (variant of EACC 215F73) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page694 = { marc8_31page694_flat, 0 }; /* PAGE 693 */ struct yaz_iconv_trie_flat marc8_31page693_flat[] = { {"\x27", 0, 0x93AD}, /* East Asian ideograph */ {"\x3D", 0, 0x9421}, /* East Asian ideograph */ {"\x3F", 0, 0x922C}, /* East Asian ideograph */ {"\x5D", 0, 0x95D4}, /* East Asian ideograph */ {"\x69", 0, 0x95A2}, /* East Asian ideograph */ {"\x6C", 0, 0x961D}, /* East Asian ideograph (duplicate simplified) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page693 = { marc8_31page693_flat, 0 }; /* PAGE 692 */ struct yaz_iconv_trie_flat marc8_31page692_flat[] = { {"\x2B", 0, 0x9162}, /* East Asian ideograph */ {"\x34", 0, 0x91B8}, /* East Asian ideograph */ {"\x36", 0, 0x91C6}, /* East Asian ideograph */ {"\x38", 0, 0x91C8}, /* East Asian ideograph */ {"\x42", 0, 0x91E1}, /* East Asian ideograph */ {"\x58", 0, 0x9234}, /* East Asian ideograph */ {"\x65", 0, 0x8217}, /* East Asian ideograph */ {"\x70", 0, 0x92AD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page692 = { marc8_31page692_flat, 0 }; /* PAGE 691 */ struct yaz_iconv_trie_flat marc8_31page691_flat[] = { {"\x32", 0, 0x9038}, /* East Asian ideograph */ {"\x39", 0, 0x9039}, /* East Asian ideograph */ {"\x47", 0, 0x9059}, /* East Asian ideograph */ {"\x50", 0, 0x9045}, /* East Asian ideograph */ {"\x54", 0, 0x8F9F}, /* East Asian ideograph (duplicate simplified) */ {"\x5B", 0, 0x8FBA}, /* East Asian ideograph */ {"\x5E", 0, 0x961D}, /* East Asian ideograph */ {"\x72", 0, 0x9119}, /* East Asian ideograph (variant of EACC 215C72) */ {"\x77", 0, 0x9139}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page691 = { marc8_31page691_flat, 0 }; /* PAGE 690 */ struct yaz_iconv_trie_flat marc8_31page690_flat[] = { {"\x29", 0, 0x8E8D}, /* East Asian ideograph */ {"\x46", 0, 0x8F0C}, /* East Asian ideograph */ {"\x52", 0, 0x8F42}, /* East Asian ideograph */ {"\x55", 0, 0x8EE2}, /* East Asian ideograph */ {"\x58", 0, 0x8EE3}, /* East Asian ideograph */ {"\x5E", 0, 0x5F01}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page690 = { marc8_31page690_flat, 0 }; /* PAGE 689 */ struct yaz_iconv_trie_flat marc8_31page689_flat[] = { {"\x23", 0, 0x621D}, /* East Asian ideograph */ {"\x31", 0, 0x8CCE}, /* East Asian ideograph */ {"\x3B", 0, 0x8D08}, /* East Asian ideograph */ {"\x68", 0, 0x8DF5}, /* East Asian ideograph (variant of EACC 275A68) */ {"\x7E", 0, 0x5C69}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page689 = { marc8_31page689_flat, 0 }; /* PAGE 688 */ struct yaz_iconv_trie_flat marc8_31page688_flat[] = { {"\x36", 0, 0x8B20}, /* East Asian ideograph */ {"\x46", 0, 0x8A33}, /* East Asian ideograph */ {"\x4A", 0, 0x8AAD}, /* East Asian ideograph */ {"\x4B", 0, 0x5909}, /* East Asian ideograph */ {"\x59", 0, 0x8273}, /* East Asian ideograph */ {"\x63", 0, 0x734F}, /* East Asian ideograph */ {"\x64", 0, 0x72E2}, /* East Asian ideograph */ {"\x73", 0, 0x8D2E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page688 = { marc8_31page688_flat, 0 }; /* PAGE 687 */ struct yaz_iconv_trie_flat marc8_31page687_flat[] = { {"\x24", 0, 0x897E}, /* East Asian ideograph */ {"\x26", 0, 0x8983}, /* East Asian ideograph (variant of EACC 215826) */ {"\x30", 0, 0x899A}, /* East Asian ideograph */ {"\x32", 0, 0x89B3}, /* East Asian ideograph */ {"\x61", 0, 0x4F89}, /* East Asian ideograph */ {"\x71", 0, 0x8AA4}, /* East Asian ideograph */ {"\x7A", 0, 0x8ACB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page687 = { marc8_31page687_flat, 0 }; /* PAGE 686 */ struct yaz_iconv_trie_flat marc8_31page686_flat[] = { {"\x24", 0, 0x86CD}, /* East Asian ideograph */ {"\x36", 0, 0x877F}, /* East Asian ideograph */ {"\x40", 0, 0x8827}, /* East Asian ideograph */ {"\x46", 0, 0x8853}, /* East Asian ideograph */ {"\x6C", 0, 0x523E}, /* East Asian ideograph */ {"\x6F", 0, 0x8910}, /* East Asian ideograph (variant of EACC 21576F) */ {"\x73", 0, 0x7ED4}, /* East Asian ideograph */ {"\x7E", 0, 0x7E7F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page686 = { marc8_31page686_flat, 0 }; /* PAGE 685 */ struct yaz_iconv_trie_flat marc8_31page685_flat[] = { {"\x29", 0, 0x85CD}, /* East Asian ideograph */ {"\x2B", 0, 0x8535}, /* East Asian ideograph */ {"\x31", 0, 0x82B8}, /* East Asian ideograph */ {"\x32", 0, 0x7C54}, /* East Asian ideograph */ {"\x3A", 0, 0x82A6}, /* East Asian ideograph (variant of EACC 27563A) */ {"\x3F", 0, 0x6A98}, /* East Asian ideograph */ {"\x47", 0, 0x51E6}, /* East Asian ideograph */ {"\x6A", 0, 0x8708}, /* East Asian ideograph (variant of EACC 21566A) */ {"\x71", 0, 0x873B}, /* East Asian ideograph (variant of EACC 215671) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page685 = { marc8_31page685_flat, 0 }; /* PAGE 684 */ struct yaz_iconv_trie_flat marc8_31page684_flat[] = { {"\x21", 0, 0x8332}, /* East Asian ideograph */ {"\x2C", 0, 0x8392}, /* East Asian ideograph */ {"\x3A", 0, 0x83C1}, /* East Asian ideograph (variant of EACC 21553A) */ {"\x3F", 0, 0x83BD}, /* East Asian ideograph (variant of EACC 21553F) */ {"\x42", 0, 0x8420}, /* East Asian ideograph */ {"\x64", 0, 0x77C7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page684 = { marc8_31page684_flat, 0 }; /* PAGE 683 */ struct yaz_iconv_trie_flat marc8_31page683_flat[] = { {"\x22", 0, 0x81D3}, /* East Asian ideograph */ {"\x28", 0, 0x81ED}, /* East Asian ideograph (variant of EACC 215428) */ {"\x34", 0, 0x6319}, /* East Asian ideograph */ {"\x37", 0, 0x820E}, /* East Asian ideograph */ {"\x6D", 0, 0x82D3}, /* East Asian ideograph (variant of EACC 21546D) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page683 = { marc8_31page683_flat, 0 }; /* PAGE 682 */ struct yaz_iconv_trie_flat marc8_31page682_flat[] = { {"\x3B", 0, 0x695C}, /* East Asian ideograph */ {"\x61", 0, 0x89D2}, /* East Asian ideograph (duplicate simplified) */ {"\x65", 0, 0x8133}, /* East Asian ideograph */ {"\x7D", 0, 0x9ACC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page682 = { marc8_31page682_flat, 0 }; /* PAGE 681 */ struct yaz_iconv_trie_flat marc8_31page681_flat[] = { {"\x21", 0, 0x7D9A}, /* East Asian ideograph */ {"\x23", 0, 0x7E4A}, /* East Asian ideograph */ {"\x27", 0, 0x6B20}, /* East Asian ideograph */ {"\x2B", 0, 0x7F36}, /* East Asian ideograph */ {"\x38", 0, 0x7F87}, /* East Asian ideograph */ {"\x3E", 0, 0x7F9A}, /* East Asian ideograph (variant of EACC 21523E) */ {"\x47", 0, 0x7FAE}, /* East Asian ideograph */ {"\x4E", 0, 0x7FCE}, /* East Asian ideograph */ {"\x5A", 0, 0x7FFA}, /* East Asian ideograph */ {"\x5B", 0, 0x66DC}, /* East Asian ideograph (variant of EACC 39525B) */ {"\x5C", 0, 0x8002}, /* East Asian ideograph */ {"\x6E", 0, 0x8046}, /* East Asian ideograph (variant of EACC 21526E) */ {"\x77", 0, 0x8068}, /* East Asian ideograph */ {"\x7C", 0, 0x8080}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page681 = { marc8_31page681_flat, 0 }; /* PAGE 680 */ struct yaz_iconv_trie_flat marc8_31page680_flat[] = { {"\x3B", 0, 0x7CF8}, /* East Asian ideograph */ {"\x54", 0, 0x7DF4}, /* East Asian ideograph */ {"\x5A", 0, 0x7E01}, /* East Asian ideograph */ {"\x64", 0, 0x770C}, /* East Asian ideograph */ {"\x6A", 0, 0x7EF7}, /* East Asian ideograph */ {"\x6D", 0, 0x7DCF}, /* East Asian ideograph */ {"\x6E", 0, 0x7E26}, /* East Asian ideograph */ {"\x76", 0, 0x7E04}, /* East Asian ideograph */ {"\x79", 0, 0x7F0B}, /* East Asian ideograph */ {"\x7E", 0, 0x7E92}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page680 = { marc8_31page680_flat, 0 }; /* PAGE 679 */ struct yaz_iconv_trie_flat marc8_31page679_flat[] = { {"\x36", 0, 0x7C14}, /* East Asian ideograph */ {"\x3B", 0, 0x7C12}, /* East Asian ideograph */ {"\x44", 0, 0x7C27}, /* East Asian ideograph (variant of EACC 215044) */ {"\x52", 0, 0x7C56}, /* East Asian ideograph */ {"\x61", 0, 0x7CBE}, /* East Asian ideograph */ {"\x6C", 0, 0x7CAB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page679 = { marc8_31page679_flat, 0 }; /* PAGE 678 */ struct yaz_iconv_trie_flat marc8_31page678_flat[] = { {"\x29", 0, 0x7A50}, /* East Asian ideograph */ {"\x3C", 0, 0x79F0}, /* East Asian ideograph (variant of EACC 274F3C) */ {"\x43", 0, 0x7A32}, /* East Asian ideograph */ {"\x4C", 0, 0x7A4F}, /* East Asian ideograph */ {"\x7B", 0, 0x7B7A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page678 = { marc8_31page678_flat, 0 }; /* PAGE 677 */ struct yaz_iconv_trie_flat marc8_31page677_flat[] = { {"\x21", 0, 0x7B36}, /* East Asian ideograph */ {"\x37", 0, 0x7814}, /* East Asian ideograph */ {"\x39", 0, 0x5CFA}, /* East Asian ideograph */ {"\x56", 0, 0x78FA}, /* East Asian ideograph */ {"\x5B", 0, 0x783F}, /* East Asian ideograph */ {"\x67", 0, 0x79D8}, /* East Asian ideograph */ {"\x7B", 0, 0x7985}, /* East Asian ideograph (variant of EACC 274E7B) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page677 = { marc8_31page677_flat, 0 }; /* PAGE 676 */ struct yaz_iconv_trie_flat marc8_31page676_flat[] = { {"\x41", 0, 0x862F}, /* East Asian ideograph */ {"\x45", 0, 0x76F4}, /* East Asian ideograph (variant of EACC 214D45) */ {"\x56", 0, 0x8846}, /* East Asian ideograph */ {"\x59", 0, 0x775B}, /* East Asian ideograph (variant of EACC 214D59) */ {"\x73", 0, 0x66B8}, /* East Asian ideograph */ {"\x7B", 0, 0x77D7}, /* East Asian ideograph (variant of EACC 214D7B) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page676 = { marc8_31page676_flat, 0 }; /* PAGE 675 */ struct yaz_iconv_trie_flat marc8_31page675_flat[] = { {"\x36", 0, 0x7575}, /* East Asian ideograph */ {"\x3C", 0, 0x7573}, /* East Asian ideograph */ {"\x51", 0, 0x75CA}, /* East Asian ideograph */ {"\x5B", 0, 0x75F3}, /* East Asian ideograph */ {"\x67", 0, 0x761F}, /* East Asian ideograph (variant of EACC 214C67) */ {"\x79", 0, 0x7672}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page675 = { marc8_31page675_flat, 0 }; /* PAGE 674 */ struct yaz_iconv_trie_flat marc8_31page674_flat[] = { {"\x2B", 0, 0x7363}, /* East Asian ideograph */ {"\x2C", 0, 0x731F}, /* East Asian ideograph */ {"\x3E", 0, 0x73B2}, /* East Asian ideograph (variant of EACC 214B3E) */ {"\x63", 0, 0x749C}, /* East Asian ideograph */ {"\x71", 0, 0x7F3E}, /* East Asian ideograph (variant of EACC 2D4B71) */ {"\x77", 0, 0x4EC0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page674 = { marc8_31page674_flat, 0 }; /* PAGE 673 */ struct yaz_iconv_trie_flat marc8_31page673_flat[] = { {"\x2E", 0, 0x55B6}, /* East Asian ideograph */ {"\x38", 0, 0x71D7}, /* East Asian ideograph */ {"\x3E", 0, 0x7235}, /* East Asian ideograph */ {"\x45", 0, 0x5C13}, /* East Asian ideograph */ {"\x62", 0, 0x72A0}, /* East Asian ideograph */ {"\x74", 0, 0x731C}, /* East Asian ideograph (variant of EACC 214A74) */ {"\x78", 0, 0x72F0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page673 = { marc8_31page673_flat, 0 }; /* PAGE 672 */ struct yaz_iconv_trie_flat marc8_31page672_flat[] = { {"\x21", 0, 0x6CA2}, /* East Asian ideograph */ {"\x25", 0, 0x6FB3}, /* East Asian ideograph (variant of EACC 214925) */ {"\x2B", 0, 0x6FEB}, /* East Asian ideograph */ {"\x2E", 0, 0x6E0B}, /* East Asian ideograph */ {"\x31", 0, 0x6E16}, /* East Asian ideograph */ {"\x37", 0, 0x56A0}, /* East Asian ideograph */ {"\x40", 0, 0x6F45}, /* East Asian ideograph */ {"\x47", 0, 0x7AC3}, /* East Asian ideograph */ {"\x6A", 0, 0x932C}, /* East Asian ideograph */ {"\x6B", 0, 0x83F8}, /* East Asian ideograph */ {"\x73", 0, 0x7115}, /* East Asian ideograph */ {"\x75", 0, 0x6427}, /* East Asian ideograph */ {"\x77", 0, 0x7188}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page672 = { marc8_31page672_flat, 0 }; /* PAGE 671 */ struct yaz_iconv_trie_flat marc8_31page671_flat[] = { {"\x35", 0, 0x6DA3}, /* East Asian ideograph */ {"\x46", 0, 0x78C6}, /* East Asian ideograph */ {"\x4A", 0, 0x6E13}, /* East Asian ideograph */ {"\x4B", 0, 0x51D6}, /* East Asian ideograph */ {"\x4C", 0, 0x6F91}, /* East Asian ideograph */ {"\x57", 0, 0x6F22}, /* East Asian ideograph */ {"\x58", 0, 0x6E80}, /* East Asian ideograph */ {"\x5F", 0, 0x6EDE}, /* East Asian ideograph (variant of EACC 27485F) */ {"\x66", 0, 0x6E89}, /* East Asian ideograph */ {"\x74", 0, 0x6FF3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page671 = { marc8_31page671_flat, 0 }; /* PAGE 670 */ struct yaz_iconv_trie_flat marc8_31page670_flat[] = { {"\x41", 0, 0x51BD}, /* East Asian ideograph */ {"\x59", 0, 0x6D99}, /* East Asian ideograph */ {"\x61", 0, 0x6E05}, /* East Asian ideograph */ {"\x67", 0, 0x6DB5}, /* East Asian ideograph (variant of EACC 214767) */ {"\x6C", 0, 0x51C5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page670 = { marc8_31page670_flat, 0 }; /* PAGE 669 */ struct yaz_iconv_trie_flat marc8_31page669_flat[] = { {"\x21", 0, 0x6B53}, /* East Asian ideograph */ {"\x2A", 0, 0x6B74}, /* East Asian ideograph */ {"\x2E", 0, 0x6B81}, /* East Asian ideograph */ {"\x38", 0, 0x6BB1}, /* East Asian ideograph */ {"\x55", 0, 0x6C17}, /* East Asian ideograph */ {"\x5A", 0, 0x6C32}, /* East Asian ideograph */ {"\x76", 0, 0x6C89}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page669 = { marc8_31page669_flat, 0 }; /* PAGE 668 */ struct yaz_iconv_trie_flat marc8_31page668_flat[] = { {"\x34", 0, 0x6994}, /* East Asian ideograph (variant of EACC 214534) */ {"\x37", 0, 0x6804}, /* East Asian ideograph */ {"\x44", 0, 0x69D8}, /* East Asian ideograph */ {"\x45", 0, 0x6982}, /* East Asian ideograph */ {"\x53", 0, 0x6955}, /* East Asian ideograph */ {"\x56", 0, 0x6A2A}, /* East Asian ideograph */ {"\x59", 0, 0x9792}, /* East Asian ideograph */ {"\x61", 0, 0x691C}, /* East Asian ideograph */ {"\x69", 0, 0x6A71}, /* East Asian ideograph */ {"\x6C", 0, 0x6ADB}, /* East Asian ideograph (variant of EACC 21456C) */ {"\x6D", 0, 0x823B}, /* East Asian ideograph */ {"\x6F", 0, 0x685C}, /* East Asian ideograph */ {"\x70", 0, 0x6A29}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page668 = { marc8_31page668_flat, 0 }; /* PAGE 667 */ struct yaz_iconv_trie_flat marc8_31page667_flat[] = { {"\x2D", 0, 0x67A9}, /* East Asian ideograph */ {"\x44", 0, 0x8988}, /* East Asian ideograph (Version J extension) */ {"\x56", 0, 0x6813}, /* East Asian ideograph */ {"\x76", 0, 0x685F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page667 = { marc8_31page667_flat, 0 }; /* PAGE 666 */ struct yaz_iconv_trie_flat marc8_31page666_flat[] = { {"\x39", 0, 0x6674}, /* East Asian ideograph */ {"\x47", 0, 0x66A8}, /* East Asian ideograph */ {"\x4D", 0, 0x663F}, /* East Asian ideograph */ {"\x52", 0, 0x66F5}, /* East Asian ideograph */ {"\x58", 0, 0x66FD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page666 = { marc8_31page666_flat, 0 }; /* PAGE 665 */ struct yaz_iconv_trie_flat marc8_31page665_flat[] = { {"\x35", 0, 0x6442}, /* East Asian ideograph */ {"\x36", 0, 0x643A}, /* East Asian ideograph */ {"\x3A", 0, 0x64B9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page665 = { marc8_31page665_flat, 0 }; /* PAGE 664 */ struct yaz_iconv_trie_flat marc8_31page664_flat[] = { {"\x2A", 0, 0x6323}, /* East Asian ideograph */ {"\x35", 0, 0x6368}, /* East Asian ideograph */ {"\x46", 0, 0x6362}, /* East Asian ideograph */ {"\x47", 0, 0x633F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page664 = { marc8_31page664_flat, 0 }; /* PAGE 663 */ struct yaz_iconv_trie_flat marc8_31page663_flat[] = { {"\x3D", 0, 0x62DD}, /* East Asian ideograph */ {"\x46", 0, 0x629C}, /* East Asian ideograph */ {"\x49", 0, 0x62D0}, /* East Asian ideograph */ {"\x53", 0, 0x627A}, /* East Asian ideograph */ {"\x66", 0, 0x62F4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page663 = { marc8_31page663_flat, 0 }; /* PAGE 662 */ struct yaz_iconv_trie_flat marc8_31page662_flat[] = { {"\x40", 0, 0x618E}, /* East Asian ideograph (variant of EACC 213F40) */ {"\x4A", 0, 0x5FDC}, /* East Asian ideograph */ {"\x4B", 0, 0x601C}, /* East Asian ideograph (variant of EACC 273F4B) */ {"\x50", 0, 0x61CA}, /* East Asian ideograph (variant of EACC 213F50) */ {"\x51", 0, 0x61D1}, /* East Asian ideograph */ {"\x53", 0, 0x61F2}, /* East Asian ideograph */ {"\x74", 0, 0x623B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page662 = { marc8_31page662_flat, 0 }; /* PAGE 661 */ struct yaz_iconv_trie_flat marc8_31page661_flat[] = { {"\x2A", 0, 0x6035}, /* East Asian ideograph */ {"\x40", 0, 0x6046}, /* East Asian ideograph */ {"\x5B", 0, 0x60C5}, /* East Asian ideograph */ {"\x7E", 0, 0x60A9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page661 = { marc8_31page661_flat, 0 }; /* PAGE 660 */ struct yaz_iconv_trie_flat marc8_31page660_flat[] = { {"\x24", 0, 0x53A6}, /* East Asian ideograph */ {"\x27", 0, 0x5EC3}, /* East Asian ideograph */ {"\x2A", 0, 0x5EE3}, /* East Asian ideograph */ {"\x2C", 0, 0x53B0}, /* East Asian ideograph */ {"\x2F", 0, 0x5EF0}, /* East Asian ideograph */ {"\x4B", 0, 0x5F3E}, /* East Asian ideograph */ {"\x4C", 0, 0x5F25}, /* East Asian ideograph (variant of EACC 273D4C) */ {"\x5C", 0, 0x5F83}, /* East Asian ideograph */ {"\x67", 0, 0x5F84}, /* East Asian ideograph (variant of EACC 273D67) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page660 = { marc8_31page660_flat, 0 }; /* PAGE 659 */ struct yaz_iconv_trie_flat marc8_31page659_flat[] = { {"\x21", 0, 0x5D5C}, /* East Asian ideograph */ {"\x23", 0, 0x5CE5}, /* East Asian ideograph */ {"\x2B", 0, 0x67C3}, /* East Asian ideograph (Version J extension) */ {"\x2F", 0, 0x5DBA}, /* East Asian ideograph */ {"\x32", 0, 0x5DD3}, /* East Asian ideograph */ {"\x33", 0, 0x5DCC}, /* East Asian ideograph */ {"\x38", 0, 0x949C}, /* East Asian ideograph */ {"\x53", 0, 0x5E2F}, /* East Asian ideograph */ {"\x5E", 0, 0x5E64}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page659 = { marc8_31page659_flat, 0 }; /* PAGE 658 */ struct yaz_iconv_trie_flat marc8_31page658_flat[] = { {"\x22", 0, 0x51A6}, /* East Asian ideograph */ {"\x31", 0, 0x5B9F}, /* East Asian ideograph */ {"\x37", 0, 0x51A9}, /* East Asian ideograph */ {"\x43", 0, 0x5BFE}, /* East Asian ideograph */ {"\x52", 0, 0x8132}, /* East Asian ideograph */ {"\x61", 0, 0x5C64}, /* East Asian ideograph */ {"\x67", 0, 0x6B67}, /* East Asian ideograph */ {"\x79", 0, 0x5D8C}, /* East Asian ideograph */ {"\x7E", 0, 0x5D15}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page658 = { marc8_31page658_flat, 0 }; /* PAGE 657 */ struct yaz_iconv_trie_flat marc8_31page657_flat[] = { {"\x2F", 0, 0x805F}, /* East Asian ideograph */ {"\x47", 0, 0x88CA}, /* East Asian ideograph */ {"\x49", 0, 0x5B37}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page657 = { marc8_31page657_flat, 0 }; /* PAGE 656 */ struct yaz_iconv_trie_flat marc8_31page656_flat[] = { {"\x38", 0, 0x5942}, /* East Asian ideograph */ {"\x3A", 0, 0x5F09}, /* East Asian ideograph */ {"\x3E", 0, 0x5965}, /* East Asian ideograph */ {"\x3F", 0, 0x5333}, /* East Asian ideograph */ {"\x74", 0, 0x5B22}, /* East Asian ideograph */ {"\x7B", 0, 0x5A2F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page656 = { marc8_31page656_flat, 0 }; /* PAGE 655 */ struct yaz_iconv_trie_flat marc8_31page655_flat[] = { {"\x2E", 0, 0x57C0}, /* East Asian ideograph */ {"\x50", 0, 0x5861}, /* East Asian ideograph (variant of EACC 213850) */ {"\x53", 0, 0x586D}, /* East Asian ideograph */ {"\x5E", 0, 0x5897}, /* East Asian ideograph */ {"\x64", 0, 0x58C7}, /* East Asian ideograph */ {"\x69", 0, 0x5727}, /* East Asian ideograph */ {"\x6C", 0, 0x5841}, /* East Asian ideograph */ {"\x70", 0, 0x58CC}, /* East Asian ideograph */ {"\x71", 0, 0x57BB}, /* East Asian ideograph */ {"\x7D", 0, 0x591B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page655 = { marc8_31page655_flat, 0 }; /* PAGE 654 */ struct yaz_iconv_trie_flat marc8_31page654_flat[] = { {"\x2C", 0, 0x5606}, /* East Asian ideograph */ {"\x2F", 0, 0x5C1C}, /* East Asian ideograph */ {"\x49", 0, 0x5668}, /* East Asian ideograph (variant of EACC 213749) */ {"\x4C", 0, 0x5662}, /* East Asian ideograph */ {"\x58", 0, 0x56A5}, /* East Asian ideograph (variant of EACC 213758) */ {"\x5A", 0, 0x53B3}, /* East Asian ideograph */ {"\x68", 0, 0x56D8}, /* East Asian ideograph */ {"\x6F", 0, 0x56FD}, /* East Asian ideograph */ {"\x72", 0, 0x5186}, /* East Asian ideograph */ {"\x73", 0, 0x56E3}, /* East Asian ideograph */ {"\x74", 0, 0x56F3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page654 = { marc8_31page654_flat, 0 }; /* PAGE 653 */ struct yaz_iconv_trie_flat marc8_31page653_flat[] = { {"\x22", 0, 0x8C18}, /* East Asian ideograph */ {"\x42", 0, 0x8BF6}, /* East Asian ideograph */ {"\x66", 0, 0x5A1A}, /* East Asian ideograph */ {"\x68", 0, 0x5358}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page653 = { marc8_31page653_flat, 0 }; /* PAGE 652 */ struct yaz_iconv_trie_flat marc8_31page652_flat[] = { {"\x6A", 0, 0x55EC}, /* East Asian ideograph */ {"\x7B", 0, 0x54CC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page652 = { marc8_31page652_flat, 0 }; /* PAGE 651 */ struct yaz_iconv_trie_flat marc8_31page651_flat[] = { {"\x21", 0, 0x5263}, /* East Asian ideograph */ {"\x35", 0, 0x52B4}, /* East Asian ideograph */ {"\x36", 0, 0x52F2}, /* East Asian ideograph */ {"\x6B", 0, 0x5DF5}, /* East Asian ideograph */ {"\x74", 0, 0x537F}, /* East Asian ideograph (variant of EACC 213474) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page651 = { marc8_31page651_flat, 0 }; /* PAGE 650 */ struct yaz_iconv_trie_flat marc8_31page650_flat[] = { {"\x21", 0, 0x5185}, /* East Asian ideograph */ {"\x22", 0, 0x5168}, /* East Asian ideograph (variant of EACC 213322) */ {"\x24", 0, 0x634C}, /* East Asian ideograph (variant of EACC 2D3324) */ {"\x3E", 0, 0x51B7}, /* East Asian ideograph (variant of EACC 21333E) */ {"\x51", 0, 0x5204}, /* East Asian ideograph */ {"\x54", 0, 0x82C5}, /* East Asian ideograph */ {"\x55", 0, 0x520B}, /* East Asian ideograph */ {"\x5B", 0, 0x522B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page650 = { marc8_31page650_flat, 0 }; /* PAGE 649 */ struct yaz_iconv_trie_flat marc8_31page649_flat[] = { {"\x31", 0, 0x4EEE}, /* East Asian ideograph */ {"\x48", 0, 0x50B2}, /* East Asian ideograph */ {"\x4E", 0, 0x50E7}, /* East Asian ideograph (variant of EACC 21324E) */ {"\x5F", 0, 0x50BB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page649 = { marc8_31page649_flat, 0 }; /* PAGE 648 */ struct yaz_iconv_trie_flat marc8_31page648_flat[] = { {"\x2D", 0, 0x4F2B}, /* East Asian ideograph */ {"\x30", 0, 0x4FAB}, /* East Asian ideograph */ {"\x44", 0, 0x4F36}, /* East Asian ideograph (variant of EACC 213144) */ {"\x4C", 0, 0x5F95}, /* East Asian ideograph */ {"\x6A", 0, 0x723C}, /* East Asian ideograph */ {"\x78", 0, 0x5029}, /* East Asian ideograph (variant of EACC 213178) */ {"\x7C", 0, 0x5024}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page648 = { marc8_31page648_flat, 0 }; /* PAGE 647 */ struct yaz_iconv_trie_flat marc8_31page647_flat[] = { {"\x21", 0, 0x58F1}, /* East Asian ideograph */ {"\x50", 0, 0x4E8A}, /* East Asian ideograph */ {"\x51", 0, 0x5F10}, /* East Asian ideograph */ {"\x52", 0, 0x6275}, /* East Asian ideograph */ {"\x57", 0, 0x4E99}, /* East Asian ideograph */ {"\x6C", 0, 0x96E0}, /* East Asian ideograph */ {"\x6E", 0, 0x4EE4}, /* East Asian ideograph (variant of EACC 21306E) */ {"\x72", 0, 0x4EED}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page647 = { marc8_31page647_flat, 0 }; /* PAGE 646 */ struct yaz_iconv_trie_dir marc8_31page646_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {648, 0, 0}, {649, 0, 0}, {650, 0, 0}, {651, 0, 0}, {652, 0, 0}, {653, 0, 0}, {654, 0, 0}, {655, 0, 0}, {656, 0, 0}, {657, 0, 0}, {658, 0, 0}, {659, 0, 0}, {660, 0, 0}, {661, 0, 0}, {662, 0, 0}, {663, 0, 0}, {664, 0, 0}, {665, 0, 0}, {666, 0, 0}, {667, 0, 0}, {668, 0, 0}, {669, 0, 0}, {670, 0, 0}, {671, 0, 0}, {672, 0, 0}, {673, 0, 0}, {674, 0, 0}, {675, 0, 0}, {676, 0, 0}, {677, 0, 0}, {678, 0, 0}, {679, 0, 0}, {680, 0, 0}, {681, 0, 0}, {682, 0, 0}, {683, 0, 0}, {684, 0, 0}, {685, 0, 0}, {686, 0, 0}, {687, 0, 0}, {688, 0, 0}, {689, 0, 0}, {690, 0, 0}, {691, 0, 0}, {692, 0, 0}, {693, 0, 0}, {694, 0, 0}, {695, 0, 0}, {696, 0, 0}, {697, 0, 0}, {698, 0, 0}, {699, 0, 0}, {700, 0, 0}, {0, 0, 0}, {701, 0, 0}, {0, 0, 0}, {702, 0, 0}, {0, 0, 0}, {703, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {704, 0, 0}, {705, 0, 0}, {706, 0, 0}, {0, 0, 0}, {707, 0, 0}, {708, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {709, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page646 = { 0, marc8_31page646_dir }; /* PAGE 645 */ struct yaz_iconv_trie_flat marc8_31page645_flat[] = { {"\x2C\x4D", 0, 0x8801}, /* East Asian ideograph (variant of EACC 232C4D) */ {"\x34\x22", 0, 0x8C2A}, /* East Asian ideograph */ {"\x34\x7B", 0, 0x8C2B}, /* East Asian ideograph */ {"\x35\x39", 0, 0x8B9E}, /* East Asian ideograph */ {"\x36\x6F", 0, 0x8D4D}, /* East Asian ideograph */ {"\x42\x36", 0, 0x949A}, /* East Asian ideograph */ {"\x42\x70", 0, 0x94BC}, /* East Asian ideograph */ {"\x49\x31", 0, 0x95F6}, /* East Asian ideograph */ {"\x4E\x5C", 0, 0x97DE}, /* East Asian ideograph (variant of EACC 234E5C) */ {"\x52\x22", 0, 0x9957}, /* East Asian ideograph */ {"\x57\x7A", 0, 0x9BD6}, /* East Asian ideograph (variant of EACC 23577A) */ {"\x59\x4E", 0, 0x9C3A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page645 = { marc8_31page645_flat, 0 }; /* PAGE 644 */ struct yaz_iconv_trie_flat marc8_31page644_flat[] = { {"\x28\x4C", 0, 0x5ED0}, /* East Asian ideograph */ {"\x60\x74", 0, 0x76B2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page644 = { marc8_31page644_flat, 0 }; /* PAGE 643 */ struct yaz_iconv_trie_flat marc8_31page643_flat[] = { {"\x30\x4C", 0, 0x69A6}, /* East Asian ideograph */ {"\x30\x51", 0, 0x8D30}, /* East Asian ideograph */ {"\x33\x36", 0, 0x5B82}, /* East Asian ideograph */ {"\x34\x21", 0, 0x5271}, /* East Asian ideograph */ {"\x36\x66", 0, 0x5AD0}, /* East Asian ideograph */ {"\x37\x55", 0, 0x56AE}, /* East Asian ideograph */ {"\x37\x68", 0, 0x5EFB}, /* East Asian ideograph */ {"\x3D\x53", 0, 0x5F66}, /* East Asian ideograph */ {"\x3F\x6D", 0, 0x52E0}, /* East Asian ideograph */ {"\x41\x46", 0, 0x63DB}, /* East Asian ideograph */ {"\x45\x6D", 0, 0x6A10}, /* East Asian ideograph */ {"\x46\x2B", 0, 0x7688}, /* East Asian ideograph */ {"\x46\x5B", 0, 0x6C2F}, /* East Asian ideograph */ {"\x47\x38", 0, 0x6CFA}, /* East Asian ideograph */ {"\x47\x74", 0, 0x6E15}, /* East Asian ideograph */ {"\x4B\x7A", 0, 0x7523}, /* East Asian ideograph */ {"\x4C\x3C", 0, 0x7589}, /* East Asian ideograph */ {"\x4E\x43", 0, 0x788C}, /* East Asian ideograph (variant of EACC 214E43) */ {"\x4E\x75", 0, 0x7984}, /* East Asian ideograph */ {"\x4F\x45", 0, 0x9896}, /* East Asian ideograph */ {"\x51\x22", 0, 0x7D0D}, /* East Asian ideograph */ {"\x51\x64", 0, 0x53BF}, /* East Asian ideograph */ {"\x55\x64", 0, 0x6FDB}, /* East Asian ideograph (Version J extension) */ {"\x56\x4B", 0, 0x865E}, /* East Asian ideograph (variant of EACC 21564B) */ {"\x57\x46", 0, 0x672F}, /* East Asian ideograph */ {"\x58\x37", 0, 0x8BA0}, /* East Asian ideograph */ {"\x58\x47", 0, 0x8A25}, /* East Asian ideograph (variant of EACC 215847) */ {"\x5D\x3E", 0, 0x9485}, /* East Asian ideograph */ {"\x5E\x21", 0, 0x953A}, /* East Asian ideograph */ {"\x5E\x60", 0, 0x95EB}, /* East Asian ideograph (Version J extension) */ {"\x5F\x35", 0, 0x9668}, /* East Asian ideograph (Version J extension) */ {"\x60\x36", 0, 0x97FF}, /* East Asian ideograph */ {"\x60\x4E", 0, 0x984F}, /* East Asian ideograph */ {"\x60\x64", 0, 0x9963}, /* East Asian ideograph */ {"\x60\x6B", 0, 0x98F0}, /* East Asian ideograph */ {"\x60\x76", 0, 0x9980}, /* East Asian ideograph */ {"\x62\x60", 0, 0x5E7A}, /* East Asian ideograph */ {"\x63\x24", 0, 0x9F61}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page643 = { marc8_31page643_flat, 0 }; /* PAGE 642 */ struct yaz_iconv_trie_flat marc8_31page642_flat[] = { {"\x30\x4C", 0, 0x5E79}, /* East Asian ideograph */ {"\x30\x78", 0, 0x5023}, /* East Asian ideograph */ {"\x34\x7D", 0, 0x84E1}, /* East Asian ideograph */ {"\x35\x73", 0, 0x8B3C}, /* East Asian ideograph */ {"\x37\x7B", 0, 0x784E}, /* East Asian ideograph (Version J extension) */ {"\x3D\x6F", 0, 0x8986}, /* East Asian ideograph */ {"\x3E\x47", 0, 0x5379}, /* East Asian ideograph */ {"\x3F\x24", 0, 0x614E}, /* East Asian ideograph */ {"\x40\x4F", 0, 0x638A}, /* East Asian ideograph */ {"\x42\x4F", 0, 0x542F}, /* East Asian ideograph (variant of EACC 27424F) */ {"\x44\x72", 0, 0x7881}, /* East Asian ideograph */ {"\x45\x6D", 0, 0x8263}, /* East Asian ideograph */ {"\x46\x21", 0, 0x9A69}, /* East Asian ideograph */ {"\x46\x29", 0, 0x4E97}, /* East Asian ideograph */ {"\x46\x2B", 0, 0x5E30}, /* East Asian ideograph */ {"\x47\x6F", 0, 0x51C8}, /* East Asian ideograph */ {"\x49\x26", 0, 0x6E08}, /* East Asian ideograph */ {"\x49\x56", 0, 0x7832}, /* East Asian ideograph */ {"\x4A\x28", 0, 0x9DF0}, /* East Asian ideograph */ {"\x4A\x60", 0, 0x7266}, /* East Asian ideograph */ {"\x4C\x3C", 0, 0x7582}, /* East Asian ideograph */ {"\x51\x6D", 0, 0x6403}, /* East Asian ideograph */ {"\x55\x64", 0, 0x61DE}, /* East Asian ideograph */ {"\x56\x31", 0, 0x517F}, /* East Asian ideograph */ {"\x59\x59", 0, 0x8276}, /* East Asian ideograph */ {"\x5E\x60", 0, 0x9586}, /* East Asian ideograph */ {"\x5F\x34", 0, 0x9699}, /* East Asian ideograph */ {"\x5F\x35", 0, 0x6B9E}, /* East Asian ideograph */ {"\x5F\x49", 0, 0x7431}, /* East Asian ideograph */ {"\x61\x4C", 0, 0x99C5}, /* East Asian ideograph */ {"\x61\x79", 0, 0x5C1F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page642 = { marc8_31page642_flat, 0 }; /* PAGE 641 */ struct yaz_iconv_trie_flat marc8_31page641_flat[] = { {"\x2D\x44", 0, 0x8842}, /* East Asian ideograph */ {"\x39\x22", 0, 0x8DB5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page641 = { marc8_31page641_flat, 0 }; /* PAGE 640 */ struct yaz_iconv_trie_flat marc8_31page640_flat[] = { {"\x28\x4C", 0, 0x53A9}, /* East Asian ideograph (variant of EACC 4C284C) */ {"\x2F\x7C", 0, 0x64C0}, /* East Asian ideograph */ {"\x3B\x7D", 0, 0x67B1}, /* East Asian ideograph */ {"\x40\x34", 0, 0x6855}, /* East Asian ideograph */ {"\x6A\x7C", 0, 0x7BEA}, /* East Asian ideograph */ {"\x78\x7D", 0, 0x80FC}, /* East Asian ideograph */ {"\x79\x70", 0, 0x81D5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page640 = { marc8_31page640_flat, 0 }; /* PAGE 639 */ struct yaz_iconv_trie_flat marc8_31page639_flat[] = { {"\x6B", 0, 0x60A4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page639 = { marc8_31page639_flat, 0 }; /* PAGE 638 */ struct yaz_iconv_trie_flat marc8_31page638_flat[] = { {"\x2F", 0, 0x521F}, /* East Asian ideograph */ {"\x33", 0, 0x5259}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page638 = { marc8_31page638_flat, 0 }; /* PAGE 637 */ struct yaz_iconv_trie_flat marc8_31page637_flat[] = { {"\x23", 0, 0x9BFD}, /* East Asian ideograph (variant of EACC 216223) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page637 = { marc8_31page637_flat, 0 }; /* PAGE 636 */ struct yaz_iconv_trie_flat marc8_31page636_flat[] = { {"\x67", 0, 0x9B2A}, /* East Asian ideograph */ {"\x79", 0, 0x5C20}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page636 = { marc8_31page636_flat, 0 }; /* PAGE 635 */ struct yaz_iconv_trie_flat marc8_31page635_flat[] = { {"\x74", 0, 0x55B0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page635 = { marc8_31page635_flat, 0 }; /* PAGE 634 */ struct yaz_iconv_trie_flat marc8_31page634_flat[] = { {"\x49", 0, 0x5F6B}, /* East Asian ideograph */ {"\x68", 0, 0x8987}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page634 = { marc8_31page634_flat, 0 }; /* PAGE 633 */ struct yaz_iconv_trie_flat marc8_31page633_flat[] = { {"\x2F", 0, 0x5277}, /* East Asian ideograph */ {"\x3D", 0, 0x9295}, /* East Asian ideograph */ {"\x42", 0, 0x9274}, /* East Asian ideograph */ {"\x6F", 0, 0x7A7D}, /* East Asian ideograph */ {"\x71", 0, 0x5742}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page633 = { marc8_31page633_flat, 0 }; /* PAGE 632 */ struct yaz_iconv_trie_flat marc8_31page632_flat[] = { {"\x23", 0, 0x91BB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page632 = { marc8_31page632_flat, 0 }; /* PAGE 631 */ struct yaz_iconv_trie_flat marc8_31page631_flat[] = { {"\x2F", 0, 0x58F2}, /* East Asian ideograph */ {"\x36", 0, 0x983C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page631 = { marc8_31page631_flat, 0 }; /* PAGE 630 */ struct yaz_iconv_trie_flat marc8_31page630_flat[] = { {"\x3F", 0, 0x8A3C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page630 = { marc8_31page630_flat, 0 }; /* PAGE 629 */ struct yaz_iconv_trie_flat marc8_31page629_flat[] = { {"\x21", 0, 0x97E4}, /* East Asian ideograph */ {"\x29", 0, 0x69FB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page629 = { marc8_31page629_flat, 0 }; /* PAGE 628 */ struct yaz_iconv_trie_flat marc8_31page628_flat[] = { {"\x73", 0, 0x7DAF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page628 = { marc8_31page628_flat, 0 }; /* PAGE 627 */ struct yaz_iconv_trie_flat marc8_31page627_flat[] = { {"\x3C", 0, 0x56CC}, /* East Asian ideograph */ {"\x43", 0, 0x4E55}, /* East Asian ideograph */ {"\x52", 0, 0x87A1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page627 = { marc8_31page627_flat, 0 }; /* PAGE 626 */ struct yaz_iconv_trie_flat marc8_31page626_flat[] = { {"\x3C", 0, 0x5D0B}, /* East Asian ideograph */ {"\x64", 0, 0x6726}, /* East Asian ideograph */ {"\x68", 0, 0x83DD}, /* East Asian ideograph */ {"\x77", 0, 0x854B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page626 = { marc8_31page626_flat, 0 }; /* PAGE 625 */ struct yaz_iconv_trie_flat marc8_31page625_flat[] = { {"\x77", 0, 0x85A6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page625 = { marc8_31page625_flat, 0 }; /* PAGE 624 */ struct yaz_iconv_trie_flat marc8_31page624_flat[] = { {"\x30", 0, 0x5BD8}, /* East Asian ideograph */ {"\x5B", 0, 0x66DC}, /* East Asian ideograph */ {"\x6B", 0, 0x7094}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page624 = { marc8_31page624_flat, 0 }; /* PAGE 623 */ struct yaz_iconv_trie_flat marc8_31page623_flat[] = { {"\x79", 0, 0x7D75}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page623 = { marc8_31page623_flat, 0 }; /* PAGE 622 */ struct yaz_iconv_trie_flat marc8_31page622_flat[] = { {"\x50", 0, 0x7BED}, /* East Asian ideograph */ {"\x5B", 0, 0x9B3B}, /* East Asian ideograph */ {"\x63", 0, 0x9939}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page622 = { marc8_31page622_flat, 0 }; /* PAGE 621 */ struct yaz_iconv_trie_flat marc8_31page621_flat[] = { {"\x2D", 0, 0x7546}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page621 = { marc8_31page621_flat, 0 }; /* PAGE 620 */ struct yaz_iconv_trie_flat marc8_31page620_flat[] = { {"\x60", 0, 0x9AE6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page620 = { marc8_31page620_flat, 0 }; /* PAGE 619 */ struct yaz_iconv_trie_flat marc8_31page619_flat[] = { {"\x28", 0, 0x6D5C}, /* East Asian ideograph */ {"\x44", 0, 0x6B12}, /* East Asian ideograph */ {"\x56", 0, 0x792E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page619 = { marc8_31page619_flat, 0 }; /* PAGE 618 */ struct yaz_iconv_trie_flat marc8_31page618_flat[] = { {"\x3B", 0, 0x9061}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page618 = { marc8_31page618_flat, 0 }; /* PAGE 617 */ struct yaz_iconv_trie_flat marc8_31page617_flat[] = { {"\x35", 0, 0x6C3E}, /* East Asian ideograph */ {"\x6F", 0, 0x51C0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page617 = { marc8_31page617_flat, 0 }; /* PAGE 616 */ struct yaz_iconv_trie_flat marc8_31page616_flat[] = { {"\x34", 0, 0x6B96}, /* East Asian ideograph (variant of EACC 214634) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page616 = { marc8_31page616_flat, 0 }; /* PAGE 615 */ struct yaz_iconv_trie_flat marc8_31page615_flat[] = { {"\x6D", 0, 0x826B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page615 = { marc8_31page615_flat, 0 }; /* PAGE 614 */ struct yaz_iconv_trie_flat marc8_31page614_flat[] = { {"\x44", 0, 0x8988}, /* East Asian ideograph */ {"\x7D", 0, 0x6AC2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page614 = { marc8_31page614_flat, 0 }; /* PAGE 613 */ struct yaz_iconv_trie_flat marc8_31page613_flat[] = { {"\x30", 0, 0x6644}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page613 = { marc8_31page613_flat, 0 }; /* PAGE 612 */ struct yaz_iconv_trie_flat marc8_31page612_flat[] = { {"\x43", 0, 0x4FF2}, /* East Asian ideograph */ {"\x4F", 0, 0x5554}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page612 = { marc8_31page612_flat, 0 }; /* PAGE 611 */ struct yaz_iconv_trie_flat marc8_31page611_flat[] = { {"\x7C", 0, 0x62E0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page611 = { marc8_31page611_flat, 0 }; /* PAGE 610 */ struct yaz_iconv_trie_flat marc8_31page610_flat[] = { {"\x22", 0, 0x6443}, /* East Asian ideograph */ {"\x42", 0, 0x646D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page610 = { marc8_31page610_flat, 0 }; /* PAGE 609 */ struct yaz_iconv_trie_flat marc8_31page609_flat[] = { {"\x47", 0, 0x8CC9}, /* East Asian ideograph */ {"\x4C", 0, 0x6142}, /* East Asian ideograph */ {"\x61", 0, 0x60AA}, /* East Asian ideograph */ {"\x7D", 0, 0x7609}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page609 = { marc8_31page609_flat, 0 }; /* PAGE 608 */ struct yaz_iconv_trie_flat marc8_31page608_flat[] = { {"\x6F", 0, 0x8907}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page608 = { marc8_31page608_flat, 0 }; /* PAGE 607 */ struct yaz_iconv_trie_flat marc8_31page607_flat[] = { {"\x52", 0, 0x8D26}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page607 = { marc8_31page607_flat, 0 }; /* PAGE 606 */ struct yaz_iconv_trie_flat marc8_31page606_flat[] = { {"\x39", 0, 0x5BF3}, /* East Asian ideograph */ {"\x6E", 0, 0x5C97}, /* East Asian ideograph */ {"\x78", 0, 0x5CC4}, /* East Asian ideograph (duplicate simplified) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page606 = { marc8_31page606_flat, 0 }; /* PAGE 605 */ struct yaz_iconv_trie_flat marc8_31page605_flat[] = { {"\x44", 0, 0x59B3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page605 = { marc8_31page605_flat, 0 }; /* PAGE 604 */ struct yaz_iconv_trie_flat marc8_31page604_flat[] = { {"\x70", 0, 0x56F2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page604 = { marc8_31page604_flat, 0 }; /* PAGE 603 */ struct yaz_iconv_trie_flat marc8_31page603_flat[] = { {"\x5A", 0, 0x8AE0}, /* East Asian ideograph */ {"\x5E", 0, 0x559E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page603 = { marc8_31page603_flat, 0 }; /* PAGE 602 */ struct yaz_iconv_trie_flat marc8_31page602_flat[] = { {"\x73", 0, 0x5611}, /* East Asian ideograph */ {"\x77", 0, 0x9FA2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page602 = { marc8_31page602_flat, 0 }; /* PAGE 601 */ struct yaz_iconv_trie_flat marc8_31page601_flat[] = { {"\x28", 0, 0x5227}, /* East Asian ideograph */ {"\x39", 0, 0x61C3}, /* East Asian ideograph */ {"\x5B", 0, 0x965E}, /* East Asian ideograph */ {"\x60", 0, 0x604A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page601 = { marc8_31page601_flat, 0 }; /* PAGE 600 */ struct yaz_iconv_trie_flat marc8_31page600_flat[] = { {"\x46", 0, 0x4F1D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page600 = { marc8_31page600_flat, 0 }; /* PAGE 599 */ struct yaz_iconv_trie_flat marc8_31page599_flat[] = { {"\x2D", 0, 0x534B}, /* East Asian ideograph */ {"\x3A", 0, 0x5EFC}, /* East Asian ideograph */ {"\x4C", 0, 0x4E81}, /* East Asian ideograph */ {"\x52", 0, 0x65BC}, /* East Asian ideograph */ {"\x54", 0, 0x4F0D}, /* East Asian ideograph */ {"\x78", 0, 0x9AE3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page599 = { marc8_31page599_flat, 0 }; /* PAGE 598 */ struct yaz_iconv_trie_dir marc8_31page598_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {600, 0, 0}, {0, 0, 0}, {601, 0, 0}, {0, 0, 0}, {602, 0, 0}, {603, 0, 0}, {604, 0, 0}, {605, 0, 0}, {0, 0, 0}, {606, 0, 0}, {0, 0, 0}, {607, 0, 0}, {608, 0, 0}, {609, 0, 0}, {610, 0, 0}, {0, 0, 0}, {611, 0, 0}, {612, 0, 0}, {613, 0, 0}, {614, 0, 0}, {615, 0, 0}, {616, 0, 0}, {617, 0, 0}, {618, 0, 0}, {619, 0, 0}, {620, 0, 0}, {621, 0, 0}, {0, 0, 0}, {622, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {623, 0, 0}, {624, 0, 0}, {625, 0, 0}, {0, 0, 0}, {626, 0, 0}, {627, 0, 0}, {628, 0, 0}, {629, 0, 0}, {630, 0, 0}, {631, 0, 0}, {632, 0, 0}, {0, 0, 0}, {0, 0, 0}, {633, 0, 0}, {634, 0, 0}, {635, 0, 0}, {636, 0, 0}, {637, 0, 0}, {638, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {639, 0, 0}, {640, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page598 = { 0, marc8_31page598_dir }; /* PAGE 597 */ struct yaz_iconv_trie_flat marc8_31page597_flat[] = { {"\x34\x4D", 0, 0x8B5B}, /* East Asian ideograph */ {"\x34\x7B", 0, 0x8B2D}, /* East Asian ideograph */ {"\x41\x56", 0, 0x91BE}, /* East Asian ideograph */ {"\x50\x53", 0, 0x98C8}, /* East Asian ideograph */ {"\x57\x39", 0, 0x9C76}, /* East Asian ideograph */ {"\x5D\x5C", 0, 0x8C8E}, /* East Asian ideograph */ {"\x5E\x76", 0, 0x82BE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page597 = { marc8_31page597_flat, 0 }; /* PAGE 596 */ struct yaz_iconv_trie_flat marc8_31page596_flat[] = { {"\x24\x53", 0, 0x5CBD}, /* East Asian ideograph */ {"\x38\x75", 0, 0x5FDE}, /* East Asian ideograph */ {"\x3A\x5B", 0, 0x572C}, /* East Asian ideograph */ {"\x3E\x38", 0, 0x7BDA}, /* East Asian ideograph */ {"\x41\x38", 0, 0x8022}, /* East Asian ideograph */ {"\x41\x77", 0, 0x8264}, /* East Asian ideograph */ {"\x49\x2F", 0, 0x6D34}, /* East Asian ideograph */ {"\x51\x75", 0, 0x7162}, /* East Asian ideograph */ {"\x54\x52", 0, 0x7118}, /* East Asian ideograph */ {"\x5D\x6B", 0, 0x756D}, /* East Asian ideograph */ {"\x5E\x3B", 0, 0x80AC}, /* East Asian ideograph */ {"\x5E\x47", 0, 0x75FE}, /* East Asian ideograph */ {"\x61\x26", 0, 0x6900}, /* East Asian ideograph */ {"\x66\x22", 0, 0x589D}, /* East Asian ideograph */ {"\x68\x2A", 0, 0x7C7C}, /* East Asian ideograph */ {"\x71\x5A", 0, 0x7E1A}, /* East Asian ideograph */ {"\x74\x31", 0, 0x58DC}, /* East Asian ideograph */ {"\x78\x2A", 0, 0x90C5}, /* East Asian ideograph */ {"\x7D\x24", 0, 0x83C7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page596 = { marc8_31page596_flat, 0 }; /* PAGE 595 */ struct yaz_iconv_trie_flat marc8_31page595_flat[] = { {"\x45", 0, 0x9F67}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page595 = { marc8_31page595_flat, 0 }; /* PAGE 594 */ struct yaz_iconv_trie_flat marc8_31page594_flat[] = { {"\x6B", 0, 0x6031}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page594 = { marc8_31page594_flat, 0 }; /* PAGE 593 */ struct yaz_iconv_trie_flat marc8_31page593_flat[] = { {"\x33", 0, 0x524F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page593 = { marc8_31page593_flat, 0 }; /* PAGE 592 */ struct yaz_iconv_trie_flat marc8_31page592_flat[] = { {"\x21", 0, 0x6B6F}, /* East Asian ideograph */ {"\x2B", 0, 0x7ADC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page592 = { marc8_31page592_flat, 0 }; /* PAGE 591 */ struct yaz_iconv_trie_flat marc8_31page591_flat[] = { {"\x5E", 0, 0x9EAA}, /* East Asian ideograph */ {"\x5F", 0, 0x8534}, /* East Asian ideograph */ {"\x75", 0, 0x76BC}, /* East Asian ideograph */ {"\x7D", 0, 0x6589}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page591 = { marc8_31page591_flat, 0 }; /* PAGE 590 */ struct yaz_iconv_trie_flat marc8_31page590_flat[] = { {"\x5A", 0, 0x8EB0}, /* East Asian ideograph */ {"\x62", 0, 0x9A23}, /* East Asian ideograph */ {"\x79", 0, 0x9C7B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page590 = { marc8_31page590_flat, 0 }; /* PAGE 589 */ struct yaz_iconv_trie_flat marc8_31page589_flat[] = { {"\x54", 0, 0x985B}, /* East Asian ideograph */ {"\x58", 0, 0x9855}, /* East Asian ideograph */ {"\x62", 0, 0x98C3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page589 = { marc8_31page589_flat, 0 }; /* PAGE 588 */ struct yaz_iconv_trie_flat marc8_31page588_flat[] = { {"\x34", 0, 0x90C4}, /* East Asian ideograph */ {"\x3D", 0, 0x96B7}, /* East Asian ideograph */ {"\x43", 0, 0x9D08}, /* East Asian ideograph */ {"\x49", 0, 0x9D70}, /* East Asian ideograph */ {"\x73", 0, 0x9759}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page588 = { marc8_31page588_flat, 0 }; /* PAGE 587 */ struct yaz_iconv_trie_flat marc8_31page587_flat[] = { {"\x21", 0, 0x9221}, /* East Asian ideograph */ {"\x2F", 0, 0x5257}, /* East Asian ideograph */ {"\x3D", 0, 0x9244}, /* East Asian ideograph */ {"\x42", 0, 0x9452}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page587 = { marc8_31page587_flat, 0 }; /* PAGE 586 */ struct yaz_iconv_trie_flat marc8_31page586_flat[] = { {"\x23", 0, 0x8A76}, /* East Asian ideograph */ {"\x3B", 0, 0x57DC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page586 = { marc8_31page586_flat, 0 }; /* PAGE 585 */ struct yaz_iconv_trie_flat marc8_31page585_flat[] = { {"\x70", 0, 0x5EF8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page585 = { marc8_31page585_flat, 0 }; /* PAGE 584 */ struct yaz_iconv_trie_flat marc8_31page584_flat[] = { {"\x7B", 0, 0x8E28}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page584 = { marc8_31page584_flat, 0 }; /* PAGE 583 */ struct yaz_iconv_trie_flat marc8_31page583_flat[] = { {"\x41", 0, 0x54D7}, /* East Asian ideograph */ {"\x58", 0, 0x8C4A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page583 = { marc8_31page583_flat, 0 }; /* PAGE 582 */ struct yaz_iconv_trie_flat marc8_31page582_flat[] = { {"\x21", 0, 0x97C8}, /* East Asian ideograph */ {"\x30", 0, 0x658D}, /* East Asian ideograph */ {"\x34", 0, 0x89E7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page582 = { marc8_31page582_flat, 0 }; /* PAGE 581 */ struct yaz_iconv_trie_flat marc8_31page581_flat[] = { {"\x2E", 0, 0x880E}, /* East Asian ideograph */ {"\x38", 0, 0x880F}, /* East Asian ideograph */ {"\x60", 0, 0x88E0}, /* East Asian ideograph */ {"\x72", 0, 0x8943}, /* East Asian ideograph */ {"\x73", 0, 0x88B4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page581 = { marc8_31page581_flat, 0 }; /* PAGE 580 */ struct yaz_iconv_trie_flat marc8_31page580_flat[] = { {"\x35", 0, 0x85AC}, /* East Asian ideograph */ {"\x52", 0, 0x87C1}, /* East Asian ideograph */ {"\x7C", 0, 0x8671}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page580 = { marc8_31page580_flat, 0 }; /* PAGE 579 */ struct yaz_iconv_trie_flat marc8_31page579_flat[] = { {"\x61", 0, 0x8462}, /* East Asian ideograph */ {"\x68", 0, 0x8406}, /* East Asian ideograph */ {"\x77", 0, 0x8602}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page579 = { marc8_31page579_flat, 0 }; /* PAGE 578 */ struct yaz_iconv_trie_flat marc8_31page578_flat[] = { {"\x45", 0, 0x67C1}, /* East Asian ideograph */ {"\x46", 0, 0x8221}, /* East Asian ideograph */ {"\x61", 0, 0x6CD6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page578 = { marc8_31page578_flat, 0 }; /* PAGE 577 */ struct yaz_iconv_trie_flat marc8_31page577_flat[] = { {"\x33", 0, 0x80BB}, /* East Asian ideograph */ {"\x47", 0, 0x81D9}, /* East Asian ideograph */ {"\x7D", 0, 0x9AD5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page577 = { marc8_31page577_flat, 0 }; /* PAGE 576 */ struct yaz_iconv_trie_flat marc8_31page576_flat[] = { {"\x23", 0, 0x7E8E}, /* East Asian ideograph */ {"\x28", 0, 0x94B5}, /* East Asian ideograph */ {"\x30", 0, 0x7F6E}, /* East Asian ideograph (variant of EACC 215230) */ {"\x34", 0, 0x99E1}, /* East Asian ideograph */ {"\x38", 0, 0x8989}, /* East Asian ideograph */ {"\x3F", 0, 0x8B71}, /* East Asian ideograph */ {"\x59", 0, 0x7E59}, /* East Asian ideograph */ {"\x5B", 0, 0x71FF}, /* East Asian ideograph */ {"\x76", 0, 0x8061}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page576 = { marc8_31page576_flat, 0 }; /* PAGE 575 */ struct yaz_iconv_trie_flat marc8_31page575_flat[] = { {"\x2E", 0, 0x7E8D}, /* East Asian ideograph */ {"\x3C", 0, 0x7D4C}, /* East Asian ideograph */ {"\x47", 0, 0x7EEE}, /* East Asian ideograph */ {"\x4C", 0, 0x7DD1}, /* East Asian ideograph */ {"\x5C", 0, 0x7DAB}, /* East Asian ideograph */ {"\x6B", 0, 0x7DD0}, /* East Asian ideograph */ {"\x6D", 0, 0x6374}, /* East Asian ideograph */ {"\x72", 0, 0x7D89}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page575 = { marc8_31page575_flat, 0 }; /* PAGE 574 */ struct yaz_iconv_trie_flat marc8_31page574_flat[] = { {"\x2A", 0, 0x9257}, /* East Asian ideograph */ {"\x2B", 0, 0x724B}, /* East Asian ideograph */ {"\x65", 0, 0x7A45}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page574 = { marc8_31page574_flat, 0 }; /* PAGE 573 */ struct yaz_iconv_trie_flat marc8_31page573_flat[] = { {"\x37", 0, 0x5EE9}, /* East Asian ideograph */ {"\x3A", 0, 0x7A49}, /* East Asian ideograph */ {"\x59", 0, 0x7A93}, /* East Asian ideograph */ {"\x5E", 0, 0x7A91}, /* East Asian ideograph */ {"\x71", 0, 0x54B2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page573 = { marc8_31page573_flat, 0 }; /* PAGE 572 */ struct yaz_iconv_trie_flat marc8_31page572_flat[] = { {"\x37", 0, 0x784E}, /* East Asian ideograph */ {"\x73", 0, 0x79A5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page572 = { marc8_31page572_flat, 0 }; /* PAGE 571 */ struct yaz_iconv_trie_flat marc8_31page571_flat[] = { {"\x2C", 0, 0x754D}, /* East Asian ideograph */ {"\x36", 0, 0x753B}, /* East Asian ideograph (variant of EACC 274C36) */ {"\x37", 0, 0x8E6F}, /* East Asian ideograph */ {"\x3E", 0, 0x8E08}, /* East Asian ideograph */ {"\x7B", 0, 0x767A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page571 = { marc8_31page571_flat, 0 }; /* PAGE 570 */ struct yaz_iconv_trie_flat marc8_31page570_flat[] = { {"\x28", 0, 0x91BC}, /* East Asian ideograph */ {"\x58", 0, 0x89DD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page570 = { marc8_31page570_flat, 0 }; /* PAGE 569 */ struct yaz_iconv_trie_flat marc8_31page569_flat[] = { {"\x2E", 0, 0x6F81}, /* East Asian ideograph */ {"\x4A", 0, 0x70D6}, /* East Asian ideograph */ {"\x68", 0, 0x7133}, /* East Asian ideograph */ {"\x6A", 0, 0x934A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page569 = { marc8_31page569_flat, 0 }; /* PAGE 568 */ struct yaz_iconv_trie_flat marc8_31page568_flat[] = { {"\x3B", 0, 0x6CDD}, /* East Asian ideograph */ {"\x5E", 0, 0x67D2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page568 = { marc8_31page568_flat, 0 }; /* PAGE 567 */ struct yaz_iconv_trie_flat marc8_31page567_flat[] = { {"\x29", 0, 0x6E2B}, /* East Asian ideograph */ {"\x30", 0, 0x6E5F}, /* East Asian ideograph */ {"\x40", 0, 0x6D1A}, /* East Asian ideograph */ {"\x4A", 0, 0x6D1F}, /* East Asian ideograph */ {"\x55", 0, 0x6FEC}, /* East Asian ideograph */ {"\x5E", 0, 0x6FB9}, /* East Asian ideograph */ {"\x5F", 0, 0x60BD}, /* East Asian ideograph */ {"\x6F", 0, 0x6D44}, /* East Asian ideograph */ {"\x70", 0, 0x5A6C}, /* East Asian ideograph */ {"\x7B", 0, 0x904A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page567 = { marc8_31page567_flat, 0 }; /* PAGE 566 */ struct yaz_iconv_trie_flat marc8_31page566_flat[] = { {"\x21", 0, 0x8B99}, /* East Asian ideograph */ {"\x33", 0, 0x6B8B}, /* East Asian ideograph (variant of EACC 274633) */ {"\x3C", 0, 0x6BBB}, /* East Asian ideograph */ {"\x65", 0, 0x6C61}, /* East Asian ideograph */ {"\x74", 0, 0x76C5}, /* East Asian ideograph */ {"\x7A", 0, 0x6CA1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page566 = { marc8_31page566_flat, 0 }; /* PAGE 565 */ struct yaz_iconv_trie_flat marc8_31page565_flat[] = { {"\x27", 0, 0x6918}, /* East Asian ideograph */ {"\x50", 0, 0x7F47}, /* East Asian ideograph */ {"\x6D", 0, 0x826A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page565 = { marc8_31page565_flat, 0 }; /* PAGE 564 */ struct yaz_iconv_trie_flat marc8_31page564_flat[] = { {"\x25", 0, 0x76C3}, /* East Asian ideograph */ {"\x49", 0, 0x6144}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page564 = { marc8_31page564_flat, 0 }; /* PAGE 563 */ struct yaz_iconv_trie_flat marc8_31page563_flat[] = { {"\x2F", 0, 0x664B}, /* East Asian ideograph */ {"\x3E", 0, 0x95C7}, /* East Asian ideograph */ {"\x42", 0, 0x7156}, /* East Asian ideograph */ {"\x57", 0, 0x6702}, /* East Asian ideograph */ {"\x69", 0, 0x5932}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page563 = { marc8_31page563_flat, 0 }; /* PAGE 562 */ struct yaz_iconv_trie_flat marc8_31page562_flat[] = { {"\x2A", 0, 0x62E1}, /* East Asian ideograph */ {"\x3D", 0, 0x53CE}, /* East Asian ideograph */ {"\x43", 0, 0x52B9}, /* East Asian ideograph */ {"\x44", 0, 0x6559}, /* East Asian ideograph */ {"\x56", 0, 0x6B5B}, /* East Asian ideograph */ {"\x60", 0, 0x89D4}, /* East Asian ideograph */ {"\x77", 0, 0x65EF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page562 = { marc8_31page562_flat, 0 }; /* PAGE 561 */ struct yaz_iconv_trie_flat marc8_31page561_flat[] = { {"\x31", 0, 0x6425}, /* East Asian ideograph */ {"\x7E", 0, 0x629E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page561 = { marc8_31page561_flat, 0 }; /* PAGE 560 */ struct yaz_iconv_trie_flat marc8_31page560_flat[] = { {"\x45", 0, 0x629B}, /* East Asian ideograph */ {"\x50", 0, 0x62D5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page560 = { marc8_31page560_flat, 0 }; /* PAGE 559 */ struct yaz_iconv_trie_flat marc8_31page559_flat[] = { {"\x22", 0, 0x6168}, /* East Asian ideograph (variant of EACC 213F22) */ {"\x24", 0, 0x7718}, /* East Asian ideograph */ {"\x3F", 0, 0x51F4}, /* East Asian ideograph */ {"\x55", 0, 0x5B3E}, /* East Asian ideograph */ {"\x58", 0, 0x61F4}, /* East Asian ideograph */ {"\x5B", 0, 0x6133}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page559 = { marc8_31page559_flat, 0 }; /* PAGE 558 */ struct yaz_iconv_trie_flat marc8_31page558_flat[] = { {"\x7D", 0, 0x7652}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page558 = { marc8_31page558_flat, 0 }; /* PAGE 557 */ struct yaz_iconv_trie_flat marc8_31page557_flat[] = { {"\x28", 0, 0x53A8}, /* East Asian ideograph */ {"\x2A", 0, 0x5E83}, /* East Asian ideograph */ {"\x2F", 0, 0x5E81}, /* East Asian ideograph */ {"\x42", 0, 0x7D43}, /* East Asian ideograph */ {"\x48", 0, 0x5F3A}, /* East Asian ideograph */ {"\x4C", 0, 0x7030}, /* East Asian ideograph */ {"\x54", 0, 0x4EFD}, /* East Asian ideograph */ {"\x75", 0, 0x5FB3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page557 = { marc8_31page557_flat, 0 }; /* PAGE 556 */ struct yaz_iconv_trie_flat marc8_31page556_flat[] = { {"\x21", 0, 0x7895}, /* East Asian ideograph */ {"\x52", 0, 0x8CEC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page556 = { marc8_31page556_flat, 0 }; /* PAGE 555 */ struct yaz_iconv_trie_flat marc8_31page555_flat[] = { {"\x2F", 0, 0x9029}, /* East Asian ideograph */ {"\x44", 0, 0x5B2D}, /* East Asian ideograph */ {"\x63", 0, 0x59C9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page555 = { marc8_31page555_flat, 0 }; /* PAGE 554 */ struct yaz_iconv_trie_flat marc8_31page554_flat[] = { {"\x6E", 0, 0x576F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page554 = { marc8_31page554_flat, 0 }; /* PAGE 553 */ struct yaz_iconv_trie_flat marc8_31page553_flat[] = { {"\x68", 0, 0x8FF4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page553 = { marc8_31page553_flat, 0 }; /* PAGE 552 */ struct yaz_iconv_trie_flat marc8_31page552_flat[] = { {"\x23", 0, 0x9F69}, /* East Asian ideograph */ {"\x2A", 0, 0x9B28}, /* East Asian ideograph */ {"\x42", 0, 0x8A92}, /* East Asian ideograph */ {"\x5A", 0, 0x5405}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page552 = { marc8_31page552_flat, 0 }; /* PAGE 551 */ struct yaz_iconv_trie_flat marc8_31page551_flat[] = { {"\x29", 0, 0x53DC}, /* East Asian ideograph */ {"\x4E", 0, 0x608B}, /* East Asian ideograph */ {"\x56", 0, 0x9A03}, /* East Asian ideograph */ {"\x5C", 0, 0x5449}, /* East Asian ideograph */ {"\x64", 0, 0x5415}, /* East Asian ideograph */ {"\x73", 0, 0x8656}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page551 = { marc8_31page551_flat, 0 }; /* PAGE 550 */ struct yaz_iconv_trie_flat marc8_31page550_flat[] = { {"\x21", 0, 0x91FC}, /* East Asian ideograph */ {"\x23", 0, 0x5264}, /* East Asian ideograph */ {"\x28", 0, 0x523C}, /* East Asian ideograph */ {"\x75", 0, 0x9628}, /* East Asian ideograph */ {"\x7D", 0, 0x53C1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page550 = { marc8_31page550_flat, 0 }; /* PAGE 549 */ struct yaz_iconv_trie_flat marc8_31page549_flat[] = { {"\x23", 0, 0x4E21}, /* East Asian ideograph */ {"\x2A", 0, 0x4E93}, /* East Asian ideograph */ {"\x30", 0, 0x518A}, /* East Asian ideograph */ {"\x3C", 0, 0x6C37}, /* East Asian ideograph */ {"\x44", 0, 0x51DB}, /* East Asian ideograph */ {"\x4E", 0, 0x51FE}, /* East Asian ideograph */ {"\x77", 0, 0x5270}, /* East Asian ideograph */ {"\x7B", 0, 0x52E6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page549 = { marc8_31page549_flat, 0 }; /* PAGE 548 */ struct yaz_iconv_trie_flat marc8_31page548_flat[] = { {"\x40", 0, 0x4FFB}, /* East Asian ideograph */ {"\x51", 0, 0x5FBA}, /* East Asian ideograph */ {"\x5D", 0, 0x4FA1}, /* East Asian ideograph */ {"\x7A", 0, 0x5150}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page548 = { marc8_31page548_flat, 0 }; /* PAGE 547 */ struct yaz_iconv_trie_flat marc8_31page547_flat[] = { {"\x4C", 0, 0x5FA0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page547 = { marc8_31page547_flat, 0 }; /* PAGE 546 */ struct yaz_iconv_trie_flat marc8_31page546_flat[] = { {"\x21", 0, 0x58F9}, /* East Asian ideograph */ {"\x3A", 0, 0x8FFA}, /* East Asian ideograph */ {"\x4C", 0, 0x4E79}, /* East Asian ideograph */ {"\x51", 0, 0x8CB3}, /* East Asian ideograph */ {"\x60", 0, 0x4EAF}, /* East Asian ideograph */ {"\x66", 0, 0x5FC8}, /* East Asian ideograph */ {"\x6C", 0, 0x8B90}, /* East Asian ideograph */ {"\x78", 0, 0x5F77}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page546 = { marc8_31page546_flat, 0 }; /* PAGE 545 */ struct yaz_iconv_trie_dir marc8_31page545_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {547, 0, 0}, {548, 0, 0}, {549, 0, 0}, {550, 0, 0}, {551, 0, 0}, {552, 0, 0}, {553, 0, 0}, {554, 0, 0}, {555, 0, 0}, {556, 0, 0}, {0, 0, 0}, {0, 0, 0}, {557, 0, 0}, {558, 0, 0}, {559, 0, 0}, {560, 0, 0}, {561, 0, 0}, {562, 0, 0}, {563, 0, 0}, {564, 0, 0}, {565, 0, 0}, {566, 0, 0}, {567, 0, 0}, {568, 0, 0}, {569, 0, 0}, {570, 0, 0}, {571, 0, 0}, {0, 0, 0}, {572, 0, 0}, {0, 0, 0}, {573, 0, 0}, {574, 0, 0}, {575, 0, 0}, {576, 0, 0}, {577, 0, 0}, {578, 0, 0}, {579, 0, 0}, {580, 0, 0}, {581, 0, 0}, {582, 0, 0}, {583, 0, 0}, {584, 0, 0}, {585, 0, 0}, {586, 0, 0}, {0, 0, 0}, {587, 0, 0}, {588, 0, 0}, {589, 0, 0}, {590, 0, 0}, {591, 0, 0}, {592, 0, 0}, {593, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {594, 0, 0}, {595, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {596, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page545 = { 0, marc8_31page545_dir }; /* PAGE 544 */ struct yaz_iconv_trie_flat marc8_31page544_flat[] = { {"\x25\x2D", 0, 0x6A22}, /* East Asian ideograph */ {"\x25\x2E", 0, 0x8507}, /* East Asian ideograph */ {"\x2A\x5A", 0, 0x868B}, /* East Asian ideograph (unrelated variant of EACC 23293D) */ {"\x2A\x64", 0, 0x87B5}, /* East Asian ideograph */ {"\x2A\x73", 0, 0x87CA}, /* East Asian ideograph */ {"\x2D\x79", 0, 0x88B5}, /* East Asian ideograph */ {"\x2F\x5D", 0, 0x7E48}, /* East Asian ideograph */ {"\x31\x2B", 0, 0x89BB}, /* East Asian ideograph */ {"\x31\x43", 0, 0x89F5}, /* East Asian ideograph (unrelated variant of EACC 23315E) */ {"\x31\x7D", 0, 0x8A7E}, /* East Asian ideograph */ {"\x33\x63", 0, 0x8B1A}, /* East Asian ideograph */ {"\x36\x39", 0, 0x8C7C}, /* East Asian ideograph */ {"\x38\x33", 0, 0x8D91}, /* East Asian ideograph */ {"\x38\x6F", 0, 0x8DD7}, /* East Asian ideograph */ {"\x3A\x5E", 0, 0x8E6E}, /* East Asian ideograph */ {"\x3B\x63", 0, 0x5E32}, /* East Asian ideograph */ {"\x3C\x2D", 0, 0x8F3C}, /* East Asian ideograph */ {"\x3D\x5D", 0, 0x900E}, /* East Asian ideograph */ {"\x40\x53", 0, 0x914F}, /* East Asian ideograph */ {"\x42\x31", 0, 0x8019}, /* East Asian ideograph (unrelated variant of EACC 215266) */ {"\x44\x5F", 0, 0x941A}, /* East Asian ideograph */ {"\x4A\x2E", 0, 0x90B4}, /* East Asian ideograph */ {"\x4A\x4A", 0, 0x5F8F}, /* East Asian ideograph */ {"\x51\x58", 0, 0x7CC7}, /* East Asian ideograph */ {"\x54\x76", 0, 0x9AE1}, /* East Asian ideograph */ {"\x57\x5F", 0, 0x9ABE}, /* East Asian ideograph */ {"\x58\x5C", 0, 0x9C51}, /* East Asian ideograph (unrelated variant of EACC 235945) */ {"\x58\x70", 0, 0x9C1B}, /* East Asian ideograph */ {"\x59\x73", 0, 0x9CEC}, /* East Asian ideograph */ {"\x5A\x48", 0, 0x9D44}, /* East Asian ideograph */ {"\x5D\x3C", 0, 0x6EF7}, /* East Asian ideograph */ {"\x5D\x49", 0, 0x9EA4}, /* East Asian ideograph */ {"\x5D\x5C", 0, 0x730A}, /* East Asian ideograph */ {"\x5E\x42", 0, 0x9EC9}, /* East Asian ideograph */ {"\x5E\x66", 0, 0x9B12}, /* East Asian ideograph */ {"\x5E\x7D", 0, 0x6641}, /* East Asian ideograph */ {"\x5F\x45", 0, 0x86A1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page544 = { marc8_31page544_flat, 0 }; /* PAGE 543 */ struct yaz_iconv_trie_flat marc8_31page543_flat[] = { {"\x24", 0, 0x83F0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page543 = { marc8_31page543_flat, 0 }; /* PAGE 542 */ struct yaz_iconv_trie_flat marc8_31page542_flat[] = { {"\x2E", 0, 0x831C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page542 = { marc8_31page542_flat, 0 }; /* PAGE 541 */ struct yaz_iconv_trie_flat marc8_31page541_flat[] = { {"\x5F", 0, 0x8037}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page541 = { marc8_31page541_flat, 0 }; /* PAGE 540 */ struct yaz_iconv_trie_flat marc8_31page540_flat[] = { {"\x2E", 0, 0x7516}, /* East Asian ideograph */ {"\x31", 0, 0x7F48}, /* East Asian ideograph */ {"\x50", 0, 0x7F82}, /* East Asian ideograph */ {"\x51", 0, 0x7F58}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page540 = { marc8_31page540_flat, 0 }; /* PAGE 539 */ struct yaz_iconv_trie_flat marc8_31page539_flat[] = { {"\x28", 0, 0x5FAD}, /* East Asian ideograph */ {"\x5D", 0, 0x7D56}, /* East Asian ideograph */ {"\x74", 0, 0x7E89}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page539 = { marc8_31page539_flat, 0 }; /* PAGE 538 */ struct yaz_iconv_trie_flat marc8_31page538_flat[] = { {"\x5A", 0, 0x7E27}, /* East Asian ideograph */ {"\x7C", 0, 0x7D63}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page538 = { marc8_31page538_flat, 0 }; /* PAGE 537 */ struct yaz_iconv_trie_flat marc8_31page537_flat[] = { {"\x62", 0, 0x7D4F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page537 = { marc8_31page537_flat, 0 }; /* PAGE 536 */ struct yaz_iconv_trie_flat marc8_31page536_flat[] = { {"\x35", 0, 0x6CD4}, /* East Asian ideograph */ {"\x43", 0, 0x9908}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page536 = { marc8_31page536_flat, 0 }; /* PAGE 535 */ struct yaz_iconv_trie_flat marc8_31page535_flat[] = { {"\x26", 0, 0x7BE0}, /* East Asian ideograph */ {"\x27", 0, 0x7B2E}, /* East Asian ideograph */ {"\x3E", 0, 0x7B59}, /* East Asian ideograph */ {"\x46", 0, 0x7BE6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page535 = { marc8_31page535_flat, 0 }; /* PAGE 534 */ struct yaz_iconv_trie_flat marc8_31page534_flat[] = { {"\x54", 0, 0x7B04}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page534 = { marc8_31page534_flat, 0 }; /* PAGE 533 */ struct yaz_iconv_trie_flat marc8_31page533_flat[] = { {"\x4E", 0, 0x8020}, /* East Asian ideograph */ {"\x6F", 0, 0x7A19}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page533 = { marc8_31page533_flat, 0 }; /* PAGE 532 */ struct yaz_iconv_trie_flat marc8_31page532_flat[] = { {"\x4F", 0, 0x772D}, /* East Asian ideograph */ {"\x5F", 0, 0x77C1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page532 = { marc8_31page532_flat, 0 }; /* PAGE 531 */ struct yaz_iconv_trie_flat marc8_31page531_flat[] = { {"\x4A", 0, 0x7690}, /* East Asian ideograph */ {"\x60", 0, 0x76A1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page531 = { marc8_31page531_flat, 0 }; /* PAGE 530 */ struct yaz_iconv_trie_flat marc8_31page530_flat[] = { {"\x6F", 0, 0x75B8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page530 = { marc8_31page530_flat, 0 }; /* PAGE 529 */ struct yaz_iconv_trie_flat marc8_31page529_flat[] = { {"\x40", 0, 0x73B3}, /* East Asian ideograph */ {"\x78", 0, 0x74A2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page529 = { marc8_31page529_flat, 0 }; /* PAGE 528 */ struct yaz_iconv_trie_flat marc8_31page528_flat[] = { {"\x52", 0, 0x71FE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page528 = { marc8_31page528_flat, 0 }; /* PAGE 527 */ struct yaz_iconv_trie_flat marc8_31page527_flat[] = { {"\x5D", 0, 0x715B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page527 = { marc8_31page527_flat, 0 }; /* PAGE 526 */ struct yaz_iconv_trie_flat marc8_31page526_flat[] = { {"\x6D", 0, 0x70B1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page526 = { marc8_31page526_flat, 0 }; /* PAGE 525 */ struct yaz_iconv_trie_flat marc8_31page525_flat[] = { {"\x41", 0, 0x7032}, /* East Asian ideograph */ {"\x56", 0, 0x9800}, /* East Asian ideograph */ {"\x5D", 0, 0x6DE0}, /* East Asian ideograph */ {"\x72", 0, 0x6F74}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page525 = { marc8_31page525_flat, 0 }; /* PAGE 524 */ struct yaz_iconv_trie_flat marc8_31page524_flat[] = { {"\x3D", 0, 0x6D38}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page524 = { marc8_31page524_flat, 0 }; /* PAGE 523 */ struct yaz_iconv_trie_flat marc8_31page523_flat[] = { {"\x35", 0, 0x6DE5}, /* East Asian ideograph */ {"\x7B", 0, 0x6E86}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page523 = { marc8_31page523_flat, 0 }; /* PAGE 522 */ struct yaz_iconv_trie_flat marc8_31page522_flat[] = { {"\x6B", 0, 0x6EA6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page522 = { marc8_31page522_flat, 0 }; /* PAGE 521 */ struct yaz_iconv_trie_flat marc8_31page521_flat[] = { {"\x2F", 0, 0x6CD9}, /* East Asian ideograph */ {"\x3B", 0, 0x6E7C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page521 = { marc8_31page521_flat, 0 }; /* PAGE 520 */ struct yaz_iconv_trie_flat marc8_31page520_flat[] = { {"\x73", 0, 0x6FA3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page520 = { marc8_31page520_flat, 0 }; /* PAGE 519 */ struct yaz_iconv_trie_flat marc8_31page519_flat[] = { {"\x31", 0, 0x6C73}, /* East Asian ideograph */ {"\x39", 0, 0x6C67}, /* East Asian ideograph (variant of EACC 224739) */ {"\x47", 0, 0x6D64}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page519 = { marc8_31page519_flat, 0 }; /* PAGE 518 */ struct yaz_iconv_trie_flat marc8_31page518_flat[] = { {"\x70", 0, 0x6CD0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page518 = { marc8_31page518_flat, 0 }; /* PAGE 517 */ struct yaz_iconv_trie_flat marc8_31page517_flat[] = { {"\x74", 0, 0x6AA9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page517 = { marc8_31page517_flat, 0 }; /* PAGE 516 */ struct yaz_iconv_trie_flat marc8_31page516_flat[] = { {"\x3D", 0, 0x6AC1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page516 = { marc8_31page516_flat, 0 }; /* PAGE 515 */ struct yaz_iconv_trie_flat marc8_31page515_flat[] = { {"\x2D", 0, 0x69B2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page515 = { marc8_31page515_flat, 0 }; /* PAGE 514 */ struct yaz_iconv_trie_flat marc8_31page514_flat[] = { {"\x3F", 0, 0x7BA0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page514 = { marc8_31page514_flat, 0 }; /* PAGE 513 */ struct yaz_iconv_trie_flat marc8_31page513_flat[] = { {"\x62", 0, 0x684A}, /* East Asian ideograph */ {"\x73", 0, 0x7A1C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page513 = { marc8_31page513_flat, 0 }; /* PAGE 512 */ struct yaz_iconv_trie_flat marc8_31page512_flat[] = { {"\x22", 0, 0x690F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page512 = { marc8_31page512_flat, 0 }; /* PAGE 511 */ struct yaz_iconv_trie_flat marc8_31page511_flat[] = { {"\x26", 0, 0x661D}, /* East Asian ideograph */ {"\x33", 0, 0x80AD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page511 = { marc8_31page511_flat, 0 }; /* PAGE 510 */ struct yaz_iconv_trie_flat marc8_31page510_flat[] = { {"\x36", 0, 0x66CD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page510 = { marc8_31page510_flat, 0 }; /* PAGE 509 */ struct yaz_iconv_trie_flat marc8_31page509_flat[] = { {"\x70", 0, 0x714A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page509 = { marc8_31page509_flat, 0 }; /* PAGE 508 */ struct yaz_iconv_trie_flat marc8_31page508_flat[] = { {"\x29", 0, 0x65B5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page508 = { marc8_31page508_flat, 0 }; /* PAGE 507 */ struct yaz_iconv_trie_flat marc8_31page507_flat[] = { {"\x3F", 0, 0x52C5}, /* East Asian ideograph */ {"\x45", 0, 0x69E3}, /* East Asian ideograph */ {"\x54", 0, 0x657F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page507 = { marc8_31page507_flat, 0 }; /* PAGE 506 */ struct yaz_iconv_trie_flat marc8_31page506_flat[] = { {"\x28", 0, 0x6528}, /* East Asian ideograph */ {"\x7B", 0, 0x630E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page506 = { marc8_31page506_flat, 0 }; /* PAGE 505 */ struct yaz_iconv_trie_flat marc8_31page505_flat[] = { {"\x3A", 0, 0x6332}, /* East Asian ideograph */ {"\x44", 0, 0x651F}, /* East Asian ideograph */ {"\x72", 0, 0x5261}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page505 = { marc8_31page505_flat, 0 }; /* PAGE 504 */ struct yaz_iconv_trie_flat marc8_31page504_flat[] = { {"\x28", 0, 0x640B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page504 = { marc8_31page504_flat, 0 }; /* PAGE 503 */ struct yaz_iconv_trie_flat marc8_31page503_flat[] = { {"\x7A", 0, 0x6738}, /* East Asian ideograph */ {"\x7C", 0, 0x634D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page503 = { marc8_31page503_flat, 0 }; /* PAGE 502 */ struct yaz_iconv_trie_flat marc8_31page502_flat[] = { {"\x79", 0, 0x6128}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page502 = { marc8_31page502_flat, 0 }; /* PAGE 501 */ struct yaz_iconv_trie_flat marc8_31page501_flat[] = { {"\x5B", 0, 0x605A}, /* East Asian ideograph */ {"\x74", 0, 0x609B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page501 = { marc8_31page501_flat, 0 }; /* PAGE 500 */ struct yaz_iconv_trie_flat marc8_31page500_flat[] = { {"\x68", 0, 0x5F51}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page500 = { marc8_31page500_flat, 0 }; /* PAGE 499 */ struct yaz_iconv_trie_flat marc8_31page499_flat[] = { {"\x4C", 0, 0x5ECF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page499 = { marc8_31page499_flat, 0 }; /* PAGE 498 */ struct yaz_iconv_trie_flat marc8_31page498_flat[] = { {"\x7B", 0, 0x5D1F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page498 = { marc8_31page498_flat, 0 }; /* PAGE 497 */ struct yaz_iconv_trie_dir marc8_31page497_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {499, 0, 0}, {0, 0, 0}, {0, 0, 0}, {500, 0, 0}, {501, 0, 0}, {0, 0, 0}, {502, 0, 0}, {0, 0, 0}, {503, 0, 0}, {0, 0, 0}, {504, 0, 0}, {505, 0, 0}, {506, 0, 0}, {0, 0, 0}, {507, 0, 0}, {0, 0, 0}, {0, 0, 0}, {508, 0, 0}, {509, 0, 0}, {510, 0, 0}, {511, 0, 0}, {512, 0, 0}, {513, 0, 0}, {0, 0, 0}, {514, 0, 0}, {515, 0, 0}, {516, 0, 0}, {517, 0, 0}, {518, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {519, 0, 0}, {520, 0, 0}, {521, 0, 0}, {522, 0, 0}, {523, 0, 0}, {0, 0, 0}, {524, 0, 0}, {525, 0, 0}, {526, 0, 0}, {0, 0, 0}, {527, 0, 0}, {0, 0, 0}, {528, 0, 0}, {0, 0, 0}, {529, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {530, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {531, 0, 0}, {532, 0, 0}, {0, 0, 0}, {533, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {534, 0, 0}, {0, 0, 0}, {0, 0, 0}, {535, 0, 0}, {536, 0, 0}, {0, 0, 0}, {0, 0, 0}, {537, 0, 0}, {538, 0, 0}, {539, 0, 0}, {0, 0, 0}, {540, 0, 0}, {541, 0, 0}, {0, 0, 0}, {542, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {543, 0, 0}, {544, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page497 = { 0, marc8_31page497_dir }; /* PAGE 496 */ struct yaz_iconv_trie_flat marc8_31page496_flat[] = { {"\x6A", 0, 0x51A4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page496 = { marc8_31page496_flat, 0 }; /* PAGE 495 */ struct yaz_iconv_trie_flat marc8_31page495_flat[] = { {"\x44", 0, 0x598D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page495 = { marc8_31page495_flat, 0 }; /* PAGE 494 */ struct yaz_iconv_trie_flat marc8_31page494_flat[] = { {"\x3A", 0, 0x9654}, /* East Asian ideograph */ {"\x52", 0, 0x579B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page494 = { marc8_31page494_flat, 0 }; /* PAGE 493 */ struct yaz_iconv_trie_flat marc8_31page493_flat[] = { {"\x45", 0, 0x56D3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page493 = { marc8_31page493_flat, 0 }; /* PAGE 492 */ struct yaz_iconv_trie_flat marc8_31page492_flat[] = { {"\x43", 0, 0x55E2}, /* East Asian ideograph */ {"\x64", 0, 0x55D4}, /* East Asian ideograph (variant of EACC 217164) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page492 = { marc8_31page492_flat, 0 }; /* PAGE 491 */ struct yaz_iconv_trie_flat marc8_31page491_flat[] = { {"\x7D", 0, 0x8123}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page491 = { marc8_31page491_flat, 0 }; /* PAGE 490 */ struct yaz_iconv_trie_flat marc8_31page490_flat[] = { {"\x33", 0, 0x5231}, /* East Asian ideograph */ {"\x5F", 0, 0x5273}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page490 = { marc8_31page490_flat, 0 }; /* PAGE 489 */ struct yaz_iconv_trie_flat marc8_31page489_flat[] = { {"\x2B", 0, 0x5C28}, /* East Asian ideograph */ {"\x2D", 0, 0x4E80}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page489 = { marc8_31page489_flat, 0 }; /* PAGE 488 */ struct yaz_iconv_trie_flat marc8_31page488_flat[] = { {"\x22", 0, 0x9C0C}, /* East Asian ideograph */ {"\x29", 0, 0x9C53}, /* East Asian ideograph */ {"\x2C", 0, 0x9F08}, /* East Asian ideograph */ {"\x35", 0, 0x9D76}, /* East Asian ideograph */ {"\x41", 0, 0x9D5E}, /* East Asian ideograph */ {"\x51", 0, 0x5869}, /* East Asian ideograph */ {"\x52", 0, 0x78B1}, /* East Asian ideograph */ {"\x5F", 0, 0x83FB}, /* East Asian ideograph */ {"\x60", 0, 0x5E85}, /* East Asian ideograph */ {"\x62", 0, 0x9EC4}, /* East Asian ideograph */ {"\x75", 0, 0x76B7}, /* East Asian ideograph */ {"\x7E", 0, 0x658B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page488 = { marc8_31page488_flat, 0 }; /* PAGE 487 */ struct yaz_iconv_trie_flat marc8_31page487_flat[] = { {"\x32", 0, 0x99EE}, /* East Asian ideograph */ {"\x34", 0, 0x99DE}, /* East Asian ideograph */ {"\x47", 0, 0x99C8}, /* East Asian ideograph */ {"\x59", 0, 0x9AC4}, /* East Asian ideograph */ {"\x5A", 0, 0x8EC6}, /* East Asian ideograph */ {"\x62", 0, 0x9A0C}, /* East Asian ideograph */ {"\x6A", 0, 0x6B1D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page487 = { marc8_31page487_flat, 0 }; /* PAGE 486 */ struct yaz_iconv_trie_flat marc8_31page486_flat[] = { {"\x21", 0, 0x978C}, /* East Asian ideograph */ {"\x2D", 0, 0x976D}, /* East Asian ideograph */ {"\x30", 0, 0x97EE}, /* East Asian ideograph */ {"\x56", 0, 0x980B}, /* East Asian ideograph */ {"\x78", 0, 0x9920}, /* East Asian ideograph */ {"\x79", 0, 0x8218}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page486 = { marc8_31page486_flat, 0 }; /* PAGE 485 */ struct yaz_iconv_trie_flat marc8_31page485_flat[] = { {"\x28", 0, 0x9665}, /* East Asian ideograph */ {"\x2C", 0, 0x5826}, /* East Asian ideograph */ {"\x2D", 0, 0x964F}, /* East Asian ideograph */ {"\x2E", 0, 0x661C}, /* East Asian ideograph */ {"\x35", 0, 0x78D2}, /* East Asian ideograph */ {"\x3B", 0, 0x96A0}, /* East Asian ideograph */ {"\x43", 0, 0x9CEB}, /* East Asian ideograph */ {"\x46", 0, 0x96BD}, /* East Asian ideograph */ {"\x4B", 0, 0x96D1}, /* East Asian ideograph */ {"\x4C", 0, 0x9DC4}, /* East Asian ideograph */ {"\x63", 0, 0x873A}, /* East Asian ideograph */ {"\x73", 0, 0x975A}, /* East Asian ideograph (unrelated variant of EACC 234C76) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page485 = { marc8_31page485_flat, 0 }; /* PAGE 484 */ struct yaz_iconv_trie_flat marc8_31page484_flat[] = { {"\x21", 0, 0x9418}, /* East Asian ideograph */ {"\x24", 0, 0x7145}, /* East Asian ideograph */ {"\x26", 0, 0x7194}, /* East Asian ideograph */ {"\x28", 0, 0x93C1}, /* East Asian ideograph */ {"\x3B", 0, 0x92B9}, /* East Asian ideograph */ {"\x43", 0, 0x92F3}, /* East Asian ideograph */ {"\x4A", 0, 0x945A}, /* East Asian ideograph */ {"\x50", 0, 0x9587}, /* East Asian ideograph */ {"\x61", 0, 0x6FF6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page484 = { marc8_31page484_flat, 0 }; /* PAGE 483 */ struct yaz_iconv_trie_flat marc8_31page483_flat[] = { {"\x23", 0, 0x9167}, /* East Asian ideograph */ {"\x2F", 0, 0x9196}, /* East Asian ideograph */ {"\x56", 0, 0x920E}, /* East Asian ideograph */ {"\x65", 0, 0x8216}, /* East Asian ideograph */ {"\x68", 0, 0x8021}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page483 = { marc8_31page483_flat, 0 }; /* PAGE 482 */ struct yaz_iconv_trie_flat marc8_31page482_flat[] = { {"\x2F", 0, 0x8FE8}, /* East Asian ideograph */ {"\x3F", 0, 0x5FA7}, /* East Asian ideograph */ {"\x40", 0, 0x5FA8}, /* East Asian ideograph */ {"\x48", 0, 0x9013}, /* East Asian ideograph */ {"\x5A", 0, 0x8FE9}, /* East Asian ideograph */ {"\x5B", 0, 0x9089}, /* East Asian ideograph */ {"\x74", 0, 0x96A3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page482 = { marc8_31page482_flat, 0 }; /* PAGE 481 */ struct yaz_iconv_trie_flat marc8_31page481_flat[] = { {"\x2F", 0, 0x8EB1}, /* East Asian ideograph */ {"\x42", 0, 0x8F19}, /* East Asian ideograph */ {"\x43", 0, 0x8EFD}, /* East Asian ideograph */ {"\x5D", 0, 0x8FA2}, /* East Asian ideograph */ {"\x5E", 0, 0x8FA7}, /* East Asian ideograph */ {"\x69", 0, 0x5EF5}, /* East Asian ideograph */ {"\x7A", 0, 0x8FEF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page481 = { marc8_31page481_flat, 0 }; /* PAGE 480 */ struct yaz_iconv_trie_flat marc8_31page480_flat[] = { {"\x34", 0, 0x8CAD}, /* East Asian ideograph */ {"\x3D", 0, 0x8CDB}, /* East Asian ideograph */ {"\x48", 0, 0x8D71}, /* East Asian ideograph */ {"\x4E", 0, 0x8D82}, /* East Asian ideograph */ {"\x5F", 0, 0x8E5F}, /* East Asian ideograph */ {"\x63", 0, 0x8DE5}, /* East Asian ideograph */ {"\x7E", 0, 0x8E7B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page480 = { marc8_31page480_flat, 0 }; /* PAGE 479 */ struct yaz_iconv_trie_flat marc8_31page479_flat[] = { {"\x27", 0, 0x8ACC}, /* East Asian ideograph */ {"\x2C", 0, 0x8B01}, /* East Asian ideograph */ {"\x3D", 0, 0x8AE9}, /* East Asian ideograph */ {"\x41", 0, 0x5629}, /* East Asian ideograph */ {"\x4C", 0, 0x8B72}, /* East Asian ideograph */ {"\x4F", 0, 0x8B83}, /* East Asian ideograph */ {"\x57", 0, 0x7AEA}, /* East Asian ideograph */ {"\x59", 0, 0x8277}, /* East Asian ideograph */ {"\x5F", 0, 0x732A}, /* East Asian ideograph */ {"\x60", 0, 0x72B2}, /* East Asian ideograph */ {"\x63", 0, 0x8C98}, /* East Asian ideograph */ {"\x65", 0, 0x72F8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page479 = { marc8_31page479_flat, 0 }; /* PAGE 478 */ struct yaz_iconv_trie_flat marc8_31page478_flat[] = { {"\x31", 0, 0x89A7}, /* East Asian ideograph */ {"\x33", 0, 0x752A}, /* East Asian ideograph */ {"\x36", 0, 0x89E6}, /* East Asian ideograph */ {"\x4D", 0, 0x548F}, /* East Asian ideograph */ {"\x56", 0, 0x612C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page478 = { marc8_31page478_flat, 0 }; /* PAGE 477 */ struct yaz_iconv_trie_flat marc8_31page477_flat[] = { {"\x2B", 0, 0x8797}, /* East Asian ideograph */ {"\x2D", 0, 0x8748}, /* East Asian ideograph */ {"\x30", 0, 0x87C7}, /* East Asian ideograph */ {"\x3B", 0, 0x60F7}, /* East Asian ideograph */ {"\x49", 0, 0x885E}, /* East Asian ideograph */ {"\x58", 0, 0x890E}, /* East Asian ideograph */ {"\x5B", 0, 0x886E}, /* East Asian ideograph */ {"\x60", 0, 0x5E2C}, /* East Asian ideograph */ {"\x63", 0, 0x88E1}, /* East Asian ideograph */ {"\x73", 0, 0x7D5D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page477 = { marc8_31page477_flat, 0 }; /* PAGE 476 */ struct yaz_iconv_trie_flat marc8_31page476_flat[] = { {"\x2E", 0, 0x8024}, /* East Asian ideograph */ {"\x35", 0, 0x846F}, /* East Asian ideograph */ {"\x3C", 0, 0x8613}, /* East Asian ideograph */ {"\x3F", 0, 0x6A97}, /* East Asian ideograph */ {"\x64", 0, 0x9F04}, /* East Asian ideograph */ {"\x75", 0, 0x9F05}, /* East Asian ideograph */ {"\x7B", 0, 0x8717}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page476 = { marc8_31page476_flat, 0 }; /* PAGE 475 */ struct yaz_iconv_trie_flat marc8_31page475_flat[] = { {"\x29", 0, 0x830E}, /* East Asian ideograph (variant of EACC 275529) */ {"\x2D", 0, 0x8358}, /* East Asian ideograph */ {"\x2E", 0, 0x82FA}, /* East Asian ideograph (variant of EACC 227C68) */ {"\x47", 0, 0x837D}, /* East Asian ideograph */ {"\x50", 0, 0x585F}, /* East Asian ideograph */ {"\x54", 0, 0x855A}, /* East Asian ideograph */ {"\x5A", 0, 0x8386}, /* East Asian ideograph */ {"\x5B", 0, 0x8385}, /* East Asian ideograph */ {"\x61", 0, 0x76D6}, /* East Asian ideograph */ {"\x73", 0, 0x83D4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page475 = { marc8_31page475_flat, 0 }; /* PAGE 474 */ struct yaz_iconv_trie_flat marc8_31page474_flat[] = { {"\x21", 0, 0x9AD7}, /* East Asian ideograph */ {"\x24", 0, 0x5367}, /* East Asian ideograph */ {"\x34", 0, 0x64E7}, /* East Asian ideograph */ {"\x40", 0, 0x6841}, /* East Asian ideograph */ {"\x46", 0, 0x8229}, /* East Asian ideograph */ {"\x47", 0, 0x824A}, /* East Asian ideograph */ {"\x61", 0, 0x8306}, /* East Asian ideograph */ {"\x68", 0, 0x6959}, /* East Asian ideograph */ {"\x6F", 0, 0x83C0}, /* East Asian ideograph */ {"\x76", 0, 0x8318}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page474 = { marc8_31page474_flat, 0 }; /* PAGE 473 */ struct yaz_iconv_trie_flat marc8_31page473_flat[] = { {"\x21", 0, 0x7C9B}, /* East Asian ideograph */ {"\x23", 0, 0x5B8D}, /* East Asian ideograph */ {"\x2C", 0, 0x6BD3}, /* East Asian ideograph */ {"\x40", 0, 0x812C}, /* East Asian ideograph */ {"\x44", 0, 0x8107}, /* East Asian ideograph */ {"\x4B", 0, 0x80F7}, /* East Asian ideograph */ {"\x5E", 0, 0x8193}, /* East Asian ideograph */ {"\x61", 0, 0x811A}, /* East Asian ideograph */ {"\x7E", 0, 0x81C8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page473 = { marc8_31page473_flat, 0 }; /* PAGE 472 */ struct yaz_iconv_trie_flat marc8_31page472_flat[] = { {"\x28", 0, 0x9262}, /* East Asian ideograph */ {"\x2B", 0, 0x9475}, /* East Asian ideograph */ {"\x32", 0, 0x8FA0}, /* East Asian ideograph */ {"\x33", 0, 0x7F78}, /* East Asian ideograph */ {"\x38", 0, 0x898A}, /* East Asian ideograph */ {"\x40", 0, 0x7FA1}, /* East Asian ideograph */ {"\x41", 0, 0x7FA3}, /* East Asian ideograph */ {"\x4A", 0, 0x7FC4}, /* East Asian ideograph */ {"\x59", 0, 0x98DC}, /* East Asian ideograph */ {"\x5D", 0, 0x6537}, /* East Asian ideograph */ {"\x65", 0, 0x79D0}, /* East Asian ideograph */ {"\x67", 0, 0x79CF}, /* East Asian ideograph */ {"\x6B", 0, 0x7085}, /* East Asian ideograph */ {"\x6C", 0, 0x8EAD}, /* East Asian ideograph */ {"\x7B", 0, 0x8074}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page472 = { marc8_31page472_flat, 0 }; /* PAGE 471 */ struct yaz_iconv_trie_flat marc8_31page471_flat[] = { {"\x24", 0, 0x5E0B}, /* East Asian ideograph */ {"\x29", 0, 0x7D25}, /* East Asian ideograph */ {"\x4A", 0, 0x6DD6}, /* East Asian ideograph */ {"\x4D", 0, 0x7D2C}, /* East Asian ideograph */ {"\x6A", 0, 0x7DB3}, /* East Asian ideograph */ {"\x79", 0, 0x7E62}, /* East Asian ideograph */ {"\x7D", 0, 0x7D99}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page471 = { marc8_31page471_flat, 0 }; /* PAGE 470 */ struct yaz_iconv_trie_flat marc8_31page470_flat[] = { {"\x2B", 0, 0x693E}, /* East Asian ideograph */ {"\x2D", 0, 0x7B5D}, /* East Asian ideograph */ {"\x36", 0, 0x84D1}, /* East Asian ideograph */ {"\x4F", 0, 0x7C58}, /* East Asian ideograph */ {"\x6F", 0, 0x7CFA}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page470 = { marc8_31page470_flat, 0 }; /* PAGE 469 */ struct yaz_iconv_trie_flat marc8_31page469_flat[] = { {"\x29", 0, 0x9F9D}, /* East Asian ideograph */ {"\x37", 0, 0x7980}, /* East Asian ideograph */ {"\x3E", 0, 0x7A3E}, /* East Asian ideograph */ {"\x41", 0, 0x4E69}, /* East Asian ideograph */ {"\x45", 0, 0x9834}, /* East Asian ideograph */ {"\x48", 0, 0x7A42}, /* East Asian ideograph */ {"\x5E", 0, 0x7AB0}, /* East Asian ideograph */ {"\x6B", 0, 0x7AF8}, /* East Asian ideograph */ {"\x7C", 0, 0x7B5E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page469 = { marc8_31page469_flat, 0 }; /* PAGE 468 */ struct yaz_iconv_trie_flat marc8_31page468_flat[] = { {"\x24", 0, 0x6998}, /* East Asian ideograph */ {"\x33", 0, 0x78AA}, /* East Asian ideograph */ {"\x5B", 0, 0x945B}, /* East Asian ideograph */ {"\x79", 0, 0x5FA1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page468 = { marc8_31page468_flat, 0 }; /* PAGE 467 */ struct yaz_iconv_trie_flat marc8_31page467_flat[] = { {"\x21", 0, 0x7681}, /* East Asian ideograph */ {"\x34", 0, 0x76C7}, /* East Asian ideograph */ {"\x38", 0, 0x76D7}, /* East Asian ideograph */ {"\x4F", 0, 0x771F}, /* East Asian ideograph */ {"\x5F", 0, 0x7741}, /* East Asian ideograph */ {"\x65", 0, 0x53E1}, /* East Asian ideograph */ {"\x6D", 0, 0x7792}, /* East Asian ideograph */ {"\x71", 0, 0x7719}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page467 = { marc8_31page467_flat, 0 }; /* PAGE 466 */ struct yaz_iconv_trie_flat marc8_31page466_flat[] = { {"\x2C", 0, 0x583A}, /* East Asian ideograph */ {"\x2D", 0, 0x756E}, /* East Asian ideograph */ {"\x35", 0, 0x7567}, /* East Asian ideograph */ {"\x3C", 0, 0x53E0}, /* East Asian ideograph */ {"\x3E", 0, 0x758E}, /* East Asian ideograph */ {"\x5D", 0, 0x7661}, /* East Asian ideograph */ {"\x7E", 0, 0x4F70}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page466 = { marc8_31page466_flat, 0 }; /* PAGE 465 */ struct yaz_iconv_trie_flat marc8_31page465_flat[] = { {"\x22", 0, 0x736A}, /* East Asian ideograph */ {"\x35", 0, 0x73C9}, /* East Asian ideograph */ {"\x3F", 0, 0x73CE}, /* East Asian ideograph */ {"\x43", 0, 0x746F}, /* East Asian ideograph */ {"\x45", 0, 0x6BEC}, /* East Asian ideograph */ {"\x5B", 0, 0x78AF}, /* East Asian ideograph */ {"\x71", 0, 0x7F3E}, /* East Asian ideograph */ {"\x72", 0, 0x7506}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page465 = { marc8_31page465_flat, 0 }; /* PAGE 464 */ struct yaz_iconv_trie_flat marc8_31page464_flat[] = { {"\x26", 0, 0x713C}, /* East Asian ideograph */ {"\x28", 0, 0x8B8C}, /* East Asian ideograph */ {"\x34", 0, 0x718F}, /* East Asian ideograph */ {"\x3B", 0, 0x4E89}, /* East Asian ideograph */ {"\x45", 0, 0x5C12}, /* East Asian ideograph */ {"\x46", 0, 0x58BB}, /* East Asian ideograph */ {"\x58", 0, 0x7F9D}, /* East Asian ideograph */ {"\x5B", 0, 0x7282}, /* East Asian ideograph */ {"\x60", 0, 0x6C02}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page464 = { marc8_31page464_flat, 0 }; /* PAGE 463 */ struct yaz_iconv_trie_flat marc8_31page463_flat[] = { {"\x3A", 0, 0x702C}, /* East Asian ideograph */ {"\x47", 0, 0x7AC8}, /* East Asian ideograph */ {"\x54", 0, 0x70F1}, /* East Asian ideograph */ {"\x56", 0, 0x70B0}, /* East Asian ideograph */ {"\x6B", 0, 0x70DF}, /* East Asian ideograph */ {"\x71", 0, 0x70A4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page463 = { marc8_31page463_flat, 0 }; /* PAGE 462 */ struct yaz_iconv_trie_flat marc8_31page462_flat[] = { {"\x29", 0, 0x51CF}, /* East Asian ideograph */ {"\x2F", 0, 0x6E07}, /* East Asian ideograph */ {"\x44", 0, 0x6FD5}, /* East Asian ideograph */ {"\x45", 0, 0x6E29}, /* East Asian ideograph */ {"\x50", 0, 0x6EDA}, /* East Asian ideograph */ {"\x53", 0, 0x7001}, /* East Asian ideograph */ {"\x5C", 0, 0x6F44}, /* East Asian ideograph */ {"\x6B", 0, 0x6F82}, /* East Asian ideograph */ {"\x6E", 0, 0x6F97}, /* East Asian ideograph */ {"\x74", 0, 0x6F5C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page462 = { marc8_31page462_flat, 0 }; /* PAGE 461 */ struct yaz_iconv_trie_flat marc8_31page461_flat[] = { {"\x29", 0, 0x6D29}, /* East Asian ideograph */ {"\x30", 0, 0x51B5}, /* East Asian ideograph */ {"\x35", 0, 0x6C4E}, /* East Asian ideograph */ {"\x38", 0, 0x6FFC}, /* East Asian ideograph */ {"\x46", 0, 0x6C79}, /* East Asian ideograph */ {"\x56", 0, 0x6F94}, /* East Asian ideograph */ {"\x5B", 0, 0x51C9}, /* East Asian ideograph */ {"\x5F", 0, 0x51C4}, /* East Asian ideograph */ {"\x68", 0, 0x6D45}, /* East Asian ideograph (variant of EACC 274768) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page461 = { marc8_31page461_flat, 0 }; /* PAGE 460 */ struct yaz_iconv_trie_flat marc8_31page460_flat[] = { {"\x21", 0, 0x61FD}, /* East Asian ideograph */ {"\x2C", 0, 0x6B7A}, /* East Asian ideograph */ {"\x47", 0, 0x6BD8}, /* East Asian ideograph */ {"\x6D", 0, 0x51B3}, /* East Asian ideograph */ {"\x74", 0, 0x51B2}, /* East Asian ideograph */ {"\x7C", 0, 0x6CB2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page460 = { marc8_31page460_flat, 0 }; /* PAGE 459 */ struct yaz_iconv_trie_flat marc8_31page459_flat[] = { {"\x39", 0, 0x6406}, /* East Asian ideograph */ {"\x3A", 0, 0x6760}, /* East Asian ideograph */ {"\x43", 0, 0x6901}, /* East Asian ideograph */ {"\x4E", 0, 0x697D}, /* East Asian ideograph */ {"\x50", 0, 0x58AB}, /* East Asian ideograph */ {"\x62", 0, 0x681D}, /* East Asian ideograph */ {"\x64", 0, 0x68B9}, /* East Asian ideograph */ {"\x69", 0, 0x6AC9}, /* East Asian ideograph */ {"\x74", 0, 0x5FFB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page459 = { marc8_31page459_flat, 0 }; /* PAGE 458 */ struct yaz_iconv_trie_flat marc8_31page458_flat[] = { {"\x25", 0, 0x686E}, /* East Asian ideograph */ {"\x2D", 0, 0x6780}, /* East Asian ideograph */ {"\x37", 0, 0x67FE}, /* East Asian ideograph */ {"\x3A", 0, 0x6942}, /* East Asian ideograph */ {"\x40", 0, 0x6822}, /* East Asian ideograph */ {"\x44", 0, 0x69C5}, /* East Asian ideograph */ {"\x4B", 0, 0x6852}, /* East Asian ideograph */ {"\x50", 0, 0x8308}, /* East Asian ideograph */ {"\x61", 0, 0x6746}, /* East Asian ideograph */ {"\x66", 0, 0x6973}, /* East Asian ideograph */ {"\x6B", 0, 0x6936}, /* East Asian ideograph */ {"\x72", 0, 0x68CA}, /* East Asian ideograph */ {"\x74", 0, 0x690D}, /* East Asian ideograph (variant of EACC 214474) */ {"\x7D", 0, 0x684C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page458 = { marc8_31page458_flat, 0 }; /* PAGE 457 */ struct yaz_iconv_trie_flat marc8_31page457_flat[] = { {"\x27", 0, 0x6630}, /* East Asian ideograph */ {"\x29", 0, 0x668E}, /* East Asian ideograph */ {"\x2E", 0, 0x66EC}, /* East Asian ideograph */ {"\x3B", 0, 0x6662}, /* East Asian ideograph */ {"\x3E", 0, 0x667B}, /* East Asian ideograph */ {"\x43", 0, 0x6636}, /* East Asian ideograph */ {"\x48", 0, 0x6681}, /* East Asian ideograph */ {"\x49", 0, 0x66A6}, /* East Asian ideograph */ {"\x5F", 0, 0x6716}, /* East Asian ideograph */ {"\x62", 0, 0x6722}, /* East Asian ideograph */ {"\x64", 0, 0x671E}, /* East Asian ideograph */ {"\x70", 0, 0x6736}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page457 = { marc8_31page457_flat, 0 }; /* PAGE 456 */ struct yaz_iconv_trie_flat marc8_31page456_flat[] = { {"\x28", 0, 0x5117}, /* East Asian ideograph */ {"\x49", 0, 0x53D9}, /* East Asian ideograph */ {"\x4F", 0, 0x555F}, /* East Asian ideograph */ {"\x72", 0, 0x65E3}, /* East Asian ideograph */ {"\x77", 0, 0x65EE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page456 = { marc8_31page456_flat, 0 }; /* PAGE 455 */ struct yaz_iconv_trie_flat marc8_31page455_flat[] = { {"\x22", 0, 0x6485}, /* East Asian ideograph */ {"\x32", 0, 0x642F}, /* East Asian ideograph */ {"\x41", 0, 0x63B2}, /* East Asian ideograph */ {"\x47", 0, 0x6271}, /* East Asian ideograph */ {"\x50", 0, 0x6428}, /* East Asian ideograph */ {"\x52", 0, 0x6447}, /* East Asian ideograph */ {"\x53", 0, 0x64E3}, /* East Asian ideograph */ {"\x54", 0, 0x635C}, /* East Asian ideograph */ {"\x6E", 0, 0x6534}, /* East Asian ideograph */ {"\x71", 0, 0x62CA}, /* East Asian ideograph */ {"\x76", 0, 0x6483}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page455 = { marc8_31page455_flat, 0 }; /* PAGE 454 */ struct yaz_iconv_trie_flat marc8_31page454_flat[] = { {"\x29", 0, 0x5214}, /* East Asian ideograph */ {"\x31", 0, 0x64A6}, /* East Asian ideograph */ {"\x39", 0, 0x67C6}, /* East Asian ideograph */ {"\x3F", 0, 0x6255}, /* East Asian ideograph */ {"\x49", 0, 0x67B4}, /* East Asian ideograph */ {"\x4C", 0, 0x6283}, /* East Asian ideograph */ {"\x4F", 0, 0x6294}, /* East Asian ideograph */ {"\x66", 0, 0x63CE}, /* East Asian ideograph */ {"\x67", 0, 0x62CF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page454 = { marc8_31page454_flat, 0 }; /* PAGE 453 */ struct yaz_iconv_trie_flat marc8_31page453_flat[] = { {"\x24", 0, 0x661A}, /* East Asian ideograph */ {"\x27", 0, 0x6120}, /* East Asian ideograph */ {"\x2A", 0, 0x5ABF}, /* East Asian ideograph */ {"\x31", 0, 0x6159}, /* East Asian ideograph */ {"\x3A", 0, 0x6185}, /* East Asian ideograph */ {"\x54", 0, 0x61D0}, /* East Asian ideograph */ {"\x67", 0, 0x621E}, /* East Asian ideograph */ {"\x6E", 0, 0x6226}, /* East Asian ideograph */ {"\x6F", 0, 0x622F}, /* East Asian ideograph */ {"\x76", 0, 0x78A5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page453 = { marc8_31page453_flat, 0 }; /* PAGE 452 */ struct yaz_iconv_trie_flat marc8_31page452_flat[] = { {"\x2B", 0, 0x6060}, /* East Asian ideograph */ {"\x3C", 0, 0x803B}, /* East Asian ideograph */ {"\x40", 0, 0x6052}, /* East Asian ideograph */ {"\x60", 0, 0x6075}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page452 = { marc8_31page452_flat, 0 }; /* PAGE 451 */ struct yaz_iconv_trie_flat marc8_31page451_flat[] = { {"\x29", 0, 0x53AE}, /* East Asian ideograph */ {"\x2B", 0, 0x5EBF}, /* East Asian ideograph */ {"\x2D", 0, 0x5396}, /* East Asian ideograph */ {"\x2F", 0, 0x539B}, /* East Asian ideograph */ {"\x34", 0, 0x5EFE}, /* East Asian ideograph */ {"\x48", 0, 0x5F4A}, /* East Asian ideograph */ {"\x4E", 0, 0x7BF2}, /* East Asian ideograph */ {"\x50", 0, 0x5F5C}, /* East Asian ideograph */ {"\x5E", 0, 0x9AF4}, /* East Asian ideograph */ {"\x67", 0, 0x9015}, /* East Asian ideograph */ {"\x6C", 0, 0x5F93}, /* East Asian ideograph */ {"\x75", 0, 0x60EA}, /* East Asian ideograph */ {"\x76", 0, 0x5FB4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page451 = { marc8_31page451_flat, 0 }; /* PAGE 450 */ struct yaz_iconv_trie_flat marc8_31page450_flat[] = { {"\x21", 0, 0x57FC}, /* East Asian ideograph */ {"\x22", 0, 0x5D10}, /* East Asian ideograph */ {"\x26", 0, 0x5D18}, /* East Asian ideograph */ {"\x36", 0, 0x5DE3}, /* East Asian ideograph */ {"\x38", 0, 0x9245}, /* East Asian ideograph */ {"\x49", 0, 0x83F7}, /* East Asian ideograph */ {"\x5F", 0, 0x6A66}, /* East Asian ideograph */ {"\x61", 0, 0x5E47}, /* East Asian ideograph */ {"\x65", 0, 0x79CA}, /* East Asian ideograph */ {"\x6A", 0, 0x51FC}, /* East Asian ideograph */ {"\x6D", 0, 0x8298}, /* East Asian ideograph (duplicate simplified) */ {"\x6E", 0, 0x7240}, /* East Asian ideograph */ {"\x70", 0, 0x576B}, /* East Asian ideograph */ {"\x7C", 0, 0x83F4}, /* East Asian ideograph */ {"\x7D", 0, 0x53A2}, /* East Asian ideograph */ {"\x7E", 0, 0x53A0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page450 = { marc8_31page450_flat, 0 }; /* PAGE 449 */ struct yaz_iconv_trie_flat marc8_31page449_flat[] = { {"\x27", 0, 0x51A8}, /* East Asian ideograph */ {"\x2A", 0, 0x5EBD}, /* East Asian ideograph */ {"\x33", 0, 0x8A67}, /* East Asian ideograph */ {"\x3F", 0, 0x5C02}, /* East Asian ideograph */ {"\x40", 0, 0x5C06}, /* East Asian ideograph (variant of EACC 273B40) */ {"\x52", 0, 0x6EBA}, /* East Asian ideograph */ {"\x54", 0, 0x5C4A}, /* East Asian ideograph */ {"\x6E", 0, 0x5D17}, /* East Asian ideograph */ {"\x77", 0, 0x5CE9}, /* East Asian ideograph */ {"\x78", 0, 0x5CEF}, /* East Asian ideograph */ {"\x79", 0, 0x5D8B}, /* East Asian ideograph */ {"\x7B", 0, 0x5D08}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page449 = { marc8_31page449_flat, 0 }; /* PAGE 448 */ struct yaz_iconv_trie_flat marc8_31page448_flat[] = { {"\x26", 0, 0x5A3F}, /* East Asian ideograph */ {"\x2F", 0, 0x58FB}, /* East Asian ideograph */ {"\x41", 0, 0x5AFA}, /* East Asian ideograph */ {"\x47", 0, 0x5ACB}, /* East Asian ideograph */ {"\x60", 0, 0x6588}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page448 = { marc8_31page448_flat, 0 }; /* PAGE 447 */ struct yaz_iconv_trie_flat marc8_31page447_flat[] = { {"\x21", 0, 0x591F}, /* East Asian ideograph */ {"\x29", 0, 0x6B80}, /* East Asian ideograph */ {"\x2F", 0, 0x7287}, /* East Asian ideograph */ {"\x31", 0, 0x67F0}, /* East Asian ideograph */ {"\x32", 0, 0x7AD2}, /* East Asian ideograph */ {"\x44", 0, 0x511E}, /* East Asian ideograph */ {"\x4D", 0, 0x59AC}, /* East Asian ideograph */ {"\x54", 0, 0x7385}, /* East Asian ideograph */ {"\x56", 0, 0x59D9}, /* East Asian ideograph */ {"\x6E", 0, 0x4F84}, /* East Asian ideograph */ {"\x70", 0, 0x5A63}, /* East Asian ideograph */ {"\x74", 0, 0x5B43}, /* East Asian ideograph */ {"\x7B", 0, 0x5A31}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page447 = { marc8_31page447_flat, 0 }; /* PAGE 446 */ struct yaz_iconv_trie_flat marc8_31page446_flat[] = { {"\x21", 0, 0x962F}, /* East Asian ideograph */ {"\x30", 0, 0x573B}, /* East Asian ideograph */ {"\x3F", 0, 0x575A}, /* East Asian ideograph */ {"\x4A", 0, 0x5872}, /* East Asian ideograph */ {"\x52", 0, 0x51A2}, /* East Asian ideograph */ {"\x54", 0, 0x5896}, /* East Asian ideograph */ {"\x6E", 0, 0x58CA}, /* East Asian ideograph */ {"\x76", 0, 0x58F7}, /* East Asian ideograph */ {"\x77", 0, 0x5900}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page446 = { marc8_31page446_flat, 0 }; /* PAGE 445 */ struct yaz_iconv_trie_flat marc8_31page445_flat[] = { {"\x30", 0, 0x751E}, /* East Asian ideograph */ {"\x48", 0, 0x8B5F}, /* East Asian ideograph */ {"\x49", 0, 0x5650}, /* East Asian ideograph */ {"\x58", 0, 0x54BD}, /* East Asian ideograph */ {"\x65", 0, 0x8086}, /* East Asian ideograph */ {"\x68", 0, 0x56EC}, /* East Asian ideograph */ {"\x6F", 0, 0x5700}, /* East Asian ideograph */ {"\x7C", 0, 0x962C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page445 = { marc8_31page445_flat, 0 }; /* PAGE 444 */ struct yaz_iconv_trie_flat marc8_31page444_flat[] = { {"\x22", 0, 0x8AEE}, /* East Asian ideograph */ {"\x2A", 0, 0x95A7}, /* East Asian ideograph */ {"\x32", 0, 0x8A7B}, /* East Asian ideograph */ {"\x42", 0, 0x6B38}, /* East Asian ideograph */ {"\x44", 0, 0x5557}, /* East Asian ideograph */ {"\x61", 0, 0x6199}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page444 = { marc8_31page444_flat, 0 }; /* PAGE 443 */ struct yaz_iconv_trie_flat marc8_31page443_flat[] = { {"\x39", 0, 0x52FE}, /* East Asian ideograph */ {"\x3C", 0, 0x6B62}, /* East Asian ideograph */ {"\x43", 0, 0x4EDD}, /* East Asian ideograph */ {"\x47", 0, 0x55AB}, /* East Asian ideograph */ {"\x56", 0, 0x7343}, /* East Asian ideograph */ {"\x5C", 0, 0x5434}, /* East Asian ideograph */ {"\x6A", 0, 0x8A36}, /* East Asian ideograph */ {"\x71", 0, 0x546A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page443 = { marc8_31page443_flat, 0 }; /* PAGE 442 */ struct yaz_iconv_trie_flat marc8_31page442_flat[] = { {"\x21", 0, 0x5294}, /* East Asian ideograph */ {"\x28", 0, 0x5226}, /* East Asian ideograph */ {"\x2E", 0, 0x8274}, /* East Asian ideograph */ {"\x36", 0, 0x52F3}, /* East Asian ideograph */ {"\x3C", 0, 0x52A2}, /* East Asian ideograph */ {"\x3D", 0, 0x52E7}, /* East Asian ideograph */ {"\x53", 0, 0x758B}, /* East Asian ideograph */ {"\x57", 0, 0x62FE}, /* East Asian ideograph */ {"\x58", 0, 0x4EDF}, /* East Asian ideograph */ {"\x5B", 0, 0x6607}, /* East Asian ideograph */ {"\x5D", 0, 0x5349}, /* East Asian ideograph */ {"\x64", 0, 0x613D}, /* East Asian ideograph */ {"\x6A", 0, 0x5918}, /* East Asian ideograph */ {"\x6E", 0, 0x5373}, /* East Asian ideograph */ {"\x73", 0, 0x5374}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page442 = { marc8_31page442_flat, 0 }; /* PAGE 441 */ struct yaz_iconv_trie_flat marc8_31page441_flat[] = { {"\x24", 0, 0x634C}, /* East Asian ideograph */ {"\x2A", 0, 0x4E0C}, /* East Asian ideograph */ {"\x32", 0, 0x5190}, /* East Asian ideograph */ {"\x4F", 0, 0x5202}, /* East Asian ideograph */ {"\x56", 0, 0x5211}, /* East Asian ideograph */ {"\x5F", 0, 0x52B5}, /* East Asian ideograph */ {"\x66", 0, 0x5234}, /* East Asian ideograph */ {"\x6B", 0, 0x5C05}, /* East Asian ideograph */ {"\x72", 0, 0x5265}, /* East Asian ideograph */ {"\x77", 0, 0x8CF8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page441 = { marc8_31page441_flat, 0 }; /* PAGE 440 */ struct yaz_iconv_trie_flat marc8_31page440_flat[] = { {"\x24", 0, 0x7B87}, /* East Asian ideograph */ {"\x51", 0, 0x510C}, /* East Asian ideograph */ {"\x53", 0, 0x50E3}, /* East Asian ideograph */ {"\x5F", 0, 0x50BB}, /* East Asian ideograph (variant of EACC 4B325F) */ {"\x61", 0, 0x5039}, /* East Asian ideograph */ {"\x63", 0, 0x4FAD}, /* East Asian ideograph */ {"\x72", 0, 0x706E}, /* East Asian ideograph */ {"\x79", 0, 0x514E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page440 = { marc8_31page440_flat, 0 }; /* PAGE 439 */ struct yaz_iconv_trie_flat marc8_31page439_flat[] = { {"\x32", 0, 0x4ECF}, /* East Asian ideograph */ {"\x3A", 0, 0x62BB}, /* East Asian ideograph */ {"\x40", 0, 0x4F32}, /* East Asian ideograph */ {"\x47", 0, 0x5002}, /* East Asian ideograph */ {"\x4C", 0, 0x5008}, /* East Asian ideograph */ {"\x5F", 0, 0x4FA3}, /* East Asian ideograph */ {"\x64", 0, 0x7AE2}, /* East Asian ideograph */ {"\x65", 0, 0x349E}, /* East Asian ideograph (Unicode CJK Extension A) */ {"\x77", 0, 0x5E78}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page439 = { marc8_31page439_flat, 0 }; /* PAGE 438 */ struct yaz_iconv_trie_flat marc8_31page438_flat[] = { {"\x21", 0, 0x5F0C}, /* East Asian ideograph */ {"\x2D", 0, 0x4E17}, /* East Asian ideograph */ {"\x32", 0, 0x7ADD}, /* East Asian ideograph */ {"\x45", 0, 0x4E57}, /* East Asian ideograph */ {"\x51", 0, 0x5F0D}, /* East Asian ideograph */ {"\x53", 0, 0x4E3C}, /* East Asian ideograph */ {"\x58", 0, 0x4E9C}, /* East Asian ideograph */ {"\x5B", 0, 0x4EBE}, /* East Asian ideograph */ {"\x61", 0, 0x4EB0}, /* East Asian ideograph */ {"\x6C", 0, 0x8B8E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page438 = { marc8_31page438_flat, 0 }; /* PAGE 437 */ struct yaz_iconv_trie_dir marc8_31page437_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {439, 0, 0}, {440, 0, 0}, {441, 0, 0}, {442, 0, 0}, {443, 0, 0}, {444, 0, 0}, {445, 0, 0}, {446, 0, 0}, {447, 0, 0}, {448, 0, 0}, {449, 0, 0}, {450, 0, 0}, {451, 0, 0}, {452, 0, 0}, {453, 0, 0}, {454, 0, 0}, {455, 0, 0}, {456, 0, 0}, {457, 0, 0}, {458, 0, 0}, {459, 0, 0}, {460, 0, 0}, {461, 0, 0}, {462, 0, 0}, {463, 0, 0}, {464, 0, 0}, {465, 0, 0}, {466, 0, 0}, {467, 0, 0}, {468, 0, 0}, {469, 0, 0}, {470, 0, 0}, {471, 0, 0}, {472, 0, 0}, {473, 0, 0}, {474, 0, 0}, {475, 0, 0}, {476, 0, 0}, {477, 0, 0}, {478, 0, 0}, {479, 0, 0}, {480, 0, 0}, {481, 0, 0}, {482, 0, 0}, {483, 0, 0}, {484, 0, 0}, {485, 0, 0}, {486, 0, 0}, {487, 0, 0}, {488, 0, 0}, {489, 0, 0}, {490, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {491, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {492, 0, 0}, {0, 0, 0}, {493, 0, 0}, {0, 0, 0}, {494, 0, 0}, {0, 0, 0}, {495, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {496, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {497, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page437 = { 0, marc8_31page437_dir }; /* PAGE 436 */ struct yaz_iconv_trie_flat marc8_31page436_flat[] = { {"\x28", 0, 0x9F86}, /* East Asian ideograph */ {"\x2B", 0, 0x9F85}, /* East Asian ideograph */ {"\x62", 0, 0x9F9B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page436 = { marc8_31page436_flat, 0 }; /* PAGE 435 */ struct yaz_iconv_trie_flat marc8_31page435_flat[] = { {"\x2B", 0, 0x9F0D}, /* East Asian ideograph */ {"\x7B", 0, 0x9F51}, /* East Asian ideograph */ {"\x7C", 0, 0x9F80}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page435 = { marc8_31page435_flat, 0 }; /* PAGE 434 */ struct yaz_iconv_trie_flat marc8_31page434_flat[] = { {"\x6A", 0, 0x9EEA}, /* East Asian ideograph */ {"\x7A", 0, 0x9EFE}, /* East Asian ideograph */ {"\x7C", 0, 0x9F0B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page434 = { marc8_31page434_flat, 0 }; /* PAGE 433 */ struct yaz_iconv_trie_flat marc8_31page433_flat[] = { {"\x29", 0, 0x9E71}, /* East Asian ideograph */ {"\x36", 0, 0x9E2C}, /* East Asian ideograph */ {"\x3A", 0, 0x9E73}, /* East Asian ideograph */ {"\x3B", 0, 0x9E42}, /* East Asian ideograph */ {"\x3C", 0, 0x5364}, /* East Asian ideograph */ {"\x42", 0, 0x9E7E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page433 = { marc8_31page433_flat, 0 }; /* PAGE 432 */ struct yaz_iconv_trie_flat marc8_31page432_flat[] = { {"\x28", 0, 0x9E58}, /* East Asian ideograph */ {"\x3E", 0, 0x9E37}, /* East Asian ideograph */ {"\x47", 0, 0x9E68}, /* East Asian ideograph */ {"\x49", 0, 0x9E47}, /* East Asian ideograph */ {"\x57", 0, 0x9E6B}, /* East Asian ideograph */ {"\x5B", 0, 0x9E6C}, /* East Asian ideograph */ {"\x65", 0, 0x9E69}, /* East Asian ideograph */ {"\x6C", 0, 0x9E6A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page432 = { marc8_31page432_flat, 0 }; /* PAGE 431 */ struct yaz_iconv_trie_flat marc8_31page431_flat[] = { {"\x2A", 0, 0x9E46}, /* East Asian ideograph */ {"\x35", 0, 0x9E2B}, /* East Asian ideograph */ {"\x52", 0, 0x9E4E}, /* East Asian ideograph */ {"\x59", 0, 0x9E5C}, /* East Asian ideograph */ {"\x5C", 0, 0x9E5B}, /* East Asian ideograph */ {"\x60", 0, 0x9E55}, /* East Asian ideograph */ {"\x6B", 0, 0x9E57}, /* East Asian ideograph */ {"\x6C", 0, 0x9E4B}, /* East Asian ideograph */ {"\x77", 0, 0x9E63}, /* East Asian ideograph */ {"\x79", 0, 0x9E5A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page431 = { marc8_31page431_flat, 0 }; /* PAGE 430 */ struct yaz_iconv_trie_flat marc8_31page430_flat[] = { {"\x28", 0, 0x9E28}, /* East Asian ideograph */ {"\x44", 0, 0x9E32}, /* East Asian ideograph */ {"\x48", 0, 0x9E31}, /* East Asian ideograph */ {"\x59", 0, 0x9E38}, /* East Asian ideograph */ {"\x65", 0, 0x9E39}, /* East Asian ideograph */ {"\x68", 0, 0x9E3A}, /* East Asian ideograph */ {"\x70", 0, 0x9E48}, /* East Asian ideograph */ {"\x75", 0, 0x9E41}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page430 = { marc8_31page430_flat, 0 }; /* PAGE 429 */ struct yaz_iconv_trie_flat marc8_31page429_flat[] = { {"\x21", 0, 0x9CD9}, /* East Asian ideograph */ {"\x25", 0, 0x9CCC}, /* East Asian ideograph */ {"\x28", 0, 0x9CD5}, /* East Asian ideograph */ {"\x29", 0, 0x9CA3}, /* East Asian ideograph */ {"\x2A", 0, 0x9CD3}, /* East Asian ideograph */ {"\x32", 0, 0x9CD8}, /* East Asian ideograph */ {"\x38", 0, 0x9CDF}, /* East Asian ideograph */ {"\x3A", 0, 0x9C85}, /* East Asian ideograph */ {"\x3B", 0, 0x9C9F}, /* East Asian ideograph */ {"\x40", 0, 0x9CBC}, /* East Asian ideograph */ {"\x4F", 0, 0x9CE2}, /* East Asian ideograph */ {"\x55", 0, 0x9C8E}, /* East Asian ideograph */ {"\x58", 0, 0x9C9A}, /* East Asian ideograph */ {"\x6B", 0, 0x9CA1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page429 = { marc8_31page429_flat, 0 }; /* PAGE 428 */ struct yaz_iconv_trie_flat marc8_31page428_flat[] = { {"\x22", 0, 0x9CAE}, /* East Asian ideograph */ {"\x25", 0, 0x9CBA}, /* East Asian ideograph */ {"\x27", 0, 0x9CB2}, /* East Asian ideograph */ {"\x28", 0, 0x9CB4}, /* East Asian ideograph */ {"\x2C", 0, 0x9CB1}, /* East Asian ideograph */ {"\x2D", 0, 0x9CB7}, /* East Asian ideograph */ {"\x2F", 0, 0x9CB5}, /* East Asian ideograph */ {"\x31", 0, 0x9CB6}, /* East Asian ideograph */ {"\x34", 0, 0x9CBB}, /* East Asian ideograph */ {"\x3E", 0, 0x9CCA}, /* East Asian ideograph */ {"\x4B", 0, 0x9CBD}, /* East Asian ideograph */ {"\x54", 0, 0x9CC4}, /* East Asian ideograph */ {"\x59", 0, 0x9CC6}, /* East Asian ideograph */ {"\x5C", 0, 0x9CC7}, /* East Asian ideograph */ {"\x6A", 0, 0x9CCB}, /* East Asian ideograph */ {"\x6E", 0, 0x9CA5}, /* East Asian ideograph */ {"\x71", 0, 0x9CCE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page428 = { marc8_31page428_flat, 0 }; /* PAGE 427 */ struct yaz_iconv_trie_flat marc8_31page427_flat[] = { {"\x21", 0, 0x9C86}, /* East Asian ideograph */ {"\x29", 0, 0x9C87}, /* East Asian ideograph */ {"\x2B", 0, 0x9C90}, /* East Asian ideograph */ {"\x31", 0, 0x9C8B}, /* East Asian ideograph */ {"\x39", 0, 0x9C9E}, /* East Asian ideograph */ {"\x3C", 0, 0x9C91}, /* East Asian ideograph */ {"\x3D", 0, 0x9C92}, /* East Asian ideograph */ {"\x42", 0, 0x9C95}, /* East Asian ideograph */ {"\x56", 0, 0x9CA9}, /* East Asian ideograph */ {"\x5F", 0, 0x9CA0}, /* East Asian ideograph */ {"\x6E", 0, 0x9CA7}, /* East Asian ideograph */ {"\x7A", 0, 0x9CAD}, /* East Asian ideograph */ {"\x7C", 0, 0x9CB0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page427 = { marc8_31page427_flat, 0 }; /* PAGE 426 */ struct yaz_iconv_trie_flat marc8_31page426_flat[] = { {"\x3C", 0, 0x9B49}, /* East Asian ideograph */ {"\x5D", 0, 0x9C82}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page426 = { marc8_31page426_flat, 0 }; /* PAGE 425 */ struct yaz_iconv_trie_flat marc8_31page425_flat[] = { {"\x6C", 0, 0x960B}, /* East Asian ideograph */ {"\x74", 0, 0x9604}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page425 = { marc8_31page425_flat, 0 }; /* PAGE 424 */ struct yaz_iconv_trie_flat marc8_31page424_flat[] = { {"\x21", 0, 0x9AA3}, /* East Asian ideograph */ {"\x22", 0, 0x9A81}, /* East Asian ideograph */ {"\x27", 0, 0x9A85}, /* East Asian ideograph */ {"\x33", 0, 0x9AA7}, /* East Asian ideograph */ {"\x6D", 0, 0x9ACB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page424 = { marc8_31page424_flat, 0 }; /* PAGE 423 */ struct yaz_iconv_trie_flat marc8_31page423_flat[] = { {"\x3D", 0, 0x9A90}, /* East Asian ideograph */ {"\x40", 0, 0x9A92}, /* East Asian ideograph */ {"\x47", 0, 0x9A93}, /* East Asian ideograph */ {"\x5A", 0, 0x9A9F}, /* East Asian ideograph */ {"\x60", 0, 0x9A98}, /* East Asian ideograph */ {"\x69", 0, 0x9A7A}, /* East Asian ideograph */ {"\x6A", 0, 0x9A9D}, /* East Asian ideograph */ {"\x70", 0, 0x9A9C}, /* East Asian ideograph */ {"\x79", 0, 0x9A96}, /* East Asian ideograph */ {"\x7A", 0, 0x9AA2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page423 = { marc8_31page423_flat, 0 }; /* PAGE 422 */ struct yaz_iconv_trie_flat marc8_31page422_flat[] = { {"\x22", 0, 0x98E8}, /* East Asian ideograph */ {"\x63", 0, 0x9A75}, /* East Asian ideograph */ {"\x69", 0, 0x9A80}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page422 = { marc8_31page422_flat, 0 }; /* PAGE 421 */ struct yaz_iconv_trie_flat marc8_31page421_flat[] = { {"\x32", 0, 0x997D}, /* East Asian ideograph */ {"\x53", 0, 0x9967}, /* East Asian ideograph */ {"\x66", 0, 0x9969}, /* East Asian ideograph */ {"\x6A", 0, 0x9990}, /* East Asian ideograph */ {"\x6D", 0, 0x9991}, /* East Asian ideograph */ {"\x70", 0, 0x998D}, /* East Asian ideograph */ {"\x72", 0, 0x9994}, /* East Asian ideograph */ {"\x75", 0, 0x9993}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page421 = { marc8_31page421_flat, 0 }; /* PAGE 420 */ struct yaz_iconv_trie_flat marc8_31page420_flat[] = { {"\x21", 0, 0x98A2}, /* East Asian ideograph */ {"\x29", 0, 0x98A5}, /* East Asian ideograph */ {"\x30", 0, 0x989E}, /* East Asian ideograph */ {"\x31", 0, 0x98A7}, /* East Asian ideograph */ {"\x53", 0, 0x98D9}, /* East Asian ideograph */ {"\x6C", 0, 0x996B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page420 = { marc8_31page420_flat, 0 }; /* PAGE 419 */ struct yaz_iconv_trie_flat marc8_31page419_flat[] = { {"\x23", 0, 0x9880}, /* East Asian ideograph */ {"\x2C", 0, 0x988F}, /* East Asian ideograph */ {"\x6B", 0, 0x98A1}, /* East Asian ideograph */ {"\x77", 0, 0x989F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page419 = { marc8_31page419_flat, 0 }; /* PAGE 418 */ struct yaz_iconv_trie_flat marc8_31page418_flat[] = { {"\x43", 0, 0x97AF}, /* East Asian ideograph */ {"\x54", 0, 0x97EA}, /* East Asian ideograph */ {"\x5C", 0, 0x97EB}, /* East Asian ideograph */ {"\x79", 0, 0x9878}, /* East Asian ideograph */ {"\x7B", 0, 0x9883}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page418 = { marc8_31page418_flat, 0 }; /* PAGE 417 */ struct yaz_iconv_trie_flat marc8_31page417_flat[] = { {"\x76", 0, 0x9753}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page417 = { marc8_31page417_flat, 0 }; /* PAGE 416 */ struct yaz_iconv_trie_flat marc8_31page416_flat[] = { {"\x44", 0, 0x9655}, /* East Asian ideograph */ {"\x46", 0, 0x9649}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page416 = { marc8_31page416_flat, 0 }; /* PAGE 415 */ struct yaz_iconv_trie_flat marc8_31page415_flat[] = { {"\x36", 0, 0x95F3}, /* East Asian ideograph */ {"\x42", 0, 0x9606}, /* East Asian ideograph */ {"\x44", 0, 0x9603}, /* East Asian ideograph */ {"\x48", 0, 0x960F}, /* East Asian ideograph */ {"\x49", 0, 0x9608}, /* East Asian ideograph */ {"\x4D", 0, 0x9609}, /* East Asian ideograph */ {"\x4F", 0, 0x960A}, /* East Asian ideograph */ {"\x50", 0, 0x960C}, /* East Asian ideograph */ {"\x52", 0, 0x960D}, /* East Asian ideograph */ {"\x5A", 0, 0x9612}, /* East Asian ideograph */ {"\x60", 0, 0x9619}, /* East Asian ideograph */ {"\x69", 0, 0x961A}, /* East Asian ideograph */ {"\x6F", 0, 0x95FC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page415 = { marc8_31page415_flat, 0 }; /* PAGE 414 */ struct yaz_iconv_trie_flat marc8_31page414_flat[] = { {"\x3E", 0, 0x9554}, /* East Asian ideograph */ {"\x3F", 0, 0x9572}, /* East Asian ideograph */ {"\x4A", 0, 0x956C}, /* East Asian ideograph */ {"\x5C", 0, 0x9565}, /* East Asian ideograph */ {"\x69", 0, 0x9567}, /* East Asian ideograph */ {"\x6F", 0, 0x9569}, /* East Asian ideograph */ {"\x71", 0, 0x954A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page414 = { marc8_31page414_flat, 0 }; /* PAGE 413 */ struct yaz_iconv_trie_flat marc8_31page413_flat[] = { {"\x2F", 0, 0x94E9}, /* East Asian ideograph */ {"\x32", 0, 0x94F4}, /* East Asian ideograph */ {"\x34", 0, 0x9566}, /* East Asian ideograph */ {"\x3C", 0, 0x9568}, /* East Asian ideograph */ {"\x3E", 0, 0x94F9}, /* East Asian ideograph */ {"\x4D", 0, 0x956B}, /* East Asian ideograph */ {"\x50", 0, 0x950E}, /* East Asian ideograph */ {"\x51", 0, 0x950F}, /* East Asian ideograph */ {"\x58", 0, 0x9561}, /* East Asian ideograph */ {"\x5E", 0, 0x9562}, /* East Asian ideograph */ {"\x60", 0, 0x9563}, /* East Asian ideograph */ {"\x67", 0, 0x94E7}, /* East Asian ideograph */ {"\x69", 0, 0x9564}, /* East Asian ideograph */ {"\x74", 0, 0x9571}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page413 = { marc8_31page413_flat, 0 }; /* PAGE 412 */ struct yaz_iconv_trie_flat marc8_31page412_flat[] = { {"\x21", 0, 0x9553}, /* East Asian ideograph */ {"\x28", 0, 0x9552}, /* East Asian ideograph */ {"\x29", 0, 0x84E5}, /* East Asian ideograph */ {"\x2D", 0, 0x9549}, /* East Asian ideograph */ {"\x42", 0, 0x94E0}, /* East Asian ideograph */ {"\x47", 0, 0x954F}, /* East Asian ideograph */ {"\x4A", 0, 0x953C}, /* East Asian ideograph */ {"\x56", 0, 0x955B}, /* East Asian ideograph */ {"\x5A", 0, 0x955F}, /* East Asian ideograph */ {"\x62", 0, 0x956A}, /* East Asian ideograph */ {"\x66", 0, 0x933E}, /* East Asian ideograph */ {"\x7C", 0, 0x9546}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page412 = { marc8_31page412_flat, 0 }; /* PAGE 411 */ struct yaz_iconv_trie_flat marc8_31page411_flat[] = { {"\x31", 0, 0x9528}, /* East Asian ideograph */ {"\x32", 0, 0x9531}, /* East Asian ideograph */ {"\x4D", 0, 0x9534}, /* East Asian ideograph */ {"\x4E", 0, 0x9545}, /* East Asian ideograph */ {"\x51", 0, 0x9517}, /* East Asian ideograph */ {"\x5E", 0, 0x94E1}, /* East Asian ideograph */ {"\x64", 0, 0x9536}, /* East Asian ideograph */ {"\x67", 0, 0x9537}, /* East Asian ideograph */ {"\x68", 0, 0x9518}, /* East Asian ideograph */ {"\x6F", 0, 0x9538}, /* East Asian ideograph */ {"\x7A", 0, 0x9550}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page411 = { marc8_31page411_flat, 0 }; /* PAGE 410 */ struct yaz_iconv_trie_flat marc8_31page410_flat[] = { {"\x27", 0, 0x94D7}, /* East Asian ideograph */ {"\x2B", 0, 0x9503}, /* East Asian ideograph */ {"\x2D", 0, 0x94A1}, /* East Asian ideograph */ {"\x2E", 0, 0x9502}, /* East Asian ideograph */ {"\x35", 0, 0x950A}, /* East Asian ideograph */ {"\x3E", 0, 0x94E4}, /* East Asian ideograph */ {"\x40", 0, 0x9506}, /* East Asian ideograph */ {"\x41", 0, 0x9507}, /* East Asian ideograph */ {"\x4D", 0, 0x952B}, /* East Asian ideograph */ {"\x57", 0, 0x9529}, /* East Asian ideograph */ {"\x58", 0, 0x952C}, /* East Asian ideograph */ {"\x5B", 0, 0x9516}, /* East Asian ideograph */ {"\x66", 0, 0x9515}, /* East Asian ideograph */ {"\x69", 0, 0x94FC}, /* East Asian ideograph */ {"\x6D", 0, 0x951B}, /* East Asian ideograph */ {"\x71", 0, 0x951D}, /* East Asian ideograph */ {"\x72", 0, 0x951E}, /* East Asian ideograph */ {"\x74", 0, 0x951F}, /* East Asian ideograph */ {"\x75", 0, 0x9494}, /* East Asian ideograph */ {"\x78", 0, 0x9522}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page410 = { marc8_31page410_flat, 0 }; /* PAGE 409 */ struct yaz_iconv_trie_flat marc8_31page409_flat[] = { {"\x2B", 0, 0x94C6}, /* East Asian ideograph */ {"\x2F", 0, 0x94F3}, /* East Asian ideograph */ {"\x31", 0, 0x94F1}, /* East Asian ideograph */ {"\x35", 0, 0x94F5}, /* East Asian ideograph */ {"\x40", 0, 0x94D6}, /* East Asian ideograph */ {"\x43", 0, 0x94D2}, /* East Asian ideograph */ {"\x46", 0, 0x94D1}, /* East Asian ideograph */ {"\x49", 0, 0x94D5}, /* East Asian ideograph */ {"\x4F", 0, 0x94DE}, /* East Asian ideograph */ {"\x50", 0, 0x94DF}, /* East Asian ideograph */ {"\x55", 0, 0x94EB}, /* East Asian ideograph */ {"\x58", 0, 0x94EF}, /* East Asian ideograph */ {"\x59", 0, 0x94E5}, /* East Asian ideograph */ {"\x5B", 0, 0x94E3}, /* East Asian ideograph */ {"\x62", 0, 0x94EA}, /* East Asian ideograph */ {"\x64", 0, 0x94F7}, /* East Asian ideograph */ {"\x6A", 0, 0x9512}, /* East Asian ideograph */ {"\x6C", 0, 0x950D}, /* East Asian ideograph */ {"\x71", 0, 0x94FD}, /* East Asian ideograph */ {"\x72", 0, 0x9513}, /* East Asian ideograph */ {"\x75", 0, 0x9514}, /* East Asian ideograph */ {"\x7D", 0, 0x94D8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page409 = { marc8_31page409_flat, 0 }; /* PAGE 408 */ struct yaz_iconv_trie_flat marc8_31page408_flat[] = { {"\x21", 0, 0x9495}, /* East Asian ideograph */ {"\x22", 0, 0x9490}, /* East Asian ideograph */ {"\x23", 0, 0x94AD}, /* East Asian ideograph */ {"\x24", 0, 0x94AA}, /* East Asian ideograph */ {"\x25", 0, 0x94AB}, /* East Asian ideograph */ {"\x28", 0, 0x94AC}, /* East Asian ideograph */ {"\x31", 0, 0x94AF}, /* East Asian ideograph */ {"\x37", 0, 0x949B}, /* East Asian ideograph */ {"\x4B", 0, 0x94A3}, /* East Asian ideograph */ {"\x51", 0, 0x94C8}, /* East Asian ideograph */ {"\x52", 0, 0x94C9}, /* East Asian ideograph */ {"\x54", 0, 0x94CB}, /* East Asian ideograph */ {"\x55", 0, 0x94CA}, /* East Asian ideograph */ {"\x58", 0, 0x94B0}, /* East Asian ideograph */ {"\x5C", 0, 0x94CC}, /* East Asian ideograph */ {"\x5F", 0, 0x94B6}, /* East Asian ideograph */ {"\x60", 0, 0x94B7}, /* East Asian ideograph */ {"\x61", 0, 0x94B2}, /* East Asian ideograph */ {"\x64", 0, 0x94BA}, /* East Asian ideograph */ {"\x6D", 0, 0x94CD}, /* East Asian ideograph */ {"\x6F", 0, 0x94BD}, /* East Asian ideograph */ {"\x74", 0, 0x94BF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page408 = { marc8_31page408_flat, 0 }; /* PAGE 407 */ struct yaz_iconv_trie_flat marc8_31page407_flat[] = { {"\x5C", 0, 0x917E}, /* East Asian ideograph */ {"\x5D", 0, 0x917D}, /* East Asian ideograph */ {"\x61", 0, 0x9487}, /* East Asian ideograph */ {"\x62", 0, 0x9486}, /* East Asian ideograph */ {"\x63", 0, 0x948C}, /* East Asian ideograph */ {"\x64", 0, 0x948B}, /* East Asian ideograph */ {"\x6A", 0, 0x948D}, /* East Asian ideograph */ {"\x6B", 0, 0x948E}, /* East Asian ideograph */ {"\x79", 0, 0x9492}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page407 = { marc8_31page407_flat, 0 }; /* PAGE 406 */ struct yaz_iconv_trie_flat marc8_31page406_flat[] = { {"\x21", 0, 0x90F8}, /* East Asian ideograph */ {"\x2B", 0, 0x90BA}, /* East Asian ideograph */ {"\x2C", 0, 0x90D0}, /* East Asian ideograph */ {"\x31", 0, 0x909D}, /* East Asian ideograph */ {"\x40", 0, 0x90E6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page406 = { marc8_31page406_flat, 0 }; /* PAGE 405 */ struct yaz_iconv_trie_flat marc8_31page405_flat[] = { {"\x23", 0, 0x90CF}, /* East Asian ideograph */ {"\x4C", 0, 0x90D3}, /* East Asian ideograph */ {"\x5A", 0, 0x90E7}, /* East Asian ideograph */ {"\x5C", 0, 0x90AC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page405 = { marc8_31page405_flat, 0 }; /* PAGE 404 */ struct yaz_iconv_trie_flat marc8_31page404_flat[] = { {"\x4E", 0, 0x8FF8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page404 = { marc8_31page404_flat, 0 }; /* PAGE 403 */ struct yaz_iconv_trie_flat marc8_31page403_flat[] = { {"\x30", 0, 0x8F98}, /* East Asian ideograph */ {"\x57", 0, 0x8F79}, /* East Asian ideograph */ {"\x5A", 0, 0x8F73}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page403 = { marc8_31page403_flat, 0 }; /* PAGE 402 */ struct yaz_iconv_trie_flat marc8_31page402_flat[] = { {"\x3E", 0, 0x8F71}, /* East Asian ideograph */ {"\x3F", 0, 0x8F7A}, /* East Asian ideograph */ {"\x42", 0, 0x8F75}, /* East Asian ideograph */ {"\x47", 0, 0x8F77}, /* East Asian ideograph */ {"\x4F", 0, 0x8F78}, /* East Asian ideograph */ {"\x59", 0, 0x8F82}, /* East Asian ideograph */ {"\x5B", 0, 0x8F81}, /* East Asian ideograph */ {"\x6B", 0, 0x8F8B}, /* East Asian ideograph */ {"\x6D", 0, 0x8F8A}, /* East Asian ideograph */ {"\x7A", 0, 0x8F8F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page402 = { marc8_31page402_flat, 0 }; /* PAGE 401 */ struct yaz_iconv_trie_flat marc8_31page401_flat[] = { {"\x2E", 0, 0x8DC4}, /* East Asian ideograph */ {"\x40", 0, 0x8DF8}, /* East Asian ideograph */ {"\x46", 0, 0x8E70}, /* East Asian ideograph */ {"\x57", 0, 0x8DFB}, /* East Asian ideograph */ {"\x5E", 0, 0x8DF9}, /* East Asian ideograph */ {"\x5F", 0, 0x8DDE}, /* East Asian ideograph */ {"\x60", 0, 0x8E2C}, /* East Asian ideograph */ {"\x6B", 0, 0x8E7F}, /* East Asian ideograph */ {"\x70", 0, 0x8E9C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page401 = { marc8_31page401_flat, 0 }; /* PAGE 400 */ struct yaz_iconv_trie_flat marc8_31page400_flat[] = { {"\x66", 0, 0x8DB1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page400 = { marc8_31page400_flat, 0 }; /* PAGE 399 */ struct yaz_iconv_trie_flat marc8_31page399_flat[] = { {"\x25", 0, 0x8D3D}, /* East Asian ideograph */ {"\x26", 0, 0x8D5C}, /* East Asian ideograph */ {"\x3A", 0, 0x8D46}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page399 = { marc8_31page399_flat, 0 }; /* PAGE 398 */ struct yaz_iconv_trie_flat marc8_31page398_flat[] = { {"\x4E", 0, 0x8D33}, /* East Asian ideograph */ {"\x51", 0, 0x8D36}, /* East Asian ideograph */ {"\x5F", 0, 0x8D47}, /* East Asian ideograph */ {"\x6A", 0, 0x8D53}, /* East Asian ideograph */ {"\x6B", 0, 0x8D55}, /* East Asian ideograph */ {"\x70", 0, 0x8D49}, /* East Asian ideograph */ {"\x7E", 0, 0x8D59}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page398 = { marc8_31page398_flat, 0 }; /* PAGE 397 */ struct yaz_iconv_trie_flat marc8_31page397_flat[] = { {"\x2D", 0, 0x8C30}, /* East Asian ideograph */ {"\x37", 0, 0x8C20}, /* East Asian ideograph */ {"\x39", 0, 0x8C33}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page397 = { marc8_31page397_flat, 0 }; /* PAGE 396 */ struct yaz_iconv_trie_flat marc8_31page396_flat[] = { {"\x30", 0, 0x8BB4}, /* East Asian ideograph */ {"\x38", 0, 0x8C29}, /* East Asian ideograph */ {"\x4D", 0, 0x8C2E}, /* East Asian ideograph */ {"\x59", 0, 0x8C2F}, /* East Asian ideograph */ {"\x68", 0, 0x8C35}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page396 = { marc8_31page396_flat, 0 }; /* PAGE 395 */ struct yaz_iconv_trie_flat marc8_31page395_flat[] = { {"\x25", 0, 0x8BF9}, /* East Asian ideograph */ {"\x2C", 0, 0x8BFC}, /* East Asian ideograph */ {"\x36", 0, 0x8BE4}, /* East Asian ideograph */ {"\x38", 0, 0x8BFD}, /* East Asian ideograph */ {"\x3B", 0, 0x8C00}, /* East Asian ideograph */ {"\x40", 0, 0x8C02}, /* East Asian ideograph */ {"\x44", 0, 0x8C19}, /* East Asian ideograph */ {"\x45", 0, 0x8BE8}, /* East Asian ideograph */ {"\x4E", 0, 0x8C0C}, /* East Asian ideograph */ {"\x57", 0, 0x8C14}, /* East Asian ideograph */ {"\x59", 0, 0x8C11}, /* East Asian ideograph */ {"\x5D", 0, 0x8C16}, /* East Asian ideograph */ {"\x62", 0, 0x8C1D}, /* East Asian ideograph */ {"\x73", 0, 0x8C21}, /* East Asian ideograph */ {"\x7A", 0, 0x8BCC}, /* East Asian ideograph */ {"\x7D", 0, 0x8C27}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page395 = { marc8_31page395_flat, 0 }; /* PAGE 394 */ struct yaz_iconv_trie_flat marc8_31page394_flat[] = { {"\x2A", 0, 0x8BB5}, /* East Asian ideograph */ {"\x3B", 0, 0x8BCE}, /* East Asian ideograph */ {"\x3C", 0, 0x8BD2}, /* East Asian ideograph */ {"\x4F", 0, 0x8BD6}, /* East Asian ideograph */ {"\x50", 0, 0x8BD3}, /* East Asian ideograph */ {"\x56", 0, 0x8BE9}, /* East Asian ideograph */ {"\x5D", 0, 0x8BD4}, /* East Asian ideograph */ {"\x5E", 0, 0x8BDC}, /* East Asian ideograph */ {"\x71", 0, 0x8BEE}, /* East Asian ideograph */ {"\x7E", 0, 0x8C07}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page394 = { marc8_31page394_flat, 0 }; /* PAGE 393 */ struct yaz_iconv_trie_flat marc8_31page393_flat[] = { {"\x2B", 0, 0x89D1}, /* East Asian ideograph */ {"\x32", 0, 0x89CC}, /* East Asian ideograph */ {"\x60", 0, 0x89EF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page393 = { marc8_31page393_flat, 0 }; /* PAGE 392 */ struct yaz_iconv_trie_flat marc8_31page392_flat[] = { {"\x2D", 0, 0x88E3}, /* East Asian ideograph */ {"\x32", 0, 0x7962}, /* East Asian ideograph */ {"\x66", 0, 0x89C7}, /* East Asian ideograph */ {"\x6F", 0, 0x89CB}, /* East Asian ideograph */ {"\x7D", 0, 0x89CF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page392 = { marc8_31page392_flat, 0 }; /* PAGE 391 */ struct yaz_iconv_trie_flat marc8_31page391_flat[] = { {"\x60", 0, 0x88E2}, /* East Asian ideograph */ {"\x72", 0, 0x88E5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page391 = { marc8_31page391_flat, 0 }; /* PAGE 390 */ struct yaz_iconv_trie_flat marc8_31page390_flat[] = { {"\x51", 0, 0x8511}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page390 = { marc8_31page390_flat, 0 }; /* PAGE 389 */ struct yaz_iconv_trie_flat marc8_31page389_flat[] = { {"\x4C", 0, 0x866E}, /* East Asian ideograph */ {"\x55", 0, 0x86CF}, /* East Asian ideograph */ {"\x5D", 0, 0x867F}, /* East Asian ideograph */ {"\x61", 0, 0x86F4}, /* East Asian ideograph */ {"\x64", 0, 0x877E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page389 = { marc8_31page389_flat, 0 }; /* PAGE 388 */ struct yaz_iconv_trie_flat marc8_31page388_flat[] = { {"\x55", 0, 0x86F3}, /* East Asian ideograph */ {"\x6E", 0, 0x86F0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page388 = { marc8_31page388_flat, 0 }; /* PAGE 387 */ struct yaz_iconv_trie_flat marc8_31page387_flat[] = { {"\x2F", 0, 0x86F1}, /* East Asian ideograph */ {"\x34", 0, 0x86AC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page387 = { marc8_31page387_flat, 0 }; /* PAGE 386 */ struct yaz_iconv_trie_flat marc8_31page386_flat[] = { {"\x2A", 0, 0x8539}, /* East Asian ideograph */ {"\x40", 0, 0x84E0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page386 = { marc8_31page386_flat, 0 }; /* PAGE 385 */ struct yaz_iconv_trie_flat marc8_31page385_flat[] = { {"\x52", 0, 0x830F}, /* East Asian ideograph */ {"\x65", 0, 0x82C8}, /* East Asian ideograph */ {"\x68", 0, 0x8572}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page385 = { marc8_31page385_flat, 0 }; /* PAGE 384 */ struct yaz_iconv_trie_flat marc8_31page384_flat[] = { {"\x33", 0, 0x84E3}, /* East Asian ideograph */ {"\x51", 0, 0x84DF}, /* East Asian ideograph */ {"\x57", 0, 0x835F}, /* East Asian ideograph */ {"\x58", 0, 0x83B6}, /* East Asian ideograph */ {"\x61", 0, 0x8360}, /* East Asian ideograph */ {"\x68", 0, 0x8369}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page384 = { marc8_31page384_flat, 0 }; /* PAGE 383 */ struct yaz_iconv_trie_flat marc8_31page383_flat[] = { {"\x24", 0, 0x848C}, /* East Asian ideograph */ {"\x2D", 0, 0x8311}, /* East Asian ideograph */ {"\x35", 0, 0x82C1}, /* East Asian ideograph */ {"\x46", 0, 0x8368}, /* East Asian ideograph */ {"\x4B", 0, 0x835B}, /* East Asian ideograph */ {"\x5A", 0, 0x8487}, /* East Asian ideograph */ {"\x64", 0, 0x8489}, /* East Asian ideograph */ {"\x67", 0, 0x836C}, /* East Asian ideograph */ {"\x71", 0, 0x835E}, /* East Asian ideograph */ {"\x74", 0, 0x83B8}, /* East Asian ideograph */ {"\x77", 0, 0x8297}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page383 = { marc8_31page383_flat, 0 }; /* PAGE 382 */ struct yaz_iconv_trie_flat marc8_31page382_flat[] = { {"\x33", 0, 0x8298}, /* East Asian ideograph (duplicate simplified) */ {"\x3A", 0, 0x83BC}, /* East Asian ideograph */ {"\x7D", 0, 0x835C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page382 = { marc8_31page382_flat, 0 }; /* PAGE 381 */ struct yaz_iconv_trie_flat marc8_31page381_flat[] = { {"\x3C", 0, 0x836D}, /* East Asian ideograph */ {"\x3D", 0, 0x836E}, /* East Asian ideograph */ {"\x75", 0, 0x83B3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page381 = { marc8_31page381_flat, 0 }; /* PAGE 380 */ struct yaz_iconv_trie_dir marc8_31page380_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {382, 0, 0}, {383, 0, 0}, {384, 0, 0}, {385, 0, 0}, {386, 0, 0}, {387, 0, 0}, {0, 0, 0}, {388, 0, 0}, {389, 0, 0}, {390, 0, 0}, {391, 0, 0}, {0, 0, 0}, {392, 0, 0}, {393, 0, 0}, {394, 0, 0}, {395, 0, 0}, {396, 0, 0}, {397, 0, 0}, {398, 0, 0}, {399, 0, 0}, {400, 0, 0}, {401, 0, 0}, {0, 0, 0}, {402, 0, 0}, {403, 0, 0}, {404, 0, 0}, {405, 0, 0}, {0, 0, 0}, {406, 0, 0}, {407, 0, 0}, {408, 0, 0}, {409, 0, 0}, {410, 0, 0}, {411, 0, 0}, {412, 0, 0}, {413, 0, 0}, {414, 0, 0}, {415, 0, 0}, {416, 0, 0}, {417, 0, 0}, {0, 0, 0}, {418, 0, 0}, {0, 0, 0}, {419, 0, 0}, {420, 0, 0}, {421, 0, 0}, {422, 0, 0}, {423, 0, 0}, {424, 0, 0}, {425, 0, 0}, {426, 0, 0}, {427, 0, 0}, {428, 0, 0}, {429, 0, 0}, {430, 0, 0}, {431, 0, 0}, {432, 0, 0}, {433, 0, 0}, {434, 0, 0}, {435, 0, 0}, {436, 0, 0}, {437, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page380 = { 0, marc8_31page380_dir }; /* PAGE 379 */ struct yaz_iconv_trie_flat marc8_31page379_flat[] = { {"\x61", 0, 0x82CC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page379 = { marc8_31page379_flat, 0 }; /* PAGE 378 */ struct yaz_iconv_trie_flat marc8_31page378_flat[] = { {"\x56", 0, 0x8114}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page378 = { marc8_31page378_flat, 0 }; /* PAGE 377 */ struct yaz_iconv_trie_flat marc8_31page377_flat[] = { {"\x41", 0, 0x8136}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page377 = { marc8_31page377_flat, 0 }; /* PAGE 376 */ struct yaz_iconv_trie_flat marc8_31page376_flat[] = { {"\x55", 0, 0x80EB}, /* East Asian ideograph */ {"\x6E", 0, 0x80E8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page376 = { marc8_31page376_flat, 0 }; /* PAGE 375 */ struct yaz_iconv_trie_flat marc8_31page375_flat[] = { {"\x39", 0, 0x8069}, /* East Asian ideograph */ {"\x3F", 0, 0x804D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page375 = { marc8_31page375_flat, 0 }; /* PAGE 374 */ struct yaz_iconv_trie_flat marc8_31page374_flat[] = { {"\x55", 0, 0x8027}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page374 = { marc8_31page374_flat, 0 }; /* PAGE 373 */ struct yaz_iconv_trie_flat marc8_31page373_flat[] = { {"\x31", 0, 0x7F9F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page373 = { marc8_31page373_flat, 0 }; /* PAGE 372 */ struct yaz_iconv_trie_flat marc8_31page372_flat[] = { {"\x2E", 0, 0x7F42}, /* East Asian ideograph */ {"\x31", 0, 0x575B}, /* East Asian ideograph (duplicate simplified) */ {"\x72", 0, 0x7F74}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page372 = { marc8_31page372_flat, 0 }; /* PAGE 371 */ struct yaz_iconv_trie_flat marc8_31page371_flat[] = { {"\x21", 0, 0x7F26}, /* East Asian ideograph */ {"\x2D", 0, 0x7F2F}, /* East Asian ideograph */ {"\x49", 0, 0x7F30}, /* East Asian ideograph */ {"\x4E", 0, 0x7F32}, /* East Asian ideograph */ {"\x51", 0, 0x7F33}, /* East Asian ideograph */ {"\x52", 0, 0x7F34}, /* East Asian ideograph */ {"\x59", 0, 0x7F31}, /* East Asian ideograph */ {"\x5D", 0, 0x7EA9}, /* East Asian ideograph */ {"\x60", 0, 0x7F2C}, /* East Asian ideograph */ {"\x6D", 0, 0x624D}, /* East Asian ideograph */ {"\x74", 0, 0x7F35}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page371 = { marc8_31page371_flat, 0 }; /* PAGE 370 */ struct yaz_iconv_trie_flat marc8_31page370_flat[] = { {"\x29", 0, 0x7F17}, /* East Asian ideograph */ {"\x2A", 0, 0x7F02}, /* East Asian ideograph */ {"\x31", 0, 0x7F03}, /* East Asian ideograph */ {"\x36", 0, 0x7F07}, /* East Asian ideograph */ {"\x3C", 0, 0x7F08}, /* East Asian ideograph */ {"\x3E", 0, 0x7F0C}, /* East Asian ideograph */ {"\x47", 0, 0x7F11}, /* East Asian ideograph */ {"\x48", 0, 0x7F0F}, /* East Asian ideograph */ {"\x51", 0, 0x7F1F}, /* East Asian ideograph */ {"\x53", 0, 0x7F12}, /* East Asian ideograph */ {"\x5D", 0, 0x7F1C}, /* East Asian ideograph */ {"\x5E", 0, 0x7F19}, /* East Asian ideograph */ {"\x5F", 0, 0x7F1B}, /* East Asian ideograph */ {"\x69", 0, 0x7EC9}, /* East Asian ideograph */ {"\x71", 0, 0x7EA4}, /* East Asian ideograph (duplicate simplified) */ {"\x72", 0, 0x7F21}, /* East Asian ideograph */ {"\x75", 0, 0x7D77}, /* East Asian ideograph */ {"\x79", 0, 0x7F25}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page370 = { marc8_31page370_flat, 0 }; /* PAGE 369 */ struct yaz_iconv_trie_flat marc8_31page369_flat[] = { {"\x30", 0, 0x7EDB}, /* East Asian ideograph */ {"\x34", 0, 0x7ED7}, /* East Asian ideograph */ {"\x39", 0, 0x7EE8}, /* East Asian ideograph */ {"\x44", 0, 0x7EE0}, /* East Asian ideograph */ {"\x4D", 0, 0x7EE1}, /* East Asian ideograph */ {"\x61", 0, 0x7EFB}, /* East Asian ideograph */ {"\x67", 0, 0x7EEF}, /* East Asian ideograph */ {"\x74", 0, 0x7EF2}, /* East Asian ideograph */ {"\x78", 0, 0x7EF6}, /* East Asian ideograph */ {"\x7D", 0, 0x7EFA}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page369 = { marc8_31page369_flat, 0 }; /* PAGE 368 */ struct yaz_iconv_trie_flat marc8_31page368_flat[] = { {"\x22", 0, 0x7CC1}, /* East Asian ideograph */ {"\x2E", 0, 0x56E2}, /* East Asian ideograph (duplicate simplified) */ {"\x30", 0, 0x7C9D}, /* East Asian ideograph */ {"\x35", 0, 0x7C74}, /* East Asian ideograph */ {"\x42", 0, 0x7EA1}, /* East Asian ideograph */ {"\x45", 0, 0x7EA8}, /* East Asian ideograph */ {"\x4A", 0, 0x7EBE}, /* East Asian ideograph */ {"\x61", 0, 0x7EC0}, /* East Asian ideograph */ {"\x62", 0, 0x7EC1}, /* East Asian ideograph */ {"\x65", 0, 0x7EC2}, /* East Asian ideograph */ {"\x6A", 0, 0x7ED0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page368 = { marc8_31page368_flat, 0 }; /* PAGE 367 */ struct yaz_iconv_trie_flat marc8_31page367_flat[] = { {"\x56", 0, 0x7BA8}, /* East Asian ideograph */ {"\x68", 0, 0x7B3E}, /* East Asian ideograph */ {"\x69", 0, 0x7C16}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page367 = { marc8_31page367_flat, 0 }; /* PAGE 366 */ struct yaz_iconv_trie_flat marc8_31page366_flat[] = { {"\x47", 0, 0x7BA6}, /* East Asian ideograph */ {"\x54", 0, 0x7B5A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page366 = { marc8_31page366_flat, 0 }; /* PAGE 365 */ struct yaz_iconv_trie_flat marc8_31page365_flat[] = { {"\x58", 0, 0x7BA7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page365 = { marc8_31page365_flat, 0 }; /* PAGE 364 */ struct yaz_iconv_trie_flat marc8_31page364_flat[] = { {"\x7C", 0, 0x7B15}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page364 = { marc8_31page364_flat, 0 }; /* PAGE 363 */ struct yaz_iconv_trie_flat marc8_31page363_flat[] = { {"\x3C", 0, 0x7AAD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page363 = { marc8_31page363_flat, 0 }; /* PAGE 362 */ struct yaz_iconv_trie_flat marc8_31page362_flat[] = { {"\x22", 0, 0x7857}, /* East Asian ideograph */ {"\x55", 0, 0x783B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page362 = { marc8_31page362_flat, 0 }; /* PAGE 361 */ struct yaz_iconv_trie_flat marc8_31page361_flat[] = { {"\x40", 0, 0x7800}, /* East Asian ideograph */ {"\x6A", 0, 0x789B}, /* East Asian ideograph */ {"\x77", 0, 0x789C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page361 = { marc8_31page361_flat, 0 }; /* PAGE 360 */ struct yaz_iconv_trie_flat marc8_31page360_flat[] = { {"\x5A", 0, 0x7817}, /* East Asian ideograph */ {"\x60", 0, 0x7856}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page360 = { marc8_31page360_flat, 0 }; /* PAGE 359 */ struct yaz_iconv_trie_flat marc8_31page359_flat[] = { {"\x2C", 0, 0x7751}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page359 = { marc8_31page359_flat, 0 }; /* PAGE 358 */ struct yaz_iconv_trie_flat marc8_31page358_flat[] = { {"\x22", 0, 0x7726}, /* East Asian ideograph */ {"\x72", 0, 0x770D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page358 = { marc8_31page358_flat, 0 }; /* PAGE 357 */ struct yaz_iconv_trie_flat marc8_31page357_flat[] = { {"\x2B", 0, 0x762A}, /* East Asian ideograph */ {"\x32", 0, 0x75AC}, /* East Asian ideograph */ {"\x37", 0, 0x763F}, /* East Asian ideograph */ {"\x3A", 0, 0x75C8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page357 = { marc8_31page357_flat, 0 }; /* PAGE 356 */ struct yaz_iconv_trie_flat marc8_31page356_flat[] = { {"\x48", 0, 0x7617}, /* East Asian ideograph */ {"\x5E", 0, 0x7618}, /* East Asian ideograph */ {"\x6F", 0, 0x7605}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page356 = { marc8_31page356_flat, 0 }; /* PAGE 355 */ struct yaz_iconv_trie_flat marc8_31page355_flat[] = { {"\x7A", 0, 0x75D6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page355 = { marc8_31page355_flat, 0 }; /* PAGE 354 */ struct yaz_iconv_trie_flat marc8_31page354_flat[] = { {"\x6B", 0, 0x7572}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page354 = { marc8_31page354_flat, 0 }; /* PAGE 353 */ struct yaz_iconv_trie_flat marc8_31page353_flat[] = { {"\x3A", 0, 0x748E}, /* East Asian ideograph */ {"\x40", 0, 0x74D2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page353 = { marc8_31page353_flat, 0 }; /* PAGE 352 */ struct yaz_iconv_trie_flat marc8_31page352_flat[] = { {"\x21", 0, 0x740F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page352 = { marc8_31page352_flat, 0 }; /* PAGE 351 */ struct yaz_iconv_trie_flat marc8_31page351_flat[] = { {"\x47", 0, 0x73AE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page351 = { marc8_31page351_flat, 0 }; /* PAGE 350 */ struct yaz_iconv_trie_flat marc8_31page350_flat[] = { {"\x2B", 0, 0x7303}, /* East Asian ideograph */ {"\x36", 0, 0x7315}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page350 = { marc8_31page350_flat, 0 }; /* PAGE 349 */ struct yaz_iconv_trie_flat marc8_31page349_flat[] = { {"\x5E", 0, 0x72B8}, /* East Asian ideograph */ {"\x5F", 0, 0x72F2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page349 = { marc8_31page349_flat, 0 }; /* PAGE 348 */ struct yaz_iconv_trie_flat marc8_31page348_flat[] = { {"\x24", 0, 0x70E8}, /* East Asian ideograph */ {"\x4F", 0, 0x70EC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page348 = { marc8_31page348_flat, 0 }; /* PAGE 347 */ struct yaz_iconv_trie_flat marc8_31page347_flat[] = { {"\x23", 0, 0x8367}, /* East Asian ideograph */ {"\x3C", 0, 0x709D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page347 = { marc8_31page347_flat, 0 }; /* PAGE 346 */ struct yaz_iconv_trie_flat marc8_31page346_flat[] = { {"\x52", 0, 0x709C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page346 = { marc8_31page346_flat, 0 }; /* PAGE 345 */ struct yaz_iconv_trie_flat marc8_31page345_flat[] = { {"\x50", 0, 0x70C3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page345 = { marc8_31page345_flat, 0 }; /* PAGE 344 */ struct yaz_iconv_trie_flat marc8_31page344_flat[] = { {"\x29", 0, 0x6EDF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page344 = { marc8_31page344_flat, 0 }; /* PAGE 343 */ struct yaz_iconv_trie_flat marc8_31page343_flat[] = { {"\x26", 0, 0x6CF7}, /* East Asian ideograph */ {"\x39", 0, 0x6CF8}, /* East Asian ideograph */ {"\x5D", 0, 0x6CA3}, /* East Asian ideograph */ {"\x61", 0, 0x6EE0}, /* East Asian ideograph */ {"\x6B", 0, 0x6F13}, /* East Asian ideograph */ {"\x7D", 0, 0x704F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page343 = { marc8_31page343_flat, 0 }; /* PAGE 342 */ struct yaz_iconv_trie_flat marc8_31page342_flat[] = { {"\x30", 0, 0x6E11}, /* East Asian ideograph */ {"\x3E", 0, 0x6CF6}, /* East Asian ideograph */ {"\x41", 0, 0x6F4B}, /* East Asian ideograph */ {"\x42", 0, 0x6D4D}, /* East Asian ideograph */ {"\x62", 0, 0x6F4D}, /* East Asian ideograph */ {"\x66", 0, 0x6EE2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page342 = { marc8_31page342_flat, 0 }; /* PAGE 341 */ struct yaz_iconv_trie_flat marc8_31page341_flat[] = { {"\x27", 0, 0x6D9D}, /* East Asian ideograph */ {"\x2B", 0, 0x6D54}, /* East Asian ideograph */ {"\x49", 0, 0x6DA0}, /* East Asian ideograph */ {"\x58", 0, 0x6CA9}, /* East Asian ideograph */ {"\x59", 0, 0x6ED7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page341 = { marc8_31page341_flat, 0 }; /* PAGE 340 */ struct yaz_iconv_trie_flat marc8_31page340_flat[] = { {"\x2E", 0, 0x6D52}, /* East Asian ideograph */ {"\x41", 0, 0x6CA4}, /* East Asian ideograph */ {"\x62", 0, 0x988D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page340 = { marc8_31page340_flat, 0 }; /* PAGE 339 */ struct yaz_iconv_trie_flat marc8_31page339_flat[] = { {"\x28", 0, 0x6D48}, /* East Asian ideograph */ {"\x43", 0, 0x8365}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page339 = { marc8_31page339_flat, 0 }; /* PAGE 338 */ struct yaz_iconv_trie_flat marc8_31page338_flat[] = { {"\x34", 0, 0x6D43}, /* East Asian ideograph */ {"\x71", 0, 0x6D9E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page338 = { marc8_31page338_flat, 0 }; /* PAGE 337 */ struct yaz_iconv_trie_flat marc8_31page337_flat[] = { {"\x42", 0, 0x6BF5}, /* East Asian ideograph */ {"\x4C", 0, 0x6BE1}, /* East Asian ideograph */ {"\x51", 0, 0x6C07}, /* East Asian ideograph */ {"\x68", 0, 0x6C29}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page337 = { marc8_31page337_flat, 0 }; /* PAGE 336 */ struct yaz_iconv_trie_flat marc8_31page336_flat[] = { {"\x39", 0, 0x6B9A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page336 = { marc8_31page336_flat, 0 }; /* PAGE 335 */ struct yaz_iconv_trie_flat marc8_31page335_flat[] = { {"\x33", 0, 0x680E}, /* East Asian ideograph */ {"\x35", 0, 0x6A7C}, /* East Asian ideograph */ {"\x37", 0, 0x6987}, /* East Asian ideograph */ {"\x39", 0, 0x680A}, /* East Asian ideograph */ {"\x3A", 0, 0x69E0}, /* East Asian ideograph */ {"\x40", 0, 0x67A5}, /* East Asian ideograph */ {"\x45", 0, 0x680C}, /* East Asian ideograph */ {"\x50", 0, 0x68C2}, /* East Asian ideograph */ {"\x59", 0, 0x6989}, /* East Asian ideograph */ {"\x66", 0, 0x6924}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page335 = { marc8_31page335_flat, 0 }; /* PAGE 334 */ struct yaz_iconv_trie_flat marc8_31page334_flat[] = { {"\x2B", 0, 0x6A2F}, /* East Asian ideograph */ {"\x57", 0, 0x68BC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page334 = { marc8_31page334_flat, 0 }; /* PAGE 333 */ struct yaz_iconv_trie_flat marc8_31page333_flat[] = { {"\x40", 0, 0x6861}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page333 = { marc8_31page333_flat, 0 }; /* PAGE 332 */ struct yaz_iconv_trie_flat marc8_31page332_flat[] = { {"\x27", 0, 0x6864}, /* East Asian ideograph */ {"\x56", 0, 0x6920}, /* East Asian ideograph */ {"\x5E", 0, 0x67FD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page332 = { marc8_31page332_flat, 0 }; /* PAGE 331 */ struct yaz_iconv_trie_flat marc8_31page331_flat[] = { {"\x30", 0, 0x6966}, /* East Asian ideograph */ {"\x5C", 0, 0x6769}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page331 = { marc8_31page331_flat, 0 }; /* PAGE 330 */ struct yaz_iconv_trie_flat marc8_31page330_flat[] = { {"\x30", 0, 0x67A7}, /* East Asian ideograph */ {"\x6E", 0, 0x67A8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page330 = { marc8_31page330_flat, 0 }; /* PAGE 329 */ struct yaz_iconv_trie_flat marc8_31page329_flat[] = { {"\x22", 0, 0x4E2B}, /* East Asian ideograph */ {"\x7D", 0, 0x53F0}, /* East Asian ideograph (duplicate simplified) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page329 = { marc8_31page329_flat, 0 }; /* PAGE 328 */ struct yaz_iconv_trie_flat marc8_31page328_flat[] = { {"\x55", 0, 0x6619}, /* East Asian ideograph */ {"\x5C", 0, 0x6654}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page328 = { marc8_31page328_flat, 0 }; /* PAGE 327 */ struct yaz_iconv_trie_flat marc8_31page327_flat[] = { {"\x71", 0, 0x6593}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page327 = { marc8_31page327_flat, 0 }; /* PAGE 326 */ struct yaz_iconv_trie_flat marc8_31page326_flat[] = { {"\x2A", 0, 0x6448}, /* East Asian ideograph */ {"\x42", 0, 0x64B7}, /* East Asian ideograph */ {"\x46", 0, 0x6445}, /* East Asian ideograph */ {"\x5B", 0, 0x6484}, /* East Asian ideograph */ {"\x61", 0, 0x64BA}, /* East Asian ideograph */ {"\x6D", 0, 0x6512}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page326 = { marc8_31page326_flat, 0 }; /* PAGE 325 */ struct yaz_iconv_trie_flat marc8_31page325_flat[] = { {"\x2C", 0, 0x63BA}, /* East Asian ideograph */ {"\x2E", 0, 0x63BC}, /* East Asian ideograph */ {"\x57", 0, 0x63B8}, /* East Asian ideograph */ {"\x62", 0, 0x6322}, /* East Asian ideograph */ {"\x66", 0, 0x63FF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page325 = { marc8_31page325_flat, 0 }; /* PAGE 324 */ struct yaz_iconv_trie_flat marc8_31page324_flat[] = { {"\x6F", 0, 0x629F}, /* East Asian ideograph */ {"\x7B", 0, 0x62A0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page324 = { marc8_31page324_flat, 0 }; /* PAGE 323 */ struct yaz_iconv_trie_flat marc8_31page323_flat[] = { {"\x43", 0, 0x6206}, /* East Asian ideograph */ {"\x47", 0, 0x620B}, /* East Asian ideograph */ {"\x66", 0, 0x6217}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page323 = { marc8_31page323_flat, 0 }; /* PAGE 322 */ struct yaz_iconv_trie_flat marc8_31page322_flat[] = { {"\x4C", 0, 0x6126}, /* East Asian ideograph */ {"\x52", 0, 0x6003}, /* East Asian ideograph */ {"\x5C", 0, 0x603F}, /* East Asian ideograph */ {"\x79", 0, 0x6079}, /* East Asian ideograph */ {"\x7E", 0, 0x603C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page322 = { marc8_31page322_flat, 0 }; /* PAGE 321 */ struct yaz_iconv_trie_flat marc8_31page321_flat[] = { {"\x34", 0, 0x607D}, /* East Asian ideograph */ {"\x5E", 0, 0x607A}, /* East Asian ideograph */ {"\x74", 0, 0x6004}, /* East Asian ideograph */ {"\x77", 0, 0x60AD}, /* East Asian ideograph */ {"\x79", 0, 0x60AB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page321 = { marc8_31page321_flat, 0 }; /* PAGE 320 */ struct yaz_iconv_trie_flat marc8_31page320_flat[] = { {"\x51", 0, 0x5F2A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page320 = { marc8_31page320_flat, 0 }; /* PAGE 319 */ struct yaz_iconv_trie_flat marc8_31page319_flat[] = { {"\x68", 0, 0x5E91}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page319 = { marc8_31page319_flat, 0 }; /* PAGE 318 */ struct yaz_iconv_trie_flat marc8_31page318_flat[] = { {"\x36", 0, 0x5E0F}, /* East Asian ideograph */ {"\x47", 0, 0x5E3B}, /* East Asian ideograph */ {"\x5F", 0, 0x5E31}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page318 = { marc8_31page318_flat, 0 }; /* PAGE 317 */ struct yaz_iconv_trie_flat marc8_31page317_flat[] = { {"\x26", 0, 0x5CC4}, /* East Asian ideograph */ {"\x32", 0, 0x5D58}, /* East Asian ideograph */ {"\x47", 0, 0x5CBF}, /* East Asian ideograph */ {"\x59", 0, 0x5DEF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page317 = { marc8_31page317_flat, 0 }; /* PAGE 316 */ struct yaz_iconv_trie_flat marc8_31page316_flat[] = { {"\x5A", 0, 0x5D5D}, /* East Asian ideograph */ {"\x69", 0, 0x5D02}, /* East Asian ideograph */ {"\x77", 0, 0x5CE4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page316 = { marc8_31page316_flat, 0 }; /* PAGE 315 */ struct yaz_iconv_trie_flat marc8_31page315_flat[] = { {"\x41", 0, 0x5C98}, /* East Asian ideograph */ {"\x58", 0, 0x5D03}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page315 = { marc8_31page315_flat, 0 }; /* PAGE 314 */ struct yaz_iconv_trie_flat marc8_31page314_flat[] = { {"\x2B", 0, 0x5C66}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page314 = { marc8_31page314_flat, 0 }; /* PAGE 313 */ struct yaz_iconv_trie_dir marc8_31page313_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {315, 0, 0}, {316, 0, 0}, {317, 0, 0}, {318, 0, 0}, {319, 0, 0}, {320, 0, 0}, {321, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {322, 0, 0}, {323, 0, 0}, {324, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {325, 0, 0}, {326, 0, 0}, {327, 0, 0}, {328, 0, 0}, {0, 0, 0}, {0, 0, 0}, {329, 0, 0}, {0, 0, 0}, {330, 0, 0}, {0, 0, 0}, {331, 0, 0}, {0, 0, 0}, {332, 0, 0}, {333, 0, 0}, {334, 0, 0}, {335, 0, 0}, {336, 0, 0}, {0, 0, 0}, {337, 0, 0}, {338, 0, 0}, {0, 0, 0}, {0, 0, 0}, {339, 0, 0}, {0, 0, 0}, {340, 0, 0}, {341, 0, 0}, {342, 0, 0}, {343, 0, 0}, {344, 0, 0}, {345, 0, 0}, {346, 0, 0}, {347, 0, 0}, {348, 0, 0}, {349, 0, 0}, {0, 0, 0}, {0, 0, 0}, {350, 0, 0}, {351, 0, 0}, {0, 0, 0}, {352, 0, 0}, {353, 0, 0}, {354, 0, 0}, {355, 0, 0}, {356, 0, 0}, {357, 0, 0}, {358, 0, 0}, {0, 0, 0}, {359, 0, 0}, {360, 0, 0}, {361, 0, 0}, {362, 0, 0}, {363, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {364, 0, 0}, {365, 0, 0}, {366, 0, 0}, {367, 0, 0}, {368, 0, 0}, {0, 0, 0}, {369, 0, 0}, {370, 0, 0}, {371, 0, 0}, {372, 0, 0}, {373, 0, 0}, {374, 0, 0}, {375, 0, 0}, {376, 0, 0}, {377, 0, 0}, {378, 0, 0}, {379, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {380, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page313 = { 0, marc8_31page313_dir }; /* PAGE 312 */ struct yaz_iconv_trie_flat marc8_31page312_flat[] = { {"\x2B", 0, 0x5A06}, /* East Asian ideograph */ {"\x40", 0, 0x5AF1}, /* East Asian ideograph */ {"\x48", 0, 0x5AD2}, /* East Asian ideograph */ {"\x74", 0, 0x5A08}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page312 = { marc8_31page312_flat, 0 }; /* PAGE 311 */ struct yaz_iconv_trie_flat marc8_31page311_flat[] = { {"\x24", 0, 0x5A32}, /* East Asian ideograph */ {"\x36", 0, 0x59AB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page311 = { marc8_31page311_flat, 0 }; /* PAGE 310 */ struct yaz_iconv_trie_flat marc8_31page310_flat[] = { {"\x3C", 0, 0x5A05}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page310 = { marc8_31page310_flat, 0 }; /* PAGE 309 */ struct yaz_iconv_trie_flat marc8_31page309_flat[] = { {"\x54", 0, 0x5956}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page309 = { marc8_31page309_flat, 0 }; /* PAGE 308 */ struct yaz_iconv_trie_flat marc8_31page308_flat[] = { {"\x5A", 0, 0x5785}, /* East Asian ideograph */ {"\x5E", 0, 0x5786}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page308 = { marc8_31page308_flat, 0 }; /* PAGE 307 */ struct yaz_iconv_trie_flat marc8_31page307_flat[] = { {"\x42", 0, 0x57D8}, /* East Asian ideograph */ {"\x45", 0, 0x57D9}, /* East Asian ideograph */ {"\x48", 0, 0x57B2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page307 = { marc8_31page307_flat, 0 }; /* PAGE 306 */ struct yaz_iconv_trie_flat marc8_31page306_flat[] = { {"\x38", 0, 0x57AD}, /* East Asian ideograph */ {"\x7A", 0, 0x57DA}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page306 = { marc8_31page306_flat, 0 }; /* PAGE 305 */ struct yaz_iconv_trie_flat marc8_31page305_flat[] = { {"\x2E", 0, 0x56F5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page305 = { marc8_31page305_flat, 0 }; /* PAGE 304 */ struct yaz_iconv_trie_flat marc8_31page304_flat[] = { {"\x28", 0, 0x54DC}, /* East Asian ideograph */ {"\x45", 0, 0x556E}, /* East Asian ideograph */ {"\x4C", 0, 0x5456}, /* East Asian ideograph */ {"\x5A", 0, 0x55BE}, /* East Asian ideograph */ {"\x60", 0, 0x5181}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page304 = { marc8_31page304_flat, 0 }; /* PAGE 303 */ struct yaz_iconv_trie_flat marc8_31page303_flat[] = { {"\x34", 0, 0x551B}, /* East Asian ideograph */ {"\x39", 0, 0x54D4}, /* East Asian ideograph */ {"\x55", 0, 0x54D3}, /* East Asian ideograph */ {"\x58", 0, 0x6076}, /* East Asian ideograph (duplicate simplified) */ {"\x67", 0, 0x5452}, /* East Asian ideograph */ {"\x72", 0, 0x54D2}, /* East Asian ideograph */ {"\x7A", 0, 0x54D5}, /* East Asian ideograph */ {"\x7E", 0, 0x54D9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page303 = { marc8_31page303_flat, 0 }; /* PAGE 302 */ struct yaz_iconv_trie_flat marc8_31page302_flat[] = { {"\x69", 0, 0x5522}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page302 = { marc8_31page302_flat, 0 }; /* PAGE 301 */ struct yaz_iconv_trie_flat marc8_31page301_flat[] = { {"\x30", 0, 0x5457}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page301 = { marc8_31page301_flat, 0 }; /* PAGE 300 */ struct yaz_iconv_trie_flat marc8_31page300_flat[] = { {"\x69", 0, 0x5459}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page300 = { marc8_31page300_flat, 0 }; /* PAGE 299 */ struct yaz_iconv_trie_flat marc8_31page299_flat[] = { {"\x2A", 0, 0x53A3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page299 = { marc8_31page299_flat, 0 }; /* PAGE 298 */ struct yaz_iconv_trie_flat marc8_31page298_flat[] = { {"\x2E", 0, 0x5326}, /* East Asian ideograph */ {"\x6D", 0, 0x538D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page298 = { marc8_31page298_flat, 0 }; /* PAGE 297 */ struct yaz_iconv_trie_flat marc8_31page297_flat[] = { {"\x3E", 0, 0x522D}, /* East Asian ideograph */ {"\x5B", 0, 0x5250}, /* East Asian ideograph */ {"\x5F", 0, 0x672D}, /* East Asian ideograph */ {"\x79", 0, 0x523F}, /* East Asian ideograph */ {"\x7A", 0, 0x523D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page297 = { marc8_31page297_flat, 0 }; /* PAGE 296 */ struct yaz_iconv_trie_flat marc8_31page296_flat[] = { {"\x44", 0, 0x50A9}, /* East Asian ideograph */ {"\x48", 0, 0x50A5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page296 = { marc8_31page296_flat, 0 }; /* PAGE 295 */ struct yaz_iconv_trie_flat marc8_31page295_flat[] = { {"\x22", 0, 0x507B}, /* East Asian ideograph */ {"\x42", 0, 0x507E}, /* East Asian ideograph */ {"\x71", 0, 0x4FAA}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page295 = { marc8_31page295_flat, 0 }; /* PAGE 294 */ struct yaz_iconv_trie_flat marc8_31page294_flat[] = { {"\x75", 0, 0x4F65}, /* East Asian ideograph */ {"\x7C", 0, 0x4F1B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page294 = { marc8_31page294_flat, 0 }; /* PAGE 293 */ struct yaz_iconv_trie_flat marc8_31page293_flat[] = { {"\x49", 0, 0x4F1C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page293 = { marc8_31page293_flat, 0 }; /* PAGE 292 */ struct yaz_iconv_trie_flat marc8_31page292_flat[] = { {"\x21", 0, 0x9F7F}, /* East Asian ideograph */ {"\x22", 0, 0x9F83}, /* East Asian ideograph */ {"\x24", 0, 0x9F84}, /* East Asian ideograph */ {"\x25", 0, 0x9F88}, /* East Asian ideograph */ {"\x26", 0, 0x9F87}, /* East Asian ideograph */ {"\x27", 0, 0x9F89}, /* East Asian ideograph */ {"\x28", 0, 0x9F8A}, /* East Asian ideograph */ {"\x29", 0, 0x9F8C}, /* East Asian ideograph */ {"\x2A", 0, 0x9F8B}, /* East Asian ideograph */ {"\x2B", 0, 0x9F99}, /* East Asian ideograph */ {"\x2C", 0, 0x9F9A}, /* East Asian ideograph */ {"\x2D", 0, 0x9F9F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page292 = { marc8_31page292_flat, 0 }; /* PAGE 291 */ struct yaz_iconv_trie_dir marc8_31page291_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9CC3} /* East Asian ideograph */, {0, 0, 0x9CC5} /* East Asian ideograph */, {0, 0, 0x9CAB} /* East Asian ideograph */, {0, 0, 0x9CCD} /* East Asian ideograph */, {0, 0, 0x9CCF} /* East Asian ideograph */, {0, 0, 0x9CA2} /* East Asian ideograph */, {0, 0, 0x9CD4} /* East Asian ideograph */, {0, 0, 0x9CD7} /* East Asian ideograph */, {0, 0, 0x9CDD} /* East Asian ideograph */, {0, 0, 0x9CDE} /* East Asian ideograph */, {0, 0, 0x9CDC} /* East Asian ideograph */, {0, 0, 0x9CD6} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9C88} /* East Asian ideograph */, {0, 0, 0x9E1F} /* East Asian ideograph */, {0, 0, 0x9E20} /* East Asian ideograph */, {0, 0, 0x9E22} /* East Asian ideograph */, {0, 0, 0x9E23} /* East Asian ideograph */, {0, 0, 0x51E4} /* East Asian ideograph */, {0, 0, 0x9E29} /* East Asian ideograph */, {0, 0, 0x9E26} /* East Asian ideograph */, {0, 0, 0x9E35} /* East Asian ideograph */, {0, 0, 0x9E2A} /* East Asian ideograph */, {0, 0, 0x9E2D} /* East Asian ideograph */, {0, 0, 0x9E2F} /* East Asian ideograph */, {0, 0, 0x9E33} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9E3F} /* East Asian ideograph */, {0, 0, 0x9E3D} /* East Asian ideograph */, {0, 0, 0x9E49} /* East Asian ideograph */, {0, 0, 0x9E43} /* East Asian ideograph */, {0, 0, 0x9E44} /* East Asian ideograph */, {0, 0, 0x9E45} /* East Asian ideograph */, {0, 0, 0x9E51} /* East Asian ideograph */, {0, 0, 0x9E4A} /* East Asian ideograph */, {0, 0, 0x9E4C} /* East Asian ideograph */, {0, 0, 0x9E4F} /* East Asian ideograph */, {0, 0, 0x9E64} /* East Asian ideograph */, {0, 0, 0x83BA} /* East Asian ideograph */, {0, 0, 0x9E5E} /* East Asian ideograph */, {0, 0, 0x9E67} /* East Asian ideograph */, {0, 0, 0x9E25} /* East Asian ideograph */, {0, 0, 0x9E36} /* East Asian ideograph */, {0, 0, 0x9E70} /* East Asian ideograph */, {0, 0, 0x9E6D} /* East Asian ideograph */, {0, 0, 0x9E66} /* East Asian ideograph */, {0, 0, 0x9E3E} /* East Asian ideograph */, {0, 0, 0x54B8} /* East Asian ideograph */, {0, 0, 0x76D0} /* East Asian ideograph */, {0, 0, 0x7877} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x4E3D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9EA6} /* East Asian ideograph */, {0, 0, 0x9EB8} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9762} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4E48} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x70B9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x515A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9EE9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x51AC} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9F50} /* East Asian ideograph */, {0, 0, 0x658E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page291 = { 0, marc8_31page291_dir }; /* PAGE 290 */ struct yaz_iconv_trie_dir marc8_31page290_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x998A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9992} /* East Asian ideograph */, {0, 0, 0x9976} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x990D} /* East Asian ideograph */, {0, 0, 0x998B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9A6C} /* East Asian ideograph */, {0, 0, 0x51AF} /* East Asian ideograph */, {0, 0, 0x9A6D} /* East Asian ideograph */, {0, 0, 0x9A70} /* East Asian ideograph */, {0, 0, 0x9A6E} /* East Asian ideograph */, {0, 0, 0x9A6F} /* East Asian ideograph */, {0, 0, 0x9A73} /* East Asian ideograph */, {0, 0, 0x9A7B} /* East Asian ideograph */, {0, 0, 0x9A7C} /* East Asian ideograph */, {0, 0, 0x9A7E} /* East Asian ideograph */, {0, 0, 0x9A77} /* East Asian ideograph */, {0, 0, 0x9A76} /* East Asian ideograph */, {0, 0, 0x9A79} /* East Asian ideograph */, {0, 0, 0x9A78} /* East Asian ideograph */, {0, 0, 0x9A7D} /* East Asian ideograph */, {0, 0, 0x9A87} /* East Asian ideograph */, {0, 0, 0x9A86} /* East Asian ideograph */, {0, 0, 0x9A8B} /* East Asian ideograph */, {0, 0, 0x9A8F} /* East Asian ideograph */, {0, 0, 0x9A88} /* East Asian ideograph */, {0, 0, 0x9A91} /* East Asian ideograph */, {0, 0, 0x9A97} /* East Asian ideograph */, {0, 0, 0x9A9B} /* East Asian ideograph */, {0, 0, 0x9A9E} /* East Asian ideograph */, {0, 0, 0x817E} /* East Asian ideograph */, {0, 0, 0x9A9A} /* East Asian ideograph */, {0, 0, 0x9AA0} /* East Asian ideograph */, {0, 0, 0x9A71} /* East Asian ideograph */, {0, 0, 0x84E6} /* East Asian ideograph */, {0, 0, 0x9AA1} /* East Asian ideograph */, {0, 0, 0x9A84} /* East Asian ideograph */, {0, 0, 0x60CA} /* East Asian ideograph */, {0, 0, 0x9A7F} /* East Asian ideograph */, {0, 0, 0x9A8C} /* East Asian ideograph */, {0, 0, 0x9AA4} /* East Asian ideograph */, {0, 0, 0x9A74} /* East Asian ideograph */, {0, 0, 0x9AA5} /* East Asian ideograph */, {0, 0, 0x9A8A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x80AE} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9AC5} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4F53} /* East Asian ideograph */, {0, 0, 0x810F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x53D1} /* East Asian ideograph (duplicate simplified) */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x677E} /* East Asian ideograph (duplicate simplified) */, {0, 0, 0x80E1} /* East Asian ideograph (duplicate simplified) */, {0, 0, 0x987B} /* East Asian ideograph (duplicate simplified) */, {0, 0, 0x9B13} /* East Asian ideograph */, {0, 0, 0x6597} /* East Asian ideograph */, {0, 0, 0x95F9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x90C1} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9B47} /* East Asian ideograph */, {0, 0, 0x9C7C} /* East Asian ideograph */, {0, 0, 0x9C7F} /* East Asian ideograph */, {0, 0, 0x9C81} /* East Asian ideograph */, {0, 0, 0x9C8D} /* East Asian ideograph */, {0, 0, 0x9C9B} /* East Asian ideograph */, {0, 0, 0x9C9C} /* East Asian ideograph */, {0, 0, 0x9C94} /* East Asian ideograph */, {0, 0, 0x9CA8} /* East Asian ideograph */, {0, 0, 0x9CA4} /* East Asian ideograph */, {0, 0, 0x9CB8} /* East Asian ideograph */, {0, 0, 0x9CB3} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page290 = { 0, marc8_31page290_dir }; /* PAGE 289 */ struct yaz_iconv_trie_dir marc8_31page289_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5DE9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9791} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x97E6} /* East Asian ideograph */, {0, 0, 0x97E7} /* East Asian ideograph */, {0, 0, 0x97E9} /* East Asian ideograph */, {0, 0, 0x97EC} /* East Asian ideograph */, {0, 0, 0x827D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x54CD} /* East Asian ideograph */, {0, 0, 0x9875} /* East Asian ideograph */, {0, 0, 0x9876} /* East Asian ideograph */, {0, 0, 0x9877} /* East Asian ideograph */, {0, 0, 0x9879} /* East Asian ideograph */, {0, 0, 0x987A} /* East Asian ideograph */, {0, 0, 0x987B} /* East Asian ideograph */, {0, 0, 0x9884} /* East Asian ideograph */, {0, 0, 0x987C} /* East Asian ideograph */, {0, 0, 0x987D} /* East Asian ideograph */, {0, 0, 0x987F} /* East Asian ideograph */, {0, 0, 0x9881} /* East Asian ideograph */, {0, 0, 0x9882} /* East Asian ideograph */, {0, 0, 0x9887} /* East Asian ideograph */, {0, 0, 0x9886} /* East Asian ideograph */, {0, 0, 0x9889} /* East Asian ideograph */, {0, 0, 0x5934} /* East Asian ideograph */, {0, 0, 0x988A} /* East Asian ideograph */, {0, 0, 0x9888} /* East Asian ideograph */, {0, 0, 0x9891} /* East Asian ideograph */, {0, 0, 0x9893} /* East Asian ideograph */, {0, 0, 0x9894} /* East Asian ideograph */, {0, 0, 0x9890} /* East Asian ideograph */, {0, 0, 0x9897} /* East Asian ideograph */, {0, 0, 0x989C} /* East Asian ideograph */, {0, 0, 0x989D} /* East Asian ideograph */, {0, 0, 0x9898} /* East Asian ideograph */, {0, 0, 0x989A} /* East Asian ideograph */, {0, 0, 0x989B} /* East Asian ideograph */, {0, 0, 0x7C7B} /* East Asian ideograph */, {0, 0, 0x98A0} /* East Asian ideograph */, {0, 0, 0x613F} /* East Asian ideograph */, {0, 0, 0x987E} /* East Asian ideograph */, {0, 0, 0x98A4} /* East Asian ideograph */, {0, 0, 0x663E} /* East Asian ideograph */, {0, 0, 0x9885} /* East Asian ideograph */, {0, 0, 0x98A6} /* East Asian ideograph */, {0, 0, 0x98CE} /* East Asian ideograph */, {0, 0, 0x98D2} /* East Asian ideograph */, {0, 0, 0x53F0} /* East Asian ideograph (duplicate simplified) */, {0, 0, 0x522E} /* East Asian ideograph */, {0, 0, 0x98D3} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x98D5} /* East Asian ideograph */, {0, 0, 0x98D8} /* East Asian ideograph */, {0, 0, 0x98DE} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9965} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9968} /* East Asian ideograph */, {0, 0, 0x996C} /* East Asian ideograph */, {0, 0, 0x996A} /* East Asian ideograph */, {0, 0, 0x996E} /* East Asian ideograph */, {0, 0, 0x996D} /* East Asian ideograph */, {0, 0, 0x9972} /* East Asian ideograph */, {0, 0, 0x9974} /* East Asian ideograph */, {0, 0, 0x9971} /* East Asian ideograph */, {0, 0, 0x9970} /* East Asian ideograph */, {0, 0, 0x997A} /* East Asian ideograph */, {0, 0, 0x517B} /* East Asian ideograph */, {0, 0, 0x9975} /* East Asian ideograph */, {0, 0, 0x9977} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9981} /* East Asian ideograph */, {0, 0, 0x4F59} /* East Asian ideograph */, {0, 0, 0x997F} /* East Asian ideograph */, {0, 0, 0x997C} /* East Asian ideograph */, {0, 0, 0x9986} /* East Asian ideograph */, {0, 0, 0x996F} /* East Asian ideograph */, {0, 0, 0x9984} /* East Asian ideograph */, {0, 0, 0x9985} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x998F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page289 = { 0, marc8_31page289_dir }; /* PAGE 288 */ struct yaz_iconv_trie_flat marc8_31page288_flat[] = { {"\x23", 0, 0x9648}, /* East Asian ideograph */ {"\x24", 0, 0x9646}, /* East Asian ideograph */ {"\x2A", 0, 0x9634}, /* East Asian ideograph */ {"\x2B", 0, 0x961F}, /* East Asian ideograph */ {"\x2C", 0, 0x9636}, /* East Asian ideograph */ {"\x2E", 0, 0x9633}, /* East Asian ideograph */ {"\x37", 0, 0x9645}, /* East Asian ideograph */ {"\x39", 0, 0x968F}, /* East Asian ideograph */ {"\x3A", 0, 0x9669}, /* East Asian ideograph */ {"\x3B", 0, 0x9690}, /* East Asian ideograph */ {"\x3C", 0, 0x9647}, /* East Asian ideograph */ {"\x3D", 0, 0x96B6}, /* East Asian ideograph */ {"\x3E", 0, 0x53EA}, /* East Asian ideograph (duplicate simplified) */ {"\x4A", 0, 0x867D}, /* East Asian ideograph */ {"\x4B", 0, 0x6742}, /* East Asian ideograph */ {"\x4C", 0, 0x9E21}, /* East Asian ideograph */ {"\x4D", 0, 0x96CF}, /* East Asian ideograph */ {"\x4E", 0, 0x53CC}, /* East Asian ideograph */ {"\x4F", 0, 0x79BB}, /* East Asian ideograph */ {"\x50", 0, 0x96BE}, /* East Asian ideograph */ {"\x54", 0, 0x4E91}, /* East Asian ideograph */ {"\x55", 0, 0x7535}, /* East Asian ideograph */ {"\x67", 0, 0x96FE}, /* East Asian ideograph */ {"\x6B", 0, 0x9701}, /* East Asian ideograph */ {"\x6D", 0, 0x972D}, /* East Asian ideograph */ {"\x6E", 0, 0x96F3}, /* East Asian ideograph */ {"\x6F", 0, 0x7075}, /* East Asian ideograph */ {"\x79", 0, 0x9765}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page288 = { marc8_31page288_flat, 0 }; /* PAGE 287 */ struct yaz_iconv_trie_dir marc8_31page287_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x949F} /* East Asian ideograph */, {0, 0, 0x9524} /* East Asian ideograph */, {0, 0, 0x9539} /* East Asian ideograph */, {0, 0, 0x953B} /* East Asian ideograph */, {0, 0, 0x9551} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9547} /* East Asian ideograph */, {0, 0, 0x9501} /* East Asian ideograph */, {0, 0, 0x94A8} /* East Asian ideograph */, {0, 0, 0x954D} /* East Asian ideograph */, {0, 0, 0x955C} /* East Asian ideograph */, {0, 0, 0x955D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x955E} /* East Asian ideograph */, {0, 0, 0x94F2} /* East Asian ideograph */, {0, 0, 0x94FF} /* East Asian ideograph */, {0, 0, 0x94FE} /* East Asian ideograph */, {0, 0, 0x9556} /* East Asian ideograph */, {0, 0, 0x9557} /* East Asian ideograph */, {0, 0, 0x9542} /* East Asian ideograph */, {0, 0, 0x9558} /* East Asian ideograph */, {0, 0, 0x9559} /* East Asian ideograph */, {0, 0, 0x9535} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x94D9} /* East Asian ideograph */, {0, 0, 0x9570} /* East Asian ideograph */, {0, 0, 0x9508} /* East Asian ideograph */, {0, 0, 0x956D} /* East Asian ideograph */, {0, 0, 0x94C1} /* East Asian ideograph */, {0, 0, 0x94DB} /* East Asian ideograph */, {0, 0, 0x94CE} /* East Asian ideograph */, {0, 0, 0x956F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x94F8} /* East Asian ideograph */, {0, 0, 0x9573} /* East Asian ideograph */, {0, 0, 0x94C4} /* East Asian ideograph */, {0, 0, 0x9576} /* East Asian ideograph */, {0, 0, 0x94A5} /* East Asian ideograph */, {0, 0, 0x92AE} /* East Asian ideograph */, {0, 0, 0x9523} /* East Asian ideograph */, {0, 0, 0x94BB} /* East Asian ideograph */, {0, 0, 0x51FF} /* East Asian ideograph */, {0, 0, 0x957F} /* East Asian ideograph */, {0, 0, 0x95E8} /* East Asian ideograph */, {0, 0, 0x95E9} /* East Asian ideograph */, {0, 0, 0x95EA} /* East Asian ideograph */, {0, 0, 0x95ED} /* East Asian ideograph */, {0, 0, 0x95F5} /* East Asian ideograph */, {0, 0, 0x95F0} /* East Asian ideograph */, {0, 0, 0x5F00} /* East Asian ideograph */, {0, 0, 0x95F2} /* East Asian ideograph */, {0, 0, 0x95F4} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x95F8} /* East Asian ideograph */, {0, 0, 0x9602} /* East Asian ideograph */, {0, 0, 0x95FA} /* East Asian ideograph */, {0, 0, 0x95FD} /* East Asian ideograph */, {0, 0, 0x9601} /* East Asian ideograph */, {0, 0, 0x9600} /* East Asian ideograph */, {0, 0, 0x5408} /* East Asian ideograph */, {0, 0, 0x9605} /* East Asian ideograph */, {0, 0, 0x95FE} /* East Asian ideograph */, {0, 0, 0x960E} /* East Asian ideograph */, {0, 0, 0x9614} /* East Asian ideograph */, {0, 0, 0x9615} /* East Asian ideograph */, {0, 0, 0x9611} /* East Asian ideograph */, {0, 0, 0x95F1} /* East Asian ideograph */, {0, 0, 0x677F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x95EF} /* East Asian ideograph */, {0, 0, 0x9617} /* East Asian ideograph */, {0, 0, 0x5173} /* East Asian ideograph */, {0, 0, 0x9610} /* East Asian ideograph */, {0, 0, 0x8F9F} /* East Asian ideograph (duplicate simplified) */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9635} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page287 = { 0, marc8_31page287_dir }; /* PAGE 286 */ struct yaz_iconv_trie_dir marc8_31page286_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9154} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x915D} /* East Asian ideograph */, {0, 0, 0x4E11} /* East Asian ideograph */, {0, 0, 0x533B} /* East Asian ideograph */, {0, 0, 0x9171} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x917F} /* East Asian ideograph */, {0, 0, 0x8845} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x91CA} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5398} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9488} /* East Asian ideograph */, {0, 0, 0x9489} /* East Asian ideograph */, {0, 0, 0x948A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9497} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9493} /* East Asian ideograph */, {0, 0, 0x948F} /* East Asian ideograph */, {0, 0, 0x9499} /* East Asian ideograph */, {0, 0, 0x949D} /* East Asian ideograph */, {0, 0, 0x94AE} /* East Asian ideograph */, {0, 0, 0x94A0} /* East Asian ideograph */, {0, 0, 0x949E} /* East Asian ideograph */, {0, 0, 0x94A7} /* East Asian ideograph */, {0, 0, 0x94A4} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x94B4} /* East Asian ideograph */, {0, 0, 0x94B9} /* East Asian ideograph */, {0, 0, 0x94B8} /* East Asian ideograph */, {0, 0, 0x94C0} /* East Asian ideograph */, {0, 0, 0x94BE} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x94C5} /* East Asian ideograph */, {0, 0, 0x94A9} /* East Asian ideograph */, {0, 0, 0x94C2} /* East Asian ideograph */, {0, 0, 0x94C3} /* East Asian ideograph */, {0, 0, 0x94F0} /* East Asian ideograph */, {0, 0, 0x94F6} /* East Asian ideograph */, {0, 0, 0x94D0} /* East Asian ideograph */, {0, 0, 0x94DC} /* East Asian ideograph */, {0, 0, 0x94ED} /* East Asian ideograph */, {0, 0, 0x94E2} /* East Asian ideograph */, {0, 0, 0x94EC} /* East Asian ideograph */, {0, 0, 0x94E8} /* East Asian ideograph */, {0, 0, 0x8854} /* East Asian ideograph */, {0, 0, 0x950C} /* East Asian ideograph */, {0, 0, 0x9511} /* East Asian ideograph */, {0, 0, 0x9510} /* East Asian ideograph */, {0, 0, 0x94FA} /* East Asian ideograph */, {0, 0, 0x9500} /* East Asian ideograph */, {0, 0, 0x94DD} /* East Asian ideograph */, {0, 0, 0x9504} /* East Asian ideograph */, {0, 0, 0x9509} /* East Asian ideograph */, {0, 0, 0x950B} /* East Asian ideograph */, {0, 0, 0x952D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x952F} /* East Asian ideograph */, {0, 0, 0x9530} /* East Asian ideograph */, {0, 0, 0x9519} /* East Asian ideograph */, {0, 0, 0x94B1} /* East Asian ideograph */, {0, 0, 0x94A2} /* East Asian ideograph */, {0, 0, 0x9521} /* East Asian ideograph */, {0, 0, 0x94EE} /* East Asian ideograph */, {0, 0, 0x5F55} /* East Asian ideograph */, {0, 0, 0x9525} /* East Asian ideograph */, {0, 0, 0x9526} /* East Asian ideograph */, {0, 0, 0x9540} /* East Asian ideograph */, {0, 0, 0x9541} /* East Asian ideograph */, {0, 0, 0x952E} /* East Asian ideograph */, {0, 0, 0x9532} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9505} /* East Asian ideograph */, {0, 0, 0x951A} /* East Asian ideograph */, {0, 0, 0x953E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page286 = { 0, marc8_31page286_dir }; /* PAGE 285 */ struct yaz_iconv_trie_flat marc8_31page285_flat[] = { {"\x33", 0, 0x8FDB}, /* East Asian ideograph */ {"\x34", 0, 0x8FD0}, /* East Asian ideograph */ {"\x39", 0, 0x8FBE}, /* East Asian ideograph */ {"\x3A", 0, 0x8FDD}, /* East Asian ideograph */ {"\x3C", 0, 0x8FC2}, /* East Asian ideograph */ {"\x3E", 0, 0x8FC7}, /* East Asian ideograph */ {"\x44", 0, 0x8FDC}, /* East Asian ideograph */ {"\x45", 0, 0x900A}, /* East Asian ideograph */ {"\x48", 0, 0x9012}, /* East Asian ideograph */ {"\x49", 0, 0x9002}, /* East Asian ideograph */ {"\x4F", 0, 0x9009}, /* East Asian ideograph */ {"\x50", 0, 0x8FDF}, /* East Asian ideograph */ {"\x51", 0, 0x8FC1}, /* East Asian ideograph */ {"\x52", 0, 0x8FBD}, /* East Asian ideograph */ {"\x53", 0, 0x9057}, /* East Asian ideograph */ {"\x56", 0, 0x8FC8}, /* East Asian ideograph */ {"\x57", 0, 0x8FD8}, /* East Asian ideograph */ {"\x5A", 0, 0x8FE9}, /* East Asian ideograph (variant of EACC 2D5C5A) */ {"\x5B", 0, 0x8FB9}, /* East Asian ideograph */ {"\x5C", 0, 0x9026}, /* East Asian ideograph */ {"\x5D", 0, 0x903B}, /* East Asian ideograph */ {"\x6B", 0, 0x5369}, /* East Asian ideograph */ {"\x6D", 0, 0x90AE}, /* East Asian ideograph */ {"\x70", 0, 0x4E61}, /* East Asian ideograph */ {"\x71", 0, 0x90B9}, /* East Asian ideograph */ {"\x73", 0, 0x90D1}, /* East Asian ideograph */ {"\x74", 0, 0x90BB}, /* East Asian ideograph */ {"\x75", 0, 0x9093}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page285 = { marc8_31page285_flat, 0 }; /* PAGE 284 */ struct yaz_iconv_trie_dir marc8_31page284_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8DB8} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8E0C} /* East Asian ideograph */, {0, 0, 0x8DC3} /* East Asian ideograph */, {0, 0, 0x8E2F} /* East Asian ideograph */, {0, 0, 0x8E51} /* East Asian ideograph */, {0, 0, 0x8E8F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8EAF} /* East Asian ideograph */, {0, 0, 0x8F66} /* East Asian ideograph */, {0, 0, 0x8F67} /* East Asian ideograph */, {0, 0, 0x519B} /* East Asian ideograph */, {0, 0, 0x8F68} /* East Asian ideograph */, {0, 0, 0x8F69} /* East Asian ideograph */, {0, 0, 0x8F6B} /* East Asian ideograph */, {0, 0, 0x8F6F} /* East Asian ideograph */, {0, 0, 0x8F6D} /* East Asian ideograph */, {0, 0, 0x8F72} /* East Asian ideograph */, {0, 0, 0x8F74} /* East Asian ideograph */, {0, 0, 0x8F76} /* East Asian ideograph */, {0, 0, 0x8F83} /* East Asian ideograph */, {0, 0, 0x8F7C} /* East Asian ideograph */, {0, 0, 0x8F7D} /* East Asian ideograph */, {0, 0, 0x8F7E} /* East Asian ideograph */, {0, 0, 0x8F85} /* East Asian ideograph */, {0, 0, 0x8F84} /* East Asian ideograph */, {0, 0, 0x8F7B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8F87} /* East Asian ideograph */, {0, 0, 0x8F86} /* East Asian ideograph */, {0, 0, 0x8F8D} /* East Asian ideograph */, {0, 0, 0x8F89} /* East Asian ideograph */, {0, 0, 0x8F88} /* East Asian ideograph */, {0, 0, 0x8F6E} /* East Asian ideograph */, {0, 0, 0x8F8E} /* East Asian ideograph */, {0, 0, 0x8F90} /* East Asian ideograph */, {0, 0, 0x8F91} /* East Asian ideograph */, {0, 0, 0x8F93} /* East Asian ideograph */, {0, 0, 0x8F96} /* East Asian ideograph */, {0, 0, 0x8F97} /* East Asian ideograph */, {0, 0, 0x8F95} /* East Asian ideograph */, {0, 0, 0x6BC2} /* East Asian ideograph */, {0, 0, 0x8206} /* East Asian ideograph */, {0, 0, 0x8F99} /* East Asian ideograph */, {0, 0, 0x8F6C} /* East Asian ideograph */, {0, 0, 0x8F9A} /* East Asian ideograph */, {0, 0, 0x8F7F} /* East Asian ideograph */, {0, 0, 0x8F70} /* East Asian ideograph */, {0, 0, 0x8F94} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x529E} /* East Asian ideograph */, {0, 0, 0x8F9E} /* East Asian ideograph */, {0, 0, 0x8FA9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x519C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8FF0} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8FD9} /* East Asian ideograph */, {0, 0, 0x8FDE} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page284 = { 0, marc8_31page284_dir }; /* PAGE 283 */ struct yaz_iconv_trie_flat marc8_31page283_flat[] = { {"\x21", 0, 0x8D45}, /* East Asian ideograph */ {"\x22", 0, 0x8D44}, /* East Asian ideograph */ {"\x23", 0, 0x8D3C}, /* East Asian ideograph */ {"\x24", 0, 0x8D3E}, /* East Asian ideograph */ {"\x25", 0, 0x8D3F}, /* East Asian ideograph */ {"\x26", 0, 0x8D40}, /* East Asian ideograph */ {"\x27", 0, 0x8D41}, /* East Asian ideograph */ {"\x28", 0, 0x8D42}, /* East Asian ideograph */ {"\x29", 0, 0x5BBE}, /* East Asian ideograph */ {"\x2A", 0, 0x8D48}, /* East Asian ideograph */ {"\x2B", 0, 0x8D4A}, /* East Asian ideograph */ {"\x2C", 0, 0x8D54}, /* East Asian ideograph */ {"\x2D", 0, 0x8D4B}, /* East Asian ideograph */ {"\x2F", 0, 0x5356}, /* East Asian ideograph */ {"\x30", 0, 0x8D24}, /* East Asian ideograph */ {"\x31", 0, 0x8D31}, /* East Asian ideograph */ {"\x32", 0, 0x8D4F}, /* East Asian ideograph */ {"\x33", 0, 0x8D50}, /* East Asian ideograph */ {"\x34", 0, 0x8D28}, /* East Asian ideograph */ {"\x35", 0, 0x8D4C}, /* East Asian ideograph */ {"\x36", 0, 0x8D56}, /* East Asian ideograph */ {"\x37", 0, 0x8D5B}, /* East Asian ideograph */ {"\x38", 0, 0x8D5A}, /* East Asian ideograph */ {"\x39", 0, 0x8D58}, /* East Asian ideograph */ {"\x3A", 0, 0x8D2D}, /* East Asian ideograph */ {"\x3B", 0, 0x8D60}, /* East Asian ideograph */ {"\x3C", 0, 0x8D5D}, /* East Asian ideograph */ {"\x3D", 0, 0x8D5E}, /* East Asian ideograph */ {"\x3E", 0, 0x8D62}, /* East Asian ideograph */ {"\x3F", 0, 0x8D61}, /* East Asian ideograph */ {"\x40", 0, 0x8D43}, /* East Asian ideograph */ {"\x41", 0, 0x8D4E}, /* East Asian ideograph */ {"\x42", 0, 0x8D63}, /* East Asian ideograph */ {"\x4F", 0, 0x8D75}, /* East Asian ideograph */ {"\x50", 0, 0x8D76}, /* East Asian ideograph */ {"\x53", 0, 0x8D8B}, /* East Asian ideograph */ {"\x68", 0, 0x8DF5}, /* East Asian ideograph */ {"\x71", 0, 0x8E0A}, /* East Asian ideograph */ {"\x78", 0, 0x8E52}, /* East Asian ideograph */ {"\x7E", 0, 0x8DF7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page283 = { marc8_31page283_flat, 0 }; /* PAGE 282 */ struct yaz_iconv_trie_dir marc8_31page282_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8C04} /* East Asian ideograph */, {0, 0, 0x8C01} /* East Asian ideograph */, {0, 0, 0x8BDE} /* East Asian ideograph */, {0, 0, 0x8BBA} /* East Asian ideograph */, {0, 0, 0x8C1B} /* East Asian ideograph */, {0, 0, 0x8C1A} /* East Asian ideograph */, {0, 0, 0x8C0F} /* East Asian ideograph */, {0, 0, 0x8BB3} /* East Asian ideograph */, {0, 0, 0x8C10} /* East Asian ideograph */, {0, 0, 0x8C0D} /* East Asian ideograph */, {0, 0, 0x8C0B} /* East Asian ideograph */, {0, 0, 0x8C12} /* East Asian ideograph */, {0, 0, 0x8C13} /* East Asian ideograph */, {0, 0, 0x8BFA} /* East Asian ideograph */, {0, 0, 0x8BBD} /* East Asian ideograph */, {0, 0, 0x8C15} /* East Asian ideograph */, {0, 0, 0x8C24} /* East Asian ideograph */, {0, 0, 0x8C26} /* East Asian ideograph */, {0, 0, 0x8C1C} /* East Asian ideograph */, {0, 0, 0x8BB2} /* East Asian ideograph */, {0, 0, 0x8C0E} /* East Asian ideograph */, {0, 0, 0x8C23} /* East Asian ideograph */, {0, 0, 0x8A8A} /* East Asian ideograph */, {0, 0, 0x8C22} /* East Asian ideograph */, {0, 0, 0x8C28} /* East Asian ideograph */, {0, 0, 0x8C2C} /* East Asian ideograph */, {0, 0, 0x8C1F} /* East Asian ideograph */, {0, 0, 0x8BC6} /* East Asian ideograph */, {0, 0, 0x8C31} /* East Asian ideograph */, {0, 0, 0x8C32} /* East Asian ideograph */, {0, 0, 0x8BC1} /* East Asian ideograph */, {0, 0, 0x8C2D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8BA5} /* East Asian ideograph */, {0, 0, 0x8BAE} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8BD1} /* East Asian ideograph */, {0, 0, 0x8C34} /* East Asian ideograph */, {0, 0, 0x62A4} /* East Asian ideograph */, {0, 0, 0x8A89} /* East Asian ideograph */, {0, 0, 0x8BFB} /* East Asian ideograph */, {0, 0, 0x53D8} /* East Asian ideograph */, {0, 0, 0x8BA9} /* East Asian ideograph */, {0, 0, 0x8C36} /* East Asian ideograph */, {0, 0, 0x8C17} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5C82} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x7AD6} /* East Asian ideograph */, {0, 0, 0x4E30} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x4E88} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x7683} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8D1D} /* East Asian ideograph */, {0, 0, 0x8D1E} /* East Asian ideograph */, {0, 0, 0x8D1F} /* East Asian ideograph */, {0, 0, 0x8D21} /* East Asian ideograph */, {0, 0, 0x8D22} /* East Asian ideograph */, {0, 0, 0x8D23} /* East Asian ideograph */, {0, 0, 0x8D2F} /* East Asian ideograph */, {0, 0, 0x8D27} /* East Asian ideograph */, {0, 0, 0x8D2A} /* East Asian ideograph */, {0, 0, 0x8D2B} /* East Asian ideograph */, {0, 0, 0x8D29} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8D39} /* East Asian ideograph */, {0, 0, 0x8D32} /* East Asian ideograph */, {0, 0, 0x8D3A} /* East Asian ideograph */, {0, 0, 0x8D35} /* East Asian ideograph */, {0, 0, 0x8D34} /* East Asian ideograph */, {0, 0, 0x4E70} /* East Asian ideograph */, {0, 0, 0x8D2C} /* East Asian ideograph */, {0, 0, 0x8D3B} /* East Asian ideograph */, {0, 0, 0x8D37} /* East Asian ideograph */, {0, 0, 0x8D38} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page282 = { 0, marc8_31page282_dir }; /* PAGE 281 */ struct yaz_iconv_trie_dir marc8_31page281_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x889C} /* East Asian ideograph */, {0, 0, 0x886C} /* East Asian ideograph */, {0, 0, 0x88AD} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x89C1} /* East Asian ideograph */, {0, 0, 0x89C4} /* East Asian ideograph */, {0, 0, 0x89C5} /* East Asian ideograph */, {0, 0, 0x89C6} /* East Asian ideograph */, {0, 0, 0x4EB2} /* East Asian ideograph */, {0, 0, 0x89CE} /* East Asian ideograph */, {0, 0, 0x89CA} /* East Asian ideograph */, {0, 0, 0x89D0} /* East Asian ideograph */, {0, 0, 0x89C9} /* East Asian ideograph */, {0, 0, 0x89C8} /* East Asian ideograph */, {0, 0, 0x89C2} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x89DE} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8BA1} /* East Asian ideograph */, {0, 0, 0x8BA2} /* East Asian ideograph */, {0, 0, 0x8BA3} /* East Asian ideograph */, {0, 0, 0x8BA6} /* East Asian ideograph */, {0, 0, 0x8BB0} /* East Asian ideograph */, {0, 0, 0x8BA8} /* East Asian ideograph */, {0, 0, 0x8BA7} /* East Asian ideograph */, {0, 0, 0x8BAA} /* East Asian ideograph */, {0, 0, 0x8BAF} /* East Asian ideograph */, {0, 0, 0x8BAB} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8BAD} /* East Asian ideograph */, {0, 0, 0x8BBF} /* East Asian ideograph */, {0, 0, 0x8BC0} /* East Asian ideograph */, {0, 0, 0x8BB6} /* East Asian ideograph */, {0, 0, 0x8BB7} /* East Asian ideograph */, {0, 0, 0x8BB8} /* East Asian ideograph */, {0, 0, 0x8BBE} /* East Asian ideograph */, {0, 0, 0x8BB9} /* East Asian ideograph */, {0, 0, 0x8BBC} /* East Asian ideograph */, {0, 0, 0x6CE8} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8BC4} /* East Asian ideograph */, {0, 0, 0x8BCD} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8BC2} /* East Asian ideograph */, {0, 0, 0x8BCF} /* East Asian ideograph */, {0, 0, 0x8BC5} /* East Asian ideograph */, {0, 0, 0x8BC8} /* East Asian ideograph */, {0, 0, 0x8BCB} /* East Asian ideograph */, {0, 0, 0x8BC9} /* East Asian ideograph */, {0, 0, 0x8BCA} /* East Asian ideograph */, {0, 0, 0x8BE7} /* East Asian ideograph */, {0, 0, 0x8BE5} /* East Asian ideograph */, {0, 0, 0x8BE6} /* East Asian ideograph */, {0, 0, 0x8BD5} /* East Asian ideograph */, {0, 0, 0x8BD7} /* East Asian ideograph */, {0, 0, 0x8BD8} /* East Asian ideograph */, {0, 0, 0x8BE3} /* East Asian ideograph */, {0, 0, 0x8BD9} /* East Asian ideograph */, {0, 0, 0x8BDA} /* East Asian ideograph */, {0, 0, 0x5938} /* East Asian ideograph */, {0, 0, 0x8BDB} /* East Asian ideograph */, {0, 0, 0x8BE1} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8BE2} /* East Asian ideograph */, {0, 0, 0x8BDD} /* East Asian ideograph */, {0, 0, 0x8BE0} /* East Asian ideograph */, {0, 0, 0x8BDF} /* East Asian ideograph */, {0, 0, 0x8BF4} /* East Asian ideograph */, {0, 0, 0x8BF5} /* East Asian ideograph */, {0, 0, 0x8BEB} /* East Asian ideograph */, {0, 0, 0x8BED} /* East Asian ideograph */, {0, 0, 0x5FD7} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8BEC} /* East Asian ideograph */, {0, 0, 0x8BA4} /* East Asian ideograph */, {0, 0, 0x8BEF} /* East Asian ideograph */, {0, 0, 0x8BF2} /* East Asian ideograph */, {0, 0, 0x8BF0} /* East Asian ideograph */, {0, 0, 0x8BF1} /* East Asian ideograph */, {0, 0, 0x8BF3} /* East Asian ideograph */, {0, 0, 0x8C0A} /* East Asian ideograph */, {0, 0, 0x8C06} /* East Asian ideograph */, {0, 0, 0x8C05} /* East Asian ideograph */, {0, 0, 0x8C08} /* East Asian ideograph */, {0, 0, 0x8BF7} /* East Asian ideograph */, {0, 0, 0x8BF8} /* East Asian ideograph */, {0, 0, 0x8BFE} /* East Asian ideograph */, {0, 0, 0x8C03} /* East Asian ideograph */, {0, 0, 0x8BFF} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page281 = { 0, marc8_31page281_dir }; /* PAGE 280 */ struct yaz_iconv_trie_flat marc8_31page280_flat[] = { {"\x24", 0, 0x8424}, /* East Asian ideograph */ {"\x25", 0, 0x8682}, /* East Asian ideograph */ {"\x2C", 0, 0x877C}, /* East Asian ideograph */ {"\x32", 0, 0x86F2}, /* East Asian ideograph */ {"\x33", 0, 0x866B}, /* East Asian ideograph */ {"\x34", 0, 0x8749}, /* East Asian ideograph */ {"\x35", 0, 0x8681}, /* East Asian ideograph */ {"\x36", 0, 0x8747}, /* East Asian ideograph */ {"\x3C", 0, 0x86CE}, /* East Asian ideograph */ {"\x3E", 0, 0x8721}, /* East Asian ideograph */ {"\x3F", 0, 0x86CA}, /* East Asian ideograph */ {"\x41", 0, 0x8695}, /* East Asian ideograph */ {"\x42", 0, 0x86EE}, /* East Asian ideograph */ {"\x46", 0, 0x672E}, /* East Asian ideograph */ {"\x47", 0, 0x4E8D}, /* East Asian ideograph */ {"\x49", 0, 0x536B}, /* East Asian ideograph */ {"\x4A", 0, 0x51B2}, /* East Asian ideograph (duplicate simplified) */ {"\x62", 0, 0x8865}, /* East Asian ideograph */ {"\x63", 0, 0x91CC}, /* East Asian ideograph */ {"\x65", 0, 0x88C5}, /* East Asian ideograph */ {"\x6C", 0, 0x5236}, /* East Asian ideograph */ {"\x71", 0, 0x8934}, /* East Asian ideograph */ {"\x73", 0, 0x88E4}, /* East Asian ideograph */ {"\x77", 0, 0x4EB5}, /* East Asian ideograph */ {"\x79", 0, 0x891B}, /* East Asian ideograph */ {"\x7C", 0, 0x88C6}, /* East Asian ideograph */ {"\x7D", 0, 0x8884}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page280 = { marc8_31page280_flat, 0 }; /* PAGE 279 */ struct yaz_iconv_trie_flat marc8_31page279_flat[] = { {"\x22", 0, 0x8427}, /* East Asian ideograph */ {"\x24", 0, 0x59DC}, /* East Asian ideograph */ {"\x26", 0, 0x8537}, /* East Asian ideograph */ {"\x29", 0, 0x84DD}, /* East Asian ideograph */ {"\x2A", 0, 0x8428}, /* East Asian ideograph */ {"\x2E", 0, 0x501F}, /* East Asian ideograph */ {"\x31", 0, 0x827A}, /* East Asian ideograph */ {"\x32", 0, 0x85AE}, /* East Asian ideograph */ {"\x35", 0, 0x836F}, /* East Asian ideograph */ {"\x37", 0, 0x853C}, /* East Asian ideograph */ {"\x39", 0, 0x853A}, /* East Asian ideograph */ {"\x3A", 0, 0x82A6}, /* East Asian ideograph */ {"\x3B", 0, 0x82F9}, /* East Asian ideograph */ {"\x3C", 0, 0x82CF}, /* East Asian ideograph */ {"\x3D", 0, 0x8574}, /* East Asian ideograph */ {"\x3E", 0, 0x5170}, /* East Asian ideograph */ {"\x40", 0, 0x85D3}, /* East Asian ideograph */ {"\x42", 0, 0x841D}, /* East Asian ideograph */ {"\x44", 0, 0x4E47}, /* East Asian ideograph */ {"\x47", 0, 0x5904}, /* East Asian ideograph */ {"\x48", 0, 0x864F}, /* East Asian ideograph */ {"\x4A", 0, 0x53F7}, /* East Asian ideograph */ {"\x4C", 0, 0x4E8F}, /* East Asian ideograph */ {"\x5A", 0, 0x65E6}, /* East Asian ideograph */ {"\x76", 0, 0x8680}, /* East Asian ideograph */ {"\x79", 0, 0x80E1}, /* East Asian ideograph (duplicate simplified) */ {"\x7A", 0, 0x867E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page279 = { marc8_31page279_flat, 0 }; /* PAGE 278 */ struct yaz_iconv_trie_flat marc8_31page278_flat[] = { {"\x28", 0, 0x835A}, /* East Asian ideograph */ {"\x29", 0, 0x830E}, /* East Asian ideograph */ {"\x2A", 0, 0x82CB}, /* East Asian ideograph */ {"\x2D", 0, 0x5E84}, /* East Asian ideograph */ {"\x3C", 0, 0x534E}, /* East Asian ideograph */ {"\x41", 0, 0x83B1}, /* East Asian ideograph */ {"\x4D", 0, 0x82C7}, /* East Asian ideograph */ {"\x4F", 0, 0x53F6}, /* East Asian ideograph */ {"\x51", 0, 0x80E1}, /* East Asian ideograph (duplicate simplified) */ {"\x53", 0, 0x8364}, /* East Asian ideograph */ {"\x55", 0, 0x83B4}, /* East Asian ideograph */ {"\x5D", 0, 0x5E2D}, /* East Asian ideograph */ {"\x63", 0, 0x836A}, /* East Asian ideograph */ {"\x64", 0, 0x82CE}, /* East Asian ideograph */ {"\x67", 0, 0x82CD}, /* East Asian ideograph */ {"\x68", 0, 0x8298}, /* East Asian ideograph */ {"\x6C", 0, 0x83B2}, /* East Asian ideograph */ {"\x6E", 0, 0x836B}, /* East Asian ideograph */ {"\x71", 0, 0x848B}, /* East Asian ideograph */ {"\x73", 0, 0x535C}, /* East Asian ideograph */ {"\x76", 0, 0x8361}, /* East Asian ideograph */ {"\x7C", 0, 0x829C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page278 = { marc8_31page278_flat, 0 }; /* PAGE 277 */ struct yaz_iconv_trie_flat marc8_31page277_flat[] = { {"\x21", 0, 0x80EA}, /* East Asian ideograph */ {"\x22", 0, 0x810F}, /* East Asian ideograph (duplicate simplified) */ {"\x25", 0, 0x4E34}, /* East Asian ideograph */ {"\x2B", 0, 0x53F0}, /* East Asian ideograph */ {"\x32", 0, 0x4E0E}, /* East Asian ideograph */ {"\x33", 0, 0x5174}, /* East Asian ideograph */ {"\x34", 0, 0x4E3E}, /* East Asian ideograph */ {"\x35", 0, 0x65E7}, /* East Asian ideograph */ {"\x4A", 0, 0x8231}, /* East Asian ideograph */ {"\x4B", 0, 0x8230}, /* East Asian ideograph */ {"\x4E", 0, 0x8270}, /* East Asian ideograph */ {"\x58", 0, 0x5DF4}, /* East Asian ideograph (duplicate simplified) */ {"\x5C", 0, 0x520D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page277 = { marc8_31page277_flat, 0 }; /* PAGE 276 */ struct yaz_iconv_trie_flat marc8_31page276_flat[] = { {"\x21", 0, 0x8083}, /* East Asian ideograph */ {"\x44", 0, 0x80C1}, /* East Asian ideograph */ {"\x4A", 0, 0x8090}, /* East Asian ideograph */ {"\x4D", 0, 0x8109}, /* East Asian ideograph */ {"\x58", 0, 0x80BE}, /* East Asian ideograph */ {"\x59", 0, 0x80C0}, /* East Asian ideograph */ {"\x5E", 0, 0x80A0}, /* East Asian ideograph */ {"\x62", 0, 0x80BF}, /* East Asian ideograph */ {"\x65", 0, 0x8111}, /* East Asian ideograph */ {"\x6C", 0, 0x80F6}, /* East Asian ideograph */ {"\x6E", 0, 0x80A4}, /* East Asian ideograph */ {"\x71", 0, 0x817B}, /* East Asian ideograph */ {"\x78", 0, 0x8113}, /* East Asian ideograph */ {"\x79", 0, 0x80C6}, /* East Asian ideograph */ {"\x7A", 0, 0x8138}, /* East Asian ideograph */ {"\x7B", 0, 0x810D}, /* East Asian ideograph */ {"\x7C", 0, 0x8110}, /* East Asian ideograph */ {"\x7D", 0, 0x8191}, /* East Asian ideograph */ {"\x7E", 0, 0x814A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page276 = { marc8_31page276_flat, 0 }; /* PAGE 275 */ struct yaz_iconv_trie_flat marc8_31page275_flat[] = { {"\x21", 0, 0x7EED}, /* East Asian ideograph */ {"\x22", 0, 0x7F28}, /* East Asian ideograph */ {"\x23", 0, 0x7EA4}, /* East Asian ideograph */ {"\x24", 0, 0x7F06}, /* East Asian ideograph */ {"\x33", 0, 0x7F5A}, /* East Asian ideograph */ {"\x34", 0, 0x9A82}, /* East Asian ideograph */ {"\x35", 0, 0x7F62}, /* East Asian ideograph */ {"\x37", 0, 0x7F57}, /* East Asian ideograph */ {"\x38", 0, 0x7F81}, /* East Asian ideograph */ {"\x42", 0, 0x4E49}, /* East Asian ideograph */ {"\x4D", 0, 0x4E60}, /* East Asian ideograph */ {"\x51", 0, 0x7FC6}, /* East Asian ideograph */ {"\x58", 0, 0x7FD8}, /* East Asian ideograph */ {"\x6F", 0, 0x5723}, /* East Asian ideograph */ {"\x71", 0, 0x95FB}, /* East Asian ideograph */ {"\x74", 0, 0x58F0}, /* East Asian ideograph */ {"\x75", 0, 0x8038}, /* East Asian ideograph */ {"\x76", 0, 0x806A}, /* East Asian ideograph */ {"\x77", 0, 0x8054}, /* East Asian ideograph */ {"\x78", 0, 0x804C}, /* East Asian ideograph */ {"\x79", 0, 0x8042}, /* East Asian ideograph */ {"\x7A", 0, 0x804B}, /* East Asian ideograph */ {"\x7B", 0, 0x542C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page275 = { marc8_31page275_flat, 0 }; /* PAGE 274 */ struct yaz_iconv_trie_dir marc8_31page274_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x7EB1} /* East Asian ideograph */, {0, 0, 0x7EB3} /* East Asian ideograph */, {0, 0, 0x7EA7} /* East Asian ideograph */, {0, 0, 0x7EB8} /* East Asian ideograph */, {0, 0, 0x7EB7} /* East Asian ideograph */, {0, 0, 0x7ECA} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7ECB} /* East Asian ideograph */, {0, 0, 0x624E} /* East Asian ideograph */, {0, 0, 0x7ECD} /* East Asian ideograph */, {0, 0, 0x7EC4} /* East Asian ideograph */, {0, 0, 0x7EC6} /* East Asian ideograph */, {0, 0, 0x7EC5} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7ECC} /* East Asian ideograph */, {0, 0, 0x7EC8} /* East Asian ideograph */, {0, 0, 0x7EDF} /* East Asian ideograph */, {0, 0, 0x7EDE} /* East Asian ideograph */, {0, 0, 0x7ED2} /* East Asian ideograph */, {0, 0, 0x7ED3} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7EDA} /* East Asian ideograph */, {0, 0, 0x7EDD} /* East Asian ideograph */, {0, 0, 0x7EDC} /* East Asian ideograph */, {0, 0, 0x7ED9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4E1D} /* East Asian ideograph */, {0, 0, 0x7ECF} /* East Asian ideograph */, {0, 0, 0x6346} /* East Asian ideograph */, {0, 0, 0x7EE2} /* East Asian ideograph */, {0, 0, 0x7EE5} /* East Asian ideograph */, {0, 0, 0x7ED1} /* East Asian ideograph */, {0, 0, 0x7EFC} /* East Asian ideograph */, {0, 0, 0x7EFD} /* East Asian ideograph */, {0, 0, 0x7EFE} /* East Asian ideograph */, {0, 0, 0x7D27} /* East Asian ideograph */, {0, 0, 0x7EEB} /* East Asian ideograph */, {0, 0, 0x7F00} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7F51} /* East Asian ideograph */, {0, 0, 0x7EB2} /* East Asian ideograph */, {0, 0, 0x7EF0} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7EFF} /* East Asian ideograph */, {0, 0, 0x7EF8} /* East Asian ideograph */, {0, 0, 0x7EF4} /* East Asian ideograph */, {0, 0, 0x7EF5} /* East Asian ideograph */, {0, 0, 0x7EB6} /* East Asian ideograph */, {0, 0, 0x7F01} /* East Asian ideograph */, {0, 0, 0x7F14} /* East Asian ideograph */, {0, 0, 0x7EAC} /* East Asian ideograph */, {0, 0, 0x7EC3} /* East Asian ideograph */, {0, 0, 0x7EEA} /* East Asian ideograph */, {0, 0, 0x7F04} /* East Asian ideograph */, {0, 0, 0x7F05} /* East Asian ideograph */, {0, 0, 0x7F09} /* East Asian ideograph */, {0, 0, 0x7F13} /* East Asian ideograph */, {0, 0, 0x7F18} /* East Asian ideograph */, {0, 0, 0x7F16} /* East Asian ideograph */, {0, 0, 0x7EBF} /* East Asian ideograph */, {0, 0, 0x7F0D} /* East Asian ideograph */, {0, 0, 0x7F0E} /* East Asian ideograph */, {0, 0, 0x7F23} /* East Asian ideograph */, {0, 0, 0x7F22} /* East Asian ideograph */, {0, 0, 0x8426} /* East Asian ideograph */, {0, 0, 0x7F1A} /* East Asian ideograph */, {0, 0, 0x81F4} /* East Asian ideograph */, {0, 0, 0x53BF} /* East Asian ideograph (variant of EACC 455164) */, {0, 0, 0x7F29} /* East Asian ideograph */, {0, 0, 0x7EE9} /* East Asian ideograph */, {0, 0, 0x7F2A} /* East Asian ideograph */, {0, 0, 0x7F15} /* East Asian ideograph */, {0, 0, 0x7F27} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x7F1D} /* East Asian ideograph */, {0, 0, 0x603B} /* East Asian ideograph */, {0, 0, 0x7EB5} /* East Asian ideograph */, {0, 0, 0x7F2B} /* East Asian ideograph */, {0, 0, 0x7F2E} /* East Asian ideograph */, {0, 0, 0x7EC7} /* East Asian ideograph */, {0, 0, 0x7EE3} /* East Asian ideograph */, {0, 0, 0x7ED5} /* East Asian ideograph */, {0, 0, 0x7F2D} /* East Asian ideograph */, {0, 0, 0x7CFB} /* East Asian ideograph (duplicate simplified) */, {0, 0, 0x7EF3} /* East Asian ideograph */, {0, 0, 0x8327} /* East Asian ideograph */, {0, 0, 0x7ECE} /* East Asian ideograph */, {0, 0, 0x7ED8} /* East Asian ideograph */, {0, 0, 0x8FAB} /* East Asian ideograph */, {0, 0, 0x7F24} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7EE7} /* East Asian ideograph */, {0, 0, 0x7F20} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page274 = { 0, marc8_31page274_dir }; /* PAGE 273 */ struct yaz_iconv_trie_flat marc8_31page273_flat[] = { {"\x21", 0, 0x7B0B}, /* East Asian ideograph */ {"\x23", 0, 0x8345}, /* East Asian ideograph */ {"\x2A", 0, 0x94B3}, /* East Asian ideograph */ {"\x2B", 0, 0x7B3A}, /* East Asian ideograph */ {"\x30", 0, 0x8303}, /* East Asian ideograph */ {"\x33", 0, 0x8282}, /* East Asian ideograph */ {"\x38", 0, 0x7BAC}, /* East Asian ideograph */ {"\x39", 0, 0x7B03}, /* East Asian ideograph */ {"\x3A", 0, 0x7B51}, /* East Asian ideograph */ {"\x3C", 0, 0x7B5B}, /* East Asian ideograph */ {"\x3E", 0, 0x7BD3}, /* East Asian ideograph */ {"\x41", 0, 0x7B80}, /* East Asian ideograph */ {"\x42", 0, 0x7BAB}, /* East Asian ideograph */ {"\x45", 0, 0x7BAA}, /* East Asian ideograph */ {"\x46", 0, 0x7BD1}, /* East Asian ideograph */ {"\x48", 0, 0x5E18}, /* East Asian ideograph */ {"\x4B", 0, 0x7B7E}, /* East Asian ideograph */ {"\x4C", 0, 0x7BEE}, /* East Asian ideograph */ {"\x4D", 0, 0x7B79}, /* East Asian ideograph */ {"\x50", 0, 0x7B3C}, /* East Asian ideograph */ {"\x51", 0, 0x7C41}, /* East Asian ideograph */ {"\x52", 0, 0x7B7E}, /* East Asian ideograph (duplicate simplified) */ {"\x53", 0, 0x7BF1}, /* East Asian ideograph */ {"\x54", 0, 0x7BA9}, /* East Asian ideograph */ {"\x55", 0, 0x5401}, /* East Asian ideograph */ {"\x60", 0, 0x7C8B}, /* East Asian ideograph */ {"\x62", 0, 0x80E1}, /* East Asian ideograph (duplicate simplified) */ {"\x68", 0, 0x7CAA}, /* East Asian ideograph */ {"\x6B", 0, 0x7CAE}, /* East Asian ideograph */ {"\x6F", 0, 0x7EA0}, /* East Asian ideograph */ {"\x70", 0, 0x7EAA}, /* East Asian ideograph */ {"\x71", 0, 0x7EA3}, /* East Asian ideograph */ {"\x72", 0, 0x7EA2}, /* East Asian ideograph */ {"\x73", 0, 0x7EAB}, /* East Asian ideograph */ {"\x74", 0, 0x7EA6}, /* East Asian ideograph */ {"\x75", 0, 0x7EA5}, /* East Asian ideograph */ {"\x76", 0, 0x7EBA}, /* East Asian ideograph */ {"\x77", 0, 0x7EB9}, /* East Asian ideograph */ {"\x7A", 0, 0x7EAD}, /* East Asian ideograph */ {"\x7C", 0, 0x7EB0}, /* East Asian ideograph */ {"\x7D", 0, 0x7EAF}, /* East Asian ideograph */ {"\x7E", 0, 0x7EBD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page273 = { marc8_31page273_flat, 0 }; /* PAGE 272 */ struct yaz_iconv_trie_flat marc8_31page272_flat[] = { {"\x22", 0, 0x4E07}, /* East Asian ideograph */ {"\x25", 0, 0x53B6}, /* East Asian ideograph */ {"\x36", 0, 0x5E0C}, /* East Asian ideograph */ {"\x3C", 0, 0x79F0}, /* East Asian ideograph */ {"\x3D", 0, 0x79CD}, /* East Asian ideograph */ {"\x40", 0, 0x8C37}, /* East Asian ideograph */ {"\x44", 0, 0x79EF}, /* East Asian ideograph */ {"\x46", 0, 0x7A23}, /* East Asian ideograph */ {"\x49", 0, 0x7A51}, /* East Asian ideograph */ {"\x4A", 0, 0x79FD}, /* East Asian ideograph */ {"\x4B", 0, 0x83B7}, /* East Asian ideograph (duplicate simplified) */ {"\x4C", 0, 0x7A33}, /* East Asian ideograph */ {"\x5C", 0, 0x6D3C}, /* East Asian ideograph */ {"\x5D", 0, 0x7A9D}, /* East Asian ideograph */ {"\x5F", 0, 0x7A77}, /* East Asian ideograph */ {"\x60", 0, 0x7AA5}, /* East Asian ideograph */ {"\x61", 0, 0x7A8D}, /* East Asian ideograph */ {"\x62", 0, 0x7A9C}, /* East Asian ideograph */ {"\x63", 0, 0x7AA6}, /* East Asian ideograph */ {"\x64", 0, 0x7A83}, /* East Asian ideograph */ {"\x6B", 0, 0x7ADE}, /* East Asian ideograph */ {"\x70", 0, 0x5DF4}, /* East Asian ideograph (duplicate simplified) */ {"\x79", 0, 0x7B14}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page272 = { marc8_31page272_flat, 0 }; /* PAGE 271 */ struct yaz_iconv_trie_flat marc8_31page271_flat[] = { {"\x27", 0, 0x77EB}, /* East Asian ideograph */ {"\x3B", 0, 0x781A}, /* East Asian ideograph */ {"\x3E", 0, 0x7815}, /* East Asian ideograph */ {"\x45", 0, 0x7855}, /* East Asian ideograph */ {"\x49", 0, 0x786E}, /* East Asian ideograph */ {"\x4C", 0, 0x7801}, /* East Asian ideograph */ {"\x53", 0, 0x7816}, /* East Asian ideograph */ {"\x58", 0, 0x77F6}, /* East Asian ideograph */ {"\x59", 0, 0x7840}, /* East Asian ideograph */ {"\x5A", 0, 0x788D}, /* East Asian ideograph */ {"\x5B", 0, 0x77FF}, /* East Asian ideograph */ {"\x5C", 0, 0x77FE}, /* East Asian ideograph */ {"\x5D", 0, 0x783A}, /* East Asian ideograph */ {"\x5E", 0, 0x783E}, /* East Asian ideograph */ {"\x6F", 0, 0x53EA}, /* East Asian ideograph (duplicate simplified) */ {"\x77", 0, 0x7978}, /* East Asian ideograph */ {"\x78", 0, 0x796F}, /* East Asian ideograph */ {"\x7B", 0, 0x7985}, /* East Asian ideograph */ {"\x7C", 0, 0x793C}, /* East Asian ideograph */ {"\x7D", 0, 0x7977}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page271 = { marc8_31page271_flat, 0 }; /* PAGE 270 */ struct yaz_iconv_trie_flat marc8_31page270_flat[] = { {"\x29", 0, 0x7691}, /* East Asian ideograph */ {"\x2D", 0, 0x76B1}, /* East Asian ideograph */ {"\x3A", 0, 0x76CF}, /* East Asian ideograph */ {"\x3C", 0, 0x5C3D}, /* East Asian ideograph */ {"\x3D", 0, 0x76D1}, /* East Asian ideograph */ {"\x3E", 0, 0x76D8}, /* East Asian ideograph */ {"\x3F", 0, 0x5362}, /* East Asian ideograph */ {"\x56", 0, 0x4F17}, /* East Asian ideograph */ {"\x57", 0, 0x56F0}, /* East Asian ideograph */ {"\x5D", 0, 0x7750}, /* East Asian ideograph */ {"\x73", 0, 0x4E86}, /* East Asian ideograph */ {"\x7C", 0, 0x77A9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page270 = { marc8_31page270_flat, 0 }; /* PAGE 269 */ struct yaz_iconv_trie_flat marc8_31page269_flat[] = { {"\x2D", 0, 0x4EA9}, /* East Asian ideograph */ {"\x31", 0, 0x7544}, /* East Asian ideograph */ {"\x33", 0, 0x6BD5}, /* East Asian ideograph */ {"\x34", 0, 0x5F02}, /* East Asian ideograph */ {"\x36", 0, 0x753B}, /* East Asian ideograph */ {"\x39", 0, 0x5F53}, /* East Asian ideograph */ {"\x3B", 0, 0x7574}, /* East Asian ideograph */ {"\x3C", 0, 0x8FED}, /* East Asian ideograph */ {"\x56", 0, 0x75C9}, /* East Asian ideograph */ {"\x60", 0, 0x75A1}, /* East Asian ideograph */ {"\x61", 0, 0x759F}, /* East Asian ideograph */ {"\x62", 0, 0x75EA}, /* East Asian ideograph */ {"\x63", 0, 0x75AF}, /* East Asian ideograph */ {"\x6A", 0, 0x75AE}, /* East Asian ideograph */ {"\x6D", 0, 0x75E8}, /* East Asian ideograph */ {"\x6E", 0, 0x7597}, /* East Asian ideograph */ {"\x71", 0, 0x75A0}, /* East Asian ideograph */ {"\x73", 0, 0x75D2}, /* East Asian ideograph */ {"\x75", 0, 0x765E}, /* East Asian ideograph */ {"\x76", 0, 0x763E}, /* East Asian ideograph */ {"\x77", 0, 0x7663}, /* East Asian ideograph */ {"\x78", 0, 0x762B}, /* East Asian ideograph */ {"\x79", 0, 0x766B}, /* East Asian ideograph */ {"\x7B", 0, 0x53D1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page269 = { marc8_31page269_flat, 0 }; /* PAGE 268 */ struct yaz_iconv_trie_flat marc8_31page268_flat[] = { {"\x22", 0, 0x72EF}, /* East Asian ideograph */ {"\x23", 0, 0x72EE}, /* East Asian ideograph */ {"\x27", 0, 0x72EC}, /* East Asian ideograph */ {"\x28", 0, 0x72DE}, /* East Asian ideograph */ {"\x29", 0, 0x83B7}, /* East Asian ideograph */ {"\x2A", 0, 0x72B7}, /* East Asian ideograph */ {"\x2B", 0, 0x517D}, /* East Asian ideograph */ {"\x2C", 0, 0x730E}, /* East Asian ideograph */ {"\x2D", 0, 0x736D}, /* East Asian ideograph */ {"\x2E", 0, 0x732E}, /* East Asian ideograph */ {"\x2F", 0, 0x7321}, /* East Asian ideograph */ {"\x47", 0, 0x73B0}, /* East Asian ideograph */ {"\x57", 0, 0x73F2}, /* East Asian ideograph */ {"\x5E", 0, 0x739B}, /* East Asian ideograph */ {"\x5F", 0, 0x7410}, /* East Asian ideograph */ {"\x64", 0, 0x7391}, /* East Asian ideograph */ {"\x67", 0, 0x73AF}, /* East Asian ideograph */ {"\x68", 0, 0x7477}, /* East Asian ideograph */ {"\x69", 0, 0x73BA}, /* East Asian ideograph */ {"\x6B", 0, 0x73D1}, /* East Asian ideograph */ {"\x74", 0, 0x74EF}, /* East Asian ideograph */ {"\x7A", 0, 0x4EA7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page268 = { marc8_31page268_flat, 0 }; /* PAGE 267 */ struct yaz_iconv_trie_flat marc8_31page267_flat[] = { {"\x21", 0, 0x70BD}, /* East Asian ideograph */ {"\x22", 0, 0x7096}, /* East Asian ideograph */ {"\x24", 0, 0x706F}, /* East Asian ideograph */ {"\x25", 0, 0x7116}, /* East Asian ideograph */ {"\x26", 0, 0x70E7}, /* East Asian ideograph */ {"\x2E", 0, 0x8425}, /* East Asian ideograph */ {"\x30", 0, 0x70DB}, /* East Asian ideograph */ {"\x31", 0, 0x707F}, /* East Asian ideograph */ {"\x33", 0, 0x70E9}, /* East Asian ideograph */ {"\x36", 0, 0x70C1}, /* East Asian ideograph */ {"\x37", 0, 0x7089}, /* East Asian ideograph */ {"\x38", 0, 0x70C2}, /* East Asian ideograph */ {"\x42", 0, 0x7237}, /* East Asian ideograph */ {"\x45", 0, 0x5C14}, /* East Asian ideograph */ {"\x46", 0, 0x5899}, /* East Asian ideograph */ {"\x4C", 0, 0x724D}, /* East Asian ideograph */ {"\x53", 0, 0x5B83}, /* East Asian ideograph */ {"\x5A", 0, 0x7275}, /* East Asian ideograph */ {"\x5E", 0, 0x8366}, /* East Asian ideograph */ {"\x61", 0, 0x728A}, /* East Asian ideograph */ {"\x62", 0, 0x727A}, /* East Asian ideograph */ {"\x68", 0, 0x72B6}, /* East Asian ideograph */ {"\x70", 0, 0x72ED}, /* East Asian ideograph */ {"\x72", 0, 0x72C8}, /* East Asian ideograph */ {"\x79", 0, 0x72B9}, /* East Asian ideograph */ {"\x7E", 0, 0x72F1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page267 = { marc8_31page267_flat, 0 }; /* PAGE 266 */ struct yaz_iconv_trie_flat marc8_31page266_flat[] = { {"\x21", 0, 0x6CFD}, /* East Asian ideograph */ {"\x22", 0, 0x6D4A}, /* East Asian ideograph */ {"\x26", 0, 0x6D4E}, /* East Asian ideograph */ {"\x27", 0, 0x6CDE}, /* East Asian ideograph */ {"\x28", 0, 0x6EE8}, /* East Asian ideograph */ {"\x2B", 0, 0x6EE5}, /* East Asian ideograph */ {"\x2D", 0, 0x6D9B}, /* East Asian ideograph */ {"\x2E", 0, 0x6DA9}, /* East Asian ideograph */ {"\x31", 0, 0x6C88}, /* East Asian ideograph */ {"\x32", 0, 0x6CFB}, /* East Asian ideograph */ {"\x33", 0, 0x6E0E}, /* East Asian ideograph */ {"\x34", 0, 0x6E85}, /* East Asian ideograph */ {"\x36", 0, 0x6EE4}, /* East Asian ideograph */ {"\x37", 0, 0x6D4F}, /* East Asian ideograph */ {"\x3A", 0, 0x6FD1}, /* East Asian ideograph */ {"\x3B", 0, 0x6CA5}, /* East Asian ideograph */ {"\x3C", 0, 0x6FD2}, /* East Asian ideograph */ {"\x3D", 0, 0x6F47}, /* East Asian ideograph */ {"\x3F", 0, 0x6F9C}, /* East Asian ideograph */ {"\x41", 0, 0x6D12}, /* East Asian ideograph */ {"\x42", 0, 0x6EE9}, /* East Asian ideograph */ {"\x43", 0, 0x6E7E}, /* East Asian ideograph */ {"\x44", 0, 0x6EE6}, /* East Asian ideograph */ {"\x4A", 0, 0x707E}, /* East Asian ideograph */ {"\x51", 0, 0x4E3A}, /* East Asian ideograph */ {"\x5D", 0, 0x4E4C}, /* East Asian ideograph */ {"\x66", 0, 0x65E0}, /* East Asian ideograph */ {"\x6A", 0, 0x70BC}, /* East Asian ideograph */ {"\x6D", 0, 0x70E6}, /* East Asian ideograph */ {"\x6F", 0, 0x7080}, /* East Asian ideograph */ {"\x75", 0, 0x6247}, /* East Asian ideograph */ {"\x7D", 0, 0x70ED}, /* East Asian ideograph */ {"\x7E", 0, 0x70EB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page266 = { marc8_31page266_flat, 0 }; /* PAGE 265 */ struct yaz_iconv_trie_flat marc8_31page265_flat[] = { {"\x2D", 0, 0x6C64}, /* East Asian ideograph */ {"\x30", 0, 0x6D4B}, /* East Asian ideograph */ {"\x31", 0, 0x6DA1}, /* East Asian ideograph */ {"\x33", 0, 0x6D51}, /* East Asian ideograph */ {"\x3D", 0, 0x6C9F}, /* East Asian ideograph */ {"\x41", 0, 0x6C85}, /* East Asian ideograph */ {"\x42", 0, 0x706D}, /* East Asian ideograph */ {"\x44", 0, 0x6E7F}, /* East Asian ideograph */ {"\x48", 0, 0x6CA7}, /* East Asian ideograph */ {"\x4B", 0, 0x51C6}, /* East Asian ideograph */ {"\x4F", 0, 0x6CAA}, /* East Asian ideograph */ {"\x54", 0, 0x6E0D}, /* East Asian ideograph */ {"\x55", 0, 0x6DA8}, /* East Asian ideograph */ {"\x57", 0, 0x6C49}, /* East Asian ideograph */ {"\x58", 0, 0x6EE1}, /* East Asian ideograph */ {"\x59", 0, 0x6D9F}, /* East Asian ideograph */ {"\x5A", 0, 0x6E10}, /* East Asian ideograph */ {"\x5F", 0, 0x6EDE}, /* East Asian ideograph */ {"\x63", 0, 0x6D46}, /* East Asian ideograph */ {"\x64", 0, 0x6E17}, /* East Asian ideograph */ {"\x65", 0, 0x6E14}, /* East Asian ideograph */ {"\x6C", 0, 0x6CFC}, /* East Asian ideograph */ {"\x6D", 0, 0x6DA6}, /* East Asian ideograph */ {"\x6E", 0, 0x6DA7}, /* East Asian ideograph */ {"\x6F", 0, 0x6D01}, /* East Asian ideograph */ {"\x71", 0, 0x6D47}, /* East Asian ideograph */ {"\x78", 0, 0x6E83}, /* East Asian ideograph */ {"\x7B", 0, 0x6DC0}, /* East Asian ideograph */ {"\x7C", 0, 0x6D53}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page265 = { marc8_31page265_flat, 0 }; /* PAGE 264 */ struct yaz_iconv_trie_flat marc8_31page264_flat[] = { {"\x4E", 0, 0x6CFE}, /* East Asian ideograph */ {"\x59", 0, 0x6CEA}, /* East Asian ideograph */ {"\x68", 0, 0x6D45}, /* East Asian ideograph */ {"\x74", 0, 0x6E0A}, /* East Asian ideograph */ {"\x77", 0, 0x6CA6}, /* East Asian ideograph */ {"\x7D", 0, 0x6D8C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page264 = { marc8_31page264_flat, 0 }; /* PAGE 263 */ struct yaz_iconv_trie_flat marc8_31page263_flat[] = { {"\x21", 0, 0x6B22}, /* East Asian ideograph */ {"\x29", 0, 0x5C81}, /* East Asian ideograph */ {"\x2A", 0, 0x5386}, /* East Asian ideograph */ {"\x2B", 0, 0x5F52}, /* East Asian ideograph */ {"\x33", 0, 0x6B8B}, /* East Asian ideograph */ {"\x35", 0, 0x6B87}, /* East Asian ideograph */ {"\x36", 0, 0x6B93}, /* East Asian ideograph */ {"\x37", 0, 0x6BA1}, /* East Asian ideograph */ {"\x38", 0, 0x6B7C}, /* East Asian ideograph */ {"\x3B", 0, 0x6740}, /* East Asian ideograph */ {"\x3C", 0, 0x58F3}, /* East Asian ideograph */ {"\x40", 0, 0x6BB4}, /* East Asian ideograph */ {"\x55", 0, 0x6C14}, /* East Asian ideograph */ {"\x58", 0, 0x6C22}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page263 = { marc8_31page263_flat, 0 }; /* PAGE 262 */ struct yaz_iconv_trie_flat marc8_31page262_flat[] = { {"\x26", 0, 0x6781}, /* East Asian ideograph */ {"\x2A", 0, 0x6768}, /* East Asian ideograph */ {"\x2B", 0, 0x6862}, /* East Asian ideograph */ {"\x2D", 0, 0x4E1A}, /* East Asian ideograph */ {"\x2F", 0, 0x67AB}, /* East Asian ideograph */ {"\x37", 0, 0x8363}, /* East Asian ideograph */ {"\x39", 0, 0x6784}, /* East Asian ideograph */ {"\x40", 0, 0x67AA}, /* East Asian ideograph */ {"\x44", 0, 0x6837}, /* East Asian ideograph */ {"\x46", 0, 0x6869}, /* East Asian ideograph */ {"\x47", 0, 0x6807}, /* East Asian ideograph */ {"\x49", 0, 0x67A2}, /* East Asian ideograph */ {"\x4A", 0, 0x697C}, /* East Asian ideograph */ {"\x4C", 0, 0x6868}, /* East Asian ideograph */ {"\x4E", 0, 0x4E50}, /* East Asian ideograph */ {"\x4F", 0, 0x679E}, /* East Asian ideograph */ {"\x53", 0, 0x692D}, /* East Asian ideograph */ {"\x55", 0, 0x6811}, /* East Asian ideograph */ {"\x57", 0, 0x6866}, /* East Asian ideograph */ {"\x58", 0, 0x6734}, /* East Asian ideograph */ {"\x5B", 0, 0x6865}, /* East Asian ideograph */ {"\x5D", 0, 0x673A}, /* East Asian ideograph */ {"\x5F", 0, 0x6863}, /* East Asian ideograph */ {"\x61", 0, 0x68C0}, /* East Asian ideograph */ {"\x62", 0, 0x6867}, /* East Asian ideograph */ {"\x63", 0, 0x67E0}, /* East Asian ideograph */ {"\x64", 0, 0x69DF}, /* East Asian ideograph */ {"\x65", 0, 0x67DC}, /* East Asian ideograph */ {"\x66", 0, 0x69DB}, /* East Asian ideograph */ {"\x6A", 0, 0x6988}, /* East Asian ideograph */ {"\x6B", 0, 0x691F}, /* East Asian ideograph */ {"\x6C", 0, 0x6809}, /* East Asian ideograph */ {"\x6D", 0, 0x6A79}, /* East Asian ideograph */ {"\x6E", 0, 0x680F}, /* East Asian ideograph */ {"\x6F", 0, 0x6A31}, /* East Asian ideograph */ {"\x70", 0, 0x6743}, /* East Asian ideograph */ {"\x71", 0, 0x6984}, /* East Asian ideograph */ {"\x78", 0, 0x94A6}, /* East Asian ideograph */ {"\x7A", 0, 0x6B20}, /* East Asian ideograph (duplicate simplified) */ {"\x7C", 0, 0x6B27}, /* East Asian ideograph */ {"\x7E", 0, 0x6B24}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page262 = { marc8_31page262_flat, 0 }; /* PAGE 261 */ struct yaz_iconv_trie_flat marc8_31page261_flat[] = { {"\x26", 0, 0x4E1C}, /* East Asian ideograph */ {"\x63", 0, 0x6761}, /* East Asian ideograph */ {"\x68", 0, 0x67AD}, /* East Asian ideograph */ {"\x69", 0, 0x6800}, /* East Asian ideograph */ {"\x6D", 0, 0x5F03}, /* East Asian ideograph */ {"\x6E", 0, 0x6816}, /* East Asian ideograph */ {"\x71", 0, 0x680B}, /* East Asian ideograph */ {"\x76", 0, 0x6808}, /* East Asian ideograph */ {"\x7A", 0, 0x67A3}, /* East Asian ideograph */ {"\x7C", 0, 0x832D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page261 = { marc8_31page261_flat, 0 }; /* PAGE 260 */ struct yaz_iconv_trie_flat marc8_31page260_flat[] = { {"\x2D", 0, 0x65F6}, /* East Asian ideograph */ {"\x32", 0, 0x663C}, /* East Asian ideograph */ {"\x40", 0, 0x6656}, /* East Asian ideograph */ {"\x41", 0, 0x6655}, /* East Asian ideograph */ {"\x43", 0, 0x7545}, /* East Asian ideograph */ {"\x44", 0, 0x6682}, /* East Asian ideograph */ {"\x48", 0, 0x6653}, /* East Asian ideograph */ {"\x49", 0, 0x5386}, /* East Asian ideograph (duplicate simplified) */ {"\x4B", 0, 0x66A7}, /* East Asian ideograph */ {"\x4D", 0, 0x65F7}, /* East Asian ideograph */ {"\x55", 0, 0x4E66}, /* East Asian ideograph */ {"\x5A", 0, 0x4F1A}, /* East Asian ideograph */ {"\x66", 0, 0x80E7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page260 = { marc8_31page260_flat, 0 }; /* PAGE 259 */ struct yaz_iconv_trie_flat marc8_31page259_flat[] = { {"\x22", 0, 0x62C5}, /* East Asian ideograph */ {"\x24", 0, 0x6361}, /* East Asian ideograph */ {"\x25", 0, 0x6324}, /* East Asian ideograph */ {"\x26", 0, 0x62E7}, /* East Asian ideograph */ {"\x28", 0, 0x62DF}, /* East Asian ideograph */ {"\x29", 0, 0x6401}, /* East Asian ideograph */ {"\x2A", 0, 0x6269}, /* East Asian ideograph */ {"\x2B", 0, 0x63B7}, /* East Asian ideograph */ {"\x2C", 0, 0x64B5}, /* East Asian ideograph */ {"\x2E", 0, 0x6270}, /* East Asian ideograph */ {"\x2F", 0, 0x64DE}, /* East Asian ideograph */ {"\x30", 0, 0x6446}, /* East Asian ideograph */ {"\x31", 0, 0x62E2}, /* East Asian ideograph */ {"\x33", 0, 0x62E6}, /* East Asian ideograph */ {"\x34", 0, 0x6400}, /* East Asian ideograph */ {"\x35", 0, 0x6444}, /* East Asian ideograph */ {"\x37", 0, 0x631B}, /* East Asian ideograph */ {"\x38", 0, 0x644A}, /* East Asian ideograph */ {"\x3A", 0, 0x6405}, /* East Asian ideograph */ {"\x3B", 0, 0x63FD}, /* East Asian ideograph */ {"\x47", 0, 0x8D25}, /* East Asian ideograph */ {"\x4F", 0, 0x542F}, /* East Asian ideograph */ {"\x52", 0, 0x654C}, /* East Asian ideograph */ {"\x54", 0, 0x6570}, /* East Asian ideograph */ {"\x56", 0, 0x655B}, /* East Asian ideograph */ {"\x57", 0, 0x6BD9}, /* East Asian ideograph */ {"\x63", 0, 0x65A9}, /* East Asian ideograph */ {"\x66", 0, 0x65AD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page259 = { marc8_31page259_flat, 0 }; /* PAGE 258 */ struct yaz_iconv_trie_flat marc8_31page258_flat[] = { {"\x23", 0, 0x6302}, /* East Asian ideograph */ {"\x36", 0, 0x62A1}, /* East Asian ideograph */ {"\x3C", 0, 0x62E3}, /* East Asian ideograph */ {"\x3F", 0, 0x626C}, /* East Asian ideograph */ {"\x42", 0, 0x6325}, /* East Asian ideograph */ {"\x4F", 0, 0x635F}, /* East Asian ideograph */ {"\x53", 0, 0x6363}, /* East Asian ideograph */ {"\x55", 0, 0x62A2}, /* East Asian ideograph */ {"\x5A", 0, 0x5C4F}, /* East Asian ideograph */ {"\x5B", 0, 0x631A}, /* East Asian ideograph */ {"\x5F", 0, 0x6402}, /* East Asian ideograph */ {"\x60", 0, 0x63B4}, /* East Asian ideograph */ {"\x65", 0, 0x635E}, /* East Asian ideograph */ {"\x66", 0, 0x62E8}, /* East Asian ideograph */ {"\x68", 0, 0x6320}, /* East Asian ideograph */ {"\x6E", 0, 0x6251}, /* East Asian ideograph */ {"\x71", 0, 0x629A}, /* East Asian ideograph */ {"\x74", 0, 0x62E5}, /* East Asian ideograph */ {"\x76", 0, 0x51FB}, /* East Asian ideograph */ {"\x77", 0, 0x631E}, /* East Asian ideograph */ {"\x7A", 0, 0x6321}, /* East Asian ideograph */ {"\x7C", 0, 0x636E}, /* East Asian ideograph */ {"\x7D", 0, 0x63B3}, /* East Asian ideograph */ {"\x7E", 0, 0x62E9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page258 = { marc8_31page258_flat, 0 }; /* PAGE 257 */ struct yaz_iconv_trie_flat marc8_31page257_flat[] = { {"\x6C", 0, 0x631F}, /* East Asian ideograph */ {"\x7B", 0, 0x5377}, /* East Asian ideograph */ {"\x7D", 0, 0x626B}, /* East Asian ideograph */ {"\x7E", 0, 0x626A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page257 = { marc8_31page257_flat, 0 }; /* PAGE 256 */ struct yaz_iconv_trie_flat marc8_31page256_flat[] = { {"\x28", 0, 0x6001}, /* East Asian ideograph */ {"\x29", 0, 0x5FFE}, /* East Asian ideograph */ {"\x2B", 0, 0x6006}, /* East Asian ideograph */ {"\x2E", 0, 0x5E86}, /* East Asian ideograph */ {"\x31", 0, 0x60ED}, /* East Asian ideograph */ {"\x33", 0, 0x5FE7}, /* East Asian ideograph */ {"\x36", 0, 0x8651}, /* East Asian ideograph */ {"\x38", 0, 0x60E8}, /* East Asian ideograph */ {"\x39", 0, 0x60EF}, /* East Asian ideograph */ {"\x3A", 0, 0x6078}, /* East Asian ideograph */ {"\x3B", 0, 0x6002}, /* East Asian ideograph */ {"\x3C", 0, 0x6B32}, /* East Asian ideograph */ {"\x3E", 0, 0x5BAA}, /* East Asian ideograph */ {"\x3F", 0, 0x51ED}, /* East Asian ideograph */ {"\x41", 0, 0x60AF}, /* East Asian ideograph */ {"\x42", 0, 0x6124}, /* East Asian ideograph */ {"\x44", 0, 0x60EE}, /* East Asian ideograph */ {"\x45", 0, 0x6187}, /* East Asian ideograph */ {"\x47", 0, 0x60EB}, /* East Asian ideograph */ {"\x48", 0, 0x5FC6}, /* East Asian ideograph */ {"\x4A", 0, 0x5E94}, /* East Asian ideograph */ {"\x4B", 0, 0x601C}, /* East Asian ideograph */ {"\x4E", 0, 0x6073}, /* East Asian ideograph */ {"\x54", 0, 0x6000}, /* East Asian ideograph */ {"\x55", 0, 0x61D2}, /* East Asian ideograph */ {"\x56", 0, 0x60AC}, /* East Asian ideograph */ {"\x58", 0, 0x5FCF}, /* East Asian ideograph */ {"\x59", 0, 0x6151}, /* East Asian ideograph */ {"\x5B", 0, 0x60E7}, /* East Asian ideograph */ {"\x5C", 0, 0x604B}, /* East Asian ideograph */ {"\x6E", 0, 0x6218}, /* East Asian ideograph */ {"\x6F", 0, 0x620F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page256 = { marc8_31page256_flat, 0 }; /* PAGE 255 */ struct yaz_iconv_trie_flat marc8_31page255_flat[] = { {"\x57", 0, 0x5FF0}, /* East Asian ideograph */ {"\x5C", 0, 0x95F7}, /* East Asian ideograph */ {"\x5E", 0, 0x6005}, /* East Asian ideograph */ {"\x61", 0, 0x6076}, /* East Asian ideograph */ {"\x6C", 0, 0x60EC}, /* East Asian ideograph */ {"\x70", 0, 0x607B}, /* East Asian ideograph */ {"\x77", 0, 0x7231}, /* East Asian ideograph */ {"\x7E", 0, 0x607C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page255 = { marc8_31page255_flat, 0 }; /* PAGE 254 */ struct yaz_iconv_trie_flat marc8_31page254_flat[] = { {"\x27", 0, 0x5E9F}, /* East Asian ideograph */ {"\x2A", 0, 0x5E7F}, /* East Asian ideograph */ {"\x2B", 0, 0x5E99}, /* East Asian ideograph */ {"\x2C", 0, 0x5382}, /* East Asian ideograph */ {"\x2D", 0, 0x5E9E}, /* East Asian ideograph */ {"\x2E", 0, 0x5E90}, /* East Asian ideograph */ {"\x2F", 0, 0x5385}, /* East Asian ideograph */ {"\x47", 0, 0x5F20}, /* East Asian ideograph */ {"\x4B", 0, 0x5F39}, /* East Asian ideograph */ {"\x4C", 0, 0x5F25}, /* East Asian ideograph */ {"\x4D", 0, 0x5F2F}, /* East Asian ideograph */ {"\x4F", 0, 0x6C47}, /* East Asian ideograph (duplicate simplified) */ {"\x65", 0, 0x540E}, /* East Asian ideograph */ {"\x67", 0, 0x5F84}, /* East Asian ideograph */ {"\x6C", 0, 0x4ECE}, /* East Asian ideograph */ {"\x6F", 0, 0x590D}, /* East Asian ideograph */ {"\x74", 0, 0x5F7B}, /* East Asian ideograph */ {"\x76", 0, 0x5F81}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page254 = { marc8_31page254_flat, 0 }; /* PAGE 253 */ struct yaz_iconv_trie_flat marc8_31page253_flat[] = { {"\x28", 0, 0x5C9A}, /* East Asian ideograph */ {"\x2A", 0, 0x5D2D}, /* East Asian ideograph */ {"\x2B", 0, 0x5C96}, /* East Asian ideograph */ {"\x2D", 0, 0x5C7F}, /* East Asian ideograph */ {"\x2E", 0, 0x5CB3}, /* East Asian ideograph */ {"\x31", 0, 0x5CE6}, /* East Asian ideograph */ {"\x32", 0, 0x5DC5}, /* East Asian ideograph */ {"\x33", 0, 0x5CA9}, /* East Asian ideograph */ {"\x4F", 0, 0x5E05}, /* East Asian ideograph */ {"\x51", 0, 0x5E08}, /* East Asian ideograph */ {"\x52", 0, 0x5E10}, /* East Asian ideograph */ {"\x53", 0, 0x5E26}, /* East Asian ideograph */ {"\x58", 0, 0x5E27}, /* East Asian ideograph */ {"\x5C", 0, 0x5E3C}, /* East Asian ideograph */ {"\x5E", 0, 0x5E01}, /* East Asian ideograph */ {"\x60", 0, 0x5E1C}, /* East Asian ideograph */ {"\x61", 0, 0x5E2E}, /* East Asian ideograph */ {"\x67", 0, 0x5E72}, /* East Asian ideograph (Version J extension) */ {"\x6B", 0, 0x51E0}, /* East Asian ideograph */ {"\x76", 0, 0x5E93}, /* East Asian ideograph */ {"\x77", 0, 0x5750}, /* East Asian ideograph */ {"\x7E", 0, 0x5395}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page253 = { marc8_31page253_flat, 0 }; /* PAGE 252 */ struct yaz_iconv_trie_flat marc8_31page252_flat[] = { {"\x2E", 0, 0x5BDD}, /* East Asian ideograph */ {"\x31", 0, 0x5B9E}, /* East Asian ideograph */ {"\x32", 0, 0x5B81}, /* East Asian ideograph */ {"\x35", 0, 0x5BBD}, /* East Asian ideograph */ {"\x36", 0, 0x5BA1}, /* East Asian ideograph */ {"\x37", 0, 0x5199}, /* East Asian ideograph */ {"\x38", 0, 0x5BA0}, /* East Asian ideograph */ {"\x39", 0, 0x5B9D}, /* East Asian ideograph */ {"\x3F", 0, 0x4E13}, /* East Asian ideograph */ {"\x40", 0, 0x5C06}, /* East Asian ideograph */ {"\x42", 0, 0x5BFB}, /* East Asian ideograph */ {"\x43", 0, 0x5BF9}, /* East Asian ideograph */ {"\x44", 0, 0x5BFC}, /* East Asian ideograph */ {"\x4C", 0, 0x5C34}, /* East Asian ideograph */ {"\x60", 0, 0x5C61}, /* East Asian ideograph */ {"\x61", 0, 0x5C42}, /* East Asian ideograph */ {"\x63", 0, 0x5C5E}, /* East Asian ideograph */ {"\x6E", 0, 0x5188}, /* East Asian ideograph */ {"\x74", 0, 0x5CE1}, /* East Asian ideograph */ {"\x79", 0, 0x5C9B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page252 = { marc8_31page252_flat, 0 }; /* PAGE 251 */ struct yaz_iconv_trie_flat marc8_31page251_flat[] = { {"\x27", 0, 0x5987}, /* East Asian ideograph */ {"\x28", 0, 0x5A04}, /* East Asian ideograph */ {"\x36", 0, 0x5988}, /* East Asian ideograph */ {"\x3B", 0, 0x59AA}, /* East Asian ideograph */ {"\x41", 0, 0x5A34}, /* East Asian ideograph */ {"\x43", 0, 0x5A75}, /* East Asian ideograph */ {"\x44", 0, 0x5A07}, /* East Asian ideograph */ {"\x45", 0, 0x59A9}, /* East Asian ideograph */ {"\x48", 0, 0x5AD4}, /* East Asian ideograph */ {"\x4A", 0, 0x5A74}, /* East Asian ideograph */ {"\x4B", 0, 0x5A76}, /* East Asian ideograph */ {"\x5B", 0, 0x5B59}, /* East Asian ideograph */ {"\x5F", 0, 0x5B5A}, /* East Asian ideograph */ {"\x60", 0, 0x5B66}, /* East Asian ideograph */ {"\x63", 0, 0x5B6A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page251 = { marc8_31page251_flat, 0 }; /* PAGE 250 */ struct yaz_iconv_trie_flat marc8_31page250_flat[] = { {"\x23", 0, 0x4F19}, /* East Asian ideograph */ {"\x24", 0, 0x68A6}, /* East Asian ideograph */ {"\x2E", 0, 0x5939}, /* East Asian ideograph */ {"\x3F", 0, 0x5941}, /* East Asian ideograph */ {"\x40", 0, 0x593A}, /* East Asian ideograph */ {"\x41", 0, 0x594B}, /* East Asian ideograph */ {"\x53", 0, 0x5986}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page250 = { marc8_31page250_flat, 0 }; /* PAGE 249 */ struct yaz_iconv_trie_flat marc8_31page249_flat[] = { {"\x3B", 0, 0x6267}, /* East Asian ideograph */ {"\x3E", 0, 0x57A9}, /* East Asian ideograph */ {"\x44", 0, 0x62A5}, /* East Asian ideograph */ {"\x45", 0, 0x5C27}, /* East Asian ideograph */ {"\x4A", 0, 0x573A}, /* East Asian ideograph */ {"\x4D", 0, 0x6D82}, /* East Asian ideograph */ {"\x55", 0, 0x575E}, /* East Asian ideograph */ {"\x56", 0, 0x5757}, /* East Asian ideograph */ {"\x59", 0, 0x5C18}, /* East Asian ideograph */ {"\x5A", 0, 0x57AB}, /* East Asian ideograph */ {"\x5B", 0, 0x5811}, /* East Asian ideograph */ {"\x60", 0, 0x575F}, /* East Asian ideograph */ {"\x61", 0, 0x5760}, /* East Asian ideograph */ {"\x62", 0, 0x5815}, /* East Asian ideograph */ {"\x64", 0, 0x575B}, /* East Asian ideograph */ {"\x67", 0, 0x57A6}, /* East Asian ideograph */ {"\x69", 0, 0x538B}, /* East Asian ideograph */ {"\x6B", 0, 0x5739}, /* East Asian ideograph */ {"\x6C", 0, 0x5792}, /* East Asian ideograph */ {"\x6D", 0, 0x5784}, /* East Asian ideograph */ {"\x6E", 0, 0x574F}, /* East Asian ideograph */ {"\x6F", 0, 0x575C}, /* East Asian ideograph */ {"\x71", 0, 0x575D}, /* East Asian ideograph */ {"\x74", 0, 0x58EE}, /* East Asian ideograph */ {"\x76", 0, 0x58F6}, /* East Asian ideograph */ {"\x77", 0, 0x5BFF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page249 = { marc8_31page249_flat, 0 }; /* PAGE 248 */ struct yaz_iconv_trie_flat marc8_31page248_flat[] = { {"\x21", 0, 0x545C}, /* East Asian ideograph */ {"\x22", 0, 0x545B}, /* East Asian ideograph */ {"\x27", 0, 0x5567}, /* East Asian ideograph */ {"\x2C", 0, 0x53F9}, /* East Asian ideograph */ {"\x2E", 0, 0x5455}, /* East Asian ideograph */ {"\x30", 0, 0x5C1D}, /* East Asian ideograph */ {"\x31", 0, 0x55BD}, /* East Asian ideograph */ {"\x32", 0, 0x5520}, /* East Asian ideograph */ {"\x33", 0, 0x5578}, /* East Asian ideograph */ {"\x3D", 0, 0x5480}, /* East Asian ideograph */ {"\x40", 0, 0x53FD}, /* East Asian ideograph */ {"\x44", 0, 0x5428}, /* East Asian ideograph */ {"\x45", 0, 0x55B7}, /* East Asian ideograph */ {"\x46", 0, 0x5F53}, /* East Asian ideograph (duplicate simplified) */ {"\x47", 0, 0x54DD}, /* East Asian ideograph */ {"\x4B", 0, 0x55F3}, /* East Asian ideograph */ {"\x4E", 0, 0x549B}, /* East Asian ideograph */ {"\x51", 0, 0x5413}, /* East Asian ideograph */ {"\x54", 0, 0x565C}, /* East Asian ideograph */ {"\x55", 0, 0x5411}, /* East Asian ideograph */ {"\x56", 0, 0x5499}, /* East Asian ideograph */ {"\x5A", 0, 0x4E25}, /* East Asian ideograph */ {"\x5B", 0, 0x5624}, /* East Asian ideograph */ {"\x5C", 0, 0x556D}, /* East Asian ideograph */ {"\x5D", 0, 0x55EB}, /* East Asian ideograph */ {"\x5E", 0, 0x56A3}, /* East Asian ideograph */ {"\x61", 0, 0x7F57}, /* East Asian ideograph (duplicate simplified) */ {"\x62", 0, 0x5453}, /* East Asian ideograph */ {"\x64", 0, 0x5631}, /* East Asian ideograph */ {"\x6F", 0, 0x56EF}, /* East Asian ideograph */ {"\x70", 0, 0x56F4}, /* East Asian ideograph */ {"\x71", 0, 0x56ED}, /* East Asian ideograph */ {"\x72", 0, 0x5706}, /* East Asian ideograph */ {"\x73", 0, 0x56E2}, /* East Asian ideograph */ {"\x74", 0, 0x56FE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page248 = { marc8_31page248_flat, 0 }; /* PAGE 247 */ struct yaz_iconv_trie_flat marc8_31page247_flat[] = { {"\x3E", 0, 0x5458}, /* East Asian ideograph */ {"\x48", 0, 0x95EE}, /* East Asian ideograph */ {"\x49", 0, 0x54D1}, /* East Asian ideograph */ {"\x63", 0, 0x4E27}, /* East Asian ideograph */ {"\x68", 0, 0x5355}, /* East Asian ideograph */ {"\x6D", 0, 0x5524}, /* East Asian ideograph */ {"\x6F", 0, 0x4E54}, /* East Asian ideograph */ {"\x71", 0, 0x54DF}, /* East Asian ideograph */ {"\x78", 0, 0x556C}, /* East Asian ideograph */ {"\x7A", 0, 0x5417}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page247 = { marc8_31page247_flat, 0 }; /* PAGE 246 */ struct yaz_iconv_trie_flat marc8_31page246_flat[] = { {"\x2B", 0, 0x4E1B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page246 = { marc8_31page246_flat, 0 }; /* PAGE 245 */ struct yaz_iconv_trie_flat marc8_31page245_flat[] = { {"\x21", 0, 0x5251}, /* East Asian ideograph */ {"\x22", 0, 0x5218}, /* East Asian ideograph */ {"\x23", 0, 0x5242}, /* East Asian ideograph */ {"\x2F", 0, 0x52B2}, /* East Asian ideograph */ {"\x33", 0, 0x52A1}, /* East Asian ideograph */ {"\x34", 0, 0x52A8}, /* East Asian ideograph */ {"\x35", 0, 0x52B3}, /* East Asian ideograph */ {"\x36", 0, 0x52CB}, /* East Asian ideograph */ {"\x37", 0, 0x80DC}, /* East Asian ideograph */ {"\x38", 0, 0x52BF}, /* East Asian ideograph */ {"\x3C", 0, 0x52B1}, /* East Asian ideograph */ {"\x3D", 0, 0x529D}, /* East Asian ideograph */ {"\x51", 0, 0x6C47}, /* East Asian ideograph */ {"\x52", 0, 0x532E}, /* East Asian ideograph */ {"\x55", 0, 0x533A}, /* East Asian ideograph */ {"\x5F", 0, 0x5346}, /* East Asian ideograph */ {"\x60", 0, 0x534F}, /* East Asian ideograph */ {"\x7A", 0, 0x538C}, /* East Asian ideograph */ {"\x7B", 0, 0x5389}, /* East Asian ideograph */ {"\x7D", 0, 0x53C2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page245 = { marc8_31page245_flat, 0 }; /* PAGE 244 */ struct yaz_iconv_trie_flat marc8_31page244_flat[] = { {"\x23", 0, 0x4E24}, /* East Asian ideograph */ {"\x40", 0, 0x51BB}, /* East Asian ideograph */ {"\x48", 0, 0x51EF}, /* East Asian ideograph */ {"\x6B", 0, 0x514B}, /* East Asian ideograph */ {"\x6D", 0, 0x5219}, /* East Asian ideograph */ {"\x70", 0, 0x521A}, /* East Asian ideograph */ {"\x76", 0, 0x5240}, /* East Asian ideograph */ {"\x78", 0, 0x521B}, /* East Asian ideograph */ {"\x7C", 0, 0x5212}, /* East Asian ideograph */ {"\x7E", 0, 0x5267}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page244 = { marc8_31page244_flat, 0 }; /* PAGE 243 */ struct yaz_iconv_trie_flat marc8_31page243_flat[] = { {"\x24", 0, 0x4E2A}, /* East Asian ideograph */ {"\x26", 0, 0x4F25}, /* East Asian ideograph */ {"\x2D", 0, 0x4F26}, /* East Asian ideograph */ {"\x2E", 0, 0x4EC3}, /* East Asian ideograph (duplicate simplified) */ {"\x33", 0, 0x4F1F}, /* East Asian ideograph */ {"\x35", 0, 0x4FA7}, /* East Asian ideograph */ {"\x38", 0, 0x4FA6}, /* East Asian ideograph */ {"\x3E", 0, 0x5BB6}, /* East Asian ideograph */ {"\x40", 0, 0x5907}, /* East Asian ideograph */ {"\x41", 0, 0x6770}, /* East Asian ideograph */ {"\x43", 0, 0x4F27}, /* East Asian ideograph */ {"\x44", 0, 0x4F1E}, /* East Asian ideograph */ {"\x46", 0, 0x4F20}, /* East Asian ideograph */ {"\x47", 0, 0x503A}, /* East Asian ideograph */ {"\x49", 0, 0x4EC5}, /* East Asian ideograph */ {"\x4A", 0, 0x503E}, /* East Asian ideograph */ {"\x4C", 0, 0x4F24}, /* East Asian ideograph */ {"\x51", 0, 0x4FA5}, /* East Asian ideograph */ {"\x55", 0, 0x4EC6}, /* East Asian ideograph */ {"\x56", 0, 0x4F2A}, /* East Asian ideograph */ {"\x57", 0, 0x8C61}, /* East Asian ideograph */ {"\x58", 0, 0x4FA8}, /* East Asian ideograph */ {"\x59", 0, 0x4EEA}, /* East Asian ideograph */ {"\x5A", 0, 0x4EBF}, /* East Asian ideograph */ {"\x5D", 0, 0x4EF7}, /* East Asian ideograph */ {"\x5E", 0, 0x4FAC}, /* East Asian ideograph */ {"\x60", 0, 0x4FA9}, /* East Asian ideograph */ {"\x61", 0, 0x4FED}, /* East Asian ideograph */ {"\x62", 0, 0x50A7}, /* East Asian ideograph */ {"\x63", 0, 0x5C3D}, /* East Asian ideograph (duplicate simplified) */ {"\x65", 0, 0x4FE6}, /* East Asian ideograph */ {"\x66", 0, 0x4F18}, /* East Asian ideograph */ {"\x67", 0, 0x507F}, /* East Asian ideograph */ {"\x69", 0, 0x50A8}, /* East Asian ideograph */ {"\x6A", 0, 0x4FEA}, /* East Asian ideograph */ {"\x6B", 0, 0x4FE8}, /* East Asian ideograph */ {"\x73", 0, 0x51F6}, /* East Asian ideograph */ {"\x7A", 0, 0x513F}, /* East Asian ideograph */ {"\x7B", 0, 0x5156}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page243 = { marc8_31page243_flat, 0 }; /* PAGE 242 */ struct yaz_iconv_trie_flat marc8_31page242_flat[] = { {"\x38", 0, 0x5E03}, /* East Asian ideograph */ {"\x3C", 0, 0x5360}, /* East Asian ideograph */ {"\x4C", 0, 0x6765}, /* East Asian ideograph */ {"\x4F", 0, 0x4ED1}, /* East Asian ideograph */ {"\x5D", 0, 0x4FA0}, /* East Asian ideograph */ {"\x69", 0, 0x7CFB}, /* East Asian ideograph (duplicate simplified) */ {"\x6C", 0, 0x4ED3}, /* East Asian ideograph */ {"\x73", 0, 0x4EEC}, /* East Asian ideograph */ {"\x79", 0, 0x4FE9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page242 = { marc8_31page242_flat, 0 }; /* PAGE 241 */ struct yaz_iconv_trie_flat marc8_31page241_flat[] = { {"\x32", 0, 0x5E76}, /* East Asian ideograph */ {"\x4C", 0, 0x5E72}, /* East Asian ideograph */ {"\x4D", 0, 0x4E71}, /* East Asian ideograph */ {"\x58", 0, 0x4E9A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page241 = { marc8_31page241_flat, 0 }; /* PAGE 240 */ struct yaz_iconv_trie_dir marc8_31page240_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {242, 0, 0}, {243, 0, 0}, {244, 0, 0}, {245, 0, 0}, {246, 0, 0}, {247, 0, 0}, {248, 0, 0}, {249, 0, 0}, {250, 0, 0}, {251, 0, 0}, {252, 0, 0}, {253, 0, 0}, {254, 0, 0}, {255, 0, 0}, {256, 0, 0}, {257, 0, 0}, {258, 0, 0}, {259, 0, 0}, {260, 0, 0}, {261, 0, 0}, {262, 0, 0}, {263, 0, 0}, {264, 0, 0}, {265, 0, 0}, {266, 0, 0}, {267, 0, 0}, {268, 0, 0}, {269, 0, 0}, {270, 0, 0}, {271, 0, 0}, {272, 0, 0}, {273, 0, 0}, {274, 0, 0}, {275, 0, 0}, {276, 0, 0}, {277, 0, 0}, {278, 0, 0}, {279, 0, 0}, {280, 0, 0}, {281, 0, 0}, {282, 0, 0}, {283, 0, 0}, {284, 0, 0}, {285, 0, 0}, {286, 0, 0}, {287, 0, 0}, {288, 0, 0}, {289, 0, 0}, {290, 0, 0}, {291, 0, 0}, {292, 0, 0}, {293, 0, 0}, {0, 0, 0}, {0, 0, 0}, {294, 0, 0}, {295, 0, 0}, {296, 0, 0}, {297, 0, 0}, {0, 0, 0}, {298, 0, 0}, {0, 0, 0}, {299, 0, 0}, {300, 0, 0}, {301, 0, 0}, {302, 0, 0}, {303, 0, 0}, {304, 0, 0}, {305, 0, 0}, {306, 0, 0}, {0, 0, 0}, {307, 0, 0}, {308, 0, 0}, {309, 0, 0}, {310, 0, 0}, {0, 0, 0}, {311, 0, 0}, {312, 0, 0}, {313, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page240 = { 0, marc8_31page240_dir }; /* PAGE 239 */ struct yaz_iconv_trie_flat marc8_31page239_flat[] = { {"\x23", 0, 0x9F57}, /* East Asian ideograph */ {"\x28", 0, 0x9F60}, /* East Asian ideograph */ {"\x3F", 0, 0x9F6E}, /* East Asian ideograph */ {"\x40", 0, 0x9F6F}, /* East Asian ideograph */ {"\x47", 0, 0x9F76}, /* East Asian ideograph */ {"\x5B", 0, 0x9F8E}, /* East Asian ideograph */ {"\x61", 0, 0x9F93}, /* East Asian ideograph */ {"\x62", 0, 0x9F95}, /* East Asian ideograph */ {"\x6B", 0, 0x9FA0}, /* East Asian ideograph */ {"\x71", 0, 0x9FA5}, /* East Asian ideograph */ {"\x72", 0, 0x9FA4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page239 = { marc8_31page239_flat, 0 }; /* PAGE 238 */ struct yaz_iconv_trie_flat marc8_31page238_flat[] = { {"\x2F", 0, 0x9F0F}, /* East Asian ideograph */ {"\x31", 0, 0x9F10}, /* East Asian ideograph */ {"\x32", 0, 0x9F12}, /* East Asian ideograph */ {"\x33", 0, 0x9F16}, /* East Asian ideograph */ {"\x34", 0, 0x9F17}, /* East Asian ideograph */ {"\x37", 0, 0x9F1A}, /* East Asian ideograph */ {"\x45", 0, 0x9F22}, /* East Asian ideograph */ {"\x48", 0, 0x9F2B}, /* East Asian ideograph */ {"\x49", 0, 0x9F26}, /* East Asian ideograph */ {"\x53", 0, 0x9F2F}, /* East Asian ideograph */ {"\x5E", 0, 0x9F39}, /* East Asian ideograph */ {"\x5F", 0, 0x9F37}, /* East Asian ideograph */ {"\x64", 0, 0x9F3D}, /* East Asian ideograph */ {"\x69", 0, 0x9F41}, /* East Asian ideograph */ {"\x6D", 0, 0x9F45}, /* East Asian ideograph */ {"\x6F", 0, 0x9F46}, /* East Asian ideograph */ {"\x71", 0, 0x9F48}, /* East Asian ideograph */ {"\x73", 0, 0x9F49}, /* East Asian ideograph */ {"\x79", 0, 0x9F4E}, /* East Asian ideograph */ {"\x7B", 0, 0x9F4F}, /* East Asian ideograph */ {"\x7C", 0, 0x9F54}, /* East Asian ideograph */ {"\x7E", 0, 0x9F55}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page238 = { marc8_31page238_flat, 0 }; /* PAGE 237 */ struct yaz_iconv_trie_flat marc8_31page237_flat[] = { {"\x30", 0, 0x9EC1}, /* East Asian ideograph */ {"\x35", 0, 0x9EC6}, /* East Asian ideograph */ {"\x37", 0, 0x9EC8}, /* East Asian ideograph */ {"\x42", 0, 0x9ECC}, /* East Asian ideograph */ {"\x4A", 0, 0x9ED0}, /* East Asian ideograph */ {"\x4C", 0, 0x9ED3}, /* East Asian ideograph */ {"\x53", 0, 0x9EDA}, /* East Asian ideograph */ {"\x55", 0, 0x9EDF}, /* East Asian ideograph */ {"\x57", 0, 0x9EE3}, /* East Asian ideograph */ {"\x59", 0, 0x9EE5}, /* East Asian ideograph */ {"\x5C", 0, 0x9EE7}, /* East Asian ideograph */ {"\x60", 0, 0x9EEE}, /* East Asian ideograph */ {"\x66", 0, 0x9EF0}, /* East Asian ideograph */ {"\x6F", 0, 0x9EF6}, /* East Asian ideograph */ {"\x74", 0, 0x9EF9}, /* East Asian ideograph */ {"\x76", 0, 0x9EFB}, /* East Asian ideograph */ {"\x77", 0, 0x9EFC}, /* East Asian ideograph */ {"\x7A", 0, 0x9EFD}, /* East Asian ideograph */ {"\x7B", 0, 0x9EFE}, /* East Asian ideograph */ {"\x7C", 0, 0x9EFF}, /* East Asian ideograph */ {"\x7D", 0, 0x9F02}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page237 = { marc8_31page237_flat, 0 }; /* PAGE 236 */ struct yaz_iconv_trie_flat marc8_31page236_flat[] = { {"\x27", 0, 0x9E0E}, /* East Asian ideograph */ {"\x2B", 0, 0x9E11}, /* East Asian ideograph */ {"\x36", 0, 0x9E15}, /* East Asian ideograph */ {"\x37", 0, 0x9E18}, /* East Asian ideograph */ {"\x39", 0, 0x9E1C}, /* East Asian ideograph */ {"\x3A", 0, 0x9E1B}, /* East Asian ideograph */ {"\x3B", 0, 0x9E1D}, /* East Asian ideograph */ {"\x3C", 0, 0x9E75}, /* East Asian ideograph */ {"\x42", 0, 0x9E7A}, /* East Asian ideograph */ {"\x43", 0, 0x9E7B}, /* East Asian ideograph */ {"\x47", 0, 0x9E80}, /* East Asian ideograph */ {"\x48", 0, 0x9E83}, /* East Asian ideograph */ {"\x49", 0, 0x9E84}, /* East Asian ideograph */ {"\x4B", 0, 0x9E88}, /* East Asian ideograph */ {"\x4F", 0, 0x9E87}, /* East Asian ideograph */ {"\x55", 0, 0x9E90}, /* East Asian ideograph */ {"\x58", 0, 0x9E8C}, /* East Asian ideograph */ {"\x5A", 0, 0x9E95}, /* East Asian ideograph */ {"\x5C", 0, 0x9E91}, /* East Asian ideograph */ {"\x5D", 0, 0x9E9B}, /* East Asian ideograph */ {"\x66", 0, 0x9E9E}, /* East Asian ideograph */ {"\x77", 0, 0x9EAD}, /* East Asian ideograph */ {"\x79", 0, 0x9EAF}, /* East Asian ideograph */ {"\x7A", 0, 0x9EB0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page236 = { marc8_31page236_flat, 0 }; /* PAGE 235 */ struct yaz_iconv_trie_flat marc8_31page235_flat[] = { {"\x22", 0, 0x9DC7}, /* East Asian ideograph */ {"\x27", 0, 0x9DC3}, /* East Asian ideograph */ {"\x28", 0, 0x9DBB}, /* East Asian ideograph */ {"\x32", 0, 0x9DB9}, /* East Asian ideograph */ {"\x34", 0, 0x9DAC}, /* East Asian ideograph */ {"\x36", 0, 0x9DB2}, /* East Asian ideograph */ {"\x3A", 0, 0x9DDF}, /* East Asian ideograph */ {"\x3E", 0, 0x9DD9}, /* East Asian ideograph */ {"\x45", 0, 0x9DD6}, /* East Asian ideograph */ {"\x46", 0, 0x9DDE}, /* East Asian ideograph */ {"\x4F", 0, 0x9DE9}, /* East Asian ideograph */ {"\x57", 0, 0x9DF2}, /* East Asian ideograph */ {"\x5B", 0, 0x9DF8}, /* East Asian ideograph */ {"\x5C", 0, 0x9DFC}, /* East Asian ideograph */ {"\x5F", 0, 0x9DEB}, /* East Asian ideograph */ {"\x65", 0, 0x9DEF}, /* East Asian ideograph */ {"\x6A", 0, 0x9DED}, /* East Asian ideograph */ {"\x6C", 0, 0x9DE6}, /* East Asian ideograph */ {"\x6D", 0, 0x9DEE}, /* East Asian ideograph */ {"\x71", 0, 0x9E07}, /* East Asian ideograph */ {"\x7E", 0, 0x9DFD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page235 = { marc8_31page235_flat, 0 }; /* PAGE 234 */ struct yaz_iconv_trie_flat marc8_31page234_flat[] = { {"\x26", 0, 0x9D5A}, /* East Asian ideograph */ {"\x2A", 0, 0x9D52}, /* East Asian ideograph */ {"\x2C", 0, 0x9D77}, /* East Asian ideograph */ {"\x2E", 0, 0x9D8A}, /* East Asian ideograph */ {"\x2F", 0, 0x9D7A}, /* East Asian ideograph */ {"\x35", 0, 0x9D87}, /* East Asian ideograph */ {"\x3F", 0, 0x9D78}, /* East Asian ideograph */ {"\x42", 0, 0x9D7E}, /* East Asian ideograph */ {"\x47", 0, 0x9D69}, /* East Asian ideograph */ {"\x4D", 0, 0x9D7B}, /* East Asian ideograph */ {"\x4F", 0, 0x9D83}, /* East Asian ideograph */ {"\x52", 0, 0x9D6F}, /* East Asian ideograph */ {"\x59", 0, 0x9DA9}, /* East Asian ideograph */ {"\x5E", 0, 0x9D92}, /* East Asian ideograph */ {"\x60", 0, 0x9D98}, /* East Asian ideograph */ {"\x66", 0, 0x9DA4}, /* East Asian ideograph */ {"\x67", 0, 0x9DAA}, /* East Asian ideograph */ {"\x6A", 0, 0x9DA1}, /* East Asian ideograph */ {"\x6B", 0, 0x9D9A}, /* East Asian ideograph */ {"\x70", 0, 0x9D96}, /* East Asian ideograph */ {"\x74", 0, 0x9DB1}, /* East Asian ideograph */ {"\x76", 0, 0x9DB6}, /* East Asian ideograph */ {"\x77", 0, 0x9DBC}, /* East Asian ideograph */ {"\x79", 0, 0x9DC0}, /* East Asian ideograph */ {"\x7A", 0, 0x9DC1}, /* East Asian ideograph */ {"\x7B", 0, 0x9DB8}, /* East Asian ideograph */ {"\x7C", 0, 0x9DBA}, /* East Asian ideograph */ {"\x7E", 0, 0x9DCF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page234 = { marc8_31page234_flat, 0 }; /* PAGE 233 */ struct yaz_iconv_trie_flat marc8_31page233_flat[] = { {"\x21", 0, 0x9D02}, /* East Asian ideograph */ {"\x22", 0, 0x9D03}, /* East Asian ideograph */ {"\x23", 0, 0x9CF7}, /* East Asian ideograph */ {"\x24", 0, 0x9D04}, /* East Asian ideograph */ {"\x28", 0, 0x9D07}, /* East Asian ideograph */ {"\x2C", 0, 0x9CF8}, /* East Asian ideograph */ {"\x2F", 0, 0x9D2A}, /* East Asian ideograph */ {"\x30", 0, 0x9D25}, /* East Asian ideograph */ {"\x3F", 0, 0x9D1E}, /* East Asian ideograph */ {"\x44", 0, 0x9D1D}, /* East Asian ideograph */ {"\x48", 0, 0x9D1F}, /* East Asian ideograph */ {"\x4F", 0, 0x9D41}, /* East Asian ideograph */ {"\x53", 0, 0x9D36}, /* East Asian ideograph */ {"\x63", 0, 0x9D3E}, /* East Asian ideograph */ {"\x65", 0, 0x9D30}, /* East Asian ideograph */ {"\x68", 0, 0x9D42}, /* East Asian ideograph */ {"\x69", 0, 0x9D40}, /* East Asian ideograph */ {"\x6B", 0, 0x9D3D}, /* East Asian ideograph */ {"\x70", 0, 0x9D5C}, /* East Asian ideograph */ {"\x75", 0, 0x9D53}, /* East Asian ideograph */ {"\x7B", 0, 0x9D59}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page233 = { marc8_31page233_flat, 0 }; /* PAGE 232 */ struct yaz_iconv_trie_flat marc8_31page232_flat[] = { {"\x25", 0, 0x9C32}, /* East Asian ideograph */ {"\x26", 0, 0x9C44}, /* East Asian ideograph */ {"\x28", 0, 0x9C48}, /* East Asian ideograph */ {"\x29", 0, 0x9C39}, /* East Asian ideograph */ {"\x2A", 0, 0x9C33}, /* East Asian ideograph */ {"\x30", 0, 0x9C47}, /* East Asian ideograph */ {"\x32", 0, 0x9C35}, /* East Asian ideograph */ {"\x34", 0, 0x9C37}, /* East Asian ideograph */ {"\x38", 0, 0x9C52}, /* East Asian ideograph */ {"\x3B", 0, 0x9C58}, /* East Asian ideograph */ {"\x45", 0, 0x9C51}, /* East Asian ideograph */ {"\x49", 0, 0x9C63}, /* East Asian ideograph */ {"\x4F", 0, 0x9C67}, /* East Asian ideograph */ {"\x55", 0, 0x9C5F}, /* East Asian ideograph */ {"\x56", 0, 0x9C60}, /* East Asian ideograph */ {"\x58", 0, 0x9C6D}, /* East Asian ideograph */ {"\x5B", 0, 0x9C68}, /* East Asian ideograph */ {"\x5C", 0, 0x9C6F}, /* East Asian ideograph */ {"\x5E", 0, 0x9C6E}, /* East Asian ideograph */ {"\x6B", 0, 0x9C7A}, /* East Asian ideograph */ {"\x73", 0, 0x9CE7}, /* East Asian ideograph */ {"\x74", 0, 0x9CF0}, /* East Asian ideograph */ {"\x77", 0, 0x9CF2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page232 = { marc8_31page232_flat, 0 }; /* PAGE 231 */ struct yaz_iconv_trie_flat marc8_31page231_flat[] = { {"\x23", 0, 0x9BD5}, /* East Asian ideograph */ {"\x27", 0, 0x9BE4}, /* East Asian ideograph */ {"\x2B", 0, 0x9BF1}, /* East Asian ideograph */ {"\x2C", 0, 0x9BE1}, /* East Asian ideograph */ {"\x2D", 0, 0x9BDB}, /* East Asian ideograph */ {"\x2F", 0, 0x9BE2}, /* East Asian ideograph */ {"\x31", 0, 0x9BF0}, /* East Asian ideograph */ {"\x34", 0, 0x9BD4}, /* East Asian ideograph */ {"\x3E", 0, 0x9BFF}, /* East Asian ideograph */ {"\x43", 0, 0x9C06}, /* East Asian ideograph */ {"\x44", 0, 0x9C15}, /* East Asian ideograph */ {"\x49", 0, 0x9C0A}, /* East Asian ideograph */ {"\x4B", 0, 0x9C08}, /* East Asian ideograph */ {"\x4C", 0, 0x9C14}, /* East Asian ideograph */ {"\x4D", 0, 0x9C04}, /* East Asian ideograph */ {"\x52", 0, 0x9C02}, /* East Asian ideograph */ {"\x54", 0, 0x9C10}, /* East Asian ideograph */ {"\x59", 0, 0x9C12}, /* East Asian ideograph */ {"\x5C", 0, 0x9C09}, /* East Asian ideograph */ {"\x66", 0, 0x9C1C}, /* East Asian ideograph */ {"\x69", 0, 0x9C2F}, /* East Asian ideograph */ {"\x6E", 0, 0x9C23}, /* East Asian ideograph */ {"\x70", 0, 0x9C2E}, /* East Asian ideograph */ {"\x71", 0, 0x9C28}, /* East Asian ideograph */ {"\x78", 0, 0x9C21}, /* East Asian ideograph */ {"\x79", 0, 0x9C24}, /* East Asian ideograph */ {"\x7E", 0, 0x9C46}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page231 = { marc8_31page231_flat, 0 }; /* PAGE 230 */ struct yaz_iconv_trie_flat marc8_31page230_flat[] = { {"\x21", 0, 0x9B83}, /* East Asian ideograph */ {"\x29", 0, 0x9B8E}, /* East Asian ideograph */ {"\x2B", 0, 0x9B90}, /* East Asian ideograph */ {"\x2E", 0, 0x9B93}, /* East Asian ideograph */ {"\x2F", 0, 0x9B97}, /* East Asian ideograph */ {"\x31", 0, 0x9B92}, /* East Asian ideograph */ {"\x32", 0, 0x9B98}, /* East Asian ideograph */ {"\x36", 0, 0x9B9F}, /* East Asian ideograph */ {"\x39", 0, 0x9B9D}, /* East Asian ideograph */ {"\x3C", 0, 0x9BAD}, /* East Asian ideograph */ {"\x3D", 0, 0x9B9A}, /* East Asian ideograph */ {"\x3F", 0, 0x9BA8}, /* East Asian ideograph */ {"\x42", 0, 0x9B9E}, /* East Asian ideograph */ {"\x43", 0, 0x9B99}, /* East Asian ideograph */ {"\x49", 0, 0x9B86}, /* East Asian ideograph */ {"\x4E", 0, 0x9BA0}, /* East Asian ideograph */ {"\x56", 0, 0x9BC7}, /* East Asian ideograph */ {"\x59", 0, 0x9BD2}, /* East Asian ideograph */ {"\x5D", 0, 0x9BC6}, /* East Asian ideograph */ {"\x5E", 0, 0x9BBF}, /* East Asian ideograph */ {"\x5F", 0, 0x9BC1}, /* East Asian ideograph */ {"\x66", 0, 0x9BB9}, /* East Asian ideograph */ {"\x6B", 0, 0x9BBB}, /* East Asian ideograph */ {"\x6C", 0, 0x9BD3}, /* East Asian ideograph */ {"\x6E", 0, 0x9BC0}, /* East Asian ideograph */ {"\x72", 0, 0x9BC8}, /* East Asian ideograph */ {"\x77", 0, 0x9BD7}, /* East Asian ideograph */ {"\x7A", 0, 0x9BD6}, /* East Asian ideograph */ {"\x7C", 0, 0x9BEB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page230 = { marc8_31page230_flat, 0 }; /* PAGE 229 */ struct yaz_iconv_trie_flat marc8_31page229_flat[] = { {"\x22", 0, 0x9B35}, /* East Asian ideograph */ {"\x23", 0, 0x9B37}, /* East Asian ideograph */ {"\x36", 0, 0x9B43}, /* East Asian ideograph */ {"\x3A", 0, 0x9B48}, /* East Asian ideograph */ {"\x3C", 0, 0x9B4E}, /* East Asian ideograph */ {"\x3E", 0, 0x9B4D}, /* East Asian ideograph */ {"\x41", 0, 0x9B4B}, /* East Asian ideograph */ {"\x47", 0, 0x9B51}, /* East Asian ideograph */ {"\x5D", 0, 0x9B74}, /* East Asian ideograph */ {"\x63", 0, 0x9B68}, /* East Asian ideograph */ {"\x72", 0, 0x9B80}, /* East Asian ideograph */ {"\x73", 0, 0x9B8C}, /* East Asian ideograph */ {"\x7A", 0, 0x9B95}, /* East Asian ideograph */ {"\x7B", 0, 0x9B7D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page229 = { marc8_31page229_flat, 0 }; /* PAGE 228 */ struct yaz_iconv_trie_flat marc8_31page228_flat[] = { {"\x21", 0, 0x9AE7}, /* East Asian ideograph */ {"\x27", 0, 0x9AEB}, /* East Asian ideograph */ {"\x28", 0, 0x9AF2}, /* East Asian ideograph */ {"\x2A", 0, 0x9AEF}, /* East Asian ideograph */ {"\x32", 0, 0x9AF9}, /* East Asian ideograph */ {"\x35", 0, 0x9AFD}, /* East Asian ideograph */ {"\x36", 0, 0x9B01}, /* East Asian ideograph */ {"\x38", 0, 0x9B02}, /* East Asian ideograph */ {"\x3B", 0, 0x9B00}, /* East Asian ideograph */ {"\x3C", 0, 0x9B08}, /* East Asian ideograph */ {"\x3E", 0, 0x9B04}, /* East Asian ideograph */ {"\x41", 0, 0x9B05}, /* East Asian ideograph */ {"\x43", 0, 0x9B0B}, /* East Asian ideograph */ {"\x47", 0, 0x9B0E}, /* East Asian ideograph */ {"\x4E", 0, 0x9B11}, /* East Asian ideograph */ {"\x4F", 0, 0x9B10}, /* East Asian ideograph */ {"\x54", 0, 0x9B18}, /* East Asian ideograph */ {"\x56", 0, 0x9B1D}, /* East Asian ideograph */ {"\x5E", 0, 0x9B1F}, /* East Asian ideograph */ {"\x66", 0, 0x9B23}, /* East Asian ideograph */ {"\x6C", 0, 0x9B29}, /* East Asian ideograph */ {"\x73", 0, 0x9B2D}, /* East Asian ideograph */ {"\x74", 0, 0x9B2E}, /* East Asian ideograph */ {"\x76", 0, 0x9B2F}, /* East Asian ideograph */ {"\x7D", 0, 0x9B34}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page228 = { marc8_31page228_flat, 0 }; /* PAGE 227 */ struct yaz_iconv_trie_flat marc8_31page227_flat[] = { {"\x22", 0, 0x9A4D}, /* East Asian ideograph */ {"\x24", 0, 0x9A52}, /* East Asian ideograph */ {"\x27", 0, 0x9A4A}, /* East Asian ideograph */ {"\x2A", 0, 0x9A58}, /* East Asian ideograph */ {"\x2C", 0, 0x9A56}, /* East Asian ideograph */ {"\x33", 0, 0x9A64}, /* East Asian ideograph */ {"\x34", 0, 0x9A66}, /* East Asian ideograph */ {"\x3A", 0, 0x9A6B}, /* East Asian ideograph */ {"\x3F", 0, 0x9AAD}, /* East Asian ideograph */ {"\x41", 0, 0x9AAB}, /* East Asian ideograph */ {"\x43", 0, 0x9AB1}, /* East Asian ideograph */ {"\x45", 0, 0x9AB3}, /* East Asian ideograph */ {"\x49", 0, 0x9AB6}, /* East Asian ideograph */ {"\x4C", 0, 0x9ABB}, /* East Asian ideograph */ {"\x50", 0, 0x9ABA}, /* East Asian ideograph */ {"\x54", 0, 0x9ABD}, /* East Asian ideograph */ {"\x57", 0, 0x9AC1}, /* East Asian ideograph */ {"\x59", 0, 0x9AC0}, /* East Asian ideograph */ {"\x5A", 0, 0x9AC2}, /* East Asian ideograph */ {"\x5D", 0, 0x9AC8}, /* East Asian ideograph */ {"\x66", 0, 0x9AD0}, /* East Asian ideograph */ {"\x6A", 0, 0x9AD1}, /* East Asian ideograph */ {"\x6D", 0, 0x9AD6}, /* East Asian ideograph */ {"\x72", 0, 0x9ADC}, /* East Asian ideograph */ {"\x74", 0, 0x9ADF}, /* East Asian ideograph */ {"\x76", 0, 0x9AE0}, /* East Asian ideograph */ {"\x77", 0, 0x9AE2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page227 = { marc8_31page227_flat, 0 }; /* PAGE 226 */ struct yaz_iconv_trie_flat marc8_31page226_flat[] = { {"\x24", 0, 0x9A02}, /* East Asian ideograph */ {"\x29", 0, 0x99F8}, /* East Asian ideograph */ {"\x2A", 0, 0x99F4}, /* East Asian ideograph */ {"\x30", 0, 0x99FB}, /* East Asian ideograph */ {"\x31", 0, 0x99FD}, /* East Asian ideograph */ {"\x3D", 0, 0x9A0F}, /* East Asian ideograph */ {"\x3E", 0, 0x9A0B}, /* East Asian ideograph */ {"\x3F", 0, 0x9A09}, /* East Asian ideograph */ {"\x44", 0, 0x9A04}, /* East Asian ideograph */ {"\x45", 0, 0x9A11}, /* East Asian ideograph */ {"\x47", 0, 0x9A05}, /* East Asian ideograph */ {"\x48", 0, 0x9A10}, /* East Asian ideograph */ {"\x4C", 0, 0x9A24}, /* East Asian ideograph */ {"\x4D", 0, 0x9A22}, /* East Asian ideograph */ {"\x4F", 0, 0x9A20}, /* East Asian ideograph */ {"\x52", 0, 0x9A27}, /* East Asian ideograph */ {"\x59", 0, 0x9A2F}, /* East Asian ideograph */ {"\x5A", 0, 0x9A38}, /* East Asian ideograph */ {"\x60", 0, 0x9A2D}, /* East Asian ideograph */ {"\x61", 0, 0x9A35}, /* East Asian ideograph */ {"\x64", 0, 0x9A32}, /* East Asian ideograph */ {"\x69", 0, 0x9A36}, /* East Asian ideograph */ {"\x6A", 0, 0x9A2E}, /* East Asian ideograph */ {"\x70", 0, 0x9A41}, /* East Asian ideograph */ {"\x74", 0, 0x9A3B}, /* East Asian ideograph */ {"\x79", 0, 0x9A42}, /* East Asian ideograph */ {"\x7A", 0, 0x9A44}, /* East Asian ideograph */ {"\x7D", 0, 0x9A48}, /* East Asian ideograph */ {"\x7E", 0, 0x9A4C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page226 = { marc8_31page226_flat, 0 }; /* PAGE 225 */ struct yaz_iconv_trie_flat marc8_31page225_flat[] = { {"\x22", 0, 0x9957}, /* East Asian ideograph (variant of EACC 475222) */ {"\x29", 0, 0x995D}, /* East Asian ideograph */ {"\x2B", 0, 0x995F}, /* East Asian ideograph */ {"\x2F", 0, 0x9997}, /* East Asian ideograph */ {"\x30", 0, 0x9998}, /* East Asian ideograph */ {"\x3B", 0, 0x99A3}, /* East Asian ideograph */ {"\x3C", 0, 0x99A1}, /* East Asian ideograph */ {"\x3E", 0, 0x99A6}, /* East Asian ideograph */ {"\x41", 0, 0x99A9}, /* East Asian ideograph */ {"\x42", 0, 0x99AA}, /* East Asian ideograph */ {"\x49", 0, 0x99B5}, /* East Asian ideograph */ {"\x4D", 0, 0x99BF}, /* East Asian ideograph */ {"\x4E", 0, 0x99BC}, /* East Asian ideograph */ {"\x4F", 0, 0x99C3}, /* East Asian ideograph */ {"\x53", 0, 0x99B9}, /* East Asian ideograph */ {"\x54", 0, 0x99BD}, /* East Asian ideograph */ {"\x61", 0, 0x99D3}, /* East Asian ideograph */ {"\x63", 0, 0x99D4}, /* East Asian ideograph */ {"\x65", 0, 0x99C9}, /* East Asian ideograph */ {"\x69", 0, 0x99D8}, /* East Asian ideograph */ {"\x74", 0, 0x99EC}, /* East Asian ideograph */ {"\x7A", 0, 0x99F0}, /* East Asian ideograph */ {"\x7B", 0, 0x99E3}, /* East Asian ideograph */ {"\x7C", 0, 0x99EA}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page225 = { marc8_31page225_flat, 0 }; /* PAGE 224 */ struct yaz_iconv_trie_flat marc8_31page224_flat[] = { {"\x24", 0, 0x9907}, /* East Asian ideograph */ {"\x28", 0, 0x9902}, /* East Asian ideograph */ {"\x2F", 0, 0x9916}, /* East Asian ideograph */ {"\x30", 0, 0x9914}, /* East Asian ideograph */ {"\x31", 0, 0x9917}, /* East Asian ideograph */ {"\x32", 0, 0x9911}, /* East Asian ideograph */ {"\x38", 0, 0x9915}, /* East Asian ideograph */ {"\x3A", 0, 0x9924}, /* East Asian ideograph */ {"\x3B", 0, 0x991F}, /* East Asian ideograph */ {"\x40", 0, 0x991C}, /* East Asian ideograph */ {"\x43", 0, 0x9929}, /* East Asian ideograph */ {"\x45", 0, 0x9927}, /* East Asian ideograph */ {"\x47", 0, 0x991A}, /* East Asian ideograph */ {"\x4F", 0, 0x992E}, /* East Asian ideograph */ {"\x50", 0, 0x992C}, /* East Asian ideograph */ {"\x51", 0, 0x992A}, /* East Asian ideograph */ {"\x53", 0, 0x9933}, /* East Asian ideograph */ {"\x54", 0, 0x9942}, /* East Asian ideograph (variant of EACC 4D5154) */ {"\x55", 0, 0x9932}, /* East Asian ideograph */ {"\x56", 0, 0x992B}, /* East Asian ideograph */ {"\x58", 0, 0x9931}, /* East Asian ideograph */ {"\x5C", 0, 0x993B}, /* East Asian ideograph */ {"\x60", 0, 0x993A}, /* East Asian ideograph */ {"\x61", 0, 0x9941}, /* East Asian ideograph */ {"\x64", 0, 0x9940}, /* East Asian ideograph */ {"\x66", 0, 0x993C}, /* East Asian ideograph */ {"\x6A", 0, 0x9948}, /* East Asian ideograph */ {"\x6C", 0, 0x9947}, /* East Asian ideograph */ {"\x6D", 0, 0x9949}, /* East Asian ideograph */ {"\x70", 0, 0x9943}, /* East Asian ideograph */ {"\x71", 0, 0x994D}, /* East Asian ideograph */ {"\x72", 0, 0x994C}, /* East Asian ideograph */ {"\x73", 0, 0x994E}, /* East Asian ideograph */ {"\x74", 0, 0x9950}, /* East Asian ideograph */ {"\x7A", 0, 0x9958}, /* East Asian ideograph */ {"\x7B", 0, 0x9954}, /* East Asian ideograph */ {"\x7E", 0, 0x9955}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page224 = { marc8_31page224_flat, 0 }; /* PAGE 223 */ struct yaz_iconv_trie_flat marc8_31page223_flat[] = { {"\x21", 0, 0x9865}, /* East Asian ideograph */ {"\x22", 0, 0x9866}, /* East Asian ideograph */ {"\x29", 0, 0x986C}, /* East Asian ideograph */ {"\x30", 0, 0x9873}, /* East Asian ideograph */ {"\x31", 0, 0x9874}, /* East Asian ideograph */ {"\x39", 0, 0x98AD}, /* East Asian ideograph */ {"\x40", 0, 0x98B4}, /* East Asian ideograph */ {"\x48", 0, 0x98B8}, /* East Asian ideograph */ {"\x4A", 0, 0x98BF}, /* East Asian ideograph */ {"\x4D", 0, 0x98BB}, /* East Asian ideograph */ {"\x4E", 0, 0x98C0}, /* East Asian ideograph */ {"\x53", 0, 0x98C6}, /* East Asian ideograph */ {"\x5F", 0, 0x98E1}, /* East Asian ideograph */ {"\x60", 0, 0x98E3}, /* East Asian ideograph */ {"\x61", 0, 0x98E4}, /* East Asian ideograph */ {"\x63", 0, 0x98E5}, /* East Asian ideograph */ {"\x68", 0, 0x98F1}, /* East Asian ideograph */ {"\x6C", 0, 0x98EB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page223 = { marc8_31page223_flat, 0 }; /* PAGE 222 */ struct yaz_iconv_trie_flat marc8_31page222_flat[] = { {"\x23", 0, 0x980E}, /* East Asian ideograph */ {"\x26", 0, 0x9816}, /* East Asian ideograph */ {"\x2C", 0, 0x9826}, /* East Asian ideograph */ {"\x2D", 0, 0x981E}, /* East Asian ideograph */ {"\x34", 0, 0x982B}, /* East Asian ideograph */ {"\x37", 0, 0x9820}, /* East Asian ideograph */ {"\x38", 0, 0x981F}, /* East Asian ideograph */ {"\x3D", 0, 0x9833}, /* East Asian ideograph */ {"\x40", 0, 0x982E}, /* East Asian ideograph */ {"\x44", 0, 0x982F}, /* East Asian ideograph */ {"\x45", 0, 0x9832}, /* East Asian ideograph */ {"\x4B", 0, 0x9847}, /* East Asian ideograph */ {"\x4E", 0, 0x9844}, /* East Asian ideograph */ {"\x60", 0, 0x9852}, /* East Asian ideograph */ {"\x62", 0, 0x984B}, /* East Asian ideograph */ {"\x66", 0, 0x983F}, /* East Asian ideograph */ {"\x6A", 0, 0x985C}, /* East Asian ideograph */ {"\x6B", 0, 0x9859}, /* East Asian ideograph */ {"\x6F", 0, 0x9857}, /* East Asian ideograph */ {"\x72", 0, 0x9856}, /* East Asian ideograph */ {"\x77", 0, 0x9862}, /* East Asian ideograph */ {"\x7E", 0, 0x9868}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page222 = { marc8_31page222_flat, 0 }; /* PAGE 221 */ struct yaz_iconv_trie_flat marc8_31page221_flat[] = { {"\x24", 0, 0x97B3}, /* East Asian ideograph */ {"\x26", 0, 0x97B5}, /* East Asian ideograph */ {"\x29", 0, 0x97B9}, /* East Asian ideograph */ {"\x2D", 0, 0x97B8}, /* East Asian ideograph */ {"\x35", 0, 0x97BE}, /* East Asian ideograph */ {"\x38", 0, 0x97C0}, /* East Asian ideograph */ {"\x3B", 0, 0x97C5}, /* East Asian ideograph */ {"\x43", 0, 0x97C9}, /* East Asian ideograph */ {"\x4B", 0, 0x97CE}, /* East Asian ideograph */ {"\x4C", 0, 0x97CD}, /* East Asian ideograph */ {"\x4E", 0, 0x97D0}, /* East Asian ideograph */ {"\x51", 0, 0x97D4}, /* East Asian ideograph */ {"\x53", 0, 0x97D8}, /* East Asian ideograph */ {"\x54", 0, 0x97D9}, /* East Asian ideograph */ {"\x59", 0, 0x97DD}, /* East Asian ideograph */ {"\x5C", 0, 0x97DE}, /* East Asian ideograph */ {"\x5E", 0, 0x97E0}, /* East Asian ideograph */ {"\x60", 0, 0x97E1}, /* East Asian ideograph */ {"\x6C", 0, 0x97F5}, /* East Asian ideograph */ {"\x73", 0, 0x97FA}, /* East Asian ideograph */ {"\x79", 0, 0x9807}, /* East Asian ideograph */ {"\x7B", 0, 0x980F}, /* East Asian ideograph */ {"\x7E", 0, 0x980D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page221 = { marc8_31page221_flat, 0 }; /* PAGE 220 */ struct yaz_iconv_trie_flat marc8_31page220_flat[] = { {"\x25", 0, 0x9767}, /* East Asian ideograph */ {"\x2C", 0, 0x976B}, /* East Asian ideograph */ {"\x30", 0, 0x976E}, /* East Asian ideograph */ {"\x31", 0, 0x9777}, /* East Asian ideograph */ {"\x32", 0, 0x9778}, /* East Asian ideograph */ {"\x35", 0, 0x9773}, /* East Asian ideograph */ {"\x37", 0, 0x9783}, /* East Asian ideograph */ {"\x38", 0, 0x977A}, /* East Asian ideograph */ {"\x3A", 0, 0x9780}, /* East Asian ideograph */ {"\x3C", 0, 0x9781}, /* East Asian ideograph */ {"\x40", 0, 0x9784}, /* East Asian ideograph */ {"\x43", 0, 0x977F}, /* East Asian ideograph */ {"\x49", 0, 0x9789}, /* East Asian ideograph */ {"\x54", 0, 0x9794}, /* East Asian ideograph */ {"\x59", 0, 0x979B}, /* East Asian ideograph */ {"\x5A", 0, 0x979F}, /* East Asian ideograph */ {"\x5C", 0, 0x979A}, /* East Asian ideograph */ {"\x62", 0, 0x979C}, /* East Asian ideograph */ {"\x6A", 0, 0x97AC}, /* East Asian ideograph */ {"\x70", 0, 0x97AE}, /* East Asian ideograph */ {"\x71", 0, 0x97A8}, /* East Asian ideograph */ {"\x74", 0, 0x97AB}, /* East Asian ideograph */ {"\x78", 0, 0x97A5}, /* East Asian ideograph */ {"\x7A", 0, 0x97B2}, /* East Asian ideograph */ {"\x7C", 0, 0x97B4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page220 = { marc8_31page220_flat, 0 }; /* PAGE 219 */ struct yaz_iconv_trie_flat marc8_31page219_flat[] = { {"\x22", 0, 0x96FF}, /* East Asian ideograph */ {"\x27", 0, 0x9702}, /* East Asian ideograph */ {"\x29", 0, 0x9708}, /* East Asian ideograph */ {"\x2A", 0, 0x9705}, /* East Asian ideograph */ {"\x38", 0, 0x971B}, /* East Asian ideograph */ {"\x3D", 0, 0x971D}, /* East Asian ideograph */ {"\x3E", 0, 0x9719}, /* East Asian ideograph */ {"\x47", 0, 0x9723}, /* East Asian ideograph */ {"\x49", 0, 0x9722}, /* East Asian ideograph */ {"\x4A", 0, 0x9724}, /* East Asian ideograph */ {"\x4E", 0, 0x9728}, /* East Asian ideograph */ {"\x50", 0, 0x9726}, /* East Asian ideograph */ {"\x52", 0, 0x9731}, /* East Asian ideograph */ {"\x58", 0, 0x9730}, /* East Asian ideograph */ {"\x5C", 0, 0x9736}, /* East Asian ideograph */ {"\x6A", 0, 0x9741}, /* East Asian ideograph */ {"\x6B", 0, 0x9747}, /* East Asian ideograph */ {"\x6C", 0, 0x9746}, /* East Asian ideograph */ {"\x6E", 0, 0x9749}, /* East Asian ideograph */ {"\x75", 0, 0x9758}, /* East Asian ideograph */ {"\x76", 0, 0x975A}, /* East Asian ideograph */ {"\x78", 0, 0x975D}, /* East Asian ideograph */ {"\x7B", 0, 0x975F}, /* East Asian ideograph */ {"\x7D", 0, 0x9764}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page219 = { marc8_31page219_flat, 0 }; /* PAGE 218 */ struct yaz_iconv_trie_flat marc8_31page218_flat[] = { {"\x2F", 0, 0x96A4}, /* East Asian ideograph */ {"\x35", 0, 0x96A9}, /* East Asian ideograph */ {"\x37", 0, 0x96AE}, /* East Asian ideograph */ {"\x3B", 0, 0x96B0}, /* East Asian ideograph */ {"\x3C", 0, 0x96B2}, /* East Asian ideograph */ {"\x3E", 0, 0x96B3}, /* East Asian ideograph */ {"\x48", 0, 0x96B9}, /* East Asian ideograph */ {"\x49", 0, 0x96BC}, /* East Asian ideograph */ {"\x52", 0, 0x96CE}, /* East Asian ideograph */ {"\x53", 0, 0x96CA}, /* East Asian ideograph */ {"\x57", 0, 0x96D2}, /* East Asian ideograph */ {"\x64", 0, 0x96DF}, /* East Asian ideograph */ {"\x66", 0, 0x96D8}, /* East Asian ideograph */ {"\x67", 0, 0x96DD}, /* East Asian ideograph */ {"\x71", 0, 0x96E9}, /* East Asian ideograph */ {"\x74", 0, 0x96F1}, /* East Asian ideograph */ {"\x76", 0, 0x96F0}, /* East Asian ideograph */ {"\x77", 0, 0x96F4}, /* East Asian ideograph */ {"\x78", 0, 0x96FA}, /* East Asian ideograph */ {"\x7A", 0, 0x96F5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page218 = { marc8_31page218_flat, 0 }; /* PAGE 217 */ struct yaz_iconv_trie_flat marc8_31page217_flat[] = { {"\x21", 0, 0x9627}, /* East Asian ideograph */ {"\x2F", 0, 0x9642}, /* East Asian ideograph */ {"\x30", 0, 0x963D}, /* East Asian ideograph */ {"\x32", 0, 0x963C}, /* East Asian ideograph */ {"\x3C", 0, 0x9651}, /* East Asian ideograph */ {"\x42", 0, 0x9660}, /* East Asian ideograph */ {"\x44", 0, 0x965C}, /* East Asian ideograph */ {"\x46", 0, 0x9658}, /* East Asian ideograph */ {"\x4A", 0, 0x965F}, /* East Asian ideograph */ {"\x4B", 0, 0x9656}, /* East Asian ideograph */ {"\x51", 0, 0x966C}, /* East Asian ideograph */ {"\x5D", 0, 0x967B}, /* East Asian ideograph */ {"\x5E", 0, 0x967F}, /* East Asian ideograph */ {"\x62", 0, 0x967E}, /* East Asian ideograph */ {"\x63", 0, 0x9684}, /* East Asian ideograph */ {"\x65", 0, 0x9688}, /* East Asian ideograph */ {"\x6C", 0, 0x9689}, /* East Asian ideograph */ {"\x6D", 0, 0x9682}, /* East Asian ideograph */ {"\x6E", 0, 0x9683}, /* East Asian ideograph */ {"\x79", 0, 0x9696}, /* East Asian ideograph */ {"\x7A", 0, 0x9697}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page217 = { marc8_31page217_flat, 0 }; /* PAGE 216 */ struct yaz_iconv_trie_flat marc8_31page216_flat[] = { {"\x2E", 0, 0x9585}, /* East Asian ideograph */ {"\x30", 0, 0x9588}, /* East Asian ideograph */ {"\x31", 0, 0x958C}, /* East Asian ideograph */ {"\x34", 0, 0x9597}, /* East Asian ideograph */ {"\x36", 0, 0x958E}, /* East Asian ideograph */ {"\x38", 0, 0x959F}, /* East Asian ideograph */ {"\x3A", 0, 0x95A0}, /* East Asian ideograph */ {"\x42", 0, 0x95AC}, /* East Asian ideograph */ {"\x44", 0, 0x95AB}, /* East Asian ideograph */ {"\x48", 0, 0x95BC}, /* East Asian ideograph */ {"\x49", 0, 0x95BE}, /* East Asian ideograph */ {"\x4A", 0, 0x95CD}, /* East Asian ideograph */ {"\x4D", 0, 0x95B9}, /* East Asian ideograph */ {"\x4E", 0, 0x95BA}, /* East Asian ideograph */ {"\x4F", 0, 0x95B6}, /* East Asian ideograph */ {"\x50", 0, 0x95BF}, /* East Asian ideograph */ {"\x52", 0, 0x95BD}, /* East Asian ideograph */ {"\x59", 0, 0x95C9}, /* East Asian ideograph */ {"\x5D", 0, 0x95CE}, /* East Asian ideograph */ {"\x60", 0, 0x95D5}, /* East Asian ideograph */ {"\x62", 0, 0x95D2}, /* East Asian ideograph */ {"\x63", 0, 0x95D3}, /* East Asian ideograph */ {"\x64", 0, 0x95D1}, /* East Asian ideograph */ {"\x65", 0, 0x95C3}, /* East Asian ideograph */ {"\x66", 0, 0x95DA}, /* East Asian ideograph */ {"\x69", 0, 0x95DE}, /* East Asian ideograph */ {"\x6A", 0, 0x95E0}, /* East Asian ideograph */ {"\x6F", 0, 0x95E5}, /* East Asian ideograph */ {"\x72", 0, 0x95E4}, /* East Asian ideograph */ {"\x76", 0, 0x95E7}, /* East Asian ideograph */ {"\x7A", 0, 0x961E}, /* East Asian ideograph */ {"\x7B", 0, 0x9624}, /* East Asian ideograph */ {"\x7C", 0, 0x9622}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page216 = { marc8_31page216_flat, 0 }; /* PAGE 215 */ struct yaz_iconv_trie_flat marc8_31page215_flat[] = { {"\x27", 0, 0x93F4}, /* East Asian ideograph */ {"\x28", 0, 0x9436}, /* East Asian ideograph */ {"\x2B", 0, 0x943B}, /* East Asian ideograph */ {"\x2D", 0, 0x9424}, /* East Asian ideograph */ {"\x30", 0, 0x9437}, /* East Asian ideograph */ {"\x32", 0, 0x9440}, /* East Asian ideograph */ {"\x35", 0, 0x942B}, /* East Asian ideograph */ {"\x36", 0, 0x942D}, /* East Asian ideograph */ {"\x37", 0, 0x9441}, /* East Asian ideograph */ {"\x38", 0, 0x9431}, /* East Asian ideograph */ {"\x3D", 0, 0x9467}, /* East Asian ideograph */ {"\x3E", 0, 0x944C}, /* East Asian ideograph */ {"\x40", 0, 0x9445}, /* East Asian ideograph */ {"\x42", 0, 0x9450}, /* East Asian ideograph */ {"\x4A", 0, 0x944A}, /* East Asian ideograph */ {"\x53", 0, 0x9466}, /* East Asian ideograph */ {"\x57", 0, 0x9464}, /* East Asian ideograph */ {"\x58", 0, 0x9462}, /* East Asian ideograph */ {"\x5C", 0, 0x9465}, /* East Asian ideograph */ {"\x5D", 0, 0x9455}, /* East Asian ideograph */ {"\x5E", 0, 0x945E}, /* East Asian ideograph */ {"\x62", 0, 0x946A}, /* East Asian ideograph */ {"\x68", 0, 0x946B}, /* East Asian ideograph */ {"\x69", 0, 0x946D}, /* East Asian ideograph */ {"\x6C", 0, 0x946F}, /* East Asian ideograph */ {"\x6D", 0, 0x9471}, /* East Asian ideograph */ {"\x71", 0, 0x9477}, /* East Asian ideograph */ {"\x7B", 0, 0x9482}, /* East Asian ideograph */ {"\x7C", 0, 0x9481}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page215 = { marc8_31page215_flat, 0 }; /* PAGE 214 */ struct yaz_iconv_trie_flat marc8_31page214_flat[] = { {"\x2C", 0, 0x93D3}, /* East Asian ideograph */ {"\x2F", 0, 0x93A9}, /* East Asian ideograph */ {"\x30", 0, 0x93E6}, /* East Asian ideograph */ {"\x32", 0, 0x940B}, /* East Asian ideograph */ {"\x34", 0, 0x9413}, /* East Asian ideograph */ {"\x3B", 0, 0x940F}, /* East Asian ideograph */ {"\x3C", 0, 0x9420}, /* East Asian ideograph */ {"\x3D", 0, 0x93FB}, /* East Asian ideograph */ {"\x49", 0, 0x93FA}, /* East Asian ideograph */ {"\x4D", 0, 0x9419}, /* East Asian ideograph */ {"\x4E", 0, 0x940D}, /* East Asian ideograph */ {"\x50", 0, 0x9426}, /* East Asian ideograph */ {"\x51", 0, 0x9427}, /* East Asian ideograph */ {"\x55", 0, 0x9409}, /* East Asian ideograph */ {"\x58", 0, 0x9414}, /* East Asian ideograph */ {"\x59", 0, 0x9404}, /* East Asian ideograph */ {"\x5C", 0, 0x9422}, /* East Asian ideograph */ {"\x5D", 0, 0x9406}, /* East Asian ideograph */ {"\x60", 0, 0x9410}, /* East Asian ideograph */ {"\x62", 0, 0x9423}, /* East Asian ideograph */ {"\x67", 0, 0x93F5}, /* East Asian ideograph */ {"\x69", 0, 0x93F7}, /* East Asian ideograph */ {"\x6A", 0, 0x9407}, /* East Asian ideograph */ {"\x6F", 0, 0x940E}, /* East Asian ideograph */ {"\x71", 0, 0x9411}, /* East Asian ideograph */ {"\x74", 0, 0x943F}, /* East Asian ideograph */ {"\x79", 0, 0x9429}, /* East Asian ideograph */ {"\x7C", 0, 0x943D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page214 = { marc8_31page214_flat, 0 }; /* PAGE 213 */ struct yaz_iconv_trie_flat marc8_31page213_flat[] = { {"\x21", 0, 0x93B5}, /* East Asian ideograph */ {"\x22", 0, 0x938C}, /* East Asian ideograph */ {"\x23", 0, 0x9388}, /* East Asian ideograph */ {"\x25", 0, 0x93B9}, /* East Asian ideograph */ {"\x27", 0, 0x93A1}, /* East Asian ideograph */ {"\x28", 0, 0x93B0}, /* East Asian ideograph */ {"\x29", 0, 0x93A3}, /* East Asian ideograph */ {"\x2A", 0, 0x93B7}, /* East Asian ideograph */ {"\x2B", 0, 0x939B}, /* East Asian ideograph */ {"\x2D", 0, 0x9398}, /* East Asian ideograph */ {"\x3C", 0, 0x9389}, /* East Asian ideograph */ {"\x3D", 0, 0x93A4}, /* East Asian ideograph */ {"\x40", 0, 0x93BC}, /* East Asian ideograph */ {"\x42", 0, 0x93A7}, /* East Asian ideograph */ {"\x44", 0, 0x93BD}, /* East Asian ideograph */ {"\x47", 0, 0x93A6}, /* East Asian ideograph */ {"\x48", 0, 0x939A}, /* East Asian ideograph */ {"\x4A", 0, 0x93AA}, /* East Asian ideograph */ {"\x4D", 0, 0x939E}, /* East Asian ideograph */ {"\x4F", 0, 0x9397}, /* East Asian ideograph */ {"\x51", 0, 0x93BB}, /* East Asian ideograph */ {"\x53", 0, 0x93F1}, /* East Asian ideograph */ {"\x56", 0, 0x93DE}, /* East Asian ideograph */ {"\x57", 0, 0x93EE}, /* East Asian ideograph */ {"\x5A", 0, 0x93C7}, /* East Asian ideograph */ {"\x5B", 0, 0x93F2}, /* East Asian ideograph */ {"\x5D", 0, 0x93D4}, /* East Asian ideograph */ {"\x5F", 0, 0x93E5}, /* East Asian ideograph */ {"\x62", 0, 0x93F9}, /* East Asian ideograph */ {"\x63", 0, 0x93CA}, /* East Asian ideograph */ {"\x64", 0, 0x93C4}, /* East Asian ideograph */ {"\x66", 0, 0x93E8}, /* East Asian ideograph */ {"\x67", 0, 0x93E7}, /* East Asian ideograph */ {"\x72", 0, 0x93DA}, /* East Asian ideograph */ {"\x73", 0, 0x93D0}, /* East Asian ideograph */ {"\x74", 0, 0x93EF}, /* East Asian ideograph */ {"\x75", 0, 0x93DB}, /* East Asian ideograph */ {"\x7C", 0, 0x93CC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page213 = { marc8_31page213_flat, 0 }; /* PAGE 212 */ struct yaz_iconv_trie_flat marc8_31page212_flat[] = { {"\x22", 0, 0x9314}, /* East Asian ideograph */ {"\x28", 0, 0x92FE}, /* East Asian ideograph */ {"\x2F", 0, 0x9342}, /* East Asian ideograph */ {"\x31", 0, 0x9341}, /* East Asian ideograph */ {"\x32", 0, 0x9319}, /* East Asian ideograph */ {"\x35", 0, 0x934C}, /* East Asian ideograph */ {"\x41", 0, 0x9379}, /* East Asian ideograph */ {"\x44", 0, 0x9386}, /* East Asian ideograph */ {"\x47", 0, 0x936A}, /* East Asian ideograph */ {"\x48", 0, 0x935C}, /* East Asian ideograph */ {"\x4C", 0, 0x934F}, /* East Asian ideograph */ {"\x4D", 0, 0x9347}, /* East Asian ideograph */ {"\x51", 0, 0x937A}, /* East Asian ideograph */ {"\x53", 0, 0x9356}, /* East Asian ideograph */ {"\x54", 0, 0x9371}, /* East Asian ideograph */ {"\x56", 0, 0x937C}, /* East Asian ideograph */ {"\x5C", 0, 0x9377}, /* East Asian ideograph */ {"\x5D", 0, 0x9349}, /* East Asian ideograph */ {"\x5E", 0, 0x9358}, /* East Asian ideograph */ {"\x5F", 0, 0x935A}, /* East Asian ideograph */ {"\x60", 0, 0x93BE}, /* East Asian ideograph */ {"\x62", 0, 0x935F}, /* East Asian ideograph */ {"\x64", 0, 0x9376}, /* East Asian ideograph */ {"\x66", 0, 0x9355}, /* East Asian ideograph */ {"\x67", 0, 0x9354}, /* East Asian ideograph */ {"\x6A", 0, 0x9348}, /* East Asian ideograph */ {"\x6B", 0, 0x9374}, /* East Asian ideograph */ {"\x6E", 0, 0x9351}, /* East Asian ideograph */ {"\x6F", 0, 0x9364}, /* East Asian ideograph */ {"\x71", 0, 0x936B}, /* East Asian ideograph */ {"\x72", 0, 0x936D}, /* East Asian ideograph */ {"\x73", 0, 0x9360}, /* East Asian ideograph */ {"\x77", 0, 0x936E}, /* East Asian ideograph */ {"\x79", 0, 0x938F}, /* East Asian ideograph */ {"\x7A", 0, 0x93AC}, /* East Asian ideograph */ {"\x7B", 0, 0x9395}, /* East Asian ideograph */ {"\x7E", 0, 0x938B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page212 = { marc8_31page212_flat, 0 }; /* PAGE 211 */ struct yaz_iconv_trie_flat marc8_31page211_flat[] = { {"\x21", 0, 0x92C6}, /* East Asian ideograph */ {"\x25", 0, 0x92F4}, /* East Asian ideograph */ {"\x27", 0, 0x92CF}, /* East Asian ideograph */ {"\x2A", 0, 0x92B2}, /* East Asian ideograph */ {"\x2C", 0, 0x92E7}, /* East Asian ideograph */ {"\x2D", 0, 0x92C7}, /* East Asian ideograph */ {"\x2E", 0, 0x92F0}, /* East Asian ideograph */ {"\x2F", 0, 0x92DB}, /* East Asian ideograph */ {"\x30", 0, 0x92DC}, /* East Asian ideograph */ {"\x31", 0, 0x92D8}, /* East Asian ideograph */ {"\x33", 0, 0x92E9}, /* East Asian ideograph */ {"\x35", 0, 0x92DD}, /* East Asian ideograph */ {"\x39", 0, 0x92D1}, /* East Asian ideograph */ {"\x3A", 0, 0x92CA}, /* East Asian ideograph */ {"\x3C", 0, 0x92C2}, /* East Asian ideograph */ {"\x3E", 0, 0x92CC}, /* East Asian ideograph */ {"\x40", 0, 0x92EF}, /* East Asian ideograph */ {"\x41", 0, 0x92E8}, /* East Asian ideograph */ {"\x43", 0, 0x92EB}, /* East Asian ideograph */ {"\x45", 0, 0x92F5}, /* East Asian ideograph */ {"\x48", 0, 0x92F2}, /* East Asian ideograph */ {"\x4C", 0, 0x9303}, /* East Asian ideograph */ {"\x4D", 0, 0x9307}, /* East Asian ideograph */ {"\x4E", 0, 0x931E}, /* East Asian ideograph */ {"\x4F", 0, 0x9344}, /* East Asian ideograph */ {"\x53", 0, 0x931D}, /* East Asian ideograph */ {"\x54", 0, 0x92FA}, /* East Asian ideograph */ {"\x58", 0, 0x931F}, /* East Asian ideograph */ {"\x5A", 0, 0x9331}, /* East Asian ideograph */ {"\x5B", 0, 0x9306}, /* East Asian ideograph */ {"\x5D", 0, 0x92F9}, /* East Asian ideograph */ {"\x5F", 0, 0x930F}, /* East Asian ideograph */ {"\x62", 0, 0x9302}, /* East Asian ideograph */ {"\x64", 0, 0x9324}, /* East Asian ideograph */ {"\x66", 0, 0x9312}, /* East Asian ideograph */ {"\x69", 0, 0x9338}, /* East Asian ideograph */ {"\x6A", 0, 0x9323}, /* East Asian ideograph */ {"\x6C", 0, 0x9321}, /* East Asian ideograph */ {"\x71", 0, 0x9340}, /* East Asian ideograph */ {"\x72", 0, 0x9301}, /* East Asian ideograph */ {"\x74", 0, 0x9315}, /* East Asian ideograph */ {"\x76", 0, 0x9329}, /* East Asian ideograph */ {"\x78", 0, 0x932E}, /* East Asian ideograph */ {"\x79", 0, 0x932A}, /* East Asian ideograph */ {"\x7B", 0, 0x933F}, /* East Asian ideograph */ {"\x7C", 0, 0x933A}, /* East Asian ideograph */ {"\x7E", 0, 0x9335}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page211 = { marc8_31page211_flat, 0 }; /* PAGE 210 */ struct yaz_iconv_trie_flat marc8_31page210_flat[] = { {"\x23", 0, 0x924E}, /* East Asian ideograph */ {"\x26", 0, 0x924C}, /* East Asian ideograph */ {"\x27", 0, 0x9256}, /* East Asian ideograph */ {"\x2B", 0, 0x925A}, /* East Asian ideograph */ {"\x2E", 0, 0x9241}, /* East Asian ideograph */ {"\x2F", 0, 0x9283}, /* East Asian ideograph */ {"\x31", 0, 0x92A5}, /* East Asian ideograph */ {"\x33", 0, 0x9282}, /* East Asian ideograph */ {"\x35", 0, 0x92A8}, /* East Asian ideograph */ {"\x37", 0, 0x927C}, /* East Asian ideograph */ {"\x38", 0, 0x92A4}, /* East Asian ideograph */ {"\x3E", 0, 0x9276}, /* East Asian ideograph */ {"\x3F", 0, 0x928D}, /* East Asian ideograph */ {"\x40", 0, 0x92EE}, /* East Asian ideograph */ {"\x42", 0, 0x9288}, /* East Asian ideograph */ {"\x43", 0, 0x927A}, /* East Asian ideograph */ {"\x45", 0, 0x928E}, /* East Asian ideograph */ {"\x46", 0, 0x92A0}, /* East Asian ideograph */ {"\x47", 0, 0x9277}, /* East Asian ideograph */ {"\x49", 0, 0x92AA}, /* East Asian ideograph */ {"\x50", 0, 0x92A6}, /* East Asian ideograph */ {"\x54", 0, 0x927E}, /* East Asian ideograph */ {"\x55", 0, 0x929A}, /* East Asian ideograph */ {"\x58", 0, 0x92AB}, /* East Asian ideograph */ {"\x5B", 0, 0x9291}, /* East Asian ideograph */ {"\x5D", 0, 0x929B}, /* East Asian ideograph */ {"\x62", 0, 0x927F}, /* East Asian ideograph */ {"\x64", 0, 0x92A3}, /* East Asian ideograph */ {"\x66", 0, 0x92C8}, /* East Asian ideograph */ {"\x6A", 0, 0x92C3}, /* East Asian ideograph */ {"\x6F", 0, 0x92D0}, /* East Asian ideograph */ {"\x71", 0, 0x92F1}, /* East Asian ideograph */ {"\x72", 0, 0x92DF}, /* East Asian ideograph */ {"\x75", 0, 0x92E6}, /* East Asian ideograph */ {"\x76", 0, 0x92B6}, /* East Asian ideograph */ {"\x77", 0, 0x92C0}, /* East Asian ideograph */ {"\x79", 0, 0x92BE}, /* East Asian ideograph */ {"\x7A", 0, 0x92D9}, /* East Asian ideograph */ {"\x7E", 0, 0x92D5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page210 = { marc8_31page210_flat, 0 }; /* PAGE 209 */ struct yaz_iconv_trie_flat marc8_31page209_flat[] = { {"\x21", 0, 0x91F9}, /* East Asian ideograph */ {"\x22", 0, 0x91E4}, /* East Asian ideograph */ {"\x23", 0, 0x9204}, /* East Asian ideograph */ {"\x25", 0, 0x9201}, /* East Asian ideograph */ {"\x26", 0, 0x922B}, /* East Asian ideograph */ {"\x27", 0, 0x920A}, /* East Asian ideograph */ {"\x28", 0, 0x9225}, /* East Asian ideograph */ {"\x2A", 0, 0x9292}, /* East Asian ideograph */ {"\x2C", 0, 0x9228}, /* East Asian ideograph */ {"\x2E", 0, 0x9207}, /* East Asian ideograph */ {"\x2F", 0, 0x9203}, /* East Asian ideograph */ {"\x31", 0, 0x9200}, /* East Asian ideograph */ {"\x32", 0, 0x9218}, /* East Asian ideograph */ {"\x33", 0, 0x91FE}, /* East Asian ideograph */ {"\x36", 0, 0x9208}, /* East Asian ideograph */ {"\x37", 0, 0x9226}, /* East Asian ideograph */ {"\x38", 0, 0x921C}, /* East Asian ideograph */ {"\x3B", 0, 0x9224}, /* East Asian ideograph */ {"\x43", 0, 0x9212}, /* East Asian ideograph */ {"\x48", 0, 0x91FF}, /* East Asian ideograph */ {"\x4A", 0, 0x9216}, /* East Asian ideograph */ {"\x4B", 0, 0x9211}, /* East Asian ideograph */ {"\x4E", 0, 0x9206}, /* East Asian ideograph */ {"\x4F", 0, 0x92A2}, /* East Asian ideograph */ {"\x51", 0, 0x9230}, /* East Asian ideograph */ {"\x52", 0, 0x9249}, /* East Asian ideograph */ {"\x54", 0, 0x924D}, /* East Asian ideograph */ {"\x55", 0, 0x9248}, /* East Asian ideograph */ {"\x58", 0, 0x923A}, /* East Asian ideograph */ {"\x5C", 0, 0x922E}, /* East Asian ideograph */ {"\x5F", 0, 0x9233}, /* East Asian ideograph */ {"\x61", 0, 0x9266}, /* East Asian ideograph */ {"\x64", 0, 0x925E}, /* East Asian ideograph */ {"\x68", 0, 0x9235}, /* East Asian ideograph */ {"\x6B", 0, 0x9250}, /* East Asian ideograph */ {"\x6C", 0, 0x926B}, /* East Asian ideograph */ {"\x6D", 0, 0x9239}, /* East Asian ideograph */ {"\x6F", 0, 0x926D}, /* East Asian ideograph */ {"\x70", 0, 0x926C}, /* East Asian ideograph */ {"\x71", 0, 0x924F}, /* East Asian ideograph */ {"\x74", 0, 0x923F}, /* East Asian ideograph */ {"\x77", 0, 0x9260}, /* East Asian ideograph */ {"\x7E", 0, 0x9236}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page209 = { marc8_31page209_flat, 0 }; /* PAGE 208 */ struct yaz_iconv_trie_flat marc8_31page208_flat[] = { {"\x24", 0, 0x918D}, /* East Asian ideograph */ {"\x25", 0, 0x9193}, /* East Asian ideograph */ {"\x2B", 0, 0x919D}, /* East Asian ideograph */ {"\x2C", 0, 0x919A}, /* East Asian ideograph */ {"\x30", 0, 0x91A2}, /* East Asian ideograph */ {"\x34", 0, 0x919B}, /* East Asian ideograph (variant of EACC 4D4134) */ {"\x37", 0, 0x91A8}, /* East Asian ideograph */ {"\x3D", 0, 0x91AA}, /* East Asian ideograph */ {"\x41", 0, 0x91AF}, /* East Asian ideograph */ {"\x42", 0, 0x91B1}, /* East Asian ideograph */ {"\x47", 0, 0x91AD}, /* East Asian ideograph */ {"\x48", 0, 0x91AE}, /* East Asian ideograph */ {"\x4B", 0, 0x91B4}, /* East Asian ideograph */ {"\x4C", 0, 0x91B2}, /* East Asian ideograph */ {"\x4D", 0, 0x91B5}, /* East Asian ideograph */ {"\x56", 0, 0x91BF}, /* East Asian ideograph */ {"\x57", 0, 0x91BD}, /* East Asian ideograph */ {"\x5A", 0, 0x91C2}, /* East Asian ideograph */ {"\x5B", 0, 0x91C4}, /* East Asian ideograph */ {"\x5C", 0, 0x91C3}, /* East Asian ideograph */ {"\x61", 0, 0x91D4}, /* East Asian ideograph */ {"\x62", 0, 0x91D3}, /* East Asian ideograph */ {"\x63", 0, 0x91D5}, /* East Asian ideograph */ {"\x64", 0, 0x91D9}, /* East Asian ideograph */ {"\x68", 0, 0x91E2}, /* East Asian ideograph */ {"\x69", 0, 0x91ED}, /* East Asian ideograph */ {"\x6A", 0, 0x91F7}, /* East Asian ideograph */ {"\x6B", 0, 0x91FA}, /* East Asian ideograph */ {"\x6F", 0, 0x91F2}, /* East Asian ideograph */ {"\x71", 0, 0x91E8}, /* East Asian ideograph */ {"\x72", 0, 0x91F6}, /* East Asian ideograph */ {"\x73", 0, 0x91EE}, /* East Asian ideograph */ {"\x74", 0, 0x91F4}, /* East Asian ideograph */ {"\x77", 0, 0x91F1}, /* East Asian ideograph */ {"\x79", 0, 0x91E9}, /* East Asian ideograph */ {"\x7A", 0, 0x91F8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page208 = { marc8_31page208_flat, 0 }; /* PAGE 207 */ struct yaz_iconv_trie_flat marc8_31page207_flat[] = { {"\x21", 0, 0x9132}, /* East Asian ideograph */ {"\x24", 0, 0x9126}, /* East Asian ideograph */ {"\x2B", 0, 0x9134}, /* East Asian ideograph */ {"\x2C", 0, 0x9136}, /* East Asian ideograph */ {"\x31", 0, 0x913A}, /* East Asian ideograph */ {"\x32", 0, 0x913B}, /* East Asian ideograph */ {"\x3B", 0, 0x9143}, /* East Asian ideograph */ {"\x3E", 0, 0x9146}, /* East Asian ideograph */ {"\x3F", 0, 0x9145}, /* East Asian ideograph */ {"\x40", 0, 0x9148}, /* East Asian ideograph */ {"\x41", 0, 0x9147}, /* East Asian ideograph */ {"\x42", 0, 0x9150}, /* East Asian ideograph */ {"\x43", 0, 0x914E}, /* East Asian ideograph */ {"\x48", 0, 0x9159}, /* East Asian ideograph */ {"\x49", 0, 0x915C}, /* East Asian ideograph */ {"\x4D", 0, 0x9156}, /* East Asian ideograph */ {"\x50", 0, 0x9158}, /* East Asian ideograph */ {"\x52", 0, 0x915A}, /* East Asian ideograph */ {"\x53", 0, 0x9161}, /* East Asian ideograph */ {"\x56", 0, 0x9164}, /* East Asian ideograph */ {"\x61", 0, 0x916F}, /* East Asian ideograph */ {"\x62", 0, 0x916E}, /* East Asian ideograph */ {"\x66", 0, 0x917A}, /* East Asian ideograph */ {"\x68", 0, 0x9172}, /* East Asian ideograph */ {"\x69", 0, 0x9179}, /* East Asian ideograph */ {"\x6A", 0, 0x9176}, /* East Asian ideograph */ {"\x6B", 0, 0x9174}, /* East Asian ideograph */ {"\x6C", 0, 0x9173}, /* East Asian ideograph */ {"\x6D", 0, 0x9185}, /* East Asian ideograph */ {"\x6F", 0, 0x9182}, /* East Asian ideograph */ {"\x70", 0, 0x918A}, /* East Asian ideograph */ {"\x71", 0, 0x9186}, /* East Asian ideograph */ {"\x72", 0, 0x918C}, /* East Asian ideograph */ {"\x73", 0, 0x9181}, /* East Asian ideograph */ {"\x7B", 0, 0x9191}, /* East Asian ideograph */ {"\x7D", 0, 0x9190}, /* East Asian ideograph */ {"\x7E", 0, 0x918E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page207 = { marc8_31page207_flat, 0 }; /* PAGE 206 */ struct yaz_iconv_trie_flat marc8_31page206_flat[] = { {"\x22", 0, 0x90DD}, /* East Asian ideograph */ {"\x23", 0, 0x90DF}, /* East Asian ideograph */ {"\x26", 0, 0x90E2}, /* East Asian ideograph */ {"\x27", 0, 0x90D8}, /* East Asian ideograph */ {"\x28", 0, 0x90DB}, /* East Asian ideograph */ {"\x2A", 0, 0x90DC}, /* East Asian ideograph */ {"\x2C", 0, 0x90D7}, /* East Asian ideograph */ {"\x2D", 0, 0x90E4}, /* East Asian ideograph */ {"\x2E", 0, 0x90EF}, /* East Asian ideograph */ {"\x2F", 0, 0x90EA}, /* East Asian ideograph */ {"\x32", 0, 0x90F0}, /* East Asian ideograph */ {"\x33", 0, 0x90F4}, /* East Asian ideograph */ {"\x34", 0, 0x90F2}, /* East Asian ideograph */ {"\x3E", 0, 0x90EB}, /* East Asian ideograph */ {"\x3F", 0, 0x90F3}, /* East Asian ideograph */ {"\x46", 0, 0x90FC}, /* East Asian ideograph */ {"\x47", 0, 0x90FE}, /* East Asian ideograph */ {"\x49", 0, 0x9104}, /* East Asian ideograph */ {"\x4A", 0, 0x90FF}, /* East Asian ideograph */ {"\x4C", 0, 0x9106}, /* East Asian ideograph */ {"\x4E", 0, 0x9100}, /* East Asian ideograph */ {"\x50", 0, 0x9107}, /* East Asian ideograph */ {"\x57", 0, 0x910F}, /* East Asian ideograph */ {"\x58", 0, 0x9111}, /* East Asian ideograph */ {"\x5A", 0, 0x9116}, /* East Asian ideograph */ {"\x5C", 0, 0x9114}, /* East Asian ideograph */ {"\x60", 0, 0x910B}, /* East Asian ideograph */ {"\x62", 0, 0x9123}, /* East Asian ideograph (Version J extension) */ {"\x63", 0, 0x9118}, /* East Asian ideograph */ {"\x64", 0, 0x911C}, /* East Asian ideograph */ {"\x66", 0, 0x9120}, /* East Asian ideograph */ {"\x67", 0, 0x9122}, /* East Asian ideograph */ {"\x6A", 0, 0x911E}, /* East Asian ideograph */ {"\x71", 0, 0x9124}, /* East Asian ideograph */ {"\x72", 0, 0x911A}, /* East Asian ideograph */ {"\x74", 0, 0x9125}, /* East Asian ideograph */ {"\x77", 0, 0x912F}, /* East Asian ideograph */ {"\x79", 0, 0x912B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page206 = { marc8_31page206_flat, 0 }; /* PAGE 205 */ struct yaz_iconv_trie_flat marc8_31page205_flat[] = { {"\x21", 0, 0x9070}, /* East Asian ideograph */ {"\x25", 0, 0x906F}, /* East Asian ideograph */ {"\x26", 0, 0x9079}, /* East Asian ideograph */ {"\x28", 0, 0x9076}, /* East Asian ideograph */ {"\x2A", 0, 0x907B}, /* East Asian ideograph */ {"\x2C", 0, 0x9085}, /* East Asian ideograph */ {"\x34", 0, 0x9083}, /* East Asian ideograph */ {"\x37", 0, 0x9088}, /* East Asian ideograph */ {"\x3A", 0, 0x908B}, /* East Asian ideograph */ {"\x3F", 0, 0x9099}, /* East Asian ideograph */ {"\x40", 0, 0x9097}, /* East Asian ideograph */ {"\x43", 0, 0x909B}, /* East Asian ideograph */ {"\x44", 0, 0x909C}, /* East Asian ideograph */ {"\x48", 0, 0x90A1}, /* East Asian ideograph */ {"\x51", 0, 0x90A8}, /* East Asian ideograph */ {"\x54", 0, 0x90A0}, /* East Asian ideograph */ {"\x58", 0, 0x90AF}, /* East Asian ideograph */ {"\x59", 0, 0x90B3}, /* East Asian ideograph */ {"\x5B", 0, 0x90B6}, /* East Asian ideograph */ {"\x5D", 0, 0x90B0}, /* East Asian ideograph */ {"\x5F", 0, 0x90AD}, /* East Asian ideograph */ {"\x61", 0, 0x90B2}, /* East Asian ideograph */ {"\x68", 0, 0x90C9}, /* East Asian ideograph */ {"\x6A", 0, 0x90BD}, /* East Asian ideograph */ {"\x6F", 0, 0x90D5}, /* East Asian ideograph */ {"\x72", 0, 0x90BE}, /* East Asian ideograph */ {"\x75", 0, 0x90C7}, /* East Asian ideograph */ {"\x78", 0, 0x90C8}, /* East Asian ideograph */ {"\x79", 0, 0x90C3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page205 = { marc8_31page205_flat, 0 }; /* PAGE 204 */ struct yaz_iconv_trie_flat marc8_31page204_flat[] = { {"\x21", 0, 0x8FDA}, /* East Asian ideograph */ {"\x22", 0, 0x8FD5}, /* East Asian ideograph */ {"\x2F", 0, 0x8FE4}, /* East Asian ideograph */ {"\x30", 0, 0x8FEE}, /* East Asian ideograph */ {"\x35", 0, 0x8FF9}, /* East Asian ideograph */ {"\x3C", 0, 0x8FFB}, /* East Asian ideograph */ {"\x3F", 0, 0x9004}, /* East Asian ideograph */ {"\x40", 0, 0x9008}, /* East Asian ideograph */ {"\x44", 0, 0x9011}, /* East Asian ideograph */ {"\x45", 0, 0x900B}, /* East Asian ideograph */ {"\x48", 0, 0x900C}, /* East Asian ideograph */ {"\x49", 0, 0x9021}, /* East Asian ideograph */ {"\x4A", 0, 0x902D}, /* East Asian ideograph */ {"\x4E", 0, 0x902C}, /* East Asian ideograph */ {"\x56", 0, 0x9037}, /* East Asian ideograph */ {"\x57", 0, 0x9034}, /* East Asian ideograph */ {"\x58", 0, 0x902F}, /* East Asian ideograph */ {"\x59", 0, 0x9036}, /* East Asian ideograph */ {"\x5B", 0, 0x9046}, /* East Asian ideograph */ {"\x5D", 0, 0x9052}, /* East Asian ideograph */ {"\x67", 0, 0x9049}, /* East Asian ideograph */ {"\x6A", 0, 0x9044}, /* East Asian ideograph */ {"\x74", 0, 0x9062}, /* East Asian ideograph */ {"\x75", 0, 0x905D}, /* East Asian ideograph */ {"\x78", 0, 0x905B}, /* East Asian ideograph */ {"\x7B", 0, 0x906B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page204 = { marc8_31page204_flat, 0 }; /* PAGE 203 */ struct yaz_iconv_trie_flat marc8_31page203_flat[] = { {"\x26", 0, 0x8F39}, /* East Asian ideograph */ {"\x27", 0, 0x8F34}, /* East Asian ideograph */ {"\x2D", 0, 0x8F40}, /* East Asian ideograph */ {"\x30", 0, 0x8F46}, /* East Asian ideograph */ {"\x31", 0, 0x8F4A}, /* East Asian ideograph */ {"\x33", 0, 0x8F47}, /* East Asian ideograph */ {"\x3D", 0, 0x8F52}, /* East Asian ideograph */ {"\x48", 0, 0x8F56}, /* East Asian ideograph */ {"\x49", 0, 0x8F57}, /* East Asian ideograph */ {"\x4B", 0, 0x8F55}, /* East Asian ideograph */ {"\x4C", 0, 0x8F58}, /* East Asian ideograph */ {"\x4D", 0, 0x8F5C}, /* East Asian ideograph */ {"\x4E", 0, 0x8F5E}, /* East Asian ideograph */ {"\x53", 0, 0x8F5D}, /* East Asian ideograph */ {"\x57", 0, 0x8F62}, /* East Asian ideograph */ {"\x59", 0, 0x8F63}, /* East Asian ideograph */ {"\x5A", 0, 0x8F64}, /* East Asian ideograph */ {"\x65", 0, 0x8FA4}, /* East Asian ideograph */ {"\x66", 0, 0x8FA5}, /* East Asian ideograph */ {"\x6C", 0, 0x8FB5}, /* East Asian ideograph */ {"\x6D", 0, 0x8FB7}, /* East Asian ideograph */ {"\x6E", 0, 0x8FBB}, /* East Asian ideograph */ {"\x70", 0, 0x8FBC}, /* East Asian ideograph */ {"\x74", 0, 0x8FBF}, /* East Asian ideograph */ {"\x75", 0, 0x8FD2}, /* East Asian ideograph */ {"\x77", 0, 0x8FCB}, /* East Asian ideograph */ {"\x7A", 0, 0x8FCA}, /* East Asian ideograph */ {"\x7B", 0, 0x8FD3}, /* East Asian ideograph */ {"\x7D", 0, 0x8FCD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page203 = { marc8_31page203_flat, 0 }; /* PAGE 202 */ struct yaz_iconv_trie_flat marc8_31page202_flat[] = { {"\x2E", 0, 0x8EC9}, /* East Asian ideograph */ {"\x2F", 0, 0x8ECF}, /* East Asian ideograph */ {"\x31", 0, 0x8ECE}, /* East Asian ideograph */ {"\x33", 0, 0x8ED5}, /* East Asian ideograph */ {"\x3F", 0, 0x8EFA}, /* East Asian ideograph */ {"\x42", 0, 0x8EF9}, /* East Asian ideograph */ {"\x4B", 0, 0x8EE8}, /* East Asian ideograph */ {"\x4F", 0, 0x8EEB}, /* East Asian ideograph */ {"\x51", 0, 0x8EFF}, /* East Asian ideograph */ {"\x56", 0, 0x8F00}, /* East Asian ideograph */ {"\x59", 0, 0x8F05}, /* East Asian ideograph */ {"\x5A", 0, 0x8F08}, /* East Asian ideograph */ {"\x5B", 0, 0x8F07}, /* East Asian ideograph */ {"\x63", 0, 0x8F27}, /* East Asian ideograph */ {"\x64", 0, 0x8F2C}, /* East Asian ideograph */ {"\x6B", 0, 0x8F1E}, /* East Asian ideograph */ {"\x6D", 0, 0x8F25}, /* East Asian ideograph */ {"\x6E", 0, 0x8F20}, /* East Asian ideograph */ {"\x75", 0, 0x8F17}, /* East Asian ideograph */ {"\x78", 0, 0x8F36}, /* East Asian ideograph */ {"\x79", 0, 0x8F2E}, /* East Asian ideograph */ {"\x7A", 0, 0x8F33}, /* East Asian ideograph */ {"\x7D", 0, 0x8F2D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page202 = { marc8_31page202_flat, 0 }; /* PAGE 201 */ struct yaz_iconv_trie_flat marc8_31page201_flat[] = { {"\x21", 0, 0x8E30}, /* East Asian ideograph */ {"\x24", 0, 0x8E47}, /* East Asian ideograph */ {"\x26", 0, 0x8E46}, /* East Asian ideograph */ {"\x2E", 0, 0x8E4C}, /* East Asian ideograph */ {"\x30", 0, 0x8E50}, /* East Asian ideograph */ {"\x32", 0, 0x8E4F}, /* East Asian ideograph */ {"\x34", 0, 0x8E5C}, /* East Asian ideograph */ {"\x35", 0, 0x8E62}, /* East Asian ideograph */ {"\x36", 0, 0x8E60}, /* East Asian ideograph */ {"\x3A", 0, 0x8E54}, /* East Asian ideograph */ {"\x3B", 0, 0x8E67}, /* East Asian ideograph */ {"\x3E", 0, 0x8E5A}, /* East Asian ideograph */ {"\x3F", 0, 0x8E5E}, /* East Asian ideograph */ {"\x40", 0, 0x8E55}, /* East Asian ideograph */ {"\x41", 0, 0x8E61}, /* East Asian ideograph */ {"\x43", 0, 0x8E5D}, /* East Asian ideograph */ {"\x44", 0, 0x8E75}, /* East Asian ideograph */ {"\x45", 0, 0x8E74}, /* East Asian ideograph */ {"\x46", 0, 0x8E95}, /* East Asian ideograph */ {"\x48", 0, 0x8E6D}, /* East Asian ideograph */ {"\x4B", 0, 0x8E69}, /* East Asian ideograph */ {"\x52", 0, 0x8E83}, /* East Asian ideograph */ {"\x53", 0, 0x8E84}, /* East Asian ideograph */ {"\x57", 0, 0x8E8B}, /* East Asian ideograph */ {"\x5D", 0, 0x8E94}, /* East Asian ideograph */ {"\x5E", 0, 0x8E9A}, /* East Asian ideograph */ {"\x5F", 0, 0x8E92}, /* East Asian ideograph */ {"\x60", 0, 0x8E93}, /* East Asian ideograph */ {"\x62", 0, 0x8E90}, /* East Asian ideograph */ {"\x63", 0, 0x8E98}, /* East Asian ideograph */ {"\x64", 0, 0x8E9E}, /* East Asian ideograph */ {"\x6B", 0, 0x8EA5}, /* East Asian ideograph */ {"\x6F", 0, 0x8EA7}, /* East Asian ideograph */ {"\x71", 0, 0x8EA9}, /* East Asian ideograph */ {"\x72", 0, 0x8E99}, /* East Asian ideograph */ {"\x78", 0, 0x8EB3}, /* East Asian ideograph */ {"\x7A", 0, 0x8EBC}, /* East Asian ideograph */ {"\x7D", 0, 0x8EB6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page201 = { marc8_31page201_flat, 0 }; /* PAGE 200 */ struct yaz_iconv_trie_flat marc8_31page200_flat[] = { {"\x21", 0, 0x8DCF}, /* East Asian ideograph */ {"\x22", 0, 0x8DD6}, /* East Asian ideograph */ {"\x27", 0, 0x8DD0}, /* East Asian ideograph */ {"\x2B", 0, 0x8DC5}, /* East Asian ideograph */ {"\x2F", 0, 0x8DE4}, /* East Asian ideograph */ {"\x34", 0, 0x8DEC}, /* East Asian ideograph */ {"\x35", 0, 0x8DEB}, /* East Asian ideograph */ {"\x36", 0, 0x8DF4}, /* East Asian ideograph */ {"\x38", 0, 0x8DE9}, /* East Asian ideograph */ {"\x3A", 0, 0x8DE6}, /* East Asian ideograph */ {"\x3B", 0, 0x8DE3}, /* East Asian ideograph */ {"\x3D", 0, 0x8DE7}, /* East Asian ideograph */ {"\x3E", 0, 0x8DF2}, /* East Asian ideograph */ {"\x3F", 0, 0x8E09}, /* East Asian ideograph */ {"\x41", 0, 0x8DFD}, /* East Asian ideograph */ {"\x44", 0, 0x8DFF}, /* East Asian ideograph */ {"\x46", 0, 0x8E05}, /* East Asian ideograph */ {"\x49", 0, 0x8E01}, /* East Asian ideograph */ {"\x4E", 0, 0x8E04}, /* East Asian ideograph */ {"\x50", 0, 0x8E06}, /* East Asian ideograph */ {"\x52", 0, 0x8E2A}, /* East Asian ideograph */ {"\x54", 0, 0x8E23}, /* East Asian ideograph */ {"\x57", 0, 0x8E2E}, /* East Asian ideograph */ {"\x58", 0, 0x8E21}, /* East Asian ideograph */ {"\x5C", 0, 0x8E1E}, /* East Asian ideograph */ {"\x64", 0, 0x8E16}, /* East Asian ideograph */ {"\x66", 0, 0x8E26}, /* East Asian ideograph */ {"\x67", 0, 0x8E27}, /* East Asian ideograph */ {"\x68", 0, 0x8E14}, /* East Asian ideograph */ {"\x69", 0, 0x8E18}, /* East Asian ideograph */ {"\x6F", 0, 0x8E41}, /* East Asian ideograph */ {"\x77", 0, 0x8E40}, /* East Asian ideograph */ {"\x79", 0, 0x8E36}, /* East Asian ideograph */ {"\x7E", 0, 0x8E3D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page200 = { marc8_31page200_flat, 0 }; /* PAGE 199 */ struct yaz_iconv_trie_flat marc8_31page199_flat[] = { {"\x22", 0, 0x8D96}, /* East Asian ideograph */ {"\x2F", 0, 0x8DA1}, /* East Asian ideograph */ {"\x33", 0, 0x8DA6}, /* East Asian ideograph */ {"\x52", 0, 0x8DAB}, /* East Asian ideograph */ {"\x59", 0, 0x8DAF}, /* East Asian ideograph */ {"\x5A", 0, 0x8DB0}, /* East Asian ideograph */ {"\x66", 0, 0x8DB2}, /* East Asian ideograph */ {"\x6E", 0, 0x8DBC}, /* East Asian ideograph */ {"\x6F", 0, 0x8DBA}, /* East Asian ideograph */ {"\x70", 0, 0x8DB9}, /* East Asian ideograph */ {"\x71", 0, 0x8DC2}, /* East Asian ideograph */ {"\x72", 0, 0x8DC1}, /* East Asian ideograph */ {"\x73", 0, 0x8DBF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page199 = { marc8_31page199_flat, 0 }; /* PAGE 198 */ struct yaz_iconv_trie_flat marc8_31page198_flat[] = { {"\x21", 0, 0x8CF7}, /* East Asian ideograph */ {"\x25", 0, 0x8D04}, /* East Asian ideograph */ {"\x26", 0, 0x8CFE}, /* East Asian ideograph */ {"\x2B", 0, 0x8D07}, /* East Asian ideograph */ {"\x2D", 0, 0x8D09}, /* East Asian ideograph */ {"\x32", 0, 0x8D0C}, /* East Asian ideograph */ {"\x39", 0, 0x8D11}, /* East Asian ideograph */ {"\x3A", 0, 0x8D10}, /* East Asian ideograph */ {"\x3B", 0, 0x8D12}, /* East Asian ideograph */ {"\x3D", 0, 0x8D14}, /* East Asian ideograph */ {"\x3E", 0, 0x8D18}, /* East Asian ideograph */ {"\x48", 0, 0x8D6C}, /* East Asian ideograph */ {"\x52", 0, 0x8D78}, /* East Asian ideograph */ {"\x5C", 0, 0x8D7A}, /* East Asian ideograph */ {"\x61", 0, 0x8D84}, /* East Asian ideograph */ {"\x71", 0, 0x8D94}, /* East Asian ideograph */ {"\x75", 0, 0x8D8D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page198 = { marc8_31page198_flat, 0 }; /* PAGE 197 */ struct yaz_iconv_trie_flat marc8_31page197_flat[] = { {"\x2A", 0, 0x8C86}, /* East Asian ideograph */ {"\x2D", 0, 0x8C85}, /* East Asian ideograph */ {"\x2E", 0, 0x8C88}, /* East Asian ideograph */ {"\x39", 0, 0x8C94}, /* East Asian ideograph */ {"\x41", 0, 0x8C9B}, /* East Asian ideograph */ {"\x43", 0, 0x8C9F}, /* East Asian ideograph */ {"\x44", 0, 0x8CA4}, /* East Asian ideograph */ {"\x4E", 0, 0x8CB0}, /* East Asian ideograph */ {"\x51", 0, 0x8CBA}, /* East Asian ideograph */ {"\x52", 0, 0x8CB5}, /* East Asian ideograph */ {"\x53", 0, 0x8CB9}, /* East Asian ideograph */ {"\x57", 0, 0x8CCD}, /* East Asian ideograph */ {"\x5E", 0, 0x8CD8}, /* East Asian ideograph */ {"\x5F", 0, 0x8CD5}, /* East Asian ideograph */ {"\x67", 0, 0x8CE8}, /* East Asian ideograph */ {"\x68", 0, 0x8CE9}, /* East Asian ideograph */ {"\x6A", 0, 0x8CE1}, /* East Asian ideograph */ {"\x6F", 0, 0x8CEB}, /* East Asian ideograph */ {"\x70", 0, 0x8CDA}, /* East Asian ideograph */ {"\x72", 0, 0x8CDD}, /* East Asian ideograph */ {"\x74", 0, 0x8CD9}, /* East Asian ideograph */ {"\x76", 0, 0x8CEE}, /* East Asian ideograph */ {"\x7B", 0, 0x8CF1}, /* East Asian ideograph */ {"\x7C", 0, 0x8CF5}, /* East Asian ideograph */ {"\x7E", 0, 0x8CFB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page197 = { marc8_31page197_flat, 0 }; /* PAGE 196 */ struct yaz_iconv_trie_flat marc8_31page196_flat[] = { {"\x23", 0, 0x8B8B}, /* East Asian ideograph */ {"\x26", 0, 0x8B87}, /* East Asian ideograph */ {"\x2D", 0, 0x8B95}, /* East Asian ideograph */ {"\x2E", 0, 0x8B94}, /* East Asian ideograph */ {"\x37", 0, 0x8B9C}, /* East Asian ideograph */ {"\x3A", 0, 0x8B9F}, /* East Asian ideograph */ {"\x3D", 0, 0x8C3A}, /* East Asian ideograph */ {"\x44", 0, 0x8C40}, /* East Asian ideograph */ {"\x45", 0, 0x8C42}, /* East Asian ideograph */ {"\x4B", 0, 0x8C47}, /* East Asian ideograph */ {"\x4D", 0, 0x8C4B}, /* East Asian ideograph */ {"\x50", 0, 0x8C4F}, /* East Asian ideograph */ {"\x52", 0, 0x8C55}, /* East Asian ideograph */ {"\x54", 0, 0x8C57}, /* East Asian ideograph */ {"\x55", 0, 0x8C5C}, /* East Asian ideograph */ {"\x56", 0, 0x8C5D}, /* East Asian ideograph */ {"\x5C", 0, 0x86C3}, /* East Asian ideograph */ {"\x63", 0, 0x8C68}, /* East Asian ideograph */ {"\x65", 0, 0x8C6D}, /* East Asian ideograph */ {"\x6D", 0, 0x8C73}, /* East Asian ideograph */ {"\x6F", 0, 0x8C74}, /* East Asian ideograph */ {"\x71", 0, 0x8C75}, /* East Asian ideograph */ {"\x73", 0, 0x8C77}, /* East Asian ideograph */ {"\x74", 0, 0x8C76}, /* East Asian ideograph */ {"\x7B", 0, 0x8C78}, /* East Asian ideograph */ {"\x7D", 0, 0x8C7B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page196 = { marc8_31page196_flat, 0 }; /* PAGE 195 */ struct yaz_iconv_trie_flat marc8_31page195_flat[] = { {"\x22", 0, 0x8B2B}, /* East Asian ideograph */ {"\x2A", 0, 0x8B37}, /* East Asian ideograph */ {"\x2D", 0, 0x8B26}, /* East Asian ideograph */ {"\x30", 0, 0x8B33}, /* East Asian ideograph */ {"\x38", 0, 0x8B3E}, /* East Asian ideograph */ {"\x3A", 0, 0x8B29}, /* East Asian ideograph */ {"\x42", 0, 0x8B48}, /* East Asian ideograph */ {"\x44", 0, 0x8B54}, /* East Asian ideograph */ {"\x48", 0, 0x8B53}, /* East Asian ideograph */ {"\x49", 0, 0x8B4A}, /* East Asian ideograph */ {"\x4A", 0, 0x8B46}, /* East Asian ideograph */ {"\x4D", 0, 0x8B56}, /* East Asian ideograph */ {"\x4F", 0, 0x8B3F}, /* East Asian ideograph */ {"\x59", 0, 0x8B59}, /* East Asian ideograph */ {"\x5F", 0, 0x8B4D}, /* East Asian ideograph */ {"\x68", 0, 0x8B6B}, /* East Asian ideograph */ {"\x6B", 0, 0x8B6D}, /* East Asian ideograph */ {"\x70", 0, 0x8B78}, /* East Asian ideograph */ {"\x73", 0, 0x8B45}, /* East Asian ideograph */ {"\x78", 0, 0x8B85}, /* East Asian ideograph */ {"\x79", 0, 0x8B81}, /* East Asian ideograph */ {"\x7B", 0, 0x8B7E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page195 = { marc8_31page195_flat, 0 }; /* PAGE 194 */ struct yaz_iconv_trie_flat marc8_31page194_flat[] = { {"\x21", 0, 0x8ABE}, /* East Asian ideograph */ {"\x25", 0, 0x8ACF}, /* East Asian ideograph */ {"\x27", 0, 0x8AC6}, /* East Asian ideograph */ {"\x2C", 0, 0x8AD1}, /* East Asian ideograph */ {"\x2D", 0, 0x8AD3}, /* East Asian ideograph */ {"\x31", 0, 0x8AAF}, /* East Asian ideograph */ {"\x33", 0, 0x8AD4}, /* East Asian ideograph */ {"\x36", 0, 0x8ACD}, /* East Asian ideograph */ {"\x38", 0, 0x8AB9}, /* East Asian ideograph */ {"\x3B", 0, 0x8ADB}, /* East Asian ideograph */ {"\x3F", 0, 0x8AD0}, /* East Asian ideograph */ {"\x40", 0, 0x8AD7}, /* East Asian ideograph */ {"\x44", 0, 0x8AF3}, /* East Asian ideograph */ {"\x45", 0, 0x8AE2}, /* East Asian ideograph */ {"\x49", 0, 0x8B4C}, /* East Asian ideograph */ {"\x4C", 0, 0x8ADD}, /* East Asian ideograph */ {"\x4E", 0, 0x8AF6}, /* East Asian ideograph */ {"\x4F", 0, 0x8AF4}, /* East Asian ideograph */ {"\x50", 0, 0x8AF5}, /* East Asian ideograph */ {"\x53", 0, 0x8ADF}, /* East Asian ideograph */ {"\x56", 0, 0x8B03}, /* East Asian ideograph */ {"\x57", 0, 0x8AE4}, /* East Asian ideograph */ {"\x59", 0, 0x8B14}, /* East Asian ideograph */ {"\x5D", 0, 0x8AFC}, /* East Asian ideograph */ {"\x62", 0, 0x8ADE}, /* East Asian ideograph */ {"\x63", 0, 0x8AE1}, /* East Asian ideograph */ {"\x64", 0, 0x8B07}, /* East Asian ideograph */ {"\x6B", 0, 0x8B0C}, /* East Asian ideograph */ {"\x6F", 0, 0x8B1C}, /* East Asian ideograph */ {"\x73", 0, 0x8B16}, /* East Asian ideograph */ {"\x76", 0, 0x8B1F}, /* East Asian ideograph */ {"\x78", 0, 0x8B0B}, /* East Asian ideograph */ {"\x79", 0, 0x8B06}, /* East Asian ideograph */ {"\x7A", 0, 0x8B05}, /* East Asian ideograph */ {"\x7C", 0, 0x8B0F}, /* East Asian ideograph */ {"\x7D", 0, 0x8B10}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page194 = { marc8_31page194_flat, 0 }; /* PAGE 193 */ struct yaz_iconv_trie_flat marc8_31page193_flat[] = { {"\x25", 0, 0x8A22}, /* East Asian ideograph */ {"\x27", 0, 0x8A51}, /* East Asian ideograph */ {"\x28", 0, 0x8A4A}, /* East Asian ideograph */ {"\x2A", 0, 0x8A4E}, /* East Asian ideograph */ {"\x30", 0, 0x8A56}, /* East Asian ideograph */ {"\x37", 0, 0x8A57}, /* East Asian ideograph */ {"\x39", 0, 0x8A48}, /* East Asian ideograph */ {"\x3B", 0, 0x8A58}, /* East Asian ideograph */ {"\x3C", 0, 0x8A52}, /* East Asian ideograph */ {"\x40", 0, 0x8A3D}, /* East Asian ideograph */ {"\x42", 0, 0x8A45}, /* East Asian ideograph */ {"\x4F", 0, 0x8A7F}, /* East Asian ideograph */ {"\x50", 0, 0x8A86}, /* East Asian ideograph */ {"\x56", 0, 0x8A61}, /* East Asian ideograph */ {"\x58", 0, 0x8A3E}, /* East Asian ideograph */ {"\x59", 0, 0x8A82}, /* East Asian ideograph */ {"\x5D", 0, 0x8A84}, /* East Asian ideograph */ {"\x5E", 0, 0x8A75}, /* East Asian ideograph */ {"\x69", 0, 0x8A8F}, /* East Asian ideograph */ {"\x6F", 0, 0x8A96}, /* East Asian ideograph */ {"\x71", 0, 0x8A9A}, /* East Asian ideograph */ {"\x7E", 0, 0x8AB6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page193 = { marc8_31page193_flat, 0 }; /* PAGE 192 */ struct yaz_iconv_trie_flat marc8_31page192_flat[] = { {"\x2A", 0, 0x89B8}, /* East Asian ideograph */ {"\x2B", 0, 0x89B7}, /* East Asian ideograph */ {"\x2C", 0, 0x89B6}, /* East Asian ideograph */ {"\x2F", 0, 0x89BC}, /* East Asian ideograph */ {"\x32", 0, 0x89BF}, /* East Asian ideograph */ {"\x3A", 0, 0x89D6}, /* East Asian ideograph */ {"\x3B", 0, 0x89D5}, /* East Asian ideograph */ {"\x3F", 0, 0x89DA}, /* East Asian ideograph */ {"\x43", 0, 0x89E5}, /* East Asian ideograph */ {"\x45", 0, 0x89DC}, /* East Asian ideograph */ {"\x47", 0, 0x89E1}, /* East Asian ideograph */ {"\x4C", 0, 0x89E9}, /* East Asian ideograph */ {"\x4D", 0, 0x89EB}, /* East Asian ideograph */ {"\x53", 0, 0x89ED}, /* East Asian ideograph */ {"\x58", 0, 0x89F1}, /* East Asian ideograph */ {"\x5C", 0, 0x89F3}, /* East Asian ideograph */ {"\x5E", 0, 0x89F5}, /* East Asian ideograph */ {"\x60", 0, 0x89F6}, /* East Asian ideograph */ {"\x64", 0, 0x89F7}, /* East Asian ideograph */ {"\x6B", 0, 0x89FF}, /* East Asian ideograph */ {"\x6C", 0, 0x8A06}, /* East Asian ideograph */ {"\x6D", 0, 0x8A07}, /* East Asian ideograph */ {"\x6E", 0, 0x8A04}, /* East Asian ideograph */ {"\x70", 0, 0x8A0F}, /* East Asian ideograph */ {"\x71", 0, 0x8A11}, /* East Asian ideograph */ {"\x72", 0, 0x8A12}, /* East Asian ideograph */ {"\x73", 0, 0x8A0D}, /* East Asian ideograph */ {"\x7A", 0, 0x8A27}, /* East Asian ideograph */ {"\x7D", 0, 0x8A29}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page192 = { marc8_31page192_flat, 0 }; /* PAGE 191 */ struct yaz_iconv_trie_flat marc8_31page191_flat[] = { {"\x21", 0, 0x894D}, /* East Asian ideograph */ {"\x23", 0, 0x8962}, /* East Asian ideograph */ {"\x24", 0, 0x895A}, /* East Asian ideograph */ {"\x25", 0, 0x895E}, /* East Asian ideograph */ {"\x29", 0, 0x895B}, /* East Asian ideograph */ {"\x2C", 0, 0x895C}, /* East Asian ideograph */ {"\x2D", 0, 0x895D}, /* East Asian ideograph */ {"\x31", 0, 0x8966}, /* East Asian ideograph */ {"\x37", 0, 0x896D}, /* East Asian ideograph */ {"\x3A", 0, 0x896B}, /* East Asian ideograph */ {"\x3B", 0, 0x896E}, /* East Asian ideograph */ {"\x3C", 0, 0x896C}, /* East Asian ideograph */ {"\x41", 0, 0x8976}, /* East Asian ideograph */ {"\x42", 0, 0x8974}, /* East Asian ideograph */ {"\x49", 0, 0x897B}, /* East Asian ideograph */ {"\x4A", 0, 0x897C}, /* East Asian ideograph */ {"\x53", 0, 0x8984}, /* East Asian ideograph */ {"\x55", 0, 0x8985}, /* East Asian ideograph */ {"\x62", 0, 0x8991}, /* East Asian ideograph */ {"\x64", 0, 0x8997}, /* East Asian ideograph */ {"\x66", 0, 0x8998}, /* East Asian ideograph */ {"\x6B", 0, 0x899C}, /* East Asian ideograph */ {"\x6F", 0, 0x89A1}, /* East Asian ideograph */ {"\x76", 0, 0x89A5}, /* East Asian ideograph */ {"\x79", 0, 0x89A9}, /* East Asian ideograph */ {"\x7D", 0, 0x89AF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page191 = { marc8_31page191_flat, 0 }; /* PAGE 190 */ struct yaz_iconv_trie_flat marc8_31page190_flat[] = { {"\x21", 0, 0x88FC}, /* East Asian ideograph */ {"\x23", 0, 0x88EF}, /* East Asian ideograph */ {"\x24", 0, 0x8903}, /* East Asian ideograph */ {"\x2D", 0, 0x8909}, /* East Asian ideograph */ {"\x2F", 0, 0x8918}, /* East Asian ideograph */ {"\x35", 0, 0x8906}, /* East Asian ideograph */ {"\x36", 0, 0x890C}, /* East Asian ideograph */ {"\x37", 0, 0x8919}, /* East Asian ideograph */ {"\x3D", 0, 0x890A}, /* East Asian ideograph */ {"\x43", 0, 0x8915}, /* East Asian ideograph */ {"\x45", 0, 0x892F}, /* East Asian ideograph */ {"\x47", 0, 0x8930}, /* East Asian ideograph */ {"\x4E", 0, 0x8921}, /* East Asian ideograph */ {"\x4F", 0, 0x8927}, /* East Asian ideograph */ {"\x51", 0, 0x891F}, /* East Asian ideograph */ {"\x53", 0, 0x8931}, /* East Asian ideograph */ {"\x54", 0, 0x891E}, /* East Asian ideograph */ {"\x56", 0, 0x8926}, /* East Asian ideograph */ {"\x57", 0, 0x8922}, /* East Asian ideograph */ {"\x5A", 0, 0x8935}, /* East Asian ideograph */ {"\x5D", 0, 0x8941}, /* East Asian ideograph */ {"\x60", 0, 0x8933}, /* East Asian ideograph */ {"\x66", 0, 0x8954}, /* East Asian ideograph */ {"\x6F", 0, 0x894F}, /* East Asian ideograph */ {"\x72", 0, 0x8947}, /* East Asian ideograph */ {"\x7A", 0, 0x894C}, /* East Asian ideograph */ {"\x7B", 0, 0x8946}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page190 = { marc8_31page190_flat, 0 }; /* PAGE 189 */ struct yaz_iconv_trie_flat marc8_31page189_flat[] = { {"\x28", 0, 0x88A2}, /* East Asian ideograph */ {"\x2A", 0, 0x88A4}, /* East Asian ideograph */ {"\x2F", 0, 0x88AA}, /* East Asian ideograph */ {"\x34", 0, 0x889A}, /* East Asian ideograph */ {"\x3A", 0, 0x8890}, /* East Asian ideograph */ {"\x3B", 0, 0x888C}, /* East Asian ideograph */ {"\x3D", 0, 0x88A0}, /* East Asian ideograph */ {"\x40", 0, 0x8899}, /* East Asian ideograph */ {"\x45", 0, 0x8897}, /* East Asian ideograph */ {"\x48", 0, 0x88C9}, /* East Asian ideograph */ {"\x49", 0, 0x88BF}, /* East Asian ideograph */ {"\x4A", 0, 0x88BA}, /* East Asian ideograph */ {"\x4F", 0, 0x88C0}, /* East Asian ideograph */ {"\x51", 0, 0x88B2}, /* East Asian ideograph */ {"\x54", 0, 0x88BC}, /* East Asian ideograph */ {"\x57", 0, 0x88B7}, /* East Asian ideograph */ {"\x59", 0, 0x88BD}, /* East Asian ideograph */ {"\x5A", 0, 0x88C4}, /* East Asian ideograph */ {"\x5E", 0, 0x88CB}, /* East Asian ideograph */ {"\x60", 0, 0x88CC}, /* East Asian ideograph */ {"\x62", 0, 0x88DB}, /* East Asian ideograph */ {"\x64", 0, 0x88CE}, /* East Asian ideograph */ {"\x68", 0, 0x88D2}, /* East Asian ideograph */ {"\x71", 0, 0x88F1}, /* East Asian ideograph */ {"\x72", 0, 0x88FE}, /* East Asian ideograph */ {"\x75", 0, 0x88F2}, /* East Asian ideograph */ {"\x78", 0, 0x8900}, /* East Asian ideograph */ {"\x7A", 0, 0x88F0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page189 = { marc8_31page189_flat, 0 }; /* PAGE 188 */ struct yaz_iconv_trie_flat marc8_31page188_flat[] = { {"\x23", 0, 0x8828}, /* East Asian ideograph */ {"\x2A", 0, 0x8832}, /* East Asian ideograph */ {"\x2E", 0, 0x882E}, /* East Asian ideograph */ {"\x32", 0, 0x882D}, /* East Asian ideograph */ {"\x3C", 0, 0x883C}, /* East Asian ideograph */ {"\x41", 0, 0x8841}, /* East Asian ideograph */ {"\x42", 0, 0x4610}, /* East Asian ideograph */ {"\x44", 0, 0x8844}, /* East Asian ideograph */ {"\x4B", 0, 0x8847}, /* East Asian ideograph */ {"\x51", 0, 0x884A}, /* East Asian ideograph */ {"\x53", 0, 0x884E}, /* East Asian ideograph */ {"\x56", 0, 0x8852}, /* East Asian ideograph */ {"\x57", 0, 0x8850}, /* East Asian ideograph */ {"\x59", 0, 0x8856}, /* East Asian ideograph */ {"\x5A", 0, 0x8855}, /* East Asian ideograph */ {"\x5E", 0, 0x885C}, /* East Asian ideograph */ {"\x5F", 0, 0x885A}, /* East Asian ideograph */ {"\x69", 0, 0x8869}, /* East Asian ideograph */ {"\x6D", 0, 0x886D}, /* East Asian ideograph */ {"\x6E", 0, 0x887A}, /* East Asian ideograph */ {"\x71", 0, 0x8875}, /* East Asian ideograph */ {"\x75", 0, 0x8872}, /* East Asian ideograph */ {"\x79", 0, 0x887D}, /* East Asian ideograph */ {"\x7C", 0, 0x8879}, /* East Asian ideograph */ {"\x7D", 0, 0x887F}, /* East Asian ideograph */ {"\x7E", 0, 0x887E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page188 = { marc8_31page188_flat, 0 }; /* PAGE 187 */ struct yaz_iconv_trie_flat marc8_31page187_flat[] = { {"\x24", 0, 0x87BD}, /* East Asian ideograph */ {"\x2C", 0, 0x87EE}, /* East Asian ideograph */ {"\x30", 0, 0x87F3}, /* East Asian ideograph */ {"\x31", 0, 0x87F0}, /* East Asian ideograph */ {"\x34", 0, 0x87EA}, /* East Asian ideograph */ {"\x36", 0, 0x87DB}, /* East Asian ideograph */ {"\x37", 0, 0x87E2}, /* East Asian ideograph */ {"\x39", 0, 0x87EB}, /* East Asian ideograph */ {"\x3A", 0, 0x87D6}, /* East Asian ideograph */ {"\x3F", 0, 0x87F5}, /* East Asian ideograph */ {"\x47", 0, 0x87E0}, /* East Asian ideograph */ {"\x48", 0, 0x87D3}, /* East Asian ideograph */ {"\x49", 0, 0x87DC}, /* East Asian ideograph */ {"\x4C", 0, 0x87E3}, /* East Asian ideograph */ {"\x4D", 0, 0x8801}, /* East Asian ideograph */ {"\x4F", 0, 0x8803}, /* East Asian ideograph */ {"\x50", 0, 0x880A}, /* East Asian ideograph */ {"\x55", 0, 0x87F6}, /* East Asian ideograph */ {"\x57", 0, 0x87F7}, /* East Asian ideograph */ {"\x5C", 0, 0x880B}, /* East Asian ideograph */ {"\x5D", 0, 0x8806}, /* East Asian ideograph */ {"\x5F", 0, 0x87FE}, /* East Asian ideograph */ {"\x61", 0, 0x8810}, /* East Asian ideograph */ {"\x63", 0, 0x8819}, /* East Asian ideograph */ {"\x64", 0, 0x8811}, /* East Asian ideograph */ {"\x66", 0, 0x8818}, /* East Asian ideograph */ {"\x6A", 0, 0x8813}, /* East Asian ideograph */ {"\x6B", 0, 0x8816}, /* East Asian ideograph */ {"\x72", 0, 0x8834}, /* East Asian ideograph */ {"\x73", 0, 0x881C}, /* East Asian ideograph */ {"\x7A", 0, 0x881B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page187 = { marc8_31page187_flat, 0 }; /* PAGE 186 */ struct yaz_iconv_trie_flat marc8_31page186_flat[] = { {"\x21", 0, 0x8761}, /* East Asian ideograph */ {"\x24", 0, 0x876A}, /* East Asian ideograph */ {"\x27", 0, 0x874E}, /* East Asian ideograph */ {"\x28", 0, 0x875F}, /* East Asian ideograph */ {"\x2D", 0, 0x876F}, /* East Asian ideograph */ {"\x2E", 0, 0x875D}, /* East Asian ideograph */ {"\x30", 0, 0x876E}, /* East Asian ideograph */ {"\x33", 0, 0x874D}, /* East Asian ideograph */ {"\x35", 0, 0x8753}, /* East Asian ideograph */ {"\x3A", 0, 0x87A3}, /* East Asian ideograph */ {"\x3D", 0, 0x8793}, /* East Asian ideograph */ {"\x45", 0, 0x8799}, /* East Asian ideograph */ {"\x48", 0, 0x8788}, /* East Asian ideograph */ {"\x4C", 0, 0x8798}, /* East Asian ideograph */ {"\x53", 0, 0x8785}, /* East Asian ideograph */ {"\x54", 0, 0x878B}, /* East Asian ideograph */ {"\x55", 0, 0x8784}, /* East Asian ideograph */ {"\x58", 0, 0x87A9}, /* East Asian ideograph */ {"\x5D", 0, 0x8789}, /* East Asian ideograph */ {"\x60", 0, 0x87AD}, /* East Asian ideograph */ {"\x66", 0, 0x87BE}, /* East Asian ideograph */ {"\x6E", 0, 0x87C4}, /* East Asian ideograph */ {"\x6F", 0, 0x87AF}, /* East Asian ideograph */ {"\x72", 0, 0x87AC}, /* East Asian ideograph */ {"\x78", 0, 0x87AE}, /* East Asian ideograph */ {"\x7E", 0, 0x87BF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page186 = { marc8_31page186_flat, 0 }; /* PAGE 185 */ struct yaz_iconv_trie_flat marc8_31page185_flat[] = { {"\x25", 0, 0x870B}, /* East Asian ideograph */ {"\x2F", 0, 0x86FA}, /* East Asian ideograph */ {"\x33", 0, 0x86F8}, /* East Asian ideograph */ {"\x34", 0, 0x8706}, /* East Asian ideograph */ {"\x36", 0, 0x870E}, /* East Asian ideograph */ {"\x38", 0, 0x8709}, /* East Asian ideograph */ {"\x3A", 0, 0x870A}, /* East Asian ideograph */ {"\x3E", 0, 0x870D}, /* East Asian ideograph */ {"\x42", 0, 0x874A}, /* East Asian ideograph */ {"\x43", 0, 0x8723}, /* East Asian ideograph */ {"\x44", 0, 0x8737}, /* East Asian ideograph */ {"\x45", 0, 0x8728}, /* East Asian ideograph */ {"\x49", 0, 0x8740}, /* East Asian ideograph */ {"\x4B", 0, 0x872E}, /* East Asian ideograph */ {"\x4C", 0, 0x873D}, /* East Asian ideograph */ {"\x4E", 0, 0x871E}, /* East Asian ideograph */ {"\x53", 0, 0x8743}, /* East Asian ideograph */ {"\x55", 0, 0x8744}, /* East Asian ideograph */ {"\x57", 0, 0x873E}, /* East Asian ideograph */ {"\x59", 0, 0x8729}, /* East Asian ideograph */ {"\x5A", 0, 0x8739}, /* East Asian ideograph */ {"\x5F", 0, 0x871A}, /* East Asian ideograph */ {"\x64", 0, 0x8731}, /* East Asian ideograph */ {"\x65", 0, 0x8711}, /* East Asian ideograph */ {"\x66", 0, 0x8712}, /* East Asian ideograph */ {"\x6B", 0, 0x874F}, /* East Asian ideograph */ {"\x6C", 0, 0x8771}, /* East Asian ideograph */ {"\x6D", 0, 0x8763}, /* East Asian ideograph */ {"\x71", 0, 0x8764}, /* East Asian ideograph */ {"\x73", 0, 0x8765}, /* East Asian ideograph */ {"\x74", 0, 0x877D}, /* East Asian ideograph */ {"\x79", 0, 0x8758}, /* East Asian ideograph */ {"\x7B", 0, 0x877B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page185 = { marc8_31page185_flat, 0 }; /* PAGE 184 */ struct yaz_iconv_trie_flat marc8_31page184_flat[] = { {"\x25", 0, 0x867A}, /* East Asian ideograph */ {"\x26", 0, 0x8673}, /* East Asian ideograph */ {"\x27", 0, 0x867C}, /* East Asian ideograph */ {"\x2E", 0, 0x8696}, /* East Asian ideograph */ {"\x2F", 0, 0x86A8}, /* East Asian ideograph */ {"\x36", 0, 0x8691}, /* East Asian ideograph */ {"\x37", 0, 0x869C}, /* East Asian ideograph */ {"\x39", 0, 0x8698}, /* East Asian ideograph */ {"\x3C", 0, 0x868D}, /* East Asian ideograph */ {"\x3D", 0, 0x868B}, /* East Asian ideograph */ {"\x40", 0, 0x86A6}, /* East Asian ideograph */ {"\x42", 0, 0x869D}, /* East Asian ideograph */ {"\x46", 0, 0x86A0}, /* East Asian ideograph */ {"\x48", 0, 0x86A7}, /* East Asian ideograph */ {"\x4B", 0, 0x86BF}, /* East Asian ideograph */ {"\x58", 0, 0x86BA}, /* East Asian ideograph */ {"\x59", 0, 0x86B0}, /* East Asian ideograph */ {"\x60", 0, 0x86B3}, /* East Asian ideograph */ {"\x62", 0, 0x86C9}, /* East Asian ideograph */ {"\x63", 0, 0x86B4}, /* East Asian ideograph */ {"\x67", 0, 0x86D8}, /* East Asian ideograph */ {"\x6E", 0, 0x86E3}, /* East Asian ideograph */ {"\x6F", 0, 0x86E9}, /* East Asian ideograph */ {"\x71", 0, 0x86EC}, /* East Asian ideograph */ {"\x74", 0, 0x86D5}, /* East Asian ideograph */ {"\x77", 0, 0x86D0}, /* East Asian ideograph */ {"\x7A", 0, 0x86D1}, /* East Asian ideograph */ {"\x7E", 0, 0x86DE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page184 = { marc8_31page184_flat, 0 }; /* PAGE 183 */ struct yaz_iconv_trie_flat marc8_31page183_flat[] = { {"\x22", 0, 0x8627}, /* East Asian ideograph */ {"\x26", 0, 0x8629}, /* East Asian ideograph */ {"\x32", 0, 0x8637}, /* East Asian ideograph */ {"\x38", 0, 0x8636}, /* East Asian ideograph */ {"\x3E", 0, 0x863C}, /* East Asian ideograph */ {"\x3F", 0, 0x8640}, /* East Asian ideograph */ {"\x40", 0, 0x863A}, /* East Asian ideograph */ {"\x4C", 0, 0x8645}, /* East Asian ideograph */ {"\x59", 0, 0x864D}, /* East Asian ideograph */ {"\x5A", 0, 0x8653}, /* East Asian ideograph */ {"\x5E", 0, 0x8659}, /* East Asian ideograph */ {"\x66", 0, 0x8661}, /* East Asian ideograph */ {"\x69", 0, 0x8662}, /* East Asian ideograph */ {"\x6A", 0, 0x8663}, /* East Asian ideograph */ {"\x71", 0, 0x8669}, /* East Asian ideograph */ {"\x78", 0, 0x866C}, /* East Asian ideograph */ {"\x7B", 0, 0x8672}, /* East Asian ideograph */ {"\x7C", 0, 0x866F}, /* East Asian ideograph */ {"\x7E", 0, 0x867B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page183 = { marc8_31page183_flat, 0 }; /* PAGE 182 */ struct yaz_iconv_trie_flat marc8_31page182_flat[] = { {"\x24", 0, 0x8624}, /* East Asian ideograph */ {"\x28", 0, 0x85F7}, /* East Asian ideograph */ {"\x2C", 0, 0x85E6}, /* East Asian ideograph */ {"\x2E", 0, 0x85D4}, /* East Asian ideograph */ {"\x31", 0, 0x85ED}, /* East Asian ideograph */ {"\x39", 0, 0x85DA}, /* East Asian ideograph */ {"\x43", 0, 0x85DF}, /* East Asian ideograph */ {"\x45", 0, 0x85D8}, /* East Asian ideograph */ {"\x4C", 0, 0x85DC}, /* East Asian ideograph */ {"\x4E", 0, 0x85F5}, /* East Asian ideograph */ {"\x52", 0, 0x8622}, /* East Asian ideograph */ {"\x54", 0, 0x8610}, /* East Asian ideograph */ {"\x57", 0, 0x85FC}, /* East Asian ideograph */ {"\x5B", 0, 0x85FF}, /* East Asian ideograph */ {"\x5E", 0, 0x85FE}, /* East Asian ideograph */ {"\x60", 0, 0x8600}, /* East Asian ideograph */ {"\x68", 0, 0x8604}, /* East Asian ideograph */ {"\x71", 0, 0x8605}, /* East Asian ideograph */ {"\x75", 0, 0x862B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page182 = { marc8_31page182_flat, 0 }; /* PAGE 181 */ struct yaz_iconv_trie_flat marc8_31page181_flat[] = { {"\x25", 0, 0x8580}, /* East Asian ideograph */ {"\x28", 0, 0x858F}, /* East Asian ideograph */ {"\x2D", 0, 0x8579}, /* East Asian ideograph */ {"\x32", 0, 0x857F}, /* East Asian ideograph */ {"\x33", 0, 0x8577}, /* East Asian ideograph */ {"\x34", 0, 0x8578}, /* East Asian ideograph */ {"\x35", 0, 0x8598}, /* East Asian ideograph */ {"\x36", 0, 0x857B}, /* East Asian ideograph */ {"\x3D", 0, 0x85A4}, /* East Asian ideograph */ {"\x42", 0, 0x857A}, /* East Asian ideograph */ {"\x44", 0, 0x8597}, /* East Asian ideograph */ {"\x45", 0, 0x8557}, /* East Asian ideograph */ {"\x49", 0, 0x85A8}, /* East Asian ideograph */ {"\x4E", 0, 0x8586}, /* East Asian ideograph */ {"\x50", 0, 0x8599}, /* East Asian ideograph */ {"\x51", 0, 0x858A}, /* East Asian ideograph */ {"\x52", 0, 0x85A2}, /* East Asian ideograph */ {"\x54", 0, 0x8590}, /* East Asian ideograph */ {"\x56", 0, 0x8585}, /* East Asian ideograph */ {"\x57", 0, 0x8588}, /* East Asian ideograph */ {"\x5A", 0, 0x85B8}, /* East Asian ideograph */ {"\x5D", 0, 0x85C1}, /* East Asian ideograph */ {"\x61", 0, 0x85BA}, /* East Asian ideograph */ {"\x68", 0, 0x85CE}, /* East Asian ideograph */ {"\x6A", 0, 0x85C2}, /* East Asian ideograph */ {"\x6B", 0, 0x85B7}, /* East Asian ideograph */ {"\x6C", 0, 0x85B9}, /* East Asian ideograph */ {"\x6E", 0, 0x85B3}, /* East Asian ideograph */ {"\x6F", 0, 0x85BD}, /* East Asian ideograph */ {"\x70", 0, 0x85C4}, /* East Asian ideograph */ {"\x72", 0, 0x85BF}, /* East Asian ideograph */ {"\x75", 0, 0x85BE}, /* East Asian ideograph */ {"\x7E", 0, 0x85B6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page181 = { marc8_31page181_flat, 0 }; /* PAGE 180 */ struct yaz_iconv_trie_flat marc8_31page180_flat[] = { {"\x24", 0, 0x851E}, /* East Asian ideograph */ {"\x2A", 0, 0x8518}, /* East Asian ideograph */ {"\x2D", 0, 0x8526}, /* East Asian ideograph */ {"\x2E", 0, 0x8507}, /* East Asian ideograph (variant of EACC 2F252E) */ {"\x2F", 0, 0x84E7}, /* East Asian ideograph */ {"\x34", 0, 0x84F0}, /* East Asian ideograph */ {"\x35", 0, 0x84EF}, /* East Asian ideograph */ {"\x36", 0, 0x8556}, /* East Asian ideograph */ {"\x46", 0, 0x8541}, /* East Asian ideograph */ {"\x4B", 0, 0x8558}, /* East Asian ideograph */ {"\x4D", 0, 0x8553}, /* East Asian ideograph */ {"\x4E", 0, 0x8561}, /* East Asian ideograph */ {"\x4F", 0, 0x8540}, /* East Asian ideograph */ {"\x5A", 0, 0x8546}, /* East Asian ideograph */ {"\x5C", 0, 0x8564}, /* East Asian ideograph */ {"\x5D", 0, 0x855E}, /* East Asian ideograph */ {"\x5E", 0, 0x8573}, /* East Asian ideograph */ {"\x5F", 0, 0x8551}, /* East Asian ideograph */ {"\x64", 0, 0x8562}, /* East Asian ideograph */ {"\x6B", 0, 0x8563}, /* East Asian ideograph */ {"\x6C", 0, 0x848D}, /* East Asian ideograph */ {"\x6D", 0, 0x8542}, /* East Asian ideograph */ {"\x71", 0, 0x854E}, /* East Asian ideograph */ {"\x74", 0, 0x8555}, /* East Asian ideograph */ {"\x76", 0, 0x855D}, /* East Asian ideograph */ {"\x77", 0, 0x858C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page180 = { marc8_31page180_flat, 0 }; /* PAGE 179 */ struct yaz_iconv_trie_flat marc8_31page179_flat[] = { {"\x21", 0, 0x8495}, /* East Asian ideograph */ {"\x27", 0, 0x84AF}, /* East Asian ideograph */ {"\x29", 0, 0x84AD}, /* East Asian ideograph */ {"\x32", 0, 0x84A8}, /* East Asian ideograph */ {"\x33", 0, 0x84D6}, /* East Asian ideograph */ {"\x35", 0, 0x84DA}, /* East Asian ideograph */ {"\x3A", 0, 0x8493}, /* East Asian ideograph */ {"\x3F", 0, 0x84CF}, /* East Asian ideograph */ {"\x41", 0, 0x84CA}, /* East Asian ideograph */ {"\x46", 0, 0x8506}, /* East Asian ideograph */ {"\x47", 0, 0x850B}, /* East Asian ideograph */ {"\x4D", 0, 0x8500}, /* East Asian ideograph */ {"\x59", 0, 0x851F}, /* East Asian ideograph */ {"\x5C", 0, 0x853B}, /* East Asian ideograph */ {"\x5F", 0, 0x84EA}, /* East Asian ideograph */ {"\x66", 0, 0x84F4}, /* East Asian ideograph */ {"\x6A", 0, 0x850C}, /* East Asian ideograph */ {"\x72", 0, 0x852F}, /* East Asian ideograph */ {"\x75", 0, 0x8515}, /* East Asian ideograph */ {"\x77", 0, 0x84F7}, /* East Asian ideograph */ {"\x7A", 0, 0x84FC}, /* East Asian ideograph */ {"\x7C", 0, 0x84EB}, /* East Asian ideograph */ {"\x7D", 0, 0x84FD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page179 = { marc8_31page179_flat, 0 }; /* PAGE 178 */ struct yaz_iconv_trie_flat marc8_31page178_flat[] = { {"\x24", 0, 0x8432}, /* East Asian ideograph */ {"\x29", 0, 0x845C}, /* East Asian ideograph */ {"\x2D", 0, 0x842A}, /* East Asian ideograph */ {"\x2E", 0, 0x8429}, /* East Asian ideograph */ {"\x32", 0, 0x8471}, /* East Asian ideograph */ {"\x35", 0, 0x845F}, /* East Asian ideograph */ {"\x36", 0, 0x8460}, /* East Asian ideograph */ {"\x37", 0, 0x846E}, /* East Asian ideograph */ {"\x3A", 0, 0x8446}, /* East Asian ideograph */ {"\x3C", 0, 0x8452}, /* East Asian ideograph */ {"\x3F", 0, 0x844A}, /* East Asian ideograph */ {"\x45", 0, 0x844E}, /* East Asian ideograph */ {"\x49", 0, 0x8497}, /* East Asian ideograph */ {"\x50", 0, 0x84A1}, /* East Asian ideograph */ {"\x53", 0, 0x849F}, /* East Asian ideograph */ {"\x56", 0, 0x84BA}, /* East Asian ideograph */ {"\x58", 0, 0x84B9}, /* East Asian ideograph */ {"\x5C", 0, 0x84B4}, /* East Asian ideograph */ {"\x5E", 0, 0x84C1}, /* East Asian ideograph */ {"\x5F", 0, 0x84BB}, /* East Asian ideograph */ {"\x68", 0, 0x84CD}, /* East Asian ideograph */ {"\x70", 0, 0x84B1}, /* East Asian ideograph */ {"\x71", 0, 0x849D}, /* East Asian ideograph */ {"\x72", 0, 0x84D0}, /* East Asian ideograph */ {"\x75", 0, 0x8494}, /* East Asian ideograph */ {"\x79", 0, 0x84C7}, /* East Asian ideograph */ {"\x7A", 0, 0x84BD}, /* East Asian ideograph */ {"\x7C", 0, 0x84C2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page178 = { marc8_31page178_flat, 0 }; /* PAGE 177 */ struct yaz_iconv_trie_flat marc8_31page177_flat[] = { {"\x23", 0, 0x83FD}, /* East Asian ideograph */ {"\x25", 0, 0x841E}, /* East Asian ideograph */ {"\x29", 0, 0x83C9}, /* East Asian ideograph */ {"\x2A", 0, 0x83DF}, /* East Asian ideograph */ {"\x2C", 0, 0x841F}, /* East Asian ideograph */ {"\x2E", 0, 0x840F}, /* East Asian ideograph */ {"\x30", 0, 0x8411}, /* East Asian ideograph */ {"\x36", 0, 0x839A}, /* East Asian ideograph */ {"\x3C", 0, 0x83F3}, /* East Asian ideograph */ {"\x43", 0, 0x83D1}, /* East Asian ideograph */ {"\x48", 0, 0x8453}, /* East Asian ideograph */ {"\x4A", 0, 0x848E}, /* East Asian ideograph */ {"\x4C", 0, 0x8439}, /* East Asian ideograph */ {"\x4D", 0, 0x8476}, /* East Asian ideograph */ {"\x4E", 0, 0x8479}, /* East Asian ideograph */ {"\x5C", 0, 0x8451}, /* East Asian ideograph */ {"\x5F", 0, 0x847D}, /* East Asian ideograph */ {"\x62", 0, 0x845A}, /* East Asian ideograph */ {"\x66", 0, 0x8459}, /* East Asian ideograph */ {"\x69", 0, 0x8473}, /* East Asian ideograph */ {"\x6E", 0, 0x843E}, /* East Asian ideograph */ {"\x71", 0, 0x846D}, /* East Asian ideograph */ {"\x78", 0, 0x847A}, /* East Asian ideograph */ {"\x7B", 0, 0x8484}, /* East Asian ideograph */ {"\x7C", 0, 0x8478}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page177 = { marc8_31page177_flat, 0 }; /* PAGE 176 */ struct yaz_iconv_trie_dir marc8_31page176_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {178, 0, 0}, {179, 0, 0}, {180, 0, 0}, {181, 0, 0}, {182, 0, 0}, {183, 0, 0}, {184, 0, 0}, {185, 0, 0}, {186, 0, 0}, {187, 0, 0}, {188, 0, 0}, {189, 0, 0}, {190, 0, 0}, {191, 0, 0}, {192, 0, 0}, {193, 0, 0}, {194, 0, 0}, {195, 0, 0}, {196, 0, 0}, {197, 0, 0}, {198, 0, 0}, {199, 0, 0}, {200, 0, 0}, {201, 0, 0}, {202, 0, 0}, {203, 0, 0}, {204, 0, 0}, {205, 0, 0}, {206, 0, 0}, {207, 0, 0}, {208, 0, 0}, {209, 0, 0}, {210, 0, 0}, {211, 0, 0}, {212, 0, 0}, {213, 0, 0}, {214, 0, 0}, {215, 0, 0}, {216, 0, 0}, {217, 0, 0}, {218, 0, 0}, {219, 0, 0}, {220, 0, 0}, {221, 0, 0}, {222, 0, 0}, {223, 0, 0}, {224, 0, 0}, {225, 0, 0}, {226, 0, 0}, {227, 0, 0}, {228, 0, 0}, {229, 0, 0}, {230, 0, 0}, {231, 0, 0}, {232, 0, 0}, {233, 0, 0}, {234, 0, 0}, {235, 0, 0}, {236, 0, 0}, {237, 0, 0}, {238, 0, 0}, {239, 0, 0}, {240, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page176 = { 0, marc8_31page176_dir }; /* PAGE 175 */ struct yaz_iconv_trie_flat marc8_31page175_flat[] = { {"\x21", 0, 0x837F}, /* East Asian ideograph */ {"\x22", 0, 0x8399}, /* East Asian ideograph */ {"\x23", 0, 0x83A6}, /* East Asian ideograph */ {"\x25", 0, 0x8387}, /* East Asian ideograph */ {"\x26", 0, 0x83B9}, /* East Asian ideograph */ {"\x2B", 0, 0x83A9}, /* East Asian ideograph */ {"\x2F", 0, 0x839B}, /* East Asian ideograph */ {"\x33", 0, 0x83AA}, /* East Asian ideograph */ {"\x37", 0, 0x839C}, /* East Asian ideograph */ {"\x38", 0, 0x839F}, /* East Asian ideograph */ {"\x41", 0, 0x83CF}, /* East Asian ideograph */ {"\x43", 0, 0x83F9}, /* East Asian ideograph */ {"\x45", 0, 0x8421}, /* East Asian ideograph */ {"\x51", 0, 0x8423}, /* East Asian ideograph */ {"\x52", 0, 0x83EA}, /* East Asian ideograph */ {"\x53", 0, 0x8413}, /* East Asian ideograph */ {"\x56", 0, 0x83FC}, /* East Asian ideograph */ {"\x57", 0, 0x83F6}, /* East Asian ideograph */ {"\x59", 0, 0x8410}, /* East Asian ideograph */ {"\x5A", 0, 0x83E1}, /* East Asian ideograph */ {"\x60", 0, 0x83C6}, /* East Asian ideograph */ {"\x61", 0, 0x8407}, /* East Asian ideograph */ {"\x63", 0, 0x83EB}, /* East Asian ideograph */ {"\x6A", 0, 0x83BF}, /* East Asian ideograph */ {"\x6B", 0, 0x83E2}, /* East Asian ideograph */ {"\x6D", 0, 0x8401}, /* East Asian ideograph */ {"\x71", 0, 0x83D8}, /* East Asian ideograph */ {"\x72", 0, 0x83E5}, /* East Asian ideograph */ {"\x74", 0, 0x8418}, /* East Asian ideograph */ {"\x79", 0, 0x83CE}, /* East Asian ideograph */ {"\x7B", 0, 0x83D3}, /* East Asian ideograph */ {"\x7D", 0, 0x83D6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page175 = { marc8_31page175_flat, 0 }; /* PAGE 174 */ struct yaz_iconv_trie_flat marc8_31page174_flat[] = { {"\x21", 0, 0x830C}, /* East Asian ideograph */ {"\x22", 0, 0x82FB}, /* East Asian ideograph */ {"\x24", 0, 0x82FD}, /* East Asian ideograph */ {"\x26", 0, 0x8333}, /* East Asian ideograph */ {"\x29", 0, 0x8328}, /* East Asian ideograph */ {"\x2B", 0, 0x8344}, /* East Asian ideograph */ {"\x2E", 0, 0x8351}, /* East Asian ideograph */ {"\x35", 0, 0x831B}, /* East Asian ideograph */ {"\x3B", 0, 0x8356}, /* East Asian ideograph */ {"\x3F", 0, 0x8322}, /* East Asian ideograph */ {"\x40", 0, 0x832C}, /* East Asian ideograph */ {"\x48", 0, 0x833C}, /* East Asian ideograph */ {"\x4A", 0, 0x834D}, /* East Asian ideograph */ {"\x4D", 0, 0x8343}, /* East Asian ideograph (variant of EACC 4C7D4D) */ {"\x52", 0, 0x832F}, /* East Asian ideograph */ {"\x53", 0, 0x8348}, /* East Asian ideograph */ {"\x54", 0, 0x8312}, /* East Asian ideograph */ {"\x56", 0, 0x8316}, /* East Asian ideograph */ {"\x58", 0, 0x831A}, /* East Asian ideograph */ {"\x5F", 0, 0x8347}, /* East Asian ideograph */ {"\x62", 0, 0x83A8}, /* East Asian ideograph */ {"\x67", 0, 0x83AD}, /* East Asian ideograph */ {"\x6D", 0, 0x8373}, /* East Asian ideograph */ {"\x72", 0, 0x83B0}, /* East Asian ideograph */ {"\x76", 0, 0x831D}, /* East Asian ideograph */ {"\x7A", 0, 0x838F}, /* East Asian ideograph */ {"\x7C", 0, 0x8395}, /* East Asian ideograph */ {"\x7E", 0, 0x8375}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page174 = { marc8_31page174_flat, 0 }; /* PAGE 173 */ struct yaz_iconv_trie_flat marc8_31page173_flat[] = { {"\x24", 0, 0x828E}, /* East Asian ideograph */ {"\x25", 0, 0x8291}, /* East Asian ideograph */ {"\x27", 0, 0x828F}, /* East Asian ideograph */ {"\x28", 0, 0x8284}, /* East Asian ideograph */ {"\x2D", 0, 0x8283}, /* East Asian ideograph */ {"\x2E", 0, 0x828A}, /* East Asian ideograph */ {"\x31", 0, 0x82AF}, /* East Asian ideograph */ {"\x34", 0, 0x82A7}, /* East Asian ideograph */ {"\x38", 0, 0x82AB}, /* East Asian ideograph */ {"\x3A", 0, 0x82B0}, /* East Asian ideograph */ {"\x3C", 0, 0x82A4}, /* East Asian ideograph */ {"\x3F", 0, 0x829A}, /* East Asian ideograph */ {"\x42", 0, 0x82A3}, /* East Asian ideograph */ {"\x44", 0, 0x82B7}, /* East Asian ideograph */ {"\x45", 0, 0x82AE}, /* East Asian ideograph (variant of EACC 4C7C45) */ {"\x46", 0, 0x82A9}, /* East Asian ideograph */ {"\x49", 0, 0x82BC}, /* East Asian ideograph */ {"\x4C", 0, 0x82A8}, /* East Asian ideograph */ {"\x4E", 0, 0x82B4}, /* East Asian ideograph */ {"\x50", 0, 0x82A1}, /* East Asian ideograph */ {"\x53", 0, 0x82AA}, /* East Asian ideograph */ {"\x55", 0, 0x82D9}, /* East Asian ideograph */ {"\x57", 0, 0x82FE}, /* East Asian ideograph */ {"\x5A", 0, 0x82E0}, /* East Asian ideograph */ {"\x5B", 0, 0x82D0}, /* East Asian ideograph */ {"\x5C", 0, 0x8300}, /* East Asian ideograph */ {"\x5F", 0, 0x82EA}, /* East Asian ideograph */ {"\x60", 0, 0x82F7}, /* East Asian ideograph */ {"\x62", 0, 0x82EF}, /* East Asian ideograph */ {"\x63", 0, 0x833A}, /* East Asian ideograph */ {"\x64", 0, 0x82E4}, /* East Asian ideograph */ {"\x65", 0, 0x82D5}, /* East Asian ideograph */ {"\x67", 0, 0x8307}, /* East Asian ideograph */ {"\x68", 0, 0x82FA}, /* East Asian ideograph */ {"\x69", 0, 0x82F4}, /* East Asian ideograph */ {"\x6A", 0, 0x82E2}, /* East Asian ideograph */ {"\x6D", 0, 0x82D2}, /* East Asian ideograph */ {"\x6E", 0, 0x8314}, /* East Asian ideograph */ {"\x71", 0, 0x82EB}, /* East Asian ideograph */ {"\x72", 0, 0x82D8}, /* East Asian ideograph */ {"\x73", 0, 0x82E1}, /* East Asian ideograph */ {"\x75", 0, 0x82F6}, /* East Asian ideograph */ {"\x7B", 0, 0x8310}, /* East Asian ideograph */ {"\x7C", 0, 0x82F3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page173 = { marc8_31page173_flat, 0 }; /* PAGE 172 */ struct yaz_iconv_trie_flat marc8_31page172_flat[] = { {"\x27", 0, 0x821D}, /* East Asian ideograph */ {"\x29", 0, 0x8220}, /* East Asian ideograph */ {"\x2E", 0, 0x822D}, /* East Asian ideograph */ {"\x2F", 0, 0x822F}, /* East Asian ideograph */ {"\x32", 0, 0x8238}, /* East Asian ideograph */ {"\x34", 0, 0x823A}, /* East Asian ideograph */ {"\x35", 0, 0x8233}, /* East Asian ideograph */ {"\x36", 0, 0x8234}, /* East Asian ideograph */ {"\x3A", 0, 0x8232}, /* East Asian ideograph */ {"\x42", 0, 0x8248}, /* East Asian ideograph */ {"\x43", 0, 0x8249}, /* East Asian ideograph */ {"\x45", 0, 0x8244}, /* East Asian ideograph */ {"\x47", 0, 0x8240}, /* East Asian ideograph */ {"\x48", 0, 0x8241}, /* East Asian ideograph */ {"\x4A", 0, 0x8245}, /* East Asian ideograph */ {"\x4B", 0, 0x824B}, /* East Asian ideograph */ {"\x50", 0, 0x824F}, /* East Asian ideograph */ {"\x53", 0, 0x824E}, /* East Asian ideograph */ {"\x56", 0, 0x8256}, /* East Asian ideograph */ {"\x57", 0, 0x8257}, /* East Asian ideograph */ {"\x5E", 0, 0x825A}, /* East Asian ideograph */ {"\x62", 0, 0x825F}, /* East Asian ideograph */ {"\x67", 0, 0x8262}, /* East Asian ideograph */ {"\x6B", 0, 0x8268}, /* East Asian ideograph */ {"\x6F", 0, 0x826D}, /* East Asian ideograph */ {"\x77", 0, 0x8278}, /* East Asian ideograph */ {"\x7D", 0, 0x827F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page172 = { marc8_31page172_flat, 0 }; /* PAGE 171 */ struct yaz_iconv_trie_flat marc8_31page171_flat[] = { {"\x2C", 0, 0x81B5}, /* East Asian ideograph */ {"\x2E", 0, 0x81B0}, /* East Asian ideograph */ {"\x2F", 0, 0x81B4}, /* East Asian ideograph */ {"\x33", 0, 0x81B7}, /* East Asian ideograph */ {"\x37", 0, 0x81BB}, /* East Asian ideograph */ {"\x38", 0, 0x81C1}, /* East Asian ideograph */ {"\x39", 0, 0x81CC}, /* East Asian ideograph */ {"\x3A", 0, 0x81CA}, /* East Asian ideograph */ {"\x3B", 0, 0x81C4}, /* East Asian ideograph */ {"\x40", 0, 0x81D1}, /* East Asian ideograph */ {"\x41", 0, 0x81CE}, /* East Asian ideograph */ {"\x43", 0, 0x81D0}, /* East Asian ideograph */ {"\x4B", 0, 0x81DB}, /* East Asian ideograph */ {"\x4F", 0, 0x81DD}, /* East Asian ideograph */ {"\x53", 0, 0x81DE}, /* East Asian ideograph */ {"\x56", 0, 0x81E0}, /* East Asian ideograph */ {"\x57", 0, 0x81E2}, /* East Asian ideograph */ {"\x5B", 0, 0x81E7}, /* East Asian ideograph */ {"\x60", 0, 0x81EF}, /* East Asian ideograph */ {"\x65", 0, 0x81F2}, /* East Asian ideograph */ {"\x68", 0, 0x81F6}, /* East Asian ideograph */ {"\x70", 0, 0x8201}, /* East Asian ideograph */ {"\x72", 0, 0x8201}, /* East Asian ideograph */ {"\x74", 0, 0x8203}, /* East Asian ideograph */ {"\x75", 0, 0x8204}, /* East Asian ideograph */ {"\x77", 0, 0x820B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page171 = { marc8_31page171_flat, 0 }; /* PAGE 170 */ struct yaz_iconv_trie_flat marc8_31page170_flat[] = { {"\x25", 0, 0x814D}, /* East Asian ideograph */ {"\x2E", 0, 0x6720}, /* East Asian ideograph */ {"\x32", 0, 0x8160}, /* East Asian ideograph */ {"\x3B", 0, 0x8169}, /* East Asian ideograph */ {"\x3C", 0, 0x817C}, /* East Asian ideograph */ {"\x41", 0, 0x8161}, /* East Asian ideograph */ {"\x46", 0, 0x8176}, /* East Asian ideograph */ {"\x47", 0, 0x8174}, /* East Asian ideograph */ {"\x48", 0, 0x8167}, /* East Asian ideograph */ {"\x4B", 0, 0x816F}, /* East Asian ideograph */ {"\x4D", 0, 0x8182}, /* East Asian ideograph */ {"\x51", 0, 0x818B}, /* East Asian ideograph */ {"\x52", 0, 0x8186}, /* East Asian ideograph */ {"\x59", 0, 0x8183}, /* East Asian ideograph */ {"\x6A", 0, 0x819F}, /* East Asian ideograph */ {"\x6B", 0, 0x81A3}, /* East Asian ideograph */ {"\x70", 0, 0x8198}, /* East Asian ideograph */ {"\x75", 0, 0x8195}, /* East Asian ideograph */ {"\x77", 0, 0x8197}, /* East Asian ideograph */ {"\x7C", 0, 0x81AA}, /* East Asian ideograph */ {"\x7D", 0, 0x81A6}, /* East Asian ideograph */ {"\x7E", 0, 0x6725}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page170 = { marc8_31page170_flat, 0 }; /* PAGE 169 */ struct yaz_iconv_trie_flat marc8_31page169_flat[] = { {"\x27", 0, 0x80D9}, /* East Asian ideograph */ {"\x2A", 0, 0x80DD}, /* East Asian ideograph */ {"\x2D", 0, 0x80CF}, /* East Asian ideograph */ {"\x2F", 0, 0x80CD}, /* East Asian ideograph */ {"\x30", 0, 0x80D7}, /* East Asian ideograph */ {"\x33", 0, 0x80F2}, /* East Asian ideograph */ {"\x34", 0, 0x80FA}, /* East Asian ideograph */ {"\x38", 0, 0x80FE}, /* East Asian ideograph */ {"\x3C", 0, 0x8103}, /* East Asian ideograph */ {"\x40", 0, 0x80F9}, /* East Asian ideograph */ {"\x41", 0, 0x80EF}, /* East Asian ideograph */ {"\x42", 0, 0x80D4}, /* East Asian ideograph */ {"\x49", 0, 0x811D}, /* East Asian ideograph */ {"\x4B", 0, 0x8118}, /* East Asian ideograph */ {"\x50", 0, 0x8130}, /* East Asian ideograph */ {"\x54", 0, 0x8124}, /* East Asian ideograph */ {"\x55", 0, 0x811B}, /* East Asian ideograph */ {"\x60", 0, 0x812A}, /* East Asian ideograph */ {"\x61", 0, 0x811E}, /* East Asian ideograph */ {"\x64", 0, 0x8121}, /* East Asian ideograph */ {"\x66", 0, 0x8117}, /* East Asian ideograph */ {"\x69", 0, 0x813A}, /* East Asian ideograph */ {"\x6A", 0, 0x815A}, /* East Asian ideograph */ {"\x6D", 0, 0x8148}, /* East Asian ideograph */ {"\x77", 0, 0x814C}, /* East Asian ideograph */ {"\x7C", 0, 0x8153}, /* East Asian ideograph */ {"\x7D", 0, 0x8141}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page169 = { marc8_31page169_flat, 0 }; /* PAGE 168 */ struct yaz_iconv_trie_flat marc8_31page168_flat[] = { {"\x28", 0, 0x8063}, /* East Asian ideograph */ {"\x32", 0, 0x806C}, /* East Asian ideograph */ {"\x39", 0, 0x8075}, /* East Asian ideograph */ {"\x3E", 0, 0x807B}, /* East Asian ideograph */ {"\x3F", 0, 0x8079}, /* East Asian ideograph */ {"\x47", 0, 0x808A}, /* East Asian ideograph */ {"\x49", 0, 0x808E}, /* East Asian ideograph */ {"\x4E", 0, 0x809F}, /* East Asian ideograph */ {"\x5C", 0, 0x670A}, /* East Asian ideograph */ {"\x60", 0, 0x80A7}, /* East Asian ideograph */ {"\x61", 0, 0x80B0}, /* East Asian ideograph */ {"\x68", 0, 0x80B8}, /* East Asian ideograph */ {"\x69", 0, 0x80B5}, /* East Asian ideograph */ {"\x6A", 0, 0x80A6}, /* East Asian ideograph */ {"\x73", 0, 0x80E0}, /* East Asian ideograph */ {"\x75", 0, 0x6711}, /* East Asian ideograph */ {"\x7B", 0, 0x80DF}, /* East Asian ideograph */ {"\x7D", 0, 0x80C2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page168 = { marc8_31page168_flat, 0 }; /* PAGE 167 */ struct yaz_iconv_trie_flat marc8_31page167_flat[] = { {"\x29", 0, 0x7FFD}, /* East Asian ideograph */ {"\x2A", 0, 0x7FFE}, /* East Asian ideograph */ {"\x2C", 0, 0x7FFF}, /* East Asian ideograph */ {"\x2E", 0, 0x8004}, /* East Asian ideograph */ {"\x31", 0, 0x8008}, /* East Asian ideograph */ {"\x33", 0, 0x800B}, /* East Asian ideograph */ {"\x34", 0, 0x800E}, /* East Asian ideograph */ {"\x35", 0, 0x8011}, /* East Asian ideograph */ {"\x36", 0, 0x800F}, /* East Asian ideograph */ {"\x37", 0, 0x8014}, /* East Asian ideograph */ {"\x39", 0, 0x8016}, /* East Asian ideograph */ {"\x3B", 0, 0x801F}, /* East Asian ideograph */ {"\x3D", 0, 0x801E}, /* East Asian ideograph */ {"\x3E", 0, 0x801D}, /* East Asian ideograph */ {"\x4B", 0, 0x8025}, /* East Asian ideograph */ {"\x4C", 0, 0x8026}, /* East Asian ideograph */ {"\x4D", 0, 0x802A}, /* East Asian ideograph */ {"\x4E", 0, 0x8029}, /* East Asian ideograph */ {"\x4F", 0, 0x8028}, /* East Asian ideograph */ {"\x5B", 0, 0x8030}, /* East Asian ideograph */ {"\x5D", 0, 0x8031}, /* East Asian ideograph */ {"\x60", 0, 0x8035}, /* East Asian ideograph */ {"\x69", 0, 0x8039}, /* East Asian ideograph */ {"\x6B", 0, 0x8041}, /* East Asian ideograph */ {"\x70", 0, 0x8043}, /* East Asian ideograph */ {"\x7B", 0, 0x8052}, /* East Asian ideograph */ {"\x7E", 0, 0x8062}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page167 = { marc8_31page167_flat, 0 }; /* PAGE 166 */ struct yaz_iconv_trie_flat marc8_31page166_flat[] = { {"\x23", 0, 0x7F97}, /* East Asian ideograph */ {"\x24", 0, 0x7F95}, /* East Asian ideograph */ {"\x2C", 0, 0x7FA2}, /* East Asian ideograph */ {"\x33", 0, 0x7FA7}, /* East Asian ideograph */ {"\x3B", 0, 0x7FB0}, /* East Asian ideograph */ {"\x3C", 0, 0x7FAD}, /* East Asian ideograph */ {"\x3F", 0, 0x7FB1}, /* East Asian ideograph */ {"\x40", 0, 0x7FB4}, /* East Asian ideograph */ {"\x42", 0, 0x7FB5}, /* East Asian ideograph */ {"\x4A", 0, 0x7FBC}, /* East Asian ideograph */ {"\x4C", 0, 0x7FBE}, /* East Asian ideograph */ {"\x51", 0, 0x7FC3}, /* East Asian ideograph */ {"\x57", 0, 0x7FCA}, /* East Asian ideograph */ {"\x67", 0, 0x7FDB}, /* East Asian ideograph */ {"\x68", 0, 0x7FE3}, /* East Asian ideograph */ {"\x6C", 0, 0x7FE6}, /* East Asian ideograph */ {"\x6F", 0, 0x7FE5}, /* East Asian ideograph */ {"\x72", 0, 0x7FEC}, /* East Asian ideograph */ {"\x73", 0, 0x7FEB}, /* East Asian ideograph */ {"\x77", 0, 0x7FEF}, /* East Asian ideograph */ {"\x7A", 0, 0x7FEE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page166 = { marc8_31page166_flat, 0 }; /* PAGE 165 */ struct yaz_iconv_trie_flat marc8_31page165_flat[] = { {"\x25", 0, 0x7F43}, /* East Asian ideograph */ {"\x27", 0, 0x7F46}, /* East Asian ideograph */ {"\x28", 0, 0x7F45}, /* East Asian ideograph */ {"\x2B", 0, 0x7F4B}, /* East Asian ideograph */ {"\x2E", 0, 0x7F4C}, /* East Asian ideograph */ {"\x2F", 0, 0x7F4D}, /* East Asian ideograph */ {"\x31", 0, 0x7F4E}, /* East Asian ideograph */ {"\x32", 0, 0x7F4F}, /* East Asian ideograph */ {"\x3E", 0, 0x7F60}, /* East Asian ideograph */ {"\x3F", 0, 0x7F61}, /* East Asian ideograph */ {"\x43", 0, 0x7F5D}, /* East Asian ideograph */ {"\x45", 0, 0x7F5B}, /* East Asian ideograph */ {"\x47", 0, 0x7F63}, /* East Asian ideograph */ {"\x50", 0, 0x7F65}, /* East Asian ideograph */ {"\x51", 0, 0x7F66}, /* East Asian ideograph */ {"\x53", 0, 0x7F6D}, /* East Asian ideograph */ {"\x54", 0, 0x7F6B}, /* East Asian ideograph */ {"\x55", 0, 0x7F67}, /* East Asian ideograph */ {"\x57", 0, 0x7F68}, /* East Asian ideograph */ {"\x5E", 0, 0x7F71}, /* East Asian ideograph */ {"\x60", 0, 0x7F73}, /* East Asian ideograph */ {"\x63", 0, 0x7F76}, /* East Asian ideograph */ {"\x6A", 0, 0x7F7F}, /* East Asian ideograph */ {"\x6B", 0, 0x7F7E}, /* East Asian ideograph */ {"\x6C", 0, 0x7F7D}, /* East Asian ideograph */ {"\x72", 0, 0x7F86}, /* East Asian ideograph */ {"\x7A", 0, 0x7F91}, /* East Asian ideograph */ {"\x7E", 0, 0x7F96}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page165 = { marc8_31page165_flat, 0 }; /* PAGE 164 */ struct yaz_iconv_trie_flat marc8_31page164_flat[] = { {"\x21", 0, 0x7E35}, /* East Asian ideograph */ {"\x26", 0, 0x7E3F}, /* East Asian ideograph */ {"\x28", 0, 0x7E47}, /* East Asian ideograph */ {"\x2D", 0, 0x7E52}, /* East Asian ideograph */ {"\x2F", 0, 0x7E51}, /* East Asian ideograph */ {"\x33", 0, 0x7E50}, /* East Asian ideograph */ {"\x34", 0, 0x7E67}, /* East Asian ideograph */ {"\x37", 0, 0x7E56}, /* East Asian ideograph */ {"\x48", 0, 0x7E68}, /* East Asian ideograph */ {"\x49", 0, 0x7E6E}, /* East Asian ideograph */ {"\x4E", 0, 0x7E70}, /* East Asian ideograph */ {"\x51", 0, 0x7E6F}, /* East Asian ideograph */ {"\x52", 0, 0x7E73}, /* East Asian ideograph */ {"\x58", 0, 0x7E7B}, /* East Asian ideograph */ {"\x59", 0, 0x7E7E}, /* East Asian ideograph */ {"\x5B", 0, 0x7E81}, /* East Asian ideograph */ {"\x5D", 0, 0x7E8A}, /* East Asian ideograph */ {"\x5E", 0, 0x7E87}, /* East Asian ideograph */ {"\x60", 0, 0x7E88}, /* East Asian ideograph */ {"\x64", 0, 0x7E86}, /* East Asian ideograph */ {"\x6A", 0, 0x7E91}, /* East Asian ideograph */ {"\x6B", 0, 0x7E95}, /* East Asian ideograph */ {"\x6D", 0, 0x7E94}, /* East Asian ideograph */ {"\x70", 0, 0x7E9B}, /* East Asian ideograph */ {"\x71", 0, 0x7E9A}, /* East Asian ideograph */ {"\x73", 0, 0x7E99}, /* East Asian ideograph */ {"\x74", 0, 0x7E98}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page164 = { marc8_31page164_flat, 0 }; /* PAGE 163 */ struct yaz_iconv_trie_flat marc8_31page163_flat[] = { {"\x22", 0, 0x7D9F}, /* East Asian ideograph */ {"\x29", 0, 0x7DE1}, /* East Asian ideograph */ {"\x2A", 0, 0x7DD9}, /* East Asian ideograph */ {"\x2B", 0, 0x7DE4}, /* East Asian ideograph */ {"\x31", 0, 0x7DD7}, /* East Asian ideograph */ {"\x36", 0, 0x7DF9}, /* East Asian ideograph */ {"\x3A", 0, 0x7E06}, /* East Asian ideograph */ {"\x3C", 0, 0x7DF2}, /* East Asian ideograph */ {"\x3E", 0, 0x7DE6}, /* East Asian ideograph */ {"\x46", 0, 0x7DDC}, /* East Asian ideograph */ {"\x47", 0, 0x7DF1}, /* East Asian ideograph */ {"\x48", 0, 0x7DF6}, /* East Asian ideograph */ {"\x49", 0, 0x7DE5}, /* East Asian ideograph */ {"\x4B", 0, 0x7DF5}, /* East Asian ideograph */ {"\x50", 0, 0x7E17}, /* East Asian ideograph */ {"\x51", 0, 0x7E1E}, /* East Asian ideograph */ {"\x52", 0, 0x7E21}, /* East Asian ideograph */ {"\x53", 0, 0x7E0B}, /* East Asian ideograph */ {"\x55", 0, 0x7E12}, /* East Asian ideograph */ {"\x56", 0, 0x7E22}, /* East Asian ideograph */ {"\x5B", 0, 0x7E20}, /* East Asian ideograph */ {"\x5D", 0, 0x7E1D}, /* East Asian ideograph */ {"\x5E", 0, 0x7E09}, /* East Asian ideograph */ {"\x5F", 0, 0x7E1F}, /* East Asian ideograph */ {"\x65", 0, 0x7E15}, /* East Asian ideograph */ {"\x69", 0, 0x7E10}, /* East Asian ideograph */ {"\x6A", 0, 0x7E0F}, /* East Asian ideograph */ {"\x6D", 0, 0x7E3B}, /* East Asian ideograph */ {"\x71", 0, 0x7E34}, /* East Asian ideograph */ {"\x72", 0, 0x7E2D}, /* East Asian ideograph */ {"\x73", 0, 0x7E2F}, /* East Asian ideograph */ {"\x75", 0, 0x7E36}, /* East Asian ideograph */ {"\x77", 0, 0x7E3A}, /* East Asian ideograph */ {"\x79", 0, 0x7E39}, /* East Asian ideograph */ {"\x7D", 0, 0x7E44}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page163 = { marc8_31page163_flat, 0 }; /* PAGE 162 */ struct yaz_iconv_trie_flat marc8_31page162_flat[] = { {"\x22", 0, 0x7D70}, /* East Asian ideograph */ {"\x29", 0, 0x7D67}, /* East Asian ideograph */ {"\x2B", 0, 0x7D6A}, /* East Asian ideograph */ {"\x2C", 0, 0x7D6B}, /* East Asian ideograph */ {"\x30", 0, 0x7D73}, /* East Asian ideograph */ {"\x34", 0, 0x7D4E}, /* East Asian ideograph */ {"\x37", 0, 0x7D8B}, /* East Asian ideograph */ {"\x39", 0, 0x7D88}, /* East Asian ideograph */ {"\x3B", 0, 0x7D85}, /* East Asian ideograph */ {"\x3D", 0, 0x7D8E}, /* East Asian ideograph */ {"\x42", 0, 0x7D7F}, /* East Asian ideograph */ {"\x44", 0, 0x7D86}, /* East Asian ideograph */ {"\x48", 0, 0x7D8D}, /* East Asian ideograph */ {"\x4B", 0, 0x7D9B}, /* East Asian ideograph */ {"\x4D", 0, 0x7D83}, /* East Asian ideograph */ {"\x4F", 0, 0x7D7D}, /* East Asian ideograph */ {"\x54", 0, 0x7D7B}, /* East Asian ideograph */ {"\x58", 0, 0x7D7A}, /* East Asian ideograph */ {"\x59", 0, 0x7D96}, /* East Asian ideograph */ {"\x5A", 0, 0x7D5B}, /* East Asian ideograph */ {"\x5B", 0, 0x7D8C}, /* East Asian ideograph */ {"\x61", 0, 0x7DA3}, /* East Asian ideograph */ {"\x62", 0, 0x7DAE}, /* East Asian ideograph */ {"\x67", 0, 0x7DCB}, /* East Asian ideograph */ {"\x69", 0, 0x7DAA}, /* East Asian ideograph */ {"\x6A", 0, 0x7DCE}, /* East Asian ideograph */ {"\x6B", 0, 0x7DC9}, /* East Asian ideograph */ {"\x6E", 0, 0x7DC5}, /* East Asian ideograph */ {"\x6F", 0, 0x7DA6}, /* East Asian ideograph */ {"\x74", 0, 0x7DC4}, /* East Asian ideograph */ {"\x78", 0, 0x7DAC}, /* East Asian ideograph */ {"\x7D", 0, 0x7DB9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page162 = { marc8_31page162_flat, 0 }; /* PAGE 161 */ struct yaz_iconv_trie_flat marc8_31page161_flat[] = { {"\x22", 0, 0x7CDD}, /* East Asian ideograph */ {"\x28", 0, 0x7CED}, /* East Asian ideograph */ {"\x2E", 0, 0x7CF0}, /* East Asian ideograph */ {"\x30", 0, 0x7CF2}, /* East Asian ideograph */ {"\x35", 0, 0x7CF4}, /* East Asian ideograph */ {"\x39", 0, 0x7CF6}, /* East Asian ideograph */ {"\x42", 0, 0x7D06}, /* East Asian ideograph */ {"\x44", 0, 0x7D03}, /* East Asian ideograph */ {"\x45", 0, 0x7D08}, /* East Asian ideograph */ {"\x49", 0, 0x7D0F}, /* East Asian ideograph */ {"\x4A", 0, 0x7D13}, /* East Asian ideograph */ {"\x50", 0, 0x7D18}, /* East Asian ideograph */ {"\x51", 0, 0x7D1E}, /* East Asian ideograph */ {"\x52", 0, 0x7D1D}, /* East Asian ideograph */ {"\x59", 0, 0x7D35}, /* East Asian ideograph */ {"\x5A", 0, 0x7D3D}, /* East Asian ideograph */ {"\x61", 0, 0x7D3A}, /* East Asian ideograph */ {"\x62", 0, 0x7D32}, /* East Asian ideograph */ {"\x65", 0, 0x7D31}, /* East Asian ideograph */ {"\x68", 0, 0x7D45}, /* East Asian ideograph */ {"\x6A", 0, 0x7D3F}, /* East Asian ideograph */ {"\x6C", 0, 0x7D29}, /* East Asian ideograph */ {"\x6F", 0, 0x7D41}, /* East Asian ideograph */ {"\x71", 0, 0x7D3E}, /* East Asian ideograph */ {"\x7A", 0, 0x7D5C}, /* East Asian ideograph */ {"\x7C", 0, 0x7D53}, /* East Asian ideograph */ {"\x7E", 0, 0x7D5A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page161 = { marc8_31page161_flat, 0 }; /* PAGE 160 */ struct yaz_iconv_trie_flat marc8_31page160_flat[] = { {"\x21", 0, 0x7C81}, /* East Asian ideograph */ {"\x28", 0, 0x7C8E}, /* East Asian ideograph */ {"\x29", 0, 0x7C91}, /* East Asian ideograph */ {"\x2A", 0, 0x7C83}, /* East Asian ideograph */ {"\x2C", 0, 0x7C8D}, /* East Asian ideograph */ {"\x3A", 0, 0x7C99}, /* East Asian ideograph */ {"\x3B", 0, 0x7C98}, /* East Asian ideograph */ {"\x3E", 0, 0x7C9C}, /* East Asian ideograph */ {"\x40", 0, 0x7C95}, /* East Asian ideograph */ {"\x42", 0, 0x7CA7}, /* East Asian ideograph */ {"\x43", 0, 0x7CA2}, /* East Asian ideograph */ {"\x45", 0, 0x7C9E}, /* East Asian ideograph */ {"\x46", 0, 0x7CA9}, /* East Asian ideograph */ {"\x48", 0, 0x7CA8}, /* East Asian ideograph */ {"\x49", 0, 0x7CA1}, /* East Asian ideograph */ {"\x4A", 0, 0x7CAC}, /* East Asian ideograph */ {"\x4C", 0, 0x7CA6}, /* East Asian ideograph */ {"\x54", 0, 0x7CB2}, /* East Asian ideograph */ {"\x58", 0, 0x7CBB}, /* East Asian ideograph */ {"\x59", 0, 0x7CBF}, /* East Asian ideograph */ {"\x5E", 0, 0x7CBA}, /* East Asian ideograph */ {"\x5F", 0, 0x7CBC}, /* East Asian ideograph */ {"\x64", 0, 0x7CC2}, /* East Asian ideograph */ {"\x66", 0, 0x7CCE}, /* East Asian ideograph */ {"\x68", 0, 0x7CC8}, /* East Asian ideograph */ {"\x69", 0, 0x7CC5}, /* East Asian ideograph */ {"\x6D", 0, 0x7CCC}, /* East Asian ideograph */ {"\x6F", 0, 0x7CC9}, /* East Asian ideograph */ {"\x71", 0, 0x7CD2}, /* East Asian ideograph */ {"\x75", 0, 0x7CD7}, /* East Asian ideograph */ {"\x77", 0, 0x7CE1}, /* East Asian ideograph */ {"\x7B", 0, 0x7CE8}, /* East Asian ideograph (variant of EACC 4C6F7B) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page160 = { marc8_31page160_flat, 0 }; /* PAGE 159 */ struct yaz_iconv_trie_flat marc8_31page159_flat[] = { {"\x27", 0, 0x7C35}, /* East Asian ideograph */ {"\x2A", 0, 0x7C40}, /* East Asian ideograph */ {"\x30", 0, 0x7C39}, /* East Asian ideograph */ {"\x34", 0, 0x7C3B}, /* East Asian ideograph */ {"\x35", 0, 0x7C34}, /* East Asian ideograph */ {"\x3B", 0, 0x7C42}, /* East Asian ideograph */ {"\x46", 0, 0x7C4E}, /* East Asian ideograph */ {"\x54", 0, 0x7C5D}, /* East Asian ideograph */ {"\x56", 0, 0x7C5C}, /* East Asian ideograph */ {"\x57", 0, 0x7C5A}, /* East Asian ideograph */ {"\x58", 0, 0x7C5B}, /* East Asian ideograph */ {"\x59", 0, 0x7C59}, /* East Asian ideograph */ {"\x5B", 0, 0x7C5E}, /* East Asian ideograph */ {"\x5C", 0, 0x7C67}, /* East Asian ideograph */ {"\x5E", 0, 0x7C63}, /* East Asian ideograph */ {"\x61", 0, 0x7C68}, /* East Asian ideograph */ {"\x62", 0, 0x7C65}, /* East Asian ideograph */ {"\x6F", 0, 0x7C6F}, /* East Asian ideograph */ {"\x75", 0, 0x7C75}, /* East Asian ideograph */ {"\x79", 0, 0x7C7E}, /* East Asian ideograph */ {"\x7A", 0, 0x7C78}, /* East Asian ideograph */ {"\x7D", 0, 0x7C7D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page159 = { marc8_31page159_flat, 0 }; /* PAGE 158 */ struct yaz_iconv_trie_flat marc8_31page158_flat[] = { {"\x22", 0, 0x7BDD}, /* East Asian ideograph */ {"\x24", 0, 0x7BE5}, /* East Asian ideograph */ {"\x29", 0, 0x7BE8}, /* East Asian ideograph */ {"\x2E", 0, 0x7BF9}, /* East Asian ideograph */ {"\x2F", 0, 0x7BD4}, /* East Asian ideograph */ {"\x32", 0, 0x7BDF}, /* East Asian ideograph */ {"\x35", 0, 0x7BD8}, /* East Asian ideograph */ {"\x37", 0, 0x7BEA}, /* East Asian ideograph (unrelated variant of EACC 3A6A7C) */ {"\x3B", 0, 0x7C06}, /* East Asian ideograph */ {"\x3E", 0, 0x7BF0}, /* East Asian ideograph */ {"\x41", 0, 0x7C0F}, /* East Asian ideograph */ {"\x46", 0, 0x7C0B}, /* East Asian ideograph */ {"\x47", 0, 0x7C00}, /* East Asian ideograph */ {"\x4B", 0, 0x7C0C}, /* East Asian ideograph */ {"\x4F", 0, 0x7BF4}, /* East Asian ideograph */ {"\x54", 0, 0x7BF3}, /* East Asian ideograph */ {"\x5A", 0, 0x7C09}, /* East Asian ideograph */ {"\x5B", 0, 0x7C03}, /* East Asian ideograph */ {"\x5C", 0, 0x7BFC}, /* East Asian ideograph */ {"\x5F", 0, 0x7C1C}, /* East Asian ideograph */ {"\x61", 0, 0x7C26}, /* East Asian ideograph */ {"\x62", 0, 0x7C28}, /* East Asian ideograph */ {"\x63", 0, 0x7C20}, /* East Asian ideograph */ {"\x66", 0, 0x7C1F}, /* East Asian ideograph */ {"\x68", 0, 0x7C2F}, /* East Asian ideograph */ {"\x75", 0, 0x7C30}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page158 = { marc8_31page158_flat, 0 }; /* PAGE 157 */ struct yaz_iconv_trie_flat marc8_31page157_flat[] = { {"\x26", 0, 0x7B71}, /* East Asian ideograph */ {"\x27", 0, 0x7B70}, /* East Asian ideograph */ {"\x29", 0, 0x7B73}, /* East Asian ideograph */ {"\x2D", 0, 0x7B9C}, /* East Asian ideograph */ {"\x33", 0, 0x7B92}, /* East Asian ideograph */ {"\x34", 0, 0x7B91}, /* East Asian ideograph */ {"\x35", 0, 0x7B90}, /* East Asian ideograph */ {"\x38", 0, 0x7BA3}, /* East Asian ideograph */ {"\x3A", 0, 0x7B8D}, /* East Asian ideograph */ {"\x41", 0, 0x7B85}, /* East Asian ideograph */ {"\x43", 0, 0x7B8E}, /* East Asian ideograph */ {"\x44", 0, 0x7B98}, /* East Asian ideograph */ {"\x46", 0, 0x7B86}, /* East Asian ideograph */ {"\x48", 0, 0x7B99}, /* East Asian ideograph */ {"\x52", 0, 0x7BB2}, /* East Asian ideograph */ {"\x58", 0, 0x7BCB}, /* East Asian ideograph */ {"\x59", 0, 0x7BB8}, /* East Asian ideograph */ {"\x5A", 0, 0x7BCF}, /* East Asian ideograph */ {"\x5C", 0, 0x7BD0}, /* East Asian ideograph */ {"\x60", 0, 0x7BBE}, /* East Asian ideograph */ {"\x6F", 0, 0x7BCC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page157 = { marc8_31page157_flat, 0 }; /* PAGE 156 */ struct yaz_iconv_trie_flat marc8_31page156_flat[] = { {"\x27", 0, 0x7B39}, /* East Asian ideograph */ {"\x2D", 0, 0x7B0F}, /* East Asian ideograph */ {"\x2E", 0, 0x7B08}, /* East Asian ideograph */ {"\x33", 0, 0x7B0A}, /* East Asian ideograph */ {"\x35", 0, 0x7B35}, /* East Asian ideograph */ {"\x36", 0, 0x7B25}, /* East Asian ideograph */ {"\x39", 0, 0x7B38}, /* East Asian ideograph */ {"\x3B", 0, 0x7B3B}, /* East Asian ideograph */ {"\x3F", 0, 0x7B24}, /* East Asian ideograph */ {"\x40", 0, 0x7B33}, /* East Asian ideograph */ {"\x42", 0, 0x7B2A}, /* East Asian ideograph */ {"\x44", 0, 0x7B18}, /* East Asian ideograph */ {"\x47", 0, 0x7B31}, /* East Asian ideograph */ {"\x4A", 0, 0x7B2B}, /* East Asian ideograph */ {"\x4B", 0, 0x7B37}, /* East Asian ideograph */ {"\x4D", 0, 0x7B1F}, /* East Asian ideograph */ {"\x52", 0, 0x7B4A}, /* East Asian ideograph */ {"\x53", 0, 0x7B59}, /* East Asian ideograph */ {"\x54", 0, 0x7B04}, /* East Asian ideograph (variant of EACC 2E6B54) */ {"\x55", 0, 0x7B47}, /* East Asian ideograph */ {"\x59", 0, 0x7B58}, /* East Asian ideograph */ {"\x5B", 0, 0x7B6C}, /* East Asian ideograph */ {"\x60", 0, 0x7B48}, /* East Asian ideograph */ {"\x61", 0, 0x7B45}, /* East Asian ideograph */ {"\x62", 0, 0x7B4C}, /* East Asian ideograph */ {"\x63", 0, 0x7B4E}, /* East Asian ideograph */ {"\x68", 0, 0x7B66}, /* East Asian ideograph */ {"\x6C", 0, 0x7B64}, /* East Asian ideograph */ {"\x6E", 0, 0x7B69}, /* East Asian ideograph */ {"\x70", 0, 0x7B6D}, /* East Asian ideograph */ {"\x74", 0, 0x7B62}, /* East Asian ideograph */ {"\x75", 0, 0x7B6E}, /* East Asian ideograph */ {"\x76", 0, 0x7B74}, /* East Asian ideograph */ {"\x79", 0, 0x7B72}, /* East Asian ideograph */ {"\x7A", 0, 0x7B78}, /* East Asian ideograph */ {"\x7B", 0, 0x7B6F}, /* East Asian ideograph */ {"\x7C", 0, 0x7B67}, /* East Asian ideograph */ {"\x7E", 0, 0x7B65}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page156 = { marc8_31page156_flat, 0 }; /* PAGE 155 */ struct yaz_iconv_trie_flat marc8_31page155_flat[] = { {"\x28", 0, 0x7AA3}, /* East Asian ideograph */ {"\x2B", 0, 0x7A9E}, /* East Asian ideograph */ {"\x2C", 0, 0x7AA7}, /* East Asian ideograph */ {"\x2E", 0, 0x7AA8}, /* East Asian ideograph */ {"\x31", 0, 0x7AAC}, /* East Asian ideograph */ {"\x36", 0, 0x7AB3}, /* East Asian ideograph */ {"\x3A", 0, 0x7ABD}, /* East Asian ideograph */ {"\x3C", 0, 0x7AB6}, /* East Asian ideograph */ {"\x3D", 0, 0x7AB8}, /* East Asian ideograph */ {"\x3E", 0, 0x7AB5}, /* East Asian ideograph */ {"\x3F", 0, 0x7ABB}, /* East Asian ideograph */ {"\x43", 0, 0x7ABF}, /* East Asian ideograph */ {"\x49", 0, 0x7ACD}, /* East Asian ideograph */ {"\x4B", 0, 0x7ACF}, /* East Asian ideograph */ {"\x4F", 0, 0x7AD1}, /* East Asian ideograph */ {"\x51", 0, 0x7AD3}, /* East Asian ideograph */ {"\x52", 0, 0x7AD4}, /* East Asian ideograph */ {"\x54", 0, 0x7AD5}, /* East Asian ideograph */ {"\x55", 0, 0x7ADA}, /* East Asian ideograph */ {"\x5A", 0, 0x7AE1}, /* East Asian ideograph */ {"\x5E", 0, 0x7AE6}, /* East Asian ideograph */ {"\x66", 0, 0x7AEB}, /* East Asian ideograph */ {"\x6B", 0, 0x7AF0}, /* East Asian ideograph */ {"\x76", 0, 0x7AF5}, /* East Asian ideograph */ {"\x7C", 0, 0x7AFE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page155 = { marc8_31page155_flat, 0 }; /* PAGE 154 */ struct yaz_iconv_trie_flat marc8_31page154_flat[] = { {"\x22", 0, 0x7A2C}, /* East Asian ideograph */ {"\x39", 0, 0x7A48}, /* East Asian ideograph */ {"\x3D", 0, 0x7A4B}, /* East Asian ideograph */ {"\x3E", 0, 0x7A47}, /* East Asian ideograph */ {"\x3F", 0, 0x7A44}, /* East Asian ideograph */ {"\x40", 0, 0x7A5C}, /* East Asian ideograph */ {"\x4D", 0, 0x7A5F}, /* East Asian ideograph */ {"\x4F", 0, 0x7A60}, /* East Asian ideograph */ {"\x57", 0, 0x7A6E}, /* East Asian ideograph */ {"\x5F", 0, 0x7A70}, /* East Asian ideograph */ {"\x66", 0, 0x7A75}, /* East Asian ideograph */ {"\x69", 0, 0x7A78}, /* East Asian ideograph */ {"\x6B", 0, 0x7A80}, /* East Asian ideograph */ {"\x70", 0, 0x7A85}, /* East Asian ideograph */ {"\x75", 0, 0x7A86}, /* East Asian ideograph */ {"\x78", 0, 0x7A8A}, /* East Asian ideograph */ {"\x7A", 0, 0x7A94}, /* East Asian ideograph */ {"\x7E", 0, 0x68A5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page154 = { marc8_31page154_flat, 0 }; /* PAGE 153 */ struct yaz_iconv_trie_flat marc8_31page153_flat[] = { {"\x22", 0, 0x79B8}, /* East Asian ideograph */ {"\x23", 0, 0x79BA}, /* East Asian ideograph */ {"\x25", 0, 0x79BC}, /* East Asian ideograph */ {"\x28", 0, 0x79C6}, /* East Asian ideograph */ {"\x2A", 0, 0x79C8}, /* East Asian ideograph */ {"\x2D", 0, 0x79D4}, /* East Asian ideograph */ {"\x2E", 0, 0x79D5}, /* East Asian ideograph */ {"\x32", 0, 0x79D6}, /* East Asian ideograph */ {"\x3D", 0, 0x79EC}, /* East Asian ideograph */ {"\x3E", 0, 0x79EB}, /* East Asian ideograph (variant of EACC 4C683E) */ {"\x42", 0, 0x79E1}, /* East Asian ideograph */ {"\x44", 0, 0x79DD}, /* East Asian ideograph */ {"\x45", 0, 0x79ED}, /* East Asian ideograph */ {"\x48", 0, 0x79F8}, /* East Asian ideograph */ {"\x4F", 0, 0x7A02}, /* East Asian ideograph */ {"\x50", 0, 0x7A0A}, /* East Asian ideograph */ {"\x54", 0, 0x7A09}, /* East Asian ideograph */ {"\x5C", 0, 0x7A03}, /* East Asian ideograph */ {"\x61", 0, 0x7A0C}, /* East Asian ideograph */ {"\x6B", 0, 0x7A11}, /* East Asian ideograph */ {"\x6C", 0, 0x7A18}, /* East Asian ideograph */ {"\x6F", 0, 0x7A19}, /* East Asian ideograph (variant of EACC 2E686F) */ {"\x71", 0, 0x7A1E}, /* East Asian ideograph */ {"\x76", 0, 0x7A17}, /* East Asian ideograph */ {"\x7E", 0, 0x7A2D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page153 = { marc8_31page153_flat, 0 }; /* PAGE 152 */ struct yaz_iconv_trie_flat marc8_31page152_flat[] = { {"\x21", 0, 0x7951}, /* East Asian ideograph */ {"\x23", 0, 0x7954}, /* East Asian ideograph */ {"\x2A", 0, 0x7967}, /* East Asian ideograph */ {"\x2D", 0, 0x796B}, /* East Asian ideograph */ {"\x30", 0, 0x7972}, /* East Asian ideograph */ {"\x3E", 0, 0x797C}, /* East Asian ideograph */ {"\x4A", 0, 0x7998}, /* East Asian ideograph */ {"\x4B", 0, 0x798A}, /* East Asian ideograph */ {"\x4D", 0, 0x7999}, /* East Asian ideograph */ {"\x4E", 0, 0x7995}, /* East Asian ideograph */ {"\x4F", 0, 0x798B}, /* East Asian ideograph */ {"\x50", 0, 0x7996}, /* East Asian ideograph */ {"\x54", 0, 0x7994}, /* East Asian ideograph */ {"\x55", 0, 0x7993}, /* East Asian ideograph */ {"\x5C", 0, 0x799A}, /* East Asian ideograph */ {"\x5F", 0, 0x79A1}, /* East Asian ideograph */ {"\x60", 0, 0x799B}, /* East Asian ideograph */ {"\x61", 0, 0x79A3}, /* East Asian ideograph */ {"\x64", 0, 0x799D}, /* East Asian ideograph */ {"\x6E", 0, 0x79A9}, /* East Asian ideograph */ {"\x70", 0, 0x79AB}, /* East Asian ideograph */ {"\x71", 0, 0x79A8}, /* East Asian ideograph */ {"\x75", 0, 0x79B0}, /* East Asian ideograph */ {"\x7A", 0, 0x79B3}, /* East Asian ideograph */ {"\x7B", 0, 0x79B4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page152 = { marc8_31page152_flat, 0 }; /* PAGE 151 */ struct yaz_iconv_trie_flat marc8_31page151_flat[] = { {"\x21", 0, 0x78F9}, /* East Asian ideograph */ {"\x22", 0, 0x78FD}, /* East Asian ideograph */ {"\x27", 0, 0x78FE}, /* East Asian ideograph */ {"\x29", 0, 0x78FB}, /* East Asian ideograph */ {"\x2B", 0, 0x7904}, /* East Asian ideograph */ {"\x2E", 0, 0x7912}, /* East Asian ideograph */ {"\x32", 0, 0x790C}, /* East Asian ideograph */ {"\x34", 0, 0x7913}, /* East Asian ideograph */ {"\x35", 0, 0x7911}, /* East Asian ideograph */ {"\x43", 0, 0x791E}, /* East Asian ideograph */ {"\x46", 0, 0x7922}, /* East Asian ideograph */ {"\x4C", 0, 0x7924}, /* East Asian ideograph */ {"\x4D", 0, 0x7927}, /* East Asian ideograph */ {"\x50", 0, 0x7929}, /* East Asian ideograph */ {"\x55", 0, 0x7931}, /* East Asian ideograph */ {"\x5D", 0, 0x7934}, /* East Asian ideograph */ {"\x60", 0, 0x7936}, /* East Asian ideograph */ {"\x65", 0, 0x793D}, /* East Asian ideograph */ {"\x67", 0, 0x7942}, /* East Asian ideograph */ {"\x68", 0, 0x793F}, /* East Asian ideograph */ {"\x6A", 0, 0x794A}, /* East Asian ideograph */ {"\x6B", 0, 0x794D}, /* East Asian ideograph */ {"\x75", 0, 0x7946}, /* East Asian ideograph */ {"\x77", 0, 0x7958}, /* East Asian ideograph */ {"\x79", 0, 0x795B}, /* East Asian ideograph */ {"\x7A", 0, 0x795C}, /* East Asian ideograph */ {"\x7B", 0, 0x794F}, /* East Asian ideograph */ {"\x7C", 0, 0x7953}, /* East Asian ideograph */ {"\x7D", 0, 0x7953}, /* East Asian ideograph (unrelated variant of EACC 22667C) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page151 = { marc8_31page151_flat, 0 }; /* PAGE 150 */ struct yaz_iconv_trie_flat marc8_31page150_flat[] = { {"\x29", 0, 0x7893}, /* East Asian ideograph */ {"\x2C", 0, 0x7892}, /* East Asian ideograph */ {"\x2D", 0, 0x7896}, /* East Asian ideograph */ {"\x2F", 0, 0x78B2}, /* East Asian ideograph */ {"\x31", 0, 0x78A1}, /* East Asian ideograph */ {"\x32", 0, 0x78B6}, /* East Asian ideograph */ {"\x39", 0, 0x78B7}, /* East Asian ideograph */ {"\x3B", 0, 0x78A4}, /* East Asian ideograph */ {"\x3E", 0, 0x78B4}, /* East Asian ideograph */ {"\x40", 0, 0x78AD}, /* East Asian ideograph */ {"\x41", 0, 0x78A3}, /* East Asian ideograph */ {"\x43", 0, 0x789E}, /* East Asian ideograph */ {"\x44", 0, 0x78A8}, /* East Asian ideograph */ {"\x48", 0, 0x78AB}, /* East Asian ideograph */ {"\x4E", 0, 0x78BB}, /* East Asian ideograph */ {"\x55", 0, 0x78CC}, /* East Asian ideograph */ {"\x56", 0, 0x78C9}, /* East Asian ideograph */ {"\x58", 0, 0x78D1}, /* East Asian ideograph */ {"\x5A", 0, 0x78D8}, /* East Asian ideograph */ {"\x5E", 0, 0x78C8}, /* East Asian ideograph */ {"\x60", 0, 0x78D4}, /* East Asian ideograph */ {"\x68", 0, 0x78DF}, /* East Asian ideograph */ {"\x6A", 0, 0x78E7}, /* East Asian ideograph */ {"\x6E", 0, 0x78DB}, /* East Asian ideograph */ {"\x6F", 0, 0x78E1}, /* East Asian ideograph */ {"\x73", 0, 0x78E0}, /* East Asian ideograph */ {"\x76", 0, 0x78EE}, /* East Asian ideograph */ {"\x77", 0, 0x78E3}, /* East Asian ideograph */ {"\x79", 0, 0x78F2}, /* East Asian ideograph */ {"\x7E", 0, 0x7905}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page150 = { marc8_31page150_flat, 0 }; /* PAGE 149 */ struct yaz_iconv_trie_flat marc8_31page149_flat[] = { {"\x24", 0, 0x781B}, /* East Asian ideograph */ {"\x26", 0, 0x782C}, /* East Asian ideograph */ {"\x27", 0, 0x7823}, /* East Asian ideograph */ {"\x28", 0, 0x782B}, /* East Asian ideograph */ {"\x2A", 0, 0x7829}, /* East Asian ideograph */ {"\x2D", 0, 0x7822}, /* East Asian ideograph */ {"\x31", 0, 0x7835}, /* East Asian ideograph */ {"\x32", 0, 0x7833}, /* East Asian ideograph */ {"\x33", 0, 0x782E}, /* East Asian ideograph */ {"\x35", 0, 0x7820}, /* East Asian ideograph */ {"\x38", 0, 0x783D}, /* East Asian ideograph */ {"\x3B", 0, 0x781F}, /* East Asian ideograph */ {"\x3D", 0, 0x7831}, /* East Asian ideograph */ {"\x44", 0, 0x784D}, /* East Asian ideograph */ {"\x48", 0, 0x7848}, /* East Asian ideograph */ {"\x49", 0, 0x7853}, /* East Asian ideograph */ {"\x4A", 0, 0x7854}, /* East Asian ideograph */ {"\x4B", 0, 0x7845}, /* East Asian ideograph */ {"\x4C", 0, 0x7852}, /* East Asian ideograph */ {"\x4E", 0, 0x7850}, /* East Asian ideograph */ {"\x4F", 0, 0x7858}, /* East Asian ideograph */ {"\x50", 0, 0x7826}, /* East Asian ideograph */ {"\x52", 0, 0x7847}, /* East Asian ideograph */ {"\x56", 0, 0x784C}, /* East Asian ideograph */ {"\x5A", 0, 0x7868}, /* East Asian ideograph */ {"\x5B", 0, 0x786D}, /* East Asian ideograph */ {"\x60", 0, 0x7864}, /* East Asian ideograph */ {"\x61", 0, 0x785C}, /* East Asian ideograph */ {"\x64", 0, 0x7876}, /* East Asian ideograph */ {"\x66", 0, 0x786A}, /* East Asian ideograph */ {"\x69", 0, 0x7886}, /* East Asian ideograph */ {"\x6B", 0, 0x789A}, /* East Asian ideograph */ {"\x6C", 0, 0x787F}, /* East Asian ideograph */ {"\x6D", 0, 0x7887}, /* East Asian ideograph */ {"\x70", 0, 0x7894}, /* East Asian ideograph */ {"\x76", 0, 0x788F}, /* East Asian ideograph */ {"\x7E", 0, 0x7899}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page149 = { marc8_31page149_flat, 0 }; /* PAGE 148 */ struct yaz_iconv_trie_flat marc8_31page148_flat[] = { {"\x23", 0, 0x77B6}, /* East Asian ideograph */ {"\x29", 0, 0x77BE}, /* East Asian ideograph */ {"\x2B", 0, 0x77B9}, /* East Asian ideograph */ {"\x2C", 0, 0x77BC}, /* East Asian ideograph */ {"\x35", 0, 0x77CD}, /* East Asian ideograph */ {"\x3A", 0, 0x77D1}, /* East Asian ideograph */ {"\x45", 0, 0x77DE}, /* East Asian ideograph */ {"\x46", 0, 0x77DF}, /* East Asian ideograph */ {"\x4F", 0, 0x77E7}, /* East Asian ideograph */ {"\x52", 0, 0x77E6}, /* East Asian ideograph */ {"\x55", 0, 0x77EC}, /* East Asian ideograph */ {"\x59", 0, 0x77F0}, /* East Asian ideograph */ {"\x5A", 0, 0x77F1}, /* East Asian ideograph */ {"\x5C", 0, 0x77F4}, /* East Asian ideograph */ {"\x60", 0, 0x77FC}, /* East Asian ideograph */ {"\x67", 0, 0x77F8}, /* East Asian ideograph */ {"\x68", 0, 0x77FB}, /* East Asian ideograph */ {"\x70", 0, 0x7809}, /* East Asian ideograph */ {"\x71", 0, 0x7806}, /* East Asian ideograph */ {"\x73", 0, 0x7819}, /* East Asian ideograph */ {"\x74", 0, 0x7811}, /* East Asian ideograph */ {"\x78", 0, 0x7812}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page148 = { marc8_31page148_flat, 0 }; /* PAGE 147 */ struct yaz_iconv_trie_flat marc8_31page147_flat[] = { {"\x22", 0, 0x7725}, /* East Asian ideograph */ {"\x25", 0, 0x7735}, /* East Asian ideograph */ {"\x26", 0, 0x7734}, /* East Asian ideograph */ {"\x2D", 0, 0x7747}, /* East Asian ideograph */ {"\x31", 0, 0x7745}, /* East Asian ideograph */ {"\x32", 0, 0x774D}, /* East Asian ideograph */ {"\x33", 0, 0x774A}, /* East Asian ideograph */ {"\x35", 0, 0x7743}, /* East Asian ideograph */ {"\x37", 0, 0x774E}, /* East Asian ideograph */ {"\x3A", 0, 0x775F}, /* East Asian ideograph */ {"\x3D", 0, 0x7760}, /* East Asian ideograph */ {"\x3E", 0, 0x7752}, /* East Asian ideograph */ {"\x42", 0, 0x7758}, /* East Asian ideograph */ {"\x44", 0, 0x7756}, /* East Asian ideograph */ {"\x45", 0, 0x775A}, /* East Asian ideograph */ {"\x4F", 0, 0x7762}, /* East Asian ideograph */ {"\x52", 0, 0x7780}, /* East Asian ideograph */ {"\x56", 0, 0x776F}, /* East Asian ideograph */ {"\x5D", 0, 0x777E}, /* East Asian ideograph */ {"\x5F", 0, 0x7785}, /* East Asian ideograph */ {"\x60", 0, 0x777A}, /* East Asian ideograph */ {"\x66", 0, 0x778B}, /* East Asian ideograph (variant of EACC 4C6266) */ {"\x6A", 0, 0x778D}, /* East Asian ideograph */ {"\x72", 0, 0x7798}, /* East Asian ideograph */ {"\x73", 0, 0x7796}, /* East Asian ideograph */ {"\x75", 0, 0x77A2}, /* East Asian ideograph */ {"\x76", 0, 0x7799}, /* East Asian ideograph */ {"\x7A", 0, 0x77B5}, /* East Asian ideograph */ {"\x7D", 0, 0x77B7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page147 = { marc8_31page147_flat, 0 }; /* PAGE 146 */ struct yaz_iconv_trie_flat marc8_31page146_flat[] = { {"\x23", 0, 0x76CB}, /* East Asian ideograph */ {"\x26", 0, 0x76CC}, /* East Asian ideograph */ {"\x3B", 0, 0x76E6}, /* East Asian ideograph */ {"\x3C", 0, 0x76E9}, /* East Asian ideograph */ {"\x40", 0, 0x76EC}, /* East Asian ideograph */ {"\x44", 0, 0x76ED}, /* East Asian ideograph */ {"\x48", 0, 0x76F1}, /* East Asian ideograph */ {"\x4B", 0, 0x7704}, /* East Asian ideograph */ {"\x4F", 0, 0x7708}, /* East Asian ideograph */ {"\x50", 0, 0x7707}, /* East Asian ideograph */ {"\x53", 0, 0x76F7}, /* East Asian ideograph */ {"\x54", 0, 0x770A}, /* East Asian ideograph */ {"\x59", 0, 0x76FB}, /* East Asian ideograph */ {"\x5E", 0, 0x772B}, /* East Asian ideograph */ {"\x60", 0, 0x770E}, /* East Asian ideograph */ {"\x62", 0, 0x771B}, /* East Asian ideograph */ {"\x63", 0, 0x7724}, /* East Asian ideograph */ {"\x6C", 0, 0x7722}, /* East Asian ideograph */ {"\x6D", 0, 0x771A}, /* East Asian ideograph */ {"\x6F", 0, 0x7721}, /* East Asian ideograph */ {"\x74", 0, 0x7740}, /* East Asian ideograph */ {"\x75", 0, 0x7739}, /* East Asian ideograph */ {"\x76", 0, 0x772F}, /* East Asian ideograph */ {"\x77", 0, 0x7731}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page146 = { marc8_31page146_flat, 0 }; /* PAGE 145 */ struct yaz_iconv_trie_flat marc8_31page145_flat[] = { {"\x22", 0, 0x7664}, /* East Asian ideograph */ {"\x24", 0, 0x7659}, /* East Asian ideograph */ {"\x2B", 0, 0x765F}, /* East Asian ideograph */ {"\x32", 0, 0x7667}, /* East Asian ideograph */ {"\x35", 0, 0x766A}, /* East Asian ideograph */ {"\x37", 0, 0x766D}, /* East Asian ideograph */ {"\x38", 0, 0x766F}, /* East Asian ideograph */ {"\x3A", 0, 0x7670}, /* East Asian ideograph */ {"\x40", 0, 0x7676}, /* East Asian ideograph */ {"\x41", 0, 0x7677}, /* East Asian ideograph */ {"\x48", 0, 0x7680}, /* East Asian ideograph */ {"\x4A", 0, 0x768B}, /* East Asian ideograph */ {"\x52", 0, 0x7695}, /* East Asian ideograph */ {"\x55", 0, 0x656B}, /* East Asian ideograph */ {"\x59", 0, 0x7699}, /* East Asian ideograph */ {"\x5D", 0, 0x769C}, /* East Asian ideograph */ {"\x5F", 0, 0x769D}, /* East Asian ideograph */ {"\x65", 0, 0x76A4}, /* East Asian ideograph */ {"\x66", 0, 0x76A5}, /* East Asian ideograph */ {"\x67", 0, 0x76A6}, /* East Asian ideograph */ {"\x6A", 0, 0x76AA}, /* East Asian ideograph */ {"\x6D", 0, 0x76AD}, /* East Asian ideograph */ {"\x74", 0, 0x76B8}, /* East Asian ideograph */ {"\x77", 0, 0x76BD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page145 = { marc8_31page145_flat, 0 }; /* PAGE 144 */ struct yaz_iconv_trie_flat marc8_31page144_flat[] = { {"\x21", 0, 0x75F9}, /* East Asian ideograph */ {"\x22", 0, 0x75FC}, /* East Asian ideograph */ {"\x29", 0, 0x7616}, /* East Asian ideograph */ {"\x2C", 0, 0x7608}, /* East Asian ideograph */ {"\x2D", 0, 0x7615}, /* East Asian ideograph */ {"\x2E", 0, 0x760C}, /* East Asian ideograph */ {"\x2F", 0, 0x760F}, /* East Asian ideograph */ {"\x3B", 0, 0x7610}, /* East Asian ideograph */ {"\x3C", 0, 0x760A}, /* East Asian ideograph */ {"\x3E", 0, 0x7625}, /* East Asian ideograph */ {"\x3F", 0, 0x761A}, /* East Asian ideograph */ {"\x40", 0, 0x761B}, /* East Asian ideograph */ {"\x47", 0, 0x7619}, /* East Asian ideograph */ {"\x48", 0, 0x761E}, /* East Asian ideograph */ {"\x4C", 0, 0x761D}, /* East Asian ideograph */ {"\x50", 0, 0x7622}, /* East Asian ideograph */ {"\x51", 0, 0x762F}, /* East Asian ideograph */ {"\x54", 0, 0x762D}, /* East Asian ideograph */ {"\x5C", 0, 0x7633}, /* East Asian ideograph */ {"\x5E", 0, 0x763B}, /* East Asian ideograph */ {"\x5F", 0, 0x7630}, /* East Asian ideograph */ {"\x60", 0, 0x763C}, /* East Asian ideograph */ {"\x62", 0, 0x7635}, /* East Asian ideograph */ {"\x67", 0, 0x7648}, /* East Asian ideograph */ {"\x68", 0, 0x764E}, /* East Asian ideograph */ {"\x69", 0, 0x7647}, /* East Asian ideograph */ {"\x6A", 0, 0x7643}, /* East Asian ideograph */ {"\x6E", 0, 0x764D}, /* East Asian ideograph */ {"\x6F", 0, 0x7649}, /* East Asian ideograph */ {"\x75", 0, 0x7654}, /* East Asian ideograph */ {"\x7A", 0, 0x765C}, /* East Asian ideograph */ {"\x7B", 0, 0x7657}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page144 = { marc8_31page144_flat, 0 }; /* PAGE 143 */ struct yaz_iconv_trie_flat marc8_31page143_flat[] = { {"\x25", 0, 0x7583}, /* East Asian ideograph */ {"\x2C", 0, 0x7590}, /* East Asian ideograph */ {"\x2D", 0, 0x7592}, /* East Asian ideograph */ {"\x2E", 0, 0x7594}, /* East Asian ideograph */ {"\x31", 0, 0x7595}, /* East Asian ideograph */ {"\x35", 0, 0x7598}, /* East Asian ideograph */ {"\x37", 0, 0x75A2}, /* East Asian ideograph */ {"\x3B", 0, 0x75A3}, /* East Asian ideograph */ {"\x3E", 0, 0x75BA}, /* East Asian ideograph */ {"\x43", 0, 0x75B0}, /* East Asian ideograph */ {"\x44", 0, 0x75C3}, /* East Asian ideograph */ {"\x46", 0, 0x75BF}, /* East Asian ideograph */ {"\x47", 0, 0x75B4}, /* East Asian ideograph */ {"\x4A", 0, 0x75C2}, /* East Asian ideograph */ {"\x4E", 0, 0x75C1}, /* East Asian ideograph */ {"\x50", 0, 0x75B1}, /* East Asian ideograph */ {"\x51", 0, 0x75C4}, /* East Asian ideograph */ {"\x58", 0, 0x75CD}, /* East Asian ideograph */ {"\x5C", 0, 0x75CF}, /* East Asian ideograph */ {"\x5E", 0, 0x75CC}, /* East Asian ideograph */ {"\x5F", 0, 0x75D0}, /* East Asian ideograph */ {"\x63", 0, 0x75E7}, /* East Asian ideograph */ {"\x66", 0, 0x75E1}, /* East Asian ideograph */ {"\x67", 0, 0x75E6}, /* East Asian ideograph */ {"\x71", 0, 0x75E4}, /* East Asian ideograph */ {"\x72", 0, 0x75E0}, /* East Asian ideograph */ {"\x73", 0, 0x75D7}, /* East Asian ideograph */ {"\x7A", 0, 0x7602}, /* East Asian ideograph */ {"\x7E", 0, 0x7603}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page143 = { marc8_31page143_flat, 0 }; /* PAGE 142 */ struct yaz_iconv_trie_flat marc8_31page142_flat[] = { {"\x25", 0, 0x750E}, /* East Asian ideograph */ {"\x28", 0, 0x750D}, /* East Asian ideograph */ {"\x2C", 0, 0x7511}, /* East Asian ideograph */ {"\x2D", 0, 0x750F}, /* East Asian ideograph */ {"\x32", 0, 0x7512}, /* East Asian ideograph */ {"\x33", 0, 0x7513}, /* East Asian ideograph */ {"\x39", 0, 0x7517}, /* East Asian ideograph */ {"\x42", 0, 0x7521}, /* East Asian ideograph */ {"\x44", 0, 0x7524}, /* East Asian ideograph */ {"\x49", 0, 0x752F}, /* East Asian ideograph */ {"\x4D", 0, 0x753A}, /* East Asian ideograph */ {"\x4F", 0, 0x753F}, /* East Asian ideograph */ {"\x51", 0, 0x7540}, /* East Asian ideograph */ {"\x52", 0, 0x753E}, /* East Asian ideograph */ {"\x55", 0, 0x754A}, /* East Asian ideograph */ {"\x57", 0, 0x754E}, /* East Asian ideograph */ {"\x58", 0, 0x7547}, /* East Asian ideograph */ {"\x59", 0, 0x754B}, /* East Asian ideograph */ {"\x5A", 0, 0x7548}, /* East Asian ideograph */ {"\x5F", 0, 0x755F}, /* East Asian ideograph */ {"\x60", 0, 0x755B}, /* East Asian ideograph */ {"\x62", 0, 0x7564}, /* East Asian ideograph */ {"\x67", 0, 0x7563}, /* East Asian ideograph */ {"\x69", 0, 0x756F}, /* East Asian ideograph */ {"\x6B", 0, 0x756C}, /* East Asian ideograph */ {"\x6D", 0, 0x7579}, /* East Asian ideograph */ {"\x6E", 0, 0x757A}, /* East Asian ideograph */ {"\x71", 0, 0x7577}, /* East Asian ideograph */ {"\x75", 0, 0x7571}, /* East Asian ideograph */ {"\x79", 0, 0x757D}, /* East Asian ideograph */ {"\x7E", 0, 0x757F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page142 = { marc8_31page142_flat, 0 }; /* PAGE 141 */ struct yaz_iconv_trie_flat marc8_31page141_flat[] = { {"\x25", 0, 0x74BF}, /* East Asian ideograph */ {"\x28", 0, 0x74B5}, /* East Asian ideograph */ {"\x29", 0, 0x74BA}, /* East Asian ideograph */ {"\x30", 0, 0x74C8}, /* East Asian ideograph */ {"\x31", 0, 0x74C5}, /* East Asian ideograph */ {"\x32", 0, 0x74CC}, /* East Asian ideograph */ {"\x38", 0, 0x74D6}, /* East Asian ideograph */ {"\x3A", 0, 0x74D4}, /* East Asian ideograph */ {"\x3D", 0, 0x74D8}, /* East Asian ideograph */ {"\x40", 0, 0x74DA}, /* East Asian ideograph */ {"\x41", 0, 0x74DB}, /* East Asian ideograph */ {"\x47", 0, 0x74DE}, /* East Asian ideograph */ {"\x50", 0, 0x74E4}, /* East Asian ideograph */ {"\x52", 0, 0x74E7}, /* East Asian ideograph */ {"\x54", 0, 0x74E9}, /* East Asian ideograph */ {"\x58", 0, 0x74F1}, /* East Asian ideograph */ {"\x5A", 0, 0x74F0}, /* East Asian ideograph */ {"\x5C", 0, 0x74EE}, /* East Asian ideograph */ {"\x61", 0, 0x74F4}, /* East Asian ideograph */ {"\x63", 0, 0x74F8}, /* East Asian ideograph */ {"\x66", 0, 0x74FB}, /* East Asian ideograph */ {"\x67", 0, 0x74FF}, /* East Asian ideograph */ {"\x71", 0, 0x7505}, /* East Asian ideograph */ {"\x77", 0, 0x7503}, /* East Asian ideograph */ {"\x7D", 0, 0x7507}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page141 = { marc8_31page141_flat, 0 }; /* PAGE 140 */ struct yaz_iconv_trie_flat marc8_31page140_flat[] = { {"\x21", 0, 0x7489}, /* East Asian ideograph */ {"\x22", 0, 0x747C}, /* East Asian ideograph */ {"\x27", 0, 0x7482}, /* East Asian ideograph */ {"\x28", 0, 0x747E}, /* East Asian ideograph */ {"\x2A", 0, 0x748A}, /* East Asian ideograph */ {"\x2D", 0, 0x7486}, /* East Asian ideograph */ {"\x30", 0, 0x747A}, /* East Asian ideograph */ {"\x38", 0, 0x7480}, /* East Asian ideograph */ {"\x3C", 0, 0x7481}, /* East Asian ideograph */ {"\x3E", 0, 0x747D}, /* East Asian ideograph */ {"\x3F", 0, 0x7485}, /* East Asian ideograph */ {"\x40", 0, 0x7497}, /* East Asian ideograph */ {"\x43", 0, 0x7498}, /* East Asian ideograph */ {"\x45", 0, 0x749A}, /* East Asian ideograph */ {"\x4D", 0, 0x74A4}, /* East Asian ideograph */ {"\x54", 0, 0x749F}, /* East Asian ideograph */ {"\x55", 0, 0x749D}, /* East Asian ideograph */ {"\x56", 0, 0x748D}, /* East Asian ideograph */ {"\x57", 0, 0x749E}, /* East Asian ideograph */ {"\x59", 0, 0x74A0}, /* East Asian ideograph */ {"\x5D", 0, 0x74A1}, /* East Asian ideograph */ {"\x60", 0, 0x74B2}, /* East Asian ideograph */ {"\x61", 0, 0x74B1}, /* East Asian ideograph */ {"\x66", 0, 0x74B4}, /* East Asian ideograph */ {"\x67", 0, 0x74AB}, /* East Asian ideograph */ {"\x69", 0, 0x74AA}, /* East Asian ideograph */ {"\x6A", 0, 0x7490}, /* East Asian ideograph */ {"\x6C", 0, 0x74A5}, /* East Asian ideograph */ {"\x6E", 0, 0x74A8}, /* East Asian ideograph */ {"\x76", 0, 0x74B8}, /* East Asian ideograph */ {"\x7A", 0, 0x74C0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page140 = { marc8_31page140_flat, 0 }; /* PAGE 139 */ struct yaz_iconv_trie_flat marc8_31page139_flat[] = { {"\x21", 0, 0x7428}, /* East Asian ideograph */ {"\x23", 0, 0x7429}, /* East Asian ideograph */ {"\x28", 0, 0x7420}, /* East Asian ideograph */ {"\x2A", 0, 0x741B}, /* East Asian ideograph */ {"\x2B", 0, 0x7424}, /* East Asian ideograph */ {"\x2C", 0, 0x7432}, /* East Asian ideograph */ {"\x2D", 0, 0x742D}, /* East Asian ideograph */ {"\x30", 0, 0x7415}, /* East Asian ideograph */ {"\x32", 0, 0x743B}, /* East Asian ideograph */ {"\x36", 0, 0x7444}, /* East Asian ideograph */ {"\x40", 0, 0x7447}, /* East Asian ideograph */ {"\x43", 0, 0x7458}, /* East Asian ideograph */ {"\x45", 0, 0x7442}, /* East Asian ideograph */ {"\x47", 0, 0x744B}, /* East Asian ideograph */ {"\x4A", 0, 0x744A}, /* East Asian ideograph */ {"\x4F", 0, 0x7452}, /* East Asian ideograph */ {"\x55", 0, 0x7457}, /* East Asian ideograph */ {"\x56", 0, 0x7451}, /* East Asian ideograph */ {"\x5A", 0, 0x745D}, /* East Asian ideograph */ {"\x5B", 0, 0x7454}, /* East Asian ideograph */ {"\x5D", 0, 0x7440}, /* East Asian ideograph */ {"\x60", 0, 0x746D}, /* East Asian ideograph */ {"\x61", 0, 0x7462}, /* East Asian ideograph */ {"\x62", 0, 0x7473}, /* East Asian ideograph */ {"\x68", 0, 0x7474}, /* East Asian ideograph */ {"\x69", 0, 0x746E}, /* East Asian ideograph */ {"\x6A", 0, 0x7471}, /* East Asian ideograph */ {"\x6B", 0, 0x7468}, /* East Asian ideograph */ {"\x78", 0, 0x7460}, /* East Asian ideograph */ {"\x79", 0, 0x7472}, /* East Asian ideograph */ {"\x7A", 0, 0x7484}, /* East Asian ideograph */ {"\x7B", 0, 0x7487}, /* East Asian ideograph */ {"\x7E", 0, 0x7488}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page139 = { marc8_31page139_flat, 0 }; /* PAGE 138 */ struct yaz_iconv_trie_flat marc8_31page138_flat[] = { {"\x21", 0, 0x73D3}, /* East Asian ideograph */ {"\x27", 0, 0x73EA}, /* East Asian ideograph */ {"\x28", 0, 0x73E5}, /* East Asian ideograph */ {"\x2A", 0, 0x73D9}, /* East Asian ideograph */ {"\x2B", 0, 0x73EF}, /* East Asian ideograph */ {"\x2F", 0, 0x73D4}, /* East Asian ideograph */ {"\x30", 0, 0x73DB}, /* East Asian ideograph */ {"\x32", 0, 0x73D6}, /* East Asian ideograph */ {"\x35", 0, 0x73BC}, /* East Asian ideograph */ {"\x36", 0, 0x73E7}, /* East Asian ideograph */ {"\x38", 0, 0x73E3}, /* East Asian ideograph */ {"\x3A", 0, 0x73DE}, /* East Asian ideograph */ {"\x3C", 0, 0x73E6}, /* East Asian ideograph */ {"\x3F", 0, 0x73E9}, /* East Asian ideograph */ {"\x45", 0, 0x73F6}, /* East Asian ideograph */ {"\x47", 0, 0x73FA}, /* East Asian ideograph */ {"\x4A", 0, 0x73F8}, /* East Asian ideograph */ {"\x54", 0, 0x73F5}, /* East Asian ideograph */ {"\x5A", 0, 0x73FD}, /* East Asian ideograph */ {"\x5C", 0, 0x7407}, /* East Asian ideograph */ {"\x5E", 0, 0x7412}, /* East Asian ideograph */ {"\x63", 0, 0x743C}, /* East Asian ideograph */ {"\x66", 0, 0x742E}, /* East Asian ideograph */ {"\x67", 0, 0x742F}, /* East Asian ideograph */ {"\x69", 0, 0x7414}, /* East Asian ideograph */ {"\x6A", 0, 0x742C}, /* East Asian ideograph */ {"\x6C", 0, 0x7430}, /* East Asian ideograph */ {"\x6E", 0, 0x742B}, /* East Asian ideograph */ {"\x70", 0, 0x73F7}, /* East Asian ideograph */ {"\x71", 0, 0x741A}, /* East Asian ideograph */ {"\x78", 0, 0x7416}, /* East Asian ideograph */ {"\x7A", 0, 0x7426}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page138 = { marc8_31page138_flat, 0 }; /* PAGE 137 */ struct yaz_iconv_trie_flat marc8_31page137_flat[] = { {"\x21", 0, 0x734B}, /* East Asian ideograph */ {"\x25", 0, 0x7367}, /* East Asian ideograph */ {"\x29", 0, 0x736C}, /* East Asian ideograph */ {"\x2B", 0, 0x736B}, /* East Asian ideograph */ {"\x2F", 0, 0x736F}, /* East Asian ideograph */ {"\x36", 0, 0x737C}, /* East Asian ideograph */ {"\x38", 0, 0x737E}, /* East Asian ideograph */ {"\x3B", 0, 0x7381}, /* East Asian ideograph */ {"\x3F", 0, 0x7388}, /* East Asian ideograph */ {"\x42", 0, 0x738E}, /* East Asian ideograph */ {"\x46", 0, 0x7395}, /* East Asian ideograph */ {"\x47", 0, 0x7392}, /* East Asian ideograph */ {"\x48", 0, 0x7397}, /* East Asian ideograph */ {"\x4C", 0, 0x7393}, /* East Asian ideograph */ {"\x4D", 0, 0x7394}, /* East Asian ideograph */ {"\x51", 0, 0x739E}, /* East Asian ideograph */ {"\x52", 0, 0x73A6}, /* East Asian ideograph */ {"\x5D", 0, 0x73A5}, /* East Asian ideograph */ {"\x62", 0, 0x73A2}, /* East Asian ideograph */ {"\x63", 0, 0x73A0}, /* East Asian ideograph */ {"\x67", 0, 0x73B6}, /* East Asian ideograph */ {"\x68", 0, 0x73CF}, /* East Asian ideograph */ {"\x6A", 0, 0x73C2}, /* East Asian ideograph */ {"\x6B", 0, 0x73D0}, /* East Asian ideograph */ {"\x6F", 0, 0x73BF}, /* East Asian ideograph */ {"\x70", 0, 0x73C8}, /* East Asian ideograph */ {"\x7D", 0, 0x73CC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page137 = { marc8_31page137_flat, 0 }; /* PAGE 136 */ struct yaz_iconv_trie_flat marc8_31page136_flat[] = { {"\x24", 0, 0x72F4}, /* East Asian ideograph */ {"\x25", 0, 0x72FE}, /* East Asian ideograph */ {"\x29", 0, 0x7302}, /* East Asian ideograph */ {"\x2C", 0, 0x72FB}, /* East Asian ideograph */ {"\x2D", 0, 0x7301}, /* East Asian ideograph */ {"\x2E", 0, 0x72F3}, /* East Asian ideograph */ {"\x31", 0, 0x731D}, /* East Asian ideograph */ {"\x35", 0, 0x730B}, /* East Asian ideograph */ {"\x36", 0, 0x7317}, /* East Asian ideograph */ {"\x3B", 0, 0x7307}, /* East Asian ideograph */ {"\x3E", 0, 0x7318}, /* East Asian ideograph */ {"\x42", 0, 0x731E}, /* East Asian ideograph */ {"\x46", 0, 0x7331}, /* East Asian ideograph */ {"\x49", 0, 0x7338}, /* East Asian ideograph */ {"\x4A", 0, 0x7322}, /* East Asian ideograph */ {"\x4C", 0, 0x7332}, /* East Asian ideograph */ {"\x4D", 0, 0x732C}, /* East Asian ideograph */ {"\x4E", 0, 0x7327}, /* East Asian ideograph */ {"\x4F", 0, 0x732B}, /* East Asian ideograph */ {"\x52", 0, 0x732F}, /* East Asian ideograph */ {"\x55", 0, 0x7328}, /* East Asian ideograph */ {"\x5A", 0, 0x7347}, /* East Asian ideograph */ {"\x5B", 0, 0x7348}, /* East Asian ideograph */ {"\x5C", 0, 0x7349}, /* East Asian ideograph */ {"\x5F", 0, 0x733B}, /* East Asian ideograph */ {"\x62", 0, 0x733A}, /* East Asian ideograph */ {"\x65", 0, 0x7340}, /* East Asian ideograph */ {"\x68", 0, 0x734D}, /* East Asian ideograph */ {"\x6B", 0, 0x7352}, /* East Asian ideograph */ {"\x72", 0, 0x735E}, /* East Asian ideograph */ {"\x74", 0, 0x735D}, /* East Asian ideograph */ {"\x79", 0, 0x7360}, /* East Asian ideograph */ {"\x7B", 0, 0x7358}, /* East Asian ideograph */ {"\x7E", 0, 0x7362}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page136 = { marc8_31page136_flat, 0 }; /* PAGE 135 */ struct yaz_iconv_trie_flat marc8_31page135_flat[] = { {"\x22", 0, 0x728D}, /* East Asian ideograph */ {"\x28", 0, 0x728F}, /* East Asian ideograph */ {"\x48", 0, 0x72A8}, /* East Asian ideograph */ {"\x4C", 0, 0x72AB}, /* East Asian ideograph */ {"\x4E", 0, 0x72B0}, /* East Asian ideograph */ {"\x4F", 0, 0x72B4}, /* East Asian ideograph */ {"\x51", 0, 0x72C6}, /* East Asian ideograph */ {"\x52", 0, 0x72B5}, /* East Asian ideograph */ {"\x56", 0, 0x72BC}, /* East Asian ideograph */ {"\x58", 0, 0x72C3}, /* East Asian ideograph */ {"\x5B", 0, 0x72C1}, /* East Asian ideograph */ {"\x60", 0, 0x72D6}, /* East Asian ideograph */ {"\x64", 0, 0x72D2}, /* East Asian ideograph */ {"\x67", 0, 0x72C9}, /* East Asian ideograph */ {"\x6C", 0, 0x72CC}, /* East Asian ideograph */ {"\x6E", 0, 0x72DB}, /* East Asian ideograph */ {"\x6F", 0, 0x72CD}, /* East Asian ideograph */ {"\x73", 0, 0x72E8}, /* East Asian ideograph */ {"\x76", 0, 0x72EB}, /* East Asian ideograph */ {"\x79", 0, 0x72E5}, /* East Asian ideograph */ {"\x7E", 0, 0x72FA}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page135 = { marc8_31page135_flat, 0 }; /* PAGE 134 */ struct yaz_iconv_trie_flat marc8_31page134_flat[] = { {"\x21", 0, 0x721D}, /* East Asian ideograph */ {"\x29", 0, 0x7225}, /* East Asian ideograph */ {"\x2A", 0, 0x7226}, /* East Asian ideograph */ {"\x41", 0, 0x723F}, /* East Asian ideograph */ {"\x43", 0, 0x7241}, /* East Asian ideograph */ {"\x44", 0, 0x7242}, /* East Asian ideograph */ {"\x4F", 0, 0x7250}, /* East Asian ideograph */ {"\x51", 0, 0x724F}, /* East Asian ideograph */ {"\x52", 0, 0x7253}, /* East Asian ideograph */ {"\x53", 0, 0x7255}, /* East Asian ideograph */ {"\x56", 0, 0x725A}, /* East Asian ideograph */ {"\x59", 0, 0x7263}, /* East Asian ideograph */ {"\x61", 0, 0x7273}, /* East Asian ideograph */ {"\x63", 0, 0x726E}, /* East Asian ideograph */ {"\x66", 0, 0x7276}, /* East Asian ideograph */ {"\x68", 0, 0x7277}, /* East Asian ideograph */ {"\x6B", 0, 0x727E}, /* East Asian ideograph */ {"\x6D", 0, 0x727C}, /* East Asian ideograph */ {"\x71", 0, 0x727F}, /* East Asian ideograph */ {"\x74", 0, 0x7289}, /* East Asian ideograph */ {"\x7C", 0, 0x728B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page134 = { marc8_31page134_flat, 0 }; /* PAGE 133 */ struct yaz_iconv_trie_flat marc8_31page133_flat[] = { {"\x21", 0, 0x71DD}, /* East Asian ideograph */ {"\x22", 0, 0x71C0}, /* East Asian ideograph */ {"\x24", 0, 0x71C1}, /* East Asian ideograph */ {"\x26", 0, 0x71D4}, /* East Asian ideograph */ {"\x29", 0, 0x71CB}, /* East Asian ideograph */ {"\x2A", 0, 0x71DE}, /* East Asian ideograph */ {"\x32", 0, 0x71EB}, /* East Asian ideograph */ {"\x36", 0, 0x71E8}, /* East Asian ideograph */ {"\x3A", 0, 0x71F5}, /* East Asian ideograph */ {"\x3D", 0, 0x71F3}, /* East Asian ideograph */ {"\x3F", 0, 0x71E1}, /* East Asian ideograph */ {"\x47", 0, 0x71E0}, /* East Asian ideograph */ {"\x4B", 0, 0x720C}, /* East Asian ideograph */ {"\x4F", 0, 0x71FC}, /* East Asian ideograph */ {"\x56", 0, 0x71F9}, /* East Asian ideograph */ {"\x5B", 0, 0x720E}, /* East Asian ideograph */ {"\x5C", 0, 0x5911}, /* East Asian ideograph */ {"\x5E", 0, 0x720A}, /* East Asian ideograph */ {"\x60", 0, 0x7217}, /* East Asian ideograph */ {"\x61", 0, 0x7207}, /* East Asian ideograph */ {"\x66", 0, 0x7215}, /* East Asian ideograph */ {"\x69", 0, 0x7213}, /* East Asian ideograph */ {"\x6E", 0, 0x7218}, /* East Asian ideograph */ {"\x71", 0, 0x720B}, /* East Asian ideograph */ {"\x79", 0, 0x721A}, /* East Asian ideograph */ {"\x7D", 0, 0x721F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page133 = { marc8_31page133_flat, 0 }; /* PAGE 132 */ struct yaz_iconv_trie_flat marc8_31page132_flat[] = { {"\x23", 0, 0x7192}, /* East Asian ideograph */ {"\x2B", 0, 0x7180}, /* East Asian ideograph */ {"\x2C", 0, 0x7189}, /* East Asian ideograph */ {"\x32", 0, 0x7185}, /* East Asian ideograph */ {"\x33", 0, 0x7196}, /* East Asian ideograph */ {"\x36", 0, 0x717C}, /* East Asian ideograph */ {"\x39", 0, 0x7198}, /* East Asian ideograph */ {"\x3C", 0, 0x7197}, /* East Asian ideograph */ {"\x3E", 0, 0x71B5}, /* East Asian ideograph */ {"\x3F", 0, 0x71A9}, /* East Asian ideograph */ {"\x42", 0, 0x71A5}, /* East Asian ideograph */ {"\x46", 0, 0x719E}, /* East Asian ideograph */ {"\x47", 0, 0x71B2}, /* East Asian ideograph */ {"\x4A", 0, 0x719B}, /* East Asian ideograph */ {"\x4E", 0, 0x71AF}, /* East Asian ideograph */ {"\x51", 0, 0x71A4}, /* East Asian ideograph */ {"\x52", 0, 0x71A0}, /* East Asian ideograph */ {"\x55", 0, 0x719A}, /* East Asian ideograph */ {"\x57", 0, 0x71B3}, /* East Asian ideograph */ {"\x59", 0, 0x71B4}, /* East Asian ideograph */ {"\x67", 0, 0x71D1}, /* East Asian ideograph */ {"\x69", 0, 0x71C7}, /* East Asian ideograph */ {"\x6A", 0, 0x71B7}, /* East Asian ideograph */ {"\x6D", 0, 0x71CA}, /* East Asian ideograph */ {"\x6F", 0, 0x71CF}, /* East Asian ideograph */ {"\x70", 0, 0x71D6}, /* East Asian ideograph */ {"\x72", 0, 0x71BA}, /* East Asian ideograph */ {"\x75", 0, 0x71C2}, /* East Asian ideograph */ {"\x77", 0, 0x71C5}, /* East Asian ideograph */ {"\x7A", 0, 0x71BF}, /* East Asian ideograph */ {"\x7C", 0, 0x71B8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page132 = { marc8_31page132_flat, 0 }; /* PAGE 131 */ struct yaz_iconv_trie_flat marc8_31page131_flat[] = { {"\x27", 0, 0x7139}, /* East Asian ideograph */ {"\x28", 0, 0x7135}, /* East Asian ideograph */ {"\x2C", 0, 0x713B}, /* East Asian ideograph */ {"\x2E", 0, 0x711C}, /* East Asian ideograph */ {"\x32", 0, 0x713D}, /* East Asian ideograph */ {"\x35", 0, 0x712F}, /* East Asian ideograph */ {"\x3B", 0, 0x7129}, /* East Asian ideograph */ {"\x43", 0, 0x712E}, /* East Asian ideograph */ {"\x48", 0, 0x7177}, /* East Asian ideograph */ {"\x51", 0, 0x7146}, /* East Asian ideograph */ {"\x52", 0, 0x7152}, /* East Asian ideograph */ {"\x54", 0, 0x714F}, /* East Asian ideograph */ {"\x55", 0, 0x715D}, /* East Asian ideograph */ {"\x56", 0, 0x7141}, /* East Asian ideograph */ {"\x57", 0, 0x7160}, /* East Asian ideograph */ {"\x59", 0, 0x7175}, /* East Asian ideograph */ {"\x5A", 0, 0x7173}, /* East Asian ideograph */ {"\x5C", 0, 0x7143}, /* East Asian ideograph */ {"\x5D", 0, 0x715A}, /* East Asian ideograph */ {"\x5E", 0, 0x7176}, /* East Asian ideograph */ {"\x60", 0, 0x714B}, /* East Asian ideograph */ {"\x62", 0, 0x7147}, /* East Asian ideograph */ {"\x65", 0, 0x7168}, /* East Asian ideograph */ {"\x66", 0, 0x7171}, /* East Asian ideograph */ {"\x67", 0, 0x715F}, /* East Asian ideograph */ {"\x69", 0, 0x7150}, /* East Asian ideograph */ {"\x6B", 0, 0x7153}, /* East Asian ideograph */ {"\x70", 0, 0x7144}, /* East Asian ideograph */ {"\x76", 0, 0x7172}, /* East Asian ideograph */ {"\x78", 0, 0x7178}, /* East Asian ideograph */ {"\x7B", 0, 0x7187}, /* East Asian ideograph */ {"\x7C", 0, 0x717B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page131 = { marc8_31page131_flat, 0 }; /* PAGE 130 */ struct yaz_iconv_trie_flat marc8_31page130_flat[] = { {"\x22", 0, 0x70DD}, /* East Asian ideograph */ {"\x23", 0, 0x70E1}, /* East Asian ideograph */ {"\x26", 0, 0x70E3}, /* East Asian ideograph */ {"\x28", 0, 0x70E0}, /* East Asian ideograph */ {"\x2B", 0, 0x70D4}, /* East Asian ideograph */ {"\x2E", 0, 0x70D1}, /* East Asian ideograph */ {"\x38", 0, 0x70CB}, /* East Asian ideograph */ {"\x3A", 0, 0x70D0}, /* East Asian ideograph */ {"\x3B", 0, 0x70C7}, /* East Asian ideograph */ {"\x3C", 0, 0x70DA}, /* East Asian ideograph */ {"\x3D", 0, 0x70C6}, /* East Asian ideograph */ {"\x3F", 0, 0x70FA}, /* East Asian ideograph */ {"\x42", 0, 0x70F7}, /* East Asian ideograph */ {"\x44", 0, 0x7104}, /* East Asian ideograph */ {"\x48", 0, 0x70F3}, /* East Asian ideograph */ {"\x4A", 0, 0x7110}, /* East Asian ideograph */ {"\x4C", 0, 0x7103}, /* East Asian ideograph */ {"\x50", 0, 0x70F4}, /* East Asian ideograph */ {"\x55", 0, 0x7111}, /* East Asian ideograph */ {"\x56", 0, 0x7112}, /* East Asian ideograph */ {"\x5C", 0, 0x710C}, /* East Asian ideograph */ {"\x60", 0, 0x70F6}, /* East Asian ideograph */ {"\x66", 0, 0x7113}, /* East Asian ideograph */ {"\x67", 0, 0x70EF}, /* East Asian ideograph */ {"\x68", 0, 0x7100}, /* East Asian ideograph */ {"\x6C", 0, 0x711E}, /* East Asian ideograph */ {"\x6D", 0, 0x7134}, /* East Asian ideograph */ {"\x6E", 0, 0x7120}, /* East Asian ideograph */ {"\x6F", 0, 0x713F}, /* East Asian ideograph */ {"\x74", 0, 0x7131}, /* East Asian ideograph */ {"\x75", 0, 0x712D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page130 = { marc8_31page130_flat, 0 }; /* PAGE 129 */ struct yaz_iconv_trie_flat marc8_31page129_flat[] = { {"\x21", 0, 0x9E02}, /* East Asian ideograph */ {"\x25", 0, 0x7066}, /* East Asian ideograph */ {"\x27", 0, 0x7065}, /* East Asian ideograph */ {"\x28", 0, 0x7068}, /* East Asian ideograph */ {"\x29", 0, 0x7054}, /* East Asian ideograph */ {"\x39", 0, 0x7074}, /* East Asian ideograph */ {"\x3B", 0, 0x707A}, /* East Asian ideograph */ {"\x40", 0, 0x7093}, /* East Asian ideograph */ {"\x42", 0, 0x7086}, /* East Asian ideograph */ {"\x48", 0, 0x7096}, /* East Asian ideograph */ {"\x49", 0, 0x7084}, /* East Asian ideograph */ {"\x4A", 0, 0x7081}, /* East Asian ideograph */ {"\x56", 0, 0x7088}, /* East Asian ideograph */ {"\x57", 0, 0x7098}, /* East Asian ideograph */ {"\x59", 0, 0x708C}, /* East Asian ideograph */ {"\x5C", 0, 0x70B7}, /* East Asian ideograph */ {"\x62", 0, 0x70A1}, /* East Asian ideograph */ {"\x63", 0, 0x70A3}, /* East Asian ideograph */ {"\x68", 0, 0x7551}, /* East Asian ideograph */ {"\x6F", 0, 0x70A7}, /* East Asian ideograph */ {"\x70", 0, 0x79CC}, /* East Asian ideograph */ {"\x71", 0, 0x70B5}, /* East Asian ideograph */ {"\x72", 0, 0x70BF}, /* East Asian ideograph */ {"\x73", 0, 0x70A9}, /* East Asian ideograph */ {"\x78", 0, 0x70EA}, /* East Asian ideograph */ {"\x7B", 0, 0x70E5}, /* East Asian ideograph */ {"\x7C", 0, 0x70DC}, /* East Asian ideograph */ {"\x7D", 0, 0x70D3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page129 = { marc8_31page129_flat, 0 }; /* PAGE 128 */ struct yaz_iconv_trie_flat marc8_31page128_flat[] = { {"\x24", 0, 0x7020}, /* East Asian ideograph */ {"\x26", 0, 0x7027}, /* East Asian ideograph */ {"\x2B", 0, 0x701E}, /* East Asian ideograph (variant of EACC 4C4F2B) */ {"\x2F", 0, 0x702E}, /* East Asian ideograph */ {"\x31", 0, 0x702D}, /* East Asian ideograph */ {"\x35", 0, 0x7021}, /* East Asian ideograph */ {"\x39", 0, 0x7018}, /* East Asian ideograph */ {"\x3A", 0, 0x7023}, /* East Asian ideograph */ {"\x41", 0, 0x703C}, /* East Asian ideograph */ {"\x44", 0, 0x7035}, /* East Asian ideograph */ {"\x51", 0, 0x7034}, /* East Asian ideograph */ {"\x53", 0, 0x7039}, /* East Asian ideograph */ {"\x54", 0, 0x703A}, /* East Asian ideograph */ {"\x5D", 0, 0x7043}, /* East Asian ideograph */ {"\x61", 0, 0x7044}, /* East Asian ideograph */ {"\x67", 0, 0x7047}, /* East Asian ideograph */ {"\x69", 0, 0x7049}, /* East Asian ideograph */ {"\x6B", 0, 0x7055}, /* East Asian ideograph */ {"\x71", 0, 0x7052}, /* East Asian ideograph */ {"\x73", 0, 0x705C}, /* East Asian ideograph */ {"\x78", 0, 0x7059}, /* East Asian ideograph */ {"\x7B", 0, 0x705E}, /* East Asian ideograph */ {"\x7C", 0, 0x7061}, /* East Asian ideograph */ {"\x7D", 0, 0x705D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page128 = { marc8_31page128_flat, 0 }; /* PAGE 127 */ struct yaz_iconv_trie_flat marc8_31page127_flat[] = { {"\x21", 0, 0x6FAA}, /* East Asian ideograph */ {"\x25", 0, 0x6FBF}, /* East Asian ideograph */ {"\x26", 0, 0x6FC7}, /* East Asian ideograph */ {"\x2D", 0, 0x6FC9}, /* East Asian ideograph */ {"\x2E", 0, 0x6F5E}, /* East Asian ideograph */ {"\x2F", 0, 0x6FC8}, /* East Asian ideograph */ {"\x30", 0, 0x6FA0}, /* East Asian ideograph */ {"\x32", 0, 0x6FCA}, /* East Asian ideograph */ {"\x35", 0, 0x6FB4}, /* East Asian ideograph */ {"\x37", 0, 0x6FAF}, /* East Asian ideograph */ {"\x3C", 0, 0x6FA8}, /* East Asian ideograph */ {"\x40", 0, 0x6FA5}, /* East Asian ideograph */ {"\x41", 0, 0x6FB0}, /* East Asian ideograph */ {"\x42", 0, 0x6FAE}, /* East Asian ideograph */ {"\x43", 0, 0x6FD9}, /* East Asian ideograph */ {"\x44", 0, 0x6FDA}, /* East Asian ideograph */ {"\x50", 0, 0x6FD4}, /* East Asian ideograph */ {"\x56", 0, 0x6FE9}, /* East Asian ideograph */ {"\x57", 0, 0x6FF8}, /* East Asian ideograph */ {"\x5D", 0, 0x6FDE}, /* East Asian ideograph */ {"\x5E", 0, 0x6FEE}, /* East Asian ideograph */ {"\x62", 0, 0x6FF0}, /* East Asian ideograph */ {"\x66", 0, 0x7005}, /* East Asian ideograph */ {"\x67", 0, 0x700C}, /* East Asian ideograph */ {"\x6A", 0, 0x700D}, /* East Asian ideograph */ {"\x72", 0, 0x7026}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page127 = { marc8_31page127_flat, 0 }; /* PAGE 126 */ struct yaz_iconv_trie_flat marc8_31page126_flat[] = { {"\x23", 0, 0x6F7E}, /* East Asian ideograph */ {"\x24", 0, 0x6F9D}, /* East Asian ideograph */ {"\x27", 0, 0x6F87}, /* East Asian ideograph */ {"\x2B", 0, 0x6F6F}, /* East Asian ideograph */ {"\x2F", 0, 0x6F5A}, /* East Asian ideograph */ {"\x30", 0, 0x6F60}, /* East Asian ideograph */ {"\x35", 0, 0x6F90}, /* East Asian ideograph */ {"\x37", 0, 0x6F8D}, /* East Asian ideograph */ {"\x39", 0, 0x6F92}, /* East Asian ideograph */ {"\x3A", 0, 0x6F89}, /* East Asian ideograph */ {"\x3C", 0, 0x6F8C}, /* East Asian ideograph */ {"\x3D", 0, 0x6F62}, /* East Asian ideograph (variant of EACC 4C4D3D) */ {"\x44", 0, 0x6F0B}, /* East Asian ideograph */ {"\x4B", 0, 0x6F6C}, /* East Asian ideograph */ {"\x4D", 0, 0x6F8B}, /* East Asian ideograph */ {"\x58", 0, 0x6E88}, /* East Asian ideograph */ {"\x5A", 0, 0x6F55}, /* East Asian ideograph */ {"\x5F", 0, 0x6F72}, /* East Asian ideograph */ {"\x62", 0, 0x6F57}, /* East Asian ideograph */ {"\x63", 0, 0x6F5F}, /* East Asian ideograph */ {"\x68", 0, 0x6F5D}, /* East Asian ideograph */ {"\x73", 0, 0x6FB6}, /* East Asian ideograph */ {"\x74", 0, 0x6F9F}, /* East Asian ideograph */ {"\x79", 0, 0x6FA6}, /* East Asian ideograph */ {"\x7C", 0, 0x6FC6}, /* East Asian ideograph */ {"\x7D", 0, 0x6FBC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page126 = { marc8_31page126_flat, 0 }; /* PAGE 125 */ struct yaz_iconv_trie_flat marc8_31page125_flat[] = { {"\x21", 0, 0x6EC3}, /* East Asian ideograph */ {"\x24", 0, 0x6EB4}, /* East Asian ideograph */ {"\x26", 0, 0x6EB2}, /* East Asian ideograph */ {"\x29", 0, 0x6EB5}, /* East Asian ideograph */ {"\x2E", 0, 0x6EF8}, /* East Asian ideograph */ {"\x30", 0, 0x6F37}, /* East Asian ideograph */ {"\x34", 0, 0x6EFD}, /* East Asian ideograph */ {"\x35", 0, 0x6F09}, /* East Asian ideograph */ {"\x3C", 0, 0x6F3B}, /* East Asian ideograph */ {"\x3D", 0, 0x6F63}, /* East Asian ideograph */ {"\x3E", 0, 0x6F12}, /* East Asian ideograph */ {"\x3F", 0, 0x6F26}, /* East Asian ideograph */ {"\x41", 0, 0x6F1A}, /* East Asian ideograph */ {"\x42", 0, 0x6EF6}, /* East Asian ideograph */ {"\x43", 0, 0x6F19}, /* East Asian ideograph */ {"\x44", 0, 0x6F00}, /* East Asian ideograph */ {"\x4B", 0, 0x6F24}, /* East Asian ideograph */ {"\x51", 0, 0x6F18}, /* East Asian ideograph */ {"\x57", 0, 0x6F1F}, /* East Asian ideograph */ {"\x5A", 0, 0x6F0A}, /* East Asian ideograph */ {"\x5E", 0, 0x6F36}, /* East Asian ideograph */ {"\x60", 0, 0x6EF9}, /* East Asian ideograph */ {"\x61", 0, 0x6EEE}, /* East Asian ideograph */ {"\x62", 0, 0x6F41}, /* East Asian ideograph */ {"\x64", 0, 0x6F95}, /* East Asian ideograph */ {"\x65", 0, 0x6F2D}, /* East Asian ideograph */ {"\x67", 0, 0x6F34}, /* East Asian ideograph */ {"\x6B", 0, 0x6F49}, /* East Asian ideograph */ {"\x6D", 0, 0x6F30}, /* East Asian ideograph */ {"\x76", 0, 0x6EFA}, /* East Asian ideograph */ {"\x77", 0, 0x6EEB}, /* East Asian ideograph */ {"\x78", 0, 0x6F08}, /* East Asian ideograph */ {"\x79", 0, 0x6F0E}, /* East Asian ideograph */ {"\x7B", 0, 0x6F35}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page125 = { marc8_31page125_flat, 0 }; /* PAGE 124 */ struct yaz_iconv_trie_flat marc8_31page124_flat[] = { {"\x22", 0, 0x6E28}, /* East Asian ideograph */ {"\x24", 0, 0x6E5C}, /* East Asian ideograph */ {"\x26", 0, 0x6E31}, /* East Asian ideograph */ {"\x28", 0, 0x6E5E}, /* East Asian ideograph */ {"\x2C", 0, 0x6E84}, /* East Asian ideograph */ {"\x2E", 0, 0x6E2E}, /* East Asian ideograph */ {"\x30", 0, 0x6E36}, /* East Asian ideograph */ {"\x31", 0, 0x6E5D}, /* East Asian ideograph */ {"\x32", 0, 0x6E72}, /* East Asian ideograph */ {"\x33", 0, 0x6E30}, /* East Asian ideograph */ {"\x34", 0, 0x6E53}, /* East Asian ideograph */ {"\x36", 0, 0x6E39}, /* East Asian ideograph */ {"\x37", 0, 0x6E71}, /* East Asian ideograph */ {"\x38", 0, 0x6E69}, /* East Asian ideograph */ {"\x39", 0, 0x6E6B}, /* East Asian ideograph */ {"\x3B", 0, 0x6E8B}, /* East Asian ideograph */ {"\x3E", 0, 0x6E76}, /* East Asian ideograph */ {"\x40", 0, 0x6E2A}, /* East Asian ideograph */ {"\x41", 0, 0x6E4C}, /* East Asian ideograph */ {"\x42", 0, 0x6E22}, /* East Asian ideograph */ {"\x43", 0, 0x6ECE}, /* East Asian ideograph */ {"\x45", 0, 0x6E9B}, /* East Asian ideograph */ {"\x46", 0, 0x6E9F}, /* East Asian ideograph */ {"\x48", 0, 0x6EC8}, /* East Asian ideograph */ {"\x49", 0, 0x6ED8}, /* East Asian ideograph */ {"\x4A", 0, 0x6E8F}, /* East Asian ideograph */ {"\x4D", 0, 0x6E93}, /* East Asian ideograph */ {"\x4F", 0, 0x6EA0}, /* East Asian ideograph */ {"\x51", 0, 0x6EB1}, /* East Asian ideograph */ {"\x57", 0, 0x6EA8}, /* East Asian ideograph */ {"\x59", 0, 0x6E92}, /* East Asian ideograph */ {"\x5A", 0, 0x6EA7}, /* East Asian ideograph */ {"\x5E", 0, 0x6E8E}, /* East Asian ideograph */ {"\x60", 0, 0x6ED9}, /* East Asian ideograph */ {"\x61", 0, 0x6EBD}, /* East Asian ideograph */ {"\x63", 0, 0x6EC1}, /* East Asian ideograph */ {"\x69", 0, 0x6EBB}, /* East Asian ideograph */ {"\x6A", 0, 0x6EC9}, /* East Asian ideograph */ {"\x6C", 0, 0x6EB3}, /* East Asian ideograph */ {"\x6D", 0, 0x6EB7}, /* East Asian ideograph */ {"\x75", 0, 0x6EA4}, /* East Asian ideograph */ {"\x79", 0, 0x6ECF}, /* East Asian ideograph */ {"\x7C", 0, 0x6ECA}, /* East Asian ideograph */ {"\x7D", 0, 0x6ED5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page124 = { marc8_31page124_flat, 0 }; /* PAGE 123 */ struct yaz_iconv_trie_flat marc8_31page123_flat[] = { {"\x2A", 0, 0x6DDF}, /* East Asian ideograph */ {"\x2D", 0, 0x6DD3}, /* East Asian ideograph */ {"\x32", 0, 0x6DFC}, /* East Asian ideograph */ {"\x35", 0, 0x6DDD}, /* East Asian ideograph */ {"\x36", 0, 0x6DDC}, /* East Asian ideograph */ {"\x39", 0, 0x6DDB}, /* East Asian ideograph */ {"\x3D", 0, 0x6DA4}, /* East Asian ideograph */ {"\x44", 0, 0x6E12}, /* East Asian ideograph */ {"\x46", 0, 0x6DF0}, /* East Asian ideograph */ {"\x4A", 0, 0x6DE6}, /* East Asian ideograph */ {"\x4C", 0, 0x6E1F}, /* East Asian ideograph */ {"\x50", 0, 0x6E27}, /* East Asian ideograph */ {"\x55", 0, 0x6E49}, /* East Asian ideograph */ {"\x58", 0, 0x6E3C}, /* East Asian ideograph */ {"\x60", 0, 0x6E8A}, /* East Asian ideograph */ {"\x62", 0, 0x6E4B}, /* East Asian ideograph */ {"\x66", 0, 0x6E62}, /* East Asian ideograph */ {"\x6A", 0, 0x6E51}, /* East Asian ideograph */ {"\x6B", 0, 0x6E44}, /* East Asian ideograph */ {"\x6D", 0, 0x6E63}, /* East Asian ideograph */ {"\x71", 0, 0x6E73}, /* East Asian ideograph */ {"\x74", 0, 0x6E4F}, /* East Asian ideograph */ {"\x77", 0, 0x6E4E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page123 = { marc8_31page123_flat, 0 }; /* PAGE 122 */ struct yaz_iconv_trie_flat marc8_31page122_flat[] = { {"\x25", 0, 0x6D6D}, /* East Asian ideograph */ {"\x26", 0, 0x6D6F}, /* East Asian ideograph */ {"\x28", 0, 0x6D61}, /* East Asian ideograph */ {"\x29", 0, 0x6D91}, /* East Asian ideograph */ {"\x2C", 0, 0x6D81}, /* East Asian ideograph */ {"\x2E", 0, 0x6D8A}, /* East Asian ideograph */ {"\x2F", 0, 0x6D34}, /* East Asian ideograph (variant of EACC 34492F) */ {"\x34", 0, 0x6D79}, /* East Asian ideograph */ {"\x35", 0, 0x6DEF}, /* East Asian ideograph */ {"\x39", 0, 0x6D7F}, /* East Asian ideograph */ {"\x3B", 0, 0x6D85}, /* East Asian ideograph */ {"\x3C", 0, 0x6D65}, /* East Asian ideograph */ {"\x3E", 0, 0x6D5E}, /* East Asian ideograph */ {"\x40", 0, 0x6D67}, /* East Asian ideograph */ {"\x43", 0, 0x6D94}, /* East Asian ideograph */ {"\x46", 0, 0x6D60}, /* East Asian ideograph */ {"\x48", 0, 0x6D98}, /* East Asian ideograph */ {"\x4B", 0, 0x6D7C}, /* East Asian ideograph */ {"\x4C", 0, 0x6D70}, /* East Asian ideograph */ {"\x4F", 0, 0x6D96}, /* East Asian ideograph */ {"\x59", 0, 0x6DAB}, /* East Asian ideograph */ {"\x5A", 0, 0x6DB4}, /* East Asian ideograph */ {"\x5C", 0, 0x6DAA}, /* East Asian ideograph */ {"\x60", 0, 0x6DEC}, /* East Asian ideograph */ {"\x6A", 0, 0x6DAC}, /* East Asian ideograph */ {"\x6B", 0, 0x6DB7}, /* East Asian ideograph */ {"\x6C", 0, 0x6DE2}, /* East Asian ideograph */ {"\x6D", 0, 0x6DD5}, /* East Asian ideograph */ {"\x6E", 0, 0x6DE9}, /* East Asian ideograph */ {"\x71", 0, 0x6DF6}, /* East Asian ideograph */ {"\x79", 0, 0x6E0F}, /* East Asian ideograph */ {"\x7B", 0, 0x6DBF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page122 = { marc8_31page122_flat, 0 }; /* PAGE 121 */ struct yaz_iconv_trie_flat marc8_31page121_flat[] = { {"\x24", 0, 0x6CD8}, /* East Asian ideograph */ {"\x26", 0, 0x6CC6}, /* East Asian ideograph */ {"\x28", 0, 0x6CCE}, /* East Asian ideograph */ {"\x29", 0, 0x6CE9}, /* East Asian ideograph */ {"\x2D", 0, 0x6CF2}, /* East Asian ideograph */ {"\x2F", 0, 0x6CE0}, /* East Asian ideograph */ {"\x30", 0, 0x6CD1}, /* East Asian ideograph */ {"\x32", 0, 0x6CD2}, /* East Asian ideograph */ {"\x33", 0, 0x6CB4}, /* East Asian ideograph */ {"\x37", 0, 0x6D1D}, /* East Asian ideograph */ {"\x3B", 0, 0x6D28}, /* East Asian ideograph */ {"\x44", 0, 0x6D39}, /* East Asian ideograph */ {"\x4D", 0, 0x6D26}, /* East Asian ideograph */ {"\x4E", 0, 0x6D27}, /* East Asian ideograph */ {"\x4F", 0, 0x6D0F}, /* East Asian ideograph */ {"\x50", 0, 0x6D0A}, /* East Asian ideograph */ {"\x51", 0, 0x6D3F}, /* East Asian ideograph */ {"\x5A", 0, 0x6D07}, /* East Asian ideograph */ {"\x5B", 0, 0x6D04}, /* East Asian ideograph */ {"\x5C", 0, 0x6CDA}, /* East Asian ideograph */ {"\x60", 0, 0x6D2E}, /* East Asian ideograph */ {"\x61", 0, 0x6D35}, /* East Asian ideograph */ {"\x62", 0, 0x6D3A}, /* East Asian ideograph */ {"\x64", 0, 0x6D19}, /* East Asian ideograph */ {"\x67", 0, 0x6D0E}, /* East Asian ideograph */ {"\x6A", 0, 0x6D2B}, /* East Asian ideograph */ {"\x6B", 0, 0x6D11}, /* East Asian ideograph */ {"\x6C", 0, 0x6D00}, /* East Asian ideograph */ {"\x6D", 0, 0x6D24}, /* East Asian ideograph */ {"\x6F", 0, 0x6D33}, /* East Asian ideograph */ {"\x73", 0, 0x6D63}, /* East Asian ideograph */ {"\x77", 0, 0x6DA5}, /* East Asian ideograph */ {"\x7D", 0, 0x6D92}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page121 = { marc8_31page121_flat, 0 }; /* PAGE 120 */ struct yaz_iconv_trie_flat marc8_31page120_flat[] = { {"\x24", 0, 0x6C5C}, /* East Asian ideograph */ {"\x26", 0, 0x6C5B}, /* East Asian ideograph */ {"\x27", 0, 0x6C4D}, /* East Asian ideograph */ {"\x2B", 0, 0x6C4B}, /* East Asian ideograph */ {"\x2C", 0, 0x6C54}, /* East Asian ideograph */ {"\x2D", 0, 0x6C63}, /* East Asian ideograph */ {"\x30", 0, 0x6C78}, /* East Asian ideograph */ {"\x31", 0, 0x6C74}, /* East Asian ideograph */ {"\x32", 0, 0x6C86}, /* East Asian ideograph */ {"\x33", 0, 0x6C76}, /* East Asian ideograph */ {"\x38", 0, 0x6C6C}, /* East Asian ideograph */ {"\x39", 0, 0x6C67}, /* East Asian ideograph */ {"\x3B", 0, 0x6C84}, /* East Asian ideograph */ {"\x3E", 0, 0x6C94}, /* East Asian ideograph */ {"\x40", 0, 0x6C8F}, /* East Asian ideograph */ {"\x42", 0, 0x6C65}, /* East Asian ideograph */ {"\x47", 0, 0x6C6F}, /* East Asian ideograph */ {"\x49", 0, 0x6C9D}, /* East Asian ideograph */ {"\x4A", 0, 0x6C69}, /* East Asian ideograph */ {"\x4B", 0, 0x6C9A}, /* East Asian ideograph */ {"\x4C", 0, 0x6C6D}, /* East Asian ideograph */ {"\x4D", 0, 0x6C93}, /* East Asian ideograph */ {"\x51", 0, 0x6C87}, /* East Asian ideograph */ {"\x52", 0, 0x6C6E}, /* East Asian ideograph */ {"\x56", 0, 0x6C95}, /* East Asian ideograph */ {"\x5A", 0, 0x6C82}, /* East Asian ideograph */ {"\x5C", 0, 0x6CA0}, /* East Asian ideograph */ {"\x62", 0, 0x6CEB}, /* East Asian ideograph */ {"\x63", 0, 0x6CEE}, /* East Asian ideograph */ {"\x64", 0, 0x6CC0}, /* East Asian ideograph */ {"\x66", 0, 0x6CEF}, /* East Asian ideograph */ {"\x67", 0, 0x6CAC}, /* East Asian ideograph */ {"\x6E", 0, 0x6CAD}, /* East Asian ideograph (variant of EACC 4C476E) */ {"\x70", 0, 0x6CAF}, /* East Asian ideograph */ {"\x72", 0, 0x6CF5}, /* East Asian ideograph */ {"\x7A", 0, 0x6CBA}, /* East Asian ideograph */ {"\x7B", 0, 0x7553}, /* East Asian ideograph */ {"\x7D", 0, 0x6CC2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page120 = { marc8_31page120_flat, 0 }; /* PAGE 119 */ struct yaz_iconv_trie_flat marc8_31page119_flat[] = { {"\x2A", 0, 0x6BF6}, /* East Asian ideograph */ {"\x2C", 0, 0x6BF3}, /* East Asian ideograph */ {"\x33", 0, 0x6BF8}, /* East Asian ideograph */ {"\x37", 0, 0x6BFA}, /* East Asian ideograph */ {"\x38", 0, 0x6BF9}, /* East Asian ideograph */ {"\x42", 0, 0x6BFF}, /* East Asian ideograph */ {"\x44", 0, 0x6C06}, /* East Asian ideograph */ {"\x48", 0, 0x6C04}, /* East Asian ideograph */ {"\x4A", 0, 0x6C05}, /* East Asian ideograph */ {"\x4C", 0, 0x6C08}, /* East Asian ideograph */ {"\x51", 0, 0x6C0C}, /* East Asian ideograph */ {"\x52", 0, 0x6C0D}, /* East Asian ideograph */ {"\x59", 0, 0x6C15}, /* East Asian ideograph */ {"\x5A", 0, 0x6C18}, /* East Asian ideograph */ {"\x5B", 0, 0x6C19}, /* East Asian ideograph */ {"\x5C", 0, 0x6C1A}, /* East Asian ideograph */ {"\x5E", 0, 0x6C1D}, /* East Asian ideograph */ {"\x60", 0, 0x6C20}, /* East Asian ideograph */ {"\x62", 0, 0x6C21}, /* East Asian ideograph */ {"\x64", 0, 0x6C2A}, /* East Asian ideograph */ {"\x66", 0, 0x6C2D}, /* East Asian ideograph */ {"\x67", 0, 0x6C30}, /* East Asian ideograph */ {"\x68", 0, 0x6C2C}, /* East Asian ideograph */ {"\x69", 0, 0x6C31}, /* East Asian ideograph */ {"\x70", 0, 0x6C3B}, /* East Asian ideograph */ {"\x74", 0, 0x6C3F}, /* East Asian ideograph */ {"\x78", 0, 0x6C46}, /* East Asian ideograph */ {"\x7A", 0, 0x6C52}, /* East Asian ideograph */ {"\x7B", 0, 0x6C62}, /* East Asian ideograph */ {"\x7C", 0, 0x6C4A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page119 = { marc8_31page119_flat, 0 }; /* PAGE 118 */ struct yaz_iconv_trie_flat marc8_31page118_flat[] = { {"\x25", 0, 0x6B99}, /* East Asian ideograph */ {"\x29", 0, 0x6B9B}, /* East Asian ideograph */ {"\x35", 0, 0x6BA3}, /* East Asian ideograph */ {"\x36", 0, 0x6BA2}, /* East Asian ideograph */ {"\x38", 0, 0x6BAA}, /* East Asian ideograph */ {"\x39", 0, 0x6BAB}, /* East Asian ideograph */ {"\x3B", 0, 0x6BAD}, /* East Asian ideograph */ {"\x3D", 0, 0x6BB0}, /* East Asian ideograph */ {"\x3F", 0, 0x6BB3}, /* East Asian ideograph */ {"\x47", 0, 0x6BBD}, /* East Asian ideograph */ {"\x4D", 0, 0x6996}, /* East Asian ideograph */ {"\x54", 0, 0x6BC8}, /* East Asian ideograph */ {"\x5B", 0, 0x6BD6}, /* East Asian ideograph */ {"\x60", 0, 0x6BDA}, /* East Asian ideograph */ {"\x62", 0, 0x6BDC}, /* East Asian ideograph */ {"\x63", 0, 0x6BDD}, /* East Asian ideograph */ {"\x65", 0, 0x6BDF}, /* East Asian ideograph */ {"\x6F", 0, 0x6BE7}, /* East Asian ideograph */ {"\x70", 0, 0x6BEA}, /* East Asian ideograph */ {"\x71", 0, 0x6BE8}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page118 = { marc8_31page118_flat, 0 }; /* PAGE 117 */ struct yaz_iconv_trie_flat marc8_31page117_flat[] = { {"\x2A", 0, 0x6B35}, /* East Asian ideograph */ {"\x2C", 0, 0x6B37}, /* East Asian ideograph */ {"\x2D", 0, 0x6B3B}, /* East Asian ideograph */ {"\x32", 0, 0x6B39}, /* East Asian ideograph */ {"\x35", 0, 0x6B3F}, /* East Asian ideograph */ {"\x37", 0, 0x6B46}, /* East Asian ideograph */ {"\x38", 0, 0x6B41}, /* East Asian ideograph */ {"\x3A", 0, 0x6B40}, /* East Asian ideograph */ {"\x3B", 0, 0x6B42}, /* East Asian ideograph */ {"\x3C", 0, 0x6B43}, /* East Asian ideograph */ {"\x3E", 0, 0x6B48}, /* East Asian ideograph */ {"\x3F", 0, 0x6B4A}, /* East Asian ideograph */ {"\x46", 0, 0x6B4E}, /* East Asian ideograph (variant of EACC 4C4446) */ {"\x4A", 0, 0x6B57}, /* East Asian ideograph */ {"\x4C", 0, 0x6B54}, /* East Asian ideograph */ {"\x4E", 0, 0x6B55}, /* East Asian ideograph */ {"\x51", 0, 0x6B5C}, /* East Asian ideograph */ {"\x53", 0, 0x6B5E}, /* East Asian ideograph */ {"\x54", 0, 0x6B60}, /* East Asian ideograph */ {"\x5B", 0, 0x6B6B}, /* East Asian ideograph */ {"\x5D", 0, 0x6B6C}, /* East Asian ideograph */ {"\x5F", 0, 0x6B6E}, /* East Asian ideograph */ {"\x61", 0, 0x6B71}, /* East Asian ideograph */ {"\x6B", 0, 0x6B7E}, /* East Asian ideograph */ {"\x71", 0, 0x6B82}, /* East Asian ideograph */ {"\x73", 0, 0x6B84}, /* East Asian ideograph */ {"\x79", 0, 0x6B8D}, /* East Asian ideograph */ {"\x7B", 0, 0x6B95}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page117 = { marc8_31page117_flat, 0 }; /* PAGE 116 */ struct yaz_iconv_trie_flat marc8_31page116_flat[] = { {"\x25", 0, 0x6ACC}, /* East Asian ideograph */ {"\x28", 0, 0x6AD1}, /* East Asian ideograph */ {"\x33", 0, 0x6ADF}, /* East Asian ideograph */ {"\x34", 0, 0x6ACD}, /* East Asian ideograph */ {"\x35", 0, 0x6ADE}, /* East Asian ideograph */ {"\x37", 0, 0x6AEC}, /* East Asian ideograph */ {"\x39", 0, 0x6AF3}, /* East Asian ideograph */ {"\x3A", 0, 0x6AE7}, /* East Asian ideograph */ {"\x3F", 0, 0x6AEB}, /* East Asian ideograph */ {"\x40", 0, 0x6AEA}, /* East Asian ideograph */ {"\x44", 0, 0x6AF1}, /* East Asian ideograph */ {"\x45", 0, 0x6AE8}, /* East Asian ideograph */ {"\x48", 0, 0x6AF5}, /* East Asian ideograph */ {"\x4E", 0, 0x6AFD}, /* East Asian ideograph */ {"\x50", 0, 0x6AFA}, /* East Asian ideograph */ {"\x52", 0, 0x6B01}, /* East Asian ideograph */ {"\x58", 0, 0x6B03}, /* East Asian ideograph */ {"\x59", 0, 0x6AF8}, /* East Asian ideograph */ {"\x5F", 0, 0x6B0D}, /* East Asian ideograph */ {"\x60", 0, 0x6B09}, /* East Asian ideograph */ {"\x61", 0, 0x6B0E}, /* East Asian ideograph */ {"\x67", 0, 0x6B11}, /* East Asian ideograph */ {"\x6D", 0, 0x6B19}, /* East Asian ideograph */ {"\x6E", 0, 0x6B17}, /* East Asian ideograph */ {"\x72", 0, 0x6B1E}, /* East Asian ideograph */ {"\x7E", 0, 0x6B2C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page116 = { marc8_31page116_flat, 0 }; /* PAGE 115 */ struct yaz_iconv_trie_flat marc8_31page115_flat[] = { {"\x22", 0, 0x6A7F}, /* East Asian ideograph */ {"\x23", 0, 0x6A89}, /* East Asian ideograph */ {"\x24", 0, 0x6A91}, /* East Asian ideograph */ {"\x26", 0, 0x6A9F}, /* East Asian ideograph */ {"\x2A", 0, 0x6A92}, /* East Asian ideograph */ {"\x2B", 0, 0x6AA3}, /* East Asian ideograph */ {"\x34", 0, 0x6A99}, /* East Asian ideograph */ {"\x35", 0, 0x6A9D}, /* East Asian ideograph */ {"\x36", 0, 0x6A7E}, /* East Asian ideograph */ {"\x37", 0, 0x6A9B}, /* East Asian ideograph */ {"\x42", 0, 0x6AA0}, /* East Asian ideograph */ {"\x47", 0, 0x6A90}, /* East Asian ideograph */ {"\x49", 0, 0x6A9E}, /* East Asian ideograph */ {"\x4A", 0, 0x6A87}, /* East Asian ideograph */ {"\x4B", 0, 0x6A8E}, /* East Asian ideograph */ {"\x51", 0, 0x6AAB}, /* East Asian ideograph */ {"\x55", 0, 0x6AC8}, /* East Asian ideograph */ {"\x57", 0, 0x6AAE}, /* East Asian ideograph */ {"\x5D", 0, 0x6ABF}, /* East Asian ideograph */ {"\x64", 0, 0x6ACA}, /* East Asian ideograph */ {"\x68", 0, 0x6AB4}, /* East Asian ideograph */ {"\x79", 0, 0x6AE6}, /* East Asian ideograph */ {"\x7E", 0, 0x6AED}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page115 = { marc8_31page115_flat, 0 }; /* PAGE 114 */ struct yaz_iconv_trie_flat marc8_31page114_flat[] = { {"\x23", 0, 0x69F0}, /* East Asian ideograph */ {"\x24", 0, 0x69F2}, /* East Asian ideograph */ {"\x28", 0, 0x6A14}, /* East Asian ideograph */ {"\x29", 0, 0x6A63}, /* East Asian ideograph */ {"\x37", 0, 0x6A67}, /* East Asian ideograph */ {"\x39", 0, 0x6A43}, /* East Asian ideograph */ {"\x3A", 0, 0x6A33}, /* East Asian ideograph */ {"\x3B", 0, 0x6A32}, /* East Asian ideograph */ {"\x3C", 0, 0x6A5A}, /* East Asian ideograph */ {"\x3F", 0, 0x6A28}, /* East Asian ideograph */ {"\x40", 0, 0x6A48}, /* East Asian ideograph */ {"\x41", 0, 0x6A50}, /* East Asian ideograph */ {"\x42", 0, 0x6A52}, /* East Asian ideograph */ {"\x43", 0, 0x6A72}, /* East Asian ideograph */ {"\x45", 0, 0x6A3E}, /* East Asian ideograph */ {"\x46", 0, 0x6A77}, /* East Asian ideograph */ {"\x47", 0, 0x6A5B}, /* East Asian ideograph */ {"\x4A", 0, 0x6A5E}, /* East Asian ideograph */ {"\x4B", 0, 0x6A5C}, /* East Asian ideograph */ {"\x4F", 0, 0x6A51}, /* East Asian ideograph */ {"\x51", 0, 0x6A56}, /* East Asian ideograph */ {"\x53", 0, 0x6A36}, /* East Asian ideograph */ {"\x56", 0, 0x6A7A}, /* East Asian ideograph */ {"\x58", 0, 0x6A3F}, /* East Asian ideograph */ {"\x6C", 0, 0x69F9}, /* East Asian ideograph */ {"\x6D", 0, 0x6A64}, /* East Asian ideograph */ {"\x73", 0, 0x6A8D}, /* East Asian ideograph */ {"\x75", 0, 0x6AA8}, /* East Asian ideograph */ {"\x77", 0, 0x6AA5}, /* East Asian ideograph */ {"\x79", 0, 0x6A96}, /* East Asian ideograph */ {"\x7E", 0, 0x6A7D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page114 = { marc8_31page114_flat, 0 }; /* PAGE 113 */ struct yaz_iconv_trie_flat marc8_31page113_flat[] = { {"\x27", 0, 0x69BF}, /* East Asian ideograph */ {"\x2D", 0, 0x69A3}, /* East Asian ideograph */ {"\x2E", 0, 0x69A4}, /* East Asian ideograph */ {"\x34", 0, 0x69D4}, /* East Asian ideograph */ {"\x38", 0, 0x69C3}, /* East Asian ideograph */ {"\x3D", 0, 0x6A12}, /* East Asian ideograph */ {"\x3E", 0, 0x6A11}, /* East Asian ideograph */ {"\x41", 0, 0x6A00}, /* East Asian ideograph */ {"\x46", 0, 0x69E6}, /* East Asian ideograph */ {"\x4B", 0, 0x6A0B}, /* East Asian ideograph */ {"\x4C", 0, 0x69E5}, /* East Asian ideograph */ {"\x4D", 0, 0x69E9}, /* East Asian ideograph */ {"\x50", 0, 0x69FC}, /* East Asian ideograph */ {"\x54", 0, 0x6A17}, /* East Asian ideograph */ {"\x56", 0, 0x69E7}, /* East Asian ideograph */ {"\x57", 0, 0x69EB}, /* East Asian ideograph */ {"\x5B", 0, 0x69F1}, /* East Asian ideograph */ {"\x5E", 0, 0x6A2B}, /* East Asian ideograph */ {"\x5F", 0, 0x69FF}, /* East Asian ideograph */ {"\x60", 0, 0x6A20}, /* East Asian ideograph */ {"\x64", 0, 0x69ED}, /* East Asian ideograph */ {"\x67", 0, 0x6A1B}, /* East Asian ideograph */ {"\x68", 0, 0x6A2D}, /* East Asian ideograph */ {"\x6E", 0, 0x6A18}, /* East Asian ideograph */ {"\x72", 0, 0x6A1D}, /* East Asian ideograph */ {"\x75", 0, 0x6A0C}, /* East Asian ideograph */ {"\x76", 0, 0x6A0F}, /* East Asian ideograph */ {"\x7C", 0, 0x69EE}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page113 = { marc8_31page113_flat, 0 }; /* PAGE 112 */ struct yaz_iconv_trie_flat marc8_31page112_flat[] = { {"\x21", 0, 0x6952}, /* East Asian ideograph */ {"\x25", 0, 0x695B}, /* East Asian ideograph */ {"\x2D", 0, 0x6985}, /* East Asian ideograph */ {"\x32", 0, 0x693D}, /* East Asian ideograph */ {"\x35", 0, 0x6978}, /* East Asian ideograph */ {"\x37", 0, 0x697B}, /* East Asian ideograph */ {"\x3A", 0, 0x6934}, /* East Asian ideograph */ {"\x3B", 0, 0x6969}, /* East Asian ideograph */ {"\x3D", 0, 0x6944}, /* East Asian ideograph */ {"\x3E", 0, 0x696F}, /* East Asian ideograph */ {"\x44", 0, 0x698A}, /* East Asian ideograph */ {"\x45", 0, 0x69A0}, /* East Asian ideograph */ {"\x46", 0, 0x69B1}, /* East Asian ideograph */ {"\x50", 0, 0x69CE}, /* East Asian ideograph */ {"\x51", 0, 0x69CA}, /* East Asian ideograph */ {"\x59", 0, 0x698D}, /* East Asian ideograph */ {"\x5A", 0, 0x6991}, /* East Asian ideograph */ {"\x5C", 0, 0x69AA}, /* East Asian ideograph */ {"\x60", 0, 0x69BC}, /* East Asian ideograph */ {"\x61", 0, 0x69A7}, /* East Asian ideograph */ {"\x65", 0, 0x699E}, /* East Asian ideograph */ {"\x68", 0, 0x69D9}, /* East Asian ideograph */ {"\x6A", 0, 0x698E}, /* East Asian ideograph */ {"\x6D", 0, 0x69D6}, /* East Asian ideograph */ {"\x75", 0, 0x69A5}, /* East Asian ideograph */ {"\x77", 0, 0x69BE}, /* East Asian ideograph */ {"\x78", 0, 0x69D1}, /* East Asian ideograph */ {"\x7A", 0, 0x69F6}, /* East Asian ideograph */ {"\x7E", 0, 0x69D5}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page112 = { marc8_31page112_flat, 0 }; /* PAGE 111 */ struct yaz_iconv_trie_flat marc8_31page111_flat[] = { {"\x21", 0, 0x6907}, /* East Asian ideograph */ {"\x23", 0, 0x691A}, /* East Asian ideograph */ {"\x24", 0, 0x6919}, /* East Asian ideograph */ {"\x2A", 0, 0x68DE}, /* East Asian ideograph */ {"\x2B", 0, 0x691B}, /* East Asian ideograph */ {"\x2D", 0, 0x68FB}, /* East Asian ideograph */ {"\x33", 0, 0x68E1}, /* East Asian ideograph */ {"\x37", 0, 0x68D1}, /* East Asian ideograph */ {"\x38", 0, 0x68D0}, /* East Asian ideograph */ {"\x39", 0, 0x6908}, /* East Asian ideograph */ {"\x3E", 0, 0x68E8}, /* East Asian ideograph */ {"\x3F", 0, 0x68F0}, /* East Asian ideograph */ {"\x40", 0, 0x68C3}, /* East Asian ideograph */ {"\x44", 0, 0x6911}, /* East Asian ideograph */ {"\x46", 0, 0x68D4}, /* East Asian ideograph */ {"\x47", 0, 0x68EF}, /* East Asian ideograph */ {"\x49", 0, 0x68C6}, /* East Asian ideograph */ {"\x4B", 0, 0x68C7}, /* East Asian ideograph */ {"\x53", 0, 0x6974}, /* East Asian ideograph */ {"\x55", 0, 0x6938}, /* East Asian ideograph */ {"\x58", 0, 0x6962}, /* East Asian ideograph */ {"\x5D", 0, 0x6958}, /* East Asian ideograph */ {"\x5F", 0, 0x6957}, /* East Asian ideograph */ {"\x60", 0, 0x693F}, /* East Asian ideograph */ {"\x61", 0, 0x6971}, /* East Asian ideograph */ {"\x64", 0, 0x6945}, /* East Asian ideograph */ {"\x65", 0, 0x695D}, /* East Asian ideograph */ {"\x66", 0, 0x6932}, /* East Asian ideograph */ {"\x69", 0, 0x696E}, /* East Asian ideograph */ {"\x6A", 0, 0x6963}, /* East Asian ideograph */ {"\x6B", 0, 0x6948}, /* East Asian ideograph */ {"\x6E", 0, 0x6939}, /* East Asian ideograph */ {"\x70", 0, 0x696A}, /* East Asian ideograph */ {"\x73", 0, 0x6937}, /* East Asian ideograph */ {"\x7A", 0, 0x696C}, /* East Asian ideograph */ {"\x7B", 0, 0x694E}, /* East Asian ideograph */ {"\x7D", 0, 0x6980}, /* East Asian ideograph */ {"\x7E", 0, 0x6933}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page111 = { marc8_31page111_flat, 0 }; /* PAGE 110 */ struct yaz_iconv_trie_flat marc8_31page110_flat[] = { {"\x21", 0, 0x6872}, /* East Asian ideograph */ {"\x22", 0, 0x689C}, /* East Asian ideograph */ {"\x25", 0, 0x686D}, /* East Asian ideograph */ {"\x2E", 0, 0x68A9}, /* East Asian ideograph */ {"\x30", 0, 0x6898}, /* East Asian ideograph */ {"\x32", 0, 0x688B}, /* East Asian ideograph */ {"\x33", 0, 0x68A0}, /* East Asian ideograph */ {"\x34", 0, 0x686F}, /* East Asian ideograph */ {"\x39", 0, 0x68A3}, /* East Asian ideograph */ {"\x3B", 0, 0x6874}, /* East Asian ideograph */ {"\x3C", 0, 0x6875}, /* East Asian ideograph */ {"\x3F", 0, 0x6877}, /* East Asian ideograph */ {"\x40", 0, 0x688F}, /* East Asian ideograph */ {"\x43", 0, 0x687B}, /* East Asian ideograph */ {"\x44", 0, 0x688E}, /* East Asian ideograph */ {"\x4B", 0, 0x68B4}, /* East Asian ideograph */ {"\x50", 0, 0x692C}, /* East Asian ideograph */ {"\x51", 0, 0x6917}, /* East Asian ideograph */ {"\x53", 0, 0x690C}, /* East Asian ideograph */ {"\x56", 0, 0x690B}, /* East Asian ideograph */ {"\x58", 0, 0x68D3}, /* East Asian ideograph */ {"\x59", 0, 0x6904}, /* East Asian ideograph */ {"\x5B", 0, 0x690A}, /* East Asian ideograph */ {"\x5C", 0, 0x6909}, /* East Asian ideograph */ {"\x5D", 0, 0x6929}, /* East Asian ideograph */ {"\x62", 0, 0x68EC}, /* East Asian ideograph */ {"\x63", 0, 0x692A}, /* East Asian ideograph */ {"\x64", 0, 0x68EA}, /* East Asian ideograph */ {"\x65", 0, 0x681F}, /* East Asian ideograph */ {"\x66", 0, 0x7439}, /* East Asian ideograph */ {"\x6A", 0, 0x6910}, /* East Asian ideograph */ {"\x6E", 0, 0x68D6}, /* East Asian ideograph */ {"\x6F", 0, 0x68EB}, /* East Asian ideograph */ {"\x73", 0, 0x68F1}, /* East Asian ideograph */ {"\x78", 0, 0x68FD}, /* East Asian ideograph */ {"\x79", 0, 0x68FC}, /* East Asian ideograph */ {"\x7B", 0, 0x68F3}, /* East Asian ideograph */ {"\x7C", 0, 0x6913}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page110 = { marc8_31page110_flat, 0 }; /* PAGE 109 */ struct yaz_iconv_trie_flat marc8_31page109_flat[] = { {"\x21", 0, 0x67B9}, /* East Asian ideograph */ {"\x23", 0, 0x67C2}, /* East Asian ideograph */ {"\x24", 0, 0x67E3}, /* East Asian ideograph */ {"\x26", 0, 0x67CA}, /* East Asian ideograph */ {"\x28", 0, 0x67CE}, /* East Asian ideograph */ {"\x29", 0, 0x67E2}, /* East Asian ideograph */ {"\x2A", 0, 0x67F2}, /* East Asian ideograph */ {"\x2B", 0, 0x67C3}, /* East Asian ideograph */ {"\x2D", 0, 0x67DD}, /* East Asian ideograph */ {"\x2F", 0, 0x67E7}, /* East Asian ideograph */ {"\x30", 0, 0x6849}, /* East Asian ideograph */ {"\x31", 0, 0x683E}, /* East Asian ideograph */ {"\x36", 0, 0x6814}, /* East Asian ideograph */ {"\x37", 0, 0x684B}, /* East Asian ideograph */ {"\x38", 0, 0x681E}, /* East Asian ideograph */ {"\x3B", 0, 0x6833}, /* East Asian ideograph */ {"\x40", 0, 0x6831}, /* East Asian ideograph */ {"\x41", 0, 0x6832}, /* East Asian ideograph */ {"\x42", 0, 0x6835}, /* East Asian ideograph */ {"\x43", 0, 0x683B}, /* East Asian ideograph */ {"\x44", 0, 0x684E}, /* East Asian ideograph */ {"\x47", 0, 0x682B}, /* East Asian ideograph */ {"\x48", 0, 0x682D}, /* East Asian ideograph */ {"\x4A", 0, 0x684D}, /* East Asian ideograph */ {"\x4F", 0, 0x6844}, /* East Asian ideograph */ {"\x55", 0, 0x685D}, /* East Asian ideograph */ {"\x56", 0, 0x685E}, /* East Asian ideograph */ {"\x58", 0, 0x6834}, /* East Asian ideograph */ {"\x59", 0, 0x6812}, /* East Asian ideograph */ {"\x65", 0, 0x685A}, /* East Asian ideograph */ {"\x68", 0, 0x686B}, /* East Asian ideograph */ {"\x69", 0, 0x686C}, /* East Asian ideograph */ {"\x6B", 0, 0x6879}, /* East Asian ideograph */ {"\x6E", 0, 0x68B2}, /* East Asian ideograph */ {"\x71", 0, 0x689B}, /* East Asian ideograph */ {"\x72", 0, 0x687E}, /* East Asian ideograph */ {"\x74", 0, 0x68B6}, /* East Asian ideograph */ {"\x76", 0, 0x6882}, /* East Asian ideograph */ {"\x7A", 0, 0x6890}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page109 = { marc8_31page109_flat, 0 }; /* PAGE 108 */ struct yaz_iconv_trie_flat marc8_31page108_flat[] = { {"\x21", 0, 0x677B}, /* East Asian ideograph */ {"\x22", 0, 0x6792}, /* East Asian ideograph */ {"\x23", 0, 0x6776}, /* East Asian ideograph */ {"\x25", 0, 0x6791}, /* East Asian ideograph */ {"\x26", 0, 0x6799}, /* East Asian ideograph */ {"\x28", 0, 0x67A4}, /* East Asian ideograph */ {"\x2E", 0, 0x678F}, /* East Asian ideograph */ {"\x30", 0, 0x6772}, /* East Asian ideograph */ {"\x31", 0, 0x6798}, /* East Asian ideograph (variant of EACC 4C3B31) */ {"\x32", 0, 0x676A}, /* East Asian ideograph */ {"\x39", 0, 0x67AC}, /* East Asian ideograph */ {"\x3B", 0, 0x67A0}, /* East Asian ideograph */ {"\x3F", 0, 0x67A1}, /* East Asian ideograph */ {"\x44", 0, 0x67F9}, /* East Asian ideograph */ {"\x48", 0, 0x678D}, /* East Asian ideograph */ {"\x49", 0, 0x678C}, /* East Asian ideograph */ {"\x4C", 0, 0x67FC}, /* East Asian ideograph */ {"\x4E", 0, 0x6810}, /* East Asian ideograph */ {"\x51", 0, 0x67C8}, /* East Asian ideograph */ {"\x54", 0, 0x67CC}, /* East Asian ideograph */ {"\x58", 0, 0x67C5}, /* East Asian ideograph */ {"\x5C", 0, 0x67BB}, /* East Asian ideograph */ {"\x5F", 0, 0x67B0}, /* East Asian ideograph */ {"\x60", 0, 0x6803}, /* East Asian ideograph */ {"\x61", 0, 0x67F8}, /* East Asian ideograph */ {"\x63", 0, 0x67D8}, /* East Asian ideograph */ {"\x64", 0, 0x67B7}, /* East Asian ideograph */ {"\x6D", 0, 0x6802}, /* East Asian ideograph */ {"\x6F", 0, 0x67E4}, /* East Asian ideograph */ {"\x70", 0, 0x67D9}, /* East Asian ideograph */ {"\x71", 0, 0x67DB}, /* East Asian ideograph */ {"\x72", 0, 0x67B5}, /* East Asian ideograph */ {"\x74", 0, 0x67DF}, /* East Asian ideograph */ {"\x75", 0, 0x67F7}, /* East Asian ideograph */ {"\x77", 0, 0x67B3}, /* East Asian ideograph */ {"\x78", 0, 0x6806}, /* East Asian ideograph */ {"\x79", 0, 0x67AE}, /* East Asian ideograph */ {"\x7A", 0, 0x67F6}, /* East Asian ideograph */ {"\x7C", 0, 0x67EE}, /* East Asian ideograph */ {"\x7D", 0, 0x6AAF}, /* East Asian ideograph */ {"\x7E", 0, 0x67B2}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page108 = { marc8_31page108_flat, 0 }; /* PAGE 107 */ struct yaz_iconv_trie_flat marc8_31page107_flat[] = { {"\x28", 0, 0x6705}, /* East Asian ideograph */ {"\x30", 0, 0x670F}, /* East Asian ideograph */ {"\x31", 0, 0x6710}, /* East Asian ideograph */ {"\x33", 0, 0x6712}, /* East Asian ideograph */ {"\x34", 0, 0x6713}, /* East Asian ideograph */ {"\x38", 0, 0x6719}, /* East Asian ideograph */ {"\x39", 0, 0x6718}, /* East Asian ideograph */ {"\x47", 0, 0x6723}, /* East Asian ideograph */ {"\x4C", 0, 0x673E}, /* East Asian ideograph */ {"\x4E", 0, 0x673F}, /* East Asian ideograph */ {"\x58", 0, 0x6757}, /* East Asian ideograph */ {"\x5B", 0, 0x6745}, /* East Asian ideograph */ {"\x5C", 0, 0x6747}, /* East Asian ideograph */ {"\x60", 0, 0x675D}, /* East Asian ideograph */ {"\x61", 0, 0x6755}, /* East Asian ideograph */ {"\x66", 0, 0x674C}, /* East Asian ideograph */ {"\x67", 0, 0x6759}, /* East Asian ideograph */ {"\x68", 0, 0x6748}, /* East Asian ideograph */ {"\x6B", 0, 0x6763}, /* East Asian ideograph */ {"\x6E", 0, 0x6753}, /* East Asian ideograph */ {"\x71", 0, 0x674A}, /* East Asian ideograph */ {"\x75", 0, 0x6793}, /* East Asian ideograph */ {"\x78", 0, 0x677C}, /* East Asian ideograph */ {"\x7A", 0, 0x679F}, /* East Asian ideograph */ {"\x7C", 0, 0x6785}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page107 = { marc8_31page107_flat, 0 }; /* PAGE 106 */ struct yaz_iconv_trie_flat marc8_31page106_flat[] = { {"\x24", 0, 0x7A25}, /* East Asian ideograph */ {"\x2A", 0, 0x66A0}, /* East Asian ideograph */ {"\x30", 0, 0x5C21}, /* East Asian ideograph */ {"\x32", 0, 0x669D}, /* East Asian ideograph */ {"\x3A", 0, 0x66B2}, /* East Asian ideograph */ {"\x40", 0, 0x66B5}, /* East Asian ideograph */ {"\x41", 0, 0x66AA}, /* East Asian ideograph */ {"\x43", 0, 0x66AC}, /* East Asian ideograph */ {"\x47", 0, 0x66B1}, /* East Asian ideograph */ {"\x4E", 0, 0x66C8}, /* East Asian ideograph */ {"\x4F", 0, 0x66BE}, /* East Asian ideograph */ {"\x54", 0, 0x66C0}, /* East Asian ideograph */ {"\x55", 0, 0x66C7}, /* East Asian ideograph */ {"\x5A", 0, 0x66BB}, /* East Asian ideograph */ {"\x5C", 0, 0x66C4}, /* East Asian ideograph */ {"\x60", 0, 0x66CF}, /* East Asian ideograph */ {"\x71", 0, 0x66DA}, /* East Asian ideograph */ {"\x72", 0, 0x66DB}, /* East Asian ideograph */ {"\x73", 0, 0x66E2}, /* East Asian ideograph */ {"\x76", 0, 0x66E1}, /* East Asian ideograph */ {"\x78", 0, 0x66E8}, /* East Asian ideograph */ {"\x7C", 0, 0x66E9}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page106 = { marc8_31page106_flat, 0 }; /* PAGE 105 */ struct yaz_iconv_trie_flat marc8_31page105_flat[] = { {"\x27", 0, 0x6633}, /* East Asian ideograph */ {"\x28", 0, 0x662B}, /* East Asian ideograph */ {"\x2B", 0, 0x6634}, /* East Asian ideograph */ {"\x2C", 0, 0x6624}, /* East Asian ideograph */ {"\x31", 0, 0x6645}, /* East Asian ideograph */ {"\x32", 0, 0x665F}, /* East Asian ideograph */ {"\x3D", 0, 0x6665}, /* East Asian ideograph */ {"\x3E", 0, 0x665C}, /* East Asian ideograph */ {"\x3F", 0, 0x6661}, /* East Asian ideograph */ {"\x48", 0, 0x665B}, /* East Asian ideograph */ {"\x49", 0, 0x6659}, /* East Asian ideograph */ {"\x4A", 0, 0x6667}, /* East Asian ideograph */ {"\x4C", 0, 0x665E}, /* East Asian ideograph */ {"\x4D", 0, 0x6657}, /* East Asian ideograph */ {"\x50", 0, 0x667E}, /* East Asian ideograph */ {"\x51", 0, 0x666C}, /* East Asian ideograph */ {"\x5A", 0, 0x6678}, /* East Asian ideograph */ {"\x60", 0, 0x6673}, /* East Asian ideograph */ {"\x66", 0, 0x666D}, /* East Asian ideograph */ {"\x68", 0, 0x6677}, /* East Asian ideograph */ {"\x70", 0, 0x6684}, /* East Asian ideograph */ {"\x71", 0, 0x668C}, /* East Asian ideograph */ {"\x72", 0, 0x6693}, /* East Asian ideograph */ {"\x75", 0, 0x668B}, /* East Asian ideograph */ {"\x76", 0, 0x6690}, /* East Asian ideograph */ {"\x79", 0, 0x6694}, /* East Asian ideograph */ {"\x7A", 0, 0x668A}, /* East Asian ideograph */ {"\x7C", 0, 0x6698}, /* East Asian ideograph */ {"\x7D", 0, 0x668D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page105 = { marc8_31page105_flat, 0 }; /* PAGE 104 */ struct yaz_iconv_trie_flat marc8_31page104_flat[] = { {"\x22", 0, 0x65A8}, /* East Asian ideograph */ {"\x23", 0, 0x65A6}, /* East Asian ideograph */ {"\x27", 0, 0x65AE}, /* East Asian ideograph */ {"\x2A", 0, 0x65B6}, /* East Asian ideograph */ {"\x2C", 0, 0x65B8}, /* East Asian ideograph */ {"\x2F", 0, 0x65BF}, /* East Asian ideograph */ {"\x31", 0, 0x65C6}, /* East Asian ideograph */ {"\x32", 0, 0x65C3}, /* East Asian ideograph */ {"\x33", 0, 0x65C4}, /* East Asian ideograph */ {"\x34", 0, 0x65C2}, /* East Asian ideograph */ {"\x3B", 0, 0x65D0}, /* East Asian ideograph */ {"\x3C", 0, 0x65D2}, /* East Asian ideograph */ {"\x44", 0, 0x65DB}, /* East Asian ideograph */ {"\x45", 0, 0x65DC}, /* East Asian ideograph */ {"\x47", 0, 0x65DD}, /* East Asian ideograph */ {"\x48", 0, 0x65DF}, /* East Asian ideograph */ {"\x4A", 0, 0x65E1}, /* East Asian ideograph */ {"\x4E", 0, 0x65E4}, /* East Asian ideograph */ {"\x54", 0, 0x65F4}, /* East Asian ideograph */ {"\x55", 0, 0x65F0}, /* East Asian ideograph */ {"\x5A", 0, 0x6609}, /* East Asian ideograph */ {"\x5B", 0, 0x65FB}, /* East Asian ideograph */ {"\x5C", 0, 0x65FC}, /* East Asian ideograph */ {"\x5E", 0, 0x660A}, /* East Asian ideograph */ {"\x64", 0, 0x6603}, /* East Asian ideograph */ {"\x6A", 0, 0x6611}, /* East Asian ideograph */ {"\x6B", 0, 0x6615}, /* East Asian ideograph */ {"\x6D", 0, 0x6604}, /* East Asian ideograph */ {"\x6E", 0, 0x6631}, /* East Asian ideograph */ {"\x72", 0, 0x6621}, /* East Asian ideograph */ {"\x75", 0, 0x662C}, /* East Asian ideograph */ {"\x77", 0, 0x6635}, /* East Asian ideograph */ {"\x7C", 0, 0x661E}, /* East Asian ideograph */ {"\x7D", 0, 0x663A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page104 = { marc8_31page104_flat, 0 }; /* PAGE 103 */ struct yaz_iconv_trie_flat marc8_31page103_flat[] = { {"\x2C", 0, 0x6538}, /* East Asian ideograph */ {"\x34", 0, 0x6542}, /* East Asian ideograph */ {"\x36", 0, 0x6549}, /* East Asian ideograph */ {"\x3E", 0, 0x6554}, /* East Asian ideograph */ {"\x3F", 0, 0x6555}, /* East Asian ideograph */ {"\x45", 0, 0x6567}, /* East Asian ideograph */ {"\x47", 0, 0x6561}, /* East Asian ideograph */ {"\x4F", 0, 0x656D}, /* East Asian ideograph */ {"\x54", 0, 0x657A}, /* East Asian ideograph */ {"\x64", 0, 0x6585}, /* East Asian ideograph */ {"\x6E", 0, 0x658C}, /* East Asian ideograph */ {"\x70", 0, 0x6592}, /* East Asian ideograph */ {"\x71", 0, 0x6595}, /* East Asian ideograph */ {"\x75", 0, 0x659B}, /* East Asian ideograph */ {"\x77", 0, 0x659D}, /* East Asian ideograph */ {"\x7A", 0, 0x65A0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page103 = { marc8_31page103_flat, 0 }; /* PAGE 102 */ struct yaz_iconv_trie_flat marc8_31page102_flat[] = { {"\x2A", 0, 0x64EF}, /* East Asian ideograph */ {"\x2D", 0, 0x64E1}, /* East Asian ideograph */ {"\x2E", 0, 0x64E5}, /* East Asian ideograph */ {"\x31", 0, 0x64EB}, /* East Asian ideograph */ {"\x33", 0, 0x64E2}, /* East Asian ideograph */ {"\x36", 0, 0x64ED}, /* East Asian ideograph */ {"\x38", 0, 0x64E4}, /* East Asian ideograph */ {"\x42", 0, 0x64F7}, /* East Asian ideograph */ {"\x46", 0, 0x6504}, /* East Asian ideograph */ {"\x4B", 0, 0x64FD}, /* East Asian ideograph */ {"\x4F", 0, 0x6508}, /* East Asian ideograph */ {"\x53", 0, 0x6509}, /* East Asian ideograph */ {"\x59", 0, 0x651A}, /* East Asian ideograph */ {"\x5B", 0, 0x6516}, /* East Asian ideograph */ {"\x61", 0, 0x651B}, /* East Asian ideograph */ {"\x69", 0, 0x6527}, /* East Asian ideograph */ {"\x6D", 0, 0x6522}, /* East Asian ideograph */ {"\x6F", 0, 0x6529}, /* East Asian ideograph */ {"\x72", 0, 0x6525}, /* East Asian ideograph */ {"\x77", 0, 0x652E}, /* East Asian ideograph */ {"\x7C", 0, 0x6541}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page102 = { marc8_31page102_flat, 0 }; /* PAGE 101 */ struct yaz_iconv_trie_flat marc8_31page101_flat[] = { {"\x23", 0, 0x644E}, /* East Asian ideograph */ {"\x24", 0, 0x6464}, /* East Asian ideograph */ {"\x27", 0, 0x6482}, /* East Asian ideograph */ {"\x28", 0, 0x645E}, /* East Asian ideograph */ {"\x2C", 0, 0x647B}, /* East Asian ideograph */ {"\x2E", 0, 0x645C}, /* East Asian ideograph */ {"\x3C", 0, 0x649D}, /* East Asian ideograph */ {"\x3F", 0, 0x6499}, /* East Asian ideograph */ {"\x42", 0, 0x648F}, /* East Asian ideograph */ {"\x4D", 0, 0x6496}, /* East Asian ideograph */ {"\x4E", 0, 0x64A2}, /* East Asian ideograph */ {"\x54", 0, 0x6490}, /* East Asian ideograph */ {"\x5B", 0, 0x64B6}, /* East Asian ideograph */ {"\x61", 0, 0x6498}, /* East Asian ideograph */ {"\x62", 0, 0x649F}, /* East Asian ideograph */ {"\x65", 0, 0x64A7}, /* East Asian ideograph */ {"\x66", 0, 0x64B3}, /* East Asian ideograph */ {"\x6A", 0, 0x64D7}, /* East Asian ideograph */ {"\x6C", 0, 0x64D3}, /* East Asian ideograph */ {"\x74", 0, 0x64BE}, /* East Asian ideograph */ {"\x75", 0, 0x64D0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page101 = { marc8_31page101_flat, 0 }; /* PAGE 100 */ struct yaz_iconv_trie_flat marc8_31page100_flat[] = { {"\x22", 0, 0x6410}, /* East Asian ideograph */ {"\x24", 0, 0x6434}, /* East Asian ideograph */ {"\x29", 0, 0x641B}, /* East Asian ideograph */ {"\x2B", 0, 0x6420}, /* East Asian ideograph */ {"\x2C", 0, 0x6424}, /* East Asian ideograph */ {"\x2F", 0, 0x6426}, /* East Asian ideograph */ {"\x31", 0, 0x640C}, /* East Asian ideograph */ {"\x36", 0, 0x6415}, /* East Asian ideograph */ {"\x37", 0, 0x6418}, /* East Asian ideograph */ {"\x38", 0, 0x640E}, /* East Asian ideograph */ {"\x39", 0, 0x22C4D}, /* East Asian ideograph (Unicode CJK Extension B) */ {"\x3B", 0, 0x6422}, /* East Asian ideograph */ {"\x3D", 0, 0x6421}, /* East Asian ideograph */ {"\x44", 0, 0x6430}, /* East Asian ideograph */ {"\x45", 0, 0x6441}, /* East Asian ideograph */ {"\x48", 0, 0x6435}, /* East Asian ideograph */ {"\x4C", 0, 0x6409}, /* East Asian ideograph */ {"\x51", 0, 0x640A}, /* East Asian ideograph */ {"\x53", 0, 0x6440}, /* East Asian ideograph */ {"\x59", 0, 0x6407}, /* East Asian ideograph */ {"\x5B", 0, 0x643B}, /* East Asian ideograph */ {"\x5D", 0, 0x643F}, /* East Asian ideograph */ {"\x68", 0, 0x645B}, /* East Asian ideograph */ {"\x6A", 0, 0x644F}, /* East Asian ideograph */ {"\x6C", 0, 0x646B}, /* East Asian ideograph */ {"\x6F", 0, 0x6476}, /* East Asian ideograph */ {"\x76", 0, 0x6474}, /* East Asian ideograph */ {"\x78", 0, 0x647D}, /* East Asian ideograph */ {"\x7B", 0, 0x6473}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page100 = { marc8_31page100_flat, 0 }; /* PAGE 99 */ struct yaz_iconv_trie_flat marc8_31page99_flat[] = { {"\x25", 0, 0x6387}, /* East Asian ideograph */ {"\x26", 0, 0x637A}, /* East Asian ideograph */ {"\x27", 0, 0x638E}, /* East Asian ideograph */ {"\x2A", 0, 0x6386}, /* East Asian ideograph */ {"\x2F", 0, 0x6375}, /* East Asian ideograph */ {"\x30", 0, 0x63AF}, /* East Asian ideograph */ {"\x37", 0, 0x63B1}, /* East Asian ideograph */ {"\x38", 0, 0x63B0}, /* East Asian ideograph */ {"\x39", 0, 0x63AE}, /* East Asian ideograph */ {"\x3A", 0, 0x637C}, /* East Asian ideograph */ {"\x3B", 0, 0x6390}, /* East Asian ideograph */ {"\x3D", 0, 0x63AD}, /* East Asian ideograph */ {"\x41", 0, 0x636D}, /* East Asian ideograph */ {"\x43", 0, 0x63DE}, /* East Asian ideograph */ {"\x44", 0, 0x63E5}, /* East Asian ideograph */ {"\x47", 0, 0x63D3}, /* East Asian ideograph */ {"\x4F", 0, 0x63BD}, /* East Asian ideograph */ {"\x50", 0, 0x63C3}, /* East Asian ideograph */ {"\x52", 0, 0x63F5}, /* East Asian ideograph */ {"\x58", 0, 0x63E6}, /* East Asian ideograph */ {"\x5B", 0, 0x63E0}, /* East Asian ideograph */ {"\x5C", 0, 0x63D5}, /* East Asian ideograph */ {"\x5D", 0, 0x63F6}, /* East Asian ideograph */ {"\x5E", 0, 0x63F2}, /* East Asian ideograph */ {"\x5F", 0, 0x63F8}, /* East Asian ideograph */ {"\x66", 0, 0x63C5}, /* East Asian ideograph */ {"\x6A", 0, 0x63F9}, /* East Asian ideograph */ {"\x70", 0, 0x63BE}, /* East Asian ideograph */ {"\x72", 0, 0x63EB}, /* East Asian ideograph */ {"\x73", 0, 0x63DD}, /* East Asian ideograph */ {"\x76", 0, 0x63D1}, /* East Asian ideograph */ {"\x79", 0, 0x63C4}, /* East Asian ideograph */ {"\x7A", 0, 0x63DC}, /* East Asian ideograph */ {"\x7B", 0, 0x63D7}, /* East Asian ideograph */ {"\x7E", 0, 0x6412}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page99 = { marc8_31page99_flat, 0 }; /* PAGE 98 */ struct yaz_iconv_trie_flat marc8_31page98_flat[] = { {"\x25", 0, 0x62F5}, /* East Asian ideograph */ {"\x31", 0, 0x630C}, /* East Asian ideograph */ {"\x32", 0, 0x6360}, /* East Asian ideograph */ {"\x37", 0, 0x62F6}, /* East Asian ideograph */ {"\x3A", 0, 0x6331}, /* East Asian ideograph */ {"\x42", 0, 0x6345}, /* East Asian ideograph */ {"\x44", 0, 0x6343}, /* East Asian ideograph */ {"\x45", 0, 0x6335}, /* East Asian ideograph */ {"\x47", 0, 0x6353}, /* East Asian ideograph */ {"\x48", 0, 0x6364}, /* East Asian ideograph */ {"\x49", 0, 0x6336}, /* East Asian ideograph */ {"\x4A", 0, 0x6344}, /* East Asian ideograph */ {"\x54", 0, 0x6339}, /* East Asian ideograph */ {"\x58", 0, 0x6357}, /* East Asian ideograph */ {"\x5A", 0, 0x633C}, /* East Asian ideograph */ {"\x5B", 0, 0x6358}, /* East Asian ideograph */ {"\x5C", 0, 0x634B}, /* East Asian ideograph */ {"\x5F", 0, 0x6354}, /* East Asian ideograph */ {"\x68", 0, 0x637D}, /* East Asian ideograph */ {"\x6A", 0, 0x63B6}, /* East Asian ideograph */ {"\x6B", 0, 0x6382}, /* East Asian ideograph */ {"\x6C", 0, 0x636C}, /* East Asian ideograph */ {"\x6E", 0, 0x639F}, /* East Asian ideograph */ {"\x72", 0, 0x639E}, /* East Asian ideograph */ {"\x73", 0, 0x637F}, /* East Asian ideograph */ {"\x79", 0, 0x6381}, /* East Asian ideograph */ {"\x7B", 0, 0x6397}, /* East Asian ideograph */ {"\x7D", 0, 0x63AB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page98 = { marc8_31page98_flat, 0 }; /* PAGE 97 */ struct yaz_iconv_trie_flat marc8_31page97_flat[] = { {"\x26", 0, 0x6268}, /* East Asian ideograph */ {"\x28", 0, 0x6260}, /* East Asian ideograph */ {"\x2B", 0, 0x625A}, /* East Asian ideograph */ {"\x2C", 0, 0x6262}, /* East Asian ideograph */ {"\x2D", 0, 0x6266}, /* East Asian ideograph */ {"\x31", 0, 0x6286}, /* East Asian ideograph */ {"\x32", 0, 0x628E}, /* East Asian ideograph */ {"\x41", 0, 0x62A3}, /* East Asian ideograph */ {"\x43", 0, 0x6282}, /* East Asian ideograph */ {"\x46", 0, 0x6285}, /* East Asian ideograph */ {"\x4B", 0, 0x629D}, /* East Asian ideograph */ {"\x56", 0, 0x62A6}, /* East Asian ideograph */ {"\x57", 0, 0x62D1}, /* East Asian ideograph */ {"\x61", 0, 0x62E4}, /* East Asian ideograph */ {"\x69", 0, 0x62B6}, /* East Asian ideograph */ {"\x6A", 0, 0x62C3}, /* East Asian ideograph */ {"\x72", 0, 0x630D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page97 = { marc8_31page97_flat, 0 }; /* PAGE 96 */ struct yaz_iconv_trie_flat marc8_31page96_flat[] = { {"\x29", 0, 0x61F3}, /* East Asian ideograph */ {"\x3D", 0, 0x6201}, /* East Asian ideograph */ {"\x41", 0, 0x6204}, /* East Asian ideograph */ {"\x43", 0, 0x6207}, /* East Asian ideograph */ {"\x44", 0, 0x6209}, /* East Asian ideograph */ {"\x47", 0, 0x6214}, /* East Asian ideograph */ {"\x56", 0, 0x6223}, /* East Asian ideograph */ {"\x5B", 0, 0x6225}, /* East Asian ideograph */ {"\x5D", 0, 0x6224}, /* East Asian ideograph */ {"\x61", 0, 0x6229}, /* East Asian ideograph */ {"\x67", 0, 0x622D}, /* East Asian ideograph */ {"\x69", 0, 0x97EF}, /* East Asian ideograph */ {"\x6E", 0, 0x6239}, /* East Asian ideograph */ {"\x6F", 0, 0x623A}, /* East Asian ideograph */ {"\x70", 0, 0x623D}, /* East Asian ideograph */ {"\x75", 0, 0x6243}, /* East Asian ideograph */ {"\x77", 0, 0x6246}, /* East Asian ideograph */ {"\x78", 0, 0x6245}, /* East Asian ideograph */ {"\x79", 0, 0x624A}, /* East Asian ideograph */ {"\x7A", 0, 0x6250}, /* East Asian ideograph */ {"\x7C", 0, 0x625E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page96 = { marc8_31page96_flat, 0 }; /* PAGE 95 */ struct yaz_iconv_trie_flat marc8_31page95_flat[] = { {"\x23", 0, 0x618B}, /* East Asian ideograph */ {"\x2C", 0, 0x616F}, /* East Asian ideograph */ {"\x2D", 0, 0x6165}, /* East Asian ideograph */ {"\x2F", 0, 0x615C}, /* East Asian ideograph */ {"\x32", 0, 0x619D}, /* East Asian ideograph */ {"\x33", 0, 0x61A6}, /* East Asian ideograph */ {"\x3D", 0, 0x61A2}, /* East Asian ideograph */ {"\x40", 0, 0x61A8}, /* East Asian ideograph */ {"\x42", 0, 0x619C}, /* East Asian ideograph */ {"\x43", 0, 0x61AF}, /* East Asian ideograph */ {"\x45", 0, 0x6196}, /* East Asian ideograph */ {"\x46", 0, 0x6197}, /* East Asian ideograph */ {"\x47", 0, 0x61AD}, /* East Asian ideograph */ {"\x4C", 0, 0x6192}, /* East Asian ideograph */ {"\x52", 0, 0x61AE}, /* East Asian ideograph */ {"\x55", 0, 0x618D}, /* East Asian ideograph */ {"\x5A", 0, 0x61CB}, /* East Asian ideograph */ {"\x5C", 0, 0x61CC}, /* East Asian ideograph */ {"\x5D", 0, 0x61C6}, /* East Asian ideograph */ {"\x68", 0, 0x61BA}, /* East Asian ideograph */ {"\x6A", 0, 0x61B8}, /* East Asian ideograph */ {"\x71", 0, 0x61E0}, /* East Asian ideograph */ {"\x77", 0, 0x61E5}, /* East Asian ideograph */ {"\x7D", 0, 0x61DC}, /* East Asian ideograph */ {"\x7E", 0, 0x61DF}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page95 = { marc8_31page95_flat, 0 }; /* PAGE 94 */ struct yaz_iconv_trie_flat marc8_31page94_flat[] = { {"\x2A", 0, 0x610A}, /* East Asian ideograph */ {"\x2C", 0, 0x6110}, /* East Asian ideograph */ {"\x32", 0, 0x6112}, /* East Asian ideograph */ {"\x34", 0, 0x60F2}, /* East Asian ideograph */ {"\x37", 0, 0x6125}, /* East Asian ideograph */ {"\x3B", 0, 0x60F8}, /* East Asian ideograph */ {"\x3F", 0, 0x6121}, /* East Asian ideograph */ {"\x41", 0, 0x60FC}, /* East Asian ideograph */ {"\x43", 0, 0x6106}, /* East Asian ideograph */ {"\x48", 0, 0x6149}, /* East Asian ideograph */ {"\x4A", 0, 0x614A}, /* East Asian ideograph */ {"\x4E", 0, 0x612B}, /* East Asian ideograph */ {"\x50", 0, 0x6129}, /* East Asian ideograph */ {"\x51", 0, 0x6150}, /* East Asian ideograph */ {"\x56", 0, 0x53AF}, /* East Asian ideograph */ {"\x58", 0, 0x6130}, /* East Asian ideograph */ {"\x5B", 0, 0x6141}, /* East Asian ideograph */ {"\x5E", 0, 0x6137}, /* East Asian ideograph */ {"\x61", 0, 0x6146}, /* East Asian ideograph */ {"\x66", 0, 0x615E}, /* East Asian ideograph */ {"\x67", 0, 0x6175}, /* East Asian ideograph */ {"\x68", 0, 0x6174}, /* East Asian ideograph */ {"\x6B", 0, 0x6183}, /* East Asian ideograph */ {"\x70", 0, 0x6171}, /* East Asian ideograph */ {"\x74", 0, 0x616A}, /* East Asian ideograph */ {"\x77", 0, 0x6173}, /* East Asian ideograph */ {"\x79", 0, 0x6164}, /* East Asian ideograph */ {"\x7B", 0, 0x6153}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page94 = { marc8_31page94_flat, 0 }; /* PAGE 93 */ struct yaz_iconv_trie_flat marc8_31page93_flat[] = { {"\x24", 0, 0x608A}, /* East Asian ideograph */ {"\x2B", 0, 0x6092}, /* East Asian ideograph */ {"\x2C", 0, 0x609D}, /* East Asian ideograph */ {"\x2D", 0, 0x6081}, /* East Asian ideograph */ {"\x2F", 0, 0x609E}, /* East Asian ideograph */ {"\x30", 0, 0x6083}, /* East Asian ideograph */ {"\x32", 0, 0x6097}, /* East Asian ideograph */ {"\x34", 0, 0x60A7}, /* East Asian ideograph */ {"\x3A", 0, 0x6095}, /* East Asian ideograph */ {"\x3E", 0, 0x60C7}, /* East Asian ideograph */ {"\x42", 0, 0x60B0}, /* East Asian ideograph */ {"\x46", 0, 0x60BE}, /* East Asian ideograph */ {"\x47", 0, 0x60D3}, /* East Asian ideograph */ {"\x48", 0, 0x60D4}, /* East Asian ideograph */ {"\x4E", 0, 0x60CE}, /* East Asian ideograph */ {"\x51", 0, 0x60CF}, /* East Asian ideograph */ {"\x53", 0, 0x60D9}, /* East Asian ideograph */ {"\x54", 0, 0x60B3}, /* East Asian ideograph */ {"\x56", 0, 0x60DD}, /* East Asian ideograph */ {"\x5D", 0, 0x60C4}, /* East Asian ideograph */ {"\x60", 0, 0x60B1}, /* East Asian ideograph */ {"\x62", 0, 0x60E3}, /* East Asian ideograph */ {"\x66", 0, 0x60E2}, /* East Asian ideograph */ {"\x67", 0, 0x60E5}, /* East Asian ideograph */ {"\x69", 0, 0x60DB}, /* East Asian ideograph */ {"\x6E", 0, 0x60E9}, /* East Asian ideograph */ {"\x70", 0, 0x6114}, /* East Asian ideograph */ {"\x73", 0, 0x6103}, /* East Asian ideograph */ {"\x75", 0, 0x6119}, /* East Asian ideograph */ {"\x7C", 0, 0x60FD}, /* East Asian ideograph */ {"\x7D", 0, 0x610D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page93 = { marc8_31page93_flat, 0 }; /* PAGE 92 */ struct yaz_iconv_trie_flat marc8_31page92_flat[] = { {"\x24", 0, 0x5FEA}, /* East Asian ideograph */ {"\x2A", 0, 0x6026}, /* East Asian ideograph */ {"\x2C", 0, 0x6029}, /* East Asian ideograph */ {"\x2D", 0, 0x602B}, /* East Asian ideograph */ {"\x30", 0, 0x6019}, /* East Asian ideograph */ {"\x31", 0, 0x6008}, /* East Asian ideograph */ {"\x36", 0, 0x600A}, /* East Asian ideograph */ {"\x37", 0, 0x600C}, /* East Asian ideograph */ {"\x38", 0, 0x601B}, /* East Asian ideograph */ {"\x3C", 0, 0x6017}, /* East Asian ideograph */ {"\x3D", 0, 0x6033}, /* East Asian ideograph */ {"\x45", 0, 0x600D}, /* East Asian ideograph */ {"\x46", 0, 0x6010}, /* East Asian ideograph */ {"\x4B", 0, 0x6039}, /* East Asian ideograph */ {"\x50", 0, 0x6013}, /* East Asian ideograph */ {"\x53", 0, 0x6054}, /* East Asian ideograph */ {"\x57", 0, 0x605D}, /* East Asian ideograph */ {"\x5A", 0, 0x6047}, /* East Asian ideograph */ {"\x5E", 0, 0x6049}, /* East Asian ideograph */ {"\x5F", 0, 0x6053}, /* East Asian ideograph */ {"\x68", 0, 0x6067}, /* East Asian ideograph */ {"\x6F", 0, 0x604C}, /* East Asian ideograph */ {"\x71", 0, 0x6041}, /* East Asian ideograph */ {"\x72", 0, 0x6077}, /* East Asian ideograph */ {"\x74", 0, 0x6042}, /* East Asian ideograph */ {"\x76", 0, 0x605F}, /* East Asian ideograph */ {"\x7A", 0, 0x6061}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page92 = { marc8_31page92_flat, 0 }; /* PAGE 91 */ struct yaz_iconv_trie_flat marc8_31page91_flat[] = { {"\x23", 0, 0x5F82}, /* East Asian ideograph */ {"\x27", 0, 0x5F89}, /* East Asian ideograph */ {"\x2B", 0, 0x5F94}, /* East Asian ideograph */ {"\x34", 0, 0x2251B}, /* East Asian ideograph (Unicode CJK Extension B) */ {"\x39", 0, 0x5F9C}, /* East Asian ideograph */ {"\x3D", 0, 0x5F9A}, /* East Asian ideograph */ {"\x46", 0, 0x5FAF}, /* East Asian ideograph */ {"\x50", 0, 0x5FBC}, /* East Asian ideograph */ {"\x57", 0, 0x5FC9}, /* East Asian ideograph */ {"\x5F", 0, 0x5FD1}, /* East Asian ideograph */ {"\x61", 0, 0x5FD2}, /* East Asian ideograph */ {"\x63", 0, 0x5FD0}, /* East Asian ideograph */ {"\x67", 0, 0x5FCE}, /* East Asian ideograph */ {"\x68", 0, 0x5FED}, /* East Asian ideograph */ {"\x72", 0, 0x5FEE}, /* East Asian ideograph */ {"\x73", 0, 0x5FF8}, /* East Asian ideograph */ {"\x78", 0, 0x5FE1}, /* East Asian ideograph */ {"\x7B", 0, 0x5FE4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page91 = { marc8_31page91_flat, 0 }; /* PAGE 90 */ struct yaz_iconv_trie_flat marc8_31page90_flat[] = { {"\x21", 0, 0x5EF1}, /* East Asian ideograph */ {"\x23", 0, 0x5EF4}, /* East Asian ideograph */ {"\x35", 0, 0x5F07}, /* East Asian ideograph */ {"\x3A", 0, 0x5F0B}, /* East Asian ideograph */ {"\x4A", 0, 0x5F28}, /* East Asian ideograph */ {"\x4B", 0, 0x5F22}, /* East Asian ideograph */ {"\x4C", 0, 0x5F23}, /* East Asian ideograph */ {"\x4D", 0, 0x5F24}, /* East Asian ideograph */ {"\x51", 0, 0x5F33}, /* East Asian ideograph */ {"\x52", 0, 0x5F30}, /* East Asian ideograph */ {"\x58", 0, 0x5F38}, /* East Asian ideograph */ {"\x5C", 0, 0x5F40}, /* East Asian ideograph */ {"\x5F", 0, 0x5F44}, /* East Asian ideograph */ {"\x62", 0, 0x5F4D}, /* East Asian ideograph */ {"\x68", 0, 0x5F50}, /* East Asian ideograph */ {"\x69", 0, 0x5F54}, /* East Asian ideograph */ {"\x6A", 0, 0x5F56}, /* East Asian ideograph */ {"\x6C", 0, 0x5F58}, /* East Asian ideograph */ {"\x70", 0, 0x5F60}, /* East Asian ideograph */ {"\x71", 0, 0x5F61}, /* East Asian ideograph */ {"\x72", 0, 0x5F63}, /* East Asian ideograph */ {"\x73", 0, 0x809C}, /* East Asian ideograph */ {"\x74", 0, 0x5F67}, /* East Asian ideograph */ {"\x78", 0, 0x5F72}, /* East Asian ideograph */ {"\x79", 0, 0x5F73}, /* East Asian ideograph */ {"\x7C", 0, 0x5F74}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page90 = { marc8_31page90_flat, 0 }; /* PAGE 89 */ struct yaz_iconv_trie_flat marc8_31page89_flat[] = { {"\x2F", 0, 0x5EA4}, /* East Asian ideograph */ {"\x35", 0, 0x5EA5}, /* East Asian ideograph */ {"\x36", 0, 0x5EAF}, /* East Asian ideograph */ {"\x42", 0, 0x5EB9}, /* East Asian ideograph */ {"\x4B", 0, 0x5EB3}, /* East Asian ideograph */ {"\x4C", 0, 0x5EC4}, /* East Asian ideograph */ {"\x51", 0, 0x5ECC}, /* East Asian ideograph */ {"\x55", 0, 0x5ECB}, /* East Asian ideograph */ {"\x57", 0, 0x5ECD}, /* East Asian ideograph */ {"\x5A", 0, 0x5ED2}, /* East Asian ideograph */ {"\x5B", 0, 0x5ED1}, /* East Asian ideograph */ {"\x5C", 0, 0x5ED5}, /* East Asian ideograph */ {"\x5F", 0, 0x5ED4}, /* East Asian ideograph */ {"\x60", 0, 0x5ED9}, /* East Asian ideograph */ {"\x61", 0, 0x5ECE}, /* East Asian ideograph */ {"\x68", 0, 0x5EE1}, /* East Asian ideograph */ {"\x6D", 0, 0x5EE7}, /* East Asian ideograph */ {"\x71", 0, 0x5EE8}, /* East Asian ideograph */ {"\x7C", 0, 0x5EED}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page89 = { marc8_31page89_flat, 0 }; /* PAGE 88 */ struct yaz_iconv_trie_flat marc8_31page88_flat[] = { {"\x22", 0, 0x5E22}, /* East Asian ideograph */ {"\x24", 0, 0x5E28}, /* East Asian ideograph */ {"\x35", 0, 0x5E44}, /* East Asian ideograph */ {"\x36", 0, 0x5E43}, /* East Asian ideograph */ {"\x39", 0, 0x5E42}, /* East Asian ideograph */ {"\x3F", 0, 0x5E4E}, /* East Asian ideograph */ {"\x47", 0, 0x5E58}, /* East Asian ideograph */ {"\x48", 0, 0x5E48}, /* East Asian ideograph */ {"\x57", 0, 0x5E5E}, /* East Asian ideograph */ {"\x58", 0, 0x5E61}, /* East Asian ideograph */ {"\x5D", 0, 0x5E68}, /* East Asian ideograph */ {"\x5F", 0, 0x5E6C}, /* East Asian ideograph */ {"\x60", 0, 0x5E6A}, /* East Asian ideograph */ {"\x63", 0, 0x5E6E}, /* East Asian ideograph */ {"\x64", 0, 0x5E6D}, /* East Asian ideograph */ {"\x65", 0, 0x5E70}, /* East Asian ideograph */ {"\x6D", 0, 0x5E75}, /* East Asian ideograph */ {"\x77", 0, 0x5E80}, /* East Asian ideograph */ {"\x7E", 0, 0x5E8B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page88 = { marc8_31page88_flat, 0 }; /* PAGE 87 */ struct yaz_iconv_trie_flat marc8_31page87_flat[] = { {"\x26", 0, 0x5DA7}, /* East Asian ideograph */ {"\x2A", 0, 0x5DB0}, /* East Asian ideograph */ {"\x2E", 0, 0x5DB4}, /* East Asian ideograph */ {"\x2F", 0, 0x5DAE}, /* East Asian ideograph */ {"\x30", 0, 0x5DB6}, /* East Asian ideograph */ {"\x32", 0, 0x5DB8}, /* East Asian ideograph */ {"\x34", 0, 0x5DBF}, /* East Asian ideograph */ {"\x36", 0, 0x5DB7}, /* East Asian ideograph */ {"\x3E", 0, 0x5DC3}, /* East Asian ideograph */ {"\x44", 0, 0x5DC7}, /* East Asian ideograph */ {"\x46", 0, 0x5DC9}, /* East Asian ideograph */ {"\x47", 0, 0x5DCB}, /* East Asian ideograph */ {"\x4E", 0, 0x5DD8}, /* East Asian ideograph */ {"\x50", 0, 0x5DDB}, /* East Asian ideograph */ {"\x52", 0, 0x5DDC}, /* East Asian ideograph */ {"\x56", 0, 0x5DE4}, /* East Asian ideograph */ {"\x62", 0, 0x5E00}, /* East Asian ideograph */ {"\x64", 0, 0x51E7}, /* East Asian ideograph */ {"\x72", 0, 0x5E14}, /* East Asian ideograph */ {"\x73", 0, 0x5E17}, /* East Asian ideograph */ {"\x76", 0, 0x5E19}, /* East Asian ideograph */ {"\x77", 0, 0x5E12}, /* East Asian ideograph */ {"\x78", 0, 0x5E1F}, /* East Asian ideograph */ {"\x7A", 0, 0x5E23}, /* East Asian ideograph */ {"\x7B", 0, 0x5E21}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page87 = { marc8_31page87_flat, 0 }; /* PAGE 86 */ struct yaz_iconv_trie_flat marc8_31page86_flat[] = { {"\x25", 0, 0x5D3F}, /* East Asian ideograph */ {"\x26", 0, 0x5D52}, /* East Asian ideograph */ {"\x27", 0, 0x5D3D}, /* East Asian ideograph */ {"\x28", 0, 0x5D4E}, /* East Asian ideograph */ {"\x2C", 0, 0x5D59}, /* East Asian ideograph */ {"\x2D", 0, 0x5D47}, /* East Asian ideograph */ {"\x2F", 0, 0x5D32}, /* East Asian ideograph */ {"\x31", 0, 0x5D42}, /* East Asian ideograph */ {"\x34", 0, 0x5D74}, /* East Asian ideograph */ {"\x39", 0, 0x5D6F}, /* East Asian ideograph */ {"\x3A", 0, 0x5D6B}, /* East Asian ideograph */ {"\x3F", 0, 0x5D75}, /* East Asian ideograph */ {"\x44", 0, 0x5D4A}, /* East Asian ideograph */ {"\x49", 0, 0x5D6C}, /* East Asian ideograph */ {"\x4A", 0, 0x5D62}, /* East Asian ideograph */ {"\x4D", 0, 0x5D82}, /* East Asian ideograph */ {"\x50", 0, 0x5D79}, /* East Asian ideograph */ {"\x51", 0, 0x5D8E}, /* East Asian ideograph */ {"\x5A", 0, 0x5D81}, /* East Asian ideograph */ {"\x60", 0, 0x5D7E}, /* East Asian ideograph */ {"\x66", 0, 0x5D92}, /* East Asian ideograph */ {"\x68", 0, 0x5D99}, /* East Asian ideograph */ {"\x69", 0, 0x5D97}, /* East Asian ideograph */ {"\x6A", 0, 0x5DA2}, /* East Asian ideograph */ {"\x73", 0, 0x5DA1}, /* East Asian ideograph */ {"\x75", 0, 0x5D93}, /* East Asian ideograph */ {"\x77", 0, 0x5DA0}, /* East Asian ideograph */ {"\x7B", 0, 0x5D94}, /* East Asian ideograph */ {"\x7E", 0, 0x5DAC}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page86 = { marc8_31page86_flat, 0 }; /* PAGE 85 */ struct yaz_iconv_trie_flat marc8_31page85_flat[] = { {"\x26", 0, 0x5CE0}, /* East Asian ideograph */ {"\x28", 0, 0x5CD2}, /* East Asian ideograph */ {"\x29", 0, 0x5CDD}, /* East Asian ideograph */ {"\x2B", 0, 0x5CCB}, /* East Asian ideograph */ {"\x30", 0, 0x5CC7}, /* East Asian ideograph */ {"\x31", 0, 0x5CDC}, /* East Asian ideograph */ {"\x34", 0, 0x5D00}, /* East Asian ideograph */ {"\x3B", 0, 0x5CFF}, /* East Asian ideograph */ {"\x3C", 0, 0x5CEB}, /* East Asian ideograph */ {"\x41", 0, 0x5CF4}, /* East Asian ideograph */ {"\x46", 0, 0x5CF1}, /* East Asian ideograph */ {"\x49", 0, 0x5D1E}, /* East Asian ideograph */ {"\x4A", 0, 0x5D12}, /* East Asian ideograph */ {"\x50", 0, 0x5D1A}, /* East Asian ideograph */ {"\x52", 0, 0x5D0C}, /* East Asian ideograph */ {"\x53", 0, 0x5D20}, /* East Asian ideograph */ {"\x54", 0, 0x5D21}, /* East Asian ideograph */ {"\x57", 0, 0x5D27}, /* East Asian ideograph */ {"\x58", 0, 0x5D0D}, /* East Asian ideograph */ {"\x5A", 0, 0x5D26}, /* East Asian ideograph */ {"\x5D", 0, 0x5D2E}, /* East Asian ideograph */ {"\x69", 0, 0x5D24}, /* East Asian ideograph */ {"\x71", 0, 0x5D36}, /* East Asian ideograph */ {"\x72", 0, 0x5D3E}, /* East Asian ideograph */ {"\x74", 0, 0x5D4B}, /* East Asian ideograph */ {"\x76", 0, 0x5D57}, /* East Asian ideograph */ {"\x77", 0, 0x5D34}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page85 = { marc8_31page85_flat, 0 }; /* PAGE 84 */ struct yaz_iconv_trie_flat marc8_31page84_flat[] = { {"\x23", 0, 0x5C63}, /* East Asian ideograph */ {"\x29", 0, 0x5C67}, /* East Asian ideograph */ {"\x2B", 0, 0x5C68}, /* East Asian ideograph */ {"\x30", 0, 0x5C6D}, /* East Asian ideograph */ {"\x31", 0, 0x5C6E}, /* East Asian ideograph */ {"\x37", 0, 0x5C74}, /* East Asian ideograph */ {"\x39", 0, 0x5C73}, /* East Asian ideograph */ {"\x3B", 0, 0x5C77}, /* East Asian ideograph */ {"\x3C", 0, 0x5C7A}, /* East Asian ideograph */ {"\x40", 0, 0x5C7C}, /* East Asian ideograph */ {"\x46", 0, 0x5C8F}, /* East Asian ideograph */ {"\x49", 0, 0x5C88}, /* East Asian ideograph */ {"\x4B", 0, 0x5C8D}, /* East Asian ideograph */ {"\x4D", 0, 0x5C99}, /* East Asian ideograph */ {"\x55", 0, 0x5CA6}, /* East Asian ideograph */ {"\x57", 0, 0x5CA0}, /* East Asian ideograph */ {"\x5C", 0, 0x5CA2}, /* East Asian ideograph */ {"\x60", 0, 0x5CB5}, /* East Asian ideograph */ {"\x61", 0, 0x5CA7}, /* East Asian ideograph */ {"\x66", 0, 0x5CA8}, /* East Asian ideograph */ {"\x67", 0, 0x5CAC}, /* East Asian ideograph */ {"\x6B", 0, 0x5CA3}, /* East Asian ideograph */ {"\x6C", 0, 0x5CB6}, /* East Asian ideograph */ {"\x6D", 0, 0x5CC1}, /* East Asian ideograph */ {"\x6F", 0, 0x5CAD}, /* East Asian ideograph */ {"\x70", 0, 0x5CD5}, /* East Asian ideograph */ {"\x78", 0, 0x5CD3}, /* East Asian ideograph */ {"\x79", 0, 0x5C8D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page84 = { marc8_31page84_flat, 0 }; /* PAGE 83 */ struct yaz_iconv_trie_flat marc8_31page83_flat[] = { {"\x24", 0, 0x5BF0}, /* East Asian ideograph */ {"\x25", 0, 0x5BEF}, /* East Asian ideograph */ {"\x33", 0, 0x5C00}, /* East Asian ideograph */ {"\x35", 0, 0x5C57}, /* East Asian ideograph */ {"\x3C", 0, 0x5C15}, /* East Asian ideograph */ {"\x46", 0, 0x5C22}, /* East Asian ideograph */ {"\x48", 0, 0x5C25}, /* East Asian ideograph */ {"\x4B", 0, 0x5C2A}, /* East Asian ideograph */ {"\x52", 0, 0x5C2F}, /* East Asian ideograph */ {"\x5B", 0, 0x5C32}, /* East Asian ideograph */ {"\x63", 0, 0x5C3B}, /* East Asian ideograph */ {"\x65", 0, 0x5C44}, /* East Asian ideograph */ {"\x67", 0, 0x5C49}, /* East Asian ideograph */ {"\x79", 0, 0x5C59}, /* East Asian ideograph */ {"\x7B", 0, 0x5C5D}, /* East Asian ideograph */ {"\x7C", 0, 0x5C5F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page83 = { marc8_31page83_flat, 0 }; /* PAGE 82 */ struct yaz_iconv_trie_dir marc8_31page82_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {84, 0, 0}, {85, 0, 0}, {86, 0, 0}, {87, 0, 0}, {88, 0, 0}, {89, 0, 0}, {90, 0, 0}, {91, 0, 0}, {92, 0, 0}, {93, 0, 0}, {94, 0, 0}, {95, 0, 0}, {96, 0, 0}, {97, 0, 0}, {98, 0, 0}, {99, 0, 0}, {100, 0, 0}, {101, 0, 0}, {102, 0, 0}, {103, 0, 0}, {104, 0, 0}, {105, 0, 0}, {106, 0, 0}, {107, 0, 0}, {108, 0, 0}, {109, 0, 0}, {110, 0, 0}, {111, 0, 0}, {112, 0, 0}, {113, 0, 0}, {114, 0, 0}, {115, 0, 0}, {116, 0, 0}, {117, 0, 0}, {118, 0, 0}, {119, 0, 0}, {120, 0, 0}, {121, 0, 0}, {122, 0, 0}, {123, 0, 0}, {124, 0, 0}, {125, 0, 0}, {126, 0, 0}, {127, 0, 0}, {128, 0, 0}, {129, 0, 0}, {130, 0, 0}, {131, 0, 0}, {132, 0, 0}, {133, 0, 0}, {134, 0, 0}, {135, 0, 0}, {136, 0, 0}, {137, 0, 0}, {138, 0, 0}, {139, 0, 0}, {140, 0, 0}, {141, 0, 0}, {142, 0, 0}, {143, 0, 0}, {144, 0, 0}, {145, 0, 0}, {146, 0, 0}, {147, 0, 0}, {148, 0, 0}, {149, 0, 0}, {150, 0, 0}, {151, 0, 0}, {152, 0, 0}, {153, 0, 0}, {154, 0, 0}, {155, 0, 0}, {156, 0, 0}, {157, 0, 0}, {158, 0, 0}, {159, 0, 0}, {160, 0, 0}, {161, 0, 0}, {162, 0, 0}, {163, 0, 0}, {164, 0, 0}, {165, 0, 0}, {166, 0, 0}, {167, 0, 0}, {168, 0, 0}, {169, 0, 0}, {170, 0, 0}, {171, 0, 0}, {172, 0, 0}, {173, 0, 0}, {174, 0, 0}, {175, 0, 0}, {176, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page82 = { 0, marc8_31page82_dir }; /* PAGE 81 */ struct yaz_iconv_trie_flat marc8_31page81_flat[] = { {"\x21", 0, 0x5B5B}, /* East Asian ideograph */ {"\x23", 0, 0x5B62}, /* East Asian ideograph */ {"\x24", 0, 0x5B65}, /* East Asian ideograph */ {"\x25", 0, 0x5B67}, /* East Asian ideograph */ {"\x27", 0, 0x5C58}, /* East Asian ideograph */ {"\x28", 0, 0x5B6C}, /* East Asian ideograph */ {"\x2A", 0, 0x5B6E}, /* East Asian ideograph */ {"\x30", 0, 0x5B7B}, /* East Asian ideograph */ {"\x31", 0, 0x5B7C}, /* East Asian ideograph */ {"\x32", 0, 0x5B80}, /* East Asian ideograph */ {"\x34", 0, 0x5B84}, /* East Asian ideograph */ {"\x35", 0, 0x5B82}, /* East Asian ideograph */ {"\x40", 0, 0x5B95}, /* East Asian ideograph */ {"\x43", 0, 0x5B93}, /* East Asian ideograph */ {"\x49", 0, 0x5BAC}, /* East Asian ideograph */ {"\x52", 0, 0x5BA7}, /* East Asian ideograph */ {"\x55", 0, 0x5BB7}, /* East Asian ideograph */ {"\x59", 0, 0x5BC1}, /* East Asian ideograph */ {"\x5B", 0, 0x3761}, /* East Asian ideograph (Unicode CJK Extension A) */ {"\x60", 0, 0x5BC9}, /* East Asian ideograph */ {"\x68", 0, 0x5BD4}, /* East Asian ideograph */ {"\x6A", 0, 0x5BC3}, /* East Asian ideograph */ {"\x6E", 0, 0x5BD6}, /* East Asian ideograph */ {"\x75", 0, 0x5BD7}, /* East Asian ideograph */ {"\x79", 0, 0x5BE0}, /* East Asian ideograph */ {"\x7E", 0, 0x5BEA}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page81 = { marc8_31page81_flat, 0 }; /* PAGE 80 */ struct yaz_iconv_trie_flat marc8_31page80_flat[] = { {"\x26", 0, 0x5AFF}, /* East Asian ideograph */ {"\x2A", 0, 0x5AFD}, /* East Asian ideograph */ {"\x2B", 0, 0x5B08}, /* East Asian ideograph */ {"\x2E", 0, 0x5B0D}, /* East Asian ideograph */ {"\x38", 0, 0x5B03}, /* East Asian ideograph */ {"\x3D", 0, 0x5B17}, /* East Asian ideograph */ {"\x3E", 0, 0x5B16}, /* East Asian ideograph */ {"\x40", 0, 0x5B19}, /* East Asian ideograph */ {"\x47", 0, 0x5B1B}, /* East Asian ideograph */ {"\x48", 0, 0x5B21}, /* East Asian ideograph */ {"\x52", 0, 0x5B2C}, /* East Asian ideograph */ {"\x59", 0, 0x5B32}, /* East Asian ideograph */ {"\x63", 0, 0x5B3F}, /* East Asian ideograph */ {"\x6E", 0, 0x5B45}, /* East Asian ideograph */ {"\x74", 0, 0x5B4C}, /* East Asian ideograph */ {"\x76", 0, 0x5B4B}, /* East Asian ideograph */ {"\x7C", 0, 0x5B56}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page80 = { marc8_31page80_flat, 0 }; /* PAGE 79 */ struct yaz_iconv_trie_flat marc8_31page79_flat[] = { {"\x21", 0, 0x5AA6}, /* East Asian ideograph */ {"\x22", 0, 0x5A8C}, /* East Asian ideograph */ {"\x24", 0, 0x5AA7}, /* East Asian ideograph */ {"\x25", 0, 0x5A9E}, /* East Asian ideograph */ {"\x26", 0, 0x5AA2}, /* East Asian ideograph */ {"\x27", 0, 0x5A9C}, /* East Asian ideograph */ {"\x28", 0, 0x5A7C}, /* East Asian ideograph */ {"\x29", 0, 0x5A96}, /* East Asian ideograph */ {"\x30", 0, 0x5A93}, /* East Asian ideograph */ {"\x31", 0, 0x5AAC}, /* East Asian ideograph */ {"\x34", 0, 0x5AAE}, /* East Asian ideograph */ {"\x35", 0, 0x5A95}, /* East Asian ideograph */ {"\x36", 0, 0x5AAF}, /* East Asian ideograph */ {"\x39", 0, 0x5AC8}, /* East Asian ideograph */ {"\x3E", 0, 0x5AB5}, /* East Asian ideograph */ {"\x41", 0, 0x5AC4}, /* East Asian ideograph */ {"\x45", 0, 0x5AB7}, /* East Asian ideograph */ {"\x49", 0, 0x5AD1}, /* East Asian ideograph */ {"\x4A", 0, 0x5A90}, /* East Asian ideograph */ {"\x4F", 0, 0x5AB8}, /* East Asian ideograph */ {"\x50", 0, 0x5ABA}, /* East Asian ideograph */ {"\x52", 0, 0x5AAA}, /* East Asian ideograph */ {"\x59", 0, 0x5AD3}, /* East Asian ideograph */ {"\x5B", 0, 0x5AB1}, /* East Asian ideograph */ {"\x60", 0, 0x5ADC}, /* East Asian ideograph */ {"\x6D", 0, 0x5AE5}, /* East Asian ideograph */ {"\x6E", 0, 0x5AE0}, /* East Asian ideograph */ {"\x72", 0, 0x5AEA}, /* East Asian ideograph */ {"\x7B", 0, 0x5ADA}, /* East Asian ideograph */ {"\x7C", 0, 0x5AEB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page79 = { marc8_31page79_flat, 0 }; /* PAGE 78 */ struct yaz_iconv_trie_flat marc8_31page78_flat[] = { {"\x2C", 0, 0x5A60}, /* East Asian ideograph */ {"\x31", 0, 0x5A67}, /* East Asian ideograph */ {"\x3A", 0, 0x5A38}, /* East Asian ideograph */ {"\x3B", 0, 0x5A5E}, /* East Asian ideograph */ {"\x3C", 0, 0x5A6D}, /* East Asian ideograph */ {"\x3D", 0, 0x5A35}, /* East Asian ideograph */ {"\x3E", 0, 0x5A55}, /* East Asian ideograph */ {"\x41", 0, 0x5A2C}, /* East Asian ideograph */ {"\x48", 0, 0x5A50}, /* East Asian ideograph */ {"\x49", 0, 0x5A65}, /* East Asian ideograph */ {"\x52", 0, 0x5A64}, /* East Asian ideograph */ {"\x65", 0, 0x5A8A}, /* East Asian ideograph */ {"\x69", 0, 0x5ACF}, /* East Asian ideograph */ {"\x6A", 0, 0x5A7A}, /* East Asian ideograph */ {"\x71", 0, 0x5A9F}, /* East Asian ideograph */ {"\x75", 0, 0x5AA0}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page78 = { marc8_31page78_flat, 0 }; /* PAGE 77 */ struct yaz_iconv_trie_flat marc8_31page77_flat[] = { {"\x21", 0, 0x5990}, /* East Asian ideograph */ {"\x24", 0, 0x59C5}, /* East Asian ideograph */ {"\x25", 0, 0x59B5}, /* East Asian ideograph */ {"\x28", 0, 0x59CF}, /* East Asian ideograph */ {"\x2A", 0, 0x59BA}, /* East Asian ideograph */ {"\x2C", 0, 0x59B8}, /* East Asian ideograph */ {"\x35", 0, 0x59B2}, /* East Asian ideograph */ {"\x3A", 0, 0x59B7}, /* East Asian ideograph */ {"\x3E", 0, 0x59C1}, /* East Asian ideograph */ {"\x43", 0, 0x59F9}, /* East Asian ideograph */ {"\x44", 0, 0x59F8}, /* East Asian ideograph */ {"\x4F", 0, 0x59EE}, /* East Asian ideograph */ {"\x50", 0, 0x59F1}, /* East Asian ideograph */ {"\x51", 0, 0x5A00}, /* East Asian ideograph */ {"\x52", 0, 0x59DE}, /* East Asian ideograph */ {"\x56", 0, 0x59FD}, /* East Asian ideograph */ {"\x5D", 0, 0x59F6}, /* East Asian ideograph */ {"\x5E", 0, 0x59DD}, /* East Asian ideograph */ {"\x5F", 0, 0x59FA}, /* East Asian ideograph */ {"\x61", 0, 0x59E4}, /* East Asian ideograph */ {"\x6E", 0, 0x5A2A}, /* East Asian ideograph */ {"\x75", 0, 0x5A16}, /* East Asian ideograph */ {"\x78", 0, 0x5A09}, /* East Asian ideograph */ {"\x7E", 0, 0x5A12}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page77 = { marc8_31page77_flat, 0 }; /* PAGE 76 */ struct yaz_iconv_trie_flat marc8_31page76_flat[] = { {"\x28", 0, 0x592C}, /* East Asian ideograph */ {"\x2B", 0, 0x592F}, /* East Asian ideograph */ {"\x30", 0, 0x593C}, /* East Asian ideograph */ {"\x33", 0, 0x5940}, /* East Asian ideograph */ {"\x38", 0, 0x594D}, /* East Asian ideograph */ {"\x43", 0, 0x5953}, /* East Asian ideograph */ {"\x4B", 0, 0x595C}, /* East Asian ideograph */ {"\x4F", 0, 0x5961}, /* East Asian ideograph */ {"\x54", 0, 0x596C}, /* East Asian ideograph */ {"\x55", 0, 0x596D}, /* East Asian ideograph */ {"\x65", 0, 0x597C}, /* East Asian ideograph */ {"\x69", 0, 0x59A7}, /* East Asian ideograph */ {"\x6B", 0, 0x5998}, /* East Asian ideograph */ {"\x6F", 0, 0x599A}, /* East Asian ideograph */ {"\x71", 0, 0x59A0}, /* East Asian ideograph */ {"\x7C", 0, 0x5997}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page76 = { marc8_31page76_flat, 0 }; /* PAGE 75 */ struct yaz_iconv_trie_flat marc8_31page75_flat[] = { {"\x24", 0, 0x58B1}, /* East Asian ideograph */ {"\x2B", 0, 0x58AD}, /* East Asian ideograph */ {"\x2E", 0, 0x58A0}, /* East Asian ideograph */ {"\x30", 0, 0x58A3}, /* East Asian ideograph */ {"\x32", 0, 0x58A6}, /* East Asian ideograph */ {"\x3A", 0, 0x58C8}, /* East Asian ideograph */ {"\x41", 0, 0x58BC}, /* East Asian ideograph */ {"\x49", 0, 0x58BF}, /* East Asian ideograph */ {"\x4B", 0, 0x58C6}, /* East Asian ideograph */ {"\x4C", 0, 0x58BA}, /* East Asian ideograph */ {"\x50", 0, 0x58D6}, /* East Asian ideograph */ {"\x54", 0, 0x58D2}, /* East Asian ideograph */ {"\x56", 0, 0x58CE}, /* East Asian ideograph */ {"\x5A", 0, 0x58E0}, /* East Asian ideograph */ {"\x5E", 0, 0x58DA}, /* East Asian ideograph */ {"\x6C", 0, 0x58FC}, /* East Asian ideograph */ {"\x70", 0, 0x5902}, /* East Asian ideograph */ {"\x73", 0, 0x5906}, /* East Asian ideograph */ {"\x74", 0, 0x6535}, /* East Asian ideograph */ {"\x7A", 0, 0x5910}, /* East Asian ideograph */ {"\x7C", 0, 0x8641}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page75 = { marc8_31page75_flat, 0 }; /* PAGE 74 */ struct yaz_iconv_trie_flat marc8_31page74_flat[] = { {"\x21", 0, 0x5848}, /* East Asian ideograph */ {"\x23", 0, 0x5818}, /* East Asian ideograph */ {"\x26", 0, 0x57F5}, /* East Asian ideograph */ {"\x29", 0, 0x582D}, /* East Asian ideograph */ {"\x2B", 0, 0x5820}, /* East Asian ideograph */ {"\x30", 0, 0x584E}, /* East Asian ideograph */ {"\x33", 0, 0x585D}, /* East Asian ideograph */ {"\x35", 0, 0x5859}, /* East Asian ideograph */ {"\x37", 0, 0x584B}, /* East Asian ideograph */ {"\x3D", 0, 0x5865}, /* East Asian ideograph */ {"\x40", 0, 0x586C}, /* East Asian ideograph */ {"\x42", 0, 0x5852}, /* East Asian ideograph */ {"\x45", 0, 0x5864}, /* East Asian ideograph */ {"\x47", 0, 0x5853}, /* East Asian ideograph */ {"\x48", 0, 0x584F}, /* East Asian ideograph */ {"\x49", 0, 0x583D}, /* East Asian ideograph */ {"\x4D", 0, 0x584D}, /* East Asian ideograph */ {"\x4E", 0, 0x5856}, /* East Asian ideograph */ {"\x55", 0, 0x589A}, /* East Asian ideograph */ {"\x58", 0, 0x5892}, /* East Asian ideograph */ {"\x5A", 0, 0x588E}, /* East Asian ideograph */ {"\x5C", 0, 0x5889}, /* East Asian ideograph */ {"\x5F", 0, 0x5840}, /* East Asian ideograph */ {"\x60", 0, 0x589B}, /* East Asian ideograph */ {"\x61", 0, 0x587C}, /* East Asian ideograph */ {"\x63", 0, 0x5888}, /* East Asian ideograph */ {"\x65", 0, 0x5890}, /* East Asian ideograph */ {"\x68", 0, 0x5898}, /* East Asian ideograph */ {"\x6B", 0, 0x587D}, /* East Asian ideograph */ {"\x6F", 0, 0x587F}, /* East Asian ideograph */ {"\x70", 0, 0x5881}, /* East Asian ideograph */ {"\x7B", 0, 0x58A9}, /* East Asian ideograph */ {"\x7E", 0, 0x58A1}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page74 = { marc8_31page74_flat, 0 }; /* PAGE 73 */ struct yaz_iconv_trie_flat marc8_31page73_flat[] = { {"\x22", 0, 0x57C4}, /* East Asian ideograph */ {"\x27", 0, 0x70FE}, /* East Asian ideograph */ {"\x29", 0, 0x57E3}, /* East Asian ideograph */ {"\x2A", 0, 0x57FB}, /* East Asian ideograph */ {"\x2B", 0, 0x5803}, /* East Asian ideograph */ {"\x2C", 0, 0x57F6}, /* East Asian ideograph */ {"\x2D", 0, 0x57E6}, /* East Asian ideograph */ {"\x31", 0, 0x57ED}, /* East Asian ideograph */ {"\x33", 0, 0x5800}, /* East Asian ideograph */ {"\x35", 0, 0x57EC}, /* East Asian ideograph */ {"\x36", 0, 0x5807}, /* East Asian ideograph */ {"\x39", 0, 0x580E}, /* East Asian ideograph */ {"\x3B", 0, 0x580F}, /* East Asian ideograph */ {"\x3D", 0, 0x57F4}, /* East Asian ideograph */ {"\x3E", 0, 0x5810}, /* East Asian ideograph */ {"\x40", 0, 0x580D}, /* East Asian ideograph */ {"\x43", 0, 0x57EF}, /* East Asian ideograph */ {"\x48", 0, 0x5801}, /* East Asian ideograph */ {"\x49", 0, 0x5812}, /* East Asian ideograph */ {"\x4D", 0, 0x57FD}, /* East Asian ideograph */ {"\x4E", 0, 0x57F8}, /* East Asian ideograph */ {"\x50", 0, 0x580C}, /* East Asian ideograph */ {"\x51", 0, 0x5813}, /* East Asian ideograph */ {"\x52", 0, 0x57F0}, /* East Asian ideograph */ {"\x56", 0, 0x580B}, /* East Asian ideograph */ {"\x58", 0, 0x57F3}, /* East Asian ideograph */ {"\x59", 0, 0x5804}, /* East Asian ideograph */ {"\x5A", 0, 0x57CF}, /* East Asian ideograph */ {"\x5B", 0, 0x57DD}, /* East Asian ideograph */ {"\x5F", 0, 0x5847}, /* East Asian ideograph */ {"\x67", 0, 0x581B}, /* East Asian ideograph */ {"\x69", 0, 0x5819}, /* East Asian ideograph */ {"\x6A", 0, 0x5833}, /* East Asian ideograph */ {"\x6C", 0, 0x581E}, /* East Asian ideograph */ {"\x6D", 0, 0x583F}, /* East Asian ideograph */ {"\x71", 0, 0x5827}, /* East Asian ideograph */ {"\x76", 0, 0x5828}, /* East Asian ideograph */ {"\x78", 0, 0x582E}, /* East Asian ideograph */ {"\x7A", 0, 0x581D}, /* East Asian ideograph */ {"\x7D", 0, 0x5844}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page73 = { marc8_31page73_flat, 0 }; /* PAGE 72 */ struct yaz_iconv_trie_flat marc8_31page72_flat[] = { {"\x26", 0, 0x5770}, /* East Asian ideograph */ {"\x28", 0, 0x5771}, /* East Asian ideograph */ {"\x2A", 0, 0x576E}, /* East Asian ideograph */ {"\x2D", 0, 0x5776}, /* East Asian ideograph */ {"\x2E", 0, 0x5789}, /* East Asian ideograph */ {"\x30", 0, 0x577F}, /* East Asian ideograph */ {"\x31", 0, 0x5775}, /* East Asian ideograph */ {"\x32", 0, 0x577B}, /* East Asian ideograph */ {"\x33", 0, 0x5788}, /* East Asian ideograph */ {"\x35", 0, 0x5773}, /* East Asian ideograph */ {"\x38", 0, 0x579F}, /* East Asian ideograph */ {"\x39", 0, 0x5790}, /* East Asian ideograph */ {"\x3A", 0, 0x5793}, /* East Asian ideograph */ {"\x3F", 0, 0x579E}, /* East Asian ideograph */ {"\x40", 0, 0x57B5}, /* East Asian ideograph */ {"\x43", 0, 0x579A}, /* East Asian ideograph */ {"\x45", 0, 0x5794}, /* East Asian ideograph */ {"\x47", 0, 0x57A4}, /* East Asian ideograph */ {"\x48", 0, 0x5799}, /* East Asian ideograph */ {"\x49", 0, 0x578C}, /* East Asian ideograph */ {"\x4B", 0, 0x5797}, /* East Asian ideograph */ {"\x4E", 0, 0x579D}, /* East Asian ideograph */ {"\x52", 0, 0x579C}, /* East Asian ideograph */ {"\x54", 0, 0x57A7}, /* East Asian ideograph */ {"\x57", 0, 0x57A1}, /* East Asian ideograph */ {"\x59", 0, 0x212C4}, /* East Asian ideograph (Unicode CJK Extension B) */ {"\x5B", 0, 0x5795}, /* East Asian ideograph */ {"\x5F", 0, 0x57B8}, /* East Asian ideograph */ {"\x60", 0, 0x57C7}, /* East Asian ideograph */ {"\x6A", 0, 0x5809}, /* East Asian ideograph */ {"\x6C", 0, 0x57BE}, /* East Asian ideograph */ {"\x71", 0, 0x57DB}, /* East Asian ideograph */ {"\x73", 0, 0x57D5}, /* East Asian ideograph */ {"\x77", 0, 0x57D2}, /* East Asian ideograph */ {"\x7E", 0, 0x57C6}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page72 = { marc8_31page72_flat, 0 }; /* PAGE 71 */ struct yaz_iconv_trie_flat marc8_31page71_flat[] = { {"\x21", 0, 0x56F9}, /* East Asian ideograph */ {"\x24", 0, 0x56FF}, /* East Asian ideograph */ {"\x27", 0, 0x5705}, /* East Asian ideograph */ {"\x28", 0, 0x5704}, /* East Asian ideograph */ {"\x29", 0, 0x5702}, /* East Asian ideograph */ {"\x2C", 0, 0x570A}, /* East Asian ideograph */ {"\x2D", 0, 0x5709}, /* East Asian ideograph */ {"\x2E", 0, 0x5707}, /* East Asian ideograph */ {"\x30", 0, 0x570C}, /* East Asian ideograph */ {"\x31", 0, 0x5715}, /* East Asian ideograph */ {"\x32", 0, 0x5714}, /* East Asian ideograph */ {"\x35", 0, 0x571A}, /* East Asian ideograph */ {"\x36", 0, 0x571B}, /* East Asian ideograph */ {"\x37", 0, 0x571C}, /* East Asian ideograph */ {"\x39", 0, 0x571D}, /* East Asian ideograph */ {"\x3A", 0, 0x571E}, /* East Asian ideograph */ {"\x41", 0, 0x5724}, /* East Asian ideograph */ {"\x42", 0, 0x572E}, /* East Asian ideograph */ {"\x43", 0, 0x5729}, /* East Asian ideograph */ {"\x48", 0, 0x5738}, /* East Asian ideograph */ {"\x4C", 0, 0x572A}, /* East Asian ideograph */ {"\x63", 0, 0x5749}, /* East Asian ideograph */ {"\x65", 0, 0x5745}, /* East Asian ideograph */ {"\x68", 0, 0x574B}, /* East Asian ideograph */ {"\x69", 0, 0x574C}, /* East Asian ideograph */ {"\x6A", 0, 0x573F}, /* East Asian ideograph */ {"\x70", 0, 0x5768}, /* East Asian ideograph */ {"\x75", 0, 0x578A}, /* East Asian ideograph */ {"\x77", 0, 0x576D}, /* East Asian ideograph */ {"\x79", 0, 0x5774}, /* East Asian ideograph */ {"\x7A", 0, 0x5767}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page71 = { marc8_31page71_flat, 0 }; /* PAGE 70 */ struct yaz_iconv_trie_flat marc8_31page70_flat[] = { {"\x25", 0, 0x5693}, /* East Asian ideograph */ {"\x28", 0, 0x568C}, /* East Asian ideograph */ {"\x32", 0, 0x56BA}, /* East Asian ideograph */ {"\x34", 0, 0x5686}, /* East Asian ideograph */ {"\x35", 0, 0x5684}, /* East Asian ideograph */ {"\x36", 0, 0x5691}, /* East Asian ideograph */ {"\x37", 0, 0x568A}, /* East Asian ideograph */ {"\x3E", 0, 0x569E}, /* East Asian ideograph */ {"\x41", 0, 0x569C}, /* East Asian ideograph */ {"\x42", 0, 0x569A}, /* East Asian ideograph */ {"\x45", 0, 0x5699}, /* East Asian ideograph */ {"\x4B", 0, 0x56AD}, /* East Asian ideograph */ {"\x4C", 0, 0x56A6}, /* East Asian ideograph */ {"\x4E", 0, 0x56AC}, /* East Asian ideograph */ {"\x53", 0, 0x56B2}, /* East Asian ideograph */ {"\x5A", 0, 0x56B3}, /* East Asian ideograph */ {"\x5B", 0, 0x56C3}, /* East Asian ideograph */ {"\x60", 0, 0x56C5}, /* East Asian ideograph */ {"\x62", 0, 0x56CF}, /* East Asian ideograph */ {"\x67", 0, 0x56CD}, /* East Asian ideograph */ {"\x6A", 0, 0x56D4}, /* East Asian ideograph */ {"\x6B", 0, 0x56D7}, /* East Asian ideograph */ {"\x6D", 0, 0x56DD}, /* East Asian ideograph */ {"\x6F", 0, 0x56E1}, /* East Asian ideograph */ {"\x70", 0, 0x56DF}, /* East Asian ideograph */ {"\x75", 0, 0x56EB}, /* East Asian ideograph */ {"\x76", 0, 0x56EE}, /* East Asian ideograph */ {"\x77", 0, 0x56E7}, /* East Asian ideograph */ {"\x79", 0, 0x56FB}, /* East Asian ideograph */ {"\x7E", 0, 0x56F7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page70 = { marc8_31page70_flat, 0 }; /* PAGE 69 */ struct yaz_iconv_trie_flat marc8_31page69_flat[] = { {"\x24", 0, 0x55FB}, /* East Asian ideograph */ {"\x25", 0, 0x5612}, /* East Asian ideograph */ {"\x27", 0, 0x55F8}, /* East Asian ideograph */ {"\x28", 0, 0x560F}, /* East Asian ideograph */ {"\x2B", 0, 0x55F9}, /* East Asian ideograph */ {"\x2E", 0, 0x561E}, /* East Asian ideograph */ {"\x31", 0, 0x560C}, /* East Asian ideograph */ {"\x34", 0, 0x561C}, /* East Asian ideograph */ {"\x35", 0, 0x5610}, /* East Asian ideograph */ {"\x36", 0, 0x5601}, /* East Asian ideograph */ {"\x38", 0, 0x5613}, /* East Asian ideograph */ {"\x39", 0, 0x55F6}, /* East Asian ideograph */ {"\x3C", 0, 0x5602}, /* East Asian ideograph */ {"\x42", 0, 0x561D}, /* East Asian ideograph */ {"\x44", 0, 0x55FF}, /* East Asian ideograph */ {"\x47", 0, 0x5642}, /* East Asian ideograph */ {"\x48", 0, 0x564C}, /* East Asian ideograph */ {"\x4B", 0, 0x564B}, /* East Asian ideograph */ {"\x52", 0, 0x5640}, /* East Asian ideograph */ {"\x55", 0, 0x5635}, /* East Asian ideograph */ {"\x57", 0, 0x5649}, /* East Asian ideograph */ {"\x58", 0, 0x5641}, /* East Asian ideograph */ {"\x5C", 0, 0x5658}, /* East Asian ideograph */ {"\x5D", 0, 0x5620}, /* East Asian ideograph */ {"\x5E", 0, 0x5654}, /* East Asian ideograph */ {"\x60", 0, 0x562A}, /* East Asian ideograph */ {"\x61", 0, 0x563D}, /* East Asian ideograph */ {"\x64", 0, 0x562C}, /* East Asian ideograph */ {"\x67", 0, 0x5638}, /* East Asian ideograph */ {"\x69", 0, 0x564D}, /* East Asian ideograph */ {"\x6B", 0, 0x562B}, /* East Asian ideograph */ {"\x6C", 0, 0x564F}, /* East Asian ideograph */ {"\x6E", 0, 0x5670}, /* East Asian ideograph */ {"\x6F", 0, 0x565F}, /* East Asian ideograph */ {"\x70", 0, 0x567C}, /* East Asian ideograph */ {"\x72", 0, 0x5660}, /* East Asian ideograph */ {"\x78", 0, 0x5676}, /* East Asian ideograph */ {"\x7A", 0, 0x5666}, /* East Asian ideograph */ {"\x7B", 0, 0x5673}, /* East Asian ideograph */ {"\x7C", 0, 0x566D}, /* East Asian ideograph */ {"\x7E", 0, 0x5672}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page69 = { marc8_31page69_flat, 0 }; /* PAGE 68 */ struct yaz_iconv_trie_flat marc8_31page68_flat[] = { {"\x23", 0, 0x5591}, /* East Asian ideograph */ {"\x25", 0, 0x5577}, /* East Asian ideograph */ {"\x26", 0, 0x55A8}, /* East Asian ideograph */ {"\x27", 0, 0x55AD}, /* East Asian ideograph */ {"\x2A", 0, 0x5605}, /* East Asian ideograph */ {"\x2D", 0, 0x5593}, /* East Asian ideograph */ {"\x2F", 0, 0x5586}, /* East Asian ideograph */ {"\x34", 0, 0x5588}, /* East Asian ideograph */ {"\x36", 0, 0x55B4}, /* East Asian ideograph */ {"\x43", 0, 0x55E2}, /* East Asian ideograph (variant of EACC 2D7143) */ {"\x44", 0, 0x5581}, /* East Asian ideograph */ {"\x45", 0, 0x558E}, /* East Asian ideograph */ {"\x47", 0, 0x55B5}, /* East Asian ideograph */ {"\x49", 0, 0x558F}, /* East Asian ideograph */ {"\x4B", 0, 0x5559}, /* East Asian ideograph */ {"\x50", 0, 0x55A4}, /* East Asian ideograph */ {"\x51", 0, 0x5592}, /* East Asian ideograph */ {"\x52", 0, 0x5599}, /* East Asian ideograph */ {"\x56", 0, 0x55F4}, /* East Asian ideograph */ {"\x58", 0, 0x55CC}, /* East Asian ideograph */ {"\x59", 0, 0x55D0}, /* East Asian ideograph */ {"\x5A", 0, 0x55DB}, /* East Asian ideograph */ {"\x5B", 0, 0x55CD}, /* East Asian ideograph */ {"\x5C", 0, 0x55DE}, /* East Asian ideograph */ {"\x5D", 0, 0x55D9}, /* East Asian ideograph */ {"\x5E", 0, 0x55C3}, /* East Asian ideograph */ {"\x5F", 0, 0x55C9}, /* East Asian ideograph */ {"\x61", 0, 0x55CA}, /* East Asian ideograph */ {"\x62", 0, 0x55DD}, /* East Asian ideograph */ {"\x64", 0, 0x55D4}, /* East Asian ideograph */ {"\x65", 0, 0x55C4}, /* East Asian ideograph */ {"\x69", 0, 0x55E9}, /* East Asian ideograph */ {"\x6F", 0, 0x55CF}, /* East Asian ideograph */ {"\x70", 0, 0x55D2}, /* East Asian ideograph */ {"\x75", 0, 0x55E5}, /* East Asian ideograph */ {"\x77", 0, 0x55D6}, /* East Asian ideograph */ {"\x78", 0, 0x55C1}, /* East Asian ideograph */ {"\x79", 0, 0x55F2}, /* East Asian ideograph */ {"\x7E", 0, 0x5627}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page68 = { marc8_31page68_flat, 0 }; /* PAGE 67 */ struct yaz_iconv_trie_flat marc8_31page67_flat[] = { {"\x23", 0, 0x5517}, /* East Asian ideograph */ {"\x24", 0, 0x54FD}, /* East Asian ideograph */ {"\x25", 0, 0x54E7}, /* East Asian ideograph */ {"\x27", 0, 0x54F3}, /* East Asian ideograph */ {"\x2A", 0, 0x54E4}, /* East Asian ideograph */ {"\x2B", 0, 0x550A}, /* East Asian ideograph */ {"\x2D", 0, 0x54FF}, /* East Asian ideograph */ {"\x2E", 0, 0x5518}, /* East Asian ideograph */ {"\x30", 0, 0x5504}, /* East Asian ideograph */ {"\x32", 0, 0x54EF}, /* East Asian ideograph */ {"\x34", 0, 0x5508}, /* East Asian ideograph */ {"\x38", 0, 0x54F6}, /* East Asian ideograph */ {"\x39", 0, 0x54F7}, /* East Asian ideograph */ {"\x3E", 0, 0x550E}, /* East Asian ideograph */ {"\x44", 0, 0x5523}, /* East Asian ideograph */ {"\x46", 0, 0x550F}, /* East Asian ideograph */ {"\x47", 0, 0x5511}, /* East Asian ideograph */ {"\x4B", 0, 0x5575}, /* East Asian ideograph */ {"\x4D", 0, 0x5573}, /* East Asian ideograph */ {"\x4E", 0, 0x554C}, /* East Asian ideograph */ {"\x4F", 0, 0x5576}, /* East Asian ideograph */ {"\x50", 0, 0x554D}, /* East Asian ideograph */ {"\x51", 0, 0x555A}, /* East Asian ideograph */ {"\x53", 0, 0x553C}, /* East Asian ideograph */ {"\x55", 0, 0x5550}, /* East Asian ideograph */ {"\x57", 0, 0x5539}, /* East Asian ideograph */ {"\x58", 0, 0x5548}, /* East Asian ideograph */ {"\x59", 0, 0x552D}, /* East Asian ideograph */ {"\x5A", 0, 0x5551}, /* East Asian ideograph */ {"\x5D", 0, 0x552A}, /* East Asian ideograph */ {"\x60", 0, 0x5562}, /* East Asian ideograph */ {"\x61", 0, 0x5536}, /* East Asian ideograph */ {"\x64", 0, 0x5549}, /* East Asian ideograph */ {"\x68", 0, 0x5530}, /* East Asian ideograph */ {"\x6A", 0, 0x5540}, /* East Asian ideograph */ {"\x6B", 0, 0x5535}, /* East Asian ideograph */ {"\x70", 0, 0x5545}, /* East Asian ideograph */ {"\x79", 0, 0x553F}, /* East Asian ideograph */ {"\x7B", 0, 0x5541}, /* East Asian ideograph */ {"\x7D", 0, 0x5565}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page67 = { marc8_31page67_flat, 0 }; /* PAGE 66 */ struct yaz_iconv_trie_flat marc8_31page66_flat[] = { {"\x21", 0, 0x544F}, /* East Asian ideograph */ {"\x24", 0, 0x542A}, /* East Asian ideograph */ {"\x26", 0, 0x5422}, /* East Asian ideograph */ {"\x27", 0, 0x5423}, /* East Asian ideograph */ {"\x2E", 0, 0x545F}, /* East Asian ideograph */ {"\x2F", 0, 0x549C}, /* East Asian ideograph */ {"\x35", 0, 0x5488}, /* East Asian ideograph */ {"\x37", 0, 0x547F}, /* East Asian ideograph */ {"\x39", 0, 0x5482}, /* East Asian ideograph */ {"\x3A", 0, 0x546D}, /* East Asian ideograph */ {"\x3B", 0, 0x5491}, /* East Asian ideograph */ {"\x42", 0, 0x5494}, /* East Asian ideograph */ {"\x43", 0, 0x546B}, /* East Asian ideograph */ {"\x49", 0, 0x548D}, /* East Asian ideograph */ {"\x4A", 0, 0x5463}, /* East Asian ideograph */ {"\x4B", 0, 0x5474}, /* East Asian ideograph */ {"\x52", 0, 0x5466}, /* East Asian ideograph */ {"\x53", 0, 0x5464}, /* East Asian ideograph */ {"\x55", 0, 0x54A4}, /* East Asian ideograph */ {"\x58", 0, 0x54A1}, /* East Asian ideograph */ {"\x5A", 0, 0x54AD}, /* East Asian ideograph */ {"\x5B", 0, 0x54BA}, /* East Asian ideograph */ {"\x5C", 0, 0x54CF}, /* East Asian ideograph */ {"\x5E", 0, 0x54BE}, /* East Asian ideograph */ {"\x60", 0, 0x54A5}, /* East Asian ideograph */ {"\x63", 0, 0x54A7}, /* East Asian ideograph */ {"\x64", 0, 0x54B5}, /* East Asian ideograph */ {"\x66", 0, 0x54A2}, /* East Asian ideograph */ {"\x67", 0, 0x5472}, /* East Asian ideograph */ {"\x68", 0, 0x5470}, /* East Asian ideograph */ {"\x69", 0, 0x54BC}, /* East Asian ideograph */ {"\x6A", 0, 0x54B7}, /* East Asian ideograph */ {"\x6B", 0, 0x54DE}, /* East Asian ideograph */ {"\x6C", 0, 0x54D6}, /* East Asian ideograph */ {"\x6D", 0, 0x54AE}, /* East Asian ideograph */ {"\x71", 0, 0x54BF}, /* East Asian ideograph */ {"\x74", 0, 0x54C6}, /* East Asian ideograph */ {"\x7B", 0, 0x551A}, /* East Asian ideograph */ {"\x7C", 0, 0x54E2}, /* East Asian ideograph */ {"\x7D", 0, 0x5507}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page66 = { marc8_31page66_flat, 0 }; /* PAGE 65 */ struct yaz_iconv_trie_flat marc8_31page65_flat[] = { {"\x2C", 0, 0x53B5}, /* East Asian ideograph */ {"\x2E", 0, 0x53B9}, /* East Asian ideograph */ {"\x3E", 0, 0x53D0}, /* East Asian ideograph */ {"\x48", 0, 0x53DA}, /* East Asian ideograph */ {"\x57", 0, 0x53FB}, /* East Asian ideograph */ {"\x58", 0, 0x535F}, /* East Asian ideograph */ {"\x61", 0, 0x5414}, /* East Asian ideograph */ {"\x68", 0, 0x5406}, /* East Asian ideograph */ {"\x6C", 0, 0x544C}, /* East Asian ideograph */ {"\x6D", 0, 0x5445}, /* East Asian ideograph */ {"\x6F", 0, 0x541A}, /* East Asian ideograph */ {"\x70", 0, 0x5432}, /* East Asian ideograph */ {"\x76", 0, 0x5421}, /* East Asian ideograph */ {"\x78", 0, 0x5430}, /* East Asian ideograph */ {"\x79", 0, 0x5454}, /* East Asian ideograph */ {"\x7D", 0, 0x543D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page65 = { marc8_31page65_flat, 0 }; /* PAGE 64 */ struct yaz_iconv_trie_flat marc8_31page64_flat[] = { {"\x23", 0, 0x531A}, /* East Asian ideograph */ {"\x24", 0, 0x531C}, /* East Asian ideograph */ {"\x25", 0, 0x531F}, /* East Asian ideograph */ {"\x2E", 0, 0x532D}, /* East Asian ideograph */ {"\x33", 0, 0x5330}, /* East Asian ideograph */ {"\x36", 0, 0x5335}, /* East Asian ideograph */ {"\x3A", 0, 0x5338}, /* East Asian ideograph */ {"\x3E", 0, 0x533D}, /* East Asian ideograph */ {"\x41", 0, 0x534C}, /* East Asian ideograph */ {"\x42", 0, 0x534D}, /* East Asian ideograph */ {"\x4B", 0, 0x535D}, /* East Asian ideograph */ {"\x4C", 0, 0x5363}, /* East Asian ideograph */ {"\x4E", 0, 0x5365}, /* East Asian ideograph */ {"\x53", 0, 0x536C}, /* East Asian ideograph */ {"\x57", 0, 0x5372}, /* East Asian ideograph */ {"\x58", 0, 0x537A}, /* East Asian ideograph */ {"\x5D", 0, 0x5380}, /* East Asian ideograph */ {"\x64", 0, 0x538E}, /* East Asian ideograph */ {"\x66", 0, 0x5393}, /* East Asian ideograph */ {"\x67", 0, 0x5394}, /* East Asian ideograph */ {"\x6D", 0, 0x5399}, /* East Asian ideograph */ {"\x74", 0, 0x8652}, /* East Asian ideograph */ {"\x7A", 0, 0x53A4}, /* East Asian ideograph */ {"\x7B", 0, 0x53AB}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page64 = { marc8_31page64_flat, 0 }; /* PAGE 63 */ struct yaz_iconv_trie_flat marc8_31page63_flat[] = { {"\x21", 0, 0x5293}, /* East Asian ideograph */ {"\x27", 0, 0x5296}, /* East Asian ideograph */ {"\x29", 0, 0x5298}, /* East Asian ideograph */ {"\x2B", 0, 0x529A}, /* East Asian ideograph */ {"\x2C", 0, 0x5299}, /* East Asian ideograph */ {"\x2E", 0, 0x52A6}, /* East Asian ideograph */ {"\x31", 0, 0x52AD}, /* East Asian ideograph */ {"\x33", 0, 0x52AE}, /* East Asian ideograph */ {"\x37", 0, 0x52BB}, /* East Asian ideograph */ {"\x38", 0, 0x52BC}, /* East Asian ideograph */ {"\x3C", 0, 0x52CA}, /* East Asian ideograph */ {"\x3D", 0, 0x52CD}, /* East Asian ideograph */ {"\x40", 0, 0x52D0}, /* East Asian ideograph */ {"\x41", 0, 0x52D1}, /* East Asian ideograph */ {"\x46", 0, 0x52D4}, /* East Asian ideograph */ {"\x48", 0, 0x52D6}, /* East Asian ideograph */ {"\x4C", 0, 0x52E3}, /* East Asian ideograph */ {"\x4E", 0, 0x52E1}, /* East Asian ideograph */ {"\x50", 0, 0x55E7}, /* East Asian ideograph */ {"\x53", 0, 0x52E9}, /* East Asian ideograph */ {"\x58", 0, 0x52F0}, /* East Asian ideograph */ {"\x5A", 0, 0x52F1}, /* East Asian ideograph */ {"\x5E", 0, 0x52F7}, /* East Asian ideograph */ {"\x61", 0, 0x52F9}, /* East Asian ideograph */ {"\x62", 0, 0x52FA}, /* East Asian ideograph */ {"\x64", 0, 0x52FC}, /* East Asian ideograph */ {"\x69", 0, 0x5307}, /* East Asian ideograph */ {"\x6A", 0, 0x5303}, /* East Asian ideograph */ {"\x6B", 0, 0x5306}, /* East Asian ideograph */ {"\x6E", 0, 0x530A}, /* East Asian ideograph */ {"\x6F", 0, 0x530B}, /* East Asian ideograph */ {"\x77", 0, 0x5311}, /* East Asian ideograph */ {"\x7B", 0, 0x6706}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page63 = { marc8_31page63_flat, 0 }; /* PAGE 62 */ struct yaz_iconv_trie_flat marc8_31page62_flat[] = { {"\x24", 0, 0x5213}, /* East Asian ideograph */ {"\x26", 0, 0x5216}, /* East Asian ideograph */ {"\x2A", 0, 0x521C}, /* East Asian ideograph */ {"\x33", 0, 0x5231}, /* East Asian ideograph */ {"\x36", 0, 0x5235}, /* East Asian ideograph */ {"\x37", 0, 0x5232}, /* East Asian ideograph */ {"\x39", 0, 0x5233}, /* East Asian ideograph */ {"\x3E", 0, 0x5244}, /* East Asian ideograph */ {"\x43", 0, 0x5249}, /* East Asian ideograph */ {"\x47", 0, 0x5260}, /* East Asian ideograph */ {"\x4B", 0, 0x525A}, /* East Asian ideograph */ {"\x4C", 0, 0x5252}, /* East Asian ideograph */ {"\x4D", 0, 0x525E}, /* East Asian ideograph */ {"\x50", 0, 0x525F}, /* East Asian ideograph */ {"\x53", 0, 0x5255}, /* East Asian ideograph */ {"\x5B", 0, 0x526E}, /* East Asian ideograph */ {"\x5E", 0, 0x5268}, /* East Asian ideograph */ {"\x5F", 0, 0x7B9A}, /* East Asian ideograph */ {"\x6B", 0, 0x5278}, /* East Asian ideograph */ {"\x74", 0, 0x5282}, /* East Asian ideograph */ {"\x75", 0, 0x5281}, /* East Asian ideograph */ {"\x79", 0, 0x528C}, /* East Asian ideograph */ {"\x7A", 0, 0x528A}, /* East Asian ideograph */ {"\x7C", 0, 0x5290}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page62 = { marc8_31page62_flat, 0 }; /* PAGE 61 */ struct yaz_iconv_trie_flat marc8_31page61_flat[] = { {"\x22", 0, 0x51AA}, /* East Asian ideograph */ {"\x23", 0, 0x51AB}, /* East Asian ideograph */ {"\x26", 0, 0x51B1}, /* East Asian ideograph */ {"\x35", 0, 0x51BC}, /* East Asian ideograph */ {"\x43", 0, 0x51CA}, /* East Asian ideograph */ {"\x46", 0, 0x51C7}, /* East Asian ideograph */ {"\x4E", 0, 0x51D1}, /* East Asian ideograph */ {"\x4F", 0, 0x51D0}, /* East Asian ideograph */ {"\x54", 0, 0x51D3}, /* East Asian ideograph */ {"\x63", 0, 0x51D9}, /* East Asian ideograph */ {"\x66", 0, 0x51DF}, /* East Asian ideograph */ {"\x68", 0, 0x51E2}, /* East Asian ideograph */ {"\x73", 0, 0x5160}, /* East Asian ideograph */ {"\x78", 0, 0x51F5}, /* East Asian ideograph */ {"\x79", 0, 0x51F7}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page61 = { marc8_31page61_flat, 0 }; /* PAGE 60 */ struct yaz_iconv_trie_flat marc8_31page60_flat[] = { {"\x29", 0, 0x5124}, /* East Asian ideograph */ {"\x2B", 0, 0x5129}, /* East Asian ideograph */ {"\x30", 0, 0x5131}, /* East Asian ideograph */ {"\x3E", 0, 0x5135}, /* East Asian ideograph */ {"\x40", 0, 0x5133}, /* East Asian ideograph */ {"\x44", 0, 0x513A}, /* East Asian ideograph */ {"\x47", 0, 0x5139}, /* East Asian ideograph */ {"\x48", 0, 0x513B}, /* East Asian ideograph */ {"\x51", 0, 0x5159}, /* East Asian ideograph */ {"\x52", 0, 0x515B}, /* East Asian ideograph */ {"\x55", 0, 0x515D}, /* East Asian ideograph */ {"\x56", 0, 0x515E}, /* East Asian ideograph */ {"\x58", 0, 0x515F}, /* East Asian ideograph */ {"\x59", 0, 0x5161}, /* East Asian ideograph */ {"\x5C", 0, 0x5163}, /* East Asian ideograph */ {"\x67", 0, 0x5182}, /* East Asian ideograph */ {"\x69", 0, 0x5184}, /* East Asian ideograph */ {"\x6E", 0, 0x518F}, /* East Asian ideograph */ {"\x70", 0, 0x5194}, /* East Asian ideograph */ {"\x71", 0, 0x5193}, /* East Asian ideograph */ {"\x75", 0, 0x5196}, /* East Asian ideograph */ {"\x7B", 0, 0x51A1}, /* East Asian ideograph */ {"\x7C", 0, 0x51A3}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page60 = { marc8_31page60_flat, 0 }; /* PAGE 59 */ struct yaz_iconv_trie_flat marc8_31page59_flat[] = { {"\x22", 0, 0x50C2}, /* East Asian ideograph */ {"\x2C", 0, 0x50BA}, /* East Asian ideograph */ {"\x2E", 0, 0x50CD}, /* East Asian ideograph */ {"\x32", 0, 0x50D4}, /* East Asian ideograph */ {"\x34", 0, 0x50EF}, /* East Asian ideograph */ {"\x35", 0, 0x50E6}, /* East Asian ideograph */ {"\x3A", 0, 0x50F4}, /* East Asian ideograph */ {"\x3B", 0, 0x50CE}, /* East Asian ideograph */ {"\x3C", 0, 0x50DD}, /* East Asian ideograph */ {"\x41", 0, 0x50F3}, /* East Asian ideograph */ {"\x42", 0, 0x50E8}, /* East Asian ideograph */ {"\x44", 0, 0x50F0}, /* East Asian ideograph */ {"\x46", 0, 0x50D9}, /* East Asian ideograph */ {"\x55", 0, 0x50EC}, /* East Asian ideograph */ {"\x5B", 0, 0x510E}, /* East Asian ideograph */ {"\x5F", 0, 0x5105}, /* East Asian ideograph */ {"\x61", 0, 0x50FC}, /* East Asian ideograph */ {"\x65", 0, 0x5106}, /* East Asian ideograph */ {"\x66", 0, 0x5107}, /* East Asian ideograph */ {"\x67", 0, 0x510F}, /* East Asian ideograph */ {"\x68", 0, 0x50FE}, /* East Asian ideograph */ {"\x69", 0, 0x510B}, /* East Asian ideograph */ {"\x6A", 0, 0x50FD}, /* East Asian ideograph */ {"\x6D", 0, 0x5101}, /* East Asian ideograph */ {"\x71", 0, 0x5115}, /* East Asian ideograph */ {"\x72", 0, 0x5113}, /* East Asian ideograph */ {"\x78", 0, 0x511A}, /* East Asian ideograph */ {"\x79", 0, 0x9797}, /* East Asian ideograph */ {"\x7E", 0, 0x5126}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page59 = { marc8_31page59_flat, 0 }; /* PAGE 58 */ struct yaz_iconv_trie_flat marc8_31page58_flat[] = { {"\x22", 0, 0x506F}, /* East Asian ideograph */ {"\x23", 0, 0x5050}, /* East Asian ideograph */ {"\x25", 0, 0x5070}, /* East Asian ideograph */ {"\x29", 0, 0x5053}, /* East Asian ideograph */ {"\x2A", 0, 0x506A}, /* East Asian ideograph */ {"\x2C", 0, 0x5056}, /* East Asian ideograph */ {"\x31", 0, 0x506D}, /* East Asian ideograph */ {"\x38", 0, 0x505D}, /* East Asian ideograph */ {"\x39", 0, 0x5048}, /* East Asian ideograph */ {"\x3B", 0, 0x5058}, /* East Asian ideograph */ {"\x3C", 0, 0x5072}, /* East Asian ideograph */ {"\x41", 0, 0x5041}, /* East Asian ideograph */ {"\x46", 0, 0x5015}, /* East Asian ideograph */ {"\x48", 0, 0x507A}, /* East Asian ideograph */ {"\x4A", 0, 0x506C}, /* East Asian ideograph */ {"\x4B", 0, 0x505F}, /* East Asian ideograph */ {"\x4D", 0, 0x506B}, /* East Asian ideograph */ {"\x4E", 0, 0x5094}, /* East Asian ideograph */ {"\x50", 0, 0x509E}, /* East Asian ideograph */ {"\x52", 0, 0x509B}, /* East Asian ideograph */ {"\x53", 0, 0x509A}, /* East Asian ideograph */ {"\x57", 0, 0x50A3}, /* East Asian ideograph */ {"\x5A", 0, 0x508C}, /* East Asian ideograph */ {"\x5C", 0, 0x5088}, /* East Asian ideograph */ {"\x62", 0, 0x508E}, /* East Asian ideograph */ {"\x64", 0, 0x5095}, /* East Asian ideograph */ {"\x67", 0, 0x50A6}, /* East Asian ideograph */ {"\x6A", 0, 0x5092}, /* East Asian ideograph */ {"\x6C", 0, 0x509C}, /* East Asian ideograph */ {"\x71", 0, 0x50C7}, /* East Asian ideograph */ {"\x75", 0, 0x50C9}, /* East Asian ideograph */ {"\x7B", 0, 0x50CA}, /* East Asian ideograph */ {"\x7C", 0, 0x50B4}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page58 = { marc8_31page58_flat, 0 }; /* PAGE 57 */ struct yaz_iconv_trie_flat marc8_31page57_flat[] = { {"\x22", 0, 0x4FE4}, /* East Asian ideograph */ {"\x26", 0, 0x4FB7}, /* East Asian ideograph */ {"\x27", 0, 0x4FC5}, /* East Asian ideograph */ {"\x29", 0, 0x4FC9}, /* East Asian ideograph */ {"\x2A", 0, 0x4FE5}, /* East Asian ideograph */ {"\x2C", 0, 0x4FE7}, /* East Asian ideograph */ {"\x33", 0, 0x4FDC}, /* East Asian ideograph */ {"\x35", 0, 0x4FD4}, /* East Asian ideograph */ {"\x37", 0, 0x4FC1}, /* East Asian ideograph */ {"\x3B", 0, 0x4FDB}, /* East Asian ideograph */ {"\x3E", 0, 0x4FC6}, /* East Asian ideograph */ {"\x43", 0, 0x4FB9}, /* East Asian ideograph */ {"\x46", 0, 0x501E}, /* East Asian ideograph */ {"\x48", 0, 0x503F}, /* East Asian ideograph */ {"\x49", 0, 0x5005}, /* East Asian ideograph */ {"\x4C", 0, 0x5007}, /* East Asian ideograph */ {"\x4D", 0, 0x5013}, /* East Asian ideograph */ {"\x4E", 0, 0x5022}, /* East Asian ideograph */ {"\x52", 0, 0x4FF5}, /* East Asian ideograph */ {"\x59", 0, 0x4FF4}, /* East Asian ideograph */ {"\x5B", 0, 0x5037}, /* East Asian ideograph */ {"\x5E", 0, 0x502E}, /* East Asian ideograph */ {"\x61", 0, 0x4FF6}, /* East Asian ideograph */ {"\x62", 0, 0x501C}, /* East Asian ideograph */ {"\x66", 0, 0x502C}, /* East Asian ideograph */ {"\x69", 0, 0x5010}, /* East Asian ideograph */ {"\x79", 0, 0x503D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page57 = { marc8_31page57_flat, 0 }; /* PAGE 56 */ struct yaz_iconv_trie_flat marc8_31page56_flat[] = { {"\x27", 0, 0x4EF5}, /* East Asian ideograph */ {"\x28", 0, 0x4F07}, /* East Asian ideograph */ {"\x2A", 0, 0x4F00}, /* East Asian ideograph */ {"\x2C", 0, 0x4F0B}, /* East Asian ideograph */ {"\x32", 0, 0x4F3B}, /* East Asian ideograph */ {"\x36", 0, 0x4F58}, /* East Asian ideograph */ {"\x37", 0, 0x4F62}, /* East Asian ideograph */ {"\x39", 0, 0x4F64}, /* East Asian ideograph */ {"\x3A", 0, 0x4F49}, /* East Asian ideograph */ {"\x3F", 0, 0x4F3E}, /* East Asian ideograph */ {"\x40", 0, 0x4F66}, /* East Asian ideograph */ {"\x44", 0, 0x4F67}, /* East Asian ideograph */ {"\x4D", 0, 0x4F68}, /* East Asian ideograph */ {"\x4E", 0, 0x4F5A}, /* East Asian ideograph */ {"\x4F", 0, 0x4F5F}, /* East Asian ideograph */ {"\x56", 0, 0x4F82}, /* East Asian ideograph */ {"\x57", 0, 0x4F7C}, /* East Asian ideograph */ {"\x5A", 0, 0x4F98}, /* East Asian ideograph */ {"\x5B", 0, 0x4F92}, /* East Asian ideograph */ {"\x5C", 0, 0x4F7D}, /* East Asian ideograph */ {"\x60", 0, 0x4F80}, /* East Asian ideograph */ {"\x61", 0, 0x4F74}, /* East Asian ideograph */ {"\x62", 0, 0x4F76}, /* East Asian ideograph */ {"\x64", 0, 0x4FA2}, /* East Asian ideograph */ {"\x66", 0, 0x4F91}, /* East Asian ideograph */ {"\x67", 0, 0x4F95}, /* East Asian ideograph */ {"\x6C", 0, 0x4F4C}, /* East Asian ideograph */ {"\x6D", 0, 0x4F97}, /* East Asian ideograph */ {"\x6E", 0, 0x4F94}, /* East Asian ideograph */ {"\x70", 0, 0x4F79}, /* East Asian ideograph */ {"\x71", 0, 0x4F9A}, /* East Asian ideograph */ {"\x72", 0, 0x4F81}, /* East Asian ideograph */ {"\x73", 0, 0x4F78}, /* East Asian ideograph */ {"\x76", 0, 0x4F9C}, /* East Asian ideograph */ {"\x77", 0, 0x4F90}, /* East Asian ideograph */ {"\x7B", 0, 0x4F7A}, /* East Asian ideograph */ {"\x7C", 0, 0x4FCD}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page56 = { marc8_31page56_flat, 0 }; /* PAGE 55 */ struct yaz_iconv_trie_flat marc8_31page55_flat[] = { {"\x24", 0, 0x4E0F}, /* East Asian ideograph */ {"\x25", 0, 0x5187}, /* East Asian ideograph */ {"\x29", 0, 0x4E28}, /* East Asian ideograph */ {"\x2E", 0, 0x4E31}, /* East Asian ideograph */ {"\x31", 0, 0x4E36}, /* East Asian ideograph */ {"\x33", 0, 0x4E3F}, /* East Asian ideograph */ {"\x34", 0, 0x4E42}, /* East Asian ideograph */ {"\x37", 0, 0x738D}, /* East Asian ideograph */ {"\x3C", 0, 0x4E5C}, /* East Asian ideograph */ {"\x3F", 0, 0x6C39}, /* East Asian ideograph */ {"\x46", 0, 0x4E85}, /* East Asian ideograph */ {"\x50", 0, 0x4EA0}, /* East Asian ideograph */ {"\x51", 0, 0x4EA2}, /* East Asian ideograph */ {"\x52", 0, 0x4EB3}, /* East Asian ideograph */ {"\x55", 0, 0x4EB6}, /* East Asian ideograph (variant of EACC 4B6455) */ {"\x58", 0, 0x4EB9}, /* East Asian ideograph */ {"\x5A", 0, 0x4EBC}, /* East Asian ideograph */ {"\x5E", 0, 0x4EC9}, /* East Asian ideograph */ {"\x61", 0, 0x4EC8}, /* East Asian ideograph */ {"\x62", 0, 0x4ECE}, /* East Asian ideograph */ {"\x63", 0, 0x4EE8}, /* East Asian ideograph */ {"\x6B", 0, 0x4EE1}, /* East Asian ideograph */ {"\x72", 0, 0x4F08}, /* East Asian ideograph */ {"\x73", 0, 0x4F0E}, /* East Asian ideograph */ {"\x75", 0, 0x4F03}, /* East Asian ideograph */ {"\x7C", 0, 0x4F22}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page55 = { marc8_31page55_flat, 0 }; /* PAGE 54 */ struct yaz_iconv_trie_flat marc8_31page54_flat[] = { {"\x21", 0, 0x9F52}, /* East Asian ideograph */ {"\x22", 0, 0x9F5F}, /* East Asian ideograph */ {"\x23", 0, 0x9F63}, /* East Asian ideograph */ {"\x24", 0, 0x9F61}, /* East Asian ideograph (variant of EACC 456324) */ {"\x25", 0, 0x9F66}, /* East Asian ideograph */ {"\x26", 0, 0x9F5C}, /* East Asian ideograph */ {"\x27", 0, 0x9F6C}, /* East Asian ideograph */ {"\x28", 0, 0x9F6A}, /* East Asian ideograph */ {"\x29", 0, 0x9F77}, /* East Asian ideograph */ {"\x2A", 0, 0x9F72}, /* East Asian ideograph */ {"\x2B", 0, 0x9F8D}, /* East Asian ideograph */ {"\x2C", 0, 0x9F94}, /* East Asian ideograph */ {"\x2D", 0, 0x9F9C}, /* East Asian ideograph */ {"\x30", 0, 0x8288}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page54 = { marc8_31page54_flat, 0 }; /* PAGE 53 */ struct yaz_iconv_trie_dir marc8_31page53_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9C13} /* East Asian ideograph */, {0, 0, 0x9C0D} /* East Asian ideograph */, {0, 0, 0x9BFD} /* East Asian ideograph */, {0, 0, 0x9C2D} /* East Asian ideograph */, {0, 0, 0x9C25} /* East Asian ideograph */, {0, 0, 0x9C31} /* East Asian ideograph */, {0, 0, 0x9C3E} /* East Asian ideograph */, {0, 0, 0x9C3B} /* East Asian ideograph */, {0, 0, 0x9C54} /* East Asian ideograph */, {0, 0, 0x9C57} /* East Asian ideograph */, {0, 0, 0x9C56} /* East Asian ideograph */, {0, 0, 0x9C49} /* East Asian ideograph */, {0, 0, 0x9C77} /* East Asian ideograph */, {0, 0, 0x9C78} /* East Asian ideograph */, {0, 0, 0x9CE5} /* East Asian ideograph */, {0, 0, 0x9CE9} /* East Asian ideograph */, {0, 0, 0x9CF6} /* East Asian ideograph */, {0, 0, 0x9CF4} /* East Asian ideograph */, {0, 0, 0x9CF3} /* East Asian ideograph */, {0, 0, 0x9D06} /* East Asian ideograph */, {0, 0, 0x9D09} /* East Asian ideograph */, {0, 0, 0x9D15} /* East Asian ideograph */, {0, 0, 0x9D23} /* East Asian ideograph */, {0, 0, 0x9D28} /* East Asian ideograph */, {0, 0, 0x9D26} /* East Asian ideograph */, {0, 0, 0x9D1B} /* East Asian ideograph */, {0, 0, 0x9D12} /* East Asian ideograph (variant of EACC 4B623B) */, {0, 0, 0x9D3B} /* East Asian ideograph */, {0, 0, 0x9D3F} /* East Asian ideograph */, {0, 0, 0x9D61} /* East Asian ideograph */, {0, 0, 0x9D51} /* East Asian ideograph */, {0, 0, 0x9D60} /* East Asian ideograph */, {0, 0, 0x9D5D} /* East Asian ideograph */, {0, 0, 0x9D89} /* East Asian ideograph */, {0, 0, 0x9D72} /* East Asian ideograph */, {0, 0, 0x9D6A} /* East Asian ideograph */, {0, 0, 0x9D6C} /* East Asian ideograph */, {0, 0, 0x9DB4} /* East Asian ideograph */, {0, 0, 0x9DAF} /* East Asian ideograph */, {0, 0, 0x9DC2} /* East Asian ideograph */, {0, 0, 0x9DD3} /* East Asian ideograph */, {0, 0, 0x9DD7} /* East Asian ideograph */, {0, 0, 0x9DE5} /* East Asian ideograph */, {0, 0, 0x9DF9} /* East Asian ideograph */, {0, 0, 0x9DFA} /* East Asian ideograph */, {0, 0, 0x9E1A} /* East Asian ideograph */, {0, 0, 0x9E1E} /* East Asian ideograph */, {0, 0, 0x9E79} /* East Asian ideograph */, {0, 0, 0x9E7D} /* East Asian ideograph */, {0, 0, 0x9E7C} /* East Asian ideograph */, {0, 0, 0x9E7F} /* East Asian ideograph */, {0, 0, 0x9E82} /* East Asian ideograph */, {0, 0, 0x9E8B} /* East Asian ideograph */, {0, 0, 0x9E97} /* East Asian ideograph */, {0, 0, 0x9E92} /* East Asian ideograph */, {0, 0, 0x9E93} /* East Asian ideograph */, {0, 0, 0x9E9D} /* East Asian ideograph */, {0, 0, 0x9E9F} /* East Asian ideograph */, {0, 0, 0x9EA5} /* East Asian ideograph */, {0, 0, 0x9EA9} /* East Asian ideograph */, {0, 0, 0x9EB4} /* East Asian ideograph */, {0, 0, 0x9EB5} /* East Asian ideograph */, {0, 0, 0x9EBB} /* East Asian ideograph */, {0, 0, 0x9EBC} /* East Asian ideograph */, {0, 0, 0x9EBE} /* East Asian ideograph */, {0, 0, 0x9EC3} /* East Asian ideograph */, {0, 0, 0x9ECD} /* East Asian ideograph */, {0, 0, 0x9ECE} /* East Asian ideograph */, {0, 0, 0x9ECF} /* East Asian ideograph */, {0, 0, 0x9ED1} /* East Asian ideograph */, {0, 0, 0x58A8} /* East Asian ideograph */, {0, 0, 0x9ED8} /* East Asian ideograph */, {0, 0, 0x9ED4} /* East Asian ideograph */, {0, 0, 0x9EDE} /* East Asian ideograph */, {0, 0, 0x9EDC} /* East Asian ideograph */, {0, 0, 0x9EDB} /* East Asian ideograph */, {0, 0, 0x9EDD} /* East Asian ideograph */, {0, 0, 0x9EE0} /* East Asian ideograph */, {0, 0, 0x9EE8} /* East Asian ideograph */, {0, 0, 0x9EEF} /* East Asian ideograph */, {0, 0, 0x9EF4} /* East Asian ideograph */, {0, 0, 0x9EF7} /* East Asian ideograph */, {0, 0, 0x9F07} /* East Asian ideograph */, {0, 0, 0x9F0E} /* East Asian ideograph */, {0, 0, 0x9F13} /* East Asian ideograph */, {0, 0, 0x9F15} /* East Asian ideograph */, {0, 0, 0x9F19} /* East Asian ideograph */, {0, 0, 0x9F20} /* East Asian ideograph */, {0, 0, 0x9F2C} /* East Asian ideograph */, {0, 0, 0x9F34} /* East Asian ideograph */, {0, 0, 0x9F3B} /* East Asian ideograph */, {0, 0, 0x9F3E} /* East Asian ideograph */, {0, 0, 0x9F4A} /* East Asian ideograph */, {0, 0, 0x9F4B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page53 = { 0, marc8_31page53_dir }; /* PAGE 52 */ struct yaz_iconv_trie_dir marc8_31page52_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x993F} /* East Asian ideograph */, {0, 0, 0x993D} /* East Asian ideograph */, {0, 0, 0x9945} /* East Asian ideograph */, {0, 0, 0x9952} /* East Asian ideograph */, {0, 0, 0x9951} /* East Asian ideograph */, {0, 0, 0x995C} /* East Asian ideograph */, {0, 0, 0x995E} /* East Asian ideograph */, {0, 0, 0x9996} /* East Asian ideograph */, {0, 0, 0x9999} /* East Asian ideograph */, {0, 0, 0x99A5} /* East Asian ideograph */, {0, 0, 0x99A8} /* East Asian ideograph */, {0, 0, 0x99AC} /* East Asian ideograph */, {0, 0, 0x99AE} /* East Asian ideograph */, {0, 0, 0x99AD} /* East Asian ideograph */, {0, 0, 0x99B3} /* East Asian ideograph */, {0, 0, 0x99B1} /* East Asian ideograph */, {0, 0, 0x99B4} /* East Asian ideograph */, {0, 0, 0x99C1} /* East Asian ideograph */, {0, 0, 0x99D0} /* East Asian ideograph */, {0, 0, 0x99DD} /* East Asian ideograph */, {0, 0, 0x99D5} /* East Asian ideograph */, {0, 0, 0x99DF} /* East Asian ideograph */, {0, 0, 0x99DB} /* East Asian ideograph */, {0, 0, 0x99D2} /* East Asian ideograph */, {0, 0, 0x99D9} /* East Asian ideograph */, {0, 0, 0x99D1} /* East Asian ideograph */, {0, 0, 0x99ED} /* East Asian ideograph */, {0, 0, 0x99F1} /* East Asian ideograph */, {0, 0, 0x9A01} /* East Asian ideograph */, {0, 0, 0x99FF} /* East Asian ideograph */, {0, 0, 0x99E2} /* East Asian ideograph */, {0, 0, 0x9A0E} /* East Asian ideograph */, {0, 0, 0x9A19} /* East Asian ideograph */, {0, 0, 0x9A16} /* East Asian ideograph */, {0, 0, 0x9A2B} /* East Asian ideograph */, {0, 0, 0x9A30} /* East Asian ideograph */, {0, 0, 0x9A37} /* East Asian ideograph */, {0, 0, 0x9A43} /* East Asian ideograph */, {0, 0, 0x9A45} /* East Asian ideograph */, {0, 0, 0x9A40} /* East Asian ideograph */, {0, 0, 0x9A3E} /* East Asian ideograph */, {0, 0, 0x9A55} /* East Asian ideograph */, {0, 0, 0x9A5A} /* East Asian ideograph */, {0, 0, 0x9A5B} /* East Asian ideograph */, {0, 0, 0x9A57} /* East Asian ideograph */, {0, 0, 0x9A5F} /* East Asian ideograph */, {0, 0, 0x9A62} /* East Asian ideograph */, {0, 0, 0x9A65} /* East Asian ideograph */, {0, 0, 0x9A6A} /* East Asian ideograph */, {0, 0, 0x9AA8} /* East Asian ideograph */, {0, 0, 0x9AAF} /* East Asian ideograph */, {0, 0, 0x9AB0} /* East Asian ideograph */, {0, 0, 0x9AB7} /* East Asian ideograph */, {0, 0, 0x9AB8} /* East Asian ideograph */, {0, 0, 0x9ABC} /* East Asian ideograph */, {0, 0, 0x9ACF} /* East Asian ideograph */, {0, 0, 0x9AD3} /* East Asian ideograph */, {0, 0, 0x9AD4} /* East Asian ideograph */, {0, 0, 0x9AD2} /* East Asian ideograph */, {0, 0, 0x9AD8} /* East Asian ideograph */, {0, 0, 0x9AE5} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9AEE} /* East Asian ideograph */, {0, 0, 0x9AFB} /* East Asian ideograph */, {0, 0, 0x9AED} /* East Asian ideograph */, {0, 0, 0x9B03} /* East Asian ideograph */, {0, 0, 0x9B06} /* East Asian ideograph */, {0, 0, 0x9B0D} /* East Asian ideograph */, {0, 0, 0x9B1A} /* East Asian ideograph */, {0, 0, 0x9B22} /* East Asian ideograph */, {0, 0, 0x9B25} /* East Asian ideograph */, {0, 0, 0x9B27} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9B31} /* East Asian ideograph */, {0, 0, 0x9B32} /* East Asian ideograph */, {0, 0, 0x9B3C} /* East Asian ideograph */, {0, 0, 0x9B41} /* East Asian ideograph */, {0, 0, 0x9B42} /* East Asian ideograph */, {0, 0, 0x9B45} /* East Asian ideograph */, {0, 0, 0x9B44} /* East Asian ideograph */, {0, 0, 0x9B4F} /* East Asian ideograph */, {0, 0, 0x9B54} /* East Asian ideograph */, {0, 0, 0x9B58} /* East Asian ideograph */, {0, 0, 0x9B5A} /* East Asian ideograph */, {0, 0, 0x9B77} /* East Asian ideograph */, {0, 0, 0x9B6F} /* East Asian ideograph */, {0, 0, 0x9B91} /* East Asian ideograph */, {0, 0, 0x9BAB} /* East Asian ideograph */, {0, 0, 0x9BAE} /* East Asian ideograph */, {0, 0, 0x9BAA} /* East Asian ideograph */, {0, 0, 0x9BCA} /* East Asian ideograph */, {0, 0, 0x9BC9} /* East Asian ideograph */, {0, 0, 0x9BE8} /* East Asian ideograph */, {0, 0, 0x9BE7} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page52 = { 0, marc8_31page52_dir }; /* PAGE 51 */ struct yaz_iconv_trie_dir marc8_31page51_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x978D} /* East Asian ideograph */, {0, 0, 0x978B} /* East Asian ideograph */, {0, 0, 0x978F} /* East Asian ideograph */, {0, 0, 0x9798} /* East Asian ideograph */, {0, 0, 0x97A0} /* East Asian ideograph */, {0, 0, 0x97A3} /* East Asian ideograph */, {0, 0, 0x97A6} /* East Asian ideograph */, {0, 0, 0x97AD} /* East Asian ideograph */, {0, 0, 0x97C3} /* East Asian ideograph */, {0, 0, 0x97C1} /* East Asian ideograph */, {0, 0, 0x97C6} /* East Asian ideograph */, {0, 0, 0x97CB} /* East Asian ideograph */, {0, 0, 0x97CC} /* East Asian ideograph */, {0, 0, 0x97D3} /* East Asian ideograph */, {0, 0, 0x97DC} /* East Asian ideograph */, {0, 0, 0x97ED} /* East Asian ideograph */, {0, 0, 0x97F3} /* East Asian ideograph */, {0, 0, 0x7AE0} /* East Asian ideograph */, {0, 0, 0x7ADF} /* East Asian ideograph */, {0, 0, 0x97F6} /* East Asian ideograph */, {0, 0, 0x97FB} /* East Asian ideograph */, {0, 0, 0x97FF} /* East Asian ideograph (variant of EACC 456036) */, {0, 0, 0x9801} /* East Asian ideograph */, {0, 0, 0x9802} /* East Asian ideograph */, {0, 0, 0x9803} /* East Asian ideograph */, {0, 0, 0x9805} /* East Asian ideograph */, {0, 0, 0x9806} /* East Asian ideograph */, {0, 0, 0x9808} /* East Asian ideograph */, {0, 0, 0x9810} /* East Asian ideograph */, {0, 0, 0x980A} /* East Asian ideograph */, {0, 0, 0x9811} /* East Asian ideograph */, {0, 0, 0x9813} /* East Asian ideograph */, {0, 0, 0x9812} /* East Asian ideograph */, {0, 0, 0x980C} /* East Asian ideograph */, {0, 0, 0x9817} /* East Asian ideograph */, {0, 0, 0x9818} /* East Asian ideograph (variant of EACC 4B6044) */, {0, 0, 0x9821} /* East Asian ideograph */, {0, 0, 0x982D} /* East Asian ideograph */, {0, 0, 0x9830} /* East Asian ideograph */, {0, 0, 0x9838} /* East Asian ideograph */, {0, 0, 0x983B} /* East Asian ideograph */, {0, 0, 0x9839} /* East Asian ideograph */, {0, 0, 0x9837} /* East Asian ideograph */, {0, 0, 0x9824} /* East Asian ideograph */, {0, 0, 0x9846} /* East Asian ideograph */, {0, 0, 0x9854} /* East Asian ideograph */, {0, 0, 0x984D} /* East Asian ideograph */, {0, 0, 0x984C} /* East Asian ideograph */, {0, 0, 0x984E} /* East Asian ideograph */, {0, 0, 0x9853} /* East Asian ideograph */, {0, 0, 0x985E} /* East Asian ideograph (variant of EACC 4B6053) */, {0, 0, 0x985A} /* East Asian ideograph */, {0, 0, 0x9858} /* East Asian ideograph */, {0, 0, 0x9867} /* East Asian ideograph */, {0, 0, 0x986B} /* East Asian ideograph */, {0, 0, 0x986F} /* East Asian ideograph */, {0, 0, 0x9871} /* East Asian ideograph */, {0, 0, 0x9870} /* East Asian ideograph */, {0, 0, 0x98A8} /* East Asian ideograph */, {0, 0, 0x98AF} /* East Asian ideograph */, {0, 0, 0x98B1} /* East Asian ideograph */, {0, 0, 0x98B3} /* East Asian ideograph */, {0, 0, 0x98B6} /* East Asian ideograph */, {0, 0, 0x98BA} /* East Asian ideograph */, {0, 0, 0x98BC} /* East Asian ideograph */, {0, 0, 0x98C4} /* East Asian ideograph */, {0, 0, 0x98DB} /* East Asian ideograph */, {0, 0, 0x98DF} /* East Asian ideograph */, {0, 0, 0x98E2} /* East Asian ideograph */, {0, 0, 0x98E7} /* East Asian ideograph */, {0, 0, 0x98E9} /* East Asian ideograph */, {0, 0, 0x98ED} /* East Asian ideograph */, {0, 0, 0x98EA} /* East Asian ideograph */, {0, 0, 0x98EE} /* East Asian ideograph */, {0, 0, 0x98EF} /* East Asian ideograph */, {0, 0, 0x98FC} /* East Asian ideograph */, {0, 0, 0x98F4} /* East Asian ideograph */, {0, 0, 0x98FD} /* East Asian ideograph */, {0, 0, 0x98FE} /* East Asian ideograph */, {0, 0, 0x9903} /* East Asian ideograph */, {0, 0, 0x990A} /* East Asian ideograph */, {0, 0, 0x990C} /* East Asian ideograph */, {0, 0, 0x9909} /* East Asian ideograph */, {0, 0, 0x9910} /* East Asian ideograph */, {0, 0, 0x9912} /* East Asian ideograph */, {0, 0, 0x9918} /* East Asian ideograph */, {0, 0, 0x9913} /* East Asian ideograph */, {0, 0, 0x9905} /* East Asian ideograph */, {0, 0, 0x9928} /* East Asian ideograph */, {0, 0, 0x991E} /* East Asian ideograph */, {0, 0, 0x991B} /* East Asian ideograph */, {0, 0, 0x9921} /* East Asian ideograph */, {0, 0, 0x9935} /* East Asian ideograph */, {0, 0, 0x993E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page51 = { 0, marc8_31page51_dir }; /* PAGE 50 */ struct yaz_iconv_trie_dir marc8_31page50_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9664} /* East Asian ideograph */, {0, 0, 0x966A} /* East Asian ideograph */, {0, 0, 0x9673} /* East Asian ideograph */, {0, 0, 0x9678} /* East Asian ideograph */, {0, 0, 0x9675} /* East Asian ideograph */, {0, 0, 0x9672} /* East Asian ideograph */, {0, 0, 0x9676} /* East Asian ideograph */, {0, 0, 0x9677} /* East Asian ideograph */, {0, 0, 0x9674} /* East Asian ideograph */, {0, 0, 0x9670} /* East Asian ideograph */, {0, 0, 0x968A} /* East Asian ideograph */, {0, 0, 0x968E} /* East Asian ideograph */, {0, 0, 0x968B} /* East Asian ideograph */, {0, 0, 0x967D} /* East Asian ideograph */, {0, 0, 0x9685} /* East Asian ideograph */, {0, 0, 0x9686} /* East Asian ideograph */, {0, 0, 0x968D} /* East Asian ideograph */, {0, 0, 0x9698} /* East Asian ideograph */, {0, 0, 0x9694} /* East Asian ideograph */, {0, 0, 0x9699} /* East Asian ideograph */, {0, 0, 0x9695} /* East Asian ideograph */, {0, 0, 0x969C} /* East Asian ideograph */, {0, 0, 0x969B} /* East Asian ideograph */, {0, 0, 0x96A7} /* East Asian ideograph */, {0, 0, 0x96A8} /* East Asian ideograph */, {0, 0, 0x96AA} /* East Asian ideograph */, {0, 0, 0x96B1} /* East Asian ideograph */, {0, 0, 0x96B4} /* East Asian ideograph */, {0, 0, 0x96B8} /* East Asian ideograph */, {0, 0, 0x96BB} /* East Asian ideograph */, {0, 0, 0x96C0} /* East Asian ideograph */, {0, 0, 0x96C7} /* East Asian ideograph */, {0, 0, 0x96C6} /* East Asian ideograph */, {0, 0, 0x96C4} /* East Asian ideograph */, {0, 0, 0x96C1} /* East Asian ideograph */, {0, 0, 0x96C5} /* East Asian ideograph */, {0, 0, 0x96CD} /* East Asian ideograph */, {0, 0, 0x96CB} /* East Asian ideograph */, {0, 0, 0x96C9} /* East Asian ideograph */, {0, 0, 0x96CC} /* East Asian ideograph */, {0, 0, 0x96D5} /* East Asian ideograph */, {0, 0, 0x96D6} /* East Asian ideograph */, {0, 0, 0x96DC} /* East Asian ideograph */, {0, 0, 0x96DE} /* East Asian ideograph */, {0, 0, 0x96DB} /* East Asian ideograph */, {0, 0, 0x96D9} /* East Asian ideograph */, {0, 0, 0x96E2} /* East Asian ideograph */, {0, 0, 0x96E3} /* East Asian ideograph (variant of EACC 4B5F50) */, {0, 0, 0x96E8} /* East Asian ideograph */, {0, 0, 0x96EA} /* East Asian ideograph */, {0, 0, 0x96EF} /* East Asian ideograph */, {0, 0, 0x96F2} /* East Asian ideograph */, {0, 0, 0x96FB} /* East Asian ideograph */, {0, 0, 0x96F7} /* East Asian ideograph */, {0, 0, 0x96F9} /* East Asian ideograph */, {0, 0, 0x96F6} /* East Asian ideograph */, {0, 0, 0x9700} /* East Asian ideograph */, {0, 0, 0x9707} /* East Asian ideograph */, {0, 0, 0x9704} /* East Asian ideograph */, {0, 0, 0x9709} /* East Asian ideograph */, {0, 0, 0x9706} /* East Asian ideograph */, {0, 0, 0x9711} /* East Asian ideograph */, {0, 0, 0x970E} /* East Asian ideograph */, {0, 0, 0x9716} /* East Asian ideograph */, {0, 0, 0x970F} /* East Asian ideograph */, {0, 0, 0x970D} /* East Asian ideograph */, {0, 0, 0x9713} /* East Asian ideograph */, {0, 0, 0x971C} /* East Asian ideograph */, {0, 0, 0x971E} /* East Asian ideograph */, {0, 0, 0x972A} /* East Asian ideograph */, {0, 0, 0x9727} /* East Asian ideograph */, {0, 0, 0x9738} /* East Asian ideograph */, {0, 0, 0x9739} /* East Asian ideograph */, {0, 0, 0x9732} /* East Asian ideograph */, {0, 0, 0x973D} /* East Asian ideograph */, {0, 0, 0x973E} /* East Asian ideograph */, {0, 0, 0x9744} /* East Asian ideograph */, {0, 0, 0x9742} /* East Asian ideograph */, {0, 0, 0x9748} /* East Asian ideograph */, {0, 0, 0x9751} /* East Asian ideograph */, {0, 0, 0x9756} /* East Asian ideograph (variant of EACC 4B5F71) */, {0, 0, 0x975B} /* East Asian ideograph (variant of EACC 4B5F72) */, {0, 0, 0x975C} /* East Asian ideograph */, {0, 0, 0x975E} /* East Asian ideograph */, {0, 0, 0x9760} /* East Asian ideograph */, {0, 0, 0x9761} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9766} /* East Asian ideograph */, {0, 0, 0x9768} /* East Asian ideograph */, {0, 0, 0x9769} /* East Asian ideograph */, {0, 0, 0x9776} /* East Asian ideograph */, {0, 0, 0x9774} /* East Asian ideograph */, {0, 0, 0x977C} /* East Asian ideograph */, {0, 0, 0x9785} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page50 = { 0, marc8_31page50_dir }; /* PAGE 49 */ struct yaz_iconv_trie_dir marc8_31page49_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x937E} /* East Asian ideograph */, {0, 0, 0x9318} /* East Asian ideograph */, {0, 0, 0x936C} /* East Asian ideograph */, {0, 0, 0x935B} /* East Asian ideograph */, {0, 0, 0x938A} /* East Asian ideograph */, {0, 0, 0x9394} /* East Asian ideograph */, {0, 0, 0x93AE} /* East Asian ideograph */, {0, 0, 0x9396} /* East Asian ideograph */, {0, 0, 0x93A2} /* East Asian ideograph */, {0, 0, 0x93B3} /* East Asian ideograph */, {0, 0, 0x93E1} /* East Asian ideograph */, {0, 0, 0x93D1} /* East Asian ideograph */, {0, 0, 0x93D6} /* East Asian ideograph */, {0, 0, 0x93C3} /* East Asian ideograph */, {0, 0, 0x93DF} /* East Asian ideograph */, {0, 0, 0x93D7} /* East Asian ideograph */, {0, 0, 0x93C8} /* East Asian ideograph */, {0, 0, 0x93E2} /* East Asian ideograph */, {0, 0, 0x93DC} /* East Asian ideograph */, {0, 0, 0x93E4} /* East Asian ideograph */, {0, 0, 0x93DD} /* East Asian ideograph */, {0, 0, 0x93CD} /* East Asian ideograph */, {0, 0, 0x93D8} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9403} /* East Asian ideograph */, {0, 0, 0x942E} /* East Asian ideograph */, {0, 0, 0x93FD} /* East Asian ideograph */, {0, 0, 0x9433} /* East Asian ideograph */, {0, 0, 0x9435} /* East Asian ideograph */, {0, 0, 0x943A} /* East Asian ideograph */, {0, 0, 0x9438} /* East Asian ideograph */, {0, 0, 0x9432} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9451} /* East Asian ideograph */, {0, 0, 0x9444} /* East Asian ideograph */, {0, 0, 0x9463} /* East Asian ideograph */, {0, 0, 0x9460} /* East Asian ideograph */, {0, 0, 0x9472} /* East Asian ideograph */, {0, 0, 0x9470} /* East Asian ideograph */, {0, 0, 0x947E} /* East Asian ideograph */, {0, 0, 0x947C} /* East Asian ideograph */, {0, 0, 0x947D} /* East Asian ideograph */, {0, 0, 0x947F} /* East Asian ideograph */, {0, 0, 0x9577} /* East Asian ideograph */, {0, 0, 0x9580} /* East Asian ideograph */, {0, 0, 0x9582} /* East Asian ideograph */, {0, 0, 0x9583} /* East Asian ideograph */, {0, 0, 0x9589} /* East Asian ideograph */, {0, 0, 0x9594} /* East Asian ideograph */, {0, 0, 0x958F} /* East Asian ideograph */, {0, 0, 0x958B} /* East Asian ideograph */, {0, 0, 0x9591} /* East Asian ideograph */, {0, 0, 0x9593} /* East Asian ideograph */, {0, 0, 0x9592} /* East Asian ideograph */, {0, 0, 0x9598} /* East Asian ideograph */, {0, 0, 0x95A1} /* East Asian ideograph */, {0, 0, 0x95A8} /* East Asian ideograph */, {0, 0, 0x95A9} /* East Asian ideograph */, {0, 0, 0x95A3} /* East Asian ideograph */, {0, 0, 0x95A5} /* East Asian ideograph */, {0, 0, 0x95A4} /* East Asian ideograph */, {0, 0, 0x95B1} /* East Asian ideograph */, {0, 0, 0x95AD} /* East Asian ideograph */, {0, 0, 0x95BB} /* East Asian ideograph */, {0, 0, 0x95CA} /* East Asian ideograph */, {0, 0, 0x95CB} /* East Asian ideograph */, {0, 0, 0x95CC} /* East Asian ideograph */, {0, 0, 0x95C8} /* East Asian ideograph */, {0, 0, 0x95C6} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x95D6} /* East Asian ideograph */, {0, 0, 0x95D0} /* East Asian ideograph */, {0, 0, 0x95DC} /* East Asian ideograph */, {0, 0, 0x95E1} /* East Asian ideograph */, {0, 0, 0x95E2} /* East Asian ideograph */, {0, 0, 0x961C} /* East Asian ideograph */, {0, 0, 0x9621} /* East Asian ideograph */, {0, 0, 0x9632} /* East Asian ideograph */, {0, 0, 0x9631} /* East Asian ideograph */, {0, 0, 0x962E} /* East Asian ideograph */, {0, 0, 0x962A} /* East Asian ideograph */, {0, 0, 0x9640} /* East Asian ideograph */, {0, 0, 0x963F} /* East Asian ideograph */, {0, 0, 0x963B} /* East Asian ideograph */, {0, 0, 0x9644} /* East Asian ideograph */, {0, 0, 0x9650} /* East Asian ideograph */, {0, 0, 0x964C} /* East Asian ideograph */, {0, 0, 0x964B} /* East Asian ideograph */, {0, 0, 0x964D} /* East Asian ideograph */, {0, 0, 0x9662} /* East Asian ideograph */, {0, 0, 0x9663} /* East Asian ideograph */, {0, 0, 0x965B} /* East Asian ideograph */, {0, 0, 0x9661} /* East Asian ideograph */, {0, 0, 0x965D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page49 = { 0, marc8_31page49_dir }; /* PAGE 48 */ struct yaz_iconv_trie_dir marc8_31page48_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9163} /* East Asian ideograph */, {0, 0, 0x9165} /* East Asian ideograph */, {0, 0, 0x916C} /* East Asian ideograph */, {0, 0, 0x9169} /* East Asian ideograph */, {0, 0, 0x916A} /* East Asian ideograph */, {0, 0, 0x9175} /* East Asian ideograph */, {0, 0, 0x9178} /* East Asian ideograph */, {0, 0, 0x9177} /* East Asian ideograph */, {0, 0, 0x9187} /* East Asian ideograph */, {0, 0, 0x9189} /* East Asian ideograph */, {0, 0, 0x918B} /* East Asian ideograph */, {0, 0, 0x9183} /* East Asian ideograph */, {0, 0, 0x9192} /* East Asian ideograph */, {0, 0, 0x91A3} /* East Asian ideograph */, {0, 0, 0x919E} /* East Asian ideograph */, {0, 0, 0x919C} /* East Asian ideograph */, {0, 0, 0x91AB} /* East Asian ideograph */, {0, 0, 0x91AC} /* East Asian ideograph */, {0, 0, 0x91BA} /* East Asian ideograph */, {0, 0, 0x91C0} /* East Asian ideograph */, {0, 0, 0x91C1} /* East Asian ideograph */, {0, 0, 0x91C7} /* East Asian ideograph */, {0, 0, 0x91C9} /* East Asian ideograph */, {0, 0, 0x91CB} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x91CD} /* East Asian ideograph */, {0, 0, 0x91CE} /* East Asian ideograph */, {0, 0, 0x91CF} /* East Asian ideograph */, {0, 0, 0x91D0} /* East Asian ideograph */, {0, 0, 0x91D1} /* East Asian ideograph */, {0, 0, 0x91DD} /* East Asian ideograph */, {0, 0, 0x91D8} /* East Asian ideograph */, {0, 0, 0x91D7} /* East Asian ideograph */, {0, 0, 0x91DC} /* East Asian ideograph */, {0, 0, 0x91F5} /* East Asian ideograph */, {0, 0, 0x91E6} /* East Asian ideograph */, {0, 0, 0x91E3} /* East Asian ideograph */, {0, 0, 0x91E7} /* East Asian ideograph */, {0, 0, 0x9223} /* East Asian ideograph */, {0, 0, 0x920D} /* East Asian ideograph */, {0, 0, 0x9215} /* East Asian ideograph */, {0, 0, 0x9209} /* East Asian ideograph */, {0, 0, 0x9214} /* East Asian ideograph */, {0, 0, 0x921E} /* East Asian ideograph */, {0, 0, 0x9210} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9237} /* East Asian ideograph */, {0, 0, 0x9238} /* East Asian ideograph */, {0, 0, 0x923D} /* East Asian ideograph */, {0, 0, 0x923E} /* East Asian ideograph */, {0, 0, 0x9240} /* East Asian ideograph */, {0, 0, 0x924B} /* East Asian ideograph */, {0, 0, 0x925B} /* East Asian ideograph */, {0, 0, 0x9264} /* East Asian ideograph */, {0, 0, 0x9251} /* East Asian ideograph */, {0, 0, 0x9234} /* East Asian ideograph (variant of EACC 4B5D58) */, {0, 0, 0x9278} /* East Asian ideograph */, {0, 0, 0x9280} /* East Asian ideograph */, {0, 0, 0x92AC} /* East Asian ideograph */, {0, 0, 0x9285} /* East Asian ideograph */, {0, 0, 0x9298} /* East Asian ideograph */, {0, 0, 0x9296} /* East Asian ideograph */, {0, 0, 0x927B} /* East Asian ideograph */, {0, 0, 0x9293} /* East Asian ideograph */, {0, 0, 0x929C} /* East Asian ideograph */, {0, 0, 0x92C5} /* East Asian ideograph */, {0, 0, 0x92BB} /* East Asian ideograph */, {0, 0, 0x92B3} /* East Asian ideograph */, {0, 0, 0x92EA} /* East Asian ideograph */, {0, 0, 0x92B7} /* East Asian ideograph */, {0, 0, 0x92C1} /* East Asian ideograph */, {0, 0, 0x92E4} /* East Asian ideograph */, {0, 0, 0x92BC} /* East Asian ideograph */, {0, 0, 0x92D2} /* East Asian ideograph */, {0, 0, 0x9320} /* East Asian ideograph */, {0, 0, 0x9336} /* East Asian ideograph */, {0, 0, 0x92F8} /* East Asian ideograph */, {0, 0, 0x9333} /* East Asian ideograph */, {0, 0, 0x932F} /* East Asian ideograph */, {0, 0, 0x9322} /* East Asian ideograph */, {0, 0, 0x92FC} /* East Asian ideograph */, {0, 0, 0x932B} /* East Asian ideograph */, {0, 0, 0x931A} /* East Asian ideograph */, {0, 0, 0x9304} /* East Asian ideograph */, {0, 0, 0x9310} /* East Asian ideograph */, {0, 0, 0x9326} /* East Asian ideograph */, {0, 0, 0x934D} /* East Asian ideograph */, {0, 0, 0x9382} /* East Asian ideograph */, {0, 0, 0x9375} /* East Asian ideograph */, {0, 0, 0x9365} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x934B} /* East Asian ideograph */, {0, 0, 0x9328} /* East Asian ideograph */, {0, 0, 0x9370} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page48 = { 0, marc8_31page48_dir }; /* PAGE 47 */ struct yaz_iconv_trie_dir marc8_31page47_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x901F} /* East Asian ideograph */, {0, 0, 0x9017} /* East Asian ideograph */, {0, 0, 0x901D} /* East Asian ideograph */, {0, 0, 0x9010} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x900D} /* East Asian ideograph */, {0, 0, 0x901E} /* East Asian ideograph */, {0, 0, 0x901A} /* East Asian ideograph */, {0, 0, 0x9020} /* East Asian ideograph */, {0, 0, 0x900F} /* East Asian ideograph */, {0, 0, 0x9022} /* East Asian ideograph */, {0, 0, 0x9016} /* East Asian ideograph */, {0, 0, 0x901B} /* East Asian ideograph */, {0, 0, 0x9014} /* East Asian ideograph */, {0, 0, 0x902E} /* East Asian ideograph */, {0, 0, 0x9035} /* East Asian ideograph */, {0, 0, 0x9031} /* East Asian ideograph */, {0, 0, 0x9038} /* East Asian ideograph (variant of EACC 4B5C32) */, {0, 0, 0x9032} /* East Asian ideograph */, {0, 0, 0x904B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x9053} /* East Asian ideograph */, {0, 0, 0x9042} /* East Asian ideograph */, {0, 0, 0x9050} /* East Asian ideograph */, {0, 0, 0x9054} /* East Asian ideograph */, {0, 0, 0x9055} /* East Asian ideograph */, {0, 0, 0x903C} /* East Asian ideograph */, {0, 0, 0x9047} /* East Asian ideograph */, {0, 0, 0x904F} /* East Asian ideograph */, {0, 0, 0x904E} /* East Asian ideograph */, {0, 0, 0x904D} /* East Asian ideograph */, {0, 0, 0x9051} /* East Asian ideograph */, {0, 0, 0x9041} /* East Asian ideograph */, {0, 0, 0x903E} /* East Asian ideograph */, {0, 0, 0x9058} /* East Asian ideograph */, {0, 0, 0x9060} /* East Asian ideograph */, {0, 0, 0x905C} /* East Asian ideograph */, {0, 0, 0x9063} /* East Asian ideograph */, {0, 0, 0x9065} /* East Asian ideograph */, {0, 0, 0x905E} /* East Asian ideograph */, {0, 0, 0x9069} /* East Asian ideograph */, {0, 0, 0x906E} /* East Asian ideograph */, {0, 0, 0x9068} /* East Asian ideograph */, {0, 0, 0x906D} /* East Asian ideograph */, {0, 0, 0x9075} /* East Asian ideograph */, {0, 0, 0x9074} /* East Asian ideograph */, {0, 0, 0x9078} /* East Asian ideograph */, {0, 0, 0x9072} /* East Asian ideograph */, {0, 0, 0x9077} /* East Asian ideograph */, {0, 0, 0x907C} /* East Asian ideograph */, {0, 0, 0x907A} /* East Asian ideograph */, {0, 0, 0x907F} /* East Asian ideograph */, {0, 0, 0x907D} /* East Asian ideograph */, {0, 0, 0x9081} /* East Asian ideograph */, {0, 0, 0x9084} /* East Asian ideograph */, {0, 0, 0x9082} /* East Asian ideograph */, {0, 0, 0x9080} /* East Asian ideograph */, {0, 0, 0x9087} /* East Asian ideograph */, {0, 0, 0x908A} /* East Asian ideograph */, {0, 0, 0x9090} /* East Asian ideograph */, {0, 0, 0x908F} /* East Asian ideograph */, {0, 0, 0x9091} /* East Asian ideograph */, {0, 0, 0x9095} /* East Asian ideograph */, {0, 0, 0x90A3} /* East Asian ideograph */, {0, 0, 0x90A2} /* East Asian ideograph */, {0, 0, 0x90AA} /* East Asian ideograph */, {0, 0, 0x90A6} /* East Asian ideograph */, {0, 0, 0x90B5} /* East Asian ideograph */, {0, 0, 0x90B1} /* East Asian ideograph */, {0, 0, 0x90B8} /* East Asian ideograph */, {0, 0, 0x90CE} /* East Asian ideograph */, {0, 0, 0x90CA} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x90E1} /* East Asian ideograph */, {0, 0, 0x90E8} /* East Asian ideograph */, {0, 0, 0x90ED} /* East Asian ideograph */, {0, 0, 0x90F5} /* East Asian ideograph */, {0, 0, 0x90FD} /* East Asian ideograph */, {0, 0, 0x9102} /* East Asian ideograph */, {0, 0, 0x9109} /* East Asian ideograph */, {0, 0, 0x9112} /* East Asian ideograph */, {0, 0, 0x9119} /* East Asian ideograph */, {0, 0, 0x912D} /* East Asian ideograph */, {0, 0, 0x9130} /* East Asian ideograph */, {0, 0, 0x9127} /* East Asian ideograph */, {0, 0, 0x9131} /* East Asian ideograph */, {0, 0, 0x9139} /* East Asian ideograph (variant of EACC 4B5C77) */, {0, 0, 0x9149} /* East Asian ideograph */, {0, 0, 0x914B} /* East Asian ideograph */, {0, 0, 0x914A} /* East Asian ideograph */, {0, 0, 0x9152} /* East Asian ideograph */, {0, 0, 0x914D} /* East Asian ideograph */, {0, 0, 0x914C} /* East Asian ideograph */, {0, 0, 0x9157} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page47 = { 0, marc8_31page47_dir }; /* PAGE 46 */ struct yaz_iconv_trie_dir marc8_31page46_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8E76} /* East Asian ideograph */, {0, 0, 0x8E7C} /* East Asian ideograph */, {0, 0, 0x8E82} /* East Asian ideograph */, {0, 0, 0x8E81} /* East Asian ideograph */, {0, 0, 0x8E87} /* East Asian ideograph */, {0, 0, 0x8E89} /* East Asian ideograph */, {0, 0, 0x8E85} /* East Asian ideograph */, {0, 0, 0x8E8A} /* East Asian ideograph */, {0, 0, 0x8E8D} /* East Asian ideograph (variant of EACC 4B5B29) */, {0, 0, 0x8E91} /* East Asian ideograph */, {0, 0, 0x8EA1} /* East Asian ideograph */, {0, 0, 0x8EAA} /* East Asian ideograph */, {0, 0, 0x8EAB} /* East Asian ideograph */, {0, 0, 0x8EAC} /* East Asian ideograph */, {0, 0, 0x8EB2} /* East Asian ideograph */, {0, 0, 0x8EBA} /* East Asian ideograph */, {0, 0, 0x8EC0} /* East Asian ideograph */, {0, 0, 0x8ECA} /* East Asian ideograph */, {0, 0, 0x8ECB} /* East Asian ideograph */, {0, 0, 0x8ECD} /* East Asian ideograph */, {0, 0, 0x8ECC} /* East Asian ideograph */, {0, 0, 0x8ED2} /* East Asian ideograph */, {0, 0, 0x8ED4} /* East Asian ideograph */, {0, 0, 0x8EDF} /* East Asian ideograph */, {0, 0, 0x8EDB} /* East Asian ideograph */, {0, 0, 0x8EFB} /* East Asian ideograph */, {0, 0, 0x8EF8} /* East Asian ideograph */, {0, 0, 0x8EFC} /* East Asian ideograph */, {0, 0, 0x8F03} /* East Asian ideograph */, {0, 0, 0x8EFE} /* East Asian ideograph */, {0, 0, 0x8F09} /* East Asian ideograph */, {0, 0, 0x8F0A} /* East Asian ideograph */, {0, 0, 0x8F14} /* East Asian ideograph */, {0, 0, 0x8F12} /* East Asian ideograph */, {0, 0, 0x8F15} /* East Asian ideograph */, {0, 0, 0x8F13} /* East Asian ideograph */, {0, 0, 0x8F26} /* East Asian ideograph */, {0, 0, 0x8F1B} /* East Asian ideograph */, {0, 0, 0x8F1F} /* East Asian ideograph */, {0, 0, 0x8F1D} /* East Asian ideograph */, {0, 0, 0x8F29} /* East Asian ideograph */, {0, 0, 0x8F2A} /* East Asian ideograph */, {0, 0, 0x8F1C} /* East Asian ideograph */, {0, 0, 0x8F3B} /* East Asian ideograph */, {0, 0, 0x8F2F} /* East Asian ideograph */, {0, 0, 0x8F38} /* East Asian ideograph */, {0, 0, 0x8F44} /* East Asian ideograph */, {0, 0, 0x8F3E} /* East Asian ideograph */, {0, 0, 0x8F45} /* East Asian ideograph */, {0, 0, 0x8F42} /* East Asian ideograph (variant of EACC 4B5B52) */, {0, 0, 0x8F3F} /* East Asian ideograph */, {0, 0, 0x8F4D} /* East Asian ideograph */, {0, 0, 0x8F49} /* East Asian ideograph */, {0, 0, 0x8F54} /* East Asian ideograph */, {0, 0, 0x8F4E} /* East Asian ideograph */, {0, 0, 0x8F5F} /* East Asian ideograph */, {0, 0, 0x8F61} /* East Asian ideograph */, {0, 0, 0x8F9B} /* East Asian ideograph */, {0, 0, 0x8F9C} /* East Asian ideograph */, {0, 0, 0x8F9F} /* East Asian ideograph */, {0, 0, 0x8FA3} /* East Asian ideograph */, {0, 0, 0x8FA8} /* East Asian ideograph */, {0, 0, 0x8FA6} /* East Asian ideograph */, {0, 0, 0x8FAD} /* East Asian ideograph */, {0, 0, 0x8FAF} /* East Asian ideograph */, {0, 0, 0x8FB0} /* East Asian ideograph */, {0, 0, 0x8FB1} /* East Asian ideograph */, {0, 0, 0x8FB2} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8FC6} /* East Asian ideograph */, {0, 0, 0x8FC5} /* East Asian ideograph */, {0, 0, 0x8FC4} /* East Asian ideograph */, {0, 0, 0x5DE1} /* East Asian ideograph */, {0, 0, 0x8FCE} /* East Asian ideograph */, {0, 0, 0x8FD1} /* East Asian ideograph */, {0, 0, 0x8FD4} /* East Asian ideograph */, {0, 0, 0x8FF0} /* East Asian ideograph (variant of EACC 275B6D) */, {0, 0, 0x8FE6} /* East Asian ideograph */, {0, 0, 0x8FE2} /* East Asian ideograph */, {0, 0, 0x8FEA} /* East Asian ideograph */, {0, 0, 0x8FE5} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8FEB} /* East Asian ideograph */, {0, 0, 0x9001} /* East Asian ideograph */, {0, 0, 0x9006} /* East Asian ideograph */, {0, 0, 0x8FF7} /* East Asian ideograph */, {0, 0, 0x9000} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x9003} /* East Asian ideograph */, {0, 0, 0x8FFD} /* East Asian ideograph */, {0, 0, 0x9005} /* East Asian ideograph */, {0, 0, 0x9019} /* East Asian ideograph */, {0, 0, 0x9023} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page46 = { 0, marc8_31page46_dir }; /* PAGE 45 */ struct yaz_iconv_trie_dir marc8_31page45_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8CC5} /* East Asian ideograph */, {0, 0, 0x8CC7} /* East Asian ideograph */, {0, 0, 0x8CCA} /* East Asian ideograph */, {0, 0, 0x8CC8} /* East Asian ideograph */, {0, 0, 0x8CC4} /* East Asian ideograph */, {0, 0, 0x8CB2} /* East Asian ideograph */, {0, 0, 0x8CC3} /* East Asian ideograph */, {0, 0, 0x8CC2} /* East Asian ideograph */, {0, 0, 0x8CD3} /* East Asian ideograph */, {0, 0, 0x8CD1} /* East Asian ideograph */, {0, 0, 0x8CD2} /* East Asian ideograph */, {0, 0, 0x8CE0} /* East Asian ideograph */, {0, 0, 0x8CE6} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8CE3} /* East Asian ideograph */, {0, 0, 0x8CE2} /* East Asian ideograph */, {0, 0, 0x8CE4} /* East Asian ideograph */, {0, 0, 0x8CDE} /* East Asian ideograph */, {0, 0, 0x8CDC} /* East Asian ideograph */, {0, 0, 0x8CEA} /* East Asian ideograph */, {0, 0, 0x8CED} /* East Asian ideograph */, {0, 0, 0x8CF4} /* East Asian ideograph */, {0, 0, 0x8CFD} /* East Asian ideograph */, {0, 0, 0x8CFA} /* East Asian ideograph */, {0, 0, 0x8D05} /* East Asian ideograph */, {0, 0, 0x8CFC} /* East Asian ideograph */, {0, 0, 0x8D08} /* East Asian ideograph (variant of EACC 4B5A3B) */, {0, 0, 0x8D0B} /* East Asian ideograph */, {0, 0, 0x8D0A} /* East Asian ideograph */, {0, 0, 0x8D0F} /* East Asian ideograph */, {0, 0, 0x8D0D} /* East Asian ideograph */, {0, 0, 0x8D13} /* East Asian ideograph */, {0, 0, 0x8D16} /* East Asian ideograph */, {0, 0, 0x8D1B} /* East Asian ideograph */, {0, 0, 0x8D64} /* East Asian ideograph */, {0, 0, 0x8D67} /* East Asian ideograph */, {0, 0, 0x8D66} /* East Asian ideograph */, {0, 0, 0x8D6B} /* East Asian ideograph */, {0, 0, 0x8D6D} /* East Asian ideograph */, {0, 0, 0x8D70} /* East Asian ideograph */, {0, 0, 0x8D74} /* East Asian ideograph */, {0, 0, 0x8D73} /* East Asian ideograph */, {0, 0, 0x8D77} /* East Asian ideograph */, {0, 0, 0x8D85} /* East Asian ideograph */, {0, 0, 0x8D8A} /* East Asian ideograph */, {0, 0, 0x8D81} /* East Asian ideograph */, {0, 0, 0x8D99} /* East Asian ideograph */, {0, 0, 0x8D95} /* East Asian ideograph */, {0, 0, 0x8DA3} /* East Asian ideograph */, {0, 0, 0x8D9F} /* East Asian ideograph */, {0, 0, 0x8DA8} /* East Asian ideograph */, {0, 0, 0x8DB3} /* East Asian ideograph */, {0, 0, 0x8DB4} /* East Asian ideograph */, {0, 0, 0x8DBE} /* East Asian ideograph */, {0, 0, 0x8DCE} /* East Asian ideograph */, {0, 0, 0x8DDD} /* East Asian ideograph */, {0, 0, 0x8DDB} /* East Asian ideograph */, {0, 0, 0x8DCB} /* East Asian ideograph */, {0, 0, 0x8DDA} /* East Asian ideograph */, {0, 0, 0x8DC6} /* East Asian ideograph */, {0, 0, 0x8DD1} /* East Asian ideograph */, {0, 0, 0x8DCC} /* East Asian ideograph */, {0, 0, 0x8DE1} /* East Asian ideograph */, {0, 0, 0x8DDF} /* East Asian ideograph */, {0, 0, 0x8DE8} /* East Asian ideograph */, {0, 0, 0x8DF3} /* East Asian ideograph */, {0, 0, 0x8DFA} /* East Asian ideograph */, {0, 0, 0x8DEA} /* East Asian ideograph */, {0, 0, 0x8DEF} /* East Asian ideograph */, {0, 0, 0x8DFC} /* East Asian ideograph */, {0, 0, 0x8E2B} /* East Asian ideograph */, {0, 0, 0x8E10} /* East Asian ideograph */, {0, 0, 0x8E22} /* East Asian ideograph */, {0, 0, 0x8E1D} /* East Asian ideograph */, {0, 0, 0x8E0F} /* East Asian ideograph */, {0, 0, 0x8E29} /* East Asian ideograph */, {0, 0, 0x8E1F} /* East Asian ideograph */, {0, 0, 0x8E44} /* East Asian ideograph */, {0, 0, 0x8E31} /* East Asian ideograph */, {0, 0, 0x8E42} /* East Asian ideograph */, {0, 0, 0x8E34} /* East Asian ideograph */, {0, 0, 0x8E39} /* East Asian ideograph */, {0, 0, 0x8E35} /* East Asian ideograph */, {0, 0, 0x8E49} /* East Asian ideograph */, {0, 0, 0x8E4B} /* East Asian ideograph */, {0, 0, 0x8E48} /* East Asian ideograph */, {0, 0, 0x8E4A} /* East Asian ideograph */, {0, 0, 0x8E63} /* East Asian ideograph */, {0, 0, 0x8E59} /* East Asian ideograph */, {0, 0, 0x8E66} /* East Asian ideograph */, {0, 0, 0x8E64} /* East Asian ideograph */, {0, 0, 0x8E72} /* East Asian ideograph */, {0, 0, 0x8E6C} /* East Asian ideograph */, {0, 0, 0x8E7A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page45 = { 0, marc8_31page45_dir }; /* PAGE 44 */ struct yaz_iconv_trie_dir marc8_31page44_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8AC2} /* East Asian ideograph */, {0, 0, 0x8AB0} /* East Asian ideograph */, {0, 0, 0x8A95} /* East Asian ideograph */, {0, 0, 0x8AD6} /* East Asian ideograph */, {0, 0, 0x8AE6} /* East Asian ideograph */, {0, 0, 0x8AFA} /* East Asian ideograph */, {0, 0, 0x8AEB} /* East Asian ideograph */, {0, 0, 0x8AF1} /* East Asian ideograph */, {0, 0, 0x8AE7} /* East Asian ideograph */, {0, 0, 0x8ADC} /* East Asian ideograph */, {0, 0, 0x8B00} /* East Asian ideograph */, {0, 0, 0x8B01} /* East Asian ideograph (variant of EACC 2D592C) */, {0, 0, 0x8B02} /* East Asian ideograph */, {0, 0, 0x8AFE} /* East Asian ideograph */, {0, 0, 0x8AF7} /* East Asian ideograph */, {0, 0, 0x8AED} /* East Asian ideograph */, {0, 0, 0x8B17} /* East Asian ideograph */, {0, 0, 0x8B19} /* East Asian ideograph */, {0, 0, 0x8B0E} /* East Asian ideograph */, {0, 0, 0x8B1B} /* East Asian ideograph */, {0, 0, 0x8B0A} /* East Asian ideograph */, {0, 0, 0x8B21} /* East Asian ideograph */, {0, 0, 0x8B04} /* East Asian ideograph */, {0, 0, 0x8B1D} /* East Asian ideograph */, {0, 0, 0x8B39} /* East Asian ideograph */, {0, 0, 0x8B2C} /* East Asian ideograph */, {0, 0, 0x8B28} /* East Asian ideograph */, {0, 0, 0x8B58} /* East Asian ideograph */, {0, 0, 0x8B5C} /* East Asian ideograph */, {0, 0, 0x8B4E} /* East Asian ideograph */, {0, 0, 0x8B49} /* East Asian ideograph */, {0, 0, 0x8B5A} /* East Asian ideograph */, {0, 0, 0x8B41} /* East Asian ideograph */, {0, 0, 0x8B4F} /* East Asian ideograph */, {0, 0, 0x8B70} /* East Asian ideograph */, {0, 0, 0x8B6C} /* East Asian ideograph */, {0, 0, 0x8B66} /* East Asian ideograph */, {0, 0, 0x8B6F} /* East Asian ideograph */, {0, 0, 0x8B74} /* East Asian ideograph */, {0, 0, 0x8B77} /* East Asian ideograph */, {0, 0, 0x8B7D} /* East Asian ideograph */, {0, 0, 0x8B80} /* East Asian ideograph */, {0, 0, 0x8B8A} /* East Asian ideograph */, {0, 0, 0x8B93} /* East Asian ideograph */, {0, 0, 0x8B96} /* East Asian ideograph */, {0, 0, 0x8B92} /* East Asian ideograph */, {0, 0, 0x8B9A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8C41} /* East Asian ideograph */, {0, 0, 0x8C3F} /* East Asian ideograph */, {0, 0, 0x8C46} /* East Asian ideograph */, {0, 0, 0x8C48} /* East Asian ideograph */, {0, 0, 0x8C49} /* East Asian ideograph */, {0, 0, 0x8C4C} /* East Asian ideograph */, {0, 0, 0x8C4E} /* East Asian ideograph */, {0, 0, 0x8C50} /* East Asian ideograph */, {0, 0, 0x8C54} /* East Asian ideograph */, {0, 0, 0x8C5A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8C62} /* East Asian ideograph */, {0, 0, 0x8C6A} /* East Asian ideograph */, {0, 0, 0x8C6B} /* East Asian ideograph */, {0, 0, 0x8C6C} /* East Asian ideograph */, {0, 0, 0x8C7A} /* East Asian ideograph */, {0, 0, 0x8C79} /* East Asian ideograph */, {0, 0, 0x8C82} /* East Asian ideograph */, {0, 0, 0x8C8A} /* East Asian ideograph */, {0, 0, 0x8C89} /* East Asian ideograph */, {0, 0, 0x8C8D} /* East Asian ideograph */, {0, 0, 0x8C8C} /* East Asian ideograph */, {0, 0, 0x8C93} /* East Asian ideograph */, {0, 0, 0x8C9D} /* East Asian ideograph */, {0, 0, 0x8C9E} /* East Asian ideograph */, {0, 0, 0x8CA0} /* East Asian ideograph */, {0, 0, 0x8CA2} /* East Asian ideograph */, {0, 0, 0x8CA1} /* East Asian ideograph */, {0, 0, 0x8CAC} /* East Asian ideograph */, {0, 0, 0x8CAB} /* East Asian ideograph */, {0, 0, 0x8CA8} /* East Asian ideograph */, {0, 0, 0x8CAA} /* East Asian ideograph */, {0, 0, 0x8CA7} /* East Asian ideograph */, {0, 0, 0x8CA9} /* East Asian ideograph */, {0, 0, 0x8CAF} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8CBB} /* East Asian ideograph */, {0, 0, 0x8CC1} /* East Asian ideograph */, {0, 0, 0x8CC0} /* East Asian ideograph */, {0, 0, 0x8CB4} /* East Asian ideograph */, {0, 0, 0x8CBC} /* East Asian ideograph */, {0, 0, 0x8CB7} /* East Asian ideograph */, {0, 0, 0x8CB6} /* East Asian ideograph */, {0, 0, 0x8CBD} /* East Asian ideograph */, {0, 0, 0x8CB8} /* East Asian ideograph */, {0, 0, 0x8CBF} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page44 = { 0, marc8_31page44_dir }; /* PAGE 43 */ struct yaz_iconv_trie_dir marc8_31page43_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x896A} /* East Asian ideograph */, {0, 0, 0x896F} /* East Asian ideograph */, {0, 0, 0x8972} /* East Asian ideograph */, {0, 0, 0x897F} /* East Asian ideograph */, {0, 0, 0x8981} /* East Asian ideograph */, {0, 0, 0x8983} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x898B} /* East Asian ideograph */, {0, 0, 0x898F} /* East Asian ideograph */, {0, 0, 0x8993} /* East Asian ideograph */, {0, 0, 0x8996} /* East Asian ideograph */, {0, 0, 0x89AA} /* East Asian ideograph */, {0, 0, 0x89A6} /* East Asian ideograph */, {0, 0, 0x89AC} /* East Asian ideograph */, {0, 0, 0x89B2} /* East Asian ideograph */, {0, 0, 0x89BA} /* East Asian ideograph */, {0, 0, 0x89BD} /* East Asian ideograph */, {0, 0, 0x89C0} /* East Asian ideograph */, {0, 0, 0x89D2} /* East Asian ideograph */, {0, 0, 0x89E3} /* East Asian ideograph */, {0, 0, 0x89F4} /* East Asian ideograph */, {0, 0, 0x89F8} /* East Asian ideograph */, {0, 0, 0x8A00} /* East Asian ideograph */, {0, 0, 0x8A08} /* East Asian ideograph */, {0, 0, 0x8A02} /* East Asian ideograph */, {0, 0, 0x8A03} /* East Asian ideograph */, {0, 0, 0x8A10} /* East Asian ideograph */, {0, 0, 0x8A18} /* East Asian ideograph */, {0, 0, 0x8A0E} /* East Asian ideograph */, {0, 0, 0x8A0C} /* East Asian ideograph */, {0, 0, 0x8A15} /* East Asian ideograph */, {0, 0, 0x8A0A} /* East Asian ideograph */, {0, 0, 0x8A16} /* East Asian ideograph */, {0, 0, 0x8A17} /* East Asian ideograph */, {0, 0, 0x8A13} /* East Asian ideograph */, {0, 0, 0x8A2A} /* East Asian ideograph */, {0, 0, 0x8A23} /* East Asian ideograph */, {0, 0, 0x8A1D} /* East Asian ideograph */, {0, 0, 0x8A25} /* East Asian ideograph */, {0, 0, 0x8A31} /* East Asian ideograph */, {0, 0, 0x8A2D} /* East Asian ideograph */, {0, 0, 0x8A1B} /* East Asian ideograph */, {0, 0, 0x8A1F} /* East Asian ideograph */, {0, 0, 0x8A3B} /* East Asian ideograph */, {0, 0, 0x8A60} /* East Asian ideograph */, {0, 0, 0x8A55} /* East Asian ideograph */, {0, 0, 0x8A5E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8A41} /* East Asian ideograph */, {0, 0, 0x8A54} /* East Asian ideograph */, {0, 0, 0x8A5B} /* East Asian ideograph */, {0, 0, 0x8A50} /* East Asian ideograph */, {0, 0, 0x8A46} /* East Asian ideograph */, {0, 0, 0x8A34} /* East Asian ideograph */, {0, 0, 0x8A3A} /* East Asian ideograph */, {0, 0, 0x8A6B} /* East Asian ideograph */, {0, 0, 0x8A72} /* East Asian ideograph */, {0, 0, 0x8A73} /* East Asian ideograph */, {0, 0, 0x8A66} /* East Asian ideograph */, {0, 0, 0x8A69} /* East Asian ideograph */, {0, 0, 0x8A70} /* East Asian ideograph */, {0, 0, 0x8A63} /* East Asian ideograph */, {0, 0, 0x8A7C} /* East Asian ideograph */, {0, 0, 0x8AA0} /* East Asian ideograph */, {0, 0, 0x8A87} /* East Asian ideograph */, {0, 0, 0x8A85} /* East Asian ideograph */, {0, 0, 0x8A6D} /* East Asian ideograph */, {0, 0, 0x8A79} /* East Asian ideograph */, {0, 0, 0x8A62} /* East Asian ideograph */, {0, 0, 0x8A71} /* East Asian ideograph */, {0, 0, 0x8A6E} /* East Asian ideograph */, {0, 0, 0x8A6C} /* East Asian ideograph */, {0, 0, 0x8AAA} /* East Asian ideograph */, {0, 0, 0x8AA6} /* East Asian ideograph */, {0, 0, 0x8AA1} /* East Asian ideograph */, {0, 0, 0x8A9E} /* East Asian ideograph */, {0, 0, 0x8A8C} /* East Asian ideograph */, {0, 0, 0x8A93} /* East Asian ideograph */, {0, 0, 0x8AA3} /* East Asian ideograph */, {0, 0, 0x8A8D} /* East Asian ideograph */, {0, 0, 0x8AA4} /* East Asian ideograph (variant of EACC 4B5871) */, {0, 0, 0x8AA8} /* East Asian ideograph */, {0, 0, 0x8AA5} /* East Asian ideograph */, {0, 0, 0x8A98} /* East Asian ideograph */, {0, 0, 0x8A91} /* East Asian ideograph */, {0, 0, 0x8ABC} /* East Asian ideograph */, {0, 0, 0x8AC4} /* East Asian ideograph */, {0, 0, 0x8AD2} /* East Asian ideograph */, {0, 0, 0x8AC7} /* East Asian ideograph */, {0, 0, 0x8ACB} /* East Asian ideograph (variant of EACC 4B587A) */, {0, 0, 0x8AF8} /* East Asian ideograph */, {0, 0, 0x8AB2} /* East Asian ideograph */, {0, 0, 0x8ABF} /* East Asian ideograph */, {0, 0, 0x8AC9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page43 = { 0, marc8_31page43_dir }; /* PAGE 42 */ struct yaz_iconv_trie_dir marc8_31page42_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8759} /* East Asian ideograph */, {0, 0, 0x8783} /* East Asian ideograph */, {0, 0, 0x8782} /* East Asian ideograph */, {0, 0, 0x87A2} /* East Asian ideograph */, {0, 0, 0x879E} /* East Asian ideograph */, {0, 0, 0x878D} /* East Asian ideograph */, {0, 0, 0x879F} /* East Asian ideograph */, {0, 0, 0x87D1} /* East Asian ideograph */, {0, 0, 0x87C0} /* East Asian ideograph */, {0, 0, 0x87AB} /* East Asian ideograph */, {0, 0, 0x87B3} /* East Asian ideograph */, {0, 0, 0x87BB} /* East Asian ideograph */, {0, 0, 0x87C8} /* East Asian ideograph */, {0, 0, 0x87D2} /* East Asian ideograph */, {0, 0, 0x87BA} /* East Asian ideograph */, {0, 0, 0x87C6} /* East Asian ideograph */, {0, 0, 0x87CB} /* East Asian ideograph */, {0, 0, 0x87EF} /* East Asian ideograph */, {0, 0, 0x87F2} /* East Asian ideograph */, {0, 0, 0x87EC} /* East Asian ideograph */, {0, 0, 0x87FB} /* East Asian ideograph */, {0, 0, 0x8805} /* East Asian ideograph */, {0, 0, 0x880D} /* East Asian ideograph */, {0, 0, 0x87F9} /* East Asian ideograph */, {0, 0, 0x8814} /* East Asian ideograph */, {0, 0, 0x8815} /* East Asian ideograph */, {0, 0, 0x8822} /* East Asian ideograph */, {0, 0, 0x8823} /* East Asian ideograph */, {0, 0, 0x8821} /* East Asian ideograph */, {0, 0, 0x881F} /* East Asian ideograph */, {0, 0, 0x8831} /* East Asian ideograph */, {0, 0, 0x8839} /* East Asian ideograph */, {0, 0, 0x8836} /* East Asian ideograph */, {0, 0, 0x883B} /* East Asian ideograph */, {0, 0, 0x8840} /* East Asian ideograph */, {0, 0, 0x884C} /* East Asian ideograph */, {0, 0, 0x884D} /* East Asian ideograph */, {0, 0, 0x8853} /* East Asian ideograph (variant of EACC 4B5746) */, {0, 0, 0x8857} /* East Asian ideograph */, {0, 0, 0x8859} /* East Asian ideograph */, {0, 0, 0x885B} /* East Asian ideograph */, {0, 0, 0x885D} /* East Asian ideograph */, {0, 0, 0x8861} /* East Asian ideograph */, {0, 0, 0x8862} /* East Asian ideograph */, {0, 0, 0x8863} /* East Asian ideograph */, {0, 0, 0x521D} /* East Asian ideograph */, {0, 0, 0x8868} /* East Asian ideograph */, {0, 0, 0x886B} /* East Asian ideograph */, {0, 0, 0x8882} /* East Asian ideograph */, {0, 0, 0x8881} /* East Asian ideograph */, {0, 0, 0x8870} /* East Asian ideograph */, {0, 0, 0x8877} /* East Asian ideograph */, {0, 0, 0x8888} /* East Asian ideograph */, {0, 0, 0x88AB} /* East Asian ideograph */, {0, 0, 0x8892} /* East Asian ideograph */, {0, 0, 0x8896} /* East Asian ideograph */, {0, 0, 0x888D} /* East Asian ideograph */, {0, 0, 0x888B} /* East Asian ideograph */, {0, 0, 0x889E} /* East Asian ideograph */, {0, 0, 0x88C1} /* East Asian ideograph */, {0, 0, 0x88C2} /* East Asian ideograph */, {0, 0, 0x88B1} /* East Asian ideograph */, {0, 0, 0x88DF} /* East Asian ideograph */, {0, 0, 0x88D9} /* East Asian ideograph */, {0, 0, 0x88D8} /* East Asian ideograph */, {0, 0, 0x88DC} /* East Asian ideograph */, {0, 0, 0x88CF} /* East Asian ideograph */, {0, 0, 0x88D4} /* East Asian ideograph */, {0, 0, 0x88DD} /* East Asian ideograph */, {0, 0, 0x88D5} /* East Asian ideograph */, {0, 0, 0x8902} /* East Asian ideograph */, {0, 0, 0x88F3} /* East Asian ideograph */, {0, 0, 0x88F8} /* East Asian ideograph */, {0, 0, 0x88F9} /* East Asian ideograph */, {0, 0, 0x88F4} /* East Asian ideograph */, {0, 0, 0x88FD} /* East Asian ideograph */, {0, 0, 0x88E8} /* East Asian ideograph */, {0, 0, 0x891A} /* East Asian ideograph */, {0, 0, 0x8910} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8913} /* East Asian ideograph */, {0, 0, 0x8912} /* East Asian ideograph */, {0, 0, 0x8932} /* East Asian ideograph */, {0, 0, 0x892A} /* East Asian ideograph */, {0, 0, 0x8925} /* East Asian ideograph */, {0, 0, 0x892B} /* East Asian ideograph */, {0, 0, 0x893B} /* East Asian ideograph */, {0, 0, 0x8936} /* East Asian ideograph */, {0, 0, 0x8938} /* East Asian ideograph */, {0, 0, 0x8944} /* East Asian ideograph */, {0, 0, 0x895F} /* East Asian ideograph */, {0, 0, 0x8960} /* East Asian ideograph */, {0, 0, 0x8956} /* East Asian ideograph */, {0, 0, 0x8964} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page42 = { 0, marc8_31page42_dir }; /* PAGE 41 */ struct yaz_iconv_trie_dir marc8_31page41_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x85AA} /* East Asian ideograph */, {0, 0, 0x856D} /* East Asian ideograph */, {0, 0, 0x859B} /* East Asian ideograph */, {0, 0, 0x8591} /* East Asian ideograph */, {0, 0, 0x857E} /* East Asian ideograph */, {0, 0, 0x8594} /* East Asian ideograph */, {0, 0, 0x859C} /* East Asian ideograph */, {0, 0, 0x8587} /* East Asian ideograph */, {0, 0, 0x85CD} /* East Asian ideograph (variant of EACC 4B5629) */, {0, 0, 0x85A9} /* East Asian ideograph */, {0, 0, 0x85CF} /* East Asian ideograph */, {0, 0, 0x85AF} /* East Asian ideograph */, {0, 0, 0x85D0} /* East Asian ideograph */, {0, 0, 0x85C9} /* East Asian ideograph */, {0, 0, 0x85B0} /* East Asian ideograph */, {0, 0, 0x85E9} /* East Asian ideograph */, {0, 0, 0x85DD} /* East Asian ideograph */, {0, 0, 0x85EA} /* East Asian ideograph */, {0, 0, 0x85E4} /* East Asian ideograph */, {0, 0, 0x85D5} /* East Asian ideograph */, {0, 0, 0x85E5} /* East Asian ideograph */, {0, 0, 0x85FB} /* East Asian ideograph */, {0, 0, 0x85F9} /* East Asian ideograph */, {0, 0, 0x8611} /* East Asian ideograph */, {0, 0, 0x85FA} /* East Asian ideograph */, {0, 0, 0x8606} /* East Asian ideograph */, {0, 0, 0x860B} /* East Asian ideograph */, {0, 0, 0x8607} /* East Asian ideograph */, {0, 0, 0x860A} /* East Asian ideograph */, {0, 0, 0x862D} /* East Asian ideograph */, {0, 0, 0x8617} /* East Asian ideograph */, {0, 0, 0x861A} /* East Asian ideograph */, {0, 0, 0x8638} /* East Asian ideograph */, {0, 0, 0x863F} /* East Asian ideograph */, {0, 0, 0x864E} /* East Asian ideograph */, {0, 0, 0x8650} /* East Asian ideograph */, {0, 0, 0x8654} /* East Asian ideograph */, {0, 0, 0x5F6A} /* East Asian ideograph */, {0, 0, 0x8655} /* East Asian ideograph */, {0, 0, 0x865C} /* East Asian ideograph */, {0, 0, 0x865B} /* East Asian ideograph */, {0, 0, 0x865F} /* East Asian ideograph */, {0, 0, 0x865E} /* East Asian ideograph */, {0, 0, 0x8667} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8679} /* East Asian ideograph */, {0, 0, 0x86A9} /* East Asian ideograph */, {0, 0, 0x86AA} /* East Asian ideograph */, {0, 0, 0x868A} /* East Asian ideograph */, {0, 0, 0x8693} /* East Asian ideograph */, {0, 0, 0x86A4} /* East Asian ideograph */, {0, 0, 0x868C} /* East Asian ideograph */, {0, 0, 0x86A3} /* East Asian ideograph */, {0, 0, 0x86C0} /* East Asian ideograph */, {0, 0, 0x86C7} /* East Asian ideograph */, {0, 0, 0x86B5} /* East Asian ideograph */, {0, 0, 0x86CB} /* East Asian ideograph */, {0, 0, 0x86B6} /* East Asian ideograph */, {0, 0, 0x86C4} /* East Asian ideograph */, {0, 0, 0x86C6} /* East Asian ideograph */, {0, 0, 0x86B1} /* East Asian ideograph */, {0, 0, 0x86AF} /* East Asian ideograph */, {0, 0, 0x86DF} /* East Asian ideograph */, {0, 0, 0x86D9} /* East Asian ideograph */, {0, 0, 0x86ED} /* East Asian ideograph */, {0, 0, 0x86D4} /* East Asian ideograph */, {0, 0, 0x86DB} /* East Asian ideograph */, {0, 0, 0x86E4} /* East Asian ideograph */, {0, 0, 0x86FB} /* East Asian ideograph */, {0, 0, 0x86F9} /* East Asian ideograph */, {0, 0, 0x8707} /* East Asian ideograph */, {0, 0, 0x8703} /* East Asian ideograph */, {0, 0, 0x8708} /* East Asian ideograph */, {0, 0, 0x8700} /* East Asian ideograph */, {0, 0, 0x86FE} /* East Asian ideograph */, {0, 0, 0x8713} /* East Asian ideograph */, {0, 0, 0x8702} /* East Asian ideograph */, {0, 0, 0x871C} /* East Asian ideograph */, {0, 0, 0x873F} /* East Asian ideograph */, {0, 0, 0x873B} /* East Asian ideograph */, {0, 0, 0x8722} /* East Asian ideograph */, {0, 0, 0x8725} /* East Asian ideograph */, {0, 0, 0x8734} /* East Asian ideograph */, {0, 0, 0x8718} /* East Asian ideograph */, {0, 0, 0x8755} /* East Asian ideograph */, {0, 0, 0x8760} /* East Asian ideograph */, {0, 0, 0x8776} /* East Asian ideograph */, {0, 0, 0x8774} /* East Asian ideograph */, {0, 0, 0x8766} /* East Asian ideograph */, {0, 0, 0x8778} /* East Asian ideograph */, {0, 0, 0x8768} /* East Asian ideograph */, {0, 0, 0x874C} /* East Asian ideograph */, {0, 0, 0x8757} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page41 = { 0, marc8_31page41_dir }; /* PAGE 40 */ struct yaz_iconv_trie_dir marc8_31page40_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5179} /* East Asian ideograph */, {0, 0, 0x834F} /* East Asian ideograph */, {0, 0, 0x8339} /* East Asian ideograph */, {0, 0, 0x838E} /* East Asian ideograph */, {0, 0, 0x8398} /* East Asian ideograph */, {0, 0, 0x839E} /* East Asian ideograph */, {0, 0, 0x8378} /* East Asian ideograph */, {0, 0, 0x83A2} /* East Asian ideograph */, {0, 0, 0x8396} /* East Asian ideograph */, {0, 0, 0x83A7} /* East Asian ideograph */, {0, 0, 0x83AB} /* East Asian ideograph */, {0, 0, 0x8392} /* East Asian ideograph (variant of EACC 4B552C) */, {0, 0, 0x838A} /* East Asian ideograph */, {0, 0, 0x8393} /* East Asian ideograph */, {0, 0, 0x83A0} /* East Asian ideograph */, {0, 0, 0x8389} /* East Asian ideograph */, {0, 0, 0x8377} /* East Asian ideograph */, {0, 0, 0x837C} /* East Asian ideograph */, {0, 0, 0x837B} /* East Asian ideograph */, {0, 0, 0x840D} /* East Asian ideograph */, {0, 0, 0x83E0} /* East Asian ideograph */, {0, 0, 0x83E9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8403} /* East Asian ideograph */, {0, 0, 0x83C5} /* East Asian ideograph */, {0, 0, 0x83C1} /* East Asian ideograph */, {0, 0, 0x840B} /* East Asian ideograph */, {0, 0, 0x83EF} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x83F1} /* East Asian ideograph */, {0, 0, 0x83BD} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x840A} /* East Asian ideograph */, {0, 0, 0x840C} /* East Asian ideograph */, {0, 0, 0x83CC} /* East Asian ideograph */, {0, 0, 0x83DC} /* East Asian ideograph */, {0, 0, 0x83CA} /* East Asian ideograph */, {0, 0, 0x83F2} /* East Asian ideograph */, {0, 0, 0x840E} /* East Asian ideograph */, {0, 0, 0x8404} /* East Asian ideograph */, {0, 0, 0x843D} /* East Asian ideograph */, {0, 0, 0x8482} /* East Asian ideograph */, {0, 0, 0x8431} /* East Asian ideograph */, {0, 0, 0x8475} /* East Asian ideograph */, {0, 0, 0x8466} /* East Asian ideograph */, {0, 0, 0x8457} /* East Asian ideograph */, {0, 0, 0x8449} /* East Asian ideograph */, {0, 0, 0x846C} /* East Asian ideograph */, {0, 0, 0x846B} /* East Asian ideograph */, {0, 0, 0x845B} /* East Asian ideograph */, {0, 0, 0x8477} /* East Asian ideograph */, {0, 0, 0x843C} /* East Asian ideograph */, {0, 0, 0x8435} /* East Asian ideograph */, {0, 0, 0x8461} /* East Asian ideograph */, {0, 0, 0x8463} /* East Asian ideograph */, {0, 0, 0x8469} /* East Asian ideograph */, {0, 0, 0x8438} /* East Asian ideograph */, {0, 0, 0x84B2} /* East Asian ideograph */, {0, 0, 0x849E} /* East Asian ideograph */, {0, 0, 0x84BF} /* East Asian ideograph */, {0, 0, 0x84C6} /* East Asian ideograph */, {0, 0, 0x84C4} /* East Asian ideograph */, {0, 0, 0x84C9} /* East Asian ideograph */, {0, 0, 0x849C} /* East Asian ideograph */, {0, 0, 0x84CB} /* East Asian ideograph */, {0, 0, 0x84B8} /* East Asian ideograph */, {0, 0, 0x84C0} /* East Asian ideograph */, {0, 0, 0x8499} /* East Asian ideograph */, {0, 0, 0x84D3} /* East Asian ideograph */, {0, 0, 0x8490} /* East Asian ideograph */, {0, 0, 0x84BC} /* East Asian ideograph */, {0, 0, 0x853D} /* East Asian ideograph */, {0, 0, 0x84FF} /* East Asian ideograph */, {0, 0, 0x8517} /* East Asian ideograph */, {0, 0, 0x851A} /* East Asian ideograph */, {0, 0, 0x84EE} /* East Asian ideograph */, {0, 0, 0x852C} /* East Asian ideograph */, {0, 0, 0x852D} /* East Asian ideograph */, {0, 0, 0x8513} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8523} /* East Asian ideograph */, {0, 0, 0x8521} /* East Asian ideograph */, {0, 0, 0x8514} /* East Asian ideograph */, {0, 0, 0x84EC} /* East Asian ideograph */, {0, 0, 0x8525} /* East Asian ideograph */, {0, 0, 0x8569} /* East Asian ideograph */, {0, 0, 0x854A} /* East Asian ideograph */, {0, 0, 0x8559} /* East Asian ideograph */, {0, 0, 0x8548} /* East Asian ideograph */, {0, 0, 0x8568} /* East Asian ideograph */, {0, 0, 0x8543} /* East Asian ideograph */, {0, 0, 0x856A} /* East Asian ideograph */, {0, 0, 0x8549} /* East Asian ideograph */, {0, 0, 0x8584} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page40 = { 0, marc8_31page40_dir }; /* PAGE 39 */ struct yaz_iconv_trie_dir marc8_31page39_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x81DA} /* East Asian ideograph */, {0, 0, 0x81DF} /* East Asian ideograph */, {0, 0, 0x81E3} /* East Asian ideograph */, {0, 0, 0x81E5} /* East Asian ideograph */, {0, 0, 0x81E8} /* East Asian ideograph */, {0, 0, 0x81EA} /* East Asian ideograph */, {0, 0, 0x81EC} /* East Asian ideograph */, {0, 0, 0x81ED} /* East Asian ideograph */, {0, 0, 0x81F3} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x81FA} /* East Asian ideograph */, {0, 0, 0x81FB} /* East Asian ideograph */, {0, 0, 0x81FC} /* East Asian ideograph */, {0, 0, 0x81FE} /* East Asian ideograph */, {0, 0, 0x8200} /* East Asian ideograph */, {0, 0, 0x8202} /* East Asian ideograph */, {0, 0, 0x8205} /* East Asian ideograph */, {0, 0, 0x8207} /* East Asian ideograph */, {0, 0, 0x8208} /* East Asian ideograph */, {0, 0, 0x8209} /* East Asian ideograph */, {0, 0, 0x820A} /* East Asian ideograph */, {0, 0, 0x820C} /* East Asian ideograph */, {0, 0, 0x820D} /* East Asian ideograph */, {0, 0, 0x8210} /* East Asian ideograph */, {0, 0, 0x8212} /* East Asian ideograph */, {0, 0, 0x8214} /* East Asian ideograph */, {0, 0, 0x821B} /* East Asian ideograph */, {0, 0, 0x821C} /* East Asian ideograph */, {0, 0, 0x821E} /* East Asian ideograph */, {0, 0, 0x821F} /* East Asian ideograph */, {0, 0, 0x8222} /* East Asian ideograph */, {0, 0, 0x822A} /* East Asian ideograph */, {0, 0, 0x822B} /* East Asian ideograph */, {0, 0, 0x822C} /* East Asian ideograph */, {0, 0, 0x8228} /* East Asian ideograph */, {0, 0, 0x8237} /* East Asian ideograph */, {0, 0, 0x8235} /* East Asian ideograph */, {0, 0, 0x8239} /* East Asian ideograph */, {0, 0, 0x8236} /* East Asian ideograph */, {0, 0, 0x8247} /* East Asian ideograph */, {0, 0, 0x8258} /* East Asian ideograph */, {0, 0, 0x8259} /* East Asian ideograph */, {0, 0, 0x8266} /* East Asian ideograph */, {0, 0, 0x826E} /* East Asian ideograph */, {0, 0, 0x826F} /* East Asian ideograph */, {0, 0, 0x8271} /* East Asian ideograph */, {0, 0, 0x8272} /* East Asian ideograph */, {0, 0, 0x827E} /* East Asian ideograph */, {0, 0, 0x8292} /* East Asian ideograph */, {0, 0, 0x828B} /* East Asian ideograph */, {0, 0, 0x828D} /* East Asian ideograph */, {0, 0, 0x82B3} /* East Asian ideograph */, {0, 0, 0x829D} /* East Asian ideograph */, {0, 0, 0x8299} /* East Asian ideograph */, {0, 0, 0x82BD} /* East Asian ideograph */, {0, 0, 0x82AD} /* East Asian ideograph */, {0, 0, 0x82AC} /* East Asian ideograph */, {0, 0, 0x82A5} /* East Asian ideograph */, {0, 0, 0x829F} /* East Asian ideograph */, {0, 0, 0x82BB} /* East Asian ideograph */, {0, 0, 0x82B1} /* East Asian ideograph */, {0, 0, 0x82B9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x82E7} /* East Asian ideograph */, {0, 0, 0x8305} /* East Asian ideograph */, {0, 0, 0x8309} /* East Asian ideograph */, {0, 0, 0x82E3} /* East Asian ideograph */, {0, 0, 0x82DB} /* East Asian ideograph */, {0, 0, 0x82E6} /* East Asian ideograph */, {0, 0, 0x8304} /* East Asian ideograph */, {0, 0, 0x82E5} /* East Asian ideograph */, {0, 0, 0x8302} /* East Asian ideograph */, {0, 0, 0x82DC} /* East Asian ideograph */, {0, 0, 0x82D7} /* East Asian ideograph */, {0, 0, 0x82F1} /* East Asian ideograph */, {0, 0, 0x8301} /* East Asian ideograph */, {0, 0, 0x82D3} /* East Asian ideograph */, {0, 0, 0x82D4} /* East Asian ideograph */, {0, 0, 0x82D1} /* East Asian ideograph */, {0, 0, 0x82DE} /* East Asian ideograph */, {0, 0, 0x82DF} /* East Asian ideograph */, {0, 0, 0x832B} /* East Asian ideograph */, {0, 0, 0x8352} /* East Asian ideograph */, {0, 0, 0x834A} /* East Asian ideograph */, {0, 0, 0x8338} /* East Asian ideograph */, {0, 0, 0x8354} /* East Asian ideograph */, {0, 0, 0x8350} /* East Asian ideograph */, {0, 0, 0x8349} /* East Asian ideograph */, {0, 0, 0x8335} /* East Asian ideograph */, {0, 0, 0x8334} /* East Asian ideograph */, {0, 0, 0x8336} /* East Asian ideograph */, {0, 0, 0x8331} /* East Asian ideograph */, {0, 0, 0x8340} /* East Asian ideograph */, {0, 0, 0x8317} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page39 = { 0, marc8_31page39_dir }; /* PAGE 38 */ struct yaz_iconv_trie_dir marc8_31page38_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x8085} /* East Asian ideograph */, {0, 0, 0x8087} /* East Asian ideograph */, {0, 0, 0x8089} /* East Asian ideograph */, {0, 0, 0x808B} /* East Asian ideograph */, {0, 0, 0x808C} /* East Asian ideograph */, {0, 0, 0x8093} /* East Asian ideograph */, {0, 0, 0x809D} /* East Asian ideograph */, {0, 0, 0x8098} /* East Asian ideograph */, {0, 0, 0x809B} /* East Asian ideograph */, {0, 0, 0x809A} /* East Asian ideograph */, {0, 0, 0x8096} /* East Asian ideograph */, {0, 0, 0x80B2} /* East Asian ideograph */, {0, 0, 0x80AA} /* East Asian ideograph */, {0, 0, 0x80BA} /* East Asian ideograph */, {0, 0, 0x80A5} /* East Asian ideograph */, {0, 0, 0x80A2} /* East Asian ideograph */, {0, 0, 0x80AB} /* East Asian ideograph */, {0, 0, 0x80B1} /* East Asian ideograph */, {0, 0, 0x80AF} /* East Asian ideograph */, {0, 0, 0x80A1} /* East Asian ideograph */, {0, 0, 0x80A9} /* East Asian ideograph */, {0, 0, 0x80B4} /* East Asian ideograph */, {0, 0, 0x80D6} /* East Asian ideograph */, {0, 0, 0x80CC} /* East Asian ideograph */, {0, 0, 0x80E5} /* East Asian ideograph */, {0, 0, 0x80DA} /* East Asian ideograph */, {0, 0, 0x80E1} /* East Asian ideograph */, {0, 0, 0x80C3} /* East Asian ideograph */, {0, 0, 0x80DB} /* East Asian ideograph */, {0, 0, 0x80C4} /* East Asian ideograph */, {0, 0, 0x80CE} /* East Asian ideograph */, {0, 0, 0x80DE} /* East Asian ideograph */, {0, 0, 0x80E4} /* East Asian ideograph */, {0, 0, 0x80F0} /* East Asian ideograph */, {0, 0, 0x8102} /* East Asian ideograph */, {0, 0, 0x8105} /* East Asian ideograph */, {0, 0, 0x80F1} /* East Asian ideograph */, {0, 0, 0x80F4} /* East Asian ideograph */, {0, 0, 0x80ED} /* East Asian ideograph */, {0, 0, 0x80FD} /* East Asian ideograph */, {0, 0, 0x8106} /* East Asian ideograph */, {0, 0, 0x80F3} /* East Asian ideograph */, {0, 0, 0x80F8} /* East Asian ideograph */, {0, 0, 0x810A} /* East Asian ideograph */, {0, 0, 0x8108} /* East Asian ideograph */, {0, 0, 0x812B} /* East Asian ideograph */, {0, 0, 0x812F} /* East Asian ideograph */, {0, 0, 0x8116} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8129} /* East Asian ideograph */, {0, 0, 0x8155} /* East Asian ideograph */, {0, 0, 0x8154} /* East Asian ideograph */, {0, 0, 0x814B} /* East Asian ideograph */, {0, 0, 0x8151} /* East Asian ideograph */, {0, 0, 0x8150} /* East Asian ideograph */, {0, 0, 0x814E} /* East Asian ideograph */, {0, 0, 0x8139} /* East Asian ideograph */, {0, 0, 0x8146} /* East Asian ideograph */, {0, 0, 0x813E} /* East Asian ideograph */, {0, 0, 0x8171} /* East Asian ideograph */, {0, 0, 0x8170} /* East Asian ideograph */, {0, 0, 0x8178} /* East Asian ideograph */, {0, 0, 0x8165} /* East Asian ideograph */, {0, 0, 0x816E} /* East Asian ideograph */, {0, 0, 0x8173} /* East Asian ideograph */, {0, 0, 0x816B} /* East Asian ideograph */, {0, 0, 0x8179} /* East Asian ideograph */, {0, 0, 0x817A} /* East Asian ideograph */, {0, 0, 0x8166} /* East Asian ideograph */, {0, 0, 0x8180} /* East Asian ideograph */, {0, 0, 0x818F} /* East Asian ideograph */, {0, 0, 0x817F} /* East Asian ideograph */, {0, 0, 0x818A} /* East Asian ideograph */, {0, 0, 0x8188} /* East Asian ideograph */, {0, 0, 0x819D} /* East Asian ideograph */, {0, 0, 0x81A0} /* East Asian ideograph */, {0, 0, 0x819B} /* East Asian ideograph */, {0, 0, 0x819A} /* East Asian ideograph */, {0, 0, 0x819C} /* East Asian ideograph */, {0, 0, 0x81B3} /* East Asian ideograph */, {0, 0, 0x81A9} /* East Asian ideograph */, {0, 0, 0x81A8} /* East Asian ideograph */, {0, 0, 0x81C6} /* East Asian ideograph */, {0, 0, 0x81BA} /* East Asian ideograph */, {0, 0, 0x81C3} /* East Asian ideograph */, {0, 0, 0x81C0} /* East Asian ideograph */, {0, 0, 0x81C2} /* East Asian ideograph */, {0, 0, 0x81BF} /* East Asian ideograph */, {0, 0, 0x81BD} /* East Asian ideograph */, {0, 0, 0x81C9} /* East Asian ideograph */, {0, 0, 0x81BE} /* East Asian ideograph */, {0, 0, 0x81CD} /* East Asian ideograph */, {0, 0, 0x81CF} /* East Asian ideograph */, {0, 0, 0x81D8} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page38 = { 0, marc8_31page38_dir }; /* PAGE 37 */ struct yaz_iconv_trie_dir marc8_31page37_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x7E8C} /* East Asian ideograph */, {0, 0, 0x7E93} /* East Asian ideograph */, {0, 0, 0x7E96} /* East Asian ideograph */, {0, 0, 0x7E9C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7F38} /* East Asian ideograph */, {0, 0, 0x7F3A} /* East Asian ideograph */, {0, 0, 0x7F3D} /* East Asian ideograph */, {0, 0, 0x7F44} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7F50} /* East Asian ideograph */, {0, 0, 0x7F55} /* East Asian ideograph */, {0, 0, 0x7F54} /* East Asian ideograph */, {0, 0, 0x7F5F} /* East Asian ideograph */, {0, 0, 0x7F72} /* East Asian ideograph */, {0, 0, 0x7F6E} /* East Asian ideograph */, {0, 0, 0x7F69} /* East Asian ideograph */, {0, 0, 0x7F6A} /* East Asian ideograph */, {0, 0, 0x7F70} /* East Asian ideograph */, {0, 0, 0x7F75} /* East Asian ideograph */, {0, 0, 0x7F77} /* East Asian ideograph */, {0, 0, 0x7F79} /* East Asian ideograph */, {0, 0, 0x7F85} /* East Asian ideograph */, {0, 0, 0x7F88} /* East Asian ideograph */, {0, 0, 0x7F8A} /* East Asian ideograph */, {0, 0, 0x7F8C} /* East Asian ideograph */, {0, 0, 0x7F8E} /* East Asian ideograph */, {0, 0, 0x7F94} /* East Asian ideograph */, {0, 0, 0x7F9E} /* East Asian ideograph */, {0, 0, 0x7F9A} /* East Asian ideograph */, {0, 0, 0x5584} /* East Asian ideograph */, {0, 0, 0x7FA8} /* East Asian ideograph */, {0, 0, 0x7FA4} /* East Asian ideograph */, {0, 0, 0x7FA9} /* East Asian ideograph */, {0, 0, 0x7FAF} /* East Asian ideograph */, {0, 0, 0x7FB2} /* East Asian ideograph */, {0, 0, 0x7FB6} /* East Asian ideograph */, {0, 0, 0x7FB8} /* East Asian ideograph */, {0, 0, 0x7FB9} /* East Asian ideograph */, {0, 0, 0x7FBD} /* East Asian ideograph */, {0, 0, 0x7FBF} /* East Asian ideograph */, {0, 0, 0x7FC5} /* East Asian ideograph */, {0, 0, 0x7FC1} /* East Asian ideograph */, {0, 0, 0x7FCC} /* East Asian ideograph */, {0, 0, 0x7FD2} /* East Asian ideograph */, {0, 0, 0x7FCE} /* East Asian ideograph (variant of EACC 4B524E) */, {0, 0, 0x7FD4} /* East Asian ideograph */, {0, 0, 0x7FD5} /* East Asian ideograph */, {0, 0, 0x7FE0} /* East Asian ideograph */, {0, 0, 0x7FE1} /* East Asian ideograph */, {0, 0, 0x7FDF} /* East Asian ideograph */, {0, 0, 0x7FE9} /* East Asian ideograph */, {0, 0, 0x7FF0} /* East Asian ideograph */, {0, 0, 0x7FF3} /* East Asian ideograph */, {0, 0, 0x7FFC} /* East Asian ideograph */, {0, 0, 0x7FF9} /* East Asian ideograph */, {0, 0, 0x7FFB} /* East Asian ideograph */, {0, 0, 0x7FF1} /* East Asian ideograph */, {0, 0, 0x8000} /* East Asian ideograph */, {0, 0, 0x8001} /* East Asian ideograph */, {0, 0, 0x8003} /* East Asian ideograph */, {0, 0, 0x8006} /* East Asian ideograph */, {0, 0, 0x8005} /* East Asian ideograph */, {0, 0, 0x800C} /* East Asian ideograph */, {0, 0, 0x8010} /* East Asian ideograph */, {0, 0, 0x800D} /* East Asian ideograph */, {0, 0, 0x8012} /* East Asian ideograph */, {0, 0, 0x8015} /* East Asian ideograph */, {0, 0, 0x8018} /* East Asian ideograph */, {0, 0, 0x8019} /* East Asian ideograph */, {0, 0, 0x8017} /* East Asian ideograph */, {0, 0, 0x801C} /* East Asian ideograph */, {0, 0, 0x8033} /* East Asian ideograph */, {0, 0, 0x8036} /* East Asian ideograph */, {0, 0, 0x803F} /* East Asian ideograph */, {0, 0, 0x803D} /* East Asian ideograph */, {0, 0, 0x804A} /* East Asian ideograph */, {0, 0, 0x8046} /* East Asian ideograph */, {0, 0, 0x8056} /* East Asian ideograph */, {0, 0, 0x8058} /* East Asian ideograph */, {0, 0, 0x805E} /* East Asian ideograph */, {0, 0, 0x805A} /* East Asian ideograph */, {0, 0, 0x8071} /* East Asian ideograph */, {0, 0, 0x8072} /* East Asian ideograph */, {0, 0, 0x8073} /* East Asian ideograph */, {0, 0, 0x8070} /* East Asian ideograph */, {0, 0, 0x806F} /* East Asian ideograph */, {0, 0, 0x8077} /* East Asian ideograph */, {0, 0, 0x8076} /* East Asian ideograph */, {0, 0, 0x807E} /* East Asian ideograph */, {0, 0, 0x807D} /* East Asian ideograph */, {0, 0, 0x807F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x8084} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page37 = { 0, marc8_31page37_dir }; /* PAGE 36 */ struct yaz_iconv_trie_dir marc8_31page36_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x7D17} /* East Asian ideograph */, {0, 0, 0x7D0D} /* East Asian ideograph (variant of EACC 455122) */, {0, 0, 0x7D1A} /* East Asian ideograph */, {0, 0, 0x7D19} /* East Asian ideograph */, {0, 0, 0x7D1B} /* East Asian ideograph */, {0, 0, 0x7D46} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7D3C} /* East Asian ideograph */, {0, 0, 0x7D2E} /* East Asian ideograph */, {0, 0, 0x7D39} /* East Asian ideograph */, {0, 0, 0x7D44} /* East Asian ideograph */, {0, 0, 0x7D30} /* East Asian ideograph */, {0, 0, 0x7D33} /* East Asian ideograph */, {0, 0, 0x7D2F} /* East Asian ideograph */, {0, 0, 0x7D40} /* East Asian ideograph */, {0, 0, 0x7D42} /* East Asian ideograph */, {0, 0, 0x7D71} /* East Asian ideograph */, {0, 0, 0x7D5E} /* East Asian ideograph */, {0, 0, 0x7D68} /* East Asian ideograph */, {0, 0, 0x7D50} /* East Asian ideograph */, {0, 0, 0x7D2B} /* East Asian ideograph */, {0, 0, 0x7D62} /* East Asian ideograph */, {0, 0, 0x7D76} /* East Asian ideograph */, {0, 0, 0x7D61} /* East Asian ideograph */, {0, 0, 0x7D66} /* East Asian ideograph */, {0, 0, 0x7D6E} /* East Asian ideograph */, {0, 0, 0x7D72} /* East Asian ideograph */, {0, 0, 0x7D93} /* East Asian ideograph */, {0, 0, 0x7D91} /* East Asian ideograph */, {0, 0, 0x7D79} /* East Asian ideograph */, {0, 0, 0x7D8F} /* East Asian ideograph */, {0, 0, 0x7D81} /* East Asian ideograph */, {0, 0, 0x7D9C} /* East Asian ideograph */, {0, 0, 0x7DBB} /* East Asian ideograph */, {0, 0, 0x7DB0} /* East Asian ideograph */, {0, 0, 0x7DCA} /* East Asian ideograph */, {0, 0, 0x7DBE} /* East Asian ideograph */, {0, 0, 0x7DB4} /* East Asian ideograph */, {0, 0, 0x7DBA} /* East Asian ideograph */, {0, 0, 0x7DB2} /* East Asian ideograph */, {0, 0, 0x7DB1} /* East Asian ideograph */, {0, 0, 0x7DBD} /* East Asian ideograph */, {0, 0, 0x7DB5} /* East Asian ideograph */, {0, 0, 0x7DA0} /* East Asian ideograph */, {0, 0, 0x7DA2} /* East Asian ideograph */, {0, 0, 0x7DAD} /* East Asian ideograph */, {0, 0, 0x7DBF} /* East Asian ideograph */, {0, 0, 0x7DB8} /* East Asian ideograph */, {0, 0, 0x7DC7} /* East Asian ideograph */, {0, 0, 0x7DE0} /* East Asian ideograph */, {0, 0, 0x7DEF} /* East Asian ideograph */, {0, 0, 0x7DF4} /* East Asian ideograph (variant of EACC 4B5154) */, {0, 0, 0x7DD6} /* East Asian ideograph */, {0, 0, 0x7DD8} /* East Asian ideograph */, {0, 0, 0x7DEC} /* East Asian ideograph */, {0, 0, 0x7DDD} /* East Asian ideograph */, {0, 0, 0x7DE9} /* East Asian ideograph */, {0, 0, 0x7DE3} /* East Asian ideograph */, {0, 0, 0x7DE8} /* East Asian ideograph */, {0, 0, 0x7DDA} /* East Asian ideograph */, {0, 0, 0x7D9E} /* East Asian ideograph */, {0, 0, 0x7DDE} /* East Asian ideograph */, {0, 0, 0x7E11} /* East Asian ideograph */, {0, 0, 0x7E0A} /* East Asian ideograph */, {0, 0, 0x7E08} /* East Asian ideograph */, {0, 0, 0x7E1B} /* East Asian ideograph */, {0, 0, 0x7DFB} /* East Asian ideograph */, {0, 0, 0x7E23} /* East Asian ideograph */, {0, 0, 0x7E2E} /* East Asian ideograph */, {0, 0, 0x7E3E} /* East Asian ideograph */, {0, 0, 0x7E46} /* East Asian ideograph */, {0, 0, 0x7E37} /* East Asian ideograph */, {0, 0, 0x7E32} /* East Asian ideograph */, {0, 0, 0x7E43} /* East Asian ideograph */, {0, 0, 0x7E41} /* East Asian ideograph */, {0, 0, 0x7E2B} /* East Asian ideograph */, {0, 0, 0x7E3D} /* East Asian ideograph */, {0, 0, 0x7E31} /* East Asian ideograph */, {0, 0, 0x7E45} /* East Asian ideograph */, {0, 0, 0x7E55} /* East Asian ideograph */, {0, 0, 0x7E54} /* East Asian ideograph */, {0, 0, 0x7E61} /* East Asian ideograph */, {0, 0, 0x7E5E} /* East Asian ideograph */, {0, 0, 0x7E5A} /* East Asian ideograph */, {0, 0, 0x7E6B} /* East Asian ideograph */, {0, 0, 0x7E69} /* East Asian ideograph */, {0, 0, 0x7E6D} /* East Asian ideograph */, {0, 0, 0x7E79} /* East Asian ideograph */, {0, 0, 0x7E6A} /* East Asian ideograph */, {0, 0, 0x8FAE} /* East Asian ideograph */, {0, 0, 0x7E7D} /* East Asian ideograph */, {0, 0, 0x7E82} /* East Asian ideograph */, {0, 0, 0x7E7C} /* East Asian ideograph */, {0, 0, 0x7E8F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page36 = { 0, marc8_31page36_dir }; /* PAGE 35 */ struct yaz_iconv_trie_dir marc8_31page35_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x7B4D} /* East Asian ideograph */, {0, 0, 0x7B4F} /* East Asian ideograph */, {0, 0, 0x7B54} /* East Asian ideograph */, {0, 0, 0x7B60} /* East Asian ideograph */, {0, 0, 0x7B77} /* East Asian ideograph */, {0, 0, 0x7B75} /* East Asian ideograph */, {0, 0, 0x7BA1} /* East Asian ideograph */, {0, 0, 0x7B94} /* East Asian ideograph */, {0, 0, 0x7B95} /* East Asian ideograph */, {0, 0, 0x7B9D} /* East Asian ideograph */, {0, 0, 0x7B8B} /* East Asian ideograph */, {0, 0, 0x7B97} /* East Asian ideograph */, {0, 0, 0x7B8F} /* East Asian ideograph */, {0, 0, 0x7BC7} /* East Asian ideograph */, {0, 0, 0x7BAD} /* East Asian ideograph */, {0, 0, 0x7BC4} /* East Asian ideograph */, {0, 0, 0x7BB1} /* East Asian ideograph */, {0, 0, 0x7BB4} /* East Asian ideograph */, {0, 0, 0x7BC0} /* East Asian ideograph */, {0, 0, 0x7BC6} /* East Asian ideograph */, {0, 0, 0x7BC1} /* East Asian ideograph */, {0, 0, 0x7C11} /* East Asian ideograph */, {0, 0, 0x7BD9} /* East Asian ideograph */, {0, 0, 0x7BDB} /* East Asian ideograph */, {0, 0, 0x7BE4} /* East Asian ideograph */, {0, 0, 0x7BC9} /* East Asian ideograph */, {0, 0, 0x7BE1} /* East Asian ideograph */, {0, 0, 0x7BE9} /* East Asian ideograph */, {0, 0, 0x7C07} /* East Asian ideograph */, {0, 0, 0x7C0D} /* East Asian ideograph */, {0, 0, 0x7BFE} /* East Asian ideograph */, {0, 0, 0x7BF7} /* East Asian ideograph */, {0, 0, 0x7C21} /* East Asian ideograph */, {0, 0, 0x7C2B} /* East Asian ideograph */, {0, 0, 0x7C2A} /* East Asian ideograph */, {0, 0, 0x7C27} /* East Asian ideograph */, {0, 0, 0x7C1E} /* East Asian ideograph */, {0, 0, 0x7C23} /* East Asian ideograph */, {0, 0, 0x7C3F} /* East Asian ideograph */, {0, 0, 0x7C3E} /* East Asian ideograph */, {0, 0, 0x7C38} /* East Asian ideograph */, {0, 0, 0x7C37} /* East Asian ideograph */, {0, 0, 0x7C3D} /* East Asian ideograph */, {0, 0, 0x7C43} /* East Asian ideograph */, {0, 0, 0x7C4C} /* East Asian ideograph */, {0, 0, 0x7C4D} /* East Asian ideograph */, {0, 0, 0x7C50} /* East Asian ideograph */, {0, 0, 0x7C60} /* East Asian ideograph */, {0, 0, 0x7C5F} /* East Asian ideograph */, {0, 0, 0x7C64} /* East Asian ideograph */, {0, 0, 0x7C6C} /* East Asian ideograph */, {0, 0, 0x7C6E} /* East Asian ideograph */, {0, 0, 0x7C72} /* East Asian ideograph */, {0, 0, 0x7C73} /* East Asian ideograph */, {0, 0, 0x7C89} /* East Asian ideograph */, {0, 0, 0x7C92} /* East Asian ideograph */, {0, 0, 0x7C97} /* East Asian ideograph */, {0, 0, 0x7C9F} /* East Asian ideograph */, {0, 0, 0x7CA5} /* East Asian ideograph */, {0, 0, 0x7CA4} /* East Asian ideograph */, {0, 0, 0x7CB1} /* East Asian ideograph */, {0, 0, 0x7CB3} /* East Asian ideograph */, {0, 0, 0x7CBD} /* East Asian ideograph */, {0, 0, 0x7CB9} /* East Asian ideograph */, {0, 0, 0x7CBE} /* East Asian ideograph (variant of EACC 4B5061) */, {0, 0, 0x7CCA} /* East Asian ideograph */, {0, 0, 0x7CD6} /* East Asian ideograph */, {0, 0, 0x7CD5} /* East Asian ideograph */, {0, 0, 0x7CE0} /* East Asian ideograph */, {0, 0, 0x7CDC} /* East Asian ideograph */, {0, 0, 0x7CDF} /* East Asian ideograph */, {0, 0, 0x7CDE} /* East Asian ideograph */, {0, 0, 0x7CE2} /* East Asian ideograph */, {0, 0, 0x7CD9} /* East Asian ideograph */, {0, 0, 0x7CE7} /* East Asian ideograph */, {0, 0, 0x7CEF} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7CFB} /* East Asian ideograph */, {0, 0, 0x7CFE} /* East Asian ideograph */, {0, 0, 0x7D00} /* East Asian ideograph */, {0, 0, 0x7D02} /* East Asian ideograph */, {0, 0, 0x7D05} /* East Asian ideograph */, {0, 0, 0x7D09} /* East Asian ideograph */, {0, 0, 0x7D04} /* East Asian ideograph */, {0, 0, 0x7D07} /* East Asian ideograph */, {0, 0, 0x7D21} /* East Asian ideograph */, {0, 0, 0x7D0B} /* East Asian ideograph */, {0, 0, 0x7D0A} /* East Asian ideograph */, {0, 0, 0x7D20} /* East Asian ideograph */, {0, 0, 0x7D1C} /* East Asian ideograph */, {0, 0, 0x7D22} /* East Asian ideograph */, {0, 0, 0x7D15} /* East Asian ideograph */, {0, 0, 0x7D14} /* East Asian ideograph */, {0, 0, 0x7D10} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page35 = { 0, marc8_31page35_dir }; /* PAGE 34 */ struct yaz_iconv_trie_dir marc8_31page34_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x79BD} /* East Asian ideograph */, {0, 0, 0x842C} /* East Asian ideograph */, {0, 0, 0x79BE} /* East Asian ideograph */, {0, 0, 0x79C0} /* East Asian ideograph */, {0, 0, 0x79C1} /* East Asian ideograph */, {0, 0, 0x79BF} /* East Asian ideograph */, {0, 0, 0x79C9} /* East Asian ideograph */, {0, 0, 0x79D1} /* East Asian ideograph */, {0, 0, 0x79CB} /* East Asian ideograph */, {0, 0, 0x79D2} /* East Asian ideograph */, {0, 0, 0x79E4} /* East Asian ideograph */, {0, 0, 0x79E6} /* East Asian ideograph */, {0, 0, 0x79E3} /* East Asian ideograph */, {0, 0, 0x79DF} /* East Asian ideograph */, {0, 0, 0x79E7} /* East Asian ideograph */, {0, 0, 0x79E9} /* East Asian ideograph */, {0, 0, 0x79FB} /* East Asian ideograph */, {0, 0, 0x7A05} /* East Asian ideograph */, {0, 0, 0x7A0D} /* East Asian ideograph */, {0, 0, 0x7A08} /* East Asian ideograph */, {0, 0, 0x7A0B} /* East Asian ideograph */, {0, 0, 0x7A00} /* East Asian ideograph */, {0, 0, 0x7A1F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7A20} /* East Asian ideograph */, {0, 0, 0x7A1A} /* East Asian ideograph */, {0, 0, 0x7A14} /* East Asian ideograph */, {0, 0, 0x7A31} /* East Asian ideograph */, {0, 0, 0x7A2E} /* East Asian ideograph */, {0, 0, 0x7A3F} /* East Asian ideograph */, {0, 0, 0x7A3C} /* East Asian ideograph */, {0, 0, 0x7A40} /* East Asian ideograph */, {0, 0, 0x7A3D} /* East Asian ideograph */, {0, 0, 0x7A37} /* East Asian ideograph */, {0, 0, 0x7A3B} /* East Asian ideograph */, {0, 0, 0x7A4D} /* East Asian ideograph */, {0, 0, 0x7A4E} /* East Asian ideograph */, {0, 0, 0x7A4C} /* East Asian ideograph */, {0, 0, 0x7A46} /* East Asian ideograph */, {0, 0, 0x7A57} /* East Asian ideograph */, {0, 0, 0x7A61} /* East Asian ideograph */, {0, 0, 0x7A62} /* East Asian ideograph */, {0, 0, 0x7A6B} /* East Asian ideograph */, {0, 0, 0x7A69} /* East Asian ideograph */, {0, 0, 0x7A74} /* East Asian ideograph */, {0, 0, 0x7A76} /* East Asian ideograph */, {0, 0, 0x7A79} /* East Asian ideograph */, {0, 0, 0x7A7A} /* East Asian ideograph */, {0, 0, 0x7A7F} /* East Asian ideograph */, {0, 0, 0x7A81} /* East Asian ideograph */, {0, 0, 0x7A84} /* East Asian ideograph */, {0, 0, 0x7A88} /* East Asian ideograph */, {0, 0, 0x7A92} /* East Asian ideograph */, {0, 0, 0x7A95} /* East Asian ideograph */, {0, 0, 0x7A98} /* East Asian ideograph */, {0, 0, 0x7A96} /* East Asian ideograph */, {0, 0, 0x7A97} /* East Asian ideograph */, {0, 0, 0x7A9F} /* East Asian ideograph */, {0, 0, 0x7AA0} /* East Asian ideograph */, {0, 0, 0x7AAA} /* East Asian ideograph */, {0, 0, 0x7AA9} /* East Asian ideograph */, {0, 0, 0x7AAF} /* East Asian ideograph */, {0, 0, 0x7AAE} /* East Asian ideograph */, {0, 0, 0x7ABA} /* East Asian ideograph */, {0, 0, 0x7AC5} /* East Asian ideograph */, {0, 0, 0x7AC4} /* East Asian ideograph */, {0, 0, 0x7AC7} /* East Asian ideograph */, {0, 0, 0x7ACA} /* East Asian ideograph */, {0, 0, 0x7ACB} /* East Asian ideograph */, {0, 0, 0x7AD9} /* East Asian ideograph */, {0, 0, 0x7AE5} /* East Asian ideograph */, {0, 0, 0x7AE3} /* East Asian ideograph */, {0, 0, 0x7AED} /* East Asian ideograph */, {0, 0, 0x7AEF} /* East Asian ideograph */, {0, 0, 0x7AF6} /* East Asian ideograph */, {0, 0, 0x7AF9} /* East Asian ideograph */, {0, 0, 0x7AFA} /* East Asian ideograph */, {0, 0, 0x7AFF} /* East Asian ideograph */, {0, 0, 0x7AFD} /* East Asian ideograph */, {0, 0, 0x7B06} /* East Asian ideograph */, {0, 0, 0x7B11} /* East Asian ideograph */, {0, 0, 0x7B20} /* East Asian ideograph */, {0, 0, 0x7B2C} /* East Asian ideograph */, {0, 0, 0x7B28} /* East Asian ideograph */, {0, 0, 0x7B1B} /* East Asian ideograph */, {0, 0, 0x7B1E} /* East Asian ideograph */, {0, 0, 0x7B19} /* East Asian ideograph */, {0, 0, 0x7B26} /* East Asian ideograph */, {0, 0, 0x7B46} /* East Asian ideograph */, {0, 0, 0x7B49} /* East Asian ideograph */, {0, 0, 0x7B50} /* East Asian ideograph */, {0, 0, 0x7B56} /* East Asian ideograph */, {0, 0, 0x7B52} /* East Asian ideograph */, {0, 0, 0x7B4B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page34 = { 0, marc8_31page34_dir }; /* PAGE 33 */ struct yaz_iconv_trie_dir marc8_31page33_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x77E2} /* East Asian ideograph */, {0, 0, 0x77E3} /* East Asian ideograph */, {0, 0, 0x77E5} /* East Asian ideograph */, {0, 0, 0x77E9} /* East Asian ideograph */, {0, 0, 0x77ED} /* East Asian ideograph */, {0, 0, 0x77EE} /* East Asian ideograph */, {0, 0, 0x77EF} /* East Asian ideograph */, {0, 0, 0x77F3} /* East Asian ideograph */, {0, 0, 0x77FD} /* East Asian ideograph */, {0, 0, 0x7802} /* East Asian ideograph */, {0, 0, 0x780D} /* East Asian ideograph */, {0, 0, 0x780C} /* East Asian ideograph */, {0, 0, 0x65AB} /* East Asian ideograph */, {0, 0, 0x7830} /* East Asian ideograph */, {0, 0, 0x781D} /* East Asian ideograph */, {0, 0, 0x7834} /* East Asian ideograph */, {0, 0, 0x7838} /* East Asian ideograph */, {0, 0, 0x7837} /* East Asian ideograph */, {0, 0, 0x7827} /* East Asian ideograph */, {0, 0, 0x782D} /* East Asian ideograph */, {0, 0, 0x7825} /* East Asian ideograph */, {0, 0, 0x786B} /* East Asian ideograph */, {0, 0, 0x784F} /* East Asian ideograph */, {0, 0, 0x7843} /* East Asian ideograph */, {0, 0, 0x786C} /* East Asian ideograph */, {0, 0, 0x785D} /* East Asian ideograph */, {0, 0, 0x786F} /* East Asian ideograph */, {0, 0, 0x78B0} /* East Asian ideograph */, {0, 0, 0x7897} /* East Asian ideograph */, {0, 0, 0x788E} /* East Asian ideograph */, {0, 0, 0x7898} /* East Asian ideograph */, {0, 0, 0x7889} /* East Asian ideograph */, {0, 0, 0x7891} /* East Asian ideograph */, {0, 0, 0x787C} /* East Asian ideograph */, {0, 0, 0x788C} /* East Asian ideograph */, {0, 0, 0x78A7} /* East Asian ideograph */, {0, 0, 0x78A9} /* East Asian ideograph */, {0, 0, 0x789F} /* East Asian ideograph */, {0, 0, 0x78B3} /* East Asian ideograph */, {0, 0, 0x78CB} /* East Asian ideograph */, {0, 0, 0x78BA} /* East Asian ideograph */, {0, 0, 0x78C1} /* East Asian ideograph */, {0, 0, 0x78C5} /* East Asian ideograph */, {0, 0, 0x78BC} /* East Asian ideograph */, {0, 0, 0x78D5} /* East Asian ideograph */, {0, 0, 0x78BE} /* East Asian ideograph */, {0, 0, 0x78CA} /* East Asian ideograph */, {0, 0, 0x78D0} /* East Asian ideograph */, {0, 0, 0x78E8} /* East Asian ideograph */, {0, 0, 0x78EC} /* East Asian ideograph */, {0, 0, 0x78DA} /* East Asian ideograph */, {0, 0, 0x78F7} /* East Asian ideograph */, {0, 0, 0x78F4} /* East Asian ideograph */, {0, 0, 0x78FA} /* East Asian ideograph (variant of EACC 4B4E56) */, {0, 0, 0x7901} /* East Asian ideograph */, {0, 0, 0x78EF} /* East Asian ideograph */, {0, 0, 0x790E} /* East Asian ideograph */, {0, 0, 0x7919} /* East Asian ideograph */, {0, 0, 0x7926} /* East Asian ideograph */, {0, 0, 0x792C} /* East Asian ideograph */, {0, 0, 0x792A} /* East Asian ideograph */, {0, 0, 0x792B} /* East Asian ideograph */, {0, 0, 0x793A} /* East Asian ideograph */, {0, 0, 0x7940} /* East Asian ideograph */, {0, 0, 0x793E} /* East Asian ideograph */, {0, 0, 0x7941} /* East Asian ideograph */, {0, 0, 0x7945} /* East Asian ideograph */, {0, 0, 0x7949} /* East Asian ideograph */, {0, 0, 0x7948} /* East Asian ideograph */, {0, 0, 0x7947} /* East Asian ideograph */, {0, 0, 0x7955} /* East Asian ideograph */, {0, 0, 0x7960} /* East Asian ideograph */, {0, 0, 0x7950} /* East Asian ideograph */, {0, 0, 0x7956} /* East Asian ideograph */, {0, 0, 0x795E} /* East Asian ideograph */, {0, 0, 0x795D} /* East Asian ideograph */, {0, 0, 0x795F} /* East Asian ideograph */, {0, 0, 0x795A} /* East Asian ideograph */, {0, 0, 0x7957} /* East Asian ideograph */, {0, 0, 0x7965} /* East Asian ideograph */, {0, 0, 0x7968} /* East Asian ideograph */, {0, 0, 0x796D} /* East Asian ideograph */, {0, 0, 0x797A} /* East Asian ideograph */, {0, 0, 0x7981} /* East Asian ideograph */, {0, 0, 0x797F} /* East Asian ideograph */, {0, 0, 0x798F} /* East Asian ideograph */, {0, 0, 0x798D} /* East Asian ideograph */, {0, 0, 0x798E} /* East Asian ideograph */, {0, 0, 0x79A6} /* East Asian ideograph */, {0, 0, 0x79A7} /* East Asian ideograph */, {0, 0, 0x79AA} /* East Asian ideograph */, {0, 0, 0x79AE} /* East Asian ideograph */, {0, 0, 0x79B1} /* East Asian ideograph */, {0, 0, 0x79B9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page33 = { 0, marc8_31page33_dir }; /* PAGE 32 */ struct yaz_iconv_trie_dir marc8_31page32_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x7682} /* East Asian ideograph */, {0, 0, 0x7684} /* East Asian ideograph */, {0, 0, 0x7687} /* East Asian ideograph */, {0, 0, 0x7686} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x768E} /* East Asian ideograph */, {0, 0, 0x7696} /* East Asian ideograph */, {0, 0, 0x7693} /* East Asian ideograph */, {0, 0, 0x769A} /* East Asian ideograph */, {0, 0, 0x76AE} /* East Asian ideograph */, {0, 0, 0x76B0} /* East Asian ideograph */, {0, 0, 0x76B4} /* East Asian ideograph */, {0, 0, 0x76BA} /* East Asian ideograph */, {0, 0, 0x76BF} /* East Asian ideograph */, {0, 0, 0x76C2} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x76C8} /* East Asian ideograph */, {0, 0, 0x76C6} /* East Asian ideograph */, {0, 0, 0x76CA} /* East Asian ideograph */, {0, 0, 0x76CD} /* East Asian ideograph */, {0, 0, 0x76CE} /* East Asian ideograph */, {0, 0, 0x76D4} /* East Asian ideograph */, {0, 0, 0x76D2} /* East Asian ideograph */, {0, 0, 0x76DC} /* East Asian ideograph */, {0, 0, 0x76DB} /* East Asian ideograph */, {0, 0, 0x76DE} /* East Asian ideograph */, {0, 0, 0x76DF} /* East Asian ideograph */, {0, 0, 0x76E1} /* East Asian ideograph */, {0, 0, 0x76E3} /* East Asian ideograph */, {0, 0, 0x76E4} /* East Asian ideograph */, {0, 0, 0x76E7} /* East Asian ideograph */, {0, 0, 0x76E5} /* East Asian ideograph */, {0, 0, 0x76EA} /* East Asian ideograph */, {0, 0, 0x76EE} /* East Asian ideograph */, {0, 0, 0x76EF} /* East Asian ideograph */, {0, 0, 0x76F2} /* East Asian ideograph */, {0, 0, 0x76F4} /* East Asian ideograph */, {0, 0, 0x7709} /* East Asian ideograph */, {0, 0, 0x76F9} /* East Asian ideograph */, {0, 0, 0x76F8} /* East Asian ideograph */, {0, 0, 0x7701} /* East Asian ideograph */, {0, 0, 0x770B} /* East Asian ideograph */, {0, 0, 0x76FC} /* East Asian ideograph */, {0, 0, 0x76FE} /* East Asian ideograph */, {0, 0, 0x7729} /* East Asian ideograph */, {0, 0, 0x7720} /* East Asian ideograph */, {0, 0, 0x771E} /* East Asian ideograph */, {0, 0, 0x7728} /* East Asian ideograph */, {0, 0, 0x7737} /* East Asian ideograph */, {0, 0, 0x773C} /* East Asian ideograph */, {0, 0, 0x7736} /* East Asian ideograph */, {0, 0, 0x7738} /* East Asian ideograph */, {0, 0, 0x773A} /* East Asian ideograph */, {0, 0, 0x773E} /* East Asian ideograph */, {0, 0, 0x774F} /* East Asian ideograph */, {0, 0, 0x776B} /* East Asian ideograph */, {0, 0, 0x775B} /* East Asian ideograph */, {0, 0, 0x776A} /* East Asian ideograph */, {0, 0, 0x7766} /* East Asian ideograph */, {0, 0, 0x7779} /* East Asian ideograph */, {0, 0, 0x775E} /* East Asian ideograph */, {0, 0, 0x7763} /* East Asian ideograph */, {0, 0, 0x775C} /* East Asian ideograph */, {0, 0, 0x776C} /* East Asian ideograph */, {0, 0, 0x7768} /* East Asian ideograph */, {0, 0, 0x7765} /* East Asian ideograph */, {0, 0, 0x777D} /* East Asian ideograph */, {0, 0, 0x7771} /* East Asian ideograph */, {0, 0, 0x777F} /* East Asian ideograph */, {0, 0, 0x7784} /* East Asian ideograph */, {0, 0, 0x7761} /* East Asian ideograph */, {0, 0, 0x7787} /* East Asian ideograph */, {0, 0, 0x778E} /* East Asian ideograph */, {0, 0, 0x778C} /* East Asian ideograph */, {0, 0, 0x7791} /* East Asian ideograph */, {0, 0, 0x779F} /* East Asian ideograph */, {0, 0, 0x779E} /* East Asian ideograph */, {0, 0, 0x77A0} /* East Asian ideograph */, {0, 0, 0x77A5} /* East Asian ideograph */, {0, 0, 0x77B3} /* East Asian ideograph */, {0, 0, 0x77AA} /* East Asian ideograph */, {0, 0, 0x77B0} /* East Asian ideograph */, {0, 0, 0x77AD} /* East Asian ideograph */, {0, 0, 0x77AC} /* East Asian ideograph */, {0, 0, 0x77A7} /* East Asian ideograph */, {0, 0, 0x77BD} /* East Asian ideograph */, {0, 0, 0x77BF} /* East Asian ideograph */, {0, 0, 0x77BB} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x77D3} /* East Asian ideograph */, {0, 0, 0x77D7} /* East Asian ideograph */, {0, 0, 0x77DA} /* East Asian ideograph */, {0, 0, 0x77DB} /* East Asian ideograph */, {0, 0, 0x77DC} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page32 = { 0, marc8_31page32_dir }; /* PAGE 31 */ struct yaz_iconv_trie_dir marc8_31page31_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x752C} /* East Asian ideograph */, {0, 0, 0x752B} /* East Asian ideograph */, {0, 0, 0x752D} /* East Asian ideograph */, {0, 0, 0x7530} /* East Asian ideograph */, {0, 0, 0x7532} /* East Asian ideograph */, {0, 0, 0x7531} /* East Asian ideograph */, {0, 0, 0x7533} /* East Asian ideograph */, {0, 0, 0x7537} /* East Asian ideograph */, {0, 0, 0x7538} /* East Asian ideograph */, {0, 0, 0x753D} /* East Asian ideograph */, {0, 0, 0x754F} /* East Asian ideograph */, {0, 0, 0x754C} /* East Asian ideograph */, {0, 0, 0x755D} /* East Asian ideograph */, {0, 0, 0x755C} /* East Asian ideograph */, {0, 0, 0x7554} /* East Asian ideograph */, {0, 0, 0x755A} /* East Asian ideograph */, {0, 0, 0x7559} /* East Asian ideograph */, {0, 0, 0x7566} /* East Asian ideograph */, {0, 0, 0x7562} /* East Asian ideograph */, {0, 0, 0x7570} /* East Asian ideograph */, {0, 0, 0x7565} /* East Asian ideograph */, {0, 0, 0x756B} /* East Asian ideograph */, {0, 0, 0x756A} /* East Asian ideograph */, {0, 0, 0x7578} /* East Asian ideograph */, {0, 0, 0x7576} /* East Asian ideograph */, {0, 0, 0x7586} /* East Asian ideograph */, {0, 0, 0x7587} /* East Asian ideograph */, {0, 0, 0x758A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x758F} /* East Asian ideograph */, {0, 0, 0x7591} /* East Asian ideograph */, {0, 0, 0x759D} /* East Asian ideograph */, {0, 0, 0x7599} /* East Asian ideograph */, {0, 0, 0x759A} /* East Asian ideograph */, {0, 0, 0x75A4} /* East Asian ideograph */, {0, 0, 0x75AB} /* East Asian ideograph */, {0, 0, 0x75A5} /* East Asian ideograph */, {0, 0, 0x75C7} /* East Asian ideograph */, {0, 0, 0x75C5} /* East Asian ideograph */, {0, 0, 0x75B3} /* East Asian ideograph */, {0, 0, 0x75B2} /* East Asian ideograph */, {0, 0, 0x75BD} /* East Asian ideograph */, {0, 0, 0x75BE} /* East Asian ideograph */, {0, 0, 0x75BC} /* East Asian ideograph */, {0, 0, 0x75B9} /* East Asian ideograph */, {0, 0, 0x75D5} /* East Asian ideograph */, {0, 0, 0x75D4} /* East Asian ideograph */, {0, 0, 0x75B5} /* East Asian ideograph */, {0, 0, 0x75CA} /* East Asian ideograph (variant of EACC 4B4C51) */, {0, 0, 0x75DB} /* East Asian ideograph */, {0, 0, 0x75E3} /* East Asian ideograph */, {0, 0, 0x75D8} /* East Asian ideograph */, {0, 0, 0x75DE} /* East Asian ideograph */, {0, 0, 0x75D9} /* East Asian ideograph */, {0, 0, 0x75E2} /* East Asian ideograph */, {0, 0, 0x7601} /* East Asian ideograph */, {0, 0, 0x7600} /* East Asian ideograph */, {0, 0, 0x75F0} /* East Asian ideograph */, {0, 0, 0x75F2} /* East Asian ideograph */, {0, 0, 0x75F1} /* East Asian ideograph */, {0, 0, 0x75F4} /* East Asian ideograph */, {0, 0, 0x75FF} /* East Asian ideograph */, {0, 0, 0x75FA} /* East Asian ideograph */, {0, 0, 0x760D} /* East Asian ideograph */, {0, 0, 0x7627} /* East Asian ideograph */, {0, 0, 0x7613} /* East Asian ideograph */, {0, 0, 0x760B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7620} /* East Asian ideograph */, {0, 0, 0x7629} /* East Asian ideograph */, {0, 0, 0x761F} /* East Asian ideograph */, {0, 0, 0x7624} /* East Asian ideograph */, {0, 0, 0x7626} /* East Asian ideograph */, {0, 0, 0x7621} /* East Asian ideograph */, {0, 0, 0x7634} /* East Asian ideograph */, {0, 0, 0x7638} /* East Asian ideograph */, {0, 0, 0x7646} /* East Asian ideograph */, {0, 0, 0x7642} /* East Asian ideograph */, {0, 0, 0x764C} /* East Asian ideograph */, {0, 0, 0x7656} /* East Asian ideograph */, {0, 0, 0x7658} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7662} /* East Asian ideograph */, {0, 0, 0x7665} /* East Asian ideograph */, {0, 0, 0x7669} /* East Asian ideograph */, {0, 0, 0x766E} /* East Asian ideograph */, {0, 0, 0x766C} /* East Asian ideograph */, {0, 0, 0x7671} /* East Asian ideograph */, {0, 0, 0x7672} /* East Asian ideograph (variant of EACC 4B4C79) */, {0, 0, 0x7678} /* East Asian ideograph */, {0, 0, 0x767C} /* East Asian ideograph */, {0, 0, 0x767B} /* East Asian ideograph */, {0, 0, 0x767D} /* East Asian ideograph */, {0, 0, 0x767E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page31 = { 0, marc8_31page31_dir }; /* PAGE 30 */ struct yaz_iconv_trie_dir marc8_31page30_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x733F} /* East Asian ideograph */, {0, 0, 0x733E} /* East Asian ideograph */, {0, 0, 0x7345} /* East Asian ideograph */, {0, 0, 0x7350} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7357} /* East Asian ideograph */, {0, 0, 0x7368} /* East Asian ideograph */, {0, 0, 0x7370} /* East Asian ideograph */, {0, 0, 0x7372} /* East Asian ideograph */, {0, 0, 0x7377} /* East Asian ideograph */, {0, 0, 0x7378} /* East Asian ideograph */, {0, 0, 0x7375} /* East Asian ideograph */, {0, 0, 0x737A} /* East Asian ideograph */, {0, 0, 0x737B} /* East Asian ideograph */, {0, 0, 0x7380} /* East Asian ideograph */, {0, 0, 0x7384} /* East Asian ideograph */, {0, 0, 0x7387} /* East Asian ideograph */, {0, 0, 0x7389} /* East Asian ideograph */, {0, 0, 0x738B} /* East Asian ideograph */, {0, 0, 0x7396} /* East Asian ideograph */, {0, 0, 0x739F} /* East Asian ideograph */, {0, 0, 0x73A8} /* East Asian ideograph */, {0, 0, 0x73A9} /* East Asian ideograph */, {0, 0, 0x73AB} /* East Asian ideograph */, {0, 0, 0x73BB} /* East Asian ideograph */, {0, 0, 0x73CA} /* East Asian ideograph */, {0, 0, 0x73B7} /* East Asian ideograph */, {0, 0, 0x73C0} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x73B2} /* East Asian ideograph */, {0, 0, 0x73CD} /* East Asian ideograph */, {0, 0, 0x73ED} /* East Asian ideograph */, {0, 0, 0x73EE} /* East Asian ideograph */, {0, 0, 0x73E0} /* East Asian ideograph */, {0, 0, 0x7405} /* East Asian ideograph */, {0, 0, 0x7409} /* East Asian ideograph */, {0, 0, 0x7403} /* East Asian ideograph */, {0, 0, 0x740A} /* East Asian ideograph */, {0, 0, 0x73FE} /* East Asian ideograph */, {0, 0, 0x7406} /* East Asian ideograph */, {0, 0, 0x740D} /* East Asian ideograph */, {0, 0, 0x743A} /* East Asian ideograph */, {0, 0, 0x7435} /* East Asian ideograph */, {0, 0, 0x7436} /* East Asian ideograph */, {0, 0, 0x7434} /* East Asian ideograph */, {0, 0, 0x742A} /* East Asian ideograph */, {0, 0, 0x7433} /* East Asian ideograph */, {0, 0, 0x7422} /* East Asian ideograph */, {0, 0, 0x7425} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7455} /* East Asian ideograph */, {0, 0, 0x745F} /* East Asian ideograph */, {0, 0, 0x745A} /* East Asian ideograph */, {0, 0, 0x7441} /* East Asian ideograph */, {0, 0, 0x743F} /* East Asian ideograph */, {0, 0, 0x745B} /* East Asian ideograph */, {0, 0, 0x745E} /* East Asian ideograph */, {0, 0, 0x745C} /* East Asian ideograph */, {0, 0, 0x7459} /* East Asian ideograph */, {0, 0, 0x7483} /* East Asian ideograph */, {0, 0, 0x7469} /* East Asian ideograph */, {0, 0, 0x746A} /* East Asian ideograph */, {0, 0, 0x7463} /* East Asian ideograph */, {0, 0, 0x7464} /* East Asian ideograph */, {0, 0, 0x7470} /* East Asian ideograph */, {0, 0, 0x748B} /* East Asian ideograph */, {0, 0, 0x749C} /* East Asian ideograph (variant of EACC 4B4B63) */, {0, 0, 0x74A3} /* East Asian ideograph */, {0, 0, 0x74A7} /* East Asian ideograph */, {0, 0, 0x74A9} /* East Asian ideograph */, {0, 0, 0x74B0} /* East Asian ideograph */, {0, 0, 0x74A6} /* East Asian ideograph */, {0, 0, 0x74BD} /* East Asian ideograph */, {0, 0, 0x74CA} /* East Asian ideograph */, {0, 0, 0x74CF} /* East Asian ideograph */, {0, 0, 0x74DC} /* East Asian ideograph */, {0, 0, 0x74E0} /* East Asian ideograph */, {0, 0, 0x74E2} /* East Asian ideograph */, {0, 0, 0x74E3} /* East Asian ideograph */, {0, 0, 0x74E6} /* East Asian ideograph */, {0, 0, 0x74F6} /* East Asian ideograph */, {0, 0, 0x74F7} /* East Asian ideograph */, {0, 0, 0x7504} /* East Asian ideograph */, {0, 0, 0x750C} /* East Asian ideograph */, {0, 0, 0x7515} /* East Asian ideograph */, {0, 0, 0x7518} /* East Asian ideograph */, {0, 0, 0x751A} /* East Asian ideograph */, {0, 0, 0x751C} /* East Asian ideograph */, {0, 0, 0x751F} /* East Asian ideograph */, {0, 0, 0x7522} /* East Asian ideograph */, {0, 0, 0x7526} /* East Asian ideograph */, {0, 0, 0x7525} /* East Asian ideograph */, {0, 0, 0x7528} /* East Asian ideograph */, {0, 0, 0x7529} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page30 = { 0, marc8_31page30_dir }; /* PAGE 29 */ struct yaz_iconv_trie_dir marc8_31page29_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x71BE} /* East Asian ideograph */, {0, 0, 0x71C9} /* East Asian ideograph */, {0, 0, 0x71D0} /* East Asian ideograph */, {0, 0, 0x71C8} /* East Asian ideograph */, {0, 0, 0x71DC} /* East Asian ideograph */, {0, 0, 0x71D2} /* East Asian ideograph */, {0, 0, 0x71B9} /* East Asian ideograph */, {0, 0, 0x71D5} /* East Asian ideograph */, {0, 0, 0x71CE} /* East Asian ideograph */, {0, 0, 0x71C3} /* East Asian ideograph */, {0, 0, 0x71C4} /* East Asian ideograph */, {0, 0, 0x71EE} /* East Asian ideograph */, {0, 0, 0x71E7} /* East Asian ideograph */, {0, 0, 0x71DF} /* East Asian ideograph */, {0, 0, 0x71E5} /* East Asian ideograph */, {0, 0, 0x71ED} /* East Asian ideograph */, {0, 0, 0x71E6} /* East Asian ideograph */, {0, 0, 0x71EC} /* East Asian ideograph */, {0, 0, 0x71F4} /* East Asian ideograph */, {0, 0, 0x71FB} /* East Asian ideograph */, {0, 0, 0x7206} /* East Asian ideograph */, {0, 0, 0x720D} /* East Asian ideograph */, {0, 0, 0x7210} /* East Asian ideograph */, {0, 0, 0x721B} /* East Asian ideograph */, {0, 0, 0x7228} /* East Asian ideograph */, {0, 0, 0x722A} /* East Asian ideograph */, {0, 0, 0x722D} /* East Asian ideograph */, {0, 0, 0x722C} /* East Asian ideograph */, {0, 0, 0x7230} /* East Asian ideograph */, {0, 0, 0x7235} /* East Asian ideograph (variant of EACC 4B4A3E) */, {0, 0, 0x7236} /* East Asian ideograph */, {0, 0, 0x7238} /* East Asian ideograph */, {0, 0, 0x7239} /* East Asian ideograph */, {0, 0, 0x723A} /* East Asian ideograph */, {0, 0, 0x723B} /* East Asian ideograph */, {0, 0, 0x723D} /* East Asian ideograph */, {0, 0, 0x723E} /* East Asian ideograph */, {0, 0, 0x7246} /* East Asian ideograph */, {0, 0, 0x7247} /* East Asian ideograph */, {0, 0, 0x7248} /* East Asian ideograph */, {0, 0, 0x724C} /* East Asian ideograph */, {0, 0, 0x7252} /* East Asian ideograph */, {0, 0, 0x7256} /* East Asian ideograph */, {0, 0, 0x7258} /* East Asian ideograph */, {0, 0, 0x7259} /* East Asian ideograph */, {0, 0, 0x725B} /* East Asian ideograph */, {0, 0, 0x725F} /* East Asian ideograph */, {0, 0, 0x725D} /* East Asian ideograph */, {0, 0, 0x7262} /* East Asian ideograph */, {0, 0, 0x7261} /* East Asian ideograph */, {0, 0, 0x7260} /* East Asian ideograph */, {0, 0, 0x7267} /* East Asian ideograph */, {0, 0, 0x7269} /* East Asian ideograph */, {0, 0, 0x726F} /* East Asian ideograph */, {0, 0, 0x7272} /* East Asian ideograph */, {0, 0, 0x7274} /* East Asian ideograph */, {0, 0, 0x7279} /* East Asian ideograph */, {0, 0, 0x727D} /* East Asian ideograph */, {0, 0, 0x7281} /* East Asian ideograph */, {0, 0, 0x7280} /* East Asian ideograph */, {0, 0, 0x7284} /* East Asian ideograph */, {0, 0, 0x7296} /* East Asian ideograph */, {0, 0, 0x7292} /* East Asian ideograph */, {0, 0, 0x729B} /* East Asian ideograph */, {0, 0, 0x72A2} /* East Asian ideograph */, {0, 0, 0x72A7} /* East Asian ideograph */, {0, 0, 0x72AC} /* East Asian ideograph */, {0, 0, 0x72AF} /* East Asian ideograph */, {0, 0, 0x72C4} /* East Asian ideograph */, {0, 0, 0x72C2} /* East Asian ideograph */, {0, 0, 0x72D9} /* East Asian ideograph */, {0, 0, 0x72C0} /* East Asian ideograph */, {0, 0, 0x72CE} /* East Asian ideograph */, {0, 0, 0x72D7} /* East Asian ideograph */, {0, 0, 0x72D0} /* East Asian ideograph */, {0, 0, 0x72E1} /* East Asian ideograph */, {0, 0, 0x72E9} /* East Asian ideograph */, {0, 0, 0x72E0} /* East Asian ideograph */, {0, 0, 0x72FC} /* East Asian ideograph */, {0, 0, 0x72F9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x72FD} /* East Asian ideograph */, {0, 0, 0x72F7} /* East Asian ideograph */, {0, 0, 0x731C} /* East Asian ideograph */, {0, 0, 0x731B} /* East Asian ideograph */, {0, 0, 0x7313} /* East Asian ideograph */, {0, 0, 0x7316} /* East Asian ideograph */, {0, 0, 0x7319} /* East Asian ideograph */, {0, 0, 0x7336} /* East Asian ideograph */, {0, 0, 0x7337} /* East Asian ideograph */, {0, 0, 0x7329} /* East Asian ideograph */, {0, 0, 0x7325} /* East Asian ideograph */, {0, 0, 0x7334} /* East Asian ideograph */, {0, 0, 0x7344} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page29 = { 0, marc8_31page29_dir }; /* PAGE 28 */ struct yaz_iconv_trie_dir marc8_31page28_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x6FA4} /* East Asian ideograph */, {0, 0, 0x6FC1} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6FC0} /* East Asian ideograph */, {0, 0, 0x6FB3} /* East Asian ideograph */, {0, 0, 0x6FDF} /* East Asian ideograph */, {0, 0, 0x6FD8} /* East Asian ideograph */, {0, 0, 0x6FF1} /* East Asian ideograph */, {0, 0, 0x6FE0} /* East Asian ideograph */, {0, 0, 0x6FEF} /* East Asian ideograph */, {0, 0, 0x6FEB} /* East Asian ideograph (variant of EACC 4B492B) */, {0, 0, 0x6FE1} /* East Asian ideograph */, {0, 0, 0x6FE4} /* East Asian ideograph */, {0, 0, 0x6F80} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x700B} /* East Asian ideograph */, {0, 0, 0x7009} /* East Asian ideograph */, {0, 0, 0x7006} /* East Asian ideograph */, {0, 0, 0x6FFA} /* East Asian ideograph */, {0, 0, 0x7011} /* East Asian ideograph */, {0, 0, 0x6FFE} /* East Asian ideograph */, {0, 0, 0x700F} /* East Asian ideograph */, {0, 0, 0x701B} /* East Asian ideograph */, {0, 0, 0x701A} /* East Asian ideograph */, {0, 0, 0x7028} /* East Asian ideograph */, {0, 0, 0x701D} /* East Asian ideograph */, {0, 0, 0x7015} /* East Asian ideograph */, {0, 0, 0x701F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x703E} /* East Asian ideograph */, {0, 0, 0x704C} /* East Asian ideograph */, {0, 0, 0x7051} /* East Asian ideograph */, {0, 0, 0x7058} /* East Asian ideograph */, {0, 0, 0x7063} /* East Asian ideograph */, {0, 0, 0x7064} /* East Asian ideograph */, {0, 0, 0x706B} /* East Asian ideograph */, {0, 0, 0x7070} /* East Asian ideograph */, {0, 0, 0x7076} /* East Asian ideograph */, {0, 0, 0x707C} /* East Asian ideograph */, {0, 0, 0x7078} /* East Asian ideograph */, {0, 0, 0x707D} /* East Asian ideograph */, {0, 0, 0x7095} /* East Asian ideograph */, {0, 0, 0x708E} /* East Asian ideograph */, {0, 0, 0x7092} /* East Asian ideograph */, {0, 0, 0x7099} /* East Asian ideograph */, {0, 0, 0x708A} /* East Asian ideograph */, {0, 0, 0x70AB} /* East Asian ideograph */, {0, 0, 0x70BA} /* East Asian ideograph */, {0, 0, 0x70AC} /* East Asian ideograph */, {0, 0, 0x70B3} /* East Asian ideograph */, {0, 0, 0x70AF} /* East Asian ideograph */, {0, 0, 0x70AD} /* East Asian ideograph */, {0, 0, 0x70AE} /* East Asian ideograph */, {0, 0, 0x70B8} /* East Asian ideograph */, {0, 0, 0x70CA} /* East Asian ideograph */, {0, 0, 0x70E4} /* East Asian ideograph */, {0, 0, 0x70D8} /* East Asian ideograph */, {0, 0, 0x70C8} /* East Asian ideograph */, {0, 0, 0x70D9} /* East Asian ideograph */, {0, 0, 0x70CF} /* East Asian ideograph */, {0, 0, 0x70F9} /* East Asian ideograph */, {0, 0, 0x7109} /* East Asian ideograph */, {0, 0, 0x710A} /* East Asian ideograph */, {0, 0, 0x70FD} /* East Asian ideograph */, {0, 0, 0x7119} /* East Asian ideograph */, {0, 0, 0x716E} /* East Asian ideograph */, {0, 0, 0x711A} /* East Asian ideograph */, {0, 0, 0x7136} /* East Asian ideograph */, {0, 0, 0x7121} /* East Asian ideograph */, {0, 0, 0x7130} /* East Asian ideograph */, {0, 0, 0x7126} /* East Asian ideograph */, {0, 0, 0x714E} /* East Asian ideograph */, {0, 0, 0x7149} /* East Asian ideograph */, {0, 0, 0x7159} /* East Asian ideograph */, {0, 0, 0x7164} /* East Asian ideograph */, {0, 0, 0x7169} /* East Asian ideograph */, {0, 0, 0x715C} /* East Asian ideograph */, {0, 0, 0x716C} /* East Asian ideograph */, {0, 0, 0x7166} /* East Asian ideograph */, {0, 0, 0x7167} /* East Asian ideograph */, {0, 0, 0x715E} /* East Asian ideograph */, {0, 0, 0x7165} /* East Asian ideograph */, {0, 0, 0x714C} /* East Asian ideograph */, {0, 0, 0x717D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x7199} /* East Asian ideograph */, {0, 0, 0x718A} /* East Asian ideograph */, {0, 0, 0x7184} /* East Asian ideograph */, {0, 0, 0x719F} /* East Asian ideograph */, {0, 0, 0x71A8} /* East Asian ideograph */, {0, 0, 0x71AC} /* East Asian ideograph */, {0, 0, 0x71B1} /* East Asian ideograph */, {0, 0, 0x71D9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page28 = { 0, marc8_31page28_dir }; /* PAGE 27 */ struct yaz_iconv_trie_dir marc8_31page27_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x6E5B} /* East Asian ideograph */, {0, 0, 0x6E1A} /* East Asian ideograph */, {0, 0, 0x6E56} /* East Asian ideograph */, {0, 0, 0x6E2F} /* East Asian ideograph */, {0, 0, 0x6E6E} /* East Asian ideograph */, {0, 0, 0x6E58} /* East Asian ideograph */, {0, 0, 0x6E23} /* East Asian ideograph */, {0, 0, 0x6E24} /* East Asian ideograph */, {0, 0, 0x6E1B} /* East Asian ideograph */, {0, 0, 0x6E25} /* East Asian ideograph */, {0, 0, 0x6E4A} /* East Asian ideograph */, {0, 0, 0x6E3A} /* East Asian ideograph */, {0, 0, 0x6E6F} /* East Asian ideograph */, {0, 0, 0x6E2D} /* East Asian ideograph */, {0, 0, 0x6E34} /* East Asian ideograph */, {0, 0, 0x6E2C} /* East Asian ideograph */, {0, 0, 0x6E26} /* East Asian ideograph */, {0, 0, 0x6E4D} /* East Asian ideograph */, {0, 0, 0x6E3E} /* East Asian ideograph */, {0, 0, 0x6E43} /* East Asian ideograph */, {0, 0, 0x6E19} /* East Asian ideograph */, {0, 0, 0x6E1D} /* East Asian ideograph */, {0, 0, 0x6ED3} /* East Asian ideograph */, {0, 0, 0x6EB6} /* East Asian ideograph */, {0, 0, 0x6EC2} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6EAF} /* East Asian ideograph */, {0, 0, 0x6EA2} /* East Asian ideograph */, {0, 0, 0x6E9D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6EA5} /* East Asian ideograph */, {0, 0, 0x6E98} /* East Asian ideograph */, {0, 0, 0x6E90} /* East Asian ideograph */, {0, 0, 0x6EC5} /* East Asian ideograph */, {0, 0, 0x6EC7} /* East Asian ideograph */, {0, 0, 0x6EBC} /* East Asian ideograph */, {0, 0, 0x6EAB} /* East Asian ideograph */, {0, 0, 0x6ED1} /* East Asian ideograph */, {0, 0, 0x6ECB} /* East Asian ideograph */, {0, 0, 0x6EC4} /* East Asian ideograph */, {0, 0, 0x6ED4} /* East Asian ideograph */, {0, 0, 0x6EAA} /* East Asian ideograph */, {0, 0, 0x6E96} /* East Asian ideograph */, {0, 0, 0x6E9C} /* East Asian ideograph */, {0, 0, 0x6F33} /* East Asian ideograph */, {0, 0, 0x6EF4} /* East Asian ideograph */, {0, 0, 0x6EEC} /* East Asian ideograph */, {0, 0, 0x6EFE} /* East Asian ideograph */, {0, 0, 0x6F29} /* East Asian ideograph */, {0, 0, 0x6F14} /* East Asian ideograph */, {0, 0, 0x6F3E} /* East Asian ideograph */, {0, 0, 0x6F2C} /* East Asian ideograph */, {0, 0, 0x6F32} /* East Asian ideograph */, {0, 0, 0x6F0F} /* East Asian ideograph */, {0, 0, 0x6F22} /* East Asian ideograph (variant of EACC 4B4857) */, {0, 0, 0x6EFF} /* East Asian ideograph */, {0, 0, 0x6F23} /* East Asian ideograph */, {0, 0, 0x6F38} /* East Asian ideograph */, {0, 0, 0x6F15} /* East Asian ideograph */, {0, 0, 0x6F31} /* East Asian ideograph */, {0, 0, 0x6F02} /* East Asian ideograph */, {0, 0, 0x6F06} /* East Asian ideograph */, {0, 0, 0x6EEF} /* East Asian ideograph */, {0, 0, 0x6F2B} /* East Asian ideograph */, {0, 0, 0x6F2F} /* East Asian ideograph */, {0, 0, 0x6F20} /* East Asian ideograph */, {0, 0, 0x6F3F} /* East Asian ideograph */, {0, 0, 0x6EF2} /* East Asian ideograph */, {0, 0, 0x6F01} /* East Asian ideograph */, {0, 0, 0x6F11} /* East Asian ideograph */, {0, 0, 0x6ECC} /* East Asian ideograph */, {0, 0, 0x6F2A} /* East Asian ideograph */, {0, 0, 0x6F7C} /* East Asian ideograph */, {0, 0, 0x6F88} /* East Asian ideograph */, {0, 0, 0x6F84} /* East Asian ideograph */, {0, 0, 0x6F51} /* East Asian ideograph */, {0, 0, 0x6F64} /* East Asian ideograph */, {0, 0, 0x6F97} /* East Asian ideograph */, {0, 0, 0x6F54} /* East Asian ideograph */, {0, 0, 0x6F7A} /* East Asian ideograph */, {0, 0, 0x6F86} /* East Asian ideograph */, {0, 0, 0x6F8E} /* East Asian ideograph */, {0, 0, 0x6F6D} /* East Asian ideograph */, {0, 0, 0x6F5B} /* East Asian ideograph */, {0, 0, 0x6F6E} /* East Asian ideograph */, {0, 0, 0x6F78} /* East Asian ideograph */, {0, 0, 0x6F66} /* East Asian ideograph */, {0, 0, 0x6F70} /* East Asian ideograph */, {0, 0, 0x6F58} /* East Asian ideograph */, {0, 0, 0x6FC2} /* East Asian ideograph */, {0, 0, 0x6FB1} /* East Asian ideograph */, {0, 0, 0x6FC3} /* East Asian ideograph */, {0, 0, 0x6FA7} /* East Asian ideograph */, {0, 0, 0x6FA1} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page27 = { 0, marc8_31page27_dir }; /* PAGE 26 */ struct yaz_iconv_trie_dir marc8_31page26_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x6CE3} /* East Asian ideograph */, {0, 0, 0x6CF0} /* East Asian ideograph */, {0, 0, 0x6CB8} /* East Asian ideograph */, {0, 0, 0x6CD3} /* East Asian ideograph */, {0, 0, 0x6CAB} /* East Asian ideograph */, {0, 0, 0x6CE5} /* East Asian ideograph */, {0, 0, 0x6CBD} /* East Asian ideograph */, {0, 0, 0x6CB3} /* East Asian ideograph */, {0, 0, 0x6CC4} /* East Asian ideograph */, {0, 0, 0x6CD5} /* East Asian ideograph */, {0, 0, 0x6CE2} /* East Asian ideograph */, {0, 0, 0x6CBC} /* East Asian ideograph */, {0, 0, 0x6CAE} /* East Asian ideograph */, {0, 0, 0x6CB9} /* East Asian ideograph */, {0, 0, 0x6CF1} /* East Asian ideograph */, {0, 0, 0x6CC1} /* East Asian ideograph */, {0, 0, 0x6CBE} /* East Asian ideograph */, {0, 0, 0x6CC5} /* East Asian ideograph */, {0, 0, 0x6CD7} /* East Asian ideograph */, {0, 0, 0x6CBB} /* East Asian ideograph */, {0, 0, 0x6CDB} /* East Asian ideograph */, {0, 0, 0x6CE1} /* East Asian ideograph */, {0, 0, 0x6CBF} /* East Asian ideograph */, {0, 0, 0x6CCA} /* East Asian ideograph */, {0, 0, 0x6CCC} /* East Asian ideograph */, {0, 0, 0x6CC9} /* East Asian ideograph */, {0, 0, 0x6D41} /* East Asian ideograph */, {0, 0, 0x6D0B} /* East Asian ideograph */, {0, 0, 0x6D32} /* East Asian ideograph */, {0, 0, 0x6D25} /* East Asian ideograph */, {0, 0, 0x6D31} /* East Asian ideograph */, {0, 0, 0x6D2A} /* East Asian ideograph */, {0, 0, 0x6D0C} /* East Asian ideograph */, {0, 0, 0x6D1E} /* East Asian ideograph */, {0, 0, 0x6D17} /* East Asian ideograph */, {0, 0, 0x6D3B} /* East Asian ideograph */, {0, 0, 0x6D1B} /* East Asian ideograph */, {0, 0, 0x6D36} /* East Asian ideograph */, {0, 0, 0x6D3D} /* East Asian ideograph */, {0, 0, 0x6D3E} /* East Asian ideograph */, {0, 0, 0x6D6A} /* East Asian ideograph */, {0, 0, 0x6D95} /* East Asian ideograph */, {0, 0, 0x6D78} /* East Asian ideograph */, {0, 0, 0x6D66} /* East Asian ideograph */, {0, 0, 0x6D59} /* East Asian ideograph */, {0, 0, 0x6D87} /* East Asian ideograph */, {0, 0, 0x6D88} /* East Asian ideograph */, {0, 0, 0x6D6C} /* East Asian ideograph */, {0, 0, 0x6D93} /* East Asian ideograph */, {0, 0, 0x6D89} /* East Asian ideograph */, {0, 0, 0x6D6E} /* East Asian ideograph */, {0, 0, 0x6D74} /* East Asian ideograph */, {0, 0, 0x6D5A} /* East Asian ideograph */, {0, 0, 0x6D69} /* East Asian ideograph */, {0, 0, 0x6D77} /* East Asian ideograph */, {0, 0, 0x6DD9} /* East Asian ideograph */, {0, 0, 0x6DDA} /* East Asian ideograph */, {0, 0, 0x6DF3} /* East Asian ideograph */, {0, 0, 0x6DBC} /* East Asian ideograph */, {0, 0, 0x6DE4} /* East Asian ideograph */, {0, 0, 0x6DB2} /* East Asian ideograph */, {0, 0, 0x6DE1} /* East Asian ideograph */, {0, 0, 0x6DD2} /* East Asian ideograph */, {0, 0, 0x6DAE} /* East Asian ideograph */, {0, 0, 0x6DF8} /* East Asian ideograph */, {0, 0, 0x6DC7} /* East Asian ideograph */, {0, 0, 0x6DCB} /* East Asian ideograph */, {0, 0, 0x6DC5} /* East Asian ideograph */, {0, 0, 0x6DDE} /* East Asian ideograph */, {0, 0, 0x6DAF} /* East Asian ideograph */, {0, 0, 0x6DB5} /* East Asian ideograph */, {0, 0, 0x6DFA} /* East Asian ideograph */, {0, 0, 0x6DF9} /* East Asian ideograph */, {0, 0, 0x6DCC} /* East Asian ideograph */, {0, 0, 0x6DF7} /* East Asian ideograph */, {0, 0, 0x6DB8} /* East Asian ideograph */, {0, 0, 0x6DD1} /* East Asian ideograph */, {0, 0, 0x6DF1} /* East Asian ideograph */, {0, 0, 0x6DE8} /* East Asian ideograph */, {0, 0, 0x6DEB} /* East Asian ideograph */, {0, 0, 0x6DD8} /* East Asian ideograph */, {0, 0, 0x6DFB} /* East Asian ideograph */, {0, 0, 0x6DEE} /* East Asian ideograph */, {0, 0, 0x6DF5} /* East Asian ideograph */, {0, 0, 0x6D8E} /* East Asian ideograph */, {0, 0, 0x6DC6} /* East Asian ideograph */, {0, 0, 0x6DEA} /* East Asian ideograph */, {0, 0, 0x6DC4} /* East Asian ideograph */, {0, 0, 0x6E54} /* East Asian ideograph */, {0, 0, 0x6E21} /* East Asian ideograph */, {0, 0, 0x6E38} /* East Asian ideograph */, {0, 0, 0x6E32} /* East Asian ideograph */, {0, 0, 0x6E67} /* East Asian ideograph */, {0, 0, 0x6E20} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page26 = { 0, marc8_31page26_dir }; /* PAGE 25 */ struct yaz_iconv_trie_dir marc8_31page25_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x6B61} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6B63} /* East Asian ideograph */, {0, 0, 0x6B64} /* East Asian ideograph */, {0, 0, 0x6B65} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6B66} /* East Asian ideograph */, {0, 0, 0x6B6A} /* East Asian ideograph */, {0, 0, 0x6B72} /* East Asian ideograph */, {0, 0, 0x6B77} /* East Asian ideograph */, {0, 0, 0x6B78} /* East Asian ideograph */, {0, 0, 0x6B79} /* East Asian ideograph */, {0, 0, 0x6B7B} /* East Asian ideograph */, {0, 0, 0x6B7F} /* East Asian ideograph */, {0, 0, 0x6B83} /* East Asian ideograph */, {0, 0, 0x6B86} /* East Asian ideograph */, {0, 0, 0x6B8A} /* East Asian ideograph */, {0, 0, 0x6B89} /* East Asian ideograph */, {0, 0, 0x6B98} /* East Asian ideograph */, {0, 0, 0x6B96} /* East Asian ideograph */, {0, 0, 0x6BA4} /* East Asian ideograph */, {0, 0, 0x6BAE} /* East Asian ideograph */, {0, 0, 0x6BAF} /* East Asian ideograph */, {0, 0, 0x6BB2} /* East Asian ideograph */, {0, 0, 0x6BB5} /* East Asian ideograph */, {0, 0, 0x6BB7} /* East Asian ideograph */, {0, 0, 0x6BBA} /* East Asian ideograph */, {0, 0, 0x6BBC} /* East Asian ideograph */, {0, 0, 0x6BC0} /* East Asian ideograph */, {0, 0, 0x6BBF} /* East Asian ideograph */, {0, 0, 0x6BC5} /* East Asian ideograph */, {0, 0, 0x6BC6} /* East Asian ideograph */, {0, 0, 0x6BCB} /* East Asian ideograph */, {0, 0, 0x6BCD} /* East Asian ideograph */, {0, 0, 0x6BCF} /* East Asian ideograph */, {0, 0, 0x6BD2} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6BD4} /* East Asian ideograph */, {0, 0, 0x6BD7} /* East Asian ideograph */, {0, 0, 0x6BDB} /* East Asian ideograph */, {0, 0, 0x6BEB} /* East Asian ideograph */, {0, 0, 0x6BEF} /* East Asian ideograph */, {0, 0, 0x6BFD} /* East Asian ideograph */, {0, 0, 0x6C0F} /* East Asian ideograph */, {0, 0, 0x6C11} /* East Asian ideograph */, {0, 0, 0x6C10} /* East Asian ideograph */, {0, 0, 0x6C13} /* East Asian ideograph */, {0, 0, 0x6C16} /* East Asian ideograph */, {0, 0, 0x6C1B} /* East Asian ideograph */, {0, 0, 0x6C1F} /* East Asian ideograph */, {0, 0, 0x6C27} /* East Asian ideograph */, {0, 0, 0x6C26} /* East Asian ideograph */, {0, 0, 0x6C23} /* East Asian ideograph */, {0, 0, 0x6C28} /* East Asian ideograph */, {0, 0, 0x6C24} /* East Asian ideograph */, {0, 0, 0x6C2B} /* East Asian ideograph */, {0, 0, 0x6C2E} /* East Asian ideograph */, {0, 0, 0x6C33} /* East Asian ideograph */, {0, 0, 0x6C2F} /* East Asian ideograph (variant of EACC 45465B) */, {0, 0, 0x6C34} /* East Asian ideograph */, {0, 0, 0x6C38} /* East Asian ideograph */, {0, 0, 0x6C41} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6C40} /* East Asian ideograph */, {0, 0, 0x6C42} /* East Asian ideograph */, {0, 0, 0x6C5E} /* East Asian ideograph */, {0, 0, 0x6C57} /* East Asian ideograph */, {0, 0, 0x6C5F} /* East Asian ideograph */, {0, 0, 0x6C59} /* East Asian ideograph */, {0, 0, 0x6C60} /* East Asian ideograph */, {0, 0, 0x6C55} /* East Asian ideograph */, {0, 0, 0x6C50} /* East Asian ideograph */, {0, 0, 0x6C5D} /* East Asian ideograph */, {0, 0, 0x6C9B} /* East Asian ideograph */, {0, 0, 0x6C81} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6C7A} /* East Asian ideograph */, {0, 0, 0x6C6A} /* East Asian ideograph */, {0, 0, 0x6C8C} /* East Asian ideograph */, {0, 0, 0x6C90} /* East Asian ideograph */, {0, 0, 0x6C72} /* East Asian ideograph */, {0, 0, 0x6C70} /* East Asian ideograph */, {0, 0, 0x6C68} /* East Asian ideograph */, {0, 0, 0x6C96} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6C89} /* East Asian ideograph (variant of EACC 4B4676) */, {0, 0, 0x6C99} /* East Asian ideograph */, {0, 0, 0x6C7E} /* East Asian ideograph */, {0, 0, 0x6C7D} /* East Asian ideograph */, {0, 0, 0x6C92} /* East Asian ideograph */, {0, 0, 0x6C83} /* East Asian ideograph */, {0, 0, 0x6CB1} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6CF3} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page25 = { 0, marc8_31page25_dir }; /* PAGE 24 */ struct yaz_iconv_trie_dir marc8_31page24_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x690E} /* East Asian ideograph */, {0, 0, 0x68C9} /* East Asian ideograph */, {0, 0, 0x6954} /* East Asian ideograph */, {0, 0, 0x6930} /* East Asian ideograph */, {0, 0, 0x6977} /* East Asian ideograph */, {0, 0, 0x6975} /* East Asian ideograph */, {0, 0, 0x695A} /* East Asian ideograph */, {0, 0, 0x6960} /* East Asian ideograph */, {0, 0, 0x696B} /* East Asian ideograph */, {0, 0, 0x694A} /* East Asian ideograph */, {0, 0, 0x6968} /* East Asian ideograph */, {0, 0, 0x695E} /* East Asian ideograph */, {0, 0, 0x696D} /* East Asian ideograph */, {0, 0, 0x6979} /* East Asian ideograph */, {0, 0, 0x6953} /* East Asian ideograph */, {0, 0, 0x6986} /* East Asian ideograph */, {0, 0, 0x69A8} /* East Asian ideograph */, {0, 0, 0x6995} /* East Asian ideograph */, {0, 0, 0x699C} /* East Asian ideograph */, {0, 0, 0x6994} /* East Asian ideograph */, {0, 0, 0x69C1} /* East Asian ideograph */, {0, 0, 0x69B7} /* East Asian ideograph */, {0, 0, 0x69AE} /* East Asian ideograph */, {0, 0, 0x699B} /* East Asian ideograph */, {0, 0, 0x69CB} /* East Asian ideograph */, {0, 0, 0x69D3} /* East Asian ideograph */, {0, 0, 0x69BB} /* East Asian ideograph */, {0, 0, 0x69AB} /* East Asian ideograph */, {0, 0, 0x69CC} /* East Asian ideograph */, {0, 0, 0x69AD} /* East Asian ideograph */, {0, 0, 0x69D0} /* East Asian ideograph */, {0, 0, 0x69CD} /* East Asian ideograph */, {0, 0, 0x69B4} /* East Asian ideograph */, {0, 0, 0x6A1F} /* East Asian ideograph */, {0, 0, 0x69E8} /* East Asian ideograph */, {0, 0, 0x6A23} /* East Asian ideograph */, {0, 0, 0x69EA} /* East Asian ideograph */, {0, 0, 0x6A01} /* East Asian ideograph */, {0, 0, 0x6A19} /* East Asian ideograph */, {0, 0, 0x69FD} /* East Asian ideograph */, {0, 0, 0x6A1E} /* East Asian ideograph */, {0, 0, 0x6A13} /* East Asian ideograph */, {0, 0, 0x6A21} /* East Asian ideograph */, {0, 0, 0x69F3} /* East Asian ideograph */, {0, 0, 0x6A0A} /* East Asian ideograph */, {0, 0, 0x6A02} /* East Asian ideograph */, {0, 0, 0x6A05} /* East Asian ideograph */, {0, 0, 0x6A3D} /* East Asian ideograph */, {0, 0, 0x6A58} /* East Asian ideograph */, {0, 0, 0x6A59} /* East Asian ideograph */, {0, 0, 0x6A62} /* East Asian ideograph */, {0, 0, 0x6A44} /* East Asian ideograph */, {0, 0, 0x6A39} /* East Asian ideograph */, {0, 0, 0x6A6B} /* East Asian ideograph */, {0, 0, 0x6A3A} /* East Asian ideograph */, {0, 0, 0x6A38} /* East Asian ideograph */, {0, 0, 0x6A47} /* East Asian ideograph */, {0, 0, 0x6A61} /* East Asian ideograph */, {0, 0, 0x6A4B} /* East Asian ideograph */, {0, 0, 0x6A35} /* East Asian ideograph */, {0, 0, 0x6A5F} /* East Asian ideograph */, {0, 0, 0x6A80} /* East Asian ideograph */, {0, 0, 0x6A94} /* East Asian ideograph */, {0, 0, 0x6A84} /* East Asian ideograph */, {0, 0, 0x6AA2} /* East Asian ideograph */, {0, 0, 0x6A9C} /* East Asian ideograph */, {0, 0, 0x6AB8} /* East Asian ideograph */, {0, 0, 0x6AB3} /* East Asian ideograph */, {0, 0, 0x6AC3} /* East Asian ideograph */, {0, 0, 0x6ABB} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6AAC} /* East Asian ideograph */, {0, 0, 0x6AE5} /* East Asian ideograph */, {0, 0, 0x6ADA} /* East Asian ideograph */, {0, 0, 0x6ADD} /* East Asian ideograph */, {0, 0, 0x6ADB} /* East Asian ideograph */, {0, 0, 0x6AD3} /* East Asian ideograph */, {0, 0, 0x6B04} /* East Asian ideograph */, {0, 0, 0x6AFB} /* East Asian ideograph */, {0, 0, 0x6B0A} /* East Asian ideograph */, {0, 0, 0x6B16} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6B21} /* East Asian ideograph */, {0, 0, 0x6B23} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6B3E} /* East Asian ideograph */, {0, 0, 0x6B3A} /* East Asian ideograph */, {0, 0, 0x6B3D} /* East Asian ideograph */, {0, 0, 0x6B47} /* East Asian ideograph */, {0, 0, 0x6B49} /* East Asian ideograph */, {0, 0, 0x6B4C} /* East Asian ideograph */, {0, 0, 0x6B50} /* East Asian ideograph */, {0, 0, 0x6B59} /* East Asian ideograph */, {0, 0, 0x6B5F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page24 = { 0, marc8_31page24_dir }; /* PAGE 23 */ struct yaz_iconv_trie_dir marc8_31page23_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x6787} /* East Asian ideograph */, {0, 0, 0x6777} /* East Asian ideograph */, {0, 0, 0x679D} /* East Asian ideograph */, {0, 0, 0x6797} /* East Asian ideograph */, {0, 0, 0x676F} /* East Asian ideograph */, {0, 0, 0x6771} /* East Asian ideograph */, {0, 0, 0x6773} /* East Asian ideograph */, {0, 0, 0x679C} /* East Asian ideograph */, {0, 0, 0x6775} /* East Asian ideograph */, {0, 0, 0x679A} /* East Asian ideograph */, {0, 0, 0x6790} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x677E} /* East Asian ideograph */, {0, 0, 0x67D3} /* East Asian ideograph */, {0, 0, 0x67F1} /* East Asian ideograph */, {0, 0, 0x67FF} /* East Asian ideograph */, {0, 0, 0x67D4} /* East Asian ideograph */, {0, 0, 0x67C4} /* East Asian ideograph */, {0, 0, 0x67AF} /* East Asian ideograph */, {0, 0, 0x67D0} /* East Asian ideograph */, {0, 0, 0x67D1} /* East Asian ideograph */, {0, 0, 0x67EF} /* East Asian ideograph */, {0, 0, 0x67E9} /* East Asian ideograph */, {0, 0, 0x67B6} /* East Asian ideograph */, {0, 0, 0x67EC} /* East Asian ideograph */, {0, 0, 0x67E5} /* East Asian ideograph */, {0, 0, 0x67FA} /* East Asian ideograph */, {0, 0, 0x67DA} /* East Asian ideograph */, {0, 0, 0x6805} /* East Asian ideograph */, {0, 0, 0x67DE} /* East Asian ideograph */, {0, 0, 0x67B8} /* East Asian ideograph */, {0, 0, 0x67CF} /* East Asian ideograph */, {0, 0, 0x67F3} /* East Asian ideograph */, {0, 0, 0x6848} /* East Asian ideograph */, {0, 0, 0x6821} /* East Asian ideograph */, {0, 0, 0x6838} /* East Asian ideograph */, {0, 0, 0x6853} /* East Asian ideograph */, {0, 0, 0x6846} /* East Asian ideograph */, {0, 0, 0x6842} /* East Asian ideograph */, {0, 0, 0x6854} /* East Asian ideograph */, {0, 0, 0x6817} /* East Asian ideograph */, {0, 0, 0x683D} /* East Asian ideograph */, {0, 0, 0x6851} /* East Asian ideograph */, {0, 0, 0x6829} /* East Asian ideograph */, {0, 0, 0x6850} /* East Asian ideograph */, {0, 0, 0x6839} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x67F4} /* East Asian ideograph */, {0, 0, 0x6843} /* East Asian ideograph */, {0, 0, 0x6840} /* East Asian ideograph */, {0, 0, 0x682A} /* East Asian ideograph */, {0, 0, 0x6845} /* East Asian ideograph */, {0, 0, 0x683C} /* East Asian ideograph */, {0, 0, 0x6813} /* East Asian ideograph (variant of EACC 4B4456) */, {0, 0, 0x6881} /* East Asian ideograph */, {0, 0, 0x6893} /* East Asian ideograph */, {0, 0, 0x68AF} /* East Asian ideograph */, {0, 0, 0x6876} /* East Asian ideograph */, {0, 0, 0x68B0} /* East Asian ideograph */, {0, 0, 0x68A7} /* East Asian ideograph */, {0, 0, 0x6897} /* East Asian ideograph */, {0, 0, 0x68B5} /* East Asian ideograph */, {0, 0, 0x68B3} /* East Asian ideograph */, {0, 0, 0x68A2} /* East Asian ideograph */, {0, 0, 0x687F} /* East Asian ideograph */, {0, 0, 0x68B1} /* East Asian ideograph */, {0, 0, 0x689D} /* East Asian ideograph */, {0, 0, 0x68AD} /* East Asian ideograph */, {0, 0, 0x6886} /* East Asian ideograph */, {0, 0, 0x6885} /* East Asian ideograph */, {0, 0, 0x68A8} /* East Asian ideograph */, {0, 0, 0x689F} /* East Asian ideograph */, {0, 0, 0x6894} /* East Asian ideograph */, {0, 0, 0x6883} /* East Asian ideograph */, {0, 0, 0x68D5} /* East Asian ideograph */, {0, 0, 0x68FA} /* East Asian ideograph */, {0, 0, 0x68C4} /* East Asian ideograph */, {0, 0, 0x68F2} /* East Asian ideograph */, {0, 0, 0x68D2} /* East Asian ideograph */, {0, 0, 0x68E3} /* East Asian ideograph */, {0, 0, 0x68DF} /* East Asian ideograph */, {0, 0, 0x68CB} /* East Asian ideograph */, {0, 0, 0x68EE} /* East Asian ideograph */, {0, 0, 0x690D} /* East Asian ideograph */, {0, 0, 0x6905} /* East Asian ideograph */, {0, 0, 0x68E7} /* East Asian ideograph */, {0, 0, 0x68E0} /* East Asian ideograph */, {0, 0, 0x68F5} /* East Asian ideograph */, {0, 0, 0x68CD} /* East Asian ideograph */, {0, 0, 0x68D7} /* East Asian ideograph */, {0, 0, 0x68D8} /* East Asian ideograph */, {0, 0, 0x6912} /* East Asian ideograph */, {0, 0, 0x68F9} /* East Asian ideograph */, {0, 0, 0x68DA} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page23 = { 0, marc8_31page23_dir }; /* PAGE 22 */ struct yaz_iconv_trie_dir marc8_31page22_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x660E} /* East Asian ideograph */, {0, 0, 0x6613} /* East Asian ideograph */, {0, 0, 0x6602} /* East Asian ideograph */, {0, 0, 0x660F} /* East Asian ideograph */, {0, 0, 0x6625} /* East Asian ideograph */, {0, 0, 0x6627} /* East Asian ideograph */, {0, 0, 0x662F} /* East Asian ideograph */, {0, 0, 0x662D} /* East Asian ideograph */, {0, 0, 0x6620} /* East Asian ideograph */, {0, 0, 0x661F} /* East Asian ideograph */, {0, 0, 0x6628} /* East Asian ideograph */, {0, 0, 0x664F} /* East Asian ideograph */, {0, 0, 0x6642} /* East Asian ideograph */, {0, 0, 0x6652} /* East Asian ideograph */, {0, 0, 0x6649} /* East Asian ideograph */, {0, 0, 0x6643} /* East Asian ideograph */, {0, 0, 0x664C} /* East Asian ideograph */, {0, 0, 0x665D} /* East Asian ideograph */, {0, 0, 0x6664} /* East Asian ideograph */, {0, 0, 0x6668} /* East Asian ideograph */, {0, 0, 0x6666} /* East Asian ideograph */, {0, 0, 0x665A} /* East Asian ideograph */, {0, 0, 0x666F} /* East Asian ideograph */, {0, 0, 0x666E} /* East Asian ideograph */, {0, 0, 0x6674} /* East Asian ideograph (variant of EACC 4B4339) */, {0, 0, 0x6691} /* East Asian ideograph */, {0, 0, 0x6670} /* East Asian ideograph */, {0, 0, 0x6676} /* East Asian ideograph */, {0, 0, 0x667A} /* East Asian ideograph */, {0, 0, 0x6697} /* East Asian ideograph */, {0, 0, 0x6687} /* East Asian ideograph */, {0, 0, 0x6689} /* East Asian ideograph */, {0, 0, 0x6688} /* East Asian ideograph */, {0, 0, 0x6696} /* East Asian ideograph */, {0, 0, 0x66A2} /* East Asian ideograph */, {0, 0, 0x66AB} /* East Asian ideograph */, {0, 0, 0x66B4} /* East Asian ideograph */, {0, 0, 0x66AE} /* East Asian ideograph */, {0, 0, 0x66C1} /* East Asian ideograph */, {0, 0, 0x66C9} /* East Asian ideograph */, {0, 0, 0x66C6} /* East Asian ideograph */, {0, 0, 0x66B9} /* East Asian ideograph */, {0, 0, 0x66D6} /* East Asian ideograph */, {0, 0, 0x66D9} /* East Asian ideograph */, {0, 0, 0x66E0} /* East Asian ideograph */, {0, 0, 0x66DD} /* East Asian ideograph */, {0, 0, 0x66E6} /* East Asian ideograph */, {0, 0, 0x66F0} /* East Asian ideograph */, {0, 0, 0x66F2} /* East Asian ideograph */, {0, 0, 0x66F3} /* East Asian ideograph */, {0, 0, 0x66F4} /* East Asian ideograph */, {0, 0, 0x66F7} /* East Asian ideograph */, {0, 0, 0x66F8} /* East Asian ideograph */, {0, 0, 0x66F9} /* East Asian ideograph */, {0, 0, 0x52D7} /* East Asian ideograph */, {0, 0, 0x66FE} /* East Asian ideograph */, {0, 0, 0x66FF} /* East Asian ideograph */, {0, 0, 0x6703} /* East Asian ideograph */, {0, 0, 0x6708} /* East Asian ideograph */, {0, 0, 0x6709} /* East Asian ideograph */, {0, 0, 0x670D} /* East Asian ideograph */, {0, 0, 0x670B} /* East Asian ideograph */, {0, 0, 0x6717} /* East Asian ideograph */, {0, 0, 0x6715} /* East Asian ideograph */, {0, 0, 0x6714} /* East Asian ideograph */, {0, 0, 0x671B} /* East Asian ideograph */, {0, 0, 0x671D} /* East Asian ideograph */, {0, 0, 0x671F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6727} /* East Asian ideograph */, {0, 0, 0x6728} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x672C} /* East Asian ideograph */, {0, 0, 0x672B} /* East Asian ideograph */, {0, 0, 0x672A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x673D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6731} /* East Asian ideograph */, {0, 0, 0x6735} /* East Asian ideograph */, {0, 0, 0x675E} /* East Asian ideograph */, {0, 0, 0x6751} /* East Asian ideograph */, {0, 0, 0x674E} /* East Asian ideograph */, {0, 0, 0x675C} /* East Asian ideograph */, {0, 0, 0x6750} /* East Asian ideograph */, {0, 0, 0x6756} /* East Asian ideograph */, {0, 0, 0x675F} /* East Asian ideograph */, {0, 0, 0x674F} /* East Asian ideograph */, {0, 0, 0x6749} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x676D} /* East Asian ideograph */, {0, 0, 0x678B} /* East Asian ideograph */, {0, 0, 0x6795} /* East Asian ideograph */, {0, 0, 0x6789} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page22 = { 0, marc8_31page22_dir }; /* PAGE 21 */ struct yaz_iconv_trie_dir marc8_31page21_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x64CE} /* East Asian ideograph */, {0, 0, 0x64D4} /* East Asian ideograph */, {0, 0, 0x64D2} /* East Asian ideograph */, {0, 0, 0x64BF} /* East Asian ideograph */, {0, 0, 0x64E0} /* East Asian ideograph */, {0, 0, 0x64F0} /* East Asian ideograph */, {0, 0, 0x64E6} /* East Asian ideograph */, {0, 0, 0x64EC} /* East Asian ideograph */, {0, 0, 0x64F1} /* East Asian ideograph */, {0, 0, 0x64F4} /* East Asian ideograph */, {0, 0, 0x64F2} /* East Asian ideograph */, {0, 0, 0x6506} /* East Asian ideograph */, {0, 0, 0x6500} /* East Asian ideograph */, {0, 0, 0x64FE} /* East Asian ideograph */, {0, 0, 0x64FB} /* East Asian ideograph */, {0, 0, 0x64FA} /* East Asian ideograph */, {0, 0, 0x650F} /* East Asian ideograph */, {0, 0, 0x6518} /* East Asian ideograph */, {0, 0, 0x6514} /* East Asian ideograph */, {0, 0, 0x6519} /* East Asian ideograph */, {0, 0, 0x651D} /* East Asian ideograph */, {0, 0, 0x651C} /* East Asian ideograph */, {0, 0, 0x6523} /* East Asian ideograph */, {0, 0, 0x6524} /* East Asian ideograph */, {0, 0, 0x652B} /* East Asian ideograph */, {0, 0, 0x652A} /* East Asian ideograph */, {0, 0, 0x652C} /* East Asian ideograph */, {0, 0, 0x652F} /* East Asian ideograph */, {0, 0, 0x6536} /* East Asian ideograph */, {0, 0, 0x6539} /* East Asian ideograph */, {0, 0, 0x653B} /* East Asian ideograph */, {0, 0, 0x653E} /* East Asian ideograph */, {0, 0, 0x653F} /* East Asian ideograph */, {0, 0, 0x6545} /* East Asian ideograph */, {0, 0, 0x6548} /* East Asian ideograph */, {0, 0, 0x654E} /* East Asian ideograph */, {0, 0, 0x6556} /* East Asian ideograph */, {0, 0, 0x6551} /* East Asian ideograph */, {0, 0, 0x6557} /* East Asian ideograph */, {0, 0, 0x655D} /* East Asian ideograph */, {0, 0, 0x6558} /* East Asian ideograph */, {0, 0, 0x654F} /* East Asian ideograph */, {0, 0, 0x6566} /* East Asian ideograph */, {0, 0, 0x6562} /* East Asian ideograph */, {0, 0, 0x6563} /* East Asian ideograph */, {0, 0, 0x655E} /* East Asian ideograph */, {0, 0, 0x5553} /* East Asian ideograph */, {0, 0, 0x656C} /* East Asian ideograph */, {0, 0, 0x6572} /* East Asian ideograph */, {0, 0, 0x6575} /* East Asian ideograph */, {0, 0, 0x6577} /* East Asian ideograph */, {0, 0, 0x6578} /* East Asian ideograph */, {0, 0, 0x6574} /* East Asian ideograph */, {0, 0, 0x6582} /* East Asian ideograph */, {0, 0, 0x6583} /* East Asian ideograph */, {0, 0, 0x6587} /* East Asian ideograph */, {0, 0, 0x6591} /* East Asian ideograph */, {0, 0, 0x6590} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6599} /* East Asian ideograph */, {0, 0, 0x659C} /* East Asian ideograph */, {0, 0, 0x659F} /* East Asian ideograph */, {0, 0, 0x65A1} /* East Asian ideograph */, {0, 0, 0x65A4} /* East Asian ideograph */, {0, 0, 0x65A5} /* East Asian ideograph */, {0, 0, 0x65A7} /* East Asian ideograph */, {0, 0, 0x65AC} /* East Asian ideograph */, {0, 0, 0x65AF} /* East Asian ideograph */, {0, 0, 0x65B0} /* East Asian ideograph */, {0, 0, 0x65B7} /* East Asian ideograph */, {0, 0, 0x65B9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x65BD} /* East Asian ideograph */, {0, 0, 0x65C1} /* East Asian ideograph */, {0, 0, 0x65C5} /* East Asian ideograph */, {0, 0, 0x65CE} /* East Asian ideograph */, {0, 0, 0x65CB} /* East Asian ideograph */, {0, 0, 0x65CC} /* East Asian ideograph */, {0, 0, 0x65CF} /* East Asian ideograph */, {0, 0, 0x65D7} /* East Asian ideograph */, {0, 0, 0x65D6} /* East Asian ideograph */, {0, 0, 0x65E2} /* East Asian ideograph */, {0, 0, 0x65E5} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x65E9} /* East Asian ideograph */, {0, 0, 0x65EC} /* East Asian ideograph */, {0, 0, 0x65ED} /* East Asian ideograph */, {0, 0, 0x65E8} /* East Asian ideograph */, {0, 0, 0x65F1} /* East Asian ideograph */, {0, 0, 0x65FA} /* East Asian ideograph */, {0, 0, 0x6606} /* East Asian ideograph */, {0, 0, 0x6614} /* East Asian ideograph */, {0, 0, 0x660C} /* East Asian ideograph */, {0, 0, 0x6600} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page21 = { 0, marc8_31page21_dir }; /* PAGE 20 */ struct yaz_iconv_trie_dir marc8_31page20_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x6367} /* East Asian ideograph */, {0, 0, 0x6398} /* East Asian ideograph */, {0, 0, 0x639B} /* East Asian ideograph */, {0, 0, 0x63AA} /* East Asian ideograph */, {0, 0, 0x6371} /* East Asian ideograph */, {0, 0, 0x63A9} /* East Asian ideograph */, {0, 0, 0x638C} /* East Asian ideograph */, {0, 0, 0x6389} /* East Asian ideograph */, {0, 0, 0x63A2} /* East Asian ideograph */, {0, 0, 0x6399} /* East Asian ideograph */, {0, 0, 0x63A1} /* East Asian ideograph */, {0, 0, 0x6388} /* East Asian ideograph */, {0, 0, 0x63AC} /* East Asian ideograph */, {0, 0, 0x633D} /* East Asian ideograph */, {0, 0, 0x6392} /* East Asian ideograph */, {0, 0, 0x63A3} /* East Asian ideograph */, {0, 0, 0x6376} /* East Asian ideograph */, {0, 0, 0x638F} /* East Asian ideograph */, {0, 0, 0x63A8} /* East Asian ideograph */, {0, 0, 0x637B} /* East Asian ideograph */, {0, 0, 0x6368} /* East Asian ideograph (variant of EACC 4B4135) */, {0, 0, 0x6384} /* East Asian ideograph */, {0, 0, 0x6380} /* East Asian ideograph */, {0, 0, 0x63C6} /* East Asian ideograph */, {0, 0, 0x63C9} /* East Asian ideograph */, {0, 0, 0x63CD} /* East Asian ideograph */, {0, 0, 0x63E1} /* East Asian ideograph */, {0, 0, 0x63C0} /* East Asian ideograph */, {0, 0, 0x63E9} /* East Asian ideograph */, {0, 0, 0x63D0} /* East Asian ideograph */, {0, 0, 0x63DA} /* East Asian ideograph */, {0, 0, 0x63D6} /* East Asian ideograph */, {0, 0, 0x63ED} /* East Asian ideograph */, {0, 0, 0x63EE} /* East Asian ideograph */, {0, 0, 0x63CF} /* East Asian ideograph */, {0, 0, 0x63E3} /* East Asian ideograph */, {0, 0, 0x63F4} /* East Asian ideograph */, {0, 0, 0x63DB} /* East Asian ideograph (variant of EACC 454146) */, {0, 0, 0x63D2} /* East Asian ideograph */, {0, 0, 0x63EA} /* East Asian ideograph */, {0, 0, 0x641E} /* East Asian ideograph */, {0, 0, 0x642A} /* East Asian ideograph */, {0, 0, 0x643E} /* East Asian ideograph */, {0, 0, 0x6413} /* East Asian ideograph */, {0, 0, 0x640F} /* East Asian ideograph */, {0, 0, 0x6414} /* East Asian ideograph */, {0, 0, 0x640D} /* East Asian ideograph */, {0, 0, 0x642D} /* East Asian ideograph */, {0, 0, 0x643D} /* East Asian ideograph */, {0, 0, 0x6416} /* East Asian ideograph */, {0, 0, 0x6417} /* East Asian ideograph */, {0, 0, 0x641C} /* East Asian ideograph */, {0, 0, 0x6436} /* East Asian ideograph */, {0, 0, 0x642C} /* East Asian ideograph */, {0, 0, 0x6458} /* East Asian ideograph */, {0, 0, 0x6469} /* East Asian ideograph */, {0, 0, 0x6454} /* East Asian ideograph */, {0, 0, 0x6452} /* East Asian ideograph */, {0, 0, 0x646F} /* East Asian ideograph */, {0, 0, 0x6478} /* East Asian ideograph */, {0, 0, 0x6479} /* East Asian ideograph */, {0, 0, 0x647A} /* East Asian ideograph */, {0, 0, 0x645F} /* East Asian ideograph */, {0, 0, 0x6451} /* East Asian ideograph */, {0, 0, 0x6467} /* East Asian ideograph */, {0, 0, 0x649E} /* East Asian ideograph */, {0, 0, 0x64A4} /* East Asian ideograph */, {0, 0, 0x6487} /* East Asian ideograph */, {0, 0, 0x6488} /* East Asian ideograph */, {0, 0, 0x64A5} /* East Asian ideograph */, {0, 0, 0x64B0} /* East Asian ideograph */, {0, 0, 0x6493} /* East Asian ideograph */, {0, 0, 0x6495} /* East Asian ideograph */, {0, 0, 0x6492} /* East Asian ideograph */, {0, 0, 0x64A9} /* East Asian ideograph */, {0, 0, 0x6491} /* East Asian ideograph */, {0, 0, 0x64AE} /* East Asian ideograph */, {0, 0, 0x64B2} /* East Asian ideograph */, {0, 0, 0x64AD} /* East Asian ideograph */, {0, 0, 0x649A} /* East Asian ideograph */, {0, 0, 0x64AB} /* East Asian ideograph */, {0, 0, 0x64AC} /* East Asian ideograph */, {0, 0, 0x64C5} /* East Asian ideograph */, {0, 0, 0x64C1} /* East Asian ideograph */, {0, 0, 0x64D8} /* East Asian ideograph */, {0, 0, 0x64CA} /* East Asian ideograph */, {0, 0, 0x64BB} /* East Asian ideograph */, {0, 0, 0x64C2} /* East Asian ideograph */, {0, 0, 0x64BC} /* East Asian ideograph */, {0, 0, 0x64CB} /* East Asian ideograph */, {0, 0, 0x64CD} /* East Asian ideograph */, {0, 0, 0x64DA} /* East Asian ideograph */, {0, 0, 0x64C4} /* East Asian ideograph */, {0, 0, 0x64C7} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page20 = { 0, marc8_31page20_dir }; /* PAGE 19 */ struct yaz_iconv_trie_dir marc8_31page19_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x6252} /* East Asian ideograph */, {0, 0, 0x625B} /* East Asian ideograph */, {0, 0, 0x6263} /* East Asian ideograph */, {0, 0, 0x6258} /* East Asian ideograph */, {0, 0, 0x6296} /* East Asian ideograph */, {0, 0, 0x6297} /* East Asian ideograph */, {0, 0, 0x6292} /* East Asian ideograph */, {0, 0, 0x6276} /* East Asian ideograph */, {0, 0, 0x6289} /* East Asian ideograph */, {0, 0, 0x627F} /* East Asian ideograph */, {0, 0, 0x6279} /* East Asian ideograph */, {0, 0, 0x6280} /* East Asian ideograph */, {0, 0, 0x628A} /* East Asian ideograph */, {0, 0, 0x626D} /* East Asian ideograph */, {0, 0, 0x627C} /* East Asian ideograph */, {0, 0, 0x627E} /* East Asian ideograph */, {0, 0, 0x626F} /* East Asian ideograph */, {0, 0, 0x6284} /* East Asian ideograph */, {0, 0, 0x6295} /* East Asian ideograph */, {0, 0, 0x6291} /* East Asian ideograph */, {0, 0, 0x6298} /* East Asian ideograph */, {0, 0, 0x626E} /* East Asian ideograph */, {0, 0, 0x6273} /* East Asian ideograph */, {0, 0, 0x6293} /* East Asian ideograph */, {0, 0, 0x62C9} /* East Asian ideograph */, {0, 0, 0x62C4} /* East Asian ideograph */, {0, 0, 0x62CC} /* East Asian ideograph */, {0, 0, 0x62A8} /* East Asian ideograph */, {0, 0, 0x62DC} /* East Asian ideograph */, {0, 0, 0x62BF} /* East Asian ideograph */, {0, 0, 0x62C2} /* East Asian ideograph */, {0, 0, 0x62B9} /* East Asian ideograph */, {0, 0, 0x62D2} /* East Asian ideograph */, {0, 0, 0x62D3} /* East Asian ideograph */, {0, 0, 0x62DB} /* East Asian ideograph */, {0, 0, 0x62AB} /* East Asian ideograph */, {0, 0, 0x62CB} /* East Asian ideograph */, {0, 0, 0x62D4} /* East Asian ideograph */, {0, 0, 0x62BD} /* East Asian ideograph */, {0, 0, 0x62BC} /* East Asian ideograph */, {0, 0, 0x62D0} /* East Asian ideograph (variant of EACC 4B4049) */, {0, 0, 0x62C8} /* East Asian ideograph */, {0, 0, 0x62D9} /* East Asian ideograph */, {0, 0, 0x62DA} /* East Asian ideograph */, {0, 0, 0x62AC} /* East Asian ideograph */, {0, 0, 0x62C7} /* East Asian ideograph */, {0, 0, 0x62B1} /* East Asian ideograph */, {0, 0, 0x62D6} /* East Asian ideograph */, {0, 0, 0x62D8} /* East Asian ideograph */, {0, 0, 0x62CD} /* East Asian ideograph */, {0, 0, 0x62B5} /* East Asian ideograph */, {0, 0, 0x62CE} /* East Asian ideograph */, {0, 0, 0x62D7} /* East Asian ideograph */, {0, 0, 0x62C6} /* East Asian ideograph */, {0, 0, 0x6309} /* East Asian ideograph */, {0, 0, 0x6316} /* East Asian ideograph */, {0, 0, 0x62FC} /* East Asian ideograph */, {0, 0, 0x62F3} /* East Asian ideograph */, {0, 0, 0x6308} /* East Asian ideograph */, {0, 0, 0x62ED} /* East Asian ideograph */, {0, 0, 0x6301} /* East Asian ideograph */, {0, 0, 0x62EE} /* East Asian ideograph */, {0, 0, 0x62EF} /* East Asian ideograph */, {0, 0, 0x62F7} /* East Asian ideograph */, {0, 0, 0x6307} /* East Asian ideograph */, {0, 0, 0x62F1} /* East Asian ideograph */, {0, 0, 0x62FD} /* East Asian ideograph */, {0, 0, 0x6311} /* East Asian ideograph */, {0, 0, 0x62EC} /* East Asian ideograph */, {0, 0, 0x62F4} /* East Asian ideograph (variant of EACC 4B4066) */, {0, 0, 0x62FF} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6342} /* East Asian ideograph */, {0, 0, 0x632A} /* East Asian ideograph */, {0, 0, 0x6355} /* East Asian ideograph */, {0, 0, 0x633E} /* East Asian ideograph */, {0, 0, 0x632F} /* East Asian ideograph */, {0, 0, 0x634E} /* East Asian ideograph */, {0, 0, 0x634F} /* East Asian ideograph */, {0, 0, 0x6350} /* East Asian ideograph */, {0, 0, 0x6349} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x632B} /* East Asian ideograph */, {0, 0, 0x6328} /* East Asian ideograph */, {0, 0, 0x633A} /* East Asian ideograph */, {0, 0, 0x63A5} /* East Asian ideograph */, {0, 0, 0x6369} /* East Asian ideograph */, {0, 0, 0x63A0} /* East Asian ideograph */, {0, 0, 0x6396} /* East Asian ideograph */, {0, 0, 0x63A7} /* East Asian ideograph */, {0, 0, 0x6372} /* East Asian ideograph */, {0, 0, 0x6377} /* East Asian ideograph */, {0, 0, 0x6383} /* East Asian ideograph */, {0, 0, 0x636B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page19 = { 0, marc8_31page19_dir }; /* PAGE 18 */ struct yaz_iconv_trie_dir marc8_31page18_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x6148} /* East Asian ideograph */, {0, 0, 0x6168} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x613C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x614C} /* East Asian ideograph */, {0, 0, 0x614D} /* East Asian ideograph */, {0, 0, 0x614B} /* East Asian ideograph */, {0, 0, 0x613E} /* East Asian ideograph */, {0, 0, 0x6127} /* East Asian ideograph */, {0, 0, 0x6134} /* East Asian ideograph */, {0, 0, 0x6147} /* East Asian ideograph */, {0, 0, 0x6177} /* East Asian ideograph */, {0, 0, 0x6176} /* East Asian ideograph */, {0, 0, 0x6167} /* East Asian ideograph */, {0, 0, 0x6170} /* East Asian ideograph */, {0, 0, 0x615A} /* East Asian ideograph */, {0, 0, 0x615D} /* East Asian ideograph */, {0, 0, 0x6182} /* East Asian ideograph */, {0, 0, 0x617C} /* East Asian ideograph */, {0, 0, 0x6162} /* East Asian ideograph */, {0, 0, 0x616E} /* East Asian ideograph */, {0, 0, 0x6155} /* East Asian ideograph */, {0, 0, 0x6158} /* East Asian ideograph */, {0, 0, 0x6163} /* East Asian ideograph */, {0, 0, 0x615F} /* East Asian ideograph */, {0, 0, 0x616B} /* East Asian ideograph */, {0, 0, 0x617E} /* East Asian ideograph */, {0, 0, 0x61A7} /* East Asian ideograph */, {0, 0, 0x61B2} /* East Asian ideograph */, {0, 0, 0x6191} /* East Asian ideograph */, {0, 0, 0x618E} /* East Asian ideograph */, {0, 0, 0x61AB} /* East Asian ideograph */, {0, 0, 0x61A4} /* East Asian ideograph */, {0, 0, 0x61AC} /* East Asian ideograph */, {0, 0, 0x619A} /* East Asian ideograph */, {0, 0, 0x61A9} /* East Asian ideograph */, {0, 0, 0x6194} /* East Asian ideograph */, {0, 0, 0x618A} /* East Asian ideograph */, {0, 0, 0x61B6} /* East Asian ideograph */, {0, 0, 0x61CD} /* East Asian ideograph */, {0, 0, 0x61C9} /* East Asian ideograph */, {0, 0, 0x6190} /* East Asian ideograph */, {0, 0, 0x61BE} /* East Asian ideograph */, {0, 0, 0x61C2} /* East Asian ideograph */, {0, 0, 0x61C7} /* East Asian ideograph */, {0, 0, 0x61C8} /* East Asian ideograph */, {0, 0, 0x61CA} /* East Asian ideograph */, {0, 0, 0x61E3} /* East Asian ideograph */, {0, 0, 0x61E6} /* East Asian ideograph */, {0, 0, 0x61F2} /* East Asian ideograph (variant of EACC 4B3F53) */, {0, 0, 0x61F7} /* East Asian ideograph */, {0, 0, 0x61F6} /* East Asian ideograph */, {0, 0, 0x61F8} /* East Asian ideograph */, {0, 0, 0x61F5} /* East Asian ideograph */, {0, 0, 0x61FA} /* East Asian ideograph */, {0, 0, 0x61FE} /* East Asian ideograph */, {0, 0, 0x61FF} /* East Asian ideograph */, {0, 0, 0x61FC} /* East Asian ideograph */, {0, 0, 0x6200} /* East Asian ideograph */, {0, 0, 0x6208} /* East Asian ideograph */, {0, 0, 0x620A} /* East Asian ideograph */, {0, 0, 0x620E} /* East Asian ideograph */, {0, 0, 0x620D} /* East Asian ideograph */, {0, 0, 0x620C} /* East Asian ideograph */, {0, 0, 0x6210} /* East Asian ideograph */, {0, 0, 0x6212} /* East Asian ideograph */, {0, 0, 0x6211} /* East Asian ideograph */, {0, 0, 0x6216} /* East Asian ideograph */, {0, 0, 0x6215} /* East Asian ideograph */, {0, 0, 0x621B} /* East Asian ideograph */, {0, 0, 0x621A} /* East Asian ideograph */, {0, 0, 0x621F} /* East Asian ideograph */, {0, 0, 0x6221} /* East Asian ideograph */, {0, 0, 0x6222} /* East Asian ideograph */, {0, 0, 0x622A} /* East Asian ideograph */, {0, 0, 0x622E} /* East Asian ideograph */, {0, 0, 0x6230} /* East Asian ideograph */, {0, 0, 0x6232} /* East Asian ideograph */, {0, 0, 0x6234} /* East Asian ideograph */, {0, 0, 0x6233} /* East Asian ideograph */, {0, 0, 0x6236} /* East Asian ideograph */, {0, 0, 0x623F} /* East Asian ideograph */, {0, 0, 0x623E} /* East Asian ideograph */, {0, 0, 0x6240} /* East Asian ideograph */, {0, 0, 0x6241} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x6248} /* East Asian ideograph */, {0, 0, 0x6249} /* East Asian ideograph */, {0, 0, 0x624B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x6253} /* East Asian ideograph */, {0, 0, 0x6254} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page18 = { 0, marc8_31page18_dir }; /* PAGE 17 */ struct yaz_iconv_trie_dir marc8_31page17_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5FCD} /* East Asian ideograph */, {0, 0, 0x5FEB} /* East Asian ideograph */, {0, 0, 0x5FE0} /* East Asian ideograph */, {0, 0, 0x5FF1} /* East Asian ideograph */, {0, 0, 0x5FFD} /* East Asian ideograph */, {0, 0, 0x5FDD} /* East Asian ideograph */, {0, 0, 0x5FF5} /* East Asian ideograph */, {0, 0, 0x5FFF} /* East Asian ideograph */, {0, 0, 0x6014} /* East Asian ideograph */, {0, 0, 0x6035} /* East Asian ideograph (variant of EACC 4B3E2A) */, {0, 0, 0x602A} /* East Asian ideograph */, {0, 0, 0x602F} /* East Asian ideograph */, {0, 0, 0x6016} /* East Asian ideograph */, {0, 0, 0x601D} /* East Asian ideograph */, {0, 0, 0x600F} /* East Asian ideograph */, {0, 0, 0x6021} /* East Asian ideograph */, {0, 0, 0x6020} /* East Asian ideograph */, {0, 0, 0x6028} /* East Asian ideograph */, {0, 0, 0x6025} /* East Asian ideograph */, {0, 0, 0x6027} /* East Asian ideograph */, {0, 0, 0x600E} /* East Asian ideograph */, {0, 0, 0x6015} /* East Asian ideograph */, {0, 0, 0x6012} /* East Asian ideograph */, {0, 0, 0x6059} /* East Asian ideograph */, {0, 0, 0x6063} /* East Asian ideograph */, {0, 0, 0x6068} /* East Asian ideograph */, {0, 0, 0x6043} /* East Asian ideograph */, {0, 0, 0x6065} /* East Asian ideograph */, {0, 0, 0x6050} /* East Asian ideograph */, {0, 0, 0x606D} /* East Asian ideograph */, {0, 0, 0x6062} /* East Asian ideograph */, {0, 0, 0x6046} /* East Asian ideograph (variant of EACC 4B3E40) */, {0, 0, 0x604D} /* East Asian ideograph */, {0, 0, 0x606B} /* East Asian ideograph */, {0, 0, 0x6069} /* East Asian ideograph */, {0, 0, 0x606C} /* East Asian ideograph */, {0, 0, 0x606F} /* East Asian ideograph */, {0, 0, 0x606A} /* East Asian ideograph */, {0, 0, 0x6064} /* East Asian ideograph */, {0, 0, 0x6070} /* East Asian ideograph */, {0, 0, 0x6055} /* East Asian ideograph */, {0, 0, 0x608C} /* East Asian ideograph */, {0, 0, 0x60A6} /* East Asian ideograph */, {0, 0, 0x607F} /* East Asian ideograph */, {0, 0, 0x609F} /* East Asian ideograph */, {0, 0, 0x609A} /* East Asian ideograph */, {0, 0, 0x6096} /* East Asian ideograph */, {0, 0, 0x6084} /* East Asian ideograph */, {0, 0, 0x608D} /* East Asian ideograph */, {0, 0, 0x60A3} /* East Asian ideograph */, {0, 0, 0x6089} /* East Asian ideograph */, {0, 0, 0x6094} /* East Asian ideograph */, {0, 0, 0x60A0} /* East Asian ideograph */, {0, 0, 0x60A8} /* East Asian ideograph */, {0, 0, 0x60B4} /* East Asian ideograph */, {0, 0, 0x60E6} /* East Asian ideograph */, {0, 0, 0x60CB} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x60C5} /* East Asian ideograph (variant of EACC 4B3E5B) */, {0, 0, 0x60B6} /* East Asian ideograph */, {0, 0, 0x60D1} /* East Asian ideograph */, {0, 0, 0x60B5} /* East Asian ideograph */, {0, 0, 0x60BB} /* East Asian ideograph */, {0, 0, 0x60E0} /* East Asian ideograph */, {0, 0, 0x60E1} /* East Asian ideograph */, {0, 0, 0x60DC} /* East Asian ideograph */, {0, 0, 0x60D8} /* East Asian ideograph */, {0, 0, 0x60D5} /* East Asian ideograph */, {0, 0, 0x60BC} /* East Asian ideograph */, {0, 0, 0x60B2} /* East Asian ideograph */, {0, 0, 0x60C6} /* East Asian ideograph */, {0, 0, 0x60B8} /* East Asian ideograph */, {0, 0, 0x60DA} /* East Asian ideograph */, {0, 0, 0x60DF} /* East Asian ideograph */, {0, 0, 0x610F} /* East Asian ideograph */, {0, 0, 0x611C} /* East Asian ideograph */, {0, 0, 0x60F3} /* East Asian ideograph */, {0, 0, 0x611F} /* East Asian ideograph */, {0, 0, 0x60F0} /* East Asian ideograph */, {0, 0, 0x60FB} /* East Asian ideograph */, {0, 0, 0x60FA} /* East Asian ideograph */, {0, 0, 0x611A} /* East Asian ideograph */, {0, 0, 0x6115} /* East Asian ideograph */, {0, 0, 0x60F9} /* East Asian ideograph */, {0, 0, 0x6123} /* East Asian ideograph */, {0, 0, 0x60F4} /* East Asian ideograph */, {0, 0, 0x611B} /* East Asian ideograph */, {0, 0, 0x610E} /* East Asian ideograph */, {0, 0, 0x6100} /* East Asian ideograph */, {0, 0, 0x6101} /* East Asian ideograph */, {0, 0, 0x60F6} /* East Asian ideograph */, {0, 0, 0x6109} /* East Asian ideograph */, {0, 0, 0x6108} /* East Asian ideograph */, {0, 0, 0x60F1} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page17 = { 0, marc8_31page17_dir }; /* PAGE 16 */ struct yaz_iconv_trie_dir marc8_31page16_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5EBE} /* East Asian ideograph */, {0, 0, 0x5ECA} /* East Asian ideograph */, {0, 0, 0x5EC9} /* East Asian ideograph */, {0, 0, 0x5EC8} /* East Asian ideograph */, {0, 0, 0x5ED3} /* East Asian ideograph */, {0, 0, 0x5ED6} /* East Asian ideograph */, {0, 0, 0x5EE2} /* East Asian ideograph */, {0, 0, 0x5EDA} /* East Asian ideograph */, {0, 0, 0x5EDD} /* East Asian ideograph */, {0, 0, 0x5EE3} /* East Asian ideograph (variant of EACC 4B3D2A) */, {0, 0, 0x5EDF} /* East Asian ideograph */, {0, 0, 0x5EE0} /* East Asian ideograph */, {0, 0, 0x9F90} /* East Asian ideograph */, {0, 0, 0x5EEC} /* East Asian ideograph */, {0, 0, 0x5EF3} /* East Asian ideograph */, {0, 0, 0x5EF7} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5EF6} /* East Asian ideograph */, {0, 0, 0x5EFA} /* East Asian ideograph */, {0, 0, 0x5EFF} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5F04} /* East Asian ideograph */, {0, 0, 0x5F08} /* East Asian ideograph */, {0, 0, 0x5F0A} /* East Asian ideograph */, {0, 0, 0x5F0F} /* East Asian ideograph */, {0, 0, 0x5F12} /* East Asian ideograph */, {0, 0, 0x5F13} /* East Asian ideograph */, {0, 0, 0x5F15} /* East Asian ideograph */, {0, 0, 0x5F14} /* East Asian ideograph */, {0, 0, 0x5F18} /* East Asian ideograph */, {0, 0, 0x5F17} /* East Asian ideograph */, {0, 0, 0x5F1B} /* East Asian ideograph */, {0, 0, 0x5F1F} /* East Asian ideograph */, {0, 0, 0x5F26} /* East Asian ideograph */, {0, 0, 0x5F27} /* East Asian ideograph */, {0, 0, 0x5F29} /* East Asian ideograph */, {0, 0, 0x5F2D} /* East Asian ideograph */, {0, 0, 0x5F31} /* East Asian ideograph */, {0, 0, 0x5F35} /* East Asian ideograph */, {0, 0, 0x5F37} /* East Asian ideograph */, {0, 0, 0x5F3C} /* East Asian ideograph */, {0, 0, 0x5F46} /* East Asian ideograph */, {0, 0, 0x5F48} /* East Asian ideograph */, {0, 0, 0x5F4C} /* East Asian ideograph */, {0, 0, 0x5F4E} /* East Asian ideograph */, {0, 0, 0x5F57} /* East Asian ideograph */, {0, 0, 0x5F59} /* East Asian ideograph */, {0, 0, 0x5F5D} /* East Asian ideograph */, {0, 0, 0x5F62} /* East Asian ideograph */, {0, 0, 0x5F64} /* East Asian ideograph */, {0, 0, 0x5F65} /* East Asian ideograph */, {0, 0, 0x5F6C} /* East Asian ideograph */, {0, 0, 0x5F69} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5F6D} /* East Asian ideograph */, {0, 0, 0x5F70} /* East Asian ideograph */, {0, 0, 0x5F71} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5F79} /* East Asian ideograph */, {0, 0, 0x5F80} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5F7F} /* East Asian ideograph */, {0, 0, 0x5F7C} /* East Asian ideograph */, {0, 0, 0x5F85} /* East Asian ideograph */, {0, 0, 0x5F88} /* East Asian ideograph */, {0, 0, 0x5F8B} /* East Asian ideograph */, {0, 0, 0x5F8A} /* East Asian ideograph */, {0, 0, 0x5F87} /* East Asian ideograph */, {0, 0, 0x5F8C} /* East Asian ideograph */, {0, 0, 0x5F92} /* East Asian ideograph */, {0, 0, 0x5F91} /* East Asian ideograph */, {0, 0, 0x5F90} /* East Asian ideograph */, {0, 0, 0x5F98} /* East Asian ideograph */, {0, 0, 0x5F97} /* East Asian ideograph */, {0, 0, 0x5F99} /* East Asian ideograph */, {0, 0, 0x5F9E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5FA9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5FAA} /* East Asian ideograph */, {0, 0, 0x5FAC} /* East Asian ideograph */, {0, 0, 0x5FAE} /* East Asian ideograph */, {0, 0, 0x5FB9} /* East Asian ideograph */, {0, 0, 0x5FB7} /* East Asian ideograph */, {0, 0, 0x5FB5} /* East Asian ideograph */, {0, 0, 0x5FBD} /* East Asian ideograph */, {0, 0, 0x5FC3} /* East Asian ideograph */, {0, 0, 0x5FC5} /* East Asian ideograph */, {0, 0, 0x5FD9} /* East Asian ideograph */, {0, 0, 0x5FD8} /* East Asian ideograph */, {0, 0, 0x5FCC} /* East Asian ideograph */, {0, 0, 0x5FD6} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page16 = { 0, marc8_31page16_dir }; /* PAGE 15 */ struct yaz_iconv_trie_dir marc8_31page15_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5D0E} /* East Asian ideograph */, {0, 0, 0x5D11} /* East Asian ideograph */, {0, 0, 0x5D22} /* East Asian ideograph */, {0, 0, 0x5D29} /* East Asian ideograph */, {0, 0, 0x5D14} /* East Asian ideograph */, {0, 0, 0x5D19} /* East Asian ideograph */, {0, 0, 0x5D4C} /* East Asian ideograph */, {0, 0, 0x5D50} /* East Asian ideograph */, {0, 0, 0x5D69} /* East Asian ideograph */, {0, 0, 0x5D84} /* East Asian ideograph */, {0, 0, 0x5D87} /* East Asian ideograph */, {0, 0, 0x5D9D} /* East Asian ideograph */, {0, 0, 0x5DBC} /* East Asian ideograph */, {0, 0, 0x5DBD} /* East Asian ideograph */, {0, 0, 0x5DBA} /* East Asian ideograph (variant of EACC 4B3C2F) */, {0, 0, 0x5DCD} /* East Asian ideograph */, {0, 0, 0x5DD2} /* East Asian ideograph */, {0, 0, 0x5DD4} /* East Asian ideograph */, {0, 0, 0x5DD6} /* East Asian ideograph */, {0, 0, 0x5DDD} /* East Asian ideograph */, {0, 0, 0x5DDE} /* East Asian ideograph */, {0, 0, 0x5DE2} /* East Asian ideograph */, {0, 0, 0x5DE5} /* East Asian ideograph */, {0, 0, 0x5DE8} /* East Asian ideograph */, {0, 0, 0x5DE7} /* East Asian ideograph */, {0, 0, 0x5DE6} /* East Asian ideograph */, {0, 0, 0x5DEB} /* East Asian ideograph */, {0, 0, 0x5DEE} /* East Asian ideograph */, {0, 0, 0x5DF1} /* East Asian ideograph */, {0, 0, 0x5DF2} /* East Asian ideograph */, {0, 0, 0x5DF3} /* East Asian ideograph */, {0, 0, 0x5DF4} /* East Asian ideograph */, {0, 0, 0x5DF7} /* East Asian ideograph */, {0, 0, 0x5DFD} /* East Asian ideograph */, {0, 0, 0x5DFE} /* East Asian ideograph */, {0, 0, 0x5E02} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5E06} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5E1A} /* East Asian ideograph */, {0, 0, 0x5E16} /* East Asian ideograph */, {0, 0, 0x5E15} /* East Asian ideograph */, {0, 0, 0x5E1B} /* East Asian ideograph */, {0, 0, 0x5E11} /* East Asian ideograph */, {0, 0, 0x5E1D} /* East Asian ideograph */, {0, 0, 0x5E25} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5E2B} /* East Asian ideograph */, {0, 0, 0x5E33} /* East Asian ideograph */, {0, 0, 0x5E36} /* East Asian ideograph */, {0, 0, 0x5E38} /* East Asian ideograph */, {0, 0, 0x5E37} /* East Asian ideograph */, {0, 0, 0x5E45} /* East Asian ideograph */, {0, 0, 0x5E3D} /* East Asian ideograph */, {0, 0, 0x5E40} /* East Asian ideograph */, {0, 0, 0x5E4C} /* East Asian ideograph */, {0, 0, 0x5E5B} /* East Asian ideograph */, {0, 0, 0x5E54} /* East Asian ideograph */, {0, 0, 0x5E57} /* East Asian ideograph */, {0, 0, 0x5E55} /* East Asian ideograph */, {0, 0, 0x5E63} /* East Asian ideograph */, {0, 0, 0x5E62} /* East Asian ideograph */, {0, 0, 0x5E5F} /* East Asian ideograph */, {0, 0, 0x5E6B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5E73} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5E74} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5E7B} /* East Asian ideograph */, {0, 0, 0x5E7C} /* East Asian ideograph */, {0, 0, 0x5E7D} /* East Asian ideograph */, {0, 0, 0x5E7E} /* East Asian ideograph */, {0, 0, 0x5E8F} /* East Asian ideograph */, {0, 0, 0x5E87} /* East Asian ideograph */, {0, 0, 0x5E8A} /* East Asian ideograph */, {0, 0, 0x5E9A} /* East Asian ideograph */, {0, 0, 0x5E97} /* East Asian ideograph */, {0, 0, 0x5E96} /* East Asian ideograph */, {0, 0, 0x5E9C} /* East Asian ideograph */, {0, 0, 0x5E95} /* East Asian ideograph */, {0, 0, 0x5EA0} /* East Asian ideograph */, {0, 0, 0x5EA6} /* East Asian ideograph */, {0, 0, 0x5EAB} /* East Asian ideograph */, {0, 0, 0x5EA7} /* East Asian ideograph */, {0, 0, 0x5EAD} /* East Asian ideograph */, {0, 0, 0x5EB7} /* East Asian ideograph */, {0, 0, 0x5EB8} /* East Asian ideograph */, {0, 0, 0x5EB6} /* East Asian ideograph */, {0, 0, 0x5EB5} /* East Asian ideograph */, {0, 0, 0x5EC2} /* East Asian ideograph */, {0, 0, 0x5EC1} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page15 = { 0, marc8_31page15_dir }; /* PAGE 14 */ struct yaz_iconv_trie_dir marc8_31page14_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5BC6} /* East Asian ideograph */, {0, 0, 0x5BC7} /* East Asian ideograph */, {0, 0, 0x5BC5} /* East Asian ideograph */, {0, 0, 0x5BC4} /* East Asian ideograph */, {0, 0, 0x5BC2} /* East Asian ideograph */, {0, 0, 0x5BBF} /* East Asian ideograph */, {0, 0, 0x5BCC} /* East Asian ideograph */, {0, 0, 0x5BD2} /* East Asian ideograph */, {0, 0, 0x5BD0} /* East Asian ideograph */, {0, 0, 0x5BD3} /* East Asian ideograph */, {0, 0, 0x5BE1} /* East Asian ideograph */, {0, 0, 0x5BE5} /* East Asian ideograph */, {0, 0, 0x5BE8} /* East Asian ideograph */, {0, 0, 0x5BE2} /* East Asian ideograph */, {0, 0, 0x5BE4} /* East Asian ideograph */, {0, 0, 0x5BDE} /* East Asian ideograph */, {0, 0, 0x5BE6} /* East Asian ideograph */, {0, 0, 0x5BE7} /* East Asian ideograph */, {0, 0, 0x5BDF} /* East Asian ideograph */, {0, 0, 0x5BEE} /* East Asian ideograph */, {0, 0, 0x5BEC} /* East Asian ideograph */, {0, 0, 0x5BE9} /* East Asian ideograph */, {0, 0, 0x5BEB} /* East Asian ideograph */, {0, 0, 0x5BF5} /* East Asian ideograph */, {0, 0, 0x5BF6} /* East Asian ideograph */, {0, 0, 0x5BF8} /* East Asian ideograph */, {0, 0, 0x5BFA} /* East Asian ideograph */, {0, 0, 0x5C01} /* East Asian ideograph */, {0, 0, 0x5C04} /* East Asian ideograph */, {0, 0, 0x5C09} /* East Asian ideograph */, {0, 0, 0x5C08} /* East Asian ideograph */, {0, 0, 0x5C07} /* East Asian ideograph */, {0, 0, 0x5C0A} /* East Asian ideograph */, {0, 0, 0x5C0B} /* East Asian ideograph */, {0, 0, 0x5C0D} /* East Asian ideograph */, {0, 0, 0x5C0E} /* East Asian ideograph */, {0, 0, 0x5C0F} /* East Asian ideograph */, {0, 0, 0x5C11} /* East Asian ideograph */, {0, 0, 0x5C16} /* East Asian ideograph */, {0, 0, 0x5C1A} /* East Asian ideograph */, {0, 0, 0x5C24} /* East Asian ideograph */, {0, 0, 0x5C2C} /* East Asian ideograph */, {0, 0, 0x5C31} /* East Asian ideograph */, {0, 0, 0x5C37} /* East Asian ideograph */, {0, 0, 0x5C38} /* East Asian ideograph */, {0, 0, 0x5C3A} /* East Asian ideograph */, {0, 0, 0x5C3C} /* East Asian ideograph */, {0, 0, 0x5C40} /* East Asian ideograph */, {0, 0, 0x5C41} /* East Asian ideograph */, {0, 0, 0x5C3F} /* East Asian ideograph */, {0, 0, 0x5C3E} /* East Asian ideograph */, {0, 0, 0x5C46} /* East Asian ideograph */, {0, 0, 0x5C45} /* East Asian ideograph */, {0, 0, 0x5C48} /* East Asian ideograph */, {0, 0, 0x5C4E} /* East Asian ideograph */, {0, 0, 0x5C4B} /* East Asian ideograph */, {0, 0, 0x5C4D} /* East Asian ideograph */, {0, 0, 0x5C55} /* East Asian ideograph */, {0, 0, 0x5C51} /* East Asian ideograph */, {0, 0, 0x5C50} /* East Asian ideograph */, {0, 0, 0x5C5B} /* East Asian ideograph */, {0, 0, 0x5C60} /* East Asian ideograph */, {0, 0, 0x5C5C} /* East Asian ideograph */, {0, 0, 0x5C62} /* East Asian ideograph */, {0, 0, 0x5C64} /* East Asian ideograph (variant of EACC 4B3B61) */, {0, 0, 0x5C65} /* East Asian ideograph */, {0, 0, 0x5C6C} /* East Asian ideograph */, {0, 0, 0x5C6F} /* East Asian ideograph */, {0, 0, 0x5C71} /* East Asian ideograph */, {0, 0, 0x5C79} /* East Asian ideograph */, {0, 0, 0x5C90} /* East Asian ideograph */, {0, 0, 0x5C8C} /* East Asian ideograph */, {0, 0, 0x5C91} /* East Asian ideograph */, {0, 0, 0x5C94} /* East Asian ideograph */, {0, 0, 0x5CB7} /* East Asian ideograph */, {0, 0, 0x5CB8} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5CA1} /* East Asian ideograph */, {0, 0, 0x5CAB} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5CB1} /* East Asian ideograph */, {0, 0, 0x5CD9} /* East Asian ideograph */, {0, 0, 0x5D01} /* East Asian ideograph */, {0, 0, 0x5CFD} /* East Asian ideograph */, {0, 0, 0x5CED} /* East Asian ideograph */, {0, 0, 0x5CFB} /* East Asian ideograph */, {0, 0, 0x5CE8} /* East Asian ideograph */, {0, 0, 0x5CF0} /* East Asian ideograph */, {0, 0, 0x5CF6} /* East Asian ideograph */, {0, 0, 0x5CEA} /* East Asian ideograph */, {0, 0, 0x5D07} /* East Asian ideograph */, {0, 0, 0x5D06} /* East Asian ideograph */, {0, 0, 0x5D1B} /* East Asian ideograph */, {0, 0, 0x5D16} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page14 = { 0, marc8_31page14_dir }; /* PAGE 13 */ struct yaz_iconv_trie_dir marc8_31page13_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5A46} /* East Asian ideograph */, {0, 0, 0x5A49} /* East Asian ideograph */, {0, 0, 0x5A6A} /* East Asian ideograph */, {0, 0, 0x5A36} /* East Asian ideograph */, {0, 0, 0x5A4A} /* East Asian ideograph */, {0, 0, 0x5A40} /* East Asian ideograph */, {0, 0, 0x5A66} /* East Asian ideograph */, {0, 0, 0x5A41} /* East Asian ideograph */, {0, 0, 0x5A3C} /* East Asian ideograph */, {0, 0, 0x5A62} /* East Asian ideograph */, {0, 0, 0x5A5A} /* East Asian ideograph */, {0, 0, 0x5A77} /* East Asian ideograph */, {0, 0, 0x5A9A} /* East Asian ideograph */, {0, 0, 0x5A92} /* East Asian ideograph */, {0, 0, 0x5A7F} /* East Asian ideograph */, {0, 0, 0x5ABC} /* East Asian ideograph */, {0, 0, 0x5A9B} /* East Asian ideograph */, {0, 0, 0x5ACC} /* East Asian ideograph */, {0, 0, 0x5AC1} /* East Asian ideograph */, {0, 0, 0x5AC9} /* East Asian ideograph */, {0, 0, 0x5ABE} /* East Asian ideograph */, {0, 0, 0x5ABD} /* East Asian ideograph */, {0, 0, 0x5AB2} /* East Asian ideograph */, {0, 0, 0x5AC2} /* East Asian ideograph */, {0, 0, 0x5AB3} /* East Asian ideograph */, {0, 0, 0x5AE1} /* East Asian ideograph */, {0, 0, 0x5AD7} /* East Asian ideograph */, {0, 0, 0x5AD6} /* East Asian ideograph */, {0, 0, 0x5AE3} /* East Asian ideograph */, {0, 0, 0x5AE9} /* East Asian ideograph */, {0, 0, 0x5AD8} /* East Asian ideograph */, {0, 0, 0x5AE6} /* East Asian ideograph */, {0, 0, 0x5AFB} /* East Asian ideograph */, {0, 0, 0x5B09} /* East Asian ideograph */, {0, 0, 0x5B0B} /* East Asian ideograph */, {0, 0, 0x5B0C} /* East Asian ideograph */, {0, 0, 0x5AF5} /* East Asian ideograph */, {0, 0, 0x5B34} /* East Asian ideograph */, {0, 0, 0x5B1D} /* East Asian ideograph */, {0, 0, 0x5B2A} /* East Asian ideograph */, {0, 0, 0x5B24} /* East Asian ideograph */, {0, 0, 0x5B30} /* East Asian ideograph */, {0, 0, 0x5B38} /* East Asian ideograph */, {0, 0, 0x5B40} /* East Asian ideograph */, {0, 0, 0x5B50} /* East Asian ideograph */, {0, 0, 0x5B51} /* East Asian ideograph */, {0, 0, 0x5B53} /* East Asian ideograph */, {0, 0, 0x5B54} /* East Asian ideograph */, {0, 0, 0x5B55} /* East Asian ideograph */, {0, 0, 0x5B57} /* East Asian ideograph */, {0, 0, 0x5B58} /* East Asian ideograph */, {0, 0, 0x5B5D} /* East Asian ideograph */, {0, 0, 0x5B5C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5B5F} /* East Asian ideograph */, {0, 0, 0x5B63} /* East Asian ideograph */, {0, 0, 0x5B64} /* East Asian ideograph */, {0, 0, 0x5B69} /* East Asian ideograph */, {0, 0, 0x5B6B} /* East Asian ideograph */, {0, 0, 0x5B70} /* East Asian ideograph */, {0, 0, 0x5B73} /* East Asian ideograph */, {0, 0, 0x5B71} /* East Asian ideograph */, {0, 0, 0x5B75} /* East Asian ideograph */, {0, 0, 0x5B78} /* East Asian ideograph */, {0, 0, 0x5B7A} /* East Asian ideograph */, {0, 0, 0x5B7D} /* East Asian ideograph */, {0, 0, 0x5B7F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5B87} /* East Asian ideograph */, {0, 0, 0x5B88} /* East Asian ideograph */, {0, 0, 0x5B89} /* East Asian ideograph */, {0, 0, 0x5B85} /* East Asian ideograph */, {0, 0, 0x5B8C} /* East Asian ideograph */, {0, 0, 0x5B8B} /* East Asian ideograph */, {0, 0, 0x5B8F} /* East Asian ideograph */, {0, 0, 0x5B97} /* East Asian ideograph */, {0, 0, 0x5B9A} /* East Asian ideograph */, {0, 0, 0x5B9C} /* East Asian ideograph */, {0, 0, 0x5B98} /* East Asian ideograph */, {0, 0, 0x5B99} /* East Asian ideograph */, {0, 0, 0x5B9B} /* East Asian ideograph */, {0, 0, 0x5BA5} /* East Asian ideograph */, {0, 0, 0x5BA3} /* East Asian ideograph */, {0, 0, 0x5BA6} /* East Asian ideograph */, {0, 0, 0x5BA4} /* East Asian ideograph */, {0, 0, 0x5BA2} /* East Asian ideograph */, {0, 0, 0x5BB0} /* East Asian ideograph */, {0, 0, 0x5BB8} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5BB5} /* East Asian ideograph */, {0, 0, 0x5BB4} /* East Asian ideograph */, {0, 0, 0x5BAE} /* East Asian ideograph */, {0, 0, 0x5BB9} /* East Asian ideograph */, {0, 0, 0x5BB3} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page13 = { 0, marc8_31page13_dir }; /* PAGE 12 */ struct yaz_iconv_trie_dir marc8_31page12_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5920} /* East Asian ideograph */, {0, 0, 0x5924} /* East Asian ideograph */, {0, 0, 0x5925} /* East Asian ideograph */, {0, 0, 0x5922} /* East Asian ideograph */, {0, 0, 0x5927} /* East Asian ideograph */, {0, 0, 0x592A} /* East Asian ideograph */, {0, 0, 0x592B} /* East Asian ideograph */, {0, 0, 0x5929} /* East Asian ideograph */, {0, 0, 0x592D} /* East Asian ideograph */, {0, 0, 0x592E} /* East Asian ideograph */, {0, 0, 0x5931} /* East Asian ideograph */, {0, 0, 0x5937} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x593E} /* East Asian ideograph */, {0, 0, 0x5954} /* East Asian ideograph */, {0, 0, 0x5949} /* East Asian ideograph */, {0, 0, 0x5948} /* East Asian ideograph */, {0, 0, 0x5947} /* East Asian ideograph */, {0, 0, 0x5944} /* East Asian ideograph */, {0, 0, 0x5955} /* East Asian ideograph */, {0, 0, 0x5951} /* East Asian ideograph */, {0, 0, 0x594E} /* East Asian ideograph */, {0, 0, 0x594F} /* East Asian ideograph */, {0, 0, 0x5950} /* East Asian ideograph */, {0, 0, 0x5957} /* East Asian ideograph */, {0, 0, 0x5958} /* East Asian ideograph */, {0, 0, 0x595A} /* East Asian ideograph */, {0, 0, 0x5960} /* East Asian ideograph */, {0, 0, 0x5962} /* East Asian ideograph */, {0, 0, 0x5967} /* East Asian ideograph */, {0, 0, 0x5969} /* East Asian ideograph */, {0, 0, 0x596A} /* East Asian ideograph */, {0, 0, 0x596E} /* East Asian ideograph */, {0, 0, 0x5973} /* East Asian ideograph */, {0, 0, 0x5974} /* East Asian ideograph */, {0, 0, 0x5976} /* East Asian ideograph */, {0, 0, 0x5984} /* East Asian ideograph */, {0, 0, 0x5983} /* East Asian ideograph */, {0, 0, 0x5978} /* East Asian ideograph */, {0, 0, 0x597D} /* East Asian ideograph */, {0, 0, 0x5979} /* East Asian ideograph */, {0, 0, 0x5982} /* East Asian ideograph */, {0, 0, 0x5981} /* East Asian ideograph */, {0, 0, 0x59A8} /* East Asian ideograph */, {0, 0, 0x5992} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x59A4} /* East Asian ideograph */, {0, 0, 0x59A3} /* East Asian ideograph */, {0, 0, 0x5993} /* East Asian ideograph */, {0, 0, 0x599E} /* East Asian ideograph */, {0, 0, 0x599D} /* East Asian ideograph */, {0, 0, 0x5999} /* East Asian ideograph */, {0, 0, 0x59A5} /* East Asian ideograph */, {0, 0, 0x598A} /* East Asian ideograph */, {0, 0, 0x5996} /* East Asian ideograph */, {0, 0, 0x59BE} /* East Asian ideograph */, {0, 0, 0x59BB} /* East Asian ideograph */, {0, 0, 0x59AE} /* East Asian ideograph */, {0, 0, 0x59D1} /* East Asian ideograph */, {0, 0, 0x59B9} /* East Asian ideograph */, {0, 0, 0x59C6} /* East Asian ideograph */, {0, 0, 0x59D0} /* East Asian ideograph */, {0, 0, 0x59D7} /* East Asian ideograph */, {0, 0, 0x59AF} /* East Asian ideograph */, {0, 0, 0x59D2} /* East Asian ideograph */, {0, 0, 0x59D3} /* East Asian ideograph */, {0, 0, 0x59CA} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x59CB} /* East Asian ideograph */, {0, 0, 0x59D4} /* East Asian ideograph */, {0, 0, 0x59E3} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x59FF} /* East Asian ideograph */, {0, 0, 0x59D8} /* East Asian ideograph */, {0, 0, 0x5A03} /* East Asian ideograph */, {0, 0, 0x59E8} /* East Asian ideograph */, {0, 0, 0x59E5} /* East Asian ideograph */, {0, 0, 0x59EA} /* East Asian ideograph */, {0, 0, 0x5A01} /* East Asian ideograph */, {0, 0, 0x59FB} /* East Asian ideograph */, {0, 0, 0x59E6} /* East Asian ideograph */, {0, 0, 0x59DA} /* East Asian ideograph */, {0, 0, 0x5A11} /* East Asian ideograph */, {0, 0, 0x5A18} /* East Asian ideograph */, {0, 0, 0x5A23} /* East Asian ideograph */, {0, 0, 0x5A1C} /* East Asian ideograph */, {0, 0, 0x5A13} /* East Asian ideograph */, {0, 0, 0x59EC} /* East Asian ideograph */, {0, 0, 0x5A20} /* East Asian ideograph */, {0, 0, 0x5A1F} /* East Asian ideograph */, {0, 0, 0x5A1B} /* East Asian ideograph */, {0, 0, 0x5A0C} /* East Asian ideograph */, {0, 0, 0x5A29} /* East Asian ideograph */, {0, 0, 0x5A25} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page12 = { 0, marc8_31page12_dir }; /* PAGE 11 */ struct yaz_iconv_trie_dir marc8_31page11_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5740} /* East Asian ideograph */, {0, 0, 0x5747} /* East Asian ideograph */, {0, 0, 0x574D} /* East Asian ideograph */, {0, 0, 0x573E} /* East Asian ideograph */, {0, 0, 0x574E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5783} /* East Asian ideograph */, {0, 0, 0x576A} /* East Asian ideograph */, {0, 0, 0x5769} /* East Asian ideograph */, {0, 0, 0x5777} /* East Asian ideograph */, {0, 0, 0x5761} /* East Asian ideograph */, {0, 0, 0x5764} /* East Asian ideograph */, {0, 0, 0x5766} /* East Asian ideograph */, {0, 0, 0x5782} /* East Asian ideograph */, {0, 0, 0x577C} /* East Asian ideograph */, {0, 0, 0x57A0} /* East Asian ideograph */, {0, 0, 0x578B} /* East Asian ideograph */, {0, 0, 0x57A3} /* East Asian ideograph */, {0, 0, 0x57AE} /* East Asian ideograph */, {0, 0, 0x57A2} /* East Asian ideograph */, {0, 0, 0x57D4} /* East Asian ideograph */, {0, 0, 0x57C2} /* East Asian ideograph */, {0, 0, 0x57CE} /* East Asian ideograph */, {0, 0, 0x57CB} /* East Asian ideograph */, {0, 0, 0x57C3} /* East Asian ideograph */, {0, 0, 0x57F9} /* East Asian ideograph */, {0, 0, 0x57F7} /* East Asian ideograph */, {0, 0, 0x57FA} /* East Asian ideograph */, {0, 0, 0x57DF} /* East Asian ideograph */, {0, 0, 0x580A} /* East Asian ideograph */, {0, 0, 0x5805} /* East Asian ideograph */, {0, 0, 0x5802} /* East Asian ideograph */, {0, 0, 0x5806} /* East Asian ideograph */, {0, 0, 0x57E4} /* East Asian ideograph */, {0, 0, 0x57E0} /* East Asian ideograph */, {0, 0, 0x5831} /* East Asian ideograph */, {0, 0, 0x582F} /* East Asian ideograph */, {0, 0, 0x5835} /* East Asian ideograph */, {0, 0, 0x582A} /* East Asian ideograph */, {0, 0, 0x5830} /* East Asian ideograph */, {0, 0, 0x5824} /* East Asian ideograph */, {0, 0, 0x5834} /* East Asian ideograph */, {0, 0, 0x5821} /* East Asian ideograph */, {0, 0, 0x585E} /* East Asian ideograph */, {0, 0, 0x5857} /* East Asian ideograph */, {0, 0, 0x5858} /* East Asian ideograph */, {0, 0, 0x5851} /* East Asian ideograph */, {0, 0, 0x586B} /* East Asian ideograph */, {0, 0, 0x584C} /* East Asian ideograph */, {0, 0, 0x585A} /* East Asian ideograph */, {0, 0, 0x586D} /* East Asian ideograph */, {0, 0, 0x5854} /* East Asian ideograph */, {0, 0, 0x5862} /* East Asian ideograph */, {0, 0, 0x584A} /* East Asian ideograph */, {0, 0, 0x5883} /* East Asian ideograph */, {0, 0, 0x587E} /* East Asian ideograph */, {0, 0, 0x5875} /* East Asian ideograph */, {0, 0, 0x588A} /* East Asian ideograph */, {0, 0, 0x5879} /* East Asian ideograph */, {0, 0, 0x5885} /* East Asian ideograph */, {0, 0, 0x5893} /* East Asian ideograph */, {0, 0, 0x589E} /* East Asian ideograph */, {0, 0, 0x5880} /* East Asian ideograph */, {0, 0, 0x58B3} /* East Asian ideograph */, {0, 0, 0x589C} /* East Asian ideograph */, {0, 0, 0x58AE} /* East Asian ideograph */, {0, 0, 0x589F} /* East Asian ideograph */, {0, 0, 0x58C7} /* East Asian ideograph (variant of EACC 4B3864) */, {0, 0, 0x58C5} /* East Asian ideograph */, {0, 0, 0x58C1} /* East Asian ideograph */, {0, 0, 0x58BE} /* East Asian ideograph */, {0, 0, 0x58D5} /* East Asian ideograph */, {0, 0, 0x58D3} /* East Asian ideograph */, {0, 0, 0x58D1} /* East Asian ideograph */, {0, 0, 0x58D9} /* East Asian ideograph */, {0, 0, 0x58D8} /* East Asian ideograph */, {0, 0, 0x58DF} /* East Asian ideograph */, {0, 0, 0x58DE} /* East Asian ideograph */, {0, 0, 0x58E2} /* East Asian ideograph */, {0, 0, 0x58E4} /* East Asian ideograph */, {0, 0, 0x58E9} /* East Asian ideograph */, {0, 0, 0x58EB} /* East Asian ideograph */, {0, 0, 0x58EC} /* East Asian ideograph */, {0, 0, 0x58EF} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x58FA} /* East Asian ideograph */, {0, 0, 0x58FD} /* East Asian ideograph */, {0, 0, 0x590F} /* East Asian ideograph */, {0, 0, 0x5914} /* East Asian ideograph */, {0, 0, 0x5915} /* East Asian ideograph */, {0, 0, 0x5916} /* East Asian ideograph */, {0, 0, 0x5919} /* East Asian ideograph */, {0, 0, 0x591A} /* East Asian ideograph */, {0, 0, 0x591C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page11 = { 0, marc8_31page11_dir }; /* PAGE 10 */ struct yaz_iconv_trie_dir marc8_31page10_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x55DA} /* East Asian ideograph */, {0, 0, 0x55C6} /* East Asian ideograph */, {0, 0, 0x55E1} /* East Asian ideograph */, {0, 0, 0x5600} /* East Asian ideograph */, {0, 0, 0x561B} /* East Asian ideograph */, {0, 0, 0x55FE} /* East Asian ideograph */, {0, 0, 0x5616} /* East Asian ideograph */, {0, 0, 0x55F7} /* East Asian ideograph */, {0, 0, 0x5608} /* East Asian ideograph */, {0, 0, 0x561F} /* East Asian ideograph */, {0, 0, 0x55FD} /* East Asian ideograph */, {0, 0, 0x5606} /* East Asian ideograph (variant of EACC 4B372C) */, {0, 0, 0x5609} /* East Asian ideograph */, {0, 0, 0x5614} /* East Asian ideograph */, {0, 0, 0x560E} /* East Asian ideograph */, {0, 0, 0x5617} /* East Asian ideograph */, {0, 0, 0x560D} /* East Asian ideograph */, {0, 0, 0x562E} /* East Asian ideograph */, {0, 0, 0x562F} /* East Asian ideograph */, {0, 0, 0x564E} /* East Asian ideograph */, {0, 0, 0x5636} /* East Asian ideograph */, {0, 0, 0x5632} /* East Asian ideograph */, {0, 0, 0x563B} /* East Asian ideograph */, {0, 0, 0x5639} /* East Asian ideograph */, {0, 0, 0x5657} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5653} /* East Asian ideograph */, {0, 0, 0x563F} /* East Asian ideograph */, {0, 0, 0x5634} /* East Asian ideograph */, {0, 0, 0x5637} /* East Asian ideograph */, {0, 0, 0x5659} /* East Asian ideograph */, {0, 0, 0x5630} /* East Asian ideograph */, {0, 0, 0x566B} /* East Asian ideograph */, {0, 0, 0x5664} /* East Asian ideograph */, {0, 0, 0x5669} /* East Asian ideograph */, {0, 0, 0x5678} /* East Asian ideograph */, {0, 0, 0x5674} /* East Asian ideograph */, {0, 0, 0x5679} /* East Asian ideograph */, {0, 0, 0x5665} /* East Asian ideograph */, {0, 0, 0x566A} /* East Asian ideograph */, {0, 0, 0x5668} /* East Asian ideograph */, {0, 0, 0x5671} /* East Asian ideograph */, {0, 0, 0x566F} /* East Asian ideograph */, {0, 0, 0x5662} /* East Asian ideograph (variant of EACC 4B374C) */, {0, 0, 0x566C} /* East Asian ideograph */, {0, 0, 0x5680} /* East Asian ideograph */, {0, 0, 0x568E} /* East Asian ideograph */, {0, 0, 0x5685} /* East Asian ideograph */, {0, 0, 0x5687} /* East Asian ideograph */, {0, 0, 0x5690} /* East Asian ideograph */, {0, 0, 0x568F} /* East Asian ideograph */, {0, 0, 0x5695} /* East Asian ideograph */, {0, 0, 0x56AE} /* East Asian ideograph (variant of EACC 453755) */, {0, 0, 0x56A8} /* East Asian ideograph */, {0, 0, 0x56B0} /* East Asian ideograph */, {0, 0, 0x56A5} /* East Asian ideograph */, {0, 0, 0x56B7} /* East Asian ideograph */, {0, 0, 0x56B4} /* East Asian ideograph */, {0, 0, 0x56B6} /* East Asian ideograph */, {0, 0, 0x56C0} /* East Asian ideograph */, {0, 0, 0x56C1} /* East Asian ideograph */, {0, 0, 0x56C2} /* East Asian ideograph */, {0, 0, 0x56BC} /* East Asian ideograph */, {0, 0, 0x56CA} /* East Asian ideograph */, {0, 0, 0x56C9} /* East Asian ideograph */, {0, 0, 0x56C8} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x56D1} /* East Asian ideograph */, {0, 0, 0x56DB} /* East Asian ideograph */, {0, 0, 0x56DA} /* East Asian ideograph */, {0, 0, 0x56E0} /* East Asian ideograph */, {0, 0, 0x56DE} /* East Asian ideograph */, {0, 0, 0x56E4} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x56F1} /* East Asian ideograph */, {0, 0, 0x56FA} /* East Asian ideograph */, {0, 0, 0x5703} /* East Asian ideograph */, {0, 0, 0x5708} /* East Asian ideograph */, {0, 0, 0x570B} /* East Asian ideograph */, {0, 0, 0x570D} /* East Asian ideograph */, {0, 0, 0x5712} /* East Asian ideograph */, {0, 0, 0x5713} /* East Asian ideograph */, {0, 0, 0x5718} /* East Asian ideograph */, {0, 0, 0x5716} /* East Asian ideograph */, {0, 0, 0x571F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x572D} /* East Asian ideograph */, {0, 0, 0x572F} /* East Asian ideograph */, {0, 0, 0x5730} /* East Asian ideograph */, {0, 0, 0x5728} /* East Asian ideograph */, {0, 0, 0x5733} /* East Asian ideograph */, {0, 0, 0x5751} /* East Asian ideograph */, {0, 0, 0x574A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page10 = { 0, marc8_31page10_dir }; /* PAGE 9 */ struct yaz_iconv_trie_dir marc8_31page9_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x54AA} /* East Asian ideograph */, {0, 0, 0x54A8} /* East Asian ideograph */, {0, 0, 0x54AC} /* East Asian ideograph */, {0, 0, 0x54C0} /* East Asian ideograph */, {0, 0, 0x54B3} /* East Asian ideograph */, {0, 0, 0x54A6} /* East Asian ideograph */, {0, 0, 0x54AB} /* East Asian ideograph */, {0, 0, 0x54C7} /* East Asian ideograph */, {0, 0, 0x54C9} /* East Asian ideograph */, {0, 0, 0x54C4} /* East Asian ideograph */, {0, 0, 0x54C2} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x54C1} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x54CE} /* East Asian ideograph */, {0, 0, 0x54B1} /* East Asian ideograph */, {0, 0, 0x54BB} /* East Asian ideograph */, {0, 0, 0x54AF} /* East Asian ideograph */, {0, 0, 0x54C8} /* East Asian ideograph */, {0, 0, 0x5501} /* East Asian ideograph */, {0, 0, 0x54FC} /* East Asian ideograph */, {0, 0, 0x5510} /* East Asian ideograph */, {0, 0, 0x54EA} /* East Asian ideograph */, {0, 0, 0x5514} /* East Asian ideograph */, {0, 0, 0x54FA} /* East Asian ideograph */, {0, 0, 0x54E5} /* East Asian ideograph */, {0, 0, 0x54EE} /* East Asian ideograph */, {0, 0, 0x54F2} /* East Asian ideograph */, {0, 0, 0x54E8} /* East Asian ideograph */, {0, 0, 0x54E1} /* East Asian ideograph */, {0, 0, 0x54E9} /* East Asian ideograph */, {0, 0, 0x54ED} /* East Asian ideograph */, {0, 0, 0x5506} /* East Asian ideograph */, {0, 0, 0x5509} /* East Asian ideograph */, {0, 0, 0x54E6} /* East Asian ideograph */, {0, 0, 0x5556} /* East Asian ideograph */, {0, 0, 0x5533} /* East Asian ideograph */, {0, 0, 0x5546} /* East Asian ideograph */, {0, 0, 0x5537} /* East Asian ideograph (Version J extension) */, {0, 0, 0x554F} /* East Asian ideograph */, {0, 0, 0x555E} /* East Asian ideograph */, {0, 0, 0x5566} /* East Asian ideograph */, {0, 0, 0x556A} /* East Asian ideograph */, {0, 0, 0x554A} /* East Asian ideograph */, {0, 0, 0x5544} /* East Asian ideograph */, {0, 0, 0x555C} /* East Asian ideograph */, {0, 0, 0x5531} /* East Asian ideograph */, {0, 0, 0x5543} /* East Asian ideograph */, {0, 0, 0x552C} /* East Asian ideograph */, {0, 0, 0x5561} /* East Asian ideograph */, {0, 0, 0x553E} /* East Asian ideograph */, {0, 0, 0x5563} /* East Asian ideograph */, {0, 0, 0x5555} /* East Asian ideograph */, {0, 0, 0x552F} /* East Asian ideograph */, {0, 0, 0x552E} /* East Asian ideograph */, {0, 0, 0x5564} /* East Asian ideograph */, {0, 0, 0x5538} /* East Asian ideograph */, {0, 0, 0x55A7} /* East Asian ideograph */, {0, 0, 0x5580} /* East Asian ideograph */, {0, 0, 0x557B} /* East Asian ideograph */, {0, 0, 0x557C} /* East Asian ideograph */, {0, 0, 0x5527} /* East Asian ideograph */, {0, 0, 0x5594} /* East Asian ideograph */, {0, 0, 0x5587} /* East Asian ideograph */, {0, 0, 0x559C} /* East Asian ideograph */, {0, 0, 0x558B} /* East Asian ideograph */, {0, 0, 0x55AA} /* East Asian ideograph */, {0, 0, 0x55B3} /* East Asian ideograph */, {0, 0, 0x558A} /* East Asian ideograph */, {0, 0, 0x5583} /* East Asian ideograph */, {0, 0, 0x55B1} /* East Asian ideograph */, {0, 0, 0x55AE} /* East Asian ideograph */, {0, 0, 0x5582} /* East Asian ideograph */, {0, 0, 0x559F} /* East Asian ideograph */, {0, 0, 0x559D} /* East Asian ideograph */, {0, 0, 0x5598} /* East Asian ideograph */, {0, 0, 0x559A} /* East Asian ideograph */, {0, 0, 0x557E} /* East Asian ideograph */, {0, 0, 0x55AC} /* East Asian ideograph */, {0, 0, 0x5589} /* East Asian ideograph */, {0, 0, 0x55B2} /* East Asian ideograph */, {0, 0, 0x55BB} /* East Asian ideograph */, {0, 0, 0x55E8} /* East Asian ideograph */, {0, 0, 0x55DF} /* East Asian ideograph */, {0, 0, 0x55D1} /* East Asian ideograph */, {0, 0, 0x55DC} /* East Asian ideograph */, {0, 0, 0x55E6} /* East Asian ideograph */, {0, 0, 0x55C7} /* East Asian ideograph */, {0, 0, 0x55D3} /* East Asian ideograph */, {0, 0, 0x55CE} /* East Asian ideograph */, {0, 0, 0x55E3} /* East Asian ideograph */, {0, 0, 0x55EF} /* East Asian ideograph */, {0, 0, 0x55E4} /* East Asian ideograph */, {0, 0, 0x55C5} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page9 = { 0, marc8_31page9_dir }; /* PAGE 8 */ struct yaz_iconv_trie_dir marc8_31page8_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x53C9} /* East Asian ideograph */, {0, 0, 0x53CB} /* East Asian ideograph */, {0, 0, 0x53CA} /* East Asian ideograph */, {0, 0, 0x53CD} /* East Asian ideograph */, {0, 0, 0x53D6} /* East Asian ideograph */, {0, 0, 0x53D4} /* East Asian ideograph */, {0, 0, 0x53D7} /* East Asian ideograph */, {0, 0, 0x53DB} /* East Asian ideograph */, {0, 0, 0x53DF} /* East Asian ideograph */, {0, 0, 0x66FC} /* East Asian ideograph */, {0, 0, 0x53E2} /* East Asian ideograph */, {0, 0, 0x53E3} /* East Asian ideograph */, {0, 0, 0x53F8} /* East Asian ideograph */, {0, 0, 0x53E4} /* East Asian ideograph */, {0, 0, 0x53EE} /* East Asian ideograph */, {0, 0, 0x53EF} /* East Asian ideograph */, {0, 0, 0x53E9} /* East Asian ideograph */, {0, 0, 0x53F3} /* East Asian ideograph */, {0, 0, 0x53FC} /* East Asian ideograph */, {0, 0, 0x53E8} /* East Asian ideograph */, {0, 0, 0x53E6} /* East Asian ideograph */, {0, 0, 0x53EC} /* East Asian ideograph */, {0, 0, 0x53EB} /* East Asian ideograph */, {0, 0, 0x53F0} /* East Asian ideograph (duplicate simplified) */, {0, 0, 0x53E5} /* East Asian ideograph */, {0, 0, 0x53F1} /* East Asian ideograph */, {0, 0, 0x53ED} /* East Asian ideograph */, {0, 0, 0x53EA} /* East Asian ideograph */, {0, 0, 0x53F2} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x540B} /* East Asian ideograph */, {0, 0, 0x5409} /* East Asian ideograph */, {0, 0, 0x5410} /* East Asian ideograph */, {0, 0, 0x540F} /* East Asian ideograph */, {0, 0, 0x540C} /* East Asian ideograph */, {0, 0, 0x540A} /* East Asian ideograph */, {0, 0, 0x540D} /* East Asian ideograph */, {0, 0, 0x5404} /* East Asian ideograph */, {0, 0, 0x5403} /* East Asian ideograph */, {0, 0, 0x5412} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5406} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x542D} /* East Asian ideograph */, {0, 0, 0x541D} /* East Asian ideograph */, {0, 0, 0x541E} /* East Asian ideograph */, {0, 0, 0x541B} /* East Asian ideograph */, {0, 0, 0x544E} /* East Asian ideograph */, {0, 0, 0x543E} /* East Asian ideograph */, {0, 0, 0x5427} /* East Asian ideograph */, {0, 0, 0x5440} /* East Asian ideograph */, {0, 0, 0x5431} /* East Asian ideograph */, {0, 0, 0x5446} /* East Asian ideograph */, {0, 0, 0x543C} /* East Asian ideograph */, {0, 0, 0x5443} /* East Asian ideograph */, {0, 0, 0x5426} /* East Asian ideograph */, {0, 0, 0x5420} /* East Asian ideograph */, {0, 0, 0x5436} /* East Asian ideograph */, {0, 0, 0x5433} /* East Asian ideograph */, {0, 0, 0x5435} /* East Asian ideograph */, {0, 0, 0x542E} /* East Asian ideograph */, {0, 0, 0x544A} /* East Asian ideograph */, {0, 0, 0x5448} /* East Asian ideograph */, {0, 0, 0x543B} /* East Asian ideograph */, {0, 0, 0x5438} /* East Asian ideograph */, {0, 0, 0x5439} /* East Asian ideograph */, {0, 0, 0x5442} /* East Asian ideograph */, {0, 0, 0x542B} /* East Asian ideograph */, {0, 0, 0x541F} /* East Asian ideograph */, {0, 0, 0x5429} /* East Asian ideograph */, {0, 0, 0x5473} /* East Asian ideograph */, {0, 0, 0x5462} /* East Asian ideograph */, {0, 0, 0x5475} /* East Asian ideograph */, {0, 0, 0x5495} /* East Asian ideograph */, {0, 0, 0x5478} /* East Asian ideograph */, {0, 0, 0x5496} /* East Asian ideograph */, {0, 0, 0x5477} /* East Asian ideograph */, {0, 0, 0x547B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5492} /* East Asian ideograph */, {0, 0, 0x5484} /* East Asian ideograph */, {0, 0, 0x547C} /* East Asian ideograph */, {0, 0, 0x5468} /* East Asian ideograph */, {0, 0, 0x5486} /* East Asian ideograph */, {0, 0, 0x548B} /* East Asian ideograph */, {0, 0, 0x548C} /* East Asian ideograph */, {0, 0, 0x5490} /* East Asian ideograph */, {0, 0, 0x547D} /* East Asian ideograph */, {0, 0, 0x5476} /* East Asian ideograph */, {0, 0, 0x5471} /* East Asian ideograph */, {0, 0, 0x549A} /* East Asian ideograph */, {0, 0, 0x548E} /* East Asian ideograph */, {0, 0, 0x54A9} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page8 = { 0, marc8_31page8_dir }; /* PAGE 7 */ struct yaz_iconv_trie_dir marc8_31page7_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x528D} /* East Asian ideograph */, {0, 0, 0x5289} /* East Asian ideograph */, {0, 0, 0x5291} /* East Asian ideograph */, {0, 0, 0x529B} /* East Asian ideograph */, {0, 0, 0x529F} /* East Asian ideograph */, {0, 0, 0x52A0} /* East Asian ideograph */, {0, 0, 0x52A3} /* East Asian ideograph */, {0, 0, 0x52AB} /* East Asian ideograph */, {0, 0, 0x52A9} /* East Asian ideograph */, {0, 0, 0x52AC} /* East Asian ideograph */, {0, 0, 0x52AA} /* East Asian ideograph */, {0, 0, 0x52BE} /* East Asian ideograph */, {0, 0, 0x52C7} /* East Asian ideograph */, {0, 0, 0x52C3} /* East Asian ideograph */, {0, 0, 0x52C1} /* East Asian ideograph */, {0, 0, 0x52C9} /* East Asian ideograph */, {0, 0, 0x52D8} /* East Asian ideograph */, {0, 0, 0x52D2} /* East Asian ideograph */, {0, 0, 0x52D9} /* East Asian ideograph */, {0, 0, 0x52D5} /* East Asian ideograph */, {0, 0, 0x52DE} /* East Asian ideograph */, {0, 0, 0x52DB} /* East Asian ideograph */, {0, 0, 0x52DD} /* East Asian ideograph */, {0, 0, 0x52E2} /* East Asian ideograph */, {0, 0, 0x52E4} /* East Asian ideograph */, {0, 0, 0x52DF} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x52F5} /* East Asian ideograph */, {0, 0, 0x52F8} /* East Asian ideograph */, {0, 0, 0x52FB} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x52FF} /* East Asian ideograph */, {0, 0, 0x5305} /* East Asian ideograph */, {0, 0, 0x5306} /* East Asian ideograph */, {0, 0, 0x5308} /* East Asian ideograph */, {0, 0, 0x530D} /* East Asian ideograph */, {0, 0, 0x5310} /* East Asian ideograph */, {0, 0, 0x530F} /* East Asian ideograph */, {0, 0, 0x5315} /* East Asian ideograph */, {0, 0, 0x5316} /* East Asian ideograph */, {0, 0, 0x5317} /* East Asian ideograph */, {0, 0, 0x5319} /* East Asian ideograph */, {0, 0, 0x53F5} /* East Asian ideograph */, {0, 0, 0x531D} /* East Asian ideograph */, {0, 0, 0x5321} /* East Asian ideograph */, {0, 0, 0x5320} /* East Asian ideograph */, {0, 0, 0x5323} /* East Asian ideograph */, {0, 0, 0x532A} /* East Asian ideograph */, {0, 0, 0x532F} /* East Asian ideograph */, {0, 0, 0x5331} /* East Asian ideograph */, {0, 0, 0x5339} /* East Asian ideograph */, {0, 0, 0x533E} /* East Asian ideograph */, {0, 0, 0x5340} /* East Asian ideograph */, {0, 0, 0x533F} /* East Asian ideograph */, {0, 0, 0x5341} /* East Asian ideograph */, {0, 0, 0x5343} /* East Asian ideograph */, {0, 0, 0x5345} /* East Asian ideograph */, {0, 0, 0x5348} /* East Asian ideograph */, {0, 0, 0x5347} /* East Asian ideograph */, {0, 0, 0x534A} /* East Asian ideograph */, {0, 0, 0x5349} /* East Asian ideograph (variant of EACC 2D345D) */, {0, 0, 0}, {0, 0, 0x5352} /* East Asian ideograph */, {0, 0, 0x5354} /* East Asian ideograph */, {0, 0, 0x5353} /* East Asian ideograph */, {0, 0, 0x5351} /* East Asian ideograph */, {0, 0, 0x5357} /* East Asian ideograph */, {0, 0, 0x535A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x535E} /* East Asian ideograph */, {0, 0, 0x5361} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5366} /* East Asian ideograph */, {0, 0, 0x536F} /* East Asian ideograph */, {0, 0, 0x536E} /* East Asian ideograph */, {0, 0, 0x5370} /* East Asian ideograph */, {0, 0, 0x5371} /* East Asian ideograph */, {0, 0, 0x537D} /* East Asian ideograph */, {0, 0, 0x5375} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5378} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x537B} /* East Asian ideograph */, {0, 0, 0x537F} /* East Asian ideograph */, {0, 0, 0x5384} /* East Asian ideograph */, {0, 0, 0x539A} /* East Asian ideograph */, {0, 0, 0x539D} /* East Asian ideograph */, {0, 0, 0x539F} /* East Asian ideograph */, {0, 0, 0x53A5} /* East Asian ideograph */, {0, 0, 0x53AD} /* East Asian ideograph */, {0, 0, 0x53B2} /* East Asian ideograph */, {0, 0, 0x53BB} /* East Asian ideograph */, {0, 0, 0x53C3} /* East Asian ideograph */, {0, 0, 0x53C8} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page7 = { 0, marc8_31page7_dir }; /* PAGE 6 */ struct yaz_iconv_trie_dir marc8_31page6_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5167} /* East Asian ideograph */, {0, 0, 0x5168} /* East Asian ideograph */, {0, 0, 0x5169} /* East Asian ideograph */, {0, 0, 0x516B} /* East Asian ideograph */, {0, 0, 0x516D} /* East Asian ideograph */, {0, 0, 0x516E} /* East Asian ideograph */, {0, 0, 0x516C} /* East Asian ideograph */, {0, 0, 0x5171} /* East Asian ideograph */, {0, 0, 0x5175} /* East Asian ideograph */, {0, 0, 0x5176} /* East Asian ideograph */, {0, 0, 0x5177} /* East Asian ideograph */, {0, 0, 0x5178} /* East Asian ideograph */, {0, 0, 0x517C} /* East Asian ideograph */, {0, 0, 0x5180} /* East Asian ideograph */, {0, 0, 0x5189} /* East Asian ideograph */, {0, 0, 0x518C} /* East Asian ideograph */, {0, 0, 0x518D} /* East Asian ideograph */, {0, 0, 0x5192} /* East Asian ideograph */, {0, 0, 0x5191} /* East Asian ideograph */, {0, 0, 0x5195} /* East Asian ideograph */, {0, 0, 0x6700} /* East Asian ideograph */, {0, 0, 0x5197} /* East Asian ideograph */, {0, 0, 0x51A0} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x51A5} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x51B0} /* East Asian ideograph */, {0, 0, 0x51B6} /* East Asian ideograph */, {0, 0, 0x51B7} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x51CD} /* East Asian ideograph */, {0, 0, 0x51CC} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x51DC} /* East Asian ideograph */, {0, 0, 0x51DD} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x51F0} /* East Asian ideograph */, {0, 0, 0x51F1} /* East Asian ideograph */, {0, 0, 0x51F3} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x51FA} /* East Asian ideograph */, {0, 0, 0x51F9} /* East Asian ideograph */, {0, 0, 0x51F8} /* East Asian ideograph */, {0, 0, 0x51FD} /* East Asian ideograph */, {0, 0, 0x5200} /* East Asian ideograph */, {0, 0, 0x5201} /* East Asian ideograph */, {0, 0, 0x5203} /* East Asian ideograph */, {0, 0, 0x5207} /* East Asian ideograph */, {0, 0, 0x5206} /* East Asian ideograph */, {0, 0, 0x5208} /* East Asian ideograph */, {0, 0, 0x520A} /* East Asian ideograph */, {0, 0, 0x5211} /* East Asian ideograph */, {0, 0, 0x5217} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x520E} /* East Asian ideograph */, {0, 0, 0x5224} /* East Asian ideograph */, {0, 0, 0x5225} /* East Asian ideograph */, {0, 0, 0x5220} /* East Asian ideograph */, {0, 0, 0x5228} /* East Asian ideograph */, {0, 0, 0x5229} /* East Asian ideograph */, {0, 0, 0x5238} /* East Asian ideograph */, {0, 0, 0x523B} /* East Asian ideograph */, {0, 0, 0x5237} /* East Asian ideograph */, {0, 0, 0x5230} /* East Asian ideograph */, {0, 0, 0x523A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5241} /* East Asian ideograph */, {0, 0, 0x5239} /* East Asian ideograph */, {0, 0, 0x5243} /* East Asian ideograph */, {0, 0, 0x524D} /* East Asian ideograph */, {0, 0, 0x524C} /* East Asian ideograph */, {0, 0, 0x524B} /* East Asian ideograph */, {0, 0, 0x524A} /* East Asian ideograph */, {0, 0, 0x5247} /* East Asian ideograph */, {0, 0, 0x525C} /* East Asian ideograph */, {0, 0, 0x5256} /* East Asian ideograph */, {0, 0, 0x525B} /* East Asian ideograph */, {0, 0, 0x5254} /* East Asian ideograph */, {0, 0, 0x525D} /* East Asian ideograph */, {0, 0, 0x526A} /* East Asian ideograph */, {0, 0, 0x526F} /* East Asian ideograph */, {0, 0, 0x5272} /* East Asian ideograph */, {0, 0, 0x5274} /* East Asian ideograph */, {0, 0, 0x5269} /* East Asian ideograph */, {0, 0, 0x5275} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x527D} /* East Asian ideograph */, {0, 0, 0x527F} /* East Asian ideograph */, {0, 0, 0x5283} /* East Asian ideograph */, {0, 0, 0x5288} /* East Asian ideograph */, {0, 0, 0x5287} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page6 = { 0, marc8_31page6_dir }; /* PAGE 5 */ struct yaz_iconv_trie_dir marc8_31page5_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5018} /* East Asian ideograph */, {0, 0, 0x4FF1} /* East Asian ideograph */, {0, 0, 0x5021} /* East Asian ideograph */, {0, 0, 0x500B} /* East Asian ideograph */, {0, 0, 0x5019} /* East Asian ideograph */, {0, 0, 0x5000} /* East Asian ideograph */, {0, 0, 0x4FEE} /* East Asian ideograph */, {0, 0, 0x4FF3} /* East Asian ideograph */, {0, 0, 0x502D} /* East Asian ideograph */, {0, 0, 0x5003} /* East Asian ideograph */, {0, 0, 0x4FFE} /* East Asian ideograph */, {0, 0, 0x502A} /* East Asian ideograph */, {0, 0, 0x502B} /* East Asian ideograph */, {0, 0, 0x505C} /* East Asian ideograph */, {0, 0, 0x504F} /* East Asian ideograph */, {0, 0, 0x5065} /* East Asian ideograph */, {0, 0, 0x5047} /* East Asian ideograph */, {0, 0, 0x505A} /* East Asian ideograph */, {0, 0, 0x5049} /* East Asian ideograph */, {0, 0, 0x5043} /* East Asian ideograph */, {0, 0, 0x5074} /* East Asian ideograph */, {0, 0, 0x5076} /* East Asian ideograph */, {0, 0, 0x504E} /* East Asian ideograph */, {0, 0, 0x5075} /* East Asian ideograph */, {0, 0, 0x504C} /* East Asian ideograph */, {0, 0, 0x5055} /* East Asian ideograph */, {0, 0, 0x500F} /* East Asian ideograph */, {0, 0, 0x5077} /* East Asian ideograph */, {0, 0, 0x508D} /* East Asian ideograph */, {0, 0, 0x50A2} /* East Asian ideograph */, {0, 0, 0x5085} /* East Asian ideograph */, {0, 0, 0x5099} /* East Asian ideograph */, {0, 0, 0x5091} /* East Asian ideograph */, {0, 0, 0x5080} /* East Asian ideograph */, {0, 0, 0x5096} /* East Asian ideograph */, {0, 0, 0x5098} /* East Asian ideograph */, {0, 0, 0x50AD} /* East Asian ideograph */, {0, 0, 0x50B3} /* East Asian ideograph */, {0, 0, 0x50B5} /* East Asian ideograph */, {0, 0, 0x50B2} /* East Asian ideograph */, {0, 0, 0x50C5} /* East Asian ideograph */, {0, 0, 0x50BE} /* East Asian ideograph */, {0, 0, 0x50AC} /* East Asian ideograph */, {0, 0, 0x50B7} /* East Asian ideograph */, {0, 0, 0x50AF} /* East Asian ideograph */, {0, 0, 0x50E7} /* East Asian ideograph */, {0, 0, 0x50EE} /* East Asian ideograph */, {0, 0, 0x50F1} /* East Asian ideograph */, {0, 0, 0x50E5} /* East Asian ideograph */, {0, 0, 0x50D6} /* East Asian ideograph */, {0, 0, 0x50ED} /* East Asian ideograph */, {0, 0, 0x50DA} /* East Asian ideograph */, {0, 0, 0x50D5} /* East Asian ideograph */, {0, 0, 0x507D} /* East Asian ideograph */, {0, 0, 0x50CF} /* East Asian ideograph */, {0, 0, 0x50D1} /* East Asian ideograph */, {0, 0, 0x5100} /* East Asian ideograph */, {0, 0, 0x5104} /* East Asian ideograph */, {0, 0, 0x50FB} /* East Asian ideograph */, {0, 0, 0x50F5} /* East Asian ideograph */, {0, 0, 0x50F9} /* East Asian ideograph */, {0, 0, 0x5102} /* East Asian ideograph */, {0, 0, 0x510D} /* East Asian ideograph */, {0, 0, 0x5108} /* East Asian ideograph */, {0, 0, 0x5109} /* East Asian ideograph */, {0, 0, 0x5110} /* East Asian ideograph */, {0, 0, 0x5118} /* East Asian ideograph */, {0, 0, 0x5112} /* East Asian ideograph */, {0, 0, 0x5114} /* East Asian ideograph */, {0, 0, 0x512A} /* East Asian ideograph */, {0, 0, 0x511F} /* East Asian ideograph */, {0, 0, 0x5121} /* East Asian ideograph */, {0, 0, 0x5132} /* East Asian ideograph */, {0, 0, 0x5137} /* East Asian ideograph */, {0, 0, 0x513C} /* East Asian ideograph */, {0, 0, 0x5140} /* East Asian ideograph */, {0, 0, 0x5143} /* East Asian ideograph */, {0, 0, 0x5141} /* East Asian ideograph */, {0, 0, 0x5145} /* East Asian ideograph */, {0, 0, 0x5144} /* East Asian ideograph */, {0, 0, 0x5146} /* East Asian ideograph */, {0, 0, 0x5149} /* East Asian ideograph */, {0, 0, 0x5147} /* East Asian ideograph */, {0, 0, 0x5148} /* East Asian ideograph */, {0, 0, 0x514C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x514D} /* East Asian ideograph */, {0, 0, 0x5155} /* East Asian ideograph */, {0, 0, 0x5154} /* East Asian ideograph */, {0, 0, 0x5152} /* East Asian ideograph */, {0, 0, 0x5157} /* East Asian ideograph */, {0, 0, 0x515C} /* East Asian ideograph */, {0, 0, 0x5162} /* East Asian ideograph */, {0, 0, 0x5165} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page5 = { 0, marc8_31page5_dir }; /* PAGE 4 */ struct yaz_iconv_trie_dir marc8_31page4_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x4F11} /* East Asian ideograph */, {0, 0, 0x4F10} /* East Asian ideograph */, {0, 0, 0x4F0F} /* East Asian ideograph */, {0, 0, 0x4EF2} /* East Asian ideograph */, {0, 0, 0x4F01} /* East Asian ideograph */, {0, 0, 0x4EF3} /* East Asian ideograph */, {0, 0, 0x4EF6} /* East Asian ideograph */, {0, 0, 0x4EF0} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4F4F} /* East Asian ideograph */, {0, 0, 0x4F4D} /* East Asian ideograph */, {0, 0, 0x4F34} /* East Asian ideograph */, {0, 0, 0x4F47} /* East Asian ideograph */, {0, 0, 0x4F57} /* East Asian ideograph */, {0, 0, 0x4F3A} /* East Asian ideograph */, {0, 0, 0x4F5E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4F5B} /* East Asian ideograph */, {0, 0, 0x4F55} /* East Asian ideograph */, {0, 0, 0x4F30} /* East Asian ideograph */, {0, 0, 0x4F50} /* East Asian ideograph */, {0, 0, 0x4F51} /* East Asian ideograph */, {0, 0, 0x4F3D} /* East Asian ideograph */, {0, 0, 0x4F48} /* East Asian ideograph */, {0, 0, 0x4F46} /* East Asian ideograph */, {0, 0, 0x4F38} /* East Asian ideograph */, {0, 0, 0x4F43} /* East Asian ideograph */, {0, 0, 0x4F54} /* East Asian ideograph */, {0, 0, 0x4F3C} /* East Asian ideograph */, {0, 0, 0x4F63} /* East Asian ideograph */, {0, 0, 0x4F5C} /* East Asian ideograph */, {0, 0, 0x4F60} /* East Asian ideograph */, {0, 0, 0x4F2F} /* East Asian ideograph */, {0, 0, 0x4F4E} /* East Asian ideograph */, {0, 0, 0x4F5D} /* East Asian ideograph */, {0, 0, 0x4F36} /* East Asian ideograph */, {0, 0, 0x4F9D} /* East Asian ideograph */, {0, 0, 0x4F6F} /* East Asian ideograph */, {0, 0, 0x4F75} /* East Asian ideograph */, {0, 0, 0x4F8D} /* East Asian ideograph */, {0, 0, 0x4F73} /* East Asian ideograph */, {0, 0, 0x4F7F} /* East Asian ideograph */, {0, 0, 0x4F9B} /* East Asian ideograph */, {0, 0, 0x4F86} /* East Asian ideograph */, {0, 0, 0x4F6C} /* East Asian ideograph */, {0, 0, 0x4F8B} /* East Asian ideograph */, {0, 0, 0x4F96} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4F83} /* East Asian ideograph */, {0, 0, 0x4F7B} /* East Asian ideograph */, {0, 0, 0x4F88} /* East Asian ideograph */, {0, 0, 0x4F69} /* East Asian ideograph */, {0, 0, 0x4F8F} /* East Asian ideograph */, {0, 0, 0x4F7E} /* East Asian ideograph */, {0, 0, 0x4FE1} /* East Asian ideograph */, {0, 0, 0x4FD1} /* East Asian ideograph */, {0, 0, 0x4FB5} /* East Asian ideograph */, {0, 0, 0x4FAF} /* East Asian ideograph */, {0, 0, 0x4FBF} /* East Asian ideograph */, {0, 0, 0x4FDE} /* East Asian ideograph */, {0, 0, 0x4FE0} /* East Asian ideograph */, {0, 0, 0x4FCF} /* East Asian ideograph */, {0, 0, 0x4FB6} /* East Asian ideograph */, {0, 0, 0x4FDA} /* East Asian ideograph */, {0, 0, 0x4FDD} /* East Asian ideograph */, {0, 0, 0x4FC3} /* East Asian ideograph */, {0, 0, 0x4FD8} /* East Asian ideograph */, {0, 0, 0x4FDF} /* East Asian ideograph */, {0, 0, 0x4FCA} /* East Asian ideograph */, {0, 0, 0x4FAE} /* East Asian ideograph */, {0, 0, 0x4FD0} /* East Asian ideograph */, {0, 0, 0x4FC4} /* East Asian ideograph */, {0, 0, 0x4FC2} /* East Asian ideograph */, {0, 0, 0x4FCE} /* East Asian ideograph */, {0, 0, 0x4FD7} /* East Asian ideograph */, {0, 0, 0x5009} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x500D} /* East Asian ideograph */, {0, 0, 0x4FEF} /* East Asian ideograph */, {0, 0, 0x5026} /* East Asian ideograph */, {0, 0, 0x500C} /* East Asian ideograph */, {0, 0, 0x5025} /* East Asian ideograph */, {0, 0, 0x5011} /* East Asian ideograph */, {0, 0, 0x4FF8} /* East Asian ideograph */, {0, 0, 0x5028} /* East Asian ideograph */, {0, 0, 0x5014} /* East Asian ideograph */, {0, 0, 0x5016} /* East Asian ideograph */, {0, 0, 0x5029} /* East Asian ideograph */, {0, 0, 0x5006} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x5012} /* East Asian ideograph */, {0, 0, 0x503C} /* East Asian ideograph */, {0, 0, 0x501A} /* East Asian ideograph */, {0, 0, 0x4FFA} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page4 = { 0, marc8_31page4_dir }; /* PAGE 3 */ struct yaz_iconv_trie_dir marc8_31page3_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x4E00} /* East Asian ideograph */, {0, 0, 0x4E01} /* East Asian ideograph */, {0, 0, 0x4E03} /* East Asian ideograph */, {0, 0, 0x4E09} /* East Asian ideograph */, {0, 0, 0x4E0B} /* East Asian ideograph */, {0, 0, 0x4E0A} /* East Asian ideograph */, {0, 0, 0x4E08} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4E10} /* East Asian ideograph */, {0, 0, 0x4E0D} /* East Asian ideograph */, {0, 0, 0x4E14} /* East Asian ideograph */, {0, 0, 0x4E19} /* East Asian ideograph */, {0, 0, 0x4E16} /* East Asian ideograph */, {0, 0, 0x4E15} /* East Asian ideograph */, {0, 0, 0x4E18} /* East Asian ideograph */, {0, 0, 0x4E22} /* East Asian ideograph */, {0, 0, 0x4E1E} /* East Asian ideograph */, {0, 0, 0x4E26} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4E2D} /* East Asian ideograph */, {0, 0, 0x4E32} /* East Asian ideograph */, {0, 0, 0x51E1} /* East Asian ideograph */, {0, 0, 0x4E38} /* East Asian ideograph */, {0, 0, 0x4E39} /* East Asian ideograph */, {0, 0, 0x4E3B} /* East Asian ideograph */, {0, 0, 0x4E43} /* East Asian ideograph */, {0, 0, 0x4E45} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4E4B} /* East Asian ideograph */, {0, 0, 0x5C39} /* East Asian ideograph */, {0, 0, 0x4E4F} /* East Asian ideograph */, {0, 0, 0x4E4E} /* East Asian ideograph */, {0, 0, 0x4E4D} /* East Asian ideograph */, {0, 0, 0x4E52} /* East Asian ideograph */, {0, 0, 0x4E53} /* East Asian ideograph */, {0, 0, 0x4E56} /* East Asian ideograph */, {0, 0, 0x4E58} /* East Asian ideograph */, {0, 0, 0x4E59} /* East Asian ideograph */, {0, 0, 0x4E5D} /* East Asian ideograph */, {0, 0, 0x4E5F} /* East Asian ideograph */, {0, 0, 0x4E5E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4E73} /* East Asian ideograph */, {0, 0, 0x4E7E} /* East Asian ideograph */, {0, 0, 0x4E82} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x4E8B} /* East Asian ideograph */, {0, 0, 0x4E8C} /* East Asian ideograph */, {0, 0, 0x4E8E} /* East Asian ideograph */, {0, 0, 0x4E95} /* East Asian ideograph */, {0, 0, 0x4E94} /* East Asian ideograph */, {0, 0, 0x4E92} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4E99} /* East Asian ideograph (variant of EACC 4B3057) */, {0, 0, 0x4E9E} /* East Asian ideograph */, {0, 0, 0x4E9B} /* East Asian ideograph */, {0, 0, 0x4E9F} /* East Asian ideograph */, {0, 0, 0x4EA1} /* East Asian ideograph */, {0, 0, 0x4EA6} /* East Asian ideograph */, {0, 0, 0x4EA5} /* East Asian ideograph */, {0, 0, 0x4EA4} /* East Asian ideograph */, {0, 0, 0x4EA8} /* East Asian ideograph */, {0, 0, 0x4EAB} /* East Asian ideograph */, {0, 0, 0x4EAC} /* East Asian ideograph */, {0, 0, 0x4EAD} /* East Asian ideograph */, {0, 0, 0x4EAE} /* East Asian ideograph */, {0, 0, 0x4EBA} /* East Asian ideograph */, {0, 0, 0x4ECA} /* East Asian ideograph */, {0, 0, 0x4EC1} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4EC3} /* East Asian ideograph */, {0, 0, 0x4EC4} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4ECD} /* East Asian ideograph */, {0, 0, 0x4EC7} /* East Asian ideograph */, {0, 0, 0x4ECB} /* East Asian ideograph */, {0, 0, 0x4EE4} /* East Asian ideograph */, {0, 0, 0x4ED8} /* East Asian ideograph */, {0, 0, 0x4ED5} /* East Asian ideograph */, {0, 0, 0x4ED6} /* East Asian ideograph */, {0, 0, 0x4EDE} /* East Asian ideograph */, {0, 0, 0x4EE3} /* East Asian ideograph */, {0, 0, 0x4ED4} /* East Asian ideograph */, {0, 0, 0x4ED7} /* East Asian ideograph */, {0, 0, 0x4ED9} /* East Asian ideograph */, {0, 0, 0x4EE5} /* East Asian ideograph */, {0, 0, 0x4EFF} /* East Asian ideograph */, {0, 0, 0x4F09} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x4EFB} /* East Asian ideograph */, {0, 0, 0x4F0A} /* East Asian ideograph */, {0, 0, 0x4F15} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page3 = { 0, marc8_31page3_dir }; /* PAGE 2 */ struct yaz_iconv_trie_flat marc8_31page2_flat[] = { {"\x30", 0, 0x3007}, /* East Asian ideograph (number zero) */ {"", 0, 0} }; struct yaz_iconv_trie marc8_31page2 = { marc8_31page2_flat, 0 }; /* PAGE 1 */ struct yaz_iconv_trie_dir marc8_31page1_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {826, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {827, 0, 0}, {828, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {3, 0, 0}, {4, 0, 0}, {5, 0, 0}, {6, 0, 0}, {7, 0, 0}, {8, 0, 0}, {9, 0, 0}, {10, 0, 0}, {11, 0, 0}, {12, 0, 0}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0}, {21, 0, 0}, {22, 0, 0}, {23, 0, 0}, {24, 0, 0}, {25, 0, 0}, {26, 0, 0}, {27, 0, 0}, {28, 0, 0}, {29, 0, 0}, {30, 0, 0}, {31, 0, 0}, {32, 0, 0}, {33, 0, 0}, {34, 0, 0}, {35, 0, 0}, {36, 0, 0}, {37, 0, 0}, {38, 0, 0}, {39, 0, 0}, {40, 0, 0}, {41, 0, 0}, {42, 0, 0}, {43, 0, 0}, {44, 0, 0}, {45, 0, 0}, {46, 0, 0}, {47, 0, 0}, {48, 0, 0}, {49, 0, 0}, {50, 0, 0}, {51, 0, 0}, {52, 0, 0}, {53, 0, 0}, {54, 0, 0}, {55, 0, 0}, {56, 0, 0}, {57, 0, 0}, {58, 0, 0}, {59, 0, 0}, {60, 0, 0}, {61, 0, 0}, {62, 0, 0}, {63, 0, 0}, {64, 0, 0}, {65, 0, 0}, {66, 0, 0}, {67, 0, 0}, {68, 0, 0}, {69, 0, 0}, {70, 0, 0}, {71, 0, 0}, {72, 0, 0}, {73, 0, 0}, {74, 0, 0}, {75, 0, 0}, {76, 0, 0}, {77, 0, 0}, {78, 0, 0}, {79, 0, 0}, {80, 0, 0}, {81, 0, 0}, {82, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page1 = { 0, marc8_31page1_dir }; /* PAGE 0 */ struct yaz_iconv_trie_dir marc8_31page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {2, 0, 0}, {83, 0, 0}, {177, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {241, 0, 0}, {314, 0, 0}, {381, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {438, 0, 0}, {498, 0, 0}, {545, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {546, 0, 0}, {597, 0, 0}, {598, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {599, 0, 0}, {641, 0, 0}, {642, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {643, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {644, 0, 0}, {645, 0, 0}, {646, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {647, 0, 0}, {710, 0, 0}, {753, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {754, 0, 0}, {755, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {756, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {798, 0, 0}, {794, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8_31page0 = { 0, marc8_31page0_dir }; struct yaz_iconv_trie *marc8_31ptrs [] = { &marc8_31page0, &marc8_31page1, &marc8_31page2, &marc8_31page3, &marc8_31page4, &marc8_31page5, &marc8_31page6, &marc8_31page7, &marc8_31page8, &marc8_31page9, &marc8_31page10, &marc8_31page11, &marc8_31page12, &marc8_31page13, &marc8_31page14, &marc8_31page15, &marc8_31page16, &marc8_31page17, &marc8_31page18, &marc8_31page19, &marc8_31page20, &marc8_31page21, &marc8_31page22, &marc8_31page23, &marc8_31page24, &marc8_31page25, &marc8_31page26, &marc8_31page27, &marc8_31page28, &marc8_31page29, &marc8_31page30, &marc8_31page31, &marc8_31page32, &marc8_31page33, &marc8_31page34, &marc8_31page35, &marc8_31page36, &marc8_31page37, &marc8_31page38, &marc8_31page39, &marc8_31page40, &marc8_31page41, &marc8_31page42, &marc8_31page43, &marc8_31page44, &marc8_31page45, &marc8_31page46, &marc8_31page47, &marc8_31page48, &marc8_31page49, &marc8_31page50, &marc8_31page51, &marc8_31page52, &marc8_31page53, &marc8_31page54, &marc8_31page55, &marc8_31page56, &marc8_31page57, &marc8_31page58, &marc8_31page59, &marc8_31page60, &marc8_31page61, &marc8_31page62, &marc8_31page63, &marc8_31page64, &marc8_31page65, &marc8_31page66, &marc8_31page67, &marc8_31page68, &marc8_31page69, &marc8_31page70, &marc8_31page71, &marc8_31page72, &marc8_31page73, &marc8_31page74, &marc8_31page75, &marc8_31page76, &marc8_31page77, &marc8_31page78, &marc8_31page79, &marc8_31page80, &marc8_31page81, &marc8_31page82, &marc8_31page83, &marc8_31page84, &marc8_31page85, &marc8_31page86, &marc8_31page87, &marc8_31page88, &marc8_31page89, &marc8_31page90, &marc8_31page91, &marc8_31page92, &marc8_31page93, &marc8_31page94, &marc8_31page95, &marc8_31page96, &marc8_31page97, &marc8_31page98, &marc8_31page99, &marc8_31page100, &marc8_31page101, &marc8_31page102, &marc8_31page103, &marc8_31page104, &marc8_31page105, &marc8_31page106, &marc8_31page107, &marc8_31page108, &marc8_31page109, &marc8_31page110, &marc8_31page111, &marc8_31page112, &marc8_31page113, &marc8_31page114, &marc8_31page115, &marc8_31page116, &marc8_31page117, &marc8_31page118, &marc8_31page119, &marc8_31page120, &marc8_31page121, &marc8_31page122, &marc8_31page123, &marc8_31page124, &marc8_31page125, &marc8_31page126, &marc8_31page127, &marc8_31page128, &marc8_31page129, &marc8_31page130, &marc8_31page131, &marc8_31page132, &marc8_31page133, &marc8_31page134, &marc8_31page135, &marc8_31page136, &marc8_31page137, &marc8_31page138, &marc8_31page139, &marc8_31page140, &marc8_31page141, &marc8_31page142, &marc8_31page143, &marc8_31page144, &marc8_31page145, &marc8_31page146, &marc8_31page147, &marc8_31page148, &marc8_31page149, &marc8_31page150, &marc8_31page151, &marc8_31page152, &marc8_31page153, &marc8_31page154, &marc8_31page155, &marc8_31page156, &marc8_31page157, &marc8_31page158, &marc8_31page159, &marc8_31page160, &marc8_31page161, &marc8_31page162, &marc8_31page163, &marc8_31page164, &marc8_31page165, &marc8_31page166, &marc8_31page167, &marc8_31page168, &marc8_31page169, &marc8_31page170, &marc8_31page171, &marc8_31page172, &marc8_31page173, &marc8_31page174, &marc8_31page175, &marc8_31page176, &marc8_31page177, &marc8_31page178, &marc8_31page179, &marc8_31page180, &marc8_31page181, &marc8_31page182, &marc8_31page183, &marc8_31page184, &marc8_31page185, &marc8_31page186, &marc8_31page187, &marc8_31page188, &marc8_31page189, &marc8_31page190, &marc8_31page191, &marc8_31page192, &marc8_31page193, &marc8_31page194, &marc8_31page195, &marc8_31page196, &marc8_31page197, &marc8_31page198, &marc8_31page199, &marc8_31page200, &marc8_31page201, &marc8_31page202, &marc8_31page203, &marc8_31page204, &marc8_31page205, &marc8_31page206, &marc8_31page207, &marc8_31page208, &marc8_31page209, &marc8_31page210, &marc8_31page211, &marc8_31page212, &marc8_31page213, &marc8_31page214, &marc8_31page215, &marc8_31page216, &marc8_31page217, &marc8_31page218, &marc8_31page219, &marc8_31page220, &marc8_31page221, &marc8_31page222, &marc8_31page223, &marc8_31page224, &marc8_31page225, &marc8_31page226, &marc8_31page227, &marc8_31page228, &marc8_31page229, &marc8_31page230, &marc8_31page231, &marc8_31page232, &marc8_31page233, &marc8_31page234, &marc8_31page235, &marc8_31page236, &marc8_31page237, &marc8_31page238, &marc8_31page239, &marc8_31page240, &marc8_31page241, &marc8_31page242, &marc8_31page243, &marc8_31page244, &marc8_31page245, &marc8_31page246, &marc8_31page247, &marc8_31page248, &marc8_31page249, &marc8_31page250, &marc8_31page251, &marc8_31page252, &marc8_31page253, &marc8_31page254, &marc8_31page255, &marc8_31page256, &marc8_31page257, &marc8_31page258, &marc8_31page259, &marc8_31page260, &marc8_31page261, &marc8_31page262, &marc8_31page263, &marc8_31page264, &marc8_31page265, &marc8_31page266, &marc8_31page267, &marc8_31page268, &marc8_31page269, &marc8_31page270, &marc8_31page271, &marc8_31page272, &marc8_31page273, &marc8_31page274, &marc8_31page275, &marc8_31page276, &marc8_31page277, &marc8_31page278, &marc8_31page279, &marc8_31page280, &marc8_31page281, &marc8_31page282, &marc8_31page283, &marc8_31page284, &marc8_31page285, &marc8_31page286, &marc8_31page287, &marc8_31page288, &marc8_31page289, &marc8_31page290, &marc8_31page291, &marc8_31page292, &marc8_31page293, &marc8_31page294, &marc8_31page295, &marc8_31page296, &marc8_31page297, &marc8_31page298, &marc8_31page299, &marc8_31page300, &marc8_31page301, &marc8_31page302, &marc8_31page303, &marc8_31page304, &marc8_31page305, &marc8_31page306, &marc8_31page307, &marc8_31page308, &marc8_31page309, &marc8_31page310, &marc8_31page311, &marc8_31page312, &marc8_31page313, &marc8_31page314, &marc8_31page315, &marc8_31page316, &marc8_31page317, &marc8_31page318, &marc8_31page319, &marc8_31page320, &marc8_31page321, &marc8_31page322, &marc8_31page323, &marc8_31page324, &marc8_31page325, &marc8_31page326, &marc8_31page327, &marc8_31page328, &marc8_31page329, &marc8_31page330, &marc8_31page331, &marc8_31page332, &marc8_31page333, &marc8_31page334, &marc8_31page335, &marc8_31page336, &marc8_31page337, &marc8_31page338, &marc8_31page339, &marc8_31page340, &marc8_31page341, &marc8_31page342, &marc8_31page343, &marc8_31page344, &marc8_31page345, &marc8_31page346, &marc8_31page347, &marc8_31page348, &marc8_31page349, &marc8_31page350, &marc8_31page351, &marc8_31page352, &marc8_31page353, &marc8_31page354, &marc8_31page355, &marc8_31page356, &marc8_31page357, &marc8_31page358, &marc8_31page359, &marc8_31page360, &marc8_31page361, &marc8_31page362, &marc8_31page363, &marc8_31page364, &marc8_31page365, &marc8_31page366, &marc8_31page367, &marc8_31page368, &marc8_31page369, &marc8_31page370, &marc8_31page371, &marc8_31page372, &marc8_31page373, &marc8_31page374, &marc8_31page375, &marc8_31page376, &marc8_31page377, &marc8_31page378, &marc8_31page379, &marc8_31page380, &marc8_31page381, &marc8_31page382, &marc8_31page383, &marc8_31page384, &marc8_31page385, &marc8_31page386, &marc8_31page387, &marc8_31page388, &marc8_31page389, &marc8_31page390, &marc8_31page391, &marc8_31page392, &marc8_31page393, &marc8_31page394, &marc8_31page395, &marc8_31page396, &marc8_31page397, &marc8_31page398, &marc8_31page399, &marc8_31page400, &marc8_31page401, &marc8_31page402, &marc8_31page403, &marc8_31page404, &marc8_31page405, &marc8_31page406, &marc8_31page407, &marc8_31page408, &marc8_31page409, &marc8_31page410, &marc8_31page411, &marc8_31page412, &marc8_31page413, &marc8_31page414, &marc8_31page415, &marc8_31page416, &marc8_31page417, &marc8_31page418, &marc8_31page419, &marc8_31page420, &marc8_31page421, &marc8_31page422, &marc8_31page423, &marc8_31page424, &marc8_31page425, &marc8_31page426, &marc8_31page427, &marc8_31page428, &marc8_31page429, &marc8_31page430, &marc8_31page431, &marc8_31page432, &marc8_31page433, &marc8_31page434, &marc8_31page435, &marc8_31page436, &marc8_31page437, &marc8_31page438, &marc8_31page439, &marc8_31page440, &marc8_31page441, &marc8_31page442, &marc8_31page443, &marc8_31page444, &marc8_31page445, &marc8_31page446, &marc8_31page447, &marc8_31page448, &marc8_31page449, &marc8_31page450, &marc8_31page451, &marc8_31page452, &marc8_31page453, &marc8_31page454, &marc8_31page455, &marc8_31page456, &marc8_31page457, &marc8_31page458, &marc8_31page459, &marc8_31page460, &marc8_31page461, &marc8_31page462, &marc8_31page463, &marc8_31page464, &marc8_31page465, &marc8_31page466, &marc8_31page467, &marc8_31page468, &marc8_31page469, &marc8_31page470, &marc8_31page471, &marc8_31page472, &marc8_31page473, &marc8_31page474, &marc8_31page475, &marc8_31page476, &marc8_31page477, &marc8_31page478, &marc8_31page479, &marc8_31page480, &marc8_31page481, &marc8_31page482, &marc8_31page483, &marc8_31page484, &marc8_31page485, &marc8_31page486, &marc8_31page487, &marc8_31page488, &marc8_31page489, &marc8_31page490, &marc8_31page491, &marc8_31page492, &marc8_31page493, &marc8_31page494, &marc8_31page495, &marc8_31page496, &marc8_31page497, &marc8_31page498, &marc8_31page499, &marc8_31page500, &marc8_31page501, &marc8_31page502, &marc8_31page503, &marc8_31page504, &marc8_31page505, &marc8_31page506, &marc8_31page507, &marc8_31page508, &marc8_31page509, &marc8_31page510, &marc8_31page511, &marc8_31page512, &marc8_31page513, &marc8_31page514, &marc8_31page515, &marc8_31page516, &marc8_31page517, &marc8_31page518, &marc8_31page519, &marc8_31page520, &marc8_31page521, &marc8_31page522, &marc8_31page523, &marc8_31page524, &marc8_31page525, &marc8_31page526, &marc8_31page527, &marc8_31page528, &marc8_31page529, &marc8_31page530, &marc8_31page531, &marc8_31page532, &marc8_31page533, &marc8_31page534, &marc8_31page535, &marc8_31page536, &marc8_31page537, &marc8_31page538, &marc8_31page539, &marc8_31page540, &marc8_31page541, &marc8_31page542, &marc8_31page543, &marc8_31page544, &marc8_31page545, &marc8_31page546, &marc8_31page547, &marc8_31page548, &marc8_31page549, &marc8_31page550, &marc8_31page551, &marc8_31page552, &marc8_31page553, &marc8_31page554, &marc8_31page555, &marc8_31page556, &marc8_31page557, &marc8_31page558, &marc8_31page559, &marc8_31page560, &marc8_31page561, &marc8_31page562, &marc8_31page563, &marc8_31page564, &marc8_31page565, &marc8_31page566, &marc8_31page567, &marc8_31page568, &marc8_31page569, &marc8_31page570, &marc8_31page571, &marc8_31page572, &marc8_31page573, &marc8_31page574, &marc8_31page575, &marc8_31page576, &marc8_31page577, &marc8_31page578, &marc8_31page579, &marc8_31page580, &marc8_31page581, &marc8_31page582, &marc8_31page583, &marc8_31page584, &marc8_31page585, &marc8_31page586, &marc8_31page587, &marc8_31page588, &marc8_31page589, &marc8_31page590, &marc8_31page591, &marc8_31page592, &marc8_31page593, &marc8_31page594, &marc8_31page595, &marc8_31page596, &marc8_31page597, &marc8_31page598, &marc8_31page599, &marc8_31page600, &marc8_31page601, &marc8_31page602, &marc8_31page603, &marc8_31page604, &marc8_31page605, &marc8_31page606, &marc8_31page607, &marc8_31page608, &marc8_31page609, &marc8_31page610, &marc8_31page611, &marc8_31page612, &marc8_31page613, &marc8_31page614, &marc8_31page615, &marc8_31page616, &marc8_31page617, &marc8_31page618, &marc8_31page619, &marc8_31page620, &marc8_31page621, &marc8_31page622, &marc8_31page623, &marc8_31page624, &marc8_31page625, &marc8_31page626, &marc8_31page627, &marc8_31page628, &marc8_31page629, &marc8_31page630, &marc8_31page631, &marc8_31page632, &marc8_31page633, &marc8_31page634, &marc8_31page635, &marc8_31page636, &marc8_31page637, &marc8_31page638, &marc8_31page639, &marc8_31page640, &marc8_31page641, &marc8_31page642, &marc8_31page643, &marc8_31page644, &marc8_31page645, &marc8_31page646, &marc8_31page647, &marc8_31page648, &marc8_31page649, &marc8_31page650, &marc8_31page651, &marc8_31page652, &marc8_31page653, &marc8_31page654, &marc8_31page655, &marc8_31page656, &marc8_31page657, &marc8_31page658, &marc8_31page659, &marc8_31page660, &marc8_31page661, &marc8_31page662, &marc8_31page663, &marc8_31page664, &marc8_31page665, &marc8_31page666, &marc8_31page667, &marc8_31page668, &marc8_31page669, &marc8_31page670, &marc8_31page671, &marc8_31page672, &marc8_31page673, &marc8_31page674, &marc8_31page675, &marc8_31page676, &marc8_31page677, &marc8_31page678, &marc8_31page679, &marc8_31page680, &marc8_31page681, &marc8_31page682, &marc8_31page683, &marc8_31page684, &marc8_31page685, &marc8_31page686, &marc8_31page687, &marc8_31page688, &marc8_31page689, &marc8_31page690, &marc8_31page691, &marc8_31page692, &marc8_31page693, &marc8_31page694, &marc8_31page695, &marc8_31page696, &marc8_31page697, &marc8_31page698, &marc8_31page699, &marc8_31page700, &marc8_31page701, &marc8_31page702, &marc8_31page703, &marc8_31page704, &marc8_31page705, &marc8_31page706, &marc8_31page707, &marc8_31page708, &marc8_31page709, &marc8_31page710, &marc8_31page711, &marc8_31page712, &marc8_31page713, &marc8_31page714, &marc8_31page715, &marc8_31page716, &marc8_31page717, &marc8_31page718, &marc8_31page719, &marc8_31page720, &marc8_31page721, &marc8_31page722, &marc8_31page723, &marc8_31page724, &marc8_31page725, &marc8_31page726, &marc8_31page727, &marc8_31page728, &marc8_31page729, &marc8_31page730, &marc8_31page731, &marc8_31page732, &marc8_31page733, &marc8_31page734, &marc8_31page735, &marc8_31page736, &marc8_31page737, &marc8_31page738, &marc8_31page739, &marc8_31page740, &marc8_31page741, &marc8_31page742, &marc8_31page743, &marc8_31page744, &marc8_31page745, &marc8_31page746, &marc8_31page747, &marc8_31page748, &marc8_31page749, &marc8_31page750, &marc8_31page751, &marc8_31page752, &marc8_31page753, &marc8_31page754, &marc8_31page755, &marc8_31page756, &marc8_31page757, &marc8_31page758, &marc8_31page759, &marc8_31page760, &marc8_31page761, &marc8_31page762, &marc8_31page763, &marc8_31page764, &marc8_31page765, &marc8_31page766, &marc8_31page767, &marc8_31page768, &marc8_31page769, &marc8_31page770, &marc8_31page771, &marc8_31page772, &marc8_31page773, &marc8_31page774, &marc8_31page775, &marc8_31page776, &marc8_31page777, &marc8_31page778, &marc8_31page779, &marc8_31page780, &marc8_31page781, &marc8_31page782, &marc8_31page783, &marc8_31page784, &marc8_31page785, &marc8_31page786, &marc8_31page787, &marc8_31page788, &marc8_31page789, &marc8_31page790, &marc8_31page791, &marc8_31page792, &marc8_31page793, &marc8_31page794, &marc8_31page795, &marc8_31page796, &marc8_31page797, &marc8_31page798, &marc8_31page799, &marc8_31page800, &marc8_31page801, &marc8_31page802, &marc8_31page803, &marc8_31page804, &marc8_31page805, &marc8_31page806, &marc8_31page807, &marc8_31page808, &marc8_31page809, &marc8_31page810, &marc8_31page811, &marc8_31page812, &marc8_31page813, &marc8_31page814, &marc8_31page815, &marc8_31page816, &marc8_31page817, &marc8_31page818, &marc8_31page819, &marc8_31page820, &marc8_31page821, &marc8_31page822, &marc8_31page823, &marc8_31page824, &marc8_31page825, &marc8_31page826, &marc8_31page827, 0, }; unsigned long yaz_marc8_31_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8_31ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } yaz-5.28.0/src/zoom-z3950.c0000644000175000017500000017404113401566713012056 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zoom-z3950.c * \brief Implements ZOOM Z39.50 handling */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "zoom-p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* * This wrapper is just for logging failed lookups. It would be nicer * if it could cause failure when a lookup fails, but that's hard. */ static Odr_oid *zoom_yaz_str_to_z3950oid(ZOOM_connection c, oid_class oid_class, const char *str) { Odr_oid *res = yaz_string_to_oid_odr(yaz_oid_std(), oid_class, str, c->odr_out); if (res == 0) yaz_log(YLOG_WARN, "%p OID lookup (%d, '%s') failed", c, (int) oid_class, str); return res; } static Z_APDU *create_es_package(ZOOM_package p, const Odr_oid *oid) { const char *str; Z_APDU *apdu = zget_APDU(p->odr_out, Z_APDU_extendedServicesRequest); Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; str = ZOOM_options_get(p->options, "package-name"); if (str && *str) req->packageName = odr_strdup(p->odr_out, str); str = ZOOM_options_get(p->options, "user-id"); if (str) req->userId = odr_strdup_null(p->odr_out, str); req->packageType = odr_oiddup(p->odr_out, oid); str = ZOOM_options_get(p->options, "function"); if (str) { if (!strcmp (str, "create")) *req->function = Z_ExtendedServicesRequest_create; if (!strcmp (str, "delete")) *req->function = Z_ExtendedServicesRequest_delete; if (!strcmp (str, "modify")) *req->function = Z_ExtendedServicesRequest_modify; } str = ZOOM_options_get(p->options, "waitAction"); if (str) { if (!strcmp (str, "wait")) *req->waitAction = Z_ExtendedServicesRequest_wait; if (!strcmp (str, "waitIfPossible")) *req->waitAction = Z_ExtendedServicesRequest_waitIfPossible; if (!strcmp (str, "dontWait")) *req->waitAction = Z_ExtendedServicesRequest_dontWait; if (!strcmp (str, "dontReturnPackage")) *req->waitAction = Z_ExtendedServicesRequest_dontReturnPackage; } return apdu; } static const char *ill_array_lookup(void *clientData, const char *idx) { ZOOM_package p = (ZOOM_package) clientData; return ZOOM_options_get(p->options, idx+4); } static Z_External *encode_ill_request(ZOOM_package p) { ODR out = p->odr_out; ILL_Request *req; Z_External *r = 0; struct ill_get_ctl ctl; ctl.odr = p->odr_out; ctl.clientData = p; ctl.f = ill_array_lookup; req = ill_get_ILLRequest(&ctl, "ill", 0); if (!ill_Request(out, &req, 0, 0)) { int ill_request_size; char *ill_request_buf = odr_getbuf(out, &ill_request_size, 0); if (ill_request_buf) odr_setbuf(out, ill_request_buf, ill_request_size, 1); return 0; } else { int illRequest_size = 0; char *illRequest_buf = odr_getbuf(out, &illRequest_size, 0); r = (Z_External *) odr_malloc(out, sizeof(*r)); r->direct_reference = odr_oiddup(out, yaz_oid_general_isoill_1); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_single; r->u.single_ASN1_type = odr_create_Odr_oct(out, illRequest_buf, illRequest_size); } return r; } static Z_ItemOrder *encode_item_order(ZOOM_package p) { Z_ItemOrder *req = (Z_ItemOrder *) odr_malloc(p->odr_out, sizeof(*req)); const char *str; int len; req->which = Z_IOItemOrder_esRequest; req->u.esRequest = (Z_IORequest *) odr_malloc(p->odr_out,sizeof(Z_IORequest)); /* to keep part ... */ req->u.esRequest->toKeep = (Z_IOOriginPartToKeep *) odr_malloc(p->odr_out,sizeof(Z_IOOriginPartToKeep)); req->u.esRequest->toKeep->supplDescription = 0; req->u.esRequest->toKeep->contact = (Z_IOContact *) odr_malloc(p->odr_out, sizeof(*req->u.esRequest->toKeep->contact)); str = ZOOM_options_get(p->options, "contact-name"); req->u.esRequest->toKeep->contact->name = odr_strdup_null(p->odr_out, str); str = ZOOM_options_get(p->options, "contact-phone"); req->u.esRequest->toKeep->contact->phone = odr_strdup_null(p->odr_out, str); str = ZOOM_options_get(p->options, "contact-email"); req->u.esRequest->toKeep->contact->email = odr_strdup_null(p->odr_out, str); req->u.esRequest->toKeep->addlBilling = 0; if (req->u.esRequest->toKeep->contact->name == 0 && req->u.esRequest->toKeep->contact->phone == 0 && req->u.esRequest->toKeep->contact->email == 0) req->u.esRequest->toKeep = 0; /* not to keep part ... */ req->u.esRequest->notToKeep = (Z_IOOriginPartNotToKeep *) odr_malloc(p->odr_out,sizeof(Z_IOOriginPartNotToKeep)); str = ZOOM_options_get(p->options, "itemorder-setname"); if (!str) str = "default"; if (!*str) req->u.esRequest->notToKeep->resultSetItem = 0; else { req->u.esRequest->notToKeep->resultSetItem = (Z_IOResultSetItem *) odr_malloc(p->odr_out, sizeof(Z_IOResultSetItem)); req->u.esRequest->notToKeep->resultSetItem->resultSetId = odr_strdup(p->odr_out, str); req->u.esRequest->notToKeep->resultSetItem->item = odr_intdup(p->odr_out, 0); str = ZOOM_options_get(p->options, "itemorder-item"); *req->u.esRequest->notToKeep->resultSetItem->item = (str ? atoi(str) : 1); } str = ZOOM_options_getl(p->options, "doc", &len); if (str) { req->u.esRequest->notToKeep->itemRequest = z_ext_record_xml(p->odr_out, str, len); } else req->u.esRequest->notToKeep->itemRequest = encode_ill_request(p); return req; } Z_APDU *create_admin_package(ZOOM_package p, int type, Z_ESAdminOriginPartToKeep **toKeepP, Z_ESAdminOriginPartNotToKeep **notToKeepP) { Z_APDU *apdu = create_es_package(p, yaz_oid_extserv_admin); if (apdu) { Z_ESAdminOriginPartToKeep *toKeep; Z_ESAdminOriginPartNotToKeep *notToKeep; Z_External *r = (Z_External *) odr_malloc(p->odr_out, sizeof(*r)); const char *first_db = "Default"; int num_db; char **db = ZOOM_connection_get_databases(p->connection, p->options, &num_db, p->odr_out); if (num_db > 0) first_db = db[0]; r->direct_reference = odr_oiddup(p->odr_out, yaz_oid_extserv_admin); r->descriptor = 0; r->indirect_reference = 0; r->which = Z_External_ESAdmin; r->u.adminService = (Z_Admin *) odr_malloc(p->odr_out, sizeof(*r->u.adminService)); r->u.adminService->which = Z_Admin_esRequest; r->u.adminService->u.esRequest = (Z_AdminEsRequest *) odr_malloc(p->odr_out, sizeof(*r->u.adminService->u.esRequest)); toKeep = r->u.adminService->u.esRequest->toKeep = (Z_ESAdminOriginPartToKeep *) odr_malloc(p->odr_out, sizeof(*r->u.adminService->u.esRequest->toKeep)); toKeep->which = type; toKeep->databaseName = odr_strdup(p->odr_out, first_db); toKeep->u.create = odr_nullval(); apdu->u.extendedServicesRequest->taskSpecificParameters = r; r->u.adminService->u.esRequest->notToKeep = notToKeep = (Z_ESAdminOriginPartNotToKeep *) odr_malloc(p->odr_out, sizeof(*r->u.adminService->u.esRequest->notToKeep)); notToKeep->which = Z_ESAdminOriginPartNotToKeep_recordsWillFollow; notToKeep->u.recordsWillFollow = odr_nullval(); if (toKeepP) *toKeepP = toKeep; if (notToKeepP) *notToKeepP = notToKeep; } return apdu; } static Z_APDU *create_xmlupdate_package(ZOOM_package p) { Z_APDU *apdu = create_es_package(p, yaz_oid_extserv_xml_es); Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; Z_External *ext = (Z_External *) odr_malloc(p->odr_out, sizeof(*ext)); int len; const char *doc = ZOOM_options_getl(p->options, "doc", &len); if (!doc) { doc = ""; len = 0; } req->taskSpecificParameters = ext; ext->direct_reference = req->packageType; ext->descriptor = 0; ext->indirect_reference = 0; ext->which = Z_External_octet; ext->u.single_ASN1_type = odr_create_Odr_oct(p->odr_out, doc, len); return apdu; } static Z_APDU *create_update_package(ZOOM_package p) { Z_APDU *apdu = 0; const char *first_db = "Default"; int num_db; char **db = ZOOM_connection_get_databases(p->connection, p->options, &num_db, p->odr_out); const char *action = ZOOM_options_get(p->options, "action"); int recordIdOpaque_len; const char *recordIdOpaque = ZOOM_options_getl(p->options, "recordIdOpaque", &recordIdOpaque_len); const char *recordIdNumber = ZOOM_options_get(p->options, "recordIdNumber"); const char *recordIdString = ZOOM_options_get(p->options, "recordIdString"); int record_len; const char *record_buf = ZOOM_options_getl(p->options, "record", &record_len); int recordOpaque_len; const char *recordOpaque_buf = ZOOM_options_getl(p->options, "recordOpaque", &recordOpaque_len); const char *syntax_str = ZOOM_options_get(p->options, "syntax"); const char *version = ZOOM_options_get(p->options, "updateVersion"); const char *correlationInfo_note = ZOOM_options_get(p->options, "correlationInfo.note"); const char *correlationInfo_id = ZOOM_options_get(p->options, "correlationInfo.id"); int action_no = -1; Odr_oid *syntax_oid = 0; const Odr_oid *package_oid = yaz_oid_extserv_database_update; if (!version) version = "3"; if (!syntax_str) syntax_str = "xml"; if (!record_buf && !recordOpaque_buf) { record_buf = "void"; record_len = 4; syntax_str = "SUTRS"; } if (syntax_str) { syntax_oid = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, syntax_str, p->odr_out); } if (!syntax_oid) { ZOOM_set_error(p->connection, ZOOM_ERROR_ES_INVALID_SYNTAX, syntax_str); return 0; } if (num_db > 0) first_db = db[0]; switch (*version) { case '1': package_oid = yaz_oid_extserv_database_update_first_version; /* old update does not support specialUpdate */ if (!action) action = "recordInsert"; break; case '2': if (!action) action = "specialUpdate"; package_oid = yaz_oid_extserv_database_update_second_version; break; case '3': if (!action) action = "specialUpdate"; package_oid = yaz_oid_extserv_database_update; break; default: ZOOM_set_error(p->connection, ZOOM_ERROR_ES_INVALID_VERSION, version); return 0; } if (!strcmp(action, "recordInsert")) action_no = Z_IUOriginPartToKeep_recordInsert; else if (!strcmp(action, "recordReplace")) action_no = Z_IUOriginPartToKeep_recordReplace; else if (!strcmp(action, "recordDelete")) action_no = Z_IUOriginPartToKeep_recordDelete; else if (!strcmp(action, "elementUpdate")) action_no = Z_IUOriginPartToKeep_elementUpdate; else if (!strcmp(action, "specialUpdate")) action_no = Z_IUOriginPartToKeep_specialUpdate; else { ZOOM_set_error(p->connection, ZOOM_ERROR_ES_INVALID_ACTION, action); return 0; } apdu = create_es_package(p, package_oid); if (apdu) { Z_IUOriginPartToKeep *toKeep; Z_IUSuppliedRecords *notToKeep; Z_External *r = (Z_External *) odr_malloc(p->odr_out, sizeof(*r)); const char *elementSetName = ZOOM_options_get(p->options, "elementSetName"); apdu->u.extendedServicesRequest->taskSpecificParameters = r; r->direct_reference = odr_oiddup(p->odr_out, package_oid); r->descriptor = 0; r->which = Z_External_update; r->indirect_reference = 0; r->u.update = (Z_IUUpdate *) odr_malloc(p->odr_out, sizeof(*r->u.update)); r->u.update->which = Z_IUUpdate_esRequest; r->u.update->u.esRequest = (Z_IUUpdateEsRequest *) odr_malloc(p->odr_out, sizeof(*r->u.update->u.esRequest)); toKeep = r->u.update->u.esRequest->toKeep = (Z_IUOriginPartToKeep *) odr_malloc(p->odr_out, sizeof(*toKeep)); toKeep->databaseName = odr_strdup(p->odr_out, first_db); toKeep->schema = 0; toKeep->elementSetName = odr_strdup_null(p->odr_out, elementSetName); toKeep->actionQualifier = 0; toKeep->action = odr_intdup(p->odr_out, action_no); notToKeep = r->u.update->u.esRequest->notToKeep = (Z_IUSuppliedRecords *) odr_malloc(p->odr_out, sizeof(*notToKeep)); notToKeep->num = 1; notToKeep->elements = (Z_IUSuppliedRecords_elem **) odr_malloc(p->odr_out, sizeof(*notToKeep->elements)); notToKeep->elements[0] = (Z_IUSuppliedRecords_elem *) odr_malloc(p->odr_out, sizeof(**notToKeep->elements)); notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque; if (recordIdOpaque) { notToKeep->elements[0]->u.opaque = odr_create_Odr_oct(p->odr_out, recordIdOpaque, recordIdOpaque_len); } else if (recordIdNumber) { notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_number; notToKeep->elements[0]->u.number = odr_intdup(p->odr_out, atoi(recordIdNumber)); } else if (recordIdString) { notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_string; notToKeep->elements[0]->u.string = odr_strdup(p->odr_out, recordIdString); } else notToKeep->elements[0]->u.opaque = 0; notToKeep->elements[0]->supplementalId = 0; if (correlationInfo_note || correlationInfo_id) { Z_IUCorrelationInfo *ci; ci = notToKeep->elements[0]->correlationInfo = (Z_IUCorrelationInfo *) odr_malloc(p->odr_out, sizeof(*ci)); ci->note = odr_strdup_null(p->odr_out, correlationInfo_note); ci->id = correlationInfo_id ? odr_intdup(p->odr_out, atoi(correlationInfo_id)) : 0; } else notToKeep->elements[0]->correlationInfo = 0; if (recordOpaque_buf) { notToKeep->elements[0]->record = z_ext_record_oid_any(p->odr_out, syntax_oid, recordOpaque_buf, recordOpaque_len); } else { notToKeep->elements[0]->record = z_ext_record_oid(p->odr_out, syntax_oid, record_buf, record_len); } } if (0 && apdu) { ODR print = odr_createmem(ODR_PRINT); z_APDU(print, &apdu, 0, 0); odr_destroy(print); } return apdu; } static void otherInfo_attach(ZOOM_connection c, Z_APDU *a, ODR out) { int i; for (i = 0; i < 200; i++) { size_t len; Odr_oid *oid; Z_OtherInformation **oi; char buf[80]; const char *val; const char *cp; sprintf(buf, "otherInfo%d", i); val = ZOOM_options_get(c->options, buf); if (!val) break; cp = strchr(val, ':'); if (!cp) continue; len = cp - val; if (len >= sizeof(buf)) len = sizeof(buf)-1; memcpy(buf, val, len); buf[len] = '\0'; oid = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_USERINFO, buf, out); if (!oid) continue; yaz_oi_APDU(a, &oi); yaz_oi_set_string_oid(oi, out, oid, 1, cp+1); } } static int encode_APDU(ZOOM_connection c, Z_APDU *a, ODR out) { assert(a); if (c->cookie_out) { Z_OtherInformation **oi; yaz_oi_APDU(a, &oi); yaz_oi_set_string_oid(oi, out, yaz_oid_userinfo_cookie, 1, c->cookie_out); } if (c->client_IP && a->which == Z_APDU_initRequest) { Z_OtherInformation **oi; yaz_oi_APDU(a, &oi); yaz_oi_set_string_oid(oi, out, yaz_oid_userinfo_client_ip, 1, c->client_IP); } otherInfo_attach(c, a, out); if (!z_APDU(out, &a, 0, 0)) { FILE *outf = fopen("/tmp/apdu.txt", "a"); if (a && outf) { ODR odr_pr = odr_createmem(ODR_PRINT); fprintf(outf, "a=%p\n", a); odr_setprint(odr_pr, outf); z_APDU(odr_pr, &a, 0, 0); odr_destroy(odr_pr); } yaz_log(c->log_api, "%p encoding_APDU: encoding failed", c); ZOOM_set_error(c, ZOOM_ERROR_ENCODE, 0); odr_reset(out); return -1; } if (c->odr_print) z_APDU(c->odr_print, &a, 0, 0); if (c->odr_save) z_APDU(c->odr_save, &a, 0, 0); yaz_log(c->log_details, "%p encoding_APDU encoding OK", c); return 0; } static zoom_ret send_APDU(ZOOM_connection c, Z_APDU *a) { ZOOM_Event event; assert(a); if (encode_APDU(c, a, c->odr_out)) return zoom_complete; yaz_log(c->log_details, "%p send APDU type=%d", c, a->which); c->buf_out = odr_getbuf(c->odr_out, &c->len_out, 0); event = ZOOM_Event_create(ZOOM_EVENT_SEND_APDU); ZOOM_connection_put_event(c, event); odr_reset(c->odr_out); return ZOOM_send_buf(c); } zoom_ret ZOOM_connection_Z3950_send_init(ZOOM_connection c) { Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_initRequest); Z_InitRequest *ireq = apdu->u.initRequest; Z_IdAuthentication *auth = (Z_IdAuthentication *) odr_malloc(c->odr_out, sizeof(*auth)); ODR_MASK_SET(ireq->options, Z_Options_search); ODR_MASK_SET(ireq->options, Z_Options_present); ODR_MASK_SET(ireq->options, Z_Options_scan); ODR_MASK_SET(ireq->options, Z_Options_sort); ODR_MASK_SET(ireq->options, Z_Options_extendedServices); ODR_MASK_SET(ireq->options, Z_Options_namedResultSets); ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_1); ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_2); ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_3); ireq->implementationId = odr_prepend(c->odr_out, ZOOM_options_get(c->options, "implementationId"), ireq->implementationId); ireq->implementationName = odr_prepend(c->odr_out, ZOOM_options_get(c->options, "implementationName"), odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName)); ireq->implementationVersion = odr_prepend(c->odr_out, ZOOM_options_get(c->options, "implementationVersion"), ireq->implementationVersion); *ireq->maximumRecordSize = c->maximum_record_size; *ireq->preferredMessageSize = c->preferred_message_size; if (c->group || c->password) { Z_IdPass *pass = (Z_IdPass *) odr_malloc(c->odr_out, sizeof(*pass)); pass->groupId = odr_strdup_null(c->odr_out, c->group); pass->userId = odr_strdup_null(c->odr_out, c->user); pass->password = odr_strdup_null(c->odr_out, c->password); auth->which = Z_IdAuthentication_idPass; auth->u.idPass = pass; ireq->idAuthentication = auth; } else if (c->user) { auth->which = Z_IdAuthentication_open; auth->u.open = odr_strdup(c->odr_out, c->user); ireq->idAuthentication = auth; } if (c->proxy_mode) { yaz_oi_set_string_oid(&ireq->otherInfo, c->odr_out, yaz_oid_userinfo_proxy, 1, c->host_port); } if (c->charset || c->lang) { Z_OtherInformation **oi; Z_OtherInformationUnit *oi_unit; yaz_oi_APDU(apdu, &oi); if ((oi_unit = yaz_oi_update(oi, c->odr_out, NULL, 0, 0))) { ODR_MASK_SET(ireq->options, Z_Options_negotiationModel); oi_unit->which = Z_OtherInfo_externallyDefinedInfo; oi_unit->information.externallyDefinedInfo = yaz_set_proposal_charneg_list(c->odr_out, " ", c->charset, c->lang, 1); } } assert(apdu); return send_APDU(c, apdu); } static zoom_ret Z3950_send_search(ZOOM_connection c) { ZOOM_resultset r; int lslb, ssub, mspn; const char *syntax; const char *schema; Z_APDU *apdu; Z_SearchRequest *search_req; const char *elementSetName; const char *smallSetElementSetName; const char *mediumSetElementSetName; assert(c->tasks); assert(c->tasks->which == ZOOM_TASK_SEARCH); r = c->tasks->u.search.resultset; apdu = zget_APDU(c->odr_out, Z_APDU_searchRequest); search_req = apdu->u.searchRequest; yaz_log(c->log_details, "%p Z3950_send_search set=%p", c, r); elementSetName = c->tasks->u.search.elementSetName; smallSetElementSetName = ZOOM_options_get(r->options, "smallSetElementSetName"); mediumSetElementSetName = ZOOM_options_get(r->options, "mediumSetElementSetName"); if (!smallSetElementSetName) smallSetElementSetName = elementSetName; if (!mediumSetElementSetName) mediumSetElementSetName = elementSetName; if (r->req_facets) { Z_FacetList *facet_list = yaz_pqf_parse_facet_list(c->odr_out, r->req_facets); if (facet_list) { Z_OtherInformation **oi = &search_req->additionalSearchInfo; yaz_oi_set_facetlist(oi, c->odr_out, facet_list); } else yaz_log(YLOG_WARN, "Unable to parse facets: %s", r->req_facets); } assert(r); assert(r->query); /* prepare query for the search request */ search_req->query = ZOOM_query_get_Z_Query(r->query); if (!search_req->query) { ZOOM_set_error(c, ZOOM_ERROR_INVALID_QUERY, 0); return zoom_complete; } if (search_req->query->which == Z_Query_type_1 || search_req->query->which == Z_Query_type_101) { const char *cp = ZOOM_options_get(r->options, "rpnCharset"); if (cp) { yaz_iconv_t cd = yaz_iconv_open(cp, "UTF-8"); if (cd) { int r; search_req->query = yaz_copy_Z_Query(search_req->query, c->odr_out); r = yaz_query_charset_convert_rpnquery_check( search_req->query->u.type_1, c->odr_out, cd); yaz_iconv_close(cd); if (r) { /* query could not be char converted */ ZOOM_set_error(c, ZOOM_ERROR_INVALID_QUERY, 0); return zoom_complete; } } } } search_req->databaseNames = r->databaseNames; search_req->num_databaseNames = r->num_databaseNames; /* get syntax (no need to provide unless piggyback is in effect) */ syntax = c->tasks->u.search.syntax; schema = c->tasks->u.search.schema; lslb = ZOOM_options_get_int(r->options, "largeSetLowerBound", -1); ssub = ZOOM_options_get_int(r->options, "smallSetUpperBound", -1); mspn = ZOOM_options_get_int(r->options, "mediumSetPresentNumber", -1); if (lslb != -1 && ssub != -1 && mspn != -1) { /* So're a Z39.50 expert? Let's hope you don't do sort */ *search_req->largeSetLowerBound = lslb; *search_req->smallSetUpperBound = ssub; *search_req->mediumSetPresentNumber = mspn; } else if (c->tasks->u.search.start == 0 && c->tasks->u.search.count > 0 && r->piggyback && !r->r_sort_spec && !schema) { /* Regular piggyback - do it unless we're going to do sort */ *search_req->largeSetLowerBound = 2000000000; *search_req->smallSetUpperBound = 1; *search_req->mediumSetPresentNumber = r->step>0 ? r->step : c->tasks->u.search.count; } else { /* non-piggyback. Need not provide elementsets or syntaxes .. */ smallSetElementSetName = 0; mediumSetElementSetName = 0; syntax = 0; } if (smallSetElementSetName && *smallSetElementSetName) { Z_ElementSetNames *esn = (Z_ElementSetNames *) odr_malloc(c->odr_out, sizeof(*esn)); esn->which = Z_ElementSetNames_generic; esn->u.generic = odr_strdup(c->odr_out, smallSetElementSetName); search_req->smallSetElementSetNames = esn; } if (mediumSetElementSetName && *mediumSetElementSetName) { Z_ElementSetNames *esn =(Z_ElementSetNames *) odr_malloc(c->odr_out, sizeof(*esn)); esn->which = Z_ElementSetNames_generic; esn->u.generic = odr_strdup(c->odr_out, mediumSetElementSetName); search_req->mediumSetElementSetNames = esn; } if (syntax) search_req->preferredRecordSyntax = zoom_yaz_str_to_z3950oid(c, CLASS_RECSYN, syntax); if (!r->setname) { if (c->support_named_resultsets) { char setname[14]; int ord; /* find the lowest unused ordinal so that we re-use result sets on the server. */ for (ord = 1; ; ord++) { ZOOM_resultset rp; sprintf(setname, "%d", ord); for (rp = c->resultsets; rp; rp = rp->next) if (rp->setname && !strcmp(rp->setname, setname)) break; if (!rp) break; } r->setname = odr_strdup(r->odr, setname); yaz_log(c->log_details, "%p ZOOM_connection_send_search: " "allocating set %s", c, r->setname); } else { yaz_log(c->log_details, "%p ZOOM_connection_send_search: using " "default set", c); r->setname = odr_strdup(r->odr, "default"); } ZOOM_options_set(r->options, "setname", r->setname); } search_req->resultSetName = odr_strdup(c->odr_out, r->setname); return send_APDU(c, apdu); } zoom_ret ZOOM_connection_Z3950_send_scan(ZOOM_connection c) { ZOOM_scanset scan; Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_scanRequest); Z_ScanRequest *req = apdu->u.scanRequest; Z_Query *z_query; yaz_log(c->log_details, "%p send_scan", c); if (!c->tasks) return zoom_complete; assert (c->tasks->which == ZOOM_TASK_SCAN); scan = c->tasks->u.scan.scan; z_query = ZOOM_query_get_Z_Query(scan->query); /* Z39.50 scan can only carry RPN */ if (z_query->which == Z_Query_type_1 || z_query->which == Z_Query_type_101) { Z_RPNQuery *rpn = z_query->u.type_1; const char *cp = ZOOM_options_get(scan->options, "rpnCharset"); if (cp) { yaz_iconv_t cd = yaz_iconv_open(cp, "UTF-8"); if (cd) { rpn = yaz_copy_z_RPNQuery(rpn, c->odr_out); yaz_query_charset_convert_rpnquery( rpn, c->odr_out, cd); yaz_iconv_close(cd); } } req->attributeSet = rpn->attributeSetId; if (!req->attributeSet) req->attributeSet = odr_oiddup(c->odr_out, yaz_oid_attset_bib_1); if (rpn->RPNStructure->which == Z_RPNStructure_simple && rpn->RPNStructure->u.simple->which == Z_Operand_APT) { req->termListAndStartPoint = rpn->RPNStructure->u.simple->u.attributesPlusTerm; } else { ZOOM_set_error(c, ZOOM_ERROR_INVALID_QUERY, 0); return zoom_complete; } } else { ZOOM_set_error(c, ZOOM_ERROR_UNSUPPORTED_QUERY, 0); return zoom_complete; } *req->numberOfTermsRequested = ZOOM_options_get_int(scan->options, "number", 20); req->preferredPositionInResponse = odr_intdup(c->odr_out, ZOOM_options_get_int(scan->options, "position", 1)); req->stepSize = odr_intdup(c->odr_out, ZOOM_options_get_int(scan->options, "stepSize", 0)); req->databaseNames = scan->databaseNames; req->num_databaseNames = scan->num_databaseNames; return send_APDU(c, apdu); } ZOOM_API(void) ZOOM_package_send(ZOOM_package p, const char *type) { Z_APDU *apdu = 0; ZOOM_connection c; if (!p) return; c = p->connection; odr_reset(p->odr_out); xfree(p->buf_out); p->buf_out = 0; if (!strcmp(type, "itemorder")) { apdu = create_es_package(p, yaz_oid_extserv_item_order); if (apdu) { Z_External *r = (Z_External *) odr_malloc(p->odr_out, sizeof(*r)); r->direct_reference = odr_oiddup(p->odr_out, yaz_oid_extserv_item_order); r->descriptor = 0; r->which = Z_External_itemOrder; r->indirect_reference = 0; r->u.itemOrder = encode_item_order(p); apdu->u.extendedServicesRequest->taskSpecificParameters = r; } } else if (!strcmp(type, "create")) /* create database */ { apdu = create_admin_package(p, Z_ESAdminOriginPartToKeep_create, 0, 0); } else if (!strcmp(type, "drop")) /* drop database */ { apdu = create_admin_package(p, Z_ESAdminOriginPartToKeep_drop, 0, 0); } else if (!strcmp(type, "commit")) /* commit changes */ { apdu = create_admin_package(p, Z_ESAdminOriginPartToKeep_commit, 0, 0); } else if (!strcmp(type, "update")) /* update record(s) */ { apdu = create_update_package(p); } else if (!strcmp(type, "xmlupdate")) { apdu = create_xmlupdate_package(p); } if (apdu) { if (encode_APDU(p->connection, apdu, p->odr_out) == 0) { char *buf; ZOOM_task task = ZOOM_connection_add_task(c, ZOOM_TASK_PACKAGE); task->u.package = p; buf = odr_getbuf(p->odr_out, &p->len_out, 0); p->buf_out = (char *) xmalloc(p->len_out); memcpy(p->buf_out, buf, p->len_out); (p->refcount)++; if (!c->async) { while (ZOOM_event(1, &c)) ; } } } } static void handle_Z3950_records(ZOOM_connection c, Z_Records *sr, int present_phase); static void response_default_diag(ZOOM_connection c, Z_DefaultDiagFormat *r) { char oid_name_buf[OID_STR_MAX]; const char *oid_name; char *addinfo = 0; oid_name = yaz_oid_to_string_buf(r->diagnosticSetId, 0, oid_name_buf); switch (r->which) { case Z_DefaultDiagFormat_v2Addinfo: addinfo = r->u.v2Addinfo; break; case Z_DefaultDiagFormat_v3Addinfo: addinfo = r->u.v3Addinfo; break; } xfree(c->addinfo); c->addinfo = 0; ZOOM_set_dset_error(c, *r->condition, oid_name, addinfo, 0); } static void response_diag(ZOOM_connection c, Z_DiagRec *p) { if (p->which != Z_DiagRec_defaultFormat) ZOOM_set_error(c, ZOOM_ERROR_DECODE, 0); else response_default_diag(c, p->u.defaultFormat); } static int es_response_taskpackage_update(ZOOM_connection c, Z_IUUpdateTaskPackage *utp) { if (utp && utp->targetPart) { Z_IUTargetPart *targetPart = utp->targetPart; switch (*targetPart->updateStatus) { case Z_IUTargetPart_success: ZOOM_options_set(c->tasks->u.package->options, "updateStatus", "success"); break; case Z_IUTargetPart_partial: ZOOM_options_set(c->tasks->u.package->options, "updateStatus", "partial"); break; case Z_IUTargetPart_failure: ZOOM_options_set(c->tasks->u.package->options, "updateStatus", "failure"); if (targetPart->globalDiagnostics && targetPart->num_globalDiagnostics > 0) response_diag(c, targetPart->globalDiagnostics[0]); break; } /* NOTE: Individual record status, surrogate diagnostics, and supplemental diagnostics ARE NOT REPORTED. */ } return 1; } static int es_response_taskpackage_update0(ZOOM_connection c, Z_IU0UpdateTaskPackage *utp) { if (utp && utp->targetPart) { Z_IU0TargetPart *targetPart = utp->targetPart; switch (*targetPart->updateStatus) { case Z_IU0TargetPart_success: ZOOM_options_set(c->tasks->u.package->options, "updateStatus", "success"); break; case Z_IU0TargetPart_partial: ZOOM_options_set(c->tasks->u.package->options, "updateStatus", "partial"); break; case Z_IU0TargetPart_failure: ZOOM_options_set(c->tasks->u.package->options, "updateStatus", "failure"); if (targetPart->globalDiagnostics && targetPart->num_globalDiagnostics > 0) response_diag(c, targetPart->globalDiagnostics[0]); break; } /* NOTE: Individual record status, surrogate diagnostics, and supplemental diagnostics ARE NOT REPORTED. */ } return 1; } static int es_response_taskpackage(ZOOM_connection c, Z_TaskPackage *taskPackage) { Odr_oct *id = taskPackage->targetReference; if (id) ZOOM_options_setl(c->tasks->u.package->options, "targetReference", (char*) id->buf, id->len); switch (*taskPackage->taskStatus) { case Z_TaskPackage_pending: ZOOM_options_set(c->tasks->u.package->options, "taskStatus", "pending"); break; case Z_TaskPackage_active: ZOOM_options_set(c->tasks->u.package->options, "taskStatus", "active"); break; case Z_TaskPackage_complete: ZOOM_options_set(c->tasks->u.package->options, "taskStatus", "complete"); break; case Z_TaskPackage_aborted: ZOOM_options_set(c->tasks->u.package->options, "taskStatus", "aborted"); if (taskPackage->num_packageDiagnostics && taskPackage->packageDiagnostics ) response_diag(c, taskPackage->packageDiagnostics[0]); break; } /* NOTE: Only Update/Update0 implemented, no others. */ if (taskPackage->taskSpecificParameters->which == Z_External_update) { Z_IUUpdateTaskPackage *utp = taskPackage->taskSpecificParameters->u.update->u.taskPackage; es_response_taskpackage_update(c, utp); } if (taskPackage->taskSpecificParameters->which == Z_External_update0) { Z_IU0UpdateTaskPackage *utp = taskPackage->taskSpecificParameters->u.update0->u.taskPackage; es_response_taskpackage_update0(c, utp); } return 1; } static void handle_Z3950_es_response(ZOOM_connection c, Z_ExtendedServicesResponse *res) { const char *opStatus = 0; if (!c->tasks) return; assert(c->tasks->which == ZOOM_TASK_PACKAGE); /* store any diagnostics in esError / esAddinfo */ if (res->diagnostics && res->num_diagnostics > 0) { response_diag(c, res->diagnostics[0]); if (c->error) { ZOOM_options_set_int(c->tasks->u.package->options, "esError", c->error); ZOOM_options_set(c->tasks->u.package->options, "esAddinfo", c->addinfo); /* treat only diagnostics as error when operationStatus = failure */ if (*res->operationStatus != Z_ExtendedServicesResponse_failure) ZOOM_set_error(c, ZOOM_ERROR_NONE, 0); } } switch (*res->operationStatus) { case Z_ExtendedServicesResponse_done: opStatus = "done"; break; case Z_ExtendedServicesResponse_accepted: opStatus = "accepted"; break; case Z_ExtendedServicesResponse_failure: opStatus = "failure"; break; } if (opStatus) ZOOM_options_set(c->tasks->u.package->options, "operationStatus", opStatus); if (res->taskPackage && res->taskPackage->which == Z_External_extendedService) { Z_TaskPackage *taskPackage = res->taskPackage->u.extendedService; es_response_taskpackage(c, taskPackage); } if (res->taskPackage && res->taskPackage->which == Z_External_octet) { Odr_oct *doc = res->taskPackage->u.octet_aligned; ZOOM_options_setl(c->tasks->u.package->options, "xmlUpdateDoc", (char*) doc->buf, doc->len); } } static char *get_term_cstr(ODR odr, Z_Term *term) { switch (term->which) { case Z_Term_general: return odr_strdupn(odr, term->u.general->buf, term->u.general->len); break; case Z_Term_characterString: return odr_strdup(odr, term->u.characterString); } return 0; } static ZOOM_facet_field get_zoom_facet_field(ODR odr, Z_FacetField *facet) { int i; struct yaz_facet_attr attr_values; ZOOM_facet_field facet_field = odr_malloc(odr, sizeof(*facet_field)); yaz_facet_attr_init(&attr_values); yaz_facet_attr_get_z_attributes(facet->attributes, &attr_values); facet_field->facet_name = odr_strdup(odr, attr_values.useattr); facet_field->num_terms = facet->num_terms; yaz_log(YLOG_DEBUG, "ZOOM_facet_field %s %d terms %d", attr_values.useattr, attr_values.limit, facet->num_terms); facet_field->facet_terms = odr_malloc(odr, facet->num_terms * sizeof(*facet_field->facet_terms)); for (i = 0 ; i < facet->num_terms; i++) { Z_FacetTerm *facetTerm = facet->terms[i]; facet_field->facet_terms[i].frequency = *facetTerm->count; facet_field->facet_terms[i].term = get_term_cstr(odr, facetTerm->term); yaz_log(YLOG_DEBUG, " term[%d] %s %d", i, facet_field->facet_terms[i].term, facet_field->facet_terms[i].frequency); } return facet_field; } /* Can be share with SOLR/SRU/SRW requests */ void ZOOM_handle_facet_list(ZOOM_resultset r, Z_FacetList *fl) { int j; r->num_res_facets = fl->num; yaz_log(YLOG_DEBUG, "Facets found: %d", fl->num); r->res_facets = odr_malloc(r->odr, fl->num * sizeof(*r->res_facets)); r->facets_names = odr_malloc(r->odr, fl->num * sizeof(*r->facets_names)); for (j = 0; j < fl->num; j++) { r->res_facets[j] = get_zoom_facet_field(r->odr, fl->elements[j]); if (!r->res_facets[j]) { r->facets_names[j] = 0; yaz_log(YLOG_DEBUG, "Facet field missing on index %d !", j); } else r->facets_names[j] = (char *) ZOOM_facet_field_name(r->res_facets[j]); } } void ZOOM_handle_facet_result(ZOOM_connection c, ZOOM_resultset r, Z_OtherInformation *o) { int i; for (i = 0; o && i < o->num_elements; i++) { if (o->list[i]->which == Z_OtherInfo_externallyDefinedInfo) { Z_External *ext = o->list[i]->information.externallyDefinedInfo; if (ext->which == Z_External_userFacets) { ZOOM_handle_facet_list(r, ext->u.facetList); } } } } static void handle_queryExpressionTerm(ZOOM_options opt, const char *name, Z_Term *term) { switch (term->which) { case Z_Term_general: ZOOM_options_setl(opt, name, term->u.general->buf, term->u.general->len); break; case Z_Term_characterString: ZOOM_options_set(opt, name, term->u.characterString); break; case Z_Term_numeric: ZOOM_options_set_int(opt, name, *term->u.numeric); break; } } static void handle_queryExpression(ZOOM_options opt, const char *name, Z_QueryExpression *exp) { char opt_name[80]; switch (exp->which) { case Z_QueryExpression_term: if (exp->u.term && exp->u.term->queryTerm) { sprintf(opt_name, "%s.term", name); handle_queryExpressionTerm(opt, opt_name, exp->u.term->queryTerm); } break; case Z_QueryExpression_query: break; } } void ZOOM_handle_search_result(ZOOM_connection c, ZOOM_resultset resultset, Z_OtherInformation *o) { int i; for (i = 0; o && i < o->num_elements; i++) { if (o->list[i]->which == Z_OtherInfo_externallyDefinedInfo) { Z_External *ext = o->list[i]->information.externallyDefinedInfo; if (ext->which == Z_External_searchResult1) { int j; Z_SearchInfoReport *sr = ext->u.searchResult1; if (sr->num) ZOOM_options_set_int( resultset->options, "searchresult.size", sr->num); for (j = 0; j < sr->num; j++) { Z_SearchInfoReport_s *ent = ext->u.searchResult1->elements[j]; char pref[80]; sprintf(pref, "searchresult.%d", j); if (ent->subqueryId) { char opt_name[80]; sprintf(opt_name, "%s.id", pref); ZOOM_options_set(resultset->options, opt_name, ent->subqueryId); } if (ent->subqueryExpression) { char opt_name[80]; sprintf(opt_name, "%s.subquery", pref); handle_queryExpression(resultset->options, opt_name, ent->subqueryExpression); } if (ent->subqueryInterpretation) { char opt_name[80]; sprintf(opt_name, "%s.interpretation", pref); handle_queryExpression(resultset->options, opt_name, ent->subqueryInterpretation); } if (ent->subqueryRecommendation) { char opt_name[80]; sprintf(opt_name, "%s.recommendation", pref); handle_queryExpression(resultset->options, opt_name, ent->subqueryRecommendation); } if (ent->subqueryCount) { char opt_name[80]; sprintf(opt_name, "%s.count", pref); ZOOM_options_set_int(resultset->options, opt_name, *ent->subqueryCount); } } } } } } static void handle_Z3950_search_response(ZOOM_connection c, Z_SearchResponse *sr) { ZOOM_resultset resultset; ZOOM_Event event; const char *resultCountPrecision = "exact"; if (!c->tasks || c->tasks->which != ZOOM_TASK_SEARCH) return; resultset = c->tasks->u.search.resultset; if (resultset->live_set == 0) { event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH); ZOOM_connection_put_event(c, event); } if (sr->resultSetStatus) { if (*sr->resultSetStatus == Z_SearchResponse_estimate) resultCountPrecision = "estimate"; ZOOM_options_set_int(resultset->options, "resultSetStatus", *sr->resultSetStatus); } if (sr->presentStatus) { ZOOM_options_set_int(resultset->options, "presentStatus", *sr->presentStatus); } ZOOM_options_set(resultset->options, "resultCountPrecision", resultCountPrecision); ZOOM_handle_search_result(c, resultset, sr->additionalSearchInfo); ZOOM_handle_facet_result(c, resultset, sr->additionalSearchInfo); resultset->size = *sr->resultCount; ZOOM_memcached_hitcount(c, resultset, sr->additionalSearchInfo, resultCountPrecision); resultset->live_set = 2; handle_Z3950_records(c, sr->records, 0); } static void handle_Z3950_sort_response(ZOOM_connection c, Z_SortResponse *res) { if (res->diagnostics && res->num_diagnostics > 0) { response_diag(c, res->diagnostics[0]); ZOOM_connection_remove_tasks(c); } } static void handle_Z3950_scan_response(ZOOM_connection c, Z_ScanResponse *res) { NMEM nmem = odr_extract_mem(c->odr_in); ZOOM_scanset scan; if (!c->tasks || c->tasks->which != ZOOM_TASK_SCAN) return; scan = c->tasks->u.scan.scan; if (res->entries && res->entries->nonsurrogateDiagnostics) response_diag(c, res->entries->nonsurrogateDiagnostics[0]); scan->scan_response = res; scan->srw_scan_response = 0; nmem_transfer(odr_getmem(scan->odr), nmem); if (res->stepSize) ZOOM_options_set_int(scan->options, "stepSize", *res->stepSize); if (res->positionOfTerm) ZOOM_options_set_int(scan->options, "position", *res->positionOfTerm); if (res->scanStatus) ZOOM_options_set_int(scan->options, "scanStatus", *res->scanStatus); if (res->numberOfEntriesReturned) ZOOM_options_set_int(scan->options, "number", *res->numberOfEntriesReturned); nmem_destroy(nmem); } static void handle_Z3950_records(ZOOM_connection c, Z_Records *sr, int present_phase) { ZOOM_resultset resultset; int *start, *count; const char *syntax = 0, *elementSetName = 0, *schema = 0; if (!c->tasks || c->tasks->which != ZOOM_TASK_SEARCH) return ; resultset = c->tasks->u.search.resultset; start = &c->tasks->u.search.start; count = &c->tasks->u.search.count; syntax = c->tasks->u.search.syntax; elementSetName = c->tasks->u.search.elementSetName; schema = c->tasks->u.search.schema; if (sr && sr->which == Z_Records_NSD) { response_default_diag(c, sr->u.nonSurrogateDiagnostic); ZOOM_connection_remove_tasks(c); } else if (sr && sr->which == Z_Records_multipleNSD) { if (sr->u.multipleNonSurDiagnostics->num_diagRecs >= 1) response_diag(c, sr->u.multipleNonSurDiagnostics->diagRecs[0]); else ZOOM_set_error(c, ZOOM_ERROR_DECODE, 0); ZOOM_connection_remove_tasks(c); } else { if (*count + *start > resultset->size) *count = resultset->size - *start; if (*count < 0) *count = 0; if (sr && sr->which == Z_Records_DBOSD) { int i; NMEM nmem = odr_extract_mem(c->odr_in); Z_NamePlusRecordList *p = sr->u.databaseOrSurDiagnostics; for (i = 0; i < p->num_records; i++) { ZOOM_record_cache_add(resultset, p->records[i], i + *start, syntax, elementSetName, schema, 0); } *count -= i; if (*count < 0) *count = 0; *start += i; yaz_log(c->log_details, "handle_records resultset=%p start=%d count=%d", resultset, *start, *count); /* transfer our response to search_nmem .. we need it later */ nmem_transfer(odr_getmem(resultset->odr), nmem); nmem_destroy(nmem); if (present_phase && p->num_records == 0) { /* present response and we didn't get any records! */ Z_NamePlusRecord *myrec = zget_surrogateDiagRec( resultset->odr, 0, YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS, "ZOOM C generated. Present phase and no records"); ZOOM_record_cache_add(resultset, myrec, *start, syntax, elementSetName, schema, 0); *count = 0; } } else if (present_phase) { /* present response and we didn't get any records! */ Z_NamePlusRecord *myrec = zget_surrogateDiagRec( resultset->odr, 0, YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS, "ZOOM C generated: Present response and no records"); ZOOM_record_cache_add(resultset, myrec, *start, syntax, elementSetName, schema, 0); *count = 0; } } } static void handle_Z3950_present_response(ZOOM_connection c, Z_PresentResponse *pr) { handle_Z3950_records(c, pr->records, 1); } static void set_init_option(const char *name, void *clientData) { ZOOM_connection c = (ZOOM_connection) clientData; char buf[80]; sprintf(buf, "init_opt_%.70s", name); ZOOM_connection_option_set(c, buf, "1"); } zoom_ret send_Z3950_sort(ZOOM_connection c, ZOOM_resultset resultset) { if (c->error) resultset->r_sort_spec = 0; if (resultset->r_sort_spec) { Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_sortRequest); Z_SortRequest *req = apdu->u.sortRequest; yaz_log(c->log_details, "%p send_Z3950_sort set=%p", c, resultset); req->num_inputResultSetNames = 1; req->inputResultSetNames = (Z_InternationalString **) odr_malloc(c->odr_out, sizeof(*req->inputResultSetNames)); req->inputResultSetNames[0] = odr_strdup(c->odr_out, resultset->setname); req->sortedResultSetName = odr_strdup(c->odr_out, resultset->setname); req->sortSequence = resultset->r_sort_spec; resultset->r_sort_spec = 0; return send_APDU(c, apdu); } return zoom_complete; } static zoom_ret Z3950_send_present(ZOOM_connection c) { Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_presentRequest); Z_PresentRequest *req = apdu->u.presentRequest; ZOOM_resultset resultset = c->tasks->u.search.resultset; const char *syntax = c->tasks->u.search.syntax; const char *elementSetName = c->tasks->u.search.elementSetName; const char *schema = c->tasks->u.search.schema; yaz_log(c->log_details, "%p Z3950_send_present", c); *req->resultSetStartPoint = c->tasks->u.search.start + 1; if (resultset->step > 0 && resultset->step < c->tasks->u.search.count) *req->numberOfRecordsRequested = resultset->step; else *req->numberOfRecordsRequested = c->tasks->u.search.count; if (*req->numberOfRecordsRequested + c->tasks->u.search.start > resultset->size) *req->numberOfRecordsRequested = resultset->size - c->tasks->u.search.start; assert(*req->numberOfRecordsRequested > 0); if (syntax && *syntax) req->preferredRecordSyntax = zoom_yaz_str_to_z3950oid(c, CLASS_RECSYN, syntax); if (schema && *schema) { Z_RecordComposition *compo = (Z_RecordComposition *) odr_malloc(c->odr_out, sizeof(*compo)); req->recordComposition = compo; compo->which = Z_RecordComp_complex; compo->u.complex = (Z_CompSpec *) odr_malloc(c->odr_out, sizeof(*compo->u.complex)); compo->u.complex->selectAlternativeSyntax = (bool_t *) odr_malloc(c->odr_out, sizeof(bool_t)); *compo->u.complex->selectAlternativeSyntax = 0; compo->u.complex->generic = (Z_Specification *) odr_malloc(c->odr_out, sizeof(*compo->u.complex->generic)); compo->u.complex->generic->which = Z_Schema_oid; compo->u.complex->generic->schema.oid = (Odr_oid *) zoom_yaz_str_to_z3950oid(c, CLASS_SCHEMA, schema); if (!compo->u.complex->generic->schema.oid) { /* OID wasn't a schema! Try record syntax instead. */ compo->u.complex->generic->schema.oid = (Odr_oid *) zoom_yaz_str_to_z3950oid(c, CLASS_RECSYN, schema); } if (elementSetName && *elementSetName) { compo->u.complex->generic->elementSpec = (Z_ElementSpec *) odr_malloc(c->odr_out, sizeof(Z_ElementSpec)); compo->u.complex->generic->elementSpec->which = Z_ElementSpec_elementSetName; compo->u.complex->generic->elementSpec->u.elementSetName = odr_strdup(c->odr_out, elementSetName); } else compo->u.complex->generic->elementSpec = 0; compo->u.complex->num_dbSpecific = 0; compo->u.complex->dbSpecific = 0; compo->u.complex->num_recordSyntax = 0; compo->u.complex->recordSyntax = 0; } else if (elementSetName && *elementSetName) { Z_ElementSetNames *esn = (Z_ElementSetNames *) odr_malloc(c->odr_out, sizeof(*esn)); Z_RecordComposition *compo = (Z_RecordComposition *) odr_malloc(c->odr_out, sizeof(*compo)); esn->which = Z_ElementSetNames_generic; esn->u.generic = odr_strdup(c->odr_out, elementSetName); compo->which = Z_RecordComp_simple; compo->u.simple = esn; req->recordComposition = compo; } req->resultSetId = odr_strdup(c->odr_out, resultset->setname); return send_APDU(c, apdu); } zoom_ret ZOOM_connection_Z3950_search(ZOOM_connection c) { int i = 0; const char *syntax = 0; const char *elementSetName = 0; const char *schema = 0; ZOOM_resultset resultset; int *start, *count; if (!c->tasks || c->tasks->which == ZOOM_TASK_SORT) return zoom_complete; assert(c->tasks->which == ZOOM_TASK_SEARCH); resultset = c->tasks->u.search.resultset; start = &c->tasks->u.search.start; count = &c->tasks->u.search.count; syntax = c->tasks->u.search.syntax; elementSetName = c->tasks->u.search.elementSetName; schema = c->tasks->u.search.schema; yaz_log(c->log_details, "%p ZOOM_connection_Z3950_search start=%d count=%d", c, *start, *count); ZOOM_memcached_search(c, resultset); if (*start < 0 || *count < 0) { ZOOM_set_dset_error(c, YAZ_BIB1_PRESENT_REQUEST_OUT_OF_RANGE, "Bib-1", "start/count < 0", 0); } if (resultset->live_set) { if (*start >= resultset->size) *count = 0; else if (*start + *count >= resultset->size) *count = resultset->size - *start; } if (c->error) /* don't continue on error */ return zoom_complete; for (i = 0; i < *count; i++) { ZOOM_record rec = ZOOM_record_cache_lookup(resultset, i + *start, syntax, elementSetName, schema); if (!rec) break; } *start += i; *count -= i; if (*count == 0 && resultset->live_set) return zoom_complete; if (resultset->live_set == 2) return Z3950_send_present(c); else return Z3950_send_search(c); } static zoom_ret send_Z3950_sort_present(ZOOM_connection c) { zoom_ret r = zoom_complete; if (c->tasks && c->tasks->which == ZOOM_TASK_SEARCH) r = send_Z3950_sort(c, c->tasks->u.search.resultset); if (r == zoom_complete) r = ZOOM_connection_Z3950_search(c); return r; } void ZOOM_handle_Z3950_apdu(ZOOM_connection c, Z_APDU *apdu) { Z_InitResponse *initrs; ZOOM_connection_set_mask(c, 0); yaz_log(c->log_details, "%p handle_Z3950_apdu apdu->which=%d", c, apdu->which); switch (apdu->which) { case Z_APDU_initResponse: yaz_log(c->log_api, "%p handle_Z3950_apdu: Received Init response", c); initrs = apdu->u.initResponse; ZOOM_connection_option_set(c, "serverImplementationId", initrs->implementationId ? initrs->implementationId : ""); ZOOM_connection_option_set(c, "serverImplementationName", initrs->implementationName ? initrs->implementationName : ""); ZOOM_connection_option_set(c, "serverImplementationVersion", initrs->implementationVersion ? initrs->implementationVersion : ""); /* Set the three old options too, for old applications */ ZOOM_connection_option_set(c, "targetImplementationId", initrs->implementationId ? initrs->implementationId : ""); ZOOM_connection_option_set(c, "targetImplementationName", initrs->implementationName ? initrs->implementationName : ""); ZOOM_connection_option_set(c, "targetImplementationVersion", initrs->implementationVersion ? initrs->implementationVersion : ""); /* Make initrs->options available as ZOOM-level options */ yaz_init_opt_decode(initrs->options, set_init_option, (void*) c); if (!*initrs->result) { Z_DefaultDiagFormat *df = yaz_decode_init_diag(0, initrs); if (df) response_default_diag(c, df); else ZOOM_set_error(c, ZOOM_ERROR_INIT, 0); /* default error */ } else { char *cookie = yaz_oi_get_string_oid(&apdu->u.initResponse->otherInfo, yaz_oid_userinfo_cookie, 1, 0); xfree(c->cookie_in); c->cookie_in = 0; if (cookie) c->cookie_in = xstrdup(cookie); if (ODR_MASK_GET(initrs->options, Z_Options_namedResultSets) && ODR_MASK_GET(initrs->protocolVersion, Z_ProtocolVersion_3)) c->support_named_resultsets = 1; if (c->tasks) { assert(c->tasks->which == ZOOM_TASK_CONNECT); ZOOM_connection_remove_task(c); } ZOOM_connection_exec_task(c); } if (ODR_MASK_GET(initrs->options, Z_Options_negotiationModel)) { NMEM tmpmem = nmem_create(); Z_CharSetandLanguageNegotiation *p = yaz_get_charneg_record(initrs->otherInfo); if (p) { char *charset = NULL, *lang = NULL; int sel; yaz_get_response_charneg(tmpmem, p, &charset, &lang, &sel); yaz_log(c->log_details, "%p handle_Z3950_apdu target accepted: " "charset %s, language %s, select %d", c, charset ? charset : "none", lang ? lang : "none", sel); if (charset) ZOOM_connection_option_set(c, "negotiation-charset", charset); if (lang) ZOOM_connection_option_set(c, "negotiation-lang", lang); ZOOM_connection_option_set( c, "negotiation-charset-in-effect-for-records", (sel != 0) ? "1" : "0"); nmem_destroy(tmpmem); } } break; case Z_APDU_searchResponse: yaz_log(c->log_api, "%p handle_Z3950_apdu Search response", c); handle_Z3950_search_response(c, apdu->u.searchResponse); if (send_Z3950_sort_present(c) == zoom_complete) ZOOM_connection_remove_task(c); break; case Z_APDU_presentResponse: yaz_log(c->log_api, "%p handle_Z3950_apdu Present response", c); handle_Z3950_present_response(c, apdu->u.presentResponse); if (ZOOM_connection_Z3950_search(c) == zoom_complete) ZOOM_connection_remove_task(c); break; case Z_APDU_sortResponse: yaz_log(c->log_api, "%p handle_Z3950_apdu Sort response", c); handle_Z3950_sort_response(c, apdu->u.sortResponse); if (ZOOM_connection_Z3950_search(c) == zoom_complete) ZOOM_connection_remove_task(c); break; case Z_APDU_scanResponse: yaz_log(c->log_api, "%p handle_Z3950_apdu Scan response", c); handle_Z3950_scan_response(c, apdu->u.scanResponse); ZOOM_connection_remove_task(c); break; case Z_APDU_extendedServicesResponse: yaz_log(c->log_api, "%p handle_Z3950_apdu Extended Services response", c); handle_Z3950_es_response(c, apdu->u.extendedServicesResponse); ZOOM_connection_remove_task(c); break; case Z_APDU_close: yaz_log(c->log_api, "%p handle_Z3950_apdu Close PDU", c); if (!ZOOM_test_reconnect(c)) { ZOOM_set_dset_error(c, ZOOM_ERROR_CONNECTION_LOST, "ZOOM", c->host_port, apdu->u.close->diagnosticInformation); ZOOM_connection_close(c); } break; default: yaz_log(c->log_api, "%p Received unknown PDU", c); ZOOM_set_error(c, ZOOM_ERROR_DECODE, 0); ZOOM_connection_close(c); } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ber_tag.c0000644000175000017500000001065613265142510011677 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ber_tag.c * \brief Implements BER tags encoding and decoding * * This source file implements BER encoding and decoding of * the tags. */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" /** * \brief Encode/decode BER tags * * On encoding: * \verbatim * if p: write tag. return 1 (success) or -1 (error). * if !p: return 0. * \endverbatim * On decoding: * \verbatim * if tag && zclass match up, advance pointer and return 1. set cons. * else leave pointer unchanged. Return 0. * \endverbatim */ int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt, const char *name) { struct Odr_ber_tag *odr_ber_tag = &o->op->odr_ber_tag; int rd; char **pp = (char **)p; if (o->direction == ODR_DECODE) *pp = 0; o->op->t_class = -1; if (ODR_STACK_EMPTY(o)) { odr_seek(o, ODR_S_SET, 0); o->op->top = 0; o->op->bp = o->op->buf; odr_ber_tag->lclass = -1; } switch (o->direction) { case ODR_ENCODE: if (!*pp) { if (!opt) { odr_seterror(o, OREQUIRED, 24); odr_setelement (o, name); } return 0; } if ((rd = ber_enctag(o, zclass, tag, *constructed)) < 0) return -1; return 1; case ODR_DECODE: if (ODR_STACK_NOT_EMPTY(o) && !odr_constructed_more(o)) { if (!opt) { odr_seterror(o, OREQUIRED, 25); odr_setelement(o, name); } return 0; } if (odr_ber_tag->lclass < 0) { if ((odr_ber_tag->br = ber_dectag(o->op->bp, &odr_ber_tag->lclass, &odr_ber_tag->ltag, &odr_ber_tag->lcons, odr_max(o))) <= 0) { odr_seterror(o, OPROTO, 26); odr_setelement(o, name); return 0; } } if (zclass == odr_ber_tag->lclass && tag == odr_ber_tag->ltag) { o->op->bp += odr_ber_tag->br; *constructed = odr_ber_tag->lcons; odr_ber_tag->lclass = -1; return 1; } else { if (!opt) { odr_seterror(o, OREQUIRED, 27); odr_setelement(o, name); } return 0; } case ODR_PRINT: if (!*pp && !opt) { odr_seterror(o,OREQUIRED, 28); odr_setelement(o, name); } return *pp != 0; default: odr_seterror(o, OOTHER, 29); odr_setelement(o, name); return 0; } } /** * \brief BER-encode a zclass/tag/constructed package (identifier octets). * * Return number of bytes encoded, or -1 if out of bounds. */ int ber_enctag(ODR o, int zclass, int tag, int constructed) { int cons = (constructed ? 1 : 0), n = 0; unsigned char octs[sizeof(int)], b; b = (zclass << 6) & 0XC0; b |= (cons << 5) & 0X20; if (tag <= 30) { b |= tag & 0X1F; if (odr_putc(o, b) < 0) return -1; return 1; } else { b |= 0X1F; if (odr_putc(o, b) < 0) return -1; do { octs[n++] = tag & 0X7F; tag >>= 7; } while (tag); while (n--) { unsigned char oo; oo = octs[n] | ((n > 0) << 7); if (odr_putc(o, oo) < 0) return -1; } return 0; } } /** * \brief Decodes BER identifier octets. * * Returns number of bytes read or -1 for error. */ int ber_dectag(const char *cp, int *zclass, int *tag, int *constructed, int max) { const unsigned char *b = (const unsigned char *) cp; int l = 1; if (l > max) return -1; *zclass = *b >> 6; *constructed = (*b >> 5) & 0X01; if ((*tag = *b & 0x1F) <= 30) return 1; *tag = 0; do { if (l >= max) return -1; *tag <<= 7; *tag |= b[l] & 0X7F; } while (b[l++] & 0X80); return l; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/soap.c0000644000175000017500000003064313265142510011234 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file soap.c * \brief Implements SOAP * * This implements encoding and decoding of SOAP packages using * Libxml2. */ #if HAVE_CONFIG_H #include #endif #include #include #if YAZ_HAVE_XML2 #include #include static const char *soap_v1_1 = "http://schemas.xmlsoap.org/soap/envelope/"; static const char *soap_v1_2 = "http://www.w3.org/2001/06/soap-envelope"; int z_soap_codec_enc_xsl(ODR o, Z_SOAP **pp, char **content_buf, int *content_len, Z_SOAP_Handler *handlers, const char *encoding, const char *stylesheet) { if (o->direction == ODR_DECODE) { Z_SOAP *p; xmlNodePtr ptr, pptr; xmlDocPtr doc; int i, ret; if (!content_buf || !*content_buf || !content_len) return -1; *pp = p = (Z_SOAP *) odr_malloc(o, sizeof(*p)); p->ns = soap_v1_1; doc = xmlParseMemory(*content_buf, *content_len); if (!doc) return z_soap_error(o, p, "SOAP-ENV:Client", "Bad XML Document", 0); ptr = xmlDocGetRootElement(doc); if (!ptr || ptr->type != XML_ELEMENT_NODE || !ptr->ns) { xmlFreeDoc(doc); return z_soap_error(o, p, "SOAP-ENV:Client", "No Envelope element", 0); } /* check for SRU root node match */ for (i = 0; handlers[i].ns; i++) { const char *hns = handlers[i].ns; if (strchr(hns, ':')) { if (yaz_match_glob(hns, (const char *) ptr->ns->href)) break; } else { if (yaz_match_glob(hns, (const char *) ptr->name)) break; } } if (handlers[i].ns) { void *handler_data = 0; xmlNode p_top_tmp; /* pseudo parent node needed */ p_top_tmp.children = ptr; ret = (*handlers[i].f)(o, &p_top_tmp, &handler_data, handlers[i].client_data, (const char *)ptr->ns->href); if (ret || !handler_data) z_soap_error(o, p, "SOAP-ENV:Client", "SOAP Handler returned error", 0); else { p->which = Z_SOAP_generic; p->u.generic = (Z_SOAP_Generic *) odr_malloc(o, sizeof(*p->u.generic)); p->u.generic->no = i; p->u.generic->ns = handlers[i].ns; p->u.generic->p = handler_data; } xmlFreeDoc(doc); return ret; } /* OK: assume SOAP */ if (xmlStrcmp(ptr->name, BAD_CAST "Envelope")) { xmlFreeDoc(doc); return z_soap_error(o, p, "SOAP-ENV:Client", "No Envelope element", 0); } else { /* determine SOAP version */ const char * ns_envelope = (const char *) ptr->ns->href; if (!strcmp(ns_envelope, soap_v1_1)) p->ns = soap_v1_1; else if (!strcmp(ns_envelope, soap_v1_2)) p->ns = soap_v1_2; else { xmlFreeDoc(doc); return z_soap_error(o, p, "SOAP-ENV:Client", "Bad SOAP version", 0); } } ptr = ptr->children; while(ptr && ptr->type == XML_TEXT_NODE) ptr = ptr->next; if (ptr && ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->ns->href, BAD_CAST p->ns) && !xmlStrcmp(ptr->name, BAD_CAST "Header")) { ptr = ptr->next; while(ptr && ptr->type == XML_TEXT_NODE) ptr = ptr->next; } /* check that Body is present */ if (!ptr || ptr->type != XML_ELEMENT_NODE || xmlStrcmp(ptr->name, BAD_CAST "Body")) { xmlFreeDoc(doc); return z_soap_error(o, p, "SOAP-ENV:Client", "SOAP Body element not found", 0); } if (xmlStrcmp(ptr->ns->href, BAD_CAST p->ns)) { xmlFreeDoc(doc); return z_soap_error(o, p, "SOAP-ENV:Client", "SOAP bad NS for Body element", 0); } pptr = ptr; ptr = ptr->children; while (ptr && ptr->type == XML_TEXT_NODE) ptr = ptr->next; if (!ptr || ptr->type != XML_ELEMENT_NODE) { xmlFreeDoc(doc); return z_soap_error(o, p, "SOAP-ENV:Client", "SOAP No content for Body", 0); } if (!ptr->ns) { xmlFreeDoc(doc); return z_soap_error(o, p, "SOAP-ENV:Client", "SOAP No namespace for content", 0); } /* check for fault package */ if (!xmlStrcmp(ptr->ns->href, BAD_CAST p->ns) && !xmlStrcmp(ptr->name, BAD_CAST "Fault") && ptr->children) { ptr = ptr->children; p->which = Z_SOAP_fault; p->u.fault = (Z_SOAP_Fault *) odr_malloc(o, sizeof(*p->u.fault)); p->u.fault->fault_code = 0; p->u.fault->fault_string = 0; p->u.fault->details = 0; while (ptr) { if (ptr->children && ptr->children->type == XML_TEXT_NODE) { if (!xmlStrcmp(ptr->name, BAD_CAST "faultcode")) p->u.fault->fault_code = odr_strdup(o, (const char *) ptr->children->content); if (!xmlStrcmp(ptr->name, BAD_CAST "faultstring")) p->u.fault->fault_string = odr_strdup(o, (const char *) ptr->children->content); if (!xmlStrcmp(ptr->name, BAD_CAST "details")) p->u.fault->details = odr_strdup(o, (const char *) ptr->children->content); } ptr = ptr->next; } ret = 0; } else { const char *ns = (const char *) ptr->ns->href; for (i = 0; handlers[i].ns; i++) { if (strchr(handlers[i].ns, ':') && yaz_match_glob(handlers[i].ns, ns)) break; } if (handlers[i].ns) { void *handler_data = 0; ret = (*handlers[i].f)(o, pptr, &handler_data, handlers[i].client_data, ns); if (ret || !handler_data) z_soap_error(o, p, "SOAP-ENV:Client", "SOAP Handler returned error", 0); else { p->which = Z_SOAP_generic; p->u.generic = (Z_SOAP_Generic *) odr_malloc(o, sizeof(*p->u.generic)); p->u.generic->no = i; p->u.generic->ns = handlers[i].ns; p->u.generic->p = handler_data; } } else { ret = z_soap_error(o, p, "SOAP-ENV:Client", "No handler for NS", ns); } } xmlFreeDoc(doc); return ret; } else if (o->direction == ODR_ENCODE) { Z_SOAP *p = *pp; xmlNsPtr ns_env; xmlNodePtr envelope_ptr, body_ptr; xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0"); envelope_ptr = xmlNewNode(0, BAD_CAST "Envelope"); ns_env = xmlNewNs(envelope_ptr, BAD_CAST p->ns, BAD_CAST "SOAP-ENV"); xmlSetNs(envelope_ptr, ns_env); body_ptr = xmlNewChild(envelope_ptr, ns_env, BAD_CAST "Body", 0); xmlDocSetRootElement(doc, envelope_ptr); if (p->which == Z_SOAP_fault || p->which == Z_SOAP_error) { Z_SOAP_Fault *f = p->u.fault; xmlNodePtr fault_ptr = xmlNewChild(body_ptr, ns_env, BAD_CAST "Fault", 0); xmlNewChild(fault_ptr, ns_env, BAD_CAST "faultcode", BAD_CAST f->fault_code); xmlNewChild(fault_ptr, ns_env, BAD_CAST "faultstring", BAD_CAST f->fault_string); if (f->details) xmlNewChild(fault_ptr, ns_env, BAD_CAST "details", BAD_CAST f->details); } else if (p->which == Z_SOAP_generic) { int ret, no = p->u.generic->no; ret = (*handlers[no].f)(o, body_ptr, &p->u.generic->p, handlers[no].client_data, handlers[no].ns); if (ret) { xmlFreeDoc(doc); return ret; } } if (p->which == Z_SOAP_generic && !strcmp(p->ns, "SRU")) { xmlDocSetRootElement(doc, body_ptr->children); body_ptr->children = 0; xmlFreeNode(envelope_ptr); } if (stylesheet) { char *content = (char *) odr_malloc(o, strlen(stylesheet) + 40); xmlNodePtr pi, ptr = xmlDocGetRootElement(doc); sprintf(content, "type=\"text/xsl\" href=\"%s\"", stylesheet); pi = xmlNewPI(BAD_CAST "xml-stylesheet", BAD_CAST content); xmlAddPrevSibling(ptr, pi); } if (1) { xmlChar *buf_out; int len_out; if (encoding) xmlDocDumpMemoryEnc(doc, &buf_out, &len_out, encoding); else xmlDocDumpMemory(doc, &buf_out, &len_out); *content_buf = (char *) odr_malloc(o, len_out); *content_len = len_out; memcpy(*content_buf, buf_out, len_out); xmlFree(buf_out); } xmlFreeDoc(doc); return 0; } return 0; } #else int z_soap_codec_enc_xsl(ODR o, Z_SOAP **pp, char **content_buf, int *content_len, Z_SOAP_Handler *handlers, const char *encoding, const char *stylesheet) { static char *err_xml = "\n" "\n" "\t\n" "\t\t\n" "\t\t\tSOAP-ENV:Server\n" "\t\t\tHTTP error\n" "\t\t\tSOAP not supported in this YAZ configuration\n" "\t\t\n" "\t\n" "\n"; if (o->direction == ODR_ENCODE) { *content_buf = err_xml; *content_len = strlen(err_xml); } return -1; } #endif int z_soap_codec_enc(ODR o, Z_SOAP **pp, char **content_buf, int *content_len, Z_SOAP_Handler *handlers, const char *encoding) { return z_soap_codec_enc_xsl(o, pp, content_buf, content_len, handlers, encoding, 0); } int z_soap_codec(ODR o, Z_SOAP **pp, char **content_buf, int *content_len, Z_SOAP_Handler *handlers) { return z_soap_codec_enc(o, pp, content_buf, content_len, handlers, 0); } int z_soap_error(ODR o, Z_SOAP *p, const char *fault_code, const char *fault_string, const char *details) { p->which = Z_SOAP_error; p->u.soap_error = (Z_SOAP_Fault *) odr_malloc(o, sizeof(*p->u.soap_error)); p->u.soap_error->fault_code = odr_strdup(o, fault_code); p->u.soap_error->fault_string = odr_strdup(o, fault_string); if (details) p->u.soap_error->details = odr_strdup(o, details); else p->u.soap_error->details = 0; return -1; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/pquery.c0000644000175000017500000006237213265142510011623 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file pquery.c * \brief Implements PQF parsing */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include struct yaz_pqf_parser { const char *query_buf; const char *query_ptr; const char *lex_buf; size_t lex_len; int query_look; char *left_sep; char *right_sep; int escape_char; int term_type; int external_type; int error; }; static Z_RPNStructure *rpn_structure(struct yaz_pqf_parser *li, ODR o, int num_attr, int max_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set); static Odr_oid *query_oid_getvalbyname(struct yaz_pqf_parser *li, ODR o) { char buf[32]; if (li->lex_len >= sizeof(buf)-1) return 0; memcpy(buf, li->lex_buf, li->lex_len); buf[li->lex_len] = '\0'; return yaz_string_to_oid_odr(yaz_oid_std(), CLASS_ATTSET, buf, o); } static int compare_term(struct yaz_pqf_parser *li, const char *src, size_t off) { size_t len=strlen(src); if (li->lex_len == len+off && !memcmp(li->lex_buf+off, src, len-off)) return 1; return 0; } static int query_token(struct yaz_pqf_parser *li) { int sep_char = ' '; const char *sep_match; const char **qptr = &li->query_ptr; while (**qptr == ' ') (*qptr)++; if (**qptr == '\0') return 0; li->lex_len = 0; if ((sep_match = strchr(li->left_sep, **qptr))) { sep_char = li->right_sep[sep_match - li->left_sep]; ++(*qptr); } li->lex_buf = *qptr; if (**qptr == li->escape_char && yaz_isdigit((*qptr)[1])) { ++(li->lex_len); ++(*qptr); return 'l'; } while (**qptr && **qptr != sep_char) { if (**qptr == '\\' && (*qptr)[1]) { ++(li->lex_len); ++(*qptr); } ++(li->lex_len); ++(*qptr); } if (**qptr) ++(*qptr); if (sep_char == ' ' && li->lex_len >= 1 && li->lex_buf[0] == li->escape_char) { if (compare_term(li, "and", 1)) return 'a'; if (compare_term(li, "or", 1)) return 'o'; if (compare_term(li, "not", 1)) return 'n'; if (compare_term(li, "attr", 1)) return 'l'; if (compare_term(li, "set", 1)) return 's'; if (compare_term(li, "attrset", 1)) return 'r'; if (compare_term(li, "prox", 1)) return 'p'; if (compare_term(li, "term", 1)) return 'y'; } return 't'; } static int lex(struct yaz_pqf_parser *li) { return li->query_look = query_token(li); } static int escape_string(char *out_buf, const char *in, int len) { char *out = out_buf; while (--len >= 0) if (*in == '\\' && len > 0) { --len; switch (*++in) { case 't': *out++ = '\t'; break; case 'n': *out++ = '\n'; break; case 'r': *out++ = '\r'; break; case 'f': *out++ = '\f'; break; case 'x': if (len > 1) { char s[4]; int n = 0; s[0] = *++in; s[1] = *++in; s[2] = '\0'; len = len - 2; sscanf(s, "%x", &n); *out++ = n; } break; case '0': case '1': case '2': case '3': if (len > 1) { char s[4]; int n = 0; s[0] = *in; s[1] = *++in; s[2] = *++in; s[3] = '\0'; len = len - 2; sscanf(s, "%o", &n); *out++ = n; } break; default: *out++ = *in; break; } in++; } else *out++ = *in++; return out - out_buf; } static int p_query_parse_attr(struct yaz_pqf_parser *li, ODR o, int num_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set) { const char *cp; size_t i; if (!(cp = strchr(li->lex_buf, '=')) || (size_t) (cp-li->lex_buf) > li->lex_len) { attr_set[num_attr] = query_oid_getvalbyname(li, o); if (attr_set[num_attr] == 0) { li->error = YAZ_PQF_ERROR_ATTSET; return 0; } if (!lex(li)) { li->error = YAZ_PQF_ERROR_MISSING; return 0; } if (!(cp = strchr(li->lex_buf, '='))) { li->error = YAZ_PQF_ERROR_BADATTR; return 0; } } else { if (num_attr > 0) attr_set[num_attr] = attr_set[num_attr-1]; else attr_set[num_attr] = 0; } if (*li->lex_buf < '0' || *li->lex_buf > '9') { li->error = YAZ_PQF_ERROR_BAD_INTEGER; return 0; } attr_list[2*num_attr] = odr_atoi(li->lex_buf); cp++; /* inspect value .. and make it a integer if it appears to be */ for (i = cp - li->lex_buf; i < li->lex_len; i++) if (li->lex_buf[i] < '0' || li->lex_buf[i] > '9') { int len = li->lex_len - (cp - li->lex_buf); attr_list[2*num_attr+1] = 0; attr_clist[num_attr] = (char *) odr_malloc(o, len+1); len = escape_string(attr_clist[num_attr], cp, len); attr_clist[num_attr][len] = '\0'; return 1; } attr_list[2*num_attr+1] = odr_atoi(cp); attr_clist[num_attr] = 0; return 1; } static Z_AttributeList *get_attributeList(ODR o, int num_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set) { int i, k = 0; Odr_int *attr_tmp; Z_AttributeElement **elements; Z_AttributeList *attributes= (Z_AttributeList *) odr_malloc(o, sizeof(*attributes)); attributes->num_attributes = num_attr; if (!num_attr) { attributes->attributes = (Z_AttributeElement**)odr_nullval(); return attributes; } elements = (Z_AttributeElement**) odr_malloc(o, num_attr * sizeof(*elements)); attr_tmp = (Odr_int *)odr_malloc(o, num_attr * 2 * sizeof(*attr_tmp)); memcpy(attr_tmp, attr_list, num_attr * 2 * sizeof(*attr_tmp)); for (i = num_attr; --i >= 0; ) { int j; for (j = i+1; jattributeType = &attr_tmp[2*i]; elements[k]->attributeSet = attr_set[i]; if (attr_clist[i]) { elements[k]->which = Z_AttributeValue_complex; elements[k]->value.complex = (Z_ComplexAttribute *) odr_malloc(o, sizeof(Z_ComplexAttribute)); elements[k]->value.complex->num_list = 1; elements[k]->value.complex->list = (Z_StringOrNumeric **) odr_malloc(o, 1 * sizeof(Z_StringOrNumeric *)); elements[k]->value.complex->list[0] = (Z_StringOrNumeric *) odr_malloc(o, sizeof(Z_StringOrNumeric)); elements[k]->value.complex->list[0]->which = Z_StringOrNumeric_string; elements[k]->value.complex->list[0]->u.string = attr_clist[i]; elements[k]->value.complex->semanticAction = 0; elements[k]->value.complex->num_semanticAction = 0; } else { elements[k]->which = Z_AttributeValue_numeric; elements[k]->value.numeric = &attr_tmp[2*i+1]; } k++; } attributes->num_attributes = k; attributes->attributes = elements; return attributes; } Z_AttributeList *zget_AttributeList_use_string(ODR o, const char *name) { Odr_int attr_list[2]; char *attr_clist[1]; Odr_oid *attr_set[1]; attr_list[0] = 1; attr_list[1] = 0; /* not used */ attr_clist[0] = odr_strdup(o, name); attr_set[0] = 0; return get_attributeList(o, 1, attr_list, attr_clist, attr_set); } Z_Term *z_Term_create(ODR o, int term_type, const char *buf, size_t len) { Z_Term *term = (Z_Term *)odr_malloc(o, sizeof(*term)); switch (term_type) { case Z_Term_general: term->which = Z_Term_general; term->u.general = odr_create_Odr_oct(o, buf, len); break; case Z_Term_characterString: term->which = Z_Term_characterString; term->u.characterString = odr_strdupn(o, buf, len); break; case Z_Term_numeric: term->which = Z_Term_numeric; term->u.numeric = odr_intdup(o, odr_atoi(odr_strdupn(o, buf, len))); break; case Z_Term_null: term->which = Z_Term_null; term->u.null = odr_nullval(); break; case Z_Term_external: term->which = Z_Term_external; term->u.external = 0; break; default: term->which = Z_Term_null; term->u.null = odr_nullval(); break; } return term; } static Z_AttributesPlusTerm *rpn_term_attributes( struct yaz_pqf_parser *li, ODR o, Z_AttributeList *attributes) { char *es_str = odr_malloc(o, li->lex_len+1); int es_len = escape_string(es_str, li->lex_buf, li->lex_len); Z_Term *term = z_Term_create(o, li->term_type, es_str, es_len); Z_AttributesPlusTerm *zapt = (Z_AttributesPlusTerm *) odr_malloc(o, sizeof(*zapt)); zapt->term = term; zapt->attributes = attributes; return zapt; } static Z_AttributesPlusTerm *rpn_term(struct yaz_pqf_parser *li, ODR o, int num_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set) { return rpn_term_attributes(li, o, get_attributeList(o, num_attr, attr_list, attr_clist, attr_set)); } static Z_Operand *rpn_simple(struct yaz_pqf_parser *li, ODR o, int num_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set) { Z_Operand *zo; zo = (Z_Operand *)odr_malloc(o, sizeof(*zo)); switch (li->query_look) { case 't': zo->which = Z_Operand_APT; if (!(zo->u.attributesPlusTerm = rpn_term(li, o, num_attr, attr_list, attr_clist, attr_set))) return 0; lex(li); break; case 's': lex(li); if (!li->query_look) { li->error = YAZ_PQF_ERROR_MISSING; return 0; } zo->which = Z_Operand_resultSetId; zo->u.resultSetId = odr_strdupn(o, li->lex_buf, li->lex_len); lex(li); break; default: /* we're only called if one of the above types are seens so this shouldn't happen */ li->error = YAZ_PQF_ERROR_INTERNAL; return 0; } return zo; } static Z_ProximityOperator *rpn_proximity(struct yaz_pqf_parser *li, ODR o) { Z_ProximityOperator *p = (Z_ProximityOperator *)odr_malloc(o, sizeof(*p)); if (!lex(li)) { li->error = YAZ_PQF_ERROR_MISSING; return NULL; } if (*li->lex_buf == '1') p->exclusion = odr_booldup(o, 1); else if (*li->lex_buf == '0') p->exclusion = odr_booldup(o, 0); else if (*li->lex_buf == 'v' || *li->lex_buf == 'n') p->exclusion = NULL; else { li->error = YAZ_PQF_ERROR_PROXIMITY; return NULL; } if (!lex(li)) { li->error = YAZ_PQF_ERROR_MISSING; return NULL; } if (*li->lex_buf >= '0' && *li->lex_buf <= '9') p->distance = odr_intdup(o, odr_atoi(li->lex_buf)); else { li->error = YAZ_PQF_ERROR_BAD_INTEGER; return NULL; } if (!lex(li)) { li->error = YAZ_PQF_ERROR_MISSING; return NULL; } if (*li->lex_buf == '1') p->ordered = odr_booldup(o, 1); else if (*li->lex_buf == '0') p->ordered = odr_booldup(o, 0); else { li->error = YAZ_PQF_ERROR_PROXIMITY; return NULL; } if (!lex (li)) { li->error = YAZ_PQF_ERROR_MISSING; return NULL; } if (*li->lex_buf >= '0' && *li->lex_buf <= '9') p->relationType = odr_intdup(o, odr_atoi(li->lex_buf)); else { li->error = YAZ_PQF_ERROR_BAD_INTEGER; return NULL; } if (!lex(li)) { li->error = YAZ_PQF_ERROR_MISSING; return NULL; } if (*li->lex_buf == 'k') p->which = Z_ProximityOperator_known; else if (*li->lex_buf == 'p') p->which = Z_ProximityOperator_private; else p->which = atoi(li->lex_buf); if (p->which != Z_ProximityOperator_known && p->which != Z_ProximityOperator_private) { li->error = YAZ_PQF_ERROR_PROXIMITY; return NULL; } if (!lex(li)) { li->error = YAZ_PQF_ERROR_MISSING; return NULL; } if (*li->lex_buf >= '0' && *li->lex_buf <= '9') p->u.known = odr_intdup(o, odr_atoi(li->lex_buf)); else { li->error = YAZ_PQF_ERROR_BAD_INTEGER; return NULL; } return p; } static Z_Complex *rpn_complex(struct yaz_pqf_parser *li, ODR o, int num_attr, int max_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set) { Z_Complex *zc; Z_Operator *zo; zc = (Z_Complex *)odr_malloc(o, sizeof(*zc)); zo = (Z_Operator *)odr_malloc(o, sizeof(*zo)); zc->roperator = zo; switch (li->query_look) { case 'a': zo->which = Z_Operator_and; zo->u.op_and = odr_nullval(); break; case 'o': zo->which = Z_Operator_or; zo->u.op_or = odr_nullval(); break; case 'n': zo->which = Z_Operator_and_not; zo->u.and_not = odr_nullval(); break; case 'p': zo->which = Z_Operator_prox; zo->u.prox = rpn_proximity(li, o); if (!zo->u.prox) return NULL; break; default: /* we're only called if one of the above types are seens so this shouldn't happen */ li->error = YAZ_PQF_ERROR_INTERNAL; return NULL; } lex(li); if (!(zc->s1 = rpn_structure(li, o, num_attr, max_attr, attr_list, attr_clist, attr_set))) return NULL; if (!(zc->s2 = rpn_structure(li, o, num_attr, max_attr, attr_list, attr_clist, attr_set))) return NULL; return zc; } static void rpn_term_type(struct yaz_pqf_parser *li) { if (!li->query_look) return ; if (compare_term(li, "general", 0)) li->term_type = Z_Term_general; else if (compare_term(li, "numeric", 0)) li->term_type = Z_Term_numeric; else if (compare_term(li, "string", 0)) li->term_type = Z_Term_characterString; else if (compare_term(li, "oid", 0)) li->term_type = Z_Term_oid; else if (compare_term(li, "datetime", 0)) li->term_type = Z_Term_dateTime; else if (compare_term(li, "null", 0)) li->term_type = Z_Term_null; #if 0 else if (compare_term(li, "range", 0)) { /* prepare for external: range search .. */ li->term_type = Z_Term_external; li->external_type = VAL_MULTISRCH2; } #endif lex(li); } static Z_RPNStructure *rpn_structure(struct yaz_pqf_parser *li, ODR o, int num_attr, int max_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set) { Z_RPNStructure *sz; sz = (Z_RPNStructure *)odr_malloc(o, sizeof(*sz)); switch (li->query_look) { case 'a': case 'o': case 'n': case 'p': sz->which = Z_RPNStructure_complex; if (!(sz->u.complex = rpn_complex(li, o, num_attr, max_attr, attr_list, attr_clist, attr_set))) return NULL; break; case 't': case 's': sz->which = Z_RPNStructure_simple; if (!(sz->u.simple = rpn_simple(li, o, num_attr, attr_list, attr_clist, attr_set))) return NULL; break; case 'l': lex(li); if (!li->query_look) { li->error = YAZ_PQF_ERROR_MISSING; return 0; } if (num_attr >= max_attr) { li->error = YAZ_PQF_ERROR_TOOMANY; return 0; } if (!p_query_parse_attr(li, o, num_attr, attr_list, attr_clist, attr_set)) return 0; num_attr++; lex(li); return rpn_structure(li, o, num_attr, max_attr, attr_list, attr_clist, attr_set); case 'y': lex(li); rpn_term_type(li); return rpn_structure(li, o, num_attr, max_attr, attr_list, attr_clist, attr_set); case 0: /* operator/operand expected! */ li->error = YAZ_PQF_ERROR_MISSING; return 0; } return sz; } static Z_RPNQuery *p_query_rpn_mk(ODR o, struct yaz_pqf_parser *li) { Z_RPNQuery *zq; Odr_int attr_array[1024]; char *attr_clist[512]; Odr_oid *attr_set[512]; Odr_oid *top_set = 0; zq = (Z_RPNQuery *)odr_malloc(o, sizeof(*zq)); lex(li); if (li->query_look == 'r') { lex(li); top_set = query_oid_getvalbyname(li, o); if (!top_set) { li->error = YAZ_PQF_ERROR_ATTSET; return NULL; } lex(li); } if (!top_set) { top_set = odr_oiddup(o, yaz_oid_attset_bib_1); } zq->attributeSetId = top_set; if (!zq->attributeSetId) { li->error = YAZ_PQF_ERROR_ATTSET; return 0; } if (!(zq->RPNStructure = rpn_structure(li, o, 0, 512, attr_array, attr_clist, attr_set))) return 0; if (li->query_look) { li->error = YAZ_PQF_ERROR_EXTRA; return 0; } return zq; } static void pqf_parser_begin(struct yaz_pqf_parser *li, const char *buf) { li->query_buf = li->query_ptr = buf; li->lex_buf = 0; } Z_RPNQuery *p_query_rpn(ODR o, const char *qbuf) { struct yaz_pqf_parser li; li.error = 0; li.left_sep = "{\""; li.right_sep = "}\""; li.escape_char = '@'; li.term_type = Z_Term_general; pqf_parser_begin(&li, qbuf); return p_query_rpn_mk(o, &li); } static Z_AttributeList *p_query_scan_attributes_mk(struct yaz_pqf_parser *li, ODR o, Odr_oid **attributeSetP) { Odr_int attr_list[1024]; char *attr_clist[512]; Odr_oid *attr_set[512]; int num_attr = 0; int max_attr = 512; Odr_oid *top_set = 0; lex(li); if (li->query_look == 'r') { lex(li); top_set = query_oid_getvalbyname(li, o); if (!top_set) { li->error = YAZ_PQF_ERROR_ATTSET; return NULL; } lex(li); } if (!top_set) { top_set = odr_oiddup(o, yaz_oid_attset_bib_1); } *attributeSetP = top_set; while (1) { if (li->query_look == 'l') { lex(li); if (!li->query_look) { li->error = YAZ_PQF_ERROR_MISSING; return 0; } if (num_attr >= max_attr) { li->error = YAZ_PQF_ERROR_TOOMANY; return 0; } if (!p_query_parse_attr(li, o, num_attr, attr_list, attr_clist, attr_set)) return 0; num_attr++; lex(li); } else if (li->query_look == 'y') { lex(li); rpn_term_type(li); } else break; } return get_attributeList(o, num_attr, attr_list, attr_clist, attr_set); } static Z_AttributesPlusTerm *p_query_scan_mk(struct yaz_pqf_parser *li, ODR o, Odr_oid **attributeSetP) { Z_AttributeList *attr_list = p_query_scan_attributes_mk(li, o, attributeSetP); Z_AttributesPlusTerm *apt; if (!li->query_look) { li->error = YAZ_PQF_ERROR_MISSING; return 0; } apt = rpn_term_attributes(li, o, attr_list); lex(li); if (li->query_look != 0) { li->error = YAZ_PQF_ERROR_EXTRA; return 0; } return apt; } YAZ_PQF_Parser yaz_pqf_create(void) { YAZ_PQF_Parser p = (YAZ_PQF_Parser) xmalloc(sizeof(*p)); p->error = 0; p->left_sep = "{\""; p->right_sep = "}\""; p->escape_char = '@'; p->term_type = Z_Term_general; return p; } void yaz_pqf_destroy(YAZ_PQF_Parser p) { xfree(p); } Z_RPNQuery *yaz_pqf_parse(YAZ_PQF_Parser p, ODR o, const char *qbuf) { if (!p) return 0; pqf_parser_begin(p, qbuf); return p_query_rpn_mk(o, p); } Z_AttributesPlusTerm *yaz_pqf_scan(YAZ_PQF_Parser p, ODR o, Odr_oid **attributeSetP, const char *qbuf) { if (!p) return 0; pqf_parser_begin(p, qbuf); return p_query_scan_mk(p, o, attributeSetP); } Z_AttributeList *yaz_pqf_scan_attribute_list(YAZ_PQF_Parser p, ODR o, Odr_oid **attributeSetP, const char *qbuf) { if (!p) return 0; pqf_parser_begin(p, qbuf); return p_query_scan_attributes_mk(p, o, attributeSetP); } static Z_FacetField* parse_facet(ODR odr, const char *facet) { YAZ_PQF_Parser pqf_parser = yaz_pqf_create(); struct yaz_pqf_parser *li = pqf_parser; Odr_oid *attributeSetId = 0; Z_FacetField *facet_field = 0; Z_AttributeList *attribute_list; pqf_parser_begin(pqf_parser, facet); attribute_list = p_query_scan_attributes_mk(li, odr, &attributeSetId); if (attribute_list) { facet_field = (Z_FacetField *) odr_malloc(odr, sizeof(*facet_field)); facet_field->attributes = attribute_list; facet_field->num_terms = 0; facet_field->terms = odr_malloc(odr, 10 * sizeof(*facet_field->terms)); while (li->query_look == 't') { if (facet_field->num_terms < 10) { char *es_str = odr_malloc(odr, li->lex_len+1); int es_len = escape_string(es_str, li->lex_buf, li->lex_len); Z_Term *term = z_Term_create(odr, li->term_type, es_str, es_len); facet_field->terms[facet_field->num_terms] = (Z_FacetTerm *) odr_malloc(odr, sizeof(Z_FacetTerm)); facet_field->terms[facet_field->num_terms]->term = term; facet_field->terms[facet_field->num_terms]->count = odr_intdup(odr, 0); facet_field->num_terms++; } lex(li); } } yaz_pqf_destroy(pqf_parser); return facet_field; } Z_FacetList *yaz_pqf_parse_facet_list(ODR o, const char *qbuf) { char **darray; int num; nmem_strsplit(odr_getmem(o), ",", qbuf, &darray, &num); if (num > 0) { int i; Z_FacetList *fl = (Z_FacetList*) odr_malloc(o, sizeof(*fl)); fl->num = num; fl->elements = (Z_FacetField **) odr_malloc(o, num * sizeof(*fl->elements)); for (i = 0; i < num; i++) { fl->elements[i] = parse_facet(o, darray[i]); if (!fl->elements[i]) return 0; } return fl; } else return 0; } int yaz_pqf_error(YAZ_PQF_Parser p, const char **msg, size_t *off) { switch (p->error) { case YAZ_PQF_ERROR_NONE: *msg = "no error"; break; case YAZ_PQF_ERROR_EXTRA: *msg = "extra token"; break; case YAZ_PQF_ERROR_MISSING: *msg = "missing token"; break; case YAZ_PQF_ERROR_ATTSET: *msg = "unknown attribute set"; break; case YAZ_PQF_ERROR_TOOMANY: *msg = "too many attributes"; break; case YAZ_PQF_ERROR_BADATTR: *msg = "bad attribute specification"; break; case YAZ_PQF_ERROR_INTERNAL: *msg = "internal error"; break; case YAZ_PQF_ERROR_PROXIMITY: *msg = "proximity error"; break; case YAZ_PQF_ERROR_BAD_INTEGER: *msg = "bad integer"; break; default: *msg = "unknown error"; break; } *off = p->query_ptr - p->query_buf; return p->error; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/icu_chain.c0000644000175000017500000004604713265142510012221 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief ICU chain */ #if HAVE_CONFIG_H #include "config.h" #endif #if YAZ_HAVE_ICU #include #include #include #include #include #include #include #include #include #include #include #include /* some more string fcns*/ #include /* char names */ enum icu_chain_step_type { ICU_chain_step_type_none, ICU_chain_step_type_display, /* convert to utf8 display format */ ICU_chain_step_type_casemap, /* apply utf16 charmap */ ICU_chain_step_type_transform, /* apply utf16 transform */ ICU_chain_step_type_tokenize, /* apply utf16 tokenization */ ICU_chain_step_type_transliterate, /* apply utf16 tokenization */ YAZ_chain_step_type_stemming, /* apply utf16 stemming (YAZ) */ ICU_chain_step_type_join }; struct icu_chain_step { /* type and action object */ enum icu_chain_step_type type; union { struct icu_casemap *casemap; struct icu_transform *transform; struct icu_tokenizer *tokenizer; yaz_stemmer_p stemmer; struct icu_buf_utf16 *join; } u; struct icu_chain_step *previous; }; struct icu_chain { yaz_icu_iter_t iter; char *locale; int sort; UCollator *coll; /* linked list of chain steps */ struct icu_chain_step *csteps; }; int icu_check_status(UErrorCode status) { if (U_FAILURE(status)) { yaz_log(YLOG_WARN, "ICU: %d %s\n", status, u_errorName(status)); return 0; } return 1; } static struct icu_chain_step *icu_chain_insert_step( struct icu_chain *chain, enum icu_chain_step_type type, const char *rule, UErrorCode *status) { struct icu_chain_step *step = 0; assert(chain); assert(type); step = (struct icu_chain_step *) xmalloc(sizeof(*step)); step->type = type; switch (step->type) { case ICU_chain_step_type_display: break; case ICU_chain_step_type_casemap: assert(rule); step->u.casemap = icu_casemap_create(rule[0], status); break; case ICU_chain_step_type_transform: assert(rule); /* rule omitted. Only ID used */ step->u.transform = icu_transform_create(rule, 'f', 0, status); break; case ICU_chain_step_type_tokenize: assert(rule); step->u.tokenizer = icu_tokenizer_create(chain->locale, rule[0], status); break; case ICU_chain_step_type_transliterate: assert(rule); /* we pass a dummy ID to utrans_openU.. */ step->u.transform = icu_transform_create("custom", 'f', rule, status); break; case YAZ_chain_step_type_stemming: assert(rule); step->u.stemmer = yaz_stemmer_create(chain->locale, rule, status); break; case ICU_chain_step_type_join: assert(rule); step->u.join = icu_buf_utf16_create(0); icu_utf16_from_utf8_cstr(step->u.join, rule, status); break; default: break; } step->previous = chain->csteps; chain->csteps = step; return step; } static void icu_chain_step_destroy(struct icu_chain_step *step) { if (!step) return; icu_chain_step_destroy(step->previous); switch (step->type) { case ICU_chain_step_type_display: break; case ICU_chain_step_type_casemap: icu_casemap_destroy(step->u.casemap); break; case ICU_chain_step_type_transform: case ICU_chain_step_type_transliterate: icu_transform_destroy(step->u.transform); break; case ICU_chain_step_type_tokenize: icu_tokenizer_destroy(step->u.tokenizer); break; case YAZ_chain_step_type_stemming: yaz_stemmer_destroy(step->u.stemmer); break; case ICU_chain_step_type_join: icu_buf_utf16_destroy(step->u.join); break; default: break; } xfree(step); } struct icu_chain_step *icu_chain_step_clone(struct icu_chain_step *old) { struct icu_chain_step *step = 0; struct icu_chain_step **sp = &step; while (old) { *sp = (struct icu_chain_step *) xmalloc(sizeof(**sp)); (*sp)->type = old->type; switch ((*sp)->type) { case ICU_chain_step_type_display: break; case ICU_chain_step_type_casemap: (*sp)->u.casemap = icu_casemap_clone(old->u.casemap); break; case ICU_chain_step_type_transform: case ICU_chain_step_type_transliterate: (*sp)->u.transform = icu_transform_clone(old->u.transform); break; case ICU_chain_step_type_tokenize: (*sp)->u.tokenizer = icu_tokenizer_clone(old->u.tokenizer); break; case YAZ_chain_step_type_stemming: (*sp)->u.stemmer = yaz_stemmer_clone(old->u.stemmer); break; case ICU_chain_step_type_none: break; case ICU_chain_step_type_join: (*sp)->u.join = icu_buf_utf16_create(0); (*sp)->u.join = icu_buf_utf16_copy((*sp)->u.join, old->u.join); break; } old = old->previous; sp = &(*sp)->previous; } *sp = 0; return step; } struct icu_chain *icu_chain_create(const char *locale, int sort, UErrorCode *status) { struct icu_chain *chain; UCollator *coll = ucol_open(locale, status); if (U_FAILURE(*status)) return 0; chain = (struct icu_chain *) xmalloc(sizeof(*chain)); chain->iter = 0; chain->locale = xstrdup(locale); chain->sort = sort; chain->coll = coll; chain->csteps = 0; return chain; } void icu_chain_destroy(struct icu_chain *chain) { if (chain) { if (chain->coll) ucol_close(chain->coll); if (chain->iter) icu_iter_destroy(chain->iter); icu_chain_step_destroy(chain->csteps); xfree(chain->locale); xfree(chain); } } struct icu_chain *icu_chain_xml_config(const xmlNode *xml_node, int sort, UErrorCode *status) { xmlNode *node = 0; int no_errors = 0; struct icu_chain *chain = 0; NMEM nmem = 0; *status = U_ZERO_ERROR; if (xml_node && xml_node->type == XML_ELEMENT_NODE) { const char *xml_locale = yaz_xml_get_prop((xmlNode *) xml_node, "locale"); if (xml_locale) chain = icu_chain_create((const char *) xml_locale, sort, status); } if (!chain) return 0; nmem = nmem_create(); for (node = xml_node->children; node; node = node->next) { char *rule = 0; struct icu_chain_step *step = 0; const char *attr_str; nmem_reset(nmem); if (node->type != XML_ELEMENT_NODE) continue; attr_str = yaz_xml_get_prop(node, "rule%s", &rule); if (attr_str) { yaz_log(YLOG_WARN, "Unsupported attribute '%s' for " "element '%s'", attr_str, node->name); no_errors++; } if (!rule && node->children) rule = nmem_text_node_cdata(node->children, nmem); if (!rule && strcmp((const char *) node->name, "display")) { yaz_log(YLOG_WARN, "Missing attribute 'rule' for element %s", (const char *) node->name); no_errors++; continue; } if (!strcmp((const char *) node->name, "casemap")) step = icu_chain_insert_step(chain, ICU_chain_step_type_casemap, rule, status); else if (!strcmp((const char *) node->name, "transform")) step = icu_chain_insert_step(chain, ICU_chain_step_type_transform, rule, status); else if (!strcmp((const char *) node->name, "transliterate")) step = icu_chain_insert_step(chain, ICU_chain_step_type_transliterate, rule, status); else if (!strcmp((const char *) node->name, "tokenize")) step = icu_chain_insert_step(chain, ICU_chain_step_type_tokenize, rule, status); else if (!strcmp((const char *) node->name, "display")) step = icu_chain_insert_step(chain, ICU_chain_step_type_display, rule, status); else if (!strcmp((const char *) node->name, "stemming")) step = icu_chain_insert_step(chain, YAZ_chain_step_type_stemming, rule, status); else if (!strcmp((const char *) node->name, "join")) step = icu_chain_insert_step(chain, ICU_chain_step_type_join, rule, status); else if (!strcmp((const char *) node->name, "normalize")) { yaz_log(YLOG_WARN, "Element %s is deprecated. " "Use transform instead", node->name); step = icu_chain_insert_step(chain, ICU_chain_step_type_transform, rule, status); } else if (!strcmp((const char *) node->name, "index") || !strcmp((const char *) node->name, "sortkey")) { yaz_log(YLOG_WARN, "Element %s is no longer needed. " "Remove it from the configuration", node->name); } else { yaz_log(YLOG_WARN, "Unknown element %s", node->name); no_errors++; continue; } if (!step) { yaz_log(YLOG_WARN, "Step not created for %s", node->name); no_errors++; } if (step && U_FAILURE(*status)) { yaz_log(YLOG_WARN, "ICU Error %d %s for element %s, rule %s", *status, u_errorName(*status), node->name, rule ? rule : ""); no_errors++; break; } } nmem_destroy(nmem); if (no_errors) { icu_chain_destroy(chain); return 0; } return chain; } struct icu_iter { struct icu_chain *chain; struct icu_buf_utf16 *last; struct icu_buf_utf16 *org; struct icu_buf_utf8 *org8; UErrorCode status; struct icu_buf_utf8 *display; struct icu_buf_utf8 *sort8; struct icu_buf_utf8 *result; int token_count; size_t org_start; size_t org_len; size_t utf8_base; size_t utf16_base; struct icu_chain_step *steps; }; void icu_utf16_print(struct icu_buf_utf16 *src16) { UErrorCode status = U_ZERO_ERROR; const char *p; struct icu_buf_utf8 *dst8 = icu_buf_utf8_create(0); icu_utf16_to_utf8(dst8, src16, &status); if (U_FAILURE(status)) { printf("failure"); } else { p = icu_buf_utf8_to_cstr(dst8); printf("%s", p); } icu_buf_utf8_destroy(dst8); } struct icu_buf_utf16 *icu_iter_invoke(yaz_icu_iter_t iter, struct icu_chain_step *step, struct icu_buf_utf16 *src) { if (!step) return src; else { struct icu_buf_utf16 *dst = icu_iter_invoke(iter, step->previous, src); switch (step->type) { case ICU_chain_step_type_casemap: if (dst) { struct icu_buf_utf16 *src = dst; dst = icu_buf_utf16_create(0); icu_casemap_casemap(step->u.casemap, dst, src, &iter->status, iter->chain->locale); icu_buf_utf16_destroy(src); } break; case ICU_chain_step_type_tokenize: if (dst) { struct icu_buf_utf16 *src = dst; icu_tokenizer_attach(step->u.tokenizer, src, &iter->status); if (step->previous) { /* no need to copy if it's already the same */ iter->utf8_base = iter->utf16_base = 0; icu_buf_utf16_copy(iter->org, src); } icu_buf_utf16_destroy(src); } dst = icu_buf_utf16_create(0); iter->status = U_ZERO_ERROR; if (!icu_tokenizer_next_token(step->u.tokenizer, dst, &iter->status, &iter->org_start, &iter->org_len)) { icu_buf_utf16_destroy(dst); dst = 0; } break; case ICU_chain_step_type_transform: case ICU_chain_step_type_transliterate: if (dst) { struct icu_buf_utf16 *src = dst; dst = icu_buf_utf16_create(0); icu_transform_trans(step->u.transform, dst, src, &iter->status); icu_buf_utf16_destroy(src); } break; case ICU_chain_step_type_display: if (dst) icu_utf16_to_utf8(iter->display, dst, &iter->status); break; case YAZ_chain_step_type_stemming: if (dst) { struct icu_buf_utf16 *src = dst; dst = icu_buf_utf16_create(0); yaz_stemmer_stem(step->u.stemmer, dst, src, &iter->status); icu_buf_utf16_destroy(src); } break; case ICU_chain_step_type_join: if (dst) { while (1) { struct icu_buf_utf16 *dst1 = icu_iter_invoke(iter, step->previous, 0); if (!dst1) break; dst = icu_buf_utf16_append(dst, step->u.join); dst = icu_buf_utf16_append(dst, dst1); icu_buf_utf16_destroy(dst1); } } break; default: assert(0); } return dst; } } yaz_icu_iter_t icu_iter_create(struct icu_chain *chain) { yaz_icu_iter_t iter = xmalloc(sizeof(*iter)); iter->chain = chain; iter->status = U_ZERO_ERROR; iter->display = icu_buf_utf8_create(0); iter->sort8 = icu_buf_utf8_create(0); iter->result = icu_buf_utf8_create(0); iter->org = icu_buf_utf16_create(0); iter->org8 = 0; iter->last = 0; /* no last returned string (yet) */ iter->steps = icu_chain_step_clone(chain->csteps); iter->token_count = 0; return iter; } void icu_iter_first(yaz_icu_iter_t iter, const char *src8cstr) { struct icu_buf_utf16 *src = icu_buf_utf16_create(0); icu_utf16_from_utf8_cstr(src, src8cstr, &iter->status); icu_buf_utf16_copy(iter->org, src); iter->token_count = 0; iter->org_start = 0; iter->utf8_base = iter->utf16_base = 0; iter->org_len = src->utf16_len; iter->last = icu_iter_invoke(iter, iter->steps, src); } void icu_iter_destroy(yaz_icu_iter_t iter) { if (iter) { icu_buf_utf8_destroy(iter->display); icu_buf_utf8_destroy(iter->sort8); icu_buf_utf8_destroy(iter->result); icu_buf_utf16_destroy(iter->org); icu_buf_utf8_destroy(iter->org8); icu_chain_step_destroy(iter->steps); xfree(iter); } } int icu_iter_next(yaz_icu_iter_t iter) { if (iter->token_count && iter->last) iter->last = icu_iter_invoke(iter, iter->steps, 0); if (!iter->last) return 0; else { iter->token_count++; if (iter->chain->sort) { icu_sortkey8_from_utf16(iter->chain->coll, iter->sort8, iter->last, &iter->status); } icu_utf16_to_utf8(iter->result, iter->last, &iter->status); icu_buf_utf16_destroy(iter->last); return 1; } } const char *icu_iter_get_norm(yaz_icu_iter_t iter) { return icu_buf_utf8_to_cstr(iter->result); } const char *icu_iter_get_sortkey(yaz_icu_iter_t iter) { return icu_buf_utf8_to_cstr(iter->sort8); } const char *icu_iter_get_display(yaz_icu_iter_t iter) { return icu_buf_utf8_to_cstr(iter->display); } int icu_iter_get_token_number(yaz_icu_iter_t iter) { return iter->token_count; } void icu_iter_get_org_info2(yaz_icu_iter_t iter, size_t *start, size_t *len, const char **cstr) { int32_t len1 = 0, len2 = 0; UErrorCode status = U_ZERO_ERROR; if (iter->org_start < iter->utf16_base) { iter->utf8_base = 0; iter->utf16_base = 0; } u_strToUTF8(0, 0, &len1, iter->org->utf16 + iter->utf16_base, iter->org_start - iter->utf16_base, &status); status = U_ZERO_ERROR; *start = len1 + iter->utf8_base; u_strToUTF8(0, 0, &len2, iter->org->utf16 + iter->utf16_base, iter->org_start - iter->utf16_base + iter->org_len, &status); *len = len2 - len1; if (cstr) { if (!iter->org8) iter->org8 = icu_buf_utf8_create(0); status = U_ZERO_ERROR; icu_utf16_to_utf8(iter->org8, iter->org, &status); *cstr = icu_buf_utf8_to_cstr(iter->org8); } iter->utf8_base = *start; iter->utf16_base = iter->org_start; } void icu_iter_get_org_info(yaz_icu_iter_t iter, size_t *start, size_t *len) { icu_iter_get_org_info2(iter, start, len, 0); } int icu_chain_assign_cstr(struct icu_chain *chain, const char *src8cstr, UErrorCode *status) { if (chain->iter) icu_iter_destroy(chain->iter); chain->iter = icu_iter_create(chain); icu_iter_first(chain->iter, src8cstr); return 1; } int icu_chain_next_token(struct icu_chain *chain, UErrorCode *status) { *status = U_ZERO_ERROR; return icu_iter_next(chain->iter); } int icu_chain_token_number(struct icu_chain *chain) { if (chain && chain->iter) return chain->iter->token_count; return 0; } const char *icu_chain_token_display(struct icu_chain *chain) { if (chain->iter) return icu_iter_get_display(chain->iter); return 0; } const char *icu_chain_token_norm(struct icu_chain *chain) { if (chain->iter) return icu_iter_get_norm(chain->iter); return 0; } const char *icu_chain_token_sortkey(struct icu_chain *chain) { if (chain->iter) return icu_iter_get_sortkey(chain->iter); return 0; } void icu_chain_get_org_info(struct icu_chain *chain, size_t *start, size_t *len) { if (chain->iter) icu_iter_get_org_info(chain->iter, start, len); } void icu_chain_get_org_info2(struct icu_chain *chain, size_t *start, size_t *len, const char **cstr) { if (chain->iter) icu_iter_get_org_info2(chain->iter, start, len, cstr); } #endif /* YAZ_HAVE_ICU */ /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/iconv_decode_marc8.c0000644000175000017500000002207613265142510014006 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief MARC-8 decoding * * MARC-8 reference: * http://www.loc.gov/marc/specifications/speccharmarc8.html */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include "iconv-p.h" struct decoder_data { int g0_mode; int g1_mode; int comb_offset; int comb_size; unsigned long comb_x[8]; size_t comb_no_read[8]; int control_mode; }; yaz_conv_func_t yaz_marc8_42_conv; yaz_conv_func_t yaz_marc8_45_conv; yaz_conv_func_t yaz_marc8_67_conv; yaz_conv_func_t yaz_marc8_62_conv; yaz_conv_func_t yaz_marc8_70_conv; yaz_conv_func_t yaz_marc8_32_conv; yaz_conv_func_t yaz_marc8_4E_conv; yaz_conv_func_t yaz_marc8_51_conv; yaz_conv_func_t yaz_marc8_33_conv; yaz_conv_func_t yaz_marc8_34_conv; yaz_conv_func_t yaz_marc8_53_conv; yaz_conv_func_t yaz_marc8_31_conv; static unsigned long yaz_read_marc8_comb(yaz_iconv_t cd, struct decoder_data *data, unsigned char *inp, size_t inbytesleft, size_t *no_read, int *comb); static unsigned long read_marc8(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { struct decoder_data *data = (struct decoder_data *) d->data; unsigned long x; if (data->comb_offset < data->comb_size) { *no_read = data->comb_no_read[data->comb_offset]; x = data->comb_x[data->comb_offset]; /* special case for double-diacritic combining characters, INVERTED BREVE and DOUBLE TILDE. We'll increment the no_read counter by 1, since we want to skip over the processing of the closing ligature character */ /* this code is no longer necessary.. our handlers code in yaz_marc8_?_conv (generated by charconv.tcl) now returns 0 and no_read=1 when a sequence does not match the input. The SECOND HALFs in codetables.xml produces a non-existant entry in the conversion trie.. Hence when met, the input byte is skipped as it should (in yaz_iconv) */ #if 0 if (x == 0x0361 || x == 0x0360) *no_read += 1; #endif data->comb_offset++; return x; } data->comb_offset = 0; for (data->comb_size = 0; data->comb_size < 8; data->comb_size++) { int comb = 0; if (inbytesleft == 0 && data->comb_size) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); x = 0; *no_read = 0; break; } x = yaz_read_marc8_comb(cd, data, inp, inbytesleft, no_read, &comb); if (!comb || !x) break; data->comb_x[data->comb_size] = x; data->comb_no_read[data->comb_size] = *no_read; inp += *no_read; inbytesleft = inbytesleft - *no_read; } return x; } static unsigned long read_marc8s(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { struct decoder_data *data = (struct decoder_data *) d->data; unsigned long x = read_marc8(cd, d, inp, inbytesleft, no_read); if (x && data->comb_size == 1) { if (yaz_iso_8859_1_lookup_x12(x, data->comb_x[0], &x)) { *no_read += data->comb_no_read[0]; data->comb_size = 0; } } return x; } static unsigned long yaz_read_marc8_comb(yaz_iconv_t cd, struct decoder_data *data, unsigned char *inp, size_t inbytesleft, size_t *no_read, int *comb) { *no_read = 0; while (inbytesleft > 0 && *inp == 27) { int *modep = &data->g0_mode; size_t inbytesleft0 = inbytesleft; inbytesleft--; inp++; if (inbytesleft == 0) goto incomplete; if (*inp == '$') /* set with multiple bytes */ { inbytesleft--; inp++; } if (inbytesleft == 0) goto incomplete; if (*inp == '(' || *inp == ',') /* G0 */ { inbytesleft--; inp++; } else if (*inp == ')' || *inp == '-') /* G1 */ { inbytesleft--; inp++; modep = &data->g1_mode; } if (inbytesleft == 0) goto incomplete; if (*inp == '!') /* ANSEL is a special case */ { inbytesleft--; inp++; } if (inbytesleft == 0) goto incomplete; *modep = *inp++; /* Final character */ inbytesleft--; (*no_read) += inbytesleft0 - inbytesleft; } if (inbytesleft == 0) return 0; else if (*inp == ' ') { *no_read += 1; return ' '; } else if (*inp < ' ' && data->control_mode) { *no_read += 1; return *inp; } else { unsigned long x; size_t no_read_sub = 0; int mode = *inp < 128 ? data->g0_mode : data->g1_mode; *comb = 0; switch(mode) { case 'B': /* Basic ASCII */ case 's': /* ASCII */ x = yaz_marc8_42_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case 'E': /* ANSEL */ x = yaz_marc8_45_conv(inp, inbytesleft, &no_read_sub, comb, 127, 128); break; case 'g': /* Greek */ x = yaz_marc8_67_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case 'b': /* Subscripts */ x = yaz_marc8_62_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case 'p': /* Superscripts */ x = yaz_marc8_70_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case '2': /* Basic Hebrew */ x = yaz_marc8_32_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case 'N': /* Basic Cyrillic */ x = yaz_marc8_4E_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case 'Q': /* Extended Cyrillic */ x = yaz_marc8_51_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case '3': /* Basic Arabic */ x = yaz_marc8_33_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case '4': /* Extended Arabic */ x = yaz_marc8_34_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case 'S': /* Greek */ x = yaz_marc8_53_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case '1': /* Chinese, Japanese, Korean (EACC) */ x = yaz_marc8_31_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; default: *no_read = 0; yaz_iconv_set_errno(cd, YAZ_ICONV_EILSEQ); return 0; } *no_read += no_read_sub; return x; } incomplete: *no_read = 0; yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); return 0; } static size_t init_marc8(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { struct decoder_data *data = (struct decoder_data *) d->data; data->g0_mode = 'B'; data->g1_mode = 'E'; data->comb_offset = data->comb_size = 0; data->control_mode = 0; return 0; } static size_t init_marc8c(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { struct decoder_data *data = (struct decoder_data *) d->data; init_marc8(cd, d, inp, inbytesleft, no_read); data->control_mode = 1; return 0; } void destroy_marc8(yaz_iconv_decoder_t d) { struct decoder_data *data = (struct decoder_data *) d->data; xfree(data); } yaz_iconv_decoder_t yaz_marc8_decoder(const char *fromcode, yaz_iconv_decoder_t d) { if (!yaz_matchstr(fromcode, "MARC8") || !yaz_matchstr(fromcode, "ANSEL")) { d->read_handle = read_marc8; d->init_handle = init_marc8; } else if (!yaz_matchstr(fromcode, "MARC8s")) { d->read_handle = read_marc8s; d->init_handle = init_marc8; } else if (!yaz_matchstr(fromcode, "MARC8c")) { d->read_handle = read_marc8; d->init_handle = init_marc8c; } else return 0; { struct decoder_data *data = (struct decoder_data *) xmalloc(sizeof(*data)); d->data = data; d->destroy_handle = destroy_marc8; } return d; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/xml_get.c0000644000175000017500000000452713265142510011733 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file xml_get.c * \brief XML node getter/creation utilities */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if YAZ_HAVE_XML2 const char *yaz_xml_get_prop(const xmlNode *n, const char *fmt, ...) { int no = 0; va_list ap; const char *cp; struct _xmlAttr *attr; va_start(ap, fmt); for (cp = fmt; *cp; cp++) if (*cp == '%') no++; if (no > 0) { const char ***ar = xmalloc(sizeof(*ar) * no); int i; for (i = 0; i < no; i++) { const char **s = va_arg(ap, const char **); ar[i] = s; } va_end(ap); for (attr = n->properties; attr; attr = attr->next) { const char *cp1 = fmt; for (i = 0; *cp1; i++) { const char *cp2 = cp1; size_t l; while (*cp2 != '\0' && *cp2 != '%') cp2++; if (*cp2 != '\0') { /* no % following, break out (bad fmt really) */ cp1 = cp2; break; } l = cp2 - cp1; if (l > 0 && strlen((const char *) attr->name) == l && !memcmp((const char *) attr->name, cp1, l)) break; cp1 = 1 + cp2; if (*cp1) cp1++; /* skip char following % */ } if (!*cp1) { /* attribute not listed in fmt: return first unknown one */ xfree(ar); return (const char *) attr->name; } *ar[i] = (const char *) attr->children->content; } xfree(ar); } else { va_end(ap); for (attr = n->properties; attr; attr = attr->next) { if (!strcmp((const char *) attr->name, fmt)) return (const char *) attr->children->content; } } return 0; /* failure for simple mode; successful for %mode */ } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_enum.c0000644000175000017500000000226113265142510012075 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_enum.c * \brief Implements ODR ENUM codec */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" /* * Top level enum en/decoder. * Returns 1 on success, 0 on error. */ int odr_enum(ODR o, Odr_int **p, int opt, const char *name) { int res, cons = 0; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_ENUM; } res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name); if (res < 0) return 0; if (!res) return odr_missing(o, opt, name); if (o->direction == ODR_PRINT) { odr_prname(o, name); odr_printf(o, "%d\n", **p); return 1; } if (cons) { odr_seterror(o, OPROTO, 54); return 0; } if (o->direction == ODR_DECODE) *p = (Odr_int *)odr_malloc(o, sizeof(**p)); return ber_integer(o, *p); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/condvar.c0000644000175000017500000000506213265142510011723 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file condvar.c * \brief Wraps condition variables * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #include #ifdef WIN32 #include #include #endif #include #if HAVE_SYS_TIME_H #include #endif #if YAZ_POSIX_THREADS #include #endif #include "mutex-p.h" struct yaz_cond { #ifdef WIN32 CONDITION_VARIABLE cond; #elif YAZ_POSIX_THREADS pthread_cond_t cond; #endif }; void yaz_cond_create(YAZ_COND *p) { #ifdef WIN32 *p = (YAZ_COND) malloc(sizeof(**p)); InitializeConditionVariable(&(*p)->cond); #elif YAZ_POSIX_THREADS *p = (YAZ_COND) malloc(sizeof(**p)); pthread_cond_init(&(*p)->cond, 0); #else *p = 0; #endif } void yaz_cond_destroy(YAZ_COND *p) { if (*p) { #ifdef WIN32 #elif YAZ_POSIX_THREADS pthread_cond_destroy(&(*p)->cond); #endif free(*p); *p = 0; } } int yaz_cond_wait(YAZ_COND p, YAZ_MUTEX m, const struct timeval *abstime) { #ifdef WIN32 BOOL v; if (abstime) { struct timeval tval_now; int sec, msec; yaz_gettimeofday(&tval_now); sec = abstime->tv_sec - tval_now.tv_sec; msec = (abstime->tv_usec - tval_now.tv_usec) / 1000; v = SleepConditionVariableCS(&p->cond, &m->handle, sec*1000 + msec); } else v = SleepConditionVariableCS(&p->cond, &m->handle, INFINITE); return v ? 0 : -1; #elif YAZ_POSIX_THREADS if (abstime) { struct timespec s; s.tv_sec = abstime->tv_sec; s.tv_nsec = abstime->tv_usec * 1000; return pthread_cond_timedwait(&p->cond, &m->handle, &s); } else return pthread_cond_wait(&p->cond, &m->handle); #else return -1; #endif } int yaz_cond_signal(YAZ_COND p) { #ifdef WIN32 WakeConditionVariable(&p->cond); return 0; #elif YAZ_POSIX_THREADS return pthread_cond_signal(&p->cond); #else return -1; #endif } int yaz_cond_broadcast(YAZ_COND p) { #ifdef WIN32 WakeAllConditionVariable(&p->cond); return 0; #elif YAZ_POSIX_THREADS return pthread_cond_broadcast(&p->cond); #else return -1; #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/tpath.c0000644000175000017500000000600013265142510011400 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file tpath.c * \brief File Path utilities */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_STAT_H #include #endif #if WIN32 #include #endif #if HAVE_UNISTD_H #include #endif FILE *yaz_path_fopen(const char *path, const char *name, const char *mode) { return yaz_fopen(path, name, mode, 0); } int yaz_fclose (FILE *f) { return fclose(f); } size_t yaz_filepath_comp(const char **path_p, const char **comp) { const char *path = *path_p; size_t len; const char *path_sep; /* somewhat dirty since we have to consider Windows * drive letters.. */ if (path[0] && strchr("/\\.", path[0])) path_sep = strchr(path+1, ':'); else if (path[0] && path[1]) path_sep = strchr(path+2, ':'); else path_sep = 0; if (path_sep) { len = path_sep - path; *path_p = path + len + 1; } else { len = strlen(path); *path_p = path + len; } *comp = path; return len; } char *yaz_filepath_resolve(const char *fname, const char *path, const char *base, char *fullpath) { if (path && *path == '\0') path = 0; if (strchr("/\\", *fname)) path = 0; for (;;) { struct stat stat_buf; size_t slen = 0; *fullpath = '\0'; if (path) { const char *comp; size_t len = 0; len = yaz_filepath_comp(&path, &comp); if (!len) break; if (!strchr("/\\", *comp) && base) { /* yes: make base the first part */ strcpy(fullpath, base); slen = strlen(fullpath); fullpath[slen++] = '/'; } memcpy(fullpath+slen, comp, len); slen += len; if(slen > 0 && !strchr("/\\", fullpath[slen-1])) fullpath[slen++] = '/'; } strcpy(fullpath+slen, fname); if (stat(fullpath, &stat_buf) == 0) return fullpath; if (!path) break; } return 0; } FILE *yaz_fopen(const char *path, const char *fname, const char *mode, const char *base) { char fullpath[1024]; if (!yaz_filepath_resolve(fname, path, base, fullpath)) return 0; /* failure */ return fopen(fullpath, mode); } int yaz_is_abspath(const char *p) { if (*p == '/') return 1; #ifdef WIN32 if (*p == '\\') return 1; if (*p && p[1] == ':' && ((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))) return 1; #endif return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zes-order.c0000644000175000017500000001326513273126163012212 00000000000000/** \file zes-order.c \brief ASN.1 Module ESFormat-ItemOrder Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_IORequest(ODR o, Z_IORequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_IOOriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT, 1, 1, "toKeep") && odr_explicit_tag(o, z_IOOriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT, 2, 0, "notToKeep") && odr_sequence_end(o); } int z_IOTaskPackage(ODR o, Z_IOTaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_IOOriginPartToKeep, &(*p)->originPart, ODR_CONTEXT, 1, 1, "originPart") && odr_explicit_tag(o, z_IOTargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 0, "targetPart") && odr_sequence_end(o); } int z_IOItemOrder(ODR o, Z_IOItemOrder **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IOItemOrder_esRequest, (Odr_fun) z_IORequest, "esRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IOItemOrder_taskPackage, (Odr_fun) z_IOTaskPackage, "taskPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_IOContact(ODR o, Z_IOContact **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 1, 1, "name") && odr_implicit_tag(o, z_InternationalString, &(*p)->phone, ODR_CONTEXT, 2, 1, "phone") && odr_implicit_tag(o, z_InternationalString, &(*p)->email, ODR_CONTEXT, 3, 1, "email") && odr_sequence_end(o); } int z_IOBilling(ODR o, Z_IOBilling **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_IOBilling_billInvoice, (Odr_fun) odr_null, "billInvoice"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IOBilling_prepay, (Odr_fun) odr_null, "prepay"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IOBilling_depositAccount, (Odr_fun) odr_null, "depositAccount"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IOBilling_creditCard, (Odr_fun) z_IOCreditCardInfo, "creditCard"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_IOBilling_cardInfoPreviouslySupplied, (Odr_fun) odr_null, "cardInfoPreviouslySupplied"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_IOBilling_privateKnown, (Odr_fun) odr_null, "privateKnown"}, {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_IOBilling_privateNotKnown, (Odr_fun) z_External, "privateNotKnown"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "paymentMethod") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_implicit_tag(o, z_InternationalString, &(*p)->customerReference, ODR_CONTEXT, 2, 1, "customerReference") && odr_implicit_tag(o, z_InternationalString, &(*p)->customerPONumber, ODR_CONTEXT, 3, 1, "customerPONumber") && odr_sequence_end(o); } int z_IOOriginPartToKeep(ODR o, Z_IOOriginPartToKeep **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_External, &(*p)->supplDescription, ODR_CONTEXT, 1, 1, "supplDescription") && odr_implicit_tag(o, z_IOContact, &(*p)->contact, ODR_CONTEXT, 2, 1, "contact") && odr_implicit_tag(o, z_IOBilling, &(*p)->addlBilling, ODR_CONTEXT, 3, 1, "addlBilling") && odr_sequence_end(o); } int z_IOCreditCardInfo(ODR o, Z_IOCreditCardInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->nameOnCard, ODR_CONTEXT, 1, 0, "nameOnCard") && odr_implicit_tag(o, z_InternationalString, &(*p)->expirationDate, ODR_CONTEXT, 2, 0, "expirationDate") && odr_implicit_tag(o, z_InternationalString, &(*p)->cardNumber, ODR_CONTEXT, 3, 0, "cardNumber") && odr_sequence_end(o); } int z_IOResultSetItem(ODR o, Z_IOResultSetItem **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->resultSetId, ODR_CONTEXT, 1, 0, "resultSetId") && odr_implicit_tag(o, odr_integer, &(*p)->item, ODR_CONTEXT, 2, 0, "item") && odr_sequence_end(o); } int z_IOOriginPartNotToKeep(ODR o, Z_IOOriginPartNotToKeep **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_IOResultSetItem, &(*p)->resultSetItem, ODR_CONTEXT, 1, 1, "resultSetItem") && odr_implicit_tag(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 2, 1, "itemRequest") && odr_sequence_end(o); } int z_IOTargetPart(ODR o, Z_IOTargetPart **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 1, 1, "itemRequest") && odr_implicit_tag(o, z_External, &(*p)->statusOrErrorReport, ODR_CONTEXT, 2, 1, "statusOrErrorReport") && odr_implicit_tag(o, odr_integer, &(*p)->auxiliaryStatus, ODR_CONTEXT, 3, 1, "auxiliaryStatus") && odr_sequence_end(o); } yaz-5.28.0/src/ill9702.asn0000644000175000017500000011462113250277530011737 00000000000000-- use of parameters and types is to be consistent with their definitions in clause 3 ISO-10161-ILL-1 DEFINITIONS EXPLICIT TAGS ::= BEGIN -- ISO-10161-ILL-1 refers to the ILL ISO standard 10161 version 1 -- and version 2 as specified in ISO standard 10161 Amendment 1 ILL-APDU ::= CHOICE { ILL-Request, Forward-Notification, Shipped, ILL-Answer, Conditional-Reply, Cancel, Cancel-Reply, Received, Recall, Returned, Checked-In, Overdue, Renew, Renew-Answer, Lost, Damaged, Message, Status-Query, Status-Or-Error-Report, Expired } -- The tagging scheme used in the APDU definitions is as follows: -- each named type that is a component type of an APDU definition is assigned a different tag -- that is unique within the set of APDU definitions. Where these component types themselves -- have structure, the tagging within such type definitions has only local scope. ILL-Request ::= [APPLICATION 1] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications transaction-type [5] IMPLICIT Transaction-Type DEFAULT 1, delivery-address [6] IMPLICIT Delivery-Address OPTIONAL, delivery-service Delivery-Service OPTIONAL, billing-address [8] IMPLICIT Delivery-Address OPTIONAL, iLL-service-type [9] IMPLICIT SEQUENCE SIZE (1..5) OF ILL-Service-Type, -- this sequence is a list, in order of preference responder-specific-service [10] EXTERNAL OPTIONAL, -- use direct reference style requester-optional-messages [11] IMPLICIT Requester-Optional-Messages-Type, search-type [12] IMPLICIT Search-Type OPTIONAL, supply-medium-info-type [13] IMPLICIT SEQUENCE SIZE (1..7) OF Supply-Medium-Info-Type OPTIONAL, -- this sequence is a list, in order of preference, -- with a maximum number of 7 entries place-on-hold [14] IMPLICIT Place-On-Hold-Type DEFAULT 3, client-id [15] IMPLICIT Client-Id OPTIONAL, item-id [16] IMPLICIT Item-Id, supplemental-item-description [17] IMPLICIT Supplemental-Item-Description OPTIONAL, cost-info-type [18] IMPLICIT Cost-Info-Type OPTIONAL, copyright-compliance [19] ILL-String OPTIONAL, third-party-info-type [20] IMPLICIT Third-Party-Info-Type OPTIONAL, -- mandatory when initiating a FORWARD service or an -- ILL-REQUEST service for a partitioned ILL sub- -- transaction or when initiating an ILL-REQUEST service for -- an ILL sub-transaction if the received ILL-REQUEST -- included an "already-tried-list";optional otherwise retry-flag [21] IMPLICIT BOOLEAN DEFAULT FALSE, forward-flag [22] IMPLICIT BOOLEAN DEFAULT FALSE, requester-note [46] ILL-String OPTIONAL, forward-note [47] ILL-String OPTIONAL, iLL-request-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Forward-Notification ::= [APPLICATION 2] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id, -- mandatory in this APDU responder-address [24] IMPLICIT System-Address OPTIONAL, intermediary-id [25] IMPLICIT System-Id, notification-note [48] ILL-String OPTIONAL, forward-notification-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Shipped ::= [APPLICATION 3] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-address [24] IMPLICIT System-Address OPTIONAL, intermediary-id [25] IMPLICIT System-Id OPTIONAL, supplier-id [26] IMPLICIT System-Id OPTIONAL, client-id [15] IMPLICIT Client-Id OPTIONAL, transaction-type [5] IMPLICIT Transaction-Type DEFAULT 1, supplemental-item-description [17] IMPLICIT Supplemental-Item-Description OPTIONAL, shipped-service-type [27] IMPLICIT Shipped-Service-Type, responder-optional-messages [28] IMPLICIT Responder-Optional-Messages-Type OPTIONAL, supply-details [29] IMPLICIT Supply-Details, return-to-address [30] IMPLICIT Postal-Address OPTIONAL, responder-note [46] ILL-String OPTIONAL, shipped-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } ILL-Answer ::= [APPLICATION 4] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications transaction-results [31] IMPLICIT Transaction-Results, results-explanation [32] CHOICE { conditional-results [1] Conditional-Results, -- chosen if transaction-results=CONDITIONAL retry-results [2] Retry-Results, -- chosen if transaction-results=RETRY unfilled-results [3] Unfilled-Results, --chosen if transaction-results=UNFILLED locations-results [4] Locations-Results, -- chosen if transaction-results=LOCATIONS-PROVIDED will-supply-results [5] Will-Supply-Results, -- chosen if transaction-results=WILL-SUPPLY hold-placed-results [6] Hold-Placed-Results, -- chosen if transaction-results=HOLD-PLACED estimate-results [7] Estimate-Results -- chosen if transaction-results=ESTIMATE } OPTIONAL, -- optional if transaction-results equals RETRY, UNFILLED, -- WILL-SUPPLY or HOLD-PLACED; -- required if transaction-results equals CONDITIONAL, -- LOCATIONS-PROVIDED or ESTIMATE responder-specific-results [33] EXTERNAL OPTIONAL, -- this type is mandatory if results-explanation -- chosen for any result -- has the value "responder-specific". supplemental-item-description [17] IMPLICIT Supplemental-Item-Description OPTIONAL, send-to-list [23] IMPLICIT Send-To-List-Type OPTIONAL, already-tried-list [34] IMPLICIT Already-Tried-List-Type OPTIONAL, responder-optional-messages [28] IMPLICIT Responder-Optional-Messages-Type OPTIONAL, responder-note [46] ILL-String OPTIONAL, ill-answer-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Conditional-Reply ::= [APPLICATION 5] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications answer [35] IMPLICIT BOOLEAN, requester-note [46] ILL-String OPTIONAL, conditional-reply-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Cancel ::= [APPLICATION 6] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications requester-note [46] ILL-String OPTIONAL, cancel-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Cancel-Reply ::= [APPLICATION 7] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications answer [35] IMPLICIT BOOLEAN, responder-note [46] ILL-String OPTIONAL, cancel-reply-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Received ::= [APPLICATION 8] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications supplier-id [26] IMPLICIT System-Id OPTIONAL, supplemental-item-description [17] IMPLICIT Supplemental-Item-Description OPTIONAL, date-received [36] IMPLICIT ISO-Date, shipped-service-type [27] IMPLICIT Shipped-Service-Type, requester-note [46] ILL-String OPTIONAL, received-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Recall ::= [APPLICATION 9] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-note [46] ILL-String OPTIONAL, recall-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Returned ::= [APPLICATION 10] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications supplemental-item-description [17] IMPLICIT Supplemental-Item-Description OPTIONAL, date-returned [37] IMPLICIT ISO-Date, returned-via [38] Transportation-Mode OPTIONAL, insured-for [39] IMPLICIT Amount OPTIONAL, requester-note [46] ILL-String OPTIONAL, returned-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Checked-In ::= [APPLICATION 11] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications date-checked-in [40] IMPLICIT ISO-Date, responder-note [46] ILL-String OPTIONAL, checked-in-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Overdue ::= [APPLICATION 12] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications date-due [41] IMPLICIT Date-Due, responder-note [46] ILL-String OPTIONAL, overdue-extensions [49] SEQUENCE OF Extension OPTIONAL } Renew ::= [APPLICATION 13] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications desired-due-date [42] IMPLICIT ISO-Date OPTIONAL, requester-note [46] ILL-String OPTIONAL, renew-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Renew-Answer ::= [APPLICATION 14] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications answer [35] IMPLICIT BOOLEAN, date-due [41] IMPLICIT Date-Due OPTIONAL, responder-note [46] ILL-String OPTIONAL, renew-answer-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Lost ::= [APPLICATION 15] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications note [46] ILL-String OPTIONAL, lost-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Damaged ::= [APPLICATION 16] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications damaged-details [5] IMPLICIT Damaged-Details OPTIONAL, -- this parameter may only be present in APDU's with a -- protocol-version-num value of 2 or greater note [46] ILL-String OPTIONAL, damaged-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Message ::= [APPLICATION 17] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications note [46] ILL-String, message-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Status-Query ::= [APPLICATION 18] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications note [46] ILL-String OPTIONAL, status-query-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Status-Or-Error-Report ::= [APPLICATION 19] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications reason-no-report [43] IMPLICIT Reason-No-Report OPTIONAL, -- mandatory if no report is present; -- not present otherwise status-report [44] IMPLICIT Status-Report OPTIONAL, error-report [45] IMPLICIT Error-Report OPTIONAL, note [46] ILL-String OPTIONAL, status-or-error-report-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Expired ::= [APPLICATION 20] SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id, service-date-time [2] IMPLICIT Service-Date-Time, requester-id [3] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications responder-id [4] IMPLICIT System-Id OPTIONAL, -- mandatory when using store-and-forward communications -- optional when using connection-oriented communications expired-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } Account-Number ::= ILL-String Already-Forwarded ::= SEQUENCE { responder-id [0] IMPLICIT System-Id, responder-address [1] IMPLICIT System-Address OPTIONAL } Already-Tried-List-Type ::= SEQUENCE OF System-Id Amount ::= SEQUENCE { currency-code [0] IMPLICIT PrintableString (SIZE (3)) OPTIONAL, -- values defined in ISO 4217-1981 monetary-value [1] IMPLICIT AmountString (SIZE (1..10)) } AmountString ::= PrintableString (FROM ("1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|"0"|" "|"."|",")) Client-Id ::= SEQUENCE { client-name [0] ILL-String OPTIONAL, client-status [1] ILL-String OPTIONAL, client-identifier [2] ILL-String OPTIONAL } Conditional-Results ::= SEQUENCE { conditions [0] IMPLICIT ENUMERATED { cost-exceeds-limit (13), charges (14), prepayment-required (15), lacks-copyright-compliance (16), library-use-only (22), no-reproduction (23), client-signature-required (24), special-collections-supervision-required (25), other (27), responder-specific (28), proposed-delivery-service (30) }, date-for-reply [1] IMPLICIT ISO-Date OPTIONAL, locations [2] IMPLICIT SEQUENCE OF Location-Info OPTIONAL, proposed-delivery-service Delivery-Service OPTIONAL -- this parameter specifies a proposed delivery service the -- acceptance of which is a condition of supply. It may be a -- physical service or an electronic service. This parameter -- may only be present in APDUs with a -- protocol-version-num value of 2 or greater } Cost-Info-Type ::= SEQUENCE { account-number [0] Account-Number OPTIONAL, maximum-cost [1] IMPLICIT Amount OPTIONAL, reciprocal-agreement [2] IMPLICIT BOOLEAN DEFAULT FALSE, will-pay-fee [3] IMPLICIT BOOLEAN DEFAULT FALSE, payment-provided [4] IMPLICIT BOOLEAN DEFAULT FALSE } Current-State ::= ENUMERATED { nOT-SUPPLIED (1), pENDING (2), iN-PROCESS (3), fORWARD (4), cONDITIONAL (5), cANCEL-PENDING (6), cANCELLED (7), sHIPPED (8), rECEIVED (9), rENEW-PENDING (10), nOT-RECEIVED-OVERDUE (11), rENEW-OVERDUE (12), oVERDUE (13), rETURNED (14), cHECKED-IN (15), rECALL (16), lOST (17), uNKNOWN (18) } Damaged-Details ::= SEQUENCE { document-type-id [0] IMPLICIT OBJECT IDENTIFIER OPTIONAL, -- identifies an OSI document type registered in accordance -- with ISO 9834-2, for use in an automated environment damaged-portion CHOICE { complete-document [1] IMPLICIT NULL, specific-units [2] IMPLICIT SEQUENCE OF INTEGER -- the nature and extent of a "unit" is implicit in the -- value of document-type-id if one is supplied } } Date-Due ::= SEQUENCE { date-due-field [0] IMPLICIT ISO-Date, renewable [1] IMPLICIT BOOLEAN DEFAULT TRUE } Delivery-Address ::= SEQUENCE { postal-address [0] IMPLICIT Postal-Address OPTIONAL, electronic-address [1] IMPLICIT System-Address OPTIONAL } Delivery-Service ::= CHOICE { physical-delivery [7] Transportation-Mode, electronic-delivery [50] IMPLICIT SEQUENCE OF Electronic-Delivery-Service -- electronic-delivery may only be present in APDUs -- with a protocol-version-num value of 2 or greater } Electronic-Delivery-Service ::= SEQUENCE { -- the first four parameters are intended to be used in an automated -- environment e-delivery-service [0] IMPLICIT SEQUENCE { -- identifies the kind of electronic delivery service, e.g. -- MOTIS IPM,FTAM, etc., using the assigned object -- identifier for the standard e.g. {joint-iso-ccitt mhs-motis -- ipms} e-delivery-mode [0] IMPLICIT OBJECT IDENTIFIER, e-delivery-parameters [1] ANY DEFINED BY e-delivery-mode } OPTIONAL, document-type [1] IMPLICIT SEQUENCE { document-type-id [2] IMPLICIT OBJECT IDENTIFIER, -- identifies an OSI document type registered in accordance -- with ISO 9834-2 document-type-parameters [3] ANY DEFINED BY document-type-id -- any parameters relating to the registered document type } OPTIONAL, e-delivery-description [4] ILL-String OPTIONAL, -- holds a human readable name or description of the -- required electronic delivery service and document type; -- this may also be used to identify an electronic delivery -- service for which there is no object identifier. -- This parameter may be present instead of, or in addition -- to, the previous 4 parameters e-delivery-details [5] CHOICE { e-delivery-address [0] IMPLICIT System-Address, e-delivery-id [1] IMPLICIT System-Id }, name-or-code [6] ILL-String OPTIONAL, -- holds a human-readable identifier or correlation -- information for the document as shipped, e.g. a directory -- and/or file name or message-id delivery-time [7] IMPLICIT ISO-Time OPTIONAL -- holds the requester's preferred delivery time or -- the responder's proposed or actual delivery time } Error-Report ::= SEQUENCE { correlation-information [0] ILL-String, report-source [1] IMPLICIT Report-Source, user-error-report [2] User-Error-Report OPTIONAL, -- mandatory if report-source is "user"; not present otherwise provider-error-report [3] Provider-Error-Report OPTIONAL -- mandatory if report-source is "provider"; not -- present otherwise } Estimate-Results ::= SEQUENCE { cost-estimate [0] ILL-String, locations [1] IMPLICIT SEQUENCE OF Location-Info OPTIONAL } Extension ::= SEQUENCE { identifier [0] IMPLICIT INTEGER, critical [1] IMPLICIT BOOLEAN DEFAULT FALSE, item [2] ANY DEFINED BY identifier } General-Problem ::= ENUMERATED { unrecognized-APDU (1), mistyped-APDU (2), badly-structured-APDU (3), protocol-version-not-supported (4), other (5) } History-Report ::= SEQUENCE { date-requested [0] IMPLICIT ISO-Date OPTIONAL, author [1] ILL-String OPTIONAL, title [2] ILL-String OPTIONAL, author-of-article [3] ILL-String OPTIONAL, title-of-article [4] ILL-String OPTIONAL, date-of-last-transition [5] IMPLICIT ISO-Date, most-recent-service [6] IMPLICIT ENUMERATED { iLL-REQUEST (1), fORWARD (21), fORWARD-NOTIFICATION (2), sHIPPED (3), iLL-ANSWER (4), cONDITIONAL-REPLY (5), cANCEL (6), cANCEL-REPLY (7), rECEIVED (8), rECALL (9), rETURNED (10), cHECKED-IN (11), rENEW-ANSWER (14), lOST (15), dAMAGED (16), mESSAGE (17), sTATUS-QUERY (18), sTATUS-OR-ERROR-REPORT (19), eXPIRED (20) }, date-of-most-recent-service [7] IMPLICIT ISO-Date, initiator-of-most-recent-service [8] IMPLICIT System-Id, shipped-service-type [9] IMPLICIT Shipped-Service-Type OPTIONAL, -- If the information is available, i.e. if a SHIPPED or -- RECEIVED APDU has been sent or received, then the -- value in this parameter shall be supplied. -- Value must contain the most current information, e.g. if a -- requester has received a SHIPPED APDU and then -- invokes a RECEIVED.request, then the value from the -- RECEIVED.request is used transaction-results [10] IMPLICIT Transaction-Results OPTIONAL, -- If the information is available, i.e. if an ILL-ANWSER -- APDU has been sent or received, then the value in this -- parameter shall be supplied. most-recent-service-note [11] ILL-String OPTIONAL -- If the information is available, i.e. if a note has been -- supplied in the most recent service primitive, then the -- value in this parameter shall be supplied. } Hold-Placed-Results ::= SEQUENCE { estimated-date-available [0] IMPLICIT ISO-Date, hold-placed-medium-type [1] IMPLICIT Medium-Type OPTIONAL, locations [2] IMPLICIT SEQUENCE OF Location-Info OPTIONAL } ILL-APDU-Type ::= ENUMERATED { iLL-REQUEST (1), fORWARD-NOTIFICATION (2), sHIPPED (3), iLL-ANSWER (4), cONDITIONAL-REPLY (5), cANCEL (6), cANCEL-REPLY (7), rECEIVED (8), rECALL (9), rETURNED (10), cHECKED-IN (11), oVERDUE (12), rENEW (13), rENEW-ANSWER (14), lOST (15), dAMAGED (16), mESSAGE (17), sTATUS-QUERY (18), sTATUS-OR-ERROR-REPORT (19), eXPIRED (20) } ILL-Service-Type ::= ENUMERATED { loan (1), copy-non-returnable (2), locations (3), estimate (4), responder-specific (5) } ILL-String ::= CHOICE { GeneralString, -- may contain any ISO registered G (graphic) and C -- (control) character set EDIFACTString } -- may not include leading or trailing spaces -- may not consist only of space (" ") or non-printing -- characters Intermediary-Problem ::= ENUMERATED { cannot-send-onward (1) } ISO-Date ::= VisibleString -- conforms to ISO 8601 -- length = 8 -- fixed -- YYYYMMDD ISO-Time ::= VisibleString -- conforms to ISO 8601 -- length = 6, -- fixed -- HHMMSS -- local time of person or institution invoking service Item-Id ::= SEQUENCE { item-type [0] IMPLICIT ENUMERATED { monograph (1), serial (2), other (3) } OPTIONAL, held-medium-type [1] IMPLICIT Medium-Type OPTIONAL, call-number [2] ILL-String OPTIONAL, author [3] ILL-String OPTIONAL, title [4] ILL-String OPTIONAL, sub-title [5] ILL-String OPTIONAL, sponsoring-body [6] ILL-String OPTIONAL, place-of-publication [7] ILL-String OPTIONAL, publisher [8] ILL-String OPTIONAL, series-title-number [9] ILL-String OPTIONAL, volume-issue [10] ILL-String OPTIONAL, edition [11] ILL-String OPTIONAL, publication-date [12] ILL-String OPTIONAL, publication-date-of-component [13] ILL-String OPTIONAL, author-of-article [14] ILL-String OPTIONAL, title-of-article [15] ILL-String OPTIONAL, pagination [16] ILL-String OPTIONAL, national-bibliography-no [17] EXTERNAL OPTIONAL, iSBN [18] ILL-String (SIZE (10)) OPTIONAL, -- must conform to ISO 2108-1978 iSSN [19] ILL-String (SIZE (8)) OPTIONAL, -- must conform to ISO 3297-1986 system-no [20] EXTERNAL OPTIONAL, additional-no-letters [21] ILL-String OPTIONAL, verification-reference-source [22] ILL-String OPTIONAL } Location-Info ::= SEQUENCE { location-id [0] IMPLICIT System-Id, location-address [1] IMPLICIT System-Address OPTIONAL, location-note [2] ILL-String OPTIONAL } Locations-Results ::= SEQUENCE { reason-locs-provided [0] IMPLICIT Reason-Locs-Provided OPTIONAL, locations [1] IMPLICIT SEQUENCE OF Location-Info } Medium-Type ::= ENUMERATED { printed (1), microform (3), film-or-video-recording (4), audio-recording (5), machine-readable (6), other (7) } Name-Of-Person-Or-Institution ::= CHOICE { name-of-person [0] ILL-String, name-of-institution [1] ILL-String } Person-Or-Institution-Symbol ::= CHOICE { person-symbol [0] ILL-String, institution-symbol [1] ILL-String } Place-On-Hold-Type ::= ENUMERATED { yes (1), no (2), according-to-responder-policy (3) } Postal-Address ::= SEQUENCE { name-of-person-or-institution [0] Name-Of-Person-Or-Institution OPTIONAL, extended-postal-delivery-address [1] ILL-String OPTIONAL, street-and-number [2] ILL-String OPTIONAL, post-office-box [3] ILL-String OPTIONAL, city [4] ILL-String OPTIONAL, region [5] ILL-String OPTIONAL, country [6] ILL-String OPTIONAL, postal-code [7] ILL-String OPTIONAL } Provider-Error-Report ::= CHOICE { general-problem [0] IMPLICIT General-Problem, transaction-id-problem [1] IMPLICIT Transaction-Id-Problem, state-transition-prohibited [2] IMPLICIT State-Transition-Prohibited } Reason-Locs-Provided ::= ENUMERATED { in-use-on-loan (1), in-process (2), lost (3), non-circulating (4), not-owned (5), on-order (6), volume-issue-not-yet-available (7), at-bindery (8), lacking (9), not-on-shelf (10), on-reserve (11), poor-condition (12), cost-exceeds-limit (13), on-hold (19), other (27), responder-specific (28) } Reason-No-Report ::= ENUMERATED { temporary (1), permanent (2) } Reason-Unfilled ::= ENUMERATED { in-use-on-loan (1), in-process (2), lost (3), non-circulating (4), not-owned (5), on-order (6), volume-issue-not-yet-available (7), at-bindery (8), lacking (9), not-on-shelf (10), on-reserve (11), poor-condition (12), cost-exceeds-limit (13), charges (14), prepayment-required (15), lacks-copyright-compliance (16), not-found-as-cited (17), locations-not-found (18), on-hold (19), policy-problem (20), mandatory-messaging-not-supported (21), expiry-not-supported (22) , requested-delivery-services-not-supported (23), preferred-delivery-time-not-possible (24), other (27), responder-specific (28) } Report-Source ::= ENUMERATED { user (1), provider (2) } Requester-Optional-Messages-Type ::= SEQUENCE { can-send-RECEIVED [0] IMPLICIT BOOLEAN, can-send-RETURNED [1] IMPLICIT BOOLEAN, requester-SHIPPED [2] IMPLICIT ENUMERATED { requires (1), desires (2), neither (3) }, requester-CHECKED-IN [3] IMPLICIT ENUMERATED { requires (1), desires (2), neither (3) } } Responder-Optional-Messages-Type ::= SEQUENCE { can-send-SHIPPED [0] IMPLICIT BOOLEAN, can-send-CHECKED-IN [1] IMPLICIT BOOLEAN, responder-RECEIVED [2] IMPLICIT ENUMERATED { requires (1), desires (2), neither (3) }, responder-RETURNED [3] IMPLICIT ENUMERATED { requires (1), desires (2), neither (3) } } Retry-Results ::= SEQUENCE { reason-not-available [0] IMPLICIT ENUMERATED { in-use-on-loan (1), in-process (2), on-order (6), volume-issue-not-yet-available (7), at-bindery (8), cost-exceeds-limit (13), charges (14), prepayment-required (15), lacks-copyright-compliance (16), not-found-as-cited (17), on-hold (19), other (27), responder-specific (28) } OPTIONAL, retry-date [1] IMPLICIT ISO-Date OPTIONAL, locations [2] IMPLICIT SEQUENCE OF Location-Info OPTIONAL } Search-Type ::= SEQUENCE { level-of-service [0] ILL-String (SIZE (1)) OPTIONAL, need-before-date [1] IMPLICIT ISO-Date OPTIONAL, expiry-flag [2] IMPLICIT ENUMERATED { need-Before-Date (1), other-Date (2), no-Expiry (3) } DEFAULT 3, -- value of "need-Before-Date" indicates that -- need-before-date also specifies transaction expiry -- date expiry-date [3] IMPLICIT ISO-Date OPTIONAL -- alternative expiry date can be used only when expiry-flag -- is set to "Other-Date" } Security-Problem ::= ILL-String Send-To-List-Type ::= SEQUENCE OF SEQUENCE { system-id [0] IMPLICIT System-Id, account-number [1] Account-Number OPTIONAL, system-address [2] IMPLICIT System-Address OPTIONAL } Service-Date-Time ::= SEQUENCE { date-time-of-this-service [0] IMPLICIT SEQUENCE { date [0] IMPLICIT ISO-Date, time [1] IMPLICIT ISO-Time OPTIONAL -- mandatory for 2nd and subsequent services -- invoked for a given -- ILL-transaction on the same day }, date-time-of-original-service [1] IMPLICIT SEQUENCE { date [0] IMPLICIT ISO-Date, time [1] IMPLICIT ISO-Time OPTIONAL } OPTIONAL } Shipped-Service-Type ::= ILL-Service-Type (loan | copy-non-returnable) -- subtype of ILL-Service-Type State-Transition-Prohibited ::= SEQUENCE { aPDU-type [0] IMPLICIT ILL-APDU-Type, current-state [1] IMPLICIT Current-State } Status-Report ::= SEQUENCE { user-status-report [0] IMPLICIT History-Report, provider-status-report [1] IMPLICIT Current-State } Supplemental-Item-Description ::= SEQUENCE OF EXTERNAL -- the syntax of supplementary item description information is defined outside this standard Supply-Details ::= SEQUENCE { date-shipped [0] IMPLICIT ISO-Date OPTIONAL, date-due [1] IMPLICIT Date-Due OPTIONAL, chargeable-units [2] IMPLICIT INTEGER (1..9999) OPTIONAL, cost [3] IMPLICIT Amount OPTIONAL, shipped-conditions [4] IMPLICIT ENUMERATED { library-use-only (22), no-reproduction (23), client-signature-required (24), special-collections-supervision-required (25), other (27) } OPTIONAL, shipped-via CHOICE { physical-delivery [5] Transportation-Mode, electronic-delivery [50] IMPLICIT Electronic-Delivery-Service } OPTIONAL, -- electronic-delivery may only be present in APDUs with a -- protocol-version-num value of 2 or greater insured-for [6] IMPLICIT Amount OPTIONAL, return-insurance-require [7] IMPLICIT Amount OPTIONAL, no-of-units-per-medium [8] IMPLICIT SEQUENCE OF Units-Per-Medium-Type OPTIONAL } Supply-Medium-Info-Type ::= SEQUENCE { supply-medium-type [0] IMPLICIT Supply-Medium-Type, medium-characteristics [1] ILL-String OPTIONAL } Supply-Medium-Type ::= ENUMERATED { printed (1), photocopy (2), microform (3), film-or-video-recording (4), audio-recording (5), machine-readable (6), other (7) } System-Address ::= SEQUENCE { telecom-service-identifier [0] ILL-String OPTIONAL, telecom-service-address [1] ILL-String OPTIONAL } System-Id ::= SEQUENCE { --at least one of the following must be present person-or-institution-symbol [0] Person-Or-Institution-Symbol OPTIONAL, name-of-person-or-institution [1] Name-Of-Person-Or-Institution OPTIONAL } Third-Party-Info-Type ::= SEQUENCE { permission-to-forward [0] IMPLICIT BOOLEAN DEFAULT FALSE, permission-to-chain [1] IMPLICIT BOOLEAN DEFAULT FALSE, permission-to-partition [2] IMPLICIT BOOLEAN DEFAULT FALSE, permission-to-change-send-to-list [3] IMPLICIT BOOLEAN DEFAULT FALSE, initial-requester-address [4] IMPLICIT System-Address OPTIONAL, -- mandatory when initiating a FORWARD service or an -- ILL-REQUEST service for a partitioned ILL -- sub-transaction; optional otherwise preference [5] IMPLICIT ENUMERATED { ordered (1), unordered (2) } DEFAULT 2, send-to-list [6] IMPLICIT Send-To-List-Type OPTIONAL, already-tried-list [7] IMPLICIT Already-Tried-List-Type OPTIONAL -- mandatory when initiating a FORWARD service, or when -- initiating an ILL-REQUEST service for an ILL -- sub-transaction if the received ILL-REQUEST included an -- "already-tried-list"; optional otherwise } Transaction-Id ::= SEQUENCE { initial-requester-id [0] IMPLICIT System-Id OPTIONAL, -- mandatory for sub-transactions; not called -- "requester-id" to distinguish id of initial-requester --from id of requester of sub-transaction if there is one transaction-group-qualifier [1] ILL-String, transaction-qualifier [2] ILL-String, sub-transaction-qualifier [3] ILL-String OPTIONAL -- mandatory for sub-transactions } Transaction-Id-Problem ::= ENUMERATED { duplicate-transaction-id (1), invalid-transaction-id (2), unknown-transaction-id (3) } Transaction-Results ::= ENUMERATED { conditional (1), retry (2), unfilled (3), locations-provided (4), will-supply (5), hold-placed (6), estimate (7) } Transaction-Type ::= ENUMERATED { simple (1), chained (2), partitioned (3) } Transportation-Mode ::= ILL-String Unable-To-Perform ::= ENUMERATED { not-available (1), resource-limitation (2), other (3) } Unfilled-Results ::= SEQUENCE { reason-unfilled [0] IMPLICIT Reason-Unfilled, locations [1] IMPLICIT SEQUENCE OF Location-Info OPTIONAL } Units-Per-Medium-Type ::= SEQUENCE { medium [0] Supply-Medium-Type, no-of-units [1] INTEGER (1..9999) } User-Error-Report ::= CHOICE { already-forwarded [0] IMPLICIT Already-Forwarded, intermediary-problem [1] IMPLICIT Intermediary-Problem, security-problem [2] Security-Problem, unable-to-perform [3] IMPLICIT Unable-To-Perform } Will-Supply-Results ::= SEQUENCE { reason-will-supply [0] ENUMERATED { in-use-on-loan (1), in-process (2), on-order (6), at-bindery (8), on-hold (19), being-processed-for-supply (26), other (27), responder-specific (28), electronic-delivery (30) }, supply-date [1] ISO-Date OPTIONAL, return-to-address [2] Postal-Address OPTIONAL, locations [3] IMPLICIT SEQUENCE OF Location-Info OPTIONAL, electronic-delivery-service [4] Electronic-Delivery-Service OPTIONAL -- if present, this must be one of the services proposed by -- the requester } EDIFACTString ::= VisibleString (FROM ("A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"| "I"|"J"|"K"|"L"|"M"|"N"|"O"|"P"|"Q"|"R"|"S"|"T"|"U"| "V"|"W"|"X"|"Y"|"Z"|"a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"| "i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"| "v"|"w"|"x"|"y"|"z"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"| "9"|"0"|" "|"."|","|"-"|"("|")"|"/"|"="|"!"|"""|"%"|"&"| "*"|";"|"<"|">"|"'"|"+"|":"|"?")) END yaz-5.28.0/src/odr_int.c0000644000175000017500000000231013265142510011716 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_int.c * \brief Implements ODR INTEGER codec */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" /* * Top level integer en/decoder. * Returns 1 on success, 0 on error. */ int odr_integer(ODR o, Odr_int **p, int opt, const char *name) { int res, cons = 0; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_INTEGER; } res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name); if (res < 0) return 0; if (!res) return odr_missing(o, opt, name); if (o->direction == ODR_PRINT) { odr_prname(o, name); odr_printf(o, ODR_INT_PRINTF "\n", **p); return 1; } if (cons) { odr_seterror(o, OPROTO, 1); return 0; } if (o->direction == ODR_DECODE) *p = (Odr_int *)odr_malloc(o, sizeof(**p)); return ber_integer(o, *p); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/diag-entry.h0000644000175000017500000000363713265142510012345 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file diag-entry.h * \brief Diagnostic table lookup header */ struct yaz_diag_entry { int code; char *msg; }; const char *yaz_diag_to_str(struct yaz_diag_entry *tab, int code); /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/timing.c0000644000175000017500000000643313265142510011561 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file timing.c * \brief Timing utilities */ #if HAVE_CONFIG_H #include #endif #ifdef WIN32 #include #endif #include #if HAVE_SYS_TIMES_H #include #endif #if HAVE_SYS_TIME_H #include #endif #include #include #include struct yaz_timing { #if HAVE_SYS_TIMES_H struct tms tms1, tms2; #endif #if HAVE_SYS_TIME_H struct timeval start_time, end_time; #else #ifdef WIN32 LONGLONG start_time, end_time; LONGLONG start_time_sys, start_time_user; LONGLONG end_time_sys, end_time_user; #endif #endif double real_sec, user_sec, sys_sec; }; yaz_timing_t yaz_timing_create(void) { yaz_timing_t t = (yaz_timing_t) xmalloc(sizeof(*t)); yaz_timing_start(t); return t; } #ifdef WIN32 static void get_process_time(ULONGLONG *lp_user, ULONGLONG *lp_sys) { FILETIME create_t, exit_t, sys_t, user_t; ULARGE_INTEGER li; GetProcessTimes(GetCurrentProcess(), &create_t, &exit_t, &sys_t, &user_t); li.LowPart = user_t.dwLowDateTime; li.HighPart = user_t.dwHighDateTime; *lp_user = li.QuadPart; li.LowPart = sys_t.dwLowDateTime; li.HighPart = sys_t.dwHighDateTime; *lp_sys = li.QuadPart; } static void get_date_as_largeinteger(LONGLONG *lp) { FILETIME f; ULARGE_INTEGER li; GetSystemTimeAsFileTime(&f); li.LowPart = f.dwLowDateTime; li.HighPart = f.dwHighDateTime; *lp = li.QuadPart; } #endif void yaz_timing_start(yaz_timing_t t) { #if HAVE_SYS_TIMES_H times(&t->tms1); t->user_sec = 0.0; t->sys_sec = 0.0; #else t->user_sec = -1.0; t->sys_sec = -1.0; #endif t->real_sec = -1.0; #if HAVE_SYS_TIME_H gettimeofday(&t->start_time, 0); t->real_sec = 0.0; #else #ifdef WIN32 t->real_sec = 0.0; t->user_sec = 0.0; t->sys_sec = 0.0; get_date_as_largeinteger(&t->start_time); get_process_time(&t->start_time_user, &t->start_time_sys); #endif #endif } void yaz_timing_stop(yaz_timing_t t) { #if HAVE_SYS_TIMES_H times(&t->tms2); t->user_sec = (double) (t->tms2.tms_utime - t->tms1.tms_utime)/100; t->sys_sec = (double) (t->tms2.tms_stime - t->tms1.tms_stime)/100; #endif #if HAVE_SYS_TIME_H gettimeofday(&t->end_time, 0); t->real_sec = ((t->end_time.tv_sec - t->start_time.tv_sec) * 1000000.0 + t->end_time.tv_usec - t->start_time.tv_usec) / 1000000; #else #ifdef WIN32 get_date_as_largeinteger(&t->end_time); t->real_sec = (t->end_time - t->start_time) / 10000000.0; get_process_time(&t->end_time_user, &t->end_time_sys); t->user_sec = (t->end_time_user - t->start_time_user) / 10000000.0; t->sys_sec = (t->end_time_sys - t->start_time_sys) / 10000000.0; #endif #endif } double yaz_timing_get_real(yaz_timing_t t) { return t->real_sec; } double yaz_timing_get_user(yaz_timing_t t) { return t->user_sec; } double yaz_timing_get_sys(yaz_timing_t t) { return t->sys_sec; } void yaz_timing_destroy(yaz_timing_t *tp) { if (*tp) { xfree(*tp); *tp = 0; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/mime.c0000644000175000017500000000343113265142510011214 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file mime.c \brief Small utility to manage MIME types */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "mime.h" struct yaz_mime_entry { char *suffix; char *mime_type; struct yaz_mime_entry *next; }; struct yaz_mime_info { struct yaz_mime_entry *table; }; yaz_mime_types yaz_mime_types_create() { yaz_mime_types p = (yaz_mime_types) xmalloc(sizeof(*p)); p->table = 0; return p; } void yaz_mime_types_add(yaz_mime_types t, const char *suffix, const char *mime_type) { struct yaz_mime_entry *e = (struct yaz_mime_entry *) xmalloc(sizeof(*e)); e->mime_type = xstrdup(mime_type); e->suffix = xstrdup(suffix); e->next = t->table; t->table = e; } const char *yaz_mime_lookup_suffix(yaz_mime_types t, const char *suffix) { struct yaz_mime_entry *e = t->table; for (; e; e = e->next) { if (!strcmp(e->suffix, suffix)) return e->mime_type; } return 0; } const char *yaz_mime_lookup_fname(yaz_mime_types t, const char *fname) { const char *cp = strrchr(fname, '.'); if (!cp) /* if no . return now */ return 0; return yaz_mime_lookup_suffix(t, cp+1); /* skip . */ } void yaz_mime_types_destroy(yaz_mime_types t) { struct yaz_mime_entry *e = t->table; while (e) { struct yaz_mime_entry *e_next = e->next; xfree(e->suffix); xfree(e->mime_type); xfree(e); e = e_next; } xfree(t); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-sutrs.c0000644000175000017500000000075013273126163011722 00000000000000/** \file z-sutrs.c \brief ASN.1 Module RecordSyntax-SUTRS Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_SutrsRecord(ODR o, Z_SutrsRecord **p, int opt, const char *name) { return z_InternationalString (o, p, opt, name); } int z_SUTRS (ODR o, Odr_oct **p, int opt, const char *name) { return odr_implicit_tag(o, odr_octetstring, p, ODR_UNIVERSAL, ODR_GENERALSTRING, opt, name); } yaz-5.28.0/src/z-oclcui.c0000644000175000017500000000201013273126163012007 00000000000000/** \file z-oclcui.c \brief ASN.1 Module UserInfoFormat-oclcUserInformation Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_OCLC_UserInformation(ODR o, Z_OCLC_UserInformation **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_visiblestring, &(*p)->motd, ODR_CONTEXT, 1, 1, "motd") && (odr_sequence_of(o, (Odr_fun) z_DBName, &(*p)->dblist, &(*p)->num_dblist, "dblist") || odr_ok(o)) && odr_implicit_tag(o, odr_bool, &(*p)->failReason, ODR_CONTEXT, 3, 1, "failReason") && odr_implicit_tag(o, odr_integer, &(*p)->code, ODR_CONTEXT, 1, 1, "code") && odr_implicit_tag(o, odr_visiblestring, &(*p)->text, ODR_CONTEXT, 2, 1, "text") && odr_sequence_end(o); } int z_DBName(ODR o, Z_DBName **p, int opt, const char *name) { return odr_implicit_tag(o, odr_visiblestring, p, ODR_CONTEXT, 2, opt, name); } yaz-5.28.0/src/z-opac.c0000644000175000017500000001244613273126163011471 00000000000000/** \file z-opac.c \brief ASN.1 Module RecordSyntax-opac Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_OPACRecord(ODR o, Z_OPACRecord **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_External, &(*p)->bibliographicRecord, ODR_CONTEXT, 1, 1, "bibliographicRecord") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_HoldingsRecord, &(*p)->holdingsData, &(*p)->num_holdingsData, "holdingsData") || odr_ok(o)) && odr_sequence_end(o); } int z_HoldingsRecord(ODR o, Z_HoldingsRecord **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_HoldingsRecord_marcHoldingsRecord, (Odr_fun) z_External, "marcHoldingsRecord"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_HoldingsRecord_holdingsAndCirc, (Odr_fun) z_HoldingsAndCircData, "holdingsAndCirc"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_HoldingsAndCircData(ODR o, Z_HoldingsAndCircData **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->typeOfRecord, ODR_CONTEXT, 1, 1, "typeOfRecord") && odr_implicit_tag(o, z_InternationalString, &(*p)->encodingLevel, ODR_CONTEXT, 2, 1, "encodingLevel") && odr_implicit_tag(o, z_InternationalString, &(*p)->format, ODR_CONTEXT, 3, 1, "format") && odr_implicit_tag(o, z_InternationalString, &(*p)->receiptAcqStatus, ODR_CONTEXT, 4, 1, "receiptAcqStatus") && odr_implicit_tag(o, z_InternationalString, &(*p)->generalRetention, ODR_CONTEXT, 5, 1, "generalRetention") && odr_implicit_tag(o, z_InternationalString, &(*p)->completeness, ODR_CONTEXT, 6, 1, "completeness") && odr_implicit_tag(o, z_InternationalString, &(*p)->dateOfReport, ODR_CONTEXT, 7, 1, "dateOfReport") && odr_implicit_tag(o, z_InternationalString, &(*p)->nucCode, ODR_CONTEXT, 8, 1, "nucCode") && odr_implicit_tag(o, z_InternationalString, &(*p)->localLocation, ODR_CONTEXT, 9, 1, "localLocation") && odr_implicit_tag(o, z_InternationalString, &(*p)->shelvingLocation, ODR_CONTEXT, 10, 1, "shelvingLocation") && odr_implicit_tag(o, z_InternationalString, &(*p)->callNumber, ODR_CONTEXT, 11, 1, "callNumber") && odr_implicit_tag(o, z_InternationalString, &(*p)->shelvingData, ODR_CONTEXT, 12, 1, "shelvingData") && odr_implicit_tag(o, z_InternationalString, &(*p)->copyNumber, ODR_CONTEXT, 13, 1, "copyNumber") && odr_implicit_tag(o, z_InternationalString, &(*p)->publicNote, ODR_CONTEXT, 14, 1, "publicNote") && odr_implicit_tag(o, z_InternationalString, &(*p)->reproductionNote, ODR_CONTEXT, 15, 1, "reproductionNote") && odr_implicit_tag(o, z_InternationalString, &(*p)->termsUseRepro, ODR_CONTEXT, 16, 1, "termsUseRepro") && odr_implicit_tag(o, z_InternationalString, &(*p)->enumAndChron, ODR_CONTEXT, 17, 1, "enumAndChron") && odr_implicit_settag(o, ODR_CONTEXT, 18) && (odr_sequence_of(o, (Odr_fun) z_Volume, &(*p)->volumes, &(*p)->num_volumes, "volumes") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 19) && (odr_sequence_of(o, (Odr_fun) z_CircRecord, &(*p)->circulationData, &(*p)->num_circulationData, "circulationData") || odr_ok(o)) && odr_sequence_end(o); } int z_Volume(ODR o, Z_Volume **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->enumeration, ODR_CONTEXT, 1, 1, "enumeration") && odr_implicit_tag(o, z_InternationalString, &(*p)->chronology, ODR_CONTEXT, 2, 1, "chronology") && odr_implicit_tag(o, z_InternationalString, &(*p)->enumAndChron, ODR_CONTEXT, 3, 1, "enumAndChron") && odr_sequence_end(o); } int z_CircRecord(ODR o, Z_CircRecord **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_bool, &(*p)->availableNow, ODR_CONTEXT, 1, 0, "availableNow") && odr_implicit_tag(o, z_InternationalString, &(*p)->availablityDate, ODR_CONTEXT, 2, 1, "availablityDate") && odr_implicit_tag(o, z_InternationalString, &(*p)->availableThru, ODR_CONTEXT, 3, 1, "availableThru") && odr_implicit_tag(o, z_InternationalString, &(*p)->restrictions, ODR_CONTEXT, 4, 1, "restrictions") && odr_implicit_tag(o, z_InternationalString, &(*p)->itemId, ODR_CONTEXT, 5, 1, "itemId") && odr_implicit_tag(o, odr_bool, &(*p)->renewable, ODR_CONTEXT, 6, 0, "renewable") && odr_implicit_tag(o, odr_bool, &(*p)->onHold, ODR_CONTEXT, 7, 0, "onHold") && odr_implicit_tag(o, z_InternationalString, &(*p)->enumAndChron, ODR_CONTEXT, 8, 1, "enumAndChron") && odr_implicit_tag(o, z_InternationalString, &(*p)->midspine, ODR_CONTEXT, 9, 1, "midspine") && odr_implicit_tag(o, z_InternationalString, &(*p)->temporaryLocation, ODR_CONTEXT, 10, 1, "temporaryLocation") && odr_sequence_end(o); } yaz-5.28.0/src/cclqual.c0000644000175000017500000002546413265142510011723 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cclqual.c * \brief Implements CCL qualifier utilities */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "cclp.h" /** CCL Qualifier */ struct ccl_qualifier { char *name; int no_sub; struct ccl_qualifier **sub; struct ccl_rpn_attr *attr_list; struct ccl_qualifier *next; }; /** Definition of CCL_bibset pointer */ struct ccl_qualifiers { struct ccl_qualifier *list; struct ccl_qualifier_special *special; }; /** CCL Qualifier special */ struct ccl_qualifier_special { char *name; const char **values; struct ccl_qualifier_special *next; }; static struct ccl_qualifier *ccl_qual_lookup(CCL_bibset b, const char *n, size_t len) { struct ccl_qualifier *q; for (q = b->list; q; q = q->next) if (len == strlen(q->name) && !memcmp(q->name, n, len)) break; return q; } void ccl_qual_add_special_ar(CCL_bibset bibset, const char *n, const char **values) { struct ccl_qualifier_special *p; for (p = bibset->special; p && strcmp(p->name, n); p = p->next) ; if (p) { if (p->values) { int i; for (i = 0; p->values[i]; i++) xfree((char *) p->values[i]); xfree((char **)p->values); } } else { p = (struct ccl_qualifier_special *) xmalloc(sizeof(*p)); p->name = xstrdup(n); p->next = bibset->special; bibset->special = p; } p->values = values; } void ccl_qual_add_special(CCL_bibset bibset, const char *n, const char *cp) { size_t no = 2; char **vlist = (char **) xmalloc(no * sizeof(*vlist)); yaz_tok_cfg_t yt = yaz_tok_cfg_create(); int t; size_t i = 0; yaz_tok_parse_t tp = yaz_tok_parse_buf(yt, cp); yaz_tok_cfg_destroy(yt); t = yaz_tok_move(tp); while (t == YAZ_TOK_STRING) { if (i >= no-1) vlist = (char **) xrealloc(vlist, (no = no * 2) * sizeof(*vlist)); vlist[i++] = xstrdup(yaz_tok_parse_string(tp)); t = yaz_tok_move(tp); } vlist[i] = 0; ccl_qual_add_special_ar(bibset, n, (const char **) vlist); yaz_tok_parse_destroy(tp); } static struct ccl_qualifier *ccl_qual_new(CCL_bibset b, const char *name) { struct ccl_qualifier *q; q = (struct ccl_qualifier *)xmalloc(sizeof(*q)); ccl_assert(q); q->next = b->list; b->list = q; q->name = xstrdup(name); q->attr_list = 0; q->no_sub = 0; q->sub = 0; return q; } /** \brief adds specifies qualifier aliases \param b bibset \param n qualifier name \param names list of qualifier aliases */ void ccl_qual_add_combi(CCL_bibset b, const char *n, const char **names) { int i; struct ccl_qualifier *q; for (q = b->list; q && strcmp(q->name, n); q = q->next) ; if (q) return ; q = (struct ccl_qualifier *) xmalloc(sizeof(*q)); q->name = xstrdup(n); q->attr_list = 0; q->next = b->list; b->list = q; for (i = 0; names[i]; i++) ; q->no_sub = i; q->sub = (struct ccl_qualifier **) xmalloc(sizeof(*q->sub) * (1+q->no_sub)); for (i = 0; names[i]; i++) { q->sub[i] = ccl_qual_lookup(b, names[i], strlen(names[i])); if (!q->sub[i]) q->sub[i] = ccl_qual_new(b, names[i]); } } /** \brief adds specifies attributes for qualifier \param b bibset \param name qualifier name \param no number of attribute type+value pairs \param type_ar attributes type of size no \param value_ar attribute value of size no \param svalue_ar attribute string values ([i] only used if != NULL) \param attsets attribute sets of size no */ void ccl_qual_add_set(CCL_bibset b, const char *name, int no, int *type_ar, int *value_ar, char **svalue_ar, char **attsets) { struct ccl_qualifier *q; struct ccl_rpn_attr **attrp; ccl_assert(b); for (q = b->list; q; q = q->next) if (!strcmp(name, q->name)) break; if (!q) q = ccl_qual_new(b, name); attrp = &q->attr_list; while (*attrp) attrp = &(*attrp)->next; while (--no >= 0) { struct ccl_rpn_attr *attr; attr = (struct ccl_rpn_attr *)xmalloc(sizeof(*attr)); ccl_assert(attr); attr->set = *attsets++; attr->type = *type_ar++; if (*svalue_ar) { attr->kind = CCL_RPN_ATTR_STRING; attr->value.str = *svalue_ar; } else { attr->kind = CCL_RPN_ATTR_NUMERIC; attr->value.numeric = *value_ar; } svalue_ar++; value_ar++; *attrp = attr; attrp = &attr->next; } *attrp = NULL; } /** \brief creates Bibset \returns bibset */ CCL_bibset ccl_qual_mk(void) { CCL_bibset b = (CCL_bibset)xmalloc(sizeof(*b)); ccl_assert(b); b->list = NULL; b->special = NULL; return b; } /** \brief destroys Bibset \param b pointer to Bibset *b will be set to NULL. */ void ccl_qual_rm(CCL_bibset *b) { struct ccl_qualifier *q, *q1; struct ccl_qualifier_special *sp, *sp1; if (!*b) return; for (q = (*b)->list; q; q = q1) { struct ccl_rpn_attr *attr, *attr1; for (attr = q->attr_list; attr; attr = attr1) { attr1 = attr->next; if (attr->set) xfree(attr->set); if (attr->kind == CCL_RPN_ATTR_STRING) xfree(attr->value.str); xfree(attr); } q1 = q->next; xfree(q->name); if (q->sub) xfree(q->sub); xfree(q); } for (sp = (*b)->special; sp; sp = sp1) { sp1 = sp->next; xfree(sp->name); if (sp->values) { int i; for (i = 0; sp->values[i]; i++) xfree((char*) sp->values[i]); xfree((char **)sp->values); } xfree(sp); } xfree(*b); *b = NULL; } CCL_bibset ccl_qual_dup(CCL_bibset b) { CCL_bibset n = ccl_qual_mk(); struct ccl_qualifier *q, **qp; struct ccl_qualifier_special *s, **sp; qp = &n->list; for (q = b->list; q; q = q->next) { struct ccl_rpn_attr *attr, **attrp; *qp = xmalloc(sizeof(**qp)); (*qp)->next = 0; (*qp)->attr_list = 0; (*qp)->name = xstrdup(q->name); attrp = &(*qp)->attr_list; for (attr = q->attr_list; attr; attr = attr->next) { *attrp = xmalloc(sizeof(**attrp)); (*attrp)->next = 0; (*attrp)->set = attr->set ? xstrdup(attr->set) : 0; (*attrp)->type = attr->type; (*attrp)->kind = attr->kind; if (attr->kind == CCL_RPN_ATTR_NUMERIC) (*attrp)->value.numeric = attr->value.numeric; else if (attr->kind == CCL_RPN_ATTR_STRING) (*attrp)->value.str = xstrdup(attr->value.str); attrp = &(*attrp)->next; } (*qp)->no_sub = q->no_sub; if (!q->sub) (*qp)->sub = 0; else { /* fix up the sub qualifiers.. */ int i; (*qp)->sub = xmalloc(sizeof(*q->sub) * (q->no_sub + 1)); for (i = 0; i < q->no_sub; i++) { struct ccl_qualifier *q1, *q2; /* sweep though original and match up the corresponding ent */ q2 = n->list; for (q1 = b->list; q1 && q2; q1 = q1->next, q2 = q2->next) if (q1 == q->sub[i]) break; (*qp)->sub[i] = q2; } } qp = &(*qp)->next; } sp = &n->special; for (s = b->special; s; s = s->next) { int i; for (i = 0; s->values[i]; i++) ; *sp = xmalloc(sizeof(**sp)); (*sp)->next = 0; (*sp)->name = xstrdup(s->name); (*sp)->values = xmalloc(sizeof(*(*sp)->values) * (i+1)); for (i = 0; s->values[i]; i++) (*sp)->values[i] = xstrdup(s->values[i]); (*sp)->values[i] = 0; sp = &(*sp)->next; } return n; } ccl_qualifier_t ccl_qual_search(CCL_parser cclp, const char *name, size_t name_len, int seq) { struct ccl_qualifier *q = 0; const char **aliases; int case_sensitive = cclp->ccl_case_sensitive; ccl_assert(cclp); if (!cclp->bibset) return 0; aliases = ccl_qual_search_special(cclp->bibset, "case"); if (aliases) case_sensitive = atoi(aliases[0]); for (q = cclp->bibset->list; q; q = q->next) if (strlen(q->name) == name_len) { if (case_sensitive) { if (!memcmp(name, q->name, name_len)) break; } else { if (!ccl_memicmp(name, q->name, name_len)) break; } } if (q) { if (q->no_sub) { if (seq < q->no_sub) q = q->sub[seq]; else q = 0; } else if (seq) q = 0; } return q; } struct ccl_rpn_attr *ccl_qual_get_attr(ccl_qualifier_t q) { return q->attr_list; } struct ccl_rpn_attr *ccl_parser_qual_search(CCL_parser cclp, const char *name, size_t name_len) { ccl_qualifier_t q = ccl_qual_search(cclp, name, name_len, 0); if (q) return q->attr_list; return 0; } const char *ccl_qual_get_name(ccl_qualifier_t q) { return q->name; } const char **ccl_qual_search_special(CCL_bibset b, const char *name) { struct ccl_qualifier_special *q; if (!b) return 0; for (q = b->special; q && strcmp(q->name, name); q = q->next) ; if (q) return q->values; return 0; } int ccl_search_stop(CCL_bibset bibset, const char *qname, const char *src_str, size_t src_len) { const char **slist = 0; if (qname) { char qname_buf[80]; yaz_snprintf(qname_buf, sizeof(qname_buf)-1, "stop.%s", qname); slist = ccl_qual_search_special(bibset, qname_buf); } if (!slist) slist = ccl_qual_search_special(bibset, "stop.*"); if (slist) { int i; for (i = 0; slist[i]; i++) if (src_len == strlen(slist[i]) && ccl_memicmp(slist[i], src_str, src_len) == 0) return 1; } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/rpn2solr.c0000644000175000017500000003313013265142510012045 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief Implements RPN to SOLR conversion */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include static const char *lookup_index_from_string_attr(Z_AttributeList *attributes) { int j; int server_choice = 1; for (j = 0; j < attributes->num_attributes; j++) { Z_AttributeElement *ae = attributes->attributes[j]; if (*ae->attributeType == 1) /* use attribute */ { if (ae->which == Z_AttributeValue_complex) { Z_ComplexAttribute *ca = ae->value.complex; int i; for (i = 0; i < ca->num_list; i++) { Z_StringOrNumeric *son = ca->list[i]; if (son->which == Z_StringOrNumeric_string) return son->u.string; } } server_choice = 0; /* not serverChoice because we have use attr */ } } if (server_choice) return "cql.serverChoice"; return 0; } static const char *lookup_relation_index_from_attr(Z_AttributeList *attributes) { int j; for (j = 0; j < attributes->num_attributes; j++) { Z_AttributeElement *ae = attributes->attributes[j]; if (*ae->attributeType == 2) /* relation attribute */ { if (ae->which == Z_AttributeValue_numeric) { /* Only support for numeric relation */ Odr_int *relation = ae->value.numeric; /* map this numeric to representation in SOLR */ switch (*relation) { /* Unsure on whether this is the relation attribute constants? */ case Z_ProximityOperator_Prox_lessThan: return "<"; case Z_ProximityOperator_Prox_lessThanOrEqual: return "le"; case Z_ProximityOperator_Prox_equal: return ":"; case Z_ProximityOperator_Prox_greaterThanOrEqual: return "ge"; case Z_ProximityOperator_Prox_greaterThan: return ">"; case Z_ProximityOperator_Prox_notEqual: return 0; case 100: /* phonetic is not implemented */ return 0; case 101: /* stem is not not implemented */ return 0; case 102: /* relevance is supported in SOLR, but not implemented yet */ return 0; default: /* Invalid relation */ return 0; } } else { /* Can we have a complex relation value? Should we implement something? */ } } } return ":"; } static int check_range(solr_transform_t ct, Z_Complex *q, Z_AttributesPlusTerm **p_apt1, Z_AttributesPlusTerm **p_apt2) { Z_Operator *op = q->roperator; if (op->which == Z_Operator_and && q->s1->which == Z_RPNStructure_simple && q->s2->which == Z_RPNStructure_simple && q->s1->u.simple->which == Z_Operand_APT && q->s2->u.simple->which == Z_Operand_APT) { Z_AttributesPlusTerm *apt1 = q->s1->u.simple->u.attributesPlusTerm; Z_AttributesPlusTerm *apt2 = q->s2->u.simple->u.attributesPlusTerm; const char *i1 = solr_lookup_reverse(ct, "index.", apt1->attributes); const char *i2 = solr_lookup_reverse(ct, "index.", apt2->attributes); const char *rel1 = solr_lookup_reverse(ct, "relation.", apt1->attributes); const char *rel2 = solr_lookup_reverse(ct, "relation.", apt2->attributes); if (!rel1) rel1 = lookup_relation_index_from_attr(apt1->attributes); if (!rel2) rel2 = lookup_relation_index_from_attr(apt2->attributes); if (!i1) i1 = lookup_index_from_string_attr(apt1->attributes); if (!i2) i2 = lookup_index_from_string_attr(apt2->attributes); if (i1 && i2 && !strcmp(i1, i2) && rel1 && rel2) { if ((rel1[0] == '>' || rel1[0] == 'g') && (rel2[0] == '<' || rel2[0] == 'l')) { *p_apt1 = apt1; *p_apt2 = apt2; return 1; } if ((rel2[0] == '>' || rel2[0] == 'g') && (rel1[0] == '<' || rel1[0] == 'l')) { *p_apt1 = apt2; *p_apt2 = apt1; return 1; } } } return 0; } static int rpn2solr_attr(solr_transform_t ct, Z_AttributeList *attributes, WRBUF w) { const char *index = solr_lookup_reverse(ct, "index.", attributes); const char *structure = solr_lookup_reverse(ct, "structure.", attributes); /* if no real match, try string attribute */ if (!index) index = lookup_index_from_string_attr(attributes); if (!index) return YAZ_BIB1_UNSUPP_USE_ATTRIBUTE; /* for serverChoice we omit index+relation+structure */ if (strcmp(index, "cql.serverChoice")) { wrbuf_puts(w, index); wrbuf_puts(w, ":"); if (structure) { if (strcmp(structure, "*")) { wrbuf_puts(w, "/"); wrbuf_puts(w, structure); wrbuf_puts(w, " "); } } } return 0; } static Odr_int get_truncation(Z_AttributesPlusTerm *apt) { int j; Z_AttributeList *attributes = apt->attributes; for (j = 0; j < attributes->num_attributes; j++) { Z_AttributeElement *ae = attributes->attributes[j]; if (*ae->attributeType == 5) /* truncation attribute */ { if (ae->which == Z_AttributeValue_numeric) { return *(ae->value.numeric); } else if (ae->which == Z_AttributeValue_complex) { ; //yaz_log(YLOG_DEBUG, "Z_Attribute_complex"); /* Complex: Shouldn't happen */ } } } /* No truncation given */ return 0; } #define SOLR_SPECIAL "+-&|!(){}[]^\"~*?:\\" static int emit_term(solr_transform_t ct, WRBUF w, Z_Term *term, Odr_int trunc) { size_t lterm = 0; const char *sterm = 0; switch (term->which) { case Z_Term_general: lterm = term->u.general->len; sterm = (const char *) term->u.general->buf; break; case Z_Term_numeric: wrbuf_printf(w, ODR_INT_PRINTF, *term->u.numeric); break; case Z_Term_characterString: sterm = term->u.characterString; lterm = strlen(sterm); break; default: return YAZ_BIB1_TERM_TYPE_UNSUPP; } if (sterm) { size_t i; int must_quote = 0; if (lterm == 0) must_quote = 1; else { for (i = 0 ; i < lterm; i++) if (sterm[i] == ' ') must_quote = 1; } if (must_quote) wrbuf_puts(w, "\""); if (trunc == 2 || trunc == 3) wrbuf_puts(w, "*"); for (i = 0 ; i < lterm; i++) { if (sterm[i] == '\\' && i < lterm - 1) { i++; if (strchr(SOLR_SPECIAL, sterm[i])) wrbuf_putc(w, '\\'); wrbuf_putc(w, sterm[i]); } else if (sterm[i] == '?' && trunc == 104) { wrbuf_putc(w, '*'); } else if (sterm[i] == '#' && trunc == 104) { wrbuf_putc(w, '?'); } else if (strchr(SOLR_SPECIAL, sterm[i])) { wrbuf_putc(w, '\\'); wrbuf_putc(w, sterm[i]); } else wrbuf_putc(w, sterm[i]); } if (trunc == 1 || trunc == 3) wrbuf_puts(w, "*"); if (must_quote) wrbuf_puts(w, "\""); } return 0; } static int rpn2solr_simple(solr_transform_t ct, void (*pr)(const char *buf, void *client_data), void *client_data, Z_AttributesPlusTerm *apt, WRBUF w, Z_AttributesPlusTerm *apt2) { int ret = 0; Z_Term *term = apt->term; Odr_int trunc = get_truncation(apt); const char *relation2 = 0; const char *relation1 = solr_lookup_reverse(ct, "relation.", apt->attributes); /* Attempt to fix bug #2978: Look for a relation attribute */ if (!relation1) relation1 = lookup_relation_index_from_attr(apt->attributes); if (!relation1) { return YAZ_BIB1_UNSUPP_RELATION_ATTRIBUTE; } if (apt2) { relation2 = solr_lookup_reverse(ct, "relation.", apt2->attributes); if (!relation2) relation2 = lookup_relation_index_from_attr(apt2->attributes); } wrbuf_rewind(w); ret = rpn2solr_attr(ct, apt->attributes, w); if (ret) return ret; if ((trunc >= 0 && trunc <= 3) || trunc == 100 || trunc == 104) ; else { return YAZ_BIB1_UNSUPP_TRUNCATION_ATTRIBUTE; } if (!relation1) ret = emit_term(ct, w, term, trunc); else if (relation1[0] == '<' || relation1[0] == 'l') { wrbuf_puts(w, "[* TO "); ret = emit_term(ct, w, term, trunc); if (!strcmp(relation1, "le") || !strcmp(relation1, "<=")) wrbuf_puts(w, "]"); else wrbuf_puts(w, "}"); } else if (relation1[0] == '>' || relation1[0] == 'g') { if (!strcmp(relation1, ">=") || !strcmp(relation1, "ge")) wrbuf_puts(w, "["); else wrbuf_puts(w, "{"); ret = emit_term(ct, w, term, trunc); wrbuf_puts(w, " TO "); if (apt2) { emit_term(ct, w, apt2->term, 0); if (!relation2 || !strcmp(relation2, "<=") || !strcmp(relation2, "le")) wrbuf_puts(w, "]"); else wrbuf_puts(w, "}"); } else wrbuf_puts(w, "*]"); } else ret = emit_term(ct, w, term, trunc); if (ret == 0) pr(wrbuf_cstr(w), client_data); return ret; } static int rpn2solr_structure(solr_transform_t ct, void (*pr)(const char *buf, void *client_data), void *client_data, Z_RPNStructure *q, int nested, WRBUF w) { if (q->which == Z_RPNStructure_simple) { if (q->u.simple->which != Z_Operand_APT) return YAZ_BIB1_RESULT_SET_UNSUPP_AS_A_SEARCH_TERM; else return rpn2solr_simple(ct, pr, client_data, q->u.simple->u.attributesPlusTerm, w, 0); } else { Z_Operator *op = q->u.complex->roperator; Z_AttributesPlusTerm *apt1, *apt2; int r; if (check_range(ct, q->u.complex, &apt1, &apt2)) return rpn2solr_simple(ct, pr, client_data, apt1, w, apt2); if (nested) pr("(", client_data); r = rpn2solr_structure(ct, pr, client_data, q->u.complex->s1, 1, w); if (r) return r; switch (op->which) { case Z_Operator_and: pr(" AND ", client_data); break; case Z_Operator_or: pr(" OR ", client_data); break; case Z_Operator_and_not: pr(" AND NOT ", client_data); break; case Z_Operator_prox: return YAZ_BIB1_UNSUPP_SEARCH; } r = rpn2solr_structure(ct, pr, client_data, q->u.complex->s2, 1, w); if (nested) pr(")", client_data); return r; } } int solr_transform_rpn2solr_stream_r(solr_transform_t ct, WRBUF addinfo, void (*pr)(const char *buf, void *client_data), void *client_data, Z_RPNQuery *q) { int r = rpn2solr_structure(ct, pr, client_data, q->RPNStructure, /* nested*/ 0, addinfo); if (!r) wrbuf_rewind(addinfo); return r; } int solr_transform_rpn2solr_stream(solr_transform_t ct, void (*pr)(const char *buf, void *client_data), void *client_data, Z_RPNQuery *q) { WRBUF w = wrbuf_alloc(); int r = solr_transform_rpn2solr_stream_r(ct, w, pr, client_data, q); if (r) solr_transform_set_error(ct, r, wrbuf_len(w) ? wrbuf_cstr(w) : 0); wrbuf_destroy(w); return r; } int solr_transform_rpn2solr_wrbuf(solr_transform_t ct, WRBUF w, Z_RPNQuery *q) { return solr_transform_rpn2solr_stream(ct, wrbuf_vp_puts, w, q); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cclp.h0000644000175000017500000000775113265142510011224 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file cclp.h * \brief CCL header with private definitions */ #include #define CCL_TOK_EOL 0 #define CCL_TOK_TERM 1 #define CCL_TOK_REL 2 #define CCL_TOK_EQ 3 #define CCL_TOK_PROX 4 #define CCL_TOK_LP 5 #define CCL_TOK_RP 6 #define CCL_TOK_COMMA 7 #define CCL_TOK_AND 8 #define CCL_TOK_OR 9 #define CCL_TOK_NOT 10 #define CCL_TOK_SET 11 typedef struct ccl_qualifier *ccl_qualifier_t; /** CCL token */ struct ccl_token { char kind; size_t len; /* length of name below */ const char *name; /* string / name of token */ struct ccl_token *next; struct ccl_token *prev; const char *ws_prefix_buf; /* leading white space buf */ size_t ws_prefix_len; /* leading white space len */ }; /** CCL parser structure */ struct ccl_parser { /** current lookahead token */ struct ccl_token *look_token; /** holds error code if error occur */ int error_code; /** start of CCL string buffer */ const char *start_pos; /** if error occurs, this holds position (starting from 0). */ const char *error_pos; /** current bibset */ CCL_bibset bibset; /** names of and operator */ const char **ccl_token_and; /** names of or operator */ const char **ccl_token_or; /** names of not operator */ const char **ccl_token_not; /** names of set operator */ const char **ccl_token_set; /** 1=CCL parser is case sensitive, 0=case insensitive */ int ccl_case_sensitive; }; /** * Splits CCL command string into individual tokens using * a CCL parser. */ YAZ_EXPORT struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command); /** * Deletes token list */ YAZ_EXPORT void ccl_token_del (struct ccl_token *list); /** * Add single token after a given onde. */ YAZ_EXPORT struct ccl_token *ccl_token_add (struct ccl_token *at); YAZ_EXPORT struct ccl_rpn_node *ccl_parser_find_token(CCL_parser cclp, struct ccl_token *list); YAZ_EXPORT ccl_qualifier_t ccl_qual_search(CCL_parser cclp, const char *name, size_t name_len, int seq); YAZ_EXPORT struct ccl_rpn_attr *ccl_qual_get_attr(ccl_qualifier_t q); YAZ_EXPORT const char *ccl_qual_get_name(ccl_qualifier_t q); /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/initopt.c0000644000175000017500000000526713265142510011764 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file initopt.c * \brief Implements Z39.50 Init Options Utility */ #if HAVE_CONFIG_H #include #endif #include static struct { char *name; int opt; } opt_array[] = { {"search", Z_Options_search}, {"present", Z_Options_present}, {"delSet", Z_Options_delSet}, {"resourceReport", Z_Options_resourceReport}, {"triggerResourceCtrl", Z_Options_triggerResourceCtrl}, {"resourceCtrl", Z_Options_resourceCtrl}, {"accessCtrl", Z_Options_accessCtrl}, {"scan", Z_Options_scan}, {"sort", Z_Options_sort}, {"extendedServices", Z_Options_extendedServices}, {"level_1Segmentation", Z_Options_level_1Segmentation}, {"level_2Segmentation", Z_Options_level_2Segmentation}, {"concurrentOperations", Z_Options_concurrentOperations}, {"namedResultSets", Z_Options_namedResultSets}, {"encapsulation", Z_Options_encapsulation}, {"resultCount", Z_Options_resultCount}, {"negotiationModel", Z_Options_negotiationModel}, {"duplicationDetection", Z_Options_duplicateDetection}, {"queryType104", Z_Options_queryType104}, {"pQESCorrection", Z_Options_pQESCorrection}, {"stringSchema", Z_Options_stringSchema}, {0, 0} }; int yaz_init_opt_encode(Z_Options *opt, const char *opt_str, int *error_pos) { const char *cp = opt_str; ODR_MASK_ZERO(opt); while (*cp) { char this_opt[42]; size_t i, j; if (*cp == ' ' || *cp == ',') { cp++; continue; } for (i = 0; i < (sizeof(this_opt)-1) && cp[i] && cp[i] != ' ' && cp[i] != ','; i++) this_opt[i] = cp[i]; this_opt[i] = 0; for (j = 0; opt_array[j].name; j++) { if (yaz_matchstr(this_opt, opt_array[j].name) == 0) { ODR_MASK_SET(opt, opt_array[j].opt); break; } } if (!opt_array[j].name) { if (error_pos) { *error_pos = cp - opt_str; return -1; } } cp += i; } return 0; } void yaz_init_opt_decode(Z_Options *opt, void (*pr)(const char *name, void *clientData), void *clientData) { int i; for (i = 0; opt_array[i].name; i++) if (ODR_MASK_GET(opt, opt_array[i].opt)) (*pr)(opt_array[i].name, clientData); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/record_conv.c0000644000175000017500000012373313265142510012600 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file record_conv.c * \brief Record Conversions utility */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include #include #include #include #if YAZ_HAVE_XSLT #include #include #endif #if YAZ_HAVE_EXSLT #include #endif /** \brief The internal structure for yaz_record_conv_t */ struct yaz_record_conv_struct { /** \brief memory for configuration */ NMEM nmem; /** \brief conversion rules (allocated using NMEM) */ struct yaz_record_conv_rule *rules; /** \brief pointer to last conversion rule pointer in chain */ struct yaz_record_conv_rule **rules_p; /** \brief string buffer for error messages */ WRBUF wr_error; /** \brief path for opening files */ char *path; }; struct marc_info { NMEM nmem; const char *input_charset; const char *output_charset; int input_format_mode; int output_format_mode; const char *leader_spec; }; /** \brief transformation info (rule info) */ struct yaz_record_conv_rule { struct yaz_record_conv_type *type; void *info; struct yaz_record_conv_rule *next; }; /** \brief reset rules+configuration */ static void yaz_record_conv_reset(yaz_record_conv_t p) { struct yaz_record_conv_rule *r; for (r = p->rules; r; r = r->next) { r->type->destroy(r->info); } wrbuf_rewind(p->wr_error); nmem_reset(p->nmem); p->rules = 0; p->rules_p = &p->rules; } void yaz_record_conv_destroy(yaz_record_conv_t p) { if (p) { yaz_record_conv_reset(p); nmem_destroy(p->nmem); wrbuf_destroy(p->wr_error); xfree(p->path); xfree(p); } } #if YAZ_HAVE_XSLT struct xslt_info { NMEM nmem; xmlDocPtr xsp_doc; const char **xsl_parms; }; static void *construct_xslt(const xmlNode *ptr, const char *path, WRBUF wr_error) { struct _xmlAttr *attr; const char *stylesheet = 0; struct xslt_info *info = 0; NMEM nmem = 0; int max_parms = 10; int no_parms = 0; if (strcmp((const char *) ptr->name, "xslt")) return 0; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "stylesheet") && attr->children && attr->children->type == XML_TEXT_NODE) stylesheet = (const char *) attr->children->content; else { wrbuf_printf(wr_error, "Bad attribute '%s'" "Expected stylesheet.", attr->name); return 0; } } nmem = nmem_create(); info = nmem_malloc(nmem, sizeof(*info)); info->nmem = nmem; info->xsl_parms = nmem_malloc( nmem, (2 * max_parms + 1) * sizeof(*info->xsl_parms)); for (ptr = ptr->children; ptr; ptr = ptr->next) { const char *name = 0; const char *value = 0; char *qvalue = 0; if (ptr->type != XML_ELEMENT_NODE) continue; if (strcmp((const char *) ptr->name, "param")) { wrbuf_printf(wr_error, "Bad element '%s'" "Expected param.", ptr->name); nmem_destroy(nmem); return 0; } for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "name") && attr->children && attr->children->type == XML_TEXT_NODE) name = (const char *) attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "value") && attr->children && attr->children->type == XML_TEXT_NODE) value = (const char *) attr->children->content; else { wrbuf_printf(wr_error, "Bad attribute '%s'" "Expected name or value.", attr->name); nmem_destroy(nmem); return 0; } } if (!name || !value) { wrbuf_printf(wr_error, "Missing attributes name or value"); nmem_destroy(nmem); return 0; } if (no_parms >= max_parms) { wrbuf_printf(wr_error, "Too many parameters given"); nmem_destroy(nmem); return 0; } qvalue = nmem_malloc(nmem, strlen(value) + 3); strcpy(qvalue, "\'"); strcat(qvalue, value); strcat(qvalue, "\'"); info->xsl_parms[2 * no_parms] = nmem_strdup(nmem, name); info->xsl_parms[2 * no_parms + 1] = qvalue; no_parms++; } info->xsl_parms[2 * no_parms] = 0; if (!stylesheet) { wrbuf_printf(wr_error, "Element : " "attribute 'stylesheet' expected"); nmem_destroy(nmem); } else { char fullpath[1024]; xsltStylesheetPtr xsp; if (!yaz_filepath_resolve(stylesheet, path, 0, fullpath)) { wrbuf_printf(wr_error, "Element :" " could not locate stylesheet '%s'", stylesheet, stylesheet); if (path) wrbuf_printf(wr_error, " with path '%s'", path); nmem_destroy(nmem); return 0; } info->xsp_doc = xmlParseFile(fullpath); if (!info->xsp_doc) { wrbuf_printf(wr_error, "Element: :" " xml parse failed: %s", stylesheet, fullpath); if (path) wrbuf_printf(wr_error, " with path '%s'", path); nmem_destroy(nmem); return 0; } /* need to copy this before passing it to the processor. It will be encapsulated in the xsp and destroyed by xsltFreeStylesheet */ xsp = xsltParseStylesheetDoc(xmlCopyDoc(info->xsp_doc, 1)); if (!xsp) { wrbuf_printf(wr_error, "Element: :" " xslt parse failed: %s", stylesheet, fullpath); if (path) wrbuf_printf(wr_error, " with path '%s'", path); wrbuf_printf(wr_error, " (" #if YAZ_HAVE_EXSLT "EXSLT enabled" #else "EXSLT not supported" #endif ")"); xmlFreeDoc(info->xsp_doc); nmem_destroy(info->nmem); } else { xsltFreeStylesheet(xsp); return info; } } return 0; } static int convert_xslt(void *vinfo, WRBUF record, WRBUF wr_error) { int ret = 0; struct xslt_info *info = vinfo; xmlDocPtr doc = xmlParseMemory(wrbuf_buf(record), wrbuf_len(record)); if (!doc) { wrbuf_printf(wr_error, "xmlParseMemory failed"); ret = -1; } else { xmlDocPtr xsp_doc = xmlCopyDoc(info->xsp_doc, 1); xsltStylesheetPtr xsp = xsltParseStylesheetDoc(xsp_doc); xmlDocPtr res = xsltApplyStylesheet(xsp, doc, info->xsl_parms); if (res) { xmlChar *out_buf = 0; int out_len; #if HAVE_XSLTSAVERESULTTOSTRING xsltSaveResultToString(&out_buf, &out_len, res, xsp); #else xmlDocDumpFormatMemory (res, &out_buf, &out_len, 1); #endif if (!out_buf) { wrbuf_printf(wr_error, "xsltSaveResultToString failed"); ret = -1; } else { wrbuf_rewind(record); wrbuf_write(record, (const char *) out_buf, out_len); xmlFree(out_buf); } xmlFreeDoc(res); } else { wrbuf_printf(wr_error, "xsltApplyStylesheet failed"); ret = -1; } xmlFreeDoc(doc); xsltFreeStylesheet(xsp); /* frees xsp_doc too */ } return ret; } static void destroy_xslt(void *vinfo) { struct xslt_info *info = vinfo; if (info) { xmlFreeDoc(info->xsp_doc); nmem_destroy(info->nmem); } } /* YAZ_HAVE_XSLT */ #endif struct select_info { NMEM nmem; char *xpath_expr; }; static void *construct_select(const xmlNode *ptr, const char *path, WRBUF wr_error) { if (strcmp((const char *) ptr->name, "select")) return 0; else { NMEM nmem = nmem_create(); struct select_info *info = nmem_malloc(nmem, sizeof(*info)); const char *attr_str; const char *xpath = 0; info->nmem = nmem; info->xpath_expr = 0; attr_str = yaz_xml_get_prop(ptr, "path%s", &xpath); if (attr_str) { wrbuf_printf(wr_error, "Bad attribute '%s'" "Expected xpath.", attr_str); nmem_destroy(nmem); return 0; } if (xpath) info->xpath_expr = nmem_strdup(nmem, xpath); return info; } } static int convert_select(void *vinfo, WRBUF record, WRBUF wr_error) { int ret = 0; struct select_info *info = vinfo; xmlDocPtr doc = xmlParseMemory(wrbuf_buf(record), wrbuf_len(record)); if (!doc) { wrbuf_printf(wr_error, "xmlParseMemory failed"); ret = -1; } else { xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc); if (xpathCtx && info->xpath_expr) { xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression((const xmlChar *) info->xpath_expr, xpathCtx); if (xpathObj) { xmlNodeSetPtr nodes = xpathObj->nodesetval; if (nodes) { int i; if (nodes->nodeNr > 0) wrbuf_rewind(record); for (i = 0; i < nodes->nodeNr; i++) { xmlNode *ptr = nodes->nodeTab[i]; if (ptr->type == XML_ELEMENT_NODE) ptr = ptr->children; for (; ptr; ptr = ptr->next) if (ptr->type == XML_TEXT_NODE) wrbuf_puts(record, (const char *) ptr->content); } } xmlXPathFreeObject(xpathObj); } xmlXPathFreeContext(xpathCtx); } xmlFreeDoc(doc); } return ret; } static void destroy_select(void *vinfo) { struct select_info *info = vinfo; if (info) nmem_destroy(info->nmem); } static void *construct_solrmarc(const xmlNode *ptr, const char *path, WRBUF wr_error) { if (strcmp((const char *) ptr->name, "solrmarc")) return 0; return wr_error; /* any non-null ptr will do; we don't use it later*/ } static int convert_solrmarc(void *info, WRBUF record, WRBUF wr_error) { WRBUF w = wrbuf_alloc(); const char *buf = wrbuf_buf(record); size_t i, sz = wrbuf_len(record); for (i = 0; i < sz; i++) { int ch; if (buf[i] == '#' && i < sz - 3 && buf[i+3] == ';' && atoi_n_check(buf+i+1, 2, &ch)) i += 3; else ch = buf[i]; wrbuf_putc(w, ch); } wrbuf_rewind(record); wrbuf_write(record, wrbuf_buf(w), wrbuf_len(w)); wrbuf_destroy(w); return 0; } static void destroy_solrmarc(void *info) { } static void *construct_marc(const xmlNode *ptr, const char *path, WRBUF wr_error) { NMEM nmem = nmem_create(); struct marc_info *info = nmem_malloc(nmem, sizeof(*info)); struct _xmlAttr *attr; const char *input_format = 0; const char *output_format = 0; if (strcmp((const char *) ptr->name, "marc")) { nmem_destroy(nmem); return 0; } info->nmem = nmem; info->input_charset = 0; info->output_charset = 0; info->input_format_mode = 0; info->output_format_mode = 0; info->leader_spec = 0; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "inputcharset") && attr->children && attr->children->type == XML_TEXT_NODE) info->input_charset = (const char *) attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "outputcharset") && attr->children && attr->children->type == XML_TEXT_NODE) info->output_charset = (const char *) attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "inputformat") && attr->children && attr->children->type == XML_TEXT_NODE) input_format = (const char *) attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "outputformat") && attr->children && attr->children->type == XML_TEXT_NODE) output_format = (const char *) attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "leaderspec") && attr->children && attr->children->type == XML_TEXT_NODE) info->leader_spec = nmem_strdup(info->nmem, (const char *) attr->children->content); else { wrbuf_printf(wr_error, "Element : expected attributes" "'inputformat', 'inputcharset', 'outputformat' or" " 'outputcharset', got attribute '%s'", attr->name); nmem_destroy(info->nmem); return 0; } } if (!input_format) { wrbuf_printf(wr_error, "Element : " "attribute 'inputformat' required"); nmem_destroy(info->nmem); return 0; } else if (!strcmp(input_format, "marc")) { info->input_format_mode = YAZ_MARC_ISO2709; } else if (!strcmp(input_format, "xml")) { info->input_format_mode = YAZ_MARC_MARCXML; /** Libxml2 generates UTF-8 encoding by default . So we convert from UTF-8 to outputcharset (if defined) */ if (!info->input_charset && info->output_charset) info->input_charset = "utf-8"; } else if (!strcmp(input_format, "json")) { info->input_format_mode = YAZ_MARC_JSON; } else { wrbuf_printf(wr_error, "Element : " " Unsupported input format" " defined by attribute value", input_format); nmem_destroy(info->nmem); return 0; } if (!output_format) { wrbuf_printf(wr_error, "Element : attribute 'outputformat' required"); nmem_destroy(info->nmem); return 0; } else if (!strcmp(output_format, "line")) { info->output_format_mode = YAZ_MARC_LINE; } else if (!strcmp(output_format, "marcxml")) { info->output_format_mode = YAZ_MARC_MARCXML; if (info->input_charset && !info->output_charset) info->output_charset = "utf-8"; } else if (!strcmp(output_format, "turbomarc")) { info->output_format_mode = YAZ_MARC_TURBOMARC; if (info->input_charset && !info->output_charset) info->output_charset = "utf-8"; } else if (!strcmp(output_format, "marc")) { info->output_format_mode = YAZ_MARC_ISO2709; } else if (!strcmp(output_format, "marcxchange")) { info->output_format_mode = YAZ_MARC_XCHANGE; if (info->input_charset && !info->output_charset) info->output_charset = "utf-8"; } else if (!strcmp(output_format, "json")) { info->output_format_mode = YAZ_MARC_JSON; if (info->input_charset && !info->output_charset) info->output_charset = "utf-8"; } else { wrbuf_printf(wr_error, "Element : " " Unsupported output format" " defined by attribute value", output_format); nmem_destroy(info->nmem); return 0; } if (info->input_charset && info->output_charset) { yaz_iconv_t cd = yaz_iconv_open(info->output_charset, info->input_charset); if (!cd) { wrbuf_printf(wr_error, "Element :" " Unsupported character set mapping" " defined by attribute values", info->input_charset, info->output_charset); nmem_destroy(info->nmem); return 0; } yaz_iconv_close(cd); } else if (!info->output_charset) { wrbuf_printf(wr_error, "Element : " "attribute 'outputcharset' missing"); nmem_destroy(info->nmem); return 0; } else if (!info->input_charset) { wrbuf_printf(wr_error, "Element : " "attribute 'inputcharset' missing"); nmem_destroy(info->nmem); return 0; } info->input_charset = nmem_strdup(info->nmem, info->input_charset); info->output_charset = nmem_strdup(info->nmem, info->output_charset); return info; } static int convert_marc(void *info, WRBUF record, WRBUF wr_error) { struct marc_info *mi = info; const char *input_charset = mi->input_charset; int ret = 0; yaz_marc_t mt = yaz_marc_create(); yaz_marc_xml(mt, mi->output_format_mode); if (mi->leader_spec) yaz_marc_leader_spec(mt, mi->leader_spec); if (mi->input_format_mode == YAZ_MARC_ISO2709) { int sz = yaz_marc_read_iso2709(mt, wrbuf_buf(record), wrbuf_len(record)); if (sz > 0) { if (yaz_marc_check_marc21_coding(input_charset, wrbuf_buf(record), wrbuf_len(record))) input_charset = "utf-8"; ret = 0; } else ret = -1; } else if (mi->input_format_mode == YAZ_MARC_MARCXML || mi->input_format_mode == YAZ_MARC_TURBOMARC) { xmlDocPtr doc = xmlParseMemory(wrbuf_buf(record), wrbuf_len(record)); if (!doc) { wrbuf_printf(wr_error, "xmlParseMemory failed"); ret = -1; } else { ret = yaz_marc_read_xml(mt, xmlDocGetRootElement(doc)); if (ret) wrbuf_printf(wr_error, "yaz_marc_read_xml failed"); } xmlFreeDoc(doc); } else { wrbuf_printf(wr_error, "unsupported input format"); ret = -1; } if (ret == 0) { yaz_iconv_t cd = yaz_iconv_open(mi->output_charset, input_charset); if (cd) yaz_marc_iconv(mt, cd); wrbuf_rewind(record); ret = yaz_marc_write_mode(mt, record); if (ret) wrbuf_printf(wr_error, "yaz_marc_write_mode failed"); if (cd) yaz_iconv_close(cd); } yaz_marc_destroy(mt); return ret; } static void destroy_marc(void *info) { struct marc_info *mi = info; nmem_destroy(mi->nmem); } /* each info covers one lookup xpath. They all share the nmem and namespaces*/ #define RDF_LOOKUP_MAX_KEYS 20 #define RDF_LOOKUP_MAX_NAMESPACES 20 struct rdf_lookup_info { NMEM nmem; struct rdf_lookup_info *next; int debug; int timeout; char *xpath; char *server; char *method; char *keys[RDF_LOOKUP_MAX_KEYS]; char **namespacelist; }; static struct rdf_lookup_info *construct_one_rdf_lookup(NMEM nmem, const xmlNode *ptr, WRBUF wr_error, int timeout) { struct _xmlAttr *attr; struct rdf_lookup_info *info = nmem_malloc(nmem, sizeof(*info)); int nkeys = 0; info->nmem = nmem; info->next = 0; info->xpath = 0; info->server = 0; info->method = 0; info->debug = 0; info->timeout = timeout; info->namespacelist = 0; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "xpath") && attr->children && attr->children->type == XML_TEXT_NODE) info->xpath = nmem_strdup(nmem, (const char *) attr->children->content); else { wrbuf_printf(wr_error, "Bad attribute '%s'" "Expected xpath.", attr->name); return 0; } } ptr = ptr->children; for ( ; ptr ; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE) { if (!xmlStrcmp(ptr->name, BAD_CAST "key")) { for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "field") && attr->children && attr->children->type == XML_TEXT_NODE) { info->keys[nkeys++] = nmem_strdup(nmem, (const char *) attr->children->content); if (nkeys >= RDF_LOOKUP_MAX_KEYS) { wrbuf_printf(wr_error, "Too many keys, max %d", RDF_LOOKUP_MAX_KEYS); return 0; } info->keys[nkeys] = 0; } else { wrbuf_printf(wr_error, "Bad attribute '%s'. " "Expected xpath.", attr->name); return 0; } } } else if (!xmlStrcmp(ptr->name, BAD_CAST "server")) { for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "url") && attr->children && attr->children->type == XML_TEXT_NODE) { info->server = nmem_strdup(nmem, (const char *) attr->children->content); } else if (!xmlStrcmp(attr->name, BAD_CAST "method") && attr->children && attr->children->type == XML_TEXT_NODE) { info->method = nmem_strdup(nmem, (const char *) attr->children->content); } else { wrbuf_printf(wr_error, "Bad attribute '%s'. " "Expected url or method.", attr->name); return 0; } } } else { wrbuf_printf(wr_error, "Bad tag '%s'. " "Expected 'key' or 'server'.", ptr->name); return 0; } } } return info; } static void *construct_rdf_lookup(const xmlNode *ptr, const char *path, WRBUF wr_error) { NMEM nmem = 0; struct rdf_lookup_info *info = 0; struct rdf_lookup_info **next = &info; const char *defserver = "http://id.loc.gov/authorities/names/label/%s"; char ** namespaces = 0; int debug = 0; int nns = 0; int timeout = 0; struct _xmlAttr *attr; if (strcmp((const char *) ptr->name, "rdf-lookup")) return 0; yaz_log(YLOG_DEBUG, "Constructing rdf_lookup."); for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "debug") && attr->children && attr->children->type == XML_TEXT_NODE) { debug = atoi((const char *) attr->children->content); } else if (!xmlStrcmp(attr->name, BAD_CAST "timeout") && attr->children && attr->children->type == XML_TEXT_NODE) { timeout = atoi((const char *) attr->children->content); } else { wrbuf_printf(wr_error, "Bad attribute '%s' for . " "Expected 'debug'", attr->name); return 0; } } nmem = nmem_create(); namespaces = nmem_malloc(nmem, RDF_LOOKUP_MAX_NAMESPACES * 2 * sizeof(char *)); namespaces[0] = 0; ptr = ptr->children; for ( ; ptr ; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE) { if (!strcmp((const char *)ptr->name, "lookup")) { struct rdf_lookup_info *i = construct_one_rdf_lookup(nmem, ptr, wr_error, timeout); if (!i) { nmem_destroy(nmem); return 0; /* error already in wr_error */ } else { i->namespacelist = namespaces; i->debug = debug; *next = i; next = &((*next)->next); if (! i->server) i->server = nmem_strdup(nmem, defserver); else defserver = i->server; if (! i->method) i->method = nmem_strdup(nmem, "GET"); yaz_log(YLOG_DEBUG, "lookup: x=%s k[0]:%s, %s %s", i->xpath, i->keys[0], i->method, i->server); } } else if (!strcmp((const char *)ptr->name, "namespace")) { char * prefix = 0; char * href = 0; struct _xmlAttr *attr; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "prefix") && attr->children && attr->children->type == XML_TEXT_NODE) { prefix = nmem_strdup(nmem, (const char *) attr->children->content); } else if (!xmlStrcmp(attr->name, BAD_CAST "href") && attr->children && attr->children->type == XML_TEXT_NODE) { href = nmem_strdup(nmem, (const char *) attr->children->content); } else { wrbuf_printf(wr_error, "Bad attribute '%s'. " "Expected 'prefix' or 'href'", attr->name); nmem_destroy(nmem); return 0; } } if (prefix && href) { namespaces[nns++] = prefix; namespaces[nns++] = href; namespaces[nns] = 0 ; /* signal end */ } else { wrbuf_printf(wr_error, "Bad namespace, need both 'prefix' and 'href'"); nmem_destroy(nmem); return 0; } } else { wrbuf_printf(wr_error, "Expected a tag under rdf-lookup, not <%s>", ptr->name); nmem_destroy(nmem); return 0; } } } return info; } static void destroy_rdf_lookup(void *info) { struct rdf_lookup_info *inf = info; yaz_log(YLOG_DEBUG, "Destroying rdf_lookup"); nmem_destroy(inf->nmem); } /* Little helper to add a XML comment */ static void rdf_lookup_debug_comment(xmlNode *n, WRBUF uri, Z_HTTP_Response *resp, struct rdf_lookup_info *info, yaz_timing_t tim, const char *msg, int yloglevel) { WRBUF com = wrbuf_alloc(); wrbuf_printf(com, " rdf-lookup %s ", info->method); wrbuf_puts_replace_str(com, wrbuf_cstr(uri), "--", "%2D%2D"); wrbuf_printf(com, " took %g sec", yaz_timing_get_real(tim)); if (resp) wrbuf_printf(com, " and resulted in %d", resp->code); if (msg) { wrbuf_puts(com, " "); wrbuf_puts(com, msg); } yaz_log(yloglevel, "%s", wrbuf_cstr(com) + 1); /* no leading space here */ wrbuf_puts(com, " "); /* lead+suffix space in XML comment */ if (info->debug) { xmlNodePtr comnode = xmlNewComment((const xmlChar *)wrbuf_cstr(com)); xmlAddNextSibling(n, comnode); } wrbuf_destroy(com); } static void rdf_lookup_node(xmlNode *n, xmlXPathContextPtr xpathCtx, struct rdf_lookup_info *info) { int i; int nkey; int done = 0; WRBUF uri = wrbuf_alloc(); xpathCtx->node = n; for (nkey = 0; !done && info->keys[nkey]; nkey++) { xmlXPathObjectPtr xpo = xmlXPathEvalExpression((const xmlChar *)info->keys[nkey], xpathCtx); xmlNodeSetPtr fldNodes = xpo->nodesetval; yaz_log(YLOG_DEBUG, "lookup_node: %d: %s", nkey, info->keys[nkey]); if (fldNodes) { for (i = 0; !done && i < fldNodes->nodeNr; i++) { xmlNode *f = fldNodes->nodeTab[i]; if (f->type == XML_ELEMENT_NODE) f = f->children; for (; f && !done; f = f->next) if (f->type == XML_TEXT_NODE) { yaz_timing_t tim = yaz_timing_create(); Z_HTTP_Response *resp; char *keybuf = xmalloc(3*strlen((const char*) f->content)+1); yaz_url_t url = yaz_url_create(); yaz_url_set_max_redirects(url, 0); /* we just want the first redirect */ if (info->timeout) yaz_url_set_timeout(url, info->timeout, 0); yaz_log(YLOG_DEBUG, "Found key '%s'", (const char*) f->content); yaz_encode_uri_component(keybuf, (const char*) f->content); wrbuf_rewind(uri); wrbuf_printf(uri, info->server, keybuf); xfree(keybuf); yaz_log(YLOG_DEBUG, "Fetching '%s'", wrbuf_cstr(uri)); yaz_timing_start(tim); /* no hdrs, no body */ resp = yaz_url_exec(url, wrbuf_cstr(uri), info->method, 0, 0, 0); yaz_timing_stop(tim); if (resp) { yaz_log(YLOG_DEBUG, "resp code %d, headers %p", resp->code, resp->headers); if ((resp->code == 302 || resp->code == 200) && resp->headers) { const char *newuri = z_HTTP_header_lookup(resp->headers, "X-Uri"); if (newuri && *newuri) { xmlSetProp(n, (const xmlChar *)"rdf:about", (const xmlChar *)newuri); done = 1; rdf_lookup_debug_comment(f->parent, uri, resp, info, tim, newuri, YLOG_DEBUG); } else { yaz_log(YLOG_LOG, "rdf-lookup: Got no X-Uri for %s", wrbuf_cstr(uri)); rdf_lookup_debug_comment(f->parent, uri, resp, info, tim, "No X-URI Header in response!", YLOG_LOG); } } else { rdf_lookup_debug_comment(f->parent, uri, resp, info, tim, NULL, YLOG_LOG); } if (!done) { /* something went wrong, dump headers and message */ const char *err = yaz_url_get_error(url); Z_HTTP_Header *r = resp->headers; for ( ; r; r = r->next) yaz_log(YLOG_DEBUG, " %s: %s", r->name, r->value); if (resp->content_len > 0) { int i = 0; for (i = 0; i < resp->content_len; i++) { if (strchr(" \r\n", resp->content_buf[i])) i++; } if (i < resp->content_len) yaz_log(YLOG_LOG, "Response: %*.s", resp->content_len - i, resp->content_buf + i); } if (err && *err) yaz_log(YLOG_LOG, "Error: %s", err); } } else { rdf_lookup_debug_comment(f->parent, uri, resp, info, tim, "NO RESPONSE", YLOG_LOG); } yaz_timing_destroy(&tim); yaz_url_destroy(url); } } } xmlXPathFreeObject(xpo); } wrbuf_destroy(uri); } static int convert_rdf_lookup(void *rinfo, WRBUF record, WRBUF wr_error) { int ret = 0; struct rdf_lookup_info *info = rinfo; xmlDocPtr doc = xmlParseMemory(wrbuf_buf(record), wrbuf_len(record)); yaz_log(YLOG_DEBUG, "rdf_lookup convert starting"); if (!doc) { wrbuf_printf(wr_error, "xmlParseMemory failed"); ret = -1; } else { xmlChar *out_buf = 0; int out_len; xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc); if (xpathCtx) { char **ns = info->namespacelist; while (*ns) { xmlXPathRegisterNs(xpathCtx, (const xmlChar *)ns[0], (const xmlChar *)ns[1]); ns += 2; } while (info) { xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression((xmlChar *)(info->xpath), xpathCtx); yaz_log(YLOG_DEBUG, "xpath: %p %s", xpathObj, info->xpath); if (xpathObj) { xmlNodeSetPtr nodes = xpathObj->nodesetval; yaz_log(YLOG_DEBUG, "nodeset: %p", nodes); if (nodes) { int i; for (i = 0; i < nodes->nodeNr; i++) { xmlNode *ptr = nodes->nodeTab[i]; yaz_log(YLOG_DEBUG, " node %d: t=%d n='%s' c='%s'", i, ptr->type, (const char*) ptr->name, ptr->content); rdf_lookup_node(ptr, xpathCtx, info); } } xmlXPathFreeObject(xpathObj); } else { wrbuf_printf(wr_error, "Cannot compile X-Path expr: %s", info->xpath); ret = -1; } info = info->next; } xmlXPathFreeContext(xpathCtx); } xmlDocDumpFormatMemory (doc, &out_buf, &out_len, 1); if (!out_buf) { wrbuf_printf(wr_error, "xmlDocDumpFormatMemory failed"); ret = -1; } else { wrbuf_rewind(record); wrbuf_write(record, (const char *) out_buf, out_len); xmlFree(out_buf); } xmlFreeDoc(doc); } return ret; } int yaz_record_conv_configure_t(yaz_record_conv_t p, const xmlNode *ptr, struct yaz_record_conv_type *types) { struct yaz_record_conv_type bt[5]; size_t i = 0; /* register marc */ bt[i].construct = construct_marc; bt[i].convert = convert_marc; bt[i++].destroy = destroy_marc; bt[i-1].next = &bt[i]; bt[i].construct = construct_solrmarc; bt[i].convert = convert_solrmarc; bt[i++].destroy = destroy_solrmarc; bt[i-1].next = &bt[i]; bt[i].construct = construct_select; bt[i].convert = convert_select; bt[i++].destroy = destroy_select; #if YAZ_HAVE_XSLT /* register xslt */ bt[i-1].next = &bt[i]; bt[i].construct = construct_xslt; bt[i].convert = convert_xslt; bt[i++].destroy = destroy_xslt; /* register rdf_lookup */ bt[i-1].next = &bt[i]; bt[i].construct = construct_rdf_lookup; bt[i].convert = convert_rdf_lookup; bt[i++].destroy = destroy_rdf_lookup; #endif bt[i-1].next = types; yaz_record_conv_reset(p); /* parsing element children */ for (ptr = ptr->children; ptr; ptr = ptr->next) { struct yaz_record_conv_type *t; struct yaz_record_conv_rule *r; void *info = 0; if (ptr->type != XML_ELEMENT_NODE) continue; for (t = &bt[0]; t; t = t->next) { wrbuf_rewind(p->wr_error); info = t->construct(ptr, p->path, p->wr_error); if (info || wrbuf_len(p->wr_error)) break; /* info== 0 and no error reported , ie not handled by it */ } if (!info) { if (wrbuf_len(p->wr_error) == 0) wrbuf_printf(p->wr_error, "Element : " "unsupported element <%s>", ptr->name); return -1; } r = (struct yaz_record_conv_rule *) nmem_malloc(p->nmem, sizeof(*r)); r->next = 0; r->info = info; r->type = nmem_malloc(p->nmem, sizeof(*t)); memcpy(r->type, t, sizeof(*t)); *p->rules_p = r; p->rules_p = &r->next; } return 0; } int yaz_record_conv_configure(yaz_record_conv_t p, const xmlNode *ptr) { return yaz_record_conv_configure_t(p, ptr, 0); } static int yaz_record_conv_record_rule(yaz_record_conv_t p, struct yaz_record_conv_rule *r, const char *input_record_buf, size_t input_record_len, WRBUF output_record) { int ret = 0; WRBUF record = output_record; /* pointer transfer */ wrbuf_rewind(p->wr_error); wrbuf_write(record, input_record_buf, input_record_len); for (; ret == 0 && r; r = r->next) ret = r->type->convert(r->info, record, p->wr_error); return ret; } int yaz_record_conv_opac_record(yaz_record_conv_t p, Z_OPACRecord *input_record, WRBUF output_record) { int ret = 0; struct yaz_record_conv_rule *r = p->rules; if (!r || r->type->construct != construct_marc) { wrbuf_puts(p->wr_error, "Expecting MARC rule as first rule for OPAC"); ret = -1; /* no marc rule so we can't do OPAC */ } else { struct marc_info *mi = r->info; const char *input_charset = mi->input_charset; yaz_iconv_t cd; WRBUF res = wrbuf_alloc(); yaz_marc_t mt = yaz_marc_create(); if (yaz_opac_check_marc21_coding(input_charset, input_record)) input_charset = "utf-8"; cd = yaz_iconv_open(mi->output_charset, input_charset); wrbuf_rewind(p->wr_error); yaz_marc_xml(mt, mi->output_format_mode); yaz_marc_iconv(mt, cd); yaz_opac_decode_wrbuf(mt, input_record, res); if (ret != -1) { ret = yaz_record_conv_record_rule(p, r->next, wrbuf_buf(res), wrbuf_len(res), output_record); } yaz_marc_destroy(mt); if (cd) yaz_iconv_close(cd); wrbuf_destroy(res); } return ret; } int yaz_record_conv_record(yaz_record_conv_t p, const char *input_record_buf, size_t input_record_len, WRBUF output_record) { return yaz_record_conv_record_rule(p, p->rules, input_record_buf, input_record_len, output_record); } const char *yaz_record_conv_get_error(yaz_record_conv_t p) { return wrbuf_cstr(p->wr_error); } void yaz_record_conv_set_path(yaz_record_conv_t p, const char *path) { xfree(p->path); p->path = 0; if (path) p->path = xstrdup(path); } yaz_record_conv_t yaz_record_conv_create() { yaz_record_conv_t p = (yaz_record_conv_t) xmalloc(sizeof(*p)); p->nmem = nmem_create(); p->wr_error = wrbuf_alloc(); p->rules = 0; p->path = 0; return p; } /* YAZ_HAVE_XML2 */ #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-diag1.c0000644000175000017500000003255213273126163011534 00000000000000/** \file z-diag1.c \brief ASN.1 Module DiagnosticFormatDiag1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_DiagnosticFormat_s(ODR o, Z_DiagnosticFormat_s **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DiagnosticFormat_s_defaultDiagRec, (Odr_fun) z_DefaultDiagFormat, "defaultDiagRec"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_DiagnosticFormat_s_explicitDiagnostic, (Odr_fun) z_DiagFormat, "explicitDiagnostic"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "diagnostic") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_implicit_tag(o, z_InternationalString, &(*p)->message, ODR_CONTEXT, 2, 1, "message") && odr_sequence_end(o); } int z_DiagnosticFormat(ODR o, Z_DiagnosticFormat **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_DiagnosticFormat_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_TooMany(ODR o, Z_TooMany **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->tooManyWhat, ODR_CONTEXT, 1, 0, "tooManyWhat") && odr_implicit_tag(o, odr_integer, &(*p)->max, ODR_CONTEXT, 2, 1, "max") && odr_sequence_end(o); } int z_BadSpec(ODR o, Z_BadSpec **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_Specification, &(*p)->spec, ODR_CONTEXT, 1, 0, "spec") && odr_implicit_tag(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 2, 1, "db") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) z_Specification, &(*p)->goodOnes, &(*p)->num_goodOnes, "goodOnes") || odr_ok(o)) && odr_sequence_end(o); } int z_DbUnavail_0(ODR o, Z_DbUnavail_0 **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->reasonCode, ODR_CONTEXT, 1, 1, "reasonCode") && odr_implicit_tag(o, z_InternationalString, &(*p)->message, ODR_CONTEXT, 2, 1, "message") && odr_sequence_end(o); } int z_DbUnavail(ODR o, Z_DbUnavail **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 1, 0, "db") && odr_implicit_tag(o, z_DbUnavail_0, &(*p)->why, ODR_CONTEXT, 2, 0, "why") && odr_sequence_end(o); } int z_Attribute(ODR o, Z_Attribute **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->id, ODR_CONTEXT, 1, 0, "id") && odr_implicit_tag(o, odr_integer, &(*p)->type, ODR_CONTEXT, 2, 1, "type") && odr_implicit_tag(o, odr_integer, &(*p)->value, ODR_CONTEXT, 3, 1, "value") && odr_explicit_tag(o, z_Term, &(*p)->term, ODR_CONTEXT, 4, 1, "term") && odr_sequence_end(o); } int z_AttCombo(ODR o, Z_AttCombo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_AttributeList, &(*p)->unsupportedCombination, ODR_CONTEXT, 1, 0, "unsupportedCombination") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_AttributeList, &(*p)->recommendedAlternatives, &(*p)->num_recommendedAlternatives, "recommendedAlternatives") || odr_ok(o)) && odr_sequence_end(o); } int z_DiagTerm(ODR o, Z_DiagTerm **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->problem, ODR_CONTEXT, 1, 1, "problem") && odr_explicit_tag(o, z_Term, &(*p)->term, ODR_CONTEXT, 2, 0, "term") && odr_sequence_end(o); } int z_Proximity(ODR o, Z_Proximity **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Proximity_resultSets, (Odr_fun) odr_null, "resultSets"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Proximity_badSet, (Odr_fun) z_InternationalString, "badSet"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Proximity_relation, (Odr_fun) odr_integer, "relation"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Proximity_unit, (Odr_fun) odr_integer, "unit"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Proximity_distance, (Odr_fun) odr_integer, "distance"}, {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_Proximity_attributes, (Odr_fun) z_AttributeList, "attributes"}, {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Proximity_ordered, (Odr_fun) odr_null, "ordered"}, {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Proximity_exclusion, (Odr_fun) odr_null, "exclusion"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_AttrListList(ODR o, Z_AttrListList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_AttributeList, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Scan(ODR o, Z_Scan **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_Scan_nonZeroStepSize, (Odr_fun) odr_null, "nonZeroStepSize"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Scan_specifiedStepSize, (Odr_fun) odr_null, "specifiedStepSize"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Scan_termList1, (Odr_fun) odr_null, "termList1"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Scan_termList2, (Odr_fun) z_AttrListList, "termList2"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Scan_posInResponse, (Odr_fun) odr_integer, "posInResponse"}, {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_Scan_resources, (Odr_fun) odr_null, "resources"}, {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Scan_endOfList, (Odr_fun) odr_null, "endOfList"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_StringList(ODR o, Z_StringList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Sort(ODR o, Z_Sort **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortD_sequence, (Odr_fun) odr_null, "sequence"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortD_noRsName, (Odr_fun) odr_null, "noRsName"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortD_tooMany, (Odr_fun) odr_integer, "tooMany"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortD_incompatible, (Odr_fun) odr_null, "incompatible"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_SortD_generic, (Odr_fun) odr_null, "generic"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_SortD_dbSpecific, (Odr_fun) odr_null, "dbSpecific"}, {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_SortD_sortElement, (Odr_fun) z_SortElement, "sortElement"}, {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_SortD_key, (Odr_fun) odr_integer, "key"}, {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_SortD_action, (Odr_fun) odr_null, "action"}, {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_SortD_illegal, (Odr_fun) odr_integer, "illegal"}, {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_SortD_inputTooLarge, (Odr_fun) z_StringList, "inputTooLarge"}, {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_SortD_aggregateTooLarge, (Odr_fun) odr_null, "aggregateTooLarge"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_Segmentation(ODR o, Z_Segmentation **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_Segmentation_segmentCount, (Odr_fun) odr_null, "segmentCount"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Segmentation_segmentSize, (Odr_fun) odr_integer, "segmentSize"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ExtServices(ODR o, Z_ExtServices **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ExtServices_req, (Odr_fun) odr_integer, "req"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ExtServices_permission, (Odr_fun) odr_integer, "permission"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ExtServices_immediate, (Odr_fun) odr_integer, "immediate"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_OidList(ODR o, Z_OidList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_AltOidList(ODR o, Z_AltOidList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_AccessCtrl(ODR o, Z_AccessCtrl **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_AccessCtrl_noUser, (Odr_fun) odr_null, "noUser"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_AccessCtrl_refused, (Odr_fun) odr_null, "refused"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AccessCtrl_simple, (Odr_fun) odr_null, "simple"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AccessCtrl_oid, (Odr_fun) z_OidList, "oid"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_AccessCtrl_alternative, (Odr_fun) z_AltOidList, "alternative"}, {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_AccessCtrl_pwdInv, (Odr_fun) odr_null, "pwdInv"}, {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_AccessCtrl_pwdExp, (Odr_fun) odr_null, "pwdExp"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_RecordSyntax(ODR o, Z_RecordSyntax **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->unsupportedSyntax, ODR_CONTEXT, 1, 0, "unsupportedSyntax") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) odr_oid, &(*p)->suggestedAlternatives, &(*p)->num_suggestedAlternatives, "suggestedAlternatives") || odr_ok(o)) && odr_sequence_end(o); } int z_DiagFormat(ODR o, Z_DiagFormat **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1000, Z_DiagFormat_tooMany, (Odr_fun) z_TooMany, "tooMany"}, {ODR_IMPLICIT, ODR_CONTEXT, 1001, Z_DiagFormat_badSpec, (Odr_fun) z_BadSpec, "badSpec"}, {ODR_IMPLICIT, ODR_CONTEXT, 1002, Z_DiagFormat_dbUnavail, (Odr_fun) z_DbUnavail, "dbUnavail"}, {ODR_IMPLICIT, ODR_CONTEXT, 1003, Z_DiagFormat_unSupOp, (Odr_fun) odr_integer, "unSupOp"}, {ODR_IMPLICIT, ODR_CONTEXT, 1004, Z_DiagFormat_attribute, (Odr_fun) z_Attribute, "attribute"}, {ODR_IMPLICIT, ODR_CONTEXT, 1005, Z_DiagFormat_attCombo, (Odr_fun) z_AttCombo, "attCombo"}, {ODR_IMPLICIT, ODR_CONTEXT, 1006, Z_DiagFormat_term, (Odr_fun) z_DiagTerm, "term"}, {ODR_EXPLICIT, ODR_CONTEXT, 1007, Z_DiagFormat_proximity, (Odr_fun) z_Proximity, "proximity"}, {ODR_EXPLICIT, ODR_CONTEXT, 1008, Z_DiagFormat_scan, (Odr_fun) z_Scan, "scan"}, {ODR_EXPLICIT, ODR_CONTEXT, 1009, Z_DiagFormat_sort, (Odr_fun) z_Sort, "sort"}, {ODR_EXPLICIT, ODR_CONTEXT, 1010, Z_DiagFormat_segmentation, (Odr_fun) z_Segmentation, "segmentation"}, {ODR_EXPLICIT, ODR_CONTEXT, 1011, Z_DiagFormat_extServices, (Odr_fun) z_ExtServices, "extServices"}, {ODR_EXPLICIT, ODR_CONTEXT, 1012, Z_DiagFormat_accessCtrl, (Odr_fun) z_AccessCtrl, "accessCtrl"}, {ODR_IMPLICIT, ODR_CONTEXT, 1013, Z_DiagFormat_recordSyntax, (Odr_fun) z_RecordSyntax, "recordSyntax"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } yaz-5.28.0/src/opac_to_xml.c0000644000175000017500000002021313265142510012566 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file opac_to_xml.c * \brief Implements OPAC to XML conversion */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static void opac_element_str(WRBUF wrbuf, yaz_iconv_t cd1, yaz_iconv_t cd2, int l, const char *elem, const char *data) { if (data) { size_t pos; while (--l >= 0) wrbuf_puts(wrbuf, " "); wrbuf_puts(wrbuf, "<"); wrbuf_puts(wrbuf, elem); wrbuf_puts(wrbuf, ">"); pos = wrbuf->pos; /* save position */ if (wrbuf_iconv_write2(wrbuf, cd1, data, strlen(data), wrbuf_xmlputs_n) && cd2) { wrbuf->pos = pos; /* rewind to pos */ wrbuf_iconv_write2(wrbuf, cd2, data, strlen(data), wrbuf_xmlputs_n); } wrbuf_puts(wrbuf, "\n"); } } static void opac_element_bool(WRBUF wrbuf, int l, const char *elem, int *data) { if (data) { while (--l >= 0) wrbuf_puts(wrbuf, " "); wrbuf_puts(wrbuf, "<"); wrbuf_puts(wrbuf, elem); if (*data) wrbuf_puts(wrbuf, " value=\"1\""); else wrbuf_puts(wrbuf, " value=\"0\""); wrbuf_puts(wrbuf, "/>\n"); } } void yaz_opac_decode_wrbuf2(yaz_marc_t mt, Z_OPACRecord *r, WRBUF wrbuf, yaz_iconv_t cd2) { int i; yaz_iconv_t cd1 = yaz_marc_get_iconv(mt); wrbuf_puts(wrbuf, "\n"); if (r->bibliographicRecord) { Z_External *ext = r->bibliographicRecord; wrbuf_puts(wrbuf, " \n"); if (ext->which == Z_External_octet) yaz_marc_decode_wrbuf(mt, (const char *) ext->u.octet_aligned->buf, ext->u.octet_aligned->len, wrbuf); wrbuf_puts(wrbuf, " \n"); } wrbuf_puts(wrbuf, "\n"); for (i = 0; i < r->num_holdingsData; i++) { Z_HoldingsRecord *h = r->holdingsData[i]; wrbuf_puts(wrbuf, " \n"); if (h->which == Z_HoldingsRecord_marcHoldingsRecord) { Z_External *ext = h->u.marcHoldingsRecord; wrbuf_puts(wrbuf, " \n"); if (ext->which == Z_External_octet) yaz_marc_decode_wrbuf(mt, (const char *) ext->u.octet_aligned->buf, ext->u.octet_aligned->len, wrbuf); wrbuf_puts(wrbuf, " \n"); } else if (h->which == Z_HoldingsRecord_holdingsAndCirc) { int j; Z_HoldingsAndCircData *d = h->u.holdingsAndCirc; opac_element_str(wrbuf, cd1, cd2, 2, "typeOfRecord", d->typeOfRecord); opac_element_str(wrbuf, cd1, cd2, 2, "encodingLevel", d->encodingLevel); opac_element_str(wrbuf, cd1, cd2, 2, "format", d->format); opac_element_str(wrbuf, cd1, cd2, 2, "receiptAcqStatus", d->receiptAcqStatus); opac_element_str(wrbuf, cd1, cd2, 2, "generalRetention", d->generalRetention); opac_element_str(wrbuf, cd1, cd2, 2, "completeness", d->completeness); opac_element_str(wrbuf, cd1, cd2, 2, "dateOfReport", d->dateOfReport); opac_element_str(wrbuf, cd1, cd2, 2, "nucCode", d->nucCode); opac_element_str(wrbuf, cd1, cd2, 2, "localLocation", d->localLocation); opac_element_str(wrbuf, cd1, cd2, 2, "shelvingLocation", d->shelvingLocation); opac_element_str(wrbuf, cd1, cd2, 2, "callNumber", d->callNumber); opac_element_str(wrbuf, cd1, cd2, 2, "shelvingData", d->shelvingData); opac_element_str(wrbuf, cd1, cd2, 2, "copyNumber", d->copyNumber); opac_element_str(wrbuf, cd1, cd2, 2, "publicNote", d->publicNote); opac_element_str(wrbuf, cd1, cd2, 2, "reproductionNote", d->reproductionNote); opac_element_str(wrbuf, cd1, cd2, 2, "termsUseRepro", d->termsUseRepro); opac_element_str(wrbuf, cd1, cd2, 2, "enumAndChron", d->enumAndChron); if (d->num_volumes) { wrbuf_puts (wrbuf, " \n"); for (j = 0; jnum_volumes; j++) { wrbuf_puts (wrbuf, " \n"); opac_element_str(wrbuf, cd1, cd2, 4, "enumeration", d->volumes[j]->enumeration); opac_element_str(wrbuf, cd1, cd2, 4, "chronology", d->volumes[j]->chronology); opac_element_str(wrbuf, cd1, cd2, 4, "enumAndChron", d->volumes[j]->enumAndChron); wrbuf_puts(wrbuf, " \n"); } wrbuf_puts(wrbuf, " \n"); } if (d->num_circulationData) { wrbuf_puts (wrbuf, " \n"); for (j = 0; jnum_circulationData; j++) { wrbuf_puts(wrbuf," \n"); opac_element_bool(wrbuf, 4, "availableNow", d->circulationData[j]->availableNow); opac_element_str(wrbuf, cd1, cd2, 4, "availabilityDate", d->circulationData[j]->availablityDate); opac_element_str(wrbuf, cd1, cd2, 4, "availableThru", d->circulationData[j]->availableThru); opac_element_str(wrbuf, cd1, cd2, 4, "restrictions", d->circulationData[j]->restrictions); opac_element_str(wrbuf, cd1, cd2, 4, "itemId", d->circulationData[j]->itemId); opac_element_bool(wrbuf, 4, "renewable", d->circulationData[j]->renewable); opac_element_bool(wrbuf, 4, "onHold", d->circulationData[j]->onHold); opac_element_str(wrbuf, cd1, cd2, 4, "enumAndChron", d->circulationData[j]->enumAndChron); opac_element_str(wrbuf, cd1, cd2, 4, "midspine", d->circulationData[j]->midspine); opac_element_str(wrbuf, cd1, cd2, 4, "temporaryLocation", d->circulationData[j]->temporaryLocation); wrbuf_puts(wrbuf, " \n"); } wrbuf_puts(wrbuf, " \n"); } } wrbuf_puts(wrbuf, " \n"); } wrbuf_puts(wrbuf, "\n"); wrbuf_puts(wrbuf, "\n"); } void yaz_opac_decode_wrbuf(yaz_marc_t mt, Z_OPACRecord *r, WRBUF wrbuf) { yaz_opac_decode_wrbuf2(mt, r, wrbuf, 0); } int yaz_opac_check_marc21_coding(const char *charset, Z_OPACRecord *r) { if (r->bibliographicRecord) { Z_External *ext = r->bibliographicRecord; if (ext->which == Z_External_octet) { return yaz_marc_check_marc21_coding( charset, (const char *) ext->u.octet_aligned->buf, ext->u.octet_aligned->len); } } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/marc_read_json.c0000644000175000017500000001346113265142510013237 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file marc_read_json.c * \brief Implements reading of MARC in JSON format */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include static void parse_subfields(yaz_marc_t mt, struct json_node *sf, WRBUF wtmp) { assert(sf->type == json_node_list); for (; sf; sf = sf->u.link[1]) { if (sf->u.link[0]->type == json_node_object && sf->u.link[0]->u.link[0]->type == json_node_list) { struct json_node *se = sf->u.link[0]->u.link[0]; for (; se; se = se->u.link[1]) { if (se->u.link[0]->type == json_node_pair && se->u.link[0]->u.link[0]->type == json_node_string && se->u.link[0]->u.link[1]->type == json_node_string) { wrbuf_rewind(wtmp); wrbuf_puts(wtmp, se->u.link[0]->u.link[0]->u.string); wrbuf_puts(wtmp, se->u.link[0]->u.link[1]->u.string); yaz_marc_add_subfield(mt, wrbuf_buf(wtmp), wrbuf_len(wtmp)); } } } } } static void parse_field(yaz_marc_t mt, struct json_node *p, int indicator_length, WRBUF wtmp) { if (p->type == json_node_pair && p->u.link[0]->type == json_node_string) { struct json_node *l = p->u.link[1]; if (l->type == json_node_string) { yaz_marc_add_controlfield(mt, p->u.link[0]->u.string, l->u.string, strlen(l->u.string)); } else if (l->type == json_node_object && l->u.link[0]->type == json_node_list) { struct json_node *m; int j; wrbuf_rewind(wtmp); for (j = 1; j <= indicator_length; j++) { for (m = l->u.link[0]; m; m = m->u.link[1]) { struct json_node *s = m->u.link[0]; if (s->type == json_node_pair) { if (s->u.link[0]->type == json_node_string && !strncmp(s->u.link[0]->u.string, "ind", 3) && s->u.link[0]->u.string[3] == '0' + j && s->u.link[1]->type == json_node_string) { wrbuf_puts(wtmp, s->u.link[1]->u.string); } } } } yaz_marc_add_datafield(mt, p->u.link[0]->u.string, wrbuf_cstr(wtmp), wrbuf_len(wtmp)); for (m = l->u.link[0]; m; m = m->u.link[1]) { struct json_node *s = m->u.link[0]; if (s->type == json_node_pair) { if (s->u.link[0]->type == json_node_string && !strcmp(s->u.link[0]->u.string, "subfields") && s->u.link[1]->type == json_node_array) { parse_subfields(mt, s->u.link[1]->u.link[0], wtmp); } } } } } } int yaz_marc_read_json_node(yaz_marc_t mt, struct json_node *n) { if (n && n->type == json_node_object) { int indicator_length; int identifier_length; int base_address; int length_data_entry; int length_starting; int length_implementation; struct json_node *l; WRBUF wtmp = wrbuf_alloc(); for (l = n->u.link[0]; l; l = l->u.link[1]) { if (l->u.link[0]->type == json_node_pair && l->u.link[0]->u.link[0]->type == json_node_string) { struct json_node *p = l->u.link[0]; if (!strcmp(p->u.link[0]->u.string, "leader") && p->u.link[1]->type == json_node_string && strlen(p->u.link[1]->u.string) == 24) { yaz_marc_set_leader(mt, p->u.link[1]->u.string, &indicator_length, &identifier_length, &base_address, &length_data_entry, &length_starting, &length_implementation); } if (!strcmp(p->u.link[0]->u.string, "fields") && p->u.link[1]->type == json_node_array && p->u.link[1]->u.link[0] && p->u.link[1]->u.link[0]->type == json_node_list) { struct json_node *l; for (l = p->u.link[1]->u.link[0]; l; l = l->u.link[1]) { if (l->u.link[0]->type == json_node_object) { if (l->u.link[0]->u.link[0] && l->u.link[0]->u.link[0]->type == json_node_list) { struct json_node *m = l->u.link[0]->u.link[0]; for (; m; m = m->u.link[1]) parse_field(mt, m->u.link[0], indicator_length, wtmp); } } } } } } wrbuf_destroy(wtmp); return 0; } return -1; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_tag.c0000644000175000017500000000241713265142510011707 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_tag.c * \brief Implements ODR IMPLICIT tagging codec */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" int odr_peektag(ODR o, int *zclass, int *tag, int *cons) { if (o->direction != ODR_DECODE) { odr_seterror(o, OOTHER, 48); return 0; } if (ODR_STACK_NOT_EMPTY(o) && !odr_constructed_more(o)) return 0; if (ber_dectag(o->op->bp, zclass, tag, cons, odr_max(o)) <= 0) { odr_seterror(o, OREQUIRED, 49); return 0; } return 1; } int odr_implicit_settag(ODR o, int zclass, int tag) { if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = zclass; o->op->t_tag = tag; } return 1; } int odr_initmember(ODR o, void *p, int size) { char **pp = (char **) p; if (o->error) return 0; if (o->direction == ODR_DECODE) *pp = (char *)odr_malloc(o, size); else if (!*pp) { o->op->t_class = -1; return 0; } return 1; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/url.c0000644000175000017500000002505313433323404011073 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file url.c * \brief URL fetch utility */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include struct yaz_url { ODR odr_in; ODR odr_out; char *proxy; int max_redirects; WRBUF w_error; int verbose; int timeout_sec; int timeout_ns; yaz_cookies_t cookies; }; yaz_url_t yaz_url_create(void) { yaz_url_t p = xmalloc(sizeof(*p)); p->odr_in = odr_createmem(ODR_DECODE); p->odr_out = odr_createmem(ODR_ENCODE); p->proxy = 0; p->max_redirects = 10; p->w_error = wrbuf_alloc(); p->verbose = 0; p->timeout_sec = 30; p->timeout_ns = 0; p->cookies = yaz_cookies_create(); return p; } void yaz_url_destroy(yaz_url_t p) { if (p) { odr_destroy(p->odr_in); odr_destroy(p->odr_out); xfree(p->proxy); wrbuf_destroy(p->w_error); yaz_cookies_destroy(p->cookies); xfree(p); } } void yaz_url_set_proxy(yaz_url_t p, const char *proxy) { xfree(p->proxy); p->proxy = 0; if (proxy && *proxy) p->proxy = xstrdup(proxy); } void yaz_url_set_max_redirects(yaz_url_t p, int num) { p->max_redirects = num; } void yaz_url_set_verbose(yaz_url_t p, int num) { p->verbose = num; } void yaz_url_set_timeout(yaz_url_t p, int sec, int ns) { p->timeout_sec = sec; p->timeout_ns = ns; } static void extract_user_pass(NMEM nmem, const char *uri, char **uri_lean, char **http_user, char **http_pass) { const char *cp1 = strchr(uri, '/'); *uri_lean = 0; *http_user = 0; *http_pass = 0; if (cp1 && cp1 > uri) { cp1--; if (!strncmp(cp1, "://", 3)) { const char *cp3 = 0; const char *cp2 = cp1 + 3; while (*cp2 && *cp2 != '/' && *cp2 != '@') { if (*cp2 == ':') cp3 = cp2; cp2++; } if (*cp2 == '@' && cp3) { *uri_lean = nmem_malloc(nmem, strlen(uri) + 1); memcpy(*uri_lean, uri, cp1 + 3 - uri); strcpy(*uri_lean + (cp1 + 3 - uri), cp2 + 1); *http_user = nmem_strdupn(nmem, cp1 + 3, cp3 - (cp1 + 3)); *http_pass = nmem_strdupn(nmem, cp3 + 1, cp2 - (cp3 + 1)); } } } if (*uri_lean == 0) *uri_lean = nmem_strdup(nmem, uri); } const char *yaz_url_get_error(yaz_url_t p) { return wrbuf_cstr(p->w_error); } static void log_warn(yaz_url_t p) { yaz_log(YLOG_WARN, "yaz_url: %s", wrbuf_cstr(p->w_error)); } Z_HTTP_Response *yaz_url_exec(yaz_url_t p, const char *uri, const char *method, Z_HTTP_Header *user_headers, const char *buf, size_t len) { Z_HTTP_Response *res = 0; int number_of_redirects = 0; odr_reset(p->odr_out); yaz_cookies_reset(p->cookies); wrbuf_rewind(p->w_error); while (1) { void *add; COMSTACK conn = 0; int code; const char *location = 0; char *http_user = 0; char *http_pass = 0; char *uri_lean = 0; int proxy_mode = 0; extract_user_pass(p->odr_out->mem, uri, &uri_lean, &http_user, &http_pass); conn = cs_create_host2(uri_lean, 0, &add, p->proxy, &proxy_mode); if (!conn) { wrbuf_printf(p->w_error, "Can not resolve URL %s", uri); log_warn(p); } else { int ret; Z_GDU *gdu = z_get_HTTP_Request_uri(p->odr_out, uri_lean, 0, proxy_mode); gdu->u.HTTP_Request->method = odr_strdup(p->odr_out, method); yaz_cookies_request(p->cookies, p->odr_out, gdu->u.HTTP_Request); for ( ; user_headers; user_headers = user_headers->next) { /* prefer new Host over user-supplied Host */ if (!strcmp(user_headers->name, "Host")) ; /* prefer user-supplied User-Agent over YAZ' own */ else if (!strcmp(user_headers->name, "User-Agent")) z_HTTP_header_set(p->odr_out, &gdu->u.HTTP_Request->headers, user_headers->name, user_headers->value); else z_HTTP_header_add(p->odr_out, &gdu->u.HTTP_Request->headers, user_headers->name, user_headers->value); } if (http_user && http_pass) z_HTTP_header_add_basic_auth(p->odr_out, &gdu->u.HTTP_Request->headers, http_user, http_pass); res = 0; if (buf && len) { gdu->u.HTTP_Request->content_buf = (char *) buf; gdu->u.HTTP_Request->content_len = len; } if (!z_GDU(p->odr_out, &gdu, 0, 0)) { wrbuf_printf(p->w_error, "Can not encode HTTP request for URL %s", uri); log_warn(p); return 0; } ret = cs_connect(conn, add); if (ret < 0) /* error */ { wrbuf_printf(p->w_error, "Can not connect to URL %s", uri); log_warn(p); } else { char *netbuffer = 0; int netlen = 0; int len_out; char *buf_out = odr_getbuf(p->odr_out, &len_out, 0); int state = 0; /* 0=connect phase, 1=send, 2=recv */ if (p->verbose) fwrite(buf_out, 1, len_out, stdout); if (!strcmp(gdu->u.HTTP_Request->method, "HEAD")) cs_set_head_only(conn, 1); if (ret == 0) state = 1; /* connect complete, so send phase */ while (1) { if (ret == 1) /* incomplete , wait */ { struct yaz_poll_fd yp; enum yaz_poll_mask input_mask = yaz_poll_none; yaz_poll_add(input_mask, yaz_poll_except); if (conn->io_pending & CS_WANT_WRITE) yaz_poll_add(input_mask, yaz_poll_write); if (conn->io_pending & CS_WANT_READ) yaz_poll_add(input_mask, yaz_poll_read); yp.fd = cs_fileno(conn); yp.input_mask = input_mask; ret = yaz_poll(&yp, 1, p->timeout_sec, p->timeout_ns); if (ret == 0) { wrbuf_printf(p->w_error, "timeout URL %s", uri); break; } else if (ret < 0) { wrbuf_printf(p->w_error, "poll error URL %s", uri); break; } } if (state == 0) /* connect phase */ { ret = cs_rcvconnect(conn); if (ret < 0) { wrbuf_printf(p->w_error, "cs_rcvconnect failed for URL %s", uri); log_warn(p); break; } else if (ret == 0) state = 1; } else if (state == 1) /* write request phase */ { ret = cs_put(conn, buf_out, len_out); if (ret < 0) { wrbuf_printf(p->w_error, "cs_put fail for URL %s", uri); log_warn(p); break; } else if (ret == 0) { state = 2; } } else if (state == 2) /* read response phase */ { ret = cs_get(conn, &netbuffer, &netlen); if (ret <= 0) { wrbuf_printf(p->w_error, "cs_get failed for URL %s", uri); log_warn(p); break; } else if (ret > 1) { Z_GDU *gdu; if (p->verbose) fwrite(netbuffer, 1, ret, stdout); odr_setbuf(p->odr_in, netbuffer, ret, 0); if (!z_GDU(p->odr_in, &gdu, 0, 0) || gdu->which != Z_GDU_HTTP_Response) { wrbuf_printf(p->w_error, "HTTP decoding fail for " "URL %s", uri); log_warn(p); } else { res = gdu->u.HTTP_Response; break; } } } } xfree(netbuffer); } cs_close(conn); } if (!res) break; code = res->code; location = z_HTTP_header_lookup(res->headers, "Location"); if (++number_of_redirects <= p->max_redirects && location && (code == 301 || code == 302 || code == 307)) { int host_change = 0; const char *nlocation = yaz_check_location(p->odr_in, uri, location, &host_change); odr_reset(p->odr_out); uri = odr_strdup(p->odr_out, nlocation); } else break; yaz_cookies_response(p->cookies, res); odr_reset(p->odr_in); } return res; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/rpn2cql.c0000644000175000017500000003060213265142510011646 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief Implements RPN to CQL conversion */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include /* For yaz_prox_unit_name() */ static const char *lookup_index_from_string_attr(Z_AttributeList *attributes, Odr_int *numeric_value) { int j; int server_choice = 1; for (j = 0; j < attributes->num_attributes; j++) { Z_AttributeElement *ae = attributes->attributes[j]; if (*ae->attributeType == 1) /* use attribute */ { if (ae->which == Z_AttributeValue_complex) { Z_ComplexAttribute *ca = ae->value.complex; int i; for (i = 0; i < ca->num_list; i++) { Z_StringOrNumeric *son = ca->list[i]; if (son->which == Z_StringOrNumeric_string) return son->u.string; } } else if (ae->which == Z_AttributeValue_numeric) { *numeric_value = *ae->value.numeric; } server_choice = 0; /* not serverChoice because we have use attr */ } } if (server_choice) return "cql.serverChoice"; return 0; } static const char *lookup_relation_index_from_attr(Z_AttributeList *attributes) { int j; for (j = 0; j < attributes->num_attributes; j++) { Z_AttributeElement *ae = attributes->attributes[j]; if (*ae->attributeType == 2) /* relation attribute */ { if (ae->which == Z_AttributeValue_numeric) { /* Only support for numeric relation */ Odr_int *relation = ae->value.numeric; /* map this numeric to representation in CQL */ switch (*relation) { /* Unsure on whether this is the relation attribute constants? */ case Z_ProximityOperator_Prox_lessThan: return "<"; case Z_ProximityOperator_Prox_lessThanOrEqual: return "<="; case Z_ProximityOperator_Prox_equal: return "="; case Z_ProximityOperator_Prox_greaterThanOrEqual: return ">="; case Z_ProximityOperator_Prox_greaterThan: return ">"; case Z_ProximityOperator_Prox_notEqual: return "<>"; case 100: /* phonetic is not supported in CQL */ return 0; case 101: /* stem is not supported in CQL */ return 0; case 102: /* relevance is supported in CQL, but not implemented yet */ return 0; default: /* Invalid relation */ return 0; } } else { /* Can we have a complex relation value? Should we implement something? */ } } } return "="; } static int rpn2cql_attr(cql_transform_t ct, Z_AttributeList *attributes, WRBUF w) { const char *relation = cql_lookup_reverse(ct, "relation.", attributes); const char *index = cql_lookup_reverse(ct, "index.", attributes); const char *structure = cql_lookup_reverse(ct, "structure.", attributes); /* if transform (properties) do not match, we'll fall back to string or report numeric attribute error */ if (!index) { Odr_int use_attribute = -1; index = lookup_index_from_string_attr(attributes, &use_attribute); if (!index) { wrbuf_rewind(w); if (use_attribute != -1) wrbuf_printf(w, ODR_INT_PRINTF, use_attribute); return YAZ_BIB1_UNSUPP_USE_ATTRIBUTE; } } if (!relation) relation = lookup_relation_index_from_attr(attributes); if (!relation) relation = "="; else if (!strcmp(relation, "exact")) relation = "=="; else if (!strcmp(relation, "eq")) relation = "="; else if (!strcmp(relation, "le")) relation = "<="; else if (!strcmp(relation, "ge")) relation = ">="; if (strcmp(index, "cql.serverChoice") || strcmp(relation, "=") || (structure && strcmp(structure, "*"))) { wrbuf_puts(w, index); wrbuf_puts(w, " "); wrbuf_puts(w, relation); wrbuf_puts(w, " "); if (structure && strcmp(structure, "*")) { wrbuf_puts(w, "/"); wrbuf_puts(w, structure); wrbuf_puts(w, " "); } } return 0; } static Odr_int lookup_truncation(Z_AttributeList *attributes) { int j; for (j = 0; j < attributes->num_attributes; j++) { Z_AttributeElement *ae = attributes->attributes[j]; if (*ae->attributeType == 5) /* truncation attribute */ { if (ae->which == Z_AttributeValue_numeric) return *(ae->value.numeric); } } /* No truncation specified */ return 0; } static int rpn2cql_simple(cql_transform_t ct, void (*pr)(const char *buf, void *client_data), void *client_data, Z_Operand *q, WRBUF w) { if (q->which != Z_Operand_APT) { wrbuf_rewind(w); return YAZ_BIB1_RESULT_SET_UNSUPP_AS_A_SEARCH_TERM; } else { Z_AttributesPlusTerm *apt = q->u.attributesPlusTerm; Z_Term *term = apt->term; const char *sterm = 0; size_t lterm = 0; Odr_int trunc = lookup_truncation(apt->attributes); size_t i; int r; wrbuf_rewind(w); r = rpn2cql_attr(ct, apt->attributes, w); if (r) return r; switch (term->which) { case Z_Term_general: lterm = term->u.general->len; sterm = (const char *) term->u.general->buf; break; case Z_Term_numeric: wrbuf_printf(w, ODR_INT_PRINTF, *term->u.numeric); break; case Z_Term_characterString: sterm = term->u.characterString; lterm = strlen(sterm); break; default: wrbuf_rewind(w); wrbuf_printf(w, "%d", term->which); return YAZ_BIB1_TERM_TYPE_UNSUPP; } if (trunc <= 3 || trunc == 100 || trunc == 102 || trunc == 104) { int quote_it = 0; for (i = 0 ; i < lterm; i++) if (strchr(" ()=>which == Z_RPNStructure_simple) return rpn2cql_simple(ct, pr, client_data, q->u.simple, w); else { Z_Operator *op = q->u.complex->roperator; Z_ProximityOperator *prox; int r; if (nested) pr("(", client_data); r = rpn2cql_structure(ct, pr, client_data, q->u.complex->s1, 1, w); if (r) return r; switch (op->which) { case Z_Operator_and: pr(" and ", client_data); break; case Z_Operator_or: pr(" or ", client_data); break; case Z_Operator_and_not: pr(" not ", client_data); break; case Z_Operator_prox: { pr(" prox", client_data); prox = op->u.prox; /* No way to express Odr_bool *exclusion -- ignore it */ if (prox->distance) { char buf[21]; /* Enough for any 64-bit int */ char *op2name[6] = { "<", "<=", "=", ">=", ">","<>" }; pr("/distance", client_data); if (!prox->relationType || *prox->relationType < Z_ProximityOperator_Prox_lessThan || *prox->relationType > Z_ProximityOperator_Prox_notEqual) { wrbuf_rewind(w); return YAZ_BIB1_UNSUPP_SEARCH; } pr(op2name[*prox->relationType-1], client_data); sprintf(buf, "%ld", (long) *prox->distance); pr(buf, client_data); } if (prox->ordered) { if (*prox->ordered) { pr("/ordered", client_data); } else { pr("/unordered", client_data); } } if (prox->which != Z_ProximityOperator_known || *prox->u.known != Z_ProxUnit_word) { pr("/unit=", client_data); pr(yaz_prox_unit_name(prox), client_data); } pr(" ", client_data); break; } } r = rpn2cql_structure(ct, pr, client_data, q->u.complex->s2, 1, w); if (nested) pr(")", client_data); return r; } } int cql_transform_rpn2cql_stream_r(cql_transform_t ct, WRBUF addinfo, void (*pr)(const char *buf, void *client_data), void *client_data, Z_RPNQuery *q) { /* addinfo (w) is used for both addinfo and house-keeping ! */ int r = rpn2cql_structure(ct, pr, client_data, q->RPNStructure, 0, addinfo); if (!r) wrbuf_rewind(addinfo); /* no additional info if no error */ return r; } int cql_transform_rpn2cql_stream(cql_transform_t ct, void (*pr)(const char *buf, void *client_data), void *client_data, Z_RPNQuery *q) { WRBUF w = wrbuf_alloc(); int r = cql_transform_rpn2cql_stream_r(ct, w, pr, client_data, q); if (r) cql_transform_set_error(ct, r, wrbuf_len(w) ? wrbuf_cstr(w) : 0); wrbuf_destroy(w); return r; } int cql_transform_rpn2cql_wrbuf(cql_transform_t ct, WRBUF w, Z_RPNQuery *q) { return cql_transform_rpn2cql_stream(ct, wrbuf_vp_puts, w, q); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/stemmer.c0000644000175000017500000000764013265142510011747 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file stemmer.c * \brief Implements stemmer wrapper */ #if HAVE_CONFIG_H #include #endif #if YAZ_HAVE_ICU #include #include #include #include /* some more string fcns*/ #include /* char names */ enum stemmer_implementation { yaz_no_operation, yaz_snowball }; struct yaz_stemmer_t { int implementation; // Required for cloning. char *locale; char *rule; struct sb_stemmer *sb_stemmer; }; const char* yaz_stemmer_lookup_charenc(const char *charenc, const char *rule) { return "UTF_8"; } const char* yaz_stemmer_lookup_algorithm(const char *locale, const char *rule) { return locale; } yaz_stemmer_p yaz_stemmer_snowball_create(const char *locale, const char *rule, UErrorCode *status) { const char *charenc = yaz_stemmer_lookup_charenc(locale, rule); const char *algorithm = yaz_stemmer_lookup_algorithm(locale,rule); struct sb_stemmer *stemmer = sb_stemmer_new(algorithm, charenc); yaz_stemmer_p yaz_stemmer; if (stemmer == 0) { *status = U_ILLEGAL_ARGUMENT_ERROR; yaz_log(YLOG_FATAL, "yaz_stemmer: Failed to create snowball stemmer from locale %srule %s. Showball: charenc %s algorithm %s ", locale, rule, charenc, algorithm); return 0; } yaz_log(YLOG_DEBUG, "created snowball stemmer: algorithm %s charenc %s ", algorithm, charenc); yaz_stemmer = xmalloc(sizeof(*yaz_stemmer)); yaz_stemmer->implementation = yaz_snowball; yaz_stemmer->locale = xstrdup(locale); yaz_stemmer->rule = xstrdup(rule); yaz_stemmer->sb_stemmer = stemmer; yaz_log(YLOG_DEBUG, "created snowball stemmer: algorithm %s charenc %s ", algorithm, charenc); return yaz_stemmer; } yaz_stemmer_p yaz_stemmer_create(const char *locale, const char *rule, UErrorCode *status) { *status = U_ZERO_ERROR; // dispatch logic required if more algorithms is implemented. yaz_log(YLOG_DEBUG, "create stemmer: locale %s rule %s ", locale, rule); return yaz_stemmer_snowball_create(locale, rule, status); } yaz_stemmer_p yaz_stemmer_clone(yaz_stemmer_p stemmer) { UErrorCode error = U_ZERO_ERROR; if (stemmer == 0) return 0; return yaz_stemmer_create(stemmer->locale, stemmer->rule, &error); } void yaz_stemmer_stem(yaz_stemmer_p stemmer, struct icu_buf_utf16 *dst, struct icu_buf_utf16* src, UErrorCode *status) { switch(stemmer->implementation) { case yaz_snowball: { struct icu_buf_utf8 *utf8_buf = icu_buf_utf8_create(0); icu_utf16_to_utf8(utf8_buf, src, status); if (*status == U_ZERO_ERROR) { const sb_symbol *cstr = (const sb_symbol*) icu_buf_utf8_to_cstr(utf8_buf); const sb_symbol *sb_symbol = sb_stemmer_stem(stemmer->sb_stemmer, cstr, utf8_buf->utf8_len); if (sb_symbol == 0) { icu_buf_utf16_copy(dst, src); } else { const char *cstr2 = (const char *) sb_symbol; icu_utf16_from_utf8_cstr(dst, cstr2 , status); #if 0 yaz_log(YLOG_DEBUG, "stemming %s to %s ", cstr, cstr2); #endif } } icu_buf_utf8_destroy(utf8_buf); return ; break; } case yaz_no_operation: yaz_log(YLOG_DEBUG, "Stemmer (No operation) called"); default: { // Default return the same as given. icu_buf_utf16_copy(dst, src); } } } void yaz_stemmer_destroy(yaz_stemmer_p stemmer) { /* Handle no stemmer correctly */ if (stemmer == 0) return ; switch (stemmer->implementation) { case yaz_snowball: sb_stemmer_delete(stemmer->sb_stemmer); break; } xfree(stemmer->locale); xfree(stemmer->rule); xfree(stemmer); } #endif /* YAZ_HAVE_ICU */ yaz-5.28.0/src/query-charset.c0000644000175000017500000000664513265142510013073 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file query-charset.c \brief converts General Terms in RPN queries */ #if HAVE_CONFIG_H #include #endif #include #include #include #include static int yaz_query_charset_convert_buf(char *buf_in, int len_in, char **buf_out, int *len_out, ODR o, WRBUF wrbuf, yaz_iconv_t cd) { int r = 0; wrbuf_rewind(wrbuf); wrbuf_iconv_write(wrbuf, cd, buf_in, len_in); wrbuf_iconv_reset(wrbuf, cd); *len_out = wrbuf_len(wrbuf); if (*len_out == 0) { /* we assume conversion failed */ *buf_out = buf_in; *len_out = len_in; r = -1; } else { /* conversion OK */ *buf_out = (char*) odr_malloc(o, *len_out); memcpy(*buf_out, wrbuf_buf(wrbuf), *len_out); } return r; } static int yaz_query_charset_convert_term(Z_Term *q, ODR o, WRBUF wrbuf, yaz_iconv_t cd) { int r = 0; switch(q->which) { case Z_Term_general: r = yaz_query_charset_convert_buf( (char *) q->u.general->buf, q->u.general->len, (char **) &q->u.general->buf, &q->u.general->len, o, wrbuf, cd); break; } return r; } static int yaz_query_charset_convert_operand(Z_Operand *q, ODR o, WRBUF wrbuf, yaz_iconv_t cd) { int r = 0; switch(q->which) { case Z_Operand_APT: r = yaz_query_charset_convert_term(q->u.attributesPlusTerm->term, o, wrbuf, cd); break; case Z_Operand_resultSetId: break; case Z_Operand_resultAttr: break; } return r; } static int yaz_query_charset_convert_structure(Z_RPNStructure *q, ODR o, WRBUF wrbuf, yaz_iconv_t cd) { int r = 0; switch(q->which) { case Z_RPNStructure_simple: r = yaz_query_charset_convert_operand(q->u.simple, o, wrbuf, cd); break; case Z_RPNStructure_complex: r = yaz_query_charset_convert_structure(q->u.complex->s1, o, wrbuf, cd); if (r == 0) r = yaz_query_charset_convert_structure( q->u.complex->s2, o, wrbuf, cd); break; } return r; } int yaz_query_charset_convert_rpnquery_check(Z_RPNQuery *q, ODR o, yaz_iconv_t cd) { int r = 0; WRBUF wrbuf = wrbuf_alloc(); r = yaz_query_charset_convert_structure(q->RPNStructure, o, wrbuf, cd); wrbuf_destroy(wrbuf); return r; } void yaz_query_charset_convert_rpnquery(Z_RPNQuery *q, ODR o, yaz_iconv_t cd) { WRBUF wrbuf = wrbuf_alloc(); yaz_query_charset_convert_structure(q->RPNStructure, o, wrbuf, cd); wrbuf_destroy(wrbuf); } void yaz_query_charset_convert_apt(Z_AttributesPlusTerm *apt, ODR o, yaz_iconv_t cd) { WRBUF wrbuf = wrbuf_alloc(); yaz_query_charset_convert_term(apt->term, o, wrbuf, cd); wrbuf_destroy(wrbuf); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-rrf2.c0000644000175000017500000000203413273126163011412 00000000000000/** \file z-rrf2.c \brief ASN.1 Module ResourceReport-Format-Resource-2 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_ResourceReport2(ODR o, Z_ResourceReport2 **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) z_Estimate2, &(*p)->estimates, &(*p)->num_estimates, "estimates") || odr_ok(o)) && odr_implicit_tag(o, z_InternationalString, &(*p)->message, ODR_CONTEXT, 2, 1, "message") && odr_sequence_end(o); } int z_Estimate2(ODR o, Z_Estimate2 **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_StringOrNumeric, &(*p)->type, ODR_CONTEXT, 1, 0, "type") && odr_implicit_tag(o, z_IntUnit, &(*p)->value, ODR_CONTEXT, 2, 0, "value") && odr_sequence_end(o); } yaz-5.28.0/src/cclfind.c0000644000175000017500000011457613265142510011704 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cclfind.c * \brief Implements parsing of a CCL FIND query. * * This source file implements parsing of a CCL Query (ISO8777). * The parser uses predictive parsing, but it does several tokens * of lookahead in the handling of relational operations.. So * it's not really pure. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "cclp.h" /* returns type of current lookahead */ #define KIND (cclp->look_token->kind) /* move one token forward */ #define ADVANCE cclp->look_token = cclp->look_token->next /** * qual_val_type: test for existance of attribute type/value pair. * qa: Attribute array * type: Type of attribute to search for * value: Value of attribute to seach for * return: 1 if found; 0 otherwise. */ static int qual_val_type(ccl_qualifier_t *qa, int type, int value, char **attset) { int i; if (!qa) return 0; for (i = 0; qa[i]; i++) { int got_type = 0; struct ccl_rpn_attr *q = ccl_qual_get_attr(qa[i]); for (; q; q = q->next) { if (q->type == type && q->kind == CCL_RPN_ATTR_NUMERIC) { got_type = 1; if (q->value.numeric == value) { if (attset) *attset = q->set; return 1; } } } if (got_type) return 0; } return 0; } /** * strxcat: concatenate strings. * n: Null-terminated Destination string * src: Source string to be appended (not null-terminated) * len: Length of source string. */ static void strxcat(char *n, const char *src, int len) { while (*n) n++; while (--len >= 0) *n++ = *src++; *n = '\0'; } /** * copy_token_name: Return copy of CCL token name * tp: Pointer to token info. * return: malloc(3) allocated copy of token name. */ static char *copy_token_name(struct ccl_token *tp) { char *str = (char *)xmalloc(tp->len + 1); ccl_assert(str); memcpy(str, tp->name, tp->len); str[tp->len] = '\0'; return str; } /** * mk_node: Create RPN node. * kind: Type of node. * return: pointer to allocated node. */ struct ccl_rpn_node *ccl_rpn_node_create(enum ccl_rpn_kind kind) { struct ccl_rpn_node *p; p = (struct ccl_rpn_node *)xmalloc(sizeof(*p)); ccl_assert(p); p->kind = kind; switch (kind) { case CCL_RPN_TERM: p->u.t.attr_list = 0; p->u.t.term = 0; p->u.t.qual = 0; break; default: break; } return p; } static struct ccl_rpn_node *ccl_rpn_node_mkbool(struct ccl_rpn_node *l, struct ccl_rpn_node *r, enum ccl_rpn_kind op) { if (l && r) { struct ccl_rpn_node *tmp = ccl_rpn_node_create(op); tmp->u.p[0] = l; tmp->u.p[1] = r; tmp->u.p[2] = 0; return tmp; } else if (r) return r; return l; } /** * ccl_rpn_delete: Delete RPN tree. * rpn: Pointer to tree. */ void ccl_rpn_delete(struct ccl_rpn_node *rpn) { struct ccl_rpn_attr *attr, *attr1; if (!rpn) return; switch (rpn->kind) { case CCL_RPN_AND: case CCL_RPN_OR: case CCL_RPN_NOT: ccl_rpn_delete(rpn->u.p[0]); ccl_rpn_delete(rpn->u.p[1]); break; case CCL_RPN_TERM: xfree(rpn->u.t.term); xfree(rpn->u.t.qual); for (attr = rpn->u.t.attr_list; attr; attr = attr1) { attr1 = attr->next; if (attr->kind == CCL_RPN_ATTR_STRING) xfree(attr->value.str); if (attr->set) xfree(attr->set); xfree(attr); } break; case CCL_RPN_SET: xfree(rpn->u.setname); break; case CCL_RPN_PROX: ccl_rpn_delete(rpn->u.p[0]); ccl_rpn_delete(rpn->u.p[1]); ccl_rpn_delete(rpn->u.p[2]); break; } xfree(rpn); } static struct ccl_rpn_node *find_spec(CCL_parser cclp, ccl_qualifier_t *qa); static int is_term_ok(int look, int *list) { for (; *list >= 0; list++) if (look == *list) return 1; return 0; } static struct ccl_rpn_node *search_terms(CCL_parser cclp, ccl_qualifier_t *qa); static struct ccl_rpn_attr *add_attr_node(struct ccl_rpn_node *p, const char *set, int type) { struct ccl_rpn_attr *n = (struct ccl_rpn_attr *) xmalloc(sizeof(*n)); ccl_assert(n); if (set) n->set = xstrdup(set); else n->set = 0; n->type = type; n->next = p->u.t.attr_list; p->u.t.attr_list = n; return n; } /** * add_attr_numeric: Add attribute (type/value) to RPN term node. * p: RPN node of type term. * type: Type of attribute * value: Value of attribute * set: Attribute set name */ void ccl_add_attr_numeric(struct ccl_rpn_node *p, const char *set, int type, int value) { struct ccl_rpn_attr *n = add_attr_node(p, set, type); n->kind = CCL_RPN_ATTR_NUMERIC; n->value.numeric = value; } void ccl_set_attr_numeric(struct ccl_rpn_node *p, const char *set, int type, int value) { struct ccl_rpn_attr *n; for (n = p->u.t.attr_list; n; n = n->next) if (n->type == type) { xfree(n->set); n->set = set ? xstrdup(set) : 0; if (n->kind == CCL_RPN_ATTR_STRING) xfree(n->value.str); n->kind = CCL_RPN_ATTR_NUMERIC; n->value.numeric = value; return; } ccl_add_attr_numeric(p, set, type, value); } void ccl_add_attr_string(struct ccl_rpn_node *p, const char *set, int type, char *value) { struct ccl_rpn_attr *n = add_attr_node(p, set, type); n->kind = CCL_RPN_ATTR_STRING; n->value.str = xstrdup(value); } static size_t cmp_operator(const char **aliases, const char *input) { for (; *aliases; aliases++) { const char *cp = *aliases; size_t i; for (i = 0; *cp && *cp == input[i]; i++, cp++) ; if (*cp == '\0') return i; } return 0; } #define REGEX_CHARS "^[]{}()|.*+?!$" #define CCL_CHARS "#?\\" static int has_ccl_masking(const char *src_str, size_t src_len, const char **truncation_aliases, const char **mask_aliases) { size_t j; int quote_mode = 0; for (j = 0; j < src_len; j++) { size_t op_size; if (j > 0 && src_str[j-1] == '\\') ; else if (src_str[j] == '"') quote_mode = !quote_mode; else if (!quote_mode && (op_size = cmp_operator(truncation_aliases, src_str + j))) return 1; else if (!quote_mode && (op_size = cmp_operator(mask_aliases, src_str + j))) return 1; } return 0; } static int append_term(CCL_parser cclp, const char *src_str, size_t src_len, char *dst_term, int regex_trunc, int z3958_trunc, const char **truncation_aliases, const char **mask_aliases, int is_first, int is_last, int *left_trunc, int *right_trunc) { size_t j; int quote_mode = 0; for (j = 0; j < src_len; j++) { size_t op_size; if (j > 0 && src_str[j-1] == '\\') { if (regex_trunc && strchr(REGEX_CHARS "\\", src_str[j])) strcat(dst_term, "\\"); else if (z3958_trunc && strchr(CCL_CHARS "\\", src_str[j])) strcat(dst_term, "\\"); strxcat(dst_term, src_str + j, 1); } else if (src_str[j] == '"') quote_mode = !quote_mode; else if (!quote_mode && (op_size = cmp_operator(truncation_aliases, src_str + j)) ) { j += (op_size - 1); /* j++ in for loop */ if (regex_trunc) strcat(dst_term, ".*"); else if (z3958_trunc) strcat(dst_term, "?"); else if (is_first && j == 0) *left_trunc = 1; else if (is_last && j == src_len - 1) *right_trunc = 1; else { cclp->error_code = CCL_ERR_TRUNC_NOT_EMBED; return -1; } } else if (!quote_mode && (op_size = cmp_operator(mask_aliases, src_str + j))) { j += (op_size - 1); /* j++ in for loop */ if (regex_trunc) strcat(dst_term, "."); else if (z3958_trunc) strcat(dst_term, "#"); else { cclp->error_code = CCL_ERR_TRUNC_NOT_SINGLE; return -1; } } else if (src_str[j] != '\\') { if (regex_trunc && strchr(REGEX_CHARS, src_str[j])) strcat(dst_term, "\\"); else if (z3958_trunc && strchr(CCL_CHARS, src_str[j])) strcat(dst_term, "\\"); strxcat(dst_term, src_str + j, 1); } } return 0; } static struct ccl_rpn_node *ccl_term_one_use(CCL_parser cclp, struct ccl_token *lookahead0, struct ccl_rpn_attr *attr_use, ccl_qualifier_t *qa, size_t no, int is_phrase, int auto_group) { struct ccl_rpn_node *p; size_t i; int structure_value = -1; int left_trunc = 0; int right_trunc = 0; int regex_trunc = 0; int z3958_trunc = 0; int is_ccl_masked = 0; char *attset; struct ccl_token *lookahead = lookahead0; const char **truncation_aliases; const char *t_default[2]; const char **mask_aliases; const char *m_default[2]; int term_len = 0; truncation_aliases = ccl_qual_search_special(cclp->bibset, "truncation"); if (!truncation_aliases) { truncation_aliases = t_default; t_default[0] = "?"; t_default[1] = 0; } mask_aliases = ccl_qual_search_special(cclp->bibset, "mask"); if (!mask_aliases) { mask_aliases = m_default; m_default[0] = "#"; m_default[1] = 0; } for (i = 0; i < no; i++) { if (has_ccl_masking(lookahead->name, lookahead->len, truncation_aliases, mask_aliases)) is_ccl_masked = 1; term_len += 1 + lookahead->len + lookahead->ws_prefix_len; lookahead = lookahead->next; } lookahead = lookahead0; p = ccl_rpn_node_create(CCL_RPN_TERM); p->u.t.attr_list = NULL; p->u.t.term = NULL; if (qa && qa[0]) { const char *n = ccl_qual_get_name(qa[0]); if (n) p->u.t.qual = xstrdup(n); } /* go through all attributes and add them to the attribute list */ for (i = 0; qa && qa[i]; i++) { struct ccl_rpn_attr *attr; for (attr = ccl_qual_get_attr(qa[i]); attr; attr = attr->next) if (attr->type == 1 && attr_use && attr != attr_use) continue; else { switch (attr->kind) { case CCL_RPN_ATTR_STRING: ccl_add_attr_string(p, attr->set, attr->type, attr->value.str); break; case CCL_RPN_ATTR_NUMERIC: if (attr->value.numeric > 0) { /* deal only with REAL attributes (positive) */ switch (attr->type) { case CCL_BIB1_STR: if (structure_value != -1) continue; structure_value = attr->value.numeric; break; } ccl_add_attr_numeric(p, attr->set, attr->type, attr->value.numeric); } } } } attset = 0; if (structure_value == -1 && ( auto_group || qual_val_type(qa, CCL_BIB1_STR, CCL_BIB1_STR_WP, &attset)) ) { if (!is_phrase) ccl_add_attr_numeric(p, attset, CCL_BIB1_STR, 2); else ccl_add_attr_numeric(p, attset, CCL_BIB1_STR, 1); } if (qual_val_type(qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_REGEX, &attset)) { if (is_ccl_masked) regex_trunc = 1; /* regex trunc (102) allowed */ } else if (qual_val_type(qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_Z3958, &attset)) { if (is_ccl_masked) z3958_trunc = 1; /* Z39.58 trunc (CCL) trunc allowed */ } /* make the RPN token */ p->u.t.term = (char *)xmalloc(term_len * 2 + 2); ccl_assert(p->u.t.term); p->u.t.term[0] = '\0'; for (i = 0; i < no; i++) { const char *src_str = lookahead->name; size_t src_len = lookahead->len; if (p->u.t.term[0] && lookahead->ws_prefix_len) { strxcat(p->u.t.term, lookahead->ws_prefix_buf, lookahead->ws_prefix_len); } if (append_term(cclp, src_str, src_len, p->u.t.term, regex_trunc, z3958_trunc, truncation_aliases, mask_aliases, i == 0, i == no - 1, &left_trunc, &right_trunc)) { ccl_rpn_delete(p); return NULL; } lookahead = lookahead->next; } if (left_trunc && right_trunc) { if (!qual_val_type(qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_BOTH, &attset)) { cclp->error_code = CCL_ERR_TRUNC_NOT_BOTH; ccl_rpn_delete(p); return NULL; } ccl_add_attr_numeric(p, attset, CCL_BIB1_TRU, 3); } else if (right_trunc) { if (!qual_val_type(qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_RIGHT, &attset)) { cclp->error_code = CCL_ERR_TRUNC_NOT_RIGHT; ccl_rpn_delete(p); return NULL; } ccl_add_attr_numeric(p, attset, CCL_BIB1_TRU, 1); } else if (left_trunc) { if (!qual_val_type(qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_LEFT, &attset)) { cclp->error_code = CCL_ERR_TRUNC_NOT_LEFT; ccl_rpn_delete(p); return NULL; } ccl_add_attr_numeric(p, attset, CCL_BIB1_TRU, 2); } else if (regex_trunc) { ccl_add_attr_numeric(p, attset, CCL_BIB1_TRU, 102); } else if (z3958_trunc) { ccl_add_attr_numeric(p, attset, CCL_BIB1_TRU, 104); } else { if (qual_val_type(qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_NONE, &attset)) ccl_add_attr_numeric(p, attset, CCL_BIB1_TRU, 100); } return p; } static struct ccl_rpn_node *ccl_term_multi_use(CCL_parser cclp, struct ccl_token *lookahead0, ccl_qualifier_t *qa, size_t no, int is_phrase, int auto_group) { struct ccl_rpn_node *p = 0; int i; for (i = 0; qa && qa[i]; i++) { struct ccl_rpn_attr *attr; for (attr = ccl_qual_get_attr(qa[i]); attr; attr = attr->next) if (attr->type == 1 && i == 0) { struct ccl_rpn_node *tmp2; tmp2 = ccl_term_one_use(cclp, lookahead0, attr, qa, no, is_phrase, auto_group); if (!tmp2) { ccl_rpn_delete(p); return 0; } p = ccl_rpn_node_mkbool(p, tmp2, CCL_RPN_OR); } } if (!p) p = ccl_term_one_use(cclp, lookahead0, 0 /* attr: no use */, qa, no, is_phrase, auto_group); return p; } static struct ccl_rpn_node *split_recur(CCL_parser cclp, ccl_qualifier_t *qa, struct ccl_token **ar, size_t sz, size_t sub_len) { size_t l; struct ccl_rpn_node *p_top = 0; assert(sz > 0); for (l = 1; l <= sz && l <= sub_len; l++) { struct ccl_rpn_node *p2 = ccl_term_multi_use(cclp, ar[0], qa, l, l > 1, /* auto_group */0); if (!p2) { ccl_rpn_delete(p_top); return 0; } if (sz > l) { struct ccl_rpn_node *p1 = split_recur(cclp, qa, ar + l, sz - l, sub_len); if (!p1) { ccl_rpn_delete(p2); return 0; } p2 = ccl_rpn_node_mkbool(p2, p1, CCL_RPN_AND); } p_top = ccl_rpn_node_mkbool(p_top, p2, CCL_RPN_OR); } assert(p_top); return p_top; } static struct ccl_rpn_node *search_term_split_list(CCL_parser cclp, ccl_qualifier_t *qa, int *term_list, int multi) { struct ccl_rpn_node *p; struct ccl_token **ar; struct ccl_token *lookahead = cclp->look_token; size_t i, sz, sub_len; for (sz = 0; is_term_ok(lookahead->kind, term_list); sz++) lookahead = lookahead->next; if (sz == 0) { cclp->error_code = CCL_ERR_TERM_EXPECTED; return 0; } ar = (struct ccl_token **) xmalloc(sizeof(*lookahead) * sz); lookahead = cclp->look_token; for (i = 0; is_term_ok(lookahead->kind, term_list); i++) { ar[i] = lookahead; lookahead = lookahead->next; } /* choose sub phrase carefully to avoid huge expansions */ if (sz >= 7) sub_len = 1; else if (sz >= 5) sub_len = 2; else sub_len = 3; p = split_recur(cclp, qa, ar, sz, sub_len); xfree(ar); for (i = 0; i < sz; i++) ADVANCE; return p; } /** * search_term: Parse CCL search term. * cclp: CCL Parser * qa: Qualifier attributes already applied. * term_list: tokens we accept as terms in context * multi: whether we accept "multiple" tokens * return: pointer to node(s); NULL on error. */ static struct ccl_rpn_node *search_term_x(CCL_parser cclp, ccl_qualifier_t *qa, int *term_list, int multi) { struct ccl_rpn_node *p_top = 0; struct ccl_token *lookahead = cclp->look_token; int and_list = 0; int auto_group = 0; int or_list = 0; if (qual_val_type(qa, CCL_BIB1_STR, CCL_BIB1_STR_AND_LIST, 0)) and_list = 1; if (qual_val_type(qa, CCL_BIB1_STR, CCL_BIB1_STR_AUTO_GROUP, 0)) auto_group = 1; if (qual_val_type(qa, CCL_BIB1_STR, CCL_BIB1_STR_OR_LIST, 0)) or_list = 1; if (qual_val_type(qa, CCL_BIB1_STR, CCL_BIB1_STR_SPLIT_LIST, 0)) { return search_term_split_list(cclp, qa, term_list, multi); } while (1) { struct ccl_rpn_node *p = 0; size_t no, i; int is_phrase = 0; size_t max = 200; if (and_list || or_list || !multi) max = 1; /* ignore commas when dealing with and-lists .. */ if (and_list && lookahead && lookahead->kind == CCL_TOK_COMMA) { lookahead = lookahead->next; ADVANCE; continue; } for (no = 0; no < max && is_term_ok(lookahead->kind, term_list); no++) { int this_is_phrase = 0; for (i = 0; ilen; i++) if (lookahead->name[i] == ' ') this_is_phrase = 1; if (auto_group) { if (no > 0 && (is_phrase || is_phrase != this_is_phrase)) break; is_phrase = this_is_phrase; } else if (this_is_phrase || no > 0) is_phrase = 1; lookahead = lookahead->next; } if (no == 0) break; /* no more terms . stop . */ p = ccl_term_multi_use(cclp, cclp->look_token, qa, no, is_phrase, auto_group); for (i = 0; i < no; i++) ADVANCE; if (!p) return 0; p_top = ccl_rpn_node_mkbool(p_top, p, or_list ? CCL_RPN_OR : CCL_RPN_AND); if (!multi) break; } if (!p_top) cclp->error_code = CCL_ERR_TERM_EXPECTED; return p_top; } static struct ccl_rpn_node *search_term(CCL_parser cclp, ccl_qualifier_t *qa) { static int list[] = {CCL_TOK_TERM, CCL_TOK_COMMA, -1}; return search_term_x(cclp, qa, list, 0); } static struct ccl_rpn_node *search_terms2(CCL_parser cclp, ccl_qualifier_t *qa) { if (KIND == CCL_TOK_LP) { struct ccl_rpn_node *p; ADVANCE; if (!(p = find_spec(cclp, qa))) return NULL; if (KIND != CCL_TOK_RP) { cclp->error_code = CCL_ERR_RP_EXPECTED; ccl_rpn_delete(p); return NULL; } ADVANCE; return p; } else { static int list[] = { CCL_TOK_TERM, CCL_TOK_COMMA,CCL_TOK_EQ, CCL_TOK_REL, CCL_TOK_SET, -1}; return search_term_x(cclp, qa, list, 1); } } static struct ccl_rpn_node *qualifiers_order(CCL_parser cclp, ccl_qualifier_t *ap, char *attset) { int rel = 0; struct ccl_rpn_node *p; if (cclp->look_token->len == 1) { if (cclp->look_token->name[0] == '<') rel = 1; else if (cclp->look_token->name[0] == '=') rel = 3; else if (cclp->look_token->name[0] == '>') rel = 5; } else if (cclp->look_token->len == 2) { if (!memcmp(cclp->look_token->name, "<=", 2)) rel = 2; else if (!memcmp(cclp->look_token->name, ">=", 2)) rel = 4; else if (!memcmp(cclp->look_token->name, "<>", 2)) rel = 6; } if (!rel) { cclp->error_code = CCL_ERR_BAD_RELATION; return NULL; } ADVANCE; /* skip relation */ if (rel == 3 && qual_val_type(ap, CCL_BIB1_REL, CCL_BIB1_REL_PORDER, 0)) { /* allow - inside term and treat it as range _always_ */ /* relation is =. Extract "embedded" - to separate terms */ if (KIND == CCL_TOK_TERM) { size_t i; int quote_mode = 0; for (i = 0; ilook_token->len; i++) { if (i > 0 && cclp->look_token->name[i] == '\\') ; else if (cclp->look_token->name[i] == '"') quote_mode = !quote_mode; else if (cclp->look_token->name[i] == '-' && !quote_mode) break; } if (cclp->look_token->len > 1 && i == 0) { /* -xx*/ struct ccl_token *ntoken = ccl_token_add(cclp->look_token); ntoken->kind = CCL_TOK_TERM; ntoken->name = cclp->look_token->name + 1; ntoken->len = cclp->look_token->len - 1; cclp->look_token->len = 1; cclp->look_token->name = "-"; } else if (cclp->look_token->len > 1 && i == cclp->look_token->len-1) { /* xx- */ struct ccl_token *ntoken = ccl_token_add(cclp->look_token); ntoken->kind = CCL_TOK_TERM; ntoken->name = "-"; ntoken->len = 1; (cclp->look_token->len)--; } else if (cclp->look_token->len > 2 && i < cclp->look_token->len) { /* xx-yy */ struct ccl_token *ntoken1 = ccl_token_add(cclp->look_token); struct ccl_token *ntoken2 = ccl_token_add(ntoken1); ntoken1->kind = CCL_TOK_TERM; /* generate - */ ntoken1->name = "-"; ntoken1->len = 1; ntoken2->kind = CCL_TOK_TERM; /* generate yy */ ntoken2->name = cclp->look_token->name + (i+1); ntoken2->len = cclp->look_token->len - (i+1); cclp->look_token->len = i; /* adjust xx */ } else if (i == cclp->look_token->len && cclp->look_token->next && cclp->look_token->next->kind == CCL_TOK_TERM && cclp->look_token->next->len > 1 && cclp->look_token->next->name[0] == '-') { /* xx -yy */ /* we _know_ that xx does not have - in it */ struct ccl_token *ntoken = ccl_token_add(cclp->look_token); ntoken->kind = CCL_TOK_TERM; /* generate - */ ntoken->name = "-"; ntoken->len = 1; (ntoken->next->name)++; /* adjust yy */ (ntoken->next->len)--; } } } if (rel == 3 && KIND == CCL_TOK_TERM && cclp->look_token->next && cclp->look_token->next->len == 1 && cclp->look_token->next->name[0] == '-') { struct ccl_rpn_node *p1; if (!(p1 = search_term(cclp, ap))) return NULL; ADVANCE; /* skip '-' */ if (KIND == CCL_TOK_TERM) /* = term - term ? */ { struct ccl_rpn_node *p2; if (!(p2 = search_term(cclp, ap))) { ccl_rpn_delete(p1); return NULL; } p = ccl_rpn_node_create(CCL_RPN_AND); p->u.p[0] = p1; ccl_set_attr_numeric(p1, attset, CCL_BIB1_REL, 4); p->u.p[1] = p2; ccl_set_attr_numeric(p2, attset, CCL_BIB1_REL, 2); return p; } else /* = term - */ { ccl_set_attr_numeric(p1, attset, CCL_BIB1_REL, 4); return p1; } } else if (rel == 3 && cclp->look_token->len == 1 && cclp->look_token->name[0] == '-') /* = - term ? */ { ADVANCE; if (!(p = search_term(cclp, ap))) return NULL; ccl_set_attr_numeric(p, attset, CCL_BIB1_REL, 2); return p; } else { if (!(p = search_terms(cclp, ap))) return NULL; if (rel != 3 || !qual_val_type(ap, CCL_BIB1_REL, CCL_BIB1_REL_OMIT_EQUALS, 0)) ccl_set_attr_numeric(p, attset, CCL_BIB1_REL, rel); return p; } return NULL; } static struct ccl_rpn_node *qualifier_relation(CCL_parser cclp, ccl_qualifier_t *ap) { char *attset; if (qual_val_type(ap, CCL_BIB1_REL, CCL_BIB1_REL_ORDER, &attset) || qual_val_type(ap, CCL_BIB1_REL, CCL_BIB1_REL_PORDER, &attset)) return qualifiers_order(cclp, ap, attset); /* unordered relation */ if (KIND != CCL_TOK_EQ) { cclp->error_code = CCL_ERR_EQ_EXPECTED; return NULL; } ADVANCE; return search_terms(cclp, ap); } /** * qualifier_list: Parse CCL qualifiers and search terms. * cclp: CCL Parser * la: Token pointer to RELATION token. * qa: Qualifier attributes already applied. * return: pointer to node(s); NULL on error. */ static struct ccl_rpn_node *qualifier_list(CCL_parser cclp, struct ccl_token *la, ccl_qualifier_t *qa) { struct ccl_token *lookahead = cclp->look_token; struct ccl_token *look_start = cclp->look_token; ccl_qualifier_t *ap; struct ccl_rpn_node *node = 0; const char **field_str; int no = 0; int seq = 0; int i; int mode_merge = 1; #if 0 if (qa) { cclp->error_code = CCL_ERR_DOUBLE_QUAL; return NULL; } #endif for (lookahead = cclp->look_token; lookahead != la; lookahead=lookahead->next) no++; if (qa) for (i=0; qa[i]; i++) no++; ap = (ccl_qualifier_t *)xmalloc((no ? (no+1) : 2) * sizeof(*ap)); ccl_assert(ap); field_str = ccl_qual_search_special(cclp->bibset, "field"); if (field_str) { if (!strcmp(field_str[0], "or")) mode_merge = 0; else if (!strcmp(field_str[0], "merge")) mode_merge = 1; } if (!mode_merge) { /* consider each field separately and OR */ lookahead = look_start; while (lookahead != la) { ap[1] = 0; seq = 0; while ((ap[0] = ccl_qual_search(cclp, lookahead->name, lookahead->len, seq)) != 0) { struct ccl_rpn_node *node_sub; cclp->look_token = la; node_sub = qualifier_relation(cclp, ap); if (!node_sub) { ccl_rpn_delete(node); xfree(ap); return 0; } node = ccl_rpn_node_mkbool(node, node_sub, CCL_RPN_OR); seq++; } if (seq == 0) { cclp->look_token = lookahead; cclp->error_code = CCL_ERR_UNKNOWN_QUAL; xfree(ap); return NULL; } lookahead = lookahead->next; if (lookahead->kind == CCL_TOK_COMMA) lookahead = lookahead->next; } } else { /* merge attributes from ALL fields - including inherited ones */ while (1) { struct ccl_rpn_node *node_sub; int found = 0; lookahead = look_start; for (i = 0; lookahead != la; i++) { ap[i] = ccl_qual_search(cclp, lookahead->name, lookahead->len, seq); if (ap[i]) found++; if (!ap[i] && seq > 0) ap[i] = ccl_qual_search(cclp, lookahead->name, lookahead->len, 0); if (!ap[i]) { cclp->look_token = lookahead; cclp->error_code = CCL_ERR_UNKNOWN_QUAL; xfree(ap); return NULL; } lookahead = lookahead->next; if (lookahead->kind == CCL_TOK_COMMA) lookahead = lookahead->next; } if (qa) { ccl_qualifier_t *qa0 = qa; while (*qa0) ap[i++] = *qa0++; } ap[i] = NULL; if (!found) break; cclp->look_token = lookahead; node_sub = qualifier_relation(cclp, ap); if (!node_sub) { ccl_rpn_delete(node); break; } node = ccl_rpn_node_mkbool(node, node_sub, CCL_RPN_OR); seq++; } } xfree(ap); return node; } /** * search_terms: Parse CCL search terms - including proximity. * cclp: CCL Parser * qa: Qualifier attributes already applied. * return: pointer to node(s); NULL on error. */ static struct ccl_rpn_node *search_terms(CCL_parser cclp, ccl_qualifier_t *qa) { static int list[] = { CCL_TOK_TERM, CCL_TOK_COMMA,CCL_TOK_EQ, CCL_TOK_REL, CCL_TOK_SET, -1}; struct ccl_rpn_node *p1, *p2, *pn; p1 = search_terms2(cclp, qa); if (!p1) return NULL; while (1) { if (KIND == CCL_TOK_PROX) { struct ccl_rpn_node *p_prox = 0; /* ! word order specified */ /* % word order not specified */ p_prox = ccl_rpn_node_create(CCL_RPN_TERM); p_prox->u.t.term = (char *) xmalloc(1 + cclp->look_token->len); memcpy(p_prox->u.t.term, cclp->look_token->name, cclp->look_token->len); p_prox->u.t.term[cclp->look_token->len] = 0; p_prox->u.t.attr_list = 0; ADVANCE; p2 = search_terms2(cclp, qa); if (!p2) { ccl_rpn_delete(p1); return NULL; } pn = ccl_rpn_node_create(CCL_RPN_PROX); pn->u.p[0] = p1; pn->u.p[1] = p2; pn->u.p[2] = p_prox; p1 = pn; } else if (is_term_ok(KIND, list)) { p2 = search_terms2(cclp, qa); if (!p2) { ccl_rpn_delete(p1); return NULL; } pn = ccl_rpn_node_create(CCL_RPN_PROX); pn->u.p[0] = p1; pn->u.p[1] = p2; pn->u.p[2] = 0; p1 = pn; } else break; } return p1; } /** * search_elements: Parse CCL search elements * cclp: CCL Parser * qa: Qualifier attributes already applied. * return: pointer to node(s); NULL on error. */ static struct ccl_rpn_node *search_elements(CCL_parser cclp, ccl_qualifier_t *qa) { struct ccl_rpn_node *p1; struct ccl_token *lookahead; if (KIND == CCL_TOK_SET) { ADVANCE; if (KIND == CCL_TOK_EQ) ADVANCE; if (KIND != CCL_TOK_TERM) { cclp->error_code = CCL_ERR_SETNAME_EXPECTED; return NULL; } p1 = ccl_rpn_node_create(CCL_RPN_SET); p1->u.setname = copy_token_name(cclp->look_token); ADVANCE; return p1; } lookahead = cclp->look_token; while (lookahead->kind==CCL_TOK_TERM) { lookahead = lookahead->next; if (lookahead->kind == CCL_TOK_REL || lookahead->kind == CCL_TOK_EQ) return qualifier_list(cclp, lookahead, qa); if (lookahead->kind != CCL_TOK_COMMA) break; lookahead = lookahead->next; } if (qa || lookahead->kind == CCL_TOK_LP) return search_terms(cclp, qa); else { ccl_qualifier_t qa[2]; struct ccl_rpn_node *node = 0; int seq; lookahead = cclp->look_token; qa[1] = 0; for(seq = 0; ;seq++) { struct ccl_rpn_node *node_sub; qa[0] = ccl_qual_search(cclp, "term", 4, seq); if (!qa[0]) break; cclp->look_token = lookahead; node_sub = search_terms(cclp, qa); if (!node_sub) { ccl_rpn_delete(node); return 0; } node = ccl_rpn_node_mkbool(node, node_sub, CCL_RPN_OR); } if (!node) node = search_terms(cclp, 0); return node; } } /** * find_spec: Parse CCL find specification * cclp: CCL Parser * qa: Qualifier attributes already applied. * return: pointer to node(s); NULL on error. */ static struct ccl_rpn_node *find_spec(CCL_parser cclp, ccl_qualifier_t *qa) { struct ccl_rpn_node *p1, *p2; if (!(p1 = search_elements(cclp, qa))) return NULL; while (1) { switch (KIND) { case CCL_TOK_AND: ADVANCE; p2 = search_elements(cclp, qa); if (!p2) { ccl_rpn_delete(p1); return NULL; } p1 = ccl_rpn_node_mkbool(p1, p2, CCL_RPN_AND); continue; case CCL_TOK_OR: ADVANCE; p2 = search_elements(cclp, qa); if (!p2) { ccl_rpn_delete(p1); return NULL; } p1 = ccl_rpn_node_mkbool(p1, p2, CCL_RPN_OR); continue; case CCL_TOK_NOT: ADVANCE; p2 = search_elements(cclp, qa); if (!p2) { ccl_rpn_delete(p1); return NULL; } p1 = ccl_rpn_node_mkbool(p1, p2, CCL_RPN_NOT); continue; } break; } return p1; } struct ccl_rpn_node *ccl_parser_find_str(CCL_parser cclp, const char *str) { struct ccl_rpn_node *p; struct ccl_token *list = ccl_parser_tokenize(cclp, str); p = ccl_parser_find_token(cclp, list); ccl_token_del(list); return p; } struct ccl_rpn_node *ccl_parser_find_token(CCL_parser cclp, struct ccl_token *list) { struct ccl_rpn_node *p; cclp->look_token = list; p = find_spec(cclp, NULL); if (p && KIND != CCL_TOK_EOL) { if (KIND == CCL_TOK_RP) cclp->error_code = CCL_ERR_BAD_RP; else cclp->error_code = CCL_ERR_OP_EXPECTED; ccl_rpn_delete(p); p = NULL; } cclp->error_pos = cclp->look_token->name; if (p) cclp->error_code = CCL_ERR_OK; return p; } /** * ccl_find_str: Parse CCL find - string representation * bibset: Bibset to be used for the parsing * str: String to be parsed * error: Pointer to integer. Holds error no. on completion. * pos: Pointer to char position. Holds approximate error position. * return: RPN tree on successful completion; NULL otherwise. */ struct ccl_rpn_node *ccl_find_str(CCL_bibset bibset, const char *str, int *error, int *pos) { CCL_parser cclp = ccl_parser_create(bibset); struct ccl_token *list; struct ccl_rpn_node *p; list = ccl_parser_tokenize(cclp, str); p = ccl_parser_find_token(cclp, list); *error = cclp->error_code; if (*error) *pos = cclp->error_pos - str; ccl_parser_destroy(cclp); ccl_token_del(list); return p; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cqltransform.c0000644000175000017500000007523313265142510013011 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cqltransform.c * \brief Implements CQL transform (CQL to RPN conversion). * * Evaluation order of rules: * * always * relation * structure * position * truncation * index * relationModifier */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include struct cql_prop_entry { char *pattern; char *value; Z_AttributeList attr_list; struct cql_prop_entry *next; }; struct cql_transform_t_ { struct cql_prop_entry *entry; yaz_tok_cfg_t tok_cfg; int error; WRBUF addinfo; NMEM nmem; }; cql_transform_t cql_transform_create(void) { cql_transform_t ct = (cql_transform_t) xmalloc(sizeof(*ct)); ct->tok_cfg = yaz_tok_cfg_create(); ct->error = 0; ct->addinfo = wrbuf_alloc(); ct->entry = 0; ct->nmem = nmem_create(); return ct; } static int cql_transform_parse_tok_line(cql_transform_t ct, const char *pattern, yaz_tok_parse_t tp) { int ae_num = 0; Z_AttributeElement *ae[20]; int ret = 0; /* 0=OK, != 0 FAIL */ int t; WRBUF w = wrbuf_alloc(); t = yaz_tok_move(tp); while (t == YAZ_TOK_STRING && ae_num < 20) { WRBUF type_str = wrbuf_alloc(); WRBUF set_str = 0; Z_AttributeElement *elem = 0; const char *value_str = 0; /* attset type=value OR type=value */ elem = (Z_AttributeElement *) nmem_malloc(ct->nmem, sizeof(*elem)); elem->attributeSet = 0; ae[ae_num] = elem; wrbuf_puts(w, yaz_tok_parse_string(tp)); wrbuf_puts(type_str, yaz_tok_parse_string(tp)); t = yaz_tok_move(tp); if (t == YAZ_TOK_EOF) { wrbuf_destroy(type_str); if (set_str) wrbuf_destroy(set_str); break; } if (t == YAZ_TOK_STRING) { wrbuf_puts(w, " "); wrbuf_puts(w, yaz_tok_parse_string(tp)); set_str = type_str; elem->attributeSet = yaz_string_to_oid_nmem(yaz_oid_std(), CLASS_ATTSET, wrbuf_cstr(set_str), ct->nmem); type_str = wrbuf_alloc(); wrbuf_puts(type_str, yaz_tok_parse_string(tp)); t = yaz_tok_move(tp); } elem->attributeType = nmem_intdup(ct->nmem, 0); if (sscanf(wrbuf_cstr(type_str), ODR_INT_PRINTF, elem->attributeType) != 1) { wrbuf_destroy(type_str); if (set_str) wrbuf_destroy(set_str); yaz_log(YLOG_WARN, "Expected numeric attribute type"); ret = -1; break; } wrbuf_destroy(type_str); if (set_str) wrbuf_destroy(set_str); if (t != '=') { yaz_log(YLOG_WARN, "Expected = after after attribute type"); ret = -1; break; } t = yaz_tok_move(tp); if (t != YAZ_TOK_STRING) /* value */ { yaz_log(YLOG_WARN, "Missing attribute value"); ret = -1; break; } value_str = yaz_tok_parse_string(tp); if (yaz_isdigit(*value_str)) { elem->which = Z_AttributeValue_numeric; elem->value.numeric = nmem_intdup(ct->nmem, atoi(value_str)); } else { Z_ComplexAttribute *ca = (Z_ComplexAttribute *) nmem_malloc(ct->nmem, sizeof(*ca)); elem->which = Z_AttributeValue_complex; elem->value.complex = ca; ca->num_list = 1; ca->list = (Z_StringOrNumeric **) nmem_malloc(ct->nmem, sizeof(Z_StringOrNumeric *)); ca->list[0] = (Z_StringOrNumeric *) nmem_malloc(ct->nmem, sizeof(Z_StringOrNumeric)); ca->list[0]->which = Z_StringOrNumeric_string; ca->list[0]->u.string = nmem_strdup(ct->nmem, value_str); ca->num_semanticAction = 0; ca->semanticAction = 0; } wrbuf_puts(w, "="); wrbuf_puts(w, yaz_tok_parse_string(tp)); t = yaz_tok_move(tp); wrbuf_puts(w, " "); ae_num++; } if (ret == 0) /* OK? */ { struct cql_prop_entry **pp = &ct->entry; while (*pp) pp = &(*pp)->next; *pp = (struct cql_prop_entry *) xmalloc(sizeof(**pp)); (*pp)->pattern = xstrdup(pattern); (*pp)->value = xstrdup(wrbuf_cstr(w)); (*pp)->attr_list.num_attributes = ae_num; if (ae_num == 0) (*pp)->attr_list.attributes = 0; else { (*pp)->attr_list.attributes = (Z_AttributeElement **) nmem_malloc(ct->nmem, ae_num * sizeof(Z_AttributeElement *)); memcpy((*pp)->attr_list.attributes, ae, ae_num * sizeof(Z_AttributeElement *)); } (*pp)->next = 0; if (0) { ODR pr = odr_createmem(ODR_PRINT); Z_AttributeList *alp = &(*pp)->attr_list; odr_setprint_noclose(pr, yaz_log_file()); z_AttributeList(pr, &alp, 0, 0); odr_destroy(pr); } } wrbuf_destroy(w); return ret; } int cql_transform_define_pattern(cql_transform_t ct, const char *pattern, const char *value) { int r; yaz_tok_parse_t tp = yaz_tok_parse_buf(ct->tok_cfg, value); yaz_tok_cfg_single_tokens(ct->tok_cfg, "="); r = cql_transform_parse_tok_line(ct, pattern, tp); yaz_tok_parse_destroy(tp); return r; } cql_transform_t cql_transform_open_FILE(FILE *f) { cql_transform_t ct = cql_transform_create(); char line[1024]; yaz_tok_cfg_single_tokens(ct->tok_cfg, "="); while (fgets(line, sizeof(line)-1, f)) { yaz_tok_parse_t tp = yaz_tok_parse_buf(ct->tok_cfg, line); int t; t = yaz_tok_move(tp); if (t == YAZ_TOK_STRING) { char * pattern = xstrdup(yaz_tok_parse_string(tp)); t = yaz_tok_move(tp); if (t != '=') { yaz_tok_parse_destroy(tp); cql_transform_close(ct); return 0; } if (cql_transform_parse_tok_line(ct, pattern, tp)) { yaz_tok_parse_destroy(tp); cql_transform_close(ct); return 0; } xfree(pattern); } else if (t != YAZ_TOK_EOF) { yaz_tok_parse_destroy(tp); cql_transform_close(ct); return 0; } yaz_tok_parse_destroy(tp); } return ct; } void cql_transform_close(cql_transform_t ct) { struct cql_prop_entry *pe; if (!ct) return; pe = ct->entry; while (pe) { struct cql_prop_entry *pe_next = pe->next; xfree(pe->pattern); xfree(pe->value); xfree(pe); pe = pe_next; } wrbuf_destroy(ct->addinfo); yaz_tok_cfg_destroy(ct->tok_cfg); nmem_destroy(ct->nmem); xfree(ct); } cql_transform_t cql_transform_open_fname(const char *fname) { cql_transform_t ct; FILE *f = fopen(fname, "r"); if (!f) return 0; ct = cql_transform_open_FILE(f); fclose(f); return ct; } #if 0 struct Z_AttributeElement { Z_AttributeSetId *attributeSet; /* OPT */ int *attributeType; int which; union { int *numeric; Z_ComplexAttribute *complex; #define Z_AttributeValue_numeric 1 #define Z_AttributeValue_complex 2 } value; }; #endif static int compare_attr(Z_AttributeElement *a, Z_AttributeElement *b) { ODR odr_a = odr_createmem(ODR_ENCODE); ODR odr_b = odr_createmem(ODR_ENCODE); int len_a, len_b; char *buf_a, *buf_b; int ret; z_AttributeElement(odr_a, &a, 0, 0); z_AttributeElement(odr_b, &b, 0, 0); buf_a = odr_getbuf(odr_a, &len_a, 0); buf_b = odr_getbuf(odr_b, &len_b, 0); ret = yaz_memcmp(buf_a, buf_b, len_a, len_b); odr_destroy(odr_a); odr_destroy(odr_b); return ret; } const char *cql_lookup_reverse(cql_transform_t ct, const char *category, Z_AttributeList *attributes) { struct cql_prop_entry *e; size_t clen = strlen(category); for (e = ct->entry; e; e = e->next) { if (!strncmp(e->pattern, category, clen)) { /* category matches.. See if attributes in pattern value are all listed in actual attributes */ int i; for (i = 0; i < e->attr_list.num_attributes; i++) { /* entry attribute */ Z_AttributeElement *e_ae = e->attr_list.attributes[i]; int j; for (j = 0; j < attributes->num_attributes; j++) { /* actual attribute */ Z_AttributeElement a_ae = *attributes->attributes[j]; if (!compare_attr(e_ae, &a_ae)) break; if (a_ae.attributeSet && &e_ae->attributeSet && !oid_oidcmp(a_ae.attributeSet, yaz_oid_attset_bib_1)) a_ae.attributeSet = 0; if (!compare_attr(e_ae, &a_ae)) break; } if (j == attributes->num_attributes) break; /* i was not found at all.. try next pattern */ } if (i == e->attr_list.num_attributes) return e->pattern + clen; } } return 0; } static const char *cql_lookup_property(cql_transform_t ct, const char *pat1, const char *pat2, const char *pat3) { char pattern[120]; struct cql_prop_entry *e; if (pat1 && pat2 && pat3) sprintf(pattern, "%.39s.%.39s.%.39s", pat1, pat2, pat3); else if (pat1 && pat2) sprintf(pattern, "%.39s.%.39s", pat1, pat2); else if (pat1 && pat3) sprintf(pattern, "%.39s.%.39s", pat1, pat3); else if (pat1) sprintf(pattern, "%.39s", pat1); else return 0; for (e = ct->entry; e; e = e->next) { if (!cql_strcmp(e->pattern, pattern)) return e->value; } return 0; } int cql_pr_attr_uri(cql_transform_t ct, WRBUF addinfo, const char *category, const char *uri, const char *val, const char *default_val, void (*pr)(const char *buf, void *client_data), void *client_data, int errcode) { const char *res = 0; const char *eval = val ? val : default_val; const char *prefix = 0; if (uri) { struct cql_prop_entry *e; for (e = ct->entry; e; e = e->next) if (!memcmp(e->pattern, "set.", 4) && e->value && !strcmp(e->value, uri)) { prefix = e->pattern+4; break; } /* must have a prefix now - if not it's an error */ } if (!uri || prefix) { if (!res) res = cql_lookup_property(ct, category, prefix, eval); /* we have some aliases for some relations unfortunately.. */ if (!res && !prefix && !strcmp(category, "relation")) { if (!strcmp(val, "==")) res = cql_lookup_property(ct, category, prefix, "exact"); if (!strcmp(val, "=")) res = cql_lookup_property(ct, category, prefix, "eq"); if (!strcmp(val, "<=")) res = cql_lookup_property(ct, category, prefix, "le"); if (!strcmp(val, ">=")) res = cql_lookup_property(ct, category, prefix, "ge"); } if (!res) res = cql_lookup_property(ct, category, prefix, "*"); } if (res) { char buf[64]; const char *cp0 = res, *cp1; while ((cp1 = strchr(cp0, '='))) { int i; while (*cp1 && *cp1 != ' ') cp1++; if (cp1 - cp0 >= (ptrdiff_t) sizeof(buf)) break; memcpy(buf, cp0, cp1 - cp0); buf[cp1-cp0] = 0; (*pr)("@attr ", client_data); for (i = 0; buf[i]; i++) { if (buf[i] == '*') (*pr)(eval, client_data); else { char tmp[2]; tmp[0] = buf[i]; tmp[1] = '\0'; (*pr)(tmp, client_data); } } (*pr)(" ", client_data); cp0 = cp1; while (*cp0 == ' ') cp0++; } return 0; } /* error ... */ if (errcode == 0) return 1; /* signal error, but do not set addinfo */ if (val) wrbuf_puts(addinfo, val); return errcode; } int cql_pr_attr(cql_transform_t ct, WRBUF addinfo, const char *category, const char *val, const char *default_val, void (*pr)(const char *buf, void *client_data), void *client_data, int errcode) { return cql_pr_attr_uri(ct, addinfo, category, 0 /* uri */, val, default_val, pr, client_data, errcode); } static void cql_pr_int(int val, void (*pr)(const char *buf, void *client_data), void *client_data) { char buf[21]; /* enough characters to 2^64 */ sprintf(buf, "%d", val); (*pr)(buf, client_data); (*pr)(" ", client_data); } static int cql_pr_prox(cql_transform_t ct, struct cql_node *mods, WRBUF addinfo, void (*pr)(const char *buf, void *client_data), void *client_data) { int exclusion = 0; int distance = -1; int ordered = 0; int proxrel = 2; /* less than or equal */ int unit = 2; /* word */ while (mods) { const char *name = mods->u.st.index; const char *term = mods->u.st.term; const char *relation = mods->u.st.relation; if (!strcmp(name, "distance")) { distance = strtol(term, (char**) 0, 0); if (!strcmp(relation, "=")) proxrel = 3; else if (!strcmp(relation, ">")) proxrel = 5; else if (!strcmp(relation, "<")) proxrel = 1; else if (!strcmp(relation, ">=")) proxrel = 4; else if (!strcmp(relation, "<=")) proxrel = 2; else if (!strcmp(relation, "<>")) proxrel = 6; else { wrbuf_puts(addinfo, relation); return YAZ_SRW_UNSUPP_PROX_RELATION; } } else if (!strcmp(name, "ordered")) ordered = 1; else if (!strcmp(name, "unordered")) ordered = 0; else if (!strcmp(name, "unit")) { unit = z_str_to_ProxUnit(term); if (unit == 0) { wrbuf_puts(addinfo, term); return YAZ_SRW_UNSUPP_PROX_UNIT; } } else { wrbuf_puts(addinfo, name); return YAZ_SRW_UNSUPP_BOOLEAN_MODIFIER; } mods = mods->u.st.modifiers; } if (distance == -1) distance = (unit == 2) ? 1 : 0; cql_pr_int(exclusion, pr, client_data); cql_pr_int(distance, pr, client_data); cql_pr_int(ordered, pr, client_data); cql_pr_int(proxrel, pr, client_data); (*pr)("k ", client_data); cql_pr_int(unit, pr, client_data); return 0; } /* ### checks for CQL relation-name rather than Type-1 attribute */ static int has_modifier(struct cql_node *cn, const char *name) { struct cql_node *mod; for (mod = cn->u.st.modifiers; mod != 0; mod = mod->u.st.modifiers) { if (!mod->u.st.term && !strcmp(mod->u.st.index, name)) return 1; } return 0; } static int emit_term(cql_transform_t ct, struct cql_node *cn, WRBUF addinfo, const char *term, int length, void (*pr)(const char *buf, void *client_data), void *client_data) { int i, r; const char *ns = cn->u.st.index_uri; int z3958_mode = 0; int process_term = 1; if (has_modifier(cn, "regexp")) process_term = 0; else if (has_modifier(cn, "unmasked")) process_term = 0; else if (cql_lookup_property(ct, "truncation", 0, "cql")) { process_term = 0; r = cql_pr_attr(ct, addinfo, "truncation", "cql", 0, pr, client_data, YAZ_SRW_MASKING_CHAR_UNSUPP); if (r) return r; } assert(cn->which == CQL_NODE_ST); if (process_term) { /* convert term via truncation.things */ unsigned anchor = 0; unsigned trunc = 0; for (i = 0; i < length; i++) { if (term[i] == '\\' && i < length - 1) i++; else { switch (term[i]) { case '^': if (i == 0) anchor |= 1; else if (i == length - 1) anchor |= 2; break; case '*': if (i == 0) trunc |= 1; else if (i == length - 1) trunc |= 2; else z3958_mode = 1; break; case '?': z3958_mode = 1; break; } } } if (anchor == 3) { r = cql_pr_attr(ct, addinfo, "position", "firstAndLast", 0, pr, client_data, YAZ_SRW_ANCHORING_CHAR_IN_UNSUPP_POSITION); if (r) return r; term++; length -= 2; } else if (anchor == 1) { r = cql_pr_attr(ct, addinfo, "position", "first", 0, pr, client_data, YAZ_SRW_ANCHORING_CHAR_IN_UNSUPP_POSITION); if (r) return r; term++; length--; } else if (anchor == 2) { r = cql_pr_attr(ct, addinfo, "position", "last", 0, pr, client_data, YAZ_SRW_ANCHORING_CHAR_IN_UNSUPP_POSITION); if (r) return r; length--; } else { r = cql_pr_attr(ct, addinfo, "position", "any", 0, pr, client_data, YAZ_SRW_ANCHORING_CHAR_IN_UNSUPP_POSITION); if (r) return r; } if (z3958_mode == 0) { if (trunc == 3 && !cql_pr_attr(ct, addinfo, "truncation", "both", 0, pr, client_data, 0)) { term++; length -= 2; } else if (trunc == 1 && !cql_pr_attr(ct, addinfo, "truncation", "left", 0, pr, client_data, 0)) { term++; length--; } else if (trunc == 2 && !cql_pr_attr(ct, addinfo, "truncation", "right", 0, pr, client_data, 0)) { length--; } else if (trunc) z3958_mode = 1; else cql_pr_attr(ct, addinfo, "truncation", "none", 0, pr, client_data, 0); } if (z3958_mode) { r = cql_pr_attr(ct, addinfo, "truncation", "z3958", 0, pr, client_data, YAZ_SRW_MASKING_CHAR_UNSUPP); if (r) return r; } } if (ns) { r = cql_pr_attr_uri(ct, addinfo, "index", ns, cn->u.st.index, "serverChoice", pr, client_data, YAZ_SRW_UNSUPP_INDEX); if (r) return r; } if (cn->u.st.modifiers) { struct cql_node *mod = cn->u.st.modifiers; for (; mod; mod = mod->u.st.modifiers) { if (!mod->u.st.term) { r = cql_pr_attr(ct, addinfo, "relationModifier", mod->u.st.index, 0, pr, client_data, YAZ_SRW_UNSUPP_RELATION_MODIFIER); if (r) return r; } } } (*pr)("\"", client_data); if (process_term) for (i = 0; i < length; i++) { char x[2]; /* temp buffer */ if (term[i] == '\\' && i < length - 1) { i++; if (strchr("\"\\", term[i])) pr("\\", client_data); if (z3958_mode && strchr("#?", term[i])) pr("\\\\", client_data); /* double \\ to survive PQF parse */ x[0] = term[i]; x[1] = '\0'; pr(x, client_data); } else if (z3958_mode && term[i] == '*') { pr("?", client_data); if (i < length - 1 && yaz_isdigit(term[i+1])) pr("\\\\", client_data); /* dbl \\ to survive PQF parse */ } else if (z3958_mode && term[i] == '?') { pr("#", client_data); } else { if (term[i] == '\"') pr("\\", client_data); if (z3958_mode && strchr("#?", term[i])) pr("\\\\", client_data); /* dbl \\ to survive PQF parse */ x[0] = term[i]; x[1] = '\0'; pr(x, client_data); } } else { for (i = 0; i < length; i++) { char x[2]; x[0] = term[i]; x[1] = '\0'; pr(x, client_data); } } (*pr)("\" ", client_data); return 0; } static int emit_terms(cql_transform_t ct, struct cql_node *cn, WRBUF addinfo, void (*pr)(const char *buf, void *client_data), void *client_data, const char *op) { struct cql_node *ne = cn->u.st.extra_terms; int r; if (ne) { (*pr)("@", client_data); (*pr)(op, client_data); (*pr)(" ", client_data); } r = emit_term(ct, cn, addinfo, cn->u.st.term, strlen(cn->u.st.term), pr, client_data); for (; !r && ne; ne = ne->u.st.extra_terms) { if (ne->u.st.extra_terms) { (*pr)("@", client_data); (*pr)(op, client_data); (*pr)(" ", client_data); } r = emit_term(ct, cn, addinfo, ne->u.st.term, strlen(ne->u.st.term), pr, client_data); } return r; } static int emit_wordlist(cql_transform_t ct, struct cql_node *cn, WRBUF addinfo, void (*pr)(const char *buf, void *client_data), void *client_data, const char *op) { int r = 0; const char *cp0 = cn->u.st.term; const char *cp1; const char *last_term = 0; int last_length = 0; while (!r && cp0) { while (*cp0 == ' ') cp0++; cp1 = strchr(cp0, ' '); if (last_term) { (*pr)("@", client_data); (*pr)(op, client_data); (*pr)(" ", client_data); r = emit_term(ct, cn, addinfo, last_term, last_length, pr, client_data); } last_term = cp0; if (cp1) last_length = cp1 - cp0; else last_length = strlen(cp0); cp0 = cp1; } if (!r && last_term) r = emit_term(ct, cn, addinfo, last_term, last_length, pr, client_data); return r; } static int emit_node(cql_transform_t ct, struct cql_node *cn, WRBUF addinfo, void (*pr)(const char *buf, void *client_data), void *client_data) { const char *ns; int r = 0; struct cql_node *mods; if (!cn) return 0; switch (cn->which) { case CQL_NODE_ST: ns = cn->u.st.index_uri; if (ns) { if (!strcmp(ns, cql_uri()) && cn->u.st.index && !cql_strcmp(cn->u.st.index, "resultSet")) { (*pr)("@set \"", client_data); (*pr)(cn->u.st.term, client_data); (*pr)("\" ", client_data); return 0; } } else { return YAZ_SRW_UNSUPP_CONTEXT_SET; } if (cn->u.st.modifiers) { struct cql_node *mod = cn->u.st.modifiers; for (; mod; mod = mod->u.st.modifiers) { if (mod->u.st.term) /* only modifiers with name+value */ { /* only relation = supported at the moment */ if (mod->u.st.relation && strcmp(mod->u.st.relation, "=")) { wrbuf_puts(addinfo, mod->u.st.relation); return YAZ_SRW_UNSUPP_RELATION; } pr("@prox 0 0 0 0 k 8 ", client_data); } } } cql_pr_attr(ct, addinfo, "always", 0, 0, pr, client_data, 0); r = cql_pr_attr(ct, addinfo, "relation", cn->u.st.relation, 0, pr, client_data, YAZ_SRW_UNSUPP_RELATION); if (r) return r; r = cql_pr_attr(ct, addinfo, "structure", cn->u.st.relation, 0, pr, client_data, YAZ_SRW_UNSUPP_COMBI_OF_RELATION_AND_TERM); if (r) return r; if (cn->u.st.relation && !cql_strcmp(cn->u.st.relation, "all")) r = emit_wordlist(ct, cn, addinfo, pr, client_data, "and"); else if (cn->u.st.relation && !cql_strcmp(cn->u.st.relation, "any")) r = emit_wordlist(ct, cn, addinfo, pr, client_data, "or"); else r = emit_terms(ct, cn, addinfo, pr, client_data, "and"); if (cn->u.st.modifiers) { struct cql_node *mod = cn->u.st.modifiers; for (; mod; mod = mod->u.st.modifiers) { if (mod->u.st.term) { r = cql_pr_attr_uri(ct, addinfo, "index", mod->u.st.index_uri, mod->u.st.index, "serverChoice", pr, client_data, YAZ_SRW_UNSUPP_INDEX); if (r) return r; pr(mod->u.st.term, client_data); pr(" ", client_data); } } } break; case CQL_NODE_BOOL: (*pr)("@", client_data); (*pr)(cn->u.boolean.value, client_data); (*pr)(" ", client_data); mods = cn->u.boolean.modifiers; if (!strcmp(cn->u.boolean.value, "prox")) { r = cql_pr_prox(ct, mods, addinfo, pr, client_data); if (r) return r; } else if (mods) { /* Boolean modifiers other than on proximity not supported */ wrbuf_puts(addinfo, mods->u.st.index); return YAZ_SRW_UNSUPP_BOOLEAN_MODIFIER; } r = emit_node(ct, cn->u.boolean.left, addinfo, pr, client_data); if (r) return r; r = emit_node(ct, cn->u.boolean.right, addinfo, pr, client_data); if (r) return r; break; case CQL_NODE_SORT: r = emit_node(ct, cn->u.sort.search, addinfo, pr, client_data); break; default: fprintf(stderr, "Fatal: impossible CQL node-type %d\n", cn->which); abort(); } return r; } int cql_transform_r(cql_transform_t ct, struct cql_node *cn, WRBUF addinfo, void (*pr)(const char *buf, void *client_data), void *client_data) { struct cql_prop_entry *e; NMEM nmem = nmem_create(); int r; for (e = ct->entry; e ; e = e->next) { if (!cql_strncmp(e->pattern, "set.", 4)) cql_apply_prefix(nmem, cn, e->pattern+4, e->value); else if (!cql_strcmp(e->pattern, "set")) cql_apply_prefix(nmem, cn, 0, e->value); } r = emit_node(ct, cn, addinfo, pr, client_data); nmem_destroy(nmem); return r; } int cql_transform(cql_transform_t ct, struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data) { WRBUF addinfo = wrbuf_alloc(); int r = cql_transform_r(ct, cn, addinfo, pr, client_data); cql_transform_set_error(ct, r, wrbuf_cstr(addinfo)); wrbuf_destroy(addinfo); return r; } int cql_transform_FILE(cql_transform_t ct, struct cql_node *cn, FILE *f) { return cql_transform(ct, cn, cql_fputs, f); } int cql_transform_buf(cql_transform_t ct, struct cql_node *cn, char *out, int max) { struct cql_buf_write_info info; int r; info.off = 0; info.max = max; info.buf = out; r = cql_transform(ct, cn, cql_buf_write_handler, &info); if (info.off < 0) { /* Attempt to write past end of buffer. For some reason, this SRW diagnostic is deprecated, but it's so perfect for our purposes that it would be stupid not to use it. */ char numbuf[30]; sprintf(numbuf, "%ld", (long) info.max); cql_transform_set_error(ct, YAZ_SRW_TOO_MANY_CHARS_IN_QUERY, numbuf); return -1; } if (info.off >= 0) info.buf[info.off] = '\0'; return r; } int cql_transform_error(cql_transform_t ct, const char **addinfo) { *addinfo = wrbuf_len(ct->addinfo) ? wrbuf_cstr(ct->addinfo) : 0; return ct->error; } void cql_transform_set_error(cql_transform_t ct, int error, const char *addinfo) { wrbuf_rewind(ct->addinfo); if (addinfo) wrbuf_puts(ct->addinfo, addinfo); ct->error = error; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zget.c0000644000175000017500000004541013265142510011241 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zget.c * \brief Implements Z39.50 package creator utilities */ #if HAVE_CONFIG_H #include #endif #include #include static Z_InitRequest *zget_InitRequest(ODR o) { Z_InitRequest *r = (Z_InitRequest *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->options = (Odr_bitmask *)odr_malloc(o, sizeof(*r->options)); ODR_MASK_ZERO(r->options); r->protocolVersion = (Odr_bitmask *) odr_malloc(o, sizeof(*r->protocolVersion)); ODR_MASK_SET(r->options, Z_Options_search); ODR_MASK_SET(r->options, Z_Options_present); ODR_MASK_ZERO(r->protocolVersion); ODR_MASK_SET(r->protocolVersion, Z_ProtocolVersion_1); ODR_MASK_SET(r->protocolVersion, Z_ProtocolVersion_2); r->preferredMessageSize = odr_intdup(o, 1024*1024); r->maximumRecordSize = odr_intdup(o, 1024*1024); r->idAuthentication = 0; r->implementationId = "81"; r->implementationName = "YAZ"; r->implementationVersion = YAZ_VERSION #ifdef YAZ_VERSION_SHA1 " " YAZ_VERSION_SHA1 #endif ; r->userInformationField = 0; r->otherInfo = 0; return r; } static Z_InitResponse *zget_InitResponse(ODR o) { Z_InitResponse *r = (Z_InitResponse *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->options = (Odr_bitmask *)odr_malloc(o, sizeof(*r->options)); ODR_MASK_ZERO(r->options); r->protocolVersion = (Odr_bitmask *)odr_malloc(o, sizeof(*r->protocolVersion)); ODR_MASK_ZERO(r->protocolVersion); r->preferredMessageSize = odr_intdup(o, 30*1024); r->maximumRecordSize = odr_intdup(o, 30*1024); r->result = odr_booldup(o, 1); r->implementationId = "81"; r->implementationName = "YAZ"; r->implementationVersion = YAZ_VERSION #ifdef YAZ_VERSION_SHA1 " " YAZ_VERSION_SHA1 #endif ; r->userInformationField = 0; r->otherInfo = 0; return r; } static Z_SearchRequest *zget_SearchRequest(ODR o) { Z_SearchRequest *r = (Z_SearchRequest *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->smallSetUpperBound = odr_intdup(o, 0); r->largeSetLowerBound = odr_intdup(o, 1); r->mediumSetPresentNumber = odr_intdup(o, 0); r->replaceIndicator = odr_booldup(o, 1); r->resultSetName = "default"; r->num_databaseNames = 0; r->databaseNames = 0; r->smallSetElementSetNames = 0; r->mediumSetElementSetNames = 0; r->preferredRecordSyntax = 0; r->query = 0; r->additionalSearchInfo = 0; r->otherInfo = 0; return r; } static Z_SearchResponse *zget_SearchResponse(ODR o) { Z_SearchResponse *r = (Z_SearchResponse *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->resultCount = odr_intdup(o, 0); r->numberOfRecordsReturned = odr_intdup(o, 0); r->nextResultSetPosition = odr_intdup(o, 0); r->searchStatus = odr_booldup(o, 1); r->resultSetStatus = 0; r->presentStatus = 0; r->records = 0; r->additionalSearchInfo = 0; r->otherInfo = 0; return r; } static Z_PresentRequest *zget_PresentRequest(ODR o) { Z_PresentRequest *r = (Z_PresentRequest *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->resultSetId = "default"; r->resultSetStartPoint = odr_intdup(o, 1); r->numberOfRecordsRequested = odr_intdup(o, 10); r->num_ranges = 0; r->additionalRanges = 0; r->recordComposition = 0; r->preferredRecordSyntax = 0; r->maxSegmentCount = 0; r->maxRecordSize = 0; r->maxSegmentSize = 0; r->otherInfo = 0; return r; } static Z_PresentResponse *zget_PresentResponse(ODR o) { Z_PresentResponse *r = (Z_PresentResponse *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->numberOfRecordsReturned = odr_intdup(o, 0); r->nextResultSetPosition = odr_intdup(o, 0); r->presentStatus = odr_intdup(o, Z_PresentStatus_success); r->records = 0; r->otherInfo = 0; return r; } static Z_DeleteResultSetRequest *zget_DeleteResultSetRequest(ODR o) { Z_DeleteResultSetRequest *r = (Z_DeleteResultSetRequest *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->deleteFunction = odr_intdup(o, Z_DeleteResultSetRequest_list); r->num_resultSetList = 0; r->resultSetList = 0; r->otherInfo = 0; return r; } static Z_DeleteResultSetResponse *zget_DeleteResultSetResponse(ODR o) { Z_DeleteResultSetResponse *r = (Z_DeleteResultSetResponse *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->deleteOperationStatus = odr_intdup(o, Z_DeleteStatus_success); r->deleteListStatuses = 0; r->numberNotDeleted = 0; r->bulkStatuses = 0; r->deleteMessage = 0; r->otherInfo = 0; return r; } static Z_ScanRequest *zget_ScanRequest(ODR o) { Z_ScanRequest *r = (Z_ScanRequest *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->num_databaseNames = 0; r->databaseNames = 0; r->attributeSet = 0; r->termListAndStartPoint = 0; r->stepSize = 0; r->numberOfTermsRequested = odr_intdup(o, 20); r->preferredPositionInResponse = 0; r->otherInfo = 0; return r; } static Z_ScanResponse *zget_ScanResponse(ODR o) { Z_ScanResponse *r = (Z_ScanResponse *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->stepSize = 0; r->scanStatus = odr_intdup(o, Z_Scan_success); r->numberOfEntriesReturned = odr_intdup(o, 0); r->positionOfTerm =0; r->entries = 0; r->attributeSet = 0; r->otherInfo = 0; return r; } static Z_TriggerResourceControlRequest *zget_TriggerResourceControlRequest(ODR o) { Z_TriggerResourceControlRequest *r = (Z_TriggerResourceControlRequest *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->requestedAction = odr_intdup(o, Z_TriggerResourceControlRequest_resourceReport); r->prefResourceReportFormat = 0; r->resultSetWanted = 0; r->otherInfo = 0; return r; } static Z_ResourceControlRequest *zget_ResourceControlRequest(ODR o) { Z_ResourceControlRequest *r = (Z_ResourceControlRequest *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->suspendedFlag = 0; r->resourceReport = 0; r->partialResultsAvailable = 0; r->responseRequired = odr_booldup(o, 0); r->triggeredRequestFlag = 0; r->otherInfo = 0; return r; } static Z_ResourceControlResponse *zget_ResourceControlResponse(ODR o) { Z_ResourceControlResponse *r = (Z_ResourceControlResponse *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->continueFlag = odr_booldup(o, 1); r->resultSetWanted = 0; r->otherInfo = 0; return r; } static Z_AccessControlRequest *zget_AccessControlRequest(ODR o) { Z_AccessControlRequest *r = (Z_AccessControlRequest *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->which = Z_AccessControlRequest_simpleForm; r->u.simpleForm = 0; r->otherInfo = 0; return r; } static Z_AccessControlResponse *zget_AccessControlResponse(ODR o) { Z_AccessControlResponse *r = (Z_AccessControlResponse *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->which = Z_AccessControlResponse_simpleForm; r->u.simpleForm = 0; r->diagnostic = 0; r->otherInfo = 0; return r; } static Z_Segment *zget_Segment(ODR o) { Z_Segment *r = (Z_Segment *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->numberOfRecordsReturned = odr_intdup(o, 0); r->num_segmentRecords = 0; r->segmentRecords = (Z_NamePlusRecord **) odr_nullval(); r->otherInfo = 0; return r; } static Z_Close *zget_Close(ODR o) { Z_Close *r = (Z_Close *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->closeReason = odr_intdup(o, Z_Close_finished); r->diagnosticInformation = 0; r->resourceReportFormat = 0; r->resourceReport = 0; r->otherInfo = 0; return r; } static Z_ResourceReportRequest *zget_ResourceReportRequest(ODR o) { Z_ResourceReportRequest *r = (Z_ResourceReportRequest *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->opId = 0; r->prefResourceReportFormat = 0; r->otherInfo = 0; return r; } static Z_ResourceReportResponse *zget_ResourceReportResponse(ODR o) { Z_ResourceReportResponse *r = (Z_ResourceReportResponse *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->resourceReportStatus = odr_intdup(o, Z_ResourceReportResponse_success); r->resourceReport = 0; r->otherInfo = 0; return r; } static Z_SortRequest *zget_SortRequest(ODR o) { Z_SortRequest *r = (Z_SortRequest *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->inputResultSetNames = 0; r->sortedResultSetName = 0; r->sortSequence = 0; r->otherInfo = 0; return r; } static Z_SortResponse *zget_SortResponse(ODR o) { Z_SortResponse *r = (Z_SortResponse *)odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->sortStatus = odr_intdup(o, Z_SortResponse_success); r->resultSetStatus = odr_intdup(o, Z_SortResponse_empty); r->diagnostics = 0; r->resultCount = 0; r->otherInfo = 0; return r; } static Z_ExtendedServicesRequest *zget_ExtendedServicesRequest(ODR o) { Z_ExtendedServicesRequest *r = (Z_ExtendedServicesRequest *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->function = odr_intdup(o, Z_ExtendedServicesRequest_create); r->packageType = 0; r->packageName = 0; r->userId = 0; r->retentionTime = 0; r->permissions = 0; r->description = 0; r->taskSpecificParameters = 0; r->waitAction = odr_intdup(o, Z_ExtendedServicesRequest_waitIfPossible); r->elements = 0; r->otherInfo = 0; return r; } static Z_ExtendedServicesResponse *zget_ExtendedServicesResponse(ODR o) { Z_ExtendedServicesResponse *r = (Z_ExtendedServicesResponse *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->operationStatus = odr_intdup(o, Z_ExtendedServicesResponse_done); r->num_diagnostics = 0; r->diagnostics = 0; r->taskPackage = 0; r->otherInfo = 0; return r; } static Z_DuplicateDetectionRequest *zget_DuplicateDetectionRequest(ODR o) { Z_DuplicateDetectionRequest *r = (Z_DuplicateDetectionRequest *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->num_inputResultSetIds = 0; r->inputResultSetIds = 0; r->outputResultSetName = 0; r->applicablePortionOfRecord = 0; r->num_duplicateDetectionCriteria = 0; r->duplicateDetectionCriteria = 0; r->clustering = 0; r->num_retentionCriteria = 0; r->retentionCriteria = 0; r->num_sortCriteria = 0; r->sortCriteria = 0; r->otherInfo = 0; return r; } static Z_DuplicateDetectionResponse *zget_DuplicateDetectionResponse(ODR o) { Z_DuplicateDetectionResponse *r = (Z_DuplicateDetectionResponse *) odr_malloc(o, sizeof(*r)); r->referenceId = 0; r->status = odr_intdup(o, Z_DuplicateDetectionResponse_success); r->resultSetCount = 0; r->num_diagnostics = 0; r->diagnostics = 0; r->otherInfo = 0; return r; } Z_APDU *zget_APDU(ODR o, int which) { Z_APDU *r = (Z_APDU *)odr_malloc(o, sizeof(*r)); switch (r->which = which) { case Z_APDU_initRequest: r->u.initRequest = zget_InitRequest(o); break; case Z_APDU_initResponse: r->u.initResponse = zget_InitResponse(o); break; case Z_APDU_searchRequest: r->u.searchRequest = zget_SearchRequest(o); break; case Z_APDU_searchResponse: r->u.searchResponse = zget_SearchResponse(o); break; case Z_APDU_presentRequest: r->u.presentRequest = zget_PresentRequest(o); break; case Z_APDU_presentResponse: r->u.presentResponse = zget_PresentResponse(o); break; case Z_APDU_deleteResultSetRequest: r->u.deleteResultSetRequest = zget_DeleteResultSetRequest(o); break; case Z_APDU_deleteResultSetResponse: r->u.deleteResultSetResponse = zget_DeleteResultSetResponse(o); break; case Z_APDU_scanRequest: r->u.scanRequest = zget_ScanRequest(o); break; case Z_APDU_scanResponse: r->u.scanResponse = zget_ScanResponse(o); break; case Z_APDU_triggerResourceControlRequest: r->u.triggerResourceControlRequest = zget_TriggerResourceControlRequest(o); break; case Z_APDU_resourceControlRequest: r->u.resourceControlRequest = zget_ResourceControlRequest(o); break; case Z_APDU_resourceControlResponse: r->u.resourceControlResponse = zget_ResourceControlResponse(o); break; case Z_APDU_segmentRequest: r->u.segmentRequest = zget_Segment(o); break; case Z_APDU_close: r->u.close = zget_Close(o); break; case Z_APDU_accessControlRequest: r->u.accessControlRequest = zget_AccessControlRequest(o); break; case Z_APDU_accessControlResponse: r->u.accessControlResponse = zget_AccessControlResponse(o); break; case Z_APDU_resourceReportRequest: r->u.resourceReportRequest = zget_ResourceReportRequest(o); break; case Z_APDU_resourceReportResponse: r->u.resourceReportResponse = zget_ResourceReportResponse(o); break; case Z_APDU_sortRequest: r->u.sortRequest = zget_SortRequest(o); break; case Z_APDU_sortResponse: r->u.sortResponse = zget_SortResponse(o); break; case Z_APDU_extendedServicesRequest: r->u.extendedServicesRequest = zget_ExtendedServicesRequest(o); break; case Z_APDU_extendedServicesResponse: r->u.extendedServicesResponse = zget_ExtendedServicesResponse(o); break; case Z_APDU_duplicateDetectionRequest: r->u.duplicateDetectionRequest = zget_DuplicateDetectionRequest(o); break; case Z_APDU_duplicateDetectionResponse: r->u.duplicateDetectionResponse = zget_DuplicateDetectionResponse(o); break; default: return 0; } return r; } Z_DefaultDiagFormat *zget_DefaultDiagFormat(ODR o, int error, const char *addinfo) { Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *) odr_malloc(o, sizeof(*dr)); dr->diagnosticSetId = odr_oiddup(o, yaz_oid_diagset_bib_1); dr->condition = odr_intdup(o, error); dr->which = Z_DefaultDiagFormat_v2Addinfo; dr->u.v2Addinfo = odr_strdup (o, addinfo ? addinfo : ""); return dr; } Z_DiagRec *zget_DiagRec(ODR o, int error, const char *addinfo) { Z_DiagRec *dr = (Z_DiagRec*) odr_malloc(o, sizeof(*dr)); dr->which = Z_DiagRec_defaultFormat; dr->u.defaultFormat = zget_DefaultDiagFormat(o, error, addinfo); return dr; } Z_DiagRecs *zget_DiagRecs(ODR o, int error, const char *addinfo) { Z_DiagRecs *drecs = (Z_DiagRecs*) odr_malloc(o, sizeof(*drecs)); Z_DiagRec **dr = (Z_DiagRec**) odr_malloc(o, sizeof(**dr)); drecs->diagRecs = dr; dr[0] = zget_DiagRec(o, error, addinfo); drecs->num_diagRecs = 1; return drecs; } Z_NamePlusRecord *zget_surrogateDiagRec(ODR o, const char *dbname, int error, const char *addinfo) { Z_NamePlusRecord *rec = (Z_NamePlusRecord *) odr_malloc(o, sizeof(*rec)); Z_DiagRec *drec = (Z_DiagRec *)odr_malloc(o, sizeof(*drec)); if (dbname) rec->databaseName = odr_strdup(o, dbname); else rec->databaseName = 0; rec->which = Z_NamePlusRecord_surrogateDiagnostic; rec->u.surrogateDiagnostic = drec; drec->which = Z_DiagRec_defaultFormat; drec->u.defaultFormat = zget_DefaultDiagFormat(o, error, addinfo); return rec; } Z_External *zget_init_diagnostics(ODR odr, int error, const char *addinfo) { Z_External *x, *x2; Z_OtherInformation *u; Z_OtherInformationUnit *l; Z_DiagnosticFormat *d; Z_DiagnosticFormat_s *e; x = (Z_External*) odr_malloc(odr, sizeof *x); x->descriptor = 0; x->indirect_reference = 0; x->direct_reference = odr_oiddup(odr, yaz_oid_userinfo_userinfo_1); x->which = Z_External_userInfo1; u = (Z_OtherInformation *) odr_malloc(odr, sizeof *u); x->u.userInfo1 = u; u->num_elements = 1; u->list = (Z_OtherInformationUnit**) odr_malloc(odr, sizeof *u->list); u->list[0] = (Z_OtherInformationUnit*) odr_malloc(odr, sizeof *u->list[0]); l = u->list[0]; l->category = 0; l->which = Z_OtherInfo_externallyDefinedInfo; x2 = (Z_External*) odr_malloc(odr, sizeof *x); l->information.externallyDefinedInfo = x2; x2->descriptor = 0; x2->indirect_reference = 0; x2->direct_reference = odr_oiddup(odr, yaz_oid_diagset_diag_1); x2->which = Z_External_diag1; d = (Z_DiagnosticFormat*) odr_malloc(odr, sizeof *d); x2->u.diag1 = d; d->num = 1; d->elements = (Z_DiagnosticFormat_s**) odr_malloc(odr, sizeof *d->elements); d->elements[0] = (Z_DiagnosticFormat_s*) odr_malloc(odr, sizeof *d->elements[0]); e = d->elements[0]; e->which = Z_DiagnosticFormat_s_defaultDiagRec; e->u.defaultDiagRec = zget_DefaultDiagFormat(odr, error, addinfo); e->message = 0; return x; } Z_External *zget_init_diagnostics_octet(ODR odr, int error, const char *addinfo) { Z_External *x, *x2; Z_OtherInformation *u; Z_OtherInformationUnit *l; Z_DiagnosticFormat *d; Z_DiagnosticFormat_s *e; char *octet_buf; int octet_len; ODR encode; u = (Z_OtherInformation *) odr_malloc(odr, sizeof *u); u->num_elements = 1; u->list = (Z_OtherInformationUnit**) odr_malloc(odr, sizeof *u->list); u->list[0] = (Z_OtherInformationUnit*) odr_malloc(odr, sizeof *u->list[0]); l = u->list[0]; l->category = 0; l->which = Z_OtherInfo_externallyDefinedInfo; x2 = (Z_External*) odr_malloc(odr, sizeof *x); l->information.externallyDefinedInfo = x2; x2->descriptor = 0; x2->indirect_reference = 0; x2->direct_reference = odr_oiddup(odr, yaz_oid_diagset_diag_1); x2->which = Z_External_diag1; d = (Z_DiagnosticFormat*) odr_malloc(odr, sizeof *d); x2->u.diag1 = d; d->num = 1; d->elements = (Z_DiagnosticFormat_s**) odr_malloc(odr, sizeof *d->elements); d->elements[0] = (Z_DiagnosticFormat_s*) odr_malloc(odr, sizeof *d->elements[0]); e = d->elements[0]; e->which = Z_DiagnosticFormat_s_defaultDiagRec; e->u.defaultDiagRec = zget_DefaultDiagFormat(odr, error, addinfo); e->message = 0; encode = odr_createmem(ODR_ENCODE); z_OtherInformation(encode, &u, 0, 0); octet_buf = odr_getbuf(encode, &octet_len, 0); x = (Z_External*) odr_malloc(odr, sizeof *x); x->descriptor = 0; x->indirect_reference = 0; x->direct_reference = odr_oiddup(odr, yaz_oid_userinfo_userinfo_1); x->which = Z_External_octet; x->u.octet_aligned = odr_create_Odr_oct(odr, octet_buf, octet_len); odr_destroy(encode); return x; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/querytowrbuf.c0000644000175000017500000002046313265142510013047 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file querytowrbuf.c \brief Convert Z39.50 Z_Query to PQF (as WRBUF string) */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include void yaz_encode_pqf_term(WRBUF b, const char *term, int len) { int i; for (i = 0; i < len; i++) if (strchr(" \"{", term[i])) break; if (len > 0 && i == len) { if (term[0] == '@') wrbuf_putc(b, '\\'); for (i = 0; i < len; i++) { if (term[i] == '\\') wrbuf_putc(b, '\\'); wrbuf_putc(b, term[i]); } } else { wrbuf_putc(b, '"'); for (i = 0; i < len; i++) { if (term[i] == '"' || term[i] == '\\') wrbuf_putc(b, '\\'); wrbuf_putc(b, term[i]); } wrbuf_putc(b, '"'); } wrbuf_putc(b, ' '); } static void yaz_attribute_element_to_wrbuf(WRBUF b, const Z_AttributeElement *element) { int i; wrbuf_puts(b, "@attr "); if (element->attributeSet) { char oid_name_str[OID_STR_MAX]; const char *setname = yaz_oid_to_string_buf(element->attributeSet, 0, oid_name_str); if (setname) { wrbuf_puts(b, setname); wrbuf_puts(b, " "); } } wrbuf_printf(b, ODR_INT_PRINTF "=", *element->attributeType); switch (element->which) { case Z_AttributeValue_numeric: wrbuf_printf(b, ODR_INT_PRINTF, *element->value.numeric); break; case Z_AttributeValue_complex: for (i = 0; i < element->value.complex->num_list; i++) { if (i) wrbuf_puts(b, ","); if (element->value.complex->list[i]->which == Z_StringOrNumeric_string) wrbuf_puts(b, element->value.complex->list[i]->u.string); else if (element->value.complex->list[i]->which == Z_StringOrNumeric_numeric) wrbuf_printf(b, ODR_INT_PRINTF, *element->value.complex->list[i]->u.numeric); } break; default: wrbuf_puts(b, "@attr 1=unknown"); } wrbuf_puts(b, " "); } static const char *complex_op_name(const Z_Operator *op) { switch (op->which) { case Z_Operator_and: return "and"; case Z_Operator_or: return "or"; case Z_Operator_and_not: return "not"; case Z_Operator_prox: return "prox"; default: return "unknown complex operator"; } } static void yaz_attributes_to_wrbuf(WRBUF w, const Z_AttributeList *al) { int i; for (i = 0; i < al->num_attributes; i++) yaz_attribute_element_to_wrbuf(w, al->attributes[i]); } static void yaz_apt_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt) { yaz_attributes_to_wrbuf(b, zapt->attributes); switch (zapt->term->which) { case Z_Term_general: yaz_encode_pqf_term(b, (const char *)zapt->term->u.general->buf, zapt->term->u.general->len); break; case Z_Term_characterString: wrbuf_puts(b, "@term string "); yaz_encode_pqf_term(b, zapt->term->u.characterString, strlen(zapt->term->u.characterString)); break; case Z_Term_numeric: wrbuf_printf(b, "@term numeric " ODR_INT_PRINTF " ", *zapt->term->u.numeric); break; case Z_Term_null: wrbuf_puts(b, "@term null x"); break; default: wrbuf_printf(b, "@term null unknown%d ", zapt->term->which); } } static void yaz_rpnstructure_to_wrbuf(WRBUF b, const Z_RPNStructure *zs) { if (zs->which == Z_RPNStructure_complex) { Z_Operator *op = zs->u.complex->roperator; wrbuf_printf(b, "@%s ", complex_op_name(op) ); if (op->which== Z_Operator_prox) { if (!op->u.prox->exclusion) wrbuf_putc(b, 'n'); else if (*op->u.prox->exclusion) wrbuf_putc(b, '1'); else wrbuf_putc(b, '0'); wrbuf_printf(b, " " ODR_INT_PRINTF " %d " ODR_INT_PRINTF " ", *op->u.prox->distance, *op->u.prox->ordered, *op->u.prox->relationType); switch(op->u.prox->which) { case Z_ProximityOperator_known: wrbuf_putc(b, 'k'); break; case Z_ProximityOperator_private: wrbuf_putc(b, 'p'); break; default: wrbuf_printf(b, "%d", op->u.prox->which); } if (op->u.prox->u.known) wrbuf_printf(b, " " ODR_INT_PRINTF " ", *op->u.prox->u.known); else wrbuf_printf(b, " 0 "); } yaz_rpnstructure_to_wrbuf(b,zs->u.complex->s1); yaz_rpnstructure_to_wrbuf(b,zs->u.complex->s2); } else if (zs->which == Z_RPNStructure_simple) { if (zs->u.simple->which == Z_Operand_APT) yaz_apt_to_wrbuf(b, zs->u.simple->u.attributesPlusTerm); else if (zs->u.simple->which == Z_Operand_resultSetId) { wrbuf_printf(b, "@set "); yaz_encode_pqf_term(b, zs->u.simple->u.resultSetId, strlen(zs->u.simple->u.resultSetId)); } else wrbuf_puts(b, "(unknown simple structure)"); } else wrbuf_puts(b, "(unknown structure)"); } void yaz_rpnquery_to_wrbuf(WRBUF b, const Z_RPNQuery *rpn) { if (rpn->attributeSetId) { char oid_name_str[OID_STR_MAX]; const char *oid_name = yaz_oid_to_string_buf(rpn->attributeSetId, 0, oid_name_str); if (oid_name) wrbuf_printf(b, "@attrset %s ", oid_name); } yaz_rpnstructure_to_wrbuf(b, rpn->RPNStructure); wrbuf_chop_right(b); } void yaz_query_to_wrbuf(WRBUF b, const Z_Query *q) { assert(q); assert(b); switch (q->which) { case Z_Query_type_1: case Z_Query_type_101: wrbuf_puts(b,"RPN "); yaz_rpnquery_to_wrbuf(b, q->u.type_1); break; case Z_Query_type_2: wrbuf_puts(b, "CCL "); wrbuf_write(b, (const char *) q->u.type_2->buf, q->u.type_2->len); break; case Z_Query_type_100: wrbuf_puts(b, "Z39.58 "); wrbuf_write(b, (const char *) q->u.type_100->buf, q->u.type_100->len); break; case Z_Query_type_104: if (q->u.type_104->which == Z_External_CQL) { wrbuf_puts(b, "CQL "); wrbuf_puts(b, q->u.type_104->u.cql); } else wrbuf_printf(b,"UNKNOWN type 104 query %d", q->u.type_104->which); } } void yaz_scan_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt, const Odr_oid *attrbute_set) { /* should print attr set here */ wrbuf_puts(b, "RPN "); yaz_apt_to_wrbuf(b, zapt); } void wrbuf_diags(WRBUF b, int num_diagnostics, Z_DiagRec **diags) { /* we only dump the first diag - that keeps the log cleaner. */ wrbuf_puts(b," ERROR "); if (diags[0]->which != Z_DiagRec_defaultFormat) wrbuf_puts(b,"(diag not in default format?)"); else { Z_DefaultDiagFormat *e = diags[0]->u.defaultFormat; if (e->condition) wrbuf_printf(b, ODR_INT_PRINTF " ",*e->condition); else wrbuf_puts(b, "?? "); if ((e->which==Z_DefaultDiagFormat_v2Addinfo) && (e->u.v2Addinfo)) wrbuf_puts(b, e->u.v2Addinfo); else if ((e->which==Z_DefaultDiagFormat_v3Addinfo) && (e->u.v3Addinfo)) wrbuf_puts(b, e->u.v3Addinfo); wrbuf_puts(b, " "); } } void yaz_facet_list_to_wrbuf(WRBUF w, const Z_FacetList *fl) { int i; for (i = 0; i < fl->num; i++) { Z_FacetField *ff = fl->elements[i]; if (i) wrbuf_puts(w, ", "); yaz_attributes_to_wrbuf(w, ff->attributes); } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/csvtosru_update.tcl0000644000175000017500000000057513265142510014065 00000000000000#!/usr/bin/tclsh # # This file is part of the YAZ toolkit # Copyright (C) Index Data # See the file LICENSE for details. # # # Converts a CSV file with SRU update diagnostics to C+H file for easy # maintenance # source [lindex $argv 0]/csvtodiag.tcl csvtodiag [list [lindex $argv 0]/sru_update.csv diagsru_update.c [lindex $argv 0]/../include/yaz/diagsru_update.h] sru_update {} yaz-5.28.0/src/test.c0000644000175000017500000001323013265142510011242 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file test.c \brief Unit Test for YAZ */ #if HAVE_CONFIG_H #include #endif #include #include #include #if HAVE_UNISTSD_H #include #endif #include #include static FILE *test_fout = 0; /* can't use '= stdout' on some systems */ static int test_total = 0; static int test_failed = 0; static int test_todo = 0; static int test_verbose = 1; static const char *test_prog = 0; static int log_tests = 0; static int test_stop = 0; static FILE *get_file(void) { if (test_fout) return test_fout; return stdout; } static const char *progname(const char *argv0) { const char *cp = strrchr(argv0, '/'); if (cp) return cp+1; cp = strrchr(argv0, '\\'); if (cp) return cp+1; return argv0; } void yaz_check_init1(int *argc_p, char ***argv_p) { int i = 0; int argc = *argc_p; char **argv = *argv_p; test_prog = progname(argv[0]); for (i = 1; i= 7 && !memcmp(argv[i], "--test-", 7)) { const char *suf = argv[i]+7; if (i < argc-1 && !strcmp(suf, "file")) { i++; if (test_fout) fclose(test_fout); test_fout = fopen(argv[i], "w"); continue; } else if (i < argc-1 && !strcmp(suf, "verbose")) { i++; test_verbose = atoi(argv[i]); continue; } else if (i < argc && !strcmp(suf, "stop")) { test_stop = 1; continue; } else if (!strcmp(suf, "help")) { fprintf(stderr, "--test-help help\n" "--test-file fname output to fname\n" "--test-stop stop at first failing test\n" "--test-verbose level verbose level\n" " 0=Quiet. Only exit code tells what's wrong\n" " 1=Report+Summary only if tests fail.\n" " 2=Report failures. Print summary always\n" " 3=Report + summary always\n" " 4=Report + summary + extra prints from tests\n" ); exit(0); } else { fprintf(stderr, "Unrecognized option for YAZ test: %s\n", argv[i]); fprintf(stderr, "Use --test-help for more info\n"); exit(1); } } break; } /* remove --test- options from argc, argv so that they disappear */ (*argv_p)[i-1] = **argv_p; /* program name */ --i; *argc_p -= i; *argv_p += i; } /** \brief Initialize the log system */ void yaz_check_init_log(const char *argv0) { char logfilename[2048]; log_tests = 1; sprintf(logfilename,"%s.log", progname(argv0) ); yaz_log_init_file(logfilename); yaz_log_trunc(); } void yaz_check_inc_todo(void) { test_todo++; } void yaz_check_term1(void) { /* summary */ if (test_failed) { if (test_verbose >= 1) { if (test_todo) fprintf(get_file(), "%d out of %d tests failed for program %s" " (%d TODO's remaining)\n", test_failed, test_total, test_prog,test_todo); else fprintf(get_file(), "%d out of %d tests failed for program %s\n", test_failed, test_total, test_prog); } } else { if (test_verbose >= 2) { if (test_todo) fprintf(get_file(), "%d tests passed for program %s" " (%d TODO's remaining)\n", test_total, test_prog,test_todo); else fprintf(get_file(), "%d tests passed for program %s\n", test_total, test_prog); } } if (test_fout) fclose(test_fout); yaz_deinit_globals(); if (test_failed) exit(1); exit(0); } void yaz_check_eq1(int type, const char *file, int line, const char *left, const char *right, int lval, int rval) { char formstr[2048]; if (type == YAZ_TEST_TYPE_OK) sprintf(formstr, "%.500s == %.500s ", left, right); else sprintf(formstr, "%.500s != %.500s\n %d != %d", left, right, lval,rval); yaz_check_print1(type, file, line, formstr); } void yaz_check_print1(int type, const char *file, int line, const char *expr) { const char *msg = "unknown"; int printit = 1; test_total++; switch(type) { case YAZ_TEST_TYPE_FAIL: test_failed++; msg = "FAILED"; if (test_verbose < 1) printit = 0; break; case YAZ_TEST_TYPE_OK: msg = "ok"; if (test_verbose < 3) printit = 0; break; } if (printit) { fprintf(get_file(), "%s:%d: %s: ", file, line, msg); fprintf(get_file(), "%s\n", expr); } if (log_tests) { yaz_log(YLOG_LOG, "%s:%d %s: ", file, line, msg); yaz_log(YLOG_LOG, "%s", expr); } if ( type == YAZ_TEST_TYPE_FAIL && test_stop ) { exit(1); } } int yaz_test_get_verbosity() { return test_verbose; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/matchstr.c0000644000175000017500000000432713265142510012117 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file matchstr.c * \brief a couple of string utilities */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include int yaz_strcasecmp(const char *s1, const char *s2) { return yaz_strncasecmp(s1, s2, strlen(s1) + 1); } int yaz_strncasecmp(const char *s1, const char *s2, size_t n) { while (n--) { unsigned char c1 = *s1++; unsigned char c2 = *s2++; if (yaz_isupper(c1)) c1 = yaz_tolower(c1); if (yaz_isupper(c2)) c2 = yaz_tolower(c2); if (c1 != c2) return c1 - c2; } return 0; } int yaz_matchstr(const char *s1, const char *s2) { while (*s1 && *s2) { unsigned char c1 = *s1; unsigned char c2 = *s2; if (c2 == '?') return 0; if (c1 == '-') c1 = *++s1; if (c2 == '-') c2 = *++s2; if (!c1 || !c2) break; if (c2 != '.') { if (yaz_isupper(c1)) c1 = yaz_tolower(c1); if (yaz_isupper(c2)) c2 = yaz_tolower(c2); if (c1 != c2) break; } s1++; s2++; } return *s1 || *s2; } int yaz_strcmp_del(const char *a, const char *b, const char *b_del) { while (*a && *b) { if (*a != *b) return *a - *b; a++; b++; } if (b_del && strchr(b_del, *b)) return *a; return *a - *b; } int yaz_memcmp(const void *a, const void *b, size_t len_a, size_t len_b) { size_t m_len = len_a < len_b ? len_a : len_b; int r = memcmp(a, b, m_len); if (r) return r; return len_a - len_b; } int yaz_strcmp_null(const char *v1, const char *v2) { if (v1) { if (v2) return strcmp(v1, v2); else return 1; } else if (v2) return -1; return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/thread_create.c0000644000175000017500000000454013265142510013061 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file thread_create.c * \brief Implements thread creation wrappers * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #if YAZ_POSIX_THREADS #include #endif #ifdef WIN32 #include #include #endif struct yaz_thread { #if YAZ_POSIX_THREADS pthread_t id; #else #ifdef WIN32 HANDLE handle; void *(*routine)(void *p); #endif void *data; #endif }; #ifdef WIN32 unsigned int __stdcall win32_routine(void *p) { yaz_thread_t t = (yaz_thread_t) p; void *userdata = t->data; t->data = t->routine(userdata); _endthreadex(0); return 0; } #endif yaz_thread_t yaz_thread_create(void *(*start_routine)(void *p), void *arg) { yaz_thread_t t = xmalloc(sizeof(*t)); #if YAZ_POSIX_THREADS int r = pthread_create(&t->id, 0, start_routine, arg); if (r) { xfree(t); t = 0; } #else #ifdef WIN32 /* we create a wrapper on windows and pass yaz_thread struct to that */ unsigned threadID; uintptr_t ex_ret; t->data = arg; /* use data for both input and output */ t->routine = start_routine; ex_ret = _beginthreadex(NULL, 0, win32_routine, t, 0, &threadID); if (ex_ret == -1L) { xfree(t); t = 0; } t->handle = (HANDLE) ex_ret; #else t->data = start_routine(arg); #endif #endif return t; } void yaz_thread_join(yaz_thread_t *tp, void **value_ptr) { if (*tp) { #ifdef YAZ_POSIX_THREADS pthread_join((*tp)->id, value_ptr); #else #ifdef WIN32 WaitForSingleObject((*tp)->handle, INFINITE); CloseHandle((*tp)->handle); #endif if (value_ptr) *value_ptr = (*tp)->data; #endif xfree(*tp); *tp = 0; } } void yaz_thread_detach(yaz_thread_t *tp) { if (*tp) { #ifdef YAZ_POSIX_THREADS pthread_detach((*tp)->id); #else #ifdef WIN32 CloseHandle((*tp)->handle); #endif #endif xfree(*tp); *tp = 0; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/snprintf.c0000644000175000017500000000152613265142510012133 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file snprintf.c * \brief snprintf wrapper */ #if HAVE_CONFIG_H #include #endif #include #include #include void yaz_vsnprintf(char *buf, size_t size, const char *fmt, va_list ap) { #if HAVE_VSNPRINTF vsnprintf(buf, size, fmt, ap); #else #ifdef WIN32 _vsnprintf(buf, size-1, fmt, ap); buf[size-1] = '\0'; #else vsprintf(buf, fmt, ap); #endif #endif } void yaz_snprintf(char *buf, size_t size, const char *fmt, ...) { va_list ap; va_start(ap, fmt); yaz_vsnprintf(buf, size, fmt, ap); va_end(ap); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cqlstdio.c0000644000175000017500000000151713265142510012112 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cqlstdio.c * \brief Implements query stream reading using FILE handle. */ #if HAVE_CONFIG_H #include #endif #include static int getbyte_stream(void *client_data) { FILE *f = (FILE*) client_data; int c = fgetc(f); if (c == EOF) return 0; return c; } static void ungetbyte_stream(int c, void *client_data) { FILE *f = (FILE*) client_data; if (c == 0) c = EOF; ungetc(c, f); } int cql_parser_stdio(CQL_parser cp, FILE *f) { return cql_parser_stream(cp, getbyte_stream, ungetbyte_stream, f); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/sru-p.h0000644000175000017500000000743313265142510011346 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file sru-p.h * \brief SRU private header */ void yaz_add_name_value_str(ODR o, char **name, char **value, int *i, char *a_name, char *val); void yaz_add_name_value_int(ODR o, char **name, char **value, int *i, char *a_name, Odr_int *val); char *yaz_negotiate_sru_version(char *input_ver); void yaz_sru_facet_request(ODR, Z_FacetList **facetList, const char **limit, const char **start, const char **sort); #if YAZ_HAVE_XML2 #include #include int yaz_match_xsd_string(xmlNodePtr ptr, const char *elem, ODR o, char **val); int yaz_match_xsd_integer(xmlNodePtr ptr, const char *elem, ODR o, Odr_int **val); int yaz_match_xsd_string_n(xmlNodePtr ptr, const char *elem, ODR o, char **val, int *len); int yaz_match_xsd_string_n_nmem(xmlNodePtr ptr, const char *elem, NMEM nmem, char **val, int *len); int yaz_match_xsd_element(xmlNodePtr ptr, const char *elem); int yaz_match_xsd_XML_n2(xmlNodePtr ptr, const char *elem, ODR o, char **val, int *len, int fixup_root); int yaz_match_xsd_XML_n(xmlNodePtr ptr, const char *elem, ODR o, char **val, int *len); xmlNodePtr add_xsd_string(xmlNodePtr ptr, const char *elem, const char *val); void add_xsd_integer(xmlNodePtr ptr, const char *elem, const Odr_int *val); xmlNodePtr add_xsd_string_n(xmlNodePtr ptr, const char *elem, const char *val, int len); void add_XML_n(xmlNodePtr ptr, const char *elem, char *val, int len, xmlNsPtr ns_ptr); xmlNodePtr add_xsd_string_ns(xmlNodePtr ptr, const char *elem, const char *val, xmlNsPtr ns_ptr); void yaz_sru_facet_response(ODR o, Z_FacetList **facetList, xmlNodePtr n); const char *yaz_element_attribute_value_get(xmlNodePtr ptr, const char *node_name, const char *attribute_name); #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/srw.csv0000644000175000017500000000762113570007457011467 000000000000001, "Permanent system error" 2, "System temporarily unavailable" 3, "Authentication error" 4, "Unsupported operation" 5, "Unsupported version" 6, "Unsupported parameter value" 7, "Mandatory parameter not supplied" 8, "Unsupported parameter" 10, "Query syntax error" 11, "Unsupported query type" 12, "Too many characters in query" 13, "Invalid or unsupported use of parentheses" 14, "Invalid or unsupported use of quotes" 15, "Unsupported context set" 16, "Unsupported index" 17, "Unsupported combination of index and context set" 18, "Unsupported combination of indexes" 19, "Unsupported relation" 20, "Unsupported relation modifier" 21, "Unsupported combination of relation modifiers" 22, "Unsupported combination of relation and index" 23, "Too many characters in term" 24, "Unsupported combination of relation and term" 25, "Special characters not quoted in term" 26, "Non special character escaped in term" 27, "Empty term unsupported" 28, "Masking character not supported" 29, "Masked words too short" 30, "Too many masking characters in term" 31, "Anchoring character not supported" 32, "Anchoring character in unsupported position" 33, "Combination of proximity/adjacency and masking characters not supported" 34, "Combination of proximity/adjacency and anchoring characters not supported" 35, "Term contains only stopwords" 36, "Term in invalid format for index or relation" 37, "Unsupported boolean operator" 38, "Too many boolean operators in query" 39, "Proximity not supported" 40, "Unsupported proximity relation" 41, "Unsupported proximity distance" 42, "Unsupported proximity unit" 43, "Unsupported proximity ordering" 44, "Unsupported combination of proximity modifiers" 45, "Prefix assigned to multiple identifiers" 46, "Unsupported boolean modifier" 47, "Cannot process query; reason unknown" 48, "Query feature unsupported" 49, "Masking character in unsupported position" 50, "Result sets not supported" 51, "Result set does not exist" 52, "Result set temporarily unavailable" 53, "Result sets only supported for retrieval" 54, "Retrieval may only occur from an existing result set" 55, "Combination of result sets with search terms not supported" 56, "Only combination of single result set with search terms supported" 57, "Result set created but no records available" 58, "Result set created with unpredictable partial results available" 59, "Result set created with valid partial results available" 60, "Result set not created: too many matching records" 61, "First record position out of range" 62, "Negative number of records requested" 63, "System error in retrieving records" 64, "Record temporarily unavailable" 65, "Record does not exist" 66, "Unknown schema for retrieval" 67, "Record not available in this schema" 68, "Not authorised to send record" 69, "Not authorised to send record in this schema" 70, "Record too large to send" 71, "Unsupported record packing" 72, "XPath retrieval unsupported" 73, "XPath expression contains unsupported feature" 74, "Unable to evaluate XPath expression" 80, "Sort not supported" 81, "Unsupported sort type" 82, "Unsupported sort sequence" 83, "Too many records to sort" 84, "Too many sort keys to sort" 85, "Duplicate sort keys" 86, "Cannot sort: incompatible record formats" 87, "Unsupported schema for sort" 88, "Unsupported path for sort" 89, "Path unsupported for schema" 90, "Unsupported direction value" 91, "Unsupported case value" 92, "Unsupported missing value action" 93, "Sort ended due to missing value" 100, "Explain not supported" 101, "Explain request type not supported (SOAP vs GET)" 102, "Explain record temporarily unavailable" 110, "Stylesheets not supported" 111, "Unsupported stylesheet" 120, "Response position out of range" 121, "Too many terms requested" 235, "Database does not exist" 236, "Access to specified database denied" 1015, "Init/AC: Maximum number of simultaneous sessions for Userid" 1074, "Proxy failure" yaz-5.28.0/src/http.c0000644000175000017500000004417413265142510011255 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file http.c * \brief Implements HTTP decoding */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" #include #include #include #include #include #include static int decode_headers_content(ODR o, int off, Z_HTTP_Header **headers, char **content_buf, int *content_len) { int i = off; int chunked = 0; const char *buf = o->op->buf; int size = o->op->size; *headers = 0; while (i < size-1 && buf[i] == '\n') { int po; i++; if (buf[i] == '\r' && i < size-1 && buf[i+1] == '\n') { i++; break; } if (buf[i] == '\n') break; for (po = i; ; i++) { if (i == size) { o->error = OHTTP; return 0; } else if (buf[i] == ':') break; } *headers = (Z_HTTP_Header *) odr_malloc(o, sizeof(**headers)); (*headers)->name = odr_strdupn(o, buf + po, i - po); i++; while (i < size-1 && buf[i] == ' ') i++; for (po = i; i < size-1 && !strchr("\r\n", buf[i]); i++) ; (*headers)->value = odr_strdupn(o, buf + po, i - po); if (!yaz_strcasecmp((*headers)->name, "Transfer-Encoding") && !yaz_strcasecmp((*headers)->value, "chunked")) chunked = 1; headers = &(*headers)->next; if (i < size-1 && buf[i] == '\r') i++; } *headers = 0; if (buf[i] != '\n') { o->error = OHTTP; return 0; } i++; if (chunked) { int off = 0; /* we know buffer will be smaller than o->size - i*/ *content_buf = (char*) odr_malloc(o, size - i); while (1) { /* chunk length .. */ int chunk_len = 0; for (; i < size-2; i++) if (yaz_isdigit(buf[i])) chunk_len = chunk_len * 16 + (buf[i] - '0'); else if (yaz_isupper(buf[i])) chunk_len = chunk_len * 16 + (buf[i] - ('A'-10)); else if (yaz_islower(buf[i])) chunk_len = chunk_len * 16 + (buf[i] - ('a'-10)); else break; /* chunk extension ... */ while (buf[i] != '\r' && buf[i+1] != '\n') { if (i >= size-2) { o->error = OHTTP; return 0; } i++; } i += 2; /* skip CRLF */ if (chunk_len == 0) break; if (chunk_len < 0 || off + chunk_len > size) { o->error = OHTTP; return 0; } /* copy chunk .. */ memcpy (*content_buf + off, buf + i, chunk_len); i += chunk_len + 2; /* skip chunk+CRLF */ off += chunk_len; } if (!off) *content_buf = 0; *content_len = off; } else { if (i > size) { o->error = OHTTP; return 0; } else if (i == size) { *content_buf = 0; *content_len = 0; } else { *content_len = size - i; *content_buf = odr_strdupn(o, buf + i, *content_len); } } return 1; } void z_HTTP_header_add_content_type(ODR o, Z_HTTP_Header **hp, const char *content_type, const char *charset) { const char *l = "Content-Type"; if (charset) { char *ctype = (char *) odr_malloc(o, strlen(content_type)+strlen(charset) + 15); sprintf(ctype, "%s; charset=%s", content_type, charset); z_HTTP_header_add(o, hp, l, ctype); } else z_HTTP_header_add(o, hp, l, content_type); } /* * HTTP Basic authentication is described at: * http://tools.ietf.org/html/rfc1945#section-11.1 */ void z_HTTP_header_add_basic_auth(ODR o, Z_HTTP_Header **hp, const char *username, const char *password) { char *tmp, *buf; int len; if (username == 0) return; if (password == 0) password = ""; len = strlen(username) + strlen(password); tmp = (char *) odr_malloc(o, len+2); sprintf(tmp, "%s:%s", username, password); buf = (char *) odr_malloc(o, (len+1) * 8/6 + 12); strcpy(buf, "Basic "); yaz_base64encode(tmp, &buf[strlen(buf)]); z_HTTP_header_set(o, hp, "Authorization", buf); } void z_HTTP_header_add(ODR o, Z_HTTP_Header **hp, const char *n, const char *v) { while (*hp) hp = &(*hp)->next; *hp = (Z_HTTP_Header *) odr_malloc(o, sizeof(**hp)); (*hp)->name = odr_strdup(o, n); (*hp)->value = odr_strdup(o, v); (*hp)->next = 0; } void z_HTTP_header_set(ODR o, Z_HTTP_Header **hp, const char *n, const char *v) { while (*hp) { if (!yaz_strcasecmp((*hp)->name, n)) { (*hp)->value = odr_strdup(o, v); return; } hp = &(*hp)->next; } *hp = (Z_HTTP_Header *) odr_malloc(o, sizeof(**hp)); (*hp)->name = odr_strdup(o, n); (*hp)->value = odr_strdup(o, v); (*hp)->next = 0; } const char *z_HTTP_header_remove(Z_HTTP_Header **hp, const char *n) { while (*hp) { if (!yaz_strcasecmp((*hp)->name, n)) { const char *v = (*hp)->value; *hp = (*hp)->next; return v; } hp = &(*hp)->next; } return 0; } const char *z_HTTP_header_lookup(const Z_HTTP_Header *hp, const char *n) { for (; hp; hp = hp->next) if (!yaz_strcasecmp(hp->name, n)) return hp->value; return 0; } Z_GDU *z_get_HTTP_Request(ODR o) { Z_GDU *p = (Z_GDU *) odr_malloc(o, sizeof(*p)); Z_HTTP_Request *hreq; p->which = Z_GDU_HTTP_Request; p->u.HTTP_Request = (Z_HTTP_Request *) odr_malloc(o, sizeof(*hreq)); hreq = p->u.HTTP_Request; hreq->headers = 0; hreq->content_len = 0; hreq->content_buf = 0; hreq->version = "1.1"; hreq->method = "POST"; hreq->path = "/"; z_HTTP_header_add(o, &hreq->headers, "User-Agent", "YAZ/" YAZ_VERSION); return p; } Z_GDU *z_get_HTTP_Request_host_path(ODR odr, const char *host, const char *path) { Z_GDU *p = z_get_HTTP_Request(odr); p->u.HTTP_Request->path = odr_strdup(odr, path); if (host) { const char *cp0 = strstr(host, "://"); const char *cp1 = 0; if (cp0) cp0 = cp0+3; else cp0 = host; cp1 = strchr(cp0, '/'); if (!cp1) cp1 = cp0+strlen(cp0); if (cp0 && cp1) { char *h = odr_strdupn(odr, cp0, cp1 - cp0); z_HTTP_header_add(odr, &p->u.HTTP_Request->headers, "Host", h); } } return p; } Z_GDU *z_get_HTTP_Request_uri(ODR odr, const char *uri, const char *args, int use_full_uri) { Z_GDU *p = z_get_HTTP_Request(odr); const char *cp0 = strstr(uri, "://"); const char *cp1 = 0; if (cp0) cp0 = cp0+3; else cp0 = uri; cp1 = strchr(cp0, '/'); if (!cp1) cp1 = cp0+strlen(cp0); if (cp0 && cp1) { char *h = odr_strdupn(odr, cp0, cp1 - cp0); z_HTTP_header_add(odr, &p->u.HTTP_Request->headers, "Host", h); } if (!args) { if (*cp1) args = cp1 + 1; else args = ""; } p->u.HTTP_Request->path = odr_malloc(odr, cp1 - uri + strlen(args) + 2); if (use_full_uri) { memcpy(p->u.HTTP_Request->path, uri, cp1 - uri); strcpy(p->u.HTTP_Request->path + (cp1 - uri), "/"); } else strcpy(p->u.HTTP_Request->path, "/"); strcat(p->u.HTTP_Request->path, args); return p; } Z_GDU *z_get_HTTP_Response_server(ODR o, int code, const char *details, const char *server, const char *server_url) { Z_GDU *p = (Z_GDU *) odr_malloc(o, sizeof(*p)); Z_HTTP_Response *hres; p->which = Z_GDU_HTTP_Response; p->u.HTTP_Response = (Z_HTTP_Response *) odr_malloc(o, sizeof(*hres)); hres = p->u.HTTP_Response; hres->headers = 0; hres->content_len = 0; hres->content_buf = 0; hres->code = code; hres->version = "1.1"; z_HTTP_header_add(o, &hres->headers, "Server", server); if (code != 200) { const char *http_err = z_HTTP_errmsg(code); size_t sz = 400 + strlen(http_err) + (details ? strlen(details) : 0); hres->content_buf = (char*) odr_malloc(o, sz); sprintf(hres->content_buf, "\n" "\n" " \n" " %s\n" " \n" " \n" "

%s

\n" "

Error: %d

\n" "

Description: %s

\n", server, server_url, server, code, http_err); if (details) { sprintf(hres->content_buf + strlen(hres->content_buf), "

Details: %s

\n", details); } sprintf(hres->content_buf + strlen(hres->content_buf), " \n" "\n"); hres->content_len = strlen(hres->content_buf); z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/html"); } return p; } Z_GDU *z_get_HTTP_Response_details(ODR o, int code, const char *details) { return z_get_HTTP_Response_server(o, code, details, "YAZ/" YAZ_VERSION, "http://www.indexdata.com/yaz"); } Z_GDU *z_get_HTTP_Response(ODR o, int code) { return z_get_HTTP_Response_details(o, code, 0); } const char *z_HTTP_errmsg(int code) { switch (code) { case 100: return "Continue"; case 101: return "Switching Protocols"; case 200: return "OK"; case 201: return "Created"; case 202: return "Accepted"; case 203: return "Non-Authoritative Information"; case 204: return "No Content"; case 205: return "Reset Content"; case 206: return "Partial Content"; case 300: return "Multiple Choices"; case 301: return "Moved Permenently"; case 302: return "Found"; case 303: return "See Other"; case 304: return "Not Modified"; case 305: return "Use Proxy"; case 307: return "Temporary Redirect"; case 400: return "Bad Request"; case 404: return "Not Found"; case 405: return "Method Not Allowed"; case 406: return "Not Acceptable"; case 407: return "Proxy Authentication Required"; case 408: return "Request Timeout"; case 409: return "Conflict"; case 410: return "Gone"; case 411: return "Length Required"; case 412: return "Precondition Failed"; case 413: return "Request Entity Too Large"; case 414: return "Request-URI Too Long"; case 415: return "Unsupported Media Type"; case 416: return "Requested Range Not Satisfiable"; case 417: return "Expectation Failed"; case 500: return "Internal Error"; case 501: return "Not Implemented"; case 502: return "Bad Gateway"; case 503: return "Service Unavailable"; case 504: return "Gateway Timeout"; case 505: return "HTTP Version Not Supported"; default: return "Unknown Error"; } } int yaz_decode_http_response(ODR o, Z_HTTP_Response **hr_p) { int i, po; Z_HTTP_Response *hr = (Z_HTTP_Response *) odr_malloc(o, sizeof(*hr)); const char *buf = o->op->buf; int size = o->op->size; *hr_p = hr; hr->content_buf = 0; hr->content_len = 0; po = i = 5; while (i < size-2 && !strchr(" \r\n", buf[i])) i++; hr->version = odr_strdupn(o, buf + po, i - po); if (buf[i] != ' ') { o->error = OHTTP; return 0; } i++; hr->code = 0; while (i < size-2 && buf[i] >= '0' && buf[i] <= '9') { hr->code = hr->code*10 + (buf[i] - '0'); i++; } while (i < size-1 && buf[i] != '\n') i++; return decode_headers_content(o, i, &hr->headers, &hr->content_buf, &hr->content_len); } int yaz_decode_http_request(ODR o, Z_HTTP_Request **hr_p) { int i, po; Z_HTTP_Request *hr = (Z_HTTP_Request *) odr_malloc(o, sizeof(*hr)); const char *buf = o->op->buf; int size = o->op->size; int lspace = 0; *hr_p = hr; hr->method = 0; hr->version = 0; hr->path = 0; hr->headers = 0; hr->content_buf = 0; hr->content_len = 0; /* method .. */ for (i = 0; buf[i] != ' '; i++) if (i >= size-5 || i > 30) { o->error = OHTTP; return 0; } hr->method = odr_strdupn(o, buf, i); po = ++i; while (i < size && !strchr("\r\n", buf[i])) { if (buf[i] == ' ') lspace = i; i++; } if (!lspace || i >= size || lspace >= size - 5 || memcmp(buf + lspace + 1, "HTTP/", 5)) { o->error = OHTTP; return 0; } hr->path = odr_strdupn(o, buf + po, lspace - po); hr->version = odr_strdupn(o, buf + lspace + 6, i - (lspace + 6)); if (i < size-1 && buf[i] == '\r') i++; if (buf[i] != '\n') { o->error = OHTTP; return 0; } /* headers */ return decode_headers_content(o, i, &hr->headers, &hr->content_buf, &hr->content_len); } static void dump_http_package(ODR o, const char *buf, size_t len) { int i, limit = 8192; for (i = 0; ; i++) { if (i == len) { o->op->stream_write(o, o->op->print, ODR_VISIBLESTRING, buf, i); break; } else if (i >= limit) { o->op->stream_write(o, o->op->print, ODR_VISIBLESTRING, buf, i); odr_printf(o, "(truncated from %ld to %d\n", (long) len, i); break; } else if (buf[i] == 0) { o->op->stream_write(o, o->op->print, ODR_VISIBLESTRING, buf, i); odr_printf(o, "(binary data)\n", (long) len); break; } } } int yaz_encode_http_response(ODR o, Z_HTTP_Response *hr) { char sbuf[80]; Z_HTTP_Header *h; int top0 = o->op->top; sprintf(sbuf, "HTTP/%s %d %s\r\n", hr->version, hr->code, z_HTTP_errmsg(hr->code)); odr_write(o, sbuf, strlen(sbuf)); /* use content_len for Content-Length */ sprintf(sbuf, "Content-Length: %d\r\n", hr->content_len); odr_write(o, sbuf, strlen(sbuf)); for (h = hr->headers; h; h = h->next) { if (yaz_strcasecmp(h->name, "Content-Length") && yaz_strcasecmp(h->name, "Transfer-Encoding")) { /* skip Content-Length if given. content_len rules */ odr_write(o, h->name, strlen(h->name)); odr_write(o, ": ", 2); odr_write(o, h->value, strlen(h->value)); odr_write(o, "\r\n", 2); } } odr_write(o, "\r\n", 2); if (hr->content_buf) odr_write(o, hr->content_buf, hr->content_len); if (o->direction == ODR_PRINT) { odr_printf(o, "-- HTTP response:\n"); dump_http_package(o, o->op->buf + top0, o->op->top - top0); odr_printf(o, "--\n"); } return 1; } int yaz_encode_http_request(ODR o, Z_HTTP_Request *hr) { Z_HTTP_Header *h; char *cp; int top0 = o->op->top; if (!hr->method || !hr->path) return 0; odr_write(o, hr->method, strlen(hr->method)); odr_write(o, " ", 1); cp = strchr(hr->path, '#'); odr_write(o, hr->path, cp ? (cp - hr->path) : strlen(hr->path)); odr_write(o, " HTTP/", 6); odr_write(o, hr->version, strlen(hr->version)); odr_write(o, "\r\n", 2); if (hr->content_len && !z_HTTP_header_lookup(hr->headers, "Content-Length")) { char lstr[60]; sprintf(lstr, "Content-Length: %d\r\n", hr->content_len); odr_write(o, lstr, strlen(lstr)); } for (h = hr->headers; h; h = h->next) { odr_write(o, h->name, strlen(h->name)); odr_write(o, ": ", 2); odr_write(o, h->value, strlen(h->value)); odr_write(o, "\r\n", 2); } odr_write(o, "\r\n", 2); if (hr->content_buf) odr_write(o, hr->content_buf, hr->content_len); if (o->direction == ODR_PRINT) { odr_printf(o, "-- HTTP request:\n"); dump_http_package(o, o->op->buf + top0, o->op->top - top0); odr_printf(o, "--\n"); } return 1; } const char *yaz_check_location(ODR odr, const char *uri, const char *location, int *host_change) { if (*location == '/') { /* relative location */ char *args = 0; char *nlocation = (char *) odr_malloc(odr, strlen(location) + strlen(uri) + 3); strcpy(nlocation, uri); cs_get_host_args(nlocation, (const char **) &args); if (!args || !*args) args = nlocation + strlen(nlocation); else args--; strcpy(args, location); *host_change = 0; return nlocation; } else { /* we don't check if host is the same as before - yet */ *host_change = 1; return location; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/version.c0000644000175000017500000000120713265142510011751 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file version.c * \brief Implements YAZ version utilities. */ #if HAVE_CONFIG_H #include #endif #include #include unsigned long yaz_version(char *version_str, char *sha1_str) { if (version_str) strcpy(version_str, YAZ_VERSION); if (sha1_str) strcpy(sha1_str, YAZ_VERSION_SHA1); return YAZ_VERSIONL; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ber_oct.c0000644000175000017500000000342613265142510011706 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ber_oct.c * \brief Implements ber_octetstring * * This source file implements BER encoding and decoding of * the OCTETSTRING type. */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" #include #include int ber_octetstring(ODR o, Odr_oct *p, int cons) { int res, len; const char *base; switch (o->direction) { case ODR_DECODE: if ((res = ber_declen(o->op->bp, &len, odr_max(o))) < 0) { odr_seterror(o, OPROTO, 14); return 0; } o->op->bp += res; if (cons) /* fetch component strings */ { base = o->op->bp; while (odp_more_chunks(o, base, len)) if (!odr_octetstring(o, &p, 0, 0)) return 0; return 1; } /* primitive octetstring */ if (len < 0) { odr_seterror(o, OOTHER, 15); return 0; } if (len > odr_max(o)) { odr_seterror(o, OOTHER, 16); return 0; } p->len = len; p->buf = odr_strdupn(o, o->op->bp, len); o->op->bp += len; return 1; case ODR_ENCODE: if ((res = ber_enclen(o, p->len, 5, 0)) < 0) return 0; if (p->len == 0) return 1; if (odr_write(o, p->buf, p->len) < 0) return 0; return 1; case ODR_PRINT: return 1; default: odr_seterror(o, OOTHER, 17); return 0; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cclptree.c0000644000175000017500000000766613265142510012104 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cclptree.c * \brief Implements CCL parse tree printing * * This source file implements functions to parse and print * a CCL node tree (as a result of parsing). */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static void ccl_pquery_indent(WRBUF w, struct ccl_rpn_node *p, int indent); static void ccl_pquery_complex(WRBUF w, struct ccl_rpn_node *p, int indent) { int sep_char = indent == -1 ? ' ' : '\n'; int next_indent = indent == -1 ? indent : indent+1; switch (p->kind) { case CCL_RPN_AND: wrbuf_puts(w, "@and"); break; case CCL_RPN_OR: wrbuf_puts(w, "@or"); break; case CCL_RPN_NOT: wrbuf_puts(w, "@not"); break; case CCL_RPN_PROX: if (p->u.p[2] && p->u.p[2]->kind == CCL_RPN_TERM) { const char *cp = p->u.p[2]->u.t.term; /* exlusion distance ordered relation which-code unit-code */ if (*cp == '!') { /* word order specified */ if (yaz_isdigit(cp[1])) wrbuf_printf(w, "@prox 0 %s 1 2 k 2", cp+1); else wrbuf_printf(w, "@prox 0 1 1 2 k 2"); } else if (*cp == '%') { /* word order not specified */ if (yaz_isdigit(cp[1])) wrbuf_printf(w, "@prox 0 %s 0 2 k 2", cp+1); else wrbuf_printf(w, "@prox 0 1 0 2 k 2"); } } else wrbuf_puts(w, "@prox 0 2 0 1 k 2"); break; default: wrbuf_puts(w, "@ bad op (unknown)"); } wrbuf_putc(w, sep_char); ccl_pquery_indent(w, p->u.p[0], next_indent); ccl_pquery_indent(w, p->u.p[1], next_indent); } static void ccl_prterm(WRBUF w, const char *term) { yaz_encode_pqf_term(w, term, strlen(term)); } static void ccl_pquery_indent(WRBUF w, struct ccl_rpn_node *p, int indent) { struct ccl_rpn_attr *att; if (!p) return; if (indent != -1) { int i; for (i = 0; i < indent; i++) wrbuf_putc(w, ' '); } switch (p->kind) { case CCL_RPN_AND: case CCL_RPN_OR: case CCL_RPN_NOT: case CCL_RPN_PROX: ccl_pquery_complex(w, p, indent); break; case CCL_RPN_SET: wrbuf_puts(w, "@set "); ccl_prterm(w, p->u.setname); if (indent != -1) wrbuf_putc(w, '\n'); break; case CCL_RPN_TERM: for (att = p->u.t.attr_list; att; att = att->next) { char tmpattr[128]; wrbuf_puts(w, "@attr "); if (att->set) { wrbuf_puts(w, att->set); wrbuf_puts(w, " "); } switch(att->kind) { case CCL_RPN_ATTR_NUMERIC: sprintf(tmpattr, "%d=%d ", att->type, att->value.numeric); wrbuf_puts(w, tmpattr); break; case CCL_RPN_ATTR_STRING: sprintf(tmpattr, "%d=", att->type); wrbuf_puts(w, tmpattr); wrbuf_puts(w, att->value.str); wrbuf_puts(w, " "); break; } } ccl_prterm(w, p->u.t.term); if (indent != -1) wrbuf_putc(w, '\n'); break; } } void ccl_pquery(WRBUF w, struct ccl_rpn_node *p) { ccl_pquery_indent(w, p, -1); } void ccl_pr_tree(struct ccl_rpn_node *rpn, FILE *fd_out) { WRBUF w = wrbuf_alloc(); ccl_pquery_indent(w, rpn, 0); fputs(wrbuf_cstr(w), fd_out); wrbuf_destroy(w); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/record_render.c0000644000175000017500000003553613265142510013115 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file record_render.c * \brief Render Z39.50 records (NamePlusRecord) */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include #endif static yaz_iconv_t iconv_create_charset(const char *record_charset, yaz_iconv_t *cd2, const char *marc_buf, int sz) { char charset_buf[40]; yaz_iconv_t cd = 0; char *from_set1 = 0; char *from_set2 = 0; char *to_set = "utf-8"; if (record_charset && *record_charset) { char *cp = charset_buf; strncpy(charset_buf, record_charset, sizeof(charset_buf)-1); charset_buf[sizeof(charset_buf)-1] = '\0'; from_set1 = cp; while (*cp && *cp != ',' && *cp != '/') cp++; if (*cp == '/') { *cp++ = '\0'; /* terminate from_set1 */ from_set2 = cp; while (*cp && *cp != ',') cp++; } if (*cp == ',') { *cp++ = '\0'; /* terminate from_set1 or from_set2 */ to_set = cp; while (*cp) cp++; } } if (from_set1) { if (yaz_marc_check_marc21_coding(from_set1, marc_buf, sz)) from_set1 = "utf-8"; cd = yaz_iconv_open(to_set, from_set1); } if (cd2) { if (from_set2) *cd2 = yaz_iconv_open(to_set, from_set2); else *cd2 = 0; } return cd; } static const char *return_marc_record(WRBUF wrbuf, int marc_type, int *len, const char *buf, int sz, const char *record_charset) { yaz_iconv_t cd = iconv_create_charset(record_charset, 0, buf, sz); yaz_marc_t mt = yaz_marc_create(); const char *ret_string = 0; if (cd) yaz_marc_iconv(mt, cd); yaz_marc_xml(mt, marc_type); if (yaz_marc_decode_wrbuf(mt, buf, sz, wrbuf) > 0) { *len = wrbuf_len(wrbuf); ret_string = wrbuf_cstr(wrbuf); } yaz_marc_destroy(mt); if (cd) yaz_iconv_close(cd); return ret_string; } static const char *return_opac_record(WRBUF wrbuf, int marc_type, int *len, Z_OPACRecord *opac_rec, const char *record_charset) { yaz_iconv_t cd, cd2; const char *marc_buf = 0; int marc_sz = 0; yaz_marc_t mt = yaz_marc_create(); if (opac_rec->bibliographicRecord) { Z_External *ext = opac_rec->bibliographicRecord; if (ext->which == Z_External_octet) { marc_buf = (const char *) ext->u.octet_aligned->buf; marc_sz = ext->u.octet_aligned->len; } } cd = iconv_create_charset(record_charset, &cd2, marc_buf, marc_sz); if (cd) yaz_marc_iconv(mt, cd); yaz_marc_xml(mt, marc_type); if (cd2) yaz_opac_decode_wrbuf2(mt, opac_rec, wrbuf, cd2); else yaz_opac_decode_wrbuf(mt, opac_rec, wrbuf); yaz_marc_destroy(mt); if (cd) yaz_iconv_close(cd); if (cd2) yaz_iconv_close(cd2); *len = wrbuf_len(wrbuf); return wrbuf_cstr(wrbuf); } static const char *return_string_record(WRBUF wrbuf, int *len, const char *buf, int sz, const char *record_charset) { yaz_iconv_t cd = iconv_create_charset(record_charset, 0, 0, 0); if (cd) { wrbuf_iconv_write(wrbuf, cd, buf, sz); wrbuf_iconv_reset(wrbuf, cd); buf = wrbuf_cstr(wrbuf); sz = wrbuf_len(wrbuf); yaz_iconv_close(cd); } *len = sz; return buf; } static const char *return_record_wrbuf(WRBUF wrbuf, int *len, Z_NamePlusRecord *npr, int marctype, const char *charset) { Z_External *r = (Z_External *) npr->u.databaseRecord; const Odr_oid *oid = r->direct_reference; wrbuf_rewind(wrbuf); /* render bibliographic record .. */ if (r->which == Z_External_OPAC) { return return_opac_record(wrbuf, marctype, len, r->u.opac, charset); } if (r->which == Z_External_sutrs) return return_string_record(wrbuf, len, (char*) r->u.sutrs->buf, r->u.sutrs->len, charset); else if (r->which == Z_External_octet) { if (oid_oidcmp(oid, yaz_oid_recsyn_xml) && oid_oidcmp(oid, yaz_oid_recsyn_application_xml) && oid_oidcmp(oid, yaz_oid_recsyn_mab) && oid_oidcmp(oid, yaz_oid_recsyn_html)) { const char *ret_buf = return_marc_record( wrbuf, marctype, len, (const char *) r->u.octet_aligned->buf, r->u.octet_aligned->len, charset); if (ret_buf) return ret_buf; /* not ISO2709. Return fail unless raw (ISO2709) is wanted */ if (yaz_oid_is_iso2709(oid) && marctype != YAZ_MARC_ISO2709) return 0; } return return_string_record(wrbuf, len, (const char *) r->u.octet_aligned->buf, r->u.octet_aligned->len, charset); } else if (r->which == Z_External_grs1) { yaz_display_grs1(wrbuf, r->u.grs1, 0); return return_string_record(wrbuf, len, wrbuf_buf(wrbuf), wrbuf_len(wrbuf), charset); } return 0; } static const char *get_record_format(WRBUF wrbuf, int *len, Z_NamePlusRecord *npr, int marctype, const char *charset, const char *format) { const char *res = return_record_wrbuf(wrbuf, len, npr, marctype, charset); #if YAZ_HAVE_XML2 if (*format == '1') { /* try to XML format res */ xmlDocPtr doc; xmlKeepBlanksDefault(0); /* get get xmlDocFormatMemory to work! */ doc = xmlParseMemory(res, *len); if (doc) { xmlChar *xml_mem; int xml_size; xmlDocDumpFormatMemory(doc, &xml_mem, &xml_size, 1); wrbuf_rewind(wrbuf); wrbuf_write(wrbuf, (const char *) xml_mem, xml_size); xmlFree(xml_mem); xmlFreeDoc(doc); res = wrbuf_cstr(wrbuf); *len = wrbuf_len(wrbuf); } } #endif return res; } #if YAZ_HAVE_XML2 static int replace_node(NMEM nmem, xmlNode *ptr, const char *type_spec, char *record_buf) { int ret = -1; const char *res; int len; int m_len; WRBUF wrbuf = wrbuf_alloc(); ODR odr = odr_createmem(ODR_ENCODE); Z_NamePlusRecord *npr = odr_malloc(odr, sizeof(*npr)); npr->which = Z_NamePlusRecord_databaseRecord; if (atoi_n_check(record_buf, 5, &m_len)) npr->u.databaseRecord = z_ext_record_usmarc(odr, record_buf, strlen(record_buf)); else npr->u.databaseRecord = z_ext_record_xml(odr, record_buf, strlen(record_buf)); res = yaz_record_render(npr, 0, wrbuf, type_spec, &len); if (res) { xmlDoc *doc = xmlParseMemory(res, strlen(res)); if (doc) { xmlNode *nptr = xmlCopyNode(xmlDocGetRootElement(doc), 1); xmlReplaceNode(ptr, nptr); xmlFreeDoc(doc); } else { xmlNode *nptr = xmlNewText(BAD_CAST res); xmlReplaceNode(ptr, nptr); } ret = 0; } wrbuf_destroy(wrbuf); odr_destroy(odr); return ret; } #endif static const char *base64_render(NMEM nmem, WRBUF wrbuf, const char *buf, int *len, const char *expr, const char *type_spec) { #if YAZ_HAVE_XML2 xmlDocPtr doc = xmlParseMemory(buf, *len); if (doc) { xmlChar *buf_out; int len_out; xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc); if (xpathCtx) { xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression((const xmlChar *) expr, xpathCtx); if (xpathObj) { xmlNodeSetPtr nodes = xpathObj->nodesetval; if (nodes) { int i; for (i = 0; i < nodes->nodeNr; i++) { xmlNode *ptr = nodes->nodeTab[i]; if (ptr->type == XML_TEXT_NODE) { const char *input = nmem_text_node_cdata(ptr, nmem); char *output = nmem_malloc( nmem, strlen(input) + 1); if (yaz_base64decode(input, output) == 0) { if (!replace_node(nmem, ptr, type_spec, output)) { /* replacement OK */ xmlFreeNode(ptr); /* unset below to avoid a bad reference in xmlXPathFreeObject below */ nodes->nodeTab[i] = 0; } } } } } xmlXPathFreeObject(xpathObj); } xmlXPathFreeContext(xpathCtx); } xmlDocDumpMemory(doc, &buf_out, &len_out); if (buf_out) { wrbuf_rewind(wrbuf); wrbuf_write(wrbuf, (const char *) buf_out, len_out); buf = wrbuf_cstr(wrbuf); *len = len_out; } xmlFreeDoc(doc); xmlFree(buf_out); } #endif return buf; } const char *yaz_record_render(Z_NamePlusRecord *npr, const char *schema, WRBUF wrbuf, const char *type_spec, int *len) { const char *ret = 0; NMEM nmem = 0; char *base64_xpath = 0; size_t i; char type[40]; char charset[40]; char format[3]; const char *cp = type_spec; int len0; if (!len) len = &len0; for (i = 0; cp[i] && cp[i] != ';' && cp[i] != ' ' && i < sizeof(type)-1; i++) type[i] = cp[i]; type[i] = '\0'; charset[0] = '\0'; format[0] = '\0'; while (1) { while (cp[i] == ' ') i++; if (cp[i] != ';') break; i++; while (cp[i] == ' ') i++; if (!strncmp(cp + i, "charset=", 8)) { size_t j = 0; i = i + 8; /* skip charset= */ while (cp[i] == ' ') i++; for (j = 0; cp[i] && cp[i] != ';' && cp[i] != ' '; i++) { if (j < sizeof(charset)-1) charset[j++] = cp[i]; } charset[j] = '\0'; } else if (!strncmp(cp + i, "format=", 7)) { size_t j = 0; i = i + 7; while (cp[i] == ' ') i++; for (j = 0; cp[i] && cp[i] != ';' && cp[i] != ' '; i++) { if (j < sizeof(format)-1) format[j++] = cp[i]; } format[j] = '\0'; } else if (!strncmp(cp + i, "base64=", 7)) { size_t i0; i = i + 7; while (cp[i] == ' ') i++; i0 = i; while (cp[i] && cp[i] != ';') i++; nmem = nmem_create(); base64_xpath = nmem_strdupn(nmem, cp + i0, i - i0); } } if (!strcmp(type, "database")) { *len = (npr->databaseName ? strlen(npr->databaseName) : 0); ret = npr->databaseName; } else if (!strcmp(type, "schema")) { *len = schema ? strlen(schema) : 0; ret = schema; } else if (!strcmp(type, "syntax")) { const char *desc = 0; if (npr->which == Z_NamePlusRecord_databaseRecord) { Z_External *r = (Z_External *) npr->u.databaseRecord; desc = yaz_oid_to_string(yaz_oid_std(), r->direct_reference, 0); } if (!desc) desc = "none"; *len = strlen(desc); ret = desc; } if (npr->which != Z_NamePlusRecord_databaseRecord) ; else if (!strcmp(type, "render")) { ret = get_record_format(wrbuf, len, npr, YAZ_MARC_LINE, charset, format); } else if (!strcmp(type, "xml")) { ret = get_record_format(wrbuf, len, npr, YAZ_MARC_MARCXML, charset, format); } else if (!strcmp(type, "txml")) { ret = get_record_format(wrbuf, len, npr, YAZ_MARC_TURBOMARC, charset, format); } else if (!strcmp(type, "json")) { ret = get_record_format(wrbuf, len, npr, YAZ_MARC_JSON, charset, format); } else if (!strcmp(type, "raw")) { ret = get_record_format(wrbuf, len, npr, YAZ_MARC_ISO2709, charset, format); } else if (!strcmp(type, "ext")) { *len = -1; ret = (const char *) npr->u.databaseRecord; } else if (!strcmp(type, "opac")) { if (npr->u.databaseRecord->which == Z_External_OPAC) ret = get_record_format(wrbuf, len, npr, YAZ_MARC_MARCXML, charset, format); } if (base64_xpath && *len != -1) { char *type_spec = nmem_malloc(nmem, strlen(type) + strlen(charset) + 11); strcpy(type_spec, type); if (*charset) { strcat(type_spec, "; charset="); strcat(type_spec, charset); } ret = base64_render(nmem, wrbuf, ret, len, base64_xpath, type_spec); } nmem_destroy(nmem); return ret; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zoom-memcached.c0000644000175000017500000004662013265142510013164 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zoom-memcached.c * \brief Implements query/record caching using memcached */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "zoom-p.h" #include #include #include #include void ZOOM_memcached_init(ZOOM_connection c) { #if HAVE_LIBMEMCACHED c->mc_st = 0; #endif #if HAVE_HIREDIS c->redis_c = 0; #endif c->expire_search = 600; c->expire_record = 1200; } void ZOOM_memcached_destroy(ZOOM_connection c) { #if HAVE_LIBMEMCACHED if (c->mc_st) memcached_free(c->mc_st); #endif #if HAVE_HIREDIS if (c->redis_c) redisFree(c->redis_c); #endif } #if HAVE_LIBMEMCACHED static memcached_st *create_memcached(const char *conf, int *expire_search, int *expire_record) { char **darray; int i, num; memcached_st *mc = memcached_create(0); NMEM nmem = nmem_create(); memcached_return_t rc; nmem_strsplit_blank(nmem, conf, &darray, &num); for (i = 0; mc && i < num; i++) { if (!yaz_strncasecmp(darray[i], "--SERVER=", 9)) { char *host = darray[i] + 9; char *port = strchr(host, ':'); char *weight = strstr(host, "/?"); if (port) *port++ = '\0'; if (weight) { *weight = '\0'; weight += 2; } rc = memcached_server_add(mc, host, port ? atoi(port) : 11211); yaz_log(YLOG_LOG, "memcached_server_add host=%s rc=%u %s", host, (unsigned) rc, memcached_strerror(mc, rc)); if (rc != MEMCACHED_SUCCESS) { memcached_free(mc); mc = 0; } } else if (!yaz_strncasecmp(darray[i], "--EXPIRE=", 9)) { *expire_search = atoi(darray[i] + 9); *expire_record = 600 + *expire_search; } else { /* bad directive */ memcached_free(mc); mc = 0; } } nmem_destroy(nmem); return mc; } #endif #if HAVE_HIREDIS static redisContext *create_redis(const char *conf, int *expire_search, int *expire_record) { char **darray; int i, num; NMEM nmem = nmem_create(); redisContext *context = 0; nmem_strsplit_blank(nmem, conf, &darray, &num); for (i = 0; i < num; i++) { if (!yaz_strncasecmp(darray[i], "--SERVER=", 9)) { struct timeval timeout = { 1, 500000 }; /* 1.5 seconds */ char *host = darray[i] + 9; char *port = strchr(host, ':'); if (port) *port++ = '\0'; context = redisConnectWithTimeout(host, port ? atoi(port) : 6379, timeout); } else if (!yaz_strncasecmp(darray[i], "--EXPIRE=", 9)) { *expire_search = atoi(darray[i] + 9); *expire_record = 600 + *expire_search; } } nmem_destroy(nmem); return context; } #endif int ZOOM_memcached_configure(ZOOM_connection c) { const char *val; #if HAVE_HIREDIS if (c->redis_c) { redisFree(c->redis_c); c->redis_c = 0; } #endif #if HAVE_LIBMEMCACHED if (c->mc_st) { memcached_free(c->mc_st); c->mc_st = 0; } #endif val = ZOOM_options_get(c->options, "redis"); if (val && *val) { #if HAVE_HIREDIS c->redis_c = create_redis(val, &c->expire_search, &c->expire_record); if (c->redis_c == 0 || c->redis_c->err) { ZOOM_set_error(c, ZOOM_ERROR_MEMCACHED, "could not create redis"); return -1; } return 0; /* don't bother with memcached if redis is enabled */ #else ZOOM_set_error(c, ZOOM_ERROR_MEMCACHED, "not enabled"); return -1; #endif } val = ZOOM_options_get(c->options, "memcached"); if (val && *val) { #if HAVE_LIBMEMCACHED c->mc_st = create_memcached(val, &c->expire_search, &c->expire_record); if (!c->mc_st) { ZOOM_set_error(c, ZOOM_ERROR_MEMCACHED, "could not create memcached"); return -1; } memcached_behavior_set(c->mc_st, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1); #else ZOOM_set_error(c, ZOOM_ERROR_MEMCACHED, "not enabled"); return -1; #endif } return 0; } static void wrbuf_vary_puts(WRBUF w, const char *v) { if (v) { if (strlen(v) > 40) { wrbuf_sha1_puts(w, v, 1); } else { wrbuf_puts(w, v); } } } void ZOOM_memcached_resultset(ZOOM_resultset r, ZOOM_query q) { ZOOM_connection c = r->connection; r->mc_key = wrbuf_alloc(); wrbuf_puts(r->mc_key, "1;"); wrbuf_vary_puts(r->mc_key, c->host_port); wrbuf_puts(r->mc_key, ";"); wrbuf_vary_puts(r->mc_key, ZOOM_resultset_option_get(r, "extraArgs")); wrbuf_puts(r->mc_key, ";"); wrbuf_vary_puts(r->mc_key, c->user); wrbuf_puts(r->mc_key, ";"); wrbuf_vary_puts(r->mc_key, c->group); wrbuf_puts(r->mc_key, ";"); if (c->password) wrbuf_sha1_puts(r->mc_key, c->password, 1); wrbuf_puts(r->mc_key, ";"); { WRBUF w = wrbuf_alloc(); ZOOM_query_get_hash(q, w); wrbuf_sha1_puts(r->mc_key, wrbuf_cstr(w), 1); wrbuf_destroy(w); } wrbuf_puts(r->mc_key, ";"); wrbuf_vary_puts(r->mc_key, r->req_facets); } void ZOOM_memcached_search(ZOOM_connection c, ZOOM_resultset resultset) { #if HAVE_HIREDIS if (c->redis_c && resultset->live_set == 0) { redisReply *reply; const char *argv[2]; argv[0] = "GET"; argv[1] = wrbuf_cstr(resultset->mc_key); reply = redisCommandArgv(c->redis_c, 2, argv, 0); /* count;precision (ASCII) + '\0' + BER buffer for otherInformation */ if (reply && reply->type == REDIS_REPLY_STRING) { char *v = reply->str; int v_len = reply->len; ZOOM_Event event; size_t lead_len = strlen(v) + 1; resultset->size = odr_atoi(v); yaz_log(YLOG_LOG, "For key %s got value %s lead_len=%d len=%d", wrbuf_cstr(resultset->mc_key), v, (int) lead_len, (int) v_len); if (v_len > lead_len) { Z_OtherInformation *oi = 0; int oi_len = v_len - lead_len; odr_setbuf(resultset->odr, v + lead_len, oi_len, 0); if (!z_OtherInformation(resultset->odr, &oi, 0, 0)) { yaz_log(YLOG_WARN, "oi decoding failed"); freeReplyObject(reply); return; } ZOOM_handle_search_result(c, resultset, oi); ZOOM_handle_facet_result(c, resultset, oi); } event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH); ZOOM_connection_put_event(c, event); resultset->live_set = 1; } if (reply) freeReplyObject(reply); } #endif #if HAVE_LIBMEMCACHED if (c->mc_st && resultset->live_set == 0) { size_t v_len; uint32_t flags; memcached_return_t rc; char *v = memcached_get(c->mc_st, wrbuf_buf(resultset->mc_key), wrbuf_len(resultset->mc_key), &v_len, &flags, &rc); /* count;precision (ASCII) + '\0' + BER buffer for otherInformation */ if (v) { ZOOM_Event event; size_t lead_len = strlen(v) + 1; resultset->size = odr_atoi(v); yaz_log(YLOG_LOG, "For key %s got value %s lead_len=%d len=%d", wrbuf_cstr(resultset->mc_key), v, (int) lead_len, (int) v_len); if (v_len > lead_len) { Z_OtherInformation *oi = 0; int oi_len = v_len - lead_len; odr_setbuf(resultset->odr, v + lead_len, oi_len, 0); if (!z_OtherInformation(resultset->odr, &oi, 0, 0)) { yaz_log(YLOG_WARN, "oi decoding failed"); free(v); return; } ZOOM_handle_search_result(c, resultset, oi); ZOOM_handle_facet_result(c, resultset, oi); } free(v); event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH); ZOOM_connection_put_event(c, event); resultset->live_set = 1; } } #endif } #if HAVE_HIREDIS static void expire_redis(redisContext *redis_c, const char *buf, size_t len, int exp) { redisReply *reply; const char *argv[3]; size_t argvlen[3]; char key_val[20]; sprintf(key_val, "%d", exp); argv[0] = "EXPIRE"; argvlen[0] = 6; argv[1] = buf; argvlen[1] = len; argv[2] = key_val; argvlen[2] = strlen(key_val); reply = redisCommandArgv(redis_c, 3, argv, argvlen); freeReplyObject(reply); } #endif void ZOOM_memcached_hitcount(ZOOM_connection c, ZOOM_resultset resultset, Z_OtherInformation *oi, const char *precision) { #if HAVE_HIREDIS if (c->redis_c && resultset->live_set == 0) { char *str; ODR odr = odr_createmem(ODR_ENCODE); char *oi_buf = 0; int oi_len = 0; char *key; str = odr_malloc(odr, 20 + strlen(precision)); /* count;precision (ASCII) + '\0' + BER buffer for otherInformation */ sprintf(str, ODR_INT_PRINTF ";%s", resultset->size, precision); if (oi) { z_OtherInformation(odr, &oi, 0, 0); oi_buf = odr_getbuf(odr, &oi_len, 0); } key = odr_malloc(odr, strlen(str) + 1 + oi_len); strcpy(key, str); if (oi_len) memcpy(key + strlen(str) + 1, oi_buf, oi_len); { redisReply *reply; const char *argv[3]; size_t argvlen[3]; argv[0] = "SET"; argvlen[0] = 3; argv[1] = wrbuf_buf(resultset->mc_key); argvlen[1] = wrbuf_len(resultset->mc_key); argv[2] = key; argvlen[2] = strlen(str) + 1 + oi_len; reply = redisCommandArgv(c->redis_c, 3, argv, argvlen); freeReplyObject(reply); } expire_redis(c->redis_c, wrbuf_buf(resultset->mc_key), wrbuf_len(resultset->mc_key), c->expire_search); odr_destroy(odr); } #endif #if HAVE_LIBMEMCACHED if (c->mc_st && resultset->live_set == 0) { uint32_t flags = 0; memcached_return_t rc; char *str; ODR odr = odr_createmem(ODR_ENCODE); char *oi_buf = 0; int oi_len = 0; char *key; str = odr_malloc(odr, 20 + strlen(precision)); /* count;precision (ASCII) + '\0' + BER buffer for otherInformation */ sprintf(str, ODR_INT_PRINTF ";%s", resultset->size, precision); if (oi) { z_OtherInformation(odr, &oi, 0, 0); oi_buf = odr_getbuf(odr, &oi_len, 0); } key = odr_malloc(odr, strlen(str) + 1 + oi_len); strcpy(key, str); if (oi_len) memcpy(key + strlen(str) + 1, oi_buf, oi_len); rc = memcached_set(c->mc_st, wrbuf_buf(resultset->mc_key), wrbuf_len(resultset->mc_key), key, strlen(str) + 1 + oi_len, c->expire_search, flags); yaz_log(YLOG_LOG, "Store hit count key=%s value=%s oi_len=%d rc=%u %s", wrbuf_cstr(resultset->mc_key), str, oi_len, (unsigned) rc, memcached_strerror(c->mc_st, rc)); odr_destroy(odr); } #endif } void ZOOM_memcached_add(ZOOM_resultset r, Z_NamePlusRecord *npr, int pos, const char *syntax, const char *elementSetName, const char *schema, Z_SRW_diagnostic *diag) { #if HAVE_HIREDIS if (r->connection->redis_c && !diag && npr->which == Z_NamePlusRecord_databaseRecord) { WRBUF k = wrbuf_alloc(); WRBUF rec_sha1 = wrbuf_alloc(); ODR odr = odr_createmem(ODR_ENCODE); char *rec_buf; int rec_len; const char *argv[3]; size_t argvlen[3]; redisReply *reply; z_NamePlusRecord(odr, &npr, 0, 0); rec_buf = odr_getbuf(odr, &rec_len, 0); wrbuf_write(k, wrbuf_buf(r->mc_key), wrbuf_len(r->mc_key)); wrbuf_printf(k, ";%d;%s;%s;%s", pos, syntax ? syntax : "", elementSetName ? elementSetName : "", schema ? schema : ""); wrbuf_sha1_write(rec_sha1, rec_buf, rec_len, 1); argv[0] = "SET"; argvlen[0] = 3; argv[1] = wrbuf_buf(k); argvlen[1] = wrbuf_len(k); argv[2] = wrbuf_buf(rec_sha1); argvlen[2] = wrbuf_len(rec_sha1); reply = redisCommandArgv(r->connection->redis_c, 3, argv, argvlen); yaz_log(YLOG_LOG, "Store record key=%s val=%s", wrbuf_cstr(k), wrbuf_cstr(rec_sha1)); freeReplyObject(reply); expire_redis(r->connection->redis_c, argv[1], argvlen[1], r->connection->expire_search); argv[1] = wrbuf_buf(rec_sha1); argvlen[1] = wrbuf_len(rec_sha1); argv[2] = rec_buf; argvlen[2] = rec_len; reply = redisCommandArgv(r->connection->redis_c, 3, argv, argvlen); yaz_log(YLOG_LOG, "Add record key=%s rec_len=%d", wrbuf_cstr(rec_sha1), rec_len); freeReplyObject(reply); expire_redis(r->connection->redis_c, argv[1], argvlen[1], r->connection->expire_record); odr_destroy(odr); wrbuf_destroy(k); wrbuf_destroy(rec_sha1); } #endif #if HAVE_LIBMEMCACHED if (r->connection->mc_st && !diag && npr->which == Z_NamePlusRecord_databaseRecord) { WRBUF k = wrbuf_alloc(); WRBUF rec_sha1 = wrbuf_alloc(); uint32_t flags = 0; memcached_return_t rc; ODR odr = odr_createmem(ODR_ENCODE); char *rec_buf; int rec_len; z_NamePlusRecord(odr, &npr, 0, 0); rec_buf = odr_getbuf(odr, &rec_len, 0); wrbuf_write(k, wrbuf_buf(r->mc_key), wrbuf_len(r->mc_key)); wrbuf_printf(k, ";%d;%s;%s;%s", pos, syntax ? syntax : "", elementSetName ? elementSetName : "", schema ? schema : ""); wrbuf_sha1_write(rec_sha1, rec_buf, rec_len, 1); rc = memcached_set(r->connection->mc_st, wrbuf_buf(k), wrbuf_len(k), wrbuf_buf(rec_sha1), wrbuf_len(rec_sha1), r->connection->expire_search, flags); yaz_log(YLOG_LOG, "Store record key=%s val=%s rc=%u %s", wrbuf_cstr(k), wrbuf_cstr(rec_sha1), (unsigned) rc, memcached_strerror(r->connection->mc_st, rc)); rc = memcached_add(r->connection->mc_st, wrbuf_buf(rec_sha1), wrbuf_len(rec_sha1), rec_buf, rec_len, r->connection->expire_record, flags); yaz_log(YLOG_LOG, "Add record key=%s rec_len=%d rc=%u %s", wrbuf_cstr(rec_sha1), rec_len, (unsigned) rc, memcached_strerror(r->connection->mc_st, rc)); odr_destroy(odr); wrbuf_destroy(k); wrbuf_destroy(rec_sha1); } #endif } Z_NamePlusRecord *ZOOM_memcached_lookup(ZOOM_resultset r, int pos, const char *syntax, const char *elementSetName, const char *schema) { #if HAVE_HIREDIS if (r->connection && r->connection->redis_c) { WRBUF k = wrbuf_alloc(); const char *argv[2]; size_t argvlen[2]; redisReply *reply1; wrbuf_write(k, wrbuf_buf(r->mc_key), wrbuf_len(r->mc_key)); wrbuf_printf(k, ";%d;%s;%s;%s", pos, syntax ? syntax : "", elementSetName ? elementSetName : "", schema ? schema : ""); yaz_log(YLOG_LOG, "Lookup record %s", wrbuf_cstr(k)); argv[0] = "GET"; argvlen[0] = 3; argv[1] = wrbuf_buf(k); argvlen[1] = wrbuf_len(k); reply1 = redisCommandArgv(r->connection->redis_c, 2, argv, argvlen); wrbuf_destroy(k); if (reply1 && reply1->type == REDIS_REPLY_STRING) { redisReply *reply2; char *sha1_buf = reply1->str; int sha1_len = reply1->len; yaz_log(YLOG_LOG, "Lookup record %.*s", (int) sha1_len, sha1_buf); argv[0] = "GET"; argvlen[0] = 3; argv[1] = sha1_buf; argvlen[1] = sha1_len; reply2 = redisCommandArgv(r->connection->redis_c, 2, argv, argvlen); if (reply2 && reply2->type == REDIS_REPLY_STRING) { Z_NamePlusRecord *npr = 0; char *v_buf = reply2->str; int v_len = reply2->len; odr_setbuf(r->odr, v_buf, v_len, 0); z_NamePlusRecord(r->odr, &npr, 0, 0); if (npr) yaz_log(YLOG_LOG, "returned redis copy"); freeReplyObject(reply2); freeReplyObject(reply1); return npr; } freeReplyObject(reply2); } freeReplyObject(reply1); } #endif #if HAVE_LIBMEMCACHED if (r->connection && r->connection->mc_st) { WRBUF k = wrbuf_alloc(); char *sha1_buf; size_t sha1_len; uint32_t flags; memcached_return_t rc; wrbuf_write(k, wrbuf_buf(r->mc_key), wrbuf_len(r->mc_key)); wrbuf_printf(k, ";%d;%s;%s;%s", pos, syntax ? syntax : "", elementSetName ? elementSetName : "", schema ? schema : ""); yaz_log(YLOG_LOG, "Lookup record %s", wrbuf_cstr(k)); sha1_buf = memcached_get(r->connection->mc_st, wrbuf_buf(k), wrbuf_len(k), &sha1_len, &flags, &rc); wrbuf_destroy(k); if (sha1_buf) { size_t v_len; char *v_buf; yaz_log(YLOG_LOG, "Lookup record %.*s", (int) sha1_len, sha1_buf); v_buf = memcached_get(r->connection->mc_st, sha1_buf, sha1_len, &v_len, &flags, &rc); free(sha1_buf); if (v_buf) { Z_NamePlusRecord *npr = 0; odr_setbuf(r->odr, v_buf, v_len, 0); z_NamePlusRecord(r->odr, &npr, 0, 0); free(v_buf); if (npr) yaz_log(YLOG_LOG, "returned memcached copy"); return npr; } } } #endif return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_choice.c0000644000175000017500000000512413265142510012364 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_choice.c * \brief Implements ODR CHOICE codec */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" int odr_choice(ODR o, Odr_arm arm[], void *p, void *whichp, const char *name) { int i, cl = -1, tg, cn, *which = (int *)whichp, bias = o->op->choice_bias; if (o->error) return 0; if (o->direction != ODR_DECODE && !*(char**)p) return 0; if (o->direction == ODR_DECODE) { *which = -1; *(char**)p = 0; } o->op->choice_bias = -1; if (o->direction == ODR_PRINT) { if (name) { odr_prname(o, name); odr_printf(o, "choice\n"); } } for (i = 0; arm[i].fun; i++) { if (o->direction == ODR_DECODE) { if (bias >= 0 && bias != arm[i].which) continue; *which = arm[i].which; } else if (*which != arm[i].which) continue; if (arm[i].tagmode != ODR_NONE) { if (o->direction == ODR_DECODE && cl < 0) { if (o->op->stack_top && !odr_constructed_more(o)) return 0; if (ber_dectag(o->op->bp, &cl, &tg, &cn, odr_max(o)) <= 0) return 0; } else if (o->direction != ODR_DECODE) { cl = arm[i].zclass; tg = arm[i].tag; } if (tg == arm[i].tag && cl == arm[i].zclass) { if (arm[i].tagmode == ODR_IMPLICIT) { odr_implicit_settag(o, cl, tg); return (*arm[i].fun)(o, (char **)p, 0, arm[i].name); } /* explicit */ if (!odr_constructed_begin(o, p, cl, tg, 0)) return 0; return (*arm[i].fun)(o, (char **)p, 0, arm[i].name) && odr_constructed_end(o); } } else /* no tagging. Have to poll type */ { if ((*arm[i].fun)(o, (char **)p, 1, arm[i].name) && *(char**)p) return 1; } } return 0; } void odr_choice_bias(ODR o, int what) { if (o->op->enable_bias) o->op->choice_bias = what; } void odr_choice_enable_bias (ODR o, int mode) { o->op->enable_bias = mode; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/iconv_encode_marc8.c0000644000175000017500000003166013265142510014017 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief MARC-8 encoding * * MARC-8 reference: * http://www.loc.gov/marc/specifications/speccharmarc8.html */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "iconv-p.h" yaz_conv_func_t yaz_marc8r_42_conv; yaz_conv_func_t yaz_marc8r_45_conv; yaz_conv_func_t yaz_marc8r_67_conv; yaz_conv_func_t yaz_marc8r_62_conv; yaz_conv_func_t yaz_marc8r_70_conv; yaz_conv_func_t yaz_marc8r_32_conv; yaz_conv_func_t yaz_marc8r_4E_conv; yaz_conv_func_t yaz_marc8r_51_conv; yaz_conv_func_t yaz_marc8r_33_conv; yaz_conv_func_t yaz_marc8r_34_conv; yaz_conv_func_t yaz_marc8r_53_conv; yaz_conv_func_t yaz_marc8r_31_conv; #define ESC "\033" struct encoder_data { unsigned write_marc8_second_half_char; unsigned long write_marc8_last; int write_marc8_ncr; const char *write_marc8_lpage; const char *write_marc8_g0; const char *write_marc8_g1; }; static void init_marc8(yaz_iconv_encoder_t w) { struct encoder_data *data = (struct encoder_data *) w->data; data->write_marc8_second_half_char = 0; data->write_marc8_last = 0; data->write_marc8_ncr = 0; data->write_marc8_lpage = 0; data->write_marc8_g0 = ESC "(B"; data->write_marc8_g1 = 0; } static size_t yaz_write_marc8_page_chr(yaz_iconv_t cd, struct encoder_data *w, char **outbuf, size_t *outbytesleft, const char *page_chr); static unsigned long lookup_marc8(yaz_iconv_t cd, unsigned long x, int *comb, const char **page_chr) { char utf8_buf[7]; char *utf8_outbuf = utf8_buf; size_t utf8_outbytesleft = sizeof(utf8_buf)-1, r; int error_code; r = yaz_write_UTF8_char(x, &utf8_outbuf, &utf8_outbytesleft, &error_code); if (r == (size_t)(-1)) { yaz_iconv_set_errno(cd, YAZ_ICONV_EILSEQ); return 0; } else { unsigned char *inp; size_t inbytesleft, no_read_sub = 0; unsigned long x; *utf8_outbuf = '\0'; inp = (unsigned char *) utf8_buf; inbytesleft = strlen(utf8_buf); x = yaz_marc8r_42_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "(B"; return x; } x = yaz_marc8r_45_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "(B"; return x; } x = yaz_marc8r_62_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "b"; return x; } x = yaz_marc8r_70_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "p"; return x; } x = yaz_marc8r_32_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "(2"; return x; } x = yaz_marc8r_4E_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "(N"; return x; } x = yaz_marc8r_51_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "(Q"; return x; } x = yaz_marc8r_33_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "(3"; return x; } x = yaz_marc8r_34_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "(4"; return x; } x = yaz_marc8r_53_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "(S"; return x; } x = yaz_marc8r_31_conv(inp, inbytesleft, &no_read_sub, comb, 255, 0); if (x) { *page_chr = ESC "$1"; return x; } yaz_iconv_set_errno(cd, YAZ_ICONV_EILSEQ); return x; } } static size_t flush_combos(yaz_iconv_t cd, struct encoder_data *w, char **outbuf, size_t *outbytesleft) { unsigned long y = w->write_marc8_last; if (!y) return 0; assert(w->write_marc8_lpage); if (w->write_marc8_lpage) { size_t r = yaz_write_marc8_page_chr(cd, w, outbuf, outbytesleft, w->write_marc8_lpage); if (r) return r; } if (9 >= *outbytesleft) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t) (-1); } if (w->write_marc8_ncr) { yaz_snprintf(*outbuf, 9, "&#x%04x;", y); (*outbytesleft) -= 8; (*outbuf) += 8; } else { size_t out_no = 0; unsigned char byte; byte = (unsigned char )((y>>16) & 0xff); if (byte) (*outbuf)[out_no++] = byte; byte = (unsigned char)((y>>8) & 0xff); if (byte) (*outbuf)[out_no++] = byte; byte = (unsigned char )(y & 0xff); if (byte) (*outbuf)[out_no++] = byte; *outbuf += out_no; (*outbytesleft) -= out_no; } if (w->write_marc8_second_half_char) { *(*outbuf)++ = w->write_marc8_second_half_char; (*outbytesleft)--; } w->write_marc8_last = 0; w->write_marc8_ncr = 0; w->write_marc8_lpage = 0; w->write_marc8_second_half_char = 0; return 0; } static size_t yaz_write_marc8_page_chr(yaz_iconv_t cd, struct encoder_data *w, char **outbuf, size_t *outbytesleft, const char *page_chr) { const char **old_page_chr = &w->write_marc8_g0; /* are we going to a G1-set (such as such as ESC ")!E") */ if (page_chr && page_chr[1] == ')') old_page_chr = &w->write_marc8_g1; if (!*old_page_chr || strcmp(page_chr, *old_page_chr)) { size_t plen = 0; const char *page_out = page_chr; if (*outbytesleft < 8) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t) (-1); } if (*old_page_chr) { if (!strcmp(*old_page_chr, ESC "p") || !strcmp(*old_page_chr, ESC "g") || !strcmp(*old_page_chr, ESC "b")) { page_out = ESC "s"; /* Technique 1 leave */ if (strcmp(page_chr, ESC "(B")) /* Not going ASCII page? */ { /* Must leave script + enter new page */ plen = strlen(page_out); memcpy(*outbuf, page_out, plen); (*outbuf) += plen; (*outbytesleft) -= plen; page_out = ESC "(B"; } } } *old_page_chr = page_chr; plen = strlen(page_out); memcpy(*outbuf, page_out, plen); (*outbuf) += plen; (*outbytesleft) -= plen; } return 0; } static size_t yaz_write_marc8_2(yaz_iconv_t cd, struct encoder_data *w, unsigned long x, char **outbuf, size_t *outbytesleft, int loss_mode) { int comb = 0; int enable_ncr = 0; const char *page_chr = 0; unsigned long y = lookup_marc8(cd, x, &comb, &page_chr); if (!y) { page_chr = ESC "(B"; switch (loss_mode) { case 0: return (size_t) (-1); case 1: y = '|'; break; case 2: y = x; enable_ncr = 1; break; case 3: if (x < 32 && x != 27) y = x; else return (size_t) (-1); } } if (comb) { if (page_chr) { size_t r = yaz_write_marc8_page_chr(cd, w, outbuf, outbytesleft, page_chr); if (r) return r; } if (x == 0x0361) w->write_marc8_second_half_char = 0xEC; else if (x == 0x0360) w->write_marc8_second_half_char = 0xFB; if (*outbytesleft <= 1) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t) (-1); } *(*outbuf)++ = (char) y; (*outbytesleft)--; } else { size_t r = flush_combos(cd, w, outbuf, outbytesleft); if (r) return r; w->write_marc8_last = y; w->write_marc8_lpage = page_chr; w->write_marc8_ncr = enable_ncr; } return 0; } static size_t flush_marc8(yaz_iconv_t cd, yaz_iconv_encoder_t en, char **outbuf, size_t *outbytesleft) { struct encoder_data *w = (struct encoder_data *) en->data; size_t r = flush_combos(cd, w, outbuf, outbytesleft); if (r) return r; w->write_marc8_g1 = 0; return yaz_write_marc8_page_chr(cd, w, outbuf, outbytesleft, ESC "(B"); } static size_t yaz_write_marc8_generic(yaz_iconv_t cd, struct encoder_data *w, unsigned long x, char **outbuf, size_t *outbytesleft, int loss_mode) { unsigned long x1, x2; if (yaz_iso_8859_1_lookup_y(x, &x1, &x2)) { /* save the output pointers .. */ char *outbuf0 = *outbuf; size_t outbytesleft0 = *outbytesleft; int last_ch = w->write_marc8_last; int ncr = w->write_marc8_ncr; const char *lpage = w->write_marc8_lpage; size_t r; r = yaz_write_marc8_2(cd, w, x1, outbuf, outbytesleft, loss_mode); if (r) return r; r = yaz_write_marc8_2(cd, w, x2, outbuf, outbytesleft, loss_mode); if (r && yaz_iconv_error(cd) == YAZ_ICONV_E2BIG) { /* not enough room. reset output to original values */ *outbuf = outbuf0; *outbytesleft = outbytesleft0; w->write_marc8_last = last_ch; w->write_marc8_ncr = ncr; w->write_marc8_lpage = lpage; } return r; } return yaz_write_marc8_2(cd, w, x, outbuf, outbytesleft, loss_mode); } static size_t write_marc8_normal(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft) { return yaz_write_marc8_generic(cd, (struct encoder_data *) e->data, x, outbuf, outbytesleft, 0); } static size_t write_marc8_lossy(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft) { return yaz_write_marc8_generic(cd, (struct encoder_data *) e->data, x, outbuf, outbytesleft, 1); } static size_t write_marc8_lossless(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft) { return yaz_write_marc8_generic(cd, (struct encoder_data *) e->data, x, outbuf, outbytesleft, 2); } static size_t write_marc8_control(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft) { return yaz_write_marc8_generic(cd, (struct encoder_data *) e->data, x, outbuf, outbytesleft, 3); } static void destroy_marc8(yaz_iconv_encoder_t e) { xfree(e->data); } yaz_iconv_encoder_t yaz_marc8_encoder(const char *tocode, yaz_iconv_encoder_t e) { if (!yaz_matchstr(tocode, "MARC8")) e->write_handle = write_marc8_normal; else if (!yaz_matchstr(tocode, "MARC8s")) e->write_handle = write_marc8_normal; else if (!yaz_matchstr(tocode, "MARC8lossy")) e->write_handle = write_marc8_lossy; else if (!yaz_matchstr(tocode, "MARC8lossless")) e->write_handle = write_marc8_lossless; else if (!yaz_matchstr(tocode, "MARC8c")) e->write_handle = write_marc8_control; else return 0; { struct encoder_data *data = (struct encoder_data *) xmalloc(sizeof(*data)); e->data = data; e->destroy_handle = destroy_marc8; e->flush_handle = flush_marc8; e->init_handle = init_marc8; } return e; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/datetime.asn0000644000175000017500000001021313250277530012421 00000000000000UserInfoFormat-dateTime {Z39-50-userInfoFormat dateTime (6)} DEFINITIONS ::= BEGIN IMPORTS IntUnit FROM Z39-50-APDU-1995; DateTime ::= SEQUENCE{ date [1] Z3950Date OPTIONAL, time [2] Z3950Time OPTIONAL -- one or the other, or both } Z3950Date ::= SEQUENCE{ year [1] IMPLICIT INTEGER, -- For "positive" years, i.e. 1 AD or later, supply -- the absolute year, e.g. If the year is 1995, supply -- the integer 1995; the value 95 would indicate the -- year 0095. -- For "negative" years, e.g. 1 BC or earlier, -1 -- represents 1 BC, -2 represents 2 BC, etc. Zero is -- invalid, because there was no year zero. partOfYear [2] CHOICE{ -- may be omitted if only year is significant monthAndDay [1] IMPLICIT SEQUENCE{ month [2] IMPLICIT INTEGER, -- value 1-12 day [3] IMPLICIT INTEGER OPTIONAL -- may be omitted if only year and month -- are significant. Value 1-31. }, julianDay [2] IMPLICIT INTEGER, -- Value 1 - 366. weekNumber [3] IMPLICIT INTEGER, -- Value 1 - 53. quarter [4] CHOICE{ first [1] IMPLICIT NULL, second [2] IMPLICIT NULL, third [3] IMPLICIT NULL, fourth [4] IMPLICIT NULL}, season [5] CHOICE{ winter [1] IMPLICIT NULL, spring [2] IMPLICIT NULL, summer [3] IMPLICIT NULL, autumn [4] IMPLICIT NULL} } OPTIONAL, flags [3] IMPLICIT SEQUENCE{ circa [1] IMPLICIT NULL OPTIONAL, -- if this flag is set then the date is "approximate". era [2] CHOICE{ -- If era occurs, partOfYear should not occur. decade [1] IMPLICIT NULL, -- year must be multiple of 10. -- For example, 1900 refers to -- the decade covering the years -- 1900 through 1909. century [2] IMPLICIT NULL, -- year must be multiple of 100. millennium [3] IMPLICIT NULL -- year must be multiple of 1000. } OPTIONAL } OPTIONAL } Z3950Time ::= SEQUENCE{ hour [1] IMPLICIT INTEGER, -- Value 0-23. minute [2] IMPLICIT INTEGER OPTIONAL, -- value 0-59. May be omitted when hour only is -- significant (in which case second and -- partOfSecond must also be omitted). second [3] IMPLICIT INTEGER OPTIONAL, -- value 0-59. May be omitted when only hour, or -- hour and minute, is significant (in which case -- partOfSecond must also be omitted). partOfSecond [4] IMPLICIT IntUnit OPTIONAL, -- Use Unit System = 'si', Unit type = 'time'; -- Unit = 'second', with appropriate value and -- scale factor. zone [5] CHOICE{ local [1] IMPLICIT NULL, utc [2] IMPLICIT NULL, utcOffset [3] IMPLICIT INTEGER -- in minutes }} END yaz-5.28.0/src/facet.asn0000644000175000017500000000104013265142510011700 00000000000000UserInfoFormat-facet-1 {Z39-50-userInfoFormat facet-1 (1)} DEFINITIONS ::= BEGIN IMPORTS AttributeList, Term FROM Z39-50-APDU-1995; FacetList ::= SEQUENCE OF FacetField; FacetField ::= SEQUENCE { -- attributes will specify: -- 1=use (field name) -- 2=sortorder 0=count descending, 1=alpha ascending .. -- 3=limit (integer) -- 4=start (integer), starting from 1 attributes [1] IMPLICIT AttributeList, terms [2] IMPLICIT SEQUENCE OF FacetTerm OPTIONAL } FacetTerm ::= SEQUENCE { term Term, count INTEGER } END yaz-5.28.0/src/comstack.c0000644000175000017500000002742113265142510012076 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file comstack.c * \brief Implements Generic COMSTACK functions */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include static const char *cs_errlist[] = { "No error or unspecified error", "System (lower-layer) error", "Operation out of state", "No data (operation would block)", "New data while half of old buffer is on the line (flow control)", "Permission denied", "SSL error", "Too large incoming buffer" }; const char *cs_errmsg(int n) { if (n < CSNONE || n > CSLASTERROR) n = CSNONE; return cs_errlist[n]; } const char *cs_strerror(COMSTACK h) { return cs_errmsg(h->cerrno); } void cs_get_host_args(const char *type_and_host, const char **args) { *args = ""; if (!strncmp(type_and_host, "unix:", 5)) { const char *cp = strchr(type_and_host + 5, ':'); if (!cp) return; type_and_host = cp + 1; if (!strchr(type_and_host, ':')) { *args = type_and_host; /* unix:path:args */ return; } } if (*type_and_host) { const char *cp = strchr(type_and_host, '/'); if (cp) { if (cp > type_and_host && !memcmp(cp - 1, "://", 3)) cp = strchr(cp + 2, '/'); } if (cp) *args = cp + 1; } } int cs_parse_host(const char *uri, const char **host, CS_TYPE *t, enum oid_proto *proto, char **connect_host) { *connect_host = 0; *t = tcpip_type; if (strncmp(uri, "connect:", 8) == 0) { const char *cp = strchr(uri, ','); if (cp) { size_t len; uri += 8; len = cp - uri; *connect_host = (char *) xmalloc(len + 1); memcpy(*connect_host, uri, len); (*connect_host)[len] = '\0'; uri = cp + 1; } } else if (strncmp(uri, "unix:", 5) == 0) { const char *cp; uri += 5; cp = strchr(uri, ':'); if (cp) { size_t len = cp - uri; *connect_host = (char *) xmalloc(len + 1); memcpy(*connect_host, uri, len); (*connect_host)[len] = '\0'; uri = cp + 1; } #ifdef WIN32 xfree(*connect_host); *connect_host = 0; return 0; #else *t = unix_type; #endif } if (strncmp (uri, "tcp:", 4) == 0) { *host = uri + 4; *proto = PROTO_Z3950; } else if (strncmp (uri, "ssl:", 4) == 0) { #if HAVE_GNUTLS_H *t = ssl_type; *host = uri + 4; *proto = PROTO_Z3950; #else xfree(*connect_host); *connect_host = 0; return 0; #endif } else if (strncmp(uri, "http:", 5) == 0) { *host = uri + 5; while (**host == '/') (*host)++; *proto = PROTO_HTTP; } else if (strncmp(uri, "https:", 6) == 0) { #if HAVE_GNUTLS_H *t = ssl_type; *host = uri + 6; while (**host == '/') (*host)++; *proto = PROTO_HTTP; #else xfree(*connect_host); *connect_host = 0; return 0; #endif } else { *host = uri; *proto = PROTO_Z3950; } return 1; } COMSTACK cs_create_host(const char *vhost, int blocking, void **vp) { return cs_create_host_proxy(vhost, blocking, vp, 0); } COMSTACK cs_create_host_proxy(const char *vhost, int blocking, void **vp, const char *proxy_host) { int proxy_mode; return cs_create_host2(vhost, blocking, vp, proxy_host, &proxy_mode); } COMSTACK cs_create_host2(const char *vhost, int blocking, void **vp, const char *proxy_host, int *proxy_mode) { enum oid_proto proto = PROTO_Z3950; const char *host = 0; COMSTACK cs; CS_TYPE t; char *connect_host = 0; const char *bind_host = strchr(vhost, ' '); if (bind_host && bind_host[1]) bind_host++; else bind_host = 0; *proxy_mode = 0; if (!cs_parse_host(vhost, &host, &t, &proto, &connect_host)) return 0; /* vhost proxy proxy method proxy-flag */ /* TCP+Z3950 TCP+Z3950 TCP+Z3950 1 */ /* TCP+Z3950 TCP+HTTP CONNECT 0 */ /* TCP+HTTP TCP+Z3950 TCP+HTTP 1 */ /* TCP+HTTP TCP+HTTP TCP+HTTP 1 */ /* SSL+* TCP+* CONNECT 0 */ /* ? SSL error */ if (proxy_host && !connect_host) { enum oid_proto proto1; CS_TYPE t1; const char *host1 = 0; if (!cs_parse_host(proxy_host, &host1, &t1, &proto1, &connect_host)) return 0; if (connect_host) { xfree(connect_host); return 0; } if (t1 != tcpip_type) return 0; if (t == ssl_type || (proto == PROTO_Z3950 && proto1 == PROTO_HTTP)) connect_host = xstrdup(host1); else { *proxy_mode = 1; host = host1; } } if (t == tcpip_type) { cs = yaz_tcpip_create3(-1, blocking, proto, connect_host ? host : 0, 0 /* user:pass */, bind_host); } else if (t == ssl_type) { cs = yaz_ssl_create(-1, blocking, proto, connect_host ? host : 0, 0 /* user:pass */, bind_host); } else { cs = cs_create(t, blocking, proto); } if (cs) { if (!(*vp = cs_straddr(cs, connect_host ? connect_host : host))) { cs_close (cs); cs = 0; } } xfree(connect_host); return cs; } int cs_look (COMSTACK cs) { return cs->event; } static int skip_crlf(const char *buf, int len, int *i) { if (*i < len) { if (buf[*i] == '\r' && *i < len-1 && buf[*i + 1] == '\n') { (*i) += 2; return 1; } else if (buf[*i] == '\n') { (*i)++; return 1; } } return 0; } #define CHUNK_DEBUG 0 static int cs_read_chunk(const char *buf, int i, int len) { /* inside chunked body .. */ while (1) { int chunk_len = 0; #if CHUNK_DEBUG if (i < len-2) { int j; printf ("\n<<<"); for (j = i; j <= i+3; j++) printf ("%c", buf[j]); printf (">>>\n"); } #endif /* read chunk length */ while (1) if (i >= len-2) { #if CHUNK_DEBUG printf ("returning incomplete read at 1\n"); printf ("i=%d len=%d\n", i, len); #endif return 0; } else if (yaz_isdigit(buf[i])) chunk_len = chunk_len * 16 + (buf[i++] - '0'); else if (yaz_isupper(buf[i])) chunk_len = chunk_len * 16 + (buf[i++] - ('A'-10)); else if (yaz_islower(buf[i])) chunk_len = chunk_len * 16 + (buf[i++] - ('a'-10)); else break; if (chunk_len == 0) break; if (chunk_len < 0) return i; while (1) { if (i >= len -1) return 0; if (skip_crlf(buf, len, &i)) break; i++; } /* got CRLF */ #if CHUNK_DEBUG printf ("chunk_len=%d\n", chunk_len); #endif i += chunk_len; if (i >= len-2) return 0; if (!skip_crlf(buf, len, &i)) return 0; } /* consider trailing headers .. */ while (i < len) { if (skip_crlf(buf, len, &i)) { if (skip_crlf(buf, len, &i)) return i; } else i++; } #if CHUNK_DEBUG printf ("returning incomplete read at 2\n"); printf ("i=%d len=%d\n", i, len); #endif return 0; } static int cs_complete_http(const char *buf, int len, int head_only) { /* deal with HTTP request/response */ int i, content_len = 0, chunked = 0; /* need at least one line followed by \n or \r .. */ for (i = 0; ; i++) if (i == len) return 0; /* incomplete */ else if (buf[i] == '\n' || buf[i] == '\r') break; /* check to see if it's a response with content */ if (!head_only && !memcmp(buf, "HTTP/", 5)) { int j; for (j = 5; j < i; j++) if (buf[j] == ' ') { ++j; if (buf[j] == '1') /* 1XX */ head_only = 1; else if (!memcmp(buf + j, "204", 3)) head_only = 1; else if (!memcmp(buf + j, "304", 3)) head_only = 1; else content_len = -1; break; } } #if 0 printf("len = %d\n", len); fwrite (buf, 1, len, stdout); printf("----------\n"); #endif for (i = 2; i <= len-2; ) { if (i > 8192) { return i; /* do not allow more than 8K HTTP header */ } if (skip_crlf(buf, len, &i)) { if (skip_crlf(buf, len, &i)) { /* inside content */ if (head_only) return i; else if (chunked) return cs_read_chunk(buf, i, len); else { /* not chunked ; inside body */ if (content_len == -1) return 0; /* no content length */ else if (len >= i + content_len) { return i + content_len; } } break; } else if (i < len - 20 && !yaz_strncasecmp((const char *) buf+i, "Transfer-Encoding:", 18)) { i+=18; while (buf[i] == ' ') i++; if (i < len - 8) if (!yaz_strncasecmp((const char *) buf+i, "chunked", 7)) chunked = 1; } else if (i < len - 17 && !yaz_strncasecmp((const char *)buf+i, "Content-Length:", 15)) { i+= 15; while (buf[i] == ' ') i++; content_len = 0; while (i <= len-4 && yaz_isdigit(buf[i])) content_len = content_len*10 + (buf[i++] - '0'); if (content_len < 0) /* prevent negative offsets */ content_len = 0; } else i++; } else i++; } return 0; } static int cs_complete_auto_x(const char *buf, int len, int head_only) { if (len > 5 && buf[0] >= 0x20 && buf[0] < 0x7f && buf[1] >= 0x20 && buf[1] < 0x7f && buf[2] >= 0x20 && buf[2] < 0x7f) { int r = cs_complete_http(buf, len, head_only); return r; } return completeBER(buf, len); } int cs_complete_auto(const char *buf, int len) { return cs_complete_auto_x(buf, len, 0); } int cs_complete_auto_head(const char *buf, int len) { return cs_complete_auto_x(buf, len, 1); } void cs_set_max_recv_bytes(COMSTACK cs, int max_recv_bytes) { cs->max_recv_bytes = max_recv_bytes; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/utf8.c0000644000175000017500000001654413570007231011163 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief UTF-8 encoding / decoding */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "iconv-p.h" static size_t init_utf8(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { if (!inp || inp[0] != 0xef) { *no_read = 0; return 0; } if (inbytesleft < 3) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); return (size_t) -1; } if (inp[1] != 0xbb && inp[2] == 0xbf) *no_read = 3; else *no_read = 0; return 0; } unsigned long yaz_read_UTF8_char(const unsigned char *inp, size_t inbytesleft, size_t *no_read, int *error) { unsigned long x = 0; *no_read = 0; /* by default */ if (inp[0] <= 0x7f) { x = inp[0]; *no_read = 1; } else if (inp[0] <= 0xbf || inp[0] >= 0xfe) { *error = YAZ_ICONV_EILSEQ; } else if (inp[0] <= 0xdf && inbytesleft >= 2) { if ((inp[1] & 0xc0) == 0x80) { x = ((inp[0] & 0x1f) << 6) | (inp[1] & 0x3f); if (x >= 0x80) *no_read = 2; else *error = YAZ_ICONV_EILSEQ; } else *error = YAZ_ICONV_EILSEQ; } else if (inp[0] <= 0xef && inbytesleft >= 3) { if ((inp[1] & 0xc0) == 0x80 && (inp[2] & 0xc0) == 0x80) { x = ((inp[0] & 0x0f) << 12) | ((inp[1] & 0x3f) << 6) | (inp[2] & 0x3f); if (x >= 0x800) *no_read = 3; else *error = YAZ_ICONV_EILSEQ; } else *error = YAZ_ICONV_EILSEQ; } else if (inp[0] <= 0xf7 && inbytesleft >= 4) { if ((inp[1] & 0xc0) == 0x80 && (inp[2] & 0xc0) == 0x80 && (inp[3] & 0xc0) == 0x80) { x = ((inp[0] & 0x07) << 18) | ((inp[1] & 0x3f) << 12) | ((inp[2] & 0x3f) << 6) | (inp[3] & 0x3f); if (x >= 0x10000) *no_read = 4; else *error = YAZ_ICONV_EILSEQ; } else *error = YAZ_ICONV_EILSEQ; } else if (inp[0] <= 0xfb && inbytesleft >= 5) { if ((inp[1] & 0xc0) == 0x80 && (inp[2] & 0xc0) == 0x80 && (inp[3] & 0xc0) == 0x80 && (inp[4] & 0xc0) == 0x80) { x = ((inp[0] & 0x03) << 24) | ((inp[1] & 0x3f) << 18) | ((inp[2] & 0x3f) << 12) | ((inp[3] & 0x3f) << 6) | (inp[4] & 0x3f); if (x >= 0x200000) *no_read = 5; else *error = YAZ_ICONV_EILSEQ; } else *error = YAZ_ICONV_EILSEQ; } else if (inp[0] <= 0xfd && inbytesleft >= 6) { if ((inp[1] & 0xc0) == 0x80 && (inp[2] & 0xc0) == 0x80 && (inp[3] & 0xc0) == 0x80 && (inp[4] & 0xc0) == 0x80 && (inp[5] & 0xc0) == 0x80) { x = ((inp[0] & 0x01) << 30) | ((inp[1] & 0x3f) << 24) | ((inp[2] & 0x3f) << 18) | ((inp[3] & 0x3f) << 12) | ((inp[4] & 0x3f) << 6) | (inp[5] & 0x3f); if (x >= 0x4000000) *no_read = 6; else *error = YAZ_ICONV_EILSEQ; } else *error = YAZ_ICONV_EILSEQ; } else *error = YAZ_ICONV_EINVAL; /* incomplete sentence */ return x; } static unsigned long read_utf8(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { int err = 0; int r = yaz_read_UTF8_char(inp, inbytesleft, no_read, &err); yaz_iconv_set_errno(cd, err); return r; } static size_t write_UTF8(yaz_iconv_t cd, yaz_iconv_encoder_t en, unsigned long x, char **outbuf, size_t *outbytesleft) { int err = 0; int r = yaz_write_UTF8_char(x, outbuf, outbytesleft, &err); yaz_iconv_set_errno(cd, err); return r; } size_t yaz_write_UTF8_char(unsigned long x, char **outbuf, size_t *outbytesleft, int *error) { unsigned char *outp = (unsigned char *) *outbuf; if (x <= 0x7f && *outbytesleft >= 1) { *outp++ = (unsigned char) x; (*outbytesleft)--; } else if (x <= 0x7ff && *outbytesleft >= 2) { *outp++ = (unsigned char) ((x >> 6) | 0xc0); *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 2; } else if (x <= 0xffff && *outbytesleft >= 3) { *outp++ = (unsigned char) ((x >> 12) | 0xe0); *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80); *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 3; } else if (x <= 0x1fffff && *outbytesleft >= 4) { *outp++ = (unsigned char) ((x >> 18) | 0xf0); *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80); *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80); *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 4; } else if (x <= 0x3ffffff && *outbytesleft >= 5) { *outp++ = (unsigned char) ((x >> 24) | 0xf8); *outp++ = (unsigned char) (((x >> 18) & 0x3f) | 0x80); *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80); *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80); *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 5; } else if (*outbytesleft >= 6) { *outp++ = (unsigned char) ((x >> 30) | 0xfc); *outp++ = (unsigned char) (((x >> 24) & 0x3f) | 0x80); *outp++ = (unsigned char) (((x >> 18) & 0x3f) | 0x80); *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80); *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80); *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 6; } else { *error = YAZ_ICONV_E2BIG; /* not room for output */ return (size_t)(-1); } *outbuf = (char *) outp; return 0; } yaz_iconv_encoder_t yaz_utf8_encoder(const char *tocode, yaz_iconv_encoder_t e) { if (!yaz_matchstr(tocode, "UTF8")) { e->write_handle = write_UTF8; return e; } return 0; } yaz_iconv_decoder_t yaz_utf8_decoder(const char *fromcode, yaz_iconv_decoder_t d) { if (!yaz_matchstr(fromcode, "UTF8")) { d->init_handle = init_utf8; d->read_handle = read_utf8; return d; } return 0; } int yaz_utf8_check(const char *str) { /* cast OK: yaz_read_UTF8_char is read-only */ unsigned char *inp = (unsigned char *) str; size_t inbytesleft = strlen(str); while (inbytesleft) { int error = 0; size_t no_read; yaz_read_UTF8_char(inp, inbytesleft, &no_read, &error); if (error) return 0; inp += no_read; inbytesleft -= no_read; } return 1; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zes-exps.c0000644000175000017500000000755113273126163012057 00000000000000/** \file zes-exps.c \brief ASN.1 Module ESFormat-ExportSpecification Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_ESExportSpecificationEsRequest(ODR o, Z_ESExportSpecificationEsRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_ESOriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT, 1, 0, "toKeep") && odr_implicit_tag(o, odr_null, &(*p)->notToKeep, ODR_CONTEXT, 2, 0, "notToKeep") && odr_sequence_end(o); } int z_ESExportSpecificationTaskPackage(ODR o, Z_ESExportSpecificationTaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_ESOriginPartToKeep, &(*p)->originPart, ODR_CONTEXT, 1, 0, "originPart") && odr_implicit_tag(o, odr_null, &(*p)->targetPart, ODR_CONTEXT, 2, 0, "targetPart") && odr_sequence_end(o); } int z_ESExportSpecification(ODR o, Z_ESExportSpecification **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ESExportSpecification_esRequest, (Odr_fun) z_ESExportSpecificationEsRequest, "esRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ESExportSpecification_taskPackage, (Odr_fun) z_ESExportSpecificationTaskPackage, "taskPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ESOriginPartToKeep(ODR o, Z_ESOriginPartToKeep **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_CompSpec, &(*p)->composition, ODR_CONTEXT, 1, 0, "composition") && odr_explicit_tag(o, z_ESDestination, &(*p)->exportDestination, ODR_CONTEXT, 2, 0, "exportDestination") && odr_sequence_end(o); } int z_ESDestinationOther(ODR o, Z_ESDestinationOther **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->vehicle, ODR_CONTEXT, 1, 1, "vehicle") && odr_implicit_tag(o, z_InternationalString, &(*p)->destination, ODR_CONTEXT, 2, 0, "destination") && odr_sequence_end(o); } int z_ESDestination(ODR o, Z_ESDestination **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ESDestination_phoneNumber, (Odr_fun) z_InternationalString, "phoneNumber"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ESDestination_faxNumber, (Odr_fun) z_InternationalString, "faxNumber"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ESDestination_x400address, (Odr_fun) z_InternationalString, "x400address"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_ESDestination_emailAddress, (Odr_fun) z_InternationalString, "emailAddress"}, {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ESDestination_pagerNumber, (Odr_fun) z_InternationalString, "pagerNumber"}, {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_ESDestination_ftpAddress, (Odr_fun) z_InternationalString, "ftpAddress"}, {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_ESDestination_ftamAddress, (Odr_fun) z_InternationalString, "ftamAddress"}, {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_ESDestination_printerAddress, (Odr_fun) z_InternationalString, "printerAddress"}, {ODR_IMPLICIT, ODR_CONTEXT, 100, Z_ESDestination_other, (Odr_fun) z_ESDestinationOther, "other"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } yaz-5.28.0/src/odr-priv.h0000644000175000017500000001301013265142510012026 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file odr-priv.h * \brief Internal ODR definitions */ #ifndef ODR_PRIV_H #define ODR_PRIV_H #include #include /** \brief Utility structure used by ber_tag */ struct Odr_ber_tag { int lclass; int ltag; int br; int lcons; }; #define odr_max(o) ((o)->op->size - ((o)->op->bp - (o)->op->buf)) /** * \brief stack for BER constructed items * * data structure for con stack.. a little peculiar. Since we can't * deallocate memory we reuse stack items (popped items gets reused) * *\verbatim * +---+ +---+ +---+ +---+ * NULL -|p n|-----|p n|-----|p n|-----|p n|-- NULL * +---+ +---+ +---+ +---+ * | | * stack_first stack_top reused item *\endverbatim */ struct odr_constack { const char *base; /** starting point of data */ int base_offset; int len; /** length of data, if known, else -1 (decoding only) */ const char *lenb; /** where to encode length */ int len_offset; int lenlen; /** length of length-field */ const char *name; /** name of stack entry */ struct odr_constack *prev; /** pointer back in stack */ struct odr_constack *next; /** pointer forward */ }; #define ODR_MAX_STACK 2000 /** * \brief ODR private data */ struct Odr_private { char *buf; /* memory base */ const char *bp; /* position in buffer (decoding) */ int pos; /* current position (encoding) */ int top; /* top of buffer (max pos when encoding) */ int size; /* current buffer size (encoding+decoding) */ /* stack for constructed types (we above) */ struct odr_constack *stack_first; /** first member of allocated stack */ struct odr_constack *stack_top; /** top of stack */ const char **tmp_names_buf; /** array returned by odr_get_element_path */ int tmp_names_sz; /** size of tmp_names_buf */ struct Odr_ber_tag odr_ber_tag; /** used by ber_tag */ yaz_iconv_t iconv_handle; int error_id; char element[80]; void (*stream_write)(ODR o, void *handle, int type, const char *buf, int len); void (*stream_close)(void *handle); int can_grow; /* are we allowed to reallocate */ int t_class; /* implicit tagging (-1==default tag) */ int t_tag; int enable_bias; /* force choice enable flag */ int choice_bias; /* force choice */ int lenlen; /* force length-of-lenght (odr_setlen()) */ FILE *print; /* output file handler for direction print */ int indent; /* current indent level for printing */ }; #define ODR_STACK_POP(x) (x)->op->stack_top = (x)->op->stack_top->prev #define ODR_STACK_EMPTY(x) (!(x)->op->stack_top) #define ODR_STACK_NOT_EMPTY(x) ((x)->op->stack_top) #define odr_tell(o) ((o)->op->pos) /* Private macro. * write a single character at the current position - grow buffer if * necessary. * (no, we're not usually this anal about our macros, but this baby is * next to unreadable without some indentation :) */ #define odr_putc(o, c) \ ( \ ( \ (o)->op->pos < (o)->op->size ? \ ( \ (o)->op->buf[(o)->op->pos++] = (c), \ 0 \ ) : \ ( \ odr_grow_block((o), 1) == 0 ? \ ( \ (o)->op->buf[(o)->op->pos++] = (c), \ 0 \ ) : \ ( \ (o)->error = OSPACE, \ -1 \ ) \ ) \ ) == 0 ? \ ( \ (o)->op->pos > (o)->op->top ? \ ( \ (o)->op->top = (o)->op->pos, \ 0 \ ) : \ 0 \ ) : \ -1 \ ) #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/item-req.asn0000644000175000017500000000401113250277530012347 00000000000000Z39.50-extendedService-ItemOrder-ItemRequest-1 DEFINITIONS ::= BEGIN IMPORTS Transaction-Id, Service-Date-Time, System-Id, Transaction-Type, Delivery-Address, ILL-Service-Type, Requester-Optional-Messages-Type, Search-Type, Supply-Medium-Info-Type, Place-On-Hold-Type, Client-Id, Item-Id, Supplemental-Item-Description, Cost-Info-Type, ILL-String, Third-Party-Info-Type, Extension FROM ISO-10161-ILL-1; ItemRequest ::=SEQUENCE { protocol-version-num [0] IMPLICIT INTEGER { version-1 (1), version-2 (2) }, transaction-id [1] IMPLICIT Transaction-Id OPTIONAL, service-date-time [2] IMPLICIT Service-Date-Time OPTIONAL, requester-id [3] IMPLICIT System-Id OPTIONAL, responder-id [4] IMPLICIT System-Id OPTIONAL, transaction-type [5] IMPLICIT Transaction-Type DEFAULT 1, delivery-address [6] IMPLICIT Delivery-Address OPTIONAL, delivery-service Delivery-Service OPTIONAL, billing-address [8] IMPLICIT Delivery-Address OPTIONAL, iLL-service-type [9] IMPLICIT SEQUENCE SIZE (1..5) OF ILL-Service-Type OPTIONAL, responder-specific-service [10] EXTERNAL OPTIONAL, -- use direct reference style requester-optional-messages [11] IMPLICIT Requester-Optional-Messages-Type OPTIONAL, search-type [12] IMPLICIT Search-Type OPTIONAL, supply-medium-info-type [13] IMPLICIT SEQUENCE SIZE (1..7) OF Supply-Medium-Info-Type OPTIONAL, place-on-hold [14] IMPLICIT Place-On-Hold-Type DEFAULT 3, client-id [15] IMPLICIT Client-Id OPTIONAL, item-id [16] IMPLICIT Item-Id OPTIONAL, supplemental-item-description [17] IMPLICIT Supplemental-Item-Description OPTIONAL, cost-info-type [18] IMPLICIT Cost-Info-Type OPTIONAL, copyright-compliance [19] ILL-String OPTIONAL, third-party-info-type [20] IMPLICIT Third-Party-Info-Type OPTIONAL, retry-flag [21] IMPLICIT BOOLEAN DEFAULT FALSE, forward-flag [22] IMPLICIT BOOLEAN DEFAULT FALSE, requester-note [46] ILL-String OPTIONAL, forward-note [47] ILL-String OPTIONAL, iLL-request-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL } END yaz-5.28.0/src/zoom-p.h0000644000175000017500000002304513265142510011516 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file zoom-p.h * \brief Internal header for ZOOM implementation */ #include #include #include #include #include #include #include #include #if HAVE_LIBMEMCACHED #include #endif #if HAVE_HIREDIS #include #endif #define SHPTR 1 typedef struct ZOOM_Event_p *ZOOM_Event; typedef enum { zoom_sru_error, zoom_sru_soap, zoom_sru_get, zoom_sru_post, zoom_sru_solr } zoom_sru_mode; typedef struct ZOOM_task_p *ZOOM_task; #define STATE_IDLE 0 #define STATE_CONNECTING 1 #define STATE_ESTABLISHED 2 struct ZOOM_connection_p { enum oid_proto proto; COMSTACK cs; char *host_port; int error; char *addinfo; char *diagset; int state; int mask; int reconnect_ok; ODR odr_in; ODR odr_out; ODR odr_print; ODR odr_save; char *buf_in; int len_in; char *buf_out; int len_out; char *proxy; char *tproxy; int proxy_mode; char *charset; char *lang; char *cookie_out; char *cookie_in; char *client_IP; char *sru_version; char *user; char *group; char *password; int url_authentication; int async; int support_named_resultsets; int last_event; int maximum_record_size; int preferred_message_size; ZOOM_task tasks; ZOOM_options options; ZOOM_resultset resultsets; ZOOM_Event m_queue_front; ZOOM_Event m_queue_back; zoom_sru_mode sru_mode; int no_redirects; /* 0 for no redirects. >0 for number of redirects */ yaz_cookies_t cookies; char *location; int log_details; int log_api; WRBUF saveAPDU_wrbuf; #if HAVE_LIBMEMCACHED memcached_st *mc_st; #endif #if HAVE_HIREDIS redisContext *redis_c; #endif int expire_search; int expire_record; }; typedef struct ZOOM_record_cache_p *ZOOM_record_cache; #define RECORD_HASH_SIZE 131 struct ZOOM_resultset_p { Z_SortKeySpecList *r_sort_spec; ZOOM_query query; int refcount; Odr_int size; int step; int piggyback; char *setname; ODR odr; ZOOM_record_cache record_hash[RECORD_HASH_SIZE]; ZOOM_options options; ZOOM_connection connection; char **databaseNames; int num_databaseNames; YAZ_MUTEX mutex; #if SHPTR struct WRBUF_shptr *record_wrbuf; #endif ZOOM_resultset next; char *req_facets; ZOOM_facet_field *res_facets; int num_res_facets; char **facets_names; /* redundant. For ZOOM_resultset_facets_names only */ WRBUF mc_key; int live_set; /* 0=no hit count, 1=cached hit, 2=hits + real set */ }; struct facet_term_p { char *term; int frequency; }; struct ZOOM_facet_field_p { char *facet_name; int num_terms; struct facet_term_p *facet_terms; }; struct ZOOM_scanset_p { int refcount; ODR odr; ZOOM_options options; ZOOM_connection connection; ZOOM_query query; Z_ScanResponse *scan_response; Z_SRW_scanResponse *srw_scan_response; char **databaseNames; int num_databaseNames; }; struct ZOOM_package_p { int refcount; ODR odr_out; ZOOM_options options; ZOOM_connection connection; char *buf_out; int len_out; }; struct ZOOM_task_p { int running; int which; union { #define ZOOM_TASK_SEARCH 1 struct { int count; int start; ZOOM_resultset resultset; char *syntax; char *elementSetName; char *schema; } search; #define ZOOM_TASK_CONNECT 3 #define ZOOM_TASK_SCAN 4 struct { ZOOM_scanset scan; } scan; #define ZOOM_TASK_PACKAGE 5 ZOOM_package package; #define ZOOM_TASK_SORT 6 struct { ZOOM_resultset resultset; ZOOM_query q; } sort; } u; ZOOM_task next; }; typedef enum { zoom_pending, zoom_complete } zoom_ret; void ZOOM_options_addref (ZOOM_options opt); void ZOOM_handle_Z3950_apdu(ZOOM_connection c, Z_APDU *apdu); void ZOOM_set_dset_error(ZOOM_connection c, int error, const char *dset, const char *addinfo, const char *addinfo2); void ZOOM_set_error(ZOOM_connection c, int error, const char *addinfo); ZOOM_Event ZOOM_Event_create(int kind); void ZOOM_connection_put_event(ZOOM_connection c, ZOOM_Event event); zoom_ret ZOOM_connection_Z3950_search(ZOOM_connection c); zoom_ret ZOOM_connection_Z3950_send_scan(ZOOM_connection c); zoom_ret ZOOM_send_buf(ZOOM_connection c); zoom_ret send_Z3950_sort(ZOOM_connection c, ZOOM_resultset resultset); char **ZOOM_connection_get_databases(ZOOM_connection con, ZOOM_options options, int *num, ODR odr); zoom_ret ZOOM_connection_Z3950_send_init(ZOOM_connection c); ZOOM_task ZOOM_connection_add_task(ZOOM_connection c, int which); void ZOOM_connection_remove_task(ZOOM_connection c); void ZOOM_connection_remove_tasks(ZOOM_connection c); int ZOOM_test_reconnect(ZOOM_connection c); ZOOM_record ZOOM_record_cache_lookup(ZOOM_resultset r, int pos, const char *syntax, const char *elementSetName, const char *schema); void ZOOM_record_cache_add(ZOOM_resultset r, Z_NamePlusRecord *npr, int pos, const char *syntax, const char *elementSetName, const char *schema, Z_SRW_diagnostic *diag); Z_Query *ZOOM_query_get_Z_Query(ZOOM_query s); Z_SortKeySpecList *ZOOM_query_get_sortspec(ZOOM_query s); const char *ZOOM_query_get_query_string(ZOOM_query s); const char *ZOOM_query_get_sru11(ZOOM_query s); void ZOOM_query_get_hash(ZOOM_query s, WRBUF w); int ZOOM_uri_to_code(const char *uri); zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c); zoom_ret ZOOM_connection_srw_send_scan(ZOOM_connection c); int ZOOM_handle_sru(ZOOM_connection c, Z_HTTP_Response *hres, zoom_ret *cret, char **addinfo); void ZOOM_set_HTTP_error(ZOOM_connection c, int error, const char *addinfo, const char *addinfo2); ZOOM_Event ZOOM_connection_get_event(ZOOM_connection c); void ZOOM_connection_remove_events(ZOOM_connection c); void ZOOM_Event_destroy(ZOOM_Event event); zoom_ret ZOOM_send_GDU(ZOOM_connection c, Z_GDU *gdu); void ZOOM_handle_facet_list(ZOOM_resultset r, Z_FacetList *fl); void ZOOM_memcached_init(ZOOM_connection c); int ZOOM_memcached_configure(ZOOM_connection c); void ZOOM_memcached_destroy(ZOOM_connection c); void ZOOM_memcached_resultset(ZOOM_resultset r, ZOOM_query q); void ZOOM_memcached_search(ZOOM_connection c, ZOOM_resultset r); void ZOOM_memcached_hitcount(ZOOM_connection c, ZOOM_resultset result, Z_OtherInformation *oi, const char *precision); void ZOOM_memcached_add(ZOOM_resultset r, Z_NamePlusRecord *npr, int pos, const char *syntax, const char *elementSetName, const char *schema, Z_SRW_diagnostic *diag); Z_NamePlusRecord *ZOOM_memcached_lookup(ZOOM_resultset r, int pos, const char *syntax, const char *elementSetName, const char *schema); ZOOM_record ZOOM_record_cache_lookup_i(ZOOM_resultset r, int pos, const char *syntax, const char *elementSetName, const char *schema); void ZOOM_handle_facet_result(ZOOM_connection c, ZOOM_resultset r, Z_OtherInformation *o); void ZOOM_handle_search_result(ZOOM_connection c, ZOOM_resultset resultset, Z_OtherInformation *o); /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-facet-1.c0000644000175000017500000000236413273126163011765 00000000000000/** \file z-facet-1.c \brief ASN.1 Module UserInfoFormat-facet-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_FacetList(ODR o, Z_FacetList **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_FacetField, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_FacetField(ODR o, Z_FacetField **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_AttributeList, &(*p)->attributes, ODR_CONTEXT, 1, 0, "attributes") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_FacetTerm, &(*p)->terms, &(*p)->num_terms, "terms") || odr_ok(o)) && odr_sequence_end(o); } int z_FacetTerm(ODR o, Z_FacetTerm **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_Term(o, &(*p)->term, 0, "term") && odr_integer(o, &(*p)->count, 0, "count") && odr_sequence_end(o); } yaz-5.28.0/src/iconv_encode_iso_8859_1.c0000644000175000017500000002233013265142510014506 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief ISO-8859-1 encoding / decoding * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include "iconv-p.h" struct encoder_data { unsigned long compose_char; }; static struct { unsigned long x1, x2; unsigned y; } latin1_comb[] = { { 'A', 0x0300, 0xc0}, /* LATIN CAPITAL LETTER A WITH GRAVE */ { 'A', 0x0301, 0xc1}, /* LATIN CAPITAL LETTER A WITH ACUTE */ { 'A', 0x0302, 0xc2}, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ { 'A', 0x0303, 0xc3}, /* LATIN CAPITAL LETTER A WITH TILDE */ { 'A', 0x0308, 0xc4}, /* LATIN CAPITAL LETTER A WITH DIAERESIS */ { 'A', 0x030a, 0xc5}, /* LATIN CAPITAL LETTER A WITH RING ABOVE */ /* no need for 0xc6 LATIN CAPITAL LETTER AE */ { 'C', 0x0327, 0xc7}, /* LATIN CAPITAL LETTER C WITH CEDILLA */ { 'E', 0x0300, 0xc8}, /* LATIN CAPITAL LETTER E WITH GRAVE */ { 'E', 0x0301, 0xc9}, /* LATIN CAPITAL LETTER E WITH ACUTE */ { 'E', 0x0302, 0xca}, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ { 'E', 0x0308, 0xcb}, /* LATIN CAPITAL LETTER E WITH DIAERESIS */ { 'I', 0x0300, 0xcc}, /* LATIN CAPITAL LETTER I WITH GRAVE */ { 'I', 0x0301, 0xcd}, /* LATIN CAPITAL LETTER I WITH ACUTE */ { 'I', 0x0302, 0xce}, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ { 'I', 0x0308, 0xcf}, /* LATIN CAPITAL LETTER I WITH DIAERESIS */ { 'N', 0x0303, 0xd1}, /* LATIN CAPITAL LETTER N WITH TILDE */ { 'O', 0x0300, 0xd2}, /* LATIN CAPITAL LETTER O WITH GRAVE */ { 'O', 0x0301, 0xd3}, /* LATIN CAPITAL LETTER O WITH ACUTE */ { 'O', 0x0302, 0xd4}, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ { 'O', 0x0303, 0xd5}, /* LATIN CAPITAL LETTER O WITH TILDE */ { 'O', 0x0308, 0xd6}, /* LATIN CAPITAL LETTER O WITH DIAERESIS */ /* omitted: 0xd7 MULTIPLICATION SIGN */ /* omitted: 0xd8 LATIN CAPITAL LETTER O WITH STROKE */ { 'U', 0x0300, 0xd9}, /* LATIN CAPITAL LETTER U WITH GRAVE */ { 'U', 0x0301, 0xda}, /* LATIN CAPITAL LETTER U WITH ACUTE */ { 'U', 0x0302, 0xdb}, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ { 'U', 0x0308, 0xdc}, /* LATIN CAPITAL LETTER U WITH DIAERESIS */ { 'Y', 0x0301, 0xdd}, /* LATIN CAPITAL LETTER Y WITH ACUTE */ /* omitted: 0xde LATIN CAPITAL LETTER THORN */ /* omitted: 0xdf LATIN SMALL LETTER SHARP S */ { 'a', 0x0300, 0xe0}, /* LATIN SMALL LETTER A WITH GRAVE */ { 'a', 0x0301, 0xe1}, /* LATIN SMALL LETTER A WITH ACUTE */ { 'a', 0x0302, 0xe2}, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ { 'a', 0x0303, 0xe3}, /* LATIN SMALL LETTER A WITH TILDE */ { 'a', 0x0308, 0xe4}, /* LATIN SMALL LETTER A WITH DIAERESIS */ { 'a', 0x030a, 0xe5}, /* LATIN SMALL LETTER A WITH RING ABOVE */ /* omitted: 0xe6 LATIN SMALL LETTER AE */ { 'c', 0x0327, 0xe7}, /* LATIN SMALL LETTER C WITH CEDILLA */ { 'e', 0x0300, 0xe8}, /* LATIN SMALL LETTER E WITH GRAVE */ { 'e', 0x0301, 0xe9}, /* LATIN SMALL LETTER E WITH ACUTE */ { 'e', 0x0302, 0xea}, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ { 'e', 0x0308, 0xeb}, /* LATIN SMALL LETTER E WITH DIAERESIS */ { 'i', 0x0300, 0xec}, /* LATIN SMALL LETTER I WITH GRAVE */ { 'i', 0x0301, 0xed}, /* LATIN SMALL LETTER I WITH ACUTE */ { 'i', 0x0302, 0xee}, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ { 'i', 0x0308, 0xef}, /* LATIN SMALL LETTER I WITH DIAERESIS */ /* omitted: 0xf0 LATIN SMALL LETTER ETH */ { 'n', 0x0303, 0xf1}, /* LATIN SMALL LETTER N WITH TILDE */ { 'o', 0x0300, 0xf2}, /* LATIN SMALL LETTER O WITH GRAVE */ { 'o', 0x0301, 0xf3}, /* LATIN SMALL LETTER O WITH ACUTE */ { 'o', 0x0302, 0xf4}, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ { 'o', 0x0303, 0xf5}, /* LATIN SMALL LETTER O WITH TILDE */ { 'o', 0x0308, 0xf6}, /* LATIN SMALL LETTER O WITH DIAERESIS */ /* omitted: 0xf7 DIVISION SIGN */ /* omitted: 0xf8 LATIN SMALL LETTER O WITH STROKE */ { 'u', 0x0300, 0xf9}, /* LATIN SMALL LETTER U WITH GRAVE */ { 'u', 0x0301, 0xfa}, /* LATIN SMALL LETTER U WITH ACUTE */ { 'u', 0x0302, 0xfb}, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ { 'u', 0x0308, 0xfc}, /* LATIN SMALL LETTER U WITH DIAERESIS */ { 'y', 0x0301, 0xfd}, /* LATIN SMALL LETTER Y WITH ACUTE */ /* omitted: 0xfe LATIN SMALL LETTER THORN */ { 'y', 0x0308, 0xff}, /* LATIN SMALL LETTER Y WITH DIAERESIS */ { 0, 0, 0} }; int yaz_iso_8859_1_lookup_y(unsigned long v, unsigned long *x1, unsigned long *x2) { if (v >= 0xc0 && v <= 0xff) /* optimization. min and max .y values */ { int i; for (i = 0; latin1_comb[i].x1; i++) { if (v == latin1_comb[i].y) { *x1 = latin1_comb[i].x1; *x2 = latin1_comb[i].x2; return 1; } } } return 0; } int yaz_iso_8859_1_lookup_x12(unsigned long x1, unsigned long x2, unsigned long *y) { /* For MARC8s we try to get a Latin-1 page code out of it */ int i; for (i = 0; latin1_comb[i].x1; i++) if (x2 == latin1_comb[i].x2 && x1 == latin1_comb[i].x1) { *y = latin1_comb[i].y; return 1; } return 0; } static size_t write_iso_8859_1(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft) { struct encoder_data *w = (struct encoder_data *) e->data; /* list of two char unicode sequence that, when combined, are equivalent to single unicode chars that can be represented in ISO-8859-1/Latin-1. Regular iconv on Linux at least does not seem to convert these, but since MARC-8 to UTF-8 generates these composed sequence we get a better chance of a successful MARC-8 -> ISO-8859-1 conversion */ unsigned char *outp = (unsigned char *) *outbuf; if (w->compose_char) { int i; for (i = 0; latin1_comb[i].x1; i++) if (w->compose_char == latin1_comb[i].x1 && x == latin1_comb[i].x2) { x = latin1_comb[i].y; break; } if (*outbytesleft < 1) { /* no room. Retain compose_char and bail out */ yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t)(-1); } if (!latin1_comb[i].x1) { /* not found. Just write compose_char */ *outp++ = (unsigned char) w->compose_char; (*outbytesleft)--; *outbuf = (char *) outp; } /* compose_char used so reset it. x now holds current char */ w->compose_char = 0; } if (x > 32 && x < 127 && w->compose_char == 0) { w->compose_char = x; return 0; } else if (x > 255 || x < 1) { yaz_iconv_set_errno(cd, YAZ_ICONV_EILSEQ); return (size_t) -1; } else if (*outbytesleft < 1) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t)(-1); } *outp++ = (unsigned char) x; (*outbytesleft)--; *outbuf = (char *) outp; return 0; } static size_t flush_iso_8859_1(yaz_iconv_t cd, yaz_iconv_encoder_t e, char **outbuf, size_t *outbytesleft) { struct encoder_data *w = (struct encoder_data *) e->data; if (w->compose_char) { unsigned char *outp = (unsigned char *) *outbuf; if (*outbytesleft < 1) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t)(-1); } *outp++ = (unsigned char) w->compose_char; (*outbytesleft)--; *outbuf = (char *) outp; w->compose_char = 0; } return 0; } void init_iso_8859_1(yaz_iconv_encoder_t e) { struct encoder_data *w = (struct encoder_data *) e->data; w->compose_char = 0; } void destroy_iso_8859_1(yaz_iconv_encoder_t e) { xfree(e->data); } yaz_iconv_encoder_t yaz_iso_8859_1_encoder(const char *tocode, yaz_iconv_encoder_t e) { if (!yaz_matchstr(tocode, "iso88591")) { struct encoder_data *data = (struct encoder_data *) xmalloc(sizeof(*data)); e->data = data; e->write_handle = write_iso_8859_1; e->flush_handle = flush_iso_8859_1; e->init_handle = init_iso_8859_1; e->destroy_handle = destroy_iso_8859_1; return e; } return 0; } static unsigned long read_ISO8859_1(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { unsigned long x = inp[0]; *no_read = 1; return x; } yaz_iconv_decoder_t yaz_iso_8859_1_decoder(const char *fromcode, yaz_iconv_decoder_t d) { if (!yaz_matchstr(fromcode, "iso88591")) { d->read_handle = read_ISO8859_1; return d; } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/nmemsdup.c0000644000175000017500000001027413265142510012120 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file nmemsdup.c * \brief Implements NMEM dup utilities */ #if HAVE_CONFIG_H #include #endif #include #include char *nmem_strdup(NMEM mem, const char *src) { char *dst = (char *) nmem_malloc(mem, strlen(src)+1); strcpy(dst, src); return dst; } char *nmem_strdup_null(NMEM mem, const char *src) { if (!src) return 0; else return nmem_strdup(mem, src); } char *nmem_strdupn(NMEM mem, const char *src, size_t n) { char *dst = (char *) nmem_malloc(mem, n+1); memcpy(dst, src, n); dst[n] = '\0'; return dst; } nmem_int_t *nmem_intdup(NMEM mem, nmem_int_t v) { nmem_int_t *dst = (nmem_int_t*) nmem_malloc(mem, sizeof(*dst)); *dst = v; return dst; } nmem_bool_t *nmem_booldup(NMEM mem, nmem_bool_t v) { nmem_bool_t *dst = (nmem_bool_t*) nmem_malloc(mem, sizeof(*dst)); *dst = v; return dst; } void nmem_strsplit_blank(NMEM nmem, const char *dstr, char ***darray, int *num) { nmem_strsplit(nmem, " ", dstr, darray, num); } void nmem_strsplit(NMEM nmem, const char *delim, const char *dstr, char ***darray, int *num) { nmem_strsplitx(nmem, delim, dstr, darray, num, 1); } void nmem_strsplitx(NMEM nmem, const char *delim, const char *dstr, char ***darray, int *num, int collapse) { nmem_strsplit_escape(nmem, delim, dstr, darray, num, collapse, 0); } void nmem_strsplit_escape(NMEM nmem, const char *delim, const char *dstr, char ***darray, int *num, int collapse, int escape_char) { nmem_strsplit_escape2(nmem, delim, dstr, darray, num, collapse, escape_char, 1); } void nmem_strsplit_escape2(NMEM nmem, const char *delim, const char *dstr, char ***darray, int *num, int collapse, int escape_char, int subst_escape) { *darray = 0; /* two passes over the input string.. */ while (1) { size_t i = 0; const char *cp = dstr; while (1) { const char *cp0; if (collapse) { if (!*cp) break; while (*cp && strchr(delim, *cp) && *cp != escape_char) cp++; if (!*cp) break; } cp0 = cp; while (*cp && !strchr(delim, *cp)) { if (*cp == escape_char) cp++; cp++; } if (*darray) { (*darray)[i] = nmem_strdupn(nmem, cp0, cp - cp0); if (subst_escape) { char *dst = (*darray)[i]; const char *src = dst; while (*src != '\0') { if (*src == escape_char && src[1]) src++; *dst++ = *src++; } *dst = '\0'; } } i++; if (!collapse) { if (!*cp) break; cp++; } } *num = i; if (!*num) break; /* no items, so stop, *darray=0 already */ else if (*darray) break; /* second pass, stop */ *darray = (char **) nmem_malloc(nmem, *num * sizeof(**darray)); } } #if YAZ_HAVE_XML2 char *nmem_text_node_cdata(const xmlNode *ptr_cdata, NMEM nmem) { char *cdata; int len = 0; const xmlNode *ptr; for (ptr = ptr_cdata; ptr; ptr = ptr->next) if (ptr->type == XML_TEXT_NODE) len += xmlStrlen(ptr->content); cdata = (char *) nmem_malloc(nmem, len+1); *cdata = '\0'; for (ptr = ptr_cdata; ptr; ptr = ptr->next) if (ptr->type == XML_TEXT_NODE) strcat(cdata, (const char *) ptr->content); return cdata; } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zes-pquery.c0000644000175000017500000000567113273126163012426 00000000000000/** \file zes-pquery.c \brief ASN.1 Module ESFormat-PersistentQuery Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_PQueryPersistentQueryEsRequest(ODR o, Z_PQueryPersistentQueryEsRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_PQueryOriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT, 1, 1, "toKeep") && odr_explicit_tag(o, z_PQueryOriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT, 2, 0, "notToKeep") && odr_sequence_end(o); } int z_PQueryPersistentQueryTaskPackage(ODR o, Z_PQueryPersistentQueryTaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_PQueryOriginPartToKeep, &(*p)->originPart, ODR_CONTEXT, 1, 1, "originPart") && odr_explicit_tag(o, z_PQueryTargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 0, "targetPart") && odr_sequence_end(o); } int z_PQueryPersistentQuery(ODR o, Z_PQueryPersistentQuery **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PQueryPersistentQuery_esRequest, (Odr_fun) z_PQueryPersistentQueryEsRequest, "esRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PQueryPersistentQuery_taskPackage, (Odr_fun) z_PQueryPersistentQueryTaskPackage, "taskPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PQueryOriginPartToKeep(ODR o, Z_PQueryOriginPartToKeep **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->dbNames, &(*p)->num_dbNames, "dbNames") || odr_ok(o)) && odr_explicit_tag(o, z_OtherInformation, &(*p)->additionalSearchInfo, ODR_CONTEXT, 3, 1, "additionalSearchInfo") && odr_sequence_end(o); } int z_PQueryOriginPartNotToKeep(ODR o, Z_PQueryOriginPartNotToKeep **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PQueryOriginPartNotToKeep_package, (Odr_fun) z_InternationalString, "package"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_PQueryOriginPartNotToKeep_query, (Odr_fun) z_Query, "query"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PQueryTargetPart(ODR o, Z_PQueryTargetPart **p, int opt, const char *name) { return z_Query (o, p, opt, name); } yaz-5.28.0/src/charneg-3.asn0000644000175000017500000002312113250277530012376 00000000000000NegotiationRecordDefinition-charSetandLanguageNegotiation-3 {Z39-50-negotiationRecordDefinition CharSetandLanguageNegotiation-3 (3)} DEFINITIONS ::= BEGIN IMPORTS LanguageCode FROM RecordSyntax-explain; CharSetandLanguageNegotiation ::= CHOICE{ proposal [1] IMPLICIT OriginProposal, response [2] IMPLICIT TargetResponse} -- -- For character sets: -- Origin proposes one, two, or all three of the following, in order of -- preference: -- (a) 2022 character sets. -- (b) 10646 character set. -- (c) Private character set. -- -- The target responds with one of (a), (b), or (c), indicating the -- character set(s) to be supported for all name and message strings. -- -- If the origin includes (a), -- the origin proposes: -- (1) A proposed environment: 7-bit, 8-bit, or no-preference. -- (2) A set of iso 2022 registration numbers. -- (3) One or more proposed initial sets of registration numbers, -- for c0, c1, g0, g1, g2 and g3. These must come from (2). -- (4) The proposed encoding level. -- And if the target selects (a), it responds with: -- (1) A selected environment: 7-bit or 8-bit. -- (2) A subset of the set of iso 2022 registration numbers proposed -- by the origin. -- (3) The initial set of registrations, which must come from (2) -- but need not be from the set of initial registrations proposed -- by the origin. -- (4) The encoding level; less than or equal to that proposed. -- -- If the origin includes (b), -- The origin proposes: -- (1) (optionally) A list of collections (i.e. subsets of characters from the -- complete 10646 definition). -- (2) An implementation level. -- (3) Syntax/form: e.g. ucs-2, ucs-4, utf-8, utf-16. -- And if the target selects (b), it responds by choosing a subset of the -- collections proposed by the origin in (1) and an implementation level less -- than or equal to that proposed by the origin in (2). -- -- If the origin includes (c), the origin proposes one of the following: -- (1) A list of private character sets, by one or more object -- identifiers. -- (2) A list of private character sets, by an EXTERNAL. -- (3) An indication to use a private, previously agreed upon -- character set. -- And if the target selects (c): -- - If the origin proposed (1), the target should respond with (1), and -- the list of object identifiers should be a subset of the list that -- the origin included. -- - If the origin proposed (2), the target should respond with (2), using -- the same EXTERNAL definition (but not necessarily the same content) -- used by the origin. -- - If the origin proposed (3), the target should respond with (3). -- -- For Languages: -- The origin optionally proposes one or more language codes. The target -- response may include a single language code, which indicates the -- language to be used for all message strings. The target may include or -- omit this, whether or not the origin included a proposed set, and the -- language code indicated need not be from among those proposed. -- -- OriginProposal ::= SEQUENCE { proposedCharSets [1] IMPLICIT SEQUENCE OF CHOICE{ -- Each should occur at most once, and in order of preference -- (the "order of preference" is the reason why this is -- "SEQUENCE OF CHOICE" rather than just "SEQUENCE") iso2022 [1] Iso2022, iso10646 [2] IMPLICIT Iso10646, private [3] PrivateCharacterSet} OPTIONAL, -- proposedCharSets must be omitted -- if origin proposes version 2 proposedlanguages [2] IMPLICIT SEQUENCE OF LanguageCode OPTIONAL, recordsInSelectedCharSets [3] IMPLICIT BOOLEAN OPTIONAL -- default 'false'. See rule 6 above. } TargetResponse ::= SEQUENCE{ selectedCharSets [1] CHOICE{ iso2022 [1] Iso2022, iso10646 [2] IMPLICIT Iso10646, private [3] PrivateCharacterSet, none [4] IMPLICIT NULL -- If selected, no negotiation -- is assumed to be in force -- for character sets. } OPTIONAL, -- Omitted if and only if proposedCharSets -- was Omitted in the request. selectedLanguage [2] IMPLICIT LanguageCode OPTIONAL, recordsInSelectedCharSets [3] IMPLICIT BOOLEAN OPTIONAL -- Omitted if and only if 'recordsInSelectedCharSets' was omitted -- in the request. See rule 6 above. } PrivateCharacterSet ::= CHOICE{ viaOid [1] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER, externallySpecified [2] IMPLICIT EXTERNAL, previouslyAgreedUpon [3] IMPLICIT NULL} -- IMPORTED -- LanguageCode ::= GeneralString -- from ANSI Z39.53-1994 -- Definition of ISO2022 -- For ISO 2022, the following is negotiated: -- 1) The environment: 7-bit or 8-bit; -- 2) a set of registration numbers (from the ISO Register of coded -- character sets) for graphical and control character sets; -- 3) g0, g1, g2, g3, c0, c1, the registration numbers of the graphical and -- control character sets that are initially designated to g0, g1, etc. -- The origin submits one or more sequences of values for -- g0, g1, g2, g3, c0, c1 (for each sequence: at least one of -- g0 and g1 must be included; g2 and g3 are optional and -- may be included only if g1 is included; -- c0 should be included; and c1 is optional); the target -- selects one of the proposed sequences. -- 4) gleft: which of g0, g1, g2 or g3, initially has GL shift status in -- an 8-bit environment or has shift status in a 7-bit environment; and -- 5) gright: which of g1, g2 or g3 initially has GR shift status in an -- 8-bit environment. Iso2022 ::= CHOICE{ originProposal [1] IMPLICIT SEQUENCE{ proposedEnvironment [0] Environment OPTIONAL, -- omitted means no preference proposedSets [1] IMPLICIT SEQUENCE OF INTEGER, proposedInitialSets [2] IMPLICIT SEQUENCE OF InitialSet, proposedLeftAndRight [3] IMPLICIT LeftAndRight}, targetResponse [2] IMPLICIT SEQUENCE{ selectedEnvironment [0] Environment, selectedSets [1] IMPLICIT SEQUENCE OF INTEGER, selectedinitialSet [2] IMPLICIT InitialSet, selectedLeftAndRight [3] IMPLICIT LeftAndRight}} Environment ::= CHOICE{ sevenBit [1] IMPLICIT NULL, eightBit [2] IMPLICIT NULL} InitialSet::= SEQUENCE{ g0 [0] IMPLICIT INTEGER OPTIONAL, g1 [1] IMPLICIT INTEGER OPTIONAL, -- one of g0 and g1 must be included g2 [2] IMPLICIT INTEGER OPTIONAL, g3 [3] IMPLICIT INTEGER OPTIONAL, --g2 and/or g3 may be included -- only if g1 was included c0 [4] IMPLICIT INTEGER, c1 [5] IMPLICIT INTEGER OPTIONAL} LeftAndRight ::= SEQUENCE{ gLeft [3] IMPLICIT INTEGER{ g0 (0), g1 (1), g2 (2), g3 (3)}, gRight [4] IMPLICIT INTEGER{ g1 (1), g2 (2), g3 (3)} OPTIONAL} -- Definition of Iso10646 -- -- The 10646 object identifier looks like: -- 1.0.10646.1.implementationLevel.repertoireSubset.arc1.arc2. .... -- -- (The second '1' is for "part 1" of 10646.) -- -- ImplementationLevel is 1-3 -- -- repertoireSubset is 0 or 1, for 'all' or 'collections'. -- The arcs are present only if repertoireSubset is 'collections', -- in which case arc1, arc2, etc., are the -- identifiers of collections of character repertoires. -- -- There is a second 10646 oid, for specifying syntax/form: -- 1.0.10646.1.0.form -- -- (The second '0' represents "transfer syntax".) -- -- where values of form include: -- 2: ucs-2 -- 4: ucs-4 -- 5: utf-16 -- 8: utf-8 Iso10646 ::= SEQUENCE{ collections [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL, --oid of form 1.0.10646.1.implementationLevel -- .repertoireSubset.arc1.arc2. .... -- Target to choose a subset of the collections -- proposed by the origin, and an implementation level -- less than or equal to that proposed. -- -- when 'collections' is omitted, -- 'implementationLevel' defaults to 3. -- encodingLevel [2] IMPLICIT OBJECT IDENTIFIER -- oid of form 1.0.10646.1.0.form -- where value of 'form' is 2, 4, 5, or 8 -- for ucs-2, ucs-4, utf-16, utf-8 } END yaz-5.28.0/src/dirent.c0000644000175000017500000000247013265142510011554 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file \brief Implement opendir/readdir/closedir on Windows */ #if HAVE_CONFIG_H #include #endif #include #ifdef WIN32 #include #endif #include #include #include #ifdef WIN32 struct DIR { HANDLE handle; WIN32_FIND_DATA find_data; struct dirent entry; }; DIR *opendir(const char *name) { char fullName[MAX_PATH+1]; DIR *dd = malloc(sizeof(*dd)); if (!dd) return NULL; strcpy(fullName, name); strcat(fullName, "\\*.*"); dd->handle = FindFirstFile(fullName, &dd->find_data); return dd; } struct dirent *readdir(DIR *dd) { if (dd->handle == INVALID_HANDLE_VALUE) return NULL; strcpy(dd->entry.d_name, dd->find_data.cFileName); if (!FindNextFile(dd->handle, &dd->find_data)) { FindClose(dd->handle); dd->handle = INVALID_HANDLE_VALUE; } return &dd->entry; } void closedir(DIR *dd) { if (dd->handle != INVALID_HANDLE_VALUE) FindClose(dd->handle); if (dd) free(dd); } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cookie.c0000644000175000017500000000550713265142510011544 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cookie.c * \brief HTTP cookie utility */ #if HAVE_CONFIG_H #include #endif #include #include struct cookie { char *name; char *value; char *path; char *domain; struct cookie *next; }; struct yaz_cookies_s { struct cookie *list; }; yaz_cookies_t yaz_cookies_create(void) { yaz_cookies_t yc = xmalloc(sizeof(*yc)); yc->list = 0; return yc; } void yaz_cookies_destroy(yaz_cookies_t yc) { yaz_cookies_reset(yc); xfree(yc); } void yaz_cookies_reset(yaz_cookies_t yc) { if (yc) { struct cookie *c = yc->list; while (c) { struct cookie *c1 = c->next; xfree(c->name); xfree(c->value); xfree(c->path); xfree(c->domain); xfree(c); c = c1; } yc->list = 0; } } void yaz_cookies_response(yaz_cookies_t yc, Z_HTTP_Response *res) { struct Z_HTTP_Header *h; for (h = res->headers; h; h = h->next) { if (!strcmp(h->name, "Set-Cookie")) { const char *cp; const char *cp1; size_t len; struct cookie *c; cp = strchr(h->value, '='); if (!cp) continue; len = cp - h->value; for (c = yc->list; c; c = c->next) if (!strncmp(h->value, c->name, len) && c->name[len] == '\0') break; if (!c) { c = xmalloc(sizeof(*c)); c->name = xstrndup(h->value, len); c->value = 0; c->path = 0; c->domain = 0; c->next = yc->list; yc->list = c; } cp++; /* skip = */ cp1 = strchr(cp, ';'); if (!cp1) cp1 = cp + strlen(cp); xfree(c->value); c->value = xstrndup(cp, cp1 - cp); } } } void yaz_cookies_request(yaz_cookies_t yc, ODR odr, Z_HTTP_Request *req) { struct cookie *c; size_t sz = 0; for (c = yc->list; c; c = c->next) { if (c->name && c->value) sz += strlen(c->name) + strlen(c->value) + 3; } if (sz) { char *buf = odr_malloc(odr, sz + 1); *buf = '\0'; for (c = yc->list; c; c = c->next) { if (*buf) strcat(buf, "; "); strcat(buf, c->name); strcat(buf, "="); strcat(buf, c->value); } z_HTTP_header_add(odr, &req->headers, "Cookie", buf); } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/icu_tokenizer.c0000644000175000017500000001331113265142510013135 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief ICU tokenization - using ubrk_-functions from ICU */ #if HAVE_CONFIG_H #include "config.h" #endif #if YAZ_HAVE_ICU #include #include #include #include #include #include #include #include /* some more string fcns*/ #include /* char names */ struct icu_tokenizer { char action; UBreakIterator* bi; struct icu_buf_utf16 * buf16; int32_t token_count; int32_t token_id; int32_t token_start; int32_t token_end; /* keep always invariant 0 <= token_start <= token_end <= buf16->utf16_len and invariant 0 <= token_id <= token_count */ }; static void icu_tokenizer_reset(struct icu_tokenizer *tokenizer, char action) { tokenizer->action = action; tokenizer->bi = 0; tokenizer->buf16 = icu_buf_utf16_create(0); tokenizer->token_count = 0; tokenizer->token_id = 0; tokenizer->token_start = 0; tokenizer->token_end = 0; tokenizer->bi = 0; } struct icu_tokenizer *icu_tokenizer_clone(struct icu_tokenizer *old) { int32_t bufferSize = U_BRK_SAFECLONE_BUFFERSIZE; UErrorCode status = U_ZERO_ERROR; struct icu_tokenizer * tokenizer = (struct icu_tokenizer *) xmalloc(sizeof(struct icu_tokenizer)); assert(old); icu_tokenizer_reset(tokenizer, old->action); assert(old->bi); tokenizer->bi = ubrk_safeClone(old->bi, NULL, &bufferSize, &status); if (U_SUCCESS(status)) return tokenizer; return tokenizer; } struct icu_tokenizer *icu_tokenizer_create(const char *locale, char action, UErrorCode *status) { struct icu_tokenizer *tokenizer = (struct icu_tokenizer *) xmalloc(sizeof(struct icu_tokenizer)); icu_tokenizer_reset(tokenizer, action); switch (tokenizer->action) { case 'l': case 'L': tokenizer->bi = ubrk_open(UBRK_LINE, locale, 0, 0, status); break; case 's': case 'S': tokenizer->bi = ubrk_open(UBRK_SENTENCE, locale, 0, 0, status); break; case 'w': case 'W': tokenizer->bi = ubrk_open(UBRK_WORD, locale, 0, 0, status); break; case 'c': case 'C': tokenizer->bi = ubrk_open(UBRK_CHARACTER, locale, 0, 0, status); break; case 't': case 'T': tokenizer->bi = ubrk_open(UBRK_TITLE, locale, 0, 0, status); break; default: *status = U_UNSUPPORTED_ERROR; return 0; break; } /* ICU error stuff is a very funny business */ if (U_SUCCESS(*status)) return tokenizer; /* freeing if failed */ icu_tokenizer_destroy(tokenizer); return 0; } void icu_tokenizer_destroy(struct icu_tokenizer *tokenizer) { if (tokenizer) { icu_buf_utf16_destroy(tokenizer->buf16); if (tokenizer->bi) ubrk_close(tokenizer->bi); xfree(tokenizer); } } int icu_tokenizer_attach(struct icu_tokenizer *tokenizer, struct icu_buf_utf16 *src16, UErrorCode *status) { if (!tokenizer || !tokenizer->bi || !src16) return 0; icu_buf_utf16_copy(tokenizer->buf16, src16); tokenizer->token_count = 0; tokenizer->token_id = 0; tokenizer->token_start = 0; tokenizer->token_end = 0; ubrk_setText(tokenizer->bi, tokenizer->buf16->utf16, tokenizer->buf16->utf16_len, status); if (U_FAILURE(*status)) return 0; return 1; } int32_t icu_tokenizer_next_token(struct icu_tokenizer *tokenizer, struct icu_buf_utf16 *tkn16, UErrorCode *status, size_t *start, size_t *len) { int32_t tkn_start = 0; int32_t tkn_end = 0; int32_t tkn_len = 0; if (!tokenizer || !tokenizer->bi || !tokenizer->buf16 || !tokenizer->buf16->utf16_len) return 0; /* never change tokenizer->buf16 and keep always invariant 0 <= tokenizer->token_start <= tokenizer->token_end <= tokenizer->buf16->utf16_len returns length of token */ if (0 == tokenizer->token_end) /* first call */ tkn_start = ubrk_first(tokenizer->bi); else /* successive calls */ tkn_start = tokenizer->token_end; /* get next position */ tkn_end = ubrk_next(tokenizer->bi); /* repairing invariant at end of ubrk, which is UBRK_DONE = -1 */ if (UBRK_DONE == tkn_end) tkn_end = tokenizer->buf16->utf16_len; /* copy out if everything is well */ if (U_FAILURE(*status)) return 0; /* everything OK, now update internal state */ tkn_len = tkn_end - tkn_start; if (0 < tkn_len) { tokenizer->token_count++; tokenizer->token_id++; } else tokenizer->token_id = 0; tokenizer->token_start = tkn_start; tokenizer->token_end = tkn_end; *start = tkn_start; *len = tkn_end - tkn_start; /* copying into token buffer if it exists */ if (tkn16) { if (tkn16->utf16_cap < tkn_len) icu_buf_utf16_resize(tkn16, (size_t) tkn_len * 2); u_strncpy(tkn16->utf16, &(tokenizer->buf16->utf16)[tkn_start], tkn_len); tkn16->utf16_len = tkn_len; } return tkn_len; } int32_t icu_tokenizer_token_count(struct icu_tokenizer *tokenizer) { return tokenizer->token_count; } #endif /* YAZ_HAVE_ICU */ /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/siconv.c0000644000175000017500000001672113265142510011574 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief Implements simple ICONV * * This implements an interface similar to that of iconv and * is used by YAZ to interface with iconv (if present). * For systems where iconv is not present, this layer * provides a few important conversions: UTF-8, MARC-8, Latin-1. * */ #if HAVE_CONFIG_H #include #endif #include #include #include #if HAVE_ICONV_H #include #endif #include #include #include "iconv-p.h" struct yaz_iconv_struct { int my_errno; int init_flag; size_t no_read_x; unsigned long unget_x; #if HAVE_ICONV_H iconv_t iconv_cd; #endif struct yaz_iconv_encoder_s encoder; struct yaz_iconv_decoder_s decoder; }; int yaz_iconv_isbuiltin(yaz_iconv_t cd) { return cd->decoder.read_handle && cd->encoder.write_handle; } static int prepare_encoders(yaz_iconv_t cd, const char *tocode) { if (yaz_marc8_encoder(tocode, &cd->encoder)) return 1; if (yaz_utf8_encoder(tocode, &cd->encoder)) return 1; if (yaz_ucs4_encoder(tocode, &cd->encoder)) return 1; if (yaz_iso_8859_1_encoder(tocode, &cd->encoder)) return 1; if (yaz_iso_5428_encoder(tocode, &cd->encoder)) return 1; if (yaz_advancegreek_encoder(tocode, &cd->encoder)) return 1; if (yaz_wchar_encoder(tocode, &cd->encoder)) return 1; if (yaz_danmarc_encoder(tocode, &cd->encoder)) return 1; return 0; } static int prepare_decoders(yaz_iconv_t cd, const char *tocode) { if (yaz_marc8_decoder(tocode, &cd->decoder)) return 1; if (yaz_iso5426_decoder(tocode, &cd->decoder)) return 1; if (yaz_utf8_decoder(tocode, &cd->decoder)) return 1; if (yaz_ucs4_decoder(tocode, &cd->decoder)) return 1; if (yaz_iso_8859_1_decoder(tocode, &cd->decoder)) return 1; if (yaz_iso_5428_decoder(tocode, &cd->decoder)) return 1; if (yaz_advancegreek_decoder(tocode, &cd->decoder)) return 1; if (yaz_wchar_decoder(tocode, &cd->decoder)) return 1; if (yaz_danmarc_decoder(tocode, &cd->decoder)) return 1; return 0; } yaz_iconv_t yaz_iconv_open(const char *tocode, const char *fromcode) { yaz_iconv_t cd = (yaz_iconv_t) xmalloc(sizeof(*cd)); cd->encoder.data = 0; cd->encoder.write_handle = 0; cd->encoder.flush_handle = 0; cd->encoder.init_handle = 0; cd->encoder.destroy_handle = 0; cd->decoder.data = 0; cd->decoder.read_handle = 0; cd->decoder.init_handle = 0; cd->decoder.destroy_handle = 0; cd->my_errno = YAZ_ICONV_UNKNOWN; /* a useful hack: if fromcode has leading @, the library not use YAZ's own conversions .. */ if (fromcode[0] == '@') fromcode++; else { prepare_encoders(cd, tocode); prepare_decoders(cd, fromcode); } if (cd->decoder.read_handle && cd->encoder.write_handle) { #if HAVE_ICONV_H cd->iconv_cd = (iconv_t) (-1); #endif ; } else { #if HAVE_ICONV_H cd->iconv_cd = iconv_open(tocode, fromcode); if (cd->iconv_cd == (iconv_t) (-1)) { yaz_iconv_close(cd); return 0; } #else yaz_iconv_close(cd); return 0; #endif } cd->init_flag = 1; return cd; } size_t yaz_iconv(yaz_iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft) { char *inbuf0 = 0; size_t r = 0; #if HAVE_ICONV_H if (cd->iconv_cd != (iconv_t) (-1)) { size_t r = iconv(cd->iconv_cd, inbuf, inbytesleft, outbuf, outbytesleft); if (r == (size_t)(-1)) { switch (yaz_errno()) { case E2BIG: cd->my_errno = YAZ_ICONV_E2BIG; break; case EINVAL: cd->my_errno = YAZ_ICONV_EINVAL; break; case EILSEQ: cd->my_errno = YAZ_ICONV_EILSEQ; break; default: cd->my_errno = YAZ_ICONV_UNKNOWN; } } return r; } #endif if (inbuf) inbuf0 = *inbuf; if (cd->init_flag) { cd->my_errno = YAZ_ICONV_UNKNOWN; if (cd->encoder.init_handle) (*cd->encoder.init_handle)(&cd->encoder); cd->unget_x = 0; cd->no_read_x = 0; if (cd->decoder.init_handle) { size_t no_read = 0; size_t r = (cd->decoder.init_handle)( cd, &cd->decoder, inbuf ? (unsigned char *) *inbuf : 0, inbytesleft ? *inbytesleft : 0, &no_read); if (r) { if (cd->my_errno == YAZ_ICONV_EINVAL) return r; cd->init_flag = 0; return r; } if (inbytesleft) *inbytesleft -= no_read; if (inbuf) *inbuf += no_read; } } cd->init_flag = 0; if (!inbuf || !*inbuf) { if (outbuf && *outbuf) { if (cd->unget_x) r = (*cd->encoder.write_handle)(cd, &cd->encoder, cd->unget_x, outbuf, outbytesleft); if (cd->encoder.flush_handle) r = (*cd->encoder.flush_handle)(cd, &cd->encoder, outbuf, outbytesleft); } if (r == 0) cd->init_flag = 1; cd->unget_x = 0; return r; } while (1) { unsigned long x; size_t no_read; if (cd->unget_x) { x = cd->unget_x; no_read = cd->no_read_x; } else { if (*inbytesleft == 0) { r = *inbuf - inbuf0; break; } x = (*cd->decoder.read_handle)( cd, &cd->decoder, (unsigned char *) *inbuf, *inbytesleft, &no_read); if (no_read == 0) { r = (size_t)(-1); break; } } if (x) { r = (*cd->encoder.write_handle)(cd, &cd->encoder, x, outbuf, outbytesleft); if (r) { /* unable to write it. save it because read_handle cannot rewind .. */ if (cd->my_errno == YAZ_ICONV_E2BIG) { cd->unget_x = x; cd->no_read_x = no_read; break; } } cd->unget_x = 0; } *inbytesleft -= no_read; (*inbuf) += no_read; } return r; } int yaz_iconv_error(yaz_iconv_t cd) { return cd->my_errno; } int yaz_iconv_close(yaz_iconv_t cd) { #if HAVE_ICONV_H if (cd->iconv_cd != (iconv_t) (-1)) iconv_close(cd->iconv_cd); #endif if (cd->encoder.destroy_handle) (*cd->encoder.destroy_handle)(&cd->encoder); if (cd->decoder.destroy_handle) (*cd->decoder.destroy_handle)(&cd->decoder); xfree(cd); return 0; } void yaz_iconv_set_errno(yaz_iconv_t cd, int no) { cd->my_errno = no; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/bib1.csv0000644000175000017500000002113213467505553011467 000000000000001, "Permanent system error" 2, "Temporary system error" 3, "Unsupported search" 4, "Terms only exclusion (stop) words" 5, "Too many argument words" 6, "Too many boolean operators" 7, "Too many truncated words" 8, "Too many incomplete subfields" 9, "Truncated words too short" 10, "Invalid format for record number (search term)" 11, "Too many characters in search statement" 12, "Too many records retrieved" 13, "Present request out of range" 14, "System error in presenting records" 15, "Record no authorized to be sent intersystem" 16, "Record exceeds Preferred-message-size" 17, "Record exceeds Maximum-record-size" 18, "Result set not supported as a search term" 19, "Only single result set as search term supported" 20, "Only ANDing of a single result set as search term supported" 21, "Result set exists and replace indicator off" 22, "Result set naming not supported" 23, "Combination of specified databases not supported" 24, "Element set names not supported" 25, "Specified element set name not valid for specified database" 26, "Only a single element set name supported" 27, "Result set no longer exists - unilaterally deleted by target" 28, "Result set is in use" 29, "One of the specified databases is locked" 30, "Specified result set does not exist" 31, "Resources exhausted - no results available" 32, "Resources exhausted - unpredictable partial results available" 33, "Resources exhausted - valid subset of results available" 100, "Unspecified error" 101, "Access-control failure" 102, "Security challenge required but could not be issued - request terminated" 103, "Security challenge required but could not be issued - record not included" 104, "Security challenge failed - record not included" 105, "Terminated by negative continue response" 106, "No abstract syntaxes agreed to for this record" 107, "Query type not supported" 108, "Malformed query" 109, "Database unavailable" 110, "Operator unsupported" 111, "Too many databases specified" 112, "Too many result sets created" 113, "Unsupported attribute type" 114, "Unsupported Use attribute" 115, "Unsupported value for Use attribute" 116, "Use attribute required but not supplied" 117, "Unsupported Relation attribute" 118, "Unsupported Structure attribute" 119, "Unsupported Position attribute" 120, "Unsupported Truncation attribute" 121, "Unsupported Attribute Set" 122, "Unsupported Completeness attribute" 123, "Unsupported attribute combination" 124, "Unsupported coded value for term" 125, "Malformed search term" 126, "Illegal term value for attribute" 127, "Unparsable format for un-normalized value" 128, "Illegal result set name" 129, "Proximity search of sets not supported" 130, "Illegal result set in proximity search" 131, "Unsupported proximity relation" 132, "Unsupported proximity unit code" 201, "Proximity not supported with this attribute combination" 202, "Unsupported distance for proximity" 203, "Ordered flag not supported for proximity" 205, "Only zero step size supported for Scan" 206, "Specified step size not supported for Scan" 207, "Cannot sort according to sequence" 208, "No result set name supplied on Sort" 209, "Generic sort not supported (database-specific sort only supported)" 210, "Database specific sort not supported" 211, "Too many sort keys" 212, "Duplicate sort keys" 213, "Unsupported missing data action" 214, "Illegal sort relation" 215, "Illegal case value" 216, "Illegal missing data action" 217, "Segmentation: Cannot guarantee records will fit in specified segments" 218, "ES: Package name already in use" 219, "ES: no such package, on modify/delete" 220, "ES: quota exceeded" 221, "ES: extended service type not supported" 222, "ES: permission denied on ES - id not authorized" 223, "ES: permission denied on ES - cannot modify or delete" 224, "ES: immediate execution failed" 225, "ES: immediate execution not supported for this service" 226, "ES: immediate execution not supported for these parameters" 227, "No data available in requested record syntax" 228, "Scan: malformed scan" 229, "Term type not supported" 230, "Sort: too many input results" 231, "Sort: incompatible record formats" 232, "Scan: term list not supported" 233, "Scan: unsupported value of position-in-response" 234, "Too many index terms processed" 235, "Database does not exist" 236, "Access to specified database denied" 237, "Sort: illegal sort" 238, "Record not available in requested syntax" 239, "Record syntax not supported" 240, "Scan: Resources exhausted looking for satisfying terms" 241, "Scan: Beginning or end of term list" 242, "Segmentation: max-segment-size too small to segment record" 243, "Present: additional-ranges parameter not supported" 244, "Present: comp-spec parameter not supported" 245, "Type-1 query: restriction ('resultAttr') operand not supported" 246, "Type-1 query: 'complex' attributeValue not supported" 247, "Type-1 query: 'attributeSet' as part of AttributeElement not supported" 1001, "Malformed APDU" 1002, "ES: EXTERNAL form of Item Order request not supported" 1003, "ES: Result set item form of Item Order request not supported" 1004, "ES: Extended services not supported unless access control is in effect" 1005, "Response records in Search response not supported" 1006, "Response records in Search response not possible for specified database (or database combination)" 1007, "No Explain server. Addinfo: pointers to servers that have a surrogate Explain database for this server" 1008, "ES: missing mandatory parameter for specified function. Addinfo: parameter" 1009, "ES: Item Order, unsupported OID in itemRequest. Addinfo: OID" 1010, "Init/AC: Bad Userid" 1011, "Init/AC: Bad Userid and/or Password" 1012, "Init/AC: No searches remaining (pre-purchased searches exhausted)" 1013, "Init/AC: Incorrect interface type (specified id valid only when used with a particular access method or client)" 1014, "Init/AC: Authentication System error" 1015, "Init/AC: Maximum number of simultaneous sessions for Userid" 1016, "Init/AC: Blocked network address" 1017, "Init/AC: No databases available for specified userId" 1018, "Init/AC: System temporarily out of resources" 1019, "Init/AC: System not available due to maintenance" 1020, "Init/AC: System temporarily unavailable (Addinfo: when it's expected back up)" 1021, "Init/AC: Account has expired" 1022, "Init/AC: Password has expired so a new one must be supplied" 1023, "Init/AC: Password has been changed by an administrator so a new one must be supplied" 1024, "Unsupported Attribute" 1025, "Service not supported for this database" 1026, "Record cannot be opened because it is locked" 1027, "SQL error" 1028, "Record deleted" 1029, "Scan: too many terms requested. Addinfo: max terms supported" 1040, "ES: Invalid function" 1041, "ES: Error in retention time" 1042, "ES: Permissions data not understood" 1043, "ES: Invalid OID for task specific parameters" 1044, "ES: Invalid action" 1045, "ES: Unknown schema" 1046, "ES: Too many records in package" 1047, "ES: Invalid wait action" 1048, "ES: Cannot create task package -- exceeds maximum permissible size" 1049, "ES: Cannot return task package -- exceeds maximum permissible size" 1050, "ES: Extended services request too large" 1051, "Scan: Attribute set id required -- not supplied" 1052, "ES: Cannot process task package record -- exceeds maximum permissible record size for ES" 1053, "ES: Cannot return task package record -- exceeds maximum permissible record size for ES response" 1054, "Init: Required negotiation record not included" 1055, "Init: negotiation option required" 1056, "Attribute not supported for database" 1057, "ES: Unsupported value of task package parameter" 1058, "Duplicate Detection: Cannot dedup on requested record portion" 1059, "Duplicate Detection: Requested detection criterion not supported" 1060, "Duplicate Detection: Requested level of match not supported" 1061, "Duplicate Detection: Requested regular expression not supported" 1062, "Duplicate Detection: Cannot do clustering" 1063, "Duplicate Detection: Retention criterion not supported" 1064, "Duplicate Detection: Requested number (or percentage) of entries " "for retention too large" 1065, "Duplicate Detection: Requested sort criterion not supported" 1066, "CompSpec: Unknown schema, or schema not supported." 1067, "Encapsulation: Encapsulated sequence of PDUs not supported" 1068, "Encapsulation: Base operation (and encapsulated PDUs) not executed based on pre-screening analysis" 1069, "No syntaxes available for this request" 1070, "user not authorized to receive record(s) in requested syntax" 1071, "preferredRecordSyntax not supplied" 1072, "Query term includes characters that do not translate into the target character set" 1073, "Database records do not contain data associated with access point" 1074, "Proxy failure" yaz-5.28.0/src/daemon.c0000644000175000017500000002113213265142510011526 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief Unix daemon management */ #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #if HAVE_UNISTD_H #include #endif #include #if HAVE_SYS_WAIT_H #include #endif #if HAVE_SYS_TYPES_H #include #endif #include #if HAVE_PWD_H #include #endif #if HAVE_SYS_PRCTL_H #include #endif #include #include #include #if HAVE_PWD_H static void write_pidfile(int pid_fd) { if (pid_fd != -1) { char buf[40]; yaz_snprintf(buf, sizeof(buf), "%ld", (long) getpid()); if (ftruncate(pid_fd, 0)) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "ftruncate"); exit(1); } if (write(pid_fd, buf, strlen(buf)) != (int) strlen(buf)) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "write"); exit(1); } close(pid_fd); } } int child_got_signal_from_us = 0; pid_t child_pid = 0; static void normal_stop_handler(int num) { if (child_pid) { /* relay signal to child */ kill(child_pid, num); } } static void log_reopen_handler(int num) { yaz_log_reopen(); if (child_pid) kill(child_pid, num); } static void sigusr2_handler(int num) { child_got_signal_from_us = 1; } static pid_t keepalive_pid = 0; static void keepalive(void (*work)(void *data), void *data) { int no_sigill = 0; int no_sigabrt = 0; int no_sigsegv = 0; int no_sigbus = 0; int run = 1; int cont = 1; void (*old_sigterm)(int); void (*old_sigusr1)(int); struct sigaction sa2, sa1; keepalive_pid = getpid(); /* keep signals in their original state and make sure that some signals to parent process also gets sent to the child.. */ old_sigterm = signal(SIGTERM, normal_stop_handler); old_sigusr1 = signal(SIGUSR1, normal_stop_handler); sigemptyset(&sa2.sa_mask); sa2.sa_handler = sigusr2_handler; sa2.sa_flags = 0; sigaction(SIGUSR2, &sa2, &sa1); while (cont && !child_got_signal_from_us) { pid_t p = fork(); pid_t p1; int status; if (p == (pid_t) (-1)) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "fork"); exit(1); } else if (p == 0) { /* child */ signal(SIGTERM, old_sigterm);/* restore */ signal(SIGUSR1, old_sigusr1);/* restore */ sigaction(SIGUSR2, &sa1, NULL); work(data); exit(0); } /* enable signalling in kill_child_handler */ child_pid = p; p1 = waitpid(p, &status, 0); /* disable signalling in kill_child_handler */ child_pid = 0; if (p1 == (pid_t)(-1)) { if (errno != EINTR) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "waitpid"); break; } continue; } if (p1 != p) { yaz_log(YLOG_FATAL, "p1=%d != p=%d", p1, p); break; } if (WIFSIGNALED(status)) { /* keep the child alive in case of errors, but _log_ */ switch (WTERMSIG(status)) { case SIGILL: yaz_log(YLOG_WARN, "Received SIGILL from child %ld", (long) p); cont = 1; no_sigill++; break; case SIGABRT: yaz_log(YLOG_WARN, "Received SIGABRT from child %ld", (long) p); cont = 1; no_sigabrt++; break ; case SIGSEGV: yaz_log(YLOG_WARN, "Received SIGSEGV from child %ld", (long) p); cont = 1; ++no_sigsegv; break; case SIGBUS: yaz_log(YLOG_WARN, "Received SIGBUS from child %ld", (long) p); cont = 1; no_sigbus++; break; case SIGTERM: yaz_log(YLOG_LOG, "Received SIGTERM from child %ld", (long) p); cont = 0; break; default: yaz_log(YLOG_WARN, "Received SIG %d from child %ld", WTERMSIG(status), (long) p); cont = 0; } } else if (WIFEXITED(status)) { cont = 0; if (WEXITSTATUS(status) != 0) { /* child exited with error */ yaz_log(YLOG_LOG, "Exit %d from child %ld", WEXITSTATUS(status), (long) p); } } if (cont) /* respawn slower as we get more errors */ sleep(1 + run/5); run++; } if (no_sigill) yaz_log(YLOG_WARN, "keepalive stop. %d SIGILL signal(s)", no_sigill); if (no_sigabrt) yaz_log(YLOG_WARN, "keepalive stop. %d SIGABRT signal(s)", no_sigabrt); if (no_sigsegv) yaz_log(YLOG_WARN, "keepalive stop. %d SIGSEGV signal(s)", no_sigsegv); if (no_sigbus) yaz_log(YLOG_WARN, "keepalive stop. %d SIGBUS signal(s)", no_sigbus); yaz_log(YLOG_LOG, "keepalive stop"); } #endif void yaz_daemon_stop(void) { #if HAVE_PWD_H if (keepalive_pid) kill(keepalive_pid, SIGUSR2); /* invoke immediate_exit_handler */ #endif } int yaz_daemon(const char *progname, unsigned int flags, void (*work)(void *data), void *data, const char *pidfile, const char *uid) { #if HAVE_PWD_H int pid_fd = -1; /* open pidfile .. defer write until in child and after setuid */ if (pidfile) { pid_fd = open(pidfile, O_CREAT|O_RDWR, 0666); if (pid_fd == -1) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "open %s", pidfile); exit(1); } } if (flags & YAZ_DAEMON_DEBUG) { /* in debug mode.. it's quite simple */ write_pidfile(pid_fd); work(data); exit(0); } /* running in production mode. */ if (uid) { /* OK to use the non-thread version here */ struct passwd *pw = getpwnam(uid); if (!pw) { yaz_log(YLOG_FATAL, "%s: Unknown user", uid); exit(1); } if (flags & YAZ_DAEMON_LOG_REOPEN) { FILE *f = yaz_log_file(); if (f) { if (fchown(fileno(f), pw->pw_uid, -1)) yaz_log(YLOG_WARN|YLOG_ERRNO, "fchown logfile"); } } if (setuid(pw->pw_uid) < 0) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "setuid"); exit(1); } /* Linux don't produce core dumps evern if the limit is right and files are writable.. This fixes this. See prctl(2) */ #if HAVE_SYS_PRCTL_H #ifdef PR_SET_DUMPABLE prctl(PR_SET_DUMPABLE, 1, 0, 0); #endif #endif } if (flags & YAZ_DAEMON_FORK) { /* create pipe so that parent waits until child has created PID (or failed) */ static int hand[2]; /* hand shake for child */ if (pipe(hand) < 0) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "pipe"); return 1; } switch (fork()) { case 0: break; case -1: return 1; default: close(hand[1]); while(1) { char dummy[1]; int res = read(hand[0], dummy, 1); if (res < 0 && errno != EINTR) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "read fork handshake"); break; } else if (res >= 0) break; } close(hand[0]); _exit(0); } /* child */ close(hand[0]); if (setsid() < 0) return 1; close(0); close(1); close(2); open("/dev/null", O_RDWR); if (dup(0) == -1) return 1; if (dup(0) == -1) return 1; close(hand[1]); } write_pidfile(pid_fd); if (flags & YAZ_DAEMON_LOG_REOPEN) { signal(SIGHUP, log_reopen_handler); } if (flags & YAZ_DAEMON_KEEPALIVE) { keepalive(work, data); } else { work(data); } return 0; #else work(data); return 0; #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zoom-event.c0000644000175000017500000000432713265142510012375 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zoom-event.c * \brief Implements ZOOM Event stuff */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "zoom-p.h" ZOOM_API(const char *) ZOOM_get_event_str(int event) { static const char *ar[] = { "NONE", "CONNECT", "SEND_DATA", "RECV_DATA", "TIMEOUT", "UNKNOWN", "SEND_APDU", "RECV_APDU", "RECV_RECORD", "RECV_SEARCH", "END" }; return ar[event]; } struct ZOOM_Event_p { int kind; ZOOM_Event next; ZOOM_Event prev; }; ZOOM_Event ZOOM_Event_create(int kind) { ZOOM_Event event = (ZOOM_Event) xmalloc(sizeof(*event)); event->kind = kind; event->next = 0; event->prev = 0; return event; } ZOOM_Event ZOOM_connection_get_event(ZOOM_connection c) { ZOOM_Event event = c->m_queue_front; if (!event) { c->last_event = ZOOM_EVENT_NONE; return 0; } assert(c->m_queue_back); c->m_queue_front = event->prev; if (c->m_queue_front) { assert(c->m_queue_back); c->m_queue_front->next = 0; } else c->m_queue_back = 0; c->last_event = event->kind; return event; } void ZOOM_connection_put_event(ZOOM_connection c, ZOOM_Event event) { if (c->m_queue_back) { c->m_queue_back->prev = event; assert(c->m_queue_front); } else { assert(!c->m_queue_front); c->m_queue_front = event; } event->next = c->m_queue_back; event->prev = 0; c->m_queue_back = event; } void ZOOM_Event_destroy(ZOOM_Event event) { xfree(event); } void ZOOM_connection_remove_events(ZOOM_connection c) { ZOOM_Event event; while ((event = ZOOM_connection_get_event(c))) ZOOM_Event_destroy(event); } ZOOM_API(int) ZOOM_connection_peek_event(ZOOM_connection c) { ZOOM_Event event = c->m_queue_front; return event ? event->kind : ZOOM_EVENT_NONE; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ber_null.c0000644000175000017500000000204013265142510012062 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ber_null.c * \brief Implements ber_null * * This source file implements BER encoding and decoding of * the NULL type. */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" /** * ber_null: BER-en/decoder for NULL type. */ int ber_null(ODR o) { switch (o->direction) { case ODR_ENCODE: if (odr_putc(o, 0X00) < 0) return 0; return 1; case ODR_DECODE: if (odr_max(o) < 1) { odr_seterror(o, OPROTO, 39); return 0; } if (*(o->op->bp++) != 0X00) { odr_seterror(o, OPROTO, 12); return 0; } return 1; case ODR_PRINT: return 1; default: odr_seterror(o, OOTHER, 13); return 0; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/codetables-iso5426.xml0000644000175000017500000011137013265142510014063 00000000000000 The first column in this table contains the ISO5426 code (in hex) for the character as coming from the G0 graphic set, the second column contains the ISO5426 code (in hex) for the character as coming from the G1 graphic set, the third column contains the UCS/Unicode 16-bit code (in hex), the fourth column contains the UTF-8 code (in hex) for the UCS characters, the fifth column contains a representation of the character (where possible), the sixth column contains the MARC character name, followed by the UCS name. If the MARC name is the same as or very similar to the UCS name, only the UCS name is given. For some tables alternate encodings in Unicode and UTF-8 are given. When that occurs the alternate Unicode and alternate UTF-8 columns follow the character name. 1D 001D 1D RECORD TERMINATOR / GROUP SEPARATOR 1E 001E 1E FIELD TERMINATOR / RECORD SEPARATOR 1F 001F 1F SUBFIELD DELIMITER / UNIT SEPARATOR 20 0020 20 SPACE, BLANK / SPACE 21 0021 21 EXCLAMATION MARK 22 0022 22 QUOTATION MARK 23 0023 23 NUMBER SIGN 24 0024 24 DOLLAR SIGN 25 0025 25 PERCENT SIGN 26 0026 26 AMPERSAND 27 0027 27 APOSTROPHE 28 0028 28 OPENING PARENTHESIS / LEFT PARENTHESIS 29 0029 29 CLOSING PARENTHESIS / CLOSING PARENTHESIS 2A 002A 2A ASTERISK 2B 002B 2B PLUS SIGN 2C 002C 2C COMMA 2D 002D 2D HYPHEN-MINUS 2E 002E 2E PERIOD, DECIMAL POINT / FULL STOP 2F 002F 2F SLASH / SOLIDUS 30 0030 30 DIGIT ZERO 31 0031 31 DIGIT ONE 32 0032 32 DIGIT TWO 33 0033 33 DIGIT THREE 34 0034 34 DIGIT FOUR 35 0035 35 DIGIT FIVE 36 0036 36 DIGIT SIX 37 0037 37 DIGIT SEVEN 38 0038 38 DIGIT EIGHT 39 0039 39 DIGIT NINE 3A 003A 3A COLON 3B 003B 3B SEMICOLON 3C 003C 3C LESS-THAN SIGN 3D 003D 3D EQUALS SIGN 3E 003E 3E GREATER-THAN SIGN 3F 003F 3F QUESTION MARK 40 0040 40 COMMERCIAL AT 41 0041 41 LATIN CAPITAL LETTER A 42 0042 42 LATIN CAPITAL LETTER B 43 0043 43 LATIN CAPITAL LETTER C 44 0044 44 LATIN CAPITAL LETTER D 45 0045 45 LATIN CAPITAL LETTER E 46 0046 46 LATIN CAPITAL LETTER F 47 0047 47 LATIN CAPITAL LETTER G 48 0048 48 LATIN CAPITAL LETTER H 49 0049 49 LATIN CAPITAL LETTER I 4A 004A 4A LATIN CAPITAL LETTER J 4B 004B 4B LATIN CAPITAL LETTER K 4C 004C 4C LATIN CAPITAL LETTER L 4D 004D 4D LATIN CAPITAL LETTER M 4E 004E 4E LATIN CAPITAL LETTER N 4F 004F 4F LATIN CAPITAL LETTER O 50 0050 50 LATIN CAPITAL LETTER P 51 0051 51 LATIN CAPITAL LETTER Q 52 0052 52 LATIN CAPITAL LETTER R 53 0053 53 LATIN CAPITAL LETTER S 54 0054 54 LATIN CAPITAL LETTER T 55 0055 55 LATIN CAPITAL LETTER U 56 0056 56 LATIN CAPITAL LETTER V 57 0057 57 LATIN CAPITAL LETTER W 58 0058 58 LATIN CAPITAL LETTER X 59 0059 59 LATIN CAPITAL LETTER Y 5A 005A 5A LATIN CAPITAL LETTER Z 5B 005B 5B OPENING SQUARE BRACKET / LEFT SQUARE BRACKET 5C 005C 5C REVERSE SLASH / REVERSE SOLIDUS 5D 005D 5D CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET 5E 005E 5E SPACING CIRCUMFLEX / CIRCUMFLEX ACCENT 5F 005F 5F SPACING UNDERSCORE / LOW LINE 60 0060 60 SPACING GRAVE / GRAVE ACCENT 61 0061 61 LATIN SMALL LETTER A 62 0062 62 LATIN SMALL LETTER B 63 0063 63 LATIN SMALL LETTER C 64 0064 64 LATIN SMALL LETTER D 65 0065 65 LATIN SMALL LETTER E 66 0066 66 LATIN SMALL LETTER F 67 0067 67 LATIN SMALL LETTER G 68 0068 68 LATIN SMALL LETTER H 69 0069 69 LATIN SMALL LETTER I 6A 006A 6A LATIN SMALL LETTER J 6B 006B 6B LATIN SMALL LETTER K 6C 006C 6C LATIN SMALL LETTER L 6D 006D 6D LATIN SMALL LETTER M 6E 006E 6E LATIN SMALL LETTER N 6F 006F 6F LATIN SMALL LETTER O 70 0070 70 LATIN SMALL LETTER P 71 0071 71 LATIN SMALL LETTER Q 72 0072 72 LATIN SMALL LETTER R 73 0073 73 LATIN SMALL LETTER S 74 0074 74 LATIN SMALL LETTER T 75 0075 75 LATIN SMALL LETTER U 76 0076 76 LATIN SMALL LETTER V 77 0077 77 LATIN SMALL LETTER W 78 0078 78 LATIN SMALL LETTER X 79 0079 79 LATIN SMALL LETTER Y 7A 007A 7A LATIN SMALL LETTER Z 7B 007B 7B OPENING CURLY BRACKET / LEFT CURLY BRACKET 7C 007C 7C VERTICAL BAR (FILL) / VERTICAL LINE 7D 007D 7D CLOSING CURLY BRACKET / RIGHT CURLY BRACKET 7E 007E 7E SPACING TILDE / TILDE See also Zeichentabelle MAB2 (ISO 5426-1983), http://www.gymel.com/charsets/MAB2.html See also MAB2-Zeichensatz ISO 646 (IRV) + ISO 5426-1983, http://www.dnb.de/standardisierung/pdf/mab_unic.pdf See also Zeichenkonkordanz MAB2-Zeichensatz - MARC-8, http://www.dnb.de/standardisierung/pdf/mab_marc.pdf 88 0098 C298 NON-SORT BEGIN / START OF STRING 89 009C C29C NON-SORT END / STRING TERMINATOR A1 00A1 C2A1 INVERTED EXCLAMATION MARK A2 201E E2809E LOW DOUBLE COMMA QUOTATION MARK A3 00A3 C2A3 BRITISH POUND / POUND SIGN A4 0024 24 DOLLAR SIGN A5 00A5 C2A5 YEN SIGN A6 2020 E280A0 DAGGER A7 00A7 C2A7 SECTION SIGN A8 2032 E280A0 PRIME A9 2018 E28098 SINGLE TURNED COMMA QUOTATION MARK AA 201C E2809C DOUBLE TURNED COMMA QUOTATION MARK AB 00AB E280A0 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (LEFT POINTING GUILLEMET) AC 266D E299AD MUSIC FLAT SIGN (FLAT) AD 00A9 C2A9 COPYRIGHT SIGN AE 2117 E28497 SOUND RECORDING COPYRIGHT AF 00AE C2AE PATENT MARK / REGISTERED SIGN B0 02BB CABB AYN / MODIFIER LETTER TURNED COMMA B1 02BC CABC CABE ALIF / MODIFIER LETTER APOSTROPHE B2 201A E2809A SINGLE LOW-9 QUOTATION MARK (LOW SINGLE COMMA QUOTATION MARK) B6 2021 E280A1 B7 00B7 C2B7 MIDDLE DOT B8 2033 E280B3 DOUBLE PRIME B9 2019 E2809D RIGHT SINGLE QUOTATION MARK (SINGLE COMMA QUOTATION MARK) BA 201D E2809D RIGHT DOUBLE QUOTATION MARK (DOUBLE COMMA QUOTATION MARK) BB 00BB C2BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (RIGHT POINTING GUILLEMET) BC 266F E299AF MUSIC SHARP SIGN BD 02B9 CAB9 SOFT SIGN, PRIME / MODIFIER LETTER PRIME BE 02BA CABA HARD SIGN, DOUBLE PRIME / MODIFIER LETTER DOUBLE PRIME BF 00BF C2BF INVERTED QUESTION MARK true C0 0309 CC89 PSEUDO QUESTION MARK / COMBINING HOOK ABOVE true C1 0300 CC80 GRAVE / COMBINING GRAVE ACCENT (Varia) true C2 0301 CC81 ACUTE / COMBINING ACUTE ACCENT (Oxia) true C3 0302 CC82 CIRCUMFLEX / COMBINING CIRCUMFLEX ACCENT true C4 0303 CC83 TILDE / COMBINING TILDE true C5 0304 CC84 MACRON / COMBINING MACRON true C6 0306 CC86 BREVE / COMBINING BREVE (Vrachy) true C7 0307 CC87 SUPERIOR DOT / COMBINING DOT ABOVE Q: Unicode doesn't seem to distinguish between tréma and umlaut, but I need to distinguish. What shall I do? http://www.unicode.org/faq/char_combmark.html#18 true C8 0308 CC88 U+034F COMBINING GRAPHEME JOINER (CGJ) / tréma true C9 0308 CC88 UMLAUT, DIAERESIS / COMBINING DIAERESIS (Dialytika) true CA 030A CC8A CIRCLE ABOVE, ANGSTROM / COMBINING RING ABOVE true CB 0315 CC95 HIGH COMMA, OFF CENTER / COMBINING COMMA ABOVE RIGHT true CC 0313 CC93 HIGH COMMA, CENTERED / COMBINING COMMA ABOVE (Psili) true CD 030B CC8B DOUBLE ACUTE / COMBINING DOUBLE ACUTE ACCENT true CE 031B CC9B COMBINING HORN (NON-SPACING HORN) true CF 030C CC8C HACEK / COMBINING CARON true D0 0327 CCA7 CEDILLA / COMBINING CEDILLA true D1 031C CC9C RIGHT CEDILLA / COMBINING LEFT HALF RING BELOW true D2 0326 CCA6 LEFT HOOK (COMMA BELOW) / COMBINING COMMA BELOW true D3 0328 CCA8 RIGHT HOOK, OGONEK / COMBINING OGONEK true D4 0325 CCA5 CIRCLE BELOW / COMBINING RING BELOW true D5 032E CCAE UPADHMANIYA / COMBINING BREVE BELOW true D6 0323 CCA3 DOT BELOW / COMBINING DOT BELOW true D7 0324 CCA4 DOUBLE DOT BELOW / COMBINING DIAERESIS BELOW true D8 0332 CCB2 UNDERSCORE / COMBINING LOW LINE true D9 0333 CCB3 DOUBLE UNDERSCORE / COMBINING DOUBLE LOW LINE true DA 0329 CCA9 COMBINING VERTICAL LINE BELOW (NON-SPACING VERTICAL LINE BELOW) true DB 032D CCAD COMBINING CIRCUMFLEX ACCENT BELOW (NON-SPACING CIRCUMFLEX BELOW) true DD 0360 CDA0 FE22 EFB8A2 DOUBLE TILDE, FIRST HALF / COMBINING DOUBLE TILDE true DE FE21 EFB8A1 LIGATURE, SECOND HALF / COMBINING LIGATURE RIGHT HALF The Ligature that spans two characters is constructed of two halves in MARC-8: EB (Ligature, first half) and EC (Ligature, second half). The preferred Unicode/UTF-8 mapping is to the single character Ligature that spans two characters, U+0361. The single character Ligature is encoded following the second of the two characters to be spanned. The two half Ligatures in Unicode, to which the Ligature has been mapped since 1996, are indicted in the mapping as alternatives, but their use is not recommended. It is expected that font support for the single character Ligature mark will be more easily obtained than for the two halves. true DF FE23 EFB8A3 DOUBLE TILDE, SECOND HALF / COMBINING DOUBLE TILDE RIGHT HALF The Double Tilde that spans two characters is constructed of two halves in MARC-8: FA (Double Tilde, first half) and FB (Double Tilde, second half). The preferred Unicode/UTF-8 mapping is to the single character Double Tilde that spans two characters, U+0360. The single character Double Tilde is encoded following the second of the two characters to be spanned. The two half Double Tildes in Unicode, to which the MARC8 Double Tilde has been mapped since 1996, are indicted in the mapping as alternatives, but their use is not recommended. It is expected that font support for the single character Double Tilde mark will be more easily obtained than for the two halves. E1 00C6 C386 UPPERCASE DIGRAPH AE / LATIN CAPITAL LIGATURE AE E2 0110 C490 UPPERCASE D WITH CROSSBAR / LATIN CAPITAL LETTER D WITH STROKE E6 0132 C4B2 LATIN CAPITAL LIGATURE IJ (LATIN CAPITAL LETTER I J) E8 0141 C581 UPPERCASE POLISH L / LATIN CAPITAL LETTER L WITH STROKE E9 00D8 C398 UPPERCASE SCANDINAVIAN O / LATIN CAPITAL LETTER O WITH STROKE EA 0152 C592 UPPERCASE DIGRAPH OE / LATIN CAPITAL LIGATURE OE EC 00DE C39E UPPERCASE ICELANDIC THORN / LATIN CAPITAL LETTER THORN (Icelandic) F1 00E6 C3A6 LOWERCASE DIGRAPH AE / LATIN SMALL LIGATURE AE F2 0111 C491 LOWERCASE D WITH CROSSBAR / LATIN SMALL LETTER D WITH STROKE F3 00F0 C3B0 LOWERCASE ETH / LATIN SMALL LETTER ETH (Icelandic) F5 0131 C4B1 LOWERCASE TURKISH I / LATIN SMALL LETTER DOTLESS I F6 0133 C4B3 LATIN SMALL LIGATURE IJ (LATIN SMALL LETTER I J) F8 0142 C582 LOWERCASE POLISH L / LATIN SMALL LETTER L WITH STROKE F9 00F8 C3B8 LOWERCASE SCANDINAVIAN O / LATIN SMALL LETTER O WITH STROKE FA 0153 C593 LOWERCASE DIGRAPH OE / LATIN SMALL LIGATURE OE FB 00DF C39F ESZETT SYMBOL FC 00FE C3BE LOWERCASE ICELANDIC THORN / LATIN SMALL LETTER THORN (Icelandic) yaz-5.28.0/src/sc.c0000644000175000017500000002557213265142510010704 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file sc.c * \brief Windows Service Control */ #if HAVE_CONFIG_H #include #endif #ifdef WIN32 #include #include #include #endif #include #include #include #include #include #include struct sc_s { int install_flag; int start_flag; int remove_flag; int run_flag; char *service_name; char *display_name; int (*sc_main)(yaz_sc_t s, int argc, char **argv); void (*sc_stop)(yaz_sc_t s); int argc; char **argv; #ifdef WIN32 SERVICE_STATUS_HANDLE gSvcStatusHandle; SERVICE_STATUS gSvcStatus; #endif }; yaz_sc_t yaz_sc_create(const char *service_name, const char *display_name) { yaz_sc_t s = (yaz_sc_t) xmalloc(sizeof(*s)); s->service_name = service_name ? xstrdup(service_name) : 0; s->display_name = display_name ? xstrdup(display_name) : 0; s->install_flag = 0; s->start_flag = 0; s->remove_flag = 0; s->run_flag = 0; s->sc_main = 0; s->sc_stop = 0; #ifdef WIN32 s->gSvcStatusHandle = 0; #endif return s; } #ifdef WIN32 static void parse_args(yaz_sc_t s, int *argc_p, char ***argv_p) { int skip_opt = 0; const char *log_file = 0; int i; /* now look for the service arguments */ skip_opt = 0; for (i = 1; i < *argc_p; i++) { const char *opt = (*argv_p)[i]; if (!strcmp(opt, "-install")) { s->install_flag = 1; skip_opt = 1; break; } else if (!strcmp(opt, "-installa")) { s->install_flag = 1; s->start_flag = 1; skip_opt = 1; break; } else if (!strcmp(opt, "-remove")) { s->remove_flag = 1; skip_opt = 1; break; } else if (!strcmp(opt, "-run") && i < *argc_p-1) { /* -run dir */ const char *dir = (*argv_p)[i+1]; s->run_flag = 1; chdir(dir); skip_opt = 2; break; } } *argc_p = *argc_p - skip_opt; for (; i < *argc_p; i++) (*argv_p)[i] = (*argv_p)[i + skip_opt]; /* now look for the service arguments */ /* we must have a YAZ log file to work with */ skip_opt = 0; for (i = 1; i < *argc_p; i++) { const char *opt = (*argv_p)[i]; if (opt[0] == '-' && opt[1] == 'l') { if (opt[2]) { log_file = opt+2; skip_opt = 1; break; } else if (i < *argc_p - 1) { log_file = (*argv_p)[i+1]; skip_opt = 2; break; } } } if (log_file) yaz_log_init_file(log_file); else { if (s->install_flag) { yaz_log(YLOG_FATAL, "Must specify -l logfile for service to install"); exit(1); } } if (s->run_flag) { /* remove -l logfile for a running service */ *argc_p = *argc_p - skip_opt; for (; i < *argc_p; i++) (*argv_p)[i] = (*argv_p)[i + skip_opt]; } } VOID sc_ReportSvcStatus(yaz_sc_t s, DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint) { if (s->gSvcStatusHandle) { static DWORD dwCheckPoint = 1; // Fill in the SERVICE_STATUS structure. s->gSvcStatus.dwCurrentState = dwCurrentState; s->gSvcStatus.dwWin32ExitCode = dwWin32ExitCode; s->gSvcStatus.dwWaitHint = dwWaitHint; if (dwCurrentState == SERVICE_START_PENDING) s->gSvcStatus.dwControlsAccepted = 0; else s->gSvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; if ( (dwCurrentState == SERVICE_RUNNING) || (dwCurrentState == SERVICE_STOPPED) ) s->gSvcStatus.dwCheckPoint = 0; else s->gSvcStatus.dwCheckPoint = dwCheckPoint++; // Report the status of the service to the SCM. SetServiceStatus(s->gSvcStatusHandle, &s->gSvcStatus ); } } static yaz_sc_t global_sc = 0; VOID WINAPI sc_SvcCtrlHandler(DWORD dwCtrl) { switch(dwCtrl) { case SERVICE_CONTROL_STOP: yaz_log(YLOG_LOG, "Service %s to stop", global_sc->service_name); sc_ReportSvcStatus(global_sc, SERVICE_STOP_PENDING, NO_ERROR, 0); global_sc->sc_stop(global_sc); sc_ReportSvcStatus(global_sc, SERVICE_STOPPED, NO_ERROR, 0); return; case SERVICE_CONTROL_INTERROGATE: break; default: break; } } static void WINAPI sc_service_main(DWORD argc, char **argv) { yaz_sc_t s = global_sc; int ret_code; yaz_log(YLOG_LOG, "Service %s starting", s->service_name); s->gSvcStatusHandle = RegisterServiceCtrlHandler( s->service_name, sc_SvcCtrlHandler); if (!s->gSvcStatusHandle) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "RegisterServiceCtrlHandler"); return; } s->gSvcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; s->gSvcStatus.dwServiceSpecificExitCode = 0; sc_ReportSvcStatus(s, SERVICE_START_PENDING, NO_ERROR, 3000); ret_code = s->sc_main(s, s->argc, s->argv); sc_ReportSvcStatus(s, SERVICE_STOPPED, ret_code ? ERROR_SERVICE_SPECIFIC_ERROR : NO_ERROR, ret_code); } #endif void yaz_sc_running(yaz_sc_t s) { #ifdef WIN32 sc_ReportSvcStatus(s, SERVICE_RUNNING, NO_ERROR, 0); #endif } int yaz_sc_program(yaz_sc_t s, int argc, char **argv, int (*sc_main)(yaz_sc_t s, int argc, char **argv), void (*sc_stop)(yaz_sc_t s)) { s->sc_main = sc_main; s->sc_stop = sc_stop; #ifdef WIN32 parse_args(s, &argc, &argv); if (s->install_flag || s->remove_flag) { SC_HANDLE manager = OpenSCManager(NULL /* machine */, NULL /* database */, SC_MANAGER_ALL_ACCESS); if (manager == NULL) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "OpenSCManager failed"); exit(1); } if (s->install_flag) { SC_HANDLE schService = 0; TCHAR szPath[2048]; int i; WRBUF w = wrbuf_alloc(); char cwdstr[_MAX_PATH]; if (!_getcwd(cwdstr, sizeof(cwdstr))) strcpy (cwdstr, "."); if (GetModuleFileName(NULL, szPath, 2048) == 0) { yaz_log(YLOG_FATAL, "GetModuleFileName failed"); exit(1); } wrbuf_puts(w, szPath); for (i = 1; i < argc; i++) { wrbuf_puts(w, " "); if (strchr(argv[i], ' ')) wrbuf_puts(w, "\""); wrbuf_puts(w, argv[i]); if (strchr(argv[i], ' ')) wrbuf_puts(w, "\""); } wrbuf_puts(w, " -run \""); wrbuf_puts(w, cwdstr); wrbuf_puts(w, "\""); yaz_log(YLOG_LOG, "path: %s", wrbuf_cstr(w)); schService = CreateService( manager, /* SCM database */ TEXT(s->service_name), /* name of service */ TEXT(s->display_name), /* service name to display */ SERVICE_ALL_ACCESS, /* desired access */ SERVICE_WIN32_OWN_PROCESS, /* service type */ s->start_flag ? SERVICE_AUTO_START : SERVICE_DEMAND_START, /* start type */ SERVICE_ERROR_NORMAL, /* error control type */ wrbuf_cstr(w), /* path to service's binary */ NULL, /* no load ordering group */ NULL, /* no tag identifier */ NULL, /* no dependencies */ NULL, /* LocalSystem account */ NULL); /* no password */ if (schService == NULL) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Service %s could not be installed", s->service_name); CloseServiceHandle(manager); exit(1); } yaz_log(YLOG_LOG, "Installed service %s", s->service_name); CloseServiceHandle(schService); wrbuf_destroy(w); } else if (s->remove_flag) { SC_HANDLE schService = 0; SERVICE_STATUS serviceStatus; schService = OpenService(manager, TEXT(s->service_name), SERVICE_ALL_ACCESS); if (schService == NULL) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Service %s could not be opened", s->service_name); CloseServiceHandle(manager); exit(1); } /* try to stop the service */ if (ControlService(schService, SERVICE_CONTROL_STOP, &serviceStatus)) { yaz_log(YLOG_LOG, "Service %s being stopped", s->service_name); Sleep(1000); while (QueryServiceStatus(schService, &serviceStatus)) { if (serviceStatus.dwCurrentState != SERVICE_STOP_PENDING) break; Sleep( 1000 ); } if (serviceStatus.dwCurrentState != SERVICE_STOPPED) yaz_log(YLOG_LOG|YLOG_FATAL, "Service failed to stop"); } if (DeleteService(schService)) yaz_log(YLOG_LOG, "Service %s removed", s->service_name); else yaz_log(YLOG_FATAL, "Service %s could not be removed", s->service_name); CloseServiceHandle(schService); } CloseServiceHandle(manager); exit(0); } global_sc = s; if (s->run_flag) { SERVICE_TABLE_ENTRY dt[2]; dt[0].lpServiceName = s->service_name; dt[0].lpServiceProc = sc_service_main; dt[1].lpServiceName = 0; dt[1].lpServiceProc = 0; s->argc = argc; s->argv = argv; if (!StartServiceCtrlDispatcher(dt)) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Service %s could not be controlled", s->service_name); } return 0; } #endif /* WIN32 */ /* run the program standalone (with no service) */ return s->sc_main(s, argc, argv); } void yaz_sc_destroy(yaz_sc_t *s) { xfree((*s)->service_name); xfree((*s)->display_name); xfree(*s); *s = 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-univ.c0000644000175000017500000000262713273126163011530 00000000000000/** \file z-univ.c \brief ASN.1 Module ResourceReport-Format-Universe-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_UniverseReportHits(ODR o, Z_UniverseReportHits **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_StringOrNumeric(o, &(*p)->database, 0, "database") && z_StringOrNumeric(o, &(*p)->hits, 0, "hits") && odr_sequence_end(o); } int z_UniverseReportDuplicate(ODR o, Z_UniverseReportDuplicate **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return z_StringOrNumeric(o, &(*p)->hitno, 0, "hitno") && odr_sequence_end(o); } int z_UniverseReport(ODR o, Z_UniverseReport **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_UniverseReport_databaseHits, (Odr_fun) z_UniverseReportHits, "databaseHits"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_UniverseReport_duplicate, (Odr_fun) z_UniverseReportDuplicate, "duplicate"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_integer(o, &(*p)->totalHits, 0, "totalHits") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_sequence_end(o); } yaz-5.28.0/src/ber_int.c0000644000175000017500000000526413265142510011715 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ber_int.c * \brief Implements BER INTEGER encoding and decoding. * * This source file implements BER encoding and decoding of * the INTEGER type. */ #if HAVE_CONFIG_H #include #endif #include #if HAVE_SYS_TYPES_H #include #endif #ifdef WIN32 #include #endif #include "odr-priv.h" static int ber_encinteger(ODR o, Odr_int val); static int ber_decinteger(const char *buf, Odr_int *val, int max); int ber_integer(ODR o, Odr_int *val) { int res; switch (o->direction) { case ODR_DECODE: if ((res = ber_decinteger(o->op->bp, val, odr_max(o))) <= 0) { odr_seterror(o, OPROTO, 50); return 0; } o->op->bp += res; return 1; case ODR_ENCODE: if ((res = ber_encinteger(o, *val)) < 0) return 0; return 1; case ODR_PRINT: return 1; default: odr_seterror(o, OOTHER, 51); return 0; } } /* * Returns: number of bytes written or -1 for error (out of bounds). */ int ber_encinteger(ODR o, Odr_int val) { unsigned long long uval = val; unsigned char tmp[sizeof(uval)]; int len; size_t i; for (i = sizeof(uval); i > 0; ) { tmp[--i] = (unsigned char ) uval; /* only want lower 8 bits */ uval >>= 8; } for (i = 0; i < sizeof(uval)-1; i++) if (!((tmp[i] == 0 && !(tmp[i+1] & 0x80)) || (tmp[i] == 0xFF && (tmp[i+1] & 0x80)))) break; len = sizeof(uval) - i; if (ber_enclen(o, len, 1, 1) != 1) return -1; if (odr_write(o, (const char *) tmp + i, len) < 0) return -1; return 0; } /* * Returns: Number of bytes read or 0 if no match, -1 if error. */ int ber_decinteger(const char *buf, Odr_int *val, int max) { unsigned long long uval = 0; int i, len; int res; const unsigned char *b = (const unsigned char *) buf; if ((res = ber_declen((const char *) b, &len, max)) < 0) return -1; if (len+res > max || len < 0) /* out of bounds or indefinite encoding */ return -1; if (len > (int) sizeof(uval)) /* let's be reasonable, here */ return -1; b += res; if (*b & 0x80) for (i = 0; i < (int) sizeof(uval) - len; i++) uval = (uval << 8) + 0xFF; for (i = 0; i < len; i++) uval = (uval << 8) + b[i]; *val = uval; b += len; return (const char *) b - buf; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/diag-entry.c0000644000175000017500000000113413265142510012326 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file diag-entry.c * \brief Diagnostic table lookup */ #if HAVE_CONFIG_H #include #endif #include "diag-entry.h" const char *yaz_diag_to_str(struct yaz_diag_entry *tab, int code) { int i; for (i=0; tab[i].msg; i++) if (tab[i].code == code) return tab[i].msg; return "Unknown error"; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/copy_types.c0000644000175000017500000000370613265142510012470 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file copy_types.c \brief Copies various Z39.50 types */ #if HAVE_CONFIG_H #include #endif #include #include /** macro clone_z_type copies a given ASN.1 type */ #define clone_z_type(x) \ Z_##x *yaz_clone_z_##x(Z_##x *q, NMEM nmem_out) \ { \ Z_##x *q1 = 0; \ ODR enc = odr_createmem(ODR_ENCODE); \ ODR dec = odr_createmem(ODR_DECODE); \ if (z_##x(enc, &q, 0, 0)) \ { \ int len; \ char *buf = odr_getbuf(enc, &len, 0); \ if (buf) \ { \ odr_setbuf(dec, buf, len, 0); \ z_##x(dec, &q1, 0, 0); \ nmem_transfer(nmem_out, dec->mem); \ } \ } \ odr_destroy(enc); \ odr_destroy(dec); \ return q1; \ } \ int yaz_compare_z_##x(Z_##x *a, Z_##x *b) \ { \ int ret = 0; \ ODR o_a = odr_createmem(ODR_ENCODE); \ ODR o_b = odr_createmem(ODR_ENCODE); \ int r_a = z_##x(o_a, &a, 1, 0); \ int r_b = z_##x(o_b, &b, 1, 0); \ if (r_a && r_b) \ { \ int len_a, len_b; \ char *buf_a = odr_getbuf(o_a, &len_a, 0); \ char *buf_b = odr_getbuf(o_b, &len_b, 0); \ if (buf_a && buf_b && len_a == len_b && !memcmp(buf_a, buf_b, len_a)) \ ret = 1; \ else if (!buf_a && !buf_b) \ ret = 1; \ } \ odr_destroy(o_a); \ odr_destroy(o_b); \ return ret; \ } clone_z_type(NamePlusRecord) clone_z_type(RPNQuery) clone_z_type(Query) clone_z_type(RecordComposition) clone_z_type(OtherInformation) Z_RPNQuery *yaz_copy_z_RPNQuery(Z_RPNQuery *q, ODR out) { return yaz_clone_z_RPNQuery(q, out->mem); } Z_Query *yaz_copy_Z_Query(Z_Query *q, ODR out) { return yaz_clone_z_Query(q, out->mem); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/seshigh.c0000644000175000017500000036650213554532002011732 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file seshigh.c * \brief Implements GFS session logic. * * Frontend server logic. * * This code receives incoming APDUs, and handles client requests by means * of the backend API. * * Some of the code is getting quite involved, compared to simpler servers - * primarily because it is asynchronous both in the communication with * the user and the backend. We think the complexity will pay off in * the form of greater flexibility when more asynchronous facilities * are implemented. * * Memory management has become somewhat involved. In the simple case, where * only one PDU is pending at a time, it will simply reuse the same memory, * once it has found its working size. When we enable multiple concurrent * operations, perhaps even with multiple parallel calls to the backend, it * will maintain a pool of buffers for encoding and decoding, trying to * minimize memory allocation/deallocation during normal operation. * */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_STAT_H #include #endif #ifdef WIN32 #include #include #define S_ISREG(x) (x & _S_IFREG) #include #endif #if HAVE_UNISTD_H #include #endif #if YAZ_HAVE_XML2 #include #include #endif #include #include #include #include "eventl.h" #include "session.h" #include "mime.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static void process_gdu_request(association *assoc, request *req); static int process_z_request(association *assoc, request *req, char **msg); static int process_gdu_response(association *assoc, request *req, Z_GDU *res); static int process_z_response(association *assoc, request *req, Z_APDU *res); static Z_APDU *process_initRequest(association *assoc, request *reqb); static Z_External *init_diagnostics(ODR odr, int errcode, const char *errstring); static Z_APDU *process_searchRequest(association *assoc, request *reqb); static Z_APDU *response_searchRequest(association *assoc, request *reqb, bend_search_rr *bsrr); static Z_APDU *process_presentRequest(association *assoc, request *reqb); static Z_APDU *process_scanRequest(association *assoc, request *reqb); static Z_APDU *process_sortRequest(association *assoc, request *reqb); static void process_close(association *assoc, request *reqb); static Z_APDU *process_deleteRequest(association *assoc, request *reqb); static Z_APDU *process_segmentRequest(association *assoc, request *reqb); static Z_APDU *process_ESRequest(association *assoc, request *reqb); /* dynamic logging levels */ static int logbits_set = 0; static int log_session = 0; /* one-line logs for session */ static int log_sessiondetail = 0; /* more detailed stuff */ static int log_request = 0; /* one-line logs for requests */ static int log_requestdetail = 0; /* more detailed stuff */ /** get_logbits sets global loglevel bits */ static void get_logbits(void) { /* needs to be called after parsing cmd-line args that can set loglevels!*/ if (!logbits_set) { logbits_set = 1; log_session = yaz_log_module_level("session"); log_sessiondetail = yaz_log_module_level("sessiondetail"); log_request = yaz_log_module_level("request"); log_requestdetail = yaz_log_module_level("requestdetail"); } } static void wr_diag(WRBUF w, int error, const char *addinfo) { wrbuf_printf(w, "ERROR %d+", error); wrbuf_puts_replace_char(w, diagbib1_str(error), ' ', '_'); if (addinfo) { wrbuf_puts(w, "+"); wrbuf_puts_replace_char(w, addinfo, ' ', '_'); } wrbuf_puts(w, " "); } static int odr_int_to_int(Odr_int v) { if (v >= INT_MAX) return INT_MAX; else if (v <= INT_MIN) return INT_MIN; else return (int) v; } /* * Create and initialize a new association-handle. * channel : iochannel for the current line. * link : communications channel. * Returns: 0 or a new association handle. */ association *create_association(IOCHAN channel, COMSTACK link, const char *apdufile) { association *anew; if (!logbits_set) get_logbits(); if (!(anew = (association *)xmalloc(sizeof(*anew)))) return 0; anew->init = 0; anew->version = 0; anew->last_control = 0; anew->client_chan = channel; anew->client_link = link; anew->cs_get_mask = 0; anew->cs_put_mask = 0; anew->cs_accept_mask = 0; if (!(anew->decode = odr_createmem(ODR_DECODE)) || !(anew->encode = odr_createmem(ODR_ENCODE))) return 0; if (apdufile && *apdufile) { FILE *f; if (!(anew->print = odr_createmem(ODR_PRINT))) return 0; if (*apdufile == '@') { odr_setprint(anew->print, yaz_log_file()); } else if (*apdufile != '-') { char filename[256]; sprintf(filename, "%.200s.%ld", apdufile, (long)getpid()); if (!(f = fopen(filename, "w"))) { yaz_log(YLOG_WARN|YLOG_ERRNO, "%s", filename); return 0; } setvbuf(f, 0, _IONBF, 0); odr_setprint(anew->print, f); } } else anew->print = 0; anew->input_buffer = 0; anew->input_buffer_len = 0; anew->backend = 0; anew->state = ASSOC_NEW; request_initq(&anew->incoming); request_initq(&anew->outgoing); anew->proto = cs_getproto(link); anew->server = 0; return anew; } /* * Free association and release resources. */ void destroy_association(association *h) { statserv_options_block *cb = statserv_getcontrol(); request *req; xfree(h->init); odr_destroy(h->decode); odr_destroy(h->encode); if (h->print) odr_destroy(h->print); if (h->input_buffer) xfree(h->input_buffer); if (h->backend) (*cb->bend_close)(h->backend); while ((req = request_deq(&h->incoming))) request_release(req); while ((req = request_deq(&h->outgoing))) request_release(req); request_delq(&h->incoming); request_delq(&h->outgoing); xfree(h); xmalloc_trav("session closed"); } static void do_close_req(association *a, int reason, char *message, request *req) { Z_APDU *apdu = zget_APDU(a->encode, Z_APDU_close); Z_Close *cls = apdu->u.close; /* Purge request queue */ while (request_deq(&a->incoming)); while (request_deq(&a->outgoing)); if (a->version >= 3) { yaz_log(log_requestdetail, "Sending Close PDU, reason=%d, message=%s", reason, message ? message : "none"); *cls->closeReason = reason; cls->diagnosticInformation = message; process_z_response(a, req, apdu); iochan_settimeout(a->client_chan, 20); } else { request_release(req); yaz_log(log_requestdetail, "v2 client. No Close PDU"); iochan_setevent(a->client_chan, EVENT_TIMEOUT); /* force imm close */ a->cs_put_mask = 0; } a->state = ASSOC_DEAD; } static void do_close(association *a, int reason, char *message) { request *req = request_get(&a->outgoing); do_close_req(a, reason, message, req); } int ir_read(IOCHAN h, int event) { association *assoc = (association *)iochan_getdata(h); COMSTACK conn = assoc->client_link; request *req; if ((assoc->cs_put_mask & EVENT_INPUT) == 0 && (event & assoc->cs_get_mask)) { /* We aren't speaking to this fellow */ if (assoc->state == ASSOC_DEAD) { yaz_log(log_session, "Connection closed - end of session"); cs_close(conn); destroy_association(assoc); iochan_destroy(h); return 0; } assoc->cs_get_mask = EVENT_INPUT; do { int res = cs_get(conn, &assoc->input_buffer, &assoc->input_buffer_len); if (res < 0 && cs_errno(conn) == CSBUFSIZE) { yaz_log(log_session, "Connection error: %s res=%d", cs_errmsg(cs_errno(conn)), res); req = request_get(&assoc->incoming); /* get a new request */ do_close_req(assoc, Z_Close_protocolError, "Incoming package too large", req); return 0; } else if (res <= 0) { assoc->state = ASSOC_DEAD; yaz_log(log_session, "Connection closed by client"); return 0; } else if (res == 1) /* incomplete read - wait for more */ { if (conn->io_pending & CS_WANT_WRITE) assoc->cs_get_mask |= EVENT_OUTPUT; iochan_setflag(h, assoc->cs_get_mask); return 0; } /* we got a complete PDU. Let's decode it */ yaz_log(YLOG_DEBUG, "Got PDU, %d bytes: lead=%02X %02X %02X", res, assoc->input_buffer[0] & 0xff, assoc->input_buffer[1] & 0xff, assoc->input_buffer[2] & 0xff); req = request_get(&assoc->incoming); /* get a new request */ odr_reset(assoc->decode); odr_setbuf(assoc->decode, assoc->input_buffer, res, 0); if (!z_GDU(assoc->decode, &req->gdu_request, 0, 0)) { yaz_log(YLOG_WARN, "ODR error on incoming PDU: %s [element %s] " "[near byte %ld] ", odr_errmsg(odr_geterror(assoc->decode)), odr_getelement(assoc->decode), (long) odr_offset(assoc->decode)); if (assoc->decode->error != OHTTP) { yaz_log(YLOG_WARN, "PDU dump:"); odr_dumpBER(yaz_log_file(), assoc->input_buffer, res); request_release(req); do_close(assoc, Z_Close_protocolError, "Malformed package"); } else { Z_GDU *p = z_get_HTTP_Response(assoc->encode, 400); assoc->state = ASSOC_DEAD; process_gdu_response(assoc, req, p); } return 0; } req->request_mem = odr_extract_mem(assoc->decode); if (assoc->print) { if (!z_GDU(assoc->print, &req->gdu_request, 0, 0)) yaz_log(YLOG_WARN, "ODR print error: %s", odr_errmsg(odr_geterror(assoc->print))); odr_reset(assoc->print); } request_enq(&assoc->incoming, req); } while (cs_more(conn)); } return 1; } /* * This is where PDUs from the client are read and the further * processing is initiated. Flow of control moves down through the * various process_* functions below, until the encoded result comes back up * to the output handler in here. * * h : the I/O channel that has an outstanding event. * event : the current outstanding event. */ void ir_session(IOCHAN h, int event) { int res; association *assoc = (association *)iochan_getdata(h); COMSTACK conn = assoc->client_link; request *req; assert(h && conn && assoc); if (event == EVENT_TIMEOUT) { if (assoc->state != ASSOC_UP) { yaz_log(log_session, "Timeout. Closing connection"); /* do we need to lod this at all */ cs_close(conn); destroy_association(assoc); iochan_destroy(h); } else { yaz_log(log_sessiondetail, "Timeout. Sending Z39.50 Close"); do_close(assoc, Z_Close_lackOfActivity, 0); } return; } if (event & assoc->cs_accept_mask) { if (!cs_accept(conn)) { yaz_log(YLOG_WARN, "accept failed"); destroy_association(assoc); iochan_destroy(h); return; } iochan_clearflag(h, EVENT_OUTPUT); if (conn->io_pending) { /* cs_accept didn't complete */ assoc->cs_accept_mask = ((conn->io_pending & CS_WANT_WRITE) ? EVENT_OUTPUT : 0) | ((conn->io_pending & CS_WANT_READ) ? EVENT_INPUT : 0); iochan_setflag(h, assoc->cs_accept_mask); } else { /* cs_accept completed. Prepare for reading (cs_get) */ assoc->cs_accept_mask = 0; assoc->cs_get_mask = EVENT_INPUT; iochan_setflag(h, assoc->cs_get_mask); } return; } if (event & assoc->cs_get_mask) /* input */ { if (!ir_read(h, event)) return; req = request_head(&assoc->incoming); if (req->state == REQUEST_IDLE) { request_deq(&assoc->incoming); process_gdu_request(assoc, req); } } if (event & assoc->cs_put_mask) { request *req = request_head(&assoc->outgoing); assoc->cs_put_mask = 0; yaz_log(YLOG_DEBUG, "ir_session (output)"); req->state = REQUEST_PENDING; switch (res = cs_put(conn, req->response, req->len_response)) { case -1: yaz_log(log_sessiondetail, "Connection closed by client"); cs_close(conn); destroy_association(assoc); iochan_destroy(h); break; case 0: /* all sent - release the request structure */ yaz_log(YLOG_DEBUG, "Wrote PDU, %d bytes", req->len_response); #if 0 yaz_log(YLOG_DEBUG, "HTTP out:\n%.*s", req->len_response, req->response); #endif request_deq(&assoc->outgoing); request_release(req); if (!request_head(&assoc->outgoing)) { /* restore mask for cs_get operation ... */ iochan_clearflag(h, EVENT_OUTPUT|EVENT_INPUT); iochan_setflag(h, assoc->cs_get_mask); if (assoc->state == ASSOC_DEAD) iochan_setevent(assoc->client_chan, EVENT_TIMEOUT); } else { assoc->cs_put_mask = EVENT_OUTPUT; } break; default: if (conn->io_pending & CS_WANT_WRITE) assoc->cs_put_mask |= EVENT_OUTPUT; if (conn->io_pending & CS_WANT_READ) assoc->cs_put_mask |= EVENT_INPUT; iochan_setflag(h, assoc->cs_put_mask); } } if (event & EVENT_EXCEPT) { if (assoc->state != ASSOC_DEAD) yaz_log(YLOG_WARN, "ir_session (exception)"); cs_close(conn); destroy_association(assoc); iochan_destroy(h); } } static int process_z_request(association *assoc, request *req, char **msg); static void assoc_init_reset(association *assoc, const char *peer_name1) { const char *peer_name2 = cs_addrstr(assoc->client_link); xfree(assoc->init); assoc->init = (bend_initrequest *) xmalloc(sizeof(*assoc->init)); assoc->init->stream = assoc->encode; assoc->init->print = assoc->print; assoc->init->auth = 0; assoc->init->referenceId = 0; assoc->init->implementation_version = 0; assoc->init->implementation_id = 0; assoc->init->implementation_name = 0; assoc->init->query_charset = 0; assoc->init->records_in_same_charset = 0; assoc->init->bend_sort = NULL; assoc->init->bend_search = NULL; assoc->init->bend_present = NULL; assoc->init->bend_esrequest = NULL; assoc->init->bend_delete = NULL; assoc->init->bend_scan = NULL; assoc->init->bend_segment = NULL; assoc->init->bend_fetch = NULL; assoc->init->bend_explain = NULL; assoc->init->bend_srw_scan = NULL; assoc->init->bend_srw_update = NULL; assoc->init->named_result_sets = 0; assoc->init->charneg_request = NULL; assoc->init->charneg_response = NULL; assoc->init->decode = assoc->decode; assoc->init->peer_name = (char *) odr_malloc(assoc->encode, (peer_name1 ? strlen(peer_name1) : 0) + 4 + strlen(peer_name2)); strcpy(assoc->init->peer_name, ""); if (peer_name1) { strcat(assoc->init->peer_name, peer_name1); strcat(assoc->init->peer_name, ", "); } strcat(assoc->init->peer_name, peer_name2); yaz_log(log_requestdetail, "peer %s", assoc->init->peer_name); } static int srw_bend_init(association *assoc, Z_HTTP_Header *headers, Z_SRW_diagnostic **d, int *num, Z_SRW_PDU *sr) { statserv_options_block *cb = statserv_getcontrol(); if (!assoc->init) { const char *encoding = "UTF-8"; Z_External *ce; bend_initresult *binitres; yaz_log(log_requestdetail, "srw_bend_init config=%s", cb->configname); assoc_init_reset(assoc, z_HTTP_header_lookup(headers, "X-Forwarded-For")); if (sr->username) { Z_IdAuthentication *auth = (Z_IdAuthentication *) odr_malloc(assoc->decode, sizeof(*auth)); size_t len; len = strlen(sr->username) + 1; if (sr->password) len += strlen(sr->password) + 2; yaz_log(log_requestdetail, "username=%s password-len=%ld", sr->username, (long) (sr->password ? strlen(sr->password) : 0)); auth->which = Z_IdAuthentication_open; auth->u.open = (char *) odr_malloc(assoc->decode, len); strcpy(auth->u.open, sr->username); if (sr->password && *sr->password) { strcat(auth->u.open, "/"); strcat(auth->u.open, sr->password); } assoc->init->auth = auth; } #if 1 ce = yaz_set_proposal_charneg(assoc->decode, &encoding, 1, 0, 0, 1); assoc->init->charneg_request = ce->u.charNeg3; #endif assoc->backend = 0; if (!(binitres = (*cb->bend_init)(assoc->init))) { assoc->state = ASSOC_DEAD; yaz_add_srw_diagnostic(assoc->encode, d, num, YAZ_SRW_AUTHENTICATION_ERROR, 0); return 0; } assoc->backend = binitres->handle; assoc->init->auth = 0; if (binitres->errcode) { int srw_code = yaz_diag_bib1_to_srw(binitres->errcode); assoc->state = ASSOC_DEAD; yaz_add_srw_diagnostic(assoc->encode, d, num, srw_code, binitres->errstring); return 0; } return 1; } return 1; } static int retrieve_fetch(association *assoc, bend_fetch_rr *rr) { #if YAZ_HAVE_XML2 yaz_record_conv_t rc = 0; const char *match_schema = 0; Odr_oid *match_syntax = 0; if (assoc->server) { int r; const char *input_schema = yaz_get_esn(rr->comp); Odr_oid *input_syntax_raw = rr->request_format; const char *backend_schema = 0; Odr_oid *backend_syntax = 0; r = yaz_retrieval_request(assoc->server->retrieval, input_schema, input_syntax_raw, &match_schema, &match_syntax, &rc, &backend_schema, &backend_syntax); if (r == -1) /* error ? */ { const char *details = yaz_retrieval_get_error( assoc->server->retrieval); rr->errcode = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; if (details) rr->errstring = odr_strdup(rr->stream, details); return -1; } else if (r == 1 || r == 3) { const char *details = input_schema; rr->errcode = YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_; if (details) rr->errstring = odr_strdup(rr->stream, details); return -1; } else if (r == 2) { rr->errcode = YAZ_BIB1_RECORD_SYNTAX_UNSUPP; if (input_syntax_raw) { char oidbuf[OID_STR_MAX]; oid_oid_to_dotstring(input_syntax_raw, oidbuf); rr->errstring = odr_strdup(rr->stream, oidbuf); } return -1; } if (backend_schema) { yaz_set_esn(&rr->comp, backend_schema, odr_getmem(rr->stream)); } if (backend_syntax) rr->request_format = backend_syntax; } (*assoc->init->bend_fetch)(assoc->backend, rr); if (rc && rr->record && rr->errcode == 0) { /* post conversion must take place .. */ WRBUF output_record = wrbuf_alloc(); int r = 1; const char *details = 0; if (rr->len > 0) { r = yaz_record_conv_record(rc, rr->record, rr->len, output_record); if (r) details = yaz_record_conv_get_error(rc); } else if (rr->len == -1 && rr->output_format && !oid_oidcmp(rr->output_format, yaz_oid_recsyn_opac)) { r = yaz_record_conv_opac_record( rc, (Z_OPACRecord *) rr->record, output_record); if (r) details = yaz_record_conv_get_error(rc); } if (r == 0 && match_syntax && !oid_oidcmp(match_syntax, yaz_oid_recsyn_opac)) { yaz_marc_t mt = yaz_marc_create(); Z_OPACRecord *opac = 0; if (yaz_xml_to_opac(mt, wrbuf_buf(output_record), wrbuf_len(output_record), &opac, 0 /* iconv */, rr->stream->mem, 0) && opac) { rr->len = -1; rr->record = (char *) opac; } else { details = "XML to OPAC conversion failed"; r = 1; } yaz_marc_destroy(mt); } else if (r == 0) { rr->len = wrbuf_len(output_record); rr->record = (char *) odr_malloc(rr->stream, rr->len); memcpy(rr->record, wrbuf_buf(output_record), rr->len); } if (r) { rr->errcode = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; rr->surrogate_flag = 1; if (details) rr->errstring = odr_strdup(rr->stream, details); } wrbuf_destroy(output_record); } if (match_syntax) rr->output_format = match_syntax; if (match_schema) rr->schema = odr_strdup(rr->stream, match_schema); #else (*assoc->init->bend_fetch)(assoc->backend, rr); #endif return 0; } static int srw_bend_fetch(association *assoc, int pos, Z_SRW_searchRetrieveRequest *srw_req, Z_SRW_record *record, const char **addinfo, int *last_in_set) { bend_fetch_rr rr; ODR o = assoc->encode; rr.setname = "default"; rr.number = pos; rr.referenceId = 0; rr.request_format = odr_oiddup(assoc->decode, yaz_oid_recsyn_xml); rr.comp = (Z_RecordComposition *) odr_malloc(assoc->decode, sizeof(*rr.comp)); rr.comp->which = Z_RecordComp_complex; rr.comp->u.complex = (Z_CompSpec *) odr_malloc(assoc->decode, sizeof(Z_CompSpec)); rr.comp->u.complex->selectAlternativeSyntax = (bool_t *) odr_malloc(assoc->encode, sizeof(bool_t)); *rr.comp->u.complex->selectAlternativeSyntax = 0; rr.comp->u.complex->num_dbSpecific = 0; rr.comp->u.complex->dbSpecific = 0; rr.comp->u.complex->num_recordSyntax = 0; rr.comp->u.complex->recordSyntax = 0; rr.comp->u.complex->generic = (Z_Specification *) odr_malloc(assoc->decode, sizeof(Z_Specification)); /* schema uri = recordSchema (or NULL if recordSchema is not given) */ rr.comp->u.complex->generic->which = Z_Schema_uri; rr.comp->u.complex->generic->schema.uri = srw_req->recordSchema; /* ESN = recordSchema if recordSchema is present */ rr.comp->u.complex->generic->elementSpec = 0; if (srw_req->recordSchema) { rr.comp->u.complex->generic->elementSpec = (Z_ElementSpec *) odr_malloc(assoc->encode, sizeof(Z_ElementSpec)); rr.comp->u.complex->generic->elementSpec->which = Z_ElementSpec_elementSetName; rr.comp->u.complex->generic->elementSpec->u.elementSetName = srw_req->recordSchema; } rr.stream = assoc->encode; rr.print = assoc->print; rr.basename = 0; rr.len = 0; rr.record = 0; rr.last_in_set = 0; rr.errcode = 0; rr.errstring = 0; rr.surrogate_flag = 0; rr.schema = srw_req->recordSchema; if (!assoc->init->bend_fetch) return 1; retrieve_fetch(assoc, &rr); *last_in_set = rr.last_in_set; if (rr.errcode && rr.surrogate_flag) { int code = yaz_diag_bib1_to_srw(rr.errcode); yaz_mk_sru_surrogate(o, record, pos, code, rr.errstring); return 0; } else if (rr.len >= 0) { record->recordData_buf = rr.record; record->recordData_len = rr.len; record->recordPosition = odr_intdup(o, pos); record->recordSchema = odr_strdup_null( o, rr.schema ? rr.schema : srw_req->recordSchema); } if (rr.errcode) { *addinfo = rr.errstring; return rr.errcode; } return 0; } static int cql2pqf(ODR odr, const char *cql, cql_transform_t ct, Z_Query *query_result, char **sortkeys_p) { /* have a CQL query and CQL to PQF transform .. */ CQL_parser cp = cql_parser_create(); int r; int srw_errcode = 0; const char *add = 0; WRBUF rpn_buf = wrbuf_alloc(); *sortkeys_p = 0; r = cql_parser_string(cp, cql); if (r) { srw_errcode = YAZ_SRW_QUERY_SYNTAX_ERROR; } if (!r) { struct cql_node *cn = cql_parser_result(cp); /* Syntax OK */ r = cql_transform(ct, cn, wrbuf_vp_puts, rpn_buf); if (r) srw_errcode = cql_transform_error(ct, &add); else { char out[100]; int r = cql_sortby_to_sortkeys_buf(cn, out, sizeof(out)-1); if (r == 0) { if (*out) yaz_log(log_requestdetail, "srw_sortKeys '%s'", out); *sortkeys_p = odr_strdup(odr, out); } else { yaz_log(log_requestdetail, "failed to create srw_sortKeys"); srw_errcode = YAZ_SRW_UNSUPP_SORT_TYPE; } } } if (!r) { /* Syntax & transform OK. */ /* Convert PQF string to Z39.50 to RPN query struct */ YAZ_PQF_Parser pp = yaz_pqf_create(); Z_RPNQuery *rpnquery = yaz_pqf_parse(pp, odr, wrbuf_cstr(rpn_buf)); if (!rpnquery) { size_t off; const char *pqf_msg; int code = yaz_pqf_error(pp, &pqf_msg, &off); yaz_log(YLOG_WARN, "PQF Parser Error %s (code %d)", pqf_msg, code); srw_errcode = YAZ_SRW_QUERY_SYNTAX_ERROR; } else { query_result->which = Z_Query_type_1; query_result->u.type_1 = rpnquery; } yaz_pqf_destroy(pp); } cql_parser_destroy(cp); wrbuf_destroy(rpn_buf); return srw_errcode; } static int cql2pqf_scan(ODR odr, const char *cql, cql_transform_t ct, Z_AttributesPlusTerm *result) { Z_Query query; Z_RPNQuery *rpn; char *sortkeys = 0; int srw_error = cql2pqf(odr, cql, ct, &query, &sortkeys); if (srw_error) return srw_error; if (query.which != Z_Query_type_1 && query.which != Z_Query_type_101) return YAZ_SRW_QUERY_SYNTAX_ERROR; /* bad query type */ rpn = query.u.type_1; if (!rpn->RPNStructure) return YAZ_SRW_QUERY_SYNTAX_ERROR; /* must be structure */ if (rpn->RPNStructure->which != Z_RPNStructure_simple) return YAZ_SRW_QUERY_SYNTAX_ERROR; /* must be simple */ if (rpn->RPNStructure->u.simple->which != Z_Operand_APT) return YAZ_SRW_QUERY_SYNTAX_ERROR; /* must be be attributes + term */ memcpy(result, rpn->RPNStructure->u.simple->u.attributesPlusTerm, sizeof(*result)); return 0; } static int ccl2pqf(ODR odr, const Odr_oct *ccl, CCL_bibset bibset, bend_search_rr *bsrr) { char *ccl0; struct ccl_rpn_node *node; int errcode, pos; ccl0 = odr_strdupn(odr, (char*) ccl->buf, ccl->len); if ((node = ccl_find_str(bibset, ccl0, &errcode, &pos)) == 0) { bsrr->errstring = (char*) ccl_err_msg(errcode); return YAZ_SRW_QUERY_SYNTAX_ERROR; /* Query syntax error */ } bsrr->query->which = Z_Query_type_1; bsrr->query->u.type_1 = ccl_rpn_query(odr, node); return 0; } static void srw_bend_search(association *assoc, Z_HTTP_Header *headers, Z_SRW_PDU *sr, Z_SRW_PDU *res, int *http_code) { Z_SRW_searchRetrieveResponse *srw_res = res->u.response; int srw_error = 0; Z_External *ext; Z_SRW_searchRetrieveRequest *srw_req = sr->u.request; *http_code = 200; yaz_log(log_requestdetail, "Got SRW SearchRetrieveRequest"); srw_bend_init(assoc, headers, &srw_res->diagnostics, &srw_res->num_diagnostics, sr); if (srw_res->num_diagnostics == 0 && assoc->init) { bend_search_rr rr; rr.setname = "default"; rr.replace_set = 1; rr.num_bases = 1; rr.basenames = &srw_req->database; rr.referenceId = 0; rr.srw_sortKeys = 0; rr.srw_setname = 0; rr.srw_setnameIdleTime = 0; rr.estimated_hit_count = 0; rr.partial_resultset = 0; rr.query = (Z_Query *) odr_malloc(assoc->decode, sizeof(*rr.query)); rr.query->u.type_1 = 0; rr.extra_args = sr->extra_args; rr.extra_response_data = 0; rr.present_number = srw_req->maximumRecords ? *srw_req->maximumRecords : 0; if (!srw_req->queryType || !strcmp(srw_req->queryType, "cql")) { if (assoc->server && assoc->server->cql_transform) { int srw_errcode = cql2pqf(assoc->encode, srw_req->query, assoc->server->cql_transform, rr.query, &rr.srw_sortKeys); if (srw_errcode) { yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, srw_errcode, 0); } } else { /* CQL query to backend. Wrap it - Z39.50 style */ ext = (Z_External *) odr_malloc(assoc->decode, sizeof(*ext)); ext->direct_reference = odr_getoidbystr(assoc->decode, "1.2.840.10003.16.2"); ext->indirect_reference = 0; ext->descriptor = 0; ext->which = Z_External_CQL; ext->u.cql = srw_req->query; rr.query->which = Z_Query_type_104; rr.query->u.type_104 = ext; } } else if (!strcmp(srw_req->queryType, "pqf")) { Z_RPNQuery *RPNquery; YAZ_PQF_Parser pqf_parser; pqf_parser = yaz_pqf_create(); RPNquery = yaz_pqf_parse(pqf_parser, assoc->decode, srw_req->query); if (!RPNquery) { const char *pqf_msg; size_t off; int code = yaz_pqf_error(pqf_parser, &pqf_msg, &off); yaz_log(log_requestdetail, "Parse error %d %s near offset %ld", code, pqf_msg, (long) off); srw_error = YAZ_SRW_QUERY_SYNTAX_ERROR; } rr.query->which = Z_Query_type_1; rr.query->u.type_1 = RPNquery; yaz_pqf_destroy(pqf_parser); } else { yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRW_UNSUPP_QUERY_TYPE, 0); } if (rr.query->u.type_1) { rr.stream = assoc->encode; rr.decode = assoc->decode; rr.print = assoc->print; if (srw_req->sort.sortKeys) rr.srw_sortKeys = odr_strdup(assoc->encode, srw_req->sort.sortKeys); rr.association = assoc; rr.hits = 0; rr.errcode = 0; rr.errstring = 0; rr.search_info = 0; rr.search_input = 0; if (srw_req->facetList) yaz_oi_set_facetlist(&rr.search_input, assoc->encode, srw_req->facetList); yaz_log_zquery_level(log_requestdetail,rr.query); (assoc->init->bend_search)(assoc->backend, &rr); if (rr.errcode) { if (rr.errcode == YAZ_BIB1_DATABASE_UNAVAILABLE) { *http_code = 404; } else { srw_error = yaz_diag_bib1_to_srw(rr.errcode); yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, srw_error, rr.errstring); } } else { int number = srw_req->maximumRecords ? odr_int_to_int(*srw_req->maximumRecords) : 0; int start = srw_req->startRecord ? odr_int_to_int(*srw_req->startRecord) : 1; yaz_log(log_requestdetail, "Request to pack %d+%d out of " ODR_INT_PRINTF, start, number, rr.hits); srw_res->numberOfRecords = odr_intdup(assoc->encode, rr.hits); if (rr.srw_setname) { srw_res->resultSetId = odr_strdup(assoc->encode, rr.srw_setname ); srw_res->resultSetIdleTime = odr_intdup(assoc->encode, *rr.srw_setnameIdleTime ); } srw_res->facetList = yaz_oi_get_facetlist(&rr.search_info); if (start > rr.hits || start < 1) { /* if hits<=0 and start=1 we don't return a diagnostic */ if (start != 1) yaz_add_srw_diagnostic( assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRW_FIRST_RECORD_POSITION_OUT_OF_RANGE, 0); } else if (number > 0) { int i; int ok = 1; if (start + number > rr.hits) number = odr_int_to_int(rr.hits) - start + 1; /* Call bend_present if defined */ if (assoc->init->bend_present) { bend_present_rr *bprr = (bend_present_rr*) odr_malloc(assoc->decode, sizeof(*bprr)); bprr->setname = "default"; bprr->start = start; bprr->number = number; if (srw_req->recordSchema) { bprr->comp = (Z_RecordComposition *) odr_malloc(assoc->decode, sizeof(*bprr->comp)); bprr->comp->which = Z_RecordComp_simple; bprr->comp->u.simple = (Z_ElementSetNames *) odr_malloc(assoc->decode, sizeof(Z_ElementSetNames)); bprr->comp->u.simple->which = Z_ElementSetNames_generic; bprr->comp->u.simple->u.generic = srw_req->recordSchema; } else { bprr->comp = 0; } bprr->stream = assoc->encode; bprr->referenceId = 0; bprr->print = assoc->print; bprr->association = assoc; bprr->errcode = 0; bprr->errstring = NULL; (*assoc->init->bend_present)(assoc->backend, bprr); if (bprr->errcode) { srw_error = yaz_diag_bib1_to_srw(bprr->errcode); yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, srw_error, bprr->errstring); ok = 0; } } if (ok) { int j = 0; int packing = Z_SRW_recordPacking_string; if (srw_req->recordPacking) { packing = yaz_srw_str_to_pack(srw_req->recordPacking); if (packing == -1) packing = Z_SRW_recordPacking_string; } srw_res->records = (Z_SRW_record *) odr_malloc(assoc->encode, number * sizeof(*srw_res->records)); srw_res->extra_records = (Z_SRW_extra_record **) odr_malloc(assoc->encode, number*sizeof(*srw_res->extra_records)); for (i = 0; irecords[j].recordPacking = packing; srw_res->records[j].recordData_buf = 0; srw_res->extra_records[j] = 0; yaz_log(YLOG_DEBUG, "srw_bend_fetch %d", i+start); errcode = srw_bend_fetch(assoc, i+start, srw_req, srw_res->records + j, &addinfo, &last_in_set); if (errcode) { yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, yaz_diag_bib1_to_srw(errcode), addinfo); break; } if (srw_res->records[j].recordData_buf) j++; if (last_in_set) break; } srw_res->num_records = j; if (!j) srw_res->records = 0; } } if (rr.extra_response_data) { res->extraResponseData_buf = rr.extra_response_data; res->extraResponseData_len = strlen(rr.extra_response_data); } if (strcmp(res->srw_version, "2.") > 0) { if (rr.estimated_hit_count) srw_res->resultCountPrecision = odr_strdup(assoc->encode, "estimate"); else if (rr.partial_resultset) srw_res->resultCountPrecision = odr_strdup(assoc->encode, "minimum"); else srw_res->resultCountPrecision = odr_strdup(assoc->encode, "exact"); } else if (rr.estimated_hit_count || rr.partial_resultset) { yaz_add_srw_diagnostic( assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRW_RESULT_SET_CREATED_WITH_VALID_PARTIAL_RESULTS_AVAILABLE, 0); } } } } if (log_request) { WRBUF wr = wrbuf_alloc(); wrbuf_printf(wr, "SRWSearch %s ", srw_req->database); if (srw_res->num_diagnostics) wrbuf_printf(wr, "ERROR %s", srw_res->diagnostics[0].uri); else if (*http_code != 200) wrbuf_printf(wr, "ERROR info:http/%d", *http_code); else if (srw_res->numberOfRecords) { wrbuf_printf(wr, "OK " ODR_INT_PRINTF, (srw_res->numberOfRecords ? *srw_res->numberOfRecords : 0)); } wrbuf_printf(wr, " %s " ODR_INT_PRINTF "+%d", (srw_res->resultSetId ? srw_res->resultSetId : "-"), (srw_req->startRecord ? *srw_req->startRecord : 1), srw_res->num_records); yaz_log(log_request, "%s %s: %s", wrbuf_cstr(wr), srw_req->queryType, srw_req->query); wrbuf_destroy(wr); } } static char *srw_bend_explain_default(bend_explain_rr *rr) { #if YAZ_HAVE_XML2 xmlNodePtr ptr = (xmlNode *) rr->server_node_ptr; if (!ptr) return 0; for (ptr = ptr->children; ptr; ptr = ptr->next) { if (ptr->type != XML_ELEMENT_NODE) continue; if (!strcmp((const char *) ptr->name, "explain")) { int len; xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0"); xmlChar *buf_out; char *content; ptr = xmlCopyNode(ptr, 1); xmlDocSetRootElement(doc, ptr); xmlDocDumpMemory(doc, &buf_out, &len); content = (char*) odr_malloc(rr->stream, 1+len); memcpy(content, buf_out, len); content[len] = '\0'; xmlFree(buf_out); xmlFreeDoc(doc); rr->explain_buf = content; return 0; } } #endif return 0; } static void srw_bend_explain(association *assoc, Z_HTTP_Header *headers, Z_SRW_PDU *sr, Z_SRW_explainResponse *srw_res, int *http_code) { Z_SRW_explainRequest *srw_req = sr->u.explain_request; yaz_log(log_requestdetail, "Got SRW ExplainRequest"); srw_bend_init(assoc, headers, &srw_res->diagnostics, &srw_res->num_diagnostics, sr); if (!assoc->init && srw_res->num_diagnostics == 0) *http_code = 404; if (assoc->init) { bend_explain_rr rr; rr.stream = assoc->encode; rr.decode = assoc->decode; rr.print = assoc->print; rr.explain_buf = 0; rr.database = srw_req->database; if (assoc->server) rr.server_node_ptr = assoc->server->server_node_ptr; else rr.server_node_ptr = 0; rr.schema = "http://explain.z3950.org/dtd/2.0/"; if (assoc->init->bend_explain) (*assoc->init->bend_explain)(assoc->backend, &rr); else srw_bend_explain_default(&rr); if (rr.explain_buf) { int packing = Z_SRW_recordPacking_string; if (srw_req->recordPacking) { packing = yaz_srw_str_to_pack(srw_req->recordPacking); if (packing == -1) packing = Z_SRW_recordPacking_string; } srw_res->record.recordSchema = rr.schema; srw_res->record.recordPacking = packing; srw_res->record.recordData_buf = rr.explain_buf; srw_res->record.recordData_len = strlen(rr.explain_buf); srw_res->record.recordPosition = 0; *http_code = 200; } } } static void srw_bend_scan(association *assoc, Z_HTTP_Header *headers, Z_SRW_PDU *sr, Z_SRW_PDU *res, int *http_code) { Z_SRW_scanRequest *srw_req = sr->u.scan_request; Z_SRW_scanResponse *srw_res = res->u.scan_response; yaz_log(log_requestdetail, "Got SRW ScanRequest"); *http_code = 200; srw_bend_init(assoc, headers, &srw_res->diagnostics, &srw_res->num_diagnostics, sr); if (srw_res->num_diagnostics == 0 && assoc->init) { int step_size = 0; struct scan_entry *save_entries; bend_scan_rr *bsrr = (bend_scan_rr *) odr_malloc(assoc->encode, sizeof(*bsrr)); bsrr->num_bases = 1; bsrr->basenames = &srw_req->database; bsrr->num_entries = srw_req->maximumTerms ? odr_int_to_int(*srw_req->maximumTerms) : 10; bsrr->term_position = srw_req->responsePosition ? odr_int_to_int(*srw_req->responsePosition) : 1; bsrr->errcode = 0; bsrr->errstring = 0; bsrr->referenceId = 0; bsrr->stream = assoc->encode; bsrr->print = assoc->print; bsrr->step_size = &step_size; bsrr->entries = 0; bsrr->setname = 0; bsrr->extra_args = sr->extra_args; bsrr->extra_response_data = 0; if (bsrr->num_entries > 0) { int i; bsrr->entries = (struct scan_entry *) odr_malloc(assoc->decode, sizeof(*bsrr->entries) * bsrr->num_entries); for (i = 0; inum_entries; i++) { bsrr->entries[i].term = 0; bsrr->entries[i].occurrences = 0; bsrr->entries[i].errcode = 0; bsrr->entries[i].errstring = 0; bsrr->entries[i].display_term = 0; } } save_entries = bsrr->entries; /* save it so we can compare later */ if (srw_req->queryType && !strcmp(srw_req->queryType, "pqf") && assoc->init->bend_scan) { YAZ_PQF_Parser pqf_parser = yaz_pqf_create(); bsrr->term = yaz_pqf_scan(pqf_parser, assoc->decode, &bsrr->attributeset, srw_req->scanClause); yaz_pqf_destroy(pqf_parser); bsrr->scanClause = 0; ((int (*)(void *, bend_scan_rr *)) (*assoc->init->bend_scan))(assoc->backend, bsrr); } else if ((!srw_req->queryType || !strcmp(srw_req->queryType, "cql")) && assoc->init->bend_scan && assoc->server && assoc->server->cql_transform) { int srw_error; bsrr->scanClause = 0; bsrr->attributeset = 0; bsrr->term = (Z_AttributesPlusTerm *) odr_malloc(assoc->decode, sizeof(*bsrr->term)); srw_error = cql2pqf_scan(assoc->encode, srw_req->scanClause, assoc->server->cql_transform, bsrr->term); if (srw_error) yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, srw_error, 0); else { ((int (*)(void *, bend_scan_rr *)) (*assoc->init->bend_scan))(assoc->backend, bsrr); } } else if ((!srw_req->queryType || !strcmp(srw_req->queryType, "cql")) && assoc->init->bend_srw_scan) { bsrr->term = 0; bsrr->attributeset = 0; bsrr->scanClause = srw_req->scanClause; ((int (*)(void *, bend_scan_rr *)) (*assoc->init->bend_srw_scan))(assoc->backend, bsrr); } else { yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRW_UNSUPP_OPERATION, "scan"); } if (bsrr->extra_response_data) { res->extraResponseData_buf = bsrr->extra_response_data; res->extraResponseData_len = strlen(bsrr->extra_response_data); } if (bsrr->errcode) { int srw_error; if (bsrr->errcode == YAZ_BIB1_DATABASE_UNAVAILABLE) { *http_code = 404; return; } srw_error = yaz_diag_bib1_to_srw(bsrr->errcode); yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, srw_error, bsrr->errstring); } else if (srw_res->num_diagnostics == 0 && bsrr->num_entries) { int i; srw_res->terms = (Z_SRW_scanTerm*) odr_malloc(assoc->encode, sizeof(*srw_res->terms) * bsrr->num_entries); srw_res->num_terms = bsrr->num_entries; for (i = 0; inum_entries; i++) { Z_SRW_scanTerm *t = srw_res->terms + i; t->value = odr_strdup(assoc->encode, bsrr->entries[i].term); t->numberOfRecords = odr_intdup(assoc->encode, bsrr->entries[i].occurrences); t->displayTerm = 0; if (save_entries == bsrr->entries && bsrr->entries[i].display_term) { /* the entries was _not_ set by the handler. So it's safe to test for new member display_term. It is NULL'ed by us. */ t->displayTerm = odr_strdup(assoc->encode, bsrr->entries[i].display_term); } t->whereInList = 0; } } } if (log_request) { WRBUF wr = wrbuf_alloc(); wrbuf_printf(wr, "SRWScan %s ", srw_req->database); if (srw_res->num_diagnostics) wrbuf_printf(wr, "ERROR %s - ", srw_res->diagnostics[0].uri); else if (srw_res->num_terms) wrbuf_printf(wr, "OK %d - ", srw_res->num_terms); else wrbuf_printf(wr, "OK - - "); wrbuf_printf(wr, ODR_INT_PRINTF "+" ODR_INT_PRINTF " ", (srw_req->responsePosition ? *srw_req->responsePosition : 1), (srw_req->maximumTerms ? *srw_req->maximumTerms : 1)); /* there is no step size in SRU/W ??? */ wrbuf_printf(wr, "%s: %s ", srw_req->queryType, srw_req->scanClause); yaz_log(log_request, "%s ", wrbuf_cstr(wr) ); wrbuf_destroy(wr); } } static void srw_bend_update(association *assoc, Z_HTTP_Header *headers, Z_SRW_PDU *sr, Z_SRW_updateResponse *srw_res, int *http_code) { Z_SRW_updateRequest *srw_req = sr->u.update_request; yaz_log(log_session, "SRWUpdate action=%s", srw_req->operation); yaz_log(YLOG_DEBUG, "num_diag = %d", srw_res->num_diagnostics ); srw_bend_init(assoc, headers, &srw_res->diagnostics, &srw_res->num_diagnostics, sr); if (!assoc->init && srw_res->num_diagnostics == 0) *http_code = 404; if (assoc->init) { bend_update_rr rr; Z_SRW_extra_record *extra = srw_req->extra_record; rr.stream = assoc->encode; rr.print = assoc->print; rr.num_bases = 1; rr.basenames = &srw_req->database; rr.operation = srw_req->operation; rr.operation_status = "failed"; rr.record_id = 0; rr.record_versions = 0; rr.num_versions = 0; rr.record_packing = "string"; rr.record_schema = 0; rr.record_data = 0; rr.extra_record_data = 0; rr.extra_request_data = 0; rr.extra_response_data = 0; rr.uri = 0; rr.message = 0; rr.details = 0; *http_code = 200; if (rr.operation == 0) { yaz_add_sru_update_diagnostic( assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRU_UPDATE_MISSING_MANDATORY_ELEMENT_RECORD_REJECTED, "action" ); return; } yaz_log(YLOG_DEBUG, "basename = %s", rr.basenames[0] ); yaz_log(YLOG_DEBUG, "Operation = %s", rr.operation ); if (!strcmp( rr.operation, "delete")) { if (srw_req->record && !srw_req->record->recordSchema) { rr.record_schema = odr_strdup( assoc->encode, srw_req->record->recordSchema); } if (srw_req->record) { rr.record_data = odr_strdupn( assoc->encode, srw_req->record->recordData_buf, srw_req->record->recordData_len ); } if (extra && extra->extraRecordData_len) { rr.extra_record_data = odr_strdupn( assoc->encode, extra->extraRecordData_buf, extra->extraRecordData_len ); } if (srw_req->recordId) rr.record_id = srw_req->recordId; else if (extra && extra->recordIdentifier) rr.record_id = extra->recordIdentifier; } else if (!strcmp(rr.operation, "replace")) { if (srw_req->recordId) rr.record_id = srw_req->recordId; else if (extra && extra->recordIdentifier) rr.record_id = extra->recordIdentifier; else { yaz_add_sru_update_diagnostic( assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRU_UPDATE_MISSING_MANDATORY_ELEMENT_RECORD_REJECTED, "recordIdentifier"); } if (!srw_req->record) { yaz_add_sru_update_diagnostic( assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRU_UPDATE_MISSING_MANDATORY_ELEMENT_RECORD_REJECTED, "record"); } else { if (srw_req->record->recordSchema) rr.record_schema = odr_strdup( assoc->encode, srw_req->record->recordSchema); if (srw_req->record->recordData_len ) { rr.record_data = odr_strdupn(assoc->encode, srw_req->record->recordData_buf, srw_req->record->recordData_len ); } else { yaz_add_sru_update_diagnostic( assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRU_UPDATE_MISSING_MANDATORY_ELEMENT_RECORD_REJECTED, "recordData" ); } } if (extra && extra->extraRecordData_len) { rr.extra_record_data = odr_strdupn( assoc->encode, extra->extraRecordData_buf, extra->extraRecordData_len ); } } else if (!strcmp(rr.operation, "insert")) { if (srw_req->recordId) rr.record_id = srw_req->recordId; else if (extra) rr.record_id = extra->recordIdentifier; if (srw_req->record) { if (srw_req->record->recordSchema) rr.record_schema = odr_strdup( assoc->encode, srw_req->record->recordSchema); if (srw_req->record->recordData_len) rr.record_data = odr_strdupn( assoc->encode, srw_req->record->recordData_buf, srw_req->record->recordData_len ); } if (extra && extra->extraRecordData_len) { rr.extra_record_data = odr_strdupn( assoc->encode, extra->extraRecordData_buf, extra->extraRecordData_len ); } } else yaz_add_sru_update_diagnostic(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRU_UPDATE_INVALID_ACTION, rr.operation ); if (srw_req->record) { const char *pack_str = yaz_srw_pack_to_str(srw_req->record->recordPacking); if (pack_str) rr.record_packing = odr_strdup(assoc->encode, pack_str); } if (srw_req->num_recordVersions) { rr.record_versions = srw_req->recordVersions; rr.num_versions = srw_req->num_recordVersions; } if (srw_req->extraRequestData_len) { rr.extra_request_data = odr_strdupn(assoc->encode, srw_req->extraRequestData_buf, srw_req->extraRequestData_len ); } if (srw_res->num_diagnostics == 0) { if ( assoc->init->bend_srw_update) (*assoc->init->bend_srw_update)(assoc->backend, &rr); else yaz_add_sru_update_diagnostic( assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, YAZ_SRU_UPDATE_UNSPECIFIED_DATABASE_ERROR, "No Update backend handler"); } if (rr.uri) yaz_add_srw_diagnostic_uri(assoc->encode, &srw_res->diagnostics, &srw_res->num_diagnostics, rr.uri, rr.message, rr.details); srw_res->recordId = rr.record_id; srw_res->operationStatus = rr.operation_status; srw_res->recordVersions = rr.record_versions; srw_res->num_recordVersions = rr.num_versions; if (srw_res->extraResponseData_len) { srw_res->extraResponseData_buf = rr.extra_response_data; srw_res->extraResponseData_len = strlen(rr.extra_response_data); } if (srw_res->num_diagnostics == 0 && rr.record_data) { srw_res->record = yaz_srw_get_record(assoc->encode); srw_res->record->recordSchema = rr.record_schema; if (rr.record_packing) { int pack = yaz_srw_str_to_pack(rr.record_packing); if (pack == -1) { pack = Z_SRW_recordPacking_string; yaz_log(YLOG_WARN, "Back packing %s from backend", rr.record_packing); } srw_res->record->recordPacking = pack; } srw_res->record->recordData_buf = rr.record_data; srw_res->record->recordData_len = strlen(rr.record_data); if (rr.extra_record_data) { Z_SRW_extra_record *ex = yaz_srw_get_extra_record(assoc->encode); srw_res->extra_record = ex; ex->extraRecordData_buf = rr.extra_record_data; ex->extraRecordData_len = strlen(rr.extra_record_data); } } } } /* check if path is OK (1); BAD (0) */ static int check_path(const char *path) { if (*path != '/') return 0; if (strstr(path, "..")) return 0; return 1; } static char *read_file(const char *fname, ODR o, long *sz) { struct stat stat_buf; FILE *inf; char *buf = 0; if (stat(fname, &stat_buf) == -1) { yaz_log(YLOG_LOG|YLOG_ERRNO, "stat %s", fname); return 0; } if (!S_ISREG(stat_buf.st_mode)) { yaz_log(YLOG_LOG, "Is not a regular file: %s", fname); return 0; } inf = fopen(fname, "rb"); if (!inf) { yaz_log(YLOG_LOG|YLOG_ERRNO, "fopen %s", fname); return 0; } if (fseek(inf, 0L, SEEK_END) < 0) yaz_log(YLOG_LOG|YLOG_ERRNO, "fseek %s", fname); else if ((*sz = ftell(inf)) == -1L) yaz_log(YLOG_LOG|YLOG_ERRNO, "ftell %s", fname); else { rewind(inf); buf = (char *) odr_malloc(o, *sz); if (fread(buf, 1, *sz, inf) != *sz) yaz_log(YLOG_WARN|YLOG_ERRNO, "short read %s", fname); } fclose(inf); return buf; } static void process_http_request(association *assoc, request *req) { Z_HTTP_Request *hreq = req->gdu_request->u.HTTP_Request; ODR o = assoc->encode; int r = 2; /* 2=NOT TAKEN, 1=TAKEN, 0=SOAP TAKEN */ Z_SRW_PDU *sr = 0; Z_SOAP *soap_package = 0; Z_GDU *p = 0; char *charset = 0; Z_HTTP_Response *hres = 0; int keepalive = 1; const char *stylesheet = 0; /* for now .. set later */ Z_SRW_diagnostic *diagnostic = 0; int num_diagnostic = 0; const char *host = z_HTTP_header_lookup(hreq->headers, "Host"); yaz_log(log_request, "%s %s HTTP/%s", hreq->method, hreq->path, hreq->version); if (!control_association(assoc, host, 0)) { p = z_get_HTTP_Response(o, 404); r = 1; } if (r == 2 && assoc->server && assoc->server->docpath && hreq->path[0] == '/' && /* check if path is a proper prefix of documentroot */ strncmp(hreq->path+1, assoc->server->docpath, strlen(assoc->server->docpath)) == 0) { if (!check_path(hreq->path)) { yaz_log(YLOG_LOG, "File %s access forbidden", hreq->path+1); p = z_get_HTTP_Response(o, 403); } else { long content_size = 0; char *content_buf = read_file(hreq->path+1, o, &content_size); if (!content_buf) { p = z_get_HTTP_Response(o, 404); } else { const char *ctype = 0; yaz_mime_types types = yaz_mime_types_create(); yaz_mime_types_add(types, "xsl", "application/xml"); yaz_mime_types_add(types, "xml", "application/xml"); yaz_mime_types_add(types, "css", "text/css"); yaz_mime_types_add(types, "html", "text/html"); yaz_mime_types_add(types, "htm", "text/html"); yaz_mime_types_add(types, "txt", "text/plain"); yaz_mime_types_add(types, "js", "application/x-javascript"); yaz_mime_types_add(types, "gif", "image/gif"); yaz_mime_types_add(types, "png", "image/png"); yaz_mime_types_add(types, "jpg", "image/jpeg"); yaz_mime_types_add(types, "jpeg", "image/jpeg"); ctype = yaz_mime_lookup_fname(types, hreq->path); if (!ctype) { yaz_log(YLOG_LOG, "No mime type for %s", hreq->path+1); p = z_get_HTTP_Response(o, 404); } else { p = z_get_HTTP_Response(o, 200); hres = p->u.HTTP_Response; hres->content_buf = content_buf; hres->content_len = content_size; z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype); } yaz_mime_types_destroy(types); } } r = 1; } if (r == 2) { r = yaz_srw_decode(hreq, &sr, &soap_package, assoc->decode, &charset); yaz_log(YLOG_DEBUG, "yaz_srw_decode returned %d", r); } if (r == 2) /* not taken */ { r = yaz_sru_decode(hreq, &sr, &soap_package, assoc->decode, &charset, &diagnostic, &num_diagnostic); yaz_log(YLOG_DEBUG, "yaz_sru_decode returned %d", r); } if (r == 0) /* decode SRW/SRU OK .. */ { int http_code = 200; if (sr->which == Z_SRW_searchRetrieve_request) { Z_SRW_PDU *res = yaz_srw_get_pdu_e(assoc->encode, Z_SRW_searchRetrieve_response, sr); stylesheet = sr->u.request->stylesheet; if (num_diagnostic) { res->u.response->diagnostics = diagnostic; res->u.response->num_diagnostics = num_diagnostic; } else { srw_bend_search(assoc, hreq->headers, sr, res, &http_code); } if (http_code == 200) soap_package->u.generic->p = res; } else if (sr->which == Z_SRW_explain_request) { Z_SRW_PDU *res = yaz_srw_get_pdu_e(o, Z_SRW_explain_response, sr); stylesheet = sr->u.explain_request->stylesheet; if (num_diagnostic) { res->u.explain_response->diagnostics = diagnostic; res->u.explain_response->num_diagnostics = num_diagnostic; } srw_bend_explain(assoc, hreq->headers, sr, res->u.explain_response, &http_code); if (http_code == 200) soap_package->u.generic->p = res; } else if (sr->which == Z_SRW_scan_request) { Z_SRW_PDU *res = yaz_srw_get_pdu_e(o, Z_SRW_scan_response, sr); stylesheet = sr->u.scan_request->stylesheet; if (num_diagnostic) { res->u.scan_response->diagnostics = diagnostic; res->u.scan_response->num_diagnostics = num_diagnostic; } srw_bend_scan(assoc, hreq->headers, sr, res, &http_code); if (http_code == 200) soap_package->u.generic->p = res; } else if (sr->which == Z_SRW_update_request) { Z_SRW_PDU *res = yaz_srw_get_pdu(o, Z_SRW_update_response, sr->srw_version); yaz_log(YLOG_DEBUG, "handling SRW UpdateRequest"); if (num_diagnostic) { res->u.update_response->diagnostics = diagnostic; res->u.update_response->num_diagnostics = num_diagnostic; } yaz_log(YLOG_DEBUG, "num_diag = %d", res->u.update_response->num_diagnostics ); srw_bend_update(assoc, hreq->headers, sr, res->u.update_response, &http_code); if (http_code == 200) soap_package->u.generic->p = res; } else { yaz_log(log_request, "SOAP ERROR"); /* FIXME - what error, what query */ http_code = 500; z_soap_error(assoc->encode, soap_package, "SOAP-ENV:Client", "Bad method", 0); } if (http_code == 200 || http_code == 500) { static Z_SOAP_Handler soap_handlers[4] = { #if YAZ_HAVE_XML2 {YAZ_XMLNS_SRU_v1_1, 0, (Z_SOAP_fun) yaz_srw_codec}, {YAZ_XMLNS_SRU_v1_0, 0, (Z_SOAP_fun) yaz_srw_codec}, {YAZ_XMLNS_UPDATE_v0_9, 0, (Z_SOAP_fun) yaz_ucp_codec}, #endif {0, 0, 0} }; char ctype[80]; p = z_get_HTTP_Response(o, 200); hres = p->u.HTTP_Response; if (!stylesheet && assoc->server) stylesheet = assoc->server->stylesheet; /* empty stylesheet means NO stylesheet */ if (stylesheet && *stylesheet == '\0') stylesheet = 0; z_soap_codec_enc_xsl(assoc->encode, &soap_package, &hres->content_buf, &hres->content_len, soap_handlers, charset, stylesheet); hres->code = http_code; strcpy(ctype, "text/xml"); z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype); } else p = z_get_HTTP_Response(o, http_code); } if (p == 0) p = z_get_HTTP_Response(o, 500); hres = p->u.HTTP_Response; if (!strcmp(hreq->version, "1.0")) { const char *v = z_HTTP_header_lookup(hreq->headers, "Connection"); if (v && !strcmp(v, "Keep-Alive")) keepalive = 1; else keepalive = 0; hres->version = "1.0"; } else { const char *v = z_HTTP_header_lookup(hreq->headers, "Connection"); if (v && !strcmp(v, "close")) keepalive = 0; else keepalive = 1; hres->version = "1.1"; } if (!keepalive || !assoc->last_control->keepalive) { z_HTTP_header_add(o, &hres->headers, "Connection", "close"); assoc->state = ASSOC_DEAD; assoc->cs_get_mask = 0; } else { int t; const char *alive = z_HTTP_header_lookup(hreq->headers, "Keep-Alive"); if (alive && yaz_isdigit(*(const unsigned char *) alive)) t = atoi(alive); else t = 15; if (t < 0 || t > 3600) t = 3600; iochan_settimeout(assoc->client_chan,t); z_HTTP_header_add(o, &hres->headers, "Connection", "Keep-Alive"); } process_gdu_response(assoc, req, p); } static void process_gdu_request(association *assoc, request *req) { if (req->gdu_request->which == Z_GDU_Z3950) { char *msg = 0; req->apdu_request = req->gdu_request->u.z3950; if (process_z_request(assoc, req, &msg) < 0) do_close_req(assoc, Z_Close_systemProblem, msg, req); } else if (req->gdu_request->which == Z_GDU_HTTP_Request) process_http_request(assoc, req); else { do_close_req(assoc, Z_Close_systemProblem, "bad protocol packet", req); } } /* * Initiate request processing. */ static int process_z_request(association *assoc, request *req, char **msg) { Z_APDU *res; int retval; *msg = "Unknown Error"; assert(req && req->state == REQUEST_IDLE); if (req->apdu_request->which != Z_APDU_initRequest && !assoc->init) { *msg = "Missing InitRequest"; return -1; } switch (req->apdu_request->which) { case Z_APDU_initRequest: res = process_initRequest(assoc, req); break; case Z_APDU_searchRequest: res = process_searchRequest(assoc, req); break; case Z_APDU_presentRequest: res = process_presentRequest(assoc, req); break; case Z_APDU_scanRequest: if (assoc->init->bend_scan) res = process_scanRequest(assoc, req); else { *msg = "Cannot handle Scan APDU"; return -1; } break; case Z_APDU_extendedServicesRequest: if (assoc->init->bend_esrequest) res = process_ESRequest(assoc, req); else { *msg = "Cannot handle Extended Services APDU"; return -1; } break; case Z_APDU_sortRequest: if (assoc->init->bend_sort) res = process_sortRequest(assoc, req); else { *msg = "Cannot handle Sort APDU"; return -1; } break; case Z_APDU_close: process_close(assoc, req); return 0; case Z_APDU_deleteResultSetRequest: if (assoc->init->bend_delete) res = process_deleteRequest(assoc, req); else { *msg = "Cannot handle Delete APDU"; return -1; } break; case Z_APDU_segmentRequest: if (assoc->init->bend_segment) { res = process_segmentRequest(assoc, req); } else { *msg = "Cannot handle Segment APDU"; return -1; } break; case Z_APDU_triggerResourceControlRequest: return 0; default: *msg = "Bad APDU received"; return -1; } if (res) { yaz_log(YLOG_DEBUG, " result immediately available"); retval = process_z_response(assoc, req, res); } else { yaz_log(YLOG_DEBUG, " result unavailable"); retval = -1; } return retval; } /* * Encode response, and transfer the request structure to the outgoing queue. */ static int process_gdu_response(association *assoc, request *req, Z_GDU *res) { odr_setbuf(assoc->encode, req->response, req->size_response, 1); if (assoc->print) { if (!z_GDU(assoc->print, &res, 0, 0)) yaz_log(YLOG_WARN, "ODR print error: %s", odr_errmsg(odr_geterror(assoc->print))); odr_reset(assoc->print); } if (!z_GDU(assoc->encode, &res, 0, 0)) { yaz_log(YLOG_WARN, "ODR error when encoding PDU: %s [element %s]", odr_errmsg(odr_geterror(assoc->decode)), odr_getelement(assoc->decode)); return -1; } req->response = odr_getbuf(assoc->encode, &req->len_response, &req->size_response); odr_setbuf(assoc->encode, 0, 0, 0); /* don'txfree if we abort later */ odr_reset(assoc->encode); req->state = REQUEST_IDLE; request_enq(&assoc->outgoing, req); /* turn the work over to the ir_session handler */ iochan_setflag(assoc->client_chan, EVENT_OUTPUT); assoc->cs_put_mask = EVENT_OUTPUT; /* Is there more work to be done? give that to the input handler too */ for (;;) { req = request_head(&assoc->incoming); if (req && req->state == REQUEST_IDLE) { request_deq(&assoc->incoming); process_gdu_request(assoc, req); } else break; } return 0; } /* * Encode response, and transfer the request structure to the outgoing queue. */ static int process_z_response(association *assoc, request *req, Z_APDU *res) { Z_GDU *gres = (Z_GDU *) odr_malloc(assoc->encode, sizeof(*gres)); gres->which = Z_GDU_Z3950; gres->u.z3950 = res; return process_gdu_response(assoc, req, gres); } static char *get_vhost(Z_OtherInformation *otherInfo) { return yaz_oi_get_string_oid(&otherInfo, yaz_oid_userinfo_proxy, 1, 0); } /* * Handle init request. * At the moment, we don't check the options * anywhere else in the code - we just try not to do anything that would * break a naive client. We'll toss 'em into the association block when * we need them there. */ static Z_APDU *process_initRequest(association *assoc, request *reqb) { Z_InitRequest *req = reqb->apdu_request->u.initRequest; Z_APDU *apdu = zget_APDU(assoc->encode, Z_APDU_initResponse); Z_InitResponse *resp = apdu->u.initResponse; bend_initresult *binitres; char options[140]; statserv_options_block *cb = 0; /* by default no control for backend */ if (control_association(assoc, get_vhost(req->otherInfo), 1)) cb = statserv_getcontrol(); /* got control block for backend */ if (cb && assoc->backend) (*cb->bend_close)(assoc->backend); yaz_log(log_requestdetail, "Got initRequest"); if (req->implementationId) yaz_log(log_requestdetail, "Id: %s", req->implementationId); if (req->implementationName) yaz_log(log_requestdetail, "Name: %s", req->implementationName); if (req->implementationVersion) yaz_log(log_requestdetail, "Version: %s", req->implementationVersion); assoc_init_reset(assoc, yaz_oi_get_string_oid(&req->otherInfo, yaz_oid_userinfo_client_ip, 1, 0)); assoc->init->auth = req->idAuthentication; assoc->init->referenceId = req->referenceId; if (ODR_MASK_GET(req->options, Z_Options_negotiationModel)) { Z_CharSetandLanguageNegotiation *negotiation = yaz_get_charneg_record (req->otherInfo); if (negotiation && negotiation->which == Z_CharSetandLanguageNegotiation_proposal) assoc->init->charneg_request = negotiation; } /* by default named_result_sets is 0 .. Enable it if client asks for it. */ if (ODR_MASK_GET(req->options, Z_Options_namedResultSets)) assoc->init->named_result_sets = 1; assoc->backend = 0; if (cb) { if (req->implementationVersion) yaz_log(log_requestdetail, "Config: %s", cb->configname); iochan_settimeout(assoc->client_chan, cb->idle_timeout); /* we have a backend control block, so call that init function */ if (!(binitres = (*cb->bend_init)(assoc->init))) { yaz_log(YLOG_WARN, "Bad response from backend."); return 0; } assoc->backend = binitres->handle; } else { /* no backend. return error */ binitres = (bend_initresult *) odr_malloc(assoc->encode, sizeof(*binitres)); binitres->errstring = 0; binitres->errcode = YAZ_BIB1_PERMANENT_SYSTEM_ERROR; iochan_settimeout(assoc->client_chan, 10); } if ((assoc->init->bend_sort)) yaz_log(YLOG_DEBUG, "Sort handler installed"); if ((assoc->init->bend_search)) yaz_log(YLOG_DEBUG, "Search handler installed"); if ((assoc->init->bend_present)) yaz_log(YLOG_DEBUG, "Present handler installed"); if ((assoc->init->bend_esrequest)) yaz_log(YLOG_DEBUG, "ESRequest handler installed"); if ((assoc->init->bend_delete)) yaz_log(YLOG_DEBUG, "Delete handler installed"); if ((assoc->init->bend_scan)) yaz_log(YLOG_DEBUG, "Scan handler installed"); if ((assoc->init->bend_segment)) yaz_log(YLOG_DEBUG, "Segment handler installed"); resp->referenceId = req->referenceId; *options = '\0'; /* let's tell the client what we can do */ if (ODR_MASK_GET(req->options, Z_Options_search)) { ODR_MASK_SET(resp->options, Z_Options_search); strcat(options, "srch"); } if (ODR_MASK_GET(req->options, Z_Options_present)) { ODR_MASK_SET(resp->options, Z_Options_present); strcat(options, " prst"); } if (ODR_MASK_GET(req->options, Z_Options_delSet) && assoc->init->bend_delete) { ODR_MASK_SET(resp->options, Z_Options_delSet); strcat(options, " del"); } if (ODR_MASK_GET(req->options, Z_Options_extendedServices) && assoc->init->bend_esrequest) { ODR_MASK_SET(resp->options, Z_Options_extendedServices); strcat(options, " extendedServices"); } if (ODR_MASK_GET(req->options, Z_Options_namedResultSets) && assoc->init->named_result_sets) { ODR_MASK_SET(resp->options, Z_Options_namedResultSets); strcat(options, " namedresults"); } if (ODR_MASK_GET(req->options, Z_Options_scan) && assoc->init->bend_scan) { ODR_MASK_SET(resp->options, Z_Options_scan); strcat(options, " scan"); } if (ODR_MASK_GET(req->options, Z_Options_concurrentOperations)) { ODR_MASK_SET(resp->options, Z_Options_concurrentOperations); strcat(options, " concurrop"); } if (ODR_MASK_GET(req->options, Z_Options_sort) && assoc->init->bend_sort) { ODR_MASK_SET(resp->options, Z_Options_sort); strcat(options, " sort"); } if (ODR_MASK_GET(req->options, Z_Options_negotiationModel)) { Z_OtherInformationUnit *p0; if (!assoc->init->charneg_response) { if (assoc->init->query_charset) { assoc->init->charneg_response = yaz_set_response_charneg( assoc->encode, assoc->init->query_charset, 0, assoc->init->records_in_same_charset); } else { yaz_log(YLOG_WARN, "default query_charset not defined by backend"); } } if (assoc->init->charneg_response && (p0=yaz_oi_update(&resp->otherInfo, assoc->encode, NULL, 0, 0))) { p0->which = Z_OtherInfo_externallyDefinedInfo; p0->information.externallyDefinedInfo = assoc->init->charneg_response; ODR_MASK_SET(resp->options, Z_Options_negotiationModel); strcat(options, " negotiation"); } } if (ODR_MASK_GET(req->options, Z_Options_triggerResourceCtrl)) ODR_MASK_SET(resp->options, Z_Options_triggerResourceCtrl); if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_1)) { ODR_MASK_SET(resp->protocolVersion, Z_ProtocolVersion_1); assoc->version = 1; /* 1 & 2 are equivalent */ } if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_2)) { ODR_MASK_SET(resp->protocolVersion, Z_ProtocolVersion_2); assoc->version = 2; } if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_3)) { ODR_MASK_SET(resp->protocolVersion, Z_ProtocolVersion_3); assoc->version = 3; } yaz_log(log_requestdetail, "Negotiated to v%d: %s", assoc->version, options); if (*req->maximumRecordSize < assoc->maximumRecordSize) assoc->maximumRecordSize = odr_int_to_int(*req->maximumRecordSize); if (*req->preferredMessageSize < assoc->preferredMessageSize) assoc->preferredMessageSize = odr_int_to_int(*req->preferredMessageSize); resp->preferredMessageSize = odr_intdup(assoc->encode, assoc->preferredMessageSize); resp->maximumRecordSize = odr_intdup(assoc->encode, assoc->maximumRecordSize); resp->implementationId = odr_prepend(assoc->encode, assoc->init->implementation_id, resp->implementationId); resp->implementationVersion = odr_prepend(assoc->encode, assoc->init->implementation_version, resp->implementationVersion); resp->implementationName = odr_prepend(assoc->encode, assoc->init->implementation_name, odr_prepend(assoc->encode, "GFS", resp->implementationName)); if (binitres->errcode) { assoc->state = ASSOC_DEAD; resp->userInformationField = init_diagnostics(assoc->encode, binitres->errcode, binitres->errstring); *resp->result = 0; } else assoc->state = ASSOC_UP; if (log_request) { if (!req->idAuthentication) yaz_log(log_request, "Auth none"); else if (req->idAuthentication->which == Z_IdAuthentication_open) { const char *open = req->idAuthentication->u.open; const char *slash = strchr(open, '/'); int len; if (slash) len = slash - open; else len = strlen(open); yaz_log(log_request, "Auth open %.*s", len, open); } else if (req->idAuthentication->which == Z_IdAuthentication_idPass) { const char *user = req->idAuthentication->u.idPass->userId; const char *group = req->idAuthentication->u.idPass->groupId; yaz_log(log_request, "Auth idPass %s %s", user ? user : "-", group ? group : "-"); } else if (req->idAuthentication->which == Z_IdAuthentication_anonymous) { yaz_log(log_request, "Auth anonymous"); } else { yaz_log(log_request, "Auth other"); } } if (log_request) { WRBUF wr = wrbuf_alloc(); wrbuf_printf(wr, "Init "); if (binitres->errcode) wrbuf_printf(wr, "ERROR %d", binitres->errcode); else wrbuf_printf(wr, "OK -"); wrbuf_printf(wr, " ID:%s Name:%s Version:%s", (req->implementationId ? req->implementationId :"-"), (req->implementationName ? req->implementationName : "-"), (req->implementationVersion ? req->implementationVersion : "-") ); yaz_log(log_request, "%s", wrbuf_cstr(wr)); wrbuf_destroy(wr); } return apdu; } /* * Set the specified `errcode' and `errstring' into a UserInfo-1 * external to be returned to the client in accordance with Z35.90 * Implementor Agreement 5 (Returning diagnostics in an InitResponse): * http://www.loc.gov/z3950/agency/agree/initdiag.html */ static Z_External *init_diagnostics(ODR odr, int error, const char *addinfo) { yaz_log(log_requestdetail, "[%d] %s%s%s", error, diagbib1_str(error), addinfo ? " -- " : "", addinfo ? addinfo : ""); return zget_init_diagnostics(odr, error, addinfo); } /* * nonsurrogate diagnostic record. */ static Z_Records *diagrec(association *assoc, int error, char *addinfo) { Z_Records *rec = (Z_Records *) odr_malloc(assoc->encode, sizeof(*rec)); yaz_log(log_requestdetail, "[%d] %s%s%s", error, diagbib1_str(error), addinfo ? " -- " : "", addinfo ? addinfo : ""); rec->which = Z_Records_NSD; rec->u.nonSurrogateDiagnostic = zget_DefaultDiagFormat(assoc->encode, error, addinfo); return rec; } /* * surrogate diagnostic. */ static Z_NamePlusRecord *surrogatediagrec(association *assoc, const char *dbname, int error, const char *addinfo) { yaz_log(log_requestdetail, "[%d] %s%s%s", error, diagbib1_str(error), addinfo ? " -- " : "", addinfo ? addinfo : ""); return zget_surrogateDiagRec(assoc->encode, dbname, error, addinfo); } static Z_Records *pack_records(association *a, char *setname, Odr_int start, Odr_int *num, Z_RecordComposition *comp, Odr_int *next, Odr_int *pres, Z_ReferenceId *referenceId, Odr_oid *oid, int *errcode) { int recno; Odr_int dumped_records = 0; int toget = odr_int_to_int(*num); Z_Records *records = (Z_Records *) odr_malloc(a->encode, sizeof(*records)); Z_NamePlusRecordList *reclist = (Z_NamePlusRecordList *) odr_malloc(a->encode, sizeof(*reclist)); records->which = Z_Records_DBOSD; records->u.databaseOrSurDiagnostics = reclist; reclist->num_records = 0; if (toget < 0) return diagrec(a, YAZ_BIB1_PRESENT_REQUEST_OUT_OF_RANGE, 0); else if (toget == 0) reclist->records = odr_nullval(); else reclist->records = (Z_NamePlusRecord **) odr_malloc(a->encode, sizeof(*reclist->records) * toget); *pres = Z_PresentStatus_success; *num = 0; *next = 0; yaz_log(log_requestdetail, "Request to pack " ODR_INT_PRINTF "+%d %s", start, toget, setname); yaz_log(log_requestdetail, "pms=%d, mrs=%d", a->preferredMessageSize, a->maximumRecordSize); for (recno = odr_int_to_int(start); reclist->num_records < toget; recno++) { bend_fetch_rr freq; Z_NamePlusRecord *thisrec; Odr_int this_length = 0; /* * we get the number of bytes allocated on the stream before any * allocation done by the backend - this should give us a reasonable * idea of the total size of the data so far. */ Odr_int total_length = odr_total(a->encode) - dumped_records; freq.errcode = 0; freq.errstring = 0; freq.basename = 0; freq.len = 0; freq.record = 0; freq.last_in_set = 0; freq.setname = setname; freq.surrogate_flag = 0; freq.number = recno; freq.comp = comp; freq.request_format = oid; freq.output_format = 0; freq.stream = a->encode; freq.print = a->print; freq.referenceId = referenceId; freq.schema = 0; retrieve_fetch(a, &freq); *next = freq.last_in_set ? 0 : recno + 1; if (freq.errcode) { if (!freq.surrogate_flag) /* non-surrogate diagnostic i.e. global */ { char s[20]; *pres = Z_PresentStatus_failure; /* for 'present request out of range', set addinfo to record position if not set */ if (freq.errcode == YAZ_BIB1_PRESENT_REQUEST_OUT_OF_RANGE && freq.errstring == 0) { sprintf(s, "%d", recno); freq.errstring = s; } if (errcode) *errcode = freq.errcode; return diagrec(a, freq.errcode, freq.errstring); } reclist->records[reclist->num_records] = surrogatediagrec(a, freq.basename, freq.errcode, freq.errstring); reclist->num_records++; continue; } if (freq.record == 0) /* no error and no record ? */ { *pres = Z_PresentStatus_partial_4; *next = 0; /* signal end-of-set and stop */ break; } if (freq.len >= 0) this_length = freq.len; else this_length = odr_total(a->encode) - total_length - dumped_records; yaz_log(log_requestdetail, " fetched record, len=" ODR_INT_PRINTF " total=" ODR_INT_PRINTF " dumped=" ODR_INT_PRINTF, this_length, total_length, dumped_records); if (a->preferredMessageSize > 0 && this_length + total_length > a->preferredMessageSize) { /* record is small enough, really */ if (this_length <= a->preferredMessageSize && recno > start) { yaz_log(log_requestdetail, " Dropped last normal-sized record"); *pres = Z_PresentStatus_partial_2; if (*next > 0) (*next)--; break; } /* record can only be fetched by itself */ if (this_length < a->maximumRecordSize) { yaz_log(log_requestdetail, " Record > prefmsgsz"); if (toget > 1) { yaz_log(YLOG_DEBUG, " Dropped it"); reclist->records[reclist->num_records] = surrogatediagrec( a, freq.basename, YAZ_BIB1_RECORD_EXCEEDS_PREFERRED_MESSAGE_SIZE, 0); reclist->num_records++; dumped_records += this_length; continue; } } else /* too big entirely */ { yaz_log(log_requestdetail, "Record > maxrcdsz " "this=" ODR_INT_PRINTF " max=%d", this_length, a->maximumRecordSize); reclist->records[reclist->num_records] = surrogatediagrec( a, freq.basename, YAZ_BIB1_RECORD_EXCEEDS_MAXIMUM_RECORD_SIZE, 0); reclist->num_records++; dumped_records += this_length; continue; } } if (!(thisrec = (Z_NamePlusRecord *) odr_malloc(a->encode, sizeof(*thisrec)))) return 0; thisrec->databaseName = odr_strdup_null(a->encode, freq.basename); thisrec->which = Z_NamePlusRecord_databaseRecord; if (!freq.output_format) { yaz_log(YLOG_WARN, "bend_fetch output_format not set"); return 0; } thisrec->u.databaseRecord = z_ext_record_oid( a->encode, freq.output_format, freq.record, freq.len); if (!thisrec->u.databaseRecord) return 0; reclist->records[reclist->num_records] = thisrec; reclist->num_records++; if (freq.last_in_set) break; } *num = reclist->num_records; return records; } static Z_APDU *process_searchRequest(association *assoc, request *reqb) { Z_SearchRequest *req = reqb->apdu_request->u.searchRequest; bend_search_rr *bsrr = (bend_search_rr *)nmem_malloc(reqb->request_mem, sizeof(*bsrr)); yaz_log(log_requestdetail, "Got SearchRequest."); bsrr->association = assoc; bsrr->referenceId = req->referenceId; bsrr->srw_sortKeys = 0; bsrr->srw_setname = 0; bsrr->srw_setnameIdleTime = 0; bsrr->estimated_hit_count = 0; bsrr->partial_resultset = 0; bsrr->extra_args = 0; bsrr->extra_response_data = 0; yaz_log(log_requestdetail, "ResultSet '%s'", req->resultSetName); if (req->databaseNames) { int i; for (i = 0; i < req->num_databaseNames; i++) yaz_log(log_requestdetail, "Database '%s'", req->databaseNames[i]); } yaz_log_zquery_level(log_requestdetail,req->query); if (assoc->init->bend_search) { bsrr->setname = req->resultSetName; bsrr->replace_set = *req->replaceIndicator; bsrr->num_bases = req->num_databaseNames; bsrr->basenames = req->databaseNames; bsrr->query = req->query; bsrr->stream = assoc->encode; nmem_transfer(odr_getmem(bsrr->stream), reqb->request_mem); bsrr->decode = assoc->decode; bsrr->print = assoc->print; bsrr->hits = 0; bsrr->errcode = 0; bsrr->errstring = NULL; bsrr->search_info = NULL; bsrr->search_input = req->additionalSearchInfo; if (!bsrr->search_input) bsrr->search_input = req->otherInfo; bsrr->present_number = *req->mediumSetPresentNumber; if (assoc->server && assoc->server->client_query_charset && req->query->which == Z_Query_type_1) { yaz_iconv_t cd = yaz_iconv_open("UTF-8", assoc->server->client_query_charset); if (cd) { yaz_query_charset_convert_rpnquery(req->query->u.type_1, assoc->decode, cd); yaz_iconv_close(cd); } } if (assoc->server && assoc->server->cql_transform && req->query->which == Z_Query_type_104 && req->query->u.type_104->which == Z_External_CQL) { /* have a CQL query and a CQL to PQF transform .. */ int srw_errcode = cql2pqf(bsrr->stream, req->query->u.type_104->u.cql, assoc->server->cql_transform, bsrr->query, &bsrr->srw_sortKeys); if (srw_errcode) bsrr->errcode = yaz_diag_srw_to_bib1(srw_errcode); } if (assoc->server && assoc->server->ccl_transform && req->query->which == Z_Query_type_2) /*CCL*/ { /* have a CCL query and a CCL to PQF transform .. */ int srw_errcode = ccl2pqf(bsrr->stream, req->query->u.type_2, assoc->server->ccl_transform, bsrr); if (srw_errcode) bsrr->errcode = yaz_diag_srw_to_bib1(srw_errcode); } if (!bsrr->errcode) (assoc->init->bend_search)(assoc->backend, bsrr); } else { /* FIXME - make a diagnostic for it */ yaz_log(YLOG_WARN,"Search not supported ?!?!"); } return response_searchRequest(assoc, reqb, bsrr); } /* * Prepare a searchresponse based on the backend results. We probably want * to look at making the fetching of records nonblocking as well, but * so far, we'll keep things simple. * If bsrt is null, that means we're called in response to a communications * event, and we'll have to get the response for ourselves. */ static Z_APDU *response_searchRequest(association *assoc, request *reqb, bend_search_rr *bsrt) { Z_SearchRequest *req = reqb->apdu_request->u.searchRequest; Z_APDU *apdu = (Z_APDU *)odr_malloc(assoc->encode, sizeof(*apdu)); Z_SearchResponse *resp = (Z_SearchResponse *) odr_malloc(assoc->encode, sizeof(*resp)); Odr_int *nulint = odr_intdup(assoc->encode, 0); Odr_int *next = odr_intdup(assoc->encode, 0); Odr_int *none = odr_intdup(assoc->encode, Z_SearchResponse_none); Odr_int returnedrecs = 0; apdu->which = Z_APDU_searchResponse; apdu->u.searchResponse = resp; resp->referenceId = req->referenceId; resp->additionalSearchInfo = 0; resp->otherInfo = 0; if (!bsrt) { yaz_log(YLOG_FATAL, "Bad result from backend"); return 0; } else if (bsrt->errcode) { resp->records = diagrec(assoc, bsrt->errcode, bsrt->errstring); resp->resultCount = nulint; resp->numberOfRecordsReturned = nulint; resp->nextResultSetPosition = nulint; resp->searchStatus = odr_booldup(assoc->encode, 0); resp->resultSetStatus = none; resp->presentStatus = 0; } else { bool_t *sr = odr_booldup(assoc->encode, 1); Odr_int *toget = odr_intdup(assoc->encode, 0); Z_RecordComposition comp, *compp = 0; yaz_log(log_requestdetail, "resultCount: " ODR_INT_PRINTF, bsrt->hits); resp->records = 0; resp->resultCount = &bsrt->hits; comp.which = Z_RecordComp_simple; /* how many records does the user agent want, then? */ if (bsrt->hits < 0) *toget = 0; else if (bsrt->hits <= *req->smallSetUpperBound) { *toget = bsrt->hits; if ((comp.u.simple = req->smallSetElementSetNames)) compp = ∁ } else if (bsrt->hits < *req->largeSetLowerBound) { *toget = *req->mediumSetPresentNumber; if (*toget > bsrt->hits) *toget = bsrt->hits; if ((comp.u.simple = req->mediumSetElementSetNames)) compp = ∁ } else *toget = 0; if (*toget && !resp->records) { Odr_int *presst = odr_intdup(assoc->encode, 0); /* Call bend_present if defined */ if (assoc->init->bend_present) { bend_present_rr *bprr = (bend_present_rr *) nmem_malloc(reqb->request_mem, sizeof(*bprr)); bprr->setname = req->resultSetName; bprr->start = 1; bprr->number = odr_int_to_int(*toget); bprr->format = req->preferredRecordSyntax; bprr->comp = compp; bprr->referenceId = req->referenceId; bprr->stream = assoc->encode; bprr->print = assoc->print; bprr->association = assoc; bprr->errcode = 0; bprr->errstring = NULL; (*assoc->init->bend_present)(assoc->backend, bprr); if (bprr->errcode) { resp->records = diagrec(assoc, bprr->errcode, bprr->errstring); *resp->presentStatus = Z_PresentStatus_failure; } } if (!resp->records) resp->records = pack_records( assoc, req->resultSetName, 1, toget, compp, next, presst, req->referenceId, req->preferredRecordSyntax, NULL); if (!resp->records) return 0; resp->numberOfRecordsReturned = toget; returnedrecs = *toget; resp->presentStatus = presst; } else { if (*resp->resultCount) *next = 1; resp->numberOfRecordsReturned = nulint; resp->presentStatus = 0; } resp->nextResultSetPosition = next; resp->searchStatus = sr; resp->resultSetStatus = 0; if (bsrt->estimated_hit_count) { resp->resultSetStatus = odr_intdup(assoc->encode, Z_SearchResponse_estimate); } else if (bsrt->partial_resultset) { resp->resultSetStatus = odr_intdup(assoc->encode, Z_SearchResponse_subset); } } resp->additionalSearchInfo = bsrt->search_info; if (log_request) { int i; WRBUF wr = wrbuf_alloc(); for (i = 0 ; i < req->num_databaseNames; i++) { if (i) wrbuf_printf(wr, "+"); wrbuf_puts(wr, req->databaseNames[i]); } wrbuf_printf(wr, " "); if (bsrt->errcode) wrbuf_printf(wr, "ERROR %d", bsrt->errcode); else wrbuf_printf(wr, "OK " ODR_INT_PRINTF, bsrt->hits); wrbuf_printf(wr, " %s 1+" ODR_INT_PRINTF " ", req->resultSetName, returnedrecs); yaz_query_to_wrbuf(wr, req->query); yaz_log(log_request, "Search %s", wrbuf_cstr(wr)); wrbuf_destroy(wr); } return apdu; } /* * Maybe we got a little over-friendly when we designed bend_fetch to * get only one record at a time. Some backends can optimise multiple-record * fetches, and at any rate, there is some overhead involved in * all that selecting and hopping around. Problem is, of course, that the * frontend can't know ahead of time how many records it'll need to * fill the negotiated PDU size. Annoying. Segmentation or not, Z/SR * is downright lousy as a bulk data transfer protocol. * * To start with, we'll do the fetching of records from the backend * in one operation: To save some trips in and out of the event-handler, * and to simplify the interface to pack_records. At any rate, asynch * operation is more fun in operations that have an unpredictable execution * speed - which is normally more true for search than for present. */ static Z_APDU *process_presentRequest(association *assoc, request *reqb) { Z_PresentRequest *req = reqb->apdu_request->u.presentRequest; Z_APDU *apdu; Z_PresentResponse *resp; Odr_int *next; Odr_int *num; int errcode = 0; yaz_log(log_requestdetail, "Got PresentRequest."); resp = (Z_PresentResponse *)odr_malloc(assoc->encode, sizeof(*resp)); resp->records = 0; resp->presentStatus = odr_intdup(assoc->encode, 0); if (assoc->init->bend_present) { bend_present_rr *bprr = (bend_present_rr *) nmem_malloc(reqb->request_mem, sizeof(*bprr)); bprr->setname = req->resultSetId; bprr->start = odr_int_to_int(*req->resultSetStartPoint); bprr->number = odr_int_to_int(*req->numberOfRecordsRequested); bprr->format = req->preferredRecordSyntax; bprr->comp = req->recordComposition; bprr->referenceId = req->referenceId; bprr->stream = assoc->encode; bprr->print = assoc->print; bprr->association = assoc; bprr->errcode = 0; bprr->errstring = NULL; (*assoc->init->bend_present)(assoc->backend, bprr); if (bprr->errcode) { resp->records = diagrec(assoc, bprr->errcode, bprr->errstring); *resp->presentStatus = Z_PresentStatus_failure; errcode = bprr->errcode; } } apdu = (Z_APDU *)odr_malloc(assoc->encode, sizeof(*apdu)); next = odr_intdup(assoc->encode, 0); num = odr_intdup(assoc->encode, 0); apdu->which = Z_APDU_presentResponse; apdu->u.presentResponse = resp; resp->referenceId = req->referenceId; resp->otherInfo = 0; if (!resp->records) { *num = *req->numberOfRecordsRequested; resp->records = pack_records(assoc, req->resultSetId, *req->resultSetStartPoint, num, req->recordComposition, next, resp->presentStatus, req->referenceId, req->preferredRecordSyntax, &errcode); } if (log_request) { WRBUF wr = wrbuf_alloc(); wrbuf_printf(wr, "Present "); if (*resp->presentStatus == Z_PresentStatus_failure) wrbuf_printf(wr, "ERROR %d ", errcode); else if (*resp->presentStatus == Z_PresentStatus_success) wrbuf_printf(wr, "OK - "); else wrbuf_printf(wr, "Partial " ODR_INT_PRINTF " - ", *resp->presentStatus); wrbuf_printf(wr, " %s " ODR_INT_PRINTF "+" ODR_INT_PRINTF " ", req->resultSetId, *req->resultSetStartPoint, *req->numberOfRecordsRequested); yaz_log(log_request, "%s", wrbuf_cstr(wr) ); wrbuf_destroy(wr); } if (!resp->records) return 0; resp->numberOfRecordsReturned = num; resp->nextResultSetPosition = next; return apdu; } /* * Scan was implemented rather in a hurry, and with support for only the basic * elements of the service in the backend API. Suggestions are welcome. */ static Z_APDU *process_scanRequest(association *assoc, request *reqb) { Z_ScanRequest *req = reqb->apdu_request->u.scanRequest; Z_APDU *apdu = (Z_APDU *)odr_malloc(assoc->encode, sizeof(*apdu)); Z_ScanResponse *res = (Z_ScanResponse *) odr_malloc(assoc->encode, sizeof(*res)); Odr_int *scanStatus = odr_intdup(assoc->encode, Z_Scan_failure); Odr_int *numberOfEntriesReturned = odr_intdup(assoc->encode, 0); Z_ListEntries *ents = (Z_ListEntries *) odr_malloc(assoc->encode, sizeof(*ents)); Z_DiagRecs *diagrecs_p = NULL; bend_scan_rr *bsrr = (bend_scan_rr *) odr_malloc(assoc->encode, sizeof(*bsrr)); struct scan_entry *save_entries; int step_size = 0; yaz_log(log_requestdetail, "Got ScanRequest"); apdu->which = Z_APDU_scanResponse; apdu->u.scanResponse = res; res->referenceId = req->referenceId; /* if step is absent, set it to 0 */ if (req->stepSize) step_size = odr_int_to_int(*req->stepSize); res->stepSize = 0; res->scanStatus = scanStatus; res->numberOfEntriesReturned = numberOfEntriesReturned; res->positionOfTerm = 0; res->entries = ents; ents->num_entries = 0; ents->entries = NULL; ents->num_nonsurrogateDiagnostics = 0; ents->nonsurrogateDiagnostics = NULL; res->attributeSet = 0; res->otherInfo = 0; if (req->databaseNames) { int i; for (i = 0; i < req->num_databaseNames; i++) yaz_log(log_requestdetail, "Database '%s'", req->databaseNames[i]); } bsrr->scanClause = 0; bsrr->errcode = 0; bsrr->errstring = 0; bsrr->num_bases = req->num_databaseNames; bsrr->basenames = req->databaseNames; bsrr->num_entries = odr_int_to_int(*req->numberOfTermsRequested); bsrr->term = req->termListAndStartPoint; bsrr->referenceId = req->referenceId; bsrr->stream = assoc->encode; bsrr->print = assoc->print; bsrr->step_size = &step_size; bsrr->setname = yaz_oi_get_string_oid(&req->otherInfo, yaz_oid_userinfo_scan_set, 1, 0); bsrr->entries = 0; bsrr->extra_args = 0; bsrr->extra_response_data = 0; /* For YAZ 2.0 and earlier it was the backend handler that initialized entries (member display_term did not exist) YAZ 2.0 and later sets 'entries' and initialize all members including 'display_term'. If YAZ 2.0 or later sees that entries was modified - we assume that it is an old handler and that 'display_term' is _not_ set. */ if (bsrr->num_entries > 0) { int i; bsrr->entries = (struct scan_entry *) odr_malloc(assoc->decode, sizeof(*bsrr->entries) * bsrr->num_entries); for (i = 0; inum_entries; i++) { bsrr->entries[i].term = 0; bsrr->entries[i].occurrences = 0; bsrr->entries[i].errcode = 0; bsrr->entries[i].errstring = 0; bsrr->entries[i].display_term = 0; } } save_entries = bsrr->entries; /* save it so we can compare later */ bsrr->attributeset = req->attributeSet; log_scan_term_level(log_requestdetail, req->termListAndStartPoint, bsrr->attributeset); bsrr->term_position = req->preferredPositionInResponse ? odr_int_to_int(*req->preferredPositionInResponse) : 1; ((int (*)(void *, bend_scan_rr *)) (*assoc->init->bend_scan))(assoc->backend, bsrr); if (bsrr->errcode) diagrecs_p = zget_DiagRecs(assoc->encode, bsrr->errcode, bsrr->errstring); else { int i; Z_Entry **tab = (Z_Entry **) odr_malloc(assoc->encode, sizeof(*tab) * bsrr->num_entries); if (bsrr->status == BEND_SCAN_PARTIAL) *scanStatus = Z_Scan_partial_5; else *scanStatus = Z_Scan_success; res->stepSize = odr_intdup(assoc->encode, step_size); ents->entries = tab; ents->num_entries = bsrr->num_entries; res->numberOfEntriesReturned = odr_intdup(assoc->encode, ents->num_entries); res->positionOfTerm = odr_intdup(assoc->encode, bsrr->term_position); for (i = 0; i < bsrr->num_entries; i++) { Z_Entry *e; Z_TermInfo *t; tab[i] = e = (Z_Entry *)odr_malloc(assoc->encode, sizeof(*e)); if (bsrr->entries[i].occurrences >= 0) { e->which = Z_Entry_termInfo; e->u.termInfo = t = (Z_TermInfo *) odr_malloc(assoc->encode, sizeof(*t)); t->suggestedAttributes = 0; t->displayTerm = 0; if (save_entries == bsrr->entries && bsrr->entries[i].display_term) { /* the entries was _not_ set by the handler. So it's safe to test for new member display_term. It is NULL'ed by us. */ t->displayTerm = odr_strdup(assoc->encode, bsrr->entries[i].display_term); } t->alternativeTerm = 0; t->byAttributes = 0; t->otherTermInfo = 0; t->globalOccurrences = &bsrr->entries[i].occurrences; t->term = (Z_Term *) odr_malloc(assoc->encode, sizeof(*t->term)); t->term->which = Z_Term_general; t->term->u.general = odr_create_Odr_oct(assoc->encode, bsrr->entries[i].term, strlen(bsrr->entries[i].term)); yaz_log(YLOG_DEBUG, " term #%d: '%s' (" ODR_INT_PRINTF ")", i, bsrr->entries[i].term, bsrr->entries[i].occurrences); } else { Z_DiagRecs *drecs = zget_DiagRecs(assoc->encode, bsrr->entries[i].errcode, bsrr->entries[i].errstring); assert(drecs->num_diagRecs == 1); e->which = Z_Entry_surrogateDiagnostic; assert(drecs->diagRecs[0]); e->u.surrogateDiagnostic = drecs->diagRecs[0]; } } } if (diagrecs_p) { ents->num_nonsurrogateDiagnostics = diagrecs_p->num_diagRecs; ents->nonsurrogateDiagnostics = diagrecs_p->diagRecs; } if (log_request) { int i; WRBUF wr = wrbuf_alloc(); wrbuf_printf(wr, "Scan "); for (i = 0 ; i < req->num_databaseNames; i++) { if (i) wrbuf_printf(wr, "+"); wrbuf_puts(wr, req->databaseNames[i]); } wrbuf_printf(wr, " "); if (bsrr->errcode) wr_diag(wr, bsrr->errcode, bsrr->errstring); else wrbuf_printf(wr, "OK"); wrbuf_printf(wr, " " ODR_INT_PRINTF " - " ODR_INT_PRINTF "+" ODR_INT_PRINTF "+" ODR_INT_PRINTF, res->numberOfEntriesReturned ? *res->numberOfEntriesReturned : 0, (req->preferredPositionInResponse ? *req->preferredPositionInResponse : 1), *req->numberOfTermsRequested, (res->stepSize ? *res->stepSize : 1)); if (bsrr->setname) wrbuf_printf(wr, "+%s", bsrr->setname); wrbuf_printf(wr, " "); yaz_scan_to_wrbuf(wr, req->termListAndStartPoint, bsrr->attributeset); yaz_log(log_request, "%s", wrbuf_cstr(wr) ); wrbuf_destroy(wr); } return apdu; } static Z_APDU *process_sortRequest(association *assoc, request *reqb) { int i; Z_SortRequest *req = reqb->apdu_request->u.sortRequest; Z_SortResponse *res = (Z_SortResponse *) odr_malloc(assoc->encode, sizeof(*res)); bend_sort_rr *bsrr = (bend_sort_rr *) odr_malloc(assoc->encode, sizeof(*bsrr)); Z_APDU *apdu = (Z_APDU *)odr_malloc(assoc->encode, sizeof(*apdu)); yaz_log(log_requestdetail, "Got SortRequest."); bsrr->num_input_setnames = req->num_inputResultSetNames; for (i=0;inum_inputResultSetNames;i++) yaz_log(log_requestdetail, "Input resultset: '%s'", req->inputResultSetNames[i]); bsrr->input_setnames = req->inputResultSetNames; bsrr->referenceId = req->referenceId; bsrr->output_setname = req->sortedResultSetName; yaz_log(log_requestdetail, "Output resultset: '%s'", req->sortedResultSetName); bsrr->sort_sequence = req->sortSequence; /*FIXME - dump those sequences too */ bsrr->stream = assoc->encode; bsrr->print = assoc->print; bsrr->sort_status = Z_SortResponse_failure; bsrr->errcode = 0; bsrr->errstring = 0; (*assoc->init->bend_sort)(assoc->backend, bsrr); res->referenceId = bsrr->referenceId; res->sortStatus = odr_intdup(assoc->encode, bsrr->sort_status); res->resultSetStatus = 0; if (bsrr->errcode) { Z_DiagRecs *dr = zget_DiagRecs(assoc->encode, bsrr->errcode, bsrr->errstring); res->diagnostics = dr->diagRecs; res->num_diagnostics = dr->num_diagRecs; } else { res->num_diagnostics = 0; res->diagnostics = 0; } res->resultCount = 0; res->otherInfo = 0; apdu->which = Z_APDU_sortResponse; apdu->u.sortResponse = res; if (log_request) { WRBUF wr = wrbuf_alloc(); wrbuf_printf(wr, "Sort "); if (bsrr->errcode) wrbuf_printf(wr, " ERROR %d", bsrr->errcode); else wrbuf_printf(wr, "OK -"); wrbuf_printf(wr, " ("); for (i = 0; inum_inputResultSetNames; i++) { if (i) wrbuf_printf(wr, "+"); wrbuf_puts(wr, req->inputResultSetNames[i]); } wrbuf_printf(wr, ")->%s ",req->sortedResultSetName); yaz_log(log_request, "%s", wrbuf_cstr(wr) ); wrbuf_destroy(wr); } return apdu; } static Z_APDU *process_deleteRequest(association *assoc, request *reqb) { int i; Z_DeleteResultSetRequest *req = reqb->apdu_request->u.deleteResultSetRequest; Z_DeleteResultSetResponse *res = (Z_DeleteResultSetResponse *) odr_malloc(assoc->encode, sizeof(*res)); bend_delete_rr *bdrr = (bend_delete_rr *) odr_malloc(assoc->encode, sizeof(*bdrr)); Z_APDU *apdu = (Z_APDU *)odr_malloc(assoc->encode, sizeof(*apdu)); yaz_log(log_requestdetail, "Got DeleteRequest."); bdrr->num_setnames = req->num_resultSetList; bdrr->setnames = req->resultSetList; for (i = 0; inum_resultSetList; i++) yaz_log(log_requestdetail, "resultset: '%s'", req->resultSetList[i]); bdrr->stream = assoc->encode; bdrr->print = assoc->print; bdrr->function = odr_int_to_int(*req->deleteFunction); bdrr->referenceId = req->referenceId; bdrr->statuses = 0; if (bdrr->num_setnames > 0) { bdrr->statuses = (int*) odr_malloc(assoc->encode, sizeof(*bdrr->statuses) * bdrr->num_setnames); for (i = 0; i < bdrr->num_setnames; i++) bdrr->statuses[i] = 0; } (*assoc->init->bend_delete)(assoc->backend, bdrr); res->referenceId = req->referenceId; res->deleteOperationStatus = odr_intdup(assoc->encode,bdrr->delete_status); res->deleteListStatuses = 0; if (bdrr->num_setnames > 0) { int i; res->deleteListStatuses = (Z_ListStatuses *) odr_malloc(assoc->encode, sizeof(*res->deleteListStatuses)); res->deleteListStatuses->num = bdrr->num_setnames; res->deleteListStatuses->elements = (Z_ListStatus **) odr_malloc(assoc->encode, sizeof(*res->deleteListStatuses->elements) * bdrr->num_setnames); for (i = 0; inum_setnames; i++) { res->deleteListStatuses->elements[i] = (Z_ListStatus *) odr_malloc(assoc->encode, sizeof(**res->deleteListStatuses->elements)); res->deleteListStatuses->elements[i]->status = odr_intdup(assoc->encode, bdrr->statuses[i]); res->deleteListStatuses->elements[i]->id = odr_strdup(assoc->encode, bdrr->setnames[i]); } } res->numberNotDeleted = 0; res->bulkStatuses = 0; res->deleteMessage = 0; res->otherInfo = 0; apdu->which = Z_APDU_deleteResultSetResponse; apdu->u.deleteResultSetResponse = res; if (log_request) { WRBUF wr = wrbuf_alloc(); wrbuf_printf(wr, "Delete "); if (bdrr->delete_status) wrbuf_printf(wr, "ERROR %d", bdrr->delete_status); else wrbuf_printf(wr, "OK -"); for (i = 0; inum_resultSetList; i++) wrbuf_printf(wr, " %s ", req->resultSetList[i]); yaz_log(log_request, "%s", wrbuf_cstr(wr) ); wrbuf_destroy(wr); } return apdu; } static void process_close(association *assoc, request *reqb) { Z_Close *req = reqb->apdu_request->u.close; static char *reasons[] = { "finished", "shutdown", "systemProblem", "costLimit", "resources", "securityViolation", "protocolError", "lackOfActivity", "peerAbort", "unspecified" }; yaz_log(log_requestdetail, "Got Close, reason %s, message %s", reasons[*req->closeReason], req->diagnosticInformation ? req->diagnosticInformation : "NULL"); if (assoc->version < 3) /* to make do_force respond with close */ assoc->version = 3; do_close_req(assoc, Z_Close_finished, "Association terminated by client", reqb); yaz_log(log_request,"Close OK"); } static Z_APDU *process_segmentRequest(association *assoc, request *reqb) { bend_segment_rr req; req.segment = reqb->apdu_request->u.segmentRequest; req.stream = assoc->encode; req.decode = assoc->decode; req.print = assoc->print; req.association = assoc; (*assoc->init->bend_segment)(assoc->backend, &req); return 0; } static Z_APDU *process_ESRequest(association *assoc, request *reqb) { bend_esrequest_rr esrequest; char oidname_buf[OID_STR_MAX]; const char *ext_name = "unknown"; Z_ExtendedServicesRequest *req = reqb->apdu_request->u.extendedServicesRequest; Z_External *ext = reqb->apdu_request->u.extendedServicesRequest->taskSpecificParameters; Z_APDU *apdu = zget_APDU(assoc->encode, Z_APDU_extendedServicesResponse); Z_ExtendedServicesResponse *resp = apdu->u.extendedServicesResponse; esrequest.esr = reqb->apdu_request->u.extendedServicesRequest; esrequest.stream = assoc->encode; esrequest.decode = assoc->decode; esrequest.print = assoc->print; esrequest.errcode = 0; esrequest.errstring = NULL; esrequest.association = assoc; esrequest.taskPackage = 0; esrequest.taskPackageExt = 0; esrequest.referenceId = req->referenceId; if (ext) { oid_class oclass; ext_name = yaz_oid_to_string_buf(ext->direct_reference, &oclass, oidname_buf); } (*assoc->init->bend_esrequest)(assoc->backend, &esrequest); resp->referenceId = req->referenceId; if (esrequest.errcode == -1) { /* Backend service indicates request will be processed */ yaz_log(log_request, "Extended Service: %s (accepted)", ext_name); *resp->operationStatus = Z_ExtendedServicesResponse_accepted; } else if (esrequest.errcode == 0) { /* Backend service indicates request will be processed */ yaz_log(log_request, "Extended Service: %s (done)", ext_name); *resp->operationStatus = Z_ExtendedServicesResponse_done; } else if (esrequest.errcode == -2) { Z_DiagRecs *diagRecs = zget_DiagRecs(assoc->encode, 401, esrequest.errstring); yaz_log(log_request, "Extended Service: %s (401)", ext_name); *resp->operationStatus = Z_ExtendedServicesResponse_done; resp->num_diagnostics = diagRecs->num_diagRecs; resp->diagnostics = diagRecs->diagRecs; if (log_request) { WRBUF wr = wrbuf_alloc(); wrbuf_diags(wr, resp->num_diagnostics, resp->diagnostics); yaz_log(log_request, "EsRequest %s", wrbuf_cstr(wr) ); wrbuf_destroy(wr); } } else { Z_DiagRecs *diagRecs = zget_DiagRecs(assoc->encode, esrequest.errcode, esrequest.errstring); /* Backend indicates error, request will not be processed */ yaz_log(log_request, "Extended Service: %s (failed)", ext_name); *resp->operationStatus = Z_ExtendedServicesResponse_failure; resp->num_diagnostics = diagRecs->num_diagRecs; resp->diagnostics = diagRecs->diagRecs; if (log_request) { WRBUF wr = wrbuf_alloc(); wrbuf_diags(wr, resp->num_diagnostics, resp->diagnostics); yaz_log(log_request, "EsRequest %s", wrbuf_cstr(wr) ); wrbuf_destroy(wr); } } /* Do something with the members of bend_extendedservice */ resp->taskPackage = esrequest.taskPackageExt; if (esrequest.taskPackage) { resp->taskPackage = z_ext_record_oid( assoc->encode, yaz_oid_recsyn_extended, (const char *) esrequest.taskPackage, -1); } yaz_log(YLOG_DEBUG,"Send the result apdu"); return apdu; } int bend_assoc_is_alive(bend_association assoc) { if (assoc->state == ASSOC_DEAD) return 0; /* already marked as dead. Don't check I/O chan anymore */ return iochan_is_alive(assoc->client_chan); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr.c0000644000175000017500000001544413265142510011060 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr.c * \brief Implements fundamental ODR functionality */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include "odr-priv.h" static int log_level = 0; static int log_level_initialized = 0; Odr_null *ODR_NULLVAL = (Odr_null *) "NULL"; /* the presence of a null value */ Odr_null *odr_nullval(void) { return ODR_NULLVAL; } char *odr_errlist[] = { "No (unknown) error", "Memory allocation failed", "System error", "No space in buffer", "Required data element missing", "Unexpected tag", "Other error", "Protocol error", "Malformed data", "Stack overflow", "Length of constructed type different from sum of members", "Overflow writing definite length of constructed type", "Bad HTTP Request" }; char *odr_errmsg(int n) { return odr_errlist[n]; } void odr_perror(ODR o, const char *message) { const char *e = odr_getelement(o); const char **element_path = odr_get_element_path(o); int err, x; err = odr_geterrorx(o, &x); fprintf(stderr, "%s: %s (code %d:%d)", message, odr_errlist[err], err, x); if (e && *e) fprintf(stderr, " element %s", e); fprintf(stderr, "\n"); if (element_path) { fprintf(stderr, "Element path:"); while (*element_path) fprintf(stderr, " %s", *element_path++); fprintf(stderr, "\n"); } } int odr_geterror(ODR o) { return o->error; } int odr_geterrorx(ODR o, int *x) { if (x) *x = o->op->error_id; return o->error; } const char *odr_getelement(ODR o) { return o->op->element; } const char **odr_get_element_path(ODR o) { int cur_sz = 0; struct odr_constack *st; for (st = o->op->stack_top; st; st = st->prev) cur_sz++; if (o->op->tmp_names_sz < cur_sz + 1) { o->op->tmp_names_sz = 2 * cur_sz + 5; o->op->tmp_names_buf = (const char **) odr_malloc(o, o->op->tmp_names_sz * sizeof(char*)); } o->op->tmp_names_buf[cur_sz] = 0; for (st = o->op->stack_top; st; st = st->prev) { cur_sz--; o->op->tmp_names_buf[cur_sz] = st->name; } assert(cur_sz == 0); return o->op->tmp_names_buf; } void odr_seterror(ODR o, int error, int id) { o->error = error; o->op->error_id = id; o->op->element[0] = '\0'; } void odr_setelement(ODR o, const char *element) { if (element) { strncpy(o->op->element, element, sizeof(o->op->element)-1); o->op->element[sizeof(o->op->element)-1] = '\0'; } } void odr_FILE_write(ODR o, void *handle, int type, const char *buf, int len) { int i; for (i = 0; i < len; i++) { unsigned c = ((const unsigned char *) buf)[i]; if (i == 20000 && len > 31000) { fputs(" ..... ", (FILE*) handle); i = len - 1000; } if (strchr("\r\n\f\t", c) || (c >= ' ' && c <= 126)) putc(c, (FILE*) handle); else { char x[5]; sprintf(x, "\\X%02X", c); fputs(x, (FILE*) handle); } } } void odr_FILE_close(void *handle) { FILE *f = (FILE *) handle; if (f && f != stderr && f != stdout) fclose(f); } void odr_setprint(ODR o, FILE *file) { odr_set_stream(o, file, odr_FILE_write, odr_FILE_close); } void odr_setprint_noclose(ODR o, FILE *file) { odr_set_stream(o, file, odr_FILE_write, 0); } void odr_set_stream(ODR o, void *handle, void (*stream_write)(ODR o, void *handle, int type, const char *buf, int len), void (*stream_close)(void *handle)) { o->op->print = (FILE*) handle; o->op->stream_write = stream_write; o->op->stream_close = stream_close; } int odr_set_charset(ODR o, const char *to, const char *from) { if (o->op->iconv_handle) yaz_iconv_close (o->op->iconv_handle); o->op->iconv_handle = 0; if (to && from) { o->op->iconv_handle = yaz_iconv_open(to, from); if (o->op->iconv_handle == 0) return -1; } return 0; } ODR odr_createmem(int direction) { ODR o; if (!log_level_initialized) { log_level = yaz_log_module_level("odr"); log_level_initialized = 1; } if (!(o = (ODR) xmalloc(sizeof(*o)))) return 0; o->op = (struct Odr_private *) xmalloc(sizeof(*o->op)); o->direction = direction; o->op->buf = 0; o->op->size = o->op->pos = o->op->top = 0; o->op->can_grow = 1; o->mem = nmem_create(); o->op->enable_bias = 1; o->op->odr_ber_tag.lclass = -1; o->op->iconv_handle = 0; odr_setprint_noclose(o, stderr); odr_reset(o); yaz_log(log_level, "odr_createmem dir=%d o=%p", direction, o); return o; } void odr_reset(ODR o) { if (!log_level_initialized) { log_level = yaz_log_module_level("odr"); log_level_initialized = 1; } odr_seterror(o, ONONE, 0); o->op->bp = o->op->buf; odr_seek(o, ODR_S_SET, 0); o->op->top = 0; o->op->t_class = -1; o->op->t_tag = -1; o->op->indent = 0; o->op->stack_first = 0; o->op->stack_top = 0; o->op->tmp_names_sz = 0; o->op->tmp_names_buf = 0; nmem_reset(o->mem); o->op->choice_bias = -1; o->op->lenlen = 1; if (o->op->iconv_handle != 0) yaz_iconv(o->op->iconv_handle, 0, 0, 0, 0); yaz_log(log_level, "odr_reset o=%p", o); } void odr_destroy(ODR o) { nmem_destroy(o->mem); if (o->op->buf && o->op->can_grow) xfree(o->op->buf); if (o->op->stream_close) o->op->stream_close(o->op->print); if (o->op->iconv_handle != 0) yaz_iconv_close(o->op->iconv_handle); xfree(o->op); xfree(o); yaz_log(log_level, "odr_destroy o=%p", o); } void odr_setbuf(ODR o, char *buf, int len, int can_grow) { odr_seterror(o, ONONE, 0); o->op->bp = buf; o->op->buf = buf; o->op->can_grow = can_grow; o->op->top = o->op->pos = 0; o->op->size = len; } char *odr_getbuf(ODR o, int *len, int *size) { *len = o->op->top; if (size) *size = o->op->size; return o->op->buf; } int odr_offset(ODR o) { return o->op->bp - o->op->buf; } void odr_printf(ODR o, const char *fmt, ...) { va_list ap; char buf[4096]; va_start(ap, fmt); yaz_vsnprintf(buf, sizeof(buf), fmt, ap); o->op->stream_write(o, o->op->print, ODR_VISIBLESTRING, buf, strlen(buf)); va_end(ap); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/diagbib1.c0000644000175000017500000002300713526305424011735 00000000000000/** \file ./diagbib1.c \brief Diagnostics: Generated by csvtodiag.tcl from ./bib1.csv */ #ifdef HAVE_CONFIG_H #include #endif #include "diag-entry.h" #include "../include/yaz/diagbib1.h" struct yaz_diag_entry yaz_diag_bib1_tab[] = { {1, "Permanent system error"}, {2, "Temporary system error"}, {3, "Unsupported search"}, {4, "Terms only exclusion (stop) words"}, {5, "Too many argument words"}, {6, "Too many boolean operators"}, {7, "Too many truncated words"}, {8, "Too many incomplete subfields"}, {9, "Truncated words too short"}, {10, "Invalid format for record number (search term)"}, {11, "Too many characters in search statement"}, {12, "Too many records retrieved"}, {13, "Present request out of range"}, {14, "System error in presenting records"}, {15, "Record no authorized to be sent intersystem"}, {16, "Record exceeds Preferred-message-size"}, {17, "Record exceeds Maximum-record-size"}, {18, "Result set not supported as a search term"}, {19, "Only single result set as search term supported"}, {20, "Only ANDing of a single result set as search term supported"}, {21, "Result set exists and replace indicator off"}, {22, "Result set naming not supported"}, {23, "Combination of specified databases not supported"}, {24, "Element set names not supported"}, {25, "Specified element set name not valid for specified database"}, {26, "Only a single element set name supported"}, {27, "Result set no longer exists - unilaterally deleted by target"}, {28, "Result set is in use"}, {29, "One of the specified databases is locked"}, {30, "Specified result set does not exist"}, {31, "Resources exhausted - no results available"}, {32, "Resources exhausted - unpredictable partial results available"}, {33, "Resources exhausted - valid subset of results available"}, {100, "Unspecified error"}, {101, "Access-control failure"}, {102, "Security challenge required but could not be issued - request terminated"}, {103, "Security challenge required but could not be issued - record not included"}, {104, "Security challenge failed - record not included"}, {105, "Terminated by negative continue response"}, {106, "No abstract syntaxes agreed to for this record"}, {107, "Query type not supported"}, {108, "Malformed query"}, {109, "Database unavailable"}, {110, "Operator unsupported"}, {111, "Too many databases specified"}, {112, "Too many result sets created"}, {113, "Unsupported attribute type"}, {114, "Unsupported Use attribute"}, {115, "Unsupported value for Use attribute"}, {116, "Use attribute required but not supplied"}, {117, "Unsupported Relation attribute"}, {118, "Unsupported Structure attribute"}, {119, "Unsupported Position attribute"}, {120, "Unsupported Truncation attribute"}, {121, "Unsupported Attribute Set"}, {122, "Unsupported Completeness attribute"}, {123, "Unsupported attribute combination"}, {124, "Unsupported coded value for term"}, {125, "Malformed search term"}, {126, "Illegal term value for attribute"}, {127, "Unparsable format for un-normalized value"}, {128, "Illegal result set name"}, {129, "Proximity search of sets not supported"}, {130, "Illegal result set in proximity search"}, {131, "Unsupported proximity relation"}, {132, "Unsupported proximity unit code"}, {201, "Proximity not supported with this attribute combination"}, {202, "Unsupported distance for proximity"}, {203, "Ordered flag not supported for proximity"}, {205, "Only zero step size supported for Scan"}, {206, "Specified step size not supported for Scan"}, {207, "Cannot sort according to sequence"}, {208, "No result set name supplied on Sort"}, {209, "Generic sort not supported (database-specific sort only supported)"}, {210, "Database specific sort not supported"}, {211, "Too many sort keys"}, {212, "Duplicate sort keys"}, {213, "Unsupported missing data action"}, {214, "Illegal sort relation"}, {215, "Illegal case value"}, {216, "Illegal missing data action"}, {217, "Segmentation: Cannot guarantee records will fit in specified segments"}, {218, "ES: Package name already in use"}, {219, "ES: no such package, on modify/delete"}, {220, "ES: quota exceeded"}, {221, "ES: extended service type not supported"}, {222, "ES: permission denied on ES - id not authorized"}, {223, "ES: permission denied on ES - cannot modify or delete"}, {224, "ES: immediate execution failed"}, {225, "ES: immediate execution not supported for this service"}, {226, "ES: immediate execution not supported for these parameters"}, {227, "No data available in requested record syntax"}, {228, "Scan: malformed scan"}, {229, "Term type not supported"}, {230, "Sort: too many input results"}, {231, "Sort: incompatible record formats"}, {232, "Scan: term list not supported"}, {233, "Scan: unsupported value of position-in-response"}, {234, "Too many index terms processed"}, {235, "Database does not exist"}, {236, "Access to specified database denied"}, {237, "Sort: illegal sort"}, {238, "Record not available in requested syntax"}, {239, "Record syntax not supported"}, {240, "Scan: Resources exhausted looking for satisfying terms"}, {241, "Scan: Beginning or end of term list"}, {242, "Segmentation: max-segment-size too small to segment record"}, {243, "Present: additional-ranges parameter not supported"}, {244, "Present: comp-spec parameter not supported"}, {245, "Type-1 query: restriction ('resultAttr') operand not supported"}, {246, "Type-1 query: 'complex' attributeValue not supported"}, {247, "Type-1 query: 'attributeSet' as part of AttributeElement not supported"}, {1001, "Malformed APDU"}, {1002, "ES: EXTERNAL form of Item Order request not supported"}, {1003, "ES: Result set item form of Item Order request not supported"}, {1004, "ES: Extended services not supported unless access control is in effect"}, {1005, "Response records in Search response not supported"}, {1006, "Response records in Search response not possible for specified database (or database combination)"}, {1007, "No Explain server. Addinfo: pointers to servers that have a surrogate Explain database for this server"}, {1008, "ES: missing mandatory parameter for specified function. Addinfo: parameter"}, {1009, "ES: Item Order, unsupported OID in itemRequest. Addinfo: OID"}, {1010, "Init/AC: Bad Userid"}, {1011, "Init/AC: Bad Userid and/or Password"}, {1012, "Init/AC: No searches remaining (pre-purchased searches exhausted)"}, {1013, "Init/AC: Incorrect interface type (specified id valid only when used with a particular access method or client)"}, {1014, "Init/AC: Authentication System error"}, {1015, "Init/AC: Maximum number of simultaneous sessions for Userid"}, {1016, "Init/AC: Blocked network address"}, {1017, "Init/AC: No databases available for specified userId"}, {1018, "Init/AC: System temporarily out of resources"}, {1019, "Init/AC: System not available due to maintenance"}, {1020, "Init/AC: System temporarily unavailable (Addinfo: when it's expected back up)"}, {1021, "Init/AC: Account has expired"}, {1022, "Init/AC: Password has expired so a new one must be supplied"}, {1023, "Init/AC: Password has been changed by an administrator so a new one must be supplied"}, {1024, "Unsupported Attribute"}, {1025, "Service not supported for this database"}, {1026, "Record cannot be opened because it is locked"}, {1027, "SQL error"}, {1028, "Record deleted"}, {1029, "Scan: too many terms requested. Addinfo: max terms supported"}, {1040, "ES: Invalid function"}, {1041, "ES: Error in retention time"}, {1042, "ES: Permissions data not understood"}, {1043, "ES: Invalid OID for task specific parameters"}, {1044, "ES: Invalid action"}, {1045, "ES: Unknown schema"}, {1046, "ES: Too many records in package"}, {1047, "ES: Invalid wait action"}, {1048, "ES: Cannot create task package -- exceeds maximum permissible size"}, {1049, "ES: Cannot return task package -- exceeds maximum permissible size"}, {1050, "ES: Extended services request too large"}, {1051, "Scan: Attribute set id required -- not supplied"}, {1052, "ES: Cannot process task package record -- exceeds maximum permissible record size for ES"}, {1053, "ES: Cannot return task package record -- exceeds maximum permissible record size for ES response"}, {1054, "Init: Required negotiation record not included"}, {1055, "Init: negotiation option required"}, {1056, "Attribute not supported for database"}, {1057, "ES: Unsupported value of task package parameter"}, {1058, "Duplicate Detection: Cannot dedup on requested record portion"}, {1059, "Duplicate Detection: Requested detection criterion not supported"}, {1060, "Duplicate Detection: Requested level of match not supported"}, {1061, "Duplicate Detection: Requested regular expression not supported"}, {1062, "Duplicate Detection: Cannot do clustering"}, {1063, "Duplicate Detection: Retention criterion not supported"}, {1064, "Duplicate Detection: Requested number (or percentage) of entries "}, {1065, "Duplicate Detection: Requested sort criterion not supported"}, {1066, "CompSpec: Unknown schema, or schema not supported."}, {1067, "Encapsulation: Encapsulated sequence of PDUs not supported"}, {1068, "Encapsulation: Base operation (and encapsulated PDUs) not executed based on pre-screening analysis"}, {1069, "No syntaxes available for this request"}, {1070, "user not authorized to receive record(s) in requested syntax"}, {1071, "preferredRecordSyntax not supplied"}, {1072, "Query term includes characters that do not translate into the target character set"}, {1073, "Database records do not contain data associated with access point"}, {1074, "Proxy failure"}, {0, 0}}; const char *yaz_diag_bib1_str(int code) { return yaz_diag_to_str(yaz_diag_bib1_tab, code); } const char *diagbib1_str(int code) { return yaz_diag_to_str(yaz_diag_bib1_tab, code); } yaz-5.28.0/src/zoom-record-cache.c0000644000175000017500000002137013265142510013570 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zoom-record-cache.c * \brief Implements ZOOM record caching */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "zoom-p.h" #include #include #include #if SHPTR YAZ_SHPTR_TYPE(WRBUF) #endif struct ZOOM_record_p { ODR odr; #if SHPTR struct WRBUF_shptr *record_wrbuf; #else WRBUF wrbuf; #endif Z_NamePlusRecord *npr; const char *schema; const char *diag_uri; const char *diag_message; const char *diag_details; const char *diag_set; }; struct ZOOM_record_cache_p { struct ZOOM_record_p rec; char *elementSetName; char *syntax; char *schema; int pos; ZOOM_record_cache next; }; static size_t record_hash(int pos) { if (pos < 0) pos = 0; return pos % RECORD_HASH_SIZE; } static ZOOM_record record_cache_add(ZOOM_resultset r, Z_NamePlusRecord *npr, int pos, const char *syntax, const char *elementSetName, const char *schema, Z_SRW_diagnostic *diag) { ZOOM_record_cache rc = 0; ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_RECV_RECORD); ZOOM_connection_put_event(r->connection, event); for (rc = r->record_hash[record_hash(pos)]; rc; rc = rc->next) { if (pos == rc->pos && yaz_strcmp_null(schema, rc->schema) == 0 && yaz_strcmp_null(elementSetName,rc->elementSetName) == 0 && yaz_strcmp_null(syntax, rc->syntax) == 0) break; } if (!rc) { rc = (ZOOM_record_cache) odr_malloc(r->odr, sizeof(*rc)); rc->rec.odr = 0; #if SHPTR YAZ_SHPTR_INC(r->record_wrbuf); rc->rec.record_wrbuf = r->record_wrbuf; #else rc->rec.wrbuf = 0; #endif rc->elementSetName = odr_strdup_null(r->odr, elementSetName); rc->syntax = odr_strdup_null(r->odr, syntax); rc->schema = odr_strdup_null(r->odr, schema); rc->pos = pos; rc->next = r->record_hash[record_hash(pos)]; r->record_hash[record_hash(pos)] = rc; } rc->rec.npr = npr; rc->rec.schema = odr_strdup_null(r->odr, schema); rc->rec.diag_set = 0; rc->rec.diag_uri = 0; rc->rec.diag_message = 0; rc->rec.diag_details = 0; if (diag) { if (diag->uri) { char *cp; rc->rec.diag_set = odr_strdup(r->odr, diag->uri); if ((cp = strrchr(rc->rec.diag_set, '/'))) *cp = '\0'; rc->rec.diag_uri = odr_strdup(r->odr, diag->uri); } rc->rec.diag_message = odr_strdup_null(r->odr, diag->message); rc->rec.diag_details = odr_strdup_null(r->odr, diag->details); } return &rc->rec; } void ZOOM_record_cache_add(ZOOM_resultset r, Z_NamePlusRecord *npr, int pos, const char *syntax, const char *elementSetName, const char *schema, Z_SRW_diagnostic *diag) { record_cache_add(r, npr, pos, syntax, elementSetName, schema, diag); ZOOM_memcached_add(r, npr, pos, syntax, elementSetName, schema, diag); } ZOOM_record ZOOM_record_cache_lookup_i(ZOOM_resultset r, int pos, const char *syntax, const char *elementSetName, const char *schema) { ZOOM_record_cache rc; for (rc = r->record_hash[record_hash(pos)]; rc; rc = rc->next) { if (pos == rc->pos) { if (yaz_strcmp_null(schema, rc->schema)) continue; if (yaz_strcmp_null(elementSetName,rc->elementSetName)) continue; if (yaz_strcmp_null(syntax, rc->syntax)) continue; return &rc->rec; } } return 0; } ZOOM_record ZOOM_record_cache_lookup(ZOOM_resultset r, int pos, const char *syntax, const char *elementSetName, const char *schema) { Z_NamePlusRecord *npr; ZOOM_record rec = ZOOM_record_cache_lookup_i(r, pos, syntax, elementSetName, schema); if (rec) { ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_RECV_RECORD); ZOOM_connection_put_event(r->connection, event); return rec; } npr = ZOOM_memcached_lookup(r, pos, syntax, elementSetName, schema); if (npr) return record_cache_add(r, npr, pos, syntax, elementSetName, schema, 0); return 0; } ZOOM_API(ZOOM_record) ZOOM_record_clone(ZOOM_record srec) { char *buf; int size; ODR odr_enc; ZOOM_record nrec; odr_enc = odr_createmem(ODR_ENCODE); if (!z_NamePlusRecord(odr_enc, &srec->npr, 0, 0)) return 0; buf = odr_getbuf(odr_enc, &size, 0); nrec = (ZOOM_record) xmalloc(sizeof(*nrec)); nrec->odr = odr_createmem(ODR_DECODE); #if SHPTR nrec->record_wrbuf = 0; #else nrec->wrbuf = 0; #endif odr_setbuf(nrec->odr, buf, size, 0); z_NamePlusRecord(nrec->odr, &nrec->npr, 0, 0); nrec->schema = odr_strdup_null(nrec->odr, srec->schema); nrec->diag_uri = odr_strdup_null(nrec->odr, srec->diag_uri); nrec->diag_message = odr_strdup_null(nrec->odr, srec->diag_message); nrec->diag_details = odr_strdup_null(nrec->odr, srec->diag_details); nrec->diag_set = odr_strdup_null(nrec->odr, srec->diag_set); odr_destroy(odr_enc); return nrec; } static void ZOOM_record_release(ZOOM_record rec) { if (!rec) return; #if SHPTR if (rec->record_wrbuf) YAZ_SHPTR_DEC(rec->record_wrbuf, wrbuf_destroy); #else if (rec->wrbuf) wrbuf_destroy(rec->wrbuf); #endif if (rec->odr) odr_destroy(rec->odr); } ZOOM_API(void) ZOOM_resultset_cache_reset(ZOOM_resultset r) { int i; for (i = 0; irecord_hash[i]; rc; rc = rc->next) { ZOOM_record_release(&rc->rec); } r->record_hash[i] = 0; } } ZOOM_API(const char *) ZOOM_record_get(ZOOM_record rec, const char *type_spec, int *len) { WRBUF wrbuf; if (len) *len = 0; /* default return */ if (!rec || !rec->npr) return 0; #if SHPTR if (!rec->record_wrbuf) { WRBUF w = wrbuf_alloc(); YAZ_SHPTR_INIT(rec->record_wrbuf, w); } wrbuf = rec->record_wrbuf->ptr; #else if (!rec->wrbuf) rec->wrbuf = wrbuf_alloc(); wrbuf = rec->wrbuf; #endif return yaz_record_render(rec->npr, rec->schema, wrbuf, type_spec, len); } ZOOM_API(int) ZOOM_record_error(ZOOM_record rec, const char **cp, const char **addinfo, const char **diagset) { Z_NamePlusRecord *npr; if (!rec) return 0; npr = rec->npr; if (rec->diag_uri) { if (cp) *cp = rec->diag_message; if (addinfo) *addinfo = rec->diag_details; if (diagset) *diagset = rec->diag_set; return ZOOM_uri_to_code(rec->diag_uri); } if (npr && npr->which == Z_NamePlusRecord_surrogateDiagnostic) { Z_DiagRec *diag_rec = npr->u.surrogateDiagnostic; int error = YAZ_BIB1_UNSPECIFIED_ERROR; const char *add = 0; if (diag_rec->which == Z_DiagRec_defaultFormat) { Z_DefaultDiagFormat *ddf = diag_rec->u.defaultFormat; oid_class oclass; error = *ddf->condition; switch (ddf->which) { case Z_DefaultDiagFormat_v2Addinfo: add = ddf->u.v2Addinfo; break; case Z_DefaultDiagFormat_v3Addinfo: add = ddf->u.v3Addinfo; break; } if (diagset) *diagset = yaz_oid_to_string(yaz_oid_std(), ddf->diagnosticSetId, &oclass); } else { if (diagset) *diagset = "Bib-1"; } if (addinfo) *addinfo = add ? add : ""; if (cp) *cp = diagbib1_str(error); return error; } return 0; } ZOOM_API(void) ZOOM_record_destroy(ZOOM_record rec) { ZOOM_record_release(rec); xfree(rec); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zes-psched.c0000644000175000017500000001306313273126163012341 00000000000000/** \file zes-psched.c \brief ASN.1 Module ESFormat-PeriodicQuerySchedule Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_PQSPeriodicQueryScheduleEsRequest(ODR o, Z_PQSPeriodicQueryScheduleEsRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_PQSOriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT, 1, 0, "toKeep") && odr_explicit_tag(o, z_PQSOriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT, 2, 0, "notToKeep") && odr_sequence_end(o); } int z_PQSPeriodicQueryScheduleTaskPackage(ODR o, Z_PQSPeriodicQueryScheduleTaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_PQSOriginPartToKeep, &(*p)->originPart, ODR_CONTEXT, 1, 0, "originPart") && odr_explicit_tag(o, z_PQSTargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 0, "targetPart") && odr_sequence_end(o); } int z_PQSPeriodicQuerySchedule(ODR o, Z_PQSPeriodicQuerySchedule **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PQSPeriodicQuerySchedule_esRequest, (Odr_fun) z_PQSPeriodicQueryScheduleEsRequest, "esRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PQSPeriodicQuerySchedule_taskPackage, (Odr_fun) z_PQSPeriodicQueryScheduleTaskPackage, "taskPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_PQSOriginPartToKeep(ODR o, Z_PQSOriginPartToKeep **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PQSOriginPartToKeep_packageName, (Odr_fun) z_InternationalString, "packageName"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_PQSOriginPartToKeep_exportPackage, (Odr_fun) z_ESExportSpecification, "exportPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_bool, &(*p)->activeFlag, ODR_CONTEXT, 1, 0, "activeFlag") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->databaseNames, &(*p)->num_databaseNames, "databaseNames") || odr_ok(o)) && odr_implicit_tag(o, odr_integer, &(*p)->resultSetDisposition, ODR_CONTEXT, 3, 1, "resultSetDisposition") && odr_explicit_tag(o, z_ESDestination, &(*p)->alertDestination, ODR_CONTEXT, 4, 1, "alertDestination") && ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 5, "exportParameters") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_sequence_end(o); } int z_PQSOriginPartNotToKeep(ODR o, Z_PQSOriginPartNotToKeep **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_PQSOriginPartNotToKeep_actualQuery, (Odr_fun) z_Query, "actualQuery"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PQSOriginPartNotToKeep_packageName, (Odr_fun) z_InternationalString, "packageName"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "querySpec") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_explicit_tag(o, z_PQSPeriod, &(*p)->originSuggestedPeriod, ODR_CONTEXT, 2, 1, "originSuggestedPeriod") && odr_implicit_tag(o, odr_generalizedtime, &(*p)->expiration, ODR_CONTEXT, 3, 1, "expiration") && odr_implicit_tag(o, z_InternationalString, &(*p)->resultSetPackage, ODR_CONTEXT, 4, 1, "resultSetPackage") && odr_sequence_end(o); } int z_PQSTargetPart(ODR o, Z_PQSTargetPart **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_Query, &(*p)->actualQuery, ODR_CONTEXT, 1, 0, "actualQuery") && odr_explicit_tag(o, z_PQSPeriod, &(*p)->targetStatedPeriod, ODR_CONTEXT, 2, 0, "targetStatedPeriod") && odr_implicit_tag(o, odr_generalizedtime, &(*p)->expiration, ODR_CONTEXT, 3, 1, "expiration") && odr_implicit_tag(o, z_InternationalString, &(*p)->resultSetPackage, ODR_CONTEXT, 4, 1, "resultSetPackage") && odr_implicit_tag(o, odr_generalizedtime, &(*p)->lastQueryTime, ODR_CONTEXT, 5, 0, "lastQueryTime") && odr_implicit_tag(o, odr_integer, &(*p)->lastResultNumber, ODR_CONTEXT, 6, 0, "lastResultNumber") && odr_implicit_tag(o, odr_integer, &(*p)->numberSinceModify, ODR_CONTEXT, 7, 1, "numberSinceModify") && odr_sequence_end(o); } int z_PQSPeriod(ODR o, Z_PQSPeriod **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PQSPeriod_unit, (Odr_fun) z_IntUnit, "unit"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PQSPeriod_businessDaily, (Odr_fun) odr_null, "businessDaily"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_PQSPeriod_continuous, (Odr_fun) odr_null, "continuous"}, {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_PQSPeriod_other, (Odr_fun) z_InternationalString, "other"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } yaz-5.28.0/src/oid.csv0000644000175000017500000001302513265142510011411 00000000000000TRANSYN, 2.1.1, "BER" TRANSYN, 1.0.2709.1.1, "ISO2709" GENERAL, 1.0.10161.2.1, "ISOILL-1" ABSYN, 2.1, "Z-APDU" APPCTX, 1.1, "Z-BASIC" ATTSET, Z3950_PREFIX.3.1, "Bib-1" ATTSET, Z3950_PREFIX.3.2, "Exp-1" ATTSET, Z3950_PREFIX.3.3, "Ext-1" ATTSET, Z3950_PREFIX.3.4, "CCL-1" ATTSET, Z3950_PREFIX.3.5, "GILS" ATTSET, Z3950_PREFIX.3.5, "GILS-attset" ATTSET, Z3950_PREFIX.3.6, "STAS-attset" ATTSET, Z3950_PREFIX.3.7, "Collections-attset" ATTSET, Z3950_PREFIX.3.8, "CIMI-attset" ATTSET, Z3950_PREFIX.3.9, "Geo-attset" ATTSET, Z3950_PREFIX.3.10, "ZBIG" ATTSET, Z3950_PREFIX.3.11, "Util" ATTSET, Z3950_PREFIX.3.12, "XD-1" ATTSET, Z3950_PREFIX.3.13, "Zthes" ATTSET, Z3950_PREFIX.3.14, "Fin-1" ATTSET, Z3950_PREFIX.3.15, "Dan-1" ATTSET, Z3950_PREFIX.3.16, "Holdings" ATTSET, Z3950_PREFIX.3.17, "MARC" ATTSET, Z3950_PREFIX.3.18, "Bib-2" ATTSET, Z3950_PREFIX.3.19, "ZeeRex" ATTSET, Z3950_PREFIX.3.1000.81.1, "Thesaurus-attset" ATTSET, Z3950_PREFIX.3.1000.81.2, "IDXPATH" ATTSET, Z3950_PREFIX.3.1000.81.3, "EXTLITE" DIAGSET, Z3950_PREFIX.4.1, "Bib-1" DIAGSET, Z3950_PREFIX.4.2, "Diag-1" DIAGSET, Z3950_PREFIX.4.3, "Diag-ES" DIAGSET, Z3950_PREFIX.4.3, "Diag-General" RECSYN, Z3950_PREFIX.5.1, "Unimarc" RECSYN, Z3950_PREFIX.5.2, "Intermarc" RECSYN, Z3950_PREFIX.5.3, "CCF" RECSYN, Z3950_PREFIX.5.10, "USmarc" RECSYN, Z3950_PREFIX.5.10, "MARC21" RECSYN, Z3950_PREFIX.5.11, "UKmarc" RECSYN, Z3950_PREFIX.5.12, "Normarc" RECSYN, Z3950_PREFIX.5.13, "Librismarc" RECSYN, Z3950_PREFIX.5.14, "Danmarc" RECSYN, Z3950_PREFIX.5.15, "Finmarc" RECSYN, Z3950_PREFIX.5.16, "MAB" RECSYN, Z3950_PREFIX.5.17, "Canmarc" RECSYN, Z3950_PREFIX.5.18, "SBN" RECSYN, Z3950_PREFIX.5.19, "Picamarc" RECSYN, Z3950_PREFIX.5.20, "Ausmarc" RECSYN, Z3950_PREFIX.5.21, "Ibermarc" RECSYN, Z3950_PREFIX.5.22, "Carmarc" RECSYN, Z3950_PREFIX.5.23, "Malmarc" RECSYN, Z3950_PREFIX.5.24, "JPmarc" RECSYN, Z3950_PREFIX.5.25, "SWEmarc" RECSYN, Z3950_PREFIX.5.26, "SIGLEmarc" RECSYN, Z3950_PREFIX.5.27, "ISDSmarc" RECSYN, Z3950_PREFIX.5.28, "RUSmarc" RECSYN, Z3950_PREFIX.5.29, "Hunmarc" RECSYN, Z3950_PREFIX.5.30, "NACSIS-CATP" RECSYN, Z3950_PREFIX.5.31, "FINMARC2000" RECSYN, Z3950_PREFIX.5.32, "MARC21-fin" RECSYN, Z3950_PREFIX.5.100, "Explain" RECSYN, Z3950_PREFIX.5.101, "SUTRS" RECSYN, Z3950_PREFIX.5.102, "OPAC" RECSYN, Z3950_PREFIX.5.103, "Summary" RECSYN, Z3950_PREFIX.5.104, "GRS-0" RECSYN, Z3950_PREFIX.5.105, "GRS-1" RECSYN, Z3950_PREFIX.5.106, "Extended" RECSYN, Z3950_PREFIX.5.107, "Fragment" RECSYN, Z3950_PREFIX.5.109.1, "pdf" RECSYN, Z3950_PREFIX.5.109.2, "postscript" RECSYN, Z3950_PREFIX.5.109.3, "html" RECSYN, Z3950_PREFIX.5.109.4, "tiff" RECSYN, Z3950_PREFIX.5.109.5, "gif" RECSYN, Z3950_PREFIX.5.109.6, "jpeg" RECSYN, Z3950_PREFIX.5.109.7, "png" RECSYN, Z3950_PREFIX.5.109.8, "mpeg" RECSYN, Z3950_PREFIX.5.109.9, "sgml" RECSYN, Z3950_PREFIX.5.110.1, "tiff-b" RECSYN, Z3950_PREFIX.5.110.2, "wav" RECSYN, Z3950_PREFIX.5.111, "SQL-RS" RECSYN, Z3950_PREFIX.5.1000.81.2, "SOIF" RECSYN, Z3950_PREFIX.5.1000.81.3, "JSON" RECSYN, Z3950_PREFIX.5.109.10, "XML" RECSYN, Z3950_PREFIX.5.109.10, "text-XML" RECSYN, Z3950_PREFIX.5.109.11, "application-XML" RESFORM, Z3950_PREFIX.7.1, "Resource-1" RESFORM, Z3950_PREFIX.7.2, "Resource-2" RESFORM, Z3950_PREFIX.7.1000.81.1, "UNIverse-Resource-Report" ACCFORM, Z3950_PREFIX.8.1, "Prompt-1" ACCFORM, Z3950_PREFIX.8.2, "Des-1" ACCFORM, Z3950_PREFIX.8.3, "Krb-1" EXTSERV, Z3950_PREFIX.9.1, "Persistent set" EXTSERV, Z3950_PREFIX.9.2, "Persistent query" EXTSERV, Z3950_PREFIX.9.3, "Periodic query" EXTSERV, Z3950_PREFIX.9.4, "Item order" EXTSERV, Z3950_PREFIX.9.5, "Database Update (first version)" EXTSERV, Z3950_PREFIX.9.5.1, "Database Update (second version)" EXTSERV, Z3950_PREFIX.9.5.1.1, "Database Update" EXTSERV, Z3950_PREFIX.9.6, "exp. spec." EXTSERV, Z3950_PREFIX.9.7, "exp. inv." EXTSERV, Z3950_PREFIX.9.1000.81.1, "Admin" USERINFO, Z3950_PREFIX.10.1, "searchResult-1" USERINFO, Z3950_PREFIX.10.2, "CharSetandLanguageNegotiation" USERINFO, Z3950_PREFIX.10.3, "UserInfo-1" USERINFO, Z3950_PREFIX.10.4, "MultipleSearchTerms-1" USERINFO, Z3950_PREFIX.10.5, "MultipleSearchTerms-2" USERINFO, Z3950_PREFIX.10.6, "DateTime" USERINFO, Z3950_PREFIX.10.1000.81.1, "Proxy" USERINFO, Z3950_PREFIX.10.1000.81.2, "Cookie" USERINFO, Z3950_PREFIX.10.1000.81.3, "Client-IP" USERINFO, Z3950_PREFIX.10.1000.81.4, "Scan-Set" USERINFO, Z3950_PREFIX.10.1000.81.5, "Facet-1" ELEMSPEC, Z3950_PREFIX.11.1, "Espec-1" VARSET, Z3950_PREFIX.12.1, "Variant-1" SCHEMA, Z3950_PREFIX.13.1, "WAIS-schema" SCHEMA, Z3950_PREFIX.13.2, "GILS-schema" SCHEMA, Z3950_PREFIX.13.3, "Collections-schema" SCHEMA, Z3950_PREFIX.13.4, "Geo-schema" SCHEMA, Z3950_PREFIX.13.5, "CIMI-schema" SCHEMA, Z3950_PREFIX.13.6, "Update ES" SCHEMA, Z3950_PREFIX.13.7, "Holdings" SCHEMA, Z3950_PREFIX.13.8, "Zthes" SCHEMA, Z3950_PREFIX.13.1000.81.1, "thesaurus-schema" SCHEMA, Z3950_PREFIX.13.1000.81.2, "Explain-schema" TAGSET, Z3950_PREFIX.14.1, "TagsetM" TAGSET, Z3950_PREFIX.14.2, "TagsetG" TAGSET, Z3950_PREFIX.14.3, "STAS-tagset" TAGSET, Z3950_PREFIX.14.4, "GILS-tagset" TAGSET, Z3950_PREFIX.14.5, "Collections-tagset" TAGSET, Z3950_PREFIX.14.6, "CIMI-tagset" TAGSET, Z3950_PREFIX.14.1000.81.1, "thesaurus-tagset" TAGSET, Z3950_PREFIX.14.1000.81.2, "Explain-tagset" TAGSET, Z3950_PREFIX.14.8, "Zthes-tagset" NEGOT, Z3950_PREFIX.15.3, "Charset-3" NEGOT, Z3950_PREFIX.15.4, "Charset-4" NEGOT, Z3950_PREFIX.15.1000.81.1, "Charset-ID" USERINFO, Z3950_PREFIX.16.2, "CQL" GENERAL, 1.0.10646.1.0.2, "UCS-2" GENERAL, 1.0.10646.1.0.4, "UCS-4" GENERAL, 1.0.10646.1.0.5, "UTF-16" GENERAL, 1.0.10646.1.0.8, "UTF-8" USERINFO, Z3950_PREFIX.10.1000.17.1, "OCLC-userInfo" EXTSERV, Z3950_PREFIX.9.1000.105.4, "XML-ES" yaz-5.28.0/src/ccltoken.c0000644000175000017500000001621513265142510012073 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ccltoken.c * \brief Implements CCL lexical analyzer (scanner) */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "cclp.h" /* * token_cmp: Compare token with keyword(s) * kw: Keyword list. Each keyword is separated by space. * token: CCL token. * return: 1 if token string matches one of the keywords in list; * 0 otherwise. */ static int token_cmp(CCL_parser cclp, const char **kw, struct ccl_token *token) { const char **aliases; int case_sensitive = cclp->ccl_case_sensitive; int i; aliases = ccl_qual_search_special(cclp->bibset, "case"); if (aliases) case_sensitive = atoi(aliases[0]); for (i = 0; kw[i]; i++) { if (token->len == strlen(kw[i])) { if (case_sensitive) { if (!memcmp(kw[i], token->name, token->len)) return 1; } else { if (!ccl_memicmp(kw[i], token->name, token->len)) return 1; } } } return 0; } /* * ccl_tokenize: tokenize CCL command string. * return: CCL token list. */ struct ccl_token *ccl_parser_tokenize(CCL_parser cclp, const char *command) { const char **aliases; const unsigned char *cp = (const unsigned char *) command; struct ccl_token *first = NULL; struct ccl_token *last = NULL; cclp->start_pos = command; while (1) { const unsigned char *cp0 = cp; while (*cp && strchr(" \t\r\n", *cp)) cp++; if (!first) { first = last = (struct ccl_token *)xmalloc(sizeof(*first)); ccl_assert(first); last->prev = NULL; } else { last->next = (struct ccl_token *)xmalloc(sizeof(*first)); ccl_assert(last->next); last->next->prev = last; last = last->next; } last->ws_prefix_buf = (const char *) cp0; last->ws_prefix_len = cp - cp0; last->next = NULL; last->name = (const char *) cp; last->len = 1; switch (*cp++) { case '\0': last->kind = CCL_TOK_EOL; return first; case '(': last->kind = CCL_TOK_LP; break; case ')': last->kind = CCL_TOK_RP; break; case ',': last->kind = CCL_TOK_COMMA; break; case '%': case '!': last->kind = CCL_TOK_PROX; while (yaz_isdigit(*cp)) { ++ last->len; cp++; } break; case '>': case '<': case '=': if (*cp == '=' || *cp == '<' || *cp == '>') { cp++; last->kind = CCL_TOK_REL; ++ last->len; } else if (cp[-1] == '=') last->kind = CCL_TOK_EQ; else last->kind = CCL_TOK_REL; break; default: --cp; --last->len; last->kind = CCL_TOK_TERM; last->name = (const char *) cp; while (*cp && !strchr("(),%!><= \t\n\r", *cp)) { if (*cp == '\\' && cp[1]) { cp++; ++ last->len; } else if (*cp == '"') { while (*cp) { cp++; ++ last->len; if (*cp == '\\' && cp[1]) { cp++; ++ last->len; } else if (*cp == '"') break; } } if (!*cp) break; cp++; ++ last->len; } aliases = ccl_qual_search_special(cclp->bibset, "and"); if (!aliases) aliases = cclp->ccl_token_and; if (token_cmp(cclp, aliases, last)) last->kind = CCL_TOK_AND; aliases = ccl_qual_search_special(cclp->bibset, "or"); if (!aliases) aliases = cclp->ccl_token_or; if (token_cmp(cclp, aliases, last)) last->kind = CCL_TOK_OR; aliases = ccl_qual_search_special(cclp->bibset, "not"); if (!aliases) aliases = cclp->ccl_token_not; if (token_cmp(cclp, aliases, last)) last->kind = CCL_TOK_NOT; aliases = ccl_qual_search_special(cclp->bibset, "set"); if (!aliases) aliases = cclp->ccl_token_set; if (token_cmp(cclp, aliases, last)) last->kind = CCL_TOK_SET; } } return first; } struct ccl_token *ccl_token_add(struct ccl_token *at) { struct ccl_token *n = (struct ccl_token *)xmalloc(sizeof(*n)); ccl_assert(n); n->next = at->next; n->prev = at; at->next = n; if (n->next) n->next->prev = n; n->kind = CCL_TOK_TERM; n->name = 0; n->len = 0; n->ws_prefix_buf = 0; n->ws_prefix_len = 0; return n; } /* * ccl_token_del: delete CCL tokens */ void ccl_token_del(struct ccl_token *list) { struct ccl_token *list1; while (list) { list1 = list->next; xfree(list); list = list1; } } static const char **create_ar(const char *v1, const char *v2) { const char **a = (const char **) xmalloc(3 * sizeof(*a)); a[0] = xstrdup(v1); if (v2) { a[1] = xstrdup(v2); a[2] = 0; } else a[1] = 0; return a; } static void destroy_ar(const char **a) { if (a) { int i; for (i = 0; a[i]; i++) xfree((char *) a[i]); xfree((char **)a); } } CCL_parser ccl_parser_create(CCL_bibset bibset) { CCL_parser p = (CCL_parser)xmalloc(sizeof(*p)); if (!p) return p; p->look_token = NULL; p->error_code = 0; p->error_pos = NULL; p->bibset = bibset; p->ccl_token_and = create_ar("and", 0); p->ccl_token_or = create_ar("or", 0); p->ccl_token_not = create_ar("not", "andnot"); p->ccl_token_set = create_ar("set", 0); p->ccl_case_sensitive = 1; return p; } void ccl_parser_destroy(CCL_parser p) { if (!p) return; destroy_ar(p->ccl_token_and); destroy_ar(p->ccl_token_or); destroy_ar(p->ccl_token_not); destroy_ar(p->ccl_token_set); xfree(p); } void ccl_parser_set_case(CCL_parser p, int case_sensitivity_flag) { if (p) p->ccl_case_sensitive = case_sensitivity_flag; } int ccl_parser_get_error(CCL_parser cclp, int *pos) { if (pos && cclp->error_code) *pos = cclp->error_pos - cclp->start_pos; return cclp->error_code; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cql.y0000644000175000017500000002177513265142510011105 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /* bison parser for CQL grammar. */ %{ /** * \file cql.c * \brief Implements CQL parser. * * This is a YACC parser, but since it must be reentrant, Bison is required. * The original source file is cql.y. */ #if HAVE_CONFIG_H #include #endif #include #include /* avoid that bison stuff defines malloc/free - already in stdlib.h */ #ifdef _MSC_VER #define _STDLIB_H 1 #endif #include #include #include #include #include /** Node in the LALR parse tree. */ typedef struct { /** Inhereted attribute: relation */ struct cql_node *rel; /** Synthesized attribute: CQL node */ struct cql_node *cql; /** string buffer with token */ char *buf; /** length of token */ size_t len; /** size of buffer (len <= size) */ size_t size; } token; struct cql_parser { int (*getbyte)(void *client_data); void (*ungetbyte)(int b, void *client_data); void *client_data; int last_error; int last_pos; struct cql_node *top; NMEM nmem; int strict; }; #define YYSTYPE token int yylex(YYSTYPE *lval, void *vp); int yyerror(void *lval, char *msg); %} %lex-param {void *parm} %parse-param {void *parm} %pure-parser %token PREFIX_NAME SIMPLE_STRING AND OR NOT PROX GE LE NE EXACT SORTBY %% top: { $$.rel = cql_node_mk_sc(((CQL_parser) parm)->nmem, "cql.serverChoice", "=", 0); ((CQL_parser) parm)->top = 0; } cqlQuery1 sortby { cql_node_destroy($$.rel); if ($3.cql) { $3.cql->u.sort.search = $2.cql; ((CQL_parser) parm)->top = $3.cql; } else { ((CQL_parser) parm)->top = $2.cql; } } ; sortby: /* empty */ { $$.cql = 0; } | SORTBY sortSpec { $$.cql = $2.cql; }; sortSpec: sortSpec singleSpec { $$.cql = $1.cql; $$.cql->u.sort.next = $2.cql; } | singleSpec { $$.cql = $1.cql; }; singleSpec: index modifiers { $$.cql = cql_node_mk_sort(((CQL_parser) parm)->nmem, $1.buf, $2.cql); } ; cqlQuery1: cqlQuery | cqlQuery error { cql_node_destroy($1.cql); $$.cql = 0; } ; cqlQuery: scopedClause | '>' searchTerm '=' searchTerm { $$.rel = $0.rel; } cqlQuery { $$.cql = cql_apply_prefix(((CQL_parser) parm)->nmem, $6.cql, $2.buf, $4.buf); } | '>' searchTerm { $$.rel = $0.rel; } cqlQuery { $$.cql = cql_apply_prefix(((CQL_parser) parm)->nmem, $4.cql, 0, $2.buf); } ; scopedClause: searchClause | scopedClause boolean modifiers { $$.rel = $0.rel; } searchClause { struct cql_node *cn = cql_node_mk_boolean(((CQL_parser) parm)->nmem, $2.buf); cn->u.boolean.modifiers = $3.cql; cn->u.boolean.left = $1.cql; cn->u.boolean.right = $5.cql; $$.cql = cn; } ; searchClause: '(' { $$.rel = $0.rel; } cqlQuery ')' { $$.cql = $3.cql; } | searchTerm extraTerms { struct cql_node *st = cql_node_dup(((CQL_parser) parm)->nmem, $0.rel); st->u.st.extra_terms = $2.cql; st->u.st.term = nmem_strdup(((CQL_parser)parm)->nmem, $1.buf); $$.cql = st; } | index relation modifiers { $$.rel = cql_node_mk_sc(((CQL_parser) parm)->nmem, $1.buf, $2.buf, 0); $$.rel->u.st.modifiers = $3.cql; } searchClause { $$.cql = $5.cql; cql_node_destroy($4.rel); } ; extraTerms: SIMPLE_STRING extraTerms { struct cql_node *st = cql_node_mk_sc(((CQL_parser) parm)->nmem, /* index */ 0, /* rel */ 0, $1.buf); st->u.st.extra_terms = $2.cql; $$.cql = st; } | { $$.cql = 0; } ; /* unary NOT search SIMPLE_STRING here .. */ boolean: AND | OR | NOT | PROX ; modifiers: modifiers '/' searchTerm { struct cql_node *mod = cql_node_mk_sc(((CQL_parser)parm)->nmem, $3.buf, 0, 0); mod->u.st.modifiers = $1.cql; $$.cql = mod; } | modifiers '/' searchTerm relation_symbol searchTerm { struct cql_node *mod = cql_node_mk_sc(((CQL_parser)parm)->nmem, $3.buf, $4.buf, $5.buf); mod->u.st.modifiers = $1.cql; $$.cql = mod; } | { $$.cql = 0; } ; relation: PREFIX_NAME | relation_symbol; relation_symbol: '=' | '>' | '<' | GE | LE | NE | EXACT ; index: searchTerm; searchTerm: SIMPLE_STRING | PREFIX_NAME | AND | OR | NOT | PROX | SORTBY ; %% int yyerror(void *locp, char *s) { return 0; } /** * putb is a utility that puts one character to the string * in current lexical token. This routine deallocates as * necessary using NMEM. */ static void putb(YYSTYPE *lval, CQL_parser cp, int c) { if (lval->len+1 >= lval->size) { char *nb = (char *) nmem_malloc(cp->nmem, (lval->size = lval->len * 2 + 20)); memcpy(nb, lval->buf, lval->len); lval->buf = nb; } if (c) lval->buf[lval->len++] = c; lval->buf[lval->len] = '\0'; } /** * yylex returns next token for Bison to be read. In this * case one of the CQL terminals are returned. */ int yylex(YYSTYPE *lval, void *vp) { CQL_parser cp = (CQL_parser) vp; int c; lval->cql = 0; lval->rel = 0; lval->len = 0; lval->size = 10; lval->buf = (char *) nmem_malloc(cp->nmem, lval->size); lval->buf[0] = '\0'; do { c = cp->getbyte(cp->client_data); if (c == 0) return 0; if (c == '\n') return 0; } while (yaz_isspace(c)); if (strchr("()=>getbyte(cp->client_data); if (c1 == '=') { putb(lval, cp, c1); return EXACT; } else cp->ungetbyte(c1, cp->client_data); } else if (c == '>') { c1 = cp->getbyte(cp->client_data); if (c1 == '=') { putb(lval, cp, c1); return GE; } else cp->ungetbyte(c1, cp->client_data); } else if (c == '<') { c1 = cp->getbyte(cp->client_data); if (c1 == '=') { putb(lval, cp, c1); return LE; } else if (c1 == '>') { putb(lval, cp, c1); return NE; } else cp->ungetbyte(c1, cp->client_data); } return c; } if (c == '"') { while ((c = cp->getbyte(cp->client_data)) != 0 && c != '"') { if (c == '\\') { putb(lval, cp, c); c = cp->getbyte(cp->client_data); if (!c) break; } putb(lval, cp, c); } putb(lval, cp, 0); return SIMPLE_STRING; } else { int relation_like = 0; while (c != 0 && !strchr(" \n()=<>/", c)) { if (c == '.') relation_like = 1; if (c == '\\') { putb(lval, cp, c); c = cp->getbyte(cp->client_data); if (!c) break; } putb(lval, cp, c); c = cp->getbyte(cp->client_data); } putb(lval, cp, 0); #if YYDEBUG printf ("got %s\n", lval->buf); #endif if (c != 0) cp->ungetbyte(c, cp->client_data); if (!cql_strcmp(lval->buf, "and")) { lval->buf = "and"; return AND; } if (!cql_strcmp(lval->buf, "or")) { lval->buf = "or"; return OR; } if (!cql_strcmp(lval->buf, "not")) { lval->buf = "not"; return NOT; } if (!cql_strcmp(lval->buf, "prox")) { lval->buf = "prox"; return PROX; } if (!cql_strcmp(lval->buf, "sortby")) { lval->buf = "sortby"; return SORTBY; } if (cp->strict) return PREFIX_NAME; if (!cql_strcmp(lval->buf, "all")) relation_like = 1; if (!cql_strcmp(lval->buf, "any")) relation_like = 1; if (!cql_strcmp(lval->buf, "adj")) relation_like = 1; if (relation_like) return PREFIX_NAME; } return SIMPLE_STRING; } int cql_parser_stream(CQL_parser cp, int (*getbyte)(void *client_data), void (*ungetbyte)(int b, void *client_data), void *client_data) { nmem_reset(cp->nmem); cp->getbyte = getbyte; cp->ungetbyte = ungetbyte; cp->client_data = client_data; cql_node_destroy(cp->top); cql_parse(cp); if (cp->top) return 0; return -1; } CQL_parser cql_parser_create(void) { CQL_parser cp = (CQL_parser) xmalloc(sizeof(*cp)); cp->top = 0; cp->getbyte = 0; cp->ungetbyte = 0; cp->client_data = 0; cp->last_error = 0; cp->last_pos = 0; cp->nmem = nmem_create(); cp->strict = 0; return cp; } void cql_parser_destroy(CQL_parser cp) { cql_node_destroy(cp->top); nmem_destroy(cp->nmem); xfree (cp); } struct cql_node *cql_parser_result(CQL_parser cp) { return cp->top; } void cql_parser_strict(CQL_parser cp, int mode) { cp->strict = mode; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/tcpdchk.c0000644000175000017500000000471213265142510011710 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file tcpdchk.c * \brief Implements TCP WRAPPER check. */ #if HAVE_CONFIG_H #include #endif #include #include #ifdef WIN32 #include #endif #if HAVE_SYS_TYPES_H #include #endif #if HAVE_NETINET_IN_H #include #endif #if HAVE_ARPA_INET_H #include #endif #if HAVE_SYS_SOCKET_H /* freebsd wants this for AF_INET */ #include #endif #if HAVE_NETDB_H #include #endif #include #include #include #if HAVE_TCPD_H #include #include int allow_severity = LOG_INFO; /* not YLOG !! */ int deny_severity = LOG_WARNING; #endif int check_ip_tcpd(void *cd, const char *addr, int len, int type) { const char *daemon_name = (const char *) cd; if (type == AF_INET) { if (daemon_name && *daemon_name) { #if HAVE_TCPD_H struct request_info request_info; int i; char *host_name = 0, *host_addr = 0; struct hostent *host; struct sockaddr_in *addr_in = (struct sockaddr_in *) addr; if ((host = gethostbyaddr((char*)&addr_in->sin_addr, sizeof(addr_in->sin_addr), AF_INET))) host_name = (char*) host->h_name; host_addr = inet_ntoa(addr_in->sin_addr); if (host_addr && host_name) request_init(&request_info, RQ_DAEMON, daemon_name, RQ_CLIENT_NAME, host_name, RQ_CLIENT_SIN, addr_in, RQ_CLIENT_ADDR, host_addr, 0); else request_init(&request_info, RQ_DAEMON, daemon_name, RQ_CLIENT_SIN, addr_in, 0); i = hosts_access(&request_info); if (!i) { yaz_log(YLOG_DEBUG, "access denied from %s", host_name ? host_name : host_addr); return 1; } yaz_log(YLOG_DEBUG, "access granted from %s", host_name ? host_name : host_addr); #endif } } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/grs1disp.c0000644000175000017500000001000513265142510012014 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file grs1disp.c * \brief Implements display of GRS-1 records */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static void display_variant(WRBUF w, Z_Variant *v, int level) { int i; for (i = 0; i < v->num_triples; i++) { wrbuf_printf(w, "%*sclass=" ODR_INT_PRINTF ",type=" ODR_INT_PRINTF, level * 4, "", *v->triples[i]->zclass, *v->triples[i]->type); if (v->triples[i]->which == Z_Triple_internationalString) wrbuf_printf(w, ",value=%s\n", v->triples[i]->value.internationalString); else wrbuf_printf(w, "\n"); } } static void display_grs1(WRBUF w, Z_GenericRecord *r, int level) { int i; if (!r) { return; } for (i = 0; i < r->num_elements; i++) { Z_TaggedElement *t; wrbuf_printf(w, "%*s", level * 4, ""); t = r->elements[i]; wrbuf_printf(w, "("); if (t->tagType) wrbuf_printf(w, ODR_INT_PRINTF ",", *t->tagType); else wrbuf_printf(w, "?,"); if (t->tagValue->which == Z_StringOrNumeric_numeric) wrbuf_printf(w, ODR_INT_PRINTF ") ", *t->tagValue->u.numeric); else wrbuf_printf(w, "%s) ", t->tagValue->u.string); if (t->content->which == Z_ElementData_subtree) { if (!t->content->u.subtree) printf (" (no subtree)\n"); else { wrbuf_printf(w, "\n"); display_grs1(w, t->content->u.subtree, level+1); } } else if (t->content->which == Z_ElementData_string) { wrbuf_puts(w, t->content->u.string); wrbuf_puts(w, "\n"); } else if (t->content->which == Z_ElementData_numeric) { wrbuf_printf(w, ODR_INT_PRINTF "\n", *t->content->u.numeric); } else if (t->content->which == Z_ElementData_oid) { Odr_oid *ip = t->content->u.oid; if (ip) { char oid_name_str[OID_STR_MAX]; oid_class oclass; const char *oid_name = yaz_oid_to_string_buf(ip, &oclass, oid_name_str); if (oid_name) wrbuf_printf(w, "OID: %s\n", oid_name); } } else if (t->content->which == Z_ElementData_noDataRequested) wrbuf_printf(w, "[No data requested]\n"); else if (t->content->which == Z_ElementData_elementEmpty) wrbuf_printf(w, "[Element empty]\n"); else if (t->content->which == Z_ElementData_elementNotThere) wrbuf_printf(w, "[Element not there]\n"); else if (t->content->which == Z_ElementData_date) wrbuf_printf(w, "Date: %s\n", t->content->u.date); else if (t->content->which == Z_ElementData_ext) { printf ("External\n"); /* we cannot print externals here. Srry */ } else wrbuf_printf(w, "? type = %d\n",t->content->which); if (t->appliedVariant) display_variant(w, t->appliedVariant, level+1); if (t->metaData && t->metaData->supportedVariants) { int c; wrbuf_printf(w, "%*s---- variant list\n", (level+1)*4, ""); for (c = 0; c < t->metaData->num_supportedVariants; c++) { wrbuf_printf(w, "%*svariant #%d\n", (level+1)*4, "", c); display_variant(w, t->metaData->supportedVariants[c], level+2); } } } } void yaz_display_grs1(WRBUF wrbuf, Z_GenericRecord *r, int flags) { display_grs1(wrbuf, r, 0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/xml_match.c0000644000175000017500000001023213265142510012236 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file xml_match.c * \brief XML node inspection utilities */ #if HAVE_CONFIG_H #include #endif #include #if YAZ_HAVE_XML2 #include "sru-p.h" int yaz_match_xsd_element(xmlNodePtr ptr, const char *elem) { if (ptr && ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST elem)) { return 1; } return 0; } #define CHECK_TYPE 0 int yaz_match_xsd_string_n_nmem(xmlNodePtr ptr, const char *elem, NMEM nmem, char **val, int *len) { #if CHECK_TYPE struct _xmlAttr *attr; #endif if (!yaz_match_xsd_element(ptr, elem)) return 0; #if CHECK_TYPE for (attr = ptr->properties; attr; attr = attr->next) if (!strcmp(attr->name, "type") && attr->children && attr->children->type == XML_TEXT_NODE) { const char *t = strchr(attr->children->content, ':'); if (t) t = t + 1; else t = attr->children->content; if (!strcmp(t, "string")) break; } if (!attr) return 0; #endif ptr = ptr->children; if (!ptr || ptr->type != XML_TEXT_NODE) { *val = ""; return 1; } *val = nmem_strdup(nmem, (const char *) ptr->content); if (len) *len = xmlStrlen(ptr->content); return 1; } int yaz_match_xsd_string_n(xmlNodePtr ptr, const char *elem, ODR o, char **val, int *len) { return yaz_match_xsd_string_n_nmem(ptr, elem, o->mem, val, len); } int yaz_match_xsd_string(xmlNodePtr ptr, const char *elem, ODR o, char **val) { return yaz_match_xsd_string_n(ptr, elem, o, val, 0); } int yaz_match_xsd_XML_n2(xmlNodePtr ptr, const char *elem, ODR o, char **val, int *len, int fixup_root) { xmlBufferPtr buf; int no_root_nodes = 0; if (!yaz_match_xsd_element(ptr, elem)) return 0; buf = xmlBufferCreate(); /* Copy each element nodes at top. In most cases there is only one root node.. At least one server http://www.theeuropeanlibrary.org/sru/sru.pl has multiple root nodes in recordData. */ for (ptr = ptr->children; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE) { /* copy node to get NS right (bug #740). */ xmlNode *tmp = xmlCopyNode(ptr, 1); xmlNodeDump(buf, tmp->doc, tmp, 0, 0); xmlFreeNode(tmp); no_root_nodes++; } } if (no_root_nodes != 1 && fixup_root) { /* does not appear to be an XML document. Make it so */ xmlBufferAddHead(buf, (const xmlChar *) "", -1); xmlBufferAdd(buf, (const xmlChar *) "", -1); } *val = odr_strdupn(o, (const char *) buf->content, buf->use); if (len) *len = buf->use; xmlBufferFree(buf); return 1; } int yaz_match_xsd_XML_n(xmlNodePtr ptr, const char *elem, ODR o, char **val, int *len) { return yaz_match_xsd_XML_n2(ptr, elem, o, val, len, 0); } int yaz_match_xsd_integer(xmlNodePtr ptr, const char *elem, ODR o, Odr_int **val) { #if CHECK_TYPE struct _xmlAttr *attr; #endif if (!yaz_match_xsd_element(ptr, elem)) return 0; #if CHECK_TYPE for (attr = ptr->properties; attr; attr = attr->next) if (!strcmp(attr->name, "type") && attr->children && attr->children->type == XML_TEXT_NODE) { const char *t = strchr(attr->children->content, ':'); if (t) t = t + 1; else t = attr->children->content; if (!strcmp(t, "integer")) break; } if (!attr) return 0; #endif ptr = ptr->children; if (!ptr || ptr->type != XML_TEXT_NODE) return 0; *val = odr_intdup(o, odr_atoi((const char *) ptr->content)); return 1; } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_oid.c0000644000175000017500000000252213265142510011704 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_oid.c * \brief Implements ODR OID codec */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" /* * Top level oid en/decoder. * Returns 1 on success, 0 on error. */ int odr_oid(ODR o, Odr_oid **p, int opt, const char *name) { int res, cons = 0; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_OID; } res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name); if (res < 0) return 0; if (!res) return odr_missing(o, opt, name); if (cons) { odr_seterror(o, OPROTO, 46); return 0; } if (o->direction == ODR_PRINT) { int i; odr_prname(o, name); odr_printf(o, "OID:"); for (i = 0; (*p)[i] > -1; i++) odr_printf(o, " %d", (*p)[i]); odr_printf(o, "\n"); return 1; } if (o->direction == ODR_DECODE) *p = (Odr_oid *)odr_malloc(o, OID_SIZE * sizeof(**p)); return ber_oidc(o, *p, OID_SIZE); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zoom-query.c0000644000175000017500000002365613265142510012427 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zoom-query.c * \brief Implements ZOOM C query interface. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "zoom-p.h" #include #include #include #include #include #include #include #define SORT_STRATEGY_Z3950 0 #define SORT_STRATEGY_TYPE7 1 #define SORT_STRATEGY_CQL 2 #define SORT_STRATEGY_SRU11 3 #define SORT_STRATEGY_EMBED 4 #define SORT_STRATEGY_SOLR 5 struct ZOOM_query_p { Z_Query *z_query; int sort_strategy; Z_SortKeySpecList *sort_spec; int refcount; ODR odr_sort_spec; ODR odr_query; int query_type; char *query_string; WRBUF full_query; WRBUF sru11_sort_spec; }; static int generate(ZOOM_query s) { if (s->query_string) { Z_External *ext; wrbuf_rewind(s->full_query); wrbuf_puts(s->full_query, s->query_string); odr_reset(s->odr_query); if (s->sort_spec && (s->sort_strategy == SORT_STRATEGY_SRU11 || s->sort_strategy == SORT_STRATEGY_SOLR)) { int r = 0; wrbuf_rewind(s->sru11_sort_spec); switch (s->sort_strategy) { case SORT_STRATEGY_SRU11: r = yaz_sort_spec_to_srw_sortkeys(s->sort_spec, s->sru11_sort_spec); break; case SORT_STRATEGY_SOLR: r = yaz_sort_spec_to_solr_sortkeys(s->sort_spec, s->sru11_sort_spec); break; } if (r) return r; } switch (s->query_type) { case Z_Query_type_1: /* RPN */ if (s->sort_spec && (s->sort_strategy == SORT_STRATEGY_TYPE7 || s->sort_strategy == SORT_STRATEGY_EMBED)) { int r = yaz_sort_spec_to_type7(s->sort_spec, s->full_query); if (r) return r; } s->z_query = (Z_Query *) odr_malloc(s->odr_query, sizeof(*s->z_query)); s->z_query->which = Z_Query_type_1; s->z_query->u.type_1 = p_query_rpn(s->odr_query, wrbuf_cstr(s->full_query)); if (!s->z_query->u.type_1) { s->z_query = 0; return -1; } break; case Z_Query_type_104: /* CQL */ if (s->sort_spec && (s->sort_strategy == SORT_STRATEGY_CQL || s->sort_strategy == SORT_STRATEGY_EMBED)) { int r = yaz_sort_spec_to_cql(s->sort_spec, s->full_query); if (r) return r; } ext = (Z_External *) odr_malloc(s->odr_query, sizeof(*ext)); ext->direct_reference = odr_oiddup(s->odr_query, yaz_oid_userinfo_cql); ext->indirect_reference = 0; ext->descriptor = 0; ext->which = Z_External_CQL; ext->u.cql = odr_strdup(s->odr_query, wrbuf_cstr(s->full_query)); s->z_query = (Z_Query *) odr_malloc(s->odr_query, sizeof(*s->z_query)); s->z_query->which = Z_Query_type_104; s->z_query->u.type_104 = ext; break; } } return 0; } const char *ZOOM_query_get_sru11(ZOOM_query s) { if (wrbuf_len(s->sru11_sort_spec)) return wrbuf_cstr(s->sru11_sort_spec); return 0; } Z_Query *ZOOM_query_get_Z_Query(ZOOM_query s) { return s->z_query; } Z_SortKeySpecList *ZOOM_query_get_sortspec(ZOOM_query s) { return s->sort_strategy == SORT_STRATEGY_Z3950 ? s->sort_spec : 0; } const char *ZOOM_query_get_query_string(ZOOM_query s) { return wrbuf_cstr(s->full_query); } void ZOOM_query_get_hash(ZOOM_query s, WRBUF w) { wrbuf_printf(w, "%d;", s->query_type); if (s->query_string) wrbuf_puts(w, s->query_string); wrbuf_printf(w, ";%d;", s->sort_strategy); if (s->sort_spec) yaz_sort_spec_to_type7(s->sort_spec, w); } /* * Returns an xmalloc()d string containing RPN that corresponds to the * CQL passed in. On error, sets the Connection object's error state * and returns a null pointer. * ### We could cache CQL parser and/or transformer in Connection. */ static char *cql2pqf(ZOOM_connection c, const char *cql) { CQL_parser parser; int error; const char *cqlfile; cql_transform_t trans; char *result = 0; parser = cql_parser_create(); if ((error = cql_parser_string(parser, cql)) != 0) { cql_parser_destroy(parser); ZOOM_set_error(c, ZOOM_ERROR_CQL_PARSE, cql); return 0; } cqlfile = ZOOM_connection_option_get(c, "cqlfile"); if (cqlfile == 0) { ZOOM_set_error(c, ZOOM_ERROR_CQL_TRANSFORM, "no CQL transform file"); } else if ((trans = cql_transform_open_fname(cqlfile)) == 0) { char buf[512]; sprintf(buf, "can't open CQL transform file '%.200s': %.200s", cqlfile, strerror(errno)); ZOOM_set_error(c, ZOOM_ERROR_CQL_TRANSFORM, buf); } else { WRBUF wrbuf_result = wrbuf_alloc(); error = cql_transform(trans, cql_parser_result(parser), wrbuf_vp_puts, wrbuf_result); if (error != 0) { char buf[512]; const char *addinfo; error = cql_transform_error(trans, &addinfo); sprintf(buf, "%.200s (addinfo=%.200s)", cql_strerror(error), addinfo); ZOOM_set_error(c, ZOOM_ERROR_CQL_TRANSFORM, buf); } else { result = xstrdup(wrbuf_cstr(wrbuf_result)); } cql_transform_close(trans); wrbuf_destroy(wrbuf_result); } cql_parser_destroy(parser); return result; } ZOOM_API(ZOOM_query) ZOOM_query_create(void) { ZOOM_query s = (ZOOM_query) xmalloc(sizeof(*s)); s->refcount = 1; s->z_query = 0; s->sort_spec = 0; s->odr_query = odr_createmem(ODR_ENCODE); s->odr_sort_spec = odr_createmem(ODR_ENCODE); s->query_string = 0; s->full_query = wrbuf_alloc(); s->sort_strategy = SORT_STRATEGY_Z3950; s->sru11_sort_spec = wrbuf_alloc(); return s; } ZOOM_API(void) ZOOM_query_destroy(ZOOM_query s) { if (!s) return; (s->refcount)--; if (s->refcount == 0) { odr_destroy(s->odr_query); odr_destroy(s->odr_sort_spec); xfree(s->query_string); wrbuf_destroy(s->full_query); wrbuf_destroy(s->sru11_sort_spec); xfree(s); } } ZOOM_API(void) ZOOM_query_addref(ZOOM_query s) { s->refcount++; } ZOOM_API(int) ZOOM_query_prefix(ZOOM_query s, const char *str) { xfree(s->query_string); s->query_string = xstrdup(str); s->query_type = Z_Query_type_1; return generate(s); } ZOOM_API(int) ZOOM_query_cql(ZOOM_query s, const char *str) { xfree(s->query_string); s->query_string = xstrdup(str); s->query_type = Z_Query_type_104; return generate(s); } /* * Translate the CQL string client-side into RPN which is passed to * the server. This is useful for server's that don't themselves * support CQL, for which ZOOM_query_cql() is useless. `conn' is used * only as a place to stash diagnostics if compilation fails; if this * information is not needed, a null pointer may be used. */ ZOOM_API(int) ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn) { char *rpn; int ret; ZOOM_connection freeme = 0; if (conn == 0) conn = freeme = ZOOM_connection_create(0); rpn = cql2pqf(conn, str); if (freeme != 0) ZOOM_connection_destroy(freeme); if (rpn == 0) return -1; ret = ZOOM_query_prefix(s, rpn); xfree(rpn); return ret; } /* * Analogous in every way to ZOOM_query_cql2rpn(), except that there * is no analogous ZOOM_query_ccl() that just sends uninterpreted CCL * to the server, as the YAZ GFS doesn't know how to handle this. */ ZOOM_API(int) ZOOM_query_ccl2rpn(ZOOM_query s, const char *str, const char *config, int *ccl_error, const char **error_string, int *error_pos) { int ret; struct ccl_rpn_node *rpn; CCL_bibset bibset = ccl_qual_mk(); if (config) ccl_qual_buf(bibset, config); rpn = ccl_find_str(bibset, str, ccl_error, error_pos); if (!rpn) { *error_string = ccl_err_msg(*ccl_error); ret = -1; } else { WRBUF wr = wrbuf_alloc(); ccl_pquery(wr, rpn); ccl_rpn_delete(rpn); ret = ZOOM_query_prefix(s, wrbuf_cstr(wr)); wrbuf_destroy(wr); } ccl_qual_rm(&bibset); return ret; } ZOOM_API(int) ZOOM_query_sortby(ZOOM_query s, const char *criteria) { return ZOOM_query_sortby2(s, "z3950", criteria); } ZOOM_API(int) ZOOM_query_sortby2(ZOOM_query s, const char *strategy, const char *criteria) { if (!strcmp(strategy, "z3950")) { s->sort_strategy = SORT_STRATEGY_Z3950; } else if (!strcmp(strategy, "type7")) { s->sort_strategy = SORT_STRATEGY_TYPE7; } else if (!strcmp(strategy, "cql")) { s->sort_strategy = SORT_STRATEGY_CQL; } else if (!strcmp(strategy, "sru11")) { s->sort_strategy = SORT_STRATEGY_SRU11; } else if (!strcmp(strategy, "solr")) { s->sort_strategy = SORT_STRATEGY_SOLR; } else if (!strcmp(strategy, "embed")) { s->sort_strategy = SORT_STRATEGY_EMBED; } else return -1; odr_reset(s->odr_sort_spec); s->sort_spec = yaz_sort_spec(s->odr_sort_spec, criteria); if (!s->sort_spec) return -2; return generate(s); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/icu_casemap.c0000644000175000017500000000776713265142510012556 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief ICU character case (u_strToUpper, etc) */ #if HAVE_CONFIG_H #include "config.h" #endif #if YAZ_HAVE_ICU #include #include #include #include #include #include #include struct icu_casemap { char action; }; struct icu_casemap *icu_casemap_create(char action, UErrorCode *status) { struct icu_casemap *casemap = (struct icu_casemap *) xmalloc(sizeof(struct icu_casemap)); casemap->action = action; switch (casemap->action) { case 'l': case 'L': case 'u': case 'U': case 't': case 'T': case 'f': case 'F': break; default: icu_casemap_destroy(casemap); return 0; } return casemap; } struct icu_casemap *icu_casemap_clone(struct icu_casemap *old) { struct icu_casemap * casemap = (struct icu_casemap *) xmalloc(sizeof(struct icu_casemap)); casemap->action = old->action; return casemap; } void icu_casemap_destroy(struct icu_casemap * casemap) { xfree(casemap); } int icu_casemap_casemap(struct icu_casemap *casemap, struct icu_buf_utf16 *dest16, struct icu_buf_utf16 *src16, UErrorCode *status, const char *locale) { if (!casemap) return 0; return icu_utf16_casemap(dest16, src16, locale, casemap->action, status); } static uint32_t icu_utf16_sub(struct icu_buf_utf16 *dest16, struct icu_buf_utf16 *src16, const char *locale, char action, UErrorCode *status) { switch (action) { case 'l': case 'L': return u_strToLower(dest16->utf16, dest16->utf16_cap, src16->utf16, src16->utf16_len, locale, status); case 'u': case 'U': return u_strToUpper(dest16->utf16, dest16->utf16_cap, src16->utf16, src16->utf16_len, locale, status); break; case 't': case 'T': return u_strToTitle(dest16->utf16, dest16->utf16_cap, src16->utf16, src16->utf16_len, 0, locale, status); break; case 'f': case 'F': return u_strFoldCase(dest16->utf16, dest16->utf16_cap, src16->utf16, src16->utf16_len, U_FOLD_CASE_DEFAULT, status); break; default: *status = U_UNSUPPORTED_ERROR; break; } return 0; } int icu_utf16_casemap(struct icu_buf_utf16 *dest16, struct icu_buf_utf16 *src16, const char *locale, char action, UErrorCode *status) { int32_t dest16_len = 0; if (!src16->utf16_len) { /* guarding for empty source string */ if (dest16->utf16) dest16->utf16[0] = (UChar) 0; dest16->utf16_len = 0; return U_ZERO_ERROR; } dest16_len = icu_utf16_sub(dest16, src16, locale, action, status); /* check for buffer overflow, resize and retry */ if (*status == U_BUFFER_OVERFLOW_ERROR && dest16 != src16) /* do not resize if in-place conversion */ { icu_buf_utf16_resize(dest16, dest16_len * 2); *status = U_ZERO_ERROR; icu_utf16_sub(dest16, src16, locale, action, status); } if (U_SUCCESS(*status) && dest16_len <= dest16->utf16_cap) dest16->utf16_len = dest16_len; else { if (dest16->utf16) dest16->utf16[0] = (UChar) 0; dest16->utf16_len = 0; } return *status; } #endif /* YAZ_HAVE_ICU */ /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/retrieval.c0000644000175000017500000003023113570007121012255 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file retrieval.c * \brief Retrieval utility */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include #include /** \brief The internal structure for yaz_retrieval_t */ struct yaz_retrieval_struct { /** \brief ODR memory for configuration */ ODR odr; /** \brief odr's NMEM memory (odr->mem) */ NMEM nmem; /** \brief string buffer for error messages */ WRBUF wr_error; /** \brief path for opening files */ char *path; /** \brief retrieval list */ struct yaz_retrieval_elem *list; /** \brief last pointer in retrieval list */ struct yaz_retrieval_elem **list_p; }; /** \brief information per 'retrieval' construct */ struct yaz_retrieval_elem { /** \brief schema identifier */ const char *identifier; /** \brief schema name , short-hand such as "dc" */ const char *name; /** \brief record syntax */ Odr_oid *syntax; /** \brief split name for some separator */ const char *split; /** \brief backend name */ const char *backend_name; /** \brief backend syntax */ Odr_oid *backend_syntax; /** \brief record conversion */ yaz_record_conv_t record_conv; /** \brief next element in list */ struct yaz_retrieval_elem *next; }; static void yaz_retrieval_reset(yaz_retrieval_t p); yaz_retrieval_t yaz_retrieval_create() { yaz_retrieval_t p = (yaz_retrieval_t) xmalloc(sizeof(*p)); p->odr = odr_createmem(ODR_ENCODE); p->nmem = odr_getmem(p->odr); p->wr_error = wrbuf_alloc(); p->list = 0; p->path = 0; yaz_retrieval_reset(p); return p; } void yaz_retrieval_destroy(yaz_retrieval_t p) { if (p) { yaz_retrieval_reset(p); odr_destroy(p->odr); wrbuf_destroy(p->wr_error); xfree(p->path); xfree(p); } } void yaz_retrieval_reset(yaz_retrieval_t p) { struct yaz_retrieval_elem *el = p->list; for(; el; el = el->next) yaz_record_conv_destroy(el->record_conv); wrbuf_rewind(p->wr_error); odr_reset(p->odr); p->list = 0; p->list_p = &p->list; } /** \brief parse retrieval XML config */ static int conf_retrieval(yaz_retrieval_t p, const xmlNode *ptr, struct yaz_record_conv_type *types) { struct _xmlAttr *attr; struct yaz_retrieval_elem *el = (struct yaz_retrieval_elem *) nmem_malloc(p->nmem, sizeof(*el)); el->syntax = 0; el->identifier = 0; el->name = 0; el->split = 0; el->backend_name = 0; el->backend_syntax = 0; el->next = 0; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "syntax") && attr->children && attr->children->type == XML_TEXT_NODE) { el->syntax = yaz_string_to_oid_odr( yaz_oid_std(), CLASS_RECSYN, (const char *) attr->children->content, p->odr); if (!el->syntax) { wrbuf_printf(p->wr_error, "Element : " " unknown attribute value syntax='%s'", (const char *) attr->children->content); return -1; } } else if (!xmlStrcmp(attr->name, BAD_CAST "identifier") && attr->children && attr->children->type == XML_TEXT_NODE) el->identifier = nmem_strdup(p->nmem, (const char *) attr->children->content); else if (!xmlStrcmp(attr->name, BAD_CAST "name") && attr->children && attr->children->type == XML_TEXT_NODE) el->name = nmem_strdup(p->nmem, (const char *) attr->children->content); else if (!xmlStrcmp(attr->name, BAD_CAST "split") && attr->children && attr->children->type == XML_TEXT_NODE) el->split = nmem_strdup(p->nmem, (const char *) attr->children->content); else { wrbuf_printf(p->wr_error, "Element : " " expected attributes 'syntax', identifier' or " "'name', got '%s'", attr->name); return -1; } } if (!el->syntax) { wrbuf_printf(p->wr_error, "Missing 'syntax' attribute"); return -1; } /* parsing backend element */ el->record_conv = 0; /* OK to have no 'backend' sub content */ for (ptr = ptr->children; ptr; ptr = ptr->next) { if (ptr->type != XML_ELEMENT_NODE) continue; if (strcmp((const char *) ptr->name, "backend")) { wrbuf_printf(p->wr_error, "Element : expected" " zero or one element , got <%s>", (const char *) ptr->name); return -1; } else { struct _xmlAttr *attr; if (el->record_conv) { wrbuf_printf(p->wr_error, "Element : " "only one allowed"); yaz_record_conv_destroy(el->record_conv); return -1; } /* parsing attributees */ for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "name") && attr->children && attr->children->type == XML_TEXT_NODE) el->backend_name = nmem_strdup(p->nmem, (const char *) attr->children->content); else if (!xmlStrcmp(attr->name, BAD_CAST "syntax") && attr->children && attr->children->type == XML_TEXT_NODE) { el->backend_syntax = yaz_string_to_oid_odr( yaz_oid_std(), CLASS_RECSYN, (const char *) attr->children->content, p->odr); if (!el->backend_syntax) { wrbuf_printf(p->wr_error, "Element : " "attribute 'syntax' has invalid " "value '%s'", attr->children->content, attr->children->content); return -1; } } else { wrbuf_printf(p->wr_error, "Element : expected " "attributes 'syntax' or 'name, got '%s'", attr->name); return -1; } } /* parsing internal of record conv */ el->record_conv = yaz_record_conv_create(); yaz_record_conv_set_path(el->record_conv, p->path); if (yaz_record_conv_configure_t(el->record_conv, ptr, types)) { wrbuf_printf(p->wr_error, "%s", yaz_record_conv_get_error(el->record_conv)); yaz_record_conv_destroy(el->record_conv); return -1; } } } *p->list_p = el; p->list_p = &el->next; return 0; } int yaz_retrieval_configure_t(yaz_retrieval_t p, const xmlNode *ptr, struct yaz_record_conv_type *types) { yaz_retrieval_reset(p); if (ptr && ptr->type == XML_ELEMENT_NODE && !strcmp((const char *) ptr->name, "retrievalinfo")) { for (ptr = ptr->children; ptr; ptr = ptr->next) { if (ptr->type != XML_ELEMENT_NODE) continue; if (!strcmp((const char *) ptr->name, "retrieval")) { if (conf_retrieval(p, ptr, types)) return -1; } else { wrbuf_printf(p->wr_error, "Element : " "expected element , got <%s>", ptr->name); return -1; } } } else { wrbuf_printf(p->wr_error, "Expected element "); return -1; } return 0; } int yaz_retrieval_configure(yaz_retrieval_t p, const xmlNode *ptr) { return yaz_retrieval_configure_t(p, ptr, 0); } int yaz_retrieval_request(yaz_retrieval_t p, const char *schema, const Odr_oid *syntax, const char **match_schema, Odr_oid **match_syntax, yaz_record_conv_t *rc, const char **backend_schema, Odr_oid **backend_syntax) { struct yaz_retrieval_elem *el = p->list; int syntax_matches = 0; int schema_matches = 0; struct yaz_retrieval_elem *el_best = 0; WRBUF w = 0; if (!el) return 0; w = wrbuf_alloc(); for (; el; el = el->next) { int schema_ok = 0; int syntax_ok = 0; if (!schema) schema_ok = 1; else { char *cp = 0; wrbuf_rewind(w); if (el->split && *el->split && (cp = strchr(schema, *el->split))) wrbuf_write(w, schema, cp - schema); else wrbuf_puts(w, schema); if (el->name && yaz_match_glob2(el->name, wrbuf_cstr(w), 1)) schema_ok = 2; if (el->identifier && !strcmp(schema, el->identifier)) schema_ok = 2; if (!el->name && !el->identifier) schema_ok = 1; } if (syntax && el->syntax && !oid_oidcmp(syntax, el->syntax)) syntax_ok = 1; if (!syntax) syntax_ok = 1; if (syntax_ok) syntax_matches++; if (schema_ok) schema_matches++; if (syntax_ok && schema_ok) { if (!el_best || schema_ok == 2) el_best = el; } } if (el_best) { el = el_best; *match_syntax = el->syntax; if (el->identifier) *match_schema = el->identifier; else *match_schema = 0; if (backend_schema) { if (el->backend_name) { if (*el->backend_name) { char *cp; wrbuf_rewind(w); wrbuf_puts(w, el->backend_name); if (el->split && *el->split && schema && (cp = strchr(schema, *el->split))) { wrbuf_puts(w, cp); } *backend_schema = wrbuf_cstr(w); } } else *backend_schema = schema; } if (backend_syntax) { if (el->backend_syntax) *backend_syntax = el->backend_syntax; else *backend_syntax = el->syntax; } if (rc) *rc = el->record_conv; return 0; } if (!syntax_matches && syntax) { char buf[OID_STR_MAX]; wrbuf_printf(p->wr_error, "%s", oid_oid_to_dotstring(syntax, buf)); return 2; } if (schema) wrbuf_printf(p->wr_error, "%s", schema); if (!schema_matches) return 1; return 3; } const char *yaz_retrieval_get_error(yaz_retrieval_t p) { return wrbuf_cstr(p->wr_error); } void yaz_retrieval_set_path(yaz_retrieval_t p, const char *path) { xfree(p->path); p->path = 0; if (path) p->path = xstrdup(path); } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_use.c0000644000175000017500000000431213265142510011724 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_use.c * \brief Implements misc ODR types. */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" int odr_external(ODR o, Odr_external **p, int opt, const char *name) { Odr_external *pp; static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 0, ODR_EXTERNAL_single, (Odr_fun)odr_any, "single"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, ODR_EXTERNAL_octet, (Odr_fun)odr_octetstring, "octet"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, ODR_EXTERNAL_arbitrary, (Odr_fun)odr_bitstring, "arbitrary"}, {-1, -1, -1, -1, 0, 0} }; odr_implicit_settag(o, ODR_UNIVERSAL, ODR_EXTERNAL); if (!odr_sequence_begin(o, p, sizeof(Odr_external), name)) return odr_missing(o, opt, name); pp = *p; return odr_oid(o, &pp->direct_reference, 1, "direct") && odr_integer(o, &pp->indirect_reference, 1, "indirect") && odr_graphicstring(o, &pp->descriptor, 1, "descriptor") && odr_choice(o, arm, &pp->u, &pp->which, 0) && odr_sequence_end(o); } int odr_visiblestring(ODR o, char **p, int opt, const char *name) { return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL, ODR_VISIBLESTRING, opt, name); } /* * a char may not be sufficient to hold a general string, but we'll deal * with that once we start looking more closely at UniCode & co. */ int odr_generalstring(ODR o, char **p, int opt, const char *name) { return odr_implicit_tag(o, odr_iconv_string, p, ODR_UNIVERSAL, ODR_GENERALSTRING,opt, name); } int odr_graphicstring(ODR o, char **p, int opt, const char *name) { return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL, ODR_GRAPHICSTRING, opt, name); } int odr_generalizedtime(ODR o, char **p, int opt, const char *name) { return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL, ODR_GENERALIZEDTIME, opt, name); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/mterm2.asn0000644000175000017500000000047213250277530012041 00000000000000UserInfoFormat-multipleSearchTerms-2 {Z39-50-userInfoFormat MultipleSearchTerms-2 (5)} DEFINITIONS ::= BEGIN IMPORTS Term FROM Z39-50-APDU-1995; MultipleSearchTerms-2 ::= SEQUENCE OF SEQUENCE{ term [1] Term, flag [2] IMPLICIT BOOLEAN OPTIONAL} END yaz-5.28.0/src/diag_map.c0000644000175000017500000000740513265142510012033 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file diag_map.c * \brief Implements SRU/Z39.50 diagnostic mappings */ #if HAVE_CONFIG_H #include #endif #include #include #include /* bib1:srw */ static int bib1_srw_map[] = { 1, 1, 2, 2, 3, 48, 4, 35, 5, 12, 6, 38, 7, 30, 8, 32, 9, 29, 10, 10, 11, 12, 11, 23, 12, 60, 13, 61, 13, 62, 14, 63, 14, 64, 14, 65, 15, 68, 15, 69, 16, 70, 17, 70, 18, 50, 19, 55, 20, 56, 21, 52, 22, 50, 23, 3, 24, 66, 25, 66, 26, 66, 27, 51, 28, 52, 29, 52, 30, 51, 31, 57, 32, 58, 33, 59, 100, 1, /* bad map */ 101, 3, 102, 3, 103, 3, 104, 3, 105, 3, 106, 66, 107, 11, 108, 10, 108, 13, 108, 14, 108, 25, 108, 26, 108, 27, 108, 45, 109, 235, 110, 37, 111, 1, 112, 58, 113, 10, 114, 16, 115, 16, 116, 16, 117, 19, 117, 20, 118, 22, 119, 32, 119, 31, 120, 28, 121, 15, 122, 32, 123, 22, 123, 17, 123, 18, 124, 24, 125, 36, 126, 36, 127, 36, 128, 51, 129, 39, 130, 43, 131, 40, 132, 42, 201, 44, 201, 33, 201, 34, 202, 41, 203, 43, 205, 1, /* bad map */ 206, 1, /* bad map */ 207, 89, 208, 1, /* bad map */ 209, 80, 210, 80, 210, 81, 211, 84, 212, 85, 213, 92, 214, 90, 215, 91, 216, 92, 217, 63, 218, 1, /* bad map */ 219, 1, /* bad map */ 220, 1, /* bad map */ 221, 1, /* bad map */ 222, 3, 223, 1, /* bad map */ 224, 1, /* bad map */ 225, 1, /* bad map */ 226, 1, /* bad map */ 227, 66, 228, 1, /* bad map */ 229, 36, 230, 83, 231, 89, 232, 1, 233, 1, /* bad map */ 234, 1, /* bad map */ 235, 235, 236, 236, 237, 82, 238, 67, 239, 66, 240, 1, /* bad map */ 241, 1, /* bad map */ 242, 70, 243, 1, /* bad map */ 244, 66, 245, 10, 246, 10, 247, 10, 1001, 1, /* bad map */ 1002, 1, /* bad map */ 1003, 1, /* bad map */ 1004, 1, /* bad map */ 1005, 1, /* bad map */ 1006, 1, /* bad map */ 1007, 100, 1008, 1, 1009, 1, 1010, 3, 1011, 3, 1012, 3, 1013, 3, 1014, 3, 1015, 1015, 1015, 3, 1016, 3, 1017, 3, 1018, 2, 1019, 2, 1020, 2, 1021, 3, 1022, 3, 1023, 3, 1024, 16, 1025, 3, 1026, 64, 1027, 1, 1028, 65, 1029, 1, 1040, 1, /* 1041-1065 */ 1066, 66, 1066, 67, 1073, 16, 1074, 1074, 0 }; /* * This array contains overrides for when the first occurrence of a * particular SRW error in the array above does not correspond with * the best back-translation of that SRW error. */ static int srw_bib1_map[] = { 10, 108, 66, 238, 235, 235, /* No doubt there are many more */ 0 }; int yaz_diag_bib1_to_srw (int code) { const int *p = bib1_srw_map; while (*p) { if (code == p[0]) return p[1]; p += 2; } return 1; } int yaz_diag_srw_to_bib1(int code) { /* Check explicit reverse-map first */ const int *p = srw_bib1_map; while (*p) { if (code == p[0]) return p[1]; p += 2; } /* Fall back on reverse lookup in main map */ p = bib1_srw_map; while (*p) { if (code == p[1]) return p[0]; p += 2; } return 1; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zoom-socket.c0000644000175000017500000000543013265142510012540 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zoom-socket.c * \brief Implements ZOOM C socket interface. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_TIME_H #include #endif #include ZOOM_API(int) ZOOM_event_sys_yaz_poll(int no, ZOOM_connection *cs) { struct yaz_poll_fd *yp = (struct yaz_poll_fd *) xmalloc(sizeof(*yp) * no); int i, r; int nfds = 0; int timeout = 30; for (i = 0; i < no; i++) { ZOOM_connection c = cs[i]; int fd, mask; if (!c) continue; fd = ZOOM_connection_get_socket(c); mask = ZOOM_connection_get_mask(c); timeout = ZOOM_connection_get_timeout(c); if (fd == -1) continue; if (mask) { enum yaz_poll_mask input_mask = yaz_poll_none; if (mask & ZOOM_SELECT_READ) yaz_poll_add(input_mask, yaz_poll_read); if (mask & ZOOM_SELECT_WRITE) yaz_poll_add(input_mask, yaz_poll_write); if (mask & ZOOM_SELECT_EXCEPT) yaz_poll_add(input_mask, yaz_poll_except); yp[nfds].fd = fd; yp[nfds].input_mask = input_mask; yp[nfds].client_data = c; nfds++; } } if (nfds == 0) { xfree(yp); return 0; } r = yaz_poll(yp, nfds, timeout, 0); if (r >= 0) { for (i = 0; i < nfds; i++) { ZOOM_connection c = (ZOOM_connection) yp[i].client_data; enum yaz_poll_mask output_mask = yp[i].output_mask; if (output_mask & yaz_poll_timeout) ZOOM_connection_fire_event_timeout(c); else { int mask = 0; if (output_mask & yaz_poll_read) mask += ZOOM_SELECT_READ; if (output_mask & yaz_poll_write) mask += ZOOM_SELECT_WRITE; if (output_mask & yaz_poll_except) mask += ZOOM_SELECT_EXCEPT; ZOOM_connection_fire_event_socket(c, mask); } } } xfree(yp); return r; } ZOOM_API(int) ZOOM_event(int no, ZOOM_connection *cs) { int r; r = ZOOM_event_nonblock(no, cs); if (r) return r; while (ZOOM_event_sys_yaz_poll(no, cs) < 0 && errno == EINTR) ; return ZOOM_event_nonblock(no, cs); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cclqfile.c0000644000175000017500000002307413265142510012054 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cclqfile.c * \brief Implements parsing of CCL qualifier specs in files */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #define MAX_QUAL 128 int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, const char **addinfo) { yaz_tok_cfg_t yt = yaz_tok_cfg_create(); int type_ar[MAX_QUAL]; int value_ar[MAX_QUAL]; char *svalue_ar[MAX_QUAL]; char *attsets[MAX_QUAL]; int pair_no = 0; char *type_str = 0; int t; yaz_tok_parse_t tp; yaz_tok_cfg_single_tokens(yt, ",="); tp = yaz_tok_parse_buf(yt, cp); yaz_tok_cfg_destroy(yt); *addinfo = 0; t = yaz_tok_move(tp); while (t == YAZ_TOK_STRING) { /* we don't know what lead is yet */ char *lead_str = xstrdup(yaz_tok_parse_string(tp)); const char *value_str = 0; int type = 0, value = 0; /* indicates attribute value UNSET */ t = yaz_tok_move(tp); if (t == ',') { /* full attribute spec: set, type = value */ /* lead is attribute set */ attsets[pair_no] = lead_str; t = yaz_tok_move(tp); if (t != YAZ_TOK_STRING) { *addinfo = "token expected"; goto out; } xfree(type_str); type_str = xstrdup(yaz_tok_parse_string(tp)); if (yaz_tok_move(tp) != '=') { *addinfo = "= expected"; goto out; } } else if (t == '=') { /* lead is attribute type */ /* attribute set omitted: type = value */ attsets[pair_no] = 0; xfree(type_str); type_str = lead_str; } else { /* lead is first of a list of qualifier aliaeses */ /* qualifier alias: q1 q2 ... */ char *qlist[10]; size_t i = 0; qlist[i++] = lead_str; while (t == YAZ_TOK_STRING) { if (i < sizeof(qlist)/sizeof(*qlist)-1) qlist[i++] = xstrdup(yaz_tok_parse_string(tp)); t = yaz_tok_move(tp); } qlist[i] = 0; yaz_tok_parse_destroy(tp); ccl_qual_add_combi (bibset, qual_name, (const char **) qlist); for (i = 0; qlist[i]; i++) xfree(qlist[i]); return 0; } while (1) /* comma separated attribute value list */ { t = yaz_tok_move(tp); /* must have a value now */ if (t != YAZ_TOK_STRING) { *addinfo = "value token expected"; goto out; } value_str = yaz_tok_parse_string(tp); if (sscanf(type_str, "%d", &type) == 1) ; else if (strlen(type_str) != 1) { *addinfo = "bad attribute type"; goto out; } else { switch (*type_str) { case 'u': case 'U': type = CCL_BIB1_USE; break; case 'r': case 'R': type = CCL_BIB1_REL; if (!ccl_stricmp (value_str, "o")) value = CCL_BIB1_REL_ORDER; else if (!ccl_stricmp (value_str, "r")) value = CCL_BIB1_REL_PORDER; else if (!ccl_stricmp (value_str, "omiteq")) value = CCL_BIB1_REL_OMIT_EQUALS; break; case 'p': case 'P': type = CCL_BIB1_POS; break; case 's': case 'S': type = CCL_BIB1_STR; if (!ccl_stricmp (value_str, "pw")) value = CCL_BIB1_STR_WP; if (!ccl_stricmp (value_str, "al")) value = CCL_BIB1_STR_AND_LIST; if (!ccl_stricmp (value_str, "ol")) value = CCL_BIB1_STR_OR_LIST; if (!ccl_stricmp (value_str, "ag")) value = CCL_BIB1_STR_AUTO_GROUP; if (!ccl_stricmp (value_str, "sl")) value = CCL_BIB1_STR_SPLIT_LIST; break; case 't': case 'T': type = CCL_BIB1_TRU; if (!ccl_stricmp (value_str, "l")) value = CCL_BIB1_TRU_CAN_LEFT; else if (!ccl_stricmp (value_str, "r")) value = CCL_BIB1_TRU_CAN_RIGHT; else if (!ccl_stricmp (value_str, "b")) value = CCL_BIB1_TRU_CAN_BOTH; else if (!ccl_stricmp (value_str, "n")) value = CCL_BIB1_TRU_CAN_NONE; else if (!ccl_stricmp (value_str, "x")) value = CCL_BIB1_TRU_CAN_REGEX; else if (!ccl_stricmp (value_str, "z")) value = CCL_BIB1_TRU_CAN_Z3958; break; case 'c': case 'C': type = CCL_BIB1_COM; break; } } if (type == 0) { /* type was not set in switch above */ *addinfo = "bad attribute type"; goto out; } type_ar[pair_no] = type; if (value) { value_ar[pair_no] = value; svalue_ar[pair_no] = 0; } else if (*value_str >= '0' && *value_str <= '9') { value_ar[pair_no] = atoi (value_str); svalue_ar[pair_no] = 0; } else { value_ar[pair_no] = 0; svalue_ar[pair_no] = xstrdup(value_str); } pair_no++; if (pair_no == MAX_QUAL) { *addinfo = "too many attribute values"; goto out; } t = yaz_tok_move(tp); if (t != ',') break; attsets[pair_no] = attsets[pair_no-1]; } } out: xfree(type_str); type_str = 0; yaz_tok_parse_destroy(tp); if (*addinfo) { int i; for (i = 0; i 0) { if (len >= (sizeof(line)-1)) len = sizeof(line)-1; memcpy(line, cp1, len); line[len] = '\0'; ccl_qual_line(bibset, line); } if (!*cp2) break; cp1 = cp2+1; } } void ccl_qual_line(CCL_bibset bibset, char *line) { int no_scan = 0; char qual_name[128]; char *cp1, *cp = line; if (*cp == '#') return; /* ignore lines starting with # */ if (sscanf (cp, "%100s%n", qual_name, &no_scan) < 1) return; /* also ignore empty lines */ cp += no_scan; cp1 = strchr(cp, '#'); if (cp1) *cp1 = '\0'; ccl_qual_fitem (bibset, cp, qual_name); } /* * ccl_qual_file: Read bibset definition from file. * bibset: Bibset * inf: FILE pointer. * * Each line format is: * = = .... * Where is name of qualifier; * = is a attribute definition pair where is one of: * u(use), r(relation), p(position), t(truncation), c(completeness) * or plain integer. * is an integer or special pseudo-value. */ void ccl_qual_file (CCL_bibset bibset, FILE *inf) { char line[256]; while (fgets (line, 255, inf)) ccl_qual_line(bibset, line); } int ccl_qual_fname (CCL_bibset bibset, const char *fname) { FILE *inf; inf = fopen (fname, "r"); if (!inf) return -1; ccl_qual_file (bibset, inf); fclose (inf); return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/xml_add.c0000644000175000017500000000360513265142510011700 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file xml_add.c * \brief XML node creation utilities */ #if HAVE_CONFIG_H #include #endif #include #include #if YAZ_HAVE_XML2 #include "sru-p.h" void add_XML_n(xmlNodePtr ptr, const char *elem, char *val, int len, xmlNsPtr ns_ptr) { if (val) { xmlDocPtr doc = xmlParseMemory(val,len); if (doc) { xmlNodePtr c = xmlNewChild(ptr, ns_ptr, BAD_CAST elem, 0); xmlNodePtr t = xmlDocGetRootElement(doc); xmlAddChild(c, xmlCopyNode(t,1)); xmlFreeDoc(doc); } } } xmlNodePtr add_xsd_string_n(xmlNodePtr ptr, const char *elem, const char *val, int len) { if (val) { xmlNodePtr c = xmlNewChild(ptr, 0, BAD_CAST elem, 0); xmlNodePtr t = xmlNewTextLen(BAD_CAST val, len); xmlAddChild(c, t); return t; } return 0; } xmlNodePtr add_xsd_string_ns(xmlNodePtr ptr, const char *elem, const char *val, xmlNsPtr ns_ptr) { if (val) { xmlNodePtr c = xmlNewChild(ptr, ns_ptr, BAD_CAST elem, 0); xmlNodePtr t = xmlNewText(BAD_CAST val); xmlAddChild(c, t); return t; } return 0; } xmlNodePtr add_xsd_string(xmlNodePtr ptr, const char *elem, const char *val) { return add_xsd_string_ns(ptr, elem, val, 0); } void add_xsd_integer(xmlNodePtr ptr, const char *elem, const Odr_int *val) { if (val) { char str[40]; sprintf(str, ODR_INT_PRINTF, *val); xmlNewTextChild(ptr, 0, BAD_CAST elem, BAD_CAST str); } } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ccl_stop_words.c0000644000175000017500000001232413265142510013312 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ccl_stop_words.c * \brief Removes stop words from terms in RPN tree */ #if HAVE_CONFIG_H #include #endif #include #include #include #include struct ccl_stop_info { char *qualname; char *term; struct ccl_stop_info *next; }; struct ccl_stop_words { char *blank_chars; NMEM nmem; /* memory for removed items */ struct ccl_stop_info *removed_items; }; static void append_removed_item(ccl_stop_words_t csw, const char *qname, const char *t, size_t len) { struct ccl_stop_info *csi = (struct ccl_stop_info *) nmem_malloc(csw->nmem, sizeof(*csi)); struct ccl_stop_info **csip = &csw->removed_items; if (qname) csi->qualname = nmem_strdup(csw->nmem, qname); else csi->qualname = 0; csi->term = (char *) nmem_malloc(csw->nmem, len+1); memcpy(csi->term, t, len); csi->term[len] = '\0'; csi->next = 0; while (*csip) csip = &(*csip)->next; *csip = csi; } ccl_stop_words_t ccl_stop_words_create(void) { NMEM nmem = nmem_create(); ccl_stop_words_t csw = (ccl_stop_words_t) xmalloc(sizeof(*csw)); csw->nmem = nmem; csw->removed_items = 0; csw->blank_chars = xstrdup(" \r\n\t"); return csw; } void ccl_stop_words_destroy(ccl_stop_words_t csw) { if (csw) { nmem_destroy(csw->nmem); xfree(csw->blank_chars); xfree(csw); } } struct ccl_rpn_node *ccl_remove_stop_r(ccl_stop_words_t csw, CCL_bibset bibset, struct ccl_rpn_node *p) { struct ccl_rpn_node *left, *right; switch (p->kind) { case CCL_RPN_AND: case CCL_RPN_OR: case CCL_RPN_NOT: case CCL_RPN_PROX: left = ccl_remove_stop_r(csw, bibset, p->u.p[0]); right = ccl_remove_stop_r(csw, bibset, p->u.p[1]); if (!left || !right) { /* we must delete our binary node and return child (if any) */ p->u.p[0] = 0; p->u.p[1] = 0; ccl_rpn_delete(p); if (left) return left; else return right; } break; case CCL_RPN_SET: break; case CCL_RPN_TERM: if (p->u.t.term) { int found = 1; while (found) { char *cp = p->u.t.term; found = 0; while (1) { while (*cp && strchr(csw->blank_chars, *cp)) cp++; if (!*cp) break; else { char *cp0 = cp; while (*cp && !strchr(csw->blank_chars, *cp)) cp++; if (cp != cp0) { size_t len = cp - cp0; if (ccl_search_stop(bibset, p->u.t.qual, cp0, len)) { append_removed_item(csw, p->u.t.qual, cp0, len); while (*cp && strchr(csw->blank_chars, *cp)) cp++; memmove(cp0, cp, strlen(cp)+1); found = 1; break; } } } } } } /* chop right blanks .. and see if term it gets empty */ if (p->u.t.term && csw->removed_items) { char *cp = p->u.t.term + strlen(p->u.t.term); while (1) { if (cp == p->u.t.term) { /* term is empty / blank */ ccl_rpn_delete(p); return 0; } if (!strchr(csw->blank_chars, cp[-1])) break; /* chop right */ cp[-1] = 0; --cp; } } break; } return p; } int ccl_stop_words_tree(ccl_stop_words_t csw, CCL_bibset bibset, struct ccl_rpn_node **t) { struct ccl_rpn_node *r; /* remove list items */ nmem_reset(csw->nmem); csw->removed_items = 0; r = ccl_remove_stop_r(csw, bibset, *t); *t = r; if (csw->removed_items) return 1; return 0; } int ccl_stop_words_info(ccl_stop_words_t csw, int idx, const char **qualname, const char **term) { struct ccl_stop_info *csi = csw->removed_items; int i = 0; while (csi && i < idx) { csi = csi->next; i++; } if (csi) { *qualname = csi->qualname; *term = csi->term; return 1; } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/dumpber.c0000644000175000017500000000700213467505553011737 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file dumpber.c * \brief Implements BER dumping */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" static int do_dumpBER(FILE *f, const char *buf, int len, int level, int offset) { int res, ll, zclass, tag, cons, lenlen, taglen; const char *b = buf; char level_str[80]; if (level >= 15) sprintf(level_str, "level=%-6d%*s", level, 18, ""); else sprintf(level_str, "%*s", level * 2, ""); if (!len) return 0; if (!buf[0] && !buf[1]) return 0; if ((res = ber_dectag(b, &zclass, &tag, &cons, len)) <= 0) return 0; if (res > len) { fprintf(f, "%5d: %s : Unexpected end of buffer\n", offset, level_str); return 0; } fprintf(f, "%5d: %s", offset, level_str); if (zclass == ODR_UNIVERSAL) { static char *nl[] = { "[Univ 0]", "BOOLEAN", "INTEGER", "BIT STRING", "OCTET STRING", "NULL", "OID", "OBJECT DESCRIPTOR", "EXTERNAL", "REAL", "ENUM", "[UNIV 11]", "[UNIV 12]", "[UNIV 13]", "[UNIV 14]", "[UNIV 15]", "SEQUENCE", "SET", "NUMERICSTRING", "PRINTABLESTRING", "[UNIV 20]", "[UNIV 21]", "[UNIV 22]", "[UNIV 23]", "[UNIV 24]", "GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING", "[UNIV 28]" }; if (tag >= 0 && tag < 28) fprintf(f, "%s", nl[tag]); else fprintf(f, "[UNIV %d]", tag); } else if (zclass == ODR_CONTEXT) fprintf(f, "[%d]", tag); else fprintf(f, "[%d:%d]", zclass, tag); b += res; taglen = res; len -= res; if ((res = ber_declen(b, &ll, len)) <= 0) { fprintf(f, "\n%sBad length\n", level_str); return 0; } lenlen = res; b += res; len -= res; if (ll >= 0) fprintf(f, " len=%d", ll); else fprintf(f, " len=?"); fprintf(f, " tl=%d, ll=%d cons=%d\n", taglen, lenlen, cons); if (!cons) { if (ll < 0 || ll > len) { fprintf(f, "%sBad length on primitive type. ll=%d len=%d\n", level_str, ll, len); return 0; } return ll + (b - buf); } if (ll >= 0) { if (ll > len) { fprintf(f, "%sBad length of constructed type ll=%d len=%d\n", level_str, ll, len); return 0; } len = ll; } /* constructed - cycle through children */ while ((ll == -1 && len >= 2) || (ll >= 0 && len)) { if (ll == -1 && *b == 0 && *(b + 1) == 0) break; if (!(res = do_dumpBER(f, b, len, level + 1, offset + (b - buf)))) { fprintf(f, "%s Dump of content element failed\n", level_str); return 0; } b += res; len -= res; if (len < 0) { fprintf(f, "%sBad length\n", level_str); return 0; } } if (ll == -1) { if (len < 2) { fprintf(f, "%sBuffer too short in indefinite length\n", level_str); return 0; } return (b - buf) + 2; } return b - buf; } int odr_dumpBER(FILE *f, const char *buf, int len) { return do_dumpBER(f, buf, len, 0, 0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cclstr.c0000644000175000017500000000246413265142510011564 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cclstr.c * \brief Implements CCL string compare utilities */ #if HAVE_CONFIG_H #include #endif #include #include #include #include static int ccli_toupper (int c) { if (yaz_islower(c)) return yaz_toupper(c); else return c; } int (*ccl_toupper)(int c) = NULL; int ccl_stricmp (const char *s1, const char *s2) { if (!ccl_toupper) ccl_toupper = ccli_toupper; while (*s1 && *s2) { int c1, c2; c1 = (*ccl_toupper)(*s1); c2 = (*ccl_toupper)(*s2); if (c1 != c2) return c1 - c2; s1++; s2++; } return (*ccl_toupper)(*s1) - (*ccl_toupper)(*s2); } int ccl_memicmp (const char *s1, const char *s2, size_t n) { if (!ccl_toupper) ccl_toupper = ccli_toupper; while (1) { int c1, c2; c1 = (*ccl_toupper)(*s1); c2 = (*ccl_toupper)(*s2); if (n <= 1 || c1 != c2) return c1 - c2; s1++; s2++; --n; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/diagsrw.c0000644000175000017500000001071413570010420011720 00000000000000/** \file ./diagsrw.c \brief Diagnostics: Generated by csvtodiag.tcl from ./srw.csv */ #ifdef HAVE_CONFIG_H #include #endif #include "diag-entry.h" #include "../include/yaz/diagsrw.h" struct yaz_diag_entry yaz_diag_srw_tab[] = { {1, "Permanent system error"}, {2, "System temporarily unavailable"}, {3, "Authentication error"}, {4, "Unsupported operation"}, {5, "Unsupported version"}, {6, "Unsupported parameter value"}, {7, "Mandatory parameter not supplied"}, {8, "Unsupported parameter"}, {10, "Query syntax error"}, {11, "Unsupported query type"}, {12, "Too many characters in query"}, {13, "Invalid or unsupported use of parentheses"}, {14, "Invalid or unsupported use of quotes"}, {15, "Unsupported context set"}, {16, "Unsupported index"}, {17, "Unsupported combination of index and context set"}, {18, "Unsupported combination of indexes"}, {19, "Unsupported relation"}, {20, "Unsupported relation modifier"}, {21, "Unsupported combination of relation modifiers"}, {22, "Unsupported combination of relation and index"}, {23, "Too many characters in term"}, {24, "Unsupported combination of relation and term"}, {25, "Special characters not quoted in term"}, {26, "Non special character escaped in term"}, {27, "Empty term unsupported"}, {28, "Masking character not supported"}, {29, "Masked words too short"}, {30, "Too many masking characters in term"}, {31, "Anchoring character not supported"}, {32, "Anchoring character in unsupported position"}, {33, "Combination of proximity/adjacency and masking characters not supported"}, {34, "Combination of proximity/adjacency and anchoring characters not supported"}, {35, "Term contains only stopwords"}, {36, "Term in invalid format for index or relation"}, {37, "Unsupported boolean operator"}, {38, "Too many boolean operators in query"}, {39, "Proximity not supported"}, {40, "Unsupported proximity relation"}, {41, "Unsupported proximity distance"}, {42, "Unsupported proximity unit"}, {43, "Unsupported proximity ordering"}, {44, "Unsupported combination of proximity modifiers"}, {45, "Prefix assigned to multiple identifiers"}, {46, "Unsupported boolean modifier"}, {47, "Cannot process query; reason unknown"}, {48, "Query feature unsupported"}, {49, "Masking character in unsupported position"}, {50, "Result sets not supported"}, {51, "Result set does not exist"}, {52, "Result set temporarily unavailable"}, {53, "Result sets only supported for retrieval"}, {54, "Retrieval may only occur from an existing result set"}, {55, "Combination of result sets with search terms not supported"}, {56, "Only combination of single result set with search terms supported"}, {57, "Result set created but no records available"}, {58, "Result set created with unpredictable partial results available"}, {59, "Result set created with valid partial results available"}, {60, "Result set not created: too many matching records"}, {61, "First record position out of range"}, {62, "Negative number of records requested"}, {63, "System error in retrieving records"}, {64, "Record temporarily unavailable"}, {65, "Record does not exist"}, {66, "Unknown schema for retrieval"}, {67, "Record not available in this schema"}, {68, "Not authorised to send record"}, {69, "Not authorised to send record in this schema"}, {70, "Record too large to send"}, {71, "Unsupported record packing"}, {72, "XPath retrieval unsupported"}, {73, "XPath expression contains unsupported feature"}, {74, "Unable to evaluate XPath expression"}, {80, "Sort not supported"}, {81, "Unsupported sort type"}, {82, "Unsupported sort sequence"}, {83, "Too many records to sort"}, {84, "Too many sort keys to sort"}, {85, "Duplicate sort keys"}, {86, "Cannot sort: incompatible record formats"}, {87, "Unsupported schema for sort"}, {88, "Unsupported path for sort"}, {89, "Path unsupported for schema"}, {90, "Unsupported direction value"}, {91, "Unsupported case value"}, {92, "Unsupported missing value action"}, {93, "Sort ended due to missing value"}, {100, "Explain not supported"}, {101, "Explain request type not supported (SOAP vs GET)"}, {102, "Explain record temporarily unavailable"}, {110, "Stylesheets not supported"}, {111, "Unsupported stylesheet"}, {120, "Response position out of range"}, {121, "Too many terms requested"}, {235, "Database does not exist"}, {236, "Access to specified database denied"}, {1015, "Init/AC: Maximum number of simultaneous sessions for Userid"}, {1074, "Proxy failure"}, {0, 0}}; const char *yaz_diag_srw_str(int code) { return yaz_diag_to_str(yaz_diag_srw_tab, code); } yaz-5.28.0/src/readconf.c0000644000175000017500000000354713265142510012056 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file readconf.c * \brief Implements config file reading */ #if HAVE_CONFIG_H #include #endif #include #include #include #define l_isspace(c) ((c) == '\t' || (c) == ' ' || (c) == '\n' || (c) == '\r') int readconf_line(FILE *f, int *lineno, char *line, int len, char *argv[], int num) { char *p; int argc; while ((p = fgets(line, len, f))) { (*lineno)++; while (*p && l_isspace(*p)) p++; if (*p && *p != '#') break; } if (!p) return 0; for (argc = 0; *p && argc < num ; argc++) { if (*p == '#') /* trailing comment */ break; argv[argc] = p; while (*p && !l_isspace(*p)) p++; if (*p) { *(p++) = '\0'; while (*p && l_isspace(*p)) p++; } } return argc; } /* * Read lines of a configuration file. */ int readconf(char *name, void *rprivate, int (*fun)(char *name, void *rprivate, int argc, char *argv[])) { FILE *f; char line[512], *m_argv[50]; int m_argc; int lineno = 0; if (!(f = fopen(name, "r"))) { yaz_log(YLOG_WARN|YLOG_ERRNO, "readconf: %s", name); return -1; } for (;;) { int res; if (!(m_argc = readconf_line(f, &lineno, line, 512, m_argv, 50))) { fclose(f); return 0; } if ((res = (*fun)(name, rprivate, m_argc, m_argv))) { fclose(f); return res; } } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ill-get.c0000644000175000017500000005101413265142510011622 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ill-get.c * \brief Implements ILL package creator utilities */ #if HAVE_CONFIG_H #include #endif #include #include bool_t *ill_get_bool(struct ill_get_ctl *gc, const char *name, const char *sub, int val) { ODR o = gc->odr; char element[128]; const char *v; bool_t *r = (bool_t *) odr_malloc(o, sizeof(*r)); strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } v = (gc->f)(gc->clientData, element); if (v) val = atoi(v); else if (val < 0) return 0; *r = val; return r; } Odr_int *ill_get_int(struct ill_get_ctl *gc, const char *name, const char *sub, Odr_int val) { ODR o = gc->odr; char element[128]; const char *v; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } v = (gc->f)(gc->clientData, element); if (v) val = atoi(v); return odr_intdup(o, val); } Odr_int *ill_get_enumerated(struct ill_get_ctl *gc, const char *name, const char *sub, Odr_int val) { return ill_get_int(gc, name, sub, val); } ILL_String *ill_get_ILL_String_x(struct ill_get_ctl *gc, const char *name, const char *sub, const char *vdefault) { ILL_String *r = (ILL_String *) odr_malloc(gc->odr, sizeof(*r)); char element[128]; const char *v; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } v = (gc->f)(gc->clientData, element); if (!v) v = vdefault; if (!v) return 0; r->which = ILL_String_GeneralString; r->u.GeneralString = odr_strdup(gc->odr, v); return r; } ILL_String *ill_get_ILL_String(struct ill_get_ctl *gc, const char *name, const char *sub) { return ill_get_ILL_String_x(gc, name, sub, 0); } ILL_ISO_Date *ill_get_ILL_ISO_Date(struct ill_get_ctl *gc, const char *name, const char *sub, const char *val) { char element[128]; const char *v; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } v = (gc->f)(gc->clientData, element); if (!v) v = val; if (!v) return 0; return odr_strdup(gc->odr, v); } ILL_ISO_Time *ill_get_ILL_ISO_Time(struct ill_get_ctl *gc, const char *name, const char *sub, const char *val) { char element[128]; const char *v; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } v = (gc->f)(gc->clientData, element); if (!v) v = val; if (!v) return 0; return odr_strdup(gc->odr, v); } ILL_Person_Or_Institution_Symbol *ill_get_Person_Or_Insitution_Symbol( struct ill_get_ctl *gc, const char *name, const char *sub) { char element[128]; ODR o = gc->odr; ILL_Person_Or_Institution_Symbol *p = (ILL_Person_Or_Institution_Symbol *) odr_malloc(o, sizeof(*p)); strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } p->which = ILL_Person_Or_Institution_Symbol_person_symbol; if ((p->u.person_symbol = ill_get_ILL_String(gc, element, "person"))) return p; p->which = ILL_Person_Or_Institution_Symbol_institution_symbol; if ((p->u.institution_symbol = ill_get_ILL_String(gc, element, "institution"))) return p; return 0; } static ILL_Name_Of_Person_Or_Institution *ill_get_Name_Of_Person_Or_Institution( struct ill_get_ctl *gc, const char *name, const char *sub) { char element[128]; ODR o = gc->odr; ILL_Name_Of_Person_Or_Institution *p = (ILL_Name_Of_Person_Or_Institution *) odr_malloc(o, sizeof(*p)); strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } p->which = ILL_Name_Of_Person_Or_Institution_name_of_person; if ((p->u.name_of_person = ill_get_ILL_String(gc, element, "name-of-person"))) return p; p->which = ILL_Name_Of_Person_Or_Institution_name_of_institution; if ((p->u.name_of_institution = ill_get_ILL_String(gc, element, "name-of-institution"))) return p; return 0; } ILL_System_Id *ill_get_System_Id(struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; char element[128]; ILL_System_Id *p; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } p = (ILL_System_Id *) odr_malloc(o, sizeof(*p)); p->person_or_institution_symbol = ill_get_Person_Or_Insitution_Symbol( gc, element, "person-or-institution-symbol"); p->name_of_person_or_institution = ill_get_Name_Of_Person_Or_Institution( gc, element, "name-of-person-or-institution"); return p; } ILL_Transaction_Id *ill_get_Transaction_Id(struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Transaction_Id *r = (ILL_Transaction_Id *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->initial_requester_id = ill_get_System_Id(gc, element, "initial-requester-id"); r->transaction_group_qualifier = ill_get_ILL_String_x(gc, element, "transaction-group-qualifier", ""); r->transaction_qualifier = ill_get_ILL_String_x(gc, element, "transaction-qualifier", ""); r->sub_transaction_qualifier = ill_get_ILL_String(gc, element, "sub-transaction-qualifier"); return r; } ILL_Service_Date_this *ill_get_Service_Date_this( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Service_Date_this *r = (ILL_Service_Date_this *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->date = ill_get_ILL_ISO_Date(gc, element, "date", "20000101"); r->time = ill_get_ILL_ISO_Time(gc, element, "time", 0); return r; } ILL_Service_Date_original *ill_get_Service_Date_original( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Service_Date_original *r = (ILL_Service_Date_original *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->date = ill_get_ILL_ISO_Date(gc, element, "date", 0); r->time = ill_get_ILL_ISO_Time(gc, element, "time", 0); if (!r->date && !r->time) return 0; return r; } ILL_Service_Date_Time *ill_get_Service_Date_Time( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Service_Date_Time *r = (ILL_Service_Date_Time *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->date_time_of_this_service = ill_get_Service_Date_this( gc, element, "this"); r->date_time_of_original_service = ill_get_Service_Date_original( gc, element, "original"); return r; } ILL_Requester_Optional_Messages_Type *ill_get_Requester_Optional_Messages_Type( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Requester_Optional_Messages_Type *r = (ILL_Requester_Optional_Messages_Type *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->can_send_RECEIVED = ill_get_bool(gc, element, "can-send-RECEIVED", 0); r->can_send_RETURNED = ill_get_bool(gc, element, "can-send-RETURNED", 0); r->requester_SHIPPED = ill_get_enumerated(gc, element, "requester-SHIPPED", 1); r->requester_CHECKED_IN = ill_get_enumerated(gc, element, "requester-CHECKED-IN", 1); return r; } ILL_Item_Id *ill_get_Item_Id( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Item_Id *r = (ILL_Item_Id *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->item_type = ill_get_enumerated(gc, element, "item-type", ILL_Item_Id_monograph); r->held_medium_type = 0; r->call_number = ill_get_ILL_String(gc, element, "call-number"); r->author = ill_get_ILL_String(gc, element, "author"); r->title = ill_get_ILL_String(gc, element, "title"); r->sub_title = ill_get_ILL_String(gc, element, "sub-title"); r->sponsoring_body = ill_get_ILL_String(gc, element, "sponsoring-body"); r->place_of_publication = ill_get_ILL_String(gc, element, "place-of-publication"); r->publisher = ill_get_ILL_String(gc, element, "publisher"); r->series_title_number = ill_get_ILL_String(gc, element, "series-title-number"); r->volume_issue = ill_get_ILL_String(gc, element, "volume-issue"); r->edition = ill_get_ILL_String(gc, element, "edition"); r->publication_date = ill_get_ILL_String(gc, element, "publication-date"); r->publication_date_of_component = ill_get_ILL_String(gc, element, "publication-date-of-component"); r->author_of_article = ill_get_ILL_String(gc, element, "author-of-article"); r->title_of_article = ill_get_ILL_String(gc, element, "title-of-article"); r->pagination = ill_get_ILL_String(gc, element, "pagination"); r->national_bibliography_no = 0; r->iSBN = ill_get_ILL_String(gc, element, "ISBN"); r->iSSN = ill_get_ILL_String(gc, element, "ISSN"); r->system_no = 0; r->additional_no_letters = ill_get_ILL_String(gc, element, "additional-no-letters"); r->verification_reference_source = ill_get_ILL_String(gc, element, "verification-reference-source"); return r; } ILL_Client_Id *ill_get_Client_Id( struct ill_get_ctl *gc, const char *name, const char *sub) { char element[128]; ODR o = gc->odr; ILL_Client_Id *r = (ILL_Client_Id *) odr_malloc(o, sizeof(*r)); strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->client_name = ill_get_ILL_String(gc, element, "client-name"); r->client_status = ill_get_ILL_String(gc, element, "client-status"); r->client_identifier = ill_get_ILL_String(gc, element, "client-identifier"); return r; } ILL_Postal_Address *ill_get_Postal_Address( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Postal_Address *r = (ILL_Postal_Address *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->name_of_person_or_institution = ill_get_Name_Of_Person_Or_Institution( gc, element, "name-of-person-or-institution"); r->extended_postal_delivery_address = ill_get_ILL_String( gc, element, "extended-postal-delivery-address"); r->street_and_number = ill_get_ILL_String(gc, element, "street-and-number"); r->post_office_box = ill_get_ILL_String(gc, element, "post-office-box"); r->city = ill_get_ILL_String(gc, element, "city"); r->region = ill_get_ILL_String(gc, element, "region"); r->country = ill_get_ILL_String(gc, element, "country"); r->postal_code = ill_get_ILL_String(gc, element, "postal-code"); return r; } ILL_System_Address *ill_get_System_Address( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_System_Address *r = (ILL_System_Address *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->telecom_service_identifier = ill_get_ILL_String(gc, element, "telecom-service-identifier"); r->telecom_service_address = ill_get_ILL_String(gc, element, "telecom-service-addreess"); return r; } ILL_Delivery_Address *ill_get_Delivery_Address( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Delivery_Address *r = (ILL_Delivery_Address *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->postal_address = ill_get_Postal_Address(gc, element, "postal-address"); r->electronic_address = ill_get_System_Address(gc, element, "electronic-address"); return r; } ILL_Search_Type *ill_get_Search_Type( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Search_Type *r = (ILL_Search_Type *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->level_of_service = ill_get_ILL_String(gc, element, "level-of-service"); r->need_before_date = ill_get_ILL_ISO_Date(gc, element, "need-before-date", 0); r->expiry_date = ill_get_ILL_ISO_Date(gc, element, "expiry-date", 0); r->expiry_flag = ill_get_enumerated(gc, element, "expiry-flag", 3); return r; } ILL_Request *ill_get_ILLRequest( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Request *r = (ILL_Request *) odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->protocol_version_num = ill_get_enumerated(gc, element, "protocol-version-num", ILL_Request_version_2); r->transaction_id = ill_get_Transaction_Id(gc, element, "transaction-id"); r->service_date_time = ill_get_Service_Date_Time(gc, element, "service-date-time"); r->requester_id = ill_get_System_Id(gc, element, "requester-id"); r->responder_id = ill_get_System_Id(gc, element, "responder-id"); r->transaction_type = ill_get_enumerated(gc, element, "transaction-type", 1); r->delivery_address = ill_get_Delivery_Address(gc, element, "delivery-address"); r->delivery_service = 0; /* TODO */ /* ill_get_Delivery_Service(gc, element, "delivery-service"); */ r->billing_address = ill_get_Delivery_Address(gc, element, "billing-address"); r->num_iLL_service_type = 1; r->iLL_service_type =(ILL_Service_Type **) odr_malloc(o, sizeof(*r->iLL_service_type)); *r->iLL_service_type = ill_get_enumerated(gc, element, "ill-service-type", ILL_Service_Type_copy_non_returnable); r->responder_specific_service = 0; r->requester_optional_messages = ill_get_Requester_Optional_Messages_Type( gc, element,"requester-optional-messages"); r->search_type = ill_get_Search_Type(gc, element, "search-type"); r->num_supply_medium_info_type = 0; r->supply_medium_info_type = 0; r->place_on_hold = ill_get_enumerated( gc, element, "place-on-hold", ILL_Place_On_Hold_Type_according_to_responder_policy); r->client_id = ill_get_Client_Id(gc, element, "client-id"); r->item_id = ill_get_Item_Id(gc, element, "item-id"); r->supplemental_item_description = 0; r->cost_info_type = 0; r->copyright_compliance = ill_get_ILL_String(gc, element, "copyright-complicance"); r->third_party_info_type = 0; r->retry_flag = ill_get_bool(gc, element, "retry-flag", 0); r->forward_flag = ill_get_bool(gc, element, "forward-flag", 0); r->requester_note = ill_get_ILL_String(gc, element, "requester-note"); r->forward_note = ill_get_ILL_String(gc, element, "forward-note"); r->num_iLL_request_extensions = 0; r->iLL_request_extensions = 0; return r; } ILL_ItemRequest *ill_get_ItemRequest( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_ItemRequest *r = (ILL_ItemRequest *)odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->protocol_version_num = ill_get_enumerated(gc, element, "protocol-version-num", ILL_Request_version_2); r->transaction_id = ill_get_Transaction_Id(gc, element, "transaction-id"); r->service_date_time = ill_get_Service_Date_Time(gc, element, "service-date-time"); r->requester_id = ill_get_System_Id(gc, element, "requester-id"); r->responder_id = ill_get_System_Id(gc, element, "responder-id"); r->transaction_type = ill_get_enumerated(gc, element, "transaction-type", 1); r->delivery_address = ill_get_Delivery_Address(gc, element, "delivery-address"); r->delivery_service = 0; /* TODO */ /* ill_get_Delivery_Service(gc, element, "delivery-service"); */ r->billing_address = ill_get_Delivery_Address(gc, element, "billing-address"); r->num_iLL_service_type = 1; r->iLL_service_type =(ILL_Service_Type **) odr_malloc(o, sizeof(*r->iLL_service_type)); *r->iLL_service_type = ill_get_enumerated(gc, element, "ill-service-type", ILL_Service_Type_copy_non_returnable); r->responder_specific_service = 0; r->requester_optional_messages = ill_get_Requester_Optional_Messages_Type( gc, element,"requester-optional-messages"); r->search_type = ill_get_Search_Type(gc, element, "search-type"); r->num_supply_medium_info_type = 0; r->supply_medium_info_type = 0; r->place_on_hold = ill_get_enumerated( gc, element, "place-on-hold", ILL_Place_On_Hold_Type_according_to_responder_policy); r->client_id = ill_get_Client_Id(gc, element, "client-id"); r->item_id = ill_get_Item_Id(gc, element, "item-id"); r->supplemental_item_description = 0; r->cost_info_type = 0; r->copyright_compliance = ill_get_ILL_String(gc, element, "copyright-complicance"); r->third_party_info_type = 0; r->retry_flag = ill_get_bool(gc, element, "retry-flag", 0); r->forward_flag = ill_get_bool(gc, element, "forward-flag", 0); r->requester_note = ill_get_ILL_String(gc, element, "requester-note"); r->forward_note = ill_get_ILL_String(gc, element, "forward-note"); r->num_iLL_request_extensions = 0; r->iLL_request_extensions = 0; return r; } ILL_Cancel *ill_get_Cancel( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_Cancel *r = (ILL_Cancel *)odr_malloc(o, sizeof(*r)); char element[128]; strcpy(element, name); if (sub) { strcat(element, ","); strcat(element, sub); } r->protocol_version_num = ill_get_enumerated(gc, element, "protocol-version-num", ILL_Request_version_2); r->transaction_id = ill_get_Transaction_Id(gc, element, "transaction-id"); r->service_date_time = ill_get_Service_Date_Time(gc, element, "service-date-time"); r->requester_id = ill_get_System_Id(gc, element, "requester-id"); r->responder_id = ill_get_System_Id(gc, element, "responder-id"); r->requester_note = ill_get_ILL_String(gc, element, "requester-note"); r->num_cancel_extensions = 0; r->cancel_extensions = 0; return r; } ILL_APDU *ill_get_APDU( struct ill_get_ctl *gc, const char *name, const char *sub) { ODR o = gc->odr; ILL_APDU *r = (ILL_APDU *)odr_malloc(o, sizeof(*r)); char element[128]; const char *v; strcpy(element, name); strcat(element, ",which"); v = (gc->f)(gc->clientData, element); if (!v) v = "request"; if (!strcmp(v, "request")) { r->which = ILL_APDU_ILL_Request; r->u.illRequest = ill_get_ILLRequest(gc, name, sub); } else if (!strcmp(v, "cancel")) { r->which = ILL_APDU_Cancel; r->u.Cancel = ill_get_Cancel(gc, name, sub); } else return 0; return r; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/tokenizer.c0000644000175000017500000001001313265142510012271 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file tokenizer.c * \brief Simple tokenizer system. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include struct yaz_tok_parse { int unget_byte; WRBUF wr_string; int look; yaz_tok_cfg_t cfg; yaz_tok_get_byte_t get_byte_func; void *get_byte_data; }; struct yaz_tok_cfg { int ref_count; char *comment; char *white_space; char *single_tokens; char *quote_tokens_begin; char *quote_tokens_end; }; void yaz_tok_cfg_single_tokens(yaz_tok_cfg_t t, const char *simple) { xfree(t->single_tokens); t->single_tokens = xstrdup(simple); } yaz_tok_cfg_t yaz_tok_cfg_create(void) { yaz_tok_cfg_t t = (yaz_tok_cfg_t) xmalloc(sizeof(*t)); t->white_space = xstrdup(" \t\r\n"); t->single_tokens = xstrdup(""); t->quote_tokens_begin = xstrdup("\""); t->quote_tokens_end = xstrdup("\""); t->comment = xstrdup("#"); t->ref_count = 1; return t; } void yaz_tok_cfg_destroy(yaz_tok_cfg_t t) { t->ref_count--; if (t->ref_count == 0) { xfree(t->white_space); xfree(t->single_tokens); xfree(t->quote_tokens_begin); xfree(t->quote_tokens_end); xfree(t->comment); xfree(t); } } static int read_buf(void **vp) { const char *cp = *(const char **) vp; int ch = *cp; if (ch) { cp++; *(const char **)vp = cp; } return ch; } yaz_tok_parse_t yaz_tok_parse_buf(yaz_tok_cfg_t t, const char *buf) { return yaz_tok_parse_create(t, read_buf, (void *) buf); } static int get_byte(yaz_tok_parse_t tp) { int ch = tp->unget_byte; assert(tp->get_byte_func); if (ch) tp->unget_byte = 0; else ch = tp->get_byte_func(&tp->get_byte_data); return ch; } static void unget_byte(yaz_tok_parse_t tp, int ch) { tp->unget_byte = ch; } yaz_tok_parse_t yaz_tok_parse_create(yaz_tok_cfg_t t, yaz_tok_get_byte_t h, void *vp) { yaz_tok_parse_t tp = (yaz_tok_parse_t) xmalloc(sizeof(*tp)); tp->cfg = t; tp->cfg->ref_count++; tp->get_byte_func = h; tp->get_byte_data = vp; tp->look = YAZ_TOK_ERROR; tp->unget_byte = 0; tp->wr_string = wrbuf_alloc(); return tp; } void yaz_tok_parse_destroy(yaz_tok_parse_t tp) { yaz_tok_cfg_destroy(tp->cfg); wrbuf_destroy(tp->wr_string); xfree(tp); } int yaz_tok_move(yaz_tok_parse_t tp) { yaz_tok_cfg_t t = tp->cfg; const char *cp; int ch = get_byte(tp); /* skip white space */ while (ch && strchr(t->white_space, ch)) ch = get_byte(tp); if (!ch) ch = YAZ_TOK_EOF; else if (strchr(t->comment, ch)) ch = YAZ_TOK_EOF; else if ((cp = strchr(t->single_tokens, ch))) ch = *cp; /* single token match */ else if ((cp = strchr(t->quote_tokens_begin, ch))) { /* quoted string */ int end_ch = t->quote_tokens_end[cp - t->quote_tokens_begin]; ch = get_byte(tp); wrbuf_rewind(tp->wr_string); while (ch && ch != end_ch) wrbuf_putc(tp->wr_string, ch); if (!ch) ch = YAZ_TOK_ERROR; else ch = YAZ_TOK_QSTRING; } else { /* unquoted string */ wrbuf_rewind(tp->wr_string); while (ch && !strchr(t->white_space, ch) && !strchr(t->single_tokens, ch) && !strchr(t->comment, ch)) { wrbuf_putc(tp->wr_string, ch); ch = get_byte(tp); } unget_byte(tp, ch); ch = YAZ_TOK_STRING; } tp->look = ch; return ch; } const char *yaz_tok_parse_string(yaz_tok_parse_t tp) { return wrbuf_cstr(tp->wr_string); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/iconv_decode_iso5426.c0000644000175000017500000001522413265142510014104 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief ISO 5426 decoding * * MARC-8 reference: * http://www.loc.gov/marc/specifications/speccharmarc8.html * * ISO 5426 reference (in German) * Zeichenkonkordanz MAB2-Zeichensatz - ISO/IEC 10646 / Unicode * http://www.d-nb.de/standardisierung/pdf/mab_unic.pdf */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include "iconv-p.h" struct decoder_data { int g0_mode; int g1_mode; int comb_offset; int comb_size; unsigned long comb_x[8]; size_t comb_no_read[8]; }; yaz_conv_func_t yaz_iso5426_42_conv; yaz_conv_func_t yaz_iso5426_45_conv; yaz_conv_func_t yaz_iso5426_67_conv; yaz_conv_func_t yaz_iso5426_62_conv; yaz_conv_func_t yaz_iso5426_70_conv; yaz_conv_func_t yaz_iso5426_32_conv; yaz_conv_func_t yaz_iso5426_4E_conv; yaz_conv_func_t yaz_iso5426_51_conv; yaz_conv_func_t yaz_iso5426_33_conv; yaz_conv_func_t yaz_iso5426_34_conv; yaz_conv_func_t yaz_iso5426_53_conv; yaz_conv_func_t yaz_iso5426_31_conv; static unsigned long yaz_read_iso5426_comb(yaz_iconv_t cd, struct decoder_data *data, unsigned char *inp, size_t inbytesleft, size_t *no_read, int *comb); static unsigned long read_iso5426(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { struct decoder_data *data = (struct decoder_data *) d->data; unsigned long x; if (data->comb_offset < data->comb_size) { *no_read = data->comb_no_read[data->comb_offset]; x = data->comb_x[data->comb_offset]; /* special case for double-diacritic combining characters, INVERTED BREVE and DOUBLE TILDE. We'll increment the no_read counter by 1, since we want to skip over the processing of the closing ligature character */ /* this code is no longer necessary.. our handlers code in yaz_iso5426_?_conv (generated by charconv.tcl) now returns 0 and no_read=1 when a sequence does not match the input. The SECOND HALFs in codetables.xml produces a non-existant entry in the conversion trie.. Hence when met, the input byte is skipped as it should (in yaz_iconv) */ #if 0 if (x == 0x0361 || x == 0x0360) *no_read += 1; #endif data->comb_offset++; return x; } data->comb_offset = 0; for (data->comb_size = 0; data->comb_size < 8; data->comb_size++) { int comb = 0; if (inbytesleft == 0 && data->comb_size) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); x = 0; *no_read = 0; break; } x = yaz_read_iso5426_comb(cd, data, inp, inbytesleft, no_read, &comb); if (!comb || !x) break; data->comb_x[data->comb_size] = x; data->comb_no_read[data->comb_size] = *no_read; inp += *no_read; inbytesleft = inbytesleft - *no_read; } return x; } static unsigned long yaz_read_iso5426_comb(yaz_iconv_t cd, struct decoder_data *data, unsigned char *inp, size_t inbytesleft, size_t *no_read, int *comb) { *no_read = 0; while (inbytesleft > 0 && *inp == 27) { int *modep = &data->g0_mode; size_t inbytesleft0 = inbytesleft; inbytesleft--; inp++; if (inbytesleft == 0) goto incomplete; if (*inp == '$') /* set with multiple bytes */ { inbytesleft--; inp++; } if (inbytesleft == 0) goto incomplete; if (*inp == '(' || *inp == ',') /* G0 */ { inbytesleft--; inp++; } else if (*inp == ')' || *inp == '-') /* G1 */ { inbytesleft--; inp++; modep = &data->g1_mode; } if (inbytesleft == 0) goto incomplete; if (*inp == '!') /* ANSEL is a special case */ { inbytesleft--; inp++; } if (inbytesleft == 0) goto incomplete; *modep = *inp++; /* Final character */ inbytesleft--; (*no_read) += inbytesleft0 - inbytesleft; } if (inbytesleft == 0) return 0; else if (*inp == ' ') { *no_read += 1; return ' '; } else { unsigned long x; size_t no_read_sub = 0; int mode = *inp < 128 ? data->g0_mode : data->g1_mode; *comb = 0; switch(mode) { case 'B': /* Basic ASCII */ case 's': /* ASCII */ x = yaz_iso5426_42_conv(inp, inbytesleft, &no_read_sub, comb, 127, 0); break; case 'E': /* ANSEL */ x = yaz_iso5426_45_conv(inp, inbytesleft, &no_read_sub, comb, 127, 128); break; default: *no_read = 0; yaz_iconv_set_errno(cd, YAZ_ICONV_EILSEQ); return 0; } *no_read += no_read_sub; return x; } incomplete: *no_read = 0; yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); return 0; } static size_t init_iso5426(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { struct decoder_data *data = (struct decoder_data *) d->data; data->g0_mode = 'B'; data->g1_mode = 'E'; data->comb_offset = data->comb_size = 0; return 0; } void destroy_iso5426(yaz_iconv_decoder_t d) { struct decoder_data *data = (struct decoder_data *) d->data; xfree(data); } yaz_iconv_decoder_t yaz_iso5426_decoder(const char *fromcode, yaz_iconv_decoder_t d) { if (!yaz_matchstr(fromcode, "ISO5426")) d->read_handle = read_iso5426; else return 0; { struct decoder_data *data = (struct decoder_data *) xmalloc(sizeof(*data)); d->data = data; d->init_handle = init_iso5426; d->destroy_handle = destroy_iso5426; } return d; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/tcpip.c0000644000175000017500000012622713467505553011433 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file tcpip.c * \brief Implements TCP/IP + SSL COMSTACK. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_TIME_H #include #endif #if HAVE_UNISTD_H #include #endif #include #include #ifdef WIN32 /* VS 2003 or later has getaddrinfo; older versions do not */ #include #if _MSC_VER >= 1300 #include #define HAVE_GETADDRINFO 1 #else #define HAVE_GETADDRINFO 0 #endif #endif #if HAVE_NETINET_IN_H #include #endif #if HAVE_NETDB_H #include #endif #if HAVE_ARPA_INET_H #include #endif #if HAVE_NETINET_TCP_H #include #endif #if HAVE_SYS_SOCKET_H #include #endif #if HAVE_SYS_WAIT_H #include #endif #if HAVE_GNUTLS_H #include #include #endif #include #include #include #ifndef WIN32 #define RESOLVER_THREAD 1 #endif #if HAVE_GNUTLS_H #if GNUTLS_VERSION_NUMBER >= 0x030109 #define SET_GNUTLS_SOCKET(ses, socket) gnutls_transport_set_int(ses, socket) #else #define SET_GNUTLS_SOCKET(ses, socket) \ gnutls_transport_set_ptr(ses, (gnutls_transport_ptr_t) (size_t) socket) #endif #endif static void tcpip_close(COMSTACK h); static int tcpip_put(COMSTACK h, char *buf, int size); static int tcpip_get(COMSTACK h, char **buf, int *bufsize); static int tcpip_connect(COMSTACK h, void *address); static int tcpip_more(COMSTACK h); static int tcpip_rcvconnect(COMSTACK h); static int tcpip_bind(COMSTACK h, void *address, int mode); static int tcpip_listen(COMSTACK h, char *raddr, int *addrlen, int (*check_ip)(void *cd, const char *a, int len, int type), void *cd); static int tcpip_set_blocking(COMSTACK p, int blocking); #if HAVE_GETADDRINFO struct addrinfo *tcpip_getaddrinfo(const char *str, const char *port, int *ipv6_only); #endif static COMSTACK tcpip_accept(COMSTACK h); static const char *tcpip_addrstr(COMSTACK h); static void *tcpip_straddr(COMSTACK h, const char *str); #ifndef YAZ_SOCKLEN_T #define YAZ_SOCKLEN_T int #endif #if HAVE_GNUTLS_H struct tcpip_cred_ptr { gnutls_certificate_credentials_t xcred; int ref; }; #endif /* this state is used for both SSL and straight TCP/IP */ typedef struct tcpip_state { char *altbuf; /* alternate buffer for surplus data */ int altsize; /* size as xmalloced */ int altlen; /* length of data or 0 if none */ int written; /* -1 if we aren't writing */ int towrite; /* to verify against user input */ int (*complete)(const char *buf, int len); /* length/complete. */ char *bind_host; #if HAVE_GETADDRINFO struct addrinfo *ai; struct addrinfo *ai_connect; int ipv6_only; #if RESOLVER_THREAD int pipefd[2]; char *hoststr; const char *port; yaz_thread_t thread_id; #endif #else struct sockaddr_in addr; /* returned by cs_straddr */ #endif char buf[128]; /* returned by cs_addrstr */ #if HAVE_GNUTLS_H struct tcpip_cred_ptr *cred_ptr; gnutls_session_t session; char cert_fname[256]; int use_bye; #endif char *connect_request_buf; int connect_request_len; char *connect_response_buf; int connect_response_len; } tcpip_state; static int log_level = 0; static int tcpip_init(void) { static int log_level_set = 0; #ifdef WIN32 static int initialized = 0; #endif yaz_init_globals(); #ifdef WIN32 if (!initialized) { WORD requested; WSADATA wd; requested = MAKEWORD(1, 1); if (WSAStartup(requested, &wd)) return 0; initialized = 1; } #endif if (!log_level_set) { log_level = yaz_log_module_level("comstack"); log_level_set = 1; } return 1; } static struct tcpip_state *tcpip_state_create(void) { tcpip_state *sp = (struct tcpip_state *) xmalloc(sizeof(*sp)); sp->altbuf = 0; sp->altsize = sp->altlen = 0; sp->towrite = sp->written = -1; sp->complete = cs_complete_auto; sp->bind_host = 0; #if HAVE_GETADDRINFO sp->ai = 0; sp->ai_connect = 0; #if RESOLVER_THREAD sp->hoststr = 0; sp->pipefd[0] = sp->pipefd[1] = -1; sp->port = 0; #endif #endif #if HAVE_GNUTLS_H sp->cred_ptr = 0; sp->session = 0; strcpy(sp->cert_fname, "yaz.pem"); sp->use_bye = 0; #endif sp->connect_request_buf = 0; sp->connect_request_len = 0; sp->connect_response_buf = 0; sp->connect_response_len = 0; return sp; } /* * This function is always called through the cs_create() macro. * s >= 0: socket has already been established for us. */ COMSTACK tcpip_type(int s, int flags, int protocol, void *vp) { COMSTACK p; if (!tcpip_init()) return 0; if (!(p = (struct comstack *)xmalloc(sizeof(struct comstack)))) return 0; p->cprivate = tcpip_state_create(); p->flags = flags; p->io_pending = 0; p->iofile = s; p->type = tcpip_type; p->protocol = (enum oid_proto) protocol; p->f_connect = tcpip_connect; p->f_rcvconnect = tcpip_rcvconnect; p->f_get = tcpip_get; p->f_put = tcpip_put; p->f_close = tcpip_close; p->f_more = tcpip_more; p->f_bind = tcpip_bind; p->f_listen = tcpip_listen; p->f_accept = tcpip_accept; p->f_addrstr = tcpip_addrstr; p->f_straddr = tcpip_straddr; p->f_set_blocking = tcpip_set_blocking; p->max_recv_bytes = 128 * 1024 * 1024; p->state = s < 0 ? CS_ST_UNBND : CS_ST_IDLE; /* state of line */ p->event = CS_NONE; p->cerrno = 0; p->user = 0; yaz_log(log_level, "Created TCP/SSL comstack h=%p", p); return p; } static void connect_and_bind(COMSTACK p, const char *connect_host, const char *connect_auth, const char *bind_host) { if (bind_host) { tcpip_state *sp = (tcpip_state *) p->cprivate; char *cp; sp->bind_host = xmalloc(strlen(bind_host) + 4); strcpy(sp->bind_host, bind_host); cp = strrchr(sp->bind_host, ':'); if (!cp || cp[1] == '\0') strcat(sp->bind_host, ":0"); else strcpy(cp, ":0"); } if (connect_host) { tcpip_state *sp = (tcpip_state *) p->cprivate; char *cp; sp->connect_request_buf = (char *) xmalloc(strlen(connect_host) + 130); strcpy(sp->connect_request_buf, "CONNECT "); strcat(sp->connect_request_buf, connect_host); cp = strchr(sp->connect_request_buf, '/'); if (cp) *cp = '\0'; strcat(sp->connect_request_buf, " HTTP/1.0\r\n"); if (connect_auth && strlen(connect_auth) < 40) { strcat(sp->connect_request_buf, "Proxy-Authorization: Basic "); yaz_base64encode(connect_auth, sp->connect_request_buf + strlen(sp->connect_request_buf)); strcat(sp->connect_request_buf, "\r\n"); } strcat(sp->connect_request_buf, "\r\n"); sp->connect_request_len = strlen(sp->connect_request_buf); } } COMSTACK yaz_tcpip_create3(int s, int flags, int protocol, const char *connect_host, const char *connect_auth, const char *bind_host) { COMSTACK p = tcpip_type(s, flags, protocol, 0); if (!p) return 0; connect_and_bind(p, connect_host, 0, bind_host); return p; } COMSTACK yaz_tcpip_create2(int s, int flags, int protocol, const char *connect_host, const char *bind_host) { return yaz_tcpip_create3(s, flags, protocol, connect_host, 0, bind_host); } COMSTACK yaz_tcpip_create(int s, int flags, int protocol, const char *connect_host) { return yaz_tcpip_create2(s, flags, protocol, connect_host, 0); } #if HAVE_GNUTLS_H static void tcpip_create_cred(COMSTACK cs) { tcpip_state *sp = (tcpip_state *) cs->cprivate; sp->cred_ptr = (struct tcpip_cred_ptr *) xmalloc(sizeof(*sp->cred_ptr)); sp->cred_ptr->ref = 1; gnutls_certificate_allocate_credentials(&sp->cred_ptr->xcred); } #endif COMSTACK ssl_type(int s, int flags, int protocol, void *vp) { #if HAVE_GNUTLS_H tcpip_state *sp; COMSTACK p; p = tcpip_type(s, flags, protocol, 0); if (!p) return 0; p->type = ssl_type; sp = (tcpip_state *) p->cprivate; sp->session = (gnutls_session_t) vp; /* note: we don't handle already opened socket in SSL mode - yet */ return p; #else return 0; #endif } COMSTACK yaz_ssl_create(int s, int flags, int protocol, const char *connect_host, const char *connect_auth, const char *bind_host) { COMSTACK p = ssl_type(s, flags, protocol, 0); if (!p) return 0; connect_and_bind(p, connect_host, connect_auth, bind_host); return p; } #if HAVE_GNUTLS_H static int ssl_check_error(COMSTACK h, tcpip_state *sp, int res) { yaz_log(log_level, "ssl_check_error error=%d fatal=%d msg=%s", res, gnutls_error_is_fatal(res), gnutls_strerror(res)); if (res == GNUTLS_E_AGAIN || res == GNUTLS_E_INTERRUPTED) { int dir = gnutls_record_get_direction(sp->session); yaz_log(log_level, " -> incomplete dir=%d", dir); h->io_pending = dir ? CS_WANT_WRITE : CS_WANT_READ; return 1; } h->cerrno = CSERRORSSL; return 0; } #endif #if HAVE_GETADDRINFO /* resolve using getaddrinfo */ struct addrinfo *tcpip_getaddrinfo(const char *str, const char *port, int *ipv6_only) { struct addrinfo hints, *res; int error; char host[512], *p; hints.ai_flags = 0; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; hints.ai_addrlen = 0; hints.ai_addr = NULL; hints.ai_canonname = NULL; hints.ai_next = NULL; strncpy(host, str, sizeof(host)-1); host[sizeof(host)-1] = 0; if ((p = strrchr(host, ' '))) *p = 0; if ((p = strchr(host, '/'))) *p = 0; if ((p = strrchr(host, ':'))) { *p = '\0'; port = p+1; } if (!strcmp("@", host)) { hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_UNSPEC; error = getaddrinfo(0, port, &hints, &res); *ipv6_only = 0; } else if (!strcmp("@4", host)) { hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_INET; error = getaddrinfo(0, port, &hints, &res); *ipv6_only = -1; } else if (!strcmp("@6", host)) { hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_INET6; error = getaddrinfo(0, port, &hints, &res); *ipv6_only = 1; } else { error = getaddrinfo(host, port, &hints, &res); *ipv6_only = -1; } if (error) return 0; return res; } #else /* gethostbyname .. old systems */ static int tcpip_strtoaddr_ex(const char *str, struct sockaddr_in *add, int default_port) { struct hostent *hp; char *p, buf[512]; short int port = default_port; #ifdef WIN32 unsigned long tmpadd; #else in_addr_t tmpadd; #endif yaz_log(log_level, "tcpip_strtoaddr_ex %s", str ? str : "NULL"); add->sin_family = AF_INET; strncpy(buf, str, sizeof(buf)-1); buf[sizeof(buf)-1] = 0; if ((p = strchr(buf, '/'))) *p = 0; if ((p = strrchr(buf, ':'))) { *p = 0; port = atoi(p + 1); } add->sin_port = htons(port); if (!strcmp("@", buf)) { add->sin_addr.s_addr = INADDR_ANY; } else if ((tmpadd = inet_addr(buf)) != -1) { memcpy(&add->sin_addr.s_addr, &tmpadd, sizeof(struct in_addr)); } else if ((hp = gethostbyname(buf))) { memcpy(&add->sin_addr.s_addr, *hp->h_addr_list, sizeof(struct in_addr)); } else return 0; return 1; } #endif #if HAVE_GETADDRINFO static struct addrinfo *create_net_socket(COMSTACK h) { tcpip_state *sp = (tcpip_state *)h->cprivate; int s = -1; struct addrinfo *ai = 0; if (sp->ipv6_only >= 0) { for (ai = sp->ai; ai; ai = ai->ai_next) { if (ai->ai_family == AF_INET6) { s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (s != -1) break; } } } if (s == -1) { for (ai = sp->ai; ai; ai = ai->ai_next) { s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (s != -1) break; } } if (s == -1) return 0; yaz_log(log_level, "First socket fd=%d", s); assert(ai); h->iofile = s; if (ai->ai_family == AF_INET6 && sp->ipv6_only >= 0 && setsockopt(h->iofile, IPPROTO_IPV6, IPV6_V6ONLY, &sp->ipv6_only, sizeof(sp->ipv6_only))) return 0; if (sp->bind_host) { int r = -1; int ipv6_only = 0; struct addrinfo *ai; #ifndef WIN32 int one = 1; if (setsockopt(h->iofile, SOL_SOCKET, SO_REUSEADDR, (char*) &one, sizeof(one)) < 0) { h->cerrno = CSYSERR; return 0; } #endif ai = tcpip_getaddrinfo(sp->bind_host, "0", &ipv6_only); if (!ai) return 0; { struct addrinfo *a; for (a = ai; a; a = a->ai_next) { r = bind(h->iofile, a->ai_addr, a->ai_addrlen); if (!r) break; } } if (r) { h->cerrno = CSYSERR; freeaddrinfo(ai); return 0; } freeaddrinfo(ai); } if (!tcpip_set_blocking(h, h->flags)) return 0; return ai; } #if RESOLVER_THREAD void *resolver_thread(void *arg) { COMSTACK h = (COMSTACK) arg; tcpip_state *sp = (tcpip_state *)h->cprivate; sp->ipv6_only = 0; if (sp->ai) freeaddrinfo(sp->ai); sp->ai = tcpip_getaddrinfo(sp->hoststr, sp->port, &sp->ipv6_only); write(sp->pipefd[1], "1", 1); return 0; } static struct addrinfo *wait_resolver_thread(COMSTACK h) { tcpip_state *sp = (tcpip_state *)h->cprivate; char buf; read(sp->pipefd[0], &buf, 1); yaz_thread_join(&sp->thread_id, 0); close(sp->pipefd[0]); close(sp->pipefd[1]); sp->pipefd[0] = -1; h->iofile = -1; return create_net_socket(h); } #endif void *tcpip_straddr(COMSTACK h, const char *str) { tcpip_state *sp = (tcpip_state *)h->cprivate; const char *port = "210"; if (!tcpip_init()) return 0; if (h->protocol == PROTO_HTTP) { if (h->type == ssl_type) port = "443"; else port = "80"; } #if RESOLVER_THREAD if (h->flags & CS_FLAGS_DNS_NO_BLOCK) { if (sp->pipefd[0] != -1) return 0; if (pipe(sp->pipefd) == -1) return 0; sp->port = port; xfree(sp->hoststr); sp->hoststr = xstrdup(str); sp->thread_id = yaz_thread_create(resolver_thread, h); return sp->hoststr; } #endif if (sp->ai) freeaddrinfo(sp->ai); sp->ai = tcpip_getaddrinfo(str, port, &sp->ipv6_only); if (sp->ai && h->state == CS_ST_UNBND) { return create_net_socket(h); } return sp->ai; } #else void *tcpip_straddr(COMSTACK h, const char *str) { tcpip_state *sp = (tcpip_state *)h->cprivate; int port = 210; if (h->protocol == PROTO_HTTP) { if (h->type == ssl_type) port = 443; else port = 80; } if (!tcpip_init()) return 0; if (!tcpip_strtoaddr_ex(str, &sp->addr, port)) return 0; if (h->state == CS_ST_UNBND) { int s; s = socket(AF_INET, SOCK_STREAM, 0); if (s < 0) return 0; h->iofile = s; if (!tcpip_set_blocking(h, h->flags)) return 0; } return &sp->addr; } #endif int tcpip_more(COMSTACK h) { tcpip_state *sp = (tcpip_state *)h->cprivate; return sp->altlen && (*sp->complete)(sp->altbuf, sp->altlen); } static int cont_connect(COMSTACK h) { #if HAVE_GETADDRINFO tcpip_state *sp = (tcpip_state *)h->cprivate; struct addrinfo *ai = sp->ai_connect; while (ai && (ai = ai->ai_next)) { int s; s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (s != -1) { #if HAVE_GNUTLS_H if (h->type == ssl_type && sp->session) { gnutls_bye(sp->session, GNUTLS_SHUT_WR); gnutls_deinit(sp->session); sp->session = 0; } #endif #ifdef WIN32 closesocket(h->iofile); #else close(h->iofile); #endif yaz_log(log_level, "Other socket call fd=%d", s); h->state = CS_ST_UNBND; h->iofile = s; tcpip_set_blocking(h, h->flags); return tcpip_connect(h, ai); } } #endif h->cerrno = CSYSERR; return -1; } /* * connect(2) will block (sometimes) - nothing we can do short of doing * weird things like spawning subprocesses or threading or some weird junk * like that. */ int tcpip_connect(COMSTACK h, void *address) { #if HAVE_GETADDRINFO struct addrinfo *ai = (struct addrinfo *) address; tcpip_state *sp = (tcpip_state *)h->cprivate; #else struct sockaddr_in *add = (struct sockaddr_in *) address; #endif int r; yaz_log(log_level, "tcpip_connect h=%p", h); h->io_pending = 0; if (h->state != CS_ST_UNBND) { h->cerrno = CSOUTSTATE; return -1; } #if HAVE_GETADDRINFO #if RESOLVER_THREAD if (sp->pipefd[0] != -1) { if (h->flags & CS_FLAGS_BLOCKING) { ai = wait_resolver_thread(h); if (!ai) return -1; } else { h->event = CS_CONNECT; h->state = CS_ST_CONNECTING; h->io_pending = CS_WANT_READ; h->iofile = sp->pipefd[0]; return 1; } } #endif r = connect(h->iofile, ai->ai_addr, ai->ai_addrlen); sp->ai_connect = ai; #else r = connect(h->iofile, (struct sockaddr *) add, sizeof(*add)); #endif if (r < 0) { #ifdef WIN32 if (WSAGetLastError() == WSAEWOULDBLOCK) { h->event = CS_CONNECT; h->state = CS_ST_CONNECTING; h->io_pending = CS_WANT_WRITE; return 1; } #else if (yaz_errno() == EINPROGRESS) { yaz_log(log_level, "Pending fd=%d", h->iofile); h->event = CS_CONNECT; h->state = CS_ST_CONNECTING; h->io_pending = CS_WANT_WRITE|CS_WANT_READ; return 1; } #endif return cont_connect(h); } h->event = CS_CONNECT; h->state = CS_ST_CONNECTING; return tcpip_rcvconnect(h); } /* * nop */ int tcpip_rcvconnect(COMSTACK h) { tcpip_state *sp = (tcpip_state *)h->cprivate; yaz_log(log_level, "tcpip_rcvconnect h=%p", h); if (h->state == CS_ST_DATAXFER) return 0; #if HAVE_GETADDRINFO #if RESOLVER_THREAD if (sp->pipefd[0] != -1) { struct addrinfo *ai = wait_resolver_thread(h); if (!ai) return -1; h->state = CS_ST_UNBND; return tcpip_connect(h, ai); } #endif #endif if (h->state != CS_ST_CONNECTING) { h->cerrno = CSOUTSTATE; return -1; } if (sp->connect_request_buf) { int r; sp->complete = cs_complete_auto_head; if (sp->connect_request_len > 0) { r = tcpip_put(h, sp->connect_request_buf, sp->connect_request_len); yaz_log(log_level, "tcpip_rcvconnect connect put r=%d", r); h->event = CS_CONNECT; /* because tcpip_put sets it */ if (r) /* < 0 is error, 1 is in-complete */ return r; yaz_log(log_level, "tcpip_rcvconnect connect complete"); } sp->connect_request_len = 0; r = tcpip_get(h, &sp->connect_response_buf, &sp->connect_response_len); yaz_log(log_level, "tcpip_rcvconnect connect get r=%d", r); if (r == 1) return r; if (r <= 0) return -1; xfree(sp->connect_request_buf); sp->connect_request_buf = 0; sp->complete = cs_complete_auto; } #if HAVE_GNUTLS_H if (h->type == ssl_type && !sp->session) { tcpip_create_cred(h); gnutls_init(&sp->session, GNUTLS_CLIENT); sp->use_bye = 1; /* only say goodbye in client */ gnutls_set_default_priority(sp->session); gnutls_credentials_set (sp->session, GNUTLS_CRD_CERTIFICATE, sp->cred_ptr->xcred); SET_GNUTLS_SOCKET(sp->session, h->iofile); } if (sp->session) { int res = gnutls_handshake(sp->session); if (res < 0) { if (ssl_check_error(h, sp, res)) return 1; return cont_connect(h); } } #endif h->event = CS_DATA; h->state = CS_ST_DATAXFER; return 0; } static int tcpip_bind(COMSTACK h, void *address, int mode) { int r; tcpip_state *sp = (tcpip_state *)h->cprivate; #if HAVE_GETADDRINFO struct addrinfo *ai = (struct addrinfo *) address; #else struct sockaddr *addr = (struct sockaddr *)address; #endif #ifdef WIN32 BOOL one = 1; #else int one = 1; #endif yaz_log(log_level, "tcpip_bind h=%p", h); #if HAVE_GETADDRINFO #if RESOLVER_THREAD if (sp->pipefd[0] != -1) { ai = wait_resolver_thread(h); if (!ai) return -1; } #endif #endif #if HAVE_GNUTLS_H if (h->type == ssl_type && !sp->session) { int res; tcpip_create_cred(h); res = gnutls_certificate_set_x509_key_file(sp->cred_ptr->xcred, sp->cert_fname, sp->cert_fname, GNUTLS_X509_FMT_PEM); if (res != GNUTLS_E_SUCCESS) { yaz_log(log_level, "gnutls_certificate_set_x509_key_file r=%d fatal=%d msg=%s", res, gnutls_error_is_fatal(res), gnutls_strerror(res)); h->cerrno = CSERRORSSL; return -1; } } #endif #ifndef WIN32 if (setsockopt(h->iofile, SOL_SOCKET, SO_REUSEADDR, (char*) &one, sizeof(one)) < 0) { h->cerrno = CSYSERR; return -1; } #endif #if HAVE_GETADDRINFO r = bind(h->iofile, ai->ai_addr, ai->ai_addrlen); freeaddrinfo(sp->ai); sp->ai = 0; #else r = bind(h->iofile, addr, sizeof(struct sockaddr_in)); #endif if (r) { h->cerrno = CSYSERR; return -1; } /* Allow a maximum-sized backlog of waiting-to-connect clients */ if (mode == CS_SERVER && listen(h->iofile, SOMAXCONN) < 0) { h->cerrno = CSYSERR; return -1; } h->state = CS_ST_IDLE; h->event = CS_LISTEN; return 0; } int tcpip_listen(COMSTACK h, char *raddr, int *addrlen, int (*check_ip)(void *cd, const char *a, int len, int t), void *cd) { #ifdef WIN32 /* we don't get peer address on Windows (via accept) */ #else struct sockaddr_in addr; YAZ_SOCKLEN_T len = sizeof(addr); #endif yaz_log(log_level, "tcpip_listen h=%p", h); if (h->state != CS_ST_IDLE) { h->cerrno = CSOUTSTATE; return -1; } #ifdef WIN32 h->newfd = accept(h->iofile, 0, 0); #else h->newfd = accept(h->iofile, (struct sockaddr*)&addr, &len); #endif if (h->newfd < 0) { if ( #ifdef WIN32 WSAGetLastError() == WSAEWOULDBLOCK #else yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK || yaz_errno() == EAGAIN #endif #endif #endif ) h->cerrno = CSNODATA; else { shutdown(h->iofile, 0); /* SHUT_RD/SHUT_RECEIVE */ listen(h->iofile, SOMAXCONN); h->cerrno = CSYSERR; } return -1; } #ifdef WIN32 if (addrlen) *addrlen = 0; #else if (addrlen && (size_t) (*addrlen) >= sizeof(struct sockaddr_in)) memcpy(raddr, &addr, *addrlen = sizeof(struct sockaddr_in)); else if (addrlen) *addrlen = 0; if (check_ip && (*check_ip)(cd, (const char *) &addr, sizeof(addr), AF_INET)) { h->cerrno = CSDENY; #ifdef WIN32 closesocket(h->newfd); #else close(h->newfd); #endif h->newfd = -1; return -1; } #endif h->state = CS_ST_INCON; return 0; } COMSTACK tcpip_accept(COMSTACK h) { COMSTACK cnew; #ifdef WIN32 unsigned long tru = 1; #endif yaz_log(log_level, "tcpip_accept h=%p", h); if (h->state == CS_ST_INCON) { #if HAVE_GNUTLS_H tcpip_state *st = (tcpip_state *)h->cprivate; #endif tcpip_state *state = tcpip_state_create(); cnew = (COMSTACK) xmalloc(sizeof(*cnew)); memcpy(cnew, h, sizeof(*h)); cnew->iofile = h->newfd; cnew->io_pending = 0; cnew->cprivate = state; if (!tcpip_set_blocking(cnew, cnew->flags)) { h->cerrno = CSYSERR; if (h->newfd != -1) { #ifdef WIN32 closesocket(h->newfd); #else close(h->newfd); #endif h->newfd = -1; } xfree(state); xfree(cnew); return 0; } h->newfd = -1; cnew->state = CS_ST_ACCEPT; h->state = CS_ST_IDLE; #if HAVE_GNUTLS_H state->cred_ptr = st->cred_ptr; if (st->cred_ptr) { int res; (state->cred_ptr->ref)++; gnutls_init(&state->session, GNUTLS_SERVER); if (!state->session) { xfree(cnew); xfree(state); return 0; } res = gnutls_set_default_priority(state->session); if (res != GNUTLS_E_SUCCESS) { xfree(cnew); xfree(state); return 0; } res = gnutls_credentials_set(state->session, GNUTLS_CRD_CERTIFICATE, st->cred_ptr->xcred); if (res != GNUTLS_E_SUCCESS) { xfree(cnew); xfree(state); return 0; } SET_GNUTLS_SOCKET(state->session, cnew->iofile); } #endif h = cnew; } if (h->state == CS_ST_ACCEPT) { #if HAVE_GNUTLS_H tcpip_state *state = (tcpip_state *)h->cprivate; if (state->session) { int res = gnutls_handshake(state->session); if (res < 0) { if (ssl_check_error(h, state, res)) { yaz_log(log_level, "tcpip_accept gnutls_handshake interrupted"); return h; } yaz_log(log_level, "tcpip_accept gnutls_handshake failed"); cs_close(h); return 0; } } #endif } else { h->cerrno = CSOUTSTATE; return 0; } h->io_pending = 0; h->state = CS_ST_DATAXFER; h->event = CS_DATA; return h; } #define CS_TCPIP_BUFCHUNK 4096 /* * Return: -1 error, >1 good, len of buffer, ==1 incomplete buffer, * 0=connection closed. */ int tcpip_get(COMSTACK h, char **buf, int *bufsize) { tcpip_state *sp = (tcpip_state *)h->cprivate; char *tmpc; int tmpi, berlen, rest, req, tomove; int hasread = 0, res; yaz_log(log_level, "tcpip_get h=%p bufsize=%d", h, *bufsize); if (sp->altlen) /* switch buffers */ { yaz_log(log_level, " %d bytes in altbuf (%p)", sp->altlen, sp->altbuf); tmpc = *buf; tmpi = *bufsize; *buf = sp->altbuf; *bufsize = sp->altsize; hasread = sp->altlen; sp->altlen = 0; sp->altbuf = tmpc; sp->altsize = tmpi; } h->io_pending = 0; while (!(berlen = (*sp->complete)(*buf, hasread))) { if (!*bufsize) { if (!(*buf = (char *)xmalloc(*bufsize = CS_TCPIP_BUFCHUNK))) { h->cerrno = CSYSERR; return -1; } } else if (*bufsize - hasread < CS_TCPIP_BUFCHUNK) if (!(*buf =(char *)xrealloc(*buf, *bufsize *= 2))) { h->cerrno = CSYSERR; return -1; } #if HAVE_GNUTLS_H if (sp->session) { res = gnutls_record_recv(sp->session, *buf + hasread, CS_TCPIP_BUFCHUNK); if (res == 0) { yaz_log(log_level, "gnutls_record_recv returned 0"); return 0; } else if (res < 0) { if (ssl_check_error(h, sp, res)) break; return -1; } } else #endif { #ifdef __sun__ yaz_set_errno( 0 ); /* unfortunatly, sun sometimes forgets to set errno in recv when EWOULDBLOCK etc. would be required (res = -1) */ #endif res = recv(h->iofile, *buf + hasread, CS_TCPIP_BUFCHUNK, 0); yaz_log(log_level, " recv res=%d, hasread=%d", res, hasread); if (res < 0) { yaz_log(log_level, " recv errno=%d, (%s)", yaz_errno(), strerror(yaz_errno())); #ifdef WIN32 if (WSAGetLastError() == WSAEWOULDBLOCK) { h->io_pending = CS_WANT_READ; break; } else { h->cerrno = CSYSERR; return -1; } #else if (yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK || yaz_errno() == EAGAIN #endif #endif || yaz_errno() == EINPROGRESS #ifdef __sun__ || yaz_errno() == ENOENT /* Sun's sometimes set errno to this */ #endif ) { h->io_pending = CS_WANT_READ; break; } else if (yaz_errno() == 0) continue; else { h->cerrno = CSYSERR; return -1; } #endif } else if (!res) return hasread; } hasread += res; if (hasread > h->max_recv_bytes) { h->cerrno = CSBUFSIZE; return -1; } } yaz_log(log_level, " Out of read loop with hasread=%d, berlen=%d", hasread, berlen); /* move surplus buffer (or everything if we didn't get a BER rec.) */ if (hasread > berlen) { tomove = req = hasread - berlen; rest = tomove % CS_TCPIP_BUFCHUNK; if (rest) req += CS_TCPIP_BUFCHUNK - rest; if (!sp->altbuf) { if (!(sp->altbuf = (char *)xmalloc(sp->altsize = req))) { h->cerrno = CSYSERR; return -1; } } else if (sp->altsize < req) if (!(sp->altbuf =(char *)xrealloc(sp->altbuf, sp->altsize = req))) { h->cerrno = CSYSERR; return -1; } yaz_log(log_level, " Moving %d bytes to altbuf(%p)", tomove, sp->altbuf); memcpy(sp->altbuf, *buf + berlen, sp->altlen = tomove); } if (berlen < CS_TCPIP_BUFCHUNK - 1) *(*buf + berlen) = '\0'; return berlen ? berlen : 1; } /* * Returns 1, 0 or -1 * In nonblocking mode, you must call again with same buffer while * return value is 1. */ int tcpip_put(COMSTACK h, char *buf, int size) { int res; struct tcpip_state *state = (struct tcpip_state *)h->cprivate; yaz_log(log_level, "tcpip_put h=%p size=%d", h, size); h->io_pending = 0; h->event = CS_DATA; if (state->towrite < 0) { state->towrite = size; state->written = 0; } else if (state->towrite != size) { h->cerrno = CSWRONGBUF; return -1; } while (state->towrite > state->written) { #if HAVE_GNUTLS_H if (state->session) { res = gnutls_record_send(state->session, buf + state->written, size - state->written); if (res <= 0) { if (ssl_check_error(h, state, res)) return 1; return -1; } } else #endif { if ((res = send(h->iofile, buf + state->written, size - state->written, #ifdef MSG_NOSIGNAL MSG_NOSIGNAL #else 0 #endif )) < 0) { if ( #ifdef WIN32 WSAGetLastError() == WSAEWOULDBLOCK #else yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK || yaz_errno() == EAGAIN #endif #endif #ifdef __sun__ || yaz_errno() == ENOENT /* Sun's sometimes set errno to this value! */ #endif || yaz_errno() == EINPROGRESS #endif ) { yaz_log(log_level, " Flow control stop"); h->io_pending = CS_WANT_WRITE; return 1; } if (h->flags & CS_FLAGS_BLOCKING) { h->cerrno = CSYSERR; return -1; } else return cont_connect(h); } } state->written += res; yaz_log(log_level, " Wrote %d, written=%d, nbytes=%d", res, state->written, size); } state->towrite = state->written = -1; yaz_log(log_level, " Ok"); return 0; } void tcpip_close(COMSTACK h) { tcpip_state *sp = (struct tcpip_state *)h->cprivate; yaz_log(log_level, "tcpip_close: h=%p", h); xfree(sp->bind_host); #if HAVE_GETADDRINFO #if RESOLVER_THREAD if (sp->pipefd[0] != -1) { yaz_thread_join(&sp->thread_id, 0); close(sp->pipefd[0]); close(sp->pipefd[1]); h->iofile = -1; } #endif #endif if (h->iofile != -1) { #if HAVE_GNUTLS_H if (sp->session && sp->use_bye) { yaz_log(log_level, "tcpip_close: gnutls_bye"); gnutls_bye(sp->session, GNUTLS_SHUT_WR); } #endif #ifdef WIN32 closesocket(h->iofile); #else close(h->iofile); #endif } if (sp->altbuf) xfree(sp->altbuf); #if HAVE_GNUTLS_H if (sp->session) { gnutls_deinit(sp->session); } if (sp->cred_ptr) { assert(sp->cred_ptr->ref > 0); if (--(sp->cred_ptr->ref) == 0) { yaz_log(log_level, "tcpip_close: removed credentials h=%p", sp->cred_ptr->xcred); gnutls_certificate_free_credentials(sp->cred_ptr->xcred); xfree(sp->cred_ptr); } sp->cred_ptr = 0; } #endif #if HAVE_GETADDRINFO if (sp->ai) freeaddrinfo(sp->ai); #if RESOLVER_THREAD xfree(sp->hoststr); #endif #endif xfree(sp->connect_request_buf); xfree(sp->connect_response_buf); xfree(sp); xfree(h); } const char *tcpip_addrstr(COMSTACK h) { tcpip_state *sp = (struct tcpip_state *)h->cprivate; char *r = 0, *buf = sp->buf; #if HAVE_GETADDRINFO char host[120]; struct sockaddr_storage addr; YAZ_SOCKLEN_T len = sizeof(addr); if (getpeername(h->iofile, (struct sockaddr *)&addr, &len) < 0) { h->cerrno = CSYSERR; return 0; } if (getnameinfo((struct sockaddr *) &addr, len, host, sizeof(host)-1, 0, 0, (h->flags & CS_FLAGS_NUMERICHOST) ? NI_NUMERICHOST : 0)) { r = "unknown"; } else r = host; #else struct sockaddr_in addr; YAZ_SOCKLEN_T len = sizeof(addr); struct hostent *host; if (getpeername(h->iofile, (struct sockaddr*) &addr, &len) < 0) { h->cerrno = CSYSERR; return 0; } if (!(h->flags & CS_FLAGS_NUMERICHOST)) { if ((host = gethostbyaddr((char*)&addr.sin_addr, sizeof(addr.sin_addr), AF_INET))) r = (char*) host->h_name; } if (!r) r = inet_ntoa(addr.sin_addr); #endif if (h->protocol == PROTO_HTTP) sprintf(buf, "http:%s", r); else sprintf(buf, "tcp:%s", r); #if HAVE_GNUTLS_H if (sp->session) { if (h->protocol == PROTO_HTTP) sprintf(buf, "https:%s", r); else sprintf(buf, "ssl:%s", r); } #endif return buf; } static int tcpip_set_blocking(COMSTACK p, int flags) { unsigned long flag; #ifdef WIN32 flag = (flags & CS_FLAGS_BLOCKING) ? 0 : 1; if (ioctlsocket(p->iofile, FIONBIO, &flag) < 0) return 0; #else flag = fcntl(p->iofile, F_GETFL, 0); if (flags & CS_FLAGS_BLOCKING) flag = flag & ~O_NONBLOCK; /* blocking */ else { flag = flag | O_NONBLOCK; /* non-blocking */ signal(SIGPIPE, SIG_IGN); } if (fcntl(p->iofile, F_SETFL, flag) < 0) return 0; #endif p->flags = flags; return 1; } #if HAVE_GNUTLS_H /* gnutls_x509_crt_print appeared in 1.7.6. Memory leaks were fixed in 1.7.9. GNUTLS_CRT_PRINT_FULL appeared in 2.4.0. */ #if GNUTLS_VERSION_NUMBER >= 0x020400 #define USE_GNUTLS_X509_CRT_PRINT 1 #else #define USE_GNUTLS_X509_CRT_PRINT 0 #endif #if USE_GNUTLS_X509_CRT_PRINT #else static const char *bin2hex(const void *bin, size_t bin_size) { static char printable[110]; const unsigned char *_bin = bin; char *print; size_t i; if (bin_size > 50) bin_size = 50; print = printable; for (i = 0; i < bin_size; i++) { sprintf(print, "%.2x ", _bin[i]); print += 2; } return printable; } static void x509_crt_print(gnutls_x509_crt_t cert) { time_t expiration_time, activation_time; size_t size; char serial[40]; char dn[256]; unsigned int algo, bits; expiration_time = gnutls_x509_crt_get_expiration_time(cert); activation_time = gnutls_x509_crt_get_activation_time(cert); printf("\tCertificate is valid since: %s", ctime(&activation_time)); printf("\tCertificate expires: %s", ctime(&expiration_time)); /* Print the serial number of the certificate. */ size = sizeof(serial); gnutls_x509_crt_get_serial(cert, serial, &size); printf("\tCertificate serial number: %s\n", bin2hex(serial, size)); /* Extract some of the public key algorithm's parameters */ algo = gnutls_x509_crt_get_pk_algorithm(cert, &bits); printf("Certificate public key: %s", gnutls_pk_algorithm_get_name(algo)); /* Print the version of the X.509 certificate. */ printf("\tCertificate version: #%d\n", gnutls_x509_crt_get_version(cert)); size = sizeof(dn); gnutls_x509_crt_get_dn(cert, dn, &size); printf("\tDN: %s\n", dn); size = sizeof(dn); gnutls_x509_crt_get_issuer_dn(cert, dn, &size); printf("\tIssuer's DN: %s\n", dn); } #endif #endif void cs_print_session_info(COMSTACK cs) { #if HAVE_GNUTLS_H struct tcpip_state *sp = (struct tcpip_state *) cs->cprivate; if (cs->type == ssl_type && sp->session) { const gnutls_datum_t *cert_list; unsigned i, cert_list_size; if (gnutls_certificate_type_get(sp->session) != GNUTLS_CRT_X509) return; printf("X509 certificate\n"); cert_list = gnutls_certificate_get_peers(sp->session, &cert_list_size); printf("Peer provided %u certificates\n", cert_list_size); for (i = 0; i < cert_list_size; i++) { gnutls_x509_crt_t cert; #if USE_GNUTLS_X509_CRT_PRINT int ret; gnutls_datum_t cinfo; #endif gnutls_x509_crt_init(&cert); gnutls_x509_crt_import(cert, &cert_list[i], GNUTLS_X509_FMT_DER); printf("Certificate info %u:\n", i + 1); #if USE_GNUTLS_X509_CRT_PRINT ret = gnutls_x509_crt_print(cert, GNUTLS_CRT_PRINT_FULL, &cinfo); if (ret == 0) { printf("\t%s\n", cinfo.data); gnutls_free(cinfo.data); } #else x509_crt_print(cert); #endif gnutls_x509_crt_deinit(cert); } } #endif } void *cs_get_ssl(COMSTACK cs) { /* doesn't do anything for GNUTLS */ return 0; } int cs_set_ssl_ctx(COMSTACK cs, void *ctx) { #if HAVE_GNUTLS_H if (cs && cs->type == ssl_type) { /* doesn't do anything for GNUTLS */ return 1; } #endif return 0; } int cs_set_ssl_certificate_file(COMSTACK cs, const char *fname) { #if HAVE_GNUTLS_H if (cs && cs->type == ssl_type) { struct tcpip_state *sp = (struct tcpip_state *) cs->cprivate; strncpy(sp->cert_fname, fname, sizeof(sp->cert_fname)-1); sp->cert_fname[sizeof(sp->cert_fname)-1] = '\0'; return 1; } #endif return 0; } int cs_get_peer_certificate_x509(COMSTACK cs, char **buf, int *len) { #if HAVE_GNUTLS_H #if USE_GNUTLS_X509_CRT_PRINT struct tcpip_state *sp = (struct tcpip_state *) cs->cprivate; if (cs->type == ssl_type && sp->session) { const gnutls_datum_t *cert_list; unsigned cert_list_size; if (gnutls_certificate_type_get(sp->session) != GNUTLS_CRT_X509) return 0; cert_list = gnutls_certificate_get_peers(sp->session, &cert_list_size); if (cert_list_size > 0) { gnutls_x509_crt_t cert; int ret; gnutls_datum_t cinfo; gnutls_x509_crt_init(&cert); gnutls_x509_crt_import(cert, &cert_list[0], GNUTLS_X509_FMT_DER); ret = gnutls_x509_crt_print(cert, GNUTLS_CRT_PRINT_FULL, &cinfo); if (ret == 0) { *buf = xstrdup((char *) cinfo.data); *len = strlen(*buf); gnutls_free(cinfo.data); gnutls_x509_crt_deinit(cert); return 1; } gnutls_x509_crt_deinit(cert); } } #endif #endif return 0; } int cs_set_head_only(COMSTACK cs, int head_only) { if (cs->type == tcpip_type || cs->type == ssl_type) { tcpip_state *sp = (tcpip_state *)cs->cprivate; if (head_only) sp->complete = cs_complete_auto_head; else sp->complete = cs_complete_auto; return 0; } cs->cerrno = CS_ST_INCON; return -1; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cqlutil.c0000644000175000017500000001507313265142510011747 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cqlutil.c * \brief Implements CQL tree node utilities. */ #if HAVE_CONFIG_H #include #endif #include #include #include void cql_fputs(const char *buf, void *client_data) { FILE *f = (FILE *) client_data; fputs(buf, f); } struct cql_node *cql_node_dup(NMEM nmem, struct cql_node *cp) { struct cql_node *cn = 0; if (!cp) return 0; switch (cp->which) { case CQL_NODE_ST: cn = cql_node_mk_sc(nmem, cp->u.st.index, cp->u.st.relation, cp->u.st.term); cn->u.st.modifiers = cql_node_dup(nmem, cp->u.st.modifiers); cn->u.st.index_uri = cp->u.st.index_uri ? nmem_strdup(nmem, cp->u.st.index_uri) : 0; cn->u.st.relation_uri = cp->u.st.relation_uri ? nmem_strdup(nmem, cp->u.st.relation_uri) : 0; break; case CQL_NODE_BOOL: cn = cql_node_mk_boolean(nmem, cp->u.boolean.value); cn->u.boolean.left = cql_node_dup(nmem, cp->u.boolean.left); cn->u.boolean.right = cql_node_dup(nmem, cp->u.boolean.right); break; case CQL_NODE_SORT: cn = cql_node_mk_sort(nmem, cp->u.sort.index, cp->u.sort.modifiers); cn->u.sort.next = cql_node_dup(nmem, cp->u.sort.next); cn->u.sort.search = cql_node_dup(nmem, cp->u.sort.search); } return cn; } struct cql_node *cql_node_mk_sc(NMEM nmem, const char *index, const char *relation, const char *term) { struct cql_node *p = (struct cql_node *) nmem_malloc(nmem, sizeof(*p)); p->which = CQL_NODE_ST; p->u.st.index = 0; if (index) p->u.st.index = nmem_strdup(nmem, index); p->u.st.index_uri = 0; p->u.st.term = 0; if (term) p->u.st.term = nmem_strdup(nmem, term); p->u.st.relation = 0; if (relation) p->u.st.relation = nmem_strdup(nmem, relation); p->u.st.relation_uri = 0; p->u.st.modifiers = 0; p->u.st.extra_terms = 0; return p; } struct cql_node *cql_node_mk_boolean(NMEM nmem, const char *op) { struct cql_node *p = (struct cql_node *) nmem_malloc(nmem, sizeof(*p)); p->which = CQL_NODE_BOOL; p->u.boolean.value = 0; if (op) p->u.boolean.value = nmem_strdup(nmem, op); p->u.boolean.left = 0; p->u.boolean.right = 0; p->u.boolean.modifiers = 0; return p; } struct cql_node *cql_node_mk_sort(NMEM nmem, const char *index, struct cql_node *modifiers) { struct cql_node *p = (struct cql_node *) nmem_malloc(nmem, sizeof(*p)); p->which = CQL_NODE_SORT; p->u.sort.index = 0; if (index) p->u.sort.index = nmem_strdup(nmem, index); p->u.sort.modifiers = modifiers; p->u.sort.next = 0; p->u.sort.search = 0; return p; } const char *cql_uri(void) { return "info:srw/cql-context-set/1/cql-v1.2"; } struct cql_node *cql_apply_prefix(NMEM nmem, struct cql_node *n, const char *prefix, const char *uri) { if (n->which == CQL_NODE_ST) { if (!n->u.st.index_uri && n->u.st.index) { /* not yet resolved.. */ const char *cp = strchr(n->u.st.index, '.'); if (prefix && cp && strlen(prefix) == (size_t) (cp - n->u.st.index) && !cql_strncmp(n->u.st.index, prefix, strlen(prefix))) { char *nval = nmem_strdup(nmem, cp+1); n->u.st.index_uri = nmem_strdup(nmem, uri); n->u.st.index = nval; } else if (!prefix && !cp) { n->u.st.index_uri = nmem_strdup(nmem, uri); } } if (!n->u.st.relation_uri && n->u.st.relation) { const char *cp = strchr(n->u.st.relation, '.'); if (prefix && cp && strlen(prefix) == (size_t)(cp - n->u.st.relation) && !cql_strncmp(n->u.st.relation, prefix, strlen(prefix))) { char *nval = nmem_strdup(nmem, cp+1); n->u.st.relation_uri = nmem_strdup(nmem, uri); n->u.st.relation = nval; } } struct cql_node *mod; for (mod = n->u.st.modifiers; mod; mod = mod->u.st.modifiers) { if (!mod->u.st.index_uri && mod->u.st.index) { const char *cp = strchr(mod->u.st.index, '.'); if (prefix && cp && strlen(prefix) == (size_t) (cp - mod->u.st.index) && !cql_strncmp(mod->u.st.index, prefix, strlen(prefix))) { char *nval = nmem_strdup(nmem, cp+1); mod->u.st.index_uri = nmem_strdup(nmem, uri); mod->u.st.index = nval; } } } } else if (n->which == CQL_NODE_BOOL) { cql_apply_prefix(nmem, n->u.boolean.left, prefix, uri); cql_apply_prefix(nmem, n->u.boolean.right, prefix, uri); } else if (n->which == CQL_NODE_SORT) { cql_apply_prefix(nmem, n->u.sort.search, prefix, uri); } return n; } void cql_node_destroy(struct cql_node *cn) { if (!cn) return; switch (cn->which) { case CQL_NODE_ST: cql_node_destroy(cn->u.st.modifiers); break; case CQL_NODE_BOOL: cql_node_destroy(cn->u.boolean.left); cql_node_destroy(cn->u.boolean.right); cql_node_destroy(cn->u.boolean.modifiers); break; case CQL_NODE_SORT: cql_node_destroy(cn->u.sort.search); cql_node_destroy(cn->u.sort.next); cql_node_destroy(cn->u.sort.modifiers); } } int cql_strcmp(const char *s1, const char *s2) { while (*s1 && *s2) { int c1 = *s1++; int c2 = *s2++; if (c1 >= 'A' && c1 <= 'Z') c1 = c1 + ('a' - 'A'); if (c2 >= 'A' && c2 <= 'Z') c2 = c2 + ('a' - 'A'); if (c1 != c2) return c1 - c2; } return *s1 - *s2; } int cql_strncmp(const char *s1, const char *s2, size_t n) { while (*s1 && *s2 && n) { int c1 = *s1++; int c2 = *s2++; if (c1 >= 'A' && c1 <= 'Z') c1 = c1 + ('a' - 'A'); if (c2 >= 'A' && c2 <= 'Z') c2 = c2 + ('a' - 'A'); if (c1 != c2) return c1 - c2; --n; } if (!n) return 0; return *s1 - *s2; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ill-core.c0000644000175000017500000021277413273126163012014 00000000000000/** \file ill-core.c \brief ASN.1 Module ISO-10161-ILL-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int ill_APDU(ODR o, ILL_APDU **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, ILL_APDU_ILL_Request, (Odr_fun) ill_Request, "illRequest"}, {-1, -1, -1, ILL_APDU_Forward_Notification, (Odr_fun) ill_Forward_Notification, "Forward_Notification"}, {-1, -1, -1, ILL_APDU_Shipped, (Odr_fun) ill_Shipped, "Shipped"}, {-1, -1, -1, ILL_APDU_ILL_Answer, (Odr_fun) ill_Answer, "illAnswer"}, {-1, -1, -1, ILL_APDU_Conditional_Reply, (Odr_fun) ill_Conditional_Reply, "Conditional_Reply"}, {-1, -1, -1, ILL_APDU_Cancel, (Odr_fun) ill_Cancel, "Cancel"}, {-1, -1, -1, ILL_APDU_Cancel_Reply, (Odr_fun) ill_Cancel_Reply, "Cancel_Reply"}, {-1, -1, -1, ILL_APDU_Received, (Odr_fun) ill_Received, "Received"}, {-1, -1, -1, ILL_APDU_Recall, (Odr_fun) ill_Recall, "Recall"}, {-1, -1, -1, ILL_APDU_Returned, (Odr_fun) ill_Returned, "Returned"}, {-1, -1, -1, ILL_APDU_Checked_In, (Odr_fun) ill_Checked_In, "Checked_In"}, {-1, -1, -1, ILL_APDU_Overdue, (Odr_fun) ill_Overdue, "Overdue"}, {-1, -1, -1, ILL_APDU_Renew, (Odr_fun) ill_Renew, "Renew"}, {-1, -1, -1, ILL_APDU_Renew_Answer, (Odr_fun) ill_Renew_Answer, "Renew_Answer"}, {-1, -1, -1, ILL_APDU_Lost, (Odr_fun) ill_Lost, "Lost"}, {-1, -1, -1, ILL_APDU_Damaged, (Odr_fun) ill_Damaged, "Damaged"}, {-1, -1, -1, ILL_APDU_Message, (Odr_fun) ill_Message, "Message"}, {-1, -1, -1, ILL_APDU_Status_Query, (Odr_fun) ill_Status_Query, "Status_Query"}, {-1, -1, -1, ILL_APDU_Status_Or_Error_Report, (Odr_fun) ill_Status_Or_Error_Report, "Status_Or_Error_Report"}, {-1, -1, -1, ILL_APDU_Expired, (Odr_fun) ill_Expired, "Expired"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Request(ODR o, ILL_Request **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 1, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Request *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_Transaction_Type, &(*p)->transaction_type, ODR_CONTEXT, 5, 0, "transaction_type") && odr_implicit_tag(o, ill_Delivery_Address, &(*p)->delivery_address, ODR_CONTEXT, 6, 1, "delivery_address") && ill_Delivery_Service(o, &(*p)->delivery_service, 1, "delivery_service") && odr_implicit_tag(o, ill_Delivery_Address, &(*p)->billing_address, ODR_CONTEXT, 8, 1, "billing_address") && odr_implicit_settag(o, ODR_CONTEXT, 9) && odr_sequence_of(o, (Odr_fun) ill_Service_Type, &(*p)->iLL_service_type, &(*p)->num_iLL_service_type, "iLL_service_type") && odr_explicit_tag(o, odr_external, &(*p)->responder_specific_service, ODR_CONTEXT, 10, 1, "responder_specific_service") && odr_implicit_tag(o, ill_Requester_Optional_Messages_Type, &(*p)->requester_optional_messages, ODR_CONTEXT, 11, 0, "requester_optional_messages") && odr_implicit_tag(o, ill_Search_Type, &(*p)->search_type, ODR_CONTEXT, 12, 1, "search_type") && odr_implicit_settag(o, ODR_CONTEXT, 13) && (odr_sequence_of(o, (Odr_fun) ill_Supply_Medium_Info_Type, &(*p)->supply_medium_info_type, &(*p)->num_supply_medium_info_type, "supply_medium_info_type") || odr_ok(o)) && odr_implicit_tag(o, ill_Place_On_Hold_Type, &(*p)->place_on_hold, ODR_CONTEXT, 14, 0, "place_on_hold") && odr_implicit_tag(o, ill_Client_Id, &(*p)->client_id, ODR_CONTEXT, 15, 1, "client_id") && odr_implicit_tag(o, ill_Item_Id, &(*p)->item_id, ODR_CONTEXT, 16, 0, "item_id") && odr_implicit_tag(o, ill_Supplemental_Item_Description, &(*p)->supplemental_item_description, ODR_CONTEXT, 17, 1, "supplemental_item_description") && odr_implicit_tag(o, ill_Cost_Info_Type, &(*p)->cost_info_type, ODR_CONTEXT, 18, 1, "cost_info_type") && odr_explicit_tag(o, ill_String, &(*p)->copyright_compliance, ODR_CONTEXT, 19, 1, "copyright_compliance") && odr_implicit_tag(o, ill_Third_Party_Info_Type, &(*p)->third_party_info_type, ODR_CONTEXT, 20, 1, "third_party_info_type") && odr_implicit_tag(o, odr_bool, &(*p)->retry_flag, ODR_CONTEXT, 21, 0, "retry_flag") && odr_implicit_tag(o, odr_bool, &(*p)->forward_flag, ODR_CONTEXT, 22, 0, "forward_flag") && odr_explicit_tag(o, ill_String, &(*p)->requester_note, ODR_CONTEXT, 46, 1, "requester_note") && odr_explicit_tag(o, ill_String, &(*p)->forward_note, ODR_CONTEXT, 47, 1, "forward_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->iLL_request_extensions, &(*p)->num_iLL_request_extensions, "iLL_request_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Forward_Notification(ODR o, ILL_Forward_Notification **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 2, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Forward_Notification *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 0, "responder_id") && odr_implicit_tag(o, ill_System_Address, &(*p)->responder_address, ODR_CONTEXT, 24, 1, "responder_address") && odr_implicit_tag(o, ill_System_Id, &(*p)->intermediary_id, ODR_CONTEXT, 25, 0, "intermediary_id") && odr_explicit_tag(o, ill_String, &(*p)->notification_note, ODR_CONTEXT, 48, 1, "notification_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->forward_notification_extensions, &(*p)->num_forward_notification_extensions, "forward_notification_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Shipped(ODR o, ILL_Shipped **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 3, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Shipped *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_System_Address, &(*p)->responder_address, ODR_CONTEXT, 24, 1, "responder_address") && odr_implicit_tag(o, ill_System_Id, &(*p)->intermediary_id, ODR_CONTEXT, 25, 1, "intermediary_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->supplier_id, ODR_CONTEXT, 26, 1, "supplier_id") && odr_implicit_tag(o, ill_Client_Id, &(*p)->client_id, ODR_CONTEXT, 15, 1, "client_id") && odr_implicit_tag(o, ill_Transaction_Type, &(*p)->transaction_type, ODR_CONTEXT, 5, 0, "transaction_type") && odr_implicit_tag(o, ill_Supplemental_Item_Description, &(*p)->supplemental_item_description, ODR_CONTEXT, 17, 1, "supplemental_item_description") && odr_implicit_tag(o, ill_Shipped_Service_Type, &(*p)->shipped_service_type, ODR_CONTEXT, 27, 0, "shipped_service_type") && odr_implicit_tag(o, ill_Responder_Optional_Messages_Type, &(*p)->responder_optional_messages, ODR_CONTEXT, 28, 1, "responder_optional_messages") && odr_implicit_tag(o, ill_Supply_Details, &(*p)->supply_details, ODR_CONTEXT, 29, 0, "supply_details") && odr_implicit_tag(o, ill_Postal_Address, &(*p)->return_to_address, ODR_CONTEXT, 30, 1, "return_to_address") && odr_explicit_tag(o, ill_String, &(*p)->responder_note, ODR_CONTEXT, 46, 1, "responder_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->shipped_extensions, &(*p)->num_shipped_extensions, "shipped_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Answer(ODR o, ILL_Answer **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 1, ILL_Answer_conditional_results, (Odr_fun) ill_Conditional_Results, "conditional_results"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, ILL_Answer_retry_results, (Odr_fun) ill_Retry_Results, "retry_results"}, {ODR_EXPLICIT, ODR_CONTEXT, 3, ILL_Answer_unfilled_results, (Odr_fun) ill_Unfilled_Results, "unfilled_results"}, {ODR_EXPLICIT, ODR_CONTEXT, 4, ILL_Answer_locations_results, (Odr_fun) ill_Locations_Results, "locations_results"}, {ODR_EXPLICIT, ODR_CONTEXT, 5, ILL_Answer_will_supply_results, (Odr_fun) ill_Will_Supply_Results, "will_supply_results"}, {ODR_EXPLICIT, ODR_CONTEXT, 6, ILL_Answer_hold_placed_results, (Odr_fun) ill_Hold_Placed_Results, "hold_placed_results"}, {ODR_EXPLICIT, ODR_CONTEXT, 7, ILL_Answer_estimate_results, (Odr_fun) ill_Estimate_Results, "estimate_results"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_constructed_begin(o, p, ODR_APPLICATION, 4, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Answer *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_Transaction_Results, &(*p)->transaction_results, ODR_CONTEXT, 31, 0, "transaction_results") && ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 32, "results_explanation") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_explicit_tag(o, odr_external, &(*p)->responder_specific_results, ODR_CONTEXT, 33, 1, "responder_specific_results") && odr_implicit_tag(o, ill_Supplemental_Item_Description, &(*p)->supplemental_item_description, ODR_CONTEXT, 17, 1, "supplemental_item_description") && odr_implicit_tag(o, ill_Send_To_List_Type, &(*p)->send_to_list, ODR_CONTEXT, 23, 1, "send_to_list") && odr_implicit_tag(o, ill_Already_Tried_List_Type, &(*p)->already_tried_list, ODR_CONTEXT, 34, 1, "already_tried_list") && odr_implicit_tag(o, ill_Responder_Optional_Messages_Type, &(*p)->responder_optional_messages, ODR_CONTEXT, 28, 1, "responder_optional_messages") && odr_explicit_tag(o, ill_String, &(*p)->responder_note, ODR_CONTEXT, 46, 1, "responder_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->ill_answer_extensions, &(*p)->num_ill_answer_extensions, "ill_answer_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Conditional_Reply(ODR o, ILL_Conditional_Reply **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 5, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Conditional_Reply *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, odr_bool, &(*p)->answer, ODR_CONTEXT, 35, 0, "answer") && odr_explicit_tag(o, ill_String, &(*p)->requester_note, ODR_CONTEXT, 46, 1, "requester_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->conditional_reply_extensions, &(*p)->num_conditional_reply_extensions, "conditional_reply_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Cancel(ODR o, ILL_Cancel **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 6, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Cancel *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_explicit_tag(o, ill_String, &(*p)->requester_note, ODR_CONTEXT, 46, 1, "requester_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->cancel_extensions, &(*p)->num_cancel_extensions, "cancel_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Cancel_Reply(ODR o, ILL_Cancel_Reply **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 7, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Cancel_Reply *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, odr_bool, &(*p)->answer, ODR_CONTEXT, 35, 0, "answer") && odr_explicit_tag(o, ill_String, &(*p)->responder_note, ODR_CONTEXT, 46, 1, "responder_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->cancel_reply_extensions, &(*p)->num_cancel_reply_extensions, "cancel_reply_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Received(ODR o, ILL_Received **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 8, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Received *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->supplier_id, ODR_CONTEXT, 26, 1, "supplier_id") && odr_implicit_tag(o, ill_Supplemental_Item_Description, &(*p)->supplemental_item_description, ODR_CONTEXT, 17, 1, "supplemental_item_description") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->date_received, ODR_CONTEXT, 36, 0, "date_received") && odr_implicit_tag(o, ill_Shipped_Service_Type, &(*p)->shipped_service_type, ODR_CONTEXT, 27, 0, "shipped_service_type") && odr_explicit_tag(o, ill_String, &(*p)->requester_note, ODR_CONTEXT, 46, 1, "requester_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->received_extensions, &(*p)->num_received_extensions, "received_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Recall(ODR o, ILL_Recall **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 9, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Recall *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_explicit_tag(o, ill_String, &(*p)->responder_note, ODR_CONTEXT, 46, 1, "responder_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->recall_extensions, &(*p)->num_recall_extensions, "recall_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Returned(ODR o, ILL_Returned **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 10, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Returned *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_Supplemental_Item_Description, &(*p)->supplemental_item_description, ODR_CONTEXT, 17, 1, "supplemental_item_description") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->date_returned, ODR_CONTEXT, 37, 0, "date_returned") && odr_explicit_tag(o, ill_Transportation_Mode, &(*p)->returned_via, ODR_CONTEXT, 38, 1, "returned_via") && odr_implicit_tag(o, ill_Amount, &(*p)->insured_for, ODR_CONTEXT, 39, 1, "insured_for") && odr_explicit_tag(o, ill_String, &(*p)->requester_note, ODR_CONTEXT, 46, 1, "requester_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->returned_extensions, &(*p)->num_returned_extensions, "returned_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Checked_In(ODR o, ILL_Checked_In **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 11, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Checked_In *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->date_checked_in, ODR_CONTEXT, 40, 0, "date_checked_in") && odr_explicit_tag(o, ill_String, &(*p)->responder_note, ODR_CONTEXT, 46, 1, "responder_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->checked_in_extensions, &(*p)->num_checked_in_extensions, "checked_in_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Overdue_ExtensionS(ODR o, ILL_Overdue_ExtensionS **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Overdue(ODR o, ILL_Overdue **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 12, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Overdue *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_Date_Due, &(*p)->date_due, ODR_CONTEXT, 41, 0, "date_due") && odr_explicit_tag(o, ill_String, &(*p)->responder_note, ODR_CONTEXT, 46, 1, "responder_note") && odr_explicit_tag(o, ill_Overdue_ExtensionS, &(*p)->overdue_extensions, ODR_CONTEXT, 49, 1, "overdue_extensions") && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Renew(ODR o, ILL_Renew **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 13, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Renew *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->desired_due_date, ODR_CONTEXT, 42, 1, "desired_due_date") && odr_explicit_tag(o, ill_String, &(*p)->requester_note, ODR_CONTEXT, 46, 1, "requester_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->renew_extensions, &(*p)->num_renew_extensions, "renew_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Renew_Answer(ODR o, ILL_Renew_Answer **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 14, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Renew_Answer *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, odr_bool, &(*p)->answer, ODR_CONTEXT, 35, 0, "answer") && odr_implicit_tag(o, ill_Date_Due, &(*p)->date_due, ODR_CONTEXT, 41, 1, "date_due") && odr_explicit_tag(o, ill_String, &(*p)->responder_note, ODR_CONTEXT, 46, 1, "responder_note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->renew_answer_extensions, &(*p)->num_renew_answer_extensions, "renew_answer_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Lost(ODR o, ILL_Lost **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 15, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Lost *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_explicit_tag(o, ill_String, &(*p)->note, ODR_CONTEXT, 46, 1, "note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->lost_extensions, &(*p)->num_lost_extensions, "lost_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Damaged(ODR o, ILL_Damaged **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 16, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Damaged *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_Damaged_Details, &(*p)->damaged_details, ODR_CONTEXT, 5, 1, "damaged_details") && odr_explicit_tag(o, ill_String, &(*p)->note, ODR_CONTEXT, 46, 1, "note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->damaged_extensions, &(*p)->num_damaged_extensions, "damaged_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Message(ODR o, ILL_Message **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 17, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Message *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_explicit_tag(o, ill_String, &(*p)->note, ODR_CONTEXT, 46, 0, "note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->message_extensions, &(*p)->num_message_extensions, "message_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Status_Query(ODR o, ILL_Status_Query **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 18, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Status_Query *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_explicit_tag(o, ill_String, &(*p)->note, ODR_CONTEXT, 46, 1, "note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->status_query_extensions, &(*p)->num_status_query_extensions, "status_query_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Status_Or_Error_Report(ODR o, ILL_Status_Or_Error_Report **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 19, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Status_Or_Error_Report *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_tag(o, ill_Reason_No_Report, &(*p)->reason_no_report, ODR_CONTEXT, 43, 1, "reason_no_report") && odr_implicit_tag(o, ill_Status_Report, &(*p)->status_report, ODR_CONTEXT, 44, 1, "status_report") && odr_implicit_tag(o, ill_Error_Report, &(*p)->error_report, ODR_CONTEXT, 45, 1, "error_report") && odr_explicit_tag(o, ill_String, &(*p)->note, ODR_CONTEXT, 46, 1, "note") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->status_or_error_report_extensions, &(*p)->num_status_or_error_report_extensions, "status_or_error_report_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Expired(ODR o, ILL_Expired **p, int opt, const char *name) { if (!odr_constructed_begin(o, p, ODR_APPLICATION, 20, name)) return odr_missing(o, opt, name); if (o->direction == ODR_DECODE) *p = (ILL_Expired *) odr_malloc(o, sizeof(**p)); if (!odr_sequence_begin(o, p, sizeof(**p), 0)) { if (o->direction == ODR_DECODE) *p = 0; return 0; } return odr_implicit_tag(o, odr_integer, &(*p)->protocol_version_num, ODR_CONTEXT, 0, 0, "protocol_version_num") && odr_implicit_tag(o, ill_Transaction_Id, &(*p)->transaction_id, ODR_CONTEXT, 1, 0, "transaction_id") && odr_implicit_tag(o, ill_Service_Date_Time, &(*p)->service_date_time, ODR_CONTEXT, 2, 0, "service_date_time") && odr_implicit_tag(o, ill_System_Id, &(*p)->requester_id, ODR_CONTEXT, 3, 1, "requester_id") && odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 4, 1, "responder_id") && odr_implicit_settag(o, ODR_CONTEXT, 49) && (odr_sequence_of(o, (Odr_fun) ill_Extension, &(*p)->expired_extensions, &(*p)->num_expired_extensions, "expired_extensions") || odr_ok(o)) && odr_sequence_end(o) && odr_constructed_end(o); } int ill_Account_Number(ODR o, ILL_Account_Number **p, int opt, const char *name) { return ill_String (o, p, opt, name); } int ill_Already_Forwarded(ODR o, ILL_Already_Forwarded **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_System_Id, &(*p)->responder_id, ODR_CONTEXT, 0, 0, "responder_id") && odr_implicit_tag(o, ill_System_Address, &(*p)->responder_address, ODR_CONTEXT, 1, 1, "responder_address") && odr_sequence_end(o); } int ill_Already_Tried_List_Type(ODR o, ILL_Already_Tried_List_Type **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) ill_System_Id, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Amount(ODR o, ILL_Amount **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_visiblestring, &(*p)->currency_code, ODR_CONTEXT, 0, 1, "currency_code") && odr_implicit_tag(o, ill_AmountString, &(*p)->monetary_value, ODR_CONTEXT, 1, 0, "monetary_value") && odr_sequence_end(o); } int ill_AmountString(ODR o, ILL_AmountString **p, int opt, const char *name) { return odr_visiblestring (o, p, opt, name); } int ill_Client_Id(ODR o, ILL_Client_Id **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_String, &(*p)->client_name, ODR_CONTEXT, 0, 1, "client_name") && odr_explicit_tag(o, ill_String, &(*p)->client_status, ODR_CONTEXT, 1, 1, "client_status") && odr_explicit_tag(o, ill_String, &(*p)->client_identifier, ODR_CONTEXT, 2, 1, "client_identifier") && odr_sequence_end(o); } int ill_Conditional_Results(ODR o, ILL_Conditional_Results **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_enum, &(*p)->conditions, ODR_CONTEXT, 0, 0, "conditions") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->date_for_reply, ODR_CONTEXT, 1, 1, "date_for_reply") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) ill_Location_Info, &(*p)->locations, &(*p)->num_locations, "locations") || odr_ok(o)) && ill_Delivery_Service(o, &(*p)->proposed_delivery_service, 1, "proposed_delivery_service") && odr_sequence_end(o); } int ill_Cost_Info_Type(ODR o, ILL_Cost_Info_Type **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_Account_Number, &(*p)->account_number, ODR_CONTEXT, 0, 1, "account_number") && odr_implicit_tag(o, ill_Amount, &(*p)->maximum_cost, ODR_CONTEXT, 1, 1, "maximum_cost") && odr_implicit_tag(o, odr_bool, &(*p)->reciprocal_agreement, ODR_CONTEXT, 2, 0, "reciprocal_agreement") && odr_implicit_tag(o, odr_bool, &(*p)->will_pay_fee, ODR_CONTEXT, 3, 0, "will_pay_fee") && odr_implicit_tag(o, odr_bool, &(*p)->payment_provided, ODR_CONTEXT, 4, 0, "payment_provided") && odr_sequence_end(o); } int ill_Current_State(ODR o, ILL_Current_State **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Damaged_DetailsSpecific_units(ODR o, ILL_Damaged_DetailsSpecific_units **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) odr_integer, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Damaged_Details(ODR o, ILL_Damaged_Details **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, ILL_Damaged_Details_complete_document, (Odr_fun) odr_null, "complete_document"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, ILL_Damaged_Details_specific_units, (Odr_fun) ill_Damaged_DetailsSpecific_units, "specific_units"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->document_type_id, ODR_CONTEXT, 0, 1, "document_type_id") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_sequence_end(o); } int ill_Date_Due(ODR o, ILL_Date_Due **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_ISO_Date, &(*p)->date_due_field, ODR_CONTEXT, 0, 0, "date_due_field") && odr_implicit_tag(o, odr_bool, &(*p)->renewable, ODR_CONTEXT, 1, 0, "renewable") && odr_sequence_end(o); } int ill_Delivery_Address(ODR o, ILL_Delivery_Address **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_Postal_Address, &(*p)->postal_address, ODR_CONTEXT, 0, 1, "postal_address") && odr_implicit_tag(o, ill_System_Address, &(*p)->electronic_address, ODR_CONTEXT, 1, 1, "electronic_address") && odr_sequence_end(o); } int ill_Delivery_ServiceElectronic_delivery(ODR o, ILL_Delivery_ServiceElectronic_delivery **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) ill_Electronic_Delivery_Service, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Delivery_Service(ODR o, ILL_Delivery_Service **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 7, ILL_Delivery_Service_physical_delivery, (Odr_fun) ill_Transportation_Mode, "physical_delivery"}, {ODR_IMPLICIT, ODR_CONTEXT, 50, ILL_Delivery_Service_electronic_delivery, (Odr_fun) ill_Delivery_ServiceElectronic_delivery, "electronic_delivery"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Electronic_Delivery_Service_0(ODR o, ILL_Electronic_Delivery_Service_0 **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->e_delivery_mode, ODR_CONTEXT, 0, 0, "e_delivery_mode") && odr_explicit_tag(o, odr_any, &(*p)->e_delivery_parameters, ODR_CONTEXT, 1, 0, "e_delivery_parameters") && odr_sequence_end(o); } int ill_Electronic_Delivery_Service_1(ODR o, ILL_Electronic_Delivery_Service_1 **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->document_type_id, ODR_CONTEXT, 2, 0, "document_type_id") && odr_explicit_tag(o, odr_any, &(*p)->document_type_parameters, ODR_CONTEXT, 3, 0, "document_type_parameters") && odr_sequence_end(o); } int ill_Electronic_Delivery_Service(ODR o, ILL_Electronic_Delivery_Service **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, ILL_Electronic_Delivery_Service_e_delivery_address, (Odr_fun) ill_System_Address, "e_delivery_address"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, ILL_Electronic_Delivery_Service_e_delivery_id, (Odr_fun) ill_System_Id, "e_delivery_id"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_Electronic_Delivery_Service_0, &(*p)->e_delivery_service, ODR_CONTEXT, 0, 1, "e_delivery_service") && odr_implicit_tag(o, ill_Electronic_Delivery_Service_1, &(*p)->document_type, ODR_CONTEXT, 1, 1, "document_type") && odr_explicit_tag(o, ill_String, &(*p)->e_delivery_description, ODR_CONTEXT, 4, 1, "e_delivery_description") && odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 5, "e_delivery_details") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_explicit_tag(o, ill_String, &(*p)->name_or_code, ODR_CONTEXT, 6, 1, "name_or_code") && odr_implicit_tag(o, ill_ISO_Time, &(*p)->delivery_time, ODR_CONTEXT, 7, 1, "delivery_time") && odr_sequence_end(o); } int ill_Error_Report(ODR o, ILL_Error_Report **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_String, &(*p)->correlation_information, ODR_CONTEXT, 0, 0, "correlation_information") && odr_implicit_tag(o, ill_Report_Source, &(*p)->report_source, ODR_CONTEXT, 1, 0, "report_source") && odr_explicit_tag(o, ill_User_Error_Report, &(*p)->user_error_report, ODR_CONTEXT, 2, 1, "user_error_report") && odr_explicit_tag(o, ill_Provider_Error_Report, &(*p)->provider_error_report, ODR_CONTEXT, 3, 1, "provider_error_report") && odr_sequence_end(o); } int ill_Estimate_Results(ODR o, ILL_Estimate_Results **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_String, &(*p)->cost_estimate, ODR_CONTEXT, 0, 0, "cost_estimate") && odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) ill_Location_Info, &(*p)->locations, &(*p)->num_locations, "locations") || odr_ok(o)) && odr_sequence_end(o); } int ill_Extension(ODR o, ILL_Extension **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->identifier, ODR_CONTEXT, 0, 0, "identifier") && odr_implicit_tag(o, odr_bool, &(*p)->critical, ODR_CONTEXT, 1, 0, "critical") && odr_explicit_tag(o, odr_any, &(*p)->item, ODR_CONTEXT, 2, 0, "item") && odr_sequence_end(o); } int ill_General_Problem(ODR o, ILL_General_Problem **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_History_Report(ODR o, ILL_History_Report **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_ISO_Date, &(*p)->date_requested, ODR_CONTEXT, 0, 1, "date_requested") && odr_explicit_tag(o, ill_String, &(*p)->author, ODR_CONTEXT, 1, 1, "author") && odr_explicit_tag(o, ill_String, &(*p)->title, ODR_CONTEXT, 2, 1, "title") && odr_explicit_tag(o, ill_String, &(*p)->author_of_article, ODR_CONTEXT, 3, 1, "author_of_article") && odr_explicit_tag(o, ill_String, &(*p)->title_of_article, ODR_CONTEXT, 4, 1, "title_of_article") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->date_of_last_transition, ODR_CONTEXT, 5, 0, "date_of_last_transition") && odr_implicit_tag(o, odr_enum, &(*p)->most_recent_service, ODR_CONTEXT, 6, 0, "most_recent_service") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->date_of_most_recent_service, ODR_CONTEXT, 7, 0, "date_of_most_recent_service") && odr_implicit_tag(o, ill_System_Id, &(*p)->initiator_of_most_recent_service, ODR_CONTEXT, 8, 0, "initiator_of_most_recent_service") && odr_implicit_tag(o, ill_Shipped_Service_Type, &(*p)->shipped_service_type, ODR_CONTEXT, 9, 1, "shipped_service_type") && odr_implicit_tag(o, ill_Transaction_Results, &(*p)->transaction_results, ODR_CONTEXT, 10, 1, "transaction_results") && odr_explicit_tag(o, ill_String, &(*p)->most_recent_service_note, ODR_CONTEXT, 11, 1, "most_recent_service_note") && odr_sequence_end(o); } int ill_Hold_Placed_Results(ODR o, ILL_Hold_Placed_Results **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_ISO_Date, &(*p)->estimated_date_available, ODR_CONTEXT, 0, 0, "estimated_date_available") && odr_implicit_tag(o, ill_Medium_Type, &(*p)->hold_placed_medium_type, ODR_CONTEXT, 1, 1, "hold_placed_medium_type") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) ill_Location_Info, &(*p)->locations, &(*p)->num_locations, "locations") || odr_ok(o)) && odr_sequence_end(o); } int ill_APDU_Type(ODR o, ILL_APDU_Type **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Service_Type(ODR o, ILL_Service_Type **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_String(ODR o, ILL_String **p, int opt, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, ILL_String_GeneralString, (Odr_fun) odr_generalstring, "GeneralString"}, {-1, -1, -1, ILL_String_EDIFACTString, (Odr_fun) ill_EDIFACTString, "EDIFACTString"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Intermediary_Problem(ODR o, ILL_Intermediary_Problem **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_ISO_Date(ODR o, ILL_ISO_Date **p, int opt, const char *name) { return odr_visiblestring (o, p, opt, name); } int ill_ISO_Time(ODR o, ILL_ISO_Time **p, int opt, const char *name) { return odr_visiblestring (o, p, opt, name); } int ill_Item_Id(ODR o, ILL_Item_Id **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_enum, &(*p)->item_type, ODR_CONTEXT, 0, 1, "item_type") && odr_implicit_tag(o, ill_Medium_Type, &(*p)->held_medium_type, ODR_CONTEXT, 1, 1, "held_medium_type") && odr_explicit_tag(o, ill_String, &(*p)->call_number, ODR_CONTEXT, 2, 1, "call_number") && odr_explicit_tag(o, ill_String, &(*p)->author, ODR_CONTEXT, 3, 1, "author") && odr_explicit_tag(o, ill_String, &(*p)->title, ODR_CONTEXT, 4, 1, "title") && odr_explicit_tag(o, ill_String, &(*p)->sub_title, ODR_CONTEXT, 5, 1, "sub_title") && odr_explicit_tag(o, ill_String, &(*p)->sponsoring_body, ODR_CONTEXT, 6, 1, "sponsoring_body") && odr_explicit_tag(o, ill_String, &(*p)->place_of_publication, ODR_CONTEXT, 7, 1, "place_of_publication") && odr_explicit_tag(o, ill_String, &(*p)->publisher, ODR_CONTEXT, 8, 1, "publisher") && odr_explicit_tag(o, ill_String, &(*p)->series_title_number, ODR_CONTEXT, 9, 1, "series_title_number") && odr_explicit_tag(o, ill_String, &(*p)->volume_issue, ODR_CONTEXT, 10, 1, "volume_issue") && odr_explicit_tag(o, ill_String, &(*p)->edition, ODR_CONTEXT, 11, 1, "edition") && odr_explicit_tag(o, ill_String, &(*p)->publication_date, ODR_CONTEXT, 12, 1, "publication_date") && odr_explicit_tag(o, ill_String, &(*p)->publication_date_of_component, ODR_CONTEXT, 13, 1, "publication_date_of_component") && odr_explicit_tag(o, ill_String, &(*p)->author_of_article, ODR_CONTEXT, 14, 1, "author_of_article") && odr_explicit_tag(o, ill_String, &(*p)->title_of_article, ODR_CONTEXT, 15, 1, "title_of_article") && odr_explicit_tag(o, ill_String, &(*p)->pagination, ODR_CONTEXT, 16, 1, "pagination") && odr_explicit_tag(o, odr_external, &(*p)->national_bibliography_no, ODR_CONTEXT, 17, 1, "national_bibliography_no") && odr_explicit_tag(o, ill_String, &(*p)->iSBN, ODR_CONTEXT, 18, 1, "iSBN") && odr_explicit_tag(o, ill_String, &(*p)->iSSN, ODR_CONTEXT, 19, 1, "iSSN") && odr_explicit_tag(o, odr_external, &(*p)->system_no, ODR_CONTEXT, 20, 1, "system_no") && odr_explicit_tag(o, ill_String, &(*p)->additional_no_letters, ODR_CONTEXT, 21, 1, "additional_no_letters") && odr_explicit_tag(o, ill_String, &(*p)->verification_reference_source, ODR_CONTEXT, 22, 1, "verification_reference_source") && odr_sequence_end(o); } int ill_Location_Info(ODR o, ILL_Location_Info **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_System_Id, &(*p)->location_id, ODR_CONTEXT, 0, 0, "location_id") && odr_implicit_tag(o, ill_System_Address, &(*p)->location_address, ODR_CONTEXT, 1, 1, "location_address") && odr_explicit_tag(o, ill_String, &(*p)->location_note, ODR_CONTEXT, 2, 1, "location_note") && odr_sequence_end(o); } int ill_Locations_Results(ODR o, ILL_Locations_Results **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_Reason_Locs_Provided, &(*p)->reason_locs_provided, ODR_CONTEXT, 0, 1, "reason_locs_provided") && odr_implicit_settag(o, ODR_CONTEXT, 1) && odr_sequence_of(o, (Odr_fun) ill_Location_Info, &(*p)->locations, &(*p)->num_locations, "locations") && odr_sequence_end(o); } int ill_Medium_Type(ODR o, ILL_Medium_Type **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Name_Of_Person_Or_Institution(ODR o, ILL_Name_Of_Person_Or_Institution **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 0, ILL_Name_Of_Person_Or_Institution_name_of_person, (Odr_fun) ill_String, "name_of_person"}, {ODR_EXPLICIT, ODR_CONTEXT, 1, ILL_Name_Of_Person_Or_Institution_name_of_institution, (Odr_fun) ill_String, "name_of_institution"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Person_Or_Institution_Symbol(ODR o, ILL_Person_Or_Institution_Symbol **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 0, ILL_Person_Or_Institution_Symbol_person_symbol, (Odr_fun) ill_String, "person_symbol"}, {ODR_EXPLICIT, ODR_CONTEXT, 1, ILL_Person_Or_Institution_Symbol_institution_symbol, (Odr_fun) ill_String, "institution_symbol"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Place_On_Hold_Type(ODR o, ILL_Place_On_Hold_Type **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Postal_Address(ODR o, ILL_Postal_Address **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_Name_Of_Person_Or_Institution, &(*p)->name_of_person_or_institution, ODR_CONTEXT, 0, 1, "name_of_person_or_institution") && odr_explicit_tag(o, ill_String, &(*p)->extended_postal_delivery_address, ODR_CONTEXT, 1, 1, "extended_postal_delivery_address") && odr_explicit_tag(o, ill_String, &(*p)->street_and_number, ODR_CONTEXT, 2, 1, "street_and_number") && odr_explicit_tag(o, ill_String, &(*p)->post_office_box, ODR_CONTEXT, 3, 1, "post_office_box") && odr_explicit_tag(o, ill_String, &(*p)->city, ODR_CONTEXT, 4, 1, "city") && odr_explicit_tag(o, ill_String, &(*p)->region, ODR_CONTEXT, 5, 1, "region") && odr_explicit_tag(o, ill_String, &(*p)->country, ODR_CONTEXT, 6, 1, "country") && odr_explicit_tag(o, ill_String, &(*p)->postal_code, ODR_CONTEXT, 7, 1, "postal_code") && odr_sequence_end(o); } int ill_Provider_Error_Report(ODR o, ILL_Provider_Error_Report **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, ILL_Provider_Error_Report_general_problem, (Odr_fun) ill_General_Problem, "general_problem"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, ILL_Provider_Error_Report_transaction_id_problem, (Odr_fun) ill_Transaction_Id_Problem, "transaction_id_problem"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, ILL_Provider_Error_Report_state_transition_prohibited, (Odr_fun) ill_State_Transition_Prohibited, "state_transition_prohibited"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Reason_Locs_Provided(ODR o, ILL_Reason_Locs_Provided **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Reason_No_Report(ODR o, ILL_Reason_No_Report **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Reason_Unfilled(ODR o, ILL_Reason_Unfilled **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Report_Source(ODR o, ILL_Report_Source **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Requester_Optional_Messages_Type(ODR o, ILL_Requester_Optional_Messages_Type **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_bool, &(*p)->can_send_RECEIVED, ODR_CONTEXT, 0, 0, "can_send_RECEIVED") && odr_implicit_tag(o, odr_bool, &(*p)->can_send_RETURNED, ODR_CONTEXT, 1, 0, "can_send_RETURNED") && odr_implicit_tag(o, odr_enum, &(*p)->requester_SHIPPED, ODR_CONTEXT, 2, 0, "requester_SHIPPED") && odr_implicit_tag(o, odr_enum, &(*p)->requester_CHECKED_IN, ODR_CONTEXT, 3, 0, "requester_CHECKED_IN") && odr_sequence_end(o); } int ill_Responder_Optional_Messages_Type(ODR o, ILL_Responder_Optional_Messages_Type **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_bool, &(*p)->can_send_SHIPPED, ODR_CONTEXT, 0, 0, "can_send_SHIPPED") && odr_implicit_tag(o, odr_bool, &(*p)->can_send_CHECKED_IN, ODR_CONTEXT, 1, 0, "can_send_CHECKED_IN") && odr_implicit_tag(o, odr_enum, &(*p)->responder_RECEIVED, ODR_CONTEXT, 2, 0, "responder_RECEIVED") && odr_implicit_tag(o, odr_enum, &(*p)->responder_RETURNED, ODR_CONTEXT, 3, 0, "responder_RETURNED") && odr_sequence_end(o); } int ill_Retry_Results(ODR o, ILL_Retry_Results **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_enum, &(*p)->reason_not_available, ODR_CONTEXT, 0, 1, "reason_not_available") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->retry_date, ODR_CONTEXT, 1, 1, "retry_date") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) ill_Location_Info, &(*p)->locations, &(*p)->num_locations, "locations") || odr_ok(o)) && odr_sequence_end(o); } int ill_Search_Type(ODR o, ILL_Search_Type **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_String, &(*p)->level_of_service, ODR_CONTEXT, 0, 1, "level_of_service") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->need_before_date, ODR_CONTEXT, 1, 1, "need_before_date") && odr_implicit_tag(o, odr_enum, &(*p)->expiry_flag, ODR_CONTEXT, 2, 0, "expiry_flag") && odr_implicit_tag(o, ill_ISO_Date, &(*p)->expiry_date, ODR_CONTEXT, 3, 1, "expiry_date") && odr_sequence_end(o); } int ill_Security_Problem(ODR o, ILL_Security_Problem **p, int opt, const char *name) { return ill_String (o, p, opt, name); } int ill_Send_To_List_Type_s(ODR o, ILL_Send_To_List_Type_s **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_System_Id, &(*p)->system_id, ODR_CONTEXT, 0, 0, "system_id") && odr_explicit_tag(o, ill_Account_Number, &(*p)->account_number, ODR_CONTEXT, 1, 1, "account_number") && odr_implicit_tag(o, ill_System_Address, &(*p)->system_address, ODR_CONTEXT, 2, 1, "system_address") && odr_sequence_end(o); } int ill_Send_To_List_Type(ODR o, ILL_Send_To_List_Type **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) ill_Send_To_List_Type_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Service_Date_this(ODR o, ILL_Service_Date_this **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_ISO_Date, &(*p)->date, ODR_CONTEXT, 0, 0, "date") && odr_implicit_tag(o, ill_ISO_Time, &(*p)->time, ODR_CONTEXT, 1, 1, "time") && odr_sequence_end(o); } int ill_Service_Date_original(ODR o, ILL_Service_Date_original **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_ISO_Date, &(*p)->date, ODR_CONTEXT, 0, 0, "date") && odr_implicit_tag(o, ill_ISO_Time, &(*p)->time, ODR_CONTEXT, 1, 1, "time") && odr_sequence_end(o); } int ill_Service_Date_Time(ODR o, ILL_Service_Date_Time **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_Service_Date_this, &(*p)->date_time_of_this_service, ODR_CONTEXT, 0, 0, "date_time_of_this_service") && odr_implicit_tag(o, ill_Service_Date_original, &(*p)->date_time_of_original_service, ODR_CONTEXT, 1, 1, "date_time_of_original_service") && odr_sequence_end(o); } int ill_Shipped_Service_Type(ODR o, ILL_Shipped_Service_Type **p, int opt, const char *name) { return ill_Service_Type (o, p, opt, name); } int ill_State_Transition_Prohibited(ODR o, ILL_State_Transition_Prohibited **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_APDU_Type, &(*p)->aPDU_type, ODR_CONTEXT, 0, 0, "aPDU_type") && odr_implicit_tag(o, ill_Current_State, &(*p)->current_state, ODR_CONTEXT, 1, 0, "current_state") && odr_sequence_end(o); } int ill_Status_Report(ODR o, ILL_Status_Report **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_History_Report, &(*p)->user_status_report, ODR_CONTEXT, 0, 0, "user_status_report") && odr_implicit_tag(o, ill_Current_State, &(*p)->provider_status_report, ODR_CONTEXT, 1, 0, "provider_status_report") && odr_sequence_end(o); } int ill_Supplemental_Item_Description(ODR o, ILL_Supplemental_Item_Description **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) odr_external, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Supply_Details(ODR o, ILL_Supply_Details **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 5, ILL_Supply_Details_physical_delivery, (Odr_fun) ill_Transportation_Mode, "physical_delivery"}, {ODR_IMPLICIT, ODR_CONTEXT, 50, ILL_Supply_Details_electronic_delivery, (Odr_fun) ill_Electronic_Delivery_Service, "electronic_delivery"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_ISO_Date, &(*p)->date_shipped, ODR_CONTEXT, 0, 1, "date_shipped") && odr_implicit_tag(o, ill_Date_Due, &(*p)->date_due, ODR_CONTEXT, 1, 1, "date_due") && odr_implicit_tag(o, odr_integer, &(*p)->chargeable_units, ODR_CONTEXT, 2, 1, "chargeable_units") && odr_implicit_tag(o, ill_Amount, &(*p)->cost, ODR_CONTEXT, 3, 1, "cost") && odr_implicit_tag(o, odr_enum, &(*p)->shipped_conditions, ODR_CONTEXT, 4, 1, "shipped_conditions") && (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) || odr_ok(o)) && odr_implicit_tag(o, ill_Amount, &(*p)->insured_for, ODR_CONTEXT, 6, 1, "insured_for") && odr_implicit_tag(o, ill_Amount, &(*p)->return_insurance_require, ODR_CONTEXT, 7, 1, "return_insurance_require") && odr_implicit_settag(o, ODR_CONTEXT, 8) && (odr_sequence_of(o, (Odr_fun) ill_Units_Per_Medium_Type, &(*p)->no_of_units_per_medium, &(*p)->num_no_of_units_per_medium, "no_of_units_per_medium") || odr_ok(o)) && odr_sequence_end(o); } int ill_Supply_Medium_Info_Type(ODR o, ILL_Supply_Medium_Info_Type **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_Supply_Medium_Type, &(*p)->supply_medium_type, ODR_CONTEXT, 0, 0, "supply_medium_type") && odr_explicit_tag(o, ill_String, &(*p)->medium_characteristics, ODR_CONTEXT, 1, 1, "medium_characteristics") && odr_sequence_end(o); } int ill_Supply_Medium_Type(ODR o, ILL_Supply_Medium_Type **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_System_Address(ODR o, ILL_System_Address **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_String, &(*p)->telecom_service_identifier, ODR_CONTEXT, 0, 1, "telecom_service_identifier") && odr_explicit_tag(o, ill_String, &(*p)->telecom_service_address, ODR_CONTEXT, 1, 1, "telecom_service_address") && odr_sequence_end(o); } int ill_System_Id(ODR o, ILL_System_Id **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_Person_Or_Institution_Symbol, &(*p)->person_or_institution_symbol, ODR_CONTEXT, 0, 1, "person_or_institution_symbol") && odr_explicit_tag(o, ill_Name_Of_Person_Or_Institution, &(*p)->name_of_person_or_institution, ODR_CONTEXT, 1, 1, "name_of_person_or_institution") && odr_sequence_end(o); } int ill_Third_Party_Info_Type(ODR o, ILL_Third_Party_Info_Type **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_bool, &(*p)->permission_to_forward, ODR_CONTEXT, 0, 0, "permission_to_forward") && odr_implicit_tag(o, odr_bool, &(*p)->permission_to_chain, ODR_CONTEXT, 1, 0, "permission_to_chain") && odr_implicit_tag(o, odr_bool, &(*p)->permission_to_partition, ODR_CONTEXT, 2, 0, "permission_to_partition") && odr_implicit_tag(o, odr_bool, &(*p)->permission_to_change_send_to_list, ODR_CONTEXT, 3, 0, "permission_to_change_send_to_list") && odr_implicit_tag(o, ill_System_Address, &(*p)->initial_requester_address, ODR_CONTEXT, 4, 1, "initial_requester_address") && odr_implicit_tag(o, odr_enum, &(*p)->preference, ODR_CONTEXT, 5, 0, "preference") && odr_implicit_tag(o, ill_Send_To_List_Type, &(*p)->send_to_list, ODR_CONTEXT, 6, 1, "send_to_list") && odr_implicit_tag(o, ill_Already_Tried_List_Type, &(*p)->already_tried_list, ODR_CONTEXT, 7, 1, "already_tried_list") && odr_sequence_end(o); } int ill_Transaction_Id(ODR o, ILL_Transaction_Id **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_System_Id, &(*p)->initial_requester_id, ODR_CONTEXT, 0, 1, "initial_requester_id") && odr_explicit_tag(o, ill_String, &(*p)->transaction_group_qualifier, ODR_CONTEXT, 1, 0, "transaction_group_qualifier") && odr_explicit_tag(o, ill_String, &(*p)->transaction_qualifier, ODR_CONTEXT, 2, 0, "transaction_qualifier") && odr_explicit_tag(o, ill_String, &(*p)->sub_transaction_qualifier, ODR_CONTEXT, 3, 1, "sub_transaction_qualifier") && odr_sequence_end(o); } int ill_Transaction_Id_Problem(ODR o, ILL_Transaction_Id_Problem **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Transaction_Results(ODR o, ILL_Transaction_Results **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Transaction_Type(ODR o, ILL_Transaction_Type **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Transportation_Mode(ODR o, ILL_Transportation_Mode **p, int opt, const char *name) { return ill_String (o, p, opt, name); } int ill_Unable_To_Perform(ODR o, ILL_Unable_To_Perform **p, int opt, const char *name) { return odr_enum (o, p, opt, name); } int ill_Unfilled_Results(ODR o, ILL_Unfilled_Results **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, ill_Reason_Unfilled, &(*p)->reason_unfilled, ODR_CONTEXT, 0, 0, "reason_unfilled") && odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) ill_Location_Info, &(*p)->locations, &(*p)->num_locations, "locations") || odr_ok(o)) && odr_sequence_end(o); } int ill_Units_Per_Medium_Type(ODR o, ILL_Units_Per_Medium_Type **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, ill_Supply_Medium_Type, &(*p)->medium, ODR_CONTEXT, 0, 0, "medium") && odr_explicit_tag(o, odr_integer, &(*p)->no_of_units, ODR_CONTEXT, 1, 0, "no_of_units") && odr_sequence_end(o); } int ill_User_Error_Report(ODR o, ILL_User_Error_Report **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 0, ILL_User_Error_Report_already_forwarded, (Odr_fun) ill_Already_Forwarded, "already_forwarded"}, {ODR_IMPLICIT, ODR_CONTEXT, 1, ILL_User_Error_Report_intermediary_problem, (Odr_fun) ill_Intermediary_Problem, "intermediary_problem"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, ILL_User_Error_Report_security_problem, (Odr_fun) ill_Security_Problem, "security_problem"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, ILL_User_Error_Report_unable_to_perform, (Odr_fun) ill_Unable_To_Perform, "unable_to_perform"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int ill_Will_Supply_Results(ODR o, ILL_Will_Supply_Results **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, odr_enum, &(*p)->reason_will_supply, ODR_CONTEXT, 0, 0, "reason_will_supply") && odr_explicit_tag(o, ill_ISO_Date, &(*p)->supply_date, ODR_CONTEXT, 1, 1, "supply_date") && odr_explicit_tag(o, ill_Postal_Address, &(*p)->return_to_address, ODR_CONTEXT, 2, 1, "return_to_address") && odr_implicit_settag(o, ODR_CONTEXT, 3) && (odr_sequence_of(o, (Odr_fun) ill_Location_Info, &(*p)->locations, &(*p)->num_locations, "locations") || odr_ok(o)) && odr_explicit_tag(o, ill_Electronic_Delivery_Service, &(*p)->electronic_delivery_service, ODR_CONTEXT, 4, 1, "electronic_delivery_service") && odr_sequence_end(o); } int ill_EDIFACTString(ODR o, ILL_EDIFACTString **p, int opt, const char *name) { return odr_visiblestring (o, p, opt, name); } yaz-5.28.0/src/xmalloc.c0000644000175000017500000002200513265142510011722 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file xmalloc.c * \brief Implements malloc interface. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #ifndef TRACE_XMALLOC #define TRACE_XMALLOC 1 #endif /* treat any size >1/4 of max value of size_t to be an error */ #define MALLOC_SIZE_MAX ((size_t)(-1) / 4) static int log_level = 0; static int log_level_initialized = 0; #if TRACE_XMALLOC > 1 static const unsigned char head[] = {88, 77, 66, 55, 44, 33, 22, 11}; static const unsigned char tail[] = {11, 22, 33, 44, 55, 66, 77, 88}; static const unsigned char freed[] = {11, 22, 33, 44, 55, 66, 77, 88}; struct dmalloc_info { int len; char file[16]; int line; struct dmalloc_info *next; struct dmalloc_info *prev; }; struct dmalloc_info *dmalloc_list = 0; void *xmalloc_d(size_t nbytes, const char *file, int line) { char *res; struct dmalloc_info *dinfo; if (!log_level_initialized) { log_level = yaz_log_module_level("malloc"); log_level_initialized = 1; } if (!(res = (char*) malloc(nbytes + sizeof(*dinfo)+16*sizeof(char)))) return 0; dinfo = (struct dmalloc_info *) res; strncpy(dinfo->file, file, sizeof(dinfo->file)-1); dinfo->file[sizeof(dinfo->file)-1] = '\0'; dinfo->line = line; dinfo->len = nbytes; dinfo->prev = 0; dinfo->next = dmalloc_list; if (dinfo->next) dinfo->next->prev = dinfo; dmalloc_list = dinfo; memcpy(res + sizeof(*dinfo), head, 8*sizeof(char)); res += sizeof(*dinfo) + 8*sizeof(char); memcpy(res + nbytes, tail, 8*sizeof(char)); return res; } void xfree_d(void *ptr, const char *file, int line) { struct dmalloc_info *dinfo; if (!ptr) return; dinfo = (struct dmalloc_info *) ((char*)ptr - 8*sizeof(char) - sizeof(*dinfo)); if (memcmp(head, (char*) ptr - 8*sizeof(char), 8*sizeof(char))) { yaz_log(YLOG_FATAL, "xfree_d bad head, %s:%d, %p", file, line, ptr); abort(); } if (memcmp((char*) ptr + dinfo->len, tail, 8*sizeof(char))) { yaz_log(YLOG_FATAL, "xfree_d bad tail, %s:%d, %p", file, line, ptr); abort(); } if (dinfo->prev) dinfo->prev->next = dinfo->next; else dmalloc_list = dinfo->next; if (dinfo->next) dinfo->next->prev = dinfo->prev; memcpy((char*) ptr - 8*sizeof(char), freed, 8*sizeof(char)); free(dinfo); return; } void *xrealloc_d(void *p, size_t nbytes, const char *file, int line) { struct dmalloc_info *dinfo; char *ptr = (char*) p; char *res; if (!log_level_initialized) { log_level = yaz_log_module_level("malloc"); log_level_initialized = 1; } if (!ptr) { if (!nbytes) return 0; res = (char *) malloc(nbytes + sizeof(*dinfo) + 16*sizeof(char)); } else { if (memcmp(head, ptr - 8*sizeof(char), 8*sizeof(char))) { yaz_log(YLOG_FATAL, "xrealloc_d bad head, %s:%d, %p", file, line, ptr); abort(); } dinfo = (struct dmalloc_info *) (ptr-8*sizeof(char) - sizeof(*dinfo)); if (memcmp(ptr + dinfo->len, tail, 8*sizeof(char))) { yaz_log(YLOG_FATAL, "xrealloc_d bad tail, %s:%d, %p", file, line, ptr); abort(); } if (dinfo->prev) dinfo->prev->next = dinfo->next; else dmalloc_list = dinfo->next; if (dinfo->next) dinfo->next->prev = dinfo->prev; if (!nbytes) { free(dinfo); return 0; } res = (char *) realloc(dinfo, nbytes + sizeof(*dinfo) + 16*sizeof(char)); } if (!res) return 0; dinfo = (struct dmalloc_info *) res; strncpy(dinfo->file, file, sizeof(dinfo->file)-1); dinfo->file[sizeof(dinfo->file)-1] = '\0'; dinfo->line = line; dinfo->len = nbytes; dinfo->prev = 0; dinfo->next = dmalloc_list; if (dmalloc_list) dmalloc_list->prev = dinfo; dmalloc_list = dinfo; memcpy(res + sizeof(*dinfo), head, 8*sizeof(char)); res += sizeof(*dinfo) + 8*sizeof(char); memcpy(res + nbytes, tail, 8*sizeof(char)); return res; } void *xcalloc_d(size_t nmemb, size_t size, const char *file, int line) { char *res; struct dmalloc_info *dinfo; size_t nbytes = nmemb * size; if (!log_level_initialized) { log_level = yaz_log_module_level("malloc"); log_level_initialized = 1; } if (!(res = (char*) calloc(1, nbytes+sizeof(*dinfo)+16*sizeof(char)))) return 0; dinfo = (struct dmalloc_info *) res; strncpy(dinfo->file, file, sizeof(dinfo->file)-1); dinfo->file[sizeof(dinfo->file)-1] = '\0'; dinfo->line = line; dinfo->len = nbytes; dinfo->prev = 0; dinfo->next = dmalloc_list; if (dinfo->next) dinfo->next->prev = dinfo; dmalloc_list = dinfo; memcpy(res + sizeof(*dinfo), head, 8*sizeof(char)); res += sizeof(*dinfo) + 8*sizeof(char); memcpy(res + nbytes, tail, 8*sizeof(char)); return res; } void xmalloc_trav_d(const char *file, int line) { size_t size = 0; struct dmalloc_info *dinfo = dmalloc_list; if (!log_level_initialized) { log_level = yaz_log_module_level("malloc"); log_level_initialized = 1; } yaz_log(log_level, "malloc_trav %s:%d", file, line); while (dinfo) { yaz_log(log_level, " %20s:%d p=%p size=%d", dinfo->file, dinfo->line, ((char*) dinfo)+sizeof(*dinfo)+8*sizeof(char), dinfo->len); size += dinfo->len; dinfo = dinfo->next; } yaz_log(log_level, "total bytes %ld", (long) size); } #else /* TRACE_XMALLOC <= 1 */ #define xrealloc_d(o, x, f, l) realloc(o, x) #define xmalloc_d(x, f, l) malloc(x) #define xcalloc_d(x,y, f, l) calloc(x,y) #define xfree_d(x, f, l) free(x) #define xmalloc_trav_d(f, l) #endif void xmalloc_trav_f(const char *s, const char *file, int line) { if (!log_level_initialized) { log_level = yaz_log_module_level("malloc"); log_level_initialized = 1; } xmalloc_trav_d(file, line); } void xmalloc_fatal(size_t size) { assert(size < MALLOC_SIZE_MAX); exit(1); } void *xrealloc_f(void *o, size_t size, const char *file, int line) { void *p = xrealloc_d(o, size, file, line); if (!log_level_initialized) { log_level = yaz_log_module_level("malloc"); log_level_initialized = 1; } if (log_level) yaz_log(log_level, "%s:%d: xrealloc(s=%ld) %p -> %p", file, line, (long) size, o, p); if (!p) { yaz_log(YLOG_FATAL, "%s:%d: Out of memory, realloc(%ld bytes)", file, line, (long) size); xmalloc_fatal(size); } return p; } void *xmalloc_f(size_t size, const char *file, int line) { void *p = xmalloc_d(size, file, line); if (!log_level_initialized) { log_level = yaz_log_module_level("malloc"); log_level_initialized = 1; } if (log_level) yaz_log(log_level, "%s:%d: xmalloc(s=%ld) %p", file, line, (long) size, p); if (!p) { yaz_log(YLOG_FATAL, "%s:%d: Out of memory - malloc(%ld bytes)", file, line, (long) size); xmalloc_fatal(size); } return p; } void *xcalloc_f(size_t nmemb, size_t size, const char *file, int line) { void *p = xcalloc_d(nmemb, size, file, line); if (!log_level_initialized) { log_level = yaz_log_module_level("malloc"); log_level_initialized = 1; } if (log_level) yaz_log(log_level, "%s:%d: xcalloc(s=%ld) %p", file, line, (long) size, p); if (!p) { yaz_log(YLOG_FATAL, "%s:%d: Out of memory - calloc(%ld, %ld)", file, line, (long) nmemb, (long) size); xmalloc_fatal(size); } return p; } char *xstrdup_f(const char *s, const char *file, int line) { char *p = (char *)xmalloc_d(strlen(s)+1, file, line); if (!log_level_initialized) { log_level = yaz_log_module_level("malloc"); log_level_initialized = 1; } if (log_level) yaz_log(log_level, "%s:%d: xstrdup(s=%ld) %p", file, line, (long) strlen(s)+1, p); strcpy(p, s); return p; } void xfree_f(void *p, const char *file, int line) { if (!p) return ; if (log_level) yaz_log(log_level, "%s:%d: xfree %p", file, line, p); xfree_d(p, file, line); } char *xstrndup_f(const char *s, size_t n, const char *file, int line) { size_t l = strlen(s); if (l < n) return xstrdup_f(s, file, line); { char *a = (char*) xmalloc_f(n+1, file, line); memcpy(a, s, n); a[n] = '\0'; return a; } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_mem.c0000644000175000017500000000617213265142510011714 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_mem.c * \brief Implements ODR memory management */ #if HAVE_CONFIG_H #include #endif #include #include #include "odr-priv.h" #include /* ------------------------ NIBBLE MEMORY ---------------------- */ /* * Extract the memory control block from o. */ NMEM odr_extract_mem(ODR o) { NMEM r = o->mem; o->mem = nmem_create(); return r; } void *odr_malloc(ODR o, size_t size) { return nmem_malloc(o->mem, size); } char *odr_strdup(ODR o, const char *str) { return nmem_strdup(o->mem, str); } char *odr_strdup_null(ODR o, const char *str) { return nmem_strdup_null(o->mem, str); } char *odr_strdupn(ODR o, const char *str, size_t n) { return nmem_strdupn(o->mem, str, n); } Odr_int *odr_intdup(ODR o, Odr_int v) { return nmem_intdup(o->mem, v); } Odr_bool *odr_booldup(ODR o, Odr_bool v) { return nmem_booldup(o->mem, v); } size_t odr_total(ODR o) { return nmem_total(o->mem); } Odr_oct *odr_create_Odr_oct(ODR o, const char *buf, int sz) { Odr_oct *p = (Odr_oct *) odr_malloc(o, sizeof(Odr_oct)); p->buf = odr_strdupn(o, buf, sz); p->len = sz; return p; } /* ---------- memory management for data encoding ----------*/ int odr_grow_block(ODR b, int min_bytes) { int togrow; if (!b->op->can_grow) return -1; if (!b->op->size) togrow = 1024; else togrow = b->op->size; if (togrow < min_bytes) togrow = min_bytes; if (b->op->size && !(b->op->buf = (char *) xrealloc(b->op->buf, b->op->size += togrow))) abort(); else if (!b->op->size && !(b->op->buf = (char *) xmalloc(b->op->size = togrow))) abort(); return 0; } int odr_write(ODR o, const char *buf, int bytes) { if (bytes < 0 || o->op->pos > INT_MAX - bytes) { odr_seterror(o, OSPACE, 40); return -1; } if (o->op->pos + bytes >= o->op->size && odr_grow_block(o, bytes)) { odr_seterror(o, OSPACE, 40); return -1; } memcpy(o->op->buf + o->op->pos, buf, bytes); o->op->pos += bytes; if (o->op->pos > o->op->top) o->op->top = o->op->pos; return 0; } int odr_seek(ODR o, int whence, int offset) { if (whence == ODR_S_CUR) offset += o->op->pos; else if (whence == ODR_S_END) offset += o->op->top; if (offset > o->op->size && odr_grow_block(o, offset - o->op->size)) { odr_seterror(o, OSPACE, 41); return -1; } o->op->pos = offset; return 0; } Odr_int odr_strtol(const char *nptr, char **endptr, int base) { #if NMEM_64 #if WIN32 return _strtoui64(nptr, endptr, base); #else return strtoll(nptr, endptr, base); #endif #else return strtol(nptr, endptr, base); #endif } Odr_int odr_atoi(const char *s) { char *endptr; return odr_strtol(s, &endptr, 10); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/init_diag.c0000644000175000017500000000327313265142510012220 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file init_diag.c * \brief Decoding of diagnostics embedded in init response */ #if HAVE_CONFIG_H #include #endif #include static Z_DefaultDiagFormat *interpret_init_diag2(int *no, Z_DiagnosticFormat *diag) { int i; for (i = 0; i < diag->num; i++) { Z_DiagnosticFormat_s *ds = diag->elements[i]; if (ds->which == Z_DiagnosticFormat_s_defaultDiagRec) { if (*no == 0) return ds->u.defaultDiagRec; (*no)--; } } return 0; } Z_DefaultDiagFormat *yaz_decode_init_diag(int no, Z_InitResponse *initrs) { Z_External *uif = initrs->userInformationField; if (uif && uif->which == Z_External_userInfo1) { int i; Z_OtherInformation *ui = uif->u.userInfo1; for (i = 0; i < ui->num_elements; i++) { Z_OtherInformationUnit *unit = ui->list[i]; if (unit->which == Z_OtherInfo_externallyDefinedInfo && unit->information.externallyDefinedInfo && unit->information.externallyDefinedInfo->which == Z_External_diag1) { Z_DefaultDiagFormat *r = interpret_init_diag2 (&no, unit->information.externallyDefinedInfo->u.diag1); if (r) return r; } } } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zes-admin.c0000644000175000017500000001062413273126163012163 00000000000000/** \file zes-admin.c \brief ASN.1 Module ESFormat-Admin Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_AdminEsRequest(ODR o, Z_AdminEsRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_ESAdminOriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT, 1, 0, "toKeep") && odr_explicit_tag(o, z_ESAdminOriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT, 2, 0, "notToKeep") && odr_sequence_end(o); } int z_AdminTaskPackage(ODR o, Z_AdminTaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_ESAdminOriginPartToKeep, &(*p)->originPart, ODR_CONTEXT, 1, 0, "originPart") && odr_explicit_tag(o, z_ESAdminTargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 0, "targetPart") && odr_sequence_end(o); } int z_Admin(ODR o, Z_Admin **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Admin_esRequest, (Odr_fun) z_AdminEsRequest, "esRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Admin_taskPackage, (Odr_fun) z_AdminTaskPackage, "taskPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ESAdminOriginPartToKeep(ODR o, Z_ESAdminOriginPartToKeep **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_ESAdminOriginPartToKeep_reIndex, (Odr_fun) odr_null, "reIndex"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_ESAdminOriginPartToKeep_truncate, (Odr_fun) odr_null, "truncate"}, {ODR_EXPLICIT, ODR_CONTEXT, 3, Z_ESAdminOriginPartToKeep_drop, (Odr_fun) odr_null, "drop"}, {ODR_EXPLICIT, ODR_CONTEXT, 4, Z_ESAdminOriginPartToKeep_create, (Odr_fun) odr_null, "create"}, {ODR_EXPLICIT, ODR_CONTEXT, 5, Z_ESAdminOriginPartToKeep_import, (Odr_fun) z_ImportParameters, "import"}, {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_ESAdminOriginPartToKeep_refresh, (Odr_fun) odr_null, "refresh"}, {ODR_EXPLICIT, ODR_CONTEXT, 7, Z_ESAdminOriginPartToKeep_commit, (Odr_fun) odr_null, "commit"}, {ODR_EXPLICIT, ODR_CONTEXT, 8, Z_ESAdminOriginPartToKeep_shutdown, (Odr_fun) odr_null, "shutdown"}, {ODR_EXPLICIT, ODR_CONTEXT, 9, Z_ESAdminOriginPartToKeep_start, (Odr_fun) odr_null, "start"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "action") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_implicit_tag(o, z_InternationalString, &(*p)->databaseName, ODR_CONTEXT, 2, 1, "databaseName") && odr_sequence_end(o); } int z_ESAdminOriginPartNotToKeep(ODR o, Z_ESAdminOriginPartNotToKeep **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_ESAdminOriginPartNotToKeep_records, (Odr_fun) z_Segment, "records"}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_ESAdminOriginPartNotToKeep_recordsWillFollow, (Odr_fun) odr_null, "recordsWillFollow"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ESAdminTargetPart(ODR o, Z_ESAdminTargetPart **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->updateStatus, ODR_CONTEXT, 1, 0, "updateStatus") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->globalDiagnostics, &(*p)->num_globalDiagnostics, "globalDiagnostics") || odr_ok(o)) && odr_sequence_end(o); } int z_ImportParameters(ODR o, Z_ImportParameters **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->recordType, ODR_CONTEXT, 1, 0, "recordType") && odr_sequence_end(o); } yaz-5.28.0/src/odr_any.c0000644000175000017500000000207713265142510011725 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_any.c * \brief Implements ODR ANY codec */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" /** * This is a catch-all type. It stuffs a random ostring (assumed to be properly * encoded) into the stream, or reads a full data element. Implicit tagging * does not work, and neither does the optional flag, unless the element * is the last in a sequence. */ int odr_any(ODR o, Odr_any **p, int opt, const char *name) { if (o->error) return 0; if (o->direction == ODR_PRINT) { odr_prname(o, name); odr_printf(o, "ANY (len=%d)\n", (*p)->len); return 1; } if (o->direction == ODR_DECODE) *p = (Odr_oct *)odr_malloc(o, sizeof(**p)); if (ber_any(o, p)) return 1; *p = 0; return odr_missing(o, opt, name); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/prt-ext.c0000644000175000017500000003440413265142510011674 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file prt-ext.c * \brief Implements handling of various Z39.50 Externals */ #if HAVE_CONFIG_H #include #endif #include #include #include "odr-priv.h" #define PRT_EXT_DEBUG 0 #if PRT_EXT_DEBUG #include #endif /* * The table below should be moved to the ODR structure itself and * be an image of the association context: To help * map indirect references when they show up. */ static Z_ext_typeent type_table[] = { {{1, 2, 840, 10003, 5, 101,-1}, Z_External_sutrs, (Odr_fun) z_SUTRS}, {{1, 2, 840, 10003, 5, 100,-1}, Z_External_explainRecord, (Odr_fun)z_ExplainRecord}, {{1, 2, 840, 10003, 7, 1,-1}, Z_External_resourceReport1, (Odr_fun)z_ResourceReport1}, {{1, 2, 840, 10003, 7, 2,-1}, Z_External_resourceReport2, (Odr_fun)z_ResourceReport2}, {{1, 2, 840, 10003, 8, 1,-1}, Z_External_promptObject1, (Odr_fun)z_PromptObject1 }, {{1, 2, 840, 10003, 5, 105,-1}, Z_External_grs1, (Odr_fun)z_GenericRecord}, {{1, 2, 840, 10003, 5, 106,-1}, Z_External_extendedService, (Odr_fun)z_TaskPackage}, {{1, 2, 840, 10003, 9, 4,-1}, Z_External_itemOrder, (Odr_fun)z_IOItemOrder}, {{1, 2, 840, 10003, 4, 2,-1}, Z_External_diag1, (Odr_fun)z_DiagnosticFormat}, {{1, 2, 840, 10003, 11, 1,-1}, Z_External_espec1, (Odr_fun)z_Espec1}, {{1, 2, 840, 10003, 5, 103,-1}, Z_External_summary, (Odr_fun)z_BriefBib}, {{1, 2, 840, 10003, 5, 102,-1}, Z_External_OPAC, (Odr_fun)z_OPACRecord}, {{1, 2, 840, 10003, 10, 1,-1}, Z_External_searchResult1, (Odr_fun)z_SearchInfoReport}, {{1, 2, 840, 10003, 9, 5,-1}, Z_External_update0, (Odr_fun)z_IU0Update}, {{1, 2, 840, 10003, 9, 5, 1,-1}, Z_External_update0, (Odr_fun)z_IU0Update}, {{1, 2, 840, 10003, 9, 5, 1, 1,-1}, Z_External_update, (Odr_fun)z_IUUpdate}, {{1, 2, 840, 10003, 10, 6,-1}, Z_External_dateTime, (Odr_fun)z_DateTime}, {{1, 2, 840, 10003, 7, 1000, 81, 1,-1}, Z_External_universeReport,(Odr_fun)z_UniverseReport}, {{1, 2, 840, 10003, 9, 1000, 81, 1,-1}, Z_External_ESAdmin, (Odr_fun)z_Admin}, {{1, 2, 840, 10003, 10, 3,-1}, Z_External_userInfo1, (Odr_fun) z_OtherInformation}, {{1, 2, 840, 10003, 10, 1000, 81, 5,-1}, Z_External_userFacets, (Odr_fun) z_FacetList}, {{1, 2, 840, 10003, 15, 3,-1}, Z_External_charSetandLanguageNegotiation, (Odr_fun) z_CharSetandLanguageNegotiation}, {{1, 2, 840, 10003, 8, 1,-1}, Z_External_acfPrompt1, (Odr_fun) z_PromptObject1}, {{1, 2, 840, 10003, 8, 2,-1}, Z_External_acfDes1, (Odr_fun) z_DES_RN_Object}, {{1, 2, 840, 10003, 8, 3,-1}, Z_External_acfKrb1, (Odr_fun) z_KRBObject}, {{1, 2, 840, 10003, 10, 5,-1}, Z_External_multisrch2, (Odr_fun) z_MultipleSearchTerms_2}, {{1, 2, 840, 10003, 16, 2, -1}, Z_External_CQL, (Odr_fun) z_InternationalString}, {{1, 2, 840, 10003, 9, 1,-1}, Z_External_persistentResultSet, (Odr_fun)z_PRPersistentResultSet}, {{1, 2, 840, 10003, 9, 2,-1}, Z_External_persistentQuery, (Odr_fun)z_PQueryPersistentQuery}, {{1, 2, 840, 10003, 9, 3,-1}, Z_External_periodicQuerySchedule, (Odr_fun)z_PQSPeriodicQuerySchedule}, {{1, 2, 840, 10003, 9, 6,-1}, Z_External_exportSpecification, (Odr_fun)z_ESExportSpecification}, {{1, 2, 840, 10003, 9, 7,-1}, Z_External_exportInvocation, (Odr_fun)z_EIExportInvocation}, {{-1}, 0, 0} }; Z_ext_typeent *z_ext_getentbyref(const Odr_oid *oid) { Z_ext_typeent *p; for (p = type_table; p->oid[0] != -1; p++) if (!oid_oidcmp(oid, p->oid)) return p; return 0; } /** This routine is the BER codec for the EXTERNAL type. It handles information in single-ASN1-type and octet-aligned for known structures.
    [UNIVERSAL 8] IMPLICIT SEQUENCE {
    direct-reference      OBJECT IDENTIFIER OPTIONAL,
    indirect-reference    INTEGER OPTIONAL,
    data-value-descriptor ObjectDescriptor OPTIONAL,
    encoding              CHOICE {
      single-ASN1-type   [0] ABSTRACT_SYNTAX.&Type,
      octet-aligned      [1] IMPLICIT OCTET STRING,
      arbitrary          [2] IMPLICIT BIT STRING
      }
    }
  
arbitrary BIT STRING not handled yet. */ int z_External(ODR o, Z_External **p, int opt, const char *name) { Z_ext_typeent *type; static Odr_arm arm[] = { {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_single, (Odr_fun)odr_any, 0}, {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_External_octet, (Odr_fun)odr_octetstring, 0}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_External_arbitrary, (Odr_fun)odr_bitstring, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_sutrs, (Odr_fun)z_SUTRS, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_explainRecord, (Odr_fun)z_ExplainRecord, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_resourceReport1, (Odr_fun)z_ResourceReport1, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_resourceReport2, (Odr_fun)z_ResourceReport2, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_promptObject1, (Odr_fun)z_PromptObject1, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_grs1, (Odr_fun)z_GenericRecord, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_extendedService, (Odr_fun)z_TaskPackage, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_itemOrder, (Odr_fun)z_IOItemOrder, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_diag1, (Odr_fun)z_DiagnosticFormat, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_espec1, (Odr_fun)z_Espec1, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_summary, (Odr_fun)z_BriefBib, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_OPAC, (Odr_fun)z_OPACRecord, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_searchResult1, (Odr_fun)z_SearchInfoReport, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_update, (Odr_fun)z_IUUpdate, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_dateTime, (Odr_fun)z_DateTime, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_universeReport, (Odr_fun)z_UniverseReport, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_ESAdmin, (Odr_fun)z_Admin, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_update0, (Odr_fun)z_IU0Update, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_userInfo1, (Odr_fun)z_OtherInformation, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_userFacets, (Odr_fun)z_FacetList, "FacetList" }, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_charSetandLanguageNegotiation, (Odr_fun)z_CharSetandLanguageNegotiation, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfPrompt1, (Odr_fun)z_PromptObject1, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfDes1, (Odr_fun)z_DES_RN_Object, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfKrb1, (Odr_fun)z_KRBObject, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_multisrch2, (Odr_fun)z_MultipleSearchTerms_2, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_CQL, (Odr_fun)z_InternationalString, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_OCLCUserInfo, (Odr_fun)z_OCLC_UserInformation, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_persistentResultSet, (Odr_fun)z_PRPersistentResultSet, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_persistentQuery, (Odr_fun)z_PQueryPersistentQuery, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_periodicQuerySchedule, (Odr_fun)z_PQSPeriodicQuerySchedule, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_exportSpecification, (Odr_fun)z_ESExportSpecification, 0}, {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_exportInvocation, (Odr_fun)z_EIExportInvocation, 0}, {-1, -1, -1, -1, 0, 0} }; odr_implicit_settag(o, ODR_UNIVERSAL, ODR_EXTERNAL); if (!odr_sequence_begin(o, p, sizeof(**p), name)) return opt && odr_ok(o); if (!(odr_oid(o, &(*p)->direct_reference, 1, 0) && odr_integer(o, &(*p)->indirect_reference, 1, 0) && odr_graphicstring(o, &(*p)->descriptor, 1, 0))) return 0; #if PRT_EXT_DEBUG /* debugging purposes only */ if (o->direction == ODR_DECODE) { yaz_log(YLOG_LOG, "z_external decode"); if ((*p)->direct_reference) { yaz_log(YLOG_LOG, "direct reference"); if ((oid = oid_getentbyoid((*p)->direct_reference))) { yaz_log(YLOG_LOG, "oid %s", oid->desc); if ((type = z_ext_getentbyref(oid->value))) yaz_log(YLOG_LOG, "type"); } } } #endif /* Do we know this beast? */ if (o->direction == ODR_DECODE && (*p)->direct_reference && (type = z_ext_getentbyref((*p)->direct_reference))) { int zclass, tag, cons; /* OID is present and we know it */ if (!odr_peektag(o, &zclass, &tag, &cons)) return opt && odr_ok(o); #if PRT_EXT_DEBUG yaz_log(YLOG_LOG, "odr_peektag OK tag=%d cons=%d zclass=%d what=%d", tag, cons, zclass, type->what); #endif if (zclass == ODR_CONTEXT && tag == 1 && cons == 0) { /* we have an OCTET STRING. decode BER contents from it */ const char *o_bp; char *o_buf; int o_size; char *voidp = 0; Odr_oct *oct; int r; if (!odr_implicit_tag(o, odr_octetstring, &oct, ODR_CONTEXT, 1, 0, "octetaligned")) return 0; /* Save our decoding ODR members */ o_bp = o->op->bp; o_buf = o->op->buf; o_size = o->op->size; /* Set up the OCTET STRING buffer */ o->op->bp = o->op->buf = oct->buf; o->op->size = oct->len; /* and decode that */ r = (*type->fun)(o, &voidp, 0, 0); (*p)->which = type->what; (*p)->u.single_ASN1_type = (Odr_any*) voidp; /* Restore our decoding ODR member */ o->op->bp = o_bp; o->op->buf = o_buf; o->op->size = o_size; return r && odr_sequence_end(o); } if (zclass == ODR_CONTEXT && tag == 0 && cons == 1) { /* It's single ASN.1 type, bias the CHOICE. */ odr_choice_bias(o, type->what); } } return odr_choice(o, arm, &(*p)->u, &(*p)->which, name) && odr_sequence_end(o); } Z_External *z_ext_record_oid_nmem(NMEM nmem, const Odr_oid *oid, const char *buf, int len) { Z_External *thisext; if (!oid) return 0; thisext = (Z_External *) nmem_malloc(nmem, sizeof(*thisext)); thisext->descriptor = 0; thisext->indirect_reference = 0; thisext->direct_reference = odr_oiddup_nmem(nmem, oid); if (len < 0) /* Structured data */ { /* * We cheat on the pointers here. Obviously, the record field * of the backend-fetch structure should have been a union for * correctness, but we're stuck with this for backwards * compatibility. */ thisext->u.grs1 = (Z_GenericRecord*) buf; if (!oid_oidcmp(oid, yaz_oid_recsyn_sutrs)) { thisext->which = Z_External_sutrs; } else if (!oid_oidcmp(oid, yaz_oid_recsyn_grs_1)) { thisext->which = Z_External_grs1; } else if (!oid_oidcmp(oid, yaz_oid_recsyn_explain)) { thisext->which = Z_External_explainRecord; } else if (!oid_oidcmp(oid, yaz_oid_recsyn_summary)) { thisext->which = Z_External_summary; } else if (!oid_oidcmp(oid, yaz_oid_recsyn_opac)) { thisext->which = Z_External_OPAC; } else if (!oid_oidcmp(oid, yaz_oid_recsyn_extended)) { thisext->which = Z_External_extendedService; } else { return 0; } } else if (!oid_oidcmp(oid, yaz_oid_recsyn_sutrs)) { /* SUTRS is a single-ASN.1-type */ Odr_oct *sutrs = (Odr_oct *)nmem_malloc(nmem, sizeof(*sutrs)); thisext->which = Z_External_sutrs; thisext->u.sutrs = sutrs; sutrs->buf = (char *)nmem_malloc(nmem, len); sutrs->len = len; memcpy(sutrs->buf, buf, len); } else { thisext->which = Z_External_octet; if (!(thisext->u.octet_aligned = (Odr_oct *) nmem_malloc(nmem, sizeof(Odr_oct)))) return 0; if (!(thisext->u.octet_aligned->buf = (char *) nmem_malloc(nmem, len))) return 0; memcpy(thisext->u.octet_aligned->buf, buf, len); thisext->u.octet_aligned->len = len; } return thisext; } Z_External *z_ext_record_oid(ODR o, const Odr_oid *oid, const char *buf, int len) { return z_ext_record_oid_nmem(o->mem, oid, buf, len); } Z_External *z_ext_record_oid_any(ODR o, const Odr_oid *oid, const char *buf, int len) { Z_External *thisext; if (!oid) return 0; thisext = (Z_External *) odr_malloc(o, sizeof(*thisext)); thisext->descriptor = 0; thisext->indirect_reference = 0; thisext->direct_reference = odr_oiddup(o, oid); thisext->which = Z_External_single; thisext->u.single_ASN1_type = (Odr_any *) odr_malloc(o, sizeof(Odr_any)); if (!thisext->u.single_ASN1_type) return 0; thisext->u.single_ASN1_type->buf = (char *) odr_malloc(o, len); if (!thisext->u.single_ASN1_type->buf) return 0; memcpy(thisext->u.single_ASN1_type->buf, buf, len); thisext->u.single_ASN1_type->len = len; return thisext; } Z_External *z_ext_record_xml(ODR o, const char *buf, int len) { return z_ext_record_oid(o, yaz_oid_recsyn_xml, buf, len); } Z_External *z_ext_record_sutrs(ODR o, const char *buf, int len) { return z_ext_record_oid(o, yaz_oid_recsyn_sutrs, buf, len); } Z_External *z_ext_record_usmarc(ODR o, const char *buf, int len) { return z_ext_record_oid(o, yaz_oid_recsyn_usmarc, buf, len); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zoom-c.c0000644000175000017500000015755513265142510011512 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zoom-c.c * \brief Implements ZOOM C interface. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "zoom-p.h" #include #include #include #include #include #include #include #include #include #include #if SHPTR YAZ_SHPTR_TYPE(WRBUF) #endif static int log_api0 = 0; static int log_details0 = 0; static void resultset_destroy(ZOOM_resultset r); static zoom_ret do_write_ex(ZOOM_connection c, char *buf_out, int len_out); static void initlog(void) { static int log_level_initialized = 0; if (!log_level_initialized) { log_api0 = yaz_log_module_level("zoom"); log_details0 = yaz_log_module_level("zoomdetails"); log_level_initialized = 1; } } static zoom_ret send_HTTP_redirect(ZOOM_connection c, const char *uri); void ZOOM_set_dset_error(ZOOM_connection c, int error, const char *dset, const char *addinfo, const char *addinfo2) { char *cp; xfree(c->addinfo); c->addinfo = 0; c->error = error; if (!c->diagset || strcmp(dset, c->diagset)) { xfree(c->diagset); c->diagset = xstrdup(dset); /* remove integer part from SRW diagset .. */ if ((cp = strrchr(c->diagset, '/'))) *cp = '\0'; } if (addinfo && addinfo2) { c->addinfo = (char*) xmalloc(strlen(addinfo) + strlen(addinfo2) + 3); strcpy(c->addinfo, addinfo); strcat(c->addinfo, ": "); strcat(c->addinfo, addinfo2); } else if (addinfo) c->addinfo = xstrdup(addinfo); if (error != ZOOM_ERROR_NONE) { yaz_log(c->log_api, "%p set_dset_error %s %s:%d %s %s", c, c->host_port ? c->host_port : "<>", dset, error, addinfo ? addinfo : "", addinfo2 ? addinfo2 : ""); } } int ZOOM_uri_to_code(const char *uri) { int code = 0; const char *cp; if ((cp = strrchr(uri, '/'))) code = atoi(cp+1); return code; } void ZOOM_set_error(ZOOM_connection c, int error, const char *addinfo) { ZOOM_set_dset_error(c, error, "ZOOM", addinfo, 0); } static void clear_error(ZOOM_connection c) { /* * If an error is tied to an operation then it's ok to clear: for * example, a diagnostic returned from a search is cleared by a * subsequent search. However, problems such as Connection Lost * or Init Refused are not cleared, because they are not * recoverable: doing another search doesn't help. */ ZOOM_connection_remove_events(c); switch (c->error) { case ZOOM_ERROR_CONNECT: case ZOOM_ERROR_MEMORY: case ZOOM_ERROR_DECODE: case ZOOM_ERROR_CONNECTION_LOST: case ZOOM_ERROR_INIT: case ZOOM_ERROR_INTERNAL: case ZOOM_ERROR_UNSUPPORTED_PROTOCOL: break; default: ZOOM_set_error(c, ZOOM_ERROR_NONE, 0); } } void ZOOM_connection_show_task(ZOOM_task task) { switch(task->which) { case ZOOM_TASK_SEARCH: yaz_log(YLOG_LOG, "search p=%p", task); break; case ZOOM_TASK_CONNECT: yaz_log(YLOG_LOG, "connect p=%p", task); break; case ZOOM_TASK_SCAN: yaz_log(YLOG_LOG, "scan p=%p", task); break; } } void ZOOM_connection_show_tasks(ZOOM_connection c) { ZOOM_task task; yaz_log(YLOG_LOG, "connection p=%p tasks", c); for (task = c->tasks; task; task = task->next) ZOOM_connection_show_task(task); } ZOOM_task ZOOM_connection_add_task(ZOOM_connection c, int which) { ZOOM_task *taskp = &c->tasks; while (*taskp) taskp = &(*taskp)->next; *taskp = (ZOOM_task) xmalloc(sizeof(**taskp)); (*taskp)->running = 0; (*taskp)->which = which; (*taskp)->next = 0; clear_error(c); return *taskp; } ZOOM_API(int) ZOOM_connection_is_idle(ZOOM_connection c) { return c->tasks ? 0 : 1; } ZOOM_task ZOOM_connection_insert_task(ZOOM_connection c, int which) { ZOOM_task task = (ZOOM_task) xmalloc(sizeof(*task)); task->next = c->tasks; c->tasks = task; task->running = 0; task->which = which; return task; } void ZOOM_connection_remove_task(ZOOM_connection c) { ZOOM_task task = c->tasks; if (task) { c->tasks = task->next; switch (task->which) { case ZOOM_TASK_SEARCH: resultset_destroy(task->u.search.resultset); xfree(task->u.search.syntax); xfree(task->u.search.elementSetName); xfree(task->u.search.schema); break; case ZOOM_TASK_CONNECT: break; case ZOOM_TASK_SCAN: ZOOM_scanset_destroy(task->u.scan.scan); break; case ZOOM_TASK_PACKAGE: ZOOM_package_destroy(task->u.package); break; case ZOOM_TASK_SORT: resultset_destroy(task->u.sort.resultset); ZOOM_query_destroy(task->u.sort.q); break; default: assert(0); } xfree(task); if (!c->tasks) { ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_END); ZOOM_connection_put_event(c, event); } } } void ZOOM_connection_remove_tasks(ZOOM_connection c) { while (c->tasks) ZOOM_connection_remove_task(c); } static void odr_wrbuf_write(ODR o, void *handle, int type, const char *buf, int len) { WRBUF w = (WRBUF) handle; wrbuf_write(w, buf, len); } ZOOM_API(ZOOM_connection) ZOOM_connection_create(ZOOM_options options) { ZOOM_connection c = (ZOOM_connection) xmalloc(sizeof(*c)); initlog(); c->log_api = log_api0; c->log_details = log_details0; yaz_log(c->log_api, "%p ZOOM_connection_create", c); c->proto = PROTO_Z3950; c->cs = 0; ZOOM_connection_set_mask(c, 0); c->reconnect_ok = 0; c->state = STATE_IDLE; c->addinfo = 0; c->diagset = 0; ZOOM_set_error(c, ZOOM_ERROR_NONE, 0); c->buf_in = 0; c->len_in = 0; c->buf_out = 0; c->len_out = 0; c->resultsets = 0; c->options = ZOOM_options_create_with_parent(options); c->host_port = 0; c->proxy = 0; c->tproxy = 0; c->proxy_mode = 0; c->charset = c->lang = 0; c->cookie_out = 0; c->cookie_in = 0; c->client_IP = 0; c->tasks = 0; c->user = 0; c->group = 0; c->password = 0; c->url_authentication = 0; c->maximum_record_size = 0; c->preferred_message_size = 0; c->odr_in = odr_createmem(ODR_DECODE); c->odr_out = odr_createmem(ODR_ENCODE); c->odr_print = 0; c->odr_save = 0; c->async = 0; c->support_named_resultsets = 0; c->last_event = ZOOM_EVENT_NONE; c->m_queue_front = 0; c->m_queue_back = 0; c->sru_version = 0; c->no_redirects = 0; c->cookies = 0; c->location = 0; c->saveAPDU_wrbuf = 0; ZOOM_memcached_init(c); return c; } ZOOM_API(void) ZOOM_connection_save_apdu_wrbuf(ZOOM_connection c, WRBUF w) { if (c->odr_save) { odr_destroy(c->odr_save); c->odr_save = 0; } if (w) { c->odr_save = odr_createmem(ODR_PRINT); odr_set_stream(c->odr_save, w, odr_wrbuf_write, 0); } } /* set database names. Take local databases (if set); otherwise take databases given in ZURL (if set); otherwise use Default */ char **ZOOM_connection_get_databases(ZOOM_connection con, ZOOM_options options, int *num, ODR odr) { char **databaseNames; const char *cp = ZOOM_options_get(options, "databaseName"); if ((!cp || !*cp) && con->host_port) cs_get_host_args(con->host_port, &cp); if (!cp || !*cp) cp = "Default"; nmem_strsplit(odr_getmem(odr), "+", cp, &databaseNames, num); return databaseNames; } ZOOM_API(ZOOM_connection) ZOOM_connection_new(const char *host, int portnum) { ZOOM_connection c = ZOOM_connection_create(0); ZOOM_connection_connect(c, host, portnum); return c; } static zoom_sru_mode get_sru_mode_from_string(const char *s) { if (!s || !*s) return zoom_sru_soap; if (!yaz_matchstr(s, "soap")) return zoom_sru_soap; else if (!yaz_matchstr(s, "get")) return zoom_sru_get; else if (!yaz_matchstr(s, "post")) return zoom_sru_post; else if (!yaz_matchstr(s, "solr")) return zoom_sru_solr; return zoom_sru_error; } ZOOM_API(void) ZOOM_connection_connect(ZOOM_connection c, const char *host, int portnum) { const char *val; initlog(); yaz_log(c->log_api, "%p ZOOM_connection_connect host=%s portnum=%d", c, host ? host : "null", portnum); ZOOM_set_error(c, ZOOM_ERROR_NONE, 0); ZOOM_connection_remove_tasks(c); if (c->cs) { yaz_log(c->log_details, "%p ZOOM_connection_connect reconnect ok", c); c->reconnect_ok = 1; return; } yaz_log(c->log_details, "%p ZOOM_connection_connect connect", c); xfree(c->proxy); c->proxy = 0; val = ZOOM_options_get(c->options, "proxy"); if (val && *val) { yaz_log(c->log_details, "%p ZOOM_connection_connect proxy=%s", c, val); c->proxy = xstrdup(val); } xfree(c->tproxy); c->tproxy = 0; val = ZOOM_options_get(c->options, "tproxy"); if (val && *val) { yaz_log(c->log_details, "%p ZOOM_connection_connect tproxy=%s", c, val); c->tproxy = xstrdup(val); } xfree(c->charset); c->charset = 0; val = ZOOM_options_get(c->options, "charset"); if (val && *val) { yaz_log(c->log_details, "%p ZOOM_connection_connect charset=%s", c, val); c->charset = xstrdup(val); } xfree(c->lang); val = ZOOM_options_get(c->options, "lang"); if (val && *val) { yaz_log(c->log_details, "%p ZOOM_connection_connect lang=%s", c, val); c->lang = xstrdup(val); } else c->lang = 0; if (host) { char hostn[128]; const char *http_lead; val = ZOOM_options_get(c->options, "sru"); if (val && *val && !strstr(host, "://")) http_lead = "http://"; else http_lead = ""; c->sru_mode = get_sru_mode_from_string(val); xfree(c->host_port); if (portnum) { sprintf(hostn, "%.80s:%d", host, portnum); host = hostn; } c->host_port = xmalloc(strlen(host) + strlen(http_lead) + 1); strcpy(c->host_port, http_lead); strcat(c->host_port, host); } { /* * If the ":" part of the host string is preceded by one * or more comma-separated = pairs, these are taken * to be options to be set on the connection object. Among other * applications, this facility can be used to embed authentication * in a host string: * user=admin,password=secret,tcp:localhost:9999 */ char *remainder = c->host_port; char *pcolon = strchr(remainder, ':'); char *pcomma; char *pequals; while ((pcomma = strchr(remainder, ',')) != 0 && (pcolon == 0 || pcomma < pcolon)) { *pcomma = '\0'; if ((pequals = strchr(remainder, '=')) != 0) { *pequals = '\0'; ZOOM_connection_option_set(c, remainder, pequals+1); } remainder = pcomma+1; } if (remainder != c->host_port) { remainder = xstrdup(remainder); xfree(c->host_port); c->host_port = remainder; } } xfree(c->sru_version); val = ZOOM_options_get(c->options, "sru_version"); c->sru_version = xstrdup(val ? val : "1.2"); ZOOM_options_set(c->options, "host", c->host_port); xfree(c->cookie_out); c->cookie_out = 0; val = ZOOM_options_get(c->options, "cookie"); if (val && *val) { yaz_log(c->log_details, "%p ZOOM_connection_connect cookie=%s", c, val); c->cookie_out = xstrdup(val); } xfree(c->client_IP); c->client_IP = 0; val = ZOOM_options_get(c->options, "clientIP"); if (val && *val) { yaz_log(c->log_details, "%p ZOOM_connection_connect clientIP=%s", c, val); c->client_IP = xstrdup(val); } xfree(c->group); c->group = 0; val = ZOOM_options_get(c->options, "group"); if (val && *val) c->group = xstrdup(val); xfree(c->user); c->user = 0; val = ZOOM_options_get(c->options, "user"); if (val && *val) c->user = xstrdup(val); xfree(c->password); c->password = 0; val = ZOOM_options_get(c->options, "password"); if (!val) val = ZOOM_options_get(c->options, "pass"); if (val && *val) c->password = xstrdup(val); val = ZOOM_options_get(c->options, "authenticationMode"); if (val && !strcmp(val, "url")) c->url_authentication = 1; else c->url_authentication = 0; c->maximum_record_size = ZOOM_options_get_int(c->options, "maximumRecordSize", 64*1024*1024); c->preferred_message_size = ZOOM_options_get_int(c->options, "preferredMessageSize", 64*1024*1024); c->async = ZOOM_options_get_bool(c->options, "async", 0); yaz_cookies_destroy(c->cookies); c->cookies = yaz_cookies_create(); if (ZOOM_memcached_configure(c)) { ZOOM_connection_remove_tasks(c); return; } if (c->sru_mode == zoom_sru_error) { ZOOM_set_error(c, ZOOM_ERROR_UNSUPPORTED_PROTOCOL, val); ZOOM_connection_remove_tasks(c); return; } if (c->odr_print) odr_destroy(c->odr_print); c->odr_print = 0; val = ZOOM_options_get(c->options, "apdufile"); if (val) { c->odr_print = odr_createmem(ODR_PRINT); if (strcmp(val, "-")) { FILE *f = fopen(val, "a"); if (!f) { WRBUF w = wrbuf_alloc(); wrbuf_printf(w, "fopen: %s", val); ZOOM_set_error(c, ZOOM_ERROR_INTERNAL, wrbuf_cstr(w)); wrbuf_destroy(w); return; } odr_setprint(c->odr_print, f); } } else if (ZOOM_options_get_bool(c->options, "apdulog", 0)) { c->odr_print = odr_createmem(ODR_PRINT); odr_setprint_noclose(c->odr_print, yaz_log_file()); } yaz_log(c->log_details, "%p ZOOM_connection_connect async=%d", c, c->async); ZOOM_connection_add_task(c, ZOOM_TASK_CONNECT); if (!c->async) { while (ZOOM_event(1, &c)) ; } } ZOOM_API(void) ZOOM_resultset_release(ZOOM_resultset r) { if (r->connection) { /* remove ourselves from the resultsets in connection */ ZOOM_resultset *rp = &r->connection->resultsets; while (1) { assert(*rp); /* we must be in this list!! */ if (*rp == r) { /* OK, we're here - take us out of it */ *rp = (*rp)->next; break; } rp = &(*rp)->next; } r->connection = 0; } } ZOOM_API(void) ZOOM_connection_destroy(ZOOM_connection c) { ZOOM_resultset r; if (!c) return; yaz_log(c->log_api, "%p ZOOM_connection_destroy", c); ZOOM_memcached_destroy(c); if (c->cs) cs_close(c->cs); for (r = c->resultsets; r; r = r->next) r->connection = 0; xfree(c->buf_in); xfree(c->addinfo); xfree(c->diagset); odr_destroy(c->odr_in); odr_destroy(c->odr_out); if (c->odr_save) odr_destroy(c->odr_save); if (c->odr_print) odr_destroy(c->odr_print); ZOOM_options_destroy(c->options); ZOOM_connection_remove_tasks(c); ZOOM_connection_remove_events(c); xfree(c->host_port); xfree(c->proxy); xfree(c->tproxy); xfree(c->charset); xfree(c->lang); xfree(c->cookie_out); xfree(c->cookie_in); xfree(c->client_IP); xfree(c->user); xfree(c->group); xfree(c->password); xfree(c->sru_version); xfree(c->location); yaz_cookies_destroy(c->cookies); wrbuf_destroy(c->saveAPDU_wrbuf); xfree(c); } void ZOOM_resultset_addref(ZOOM_resultset r) { if (r) { yaz_mutex_enter(r->mutex); (r->refcount)++; yaz_log(log_details0, "%p ZOOM_resultset_addref count=%d", r, r->refcount); yaz_mutex_leave(r->mutex); } } static int g_resultsets = 0; static YAZ_MUTEX g_resultset_mutex = 0; /* TODO We need to initialize this before running threaded: * call resultset_use(0) */ static int resultset_use(int delta) { int resultset_count; if (g_resultset_mutex == 0) yaz_mutex_create(&g_resultset_mutex); yaz_mutex_enter(g_resultset_mutex); g_resultsets += delta; resultset_count = g_resultsets; yaz_mutex_leave(g_resultset_mutex); return resultset_count; } int resultsets_count(void) { return resultset_use(0); } ZOOM_resultset ZOOM_resultset_create(void) { int i; ZOOM_resultset r = (ZOOM_resultset) xmalloc(sizeof(*r)); initlog(); yaz_log(log_details0, "%p ZOOM_resultset_create", r); r->refcount = 1; r->size = 0; r->odr = odr_createmem(ODR_DECODE); r->piggyback = 1; r->setname = 0; r->step = 0; for (i = 0; irecord_hash[i] = 0; r->r_sort_spec = 0; r->query = 0; r->connection = 0; r->databaseNames = 0; r->num_databaseNames = 0; r->req_facets = 0; r->res_facets = 0; r->num_res_facets = 0; r->facets_names = 0; r->mutex = 0; yaz_mutex_create(&r->mutex); #if SHPTR { WRBUF w = wrbuf_alloc(); YAZ_SHPTR_INIT(r->record_wrbuf, w); } #endif resultset_use(1); r->mc_key = 0; r->live_set = 0; return r; } ZOOM_API(ZOOM_resultset) ZOOM_connection_search_pqf(ZOOM_connection c, const char *q) { ZOOM_resultset r; ZOOM_query s = ZOOM_query_create(); ZOOM_query_prefix(s, q); r = ZOOM_connection_search(c, s); ZOOM_query_destroy(s); return r; } ZOOM_API(ZOOM_resultset) ZOOM_connection_search(ZOOM_connection c, ZOOM_query q) { ZOOM_resultset r = ZOOM_resultset_create(); ZOOM_task task; int start, count; const char *syntax, *elementSetName, *schema; yaz_log(c->log_api, "%p ZOOM_connection_search set %p query %p", c, r, q); r->r_sort_spec = ZOOM_query_get_sortspec(q); r->query = q; ZOOM_query_addref(q); r->options = ZOOM_options_create_with_parent(c->options); r->req_facets = odr_strdup_null(r->odr, ZOOM_options_get(r->options, "facets")); start = ZOOM_options_get_int(r->options, "start", 0); count = ZOOM_options_get_int(r->options, "count", 0); { /* If "presentChunk" is defined use that; otherwise "step" */ const char *cp = ZOOM_options_get(r->options, "presentChunk"); r->step = ZOOM_options_get_int(r->options, (cp != 0 ? "presentChunk": "step"), 0); } r->piggyback = ZOOM_options_get_bool(r->options, "piggyback", 1); r->setname = odr_strdup_null(r->odr, ZOOM_options_get(r->options, "setname")); r->databaseNames = ZOOM_connection_get_databases(c, c->options, &r->num_databaseNames, r->odr); r->connection = c; r->next = c->resultsets; c->resultsets = r; ZOOM_memcached_resultset(r, q); if (c->host_port && c->proto == PROTO_HTTP) { if (!c->cs) { yaz_log(c->log_details, "ZOOM_connection_search: no comstack"); ZOOM_connection_add_task(c, ZOOM_TASK_CONNECT); } else { yaz_log(c->log_details, "ZOOM_connection_search: reconnect"); c->reconnect_ok = 1; } } task = ZOOM_connection_add_task(c, ZOOM_TASK_SEARCH); task->u.search.resultset = r; task->u.search.start = start; task->u.search.count = count; syntax = ZOOM_options_get(r->options, "preferredRecordSyntax"); task->u.search.syntax = syntax ? xstrdup(syntax) : 0; elementSetName = ZOOM_options_get(r->options, "elementSetName"); task->u.search.elementSetName = elementSetName ? xstrdup(elementSetName) : 0; schema = ZOOM_options_get(r->options, "schema"); task->u.search.schema = schema ? xstrdup(schema) : 0; ZOOM_resultset_addref(r); if (!c->async) { while (ZOOM_event(1, &c)) ; } return r; } ZOOM_API(void) ZOOM_resultset_sort(ZOOM_resultset r, const char *sort_type, const char *sort_spec) { (void) ZOOM_resultset_sort1(r, sort_type, sort_spec); } ZOOM_API(int) ZOOM_resultset_sort1(ZOOM_resultset r, const char *sort_type, const char *sort_spec) { ZOOM_connection c = r->connection; ZOOM_task task; ZOOM_query newq; newq = ZOOM_query_create(); if (ZOOM_query_sortby(newq, sort_spec) < 0) return -1; yaz_log(c->log_api, "%p ZOOM_resultset_sort r=%p sort_type=%s sort_spec=%s", r, r, sort_type, sort_spec); if (!c) return 0; if (c->host_port && c->proto == PROTO_HTTP) { if (!c->cs) { yaz_log(c->log_details, "%p ZOOM_resultset_sort: no comstack", r); ZOOM_connection_add_task(c, ZOOM_TASK_CONNECT); } else { yaz_log(c->log_details, "%p ZOOM_resultset_sort: prepare reconnect", r); c->reconnect_ok = 1; } } ZOOM_resultset_cache_reset(r); task = ZOOM_connection_add_task(c, ZOOM_TASK_SORT); task->u.sort.resultset = r; task->u.sort.q = newq; ZOOM_resultset_addref(r); if (!c->async) { while (ZOOM_event(1, &c)) ; } return 0; } ZOOM_API(void) ZOOM_resultset_destroy(ZOOM_resultset r) { resultset_destroy(r); } static void resultset_destroy(ZOOM_resultset r) { if (!r) return; yaz_mutex_enter(r->mutex); (r->refcount)--; yaz_log(log_details0, "%p ZOOM_resultset_destroy r=%p count=%d", r, r, r->refcount); if (r->refcount == 0) { yaz_mutex_leave(r->mutex); yaz_log(log_details0, "%p ZOOM_connection resultset_destroy: Deleting resultset (%p) ", r->connection, r); ZOOM_resultset_cache_reset(r); ZOOM_resultset_release(r); ZOOM_query_destroy(r->query); ZOOM_options_destroy(r->options); odr_destroy(r->odr); yaz_mutex_destroy(&r->mutex); #if SHPTR YAZ_SHPTR_DEC(r->record_wrbuf, wrbuf_destroy); #endif wrbuf_destroy(r->mc_key); resultset_use(-1); xfree(r); } else yaz_mutex_leave(r->mutex); } ZOOM_API(size_t) ZOOM_resultset_size(ZOOM_resultset r) { return r->size; } int ZOOM_test_reconnect(ZOOM_connection c) { ZOOM_Event event; if (!c->reconnect_ok) return 0; ZOOM_connection_close(c); c->reconnect_ok = 0; c->tasks->running = 0; ZOOM_connection_insert_task(c, ZOOM_TASK_CONNECT); event = ZOOM_Event_create(ZOOM_EVENT_CONNECT); ZOOM_connection_put_event(c, event); return 1; } static void ZOOM_resultset_retrieve(ZOOM_resultset r, int force_sync, int start, int count) { ZOOM_task task; ZOOM_connection c; const char *cp; const char *syntax, *elementSetName; if (!r) return; yaz_log(log_details0, "%p ZOOM_resultset_retrieve force_sync=%d start=%d" " count=%d", r, force_sync, start, count); c = r->connection; if (!c) return; if (c->host_port && c->proto == PROTO_HTTP) { if (!c->cs) { yaz_log(log_details0, "%p ZOOM_resultset_retrieve: no comstack", r); ZOOM_connection_add_task(c, ZOOM_TASK_CONNECT); } else { yaz_log(log_details0, "%p ZOOM_resultset_retrieve: prepare " "reconnect", r); c->reconnect_ok = 1; } } task = ZOOM_connection_add_task(c, ZOOM_TASK_SEARCH); task->u.search.resultset = r; task->u.search.start = start; task->u.search.count = count; syntax = ZOOM_options_get(r->options, "preferredRecordSyntax"); task->u.search.syntax = syntax ? xstrdup(syntax) : 0; elementSetName = ZOOM_options_get(r->options, "elementSetName"); task->u.search.elementSetName = elementSetName ? xstrdup(elementSetName) : 0; cp = ZOOM_options_get(r->options, "schema"); task->u.search.schema = cp ? xstrdup(cp) : 0; ZOOM_resultset_addref(r); if (!r->connection->async || force_sync) while (r->connection && ZOOM_event(1, &r->connection)) ; } ZOOM_API(void) ZOOM_resultset_records(ZOOM_resultset r, ZOOM_record *recs, size_t start, size_t count) { int force_present = 0; if (!r) return ; yaz_log(log_api0, "%p ZOOM_resultset_records r=%p start=%ld count=%ld", r, r, (long) start, (long) count); if (count && recs) force_present = 1; ZOOM_resultset_retrieve(r, force_present, start, count); if (force_present) { size_t i; for (i = 0; i< count; i++) recs[i] = ZOOM_resultset_record_immediate(r, i+start); } } ZOOM_API(size_t) ZOOM_resultset_facets_size(ZOOM_resultset r) { return r->num_res_facets; } ZOOM_API(ZOOM_facet_field) ZOOM_resultset_get_facet_field(ZOOM_resultset r, const char *name) { int num = r->num_res_facets; ZOOM_facet_field *facets = r->res_facets; int i; for (i = 0; i < num; i++) if (!strcmp(facets[i]->facet_name, name)) return facets[i]; return 0; } ZOOM_API(ZOOM_facet_field) ZOOM_resultset_get_facet_field_by_index(ZOOM_resultset r, int idx) { int num = r->num_res_facets; ZOOM_facet_field *facets = r->res_facets; if (idx >= 0 && idx < num) return facets[idx]; return 0; } ZOOM_API(ZOOM_facet_field *) ZOOM_resultset_facets(ZOOM_resultset r) { return r->res_facets; } ZOOM_API(const char**) ZOOM_resultset_facets_names(ZOOM_resultset r) { return (const char **) r->facets_names; } ZOOM_API(const char*) ZOOM_facet_field_name(ZOOM_facet_field field) { return field->facet_name; } ZOOM_API(size_t) ZOOM_facet_field_term_count(ZOOM_facet_field field) { return field->num_terms; } ZOOM_API(const char*) ZOOM_facet_field_get_term(ZOOM_facet_field field, size_t idx, int *freq) { *freq = field->facet_terms[idx].frequency; return field->facet_terms[idx].term; } static void get_cert(ZOOM_connection c) { char *cert_buf; int cert_len; if (cs_get_peer_certificate_x509(c->cs, &cert_buf, &cert_len)) { ZOOM_connection_option_setl(c, "sslPeerCert", cert_buf, cert_len); xfree(cert_buf); } } static zoom_ret do_connect_host(ZOOM_connection c, const char *logical_url); static zoom_ret do_connect(ZOOM_connection c) { return do_connect_host(c, c->host_port); } static zoom_ret do_connect_host(ZOOM_connection c, const char *logical_url) { void *add; if (c->cs) cs_close(c->cs); c->cs = cs_create_host2(logical_url, CS_FLAGS_DNS_NO_BLOCK, &add, c->tproxy ? c->tproxy : c->proxy, &c->proxy_mode); if (!c->proxy) c->proxy_mode = 0; if (c->cs && c->cs->protocol == PROTO_HTTP) { #if YAZ_HAVE_XML2 c->proto = PROTO_HTTP; #else ZOOM_set_error(c, ZOOM_ERROR_UNSUPPORTED_PROTOCOL, "SRW"); ZOOM_connection_close(c); return zoom_complete; #endif } if (c->cs) { int ret = cs_connect(c->cs, add); if (ret == 0) { ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_CONNECT); ZOOM_connection_put_event(c, event); get_cert(c); if (c->proto == PROTO_Z3950) ZOOM_connection_Z3950_send_init(c); else { /* no init request for SRW .. */ assert(c->tasks->which == ZOOM_TASK_CONNECT); ZOOM_connection_remove_task(c); ZOOM_connection_set_mask(c, 0); if (c->cs && c->location) send_HTTP_redirect(c, c->location); else ZOOM_connection_exec_task(c); } c->state = STATE_ESTABLISHED; return zoom_pending; } else if (ret > 0) { int mask = ZOOM_SELECT_EXCEPT; if (c->cs->io_pending & CS_WANT_WRITE) mask += ZOOM_SELECT_WRITE; if (c->cs->io_pending & CS_WANT_READ) mask += ZOOM_SELECT_READ; ZOOM_connection_set_mask(c, mask); c->state = STATE_CONNECTING; return zoom_pending; } } c->state = STATE_IDLE; ZOOM_set_error(c, ZOOM_ERROR_CONNECT, logical_url); return zoom_complete; } /* returns 1 if PDU was sent OK (still pending ) 0 if PDU was not sent OK (nothing to wait for) */ ZOOM_API(ZOOM_record) ZOOM_resultset_record_immediate(ZOOM_resultset s,size_t pos) { const char *syntax = ZOOM_options_get(s->options, "preferredRecordSyntax"); const char *elementSetName = ZOOM_options_get(s->options, "elementSetName"); const char *schema = ZOOM_options_get(s->options, "schema"); return ZOOM_record_cache_lookup_i(s, pos, syntax, elementSetName, schema); } ZOOM_API(ZOOM_record) ZOOM_resultset_record(ZOOM_resultset r, size_t pos) { ZOOM_record rec = ZOOM_resultset_record_immediate(r, pos); if (!rec) { /* * MIKE: I think force_sync should always be zero, but I don't * want to make this change until I get the go-ahead from * Adam, in case something depends on the old synchronous * behaviour. */ int force_sync = 1; if (getenv("ZOOM_RECORD_NO_FORCE_SYNC")) force_sync = 0; ZOOM_resultset_retrieve(r, force_sync, pos, 1); rec = ZOOM_resultset_record_immediate(r, pos); } return rec; } ZOOM_API(ZOOM_scanset) ZOOM_connection_scan(ZOOM_connection c, const char *start) { ZOOM_scanset s; ZOOM_query q = ZOOM_query_create(); ZOOM_query_prefix(q, start); s = ZOOM_connection_scan1(c, q); ZOOM_query_destroy(q); return s; } ZOOM_API(ZOOM_scanset) ZOOM_connection_scan1(ZOOM_connection c, ZOOM_query q) { ZOOM_scanset scan = 0; Z_Query *z_query = ZOOM_query_get_Z_Query(q); if (!z_query) return 0; scan = (ZOOM_scanset) xmalloc(sizeof(*scan)); scan->connection = c; scan->odr = odr_createmem(ODR_DECODE); scan->options = ZOOM_options_create_with_parent(c->options); scan->refcount = 1; scan->scan_response = 0; scan->srw_scan_response = 0; scan->query = q; ZOOM_query_addref(q); scan->databaseNames = ZOOM_connection_get_databases(c, c->options, &scan->num_databaseNames, scan->odr); if (1) { ZOOM_task task = ZOOM_connection_add_task(c, ZOOM_TASK_SCAN); task->u.scan.scan = scan; (scan->refcount)++; if (!c->async) { while (ZOOM_event(1, &c)) ; } } return scan; } ZOOM_API(void) ZOOM_scanset_destroy(ZOOM_scanset scan) { if (!scan) return; (scan->refcount)--; if (scan->refcount == 0) { ZOOM_query_destroy(scan->query); odr_destroy(scan->odr); ZOOM_options_destroy(scan->options); xfree(scan); } } static zoom_ret send_package(ZOOM_connection c) { ZOOM_Event event; yaz_log(c->log_details, "%p send_package", c); if (!c->tasks) return zoom_complete; assert (c->tasks->which == ZOOM_TASK_PACKAGE); event = ZOOM_Event_create(ZOOM_EVENT_SEND_APDU); ZOOM_connection_put_event(c, event); c->buf_out = c->tasks->u.package->buf_out; c->len_out = c->tasks->u.package->len_out; return ZOOM_send_buf(c); } ZOOM_API(size_t) ZOOM_scanset_size(ZOOM_scanset scan) { if (!scan) return 0; if (scan->scan_response && scan->scan_response->entries) return scan->scan_response->entries->num_entries; else if (scan->srw_scan_response) return scan->srw_scan_response->num_terms; return 0; } static void ZOOM_scanset_term_x(ZOOM_scanset scan, size_t pos, size_t *occ, const char **value_term, size_t *value_len, const char **disp_term, size_t *disp_len) { size_t noent = ZOOM_scanset_size(scan); *value_term = 0; *value_len = 0; *disp_term = 0; *disp_len = 0; *occ = 0; if (pos >= noent) return; if (scan->scan_response) { Z_ScanResponse *res = scan->scan_response; if (res->entries->entries[pos]->which == Z_Entry_termInfo) { Z_TermInfo *t = res->entries->entries[pos]->u.termInfo; *value_term = (const char *) t->term->u.general->buf; *value_len = t->term->u.general->len; if (t->displayTerm) { *disp_term = t->displayTerm; *disp_len = strlen(*disp_term); } else if (t->term->which == Z_Term_general) { *disp_term = (const char *) t->term->u.general->buf; *disp_len = t->term->u.general->len; } *occ = t->globalOccurrences ? *t->globalOccurrences : 0; } } if (scan->srw_scan_response) { Z_SRW_scanResponse *res = scan->srw_scan_response; Z_SRW_scanTerm *t = res->terms + pos; if (t) { *value_term = t->value; *value_len = strlen(*value_term); if (t->displayTerm) *disp_term = t->displayTerm; else *disp_term = t->value; *disp_len = strlen(*disp_term); *occ = t->numberOfRecords ? *t->numberOfRecords : 0; } } } ZOOM_API(const char *) ZOOM_scanset_term(ZOOM_scanset scan, size_t pos, size_t *occ, size_t *len) { const char *value_term = 0; size_t value_len = 0; const char *disp_term = 0; size_t disp_len = 0; ZOOM_scanset_term_x(scan, pos, occ, &value_term, &value_len, &disp_term, &disp_len); *len = value_len; return value_term; } ZOOM_API(const char *) ZOOM_scanset_display_term(ZOOM_scanset scan, size_t pos, size_t *occ, size_t *len) { const char *value_term = 0; size_t value_len = 0; const char *disp_term = 0; size_t disp_len = 0; ZOOM_scanset_term_x(scan, pos, occ, &value_term, &value_len, &disp_term, &disp_len); *len = disp_len; return disp_term; } ZOOM_API(const char *) ZOOM_scanset_option_get(ZOOM_scanset scan, const char *key) { return ZOOM_options_get(scan->options, key); } ZOOM_API(void) ZOOM_scanset_option_set(ZOOM_scanset scan, const char *key, const char *val) { ZOOM_options_set(scan->options, key, val); } ZOOM_API(ZOOM_package) ZOOM_connection_package(ZOOM_connection c, ZOOM_options options) { ZOOM_package p = (ZOOM_package) xmalloc(sizeof(*p)); p->connection = c; p->odr_out = odr_createmem(ODR_ENCODE); p->options = ZOOM_options_create_with_parent2(options, c->options); p->refcount = 1; p->buf_out = 0; p->len_out = 0; return p; } ZOOM_API(void) ZOOM_package_destroy(ZOOM_package p) { if (!p) return; (p->refcount)--; if (p->refcount == 0) { odr_destroy(p->odr_out); xfree(p->buf_out); ZOOM_options_destroy(p->options); xfree(p); } } ZOOM_API(const char *) ZOOM_package_option_get(ZOOM_package p, const char *key) { return ZOOM_options_get(p->options, key); } ZOOM_API(const char *) ZOOM_package_option_getl(ZOOM_package p, const char *key, int *lenp) { return ZOOM_options_getl(p->options, key, lenp); } ZOOM_API(void) ZOOM_package_option_set(ZOOM_package p, const char *key, const char *val) { ZOOM_options_set(p->options, key, val); } ZOOM_API(void) ZOOM_package_option_setl(ZOOM_package p, const char *key, const char *val, int len) { ZOOM_options_setl(p->options, key, val, len); } ZOOM_API(int) ZOOM_connection_exec_task(ZOOM_connection c) { ZOOM_task task = c->tasks; zoom_ret ret = zoom_complete; if (!task) return 0; yaz_log(c->log_details, "%p ZOOM_connection_exec_task type=%d run=%d", c, task->which, task->running); if (c->error != ZOOM_ERROR_NONE) { yaz_log(c->log_details, "%p ZOOM_connection_exec_task " "removing tasks because of error = %d", c, c->error); ZOOM_connection_remove_tasks(c); return 0; } if (task->running) { yaz_log(c->log_details, "%p ZOOM_connection_exec_task " "task already running", c); return 0; } task->running = 1; ret = zoom_complete; if (c->cs || task->which == ZOOM_TASK_CONNECT) { switch (task->which) { case ZOOM_TASK_SEARCH: if (c->proto == PROTO_HTTP) ret = ZOOM_connection_srw_send_search(c); else ret = ZOOM_connection_Z3950_search(c); break; case ZOOM_TASK_CONNECT: ret = do_connect(c); break; case ZOOM_TASK_SCAN: if (c->proto == PROTO_HTTP) ret = ZOOM_connection_srw_send_scan(c); else ret = ZOOM_connection_Z3950_send_scan(c); break; case ZOOM_TASK_PACKAGE: ret = send_package(c); break; case ZOOM_TASK_SORT: c->tasks->u.sort.resultset->r_sort_spec = ZOOM_query_get_sortspec(c->tasks->u.sort.q); ret = send_Z3950_sort(c, c->tasks->u.sort.resultset); break; } } else { yaz_log(c->log_details, "%p ZOOM_connection_exec_task " "remove tasks because no connection exist", c); ZOOM_connection_remove_tasks(c); } if (ret == zoom_complete) { yaz_log(c->log_details, "%p ZOOM_connection_exec_task " "task removed (complete)", c); ZOOM_connection_remove_task(c); return 0; } yaz_log(c->log_details, "%p ZOOM_connection_exec_task " "task pending", c); return 1; } static zoom_ret send_HTTP_redirect(ZOOM_connection c, const char *uri) { Z_GDU *gdu = z_get_HTTP_Request_uri(c->odr_out, uri, 0, c->proxy ? 1 : 0); gdu->u.HTTP_Request->method = odr_strdup(c->odr_out, "GET"); z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers, "Accept", "text/xml"); yaz_cookies_request(c->cookies, c->odr_out, gdu->u.HTTP_Request); if (c->user && c->password) { z_HTTP_header_add_basic_auth(c->odr_out, &gdu->u.HTTP_Request->headers, c->user, c->password); } xfree(c->location); c->location = 0; return ZOOM_send_GDU(c, gdu); } zoom_ret ZOOM_send_GDU(ZOOM_connection c, Z_GDU *gdu) { ZOOM_Event event; int r = z_GDU(c->odr_out, &gdu, 0, 0); if (!r) return zoom_complete; if (c->odr_print) z_GDU(c->odr_print, &gdu, 0, 0); if (c->odr_save) z_GDU(c->odr_save, &gdu, 0, 0); c->buf_out = odr_getbuf(c->odr_out, &c->len_out, 0); odr_reset(c->odr_out); event = ZOOM_Event_create(ZOOM_EVENT_SEND_APDU); ZOOM_connection_put_event(c, event); return ZOOM_send_buf(c); } void ZOOM_set_HTTP_error(ZOOM_connection c, int error, const char *addinfo, const char *addinfo2) { ZOOM_set_dset_error(c, error, "HTTP", addinfo, addinfo2); } #if YAZ_HAVE_XML2 static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres) { zoom_ret cret = zoom_complete; int ret = -1; char *addinfo = 0; const char *connection_head = z_HTTP_header_lookup(hres->headers, "Connection"); int must_close = 0; const char *location; ZOOM_connection_set_mask(c, 0); yaz_log(c->log_details, "%p handle_http", c); if (!strcmp(hres->version, "1.0")) { /* HTTP 1.0: only if Keep-Alive we stay alive.. */ if (!connection_head || strcmp(connection_head, "Keep-Alive")) must_close = 1; } else { /* HTTP 1.1: only if no close we stay alive.. */ if (connection_head && !strcmp(connection_head, "close")) must_close = 1; } yaz_cookies_response(c->cookies, hres); if ((hres->code == 301 || hres->code == 302) && c->sru_mode == zoom_sru_get && (location = z_HTTP_header_lookup(hres->headers, "Location"))) { c->no_redirects++; if (c->no_redirects > 10) { ZOOM_set_HTTP_error(c, hres->code, 0, 0); c->no_redirects = 0; ZOOM_connection_close(c); } else { /* since redirect may change host we just reconnect. A smarter implementation might check whether it's the same server */ int host_change = 0; location = yaz_check_location(c->odr_in, c->host_port, location, &host_change); xfree(c->location); c->location = xstrdup(location); do_connect_host(c, location); return; } } else { ret = ZOOM_handle_sru(c, hres, &cret, &addinfo); if (ret == 0) { if (c->no_redirects) /* end of redirect. change hosts again */ ZOOM_connection_close(c); } c->no_redirects = 0; } if (ret) { if (hres->code != 200) ZOOM_set_HTTP_error(c, hres->code, 0, 0); else { yaz_log(YLOG_LOG, "set error... addinfo=%s", addinfo ? addinfo : "NULL"); ZOOM_set_error(c, ZOOM_ERROR_DECODE, addinfo); } ZOOM_connection_close(c); } if (cret == zoom_complete) { yaz_log(c->log_details, "removing tasks in handle_http"); ZOOM_connection_remove_task(c); } if (must_close) { ZOOM_connection_close(c); if (c->tasks) { c->tasks->running = 0; ZOOM_connection_insert_task(c, ZOOM_TASK_CONNECT); c->reconnect_ok = 0; } } else c->reconnect_ok = 1; /* if the server closes anyway */ } #endif static int do_read(ZOOM_connection c) { int r, more; ZOOM_Event event; event = ZOOM_Event_create(ZOOM_EVENT_RECV_DATA); ZOOM_connection_put_event(c, event); r = cs_get(c->cs, &c->buf_in, &c->len_in); more = cs_more(c->cs); yaz_log(c->log_details, "%p do_read len=%d more=%d", c, r, more); if (r == 1) return 0; if (r <= 0) { if (!ZOOM_test_reconnect(c)) { ZOOM_set_error(c, ZOOM_ERROR_CONNECTION_LOST, c->host_port); ZOOM_connection_close(c); } } else { Z_GDU *gdu; ZOOM_Event event; odr_reset(c->odr_in); odr_setbuf(c->odr_in, c->buf_in, r, 0); event = ZOOM_Event_create(ZOOM_EVENT_RECV_APDU); ZOOM_connection_put_event(c, event); if (!z_GDU(c->odr_in, &gdu, 0, 0)) { /* even on failures we try to re-connect (HTTP) */ if (!ZOOM_test_reconnect(c)) { int x; int err = odr_geterrorx(c->odr_in, &x); char msg[100]; const char *element = odr_getelement(c->odr_in); yaz_snprintf(msg, sizeof(msg), "ODR code %d:%d element=%s offset=%d", err, x, element ? element : "", odr_offset(c->odr_in)); ZOOM_set_error(c, ZOOM_ERROR_DECODE, msg); if (c->log_api) { FILE *ber_file = yaz_log_file(); if (ber_file) odr_dumpBER(ber_file, c->buf_in, r); } ZOOM_connection_close(c); } } else { if (c->odr_print) z_GDU(c->odr_print, &gdu, 0, 0); if (c->odr_save) z_GDU(c->odr_save, &gdu, 0, 0); if (gdu->which == Z_GDU_Z3950) ZOOM_handle_Z3950_apdu(c, gdu->u.z3950); else if (gdu->which == Z_GDU_HTTP_Response) { #if YAZ_HAVE_XML2 handle_http(c, gdu->u.HTTP_Response); #else ZOOM_set_error(c, ZOOM_ERROR_DECODE, 0); ZOOM_connection_close(c); #endif } } } return 1; } static zoom_ret do_write_ex(ZOOM_connection c, char *buf_out, int len_out) { int r; ZOOM_Event event; event = ZOOM_Event_create(ZOOM_EVENT_SEND_DATA); ZOOM_connection_put_event(c, event); yaz_log(c->log_details, "%p do_write_ex len=%d", c, len_out); if ((r = cs_put(c->cs, buf_out, len_out)) < 0) { yaz_log(c->log_details, "%p do_write_ex write failed", c); if (ZOOM_test_reconnect(c)) { return zoom_pending; } if (c->state == STATE_CONNECTING) ZOOM_set_error(c, ZOOM_ERROR_CONNECT, c->host_port); else ZOOM_set_error(c, ZOOM_ERROR_CONNECTION_LOST, c->host_port); ZOOM_connection_close(c); return zoom_complete; } else if (r == 1) { int mask = ZOOM_SELECT_EXCEPT; if (c->cs->io_pending & CS_WANT_WRITE) mask += ZOOM_SELECT_WRITE; if (c->cs->io_pending & CS_WANT_READ) mask += ZOOM_SELECT_READ; ZOOM_connection_set_mask(c, mask); yaz_log(c->log_details, "%p do_write_ex write incomplete mask=%d", c, c->mask); } else { ZOOM_connection_set_mask(c, ZOOM_SELECT_READ|ZOOM_SELECT_EXCEPT); yaz_log(c->log_details, "%p do_write_ex write complete mask=%d", c, c->mask); } return zoom_pending; } zoom_ret ZOOM_send_buf(ZOOM_connection c) { return do_write_ex(c, c->buf_out, c->len_out); } ZOOM_API(const char *) ZOOM_connection_option_get(ZOOM_connection c, const char *key) { if (!strcmp(key, "APDU")) { return c->saveAPDU_wrbuf ? wrbuf_cstr(c->saveAPDU_wrbuf) : ""; } else return ZOOM_options_get(c->options, key); } ZOOM_API(const char *) ZOOM_connection_option_getl(ZOOM_connection c, const char *key, int *lenp) { if (!strcmp(key, "APDU")) { if (c->saveAPDU_wrbuf) { *lenp = wrbuf_len(c->saveAPDU_wrbuf); return wrbuf_cstr(c->saveAPDU_wrbuf); } else { *lenp = 0; return ""; } } else return ZOOM_options_getl(c->options, key, lenp); } ZOOM_API(void) ZOOM_connection_option_set(ZOOM_connection c, const char *key, const char *val) { if (!strcmp(key, "saveAPDU")) { if (val && strcmp(val, "0")) { if (!c->saveAPDU_wrbuf) c->saveAPDU_wrbuf = wrbuf_alloc(); else wrbuf_rewind(c->saveAPDU_wrbuf); } else { wrbuf_destroy(c->saveAPDU_wrbuf); c->saveAPDU_wrbuf = 0; } ZOOM_connection_save_apdu_wrbuf(c, c->saveAPDU_wrbuf); } else ZOOM_options_set(c->options, key, val); } ZOOM_API(void) ZOOM_connection_option_setl(ZOOM_connection c, const char *key, const char *val, int len) { ZOOM_options_setl(c->options, key, val, len); } ZOOM_API(const char *) ZOOM_resultset_option_get(ZOOM_resultset r, const char *key) { return ZOOM_options_get(r->options, key); } ZOOM_API(void) ZOOM_resultset_option_set(ZOOM_resultset r, const char *key, const char *val) { ZOOM_options_set(r->options, key, val); } ZOOM_API(int) ZOOM_connection_errcode(ZOOM_connection c) { return ZOOM_connection_error(c, 0, 0); } ZOOM_API(const char *) ZOOM_connection_errmsg(ZOOM_connection c) { const char *msg; ZOOM_connection_error(c, &msg, 0); return msg; } ZOOM_API(const char *) ZOOM_connection_addinfo(ZOOM_connection c) { const char *addinfo; ZOOM_connection_error(c, 0, &addinfo); return addinfo; } ZOOM_API(const char *) ZOOM_connection_diagset(ZOOM_connection c) { const char *diagset; ZOOM_connection_error_x(c, 0, 0, &diagset); return diagset; } ZOOM_API(const char *) ZOOM_diag_str(int error) { switch (error) { case ZOOM_ERROR_NONE: return "No error"; case ZOOM_ERROR_CONNECT: return "Connect failed"; case ZOOM_ERROR_MEMORY: return "Out of memory"; case ZOOM_ERROR_ENCODE: return "Encoding failed"; case ZOOM_ERROR_DECODE: return "Decoding failed"; case ZOOM_ERROR_CONNECTION_LOST: return "Connection lost"; case ZOOM_ERROR_INIT: return "Init rejected"; case ZOOM_ERROR_INTERNAL: return "Internal failure"; case ZOOM_ERROR_TIMEOUT: return "Timeout"; case ZOOM_ERROR_UNSUPPORTED_PROTOCOL: return "Unsupported protocol"; case ZOOM_ERROR_UNSUPPORTED_QUERY: return "Unsupported query type"; case ZOOM_ERROR_INVALID_QUERY: return "Invalid query"; case ZOOM_ERROR_CQL_PARSE: return "CQL parsing error"; case ZOOM_ERROR_CQL_TRANSFORM: return "CQL transformation error"; case ZOOM_ERROR_CCL_CONFIG: return "CCL configuration error"; case ZOOM_ERROR_CCL_PARSE: return "CCL parsing error"; case ZOOM_ERROR_ES_INVALID_ACTION: return "Extended Service. invalid action"; case ZOOM_ERROR_ES_INVALID_VERSION: return "Extended Service. invalid version"; case ZOOM_ERROR_ES_INVALID_SYNTAX: return "Extended Service. invalid syntax"; case ZOOM_ERROR_MEMCACHED: return "Memcached"; default: return diagbib1_str(error); } } ZOOM_API(int) ZOOM_connection_error_x(ZOOM_connection c, const char **cp, const char **addinfo, const char **diagset) { int error = c->error; if (cp) { if (!c->diagset || !strcmp(c->diagset, "ZOOM")) *cp = ZOOM_diag_str(error); else if (!strcmp(c->diagset, "HTTP")) *cp = z_HTTP_errmsg(c->error); else if (!strcmp(c->diagset, "Bib-1")) *cp = ZOOM_diag_str(error); else if (!strcmp(c->diagset, "info:srw/diagnostic/1")) *cp = yaz_diag_srw_str(c->error); else *cp = "Unknown error and diagnostic set"; } if (addinfo) *addinfo = c->addinfo ? c->addinfo : ""; if (diagset) *diagset = c->diagset ? c->diagset : ""; return c->error; } ZOOM_API(int) ZOOM_connection_error(ZOOM_connection c, const char **cp, const char **addinfo) { return ZOOM_connection_error_x(c, cp, addinfo, 0); } static void ZOOM_connection_do_io(ZOOM_connection c, int mask) { ZOOM_Event event = 0; int r = cs_look(c->cs); yaz_log(c->log_details, "%p ZOOM_connection_do_io mask=%d cs_look=%d", c, mask, r); if (r == CS_NONE) { event = ZOOM_Event_create(ZOOM_EVENT_CONNECT); ZOOM_set_error(c, ZOOM_ERROR_CONNECT, c->host_port); ZOOM_connection_close(c); ZOOM_connection_put_event(c, event); } else if (r == CS_CONNECT) { int ret = cs_rcvconnect(c->cs); yaz_log(c->log_details, "%p ZOOM_connection_do_io " "cs_rcvconnect returned %d", c, ret); if (ret == 1) { int mask = ZOOM_SELECT_EXCEPT; if (c->cs->io_pending & CS_WANT_WRITE) mask += ZOOM_SELECT_WRITE; if (c->cs->io_pending & CS_WANT_READ) mask += ZOOM_SELECT_READ; ZOOM_connection_set_mask(c, mask); event = ZOOM_Event_create(ZOOM_EVENT_CONNECT); ZOOM_connection_put_event(c, event); } else if (ret == 0) { event = ZOOM_Event_create(ZOOM_EVENT_CONNECT); ZOOM_connection_put_event(c, event); get_cert(c); if (c->proto == PROTO_Z3950) ZOOM_connection_Z3950_send_init(c); else { /* no init request for SRW .. */ if (c->tasks->which == ZOOM_TASK_CONNECT) { ZOOM_connection_remove_task(c); ZOOM_connection_set_mask(c, 0); } if (c->cs && c->location) send_HTTP_redirect(c, c->location); else ZOOM_connection_exec_task(c); } if (c->cs && cs_look(c->cs) == CS_DATA) c->state = STATE_ESTABLISHED; } else { ZOOM_set_error(c, ZOOM_ERROR_CONNECT, c->host_port); ZOOM_connection_close(c); } } else { if (mask & ZOOM_SELECT_EXCEPT) { if (!ZOOM_test_reconnect(c)) { ZOOM_set_error(c, ZOOM_ERROR_CONNECTION_LOST, c->host_port); ZOOM_connection_close(c); } return; } if (mask & ZOOM_SELECT_READ) do_read(c); if (c->cs && (mask & ZOOM_SELECT_WRITE)) ZOOM_send_buf(c); } } ZOOM_API(int) ZOOM_connection_last_event(ZOOM_connection cs) { if (!cs) return ZOOM_EVENT_NONE; return cs->last_event; } ZOOM_API(int) ZOOM_connection_fire_event_timeout(ZOOM_connection c) { if (c->mask) { ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_TIMEOUT); /* timeout and this connection was waiting */ ZOOM_set_error(c, ZOOM_ERROR_TIMEOUT, 0); ZOOM_connection_close(c); ZOOM_connection_put_event(c, event); } return 0; } ZOOM_API(int) ZOOM_connection_process(ZOOM_connection c) { ZOOM_Event event; if (!c) return 0; event = ZOOM_connection_get_event(c); if (event) { ZOOM_Event_destroy(event); return 1; } ZOOM_connection_exec_task(c); event = ZOOM_connection_get_event(c); if (event) { ZOOM_Event_destroy(event); return 1; } return 0; } ZOOM_API(int) ZOOM_event_nonblock(int no, ZOOM_connection *cs) { int i; yaz_log(log_details0, "ZOOM_process_event(no=%d,cs=%p)", no, cs); for (i = 0; imask && mask) ZOOM_connection_do_io(c, mask); return 0; } ZOOM_API(int) ZOOM_connection_get_socket(ZOOM_connection c) { if (c->cs) return cs_fileno(c->cs); return -1; } ZOOM_API(int) ZOOM_connection_set_mask(ZOOM_connection c, int mask) { c->mask = mask; if (!c->cs) return -1; return 0; } ZOOM_API(int) ZOOM_connection_get_mask(ZOOM_connection c) { if (c->cs) return c->mask; return 0; } ZOOM_API(int) ZOOM_connection_get_timeout(ZOOM_connection c) { return ZOOM_options_get_int(c->options, "timeout", 30); } ZOOM_API(void) ZOOM_connection_close(ZOOM_connection c) { if (c->cs) cs_close(c->cs); c->cs = 0; ZOOM_connection_set_mask(c, 0); c->state = STATE_IDLE; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z3950v3.asn0000644000175000017500000036120713250277530011704 00000000000000Z39-50-APDU-1995 -- OID for this definition, assigned in OID.3.1, is {Z39-50 2 1} DEFINITIONS ::= BEGIN -- Z39.50 Maintenance Agency Official Text for ANSI/NISO Z39.50-1995 - July 1995 -- EXPORTS OtherInformation, Term, AttributeSetId, AttributeList, AttributeElement, ElementSetName, SortElement, DatabaseName, CompSpec, Specification, Permissions, InternationalString, IntUnit, Unit, StringOrNumeric, Query, Records, ResultSetId, DefaultDiagFormat, DiagRec, Segment; -- PDU ::= CHOICE{ initRequest [20] IMPLICIT InitializeRequest, initResponse [21] IMPLICIT InitializeResponse, searchRequest [22] IMPLICIT SearchRequest, searchResponse [23] IMPLICIT SearchResponse, presentRequest [24] IMPLICIT PresentRequest, presentResponse [25] IMPLICIT PresentResponse, deleteResultSetRequest [26] IMPLICIT DeleteResultSetRequest, deleteResultSetResponse [27] IMPLICIT DeleteResultSetResponse, accessControlRequest [28] IMPLICIT AccessControlRequest, accessControlResponse [29] IMPLICIT AccessControlResponse, resourceControlRequest [30] IMPLICIT ResourceControlRequest, resourceControlResponse [31] IMPLICIT ResourceControlResponse, triggerResourceControlRequest [32] IMPLICIT TriggerResourceControlRequest, resourceReportRequest [33] IMPLICIT ResourceReportRequest, resourceReportResponse [34] IMPLICIT ResourceReportResponse, scanRequest [35] IMPLICIT ScanRequest, scanResponse [36] IMPLICIT ScanResponse, -- [37] through [42] reserved sortRequest [43] IMPLICIT SortRequest, sortResponse [44] IMPLICIT SortResponse, segmentRequest [45] IMPLICIT Segment, extendedServicesRequest [46] IMPLICIT ExtendedServicesRequest, extendedServicesResponse [47] IMPLICIT ExtendedServicesResponse, close [48] IMPLICIT Close, duplicateDetectionRequest [49] IMPLICIT DuplicateDetectionRequest, duplicateDetectionResponse [50] IMPLICIT DuplicateDetectionResponse} -- Initialize APDUs -- InitializeRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, protocolVersion ProtocolVersion, options Options, preferredMessageSize [5] IMPLICIT INTEGER, exceptionalRecordSize [6] IMPLICIT INTEGER, idAuthentication [7] IdAuthentication OPTIONAL, -- see note below implementationId [110] IMPLICIT InternationalString OPTIONAL, implementationName [111] IMPLICIT InternationalString OPTIONAL, implementationVersion [112] IMPLICIT InternationalString OPTIONAL, userInformationField [11] EXTERNAL OPTIONAL, otherInfo OtherInformation OPTIONAL} --Note: -- For idAuthentication, the type ANY is retained for compatibility with earlier versions. -- For interoperability, the following is recommended: IdAuthentication ::= CHOICE{ open VisibleString, idPass SEQUENCE { groupId [0] IMPLICIT InternationalString OPTIONAL, userId [1] IMPLICIT InternationalString OPTIONAL, password [2] IMPLICIT InternationalString OPTIONAL }, anonymous NULL, other EXTERNAL } -- May use access control formats for 'other'. See Appendix 7 ACC. -- InitializeResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, protocolVersion ProtocolVersion, options Options, preferredMessageSize [5] IMPLICIT INTEGER, exceptionalRecordSize [6] IMPLICIT INTEGER, result [12] IMPLICIT BOOLEAN, -- reject = FALSE; Accept = TRUE implementationId [110] IMPLICIT InternationalString OPTIONAL, implementationName [111] IMPLICIT InternationalString OPTIONAL, implementationVersion [112] IMPLICIT InternationalString OPTIONAL, userInformationField [11] EXTERNAL OPTIONAL, otherInfo OtherInformation OPTIONAL} -- Begin auxiliary definitions for Init PDUs ProtocolVersion ::= [3] IMPLICIT BIT STRING{ version-1 (0), -- This bit should always be set, but does not -- correspond to any Z39.50 version. version-2 (1), -- "Version 2 supported." -- This bit should always be set. version-3 (2) -- "Version 3 supported." -- Values higher than 'version-3' should be ignored. Both the Initialize request and Initialize Response APDUs -- include a value string corresponding to the supported versions. The highest common version is selected -- for use. If there are no versions in common, "Result" in the Init Response should indicate "reject." -- Note: Versions 1 and 2 are identical. Systems supporting version 2 should indicate support for version -- 1 as well, for interoperability with systems that indicate support for version 1 only (e.g. ISO 10163-1991 -- implementations). } Options ::= [4] IMPLICIT BIT STRING{ search (0), present (1), delSet (2), resourceReport (3), triggerResourceCtrl (4), resourceCtrl (5), accessCtrl (6), scan (7), sort (8), -- (not used) (9), extendedServices (10), level-1Segmentation (11), level-2Segmentation (12), concurrentOperations (13), namedResultSets (14), encapsulation (15), resultCount (16), negotiationModel (17), duplicateDetection (18), queryType104 (19), pQESCorrection (20), stringSchema (21) } -- end auxiliary definitions for Init PDUs --Search APDUs SearchRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, smallSetUpperBound [13] IMPLICIT INTEGER, largeSetLowerBound [14] IMPLICIT INTEGER, mediumSetPresentNumber [15] IMPLICIT INTEGER, replaceIndicator [16] IMPLICIT BOOLEAN, resultSetName [17] IMPLICIT InternationalString, databaseNames [18] IMPLICIT SEQUENCE OF DatabaseName, smallSetElementSetNames [100] ElementSetNames OPTIONAL, mediumSetElementSetNames [101] ElementSetNames OPTIONAL, preferredRecordSyntax [104] IMPLICIT OBJECT IDENTIFIER OPTIONAL, query [21] Query, -- Following two parameters may be used only if version 3 is in force. additionalSearchInfo [203] IMPLICIT OtherInformation OPTIONAL, otherInfo OtherInformation OPTIONAL} -- Query Definitions Query ::= CHOICE{ type-0 [0] ANY, type-1 [1] IMPLICIT RPNQuery, type-2 [2] OCTET STRING, type-100 [100] OCTET STRING, type-101 [101] IMPLICIT RPNQuery, type-102 [102] OCTET STRING, type-104 [104] IMPLICIT EXTERNAL } -- -- Definitions for RPN query RPNQuery ::= SEQUENCE{ attributeSet AttributeSetId, rpn RPNStructure} -- RPNStructure ::= CHOICE{ op [0] Operand, rpnRpnOp [1] IMPLICIT SEQUENCE{ rpn1 RPNStructure, rpn2 RPNStructure, op Operator }} Operand ::= CHOICE{ attrTerm AttributesPlusTerm, resultSet ResultSetId, -- If version 2 is in force: -- - If query type is 1, one of the above two must be chosen; -- - resultAttr (below) may be used only if query type is 101. resultAttr ResultSetPlusAttributes} AttributesPlusTerm ::= [102] IMPLICIT SEQUENCE{ attributes AttributeList, term Term} ResultSetPlusAttributes ::= [214] IMPLICIT SEQUENCE{ resultSet ResultSetId, attributes AttributeList} AttributeList ::= [44] IMPLICIT SEQUENCE OF AttributeElement -- Term ::= CHOICE{ general [45] IMPLICIT OCTET STRING, -- values below may be used only if version 3 is in force numeric [215] IMPLICIT INTEGER, characterString [216] IMPLICIT InternationalString, oid [217] IMPLICIT OBJECT IDENTIFIER, dateTime [218] IMPLICIT GeneralizedTime, external [219] IMPLICIT EXTERNAL, integerAndUnit [220] IMPLICIT IntUnit, null [221] IMPLICIT NULL} Operator ::= [46] CHOICE{ and [0] IMPLICIT NULL, or [1] IMPLICIT NULL, and-not [2] IMPLICIT NULL, -- If version 2 is in force: -- - For query type 1, one of the above three must be chosen; -- - prox (below) may be used only if query type is 101. prox [3] IMPLICIT ProximityOperator} AttributeElement ::= SEQUENCE{ attributeSet [1] IMPLICIT AttributeSetId OPTIONAL, -- Must be omitted if version 2 is in force. -- If included, overrides value of attributeSet -- in RPNQuery above, but only for this attribute. attributeType [120] IMPLICIT INTEGER, attributeValue CHOICE{ numeric [121] IMPLICIT INTEGER, -- If version 2 is in force, -- Must select 'numeric' for attributeValue. complex [224] IMPLICIT SEQUENCE{ list [1] IMPLICIT SEQUENCE OF StringOrNumeric, semanticAction [2] IMPLICIT SEQUENCE OF INTEGER OPTIONAL}}} ProximityOperator ::= SEQUENCE{ exclusion [1] IMPLICIT BOOLEAN OPTIONAL, distance [2] IMPLICIT INTEGER, ordered [3] IMPLICIT BOOLEAN, relationType [4] IMPLICIT INTEGER{ lessThan (1), lessThanOrEqual (2), equal (3), greaterThanOrEqual (4), greaterThan (5), notEqual (6)}, proximityUnitCode [5] CHOICE{ known [1] IMPLICIT KnownProximityUnit, private [2] IMPLICIT INTEGER}} -- KnownProximityUnit ::= INTEGER{ character (1), word (2), sentence (3), paragraph (4), section (5), chapter (6), document (7), element (8), subelement (9), elementType (10), byte (11) -- Version 3 only } -- End definitions for RPN Query SearchResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, resultCount [23] IMPLICIT INTEGER, numberOfRecordsReturned [24] IMPLICIT INTEGER, nextResultSetPosition [25] IMPLICIT INTEGER, searchStatus [22] IMPLICIT BOOLEAN, resultSetStatus [26] IMPLICIT INTEGER{ subset (1), interim (2), none (3), estimate(4) } OPTIONAL, presentStatus PresentStatus OPTIONAL, records Records OPTIONAL, -- Following two parameters may be used only if version 3 is in force. additionalSearchInfo [203] IMPLICIT OtherInformation OPTIONAL, otherInfo OtherInformation OPTIONAL} --Retrieval APDUs PresentRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, resultSetId ResultSetId, resultSetStartPoint [30] IMPLICIT INTEGER, numberOfRecordsRequested [29] IMPLICIT INTEGER, additionalRanges [212] IMPLICIT SEQUENCE OF Range OPTIONAL, -- additionalRanges may be included only if version 3 is in force. recordComposition CHOICE{ simple [19] ElementSetNames, -- must choose 'simple' if version 2 is in force complex [209] IMPLICIT CompSpec} OPTIONAL, preferredRecordSyntax [104] IMPLICIT OBJECT IDENTIFIER OPTIONAL, maxSegmentCount [204] IMPLICIT INTEGER OPTIONAL, -- level 1 or 2 maxRecordSize [206] IMPLICIT INTEGER OPTIONAL, -- level 2 only maxSegmentSize [207] IMPLICIT INTEGER OPTIONAL, -- level 2 only otherInfo OtherInformation OPTIONAL} -- Segment ::= SEQUENCE{ -- Segment PDU may only be used when version 3 is in force, -- and only when segmentation is in effect. referenceId ReferenceId OPTIONAL, numberOfRecordsReturned [24] IMPLICIT INTEGER, segmentRecords [0] IMPLICIT SEQUENCE OF NamePlusRecord, otherInfo OtherInformation OPTIONAL} -- PresentResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, numberOfRecordsReturned [24] IMPLICIT INTEGER, nextResultSetPosition [25] IMPLICIT INTEGER, presentStatus PresentStatus, records Records OPTIONAL, otherInfo OtherInformation OPTIONAL} -- begin auxiliary definitions for Search and Present APDUs -- begin definition of records Records ::= CHOICE{ responseRecords [28] IMPLICIT SEQUENCE OF NamePlusRecord, nonSurrogateDiagnostic [130] IMPLICIT DefaultDiagFormat, multipleNonSurDiagnostics [205] IMPLICIT SEQUENCE OF DiagRec} -- NamePlusRecord ::= SEQUENCE{ name [0] IMPLICIT DatabaseName OPTIONAL, record [1] CHOICE{ retrievalRecord [1] EXTERNAL, surrogateDiagnostic [2] DiagRec, -- Must select one of the above two, retrievalRecord or -- surrogateDiagnostic, unless 'level 2 segmentation' is in effect. startingFragment [3] FragmentSyntax, intermediateFragment [4] FragmentSyntax, finalFragment [5] FragmentSyntax}} FragmentSyntax ::= CHOICE{ externallyTagged EXTERNAL, notExternallyTagged OCTET STRING} DiagRec ::= CHOICE{ defaultFormat DefaultDiagFormat, -- Must choose defaultFormat if version 2 is in effect. externallyDefined EXTERNAL} DefaultDiagFormat::= SEQUENCE{ diagnosticSetId OBJECT IDENTIFIER, condition INTEGER, addinfo CHOICE{ v2Addinfo VisibleString, -- version 2 v3Addinfo InternationalString -- version 3 }} -- end definition of records Range ::= SEQUENCE{ startingPosition [1] IMPLICIT INTEGER, numberOfRecords [2] IMPLICIT INTEGER} -- ElementSetNames ::= CHOICE { genericElementSetName [0] IMPLICIT InternationalString, databaseSpecific [1] IMPLICIT SEQUENCE OF SEQUENCE{ dbName DatabaseName, esn ElementSetName}} PresentStatus ::= [27] IMPLICIT INTEGER{ success (0), partial-1 (1), partial-2 (2), partial-3 (3), partial-4 (4), failure (5)} -- begin definition of composition specification CompSpec ::= SEQUENCE{ selectAlternativeSyntax [1] IMPLICIT BOOLEAN, -- See comment for recordSyntax, below. generic [2] IMPLICIT Specification OPTIONAL, dbSpecific [3] IMPLICIT SEQUENCE OF SEQUENCE{ db [1] DatabaseName, spec [2] IMPLICIT Specification} OPTIONAL, -- At least one of generic and dbSpecific must occur, and both may occur. If both, then for -- any record not in the list of databases within dbSpecific, generic applies. recordSyntax [4] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL -- For each record, the target selects the first record syntax -- in this list that it can support. If the list is exhausted, the -- target may select an alternative syntax if -- selectAlternativeSyntax is 'true'. } Specification ::= SEQUENCE{ schema CHOICE { oid [1] IMPLICIT OBJECT IDENTIFIER, uri [300] IMPLICIT InternationalString } OPTIONAL, elementSpec [2] CHOICE{ elementSetName [1] IMPLICIT InternationalString, externalEspec [2] IMPLICIT EXTERNAL} OPTIONAL} -- end definition of composition specification -- end auxiliary definitions for search and response APDUs -- Delete APDUs DeleteResultSetRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, deleteFunction [32] IMPLICIT INTEGER{ list (0), all (1)}, resultSetList SEQUENCE OF ResultSetId OPTIONAL, otherInfo OtherInformation OPTIONAL} -- DeleteResultSetResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, deleteOperationStatus [0] IMPLICIT DeleteSetStatus, deleteListStatuses [1] IMPLICIT ListStatuses OPTIONAL, numberNotDeleted [34] IMPLICIT INTEGER OPTIONAL, bulkStatuses [35] IMPLICIT ListStatuses OPTIONAL, deleteMessage [36] IMPLICIT InternationalString OPTIONAL, otherInfo OtherInformation OPTIONAL} ListStatuses ::= SEQUENCE OF SEQUENCE{ id ResultSetId, status DeleteSetStatus} DeleteSetStatus ::= [33] IMPLICIT INTEGER{ success (0), resultSetDidNotExist (1), previouslyDeletedByTarget (2), systemProblemAtTarget (3), accessNotAllowed (4), resourceControlAtOrigin (5), resourceControlAtTarget (6), bulkDeleteNotSupported (7), notAllRsltSetsDeletedOnBulkDlte (8), notAllRequestedResultSetsDeleted (9), resultSetInUse (10)} -- --Access- and Resource-control APDUs -- AccessControlRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, securityChallenge CHOICE{ simpleForm [37] IMPLICIT OCTET STRING, externallyDefined [0] EXTERNAL}, otherInfo OtherInformation OPTIONAL} AccessControlResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, securityChallengeResponse CHOICE{ simpleForm [38] IMPLICIT OCTET STRING, externallyDefined [0] EXTERNAL} OPTIONAL, -- Optional only in version 3; mandatory in version 2. If -- omitted (in version 3) then diagnostic must occur. diagnostic [223] DiagRec OPTIONAL, -- Version 3 only. otherInfo OtherInformation OPTIONAL} ResourceControlRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, suspendedFlag [39] IMPLICIT BOOLEAN OPTIONAL, resourceReport [40] ResourceReport OPTIONAL, partialResultsAvailable [41] IMPLICIT INTEGER{ subset (1), interim (2), none (3)} OPTIONAL, responseRequired [42] IMPLICIT BOOLEAN, triggeredRequestFlag [43] IMPLICIT BOOLEAN OPTIONAL, otherInfo OtherInformation OPTIONAL} ResourceControlResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, continueFlag [44] IMPLICIT BOOLEAN, resultSetWanted [45] IMPLICIT BOOLEAN OPTIONAL, otherInfo OtherInformation OPTIONAL} TriggerResourceControlRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, requestedAction [46] IMPLICIT INTEGER{ resourceReport (1), resourceControl (2), cancel (3)}, prefResourceReportFormat [47] IMPLICIT ResourceReportId OPTIONAL, resultSetWanted [48] IMPLICIT BOOLEAN OPTIONAL, otherInfo OtherInformation OPTIONAL} ResourceReportRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, opId [210] IMPLICIT ReferenceId OPTIONAL, prefResourceReportFormat [49] IMPLICIT ResourceReportId OPTIONAL, otherInfo OtherInformation OPTIONAL} -- ResourceReportResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, resourceReportStatus [50] IMPLICIT INTEGER{ success (0), partial (1), failure-1 (2), failure-2 (3), failure-3 (4), failure-4 (5), failure-5 (6), failure-6 (7)}, resourceReport [51] ResourceReport OPTIONAL, otherInfo OtherInformation OPTIONAL} -- ResourceReport ::= EXTERNAL ResourceReportId ::= OBJECT IDENTIFIER --Scan APDUs ScanRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, databaseNames [3] IMPLICIT SEQUENCE OF DatabaseName, attributeSet AttributeSetId OPTIONAL, termListAndStartPoint AttributesPlusTerm, stepSize [5] IMPLICIT INTEGER OPTIONAL, numberOfTermsRequested [6] IMPLICIT INTEGER, preferredPositionInResponse [7] IMPLICIT INTEGER OPTIONAL, otherInfo OtherInformation OPTIONAL} ScanResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, stepSize [3] IMPLICIT INTEGER OPTIONAL, scanStatus [4] IMPLICIT INTEGER { success (0), partial-1 (1), partial-2 (2), partial-3 (3), partial-4 (4), partial-5 (5), failure (6) }, numberOfEntriesReturned [5] IMPLICIT INTEGER, positionOfTerm [6] IMPLICIT INTEGER OPTIONAL, entries [7] IMPLICIT ListEntries OPTIONAL, attributeSet [8] IMPLICIT AttributeSetId OPTIONAL, otherInfo OtherInformation OPTIONAL} -- begin auxiliary definitions for Scan ListEntries ::= SEQUENCE{ entries [1] IMPLICIT SEQUENCE OF Entry OPTIONAL, nonsurrogateDiagnostics [2] IMPLICIT SEQUENCE OF DiagRec OPTIONAL -- At least one of entries and nonsurrogateDiagnostics must occur } Entry ::= CHOICE { termInfo [1] IMPLICIT TermInfo, surrogateDiagnostic [2] DiagRec} -- TermInfo ::= SEQUENCE { term Term, displayTerm [0] IMPLICIT InternationalString OPTIONAL, -- Presence of displayTerm means that term is not considered by -- the target to be suitable for display, and displayTerm should -- instead be displayed. 'term' is the actual term in the term list; -- 'displayTerm' is for display purposes only, and is not an actual -- term in the term list. suggestedAttributes AttributeList OPTIONAL, alternativeTerm [4] IMPLICIT SEQUENCE OF AttributesPlusTerm OPTIONAL, globalOccurrences [2] IMPLICIT INTEGER OPTIONAL, byAttributes [3] IMPLICIT OccurrenceByAttributes OPTIONAL, otherTermInfo OtherInformation OPTIONAL} OccurrenceByAttributes ::= SEQUENCE OF SEQUENCE{ attributes [1] AttributeList, occurrences CHOICE{ global [2] INTEGER, byDatabase [3] IMPLICIT SEQUENCE OF SEQUENCE{ db DatabaseName, num [1] IMPLICIT INTEGER OPTIONAL, otherDbInfo OtherInformation OPTIONAL}} OPTIONAL, otherOccurInfo OtherInformation OPTIONAL} -- end auxiliary definitions for Scan -- Sort APDUs SortRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, inputResultSetNames [3] IMPLICIT SEQUENCE OF InternationalString, sortedResultSetName [4] IMPLICIT InternationalString, sortSequence [5] IMPLICIT SEQUENCE OF SortKeySpec, -- order of occurrence is from major to minor otherInfo OtherInformation OPTIONAL} SortResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, sortStatus [3] IMPLICIT INTEGER{ success (0), partial-1 (1), failure (2)}, resultSetStatus [4] IMPLICIT INTEGER{ empty (1), interim (2), unchanged (3), none (4)} OPTIONAL, diagnostics [5] IMPLICIT SEQUENCE OF DiagRec OPTIONAL, resultCount [6] IMPLICIT INTEGER OPTIONAL, otherInfo OtherInformation OPTIONAL} -- begin auxiliary definitions for Sort SortKeySpec ::= SEQUENCE{ sortElement SortElement, sortRelation [1] IMPLICIT INTEGER{ ascending (0), descending (1), ascendingByFrequency (3), descendingByfrequency (4)}, caseSensitivity [2] IMPLICIT INTEGER{ caseSensitive (0), caseInsensitive (1)}, missingValueAction [3] CHOICE{ abort [1] IMPLICIT NULL, null [2] IMPLICIT NULL, --supply a null value for missing value missingValueData [3] IMPLICIT OCTET STRING} OPTIONAL} SortElement ::= CHOICE{ generic [1] SortKey, datbaseSpecific [2] IMPLICIT SEQUENCE OF SEQUENCE{ databaseName DatabaseName, dbSort SortKey}} SortKey ::= CHOICE{ sortfield [0] IMPLICIT InternationalString, -- An element, element-group-tag, or alias supported by the target -- and denoting a set of elements associated with each record. elementSpec [1] IMPLICIT Specification, sortAttributes [2] IMPLICIT SEQUENCE{ id AttributeSetId, list AttributeList}} -- end auxiliary definitions for sort -- Extended Service APDUs ExtendedServicesRequest ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, function [3] IMPLICIT INTEGER { create (1), delete (2), modify (3)}, packageType [4] IMPLICIT OBJECT IDENTIFIER, packageName [5] IMPLICIT InternationalString OPTIONAL, -- PackageName mandatory for 'modify' or 'delete'; optional for -- 'create'. Following four parameters mandatory for 'create'; should -- be included on 'modify' if being modified; not needed on 'delete'. userId [6] IMPLICIT InternationalString OPTIONAL, retentionTime [7] IMPLICIT IntUnit OPTIONAL, permissions [8] IMPLICIT Permissions OPTIONAL, description [9] IMPLICIT InternationalString OPTIONAL, -- (ExtendedServiceRequest APDU continued) taskSpecificParameters [10] IMPLICIT EXTERNAL OPTIONAL, -- Mandatory for 'create'; included on 'modify' if specific -- parameters being modified; not necessary on 'delete'. For the -- 'EXTERNAL,' use OID of specific ES definition and select -- CHOICE [1]: 'esRequest'. waitAction [11] IMPLICIT INTEGER{ wait (1), waitIfPossible (2), dontWait (3), dontReturnPackage (4)}, elements ElementSetName OPTIONAL, otherInfo OtherInformation OPTIONAL} -- ExtendedServicesResponse ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, operationStatus [3] IMPLICIT INTEGER{ done (1), accepted (2), failure (3)}, diagnostics [4] IMPLICIT SEQUENCE OF DiagRec OPTIONAL, taskPackage [5] IMPLICIT EXTERNAL OPTIONAL, -- Use OID: {Z39-50-recordSyntax (106)} and corresponding -- syntax. For the EXTERNAL, 'taskSpecific,' within that -- definition, use OID of the specific es, and choose [2], -- 'taskPackage'. otherInfo OtherInformation OPTIONAL} Permissions ::= SEQUENCE OF SEQUENCE{ userId [1] IMPLICIT InternationalString OPTIONAL, allowableFunctions [2] IMPLICIT SEQUENCE OF INTEGER{ delete (1), modifyContents (2), modifyPermissions (3), present (4), invoke (5)}} Close ::= SEQUENCE{ referenceId ReferenceId OPTIONAL, -- See 3.2.11.1.5. closeReason CloseReason, diagnosticInformation [3] IMPLICIT InternationalString OPTIONAL, resourceReportFormat [4] IMPLICIT ResourceReportId OPTIONAL, -- For use by origin only, and only on Close request; -- origin requests target to include report in response. resourceReport [5] ResourceReport OPTIONAL, -- For use by target only, unilaterally on Close request; -- on Close response may be unilateral or in response -- to origin request. otherInfo OtherInformation OPTIONAL} CloseReason ::= [211] IMPLICIT INTEGER{ finished (0), shutdown (1), systemProblem (2), costLimit (3), resources (4), securityViolation (5), protocolError (6), lackOfActivity (7), peerAbort (8), unspecified (9)} --Duplicate detection APDUs DuplicateDetectionRequest ::= SEQUENCE { referenceId ReferenceId OPTIONAL, inputResultSetIds [3] IMPLICIT SEQUENCE OF InternationalString, outputResultSetName [4] IMPLICIT InternationalString, applicablePortionOfRecord [5] IMPLICIT EXTERNAL OPTIONAL, duplicateDetectionCriteria [6] IMPLICIT SEQUENCE OF DuplicateDetectionCriterion OPTIONAL, clustering [7] IMPLICIT BOOLEAN OPTIONAL, -- 'true' means "clustered". -- This parameter may be omitted -- only if retentionCriteria CHOICE is -- 'numberOfEntries' and its value is 1. retentionCriteria [8] IMPLICIT SEQUENCE OF RetentionCriterion, sortCriteria [9] IMPLICIT SEQUENCE OF SortCriterion OPTIONAL, otherInfo OtherInformation OPTIONAL} DuplicateDetectionCriterion ::= CHOICE{ levelOfMatch [1] IMPLICIT INTEGER, -- a percentage; 1-100. caseSensitive [2] IMPLICIT NULL, punctuationSensitive [3] IMPLICIT NULL, regularExpression [4] IMPLICIT EXTERNAL, rsDuplicates [5] IMPLICIT NULL -- values 6-100 reserved for future assignment. } RetentionCriterion ::= CHOICE{ numberOfEntries [1] IMPLICIT INTEGER, -- greater than 0 percentOfEntries [2] IMPLICIT INTEGER, -- 1-100, duplicatesOnly [3] IMPLICIT NULL, -- should not be chosen -- if clustering is 'true' discardRsDuplicates [4] IMPLICIT NULL -- values 5-100 reserved for future assignment. } SortCriterion ::= CHOICE{ mostComprehensive [1] IMPLICIT NULL, leastConmprehensive [2] IMPLICIT NULL, mostRecent [3] IMPLICIT NULL, oldest [4] IMPLICIT NULL, leastCost [5] IMPLICIT NULL, preferredDatabases [6] IMPLICIT SEQUENCE OF InternationalString -- values 7-100 reserved for future assignment. } DuplicateDetectionResponse ::= SEQUENCE { referenceId ReferenceId OPTIONAL, status [3] IMPLICIT INTEGER{ success (0), failure (1)}, resultSetCount [4] IMPLICIT INTEGER OPTIONAL, diagnostics [5] IMPLICIT SEQUENCE OF DiagRec OPTIONAL, otherInfo OtherInformation OPTIONAL} -- Global auxiliary definitions ReferenceId ::= [2] IMPLICIT OCTET STRING ResultSetId ::= [31] IMPLICIT InternationalString ElementSetName ::= [103] IMPLICIT InternationalString DatabaseName ::= [105] IMPLICIT InternationalString AttributeSetId ::= OBJECT IDENTIFIER -- OtherInformation OtherInformation ::= [201] IMPLICIT SEQUENCE OF SEQUENCE{ category [1] IMPLICIT InfoCategory OPTIONAL, information CHOICE{ characterInfo [2] IMPLICIT InternationalString, binaryInfo [3] IMPLICIT OCTET STRING, externallyDefinedInfo [4] IMPLICIT EXTERNAL, oid [5] IMPLICIT OBJECT IDENTIFIER}} -- InfoCategory ::= SEQUENCE{ categoryTypeId [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL, categoryValue [2] IMPLICIT INTEGER} -- Units -- IntUnit is used when value and unit are supplied together. Unit, alone, is used when just -- specifying a unit (without a value). For example, IntUnit is used in Term, in an RPNQuery, or -- it can be the datatype of an element within a retrieval record. Unit (alone) would be used in an -- element request, when requesting data be returned according to a particular unit. IntUnit ::= SEQUENCE{ value [1] IMPLICIT INTEGER, unitUsed [2] IMPLICIT Unit} -- Unit ::= SEQUENCE{ unitSystem [1] InternationalString OPTIONAL, -- e.g. 'SI' unitType [2] StringOrNumeric OPTIONAL, -- e.g. 'mass' unit [3] StringOrNumeric OPTIONAL, -- e.g. 'kilograms' scaleFactor [4] IMPLICIT INTEGER OPTIONAL -- e.g. 9 means 10**9 } --CharacterString InternationalString ::= GeneralString -- When version 2 is in force, this collapses to VisibleString. That is, only characters in the -- visibleString repertoire may be used. (Datatype compatibility with version 2 is not affected, -- because references are IMPLICIT.) When version 3 is in force, the semantics of the -- GeneralString content may be altered by negotiation during initialization. If no such -- negotiation is in effect, then GeneralString semantics are in force. StringOrNumeric ::= CHOICE{ string [1] IMPLICIT InternationalString, numeric [2] IMPLICIT INTEGER} END -- IR DEFINITIONS DiagnosticFormatDiag1 {Z39-50-diagnosticFormat diag-1 (2)} DEFINITIONS ::= BEGIN IMPORTS Term, Specification, AttributeList, SortElement, DatabaseName, DefaultDiagFormat, InternationalString FROM Z39-50-APDU-1995; DiagnosticFormat ::= SEQUENCE OF SEQUENCE{ diagnostic [1] CHOICE{ defaultDiagRec [1] IMPLICIT DefaultDiagFormat, explicitDiagnostic [2] DiagFormat} OPTIONAL, message [2] IMPLICIT InternationalString OPTIONAL} DiagFormat ::= CHOICE{ tooMany [1000] IMPLICIT SEQUENCE{ tooManyWhat [1] IMPLICIT INTEGER{ argumentWords (1), truncatedWords (2), booleanOperators (3), incompleteSubfields (4), characters (5), recordsRetrieved (6), dataBasesSpecified (7), resultSetsCreated (8), indexTermsProcessed (9)}, max [2] IMPLICIT INTEGER OPTIONAL}, badSpec [1001] IMPLICIT SEQUENCE{ -- element set name or specification spec [1] IMPLICIT Specification, -- esn or element spec not supported db [2] IMPLICIT DatabaseName OPTIONAL, -- if db specified, above spec not supported for db; otherwise, -- spec not supported period. goodOnes [3] IMPLICIT SEQUENCE OF Specification OPTIONAL -- target supplies ones that are supported }, dbUnavail [1002] IMPLICIT SEQUENCE{ -- database unavailable db [1] IMPLICIT DatabaseName, why [2] IMPLICIT SEQUENCE{ reasonCode [1] IMPLICIT INTEGER{ doesNotExist (0), existsButUnavail (1), locked (2), accessDenied (3)} OPTIONAL, message [2] IMPLICIT InternationalString OPTIONAL}}, unSupOp [1003] IMPLICIT INTEGER{ -- unsupported operator and (0), or (1), and-not (2), prox (3)}, attribute [1004] IMPLICIT SEQUENCE{ -- Applies for unsupported attribute set, attribute type, -- attribute value, or term (for a given attribute type or value). id [1] IMPLICIT OBJECT IDENTIFIER, -- if only "id" occurs, then attribute set is not supported type [2] IMPLICIT INTEGER OPTIONAL, -- must occur if value occurs. value [3] IMPLICIT INTEGER OPTIONAL, -- if omitted, and Type occurs, then Type is what is unsupported term [4] Term OPTIONAL -- If occurs, term is illegal or not supported, for attribute value, -- if value occurs; otherwise, for type. }, attCombo [1005] IMPLICIT SEQUENCE{ -- attribute combination not supported unsupportedCombination [1] IMPLICIT AttributeList, recommendedAlternatives [2] IMPLICIT SEQUENCE OF AttributeList OPTIONAL}, term [1006] IMPLICIT SEQUENCE{ problem [1] IMPLICIT INTEGER{ codedValue (1), unparsable (2), tooShort (3), type (4)} OPTIONAL, term [2] Term}, proximity [1007] CHOICE{ -- proximity diagnostics: resultSets [1] IMPLICIT NULL, -- proximity between sets not supported badSet [2] IMPLICIT InternationalString, -- bad result set specified relation [3] IMPLICIT INTEGER, -- 1 to 6 ; relation not supported unit [4] IMPLICIT INTEGER, -- unsupported unit code distance [5] IMPLICIT INTEGER, -- unsupported distance attributes [6] AttributeList, -- proximity not supported with specified -- attribute combination ordered [7] IMPLICIT NULL, -- ordered flag not supported exclusion [8] IMPLICIT NULL -- exclusion flag not supported }, scan [1008] CHOICE{ -- scan diagnostics: nonZeroStepSize [0] IMPLICIT NULL, -- only zero step size supported specifiedStepSize [1] IMPLICIT NULL, -- specified step size not supported termList1 [3] IMPLICIT NULL, -- term list not supported (no alternative supplied) termList2 [4] IMPLICIT SEQUENCE OF AttributeList, -- term list not supported (alternatives supplied) posInResponse [5] IMPLICIT INTEGER{ --value of positionInResponse not supported mustBeOne (1), mustBePositive (2), mustBeNonNegative (3), other (4)}, resources [6] IMPLICIT NULL, -- resources exhausted looking for satisfying terms endOfList [7] IMPLICIT NULL -- beginning or end of term list }, sort [1009] CHOICE{ sequence [0] IMPLICIT NULL, -- cannot sort according to sequence noRsName [1] IMPLICIT NULL, -- no result set name supplied tooMany [2] IMPLICIT INTEGER, -- Too many input result sets, -- maximum supplied. incompatible [3] IMPLICIT NULL, -- records with different formats -- not compatible for sorting generic [4] IMPLICIT NULL, -- generic sort not supported -- (db specific only) dbSpecific [5] IMPLICIT NULL, -- db specific sort not supported sortElement [6] SortElement, key [7] IMPLICIT INTEGER{ tooMany (1), -- too many sort keys duplicate (2)}, -- duplicate sort keys action [8] IMPLICIT NULL, -- unsupported missing data action illegal [9] IMPLICIT INTEGER{ relation (1), -- illegal sort relation case (2), -- illegal case value action (3), -- illegal missing data action sort (4)}, -- illegal sort inputTooLarge [10] IMPLICIT SEQUENCE OF InternationalString, -- one or more of the input result sets too large to sort aggregateTooLarge [11] IMPLICIT NULL -- aggregate result set too large }, segmentation [1010] CHOICE{ segmentCount [0] IMPLICIT NULL, -- Cannot guarantee record will fit within max segments. Target -- suggests that origin try again to retrieve record, without -- including max-segment-count. segmentSize [1] IMPLICIT INTEGER -- record cannot be segmented into fragments such that the largest -- will fit within max segment size specified. Target supplies (in -- bytes) the smallest acceptable value of Max-segment-size to -- retrieve the record. }, extServices [1011] CHOICE{ req [1] IMPLICIT INTEGER{ -- bad request nameInUse (1), -- package name already in use noSuchName (2), -- no such package, on modify/delete quota (3), -- quota exceeded type (4)}, -- extended service type not supported permission [2] IMPLICIT INTEGER{ -- permission denied on ES, because: id (1), -- id not authorized, or modifyDelete (2)}, -- cannot modify or delete immediate [3] IMPLICIT INTEGER{ -- immediate execution: failed (1), -- failed, service (2), -- not supported for this service, or parameters (3) -- for these parameters. }}, accessCtrl [1012] CHOICE{ noUser [1] IMPLICIT NULL, -- no user to display challenge to refused [2] IMPLICIT NULL, -- access control information refused by user simple [3] IMPLICIT NULL, -- only simple form supported (target used -- externally defined) oid [4] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER, -- oid not supported (origin supplies alternative -- suggested oids) alternative [5] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER, -- origin insists that target use an alternative -- challenge for this data (e.g. stronger -- authentication or stronger Access control). The -- origin supplies suggested alternative oids. pwdInv [6] IMPLICIT NULL, -- password invalid pwdExp [7] IMPLICIT NULL -- password expired }, recordSyntax [1013] IMPLICIT SEQUENCE{ -- record cannot be transferred in requested syntax unsupportedSyntax [1] IMPLICIT OBJECT IDENTIFIER, suggestedAlternatives [2] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL} } END RecordSyntax-explain {Z39-50-recordSyntax explain (100)} DEFINITIONS ::= BEGIN IMPORTS AttributeSetId, Term, OtherInformation, DatabaseName, ElementSetName, IntUnit, Unit, StringOrNumeric, Specification, InternationalString, AttributeList, AttributeElement FROM Z39-50-APDU-1995; EXPORTS LanguageCode; Explain-Record ::= CHOICE{ -- Each of these may be used as search term when Use attribute is 'explain-category'. targetInfo [0] IMPLICIT TargetInfo, databaseInfo [1] IMPLICIT DatabaseInfo, schemaInfo [2] IMPLICIT SchemaInfo, tagSetInfo [3] IMPLICIT TagSetInfo, recordSyntaxInfo [4] IMPLICIT RecordSyntaxInfo, attributeSetInfo [5] IMPLICIT AttributeSetInfo, termListInfo [6] IMPLICIT TermListInfo, extendedServicesInfo [7] IMPLICIT ExtendedServicesInfo, attributeDetails [8] IMPLICIT AttributeDetails, termListDetails [9] IMPLICIT TermListDetails, elementSetDetails [10] IMPLICIT ElementSetDetails, retrievalRecordDetails [11] IMPLICIT RetrievalRecordDetails, sortDetails [12] IMPLICIT SortDetails, processing [13] IMPLICIT ProcessingInformation, variants [14] IMPLICIT VariantSetInfo, units [15] IMPLICIT UnitInfo, categoryList [100] IMPLICIT CategoryList} -- Element set name 'B' (brief) retrieves: -- - 'commonInfo' (except for otherInfo within commonInfo) -- - key elements -- - other elements designated as 'non-key brief elements' -- Esn 'description' retrieves brief elements as well as 'description', and specific additional descriptive -- elements if designated. -- Element set name 'F' (full) retrieves all of the above, as well as those designated as "non-brief elements". Some -- elements designated as OPTIONAL may be mandatory in full records, and are so identified. (Note that all elements -- that are not part of the brief element set must be designated as OPTIONAL in the ASN.1, otherwise it would be -- illegal to omit them.) -- Other esns are defined (below) as needed. -- - - - - - - - - - - - - Info Records -- Info records are mainly for software consumption -- They describe individual entities within the target system: -- The target itself -- Individual databases -- Schemas -- Tag sets -- Record syntaxes -- Attribute sets -- Term lists -- Extended services -- The information about each Schema, Tag Set, Record Syntax and Attribute Set should -- match the universal definitions of these items. The only exception is that a target may omit any -- items it doesn't support, for example the description of the bib-1 attribute set may omit attributes -- that the target does not support under any circumstances. -- Databases that may be searched together can be listed in the dbCominations element of the TargetInfo record. TargetInfo ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: name [1] IMPLICIT InternationalString, -- Non-key brief elements follow: recent-news [2] IMPLICIT HumanString OPTIONAL, icon [3] IMPLICIT IconObject OPTIONAL, namedResultSets [4] IMPLICIT BOOLEAN, multipleDBsearch [5] IMPLICIT BOOLEAN, maxResultSets [6] IMPLICIT INTEGER OPTIONAL, maxResultSize [7] IMPLICIT INTEGER OPTIONAL, maxTerms [8] IMPLICIT INTEGER OPTIONAL, timeoutInterval [9] IMPLICIT IntUnit OPTIONAL, welcomeMessage [10] IMPLICIT HumanString OPTIONAL, -- non-brief elements follow: -- 'description' esn retrieves the following two (as well as brief): contactInfo [11] IMPLICIT ContactInfo OPTIONAL, description [12] IMPLICIT HumanString OPTIONAL, nicknames [13] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, usage-restrictions [14] IMPLICIT HumanString OPTIONAL, paymentAddr [15] IMPLICIT HumanString OPTIONAL, hours [16] IMPLICIT HumanString OPTIONAL, dbCombinations [17] IMPLICIT SEQUENCE OF DatabaseList OPTIONAL, addresses [18] IMPLICIT SEQUENCE OF NetworkAddress OPTIONAL, languages [101] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, -- Languages supported for message strings. Each is a three-character -- language code from Z39.53-1994. -- characterSets [102] this tag reserved for "character sets supported for name and message strings". -- commonAccessInfo elements list objects the target supports. All objects listed in -- AccessInfo for any individual database should also be listed here. commonAccessInfo [19] IMPLICIT AccessInfo OPTIONAL} DatabaseInfo ::= SEQUENCE { -- A target may provide "virtual databases" that are combinations of individual database. These -- databases are indicated by the presence of subDbs in the combination database's DatabaseDescription. commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: name [1] IMPLICIT DatabaseName, -- Non-key brief elements follow: explainDatabase [2] IMPLICIT NULL OPTIONAL, -- If present, this database is the Explain database, or an Explain database -- for a different server, possibly on a different host. The means by which -- that server may be accessed is not addressed by this standard. One -- suggested possibility is an implementor agreement whereby the -- database name is a url which may be used to connect to the server. nicknames [3] IMPLICIT SEQUENCE OF DatabaseName OPTIONAL, icon [4] IMPLICIT IconObject OPTIONAL, user-fee [5] IMPLICIT BOOLEAN, available [6] IMPLICIT BOOLEAN, titleString [7] IMPLICIT HumanString OPTIONAL, -- Non-brief elements follow: keywords [8] IMPLICIT SEQUENCE OF HumanString OPTIONAL, description [9] IMPLICIT HumanString OPTIONAL, associatedDbs [10] IMPLICIT DatabaseList OPTIONAL, -- databases that may be searched in combination with this one subDbs [11] IMPLICIT DatabaseList OPTIONAL, -- When present, this database is a composite representing the combined -- databases 'subDbs'. The individual subDbs are also available. disclaimers [12] IMPLICIT HumanString OPTIONAL, news [13] IMPLICIT HumanString OPTIONAL, recordCount [14] CHOICE { actualNumber [0] IMPLICIT INTEGER, approxNumber [1] IMPLICIT INTEGER} OPTIONAL, defaultOrder [15] IMPLICIT HumanString OPTIONAL, avRecordSize [16] IMPLICIT INTEGER OPTIONAL, maxRecordSize [17] IMPLICIT INTEGER OPTIONAL, hours [18] IMPLICIT HumanString OPTIONAL, bestTime [19] IMPLICIT HumanString OPTIONAL, lastUpdate [20] IMPLICIT GeneralizedTime OPTIONAL, updateInterval [21] IMPLICIT IntUnit OPTIONAL, coverage [22] IMPLICIT HumanString OPTIONAL, proprietary [23] IMPLICIT BOOLEAN OPTIONAL, -- mandatory in full record copyrightText [24] IMPLICIT HumanString OPTIONAL, copyrightNotice [25] IMPLICIT HumanString OPTIONAL, producerContactInfo [26] IMPLICIT ContactInfo OPTIONAL, supplierContactInfo [27] IMPLICIT ContactInfo OPTIONAL, submissionContactInfo [28] IMPLICIT ContactInfo OPTIONAL, -- accessInfo lists items connected with the database. All listed items should be in the target's AccessInfo. accessInfo [29] IMPLICIT AccessInfo OPTIONAL} SchemaInfo ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: schema [1] IMPLICIT OBJECT IDENTIFIER, -- Non-key brief elements follow: name [2] IMPLICIT InternationalString, -- Non-brief elements follow: description [3] IMPLICIT HumanString OPTIONAL, tagTypeMapping [4] IMPLICIT SEQUENCE OF SEQUENCE { tagType [0] IMPLICIT INTEGER, tagSet [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL, -- If tagSet is omitted, then this tagType is for a tagSet locally defined -- within the schema that cannot be referenced by another schema. defaultTagType [2] IMPLICIT NULL OPTIONAL } OPTIONAL, recordStructure [5] IMPLICIT SEQUENCE OF ElementInfo OPTIONAL} -- ElementInfo referenced in SchemaInfo and RecordSyntaxInfo ElementInfo ::= SEQUENCE { elementName [1] IMPLICIT InternationalString, elementTagPath [2] IMPLICIT Path, dataType [3] ElementDataType OPTIONAL, -- If omitted, not specified. required [4] IMPLICIT BOOLEAN, repeatable [5] IMPLICIT BOOLEAN, description [6] IMPLICIT HumanString OPTIONAL} -- Path is referenced by ElementInfo as well as PerElementDetails Path ::= SEQUENCE OF SEQUENCE{ tagType [1] IMPLICIT INTEGER, tagValue [2] StringOrNumeric} ElementDataType ::= CHOICE{ primitive [0] IMPLICIT PrimitiveDataType, structured [1] IMPLICIT SEQUENCE OF ElementInfo} PrimitiveDataType ::= INTEGER{ octetString (0), numeric (1), date (2), external (3), string (4), trueOrFalse (5), oid (6), intUnit (7), empty (8), noneOfTheAbove (100) -- see 'description' } TagSetInfo ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: tagSet [1] IMPLICIT OBJECT IDENTIFIER, -- non-key brief elements follow: name [2] IMPLICIT InternationalString, -- non-brief elements follow: description [3] IMPLICIT HumanString OPTIONAL, elements [4] IMPLICIT SEQUENCE OF SEQUENCE { elementname [1] IMPLICIT InternationalString, nicknames [2] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, elementTag [3] StringOrNumeric, description [4] IMPLICIT HumanString OPTIONAL, dataType [5] PrimitiveDataType OPTIONAL, -- If the data type is expected to be structured, that is described in the schema info, -- and datatype is omitted here. otherTagInfo OtherInformation OPTIONAL} OPTIONAL} RecordSyntaxInfo ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: recordSyntax [1] IMPLICIT OBJECT IDENTIFIER, -- Non-key brief elements follow: name [2] IMPLICIT InternationalString, -- non-brief elements follow: transferSyntaxes [3] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, description [4] IMPLICIT HumanString OPTIONAL, asn1Module [5] IMPLICIT InternationalString OPTIONAL, abstractStructure [6] IMPLICIT SEQUENCE OF ElementInfo OPTIONAL -- Omitting abstractStructure only means target isn't using -- Explain to describe the structure, not that there is no structure. } AttributeSetInfo ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: attributeSet [1] IMPLICIT AttributeSetId, -- non-key brief elements follow: name [2] IMPLICIT InternationalString, -- non-brief elements follow: attributes [3] IMPLICIT SEQUENCE OF AttributeType OPTIONAL, -- mandatory in full record description [4] IMPLICIT HumanString OPTIONAL} -- AttributeType referenced in AttributeSetInfo AttributeType ::= SEQUENCE { name [0] IMPLICIT InternationalString OPTIONAL, description [1] IMPLICIT HumanString OPTIONAL, attributeType [2] IMPLICIT INTEGER, attributeValues [3] IMPLICIT SEQUENCE OF AttributeDescription} AttributeDescription ::= SEQUENCE { name [0] IMPLICIT InternationalString OPTIONAL, description [1] IMPLICIT HumanString OPTIONAL, attributeValue [2] StringOrNumeric, equivalentAttributes [3] IMPLICIT SEQUENCE OF StringOrNumeric OPTIONAL -- each is an occurrence of 'attributeValue' from AttributeDescription for a -- different attribute. Equivalences listed here should be derived from the -- attribute set definition, not from a particular server's behavior. } TermListInfo ::= SEQUENCE{ commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: databaseName [1] IMPLICIT DatabaseName, -- Non-key brief elements follow: termLists [2] IMPLICIT SEQUENCE OF SEQUENCE{ name [1] IMPLICIT InternationalString, title [2] IMPLICIT HumanString OPTIONAL, -- Title is for users to see and can differ by language. Name, on the -- other hand is typically a short string not necessarily meant to be -- human-readable, and not variable by language. searchCost [3] IMPLICIT INTEGER { optimized (0), -- The attribute (or combination) associated -- with this list will do fast searches. normal (1), -- The attribute (combination) will work as -- expected. So there's probably an index for the -- attribute (combination) or some similar -- mechanism. expensive (2), -- Can use the attribute (combination), but it -- might not provide satisfactory results. -- Probably there is no index, or post- -- processing of records is required. filter (3) -- can't search with this attribute (combination) alone. } OPTIONAL, scanable [4] IMPLICIT BOOLEAN, -- 'true' means this list can be scanned. broader [5] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, narrower [6] IMPLICIT SEQUENCE OF InternationalString OPTIONAL -- broader and narrower list alternative term lists related to this one. -- The term lists so listed should also be in this termLists structure. } -- no non-brief elements } ExtendedServicesInfo ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: type [1] IMPLICIT OBJECT IDENTIFIER, -- Non-key brief elements follow: name [2] IMPLICIT InternationalString OPTIONAL, -- should be supplied if privateType is 'true' privateType [3] IMPLICIT BOOLEAN, restrictionsApply [5] IMPLICIT BOOLEAN, -- if 'true' see 'description' feeApply [6] IMPLICIT BOOLEAN, -- if 'true' see 'description' available [7] IMPLICIT BOOLEAN, retentionSupported [8] IMPLICIT BOOLEAN, waitAction [9] IMPLICIT INTEGER{ waitSupported (1), waitAlways (2), waitNotSupported (3), depends (4), notSaying (5)}, -- non-brief elements follow: -- To get brief plus 'description' use esn 'description' description [10] IMPLICIT HumanString OPTIONAL, -- to get above elements and 'specificExplain' use esn 'specificExplain' specificExplain [11] IMPLICIT EXTERNAL OPTIONAL, -- Use oid of specific ES, and select choice [3] 'explain'. Format -- to be developed in conjunction with the specific ES definition. -- to get all elements except 'specificExplain', use esn 'asn' esASN [12] IMPLICIT InternationalString OPTIONAL -- the ASN.1 for this ES } -- - - - - - - - - - - - - Detail records -- The detail records describe relationships among entities supported by the target. RetrievalRecordDetails describes -- the way that schema elements are mapped into record elements. This mapping may be different for each -- combination of database, schema, record syntax. The per-element details describe the default mapping. -- Origin-request re-tagging can change that mapping. When multiple databases are listed in a databaseNames -- element, the record applies equally to all of the listed databases. This is unrelated to searching the databases -- together. AttributeDetails describes how databases can be searched. Each supported attribute is listed, and the -- allowable combinations can be described. AttributeDetails ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: databaseName [1] IMPLICIT DatabaseName, -- Non-brief elements follow: attributesBySet [2] IMPLICIT SEQUENCE OF AttributeSetDetails OPTIONAL, -- mandatory in full record attributeCombinations [3] IMPLICIT AttributeCombinations OPTIONAL} -- AttributeSetDetails referenced by AttributeDetails AttributeSetDetails ::= SEQUENCE { attributeSet [0] IMPLICIT AttributeSetId, attributesByType [1] IMPLICIT SEQUENCE OF AttributeTypeDetails } AttributeTypeDetails ::= SEQUENCE { attributeType [0] IMPLICIT INTEGER, defaultIfOmitted [1] IMPLICIT OmittedAttributeInterpretation OPTIONAL, attributeValues [2] IMPLICIT SEQUENCE OF AttributeValue OPTIONAL } -- If no attributeValues are supplied, all values of this type are fully -- supported, and the descriptions in AttributeSetInfo are adequate. OmittedAttributeInterpretation ::= SEQUENCE { defaultValue [0] StringOrNumeric OPTIONAL, -- A default value is listed if that's how the server works defaultDescription [1] IMPLICIT HumanString OPTIONAL } -- The human-readable description should generally be provided. -- It is legal for both default elements to be missing, which -- means that the target will allow the attribute type to be -- omitted, but isn't saying what it will do. AttributeValue ::= SEQUENCE { value [0] StringOrNumeric, description [1] IMPLICIT HumanString OPTIONAL, subAttributes [2] IMPLICIT SEQUENCE OF StringOrNumeric OPTIONAL, superAttributes [3] IMPLICIT SEQUENCE OF StringOrNumeric OPTIONAL, partialSupport [4] IMPLICIT NULL OPTIONAL } -- partialSupport indicates that an attributeValue is accepted, but may not be processed in the -- "expected" way. One important reason for this is composite databases: in this case partialSupport -- may indicate that only some of the subDbs support the attribute, and others ignore it. TermListDetails ::= SEQUENCE{ -- one for each termList in TermListInfo commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: termListName [1] IMPLICIT InternationalString, -- Non-key elements (all non-brief) follow: description [2] IMPLICIT HumanString OPTIONAL, attributes [3] IMPLICIT AttributeCombinations OPTIONAL, -- Pattern for attributes that hit this list. Mandatory in full record scanInfo [4] IMPLICIT SEQUENCE { maxStepSize [0] IMPLICIT INTEGER OPTIONAL, collatingSequence [1] IMPLICIT HumanString OPTIONAL, increasing [2] IMPLICIT BOOLEAN OPTIONAL} OPTIONAL, -- Occurs only if list is scanable. If list is scanable and if scanInfo is omitted, -- target doesn't consider these important. estNumberTerms [5] IMPLICIT INTEGER OPTIONAL, sampleTerms [6] IMPLICIT SEQUENCE OF Term OPTIONAL} ElementSetDetails ::= SEQUENCE { -- ElementSetDetails describes the way that database records are mapped to record elements. This -- mapping may be different for each combination of database name and element set. The database record -- description is a schema, which may be private to the target. The schema's abstract record structure -- and tag sets provide the vocabulary for discussing record content; their presence in the Explain -- database does not imply support for complex retrieval specification. commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: databaseName [1] IMPLICIT DatabaseName, elementSetName [2] IMPLICIT ElementSetName, recordSyntax [3] IMPLICIT OBJECT IDENTIFIER, -- Non-key Brief elements follow: schema [4] IMPLICIT OBJECT IDENTIFIER, -- Non-brief elements follow: description [5] IMPLICIT HumanString OPTIONAL, detailsPerElement [6] IMPLICIT SEQUENCE OF PerElementDetails OPTIONAL -- mandatory in full record } RetrievalRecordDetails ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: databaseName [1] IMPLICIT DatabaseName, schema [2] IMPLICIT OBJECT IDENTIFIER, recordSyntax [3] IMPLICIT OBJECT IDENTIFIER, -- Non-brief elements follow: description [4] IMPLICIT HumanString OPTIONAL, detailsPerElement [5] IMPLICIT SEQUENCE OF PerElementDetails OPTIONAL -- mandatory in full record } -- PerElementDetails is referenced in RetrievalRecordDetails and ElementSetDetails. PerElementDetails ::= SEQUENCE { name [0] IMPLICIT InternationalString OPTIONAL, -- If the name is omitted, the record syntax's name for this element -- is appropriate. recordTag [1] IMPLICIT RecordTag OPTIONAL, -- The record tag may be omitted if tags are inappropriate for the record -- syntax, or if the origin can be expected to know it for some other reason. schemaTags [2] IMPLICIT SEQUENCE OF Path OPTIONAL, -- The information from the listed schema elements is combined -- in some way to produce the data sent in the listed record tag. The -- 'contents' element below may describe the logic used. maxSize [3] IMPLICIT INTEGER OPTIONAL, minSize [4] IMPLICIT INTEGER OPTIONAL, avgSize [5] IMPLICIT INTEGER OPTIONAL, fixedSize [6] IMPLICIT INTEGER OPTIONAL, repeatable [8] IMPLICIT BOOLEAN, required [9] IMPLICIT BOOLEAN, -- 'required' really means that target will always supply the element. description [12] IMPLICIT HumanString OPTIONAL, contents [13] IMPLICIT HumanString OPTIONAL, billingInfo [14] IMPLICIT HumanString OPTIONAL, restrictions [15] IMPLICIT HumanString OPTIONAL, alternateNames [16] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, genericNames [17] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, searchAccess [18] IMPLICIT AttributeCombinations OPTIONAL } -- RecordTag referenced in PerElementDetails above RecordTag ::= SEQUENCE { qualifier [0] StringOrNumeric OPTIONAL, -- E.g. tag set for GRS-1 tagValue [1] StringOrNumeric} SortDetails ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: databaseName [1] IMPLICIT DatabaseName, -- No non-key brief elements -- Non-brief elements follow: sortKeys [2] IMPLICIT SEQUENCE OF SortKeyDetails OPTIONAL -- mandatory in full record } SortKeyDetails ::= SEQUENCE { description [0] IMPLICIT HumanString OPTIONAL, elementSpecifications [1] IMPLICIT SEQUENCE OF Specification OPTIONAL, -- each specification is a way of specifying this same sort key attributeSpecifications [2] IMPLICIT AttributeCombinations OPTIONAL, -- each combination is a way of specifying this same sort key sortType [3] CHOICE { character [0] IMPLICIT NULL, numeric [1] IMPLICIT NULL, structured [2] IMPLICIT HumanString} OPTIONAL, caseSensitivity [4] IMPLICIT INTEGER { always (0), -- always case-sensitive never (1), -- never case-sensitive default-yes (2), -- case-sensitivity is as specified on request, and if not -- specified, case-sensitive. default-no (3)} -- case-sensitivity is as specified on request, and if not -- specified, not case-sensitive. OPTIONAL} ProcessingInformation ::= SEQUENCE{ commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: databaseName [1] IMPLICIT DatabaseName, processingContext [2] IMPLICIT INTEGER { access (0), -- e.g. choosing databases search (1), -- e.g. "search strategies" or search forms retrieval (2), -- e.g. recommended element combinations record-presentation (3), -- display of retrieved records record-handling (4) -- handling (e.g. saving) of retrieved records }, name [3] IMPLICIT InternationalString, oid [4] IMPLICIT OBJECT IDENTIFIER, -- No non-key brief elements -- Non-brief elements follow: description [5] IMPLICIT HumanString OPTIONAL, -- use element set name 'description' to retrieve all except instructions. instructions [6] IMPLICIT EXTERNAL OPTIONAL -- mandatory in full record } VariantSetInfo ::= SEQUENCE { -- A record in this category describes a variant set definition, i.e., classes, types, and values, for a specific -- variant set definition supported by the target. Support by the target of a particular variant set definition -- does not imply that the definition is supported for any specific database or element. commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: variantSet [1] IMPLICIT OBJECT IDENTIFIER, -- Non-key brief elements follow: name [2] IMPLICIT InternationalString, -- Non-brief elements follow: variants [3] IMPLICIT SEQUENCE OF VariantClass OPTIONAL -- mandatory in full record } -- Subsidiary structures for VariantSetInfo VariantClass ::= SEQUENCE { name [0] IMPLICIT InternationalString OPTIONAL, description [1] IMPLICIT HumanString OPTIONAL, variantClass [2] IMPLICIT INTEGER, variantTypes [3] IMPLICIT SEQUENCE OF VariantType} VariantType ::= SEQUENCE { name [0] IMPLICIT InternationalString OPTIONAL, description [1] IMPLICIT HumanString OPTIONAL, variantType [2] IMPLICIT INTEGER, variantValue [3] IMPLICIT VariantValue OPTIONAL} VariantValue ::= SEQUENCE { dataType [0] PrimitiveDataType, values [1] ValueSet OPTIONAL } ValueSet ::= CHOICE { range [0] IMPLICIT ValueRange, enumerated [1] IMPLICIT SEQUENCE OF ValueDescription } ValueRange ::= SEQUENCE { -- At last one the following must be supplied, both may be supplied. lower [0] ValueDescription OPTIONAL, upper [1] ValueDescription OPTIONAL } ValueDescription ::= CHOICE{ integer INTEGER, string InternationalString, octets OCTET STRING, oid OBJECT IDENTIFIER, unit [1] IMPLICIT Unit, valueAndUnit [2] IMPLICIT IntUnit -- oid and unit can't be used in a ValueRange } UnitInfo ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Key elements follow: unitSystem [1] IMPLICIT InternationalString, -- No non-key brief elements -- Non-brief elements follow: description [2] IMPLICIT HumanString OPTIONAL, units [3] IMPLICIT SEQUENCE OF UnitType OPTIONAL -- mandatory in full record } -- Subsidiary structures for UnitInfo UnitType ::= SEQUENCE { name [0] IMPLICIT InternationalString OPTIONAL, description [1] IMPLICIT HumanString OPTIONAL, unitType [2] StringOrNumeric, units [3] IMPLICIT SEQUENCE OF Units} Units ::= SEQUENCE { name [0] IMPLICIT InternationalString OPTIONAL, description [1] IMPLICIT HumanString OPTIONAL, unit [2] StringOrNumeric} CategoryList ::= SEQUENCE { commonInfo [0] IMPLICIT CommonInfo OPTIONAL, -- Only one record expected per Explain database. All elements appear in brief presentation. categories [1] IMPLICIT SEQUENCE OF CategoryInfo } CategoryInfo ::= SEQUENCE { category [1] IMPLICIT InternationalString, originalCategory [2] IMPLICIT InternationalString OPTIONAL, description [3] IMPLICIT HumanString OPTIONAL, asn1Module [4] IMPLICIT InternationalString OPTIONAL} -- - - - - - - - - - - - - - Subsidiary definitions CommonInfo ::= SEQUENCE { dateAdded [0] IMPLICIT GeneralizedTime OPTIONAL, dateChanged [1] IMPLICIT GeneralizedTime OPTIONAL, expiry [2] IMPLICIT GeneralizedTime OPTIONAL, humanString-Language [3] IMPLICIT LanguageCode OPTIONAL, -- following not to occur for brief: otherInfo OtherInformation OPTIONAL} HumanString ::= SEQUENCE OF SEQUENCE { language [0] IMPLICIT LanguageCode OPTIONAL, text [1] IMPLICIT InternationalString} IconObject ::= SEQUENCE OF SEQUENCE{ -- Note that the "SEQUENCE OF" is to allow alternative representations of the same Icon; it is not -- intended to allow multiple icons. bodyType [1] CHOICE{ ianaType [1] IMPLICIT InternationalString, z3950type [2] IMPLICIT InternationalString, otherType [3] IMPLICIT InternationalString}, content [2] IMPLICIT OCTET STRING} LanguageCode ::= InternationalString -- from ANSI/NISO Z39.53-1994 ContactInfo ::= SEQUENCE { name [0] IMPLICIT InternationalString OPTIONAL, description [1] IMPLICIT HumanString OPTIONAL, address [2] IMPLICIT HumanString OPTIONAL, email [3] IMPLICIT InternationalString OPTIONAL, phone [4] IMPLICIT InternationalString OPTIONAL} NetworkAddress ::= CHOICE { internetAddress [0] IMPLICIT SEQUENCE { hostAddress [0] IMPLICIT InternationalString, port [1] IMPLICIT INTEGER}, osiPresentationAddress [1] IMPLICIT SEQUENCE { pSel [0] IMPLICIT InternationalString, sSel [1] IMPLICIT InternationalString OPTIONAL, tSel [2] IMPLICIT InternationalString OPTIONAL, nSap [3] IMPLICIT InternationalString}, other [2] IMPLICIT SEQUENCE { type [0] IMPLICIT InternationalString, address [1] IMPLICIT InternationalString}} AccessInfo ::= SEQUENCE { -- AccessInfo contains the fundamental information about what facilities are required to use this target -- or server. For example, if an origin can handle none of the record syntaxes a database can provide, -- it might choose not to access the database. queryTypesSupported [0] IMPLICIT SEQUENCE OF QueryTypeDetails OPTIONAL, diagnosticsSets [1] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, attributeSetIds [2] IMPLICIT SEQUENCE OF AttributeSetId OPTIONAL, schemas [3] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, recordSyntaxes [4] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, resourceChallenges [5] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, restrictedAccess [6] IMPLICIT AccessRestrictions OPTIONAL, costInfo [8] IMPLICIT Costs OPTIONAL, variantSets [9] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, elementSetNames [10] IMPLICIT SEQUENCE OF ElementSetName OPTIONAL, unitSystems [11] IMPLICIT SEQUENCE OF InternationalString} -- begin auxiliary definitions for AccessInfo -- Begin Query Details QueryTypeDetails ::= CHOICE { private [0] IMPLICIT PrivateCapabilities, rpn [1] IMPLICIT RpnCapabilities, iso8777 [2] IMPLICIT Iso8777Capabilities, z39-58 [100] IMPLICIT HumanString, erpn [101] IMPLICIT RpnCapabilities, rankedList [102] IMPLICIT HumanString} PrivateCapabilities ::= SEQUENCE { operators [0] IMPLICIT SEQUENCE OF SEQUENCE { operator [0] IMPLICIT InternationalString, description [1] IMPLICIT HumanString OPTIONAL } OPTIONAL, searchKeys [1] IMPLICIT SEQUENCE OF SearchKey OPTIONAL, -- field names that can be searched description [2] IMPLICIT SEQUENCE OF HumanString OPTIONAL } RpnCapabilities ::= SEQUENCE { operators [0] IMPLICIT SEQUENCE OF INTEGER OPTIONAL, -- Omitted means all operators are supported. resultSetAsOperandSupported [1] IMPLICIT BOOLEAN, restrictionOperandSupported [2] IMPLICIT BOOLEAN, proximity [3] IMPLICIT ProximitySupport OPTIONAL} Iso8777Capabilities ::= SEQUENCE { searchKeys [0] IMPLICIT SEQUENCE OF SearchKey, -- field names that may be searched restrictions [1] IMPLICIT HumanString OPTIONAL -- Omitted means supported, not specifying units. } ProximitySupport ::= SEQUENCE { anySupport [0] IMPLICIT BOOLEAN, -- 'false' means no proximity support, in which case unitsSupported not supplied. unitsSupported [1] IMPLICIT SEQUENCE OF CHOICE{ known [1] IMPLICIT INTEGER, -- values from KnownProximityUnit private [2] IMPLICIT SEQUENCE{ unit [0] IMPLICIT INTEGER, description [1] HumanString OPTIONAL}} OPTIONAL} SearchKey ::= SEQUENCE { searchKey [0] IMPLICIT InternationalString, description [1] IMPLICIT HumanString OPTIONAL } -- End Query details AccessRestrictions ::= SEQUENCE OF SEQUENCE { accessType [0] INTEGER { any (0), search (1), present (2), specific-elements (3), extended-services (4), by-database (5)}, accessText [1] IMPLICIT HumanString OPTIONAL, accessChallenges [2] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL} Costs ::= SEQUENCE { connectCharge [0] IMPLICIT Charge OPTIONAL, -- Per-connection charge connectTime [1] IMPLICIT Charge OPTIONAL, -- Time-based charge displayCharge [2] IMPLICIT Charge OPTIONAL, -- Per-record charge searchCharge [3] IMPLICIT Charge OPTIONAL, -- Per-search charge subscriptCharge [4] IMPLICIT Charge OPTIONAL, -- Subscription charges otherCharges [5] IMPLICIT SEQUENCE OF SEQUENCE{ -- Other charges forWhat [1] IMPLICIT HumanString, charge [2] IMPLICIT Charge} OPTIONAL} Charge ::= SEQUENCE{ cost [1] IMPLICIT IntUnit, perWhat [2] IMPLICIT Unit OPTIONAL, -- e.g. "second," "minute," "line," "record"... text [3] IMPLICIT HumanString OPTIONAL} -- End Auxiliary definitions for AccessInfo DatabaseList ::= SEQUENCE OF DatabaseName AttributeCombinations ::= SEQUENCE { defaultAttributeSet [0] IMPLICIT AttributeSetId, -- Default for the combinations. Also probably a good choice for the default -- in searches, but that isn't required. legalCombinations [1] IMPLICIT SEQUENCE OF AttributeCombination } AttributeCombination ::= SEQUENCE OF AttributeOccurrence -- An AttributeCombination is a pattern for legal combination of attributes AttributeOccurrence ::= SEQUENCE { -- An AttributeOccurrence lists the legal values for a specific attribute type in a combination. attributeSet [0] IMPLICIT AttributeSetId OPTIONAL, attributeType [1] IMPLICIT INTEGER, mustBeSupplied [2] IMPLICIT NULL OPTIONAL, attributeValues CHOICE { any-or-none [3] IMPLICIT NULL, -- All supported values are OK specific [4] IMPLICIT SEQUENCE OF StringOrNumeric}} -- Only these values allowed END RecordSyntax-SUTRS {Z39-50-recordSyntax SUTRS (101)} DEFINITIONS ::= BEGIN IMPORTS InternationalString FROM Z39-50-APDU-1995; SutrsRecord ::= InternationalString -- Line terminator is ASCII LF (X'0A'). -- Recommended maximum line length is 72 characters. END RecordSyntax-opac {Z39-50-recordSyntax opac (102)} DEFINITIONS ::= BEGIN IMPORTS InternationalString FROM Z39-50-APDU-1995; OPACRecord ::= SEQUENCE { bibliographicRecord [1] IMPLICIT EXTERNAL OPTIONAL, holdingsData [2] IMPLICIT SEQUENCE OF HoldingsRecord OPTIONAL} HoldingsRecord ::= CHOICE { marcHoldingsRecord [1] IMPLICIT EXTERNAL, holdingsAndCirc [2] IMPLICIT HoldingsAndCircData} HoldingsAndCircData ::= SEQUENCE { -- the following elements are required to display holdings in conformance with NISO standards. typeOfRecord [1] IMPLICIT InternationalString OPTIONAL, -- LDR 06 encodingLevel [2] IMPLICIT InternationalString OPTIONAL, -- LDR 017 format [3] IMPLICIT InternationalString OPTIONAL, -- 007 00-01 receiptAcqStatus [4] IMPLICIT InternationalString OPTIONAL, -- 008 06 generalRetention [5] IMPLICIT InternationalString OPTIONAL, -- 008 12 completeness [6] IMPLICIT InternationalString OPTIONAL, -- 008 16 dateOfReport [7] IMPLICIT InternationalString OPTIONAL, -- 008 26-31 nucCode [8] IMPLICIT InternationalString OPTIONAL, -- 852 $a localLocation [9] IMPLICIT InternationalString OPTIONAL, -- 852 $b shelvingLocation [10] IMPLICIT InternationalString OPTIONAL, -- 852 $c callNumber [11] IMPLICIT InternationalString OPTIONAL, -- 852 $h and $i shelvingData [12] IMPLICIT InternationalString OPTIONAL, -- 852 $j thru $m copyNumber [13] IMPLICIT InternationalString OPTIONAL, -- 852 $t publicNote [14] IMPLICIT InternationalString OPTIONAL, -- 852 $z reproductionNote [15] IMPLICIT InternationalString OPTIONAL, -- 843 termsUseRepro [16] IMPLICIT InternationalString OPTIONAL, -- 845 enumAndChron [17] IMPLICIT InternationalString OPTIONAL, -- all 85x, 86x volumes [18] IMPLICIT SEQUENCE OF Volume OPTIONAL, -- repeats for each volume held circulationData [19] IMPLICIT SEQUENCE OF CircRecord OPTIONAL -- repeats for each circulating item. } Volume ::= SEQUENCE { enumeration [1] IMPLICIT InternationalString OPTIONAL, chronology [2] IMPLICIT InternationalString OPTIONAL, enumAndChron [3] IMPLICIT InternationalString OPTIONAL } CircRecord ::= SEQUENCE { availableNow [1] IMPLICIT BOOLEAN, availablityDate [2] IMPLICIT InternationalString OPTIONAL, availableThru [3] IMPLICIT InternationalString OPTIONAL, restrictions [4] IMPLICIT InternationalString OPTIONAL, itemId [5] IMPLICIT InternationalString OPTIONAL, renewable [6] IMPLICIT BOOLEAN, onHold [7] IMPLICIT BOOLEAN, enumAndChron [8] IMPLICIT InternationalString OPTIONAL, midspine [9] IMPLICIT InternationalString OPTIONAL, temporaryLocation [10] IMPLICIT InternationalString OPTIONAL} END RecordSyntax-summary {Z39-50-recordSyntax summary (103)} DEFINITIONS ::= BEGIN IMPORTS OtherInformation, InternationalString FROM Z39-50-APDU-1995; BriefBib ::= SEQUENCE { title [1] IMPLICIT InternationalString, author [2] IMPLICIT InternationalString OPTIONAL, callNumber [3] IMPLICIT InternationalString OPTIONAL, recordType [4] IMPLICIT InternationalString OPTIONAL, bibliographicLevel [5] IMPLICIT InternationalString OPTIONAL, format [6] IMPLICIT SEQUENCE OF FormatSpec OPTIONAL, publicationPlace [7] IMPLICIT InternationalString OPTIONAL, publicationDate [8] IMPLICIT InternationalString OPTIONAL, targetSystemKey [9] IMPLICIT InternationalString OPTIONAL, satisfyingElement [10] IMPLICIT InternationalString OPTIONAL, rank [11] IMPLICIT INTEGER OPTIONAL, documentId [12] IMPLICIT InternationalString OPTIONAL, abstract [13] IMPLICIT InternationalString OPTIONAL, otherInfo OtherInformation OPTIONAL} FormatSpec ::= SEQUENCE { type [1] IMPLICIT InternationalString, size [2] IMPLICIT INTEGER OPTIONAL, bestPosn [3] IMPLICIT INTEGER OPTIONAL} END RecordSyntax-generic -- For detailed semantics, see Appendix RET. {Z39-50-recordSyntax GRS-1 (105)} DEFINITIONS ::= BEGIN EXPORTS Variant; IMPORTS IntUnit, Unit, InternationalString, StringOrNumeric, Term FROM Z39-50-APDU-1995; GenericRecord ::= SEQUENCE OF TaggedElement TaggedElement ::= SEQUENCE { tagType [1] IMPLICIT INTEGER OPTIONAL, -- If omitted, default should be supplied dynamically by tagSet-M; -- otherwise it should be statically specified by the schema. tagValue [2] StringOrNumeric, tagOccurrence [3] IMPLICIT INTEGER OPTIONAL, -- Occurrence within the database record, and relative to the parent. No -- default; if omitted, target not telling or it is irrelevant. content [4] ElementData, metaData [5] IMPLICIT ElementMetaData OPTIONAL, appliedVariant [6] IMPLICIT Variant OPTIONAL} ElementData ::= CHOICE{ octets OCTET STRING, numeric INTEGER, date GeneralizedTime, ext EXTERNAL, string InternationalString, trueOrFalse BOOLEAN, oid OBJECT IDENTIFIER, intUnit [1] IMPLICIT IntUnit, elementNotThere [2] IMPLICIT NULL, -- element requested but not there elementEmpty [3] IMPLICIT NULL, -- element there, but empty noDataRequested [4] IMPLICIT NULL, -- variant request said 'no data' diagnostic [5] IMPLICIT EXTERNAL, subtree [6] SEQUENCE OF TaggedElement -- recursive, for nested tags } ElementMetaData ::= SEQUENCE{ seriesOrder [1] IMPLICIT Order OPTIONAL, -- only for a non-leaf node usageRight [2] IMPLICIT Usage OPTIONAL, hits [3] IMPLICIT SEQUENCE OF HitVector OPTIONAL, displayName [4] IMPLICIT InternationalString OPTIONAL, -- name for element that origin can use for display supportedVariants [5] IMPLICIT SEQUENCE OF Variant OPTIONAL, message [6] IMPLICIT InternationalString OPTIONAL, elementDescriptor [7] IMPLICIT OCTET STRING OPTIONAL, surrogateFor [8] IMPLICIT TagPath OPTIONAL, -- the retrieved element is a surrogate for the element given by this path surrogateElement [9] IMPLICIT TagPath OPTIONAL, -- the element given by this path is a surrogate for the retrieved element other [99] IMPLICIT EXTERNAL OPTIONAL} TagPath ::= SEQUENCE OF SEQUENCE{ tagType [1] IMPLICIT INTEGER OPTIONAL, tagValue [2] StringOrNumeric, tagOccurrence [3] IMPLICIT INTEGER OPTIONAL} Order ::= SEQUENCE{ ascending [1] IMPLICIT BOOLEAN, -- "true" means monotonically increasing (i.e. non-decreasing); -- "false" means monotonically decreasing (i.e. non-increasing). order [2] IMPLICIT INTEGER -- Same as defined by 'elementOrdering' in tagSet-M, though this may be -- overridden by schema. } Usage ::= SEQUENCE { type [1] IMPLICIT INTEGER{ redistributable (1), -- Element is freely redistributable. restricted (2), -- Restriction contains statement. licensePointer (3) -- Restriction contains license pointer. }, restriction [2] IMPLICIT InternationalString OPTIONAL} HitVector ::= SEQUENCE{ -- Each hit vector points to a fragment within the element, via location and/or token. satisfier Term OPTIONAL, -- sourceword, etc. offsetIntoElement [1] IMPLICIT IntUnit OPTIONAL, length [2] IMPLICIT IntUnit OPTIONAL, hitRank [3] IMPLICIT INTEGER OPTIONAL, targetToken [4] IMPLICIT OCTET STRING OPTIONAL -- Origin may use token subsequently within a variantRequest (in -- an elementRequest) to retrieve (or to refer to) the fragment. } Variant ::= SEQUENCE{ globalVariantSetId [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL, -- Applies to the triples below, when variantSetId omitted. If -- globalVariantSetId omitted, default applies. Default may be provided by -- the tagSet-M element defaultVariantSetId. triples [2] IMPLICIT SEQUENCE OF SEQUENCE{ variantSetId [0] IMPLICIT OBJECT IDENTIFIER OPTIONAL, -- If omitted, globalVariantSetId (above) -- applies, unless that too is omitted, in -- which case, default used. class [1] IMPLICIT INTEGER, type [2] IMPLICIT INTEGER, value [3] CHOICE{ integer INTEGER, internationalString InternationalString, octetString OCTET STRING, objectIdentifier OBJECT IDENTIFIER, boolean BOOLEAN, null NULL, -- Following need context tags: unit [1] IMPLICIT Unit, valueAndUnit [2] IMPLICIT IntUnit}}} END RecordSyntax-ESTaskPackage {Z39-50-recordSyntax ESTaskPackage (106)} DEFINITIONS ::= BEGIN IMPORTS Permissions, InternationalString, IntUnit, DiagRec FROM Z39-50-APDU-1995; TaskPackage ::= SEQUENCE{ packageType [1] IMPLICIT OBJECT IDENTIFIER, -- oid of specific ES definition packageName [2] IMPLICIT InternationalString OPTIONAL, userId [3] IMPLICIT InternationalString OPTIONAL, retentionTime [4] IMPLICIT IntUnit OPTIONAL, permissions [5] IMPLICIT Permissions OPTIONAL, description [6] IMPLICIT InternationalString OPTIONAL, targetReference [7] IMPLICIT OCTET STRING OPTIONAL, creationDateTime [8] IMPLICIT GeneralizedTime OPTIONAL, taskStatus [9] IMPLICIT INTEGER{ pending (0), active (1), complete (2), aborted (3)}, packageDiagnostics [10] IMPLICIT SEQUENCE OF DiagRec OPTIONAL, taskSpecificParameters [11] IMPLICIT EXTERNAL -- Use oid for specific ES definition -- (same oid as packageType above) -- and select [2] "taskPackage." } END ResourceReport-Format-Resource-1 {Z39-50-resourceReport resource-1 (1)} DEFINITIONS ::= BEGIN IMPORTS InternationalString FROM Z39-50-APDU-1995; -- ResourceReport ::= SEQUENCE{ estimates [1] IMPLICIT SEQUENCE OF Estimate, message [2] IMPLICIT InternationalString} -- Estimate ::= SEQUENCE{ type [1] IMPLICIT EstimateType, value [2] IMPLICIT INTEGER, -- the actual estimate currency-code [3] IMPLICIT INTEGER OPTIONAL -- code for representation of currencies defined in ISO 4217-1990. -- Applicable only to monetary estimates. } EstimateType ::= INTEGER{ currentSearchRecords (1), -- estimated no. records in current (incomplete) result set for search finalSearchRecords (2), -- estimated no. records that will be in result set if search completes currentPresentRecords (3), -- estimated number of records in current (incomplete) set of -- records to be returned on Present finalPresentRecords (4), -- estimated number of records that will be in the set of records -- to be returned by Present if Present completes currentOpTimeProcessing (5), -- processing time (in .001 CPU seconds) used by operation so far finalOpTimeProcessing (6), -- estimated total processing time (in .001 CPU seconds) that will -- be used by this operation if it completes currentAssocTime (7), -- estimated processing time used by association (in .001 CPU sec.) currentOperationCost (8), -- estimated cost for this operation so far finalOperationCost (9), -- estimated cost for this operation if it completes currentAssocCost (10), -- estimated cost for this association so far finalOpTimeElapsed (11), -- estimated elapsed time for operation if it completes (in .001 sec.) percentComplete (12), -- estimated percent complete currentSearchAssocCost (13), -- estimated search cost for association so far currentPresentAssocCost (14), -- estimated present cost for this association so far currentConnectAssocCost (15), -- estimated connect time cost for association so far currentOtherAssocCost (16) -- estimated other cost (not included in 13-15) for association so far } END ResourceReport-Format-Resource-2 {Z39-50-resourceReport resource-2 (2)} DEFINITIONS ::= BEGIN IMPORTS InternationalString, StringOrNumeric, IntUnit FROM Z39-50-APDU-1995; -- ResourceReport ::= SEQUENCE{ estimates [1] IMPLICIT SEQUENCE OF Estimate OPTIONAL, message [2] IMPLICIT InternationalString OPTIONAL} -- Estimate ::= SEQUENCE{ type [1] StringOrNumeric, -- Numeric values of 1-16 are the same as used in Resource-1. value [2] IMPLICIT IntUnit -- When expressing currency: -- unitSystem (of Unit) is 'z3950' (case insensitive) -- unitType is 'iso4217-1990' (case insensitive) -- unit is currency code from ISO 4217-1990. } END AccessControlFormat-prompt-1 {Z39-50-accessControl prompt-1 (1)} DEFINITIONS ::= BEGIN IMPORTS InternationalString, DiagRec FROM Z39-50-APDU-1995; -- PromptObject ::= CHOICE{ challenge [1] IMPLICIT Challenge, response [2] IMPLICIT Response} Challenge ::= SEQUENCE OF SEQUENCE { promptId [1] PromptId, -- Target supplies a number (for an enumerated prompt) or string (for a non -- -enumerated prompt), for each prompt, and the origin returns it in response, for -- this prompt, so target may correlate the prompt response with the prompt. defaultResponse [2] IMPLICIT InternationalString OPTIONAL, promptInfo [3] CHOICE{ character [1] IMPLICIT InternationalString, encrypted [2] IMPLICIT Encryption} OPTIONAL, -- Information corresponding to an enumerated prompt. For example if 'type', within -- PromptId, is 'copyright', then promptInfo may contain a copyright statement. regExpr [4] IMPLICIT InternationalString OPTIONAL, -- A regular expression that promptResponse should match. See IEEE 1003.2 -- Volume 1, Section 2.8 "Regular Expression Notation." For example if promptId -- is "Year of publication," regExpr might be "19[89][0-9]|20[0-9][0-9]". responseRequired [5] IMPLICIT NULL OPTIONAL, allowedValues [6] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, -- e.g. promptId="Desired color"; allowed = 'red', 'blue','Green'. shouldSave [7] IMPLICIT NULL OPTIONAL, -- Target recommends that origin save the data that it prompts from the -- user corresponding to this prompt, because it is likely to be requested again (so -- origin might not have to prompt the user next time). dataType [8] IMPLICIT INTEGER{ integer (1), date (2), float (3), alphaNumeric (4), url-urn (5), boolean (6)} OPTIONAL, -- Target telling origin type of data it wants. E.g., if "date" is specified, -- presumably the origin will try to prompt something "date-like" from the user. diagnostic [9] IMPLICIT EXTERNAL OPTIONAL -- Intended for repeat requests when there is an error the origin -- should report to the user from previous attempt. } Response ::= SEQUENCE OF SEQUENCE { promptId [1] PromptId, -- Corresponds to a prompt in the challenge, or may be unprompted, for -- example "newPassword." If unprompted, should be "enumerated." -- If this responds to a non-enumerated prompt, then nonEnumeratedPrompt -- should contain the prompt string from the challenge. promptResponse [2] CHOICE{ string [1] IMPLICIT InternationalString, accept [2] IMPLICIT BOOLEAN, acknowledge [3] IMPLICIT NULL, diagnostic [4] DiagRec, encrypted [5] IMPLICIT Encryption}} PromptId ::= CHOICE{ enummeratedPrompt [1] IMPLICIT SEQUENCE{ type [1] IMPLICIT INTEGER{ groupId (0), userId (1), password (2), newPassword (3), copyright (4), -- When type on Challenge is 'copyright', promptInfo has text of -- copyright message to be displayed verbatim to the user. If -- promptResponse indicates 'acceptance', this indicates the user has been -- shown, and accepted, the terms of the copyright. This is not intended -- to be legally binding, but provides a good-faith attempt on -- the part of the target to inform the user of the copyright. sessionId (5)}, suggestedString [2] IMPLICIT InternationalString OPTIONAL}, nonEnumeratedPrompt [2] IMPLICIT InternationalString} Encryption ::= SEQUENCE{ cryptType [1] IMPLICIT OCTET STRING OPTIONAL, credential [2] IMPLICIT OCTET STRING OPTIONAL, --random number, SALT, or other factor data [3] IMPLICIT OCTET STRING} END AccessControlFormat-des-1 {Z39-50-accessControlFormat des-1 (2)} DEFINITIONS ::= BEGIN DES-RN-Object ::= CHOICE { challenge [1] IMPLICIT DRNType, response [2] IMPLICIT DRNType} DRNType ::= SEQUENCE{ userId [1] IMPLICIT OCTET STRING OPTIONAL, salt [2] IMPLICIT OCTET STRING OPTIONAL, randomNumber [3] IMPLICIT OCTET STRING} END AccessControlFormat-krb-1 {Z39-50-accessControlFormat krb-1 (3)} DEFINITIONS ::= BEGIN IMPORTS InternationalString FROM Z39-50-APDU-1995; KRBObject ::= CHOICE { challenge [1] IMPLICIT KRBRequest, response [2] IMPLICIT KRBResponse} KRBRequest ::= SEQUENCE{ service [1] IMPLICIT InternationalString, instance [2] IMPLICIT InternationalString OPTIONAL, realm [3] IMPLICIT InternationalString OPTIONAL} -- target requests a ticket for the given service, instance, and realm KRBResponse ::= SEQUENCE{ userid [1] IMPLICIT InternationalString OPTIONAL, ticket [2] IMPLICIT OCTET STRING} -- origin responds with a ticket for the requested service END ESFormat-PersistentResultSet {Z39-50-extendedService PersistentResultSet (1)} DEFINITIONS ::= BEGIN IMPORTS InternationalString FROM Z39-50-APDU-1995; PersistentResultSet ::= CHOICE{ esRequest [1] IMPLICIT SEQUENCE{ toKeep [1] IMPLICIT NULL, notToKeep [2] OriginPartNotToKeep OPTIONAL}, taskPackage [2] IMPLICIT SEQUENCE{ originPart [1] IMPLICIT NULL, targetPart [2] TargetPart OPTIONAL}} OriginPartNotToKeep ::= SEQUENCE{ originSuppliedResultSet [1] IMPLICIT InternationalString OPTIONAL, -- name of transient result set, supplied on request, mandatory unless function is 'delete' replaceOrAppend [2] IMPLICIT INTEGER{ -- only if function is "modify" replace (1), append (2)} OPTIONAL} TargetPart ::= SEQUENCE{ targetSuppliedResultSet [1] IMPLICIT InternationalString OPTIONAL, -- Name of transient result set, supplied by target, representing the persistent result set to which -- package pertains. Meaningful only when package is presented. (i.e. not on ES response). numberOfRecords [2] IMPLICIT INTEGER OPTIONAL} END ESFormat-PersistentQuery {Z39-50-extendedService PersistentQuery (2)} DEFINITIONS ::= BEGIN IMPORTS Query, InternationalString, OtherInformation FROM Z39-50-APDU-1995; PersistentQuery ::= CHOICE{ esRequest [1] IMPLICIT SEQUENCE{ toKeep [1] OriginPartToKeep OPTIONAL, notToKeep [2] OriginPartNotToKeep}, taskPackage [2] IMPLICIT SEQUENCE{ originPart [1] OriginPartToKeep OPTIONAL, targetPart [2] TargetPart}} OriginPartToKeep ::= SEQUENCE{ dbNames [2] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, additionalSearchInfo [3] OtherInformation OPTIONAL} OriginPartNotToKeep ::= CHOICE{ package [1] IMPLICIT InternationalString, query [2] Query} TargetPart ::= Query END ESFormat-PeriodicQuerySchedule {Z39-50-extendedService PeriodicQuerySchedule (3)} DEFINITIONS ::= BEGIN IMPORTS Query, InternationalString, IntUnit FROM Z39-50-APDU-1995 ExportSpecification, Destination FROM ESFormat-ExportSpecification; PeriodicQuerySchedule ::= CHOICE{ esRequest [1] IMPLICIT SEQUENCE{ toKeep [1] OriginPartToKeep, notToKeep [2] OriginPartNotToKeep}, taskPackage [2] IMPLICIT SEQUENCE{ originPart [1] OriginPartToKeep, targetPart [2] TargetPart}} OriginPartToKeep ::=SEQUENCE{ activeFlag [1] IMPLICIT BOOLEAN, databaseNames [2] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, resultSetDisposition [3] IMPLICIT INTEGER{ replace (1), append (2), createNew (3) -- Only if origin and target have agreement about -- naming convention for the resulting package, -- and only if no result set is specified. } OPTIONAL, -- Mandatory on 'create' if result set is specified, in -- which case it must be 'replace' or 'append. alertDestination [4] Destination OPTIONAL, exportParameters [5] CHOICE{ packageName [1] IMPLICIT InternationalString, exportPackage [2] ExportSpecification} OPTIONAL} OriginPartNotToKeep ::= SEQUENCE{ querySpec [1] CHOICE{ actualQuery [1] Query, packageName [2] IMPLICIT InternationalString} OPTIONAL, -- mandatory for 'create' originSuggestedPeriod [2] Period OPTIONAL, -- mandatory for 'create' expiration [3] IMPLICIT GeneralizedTime OPTIONAL, resultSetPackage [4] IMPLICIT InternationalString OPTIONAL} TargetPart ::= SEQUENCE{ actualQuery [1] Query, targetStatedPeriod [2] Period, -- Target supplies the period, which may be same as origin proposed. expiration [3] IMPLICIT GeneralizedTime OPTIONAL, -- Target supplies value for task package. It may be the same as origin -- proposed or different from (and overrides) origin proposal, but if -- omitted, there is no expiration. resultSetPackage [4] IMPLICIT InternationalString OPTIONAL, -- May be omitted only if exportParameters was supplied. Target -- supplies same name as origin supplied, if origin did supply a name. lastQueryTime [5] IMPLICIT GeneralizedTime, lastResultNumber [6] IMPLICIT INTEGER, numberSinceModify [7] IMPLICIT INTEGER OPTIONAL} Period ::= CHOICE{ unit [1] IMPLICIT IntUnit, businessDaily [2] IMPLICIT NULL, continuous [3] IMPLICIT NULL, other [4] IMPLICIT InternationalString} END ESFormat-ItemOrder {Z39-50-extendedService ItemOrder (4)} DEFINITIONS ::= BEGIN IMPORTS InternationalString FROM Z39-50-APDU-1995; ItemOrder ::= CHOICE{ esRequest [1] IMPLICIT SEQUENCE{ toKeep [1] OriginPartToKeep OPTIONAL, notToKeep [2] OriginPartNotToKeep}, taskPackage [2] IMPLICIT SEQUENCE{ originPart [1] OriginPartToKeep OPTIONAL, targetPart [2] TargetPart}} OriginPartToKeep ::= SEQUENCE{ supplDescription [1] IMPLICIT EXTERNAL OPTIONAL, contact [2] IMPLICIT SEQUENCE{ name [1] IMPLICIT InternationalString OPTIONAL, phone [2] IMPLICIT InternationalString OPTIONAL, email [3] IMPLICIT InternationalString OPTIONAL} OPTIONAL, addlBilling [3] IMPLICIT SEQUENCE{ paymentMethod [1] CHOICE{ billInvoice [0] IMPLICIT NULL, prepay [1] IMPLICIT NULL, depositAccount [2] IMPLICIT NULL, creditCard [3] IMPLICIT CreditCardInfo, cardInfoPreviouslySupplied [4] IMPLICIT NULL, privateKnown [5] IMPLICIT NULL, privateNotKnown [6] IMPLICIT EXTERNAL}, customerReference [2] IMPLICIT InternationalString OPTIONAL, customerPONumber [3] IMPLICIT InternationalString OPTIONAL} OPTIONAL} CreditCardInfo ::= SEQUENCE{ nameOnCard [1] IMPLICIT InternationalString, expirationDate [2] IMPLICIT InternationalString, cardNumber [3] IMPLICIT InternationalString} OriginPartNotToKeep ::= SEQUENCE{ -- Corresponds to 'requestedItem' in service definition. -- Must supply at least one, and may supply both. resultSetItem [1] IMPLICIT SEQUENCE{ resultSetId [1] IMPLICIT InternationalString, item [2] IMPLICIT INTEGER} OPTIONAL, itemRequest [2] IMPLICIT EXTERNAL OPTIONAL -- When itemRequest is an ILL-Request APDU, -- use OID {iso standard 10161 abstract-syntax (2) ill-apdus (1)} } TargetPart ::= SEQUENCE{ itemRequest [1] IMPLICIT EXTERNAL OPTIONAL, -- When itemRequest is an ILL-Request APDU, use OID 1.0.10161.2.1 (as above) statusOrErrorReport [2] IMPLICIT EXTERNAL OPTIONAL, -- When statusOrErrorReport is an ILL Status-Or-Error-Report APDU, use OID 1.0.10161.2.1 (as above) auxiliaryStatus [3] IMPLICIT INTEGER{ notReceived (1), loanQueue (2), forwarded (3), unfilledCopyright (4), filledCopyright (5)} OPTIONAL} END ESFormat-Update0 {Z39-50-extendedService Update (5)} DEFINITIONS ::= BEGIN IMPORTS DiagRec, InternationalString FROM Z39-50-APDU-1995; Update ::= CHOICE{ esRequest [1] IMPLICIT SEQUENCE{ toKeep [1] OriginPartToKeep, notToKeep [2] OriginPartNotToKeep}, taskPackage [2] IMPLICIT SEQUENCE{ originPart [1] OriginPartToKeep, targetPart [2] TargetPart}} OriginPartToKeep ::= SEQUENCE{ action [1] IMPLICIT INTEGER{ recordInsert (1), recordReplace (2), recordDelete (3), elementUpdate (4)}, databaseName [2] IMPLICIT InternationalString, schema [3] IMPLICIT OBJECT IDENTIFIER OPTIONAL, elementSetName [4] IMPLICIT InternationalString OPTIONAL} OriginPartNotToKeep ::= SuppliedRecords TargetPart ::= SEQUENCE{ updateStatus [1] IMPLICIT INTEGER{ success (1), partial (2), failure (3)}, globalDiagnostics [2] IMPLICIT SEQUENCE OF DiagRec OPTIONAL, -- These are non-surrogate diagnostics relating to the task, -- not to individual records. taskPackageRecords [3] IMPLICIT SEQUENCE OF TaskPackageRecordStructure OPTIONAL -- There should be a TaskPackageRecordStructure for every record -- supplied. The target should create such a structure for every -- record immediately upon creating the task package to include -- correlation information and status. The record itself would not -- be included until processing for that record is complete. } -- Auxiliary definitions for Update SuppliedRecords ::= SEQUENCE OF SEQUENCE{ recordId [1] CHOICE{ number [1] IMPLICIT INTEGER, string [2] IMPLICIT InternationalString, opaque [3] IMPLICIT OCTET STRING} OPTIONAL, supplementalId [2] CHOICE{ timeStamp [1] IMPLICIT GeneralizedTime, versionNumber [2] IMPLICIT InternationalString, previousVersion [3] IMPLICIT EXTERNAL} OPTIONAL, correlationInfo [3] IMPLICIT CorrelationInfo OPTIONAL, record [4] IMPLICIT EXTERNAL} CorrelationInfo ::= SEQUENCE{ -- origin may supply one or both for any record: note [1] IMPLICIT InternationalString OPTIONAL, id [2] IMPLICIT INTEGER OPTIONAL} TaskPackageRecordStructure ::= SEQUENCE{ recordOrSurDiag [1] CHOICE { record [1] IMPLICIT EXTERNAL, -- Choose 'record' if recordStatus is 'success', and -- elementSetName was supplied. diagnostic [2] DiagRec -- Choose 'diagnostic', if RecordStatus is failure. } OPTIONAL, -- The parameter recordOrSurDiag will thus be omitted only if -- 'elementSetName' was omitted and recordStatus is -- 'success'; or if record status is 'queued' or in 'process'. correlationInfo [2] IMPLICIT CorrelationInfo OPTIONAL, -- This should be included if it was supplied by the origin. recordStatus [3] IMPLICIT INTEGER{ success (1), queued (2), inProcess (3), failure (4)}} END ESFormat-ExportSpecification {Z39-50-extendedService ExportSpecification (6)} DEFINITIONS ::= BEGIN EXPORTS ExportSpecification, Destination; IMPORTS CompSpec, InternationalString FROM Z39-50-APDU-1995; ExportSpecification ::= CHOICE{ esRequest [1] IMPLICIT SEQUENCE{ toKeep [1] OriginPartToKeep, notToKeep [2] IMPLICIT NULL}, taskPackage [2] IMPLICIT SEQUENCE{ originPart [1] OriginPartToKeep, targetPart [2] IMPLICIT NULL}} OriginPartToKeep ::= SEQUENCE{ composition [1] IMPLICIT CompSpec, exportDestination [2] Destination} Destination ::= CHOICE{ phoneNumber [1] IMPLICIT InternationalString, faxNumber [2] IMPLICIT InternationalString, x400address [3] IMPLICIT InternationalString, emailAddress [4] IMPLICIT InternationalString, pagerNumber [5] IMPLICIT InternationalString, ftpAddress [6] IMPLICIT InternationalString, ftamAddress [7] IMPLICIT InternationalString, printerAddress [8] IMPLICIT InternationalString, other [100] IMPLICIT SEQUENCE{ vehicle [1] IMPLICIT InternationalString OPTIONAL, destination [2] IMPLICIT InternationalString}} END ESFormat-ExportInvocation {Z39-50-extendedService ExportInvocation (7)} DEFINITIONS ::= BEGIN IMPORTS InternationalString, IntUnit FROM Z39-50-APDU-1995 ExportSpecification FROM ESFormat-ExportSpecification; ExportInvocation ::= CHOICE{ esRequest [1] IMPLICIT SEQUENCE{ toKeep [1] OriginPartToKeep, notToKeep [2] OriginPartNotToKeep}, taskPackage [2] IMPLICIT SEQUENCE{ originPart [1] OriginPartToKeep, targetPart [2] TargetPart OPTIONAL}} OriginPartToKeep ::= SEQUENCE{ exportSpec [1] CHOICE{ packageName [1] IMPLICIT InternationalString, packageSpec [2] ExportSpecification}, numberOfCopies [2] IMPLICIT INTEGER} OriginPartNotToKeep ::= SEQUENCE{ resultSetId [1] IMPLICIT InternationalString, records [2] CHOICE{ all [1] IMPLICIT NULL, ranges [2] IMPLICIT SEQUENCE OF SEQUENCE{ start [1] IMPLICIT INTEGER, count [2] IMPLICIT INTEGER OPTIONAL -- Count may be omitted only on last range, to indicate -- "all remaining records beginning with 'start'." }}} TargetPart ::= SEQUENCE{ estimatedQuantity [1] IMPLICIT IntUnit OPTIONAL, quantitySoFar [2] IMPLICIT IntUnit OPTIONAL, estimatedCost [3] IMPLICIT IntUnit OPTIONAL, costSoFar [4] IMPLICIT IntUnit OPTIONAL} END UserInfoFormat-searchResult-1 {Z39-50-userInfoFormat searchResult-1 (1)} DEFINITIONS ::= BEGIN IMPORTS DatabaseName, Term, Query, IntUnit, InternationalString FROM Z39-50-APDU-1995; SearchInfoReport ::= SEQUENCE OF SEQUENCE{ subqueryId [1] IMPLICIT InternationalString OPTIONAL, -- shorthand identifier of subquery fullQuery [2] IMPLICIT BOOLEAN, -- 'true' means this is the full query; 'false', -- a sub-query subqueryExpression [3] QueryExpression OPTIONAL, -- A subquery of the query as -- submitted. May be whole query; -- if so, "fullQuery" should be 'true'. subqueryInterpretation [4] QueryExpression OPTIONAL, -- how target interpreted subquery subqueryRecommendation [5] QueryExpression OPTIONAL, -- target-recommended alternative subqueryCount [6] IMPLICIT INTEGER OPTIONAL, -- Number of records for this -- subQuery, across all of the specified -- databases. (If during search, via resource -- control, number of records so far). subqueryWeight [7] IMPLICIT IntUnit OPTIONAL, -- relative weight of this subquery resultsByDB [8] IMPLICIT ResultsByDB OPTIONAL} ResultsByDB ::= SEQUENCE OF SEQUENCE{ databases [1] CHOICE{ all [1] IMPLICIT NULL, -- applies across all of the databases in Search PDU list [2] IMPLICIT SEQUENCE OF DatabaseName -- applies across all databases in this list }, count [2] IMPLICIT INTEGER OPTIONAL, -- Number of records for query component (and, as above, if during search, -- via resource control, number of records so far). resultSetName [3] IMPLICIT InternationalString OPTIONAL -- Target-assigned result set by which subQuery is available. Should not -- be provided unless processing for this query component is concluded (i.e., -- when this report comes during search, via resource control, as opposed -- to after search, via additionalSearchInfo). } QueryExpression ::= CHOICE { term [1] IMPLICIT SEQUENCE{ queryTerm [1] Term, termComment [2] IMPLICIT InternationalString OPTIONAL}, query [2] Query} END ElementSpecificationFormat-eSpec-1 {Z39-50-elementSpec eSpec-1 (1)} DEFINITIONS ::= BEGIN IMPORTS Variant FROM RecordSyntax-generic StringOrNumeric, InternationalString FROM Z39-50-APDU-1995; -- Espec-1 ::= SEQUENCE{ elementSetNames [1] IMPLICIT SEQUENCE OF InternationalString OPTIONAL, -- Origin may include one or more element set names, each -- specifying a set of elements. Each of the elements is to be -- treated as an elementRequest in the form of simpleElement, -- where occurrence is 1. defaultVariantSetId [2] IMPLICIT OBJECT IDENTIFIER OPTIONAL, -- If supplied, applies whenever variantRequest -- does not include variantSetId. defaultVariantRequest [3] IMPLICIT Variant OPTIONAL, -- If supplied, then for each simple elementRequest that does not -- include a variantRequest, the defaultVariantRequest applies. -- (defaultVariantRequest does not apply to a compositeRequest.) defaultTagType [4] IMPLICIT INTEGER OPTIONAL, -- If supplied, applies whenever 'tagType' (within 'tag' within TagPath) -- is omitted. elements [5] IMPLICIT SEQUENCE OF ElementRequest OPTIONAL} -- ElementRequest::= CHOICE{ simpleElement [1] IMPLICIT SimpleElement, compositeElement [2] IMPLICIT SEQUENCE{ elementList [1] CHOICE{ primitives [1] IMPLICIT SEQUENCE OF InternationalString, -- Origin may specify one or more element -- set names, each identifying a set of elements, -- and the composite element is the union. specs [2] IMPLICIT SEQUENCE OF SimpleElement}, deliveryTag [2] IMPLICIT TagPath, -- DeliveryTag tagPath for compositeElement may not -- include wildThing or wildPath. variantRequest [3] IMPLICIT Variant OPTIONAL}} SimpleElement ::= SEQUENCE{ path [1] IMPLICIT TagPath, variantRequest [2] IMPLICIT Variant OPTIONAL} TagPath ::= SEQUENCE OF CHOICE{ specificTag [1] IMPLICIT SEQUENCE{ tagType [1] IMPLICIT INTEGER OPTIONAL, -- If omitted, then 'defaultTagType' (above) applies, if supplied, and -- if not supplied, then default listed in schema applies. tagValue [2] StringOrNumeric, occurrence [3] Occurrences OPTIONAL -- default is "first occurrence" }, wildThing [2] Occurrences, -- Get Nth "thing" at this level, regardless of tag, for each N specified by -- "Occurrences" (which may be 'all' meaning match every element at this level). -- E.g., if "Occurrences" is 3, get third element regardless of its tag or the tag of -- the first two elements. wildPath [3] IMPLICIT NULL -- Match any tag, at this level or below, that is on a path for which next tag in this -- TagPath sequence occurs. WildPath may not be last member of the TagPath -- sequence. } -- Occurrences ::= CHOICE{ all [1] IMPLICIT NULL, last [2] IMPLICIT NULL, values [3] IMPLICIT SEQUENCE{ start [1] IMPLICIT INTEGER, -- if 'start' alone is included, then single occurrence is requested howMany [2] IMPLICIT INTEGER OPTIONAL -- For example, if 'start' is 5 and 'howMany' is 6, then request is for -- "occurrences 5 through 10." }} END yaz-5.28.0/src/oclc-ill-req-ext.asn0000644000175000017500000000214113250277530013707 00000000000000-- Couple of OCLC-specific extensions to their ILL-Request OCLCILLRequestExtension DEFINITIONS ::= --The object identifier is 1.0.10161.13.2 BEGIN IMPORTS ILL-String FROM ISO-10161-ILL-1; OCLCILLRequestExtension ::=SEQUENCE { clientDepartment [0] ILL-String OPTIONAL, paymentMethod [1] ILL-String OPTIONAL, uniformTitle [2] ILL-String OPTIONAL, dissertation [3] ILL-String OPTIONAL, issueNumber [4] ILL-String OPTIONAL, volume [5] ILL-String OPTIONAL, affiliations [6] ILL-String OPTIONAL, source [7] ILL-String OPTIONAL } -- If present, systemNo should contain an OCLC number. To encode the OCLC -- number, use the external object for system number defined by the Library and -- Archives Canada. -- The object identifier is 1.2.124.10161.2 SystemNo ::= SEQUENCE SIZE (1..10) OF SEQUENCE system System, recordNo RecordNo } System ::= ENUMERATED { dobis (1), candoc (2), oclc (3), rlin (4), utlas (5), other (6) } --Do not include the acronym for the system as part of the record number unless --"other (6)" is chosen. RecordNo ::= ILL-String (SIZE (1..50)) END yaz-5.28.0/src/xmlquery.c0000644000175000017500000006167313265142510012167 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file xmlquery.c \brief Query / XML conversions */ #if HAVE_CONFIG_H #include #endif #include #include #include #if YAZ_HAVE_XML2 #include #include #include #include #include #include #include static int check_diagnostic(const xmlNode *ptr, ODR odr, int *error_code, const char **addinfo) { if (ptr && ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "diagnostic")) { struct _xmlAttr *attr; const char *code_str = 0; const char *addinfo_str = 0; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "code") && attr->children && attr->children->type == XML_TEXT_NODE) code_str = (const char *) attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "addinfo") && attr->children && attr->children->type == XML_TEXT_NODE) addinfo_str = (const char *) attr->children->content; else { *error_code = 1; *addinfo = "bad attribute for diagnostic element"; return 1; } } if (!code_str) { *error_code = 1; *addinfo = "missing @code for diagnostic element"; return 1; } *error_code = atoi(code_str); if (addinfo_str) *addinfo = odr_strdup(odr, addinfo_str); return 1; } else return 0; } static void yaz_query2xml_attribute_element(const Z_AttributeElement *element, xmlNodePtr parent) { char formstr[30]; const char *setname = 0; char oid_name_str[OID_STR_MAX]; if (element->attributeSet) { setname = yaz_oid_to_string_buf(element->attributeSet, 0, oid_name_str); } if (element->which == Z_AttributeValue_numeric) { xmlNodePtr node = xmlNewChild(parent, 0, BAD_CAST "attr", 0); if (setname) xmlNewProp(node, BAD_CAST "set", BAD_CAST setname); sprintf(formstr, ODR_INT_PRINTF, *element->attributeType); xmlNewProp(node, BAD_CAST "type", BAD_CAST formstr); sprintf(formstr, ODR_INT_PRINTF, *element->value.numeric); xmlNewProp(node, BAD_CAST "value", BAD_CAST formstr); } else if (element->which == Z_AttributeValue_complex) { int i; for (i = 0; ivalue.complex->num_list; i++) { xmlNodePtr node = xmlNewChild(parent, 0, BAD_CAST "attr", 0); if (setname) xmlNewProp(node, BAD_CAST "set", BAD_CAST setname); sprintf(formstr, ODR_INT_PRINTF, *element->attributeType); xmlNewProp(node, BAD_CAST "type", BAD_CAST formstr); if (element->value.complex->list[i]->which == Z_StringOrNumeric_string) { xmlNewProp(node, BAD_CAST "value", BAD_CAST element->value.complex->list[i]->u.string); } else if (element->value.complex->list[i]->which == Z_StringOrNumeric_numeric) { sprintf(formstr, ODR_INT_PRINTF, *element->value.complex->list[i]->u.numeric); xmlNewProp(node, BAD_CAST "value", BAD_CAST formstr); } } } } static xmlNodePtr yaz_query2xml_term(const Z_Term *term, xmlNodePtr parent) { xmlNodePtr t = 0; xmlNodePtr node = xmlNewChild(parent, /* NS */ 0, BAD_CAST "term", 0); char formstr[20]; const char *type = 0; switch (term->which) { case Z_Term_general: type = "general"; t = xmlNewTextLen(BAD_CAST term->u.general->buf, term->u.general->len); break; case Z_Term_numeric: type = "numeric"; sprintf(formstr, ODR_INT_PRINTF, *term->u.numeric); t = xmlNewText(BAD_CAST formstr); break; case Z_Term_characterString: type = "string"; t = xmlNewText(BAD_CAST term->u.characterString); break; case Z_Term_oid: type = "oid"; break; case Z_Term_dateTime: type = "dateTime"; break; case Z_Term_external: type = "external"; break; case Z_Term_integerAndUnit: type ="integerAndUnit"; break; case Z_Term_null: type = "null"; break; default: break; } if (t) /* got a term node ? */ xmlAddChild(node, t); if (type) xmlNewProp(node, BAD_CAST "type", BAD_CAST type); return node; } static xmlNodePtr yaz_query2xml_apt(const Z_AttributesPlusTerm *zapt, xmlNodePtr parent) { xmlNodePtr node = xmlNewChild(parent, /* NS */ 0, BAD_CAST "apt", 0); int num_attributes = zapt->attributes->num_attributes; int i; for (i = 0; iattributes->attributes[i], node); yaz_query2xml_term(zapt->term, node); return node; } static void yaz_query2xml_operator(Z_Operator *op, xmlNodePtr node) { const char *type = 0; switch(op->which) { case Z_Operator_and: type = "and"; break; case Z_Operator_or: type = "or"; break; case Z_Operator_and_not: type = "not"; break; case Z_Operator_prox: type = "prox"; break; default: return; } xmlNewProp(node, BAD_CAST "type", BAD_CAST type); if (op->which == Z_Operator_prox) { char formstr[30]; if (op->u.prox->exclusion) { if (*op->u.prox->exclusion) xmlNewProp(node, BAD_CAST "exclusion", BAD_CAST "true"); else xmlNewProp(node, BAD_CAST "exclusion", BAD_CAST "false"); } sprintf(formstr, ODR_INT_PRINTF, *op->u.prox->distance); xmlNewProp(node, BAD_CAST "distance", BAD_CAST formstr); if (*op->u.prox->ordered) xmlNewProp(node, BAD_CAST "ordered", BAD_CAST "true"); else xmlNewProp(node, BAD_CAST "ordered", BAD_CAST "false"); sprintf(formstr, ODR_INT_PRINTF, *op->u.prox->relationType); xmlNewProp(node, BAD_CAST "relationType", BAD_CAST formstr); switch(op->u.prox->which) { case Z_ProximityOperator_known: sprintf(formstr, ODR_INT_PRINTF, *op->u.prox->u.known); xmlNewProp(node, BAD_CAST "knownProximityUnit", BAD_CAST formstr); break; case Z_ProximityOperator_private: default: xmlNewProp(node, BAD_CAST "privateProximityUnit", BAD_CAST "private"); break; } } } static xmlNodePtr yaz_query2xml_rpnstructure(const Z_RPNStructure *zs, xmlNodePtr parent) { if (zs->which == Z_RPNStructure_complex) { Z_Complex *zc = zs->u.complex; xmlNodePtr node = xmlNewChild(parent, /* NS */ 0, BAD_CAST "operator", 0); if (zc->roperator) yaz_query2xml_operator(zc->roperator, node); yaz_query2xml_rpnstructure(zc->s1, node); yaz_query2xml_rpnstructure(zc->s2, node); return node; } else if (zs->which == Z_RPNStructure_simple) { if (zs->u.simple->which == Z_Operand_APT) return yaz_query2xml_apt(zs->u.simple->u.attributesPlusTerm, parent); else if (zs->u.simple->which == Z_Operand_resultSetId) return xmlNewChild(parent, /* NS */ 0, BAD_CAST "rset", BAD_CAST zs->u.simple->u.resultSetId); } return 0; } static xmlNodePtr yaz_query2xml_rpn(const Z_RPNQuery *rpn, xmlNodePtr parent) { if (rpn->attributeSetId) { char oid_name_str[OID_STR_MAX]; const char *setname = yaz_oid_to_string_buf(rpn->attributeSetId, 0, oid_name_str); if (setname) xmlNewProp(parent, BAD_CAST "set", BAD_CAST setname); } return yaz_query2xml_rpnstructure(rpn->RPNStructure, parent); } static xmlNodePtr yaz_query2xml_ccl(const Odr_oct *ccl, xmlNodePtr node) { return 0; } static xmlNodePtr yaz_query2xml_z3958(const Odr_oct *ccl, xmlNodePtr node) { return 0; } static xmlNodePtr yaz_query2xml_cql(const char *cql, xmlNodePtr node) { return 0; } void yaz_rpnquery2xml(const Z_RPNQuery *rpn, xmlDocPtr *docp) { Z_Query query; query.which = Z_Query_type_1; query.u.type_1 = (Z_RPNQuery *) rpn; yaz_query2xml(&query, docp); } void yaz_query2xml(const Z_Query *q, xmlDocPtr *docp) { xmlNodePtr top_node, q_node = 0, child_node = 0; assert(q); assert(docp); top_node = xmlNewNode(0, BAD_CAST "query"); switch (q->which) { case Z_Query_type_1: case Z_Query_type_101: q_node = xmlNewChild(top_node, 0, BAD_CAST "rpn", 0); child_node = yaz_query2xml_rpn(q->u.type_1, q_node); break; case Z_Query_type_2: q_node = xmlNewChild(top_node, 0, BAD_CAST "ccl", 0); child_node = yaz_query2xml_ccl(q->u.type_2, q_node); break; case Z_Query_type_100: q_node = xmlNewChild(top_node, 0, BAD_CAST "z39.58", 0); child_node = yaz_query2xml_z3958(q->u.type_100, q_node); break; case Z_Query_type_104: if (q->u.type_104->which == Z_External_CQL) { q_node = xmlNewChild(top_node, 0, BAD_CAST "cql", 0); child_node = yaz_query2xml_cql(q->u.type_104->u.cql, q_node); } } if (child_node && q_node) { *docp = xmlNewDoc(BAD_CAST "1.0"); xmlDocSetRootElement(*docp, top_node); /* make it top node in doc */ } else { *docp = 0; xmlFreeNode(top_node); } } static bool_t *boolVal(ODR odr, const char *str) { if (*str == '\0' || strchr("0fF", *str)) return odr_booldup(odr, 0); return odr_booldup(odr, 1); } static Odr_int *intVal(ODR odr, const char *str) { return odr_intdup(odr, atoi(str)); } static void yaz_xml2query_operator(const xmlNode *ptr, Z_Operator **op, ODR odr, int *error_code, const char **addinfo) { const char *type = yaz_xml_get_prop((xmlNodePtr) ptr, "type"); if (!type) { *error_code = 1; *addinfo = "no operator type"; return; } *op = (Z_Operator*) odr_malloc(odr, sizeof(Z_Operator)); if (!strcmp(type, "and")) { (*op)->which = Z_Operator_and; (*op)->u.op_and = odr_nullval(); } else if (!strcmp(type, "or")) { (*op)->which = Z_Operator_or; (*op)->u.op_or = odr_nullval(); } else if (!strcmp(type, "not")) { (*op)->which = Z_Operator_and_not; (*op)->u.and_not = odr_nullval(); } else if (!strcmp(type, "prox")) { struct _xmlAttr *attr; Z_ProximityOperator *pop = (Z_ProximityOperator *) odr_malloc(odr, sizeof(*pop)); (*op)->which = Z_Operator_prox; (*op)->u.prox = pop; /* default values */ pop->exclusion = 0; pop->ordered = odr_booldup(odr, 1); pop->relationType = odr_intdup(odr, Z_ProximityOperator_Prox_lessThanOrEqual); pop->which = Z_ProximityOperator_known; pop->u.known = odr_intdup(odr, Z_ProxUnit_word); pop->distance = odr_intdup(odr, 1); for (attr = ptr->properties; attr; attr = attr->next) { const char *value = (const char *) attr->children->content; if (!xmlStrcmp(attr->name, BAD_CAST "type")) ; else if (!xmlStrcmp(attr->name, BAD_CAST "exclusion")) pop->exclusion = boolVal(odr, value); else if (!xmlStrcmp(attr->name, BAD_CAST "distance")) pop->distance = intVal(odr, value); else if (!xmlStrcmp(attr->name, BAD_CAST "ordered")) pop->ordered = boolVal(odr, value); else if (!xmlStrcmp(attr->name, BAD_CAST "relationType")) pop->relationType = intVal(odr, value); else if (!xmlStrcmp(attr->name, BAD_CAST "knownProximityUnit")) { pop->which = Z_ProximityOperator_known; pop->u.known = intVal(odr, value); } else if (!xmlStrcmp(attr->name, BAD_CAST "privateProximityUnit")) { pop->which = Z_ProximityOperator_private; pop->u.known = intVal(odr, value); } else { *error_code = 1; *addinfo = "bad proximity attribute"; break; } } } else { *error_code = 1; *addinfo = "bad operator type"; } } static void yaz_xml2query_attribute_element(const xmlNode *ptr, Z_AttributeElement **elem, ODR odr, int *error_code, const char **addinfo) { int i; xmlChar *set = 0; xmlChar *type = 0; xmlChar *value = 0; int num_values = 0; struct _xmlAttr *attr; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "set") && attr->children && attr->children->type == XML_TEXT_NODE) set = attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "type") && attr->children && attr->children->type == XML_TEXT_NODE) type = attr->children->content; else if (!xmlStrcmp(attr->name, BAD_CAST "value") && attr->children && attr->children->type == XML_TEXT_NODE) { value = attr->children->content; num_values++; } else { *error_code = 1; *addinfo = "bad attribute for attr content"; return; } } if (!type) { *error_code = 1; *addinfo = "missing type attribute for att content"; return; } if (!value) { *error_code = 1; *addinfo = "missing value attribute for att content"; return; } *elem = (Z_AttributeElement *) odr_malloc(odr, sizeof(**elem)); if (set) (*elem)->attributeSet = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_ATTSET, (const char *) set, odr); else (*elem)->attributeSet = 0; (*elem)->attributeType = intVal(odr, (const char *) type); /* looks like a number ? */ for (i = 0; value[i] && value[i] >= '0' && value[i] <= '9'; i++) ; if (num_values > 1 || value[i]) { /* multiple values or string, so turn to complex attribute */ (*elem)->which = Z_AttributeValue_complex; (*elem)->value.complex = (Z_ComplexAttribute*) odr_malloc(odr, sizeof(Z_ComplexAttribute)); (*elem)->value.complex->num_list = num_values; (*elem)->value.complex->list = (Z_StringOrNumeric **) odr_malloc(odr, sizeof(Z_StringOrNumeric*) * num_values); /* second pass over attr values */ i = 0; for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "value") && attr->children && attr->children->type == XML_TEXT_NODE) { const char *val = (const char *) attr->children->content; assert (i < num_values); (*elem)->value.complex->list[i] = (Z_StringOrNumeric *) odr_malloc(odr, sizeof(Z_StringOrNumeric)); (*elem)->value.complex->list[i]->which = Z_StringOrNumeric_string; (*elem)->value.complex->list[i]->u.string = odr_strdup(odr, val); i++; } } (*elem)->value.complex->num_semanticAction = 0; (*elem)->value.complex->semanticAction = 0; } else { /* good'ld numeric value */ (*elem)->which = Z_AttributeValue_numeric; (*elem)->value.numeric = intVal(odr, (const char *) value); } } static char *strVal(const xmlNode *ptr_cdata, ODR odr) { return nmem_text_node_cdata(ptr_cdata, odr_getmem(odr)); } static void yaz_xml2query_term(const xmlNode *ptr, Z_Term **term, ODR odr, int *error_code, const char **addinfo) { xmlChar *type = 0; struct _xmlAttr *attr; char *cdata = strVal(ptr->children, odr); for (attr = ptr->properties; attr; attr = attr->next) { if (!xmlStrcmp(attr->name, BAD_CAST "type") && attr->children && attr->children->type == XML_TEXT_NODE) type = attr->children->content; else { *error_code = 1; *addinfo = "bad attribute for attr content"; return; } } *term = (Z_Term *) odr_malloc(odr, sizeof(Z_Term)); if (!type || !xmlStrcmp(type, BAD_CAST "general")) { (*term)->which = Z_Term_general; (*term)->u.general = odr_create_Odr_oct(odr, cdata, strlen(cdata)); } else if (!xmlStrcmp(type, BAD_CAST "numeric")) { (*term)->which = Z_Term_numeric; (*term)->u.numeric = intVal(odr, cdata); } else if (!xmlStrcmp(type, BAD_CAST "string")) { (*term)->which = Z_Term_characterString; (*term)->u.characterString = cdata; } else if (!xmlStrcmp(type, BAD_CAST "oid")) { *error_code = 1; *addinfo = "unhandled term type: oid"; } else if (!xmlStrcmp(type, BAD_CAST "dateTime")) { *error_code = 1; *addinfo = "unhandled term type: dateTime"; } else if (!xmlStrcmp(type, BAD_CAST "integerAndUnit")) { *error_code = 1; *addinfo = "unhandled term type: integerAndUnit"; } else if (!xmlStrcmp(type, BAD_CAST "null")) { (*term)->which = Z_Term_null; (*term)->u.null = odr_nullval(); } else { *error_code = 1; *addinfo = "unhandled term type"; } } static void yaz_xml2query_apt(const xmlNode *ptr_apt, Z_AttributesPlusTerm **zapt, ODR odr, int *error_code, const char **addinfo) { const xmlNode *ptr = ptr_apt->children; int i, num_attr = 0; *zapt = (Z_AttributesPlusTerm *) odr_malloc(odr, sizeof(Z_AttributesPlusTerm)); /* deal with attributes */ (*zapt)->attributes = (Z_AttributeList*) odr_malloc(odr, sizeof(Z_AttributeList)); /* how many attributes? */ for (; ptr; ptr = ptr->next) if (ptr->type == XML_ELEMENT_NODE) { if (!xmlStrcmp(ptr->name, BAD_CAST "attr")) num_attr++; else break; } /* allocate and parse for real */ (*zapt)->attributes->num_attributes = num_attr; (*zapt)->attributes->attributes = (Z_AttributeElement **) odr_malloc(odr, sizeof(Z_AttributeElement*) * num_attr); i = 0; ptr = ptr_apt->children; for (; ptr; ptr = ptr->next) if (ptr->type == XML_ELEMENT_NODE) { if (!xmlStrcmp(ptr->name, BAD_CAST "attr")) { yaz_xml2query_attribute_element( ptr, &(*zapt)->attributes->attributes[i], odr, error_code, addinfo); i++; } else break; } if (check_diagnostic(ptr, odr, error_code, addinfo)) return; if (ptr && ptr->type == XML_ELEMENT_NODE) { if (!xmlStrcmp(ptr->name, BAD_CAST "term")) { /* deal with term */ yaz_xml2query_term(ptr, &(*zapt)->term, odr, error_code, addinfo); } else { *error_code = 1; *addinfo = "bad element in apt content"; } } else { *error_code = 1; *addinfo = "missing term node in apt content"; } } static void yaz_xml2query_rset(const xmlNode *ptr, Z_ResultSetId **rset, ODR odr, int *error_code, const char **addinfo) { if (ptr->children) { *rset = strVal(ptr->children, odr); } else { *error_code = 1; *addinfo = "missing rset content"; } } static void yaz_xml2query_rpnstructure(const xmlNode *ptr, Z_RPNStructure **zs, ODR odr, int *error_code, const char **addinfo) { while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!ptr || ptr->type != XML_ELEMENT_NODE) { *error_code = 1; *addinfo = "missing rpn operator, rset, apt node"; return; } if (check_diagnostic(ptr, odr, error_code, addinfo)) return; *zs = (Z_RPNStructure *) odr_malloc(odr, sizeof(Z_RPNStructure)); if (!xmlStrcmp(ptr->name, BAD_CAST "operator")) { Z_Complex *zc = (Z_Complex *) odr_malloc(odr, sizeof(Z_Complex)); (*zs)->which = Z_RPNStructure_complex; (*zs)->u.complex = zc; yaz_xml2query_operator(ptr, &zc->roperator, odr, error_code, addinfo); ptr = ptr->children; while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; yaz_xml2query_rpnstructure(ptr, &zc->s1, odr, error_code, addinfo); if (ptr) ptr = ptr->next; while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; yaz_xml2query_rpnstructure(ptr, &zc->s2, odr, error_code, addinfo); } else { Z_Operand *s = (Z_Operand *) odr_malloc(odr, sizeof(Z_Operand)); (*zs)->which = Z_RPNStructure_simple; (*zs)->u.simple = s; if (!xmlStrcmp(ptr->name, BAD_CAST "apt")) { s->which = Z_Operand_APT; yaz_xml2query_apt(ptr, &s->u.attributesPlusTerm, odr, error_code, addinfo); } else if (!xmlStrcmp(ptr->name, BAD_CAST "rset")) { s->which = Z_Operand_resultSetId; yaz_xml2query_rset(ptr, &s->u.resultSetId, odr, error_code, addinfo); } else { *error_code = 1; *addinfo = "bad element: expected binary, apt or rset"; } } } static void yaz_xml2query_rpn(const xmlNode *ptr, Z_RPNQuery **query, ODR odr, int *error_code, const char **addinfo) { const char *set = yaz_xml_get_prop((xmlNodePtr) ptr, "set"); *query = (Z_RPNQuery*) odr_malloc(odr, sizeof(Z_RPNQuery)); if (set) { (*query)->attributeSetId = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_ATTSET, set, odr); } else (*query)->attributeSetId = 0; yaz_xml2query_rpnstructure(ptr->children, &(*query)->RPNStructure, odr, error_code, addinfo); } static void yaz_xml2query_(const xmlNode *ptr, Z_Query **query, ODR odr, int *error_code, const char **addinfo) { if (check_diagnostic(ptr, odr, error_code, addinfo)) return; if (ptr && ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "query")) { const char *type; ptr = ptr->children; while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!ptr || ptr->type != XML_ELEMENT_NODE) { *error_code = 1; *addinfo = "missing query content"; return; } type = (const char *) ptr->name; *query = (Z_Query*) odr_malloc(odr, sizeof(Z_Query)); if (!type || !strcmp(type, "rpn")) { (*query)->which = Z_Query_type_1; yaz_xml2query_rpn(ptr, &(*query)->u.type_1, odr, error_code, addinfo); } else if (!strcmp(type, "ccl")) { *error_code = 1; *addinfo = "ccl not supported yet"; } else if (!strcmp(type, "z39.58")) { *error_code = 1; *addinfo = "z39.58 not supported yet"; } else if (!strcmp(type, "cql")) { *error_code = 1; *addinfo = "cql not supported yet"; } else { *error_code = 1; *addinfo = "unsupported query type"; } } else { *error_code = 1; *addinfo = "missing query element"; } } void yaz_xml2query(const xmlNode *xmlnodep, Z_Query **query, ODR odr, int *error_code, const char **addinfo) { yaz_xml2query_(xmlnodep, query, odr, error_code, addinfo); } /* YAZ_HAVE_XML2 */ #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/icu_transform.c0000644000175000017500000000730013265142510013137 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief ICU transforms - using utrans_-functions from ICU */ #if HAVE_CONFIG_H #include "config.h" #endif #if YAZ_HAVE_ICU #include #include #include #include #include #include #include #include struct icu_transform { char action; UParseError parse_error; UTransliterator *trans; }; struct icu_transform *icu_transform_clone(struct icu_transform *old) { struct icu_transform *transform = (struct icu_transform *) xmalloc(sizeof(struct icu_transform)); UErrorCode status = U_ZERO_ERROR; assert(old); transform->action = old->action; assert(old->trans); transform->trans = utrans_clone(old->trans, &status); assert(transform->trans); return transform; } struct icu_transform *icu_transform_create(const char *id, char action, const char *rules, UErrorCode *status) { struct icu_buf_utf16 *id16 = icu_buf_utf16_create(0); struct icu_buf_utf16 *rules16 = icu_buf_utf16_create(0); struct icu_transform *transform = (struct icu_transform *) xmalloc(sizeof(struct icu_transform)); transform->action = action; transform->trans = 0; if (id) icu_utf16_from_utf8_cstr(id16, id, status); if (rules) icu_utf16_from_utf8_cstr(rules16, rules, status); switch (transform->action) { case 'f': case 'F': transform->trans = utrans_openU(id16->utf16, id16->utf16_len, UTRANS_FORWARD, rules16->utf16, rules16->utf16_len, &transform->parse_error, status); break; case 'r': case 'R': transform->trans = utrans_openU(id16->utf16, id16->utf16_len, UTRANS_REVERSE , rules16->utf16, rules16->utf16_len, &transform->parse_error, status); break; default: *status = U_UNSUPPORTED_ERROR; break; } icu_buf_utf16_destroy(rules16); icu_buf_utf16_destroy(id16); if (U_SUCCESS(*status)) return transform; /* freeing if failed */ icu_transform_destroy(transform); return 0; } void icu_transform_destroy(struct icu_transform *transform) { if (transform) { if (transform->trans) utrans_close(transform->trans); xfree(transform); } } int icu_transform_trans(struct icu_transform *transform, struct icu_buf_utf16 *dest16, const struct icu_buf_utf16 *src16, UErrorCode *status) { if (!transform || !transform->trans || !src16 || !dest16) return 0; if (!src16->utf16_len) { /* guarding for empty source string */ icu_buf_utf16_clear(dest16); return 0; } if (!icu_buf_utf16_copy(dest16, src16)) return 0; utrans_transUChars(transform->trans, dest16->utf16, &(dest16->utf16_len), dest16->utf16_cap, 0, &(dest16->utf16_len), status); if (U_FAILURE(*status)) icu_buf_utf16_clear(dest16); return dest16->utf16_len; } #endif /* YAZ_HAVE_ICU */ /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/srwutil.c0000644000175000017500000012603213265142510012001 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file srwutil.c * \brief Implements SRW/SRU utilities. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include "sru-p.h" #define MAX_SRU_PARAMETERS 30 static Z_SRW_extra_arg **append_extra_arg(ODR odr, Z_SRW_extra_arg **l, const char *n, const char *v) { if (n && v && *v != '\0') { while (*l) l = &(*l)->next; *l = (Z_SRW_extra_arg *) odr_malloc(odr, sizeof(**l)); (*l)->name = odr_strdup(odr, n); (*l)->value = odr_strdup(odr, v); (*l)->next = 0; l = &(*l)->next; } return l; } static Z_SRW_extra_arg **append_extra_arg_int(ODR odr, Z_SRW_extra_arg **l, const char *n, Odr_int *v) { if (v) { char str[32]; sprintf(str, ODR_INT_PRINTF, *v); l = append_extra_arg(odr, l, n, str); } return l; } static char *yaz_decode_sru_dbpath_odr(ODR n, const char *uri, size_t len) { return odr_strdupn(n, uri, len); } void yaz_encode_sru_dbpath_buf(char *dst, const char *db) { assert(db); *dst = '/'; strcpy(dst+1, db); } char *yaz_encode_sru_dbpath_odr(ODR out, const char *db) { char *dst = odr_malloc(out, 3 * strlen(db) + 2); yaz_encode_sru_dbpath_buf(dst, db); return dst; } #if YAZ_HAVE_XML2 const char *yaz_element_attribute_value_get(xmlNodePtr ptr, const char *node_name, const char *attribute_name) { struct _xmlAttr *attr; // check if the node name matches if (strcmp((const char*) ptr->name, node_name)) return 0; // check if the attribute name and return the value for (attr = ptr->properties; attr; attr = attr->next) if (attr->children && attr->children->type == XML_TEXT_NODE) { if (!strcmp((const char *) attr->name, attribute_name)) return (const char *) attr->children->content; } return 0; } #endif int yaz_srw_check_content_type(Z_HTTP_Response *hres) { const char *content_type = z_HTTP_header_lookup(hres->headers, "Content-Type"); if (content_type) { if (!yaz_strcmp_del("text/xml", content_type, "; ")) return 1; if (!yaz_strcmp_del("application/xml", content_type, "; ")) return 1; if (!yaz_strcmp_del("application/sru+xml", content_type, "; ")) return 1; } return 0; } /** * Look for authentication tokens in HTTP Basic parameters or in x-username/x-password * parameters. Added by SH. */ static void yaz_srw_decodeauth(Z_SRW_PDU *sr, Z_HTTP_Request *hreq, char *username, char *password, ODR decode) { const char *basic = z_HTTP_header_lookup(hreq->headers, "Authorization"); if (username) sr->username = username; if (password) sr->password = password; if (basic) { int len; char out[256]; char ubuf[256] = "", pbuf[256] = "", *p; if (strncmp(basic, "Basic ", 6)) return; basic += 6; len = strlen(basic); if (!len || len > 256) return; yaz_base64decode(basic, out); /* Format of out should be username:password at this point */ strcpy(ubuf, out); if ((p = strchr(ubuf, ':'))) { *(p++) = '\0'; if (*p) strcpy(pbuf, p); } if (*ubuf) sr->username = odr_strdup(decode, ubuf); if (*pbuf) sr->password = odr_strdup(decode, pbuf); } } void yaz_mk_srw_diagnostic(ODR o, Z_SRW_diagnostic *d, const char *uri, const char *message, const char *details) { d->uri = odr_strdup(o, uri); if (message) d->message = odr_strdup(o, message); else d->message = 0; if (details) d->details = odr_strdup(o, details); else d->details = 0; } void yaz_mk_std_diagnostic(ODR o, Z_SRW_diagnostic *d, int code, const char *details) { char uri[40]; sprintf(uri, "info:srw/diagnostic/1/%d", code); yaz_mk_srw_diagnostic(o, d, uri, 0, details); } void yaz_add_srw_diagnostic_uri(ODR o, Z_SRW_diagnostic **d, int *num, const char *uri, const char *message, const char *details) { Z_SRW_diagnostic *d_new; d_new = (Z_SRW_diagnostic *) odr_malloc(o, (*num + 1)* sizeof(**d)); if (*num) memcpy(d_new, *d, *num *sizeof(**d)); *d = d_new; yaz_mk_srw_diagnostic(o, *d + *num, uri, message, details); (*num)++; } void yaz_add_srw_diagnostic(ODR o, Z_SRW_diagnostic **d, int *num, int code, const char *addinfo) { char uri[40]; sprintf(uri, "info:srw/diagnostic/1/%d", code); yaz_add_srw_diagnostic_uri(o, d, num, uri, 0, addinfo); } void yaz_add_sru_update_diagnostic(ODR o, Z_SRW_diagnostic **d, int *num, int code, const char *addinfo) { char uri[40]; sprintf(uri, "info:srw/diagnostic/12/%d", code); yaz_add_srw_diagnostic_uri(o, d, num, uri, 0, addinfo); } void yaz_mk_sru_surrogate(ODR o, Z_SRW_record *record, int pos, int code, const char *details) { const char *message = yaz_diag_srw_str(code); int len = 200; if (message) len += strlen(message); if (details) len += strlen(details); record->recordData_buf = (char *) odr_malloc(o, len); sprintf(record->recordData_buf, "\n" " info:srw/diagnostic/1/%d\n", code); if (details) sprintf(record->recordData_buf + strlen(record->recordData_buf), "
%s
\n", details); if (message) sprintf(record->recordData_buf + strlen(record->recordData_buf), " %s\n", message); sprintf(record->recordData_buf + strlen(record->recordData_buf), "
\n"); record->recordData_len = strlen(record->recordData_buf); record->recordPosition = odr_intdup(o, pos); record->recordSchema = "info:srw/schema/1/diagnostics-v1.1"; } static void grab_charset(ODR o, const char *content_type, char **charset) { if (charset) { const char *charset_p = 0; if (content_type && (charset_p = strstr(content_type, "; charset="))) { int j = 0, i = 0; int sep = 0; charset_p += 10; /* skip ; charset= */ if (charset_p[i] == '"' || charset_p[i] == '\'') sep = charset_p[i++]; *charset = odr_strdup(o, charset_p); while (charset_p[i] && charset_p[i] != sep) { if (!sep && strchr("; \n\r", charset_p[i])) break; if (charset_p[i] == '\\' && charset_p[i+1]) i++; (*charset)[j++] = charset_p[i++]; } (*charset)[j] = '\0'; } } } int yaz_srw_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, Z_SOAP **soap_package, ODR decode, char **charset) { if (!strcmp(hreq->method, "POST")) { const char *content_type = z_HTTP_header_lookup(hreq->headers, "Content-Type"); if (content_type && (!yaz_strcmp_del("text/xml", content_type, "; ") || !yaz_strcmp_del("application/soap+xml", content_type, "; ") || !yaz_strcmp_del("text/plain", content_type, "; "))) { char *db = "Default"; const char *p0 = hreq->path, *p1; int ret = -1; static Z_SOAP_Handler soap_handlers[5] = { #if YAZ_HAVE_XML2 { YAZ_XMLNS_SRU_v1_1, 0, (Z_SOAP_fun) yaz_srw_codec }, { YAZ_XMLNS_SRU_v1_0, 0, (Z_SOAP_fun) yaz_srw_codec }, { YAZ_XMLNS_UPDATE_v0_9, 0, (Z_SOAP_fun) yaz_ucp_codec }, { YAZ_XMLNS_SRU_v2_mask, 0, (Z_SOAP_fun) yaz_srw_codec }, #endif {0, 0, 0} }; if (*p0 == '/') p0++; p1 = strchr(p0, '?'); if (!p1) p1 = p0 + strlen(p0); if (p1 != p0) db = yaz_decode_sru_dbpath_odr(decode, p0, p1 - p0); ret = z_soap_codec(decode, soap_package, &hreq->content_buf, &hreq->content_len, soap_handlers); if (ret == 0 && (*soap_package)->which == Z_SOAP_generic) { *srw_pdu = (Z_SRW_PDU*) (*soap_package)->u.generic->p; yaz_srw_decodeauth(*srw_pdu, hreq, 0, 0, decode); /* last entry in handlers - SRU 2.0 - is turned into offset 0.. due to other pieces relying on it */ if ((*soap_package)->u.generic->no == 3) (*soap_package)->u.generic->no = 0; if ((*srw_pdu)->which == Z_SRW_searchRetrieve_request && (*srw_pdu)->u.request->database == 0) (*srw_pdu)->u.request->database = db; if ((*srw_pdu)->which == Z_SRW_explain_request && (*srw_pdu)->u.explain_request->database == 0) (*srw_pdu)->u.explain_request->database = db; if ((*srw_pdu)->which == Z_SRW_scan_request && (*srw_pdu)->u.scan_request->database == 0) (*srw_pdu)->u.scan_request->database = db; if ((*srw_pdu)->which == Z_SRW_update_request && (*srw_pdu)->u.update_request->database == 0) (*srw_pdu)->u.update_request->database = db; return 0; } return 1; } } return 2; } #if YAZ_HAVE_XML2 static int yaz_sru_decode_integer(ODR odr, const char *pname, const char *valstr, Odr_int **valp, Z_SRW_diagnostic **diag, int *num_diag, int min_value) { int ival; if (!valstr) return 0; if (sscanf(valstr, "%d", &ival) != 1) { yaz_add_srw_diagnostic(odr, diag, num_diag, YAZ_SRW_UNSUPP_PARAMETER_VALUE, pname); return 0; } if (min_value >= 0 && ival < min_value) { yaz_add_srw_diagnostic(odr, diag, num_diag, YAZ_SRW_UNSUPP_PARAMETER_VALUE, pname); return 0; } *valp = odr_intdup(odr, ival); return 1; } #endif /** http://www.loc.gov/standards/sru/companionSpecs/srw.html */ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, Z_SOAP **soap_package, ODR decode, char **charset, Z_SRW_diagnostic **diag, int *num_diag) { #if YAZ_HAVE_XML2 static Z_SOAP_Handler soap_handlers[2] = { {YAZ_XMLNS_SRU_v1_1, 0, (Z_SOAP_fun) yaz_srw_codec}, {0, 0, 0} }; #endif const char *content_type = z_HTTP_header_lookup(hreq->headers, "Content-Type"); /* SRU GET: ignore content type. SRU POST: we support "application/x-www-form-urlencoded"; not "multipart/form-data" . */ if (!strcmp(hreq->method, "GET") || (!strcmp(hreq->method, "POST") && content_type && !yaz_strcmp_del("application/x-www-form-urlencoded", content_type, "; "))) { char *db = "Default"; const char *p0 = hreq->path, *p1; #if YAZ_HAVE_XML2 const char *operation = 0; char *version = 0; char *query = 0; char *queryType = "cql"; char *username = 0; char *password = 0; char *sortKeys = 0; char *stylesheet = 0; char *scanClause = 0; char *recordXPath = 0; char *recordSchema = 0; char *recordXMLEscaping = 0; char *recordPacking = 0; char *maximumRecords = 0; char *startRecord = 0; char *maximumTerms = 0; char *responsePosition = 0; const char *facetLimit = 0; const char *facetStart = 0; const char *facetSort = 0; Z_SRW_extra_arg *extra_args = 0; #endif char **uri_name; char **uri_val; grab_charset(decode, content_type, charset); if (charset && *charset == 0 && !strcmp(hreq->method, "GET")) *charset = "UTF-8"; if (*p0 == '/') p0++; p1 = strchr(p0, '?'); if (!p1) p1 = p0 + strlen(p0); if (p1 != p0) db = yaz_decode_sru_dbpath_odr(decode, p0, p1 - p0); if (!strcmp(hreq->method, "POST") && hreq->content_buf) p1 = hreq->content_buf; yaz_uri_to_array(p1, decode, &uri_name, &uri_val); #if YAZ_HAVE_XML2 if (uri_name) { int i; for (i = 0; uri_name[i]; i++) { char *n = uri_name[i]; char *v = uri_val[i]; if (!strcmp(n, "query")) query = v; else if (!strcmp(n, "x-pquery")) { query = v; queryType = "pqf"; } else if (!strcmp(n, "queryType")) queryType = v; else if (!strcmp(n, "x-username")) username = v; else if (!strcmp(n, "x-password")) password = v; else if (!strcmp(n, "operation")) operation = v; else if (!strcmp(n, "stylesheet")) stylesheet = v; else if (!strcmp(n, "sortKeys")) sortKeys = v; else if (!strcmp(n, "recordXPath")) recordXPath = v; else if (!strcmp(n, "recordSchema")) recordSchema = v; else if (!strcmp(n, "recordPacking")) recordPacking = v; else if (!strcmp(n, "recordXMLEscaping")) recordXMLEscaping = v; else if (!strcmp(n, "version")) version = v; else if (!strcmp(n, "scanClause")) scanClause = v; else if (!strcmp(n, "x-pScanClause")) { scanClause = v; queryType = "pqf"; } else if (!strcmp(n, "maximumRecords")) maximumRecords = v; else if (!strcmp(n, "startRecord")) startRecord = v; else if (!strcmp(n, "maximumTerms")) maximumTerms = v; else if (!strcmp(n, "responsePosition")) responsePosition = v; else if (!strcmp(n, "facetLimit")) facetLimit = v; else if (!strcmp(n, "facetStart")) facetStart = v; else if (!strcmp(n, "facetSort")) facetSort = v; else if (!strcmp(n, "extraRequestData")) ; /* ignoring extraRequestData */ else if (n[0] == 'x' && n[1] == '-') { append_extra_arg(decode, &extra_args, n, v); } else { if (*num_diag < 10) yaz_add_srw_diagnostic(decode, diag, num_diag, YAZ_SRW_UNSUPP_PARAMETER, n); } } } if (!operation) { if (query) operation = "searchRetrieve"; else if (scanClause) operation = "scan"; else operation = "explain"; } version = yaz_negotiate_sru_version(version); if (!version) { /* negotiation failed. */ yaz_add_srw_diagnostic(decode, diag, num_diag, YAZ_SRW_UNSUPP_VERSION, "2.0"); version = "2.0"; } if (!operation) { if (uri_name) yaz_add_srw_diagnostic( decode, diag, num_diag, YAZ_SRW_MANDATORY_PARAMETER_NOT_SUPPLIED, "operation"); operation = "explain"; } if (strcmp(version, "2.0")) { if (recordXMLEscaping) { yaz_add_srw_diagnostic(decode, diag, num_diag, YAZ_SRW_UNSUPP_PARAMETER, "recordXMLEscaping"); } recordXMLEscaping = recordPacking; recordPacking = "packed"; } if (!recordXMLEscaping) recordXMLEscaping = "xml"; if (!strcmp(operation, "searchRetrieve")) { Z_SRW_PDU *sr = yaz_srw_get(decode, Z_SRW_searchRetrieve_request); sr->srw_version = version; sr->extra_args = extra_args; *srw_pdu = sr; yaz_srw_decodeauth(sr, hreq, username, password, decode); sr->u.request->queryType = queryType; sr->u.request->query = query; if (!query) yaz_add_srw_diagnostic( decode, diag, num_diag, YAZ_SRW_MANDATORY_PARAMETER_NOT_SUPPLIED, "query"); if (sortKeys) { sr->u.request->sort_type = Z_SRW_sort_type_sort; sr->u.request->sort.sortKeys = sortKeys; } sr->u.request->recordXPath = recordXPath; sr->u.request->recordSchema = recordSchema; sr->u.request->recordPacking = recordXMLEscaping; sr->u.request->packing = recordPacking; sr->u.request->stylesheet = stylesheet; yaz_sru_facet_request(decode , &sr->u.request->facetList, &facetLimit, &facetStart, &facetSort); yaz_sru_decode_integer(decode, "maximumRecords", maximumRecords, &sr->u.request->maximumRecords, diag, num_diag, 0); yaz_sru_decode_integer(decode, "startRecord", startRecord, &sr->u.request->startRecord, diag, num_diag, 1); sr->u.request->database = db; (*soap_package) = (Z_SOAP *) odr_malloc(decode, sizeof(**soap_package)); (*soap_package)->which = Z_SOAP_generic; (*soap_package)->u.generic = (Z_SOAP_Generic *) odr_malloc(decode, sizeof(*(*soap_package)->u.generic)); (*soap_package)->u.generic->p = sr; (*soap_package)->u.generic->ns = soap_handlers[0].ns; (*soap_package)->u.generic->no = 0; (*soap_package)->ns = "SRU"; return 0; } else if (!strcmp(operation, "explain")) { /* Transfer SRU explain parameters to common struct */ /* http://www.loc.gov/standards/sru/explain/ */ /* http://zeerex.z3950.org/overview/ */ Z_SRW_PDU *sr = yaz_srw_get(decode, Z_SRW_explain_request); sr->srw_version = version; sr->extra_args = extra_args; yaz_srw_decodeauth(sr, hreq, username, password, decode); *srw_pdu = sr; sr->u.explain_request->recordPacking = recordXMLEscaping; sr->u.explain_request->packing = recordPacking; sr->u.explain_request->database = db; sr->u.explain_request->stylesheet = stylesheet; (*soap_package) = (Z_SOAP *) odr_malloc(decode, sizeof(**soap_package)); (*soap_package)->which = Z_SOAP_generic; (*soap_package)->u.generic = (Z_SOAP_Generic *) odr_malloc(decode, sizeof(*(*soap_package)->u.generic)); (*soap_package)->u.generic->p = sr; (*soap_package)->u.generic->ns = soap_handlers[0].ns; (*soap_package)->u.generic->no = 0; (*soap_package)->ns = "SRU"; return 0; } else if (!strcmp(operation, "scan")) { /* Transfer SRU scan parameters to common struct */ /* http://www.loc.gov/standards/sru/companionSpecs/scan.html */ Z_SRW_PDU *sr = yaz_srw_get(decode, Z_SRW_scan_request); sr->srw_version = version; sr->extra_args = extra_args; *srw_pdu = sr; yaz_srw_decodeauth(sr, hreq, username, password, decode); sr->u.scan_request->queryType = queryType; sr->u.scan_request->scanClause = scanClause; if (!scanClause) yaz_add_srw_diagnostic( decode, diag, num_diag, YAZ_SRW_MANDATORY_PARAMETER_NOT_SUPPLIED, "scanClause"); sr->u.scan_request->database = db; yaz_sru_decode_integer(decode, "maximumTerms", maximumTerms, &sr->u.scan_request->maximumTerms, diag, num_diag, 0); yaz_sru_decode_integer(decode, "responsePosition", responsePosition, &sr->u.scan_request->responsePosition, diag, num_diag, 0); sr->u.scan_request->stylesheet = stylesheet; (*soap_package) = (Z_SOAP *) odr_malloc(decode, sizeof(**soap_package)); (*soap_package)->which = Z_SOAP_generic; (*soap_package)->u.generic = (Z_SOAP_Generic *) odr_malloc(decode, sizeof(*(*soap_package)->u.generic)); (*soap_package)->u.generic->p = sr; (*soap_package)->u.generic->ns = soap_handlers[0].ns; (*soap_package)->u.generic->no = 0; (*soap_package)->ns = "SRU"; return 0; } else { /* unsupported operation ... */ /* Act as if we received a explain request and throw diagnostic. */ Z_SRW_PDU *sr = yaz_srw_get(decode, Z_SRW_explain_request); sr->srw_version = version; *srw_pdu = sr; sr->u.explain_request->recordPacking = recordPacking; sr->u.explain_request->database = db; sr->u.explain_request->stylesheet = stylesheet; (*soap_package) = (Z_SOAP *) odr_malloc(decode, sizeof(**soap_package)); (*soap_package)->which = Z_SOAP_generic; (*soap_package)->u.generic = (Z_SOAP_Generic *) odr_malloc(decode, sizeof(*(*soap_package)->u.generic)); (*soap_package)->u.generic->p = sr; (*soap_package)->u.generic->ns = soap_handlers[0].ns; (*soap_package)->u.generic->no = 0; (*soap_package)->ns = "SRU"; yaz_add_srw_diagnostic(decode, diag, num_diag, YAZ_SRW_UNSUPP_OPERATION, operation); return 0; } #else return 1; #endif } return 2; } Z_SRW_extra_record *yaz_srw_get_extra_record(ODR o) { Z_SRW_extra_record *res = (Z_SRW_extra_record *) odr_malloc(o, sizeof(*res)); res->extraRecordData_buf = 0; res->extraRecordData_len = 0; res->recordIdentifier = 0; return res; } Z_SRW_record *yaz_srw_get_records(ODR o, int n) { Z_SRW_record *res = (Z_SRW_record *) odr_malloc(o, n * sizeof(*res)); int i; for (i = 0; isrw_version = odr_strdup(o, version); p->username = 0; p->password = 0; p->extra_args = 0; p->extraResponseData_buf = 0; p->extraResponseData_len = 0; return p; } Z_SRW_PDU *yaz_srw_get_core_v_2_0(ODR o) { return yaz_srw_get_core_ver(o, "2.0"); } Z_SRW_PDU *yaz_srw_get(ODR o, int which) { return yaz_srw_get_pdu(o, which, "2.0"); } /* http://docs.oasis-open.org/search-ws/searchRetrieve/v1.0/os/schemas/sruResponse.xsd */ Z_SRW_PDU *yaz_srw_get_pdu_e(ODR o, int which, Z_SRW_PDU *req) { int version2 = !req->srw_version || strcmp(req->srw_version, "2.") > 0; Z_SRW_PDU *res = yaz_srw_get_pdu(o, which, req->srw_version); Z_SRW_extra_arg **l = &res->extra_args, *ea; l = append_extra_arg(o, l, "version", req->srw_version); if (req->which == Z_SRW_searchRetrieve_request && which == Z_SRW_searchRetrieve_response) { if (req->u.request->queryType && strcmp(req->u.request->queryType, "cql")) l = append_extra_arg(o, l, "queryType", req->u.request->queryType); l = append_extra_arg(o, l, "query", req->u.request->query); l = append_extra_arg_int(o, l, "startRecord", req->u.request->startRecord); l = append_extra_arg_int(o, l, "maximumRecords", req->u.request->maximumRecords); if (version2) { l = append_extra_arg(o, l, "recordXMLEscaping", req->u.request->recordPacking); l = append_extra_arg(o, l, "recordPacking", req->u.request->packing); } else l = append_extra_arg(o, l, "recordPacking", req->u.request->recordPacking); l = append_extra_arg(o, l, "recordSchema", req->u.request->recordSchema); if (req->u.request->sort_type == Z_SRW_sort_type_sort) l = append_extra_arg(o, l, "sortKeys", req->u.request->sort.sortKeys); l = append_extra_arg(o, l, "stylesheet", req->u.request->stylesheet); } if (req->which == Z_SRW_explain_request && which == Z_SRW_explain_response) { if (version2) { l = append_extra_arg(o, l, "recordXMLEscaping", req->u.explain_request->recordPacking); l = append_extra_arg(o, l, "recordPacking", req->u.explain_request->packing); } else l = append_extra_arg(o, l, "recordPacking", req->u.explain_request->recordPacking); l = append_extra_arg(o, l, "stylesheet", req->u.explain_request->stylesheet); } for (ea = req->extra_args; ea; ea = ea->next) l = append_extra_arg(o, l, ea->name, ea->value); return res; } Z_SRW_PDU *yaz_srw_get_pdu(ODR o, int which, const char *version) { Z_SRW_PDU *sr = yaz_srw_get_core_ver(o, version); sr->which = which; switch (which) { case Z_SRW_searchRetrieve_request: sr->u.request = (Z_SRW_searchRetrieveRequest *) odr_malloc(o, sizeof(*sr->u.request)); sr->u.request->queryType = "cql"; sr->u.request->query = 0; sr->u.request->sort_type = Z_SRW_sort_type_none; sr->u.request->sort.none = 0; sr->u.request->startRecord = 0; sr->u.request->maximumRecords = 0; sr->u.request->recordSchema = 0; sr->u.request->recordPacking = 0; sr->u.request->packing = 0; sr->u.request->recordXPath = 0; sr->u.request->database = 0; sr->u.request->resultSetTTL = 0; sr->u.request->stylesheet = 0; sr->u.request->facetList = 0; break; case Z_SRW_searchRetrieve_response: sr->u.response = (Z_SRW_searchRetrieveResponse *) odr_malloc(o, sizeof(*sr->u.response)); sr->u.response->numberOfRecords = 0; sr->u.response->resultCountPrecision = 0; sr->u.response->resultSetId = 0; sr->u.response->resultSetIdleTime = 0; sr->u.response->records = 0; sr->u.response->num_records = 0; sr->u.response->diagnostics = 0; sr->u.response->num_diagnostics = 0; sr->u.response->nextRecordPosition = 0; sr->u.response->extra_records = 0; sr->u.response->facetList = 0; sr->u.response->suggestions = 0; break; case Z_SRW_explain_request: sr->u.explain_request = (Z_SRW_explainRequest *) odr_malloc(o, sizeof(*sr->u.explain_request)); sr->u.explain_request->recordPacking = 0; sr->u.explain_request->packing = 0; sr->u.explain_request->database = 0; sr->u.explain_request->stylesheet = 0; break; case Z_SRW_explain_response: sr->u.explain_response = (Z_SRW_explainResponse *) odr_malloc(o, sizeof(*sr->u.explain_response)); sr->u.explain_response->record.recordData_buf = 0; sr->u.explain_response->record.recordData_len = 0; sr->u.explain_response->record.recordSchema = 0; sr->u.explain_response->record.recordPosition = 0; sr->u.explain_response->record.recordPacking = Z_SRW_recordPacking_string; sr->u.explain_response->diagnostics = 0; sr->u.explain_response->num_diagnostics = 0; sr->u.explain_response->extra_record = 0; break; case Z_SRW_scan_request: sr->u.scan_request = (Z_SRW_scanRequest *) odr_malloc(o, sizeof(*sr->u.scan_request)); sr->u.scan_request->database = 0; sr->u.scan_request->stylesheet = 0; sr->u.scan_request->maximumTerms = 0; sr->u.scan_request->responsePosition = 0; sr->u.scan_request->queryType = "cql"; sr->u.scan_request->scanClause = 0; break; case Z_SRW_scan_response: sr->u.scan_response = (Z_SRW_scanResponse *) odr_malloc(o, sizeof(*sr->u.scan_response)); sr->u.scan_response->terms = 0; sr->u.scan_response->num_terms = 0; sr->u.scan_response->diagnostics = 0; sr->u.scan_response->num_diagnostics = 0; break; case Z_SRW_update_request: sr->u.update_request = (Z_SRW_updateRequest *) odr_malloc(o, sizeof(*sr->u.update_request)); sr->u.update_request->database = 0; sr->u.update_request->stylesheet = 0; sr->u.update_request->record = 0; sr->u.update_request->recordId = 0; sr->u.update_request->recordVersions = 0; sr->u.update_request->num_recordVersions = 0; sr->u.update_request->extra_record = 0; sr->u.update_request->extraRequestData_buf = 0; sr->u.update_request->extraRequestData_len = 0; sr->u.request->database = 0; break; case Z_SRW_update_response: sr->u.update_response = (Z_SRW_updateResponse *) odr_malloc(o, sizeof(*sr->u.update_response)); sr->u.update_response->operationStatus = 0; sr->u.update_response->recordId = 0; sr->u.update_response->recordVersions = 0; sr->u.update_response->num_recordVersions = 0; sr->u.update_response->record = 0; sr->u.update_response->extra_record = 0; sr->u.update_response->extraResponseData_buf = 0; sr->u.update_response->extraResponseData_len = 0; sr->u.update_response->diagnostics = 0; sr->u.update_response->num_diagnostics = 0; } return sr; } void yaz_add_name_value_int(ODR o, char **name, char **value, int *i, char *a_name, Odr_int *val) { if (val) { name[*i] = a_name; value[*i] = (char *) odr_malloc(o, 40); sprintf(value[*i], ODR_INT_PRINTF, *val); (*i)++; } } void yaz_add_name_value_str(ODR o, char **name, char **value, int *i, char *a_name, char *val) { if (val) { name[*i] = a_name; value[*i] = val; (*i)++; } } static int yaz_get_sru_parms(const Z_SRW_PDU *srw_pdu, ODR encode, char **name, char **value, int max_names) { int version2 = strcmp(srw_pdu->srw_version, "2.") > 0; int i = 0; char *queryType; yaz_add_name_value_str(encode, name, value, &i, "version", srw_pdu->srw_version); name[i] = "operation"; switch (srw_pdu->which) { case Z_SRW_searchRetrieve_request: value[i++] = "searchRetrieve"; queryType = srw_pdu->u.request->queryType; if (version2) { if (queryType && strcmp(queryType, "cql")) yaz_add_name_value_str(encode, name, value, &i, "queryType", queryType); yaz_add_name_value_str(encode, name, value, &i, "query", srw_pdu->u.request->query); } else { if (!strcmp(queryType, "cql")) { yaz_add_name_value_str(encode, name, value, &i, "query", srw_pdu->u.request->query); } else if (!strcmp(queryType, "pqf")) { yaz_add_name_value_str(encode, name, value, &i, "x-pquery", srw_pdu->u.request->query); } else if (!strcmp(queryType, "xcql")) { yaz_add_name_value_str(encode, name, value, &i, "x-cql", srw_pdu->u.request->query); } } switch (srw_pdu->u.request->sort_type) { case Z_SRW_sort_type_none: break; case Z_SRW_sort_type_sort: yaz_add_name_value_str(encode, name, value, &i, "sortKeys", srw_pdu->u.request->sort.sortKeys); break; } yaz_add_name_value_int(encode, name, value, &i, "startRecord", srw_pdu->u.request->startRecord); yaz_add_name_value_int(encode, name, value, &i, "maximumRecords", srw_pdu->u.request->maximumRecords); yaz_add_name_value_str(encode, name, value, &i, "recordSchema", srw_pdu->u.request->recordSchema); if (version2) { yaz_add_name_value_str(encode, name, value, &i, "recordXMLEscaping", srw_pdu->u.request->recordPacking); yaz_add_name_value_str(encode, name, value, &i, "recordPacking", srw_pdu->u.request->packing); } else yaz_add_name_value_str(encode, name, value, &i, "recordPacking", srw_pdu->u.request->recordPacking); yaz_add_name_value_str(encode, name, value, &i, "recordXPath", srw_pdu->u.request->recordXPath); yaz_add_name_value_str(encode, name, value, &i, "stylesheet", srw_pdu->u.request->stylesheet); yaz_add_name_value_int(encode, name, value, &i, "resultSetTTL", srw_pdu->u.request->resultSetTTL); { const char *facetLimit = 0; const char *facetStart = 0; const char *facetSort = 0; yaz_sru_facet_request(encode, &srw_pdu->u.request->facetList, &facetLimit, &facetStart, &facetSort); yaz_add_name_value_str(encode, name, value, &i, "facetLimit", (char *) facetLimit); yaz_add_name_value_str(encode, name, value, &i, "facetStart", (char *) facetStart); yaz_add_name_value_str(encode, name, value, &i, "facetSort", (char *) facetSort); } break; case Z_SRW_explain_request: value[i++] = "explain"; if (version2) { yaz_add_name_value_str(encode, name, value, &i, "recordXMLEscaping", srw_pdu->u.explain_request->recordPacking); yaz_add_name_value_str(encode, name, value, &i, "recordPacking", srw_pdu->u.explain_request->packing); } else yaz_add_name_value_str(encode, name, value, &i, "recordPacking", srw_pdu->u.explain_request->recordPacking); yaz_add_name_value_str(encode, name, value, &i, "stylesheet", srw_pdu->u.explain_request->stylesheet); break; case Z_SRW_scan_request: value[i++] = "scan"; queryType = srw_pdu->u.scan_request->queryType; if (version2) { if (queryType && strcmp(queryType, "cql")) yaz_add_name_value_str(encode, name, value, &i, "queryType", queryType); yaz_add_name_value_str(encode, name, value, &i, "scanClause", srw_pdu->u.scan_request->scanClause); } else { if (!queryType || !strcmp(queryType, "cql")) yaz_add_name_value_str(encode, name, value, &i, "scanClause", srw_pdu->u.scan_request->scanClause); else if (!strcmp(queryType, "pqf")) yaz_add_name_value_str(encode, name, value, &i, "x-pScanClause", srw_pdu->u.scan_request->scanClause); else if (!strcmp(queryType, "xcql")) yaz_add_name_value_str(encode, name, value, &i, "x-cqlScanClause", srw_pdu->u.scan_request->scanClause); } yaz_add_name_value_int(encode, name, value, &i, "responsePosition", srw_pdu->u.scan_request->responsePosition); yaz_add_name_value_int(encode, name, value, &i, "maximumTerms", srw_pdu->u.scan_request->maximumTerms); yaz_add_name_value_str(encode, name, value, &i, "stylesheet", srw_pdu->u.scan_request->stylesheet); break; case Z_SRW_update_request: value[i++] = "update"; break; default: return -1; } if (srw_pdu->extra_args) { Z_SRW_extra_arg *ea = srw_pdu->extra_args; for (; ea && i < max_names-1; ea = ea->next) { name[i] = ea->name; value[i] = ea->value; i++; } } name[i++] = 0; return 0; } int yaz_sru_get_encode(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, ODR encode, const char *charset) { char *name[MAX_SRU_PARAMETERS], *value[MAX_SRU_PARAMETERS]; /* definite upper limit for SRU params */ char *uri_args; char *path; char *cp; z_HTTP_header_add_basic_auth(encode, &hreq->headers, srw_pdu->username, srw_pdu->password); if (yaz_get_sru_parms(srw_pdu, encode, name, value, MAX_SRU_PARAMETERS)) return -1; yaz_array_to_uri(&uri_args, encode, name, value); hreq->method = "GET"; cp = strchr(hreq->path, '#'); if (cp) *cp = '\0'; path = (char *) odr_malloc(encode, strlen(hreq->path) + strlen(uri_args) + 4); sprintf(path, "%s%c%s", hreq->path, strchr(hreq->path, '?') ? '&' : '?', uri_args); hreq->path = path; z_HTTP_header_add_content_type(encode, &hreq->headers, "text/xml", charset); return 0; } int yaz_sru_post_encode(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, ODR encode, const char *charset) { char *name[MAX_SRU_PARAMETERS], *value[MAX_SRU_PARAMETERS]; /* definite upper limit for SRU params */ char *uri_args; z_HTTP_header_add_basic_auth(encode, &hreq->headers, srw_pdu->username, srw_pdu->password); if (yaz_get_sru_parms(srw_pdu, encode, name, value, MAX_SRU_PARAMETERS)) return -1; yaz_array_to_uri(&uri_args, encode, name, value); hreq->method = "POST"; hreq->content_buf = uri_args; hreq->content_len = strlen(uri_args); z_HTTP_header_add_content_type(encode, &hreq->headers, "application/x-www-form-urlencoded", charset); return 0; } int yaz_sru_soap_encode(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, ODR odr, const char *charset) { Z_SOAP_Handler handlers[3] = { #if YAZ_HAVE_XML2 {YAZ_XMLNS_SRU_v1_1, 0, (Z_SOAP_fun) yaz_srw_codec}, {YAZ_XMLNS_UPDATE_v0_9, 0, (Z_SOAP_fun) yaz_ucp_codec}, #endif {0, 0, 0} }; Z_SOAP *p = (Z_SOAP*) odr_malloc(odr, sizeof(*p)); z_HTTP_header_add_basic_auth(odr, &hreq->headers, srw_pdu->username, srw_pdu->password); z_HTTP_header_add_content_type(odr, &hreq->headers, "text/xml", 0 /* no charset in MIME */); z_HTTP_header_add(odr, &hreq->headers, "SOAPAction", "\"\""); p->which = Z_SOAP_generic; p->u.generic = (Z_SOAP_Generic *) odr_malloc(odr, sizeof(*p->u.generic)); p->u.generic->no = 0; p->u.generic->ns = 0; p->u.generic->p = srw_pdu; p->ns = "http://schemas.xmlsoap.org/soap/envelope/"; #if YAZ_HAVE_XML2 if (srw_pdu->which == Z_SRW_update_request || srw_pdu->which == Z_SRW_update_response) p->u.generic->no = 1; /* second handler */ #endif return z_soap_codec_enc(odr, &p, &hreq->content_buf, &hreq->content_len, handlers, charset); } Z_SRW_recordVersion *yaz_srw_get_record_versions(ODR odr, int num) { Z_SRW_recordVersion *ver = (Z_SRW_recordVersion *) odr_malloc(odr,num * sizeof(*ver)); int i; for (i = 0; i < num; ++i) { ver[i].versionType = 0; ver[i].versionValue = 0; } return ver; } const char *yaz_srw_pack_to_str(int pack) { switch(pack) { case Z_SRW_recordPacking_string: return "string"; case Z_SRW_recordPacking_XML: return "xml"; case Z_SRW_recordPacking_URL: return "url"; } return 0; } int yaz_srw_str_to_pack(const char *str) { if (!yaz_matchstr(str, "string")) return Z_SRW_recordPacking_string; if (!yaz_matchstr(str, "xml")) return Z_SRW_recordPacking_XML; if (!yaz_matchstr(str, "url")) return Z_SRW_recordPacking_URL; return -1; } void yaz_encode_sru_extra(Z_SRW_PDU *sr, ODR odr, const char *extra_args) { if (extra_args) { char **name; char **val; Z_SRW_extra_arg **ea = &sr->extra_args; yaz_uri_to_array(extra_args, odr, &name, &val); while (*name) { ea = append_extra_arg(odr, ea, *name, *val); val++; name++; } } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_oct.c0000644000175000017500000001244213265142510011720 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_oct.c * \brief Implements ODR OCTET codec */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" /* * Top level octet string en/decoder. * Returns 1 on success, 0 on error. */ int odr_octetstring(ODR o, Odr_oct **p, int opt, const char *name) { int res, cons = 0; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_OCTETSTRING; } res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name); if (res < 0) return 0; if (!res) return odr_missing(o, opt, name); if (o->direction == ODR_PRINT) { odr_prname(o, name); odr_printf(o, "OCTETSTRING(len=%d) ", (*p)->len); o->op->stream_write(o, o->op->print, ODR_OCTETSTRING, (char*) (*p)->buf, (*p)->len); odr_printf(o, "\n"); return 1; } if (o->direction == ODR_DECODE) { *p = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)); (*p)->len = 0; (*p)->buf = 0; } if (ber_octetstring(o, *p, cons)) return 1; odr_seterror(o, OOTHER, 43); return 0; } /* * Friendlier interface to octetstring. */ int odr_cstring(ODR o, char **p, int opt, const char *name) { int cons = 0, res; Odr_oct *t; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_OCTETSTRING; } res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name); if (res < 0) return 0; if (!res) return odr_missing(o, opt, name); if (o->direction == ODR_PRINT) { odr_prname(o, name); odr_printf(o, "'%s'\n", *p); return 1; } t = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)); /* wrapper for octstring */ if (o->direction == ODR_ENCODE) { t->buf = *p; t->len = strlen(*p); } else { t->len = 0; t->buf = 0; } if (!ber_octetstring(o, t, cons)) return 0; if (o->direction == ODR_DECODE) { *p = (char *) t->buf; *(*p + t->len) = '\0'; /* ber_octs reserves space for this */ } return 1; } /* * iconv interface to octetstring. */ int odr_iconv_string(ODR o, char **p, int opt, const char *name) { int cons = 0, res; Odr_oct *t; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_OCTETSTRING; } res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name); if (res < 0) return 0; if (!res) return odr_missing(o, opt, name); if (o->direction == ODR_PRINT) { odr_prname(o, name); odr_printf(o, "'%s'\n", *p); return 1; } t = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)); /* wrapper for octstring */ if (o->direction == ODR_ENCODE) { t->buf = 0; if (o->op->iconv_handle != 0) { size_t inleft = strlen(*p); char *inbuf = *p; size_t outleft = 4 * inleft + 2; char *outbuf = (char *) odr_malloc (o, outleft); size_t ret; t->buf = outbuf; ret = yaz_iconv(o->op->iconv_handle, &inbuf, &inleft, &outbuf, &outleft); if (ret == (size_t)(-1)) { odr_seterror(o, ODATA, 44); return 0; } ret = yaz_iconv(o->op->iconv_handle, 0, 0, &outbuf, &outleft); if (ret == (size_t)(-1)) { odr_seterror(o, ODATA, 44); return 0; } t->len = outbuf - (char*) t->buf; } if (!t->buf) { t->buf = *p; t->len = strlen(*p); } } else { t->len = 0; t->buf = 0; } if (!ber_octetstring(o, t, cons)) return 0; if (o->direction == ODR_DECODE) { *p = 0; if (o->op->iconv_handle != 0) { size_t inleft = t->len; char *inbuf = (char *) t->buf; size_t outleft = 4 * inleft + 2; char *outbuf = (char *) odr_malloc (o, outleft); size_t ret; *p = outbuf; ret = yaz_iconv (o->op->iconv_handle, &inbuf, &inleft, &outbuf, &outleft); if (ret == (size_t)(-1)) { odr_seterror(o, ODATA, 45); return 0; } ret = yaz_iconv(o->op->iconv_handle, 0, 0, &outbuf, &outleft); if (ret == (size_t)(-1)) { odr_seterror(o, ODATA, 45); return 0; } inleft = outbuf - (char*) *p; (*p)[inleft] = '\0'; /* null terminate it */ } if (!*p) { *p = (char *) t->buf; *(*p + t->len) = '\0'; /* ber_octs reserves space for this */ } } return 1; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ber_any.c0000644000175000017500000000605513265142510011711 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ber_any.c * \brief Implements BER ANY encoding and decoding. * * This source file implements BER encoding and decoding of * the ANY type. */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" int ber_any(ODR o, Odr_any **p) { int res; switch (o->direction) { case ODR_DECODE: if ((res = completeBER(o->op->bp, odr_max(o))) <= 0) /* FIX THIS */ { odr_seterror(o, OPROTO, 2); return 0; } (*p)->buf = (char *)odr_malloc(o, res); memcpy((*p)->buf, o->op->bp, res); (*p)->len = res; o->op->bp += res; return 1; case ODR_ENCODE: if (odr_write(o, (*p)->buf, (*p)->len) < 0) return 0; return 1; default: odr_seterror(o, OOTHER, 3); return 0; } } #define BER_ANY_DEBUG 0 int completeBER_n(const char *buf, int len, int level) { int res, ll, zclass, tag, cons; const char *b = buf; if (level > 1000) { #if BER_ANY_DEBUG yaz_log(YLOG_LOG, "completeBER lev=%d len=%d", level, len); #endif return -2; } if (len < 2) return 0; if (!buf[0] && !buf[1]) return -2; if ((res = ber_dectag(b, &zclass, &tag, &cons, len)) <= 0) return 0; b += res; len -= res; assert (len >= 0); res = ber_declen(b, &ll, len); if (res == -2) { #if BER_ANY_DEBUG yaz_log(YLOG_LOG, "<<<<<<<<< return1 lev=%d res=%d", level, res); #endif return -1; /* error */ } if (res == -1) { #if BER_ANY_DEBUG yaz_log(YLOG_LOG, "<<<<<<<<< return2 lev=%d res=%d", level, res); #endif return 0; /* incomplete length */ } b += res; len -= res; if (ll >= 0) { /* definite length */ if (len < ll) { #if BER_ANY_DEBUG yaz_log(YLOG_LOG, "<<<<<<<<< return5 lev=%d len=%d ll=%d", level, len, ll); #endif return 0; } return ll + (b-buf); } /* indefinite length */ if (!cons) { /* if primitive, it's an error */ #if BER_ANY_DEBUG yaz_log(YLOG_LOG, "<<<<<<<<< return6 lev=%d ll=%d len=%d res=%d", level, ll, len, res); #endif return -1; /* error */ } /* constructed - cycle through children */ while (len >= 2) { if (b[0] == 0 && b[1] == 0) break; res = completeBER_n(b, len, level+1); if (res <= 0) return res; b += res; len -= res; } if (len < 2) return 0; return (b - buf) + 2; } int completeBER(const char *buf, int len) { int res = completeBER_n(buf, len, 0); #if BER_ANY_DEBUG yaz_log(YLOG_LOG, "completeBER len=%d res=%d", len, res); #endif if (res < 0) return len; return res; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/cqlstrer.c0000644000175000017500000000101013570010616012113 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file cqlstrer.c * \brief Implements CQL error code map to description string. */ #if HAVE_CONFIG_H #include #endif #include #include const char *cql_strerror(int code) { return yaz_diag_to_str(code); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/proxunit.c0000644000175000017500000000200713265142510012153 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file proxunit.c * \brief ProximityUnit map to/from string */ #if HAVE_CONFIG_H #include #endif #include #include #include /* Hand-written, but in reality depends on z3950v3.asn */ static const char *units[] = { 0, "character", "word", "sentence", "paragraph", "section", "chapter", "document", "element", "subelement", "elementType", "byte" }; const char *z_ProxUnit_to_str(int u) { if (u >= Z_ProxUnit_character && u <= Z_ProxUnit_byte) return units[u]; return 0; } int z_str_to_ProxUnit(const char *str) { int i; for (i = 1; i <= Z_ProxUnit_byte; i++) if (!strcmp(units[i], str)) return i; return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/oid_db.c0000644000175000017500000001116013265142510011503 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file oid_db.c * \brief OID Database */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include struct yaz_oid_db { struct yaz_oid_entry *entries; struct yaz_oid_db *next; int xmalloced; }; struct yaz_oid_db standard_db_l = { 0, 0, 0 }; yaz_oid_db_t standard_db = &standard_db_l; yaz_oid_db_t yaz_oid_std(void) { return standard_db; } #define get_entries(db) (db->xmalloced==0 ? yaz_oid_standard_entries : db->entries) const Odr_oid *yaz_string_to_oid(yaz_oid_db_t oid_db, oid_class oclass, const char *name) { for (; oid_db; oid_db = oid_db->next) { struct yaz_oid_entry *e; if (oclass != CLASS_GENERAL) { for (e = get_entries(oid_db); e->name; e++) { if (!yaz_matchstr(e->name, name) && oclass == e->oclass) return e->oid; } } for (e = get_entries(oid_db); e->name; e++) { if (!yaz_matchstr(e->name, name)) return e->oid; } } return 0; } Odr_oid *yaz_string_to_oid_nmem(yaz_oid_db_t oid_list, oid_class oclass, const char *name, NMEM nmem) { const Odr_oid *oid = yaz_string_to_oid(oid_list, oclass, name); if (oid) return odr_oiddup_nmem(nmem, oid); return odr_getoidbystr_nmem(nmem, name); } Odr_oid *yaz_string_to_oid_odr(yaz_oid_db_t oid_list, oid_class oclass, const char *name, ODR o) { return yaz_string_to_oid_nmem(oid_list, oclass, name, odr_getmem(o)); } const char *yaz_oid_to_string(yaz_oid_db_t oid_db, const Odr_oid *oid, oid_class *oclass) { if (!oid) return 0; for (; oid_db; oid_db = oid_db->next) { struct yaz_oid_entry *e = get_entries(oid_db); for (; e->name; e++) { if (!oid_oidcmp(e->oid, oid)) { if (oclass) *oclass = e->oclass; return e->name; } } } return 0; } const char *yaz_oid_to_string_buf(const Odr_oid *oid, oid_class *oclass, char *buf) { const char *p = yaz_oid_to_string(yaz_oid_std(), oid, oclass); if (p) return p; if (oclass) *oclass = CLASS_GENERAL; return oid_oid_to_dotstring(oid, buf); } char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oid_buf) { const Odr_oid *oid = yaz_string_to_oid(yaz_oid_std(), oclass, name); if (oid) return oid_oid_to_dotstring(oid, oid_buf); return 0; } int yaz_oid_is_iso2709(const Odr_oid *oid) { if (oid_oidlen(oid) == 6 && oid[0] == 1 && oid[1] == 2 && oid[2] == 840 && oid[3] == 10003 && oid[4] == 5 && oid[5] <= 29 && oid[5] != 16) return 1; return 0; } int yaz_oid_add(yaz_oid_db_t oid_db, oid_class oclass, const char *name, const Odr_oid *new_oid) { const Odr_oid *oid = yaz_string_to_oid(oid_db, oclass, name); if (!oid) { struct yaz_oid_entry *ent; Odr_oid *alloc_oid; while (oid_db->next) oid_db = oid_db->next; oid_db->next = (struct yaz_oid_db *) xmalloc(sizeof(*oid_db->next)); oid_db = oid_db->next; oid_db->next = 0; oid_db->xmalloced = 1; oid_db->entries = ent = (struct yaz_oid_entry *) xmalloc(2 * sizeof(*ent)); alloc_oid = (Odr_oid *) xmalloc(sizeof(*alloc_oid) * (oid_oidlen(new_oid)+1)); oid_oidcpy(alloc_oid, new_oid); ent[0].oid = alloc_oid; ent[0].name = xstrdup(name); ent[0].oclass = oclass; ent[1].oid = 0; ent[1].name = 0; ent[1].oclass = CLASS_NOP; return 0; } return -1; } yaz_oid_db_t yaz_oid_db_new(void) { yaz_oid_db_t p = (yaz_oid_db_t) xmalloc(sizeof(*p)); p->entries = 0; p->next = 0; p->xmalloced = 1; return p; } void yaz_oid_db_destroy(yaz_oid_db_t oid_db) { while (oid_db) { yaz_oid_db_t p = oid_db; oid_db = oid_db->next; if (p->xmalloced) { struct yaz_oid_entry *e = p->entries; for (; e->name; e++) xfree (e->name); xfree(p->entries); xfree(p); } } } void yaz_oid_trav(yaz_oid_db_t oid_db, void (*func)(const Odr_oid *oid, oid_class oclass, const char *name, void *client_data), void *client_data) { for (; oid_db; oid_db = oid_db->next) { struct yaz_oid_entry *e = get_entries(oid_db); for (; e->name; e++) func(e->oid, e->oclass, e->name, client_data); } } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/yaz-ccl.c0000644000175000017500000000217113265142510011627 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file yaz-ccl.c * \brief Implements CCL node tree to RPN converson. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include Z_RPNQuery *ccl_rpn_query (ODR o, struct ccl_rpn_node *p) { YAZ_PQF_Parser parser = yaz_pqf_create(); WRBUF wr = wrbuf_alloc(); Z_RPNQuery *q; ccl_pquery(wr, p); q = yaz_pqf_parse(parser, o, wrbuf_cstr(wr)); wrbuf_destroy(wr); yaz_pqf_destroy(parser); return q; } Z_AttributesPlusTerm *ccl_scan_query (ODR o, struct ccl_rpn_node *p) { YAZ_PQF_Parser parser = yaz_pqf_create(); WRBUF wr = wrbuf_alloc(); Z_AttributesPlusTerm *q; Odr_oid *setp; ccl_pquery(wr, p); q = yaz_pqf_scan(parser, o, &setp, wrbuf_cstr(wr)); wrbuf_destroy(wr); yaz_pqf_destroy(parser); return q; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zes-update.c0000644000175000017500000001614213273126163012356 00000000000000/** \file zes-update.c \brief ASN.1 Module ESFormat-Update Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_IUUpdateEsRequest(ODR o, Z_IUUpdateEsRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_IUOriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT, 1, 0, "toKeep") && odr_explicit_tag(o, z_IUOriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT, 2, 0, "notToKeep") && odr_sequence_end(o); } int z_IUUpdateTaskPackage(ODR o, Z_IUUpdateTaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_IUOriginPartToKeep, &(*p)->originPart, ODR_CONTEXT, 1, 0, "originPart") && odr_explicit_tag(o, z_IUTargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 0, "targetPart") && odr_sequence_end(o); } int z_IUUpdate(ODR o, Z_IUUpdate **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUUpdate_esRequest, (Odr_fun) z_IUUpdateEsRequest, "esRequest"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUUpdate_taskPackage, (Odr_fun) z_IUUpdateTaskPackage, "taskPackage"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_IUOriginPartToKeep(ODR o, Z_IUOriginPartToKeep **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->action, ODR_CONTEXT, 1, 0, "action") && odr_implicit_tag(o, z_InternationalString, &(*p)->databaseName, ODR_CONTEXT, 2, 0, "databaseName") && odr_implicit_tag(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 3, 1, "schema") && odr_implicit_tag(o, z_InternationalString, &(*p)->elementSetName, ODR_CONTEXT, 4, 1, "elementSetName") && odr_implicit_tag(o, z_External, &(*p)->actionQualifier, ODR_CONTEXT, 5, 1, "actionQualifier") && odr_sequence_end(o); } int z_IUOriginPartNotToKeep(ODR o, Z_IUOriginPartNotToKeep **p, int opt, const char *name) { return z_IUSuppliedRecords (o, p, opt, name); } int z_IUTargetPart(ODR o, Z_IUTargetPart **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->updateStatus, ODR_CONTEXT, 1, 0, "updateStatus") && odr_implicit_settag(o, ODR_CONTEXT, 2) && (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->globalDiagnostics, &(*p)->num_globalDiagnostics, "globalDiagnostics") || odr_ok(o)) && odr_implicit_settag(o, ODR_CONTEXT, 3) && odr_sequence_of(o, (Odr_fun) z_IUTaskPackageRecordStructure, &(*p)->taskPackageRecords, &(*p)->num_taskPackageRecords, "taskPackageRecords") && odr_sequence_end(o); } int z_IUSuppliedRecordsId(ODR o, Z_IUSuppliedRecordsId **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUSuppliedRecordsId_timeStamp, (Odr_fun) odr_generalizedtime, "timeStamp"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUSuppliedRecordsId_versionNumber, (Odr_fun) z_InternationalString, "versionNumber"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IUSuppliedRecordsId_previousVersion, (Odr_fun) z_External, "previousVersion"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_IUSuppliedRecords_elem(ODR o, Z_IUSuppliedRecords_elem **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUSuppliedRecords_elem_number, (Odr_fun) odr_integer, "number"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUSuppliedRecords_elem_string, (Odr_fun) z_InternationalString, "string"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IUSuppliedRecords_elem_opaque, (Odr_fun) odr_octetstring, "opaque"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "recordId") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_explicit_tag(o, z_IUSuppliedRecordsId, &(*p)->supplementalId, ODR_CONTEXT, 2, 1, "supplementalId") && odr_implicit_tag(o, z_IUCorrelationInfo, &(*p)->correlationInfo, ODR_CONTEXT, 3, 1, "correlationInfo") && odr_implicit_tag(o, z_External, &(*p)->record, ODR_CONTEXT, 4, 0, "record") && odr_sequence_end(o); } int z_IUSuppliedRecords(ODR o, Z_IUSuppliedRecords **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_IUSuppliedRecords_elem, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_IUCorrelationInfo(ODR o, Z_IUCorrelationInfo **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->note, ODR_CONTEXT, 1, 1, "note") && odr_implicit_tag(o, odr_integer, &(*p)->id, ODR_CONTEXT, 2, 1, "id") && odr_sequence_end(o); } int z_IUTaskPackageRecordStructureSurrogateDiagnostics(ODR o, Z_IUTaskPackageRecordStructureSurrogateDiagnostics **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_IUTaskPackageRecordStructure(ODR o, Z_IUTaskPackageRecordStructure **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUTaskPackageRecordStructure_record, (Odr_fun) z_External, "record"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUTaskPackageRecordStructure_surrogateDiagnostics, (Odr_fun) z_IUTaskPackageRecordStructureSurrogateDiagnostics, "surrogateDiagnostics"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return ((odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "recordOrSurDiag") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o)) || odr_ok(o)) && odr_implicit_tag(o, z_IUCorrelationInfo, &(*p)->correlationInfo, ODR_CONTEXT, 2, 1, "correlationInfo") && odr_implicit_tag(o, odr_integer, &(*p)->recordStatus, ODR_CONTEXT, 3, 0, "recordStatus") && odr_implicit_settag(o, ODR_CONTEXT, 4) && (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->supplementalDiagnostics, &(*p)->num_supplementalDiagnostics, "supplementalDiagnostics") || odr_ok(o)) && odr_sequence_end(o); } yaz-5.28.0/src/ill.tcl0000644000175000017500000000277213265142510011414 00000000000000# Config File for ILL # ---------------------------------------------------------- # Prefix Specifications # # 1: C function prefix # 2: C type prefix # 3: C preprocessor prefix # Default prefix set default-prefix {ill_ ILL_ ILL_} # ---------------------------------------------------------- set m ISO-10161-ILL-1 # Filename set filename($m) ill-core # Header initialization code set init($m,h) " " # Header body code set body($m,h) " #ifdef __cplusplus extern \"C\" \{ #endif #ifdef __cplusplus \} #endif " # C body code set body($m,c) " " # Some mappings - that map ill_ILL_ to ill_ set map($m,ILL-APDU) APDU set map($m,ILL-Request) Request set map($m,ILL-Answer) Answer set map($m,ILL-String) String set map($m,ILL-APDU-Type) APDU_Type set map($m,ILL-Service-Type) Service_Type set map($m,Service_Date_Time_0) Service_Date_this set map($m,Service_Date_Time_1) Service_Date_original set map($m,Overdue_0) Overdue_ExtensionS set membermap($m,APDU,ILL-Request) {APDU_ILL_Request illRequest} set membermap($m,APDU,ILL-Answer) {APDU_ILL_Answer illAnswer} # ---------------------------------------------------------- set m OCLCILLRequestExtension # Filename set filename($m) oclc-ill-req-ext # ---------------------------------------------------------- set m Z39.50-extendedService-ItemOrder-ItemRequest-1 # Filename set filename($m) item-req # Mappings of a few basic types proc asnBasicPrintableString {} { return {odr_visiblestring char} } proc asnBasicANY {} { return {odr_any Odr_any} } yaz-5.28.0/src/advancegreek.c0000644000175000017500000002430513265142510012707 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief Advance Greek encoding and decoding */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "iconv-p.h" static unsigned long read_advancegreek(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { unsigned long x = 0; int shift = 0; int tonos = 0; int dialitika = 0; *no_read = 0; while (inbytesleft > 0) { if (*inp == 0x9d) { tonos = 1; } else if (*inp == 0x9e) { dialitika = 1; } else if (*inp == 0x9f) { shift = 1; } else break; inp++; --inbytesleft; (*no_read)++; } if (inbytesleft == 0) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); /* incomplete input */ *no_read = 0; return 0; } switch (*inp) { case 0x81: if (shift) if (tonos) x = 0x0386; else x = 0x0391; else if (tonos) x = 0x03ac; else x = 0x03b1; break; case 0x82: if (shift) x = 0x0392; else x = 0x03b2; break; case 0x83: if (shift) x = 0x0393; else x = 0x03b3; break; case 0x84: if (shift) x = 0x0394; else x = 0x03b4; break; case 0x85: if (shift) if (tonos) x = 0x0388; else x = 0x0395; else if (tonos) x = 0x03ad; else x = 0x03b5; break; case 0x86: if (shift) x = 0x0396; else x = 0x03b6; break; case 0x87: if (shift) if (tonos) x = 0x0389; else x = 0x0397; else if (tonos) x = 0x03ae; else x = 0x03b7; break; case 0x88: if (shift) x = 0x0398; else x = 0x03b8; break; case 0x89: if (shift) if (tonos) x = 0x038a; else if (dialitika) x = 0x03aa; else x = 0x0399; else if (tonos) if (dialitika) x = 0x0390; else x = 0x03af; else if (dialitika) x = 0x03ca; else x = 0x03b9; break; case 0x8a: if (shift) x = 0x039a; else x = 0x03ba; break; case 0x8b: if (shift) x = 0x039b; else x = 0x03bb; break; case 0x8c: if (shift) x = 0x039c; else x = 0x03bc; break; case 0x8d: if (shift) x = 0x039d; else x = 0x03bd; break; case 0x8e: if (shift) x = 0x039e; else x = 0x03be; break; case 0x8f: if (shift) if (tonos) x = 0x038c; else x = 0x039f; else if (tonos) x = 0x03cc; else x = 0x03bf; break; case 0x90: if (shift) x = 0x03a0; else x = 0x03c0; break; case 0x91: if (shift) x = 0x03a1; else x = 0x03c1; break; case 0x92: x = 0x03c2; break; case 0x93: if (shift) x = 0x03a3; else x = 0x03c3; break; case 0x94: if (shift) x = 0x03a4; else x = 0x03c4; break; case 0x95: if (shift) if (tonos) x = 0x038e; else if (dialitika) x = 0x03ab; else x = 0x03a5; else if (tonos) if (dialitika) x = 0x03b0; else x = 0x03cd; else if (dialitika) x = 0x03cb; else x = 0x03c5; break; case 0x96: if (shift) x = 0x03a6; else x = 0x03c6; break; case 0x97: if (shift) x = 0x03a7; else x = 0x03c7; break; case 0x98: if (shift) x = 0x03a8; else x = 0x03c8; break; case 0x99: if (shift) if (tonos) x = 0x038f; else x = 0x03a9; else if (tonos) x = 0x03ce; else x = 0x03c9; break; default: x = *inp; break; } (*no_read)++; return x; } static size_t write_advancegreek(yaz_iconv_t cd, yaz_iconv_encoder_t w, unsigned long x, char **outbuf, size_t *outbytesleft) { size_t k = 0; unsigned char *out = (unsigned char*) *outbuf; if (*outbytesleft < 3) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); /* not room for output */ return (size_t)(-1); } switch (x) { case 0x03ac : out[k++]=0x9d; out[k++]=0x81; break; case 0x03ad : out[k++]=0x9d; out[k++]=0x85; break; case 0x03ae : out[k++]=0x9d; out[k++]=0x87; break; case 0x03af : out[k++]=0x9d; out[k++]=0x89; break; case 0x03cc : out[k++]=0x9d; out[k++]=0x8f; break; case 0x03cd : out[k++]=0x9d; out[k++]=0x95; break; case 0x03ce : out[k++]=0x9d; out[k++]=0x99; break; case 0x0390 : out[k++]=0x9d; out[k++]=0x9e; out[k++]=0x89; break; case 0x03b0 : out[k++]=0x9d; out[k++]=0x9e; out[k++]=0x95; break; case 0x0386 : out[k++]=0x9d; out[k++]=0x9f; out[k++]=0x81; break; case 0x0388 : out[k++]=0x9d; out[k++]=0x9f; out[k++]=0x85; break; case 0x0389 : out[k++]=0x9d; out[k++]=0x9f; out[k++]=0x87; break; case 0x038a : out[k++]=0x9d; out[k++]=0x9f; out[k++]=0x89; break; case 0x038c : out[k++]=0x9d; out[k++]=0x9f; out[k++]=0x8f; break; case 0x038e : out[k++]=0x9d; out[k++]=0x9f; out[k++]=0x95; break; case 0x038f : out[k++]=0x9d; out[k++]=0x9f; out[k++]=0x99; break; case 0x03ca : out[k++]=0x9e; out[k++]=0x89; break; case 0x03cb : out[k++]=0x9e; out[k++]=0x95; break; case 0x03aa : out[k++]=0x9e; out[k++]=0x9f; out[k++]=0x89; break; case 0x03ab : out[k++]=0x9e; out[k++]=0x9f; out[k++]=0x95; break; case 0x0391 : out[k++]=0x9f; out[k++]=0x81; break; case 0x0392 : out[k++]=0x9f; out[k++]=0x82; break; case 0x0393 : out[k++]=0x9f; out[k++]=0x83; break; case 0x0394 : out[k++]=0x9f; out[k++]=0x84; break; case 0x0395 : out[k++]=0x9f; out[k++]=0x85; break; case 0x0396 : out[k++]=0x9f; out[k++]=0x86; break; case 0x0397 : out[k++]=0x9f; out[k++]=0x87; break; case 0x0398 : out[k++]=0x9f; out[k++]=0x88; break; case 0x0399 : out[k++]=0x9f; out[k++]=0x89; break; case 0x039a : out[k++]=0x9f; out[k++]=0x8a; break; case 0x039b : out[k++]=0x9f; out[k++]=0x8b; break; case 0x039c : out[k++]=0x9f; out[k++]=0x8c; break; case 0x039d : out[k++]=0x9f; out[k++]=0x8d; break; case 0x039e : out[k++]=0x9f; out[k++]=0x8e; break; case 0x039f : out[k++]=0x9f; out[k++]=0x8f; break; case 0x03a0 : out[k++]=0x9f; out[k++]=0x90; break; case 0x03a1 : out[k++]=0x9f; out[k++]=0x91; break; case 0x03a3 : out[k++]=0x9f; out[k++]=0x93; break; case 0x03a4 : out[k++]=0x9f; out[k++]=0x94; break; case 0x03a5 : out[k++]=0x9f; out[k++]=0x95; break; case 0x03a6 : out[k++]=0x9f; out[k++]=0x96; break; case 0x03a7 : out[k++]=0x9f; out[k++]=0x97; break; case 0x03a8 : out[k++]=0x9f; out[k++]=0x98; break; case 0x03a9 : out[k++]=0x9f; out[k++]=0x99; break; case 0x03b1 : out[k++]=0x81; break; case 0x03b2 : out[k++]=0x82; break; case 0x03b3 : out[k++]=0x83; break; case 0x03b4 : out[k++]=0x84; break; case 0x03b5 : out[k++]=0x85; break; case 0x03b6 : out[k++]=0x86; break; case 0x03b7 : out[k++]=0x87; break; case 0x03b8 : out[k++]=0x88; break; case 0x03b9 : out[k++]=0x89; break; case 0x03ba : out[k++]=0x8a; break; case 0x03bb : out[k++]=0x8b; break; case 0x03bc : out[k++]=0x8c; break; case 0x03bd : out[k++]=0x8d; break; case 0x03be : out[k++]=0x8e; break; case 0x03bf : out[k++]=0x8f; break; case 0x03c0 : out[k++]=0x90; break; case 0x03c1 : out[k++]=0x91; break; case 0x03c2 : out[k++]=0x92; break; case 0x03c3 : out[k++]=0x93; break; case 0x03c4 : out[k++]=0x94; break; case 0x03c5 : out[k++]=0x95; break; case 0x03c6 : out[k++]=0x96; break; case 0x03c7 : out[k++]=0x97; break; case 0x03c8 : out[k++]=0x98; break; case 0x03c9 : out[k++]=0x99; break; default: if (x > 255) { yaz_iconv_set_errno(cd, YAZ_ICONV_EILSEQ); return (size_t) -1; } out[k++] = (unsigned char ) x; break; } *outbytesleft -= k; (*outbuf) += k; return 0; } yaz_iconv_encoder_t yaz_advancegreek_encoder(const char *name, yaz_iconv_encoder_t e) { if (!yaz_matchstr(name, "advancegreek")) { e->write_handle = write_advancegreek; return e; } return 0; } yaz_iconv_decoder_t yaz_advancegreek_decoder(const char *name, yaz_iconv_decoder_t d) { if (!yaz_matchstr(name, "advancegreek")) { d->read_handle = read_advancegreek; return d; } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/oclcui.asn0000644000175000017500000000231713265142510012104 00000000000000UserInfoFormat-oclcUserInformation {Z39-50-userInfoFormat OCLCUserInformation (7)} DEFINITIONS ::= BEGIN -- -- This format is returned from the server at -- fsz3950test.oclc.org:210 -- I found the definition at -- http://www.oclc.org/support/services/firstsearch/documentation/z3950/fs_z39_config_guide.en.html -- -- I have added OPTIONAL modifiers to the `dblist' and and `code' -- elements because they appear to be admitted from the APDU returned -- as an Init diagnostic from fsz3950test.oclc.org:210. Adam further -- removed the SEQUENCE structure, changed failReason to a BOOLEAN and -- deleted diagnosticSetId altogether, to make the ASN.1 conform to -- what's actually returned on the wire. Finally, I removed the -- OPTIONAL on failReason on the advice of OCLC's Keith Neibarger -- (although he'd also advised me, wrongly, that I -- could remove the OPTIONAL on dblist). OCLC-UserInformation ::= SEQUENCE { motd [1] IMPLICIT VisibleString OPTIONAL, dblist SEQUENCE OF DBName OPTIONAL, failReason [3] IMPLICIT BOOLEAN OPTIONAL, code [1] IMPLICIT INTEGER OPTIONAL, text [2] IMPLICIT VisibleString OPTIONAL } DBName ::= [2] IMPLICIT VisibleString END yaz-5.28.0/src/marc8r.c0000644000175000017500000401051413273126167011476 00000000000000/** \file marc8r.c \brief Character conversion, generated from ./codetables.xml Generated automatically by charconv.tcl */ #include #if HAVE_CONFIG_H #include #endif struct yaz_iconv_trie_flat { char from[6]; unsigned combining : 1; unsigned to : 24; }; struct yaz_iconv_trie_dir { int ptr : 15; unsigned combining : 1; unsigned to : 24; }; struct yaz_iconv_trie { struct yaz_iconv_trie_flat *flat; struct yaz_iconv_trie_dir *dir; }; static unsigned long lookup(struct yaz_iconv_trie **ptrs, int ptr, unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { struct yaz_iconv_trie *t = ptrs[ptr-1]; if (inbytesleft < 1) return 0; if (t->dir) { size_t ch = (inp[0] & mask) + boffset; unsigned long code; if (t->dir[ch].ptr) { code = lookup(ptrs, t->dir[ch].ptr, inp+1, inbytesleft-1, no_read, combining, mask, boffset); if (code) { (*no_read)++; return code; } } if (t->dir[ch].to) { code = t->dir[ch].to; *combining = t->dir[ch].combining; *no_read = 1; return code; } } else { struct yaz_iconv_trie_flat *flat = t->flat; while (flat->to) { size_t len = strlen(flat->from); if (len <= inbytesleft) { size_t i; for (i = 0; i < len; i++) { if (((unsigned char *) flat->from)[i] != (inp[i] & mask) + boffset) break; } if (i == len) { *no_read = len; *combining = flat->combining; return flat->to; } } flat++; } } return 0; } /* TRIE: size 99 */ /* PAGE 0 */ struct yaz_iconv_trie_dir marc8r_42page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x1B} /* ESCAPE (Unlikely to occur in UCS/Unicode) */, {0, 0, 0}, {0, 0, 0x1D} /* RECORD TERMINATOR / GROUP SEPARATOR */, {0, 0, 0x1E} /* FIELD TERMINATOR / RECORD SEPARATOR */, {0, 0, 0x1F} /* SUBFIELD DELIMITER / UNIT SEPARATOR */, {0, 0, 0x20} /* SPACE, BLANK / SPACE */, {0, 0, 0x21} /* EXCLAMATION MARK */, {0, 0, 0x22} /* QUOTATION MARK */, {0, 0, 0x23} /* NUMBER SIGN */, {0, 0, 0x24} /* DOLLAR SIGN */, {0, 0, 0x25} /* PERCENT SIGN */, {0, 0, 0x26} /* AMPERSAND */, {0, 0, 0x27} /* APOSTROPHE */, {0, 0, 0x28} /* OPENING PARENTHESIS / LEFT PARENTHESIS */, {0, 0, 0x29} /* CLOSING PARENTHESIS / CLOSING PARENTHESIS */, {0, 0, 0x2A} /* ASTERISK */, {0, 0, 0x2B} /* PLUS SIGN */, {0, 0, 0x2C} /* COMMA */, {0, 0, 0x2D} /* HYPHEN-MINUS */, {0, 0, 0x2E} /* PERIOD, DECIMAL POINT / FULL STOP */, {0, 0, 0x2F} /* SLASH / SOLIDUS */, {0, 0, 0x30} /* DIGIT ZERO */, {0, 0, 0x31} /* DIGIT ONE */, {0, 0, 0x32} /* DIGIT TWO */, {0, 0, 0x33} /* DIGIT THREE */, {0, 0, 0x34} /* DIGIT FOUR */, {0, 0, 0x35} /* DIGIT FIVE */, {0, 0, 0x36} /* DIGIT SIX */, {0, 0, 0x37} /* DIGIT SEVEN */, {0, 0, 0x38} /* DIGIT EIGHT */, {0, 0, 0x39} /* DIGIT NINE */, {0, 0, 0x3A} /* COLON */, {0, 0, 0x3B} /* SEMICOLON */, {0, 0, 0x3C} /* LESS-THAN SIGN */, {0, 0, 0x3D} /* EQUALS SIGN */, {0, 0, 0x3E} /* GREATER-THAN SIGN */, {0, 0, 0x3F} /* QUESTION MARK */, {0, 0, 0x40} /* COMMERCIAL AT */, {0, 0, 0x41} /* LATIN CAPITAL LETTER A */, {0, 0, 0x42} /* LATIN CAPITAL LETTER B */, {0, 0, 0x43} /* LATIN CAPITAL LETTER C */, {0, 0, 0x44} /* LATIN CAPITAL LETTER D */, {0, 0, 0x45} /* LATIN CAPITAL LETTER E */, {0, 0, 0x46} /* LATIN CAPITAL LETTER F */, {0, 0, 0x47} /* LATIN CAPITAL LETTER G */, {0, 0, 0x48} /* LATIN CAPITAL LETTER H */, {0, 0, 0x49} /* LATIN CAPITAL LETTER I */, {0, 0, 0x4A} /* LATIN CAPITAL LETTER J */, {0, 0, 0x4B} /* LATIN CAPITAL LETTER K */, {0, 0, 0x4C} /* LATIN CAPITAL LETTER L */, {0, 0, 0x4D} /* LATIN CAPITAL LETTER M */, {0, 0, 0x4E} /* LATIN CAPITAL LETTER N */, {0, 0, 0x4F} /* LATIN CAPITAL LETTER O */, {0, 0, 0x50} /* LATIN CAPITAL LETTER P */, {0, 0, 0x51} /* LATIN CAPITAL LETTER Q */, {0, 0, 0x52} /* LATIN CAPITAL LETTER R */, {0, 0, 0x53} /* LATIN CAPITAL LETTER S */, {0, 0, 0x54} /* LATIN CAPITAL LETTER T */, {0, 0, 0x55} /* LATIN CAPITAL LETTER U */, {0, 0, 0x56} /* LATIN CAPITAL LETTER V */, {0, 0, 0x57} /* LATIN CAPITAL LETTER W */, {0, 0, 0x58} /* LATIN CAPITAL LETTER X */, {0, 0, 0x59} /* LATIN CAPITAL LETTER Y */, {0, 0, 0x5A} /* LATIN CAPITAL LETTER Z */, {0, 0, 0x5B} /* OPENING SQUARE BRACKET / LEFT SQUARE BRACKET */, {0, 0, 0x5C} /* REVERSE SLASH / REVERSE SOLIDUS */, {0, 0, 0x5D} /* CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET */, {0, 0, 0x5E} /* SPACING CIRCUMFLEX / CIRCUMFLEX ACCENT */, {0, 0, 0x5F} /* SPACING UNDERSCORE / LOW LINE */, {0, 0, 0x60} /* SPACING GRAVE / GRAVE ACCENT */, {0, 0, 0x61} /* LATIN SMALL LETTER A */, {0, 0, 0x62} /* LATIN SMALL LETTER B */, {0, 0, 0x63} /* LATIN SMALL LETTER C */, {0, 0, 0x64} /* LATIN SMALL LETTER D */, {0, 0, 0x65} /* LATIN SMALL LETTER E */, {0, 0, 0x66} /* LATIN SMALL LETTER F */, {0, 0, 0x67} /* LATIN SMALL LETTER G */, {0, 0, 0x68} /* LATIN SMALL LETTER H */, {0, 0, 0x69} /* LATIN SMALL LETTER I */, {0, 0, 0x6A} /* LATIN SMALL LETTER J */, {0, 0, 0x6B} /* LATIN SMALL LETTER K */, {0, 0, 0x6C} /* LATIN SMALL LETTER L */, {0, 0, 0x6D} /* LATIN SMALL LETTER M */, {0, 0, 0x6E} /* LATIN SMALL LETTER N */, {0, 0, 0x6F} /* LATIN SMALL LETTER O */, {0, 0, 0x70} /* LATIN SMALL LETTER P */, {0, 0, 0x71} /* LATIN SMALL LETTER Q */, {0, 0, 0x72} /* LATIN SMALL LETTER R */, {0, 0, 0x73} /* LATIN SMALL LETTER S */, {0, 0, 0x74} /* LATIN SMALL LETTER T */, {0, 0, 0x75} /* LATIN SMALL LETTER U */, {0, 0, 0x76} /* LATIN SMALL LETTER V */, {0, 0, 0x77} /* LATIN SMALL LETTER W */, {0, 0, 0x78} /* LATIN SMALL LETTER X */, {0, 0, 0x79} /* LATIN SMALL LETTER Y */, {0, 0, 0x7A} /* LATIN SMALL LETTER Z */, {0, 0, 0x7B} /* OPENING CURLY BRACKET / LEFT CURLY BRACKET */, {0, 0, 0x7C} /* VERTICAL BAR (FILL) / VERTICAL LINE */, {0, 0, 0x7D} /* CLOSING CURLY BRACKET / RIGHT CURLY BRACKET */, {0, 0, 0x7E} /* SPACING TILDE / TILDE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_42page0 = { 0, marc8r_42page0_dir }; struct yaz_iconv_trie *marc8r_42ptrs [] = { &marc8r_42page0, 0, }; unsigned long yaz_marc8r_42_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_42ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 72 */ /* PAGE 10 */ struct yaz_iconv_trie_flat marc8r_45page10_flat[] = { {"\xB8\xA0", 1, 0xEB}, /* LIGATURE, FIRST HALF / COMBINING DOUBLE INVERTED BREVE */ {"\xB8\xA1", 1, 0xEC}, /* LIGATURE, SECOND HALF / COMBINING LIGATURE RIGHT HALF */ {"\xB8\xA2", 1, 0xFA}, /* DOUBLE TILDE, FIRST HALF / COMBINING DOUBLE TILDE */ {"\xB8\xA3", 1, 0xFB}, /* DOUBLE TILDE, SECOND HALF / COMBINING DOUBLE TILDE RIGHT HALF */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page10 = { marc8r_45page10_flat, 0 }; /* PAGE 9 */ struct yaz_iconv_trie_flat marc8r_45page9_flat[] = { {"\xA1", 1, 0xEB}, /* LIGATURE, FIRST HALF / COMBINING DOUBLE INVERTED BREVE */ {"\xA0", 1, 0xFA}, /* DOUBLE TILDE, FIRST HALF / COMBINING DOUBLE TILDE */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page9 = { marc8r_45page9_flat, 0 }; /* PAGE 8 */ struct yaz_iconv_trie_flat marc8r_45page8_flat[] = { {"\x89", 1, 0xE0}, /* PSEUDO QUESTION MARK / COMBINING HOOK ABOVE */ {"\x80", 1, 0xE1}, /* GRAVE / COMBINING GRAVE ACCENT (Varia) */ {"\x81", 1, 0xE2}, /* ACUTE / COMBINING ACUTE ACCENT (Oxia) */ {"\x82", 1, 0xE3}, /* CIRCUMFLEX / COMBINING CIRCUMFLEX ACCENT */ {"\x83", 1, 0xE4}, /* TILDE / COMBINING TILDE */ {"\x84", 1, 0xE5}, /* MACRON / COMBINING MACRON */ {"\x86", 1, 0xE6}, /* BREVE / COMBINING BREVE (Vrachy) */ {"\x87", 1, 0xE7}, /* SUPERIOR DOT / COMBINING DOT ABOVE */ {"\x88", 1, 0xE8}, /* UMLAUT, DIAERESIS / COMBINING DIAERESIS (Dialytika) */ {"\x8C", 1, 0xE9}, /* HACEK / COMBINING CARON */ {"\x8A", 1, 0xEA}, /* CIRCLE ABOVE, ANGSTROM / COMBINING RING ABOVE */ {"\x95", 1, 0xED}, /* HIGH COMMA, OFF CENTER / COMBINING COMMA ABOVE RIGHT */ {"\x8B", 1, 0xEE}, /* DOUBLE ACUTE / COMBINING DOUBLE ACUTE ACCENT */ {"\x90", 1, 0xEF}, /* CANDRABINDU / COMBINING CANDRABINDU */ {"\xA7", 1, 0xF0}, /* CEDILLA / COMBINING CEDILLA */ {"\xA8", 1, 0xF1}, /* RIGHT HOOK, OGONEK / COMBINING OGONEK */ {"\xA3", 1, 0xF2}, /* DOT BELOW / COMBINING DOT BELOW */ {"\xA4", 1, 0xF3}, /* DOUBLE DOT BELOW / COMBINING DIAERESIS BELOW */ {"\xA5", 1, 0xF4}, /* CIRCLE BELOW / COMBINING RING BELOW */ {"\xB3", 1, 0xF5}, /* DOUBLE UNDERSCORE / COMBINING DOUBLE LOW LINE */ {"\xB2", 1, 0xF6}, /* UNDERSCORE / COMBINING LOW LINE */ {"\xA6", 1, 0xF7}, /* LEFT HOOK (COMMA BELOW) / COMBINING COMMA BELOW */ {"\x9C", 1, 0xF8}, /* RIGHT CEDILLA / COMBINING LEFT HALF RING BELOW */ {"\xAE", 1, 0xF9}, /* UPADHMANIYA / COMBINING BREVE BELOW */ {"\x93", 1, 0xFE}, /* HIGH COMMA, CENTERED / COMBINING COMMA ABOVE (Psili) */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page8 = { marc8r_45page8_flat, 0 }; /* PAGE 7 */ struct yaz_iconv_trie_flat marc8r_45page7_flat[] = { {"\xA0", 0, 0xAC}, /* UPPERCASE O-HOOK / LATIN CAPITAL LETTER O WITH HORN */ {"\xAF", 0, 0xAD}, /* UPPERCASE U-HOOK / LATIN CAPITAL LETTER U WITH HORN */ {"\xA1", 0, 0xBC}, /* LOWERCASE O-HOOK / LATIN SMALL LETTER O WITH HORN */ {"\xB0", 0, 0xBD}, /* LOWERCASE U-HOOK / LATIN SMALL LETTER U WITH HORN */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page7 = { marc8r_45page7_flat, 0 }; /* PAGE 6 */ struct yaz_iconv_trie_flat marc8r_45page6_flat[] = { {"\xB9", 0, 0xA7}, /* SOFT SIGN, PRIME / MODIFIER LETTER PRIME */ {"\xBC", 0, 0xAE}, /* ALIF / MODIFIER LETTER APOSTROPHE */ {"\xBE", 0, 0xAE}, /* ALIF / MODIFIER LETTER APOSTROPHE */ {"\xBB", 0, 0xB0}, /* AYN / MODIFIER LETTER TURNED COMMA */ {"\xBA", 0, 0xB7}, /* HARD SIGN, DOUBLE PRIME / MODIFIER LETTER DOUBLE PRIME */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page6 = { marc8r_45page6_flat, 0 }; /* PAGE 5 */ struct yaz_iconv_trie_flat marc8r_45page5_flat[] = { {"\x90", 0, 0xA3}, /* UPPERCASE D WITH CROSSBAR / LATIN CAPITAL LETTER D WITH STROKE */ {"\x91", 0, 0xB3}, /* LOWERCASE D WITH CROSSBAR / LATIN SMALL LETTER D WITH STROKE */ {"\xB1", 0, 0xB8}, /* LOWERCASE TURKISH I / LATIN SMALL LETTER DOTLESS I */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page5 = { marc8r_45page5_flat, 0 }; /* PAGE 4 */ struct yaz_iconv_trie_flat marc8r_45page4_flat[] = { {"\x98", 0, 0xA2}, /* UPPERCASE SCANDINAVIAN O / LATIN CAPITAL LETTER O WITH STROKE */ {"\x9E", 0, 0xA4}, /* UPPERCASE ICELANDIC THORN / LATIN CAPITAL LETTER THORN (Icelandic) */ {"\x86", 0, 0xA5}, /* UPPERCASE DIGRAPH AE / LATIN CAPITAL LIGATURE AE */ {"\xB8", 0, 0xB2}, /* LOWERCASE SCANDINAVIAN O / LATIN SMALL LETTER O WITH STROKE */ {"\xBE", 0, 0xB4}, /* LOWERCASE ICELANDIC THORN / LATIN SMALL LETTER THORN (Icelandic) */ {"\xA6", 0, 0xB5}, /* LOWERCASE DIGRAPH AE / LATIN SMALL LIGATURE AE */ {"\xB0", 0, 0xBA}, /* LOWERCASE ETH / LATIN SMALL LETTER ETH (Icelandic) */ {"\x9F", 0, 0xC7}, /* ESZETT SYMBOL */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page4 = { marc8r_45page4_flat, 0 }; /* PAGE 3 */ struct yaz_iconv_trie_flat marc8r_45page3_flat[] = { {"\x81", 0, 0xA1}, /* UPPERCASE POLISH L / LATIN CAPITAL LETTER L WITH STROKE */ {"\x92", 0, 0xA6}, /* UPPERCASE DIGRAPH OE / LATIN CAPITAL LIGATURE OE */ {"\x82", 0, 0xB1}, /* LOWERCASE POLISH L / LATIN SMALL LETTER L WITH STROKE */ {"\x93", 0, 0xB6}, /* LOWERCASE DIGRAPH OE / LATIN SMALL LIGATURE OE */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page3 = { marc8r_45page3_flat, 0 }; /* PAGE 2 */ struct yaz_iconv_trie_flat marc8r_45page2_flat[] = { {"\x80\x8D", 0, 0x8D}, /* JOINER / ZERO WIDTH JOINER */ {"\x80\x8C", 0, 0x8E}, /* NON-JOINER / ZERO WIDTH NON-JOINER */ {"\x99\xAD", 0, 0xA9}, /* MUSIC FLAT SIGN */ {"\x84\x93", 0, 0xC1}, /* SCRIPT SMALL L */ {"\x84\x97", 0, 0xC2}, /* SOUND RECORDING COPYRIGHT */ {"\x99\xAF", 0, 0xC4}, /* MUSIC SHARP SIGN */ {"\x82\xAC", 0, 0xC8}, /* EURO SIGN */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page2 = { marc8r_45page2_flat, 0 }; /* PAGE 1 */ struct yaz_iconv_trie_flat marc8r_45page1_flat[] = { {"\x98", 0, 0x88}, /* NON-SORT BEGIN / START OF STRING */ {"\x9C", 0, 0x89}, /* NON-SORT END / STRING TERMINATOR */ {"\xB7", 0, 0xA8}, /* MIDDLE DOT */ {"\xAE", 0, 0xAA}, /* PATENT MARK / REGISTERED SIGN */ {"\xB1", 0, 0xAB}, /* PLUS OR MINUS / PLUS-MINUS SIGN */ {"\xA3", 0, 0xB9}, /* BRITISH POUND / POUND SIGN */ {"\xB0", 0, 0xC0}, /* DEGREE SIGN */ {"\xA9", 0, 0xC3}, /* COPYRIGHT SIGN */ {"\xBF", 0, 0xC5}, /* INVERTED QUESTION MARK */ {"\xA1", 0, 0xC6}, /* INVERTED EXCLAMATION MARK */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_45page1 = { marc8r_45page1_flat, 0 }; /* PAGE 0 */ struct yaz_iconv_trie_dir marc8r_45page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {2, 0, 0}, {5, 0, 0}, {6, 0, 0}, {4, 0, 0}, {8, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {7, 0, 0}, {0, 0, 0}, {9, 0, 0}, {10, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {3, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {11, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_45page0 = { 0, marc8r_45page0_dir }; struct yaz_iconv_trie *marc8r_45ptrs [] = { &marc8r_45page0, &marc8r_45page1, &marc8r_45page2, &marc8r_45page3, &marc8r_45page4, &marc8r_45page5, &marc8r_45page6, &marc8r_45page7, &marc8r_45page8, &marc8r_45page9, &marc8r_45page10, 0, }; unsigned long yaz_marc8r_45_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_45ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 3 */ /* PAGE 0 */ struct yaz_iconv_trie_flat marc8r_67page0_flat[] = { {"\xCE\xB1", 0, 0x61}, /* GREEK SMALL LETTER ALPHA */ {"\xCE\xB2", 0, 0x62}, /* GREEK SMALL LETTER BETA */ {"\xCE\xB3", 0, 0x63}, /* GREEK SMALL LETTER GAMMA */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_67page0 = { marc8r_67page0_flat, 0 }; struct yaz_iconv_trie *marc8r_67ptrs [] = { &marc8r_67page0, 0, }; unsigned long yaz_marc8r_67_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_67ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 14 */ /* PAGE 0 */ struct yaz_iconv_trie_flat marc8r_62page0_flat[] = { {"\xE2\x82\x8D", 0, 0x28}, /* SUBSCRIPT OPENING PARENTHESIS / SUBSCRIPT LEFT PARENTHESIS */ {"\xE2\x82\x8E", 0, 0x29}, /* SUBSCRIPT CLOSING PARENTHESIS / SUBSCRIPT RIGHT PARENTHESIS */ {"\xE2\x82\x8A", 0, 0x2B}, /* SUBSCRIPT PLUS SIGN */ {"\xE2\x82\x8B", 0, 0x2D}, /* SUBSCRIPT HYPHEN-MINUS / SUBSCRIPT MINUS */ {"\xE2\x82\x80", 0, 0x30}, /* SUBSCRIPT DIGIT ZERO */ {"\xE2\x82\x81", 0, 0x31}, /* SUBSCRIPT DIGIT ONE */ {"\xE2\x82\x82", 0, 0x32}, /* SUBSCRIPT DIGIT TWO */ {"\xE2\x82\x83", 0, 0x33}, /* SUBSCRIPT DIGIT THREE */ {"\xE2\x82\x84", 0, 0x34}, /* SUBSCRIPT DIGIT FOUR */ {"\xE2\x82\x85", 0, 0x35}, /* SUBSCRIPT DIGIT FIVE */ {"\xE2\x82\x86", 0, 0x36}, /* SUBSCRIPT DIGIT SIX */ {"\xE2\x82\x87", 0, 0x37}, /* SUBSCRIPT DIGIT SEVEN */ {"\xE2\x82\x88", 0, 0x38}, /* SUBSCRIPT DIGIT EIGHT */ {"\xE2\x82\x89", 0, 0x39}, /* SUBSCRIPT DIGIT NINE */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_62page0 = { marc8r_62page0_flat, 0 }; struct yaz_iconv_trie *marc8r_62ptrs [] = { &marc8r_62page0, 0, }; unsigned long yaz_marc8r_62_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_62ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 14 */ /* PAGE 0 */ struct yaz_iconv_trie_flat marc8r_70page0_flat[] = { {"\xE2\x81\xBD", 0, 0x28}, /* SUPERSCRIPT OPENING PARENTHESIS / SUPERSCRIPT LEFT PARENTHESIS */ {"\xE2\x81\xBE", 0, 0x29}, /* SUPERSCRIPT CLOSING PARENTHESIS / SUPERSCRIPT RIGHT PARENTHESIS */ {"\xE2\x81\xBA", 0, 0x2B}, /* SUPERSCRIPT PLUS SIGN */ {"\xE2\x81\xBB", 0, 0x2D}, /* SUPERSCRIPT HYPHEN-MINUS / SUPERSCRIPT MINUS */ {"\xE2\x81\xB0", 0, 0x30}, /* SUPERSCRIPT DIGIT ZERO */ {"\xC2\xB9", 0, 0x31}, /* SUPERSCRIPT DIGIT ONE */ {"\xC2\xB2", 0, 0x32}, /* SUPERSCRIPT DIGIT TWO */ {"\xC2\xB3", 0, 0x33}, /* SUPERSCRIPT DIGIT THREE */ {"\xE2\x81\xB4", 0, 0x34}, /* SUPERSCRIPT DIGIT FOUR */ {"\xE2\x81\xB5", 0, 0x35}, /* SUPERSCRIPT DIGIT FIVE */ {"\xE2\x81\xB6", 0, 0x36}, /* SUPERSCRIPT DIGIT SIX */ {"\xE2\x81\xB7", 0, 0x37}, /* SUPERSCRIPT DIGIT SEVEN */ {"\xE2\x81\xB8", 0, 0x38}, /* SUPERSCRIPT DIGIT EIGHT */ {"\xE2\x81\xB9", 0, 0x39}, /* SUPERSCRIPT DIGIT NINE */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_70page0 = { marc8r_70page0_flat, 0 }; struct yaz_iconv_trie *marc8r_70ptrs [] = { &marc8r_70page0, 0, }; unsigned long yaz_marc8r_70_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_70ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 78 */ /* PAGE 3 */ struct yaz_iconv_trie_flat marc8r_32page3_flat[] = { {"\xAC\x9E", 1, 0x4E}, /* VARIKA / HEBREW POINT JUDEO-SPANISH VARIKA */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_32page3 = { marc8r_32page3_flat, 0 }; /* PAGE 2 */ struct yaz_iconv_trie_flat marc8r_32page2_flat[] = { {"\xBE", 0, 0x2D}, /* HYPHEN-MINUS, MAKEF / HEBREW PUNCTUATION MAQAF */ {"\xB7", 1, 0x40}, /* HEBREW POINT PATAH */ {"\xB8", 1, 0x41}, /* KAMATS / HEBREW POINT QAMATS */ {"\xB6", 1, 0x42}, /* HEBREW POINT SEGOL */ {"\xB5", 1, 0x43}, /* TSEREH / HEBREW POINT TSERE */ {"\xB4", 1, 0x44}, /* HIRIK / HEBREW POINT HIRIQ */ {"\xB9", 1, 0x45}, /* HOLAM, LEFT SIN DOT / HEBREW POINT HOLAM */ {"\xBB", 1, 0x46}, /* KUBUTS / HEBREW POINT QUBUTS */ {"\xB0", 1, 0x47}, /* HEBREW POINT SHEVA */ {"\xB2", 1, 0x48}, /* HEBREW POINT HATAF PATAH */ {"\xB3", 1, 0x49}, /* HATAF KAMATS / HEBREW POINT HATAF QAMATS */ {"\xB1", 1, 0x4A}, /* HEBREW POINT HATAF SEGOL */ {"\xBC", 1, 0x4B}, /* HEBREW POINT DAGESH OR MAPIQ */ {"\xBF", 1, 0x4C}, /* RAFEH / HEBREW POINT RAFE */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_32page2 = { marc8r_32page2_flat, 0 }; /* PAGE 1 */ struct yaz_iconv_trie_flat marc8r_32page1_flat[] = { {"\xB4", 0, 0x22}, /* QUOTATION MARK, GERSHAYIM / HEBREW PUNCTUATION GERSHAYIM */ {"\xB3", 0, 0x27}, /* APOSTROPHE, GERESH / HEBREW PUNCTUATION GERESH */ {"\x81", 1, 0x4D}, /* RIGHT SHIN DOT / HEBREW POINT SHIN DOT */ {"\x90", 0, 0x60}, /* HEBREW LETTER ALEF */ {"\x91", 0, 0x61}, /* HEBREW LETTER BET */ {"\x92", 0, 0x62}, /* HEBREW LETTER GIMEL */ {"\x93", 0, 0x63}, /* HEBREW LETTER DALET */ {"\x94", 0, 0x64}, /* HEBREW LETTER HE */ {"\x95", 0, 0x65}, /* HEBREW LETTER VAV */ {"\x96", 0, 0x66}, /* HEBREW LETTER ZAYIN */ {"\x97", 0, 0x67}, /* HEBREW LETTER HET */ {"\x98", 0, 0x68}, /* HEBREW LETTER TET */ {"\x99", 0, 0x69}, /* HEBREW LETTER YOD */ {"\x9A", 0, 0x6A}, /* HEBREW LETTER FINAL KAF */ {"\x9B", 0, 0x6B}, /* HEBREW LETTER KAF */ {"\x9C", 0, 0x6C}, /* HEBREW LETTER LAMED */ {"\x9D", 0, 0x6D}, /* HEBREW LETTER FINAL MEM */ {"\x9E", 0, 0x6E}, /* HEBREW LETTER MEM */ {"\x9F", 0, 0x6F}, /* HEBREW LETTER FINAL NUN */ {"\xA0", 0, 0x70}, /* HEBREW LETTER NUN */ {"\xA1", 0, 0x71}, /* HEBREW LETTER SAMEKH */ {"\xA2", 0, 0x72}, /* HEBREW LETTER AYIN */ {"\xA3", 0, 0x73}, /* HEBREW LETTER FINAL PE */ {"\xA4", 0, 0x74}, /* HEBREW LETTER PE */ {"\xA5", 0, 0x75}, /* HEBREW LETTER FINAL TSADI */ {"\xA6", 0, 0x76}, /* HEBREW LETTER TSADI */ {"\xA7", 0, 0x77}, /* HEBREW LETTER QOF / KOF */ {"\xA8", 0, 0x78}, /* HEBREW LETTER RESH */ {"\xA9", 0, 0x79}, /* HEBREW LETTER SHIN */ {"\xAA", 0, 0x7A}, /* HEBREW LETTER TAV */ {"\xB0", 0, 0x7B}, /* HEBREW LIGATURE YIDDISH DOUBLE VAV / TSVEY VOVN */ {"\xB1", 0, 0x7C}, /* HEBREW LIGATURE YIDDISH VAV YOD / VOV YUD */ {"\xB2", 0, 0x7D}, /* HEBREW LIGATURE YIDDISH DOUBLE YOD / TSVEY YUDN */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_32page1 = { marc8r_32page1_flat, 0 }; /* PAGE 0 */ struct yaz_iconv_trie_dir marc8r_32page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x21} /* EXCLAMATION MARK */, {0, 0, 0}, {0, 0, 0x23} /* NUMBER SIGN */, {0, 0, 0x24} /* DOLLAR SIGN */, {0, 0, 0x25} /* PERCENT SIGN */, {0, 0, 0x26} /* AMPERSAND */, {0, 0, 0}, {0, 0, 0x28} /* OPENING PARENTHESIS / LEFT PARENTHESIS */, {0, 0, 0x29} /* CLOSING PARENTHESIS / RIGHT PARENTHESIS */, {0, 0, 0x2A} /* ASTERISK */, {0, 0, 0x2B} /* PLUS SIGN */, {0, 0, 0x2C} /* COMMA */, {0, 0, 0}, {0, 0, 0x2E} /* PERIOD, DECIMAL POINT / FULL STOP */, {0, 0, 0x2F} /* SLASH / SOLIDUS */, {0, 0, 0x30} /* DIGIT ZERO */, {0, 0, 0x31} /* DIGIT ONE */, {0, 0, 0x32} /* DIGIT TWO */, {0, 0, 0x33} /* DIGIT THREE */, {0, 0, 0x34} /* DIGIT FOUR */, {0, 0, 0x35} /* DIGIT FIVE */, {0, 0, 0x36} /* DIGIT SIX */, {0, 0, 0x37} /* DIGIT SEVEN */, {0, 0, 0x38} /* DIGIT EIGHT */, {0, 0, 0x39} /* DIGIT NINE */, {0, 0, 0x3A} /* COLON */, {0, 0, 0x3B} /* SEMICOLON */, {0, 0, 0x3C} /* LESS-THAN SIGN */, {0, 0, 0x3D} /* EQUALS SIGN */, {0, 0, 0x3E} /* GREATER-THAN SIGN */, {0, 0, 0x3F} /* QUESTION MARK */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5B} /* OPENING SQUARE BRACKET / LEFT SQUARE BRACKET */, {0, 0, 0}, {0, 0, 0x5D} /* CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {3, 0, 0}, {2, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {4, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_32page0 = { 0, marc8r_32page0_dir }; struct yaz_iconv_trie *marc8r_32ptrs [] = { &marc8r_32page0, &marc8r_32page1, &marc8r_32page2, &marc8r_32page3, 0, }; unsigned long yaz_marc8r_32_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_32ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 94 */ /* PAGE 2 */ struct yaz_iconv_trie_flat marc8r_4Epage2_flat[] = { {"\xB0", 0, 0x41}, /* CYRILLIC SMALL LETTER A */ {"\xB1", 0, 0x42}, /* CYRILLIC SMALL LETTER BE */ {"\xB4", 0, 0x44}, /* CYRILLIC SMALL LETTER DE */ {"\xB5", 0, 0x45}, /* CYRILLIC SMALL LETTER IE */ {"\xB3", 0, 0x47}, /* LOWERCASE GE / CYRILLIC SMALL LETTER GHE */ {"\xB8", 0, 0x49}, /* LOWERCASE II / CYRILLIC SMALL LETTER I */ {"\xB9", 0, 0x4A}, /* LOWERCASE SHORT II / CYRILLIC SMALL LETTER SHORT I */ {"\xBA", 0, 0x4B}, /* CYRILLIC SMALL LETTER KA */ {"\xBB", 0, 0x4C}, /* CYRILLIC SMALL LETTER EL */ {"\xBC", 0, 0x4D}, /* CYRILLIC SMALL LETTER EM */ {"\xBD", 0, 0x4E}, /* CYRILLIC SMALL LETTER EN */ {"\xBE", 0, 0x4F}, /* CYRILLIC SMALL LETTER O */ {"\xBF", 0, 0x50}, /* CYRILLIC SMALL LETTER PE */ {"\xB6", 0, 0x56}, /* CYRILLIC SMALL LETTER ZHE */ {"\xB2", 0, 0x57}, /* CYRILLIC SMALL LETTER VE */ {"\xB7", 0, 0x5A}, /* CYRILLIC SMALL LETTER ZE */ {"\xAE", 0, 0x60}, /* UPPERCASE IU / CYRILLIC CAPITAL LETTER YU */ {"\x90", 0, 0x61}, /* CYRILLIC CAPITAL LETTER A */ {"\x91", 0, 0x62}, /* CYRILLIC CAPITAL LETTER BE */ {"\xA6", 0, 0x63}, /* CYRILLIC CAPITAL LETTER TSE */ {"\x94", 0, 0x64}, /* CYRILLIC CAPITAL LETTER DE */ {"\x95", 0, 0x65}, /* CYRILLIC CAPITAL LETTER IE */ {"\xA4", 0, 0x66}, /* CYRILLIC CAPITAL LETTER EF */ {"\x93", 0, 0x67}, /* UPPERCASE GE / CYRILLIC CAPITAL LETTER GHE */ {"\xA5", 0, 0x68}, /* UPPERCASE KHA / CYRILLIC CAPITAL LETTER HA */ {"\x98", 0, 0x69}, /* UPPERCASE II / CYRILLIC CAPITAL LETTER I */ {"\x99", 0, 0x6A}, /* UPPERCASE SHORT II / CYRILLIC CAPITAL LETTER SHORT I */ {"\x9A", 0, 0x6B}, /* CYRILLIC CAPITAL LETTER KA */ {"\x9B", 0, 0x6C}, /* CYRILLIC CAPITAL LETTER EL */ {"\x9C", 0, 0x6D}, /* CYRILLIC CAPITAL LETTER EM */ {"\x9D", 0, 0x6E}, /* CYRILLIC CAPITAL LETTER EN */ {"\x9E", 0, 0x6F}, /* CYRILLIC CAPITAL LETTER O */ {"\x9F", 0, 0x70}, /* CYRILLIC CAPITAL LETTER PE */ {"\xAF", 0, 0x71}, /* UPPERCASE IA / CYRILLIC CAPITAL LETTER YA */ {"\xA0", 0, 0x72}, /* CYRILLIC CAPITAL LETTER ER */ {"\xA1", 0, 0x73}, /* CYRILLIC CAPITAL LETTER ES */ {"\xA2", 0, 0x74}, /* CYRILLIC CAPITAL LETTER TE */ {"\xA3", 0, 0x75}, /* CYRILLIC CAPITAL LETTER U */ {"\x96", 0, 0x76}, /* CYRILLIC CAPITAL LETTER ZHE */ {"\x92", 0, 0x77}, /* CYRILLIC CAPITAL LETTER VE */ {"\xAC", 0, 0x78}, /* CYRILLIC CAPITAL LETTER SOFT SIGN */ {"\xAB", 0, 0x79}, /* UPPERCASE YERI / CYRILLIC CAPITAL LETTER YERI */ {"\x97", 0, 0x7A}, /* CYRILLIC CAPITAL LETTER ZE */ {"\xA8", 0, 0x7B}, /* CYRILLIC CAPITAL LETTER SHA */ {"\xAD", 0, 0x7C}, /* CYRILLIC CAPITAL LETTER E */ {"\xA9", 0, 0x7D}, /* CYRILLIC CAPITAL LETTER SHCHA */ {"\xA7", 0, 0x7E}, /* CYRILLIC CAPITAL LETTER CHE */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_4Epage2 = { marc8r_4Epage2_flat, 0 }; /* PAGE 1 */ struct yaz_iconv_trie_flat marc8r_4Epage1_flat[] = { {"\x8E", 0, 0x40}, /* LOWERCASE IU / CYRILLIC SMALL LETTER YU */ {"\x86", 0, 0x43}, /* CYRILLIC SMALL LETTER TSE */ {"\x84", 0, 0x46}, /* CYRILLIC SMALL LETTER EF */ {"\x85", 0, 0x48}, /* LOWERCASE KHA / CYRILLIC SMALL LETTER HA */ {"\x8F", 0, 0x51}, /* LOWERCASE IA / CYRILLIC SMALL LETTER YA */ {"\x80", 0, 0x52}, /* CYRILLIC SMALL LETTER ER */ {"\x81", 0, 0x53}, /* CYRILLIC SMALL LETTER ES */ {"\x82", 0, 0x54}, /* CYRILLIC SMALL LETTER TE */ {"\x83", 0, 0x55}, /* CYRILLIC SMALL LETTER U */ {"\x8C", 0, 0x58}, /* CYRILLIC SMALL LETTER SOFT SIGN */ {"\x8B", 0, 0x59}, /* LOWERCASE YERI / CYRILLIC SMALL LETTER YERI */ {"\x88", 0, 0x5B}, /* CYRILLIC SMALL LETTER SHA */ {"\x8D", 0, 0x5C}, /* LOWERCASE REVERSED E / CYRILLIC SMALL LETTER E */ {"\x89", 0, 0x5D}, /* CYRILLIC SMALL LETTER SHCHA */ {"\x87", 0, 0x5E}, /* CYRILLIC SMALL LETTER CHE */ {"\x8A", 0, 0x5F}, /* CYRILLIC SMALL LETTER HARD SIGN */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_4Epage1 = { marc8r_4Epage1_flat, 0 }; /* PAGE 0 */ struct yaz_iconv_trie_dir marc8r_4Epage0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x21} /* EXCLAMATION MARK */, {0, 0, 0x22} /* QUOTATION MARK */, {0, 0, 0x23} /* NUMBER SIGN */, {0, 0, 0x24} /* DOLLAR SIGN */, {0, 0, 0x25} /* PERCENT SIGN */, {0, 0, 0x26} /* AMPERSAND */, {0, 0, 0x27} /* APOSTROPHE */, {0, 0, 0x28} /* OPENING PARENTHESIS / LEFT PARENTHESIS */, {0, 0, 0x29} /* CLOSING PARENTHESIS / RIGHT PARENTHESIS */, {0, 0, 0x2A} /* ASTERISK */, {0, 0, 0x2B} /* PLUS SIGN */, {0, 0, 0x2C} /* COMMA */, {0, 0, 0x2D} /* HYPHEN-MINUS */, {0, 0, 0x2E} /* PERIOD, DECIMAL POINT / FULL STOP */, {0, 0, 0x2F} /* SLASH / SOLIDUS */, {0, 0, 0x30} /* DIGIT ZERO */, {0, 0, 0x31} /* DIGIT ONE */, {0, 0, 0x32} /* DIGIT TWO */, {0, 0, 0x33} /* DIGIT THREE */, {0, 0, 0x34} /* DIGIT FOUR */, {0, 0, 0x35} /* DIGIT FIVE */, {0, 0, 0x36} /* DIGIT SIX */, {0, 0, 0x37} /* DIGIT SEVEN */, {0, 0, 0x38} /* DIGIT EIGHT */, {0, 0, 0x39} /* DIGIT NINE */, {0, 0, 0x3A} /* COLON */, {0, 0, 0x3B} /* SEMICOLON */, {0, 0, 0x3C} /* LESS-THAN SIGN */, {0, 0, 0x3D} /* EQUALS SIGN */, {0, 0, 0x3E} /* GREATER-THAN SIGN */, {0, 0, 0x3F} /* QUESTION MARK */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {3, 0, 0}, {2, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_4Epage0 = { 0, marc8r_4Epage0_dir }; struct yaz_iconv_trie *marc8r_4Eptrs [] = { &marc8r_4Epage0, &marc8r_4Epage1, &marc8r_4Epage2, 0, }; unsigned long yaz_marc8r_4E_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_4Eptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 42 */ /* PAGE 0 */ struct yaz_iconv_trie_flat marc8r_51page0_flat[] = { {"\xD2\x91", 0, 0x40}, /* LOWERCASE GE WITH UPTURN / CYRILLIC SMALL LETTER GHE WITH UPTURN */ {"\xD1\x92", 0, 0x41}, /* LOWERCASE DJE / CYRILLIC SMALL LETTER DJE (Serbian) */ {"\xD1\x93", 0, 0x42}, /* CYRILLIC SMALL LETTER GJE */ {"\xD1\x94", 0, 0x43}, /* LOWERCASE E / CYRILLIC SMALL LETTER UKRAINIAN IE */ {"\xD1\x91", 0, 0x44}, /* CYRILLIC SMALL LETTER IO */ {"\xD1\x95", 0, 0x45}, /* CYRILLIC SMALL LETTER DZE */ {"\xD1\x96", 0, 0x46}, /* LOWERCASE I / CYRILLIC SMALL LETTER BYELORUSSIAN-UKRANIAN I */ {"\xD1\x97", 0, 0x47}, /* LOWERCASE YI / CYRILLIC SMALL LETTER YI (Ukrainian) */ {"\xD1\x98", 0, 0x48}, /* CYRILLIC SMALL LETTER JE */ {"\xD1\x99", 0, 0x49}, /* CYRILLIC SMALL LETTER LJE */ {"\xD1\x9A", 0, 0x4A}, /* CYRILLIC SMALL LETTER NJE */ {"\xD1\x9B", 0, 0x4B}, /* LOWERCASE TSHE / CYRILLIC SMALL LETTER TSHE (Serbian) */ {"\xD1\x9C", 0, 0x4C}, /* CYRILLIC SMALL LETTER KJE */ {"\xD1\x9E", 0, 0x4D}, /* LOWERCASE SHORT U / CYRILLIC SMALL LETTER SHORT U (Byelorussian) */ {"\xD1\x9F", 0, 0x4E}, /* CYRILLIC SMALL LETTER DZHE */ {"\xD1\xA3", 0, 0x50}, /* CYRILLIC SMALL LETTER YAT */ {"\xD1\xB3", 0, 0x51}, /* CYRILLIC SMALL LETTER FITA */ {"\xD1\xB5", 0, 0x52}, /* CYRILLIC SMALL LETTER IZHITSA */ {"\xD1\xAB", 0, 0x53}, /* CYRILLIC SMALL LETTER BIG YUS */ {"\x5B", 0, 0x5B}, /* OPENING SQUARE BRACKET / LEFT SQUARE BRACKET */ {"\x5D", 0, 0x5D}, /* CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET */ {"\x5F", 0, 0x5F}, /* SPACING UNDERSCORE / LOW LINE */ {"\xD2\x90", 0, 0x60}, /* UPPERCASE GE WITH UPTURN / CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ {"\xD0\x82", 0, 0x61}, /* UPPERCASE DJE / CYRILLIC CAPITAL LETTER DJE (Serbian) */ {"\xD0\x83", 0, 0x62}, /* CYRILLIC CAPITAL LETTER GJE */ {"\xD0\x84", 0, 0x63}, /* UPPERCASE E / CYRILLIC CAPITAL LETTER UKRAINIAN IE */ {"\xD0\x81", 0, 0x64}, /* CYRILLIC CAPITAL LETTER IO */ {"\xD0\x85", 0, 0x65}, /* CYRILLIC CAPITAL LETTER DZE */ {"\xD0\x86", 0, 0x66}, /* UPPERCASE I / CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRANIAN I */ {"\xD0\x87", 0, 0x67}, /* UPPERCASE YI / CYRILLIC CAPITAL LETTER YI (Ukrainian) */ {"\xD0\x88", 0, 0x68}, /* CYRILLIC CAPITAL LETTER JE */ {"\xD0\x89", 0, 0x69}, /* CYRILLIC CAPITAL LETTER LJE */ {"\xD0\x8A", 0, 0x6A}, /* CYRILLIC CAPITAL LETTER NJE */ {"\xD0\x8B", 0, 0x6B}, /* UPPERCASE TSHE / CYRILLIC CAPITAL LETTER TSHE (Serbian) */ {"\xD0\x8C", 0, 0x6C}, /* CYRILLIC CAPITAL LETTER KJE */ {"\xD0\x8E", 0, 0x6D}, /* UPPERCASE SHORT U / CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) */ {"\xD0\x8F", 0, 0x6E}, /* CYRILLIC CAPITAL LETTER DZHE */ {"\xD0\xAA", 0, 0x6F}, /* CYRILLIC CAPITAL LETTER HARD SIGN */ {"\xD1\xA2", 0, 0x70}, /* CYRILLIC CAPITAL LETTER YAT */ {"\xD1\xB2", 0, 0x71}, /* CYRILLIC CAPITAL LETTER FITA */ {"\xD1\xB4", 0, 0x72}, /* CYRILLIC CAPITAL LETTER IZHITSA */ {"\xD1\xAA", 0, 0x73}, /* CYRILLIC CAPITAL LETTER BIG YUS */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_51page0 = { marc8r_51page0_flat, 0 }; struct yaz_iconv_trie *marc8r_51ptrs [] = { &marc8r_51page0, 0, }; unsigned long yaz_marc8r_51_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_51ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 83 */ /* PAGE 3 */ struct yaz_iconv_trie_flat marc8r_33page3_flat[] = { {"\x80\x9D", 0, 0x79}, /* RIGHT DOUBLE QUOTATION MARK */ {"\x80\x9C", 0, 0x7A}, /* LEFT DOUBLE QUOTATION MARK */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_33page3 = { marc8r_33page3_flat, 0 }; /* PAGE 2 */ struct yaz_iconv_trie_flat marc8r_33page2_flat[] = { {"\x8C", 0, 0x2C}, /* ARABIC COMMA */ {"\x9B", 0, 0x3B}, /* ARABIC SEMICOLON */ {"\x9F", 0, 0x3F}, /* ARABIC QUESTION MARK */ {"\xA1", 0, 0x41}, /* HAMZAH / ARABIC LETTER HAMZA */ {"\xA2", 0, 0x42}, /* ARABIC LETTER ALEF WITH MADDA ABOVE */ {"\xA3", 0, 0x43}, /* ARABIC LETTER ALEF WITH HAMZA ABOVE */ {"\xA4", 0, 0x44}, /* ARABIC LETTER WAW WITH HAMZA ABOVE */ {"\xA5", 0, 0x45}, /* ARABIC LETTER ALEF WITH HAMZA BELOW */ {"\xA6", 0, 0x46}, /* ARABIC LETTER YEH WITH HAMZA ABOVE */ {"\xA7", 0, 0x47}, /* ARABIC LETTER ALEF */ {"\xA8", 0, 0x48}, /* ARABIC LETTER BEH */ {"\xA9", 0, 0x49}, /* ARABIC LETTER TEH MARBUTA */ {"\xAA", 0, 0x4A}, /* ARABIC LETTER TEH */ {"\xAB", 0, 0x4B}, /* ARABIC LETTER THEH */ {"\xAC", 0, 0x4C}, /* ARABIC LETTER JEEM */ {"\xAD", 0, 0x4D}, /* ARABIC LETTER HAH */ {"\xAE", 0, 0x4E}, /* ARABIC LETTER KHAH */ {"\xAF", 0, 0x4F}, /* ARABIC LETTER DAL */ {"\xB0", 0, 0x50}, /* ARABIC LETTER THAL */ {"\xB1", 0, 0x51}, /* ARABIC LETTER REH */ {"\xB2", 0, 0x52}, /* ARABIC LETTER ZAIN */ {"\xB3", 0, 0x53}, /* ARABIC LETTER SEEN */ {"\xB4", 0, 0x54}, /* ARABIC LETTER SHEEN */ {"\xB5", 0, 0x55}, /* ARABIC LETTER SAD */ {"\xB6", 0, 0x56}, /* ARABIC LETTER DAD */ {"\xB7", 0, 0x57}, /* ARABIC LETTER TAH */ {"\xB8", 0, 0x58}, /* ARABIC LETTER ZAH */ {"\xB9", 0, 0x59}, /* ARABIC LETTER AIN */ {"\xBA", 0, 0x5A}, /* ARABIC LETTER GHAIN */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_33page2 = { marc8r_33page2_flat, 0 }; /* PAGE 1 */ struct yaz_iconv_trie_flat marc8r_33page1_flat[] = { {"\xAA", 0, 0x25}, /* PERCENT SIGN / ARABIC PERCENT SIGN */ {"\xAD", 0, 0x2A}, /* ASTERISK / ARABIC FIVE POINTED STAR */ {"\xA0", 0, 0x30}, /* ARABIC-INDIC DIGIT ZERO */ {"\xA1", 0, 0x31}, /* ARABIC-INDIC DIGIT ONE */ {"\xA2", 0, 0x32}, /* ARABIC-INDIC DIGIT TWO */ {"\xA3", 0, 0x33}, /* ARABIC-INDIC DIGIT THREE */ {"\xA4", 0, 0x34}, /* ARABIC-INDIC DIGIT FOUR */ {"\xA5", 0, 0x35}, /* ARABIC-INDIC DIGIT FIVE */ {"\xA6", 0, 0x36}, /* ARABIC-INDIC DIGIT SIX */ {"\xA7", 0, 0x37}, /* ARABIC-INDIC DIGIT SEVEN */ {"\xA8", 0, 0x38}, /* ARABIC-INDIC DIGIT EIGHT */ {"\xA9", 0, 0x39}, /* ARABIC-INDIC DIGIT NINE */ {"\x80", 0, 0x60}, /* ARABIC TATWEEL */ {"\x81", 0, 0x61}, /* ARABIC LETTER FEH */ {"\x82", 0, 0x62}, /* ARABIC LETTER QAF */ {"\x83", 0, 0x63}, /* ARABIC LETTER KAF */ {"\x84", 0, 0x64}, /* ARABIC LETTER LAM */ {"\x85", 0, 0x65}, /* ARABIC LETTER MEEM */ {"\x86", 0, 0x66}, /* ARABIC LETTER NOON */ {"\x87", 0, 0x67}, /* ARABIC LETTER HEH */ {"\x88", 0, 0x68}, /* ARABIC LETTER WAW */ {"\x89", 0, 0x69}, /* ARABIC LETTER ALEF MAKSURA */ {"\x8A", 0, 0x6A}, /* ARABIC LETTER YEH */ {"\x8B", 1, 0x6B}, /* ARABIC FATHATAN */ {"\x8C", 1, 0x6C}, /* ARABIC DAMMATAN */ {"\x8D", 1, 0x6D}, /* ARABIC KASRATAN */ {"\x8E", 1, 0x6E}, /* ARABIC FATHA */ {"\x8F", 1, 0x6F}, /* ARABIC DAMMA */ {"\x90", 1, 0x70}, /* ARABIC KASRA */ {"\x91", 1, 0x71}, /* ARABIC SHADDA */ {"\x92", 1, 0x72}, /* ARABIC SUKUN */ {"\xB1", 0, 0x73}, /* ARABIC LETTER ALEF WASLA */ {"\xB0", 0, 0x74}, /* ARABIC LETTER SUPERSCRIPT ALEF */ {"\xAC", 0, 0x78}, /* ARABIC THOUSANDS SEPARATOR */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_33page1 = { marc8r_33page1_flat, 0 }; /* PAGE 0 */ struct yaz_iconv_trie_dir marc8r_33page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x21} /* EXCLAMATION MARK */, {0, 0, 0x22} /* QUOTATION MARK */, {0, 0, 0x23} /* NUMBER SIGN */, {0, 0, 0x24} /* DOLLAR SIGN */, {0, 0, 0}, {0, 0, 0x26} /* AMPERSAND */, {0, 0, 0x27} /* APOSTROPHE */, {0, 0, 0x28} /* OPENING PARENTHESIS / LEFT PARENTHESIS */, {0, 0, 0x29} /* CLOSING PARENTHESIS / RIGHT PARENTHESIS */, {0, 0, 0}, {0, 0, 0x2B} /* PLUS SIGN */, {0, 0, 0}, {0, 0, 0x2D} /* HYPHEN-MINUS */, {0, 0, 0x2E} /* PERIOD, DECIMAL POINT / FULL STOP */, {0, 0, 0x2F} /* SLASH / SOLIDUS */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x3A} /* COLON */, {0, 0, 0}, {0, 0, 0x3C} /* LESS-THAN SIGN */, {0, 0, 0x3D} /* EQUALS SIGN */, {0, 0, 0x3E} /* GREATER-THAN SIGN */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x5B} /* OPENING SQUARE BRACKET / LEFT SQUARE BRACKET */, {0, 0, 0}, {0, 0, 0x5D} /* CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {3, 0, 0}, {2, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {4, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_33page0 = { 0, marc8r_33page0_dir }; struct yaz_iconv_trie *marc8r_33ptrs [] = { &marc8r_33page0, &marc8r_33page1, &marc8r_33page2, &marc8r_33page3, 0, }; unsigned long yaz_marc8r_33_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_33ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 90 */ /* PAGE 4 */ struct yaz_iconv_trie_flat marc8r_34page4_flat[] = { {"\x86", 1, 0x7D}, /* SHORT E / COMBINING BREVE */ {"\x8C", 1, 0x7E}, /* SHORT U / COMBINING CARON */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_34page4 = { marc8r_34page4_flat, 0 }; /* PAGE 3 */ struct yaz_iconv_trie_dir marc8r_34page3_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x2B} /* ARABIC LETTER BEHEH */, {0, 0, 0x2C} /* ARABIC LETTER HAH WITH HAMZA ABOVE */, {0, 0, 0x2D} /* ARABIC LETTER HAH WITH TWO ABOVE DOTS VERTICAL ABOVE */, {0, 0, 0x2E} /* ARABIC LETTER NYEH */, {0, 0, 0x2F} /* ARABIC LETTER DYEH */, {0, 0, 0x30} /* ARABIC LETTER HAH WITH THREE DOTS ABOVE */, {0, 0, 0x31} /* ARABIC LETTER TCHEH */, {0, 0, 0x33} /* ARABIC LETTER TCHEHEH */, {0, 0, 0x34} /* ARABIC LETTER DDAL */, {0, 0, 0x35} /* ARABIC LETTER DAL WITH RING */, {0, 0, 0x36} /* ARABIC LETTER DAL WITH DOT BELOW */, {0, 0, 0x37} /* ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH */, {0, 0, 0x38} /* ARABIC LETTER DAHAL */, {0, 0, 0x39} /* ARABIC LETTER DDAHAL */, {0, 0, 0x3A} /* ARABIC LETTER DUL */, {0, 0, 0x3B} /* ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS */, {0, 0, 0x3C} /* ARABIC LETTER DAL WITH FOUR DOTS ABOVE */, {0, 0, 0x3D} /* ARABIC LETTER RREH */, {0, 0, 0x3E} /* ARABIC LETTER REH WITH SMALL V */, {0, 0, 0x3F} /* ARABIC LETTER REH WITH RING */, {0, 0, 0x40} /* ARABIC LETTER REH WITH DOT BELOW */, {0, 0, 0x41} /* ARABIC LETTER REH WITH SMALL V BELOW */, {0, 0, 0x42} /* ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE */, {0, 0, 0x43} /* ARABIC LETTER REH WITH TWO DOTS ABOVE */, {0, 0, 0x44} /* ARABIC LETTER JEH */, {0, 0, 0x45} /* ARABIC LETTER REH WITH FOUR DOTS ABOVE */, {0, 0, 0x46} /* ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE */, {0, 0, 0x47} /* ARABIC LETTER SEEN WITH THREE DOTS BELOW */, {0, 0, 0x48} /* ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE */, {0, 0, 0x4A} /* ARABIC LETTER SAD WITH TWO DOTS BELOW */, {0, 0, 0x4B} /* ARABIC LETTER SAD WITH THREE DOTS ABOVE */, {0, 0, 0x4D} /* ARABIC LETTER TAH WITH THREE DOTS ABOVE */, {0, 0, 0x4E} /* ARABIC LETTER AIN WITH THREE DOTS ABOVE */, {0, 0, 0x50} /* ARABIC LETTER DOTLESS FEH */, {0, 0, 0x51} /* ARABIC LETTER FEH WITH DOT MOVED BELOW */, {0, 0, 0x52} /* ARABIC LETTER FEH WITH DOT BELOW */, {0, 0, 0x53} /* ARABIC LETTER VEH */, {0, 0, 0x54} /* ARABIC LETTER FEH WITH THREE DOTS BELOW */, {0, 0, 0x55} /* ARABIC LETTER PEHEH */, {0, 0, 0x56} /* ARABIC LETTER QAF WITH DOT ABOVE */, {0, 0, 0x57} /* ARABIC LETTER QAF WITH THREE DOTS ABOVE */, {0, 0, 0x58} /* ARABIC LETTER KEHEH */, {0, 0, 0x59} /* ARABIC LETTER SWASH KAF */, {0, 0, 0x5A} /* ARABIC LETTER KAF WITH RING */, {0, 0, 0x5B} /* ARABIC LETTER KAF WITH DOT ABOVE */, {0, 0, 0x5C} /* ARABIC LETTER NG */, {0, 0, 0x5D} /* ARABIC LETTER KAF WITH THREE DOTS BELOW */, {0, 0, 0x5E} /* ARABIC LETTER GAF */, {0, 0, 0x5F} /* ARABIC LETTER GAF WITH RING */, {0, 0, 0x60} /* ARABIC LETTER NGOEH */, {0, 0, 0x61} /* ARABIC LETTER GAF WITH TWO DOTS BELOW */, {0, 0, 0x62} /* ARABIC LETTER GUEH */, {0, 0, 0x63} /* ARABIC LETTER GAF WITH THREE DOTS ABOVE */, {0, 0, 0x64} /* ARABIC LETTER LAM WITH SMALL V */, {0, 0, 0x65} /* ARABIC LETTER LAM WITH DOT ABOVE */, {0, 0, 0x66} /* ARABIC LETTER LAM WITH THREE DOTS ABOVE */, {0, 0, 0x67} /* ARABIC LETTER LAM WITH THREE DOTS BELOW */, {0, 0, 0x6C} /* ARABIC LETTER NOON WITH DOT BELOW */, {0, 0, 0x68} /* ARABIC LETTER NOON GHUNNA */, {0, 0, 0x69} /* ARABIC LETTER RNOON */, {0, 0, 0x6A} /* ARABIC LETTER NOON WITH RING */, {0, 0, 0x6B} /* ARABIC LETTER NOON WITH THREE DOTS ABOVE */, {0, 0, 0x6D} /* ARABIC LETTER HEH DOACHASHMEE */, {0, 0, 0x32} /* ARABIC LETTER TCHEH WITH DOT ABOVE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_34page3 = { 0, marc8r_34page3_dir }; /* PAGE 2 */ struct yaz_iconv_trie_flat marc8r_34page2_flat[] = { {"\xB2", 0, 0x22}, /* ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE */ {"\xB3", 0, 0x23}, /* ARABIC LETTER ALEF WITH WAVY HAMZA BELOW */ {"\xB9", 0, 0x24}, /* ARABIC LETTER TTEH */ {"\xBA", 0, 0x25}, /* ARABIC LETTER TTEHEH */ {"\xBB", 0, 0x26}, /* ARABIC LETTER BBEH */ {"\xBC", 0, 0x27}, /* ARABIC LETTER TEH WITH RING */ {"\xBD", 0, 0x28}, /* ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS */ {"\xBE", 0, 0x29}, /* ARABIC LETTER PEH */ {"\xBF", 0, 0x2A}, /* ARABIC LETTER TEHEH */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_34page2 = { marc8r_34page2_flat, 0 }; /* PAGE 1 */ struct yaz_iconv_trie_flat marc8r_34page1_flat[] = { {"\xBD", 0, 0x21}, /* DOUBLE ALEF WITH HAMZA ABOVE / ARABIC SIGN SINDHI AMPERSAND */ {"\xBA", 0, 0x49}, /* ARABIC LETTER SHEEN WITH DOT BELOW */ {"\xBB", 0, 0x4C}, /* ARABIC LETTER DAD WITH DOT BELOW */ {"\xBC", 0, 0x4F}, /* ARABIC LETTER GHAIN WITH DOT BELOW */ {"\x80", 0, 0x6E}, /* HEH WITH HAMZA ABOVE / ARABIC LETTER HEH WITH YEH ABOVE */ {"\x84", 0, 0x6F}, /* ARABIC LETTER WAW WITH RING */ {"\x85", 0, 0x70}, /* KYRGHYZ OE / ARABIC LETTER KIRGHIZ OE */ {"\x86", 0, 0x71}, /* ARABIC LETTER OE */ {"\x8A", 0, 0x72}, /* ARABIC LETTER WAW WITH TWO DOTS ABOVE */ {"\x8B", 0, 0x73}, /* ARABIC LETTER VE */ {"\x8D", 0, 0x74}, /* ARABIC LETTER YEH WITH TAIL */ {"\x8E", 0, 0x75}, /* ARABIC LETTER YEH WITH SMALL V */ {"\x90", 0, 0x76}, /* ARABIC LETTER E */ {"\x92", 0, 0x77}, /* ARABIC LETTER YEH BARREE */ {"\x93", 0, 0x78}, /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_34page1 = { marc8r_34page1_flat, 0 }; /* PAGE 0 */ struct yaz_iconv_trie_dir marc8r_34page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {5, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {3, 0, 0}, {4, 0, 0}, {2, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_34page0 = { 0, marc8r_34page0_dir }; struct yaz_iconv_trie *marc8r_34ptrs [] = { &marc8r_34page0, &marc8r_34page1, &marc8r_34page2, &marc8r_34page3, &marc8r_34page4, 0, }; unsigned long yaz_marc8r_34_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_34ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 73 */ /* PAGE 6 */ struct yaz_iconv_trie_flat marc8r_53page6_flat[] = { {"\x9A", 0, 0x47}, /* GREEK LETTER STIGMA */ {"\x9C", 0, 0x48}, /* GREEK LETTER DIGAMMA */ {"\x9E", 0, 0x54}, /* GREEK LETTER KOPPA */ {"\xA0", 0, 0x5E}, /* GREEK LETTER SAMPI */ {"\x90", 0, 0x63}, /* GREEK BETA SYMBOL / SMALL LETTER BETA MIDDLE OF WORD */ {"\x9B", 0, 0x67}, /* GREEK SMALL LETTER STIGMA */ {"\x9D", 0, 0x68}, /* GREEK SMALL LETTER DIGAMMA */ {"\x80", 0, 0x73}, /* GREEK SMALL LETTER PI */ {"\x9F", 0, 0x74}, /* GREEK SMALL LETTER KOPPA */ {"\x81", 0, 0x75}, /* GREEK SMALL LETTER RHO */ {"\x83", 0, 0x76}, /* GREEK SMALL LETTER SIGMA */ {"\x82", 0, 0x77}, /* GREEK SMALL LETTER FINAL SIGMA / SMALL LETTER SIGMA END OF WORD */ {"\x84", 0, 0x78}, /* GREEK SMALL LETTER TAU */ {"\x85", 0, 0x79}, /* GREEK SMALL LETTER UPSILON */ {"\x86", 0, 0x7A}, /* GREEK SMALL LETTER PHI */ {"\x87", 0, 0x7B}, /* GREEK SMALL LETTER CHI */ {"\x88", 0, 0x7C}, /* GREEK SMALL LETTER PSI */ {"\x89", 0, 0x7D}, /* GREEK SMALL LETTER OMEGA */ {"\xA1", 0, 0x7E}, /* GREEK SMALL LETTER SAMPI */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_53page6 = { marc8r_53page6_flat, 0 }; /* PAGE 5 */ struct yaz_iconv_trie_flat marc8r_53page5_flat[] = { {"\x87", 0, 0x3B}, /* GREEK ANO TELEIA / RAISED DOT, GREEK SEMICOLON */ {"\x91", 0, 0x41}, /* GREEK CAPITAL LETTER ALPHA */ {"\x92", 0, 0x42}, /* GREEK CAPITAL LETTER BETA */ {"\x93", 0, 0x44}, /* GREEK CAPITAL LETTER GAMMA */ {"\x94", 0, 0x45}, /* GREEK CAPITAL LETTER DELTA */ {"\x95", 0, 0x46}, /* GREEK CAPITAL LETTER EPSILON */ {"\x96", 0, 0x49}, /* GREEK CAPITAL LETTER ZETA */ {"\x97", 0, 0x4A}, /* GREEK CAPITAL LETTER ETA */ {"\x98", 0, 0x4B}, /* GREEK CAPITAL LETTER THETA */ {"\x99", 0, 0x4C}, /* GREEK CAPITAL LETTER IOTA */ {"\x9A", 0, 0x4D}, /* GREEK CAPITAL LETTER KAPPA */ {"\x9B", 0, 0x4E}, /* GREEK CAPITAL LETTER LAMDA */ {"\x9C", 0, 0x4F}, /* GREEK CAPITAL LETTER MU */ {"\x9D", 0, 0x50}, /* GREEK CAPITAL LETTER NU */ {"\x9E", 0, 0x51}, /* GREEK CAPITAL LETTER XI */ {"\x9F", 0, 0x52}, /* GREEK CAPITAL LETTER OMICRON */ {"\xA0", 0, 0x53}, /* GREEK CAPITAL LETTER PI */ {"\xA1", 0, 0x55}, /* GREEK CAPITAL LETTER RHO */ {"\xA3", 0, 0x56}, /* GREEK CAPITAL LETTER SIGMA */ {"\xA4", 0, 0x58}, /* GREEK CAPITAL LETTER TAU */ {"\xA5", 0, 0x59}, /* GREEK CAPITAL LETTER UPSILON */ {"\xA6", 0, 0x5A}, /* GREEK CAPITAL LETTER PHI */ {"\xA7", 0, 0x5B}, /* GREEK CAPITAL LETTER CHI */ {"\xA8", 0, 0x5C}, /* GREEK CAPITAL LETTER PSI */ {"\xA9", 0, 0x5D}, /* GREEK CAPITAL LETTER OMEGA */ {"\xB1", 0, 0x61}, /* GREEK SMALL LETTER ALPHA */ {"\xB2", 0, 0x62}, /* GREEK SMALL LETTER BETA / SMALL LETTER BETA BEGINNING OF WORD */ {"\xB3", 0, 0x64}, /* GREEK SMALL LETTER GAMMA */ {"\xB4", 0, 0x65}, /* GREEK SMALL LETTER DELTA */ {"\xB5", 0, 0x66}, /* GREEK SMALL LETTER EPSILON */ {"\xB6", 0, 0x69}, /* GREEK SMALL LETTER ZETA */ {"\xB7", 0, 0x6A}, /* GREEK SMALL LETTER ETA */ {"\xB8", 0, 0x6B}, /* GREEK SMALL LETTER THETA */ {"\xB9", 0, 0x6C}, /* GREEK SMALL LETTER IOTA */ {"\xBA", 0, 0x6D}, /* GREEK SMALL LETTER KAPPA */ {"\xBB", 0, 0x6E}, /* GREEK SMALL LETTER LAMDA */ {"\xBC", 0, 0x6F}, /* GREEK SMALL LETTER MU */ {"\xBD", 0, 0x70}, /* GREEK SMALL LETTER NU */ {"\xBE", 0, 0x71}, /* GREEK SMALL LETTER XI */ {"\xBF", 0, 0x72}, /* GREEK SMALL LETTER OMICRON */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_53page5 = { marc8r_53page5_flat, 0 }; /* PAGE 4 */ struct yaz_iconv_trie_flat marc8r_53page4_flat[] = { {"\x80\x9C", 0, 0x32}, /* LEFT DOUBLE QUOTATION MARK */ {"\x80\x9D", 0, 0x33}, /* RIGHT DOUBLE QUOTATION MARK */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_53page4 = { marc8r_53page4_flat, 0 }; /* PAGE 3 */ struct yaz_iconv_trie_flat marc8r_53page3_flat[] = { {"\xAB", 0, 0x30}, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ {"\xBB", 0, 0x31}, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_53page3 = { marc8r_53page3_flat, 0 }; /* PAGE 2 */ struct yaz_iconv_trie_flat marc8r_53page2_flat[] = { {"\x82", 1, 0x24}, /* COMBINING GREEK PERISPOMENI / CIRCUMFLEX */ {"\x85", 1, 0x27}, /* COMBINING GREEK YPOGEGRAMMENI / IOTA SUBSCRIPT */ {"\xB4", 0, 0x34}, /* GREEK NUMERAL SIGN / UPPER PRIME */ {"\xB5", 0, 0x35}, /* GREEK LOWER NUMERAL SIGN / LOWER PRIME */ {"\xBE", 0, 0x3F}, /* GREEK QUESTION MARK */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_53page2 = { marc8r_53page2_flat, 0 }; /* PAGE 1 */ struct yaz_iconv_trie_flat marc8r_53page1_flat[] = { {"\x80", 1, 0x21}, /* COMBINING GRAVE ACCENT */ {"\x81", 1, 0x22}, /* COMBINING ACUTE ACCENT */ {"\x88", 1, 0x23}, /* COMBINING DIAERESIS */ {"\x93", 1, 0x25}, /* COMBINING COMMA ABOVE / SMOOTH BREATHING */ {"\x94", 1, 0x26}, /* COMBINING REVERSED COMMA ABOVE / ROUGH BREATHING */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_53page1 = { marc8r_53page1_flat, 0 }; /* PAGE 0 */ struct yaz_iconv_trie_dir marc8r_53page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {4, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {2, 0, 0}, {3, 0, 0}, {6, 0, 0}, {7, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {5, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_53page0 = { 0, marc8r_53page0_dir }; struct yaz_iconv_trie *marc8r_53ptrs [] = { &marc8r_53page0, &marc8r_53page1, &marc8r_53page2, &marc8r_53page3, &marc8r_53page4, &marc8r_53page5, &marc8r_53page6, 0, }; unsigned long yaz_marc8r_53_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_53ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 15800 */ /* PAGE 526 */ struct yaz_iconv_trie_flat marc8r_31page526_flat[] = { {"\x80", 0, 0x6F764E}, /* Korean hangul (ancient) */ {"\x81", 0, 0x6F764F}, /* Korean hangul (ancient) */ {"\x82", 0, 0x6F7650}, /* Korean hangul (ancient) */ {"\x83", 0, 0x6F7651}, /* Korean hangul (ancient) */ {"\x84", 0, 0x6F7652}, /* Korean hangul (ancient) */ {"\x85", 0, 0x6F7653}, /* Korean hangul (ancient) */ {"\x86", 0, 0x6F7654}, /* Korean hangul (ancient) */ {"\x87", 0, 0x6F7655}, /* Korean hangul (ancient) */ {"\x88", 0, 0x6F7656}, /* Korean hangul (ancient) */ {"\x89", 0, 0x6F7657}, /* Korean hangul (ancient) */ {"\x8A", 0, 0x6F7723}, /* Korean hangul */ {"\x90", 0, 0x212A21}, /* EACC component character */ {"\x91", 0, 0x212A22}, /* EACC component character */ {"\x92", 0, 0x212A23}, /* EACC component character */ {"\x93", 0, 0x212A24}, /* EACC component character */ {"\x94", 0, 0x212A25}, /* EACC component character */ {"\x95", 0, 0x212A26}, /* EACC component character */ {"\x96", 0, 0x212A28}, /* EACC component character */ {"\x97", 0, 0x212A29}, /* EACC component character */ {"\x98", 0, 0x212A2A}, /* EACC component character */ {"\x99", 0, 0x212A2B}, /* EACC component character */ {"\x9A", 0, 0x212A2C}, /* EACC component character */ {"\x9B", 0, 0x212A2D}, /* EACC component character */ {"\x9C", 0, 0x212A2E}, /* EACC component character */ {"\x9D", 0, 0x212A2F}, /* EACC component character */ {"\x9E", 0, 0x212A30}, /* EACC component character */ {"\x9F", 0, 0x212A32}, /* EACC component character */ {"\xA0", 0, 0x212A33}, /* EACC component character */ {"\xA1", 0, 0x212A34}, /* EACC component character */ {"\xA2", 0, 0x212A35}, /* EACC component character */ {"\xA3", 0, 0x212A36}, /* EACC component character */ {"\xA4", 0, 0x212A37}, /* EACC component character */ {"\xA5", 0, 0x212A38}, /* EACC component character */ {"\xA6", 0, 0x212A39}, /* EACC component character */ {"\xA7", 0, 0x212A3A}, /* EACC component character */ {"\xA8", 0, 0x212A3B}, /* EACC component character */ {"\xA9", 0, 0x212A3C}, /* EACC component character */ {"\xAA", 0, 0x212A3D}, /* EACC component character */ {"\xAB", 0, 0x212A3E}, /* EACC component character */ {"\xAC", 0, 0x212A3F}, /* EACC component character */ {"\xAD", 0, 0x212A40}, /* EACC component character */ {"\xAE", 0, 0x212A41}, /* EACC component character */ {"\xAF", 0, 0x212A42}, /* EACC component character */ {"\xB0", 0, 0x212A43}, /* EACC component character */ {"\xB1", 0, 0x212A44}, /* EACC component character */ {"\xB2", 0, 0x212A45}, /* EACC component character */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page526 = { marc8r_31page526_flat, 0 }; /* PAGE 525 */ struct yaz_iconv_trie_flat marc8r_31page525_flat[] = { {"\xB0", 0, 0x6F7624}, /* Korean hangul (ancient) */ {"\xB2", 0, 0x6F7640}, /* Korean hangul (ancient) */ {"\xB3", 0, 0x6F7641}, /* Korean hangul (ancient) */ {"\xB4", 0, 0x6F7642}, /* Korean hangul (ancient) */ {"\xB5", 0, 0x6F7643}, /* Korean hangul (ancient) */ {"\xB6", 0, 0x6F7644}, /* Korean hangul (ancient) */ {"\xB7", 0, 0x6F7645}, /* Korean hangul (ancient) */ {"\xB8", 0, 0x6F7646}, /* Korean hangul (ancient) */ {"\xB9", 0, 0x6F7647}, /* Korean hangul (ancient) */ {"\xBA", 0, 0x6F7648}, /* Korean hangul (ancient) */ {"\xBB", 0, 0x6F7649}, /* Korean hangul (ancient) */ {"\xBC", 0, 0x6F764A}, /* Korean hangul (ancient) */ {"\xBD", 0, 0x6F764B}, /* Korean hangul (ancient) */ {"\xBE", 0, 0x6F764C}, /* Korean hangul (ancient) */ {"\xBF", 0, 0x6F764D}, /* Korean hangul (ancient) */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page525 = { marc8r_31page525_flat, 0 }; /* PAGE 524 */ struct yaz_iconv_trie_flat marc8r_31page524_flat[] = { {"\xBC\x88", 0, 0x212328}, /* Ideographic left parenthesis */ {"\xBC\x89", 0, 0x212329}, /* Ideographic right parenthesis */ {"\xBC\x8D", 0, 0x21232D}, /* Ideographic hyphen minus */ {"\xBC\xBB", 0, 0x212B31}, /* Ideographic left square bracket */ {"\xBC\xBD", 0, 0x212B32}, /* Ideographic right square bracket */ {"\xBC\x8E", 0, 0x212B34}, /* Ideographic variant full stop */ {"\xBC\x8C", 0, 0x212B38}, /* Ideographic variant comma */ {"\xBC\x9B", 0, 0x212B39}, /* Ideographic semicolon */ {"\xBC\x9A", 0, 0x212B3A}, /* Ideographic colon */ {"\xBC\x9F", 0, 0x212B3B}, /* Ideographic question mark */ {"\xBC\x81", 0, 0x212B3D}, /* Ideographic exclamation point */ {"\xBC\x8F", 0, 0x212B59}, /* Ideographic solidus */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page524 = { marc8r_31page524_flat, 0 }; /* PAGE 523 */ struct yaz_iconv_trie_dir marc8r_31page523_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {526, 0, 0}, {527, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page523 = { 0, marc8r_31page523_dir }; /* PAGE 522 */ struct yaz_iconv_trie_flat marc8r_31page522_flat[] = { {"\x81", 0, 0x6F7621}, /* Korean hangul */ {"\x86", 0, 0x6F7622}, /* Korean hangul */ {"\x8D", 0, 0x6F7625}, /* Korean hangul (ancient) */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page522 = { marc8r_31page522_flat, 0 }; /* PAGE 521 */ struct yaz_iconv_trie_flat marc8r_31page521_flat[] = { {"\x88", 0, 0x6F5D78}, /* Korean hangul */ {"\x89", 0, 0x6F5D79}, /* Korean hangul */ {"\x8C", 0, 0x6F5D7A}, /* Korean hangul */ {"\x90", 0, 0x6F5D7B}, /* Korean hangul */ {"\x98", 0, 0x6F5D7C}, /* Korean hangul */ {"\x99", 0, 0x6F5D7D}, /* Korean hangul */ {"\x9B", 0, 0x6F5D7E}, /* Korean hangul */ {"\x9D", 0, 0x6F5E21}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page521 = { marc8r_31page521_flat, 0 }; /* PAGE 520 */ struct yaz_iconv_trie_flat marc8r_31page520_flat[] = { {"\x84", 0, 0x6F5D68}, /* Korean hangul */ {"\x89", 0, 0x6F5D69}, /* Korean hangul */ {"\x90", 0, 0x6F5D6A}, /* Korean hangul */ {"\x91", 0, 0x6F5D6B}, /* Korean hangul */ {"\x94", 0, 0x6F5D6C}, /* Korean hangul */ {"\x97", 0, 0x6F5D6D}, /* Korean hangul */ {"\x98", 0, 0x6F5D6E}, /* Korean hangul */ {"\x99", 0, 0x6F5D6F}, /* Korean hangul */ {"\xA0", 0, 0x6F5D70}, /* Korean hangul */ {"\xA1", 0, 0x6F5D71}, /* Korean hangul */ {"\xA3", 0, 0x6F5D72}, /* Korean hangul */ {"\xA5", 0, 0x6F5D73}, /* Korean hangul */ {"\xA9", 0, 0x6F5D74}, /* Korean hangul */ {"\xAC", 0, 0x6F5D75}, /* Korean hangul */ {"\xB0", 0, 0x6F5D76}, /* Korean hangul */ {"\xB4", 0, 0x6F5D77}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page520 = { marc8r_31page520_flat, 0 }; /* PAGE 519 */ struct yaz_iconv_trie_flat marc8r_31page519_flat[] = { {"\x80", 0, 0x6F5D5C}, /* Korean hangul */ {"\x91", 0, 0x6F5D5D}, /* Korean hangul */ {"\x98", 0, 0x6F5D5E}, /* Korean hangul */ {"\x99", 0, 0x6F5D5F}, /* Korean hangul */ {"\x9C", 0, 0x6F5D60}, /* Korean hangul */ {"\xA0", 0, 0x6F5D61}, /* Korean hangul */ {"\xA8", 0, 0x6F5D62}, /* Korean hangul */ {"\xA9", 0, 0x6F5D63}, /* Korean hangul */ {"\xAD", 0, 0x6F5D65}, /* Korean hangul */ {"\xB4", 0, 0x6F5D66}, /* Korean hangul */ {"\xBC", 0, 0x6F5D67}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page519 = { marc8r_31page519_flat, 0 }; /* PAGE 518 */ struct yaz_iconv_trie_flat marc8r_31page518_flat[] = { {"\x84", 0, 0x6F5D4F}, /* Korean hangul */ {"\x85", 0, 0x6F5D50}, /* Korean hangul */ {"\x88", 0, 0x6F5D51}, /* Korean hangul */ {"\x8C", 0, 0x6F5D52}, /* Korean hangul */ {"\x91", 0, 0x6F5D53}, /* Korean hangul */ {"\x94", 0, 0x6F5D54}, /* Korean hangul */ {"\x97", 0, 0x6F5D55}, /* Korean hangul */ {"\xA0", 0, 0x6F5D56}, /* Korean hangul */ {"\xA4", 0, 0x6F5D57}, /* Korean hangul */ {"\xA8", 0, 0x6F5D58}, /* Korean hangul */ {"\xB0", 0, 0x6F5D59}, /* Korean hangul */ {"\xBC", 0, 0x6F5D5A}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page518 = { marc8r_31page518_flat, 0 }; /* PAGE 517 */ struct yaz_iconv_trie_flat marc8r_31page517_flat[] = { {"\x83", 0, 0x6F5D48}, /* Korean hangul */ {"\x8C", 0, 0x6F5D4A}, /* Korean hangul */ {"\x8D", 0, 0x6F5D4B}, /* Korean hangul */ {"\x9F", 0, 0x6F5D4C}, /* Korean hangul */ {"\xA1", 0, 0x6F5D4D}, /* Korean hangul */ {"\xA8", 0, 0x6F5D4E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page517 = { marc8r_31page517_flat, 0 }; /* PAGE 516 */ struct yaz_iconv_trie_flat marc8r_31page516_flat[] = { {"\x80", 0, 0x6F5D39}, /* Korean hangul */ {"\x88", 0, 0x6F5D3A}, /* Korean hangul */ {"\x89", 0, 0x6F5D3B}, /* Korean hangul */ {"\x8B", 0, 0x6F5D3C}, /* Korean hangul */ {"\x8D", 0, 0x6F5D3D}, /* Korean hangul */ {"\x94", 0, 0x6F5D3F}, /* Korean hangul */ {"\x95", 0, 0x6F5D40}, /* Korean hangul */ {"\x98", 0, 0x6F5D41}, /* Korean hangul */ {"\x9C", 0, 0x6F5D42}, /* Korean hangul */ {"\xA7", 0, 0x6F5D44}, /* Korean hangul */ {"\xA9", 0, 0x6F5D45}, /* Korean hangul */ {"\xB0", 0, 0x6F5D46}, /* Korean hangul */ {"\xB1", 0, 0x6F5D47}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page516 = { marc8r_31page516_flat, 0 }; /* PAGE 515 */ struct yaz_iconv_trie_flat marc8r_31page515_flat[] = { {"\x80", 0, 0x6F5D2C}, /* Korean hangul */ {"\x81", 0, 0x6F5D2D}, /* Korean hangul */ {"\x84", 0, 0x6F5D2E}, /* Korean hangul */ {"\x88", 0, 0x6F5D2F}, /* Korean hangul */ {"\x90", 0, 0x6F5D30}, /* Korean hangul */ {"\x91", 0, 0x6F5D31}, /* Korean hangul */ {"\x93", 0, 0x6F5D32}, /* Korean hangul */ {"\x94", 0, 0x6F5D33}, /* Korean hangul */ {"\x95", 0, 0x6F5D34}, /* Korean hangul */ {"\x9C", 0, 0x6F5D35}, /* Korean hangul */ {"\xB8", 0, 0x6F5D36}, /* Korean hangul */ {"\xB9", 0, 0x6F5D37}, /* Korean hangul */ {"\xBC", 0, 0x6F5D38}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page515 = { marc8r_31page515_flat, 0 }; /* PAGE 514 */ struct yaz_iconv_trie_flat marc8r_31page514_flat[] = { {"\x88", 0, 0x6F5C79}, /* Korean hangul */ {"\x89", 0, 0x6F5C7A}, /* Korean hangul */ {"\x8C", 0, 0x6F5C7B}, /* Korean hangul */ {"\x90", 0, 0x6F5C7C}, /* Korean hangul */ {"\x92", 0, 0x6F5C7D}, /* Korean hangul */ {"\x98", 0, 0x6F5C7E}, /* Korean hangul */ {"\x99", 0, 0x6F5D21}, /* Korean hangul */ {"\x9B", 0, 0x6F5D22}, /* Korean hangul */ {"\x9D", 0, 0x6F5D23}, /* Korean hangul */ {"\xA4", 0, 0x6F5D24}, /* Korean hangul */ {"\xA5", 0, 0x6F5D25}, /* Korean hangul */ {"\xA8", 0, 0x6F5D26}, /* Korean hangul */ {"\xAC", 0, 0x6F5D27}, /* Korean hangul */ {"\xB4", 0, 0x6F5D28}, /* Korean hangul */ {"\xB5", 0, 0x6F5D29}, /* Korean hangul */ {"\xB7", 0, 0x6F5D2A}, /* Korean hangul */ {"\xB9", 0, 0x6F5D2B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page514 = { marc8r_31page514_flat, 0 }; /* PAGE 513 */ struct yaz_iconv_trie_flat marc8r_31page513_flat[] = { {"\x84", 0, 0x6F5C72}, /* Korean hangul */ {"\x85", 0, 0x6F5C73}, /* Korean hangul */ {"\x87", 0, 0x6F5C74}, /* Korean hangul */ {"\x88", 0, 0x6F5C75}, /* Korean hangul */ {"\x89", 0, 0x6F5C76}, /* Korean hangul */ {"\x90", 0, 0x6F5C77}, /* Korean hangul */ {"\xA5", 0, 0x6F5C78}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page513 = { marc8r_31page513_flat, 0 }; /* PAGE 512 */ struct yaz_iconv_trie_flat marc8r_31page512_flat[] = { {"\x80", 0, 0x6F5C5B}, /* Korean hangul */ {"\x84", 0, 0x6F5C5C}, /* Korean hangul */ {"\x8C", 0, 0x6F5C5D}, /* Korean hangul */ {"\x8D", 0, 0x6F5C5E}, /* Korean hangul */ {"\x8F", 0, 0x6F5C5F}, /* Korean hangul */ {"\x91", 0, 0x6F5C60}, /* Korean hangul */ {"\x98", 0, 0x6F5C63}, /* Korean hangul */ {"\x99", 0, 0x6F5C64}, /* Korean hangul */ {"\x9C", 0, 0x6F5C65}, /* Korean hangul */ {"\xA0", 0, 0x6F5C66}, /* Korean hangul */ {"\xA5", 0, 0x6F5C67}, /* Korean hangul */ {"\xA8", 0, 0x6F5C68}, /* Korean hangul */ {"\xA9", 0, 0x6F5C69}, /* Korean hangul */ {"\xAB", 0, 0x6F5C6A}, /* Korean hangul */ {"\xAC", 0, 0x6F5C6B}, /* Korean hangul */ {"\xAD", 0, 0x6F5C6C}, /* Korean hangul */ {"\xB1", 0, 0x6F5C6D}, /* Korean hangul */ {"\xB4", 0, 0x6F5C6E}, /* Korean hangul */ {"\xB5", 0, 0x6F5C6F}, /* Korean hangul */ {"\xB8", 0, 0x6F5C70}, /* Korean hangul */ {"\xBC", 0, 0x6F5C71}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page512 = { marc8r_31page512_flat, 0 }; /* PAGE 511 */ struct yaz_iconv_trie_flat marc8r_31page511_flat[] = { {"\x84", 0, 0x6F5C53}, /* Korean hangul */ {"\x88", 0, 0x6F5C55}, /* Korean hangul */ {"\x8C", 0, 0x6F5C56}, /* Korean hangul */ {"\x94", 0, 0x6F5C57}, /* Korean hangul */ {"\x95", 0, 0x6F5C58}, /* Korean hangul */ {"\xBC", 0, 0x6F5C59}, /* Korean hangul */ {"\xBD", 0, 0x6F5C5A}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page511 = { marc8r_31page511_flat, 0 }; /* PAGE 510 */ struct yaz_iconv_trie_flat marc8r_31page510_flat[] = { {"\x8C", 0, 0x6F5C51}, /* Korean hangul */ {"\xA8", 0, 0x6F5C52}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page510 = { marc8r_31page510_flat, 0 }; /* PAGE 509 */ struct yaz_iconv_trie_flat marc8r_31page509_flat[] = { {"\x80", 0, 0x6F5C4C}, /* Korean hangul */ {"\x88", 0, 0x6F5C4D}, /* Korean hangul */ {"\x89", 0, 0x6F5C4E}, /* Korean hangul */ {"\x8B", 0, 0x6F5C4F}, /* Korean hangul */ {"\x8D", 0, 0x6F5C50}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page509 = { marc8r_31page509_flat, 0 }; /* PAGE 508 */ struct yaz_iconv_trie_flat marc8r_31page508_flat[] = { {"\x80", 0, 0x6F5C45}, /* Korean hangul */ {"\x84", 0, 0x6F5C46}, /* Korean hangul */ {"\x9C", 0, 0x6F5C47}, /* Korean hangul */ {"\xAF", 0, 0x6F5C48}, /* Korean hangul */ {"\xB8", 0, 0x6F5C49}, /* Korean hangul */ {"\xB9", 0, 0x6F5C4A}, /* Korean hangul */ {"\xBC", 0, 0x6F5C4B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page508 = { marc8r_31page508_flat, 0 }; /* PAGE 507 */ struct yaz_iconv_trie_flat marc8r_31page507_flat[] = { {"\x81", 0, 0x6F5C44}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page507 = { marc8r_31page507_flat, 0 }; /* PAGE 506 */ struct yaz_iconv_trie_flat marc8r_31page506_flat[] = { {"\x84", 0, 0x6F5C38}, /* Korean hangul */ {"\x85", 0, 0x6F5C39}, /* Korean hangul */ {"\x88", 0, 0x6F5C3A}, /* Korean hangul */ {"\x89", 0, 0x6F5C3B}, /* Korean hangul */ {"\x90", 0, 0x6F5C3C}, /* Korean hangul */ {"\xAC", 0, 0x6F5C3D}, /* Korean hangul */ {"\xAD", 0, 0x6F5C3E}, /* Korean hangul */ {"\xB0", 0, 0x6F5C3F}, /* Korean hangul */ {"\xB4", 0, 0x6F5C40}, /* Korean hangul */ {"\xBC", 0, 0x6F5C41}, /* Korean hangul */ {"\xBD", 0, 0x6F5C42}, /* Korean hangul */ {"\xBF", 0, 0x6F5C43}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page506 = { marc8r_31page506_flat, 0 }; /* PAGE 505 */ struct yaz_iconv_trie_flat marc8r_31page505_flat[] = { {"\x80", 0, 0x6F5C25}, /* Korean hangul */ {"\x84", 0, 0x6F5C26}, /* Korean hangul */ {"\x8C", 0, 0x6F5C27}, /* Korean hangul */ {"\x8D", 0, 0x6F5C28}, /* Korean hangul */ {"\x8F", 0, 0x6F5C29}, /* Korean hangul */ {"\x90", 0, 0x6F5C2A}, /* Korean hangul */ {"\x91", 0, 0x6F5C2B}, /* Korean hangul */ {"\x98", 0, 0x6F5C2C}, /* Korean hangul */ {"\x99", 0, 0x6F5C2D}, /* Korean hangul */ {"\x9C", 0, 0x6F5C2E}, /* Korean hangul */ {"\xA0", 0, 0x6F5C2F}, /* Korean hangul */ {"\xA8", 0, 0x6F5C30}, /* Korean hangul */ {"\xA9", 0, 0x6F5C31}, /* Korean hangul */ {"\xAB", 0, 0x6F5C32}, /* Korean hangul */ {"\xAD", 0, 0x6F5C33}, /* Korean hangul */ {"\xB4", 0, 0x6F5C34}, /* Korean hangul */ {"\xB5", 0, 0x6F5C35}, /* Korean hangul */ {"\xB8", 0, 0x6F5C36}, /* Korean hangul */ {"\xBC", 0, 0x6F5C37}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page505 = { marc8r_31page505_flat, 0 }; /* PAGE 504 */ struct yaz_iconv_trie_flat marc8r_31page504_flat[] = { {"\xBC", 0, 0x6F5C23}, /* Korean hangul */ {"\xBD", 0, 0x6F5C24}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page504 = { marc8r_31page504_flat, 0 }; /* PAGE 503 */ struct yaz_iconv_trie_flat marc8r_31page503_flat[] = { {"\x80", 0, 0x6F5B67}, /* Korean hangul */ {"\x81", 0, 0x6F5B68}, /* Korean hangul */ {"\x85", 0, 0x6F5B69}, /* Korean hangul */ {"\x8C", 0, 0x6F5B6C}, /* Korean hangul */ {"\x8D", 0, 0x6F5B6D}, /* Korean hangul */ {"\x8E", 0, 0x6F5B6E}, /* Korean hangul */ {"\x90", 0, 0x6F5B6F}, /* Korean hangul */ {"\x94", 0, 0x6F5B70}, /* Korean hangul */ {"\x9C", 0, 0x6F5B71}, /* Korean hangul */ {"\x9D", 0, 0x6F5B72}, /* Korean hangul */ {"\x9F", 0, 0x6F5B73}, /* Korean hangul */ {"\xA0", 0, 0x6F5B74}, /* Korean hangul */ {"\xA1", 0, 0x6F5B75}, /* Korean hangul */ {"\xA5", 0, 0x6F5B76}, /* Korean hangul */ {"\xA8", 0, 0x6F5B77}, /* Korean hangul */ {"\xA9", 0, 0x6F5B78}, /* Korean hangul */ {"\xAC", 0, 0x6F5B79}, /* Korean hangul */ {"\xB0", 0, 0x6F5B7A}, /* Korean hangul */ {"\xB8", 0, 0x6F5B7B}, /* Korean hangul */ {"\xB9", 0, 0x6F5B7C}, /* Korean hangul */ {"\xBB", 0, 0x6F5B7D}, /* Korean hangul */ {"\xBC", 0, 0x6F5B7E}, /* Korean hangul */ {"\xBD", 0, 0x6F5C21}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page503 = { marc8r_31page503_flat, 0 }; /* PAGE 502 */ struct yaz_iconv_trie_flat marc8r_31page502_flat[] = { {"\x80", 0, 0x6F5B5D}, /* Korean hangul */ {"\x88", 0, 0x6F5B5E}, /* Korean hangul */ {"\x89", 0, 0x6F5B5F}, /* Korean hangul */ {"\x8B", 0, 0x6F5B60}, /* Korean hangul */ {"\x94", 0, 0x6F5B61}, /* Korean hangul */ {"\xB0", 0, 0x6F5B63}, /* Korean hangul */ {"\xB1", 0, 0x6F5B64}, /* Korean hangul */ {"\xB4", 0, 0x6F5B65}, /* Korean hangul */ {"\xB8", 0, 0x6F5B66}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page502 = { marc8r_31page502_flat, 0 }; /* PAGE 501 */ struct yaz_iconv_trie_flat marc8r_31page501_flat[] = { {"\x80", 0, 0x6F5B4D}, /* Korean hangul */ {"\x84", 0, 0x6F5B4E}, /* Korean hangul */ {"\x88", 0, 0x6F5B4F}, /* Korean hangul */ {"\x90", 0, 0x6F5B50}, /* Korean hangul */ {"\x91", 0, 0x6F5B51}, /* Korean hangul */ {"\x93", 0, 0x6F5B52}, /* Korean hangul */ {"\x95", 0, 0x6F5B53}, /* Korean hangul */ {"\x9C", 0, 0x6F5B54}, /* Korean hangul */ {"\xAC", 0, 0x6F5B57}, /* Korean hangul */ {"\xB8", 0, 0x6F5B59}, /* Korean hangul */ {"\xB9", 0, 0x6F5B5A}, /* Korean hangul */ {"\xBC", 0, 0x6F5B5B}, /* Korean hangul */ {"\xBF", 0, 0x6F5B5C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page501 = { marc8r_31page501_flat, 0 }; /* PAGE 500 */ struct yaz_iconv_trie_flat marc8r_31page500_flat[] = { {"\x81", 0, 0x6F5B4A}, /* Korean hangul */ {"\xA4", 0, 0x6F5B4B}, /* Korean hangul */ {"\xB7", 0, 0x6F5B4C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page500 = { marc8r_31page500_flat, 0 }; /* PAGE 499 */ struct yaz_iconv_trie_flat marc8r_31page499_flat[] = { {"\xAC", 0, 0x6F5B43}, /* Korean hangul */ {"\xAD", 0, 0x6F5B44}, /* Korean hangul */ {"\xB0", 0, 0x6F5B45}, /* Korean hangul */ {"\xB4", 0, 0x6F5B46}, /* Korean hangul */ {"\xBC", 0, 0x6F5B47}, /* Korean hangul */ {"\xBD", 0, 0x6F5B48}, /* Korean hangul */ {"\xBF", 0, 0x6F5B49}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page499 = { marc8r_31page499_flat, 0 }; /* PAGE 498 */ struct yaz_iconv_trie_flat marc8r_31page498_flat[] = { {"\x98", 0, 0x6F5B40}, /* Korean hangul */ {"\xB4", 0, 0x6F5B41}, /* Korean hangul */ {"\xB8", 0, 0x6F5B62}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page498 = { marc8r_31page498_flat, 0 }; /* PAGE 497 */ struct yaz_iconv_trie_flat marc8r_31page497_flat[] = { {"\xA0", 0, 0x6F5B38}, /* Korean hangul */ {"\xA1", 0, 0x6F5B39}, /* Korean hangul */ {"\xA4", 0, 0x6F5B3A}, /* Korean hangul */ {"\xA8", 0, 0x6F5B3B}, /* Korean hangul */ {"\xB0", 0, 0x6F5B3C}, /* Korean hangul */ {"\xB1", 0, 0x6F5B3D}, /* Korean hangul */ {"\xB3", 0, 0x6F5B3E}, /* Korean hangul */ {"\xB5", 0, 0x6F5B3F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page497 = { marc8r_31page497_flat, 0 }; /* PAGE 496 */ struct yaz_iconv_trie_flat marc8r_31page496_flat[] = { {"\x80", 0, 0x6F5B29}, /* Korean hangul */ {"\x81", 0, 0x6F5B2A}, /* Korean hangul */ {"\x83", 0, 0x6F5B2B}, /* Korean hangul */ {"\x84", 0, 0x6F5B2C}, /* Korean hangul */ {"\x85", 0, 0x6F5B2D}, /* Korean hangul */ {"\x8C", 0, 0x6F5B2E}, /* Korean hangul */ {"\x8D", 0, 0x6F5B2F}, /* Korean hangul */ {"\x90", 0, 0x6F5B30}, /* Korean hangul */ {"\x94", 0, 0x6F5B31}, /* Korean hangul */ {"\x9C", 0, 0x6F5B32}, /* Korean hangul */ {"\x9D", 0, 0x6F5B33}, /* Korean hangul */ {"\x9F", 0, 0x6F5B34}, /* Korean hangul */ {"\xA0", 0, 0x6F5B35}, /* Korean hangul */ {"\xA1", 0, 0x6F5B36}, /* Korean hangul */ {"\xA8", 0, 0x6F5B37}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page496 = { marc8r_31page496_flat, 0 }; /* PAGE 495 */ struct yaz_iconv_trie_flat marc8r_31page495_flat[] = { {"\xB0", 0, 0x6F5B25}, /* Korean hangul */ {"\xB1", 0, 0x6F5B26}, /* Korean hangul */ {"\xB4", 0, 0x6F5B27}, /* Korean hangul */ {"\xB8", 0, 0x6F5B28}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page495 = { marc8r_31page495_flat, 0 }; /* PAGE 494 */ struct yaz_iconv_trie_flat marc8r_31page494_flat[] = { {"\x80", 0, 0x6F5A70}, /* Korean hangul */ {"\x81", 0, 0x6F5A71}, /* Korean hangul */ {"\x84", 0, 0x6F5A72}, /* Korean hangul */ {"\x88", 0, 0x6F5A73}, /* Korean hangul */ {"\x89", 0, 0x6F5A74}, /* Korean hangul */ {"\x90", 0, 0x6F5A75}, /* Korean hangul */ {"\x91", 0, 0x6F5A76}, /* Korean hangul */ {"\x93", 0, 0x6F5A77}, /* Korean hangul */ {"\x94", 0, 0x6F5A78}, /* Korean hangul */ {"\x95", 0, 0x6F5A79}, /* Korean hangul */ {"\x9C", 0, 0x6F5A7A}, /* Korean hangul */ {"\x9D", 0, 0x6F5A7B}, /* Korean hangul */ {"\xA0", 0, 0x6F5A7C}, /* Korean hangul */ {"\xA4", 0, 0x6F5A7D}, /* Korean hangul */ {"\xAC", 0, 0x6F5A7E}, /* Korean hangul */ {"\xAD", 0, 0x6F5B21}, /* Korean hangul */ {"\xAF", 0, 0x6F5B22}, /* Korean hangul */ {"\xB0", 0, 0x6F5B23}, /* Korean hangul */ {"\xB1", 0, 0x6F5B24}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page494 = { marc8r_31page494_flat, 0 }; /* PAGE 493 */ struct yaz_iconv_trie_flat marc8r_31page493_flat[] = { {"\x81", 0, 0x6F5A65}, /* Korean hangul */ {"\xA4", 0, 0x6F5A66}, /* Korean hangul */ {"\xA5", 0, 0x6F5A67}, /* Korean hangul */ {"\xA8", 0, 0x6F5A68}, /* Korean hangul */ {"\xAC", 0, 0x6F5A69}, /* Korean hangul */ {"\xB4", 0, 0x6F5A6A}, /* Korean hangul */ {"\xB5", 0, 0x6F5A6B}, /* Korean hangul */ {"\xB7", 0, 0x6F5A6C}, /* Korean hangul */ {"\xB9", 0, 0x6F5A6D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page493 = { marc8r_31page493_flat, 0 }; /* PAGE 492 */ struct yaz_iconv_trie_flat marc8r_31page492_flat[] = { {"\x90", 0, 0x6F5A5F}, /* Korean hangul */ {"\xAC", 0, 0x6F5A60}, /* Korean hangul */ {"\xB0", 0, 0x6F5A61}, /* Korean hangul */ {"\xB4", 0, 0x6F5A62}, /* Korean hangul */ {"\xBC", 0, 0x6F5A63}, /* Korean hangul */ {"\xBD", 0, 0x6F5A64}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page492 = { marc8r_31page492_flat, 0 }; /* PAGE 491 */ struct yaz_iconv_trie_flat marc8r_31page491_flat[] = { {"\x98", 0, 0x6F5A5A}, /* Korean hangul */ {"\xAD", 0, 0x6F5A5B}, /* Korean hangul */ {"\xB4", 0, 0x6F5A5C}, /* Korean hangul */ {"\xB5", 0, 0x6F5A5D}, /* Korean hangul */ {"\xB8", 0, 0x6F5A5E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page491 = { marc8r_31page491_flat, 0 }; /* PAGE 490 */ struct yaz_iconv_trie_dir marc8r_31page490_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {492, 0, 0}, {493, 0, 0}, {494, 0, 0}, {495, 0, 0}, {496, 0, 0}, {497, 0, 0}, {498, 0, 0}, {499, 0, 0}, {500, 0, 0}, {501, 0, 0}, {502, 0, 0}, {503, 0, 0}, {504, 0, 0}, {505, 0, 0}, {506, 0, 0}, {507, 0, 0}, {508, 0, 0}, {509, 0, 0}, {510, 0, 0}, {511, 0, 0}, {512, 0, 0}, {513, 0, 0}, {514, 0, 0}, {515, 0, 0}, {516, 0, 0}, {517, 0, 0}, {518, 0, 0}, {519, 0, 0}, {520, 0, 0}, {521, 0, 0}, {522, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page490 = { 0, marc8r_31page490_dir }; /* PAGE 489 */ struct yaz_iconv_trie_flat marc8r_31page489_flat[] = { {"\x84", 0, 0x6F5A50}, /* Korean hangul */ {"\xA0", 0, 0x6F5A51}, /* Korean hangul */ {"\xA1", 0, 0x6F5A52}, /* Korean hangul */ {"\xA4", 0, 0x6F5A53}, /* Korean hangul */ {"\xA8", 0, 0x6F5A54}, /* Korean hangul */ {"\xB0", 0, 0x6F5A55}, /* Korean hangul */ {"\xB3", 0, 0x6F5A56}, /* Korean hangul */ {"\xB5", 0, 0x6F5A57}, /* Korean hangul */ {"\xBC", 0, 0x6F5A58}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page489 = { marc8r_31page489_flat, 0 }; /* PAGE 488 */ struct yaz_iconv_trie_flat marc8r_31page488_flat[] = { {"\x80", 0, 0x6F5A49}, /* Korean hangul */ {"\x85", 0, 0x6F5A4A}, /* Korean hangul */ {"\x8C", 0, 0x6F5A4B}, /* Korean hangul */ {"\x8D", 0, 0x6F5A4C}, /* Korean hangul */ {"\xA1", 0, 0x6F5A4D}, /* Korean hangul */ {"\xB0", 0, 0x6F5A4F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page488 = { marc8r_31page488_flat, 0 }; /* PAGE 487 */ struct yaz_iconv_trie_flat marc8r_31page487_flat[] = { {"\x94", 0, 0x6F5A3D}, /* Korean hangul */ {"\x95", 0, 0x6F5A3E}, /* Korean hangul */ {"\x98", 0, 0x6F5A3F}, /* Korean hangul */ {"\x9C", 0, 0x6F5A40}, /* Korean hangul */ {"\xA4", 0, 0x6F5A41}, /* Korean hangul */ {"\xA5", 0, 0x6F5A42}, /* Korean hangul */ {"\xA7", 0, 0x6F5A43}, /* Korean hangul */ {"\xA9", 0, 0x6F5A44}, /* Korean hangul */ {"\xB0", 0, 0x6F5A45}, /* Korean hangul */ {"\xB1", 0, 0x6F5A46}, /* Korean hangul */ {"\xB4", 0, 0x6F5A47}, /* Korean hangul */ {"\xB8", 0, 0x6F5A48}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page487 = { marc8r_31page487_flat, 0 }; /* PAGE 486 */ struct yaz_iconv_trie_flat marc8r_31page486_flat[] = { {"\x80", 0, 0x6F5A2E}, /* Korean hangul */ {"\x81", 0, 0x6F5A2F}, /* Korean hangul */ {"\x84", 0, 0x6F5A30}, /* Korean hangul */ {"\x88", 0, 0x6F5A31}, /* Korean hangul */ {"\x90", 0, 0x6F5A32}, /* Korean hangul */ {"\x91", 0, 0x6F5A33}, /* Korean hangul */ {"\x93", 0, 0x6F5A34}, /* Korean hangul */ {"\x95", 0, 0x6F5A35}, /* Korean hangul */ {"\x9C", 0, 0x6F5A36}, /* Korean hangul */ {"\xA0", 0, 0x6F5A37}, /* Korean hangul */ {"\xA4", 0, 0x6F5A38}, /* Korean hangul */ {"\xAC", 0, 0x6F5A39}, /* Korean hangul */ {"\xAD", 0, 0x6F5A3A}, /* Korean hangul */ {"\xAF", 0, 0x6F5A3B}, /* Korean hangul */ {"\xB0", 0, 0x6F5A3C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page486 = { marc8r_31page486_flat, 0 }; /* PAGE 485 */ struct yaz_iconv_trie_flat marc8r_31page485_flat[] = { {"\xA4", 0, 0x6F5A24}, /* Korean hangul */ {"\xA8", 0, 0x6F5A26}, /* Korean hangul */ {"\xAC", 0, 0x6F5A27}, /* Korean hangul */ {"\xB4", 0, 0x6F5A28}, /* Korean hangul */ {"\xB5", 0, 0x6F5A29}, /* Korean hangul */ {"\xB7", 0, 0x6F5A2A}, /* Korean hangul */ {"\xB9", 0, 0x6F5A2C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page485 = { marc8r_31page485_flat, 0 }; /* PAGE 484 */ struct yaz_iconv_trie_flat marc8r_31page484_flat[] = { {"\x84", 0, 0x6F5973}, /* Korean hangul */ {"\x85", 0, 0x6F5974}, /* Korean hangul */ {"\x87", 0, 0x6F5975}, /* Korean hangul */ {"\x89", 0, 0x6F5976}, /* Korean hangul */ {"\x90", 0, 0x6F5977}, /* Korean hangul */ {"\x91", 0, 0x6F5978}, /* Korean hangul */ {"\x94", 0, 0x6F5979}, /* Korean hangul */ {"\x98", 0, 0x6F597A}, /* Korean hangul */ {"\xA0", 0, 0x6F597B}, /* Korean hangul */ {"\xA1", 0, 0x6F597C}, /* Korean hangul */ {"\xA3", 0, 0x6F597D}, /* Korean hangul */ {"\xA5", 0, 0x6F5A21}, /* Korean hangul */ {"\xAC", 0, 0x6F5A22}, /* Korean hangul */ {"\xAD", 0, 0x6F5A23}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page484 = { marc8r_31page484_flat, 0 }; /* PAGE 483 */ struct yaz_iconv_trie_flat marc8r_31page483_flat[] = { {"\x98", 0, 0x6F5964}, /* Korean hangul */ {"\x99", 0, 0x6F5965}, /* Korean hangul */ {"\x9C", 0, 0x6F5966}, /* Korean hangul */ {"\xA0", 0, 0x6F5967}, /* Korean hangul */ {"\xA1", 0, 0x6F5968}, /* Korean hangul */ {"\xA8", 0, 0x6F5969}, /* Korean hangul */ {"\xA9", 0, 0x6F596A}, /* Korean hangul */ {"\xAB", 0, 0x6F596B}, /* Korean hangul */ {"\xAD", 0, 0x6F596C}, /* Korean hangul */ {"\xB4", 0, 0x6F596F}, /* Korean hangul */ {"\xB5", 0, 0x6F5970}, /* Korean hangul */ {"\xB8", 0, 0x6F5971}, /* Korean hangul */ {"\xBC", 0, 0x6F5972}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page483 = { marc8r_31page483_flat, 0 }; /* PAGE 482 */ struct yaz_iconv_trie_flat marc8r_31page482_flat[] = { {"\x84", 0, 0x6F595F}, /* Korean hangul */ {"\xA0", 0, 0x6F5960}, /* Korean hangul */ {"\xA1", 0, 0x6F5961}, /* Korean hangul */ {"\xB0", 0, 0x6F5962}, /* Korean hangul */ {"\xB5", 0, 0x6F5963}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page482 = { marc8r_31page482_flat, 0 }; /* PAGE 481 */ struct yaz_iconv_trie_flat marc8r_31page481_flat[] = { {"\x84", 0, 0x6F595C}, /* Korean hangul */ {"\x8C", 0, 0x6F595D}, /* Korean hangul */ {"\xA8", 0, 0x6F595E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page481 = { marc8r_31page481_flat, 0 }; /* PAGE 480 */ struct yaz_iconv_trie_flat marc8r_31page480_flat[] = { {"\x94", 0, 0x6F5953}, /* Korean hangul */ {"\x95", 0, 0x6F5954}, /* Korean hangul */ {"\x98", 0, 0x6F5955}, /* Korean hangul */ {"\x9C", 0, 0x6F5956}, /* Korean hangul */ {"\xA4", 0, 0x6F5957}, /* Korean hangul */ {"\xA5", 0, 0x6F5958}, /* Korean hangul */ {"\xA7", 0, 0x6F5959}, /* Korean hangul */ {"\xA9", 0, 0x6F595A}, /* Korean hangul */ {"\xB0", 0, 0x6F595B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page480 = { marc8r_31page480_flat, 0 }; /* PAGE 479 */ struct yaz_iconv_trie_flat marc8r_31page479_flat[] = { {"\x9C", 0, 0x6F5951}, /* Korean hangul */ {"\xB8", 0, 0x6F5952}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page479 = { marc8r_31page479_flat, 0 }; /* PAGE 478 */ struct yaz_iconv_trie_flat marc8r_31page478_flat[] = { {"\x88", 0, 0x6F5948}, /* Korean hangul */ {"\x89", 0, 0x6F5949}, /* Korean hangul */ {"\x8C", 0, 0x6F594A}, /* Korean hangul */ {"\x90", 0, 0x6F594B}, /* Korean hangul */ {"\x98", 0, 0x6F594C}, /* Korean hangul */ {"\x99", 0, 0x6F594D}, /* Korean hangul */ {"\x9B", 0, 0x6F594E}, /* Korean hangul */ {"\x9D", 0, 0x6F594F}, /* Korean hangul */ {"\xAC", 0, 0x6F5950}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page478 = { marc8r_31page478_flat, 0 }; /* PAGE 477 */ struct yaz_iconv_trie_flat marc8r_31page477_flat[] = { {"\x87", 0, 0x6F5945}, /* Korean hangul */ {"\x90", 0, 0x6F5946}, /* Korean hangul */ {"\xA4", 0, 0x6F5947}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page477 = { marc8r_31page477_flat, 0 }; /* PAGE 476 */ struct yaz_iconv_trie_flat marc8r_31page476_flat[] = { {"\x98", 0, 0x6F5939}, /* Korean hangul */ {"\x99", 0, 0x6F593A}, /* Korean hangul */ {"\x9C", 0, 0x6F593B}, /* Korean hangul */ {"\xA0", 0, 0x6F593C}, /* Korean hangul */ {"\xA8", 0, 0x6F593D}, /* Korean hangul */ {"\xA9", 0, 0x6F593E}, /* Korean hangul */ {"\xAB", 0, 0x6F593F}, /* Korean hangul */ {"\xAD", 0, 0x6F5940}, /* Korean hangul */ {"\xB4", 0, 0x6F5941}, /* Korean hangul */ {"\xB5", 0, 0x6F5942}, /* Korean hangul */ {"\xB8", 0, 0x6F5943}, /* Korean hangul */ {"\xBC", 0, 0x6F5944}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page476 = { marc8r_31page476_flat, 0 }; /* PAGE 475 */ struct yaz_iconv_trie_flat marc8r_31page475_flat[] = { {"\x84", 0, 0x6F592D}, /* Korean hangul */ {"\x85", 0, 0x6F592E}, /* Korean hangul */ {"\x88", 0, 0x6F592F}, /* Korean hangul */ {"\x8C", 0, 0x6F5930}, /* Korean hangul */ {"\x94", 0, 0x6F5931}, /* Korean hangul */ {"\x95", 0, 0x6F5932}, /* Korean hangul */ {"\x98", 0, 0x6F5933}, /* Korean hangul */ {"\x99", 0, 0x6F5934}, /* Korean hangul */ {"\xA0", 0, 0x6F5935}, /* Korean hangul */ {"\xA4", 0, 0x6F5936}, /* Korean hangul */ {"\xB0", 0, 0x6F5937}, /* Korean hangul */ {"\xB1", 0, 0x6F5938}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page475 = { marc8r_31page475_flat, 0 }; /* PAGE 474 */ struct yaz_iconv_trie_flat marc8r_31page474_flat[] = { {"\x8C", 0, 0x6F5873}, /* Korean hangul */ {"\x8D", 0, 0x6F5874}, /* Korean hangul */ {"\x90", 0, 0x6F5875}, /* Korean hangul */ {"\x94", 0, 0x6F5876}, /* Korean hangul */ {"\x9C", 0, 0x6F5877}, /* Korean hangul */ {"\x9D", 0, 0x6F5878}, /* Korean hangul */ {"\xA1", 0, 0x6F5879}, /* Korean hangul */ {"\xA2", 0, 0x6F587A}, /* Korean hangul */ {"\xA7", 0, 0x6F587B}, /* Korean hangul */ {"\xA8", 0, 0x6F587E}, /* Korean hangul */ {"\xA9", 0, 0x6F5921}, /* Korean hangul */ {"\xAC", 0, 0x6F5922}, /* Korean hangul */ {"\xAE", 0, 0x6F5923}, /* Korean hangul */ {"\xAF", 0, 0x6F5924}, /* Korean hangul */ {"\xB0", 0, 0x6F5925}, /* Korean hangul */ {"\xB8", 0, 0x6F5926}, /* Korean hangul */ {"\xB9", 0, 0x6F5927}, /* Korean hangul */ {"\xBB", 0, 0x6F5928}, /* Korean hangul */ {"\xBC", 0, 0x6F5929}, /* Korean hangul */ {"\xBD", 0, 0x6F592A}, /* Korean hangul */ {"\xBE", 0, 0x6F592B}, /* Korean hangul */ {"\xBF", 0, 0x6F592C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page474 = { marc8r_31page474_flat, 0 }; /* PAGE 473 */ struct yaz_iconv_trie_flat marc8r_31page473_flat[] = { {"\x94", 0, 0x6F5870}, /* Korean hangul */ {"\xA4", 0, 0x6F5871}, /* Korean hangul */ {"\xA7", 0, 0x6F5872}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page473 = { marc8r_31page473_flat, 0 }; /* PAGE 472 */ struct yaz_iconv_trie_flat marc8r_31page472_flat[] = { {"\xB8", 0, 0x6F586F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page472 = { marc8r_31page472_flat, 0 }; /* PAGE 471 */ struct yaz_iconv_trie_flat marc8r_31page471_flat[] = { {"\x81", 0, 0x6F5867}, /* Korean hangul */ {"\x88", 0, 0x6F5868}, /* Korean hangul */ {"\x89", 0, 0x6F5869}, /* Korean hangul */ {"\x90", 0, 0x6F586A}, /* Korean hangul */ {"\x98", 0, 0x6F586B}, /* Korean hangul */ {"\x99", 0, 0x6F586C}, /* Korean hangul */ {"\x9D", 0, 0x6F586D}, /* Korean hangul */ {"\xA4", 0, 0x6F586E}, /* Korean hangul */ {"\x8C", 0, 0x6F773E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page471 = { marc8r_31page471_flat, 0 }; /* PAGE 470 */ struct yaz_iconv_trie_flat marc8r_31page470_flat[] = { {"\x90", 0, 0x6F5862}, /* Korean hangul */ {"\x94", 0, 0x6F5863}, /* Korean hangul */ {"\x98", 0, 0x6F5864}, /* Korean hangul */ {"\xA0", 0, 0x6F5865}, /* Korean hangul */ {"\xA1", 0, 0x6F5866}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page470 = { marc8r_31page470_flat, 0 }; /* PAGE 469 */ struct yaz_iconv_trie_flat marc8r_31page469_flat[] = { {"\x80", 0, 0x6F5859}, /* Korean hangul */ {"\x84", 0, 0x6F585A}, /* Korean hangul */ {"\x8C", 0, 0x6F585B}, /* Korean hangul */ {"\x8D", 0, 0x6F585C}, /* Korean hangul */ {"\x91", 0, 0x6F585D}, /* Korean hangul */ {"\x92", 0, 0x6F585E}, /* Korean hangul */ {"\x93", 0, 0x6F585F}, /* Korean hangul */ {"\x98", 0, 0x6F5860}, /* Korean hangul */ {"\x99", 0, 0x6F5861}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page469 = { marc8r_31page469_flat, 0 }; /* PAGE 468 */ struct yaz_iconv_trie_flat marc8r_31page468_flat[] = { {"\x84", 0, 0x6F5855}, /* Korean hangul */ {"\x98", 0, 0x6F5856}, /* Korean hangul */ {"\xBC", 0, 0x6F5857}, /* Korean hangul */ {"\xBD", 0, 0x6F5858}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page468 = { marc8r_31page468_flat, 0 }; /* PAGE 467 */ struct yaz_iconv_trie_flat marc8r_31page467_flat[] = { {"\x8C", 0, 0x6F584E}, /* Korean hangul */ {"\x8D", 0, 0x6F584F}, /* Korean hangul */ {"\x90", 0, 0x6F5850}, /* Korean hangul */ {"\x94", 0, 0x6F5851}, /* Korean hangul */ {"\x9C", 0, 0x6F5852}, /* Korean hangul */ {"\x9D", 0, 0x6F5853}, /* Korean hangul */ {"\xA1", 0, 0x6F5854}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page467 = { marc8r_31page467_flat, 0 }; /* PAGE 466 */ struct yaz_iconv_trie_flat marc8r_31page466_flat[] = { {"\x80", 0, 0x6F5847}, /* Korean hangul */ {"\x88", 0, 0x6F5848}, /* Korean hangul */ {"\x89", 0, 0x6F5849}, /* Korean hangul */ {"\x8B", 0, 0x6F584A}, /* Korean hangul */ {"\x8C", 0, 0x6F584B}, /* Korean hangul */ {"\x8D", 0, 0x6F584C}, /* Korean hangul */ {"\x98", 0, 0x6F584D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page466 = { marc8r_31page466_flat, 0 }; /* PAGE 465 */ struct yaz_iconv_trie_flat marc8r_31page465_flat[] = { {"\x80", 0, 0x6F5829}, /* Korean hangul */ {"\x81", 0, 0x6F582A}, /* Korean hangul */ {"\x84", 0, 0x6F582B}, /* Korean hangul */ {"\x87", 0, 0x6F582C}, /* Korean hangul */ {"\x88", 0, 0x6F582D}, /* Korean hangul */ {"\x8A", 0, 0x6F582E}, /* Korean hangul */ {"\x90", 0, 0x6F582F}, /* Korean hangul */ {"\x91", 0, 0x6F5830}, /* Korean hangul */ {"\x93", 0, 0x6F5831}, /* Korean hangul */ {"\x95", 0, 0x6F5832}, /* Korean hangul */ {"\x96", 0, 0x6F5833}, /* Korean hangul */ {"\x99", 0, 0x6F5834}, /* Korean hangul */ {"\x9A", 0, 0x6F5835}, /* Korean hangul */ {"\x9C", 0, 0x6F5838}, /* Korean hangul */ {"\x9D", 0, 0x6F5839}, /* Korean hangul */ {"\xA0", 0, 0x6F583A}, /* Korean hangul */ {"\xA2", 0, 0x6F583B}, /* Korean hangul */ {"\xA4", 0, 0x6F583C}, /* Korean hangul */ {"\xA7", 0, 0x6F583E}, /* Korean hangul */ {"\xAC", 0, 0x6F583F}, /* Korean hangul */ {"\xAD", 0, 0x6F5840}, /* Korean hangul */ {"\xAF", 0, 0x6F5841}, /* Korean hangul */ {"\xB0", 0, 0x6F5842}, /* Korean hangul */ {"\xB1", 0, 0x6F5843}, /* Korean hangul */ {"\xB8", 0, 0x6F5844}, /* Korean hangul */ {"\xB9", 0, 0x6F5845}, /* Korean hangul */ {"\xBC", 0, 0x6F5846}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page465 = { marc8r_31page465_flat, 0 }; /* PAGE 464 */ struct yaz_iconv_trie_flat marc8r_31page464_flat[] = { {"\x88", 0, 0x6F5822}, /* Korean hangul */ {"\x89", 0, 0x6F5823}, /* Korean hangul */ {"\x8C", 0, 0x6F5824}, /* Korean hangul */ {"\x90", 0, 0x6F5825}, /* Korean hangul */ {"\x98", 0, 0x6F5826}, /* Korean hangul */ {"\x99", 0, 0x6F5827}, /* Korean hangul */ {"\x9D", 0, 0x6F5828}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page464 = { marc8r_31page464_flat, 0 }; /* PAGE 463 */ struct yaz_iconv_trie_flat marc8r_31page463_flat[] = { {"\x90", 0, 0x6F5777}, /* Korean hangul */ {"\x94", 0, 0x6F5779}, /* Korean hangul */ {"\x98", 0, 0x6F577A}, /* Korean hangul */ {"\xA0", 0, 0x6F577B}, /* Korean hangul */ {"\xA1", 0, 0x6F577C}, /* Korean hangul */ {"\xAC", 0, 0x6F577D}, /* Korean hangul */ {"\xB0", 0, 0x6F577E}, /* Korean hangul */ {"\xB4", 0, 0x6F5821}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page463 = { marc8r_31page463_flat, 0 }; /* PAGE 462 */ struct yaz_iconv_trie_flat marc8r_31page462_flat[] = { {"\x80", 0, 0x6F576E}, /* Korean hangul */ {"\x84", 0, 0x6F576F}, /* Korean hangul */ {"\x86", 0, 0x6F5770}, /* Korean hangul */ {"\x8C", 0, 0x6F5771}, /* Korean hangul */ {"\x8D", 0, 0x6F5772}, /* Korean hangul */ {"\x8F", 0, 0x6F5773}, /* Korean hangul */ {"\x91", 0, 0x6F5774}, /* Korean hangul */ {"\x98", 0, 0x6F5775}, /* Korean hangul */ {"\xAC", 0, 0x6F5776}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page462 = { marc8r_31page462_flat, 0 }; /* PAGE 461 */ struct yaz_iconv_trie_flat marc8r_31page461_flat[] = { {"\x84", 0, 0x6F5761}, /* Korean hangul */ {"\x88", 0, 0x6F5762}, /* Korean hangul */ {"\x8C", 0, 0x6F5763}, /* Korean hangul */ {"\x94", 0, 0x6F5764}, /* Korean hangul */ {"\x95", 0, 0x6F5765}, /* Korean hangul */ {"\x97", 0, 0x6F5766}, /* Korean hangul */ {"\xA0", 0, 0x6F5767}, /* Korean hangul */ {"\xA4", 0, 0x6F5768}, /* Korean hangul */ {"\xB0", 0, 0x6F5769}, /* Korean hangul */ {"\xB1", 0, 0x6F576A}, /* Korean hangul */ {"\xB5", 0, 0x6F576B}, /* Korean hangul */ {"\xBC", 0, 0x6F576C}, /* Korean hangul */ {"\xBD", 0, 0x6F576D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page461 = { marc8r_31page461_flat, 0 }; /* PAGE 460 */ struct yaz_iconv_trie_flat marc8r_31page460_flat[] = { {"\x80", 0, 0x6F574E}, /* Korean hangul */ {"\x81", 0, 0x6F574F}, /* Korean hangul */ {"\x85", 0, 0x6F5750}, /* Korean hangul */ {"\x86", 0, 0x6F5751}, /* Korean hangul */ {"\x87", 0, 0x6F5752}, /* Korean hangul */ {"\x8B", 0, 0x6F5753}, /* Korean hangul */ {"\x8C", 0, 0x6F5754}, /* Korean hangul */ {"\x8D", 0, 0x6F5755}, /* Korean hangul */ {"\x90", 0, 0x6F5756}, /* Korean hangul */ {"\x94", 0, 0x6F5757}, /* Korean hangul */ {"\x9C", 0, 0x6F5758}, /* Korean hangul */ {"\x9D", 0, 0x6F5759}, /* Korean hangul */ {"\x9F", 0, 0x6F575A}, /* Korean hangul */ {"\xA0", 0, 0x6F575B}, /* Korean hangul */ {"\xA8", 0, 0x6F575D}, /* Korean hangul */ {"\xAC", 0, 0x6F575E}, /* Korean hangul */ {"\xB0", 0, 0x6F575F}, /* Korean hangul */ {"\xB8", 0, 0x6F5760}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page460 = { marc8r_31page460_flat, 0 }; /* PAGE 459 */ struct yaz_iconv_trie_flat marc8r_31page459_flat[] = { {"\x8C", 0, 0x6F5748}, /* Korean hangul */ {"\xB0", 0, 0x6F5749}, /* Korean hangul */ {"\xB1", 0, 0x6F574A}, /* Korean hangul */ {"\xB4", 0, 0x6F574B}, /* Korean hangul */ {"\xB8", 0, 0x6F574C}, /* Korean hangul */ {"\xBA", 0, 0x6F574D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page459 = { marc8r_31page459_flat, 0 }; /* PAGE 458 */ struct yaz_iconv_trie_flat marc8r_31page458_flat[] = { {"\x80", 0, 0x6F5734}, /* Korean hangul */ {"\x81", 0, 0x6F5735}, /* Korean hangul */ {"\x84", 0, 0x6F5736}, /* Korean hangul */ {"\x88", 0, 0x6F5737}, /* Korean hangul */ {"\x8A", 0, 0x6F5738}, /* Korean hangul */ {"\x90", 0, 0x6F5739}, /* Korean hangul */ {"\x91", 0, 0x6F573A}, /* Korean hangul */ {"\x93", 0, 0x6F573B}, /* Korean hangul */ {"\x94", 0, 0x6F573C}, /* Korean hangul */ {"\x95", 0, 0x6F573D}, /* Korean hangul */ {"\x96", 0, 0x6F573E}, /* Korean hangul */ {"\x9C", 0, 0x6F573F}, /* Korean hangul */ {"\x9D", 0, 0x6F5740}, /* Korean hangul */ {"\xA0", 0, 0x6F5741}, /* Korean hangul */ {"\xA4", 0, 0x6F5742}, /* Korean hangul */ {"\xAC", 0, 0x6F5743}, /* Korean hangul */ {"\xAD", 0, 0x6F5744}, /* Korean hangul */ {"\xAF", 0, 0x6F5745}, /* Korean hangul */ {"\xB8", 0, 0x6F5746}, /* Korean hangul */ {"\xBC", 0, 0x6F5747}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page458 = { marc8r_31page458_flat, 0 }; /* PAGE 457 */ struct yaz_iconv_trie_flat marc8r_31page457_flat[] = { {"\x80", 0, 0x6F572E}, /* Korean hangul */ {"\x81", 0, 0x6F572F}, /* Korean hangul */ {"\x88", 0, 0x6F5730}, /* Korean hangul */ {"\x89", 0, 0x6F5731}, /* Korean hangul */ {"\x8C", 0, 0x6F5732}, /* Korean hangul */ {"\x98", 0, 0x6F5733}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page457 = { marc8r_31page457_flat, 0 }; /* PAGE 456 */ struct yaz_iconv_trie_flat marc8r_31page456_flat[] = { {"\x83", 0, 0x6F566F}, /* Korean hangul */ {"\x84", 0, 0x6F5670}, /* Korean hangul */ {"\x85", 0, 0x6F5671}, /* Korean hangul */ {"\x87", 0, 0x6F5672}, /* Korean hangul */ {"\x88", 0, 0x6F5673}, /* Korean hangul */ {"\x89", 0, 0x6F5674}, /* Korean hangul */ {"\x8A", 0, 0x6F5675}, /* Korean hangul */ {"\x8E", 0, 0x6F5676}, /* Korean hangul */ {"\x90", 0, 0x6F5679}, /* Korean hangul */ {"\x91", 0, 0x6F567A}, /* Korean hangul */ {"\x94", 0, 0x6F567B}, /* Korean hangul */ {"\x96", 0, 0x6F567C}, /* Korean hangul */ {"\x98", 0, 0x6F567D}, /* Korean hangul */ {"\xA0", 0, 0x6F567E}, /* Korean hangul */ {"\xA1", 0, 0x6F5721}, /* Korean hangul */ {"\xA3", 0, 0x6F5722}, /* Korean hangul */ {"\xA4", 0, 0x6F5723}, /* Korean hangul */ {"\xA5", 0, 0x6F5724}, /* Korean hangul */ {"\xA6", 0, 0x6F5725}, /* Korean hangul */ {"\xA7", 0, 0x6F5726}, /* Korean hangul */ {"\xAC", 0, 0x6F5727}, /* Korean hangul */ {"\xAD", 0, 0x6F5728}, /* Korean hangul */ {"\xB0", 0, 0x6F5729}, /* Korean hangul */ {"\xB4", 0, 0x6F572A}, /* Korean hangul */ {"\xBC", 0, 0x6F572B}, /* Korean hangul */ {"\xBD", 0, 0x6F572C}, /* Korean hangul */ {"\xBF", 0, 0x6F572D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page456 = { marc8r_31page456_flat, 0 }; /* PAGE 455 */ struct yaz_iconv_trie_flat marc8r_31page455_flat[] = { {"\x80", 0, 0x6F5663}, /* Korean hangul */ {"\x84", 0, 0x6F5664}, /* Korean hangul */ {"\x8A", 0, 0x6F5665}, /* Korean hangul */ {"\x8C", 0, 0x6F5666}, /* Korean hangul */ {"\x8D", 0, 0x6F5667}, /* Korean hangul */ {"\x91", 0, 0x6F5668}, /* Korean hangul */ {"\x98", 0, 0x6F5669}, /* Korean hangul */ {"\xB4", 0, 0x6F566A}, /* Korean hangul */ {"\xB5", 0, 0x6F566B}, /* Korean hangul */ {"\xB8", 0, 0x6F566C}, /* Korean hangul */ {"\xBC", 0, 0x6F566D}, /* Korean hangul */ {"\xBD", 0, 0x6F566E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page455 = { marc8r_31page455_flat, 0 }; /* PAGE 454 */ struct yaz_iconv_trie_flat marc8r_31page454_flat[] = { {"\x84", 0, 0x6F5653}, /* Korean hangul */ {"\x85", 0, 0x6F5654}, /* Korean hangul */ {"\x88", 0, 0x6F5655}, /* Korean hangul */ {"\x8C", 0, 0x6F5656}, /* Korean hangul */ {"\x94", 0, 0x6F5657}, /* Korean hangul */ {"\x97", 0, 0x6F5658}, /* Korean hangul */ {"\x99", 0, 0x6F5659}, /* Korean hangul */ {"\xA0", 0, 0x6F565A}, /* Korean hangul */ {"\xA1", 0, 0x6F565B}, /* Korean hangul */ {"\xA4", 0, 0x6F565C}, /* Korean hangul */ {"\xA8", 0, 0x6F565D}, /* Korean hangul */ {"\xB0", 0, 0x6F565E}, /* Korean hangul */ {"\xB5", 0, 0x6F565F}, /* Korean hangul */ {"\xB7", 0, 0x6F5660}, /* Korean hangul */ {"\xBC", 0, 0x6F5661}, /* Korean hangul */ {"\xBD", 0, 0x6F5662}, /* Korean hangul */ {"\xB3", 0, 0x6F773D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page454 = { marc8r_31page454_flat, 0 }; /* PAGE 453 */ struct yaz_iconv_trie_flat marc8r_31page453_flat[] = { {"\x80", 0, 0x6F5641}, /* Korean hangul */ {"\x81", 0, 0x6F5642}, /* Korean hangul */ {"\x83", 0, 0x6F5643}, /* Korean hangul */ {"\x85", 0, 0x6F5644}, /* Korean hangul */ {"\x8C", 0, 0x6F5645}, /* Korean hangul */ {"\x8D", 0, 0x6F5646}, /* Korean hangul */ {"\x90", 0, 0x6F5647}, /* Korean hangul */ {"\x94", 0, 0x6F5648}, /* Korean hangul */ {"\x9C", 0, 0x6F5649}, /* Korean hangul */ {"\x9D", 0, 0x6F564A}, /* Korean hangul */ {"\x9F", 0, 0x6F564B}, /* Korean hangul */ {"\xA0", 0, 0x6F564C}, /* Korean hangul */ {"\xA1", 0, 0x6F564D}, /* Korean hangul */ {"\xA8", 0, 0x6F564E}, /* Korean hangul */ {"\xA9", 0, 0x6F564F}, /* Korean hangul */ {"\xAC", 0, 0x6F5650}, /* Korean hangul */ {"\xB0", 0, 0x6F5651}, /* Korean hangul */ {"\xB8", 0, 0x6F5652}, /* Korean hangul */ {"\xBD", 0, 0x6F773B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page453 = { marc8r_31page453_flat, 0 }; /* PAGE 452 */ struct yaz_iconv_trie_flat marc8r_31page452_flat[] = { {"\x80", 0, 0x6F5630}, /* Korean hangul */ {"\x88", 0, 0x6F5631}, /* Korean hangul */ {"\x8B", 0, 0x6F5632}, /* Korean hangul */ {"\x8D", 0, 0x6F5633}, /* Korean hangul */ {"\x94", 0, 0x6F5634}, /* Korean hangul */ {"\x95", 0, 0x6F5635}, /* Korean hangul */ {"\x98", 0, 0x6F5636}, /* Korean hangul */ {"\xA5", 0, 0x6F5637}, /* Korean hangul */ {"\xA7", 0, 0x6F5638}, /* Korean hangul */ {"\xA9", 0, 0x6F5639}, /* Korean hangul */ {"\xB0", 0, 0x6F563A}, /* Korean hangul */ {"\xB1", 0, 0x6F563B}, /* Korean hangul */ {"\xB4", 0, 0x6F563C}, /* Korean hangul */ {"\xB7", 0, 0x6F563D}, /* Korean hangul */ {"\xB8", 0, 0x6F563E}, /* Korean hangul */ {"\xB9", 0, 0x6F563F}, /* Korean hangul */ {"\xBA", 0, 0x6F5640}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page452 = { marc8r_31page452_flat, 0 }; /* PAGE 451 */ struct yaz_iconv_trie_flat marc8r_31page451_flat[] = { {"\x80", 0, 0x6F557E}, /* Korean hangul */ {"\x81", 0, 0x6F5621}, /* Korean hangul */ {"\x84", 0, 0x6F5622}, /* Korean hangul */ {"\x88", 0, 0x6F5623}, /* Korean hangul */ {"\x90", 0, 0x6F5624}, /* Korean hangul */ {"\x91", 0, 0x6F5625}, /* Korean hangul */ {"\x93", 0, 0x6F5626}, /* Korean hangul */ {"\x94", 0, 0x6F5627}, /* Korean hangul */ {"\x9C", 0, 0x6F5629}, /* Korean hangul */ {"\x9D", 0, 0x6F562A}, /* Korean hangul */ {"\xA0", 0, 0x6F562B}, /* Korean hangul */ {"\xB1", 0, 0x6F562C}, /* Korean hangul */ {"\xB8", 0, 0x6F562D}, /* Korean hangul */ {"\xB9", 0, 0x6F562E}, /* Korean hangul */ {"\xBC", 0, 0x6F562F}, /* Korean hangul */ {"\x95", 0, 0x6F5677}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page451 = { marc8r_31page451_flat, 0 }; /* PAGE 450 */ struct yaz_iconv_trie_flat marc8r_31page450_flat[] = { {"\x80", 0, 0x6F5569}, /* Korean hangul */ {"\x81", 0, 0x6F556A}, /* Korean hangul */ {"\x86", 0, 0x6F556B}, /* Korean hangul */ {"\x87", 0, 0x6F556C}, /* Korean hangul */ {"\x88", 0, 0x6F556D}, /* Korean hangul */ {"\x8C", 0, 0x6F556E}, /* Korean hangul */ {"\x90", 0, 0x6F556F}, /* Korean hangul */ {"\x9B", 0, 0x6F5570}, /* Korean hangul */ {"\xA4", 0, 0x6F5571}, /* Korean hangul */ {"\xA5", 0, 0x6F5572}, /* Korean hangul */ {"\xA8", 0, 0x6F5573}, /* Korean hangul */ {"\xAC", 0, 0x6F5574}, /* Korean hangul */ {"\xAD", 0, 0x6F5575}, /* Korean hangul */ {"\xAE", 0, 0x6F5576}, /* Korean hangul */ {"\xB3", 0, 0x6F5577}, /* Korean hangul */ {"\xB4", 0, 0x6F5578}, /* Korean hangul */ {"\xB5", 0, 0x6F5579}, /* Korean hangul */ {"\xB7", 0, 0x6F557A}, /* Korean hangul */ {"\xB9", 0, 0x6F557B}, /* Korean hangul */ {"\xBA", 0, 0x6F557C}, /* Korean hangul */ {"\xBB", 0, 0x6F557D}, /* Korean hangul */ {"\x9C", 0, 0x6F7739}, /* Korean hangul */ {"\x9D", 0, 0x6F773A}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page450 = { marc8r_31page450_flat, 0 }; /* PAGE 449 */ struct yaz_iconv_trie_flat marc8r_31page449_flat[] = { {"\x84", 0, 0x6F554D}, /* Korean hangul */ {"\x85", 0, 0x6F554E}, /* Korean hangul */ {"\x86", 0, 0x6F554F}, /* Korean hangul */ {"\x87", 0, 0x6F5550}, /* Korean hangul */ {"\x88", 0, 0x6F5551}, /* Korean hangul */ {"\x89", 0, 0x6F5552}, /* Korean hangul */ {"\x8A", 0, 0x6F5553}, /* Korean hangul */ {"\x8C", 0, 0x6F5554}, /* Korean hangul */ {"\x8E", 0, 0x6F5555}, /* Korean hangul */ {"\x90", 0, 0x6F5556}, /* Korean hangul */ {"\x91", 0, 0x6F5557}, /* Korean hangul */ {"\x94", 0, 0x6F5558}, /* Korean hangul */ {"\x98", 0, 0x6F5559}, /* Korean hangul */ {"\xA0", 0, 0x6F555A}, /* Korean hangul */ {"\xA1", 0, 0x6F555B}, /* Korean hangul */ {"\xA3", 0, 0x6F555C}, /* Korean hangul */ {"\xA5", 0, 0x6F555D}, /* Korean hangul */ {"\xAC", 0, 0x6F555E}, /* Korean hangul */ {"\xAD", 0, 0x6F555F}, /* Korean hangul */ {"\xAE", 0, 0x6F5560}, /* Korean hangul */ {"\xB0", 0, 0x6F5561}, /* Korean hangul */ {"\xB4", 0, 0x6F5562}, /* Korean hangul */ {"\xB6", 0, 0x6F5563}, /* Korean hangul */ {"\xB7", 0, 0x6F5564}, /* Korean hangul */ {"\xBC", 0, 0x6F5565}, /* Korean hangul */ {"\xBD", 0, 0x6F5566}, /* Korean hangul */ {"\xBE", 0, 0x6F5567}, /* Korean hangul */ {"\xBF", 0, 0x6F5568}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page449 = { marc8r_31page449_flat, 0 }; /* PAGE 448 */ struct yaz_iconv_trie_flat marc8r_31page448_flat[] = { {"\x80", 0, 0x6F5538}, /* Korean hangul */ {"\x84", 0, 0x6F5539}, /* Korean hangul */ {"\x87", 0, 0x6F553A}, /* Korean hangul */ {"\x8C", 0, 0x6F553B}, /* Korean hangul */ {"\x8D", 0, 0x6F553C}, /* Korean hangul */ {"\x8F", 0, 0x6F553D}, /* Korean hangul */ {"\x90", 0, 0x6F553E}, /* Korean hangul */ {"\x91", 0, 0x6F553F}, /* Korean hangul */ {"\x95", 0, 0x6F5540}, /* Korean hangul */ {"\x97", 0, 0x6F5541}, /* Korean hangul */ {"\x98", 0, 0x6F5542}, /* Korean hangul */ {"\x9C", 0, 0x6F5543}, /* Korean hangul */ {"\xB4", 0, 0x6F5544}, /* Korean hangul */ {"\xB5", 0, 0x6F5545}, /* Korean hangul */ {"\xB6", 0, 0x6F5546}, /* Korean hangul */ {"\xB8", 0, 0x6F5547}, /* Korean hangul */ {"\xB9", 0, 0x6F5548}, /* Korean hangul */ {"\xBA", 0, 0x6F5549}, /* Korean hangul */ {"\xBB", 0, 0x6F554A}, /* Korean hangul */ {"\xBC", 0, 0x6F554B}, /* Korean hangul */ {"\xBD", 0, 0x6F554C}, /* Korean hangul */ {"\xAB", 0, 0x6F7737}, /* Korean hangul */ {"\xB1", 0, 0x6F7738}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page448 = { marc8r_31page448_flat, 0 }; /* PAGE 447 */ struct yaz_iconv_trie_flat marc8r_31page447_flat[] = { {"\x84", 0, 0x6F547C}, /* Korean hangul */ {"\x85", 0, 0x6F547D}, /* Korean hangul */ {"\x88", 0, 0x6F547E}, /* Korean hangul */ {"\x89", 0, 0x6F5521}, /* Korean hangul */ {"\x8A", 0, 0x6F5522}, /* Korean hangul */ {"\x8C", 0, 0x6F5523}, /* Korean hangul */ {"\x8E", 0, 0x6F5524}, /* Korean hangul */ {"\x93", 0, 0x6F5525}, /* Korean hangul */ {"\x94", 0, 0x6F5526}, /* Korean hangul */ {"\x95", 0, 0x6F5527}, /* Korean hangul */ {"\x97", 0, 0x6F5528}, /* Korean hangul */ {"\x98", 0, 0x6F5529}, /* Korean hangul */ {"\x99", 0, 0x6F552A}, /* Korean hangul */ {"\x9E", 0, 0x6F552B}, /* Korean hangul */ {"\x9F", 0, 0x6F552C}, /* Korean hangul */ {"\xA0", 0, 0x6F552D}, /* Korean hangul */ {"\xA1", 0, 0x6F552E}, /* Korean hangul */ {"\xA4", 0, 0x6F552F}, /* Korean hangul */ {"\xA8", 0, 0x6F5530}, /* Korean hangul */ {"\xB0", 0, 0x6F5531}, /* Korean hangul */ {"\xB1", 0, 0x6F5532}, /* Korean hangul */ {"\xB3", 0, 0x6F5533}, /* Korean hangul */ {"\xB4", 0, 0x6F5534}, /* Korean hangul */ {"\xB5", 0, 0x6F5535}, /* Korean hangul */ {"\xBC", 0, 0x6F5536}, /* Korean hangul */ {"\xBD", 0, 0x6F5537}, /* Korean hangul */ {"\x8D", 0, 0x6F7734}, /* Korean hangul */ {"\x8F", 0, 0x6F7735}, /* Korean hangul */ {"\x92", 0, 0x6F7736}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page447 = { marc8r_31page447_flat, 0 }; /* PAGE 446 */ struct yaz_iconv_trie_flat marc8r_31page446_flat[] = { {"\x80", 0, 0x6F546E}, /* Korean hangul */ {"\x81", 0, 0x6F546F}, /* Korean hangul */ {"\x8C", 0, 0x6F5470}, /* Korean hangul */ {"\x90", 0, 0x6F5471}, /* Korean hangul */ {"\xA8", 0, 0x6F5472}, /* Korean hangul */ {"\xA9", 0, 0x6F5473}, /* Korean hangul */ {"\xAC", 0, 0x6F5474}, /* Korean hangul */ {"\xB0", 0, 0x6F5475}, /* Korean hangul */ {"\xB8", 0, 0x6F5476}, /* Korean hangul */ {"\xB9", 0, 0x6F5477}, /* Korean hangul */ {"\xBB", 0, 0x6F5478}, /* Korean hangul */ {"\xBD", 0, 0x6F5479}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page446 = { marc8r_31page446_flat, 0 }; /* PAGE 445 */ struct yaz_iconv_trie_flat marc8r_31page445_flat[] = { {"\x94", 0, 0x6F5468}, /* Korean hangul */ {"\x95", 0, 0x6F5469}, /* Korean hangul */ {"\xB0", 0, 0x6F546A}, /* Korean hangul */ {"\xB1", 0, 0x6F546B}, /* Korean hangul */ {"\xB4", 0, 0x6F546C}, /* Korean hangul */ {"\xB8", 0, 0x6F546D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page445 = { marc8r_31page445_flat, 0 }; /* PAGE 444 */ struct yaz_iconv_trie_flat marc8r_31page444_flat[] = { {"\x80", 0, 0x6F5466}, /* Korean hangul */ {"\x94", 0, 0x6F5467}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page444 = { marc8r_31page444_flat, 0 }; /* PAGE 443 */ struct yaz_iconv_trie_flat marc8r_31page443_flat[] = { {"\xA4", 0, 0x6F5460}, /* Korean hangul */ {"\xA5", 0, 0x6F5461}, /* Korean hangul */ {"\xA8", 0, 0x6F5462}, /* Korean hangul */ {"\xAC", 0, 0x6F5463}, /* Korean hangul */ {"\xB4", 0, 0x6F5464}, /* Korean hangul */ {"\xB9", 0, 0x6F5465}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page443 = { marc8r_31page443_flat, 0 }; /* PAGE 442 */ struct yaz_iconv_trie_flat marc8r_31page442_flat[] = { {"\x90", 0, 0x6F545A}, /* Korean hangul */ {"\xAC", 0, 0x6F545B}, /* Korean hangul */ {"\xB0", 0, 0x6F545C}, /* Korean hangul */ {"\xB4", 0, 0x6F545D}, /* Korean hangul */ {"\xBC", 0, 0x6F545E}, /* Korean hangul */ {"\xBF", 0, 0x6F545F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page442 = { marc8r_31page442_flat, 0 }; /* PAGE 441 */ struct yaz_iconv_trie_flat marc8r_31page441_flat[] = { {"\x98", 0, 0x6F5451}, /* Korean hangul */ {"\x99", 0, 0x6F5452}, /* Korean hangul */ {"\x9C", 0, 0x6F5453}, /* Korean hangul */ {"\x9F", 0, 0x6F5454}, /* Korean hangul */ {"\xA0", 0, 0x6F5455}, /* Korean hangul */ {"\xA8", 0, 0x6F5456}, /* Korean hangul */ {"\xAD", 0, 0x6F5457}, /* Korean hangul */ {"\xB4", 0, 0x6F5458}, /* Korean hangul */ {"\xB5", 0, 0x6F5459}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page441 = { marc8r_31page441_flat, 0 }; /* PAGE 440 */ struct yaz_iconv_trie_flat marc8r_31page440_flat[] = { {"\x84", 0, 0x6F544E}, /* Korean hangul */ {"\x88", 0, 0x6F544F}, /* Korean hangul */ {"\x99", 0, 0x6F5450}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page440 = { marc8r_31page440_flat, 0 }; /* PAGE 439 */ struct yaz_iconv_trie_flat marc8r_31page439_flat[] = { {"\x83", 0, 0x6F5443}, /* Korean hangul */ {"\x85", 0, 0x6F5444}, /* Korean hangul */ {"\xA8", 0, 0x6F5445}, /* Korean hangul */ {"\xA9", 0, 0x6F5446}, /* Korean hangul */ {"\xAC", 0, 0x6F5447}, /* Korean hangul */ {"\xB0", 0, 0x6F5448}, /* Korean hangul */ {"\xB2", 0, 0x6F5449}, /* Korean hangul */ {"\xB8", 0, 0x6F544A}, /* Korean hangul */ {"\xB9", 0, 0x6F544B}, /* Korean hangul */ {"\xBC", 0, 0x6F544C}, /* Korean hangul */ {"\xBD", 0, 0x6F544D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page439 = { marc8r_31page439_flat, 0 }; /* PAGE 438 */ struct yaz_iconv_trie_flat marc8r_31page438_flat[] = { {"\x80", 0, 0x6F5433}, /* Korean hangul */ {"\x88", 0, 0x6F5434}, /* Korean hangul */ {"\x89", 0, 0x6F5435}, /* Korean hangul */ {"\x8B", 0, 0x6F5436}, /* Korean hangul */ {"\x8C", 0, 0x6F5437}, /* Korean hangul */ {"\x8D", 0, 0x6F5438}, /* Korean hangul */ {"\x93", 0, 0x6F5439}, /* Korean hangul */ {"\x94", 0, 0x6F543A}, /* Korean hangul */ {"\x95", 0, 0x6F543B}, /* Korean hangul */ {"\x98", 0, 0x6F543C}, /* Korean hangul */ {"\x9C", 0, 0x6F543D}, /* Korean hangul */ {"\xA4", 0, 0x6F543E}, /* Korean hangul */ {"\xA7", 0, 0x6F543F}, /* Korean hangul */ {"\xA8", 0, 0x6F5440}, /* Korean hangul */ {"\xA9", 0, 0x6F5441}, /* Korean hangul */ {"\xB0", 0, 0x6F5442}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page438 = { marc8r_31page438_flat, 0 }; /* PAGE 437 */ struct yaz_iconv_trie_flat marc8r_31page437_flat[] = { {"\x9C", 0, 0x6F5423}, /* Korean hangul */ {"\x9D", 0, 0x6F5424}, /* Korean hangul */ {"\xA0", 0, 0x6F5425}, /* Korean hangul */ {"\xA3", 0, 0x6F5426}, /* Korean hangul */ {"\xA4", 0, 0x6F5427}, /* Korean hangul */ {"\xAB", 0, 0x6F5428}, /* Korean hangul */ {"\xAC", 0, 0x6F5429}, /* Korean hangul */ {"\xAD", 0, 0x6F542A}, /* Korean hangul */ {"\xAF", 0, 0x6F542B}, /* Korean hangul */ {"\xB1", 0, 0x6F542C}, /* Korean hangul */ {"\xB6", 0, 0x6F542D}, /* Korean hangul */ {"\xB8", 0, 0x6F5430}, /* Korean hangul */ {"\xB9", 0, 0x6F5431}, /* Korean hangul */ {"\xBC", 0, 0x6F5432}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page437 = { marc8r_31page437_flat, 0 }; /* PAGE 436 */ struct yaz_iconv_trie_flat marc8r_31page436_flat[] = { {"\x81", 0, 0x6F5370}, /* Korean hangul */ {"\x88", 0, 0x6F5371}, /* Korean hangul */ {"\x89", 0, 0x6F5372}, /* Korean hangul */ {"\x90", 0, 0x6F5373}, /* Korean hangul */ {"\x98", 0, 0x6F5374}, /* Korean hangul */ {"\x9B", 0, 0x6F5375}, /* Korean hangul */ {"\x9D", 0, 0x6F5376}, /* Korean hangul */ {"\xA4", 0, 0x6F5377}, /* Korean hangul */ {"\xA5", 0, 0x6F5378}, /* Korean hangul */ {"\xA8", 0, 0x6F5379}, /* Korean hangul */ {"\xAC", 0, 0x6F537A}, /* Korean hangul */ {"\xAD", 0, 0x6F537B}, /* Korean hangul */ {"\xB4", 0, 0x6F537D}, /* Korean hangul */ {"\xB5", 0, 0x6F537E}, /* Korean hangul */ {"\xB7", 0, 0x6F5421}, /* Korean hangul */ {"\xB9", 0, 0x6F5422}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page436 = { marc8r_31page436_flat, 0 }; /* PAGE 435 */ struct yaz_iconv_trie_flat marc8r_31page435_flat[] = { {"\x90", 0, 0x6F5368}, /* Korean hangul */ {"\x98", 0, 0x6F5369}, /* Korean hangul */ {"\xAC", 0, 0x6F536A}, /* Korean hangul */ {"\xB0", 0, 0x6F536B}, /* Korean hangul */ {"\xB4", 0, 0x6F536C}, /* Korean hangul */ {"\xBC", 0, 0x6F536D}, /* Korean hangul */ {"\xBD", 0, 0x6F536E}, /* Korean hangul */ {"\xBF", 0, 0x6F536F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page435 = { marc8r_31page435_flat, 0 }; /* PAGE 434 */ struct yaz_iconv_trie_flat marc8r_31page434_flat[] = { {"\x80", 0, 0x6F5357}, /* Korean hangul */ {"\x84", 0, 0x6F5358}, /* Korean hangul */ {"\x8D", 0, 0x6F5359}, /* Korean hangul */ {"\x98", 0, 0x6F535B}, /* Korean hangul */ {"\x99", 0, 0x6F535C}, /* Korean hangul */ {"\x9C", 0, 0x6F535D}, /* Korean hangul */ {"\x9F", 0, 0x6F535E}, /* Korean hangul */ {"\xA0", 0, 0x6F535F}, /* Korean hangul */ {"\xA8", 0, 0x6F5360}, /* Korean hangul */ {"\xA9", 0, 0x6F5361}, /* Korean hangul */ {"\xAB", 0, 0x6F5362}, /* Korean hangul */ {"\xAD", 0, 0x6F5363}, /* Korean hangul */ {"\xAF", 0, 0x6F5364}, /* Korean hangul */ {"\xB1", 0, 0x6F5365}, /* Korean hangul */ {"\xB2", 0, 0x6F5366}, /* Korean hangul */ {"\xB4", 0, 0x6F5367}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page434 = { marc8r_31page434_flat, 0 }; /* PAGE 433 */ struct yaz_iconv_trie_flat marc8r_31page433_flat[] = { {"\x84", 0, 0x6F534C}, /* Korean hangul */ {"\x88", 0, 0x6F534D}, /* Korean hangul */ {"\x97", 0, 0x6F534E}, /* Korean hangul */ {"\xA0", 0, 0x6F534F}, /* Korean hangul */ {"\xA4", 0, 0x6F5350}, /* Korean hangul */ {"\xA8", 0, 0x6F5351}, /* Korean hangul */ {"\xB0", 0, 0x6F5352}, /* Korean hangul */ {"\xB1", 0, 0x6F5353}, /* Korean hangul */ {"\xB3", 0, 0x6F5354}, /* Korean hangul */ {"\xBC", 0, 0x6F5355}, /* Korean hangul */ {"\xBD", 0, 0x6F5356}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page433 = { marc8r_31page433_flat, 0 }; /* PAGE 432 */ struct yaz_iconv_trie_flat marc8r_31page432_flat[] = { {"\x8C", 0, 0x6F533F}, /* Korean hangul */ {"\x8D", 0, 0x6F5340}, /* Korean hangul */ {"\x8E", 0, 0x6F5341}, /* Korean hangul */ {"\x90", 0, 0x6F5342}, /* Korean hangul */ {"\x94", 0, 0x6F5343}, /* Korean hangul */ {"\x9C", 0, 0x6F5344}, /* Korean hangul */ {"\x9D", 0, 0x6F5345}, /* Korean hangul */ {"\x9F", 0, 0x6F5346}, /* Korean hangul */ {"\xA1", 0, 0x6F5347}, /* Korean hangul */ {"\xA5", 0, 0x6F5348}, /* Korean hangul */ {"\xA8", 0, 0x6F5349}, /* Korean hangul */ {"\xA9", 0, 0x6F534A}, /* Korean hangul */ {"\xB0", 0, 0x6F534B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page432 = { marc8r_31page432_flat, 0 }; /* PAGE 431 */ struct yaz_iconv_trie_flat marc8r_31page431_flat[] = { {"\x80", 0, 0x6F5334}, /* Korean hangul */ {"\x88", 0, 0x6F5335}, /* Korean hangul */ {"\x89", 0, 0x6F5336}, /* Korean hangul */ {"\x8B", 0, 0x6F5337}, /* Korean hangul */ {"\x8D", 0, 0x6F5338}, /* Korean hangul */ {"\x91", 0, 0x6F5339}, /* Korean hangul */ {"\x94", 0, 0x6F533A}, /* Korean hangul */ {"\x98", 0, 0x6F533B}, /* Korean hangul */ {"\xA7", 0, 0x6F533C}, /* Korean hangul */ {"\xA8", 0, 0x6F533D}, /* Korean hangul */ {"\xB0", 0, 0x6F533E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page431 = { marc8r_31page431_flat, 0 }; /* PAGE 430 */ struct yaz_iconv_trie_flat marc8r_31page430_flat[] = { {"\x9C", 0, 0x6F5321}, /* Korean hangul */ {"\x9D", 0, 0x6F5322}, /* Korean hangul */ {"\x9E", 0, 0x6F5323}, /* Korean hangul */ {"\xA0", 0, 0x6F5324}, /* Korean hangul */ {"\xA3", 0, 0x6F5325}, /* Korean hangul */ {"\xA4", 0, 0x6F5326}, /* Korean hangul */ {"\xA5", 0, 0x6F5327}, /* Korean hangul */ {"\xA6", 0, 0x6F5328}, /* Korean hangul */ {"\xA7", 0, 0x6F5329}, /* Korean hangul */ {"\xAA", 0, 0x6F532A}, /* Korean hangul */ {"\xAC", 0, 0x6F532B}, /* Korean hangul */ {"\xAD", 0, 0x6F532C}, /* Korean hangul */ {"\xAF", 0, 0x6F532D}, /* Korean hangul */ {"\xB0", 0, 0x6F532E}, /* Korean hangul */ {"\xB1", 0, 0x6F532F}, /* Korean hangul */ {"\xB6", 0, 0x6F5330}, /* Korean hangul */ {"\xB8", 0, 0x6F5331}, /* Korean hangul */ {"\xB9", 0, 0x6F5332}, /* Korean hangul */ {"\xBC", 0, 0x6F5333}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page430 = { marc8r_31page430_flat, 0 }; /* PAGE 429 */ struct yaz_iconv_trie_flat marc8r_31page429_flat[] = { {"\x80", 0, 0x6F526B}, /* Korean hangul */ {"\x81", 0, 0x6F526C}, /* Korean hangul */ {"\x85", 0, 0x6F526D}, /* Korean hangul */ {"\x88", 0, 0x6F526E}, /* Korean hangul */ {"\x89", 0, 0x6F526F}, /* Korean hangul */ {"\x8C", 0, 0x6F5270}, /* Korean hangul */ {"\x8F", 0, 0x6F5271}, /* Korean hangul */ {"\x90", 0, 0x6F5272}, /* Korean hangul */ {"\x98", 0, 0x6F5273}, /* Korean hangul */ {"\x99", 0, 0x6F5274}, /* Korean hangul */ {"\x9B", 0, 0x6F5275}, /* Korean hangul */ {"\x9C", 0, 0x6F5276}, /* Korean hangul */ {"\x9D", 0, 0x6F5277}, /* Korean hangul */ {"\xA4", 0, 0x6F5278}, /* Korean hangul */ {"\xA5", 0, 0x6F5279}, /* Korean hangul */ {"\xA8", 0, 0x6F527A}, /* Korean hangul */ {"\xAC", 0, 0x6F527B}, /* Korean hangul */ {"\xB4", 0, 0x6F527C}, /* Korean hangul */ {"\xB7", 0, 0x6F527D}, /* Korean hangul */ {"\xB9", 0, 0x6F527E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page429 = { marc8r_31page429_flat, 0 }; /* PAGE 428 */ struct yaz_iconv_trie_flat marc8r_31page428_flat[] = { {"\x90", 0, 0x6F5256}, /* Korean hangul */ {"\x91", 0, 0x6F5257}, /* Korean hangul */ {"\x94", 0, 0x6F5258}, /* Korean hangul */ {"\x98", 0, 0x6F5259}, /* Korean hangul */ {"\xA0", 0, 0x6F525A}, /* Korean hangul */ {"\xA3", 0, 0x6F525B}, /* Korean hangul */ {"\xA5", 0, 0x6F525C}, /* Korean hangul */ {"\xAC", 0, 0x6F525F}, /* Korean hangul */ {"\xAD", 0, 0x6F5260}, /* Korean hangul */ {"\xAE", 0, 0x6F5261}, /* Korean hangul */ {"\xAF", 0, 0x6F5262}, /* Korean hangul */ {"\xB0", 0, 0x6F5263}, /* Korean hangul */ {"\xB3", 0, 0x6F5264}, /* Korean hangul */ {"\xB4", 0, 0x6F5265}, /* Korean hangul */ {"\xB5", 0, 0x6F5266}, /* Korean hangul */ {"\xB6", 0, 0x6F5267}, /* Korean hangul */ {"\xBC", 0, 0x6F5268}, /* Korean hangul */ {"\xBD", 0, 0x6F5269}, /* Korean hangul */ {"\xBF", 0, 0x6F526A}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page428 = { marc8r_31page428_flat, 0 }; /* PAGE 427 */ struct yaz_iconv_trie_flat marc8r_31page427_flat[] = { {"\x98", 0, 0x6F5250}, /* Korean hangul */ {"\x99", 0, 0x6F5251}, /* Korean hangul */ {"\x9C", 0, 0x6F5252}, /* Korean hangul */ {"\xA0", 0, 0x6F5253}, /* Korean hangul */ {"\xA8", 0, 0x6F5254}, /* Korean hangul */ {"\xA9", 0, 0x6F5255}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page427 = { marc8r_31page427_flat, 0 }; /* PAGE 426 */ struct yaz_iconv_trie_dir marc8r_31page426_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {428, 0, 0}, {429, 0, 0}, {430, 0, 0}, {431, 0, 0}, {432, 0, 0}, {433, 0, 0}, {434, 0, 0}, {435, 0, 0}, {436, 0, 0}, {437, 0, 0}, {438, 0, 0}, {439, 0, 0}, {440, 0, 0}, {441, 0, 0}, {442, 0, 0}, {443, 0, 0}, {444, 0, 0}, {445, 0, 0}, {446, 0, 0}, {447, 0, 0}, {448, 0, 0}, {449, 0, 0}, {450, 0, 0}, {451, 0, 0}, {452, 0, 0}, {453, 0, 0}, {454, 0, 0}, {455, 0, 0}, {456, 0, 0}, {457, 0, 0}, {458, 0, 0}, {459, 0, 0}, {460, 0, 0}, {461, 0, 0}, {462, 0, 0}, {463, 0, 0}, {464, 0, 0}, {465, 0, 0}, {466, 0, 0}, {467, 0, 0}, {468, 0, 0}, {469, 0, 0}, {470, 0, 0}, {471, 0, 0}, {472, 0, 0}, {473, 0, 0}, {474, 0, 0}, {475, 0, 0}, {476, 0, 0}, {477, 0, 0}, {478, 0, 0}, {479, 0, 0}, {480, 0, 0}, {481, 0, 0}, {482, 0, 0}, {483, 0, 0}, {484, 0, 0}, {485, 0, 0}, {486, 0, 0}, {487, 0, 0}, {488, 0, 0}, {489, 0, 0}, {490, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page426 = { 0, marc8r_31page426_dir }; /* PAGE 425 */ struct yaz_iconv_trie_flat marc8r_31page425_flat[] = { {"\x80", 0, 0x6F5247}, /* Korean hangul */ {"\x85", 0, 0x6F5248}, /* Korean hangul */ {"\x8C", 0, 0x6F5249}, /* Korean hangul */ {"\x8D", 0, 0x6F524A}, /* Korean hangul */ {"\x90", 0, 0x6F524B}, /* Korean hangul */ {"\x94", 0, 0x6F524C}, /* Korean hangul */ {"\x9C", 0, 0x6F524D}, /* Korean hangul */ {"\x9D", 0, 0x6F524E}, /* Korean hangul */ {"\xA1", 0, 0x6F524F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page425 = { marc8r_31page425_flat, 0 }; /* PAGE 424 */ struct yaz_iconv_trie_flat marc8r_31page424_flat[] = { {"\xB0", 0, 0x6F5246}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page424 = { marc8r_31page424_flat, 0 }; /* PAGE 423 */ struct yaz_iconv_trie_flat marc8r_31page423_flat[] = { {"\x80", 0, 0x6F523F}, /* Korean hangul */ {"\x81", 0, 0x6F5240}, /* Korean hangul */ {"\x84", 0, 0x6F5241}, /* Korean hangul */ {"\x88", 0, 0x6F5242}, /* Korean hangul */ {"\x90", 0, 0x6F5243}, /* Korean hangul */ {"\x91", 0, 0x6F5244}, /* Korean hangul */ {"\x95", 0, 0x6F5245}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page423 = { marc8r_31page423_flat, 0 }; /* PAGE 422 */ struct yaz_iconv_trie_flat marc8r_31page422_flat[] = { {"\x88", 0, 0x6F523B}, /* Korean hangul */ {"\x89", 0, 0x6F523C}, /* Korean hangul */ {"\x98", 0, 0x6F523D}, /* Korean hangul */ {"\x9D", 0, 0x6F523E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page422 = { marc8r_31page422_flat, 0 }; /* PAGE 421 */ struct yaz_iconv_trie_flat marc8r_31page421_flat[] = { {"\x90", 0, 0x6F5231}, /* Korean hangul */ {"\x91", 0, 0x6F5232}, /* Korean hangul */ {"\x94", 0, 0x6F5233}, /* Korean hangul */ {"\x97", 0, 0x6F5234}, /* Korean hangul */ {"\x98", 0, 0x6F5235}, /* Korean hangul */ {"\xA0", 0, 0x6F5236}, /* Korean hangul */ {"\xA3", 0, 0x6F5237}, /* Korean hangul */ {"\xA4", 0, 0x6F5238}, /* Korean hangul */ {"\xA5", 0, 0x6F5239}, /* Korean hangul */ {"\xAC", 0, 0x6F523A}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page421 = { marc8r_31page421_flat, 0 }; /* PAGE 420 */ struct yaz_iconv_trie_flat marc8r_31page420_flat[] = { {"\x80", 0, 0x6F5229}, /* Korean hangul */ {"\x84", 0, 0x6F522A}, /* Korean hangul */ {"\x8C", 0, 0x6F522B}, /* Korean hangul */ {"\x8F", 0, 0x6F522C}, /* Korean hangul */ {"\x90", 0, 0x6F522D}, /* Korean hangul */ {"\x91", 0, 0x6F522E}, /* Korean hangul */ {"\x98", 0, 0x6F522F}, /* Korean hangul */ {"\xA8", 0, 0x6F5230}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page420 = { marc8r_31page420_flat, 0 }; /* PAGE 419 */ struct yaz_iconv_trie_flat marc8r_31page419_flat[] = { {"\x84", 0, 0x6F516D}, /* Korean hangul */ {"\x85", 0, 0x6F516E}, /* Korean hangul */ {"\x88", 0, 0x6F516F}, /* Korean hangul */ {"\x8B", 0, 0x6F5170}, /* Korean hangul */ {"\x8C", 0, 0x6F5171}, /* Korean hangul */ {"\x8E", 0, 0x6F5172}, /* Korean hangul */ {"\x94", 0, 0x6F5173}, /* Korean hangul */ {"\x95", 0, 0x6F5174}, /* Korean hangul */ {"\x97", 0, 0x6F5175}, /* Korean hangul */ {"\x99", 0, 0x6F5176}, /* Korean hangul */ {"\x9A", 0, 0x6F5177}, /* Korean hangul */ {"\x9B", 0, 0x6F5178}, /* Korean hangul */ {"\xA0", 0, 0x6F517B}, /* Korean hangul */ {"\xA1", 0, 0x6F517C}, /* Korean hangul */ {"\xA4", 0, 0x6F517D}, /* Korean hangul */ {"\xA8", 0, 0x6F517E}, /* Korean hangul */ {"\xB0", 0, 0x6F5221}, /* Korean hangul */ {"\xB1", 0, 0x6F5222}, /* Korean hangul */ {"\xB3", 0, 0x6F5223}, /* Korean hangul */ {"\xB4", 0, 0x6F5224}, /* Korean hangul */ {"\xB5", 0, 0x6F5225}, /* Korean hangul */ {"\xBB", 0, 0x6F5226}, /* Korean hangul */ {"\xBC", 0, 0x6F5227}, /* Korean hangul */ {"\xBD", 0, 0x6F5228}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page419 = { marc8r_31page419_flat, 0 }; /* PAGE 418 */ struct yaz_iconv_trie_flat marc8r_31page418_flat[] = { {"\x8C", 0, 0x6F5166}, /* Korean hangul */ {"\x8D", 0, 0x6F5167}, /* Korean hangul */ {"\x90", 0, 0x6F5168}, /* Korean hangul */ {"\x94", 0, 0x6F5169}, /* Korean hangul */ {"\x9C", 0, 0x6F516A}, /* Korean hangul */ {"\x9D", 0, 0x6F516B}, /* Korean hangul */ {"\x9F", 0, 0x6F516C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page418 = { marc8r_31page418_flat, 0 }; /* PAGE 417 */ struct yaz_iconv_trie_flat marc8r_31page417_flat[] = { {"\x94", 0, 0x6F5164}, /* Korean hangul */ {"\xB0", 0, 0x6F5165}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page417 = { marc8r_31page417_flat, 0 }; /* PAGE 416 */ struct yaz_iconv_trie_flat marc8r_31page416_flat[] = { {"\x80", 0, 0x6F5158}, /* Korean hangul */ {"\x81", 0, 0x6F5159}, /* Korean hangul */ {"\x84", 0, 0x6F515A}, /* Korean hangul */ {"\x87", 0, 0x6F515B}, /* Korean hangul */ {"\x88", 0, 0x6F515C}, /* Korean hangul */ {"\x89", 0, 0x6F515D}, /* Korean hangul */ {"\x90", 0, 0x6F515E}, /* Korean hangul */ {"\x91", 0, 0x6F515F}, /* Korean hangul */ {"\x93", 0, 0x6F5160}, /* Korean hangul */ {"\x95", 0, 0x6F5161}, /* Korean hangul */ {"\x99", 0, 0x6F5162}, /* Korean hangul */ {"\x9C", 0, 0x6F5163}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page416 = { marc8r_31page416_flat, 0 }; /* PAGE 415 */ struct yaz_iconv_trie_flat marc8r_31page415_flat[] = { {"\x88", 0, 0x6F5151}, /* Korean hangul */ {"\x89", 0, 0x6F5152}, /* Korean hangul */ {"\x8C", 0, 0x6F5153}, /* Korean hangul */ {"\x90", 0, 0x6F5154}, /* Korean hangul */ {"\x98", 0, 0x6F5155}, /* Korean hangul */ {"\x99", 0, 0x6F5156}, /* Korean hangul */ {"\xA4", 0, 0x6F5157}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page415 = { marc8r_31page415_flat, 0 }; /* PAGE 414 */ struct yaz_iconv_trie_flat marc8r_31page414_flat[] = { {"\x84", 0, 0x6F514A}, /* Korean hangul */ {"\x85", 0, 0x6F514B}, /* Korean hangul */ {"\x87", 0, 0x6F514C}, /* Korean hangul */ {"\x89", 0, 0x6F514D}, /* Korean hangul */ {"\x90", 0, 0x6F514E}, /* Korean hangul */ {"\x94", 0, 0x6F514F}, /* Korean hangul */ {"\xA4", 0, 0x6F5150}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page414 = { marc8r_31page414_flat, 0 }; /* PAGE 413 */ struct yaz_iconv_trie_flat marc8r_31page413_flat[] = { {"\x80", 0, 0x6F513C}, /* Korean hangul */ {"\x84", 0, 0x6F513D}, /* Korean hangul */ {"\x8C", 0, 0x6F513E}, /* Korean hangul */ {"\x8D", 0, 0x6F513F}, /* Korean hangul */ {"\x8F", 0, 0x6F5140}, /* Korean hangul */ {"\x90", 0, 0x6F5141}, /* Korean hangul */ {"\x91", 0, 0x6F5142}, /* Korean hangul */ {"\x92", 0, 0x6F5143}, /* Korean hangul */ {"\x95", 0, 0x6F5144}, /* Korean hangul */ {"\xB4", 0, 0x6F5145}, /* Korean hangul */ {"\xB5", 0, 0x6F5146}, /* Korean hangul */ {"\xB6", 0, 0x6F5147}, /* Korean hangul */ {"\xB8", 0, 0x6F5148}, /* Korean hangul */ {"\xBC", 0, 0x6F5149}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page413 = { marc8r_31page413_flat, 0 }; /* PAGE 412 */ struct yaz_iconv_trie_flat marc8r_31page412_flat[] = { {"\x84", 0, 0x6F5126}, /* Korean hangul */ {"\x85", 0, 0x6F5127}, /* Korean hangul */ {"\x88", 0, 0x6F5128}, /* Korean hangul */ {"\x8B", 0, 0x6F5129}, /* Korean hangul */ {"\x8C", 0, 0x6F512A}, /* Korean hangul */ {"\x94", 0, 0x6F512B}, /* Korean hangul */ {"\x95", 0, 0x6F512C}, /* Korean hangul */ {"\x97", 0, 0x6F512D}, /* Korean hangul */ {"\x98", 0, 0x6F512E}, /* Korean hangul */ {"\x99", 0, 0x6F512F}, /* Korean hangul */ {"\x9A", 0, 0x6F5130}, /* Korean hangul */ {"\xA0", 0, 0x6F5131}, /* Korean hangul */ {"\xA1", 0, 0x6F5132}, /* Korean hangul */ {"\xA4", 0, 0x6F5133}, /* Korean hangul */ {"\xA7", 0, 0x6F5134}, /* Korean hangul */ {"\xA8", 0, 0x6F5135}, /* Korean hangul */ {"\xB0", 0, 0x6F5136}, /* Korean hangul */ {"\xB1", 0, 0x6F5137}, /* Korean hangul */ {"\xB3", 0, 0x6F5138}, /* Korean hangul */ {"\xB5", 0, 0x6F5139}, /* Korean hangul */ {"\xBC", 0, 0x6F513A}, /* Korean hangul */ {"\xBD", 0, 0x6F513B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page412 = { marc8r_31page412_flat, 0 }; /* PAGE 411 */ struct yaz_iconv_trie_flat marc8r_31page411_flat[] = { {"\x80", 0, 0x6F5121}, /* Korean hangul */ {"\x81", 0, 0x6F5122}, /* Korean hangul */ {"\x83", 0, 0x6F5123}, /* Korean hangul */ {"\x84", 0, 0x6F5124}, /* Korean hangul */ {"\x85", 0, 0x6F5125}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page411 = { marc8r_31page411_flat, 0 }; /* PAGE 410 */ struct yaz_iconv_trie_flat marc8r_31page410_flat[] = { {"\x80", 0, 0x6F5063}, /* Korean hangul */ {"\x88", 0, 0x6F5064}, /* Korean hangul */ {"\x89", 0, 0x6F5065}, /* Korean hangul */ {"\x8B", 0, 0x6F5066}, /* Korean hangul */ {"\x8D", 0, 0x6F5068}, /* Korean hangul */ {"\x8F", 0, 0x6F5069}, /* Korean hangul */ {"\x91", 0, 0x6F506A}, /* Korean hangul */ {"\x94", 0, 0x6F506D}, /* Korean hangul */ {"\x95", 0, 0x6F506E}, /* Korean hangul */ {"\x96", 0, 0x6F506F}, /* Korean hangul */ {"\x98", 0, 0x6F5070}, /* Korean hangul */ {"\x9B", 0, 0x6F5071}, /* Korean hangul */ {"\x9C", 0, 0x6F5072}, /* Korean hangul */ {"\x9D", 0, 0x6F5073}, /* Korean hangul */ {"\x9F", 0, 0x6F5074}, /* Korean hangul */ {"\xA4", 0, 0x6F5075}, /* Korean hangul */ {"\xA5", 0, 0x6F5076}, /* Korean hangul */ {"\xA7", 0, 0x6F5077}, /* Korean hangul */ {"\xA9", 0, 0x6F5078}, /* Korean hangul */ {"\xAD", 0, 0x6F5079}, /* Korean hangul */ {"\xB0", 0, 0x6F507A}, /* Korean hangul */ {"\xB1", 0, 0x6F507B}, /* Korean hangul */ {"\xB4", 0, 0x6F507C}, /* Korean hangul */ {"\xB7", 0, 0x6F507D}, /* Korean hangul */ {"\xB8", 0, 0x6F507E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page410 = { marc8r_31page410_flat, 0 }; /* PAGE 409 */ struct yaz_iconv_trie_flat marc8r_31page409_flat[] = { {"\x80", 0, 0x6F505B}, /* Korean hangul */ {"\x84", 0, 0x6F505C}, /* Korean hangul */ {"\x88", 0, 0x6F505D}, /* Korean hangul */ {"\x90", 0, 0x6F505E}, /* Korean hangul */ {"\xB8", 0, 0x6F505F}, /* Korean hangul */ {"\xB9", 0, 0x6F5060}, /* Korean hangul */ {"\xBC", 0, 0x6F5061}, /* Korean hangul */ {"\xBF", 0, 0x6F5062}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page409 = { marc8r_31page409_flat, 0 }; /* PAGE 408 */ struct yaz_iconv_trie_flat marc8r_31page408_flat[] = { {"\x88", 0, 0x6F5058}, /* Korean hangul */ {"\x8C", 0, 0x6F5059}, /* Korean hangul */ {"\xA4", 0, 0x6F505A}, /* Korean hangul */ {"\xB4", 0, 0x6F506B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page408 = { marc8r_31page408_flat, 0 }; /* PAGE 407 */ struct yaz_iconv_trie_flat marc8r_31page407_flat[] = { {"\x84", 0, 0x6F504E}, /* Korean hangul */ {"\x87", 0, 0x6F504F}, /* Korean hangul */ {"\x89", 0, 0x6F5050}, /* Korean hangul */ {"\x8D", 0, 0x6F5051}, /* Korean hangul */ {"\x8F", 0, 0x6F5052}, /* Korean hangul */ {"\x90", 0, 0x6F5053}, /* Korean hangul */ {"\x94", 0, 0x6F5054}, /* Korean hangul */ {"\x98", 0, 0x6F5055}, /* Korean hangul */ {"\xA1", 0, 0x6F5056}, /* Korean hangul */ {"\xA3", 0, 0x6F5057}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page407 = { marc8r_31page407_flat, 0 }; /* PAGE 406 */ struct yaz_iconv_trie_flat marc8r_31page406_flat[] = { {"\x8F", 0, 0x6F5045}, /* Korean hangul */ {"\x98", 0, 0x6F5046}, /* Korean hangul */ {"\xB4", 0, 0x6F5047}, /* Korean hangul */ {"\xB5", 0, 0x6F5048}, /* Korean hangul */ {"\xB6", 0, 0x6F5049}, /* Korean hangul */ {"\xB8", 0, 0x6F504A}, /* Korean hangul */ {"\xBB", 0, 0x6F504B}, /* Korean hangul */ {"\xBC", 0, 0x6F504C}, /* Korean hangul */ {"\xBD", 0, 0x6F504D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page406 = { marc8r_31page406_flat, 0 }; /* PAGE 405 */ struct yaz_iconv_trie_flat marc8r_31page405_flat[] = { {"\x83", 0, 0x6F5043}, /* Korean hangul */ {"\xBC", 0, 0x6F5044}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page405 = { marc8r_31page405_flat, 0 }; /* PAGE 404 */ struct yaz_iconv_trie_flat marc8r_31page404_flat[] = { {"\x83", 0, 0x6F5036}, /* Korean hangul */ {"\x84", 0, 0x6F5037}, /* Korean hangul */ {"\x85", 0, 0x6F5038}, /* Korean hangul */ {"\x87", 0, 0x6F5039}, /* Korean hangul */ {"\xA8", 0, 0x6F503A}, /* Korean hangul */ {"\xA9", 0, 0x6F503B}, /* Korean hangul */ {"\xAB", 0, 0x6F503C}, /* Korean hangul */ {"\xAC", 0, 0x6F503D}, /* Korean hangul */ {"\xB0", 0, 0x6F503E}, /* Korean hangul */ {"\xB8", 0, 0x6F503F}, /* Korean hangul */ {"\xB9", 0, 0x6F5040}, /* Korean hangul */ {"\xBB", 0, 0x6F5041}, /* Korean hangul */ {"\xBD", 0, 0x6F5042}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page404 = { marc8r_31page404_flat, 0 }; /* PAGE 403 */ struct yaz_iconv_trie_flat marc8r_31page403_flat[] = { {"\x80", 0, 0x6F5024}, /* Korean hangul */ {"\x88", 0, 0x6F5025}, /* Korean hangul */ {"\x89", 0, 0x6F5026}, /* Korean hangul */ {"\x8B", 0, 0x6F5027}, /* Korean hangul */ {"\x8D", 0, 0x6F5028}, /* Korean hangul */ {"\x8E", 0, 0x6F5029}, /* Korean hangul */ {"\x93", 0, 0x6F502A}, /* Korean hangul */ {"\x94", 0, 0x6F502B}, /* Korean hangul */ {"\x95", 0, 0x6F502C}, /* Korean hangul */ {"\x98", 0, 0x6F502D}, /* Korean hangul */ {"\x9C", 0, 0x6F502E}, /* Korean hangul */ {"\xA4", 0, 0x6F502F}, /* Korean hangul */ {"\xA5", 0, 0x6F5030}, /* Korean hangul */ {"\xA7", 0, 0x6F5031}, /* Korean hangul */ {"\xB0", 0, 0x6F5032}, /* Korean hangul */ {"\xB1", 0, 0x6F5033}, /* Korean hangul */ {"\xB4", 0, 0x6F5034}, /* Korean hangul */ {"\xB8", 0, 0x6F5035}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page403 = { marc8r_31page403_flat, 0 }; /* PAGE 402 */ struct yaz_iconv_trie_flat marc8r_31page402_flat[] = { {"\x80", 0, 0x6F4F7E}, /* Korean hangul */ {"\xB8", 0, 0x6F5021}, /* Korean hangul */ {"\xB9", 0, 0x6F5022}, /* Korean hangul */ {"\xBC", 0, 0x6F5023}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page402 = { marc8r_31page402_flat, 0 }; /* PAGE 401 */ struct yaz_iconv_trie_flat marc8r_31page401_flat[] = { {"\x81", 0, 0x6F4F63}, /* Korean hangul */ {"\x88", 0, 0x6F4F66}, /* Korean hangul */ {"\x89", 0, 0x6F4F67}, /* Korean hangul */ {"\x8C", 0, 0x6F4F68}, /* Korean hangul */ {"\x8E", 0, 0x6F4F69}, /* Korean hangul */ {"\x8F", 0, 0x6F4F6A}, /* Korean hangul */ {"\x90", 0, 0x6F4F6B}, /* Korean hangul */ {"\x91", 0, 0x6F4F6C}, /* Korean hangul */ {"\x98", 0, 0x6F4F6D}, /* Korean hangul */ {"\x99", 0, 0x6F4F6E}, /* Korean hangul */ {"\x9B", 0, 0x6F4F6F}, /* Korean hangul */ {"\x9D", 0, 0x6F4F70}, /* Korean hangul */ {"\x9E", 0, 0x6F4F71}, /* Korean hangul */ {"\xA1", 0, 0x6F4F72}, /* Korean hangul */ {"\xA3", 0, 0x6F4F73}, /* Korean hangul */ {"\xA4", 0, 0x6F4F74}, /* Korean hangul */ {"\xA5", 0, 0x6F4F75}, /* Korean hangul */ {"\xA8", 0, 0x6F4F76}, /* Korean hangul */ {"\xAC", 0, 0x6F4F77}, /* Korean hangul */ {"\xB4", 0, 0x6F4F78}, /* Korean hangul */ {"\xB5", 0, 0x6F4F79}, /* Korean hangul */ {"\xB7", 0, 0x6F4F7A}, /* Korean hangul */ {"\xB8", 0, 0x6F4F7B}, /* Korean hangul */ {"\xB9", 0, 0x6F4F7C}, /* Korean hangul */ {"\xBA", 0, 0x6F4F7D}, /* Korean hangul */ {"\x84", 0, 0x6F7733}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page401 = { marc8r_31page401_flat, 0 }; /* PAGE 400 */ struct yaz_iconv_trie_flat marc8r_31page400_flat[] = { {"\x84", 0, 0x6F4F57}, /* Korean hangul */ {"\x85", 0, 0x6F4F58}, /* Korean hangul */ {"\x87", 0, 0x6F4F59}, /* Korean hangul */ {"\x89", 0, 0x6F4F5A}, /* Korean hangul */ {"\x8E", 0, 0x6F4F5B}, /* Korean hangul */ {"\xAC", 0, 0x6F4F5C}, /* Korean hangul */ {"\xAD", 0, 0x6F4F5D}, /* Korean hangul */ {"\xB0", 0, 0x6F4F5E}, /* Korean hangul */ {"\xB4", 0, 0x6F4F5F}, /* Korean hangul */ {"\xBC", 0, 0x6F4F60}, /* Korean hangul */ {"\xBD", 0, 0x6F4F61}, /* Korean hangul */ {"\xBF", 0, 0x6F4F62}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page400 = { marc8r_31page400_flat, 0 }; /* PAGE 399 */ struct yaz_iconv_trie_flat marc8r_31page399_flat[] = { {"\x98", 0, 0x6F4F4D}, /* Korean hangul */ {"\x99", 0, 0x6F4F4E}, /* Korean hangul */ {"\x9C", 0, 0x6F4F4F}, /* Korean hangul */ {"\xA0", 0, 0x6F4F50}, /* Korean hangul */ {"\xA8", 0, 0x6F4F51}, /* Korean hangul */ {"\xAD", 0, 0x6F4F52}, /* Korean hangul */ {"\xB4", 0, 0x6F4F53}, /* Korean hangul */ {"\xB5", 0, 0x6F4F54}, /* Korean hangul */ {"\xB8", 0, 0x6F4F55}, /* Korean hangul */ {"\xBC", 0, 0x6F4F56}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page399 = { marc8r_31page399_flat, 0 }; /* PAGE 398 */ struct yaz_iconv_trie_flat marc8r_31page398_flat[] = { {"\x84", 0, 0x6F4F4B}, /* Korean hangul */ {"\xBC", 0, 0x6F4F4C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page398 = { marc8r_31page398_flat, 0 }; /* PAGE 397 */ struct yaz_iconv_trie_flat marc8r_31page397_flat[] = { {"\x8C", 0, 0x6F4F41}, /* Korean hangul */ {"\xA1", 0, 0x6F4F42}, /* Korean hangul */ {"\xA8", 0, 0x6F4F43}, /* Korean hangul */ {"\xA9", 0, 0x6F4F44}, /* Korean hangul */ {"\xAC", 0, 0x6F4F45}, /* Korean hangul */ {"\xB0", 0, 0x6F4F46}, /* Korean hangul */ {"\xB8", 0, 0x6F4F47}, /* Korean hangul */ {"\xB9", 0, 0x6F4F48}, /* Korean hangul */ {"\xBB", 0, 0x6F4F49}, /* Korean hangul */ {"\xBD", 0, 0x6F4F4A}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page397 = { marc8r_31page397_flat, 0 }; /* PAGE 396 */ struct yaz_iconv_trie_flat marc8r_31page396_flat[] = { {"\xB0", 0, 0x6F4F40}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page396 = { marc8r_31page396_flat, 0 }; /* PAGE 395 */ struct yaz_iconv_trie_flat marc8r_31page395_flat[] = { {"\x80", 0, 0x6F4F37}, /* Korean hangul */ {"\x9C", 0, 0x6F4F38}, /* Korean hangul */ {"\x9D", 0, 0x6F4F39}, /* Korean hangul */ {"\xA0", 0, 0x6F4F3A}, /* Korean hangul */ {"\xA4", 0, 0x6F4F3B}, /* Korean hangul */ {"\xAC", 0, 0x6F4F3C}, /* Korean hangul */ {"\xAD", 0, 0x6F4F3D}, /* Korean hangul */ {"\xAF", 0, 0x6F4F3E}, /* Korean hangul */ {"\xB1", 0, 0x6F4F3F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page395 = { marc8r_31page395_flat, 0 }; /* PAGE 394 */ struct yaz_iconv_trie_flat marc8r_31page394_flat[] = { {"\x80", 0, 0x6F4F23}, /* Korean hangul */ {"\x81", 0, 0x6F4F24}, /* Korean hangul */ {"\x87", 0, 0x6F4F25}, /* Korean hangul */ {"\x88", 0, 0x6F4F26}, /* Korean hangul */ {"\x89", 0, 0x6F4F27}, /* Korean hangul */ {"\x8C", 0, 0x6F4F28}, /* Korean hangul */ {"\x90", 0, 0x6F4F29}, /* Korean hangul */ {"\x98", 0, 0x6F4F2A}, /* Korean hangul */ {"\x99", 0, 0x6F4F2B}, /* Korean hangul */ {"\x9B", 0, 0x6F4F2C}, /* Korean hangul */ {"\x9D", 0, 0x6F4F2D}, /* Korean hangul */ {"\xA4", 0, 0x6F4F2E}, /* Korean hangul */ {"\xA5", 0, 0x6F4F2F}, /* Korean hangul */ {"\xA8", 0, 0x6F4F30}, /* Korean hangul */ {"\xAC", 0, 0x6F4F31}, /* Korean hangul */ {"\xB4", 0, 0x6F4F32}, /* Korean hangul */ {"\xB5", 0, 0x6F4F33}, /* Korean hangul */ {"\xB7", 0, 0x6F4F34}, /* Korean hangul */ {"\xB8", 0, 0x6F4F35}, /* Korean hangul */ {"\xB9", 0, 0x6F4F36}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page394 = { marc8r_31page394_flat, 0 }; /* PAGE 393 */ struct yaz_iconv_trie_flat marc8r_31page393_flat[] = { {"\x89", 0, 0x6F4E79}, /* Korean hangul */ {"\xAC", 0, 0x6F4E7A}, /* Korean hangul */ {"\xAD", 0, 0x6F4E7B}, /* Korean hangul */ {"\xB0", 0, 0x6F4E7C}, /* Korean hangul */ {"\xB4", 0, 0x6F4E7D}, /* Korean hangul */ {"\xBC", 0, 0x6F4E7E}, /* Korean hangul */ {"\xBD", 0, 0x6F4F21}, /* Korean hangul */ {"\xBF", 0, 0x6F4F22}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page393 = { marc8r_31page393_flat, 0 }; /* PAGE 392 */ struct yaz_iconv_trie_flat marc8r_31page392_flat[] = { {"\x80", 0, 0x6F4E66}, /* Korean hangul */ {"\x84", 0, 0x6F4E67}, /* Korean hangul */ {"\x8C", 0, 0x6F4E68}, /* Korean hangul */ {"\x8D", 0, 0x6F4E69}, /* Korean hangul */ {"\x8F", 0, 0x6F4E6A}, /* Korean hangul */ {"\x90", 0, 0x6F4E6B}, /* Korean hangul */ {"\x91", 0, 0x6F4E6C}, /* Korean hangul */ {"\x97", 0, 0x6F4E6D}, /* Korean hangul */ {"\x98", 0, 0x6F4E6E}, /* Korean hangul */ {"\x99", 0, 0x6F4E6F}, /* Korean hangul */ {"\x9C", 0, 0x6F4E70}, /* Korean hangul */ {"\xA0", 0, 0x6F4E71}, /* Korean hangul */ {"\xA8", 0, 0x6F4E72}, /* Korean hangul */ {"\xA9", 0, 0x6F4E73}, /* Korean hangul */ {"\xAB", 0, 0x6F4E74}, /* Korean hangul */ {"\xAC", 0, 0x6F4E75}, /* Korean hangul */ {"\xAD", 0, 0x6F4E76}, /* Korean hangul */ {"\xB4", 0, 0x6F4E77}, /* Korean hangul */ {"\xB5", 0, 0x6F4E78}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page392 = { marc8r_31page392_flat, 0 }; /* PAGE 391 */ struct yaz_iconv_trie_flat marc8r_31page391_flat[] = { {"\x84", 0, 0x6F4E5A}, /* Korean hangul */ {"\x88", 0, 0x6F4E5B}, /* Korean hangul */ {"\xA0", 0, 0x6F4E5C}, /* Korean hangul */ {"\xA4", 0, 0x6F4E5D}, /* Korean hangul */ {"\xA8", 0, 0x6F4E5E}, /* Korean hangul */ {"\xB0", 0, 0x6F4E5F}, /* Korean hangul */ {"\xB1", 0, 0x6F4E60}, /* Korean hangul */ {"\xB5", 0, 0x6F4E61}, /* Korean hangul */ {"\xBC", 0, 0x6F4E64}, /* Korean hangul */ {"\xBD", 0, 0x6F4E65}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page391 = { marc8r_31page391_flat, 0 }; /* PAGE 390 */ struct yaz_iconv_trie_flat marc8r_31page390_flat[] = { {"\x80", 0, 0x6F4E50}, /* Korean hangul */ {"\x81", 0, 0x6F4E51}, /* Korean hangul */ {"\xA8", 0, 0x6F4E52}, /* Korean hangul */ {"\xA9", 0, 0x6F4E53}, /* Korean hangul */ {"\xAC", 0, 0x6F4E54}, /* Korean hangul */ {"\xAF", 0, 0x6F4E55}, /* Korean hangul */ {"\xB0", 0, 0x6F4E56}, /* Korean hangul */ {"\xB8", 0, 0x6F4E57}, /* Korean hangul */ {"\xB9", 0, 0x6F4E58}, /* Korean hangul */ {"\xBB", 0, 0x6F4E59}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page390 = { marc8r_31page390_flat, 0 }; /* PAGE 389 */ struct yaz_iconv_trie_flat marc8r_31page389_flat[] = { {"\xB0", 0, 0x6F4E4D}, /* Korean hangul */ {"\xB4", 0, 0x6F4E4E}, /* Korean hangul */ {"\xB8", 0, 0x6F4E4F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page389 = { marc8r_31page389_flat, 0 }; /* PAGE 388 */ struct yaz_iconv_trie_flat marc8r_31page388_flat[] = { {"\x9C", 0, 0x6F4E47}, /* Korean hangul */ {"\x9D", 0, 0x6F4E48}, /* Korean hangul */ {"\xA4", 0, 0x6F4E49}, /* Korean hangul */ {"\xAB", 0, 0x6F4E4A}, /* Korean hangul */ {"\xAC", 0, 0x6F4E4B}, /* Korean hangul */ {"\xB1", 0, 0x6F4E4C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page388 = { marc8r_31page388_flat, 0 }; /* PAGE 387 */ struct yaz_iconv_trie_flat marc8r_31page387_flat[] = { {"\xA4", 0, 0x6F4E46}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page387 = { marc8r_31page387_flat, 0 }; /* PAGE 386 */ struct yaz_iconv_trie_flat marc8r_31page386_flat[] = { {"\x90", 0, 0x6F4E41}, /* Korean hangul */ {"\x91", 0, 0x6F4E42}, /* Korean hangul */ {"\x94", 0, 0x6F4E43}, /* Korean hangul */ {"\x98", 0, 0x6F4E44}, /* Korean hangul */ {"\xA5", 0, 0x6F4E45}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page386 = { marc8r_31page386_flat, 0 }; /* PAGE 385 */ struct yaz_iconv_trie_flat marc8r_31page385_flat[] = { {"\x80", 0, 0x6F4E3C}, /* Korean hangul */ {"\x84", 0, 0x6F4E3D}, /* Korean hangul */ {"\x8C", 0, 0x6F4E3E}, /* Korean hangul */ {"\x8F", 0, 0x6F4E3F}, /* Korean hangul */ {"\x91", 0, 0x6F4E40}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page385 = { marc8r_31page385_flat, 0 }; /* PAGE 384 */ struct yaz_iconv_trie_flat marc8r_31page384_flat[] = { {"\xA0", 0, 0x6F4E30}, /* Korean hangul */ {"\xA1", 0, 0x6F4E31}, /* Korean hangul */ {"\xA4", 0, 0x6F4E32}, /* Korean hangul */ {"\xA8", 0, 0x6F4E33}, /* Korean hangul */ {"\xAB", 0, 0x6F4E34}, /* Korean hangul */ {"\xB0", 0, 0x6F4E35}, /* Korean hangul */ {"\xB1", 0, 0x6F4E36}, /* Korean hangul */ {"\xB3", 0, 0x6F4E37}, /* Korean hangul */ {"\xB4", 0, 0x6F4E38}, /* Korean hangul */ {"\xB5", 0, 0x6F4E39}, /* Korean hangul */ {"\xBB", 0, 0x6F4E3A}, /* Korean hangul */ {"\xBC", 0, 0x6F4E3B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page384 = { marc8r_31page384_flat, 0 }; /* PAGE 383 */ struct yaz_iconv_trie_flat marc8r_31page383_flat[] = { {"\x80", 0, 0x6F4E21}, /* Korean hangul */ {"\x81", 0, 0x6F4E22}, /* Korean hangul */ {"\x83", 0, 0x6F4E23}, /* Korean hangul */ {"\x84", 0, 0x6F4E24}, /* Korean hangul */ {"\x85", 0, 0x6F4E25}, /* Korean hangul */ {"\x8B", 0, 0x6F4E26}, /* Korean hangul */ {"\x8C", 0, 0x6F4E27}, /* Korean hangul */ {"\x8D", 0, 0x6F4E28}, /* Korean hangul */ {"\x90", 0, 0x6F4E29}, /* Korean hangul */ {"\x94", 0, 0x6F4E2A}, /* Korean hangul */ {"\x9C", 0, 0x6F4E2B}, /* Korean hangul */ {"\x9D", 0, 0x6F4E2C}, /* Korean hangul */ {"\x9F", 0, 0x6F4E2D}, /* Korean hangul */ {"\xA0", 0, 0x6F4E2E}, /* Korean hangul */ {"\xA1", 0, 0x6F4E2F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page383 = { marc8r_31page383_flat, 0 }; /* PAGE 382 */ struct yaz_iconv_trie_flat marc8r_31page382_flat[] = { {"\x94", 0, 0x6F4D6B}, /* Korean hangul */ {"\x95", 0, 0x6F4D6C}, /* Korean hangul */ {"\x98", 0, 0x6F4D6D}, /* Korean hangul */ {"\x9B", 0, 0x6F4D6E}, /* Korean hangul */ {"\x9C", 0, 0x6F4D6F}, /* Korean hangul */ {"\xA4", 0, 0x6F4D70}, /* Korean hangul */ {"\xA5", 0, 0x6F4D71}, /* Korean hangul */ {"\xA7", 0, 0x6F4D72}, /* Korean hangul */ {"\xA8", 0, 0x6F4D73}, /* Korean hangul */ {"\xA9", 0, 0x6F4D74}, /* Korean hangul */ {"\xAA", 0, 0x6F4D75}, /* Korean hangul */ {"\xB0", 0, 0x6F4D78}, /* Korean hangul */ {"\xB1", 0, 0x6F4D79}, /* Korean hangul */ {"\xB2", 0, 0x6F4D7A}, /* Korean hangul */ {"\xB4", 0, 0x6F4D7B}, /* Korean hangul */ {"\xB7", 0, 0x6F4D7C}, /* Korean hangul */ {"\xB8", 0, 0x6F4D7D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page382 = { marc8r_31page382_flat, 0 }; /* PAGE 381 */ struct yaz_iconv_trie_flat marc8r_31page381_flat[] = { {"\x80", 0, 0x6F4D60}, /* Korean hangul */ {"\x90", 0, 0x6F4D61}, /* Korean hangul */ {"\x9C", 0, 0x6F4D62}, /* Korean hangul */ {"\x9D", 0, 0x6F4D63}, /* Korean hangul */ {"\xA0", 0, 0x6F4D64}, /* Korean hangul */ {"\xA3", 0, 0x6F4D65}, /* Korean hangul */ {"\xA4", 0, 0x6F4D66}, /* Korean hangul */ {"\xAC", 0, 0x6F4D67}, /* Korean hangul */ {"\xAD", 0, 0x6F4D68}, /* Korean hangul */ {"\xAF", 0, 0x6F4D69}, /* Korean hangul */ {"\xB1", 0, 0x6F4D6A}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page381 = { marc8r_31page381_flat, 0 }; /* PAGE 380 */ struct yaz_iconv_trie_flat marc8r_31page380_flat[] = { {"\x80", 0, 0x6F4D5C}, /* Korean hangul */ {"\x88", 0, 0x6F4D5D}, /* Korean hangul */ {"\xA4", 0, 0x6F4D5E}, /* Korean hangul */ {"\xB7", 0, 0x6F4D5F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page380 = { marc8r_31page380_flat, 0 }; /* PAGE 379 */ struct yaz_iconv_trie_flat marc8r_31page379_flat[] = { {"\x90", 0, 0x6F4D53}, /* Korean hangul */ {"\x91", 0, 0x6F4D54}, /* Korean hangul */ {"\x94", 0, 0x6F4D55}, /* Korean hangul */ {"\x98", 0, 0x6F4D56}, /* Korean hangul */ {"\xA0", 0, 0x6F4D57}, /* Korean hangul */ {"\xA1", 0, 0x6F4D58}, /* Korean hangul */ {"\xA3", 0, 0x6F4D59}, /* Korean hangul */ {"\xA5", 0, 0x6F4D5A}, /* Korean hangul */ {"\xAC", 0, 0x6F4D5B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page379 = { marc8r_31page379_flat, 0 }; /* PAGE 378 */ struct yaz_iconv_trie_flat marc8r_31page378_flat[] = { {"\x80", 0, 0x6F4D4A}, /* Korean hangul */ {"\x90", 0, 0x6F4D4B}, /* Korean hangul */ {"\x98", 0, 0x6F4D4C}, /* Korean hangul */ {"\x9C", 0, 0x6F4D4D}, /* Korean hangul */ {"\xA0", 0, 0x6F4D4E}, /* Korean hangul */ {"\xA8", 0, 0x6F4D4F}, /* Korean hangul */ {"\xA9", 0, 0x6F4D50}, /* Korean hangul */ {"\xAB", 0, 0x6F4D51}, /* Korean hangul */ {"\xAC", 0, 0x6F4D52}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page378 = { marc8r_31page378_flat, 0 }; /* PAGE 377 */ struct yaz_iconv_trie_flat marc8r_31page377_flat[] = { {"\x84", 0, 0x6F4D3E}, /* Korean hangul */ {"\x85", 0, 0x6F4D3F}, /* Korean hangul */ {"\x88", 0, 0x6F4D40}, /* Korean hangul */ {"\x8B", 0, 0x6F4D41}, /* Korean hangul */ {"\x8C", 0, 0x6F4D42}, /* Korean hangul */ {"\x90", 0, 0x6F4D43}, /* Korean hangul */ {"\x94", 0, 0x6F4D44}, /* Korean hangul */ {"\x95", 0, 0x6F4D45}, /* Korean hangul */ {"\x97", 0, 0x6F4D46}, /* Korean hangul */ {"\x99", 0, 0x6F4D47}, /* Korean hangul */ {"\x9B", 0, 0x6F4D48}, /* Korean hangul */ {"\xBC", 0, 0x6F4D49}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page377 = { marc8r_31page377_flat, 0 }; /* PAGE 376 */ struct yaz_iconv_trie_flat marc8r_31page376_flat[] = { {"\x80", 0, 0x6F4D3A}, /* Korean hangul */ {"\x83", 0, 0x6F4D3B}, /* Korean hangul */ {"\x85", 0, 0x6F4D3C}, /* Korean hangul */ {"\x8C", 0, 0x6F4D3D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page376 = { marc8r_31page376_flat, 0 }; /* PAGE 375 */ struct yaz_iconv_trie_flat marc8r_31page375_flat[] = { {"\x94", 0, 0x6F4D28}, /* Korean hangul */ {"\x95", 0, 0x6F4D29}, /* Korean hangul */ {"\x98", 0, 0x6F4D2A}, /* Korean hangul */ {"\x9B", 0, 0x6F4D2B}, /* Korean hangul */ {"\x9C", 0, 0x6F4D2C}, /* Korean hangul */ {"\x9F", 0, 0x6F4D2D}, /* Korean hangul */ {"\xA4", 0, 0x6F4D2E}, /* Korean hangul */ {"\xA5", 0, 0x6F4D2F}, /* Korean hangul */ {"\xA7", 0, 0x6F4D30}, /* Korean hangul */ {"\xA8", 0, 0x6F4D31}, /* Korean hangul */ {"\xA9", 0, 0x6F4D32}, /* Korean hangul */ {"\xAA", 0, 0x6F4D33}, /* Korean hangul */ {"\xAB", 0, 0x6F4D34}, /* Korean hangul */ {"\xAE", 0, 0x6F4D35}, /* Korean hangul */ {"\xB0", 0, 0x6F4D36}, /* Korean hangul */ {"\xB1", 0, 0x6F4D37}, /* Korean hangul */ {"\xB4", 0, 0x6F4D38}, /* Korean hangul */ {"\xB8", 0, 0x6F4D39}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page375 = { marc8r_31page375_flat, 0 }; /* PAGE 374 */ struct yaz_iconv_trie_flat marc8r_31page374_flat[] = { {"\x80", 0, 0x6F4C7D}, /* Korean hangul */ {"\x81", 0, 0x6F4C7E}, /* Korean hangul */ {"\x84", 0, 0x6F4D21}, /* Korean hangul */ {"\x88", 0, 0x6F4D22}, /* Korean hangul */ {"\x90", 0, 0x6F4D23}, /* Korean hangul */ {"\x91", 0, 0x6F4D24}, /* Korean hangul */ {"\x93", 0, 0x6F4D25}, /* Korean hangul */ {"\x94", 0, 0x6F4D26}, /* Korean hangul */ {"\x95", 0, 0x6F4D27}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page374 = { marc8r_31page374_flat, 0 }; /* PAGE 373 */ struct yaz_iconv_trie_flat marc8r_31page373_flat[] = { {"\x88", 0, 0x6F4C62}, /* Korean hangul */ {"\x89", 0, 0x6F4C63}, /* Korean hangul */ {"\x8C", 0, 0x6F4C64}, /* Korean hangul */ {"\x90", 0, 0x6F4C65}, /* Korean hangul */ {"\x98", 0, 0x6F4C66}, /* Korean hangul */ {"\x99", 0, 0x6F4C67}, /* Korean hangul */ {"\x9B", 0, 0x6F4C68}, /* Korean hangul */ {"\x9D", 0, 0x6F4C69}, /* Korean hangul */ {"\xA2", 0, 0x6F4C6A}, /* Korean hangul */ {"\xA4", 0, 0x6F4C6D}, /* Korean hangul */ {"\xA5", 0, 0x6F4C6E}, /* Korean hangul */ {"\xA6", 0, 0x6F4C6F}, /* Korean hangul */ {"\xA8", 0, 0x6F4C70}, /* Korean hangul */ {"\xAB", 0, 0x6F4C71}, /* Korean hangul */ {"\xAC", 0, 0x6F4C72}, /* Korean hangul */ {"\xAD", 0, 0x6F4C73}, /* Korean hangul */ {"\xAE", 0, 0x6F4C74}, /* Korean hangul */ {"\xB3", 0, 0x6F4C75}, /* Korean hangul */ {"\xB4", 0, 0x6F4C76}, /* Korean hangul */ {"\xB5", 0, 0x6F4C77}, /* Korean hangul */ {"\xB7", 0, 0x6F4C78}, /* Korean hangul */ {"\xB9", 0, 0x6F4C79}, /* Korean hangul */ {"\xBA", 0, 0x6F4C7A}, /* Korean hangul */ {"\xBB", 0, 0x6F4C7B}, /* Korean hangul */ {"\xBF", 0, 0x6F4C7C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page373 = { marc8r_31page373_flat, 0 }; /* PAGE 372 */ struct yaz_iconv_trie_flat marc8r_31page372_flat[] = { {"\x84", 0, 0x6F4C55}, /* Korean hangul */ {"\x89", 0, 0x6F4C56}, /* Korean hangul */ {"\x90", 0, 0x6F4C57}, /* Korean hangul */ {"\x91", 0, 0x6F4C58}, /* Korean hangul */ {"\x94", 0, 0x6F4C59}, /* Korean hangul */ {"\x98", 0, 0x6F4C5A}, /* Korean hangul */ {"\x99", 0, 0x6F4C5B}, /* Korean hangul */ {"\xA0", 0, 0x6F4C5C}, /* Korean hangul */ {"\xA1", 0, 0x6F4C5D}, /* Korean hangul */ {"\xA5", 0, 0x6F4C5E}, /* Korean hangul */ {"\xA6", 0, 0x6F4C5F}, /* Korean hangul */ {"\xAA", 0, 0x6F4C60}, /* Korean hangul */ {"\xAC", 0, 0x6F4C61}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page372 = { marc8r_31page372_flat, 0 }; /* PAGE 371 */ struct yaz_iconv_trie_flat marc8r_31page371_flat[] = { {"\x98", 0, 0x6F4C4F}, /* Korean hangul */ {"\x9C", 0, 0x6F4C50}, /* Korean hangul */ {"\xA0", 0, 0x6F4C51}, /* Korean hangul */ {"\xA8", 0, 0x6F4C52}, /* Korean hangul */ {"\xA9", 0, 0x6F4C53}, /* Korean hangul */ {"\xB4", 0, 0x6F4C54}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page371 = { marc8r_31page371_flat, 0 }; /* PAGE 370 */ struct yaz_iconv_trie_flat marc8r_31page370_flat[] = { {"\x84", 0, 0x6F4C43}, /* Korean hangul */ {"\x85", 0, 0x6F4C44}, /* Korean hangul */ {"\x88", 0, 0x6F4C45}, /* Korean hangul */ {"\x8B", 0, 0x6F4C46}, /* Korean hangul */ {"\x8C", 0, 0x6F4C47}, /* Korean hangul */ {"\x93", 0, 0x6F4C48}, /* Korean hangul */ {"\x94", 0, 0x6F4C49}, /* Korean hangul */ {"\x95", 0, 0x6F4C4A}, /* Korean hangul */ {"\x97", 0, 0x6F4C4B}, /* Korean hangul */ {"\xA0", 0, 0x6F4C4C}, /* Korean hangul */ {"\xB3", 0, 0x6F4C4D}, /* Korean hangul */ {"\xB4", 0, 0x6F4C4E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page370 = { marc8r_31page370_flat, 0 }; /* PAGE 369 */ struct yaz_iconv_trie_flat marc8r_31page369_flat[] = { {"\x8C", 0, 0x6F4C3D}, /* Korean hangul */ {"\x90", 0, 0x6F4C3E}, /* Korean hangul */ {"\x94", 0, 0x6F4C3F}, /* Korean hangul */ {"\x9C", 0, 0x6F4C40}, /* Korean hangul */ {"\xA8", 0, 0x6F4C41}, /* Korean hangul */ {"\xBD", 0, 0x6F4C42}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page369 = { marc8r_31page369_flat, 0 }; /* PAGE 368 */ struct yaz_iconv_trie_flat marc8r_31page368_flat[] = { {"\x80", 0, 0x6F4C34}, /* Korean hangul */ {"\x88", 0, 0x6F4C35}, /* Korean hangul */ {"\x89", 0, 0x6F4C36}, /* Korean hangul */ {"\x8B", 0, 0x6F4C37}, /* Korean hangul */ {"\x8D", 0, 0x6F4C38}, /* Korean hangul */ {"\x92", 0, 0x6F4C39}, /* Korean hangul */ {"\x93", 0, 0x6F4C3A}, /* Korean hangul */ {"\x94", 0, 0x6F4C3B}, /* Korean hangul */ {"\xA8", 0, 0x6F4C3C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page368 = { marc8r_31page368_flat, 0 }; /* PAGE 367 */ struct yaz_iconv_trie_flat marc8r_31page367_flat[] = { {"\x80", 0, 0x6F4C26}, /* Korean hangul */ {"\x81", 0, 0x6F4C27}, /* Korean hangul */ {"\x84", 0, 0x6F4C28}, /* Korean hangul */ {"\x90", 0, 0x6F4C29}, /* Korean hangul */ {"\x91", 0, 0x6F4C2A}, /* Korean hangul */ {"\x93", 0, 0x6F4C2B}, /* Korean hangul */ {"\x94", 0, 0x6F4C2C}, /* Korean hangul */ {"\x95", 0, 0x6F4C2D}, /* Korean hangul */ {"\x98", 0, 0x6F4C2E}, /* Korean hangul */ {"\x9C", 0, 0x6F4C2F}, /* Korean hangul */ {"\xB8", 0, 0x6F4C30}, /* Korean hangul */ {"\xB9", 0, 0x6F4C31}, /* Korean hangul */ {"\xBA", 0, 0x6F4C32}, /* Korean hangul */ {"\xBC", 0, 0x6F4C33}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page367 = { marc8r_31page367_flat, 0 }; /* PAGE 366 */ struct yaz_iconv_trie_flat marc8r_31page366_flat[] = { {"\x88", 0, 0x6F4B6E}, /* Korean hangul */ {"\x89", 0, 0x6F4B6F}, /* Korean hangul */ {"\x8B", 0, 0x6F4B71}, /* Korean hangul */ {"\x8C", 0, 0x6F4B72}, /* Korean hangul */ {"\x8F", 0, 0x6F4B73}, /* Korean hangul */ {"\x90", 0, 0x6F4B74}, /* Korean hangul */ {"\x93", 0, 0x6F4B75}, /* Korean hangul */ {"\x98", 0, 0x6F4B76}, /* Korean hangul */ {"\x99", 0, 0x6F4B77}, /* Korean hangul */ {"\x9B", 0, 0x6F4B78}, /* Korean hangul */ {"\x9C", 0, 0x6F4B79}, /* Korean hangul */ {"\x9D", 0, 0x6F4B7A}, /* Korean hangul */ {"\x9E", 0, 0x6F4B7B}, /* Korean hangul */ {"\xA3", 0, 0x6F4B7C}, /* Korean hangul */ {"\xA4", 0, 0x6F4B7D}, /* Korean hangul */ {"\xA5", 0, 0x6F4B7E}, /* Korean hangul */ {"\xA8", 0, 0x6F4C21}, /* Korean hangul */ {"\xAC", 0, 0x6F4C22}, /* Korean hangul */ {"\xB4", 0, 0x6F4C23}, /* Korean hangul */ {"\xB5", 0, 0x6F4C24}, /* Korean hangul */ {"\xB7", 0, 0x6F4C25}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page366 = { marc8r_31page366_flat, 0 }; /* PAGE 365 */ struct yaz_iconv_trie_flat marc8r_31page365_flat[] = { {"\x84", 0, 0x6F4B64}, /* Korean hangul */ {"\x85", 0, 0x6F4B65}, /* Korean hangul */ {"\x87", 0, 0x6F4B66}, /* Korean hangul */ {"\x88", 0, 0x6F4B67}, /* Korean hangul */ {"\x89", 0, 0x6F4B68}, /* Korean hangul */ {"\x90", 0, 0x6F4B69}, /* Korean hangul */ {"\x91", 0, 0x6F4B6A}, /* Korean hangul */ {"\xA0", 0, 0x6F4B6B}, /* Korean hangul */ {"\xA5", 0, 0x6F4B6C}, /* Korean hangul */ {"\xAC", 0, 0x6F4B6D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page365 = { marc8r_31page365_flat, 0 }; /* PAGE 364 */ struct yaz_iconv_trie_flat marc8r_31page364_flat[] = { {"\x80", 0, 0x6F4B46}, /* Korean hangul */ {"\x84", 0, 0x6F4B47}, /* Korean hangul */ {"\x8C", 0, 0x6F4B48}, /* Korean hangul */ {"\x8D", 0, 0x6F4B49}, /* Korean hangul */ {"\x8F", 0, 0x6F4B4A}, /* Korean hangul */ {"\x90", 0, 0x6F4B4B}, /* Korean hangul */ {"\x91", 0, 0x6F4B4C}, /* Korean hangul */ {"\x98", 0, 0x6F4B4F}, /* Korean hangul */ {"\x99", 0, 0x6F4B50}, /* Korean hangul */ {"\x9A", 0, 0x6F4B51}, /* Korean hangul */ {"\x9C", 0, 0x6F4B52}, /* Korean hangul */ {"\x9F", 0, 0x6F4B53}, /* Korean hangul */ {"\xA0", 0, 0x6F4B54}, /* Korean hangul */ {"\xA1", 0, 0x6F4B55}, /* Korean hangul */ {"\xA8", 0, 0x6F4B56}, /* Korean hangul */ {"\xA9", 0, 0x6F4B57}, /* Korean hangul */ {"\xAB", 0, 0x6F4B58}, /* Korean hangul */ {"\xAC", 0, 0x6F4B59}, /* Korean hangul */ {"\xAD", 0, 0x6F4B5A}, /* Korean hangul */ {"\xAE", 0, 0x6F4B5B}, /* Korean hangul */ {"\xAF", 0, 0x6F4B5C}, /* Korean hangul */ {"\xB1", 0, 0x6F4B5D}, /* Korean hangul */ {"\xB3", 0, 0x6F4B5E}, /* Korean hangul */ {"\xB4", 0, 0x6F4B5F}, /* Korean hangul */ {"\xB5", 0, 0x6F4B60}, /* Korean hangul */ {"\xB8", 0, 0x6F4B61}, /* Korean hangul */ {"\xBB", 0, 0x6F4B62}, /* Korean hangul */ {"\xBC", 0, 0x6F4B63}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page364 = { marc8r_31page364_flat, 0 }; /* PAGE 363 */ struct yaz_iconv_trie_flat marc8r_31page363_flat[] = { {"\x84", 0, 0x6F4B39}, /* Korean hangul */ {"\x85", 0, 0x6F4B3A}, /* Korean hangul */ {"\x88", 0, 0x6F4B3B}, /* Korean hangul */ {"\x8A", 0, 0x6F4B3C}, /* Korean hangul */ {"\x8C", 0, 0x6F4B3D}, /* Korean hangul */ {"\x93", 0, 0x6F4B3E}, /* Korean hangul */ {"\x94", 0, 0x6F4B3F}, /* Korean hangul */ {"\x95", 0, 0x6F4B40}, /* Korean hangul */ {"\x97", 0, 0x6F4B41}, /* Korean hangul */ {"\x99", 0, 0x6F4B42}, /* Korean hangul */ {"\x9D", 0, 0x6F4B43}, /* Korean hangul */ {"\xBC", 0, 0x6F4B44}, /* Korean hangul */ {"\xBD", 0, 0x6F4B45}, /* Korean hangul */ {"\xA0", 0, 0x6F7732}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page363 = { marc8r_31page363_flat, 0 }; /* PAGE 362 */ struct yaz_iconv_trie_flat marc8r_31page362_flat[] = { {"\x80", 0, 0x6F4B30}, /* Korean hangul */ {"\x8C", 0, 0x6F4B32}, /* Korean hangul */ {"\x8D", 0, 0x6F4B33}, /* Korean hangul */ {"\x90", 0, 0x6F4B34}, /* Korean hangul */ {"\x94", 0, 0x6F4B35}, /* Korean hangul */ {"\x9C", 0, 0x6F4B36}, /* Korean hangul */ {"\x9D", 0, 0x6F4B37}, /* Korean hangul */ {"\xA8", 0, 0x6F4B38}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page362 = { marc8r_31page362_flat, 0 }; /* PAGE 361 */ struct yaz_iconv_trie_dir marc8r_31page361_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {363, 0, 0}, {364, 0, 0}, {365, 0, 0}, {366, 0, 0}, {367, 0, 0}, {368, 0, 0}, {369, 0, 0}, {370, 0, 0}, {371, 0, 0}, {372, 0, 0}, {373, 0, 0}, {374, 0, 0}, {375, 0, 0}, {376, 0, 0}, {377, 0, 0}, {378, 0, 0}, {379, 0, 0}, {380, 0, 0}, {381, 0, 0}, {382, 0, 0}, {383, 0, 0}, {384, 0, 0}, {385, 0, 0}, {386, 0, 0}, {387, 0, 0}, {388, 0, 0}, {389, 0, 0}, {390, 0, 0}, {391, 0, 0}, {392, 0, 0}, {393, 0, 0}, {394, 0, 0}, {395, 0, 0}, {396, 0, 0}, {397, 0, 0}, {398, 0, 0}, {399, 0, 0}, {400, 0, 0}, {401, 0, 0}, {402, 0, 0}, {403, 0, 0}, {404, 0, 0}, {405, 0, 0}, {406, 0, 0}, {407, 0, 0}, {408, 0, 0}, {409, 0, 0}, {410, 0, 0}, {411, 0, 0}, {412, 0, 0}, {413, 0, 0}, {414, 0, 0}, {415, 0, 0}, {416, 0, 0}, {417, 0, 0}, {418, 0, 0}, {419, 0, 0}, {420, 0, 0}, {421, 0, 0}, {422, 0, 0}, {423, 0, 0}, {424, 0, 0}, {425, 0, 0}, {426, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page361 = { 0, marc8r_31page361_dir }; /* PAGE 360 */ struct yaz_iconv_trie_flat marc8r_31page360_flat[] = { {"\x80", 0, 0x6F4B25}, /* Korean hangul */ {"\x87", 0, 0x6F4B26}, /* Korean hangul */ {"\x88", 0, 0x6F4B27}, /* Korean hangul */ {"\x89", 0, 0x6F4B28}, /* Korean hangul */ {"\x8B", 0, 0x6F4B29}, /* Korean hangul */ {"\x8D", 0, 0x6F4B2A}, /* Korean hangul */ {"\x8E", 0, 0x6F4B2B}, /* Korean hangul */ {"\x94", 0, 0x6F4B2C}, /* Korean hangul */ {"\x98", 0, 0x6F4B2D}, /* Korean hangul */ {"\xA9", 0, 0x6F4B2E}, /* Korean hangul */ {"\xB0", 0, 0x6F4B2F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page360 = { marc8r_31page360_flat, 0 }; /* PAGE 359 */ struct yaz_iconv_trie_flat marc8r_31page359_flat[] = { {"\x80", 0, 0x6F4A7A}, /* Korean hangul */ {"\x84", 0, 0x6F4A7B}, /* Korean hangul */ {"\x88", 0, 0x6F4A7C}, /* Korean hangul */ {"\x90", 0, 0x6F4A7D}, /* Korean hangul */ {"\x95", 0, 0x6F4A7E}, /* Korean hangul */ {"\x9C", 0, 0x6F4B21}, /* Korean hangul */ {"\xB8", 0, 0x6F4B22}, /* Korean hangul */ {"\xB9", 0, 0x6F4B23}, /* Korean hangul */ {"\xBC", 0, 0x6F4B24}, /* Korean hangul */ {"\xBF", 0, 0x6F7731}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page359 = { marc8r_31page359_flat, 0 }; /* PAGE 358 */ struct yaz_iconv_trie_flat marc8r_31page358_flat[] = { {"\x81", 0, 0x6F4A6E}, /* Korean hangul */ {"\x82", 0, 0x6F4A6F}, /* Korean hangul */ {"\x83", 0, 0x6F4A70}, /* Korean hangul */ {"\x88", 0, 0x6F4A71}, /* Korean hangul */ {"\x89", 0, 0x6F4A72}, /* Korean hangul */ {"\x8C", 0, 0x6F4A73}, /* Korean hangul */ {"\x98", 0, 0x6F4A74}, /* Korean hangul */ {"\x9C", 0, 0x6F4A75}, /* Korean hangul */ {"\x9D", 0, 0x6F4A76}, /* Korean hangul */ {"\xA4", 0, 0x6F4A77}, /* Korean hangul */ {"\xA5", 0, 0x6F4A78}, /* Korean hangul */ {"\xB9", 0, 0x6F4A79}, /* Korean hangul */ {"\x90", 0, 0x6F7730}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page358 = { marc8r_31page358_flat, 0 }; /* PAGE 357 */ struct yaz_iconv_trie_flat marc8r_31page357_flat[] = { {"\x8D", 0, 0x6F4A66}, /* Korean hangul */ {"\xAC", 0, 0x6F4A67}, /* Korean hangul */ {"\xAD", 0, 0x6F4A68}, /* Korean hangul */ {"\xB0", 0, 0x6F4A69}, /* Korean hangul */ {"\xB4", 0, 0x6F4A6A}, /* Korean hangul */ {"\xBC", 0, 0x6F4A6B}, /* Korean hangul */ {"\xBD", 0, 0x6F4A6C}, /* Korean hangul */ {"\xBF", 0, 0x6F4A6D}, /* Korean hangul */ {"\x89", 0, 0x6F772F}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page357 = { marc8r_31page357_flat, 0 }; /* PAGE 356 */ struct yaz_iconv_trie_flat marc8r_31page356_flat[] = { {"\x80", 0, 0x6F4A5C}, /* Korean hangul */ {"\x84", 0, 0x6F4A5D}, /* Korean hangul */ {"\x8C", 0, 0x6F4A5E}, /* Korean hangul */ {"\x8D", 0, 0x6F4A5F}, /* Korean hangul */ {"\x8F", 0, 0x6F4A60}, /* Korean hangul */ {"\x90", 0, 0x6F4A61}, /* Korean hangul */ {"\x91", 0, 0x6F4A62}, /* Korean hangul */ {"\x98", 0, 0x6F4A63}, /* Korean hangul */ {"\x9C", 0, 0x6F4A64}, /* Korean hangul */ {"\xB4", 0, 0x6F4A65}, /* Korean hangul */ {"\xAD", 0, 0x6F772E}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page356 = { marc8r_31page356_flat, 0 }; /* PAGE 355 */ struct yaz_iconv_trie_flat marc8r_31page355_flat[] = { {"\x84", 0, 0x6F4A57}, /* Korean hangul */ {"\x85", 0, 0x6F4A58}, /* Korean hangul */ {"\xBC", 0, 0x6F4A59}, /* Korean hangul */ {"\xBD", 0, 0x6F4A5A}, /* Korean hangul */ {"\xBE", 0, 0x6F4A5B}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page355 = { marc8r_31page355_flat, 0 }; /* PAGE 354 */ struct yaz_iconv_trie_flat marc8r_31page354_flat[] = { {"\x80", 0, 0x6F4A3B}, /* Korean hangul */ {"\x81", 0, 0x6F4A3C}, /* Korean hangul */ {"\x83", 0, 0x6F4A3D}, /* Korean hangul */ {"\x84", 0, 0x6F4A3E}, /* Korean hangul */ {"\x85", 0, 0x6F4A3F}, /* Korean hangul */ {"\x8A", 0, 0x6F4A40}, /* Korean hangul */ {"\x8C", 0, 0x6F4A43}, /* Korean hangul */ {"\x8D", 0, 0x6F4A44}, /* Korean hangul */ {"\x8E", 0, 0x6F4A45}, /* Korean hangul */ {"\x90", 0, 0x6F4A46}, /* Korean hangul */ {"\x94", 0, 0x6F4A47}, /* Korean hangul */ {"\x9C", 0, 0x6F4A48}, /* Korean hangul */ {"\x9D", 0, 0x6F4A49}, /* Korean hangul */ {"\xA0", 0, 0x6F4A4A}, /* Korean hangul */ {"\xA1", 0, 0x6F4A4B}, /* Korean hangul */ {"\xA2", 0, 0x6F4A4C}, /* Korean hangul */ {"\xA5", 0, 0x6F4A4D}, /* Korean hangul */ {"\xA8", 0, 0x6F4A4E}, /* Korean hangul */ {"\xA9", 0, 0x6F4A4F}, /* Korean hangul */ {"\xAC", 0, 0x6F4A50}, /* Korean hangul */ {"\xB0", 0, 0x6F4A51}, /* Korean hangul */ {"\xB8", 0, 0x6F4A52}, /* Korean hangul */ {"\xB9", 0, 0x6F4A53}, /* Korean hangul */ {"\xBB", 0, 0x6F4A54}, /* Korean hangul */ {"\xBC", 0, 0x6F4A55}, /* Korean hangul */ {"\xBD", 0, 0x6F4A56}, /* Korean hangul */ {"\x9F", 0, 0x6F772D}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page354 = { marc8r_31page354_flat, 0 }; /* PAGE 353 */ struct yaz_iconv_trie_flat marc8r_31page353_flat[] = { {"\x80", 0, 0x6F4A30}, /* Korean hangul */ {"\x81", 0, 0x6F4A31}, /* Korean hangul */ {"\x88", 0, 0x6F4A32}, /* Korean hangul */ {"\x89", 0, 0x6F4A33}, /* Korean hangul */ {"\x8B", 0, 0x6F4A34}, /* Korean hangul */ {"\x8D", 0, 0x6F4A35}, /* Korean hangul */ {"\xB0", 0, 0x6F4A36}, /* Korean hangul */ {"\xB1", 0, 0x6F4A37}, /* Korean hangul */ {"\xB4", 0, 0x6F4A38}, /* Korean hangul */ {"\xB7", 0, 0x6F4A39}, /* Korean hangul */ {"\xB8", 0, 0x6F4A3A}, /* Korean hangul */ {"\x87", 0, 0x6F7728}, /* Korean hangul */ {"\x8E", 0, 0x6F7729}, /* Korean hangul */ {"\x8F", 0, 0x6F772A}, /* Korean hangul */ {"\x91", 0, 0x6F772B}, /* Korean hangul */ {"\x94", 0, 0x6F772C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page353 = { marc8r_31page353_flat, 0 }; /* PAGE 352 */ struct yaz_iconv_trie_flat marc8r_31page352_flat[] = { {"\x80", 0, 0x6F4A22}, /* Korean hangul */ {"\x84", 0, 0x6F4A23}, /* Korean hangul */ {"\x88", 0, 0x6F4A24}, /* Korean hangul */ {"\x90", 0, 0x6F4A25}, /* Korean hangul */ {"\x91", 0, 0x6F4A26}, /* Korean hangul */ {"\x93", 0, 0x6F4A27}, /* Korean hangul */ {"\x9C", 0, 0x6F4A28}, /* Korean hangul */ {"\xA0", 0, 0x6F4A29}, /* Korean hangul */ {"\xA4", 0, 0x6F4A2A}, /* Korean hangul */ {"\xAC", 0, 0x6F4A2B}, /* Korean hangul */ {"\xB8", 0, 0x6F4A2C}, /* Korean hangul */ {"\xB9", 0, 0x6F4A2D}, /* Korean hangul */ {"\xBC", 0, 0x6F4A2E}, /* Korean hangul */ {"\xBF", 0, 0x6F4A2F}, /* Korean hangul */ {"\x95", 0, 0x6F7727}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page352 = { marc8r_31page352_flat, 0 }; /* PAGE 351 */ struct yaz_iconv_trie_flat marc8r_31page351_flat[] = { {"\x81", 0, 0x6F4978}, /* Korean hangul */ {"\x82", 0, 0x6F4979}, /* Korean hangul */ {"\x88", 0, 0x6F497A}, /* Korean hangul */ {"\x8C", 0, 0x6F497B}, /* Korean hangul */ {"\x90", 0, 0x6F497C}, /* Korean hangul */ {"\xA4", 0, 0x6F497E}, /* Korean hangul */ {"\x89", 0, 0x6F7724}, /* Korean hangul */ {"\x9D", 0, 0x6F7725}, /* Korean hangul */ {"\xB9", 0, 0x6F7726}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page351 = { marc8r_31page351_flat, 0 }; /* PAGE 350 */ struct yaz_iconv_trie_flat marc8r_31page350_flat[] = { {"\x84", 0, 0x6F496A}, /* Korean hangul */ {"\x89", 0, 0x6F496C}, /* Korean hangul */ {"\x90", 0, 0x6F496D}, /* Korean hangul */ {"\xAC", 0, 0x6F496E}, /* Korean hangul */ {"\xAD", 0, 0x6F496F}, /* Korean hangul */ {"\xB0", 0, 0x6F4970}, /* Korean hangul */ {"\xB3", 0, 0x6F4971}, /* Korean hangul */ {"\xB4", 0, 0x6F4972}, /* Korean hangul */ {"\xB5", 0, 0x6F4973}, /* Korean hangul */ {"\xB6", 0, 0x6F4974}, /* Korean hangul */ {"\xBC", 0, 0x6F4975}, /* Korean hangul */ {"\xBD", 0, 0x6F4976}, /* Korean hangul */ {"\xBF", 0, 0x6F4977}, /* Korean hangul */ {"\xBB", 0, 0x6F7722}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page350 = { marc8r_31page350_flat, 0 }; /* PAGE 349 */ struct yaz_iconv_trie_flat marc8r_31page349_flat[] = { {"\x80", 0, 0x6F495A}, /* Korean hangul */ {"\x84", 0, 0x6F495B}, /* Korean hangul */ {"\x8C", 0, 0x6F495C}, /* Korean hangul */ {"\x8D", 0, 0x6F495D}, /* Korean hangul */ {"\x8F", 0, 0x6F495E}, /* Korean hangul */ {"\x91", 0, 0x6F495F}, /* Korean hangul */ {"\x98", 0, 0x6F4960}, /* Korean hangul */ {"\x99", 0, 0x6F4961}, /* Korean hangul */ {"\x9C", 0, 0x6F4962}, /* Korean hangul */ {"\xA0", 0, 0x6F4963}, /* Korean hangul */ {"\xA8", 0, 0x6F4964}, /* Korean hangul */ {"\xA9", 0, 0x6F4965}, /* Korean hangul */ {"\xAD", 0, 0x6F4966}, /* Korean hangul */ {"\xB4", 0, 0x6F4967}, /* Korean hangul */ {"\xB8", 0, 0x6F4968}, /* Korean hangul */ {"\xBC", 0, 0x6F4969}, /* Korean hangul */ {"\xB5", 0, 0x6F7721}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page349 = { marc8r_31page349_flat, 0 }; /* PAGE 348 */ struct yaz_iconv_trie_flat marc8r_31page348_flat[] = { {"\x81", 0, 0x6F4945}, /* Korean hangul */ {"\x84", 0, 0x6F4947}, /* Korean hangul */ {"\x97", 0, 0x6F4949}, /* Korean hangul */ {"\xA0", 0, 0x6F494A}, /* Korean hangul */ {"\xA1", 0, 0x6F494B}, /* Korean hangul */ {"\xA4", 0, 0x6F494C}, /* Korean hangul */ {"\xA7", 0, 0x6F494D}, /* Korean hangul */ {"\xA8", 0, 0x6F494E}, /* Korean hangul */ {"\xAA", 0, 0x6F494F}, /* Korean hangul */ {"\xAC", 0, 0x6F4950}, /* Korean hangul */ {"\xAF", 0, 0x6F4951}, /* Korean hangul */ {"\xB0", 0, 0x6F4952}, /* Korean hangul */ {"\xB1", 0, 0x6F4953}, /* Korean hangul */ {"\xB3", 0, 0x6F4954}, /* Korean hangul */ {"\xB5", 0, 0x6F4955}, /* Korean hangul */ {"\xB6", 0, 0x6F4956}, /* Korean hangul */ {"\xBA", 0, 0x6F4957}, /* Korean hangul */ {"\xBC", 0, 0x6F4958}, /* Korean hangul */ {"\xBD", 0, 0x6F4959}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page348 = { marc8r_31page348_flat, 0 }; /* PAGE 347 */ struct yaz_iconv_trie_flat marc8r_31page347_flat[] = { {"\x80", 0, 0x6F4929}, /* Korean hangul */ {"\x81", 0, 0x6F492A}, /* Korean hangul */ {"\x83", 0, 0x6F492B}, /* Korean hangul */ {"\x84", 0, 0x6F492C}, /* Korean hangul */ {"\x85", 0, 0x6F492D}, /* Korean hangul */ {"\x86", 0, 0x6F492E}, /* Korean hangul */ {"\x89", 0, 0x6F4930}, /* Korean hangul */ {"\x8A", 0, 0x6F4931}, /* Korean hangul */ {"\x8B", 0, 0x6F4932}, /* Korean hangul */ {"\x8C", 0, 0x6F4933}, /* Korean hangul */ {"\x90", 0, 0x6F4934}, /* Korean hangul */ {"\x94", 0, 0x6F4935}, /* Korean hangul */ {"\x9C", 0, 0x6F4936}, /* Korean hangul */ {"\x9F", 0, 0x6F4937}, /* Korean hangul */ {"\xA0", 0, 0x6F4938}, /* Korean hangul */ {"\xA1", 0, 0x6F4939}, /* Korean hangul */ {"\xA8", 0, 0x6F493A}, /* Korean hangul */ {"\xA9", 0, 0x6F493B}, /* Korean hangul */ {"\xAA", 0, 0x6F493C}, /* Korean hangul */ {"\xAC", 0, 0x6F493D}, /* Korean hangul */ {"\xAF", 0, 0x6F493E}, /* Korean hangul */ {"\xB0", 0, 0x6F493F}, /* Korean hangul */ {"\xB8", 0, 0x6F4940}, /* Korean hangul */ {"\xB9", 0, 0x6F4941}, /* Korean hangul */ {"\xBC", 0, 0x6F4943}, /* Korean hangul */ {"\xBD", 0, 0x6F4944}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page347 = { marc8r_31page347_flat, 0 }; /* PAGE 346 */ struct yaz_iconv_trie_flat marc8r_31page346_flat[] = { {"\x80", 0, 0x6F487D}, /* Korean hangul */ {"\x94", 0, 0x6F487E}, /* Korean hangul */ {"\xB0", 0, 0x6F4921}, /* Korean hangul */ {"\xB1", 0, 0x6F4922}, /* Korean hangul */ {"\xB4", 0, 0x6F4924}, /* Korean hangul */ {"\xB7", 0, 0x6F4925}, /* Korean hangul */ {"\xB8", 0, 0x6F4926}, /* Korean hangul */ {"\xB9", 0, 0x6F4927}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page346 = { marc8r_31page346_flat, 0 }; /* PAGE 345 */ struct yaz_iconv_trie_flat marc8r_31page345_flat[] = { {"\x80", 0, 0x6F485F}, /* Korean hangul */ {"\x81", 0, 0x6F4860}, /* Korean hangul */ {"\x82", 0, 0x6F4861}, /* Korean hangul */ {"\x84", 0, 0x6F4862}, /* Korean hangul */ {"\x87", 0, 0x6F4863}, /* Korean hangul */ {"\x88", 0, 0x6F4864}, /* Korean hangul */ {"\x89", 0, 0x6F4865}, /* Korean hangul */ {"\x90", 0, 0x6F4866}, /* Korean hangul */ {"\x91", 0, 0x6F4867}, /* Korean hangul */ {"\x92", 0, 0x6F4868}, /* Korean hangul */ {"\x93", 0, 0x6F4869}, /* Korean hangul */ {"\x94", 0, 0x6F486A}, /* Korean hangul */ {"\x95", 0, 0x6F486B}, /* Korean hangul */ {"\x96", 0, 0x6F486C}, /* Korean hangul */ {"\x97", 0, 0x6F486D}, /* Korean hangul */ {"\x99", 0, 0x6F486E}, /* Korean hangul */ {"\x9A", 0, 0x6F486F}, /* Korean hangul */ {"\x9B", 0, 0x6F4870}, /* Korean hangul */ {"\x9C", 0, 0x6F4871}, /* Korean hangul */ {"\x9D", 0, 0x6F4872}, /* Korean hangul */ {"\xA0", 0, 0x6F4873}, /* Korean hangul */ {"\xA4", 0, 0x6F4875}, /* Korean hangul */ {"\xAC", 0, 0x6F4876}, /* Korean hangul */ {"\xAD", 0, 0x6F4877}, /* Korean hangul */ {"\xAF", 0, 0x6F4878}, /* Korean hangul */ {"\xB0", 0, 0x6F4879}, /* Korean hangul */ {"\xB1", 0, 0x6F487A}, /* Korean hangul */ {"\xB8", 0, 0x6F487B}, /* Korean hangul */ {"\xB9", 0, 0x6F487C}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page345 = { marc8r_31page345_flat, 0 }; /* PAGE 344 */ struct yaz_iconv_trie_dir marc8r_31page344_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {346, 0, 0}, {347, 0, 0}, {348, 0, 0}, {349, 0, 0}, {350, 0, 0}, {351, 0, 0}, {352, 0, 0}, {353, 0, 0}, {354, 0, 0}, {355, 0, 0}, {356, 0, 0}, {357, 0, 0}, {358, 0, 0}, {359, 0, 0}, {360, 0, 0}, {361, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page344 = { 0, marc8r_31page344_dir }; /* PAGE 343 */ struct yaz_iconv_trie_flat marc8r_31page343_flat[] = { {"\x81", 0, 0x6F245B}, /* Korean hangul */ {"\x82", 0, 0x6F245C}, /* Korean hangul */ {"\x85", 0, 0x6F245D}, /* Korean hangul */ {"\x87", 0, 0x6F245E}, /* Korean hangul */ {"\x88", 0, 0x6F245F}, /* Korean hangul */ {"\x8A", 0, 0x6F2460}, /* Korean hangul */ {"\x8B", 0, 0x6F2461}, /* Korean hangul */ {"\x8C", 0, 0x6F2462}, /* Korean hangul */ {"\x8D", 0, 0x6F2463}, /* Korean hangul */ {"\x8E", 0, 0x6F2464}, /* Korean hangul */ {"\x83", 0, 0x6F246E}, /* Korean hangul */ {"\x86", 0, 0x6F2470}, /* Korean hangul */ {"\x89", 0, 0x6F2471}, /* Korean hangul */ {"\x8F", 0, 0x6F2472}, /* Korean hangul */ {"\x90", 0, 0x6F2473}, /* Korean hangul */ {"\x91", 0, 0x6F2474}, /* Korean hangul */ {"\x93", 0, 0x6F2476}, /* Korean hangul */ {"\x94", 0, 0x6F2477}, /* Korean hangul */ {"\x95", 0, 0x6F2478}, /* Korean hangul */ {"\x97", 0, 0x6F247A}, /* Korean hangul */ {"\x98", 0, 0x6F247B}, /* Korean hangul */ {"\x9B", 0, 0x6F247E}, /* Korean hangul */ {"\x9C", 0, 0x6F2521}, /* Korean hangul */ {"\xA0", 0, 0x6F2525}, /* Korean hangul */ {"\xA1", 0, 0x6F2526}, /* Korean hangul */ {"\xA2", 0, 0x6F2527}, /* Korean hangul */ {"\xA3", 0, 0x6F2528}, /* Korean hangul */ {"\xBF", 0, 0x6F7623}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page343 = { marc8r_31page343_flat, 0 }; /* PAGE 342 */ struct yaz_iconv_trie_flat marc8r_31page342_flat[] = { {"\xB1", 0, 0x6F2457}, /* Korean hangul */ {"\xB4", 0, 0x6F2458}, /* Korean hangul */ {"\xB7", 0, 0x6F2459}, /* Korean hangul */ {"\xB9", 0, 0x6F245A}, /* Korean hangul */ {"\xB2", 0, 0x6F2465}, /* Korean hangul */ {"\xB8", 0, 0x6F2469}, /* Korean hangul */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page342 = { marc8r_31page342_flat, 0 }; /* PAGE 341 */ struct yaz_iconv_trie_dir marc8r_31page341_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x692460} /* Hiragana letter MU */, {0, 0, 0x692461} /* Hiragana letter ME */, {0, 0, 0x692462} /* Hiragana letter MO */, {0, 0, 0x692463} /* Hiragana letter small YA */, {0, 0, 0x692464} /* Hiragana letter YA */, {0, 0, 0x692465} /* Hiragana letter small YU */, {0, 0, 0x692466} /* Hiragana letter YU */, {0, 0, 0x692467} /* Hiragana letter small YO */, {0, 0, 0x692468} /* Hiragana letter YO */, {0, 0, 0x692469} /* Hiragana letter RA */, {0, 0, 0x69246A} /* Hiragana letter RI */, {0, 0, 0x69246B} /* Hiragana letter RU */, {0, 0, 0x69246C} /* Hiragana letter RE */, {0, 0, 0x69246D} /* Hiragana letter RO */, {0, 0, 0x69246E} /* Hiragana letter small WA */, {0, 0, 0x69246F} /* Hiragana letter WA */, {0, 0, 0x692470} /* Hiragana letter WI */, {0, 0, 0x692471} /* Hiragana letter WE */, {0, 0, 0x692472} /* Hiragana letter WO */, {0, 0, 0x692473} /* Hiragana letter N */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x692577} /* Katakana-hiragana voiced sound mark */, {0, 0, 0x692578} /* Katakana-hiragana semi-voiced sound mark */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x692521} /* Katakana letter small A */, {0, 0, 0x692522} /* Katakana letter A */, {0, 0, 0x692523} /* Katakana letter small I */, {0, 0, 0x692524} /* Katakana letter I */, {0, 0, 0x692525} /* Katakana letter small U */, {0, 0, 0x692526} /* Katakana letter U */, {0, 0, 0x692527} /* Katakana letter small E */, {0, 0, 0x692528} /* Katakana letter E */, {0, 0, 0x692529} /* Katakana letter small O */, {0, 0, 0x69252A} /* Katakana letter O */, {0, 0, 0x69252B} /* Katakana letter KA */, {0, 0, 0x69252C} /* Katakana letter GA */, {0, 0, 0x69252D} /* Katakana letter KI */, {0, 0, 0x69252E} /* Katakana letter GI */, {0, 0, 0x69252F} /* Katakana letter KU */, {0, 0, 0x692530} /* Katakana letter GU */, {0, 0, 0x692531} /* Katakana letter KE */, {0, 0, 0x692532} /* Katakana letter GE */, {0, 0, 0x692533} /* Katakana letter KO */, {0, 0, 0x692534} /* Katakana letter GO */, {0, 0, 0x692535} /* Katakana letter SA */, {0, 0, 0x692536} /* Katakana letter ZA */, {0, 0, 0x692537} /* Katakana letter SI */, {0, 0, 0x692538} /* Katakana letter ZI */, {0, 0, 0x692539} /* Katakana letter SU */, {0, 0, 0x69253A} /* Katakana letter ZU */, {0, 0, 0x69253B} /* Katakana letter SE */, {0, 0, 0x69253C} /* Katakana letter ZE */, {0, 0, 0x69253D} /* Katakana letter SO */, {0, 0, 0x69253E} /* Katakana letter ZO */, {0, 0, 0x69253F} /* Katakana letter TA */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page341 = { 0, marc8r_31page341_dir }; /* PAGE 340 */ struct yaz_iconv_trie_dir marc8r_31page340_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x692421} /* Hiragana letter small A */, {0, 0, 0x692422} /* Hiragana letter A */, {0, 0, 0x692423} /* Hiragana letter small I */, {0, 0, 0x692424} /* Hiragana letter I */, {0, 0, 0x692425} /* Hiragana letter small U */, {0, 0, 0x692426} /* Hiragana letter U */, {0, 0, 0x692427} /* Hiragana letter small E */, {0, 0, 0x692428} /* Hiragana letter E */, {0, 0, 0x692429} /* Hiragana letter small O */, {0, 0, 0x69242A} /* Hiragana letter O */, {0, 0, 0x69242B} /* Hiragana letter KA */, {0, 0, 0x69242C} /* Hiragana letter GA */, {0, 0, 0x69242D} /* Hiragana letter KI */, {0, 0, 0x69242E} /* Hiragana letter GI */, {0, 0, 0x69242F} /* Hiragana letter KU */, {0, 0, 0x692430} /* Hiragana letter GU */, {0, 0, 0x692431} /* Hiragana letter KE */, {0, 0, 0x692432} /* Hiragana letter GE */, {0, 0, 0x692433} /* Hiragana letter KO */, {0, 0, 0x692434} /* Hiragana letter GO */, {0, 0, 0x692435} /* Hiragana letter SA */, {0, 0, 0x692436} /* Hiragana letter ZA */, {0, 0, 0x692437} /* Hiragana letter SI */, {0, 0, 0x692438} /* Hiragana letter ZI */, {0, 0, 0x692439} /* Hiragana letter SU */, {0, 0, 0x69243A} /* Hiragana letter ZU */, {0, 0, 0x69243B} /* Hiragana letter SE */, {0, 0, 0x69243C} /* Hiragana letter ZE */, {0, 0, 0x69243D} /* Hiragana letter SO */, {0, 0, 0x69243E} /* Hiragana letter ZO */, {0, 0, 0x69243F} /* Hiragana letter TA */, {0, 0, 0x692440} /* Hiragana letter DA */, {0, 0, 0x692441} /* Hiragana letter TI */, {0, 0, 0x692442} /* Hiragana letter DI */, {0, 0, 0x692443} /* Hiragana letter small TU */, {0, 0, 0x692444} /* Hiragana letter TU */, {0, 0, 0x692445} /* Hiragana letter DU */, {0, 0, 0x692446} /* Hiragana letter TE */, {0, 0, 0x692447} /* Hiragana letter DE */, {0, 0, 0x692448} /* Hiragana letter TO */, {0, 0, 0x692449} /* Hiragana letter DO */, {0, 0, 0x69244A} /* Hiragana letter NA */, {0, 0, 0x69244B} /* Hiragana letter NI */, {0, 0, 0x69244C} /* Hiragana letter NU */, {0, 0, 0x69244D} /* Hiragana letter NE */, {0, 0, 0x69244E} /* Hiragana letter NO */, {0, 0, 0x69244F} /* Hiragana letter HA */, {0, 0, 0x692450} /* Hiragana letter BA */, {0, 0, 0x692451} /* Hiragana letter PA */, {0, 0, 0x692452} /* Hiragana letter HI */, {0, 0, 0x692453} /* Hiragana letter BI */, {0, 0, 0x692454} /* Hiragana letter PI */, {0, 0, 0x692455} /* Hiragana letter HU */, {0, 0, 0x692456} /* Hiragana letter BU */, {0, 0, 0x692457} /* Hiragana letter PU */, {0, 0, 0x692458} /* Hiragana letter HE */, {0, 0, 0x692459} /* Hiragana letter BE */, {0, 0, 0x69245A} /* Hiragana letter PE */, {0, 0, 0x69245B} /* Hiragana letter HO */, {0, 0, 0x69245C} /* Hiragana letter BO */, {0, 0, 0x69245D} /* Hiragana letter PO */, {0, 0, 0x69245E} /* Hiragana letter MA */, {0, 0, 0x69245F} /* Hiragana letter MI */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page340 = { 0, marc8r_31page340_dir }; /* PAGE 339 */ struct yaz_iconv_trie_dir marc8r_31page339_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x692540} /* Katakana letter DA */, {0, 0, 0x692541} /* Katakana letter TI */, {0, 0, 0x692542} /* Katakana letter DI */, {0, 0, 0x692543} /* Katakana letter small TU */, {0, 0, 0x692544} /* Katakana letter TU */, {0, 0, 0x692545} /* Katakana letter DU */, {0, 0, 0x692546} /* Katakana letter TE */, {0, 0, 0x692547} /* Katakana letter DE */, {0, 0, 0x692548} /* Katakana letter TO */, {0, 0, 0x692549} /* Katakana letter DO */, {0, 0, 0x69254A} /* Katakana letter NA */, {0, 0, 0x69254B} /* Katakana letter NI */, {0, 0, 0x69254C} /* Katakana letter NU */, {0, 0, 0x69254D} /* Katakana letter NE */, {0, 0, 0x69254E} /* Katakana letter NO */, {0, 0, 0x69254F} /* Katakana letter HA */, {0, 0, 0x692550} /* Katakana letter BA */, {0, 0, 0x692551} /* Katakana letter PA */, {0, 0, 0x692552} /* Katakana letter HI */, {0, 0, 0x692553} /* Katakana letter BI */, {0, 0, 0x692554} /* Katakana letter PI */, {0, 0, 0x692555} /* Katakana letter HU */, {0, 0, 0x692556} /* Katakana letter BU */, {0, 0, 0x692557} /* Katakana letter PU */, {0, 0, 0x692558} /* Katakana letter HE */, {0, 0, 0x692559} /* Katakana letter BE */, {0, 0, 0x69255A} /* Katakana letter PE */, {0, 0, 0x69255B} /* Katakana letter HO */, {0, 0, 0x69255C} /* Katakana letter BO */, {0, 0, 0x69255D} /* Katakana letter PO */, {0, 0, 0x69255E} /* Katakana letter MA */, {0, 0, 0x69255F} /* Katakana letter MI */, {0, 0, 0x692560} /* Katakana letter MU */, {0, 0, 0x692561} /* Katakana letter ME */, {0, 0, 0x692562} /* Katakana letter MO */, {0, 0, 0x692563} /* Katakana letter small YA */, {0, 0, 0x692564} /* Katakana letter YA */, {0, 0, 0x692565} /* Katakana letter small YU */, {0, 0, 0x692566} /* Katakana letter YU */, {0, 0, 0x692567} /* Katakana letter small YO */, {0, 0, 0x692568} /* Katakana letter YO */, {0, 0, 0x692569} /* Katakana letter RA */, {0, 0, 0x69256A} /* Katakana letter RI */, {0, 0, 0x69256B} /* Katakana letter RU */, {0, 0, 0x69256C} /* Katakana letter RE */, {0, 0, 0x69256D} /* Katakana letter RO */, {0, 0, 0x69256E} /* Katakana letter small WA */, {0, 0, 0x69256F} /* Katakana letter WA */, {0, 0, 0x692570} /* Katakana letter WI */, {0, 0, 0x692571} /* Katakana letter WE */, {0, 0, 0x692572} /* Katakana letter WO */, {0, 0, 0x692573} /* Katakana letter N */, {0, 0, 0x692574} /* Katakana letter VU */, {0, 0, 0x692575} /* Katakana letter small KA */, {0, 0, 0x692576} /* Katakana letter small KE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x692126} /* Ideographic centered point */, {0, 0, 0x69213C} /* Vowel elongation mark for kana */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page339 = { 0, marc8r_31page339_dir }; /* PAGE 338 */ struct yaz_iconv_trie_flat marc8r_31page338_flat[] = { {"\x9E", 0, 0x2D3165}, /* East Asian ideograph (Unicode CJK Extension A) */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page338 = { marc8r_31page338_flat, 0 }; /* PAGE 337 */ struct yaz_iconv_trie_flat marc8r_31page337_flat[] = { {"\xA1", 0, 0x217E5B}, /* East Asian ideograph (Unicode CJK Extension A) */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page337 = { marc8r_31page337_flat, 0 }; /* PAGE 336 */ struct yaz_iconv_trie_flat marc8r_31page336_flat[] = { {"\x87", 0, 0x212F30}, /* East Asian ideograph (number zero) */ {"\x93", 0, 0x6F7624}, /* Korean hangul (ancient) */ {"\x80", 0, 0x212321}, /* Ideographic space per ANSI Z39.64 */ {"\x8C", 0, 0x212B25}, /* Ideographic left corner bracket */ {"\x8D", 0, 0x212B26}, /* Ideographic right corner bracket */ {"\x82", 0, 0x212B33}, /* Ideographic full stop */ {"\x81", 0, 0x212B35}, /* Ideographic comma */ {"\x85", 0, 0x692139}, /* Ideographic iteration mark */ {"\x88", 0, 0x692152}, /* Ideographic less than sign */ {"\x89", 0, 0x692153}, /* Ideographic greater than sign */ {"\x8A", 0, 0x692154}, /* Ideographic left double angle bracket */ {"\x8B", 0, 0x692155}, /* Ideographic right double angle bracket */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page336 = { marc8r_31page336_flat, 0 }; /* PAGE 335 */ struct yaz_iconv_trie_flat marc8r_31page335_flat[] = { {"\x81", 0, 0x276176}, /* East Asian ideograph */ {"\x8D", 0, 0x276177}, /* East Asian ideograph */ {"\x9B", 0, 0x276178}, /* East Asian ideograph */ {"\x9C", 0, 0x276179}, /* East Asian ideograph */ {"\x94", 0, 0x27617A}, /* East Asian ideograph */ {"\xA8", 0, 0x27617B}, /* East Asian ideograph */ {"\xA4", 0, 0x27617C}, /* East Asian ideograph */ {"\xB8", 0, 0x27617D}, /* East Asian ideograph */ {"\xB3", 0, 0x27617E}, /* East Asian ideograph */ {"\xAB", 0, 0x276223}, /* East Asian ideograph */ {"\xA2", 0, 0x276226}, /* East Asian ideograph */ {"\x88", 0, 0x27622E}, /* East Asian ideograph */ {"\x82", 0, 0x29565D}, /* East Asian ideograph */ {"\x86", 0, 0x295721}, /* East Asian ideograph */ {"\x87", 0, 0x295729}, /* East Asian ideograph */ {"\x90", 0, 0x29572B}, /* East Asian ideograph */ {"\x8B", 0, 0x295731}, /* East Asian ideograph */ {"\x9E", 0, 0x295739}, /* East Asian ideograph */ {"\x91", 0, 0x29573C}, /* East Asian ideograph */ {"\x92", 0, 0x29573D}, /* East Asian ideograph */ {"\x95", 0, 0x295742}, /* East Asian ideograph */ {"\xA9", 0, 0x295756}, /* East Asian ideograph */ {"\xA0", 0, 0x29575F}, /* East Asian ideograph */ {"\xA7", 0, 0x29576E}, /* East Asian ideograph */ {"\xAD", 0, 0x29577A}, /* East Asian ideograph */ {"\xB0", 0, 0x29577C}, /* East Asian ideograph */ {"\xAE", 0, 0x295822}, /* East Asian ideograph */ {"\xBA", 0, 0x295825}, /* East Asian ideograph */ {"\xB2", 0, 0x295827}, /* East Asian ideograph */ {"\xB4", 0, 0x295828}, /* East Asian ideograph */ {"\xB1", 0, 0x29582C}, /* East Asian ideograph */ {"\xB7", 0, 0x29582D}, /* East Asian ideograph */ {"\xB5", 0, 0x29582F}, /* East Asian ideograph */ {"\xB6", 0, 0x295831}, /* East Asian ideograph */ {"\xBB", 0, 0x295834}, /* East Asian ideograph */ {"\xBD", 0, 0x29584B}, /* East Asian ideograph */ {"\xA5", 0, 0x29586E}, /* East Asian ideograph */ {"\xA3", 0, 0x295929}, /* East Asian ideograph */ {"\x85", 0, 0x29593A}, /* East Asian ideograph */ {"\x9F", 0, 0x29593B}, /* East Asian ideograph */ {"\xBC", 0, 0x295940}, /* East Asian ideograph */ {"\x8E", 0, 0x295955}, /* East Asian ideograph */ {"\x9A", 0, 0x295958}, /* East Asian ideograph */ {"\xA1", 0, 0x29596B}, /* East Asian ideograph */ {"\xA6", 0, 0x4D5934}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page335 = { marc8r_31page335_flat, 0 }; /* PAGE 334 */ struct yaz_iconv_trie_dir marc8r_31page334_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x275D66} /* East Asian ideograph */, {0, 0, 0x275E28} /* East Asian ideograph */, {0, 0, 0x29442E} /* East Asian ideograph */, {0, 0, 0x29442B} /* East Asian ideograph */, {0, 0, 0x275D68} /* East Asian ideograph */, {0, 0, 0x275D7C} /* East Asian ideograph */, {0, 0, 0x294440} /* East Asian ideograph */, {0, 0, 0x294441} /* East Asian ideograph */, {0, 0, 0x275E3B} /* East Asian ideograph */, {0, 0, 0x275D69} /* East Asian ideograph */, {0, 0, 0x294435} /* East Asian ideograph */, {0, 0, 0x275D6A} /* East Asian ideograph */, {0, 0, 0x275D62} /* East Asian ideograph */, {0, 0, 0x29436C} /* East Asian ideograph */, {0, 0, 0x294750} /* East Asian ideograph */, {0, 0, 0x294751} /* East Asian ideograph */, {0, 0, 0x275D64} /* East Asian ideograph */, {0, 0, 0x275D63} /* East Asian ideograph */, {0, 0, 0x29436A} /* East Asian ideograph */, {0, 0, 0x294372} /* East Asian ideograph */, {0, 0, 0x294375} /* East Asian ideograph */, {0, 0, 0x294466} /* East Asian ideograph */, {0, 0, 0x29445B} /* East Asian ideograph */, {0, 0, 0x294551} /* East Asian ideograph */, {0, 0, 0x294568} /* East Asian ideograph */, {0, 0, 0x275D6F} /* East Asian ideograph */, {0, 0, 0x275D7D} /* East Asian ideograph */, {0, 0, 0x29446D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x294471} /* East Asian ideograph */, {0, 0, 0x294472} /* East Asian ideograph */, {0, 0, 0x294474} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275D72} /* East Asian ideograph */, {0, 0, 0x294478} /* East Asian ideograph */, {0, 0, 0x275E49} /* East Asian ideograph */, {0, 0, 0x275E22} /* East Asian ideograph */, {0, 0, 0x275D75} /* East Asian ideograph */, {0, 0, 0x275D76} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x294531} /* East Asian ideograph */, {0, 0, 0x294457} /* East Asian ideograph */, {0, 0, 0x4D472C} /* East Asian ideograph */, {0, 0, 0x29444D} /* East Asian ideograph */, {0, 0, 0x294458} /* East Asian ideograph */, {0, 0, 0x275D6B} /* East Asian ideograph */, {0, 0, 0x275D79} /* East Asian ideograph */, {0, 0, 0x275D6D} /* East Asian ideograph */, {0, 0, 0x275D6E} /* East Asian ideograph */, {0, 0, 0x294532} /* East Asian ideograph */, {0, 0, 0x275D7A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x29454D} /* East Asian ideograph */, {0, 0, 0x275E37} /* East Asian ideograph */, {0, 0, 0x294564} /* East Asian ideograph */, {0, 0, 0x294567} /* East Asian ideograph */, {0, 0, 0x29456F} /* East Asian ideograph */, {0, 0, 0x275E23} /* East Asian ideograph */, {0, 0, 0x455E21} /* East Asian ideograph */, {0, 0, 0x275E24} /* East Asian ideograph */, {0, 0, 0x29464A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275D7E} /* East Asian ideograph */, {0, 0, 0x4D4832} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page334 = { 0, marc8r_31page334_dir }; /* PAGE 333 */ struct yaz_iconv_trie_dir marc8r_31page333_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x275D52} /* East Asian ideograph */, {0, 0, 0x275E3D} /* East Asian ideograph */, {0, 0, 0x275D57} /* East Asian ideograph */, {0, 0, 0x275D58} /* East Asian ideograph */, {0, 0, 0x275E45} /* East Asian ideograph */, {0, 0, 0x275D55} /* East Asian ideograph */, {0, 0, 0x29432B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x294251} /* East Asian ideograph */, {0, 0, 0x294252} /* East Asian ideograph */, {0, 0, 0x294255} /* East Asian ideograph */, {0, 0, 0x294254} /* East Asian ideograph */, {0, 0, 0x29425C} /* East Asian ideograph */, {0, 0, 0x29426D} /* East Asian ideograph */, {0, 0, 0x275E3F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275D5B} /* East Asian ideograph */, {0, 0, 0x294346} /* East Asian ideograph */, {0, 0, 0x294343} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x294349} /* East Asian ideograph */, {0, 0, 0x294340} /* East Asian ideograph */, {0, 0, 0x294427} /* East Asian ideograph */, {0, 0, 0x29437D} /* East Asian ideograph */, {0, 0, 0x275E39} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275E3E} /* East Asian ideograph */, {0, 0, 0x275D5C} /* East Asian ideograph */, {0, 0, 0x275D67} /* East Asian ideograph */, {0, 0, 0x29434F} /* East Asian ideograph */, {0, 0, 0x294350} /* East Asian ideograph */, {0, 0, 0x294642} /* East Asian ideograph */, {0, 0, 0x29455E} /* East Asian ideograph */, {0, 0, 0x275D5E} /* East Asian ideograph */, {0, 0, 0x29435B} /* East Asian ideograph */, {0, 0, 0x29443E} /* East Asian ideograph */, {0, 0, 0x294359} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x294767} /* East Asian ideograph */, {0, 0, 0x275D60} /* East Asian ideograph */, {0, 0, 0x29472F} /* East Asian ideograph */, {0, 0, 0x294362} /* East Asian ideograph */, {0, 0, 0x294355} /* East Asian ideograph */, {0, 0, 0x275D5F} /* East Asian ideograph */, {0, 0, 0x275D5D} /* East Asian ideograph */, {0, 0, 0x275D73} /* East Asian ideograph */, {0, 0, 0x294358} /* East Asian ideograph */, {0, 0, 0x275D59} /* East Asian ideograph */, {0, 0, 0x294331} /* East Asian ideograph */, {0, 0, 0x275E2F} /* East Asian ideograph */, {0, 0, 0x29432F} /* East Asian ideograph */, {0, 0, 0x294732} /* East Asian ideograph */, {0, 0, 0x294335} /* East Asian ideograph */, {0, 0, 0x275D5A} /* East Asian ideograph */, {0, 0, 0x294364} /* East Asian ideograph */, {0, 0, 0x275E43} /* East Asian ideograph */, {0, 0, 0x29473E} /* East Asian ideograph */, {0, 0, 0x275D65} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x294469} /* East Asian ideograph */, {0, 0, 0x294371} /* East Asian ideograph */, {0, 0, 0x275E31} /* East Asian ideograph */, {0, 0, 0x275E30} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page333 = { 0, marc8r_31page333_dir }; /* PAGE 332 */ struct yaz_iconv_trie_dir marc8r_31page332_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x275845} /* East Asian ideograph */, {0, 0, 0x27593F} /* East Asian ideograph */, {0, 0, 0x275851} /* East Asian ideograph */, {0, 0, 0x51356A} /* East Asian ideograph */, {0, 0, 0x27584E} /* East Asian ideograph */, {0, 0, 0x275853} /* East Asian ideograph */, {0, 0, 0x27593C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275854} /* East Asian ideograph */, {0, 0, 0x275856} /* East Asian ideograph */, {0, 0, 0x275857} /* East Asian ideograph */, {0, 0, 0x275855} /* East Asian ideograph */, {0, 0, 0x29337A} /* East Asian ideograph */, {0, 0, 0x27584F} /* East Asian ideograph */, {0, 0, 0x29323B} /* East Asian ideograph */, {0, 0, 0x275852} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275946} /* East Asian ideograph */, {0, 0, 0x29323C} /* East Asian ideograph */, {0, 0, 0x293250} /* East Asian ideograph */, {0, 0, 0x29325D} /* East Asian ideograph */, {0, 0, 0x27585B} /* East Asian ideograph */, {0, 0, 0x29324F} /* East Asian ideograph */, {0, 0, 0x27585C} /* East Asian ideograph */, {0, 0, 0x27585D} /* East Asian ideograph */, {0, 0, 0x27585F} /* East Asian ideograph */, {0, 0, 0x275860} /* East Asian ideograph */, {0, 0, 0x275862} /* East Asian ideograph */, {0, 0, 0x29325E} /* East Asian ideograph */, {0, 0, 0x275866} /* East Asian ideograph */, {0, 0, 0x275923} /* East Asian ideograph */, {0, 0, 0x275868} /* East Asian ideograph */, {0, 0, 0x275867} /* East Asian ideograph */, {0, 0, 0x275863} /* East Asian ideograph */, {0, 0, 0x275865} /* East Asian ideograph */, {0, 0, 0x27585E} /* East Asian ideograph */, {0, 0, 0x293336} /* East Asian ideograph */, {0, 0, 0x275859} /* East Asian ideograph */, {0, 0, 0x27585A} /* East Asian ideograph */, {0, 0, 0x275858} /* East Asian ideograph */, {0, 0, 0x293345} /* East Asian ideograph */, {0, 0, 0x293256} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27586B} /* East Asian ideograph */, {0, 0, 0x27586F} /* East Asian ideograph */, {0, 0, 0x27586C} /* East Asian ideograph */, {0, 0, 0x293271} /* East Asian ideograph */, {0, 0, 0x275871} /* East Asian ideograph */, {0, 0, 0x275873} /* East Asian ideograph */, {0, 0, 0x275874} /* East Asian ideograph */, {0, 0, 0x275872} /* East Asian ideograph */, {0, 0, 0x275875} /* East Asian ideograph */, {0, 0, 0x275869} /* East Asian ideograph */, {0, 0, 0x27586A} /* East Asian ideograph */, {0, 0, 0x4B3642} /* East Asian ideograph */, {0, 0, 0x27587A} /* East Asian ideograph */, {0, 0, 0x27587B} /* East Asian ideograph */, {0, 0, 0x293325} /* East Asian ideograph */, {0, 0, 0x27592E} /* East Asian ideograph */, {0, 0, 0x27594A} /* East Asian ideograph */, {0, 0, 0x29332C} /* East Asian ideograph */, {0, 0, 0x293338} /* East Asian ideograph */, {0, 0, 0x27587C} /* East Asian ideograph */, {0, 0, 0x27587E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page332 = { 0, marc8r_31page332_dir }; /* PAGE 331 */ struct yaz_iconv_trie_dir marc8r_31page331_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x287061} /* East Asian ideograph */, {0, 0, 0x287062} /* East Asian ideograph */, {0, 0, 0x287065} /* East Asian ideograph */, {0, 0, 0x275154} /* East Asian ideograph */, {0, 0, 0x27512B} /* East Asian ideograph */, {0, 0, 0x27512D} /* East Asian ideograph */, {0, 0, 0x27512C} /* East Asian ideograph */, {0, 0, 0x275171} /* East Asian ideograph */, {0, 0, 0x275130} /* East Asian ideograph */, {0, 0, 0x287269} /* East Asian ideograph */, {0, 0, 0x275126} /* East Asian ideograph */, {0, 0, 0x275128} /* East Asian ideograph */, {0, 0, 0x27512F} /* East Asian ideograph */, {0, 0, 0x27512A} /* East Asian ideograph */, {0, 0, 0x275178} /* East Asian ideograph */, {0, 0, 0x27513C} /* East Asian ideograph */, {0, 0, 0x28706A} /* East Asian ideograph */, {0, 0, 0x275140} /* East Asian ideograph */, {0, 0, 0x275133} /* East Asian ideograph */, {0, 0, 0x275134} /* East Asian ideograph */, {0, 0, 0x4B5773} /* East Asian ideograph */, {0, 0, 0x275173} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x287134} /* East Asian ideograph */, {0, 0, 0x275179} /* East Asian ideograph */, {0, 0, 0x275139} /* East Asian ideograph */, {0, 0, 0x275136} /* East Asian ideograph */, {0, 0, 0x287130} /* East Asian ideograph */, {0, 0, 0x275138} /* East Asian ideograph */, {0, 0, 0x275137} /* East Asian ideograph */, {0, 0, 0x275132} /* East Asian ideograph */, {0, 0, 0x275131} /* East Asian ideograph */, {0, 0, 0x287144} /* East Asian ideograph */, {0, 0, 0x28714D} /* East Asian ideograph */, {0, 0, 0x27513E} /* East Asian ideograph */, {0, 0, 0x275172} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27513F} /* East Asian ideograph */, {0, 0, 0x4C715A} /* East Asian ideograph */, {0, 0, 0x27517D} /* East Asian ideograph */, {0, 0, 0x287139} /* East Asian ideograph */, {0, 0, 0x275166} /* East Asian ideograph */, {0, 0, 0x275155} /* East Asian ideograph */, {0, 0, 0x275145} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275221} /* East Asian ideograph */, {0, 0, 0x335147} /* East Asian ideograph */, {0, 0, 0x287167} /* East Asian ideograph */, {0, 0, 0x27514A} /* East Asian ideograph */, {0, 0, 0x4D4D61} /* East Asian ideograph */, {0, 0, 0x287174} /* East Asian ideograph */, {0, 0, 0x275176} /* East Asian ideograph */, {0, 0, 0x27514E} /* East Asian ideograph */, {0, 0, 0x27514F} /* East Asian ideograph */, {0, 0, 0x287178} /* East Asian ideograph */, {0, 0, 0x4B516A} /* East Asian ideograph */, {0, 0, 0x27514D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x28717D} /* East Asian ideograph */, {0, 0, 0x287161} /* East Asian ideograph */, {0, 0, 0x275141} /* East Asian ideograph */, {0, 0, 0x275142} /* East Asian ideograph */, {0, 0, 0x275143} /* East Asian ideograph */, {0, 0, 0x27514C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page331 = { 0, marc8r_31page331_dir }; /* PAGE 330 */ struct yaz_iconv_trie_dir marc8r_31page330_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x23487C} /* East Asian ideograph */, {0, 0, 0x23487B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x455D3E} /* East Asian ideograph */, {0, 0, 0x294162} /* East Asian ideograph */, {0, 0, 0x294161} /* East Asian ideograph */, {0, 0, 0x275D3F} /* East Asian ideograph */, {0, 0, 0x275D40} /* East Asian ideograph */, {0, 0, 0x275D41} /* East Asian ideograph */, {0, 0, 0x294164} /* East Asian ideograph */, {0, 0, 0x294163} /* East Asian ideograph */, {0, 0, 0x29416A} /* East Asian ideograph */, {0, 0, 0x29416B} /* East Asian ideograph */, {0, 0, 0x275D46} /* East Asian ideograph */, {0, 0, 0x294222} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x294179} /* East Asian ideograph */, {0, 0, 0x275D45} /* East Asian ideograph */, {0, 0, 0x294475} /* East Asian ideograph */, {0, 0, 0x294221} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275D43} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275D47} /* East Asian ideograph */, {0, 0, 0x474236} /* East Asian ideograph */, {0, 0, 0x294237} /* East Asian ideograph */, {0, 0, 0x4B3C38} /* East Asian ideograph */, {0, 0, 0x275D48} /* East Asian ideograph */, {0, 0, 0x275D4B} /* East Asian ideograph */, {0, 0, 0x275E21} /* East Asian ideograph */, {0, 0, 0x275D4A} /* East Asian ideograph */, {0, 0, 0x29442D} /* East Asian ideograph */, {0, 0, 0x275D71} /* East Asian ideograph */, {0, 0, 0x29424B} /* East Asian ideograph */, {0, 0, 0x275D4D} /* East Asian ideograph */, {0, 0, 0x275E47} /* East Asian ideograph */, {0, 0, 0x274578} /* East Asian ideograph */, {0, 0, 0x275D4C} /* East Asian ideograph */, {0, 0, 0x275E29} /* East Asian ideograph */, {0, 0, 0x275D56} /* East Asian ideograph */, {0, 0, 0x294224} /* East Asian ideograph */, {0, 0, 0x294225} /* East Asian ideograph */, {0, 0, 0x294228} /* East Asian ideograph */, {0, 0, 0x294223} /* East Asian ideograph */, {0, 0, 0x275D49} /* East Asian ideograph */, {0, 0, 0x294231} /* East Asian ideograph */, {0, 0, 0x294258} /* East Asian ideograph */, {0, 0, 0x275D70} /* East Asian ideograph */, {0, 0, 0x294261} /* East Asian ideograph */, {0, 0, 0x27502A} /* East Asian ideograph */, {0, 0, 0x275D4F} /* East Asian ideograph */, {0, 0, 0x335228} /* East Asian ideograph */, {0, 0, 0x29425F} /* East Asian ideograph */, {0, 0, 0x294260} /* East Asian ideograph */, {0, 0, 0x275D51} /* East Asian ideograph */, {0, 0, 0x275D50} /* East Asian ideograph */, {0, 0, 0x294264} /* East Asian ideograph */, {0, 0, 0x275E4A} /* East Asian ideograph */, {0, 0, 0x474270} /* East Asian ideograph */, {0, 0, 0x29426F} /* East Asian ideograph */, {0, 0, 0x275D53} /* East Asian ideograph */, {0, 0, 0x294274} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page330 = { 0, marc8r_31page330_dir }; /* PAGE 329 */ struct yaz_iconv_trie_flat marc8r_31page329_flat[] = { {"\x90", 0, 0x232D42}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page329 = { marc8r_31page329_flat, 0 }; /* PAGE 328 */ struct yaz_iconv_trie_flat marc8r_31page328_flat[] = { {"\x8A", 0, 0x21627D}, /* East Asian ideograph */ {"\x8B", 0, 0x21627E}, /* East Asian ideograph */ {"\x92", 0, 0x216321}, /* East Asian ideograph */ {"\x9F", 0, 0x216322}, /* East Asian ideograph */ {"\xA3", 0, 0x216323}, /* East Asian ideograph */ {"\xA1", 0, 0x216324}, /* East Asian ideograph (variant of EACC 456324) */ {"\xA6", 0, 0x216325}, /* East Asian ideograph */ {"\x9C", 0, 0x216326}, /* East Asian ideograph */ {"\xAC", 0, 0x216327}, /* East Asian ideograph */ {"\xAA", 0, 0x216328}, /* East Asian ideograph */ {"\xB7", 0, 0x216329}, /* East Asian ideograph */ {"\xB2", 0, 0x21632A}, /* East Asian ideograph */ {"\x81", 0, 0x235F69}, /* East Asian ideograph */ {"\x85", 0, 0x235F6D}, /* East Asian ideograph */ {"\x86", 0, 0x235F6F}, /* East Asian ideograph */ {"\x88", 0, 0x235F71}, /* East Asian ideograph */ {"\x89", 0, 0x235F73}, /* East Asian ideograph */ {"\x8E", 0, 0x235F79}, /* East Asian ideograph */ {"\x8F", 0, 0x235F7B}, /* East Asian ideograph */ {"\x94", 0, 0x235F7C}, /* East Asian ideograph */ {"\x95", 0, 0x235F7E}, /* East Asian ideograph */ {"\x97", 0, 0x236023}, /* East Asian ideograph */ {"\xA0", 0, 0x236028}, /* East Asian ideograph */ {"\xAE", 0, 0x23603F}, /* East Asian ideograph */ {"\xAF", 0, 0x236040}, /* East Asian ideograph */ {"\xB6", 0, 0x236047}, /* East Asian ideograph */ {"\x90", 0, 0x27627D}, /* East Asian ideograph */ {"\xBF", 0, 0x276321}, /* East Asian ideograph */ {"\x91", 0, 0x295F7B}, /* East Asian ideograph */ {"\xA9", 0, 0x333623}, /* East Asian ideograph */ {"\xA7", 0, 0x337345}, /* East Asian ideograph */ {"\xA2", 0, 0x4B6324}, /* East Asian ideograph */ {"\x84", 0, 0x4D5F70}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page328 = { marc8r_31page328_flat, 0 }; /* PAGE 327 */ struct yaz_iconv_trie_flat marc8r_31page327_flat[] = { {"\x87", 0, 0x216273}, /* East Asian ideograph */ {"\x8E", 0, 0x216274}, /* East Asian ideograph */ {"\x93", 0, 0x216275}, /* East Asian ideograph */ {"\x95", 0, 0x216276}, /* East Asian ideograph */ {"\x99", 0, 0x216277}, /* East Asian ideograph */ {"\xA0", 0, 0x216278}, /* East Asian ideograph */ {"\xAC", 0, 0x216279}, /* East Asian ideograph */ {"\xB4", 0, 0x21627A}, /* East Asian ideograph */ {"\xBB", 0, 0x21627B}, /* East Asian ideograph */ {"\xBE", 0, 0x21627C}, /* East Asian ideograph */ {"\x82", 0, 0x235E7D}, /* East Asian ideograph */ {"\x8F", 0, 0x235F2F}, /* East Asian ideograph */ {"\x90", 0, 0x235F31}, /* East Asian ideograph */ {"\x92", 0, 0x235F32}, /* East Asian ideograph */ {"\x96", 0, 0x235F33}, /* East Asian ideograph */ {"\x97", 0, 0x235F34}, /* East Asian ideograph */ {"\x9A", 0, 0x235F37}, /* East Asian ideograph */ {"\xA2", 0, 0x235F45}, /* East Asian ideograph */ {"\xAB", 0, 0x235F48}, /* East Asian ideograph */ {"\xA6", 0, 0x235F49}, /* East Asian ideograph */ {"\xAF", 0, 0x235F53}, /* East Asian ideograph */ {"\xB9", 0, 0x235F5E}, /* East Asian ideograph */ {"\xB7", 0, 0x235F5F}, /* East Asian ideograph */ {"\xBD", 0, 0x235F64}, /* East Asian ideograph */ {"\x8B", 0, 0x295E7C}, /* East Asian ideograph */ {"\x8D", 0, 0x295F2B}, /* East Asian ideograph */ {"\x84", 0, 0x2D5664}, /* East Asian ideograph */ {"\x85", 0, 0x2D5675}, /* East Asian ideograph */ {"\x88", 0, 0x2D622C}, /* East Asian ideograph */ {"\xA1", 0, 0x4B6278}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page327 = { marc8r_31page327_flat, 0 }; /* PAGE 326 */ struct yaz_iconv_trie_flat marc8r_31page326_flat[] = { {"\x83", 0, 0x216262}, /* East Asian ideograph */ {"\x8D", 0, 0x216263}, /* East Asian ideograph */ {"\x8E", 0, 0x216264}, /* East Asian ideograph */ {"\x8F", 0, 0x216265}, /* East Asian ideograph */ {"\x91", 0, 0x216266}, /* East Asian ideograph */ {"\x98", 0, 0x216268}, /* East Asian ideograph */ {"\x94", 0, 0x216269}, /* East Asian ideograph */ {"\x9E", 0, 0x21626A}, /* East Asian ideograph */ {"\x9C", 0, 0x21626B}, /* East Asian ideograph */ {"\x9B", 0, 0x21626C}, /* East Asian ideograph */ {"\x9D", 0, 0x21626D}, /* East Asian ideograph */ {"\xA0", 0, 0x21626E}, /* East Asian ideograph */ {"\xA8", 0, 0x21626F}, /* East Asian ideograph */ {"\xAF", 0, 0x216270}, /* East Asian ideograph */ {"\xB4", 0, 0x216271}, /* East Asian ideograph */ {"\xB7", 0, 0x216272}, /* East Asian ideograph */ {"\x81", 0, 0x235E30}, /* East Asian ideograph */ {"\x86", 0, 0x235E35}, /* East Asian ideograph */ {"\x88", 0, 0x235E37}, /* East Asian ideograph */ {"\x8C", 0, 0x235E42}, /* East Asian ideograph */ {"\x90", 0, 0x235E4A}, /* East Asian ideograph */ {"\x93", 0, 0x235E4C}, /* East Asian ideograph */ {"\x9A", 0, 0x235E53}, /* East Asian ideograph */ {"\x9F", 0, 0x235E55}, /* East Asian ideograph */ {"\xA3", 0, 0x235E57}, /* East Asian ideograph */ {"\xA5", 0, 0x235E59}, /* East Asian ideograph */ {"\xA7", 0, 0x235E5C}, /* East Asian ideograph */ {"\xAE", 0, 0x235E60}, /* East Asian ideograph */ {"\xB0", 0, 0x235E66}, /* East Asian ideograph */ {"\xB6", 0, 0x235E6F}, /* East Asian ideograph */ {"\xB9", 0, 0x235E74}, /* East Asian ideograph */ {"\xBB", 0, 0x235E76}, /* East Asian ideograph */ {"\xBC", 0, 0x235E77}, /* East Asian ideograph */ {"\xBD", 0, 0x235E7A}, /* East Asian ideograph */ {"\xBE", 0, 0x235E7B}, /* East Asian ideograph */ {"\xBF", 0, 0x235E7C}, /* East Asian ideograph */ {"\xA9", 0, 0x276272}, /* East Asian ideograph */ {"\xAA", 0, 0x295E6A}, /* East Asian ideograph */ {"\x84", 0, 0x2D6262}, /* East Asian ideograph */ {"\x89", 0, 0x2F5E42}, /* East Asian ideograph */ {"\x92", 0, 0x4B6266}, /* East Asian ideograph */ {"\x99", 0, 0x4B6268}, /* East Asian ideograph */ {"\xA2", 0, 0x707771}, /* East Asian ideograph (Version J extension) */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page326 = { marc8r_31page326_flat, 0 }; /* PAGE 325 */ struct yaz_iconv_trie_flat marc8r_31page325_flat[] = { {"\x82", 0, 0x216254}, /* East Asian ideograph */ {"\x8B", 0, 0x216255}, /* East Asian ideograph */ {"\x97", 0, 0x216256}, /* East Asian ideograph */ {"\x92", 0, 0x216257}, /* East Asian ideograph */ {"\x93", 0, 0x216258}, /* East Asian ideograph */ {"\x9D", 0, 0x216259}, /* East Asian ideograph */ {"\x9F", 0, 0x21625A}, /* East Asian ideograph */ {"\xA5", 0, 0x21625B}, /* East Asian ideograph */ {"\xA9", 0, 0x21625C}, /* East Asian ideograph */ {"\xB4", 0, 0x21625D}, /* East Asian ideograph */ {"\xB5", 0, 0x21625E}, /* East Asian ideograph */ {"\xBB", 0, 0x21625F}, /* East Asian ideograph */ {"\xBC", 0, 0x216260}, /* East Asian ideograph */ {"\xBE", 0, 0x216261}, /* East Asian ideograph */ {"\x80", 0, 0x235D47}, /* East Asian ideograph */ {"\x83", 0, 0x235D48}, /* East Asian ideograph */ {"\x84", 0, 0x235D49}, /* East Asian ideograph */ {"\x88", 0, 0x235D4B}, /* East Asian ideograph */ {"\x87", 0, 0x235D4F}, /* East Asian ideograph */ {"\x90", 0, 0x235D55}, /* East Asian ideograph */ {"\x8C", 0, 0x235D58}, /* East Asian ideograph */ {"\x95", 0, 0x235D5A}, /* East Asian ideograph */ {"\x91", 0, 0x235D5C}, /* East Asian ideograph */ {"\x9B", 0, 0x235D5D}, /* East Asian ideograph */ {"\x9E", 0, 0x235D66}, /* East Asian ideograph */ {"\xAD", 0, 0x235D77}, /* East Asian ideograph */ {"\xAF", 0, 0x235D79}, /* East Asian ideograph */ {"\xB0", 0, 0x235D7A}, /* East Asian ideograph */ {"\xA6", 0, 0x27625B}, /* East Asian ideograph */ {"\xB8", 0, 0x27625C}, /* East Asian ideograph */ {"\xA4", 0, 0x2F5D49}, /* East Asian ideograph */ {"\xAA", 0, 0x33625E}, /* East Asian ideograph */ {"\xBD", 0, 0x4B6260}, /* East Asian ideograph */ {"\x81", 0, 0x4D5D49}, /* East Asian ideograph */ {"\xBF", 0, 0x694B7B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page325 = { marc8r_31page325_flat, 0 }; /* PAGE 324 */ struct yaz_iconv_trie_flat marc8r_31page324_flat[] = { {"\xB9", 0, 0x216250}, /* East Asian ideograph */ {"\xBD", 0, 0x216251}, /* East Asian ideograph */ {"\xBC", 0, 0x216252}, /* East Asian ideograph */ {"\xBF", 0, 0x216253}, /* East Asian ideograph */ {"\xB5", 0, 0x235D3C}, /* East Asian ideograph */ {"\xBA", 0, 0x235D42}, /* East Asian ideograph */ {"\xBB", 0, 0x235D43}, /* East Asian ideograph */ {"\x89", 0, 0x27623E}, /* East Asian ideograph */ {"\x83", 0, 0x27623F}, /* East Asian ideograph */ {"\x84", 0, 0x276240}, /* East Asian ideograph */ {"\x85", 0, 0x276241}, /* East Asian ideograph */ {"\x91", 0, 0x276242}, /* East Asian ideograph */ {"\x8A", 0, 0x276243}, /* East Asian ideograph */ {"\x8C", 0, 0x276244}, /* East Asian ideograph */ {"\x8F", 0, 0x276245}, /* East Asian ideograph */ {"\xA4", 0, 0x276246}, /* East Asian ideograph */ {"\x9E", 0, 0x276248}, /* East Asian ideograph */ {"\xA7", 0, 0x276249}, /* East Asian ideograph */ {"\xB0", 0, 0x27624C}, /* East Asian ideograph */ {"\xAD", 0, 0x27624D}, /* East Asian ideograph */ {"\xA6", 0, 0x27624E}, /* East Asian ideograph */ {"\x88", 0, 0x295A70}, /* East Asian ideograph */ {"\x81", 0, 0x295A75}, /* East Asian ideograph */ {"\x86", 0, 0x295B2A}, /* East Asian ideograph */ {"\x8E", 0, 0x295B52}, /* East Asian ideograph */ {"\x9C", 0, 0x295B59}, /* East Asian ideograph */ {"\x9B", 0, 0x295B5C}, /* East Asian ideograph */ {"\x95", 0, 0x295B60}, /* East Asian ideograph */ {"\x97", 0, 0x295B6B}, /* East Asian ideograph */ {"\x8B", 0, 0x295B6C}, /* East Asian ideograph */ {"\xA3", 0, 0x295B77}, /* East Asian ideograph */ {"\x9A", 0, 0x295B79}, /* East Asian ideograph */ {"\x98", 0, 0x295C28}, /* East Asian ideograph */ {"\xA8", 0, 0x295C47}, /* East Asian ideograph */ {"\x87", 0, 0x295C49}, /* East Asian ideograph */ {"\xAB", 0, 0x295C57}, /* East Asian ideograph */ {"\xAC", 0, 0x295C5B}, /* East Asian ideograph */ {"\xA9", 0, 0x295C65}, /* East Asian ideograph */ {"\xAA", 0, 0x295C6C}, /* East Asian ideograph */ {"\xB1", 0, 0x295D29}, /* East Asian ideograph */ {"\xB3", 0, 0x295D3A}, /* East Asian ideograph */ {"\x82", 0, 0x295D3B}, /* East Asian ideograph */ {"\xBE", 0, 0x295D42}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page324 = { marc8r_31page324_flat, 0 }; /* PAGE 323 */ struct yaz_iconv_trie_flat marc8r_31page323_flat[] = { {"\x9A", 0, 0x21624E}, /* East Asian ideograph */ {"\x9E", 0, 0x21624F}, /* East Asian ideograph */ {"\x82", 0, 0x225021}, /* East Asian ideograph */ {"\x87", 0, 0x235C71}, /* East Asian ideograph */ {"\x8E", 0, 0x235D27}, /* East Asian ideograph */ {"\x91", 0, 0x235D2B}, /* East Asian ideograph */ {"\x95", 0, 0x235D36}, /* East Asian ideograph */ {"\x98", 0, 0x235D37}, /* East Asian ideograph */ {"\x9C", 0, 0x235D39}, /* East Asian ideograph */ {"\x9B", 0, 0x235D3A}, /* East Asian ideograph */ {"\x9D", 0, 0x235D3B}, /* East Asian ideograph */ {"\xA1", 0, 0x275F4C}, /* East Asian ideograph */ {"\x9F", 0, 0x27622F}, /* East Asian ideograph */ {"\xA0", 0, 0x276230}, /* East Asian ideograph */ {"\xA2", 0, 0x276231}, /* East Asian ideograph */ {"\xA3", 0, 0x276232}, /* East Asian ideograph */ {"\xA9", 0, 0x276234}, /* East Asian ideograph */ {"\xA6", 0, 0x276235}, /* East Asian ideograph */ {"\xB5", 0, 0x276236}, /* East Asian ideograph */ {"\xAA", 0, 0x276237}, /* East Asian ideograph */ {"\xAD", 0, 0x276238}, /* East Asian ideograph */ {"\xAF", 0, 0x276239}, /* East Asian ideograph */ {"\xB3", 0, 0x27623A}, /* East Asian ideograph */ {"\xBF", 0, 0x27623C}, /* East Asian ideograph */ {"\xBD", 0, 0x27623D}, /* East Asian ideograph */ {"\xA5", 0, 0x27624A}, /* East Asian ideograph */ {"\xB6", 0, 0x27624B}, /* East Asian ideograph */ {"\xBE", 0, 0x27624F}, /* East Asian ideograph */ {"\xA8", 0, 0x295A28}, /* East Asian ideograph */ {"\xB2", 0, 0x295A44}, /* East Asian ideograph */ {"\xB1", 0, 0x295A48}, /* East Asian ideograph */ {"\xB8", 0, 0x295A59}, /* East Asian ideograph */ {"\xB9", 0, 0x295A65}, /* East Asian ideograph */ {"\xBA", 0, 0x295A68}, /* East Asian ideograph */ {"\xAB", 0, 0x295B35}, /* East Asian ideograph */ {"\xB7", 0, 0x295C3E}, /* East Asian ideograph */ {"\xAC", 0, 0x295D36}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page323 = { marc8r_31page323_flat, 0 }; /* PAGE 322 */ struct yaz_iconv_trie_flat marc8r_31page322_flat[] = { {"\x82", 0, 0x216248}, /* East Asian ideograph */ {"\x93", 0, 0x216249}, /* East Asian ideograph */ {"\x97", 0, 0x21624A}, /* East Asian ideograph */ {"\xA5", 0, 0x21624B}, /* East Asian ideograph */ {"\xB9", 0, 0x21624C}, /* East Asian ideograph */ {"\xBA", 0, 0x21624D}, /* East Asian ideograph */ {"\x80", 0, 0x235B79}, /* East Asian ideograph */ {"\x81", 0, 0x235B7A}, /* East Asian ideograph */ {"\x8F", 0, 0x235B7E}, /* East Asian ideograph */ {"\x87", 0, 0x235C22}, /* East Asian ideograph */ {"\x83", 0, 0x235C27}, /* East Asian ideograph */ {"\x9F", 0, 0x235C3A}, /* East Asian ideograph */ {"\x99", 0, 0x235C3E}, /* East Asian ideograph */ {"\x96", 0, 0x235C45}, /* East Asian ideograph */ {"\x9E", 0, 0x235C46}, /* East Asian ideograph */ {"\xA9", 0, 0x235C4F}, /* East Asian ideograph */ {"\xB2", 0, 0x235C57}, /* East Asian ideograph */ {"\xB8", 0, 0x235C5B}, /* East Asian ideograph */ {"\xBC", 0, 0x235C5C}, /* East Asian ideograph */ {"\xAB", 0, 0x235C5F}, /* East Asian ideograph */ {"\xAF", 0, 0x235C65}, /* East Asian ideograph */ {"\xAD", 0, 0x235C6A}, /* East Asian ideograph */ {"\xA6", 0, 0x235C6C}, /* East Asian ideograph */ {"\xAE", 0, 0x235C6D}, /* East Asian ideograph */ {"\xBD", 0, 0x235C7E}, /* East Asian ideograph */ {"\x84", 0, 0x2D5F4C}, /* East Asian ideograph */ {"\xB0", 0, 0x3F4A28}, /* East Asian ideograph */ {"\x86", 0, 0x4D5B7E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page322 = { marc8r_31page322_flat, 0 }; /* PAGE 321 */ struct yaz_iconv_trie_flat marc8r_31page321_flat[] = { {"\x89", 0, 0x216242}, /* East Asian ideograph */ {"\xB4", 0, 0x216246}, /* East Asian ideograph */ {"\xAF", 0, 0x216247}, /* East Asian ideograph */ {"\x8A", 0, 0x235B2E}, /* East Asian ideograph */ {"\x87", 0, 0x235B35}, /* East Asian ideograph */ {"\x83", 0, 0x235B4F}, /* East Asian ideograph */ {"\xA9", 0, 0x235B59}, /* East Asian ideograph */ {"\x92", 0, 0x235B5E}, /* East Asian ideograph */ {"\x98", 0, 0x235B60}, /* East Asian ideograph */ {"\xA4", 0, 0x235B66}, /* East Asian ideograph */ {"\xAA", 0, 0x235B67}, /* East Asian ideograph */ {"\xA1", 0, 0x235B6A}, /* East Asian ideograph */ {"\x9A", 0, 0x235B6B}, /* East Asian ideograph */ {"\x96", 0, 0x235B70}, /* East Asian ideograph */ {"\xB1", 0, 0x235B74}, /* East Asian ideograph */ {"\xB6", 0, 0x235B76}, /* East Asian ideograph */ {"\xBC", 0, 0x235B77}, /* East Asian ideograph */ {"\xB8", 0, 0x235B7B}, /* East Asian ideograph */ {"\xBA", 0, 0x235B7C}, /* East Asian ideograph */ {"\xBB", 0, 0x235C28}, /* East Asian ideograph */ {"\xB9", 0, 0x235C32}, /* East Asian ideograph */ {"\xAC", 0, 0x235C34}, /* East Asian ideograph */ {"\xB2", 0, 0x235C36}, /* East Asian ideograph */ {"\x8F", 0, 0x4B5F4C}, /* East Asian ideograph */ {"\xAB", 0, 0x4D5B35}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page321 = { marc8r_31page321_flat, 0 }; /* PAGE 320 */ struct yaz_iconv_trie_flat marc8r_31page320_flat[] = { {"\xA1", 0, 0x21623E}, /* East Asian ideograph */ {"\x91", 0, 0x21623F}, /* East Asian ideograph */ {"\xA0", 0, 0x216240}, /* East Asian ideograph */ {"\x9D", 0, 0x216241}, /* East Asian ideograph */ {"\xB2", 0, 0x216243}, /* East Asian ideograph */ {"\xAA", 0, 0x216244}, /* East Asian ideograph */ {"\xAC", 0, 0x216245}, /* East Asian ideograph */ {"\x81", 0, 0x235A4F}, /* East Asian ideograph */ {"\x82", 0, 0x235A68}, /* East Asian ideograph */ {"\x80", 0, 0x235A69}, /* East Asian ideograph */ {"\x9C", 0, 0x235A70}, /* East Asian ideograph */ {"\x93", 0, 0x235A75}, /* East Asian ideograph */ {"\x99", 0, 0x235A7B}, /* East Asian ideograph */ {"\x9A", 0, 0x235B26}, /* East Asian ideograph */ {"\x92", 0, 0x235B2A}, /* East Asian ideograph */ {"\xB7", 0, 0x235B2C}, /* East Asian ideograph */ {"\xBA", 0, 0x235B2F}, /* East Asian ideograph */ {"\xB8", 0, 0x235B3F}, /* East Asian ideograph */ {"\xBE", 0, 0x235B42}, /* East Asian ideograph */ {"\xA9", 0, 0x235B47}, /* East Asian ideograph */ {"\xBB", 0, 0x235B4D}, /* East Asian ideograph */ {"\xAF", 0, 0x235B52}, /* East Asian ideograph */ {"\xB6", 0, 0x2D6235}, /* East Asian ideograph */ {"\x9E", 0, 0x2D6241}, /* East Asian ideograph */ {"\x84", 0, 0x2F5A48}, /* East Asian ideograph */ {"\xB0", 0, 0x335F49}, /* East Asian ideograph */ {"\x89", 0, 0x4B624F}, /* East Asian ideograph */ {"\x86", 0, 0x4D5A6C}, /* East Asian ideograph */ {"\x90", 0, 0x4D5C6B}, /* East Asian ideograph */ {"\x88", 0, 0x69727E}, /* East Asian ideograph */ {"\xA4", 0, 0x697323}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page320 = { marc8r_31page320_flat, 0 }; /* PAGE 319 */ struct yaz_iconv_trie_flat marc8r_31page319_flat[] = { {"\x86", 0, 0x216234}, /* East Asian ideograph */ {"\x89", 0, 0x216235}, /* East Asian ideograph */ {"\x95", 0, 0x216236}, /* East Asian ideograph */ {"\xA3", 0, 0x216237}, /* East Asian ideograph */ {"\xA8", 0, 0x216238}, /* East Asian ideograph */ {"\xA6", 0, 0x216239}, /* East Asian ideograph */ {"\x9B", 0, 0x21623A}, /* East Asian ideograph */ {"\x92", 0, 0x21623B}, /* East Asian ideograph (variant of EACC 4B623B) */ {"\xBB", 0, 0x21623C}, /* East Asian ideograph */ {"\xBF", 0, 0x21623D}, /* East Asian ideograph */ {"\x82", 0, 0x235A21}, /* East Asian ideograph */ {"\x83", 0, 0x235A22}, /* East Asian ideograph */ {"\x84", 0, 0x235A24}, /* East Asian ideograph */ {"\x87", 0, 0x235A28}, /* East Asian ideograph */ {"\xAA", 0, 0x235A2F}, /* East Asian ideograph */ {"\xA5", 0, 0x235A30}, /* East Asian ideograph */ {"\x9E", 0, 0x235A3F}, /* East Asian ideograph */ {"\x9D", 0, 0x235A44}, /* East Asian ideograph */ {"\x9F", 0, 0x235A48}, /* East Asian ideograph */ {"\xB6", 0, 0x235A53}, /* East Asian ideograph */ {"\xBE", 0, 0x235A63}, /* East Asian ideograph */ {"\xB0", 0, 0x235A65}, /* East Asian ideograph */ {"\xBD", 0, 0x235A6B}, /* East Asian ideograph */ {"\x88", 0, 0x335F43}, /* East Asian ideograph */ {"\xAC", 0, 0x4B6247}, /* East Asian ideograph */ {"\xAB", 0, 0x693C32}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page319 = { marc8r_31page319_flat, 0 }; /* PAGE 318 */ struct yaz_iconv_trie_flat marc8r_31page318_flat[] = { {"\xA5", 0, 0x21622F}, /* East Asian ideograph */ {"\xA9", 0, 0x216230}, /* East Asian ideograph */ {"\xB6", 0, 0x216231}, /* East Asian ideograph */ {"\xB4", 0, 0x216232}, /* East Asian ideograph */ {"\xB3", 0, 0x216233}, /* East Asian ideograph */ {"\xA7", 0, 0x235973}, /* East Asian ideograph */ {"\xB0", 0, 0x235974}, /* East Asian ideograph */ {"\xB2", 0, 0x235977}, /* East Asian ideograph */ {"\xB7", 0, 0x235A23}, /* East Asian ideograph */ {"\xB8", 0, 0x235A2C}, /* East Asian ideograph */ {"\x83", 0, 0x276221}, /* East Asian ideograph */ {"\x85", 0, 0x276222}, /* East Asian ideograph */ {"\x8D", 0, 0x276224}, /* East Asian ideograph */ {"\x8F", 0, 0x276225}, /* East Asian ideograph */ {"\x94", 0, 0x276227}, /* East Asian ideograph */ {"\x97", 0, 0x276228}, /* East Asian ideograph */ {"\x9D", 0, 0x276229}, /* East Asian ideograph */ {"\x9E", 0, 0x27622A}, /* East Asian ideograph */ {"\x9C", 0, 0x27622B}, /* East Asian ideograph */ {"\x96", 0, 0x27622C}, /* East Asian ideograph */ {"\x8A", 0, 0x29583E}, /* East Asian ideograph */ {"\x84", 0, 0x295854}, /* East Asian ideograph */ {"\x86", 0, 0x295859}, /* East Asian ideograph */ {"\x87", 0, 0x29585C}, /* East Asian ideograph */ {"\x8B", 0, 0x29586A}, /* East Asian ideograph */ {"\x8E", 0, 0x295871}, /* East Asian ideograph */ {"\x99", 0, 0x295921}, /* East Asian ideograph */ {"\x8C", 0, 0x295925}, /* East Asian ideograph */ {"\x95", 0, 0x295928}, /* East Asian ideograph */ {"\x93", 0, 0x29592A}, /* East Asian ideograph */ {"\x98", 0, 0x295932}, /* East Asian ideograph */ {"\x9F", 0, 0x295938}, /* East Asian ideograph */ {"\xA2", 0, 0x29594F}, /* East Asian ideograph */ {"\xAB", 0, 0x2D5F43}, /* East Asian ideograph */ {"\xAC", 0, 0x2F5973}, /* East Asian ideograph */ {"\x90", 0, 0x4D5875}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page318 = { marc8r_31page318_flat, 0 }; /* PAGE 317 */ struct yaz_iconv_trie_flat marc8r_31page317_flat[] = { {"\x94", 0, 0x216229}, /* East Asian ideograph */ {"\x97", 0, 0x21622A}, /* East Asian ideograph */ {"\x96", 0, 0x21622B}, /* East Asian ideograph */ {"\x89", 0, 0x21622C}, /* East Asian ideograph */ {"\xB7", 0, 0x21622D}, /* East Asian ideograph */ {"\xB8", 0, 0x21622E}, /* East Asian ideograph */ {"\x86", 0, 0x23587E}, /* East Asian ideograph */ {"\x84", 0, 0x235926}, /* East Asian ideograph */ {"\x88", 0, 0x235928}, /* East Asian ideograph */ {"\x87", 0, 0x235930}, /* East Asian ideograph */ {"\x92", 0, 0x235938}, /* East Asian ideograph */ {"\x98", 0, 0x23593B}, /* East Asian ideograph */ {"\x91", 0, 0x235945}, /* East Asian ideograph */ {"\xA3", 0, 0x235949}, /* East Asian ideograph */ {"\xA7", 0, 0x23594F}, /* East Asian ideograph */ {"\x9F", 0, 0x235955}, /* East Asian ideograph */ {"\xA0", 0, 0x235956}, /* East Asian ideograph */ {"\xAD", 0, 0x235958}, /* East Asian ideograph */ {"\xA8", 0, 0x23595B}, /* East Asian ideograph */ {"\xAF", 0, 0x23595C}, /* East Asian ideograph */ {"\xAE", 0, 0x23595E}, /* East Asian ideograph */ {"\xBA", 0, 0x23596B}, /* East Asian ideograph */ {"\xBC", 0, 0x276174}, /* East Asian ideograph */ {"\xBF", 0, 0x276175}, /* East Asian ideograph */ {"\x93", 0, 0x2D6229}, /* East Asian ideograph */ {"\xBB", 0, 0x336179}, /* East Asian ideograph */ {"\xB6", 0, 0x355739}, /* East Asian ideograph */ {"\x9A", 0, 0x697265}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page317 = { marc8r_31page317_flat, 0 }; /* PAGE 316 */ struct yaz_iconv_trie_flat marc8r_31page316_flat[] = { {"\x93", 0, 0x216221}, /* East Asian ideograph */ {"\x8D", 0, 0x216222}, /* East Asian ideograph */ {"\xAD", 0, 0x216224}, /* East Asian ideograph */ {"\xA5", 0, 0x216225}, /* East Asian ideograph */ {"\xB1", 0, 0x216226}, /* East Asian ideograph */ {"\xBE", 0, 0x216227}, /* East Asian ideograph */ {"\xBB", 0, 0x216228}, /* East Asian ideograph */ {"\x86", 0, 0x235843}, /* East Asian ideograph */ {"\x95", 0, 0x235844}, /* East Asian ideograph */ {"\x8A", 0, 0x235849}, /* East Asian ideograph */ {"\x88", 0, 0x23584B}, /* East Asian ideograph */ {"\x94", 0, 0x23584C}, /* East Asian ideograph */ {"\x84", 0, 0x23584D}, /* East Asian ideograph */ {"\x82", 0, 0x235852}, /* East Asian ideograph */ {"\x90", 0, 0x235854}, /* East Asian ideograph */ {"\x92", 0, 0x235859}, /* East Asian ideograph */ {"\x89", 0, 0x23585C}, /* East Asian ideograph */ {"\x9C", 0, 0x235866}, /* East Asian ideograph */ {"\xAF", 0, 0x235869}, /* East Asian ideograph */ {"\xA3", 0, 0x23586E}, /* East Asian ideograph */ {"\xAE", 0, 0x235870}, /* East Asian ideograph */ {"\xA8", 0, 0x235871}, /* East Asian ideograph */ {"\xA1", 0, 0x235878}, /* East Asian ideograph */ {"\xA4", 0, 0x235879}, /* East Asian ideograph */ {"\xB2", 0, 0x235925}, /* East Asian ideograph */ {"\xB9", 0, 0x235929}, /* East Asian ideograph */ {"\xB3", 0, 0x23592A}, /* East Asian ideograph */ {"\xB5", 0, 0x235932}, /* East Asian ideograph */ {"\xB7", 0, 0x235934}, /* East Asian ideograph */ {"\x8C", 0, 0x2D6222}, /* East Asian ideograph */ {"\x9B", 0, 0x2F5870}, /* East Asian ideograph */ {"\xBA", 0, 0x47594E}, /* East Asian ideograph */ {"\xB0", 0, 0x697260}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page316 = { marc8r_31page316_flat, 0 }; /* PAGE 315 */ struct yaz_iconv_trie_flat marc8r_31page315_flat[] = { {"\x8A", 0, 0x21617B}, /* East Asian ideograph */ {"\x89", 0, 0x21617C}, /* East Asian ideograph */ {"\xA8", 0, 0x21617D}, /* East Asian ideograph */ {"\xA7", 0, 0x21617E}, /* East Asian ideograph */ {"\xBD", 0, 0x216223}, /* East Asian ideograph */ {"\x87", 0, 0x235756}, /* East Asian ideograph */ {"\x92", 0, 0x235759}, /* East Asian ideograph */ {"\x86", 0, 0x23575D}, /* East Asian ideograph */ {"\x81", 0, 0x23575F}, /* East Asian ideograph */ {"\x93", 0, 0x23576C}, /* East Asian ideograph */ {"\x80", 0, 0x23576E}, /* East Asian ideograph */ {"\x88", 0, 0x235772}, /* East Asian ideograph */ {"\x97", 0, 0x235777}, /* East Asian ideograph */ {"\x96", 0, 0x23577A}, /* East Asian ideograph */ {"\xAB", 0, 0x23577C}, /* East Asian ideograph */ {"\x95", 0, 0x235823}, /* East Asian ideograph */ {"\xA4", 0, 0x235827}, /* East Asian ideograph */ {"\xB1", 0, 0x23582B}, /* East Asian ideograph */ {"\xA1", 0, 0x23582C}, /* East Asian ideograph */ {"\x9B", 0, 0x23582D}, /* East Asian ideograph */ {"\xA2", 0, 0x23582F}, /* East Asian ideograph */ {"\xB0", 0, 0x235831}, /* East Asian ideograph */ {"\x94", 0, 0x235834}, /* East Asian ideograph */ {"\xBF", 0, 0x23583E}, /* East Asian ideograph */ {"\xA3", 0, 0x4D5858}, /* East Asian ideograph */ {"\xB5", 0, 0x4D594E}, /* East Asian ideograph */ {"\x8F", 0, 0x697245}, /* East Asian ideograph */ {"\x91", 0, 0x697246}, /* East Asian ideograph */ {"\xB2", 0, 0x69724E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page315 = { marc8r_31page315_flat, 0 }; /* PAGE 314 */ struct yaz_iconv_trie_flat marc8r_31page314_flat[] = { {"\x91", 0, 0x216177}, /* East Asian ideograph */ {"\xAB", 0, 0x216178}, /* East Asian ideograph */ {"\xAE", 0, 0x216179}, /* East Asian ideograph */ {"\xAA", 0, 0x21617A}, /* East Asian ideograph */ {"\x80", 0, 0x235672}, /* East Asian ideograph */ {"\x8C", 0, 0x235673}, /* East Asian ideograph */ {"\x95", 0, 0x23567A}, /* East Asian ideograph */ {"\x83", 0, 0x235721}, /* East Asian ideograph */ {"\x8E", 0, 0x235729}, /* East Asian ideograph */ {"\x90", 0, 0x23572B}, /* East Asian ideograph */ {"\x93", 0, 0x23572E}, /* East Asian ideograph */ {"\x97", 0, 0x23572F}, /* East Asian ideograph */ {"\x92", 0, 0x235731}, /* East Asian ideograph */ {"\x98", 0, 0x235732}, /* East Asian ideograph */ {"\x9F", 0, 0x235736}, /* East Asian ideograph */ {"\x9D", 0, 0x235739}, /* East Asian ideograph */ {"\xAD", 0, 0x23573C}, /* East Asian ideograph */ {"\x9A", 0, 0x23573D}, /* East Asian ideograph */ {"\xA8", 0, 0x23573F}, /* East Asian ideograph */ {"\x9E", 0, 0x235742}, /* East Asian ideograph */ {"\x99", 0, 0x235743}, /* East Asian ideograph */ {"\x86", 0, 0x235749}, /* East Asian ideograph */ {"\xA0", 0, 0x23574E}, /* East Asian ideograph */ {"\xBF", 0, 0x23575E}, /* East Asian ideograph */ {"\xB9", 0, 0x235766}, /* East Asian ideograph */ {"\xBB", 0, 0x23576B}, /* East Asian ideograph */ {"\x96", 0, 0x69723B}, /* East Asian ideograph */ {"\xB4", 0, 0x697240}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page314 = { marc8r_31page314_flat, 0 }; /* PAGE 313 */ struct yaz_iconv_trie_flat marc8r_31page313_flat[] = { {"\x81", 0, 0x21616D}, /* East Asian ideograph */ {"\x82", 0, 0x21616E}, /* East Asian ideograph */ {"\x85", 0, 0x21616F}, /* East Asian ideograph */ {"\x84", 0, 0x216170}, /* East Asian ideograph */ {"\x8F", 0, 0x216171}, /* East Asian ideograph */ {"\x94", 0, 0x216172}, /* East Asian ideograph */ {"\x98", 0, 0x216173}, /* East Asian ideograph */ {"\x9A", 0, 0x216174}, /* East Asian ideograph */ {"\xB7", 0, 0x216175}, /* East Asian ideograph */ {"\xAF", 0, 0x216176}, /* East Asian ideograph */ {"\x83", 0, 0x235636}, /* East Asian ideograph */ {"\x88", 0, 0x23563A}, /* East Asian ideograph */ {"\x8E", 0, 0x23563C}, /* East Asian ideograph */ {"\x8D", 0, 0x23563E}, /* East Asian ideograph */ {"\x8B", 0, 0x235641}, /* East Asian ideograph */ {"\x91", 0, 0x235647}, /* East Asian ideograph */ {"\xB4", 0, 0x23565D}, /* East Asian ideograph */ {"\xA8", 0, 0x235663}, /* East Asian ideograph */ {"\xBD", 0, 0x23567B}, /* East Asian ideograph */ {"\x87", 0, 0x276173}, /* East Asian ideograph */ {"\x89", 0, 0x29563C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page313 = { marc8r_31page313_flat, 0 }; /* PAGE 312 */ struct yaz_iconv_trie_flat marc8r_31page312_flat[] = { {"\x83", 0, 0x216162}, /* East Asian ideograph */ {"\x86", 0, 0x216163}, /* East Asian ideograph */ {"\x8D", 0, 0x216164}, /* East Asian ideograph */ {"\x9A", 0, 0x216165}, /* East Asian ideograph */ {"\xA2", 0, 0x216166}, /* East Asian ideograph */ {"\xA5", 0, 0x216167}, /* East Asian ideograph */ {"\xA7", 0, 0x216168}, /* East Asian ideograph */ {"\xB1", 0, 0x21616A}, /* East Asian ideograph */ {"\xB2", 0, 0x21616B}, /* East Asian ideograph */ {"\xBC", 0, 0x21616C}, /* East Asian ideograph */ {"\x81", 0, 0x235536}, /* East Asian ideograph */ {"\x82", 0, 0x235538}, /* East Asian ideograph */ {"\x80", 0, 0x23553B}, /* East Asian ideograph */ {"\x88", 0, 0x23553C}, /* East Asian ideograph */ {"\x84", 0, 0x23553E}, /* East Asian ideograph */ {"\x85", 0, 0x235541}, /* East Asian ideograph */ {"\x8B", 0, 0x235543}, /* East Asian ideograph */ {"\x8E", 0, 0x235547}, /* East Asian ideograph */ {"\x91", 0, 0x23554E}, /* East Asian ideograph */ {"\x90", 0, 0x23554F}, /* East Asian ideograph */ {"\x98", 0, 0x235554}, /* East Asian ideograph */ {"\x9D", 0, 0x235556}, /* East Asian ideograph */ {"\x9F", 0, 0x23555E}, /* East Asian ideograph */ {"\xA3", 0, 0x235566}, /* East Asian ideograph */ {"\xA9", 0, 0x23556C}, /* East Asian ideograph */ {"\xAD", 0, 0x235573}, /* East Asian ideograph */ {"\xAE", 0, 0x235574}, /* East Asian ideograph */ {"\xAF", 0, 0x235576}, /* East Asian ideograph */ {"\xB4", 0, 0x23557D}, /* East Asian ideograph */ {"\xB5", 0, 0x235622}, /* East Asian ideograph */ {"\xB7", 0, 0x235623}, /* East Asian ideograph */ {"\x93", 0, 0x276166}, /* East Asian ideograph */ {"\x92", 0, 0x2F5E66}, /* East Asian ideograph */ {"\xA8", 0, 0x33362A}, /* East Asian ideograph */ {"\xBB", 0, 0x39505B}, /* East Asian ideograph */ {"\xAA", 0, 0x396167}, /* East Asian ideograph */ {"\x8F", 0, 0x70775D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page312 = { marc8r_31page312_flat, 0 }; /* PAGE 311 */ struct yaz_iconv_trie_flat marc8r_31page311_flat[] = { {"\x8F", 0, 0x216158}, /* East Asian ideograph */ {"\x93", 0, 0x216159}, /* East Asian ideograph */ {"\x94", 0, 0x21615A}, /* East Asian ideograph */ {"\x92", 0, 0x21615B}, /* East Asian ideograph */ {"\x98", 0, 0x21615C}, /* East Asian ideograph */ {"\xA5", 0, 0x21615D}, /* East Asian ideograph */ {"\xAE", 0, 0x21615F}, /* East Asian ideograph */ {"\xBB", 0, 0x216160}, /* East Asian ideograph */ {"\xAD", 0, 0x216161}, /* East Asian ideograph */ {"\x81", 0, 0x235457}, /* East Asian ideograph */ {"\x80", 0, 0x235459}, /* East Asian ideograph */ {"\x82", 0, 0x23545A}, /* East Asian ideograph */ {"\x88", 0, 0x23545D}, /* East Asian ideograph */ {"\x90", 0, 0x235466}, /* East Asian ideograph */ {"\x91", 0, 0x23546A}, /* East Asian ideograph */ {"\x96", 0, 0x23546D}, /* East Asian ideograph */ {"\x9C", 0, 0x235472}, /* East Asian ideograph */ {"\x9F", 0, 0x235474}, /* East Asian ideograph */ {"\xA0", 0, 0x235476}, /* East Asian ideograph */ {"\xA2", 0, 0x235477}, /* East Asian ideograph */ {"\xA7", 0, 0x235521}, /* East Asian ideograph */ {"\xAB", 0, 0x235527}, /* East Asian ideograph */ {"\xB2", 0, 0x235528}, /* East Asian ideograph */ {"\xAF", 0, 0x23552A}, /* East Asian ideograph */ {"\xB9", 0, 0x235532}, /* East Asian ideograph */ {"\xBD", 0, 0x235535}, /* East Asian ideograph */ {"\x85", 0, 0x276158}, /* East Asian ideograph */ {"\x8B", 0, 0x29546D}, /* East Asian ideograph */ {"\xB4", 0, 0x2D3D5E}, /* East Asian ideograph */ {"\x97", 0, 0x2D5421}, /* East Asian ideograph */ {"\x84", 0, 0x2D6159}, /* East Asian ideograph */ {"\xA1", 0, 0x2F5476}, /* East Asian ideograph */ {"\x95", 0, 0x33537D}, /* East Asian ideograph */ {"\xA3", 0, 0x393078}, /* East Asian ideograph */ {"\xA6", 0, 0x394A60}, /* East Asian ideograph */ {"\x8C", 0, 0x4B537D}, /* East Asian ideograph */ {"\xAA", 0, 0x4B615F}, /* East Asian ideograph */ {"\x9E", 0, 0x697174}, /* East Asian ideograph */ {"\xB1", 0, 0x69717D}, /* East Asian ideograph */ {"\xB7", 0, 0x69717E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page311 = { marc8r_31page311_flat, 0 }; /* PAGE 310 */ struct yaz_iconv_trie_flat marc8r_31page310_flat[] = { {"\xA8", 0, 0x216152}, /* East Asian ideograph */ {"\xAF", 0, 0x216153}, /* East Asian ideograph */ {"\xB0", 0, 0x216154}, /* East Asian ideograph */ {"\xB7", 0, 0x216155}, /* East Asian ideograph */ {"\xB8", 0, 0x216156}, /* East Asian ideograph */ {"\xBC", 0, 0x216157}, /* East Asian ideograph */ {"\xAD", 0, 0x23543F}, /* East Asian ideograph */ {"\xAB", 0, 0x235441}, /* East Asian ideograph */ {"\xB1", 0, 0x235443}, /* East Asian ideograph */ {"\xB3", 0, 0x235445}, /* East Asian ideograph */ {"\xB6", 0, 0x235449}, /* East Asian ideograph */ {"\xBB", 0, 0x23544C}, /* East Asian ideograph */ {"\xBA", 0, 0x235450}, /* East Asian ideograph */ {"\xBD", 0, 0x235454}, /* East Asian ideograph */ {"\x82", 0, 0x275234}, /* East Asian ideograph */ {"\x87", 0, 0x27613B}, /* East Asian ideograph */ {"\x86", 0, 0x27613C}, /* East Asian ideograph */ {"\x8B", 0, 0x27613D}, /* East Asian ideograph */ {"\x8F", 0, 0x27613E}, /* East Asian ideograph */ {"\x88", 0, 0x27613F}, /* East Asian ideograph */ {"\x91", 0, 0x276140}, /* East Asian ideograph */ {"\x97", 0, 0x276141}, /* East Asian ideograph */ {"\x9B", 0, 0x276142}, /* East Asian ideograph */ {"\x9E", 0, 0x276143}, /* East Asian ideograph */ {"\x9A", 0, 0x276145}, /* East Asian ideograph */ {"\xA0", 0, 0x276146}, /* East Asian ideograph */ {"\xA1", 0, 0x276149}, /* East Asian ideograph */ {"\x84", 0, 0x27614A}, /* East Asian ideograph */ {"\x8C", 0, 0x27614D}, /* East Asian ideograph */ {"\xA4", 0, 0x27614E}, /* East Asian ideograph */ {"\xA5", 0, 0x276150}, /* East Asian ideograph */ {"\x8A", 0, 0x276151}, /* East Asian ideograph */ {"\x80", 0, 0x295269}, /* East Asian ideograph */ {"\x90", 0, 0x29533D}, /* East Asian ideograph */ {"\x92", 0, 0x295340}, /* East Asian ideograph */ {"\x93", 0, 0x295347}, /* East Asian ideograph */ {"\x9F", 0, 0x29535A}, /* East Asian ideograph */ {"\x98", 0, 0x295360}, /* East Asian ideograph */ {"\x9D", 0, 0x29536A}, /* East Asian ideograph */ {"\x9C", 0, 0x295370}, /* East Asian ideograph */ {"\x96", 0, 0x295379}, /* East Asian ideograph */ {"\xA2", 0, 0x29537A}, /* East Asian ideograph */ {"\xA3", 0, 0x295421}, /* East Asian ideograph */ {"\x81", 0, 0x295422}, /* East Asian ideograph */ {"\x85", 0, 0x295427}, /* East Asian ideograph */ {"\xA7", 0, 0x295433}, /* East Asian ideograph */ {"\xBE", 0, 0x2F575F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page310 = { marc8r_31page310_flat, 0 }; /* PAGE 309 */ struct yaz_iconv_trie_flat marc8r_31page309_flat[] = { {"\x83", 0, 0x216146}, /* East Asian ideograph */ {"\x85", 0, 0x216147}, /* East Asian ideograph */ {"\x80", 0, 0x216148}, /* East Asian ideograph */ {"\x95", 0, 0x21614A}, /* East Asian ideograph */ {"\x9A", 0, 0x21614B}, /* East Asian ideograph */ {"\x9B", 0, 0x21614C}, /* East Asian ideograph */ {"\x97", 0, 0x21614D}, /* East Asian ideograph */ {"\x9F", 0, 0x21614E}, /* East Asian ideograph */ {"\xA2", 0, 0x21614F}, /* East Asian ideograph */ {"\xA5", 0, 0x216150}, /* East Asian ideograph */ {"\xAA", 0, 0x216151}, /* East Asian ideograph */ {"\x81", 0, 0x235370}, /* East Asian ideograph */ {"\x82", 0, 0x235379}, /* East Asian ideograph */ {"\x84", 0, 0x23537A}, /* East Asian ideograph */ {"\x88", 0, 0x23537D}, /* East Asian ideograph */ {"\x8C", 0, 0x23537E}, /* East Asian ideograph */ {"\x8D", 0, 0x235422}, /* East Asian ideograph */ {"\x92", 0, 0x235424}, /* East Asian ideograph */ {"\x8A", 0, 0x235427}, /* East Asian ideograph */ {"\x98", 0, 0x23542A}, /* East Asian ideograph */ {"\x96", 0, 0x23542C}, /* East Asian ideograph */ {"\xA4", 0, 0x235433}, /* East Asian ideograph */ {"\xA6", 0, 0x235434}, /* East Asian ideograph */ {"\xAB", 0, 0x23543A}, /* East Asian ideograph */ {"\xAC", 0, 0x27612C}, /* East Asian ideograph */ {"\xAD", 0, 0x27612E}, /* East Asian ideograph */ {"\xB0", 0, 0x27612F}, /* East Asian ideograph */ {"\xAE", 0, 0x276130}, /* East Asian ideograph */ {"\xAF", 0, 0x276131}, /* East Asian ideograph */ {"\xB3", 0, 0x276132}, /* East Asian ideograph */ {"\xBB", 0, 0x276133}, /* East Asian ideograph */ {"\xBC", 0, 0x276134}, /* East Asian ideograph */ {"\xBE", 0, 0x276135}, /* East Asian ideograph */ {"\xB7", 0, 0x276136}, /* East Asian ideograph */ {"\xB6", 0, 0x276137}, /* East Asian ideograph */ {"\xB9", 0, 0x276138}, /* East Asian ideograph */ {"\xB8", 0, 0x276139}, /* East Asian ideograph */ {"\xBD", 0, 0x27613A}, /* East Asian ideograph */ {"\xB1", 0, 0x276147}, /* East Asian ideograph */ {"\xBF", 0, 0x27614C}, /* East Asian ideograph */ {"\xB4", 0, 0x27614F}, /* East Asian ideograph */ {"\xB5", 0, 0x295263}, /* East Asian ideograph */ {"\xBA", 0, 0x295369}, /* East Asian ideograph */ {"\xA9", 0, 0x3F4621}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page309 = { marc8r_31page309_flat, 0 }; /* PAGE 308 */ struct yaz_iconv_trie_flat marc8r_31page308_flat[] = { {"\x81", 0, 0x21613D}, /* East Asian ideograph */ {"\x8E", 0, 0x216140}, /* East Asian ideograph */ {"\x99", 0, 0x216141}, /* East Asian ideograph */ {"\x96", 0, 0x216142}, /* East Asian ideograph */ {"\xAB", 0, 0x216143}, /* East Asian ideograph */ {"\xB0", 0, 0x216144}, /* East Asian ideograph */ {"\xB7", 0, 0x216145}, /* East Asian ideograph */ {"\xBE", 0, 0x216149}, /* East Asian ideograph */ {"\x82", 0, 0x235324}, /* East Asian ideograph */ {"\x8F", 0, 0x23533D}, /* East Asian ideograph */ {"\x8B", 0, 0x23533E}, /* East Asian ideograph */ {"\x89", 0, 0x23533F}, /* East Asian ideograph */ {"\x84", 0, 0x235344}, /* East Asian ideograph */ {"\x91", 0, 0x235345}, /* East Asian ideograph */ {"\x85", 0, 0x235347}, /* East Asian ideograph */ {"\x90", 0, 0x235348}, /* East Asian ideograph */ {"\xA4", 0, 0x23534C}, /* East Asian ideograph */ {"\xA2", 0, 0x23534D}, /* East Asian ideograph */ {"\xA0", 0, 0x23534F}, /* East Asian ideograph */ {"\xA7", 0, 0x235352}, /* East Asian ideograph */ {"\xAF", 0, 0x235359}, /* East Asian ideograph */ {"\xB8", 0, 0x23535A}, /* East Asian ideograph */ {"\xAD", 0, 0x235360}, /* East Asian ideograph */ {"\xB5", 0, 0x235361}, /* East Asian ideograph */ {"\xB2", 0, 0x235364}, /* East Asian ideograph */ {"\xB6", 0, 0x235369}, /* East Asian ideograph */ {"\xAE", 0, 0x23536A}, /* East Asian ideograph */ {"\xBB", 0, 0x235374}, /* East Asian ideograph */ {"\x8C", 0, 0x2D6162}, /* East Asian ideograph */ {"\x83", 0, 0x333556}, /* East Asian ideograph */ {"\xA3", 0, 0x336162}, /* East Asian ideograph */ {"\x88", 0, 0x4B613F}, /* East Asian ideograph */ {"\x92", 0, 0x4B6145}, /* East Asian ideograph */ {"\x93", 0, 0x4B614D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page308 = { marc8r_31page308_flat, 0 }; /* PAGE 307 */ struct yaz_iconv_trie_flat marc8r_31page307_flat[] = { {"\x81", 0, 0x216132}, /* East Asian ideograph */ {"\x90", 0, 0x216133}, /* East Asian ideograph */ {"\x9D", 0, 0x216134}, /* East Asian ideograph */ {"\x95", 0, 0x216135}, /* East Asian ideograph */ {"\x9F", 0, 0x216136}, /* East Asian ideograph */ {"\x9B", 0, 0x216137}, /* East Asian ideograph */ {"\x92", 0, 0x216138}, /* East Asian ideograph */ {"\x99", 0, 0x216139}, /* East Asian ideograph */ {"\x91", 0, 0x21613A}, /* East Asian ideograph */ {"\xAD", 0, 0x21613B}, /* East Asian ideograph */ {"\xB1", 0, 0x21613C}, /* East Asian ideograph */ {"\xBF", 0, 0x21613E}, /* East Asian ideograph */ {"\xA2", 0, 0x21613F}, /* East Asian ideograph */ {"\x83", 0, 0x23524F}, /* East Asian ideograph */ {"\x93", 0, 0x235261}, /* East Asian ideograph */ {"\x94", 0, 0x235263}, /* East Asian ideograph */ {"\x89", 0, 0x235265}, /* East Asian ideograph */ {"\x98", 0, 0x235269}, /* East Asian ideograph */ {"\xAC", 0, 0x235274}, /* East Asian ideograph */ {"\xB0", 0, 0x23527A}, /* East Asian ideograph */ {"\xA3", 0, 0x23527B}, /* East Asian ideograph */ {"\xAA", 0, 0x23527C}, /* East Asian ideograph */ {"\xB8", 0, 0x235329}, /* East Asian ideograph */ {"\xB4", 0, 0x23532A}, /* East Asian ideograph */ {"\xBB", 0, 0x235330}, /* East Asian ideograph */ {"\xBD", 0, 0x235331}, /* East Asian ideograph */ {"\xAE", 0, 0x2D6132}, /* East Asian ideograph */ {"\x9E", 0, 0x2D6134}, /* East Asian ideograph */ {"\x88", 0, 0x2D6147}, /* East Asian ideograph */ {"\xA1", 0, 0x335234}, /* East Asian ideograph */ {"\x85", 0, 0x3F614C}, /* East Asian ideograph */ {"\x84", 0, 0x4B6130}, /* East Asian ideograph */ {"\x86", 0, 0x4B6147}, /* East Asian ideograph */ {"\xB2", 0, 0x697152}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page307 = { marc8r_31page307_flat, 0 }; /* PAGE 306 */ struct yaz_iconv_trie_flat marc8r_31page306_flat[] = { {"\x96", 0, 0x216128}, /* East Asian ideograph */ {"\x99", 0, 0x216129}, /* East Asian ideograph */ {"\xA5", 0, 0x21612A}, /* East Asian ideograph */ {"\xA8", 0, 0x21612B}, /* East Asian ideograph */ {"\xAC", 0, 0x21612C}, /* East Asian ideograph */ {"\xAE", 0, 0x21612D}, /* East Asian ideograph */ {"\xAD", 0, 0x21612E}, /* East Asian ideograph */ {"\xB3", 0, 0x21612F}, /* East Asian ideograph */ {"\xB1", 0, 0x216130}, /* East Asian ideograph */ {"\xB4", 0, 0x216131}, /* East Asian ideograph */ {"\x97", 0, 0x23522F}, /* East Asian ideograph */ {"\x98", 0, 0x235230}, /* East Asian ideograph */ {"\xA3", 0, 0x23523B}, /* East Asian ideograph */ {"\xA1", 0, 0x23523C}, /* East Asian ideograph */ {"\xA6", 0, 0x23523E}, /* East Asian ideograph */ {"\xA9", 0, 0x235241}, /* East Asian ideograph */ {"\xAA", 0, 0x235242}, /* East Asian ideograph */ {"\xB5", 0, 0x235249}, /* East Asian ideograph */ {"\xBF", 0, 0x23524D}, /* East Asian ideograph */ {"\xBC", 0, 0x23524E}, /* East Asian ideograph */ {"\xB9", 0, 0x235253}, /* East Asian ideograph */ {"\xBD", 0, 0x235254}, /* East Asian ideograph */ {"\x81", 0, 0x276075}, /* East Asian ideograph */ {"\x86", 0, 0x276079}, /* East Asian ideograph */ {"\x84", 0, 0x27607B}, /* East Asian ideograph */ {"\x85", 0, 0x27607C}, /* East Asian ideograph */ {"\x8F", 0, 0x27607E}, /* East Asian ideograph */ {"\x8A", 0, 0x276121}, /* East Asian ideograph */ {"\x92", 0, 0x276123}, /* East Asian ideograph */ {"\x8B", 0, 0x276127}, /* East Asian ideograph */ {"\x90", 0, 0x29516A}, /* East Asian ideograph */ {"\x91", 0, 0x29516D}, /* East Asian ideograph */ {"\x8D", 0, 0x295170}, /* East Asian ideograph */ {"\x94", 0, 0x295172}, /* East Asian ideograph */ {"\x93", 0, 0x295175}, /* East Asian ideograph */ {"\x80", 0, 0x456076}, /* East Asian ideograph */ {"\x88", 0, 0x516122}, /* East Asian ideograph */ {"\x87", 0, 0x706247}, /* East Asian ideograph */ {"\x95", 0, 0x70624E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page306 = { marc8r_31page306_flat, 0 }; /* PAGE 305 */ struct yaz_iconv_trie_flat marc8r_31page305_flat[] = { {"\x85", 0, 0x216123}, /* East Asian ideograph */ {"\x92", 0, 0x216124}, /* East Asian ideograph */ {"\x91", 0, 0x216125}, /* East Asian ideograph */ {"\x9C", 0, 0x216126}, /* East Asian ideograph */ {"\x9E", 0, 0x216127}, /* East Asian ideograph */ {"\x82", 0, 0x235154}, /* East Asian ideograph (variant of EACC 4D5154) */ {"\x81", 0, 0x235161}, /* East Asian ideograph */ {"\x80", 0, 0x235164}, /* East Asian ideograph */ {"\x88", 0, 0x23516A}, /* East Asian ideograph */ {"\x87", 0, 0x23516C}, /* East Asian ideograph */ {"\x89", 0, 0x23516D}, /* East Asian ideograph */ {"\x83", 0, 0x235170}, /* East Asian ideograph */ {"\x8D", 0, 0x235171}, /* East Asian ideograph */ {"\x8C", 0, 0x235172}, /* East Asian ideograph */ {"\x8E", 0, 0x235173}, /* East Asian ideograph */ {"\x90", 0, 0x235174}, /* East Asian ideograph */ {"\x98", 0, 0x23517A}, /* East Asian ideograph */ {"\x94", 0, 0x23517B}, /* East Asian ideograph */ {"\x95", 0, 0x23517E}, /* East Asian ideograph */ {"\x97", 0, 0x235222}, /* East Asian ideograph (variant of EACC 475222) */ {"\x9D", 0, 0x235229}, /* East Asian ideograph */ {"\x9F", 0, 0x23522B}, /* East Asian ideograph */ {"\xA5", 0, 0x276065}, /* East Asian ideograph */ {"\xA8", 0, 0x276067}, /* East Asian ideograph */ {"\xAC", 0, 0x276068}, /* East Asian ideograph */ {"\xAA", 0, 0x276069}, /* East Asian ideograph */ {"\xAE", 0, 0x27606A}, /* East Asian ideograph */ {"\xAD", 0, 0x27606B}, /* East Asian ideograph */ {"\xB2", 0, 0x27606C}, /* East Asian ideograph */ {"\xB4", 0, 0x27606D}, /* East Asian ideograph */ {"\xB1", 0, 0x27606E}, /* East Asian ideograph */ {"\xB0", 0, 0x27606F}, /* East Asian ideograph */ {"\xBA", 0, 0x276070}, /* East Asian ideograph */ {"\xB5", 0, 0x276072}, /* East Asian ideograph */ {"\xB7", 0, 0x276073}, /* East Asian ideograph */ {"\xBF", 0, 0x276077}, /* East Asian ideograph */ {"\xBC", 0, 0x276078}, /* East Asian ideograph */ {"\xAF", 0, 0x27607A}, /* East Asian ideograph */ {"\xB6", 0, 0x276124}, /* East Asian ideograph */ {"\xAB", 0, 0x29506C}, /* East Asian ideograph */ {"\xBD", 0, 0x295132}, /* East Asian ideograph */ {"\xA7", 0, 0x295153}, /* East Asian ideograph */ {"\xA9", 0, 0x295166}, /* East Asian ideograph */ {"\xA3", 0, 0x456064}, /* East Asian ideograph */ {"\x8B", 0, 0x4B6122}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page305 = { marc8r_31page305_flat, 0 }; /* PAGE 304 */ struct yaz_iconv_trie_flat marc8r_31page304_flat[] = { {"\x83", 0, 0x216070}, /* East Asian ideograph */ {"\x8A", 0, 0x216071}, /* East Asian ideograph */ {"\x8C", 0, 0x216072}, /* East Asian ideograph */ {"\x89", 0, 0x216073}, /* East Asian ideograph */ {"\x90", 0, 0x216074}, /* East Asian ideograph */ {"\x92", 0, 0x216075}, /* East Asian ideograph */ {"\x98", 0, 0x216076}, /* East Asian ideograph */ {"\x93", 0, 0x216077}, /* East Asian ideograph */ {"\x85", 0, 0x216078}, /* East Asian ideograph */ {"\xA8", 0, 0x216079}, /* East Asian ideograph */ {"\x9E", 0, 0x21607A}, /* East Asian ideograph */ {"\x9B", 0, 0x21607B}, /* East Asian ideograph */ {"\xA1", 0, 0x21607C}, /* East Asian ideograph */ {"\xB5", 0, 0x21607D}, /* East Asian ideograph */ {"\xBE", 0, 0x21607E}, /* East Asian ideograph */ {"\xBF", 0, 0x216121}, /* East Asian ideograph */ {"\xBD", 0, 0x216122}, /* East Asian ideograph */ {"\x87", 0, 0x235124}, /* East Asian ideograph */ {"\x82", 0, 0x235128}, /* East Asian ideograph */ {"\x96", 0, 0x23512F}, /* East Asian ideograph */ {"\x94", 0, 0x235130}, /* East Asian ideograph */ {"\x97", 0, 0x235131}, /* East Asian ideograph */ {"\x91", 0, 0x235132}, /* East Asian ideograph */ {"\x95", 0, 0x235138}, /* East Asian ideograph */ {"\xA4", 0, 0x23513A}, /* East Asian ideograph */ {"\x9F", 0, 0x23513B}, /* East Asian ideograph */ {"\x9C", 0, 0x235140}, /* East Asian ideograph */ {"\xA9", 0, 0x235143}, /* East Asian ideograph */ {"\xA7", 0, 0x235145}, /* East Asian ideograph */ {"\x9A", 0, 0x235147}, /* East Asian ideograph */ {"\xAE", 0, 0x23514F}, /* East Asian ideograph */ {"\xAC", 0, 0x235150}, /* East Asian ideograph */ {"\xAA", 0, 0x235151}, /* East Asian ideograph */ {"\xB3", 0, 0x235153}, /* East Asian ideograph */ {"\xB2", 0, 0x235155}, /* East Asian ideograph */ {"\xAB", 0, 0x235156}, /* East Asian ideograph */ {"\xB1", 0, 0x235158}, /* East Asian ideograph */ {"\xBB", 0, 0x23515C}, /* East Asian ideograph */ {"\xBA", 0, 0x235160}, /* East Asian ideograph */ {"\xBC", 0, 0x235166}, /* East Asian ideograph */ {"\x8D", 0, 0x276126}, /* East Asian ideograph */ {"\xA0", 0, 0x2D6078}, /* East Asian ideograph */ {"\x88", 0, 0x2E6F43}, /* East Asian ideograph */ {"\xB9", 0, 0x395063}, /* East Asian ideograph */ {"\x9D", 0, 0x4B606F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page304 = { marc8r_31page304_flat, 0 }; /* PAGE 303 */ struct yaz_iconv_trie_flat marc8r_31page303_flat[] = { {"\x84", 0, 0x216062}, /* East Asian ideograph */ {"\x9B", 0, 0x216063}, /* East Asian ideograph */ {"\x9F", 0, 0x216064}, /* East Asian ideograph */ {"\xA2", 0, 0x216065}, /* East Asian ideograph */ {"\xA7", 0, 0x216066}, /* East Asian ideograph */ {"\xA9", 0, 0x216067}, /* East Asian ideograph */ {"\xAD", 0, 0x216068}, /* East Asian ideograph */ {"\xAA", 0, 0x216069}, /* East Asian ideograph */ {"\xAE", 0, 0x21606A}, /* East Asian ideograph */ {"\xAF", 0, 0x21606B}, /* East Asian ideograph */ {"\xBC", 0, 0x21606C}, /* East Asian ideograph */ {"\xB4", 0, 0x21606D}, /* East Asian ideograph */ {"\xBD", 0, 0x21606E}, /* East Asian ideograph */ {"\xBE", 0, 0x21606F}, /* East Asian ideograph */ {"\x80", 0, 0x23504E}, /* East Asian ideograph */ {"\x86", 0, 0x235053}, /* East Asian ideograph */ {"\xA1", 0, 0x23505F}, /* East Asian ideograph */ {"\xA3", 0, 0x235060}, /* East Asian ideograph */ {"\xA4", 0, 0x235061}, /* East Asian ideograph */ {"\xA5", 0, 0x235063}, /* East Asian ideograph */ {"\xB1", 0, 0x235068}, /* East Asian ideograph */ {"\xAB", 0, 0x23506C}, /* East Asian ideograph */ {"\x8E", 0, 0x27605B}, /* East Asian ideograph */ {"\x92", 0, 0x27605C}, /* East Asian ideograph */ {"\x93", 0, 0x27605F}, /* East Asian ideograph */ {"\x95", 0, 0x276061}, /* East Asian ideograph */ {"\x98", 0, 0x276062}, /* East Asian ideograph */ {"\x9E", 0, 0x276063}, /* East Asian ideograph */ {"\x99", 0, 0x295053}, /* East Asian ideograph */ {"\xA8", 0, 0x295222}, /* East Asian ideograph */ {"\x9C", 0, 0x2D5259}, /* East Asian ideograph */ {"\x83", 0, 0x336062}, /* East Asian ideograph */ {"\x88", 0, 0x355053}, /* East Asian ideograph */ {"\xB0", 0, 0x45606B}, /* East Asian ideograph */ {"\x91", 0, 0x4D503A}, /* East Asian ideograph */ {"\x9A", 0, 0x4D5053}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page303 = { marc8r_31page303_flat, 0 }; /* PAGE 302 */ struct yaz_iconv_trie_flat marc8r_31page302_flat[] = { {"\xA8", 0, 0x21605B}, /* East Asian ideograph */ {"\xAF", 0, 0x21605C}, /* East Asian ideograph */ {"\xB1", 0, 0x21605D}, /* East Asian ideograph */ {"\xB3", 0, 0x21605E}, /* East Asian ideograph */ {"\xB6", 0, 0x21605F}, /* East Asian ideograph */ {"\xBA", 0, 0x216060}, /* East Asian ideograph */ {"\xBC", 0, 0x216061}, /* East Asian ideograph */ {"\xAD", 0, 0x235039}, /* East Asian ideograph */ {"\xB4", 0, 0x235040}, /* East Asian ideograph */ {"\xB8", 0, 0x235048}, /* East Asian ideograph */ {"\xBF", 0, 0x23504A}, /* East Asian ideograph */ {"\xBB", 0, 0x23504D}, /* East Asian ideograph */ {"\x84", 0, 0x27603D}, /* East Asian ideograph */ {"\x81", 0, 0x276041}, /* East Asian ideograph */ {"\x82", 0, 0x276042}, /* East Asian ideograph */ {"\x87", 0, 0x276043}, /* East Asian ideograph */ {"\x86", 0, 0x276044}, /* East Asian ideograph */ {"\x89", 0, 0x276045}, /* East Asian ideograph */ {"\x8A", 0, 0x276047}, /* East Asian ideograph */ {"\x88", 0, 0x276048}, /* East Asian ideograph */ {"\x91", 0, 0x276049}, /* East Asian ideograph */ {"\x93", 0, 0x27604A}, /* East Asian ideograph */ {"\x94", 0, 0x27604B}, /* East Asian ideograph */ {"\x90", 0, 0x27604C}, /* East Asian ideograph */ {"\x97", 0, 0x27604D}, /* East Asian ideograph */ {"\x9C", 0, 0x27604E}, /* East Asian ideograph */ {"\x9D", 0, 0x27604F}, /* East Asian ideograph */ {"\x98", 0, 0x276050}, /* East Asian ideograph */ {"\x9A", 0, 0x276051}, /* East Asian ideograph */ {"\x9B", 0, 0x276052}, /* East Asian ideograph */ {"\xA0", 0, 0x276054}, /* East Asian ideograph */ {"\xA4", 0, 0x276057}, /* East Asian ideograph */ {"\x85", 0, 0x276059}, /* East Asian ideograph */ {"\xA6", 0, 0x27605A}, /* East Asian ideograph */ {"\x8D", 0, 0x284C62}, /* East Asian ideograph */ {"\x83", 0, 0x294E7B}, /* East Asian ideograph */ {"\x80", 0, 0x294F23}, /* East Asian ideograph */ {"\x8F", 0, 0x294F2C}, /* East Asian ideograph */ {"\xA1", 0, 0x294F6B}, /* East Asian ideograph */ {"\x9F", 0, 0x294F77}, /* East Asian ideograph */ {"\xA2", 0, 0x295021}, /* East Asian ideograph */ {"\xA5", 0, 0x295029}, /* East Asian ideograph */ {"\x9E", 0, 0x295030}, /* East Asian ideograph */ {"\xA7", 0, 0x295031}, /* East Asian ideograph */ {"\x96", 0, 0x454F45}, /* East Asian ideograph */ {"\x8C", 0, 0x4D4F39}, /* East Asian ideograph */ {"\xAA", 0, 0x697124}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page302 = { marc8r_31page302_flat, 0 }; /* PAGE 301 */ struct yaz_iconv_trie_flat marc8r_31page301_flat[] = { {"\x86", 0, 0x21604D}, /* East Asian ideograph */ {"\x94", 0, 0x21604E}, /* East Asian ideograph */ {"\x8D", 0, 0x21604F}, /* East Asian ideograph */ {"\x8C", 0, 0x216050}, /* East Asian ideograph */ {"\x8E", 0, 0x216051}, /* East Asian ideograph */ {"\x93", 0, 0x216052}, /* East Asian ideograph */ {"\x9E", 0, 0x216053}, /* East Asian ideograph (variant of EACC 4B6053) */ {"\x9A", 0, 0x216054}, /* East Asian ideograph */ {"\x98", 0, 0x216055}, /* East Asian ideograph */ {"\xA7", 0, 0x216056}, /* East Asian ideograph */ {"\xAB", 0, 0x216057}, /* East Asian ideograph */ {"\xAF", 0, 0x216058}, /* East Asian ideograph */ {"\xB1", 0, 0x216059}, /* East Asian ideograph */ {"\xB0", 0, 0x21605A}, /* East Asian ideograph */ {"\x87", 0, 0x234F4B}, /* East Asian ideograph */ {"\x84", 0, 0x234F4E}, /* East Asian ideograph */ {"\x92", 0, 0x234F60}, /* East Asian ideograph */ {"\x8B", 0, 0x234F62}, /* East Asian ideograph */ {"\x9C", 0, 0x234F6A}, /* East Asian ideograph */ {"\x99", 0, 0x234F6B}, /* East Asian ideograph */ {"\x97", 0, 0x234F6F}, /* East Asian ideograph */ {"\x96", 0, 0x234F72}, /* East Asian ideograph */ {"\xA2", 0, 0x234F77}, /* East Asian ideograph */ {"\xA8", 0, 0x234F7E}, /* East Asian ideograph */ {"\xA5", 0, 0x235021}, /* East Asian ideograph */ {"\xA6", 0, 0x235022}, /* East Asian ideograph */ {"\xAC", 0, 0x235029}, /* East Asian ideograph */ {"\xB3", 0, 0x235030}, /* East Asian ideograph */ {"\xB4", 0, 0x235031}, /* East Asian ideograph */ {"\xB5", 0, 0x276037}, /* East Asian ideograph */ {"\xB6", 0, 0x276038}, /* East Asian ideograph */ {"\xB7", 0, 0x276039}, /* East Asian ideograph */ {"\xB9", 0, 0x27603A}, /* East Asian ideograph */ {"\xBA", 0, 0x27603B}, /* East Asian ideograph */ {"\xBB", 0, 0x27603C}, /* East Asian ideograph */ {"\xBC", 0, 0x27603E}, /* East Asian ideograph */ {"\xBD", 0, 0x27603F}, /* East Asian ideograph */ {"\xBF", 0, 0x276040}, /* East Asian ideograph */ {"\xBE", 0, 0x276056}, /* East Asian ideograph */ {"\xB8", 0, 0x294E79}, /* East Asian ideograph */ {"\x9B", 0, 0x336054}, /* East Asian ideograph */ {"\x95", 0, 0x336058}, /* East Asian ideograph */ {"\x8F", 0, 0x45604E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page301 = { marc8r_31page301_flat, 0 }; /* PAGE 300 */ struct yaz_iconv_trie_flat marc8r_31page300_flat[] = { {"\x81", 0, 0x216037}, /* East Asian ideograph */ {"\x82", 0, 0x216038}, /* East Asian ideograph */ {"\x83", 0, 0x216039}, /* East Asian ideograph */ {"\x85", 0, 0x21603A}, /* East Asian ideograph */ {"\x86", 0, 0x21603B}, /* East Asian ideograph */ {"\x88", 0, 0x21603C}, /* East Asian ideograph */ {"\x90", 0, 0x21603D}, /* East Asian ideograph */ {"\x8A", 0, 0x21603E}, /* East Asian ideograph */ {"\x91", 0, 0x21603F}, /* East Asian ideograph */ {"\x93", 0, 0x216040}, /* East Asian ideograph */ {"\x92", 0, 0x216041}, /* East Asian ideograph */ {"\x8C", 0, 0x216042}, /* East Asian ideograph */ {"\x97", 0, 0x216043}, /* East Asian ideograph */ {"\x98", 0, 0x216044}, /* East Asian ideograph (variant of EACC 4B6044) */ {"\xA1", 0, 0x216045}, /* East Asian ideograph */ {"\xAD", 0, 0x216046}, /* East Asian ideograph */ {"\xB0", 0, 0x216047}, /* East Asian ideograph */ {"\xB8", 0, 0x216048}, /* East Asian ideograph */ {"\xBB", 0, 0x216049}, /* East Asian ideograph */ {"\xB9", 0, 0x21604A}, /* East Asian ideograph */ {"\xB7", 0, 0x21604B}, /* East Asian ideograph */ {"\xA4", 0, 0x21604C}, /* East Asian ideograph */ {"\x87", 0, 0x234E79}, /* East Asian ideograph */ {"\x8F", 0, 0x234E7B}, /* East Asian ideograph */ {"\x8D", 0, 0x234E7E}, /* East Asian ideograph */ {"\x8E", 0, 0x234F23}, /* East Asian ideograph */ {"\x96", 0, 0x234F26}, /* East Asian ideograph */ {"\xA6", 0, 0x234F2C}, /* East Asian ideograph */ {"\x9E", 0, 0x234F2D}, /* East Asian ideograph */ {"\xAB", 0, 0x234F34}, /* East Asian ideograph */ {"\xA0", 0, 0x234F37}, /* East Asian ideograph */ {"\x9F", 0, 0x234F38}, /* East Asian ideograph */ {"\xB3", 0, 0x234F3D}, /* East Asian ideograph */ {"\xAE", 0, 0x234F40}, /* East Asian ideograph */ {"\xAF", 0, 0x234F44}, /* East Asian ideograph */ {"\xB2", 0, 0x234F45}, /* East Asian ideograph */ {"\xBF", 0, 0x234F66}, /* East Asian ideograph */ {"\xB4", 0, 0x2D4F45}, /* East Asian ideograph */ {"\x8B", 0, 0x2D6056}, /* East Asian ideograph */ {"\x80", 0, 0x2E4E56}, /* East Asian ideograph */ {"\xBC", 0, 0x395A36}, /* East Asian ideograph */ {"\x9A", 0, 0x4B6048}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page300 = { marc8r_31page300_flat, 0 }; /* PAGE 299 */ struct yaz_iconv_trie_flat marc8r_31page299_flat[] = { {"\x83", 0, 0x216029}, /* East Asian ideograph */ {"\x81", 0, 0x21602A}, /* East Asian ideograph */ {"\x86", 0, 0x21602B}, /* East Asian ideograph */ {"\x8B", 0, 0x21602C}, /* East Asian ideograph */ {"\x8C", 0, 0x21602D}, /* East Asian ideograph */ {"\x93", 0, 0x21602E}, /* East Asian ideograph */ {"\x9C", 0, 0x21602F}, /* East Asian ideograph */ {"\xAD", 0, 0x216030}, /* East Asian ideograph */ {"\xB3", 0, 0x216031}, /* East Asian ideograph */ {"\xB6", 0, 0x216034}, /* East Asian ideograph */ {"\xBB", 0, 0x216035}, /* East Asian ideograph */ {"\xBF", 0, 0x216036}, /* East Asian ideograph (variant of EACC 456036) */ {"\xAF", 0, 0x222F69}, /* East Asian ideograph */ {"\x80", 0, 0x234E38}, /* East Asian ideograph */ {"\x85", 0, 0x234E3B}, /* East Asian ideograph */ {"\x89", 0, 0x234E43}, /* East Asian ideograph */ {"\x8E", 0, 0x234E4B}, /* East Asian ideograph */ {"\x8D", 0, 0x234E4C}, /* East Asian ideograph */ {"\x90", 0, 0x234E4E}, /* East Asian ideograph */ {"\x94", 0, 0x234E51}, /* East Asian ideograph */ {"\x98", 0, 0x234E53}, /* East Asian ideograph */ {"\x99", 0, 0x234E54}, /* East Asian ideograph */ {"\x9D", 0, 0x234E59}, /* East Asian ideograph */ {"\x9E", 0, 0x234E5C}, /* East Asian ideograph */ {"\xA0", 0, 0x234E5E}, /* East Asian ideograph */ {"\xA1", 0, 0x234E60}, /* East Asian ideograph */ {"\xB5", 0, 0x234E6C}, /* East Asian ideograph */ {"\xBA", 0, 0x234E73}, /* East Asian ideograph */ {"\xA6", 0, 0x27602C}, /* East Asian ideograph */ {"\xA7", 0, 0x27602D}, /* East Asian ideograph */ {"\xA9", 0, 0x27602E}, /* East Asian ideograph */ {"\xAC", 0, 0x27602F}, /* East Asian ideograph */ {"\xAA", 0, 0x294E54}, /* East Asian ideograph */ {"\xAB", 0, 0x294E5C}, /* East Asian ideograph */ {"\xAE", 0, 0x2D6030}, /* East Asian ideograph */ {"\x88", 0, 0x335821}, /* East Asian ideograph */ {"\xA4", 0, 0x395821}, /* East Asian ideograph */ {"\xB2", 0, 0x4D5F7B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page299 = { marc8r_31page299_flat, 0 }; /* PAGE 298 */ struct yaz_iconv_trie_flat marc8r_31page298_flat[] = { {"\x85", 0, 0x215F7E}, /* East Asian ideograph */ {"\x8D", 0, 0x216021}, /* East Asian ideograph */ {"\x8B", 0, 0x216022}, /* East Asian ideograph */ {"\x8F", 0, 0x216023}, /* East Asian ideograph */ {"\x98", 0, 0x216024}, /* East Asian ideograph */ {"\xA0", 0, 0x216025}, /* East Asian ideograph */ {"\xA3", 0, 0x216026}, /* East Asian ideograph */ {"\xA6", 0, 0x216027}, /* East Asian ideograph */ {"\xAD", 0, 0x216028}, /* East Asian ideograph */ {"\x97", 0, 0x216879}, /* East Asian ideograph */ {"\x83", 0, 0x234D37}, /* East Asian ideograph */ {"\x80", 0, 0x234D3A}, /* East Asian ideograph */ {"\x81", 0, 0x234D3C}, /* East Asian ideograph */ {"\x84", 0, 0x234D40}, /* East Asian ideograph */ {"\x89", 0, 0x234D49}, /* East Asian ideograph */ {"\x94", 0, 0x234D54}, /* East Asian ideograph */ {"\x9B", 0, 0x234D59}, /* East Asian ideograph */ {"\x9F", 0, 0x234D5A}, /* East Asian ideograph */ {"\x9A", 0, 0x234D5C}, /* East Asian ideograph */ {"\x9C", 0, 0x234D62}, /* East Asian ideograph */ {"\xAC", 0, 0x234D6A}, /* East Asian ideograph */ {"\xAE", 0, 0x234D70}, /* East Asian ideograph */ {"\xA8", 0, 0x234D71}, /* East Asian ideograph */ {"\xAB", 0, 0x234D74}, /* East Asian ideograph */ {"\xA5", 0, 0x234D78}, /* East Asian ideograph */ {"\xB2", 0, 0x234D7A}, /* East Asian ideograph */ {"\xB4", 0, 0x234D7C}, /* East Asian ideograph */ {"\xB3", 0, 0x234E24}, /* East Asian ideograph */ {"\xB5", 0, 0x234E26}, /* East Asian ideograph */ {"\xB9", 0, 0x234E29}, /* East Asian ideograph */ {"\xB8", 0, 0x234E2D}, /* East Asian ideograph */ {"\xBE", 0, 0x234E35}, /* East Asian ideograph */ {"\x91", 0, 0x276029}, /* East Asian ideograph */ {"\xAF", 0, 0x294E43}, /* East Asian ideograph */ {"\x8C", 0, 0x2D6021}, /* East Asian ideograph */ {"\x92", 0, 0x4B4559}, /* East Asian ideograph */ {"\x86", 0, 0x69705D}, /* East Asian ideograph */ {"\x90", 0, 0x697060}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page298 = { marc8r_31page298_flat, 0 }; /* PAGE 297 */ struct yaz_iconv_trie_flat marc8r_31page297_flat[] = { {"\x84", 0, 0x215F6D}, /* East Asian ideograph */ {"\x82", 0, 0x215F6E}, /* East Asian ideograph */ {"\x88", 0, 0x215F6F}, /* East Asian ideograph */ {"\x91", 0, 0x215F70}, /* East Asian ideograph */ {"\x96", 0, 0x215F71}, /* East Asian ideograph (variant of EACC 4B5F71) */ {"\x9B", 0, 0x215F72}, /* East Asian ideograph (variant of EACC 4B5F72) */ {"\x9C", 0, 0x215F73}, /* East Asian ideograph */ {"\x9E", 0, 0x215F74}, /* East Asian ideograph */ {"\xA0", 0, 0x215F75}, /* East Asian ideograph */ {"\xA1", 0, 0x215F76}, /* East Asian ideograph */ {"\xA6", 0, 0x215F78}, /* East Asian ideograph */ {"\xA8", 0, 0x215F79}, /* East Asian ideograph */ {"\xA9", 0, 0x215F7A}, /* East Asian ideograph */ {"\xB6", 0, 0x215F7B}, /* East Asian ideograph */ {"\xB4", 0, 0x215F7C}, /* East Asian ideograph */ {"\xBC", 0, 0x215F7D}, /* East Asian ideograph */ {"\x81", 0, 0x234C6A}, /* East Asian ideograph */ {"\x87", 0, 0x234C6B}, /* East Asian ideograph */ {"\x86", 0, 0x234C6C}, /* East Asian ideograph */ {"\x89", 0, 0x234C6E}, /* East Asian ideograph */ {"\x98", 0, 0x234C75}, /* East Asian ideograph */ {"\x9A", 0, 0x234C76}, /* East Asian ideograph */ {"\x9D", 0, 0x234C78}, /* East Asian ideograph */ {"\x9F", 0, 0x234C7B}, /* East Asian ideograph */ {"\xA4", 0, 0x234C7D}, /* East Asian ideograph */ {"\xA7", 0, 0x234D25}, /* East Asian ideograph */ {"\xAB", 0, 0x234D2C}, /* East Asian ideograph */ {"\xAE", 0, 0x234D30}, /* East Asian ideograph */ {"\xB7", 0, 0x234D31}, /* East Asian ideograph */ {"\xB8", 0, 0x234D32}, /* East Asian ideograph */ {"\xB3", 0, 0x234D35}, /* East Asian ideograph */ {"\xBA", 0, 0x234D38}, /* East Asian ideograph */ {"\xBF", 0, 0x234D43}, /* East Asian ideograph */ {"\xA5", 0, 0x275F79}, /* East Asian ideograph */ {"\xA2", 0, 0x27625E}, /* East Asian ideograph */ {"\x93", 0, 0x294C76}, /* East Asian ideograph */ {"\xAD", 0, 0x2D602D}, /* East Asian ideograph */ {"\x99", 0, 0x335F73}, /* East Asian ideograph */ {"\x92", 0, 0x4B5F70}, /* East Asian ideograph */ {"\xB1", 0, 0x4B602D}, /* East Asian ideograph */ {"\xB9", 0, 0x697058}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page297 = { marc8r_31page297_flat, 0 }; /* PAGE 296 */ struct yaz_iconv_trie_flat marc8r_31page296_flat[] = { {"\x80", 0, 0x215F59}, /* East Asian ideograph */ {"\x87", 0, 0x215F5A}, /* East Asian ideograph */ {"\x84", 0, 0x215F5B}, /* East Asian ideograph */ {"\x89", 0, 0x215F5C}, /* East Asian ideograph */ {"\x86", 0, 0x215F5D}, /* East Asian ideograph */ {"\x91", 0, 0x215F5E}, /* East Asian ideograph */ {"\x8E", 0, 0x215F5F}, /* East Asian ideograph */ {"\x96", 0, 0x215F60}, /* East Asian ideograph */ {"\x8F", 0, 0x215F61}, /* East Asian ideograph */ {"\x8D", 0, 0x215F62}, /* East Asian ideograph */ {"\x93", 0, 0x215F63}, /* East Asian ideograph */ {"\x9C", 0, 0x215F64}, /* East Asian ideograph */ {"\x9E", 0, 0x215F65}, /* East Asian ideograph */ {"\xAA", 0, 0x215F66}, /* East Asian ideograph */ {"\xA7", 0, 0x215F67}, /* East Asian ideograph */ {"\xB8", 0, 0x215F68}, /* East Asian ideograph */ {"\xB9", 0, 0x215F69}, /* East Asian ideograph */ {"\xB2", 0, 0x215F6A}, /* East Asian ideograph */ {"\xBD", 0, 0x215F6B}, /* East Asian ideograph */ {"\xBE", 0, 0x215F6C}, /* East Asian ideograph */ {"\x82", 0, 0x234C27}, /* East Asian ideograph */ {"\x88", 0, 0x234C29}, /* East Asian ideograph */ {"\x85", 0, 0x234C2A}, /* East Asian ideograph */ {"\x9B", 0, 0x234C38}, /* East Asian ideograph */ {"\x9D", 0, 0x234C3D}, /* East Asian ideograph */ {"\x99", 0, 0x234C3E}, /* East Asian ideograph */ {"\xA3", 0, 0x234C47}, /* East Asian ideograph */ {"\xA2", 0, 0x234C49}, /* East Asian ideograph */ {"\xA4", 0, 0x234C4A}, /* East Asian ideograph */ {"\xA8", 0, 0x234C4E}, /* East Asian ideograph */ {"\xA6", 0, 0x234C50}, /* East Asian ideograph */ {"\xB1", 0, 0x234C52}, /* East Asian ideograph */ {"\xB0", 0, 0x234C58}, /* East Asian ideograph */ {"\xB6", 0, 0x234C5C}, /* East Asian ideograph */ {"\x81", 0, 0x275F6B}, /* East Asian ideograph */ {"\xAD", 0, 0x275F6D}, /* East Asian ideograph */ {"\x8A", 0, 0x4B5F6F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page296 = { marc8r_31page296_flat, 0 }; /* PAGE 295 */ struct yaz_iconv_trie_flat marc8r_31page295_flat[] = { {"\x80", 0, 0x215F3F}, /* East Asian ideograph */ {"\x87", 0, 0x215F40}, /* East Asian ideograph */ {"\x86", 0, 0x215F41}, /* East Asian ideograph */ {"\x84", 0, 0x215F42}, /* East Asian ideograph */ {"\x81", 0, 0x215F43}, /* East Asian ideograph */ {"\x85", 0, 0x215F44}, /* East Asian ideograph */ {"\x8D", 0, 0x215F45}, /* East Asian ideograph */ {"\x8B", 0, 0x215F46}, /* East Asian ideograph */ {"\x89", 0, 0x215F47}, /* East Asian ideograph */ {"\x8C", 0, 0x215F48}, /* East Asian ideograph */ {"\x95", 0, 0x215F49}, /* East Asian ideograph */ {"\x96", 0, 0x215F4A}, /* East Asian ideograph */ {"\x9C", 0, 0x215F4B}, /* East Asian ideograph */ {"\x9E", 0, 0x215F4C}, /* East Asian ideograph */ {"\x9B", 0, 0x215F4D}, /* East Asian ideograph */ {"\x99", 0, 0x215F4E}, /* East Asian ideograph */ {"\xA2", 0, 0x215F4F}, /* East Asian ideograph */ {"\xA3", 0, 0x215F50}, /* East Asian ideograph (variant of EACC 4B5F50) */ {"\xA8", 0, 0x215F51}, /* East Asian ideograph */ {"\xAA", 0, 0x215F52}, /* East Asian ideograph */ {"\xAF", 0, 0x215F53}, /* East Asian ideograph */ {"\xB2", 0, 0x215F54}, /* East Asian ideograph */ {"\xBB", 0, 0x215F55}, /* East Asian ideograph */ {"\xB7", 0, 0x215F56}, /* East Asian ideograph */ {"\xB9", 0, 0x215F57}, /* East Asian ideograph */ {"\xB6", 0, 0x215F58}, /* East Asian ideograph */ {"\x8E", 0, 0x234B52}, /* East Asian ideograph */ {"\x8A", 0, 0x234B53}, /* East Asian ideograph */ {"\x92", 0, 0x234B57}, /* East Asian ideograph */ {"\x9F", 0, 0x234B64}, /* East Asian ideograph */ {"\x98", 0, 0x234B66}, /* East Asian ideograph */ {"\x9D", 0, 0x234B67}, /* East Asian ideograph */ {"\xA9", 0, 0x234B71}, /* East Asian ideograph */ {"\xB1", 0, 0x234B74}, /* East Asian ideograph */ {"\xB0", 0, 0x234B76}, /* East Asian ideograph */ {"\xB4", 0, 0x234B77}, /* East Asian ideograph */ {"\xBA", 0, 0x234B78}, /* East Asian ideograph */ {"\xB5", 0, 0x234B7A}, /* East Asian ideograph */ {"\xBF", 0, 0x234C22}, /* East Asian ideograph */ {"\x8F", 0, 0x275F4D}, /* East Asian ideograph */ {"\xBE", 0, 0x275F67}, /* East Asian ideograph */ {"\xB3", 0, 0x275F6E}, /* East Asian ideograph */ {"\x91", 0, 0x2D5F4B}, /* East Asian ideograph */ {"\xA0", 0, 0x4B306C}, /* East Asian ideograph */ {"\xAB", 0, 0x693C36}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page295 = { marc8r_31page295_flat, 0 }; /* PAGE 294 */ struct yaz_iconv_trie_flat marc8r_31page294_flat[] = { {"\x8A", 0, 0x215F2B}, /* East Asian ideograph */ {"\x8E", 0, 0x215F2C}, /* East Asian ideograph */ {"\x8B", 0, 0x215F2D}, /* East Asian ideograph */ {"\x85", 0, 0x215F2F}, /* East Asian ideograph */ {"\x86", 0, 0x215F30}, /* East Asian ideograph */ {"\x8D", 0, 0x215F31}, /* East Asian ideograph */ {"\x98", 0, 0x215F32}, /* East Asian ideograph */ {"\x94", 0, 0x215F33}, /* East Asian ideograph */ {"\x99", 0, 0x215F34}, /* East Asian ideograph */ {"\x95", 0, 0x215F35}, /* East Asian ideograph */ {"\x9C", 0, 0x215F36}, /* East Asian ideograph */ {"\x9B", 0, 0x215F37}, /* East Asian ideograph */ {"\xA7", 0, 0x215F38}, /* East Asian ideograph */ {"\xA8", 0, 0x215F39}, /* East Asian ideograph */ {"\xAA", 0, 0x215F3A}, /* East Asian ideograph */ {"\xB1", 0, 0x215F3B}, /* East Asian ideograph */ {"\xB4", 0, 0x215F3C}, /* East Asian ideograph */ {"\xB8", 0, 0x215F3D}, /* East Asian ideograph */ {"\xBB", 0, 0x215F3E}, /* East Asian ideograph */ {"\x84", 0, 0x234A63}, /* East Asian ideograph */ {"\x88", 0, 0x234A65}, /* East Asian ideograph */ {"\x89", 0, 0x234A6C}, /* East Asian ideograph */ {"\x82", 0, 0x234A6D}, /* East Asian ideograph */ {"\x83", 0, 0x234A6E}, /* East Asian ideograph */ {"\x96", 0, 0x234A79}, /* East Asian ideograph */ {"\x97", 0, 0x234A7A}, /* East Asian ideograph */ {"\xA4", 0, 0x234B2F}, /* East Asian ideograph */ {"\xA9", 0, 0x234B35}, /* East Asian ideograph */ {"\xAE", 0, 0x234B37}, /* East Asian ideograph */ {"\xB0", 0, 0x234B3B}, /* East Asian ideograph */ {"\xB2", 0, 0x234B3C}, /* East Asian ideograph */ {"\xB3", 0, 0x234B3E}, /* East Asian ideograph */ {"\xB9", 0, 0x234B48}, /* East Asian ideograph */ {"\xBC", 0, 0x234B49}, /* East Asian ideograph */ {"\x8F", 0, 0x275F39}, /* East Asian ideograph */ {"\x90", 0, 0x275F3B}, /* East Asian ideograph */ {"\xB6", 0, 0x275F3D}, /* East Asian ideograph */ {"\xBE", 0, 0x275F50}, /* East Asian ideograph */ {"\xA3", 0, 0x2D5C74}, /* East Asian ideograph */ {"\xA0", 0, 0x2D5F3B}, /* East Asian ideograph */ {"\xBD", 0, 0x2D5F46}, /* East Asian ideograph */ {"\xB7", 0, 0x335F3D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page294 = { marc8r_31page294_flat, 0 }; /* PAGE 293 */ struct yaz_iconv_trie_flat marc8r_31page293_flat[] = { {"\x80", 0, 0x215E72}, /* East Asian ideograph */ {"\x84", 0, 0x215E75}, /* East Asian ideograph */ {"\x90", 0, 0x215E76}, /* East Asian ideograph */ {"\x8C", 0, 0x215E77}, /* East Asian ideograph */ {"\x8B", 0, 0x215E78}, /* East Asian ideograph */ {"\x8D", 0, 0x215E79}, /* East Asian ideograph */ {"\xA2", 0, 0x215E7A}, /* East Asian ideograph */ {"\xA3", 0, 0x215E7B}, /* East Asian ideograph */ {"\x9B", 0, 0x215E7C}, /* East Asian ideograph */ {"\xA1", 0, 0x215E7D}, /* East Asian ideograph */ {"\x9D", 0, 0x215E7E}, /* East Asian ideograph */ {"\xA4", 0, 0x215F21}, /* East Asian ideograph */ {"\xAA", 0, 0x215F22}, /* East Asian ideograph */ {"\xB3", 0, 0x215F23}, /* East Asian ideograph */ {"\xB8", 0, 0x215F24}, /* East Asian ideograph */ {"\xB5", 0, 0x215F25}, /* East Asian ideograph */ {"\xB2", 0, 0x215F26}, /* East Asian ideograph */ {"\xB6", 0, 0x215F27}, /* East Asian ideograph */ {"\xB7", 0, 0x215F28}, /* East Asian ideograph */ {"\xB4", 0, 0x215F29}, /* East Asian ideograph */ {"\xB0", 0, 0x215F2A}, /* East Asian ideograph */ {"\xBD", 0, 0x215F2E}, /* East Asian ideograph */ {"\x82", 0, 0x234A2F}, /* East Asian ideograph */ {"\x91", 0, 0x234A3C}, /* East Asian ideograph */ {"\xA0", 0, 0x234A42}, /* East Asian ideograph */ {"\x9C", 0, 0x234A44}, /* East Asian ideograph */ {"\x98", 0, 0x234A46}, /* East Asian ideograph */ {"\x9F", 0, 0x234A4A}, /* East Asian ideograph */ {"\x96", 0, 0x234A4B}, /* East Asian ideograph */ {"\xAC", 0, 0x234A51}, /* East Asian ideograph */ {"\xBB", 0, 0x234A5D}, /* East Asian ideograph */ {"\xBF", 0, 0x234A5E}, /* East Asian ideograph */ {"\xBE", 0, 0x234A62}, /* East Asian ideograph */ {"\x88", 0, 0x275F23}, /* East Asian ideograph */ {"\x86", 0, 0x275F24}, /* East Asian ideograph */ {"\x85", 0, 0x275F37}, /* East Asian ideograph */ {"\xA9", 0, 0x275F3A}, /* East Asian ideograph */ {"\x87", 0, 0x275F3C}, /* East Asian ideograph */ {"\x95", 0, 0x294A44}, /* East Asian ideograph */ {"\x89", 0, 0x294A46}, /* East Asian ideograph */ {"\xA5", 0, 0x2D5F28}, /* East Asian ideograph */ {"\x8F", 0, 0x2D5F2D}, /* East Asian ideograph */ {"\x94", 0, 0x2D753A}, /* East Asian ideograph */ {"\x9E", 0, 0x39345B}, /* East Asian ideograph */ {"\xA8", 0, 0x455F35}, /* East Asian ideograph (Version J extension) */ {"\xBA", 0, 0x4B5F3A}, /* East Asian ideograph */ {"\xA7", 0, 0x4D4A6C}, /* East Asian ideograph */ {"\xA6", 0, 0x697023}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page293 = { marc8r_31page293_flat, 0 }; /* PAGE 292 */ struct yaz_iconv_trie_flat marc8r_31page292_flat[] = { {"\x9C", 0, 0x215E6C}, /* East Asian ideograph */ {"\xA1", 0, 0x215E6D}, /* East Asian ideograph */ {"\xB2", 0, 0x215E6E}, /* East Asian ideograph */ {"\xB1", 0, 0x215E6F}, /* East Asian ideograph */ {"\xAE", 0, 0x215E70}, /* East Asian ideograph */ {"\xAA", 0, 0x215E71}, /* East Asian ideograph */ {"\xBF", 0, 0x215E73}, /* East Asian ideograph */ {"\xBB", 0, 0x215E74}, /* East Asian ideograph */ {"\x9E", 0, 0x23497A}, /* East Asian ideograph */ {"\xA4", 0, 0x23497B}, /* East Asian ideograph */ {"\xA2", 0, 0x23497C}, /* East Asian ideograph */ {"\xA7", 0, 0x234A21}, /* East Asian ideograph */ {"\xBD", 0, 0x234A30}, /* East Asian ideograph */ {"\xBC", 0, 0x234A32}, /* East Asian ideograph */ {"\x82", 0, 0x275E58}, /* East Asian ideograph */ {"\x81", 0, 0x275E5B}, /* East Asian ideograph */ {"\x80", 0, 0x275E5C}, /* East Asian ideograph */ {"\x85", 0, 0x275E5E}, /* East Asian ideograph */ {"\x8E", 0, 0x275E60}, /* East Asian ideograph */ {"\x94", 0, 0x275E61}, /* East Asian ideograph */ {"\x95", 0, 0x275E62}, /* East Asian ideograph */ {"\x91", 0, 0x275E63}, /* East Asian ideograph */ {"\x97", 0, 0x275E68}, /* East Asian ideograph */ {"\x90", 0, 0x275E6A}, /* East Asian ideograph */ {"\xB5", 0, 0x275E7B}, /* East Asian ideograph */ {"\xB4", 0, 0x275F2A}, /* East Asian ideograph */ {"\x9F", 0, 0x275F2B}, /* East Asian ideograph */ {"\xB6", 0, 0x275F2C}, /* East Asian ideograph */ {"\xB3", 0, 0x275F2E}, /* East Asian ideograph */ {"\x86", 0, 0x294942}, /* East Asian ideograph */ {"\x83", 0, 0x294944}, /* East Asian ideograph */ {"\x8F", 0, 0x294948}, /* East Asian ideograph */ {"\x88", 0, 0x294949}, /* East Asian ideograph */ {"\x89", 0, 0x29494D}, /* East Asian ideograph */ {"\x8A", 0, 0x29494F}, /* East Asian ideograph */ {"\x8C", 0, 0x294950}, /* East Asian ideograph */ {"\x8D", 0, 0x294952}, /* East Asian ideograph */ {"\x92", 0, 0x29495A}, /* East Asian ideograph */ {"\x99", 0, 0x294960}, /* East Asian ideograph */ {"\x9A", 0, 0x294969}, /* East Asian ideograph */ {"\x8B", 0, 0x29556C}, /* East Asian ideograph */ {"\x84", 0, 0x295574}, /* East Asian ideograph */ {"\xAC", 0, 0x2D377C}, /* East Asian ideograph */ {"\xAF", 0, 0x2D3821}, /* East Asian ideograph */ {"\xA8", 0, 0x333475}, /* East Asian ideograph */ {"\x9D", 0, 0x4B5C5E}, /* East Asian ideograph */ {"\x96", 0, 0x515E5D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page292 = { marc8r_31page292_flat, 0 }; /* PAGE 291 */ struct yaz_iconv_trie_flat marc8r_31page291_flat[] = { {"\x8A", 0, 0x215E61}, /* East Asian ideograph */ {"\x8B", 0, 0x215E62}, /* East Asian ideograph */ {"\x8C", 0, 0x215E63}, /* East Asian ideograph */ {"\x88", 0, 0x215E64}, /* East Asian ideograph */ {"\x86", 0, 0x215E65}, /* East Asian ideograph */ {"\x96", 0, 0x215E67}, /* East Asian ideograph */ {"\x90", 0, 0x215E68}, /* East Asian ideograph */ {"\x9C", 0, 0x215E69}, /* East Asian ideograph */ {"\xA1", 0, 0x215E6A}, /* East Asian ideograph */ {"\xA2", 0, 0x215E6B}, /* East Asian ideograph */ {"\x8D", 0, 0x23494A}, /* East Asian ideograph */ {"\x89", 0, 0x234959}, /* East Asian ideograph */ {"\x8E", 0, 0x23495D}, /* East Asian ideograph */ {"\x95", 0, 0x234960}, /* East Asian ideograph */ {"\x92", 0, 0x234962}, /* East Asian ideograph */ {"\x93", 0, 0x234963}, /* East Asian ideograph */ {"\x91", 0, 0x234964}, /* East Asian ideograph */ {"\x83", 0, 0x234965}, /* East Asian ideograph */ {"\x9A", 0, 0x234966}, /* East Asian ideograph */ {"\x9E", 0, 0x234969}, /* East Asian ideograph */ {"\xA0", 0, 0x23496A}, /* East Asian ideograph */ {"\xA5", 0, 0x23496F}, /* East Asian ideograph */ {"\xA4", 0, 0x234972}, /* East Asian ideograph */ {"\xA7", 0, 0x234976}, /* East Asian ideograph */ {"\xAE", 0, 0x273648}, /* East Asian ideograph */ {"\xB7", 0, 0x273E5C}, /* East Asian ideograph */ {"\xBB", 0, 0x275271}, /* East Asian ideograph */ {"\xA8", 0, 0x275E4D}, /* East Asian ideograph */ {"\xA9", 0, 0x275E4E}, /* East Asian ideograph */ {"\xAA", 0, 0x275E4F}, /* East Asian ideograph */ {"\xAD", 0, 0x275E50}, /* East Asian ideograph */ {"\xB5", 0, 0x275E51}, /* East Asian ideograph */ {"\xB0", 0, 0x275E52}, /* East Asian ideograph */ {"\xB2", 0, 0x275E54}, /* East Asian ideograph */ {"\xB4", 0, 0x275E55}, /* East Asian ideograph */ {"\xB8", 0, 0x275E57}, /* East Asian ideograph */ {"\xBA", 0, 0x275E59}, /* East Asian ideograph */ {"\xBD", 0, 0x275E5A}, /* East Asian ideograph */ {"\xBE", 0, 0x275E5F}, /* East Asian ideograph */ {"\xB1", 0, 0x275E64}, /* East Asian ideograph */ {"\xAF", 0, 0x275E67}, /* East Asian ideograph */ {"\xB9", 0, 0x276168}, /* East Asian ideograph */ {"\xB3", 0, 0x294936}, /* East Asian ideograph */ {"\xBC", 0, 0x29496F}, /* East Asian ideograph */ {"\x87", 0, 0x33433E}, /* East Asian ideograph */ {"\xAB", 0, 0x455E60}, /* East Asian ideograph (Version J extension) */ {"\xB6", 0, 0x474931}, /* East Asian ideograph */ {"\x94", 0, 0x4B5E5D}, /* East Asian ideograph */ {"\x98", 0, 0x4B6167}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page291 = { marc8r_31page291_flat, 0 }; /* PAGE 290 */ struct yaz_iconv_trie_flat marc8r_31page290_flat[] = { {"\x80", 0, 0x215E4D}, /* East Asian ideograph */ {"\x82", 0, 0x215E4E}, /* East Asian ideograph */ {"\x83", 0, 0x215E4F}, /* East Asian ideograph */ {"\x89", 0, 0x215E50}, /* East Asian ideograph */ {"\x94", 0, 0x215E51}, /* East Asian ideograph */ {"\x8F", 0, 0x215E52}, /* East Asian ideograph */ {"\x8B", 0, 0x215E53}, /* East Asian ideograph */ {"\x91", 0, 0x215E54}, /* East Asian ideograph */ {"\x93", 0, 0x215E55}, /* East Asian ideograph */ {"\x92", 0, 0x215E56}, /* East Asian ideograph */ {"\x98", 0, 0x215E57}, /* East Asian ideograph */ {"\xA1", 0, 0x215E58}, /* East Asian ideograph */ {"\xA8", 0, 0x215E59}, /* East Asian ideograph */ {"\xA9", 0, 0x215E5A}, /* East Asian ideograph */ {"\xA3", 0, 0x215E5B}, /* East Asian ideograph */ {"\xA5", 0, 0x215E5C}, /* East Asian ideograph */ {"\xA4", 0, 0x215E5D}, /* East Asian ideograph */ {"\xB1", 0, 0x215E5E}, /* East Asian ideograph */ {"\xAD", 0, 0x215E5F}, /* East Asian ideograph */ {"\xBB", 0, 0x215E60}, /* East Asian ideograph */ {"\x85", 0, 0x23492E}, /* East Asian ideograph */ {"\x88", 0, 0x234930}, /* East Asian ideograph */ {"\x8C", 0, 0x234931}, /* East Asian ideograph */ {"\x97", 0, 0x234934}, /* East Asian ideograph */ {"\x8E", 0, 0x234936}, /* East Asian ideograph */ {"\x9F", 0, 0x234938}, /* East Asian ideograph */ {"\xA0", 0, 0x23493A}, /* East Asian ideograph */ {"\xAC", 0, 0x234942}, /* East Asian ideograph */ {"\xAB", 0, 0x234944}, /* East Asian ideograph */ {"\xBC", 0, 0x234948}, /* East Asian ideograph */ {"\xBE", 0, 0x234949}, /* East Asian ideograph */ {"\xB9", 0, 0x23494D}, /* East Asian ideograph */ {"\xBA", 0, 0x23494E}, /* East Asian ideograph */ {"\xB6", 0, 0x23494F}, /* East Asian ideograph */ {"\xBF", 0, 0x234950}, /* East Asian ideograph */ {"\xBD", 0, 0x234952}, /* East Asian ideograph */ {"\xA7", 0, 0x2D362A}, /* East Asian ideograph */ {"\x87", 0, 0x2D5E50}, /* East Asian ideograph */ {"\x86", 0, 0x3F5E60}, /* East Asian ideograph */ {"\xA2", 0, 0x4B5E69}, /* East Asian ideograph */ {"\x99", 0, 0x4B6168}, /* East Asian ideograph */ {"\x8A", 0, 0x696F5B}, /* East Asian ideograph */ {"\x96", 0, 0x696F5D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page290 = { marc8r_31page290_flat, 0 }; /* PAGE 289 */ struct yaz_iconv_trie_flat marc8r_31page289_flat[] = { {"\xB7", 0, 0x215E4C}, /* East Asian ideograph */ {"\x80", 0, 0x275D77}, /* East Asian ideograph */ {"\x81", 0, 0x275D78}, /* East Asian ideograph */ {"\x91", 0, 0x275E25}, /* East Asian ideograph */ {"\x87", 0, 0x275E27}, /* East Asian ideograph */ {"\x8D", 0, 0x275E2A}, /* East Asian ideograph */ {"\x9C", 0, 0x275E2B}, /* East Asian ideograph */ {"\x9D", 0, 0x275E2C}, /* East Asian ideograph */ {"\x9E", 0, 0x275E2E}, /* East Asian ideograph */ {"\x96", 0, 0x275E32}, /* East Asian ideograph */ {"\x97", 0, 0x275E33}, /* East Asian ideograph */ {"\x82", 0, 0x275E34}, /* East Asian ideograph */ {"\x98", 0, 0x275E35}, /* East Asian ideograph */ {"\x99", 0, 0x275E36}, /* East Asian ideograph */ {"\xB0", 0, 0x275E3A}, /* East Asian ideograph */ {"\xAD", 0, 0x275E3C}, /* East Asian ideograph */ {"\xAF", 0, 0x275E40}, /* East Asian ideograph */ {"\xB3", 0, 0x275E44}, /* East Asian ideograph */ {"\xB6", 0, 0x275E46}, /* East Asian ideograph */ {"\xBF", 0, 0x275E4C}, /* East Asian ideograph */ {"\x85", 0, 0x29454E}, /* East Asian ideograph */ {"\x90", 0, 0x29457A}, /* East Asian ideograph */ {"\x93", 0, 0x294621}, /* East Asian ideograph */ {"\x92", 0, 0x294628}, /* East Asian ideograph */ {"\x89", 0, 0x29462D}, /* East Asian ideograph */ {"\x8F", 0, 0x294647}, /* East Asian ideograph */ {"\x9B", 0, 0x294656}, /* East Asian ideograph */ {"\x9F", 0, 0x29465A}, /* East Asian ideograph */ {"\xAA", 0, 0x294662}, /* East Asian ideograph */ {"\x86", 0, 0x29467C}, /* East Asian ideograph */ {"\xA6", 0, 0x294734}, /* East Asian ideograph */ {"\xA8", 0, 0x29473C}, /* East Asian ideograph */ {"\xAB", 0, 0x29474D}, /* East Asian ideograph */ {"\xA1", 0, 0x294758}, /* East Asian ideograph */ {"\xA2", 0, 0x29475E}, /* East Asian ideograph */ {"\xA3", 0, 0x294760}, /* East Asian ideograph */ {"\xA4", 0, 0x294769}, /* East Asian ideograph */ {"\xB1", 0, 0x294774}, /* East Asian ideograph */ {"\x94", 0, 0x29483E}, /* East Asian ideograph */ {"\xB2", 0, 0x29483F}, /* East Asian ideograph */ {"\xAC", 0, 0x29484A}, /* East Asian ideograph */ {"\xA5", 0, 0x29485C}, /* East Asian ideograph */ {"\xA7", 0, 0x294869}, /* East Asian ideograph */ {"\xA9", 0, 0x29486F}, /* East Asian ideograph */ {"\x8A", 0, 0x294871}, /* East Asian ideograph */ {"\x8E", 0, 0x4D446B}, /* East Asian ideograph */ {"\x84", 0, 0x4D4754}, /* East Asian ideograph */ {"\x8C", 0, 0x4D4835}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page289 = { marc8r_31page289_flat, 0 }; /* PAGE 288 */ struct yaz_iconv_trie_flat marc8r_31page288_flat[] = { {"\x91", 0, 0x215E42}, /* East Asian ideograph */ {"\x84", 0, 0x215E43}, /* East Asian ideograph */ {"\xA3", 0, 0x215E44}, /* East Asian ideograph */ {"\xA0", 0, 0x215E45}, /* East Asian ideograph */ {"\xB2", 0, 0x215E46}, /* East Asian ideograph */ {"\xB0", 0, 0x215E47}, /* East Asian ideograph */ {"\xBE", 0, 0x215E48}, /* East Asian ideograph */ {"\xBC", 0, 0x215E49}, /* East Asian ideograph */ {"\xBD", 0, 0x215E4A}, /* East Asian ideograph */ {"\xBF", 0, 0x215E4B}, /* East Asian ideograph */ {"\x80", 0, 0x234832}, /* East Asian ideograph */ {"\x81", 0, 0x234837}, /* East Asian ideograph */ {"\xA7", 0, 0x23483D}, /* East Asian ideograph */ {"\x8C", 0, 0x23483E}, /* East Asian ideograph */ {"\x85", 0, 0x234840}, /* East Asian ideograph */ {"\x90", 0, 0x234842}, /* East Asian ideograph */ {"\x8A", 0, 0x23484A}, /* East Asian ideograph */ {"\xA6", 0, 0x234853}, /* East Asian ideograph */ {"\xA4", 0, 0x234857}, /* East Asian ideograph */ {"\xA2", 0, 0x234858}, /* East Asian ideograph */ {"\xA5", 0, 0x23485C}, /* East Asian ideograph */ {"\x95", 0, 0x23485D}, /* East Asian ideograph */ {"\x9E", 0, 0x23485E}, /* East Asian ideograph */ {"\xAA", 0, 0x234862}, /* East Asian ideograph */ {"\xAB", 0, 0x234868}, /* East Asian ideograph */ {"\xAD", 0, 0x234869}, /* East Asian ideograph */ {"\xAF", 0, 0x23486C}, /* East Asian ideograph */ {"\xB1", 0, 0x23486D}, /* East Asian ideograph */ {"\xB7", 0, 0x234871}, /* East Asian ideograph */ {"\x9B", 0, 0x2D4E5B}, /* East Asian ideograph */ {"\xB5", 0, 0x2D522B}, /* East Asian ideograph */ {"\x9A", 0, 0x2D5E4A}, /* East Asian ideograph */ {"\x92", 0, 0x335E42}, /* East Asian ideograph */ {"\x93", 0, 0x694C7A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page288 = { marc8r_31page288_flat, 0 }; /* PAGE 287 */ struct yaz_iconv_trie_flat marc8r_31page287_flat[] = { {"\x83", 0, 0x215E39}, /* East Asian ideograph */ {"\xAE", 0, 0x215E3A}, /* East Asian ideograph */ {"\xB3", 0, 0x215E3C}, /* East Asian ideograph */ {"\xB5", 0, 0x215E3D}, /* East Asian ideograph */ {"\xBA", 0, 0x215E3E}, /* East Asian ideograph */ {"\xB8", 0, 0x215E3F}, /* East Asian ideograph */ {"\xB2", 0, 0x215E40}, /* East Asian ideograph */ {"\x8B", 0, 0x234732}, /* East Asian ideograph */ {"\x93", 0, 0x234734}, /* East Asian ideograph */ {"\x8F", 0, 0x23473B}, /* East Asian ideograph */ {"\xA0", 0, 0x23473C}, /* East Asian ideograph */ {"\x99", 0, 0x23474D}, /* East Asian ideograph */ {"\x8D", 0, 0x23474E}, /* East Asian ideograph */ {"\xA6", 0, 0x234750}, /* East Asian ideograph */ {"\xA7", 0, 0x234751}, /* East Asian ideograph */ {"\x89", 0, 0x234755}, /* East Asian ideograph */ {"\x94", 0, 0x234758}, /* East Asian ideograph */ {"\x84", 0, 0x234759}, /* East Asian ideograph */ {"\xA2", 0, 0x23475C}, /* East Asian ideograph */ {"\x86", 0, 0x23475D}, /* East Asian ideograph */ {"\x90", 0, 0x234760}, /* East Asian ideograph */ {"\xA3", 0, 0x234762}, /* East Asian ideograph */ {"\x87", 0, 0x23476A}, /* East Asian ideograph */ {"\x8E", 0, 0x23476F}, /* East Asian ideograph */ {"\x91", 0, 0x234771}, /* East Asian ideograph */ {"\xBF", 0, 0x234774}, /* East Asian ideograph */ {"\xA9", 0, 0x234779}, /* East Asian ideograph */ {"\xBD", 0, 0x23477C}, /* East Asian ideograph */ {"\xB6", 0, 0x234828}, /* East Asian ideograph */ {"\xBB", 0, 0x23482B}, /* East Asian ideograph */ {"\xA4", 0, 0x23482D}, /* East Asian ideograph */ {"\xB7", 0, 0x234830}, /* East Asian ideograph */ {"\xAB", 0, 0x234835}, /* East Asian ideograph */ {"\xAD", 0, 0x234836}, /* East Asian ideograph */ {"\xB1", 0, 0x234838}, /* East Asian ideograph */ {"\x98", 0, 0x2D5E21}, /* East Asian ideograph */ {"\x9A", 0, 0x2F445F}, /* East Asian ideograph */ {"\xA1", 0, 0x4B5E3D}, /* East Asian ideograph */ {"\xBE", 0, 0x4D477B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page287 = { marc8r_31page287_flat, 0 }; /* PAGE 286 */ struct yaz_iconv_trie_flat marc8r_31page286_flat[] = { {"\xA1", 0, 0x215E2B}, /* East Asian ideograph */ {"\x91", 0, 0x215E2C}, /* East Asian ideograph */ {"\x96", 0, 0x215E2D}, /* East Asian ideograph */ {"\x83", 0, 0x215E2E}, /* East Asian ideograph */ {"\x9F", 0, 0x215E2F}, /* East Asian ideograph */ {"\x97", 0, 0x215E30}, /* East Asian ideograph */ {"\x88", 0, 0x215E31}, /* East Asian ideograph */ {"\xA2", 0, 0x215E32}, /* East Asian ideograph */ {"\x9C", 0, 0x215E33}, /* East Asian ideograph */ {"\xA4", 0, 0x215E34}, /* East Asian ideograph */ {"\x9D", 0, 0x215E35}, /* East Asian ideograph */ {"\x8D", 0, 0x215E36}, /* East Asian ideograph */ {"\x98", 0, 0x215E37}, /* East Asian ideograph */ {"\xBD", 0, 0x215E3B}, /* East Asian ideograph */ {"\xB1", 0, 0x234653}, /* East Asian ideograph */ {"\x9E", 0, 0x234656}, /* East Asian ideograph */ {"\xAE", 0, 0x234657}, /* East Asian ideograph */ {"\x87", 0, 0x23465A}, /* East Asian ideograph */ {"\xB2", 0, 0x23465B}, /* East Asian ideograph */ {"\x94", 0, 0x23465D}, /* East Asian ideograph */ {"\xA5", 0, 0x23465F}, /* East Asian ideograph */ {"\xB9", 0, 0x234662}, /* East Asian ideograph */ {"\x8A", 0, 0x234663}, /* East Asian ideograph */ {"\x84", 0, 0x234664}, /* East Asian ideograph */ {"\xA8", 0, 0x234666}, /* East Asian ideograph */ {"\xA7", 0, 0x234667}, /* East Asian ideograph */ {"\x9A", 0, 0x234672}, /* East Asian ideograph */ {"\x90", 0, 0x234673}, /* East Asian ideograph */ {"\xAF", 0, 0x234674}, /* East Asian ideograph */ {"\x9B", 0, 0x234675}, /* East Asian ideograph */ {"\x8C", 0, 0x23467C}, /* East Asian ideograph */ {"\x93", 0, 0x23472C}, /* East Asian ideograph */ {"\xA6", 0, 0x234730}, /* East Asian ideograph */ {"\xBB", 0, 0x23473D}, /* East Asian ideograph */ {"\xBA", 0, 0x234749}, /* East Asian ideograph */ {"\xB5", 0, 0x234767}, /* East Asian ideograph */ {"\xB7", 0, 0x234769}, /* East Asian ideograph */ {"\xB4", 0, 0x234827}, /* East Asian ideograph */ {"\x81", 0, 0x2D5E28}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page286 = { marc8r_31page286_flat, 0 }; /* PAGE 285 */ struct yaz_iconv_trie_flat marc8r_31page285_flat[] = { {"\x82", 0, 0x215D78}, /* East Asian ideograph */ {"\x8A", 0, 0x215E25}, /* East Asian ideograph */ {"\x94", 0, 0x215E26}, /* East Asian ideograph */ {"\xAE", 0, 0x215E27}, /* East Asian ideograph */ {"\x96", 0, 0x215E28}, /* East Asian ideograph */ {"\xA2", 0, 0x215E29}, /* East Asian ideograph */ {"\xB3", 0, 0x215E2A}, /* East Asian ideograph */ {"\x86", 0, 0x234544}, /* East Asian ideograph */ {"\xBE", 0, 0x234560}, /* East Asian ideograph */ {"\x8F", 0, 0x234579}, /* East Asian ideograph */ {"\xAC", 0, 0x23457A}, /* East Asian ideograph */ {"\x95", 0, 0x23457B}, /* East Asian ideograph */ {"\x8B", 0, 0x23457E}, /* East Asian ideograph */ {"\xB5", 0, 0x234621}, /* East Asian ideograph */ {"\x8C", 0, 0x234622}, /* East Asian ideograph */ {"\x88", 0, 0x234623}, /* East Asian ideograph */ {"\xB9", 0, 0x234625}, /* East Asian ideograph */ {"\xA1", 0, 0x234627}, /* East Asian ideograph */ {"\xB0", 0, 0x234628}, /* East Asian ideograph */ {"\xA3", 0, 0x234629}, /* East Asian ideograph */ {"\xB7", 0, 0x23462A}, /* East Asian ideograph */ {"\x9B", 0, 0x23462B}, /* East Asian ideograph */ {"\x98", 0, 0x23462D}, /* East Asian ideograph */ {"\x89", 0, 0x23463C}, /* East Asian ideograph */ {"\xA4", 0, 0x23463D}, /* East Asian ideograph */ {"\xBC", 0, 0x234640}, /* East Asian ideograph */ {"\xA7", 0, 0x234642}, /* East Asian ideograph */ {"\xBD", 0, 0x234644}, /* East Asian ideograph */ {"\xA6", 0, 0x234647}, /* East Asian ideograph */ {"\x9A", 0, 0x234648}, /* East Asian ideograph */ {"\xAA", 0, 0x23464A}, /* East Asian ideograph */ {"\x9E", 0, 0x23464D}, /* East Asian ideograph */ {"\x97", 0, 0x23464F}, /* East Asian ideograph */ {"\xBB", 0, 0x234651}, /* East Asian ideograph */ {"\xA9", 0, 0x23472F}, /* East Asian ideograph */ {"\xAD", 0, 0x4B5E27}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page285 = { marc8r_31page285_flat, 0 }; /* PAGE 284 */ struct yaz_iconv_trie_flat marc8r_31page284_flat[] = { {"\x8D", 0, 0x215D77}, /* East Asian ideograph */ {"\xB5", 0, 0x215D79}, /* East Asian ideograph */ {"\xA5", 0, 0x215D7A}, /* East Asian ideograph */ {"\x8B", 0, 0x215D7C}, /* East Asian ideograph */ {"\xB0", 0, 0x215D7E}, /* East Asian ideograph */ {"\xBE", 0, 0x215E21}, /* East Asian ideograph */ {"\xAC", 0, 0x215E23}, /* East Asian ideograph */ {"\x9B", 0, 0x215E24}, /* East Asian ideograph */ {"\x84", 0, 0x23444F}, /* East Asian ideograph */ {"\x80", 0, 0x234471}, /* East Asian ideograph */ {"\x82", 0, 0x23452F}, /* East Asian ideograph */ {"\x81", 0, 0x234531}, /* East Asian ideograph */ {"\x8C", 0, 0x234535}, /* East Asian ideograph */ {"\xB9", 0, 0x234541}, /* East Asian ideograph */ {"\xAA", 0, 0x234547}, /* East Asian ideograph */ {"\x9C", 0, 0x234548}, /* East Asian ideograph */ {"\x8F", 0, 0x23454C}, /* East Asian ideograph */ {"\x87", 0, 0x23454D}, /* East Asian ideograph */ {"\xBA", 0, 0x234551}, /* East Asian ideograph */ {"\x96", 0, 0x234553}, /* East Asian ideograph */ {"\xB1", 0, 0x234554}, /* East Asian ideograph */ {"\xBC", 0, 0x234556}, /* East Asian ideograph */ {"\xB7", 0, 0x23455C}, /* East Asian ideograph */ {"\x89", 0, 0x23455D}, /* East Asian ideograph */ {"\x98", 0, 0x23455E}, /* East Asian ideograph */ {"\x9A", 0, 0x23455F}, /* East Asian ideograph */ {"\x9F", 0, 0x234562}, /* East Asian ideograph */ {"\xB6", 0, 0x234564}, /* East Asian ideograph */ {"\x95", 0, 0x234566}, /* East Asian ideograph */ {"\x94", 0, 0x234567}, /* East Asian ideograph */ {"\x88", 0, 0x23456A}, /* East Asian ideograph */ {"\xB4", 0, 0x23456B}, /* East Asian ideograph */ {"\x91", 0, 0x23456E}, /* East Asian ideograph */ {"\xA4", 0, 0x23456F}, /* East Asian ideograph */ {"\xAB", 0, 0x234571}, /* East Asian ideograph */ {"\xAD", 0, 0x234572}, /* East Asian ideograph */ {"\xA0", 0, 0x234573}, /* East Asian ideograph */ {"\xAE", 0, 0x234577}, /* East Asian ideograph */ {"\x8A", 0, 0x33496A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page284 = { marc8r_31page284_flat, 0 }; /* PAGE 283 */ struct yaz_iconv_trie_flat marc8r_31page283_flat[] = { {"\xA0", 0, 0x215D6B}, /* East Asian ideograph */ {"\xB6", 0, 0x215D6C}, /* East Asian ideograph */ {"\xB3", 0, 0x215D6E}, /* East Asian ideograph */ {"\xAF", 0, 0x215D6F}, /* East Asian ideograph */ {"\xA2", 0, 0x215D70}, /* East Asian ideograph */ {"\xAB", 0, 0x215D72}, /* East Asian ideograph */ {"\x9A", 0, 0x215D73}, /* East Asian ideograph */ {"\x84", 0, 0x215D74}, /* East Asian ideograph */ {"\x90", 0, 0x215D75}, /* East Asian ideograph */ {"\xA6", 0, 0x215D76}, /* East Asian ideograph */ {"\xA8", 0, 0x215D7D}, /* East Asian ideograph */ {"\x98", 0, 0x215E22}, /* East Asian ideograph */ {"\x83", 0, 0x23444C}, /* East Asian ideograph */ {"\x87", 0, 0x23444D}, /* East Asian ideograph */ {"\x9E", 0, 0x23444E}, /* East Asian ideograph */ {"\x9D", 0, 0x234453}, /* East Asian ideograph */ {"\x9F", 0, 0x234458}, /* East Asian ideograph */ {"\xB1", 0, 0x23445A}, /* East Asian ideograph */ {"\x86", 0, 0x23445B}, /* East Asian ideograph */ {"\x8F", 0, 0x23445F}, /* East Asian ideograph */ {"\x82", 0, 0x234462}, /* East Asian ideograph */ {"\xA4", 0, 0x234464}, /* East Asian ideograph */ {"\x92", 0, 0x234466}, /* East Asian ideograph */ {"\xB8", 0, 0x234469}, /* East Asian ideograph */ {"\xA3", 0, 0x23446A}, /* East Asian ideograph */ {"\xA1", 0, 0x23446C}, /* East Asian ideograph */ {"\x81", 0, 0x234472}, /* East Asian ideograph */ {"\x95", 0, 0x234474}, /* East Asian ideograph */ {"\xA9", 0, 0x234476}, /* East Asian ideograph */ {"\xAE", 0, 0x234478}, /* East Asian ideograph */ {"\xAA", 0, 0x234479}, /* East Asian ideograph */ {"\xBF", 0, 0x23447B}, /* East Asian ideograph */ {"\xBA", 0, 0x23447C}, /* East Asian ideograph */ {"\xB5", 0, 0x23447E}, /* East Asian ideograph */ {"\x94", 0, 0x234522}, /* East Asian ideograph */ {"\x99", 0, 0x234532}, /* East Asian ideograph */ {"\xBE", 0, 0x294666}, /* East Asian ideograph */ {"\xAC", 0, 0x4B496A}, /* East Asian ideograph */ {"\xBB", 0, 0x696F27}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page283 = { marc8r_31page283_flat, 0 }; /* PAGE 282 */ struct yaz_iconv_trie_flat marc8r_31page282_flat[] = { {"\x85", 0, 0x215D62}, /* East Asian ideograph */ {"\xAA", 0, 0x215D65}, /* East Asian ideograph */ {"\x81", 0, 0x215D67}, /* East Asian ideograph */ {"\xA4", 0, 0x215D68}, /* East Asian ideograph */ {"\x92", 0, 0x215D6A}, /* East Asian ideograph */ {"\xB8", 0, 0x215D6D}, /* East Asian ideograph */ {"\xBC", 0, 0x215D71}, /* East Asian ideograph */ {"\xAE", 0, 0x234340}, /* East Asian ideograph */ {"\x88", 0, 0x234366}, /* East Asian ideograph */ {"\x83", 0, 0x23436A}, /* East Asian ideograph */ {"\x90", 0, 0x23436F}, /* East Asian ideograph */ {"\xB1", 0, 0x234371}, /* East Asian ideograph */ {"\x9F", 0, 0x234372}, /* East Asian ideograph */ {"\xA6", 0, 0x234375}, /* East Asian ideograph */ {"\x80", 0, 0x234377}, /* East Asian ideograph */ {"\x99", 0, 0x23437A}, /* East Asian ideograph */ {"\x95", 0, 0x23437E}, /* East Asian ideograph */ {"\x86", 0, 0x234421}, /* East Asian ideograph */ {"\xB4", 0, 0x234425}, /* East Asian ideograph */ {"\x8F", 0, 0x234427}, /* East Asian ideograph */ {"\xA7", 0, 0x23442C}, /* East Asian ideograph */ {"\x87", 0, 0x23442D}, /* East Asian ideograph */ {"\xB0", 0, 0x23442E}, /* East Asian ideograph */ {"\x9B", 0, 0x23442F}, /* East Asian ideograph */ {"\x9C", 0, 0x234430}, /* East Asian ideograph */ {"\x98", 0, 0x234431}, /* East Asian ideograph */ {"\xA9", 0, 0x234433}, /* East Asian ideograph */ {"\x9D", 0, 0x234435}, /* East Asian ideograph */ {"\x91", 0, 0x234439}, /* East Asian ideograph */ {"\x8A", 0, 0x23443A}, /* East Asian ideograph */ {"\x82", 0, 0x23443C}, /* East Asian ideograph */ {"\x8C", 0, 0x23443E}, /* East Asian ideograph */ {"\xAF", 0, 0x234440}, /* East Asian ideograph */ {"\xA8", 0, 0x234441}, /* East Asian ideograph */ {"\xAB", 0, 0x234443}, /* East Asian ideograph */ {"\xB5", 0, 0x234445}, /* East Asian ideograph */ {"\xB2", 0, 0x234448}, /* East Asian ideograph */ {"\xBA", 0, 0x234454}, /* East Asian ideograph */ {"\xB9", 0, 0x23445D}, /* East Asian ideograph */ {"\xBE", 0, 0x234528}, /* East Asian ideograph */ {"\xB3", 0, 0x2D5E43}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page282 = { marc8r_31page282_flat, 0 }; /* PAGE 281 */ struct yaz_iconv_trie_flat marc8r_31page281_flat[] = { {"\x80", 0, 0x215D5A}, /* East Asian ideograph */ {"\xAC", 0, 0x215D5B}, /* East Asian ideograph */ {"\x85", 0, 0x215D5C}, /* East Asian ideograph */ {"\x98", 0, 0x215D5D}, /* East Asian ideograph */ {"\x96", 0, 0x215D5E}, /* East Asian ideograph */ {"\x93", 0, 0x215D60}, /* East Asian ideograph */ {"\x9C", 0, 0x215D61}, /* East Asian ideograph */ {"\xBB", 0, 0x215D63}, /* East Asian ideograph */ {"\xB3", 0, 0x215D64}, /* East Asian ideograph */ {"\xB7", 0, 0x215D66}, /* East Asian ideograph */ {"\xBC", 0, 0x215D69}, /* East Asian ideograph */ {"\x92", 0, 0x23422A}, /* East Asian ideograph */ {"\xA2", 0, 0x23424F}, /* East Asian ideograph */ {"\x83", 0, 0x23432F}, /* East Asian ideograph */ {"\xA5", 0, 0x234331}, /* East Asian ideograph */ {"\x82", 0, 0x234333}, /* East Asian ideograph */ {"\xA8", 0, 0x234335}, /* East Asian ideograph */ {"\xA4", 0, 0x234338}, /* East Asian ideograph */ {"\x8D", 0, 0x23433F}, /* East Asian ideograph */ {"\x88", 0, 0x234342}, /* East Asian ideograph */ {"\x8E", 0, 0x234345}, /* East Asian ideograph */ {"\xA0", 0, 0x234346}, /* East Asian ideograph */ {"\xAA", 0, 0x234349}, /* East Asian ideograph */ {"\xA6", 0, 0x234350}, /* East Asian ideograph */ {"\x9A", 0, 0x234355}, /* East Asian ideograph */ {"\xAB", 0, 0x234358}, /* East Asian ideograph */ {"\x91", 0, 0x23435B}, /* East Asian ideograph */ {"\x9B", 0, 0x23435D}, /* East Asian ideograph */ {"\xA3", 0, 0x234364}, /* East Asian ideograph */ {"\xB6", 0, 0x234376}, /* East Asian ideograph */ {"\xBE", 0, 0x234379}, /* East Asian ideograph */ {"\xB2", 0, 0x23442A}, /* East Asian ideograph */ {"\xAE", 0, 0x275E48}, /* East Asian ideograph */ {"\xB9", 0, 0x2D5E3B}, /* East Asian ideograph */ {"\x95", 0, 0x395E3D}, /* East Asian ideograph */ {"\xAD", 0, 0x4B5D70}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page281 = { marc8r_31page281_flat, 0 }; /* PAGE 280 */ struct yaz_iconv_trie_flat marc8r_31page280_flat[] = { {"\x80", 0, 0x215D53}, /* East Asian ideograph */ {"\x8B", 0, 0x215D54}, /* East Asian ideograph */ {"\x9B", 0, 0x215D55}, /* East Asian ideograph */ {"\xA4", 0, 0x215D56}, /* East Asian ideograph */ {"\x91", 0, 0x215D57}, /* East Asian ideograph */ {"\xB8", 0, 0x215D59}, /* East Asian ideograph */ {"\xBB", 0, 0x215D5F}, /* East Asian ideograph */ {"\x89", 0, 0x234252}, /* East Asian ideograph */ {"\x8D", 0, 0x234254}, /* East Asian ideograph */ {"\x88", 0, 0x234255}, /* East Asian ideograph */ {"\xA6", 0, 0x234261}, /* East Asian ideograph */ {"\x9E", 0, 0x234264}, /* East Asian ideograph */ {"\x90", 0, 0x23426B}, /* East Asian ideograph */ {"\xAB", 0, 0x23426C}, /* East Asian ideograph */ {"\xAD", 0, 0x23426F}, /* East Asian ideograph */ {"\xAC", 0, 0x234270}, /* East Asian ideograph */ {"\x8F", 0, 0x234271}, /* East Asian ideograph */ {"\xA0", 0, 0x234277}, /* East Asian ideograph */ {"\x8E", 0, 0x234323}, /* East Asian ideograph */ {"\x8C", 0, 0x234326}, /* East Asian ideograph */ {"\x96", 0, 0x234327}, /* East Asian ideograph */ {"\x9A", 0, 0x23432B}, /* East Asian ideograph */ {"\x81", 0, 0x23432E}, /* East Asian ideograph */ {"\xBC", 0, 0x234337}, /* East Asian ideograph */ {"\xB6", 0, 0x23433E}, /* East Asian ideograph */ {"\xBA", 0, 0x234343}, /* East Asian ideograph */ {"\xB7", 0, 0x234347}, /* East Asian ideograph */ {"\xBE", 0, 0x234354}, /* East Asian ideograph */ {"\xBF", 0, 0x234362}, /* East Asian ideograph */ {"\x85", 0, 0x2D3C38}, /* East Asian ideograph */ {"\xA2", 0, 0x2D5228}, /* East Asian ideograph */ {"\x97", 0, 0x33502A}, /* East Asian ideograph */ {"\x84", 0, 0x335E3D}, /* East Asian ideograph */ {"\xB4", 0, 0x395E42}, /* East Asian ideograph */ {"\xB1", 0, 0x514E5B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page280 = { marc8r_31page280_flat, 0 }; /* PAGE 279 */ struct yaz_iconv_trie_flat marc8r_31page279_flat[] = { {"\xA3", 0, 0x215D47}, /* East Asian ideograph */ {"\x8D", 0, 0x215D48}, /* East Asian ideograph */ {"\x95", 0, 0x215D49}, /* East Asian ideograph */ {"\x89", 0, 0x215D4A}, /* East Asian ideograph */ {"\x94", 0, 0x215D4B}, /* East Asian ideograph */ {"\x9E", 0, 0x215D4C}, /* East Asian ideograph */ {"\x90", 0, 0x215D4D}, /* East Asian ideograph */ {"\xB7", 0, 0x215D4F}, /* East Asian ideograph */ {"\xB8", 0, 0x215D50}, /* East Asian ideograph */ {"\xBD", 0, 0x215D51}, /* East Asian ideograph */ {"\xBE", 0, 0x215D52}, /* East Asian ideograph */ {"\xB4", 0, 0x215D58}, /* East Asian ideograph (variant of EACC 4B5D58) */ {"\x84", 0, 0x234223}, /* East Asian ideograph */ {"\x81", 0, 0x234225}, /* East Asian ideograph */ {"\xAB", 0, 0x234226}, /* East Asian ideograph */ {"\x8A", 0, 0x234227}, /* East Asian ideograph */ {"\xA5", 0, 0x234228}, /* East Asian ideograph */ {"\xA8", 0, 0x23422C}, /* East Asian ideograph */ {"\x87", 0, 0x23422E}, /* East Asian ideograph */ {"\x83", 0, 0x23422F}, /* East Asian ideograph */ {"\x80", 0, 0x234231}, /* East Asian ideograph */ {"\x98", 0, 0x234232}, /* East Asian ideograph */ {"\x88", 0, 0x234236}, /* East Asian ideograph */ {"\xA6", 0, 0x234237}, /* East Asian ideograph */ {"\x9C", 0, 0x234238}, /* East Asian ideograph */ {"\xA4", 0, 0x23423B}, /* East Asian ideograph */ {"\x92", 0, 0x234243}, /* East Asian ideograph */ {"\x96", 0, 0x23424A}, /* East Asian ideograph */ {"\x91", 0, 0x23424B}, /* East Asian ideograph */ {"\x86", 0, 0x23424E}, /* East Asian ideograph */ {"\xB0", 0, 0x234251}, /* East Asian ideograph */ {"\xBA", 0, 0x234258}, /* East Asian ideograph */ {"\xAE", 0, 0x23425C}, /* East Asian ideograph */ {"\xB3", 0, 0x23425F}, /* East Asian ideograph */ {"\xB5", 0, 0x234268}, /* East Asian ideograph */ {"\xB9", 0, 0x23426D}, /* East Asian ideograph */ {"\xBF", 0, 0x234274}, /* East Asian ideograph */ {"\xB6", 0, 0x23427E}, /* East Asian ideograph */ {"\x8E", 0, 0x2D5D56}, /* East Asian ideograph */ {"\xA1", 0, 0x335E21}, /* East Asian ideograph */ {"\xAC", 0, 0x4B5E3F}, /* East Asian ideograph */ {"\xA9", 0, 0x4D4862}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page279 = { marc8r_31page279_flat, 0 }; /* PAGE 278 */ struct yaz_iconv_trie_flat marc8r_31page278_flat[] = { {"\x80", 0, 0x215D34}, /* East Asian ideograph */ {"\x81", 0, 0x215D35}, /* East Asian ideograph */ {"\x87", 0, 0x215D36}, /* East Asian ideograph */ {"\x89", 0, 0x215D37}, /* East Asian ideograph */ {"\x8B", 0, 0x215D38}, /* East Asian ideograph */ {"\x8D", 0, 0x215D3A}, /* East Asian ideograph */ {"\x8E", 0, 0x215D3B}, /* East Asian ideograph */ {"\x8F", 0, 0x215D3C}, /* East Asian ideograph */ {"\x90", 0, 0x215D3D}, /* East Asian ideograph */ {"\x91", 0, 0x215D3E}, /* East Asian ideograph */ {"\x9D", 0, 0x215D3F}, /* East Asian ideograph */ {"\x98", 0, 0x215D40}, /* East Asian ideograph */ {"\x97", 0, 0x215D41}, /* East Asian ideograph */ {"\x9C", 0, 0x215D42}, /* East Asian ideograph */ {"\xB5", 0, 0x215D43}, /* East Asian ideograph */ {"\xA6", 0, 0x215D44}, /* East Asian ideograph */ {"\xA3", 0, 0x215D45}, /* East Asian ideograph */ {"\xA7", 0, 0x215D46}, /* East Asian ideograph */ {"\x82", 0, 0x23415A}, /* East Asian ideograph */ {"\x84", 0, 0x23415B}, /* East Asian ideograph */ {"\x83", 0, 0x23415C}, /* East Asian ideograph */ {"\x94", 0, 0x234161}, /* East Asian ideograph */ {"\x93", 0, 0x234162}, /* East Asian ideograph */ {"\x95", 0, 0x234163}, /* East Asian ideograph */ {"\x99", 0, 0x234164}, /* East Asian ideograph */ {"\xA2", 0, 0x234168}, /* East Asian ideograph */ {"\xAD", 0, 0x234169}, /* East Asian ideograph */ {"\xB7", 0, 0x23416A}, /* East Asian ideograph */ {"\xBA", 0, 0x23416B}, /* East Asian ideograph */ {"\xB2", 0, 0x23416F}, /* East Asian ideograph */ {"\xA8", 0, 0x234171}, /* East Asian ideograph */ {"\xB6", 0, 0x234172}, /* East Asian ideograph */ {"\xAE", 0, 0x234173}, /* East Asian ideograph */ {"\xB4", 0, 0x234174}, /* East Asian ideograph */ {"\xB1", 0, 0x234177}, /* East Asian ideograph */ {"\xA9", 0, 0x234179}, /* East Asian ideograph */ {"\xB8", 0, 0x23417A}, /* East Asian ideograph */ {"\xB9", 0, 0x234221}, /* East Asian ideograph */ {"\xA4", 0, 0x234222}, /* East Asian ideograph */ {"\xBE", 0, 0x234233}, /* East Asian ideograph */ {"\xBF", 0, 0x234248}, /* East Asian ideograph */ {"\x8C", 0, 0x275763}, /* East Asian ideograph */ {"\x8A", 0, 0x275D38}, /* East Asian ideograph */ {"\xBC", 0, 0x333421}, /* East Asian ideograph */ {"\x86", 0, 0x4B5D36}, /* East Asian ideograph */ {"\x88", 0, 0x4B5D38}, /* East Asian ideograph */ {"\xA1", 0, 0x4B5D42}, /* East Asian ideograph */ {"\x9B", 0, 0x4D4176}, /* East Asian ideograph */ {"\x96", 0, 0x513421}, /* East Asian ideograph */ {"\x9F", 0, 0x696E5C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page278 = { marc8r_31page278_flat, 0 }; /* PAGE 277 */ struct yaz_iconv_trie_flat marc8r_31page277_flat[] = { {"\x87", 0, 0x215D29}, /* East Asian ideograph */ {"\x89", 0, 0x215D2A}, /* East Asian ideograph */ {"\x8B", 0, 0x215D2B}, /* East Asian ideograph */ {"\x83", 0, 0x215D2C}, /* East Asian ideograph */ {"\x92", 0, 0x215D2D}, /* East Asian ideograph */ {"\xA3", 0, 0x215D2E}, /* East Asian ideograph */ {"\x9E", 0, 0x215D2F}, /* East Asian ideograph */ {"\x9C", 0, 0x215D30}, /* East Asian ideograph */ {"\xAB", 0, 0x215D31}, /* East Asian ideograph */ {"\xAC", 0, 0x215D32}, /* East Asian ideograph */ {"\xBA", 0, 0x215D33}, /* East Asian ideograph */ {"\x85", 0, 0x23406D}, /* East Asian ideograph */ {"\x82", 0, 0x23406F}, /* East Asian ideograph */ {"\x8A", 0, 0x234070}, /* East Asian ideograph */ {"\x86", 0, 0x234071}, /* East Asian ideograph */ {"\x8C", 0, 0x234072}, /* East Asian ideograph */ {"\x81", 0, 0x234073}, /* East Asian ideograph */ {"\x91", 0, 0x23407B}, /* East Asian ideograph */ {"\x90", 0, 0x23407D}, /* East Asian ideograph */ {"\x8E", 0, 0x23407E}, /* East Asian ideograph */ {"\x8D", 0, 0x234124}, /* East Asian ideograph */ {"\x93", 0, 0x234125}, /* East Asian ideograph */ {"\x9D", 0, 0x23412B}, /* East Asian ideograph */ {"\x9A", 0, 0x23412C}, /* East Asian ideograph */ {"\xA2", 0, 0x234130}, /* East Asian ideograph */ {"\x9B", 0, 0x234134}, /* East Asian ideograph (variant of EACC 4D4134) */ {"\xA8", 0, 0x234137}, /* East Asian ideograph */ {"\xAA", 0, 0x23413D}, /* East Asian ideograph */ {"\xAF", 0, 0x234141}, /* East Asian ideograph */ {"\xB1", 0, 0x234142}, /* East Asian ideograph */ {"\xAD", 0, 0x234147}, /* East Asian ideograph */ {"\xAE", 0, 0x234148}, /* East Asian ideograph */ {"\xB4", 0, 0x23414B}, /* East Asian ideograph */ {"\xB2", 0, 0x23414C}, /* East Asian ideograph */ {"\xB5", 0, 0x23414D}, /* East Asian ideograph */ {"\xBF", 0, 0x234156}, /* East Asian ideograph */ {"\xBD", 0, 0x234157}, /* East Asian ideograph */ {"\x96", 0, 0x2D5D2F}, /* East Asian ideograph */ {"\xBC", 0, 0x334A28}, /* East Asian ideograph */ {"\xBE", 0, 0x354156}, /* East Asian ideograph */ {"\xBB", 0, 0x395D23}, /* East Asian ideograph */ {"\xB8", 0, 0x4B5D34}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page277 = { marc8r_31page277_flat, 0 }; /* PAGE 276 */ struct yaz_iconv_trie_flat marc8r_31page276_flat[] = { {"\x89", 0, 0x215C78}, /* East Asian ideograph */ {"\x8B", 0, 0x215C79}, /* East Asian ideograph */ {"\x8A", 0, 0x215C7A}, /* East Asian ideograph */ {"\x92", 0, 0x215C7B}, /* East Asian ideograph */ {"\x8D", 0, 0x215C7C}, /* East Asian ideograph */ {"\x8C", 0, 0x215C7D}, /* East Asian ideograph */ {"\x97", 0, 0x215C7E}, /* East Asian ideograph */ {"\xA3", 0, 0x215D21}, /* East Asian ideograph */ {"\xA5", 0, 0x215D22}, /* East Asian ideograph */ {"\xAC", 0, 0x215D23}, /* East Asian ideograph */ {"\xA9", 0, 0x215D24}, /* East Asian ideograph */ {"\xAA", 0, 0x215D25}, /* East Asian ideograph */ {"\xB5", 0, 0x215D26}, /* East Asian ideograph */ {"\xB8", 0, 0x215D27}, /* East Asian ideograph */ {"\xB7", 0, 0x215D28}, /* East Asian ideograph */ {"\x83", 0, 0x23403B}, /* East Asian ideograph */ {"\x86", 0, 0x23403E}, /* East Asian ideograph */ {"\x85", 0, 0x23403F}, /* East Asian ideograph */ {"\x88", 0, 0x234040}, /* East Asian ideograph */ {"\x87", 0, 0x234041}, /* East Asian ideograph */ {"\x90", 0, 0x234042}, /* East Asian ideograph */ {"\x8E", 0, 0x234043}, /* East Asian ideograph */ {"\x99", 0, 0x234048}, /* East Asian ideograph */ {"\x9C", 0, 0x234049}, /* East Asian ideograph */ {"\x96", 0, 0x23404D}, /* East Asian ideograph */ {"\x98", 0, 0x234050}, /* East Asian ideograph */ {"\x9A", 0, 0x234052}, /* East Asian ideograph */ {"\xA1", 0, 0x234053}, /* East Asian ideograph */ {"\xA4", 0, 0x234056}, /* East Asian ideograph */ {"\xAF", 0, 0x234061}, /* East Asian ideograph */ {"\xAE", 0, 0x234062}, /* East Asian ideograph */ {"\xBA", 0, 0x234066}, /* East Asian ideograph */ {"\xB2", 0, 0x234068}, /* East Asian ideograph */ {"\xB9", 0, 0x234069}, /* East Asian ideograph */ {"\xB6", 0, 0x23406A}, /* East Asian ideograph */ {"\xB4", 0, 0x23406B}, /* East Asian ideograph */ {"\xB3", 0, 0x23406C}, /* East Asian ideograph */ {"\x94", 0, 0x275D2A}, /* East Asian ideograph */ {"\x9D", 0, 0x275D2F}, /* East Asian ideograph */ {"\xB1", 0, 0x275D32}, /* East Asian ideograph */ {"\xBF", 0, 0x275D34}, /* East Asian ideograph */ {"\xBE", 0, 0x29415C}, /* East Asian ideograph */ {"\xBD", 0, 0x29415D}, /* East Asian ideograph */ {"\xA7", 0, 0x2D5D23}, /* East Asian ideograph */ {"\x8F", 0, 0x2F4053}, /* East Asian ideograph */ {"\xA2", 0, 0x4B5D2B}, /* East Asian ideograph */ {"\x9E", 0, 0x704C2A}, /* East Asian ideograph */ {"\xB0", 0, 0x707523}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page276 = { marc8r_31page276_flat, 0 }; /* PAGE 275 */ struct yaz_iconv_trie_flat marc8r_31page275_flat[] = { {"\x82", 0, 0x215C6F}, /* East Asian ideograph */ {"\x89", 0, 0x215C70}, /* East Asian ideograph */ {"\x92", 0, 0x215C71}, /* East Asian ideograph */ {"\x99", 0, 0x215C72}, /* East Asian ideograph */ {"\xAD", 0, 0x215C73}, /* East Asian ideograph */ {"\xB0", 0, 0x215C74}, /* East Asian ideograph */ {"\xA7", 0, 0x215C75}, /* East Asian ideograph */ {"\xB1", 0, 0x215C76}, /* East Asian ideograph */ {"\xB9", 0, 0x215C77}, /* East Asian ideograph (variant of EACC 4B5C77) */ {"\x84", 0, 0x233F49}, /* East Asian ideograph */ {"\x86", 0, 0x233F4C}, /* East Asian ideograph */ {"\x80", 0, 0x233F4E}, /* East Asian ideograph */ {"\x87", 0, 0x233F50}, /* East Asian ideograph */ {"\x8F", 0, 0x233F57}, /* East Asian ideograph */ {"\x91", 0, 0x233F58}, /* East Asian ideograph */ {"\x96", 0, 0x233F5A}, /* East Asian ideograph */ {"\x94", 0, 0x233F5C}, /* East Asian ideograph */ {"\x8B", 0, 0x233F60}, /* East Asian ideograph */ {"\xA3", 0, 0x233F62}, /* East Asian ideograph (Version J extension) */ {"\x98", 0, 0x233F63}, /* East Asian ideograph */ {"\x9C", 0, 0x233F64}, /* East Asian ideograph */ {"\xA0", 0, 0x233F66}, /* East Asian ideograph */ {"\xA2", 0, 0x233F67}, /* East Asian ideograph */ {"\x9E", 0, 0x233F6A}, /* East Asian ideograph */ {"\xA4", 0, 0x233F71}, /* East Asian ideograph */ {"\x9A", 0, 0x233F72}, /* East Asian ideograph */ {"\xA5", 0, 0x233F74}, /* East Asian ideograph */ {"\xAF", 0, 0x233F77}, /* East Asian ideograph */ {"\xAB", 0, 0x233F79}, /* East Asian ideograph */ {"\xB2", 0, 0x234021}, /* East Asian ideograph */ {"\xA6", 0, 0x234024}, /* East Asian ideograph */ {"\xB4", 0, 0x23402B}, /* East Asian ideograph */ {"\xB6", 0, 0x23402C}, /* East Asian ideograph */ {"\xBA", 0, 0x234031}, /* East Asian ideograph */ {"\xBB", 0, 0x234032}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page275 = { marc8r_31page275_flat, 0 }; /* PAGE 274 */ struct yaz_iconv_trie_flat marc8r_31page274_flat[] = { {"\x8E", 0, 0x215C67}, /* East Asian ideograph */ {"\x8A", 0, 0x215C68}, /* East Asian ideograph */ {"\xA1", 0, 0x215C6A}, /* East Asian ideograph */ {"\xA8", 0, 0x215C6B}, /* East Asian ideograph */ {"\xAD", 0, 0x215C6C}, /* East Asian ideograph */ {"\xB5", 0, 0x215C6D}, /* East Asian ideograph */ {"\xBD", 0, 0x215C6E}, /* East Asian ideograph */ {"\x89", 0, 0x233E68}, /* East Asian ideograph */ {"\x95", 0, 0x233E6F}, /* East Asian ideograph */ {"\x87", 0, 0x233E75}, /* East Asian ideograph */ {"\x88", 0, 0x233E78}, /* East Asian ideograph */ {"\x83", 0, 0x233E79}, /* East Asian ideograph */ {"\x9D", 0, 0x233F22}, /* East Asian ideograph */ {"\x9F", 0, 0x233F23}, /* East Asian ideograph */ {"\xA2", 0, 0x233F26}, /* East Asian ideograph */ {"\x98", 0, 0x233F27}, /* East Asian ideograph */ {"\x9B", 0, 0x233F28}, /* East Asian ideograph */ {"\x9C", 0, 0x233F2A}, /* East Asian ideograph */ {"\x97", 0, 0x233F2C}, /* East Asian ideograph */ {"\xA4", 0, 0x233F2D}, /* East Asian ideograph */ {"\xAF", 0, 0x233F2E}, /* East Asian ideograph */ {"\xAA", 0, 0x233F2F}, /* East Asian ideograph */ {"\xB0", 0, 0x233F32}, /* East Asian ideograph */ {"\xB4", 0, 0x233F33}, /* East Asian ideograph */ {"\xB2", 0, 0x233F34}, /* East Asian ideograph */ {"\xAB", 0, 0x233F3E}, /* East Asian ideograph */ {"\xB3", 0, 0x233F3F}, /* East Asian ideograph */ {"\xBC", 0, 0x233F46}, /* East Asian ideograph */ {"\xBE", 0, 0x233F47}, /* East Asian ideograph */ {"\xBF", 0, 0x233F4A}, /* East Asian ideograph */ {"\x91", 0, 0x275C73}, /* East Asian ideograph */ {"\x81", 0, 0x27616A}, /* East Asian ideograph */ {"\x8F", 0, 0x293F23}, /* East Asian ideograph */ {"\x93", 0, 0x293F4C}, /* East Asian ideograph */ {"\xA7", 0, 0x293F5A}, /* East Asian ideograph */ {"\xB8", 0, 0x294021}, /* East Asian ideograph */ {"\x90", 0, 0x29402C}, /* East Asian ideograph */ {"\xA6", 0, 0x294040}, /* East Asian ideograph */ {"\x84", 0, 0x335F34}, /* East Asian ideograph */ {"\x85", 0, 0x34782A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page274 = { marc8r_31page274_flat, 0 }; /* PAGE 273 */ struct yaz_iconv_trie_flat marc8r_31page273_flat[] = { {"\x81", 0, 0x215C56}, /* East Asian ideograph */ {"\x84", 0, 0x215C57}, /* East Asian ideograph */ {"\x82", 0, 0x215C58}, /* East Asian ideograph */ {"\x80", 0, 0x215C59}, /* East Asian ideograph */ {"\x87", 0, 0x215C5A}, /* East Asian ideograph */ {"\x8A", 0, 0x215C5B}, /* East Asian ideograph */ {"\x90", 0, 0x215C5C}, /* East Asian ideograph */ {"\x8F", 0, 0x215C5D}, /* East Asian ideograph */ {"\x91", 0, 0x215C5E}, /* East Asian ideograph */ {"\x95", 0, 0x215C5F}, /* East Asian ideograph */ {"\xA3", 0, 0x215C60}, /* East Asian ideograph */ {"\xA2", 0, 0x215C61}, /* East Asian ideograph */ {"\xAA", 0, 0x215C62}, /* East Asian ideograph */ {"\xA6", 0, 0x215C63}, /* East Asian ideograph */ {"\xB5", 0, 0x215C64}, /* East Asian ideograph */ {"\xB1", 0, 0x215C65}, /* East Asian ideograph */ {"\xB8", 0, 0x215C66}, /* East Asian ideograph */ {"\x85", 0, 0x233E2C}, /* East Asian ideograph */ {"\x83", 0, 0x233E34}, /* East Asian ideograph */ {"\x88", 0, 0x233E37}, /* East Asian ideograph */ {"\x8B", 0, 0x233E3A}, /* East Asian ideograph */ {"\x99", 0, 0x233E3F}, /* East Asian ideograph */ {"\x97", 0, 0x233E40}, /* East Asian ideograph */ {"\x9B", 0, 0x233E43}, /* East Asian ideograph */ {"\x9C", 0, 0x233E44}, /* East Asian ideograph */ {"\xA1", 0, 0x233E48}, /* East Asian ideograph */ {"\xA8", 0, 0x233E51}, /* East Asian ideograph */ {"\xA0", 0, 0x233E54}, /* East Asian ideograph */ {"\xAF", 0, 0x233E58}, /* East Asian ideograph */ {"\xB3", 0, 0x233E59}, /* East Asian ideograph */ {"\xB6", 0, 0x233E5B}, /* East Asian ideograph */ {"\xB0", 0, 0x233E5D}, /* East Asian ideograph */ {"\xAD", 0, 0x233E5F}, /* East Asian ideograph */ {"\xB2", 0, 0x233E61}, /* East Asian ideograph */ {"\xBD", 0, 0x233E6A}, /* East Asian ideograph */ {"\xBE", 0, 0x233E72}, /* East Asian ideograph */ {"\xAE", 0, 0x275C6D}, /* East Asian ideograph */ {"\xB9", 0, 0x275C71}, /* East Asian ideograph */ {"\xBB", 0, 0x275C74}, /* East Asian ideograph */ {"\x93", 0, 0x275C75}, /* East Asian ideograph */ {"\xAC", 0, 0x293F5C}, /* East Asian ideograph */ {"\xBA", 0, 0x29402B}, /* East Asian ideograph */ {"\x9D", 0, 0x294031}, /* East Asian ideograph */ {"\x89", 0, 0x2D5C5B}, /* East Asian ideograph */ {"\xB4", 0, 0x2F4A2E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page273 = { marc8r_31page273_flat, 0 }; /* PAGE 272 */ struct yaz_iconv_trie_flat marc8r_31page272_flat[] = { {"\x8B", 0, 0x215C34}, /* East Asian ideograph */ {"\x93", 0, 0x215C36}, /* East Asian ideograph */ {"\x82", 0, 0x215C37}, /* East Asian ideograph */ {"\x90", 0, 0x215C38}, /* East Asian ideograph */ {"\x94", 0, 0x215C39}, /* East Asian ideograph */ {"\x95", 0, 0x215C3A}, /* East Asian ideograph */ {"\x87", 0, 0x215C3C}, /* East Asian ideograph */ {"\x8F", 0, 0x215C3D}, /* East Asian ideograph */ {"\x8E", 0, 0x215C3E}, /* East Asian ideograph */ {"\x8D", 0, 0x215C3F}, /* East Asian ideograph */ {"\x91", 0, 0x215C40}, /* East Asian ideograph */ {"\x81", 0, 0x215C41}, /* East Asian ideograph */ {"\x98", 0, 0x215C43}, /* East Asian ideograph */ {"\xA0", 0, 0x215C44}, /* East Asian ideograph */ {"\x9C", 0, 0x215C45}, /* East Asian ideograph */ {"\xA3", 0, 0x215C46}, /* East Asian ideograph */ {"\xA5", 0, 0x215C47}, /* East Asian ideograph */ {"\x9E", 0, 0x215C48}, /* East Asian ideograph */ {"\xA9", 0, 0x215C49}, /* East Asian ideograph */ {"\xAE", 0, 0x215C4A}, /* East Asian ideograph */ {"\xA8", 0, 0x215C4B}, /* East Asian ideograph */ {"\xAD", 0, 0x215C4C}, /* East Asian ideograph */ {"\xB5", 0, 0x215C4D}, /* East Asian ideograph */ {"\xB4", 0, 0x215C4E}, /* East Asian ideograph */ {"\xB8", 0, 0x215C4F}, /* East Asian ideograph */ {"\xB2", 0, 0x215C50}, /* East Asian ideograph */ {"\xB7", 0, 0x215C51}, /* East Asian ideograph */ {"\xBC", 0, 0x215C52}, /* East Asian ideograph */ {"\xBA", 0, 0x215C53}, /* East Asian ideograph */ {"\xBF", 0, 0x215C54}, /* East Asian ideograph */ {"\xBD", 0, 0x215C55}, /* East Asian ideograph */ {"\x86", 0, 0x233D5B}, /* East Asian ideograph */ {"\x92", 0, 0x233D5D}, /* East Asian ideograph */ {"\x89", 0, 0x233D67}, /* East Asian ideograph */ {"\x84", 0, 0x233D6A}, /* East Asian ideograph */ {"\xA2", 0, 0x233D74}, /* East Asian ideograph */ {"\x9D", 0, 0x233D75}, /* East Asian ideograph */ {"\x9B", 0, 0x233D78}, /* East Asian ideograph */ {"\xAB", 0, 0x233D7B}, /* East Asian ideograph */ {"\xB0", 0, 0x233E21}, /* East Asian ideograph */ {"\xAF", 0, 0x233E25}, /* East Asian ideograph */ {"\xB9", 0, 0x233E26}, /* East Asian ideograph */ {"\xB6", 0, 0x233E28}, /* East Asian ideograph */ {"\xBB", 0, 0x233E2A}, /* East Asian ideograph */ {"\x97", 0, 0x275C53}, /* East Asian ideograph */ {"\x8A", 0, 0x33477B}, /* East Asian ideograph */ {"\xA1", 0, 0x39483B}, /* East Asian ideograph */ {"\x99", 0, 0x4B5C47}, /* East Asian ideograph */ {"\x85", 0, 0x4B5C50}, /* East Asian ideograph */ {"\x96", 0, 0x696E28}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page272 = { marc8r_31page272_flat, 0 }; /* PAGE 271 */ struct yaz_iconv_trie_dir marc8r_31page271_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x215B77} /* East Asian ideograph */, {0, 0, 0x215B74} /* East Asian ideograph */, {0, 0, 0x275C49} /* East Asian ideograph */, {0, 0, 0x215B7A} /* East Asian ideograph */, {0, 0, 0x233D3F} /* East Asian ideograph */, {0, 0, 0x215B7C} /* East Asian ideograph */, {0, 0, 0x215B75} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x233D40} /* East Asian ideograph */, {0, 0, 0x275C4F} /* East Asian ideograph */, {0, 0, 0x275C45} /* East Asian ideograph */, {0, 0, 0x233D45} /* East Asian ideograph */, {0, 0, 0x233D48} /* East Asian ideograph */, {0, 0, 0x215C26} /* East Asian ideograph */, {0, 0, 0x2F3D5D} /* East Asian ideograph */, {0, 0, 0x215C2A} /* East Asian ideograph */, {0, 0, 0x215C24} /* East Asian ideograph */, {0, 0, 0x233D44} /* East Asian ideograph */, {0, 0, 0x275C48} /* East Asian ideograph */, {0, 0, 0x2D5C48} /* East Asian ideograph */, {0, 0, 0x215C2E} /* East Asian ideograph */, {0, 0, 0x2D3D67} /* East Asian ideograph */, {0, 0, 0x215C2C} /* East Asian ideograph */, {0, 0, 0x215C22} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215B7D} /* East Asian ideograph */, {0, 0, 0x215C28} /* East Asian ideograph */, {0, 0, 0x215C2D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215C23} /* East Asian ideograph */, {0, 0, 0x215C27} /* East Asian ideograph */, {0, 0, 0x215C21} /* East Asian ideograph */, {0, 0, 0x215C29} /* East Asian ideograph */, {0, 0, 0x233D49} /* East Asian ideograph */, {0, 0, 0x215C2B} /* East Asian ideograph */, {0, 0, 0x215B7E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x275C5C} /* East Asian ideograph */, {0, 0, 0x696D7A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x33392F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x233D4E} /* East Asian ideograph */, {0, 0, 0x233D4A} /* East Asian ideograph */, {0, 0, 0x215C2F} /* East Asian ideograph */, {0, 0, 0x233D58} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215C31} /* East Asian ideograph */, {0, 0, 0x215C33} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x233D57} /* East Asian ideograph */, {0, 0, 0x215C30} /* East Asian ideograph */, {0, 0, 0x233D59} /* East Asian ideograph */, {0, 0, 0x233D56} /* East Asian ideograph */, {0, 0, 0x215C32} /* East Asian ideograph (variant of EACC 4B5C32) */, {0, 0, 0x4B5C39} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275C5D} /* East Asian ideograph */, {0, 0, 0x215C3B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215C42} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page271 = { 0, marc8r_31page271_dir }; /* PAGE 270 */ struct yaz_iconv_trie_flat marc8r_31page270_flat[] = { {"\x90", 0, 0x213D2D}, /* East Asian ideograph */ {"\x8D", 0, 0x21632B}, /* East Asian ideograph */ {"\x94", 0, 0x21632C}, /* East Asian ideograph */ {"\x9C", 0, 0x21632D}, /* East Asian ideograph */ {"\x8E", 0, 0x23605B}, /* East Asian ideograph */ {"\x93", 0, 0x236061}, /* East Asian ideograph */ {"\x95", 0, 0x236062}, /* East Asian ideograph */ {"\xA0", 0, 0x23606B}, /* East Asian ideograph */ {"\xA5", 0, 0x236071}, /* East Asian ideograph */ {"\xA4", 0, 0x236072}, /* East Asian ideograph */ {"\x83", 0, 0x276322}, /* East Asian ideograph */ {"\x84", 0, 0x276324}, /* East Asian ideograph */ {"\x88", 0, 0x276325}, /* East Asian ideograph */ {"\x87", 0, 0x276326}, /* East Asian ideograph */ {"\x89", 0, 0x276327}, /* East Asian ideograph */ {"\x8A", 0, 0x276328}, /* East Asian ideograph */ {"\x8C", 0, 0x276329}, /* East Asian ideograph */ {"\x8B", 0, 0x27632A}, /* East Asian ideograph */ {"\x99", 0, 0x27632B}, /* East Asian ideograph */ {"\x9A", 0, 0x27632C}, /* East Asian ideograph */ {"\x9F", 0, 0x27632D}, /* East Asian ideograph */ {"\x80", 0, 0x295F7C}, /* East Asian ideograph */ {"\x86", 0, 0x296028}, /* East Asian ideograph */ {"\x85", 0, 0x29602B}, /* East Asian ideograph */ {"\x9B", 0, 0x296062}, /* East Asian ideograph */ {"\x9D", 0, 0x2D4F29}, /* East Asian ideograph */ {"\xA2", 0, 0x393577}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page270 = { marc8r_31page270_flat, 0 }; /* PAGE 269 */ struct yaz_iconv_trie_flat marc8r_31page269_flat[] = { {"\x86", 0, 0x215B66}, /* East Asian ideograph */ {"\x85", 0, 0x215B67}, /* East Asian ideograph */ {"\x84", 0, 0x215B68}, /* East Asian ideograph */ {"\x8E", 0, 0x215B6A}, /* East Asian ideograph */ {"\x91", 0, 0x215B6B}, /* East Asian ideograph */ {"\x94", 0, 0x215B6C}, /* East Asian ideograph */ {"\xB0", 0, 0x215B6D}, /* East Asian ideograph (variant of EACC 275B6D) */ {"\xA6", 0, 0x215B6E}, /* East Asian ideograph */ {"\xA2", 0, 0x215B6F}, /* East Asian ideograph */ {"\xAA", 0, 0x215B70}, /* East Asian ideograph */ {"\xA5", 0, 0x215B71}, /* East Asian ideograph */ {"\xAB", 0, 0x215B73}, /* East Asian ideograph */ {"\xB7", 0, 0x215B76}, /* East Asian ideograph */ {"\xBD", 0, 0x215B7B}, /* East Asian ideograph */ {"\x92", 0, 0x233C75}, /* East Asian ideograph */ {"\x8B", 0, 0x233C77}, /* East Asian ideograph */ {"\x8A", 0, 0x233C7A}, /* East Asian ideograph */ {"\x93", 0, 0x233C7B}, /* East Asian ideograph */ {"\x8D", 0, 0x233C7D}, /* East Asian ideograph */ {"\x9A", 0, 0x233D21}, /* East Asian ideograph */ {"\x95", 0, 0x233D22}, /* East Asian ideograph */ {"\xA4", 0, 0x233D2F}, /* East Asian ideograph */ {"\xAE", 0, 0x233D30}, /* East Asian ideograph */ {"\xB9", 0, 0x233D35}, /* East Asian ideograph */ {"\xBB", 0, 0x233D3C}, /* East Asian ideograph */ {"\xAD", 0, 0x274C3C}, /* East Asian ideograph */ {"\x99", 0, 0x275B7D}, /* East Asian ideograph */ {"\x9E", 0, 0x275B7E}, /* East Asian ideograph */ {"\x9B", 0, 0x275C33}, /* East Asian ideograph */ {"\x90", 0, 0x275C34}, /* East Asian ideograph */ {"\x9D", 0, 0x275C3A}, /* East Asian ideograph */ {"\x82", 0, 0x275C3C}, /* East Asian ideograph */ {"\x87", 0, 0x275C3E}, /* East Asian ideograph */ {"\x9C", 0, 0x275C44}, /* East Asian ideograph */ {"\x9F", 0, 0x275C50}, /* East Asian ideograph */ {"\x81", 0, 0x275C51}, /* East Asian ideograph */ {"\x88", 0, 0x275C56}, /* East Asian ideograph */ {"\x98", 0, 0x275C57}, /* East Asian ideograph */ {"\xA9", 0, 0x275C5A}, /* East Asian ideograph (variant of EACC 2D5C5A) */ {"\xB8", 0, 0x293D4E}, /* East Asian ideograph */ {"\xAF", 0, 0x2D5B7A}, /* East Asian ideograph */ {"\xA8", 0, 0x2D5C2F}, /* East Asian ideograph */ {"\xBA", 0, 0x33303A}, /* East Asian ideograph */ {"\xB4", 0, 0x333768}, /* East Asian ideograph */ {"\xB3", 0, 0x513D67}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page269 = { marc8r_31page269_flat, 0 }; /* PAGE 268 */ struct yaz_iconv_trie_flat marc8r_31page268_flat[] = { {"\x84", 0, 0x215B4F}, /* East Asian ideograph */ {"\x85", 0, 0x215B51}, /* East Asian ideograph */ {"\x82", 0, 0x215B52}, /* East Asian ideograph (variant of EACC 4B5B52) */ {"\x8D", 0, 0x215B54}, /* East Asian ideograph */ {"\x89", 0, 0x215B55}, /* East Asian ideograph */ {"\x94", 0, 0x215B56}, /* East Asian ideograph */ {"\x8E", 0, 0x215B57}, /* East Asian ideograph */ {"\x9F", 0, 0x215B58}, /* East Asian ideograph */ {"\xA1", 0, 0x215B59}, /* East Asian ideograph */ {"\x80", 0, 0x233C2D}, /* East Asian ideograph */ {"\x86", 0, 0x233C30}, /* East Asian ideograph */ {"\x8A", 0, 0x233C31}, /* East Asian ideograph */ {"\x87", 0, 0x233C33}, /* East Asian ideograph */ {"\x92", 0, 0x233C3D}, /* East Asian ideograph */ {"\x96", 0, 0x233C48}, /* East Asian ideograph */ {"\x97", 0, 0x233C49}, /* East Asian ideograph */ {"\x95", 0, 0x233C4B}, /* East Asian ideograph */ {"\x98", 0, 0x233C4C}, /* East Asian ideograph */ {"\x9C", 0, 0x233C4D}, /* East Asian ideograph */ {"\x9E", 0, 0x233C4E}, /* East Asian ideograph */ {"\x9D", 0, 0x233C53}, /* East Asian ideograph */ {"\xA2", 0, 0x233C57}, /* East Asian ideograph */ {"\xA3", 0, 0x233C59}, /* East Asian ideograph */ {"\xA4", 0, 0x233C5A}, /* East Asian ideograph */ {"\xA6", 0, 0x275B32}, /* East Asian ideograph */ {"\xA7", 0, 0x275B33}, /* East Asian ideograph */ {"\xA8", 0, 0x275B35}, /* East Asian ideograph */ {"\xA9", 0, 0x275B36}, /* East Asian ideograph */ {"\xAB", 0, 0x275B37}, /* East Asian ideograph */ {"\xAF", 0, 0x275B38}, /* East Asian ideograph */ {"\xAD", 0, 0x275B39}, /* East Asian ideograph */ {"\xB2", 0, 0x275B3A}, /* East Asian ideograph */ {"\xB4", 0, 0x275B3B}, /* East Asian ideograph */ {"\xB6", 0, 0x275B3C}, /* East Asian ideograph */ {"\xBC", 0, 0x275B3E}, /* East Asian ideograph */ {"\xBD", 0, 0x275B3F}, /* East Asian ideograph */ {"\xBE", 0, 0x275B40}, /* East Asian ideograph */ {"\xBB", 0, 0x275B43}, /* East Asian ideograph */ {"\xAE", 0, 0x275B4A}, /* East Asian ideograph */ {"\xAC", 0, 0x275B55}, /* East Asian ideograph */ {"\xBF", 0, 0x275B57}, /* East Asian ideograph */ {"\xB0", 0, 0x275B58}, /* East Asian ideograph */ {"\xB1", 0, 0x293B3E}, /* East Asian ideograph */ {"\xBA", 0, 0x293B3F}, /* East Asian ideograph */ {"\xB5", 0, 0x293B42}, /* East Asian ideograph */ {"\xB7", 0, 0x293B47}, /* East Asian ideograph */ {"\xB8", 0, 0x293B4F}, /* East Asian ideograph */ {"\xB9", 0, 0x293C57}, /* East Asian ideograph */ {"\xB3", 0, 0x293C5A}, /* East Asian ideograph */ {"\x8C", 0, 0x696D5A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page268 = { marc8r_31page268_flat, 0 }; /* PAGE 267 */ struct yaz_iconv_trie_flat marc8r_31page267_flat[] = { {"\x83", 0, 0x215B3D}, /* East Asian ideograph */ {"\x89", 0, 0x215B3F}, /* East Asian ideograph */ {"\x8A", 0, 0x215B40}, /* East Asian ideograph */ {"\x94", 0, 0x215B41}, /* East Asian ideograph */ {"\x92", 0, 0x215B42}, /* East Asian ideograph */ {"\x95", 0, 0x215B43}, /* East Asian ideograph */ {"\x93", 0, 0x215B44}, /* East Asian ideograph */ {"\xA6", 0, 0x215B45}, /* East Asian ideograph */ {"\x9B", 0, 0x215B46}, /* East Asian ideograph */ {"\x9F", 0, 0x215B47}, /* East Asian ideograph */ {"\x9D", 0, 0x215B48}, /* East Asian ideograph */ {"\xA9", 0, 0x215B49}, /* East Asian ideograph */ {"\xAA", 0, 0x215B4A}, /* East Asian ideograph */ {"\x9C", 0, 0x215B4B}, /* East Asian ideograph */ {"\xBB", 0, 0x215B4C}, /* East Asian ideograph */ {"\xAF", 0, 0x215B4D}, /* East Asian ideograph */ {"\xB8", 0, 0x215B4E}, /* East Asian ideograph */ {"\xBE", 0, 0x215B50}, /* East Asian ideograph */ {"\xBF", 0, 0x215B53}, /* East Asian ideograph */ {"\x80", 0, 0x233B56}, /* East Asian ideograph */ {"\x85", 0, 0x233B59}, /* East Asian ideograph */ {"\x88", 0, 0x233B5A}, /* East Asian ideograph */ {"\x87", 0, 0x233B5B}, /* East Asian ideograph */ {"\xA7", 0, 0x233B63}, /* East Asian ideograph */ {"\xAC", 0, 0x233B64}, /* East Asian ideograph */ {"\x9E", 0, 0x233B6B}, /* East Asian ideograph */ {"\xA5", 0, 0x233B6D}, /* East Asian ideograph */ {"\xA0", 0, 0x233B6E}, /* East Asian ideograph */ {"\x97", 0, 0x233B75}, /* East Asian ideograph */ {"\xB6", 0, 0x233B78}, /* East Asian ideograph */ {"\xAE", 0, 0x233B79}, /* East Asian ideograph */ {"\xB3", 0, 0x233B7A}, /* East Asian ideograph */ {"\xAD", 0, 0x233B7D}, /* East Asian ideograph */ {"\xB9", 0, 0x233C26}, /* East Asian ideograph */ {"\xB4", 0, 0x233C27}, /* East Asian ideograph */ {"\x99", 0, 0x2D5B42}, /* East Asian ideograph */ {"\xBC", 0, 0x2F3C2D}, /* East Asian ideograph */ {"\x8C", 0, 0x4B5B46}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page267 = { marc8r_31page267_flat, 0 }; /* PAGE 266 */ struct yaz_iconv_trie_flat marc8r_31page266_flat[] = { {"\x80", 0, 0x215B31}, /* East Asian ideograph */ {"\x8A", 0, 0x215B32}, /* East Asian ideograph */ {"\x8B", 0, 0x215B33}, /* East Asian ideograph */ {"\x8D", 0, 0x215B34}, /* East Asian ideograph */ {"\x8C", 0, 0x215B35}, /* East Asian ideograph */ {"\x92", 0, 0x215B36}, /* East Asian ideograph */ {"\x94", 0, 0x215B37}, /* East Asian ideograph */ {"\x9F", 0, 0x215B38}, /* East Asian ideograph */ {"\x9B", 0, 0x215B39}, /* East Asian ideograph */ {"\xBB", 0, 0x215B3A}, /* East Asian ideograph */ {"\xB8", 0, 0x215B3B}, /* East Asian ideograph */ {"\xBC", 0, 0x215B3C}, /* East Asian ideograph */ {"\xBE", 0, 0x215B3E}, /* East Asian ideograph */ {"\x89", 0, 0x233B2E}, /* East Asian ideograph */ {"\x8F", 0, 0x233B2F}, /* East Asian ideograph */ {"\x8E", 0, 0x233B31}, /* East Asian ideograph */ {"\x95", 0, 0x233B33}, /* East Asian ideograph */ {"\xBA", 0, 0x233B3F}, /* East Asian ideograph */ {"\xB9", 0, 0x233B42}, /* East Asian ideograph */ {"\xA8", 0, 0x233B4B}, /* East Asian ideograph */ {"\xAB", 0, 0x233B4F}, /* East Asian ideograph */ {"\xBF", 0, 0x233B51}, /* East Asian ideograph */ {"\xBD", 0, 0x2D5B43}, /* East Asian ideograph */ {"\x86", 0, 0x2D615A}, /* East Asian ideograph */ {"\xA2", 0, 0x4B5B55}, /* East Asian ideograph */ {"\xA3", 0, 0x4B5B58}, /* East Asian ideograph */ {"\x85", 0, 0x696D40}, /* East Asian ideograph */ {"\x88", 0, 0x696D41}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page266 = { marc8r_31page266_flat, 0 }; /* PAGE 265 */ struct yaz_iconv_trie_flat marc8r_31page265_flat[] = { {"\x82", 0, 0x215B23}, /* East Asian ideograph */ {"\x81", 0, 0x215B24}, /* East Asian ideograph */ {"\x87", 0, 0x215B25}, /* East Asian ideograph */ {"\x89", 0, 0x215B26}, /* East Asian ideograph */ {"\x85", 0, 0x215B27}, /* East Asian ideograph */ {"\x8A", 0, 0x215B28}, /* East Asian ideograph */ {"\x8D", 0, 0x215B29}, /* East Asian ideograph (variant of EACC 4B5B29) */ {"\x91", 0, 0x215B2A}, /* East Asian ideograph */ {"\xA1", 0, 0x215B2B}, /* East Asian ideograph */ {"\xAA", 0, 0x215B2C}, /* East Asian ideograph */ {"\xAB", 0, 0x215B2D}, /* East Asian ideograph */ {"\xAC", 0, 0x215B2E}, /* East Asian ideograph */ {"\xB2", 0, 0x215B2F}, /* East Asian ideograph */ {"\xBA", 0, 0x215B30}, /* East Asian ideograph */ {"\x95", 0, 0x233A46}, /* East Asian ideograph */ {"\x83", 0, 0x233A52}, /* East Asian ideograph */ {"\x84", 0, 0x233A53}, /* East Asian ideograph */ {"\x8B", 0, 0x233A57}, /* East Asian ideograph */ {"\x94", 0, 0x233A5D}, /* East Asian ideograph */ {"\x9A", 0, 0x233A5E}, /* East Asian ideograph */ {"\x92", 0, 0x233A5F}, /* East Asian ideograph */ {"\x93", 0, 0x233A60}, /* East Asian ideograph */ {"\x90", 0, 0x233A62}, /* East Asian ideograph */ {"\x98", 0, 0x233A63}, /* East Asian ideograph */ {"\x9E", 0, 0x233A64}, /* East Asian ideograph */ {"\xA5", 0, 0x233A6B}, /* East Asian ideograph */ {"\xA7", 0, 0x233A6F}, /* East Asian ideograph */ {"\xA9", 0, 0x233A71}, /* East Asian ideograph */ {"\x99", 0, 0x233A72}, /* East Asian ideograph */ {"\xB3", 0, 0x233A78}, /* East Asian ideograph */ {"\xBC", 0, 0x233A7A}, /* East Asian ideograph */ {"\xB6", 0, 0x233A7D}, /* East Asian ideograph */ {"\x8F", 0, 0x275B2C}, /* East Asian ideograph */ {"\xAF", 0, 0x275B31}, /* East Asian ideograph */ {"\x9C", 0, 0x293A70}, /* East Asian ideograph */ {"\xAD", 0, 0x2D526C}, /* East Asian ideograph */ {"\xB1", 0, 0x2D5B2F}, /* East Asian ideograph */ {"\xB0", 0, 0x33615A}, /* East Asian ideograph */ {"\xBE", 0, 0x696D3F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page265 = { marc8r_31page265_flat, 0 }; /* PAGE 264 */ struct yaz_iconv_trie_flat marc8r_31page264_flat[] = { {"\x84", 0, 0x215A6E}, /* East Asian ideograph */ {"\x82", 0, 0x215A70}, /* East Asian ideograph */ {"\x89", 0, 0x215A74}, /* East Asian ideograph */ {"\x8B", 0, 0x215A75}, /* East Asian ideograph */ {"\x88", 0, 0x215A76}, /* East Asian ideograph */ {"\x8A", 0, 0x215A77}, /* East Asian ideograph */ {"\xA3", 0, 0x215A78}, /* East Asian ideograph */ {"\x99", 0, 0x215A79}, /* East Asian ideograph */ {"\xA6", 0, 0x215A7A}, /* East Asian ideograph */ {"\xA4", 0, 0x215A7B}, /* East Asian ideograph */ {"\xB2", 0, 0x215A7C}, /* East Asian ideograph */ {"\xAC", 0, 0x215A7D}, /* East Asian ideograph */ {"\xBA", 0, 0x215A7E}, /* East Asian ideograph */ {"\xB6", 0, 0x215B21}, /* East Asian ideograph */ {"\xBC", 0, 0x215B22}, /* East Asian ideograph */ {"\x81", 0, 0x23396F}, /* East Asian ideograph */ {"\x80", 0, 0x233977}, /* East Asian ideograph */ {"\x87", 0, 0x233A24}, /* East Asian ideograph */ {"\x86", 0, 0x233A26}, /* East Asian ideograph */ {"\x8C", 0, 0x233A2E}, /* East Asian ideograph */ {"\x90", 0, 0x233A30}, /* East Asian ideograph */ {"\x8F", 0, 0x233A32}, /* East Asian ideograph */ {"\x9C", 0, 0x233A34}, /* East Asian ideograph */ {"\xA2", 0, 0x233A35}, /* East Asian ideograph */ {"\xA0", 0, 0x233A36}, /* East Asian ideograph */ {"\x94", 0, 0x233A3A}, /* East Asian ideograph */ {"\xA7", 0, 0x233A3B}, /* East Asian ideograph */ {"\x9A", 0, 0x233A3E}, /* East Asian ideograph */ {"\x9E", 0, 0x233A3F}, /* East Asian ideograph */ {"\x95", 0, 0x233A40}, /* East Asian ideograph */ {"\xA1", 0, 0x233A41}, /* East Asian ideograph */ {"\x9D", 0, 0x233A43}, /* East Asian ideograph */ {"\xB5", 0, 0x233A44}, /* East Asian ideograph */ {"\xB4", 0, 0x233A45}, /* East Asian ideograph */ {"\xAD", 0, 0x233A48}, /* East Asian ideograph */ {"\xA9", 0, 0x233A4B}, /* East Asian ideograph */ {"\x92", 0, 0x275A78}, /* East Asian ideograph */ {"\x91", 0, 0x275B2B}, /* East Asian ideograph */ {"\xB0", 0, 0x293A46}, /* East Asian ideograph */ {"\xBF", 0, 0x293A6B}, /* East Asian ideograph */ {"\x9F", 0, 0x2D5A5F}, /* East Asian ideograph */ {"\xBB", 0, 0x2D5A7E}, /* East Asian ideograph */ {"\xAE", 0, 0x2F3A5E}, /* East Asian ideograph */ {"\xAF", 0, 0x334C37}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page264 = { marc8r_31page264_flat, 0 }; /* PAGE 263 */ struct yaz_iconv_trie_flat marc8r_31page263_flat[] = { {"\xAB", 0, 0x215A67}, /* East Asian ideograph */ {"\x90", 0, 0x215A68}, /* East Asian ideograph */ {"\xA2", 0, 0x215A69}, /* East Asian ideograph */ {"\x9D", 0, 0x215A6A}, /* East Asian ideograph */ {"\x8F", 0, 0x215A6B}, /* East Asian ideograph */ {"\xA9", 0, 0x215A6C}, /* East Asian ideograph */ {"\x9F", 0, 0x215A6D}, /* East Asian ideograph */ {"\xB1", 0, 0x215A6F}, /* East Asian ideograph */ {"\xB4", 0, 0x215A71}, /* East Asian ideograph */ {"\xB9", 0, 0x215A72}, /* East Asian ideograph */ {"\xB5", 0, 0x215A73}, /* East Asian ideograph */ {"\x89", 0, 0x23393F}, /* East Asian ideograph */ {"\x85", 0, 0x233946}, /* East Asian ideograph */ {"\x81", 0, 0x233949}, /* East Asian ideograph */ {"\x84", 0, 0x23394E}, /* East Asian ideograph */ {"\x86", 0, 0x233950}, /* East Asian ideograph */ {"\xAA", 0, 0x233952}, /* East Asian ideograph */ {"\xA3", 0, 0x233954}, /* East Asian ideograph */ {"\xAE", 0, 0x233957}, /* East Asian ideograph */ {"\xA1", 0, 0x233958}, /* East Asian ideograph */ {"\x9E", 0, 0x23395C}, /* East Asian ideograph */ {"\x96", 0, 0x233964}, /* East Asian ideograph */ {"\xA6", 0, 0x233966}, /* East Asian ideograph */ {"\xA7", 0, 0x233967}, /* East Asian ideograph */ {"\x94", 0, 0x233968}, /* East Asian ideograph */ {"\x98", 0, 0x233969}, /* East Asian ideograph */ {"\xB6", 0, 0x233979}, /* East Asian ideograph */ {"\xBD", 0, 0x23397E}, /* East Asian ideograph */ {"\xB0", 0, 0x233A21}, /* East Asian ideograph */ {"\x8A", 0, 0x275A71}, /* East Asian ideograph */ {"\x8C", 0, 0x275B28}, /* East Asian ideograph */ {"\xAF", 0, 0x275B2A}, /* East Asian ideograph */ {"\xAC", 0, 0x293A60}, /* East Asian ideograph */ {"\x88", 0, 0x334C3E}, /* East Asian ideograph */ {"\xA8", 0, 0x335A7B}, /* East Asian ideograph */ {"\xBA", 0, 0x70755D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page263 = { marc8r_31page263_flat, 0 }; /* PAGE 262 */ struct yaz_iconv_trie_flat marc8r_31page262_flat[] = { {"\x8E", 0, 0x215A57}, /* East Asian ideograph */ {"\x9D", 0, 0x215A58}, /* East Asian ideograph */ {"\x9B", 0, 0x215A59}, /* East Asian ideograph */ {"\x8B", 0, 0x215A5A}, /* East Asian ideograph */ {"\x9A", 0, 0x215A5B}, /* East Asian ideograph */ {"\x86", 0, 0x215A5C}, /* East Asian ideograph */ {"\x91", 0, 0x215A5D}, /* East Asian ideograph */ {"\x8C", 0, 0x215A5E}, /* East Asian ideograph */ {"\xA1", 0, 0x215A5F}, /* East Asian ideograph */ {"\x9F", 0, 0x215A60}, /* East Asian ideograph */ {"\xA8", 0, 0x215A61}, /* East Asian ideograph */ {"\xB3", 0, 0x215A62}, /* East Asian ideograph */ {"\xBA", 0, 0x215A63}, /* East Asian ideograph */ {"\xAA", 0, 0x215A64}, /* East Asian ideograph */ {"\xAF", 0, 0x215A65}, /* East Asian ideograph */ {"\xBC", 0, 0x215A66}, /* East Asian ideograph */ {"\x82", 0, 0x233871}, /* East Asian ideograph */ {"\x81", 0, 0x233872}, /* East Asian ideograph */ {"\x8F", 0, 0x233921}, /* East Asian ideograph */ {"\x96", 0, 0x233922}, /* East Asian ideograph */ {"\x90", 0, 0x233927}, /* East Asian ideograph */ {"\x85", 0, 0x23392B}, /* East Asian ideograph */ {"\xA4", 0, 0x23392F}, /* East Asian ideograph */ {"\xAC", 0, 0x233934}, /* East Asian ideograph */ {"\xAB", 0, 0x233935}, /* East Asian ideograph */ {"\xB4", 0, 0x233936}, /* East Asian ideograph */ {"\xA9", 0, 0x233938}, /* East Asian ideograph */ {"\xA6", 0, 0x23393A}, /* East Asian ideograph */ {"\xA3", 0, 0x23393B}, /* East Asian ideograph */ {"\xA7", 0, 0x23393D}, /* East Asian ideograph */ {"\xB2", 0, 0x23393E}, /* East Asian ideograph */ {"\xBD", 0, 0x233941}, /* East Asian ideograph */ {"\xBF", 0, 0x233944}, /* East Asian ideograph */ {"\xB5", 0, 0x275A68}, /* East Asian ideograph */ {"\xB7", 0, 0x275A7E}, /* East Asian ideograph */ {"\x83", 0, 0x275B29}, /* East Asian ideograph */ {"\x84", 0, 0x293A2E}, /* East Asian ideograph */ {"\xB8", 0, 0x293A40}, /* East Asian ideograph */ {"\xBB", 0, 0x293A57}, /* East Asian ideograph */ {"\xB9", 0, 0x293A5E}, /* East Asian ideograph */ {"\x9E", 0, 0x293A5F}, /* East Asian ideograph */ {"\xA5", 0, 0x2D5A63}, /* East Asian ideograph */ {"\x97", 0, 0x2F386F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page262 = { marc8r_31page262_flat, 0 }; /* PAGE 261 */ struct yaz_iconv_trie_flat marc8r_31page261_flat[] = { {"\x85", 0, 0x215A4C}, /* East Asian ideograph */ {"\x8A", 0, 0x215A4D}, /* East Asian ideograph */ {"\x81", 0, 0x215A4E}, /* East Asian ideograph */ {"\x99", 0, 0x215A4F}, /* East Asian ideograph */ {"\x95", 0, 0x215A50}, /* East Asian ideograph */ {"\xA3", 0, 0x215A51}, /* East Asian ideograph */ {"\x9F", 0, 0x215A52}, /* East Asian ideograph */ {"\xA8", 0, 0x215A53}, /* East Asian ideograph */ {"\xB3", 0, 0x215A54}, /* East Asian ideograph */ {"\xB4", 0, 0x215A55}, /* East Asian ideograph */ {"\xBE", 0, 0x215A56}, /* East Asian ideograph */ {"\x84", 0, 0x233761}, /* East Asian ideograph */ {"\x94", 0, 0x233771}, /* East Asian ideograph */ {"\x8D", 0, 0x233775}, /* East Asian ideograph */ {"\x96", 0, 0x233822}, /* East Asian ideograph */ {"\xA1", 0, 0x23382F}, /* East Asian ideograph */ {"\xA6", 0, 0x233833}, /* East Asian ideograph */ {"\xAB", 0, 0x233852}, /* East Asian ideograph */ {"\xAF", 0, 0x233859}, /* East Asian ideograph */ {"\xB0", 0, 0x23385A}, /* East Asian ideograph */ {"\xB2", 0, 0x233866}, /* East Asian ideograph */ {"\xBC", 0, 0x23386E}, /* East Asian ideograph */ {"\xBA", 0, 0x23386F}, /* East Asian ideograph */ {"\xB9", 0, 0x233870}, /* East Asian ideograph */ {"\xBF", 0, 0x233873}, /* East Asian ideograph */ {"\x8B", 0, 0x275A53}, /* East Asian ideograph */ {"\xB8", 0, 0x275B26}, /* East Asian ideograph */ {"\xB1", 0, 0x293866}, /* East Asian ideograph */ {"\x82", 0, 0x2D5A4E}, /* East Asian ideograph */ {"\x91", 0, 0x2F3833}, /* East Asian ideograph */ {"\xB5", 0, 0x3B3922}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page261 = { marc8r_31page261_flat, 0 }; /* PAGE 260 */ struct yaz_iconv_trie_flat marc8r_31page260_flat[] = { {"\xA4", 0, 0x215A43}, /* East Asian ideograph */ {"\xA7", 0, 0x215A44}, /* East Asian ideograph */ {"\xA6", 0, 0x215A45}, /* East Asian ideograph */ {"\xAB", 0, 0x215A46}, /* East Asian ideograph */ {"\xAD", 0, 0x215A47}, /* East Asian ideograph */ {"\xB0", 0, 0x215A48}, /* East Asian ideograph */ {"\xB4", 0, 0x215A49}, /* East Asian ideograph */ {"\xB3", 0, 0x215A4A}, /* East Asian ideograph */ {"\xB7", 0, 0x215A4B}, /* East Asian ideograph */ {"\xAC", 0, 0x233748}, /* East Asian ideograph */ {"\xB8", 0, 0x233752}, /* East Asian ideograph */ {"\xBA", 0, 0x23375C}, /* East Asian ideograph */ {"\x85", 0, 0x275A21}, /* East Asian ideograph */ {"\x84", 0, 0x275A22}, /* East Asian ideograph */ {"\x80", 0, 0x275A26}, /* East Asian ideograph */ {"\x81", 0, 0x275A27}, /* East Asian ideograph */ {"\x82", 0, 0x275A28}, /* East Asian ideograph */ {"\x88", 0, 0x275A2A}, /* East Asian ideograph */ {"\x8A", 0, 0x275A2B}, /* East Asian ideograph */ {"\x94", 0, 0x275A2C}, /* East Asian ideograph */ {"\x8B", 0, 0x275A2D}, /* East Asian ideograph */ {"\x8F", 0, 0x275A32}, /* East Asian ideograph */ {"\x90", 0, 0x275A33}, /* East Asian ideograph */ {"\x8C", 0, 0x275A35}, /* East Asian ideograph */ {"\x96", 0, 0x275A36}, /* East Asian ideograph */ {"\x9B", 0, 0x275A37}, /* East Asian ideograph */ {"\x9A", 0, 0x275A38}, /* East Asian ideograph */ {"\x98", 0, 0x275A39}, /* East Asian ideograph */ {"\xA0", 0, 0x275A3B}, /* East Asian ideograph */ {"\x9D", 0, 0x275A3C}, /* East Asian ideograph */ {"\x9E", 0, 0x275A3D}, /* East Asian ideograph */ {"\xA2", 0, 0x275A3E}, /* East Asian ideograph */ {"\xA1", 0, 0x275A3F}, /* East Asian ideograph */ {"\x83", 0, 0x275A40}, /* East Asian ideograph */ {"\x8E", 0, 0x275A41}, /* East Asian ideograph */ {"\xA3", 0, 0x275A42}, /* East Asian ideograph */ {"\xB5", 0, 0x275A4F}, /* East Asian ideograph */ {"\xB6", 0, 0x275A50}, /* East Asian ideograph */ {"\x87", 0, 0x29365F}, /* East Asian ideograph */ {"\x93", 0, 0x29366A}, /* East Asian ideograph */ {"\x95", 0, 0x29366B}, /* East Asian ideograph */ {"\x89", 0, 0x293670}, /* East Asian ideograph */ {"\x99", 0, 0x29367E}, /* East Asian ideograph */ {"\x9C", 0, 0x293726}, /* East Asian ideograph */ {"\x86", 0, 0x29373A}, /* East Asian ideograph */ {"\xB1", 0, 0x2D5A48}, /* East Asian ideograph */ {"\x8D", 0, 0x47366F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page260 = { marc8r_31page260_flat, 0 }; /* PAGE 259 */ struct yaz_iconv_trie_dir marc8r_31page259_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x233725} /* East Asian ideograph */, {0, 0, 0x215A39} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x23372B} /* East Asian ideograph */, {0, 0, 0x215A3B} /* East Asian ideograph (variant of EACC 4B5A3B) */, {0, 0, 0x23372D} /* East Asian ideograph */, {0, 0, 0x215A3D} /* East Asian ideograph */, {0, 0, 0x215A3C} /* East Asian ideograph */, {0, 0, 0x233732} /* East Asian ideograph */, {0, 0, 0x215A3F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215A3E} /* East Asian ideograph */, {0, 0, 0x23373A} /* East Asian ideograph */, {0, 0, 0x233739} /* East Asian ideograph */, {0, 0, 0x23373B} /* East Asian ideograph */, {0, 0, 0x215A40} /* East Asian ideograph */, {0, 0, 0x23373D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215A41} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x23373E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x215A42} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275968} /* East Asian ideograph */, {0, 0, 0x275969} /* East Asian ideograph */, {0, 0, 0x27596A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27596B} /* East Asian ideograph */, {0, 0, 0x27596C} /* East Asian ideograph */, {0, 0, 0x27596D} /* East Asian ideograph */, {0, 0, 0x275A30} /* East Asian ideograph */, {0, 0, 0x274247} /* East Asian ideograph */, {0, 0, 0x393C52} /* East Asian ideograph */, {0, 0, 0x27596F} /* East Asian ideograph */, {0, 0, 0x275A34} /* East Asian ideograph */, {0, 0, 0x275972} /* East Asian ideograph */, {0, 0, 0x275970} /* East Asian ideograph */, {0, 0, 0x275971} /* East Asian ideograph */, {0, 0, 0x27597B} /* East Asian ideograph */, {0, 0, 0x275A3A} /* East Asian ideograph */, {0, 0, 0x4B5973} /* East Asian ideograph */, {0, 0, 0x27596E} /* East Asian ideograph */, {0, 0, 0x453051} /* East Asian ideograph */, {0, 0, 0x275A31} /* East Asian ideograph */, {0, 0, 0x275976} /* East Asian ideograph */, {0, 0, 0x29364E} /* East Asian ideograph */, {0, 0, 0x275979} /* East Asian ideograph */, {0, 0, 0x275978} /* East Asian ideograph */, {0, 0, 0x293651} /* East Asian ideograph */, {0, 0, 0x27597D} /* East Asian ideograph */, {0, 0, 0x27597E} /* East Asian ideograph */, {0, 0, 0x275975} /* East Asian ideograph */, {0, 0, 0x275977} /* East Asian ideograph */, {0, 0, 0x27597C} /* East Asian ideograph */, {0, 0, 0x275A23} /* East Asian ideograph */, {0, 0, 0x293725} /* East Asian ideograph */, {0, 0, 0x275A24} /* East Asian ideograph */, {0, 0, 0x275A25} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page259 = { 0, marc8r_31page259_dir }; /* PAGE 258 */ struct yaz_iconv_trie_flat marc8r_31page258_flat[] = { {"\x81", 0, 0x215976}, /* East Asian ideograph */ {"\x80", 0, 0x215977}, /* East Asian ideograph */ {"\x85", 0, 0x215A21}, /* East Asian ideograph */ {"\x87", 0, 0x215A22}, /* East Asian ideograph */ {"\x8A", 0, 0x215A23}, /* East Asian ideograph */ {"\x88", 0, 0x215A24}, /* East Asian ideograph */ {"\x84", 0, 0x215A25}, /* East Asian ideograph */ {"\x83", 0, 0x215A27}, /* East Asian ideograph */ {"\x82", 0, 0x215A28}, /* East Asian ideograph */ {"\x93", 0, 0x215A29}, /* East Asian ideograph */ {"\x91", 0, 0x215A2A}, /* East Asian ideograph */ {"\x92", 0, 0x215A2B}, /* East Asian ideograph */ {"\xA0", 0, 0x215A2C}, /* East Asian ideograph */ {"\xA6", 0, 0x215A2D}, /* East Asian ideograph */ {"\xA3", 0, 0x215A2F}, /* East Asian ideograph */ {"\xA2", 0, 0x215A30}, /* East Asian ideograph */ {"\xA4", 0, 0x215A31}, /* East Asian ideograph */ {"\x9E", 0, 0x215A32}, /* East Asian ideograph */ {"\x9C", 0, 0x215A33}, /* East Asian ideograph */ {"\xAA", 0, 0x215A34}, /* East Asian ideograph */ {"\xAD", 0, 0x215A35}, /* East Asian ideograph */ {"\xB4", 0, 0x215A36}, /* East Asian ideograph */ {"\xBD", 0, 0x215A37}, /* East Asian ideograph */ {"\xBA", 0, 0x215A38}, /* East Asian ideograph */ {"\xBC", 0, 0x215A3A}, /* East Asian ideograph */ {"\x8D", 0, 0x233657}, /* East Asian ideograph */ {"\x98", 0, 0x23365E}, /* East Asian ideograph */ {"\x95", 0, 0x23365F}, /* East Asian ideograph */ {"\xA8", 0, 0x233667}, /* East Asian ideograph */ {"\xA9", 0, 0x233668}, /* East Asian ideograph */ {"\xA1", 0, 0x23366A}, /* East Asian ideograph */ {"\xAB", 0, 0x23366F}, /* East Asian ideograph */ {"\x9A", 0, 0x233670}, /* East Asian ideograph */ {"\x9D", 0, 0x233672}, /* East Asian ideograph */ {"\x99", 0, 0x233674}, /* East Asian ideograph */ {"\xAE", 0, 0x233676}, /* East Asian ideograph */ {"\xB1", 0, 0x23367B}, /* East Asian ideograph */ {"\xB5", 0, 0x23367C}, /* East Asian ideograph */ {"\xBB", 0, 0x23367E}, /* East Asian ideograph */ {"\xB7", 0, 0x233721}, /* East Asian ideograph */ {"\xBE", 0, 0x233726}, /* East Asian ideograph */ {"\xB8", 0, 0x2D3377}, /* East Asian ideograph */ {"\x9B", 0, 0x2D5A3D}, /* East Asian ideograph */ {"\xAC", 0, 0x333C52}, /* East Asian ideograph */ {"\x89", 0, 0x393E47}, /* East Asian ideograph */ {"\x8E", 0, 0x4B5A31}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page258 = { marc8r_31page258_flat, 0 }; /* PAGE 257 */ struct yaz_iconv_trie_flat marc8r_31page257_flat[] = { {"\x82", 0, 0x215962}, /* East Asian ideograph */ {"\x8A", 0, 0x215963}, /* East Asian ideograph */ {"\x89", 0, 0x215964}, /* East Asian ideograph */ {"\x8D", 0, 0x215965}, /* East Asian ideograph */ {"\x8C", 0, 0x215966}, /* East Asian ideograph */ {"\x93", 0, 0x215967}, /* East Asian ideograph */ {"\x9D", 0, 0x215968}, /* East Asian ideograph */ {"\x9E", 0, 0x215969}, /* East Asian ideograph */ {"\xA0", 0, 0x21596A}, /* East Asian ideograph */ {"\xA2", 0, 0x21596B}, /* East Asian ideograph */ {"\xA1", 0, 0x21596C}, /* East Asian ideograph */ {"\xAC", 0, 0x21596D}, /* East Asian ideograph */ {"\xAB", 0, 0x21596E}, /* East Asian ideograph */ {"\xA8", 0, 0x21596F}, /* East Asian ideograph */ {"\xAA", 0, 0x215970}, /* East Asian ideograph */ {"\xA7", 0, 0x215971}, /* East Asian ideograph */ {"\xA9", 0, 0x215972}, /* East Asian ideograph */ {"\xAF", 0, 0x215973}, /* East Asian ideograph */ {"\xBB", 0, 0x215975}, /* East Asian ideograph */ {"\xB4", 0, 0x215978}, /* East Asian ideograph */ {"\xBC", 0, 0x215979}, /* East Asian ideograph */ {"\xB7", 0, 0x21597A}, /* East Asian ideograph */ {"\xB6", 0, 0x21597B}, /* East Asian ideograph */ {"\xBD", 0, 0x21597C}, /* East Asian ideograph */ {"\xB8", 0, 0x21597D}, /* East Asian ideograph */ {"\xBF", 0, 0x21597E}, /* East Asian ideograph */ {"\xB2", 0, 0x215A26}, /* East Asian ideograph */ {"\x86", 0, 0x23362A}, /* East Asian ideograph */ {"\x85", 0, 0x23362D}, /* East Asian ideograph */ {"\x88", 0, 0x23362E}, /* East Asian ideograph */ {"\x94", 0, 0x233639}, /* East Asian ideograph */ {"\x9B", 0, 0x233641}, /* East Asian ideograph */ {"\x9F", 0, 0x233643}, /* East Asian ideograph */ {"\xA4", 0, 0x233644}, /* East Asian ideograph */ {"\xB0", 0, 0x23364E}, /* East Asian ideograph */ {"\xBA", 0, 0x233651}, /* East Asian ideograph */ {"\xB5", 0, 0x233652}, /* East Asian ideograph */ {"\xB9", 0, 0x233653}, /* East Asian ideograph */ {"\x98", 0, 0x2D5963}, /* East Asian ideograph */ {"\xAD", 0, 0x2D5A34}, /* East Asian ideograph */ {"\xB3", 0, 0x333051}, /* East Asian ideograph */ {"\x8E", 0, 0x355D5C}, /* East Asian ideograph */ {"\xAE", 0, 0x513051}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page257 = { marc8r_31page257_flat, 0 }; /* PAGE 256 */ struct yaz_iconv_trie_dir marc8r_31page256_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x29333B} /* East Asian ideograph */, {0, 0, 0x275922} /* East Asian ideograph */, {0, 0, 0x293340} /* East Asian ideograph */, {0, 0, 0x27587D} /* East Asian ideograph */, {0, 0, 0x275921} /* East Asian ideograph */, {0, 0, 0x275878} /* East Asian ideograph */, {0, 0, 0x275877} /* East Asian ideograph */, {0, 0, 0x29327E} /* East Asian ideograph */, {0, 0, 0x275879} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275876} /* East Asian ideograph */, {0, 0, 0x27592B} /* East Asian ideograph */, {0, 0, 0x29334E} /* East Asian ideograph */, {0, 0, 0x27592A} /* East Asian ideograph */, {0, 0, 0x275935} /* East Asian ideograph */, {0, 0, 0x275927} /* East Asian ideograph */, {0, 0, 0x275929} /* East Asian ideograph */, {0, 0, 0x293359} /* East Asian ideograph */, {0, 0, 0x27592C} /* East Asian ideograph */, {0, 0, 0x27592D} /* East Asian ideograph */, {0, 0, 0x293357} /* East Asian ideograph */, {0, 0, 0x275930} /* East Asian ideograph */, {0, 0, 0x29335D} /* East Asian ideograph */, {0, 0, 0x27594E} /* East Asian ideograph */, {0, 0, 0x4B3622} /* East Asian ideograph */, {0, 0, 0x293344} /* East Asian ideograph */, {0, 0, 0x275926} /* East Asian ideograph */, {0, 0, 0x275925} /* East Asian ideograph */, {0, 0, 0x275933} /* East Asian ideograph */, {0, 0, 0x293362} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27593B} /* East Asian ideograph */, {0, 0, 0x293537} /* East Asian ideograph */, {0, 0, 0x293373} /* East Asian ideograph */, {0, 0, 0x275938} /* East Asian ideograph */, {0, 0, 0x275936} /* East Asian ideograph */, {0, 0, 0x275931} /* East Asian ideograph */, {0, 0, 0x4D3363} /* East Asian ideograph */, {0, 0, 0x275932} /* East Asian ideograph */, {0, 0, 0x29337D} /* East Asian ideograph */, {0, 0, 0x275939} /* East Asian ideograph */, {0, 0, 0x293438} /* East Asian ideograph */, {0, 0, 0x473422} /* East Asian ideograph */, {0, 0, 0x47347B} /* East Asian ideograph */, {0, 0, 0x27593A} /* East Asian ideograph */, {0, 0, 0x275940} /* East Asian ideograph */, {0, 0, 0x29344D} /* East Asian ideograph */, {0, 0, 0x293459} /* East Asian ideograph */, {0, 0, 0x29352D} /* East Asian ideograph */, {0, 0, 0x27593D} /* East Asian ideograph */, {0, 0, 0x27593E} /* East Asian ideograph */, {0, 0, 0x293539} /* East Asian ideograph */, {0, 0, 0x275947} /* East Asian ideograph */, {0, 0, 0x293468} /* East Asian ideograph */, {0, 0, 0x27594D} /* East Asian ideograph */, {0, 0, 0x274F40} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x23353D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x215952} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page256 = { 0, marc8r_31page256_dir }; /* PAGE 255 */ struct yaz_iconv_trie_flat marc8r_31page255_flat[] = { {"\x81", 0, 0x215951}, /* East Asian ideograph */ {"\x86", 0, 0x215953}, /* East Asian ideograph */ {"\x88", 0, 0x215954}, /* East Asian ideograph */ {"\x89", 0, 0x215955}, /* East Asian ideograph */ {"\x8C", 0, 0x215956}, /* East Asian ideograph */ {"\x8E", 0, 0x215957}, /* East Asian ideograph */ {"\x90", 0, 0x215958}, /* East Asian ideograph */ {"\x94", 0, 0x215959}, /* East Asian ideograph */ {"\x9A", 0, 0x21595A}, /* East Asian ideograph */ {"\xA2", 0, 0x21595C}, /* East Asian ideograph */ {"\xAA", 0, 0x21595D}, /* East Asian ideograph */ {"\xAB", 0, 0x21595E}, /* East Asian ideograph */ {"\xAC", 0, 0x21595F}, /* East Asian ideograph */ {"\xBA", 0, 0x215960}, /* East Asian ideograph */ {"\xB9", 0, 0x215961}, /* East Asian ideograph */ {"\x80", 0, 0x233544}, /* East Asian ideograph */ {"\x82", 0, 0x233545}, /* East Asian ideograph */ {"\x87", 0, 0x23354B}, /* East Asian ideograph */ {"\x8B", 0, 0x23354D}, /* East Asian ideograph */ {"\x8F", 0, 0x233550}, /* East Asian ideograph */ {"\x95", 0, 0x233552}, /* East Asian ideograph */ {"\x97", 0, 0x233554}, /* East Asian ideograph */ {"\x9C", 0, 0x233555}, /* East Asian ideograph */ {"\x9D", 0, 0x233556}, /* East Asian ideograph */ {"\xA8", 0, 0x233563}, /* East Asian ideograph */ {"\xAD", 0, 0x233565}, /* East Asian ideograph */ {"\xB3", 0, 0x23356D}, /* East Asian ideograph */ {"\xB4", 0, 0x23356F}, /* East Asian ideograph */ {"\xB5", 0, 0x233571}, /* East Asian ideograph */ {"\xB7", 0, 0x233573}, /* East Asian ideograph */ {"\xB6", 0, 0x233574}, /* East Asian ideograph */ {"\xB8", 0, 0x23357B}, /* East Asian ideograph */ {"\xBB", 0, 0x23357D}, /* East Asian ideograph */ {"\xA1", 0, 0x273257}, /* East Asian ideograph */ {"\xBC", 0, 0x2F3639}, /* East Asian ideograph */ {"\x8A", 0, 0x335958}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page255 = { marc8r_31page255_flat, 0 }; /* PAGE 254 */ struct yaz_iconv_trie_flat marc8r_31page254_flat[] = { {"\x80", 0, 0x21594A}, /* East Asian ideograph */ {"\x8A", 0, 0x21594B}, /* East Asian ideograph */ {"\x93", 0, 0x21594C}, /* East Asian ideograph */ {"\x96", 0, 0x21594D}, /* East Asian ideograph */ {"\x92", 0, 0x21594E}, /* East Asian ideograph */ {"\x9A", 0, 0x21594F}, /* East Asian ideograph */ {"\x85", 0, 0x233478}, /* East Asian ideograph */ {"\x81", 0, 0x233479}, /* East Asian ideograph */ {"\x8B", 0, 0x233523}, /* East Asian ideograph */ {"\x87", 0, 0x233526}, /* East Asian ideograph */ {"\x95", 0, 0x23352D}, /* East Asian ideograph */ {"\x94", 0, 0x23352E}, /* East Asian ideograph */ {"\x9C", 0, 0x233537}, /* East Asian ideograph */ {"\x9F", 0, 0x23353A}, /* East Asian ideograph */ {"\xA1", 0, 0x275838}, /* East Asian ideograph */ {"\xA2", 0, 0x275839}, /* East Asian ideograph */ {"\xA3", 0, 0x27583A}, /* East Asian ideograph */ {"\xA6", 0, 0x27583B}, /* East Asian ideograph */ {"\xB0", 0, 0x27583C}, /* East Asian ideograph */ {"\xA8", 0, 0x27583D}, /* East Asian ideograph */ {"\xA7", 0, 0x27583E}, /* East Asian ideograph */ {"\xAA", 0, 0x27583F}, /* East Asian ideograph */ {"\xAF", 0, 0x275840}, /* East Asian ideograph */ {"\xAB", 0, 0x275841}, /* East Asian ideograph */ {"\xAD", 0, 0x275843}, /* East Asian ideograph */ {"\xBF", 0, 0x275844}, /* East Asian ideograph */ {"\xB6", 0, 0x275846}, /* East Asian ideograph */ {"\xB7", 0, 0x275847}, /* East Asian ideograph */ {"\xB8", 0, 0x275848}, /* East Asian ideograph */ {"\xBE", 0, 0x275849}, /* East Asian ideograph */ {"\xB9", 0, 0x27584A}, /* East Asian ideograph */ {"\xBC", 0, 0x27584B}, /* East Asian ideograph */ {"\xA4", 0, 0x275870}, /* East Asian ideograph */ {"\xBA", 0, 0x275924}, /* East Asian ideograph */ {"\xB3", 0, 0x275928}, /* East Asian ideograph */ {"\xBD", 0, 0x27592F}, /* East Asian ideograph */ {"\xB2", 0, 0x275934}, /* East Asian ideograph */ {"\xA5", 0, 0x275942}, /* East Asian ideograph */ {"\xAE", 0, 0x275943}, /* East Asian ideograph */ {"\xA9", 0, 0x27594C}, /* East Asian ideograph */ {"\xB5", 0, 0x29322A}, /* East Asian ideograph */ {"\xB4", 0, 0x293430}, /* East Asian ideograph */ {"\x8E", 0, 0x2D306C}, /* East Asian ideograph */ {"\x8C", 0, 0x2D4A28}, /* East Asian ideograph */ {"\x83", 0, 0x2D594F}, /* East Asian ideograph */ {"\x90", 0, 0x33306C}, /* East Asian ideograph */ {"\x99", 0, 0x334621}, /* East Asian ideograph */ {"\xA0", 0, 0x455837}, /* East Asian ideograph */ {"\x9E", 0, 0x473539}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page254 = { marc8r_31page254_flat, 0 }; /* PAGE 253 */ struct yaz_iconv_trie_flat marc8r_31page253_flat[] = { {"\x98", 0, 0x21593C}, /* East Asian ideograph */ {"\x9C", 0, 0x21593D}, /* East Asian ideograph */ {"\x8E", 0, 0x21593E}, /* East Asian ideograph */ {"\x89", 0, 0x21593F}, /* East Asian ideograph */ {"\x9A", 0, 0x215940}, /* East Asian ideograph */ {"\x81", 0, 0x215941}, /* East Asian ideograph */ {"\x8F", 0, 0x215942}, /* East Asian ideograph */ {"\xB0", 0, 0x215943}, /* East Asian ideograph */ {"\xAC", 0, 0x215944}, /* East Asian ideograph */ {"\xA6", 0, 0x215945}, /* East Asian ideograph */ {"\xAF", 0, 0x215946}, /* East Asian ideograph */ {"\xB4", 0, 0x215947}, /* East Asian ideograph */ {"\xB7", 0, 0x215948}, /* East Asian ideograph */ {"\xBD", 0, 0x215949}, /* East Asian ideograph */ {"\x8C", 0, 0x233349}, /* East Asian ideograph */ {"\x88", 0, 0x233442}, /* East Asian ideograph */ {"\x94", 0, 0x233444}, /* East Asian ideograph */ {"\x93", 0, 0x233448}, /* East Asian ideograph */ {"\x8A", 0, 0x233449}, /* East Asian ideograph */ {"\x86", 0, 0x23344A}, /* East Asian ideograph */ {"\x96", 0, 0x23344D}, /* East Asian ideograph */ {"\x99", 0, 0x233459}, /* East Asian ideograph */ {"\x8D", 0, 0x23345F}, /* East Asian ideograph */ {"\xAB", 0, 0x233468}, /* East Asian ideograph */ {"\xAD", 0, 0x23346B}, /* East Asian ideograph */ {"\xB8", 0, 0x233470}, /* East Asian ideograph */ {"\x85", 0, 0x233473}, /* East Asian ideograph */ {"\xBE", 0, 0x23347B}, /* East Asian ideograph */ {"\x9F", 0, 0x2D3748}, /* East Asian ideograph */ {"\xB2", 0, 0x2D594C}, /* East Asian ideograph */ {"\xB1", 0, 0x33523F}, /* East Asian ideograph */ {"\x9B", 0, 0x35344D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page253 = { marc8r_31page253_flat, 0 }; /* PAGE 252 */ struct yaz_iconv_trie_flat marc8r_31page252_flat[] = { {"\x80", 0, 0x21592B}, /* East Asian ideograph */ {"\x81", 0, 0x21592C}, /* East Asian ideograph (variant of EACC 2D592C) */ {"\x82", 0, 0x21592D}, /* East Asian ideograph */ {"\x97", 0, 0x215931}, /* East Asian ideograph */ {"\x99", 0, 0x215932}, /* East Asian ideograph */ {"\x8E", 0, 0x215933}, /* East Asian ideograph */ {"\x9B", 0, 0x215934}, /* East Asian ideograph */ {"\x8A", 0, 0x215935}, /* East Asian ideograph */ {"\xA1", 0, 0x215936}, /* East Asian ideograph */ {"\x84", 0, 0x215937}, /* East Asian ideograph */ {"\x9D", 0, 0x215938}, /* East Asian ideograph */ {"\xB9", 0, 0x215939}, /* East Asian ideograph */ {"\xAC", 0, 0x21593A}, /* East Asian ideograph */ {"\xA8", 0, 0x21593B}, /* East Asian ideograph */ {"\x83", 0, 0x233356}, /* East Asian ideograph */ {"\x94", 0, 0x233359}, /* East Asian ideograph */ {"\x87", 0, 0x233364}, /* East Asian ideograph */ {"\x8C", 0, 0x23336B}, /* East Asian ideograph */ {"\x9C", 0, 0x23336F}, /* East Asian ideograph */ {"\x96", 0, 0x233373}, /* East Asian ideograph */ {"\x9F", 0, 0x233376}, /* East Asian ideograph */ {"\x8B", 0, 0x233378}, /* East Asian ideograph */ {"\x86", 0, 0x233379}, /* East Asian ideograph */ {"\x85", 0, 0x23337A}, /* East Asian ideograph */ {"\x8F", 0, 0x23337C}, /* East Asian ideograph */ {"\x90", 0, 0x23337D}, /* East Asian ideograph */ {"\xAB", 0, 0x233422}, /* East Asian ideograph */ {"\xB7", 0, 0x23342A}, /* East Asian ideograph */ {"\xA6", 0, 0x23342D}, /* East Asian ideograph */ {"\xB3", 0, 0x233430}, /* East Asian ideograph */ {"\xBE", 0, 0x233438}, /* East Asian ideograph */ {"\xA9", 0, 0x23343A}, /* East Asian ideograph */ {"\xBF", 0, 0x23344F}, /* East Asian ideograph */ {"\x9A", 0, 0x2F3363}, /* East Asian ideograph */ {"\xAD", 0, 0x35347B}, /* East Asian ideograph */ {"\xBC", 0, 0x3F3573}, /* East Asian ideograph */ {"\xA0", 0, 0x4B5936}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page252 = { marc8r_31page252_flat, 0 }; /* PAGE 251 */ struct yaz_iconv_trie_flat marc8r_31page251_flat[] = { {"\x84", 0, 0x215877}, /* East Asian ideograph */ {"\x92", 0, 0x215878}, /* East Asian ideograph */ {"\x87", 0, 0x215879}, /* East Asian ideograph */ {"\x8B", 0, 0x21587A}, /* East Asian ideograph (variant of EACC 4B587A) */ {"\xB8", 0, 0x21587B}, /* East Asian ideograph */ {"\x89", 0, 0x21587E}, /* East Asian ideograph */ {"\x82", 0, 0x215921}, /* East Asian ideograph */ {"\x96", 0, 0x215924}, /* East Asian ideograph */ {"\xA6", 0, 0x215925}, /* East Asian ideograph */ {"\xBA", 0, 0x215926}, /* East Asian ideograph */ {"\xAB", 0, 0x215927}, /* East Asian ideograph */ {"\xB1", 0, 0x215928}, /* East Asian ideograph */ {"\xA7", 0, 0x215929}, /* East Asian ideograph */ {"\x9C", 0, 0x21592A}, /* East Asian ideograph */ {"\xBE", 0, 0x21592E}, /* East Asian ideograph */ {"\xB7", 0, 0x21592F}, /* East Asian ideograph */ {"\xAD", 0, 0x215930}, /* East Asian ideograph */ {"\x8F", 0, 0x233325}, /* East Asian ideograph */ {"\x86", 0, 0x233327}, /* East Asian ideograph */ {"\x91", 0, 0x23332C}, /* East Asian ideograph */ {"\x93", 0, 0x23332D}, /* East Asian ideograph */ {"\x94", 0, 0x233333}, /* East Asian ideograph */ {"\x8D", 0, 0x233336}, /* East Asian ideograph */ {"\x9B", 0, 0x23333B}, /* East Asian ideograph */ {"\x90", 0, 0x23333F}, /* East Asian ideograph */ {"\x97", 0, 0x233340}, /* East Asian ideograph */ {"\xB3", 0, 0x233344}, /* East Asian ideograph */ {"\xA2", 0, 0x233345}, /* East Asian ideograph */ {"\x9D", 0, 0x23334C}, /* East Asian ideograph */ {"\xB6", 0, 0x23334E}, /* East Asian ideograph */ {"\xB4", 0, 0x23334F}, /* East Asian ideograph */ {"\xB5", 0, 0x233350}, /* East Asian ideograph */ {"\x9F", 0, 0x233353}, /* East Asian ideograph */ {"\xA4", 0, 0x233357}, /* East Asian ideograph */ {"\xBC", 0, 0x23335D}, /* East Asian ideograph */ {"\x9E", 0, 0x233362}, /* East Asian ideograph */ {"\xA1", 0, 0x233363}, /* East Asian ideograph */ {"\xAE", 0, 0x2D3622}, /* East Asian ideograph */ {"\x8C", 0, 0x2D5927}, /* East Asian ideograph */ {"\xA9", 0, 0x2D593D}, /* East Asian ideograph */ {"\xA0", 0, 0x39365A}, /* East Asian ideograph */ {"\x9A", 0, 0x696B5C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page251 = { marc8r_31page251_flat, 0 }; /* PAGE 250 */ struct yaz_iconv_trie_flat marc8r_31page250_flat[] = { {"\xA0", 0, 0x215860}, /* East Asian ideograph */ {"\x87", 0, 0x215861}, /* East Asian ideograph */ {"\x85", 0, 0x215862}, /* East Asian ideograph */ {"\xAA", 0, 0x215869}, /* East Asian ideograph */ {"\xA6", 0, 0x21586A}, /* East Asian ideograph */ {"\xA1", 0, 0x21586B}, /* East Asian ideograph */ {"\x9E", 0, 0x21586C}, /* East Asian ideograph */ {"\x8C", 0, 0x21586D}, /* East Asian ideograph */ {"\x93", 0, 0x21586E}, /* East Asian ideograph */ {"\xA3", 0, 0x21586F}, /* East Asian ideograph */ {"\x8D", 0, 0x215870}, /* East Asian ideograph */ {"\xA4", 0, 0x215871}, /* East Asian ideograph (variant of EACC 4B5871) */ {"\xA8", 0, 0x215872}, /* East Asian ideograph */ {"\xA5", 0, 0x215873}, /* East Asian ideograph */ {"\x98", 0, 0x215874}, /* East Asian ideograph */ {"\x91", 0, 0x215875}, /* East Asian ideograph */ {"\xBC", 0, 0x215876}, /* East Asian ideograph */ {"\xB2", 0, 0x21587C}, /* East Asian ideograph */ {"\xBF", 0, 0x21587D}, /* East Asian ideograph */ {"\xB0", 0, 0x215922}, /* East Asian ideograph */ {"\x95", 0, 0x215923}, /* East Asian ideograph */ {"\x86", 0, 0x233250}, /* East Asian ideograph */ {"\x82", 0, 0x233259}, /* East Asian ideograph */ {"\x84", 0, 0x23325D}, /* East Asian ideograph */ {"\x8F", 0, 0x233269}, /* East Asian ideograph */ {"\x96", 0, 0x23326F}, /* East Asian ideograph */ {"\x9A", 0, 0x233271}, /* East Asian ideograph */ {"\xB6", 0, 0x23327E}, /* East Asian ideograph */ {"\xBE", 0, 0x233321}, /* East Asian ideograph */ {"\xAF", 0, 0x233331}, /* East Asian ideograph */ {"\xB9", 0, 0x233338}, /* East Asian ideograph */ {"\x8A", 0, 0x275937}, /* East Asian ideograph */ {"\x89", 0, 0x275949}, /* East Asian ideograph */ {"\x92", 0, 0x333642}, /* East Asian ideograph */ {"\xAD", 0, 0x4B594A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page250 = { marc8r_31page250_flat, 0 }; /* PAGE 249 */ struct yaz_iconv_trie_flat marc8r_31page249_flat[] = { {"\xA0", 0, 0x21584D}, /* East Asian ideograph */ {"\x95", 0, 0x21584E}, /* East Asian ideograph */ {"\x9E", 0, 0x21584F}, /* East Asian ideograph */ {"\x81", 0, 0x215851}, /* East Asian ideograph */ {"\x94", 0, 0x215852}, /* East Asian ideograph */ {"\x9B", 0, 0x215853}, /* East Asian ideograph */ {"\x90", 0, 0x215854}, /* East Asian ideograph */ {"\x86", 0, 0x215855}, /* East Asian ideograph */ {"\xAB", 0, 0x215858}, /* East Asian ideograph */ {"\xB2", 0, 0x215859}, /* East Asian ideograph */ {"\xB3", 0, 0x21585A}, /* East Asian ideograph */ {"\xA6", 0, 0x21585B}, /* East Asian ideograph */ {"\xA9", 0, 0x21585C}, /* East Asian ideograph */ {"\xB0", 0, 0x21585D}, /* East Asian ideograph */ {"\xA3", 0, 0x21585E}, /* East Asian ideograph */ {"\xBC", 0, 0x21585F}, /* East Asian ideograph */ {"\xAD", 0, 0x215863}, /* East Asian ideograph */ {"\xB9", 0, 0x215864}, /* East Asian ideograph */ {"\xA2", 0, 0x215865}, /* East Asian ideograph */ {"\xB1", 0, 0x215866}, /* East Asian ideograph */ {"\xAE", 0, 0x215867}, /* East Asian ideograph */ {"\xAC", 0, 0x215868}, /* East Asian ideograph */ {"\x91", 0, 0x233227}, /* East Asian ideograph */ {"\x8A", 0, 0x233228}, /* East Asian ideograph */ {"\x8E", 0, 0x23322A}, /* East Asian ideograph */ {"\x96", 0, 0x233230}, /* East Asian ideograph */ {"\x97", 0, 0x233237}, /* East Asian ideograph */ {"\x88", 0, 0x233239}, /* East Asian ideograph */ {"\x98", 0, 0x23323B}, /* East Asian ideograph */ {"\x92", 0, 0x23323C}, /* East Asian ideograph */ {"\x85", 0, 0x233242}, /* East Asian ideograph */ {"\xBF", 0, 0x23324F}, /* East Asian ideograph */ {"\xA1", 0, 0x233256}, /* East Asian ideograph */ {"\xB5", 0, 0x23325E}, /* East Asian ideograph */ {"\xBB", 0, 0x2D3632}, /* East Asian ideograph */ {"\xA7", 0, 0x2D3B33}, /* East Asian ideograph */ {"\xBE", 0, 0x2F317D}, /* East Asian ideograph */ {"\xB6", 0, 0x335D23}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page249 = { marc8r_31page249_flat, 0 }; /* PAGE 248 */ struct yaz_iconv_trie_flat marc8r_31page248_flat[] = { {"\x80", 0, 0x215837}, /* East Asian ideograph */ {"\x88", 0, 0x215838}, /* East Asian ideograph */ {"\x82", 0, 0x215839}, /* East Asian ideograph */ {"\x83", 0, 0x21583A}, /* East Asian ideograph */ {"\x90", 0, 0x21583B}, /* East Asian ideograph */ {"\x98", 0, 0x21583C}, /* East Asian ideograph */ {"\x8E", 0, 0x21583D}, /* East Asian ideograph */ {"\x8C", 0, 0x21583E}, /* East Asian ideograph */ {"\x95", 0, 0x21583F}, /* East Asian ideograph */ {"\x8A", 0, 0x215840}, /* East Asian ideograph */ {"\x96", 0, 0x215841}, /* East Asian ideograph */ {"\x97", 0, 0x215842}, /* East Asian ideograph */ {"\x93", 0, 0x215843}, /* East Asian ideograph */ {"\xAA", 0, 0x215844}, /* East Asian ideograph */ {"\xA3", 0, 0x215845}, /* East Asian ideograph */ {"\x9D", 0, 0x215846}, /* East Asian ideograph */ {"\xA5", 0, 0x215847}, /* East Asian ideograph */ {"\xB1", 0, 0x215848}, /* East Asian ideograph */ {"\xAD", 0, 0x215849}, /* East Asian ideograph */ {"\x9B", 0, 0x21584A}, /* East Asian ideograph */ {"\x9F", 0, 0x21584B}, /* East Asian ideograph */ {"\xBB", 0, 0x21584C}, /* East Asian ideograph */ {"\xB4", 0, 0x215856}, /* East Asian ideograph */ {"\xBA", 0, 0x215857}, /* East Asian ideograph */ {"\x86", 0, 0x23316C}, /* East Asian ideograph */ {"\x87", 0, 0x23316D}, /* East Asian ideograph */ {"\x84", 0, 0x23316E}, /* East Asian ideograph */ {"\x8F", 0, 0x233170}, /* East Asian ideograph */ {"\x91", 0, 0x233171}, /* East Asian ideograph */ {"\x92", 0, 0x233172}, /* East Asian ideograph */ {"\x8D", 0, 0x233173}, /* East Asian ideograph */ {"\xA7", 0, 0x23317A}, /* East Asian ideograph */ {"\xA9", 0, 0x23317D}, /* East Asian ideograph */ {"\xA2", 0, 0x233225}, /* East Asian ideograph */ {"\xBD", 0, 0x233240}, /* East Asian ideograph */ {"\xBE", 0, 0x233258}, /* East Asian ideograph */ {"\xB6", 0, 0x2D356A}, /* East Asian ideograph */ {"\xBC", 0, 0x39593F}, /* East Asian ideograph */ {"\xB3", 0, 0x4B5946}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page248 = { marc8r_31page248_flat, 0 }; /* PAGE 247 */ struct yaz_iconv_trie_flat marc8r_31page247_flat[] = { {"\x80", 0, 0x215832}, /* East Asian ideograph */ {"\x92", 0, 0x215833}, /* East Asian ideograph */ {"\xA3", 0, 0x215834}, /* East Asian ideograph */ {"\xB4", 0, 0x215835}, /* East Asian ideograph */ {"\xB8", 0, 0x215836}, /* East Asian ideograph */ {"\x96", 0, 0x23313A}, /* East Asian ideograph */ {"\x95", 0, 0x23313B}, /* East Asian ideograph */ {"\x9A", 0, 0x23313F}, /* East Asian ideograph */ {"\xA5", 0, 0x233143}, /* East Asian ideograph */ {"\x9C", 0, 0x233145}, /* East Asian ideograph */ {"\xA1", 0, 0x233147}, /* East Asian ideograph */ {"\xA9", 0, 0x23314C}, /* East Asian ideograph */ {"\xAB", 0, 0x23314D}, /* East Asian ideograph */ {"\xAD", 0, 0x233153}, /* East Asian ideograph */ {"\xB1", 0, 0x233158}, /* East Asian ideograph */ {"\xB3", 0, 0x23315C}, /* East Asian ideograph */ {"\xB5", 0, 0x23315E}, /* East Asian ideograph */ {"\xB6", 0, 0x233160}, /* East Asian ideograph */ {"\xB7", 0, 0x233164}, /* East Asian ideograph */ {"\xBF", 0, 0x23316B}, /* East Asian ideograph */ {"\x81", 0, 0x275828}, /* East Asian ideograph */ {"\x84", 0, 0x275829}, /* East Asian ideograph */ {"\x85", 0, 0x27582A}, /* East Asian ideograph */ {"\x86", 0, 0x27582B}, /* East Asian ideograph */ {"\x8E", 0, 0x27582D}, /* East Asian ideograph */ {"\x8A", 0, 0x27582E}, /* East Asian ideograph */ {"\x90", 0, 0x27582F}, /* East Asian ideograph */ {"\x89", 0, 0x275830}, /* East Asian ideograph */ {"\x88", 0, 0x275831}, /* East Asian ideograph */ {"\x82", 0, 0x275832}, /* East Asian ideograph */ {"\x9E", 0, 0x275835}, /* East Asian ideograph */ {"\x87", 0, 0x293066}, /* East Asian ideograph */ {"\x8B", 0, 0x29306F}, /* East Asian ideograph */ {"\x8F", 0, 0x29307D}, /* East Asian ideograph */ {"\x91", 0, 0x29312B}, /* East Asian ideograph */ {"\x8C", 0, 0x293132}, /* East Asian ideograph */ {"\xAF", 0, 0x293160}, /* East Asian ideograph */ {"\xA6", 0, 0x2D5836}, /* East Asian ideograph */ {"\x94", 0, 0x334260}, /* East Asian ideograph */ {"\x9D", 0, 0x334A58}, /* East Asian ideograph */ {"\xA7", 0, 0x335834}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page247 = { marc8r_31page247_flat, 0 }; /* PAGE 246 */ struct yaz_iconv_trie_flat marc8r_31page246_flat[] = { {"\x81", 0, 0x215825}, /* East Asian ideograph */ {"\x83", 0, 0x215826}, /* East Asian ideograph */ {"\x8B", 0, 0x215828}, /* East Asian ideograph */ {"\x8F", 0, 0x215829}, /* East Asian ideograph */ {"\x93", 0, 0x21582A}, /* East Asian ideograph */ {"\x96", 0, 0x21582B}, /* East Asian ideograph */ {"\xAA", 0, 0x21582C}, /* East Asian ideograph */ {"\xA6", 0, 0x21582D}, /* East Asian ideograph */ {"\xAC", 0, 0x21582E}, /* East Asian ideograph */ {"\xB2", 0, 0x21582F}, /* East Asian ideograph */ {"\xBA", 0, 0x215830}, /* East Asian ideograph */ {"\xBD", 0, 0x215831}, /* East Asian ideograph */ {"\x84", 0, 0x233053}, /* East Asian ideograph */ {"\x85", 0, 0x233055}, /* East Asian ideograph */ {"\x91", 0, 0x233062}, /* East Asian ideograph */ {"\x97", 0, 0x233064}, /* East Asian ideograph */ {"\x98", 0, 0x233066}, /* East Asian ideograph */ {"\x9C", 0, 0x23306B}, /* East Asian ideograph */ {"\xA1", 0, 0x23306F}, /* East Asian ideograph */ {"\xA5", 0, 0x233076}, /* East Asian ideograph */ {"\xA9", 0, 0x233079}, /* East Asian ideograph */ {"\xAF", 0, 0x23307D}, /* East Asian ideograph */ {"\xB8", 0, 0x23312A}, /* East Asian ideograph */ {"\xB7", 0, 0x23312B}, /* East Asian ideograph */ {"\xB6", 0, 0x23312C}, /* East Asian ideograph */ {"\xBC", 0, 0x23312F}, /* East Asian ideograph */ {"\xBF", 0, 0x233132}, /* East Asian ideograph */ {"\x8A", 0, 0x2D5238}, /* East Asian ideograph */ {"\xA7", 0, 0x2D5831}, /* East Asian ideograph */ {"\xBB", 0, 0x2F312B}, /* East Asian ideograph */ {"\x89", 0, 0x335238}, /* East Asian ideograph */ {"\x88", 0, 0x394444}, /* East Asian ideograph */ {"\x87", 0, 0x395F68}, /* East Asian ideograph */ {"\x86", 0, 0x3F3D6F}, /* East Asian ideograph */ {"\x9A", 0, 0x4B5830}, /* East Asian ideograph */ {"\xB3", 0, 0x4B5832}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page246 = { marc8r_31page246_flat, 0 }; /* PAGE 245 */ struct yaz_iconv_trie_flat marc8r_31page245_flat[] = { {"\x84", 0, 0x21577A}, /* East Asian ideograph */ {"\x9F", 0, 0x21577B}, /* East Asian ideograph */ {"\xA0", 0, 0x21577C}, /* East Asian ideograph */ {"\x96", 0, 0x21577D}, /* East Asian ideograph */ {"\xA4", 0, 0x21577E}, /* East Asian ideograph */ {"\xAA", 0, 0x215821}, /* East Asian ideograph */ {"\xAF", 0, 0x215822}, /* East Asian ideograph */ {"\xB2", 0, 0x215823}, /* East Asian ideograph */ {"\xBF", 0, 0x215824}, /* East Asian ideograph */ {"\x81", 0, 0x232F5D}, /* East Asian ideograph */ {"\x94", 0, 0x232F66}, /* East Asian ideograph */ {"\x8F", 0, 0x232F6F}, /* East Asian ideograph */ {"\x87", 0, 0x232F72}, /* East Asian ideograph */ {"\x8C", 0, 0x232F7A}, /* East Asian ideograph */ {"\x86", 0, 0x232F7B}, /* East Asian ideograph */ {"\x8D", 0, 0x233021}, /* East Asian ideograph */ {"\xA2", 0, 0x233023}, /* East Asian ideograph */ {"\x9A", 0, 0x233024}, /* East Asian ideograph */ {"\x9E", 0, 0x233025}, /* East Asian ideograph */ {"\x9B", 0, 0x233029}, /* East Asian ideograph */ {"\x9C", 0, 0x23302C}, /* East Asian ideograph */ {"\x9D", 0, 0x23302D}, /* East Asian ideograph */ {"\xA6", 0, 0x233031}, /* East Asian ideograph */ {"\xAD", 0, 0x233037}, /* East Asian ideograph */ {"\xAB", 0, 0x23303A}, /* East Asian ideograph */ {"\xAE", 0, 0x23303B}, /* East Asian ideograph */ {"\xAC", 0, 0x23303C}, /* East Asian ideograph */ {"\xB6", 0, 0x233041}, /* East Asian ideograph */ {"\xB4", 0, 0x233042}, /* East Asian ideograph */ {"\xBB", 0, 0x233049}, /* East Asian ideograph */ {"\xBC", 0, 0x23304A}, /* East Asian ideograph */ {"\x83", 0, 0x335772}, /* East Asian ideograph */ {"\xBE", 0, 0x4B5824}, /* East Asian ideograph */ {"\xB7", 0, 0x696B27}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page245 = { marc8r_31page245_flat, 0 }; /* PAGE 244 */ struct yaz_iconv_trie_flat marc8r_31page244_flat[] = { {"\x82", 0, 0x215767}, /* East Asian ideograph */ {"\x9A", 0, 0x21576E}, /* East Asian ideograph */ {"\x90", 0, 0x21576F}, /* East Asian ideograph */ {"\x93", 0, 0x215771}, /* East Asian ideograph */ {"\x92", 0, 0x215772}, /* East Asian ideograph */ {"\xB2", 0, 0x215773}, /* East Asian ideograph */ {"\xAA", 0, 0x215774}, /* East Asian ideograph */ {"\xA5", 0, 0x215775}, /* East Asian ideograph */ {"\xAB", 0, 0x215776}, /* East Asian ideograph */ {"\xBB", 0, 0x215777}, /* East Asian ideograph */ {"\xB6", 0, 0x215778}, /* East Asian ideograph */ {"\xB8", 0, 0x215779}, /* East Asian ideograph */ {"\x80", 0, 0x232E78}, /* East Asian ideograph */ {"\x83", 0, 0x232F24}, /* East Asian ideograph */ {"\x89", 0, 0x232F2D}, /* East Asian ideograph */ {"\x98", 0, 0x232F2F}, /* East Asian ideograph */ {"\x86", 0, 0x232F35}, /* East Asian ideograph */ {"\x8C", 0, 0x232F36}, /* East Asian ideograph */ {"\x99", 0, 0x232F37}, /* East Asian ideograph */ {"\x8A", 0, 0x232F3D}, /* East Asian ideograph */ {"\x95", 0, 0x232F43}, /* East Asian ideograph */ {"\xAF", 0, 0x232F45}, /* East Asian ideograph */ {"\xB0", 0, 0x232F47}, /* East Asian ideograph */ {"\xA1", 0, 0x232F4E}, /* East Asian ideograph */ {"\xA7", 0, 0x232F4F}, /* East Asian ideograph */ {"\x9F", 0, 0x232F51}, /* East Asian ideograph */ {"\xB1", 0, 0x232F53}, /* East Asian ideograph */ {"\x9E", 0, 0x232F54}, /* East Asian ideograph */ {"\xA6", 0, 0x232F56}, /* East Asian ideograph */ {"\xA2", 0, 0x232F57}, /* East Asian ideograph */ {"\xB5", 0, 0x232F5A}, /* East Asian ideograph */ {"\xB3", 0, 0x232F60}, /* East Asian ideograph */ {"\xB4", 0, 0x275771}, /* East Asian ideograph */ {"\x9B", 0, 0x275779}, /* East Asian ideograph */ {"\x8E", 0, 0x2D5758}, /* East Asian ideograph */ {"\x87", 0, 0x393D6F}, /* East Asian ideograph */ {"\x9D", 0, 0x4D2F7A}, /* East Asian ideograph */ {"\x84", 0, 0x696A6D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page244 = { marc8r_31page244_flat, 0 }; /* PAGE 243 */ struct yaz_iconv_trie_flat marc8r_31page243_flat[] = { {"\x81", 0, 0x21575C}, /* East Asian ideograph */ {"\x82", 0, 0x21575D}, /* East Asian ideograph */ {"\x9F", 0, 0x21575F}, /* East Asian ideograph */ {"\x99", 0, 0x215760}, /* East Asian ideograph */ {"\x98", 0, 0x215761}, /* East Asian ideograph */ {"\x9C", 0, 0x215762}, /* East Asian ideograph */ {"\x8F", 0, 0x215763}, /* East Asian ideograph */ {"\x94", 0, 0x215764}, /* East Asian ideograph */ {"\x9D", 0, 0x215765}, /* East Asian ideograph */ {"\x95", 0, 0x215766}, /* East Asian ideograph */ {"\xB3", 0, 0x215768}, /* East Asian ideograph */ {"\xB8", 0, 0x215769}, /* East Asian ideograph */ {"\xB9", 0, 0x21576A}, /* East Asian ideograph */ {"\xB4", 0, 0x21576B}, /* East Asian ideograph */ {"\xBD", 0, 0x21576C}, /* East Asian ideograph */ {"\xA8", 0, 0x21576D}, /* East Asian ideograph */ {"\x89", 0, 0x232E48}, /* East Asian ideograph */ {"\x80", 0, 0x232E4F}, /* East Asian ideograph */ {"\x84", 0, 0x232E5A}, /* East Asian ideograph */ {"\x8B", 0, 0x232E5E}, /* East Asian ideograph */ {"\x8C", 0, 0x232E60}, /* East Asian ideograph */ {"\x9B", 0, 0x232E62}, /* East Asian ideograph */ {"\x8E", 0, 0x232E64}, /* East Asian ideograph */ {"\x92", 0, 0x232E68}, /* East Asian ideograph */ {"\xB1", 0, 0x232E71}, /* East Asian ideograph */ {"\xBE", 0, 0x232E72}, /* East Asian ideograph */ {"\xB2", 0, 0x232E75}, /* East Asian ideograph */ {"\xB0", 0, 0x232E7A}, /* East Asian ideograph */ {"\xBC", 0, 0x232F21}, /* East Asian ideograph */ {"\xAF", 0, 0x232F23}, /* East Asian ideograph */ {"\x85", 0, 0x275765}, /* East Asian ideograph */ {"\xA4", 0, 0x275773}, /* East Asian ideograph */ {"\x86", 0, 0x27577C}, /* East Asian ideograph */ {"\xA2", 0, 0x292F60}, /* East Asian ideograph */ {"\xA5", 0, 0x292F72}, /* East Asian ideograph */ {"\xA3", 0, 0x29302D}, /* East Asian ideograph */ {"\xA1", 0, 0x2D5763}, /* East Asian ideograph */ {"\xA0", 0, 0x335760}, /* East Asian ideograph */ {"\x8A", 0, 0x4B3A47}, /* East Asian ideograph */ {"\x83", 0, 0x696A61}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page243 = { marc8r_31page243_flat, 0 }; /* PAGE 242 */ struct yaz_iconv_trie_flat marc8r_31page242_flat[] = { {"\x82", 0, 0x215751}, /* East Asian ideograph */ {"\x81", 0, 0x215752}, /* East Asian ideograph */ {"\x88", 0, 0x215755}, /* East Asian ideograph */ {"\xAB", 0, 0x215756}, /* East Asian ideograph */ {"\x92", 0, 0x215757}, /* East Asian ideograph */ {"\x96", 0, 0x215758}, /* East Asian ideograph */ {"\x8D", 0, 0x215759}, /* East Asian ideograph */ {"\x8B", 0, 0x21575A}, /* East Asian ideograph */ {"\x9E", 0, 0x21575B}, /* East Asian ideograph */ {"\xB1", 0, 0x21575E}, /* East Asian ideograph */ {"\xA2", 0, 0x232E28}, /* East Asian ideograph */ {"\xA4", 0, 0x232E2A}, /* East Asian ideograph */ {"\xAA", 0, 0x232E2F}, /* East Asian ideograph */ {"\x9A", 0, 0x232E34}, /* East Asian ideograph */ {"\x90", 0, 0x232E3A}, /* East Asian ideograph */ {"\x8C", 0, 0x232E3B}, /* East Asian ideograph */ {"\xA0", 0, 0x232E3D}, /* East Asian ideograph */ {"\x99", 0, 0x232E40}, /* East Asian ideograph */ {"\x97", 0, 0x232E45}, /* East Asian ideograph */ {"\xBF", 0, 0x232E49}, /* East Asian ideograph */ {"\xBA", 0, 0x232E4A}, /* East Asian ideograph */ {"\xB2", 0, 0x232E51}, /* East Asian ideograph */ {"\xBC", 0, 0x232E54}, /* East Asian ideograph */ {"\xB7", 0, 0x232E57}, /* East Asian ideograph */ {"\xBD", 0, 0x232E59}, /* East Asian ideograph */ {"\x84", 0, 0x27577D}, /* East Asian ideograph */ {"\x9C", 0, 0x275821}, /* East Asian ideograph */ {"\xAD", 0, 0x275823}, /* East Asian ideograph */ {"\xB5", 0, 0x2F2D79}, /* East Asian ideograph */ {"\xB4", 0, 0x335773}, /* East Asian ideograph */ {"\xAE", 0, 0x4D3032}, /* East Asian ideograph */ {"\x85", 0, 0x513A47}, /* East Asian ideograph */ {"\xB0", 0, 0x696A5E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page242 = { marc8r_31page242_flat, 0 }; /* PAGE 241 */ struct yaz_iconv_trie_flat marc8r_31page241_flat[] = { {"\x80", 0, 0x215743}, /* East Asian ideograph */ {"\x8C", 0, 0x215744}, /* East Asian ideograph */ {"\x8D", 0, 0x215745}, /* East Asian ideograph */ {"\x93", 0, 0x215746}, /* East Asian ideograph (variant of EACC 4B5746) */ {"\x97", 0, 0x215747}, /* East Asian ideograph */ {"\x99", 0, 0x215748}, /* East Asian ideograph */ {"\x9B", 0, 0x215749}, /* East Asian ideograph */ {"\x9D", 0, 0x21574A}, /* East Asian ideograph */ {"\xA1", 0, 0x21574B}, /* East Asian ideograph */ {"\xA2", 0, 0x21574C}, /* East Asian ideograph */ {"\xA3", 0, 0x21574D}, /* East Asian ideograph */ {"\xA8", 0, 0x21574F}, /* East Asian ideograph */ {"\xAB", 0, 0x215750}, /* East Asian ideograph */ {"\xB0", 0, 0x215753}, /* East Asian ideograph */ {"\xB7", 0, 0x215754}, /* East Asian ideograph */ {"\x81", 0, 0x232D41}, /* East Asian ideograph */ {"\x84", 0, 0x232D44}, /* East Asian ideograph */ {"\x87", 0, 0x232D4B}, /* East Asian ideograph */ {"\x8A", 0, 0x232D51}, /* East Asian ideograph */ {"\x8E", 0, 0x232D53}, /* East Asian ideograph */ {"\x92", 0, 0x232D56}, /* East Asian ideograph */ {"\x90", 0, 0x232D57}, /* East Asian ideograph */ {"\x96", 0, 0x232D59}, /* East Asian ideograph */ {"\x95", 0, 0x232D5A}, /* East Asian ideograph */ {"\x9C", 0, 0x232D5E}, /* East Asian ideograph */ {"\x9A", 0, 0x232D5F}, /* East Asian ideograph */ {"\xA9", 0, 0x232D69}, /* East Asian ideograph */ {"\xAD", 0, 0x232D6D}, /* East Asian ideograph */ {"\xBA", 0, 0x232D6E}, /* East Asian ideograph */ {"\xB5", 0, 0x232D71}, /* East Asian ideograph */ {"\xB2", 0, 0x232D75}, /* East Asian ideograph */ {"\xBD", 0, 0x232D79}, /* East Asian ideograph */ {"\xB9", 0, 0x232D7C}, /* East Asian ideograph */ {"\xBF", 0, 0x232D7D}, /* East Asian ideograph */ {"\xBE", 0, 0x232D7E}, /* East Asian ideograph */ {"\xA5", 0, 0x275762}, /* East Asian ideograph */ {"\xAC", 0, 0x275822}, /* East Asian ideograph */ {"\x85", 0, 0x275D35}, /* East Asian ideograph */ {"\x94", 0, 0x275D61}, /* East Asian ideograph */ {"\x9E", 0, 0x2D5749}, /* East Asian ideograph */ {"\xAE", 0, 0x2D575B}, /* East Asian ideograph */ {"\x82", 0, 0x3B2D44}, /* East Asian ideograph */ {"\x86", 0, 0x4B4D56}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page241 = { marc8r_31page241_flat, 0 }; /* PAGE 240 */ struct yaz_iconv_trie_flat marc8r_31page240_flat[] = { {"\x85", 0, 0x215736}, /* East Asian ideograph */ {"\x8D", 0, 0x215737}, /* East Asian ideograph */ {"\x94", 0, 0x215739}, /* East Asian ideograph */ {"\x95", 0, 0x21573A}, /* East Asian ideograph */ {"\xA2", 0, 0x21573B}, /* East Asian ideograph */ {"\xA3", 0, 0x21573C}, /* East Asian ideograph */ {"\xA1", 0, 0x21573D}, /* East Asian ideograph */ {"\x9F", 0, 0x21573E}, /* East Asian ideograph */ {"\xB1", 0, 0x21573F}, /* East Asian ideograph */ {"\xB9", 0, 0x215740}, /* East Asian ideograph */ {"\xB6", 0, 0x215741}, /* East Asian ideograph */ {"\xBB", 0, 0x215742}, /* East Asian ideograph */ {"\x81", 0, 0x232C4D}, /* East Asian ideograph */ {"\x83", 0, 0x232C4F}, /* East Asian ideograph */ {"\x8A", 0, 0x232C50}, /* East Asian ideograph */ {"\x8B", 0, 0x232C5C}, /* East Asian ideograph */ {"\x86", 0, 0x232C5D}, /* East Asian ideograph */ {"\x90", 0, 0x232C61}, /* East Asian ideograph */ {"\x99", 0, 0x232C63}, /* East Asian ideograph */ {"\x91", 0, 0x232C64}, /* East Asian ideograph */ {"\x98", 0, 0x232C66}, /* East Asian ideograph */ {"\x93", 0, 0x232C6A}, /* East Asian ideograph */ {"\x96", 0, 0x232C6B}, /* East Asian ideograph */ {"\xB4", 0, 0x232C72}, /* East Asian ideograph */ {"\x9C", 0, 0x232C73}, /* East Asian ideograph */ {"\x9B", 0, 0x232C7A}, /* East Asian ideograph */ {"\xA8", 0, 0x232D23}, /* East Asian ideograph */ {"\xB2", 0, 0x232D2A}, /* East Asian ideograph */ {"\xAE", 0, 0x232D2E}, /* East Asian ideograph */ {"\xAD", 0, 0x232D32}, /* East Asian ideograph */ {"\xBC", 0, 0x232D3C}, /* East Asian ideograph */ {"\x8E", 0, 0x33572E}, /* East Asian ideograph */ {"\x8F", 0, 0x335738}, /* East Asian ideograph */ {"\xA7", 0, 0x4B5740}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page240 = { marc8r_31page240_flat, 0 }; /* PAGE 239 */ struct yaz_iconv_trie_flat marc8r_31page239_flat[] = { {"\x91", 0, 0x215728}, /* East Asian ideograph */ {"\x80", 0, 0x215729}, /* East Asian ideograph */ {"\x88", 0, 0x21572D}, /* East Asian ideograph */ {"\x92", 0, 0x21572E}, /* East Asian ideograph */ {"\x86", 0, 0x215730}, /* East Asian ideograph */ {"\x8B", 0, 0x215731}, /* East Asian ideograph */ {"\xAF", 0, 0x215732}, /* East Asian ideograph */ {"\xB2", 0, 0x215733}, /* East Asian ideograph */ {"\xAC", 0, 0x215734}, /* East Asian ideograph */ {"\xBB", 0, 0x215735}, /* East Asian ideograph */ {"\xB9", 0, 0x215738}, /* East Asian ideograph */ {"\x84", 0, 0x232B6E}, /* East Asian ideograph */ {"\xAE", 0, 0x232C2C}, /* East Asian ideograph */ {"\xB3", 0, 0x232C30}, /* East Asian ideograph */ {"\xB0", 0, 0x232C31}, /* East Asian ideograph */ {"\xAA", 0, 0x232C34}, /* East Asian ideograph */ {"\x9B", 0, 0x232C36}, /* East Asian ideograph */ {"\xA2", 0, 0x232C37}, /* East Asian ideograph */ {"\xAB", 0, 0x232C39}, /* East Asian ideograph */ {"\x96", 0, 0x232C3A}, /* East Asian ideograph */ {"\xB5", 0, 0x232C3F}, /* East Asian ideograph */ {"\xA0", 0, 0x232C47}, /* East Asian ideograph */ {"\x93", 0, 0x232C48}, /* East Asian ideograph */ {"\x9C", 0, 0x232C49}, /* East Asian ideograph */ {"\xA3", 0, 0x232C4C}, /* East Asian ideograph */ {"\xB6", 0, 0x232C55}, /* East Asian ideograph */ {"\xB7", 0, 0x232C57}, /* East Asian ideograph */ {"\xBE", 0, 0x232C5F}, /* East Asian ideograph */ {"\x87", 0, 0x2D5730}, /* East Asian ideograph */ {"\x8A", 0, 0x2F2A73}, /* East Asian ideograph */ {"\x81", 0, 0x335652}, /* East Asian ideograph */ {"\xA5", 0, 0x4D2C3C}, /* East Asian ideograph */ {"\x90", 0, 0x696A2C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page239 = { marc8r_31page239_flat, 0 }; /* PAGE 238 */ struct yaz_iconv_trie_flat marc8r_31page238_flat[] = { {"\x83", 0, 0x215722}, /* East Asian ideograph */ {"\x82", 0, 0x215723}, /* East Asian ideograph */ {"\xA2", 0, 0x215724}, /* East Asian ideograph */ {"\x9E", 0, 0x215725}, /* East Asian ideograph */ {"\x8D", 0, 0x215726}, /* East Asian ideograph */ {"\x9F", 0, 0x215727}, /* East Asian ideograph */ {"\xAB", 0, 0x21572A}, /* East Asian ideograph */ {"\xB3", 0, 0x21572B}, /* East Asian ideograph */ {"\xBB", 0, 0x21572C}, /* East Asian ideograph */ {"\xBA", 0, 0x21572F}, /* East Asian ideograph */ {"\xA3", 0, 0x232B3A}, /* East Asian ideograph */ {"\x93", 0, 0x232B3D}, /* East Asian ideograph */ {"\x99", 0, 0x232B45}, /* East Asian ideograph */ {"\x88", 0, 0x232B48}, /* East Asian ideograph */ {"\x98", 0, 0x232B4C}, /* East Asian ideograph */ {"\x85", 0, 0x232B53}, /* East Asian ideograph */ {"\x8B", 0, 0x232B54}, /* East Asian ideograph */ {"\x84", 0, 0x232B55}, /* East Asian ideograph */ {"\xA9", 0, 0x232B58}, /* East Asian ideograph */ {"\x89", 0, 0x232B5D}, /* East Asian ideograph */ {"\xAD", 0, 0x232B60}, /* East Asian ideograph */ {"\xBE", 0, 0x232B66}, /* East Asian ideograph */ {"\xAF", 0, 0x232B6F}, /* East Asian ideograph */ {"\xAC", 0, 0x232B72}, /* East Asian ideograph */ {"\xAE", 0, 0x232B78}, /* East Asian ideograph */ {"\xBF", 0, 0x232B7E}, /* East Asian ideograph */ {"\xBD", 0, 0x232C24}, /* East Asian ideograph */ {"\x97", 0, 0x2D572B}, /* East Asian ideograph */ {"\xB5", 0, 0x2F2A64}, /* East Asian ideograph */ {"\xA1", 0, 0x395652}, /* East Asian ideograph */ {"\xA8", 0, 0x70727D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page238 = { marc8r_31page238_flat, 0 }; /* PAGE 237 */ struct yaz_iconv_trie_flat marc8r_31page237_flat[] = { {"\x95", 0, 0x215676}, /* East Asian ideograph */ {"\xA0", 0, 0x215677}, /* East Asian ideograph */ {"\xB6", 0, 0x215678}, /* East Asian ideograph */ {"\xB4", 0, 0x215679}, /* East Asian ideograph */ {"\xA6", 0, 0x21567A}, /* East Asian ideograph */ {"\xB8", 0, 0x21567B}, /* East Asian ideograph */ {"\xA8", 0, 0x21567C}, /* East Asian ideograph */ {"\x8C", 0, 0x21567D}, /* East Asian ideograph */ {"\x97", 0, 0x21567E}, /* East Asian ideograph */ {"\x99", 0, 0x215721}, /* East Asian ideograph */ {"\x8A", 0, 0x232A42}, /* East Asian ideograph */ {"\x80", 0, 0x232A49}, /* East Asian ideograph */ {"\x83", 0, 0x232A53}, /* East Asian ideograph */ {"\x84", 0, 0x232A55}, /* East Asian ideograph */ {"\x8F", 0, 0x232A6B}, /* East Asian ideograph */ {"\xB1", 0, 0x232A6C}, /* East Asian ideograph */ {"\xA3", 0, 0x232A6D}, /* East Asian ideograph */ {"\xA4", 0, 0x232A71}, /* East Asian ideograph */ {"\xA5", 0, 0x232A73}, /* East Asian ideograph */ {"\xBD", 0, 0x232A74}, /* East Asian ideograph */ {"\x98", 0, 0x232A79}, /* East Asian ideograph */ {"\xBB", 0, 0x232A7B}, /* East Asian ideograph */ {"\xA1", 0, 0x232B21}, /* East Asian ideograph */ {"\xAA", 0, 0x232B24}, /* East Asian ideograph */ {"\x8E", 0, 0x232B27}, /* East Asian ideograph */ {"\x9F", 0, 0x232B28}, /* East Asian ideograph */ {"\xAF", 0, 0x232B2D}, /* East Asian ideograph */ {"\x9D", 0, 0x232B2E}, /* East Asian ideograph */ {"\xAE", 0, 0x232B30}, /* East Asian ideograph */ {"\x8D", 0, 0x232B33}, /* East Asian ideograph */ {"\x93", 0, 0x232B35}, /* East Asian ideograph */ {"\xBC", 0, 0x27572C}, /* East Asian ideograph */ {"\x89", 0, 0x275734}, /* East Asian ideograph */ {"\x87", 0, 0x275736}, /* East Asian ideograph */ {"\xBE", 0, 0x292C64}, /* East Asian ideograph */ {"\x88", 0, 0x2D572D}, /* East Asian ideograph */ {"\xBF", 0, 0x4B5736}, /* East Asian ideograph */ {"\xB0", 0, 0x4D2925}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page237 = { marc8r_31page237_flat, 0 }; /* PAGE 236 */ struct yaz_iconv_trie_flat marc8r_31page236_flat[] = { {"\x87", 0, 0x215668}, /* East Asian ideograph */ {"\x83", 0, 0x215669}, /* East Asian ideograph */ {"\x88", 0, 0x21566A}, /* East Asian ideograph */ {"\x80", 0, 0x21566B}, /* East Asian ideograph */ {"\x93", 0, 0x21566D}, /* East Asian ideograph */ {"\x82", 0, 0x21566E}, /* East Asian ideograph */ {"\x9C", 0, 0x21566F}, /* East Asian ideograph */ {"\xBF", 0, 0x215670}, /* East Asian ideograph */ {"\xBB", 0, 0x215671}, /* East Asian ideograph */ {"\xA2", 0, 0x215672}, /* East Asian ideograph */ {"\xA5", 0, 0x215673}, /* East Asian ideograph */ {"\xB4", 0, 0x215674}, /* East Asian ideograph */ {"\x98", 0, 0x215675}, /* East Asian ideograph */ {"\x8B", 0, 0x232A25}, /* East Asian ideograph */ {"\x86", 0, 0x232A34}, /* East Asian ideograph */ {"\x8E", 0, 0x232A36}, /* East Asian ideograph */ {"\x89", 0, 0x232A38}, /* East Asian ideograph */ {"\x8A", 0, 0x232A3A}, /* East Asian ideograph */ {"\x8D", 0, 0x232A3E}, /* East Asian ideograph */ {"\xA3", 0, 0x232A43}, /* East Asian ideograph */ {"\xB7", 0, 0x232A44}, /* East Asian ideograph */ {"\xA8", 0, 0x232A45}, /* East Asian ideograph */ {"\xAE", 0, 0x232A4B}, /* East Asian ideograph */ {"\xBD", 0, 0x232A4C}, /* East Asian ideograph */ {"\x9E", 0, 0x232A4E}, /* East Asian ideograph */ {"\xBE", 0, 0x232A57}, /* East Asian ideograph */ {"\xA9", 0, 0x232A59}, /* East Asian ideograph */ {"\xB9", 0, 0x232A5A}, /* East Asian ideograph */ {"\x9A", 0, 0x232A5F}, /* East Asian ideograph */ {"\xB1", 0, 0x232A64}, /* East Asian ideograph */ {"\x91", 0, 0x232A65}, /* East Asian ideograph */ {"\x92", 0, 0x232A66}, /* East Asian ideograph */ {"\xA1", 0, 0x27573E}, /* East Asian ideograph */ {"\x97", 0, 0x2D567B}, /* East Asian ideograph */ {"\xBA", 0, 0x2D5F63}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page236 = { marc8r_31page236_flat, 0 }; /* PAGE 235 */ struct yaz_iconv_trie_flat marc8r_31page235_flat[] = { {"\x80", 0, 0x215657}, /* East Asian ideograph */ {"\x87", 0, 0x215658}, /* East Asian ideograph */ {"\x8B", 0, 0x21565A}, /* East Asian ideograph */ {"\x84", 0, 0x21565C}, /* East Asian ideograph */ {"\x86", 0, 0x21565D}, /* East Asian ideograph */ {"\x9F", 0, 0x215660}, /* East Asian ideograph */ {"\x99", 0, 0x215661}, /* East Asian ideograph */ {"\xAD", 0, 0x215662}, /* East Asian ideograph */ {"\x94", 0, 0x215663}, /* East Asian ideograph */ {"\x9B", 0, 0x215664}, /* East Asian ideograph */ {"\xA4", 0, 0x215665}, /* East Asian ideograph */ {"\xBB", 0, 0x215666}, /* East Asian ideograph */ {"\xB9", 0, 0x215667}, /* East Asian ideograph */ {"\xBE", 0, 0x21566C}, /* East Asian ideograph */ {"\x89", 0, 0x232962}, /* East Asian ideograph */ {"\x98", 0, 0x232967}, /* East Asian ideograph */ {"\xA3", 0, 0x23296E}, /* East Asian ideograph */ {"\xA9", 0, 0x23296F}, /* East Asian ideograph */ {"\xAC", 0, 0x232971}, /* East Asian ideograph */ {"\x95", 0, 0x232974}, /* East Asian ideograph */ {"\x90", 0, 0x232977}, /* East Asian ideograph */ {"\x91", 0, 0x23297A}, /* East Asian ideograph */ {"\x9E", 0, 0x23297E}, /* East Asian ideograph */ {"\xBA", 0, 0x232A2F}, /* East Asian ideograph */ {"\xB8", 0, 0x232A33}, /* East Asian ideograph */ {"\x83", 0, 0x23355C}, /* East Asian ideograph */ {"\xB2", 0, 0x275732}, /* East Asian ideograph */ {"\x8E", 0, 0x27573C}, /* East Asian ideograph */ {"\x8A", 0, 0x27573F}, /* East Asian ideograph */ {"\xAE", 0, 0x275742}, /* East Asian ideograph */ {"\xB1", 0, 0x292A2F}, /* East Asian ideograph */ {"\xB3", 0, 0x292B55}, /* East Asian ideograph */ {"\xB0", 0, 0x292B6E}, /* East Asian ideograph */ {"\x8F", 0, 0x292C55}, /* East Asian ideograph */ {"\xB4", 0, 0x292C61}, /* East Asian ideograph */ {"\x8D", 0, 0x4B5724}, /* East Asian ideograph */ {"\xAF", 0, 0x696962}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page235 = { marc8r_31page235_flat, 0 }; /* PAGE 234 */ struct yaz_iconv_trie_flat marc8r_31page234_flat[] = { {"\xA9", 0, 0x215650}, /* East Asian ideograph */ {"\xAA", 0, 0x215651}, /* East Asian ideograph */ {"\x8A", 0, 0x215652}, /* East Asian ideograph */ {"\x93", 0, 0x215653}, /* East Asian ideograph */ {"\xA4", 0, 0x215654}, /* East Asian ideograph */ {"\x8C", 0, 0x215655}, /* East Asian ideograph */ {"\xA3", 0, 0x215656}, /* East Asian ideograph */ {"\xB5", 0, 0x215659}, /* East Asian ideograph */ {"\xB6", 0, 0x21565B}, /* East Asian ideograph */ {"\xB1", 0, 0x21565E}, /* East Asian ideograph */ {"\xAF", 0, 0x21565F}, /* East Asian ideograph */ {"\x96", 0, 0x23292E}, /* East Asian ideograph */ {"\xA8", 0, 0x23292F}, /* East Asian ideograph */ {"\x91", 0, 0x232936}, /* East Asian ideograph */ {"\x9C", 0, 0x232937}, /* East Asian ideograph */ {"\x98", 0, 0x232939}, /* East Asian ideograph */ {"\x8D", 0, 0x23293C}, /* East Asian ideograph */ {"\x8B", 0, 0x23293D}, /* East Asian ideograph */ {"\xA6", 0, 0x232940}, /* East Asian ideograph */ {"\x9D", 0, 0x232942}, /* East Asian ideograph */ {"\xA0", 0, 0x232946}, /* East Asian ideograph */ {"\xA7", 0, 0x232948}, /* East Asian ideograph */ {"\xBF", 0, 0x23294B}, /* East Asian ideograph */ {"\xBA", 0, 0x232958}, /* East Asian ideograph */ {"\xB0", 0, 0x232959}, /* East Asian ideograph */ {"\xB3", 0, 0x232960}, /* East Asian ideograph */ {"\xB4", 0, 0x232963}, /* East Asian ideograph */ {"\x80", 0, 0x275676}, /* East Asian ideograph */ {"\x82", 0, 0x275725}, /* East Asian ideograph */ {"\x81", 0, 0x275735}, /* East Asian ideograph */ {"\x95", 0, 0x275741}, /* East Asian ideograph */ {"\xAC", 0, 0x292A34}, /* East Asian ideograph */ {"\xA1", 0, 0x2F5F45}, /* East Asian ideograph */ {"\xAB", 0, 0x69695B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page234 = { marc8r_31page234_flat, 0 }; /* PAGE 233 */ struct yaz_iconv_trie_flat marc8r_31page233_flat[] = { {"\x8E", 0, 0x215643}, /* East Asian ideograph */ {"\x90", 0, 0x215644}, /* East Asian ideograph */ {"\x94", 0, 0x215645}, /* East Asian ideograph */ {"\x95", 0, 0x215647}, /* East Asian ideograph */ {"\x9C", 0, 0x215648}, /* East Asian ideograph */ {"\x9B", 0, 0x215649}, /* East Asian ideograph */ {"\x9F", 0, 0x21564A}, /* East Asian ideograph */ {"\x9E", 0, 0x21564B}, /* East Asian ideograph */ {"\xA7", 0, 0x21564C}, /* East Asian ideograph */ {"\xB9", 0, 0x21564F}, /* East Asian ideograph */ {"\x92", 0, 0x216D74}, /* East Asian ideograph */ {"\x81", 0, 0x21787C}, /* East Asian ideograph */ {"\x80", 0, 0x23283F}, /* East Asian ideograph */ {"\x85", 0, 0x23284C}, /* East Asian ideograph */ {"\x8D", 0, 0x232859}, /* East Asian ideograph */ {"\x93", 0, 0x23285A}, /* East Asian ideograph */ {"\x99", 0, 0x23285E}, /* East Asian ideograph */ {"\xA1", 0, 0x232866}, /* East Asian ideograph */ {"\xA2", 0, 0x232869}, /* East Asian ideograph */ {"\xA3", 0, 0x23286A}, /* East Asian ideograph */ {"\xA9", 0, 0x232871}, /* East Asian ideograph */ {"\xAC", 0, 0x232878}, /* East Asian ideograph */ {"\xB2", 0, 0x23287B}, /* East Asian ideograph */ {"\xAF", 0, 0x23287C}, /* East Asian ideograph */ {"\xBB", 0, 0x23287E}, /* East Asian ideograph */ {"\xBA", 0, 0x232925}, /* East Asian ideograph */ {"\xB3", 0, 0x232926}, /* East Asian ideograph */ {"\xBC", 0, 0x232927}, /* East Asian ideograph */ {"\x91", 0, 0x273F36}, /* East Asian ideograph */ {"\x8F", 0, 0x275648}, /* East Asian ideograph */ {"\xBE", 0, 0x27567A}, /* East Asian ideograph */ {"\xAB", 0, 0x275733}, /* East Asian ideograph */ {"\xBD", 0, 0x275F4A}, /* East Asian ideograph */ {"\xAE", 0, 0x292C4C}, /* East Asian ideograph */ {"\xBF", 0, 0x292C5D}, /* East Asian ideograph */ {"\x96", 0, 0x333573}, /* East Asian ideograph */ {"\xB1", 0, 0x33567C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page233 = { marc8r_31page233_flat, 0 }; /* PAGE 232 */ struct yaz_iconv_trie_flat marc8r_31page232_flat[] = { {"\x91", 0, 0x215638}, /* East Asian ideograph */ {"\x86", 0, 0x21563A}, /* East Asian ideograph */ {"\x8B", 0, 0x21563B}, /* East Asian ideograph */ {"\x87", 0, 0x21563C}, /* East Asian ideograph */ {"\x8A", 0, 0x21563D}, /* East Asian ideograph */ {"\xAD", 0, 0x21563E}, /* East Asian ideograph */ {"\x97", 0, 0x21563F}, /* East Asian ideograph */ {"\x9A", 0, 0x215640}, /* East Asian ideograph */ {"\xB8", 0, 0x215641}, /* East Asian ideograph */ {"\xBF", 0, 0x215642}, /* East Asian ideograph */ {"\xA4", 0, 0x232724}, /* East Asian ideograph */ {"\xA2", 0, 0x232752}, /* East Asian ideograph */ {"\x90", 0, 0x232754}, /* East Asian ideograph */ {"\x80", 0, 0x232760}, /* East Asian ideograph */ {"\x84", 0, 0x232768}, /* East Asian ideograph */ {"\x85", 0, 0x232771}, /* East Asian ideograph */ {"\xAB", 0, 0x232775}, /* East Asian ideograph */ {"\xA7", 0, 0x232822}, /* East Asian ideograph */ {"\xA9", 0, 0x232826}, /* East Asian ideograph */ {"\xB7", 0, 0x232832}, /* East Asian ideograph */ {"\xB6", 0, 0x232838}, /* East Asian ideograph */ {"\xBC", 0, 0x23283E}, /* East Asian ideograph */ {"\xBA", 0, 0x232840}, /* East Asian ideograph */ {"\x93", 0, 0x2D563C}, /* East Asian ideograph */ {"\x82", 0, 0x335577}, /* East Asian ideograph */ {"\xAF", 0, 0x4B4D41}, /* East Asian ideograph */ {"\x96", 0, 0x51563F}, /* East Asian ideograph */ {"\xB0", 0, 0x696946}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page232 = { marc8r_31page232_flat, 0 }; /* PAGE 231 */ struct yaz_iconv_trie_flat marc8r_31page231_flat[] = { {"\x8D", 0, 0x215629}, /* East Asian ideograph (variant of EACC 4B5629) */ {"\x8F", 0, 0x21562B}, /* East Asian ideograph */ {"\x90", 0, 0x21562D}, /* East Asian ideograph */ {"\x89", 0, 0x21562E}, /* East Asian ideograph */ {"\xA9", 0, 0x215630}, /* East Asian ideograph */ {"\x9D", 0, 0x215631}, /* East Asian ideograph */ {"\xAA", 0, 0x215632}, /* East Asian ideograph */ {"\xA4", 0, 0x215633}, /* East Asian ideograph */ {"\x95", 0, 0x215634}, /* East Asian ideograph */ {"\xA5", 0, 0x215635}, /* East Asian ideograph */ {"\xBB", 0, 0x215636}, /* East Asian ideograph */ {"\xB9", 0, 0x215637}, /* East Asian ideograph */ {"\xBA", 0, 0x215639}, /* East Asian ideograph */ {"\x81", 0, 0x23265D}, /* East Asian ideograph */ {"\x8E", 0, 0x232668}, /* East Asian ideograph */ {"\x82", 0, 0x23266A}, /* East Asian ideograph */ {"\x84", 0, 0x232670}, /* East Asian ideograph */ {"\xB7", 0, 0x232728}, /* East Asian ideograph */ {"\xA6", 0, 0x23272C}, /* East Asian ideograph */ {"\x94", 0, 0x23272E}, /* East Asian ideograph */ {"\xAD", 0, 0x232731}, /* East Asian ideograph */ {"\x9A", 0, 0x232739}, /* East Asian ideograph */ {"\x9F", 0, 0x232743}, /* East Asian ideograph */ {"\x98", 0, 0x232745}, /* East Asian ideograph */ {"\x9C", 0, 0x23274C}, /* East Asian ideograph */ {"\xB5", 0, 0x23274E}, /* East Asian ideograph */ {"\xBC", 0, 0x232757}, /* East Asian ideograph */ {"\xBF", 0, 0x23275B}, /* East Asian ideograph */ {"\xBE", 0, 0x23275E}, /* East Asian ideograph */ {"\x93", 0, 0x275640}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page231 = { marc8r_31page231_flat, 0 }; /* PAGE 230 */ struct yaz_iconv_trie_flat marc8r_31page230_flat[] = { {"\x84", 0, 0x21557E}, /* East Asian ideograph */ {"\xAA", 0, 0x215621}, /* East Asian ideograph */ {"\x9B", 0, 0x215623}, /* East Asian ideograph */ {"\x91", 0, 0x215624}, /* East Asian ideograph */ {"\x94", 0, 0x215626}, /* East Asian ideograph */ {"\x9C", 0, 0x215627}, /* East Asian ideograph */ {"\x87", 0, 0x215628}, /* East Asian ideograph */ {"\xA9", 0, 0x21562A}, /* East Asian ideograph */ {"\xAF", 0, 0x21562C}, /* East Asian ideograph */ {"\xB0", 0, 0x21562F}, /* East Asian ideograph */ {"\x8C", 0, 0x232577}, /* East Asian ideograph */ {"\x80", 0, 0x232625}, /* East Asian ideograph */ {"\x8F", 0, 0x232628}, /* East Asian ideograph */ {"\x98", 0, 0x232635}, /* East Asian ideograph */ {"\xA4", 0, 0x23263D}, /* East Asian ideograph */ {"\x97", 0, 0x232644}, /* East Asian ideograph */ {"\xA8", 0, 0x232649}, /* East Asian ideograph */ {"\x86", 0, 0x23264E}, /* East Asian ideograph */ {"\x99", 0, 0x232650}, /* East Asian ideograph */ {"\x8A", 0, 0x232651}, /* East Asian ideograph */ {"\xA2", 0, 0x232652}, /* East Asian ideograph */ {"\x90", 0, 0x232654}, /* East Asian ideograph */ {"\x85", 0, 0x232656}, /* East Asian ideograph */ {"\x88", 0, 0x232657}, /* East Asian ideograph */ {"\xB8", 0, 0x23265A}, /* East Asian ideograph */ {"\xBA", 0, 0x232661}, /* East Asian ideograph */ {"\xB7", 0, 0x23266B}, /* East Asian ideograph */ {"\xB9", 0, 0x23266C}, /* East Asian ideograph */ {"\xB3", 0, 0x23266E}, /* East Asian ideograph */ {"\xBD", 0, 0x23266F}, /* East Asian ideograph */ {"\xBF", 0, 0x232672}, /* East Asian ideograph */ {"\xBE", 0, 0x232675}, /* East Asian ideograph */ {"\xB6", 0, 0x23267E}, /* East Asian ideograph */ {"\xAE", 0, 0x275632}, /* East Asian ideograph */ {"\xAC", 0, 0x335635}, /* East Asian ideograph */ {"\xA6", 0, 0x395477}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page230 = { marc8r_31page230_flat, 0 }; /* PAGE 229 */ struct yaz_iconv_trie_flat marc8r_31page229_flat[] = { {"\xA9", 0, 0x215576}, /* East Asian ideograph */ {"\x8A", 0, 0x215577}, /* East Asian ideograph */ {"\x99", 0, 0x215578}, /* East Asian ideograph */ {"\x88", 0, 0x215579}, /* East Asian ideograph */ {"\xA8", 0, 0x21557A}, /* East Asian ideograph */ {"\x83", 0, 0x21557B}, /* East Asian ideograph */ {"\xAA", 0, 0x21557C}, /* East Asian ideograph */ {"\x89", 0, 0x21557D}, /* East Asian ideograph */ {"\xAD", 0, 0x215622}, /* East Asian ideograph */ {"\xBE", 0, 0x215625}, /* East Asian ideograph */ {"\x96", 0, 0x232536}, /* East Asian ideograph */ {"\x81", 0, 0x232546}, /* East Asian ideograph */ {"\x98", 0, 0x23254B}, /* East Asian ideograph */ {"\x93", 0, 0x23254D}, /* East Asian ideograph */ {"\xA1", 0, 0x23254E}, /* East Asian ideograph */ {"\x80", 0, 0x23254F}, /* East Asian ideograph */ {"\x86", 0, 0x23255A}, /* East Asian ideograph */ {"\xA4", 0, 0x23255C}, /* East Asian ideograph */ {"\x9E", 0, 0x23255D}, /* East Asian ideograph */ {"\xB3", 0, 0x23255E}, /* East Asian ideograph */ {"\x91", 0, 0x23255F}, /* East Asian ideograph */ {"\xA2", 0, 0x232564}, /* East Asian ideograph */ {"\xA3", 0, 0x23256B}, /* East Asian ideograph */ {"\x82", 0, 0x23256D}, /* East Asian ideograph */ {"\x8E", 0, 0x232571}, /* East Asian ideograph */ {"\x95", 0, 0x232574}, /* East Asian ideograph */ {"\x9D", 0, 0x232576}, /* East Asian ideograph */ {"\xB9", 0, 0x23262D}, /* East Asian ideograph */ {"\xBF", 0, 0x232632}, /* East Asian ideograph */ {"\xB7", 0, 0x232633}, /* East Asian ideograph */ {"\xB8", 0, 0x232634}, /* East Asian ideograph */ {"\xBB", 0, 0x232636}, /* East Asian ideograph */ {"\xBA", 0, 0x232642}, /* East Asian ideograph */ {"\x97", 0, 0x232645}, /* East Asian ideograph */ {"\xB4", 0, 0x27563D}, /* East Asian ideograph */ {"\xB2", 0, 0x292768}, /* East Asian ideograph */ {"\x9A", 0, 0x2D5554}, /* East Asian ideograph */ {"\x8B", 0, 0x395577}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page229 = { marc8r_31page229_flat, 0 }; /* PAGE 228 */ struct yaz_iconv_trie_flat marc8r_31page228_flat[] = { {"\xBD", 0, 0x215568}, /* East Asian ideograph */ {"\x97", 0, 0x21556A}, /* East Asian ideograph */ {"\x9A", 0, 0x21556B}, /* East Asian ideograph */ {"\xAC", 0, 0x21556D}, /* East Asian ideograph */ {"\xAD", 0, 0x21556E}, /* East Asian ideograph */ {"\x93", 0, 0x21556F}, /* East Asian ideograph */ {"\xA3", 0, 0x215571}, /* East Asian ideograph */ {"\xA1", 0, 0x215572}, /* East Asian ideograph */ {"\x94", 0, 0x215573}, /* East Asian ideograph */ {"\xA5", 0, 0x215575}, /* East Asian ideograph */ {"\x86", 0, 0x232446}, /* East Asian ideograph */ {"\x8B", 0, 0x232447}, /* East Asian ideograph */ {"\x80", 0, 0x23244D}, /* East Asian ideograph */ {"\x9F", 0, 0x232459}, /* East Asian ideograph */ {"\xBB", 0, 0x23245C}, /* East Asian ideograph */ {"\x8C", 0, 0x23246A}, /* East Asian ideograph */ {"\xAF", 0, 0x232472}, /* East Asian ideograph */ {"\x95", 0, 0x232475}, /* East Asian ideograph */ {"\x9E", 0, 0x232524}, /* East Asian ideograph */ {"\x98", 0, 0x23252A}, /* East Asian ideograph */ {"\xA6", 0, 0x23252D}, /* East Asian ideograph */ {"\x87", 0, 0x23252E}, /* East Asian ideograph (variant of EACC 2F252E) */ {"\xB7", 0, 0x275626}, /* East Asian ideograph */ {"\xBC", 0, 0x275637}, /* East Asian ideograph */ {"\xBA", 0, 0x275639}, /* East Asian ideograph */ {"\xB9", 0, 0x29282A}, /* East Asian ideograph */ {"\x91", 0, 0x292D51}, /* East Asian ideograph */ {"\xB4", 0, 0x33625F}, /* East Asian ideograph */ {"\xB5", 0, 0x4B562B}, /* East Asian ideograph */ {"\xB8", 0, 0x4C4146}, /* East Asian ideograph */ {"\xAB", 0, 0x51496B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page228 = { marc8r_31page228_flat, 0 }; /* PAGE 227 */ struct yaz_iconv_trie_flat marc8r_31page227_flat[] = { {"\x86", 0, 0x21555D}, /* East Asian ideograph */ {"\x84", 0, 0x21555E}, /* East Asian ideograph */ {"\x89", 0, 0x21555F}, /* East Asian ideograph */ {"\x8B", 0, 0x215561}, /* East Asian ideograph */ {"\x80", 0, 0x215563}, /* East Asian ideograph */ {"\x93", 0, 0x215565}, /* East Asian ideograph */ {"\xBF", 0, 0x215569}, /* East Asian ideograph */ {"\xAE", 0, 0x21556C}, /* East Asian ideograph */ {"\xAC", 0, 0x215574}, /* East Asian ideograph */ {"\x81", 0, 0x23235E}, /* East Asian ideograph */ {"\x8D", 0, 0x232368}, /* East Asian ideograph */ {"\x90", 0, 0x232372}, /* East Asian ideograph */ {"\x87", 0, 0x232379}, /* East Asian ideograph */ {"\x82", 0, 0x23237C}, /* East Asian ideograph */ {"\x96", 0, 0x232433}, /* East Asian ideograph */ {"\x9A", 0, 0x232435}, /* East Asian ideograph */ {"\x8F", 0, 0x23243F}, /* East Asian ideograph */ {"\x8A", 0, 0x232441}, /* East Asian ideograph */ {"\xAA", 0, 0x23245F}, /* East Asian ideograph */ {"\xB4", 0, 0x232466}, /* East Asian ideograph */ {"\xB7", 0, 0x232477}, /* East Asian ideograph */ {"\xBC", 0, 0x23247A}, /* East Asian ideograph */ {"\xAB", 0, 0x23247C}, /* East Asian ideograph */ {"\xBD", 0, 0x23247D}, /* East Asian ideograph */ {"\xA7", 0, 0x23252F}, /* East Asian ideograph */ {"\xB0", 0, 0x232534}, /* East Asian ideograph */ {"\xAF", 0, 0x232535}, /* East Asian ideograph */ {"\x9D", 0, 0x275629}, /* East Asian ideograph */ {"\xA6", 0, 0x276148}, /* East Asian ideograph */ {"\xA3", 0, 0x292633}, /* East Asian ideograph */ {"\x9F", 0, 0x292651}, /* East Asian ideograph */ {"\xA0", 0, 0x292840}, /* East Asian ideograph */ {"\xA5", 0, 0x294629}, /* East Asian ideograph */ {"\x91", 0, 0x2D5036}, /* East Asian ideograph */ {"\xA1", 0, 0x3F347D}, /* East Asian ideograph */ {"\x99", 0, 0x696868}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page227 = { marc8r_31page227_flat, 0 }; /* PAGE 226 */ struct yaz_iconv_trie_flat marc8r_31page226_flat[] = { {"\xB5", 0, 0x21554C}, /* East Asian ideograph */ {"\xA6", 0, 0x21554D}, /* East Asian ideograph */ {"\x97", 0, 0x21554E}, /* East Asian ideograph */ {"\x89", 0, 0x21554F}, /* East Asian ideograph */ {"\xAC", 0, 0x215550}, /* East Asian ideograph */ {"\xAB", 0, 0x215551}, /* East Asian ideograph */ {"\x9B", 0, 0x215552}, /* East Asian ideograph */ {"\xB7", 0, 0x215553}, /* East Asian ideograph */ {"\xA1", 0, 0x215556}, /* East Asian ideograph */ {"\xA3", 0, 0x215557}, /* East Asian ideograph */ {"\xA9", 0, 0x215558}, /* East Asian ideograph */ {"\x93", 0, 0x232248}, /* East Asian ideograph */ {"\xB6", 0, 0x23224D}, /* East Asian ideograph */ {"\xB9", 0, 0x23224E}, /* East Asian ideograph */ {"\x91", 0, 0x23225C}, /* East Asian ideograph */ {"\xBD", 0, 0x23225F}, /* East Asian ideograph */ {"\x9A", 0, 0x232262}, /* East Asian ideograph */ {"\x99", 0, 0x232266}, /* East Asian ideograph */ {"\xB3", 0, 0x232269}, /* East Asian ideograph */ {"\xAD", 0, 0x232271}, /* East Asian ideograph */ {"\xBA", 0, 0x232278}, /* East Asian ideograph */ {"\xB8", 0, 0x23227C}, /* East Asian ideograph */ {"\x9C", 0, 0x232329}, /* East Asian ideograph */ {"\xB1", 0, 0x232332}, /* East Asian ideograph */ {"\x9F", 0, 0x232335}, /* East Asian ideograph */ {"\xA0", 0, 0x232336}, /* East Asian ideograph */ {"\xAE", 0, 0x232337}, /* East Asian ideograph */ {"\x86", 0, 0x23233A}, /* East Asian ideograph */ {"\x92", 0, 0x23233C}, /* East Asian ideograph */ {"\x8A", 0, 0x23233F}, /* East Asian ideograph */ {"\x8E", 0, 0x232345}, /* East Asian ideograph */ {"\xAF", 0, 0x2D5635}, /* East Asian ideograph */ {"\xA2", 0, 0x335561}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page226 = { marc8r_31page226_flat, 0 }; /* PAGE 225 */ struct yaz_iconv_trie_flat marc8r_31page225_flat[] = { {"\x82", 0, 0x21554A}, /* East Asian ideograph */ {"\xB2", 0, 0x21555A}, /* East Asian ideograph */ {"\x9E", 0, 0x21555B}, /* East Asian ideograph */ {"\xBF", 0, 0x21555C}, /* East Asian ideograph */ {"\x9C", 0, 0x215560}, /* East Asian ideograph */ {"\xB8", 0, 0x215562}, /* East Asian ideograph */ {"\x99", 0, 0x215564}, /* East Asian ideograph */ {"\x90", 0, 0x215566}, /* East Asian ideograph */ {"\xBC", 0, 0x215567}, /* East Asian ideograph */ {"\x8E", 0, 0x23224A}, /* East Asian ideograph */ {"\x84", 0, 0x23227B}, /* East Asian ideograph */ {"\x97", 0, 0x232349}, /* East Asian ideograph */ {"\xA1", 0, 0x232350}, /* East Asian ideograph */ {"\x9F", 0, 0x232353}, /* East Asian ideograph */ {"\xBA", 0, 0x232356}, /* East Asian ideograph */ {"\xB9", 0, 0x232358}, /* East Asian ideograph */ {"\xB4", 0, 0x23235C}, /* East Asian ideograph */ {"\xBB", 0, 0x23235F}, /* East Asian ideograph */ {"\xB1", 0, 0x232370}, /* East Asian ideograph */ {"\x9D", 0, 0x232371}, /* East Asian ideograph */ {"\x94", 0, 0x232375}, /* East Asian ideograph */ {"\xBD", 0, 0x23237A}, /* East Asian ideograph */ {"\x95", 0, 0x232421}, /* East Asian ideograph */ {"\xAF", 0, 0x232427}, /* East Asian ideograph */ {"\xAD", 0, 0x232429}, /* East Asian ideograph */ {"\xA8", 0, 0x232432}, /* East Asian ideograph */ {"\x93", 0, 0x23243A}, /* East Asian ideograph */ {"\x8D", 0, 0x23256C}, /* East Asian ideograph */ {"\x8B", 0, 0x275571}, /* East Asian ideograph */ {"\x8C", 0, 0x292524}, /* East Asian ideograph */ {"\x87", 0, 0x29255A}, /* East Asian ideograph */ {"\x89", 0, 0x292564}, /* East Asian ideograph */ {"\x88", 0, 0x705D5C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page225 = { marc8r_31page225_flat, 0 }; /* PAGE 224 */ struct yaz_iconv_trie_flat marc8r_31page224_flat[] = { {"\xA0", 0, 0x215535}, /* East Asian ideograph */ {"\xA9", 0, 0x215536}, /* East Asian ideograph */ {"\x85", 0, 0x215539}, /* East Asian ideograph */ {"\x81", 0, 0x21553A}, /* East Asian ideograph */ {"\xAF", 0, 0x21553C}, /* East Asian ideograph */ {"\xB1", 0, 0x21553E}, /* East Asian ideograph */ {"\x8C", 0, 0x215543}, /* East Asian ideograph */ {"\x9C", 0, 0x215544}, /* East Asian ideograph */ {"\x8A", 0, 0x215545}, /* East Asian ideograph */ {"\xB2", 0, 0x215546}, /* East Asian ideograph */ {"\x8F", 0, 0x227E41}, /* East Asian ideograph */ {"\xB9", 0, 0x227E43}, /* East Asian ideograph */ {"\xAA", 0, 0x227E52}, /* East Asian ideograph */ {"\xBC", 0, 0x227E56}, /* East Asian ideograph */ {"\xB6", 0, 0x227E57}, /* East Asian ideograph */ {"\xA1", 0, 0x227E5A}, /* East Asian ideograph */ {"\x86", 0, 0x227E60}, /* East Asian ideograph */ {"\xAB", 0, 0x227E63}, /* East Asian ideograph */ {"\xA2", 0, 0x227E6B}, /* East Asian ideograph */ {"\x98", 0, 0x227E71}, /* East Asian ideograph */ {"\xA5", 0, 0x227E72}, /* East Asian ideograph */ {"\x8E", 0, 0x227E79}, /* East Asian ideograph */ {"\x93", 0, 0x227E7B}, /* East Asian ideograph */ {"\x96", 0, 0x227E7D}, /* East Asian ideograph */ {"\xBD", 0, 0x232223}, /* East Asian ideograph */ {"\x89", 0, 0x232229}, /* East Asian ideograph */ {"\x9F", 0, 0x23222A}, /* East Asian ideograph */ {"\xB3", 0, 0x23223C}, /* East Asian ideograph */ {"\x91", 0, 0x232243}, /* East Asian ideograph */ {"\xB7", 0, 0x2D3C49}, /* East Asian ideograph */ {"\xB4", 0, 0x2D3C7C}, /* East Asian ideograph */ {"\x80", 0, 0x2D546F}, /* East Asian ideograph */ {"\x94", 0, 0x2D5573}, /* East Asian ideograph */ {"\xBB", 0, 0x2D625F}, /* East Asian ideograph */ {"\xB0", 0, 0x2E7D24}, /* East Asian ideograph */ {"\x87", 0, 0x347D24}, /* East Asian ideograph */ {"\x9D", 0, 0x395568}, /* East Asian ideograph */ {"\xB8", 0, 0x4B496B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page224 = { marc8r_31page224_flat, 0 }; /* PAGE 223 */ struct yaz_iconv_trie_flat marc8r_31page223_flat[] = { {"\x8E", 0, 0x215524}, /* East Asian ideograph */ {"\x98", 0, 0x215525}, /* East Asian ideograph */ {"\x9E", 0, 0x215526}, /* East Asian ideograph */ {"\xA2", 0, 0x215528}, /* East Asian ideograph */ {"\x96", 0, 0x215529}, /* East Asian ideograph */ {"\xA7", 0, 0x21552A}, /* East Asian ideograph */ {"\xAB", 0, 0x21552B}, /* East Asian ideograph */ {"\x92", 0, 0x21552C}, /* East Asian ideograph (variant of EACC 4B552C) */ {"\x8A", 0, 0x21552D}, /* East Asian ideograph */ {"\x93", 0, 0x21552E}, /* East Asian ideograph */ {"\xA0", 0, 0x21552F}, /* East Asian ideograph */ {"\x89", 0, 0x215530}, /* East Asian ideograph */ {"\xBD", 0, 0x21553F}, /* East Asian ideograph */ {"\xA8", 0, 0x227D62}, /* East Asian ideograph */ {"\xAD", 0, 0x227D67}, /* East Asian ideograph */ {"\xB0", 0, 0x227D72}, /* East Asian ideograph */ {"\x8F", 0, 0x227D7A}, /* East Asian ideograph */ {"\x95", 0, 0x227D7C}, /* East Asian ideograph */ {"\x99", 0, 0x227E22}, /* East Asian ideograph */ {"\xA6", 0, 0x227E23}, /* East Asian ideograph */ {"\x87", 0, 0x227E25}, /* East Asian ideograph */ {"\xB9", 0, 0x227E26}, /* East Asian ideograph */ {"\xA9", 0, 0x227E2B}, /* East Asian ideograph */ {"\x9B", 0, 0x227E2F}, /* East Asian ideograph */ {"\xAA", 0, 0x227E33}, /* East Asian ideograph */ {"\x9C", 0, 0x227E37}, /* East Asian ideograph */ {"\x9F", 0, 0x227E38}, /* East Asian ideograph */ {"\xBF", 0, 0x227E6A}, /* East Asian ideograph */ {"\x9A", 0, 0x232236}, /* East Asian ideograph */ {"\xB7", 0, 0x274B29}, /* East Asian ideograph */ {"\xB1", 0, 0x275541}, /* East Asian ideograph */ {"\xB4", 0, 0x275555}, /* East Asian ideograph */ {"\xB2", 0, 0x27556C}, /* East Asian ideograph */ {"\xBA", 0, 0x276247}, /* East Asian ideograph */ {"\xB3", 0, 0x292375}, /* East Asian ideograph */ {"\xBC", 0, 0x29243A}, /* East Asian ideograph */ {"\xB8", 0, 0x292574}, /* East Asian ideograph */ {"\xB6", 0, 0x292658}, /* East Asian ideograph */ {"\x86", 0, 0x2D555A}, /* East Asian ideograph */ {"\x85", 0, 0x2D555B}, /* East Asian ideograph */ {"\xB5", 0, 0x4D222A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page223 = { marc8r_31page223_flat, 0 }; /* PAGE 222 */ struct yaz_iconv_trie_flat marc8r_31page222_flat[] = { {"\x92", 0, 0x215473}, /* East Asian ideograph */ {"\x8A", 0, 0x215474}, /* East Asian ideograph */ {"\x94", 0, 0x215476}, /* East Asian ideograph */ {"\x90", 0, 0x215477}, /* East Asian ideograph */ {"\x89", 0, 0x215478}, /* East Asian ideograph */ {"\x80", 0, 0x21547D}, /* East Asian ideograph */ {"\x8F", 0, 0x215522}, /* East Asian ideograph */ {"\xB8", 0, 0x215527}, /* East Asian ideograph */ {"\xB7", 0, 0x215531}, /* East Asian ideograph */ {"\xBC", 0, 0x215532}, /* East Asian ideograph */ {"\xBB", 0, 0x215533}, /* East Asian ideograph */ {"\x84", 0, 0x227D2B}, /* East Asian ideograph */ {"\x91", 0, 0x227D2E}, /* East Asian ideograph */ {"\x96", 0, 0x227D3B}, /* East Asian ideograph */ {"\x8D", 0, 0x227D4A}, /* East Asian ideograph */ {"\x83", 0, 0x227D4D}, /* East Asian ideograph (variant of EACC 4C7D4D) */ {"\x88", 0, 0x227D53}, /* East Asian ideograph */ {"\x87", 0, 0x227D5F}, /* East Asian ideograph */ {"\xB3", 0, 0x227D6D}, /* East Asian ideograph */ {"\xB5", 0, 0x227D7E}, /* East Asian ideograph */ {"\xBF", 0, 0x227E21}, /* East Asian ideograph */ {"\xA3", 0, 0x274537}, /* East Asian ideograph */ {"\xA6", 0, 0x274A5E}, /* East Asian ideograph */ {"\x85", 0, 0x275023}, /* East Asian ideograph */ {"\x9A", 0, 0x275528}, /* East Asian ideograph */ {"\xA4", 0, 0x275553}, /* East Asian ideograph */ {"\xAA", 0, 0x275563}, /* East Asian ideograph */ {"\xAB", 0, 0x27556E}, /* East Asian ideograph */ {"\xA1", 0, 0x275576}, /* East Asian ideograph */ {"\xAF", 0, 0x275635}, /* East Asian ideograph */ {"\xA5", 0, 0x284B43}, /* East Asian ideograph */ {"\xA7", 0, 0x285323}, /* East Asian ideograph */ {"\xAD", 0, 0x29233C}, /* East Asian ideograph */ {"\xAE", 0, 0x29233D}, /* East Asian ideograph */ {"\x9C", 0, 0x29247D}, /* East Asian ideograph */ {"\xA8", 0, 0x292546}, /* East Asian ideograph */ {"\x9B", 0, 0x29254B}, /* East Asian ideograph */ {"\xAC", 0, 0x292567}, /* East Asian ideograph */ {"\x9E", 0, 0x292571}, /* East Asian ideograph */ {"\x9F", 0, 0x292657}, /* East Asian ideograph */ {"\xA0", 0, 0x292661}, /* East Asian ideograph */ {"\xA9", 0, 0x292668}, /* East Asian ideograph */ {"\x98", 0, 0x2D552D}, /* East Asian ideograph */ {"\xBD", 0, 0x2D5547}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page222 = { marc8r_31page222_flat, 0 }; /* PAGE 221 */ struct yaz_iconv_trie_flat marc8r_31page221_flat[] = { {"\x85", 0, 0x215461}, /* East Asian ideograph */ {"\x89", 0, 0x215462}, /* East Asian ideograph */ {"\x84", 0, 0x215466}, /* East Asian ideograph */ {"\x82", 0, 0x215468}, /* East Asian ideograph */ {"\x81", 0, 0x21546C}, /* East Asian ideograph */ {"\xAB", 0, 0x215472}, /* East Asian ideograph */ {"\xB8", 0, 0x215475}, /* East Asian ideograph */ {"\xB5", 0, 0x215479}, /* East Asian ideograph */ {"\xB4", 0, 0x21547A}, /* East Asian ideograph */ {"\xB6", 0, 0x21547B}, /* East Asian ideograph */ {"\xB1", 0, 0x21547C}, /* East Asian ideograph */ {"\x97", 0, 0x21547E}, /* East Asian ideograph */ {"\xB9", 0, 0x215523}, /* East Asian ideograph */ {"\x80", 0, 0x227C5C}, /* East Asian ideograph */ {"\xBA", 0, 0x227C63}, /* East Asian ideograph */ {"\x87", 0, 0x227C67}, /* East Asian ideograph */ {"\x94", 0, 0x227C6E}, /* East Asian ideograph */ {"\x90", 0, 0x227C7B}, /* East Asian ideograph */ {"\x8C", 0, 0x227D21}, /* East Asian ideograph */ {"\xB3", 0, 0x227D26}, /* East Asian ideograph */ {"\xA8", 0, 0x227D29}, /* East Asian ideograph */ {"\x9B", 0, 0x227D35}, /* East Asian ideograph */ {"\xA2", 0, 0x227D3F}, /* East Asian ideograph */ {"\xAC", 0, 0x227D40}, /* East Asian ideograph */ {"\xBC", 0, 0x227D48}, /* East Asian ideograph */ {"\xAF", 0, 0x227D52}, /* East Asian ideograph */ {"\x92", 0, 0x227D54}, /* East Asian ideograph */ {"\x96", 0, 0x227D56}, /* East Asian ideograph */ {"\x9A", 0, 0x227D58}, /* East Asian ideograph */ {"\x9D", 0, 0x227D76}, /* East Asian ideograph */ {"\xAD", 0, 0x27447C}, /* East Asian ideograph */ {"\x83", 0, 0x275030}, /* East Asian ideograph */ {"\xA7", 0, 0x275177}, /* East Asian ideograph */ {"\x8E", 0, 0x275529}, /* East Asian ideograph */ {"\x91", 0, 0x29252D}, /* East Asian ideograph */ {"\x8F", 0, 0x292752}, /* East Asian ideograph */ {"\x88", 0, 0x2D4450}, /* East Asian ideograph */ {"\x86", 0, 0x2D5461}, /* East Asian ideograph */ {"\x98", 0, 0x2D5476}, /* East Asian ideograph */ {"\x9C", 0, 0x2E7C2E}, /* East Asian ideograph */ {"\xB2", 0, 0x4B5521}, /* East Asian ideograph */ {"\x95", 0, 0x4C5175}, /* East Asian ideograph */ {"\xA3", 0, 0x4C7D6A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page221 = { marc8r_31page221_flat, 0 }; /* PAGE 220 */ struct yaz_iconv_trie_flat marc8r_31page220_flat[] = { {"\xA7", 0, 0x215460}, /* East Asian ideograph */ {"\xA3", 0, 0x215463}, /* East Asian ideograph */ {"\x9B", 0, 0x215464}, /* East Asian ideograph */ {"\xA6", 0, 0x215465}, /* East Asian ideograph */ {"\xA5", 0, 0x215467}, /* East Asian ideograph */ {"\x9C", 0, 0x215469}, /* East Asian ideograph */ {"\x97", 0, 0x21546A}, /* East Asian ideograph */ {"\xB1", 0, 0x21546B}, /* East Asian ideograph */ {"\x93", 0, 0x21546D}, /* East Asian ideograph */ {"\x94", 0, 0x21546E}, /* East Asian ideograph */ {"\x91", 0, 0x21546F}, /* East Asian ideograph */ {"\x9E", 0, 0x215470}, /* East Asian ideograph */ {"\x9F", 0, 0x215471}, /* East Asian ideograph */ {"\x99", 0, 0x227C55}, /* East Asian ideograph */ {"\xBE", 0, 0x227C57}, /* East Asian ideograph */ {"\xA0", 0, 0x227C5A}, /* East Asian ideograph */ {"\x90", 0, 0x227C5B}, /* East Asian ideograph */ {"\xAA", 0, 0x227C5F}, /* East Asian ideograph */ {"\xB7", 0, 0x227C60}, /* East Asian ideograph */ {"\xAF", 0, 0x227C62}, /* East Asian ideograph */ {"\xA4", 0, 0x227C64}, /* East Asian ideograph */ {"\x95", 0, 0x227C65}, /* East Asian ideograph */ {"\xBA", 0, 0x227C68}, /* East Asian ideograph */ {"\xB4", 0, 0x227C69}, /* East Asian ideograph */ {"\xA2", 0, 0x227C6A}, /* East Asian ideograph */ {"\x92", 0, 0x227C6D}, /* East Asian ideograph */ {"\xAB", 0, 0x227C71}, /* East Asian ideograph */ {"\x98", 0, 0x227C72}, /* East Asian ideograph */ {"\xA1", 0, 0x227C73}, /* East Asian ideograph */ {"\xB6", 0, 0x227C75}, /* East Asian ideograph */ {"\xB3", 0, 0x227C7C}, /* East Asian ideograph */ {"\xBB", 0, 0x227D22}, /* East Asian ideograph */ {"\xBD", 0, 0x227D24}, /* East Asian ideograph */ {"\x8B", 0, 0x27552A}, /* East Asian ideograph */ {"\x87", 0, 0x27554D}, /* East Asian ideograph */ {"\x8E", 0, 0x275564}, /* East Asian ideograph */ {"\x8D", 0, 0x275567}, /* East Asian ideograph */ {"\xB9", 0, 0x27563B}, /* East Asian ideograph */ {"\x8F", 0, 0x27563C}, /* East Asian ideograph */ {"\x8C", 0, 0x287E61}, /* East Asian ideograph */ {"\x81", 0, 0x292535}, /* East Asian ideograph */ {"\x88", 0, 0x292765}, /* East Asian ideograph */ {"\x85", 0, 0x4B3354}, /* East Asian ideograph */ {"\x8A", 0, 0x705C43}, /* East Asian ideograph */ {"\x84", 0, 0x705C50}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page220 = { marc8r_31page220_flat, 0 }; /* PAGE 219 */ struct yaz_iconv_trie_flat marc8r_31page219_flat[] = { {"\x92", 0, 0x215451}, /* East Asian ideograph */ {"\x8B", 0, 0x215452}, /* East Asian ideograph */ {"\x8D", 0, 0x215453}, /* East Asian ideograph */ {"\xB3", 0, 0x215454}, /* East Asian ideograph */ {"\x9D", 0, 0x215455}, /* East Asian ideograph */ {"\x99", 0, 0x215456}, /* East Asian ideograph */ {"\xBD", 0, 0x215457}, /* East Asian ideograph */ {"\xAD", 0, 0x215458}, /* East Asian ideograph */ {"\xAC", 0, 0x215459}, /* East Asian ideograph */ {"\xA5", 0, 0x21545A}, /* East Asian ideograph */ {"\x9F", 0, 0x21545B}, /* East Asian ideograph */ {"\xBB", 0, 0x21545C}, /* East Asian ideograph */ {"\xB1", 0, 0x21545D}, /* East Asian ideograph */ {"\xB9", 0, 0x21545E}, /* East Asian ideograph */ {"\x88", 0, 0x216330}, /* East Asian ideograph */ {"\x8E", 0, 0x227C24}, /* East Asian ideograph */ {"\x91", 0, 0x227C25}, /* East Asian ideograph */ {"\x8F", 0, 0x227C27}, /* East Asian ideograph */ {"\x84", 0, 0x227C28}, /* East Asian ideograph */ {"\x83", 0, 0x227C2D}, /* East Asian ideograph */ {"\x8A", 0, 0x227C2E}, /* East Asian ideograph */ {"\xAF", 0, 0x227C31}, /* East Asian ideograph */ {"\xA7", 0, 0x227C34}, /* East Asian ideograph */ {"\xAB", 0, 0x227C38}, /* East Asian ideograph */ {"\xB0", 0, 0x227C3A}, /* East Asian ideograph */ {"\xA4", 0, 0x227C3C}, /* East Asian ideograph */ {"\x9A", 0, 0x227C3F}, /* East Asian ideograph */ {"\xA3", 0, 0x227C42}, /* East Asian ideograph */ {"\xB7", 0, 0x227C44}, /* East Asian ideograph */ {"\xAE", 0, 0x227C45}, /* East Asian ideograph (variant of EACC 4C7C45) */ {"\xA9", 0, 0x227C46}, /* East Asian ideograph */ {"\xBC", 0, 0x227C49}, /* East Asian ideograph */ {"\xA8", 0, 0x227C4C}, /* East Asian ideograph */ {"\xB4", 0, 0x227C4E}, /* East Asian ideograph */ {"\xA1", 0, 0x227C50}, /* East Asian ideograph */ {"\xAA", 0, 0x227C53}, /* East Asian ideograph */ {"\x82", 0, 0x275033}, /* East Asian ideograph */ {"\x98", 0, 0x275568}, /* East Asian ideograph */ {"\x9C", 0, 0x27557C}, /* East Asian ideograph */ {"\xA6", 0, 0x27563A}, /* East Asian ideograph */ {"\x97", 0, 0x292577}, /* East Asian ideograph */ {"\xBE", 0, 0x355E76}, /* East Asian ideograph */ {"\xB8", 0, 0x4B5631}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page219 = { marc8r_31page219_flat, 0 }; /* PAGE 218 */ struct yaz_iconv_trie_flat marc8r_31page218_flat[] = { {"\x87", 0, 0x215448}, /* East Asian ideograph */ {"\x98", 0, 0x215449}, /* East Asian ideograph */ {"\x99", 0, 0x21544A}, /* East Asian ideograph */ {"\xA6", 0, 0x21544B}, /* East Asian ideograph */ {"\xAE", 0, 0x21544C}, /* East Asian ideograph */ {"\xAF", 0, 0x21544D}, /* East Asian ideograph */ {"\xB1", 0, 0x21544E}, /* East Asian ideograph */ {"\xB2", 0, 0x21544F}, /* East Asian ideograph */ {"\xBE", 0, 0x215450}, /* East Asian ideograph */ {"\x88", 0, 0x227B42}, /* East Asian ideograph */ {"\x89", 0, 0x227B43}, /* East Asian ideograph */ {"\x84", 0, 0x227B45}, /* East Asian ideograph */ {"\x80", 0, 0x227B47}, /* East Asian ideograph */ {"\x81", 0, 0x227B48}, /* East Asian ideograph */ {"\x85", 0, 0x227B4A}, /* East Asian ideograph */ {"\x8B", 0, 0x227B4B}, /* East Asian ideograph */ {"\x8F", 0, 0x227B50}, /* East Asian ideograph */ {"\x8E", 0, 0x227B53}, /* East Asian ideograph */ {"\x96", 0, 0x227B56}, /* East Asian ideograph */ {"\x97", 0, 0x227B57}, /* East Asian ideograph */ {"\x9A", 0, 0x227B5E}, /* East Asian ideograph */ {"\x9F", 0, 0x227B62}, /* East Asian ideograph */ {"\xA2", 0, 0x227B67}, /* East Asian ideograph */ {"\xA8", 0, 0x227B6B}, /* East Asian ideograph */ {"\xAD", 0, 0x227B6F}, /* East Asian ideograph */ {"\xB8", 0, 0x227B77}, /* East Asian ideograph */ {"\xBF", 0, 0x227B7D}, /* East Asian ideograph */ {"\xB0", 0, 0x27544E}, /* East Asian ideograph */ {"\xBA", 0, 0x275631}, /* East Asian ideograph */ {"\xBD", 0, 0x276030}, /* East Asian ideograph */ {"\xB4", 0, 0x2D342E}, /* East Asian ideograph */ {"\x8A", 0, 0x2D5447}, /* East Asian ideograph */ {"\xB7", 0, 0x2D5959}, /* East Asian ideograph */ {"\xAA", 0, 0x33456D}, /* East Asian ideograph */ {"\xA4", 0, 0x344177}, /* East Asian ideograph */ {"\xAB", 0, 0x39456D}, /* East Asian ideograph */ {"\xA3", 0, 0x3F456D}, /* East Asian ideograph */ {"\xB6", 0, 0x3F5959}, /* East Asian ideograph */ {"\xB3", 0, 0x4B5959}, /* East Asian ideograph */ {"\x9D", 0, 0x69675C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page218 = { marc8r_31page218_flat, 0 }; /* PAGE 217 */ struct yaz_iconv_trie_dir marc8r_31page217_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x21542F} /* East Asian ideograph */, {0, 0, 0x227A70} /* East Asian ideograph */, {0, 0, 0x215430} /* East Asian ideograph */, {0, 0, 0x227A74} /* East Asian ideograph */, {0, 0, 0x227A75} /* East Asian ideograph */, {0, 0, 0x215431} /* East Asian ideograph */, {0, 0, 0x275B53} /* East Asian ideograph */, {0, 0, 0x215432} /* East Asian ideograph */, {0, 0, 0x215433} /* East Asian ideograph */, {0, 0, 0x215434} /* East Asian ideograph */, {0, 0, 0x215435} /* East Asian ideograph */, {0, 0, 0x227A77} /* East Asian ideograph */, {0, 0, 0x215436} /* East Asian ideograph */, {0, 0, 0x215437} /* East Asian ideograph */, {0, 0, 0x4B5437} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215438} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215439} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x21543A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x2D5D65} /* East Asian ideograph */, {0, 0, 0x4B5D65} /* East Asian ideograph */, {0, 0, 0x2D6079} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x21543B} /* East Asian ideograph */, {0, 0, 0x21543C} /* East Asian ideograph */, {0, 0, 0x227B27} /* East Asian ideograph */, {0, 0, 0x21543D} /* East Asian ideograph */, {0, 0, 0x21543E} /* East Asian ideograph */, {0, 0, 0x227B29} /* East Asian ideograph */, {0, 0, 0x335446} /* East Asian ideograph */, {0, 0, 0x21543F} /* East Asian ideograph */, {0, 0, 0x4C4177} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x215443} /* East Asian ideograph */, {0, 0, 0x2D5446} /* East Asian ideograph */, {0, 0, 0x215440} /* East Asian ideograph */, {0, 0, 0x215441} /* East Asian ideograph */, {0, 0, 0x215442} /* East Asian ideograph */, {0, 0, 0x227B2E} /* East Asian ideograph */, {0, 0, 0x51456D} /* East Asian ideograph */, {0, 0, 0x227B2F} /* East Asian ideograph */, {0, 0, 0x27544B} /* East Asian ideograph */, {0, 0, 0x27544A} /* East Asian ideograph */, {0, 0, 0x227B3A} /* East Asian ideograph */, {0, 0, 0x227B35} /* East Asian ideograph */, {0, 0, 0x227B36} /* East Asian ideograph */, {0, 0, 0x215445} /* East Asian ideograph */, {0, 0, 0x215447} /* East Asian ideograph */, {0, 0, 0x215444} /* East Asian ideograph */, {0, 0, 0x227B32} /* East Asian ideograph */, {0, 0, 0x215446} /* East Asian ideograph */, {0, 0, 0x227B34} /* East Asian ideograph */, {0, 0, 0x4B456D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x707438} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page217 = { 0, marc8r_31page217_dir }; /* PAGE 216 */ struct yaz_iconv_trie_flat marc8r_31page216_flat[] = { {"\x86", 0, 0x215373}, /* East Asian ideograph */ {"\x83", 0, 0x215375}, /* East Asian ideograph */ {"\x80", 0, 0x215376}, /* East Asian ideograph */ {"\x82", 0, 0x215377}, /* East Asian ideograph */ {"\x89", 0, 0x21537A}, /* East Asian ideograph */ {"\x8D", 0, 0x21537C}, /* East Asian ideograph */ {"\x8F", 0, 0x21537D}, /* East Asian ideograph */ {"\x98", 0, 0x21537E}, /* East Asian ideograph */ {"\x9A", 0, 0x215421}, /* East Asian ideograph */ {"\x9F", 0, 0x215422}, /* East Asian ideograph */ {"\xA3", 0, 0x215423}, /* East Asian ideograph */ {"\xA5", 0, 0x215424}, /* East Asian ideograph */ {"\xA8", 0, 0x215425}, /* East Asian ideograph */ {"\xAA", 0, 0x215426}, /* East Asian ideograph */ {"\xAC", 0, 0x215427}, /* East Asian ideograph */ {"\xAD", 0, 0x215428}, /* East Asian ideograph */ {"\xB3", 0, 0x215429}, /* East Asian ideograph */ {"\xBA", 0, 0x21542B}, /* East Asian ideograph */ {"\xBB", 0, 0x21542C}, /* East Asian ideograph */ {"\xBC", 0, 0x21542D}, /* East Asian ideograph */ {"\xBE", 0, 0x21542E}, /* East Asian ideograph */ {"\x81", 0, 0x227A38}, /* East Asian ideograph */ {"\x8C", 0, 0x227A39}, /* East Asian ideograph */ {"\x8A", 0, 0x227A3A}, /* East Asian ideograph */ {"\x84", 0, 0x227A3B}, /* East Asian ideograph */ {"\x91", 0, 0x227A40}, /* East Asian ideograph */ {"\x8E", 0, 0x227A41}, /* East Asian ideograph */ {"\x90", 0, 0x227A43}, /* East Asian ideograph */ {"\x9B", 0, 0x227A4B}, /* East Asian ideograph */ {"\x9D", 0, 0x227A4F}, /* East Asian ideograph */ {"\x9E", 0, 0x227A53}, /* East Asian ideograph */ {"\xA0", 0, 0x227A56}, /* East Asian ideograph */ {"\xA2", 0, 0x227A57}, /* East Asian ideograph */ {"\xA7", 0, 0x227A5B}, /* East Asian ideograph */ {"\xAF", 0, 0x227A60}, /* East Asian ideograph */ {"\xB2", 0, 0x227A65}, /* East Asian ideograph */ {"\xB6", 0, 0x227A68}, /* East Asian ideograph */ {"\xB4", 0, 0x275163}, /* East Asian ideograph */ {"\x88", 0, 0x2D537E}, /* East Asian ideograph */ {"\x99", 0, 0x335347}, /* East Asian ideograph */ {"\x95", 0, 0x3A7970}, /* East Asian ideograph */ {"\x93", 0, 0x4B5422}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page216 = { marc8r_31page216_flat, 0 }; /* PAGE 215 */ struct yaz_iconv_trie_flat marc8r_31page215_flat[] = { {"\x80", 0, 0x215366}, /* East Asian ideograph */ {"\x8F", 0, 0x215367}, /* East Asian ideograph */ {"\x8A", 0, 0x215369}, /* East Asian ideograph */ {"\x88", 0, 0x21536A}, /* East Asian ideograph */ {"\x9D", 0, 0x21536B}, /* East Asian ideograph */ {"\xA0", 0, 0x21536C}, /* East Asian ideograph */ {"\x9B", 0, 0x21536D}, /* East Asian ideograph */ {"\x9A", 0, 0x21536E}, /* East Asian ideograph */ {"\x9C", 0, 0x21536F}, /* East Asian ideograph */ {"\xB3", 0, 0x215370}, /* East Asian ideograph */ {"\xA9", 0, 0x215371}, /* East Asian ideograph */ {"\xA8", 0, 0x215372}, /* East Asian ideograph */ {"\xBA", 0, 0x215374}, /* East Asian ideograph */ {"\xBF", 0, 0x215378}, /* East Asian ideograph */ {"\xBD", 0, 0x215379}, /* East Asian ideograph */ {"\xBE", 0, 0x21537B}, /* East Asian ideograph */ {"\x82", 0, 0x22794D}, /* East Asian ideograph */ {"\x8B", 0, 0x227951}, /* East Asian ideograph */ {"\x86", 0, 0x227952}, /* East Asian ideograph */ {"\x83", 0, 0x227959}, /* East Asian ideograph */ {"\x9F", 0, 0x22796A}, /* East Asian ideograph */ {"\xA3", 0, 0x22796B}, /* East Asian ideograph */ {"\x98", 0, 0x227970}, /* East Asian ideograph */ {"\x95", 0, 0x227975}, /* East Asian ideograph */ {"\x97", 0, 0x227977}, /* East Asian ideograph */ {"\xAA", 0, 0x22797C}, /* East Asian ideograph */ {"\xA6", 0, 0x22797D}, /* East Asian ideograph */ {"\xB5", 0, 0x227A2C}, /* East Asian ideograph */ {"\xB0", 0, 0x227A2E}, /* East Asian ideograph */ {"\xB4", 0, 0x227A2F}, /* East Asian ideograph */ {"\xB7", 0, 0x227A33}, /* East Asian ideograph */ {"\xBB", 0, 0x227A37}, /* East Asian ideograph */ {"\x91", 0, 0x27537D}, /* East Asian ideograph */ {"\x93", 0, 0x2D535E}, /* East Asian ideograph */ {"\xB8", 0, 0x4B6159}, /* East Asian ideograph */ {"\xA4", 0, 0x696733}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page215 = { marc8r_31page215_flat, 0 }; /* PAGE 214 */ struct yaz_iconv_trie_flat marc8r_31page214_flat[] = { {"\x95", 0, 0x215353}, /* East Asian ideograph */ {"\x94", 0, 0x215354}, /* East Asian ideograph */ {"\x8B", 0, 0x215355}, /* East Asian ideograph */ {"\x91", 0, 0x215356}, /* East Asian ideograph */ {"\x90", 0, 0x215357}, /* East Asian ideograph */ {"\x8E", 0, 0x215358}, /* East Asian ideograph */ {"\x86", 0, 0x21535A}, /* East Asian ideograph */ {"\xB1", 0, 0x21535C}, /* East Asian ideograph */ {"\xB0", 0, 0x21535D}, /* East Asian ideograph */ {"\xB8", 0, 0x21535E}, /* East Asian ideograph */ {"\xA5", 0, 0x21535F}, /* East Asian ideograph */ {"\xAE", 0, 0x215360}, /* East Asian ideograph */ {"\xB3", 0, 0x215361}, /* East Asian ideograph */ {"\xAB", 0, 0x215362}, /* East Asian ideograph */ {"\xB9", 0, 0x215363}, /* East Asian ideograph */ {"\xBA", 0, 0x215364}, /* East Asian ideograph */ {"\xA6", 0, 0x215365}, /* East Asian ideograph */ {"\xBF", 0, 0x215368}, /* East Asian ideograph */ {"\x9A", 0, 0x22786A}, /* East Asian ideograph */ {"\x88", 0, 0x22786D}, /* East Asian ideograph */ {"\x8C", 0, 0x227877}, /* East Asian ideograph */ {"\x93", 0, 0x22787C}, /* East Asian ideograph */ {"\x81", 0, 0x22787D}, /* East Asian ideograph */ {"\x8D", 0, 0x227925}, /* East Asian ideograph */ {"\xA0", 0, 0x227932}, /* East Asian ideograph */ {"\xA9", 0, 0x22793B}, /* East Asian ideograph */ {"\xBC", 0, 0x22793C}, /* East Asian ideograph */ {"\xA1", 0, 0x227941}, /* East Asian ideograph */ {"\xB6", 0, 0x227946}, /* East Asian ideograph */ {"\xB4", 0, 0x227947}, /* East Asian ideograph */ {"\xA7", 0, 0x227948}, /* East Asian ideograph */ {"\xAF", 0, 0x22794B}, /* East Asian ideograph */ {"\xBB", 0, 0x275371}, /* East Asian ideograph */ {"\x8A", 0, 0x27537E}, /* East Asian ideograph */ {"\xBE", 0, 0x276144}, /* East Asian ideograph */ {"\xBD", 0, 0x4C7959}, /* East Asian ideograph */ {"\x9F", 0, 0x4C796B}, /* East Asian ideograph */ {"\xAD", 0, 0x4D6047}, /* East Asian ideograph */ {"\x99", 0, 0x706B6A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page214 = { marc8r_31page214_flat, 0 }; /* PAGE 213 */ struct yaz_iconv_trie_flat marc8r_31page213_flat[] = { {"\x82", 0, 0x215343}, /* East Asian ideograph */ {"\x85", 0, 0x215344}, /* East Asian ideograph */ {"\x86", 0, 0x215349}, /* East Asian ideograph */ {"\x8A", 0, 0x21534C}, /* East Asian ideograph */ {"\x88", 0, 0x21534D}, /* East Asian ideograph */ {"\xAB", 0, 0x21534E}, /* East Asian ideograph */ {"\xAF", 0, 0x21534F}, /* East Asian ideograph */ {"\x96", 0, 0x215350}, /* East Asian ideograph */ {"\xA9", 0, 0x215352}, /* East Asian ideograph */ {"\xB9", 0, 0x215359}, /* East Asian ideograph */ {"\xBE", 0, 0x21535B}, /* East Asian ideograph */ {"\x83", 0, 0x22783C}, /* East Asian ideograph */ {"\x9D", 0, 0x227849}, /* East Asian ideograph */ {"\x98", 0, 0x22784B}, /* East Asian ideograph */ {"\xB0", 0, 0x227850}, /* East Asian ideograph */ {"\xA4", 0, 0x227854}, /* East Asian ideograph */ {"\x9B", 0, 0x227855}, /* East Asian ideograph */ {"\xAA", 0, 0x227860}, /* East Asian ideograph */ {"\x9E", 0, 0x227861}, /* East Asian ideograph */ {"\xA1", 0, 0x227864}, /* East Asian ideograph */ {"\x97", 0, 0x227866}, /* East Asian ideograph */ {"\xBA", 0, 0x227869}, /* East Asian ideograph */ {"\x89", 0, 0x27534D}, /* East Asian ideograph */ {"\x91", 0, 0x275365}, /* East Asian ideograph */ {"\x93", 0, 0x275378}, /* East Asian ideograph */ {"\xB8", 0, 0x27537A}, /* East Asian ideograph */ {"\x8D", 0, 0x27537B}, /* East Asian ideograph */ {"\x90", 0, 0x27537C}, /* East Asian ideograph */ {"\x8F", 0, 0x275422}, /* East Asian ideograph (duplicate simplified) */ {"\xB6", 0, 0x287941}, /* East Asian ideograph */ {"\x94", 0, 0x287A56}, /* East Asian ideograph */ {"\xAC", 0, 0x2D5340}, /* East Asian ideograph */ {"\x87", 0, 0x2D5344}, /* East Asian ideograph */ {"\x9A", 0, 0x2D5361}, /* East Asian ideograph */ {"\xA3", 0, 0x2D6F7D}, /* East Asian ideograph */ {"\xB2", 0, 0x4B3B52}, /* East Asian ideograph */ {"\xB3", 0, 0x4B5365}, /* East Asian ideograph */ {"\x8E", 0, 0x706B5B}, /* East Asian ideograph */ {"\x92", 0, 0x706B5F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page213 = { marc8r_31page213_flat, 0 }; /* PAGE 212 */ struct yaz_iconv_trie_flat marc8r_31page212_flat[] = { {"\x96", 0, 0x215337}, /* East Asian ideograph */ {"\x8C", 0, 0x215338}, /* East Asian ideograph */ {"\xA5", 0, 0x215339}, /* East Asian ideograph */ {"\x9A", 0, 0x21533A}, /* East Asian ideograph */ {"\xA1", 0, 0x21533B}, /* East Asian ideograph */ {"\x83", 0, 0x21533C}, /* East Asian ideograph */ {"\x9B", 0, 0x21533D}, /* East Asian ideograph */ {"\x84", 0, 0x21533E}, /* East Asian ideograph */ {"\x8E", 0, 0x21533F}, /* East Asian ideograph */ {"\x9E", 0, 0x215340}, /* East Asian ideograph */ {"\xA4", 0, 0x215341}, /* East Asian ideograph */ {"\xB0", 0, 0x215342}, /* East Asian ideograph */ {"\xB1", 0, 0x215345}, /* East Asian ideograph */ {"\xB4", 0, 0x215346}, /* East Asian ideograph */ {"\xAD", 0, 0x215347}, /* East Asian ideograph */ {"\xBD", 0, 0x215348}, /* East Asian ideograph */ {"\xB3", 0, 0x21534A}, /* East Asian ideograph */ {"\xB8", 0, 0x21534B}, /* East Asian ideograph */ {"\xA0", 0, 0x227773}, /* East Asian ideograph */ {"\x9F", 0, 0x22777B}, /* East Asian ideograph */ {"\x82", 0, 0x22777D}, /* East Asian ideograph */ {"\x99", 0, 0x227827}, /* East Asian ideograph */ {"\x9D", 0, 0x22782A}, /* East Asian ideograph */ {"\x8F", 0, 0x22782D}, /* East Asian ideograph */ {"\x8D", 0, 0x22782F}, /* East Asian ideograph */ {"\x97", 0, 0x227830}, /* East Asian ideograph */ {"\xB2", 0, 0x227833}, /* East Asian ideograph */ {"\xBA", 0, 0x227834}, /* East Asian ideograph */ {"\xBE", 0, 0x227838}, /* East Asian ideograph */ {"\xB9", 0, 0x227840}, /* East Asian ideograph */ {"\xAF", 0, 0x227841}, /* East Asian ideograph */ {"\x94", 0, 0x227842}, /* East Asian ideograph */ {"\x9C", 0, 0x273437}, /* East Asian ideograph */ {"\xA7", 0, 0x274366}, /* East Asian ideograph */ {"\x81", 0, 0x275344}, /* East Asian ideograph */ {"\x80", 0, 0x275359}, /* East Asian ideograph */ {"\xB6", 0, 0x27536C}, /* East Asian ideograph */ {"\x86", 0, 0x275379}, /* East Asian ideograph */ {"\xAA", 0, 0x275421}, /* East Asian ideograph */ {"\xAB", 0, 0x287855}, /* East Asian ideograph */ {"\xA8", 0, 0x28786E}, /* East Asian ideograph */ {"\xB7", 0, 0x2D534B}, /* East Asian ideograph */ {"\xBC", 0, 0x3A787D}, /* East Asian ideograph */ {"\xAC", 0, 0x706640}, /* East Asian ideograph */ {"\xA9", 0, 0x706B4C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page212 = { marc8r_31page212_flat, 0 }; /* PAGE 211 */ struct yaz_iconv_trie_flat marc8r_31page211_flat[] = { {"\x84", 0, 0x21527E}, /* East Asian ideograph */ {"\x85", 0, 0x215321}, /* East Asian ideograph */ {"\x87", 0, 0x215322}, /* East Asian ideograph */ {"\x89", 0, 0x215323}, /* East Asian ideograph */ {"\x8B", 0, 0x215324}, /* East Asian ideograph */ {"\x8C", 0, 0x215325}, /* East Asian ideograph */ {"\x93", 0, 0x215326}, /* East Asian ideograph */ {"\x9D", 0, 0x215327}, /* East Asian ideograph */ {"\x98", 0, 0x215328}, /* East Asian ideograph */ {"\x9B", 0, 0x215329}, /* East Asian ideograph */ {"\x9A", 0, 0x21532A}, /* East Asian ideograph */ {"\x96", 0, 0x21532B}, /* East Asian ideograph */ {"\xB2", 0, 0x21532C}, /* East Asian ideograph */ {"\xAA", 0, 0x21532D}, /* East Asian ideograph */ {"\xBA", 0, 0x21532E}, /* East Asian ideograph */ {"\xA5", 0, 0x21532F}, /* East Asian ideograph */ {"\xA2", 0, 0x215330}, /* East Asian ideograph */ {"\xAB", 0, 0x215331}, /* East Asian ideograph */ {"\xB1", 0, 0x215332}, /* East Asian ideograph */ {"\xAF", 0, 0x215333}, /* East Asian ideograph */ {"\xA1", 0, 0x215334}, /* East Asian ideograph */ {"\xA9", 0, 0x215335}, /* East Asian ideograph */ {"\xB4", 0, 0x215336}, /* East Asian ideograph */ {"\x9C", 0, 0x222973}, /* East Asian ideograph */ {"\x8A", 0, 0x227747}, /* East Asian ideograph */ {"\x8E", 0, 0x227749}, /* East Asian ideograph */ {"\x9F", 0, 0x22774E}, /* East Asian ideograph */ {"\xA7", 0, 0x227760}, /* East Asian ideograph */ {"\xB0", 0, 0x227761}, /* East Asian ideograph */ {"\xB8", 0, 0x227768}, /* East Asian ideograph */ {"\xB5", 0, 0x227769}, /* East Asian ideograph */ {"\xA6", 0, 0x22776A}, /* East Asian ideograph */ {"\x83", 0, 0x275321}, /* East Asian ideograph */ {"\x90", 0, 0x27534A}, /* East Asian ideograph */ {"\xBE", 0, 0x275358}, /* East Asian ideograph */ {"\xA0", 0, 0x27535E}, /* East Asian ideograph */ {"\xBF", 0, 0x275362}, /* East Asian ideograph */ {"\xA4", 0, 0x27536E}, /* East Asian ideograph */ {"\xAE", 0, 0x276153}, /* East Asian ideograph */ {"\x86", 0, 0x2D3765}, /* East Asian ideograph */ {"\xAD", 0, 0x2E3A33}, /* East Asian ideograph */ {"\xBB", 0, 0x335333}, /* East Asian ideograph */ {"\xAC", 0, 0x345E3B}, /* East Asian ideograph */ {"\x80", 0, 0x4B527C}, /* East Asian ideograph */ {"\xB7", 0, 0x4C794E}, /* East Asian ideograph */ {"\xBC", 0, 0x706B42}, /* East Asian ideograph */ {"\xBD", 0, 0x706B44}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page211 = { marc8r_31page211_flat, 0 }; /* PAGE 210 */ struct yaz_iconv_trie_flat marc8r_31page210_flat[] = { {"\x8A", 0, 0x21526D}, /* East Asian ideograph */ {"\x86", 0, 0x21526E}, /* East Asian ideograph */ {"\x96", 0, 0x21526F}, /* East Asian ideograph */ {"\x98", 0, 0x215270}, /* East Asian ideograph */ {"\x9E", 0, 0x215271}, /* East Asian ideograph */ {"\x9A", 0, 0x215272}, /* East Asian ideograph */ {"\xB1", 0, 0x215273}, /* East Asian ideograph */ {"\xB2", 0, 0x215274}, /* East Asian ideograph */ {"\xB3", 0, 0x215275}, /* East Asian ideograph */ {"\xB0", 0, 0x215276}, /* East Asian ideograph */ {"\xAF", 0, 0x215277}, /* East Asian ideograph */ {"\xB7", 0, 0x215278}, /* East Asian ideograph */ {"\xB6", 0, 0x215279}, /* East Asian ideograph */ {"\xBE", 0, 0x21527A}, /* East Asian ideograph */ {"\xBD", 0, 0x21527B}, /* East Asian ideograph */ {"\xBF", 0, 0x21527C}, /* East Asian ideograph */ {"\x81", 0, 0x22766B}, /* East Asian ideograph */ {"\x83", 0, 0x227670}, /* East Asian ideograph */ {"\x92", 0, 0x22767B}, /* East Asian ideograph */ {"\xA2", 0, 0x22767E}, /* East Asian ideograph */ {"\xA3", 0, 0x227728}, /* East Asian ideograph */ {"\xAC", 0, 0x227732}, /* East Asian ideograph */ {"\xB5", 0, 0x227739}, /* East Asian ideograph */ {"\xBB", 0, 0x22773E}, /* East Asian ideograph */ {"\xB9", 0, 0x22773F}, /* East Asian ideograph */ {"\xAA", 0, 0x275276}, /* East Asian ideograph */ {"\x94", 0, 0x275277}, /* East Asian ideograph */ {"\x8C", 0, 0x275278}, /* East Asian ideograph */ {"\x82", 0, 0x275279}, /* East Asian ideograph */ {"\x8B", 0, 0x27527A}, /* East Asian ideograph */ {"\xA9", 0, 0x287739}, /* East Asian ideograph */ {"\x8D", 0, 0x28773F}, /* East Asian ideograph */ {"\xB4", 0, 0x2D527B}, /* East Asian ideograph */ {"\xA1", 0, 0x335276}, /* East Asian ideograph */ {"\x9F", 0, 0x4B3A2F}, /* East Asian ideograph */ {"\xA8", 0, 0x4B5277}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page210 = { marc8r_31page210_flat, 0 }; /* PAGE 209 */ struct yaz_iconv_trie_flat marc8r_31page209_flat[] = { {"\x80", 0, 0x21525B}, /* East Asian ideograph */ {"\x81", 0, 0x21525C}, /* East Asian ideograph */ {"\x83", 0, 0x21525D}, /* East Asian ideograph */ {"\x86", 0, 0x21525E}, /* East Asian ideograph */ {"\x85", 0, 0x21525F}, /* East Asian ideograph */ {"\x8C", 0, 0x215260}, /* East Asian ideograph */ {"\x90", 0, 0x215261}, /* East Asian ideograph */ {"\x8D", 0, 0x215262}, /* East Asian ideograph */ {"\x92", 0, 0x215263}, /* East Asian ideograph */ {"\x95", 0, 0x215264}, /* East Asian ideograph */ {"\x98", 0, 0x215265}, /* East Asian ideograph */ {"\x99", 0, 0x215266}, /* East Asian ideograph */ {"\x97", 0, 0x215267}, /* East Asian ideograph */ {"\x9C", 0, 0x215268}, /* East Asian ideograph */ {"\xB3", 0, 0x215269}, /* East Asian ideograph */ {"\xB6", 0, 0x21526A}, /* East Asian ideograph */ {"\xBF", 0, 0x21526B}, /* East Asian ideograph */ {"\xBD", 0, 0x21526C}, /* East Asian ideograph */ {"\x84", 0, 0x22762E}, /* East Asian ideograph */ {"\x88", 0, 0x227631}, /* East Asian ideograph */ {"\x8B", 0, 0x227633}, /* East Asian ideograph */ {"\x8E", 0, 0x227634}, /* East Asian ideograph */ {"\x91", 0, 0x227635}, /* East Asian ideograph */ {"\x8F", 0, 0x227636}, /* East Asian ideograph */ {"\x94", 0, 0x227637}, /* East Asian ideograph */ {"\x96", 0, 0x227639}, /* East Asian ideograph */ {"\x9F", 0, 0x22763B}, /* East Asian ideograph */ {"\x9E", 0, 0x22763D}, /* East Asian ideograph */ {"\x9D", 0, 0x22763E}, /* East Asian ideograph */ {"\xA5", 0, 0x22764B}, /* East Asian ideograph */ {"\xA6", 0, 0x22764C}, /* East Asian ideograph */ {"\xAA", 0, 0x22764D}, /* East Asian ideograph */ {"\xA9", 0, 0x22764E}, /* East Asian ideograph */ {"\xA8", 0, 0x22764F}, /* East Asian ideograph */ {"\xB0", 0, 0x22765B}, /* East Asian ideograph */ {"\xB1", 0, 0x22765D}, /* East Asian ideograph */ {"\xB5", 0, 0x227660}, /* East Asian ideograph */ {"\xB9", 0, 0x227669}, /* East Asian ideograph */ {"\xB8", 0, 0x275275}, /* East Asian ideograph */ {"\xA7", 0, 0x287655}, /* East Asian ideograph */ {"\xBB", 0, 0x2D3E3C}, /* East Asian ideograph */ {"\xA4", 0, 0x2D562E}, /* East Asian ideograph */ {"\xA1", 0, 0x2D5D68}, /* East Asian ideograph */ {"\xA0", 0, 0x2E684E}, /* East Asian ideograph */ {"\xB7", 0, 0x2E765F}, /* East Asian ideograph */ {"\xA2", 0, 0x344138}, /* East Asian ideograph */ {"\x82", 0, 0x4B525C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page209 = { marc8r_31page209_flat, 0 }; /* PAGE 208 */ struct yaz_iconv_trie_dir marc8r_31page208_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x293B5B} /* East Asian ideograph */, {0, 0, 0x293B59} /* East Asian ideograph */, {0, 0, 0x275B3D} /* East Asian ideograph */, {0, 0, 0x275B42} /* East Asian ideograph */, {0, 0, 0x275B41} /* East Asian ideograph */, {0, 0, 0x275B46} /* East Asian ideograph */, {0, 0, 0x275B45} /* East Asian ideograph */, {0, 0, 0x275B49} /* East Asian ideograph */, {0, 0, 0x275B48} /* East Asian ideograph */, {0, 0, 0x293B6D} /* East Asian ideograph */, {0, 0, 0x293B6B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275B47} /* East Asian ideograph */, {0, 0, 0x275B4B} /* East Asian ideograph */, {0, 0, 0x293B7A} /* East Asian ideograph */, {0, 0, 0x275B4C} /* East Asian ideograph */, {0, 0, 0x275B4D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275B4E} /* East Asian ideograph */, {0, 0, 0x275B59} /* East Asian ideograph */, {0, 0, 0x275B51} /* East Asian ideograph */, {0, 0, 0x275B4F} /* East Asian ideograph */, {0, 0, 0x275B50} /* East Asian ideograph */, {0, 0, 0x293C30} /* East Asian ideograph */, {0, 0, 0x275B54} /* East Asian ideograph */, {0, 0, 0x275B56} /* East Asian ideograph */, {0, 0, 0x215B5A} /* East Asian ideograph */, {0, 0, 0x215B5B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275B60} /* East Asian ideograph */, {0, 0, 0x215B5C} /* East Asian ideograph */, {0, 0, 0x2D5232} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x2D5B5D} /* East Asian ideograph */, {0, 0, 0x215B5D} /* East Asian ideograph */, {0, 0, 0x233C65} /* East Asian ideograph */, {0, 0, 0x233C66} /* East Asian ideograph */, {0, 0, 0x215B5F} /* East Asian ideograph */, {0, 0, 0x2D5B5E} /* East Asian ideograph */, {0, 0, 0x215B5E} /* East Asian ideograph */, {0, 0, 0x275B61} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27517A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215B60} /* East Asian ideograph */, {0, 0, 0x21517A} /* East Asian ideograph */, {0, 0, 0x215B61} /* East Asian ideograph */, {0, 0, 0x215B62} /* East Asian ideograph */, {0, 0, 0x215B63} /* East Asian ideograph */, {0, 0, 0x215B64} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x233C6C} /* East Asian ideograph */, {0, 0, 0x4D3C6C} /* East Asian ideograph */, {0, 0, 0x233C6D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275C5B} /* East Asian ideograph */, {0, 0, 0x4B5C5B} /* East Asian ideograph */, {0, 0, 0x233C6E} /* East Asian ideograph */, {0, 0, 0x233C70} /* East Asian ideograph */, {0, 0, 0x275C52} /* East Asian ideograph */, {0, 0, 0x275C39} /* East Asian ideograph */, {0, 0, 0x233C74} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page208 = { 0, marc8r_31page208_dir }; /* PAGE 207 */ struct yaz_iconv_trie_flat marc8r_31page207_flat[] = { {"\xAC", 0, 0x214F22}, /* East Asian ideograph */ {"\x8D", 0, 0x215534}, /* East Asian ideograph */ {"\x83", 0, 0x215538}, /* East Asian ideograph */ {"\x8B", 0, 0x21553B}, /* East Asian ideograph */ {"\x8A", 0, 0x215541}, /* East Asian ideograph */ {"\x8C", 0, 0x215542}, /* East Asian ideograph */ {"\x8E", 0, 0x215547}, /* East Asian ideograph */ {"\x84", 0, 0x215548}, /* East Asian ideograph */ {"\xBD", 0, 0x215549}, /* East Asian ideograph */ {"\xB1", 0, 0x21554B}, /* East Asian ideograph */ {"\xBC", 0, 0x215554}, /* East Asian ideograph */ {"\xB5", 0, 0x215555}, /* East Asian ideograph */ {"\xB8", 0, 0x215559}, /* East Asian ideograph */ {"\xA1", 0, 0x227E45}, /* East Asian ideograph */ {"\xA3", 0, 0x227E51}, /* East Asian ideograph */ {"\x93", 0, 0x227E53}, /* East Asian ideograph */ {"\x90", 0, 0x227E59}, /* East Asian ideograph */ {"\x87", 0, 0x227E61}, /* East Asian ideograph */ {"\x81", 0, 0x227E6D}, /* East Asian ideograph */ {"\x98", 0, 0x227E74}, /* East Asian ideograph */ {"\x9E", 0, 0x232225}, /* East Asian ideograph */ {"\x9F", 0, 0x23222C}, /* East Asian ideograph */ {"\x8F", 0, 0x23222E}, /* East Asian ideograph */ {"\x91", 0, 0x232230}, /* East Asian ideograph */ {"\xB9", 0, 0x23224C}, /* East Asian ideograph */ {"\xBE", 0, 0x23226E}, /* East Asian ideograph */ {"\xB2", 0, 0x232324}, /* East Asian ideograph */ {"\xAA", 0, 0x23232D}, /* East Asian ideograph */ {"\xA9", 0, 0x23232E}, /* East Asian ideograph */ {"\xA5", 0, 0x274A2E}, /* East Asian ideograph */ {"\xA6", 0, 0x275161}, /* East Asian ideograph */ {"\xA7", 0, 0x275622}, /* East Asian ideograph */ {"\xA8", 0, 0x27562A}, /* East Asian ideograph */ {"\x9D", 0, 0x275642}, /* East Asian ideograph */ {"\xA4", 0, 0x275724}, /* East Asian ideograph */ {"\x86", 0, 0x335568}, /* East Asian ideograph */ {"\xA0", 0, 0x4B5542}, /* East Asian ideograph */ {"\xA2", 0, 0x69684D}, /* East Asian ideograph */ {"\x9C", 0, 0x705D46}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page207 = { marc8r_31page207_flat, 0 }; /* PAGE 206 */ struct yaz_iconv_trie_flat marc8r_31page206_flat[] = { {"\x85", 0, 0x21524A}, /* East Asian ideograph */ {"\x81", 0, 0x21524B}, /* East Asian ideograph */ {"\x8C", 0, 0x21524C}, /* East Asian ideograph */ {"\x92", 0, 0x21524D}, /* East Asian ideograph */ {"\x8E", 0, 0x21524E}, /* East Asian ideograph (variant of EACC 4B524E) */ {"\x94", 0, 0x21524F}, /* East Asian ideograph */ {"\x95", 0, 0x215250}, /* East Asian ideograph */ {"\xA0", 0, 0x215251}, /* East Asian ideograph */ {"\xA1", 0, 0x215252}, /* East Asian ideograph */ {"\x9F", 0, 0x215253}, /* East Asian ideograph */ {"\xA9", 0, 0x215254}, /* East Asian ideograph */ {"\xB0", 0, 0x215255}, /* East Asian ideograph */ {"\xB3", 0, 0x215256}, /* East Asian ideograph */ {"\xBC", 0, 0x215257}, /* East Asian ideograph */ {"\xB9", 0, 0x215258}, /* East Asian ideograph */ {"\xBB", 0, 0x215259}, /* East Asian ideograph */ {"\xB1", 0, 0x21525A}, /* East Asian ideograph */ {"\x83", 0, 0x227551}, /* East Asian ideograph */ {"\x8A", 0, 0x227557}, /* East Asian ideograph */ {"\x9B", 0, 0x227567}, /* East Asian ideograph */ {"\xA3", 0, 0x227568}, /* East Asian ideograph */ {"\xA6", 0, 0x22756C}, /* East Asian ideograph */ {"\xA5", 0, 0x22756F}, /* East Asian ideograph */ {"\xAC", 0, 0x227572}, /* East Asian ideograph */ {"\xAB", 0, 0x227573}, /* East Asian ideograph */ {"\xAF", 0, 0x227577}, /* East Asian ideograph */ {"\xAE", 0, 0x22757A}, /* East Asian ideograph */ {"\xBD", 0, 0x227629}, /* East Asian ideograph */ {"\xBE", 0, 0x22762A}, /* East Asian ideograph */ {"\xBF", 0, 0x22762C}, /* East Asian ideograph */ {"\x86", 0, 0x275251}, /* East Asian ideograph */ {"\x98", 0, 0x275258}, /* East Asian ideograph */ {"\x84", 0, 0x2D524A}, /* East Asian ideograph */ {"\xBA", 0, 0x4B525A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page206 = { marc8r_31page206_flat, 0 }; /* PAGE 205 */ struct yaz_iconv_trie_flat marc8r_31page205_flat[] = { {"\x85", 0, 0x215237}, /* East Asian ideograph */ {"\x88", 0, 0x215238}, /* East Asian ideograph */ {"\x8A", 0, 0x215239}, /* East Asian ideograph */ {"\x8C", 0, 0x21523A}, /* East Asian ideograph */ {"\x8E", 0, 0x21523B}, /* East Asian ideograph */ {"\x94", 0, 0x21523C}, /* East Asian ideograph */ {"\x9E", 0, 0x21523D}, /* East Asian ideograph */ {"\x9A", 0, 0x21523E}, /* East Asian ideograph */ {"\xA8", 0, 0x215240}, /* East Asian ideograph */ {"\xA4", 0, 0x215241}, /* East Asian ideograph */ {"\xA9", 0, 0x215242}, /* East Asian ideograph */ {"\xAF", 0, 0x215243}, /* East Asian ideograph */ {"\xB2", 0, 0x215244}, /* East Asian ideograph */ {"\xB6", 0, 0x215245}, /* East Asian ideograph */ {"\xB8", 0, 0x215246}, /* East Asian ideograph */ {"\xB9", 0, 0x215247}, /* East Asian ideograph */ {"\xBD", 0, 0x215248}, /* East Asian ideograph */ {"\xBF", 0, 0x215249}, /* East Asian ideograph */ {"\x86", 0, 0x227472}, /* East Asian ideograph */ {"\x91", 0, 0x22747A}, /* East Asian ideograph */ {"\x96", 0, 0x22747E}, /* East Asian ideograph */ {"\x97", 0, 0x227523}, /* East Asian ideograph */ {"\x95", 0, 0x227524}, /* East Asian ideograph */ {"\xA2", 0, 0x22752C}, /* East Asian ideograph */ {"\xA7", 0, 0x227533}, /* East Asian ideograph */ {"\xB0", 0, 0x22753B}, /* East Asian ideograph */ {"\xAD", 0, 0x22753C}, /* East Asian ideograph */ {"\xB1", 0, 0x22753F}, /* East Asian ideograph */ {"\xB4", 0, 0x227540}, /* East Asian ideograph */ {"\xB5", 0, 0x227542}, /* East Asian ideograph */ {"\xBC", 0, 0x22754A}, /* East Asian ideograph */ {"\xBE", 0, 0x22754C}, /* East Asian ideograph */ {"\x81", 0, 0x275238}, /* East Asian ideograph */ {"\x9F", 0, 0x287531}, /* East Asian ideograph */ {"\x9D", 0, 0x2D4A58}, /* East Asian ideograph */ {"\xA1", 0, 0x2D5240}, /* East Asian ideograph */ {"\xA3", 0, 0x2D5241}, /* East Asian ideograph */ {"\x82", 0, 0x2E7450}, /* East Asian ideograph */ {"\x87", 0, 0x4B5238}, /* East Asian ideograph */ {"\xAE", 0, 0x4B5247}, /* East Asian ideograph */ {"\x83", 0, 0x4B6A22}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page205 = { marc8r_31page205_flat, 0 }; /* PAGE 204 */ struct yaz_iconv_trie_flat marc8r_31page204_flat[] = { {"\x84", 0, 0x215229}, /* East Asian ideograph */ {"\x90", 0, 0x21522B}, /* East Asian ideograph */ {"\x95", 0, 0x21522C}, /* East Asian ideograph */ {"\x94", 0, 0x21522D}, /* East Asian ideograph */ {"\x9F", 0, 0x21522E}, /* East Asian ideograph */ {"\xB2", 0, 0x21522F}, /* East Asian ideograph */ {"\xAE", 0, 0x215230}, /* East Asian ideograph */ {"\xA9", 0, 0x215231}, /* East Asian ideograph */ {"\xAA", 0, 0x215232}, /* East Asian ideograph */ {"\xB0", 0, 0x215233}, /* East Asian ideograph */ {"\xB5", 0, 0x215234}, /* East Asian ideograph */ {"\xB7", 0, 0x215235}, /* East Asian ideograph */ {"\xB9", 0, 0x215236}, /* East Asian ideograph */ {"\x83", 0, 0x227425}, /* East Asian ideograph */ {"\x86", 0, 0x227427}, /* East Asian ideograph */ {"\x85", 0, 0x227428}, /* East Asian ideograph */ {"\x8B", 0, 0x22742B}, /* East Asian ideograph */ {"\x8C", 0, 0x22742E}, /* East Asian ideograph */ {"\x8D", 0, 0x22742F}, /* East Asian ideograph */ {"\x8E", 0, 0x227431}, /* East Asian ideograph */ {"\x8F", 0, 0x227432}, /* East Asian ideograph */ {"\xA0", 0, 0x22743E}, /* East Asian ideograph */ {"\xA1", 0, 0x22743F}, /* East Asian ideograph */ {"\x9D", 0, 0x227443}, /* East Asian ideograph */ {"\x9B", 0, 0x227445}, /* East Asian ideograph */ {"\xA3", 0, 0x227447}, /* East Asian ideograph */ {"\xA5", 0, 0x227450}, /* East Asian ideograph */ {"\xA6", 0, 0x227451}, /* East Asian ideograph */ {"\xAD", 0, 0x227453}, /* East Asian ideograph */ {"\xAB", 0, 0x227454}, /* East Asian ideograph */ {"\xA7", 0, 0x227455}, /* East Asian ideograph */ {"\xA8", 0, 0x227457}, /* East Asian ideograph */ {"\xB1", 0, 0x22745E}, /* East Asian ideograph */ {"\xB3", 0, 0x227460}, /* East Asian ideograph */ {"\xB6", 0, 0x227463}, /* East Asian ideograph */ {"\xBF", 0, 0x22746A}, /* East Asian ideograph */ {"\xBE", 0, 0x22746B}, /* East Asian ideograph */ {"\xBD", 0, 0x22746C}, /* East Asian ideograph */ {"\x97", 0, 0x273761}, /* East Asian ideograph (duplicate simplified) */ {"\x91", 0, 0x275148}, /* East Asian ideograph */ {"\x9A", 0, 0x275233}, /* East Asian ideograph */ {"\xA2", 0, 0x275235}, /* East Asian ideograph */ {"\x82", 0, 0x28742E}, /* East Asian ideograph */ {"\xB4", 0, 0x287472}, /* East Asian ideograph */ {"\xB8", 0, 0x2D5233}, /* East Asian ideograph */ {"\x88", 0, 0x2E7431}, /* East Asian ideograph */ {"\x98", 0, 0x2E7451}, /* East Asian ideograph */ {"\x87", 0, 0x334550}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page204 = { marc8r_31page204_flat, 0 }; /* PAGE 203 */ struct yaz_iconv_trie_dir marc8r_31page203_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x275146} /* East Asian ideograph */, {0, 0, 0x275151} /* East Asian ideograph */, {0, 0, 0x28722A} /* East Asian ideograph */, {0, 0, 0x287231} /* East Asian ideograph */, {0, 0, 0x275156} /* East Asian ideograph */, {0, 0, 0x275157} /* East Asian ideograph */, {0, 0, 0x275224} /* East Asian ideograph */, {0, 0, 0x287236} /* East Asian ideograph */, {0, 0, 0x28723C} /* East Asian ideograph */, {0, 0, 0x275158} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4B5179} /* East Asian ideograph */, {0, 0, 0x28723E} /* East Asian ideograph */, {0, 0, 0x27515D} /* East Asian ideograph */, {0, 0, 0x27515E} /* East Asian ideograph */, {0, 0, 0x287248} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x287247} /* East Asian ideograph */, {0, 0, 0x287253} /* East Asian ideograph */, {0, 0, 0x275159} /* East Asian ideograph */, {0, 0, 0x275152} /* East Asian ideograph */, {0, 0, 0x275168} /* East Asian ideograph */, {0, 0, 0x27515B} /* East Asian ideograph */, {0, 0, 0x287229} /* East Asian ideograph */, {0, 0, 0x27515A} /* East Asian ideograph */, {0, 0, 0x28725E} /* East Asian ideograph */, {0, 0, 0x275162} /* East Asian ideograph */, {0, 0, 0x28725F} /* East Asian ideograph */, {0, 0, 0x28725D} /* East Asian ideograph */, {0, 0, 0x27516C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x287251} /* East Asian ideograph */, {0, 0, 0x27517E} /* East Asian ideograph */, {0, 0, 0x287272} /* East Asian ideograph */, {0, 0, 0x275160} /* East Asian ideograph */, {0, 0, 0x27515F} /* East Asian ideograph */, {0, 0, 0x27517B} /* East Asian ideograph */, {0, 0, 0x287279} /* East Asian ideograph */, {0, 0, 0x287321} /* East Asian ideograph */, {0, 0, 0x275169} /* East Asian ideograph */, {0, 0, 0x275222} /* East Asian ideograph */, {0, 0, 0x275165} /* East Asian ideograph */, {0, 0, 0x275167} /* East Asian ideograph */, {0, 0, 0x27516F} /* East Asian ideograph */, {0, 0, 0x287360} /* East Asian ideograph */, {0, 0, 0x275174} /* East Asian ideograph */, {0, 0, 0x275170} /* East Asian ideograph */, {0, 0, 0x28732D} /* East Asian ideograph */, {0, 0, 0x287349} /* East Asian ideograph */, {0, 0, 0x287359} /* East Asian ideograph */, {0, 0, 0x28734E} /* East Asian ideograph */, {0, 0, 0x287351} /* East Asian ideograph */, {0, 0, 0x287352} /* East Asian ideograph */, {0, 0, 0x287374} /* East Asian ideograph */, {0, 0, 0x4B522B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215226} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215227} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x215228} /* East Asian ideograph */, {0, 0, 0x2D4B71} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page203 = { 0, marc8r_31page203_dir }; /* PAGE 202 */ struct yaz_iconv_trie_dir marc8r_31page202_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x22735B} /* East Asian ideograph */, {0, 0, 0x21517C} /* East Asian ideograph */, {0, 0, 0x69656D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x227364} /* East Asian ideograph */, {0, 0, 0x22735E} /* East Asian ideograph */, {0, 0, 0x227360} /* East Asian ideograph */, {0, 0, 0x2E7374} /* East Asian ideograph */, {0, 0, 0x22735D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x215221} /* East Asian ideograph */, {0, 0, 0x33512E} /* East Asian ideograph */, {0, 0, 0x335223} /* East Asian ideograph */, {0, 0, 0x21517E} /* East Asian ideograph */, {0, 0, 0x696576} /* East Asian ideograph */, {0, 0, 0x22736A} /* East Asian ideograph */, {0, 0, 0x4B517E} /* East Asian ideograph */, {0, 0, 0x215222} /* East Asian ideograph */, {0, 0, 0x22736D} /* East Asian ideograph */, {0, 0, 0x22736B} /* East Asian ideograph */, {0, 0, 0x215223} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x227374} /* East Asian ideograph */, {0, 0, 0x227373} /* East Asian ideograph */, {0, 0, 0x227371} /* East Asian ideograph */, {0, 0, 0x227370} /* East Asian ideograph */, {0, 0, 0x215224} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x51513B} /* East Asian ideograph */, {0, 0, 0x27506F} /* East Asian ideograph */, {0, 0, 0x287042} /* East Asian ideograph */, {0, 0, 0x275072} /* East Asian ideograph */, {0, 0, 0x275071} /* East Asian ideograph */, {0, 0, 0x275223} /* East Asian ideograph */, {0, 0, 0x275075} /* East Asian ideograph */, {0, 0, 0x275074} /* East Asian ideograph */, {0, 0, 0x275123} /* East Asian ideograph */, {0, 0, 0x287045} /* East Asian ideograph */, {0, 0, 0x28735D} /* East Asian ideograph */, {0, 0, 0x275070} /* East Asian ideograph */, {0, 0, 0x275073} /* East Asian ideograph */, {0, 0, 0x275153} /* East Asian ideograph */, {0, 0, 0x27507A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27507D} /* East Asian ideograph */, {0, 0, 0x27507C} /* East Asian ideograph */, {0, 0, 0x275121} /* East Asian ideograph */, {0, 0, 0x275149} /* East Asian ideograph */, {0, 0, 0x275122} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27516E} /* East Asian ideograph */, {0, 0, 0x275150} /* East Asian ideograph */, {0, 0, 0x275125} /* East Asian ideograph */, {0, 0, 0x275124} /* East Asian ideograph */, {0, 0, 0x275077} /* East Asian ideograph */, {0, 0, 0x275076} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x27507E} /* East Asian ideograph */, {0, 0, 0x28704A} /* East Asian ideograph */, {0, 0, 0x27515C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page202 = { 0, marc8r_31page202_dir }; /* PAGE 201 */ struct yaz_iconv_trie_flat marc8r_31page201_flat[] = { {"\x86", 0, 0x215167}, /* East Asian ideograph */ {"\x83", 0, 0x21516A}, /* East Asian ideograph */ {"\x81", 0, 0x21516B}, /* East Asian ideograph */ {"\x85", 0, 0x21516F}, /* East Asian ideograph */ {"\x95", 0, 0x215170}, /* East Asian ideograph */ {"\x94", 0, 0x215171}, /* East Asian ideograph */ {"\xA1", 0, 0x215172}, /* East Asian ideograph */ {"\x9E", 0, 0x215173}, /* East Asian ideograph */ {"\x9A", 0, 0x215174}, /* East Asian ideograph */ {"\xAB", 0, 0x215175}, /* East Asian ideograph */ {"\xA9", 0, 0x215176}, /* East Asian ideograph */ {"\xAD", 0, 0x215177}, /* East Asian ideograph */ {"\xB9", 0, 0x215178}, /* East Asian ideograph */ {"\xAA", 0, 0x215179}, /* East Asian ideograph */ {"\xBD", 0, 0x21517B}, /* East Asian ideograph */ {"\xBC", 0, 0x21517D}, /* East Asian ideograph */ {"\x84", 0, 0x22727D}, /* East Asian ideograph */ {"\x87", 0, 0x227328}, /* East Asian ideograph */ {"\x92", 0, 0x22732D}, /* East Asian ideograph */ {"\x91", 0, 0x22732F}, /* East Asian ideograph */ {"\x90", 0, 0x227333}, /* East Asian ideograph */ {"\xA7", 0, 0x227334}, /* East Asian ideograph */ {"\x96", 0, 0x227337}, /* East Asian ideograph */ {"\xA8", 0, 0x227348}, /* East Asian ideograph */ {"\xAE", 0, 0x227349}, /* East Asian ideograph */ {"\xB0", 0, 0x22734E}, /* East Asian ideograph */ {"\xAF", 0, 0x227351}, /* East Asian ideograph */ {"\xB3", 0, 0x227352}, /* East Asian ideograph */ {"\xBB", 0, 0x227358}, /* East Asian ideograph */ {"\xBE", 0, 0x227359}, /* East Asian ideograph */ {"\xA2", 0, 0x2D5179}, /* East Asian ideograph */ {"\x88", 0, 0x2F2F5D}, /* East Asian ideograph */ {"\x99", 0, 0x335259}, /* East Asian ideograph */ {"\x8A", 0, 0x4B5223}, /* East Asian ideograph */ {"\xBF", 0, 0x4B577E}, /* East Asian ideograph */ {"\x9D", 0, 0x4D2F73}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page201 = { marc8r_31page201_flat, 0 }; /* PAGE 200 */ struct yaz_iconv_trie_flat marc8r_31page200_flat[] = { {"\x91", 0, 0x21515F}, /* East Asian ideograph */ {"\x8A", 0, 0x215160}, /* East Asian ideograph */ {"\x88", 0, 0x215161}, /* East Asian ideograph */ {"\x9B", 0, 0x215162}, /* East Asian ideograph */ {"\xA3", 0, 0x215164}, /* East Asian ideograph */ {"\xAE", 0, 0x215165}, /* East Asian ideograph */ {"\xBE", 0, 0x215166}, /* East Asian ideograph */ {"\xB7", 0, 0x215168}, /* East Asian ideograph */ {"\xB2", 0, 0x215169}, /* East Asian ideograph */ {"\xAB", 0, 0x21516C}, /* East Asian ideograph */ {"\xBD", 0, 0x21516D}, /* East Asian ideograph */ {"\xB1", 0, 0x21516E}, /* East Asian ideograph */ {"\x86", 0, 0x22723A}, /* East Asian ideograph */ {"\x97", 0, 0x227250}, /* East Asian ideograph */ {"\x9E", 0, 0x227251}, /* East Asian ideograph */ {"\xA1", 0, 0x227252}, /* East Asian ideograph */ {"\x8B", 0, 0x227253}, /* East Asian ideograph */ {"\x92", 0, 0x227255}, /* East Asian ideograph */ {"\xA2", 0, 0x227256}, /* East Asian ideograph */ {"\xA0", 0, 0x22725B}, /* East Asian ideograph */ {"\x9D", 0, 0x22725D}, /* East Asian ideograph */ {"\x89", 0, 0x22725E}, /* East Asian ideograph */ {"\x9F", 0, 0x22725F}, /* East Asian ideograph */ {"\x95", 0, 0x227265}, /* East Asian ideograph */ {"\x90", 0, 0x227269}, /* East Asian ideograph */ {"\x8F", 0, 0x22726A}, /* East Asian ideograph */ {"\xBB", 0, 0x22726D}, /* East Asian ideograph */ {"\xB4", 0, 0x227271}, /* East Asian ideograph */ {"\xAD", 0, 0x227272}, /* East Asian ideograph */ {"\xAF", 0, 0x227273}, /* East Asian ideograph */ {"\xB6", 0, 0x227275}, /* East Asian ideograph */ {"\xBA", 0, 0x227277}, /* East Asian ideograph */ {"\xB9", 0, 0x227279}, /* East Asian ideograph */ {"\xB5", 0, 0x227321}, /* East Asian ideograph */ {"\xBF", 0, 0x227326}, /* East Asian ideograph */ {"\xA7", 0, 0x2E715A}, /* East Asian ideograph */ {"\x9A", 0, 0x34715A}, /* East Asian ideograph */ {"\x81", 0, 0x4B515A}, /* East Asian ideograph */ {"\xA6", 0, 0x4B516E}, /* East Asian ideograph */ {"\x84", 0, 0x4B5176}, /* East Asian ideograph */ {"\x85", 0, 0x69654F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page200 = { marc8r_31page200_flat, 0 }; /* PAGE 199 */ struct yaz_iconv_trie_flat marc8r_31page199_flat[] = { {"\x8A", 0, 0x215144}, /* East Asian ideograph */ {"\x87", 0, 0x215151}, /* East Asian ideograph */ {"\xA0", 0, 0x215152}, /* East Asian ideograph */ {"\xAF", 0, 0x215153}, /* East Asian ideograph */ {"\xB4", 0, 0x215154}, /* East Asian ideograph (variant of EACC 4B5154) */ {"\x96", 0, 0x215155}, /* East Asian ideograph */ {"\x98", 0, 0x215156}, /* East Asian ideograph */ {"\xAC", 0, 0x215157}, /* East Asian ideograph */ {"\x9D", 0, 0x215158}, /* East Asian ideograph */ {"\xA9", 0, 0x215159}, /* East Asian ideograph */ {"\xA3", 0, 0x21515A}, /* East Asian ideograph */ {"\xA8", 0, 0x21515B}, /* East Asian ideograph */ {"\x9A", 0, 0x21515C}, /* East Asian ideograph */ {"\x9E", 0, 0x21515E}, /* East Asian ideograph */ {"\xBB", 0, 0x215163}, /* East Asian ideograph */ {"\x8B", 0, 0x227167}, /* East Asian ideograph */ {"\x8E", 0, 0x22716A}, /* East Asian ideograph */ {"\x89", 0, 0x22716B}, /* East Asian ideograph */ {"\x85", 0, 0x22716E}, /* East Asian ideograph */ {"\x84", 0, 0x227174}, /* East Asian ideograph */ {"\xA1", 0, 0x227229}, /* East Asian ideograph */ {"\x99", 0, 0x22722A}, /* East Asian ideograph */ {"\xA4", 0, 0x22722B}, /* East Asian ideograph */ {"\x97", 0, 0x227231}, /* East Asian ideograph */ {"\xB9", 0, 0x227236}, /* East Asian ideograph */ {"\xB2", 0, 0x22723C}, /* East Asian ideograph */ {"\xA6", 0, 0x22723E}, /* East Asian ideograph */ {"\x9C", 0, 0x227246}, /* East Asian ideograph */ {"\xB1", 0, 0x227247}, /* East Asian ideograph */ {"\xB6", 0, 0x227248}, /* East Asian ideograph */ {"\xA5", 0, 0x227249}, /* East Asian ideograph */ {"\xB5", 0, 0x22724B}, /* East Asian ideograph */ {"\x91", 0, 0x33514C}, /* East Asian ideograph */ {"\x90", 0, 0x33516B}, /* East Asian ideograph */ {"\x8F", 0, 0x4B516D}, /* East Asian ideograph */ {"\xBC", 0, 0x4C7265}, /* East Asian ideograph */ {"\x95", 0, 0x69656E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page199 = { marc8r_31page199_flat, 0 }; /* PAGE 198 */ struct yaz_iconv_trie_flat marc8r_31page198_flat[] = { {"\x93", 0, 0x21513C}, /* East Asian ideograph */ {"\x91", 0, 0x21513D}, /* East Asian ideograph */ {"\x8F", 0, 0x21513F}, /* East Asian ideograph */ {"\x81", 0, 0x215140}, /* East Asian ideograph */ {"\x9C", 0, 0x215141}, /* East Asian ideograph */ {"\xBB", 0, 0x215142}, /* East Asian ideograph */ {"\xB0", 0, 0x215143}, /* East Asian ideograph */ {"\xBE", 0, 0x215145}, /* East Asian ideograph */ {"\xB4", 0, 0x215146}, /* East Asian ideograph */ {"\xBA", 0, 0x215147}, /* East Asian ideograph */ {"\xB2", 0, 0x215148}, /* East Asian ideograph */ {"\xB1", 0, 0x215149}, /* East Asian ideograph */ {"\xBD", 0, 0x21514A}, /* East Asian ideograph */ {"\xB5", 0, 0x21514B}, /* East Asian ideograph */ {"\xA0", 0, 0x21514C}, /* East Asian ideograph */ {"\xA2", 0, 0x21514D}, /* East Asian ideograph */ {"\xAD", 0, 0x21514E}, /* East Asian ideograph */ {"\xBF", 0, 0x21514F}, /* East Asian ideograph */ {"\xB8", 0, 0x215150}, /* East Asian ideograph */ {"\x9E", 0, 0x21515D}, /* East Asian ideograph */ {"\x8B", 0, 0x227137}, /* East Asian ideograph */ {"\x88", 0, 0x227139}, /* East Asian ideograph */ {"\x85", 0, 0x22713B}, /* East Asian ideograph */ {"\x8E", 0, 0x22713D}, /* East Asian ideograph */ {"\x86", 0, 0x227144}, /* East Asian ideograph */ {"\x8D", 0, 0x227148}, /* East Asian ideograph */ {"\x9B", 0, 0x22714B}, /* East Asian ideograph */ {"\x83", 0, 0x22714D}, /* East Asian ideograph */ {"\x96", 0, 0x227159}, /* East Asian ideograph */ {"\x8C", 0, 0x22715B}, /* East Asian ideograph */ {"\xA3", 0, 0x227161}, /* East Asian ideograph */ {"\xAE", 0, 0x227162}, /* East Asian ideograph */ {"\xAA", 0, 0x227169}, /* East Asian ideograph */ {"\xA6", 0, 0x22716F}, /* East Asian ideograph */ {"\xAC", 0, 0x227178}, /* East Asian ideograph */ {"\xB9", 0, 0x22717D}, /* East Asian ideograph */ {"\x9F", 0, 0x227222}, /* East Asian ideograph */ {"\xB3", 0, 0x2D516A}, /* East Asian ideograph */ {"\x99", 0, 0x2D517D}, /* East Asian ideograph */ {"\xAB", 0, 0x33515C}, /* East Asian ideograph */ {"\x89", 0, 0x335172}, /* East Asian ideograph */ {"\xAF", 0, 0x395773}, /* East Asian ideograph */ {"\x9A", 0, 0x4B5221}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page198 = { marc8r_31page198_flat, 0 }; /* PAGE 197 */ struct yaz_iconv_trie_flat marc8r_31page197_flat[] = { {"\x86", 0, 0x215126}, /* East Asian ideograph */ {"\x84", 0, 0x21512B}, /* East Asian ideograph */ {"\x80", 0, 0x21512F}, /* East Asian ideograph */ {"\x82", 0, 0x215130}, /* East Asian ideograph */ {"\xB1", 0, 0x215131}, /* East Asian ideograph */ {"\x9E", 0, 0x215132}, /* East Asian ideograph */ {"\xA8", 0, 0x215133}, /* East Asian ideograph */ {"\x90", 0, 0x215134}, /* East Asian ideograph */ {"\xA2", 0, 0x215136}, /* East Asian ideograph */ {"\xB6", 0, 0x215137}, /* East Asian ideograph */ {"\xA1", 0, 0x215138}, /* East Asian ideograph */ {"\xA6", 0, 0x215139}, /* East Asian ideograph */ {"\xAE", 0, 0x21513A}, /* East Asian ideograph */ {"\xB2", 0, 0x21513B}, /* East Asian ideograph */ {"\xB9", 0, 0x21513E}, /* East Asian ideograph */ {"\x85", 0, 0x227068}, /* East Asian ideograph */ {"\x81", 0, 0x22706F}, /* East Asian ideograph */ {"\x9C", 0, 0x22707A}, /* East Asian ideograph */ {"\x93", 0, 0x22707C}, /* East Asian ideograph */ {"\x9A", 0, 0x22707E}, /* East Asian ideograph */ {"\xB0", 0, 0x227122}, /* East Asian ideograph */ {"\xA7", 0, 0x227129}, /* East Asian ideograph */ {"\xAA", 0, 0x22712B}, /* East Asian ideograph */ {"\xAB", 0, 0x22712C}, /* East Asian ideograph */ {"\xB3", 0, 0x227130}, /* East Asian ideograph */ {"\x8E", 0, 0x227134}, /* East Asian ideograph */ {"\xBF", 0, 0x227142}, /* East Asian ideograph */ {"\xBD", 0, 0x22714F}, /* East Asian ideograph */ {"\xBB", 0, 0x227154}, /* East Asian ideograph */ {"\xBA", 0, 0x227158}, /* East Asian ideograph */ {"\x9B", 0, 0x22715A}, /* East Asian ideograph */ {"\xB7", 0, 0x287275}, /* East Asian ideograph */ {"\x9D", 0, 0x2D5773}, /* East Asian ideograph */ {"\x8F", 0, 0x2E7062}, /* East Asian ideograph */ {"\xA3", 0, 0x2E717C}, /* East Asian ideograph */ {"\x96", 0, 0x2E735D}, /* East Asian ideograph */ {"\x83", 0, 0x333D42}, /* East Asian ideograph */ {"\x8C", 0, 0x33513C}, /* East Asian ideograph */ {"\xB5", 0, 0x395179}, /* East Asian ideograph */ {"\x8B", 0, 0x4C735D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page197 = { marc8r_31page197_flat, 0 }; /* PAGE 196 */ struct yaz_iconv_trie_flat marc8r_31page196_flat[] = { {"\x80", 0, 0x215070}, /* East Asian ideograph */ {"\x82", 0, 0x215071}, /* East Asian ideograph */ {"\x85", 0, 0x215072}, /* East Asian ideograph */ {"\x89", 0, 0x215073}, /* East Asian ideograph */ {"\x84", 0, 0x215074}, /* East Asian ideograph */ {"\x87", 0, 0x215075}, /* East Asian ideograph */ {"\xA1", 0, 0x215076}, /* East Asian ideograph */ {"\x8B", 0, 0x215077}, /* East Asian ideograph */ {"\x8A", 0, 0x215078}, /* East Asian ideograph */ {"\xA0", 0, 0x215079}, /* East Asian ideograph */ {"\x9C", 0, 0x21507A}, /* East Asian ideograph */ {"\xA2", 0, 0x21507B}, /* East Asian ideograph */ {"\x95", 0, 0x21507C}, /* East Asian ideograph */ {"\x94", 0, 0x21507D}, /* East Asian ideograph */ {"\x90", 0, 0x21507E}, /* East Asian ideograph */ {"\x97", 0, 0x215121}, /* East Asian ideograph */ {"\x8D", 0, 0x215122}, /* East Asian ideograph (variant of EACC 455122) */ {"\x9A", 0, 0x215123}, /* East Asian ideograph */ {"\x99", 0, 0x215124}, /* East Asian ideograph */ {"\x9B", 0, 0x215125}, /* East Asian ideograph */ {"\xBC", 0, 0x215128}, /* East Asian ideograph */ {"\xAE", 0, 0x215129}, /* East Asian ideograph */ {"\xB9", 0, 0x21512A}, /* East Asian ideograph */ {"\xB0", 0, 0x21512C}, /* East Asian ideograph */ {"\xB3", 0, 0x21512D}, /* East Asian ideograph */ {"\xAF", 0, 0x21512E}, /* East Asian ideograph */ {"\xAB", 0, 0x215135}, /* East Asian ideograph */ {"\x86", 0, 0x227042}, /* East Asian ideograph */ {"\x83", 0, 0x227044}, /* East Asian ideograph */ {"\x88", 0, 0x227045}, /* East Asian ideograph */ {"\x8F", 0, 0x227049}, /* East Asian ideograph */ {"\x93", 0, 0x22704A}, /* East Asian ideograph */ {"\x98", 0, 0x227050}, /* East Asian ideograph */ {"\x9E", 0, 0x227051}, /* East Asian ideograph */ {"\x9D", 0, 0x227052}, /* East Asian ideograph */ {"\xB5", 0, 0x227059}, /* East Asian ideograph */ {"\xBD", 0, 0x22705A}, /* East Asian ideograph */ {"\xBA", 0, 0x227061}, /* East Asian ideograph */ {"\xB2", 0, 0x227062}, /* East Asian ideograph */ {"\xB1", 0, 0x227065}, /* East Asian ideograph */ {"\xBF", 0, 0x22706A}, /* East Asian ideograph */ {"\xA9", 0, 0x22706C}, /* East Asian ideograph */ {"\xBE", 0, 0x227071}, /* East Asian ideograph */ {"\xA7", 0, 0x275144}, /* East Asian ideograph */ {"\xA5", 0, 0x2D5129}, /* East Asian ideograph */ {"\xAC", 0, 0x2D514D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page196 = { marc8r_31page196_flat, 0 }; /* PAGE 195 */ struct yaz_iconv_trie_flat marc8r_31page195_flat[] = { {"\x8A", 0, 0x215062}, /* East Asian ideograph */ {"\x96", 0, 0x215063}, /* East Asian ideograph */ {"\x95", 0, 0x215064}, /* East Asian ideograph */ {"\xA0", 0, 0x215065}, /* East Asian ideograph */ {"\x9C", 0, 0x215066}, /* East Asian ideograph */ {"\x9F", 0, 0x215067}, /* East Asian ideograph */ {"\x9E", 0, 0x215068}, /* East Asian ideograph */ {"\xA2", 0, 0x215069}, /* East Asian ideograph */ {"\x99", 0, 0x21506A}, /* East Asian ideograph */ {"\xA7", 0, 0x21506B}, /* East Asian ideograph */ {"\xAF", 0, 0x21506C}, /* East Asian ideograph */ {"\xBB", 0, 0x21506E}, /* East Asian ideograph */ {"\xBE", 0, 0x21506F}, /* East Asian ideograph */ {"\x82", 0, 0x226F64}, /* East Asian ideograph */ {"\x8E", 0, 0x226F66}, /* East Asian ideograph */ {"\x88", 0, 0x226F68}, /* East Asian ideograph */ {"\x85", 0, 0x226F69}, /* East Asian ideograph */ {"\x8C", 0, 0x226F6D}, /* East Asian ideograph */ {"\x89", 0, 0x226F6F}, /* East Asian ideograph */ {"\x92", 0, 0x226F71}, /* East Asian ideograph */ {"\x97", 0, 0x226F75}, /* East Asian ideograph */ {"\xA1", 0, 0x226F77}, /* East Asian ideograph */ {"\xA8", 0, 0x226F7B}, /* East Asian ideograph (variant of EACC 4C6F7B) */ {"\x9D", 0, 0x227022}, /* East Asian ideograph */ {"\xAD", 0, 0x227028}, /* East Asian ideograph */ {"\xB0", 0, 0x22702E}, /* East Asian ideograph */ {"\xB2", 0, 0x227030}, /* East Asian ideograph */ {"\xB4", 0, 0x227035}, /* East Asian ideograph */ {"\xB6", 0, 0x227039}, /* East Asian ideograph */ {"\x81", 0, 0x287022}, /* East Asian ideograph */ {"\xBA", 0, 0x2D506F}, /* East Asian ideograph */ {"\x87", 0, 0x2F5158}, /* East Asian ideograph */ {"\xB8", 0, 0x4B513B}, /* East Asian ideograph */ {"\x8D", 0, 0x4C6F43}, /* East Asian ideograph */ {"\x80", 0, 0x696471}, /* East Asian ideograph */ {"\x98", 0, 0x696474}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page195 = { marc8r_31page195_flat, 0 }; /* PAGE 194 */ struct yaz_iconv_trie_flat marc8r_31page194_flat[] = { {"\x89", 0, 0x215057}, /* East Asian ideograph */ {"\x92", 0, 0x215058}, /* East Asian ideograph */ {"\x97", 0, 0x215059}, /* East Asian ideograph */ {"\x9F", 0, 0x21505A}, /* East Asian ideograph */ {"\xA5", 0, 0x21505B}, /* East Asian ideograph */ {"\xA4", 0, 0x21505C}, /* East Asian ideograph */ {"\xB1", 0, 0x21505D}, /* East Asian ideograph */ {"\xB3", 0, 0x21505E}, /* East Asian ideograph */ {"\xBD", 0, 0x21505F}, /* East Asian ideograph */ {"\xB9", 0, 0x215060}, /* East Asian ideograph */ {"\xBE", 0, 0x215061}, /* East Asian ideograph (variant of EACC 4B5061) */ {"\x81", 0, 0x226F21}, /* East Asian ideograph */ {"\x8E", 0, 0x226F28}, /* East Asian ideograph */ {"\x91", 0, 0x226F29}, /* East Asian ideograph */ {"\x83", 0, 0x226F2A}, /* East Asian ideograph */ {"\x8D", 0, 0x226F2C}, /* East Asian ideograph */ {"\x99", 0, 0x226F3A}, /* East Asian ideograph */ {"\x98", 0, 0x226F3B}, /* East Asian ideograph */ {"\x9C", 0, 0x226F3E}, /* East Asian ideograph */ {"\x95", 0, 0x226F40}, /* East Asian ideograph */ {"\xA7", 0, 0x226F42}, /* East Asian ideograph */ {"\xA2", 0, 0x226F43}, /* East Asian ideograph */ {"\x9E", 0, 0x226F45}, /* East Asian ideograph */ {"\xA9", 0, 0x226F46}, /* East Asian ideograph */ {"\xA8", 0, 0x226F48}, /* East Asian ideograph */ {"\xA1", 0, 0x226F49}, /* East Asian ideograph */ {"\xAC", 0, 0x226F4A}, /* East Asian ideograph */ {"\xA6", 0, 0x226F4C}, /* East Asian ideograph */ {"\xB2", 0, 0x226F54}, /* East Asian ideograph */ {"\xBB", 0, 0x226F58}, /* East Asian ideograph */ {"\xBF", 0, 0x226F59}, /* East Asian ideograph */ {"\xBA", 0, 0x226F5E}, /* East Asian ideograph */ {"\xBC", 0, 0x226F5F}, /* East Asian ideograph */ {"\x8B", 0, 0x275060}, /* East Asian ideograph */ {"\xAA", 0, 0x275068}, /* East Asian ideograph */ {"\xAE", 0, 0x27506B}, /* East Asian ideograph */ {"\x9D", 0, 0x287030}, /* East Asian ideograph */ {"\x9B", 0, 0x2D5321}, /* East Asian ideograph */ {"\xAB", 0, 0x4B506C}, /* East Asian ideograph */ {"\x82", 0, 0x693729}, /* East Asian ideograph */ {"\x90", 0, 0x696464}, /* East Asian ideograph */ {"\xAD", 0, 0x696466}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page194 = { marc8r_31page194_flat, 0 }; /* PAGE 193 */ struct yaz_iconv_trie_flat marc8r_31page193_flat[] = { {"\x83", 0, 0x21504C}, /* East Asian ideograph */ {"\x8C", 0, 0x21504D}, /* East Asian ideograph */ {"\x8D", 0, 0x21504E}, /* East Asian ideograph */ {"\x90", 0, 0x21504F}, /* East Asian ideograph */ {"\xA0", 0, 0x215050}, /* East Asian ideograph */ {"\x9F", 0, 0x215051}, /* East Asian ideograph */ {"\xA4", 0, 0x215052}, /* East Asian ideograph */ {"\xAC", 0, 0x215053}, /* East Asian ideograph */ {"\xAE", 0, 0x215054}, /* East Asian ideograph */ {"\xB2", 0, 0x215055}, /* East Asian ideograph */ {"\xB3", 0, 0x215056}, /* East Asian ideograph */ {"\x80", 0, 0x226E2A}, /* East Asian ideograph */ {"\x82", 0, 0x226E3B}, /* East Asian ideograph */ {"\x8E", 0, 0x226E46}, /* East Asian ideograph */ {"\x9D", 0, 0x226E54}, /* East Asian ideograph */ {"\x9C", 0, 0x226E56}, /* East Asian ideograph */ {"\x9A", 0, 0x226E57}, /* East Asian ideograph */ {"\x9B", 0, 0x226E58}, /* East Asian ideograph */ {"\x99", 0, 0x226E59}, /* East Asian ideograph */ {"\x9E", 0, 0x226E5B}, /* East Asian ideograph */ {"\xA7", 0, 0x226E5C}, /* East Asian ideograph */ {"\xA3", 0, 0x226E5E}, /* East Asian ideograph */ {"\xA8", 0, 0x226E61}, /* East Asian ideograph */ {"\xA5", 0, 0x226E62}, /* East Asian ideograph */ {"\xAF", 0, 0x226E6F}, /* East Asian ideograph */ {"\xB5", 0, 0x226E75}, /* East Asian ideograph */ {"\xBE", 0, 0x226E79}, /* East Asian ideograph */ {"\xB8", 0, 0x226E7A}, /* East Asian ideograph */ {"\xBD", 0, 0x226E7D}, /* East Asian ideograph */ {"\x81", 0, 0x275051}, /* East Asian ideograph */ {"\xBB", 0, 0x276053}, /* East Asian ideograph */ {"\xB4", 0, 0x287035}, /* East Asian ideograph */ {"\x98", 0, 0x2D504F}, /* East Asian ideograph */ {"\xBC", 0, 0x34682A}, /* East Asian ideograph */ {"\x96", 0, 0x4B5052}, /* East Asian ideograph */ {"\x94", 0, 0x4B5632}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page193 = { marc8r_31page193_flat, 0 }; /* PAGE 192 */ struct yaz_iconv_trie_flat marc8r_31page192_flat[] = { {"\x91", 0, 0x215036}, /* East Asian ideograph */ {"\x87", 0, 0x21503D}, /* East Asian ideograph */ {"\x8D", 0, 0x21503E}, /* East Asian ideograph */ {"\xA1", 0, 0x215041}, /* East Asian ideograph */ {"\xAB", 0, 0x215042}, /* East Asian ideograph */ {"\xAA", 0, 0x215043}, /* East Asian ideograph */ {"\xA7", 0, 0x215044}, /* East Asian ideograph */ {"\x9E", 0, 0x215045}, /* East Asian ideograph */ {"\xA3", 0, 0x215046}, /* East Asian ideograph */ {"\xBF", 0, 0x215047}, /* East Asian ideograph */ {"\xBE", 0, 0x215048}, /* East Asian ideograph */ {"\xB8", 0, 0x215049}, /* East Asian ideograph */ {"\xB7", 0, 0x21504A}, /* East Asian ideograph */ {"\xBD", 0, 0x21504B}, /* East Asian ideograph */ {"\x86", 0, 0x226D3B}, /* East Asian ideograph */ {"\x8F", 0, 0x226D41}, /* East Asian ideograph */ {"\x8B", 0, 0x226D46}, /* East Asian ideograph */ {"\x80", 0, 0x226D47}, /* East Asian ideograph */ {"\x8C", 0, 0x226D4B}, /* East Asian ideograph */ {"\x89", 0, 0x226D5A}, /* East Asian ideograph */ {"\x83", 0, 0x226D5B}, /* East Asian ideograph */ {"\x9C", 0, 0x226D5F}, /* East Asian ideograph */ {"\xA6", 0, 0x226D61}, /* East Asian ideograph */ {"\xA8", 0, 0x226D62}, /* East Asian ideograph */ {"\xA0", 0, 0x226D63}, /* East Asian ideograph */ {"\x9F", 0, 0x226D66}, /* East Asian ideograph */ {"\xAF", 0, 0x226D68}, /* East Asian ideograph */ {"\xB0", 0, 0x226D75}, /* East Asian ideograph */ {"\xB5", 0, 0x226E27}, /* East Asian ideograph */ {"\xB9", 0, 0x226E30}, /* East Asian ideograph */ {"\xBB", 0, 0x226E34}, /* East Asian ideograph */ {"\xB4", 0, 0x226E35}, /* East Asian ideograph */ {"\x96", 0, 0x286E69}, /* East Asian ideograph */ {"\x94", 0, 0x4B5036}, /* East Asian ideograph */ {"\x92", 0, 0x4B503B}, /* East Asian ideograph */ {"\xB1", 0, 0x4C6E42}, /* East Asian ideograph */ {"\x93", 0, 0x696449}, /* East Asian ideograph */ {"\x97", 0, 0x69644C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page192 = { marc8r_31page192_flat, 0 }; /* PAGE 191 */ struct yaz_iconv_trie_flat marc8r_31page191_flat[] = { {"\x87", 0, 0x21502E}, /* East Asian ideograph */ {"\x84", 0, 0x215030}, /* East Asian ideograph */ {"\x80", 0, 0x215033}, /* East Asian ideograph */ {"\x86", 0, 0x215034}, /* East Asian ideograph */ {"\x81", 0, 0x215035}, /* East Asian ideograph */ {"\x99", 0, 0x215037}, /* East Asian ideograph */ {"\x9B", 0, 0x215038}, /* East Asian ideograph */ {"\xA4", 0, 0x215039}, /* East Asian ideograph */ {"\x89", 0, 0x21503A}, /* East Asian ideograph */ {"\xA1", 0, 0x21503B}, /* East Asian ideograph */ {"\xA9", 0, 0x21503C}, /* East Asian ideograph */ {"\xBE", 0, 0x21503F}, /* East Asian ideograph */ {"\xB7", 0, 0x215040}, /* East Asian ideograph */ {"\x8B", 0, 0x226C58}, /* East Asian ideograph */ {"\x8F", 0, 0x226C5A}, /* East Asian ideograph */ {"\x90", 0, 0x226C5C}, /* East Asian ideograph */ {"\x8C", 0, 0x226C6F}, /* East Asian ideograph */ {"\x9D", 0, 0x226D22}, /* East Asian ideograph */ {"\xA5", 0, 0x226D24}, /* East Asian ideograph */ {"\xA8", 0, 0x226D29}, /* East Asian ideograph */ {"\xB9", 0, 0x226D2E}, /* East Asian ideograph */ {"\x94", 0, 0x226D2F}, /* East Asian ideograph */ {"\x9F", 0, 0x226D32}, /* East Asian ideograph */ {"\x98", 0, 0x226D35}, /* East Asian ideograph */ {"\xAA", 0, 0x226D37}, /* East Asian ideograph (unrelated variant of EACC 3A6A7C) */ {"\xB0", 0, 0x226D3E}, /* East Asian ideograph */ {"\xB4", 0, 0x226D4F}, /* East Asian ideograph */ {"\xB3", 0, 0x226D54}, /* East Asian ideograph */ {"\xBC", 0, 0x226D5C}, /* East Asian ideograph */ {"\x93", 0, 0x27503E}, /* East Asian ideograph */ {"\x91", 0, 0x275046}, /* East Asian ideograph */ {"\xAE", 0, 0x27504C}, /* East Asian ideograph */ {"\xB1", 0, 0x275053}, /* East Asian ideograph */ {"\xB2", 0, 0x2D3D4E}, /* East Asian ideograph */ {"\xA0", 0, 0x2E6C26}, /* East Asian ideograph */ {"\xA6", 0, 0x2E6C46}, /* East Asian ideograph */ {"\x9A", 0, 0x343E38}, /* East Asian ideograph */ {"\xAD", 0, 0x395050}, /* East Asian ideograph */ {"\xB6", 0, 0x69644E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page191 = { marc8r_31page191_flat, 0 }; /* PAGE 190 */ struct yaz_iconv_trie_flat marc8r_31page190_flat[] = { {"\xA1", 0, 0x215027}, /* East Asian ideograph */ {"\x94", 0, 0x215028}, /* East Asian ideograph */ {"\x95", 0, 0x215029}, /* East Asian ideograph */ {"\x9D", 0, 0x21502A}, /* East Asian ideograph */ {"\x8B", 0, 0x21502B}, /* East Asian ideograph */ {"\x97", 0, 0x21502C}, /* East Asian ideograph */ {"\x8F", 0, 0x21502D}, /* East Asian ideograph */ {"\xAD", 0, 0x21502F}, /* East Asian ideograph */ {"\xB1", 0, 0x215031}, /* East Asian ideograph */ {"\xB4", 0, 0x215032}, /* East Asian ideograph */ {"\x9A", 0, 0x216B5F}, /* East Asian ideograph */ {"\x9C", 0, 0x226C2D}, /* East Asian ideograph */ {"\x92", 0, 0x226C33}, /* East Asian ideograph */ {"\x91", 0, 0x226C34}, /* East Asian ideograph */ {"\x90", 0, 0x226C35}, /* East Asian ideograph */ {"\xA3", 0, 0x226C38}, /* East Asian ideograph */ {"\x8D", 0, 0x226C3A}, /* East Asian ideograph */ {"\x85", 0, 0x226C41}, /* East Asian ideograph */ {"\x8E", 0, 0x226C43}, /* East Asian ideograph */ {"\x98", 0, 0x226C44}, /* East Asian ideograph */ {"\x86", 0, 0x226C46}, /* East Asian ideograph */ {"\x99", 0, 0x226C48}, /* East Asian ideograph */ {"\xB2", 0, 0x226C52}, /* East Asian ideograph */ {"\xB8", 0, 0x226C59}, /* East Asian ideograph */ {"\xBE", 0, 0x226C60}, /* East Asian ideograph */ {"\xAC", 0, 0x275038}, /* East Asian ideograph */ {"\x80", 0, 0x275041}, /* East Asian ideograph */ {"\xAB", 0, 0x275042}, /* East Asian ideograph */ {"\xAA", 0, 0x275045}, /* East Asian ideograph */ {"\xA9", 0, 0x275054}, /* East Asian ideograph */ {"\xA7", 0, 0x286C58}, /* East Asian ideograph */ {"\xA6", 0, 0x286D47}, /* East Asian ideograph */ {"\xA8", 0, 0x286E56}, /* East Asian ideograph */ {"\x87", 0, 0x2D3224}, /* East Asian ideograph */ {"\xA0", 0, 0x2E3E3F}, /* East Asian ideograph */ {"\x9F", 0, 0x4C6C46}, /* East Asian ideograph */ {"\xA2", 0, 0x70736E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page190 = { marc8r_31page190_flat, 0 }; /* PAGE 189 */ struct yaz_iconv_trie_flat marc8r_31page189_flat[] = { {"\x86", 0, 0x214F79}, /* East Asian ideograph */ {"\x89", 0, 0x214F7A}, /* East Asian ideograph */ {"\x90", 0, 0x214F7B}, /* East Asian ideograph */ {"\x96", 0, 0x214F7C}, /* East Asian ideograph */ {"\x92", 0, 0x214F7D}, /* East Asian ideograph */ {"\x8B", 0, 0x214F7E}, /* East Asian ideograph */ {"\x8D", 0, 0x215021}, /* East Asian ideograph */ {"\x8F", 0, 0x215022}, /* East Asian ideograph */ {"\x94", 0, 0x215023}, /* East Asian ideograph */ {"\xA0", 0, 0x215024}, /* East Asian ideograph */ {"\xB7", 0, 0x215025}, /* East Asian ideograph */ {"\xB5", 0, 0x215026}, /* East Asian ideograph */ {"\x8A", 0, 0x226B52}, /* East Asian ideograph */ {"\x99", 0, 0x226B53}, /* East Asian ideograph */ {"\x87", 0, 0x226B55}, /* East Asian ideograph */ {"\x98", 0, 0x226B59}, /* East Asian ideograph */ {"\xAC", 0, 0x226B5B}, /* East Asian ideograph */ {"\x88", 0, 0x226B60}, /* East Asian ideograph */ {"\x85", 0, 0x226B61}, /* East Asian ideograph */ {"\x8C", 0, 0x226B62}, /* East Asian ideograph */ {"\x8E", 0, 0x226B63}, /* East Asian ideograph */ {"\xA6", 0, 0x226B68}, /* East Asian ideograph */ {"\xA4", 0, 0x226B6C}, /* East Asian ideograph */ {"\xA9", 0, 0x226B6E}, /* East Asian ideograph */ {"\xAD", 0, 0x226B70}, /* East Asian ideograph */ {"\xA2", 0, 0x226B74}, /* East Asian ideograph */ {"\xAE", 0, 0x226B75}, /* East Asian ideograph */ {"\xB4", 0, 0x226B76}, /* East Asian ideograph */ {"\xB2", 0, 0x226B79}, /* East Asian ideograph */ {"\xB8", 0, 0x226B7A}, /* East Asian ideograph */ {"\xAF", 0, 0x226B7B}, /* East Asian ideograph */ {"\xA7", 0, 0x226B7C}, /* East Asian ideograph */ {"\xA5", 0, 0x226B7E}, /* East Asian ideograph */ {"\xB1", 0, 0x226C26}, /* East Asian ideograph */ {"\xB0", 0, 0x226C27}, /* East Asian ideograph */ {"\xB3", 0, 0x226C29}, /* East Asian ideograph */ {"\x91", 0, 0x27503A}, /* East Asian ideograph */ {"\x9B", 0, 0x27503C}, /* East Asian ideograph */ {"\xBE", 0, 0x27504B}, /* East Asian ideograph */ {"\xB9", 0, 0x27504D}, /* East Asian ideograph */ {"\x9A", 0, 0x286D54}, /* East Asian ideograph */ {"\x9E", 0, 0x2D4F7C}, /* East Asian ideograph */ {"\x9D", 0, 0x2D502D}, /* East Asian ideograph */ {"\xBA", 0, 0x4B4F7B}, /* East Asian ideograph */ {"\xBB", 0, 0x707360}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page189 = { marc8r_31page189_flat, 0 }; /* PAGE 188 */ struct yaz_iconv_trie_flat marc8r_31page188_flat[] = { {"\x86", 0, 0x214F70}, /* East Asian ideograph */ {"\x91", 0, 0x214F71}, /* East Asian ideograph */ {"\xA0", 0, 0x214F72}, /* East Asian ideograph */ {"\xAC", 0, 0x214F73}, /* East Asian ideograph */ {"\xA8", 0, 0x214F74}, /* East Asian ideograph */ {"\x9B", 0, 0x214F75}, /* East Asian ideograph */ {"\x9E", 0, 0x214F76}, /* East Asian ideograph */ {"\x99", 0, 0x214F77}, /* East Asian ideograph */ {"\xA6", 0, 0x214F78}, /* East Asian ideograph */ {"\xB9", 0, 0x226B27}, /* East Asian ideograph */ {"\x8F", 0, 0x226B2D}, /* East Asian ideograph */ {"\x88", 0, 0x226B2E}, /* East Asian ideograph */ {"\x8A", 0, 0x226B33}, /* East Asian ideograph */ {"\xB5", 0, 0x226B35}, /* East Asian ideograph */ {"\xA5", 0, 0x226B36}, /* East Asian ideograph */ {"\xB8", 0, 0x226B39}, /* East Asian ideograph */ {"\xBB", 0, 0x226B3B}, /* East Asian ideograph */ {"\xA4", 0, 0x226B3F}, /* East Asian ideograph */ {"\xB3", 0, 0x226B40}, /* East Asian ideograph */ {"\xAA", 0, 0x226B42}, /* East Asian ideograph */ {"\x98", 0, 0x226B44}, /* East Asian ideograph */ {"\xB1", 0, 0x226B47}, /* East Asian ideograph */ {"\xAB", 0, 0x226B4A}, /* East Asian ideograph */ {"\xB7", 0, 0x226B4B}, /* East Asian ideograph */ {"\x9F", 0, 0x226B4D}, /* East Asian ideograph */ {"\x84", 0, 0x226B54}, /* East Asian ideograph (variant of EACC 2E6B54) */ {"\x94", 0, 0x274F79}, /* East Asian ideograph */ {"\x8B", 0, 0x275021}, /* East Asian ideograph */ {"\xBA", 0, 0x27502B}, /* East Asian ideograph */ {"\x83", 0, 0x275039}, /* East Asian ideograph */ {"\xBC", 0, 0x275050}, /* East Asian ideograph */ {"\x95", 0, 0x286B7C}, /* East Asian ideograph */ {"\xBE", 0, 0x286E68}, /* East Asian ideograph */ {"\xAE", 0, 0x2E6C27}, /* East Asian ideograph */ {"\xB6", 0, 0x4B4E21}, /* East Asian ideograph */ {"\x82", 0, 0x696373}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page188 = { marc8r_31page188_flat, 0 }; /* PAGE 187 */ struct yaz_iconv_trie_flat marc8r_31page187_flat[] = { {"\x85", 0, 0x214F61}, /* East Asian ideograph */ {"\x84", 0, 0x214F62}, /* East Asian ideograph */ {"\x87", 0, 0x214F63}, /* East Asian ideograph */ {"\x8A", 0, 0x214F64}, /* East Asian ideograph */ {"\x8B", 0, 0x214F65}, /* East Asian ideograph */ {"\x99", 0, 0x214F66}, /* East Asian ideograph */ {"\xA5", 0, 0x214F67}, /* East Asian ideograph */ {"\xA3", 0, 0x214F68}, /* East Asian ideograph */ {"\xAD", 0, 0x214F69}, /* East Asian ideograph */ {"\xAF", 0, 0x214F6A}, /* East Asian ideograph */ {"\xB6", 0, 0x214F6B}, /* East Asian ideograph */ {"\xB9", 0, 0x214F6C}, /* East Asian ideograph */ {"\xBA", 0, 0x214F6D}, /* East Asian ideograph */ {"\xBF", 0, 0x214F6E}, /* East Asian ideograph */ {"\xBD", 0, 0x214F6F}, /* East Asian ideograph */ {"\xA0", 0, 0x216032}, /* East Asian ideograph */ {"\x9F", 0, 0x216033}, /* East Asian ideograph */ {"\x8D", 0, 0x226A49}, /* East Asian ideograph */ {"\x8F", 0, 0x226A4B}, /* East Asian ideograph */ {"\x91", 0, 0x226A4F}, /* East Asian ideograph */ {"\x93", 0, 0x226A51}, /* East Asian ideograph */ {"\x94", 0, 0x226A52}, /* East Asian ideograph */ {"\x95", 0, 0x226A54}, /* East Asian ideograph */ {"\x9A", 0, 0x226A55}, /* East Asian ideograph */ {"\xA1", 0, 0x226A5A}, /* East Asian ideograph */ {"\xA6", 0, 0x226A5E}, /* East Asian ideograph */ {"\xAB", 0, 0x226A66}, /* East Asian ideograph */ {"\xB0", 0, 0x226A6B}, /* East Asian ideograph */ {"\xB5", 0, 0x226A76}, /* East Asian ideograph */ {"\xBE", 0, 0x226A7C}, /* East Asian ideograph */ {"\x9E", 0, 0x274F6B}, /* East Asian ideograph */ {"\x96", 0, 0x275957}, /* East Asian ideograph */ {"\x9D", 0, 0x2D3032}, /* East Asian ideograph */ {"\xA2", 0, 0x2D3164}, /* East Asian ideograph */ {"\x92", 0, 0x2D3932}, /* East Asian ideograph */ {"\x88", 0, 0x2D4947}, /* East Asian ideograph */ {"\xB8", 0, 0x2D4F6B}, /* East Asian ideograph */ {"\xAA", 0, 0x2D5957}, /* East Asian ideograph */ {"\x9C", 0, 0x33632B}, /* East Asian ideograph */ {"\x83", 0, 0x4B4947}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page187 = { marc8r_31page187_flat, 0 }; /* PAGE 186 */ struct yaz_iconv_trie_flat marc8r_31page186_flat[] = { {"\x81", 0, 0x214F52}, /* East Asian ideograph */ {"\x84", 0, 0x214F53}, /* East Asian ideograph */ {"\x88", 0, 0x214F54}, /* East Asian ideograph */ {"\x92", 0, 0x214F55}, /* East Asian ideograph */ {"\x95", 0, 0x214F56}, /* East Asian ideograph */ {"\x98", 0, 0x214F57}, /* East Asian ideograph */ {"\x96", 0, 0x214F58}, /* East Asian ideograph */ {"\x97", 0, 0x214F59}, /* East Asian ideograph */ {"\x9F", 0, 0x214F5A}, /* East Asian ideograph */ {"\xA0", 0, 0x214F5B}, /* East Asian ideograph */ {"\xAA", 0, 0x214F5C}, /* East Asian ideograph */ {"\xA9", 0, 0x214F5D}, /* East Asian ideograph */ {"\xAF", 0, 0x214F5E}, /* East Asian ideograph */ {"\xAE", 0, 0x214F5F}, /* East Asian ideograph */ {"\xBA", 0, 0x214F60}, /* East Asian ideograph */ {"\x80", 0, 0x22696B}, /* East Asian ideograph */ {"\x85", 0, 0x226970}, /* East Asian ideograph */ {"\x86", 0, 0x226975}, /* East Asian ideograph */ {"\x8A", 0, 0x226978}, /* East Asian ideograph */ {"\x94", 0, 0x22697A}, /* East Asian ideograph */ {"\xA3", 0, 0x226A28}, /* East Asian ideograph */ {"\x9E", 0, 0x226A2B}, /* East Asian ideograph */ {"\xA7", 0, 0x226A2C}, /* East Asian ideograph */ {"\xA8", 0, 0x226A2E}, /* East Asian ideograph */ {"\xAC", 0, 0x226A31}, /* East Asian ideograph */ {"\xB3", 0, 0x226A36}, /* East Asian ideograph */ {"\xBD", 0, 0x226A3A}, /* East Asian ideograph */ {"\xB6", 0, 0x226A3C}, /* East Asian ideograph */ {"\xB8", 0, 0x226A3D}, /* East Asian ideograph */ {"\xB5", 0, 0x226A3E}, /* East Asian ideograph */ {"\xBB", 0, 0x226A3F}, /* East Asian ideograph */ {"\xBF", 0, 0x226A43}, /* East Asian ideograph */ {"\x9D", 0, 0x274F5D}, /* East Asian ideograph */ {"\xA5", 0, 0x274F60}, /* East Asian ideograph */ {"\x8D", 0, 0x274F61}, /* East Asian ideograph */ {"\x9C", 0, 0x274F62}, /* East Asian ideograph */ {"\xA6", 0, 0x274F63}, /* East Asian ideograph */ {"\x83", 0, 0x274F64}, /* East Asian ideograph */ {"\xAD", 0, 0x286A3C}, /* East Asian ideograph */ {"\xB0", 0, 0x2D4F5E}, /* East Asian ideograph */ {"\x93", 0, 0x334F59}, /* East Asian ideograph */ {"\x91", 0, 0x334F5E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page186 = { marc8r_31page186_flat, 0 }; /* PAGE 185 */ struct yaz_iconv_trie_flat marc8r_31page185_flat[] = { {"\x80", 0, 0x214F40}, /* East Asian ideograph */ {"\x8D", 0, 0x214F44}, /* East Asian ideograph */ {"\x8E", 0, 0x214F45}, /* East Asian ideograph */ {"\x8C", 0, 0x214F46}, /* East Asian ideograph */ {"\x86", 0, 0x214F47}, /* East Asian ideograph */ {"\x97", 0, 0x214F48}, /* East Asian ideograph */ {"\xA1", 0, 0x214F49}, /* East Asian ideograph */ {"\xA2", 0, 0x214F4A}, /* East Asian ideograph */ {"\xAB", 0, 0x214F4B}, /* East Asian ideograph */ {"\xA9", 0, 0x214F4C}, /* East Asian ideograph */ {"\xB4", 0, 0x214F4D}, /* East Asian ideograph */ {"\xB6", 0, 0x214F4E}, /* East Asian ideograph */ {"\xB9", 0, 0x214F4F}, /* East Asian ideograph */ {"\xBA", 0, 0x214F50}, /* East Asian ideograph */ {"\xBF", 0, 0x214F51}, /* East Asian ideograph */ {"\x88", 0, 0x226939}, /* East Asian ideograph */ {"\x8B", 0, 0x22693D}, /* East Asian ideograph */ {"\x87", 0, 0x22693E}, /* East Asian ideograph */ {"\x84", 0, 0x22693F}, /* East Asian ideograph */ {"\x9C", 0, 0x226940}, /* East Asian ideograph */ {"\x9F", 0, 0x22694D}, /* East Asian ideograph */ {"\xA0", 0, 0x22694F}, /* East Asian ideograph */ {"\xAE", 0, 0x226957}, /* East Asian ideograph */ {"\xB0", 0, 0x22695F}, /* East Asian ideograph */ {"\xB5", 0, 0x226966}, /* East Asian ideograph */ {"\xB8", 0, 0x226969}, /* East Asian ideograph */ {"\x91", 0, 0x274F49}, /* East Asian ideograph */ {"\xB7", 0, 0x274F5F}, /* East Asian ideograph */ {"\x82", 0, 0x2D4F48}, /* East Asian ideograph */ {"\x89", 0, 0x334F3A}, /* East Asian ideograph */ {"\x85", 0, 0x335065}, /* East Asian ideograph */ {"\xBD", 0, 0x395E6F}, /* East Asian ideograph */ {"\x90", 0, 0x4B4F29}, /* East Asian ideograph */ {"\x8F", 0, 0x4B4F4C}, /* East Asian ideograph */ {"\xA3", 0, 0x4C695F}, /* East Asian ideograph */ {"\x83", 0, 0x69634E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page185 = { marc8r_31page185_flat, 0 }; /* PAGE 184 */ struct yaz_iconv_trie_flat marc8r_31page184_flat[] = { {"\x85", 0, 0x214F32}, /* East Asian ideograph */ {"\x8D", 0, 0x214F33}, /* East Asian ideograph */ {"\x88", 0, 0x214F34}, /* East Asian ideograph */ {"\x8B", 0, 0x214F35}, /* East Asian ideograph */ {"\x80", 0, 0x214F36}, /* East Asian ideograph */ {"\x9F", 0, 0x214F37}, /* East Asian ideograph */ {"\xA0", 0, 0x214F39}, /* East Asian ideograph */ {"\x9A", 0, 0x214F3A}, /* East Asian ideograph */ {"\x94", 0, 0x214F3B}, /* East Asian ideograph */ {"\xB1", 0, 0x214F3C}, /* East Asian ideograph */ {"\xAE", 0, 0x214F3D}, /* East Asian ideograph */ {"\xBF", 0, 0x214F3E}, /* East Asian ideograph */ {"\xBC", 0, 0x214F3F}, /* East Asian ideograph */ {"\xBD", 0, 0x214F41}, /* East Asian ideograph */ {"\xB7", 0, 0x214F42}, /* East Asian ideograph */ {"\xBB", 0, 0x214F43}, /* East Asian ideograph */ {"\xA5", 0, 0x223924}, /* East Asian ideograph */ {"\x82", 0, 0x22684F}, /* East Asian ideograph */ {"\x8A", 0, 0x226850}, /* East Asian ideograph */ {"\x89", 0, 0x226854}, /* East Asian ideograph */ {"\x83", 0, 0x22685C}, /* East Asian ideograph */ {"\x8C", 0, 0x226861}, /* East Asian ideograph */ {"\x91", 0, 0x22686B}, /* East Asian ideograph */ {"\x98", 0, 0x22686C}, /* East Asian ideograph */ {"\x99", 0, 0x22686F}, /* East Asian ideograph (variant of EACC 2E686F) */ {"\x9E", 0, 0x226871}, /* East Asian ideograph */ {"\x97", 0, 0x226876}, /* East Asian ideograph */ {"\xAD", 0, 0x22687E}, /* East Asian ideograph */ {"\xAC", 0, 0x226922}, /* East Asian ideograph */ {"\xA3", 0, 0x274F46}, /* East Asian ideograph */ {"\xB3", 0, 0x274F4C}, /* East Asian ideograph */ {"\xBE", 0, 0x2D4F3E}, /* East Asian ideograph */ {"\x9C", 0, 0x2E3D73}, /* East Asian ideograph */ {"\xB2", 0, 0x4B4F43}, /* East Asian ideograph */ {"\x86", 0, 0x4C695C}, /* East Asian ideograph */ {"\xB9", 0, 0x4C725D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page184 = { marc8r_31page184_flat, 0 }; /* PAGE 183 */ struct yaz_iconv_trie_flat marc8r_31page183_flat[] = { {"\x80", 0, 0x214F24}, /* East Asian ideograph */ {"\x81", 0, 0x214F25}, /* East Asian ideograph */ {"\x89", 0, 0x214F27}, /* East Asian ideograph */ {"\x91", 0, 0x214F28}, /* East Asian ideograph */ {"\x8B", 0, 0x214F29}, /* East Asian ideograph */ {"\x92", 0, 0x214F2A}, /* East Asian ideograph */ {"\xA4", 0, 0x214F2B}, /* East Asian ideograph */ {"\xA6", 0, 0x214F2C}, /* East Asian ideograph */ {"\xA3", 0, 0x214F2D}, /* East Asian ideograph */ {"\x9F", 0, 0x214F2E}, /* East Asian ideograph */ {"\xA7", 0, 0x214F2F}, /* East Asian ideograph */ {"\xA9", 0, 0x214F30}, /* East Asian ideograph */ {"\xBB", 0, 0x214F31}, /* East Asian ideograph */ {"\x8C", 0, 0x225070}, /* East Asian ideograph */ {"\x86", 0, 0x226828}, /* East Asian ideograph */ {"\x88", 0, 0x22682A}, /* East Asian ideograph */ {"\x94", 0, 0x22682D}, /* East Asian ideograph */ {"\x95", 0, 0x22682E}, /* East Asian ideograph */ {"\x96", 0, 0x226832}, /* East Asian ideograph */ {"\xAC", 0, 0x22683D}, /* East Asian ideograph */ {"\xAB", 0, 0x22683E}, /* East Asian ideograph (variant of EACC 4C683E) */ {"\xA1", 0, 0x226842}, /* East Asian ideograph */ {"\x9D", 0, 0x226844}, /* East Asian ideograph */ {"\xAD", 0, 0x226845}, /* East Asian ideograph */ {"\xB8", 0, 0x226848}, /* East Asian ideograph */ {"\xB0", 0, 0x274F3C}, /* East Asian ideograph */ {"\x8D", 0, 0x274F3D}, /* East Asian ideograph */ {"\xAF", 0, 0x274F44}, /* East Asian ideograph */ {"\xBD", 0, 0x274F4A}, /* East Asian ideograph */ {"\x8A", 0, 0x2D3C65}, /* East Asian ideograph */ {"\x90", 0, 0x2D5265}, /* East Asian ideograph */ {"\x8F", 0, 0x2D5267}, /* East Asian ideograph */ {"\x98", 0, 0x4B4E67}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page183 = { marc8r_31page183_flat, 0 }; /* PAGE 182 */ struct yaz_iconv_trie_dir marc8r_31page182_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {210, 0, 0}, {211, 0, 0}, {212, 0, 0}, {213, 0, 0}, {214, 0, 0}, {215, 0, 0}, {216, 0, 0}, {217, 0, 0}, {218, 0, 0}, {219, 0, 0}, {220, 0, 0}, {221, 0, 0}, {222, 0, 0}, {223, 0, 0}, {224, 0, 0}, {225, 0, 0}, {208, 0, 0}, {227, 0, 0}, {226, 0, 0}, {228, 0, 0}, {229, 0, 0}, {230, 0, 0}, {231, 0, 0}, {232, 0, 0}, {233, 0, 0}, {234, 0, 0}, {235, 0, 0}, {236, 0, 0}, {237, 0, 0}, {238, 0, 0}, {239, 0, 0}, {240, 0, 0}, {241, 0, 0}, {242, 0, 0}, {243, 0, 0}, {244, 0, 0}, {245, 0, 0}, {246, 0, 0}, {247, 0, 0}, {248, 0, 0}, {249, 0, 0}, {250, 0, 0}, {251, 0, 0}, {252, 0, 0}, {253, 0, 0}, {254, 0, 0}, {255, 0, 0}, {333, 0, 0}, {257, 0, 0}, {256, 0, 0}, {258, 0, 0}, {259, 0, 0}, {260, 0, 0}, {261, 0, 0}, {262, 0, 0}, {263, 0, 0}, {264, 0, 0}, {265, 0, 0}, {266, 0, 0}, {267, 0, 0}, {268, 0, 0}, {269, 0, 0}, {209, 0, 0}, {270, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page182 = { 0, marc8r_31page182_dir }; /* PAGE 181 */ struct yaz_iconv_trie_flat marc8r_31page181_flat[] = { {"\x81", 0, 0x214E74}, /* East Asian ideograph */ {"\x8F", 0, 0x214E76}, /* East Asian ideograph */ {"\x8D", 0, 0x214E77}, /* East Asian ideograph */ {"\x8E", 0, 0x214E78}, /* East Asian ideograph */ {"\xA6", 0, 0x214E79}, /* East Asian ideograph */ {"\xA7", 0, 0x214E7A}, /* East Asian ideograph */ {"\xAA", 0, 0x214E7B}, /* East Asian ideograph */ {"\xAE", 0, 0x214E7C}, /* East Asian ideograph */ {"\xB1", 0, 0x214E7D}, /* East Asian ideograph */ {"\xB9", 0, 0x214E7E}, /* East Asian ideograph */ {"\xBD", 0, 0x214F21}, /* East Asian ideograph */ {"\xBE", 0, 0x214F23}, /* East Asian ideograph */ {"\xBF", 0, 0x214F26}, /* East Asian ideograph */ {"\x98", 0, 0x22674A}, /* East Asian ideograph */ {"\x8A", 0, 0x22674B}, /* East Asian ideograph */ {"\x99", 0, 0x22674D}, /* East Asian ideograph */ {"\x95", 0, 0x22674E}, /* East Asian ideograph */ {"\x8B", 0, 0x22674F}, /* East Asian ideograph */ {"\x96", 0, 0x226750}, /* East Asian ideograph */ {"\x94", 0, 0x226754}, /* East Asian ideograph */ {"\x93", 0, 0x226755}, /* East Asian ideograph */ {"\x9A", 0, 0x22675C}, /* East Asian ideograph */ {"\xA1", 0, 0x22675F}, /* East Asian ideograph */ {"\x9B", 0, 0x226760}, /* East Asian ideograph */ {"\xA3", 0, 0x226761}, /* East Asian ideograph */ {"\x9D", 0, 0x226764}, /* East Asian ideograph */ {"\xA9", 0, 0x22676E}, /* East Asian ideograph */ {"\xAB", 0, 0x226770}, /* East Asian ideograph */ {"\xA8", 0, 0x226771}, /* East Asian ideograph */ {"\xB0", 0, 0x226775}, /* East Asian ideograph */ {"\xB3", 0, 0x22677A}, /* East Asian ideograph */ {"\xB4", 0, 0x22677B}, /* East Asian ideograph */ {"\xB8", 0, 0x226822}, /* East Asian ideograph */ {"\xBA", 0, 0x226823}, /* East Asian ideograph */ {"\xBC", 0, 0x226825}, /* East Asian ideograph */ {"\x85", 0, 0x274E7B}, /* East Asian ideograph */ {"\xBB", 0, 0x275F4F}, /* East Asian ideograph */ {"\x80", 0, 0x2D4F37}, /* East Asian ideograph */ {"\xA5", 0, 0x334E73}, /* East Asian ideograph */ {"\x84", 0, 0x454E75}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page181 = { marc8r_31page181_flat, 0 }; /* PAGE 180 */ struct yaz_iconv_trie_flat marc8r_31page180_flat[] = { {"\x80", 0, 0x214E60}, /* East Asian ideograph */ {"\x81", 0, 0x214E62}, /* East Asian ideograph */ {"\x85", 0, 0x214E63}, /* East Asian ideograph */ {"\x89", 0, 0x214E64}, /* East Asian ideograph */ {"\x88", 0, 0x214E65}, /* East Asian ideograph */ {"\x87", 0, 0x214E66}, /* East Asian ideograph */ {"\x95", 0, 0x214E67}, /* East Asian ideograph */ {"\xA0", 0, 0x214E68}, /* East Asian ideograph */ {"\x90", 0, 0x214E69}, /* East Asian ideograph */ {"\x96", 0, 0x214E6A}, /* East Asian ideograph */ {"\x9E", 0, 0x214E6B}, /* East Asian ideograph */ {"\x9D", 0, 0x214E6C}, /* East Asian ideograph */ {"\x9F", 0, 0x214E6D}, /* East Asian ideograph */ {"\x9A", 0, 0x214E6E}, /* East Asian ideograph */ {"\x97", 0, 0x214E6F}, /* East Asian ideograph */ {"\xA5", 0, 0x214E70}, /* East Asian ideograph */ {"\xA8", 0, 0x214E71}, /* East Asian ideograph */ {"\xAD", 0, 0x214E72}, /* East Asian ideograph */ {"\xBA", 0, 0x214E73}, /* East Asian ideograph */ {"\xBF", 0, 0x214E75}, /* East Asian ideograph */ {"\x82", 0, 0x226667}, /* East Asian ideograph */ {"\x8A", 0, 0x22666A}, /* East Asian ideograph */ {"\x8D", 0, 0x22666B}, /* East Asian ideograph */ {"\x86", 0, 0x226675}, /* East Asian ideograph */ {"\x98", 0, 0x226677}, /* East Asian ideograph */ {"\x9B", 0, 0x226679}, /* East Asian ideograph */ {"\x9C", 0, 0x22667A}, /* East Asian ideograph */ {"\x8F", 0, 0x22667B}, /* East Asian ideograph */ {"\x93", 0, 0x22667C}, /* East Asian ideograph */ {"\x91", 0, 0x226721}, /* East Asian ideograph */ {"\x94", 0, 0x226723}, /* East Asian ideograph */ {"\xA7", 0, 0x22672A}, /* East Asian ideograph */ {"\xAB", 0, 0x22672D}, /* East Asian ideograph */ {"\xB2", 0, 0x226730}, /* East Asian ideograph */ {"\xBC", 0, 0x22673E}, /* East Asian ideograph */ {"\xB8", 0, 0x274E77}, /* East Asian ideograph */ {"\xAF", 0, 0x274E78}, /* East Asian ideograph */ {"\xB7", 0, 0x274E7D}, /* East Asian ideograph */ {"\xA2", 0, 0x293032}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page180 = { marc8r_31page180_flat, 0 }; /* PAGE 179 */ struct yaz_iconv_trie_flat marc8r_31page179_flat[] = { {"\x81", 0, 0x214E57}, /* East Asian ideograph */ {"\x8E", 0, 0x214E59}, /* East Asian ideograph */ {"\x99", 0, 0x214E5A}, /* East Asian ideograph */ {"\xA6", 0, 0x214E5B}, /* East Asian ideograph */ {"\xAC", 0, 0x214E5C}, /* East Asian ideograph */ {"\xAA", 0, 0x214E5D}, /* East Asian ideograph */ {"\xAB", 0, 0x214E5E}, /* East Asian ideograph */ {"\xBA", 0, 0x214E5F}, /* East Asian ideograph */ {"\xBE", 0, 0x214E61}, /* East Asian ideograph */ {"\x85", 0, 0x22657E}, /* East Asian ideograph */ {"\x84", 0, 0x22662B}, /* East Asian ideograph */ {"\x92", 0, 0x22662E}, /* East Asian ideograph */ {"\x8C", 0, 0x226632}, /* East Asian ideograph */ {"\x93", 0, 0x226634}, /* East Asian ideograph */ {"\x91", 0, 0x226635}, /* East Asian ideograph */ {"\x9E", 0, 0x226643}, /* East Asian ideograph */ {"\xA2", 0, 0x226646}, /* East Asian ideograph */ {"\xA4", 0, 0x22664C}, /* East Asian ideograph */ {"\xA7", 0, 0x22664D}, /* East Asian ideograph */ {"\xA9", 0, 0x226650}, /* East Asian ideograph */ {"\xB1", 0, 0x226655}, /* East Asian ideograph */ {"\xB4", 0, 0x22665D}, /* East Asian ideograph */ {"\xB6", 0, 0x226660}, /* East Asian ideograph */ {"\xBD", 0, 0x226665}, /* East Asian ideograph */ {"\xBF", 0, 0x226668}, /* East Asian ideograph */ {"\xBC", 0, 0x274E7C}, /* East Asian ideograph */ {"\xAE", 0, 0x394956}, /* East Asian ideograph */ {"\x87", 0, 0x696325}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page179 = { marc8r_31page179_flat, 0 }; /* PAGE 178 */ struct yaz_iconv_trie_flat marc8r_31page178_flat[] = { {"\x8B", 0, 0x214E48}, /* East Asian ideograph */ {"\x81", 0, 0x214E4A}, /* East Asian ideograph */ {"\x85", 0, 0x214E4B}, /* East Asian ideograph */ {"\x95", 0, 0x214E4D}, /* East Asian ideograph */ {"\x8A", 0, 0x214E4F}, /* East Asian ideograph */ {"\x90", 0, 0x214E50}, /* East Asian ideograph */ {"\xA8", 0, 0x214E51}, /* East Asian ideograph */ {"\xAC", 0, 0x214E52}, /* East Asian ideograph */ {"\x9A", 0, 0x214E53}, /* East Asian ideograph */ {"\xB7", 0, 0x214E54}, /* East Asian ideograph */ {"\xB4", 0, 0x214E55}, /* East Asian ideograph */ {"\xBA", 0, 0x214E56}, /* East Asian ideograph (variant of EACC 4B4E56) */ {"\xAF", 0, 0x214E58}, /* East Asian ideograph */ {"\x8C", 0, 0x226555}, /* East Asian ideograph */ {"\x89", 0, 0x226556}, /* East Asian ideograph */ {"\x91", 0, 0x226558}, /* East Asian ideograph */ {"\x98", 0, 0x22655A}, /* East Asian ideograph */ {"\x88", 0, 0x22655E}, /* East Asian ideograph */ {"\x94", 0, 0x226560}, /* East Asian ideograph */ {"\x9F", 0, 0x226568}, /* East Asian ideograph */ {"\xA7", 0, 0x22656A}, /* East Asian ideograph */ {"\x9B", 0, 0x22656E}, /* East Asian ideograph */ {"\xA1", 0, 0x22656F}, /* East Asian ideograph */ {"\xA0", 0, 0x226573}, /* East Asian ideograph */ {"\xAE", 0, 0x226576}, /* East Asian ideograph */ {"\xA3", 0, 0x226577}, /* East Asian ideograph */ {"\xB2", 0, 0x226579}, /* East Asian ideograph */ {"\xB9", 0, 0x226621}, /* East Asian ideograph */ {"\xBD", 0, 0x226622}, /* East Asian ideograph */ {"\xBE", 0, 0x226627}, /* East Asian ideograph */ {"\xBB", 0, 0x226629}, /* East Asian ideograph */ {"\x92", 0, 0x2D5F35}, /* East Asian ideograph */ {"\x86", 0, 0x4B4846}, /* East Asian ideograph */ {"\x99", 0, 0x4C6564}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page178 = { marc8r_31page178_flat, 0 }; /* PAGE 177 */ struct yaz_iconv_trie_flat marc8r_31page177_flat[] = { {"\xB0", 0, 0x214E3C}, /* East Asian ideograph */ {"\x97", 0, 0x214E3D}, /* East Asian ideograph */ {"\x8E", 0, 0x214E3E}, /* East Asian ideograph */ {"\x98", 0, 0x214E3F}, /* East Asian ideograph */ {"\x89", 0, 0x214E40}, /* East Asian ideograph */ {"\x91", 0, 0x214E41}, /* East Asian ideograph */ {"\x8C", 0, 0x214E43}, /* East Asian ideograph */ {"\xA7", 0, 0x214E44}, /* East Asian ideograph */ {"\xA9", 0, 0x214E45}, /* East Asian ideograph */ {"\x9F", 0, 0x214E46}, /* East Asian ideograph */ {"\xB3", 0, 0x214E47}, /* East Asian ideograph */ {"\xBA", 0, 0x214E49}, /* East Asian ideograph */ {"\xBC", 0, 0x214E4C}, /* East Asian ideograph */ {"\xBE", 0, 0x214E4E}, /* East Asian ideograph */ {"\x86", 0, 0x226469}, /* East Asian ideograph */ {"\x9A", 0, 0x22646B}, /* East Asian ideograph */ {"\x87", 0, 0x22646D}, /* East Asian ideograph */ {"\x94", 0, 0x226470}, /* East Asian ideograph */ {"\x8F", 0, 0x226476}, /* East Asian ideograph */ {"\x99", 0, 0x22647E}, /* East Asian ideograph */ {"\x93", 0, 0x226529}, /* East Asian ideograph */ {"\x92", 0, 0x22652C}, /* East Asian ideograph */ {"\x96", 0, 0x22652D}, /* East Asian ideograph */ {"\xB2", 0, 0x22652F}, /* East Asian ideograph */ {"\xA1", 0, 0x226531}, /* East Asian ideograph */ {"\xB6", 0, 0x226532}, /* East Asian ideograph */ {"\xB7", 0, 0x226539}, /* East Asian ideograph */ {"\xA4", 0, 0x22653B}, /* East Asian ideograph */ {"\xB4", 0, 0x22653E}, /* East Asian ideograph */ {"\xAD", 0, 0x226540}, /* East Asian ideograph */ {"\xA3", 0, 0x226541}, /* East Asian ideograph */ {"\x9E", 0, 0x226543}, /* East Asian ideograph */ {"\xA8", 0, 0x226544}, /* East Asian ideograph */ {"\xAB", 0, 0x226548}, /* East Asian ideograph */ {"\xBB", 0, 0x22654E}, /* East Asian ideograph */ {"\x8D", 0, 0x274E5A}, /* East Asian ideograph */ {"\x9B", 0, 0x28656A}, /* East Asian ideograph */ {"\x9C", 0, 0x286577}, /* East Asian ideograph */ {"\xA5", 0, 0x2D3F76}, /* East Asian ideograph */ {"\xAF", 0, 0x2D4B5B}, /* East Asian ideograph */ {"\xAA", 0, 0x2D4E33}, /* East Asian ideograph */ {"\xB1", 0, 0x2D6252}, /* East Asian ideograph */ {"\x95", 0, 0x333C21}, /* East Asian ideograph */ {"\x81", 0, 0x3F4472}, /* East Asian ideograph */ {"\xB9", 0, 0x4C6565}, /* East Asian ideograph */ {"\xB5", 0, 0x696273}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page177 = { marc8r_31page177_flat, 0 }; /* PAGE 176 */ struct yaz_iconv_trie_flat marc8r_31page176_flat[] = { {"\xAB", 0, 0x214E36}, /* East Asian ideograph */ {"\x8F", 0, 0x214E37}, /* East Asian ideograph */ {"\x83", 0, 0x214E38}, /* East Asian ideograph */ {"\xAC", 0, 0x214E39}, /* East Asian ideograph */ {"\x9D", 0, 0x214E3A}, /* East Asian ideograph */ {"\xAF", 0, 0x214E3B}, /* East Asian ideograph */ {"\xBC", 0, 0x214E42}, /* East Asian ideograph */ {"\x8D", 0, 0x226444}, /* East Asian ideograph */ {"\x88", 0, 0x226448}, /* East Asian ideograph */ {"\x93", 0, 0x226449}, /* East Asian ideograph */ {"\x94", 0, 0x22644A}, /* East Asian ideograph */ {"\x85", 0, 0x22644B}, /* East Asian ideograph */ {"\x92", 0, 0x22644C}, /* East Asian ideograph */ {"\x90", 0, 0x22644E}, /* East Asian ideograph */ {"\x98", 0, 0x22644F}, /* East Asian ideograph */ {"\x87", 0, 0x226452}, /* East Asian ideograph */ {"\x8C", 0, 0x226456}, /* East Asian ideograph */ {"\xA8", 0, 0x22645A}, /* East Asian ideograph */ {"\xAD", 0, 0x22645B}, /* East Asian ideograph */ {"\xA4", 0, 0x226460}, /* East Asian ideograph */ {"\x9C", 0, 0x226461}, /* East Asian ideograph */ {"\xB6", 0, 0x226464}, /* East Asian ideograph */ {"\xAA", 0, 0x226466}, /* East Asian ideograph */ {"\xBF", 0, 0x22646C}, /* East Asian ideograph */ {"\x95", 0, 0x274E45}, /* East Asian ideograph */ {"\xAE", 0, 0x274E49}, /* East Asian ideograph */ {"\x80", 0, 0x274E59}, /* East Asian ideograph */ {"\xB7", 0, 0x276252}, /* East Asian ideograph */ {"\x96", 0, 0x286460}, /* East Asian ideograph */ {"\x97", 0, 0x286622}, /* East Asian ideograph */ {"\x8E", 0, 0x334E37}, /* East Asian ideograph */ {"\xB2", 0, 0x694823}, /* East Asian ideograph */ {"\xB4", 0, 0x69626D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page176 = { marc8r_31page176_flat, 0 }; /* PAGE 175 */ struct yaz_iconv_trie_flat marc8r_31page175_flat[] = { {"\x82", 0, 0x214E2A}, /* East Asian ideograph */ {"\x8D", 0, 0x214E2B}, /* East Asian ideograph */ {"\x8C", 0, 0x214E2C}, /* East Asian ideograph */ {"\xB0", 0, 0x214E2E}, /* East Asian ideograph */ {"\x9D", 0, 0x214E2F}, /* East Asian ideograph */ {"\xB4", 0, 0x214E30}, /* East Asian ideograph */ {"\xB8", 0, 0x214E31}, /* East Asian ideograph */ {"\xB7", 0, 0x214E32}, /* East Asian ideograph */ {"\xA7", 0, 0x214E33}, /* East Asian ideograph */ {"\xAD", 0, 0x214E34}, /* East Asian ideograph */ {"\xA5", 0, 0x214E35}, /* East Asian ideograph */ {"\x89", 0, 0x226370}, /* East Asian ideograph */ {"\x86", 0, 0x226371}, /* East Asian ideograph */ {"\x99", 0, 0x226373}, /* East Asian ideograph */ {"\x91", 0, 0x226374}, /* East Asian ideograph */ {"\x92", 0, 0x226378}, /* East Asian ideograph */ {"\x9B", 0, 0x226424}, /* East Asian ideograph */ {"\xAC", 0, 0x226426}, /* East Asian ideograph */ {"\xA3", 0, 0x226427}, /* East Asian ideograph */ {"\xAB", 0, 0x226428}, /* East Asian ideograph */ {"\xA9", 0, 0x22642A}, /* East Asian ideograph */ {"\xA2", 0, 0x22642D}, /* East Asian ideograph */ {"\xB5", 0, 0x226431}, /* East Asian ideograph */ {"\xB3", 0, 0x226432}, /* East Asian ideograph */ {"\xAE", 0, 0x226433}, /* East Asian ideograph */ {"\xA0", 0, 0x226435}, /* East Asian ideograph */ {"\xBD", 0, 0x226438}, /* East Asian ideograph */ {"\x9F", 0, 0x22643B}, /* East Asian ideograph */ {"\xB1", 0, 0x22643D}, /* East Asian ideograph */ {"\xA6", 0, 0x226450}, /* East Asian ideograph */ {"\x9A", 0, 0x274E3B}, /* East Asian ideograph */ {"\x95", 0, 0x274E3E}, /* East Asian ideograph */ {"\x81", 0, 0x274E4C}, /* East Asian ideograph */ {"\x96", 0, 0x274E53}, /* East Asian ideograph */ {"\xBA", 0, 0x274E5D}, /* East Asian ideograph */ {"\xBE", 0, 0x274E5E}, /* East Asian ideograph */ {"\x97", 0, 0x28645A}, /* East Asian ideograph */ {"\x80", 0, 0x286540}, /* East Asian ideograph */ {"\xBB", 0, 0x286655}, /* East Asian ideograph */ {"\xB2", 0, 0x3F4956}, /* East Asian ideograph */ {"\x94", 0, 0x4B4E37}, /* East Asian ideograph */ {"\xBF", 0, 0x4B4E5B}, /* East Asian ideograph */ {"\xB9", 0, 0x4C6376}, /* East Asian ideograph */ {"\x98", 0, 0x706D3B}, /* East Asian ideograph */ {"\x9C", 0, 0x706D3F}, /* East Asian ideograph */ {"\xBC", 0, 0x706D45}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page175 = { marc8r_31page175_flat, 0 }; /* PAGE 174 */ struct yaz_iconv_trie_flat marc8r_31page174_flat[] = { {"\x93", 0, 0x214D7A}, /* East Asian ideograph */ {"\x97", 0, 0x214D7B}, /* East Asian ideograph */ {"\x9A", 0, 0x214D7C}, /* East Asian ideograph */ {"\x9B", 0, 0x214D7D}, /* East Asian ideograph */ {"\x9C", 0, 0x214D7E}, /* East Asian ideograph */ {"\xA2", 0, 0x214E21}, /* East Asian ideograph */ {"\xA3", 0, 0x214E22}, /* East Asian ideograph */ {"\xA5", 0, 0x214E23}, /* East Asian ideograph */ {"\xA9", 0, 0x214E24}, /* East Asian ideograph */ {"\xAD", 0, 0x214E25}, /* East Asian ideograph */ {"\xAE", 0, 0x214E26}, /* East Asian ideograph */ {"\xAF", 0, 0x214E27}, /* East Asian ideograph */ {"\xB3", 0, 0x214E28}, /* East Asian ideograph */ {"\xBD", 0, 0x214E29}, /* East Asian ideograph */ {"\x8D", 0, 0x226335}, /* East Asian ideograph */ {"\x91", 0, 0x22633A}, /* East Asian ideograph */ {"\x9E", 0, 0x226345}, /* East Asian ideograph */ {"\x9F", 0, 0x226346}, /* East Asian ideograph */ {"\xA7", 0, 0x22634F}, /* East Asian ideograph */ {"\xA6", 0, 0x226352}, /* East Asian ideograph */ {"\xAC", 0, 0x226355}, /* East Asian ideograph */ {"\xB0", 0, 0x226359}, /* East Asian ideograph */ {"\xB1", 0, 0x22635A}, /* East Asian ideograph */ {"\xB4", 0, 0x22635C}, /* East Asian ideograph */ {"\xBC", 0, 0x226360}, /* East Asian ideograph */ {"\xB8", 0, 0x226367}, /* East Asian ideograph */ {"\xBB", 0, 0x226368}, /* East Asian ideograph */ {"\xAB", 0, 0x274E27}, /* East Asian ideograph */ {"\xB6", 0, 0x274E58}, /* East Asian ideograph */ {"\xBF", 0, 0x274E5B}, /* East Asian ideograph */ {"\xBE", 0, 0x274E5C}, /* East Asian ideograph */ {"\x81", 0, 0x2E625F}, /* East Asian ideograph */ {"\x87", 0, 0x4B5564}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page174 = { marc8r_31page174_flat, 0 }; /* PAGE 173 */ struct yaz_iconv_trie_flat marc8r_31page173_flat[] = { {"\x84", 0, 0x214D66}, /* East Asian ideograph */ {"\x87", 0, 0x214D68}, /* East Asian ideograph */ {"\x8E", 0, 0x214D69}, /* East Asian ideograph */ {"\x8C", 0, 0x214D6A}, /* East Asian ideograph */ {"\x91", 0, 0x214D6B}, /* East Asian ideograph */ {"\x9F", 0, 0x214D6C}, /* East Asian ideograph */ {"\x9E", 0, 0x214D6D}, /* East Asian ideograph */ {"\xA0", 0, 0x214D6E}, /* East Asian ideograph */ {"\xA5", 0, 0x214D6F}, /* East Asian ideograph */ {"\xB3", 0, 0x214D70}, /* East Asian ideograph */ {"\xAA", 0, 0x214D71}, /* East Asian ideograph */ {"\xB0", 0, 0x214D72}, /* East Asian ideograph */ {"\xAD", 0, 0x214D73}, /* East Asian ideograph */ {"\xAC", 0, 0x214D74}, /* East Asian ideograph */ {"\xA7", 0, 0x214D75}, /* East Asian ideograph */ {"\xBD", 0, 0x214D76}, /* East Asian ideograph */ {"\xBF", 0, 0x214D77}, /* East Asian ideograph */ {"\xBB", 0, 0x214D78}, /* East Asian ideograph */ {"\x80", 0, 0x226252}, /* East Asian ideograph */ {"\x85", 0, 0x22625F}, /* East Asian ideograph */ {"\x8B", 0, 0x226266}, /* East Asian ideograph (variant of EACC 4C6266) */ {"\x8D", 0, 0x22626A}, /* East Asian ideograph */ {"\x98", 0, 0x226272}, /* East Asian ideograph */ {"\x96", 0, 0x226273}, /* East Asian ideograph */ {"\xA2", 0, 0x226275}, /* East Asian ideograph */ {"\x99", 0, 0x226276}, /* East Asian ideograph */ {"\xB5", 0, 0x22627A}, /* East Asian ideograph */ {"\xB7", 0, 0x22627D}, /* East Asian ideograph */ {"\xB6", 0, 0x226323}, /* East Asian ideograph */ {"\xBE", 0, 0x226329}, /* East Asian ideograph */ {"\xB9", 0, 0x22632B}, /* East Asian ideograph */ {"\xBC", 0, 0x22632C}, /* East Asian ideograph */ {"\xA9", 0, 0x274D7C}, /* East Asian ideograph */ {"\x92", 0, 0x2D4D6D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page173 = { marc8r_31page173_flat, 0 }; /* PAGE 172 */ struct yaz_iconv_trie_flat marc8r_31page172_flat[] = { {"\x8F", 0, 0x214D57}, /* East Asian ideograph */ {"\xAB", 0, 0x214D58}, /* East Asian ideograph */ {"\x9B", 0, 0x214D59}, /* East Asian ideograph */ {"\xAA", 0, 0x214D5A}, /* East Asian ideograph */ {"\xA6", 0, 0x214D5B}, /* East Asian ideograph */ {"\xB9", 0, 0x214D5C}, /* East Asian ideograph */ {"\x9E", 0, 0x214D5D}, /* East Asian ideograph */ {"\xA3", 0, 0x214D5E}, /* East Asian ideograph */ {"\x9C", 0, 0x214D5F}, /* East Asian ideograph */ {"\xAC", 0, 0x214D60}, /* East Asian ideograph */ {"\xA8", 0, 0x214D61}, /* East Asian ideograph */ {"\xA5", 0, 0x214D62}, /* East Asian ideograph */ {"\xBD", 0, 0x214D63}, /* East Asian ideograph */ {"\xB1", 0, 0x214D64}, /* East Asian ideograph */ {"\xBF", 0, 0x214D65}, /* East Asian ideograph */ {"\xA1", 0, 0x214D67}, /* East Asian ideograph */ {"\x80", 0, 0x226174}, /* East Asian ideograph */ {"\x87", 0, 0x22622D}, /* East Asian ideograph */ {"\x85", 0, 0x226231}, /* East Asian ideograph */ {"\x8D", 0, 0x226232}, /* East Asian ideograph */ {"\x8A", 0, 0x226233}, /* East Asian ideograph */ {"\x83", 0, 0x226235}, /* East Asian ideograph */ {"\x8E", 0, 0x226237}, /* East Asian ideograph */ {"\x9F", 0, 0x22623A}, /* East Asian ideograph */ {"\xA0", 0, 0x22623D}, /* East Asian ideograph */ {"\x92", 0, 0x22623E}, /* East Asian ideograph */ {"\x98", 0, 0x226242}, /* East Asian ideograph */ {"\x96", 0, 0x226244}, /* East Asian ideograph */ {"\x9A", 0, 0x226245}, /* East Asian ideograph */ {"\xA2", 0, 0x22624F}, /* East Asian ideograph */ {"\xAF", 0, 0x226256}, /* East Asian ideograph */ {"\xBE", 0, 0x22625D}, /* East Asian ideograph */ {"\xBA", 0, 0x226260}, /* East Asian ideograph */ {"\x90", 0, 0x274D5D}, /* East Asian ideograph */ {"\x91", 0, 0x28632C}, /* East Asian ideograph */ {"\x81", 0, 0x2D4D5F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page172 = { marc8r_31page172_flat, 0 }; /* PAGE 171 */ struct yaz_iconv_trie_flat marc8r_31page171_flat[] = { {"\x89", 0, 0x214D46}, /* East Asian ideograph */ {"\x81", 0, 0x214D49}, /* East Asian ideograph */ {"\x8B", 0, 0x214D4A}, /* East Asian ideograph */ {"\xA9", 0, 0x214D4D}, /* East Asian ideograph */ {"\xA0", 0, 0x214D4E}, /* East Asian ideograph */ {"\x9E", 0, 0x214D4F}, /* East Asian ideograph */ {"\xA8", 0, 0x214D50}, /* East Asian ideograph */ {"\xB7", 0, 0x214D51}, /* East Asian ideograph */ {"\xBC", 0, 0x214D52}, /* East Asian ideograph */ {"\xB6", 0, 0x214D53}, /* East Asian ideograph */ {"\xB8", 0, 0x214D54}, /* East Asian ideograph */ {"\xBA", 0, 0x214D55}, /* East Asian ideograph */ {"\xBE", 0, 0x214D56}, /* East Asian ideograph */ {"\x84", 0, 0x22614B}, /* East Asian ideograph */ {"\x88", 0, 0x22614F}, /* East Asian ideograph */ {"\x87", 0, 0x226150}, /* East Asian ideograph */ {"\x8A", 0, 0x226154}, /* East Asian ideograph */ {"\xAB", 0, 0x22615E}, /* East Asian ideograph */ {"\x8E", 0, 0x226160}, /* East Asian ideograph */ {"\x9B", 0, 0x226162}, /* East Asian ideograph */ {"\xA4", 0, 0x226163}, /* East Asian ideograph */ {"\xA2", 0, 0x22616C}, /* East Asian ideograph */ {"\x9A", 0, 0x22616D}, /* East Asian ideograph */ {"\xA1", 0, 0x22616F}, /* East Asian ideograph */ {"\xB9", 0, 0x226175}, /* East Asian ideograph */ {"\xAF", 0, 0x226176}, /* East Asian ideograph */ {"\xB1", 0, 0x226177}, /* East Asian ideograph */ {"\xA5", 0, 0x226222}, /* East Asian ideograph */ {"\xB5", 0, 0x226225}, /* East Asian ideograph */ {"\xB4", 0, 0x226226}, /* East Asian ideograph */ {"\xA6", 0, 0x286222}, /* East Asian ideograph */ {"\x8D", 0, 0x286272}, /* East Asian ideograph */ {"\x9F", 0, 0x2D4D4F}, /* East Asian ideograph */ {"\x99", 0, 0x2D4D71}, /* East Asian ideograph */ {"\xAD", 0, 0x2E624F}, /* East Asian ideograph */ {"\x98", 0, 0x333F24}, /* East Asian ideograph */ {"\x8C", 0, 0x4B5164}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page171 = { marc8r_31page171_flat, 0 }; /* PAGE 170 */ struct yaz_iconv_trie_flat marc8r_31page170_flat[] = { {"\x82", 0, 0x214D2F}, /* East Asian ideograph */ {"\x88", 0, 0x214D31}, /* East Asian ideograph */ {"\x86", 0, 0x214D32}, /* East Asian ideograph */ {"\x8A", 0, 0x214D33}, /* East Asian ideograph */ {"\x8D", 0, 0x214D34}, /* East Asian ideograph */ {"\x8E", 0, 0x214D35}, /* East Asian ideograph */ {"\x94", 0, 0x214D36}, /* East Asian ideograph */ {"\x92", 0, 0x214D37}, /* East Asian ideograph */ {"\x9C", 0, 0x214D38}, /* East Asian ideograph */ {"\x9B", 0, 0x214D39}, /* East Asian ideograph */ {"\x9E", 0, 0x214D3A}, /* East Asian ideograph */ {"\x9F", 0, 0x214D3B}, /* East Asian ideograph */ {"\xA1", 0, 0x214D3C}, /* East Asian ideograph */ {"\xA3", 0, 0x214D3D}, /* East Asian ideograph */ {"\xA4", 0, 0x214D3E}, /* East Asian ideograph */ {"\xA7", 0, 0x214D3F}, /* East Asian ideograph */ {"\xA5", 0, 0x214D40}, /* East Asian ideograph */ {"\xAA", 0, 0x214D41}, /* East Asian ideograph */ {"\xAE", 0, 0x214D42}, /* East Asian ideograph */ {"\xAF", 0, 0x214D43}, /* East Asian ideograph */ {"\xB2", 0, 0x214D44}, /* East Asian ideograph */ {"\xB4", 0, 0x214D45}, /* East Asian ideograph */ {"\xB9", 0, 0x214D47}, /* East Asian ideograph */ {"\xB8", 0, 0x214D48}, /* East Asian ideograph */ {"\xBC", 0, 0x214D4B}, /* East Asian ideograph */ {"\xBE", 0, 0x214D4C}, /* East Asian ideograph */ {"\x8B", 0, 0x226123}, /* East Asian ideograph */ {"\x8C", 0, 0x226126}, /* East Asian ideograph */ {"\xA6", 0, 0x22613B}, /* East Asian ideograph */ {"\xA9", 0, 0x22613C}, /* East Asian ideograph */ {"\xAC", 0, 0x226140}, /* East Asian ideograph */ {"\xAD", 0, 0x226144}, /* East Asian ideograph */ {"\xB1", 0, 0x226148}, /* East Asian ideograph */ {"\xB7", 0, 0x226153}, /* East Asian ideograph */ {"\xBB", 0, 0x226159}, /* East Asian ideograph */ {"\x8F", 0, 0x274D3A}, /* East Asian ideograph */ {"\x91", 0, 0x274D3D}, /* East Asian ideograph */ {"\x98", 0, 0x274D3E}, /* East Asian ideograph */ {"\x90", 0, 0x276251}, /* East Asian ideograph */ {"\x87", 0, 0x2D4D34}, /* East Asian ideograph */ {"\x97", 0, 0x2D4D38}, /* East Asian ideograph */ {"\x96", 0, 0x2D5561}, /* East Asian ideograph */ {"\x83", 0, 0x334425}, /* East Asian ideograph */ {"\x85", 0, 0x334674}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page170 = { marc8r_31page170_flat, 0 }; /* PAGE 169 */ struct yaz_iconv_trie_flat marc8r_31page169_flat[] = { {"\x82", 0, 0x214D21}, /* East Asian ideograph */ {"\x84", 0, 0x214D22}, /* East Asian ideograph */ {"\x87", 0, 0x214D23}, /* East Asian ideograph */ {"\x86", 0, 0x214D24}, /* East Asian ideograph */ {"\x8E", 0, 0x214D26}, /* East Asian ideograph */ {"\x96", 0, 0x214D27}, /* East Asian ideograph */ {"\x93", 0, 0x214D28}, /* East Asian ideograph */ {"\x9A", 0, 0x214D29}, /* East Asian ideograph */ {"\xAE", 0, 0x214D2A}, /* East Asian ideograph */ {"\xB0", 0, 0x214D2B}, /* East Asian ideograph */ {"\xB4", 0, 0x214D2C}, /* East Asian ideograph */ {"\xBA", 0, 0x214D2D}, /* East Asian ideograph */ {"\xBF", 0, 0x214D2E}, /* East Asian ideograph */ {"\x80", 0, 0x226048}, /* East Asian ideograph */ {"\x8B", 0, 0x22604A}, /* East Asian ideograph */ {"\x95", 0, 0x226052}, /* East Asian ideograph */ {"\x99", 0, 0x226059}, /* East Asian ideograph */ {"\x9C", 0, 0x22605D}, /* East Asian ideograph */ {"\x9D", 0, 0x22605F}, /* East Asian ideograph */ {"\xA4", 0, 0x226065}, /* East Asian ideograph */ {"\xA5", 0, 0x226066}, /* East Asian ideograph */ {"\xA6", 0, 0x226067}, /* East Asian ideograph */ {"\xAA", 0, 0x22606A}, /* East Asian ideograph */ {"\xAD", 0, 0x22606D}, /* East Asian ideograph */ {"\xB8", 0, 0x226074}, /* East Asian ideograph */ {"\xBD", 0, 0x226077}, /* East Asian ideograph */ {"\x91", 0, 0x274D29}, /* East Asian ideograph */ {"\xB1", 0, 0x274D2D}, /* East Asian ideograph */ {"\x83", 0, 0x275966}, /* East Asian ideograph */ {"\x81", 0, 0x2D4D21}, /* East Asian ideograph */ {"\xB7", 0, 0x2D6275}, /* East Asian ideograph */ {"\x90", 0, 0x2E604A}, /* East Asian ideograph */ {"\xA1", 0, 0x2E6060}, /* East Asian ideograph */ {"\xBC", 0, 0x336275}, /* East Asian ideograph */ {"\x88", 0, 0x45462B}, /* East Asian ideograph */ {"\xB2", 0, 0x466074}, /* East Asian ideograph */ {"\xB9", 0, 0x4C6074}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page169 = { marc8r_31page169_flat, 0 }; /* PAGE 168 */ struct yaz_iconv_trie_flat marc8r_31page168_flat[] = { {"\x86", 0, 0x214C6D}, /* East Asian ideograph */ {"\x82", 0, 0x214C6E}, /* East Asian ideograph */ {"\x8C", 0, 0x214C6F}, /* East Asian ideograph */ {"\x96", 0, 0x214C70}, /* East Asian ideograph */ {"\x98", 0, 0x214C71}, /* East Asian ideograph */ {"\xA2", 0, 0x214C73}, /* East Asian ideograph */ {"\xA5", 0, 0x214C74}, /* East Asian ideograph */ {"\xA9", 0, 0x214C75}, /* East Asian ideograph */ {"\xAE", 0, 0x214C76}, /* East Asian ideograph */ {"\xAC", 0, 0x214C77}, /* East Asian ideograph */ {"\xB1", 0, 0x214C78}, /* East Asian ideograph */ {"\xB2", 0, 0x214C79}, /* East Asian ideograph (variant of EACC 4B4C79) */ {"\xB8", 0, 0x214C7A}, /* East Asian ideograph */ {"\xBC", 0, 0x214C7B}, /* East Asian ideograph */ {"\xBB", 0, 0x214C7C}, /* East Asian ideograph */ {"\xBD", 0, 0x214C7D}, /* East Asian ideograph */ {"\xBE", 0, 0x214C7E}, /* East Asian ideograph */ {"\x88", 0, 0x225F67}, /* East Asian ideograph */ {"\x8E", 0, 0x225F68}, /* East Asian ideograph */ {"\x87", 0, 0x225F69}, /* East Asian ideograph */ {"\x83", 0, 0x225F6A}, /* East Asian ideograph */ {"\x8D", 0, 0x225F6E}, /* East Asian ideograph */ {"\x89", 0, 0x225F6F}, /* East Asian ideograph */ {"\x94", 0, 0x225F75}, /* East Asian ideograph */ {"\x9C", 0, 0x225F7A}, /* East Asian ideograph */ {"\x97", 0, 0x225F7B}, /* East Asian ideograph */ {"\xA4", 0, 0x226022}, /* East Asian ideograph */ {"\x99", 0, 0x226024}, /* East Asian ideograph */ {"\x9F", 0, 0x22602B}, /* East Asian ideograph */ {"\xA7", 0, 0x226032}, /* East Asian ideograph */ {"\xAA", 0, 0x226035}, /* East Asian ideograph */ {"\xAD", 0, 0x226037}, /* East Asian ideograph */ {"\xAF", 0, 0x226038}, /* East Asian ideograph */ {"\xB0", 0, 0x22603A}, /* East Asian ideograph */ {"\xB6", 0, 0x226040}, /* East Asian ideograph */ {"\xB7", 0, 0x226041}, /* East Asian ideograph */ {"\x9E", 0, 0x274C75}, /* East Asian ideograph */ {"\xA3", 0, 0x274C77}, /* East Asian ideograph */ {"\xAB", 0, 0x274C79}, /* East Asian ideograph */ {"\xA1", 0, 0x2D4C5D}, /* East Asian ideograph */ {"\x92", 0, 0x333E7D}, /* East Asian ideograph */ {"\xBA", 0, 0x334C7B}, /* East Asian ideograph */ {"\xA8", 0, 0x4B5F62}, /* East Asian ideograph */ {"\x80", 0, 0x4C5F58}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page168 = { marc8r_31page168_flat, 0 }; /* PAGE 167 */ struct yaz_iconv_trie_flat marc8r_31page167_flat[] = { {"\x81", 0, 0x214C58}, /* East Asian ideograph */ {"\x80", 0, 0x214C59}, /* East Asian ideograph */ {"\x8D", 0, 0x214C60}, /* East Asian ideograph */ {"\xA7", 0, 0x214C61}, /* East Asian ideograph */ {"\x93", 0, 0x214C62}, /* East Asian ideograph */ {"\x8B", 0, 0x214C63}, /* East Asian ideograph */ {"\xA0", 0, 0x214C65}, /* East Asian ideograph */ {"\xA9", 0, 0x214C66}, /* East Asian ideograph */ {"\x9F", 0, 0x214C67}, /* East Asian ideograph */ {"\xA4", 0, 0x214C68}, /* East Asian ideograph */ {"\xA6", 0, 0x214C69}, /* East Asian ideograph */ {"\xA1", 0, 0x214C6A}, /* East Asian ideograph */ {"\xB4", 0, 0x214C6B}, /* East Asian ideograph */ {"\xB8", 0, 0x214C6C}, /* East Asian ideograph */ {"\x82", 0, 0x225E7A}, /* East Asian ideograph */ {"\x83", 0, 0x225E7E}, /* East Asian ideograph */ {"\x96", 0, 0x225F29}, /* East Asian ideograph */ {"\x88", 0, 0x225F2C}, /* East Asian ideograph */ {"\x95", 0, 0x225F2D}, /* East Asian ideograph */ {"\x8C", 0, 0x225F2E}, /* East Asian ideograph */ {"\x8F", 0, 0x225F2F}, /* East Asian ideograph */ {"\x90", 0, 0x225F3B}, /* East Asian ideograph */ {"\x8A", 0, 0x225F3C}, /* East Asian ideograph */ {"\xA5", 0, 0x225F3E}, /* East Asian ideograph */ {"\x9A", 0, 0x225F3F}, /* East Asian ideograph */ {"\x9B", 0, 0x225F40}, /* East Asian ideograph */ {"\x99", 0, 0x225F47}, /* East Asian ideograph */ {"\x9E", 0, 0x225F48}, /* East Asian ideograph */ {"\x9D", 0, 0x225F4C}, /* East Asian ideograph */ {"\xA2", 0, 0x225F50}, /* East Asian ideograph */ {"\xAF", 0, 0x225F51}, /* East Asian ideograph */ {"\xAD", 0, 0x225F54}, /* East Asian ideograph */ {"\xB3", 0, 0x225F5C}, /* East Asian ideograph */ {"\xBB", 0, 0x225F5E}, /* East Asian ideograph */ {"\xB0", 0, 0x225F5F}, /* East Asian ideograph */ {"\xBC", 0, 0x225F60}, /* East Asian ideograph */ {"\xB5", 0, 0x225F62}, /* East Asian ideograph */ {"\xBE", 0, 0x274C76}, /* East Asian ideograph */ {"\xAB", 0, 0x274C78}, /* East Asian ideograph */ {"\x97", 0, 0x285F48}, /* East Asian ideograph */ {"\x98", 0, 0x285F5E}, /* East Asian ideograph */ {"\x85", 0, 0x285F6F}, /* East Asian ideograph */ {"\xAA", 0, 0x28602B}, /* East Asian ideograph */ {"\xBF", 0, 0x286037}, /* East Asian ideograph */ {"\x89", 0, 0x393E7D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page167 = { marc8r_31page167_flat, 0 }; /* PAGE 166 */ struct yaz_iconv_trie_flat marc8r_31page166_flat[] = { {"\x87", 0, 0x214C46}, /* East Asian ideograph */ {"\x85", 0, 0x214C47}, /* East Asian ideograph */ {"\x95", 0, 0x214C4E}, /* East Asian ideograph */ {"\x94", 0, 0x214C4F}, /* East Asian ideograph */ {"\x8A", 0, 0x214C51}, /* East Asian ideograph (variant of EACC 4B4C51) */ {"\x9B", 0, 0x214C52}, /* East Asian ideograph */ {"\xA3", 0, 0x214C53}, /* East Asian ideograph */ {"\x98", 0, 0x214C54}, /* East Asian ideograph */ {"\x9E", 0, 0x214C55}, /* East Asian ideograph */ {"\x99", 0, 0x214C56}, /* East Asian ideograph */ {"\xA2", 0, 0x214C57}, /* East Asian ideograph */ {"\xB0", 0, 0x214C5A}, /* East Asian ideograph */ {"\xB2", 0, 0x214C5B}, /* East Asian ideograph */ {"\xB1", 0, 0x214C5C}, /* East Asian ideograph */ {"\xB4", 0, 0x214C5D}, /* East Asian ideograph */ {"\xBF", 0, 0x214C5E}, /* East Asian ideograph */ {"\xBA", 0, 0x214C5F}, /* East Asian ideograph */ {"\x83", 0, 0x225E44}, /* East Asian ideograph */ {"\x82", 0, 0x225E4A}, /* East Asian ideograph */ {"\x81", 0, 0x225E4E}, /* East Asian ideograph */ {"\x84", 0, 0x225E51}, /* East Asian ideograph */ {"\x8D", 0, 0x225E58}, /* East Asian ideograph */ {"\x8F", 0, 0x225E5C}, /* East Asian ideograph */ {"\x8C", 0, 0x225E5E}, /* East Asian ideograph */ {"\x90", 0, 0x225E5F}, /* East Asian ideograph */ {"\xA7", 0, 0x225E63}, /* East Asian ideograph */ {"\xA1", 0, 0x225E66}, /* East Asian ideograph */ {"\xA6", 0, 0x225E67}, /* East Asian ideograph */ {"\xA4", 0, 0x225E71}, /* East Asian ideograph */ {"\xA0", 0, 0x225E72}, /* East Asian ideograph */ {"\x97", 0, 0x225E73}, /* East Asian ideograph */ {"\xB9", 0, 0x225F21}, /* East Asian ideograph */ {"\xBC", 0, 0x225F22}, /* East Asian ideograph */ {"\x89", 0, 0x274C56}, /* East Asian ideograph */ {"\xAA", 0, 0x274C62}, /* East Asian ideograph */ {"\xA8", 0, 0x274C6D}, /* East Asian ideograph */ {"\x92", 0, 0x274C73}, /* East Asian ideograph */ {"\x96", 0, 0x285E7A}, /* East Asian ideograph */ {"\x88", 0, 0x28603A}, /* East Asian ideograph */ {"\xBE", 0, 0x345E47}, /* East Asian ideograph */ {"\xB3", 0, 0x4B4C5B}, /* East Asian ideograph */ {"\xAB", 0, 0x4C5F69}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page166 = { marc8r_31page166_flat, 0 }; /* PAGE 165 */ struct yaz_iconv_trie_flat marc8r_31page165_flat[] = { {"\x86", 0, 0x214C3A}, /* East Asian ideograph */ {"\x87", 0, 0x214C3B}, /* East Asian ideograph */ {"\x8A", 0, 0x214C3C}, /* East Asian ideograph */ {"\x8F", 0, 0x214C3E}, /* East Asian ideograph */ {"\x91", 0, 0x214C3F}, /* East Asian ideograph */ {"\x9D", 0, 0x214C40}, /* East Asian ideograph */ {"\x99", 0, 0x214C41}, /* East Asian ideograph */ {"\x9A", 0, 0x214C42}, /* East Asian ideograph */ {"\xA4", 0, 0x214C43}, /* East Asian ideograph */ {"\xAB", 0, 0x214C44}, /* East Asian ideograph */ {"\xA5", 0, 0x214C45}, /* East Asian ideograph */ {"\xB3", 0, 0x214C48}, /* East Asian ideograph */ {"\xB2", 0, 0x214C49}, /* East Asian ideograph */ {"\xBD", 0, 0x214C4A}, /* East Asian ideograph */ {"\xBE", 0, 0x214C4B}, /* East Asian ideograph */ {"\xBC", 0, 0x214C4C}, /* East Asian ideograph */ {"\xB9", 0, 0x214C4D}, /* East Asian ideograph */ {"\xB5", 0, 0x214C50}, /* East Asian ideograph */ {"\x83", 0, 0x225E25}, /* East Asian ideograph */ {"\x90", 0, 0x225E2C}, /* East Asian ideograph */ {"\x92", 0, 0x225E2D}, /* East Asian ideograph */ {"\x94", 0, 0x225E2E}, /* East Asian ideograph */ {"\x95", 0, 0x225E31}, /* East Asian ideograph */ {"\x98", 0, 0x225E35}, /* East Asian ideograph */ {"\xA2", 0, 0x225E37}, /* East Asian ideograph */ {"\xA3", 0, 0x225E3B}, /* East Asian ideograph */ {"\xBA", 0, 0x225E3E}, /* East Asian ideograph */ {"\xB0", 0, 0x225E43}, /* East Asian ideograph */ {"\xBF", 0, 0x225E46}, /* East Asian ideograph */ {"\xB4", 0, 0x225E47}, /* East Asian ideograph */ {"\xB1", 0, 0x225E50}, /* East Asian ideograph */ {"\xA1", 0, 0x274C60}, /* East Asian ideograph */ {"\x9F", 0, 0x274C61}, /* East Asian ideograph */ {"\xAF", 0, 0x274C63}, /* East Asian ideograph */ {"\xAE", 0, 0x274C6A}, /* East Asian ideograph */ {"\x97", 0, 0x274C6E}, /* East Asian ideograph */ {"\xA0", 0, 0x274C71}, /* East Asian ideograph */ {"\xAC", 0, 0x286032}, /* East Asian ideograph */ {"\x8B", 0, 0x2D3453}, /* East Asian ideograph */ {"\x8E", 0, 0x2D4C3E}, /* East Asian ideograph */ {"\xB8", 0, 0x2E5F6F}, /* East Asian ideograph */ {"\x82", 0, 0x3F4C3C}, /* East Asian ideograph */ {"\x89", 0, 0x454C3C}, /* East Asian ideograph */ {"\x96", 0, 0x4C6022}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page165 = { marc8r_31page165_flat, 0 }; /* PAGE 164 */ struct yaz_iconv_trie_flat marc8r_31page164_flat[] = { {"\x8F", 0, 0x214C2B}, /* East Asian ideograph */ {"\x8C", 0, 0x214C2C}, /* East Asian ideograph */ {"\x9D", 0, 0x214C2D}, /* East Asian ideograph */ {"\x9C", 0, 0x214C2E}, /* East Asian ideograph */ {"\x94", 0, 0x214C2F}, /* East Asian ideograph */ {"\x9A", 0, 0x214C30}, /* East Asian ideograph */ {"\x99", 0, 0x214C31}, /* East Asian ideograph */ {"\xA6", 0, 0x214C32}, /* East Asian ideograph */ {"\xA2", 0, 0x214C33}, /* East Asian ideograph */ {"\xB0", 0, 0x214C34}, /* East Asian ideograph */ {"\xA5", 0, 0x214C35}, /* East Asian ideograph */ {"\xAB", 0, 0x214C36}, /* East Asian ideograph */ {"\xAA", 0, 0x214C37}, /* East Asian ideograph */ {"\xB8", 0, 0x214C38}, /* East Asian ideograph */ {"\xB6", 0, 0x214C39}, /* East Asian ideograph */ {"\x93", 0, 0x22477B}, /* East Asian ideograph */ {"\x91", 0, 0x225068}, /* East Asian ideograph */ {"\x80", 0, 0x225D51}, /* East Asian ideograph */ {"\x8A", 0, 0x225D55}, /* East Asian ideograph */ {"\x8E", 0, 0x225D57}, /* East Asian ideograph */ {"\x87", 0, 0x225D58}, /* East Asian ideograph */ {"\x8B", 0, 0x225D59}, /* East Asian ideograph */ {"\x88", 0, 0x225D5A}, /* East Asian ideograph */ {"\x9F", 0, 0x225D5F}, /* East Asian ideograph */ {"\x9B", 0, 0x225D60}, /* East Asian ideograph */ {"\xA4", 0, 0x225D62}, /* East Asian ideograph */ {"\xA3", 0, 0x225D67}, /* East Asian ideograph */ {"\xAF", 0, 0x225D69}, /* East Asian ideograph */ {"\xAC", 0, 0x225D6B}, /* East Asian ideograph */ {"\xB9", 0, 0x225D6D}, /* East Asian ideograph */ {"\xBA", 0, 0x225D6E}, /* East Asian ideograph */ {"\xB7", 0, 0x225D71}, /* East Asian ideograph */ {"\xB1", 0, 0x225D75}, /* East Asian ideograph */ {"\xBD", 0, 0x225D79}, /* East Asian ideograph */ {"\xBF", 0, 0x225D7E}, /* East Asian ideograph */ {"\x85", 0, 0x274343}, /* East Asian ideograph */ {"\x84", 0, 0x274C31}, /* East Asian ideograph */ {"\xB4", 0, 0x274C3B}, /* East Asian ideograph */ {"\xB2", 0, 0x285D6B}, /* East Asian ideograph */ {"\xAE", 0, 0x2D4C2D}, /* East Asian ideograph */ {"\xA7", 0, 0x2D4C35}, /* East Asian ideograph */ {"\x8D", 0, 0x334C2C}, /* East Asian ideograph */ {"\xAD", 0, 0x345D6B}, /* East Asian ideograph */ {"\x86", 0, 0x394C2D}, /* East Asian ideograph */ {"\xB5", 0, 0x4B4C36}, /* East Asian ideograph */ {"\xB3", 0, 0x4B4C3C}, /* East Asian ideograph */ {"\xA0", 0, 0x69482B}, /* East Asian ideograph */ {"\x89", 0, 0x69613A}, /* East Asian ideograph */ {"\xA9", 0, 0x69613E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page164 = { marc8r_31page164_flat, 0 }; /* PAGE 163 */ struct yaz_iconv_trie_flat marc8r_31page163_flat[] = { {"\x84", 0, 0x214B73}, /* East Asian ideograph */ {"\x8C", 0, 0x214B74}, /* East Asian ideograph */ {"\x95", 0, 0x214B75}, /* East Asian ideograph */ {"\x98", 0, 0x214B76}, /* East Asian ideograph */ {"\x9A", 0, 0x214B77}, /* East Asian ideograph */ {"\x9C", 0, 0x214B78}, /* East Asian ideograph */ {"\x9F", 0, 0x214B79}, /* East Asian ideograph */ {"\xA2", 0, 0x214B7A}, /* East Asian ideograph */ {"\xA6", 0, 0x214B7B}, /* East Asian ideograph */ {"\xA5", 0, 0x214B7C}, /* East Asian ideograph */ {"\xA8", 0, 0x214B7D}, /* East Asian ideograph */ {"\xA9", 0, 0x214B7E}, /* East Asian ideograph */ {"\xAC", 0, 0x214C21}, /* East Asian ideograph */ {"\xAB", 0, 0x214C22}, /* East Asian ideograph */ {"\xAD", 0, 0x214C23}, /* East Asian ideograph */ {"\xB0", 0, 0x214C24}, /* East Asian ideograph */ {"\xB2", 0, 0x214C25}, /* East Asian ideograph */ {"\xB1", 0, 0x214C26}, /* East Asian ideograph */ {"\xB3", 0, 0x214C27}, /* East Asian ideograph */ {"\xB7", 0, 0x214C28}, /* East Asian ideograph */ {"\xB8", 0, 0x214C29}, /* East Asian ideograph */ {"\xBD", 0, 0x214C2A}, /* East Asian ideograph */ {"\x85", 0, 0x225C71}, /* East Asian ideograph */ {"\x83", 0, 0x225C77}, /* East Asian ideograph */ {"\x87", 0, 0x225C7D}, /* East Asian ideograph */ {"\x8E", 0, 0x225D25}, /* East Asian ideograph */ {"\x8D", 0, 0x225D28}, /* East Asian ideograph */ {"\x91", 0, 0x225D2C}, /* East Asian ideograph */ {"\x8F", 0, 0x225D2D}, /* East Asian ideograph */ {"\x92", 0, 0x225D32}, /* East Asian ideograph */ {"\x93", 0, 0x225D33}, /* East Asian ideograph */ {"\x97", 0, 0x225D39}, /* East Asian ideograph */ {"\xA1", 0, 0x225D42}, /* East Asian ideograph */ {"\xA4", 0, 0x225D44}, /* East Asian ideograph */ {"\xAF", 0, 0x225D49}, /* East Asian ideograph */ {"\xBA", 0, 0x225D4D}, /* East Asian ideograph */ {"\xBF", 0, 0x225D4F}, /* East Asian ideograph */ {"\xBE", 0, 0x225D52}, /* East Asian ideograph */ {"\xBB", 0, 0x274C36}, /* East Asian ideograph */ {"\xB5", 0, 0x275F55}, /* East Asian ideograph */ {"\x9E", 0, 0x2D3730}, /* East Asian ideograph */ {"\x86", 0, 0x2D4B72}, /* East Asian ideograph */ {"\xAA", 0, 0x2D5833}, /* East Asian ideograph */ {"\x96", 0, 0x2E742E}, /* East Asian ideograph */ {"\xA3", 0, 0x454B7A}, /* East Asian ideograph */ {"\xBC", 0, 0x696136}, /* East Asian ideograph */ {"\x99", 0, 0x705F30}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page163 = { marc8r_31page163_flat, 0 }; /* PAGE 162 */ struct yaz_iconv_trie_flat marc8r_31page162_flat[] = { {"\x8A", 0, 0x214B6A}, /* East Asian ideograph */ {"\x8F", 0, 0x214B6B}, /* East Asian ideograph */ {"\x9C", 0, 0x214B6C}, /* East Asian ideograph */ {"\xA0", 0, 0x214B6D}, /* East Asian ideograph */ {"\xA2", 0, 0x214B6E}, /* East Asian ideograph */ {"\xA3", 0, 0x214B6F}, /* East Asian ideograph */ {"\xA6", 0, 0x214B70}, /* East Asian ideograph */ {"\xB6", 0, 0x214B71}, /* East Asian ideograph */ {"\xB7", 0, 0x214B72}, /* East Asian ideograph */ {"\x80", 0, 0x225B7A}, /* East Asian ideograph */ {"\x88", 0, 0x225C30}, /* East Asian ideograph */ {"\x85", 0, 0x225C31}, /* East Asian ideograph */ {"\x8C", 0, 0x225C32}, /* East Asian ideograph */ {"\x96", 0, 0x225C38}, /* East Asian ideograph */ {"\x94", 0, 0x225C3A}, /* East Asian ideograph */ {"\x98", 0, 0x225C3D}, /* East Asian ideograph */ {"\x9A", 0, 0x225C40}, /* East Asian ideograph */ {"\x9B", 0, 0x225C41}, /* East Asian ideograph */ {"\x9E", 0, 0x225C47}, /* East Asian ideograph */ {"\xA4", 0, 0x225C50}, /* East Asian ideograph */ {"\xA7", 0, 0x225C52}, /* East Asian ideograph */ {"\xA9", 0, 0x225C54}, /* East Asian ideograph */ {"\xB1", 0, 0x225C58}, /* East Asian ideograph */ {"\xB0", 0, 0x225C5A}, /* East Asian ideograph */ {"\xAE", 0, 0x225C5C}, /* East Asian ideograph */ {"\xB4", 0, 0x225C61}, /* East Asian ideograph */ {"\xB8", 0, 0x225C63}, /* East Asian ideograph */ {"\xBB", 0, 0x225C66}, /* East Asian ideograph */ {"\xBF", 0, 0x225C67}, /* East Asian ideograph */ {"\xAF", 0, 0x274B74}, /* East Asian ideograph */ {"\x92", 0, 0x285C40}, /* East Asian ideograph */ {"\xB2", 0, 0x696126}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page162 = { marc8r_31page162_flat, 0 }; /* PAGE 161 */ struct yaz_iconv_trie_flat marc8r_31page161_flat[] = { {"\x83", 0, 0x214B5C}, /* East Asian ideograph */ {"\x8B", 0, 0x214B62}, /* East Asian ideograph */ {"\x9C", 0, 0x214B63}, /* East Asian ideograph (variant of EACC 4B4B63) */ {"\xA3", 0, 0x214B64}, /* East Asian ideograph */ {"\xA7", 0, 0x214B65}, /* East Asian ideograph */ {"\xA9", 0, 0x214B66}, /* East Asian ideograph */ {"\xB0", 0, 0x214B67}, /* East Asian ideograph */ {"\xA6", 0, 0x214B68}, /* East Asian ideograph */ {"\xBD", 0, 0x214B69}, /* East Asian ideograph */ {"\x84", 0, 0x225A7A}, /* East Asian ideograph */ {"\x87", 0, 0x225A7B}, /* East Asian ideograph */ {"\x88", 0, 0x225A7E}, /* East Asian ideograph */ {"\x89", 0, 0x225B21}, /* East Asian ideograph */ {"\x82", 0, 0x225B27}, /* East Asian ideograph */ {"\x8A", 0, 0x225B2A}, /* East Asian ideograph */ {"\x86", 0, 0x225B2D}, /* East Asian ideograph */ {"\x80", 0, 0x225B38}, /* East Asian ideograph */ {"\x81", 0, 0x225B3C}, /* East Asian ideograph */ {"\x85", 0, 0x225B3F}, /* East Asian ideograph */ {"\x97", 0, 0x225B40}, /* East Asian ideograph */ {"\x98", 0, 0x225B43}, /* East Asian ideograph */ {"\x9A", 0, 0x225B45}, /* East Asian ideograph */ {"\xA4", 0, 0x225B4D}, /* East Asian ideograph */ {"\x9F", 0, 0x225B54}, /* East Asian ideograph */ {"\x9D", 0, 0x225B55}, /* East Asian ideograph */ {"\x8D", 0, 0x225B56}, /* East Asian ideograph */ {"\x9E", 0, 0x225B57}, /* East Asian ideograph */ {"\xA0", 0, 0x225B59}, /* East Asian ideograph */ {"\xA1", 0, 0x225B5D}, /* East Asian ideograph */ {"\xB2", 0, 0x225B60}, /* East Asian ideograph */ {"\xB1", 0, 0x225B61}, /* East Asian ideograph */ {"\xB4", 0, 0x225B66}, /* East Asian ideograph */ {"\xAB", 0, 0x225B67}, /* East Asian ideograph */ {"\xAA", 0, 0x225B69}, /* East Asian ideograph */ {"\x90", 0, 0x225B6A}, /* East Asian ideograph */ {"\xA5", 0, 0x225B6C}, /* East Asian ideograph */ {"\xA8", 0, 0x225B6E}, /* East Asian ideograph */ {"\xB8", 0, 0x225B76}, /* East Asian ideograph */ {"\xBF", 0, 0x225C25}, /* East Asian ideograph */ {"\xB5", 0, 0x225C28}, /* East Asian ideograph */ {"\xBA", 0, 0x225C29}, /* East Asian ideograph */ {"\x8E", 0, 0x285C3A}, /* East Asian ideograph */ {"\xA2", 0, 0x2E5A78}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page161 = { marc8r_31page161_flat, 0 }; /* PAGE 160 */ struct yaz_iconv_trie_flat marc8r_31page160_flat[] = { {"\x95", 0, 0x214B53}, /* East Asian ideograph */ {"\x9F", 0, 0x214B54}, /* East Asian ideograph */ {"\x9A", 0, 0x214B55}, /* East Asian ideograph */ {"\x81", 0, 0x214B56}, /* East Asian ideograph */ {"\x9B", 0, 0x214B58}, /* East Asian ideograph */ {"\x9E", 0, 0x214B59}, /* East Asian ideograph */ {"\x9C", 0, 0x214B5A}, /* East Asian ideograph */ {"\x99", 0, 0x214B5B}, /* East Asian ideograph */ {"\xA9", 0, 0x214B5D}, /* East Asian ideograph */ {"\xAA", 0, 0x214B5E}, /* East Asian ideograph */ {"\xA3", 0, 0x214B5F}, /* East Asian ideograph */ {"\xA4", 0, 0x214B60}, /* East Asian ideograph */ {"\xB0", 0, 0x214B61}, /* East Asian ideograph */ {"\x84", 0, 0x225A36}, /* East Asian ideograph */ {"\x87", 0, 0x225A40}, /* East Asian ideograph */ {"\x98", 0, 0x225A43}, /* East Asian ideograph */ {"\x82", 0, 0x225A45}, /* East Asian ideograph */ {"\x8B", 0, 0x225A47}, /* East Asian ideograph */ {"\x8A", 0, 0x225A4A}, /* East Asian ideograph */ {"\x92", 0, 0x225A4F}, /* East Asian ideograph */ {"\x97", 0, 0x225A55}, /* East Asian ideograph */ {"\x91", 0, 0x225A56}, /* East Asian ideograph */ {"\x9D", 0, 0x225A5A}, /* East Asian ideograph */ {"\x94", 0, 0x225A5B}, /* East Asian ideograph */ {"\x80", 0, 0x225A5D}, /* East Asian ideograph */ {"\xAD", 0, 0x225A60}, /* East Asian ideograph */ {"\xA2", 0, 0x225A61}, /* East Asian ideograph */ {"\xB3", 0, 0x225A62}, /* East Asian ideograph */ {"\xB4", 0, 0x225A68}, /* East Asian ideograph */ {"\xAE", 0, 0x225A69}, /* East Asian ideograph */ {"\xB1", 0, 0x225A6A}, /* East Asian ideograph */ {"\xA8", 0, 0x225A6B}, /* East Asian ideograph */ {"\xA0", 0, 0x225A78}, /* East Asian ideograph */ {"\xB2", 0, 0x225A79}, /* East Asian ideograph */ {"\xBC", 0, 0x225B22}, /* East Asian ideograph */ {"\xBE", 0, 0x225B28}, /* East Asian ideograph */ {"\xBA", 0, 0x225B30}, /* East Asian ideograph */ {"\xBD", 0, 0x225B3E}, /* East Asian ideograph */ {"\xB7", 0, 0x274B68}, /* East Asian ideograph */ {"\xAF", 0, 0x2D4B43}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page160 = { marc8r_31page160_flat, 0 }; /* PAGE 159 */ struct yaz_iconv_trie_flat marc8r_31page159_flat[] = { {"\x85", 0, 0x214B43}, /* East Asian ideograph */ {"\x89", 0, 0x214B44}, /* East Asian ideograph */ {"\x83", 0, 0x214B45}, /* East Asian ideograph */ {"\x8A", 0, 0x214B46}, /* East Asian ideograph */ {"\x86", 0, 0x214B48}, /* East Asian ideograph */ {"\x8D", 0, 0x214B49}, /* East Asian ideograph */ {"\xBA", 0, 0x214B4A}, /* East Asian ideograph */ {"\xB5", 0, 0x214B4B}, /* East Asian ideograph */ {"\xB6", 0, 0x214B4C}, /* East Asian ideograph */ {"\xB4", 0, 0x214B4D}, /* East Asian ideograph */ {"\xAA", 0, 0x214B4E}, /* East Asian ideograph */ {"\xB3", 0, 0x214B4F}, /* East Asian ideograph */ {"\xA2", 0, 0x214B50}, /* East Asian ideograph */ {"\xA5", 0, 0x214B51}, /* East Asian ideograph */ {"\xBF", 0, 0x214B57}, /* East Asian ideograph */ {"\xB9", 0, 0x223D66}, /* East Asian ideograph */ {"\x87", 0, 0x22595C}, /* East Asian ideograph */ {"\x92", 0, 0x22595E}, /* East Asian ideograph */ {"\xBC", 0, 0x225963}, /* East Asian ideograph */ {"\xAE", 0, 0x225966}, /* East Asian ideograph */ {"\xAF", 0, 0x225967}, /* East Asian ideograph */ {"\x94", 0, 0x225969}, /* East Asian ideograph */ {"\xAC", 0, 0x22596A}, /* East Asian ideograph */ {"\xB0", 0, 0x22596C}, /* East Asian ideograph */ {"\xAB", 0, 0x22596E}, /* East Asian ideograph */ {"\x9A", 0, 0x225971}, /* East Asian ideograph */ {"\x96", 0, 0x225978}, /* East Asian ideograph */ {"\xA6", 0, 0x22597A}, /* East Asian ideograph */ {"\xA8", 0, 0x225A21}, /* East Asian ideograph */ {"\xA9", 0, 0x225A23}, /* East Asian ideograph */ {"\xA0", 0, 0x225A28}, /* East Asian ideograph */ {"\x9B", 0, 0x225A2A}, /* East Asian ideograph */ {"\xA4", 0, 0x225A2B}, /* East Asian ideograph */ {"\xB2", 0, 0x225A2C}, /* East Asian ideograph */ {"\xAD", 0, 0x225A2D}, /* East Asian ideograph */ {"\x95", 0, 0x225A30}, /* East Asian ideograph */ {"\xBB", 0, 0x225A32}, /* East Asian ideograph */ {"\x90", 0, 0x274B5F}, /* East Asian ideograph */ {"\x8F", 0, 0x285B21}, /* East Asian ideograph */ {"\xB1", 0, 0x3F5F49}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page159 = { marc8r_31page159_flat, 0 }; /* PAGE 158 */ struct yaz_iconv_trie_flat marc8r_31page158_flat[] = { {"\x8A", 0, 0x214B3A}, /* East Asian ideograph */ {"\x80", 0, 0x214B3C}, /* East Asian ideograph */ {"\x8D", 0, 0x214B3F}, /* East Asian ideograph */ {"\xAD", 0, 0x214B40}, /* East Asian ideograph */ {"\xAE", 0, 0x214B41}, /* East Asian ideograph */ {"\xA0", 0, 0x214B42}, /* East Asian ideograph */ {"\xBE", 0, 0x214B47}, /* East Asian ideograph */ {"\x8F", 0, 0x225868}, /* East Asian ideograph */ {"\x82", 0, 0x22586A}, /* East Asian ideograph */ {"\x90", 0, 0x22586B}, /* East Asian ideograph */ {"\x88", 0, 0x225870}, /* East Asian ideograph */ {"\x8C", 0, 0x22587D}, /* East Asian ideograph */ {"\x93", 0, 0x225921}, /* East Asian ideograph */ {"\xAA", 0, 0x225927}, /* East Asian ideograph */ {"\xA5", 0, 0x225928}, /* East Asian ideograph */ {"\x99", 0, 0x22592A}, /* East Asian ideograph */ {"\xAF", 0, 0x22592B}, /* East Asian ideograph */ {"\x94", 0, 0x22592F}, /* East Asian ideograph */ {"\x9B", 0, 0x225930}, /* East Asian ideograph */ {"\x96", 0, 0x225932}, /* East Asian ideograph */ {"\xA7", 0, 0x225936}, /* East Asian ideograph */ {"\xA3", 0, 0x225938}, /* East Asian ideograph */ {"\x9E", 0, 0x22593A}, /* East Asian ideograph */ {"\xA6", 0, 0x22593C}, /* East Asian ideograph */ {"\xA9", 0, 0x22593F}, /* East Asian ideograph */ {"\xB6", 0, 0x225945}, /* East Asian ideograph */ {"\xBA", 0, 0x225947}, /* East Asian ideograph */ {"\xB8", 0, 0x22594A}, /* East Asian ideograph */ {"\xB5", 0, 0x225954}, /* East Asian ideograph */ {"\xBD", 0, 0x22595A}, /* East Asian ideograph */ {"\xB7", 0, 0x225970}, /* East Asian ideograph */ {"\xB2", 0, 0x274B57}, /* East Asian ideograph */ {"\x91", 0, 0x274B6B}, /* East Asian ideograph */ {"\x89", 0, 0x2D4B35}, /* East Asian ideograph */ {"\x8E", 0, 0x2D4B3F}, /* East Asian ideograph */ {"\xB1", 0, 0x4C5C3A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page158 = { marc8r_31page158_flat, 0 }; /* PAGE 157 */ struct yaz_iconv_trie_flat marc8r_31page157_flat[] = { {"\x80", 0, 0x214B2F}, /* East Asian ideograph */ {"\x84", 0, 0x214B30}, /* East Asian ideograph */ {"\x87", 0, 0x214B31}, /* East Asian ideograph */ {"\x89", 0, 0x214B32}, /* East Asian ideograph */ {"\x8B", 0, 0x214B33}, /* East Asian ideograph */ {"\x96", 0, 0x214B34}, /* East Asian ideograph */ {"\x9F", 0, 0x214B35}, /* East Asian ideograph */ {"\xA8", 0, 0x214B36}, /* East Asian ideograph */ {"\xA9", 0, 0x214B37}, /* East Asian ideograph */ {"\xAB", 0, 0x214B38}, /* East Asian ideograph */ {"\xBB", 0, 0x214B39}, /* East Asian ideograph */ {"\xB7", 0, 0x214B3B}, /* East Asian ideograph */ {"\xB2", 0, 0x214B3E}, /* East Asian ideograph */ {"\x8D", 0, 0x216437}, /* East Asian ideograph */ {"\x81", 0, 0x22583B}, /* East Asian ideograph */ {"\x88", 0, 0x22583F}, /* East Asian ideograph */ {"\x8E", 0, 0x225842}, /* East Asian ideograph */ {"\x95", 0, 0x225846}, /* East Asian ideograph */ {"\x92", 0, 0x225847}, /* East Asian ideograph */ {"\x97", 0, 0x225848}, /* East Asian ideograph */ {"\x93", 0, 0x22584C}, /* East Asian ideograph */ {"\x94", 0, 0x22584D}, /* East Asian ideograph */ {"\x9E", 0, 0x225851}, /* East Asian ideograph */ {"\xA6", 0, 0x225852}, /* East Asian ideograph */ {"\xA5", 0, 0x22585D}, /* East Asian ideograph */ {"\xA2", 0, 0x225862}, /* East Asian ideograph */ {"\xA0", 0, 0x225863}, /* East Asian ideograph */ {"\xB6", 0, 0x225867}, /* East Asian ideograph */ {"\xBF", 0, 0x22586F}, /* East Asian ideograph */ {"\xBC", 0, 0x225935}, /* East Asian ideograph */ {"\xB0", 0, 0x274B47}, /* East Asian ideograph */ {"\x9B", 0, 0x274B5E}, /* East Asian ideograph */ {"\x91", 0, 0x274B64}, /* East Asian ideograph */ {"\xAF", 0, 0x274B67}, /* East Asian ideograph */ {"\xBA", 0, 0x274B69}, /* East Asian ideograph */ {"\xAE", 0, 0x285A47}, /* East Asian ideograph */ {"\x85", 0, 0x2D3954}, /* East Asian ideograph */ {"\xB3", 0, 0x2E5A40}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page157 = { marc8r_31page157_flat, 0 }; /* PAGE 156 */ struct yaz_iconv_trie_flat marc8r_31page156_flat[] = { {"\x84", 0, 0x214A7E}, /* East Asian ideograph */ {"\x85", 0, 0x214B23}, /* East Asian ideograph */ {"\x90", 0, 0x214B24}, /* East Asian ideograph */ {"\x97", 0, 0x214B26}, /* East Asian ideograph */ {"\xA8", 0, 0x214B27}, /* East Asian ideograph */ {"\xB0", 0, 0x214B28}, /* East Asian ideograph */ {"\xB2", 0, 0x214B29}, /* East Asian ideograph */ {"\xB7", 0, 0x214B2A}, /* East Asian ideograph */ {"\xB8", 0, 0x214B2B}, /* East Asian ideograph */ {"\xB5", 0, 0x214B2C}, /* East Asian ideograph */ {"\xBA", 0, 0x214B2D}, /* East Asian ideograph */ {"\xBB", 0, 0x214B2E}, /* East Asian ideograph */ {"\x87", 0, 0x22575A}, /* East Asian ideograph */ {"\x88", 0, 0x22575B}, /* East Asian ideograph */ {"\x89", 0, 0x22575C}, /* East Asian ideograph */ {"\x80", 0, 0x225765}, /* East Asian ideograph */ {"\x8D", 0, 0x225768}, /* East Asian ideograph */ {"\x92", 0, 0x22576B}, /* East Asian ideograph */ {"\x9E", 0, 0x225772}, /* East Asian ideograph */ {"\x9D", 0, 0x225774}, /* East Asian ideograph */ {"\xA0", 0, 0x225779}, /* East Asian ideograph */ {"\x98", 0, 0x22577B}, /* East Asian ideograph */ {"\xA2", 0, 0x22577E}, /* East Asian ideograph */ {"\x8B", 0, 0x225821}, /* East Asian ideograph */ {"\xA7", 0, 0x225825}, /* East Asian ideograph */ {"\xAC", 0, 0x225829}, /* East Asian ideograph */ {"\xAB", 0, 0x22582B}, /* East Asian ideograph */ {"\xAF", 0, 0x22582F}, /* East Asian ideograph */ {"\xBC", 0, 0x225836}, /* East Asian ideograph */ {"\xBE", 0, 0x225838}, /* East Asian ideograph */ {"\xAD", 0, 0x274B2D}, /* East Asian ideograph */ {"\x83", 0, 0x2D3556}, /* East Asian ideograph */ {"\xAA", 0, 0x2D4B22}, /* East Asian ideograph */ {"\xA3", 0, 0x4B4B2B}, /* East Asian ideograph */ {"\x8F", 0, 0x4B5963}, /* East Asian ideograph */ {"\x8E", 0, 0x517954}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page156 = { marc8r_31page156_flat, 0 }; /* PAGE 155 */ struct yaz_iconv_trie_flat marc8r_31page155_flat[] = { {"\x9C", 0, 0x214A74}, /* East Asian ideograph */ {"\x9B", 0, 0x214A75}, /* East Asian ideograph */ {"\x93", 0, 0x214A76}, /* East Asian ideograph */ {"\x96", 0, 0x214A77}, /* East Asian ideograph */ {"\x99", 0, 0x214A78}, /* East Asian ideograph */ {"\xB6", 0, 0x214A79}, /* East Asian ideograph */ {"\xB7", 0, 0x214A7A}, /* East Asian ideograph */ {"\xA9", 0, 0x214A7B}, /* East Asian ideograph */ {"\xA5", 0, 0x214A7C}, /* East Asian ideograph */ {"\xB4", 0, 0x214A7D}, /* East Asian ideograph */ {"\xBF", 0, 0x214B21}, /* East Asian ideograph */ {"\xBE", 0, 0x214B22}, /* East Asian ideograph */ {"\x82", 0, 0x225729}, /* East Asian ideograph */ {"\x81", 0, 0x22572D}, /* East Asian ideograph */ {"\x9D", 0, 0x225731}, /* East Asian ideograph */ {"\x8B", 0, 0x225735}, /* East Asian ideograph */ {"\x97", 0, 0x225736}, /* East Asian ideograph */ {"\x87", 0, 0x22573B}, /* East Asian ideograph */ {"\x98", 0, 0x22573E}, /* East Asian ideograph */ {"\x9E", 0, 0x225742}, /* East Asian ideograph */ {"\xB1", 0, 0x225746}, /* East Asian ideograph */ {"\xB8", 0, 0x225749}, /* East Asian ideograph */ {"\xA2", 0, 0x22574A}, /* East Asian ideograph */ {"\xB2", 0, 0x22574C}, /* East Asian ideograph */ {"\xAC", 0, 0x22574D}, /* East Asian ideograph */ {"\xA7", 0, 0x22574E}, /* East Asian ideograph */ {"\xAB", 0, 0x22574F}, /* East Asian ideograph */ {"\xAF", 0, 0x225752}, /* East Asian ideograph */ {"\xA8", 0, 0x225755}, /* East Asian ideograph */ {"\xBB", 0, 0x22575F}, /* East Asian ideograph */ {"\xBA", 0, 0x225762}, /* East Asian ideograph */ {"\x8E", 0, 0x274B2C}, /* East Asian ideograph */ {"\xAE", 0, 0x274B2E}, /* East Asian ideograph */ {"\xA1", 0, 0x274B2F}, /* East Asian ideograph */ {"\x83", 0, 0x28582B}, /* East Asian ideograph */ {"\x95", 0, 0x285836}, /* East Asian ideograph */ {"\xAA", 0, 0x2D595F}, /* East Asian ideograph */ {"\x8A", 0, 0x2F5D5C}, /* East Asian ideograph */ {"\x9F", 0, 0x4B4B2C}, /* East Asian ideograph */ {"\xB9", 0, 0x70622A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page155 = { marc8r_31page155_flat, 0 }; /* PAGE 154 */ struct yaz_iconv_trie_flat marc8r_31page154_flat[] = { {"\x84", 0, 0x214A65}, /* East Asian ideograph */ {"\x82", 0, 0x214A66}, /* East Asian ideograph */ {"\x99", 0, 0x214A67}, /* East Asian ideograph */ {"\x80", 0, 0x214A68}, /* East Asian ideograph */ {"\x8E", 0, 0x214A69}, /* East Asian ideograph */ {"\x97", 0, 0x214A6A}, /* East Asian ideograph */ {"\x90", 0, 0x214A6B}, /* East Asian ideograph */ {"\xA1", 0, 0x214A6C}, /* East Asian ideograph */ {"\xA9", 0, 0x214A6D}, /* East Asian ideograph */ {"\xA0", 0, 0x214A6E}, /* East Asian ideograph */ {"\xBC", 0, 0x214A6F}, /* East Asian ideograph */ {"\xB9", 0, 0x214A70}, /* East Asian ideograph */ {"\xBD", 0, 0x214A72}, /* East Asian ideograph */ {"\xB7", 0, 0x214A73}, /* East Asian ideograph */ {"\x86", 0, 0x225651}, /* East Asian ideograph */ {"\x83", 0, 0x225658}, /* East Asian ideograph */ {"\x81", 0, 0x22565B}, /* East Asian ideograph */ {"\x96", 0, 0x225660}, /* East Asian ideograph */ {"\x92", 0, 0x225664}, /* East Asian ideograph */ {"\x89", 0, 0x225667}, /* East Asian ideograph */ {"\x8C", 0, 0x22566C}, /* East Asian ideograph */ {"\x9B", 0, 0x22566E}, /* East Asian ideograph */ {"\x8D", 0, 0x22566F}, /* East Asian ideograph */ {"\xA8", 0, 0x225673}, /* East Asian ideograph */ {"\xAB", 0, 0x225676}, /* East Asian ideograph */ {"\xA5", 0, 0x225679}, /* East Asian ideograph */ {"\xBA", 0, 0x22567E}, /* East Asian ideograph */ {"\xB4", 0, 0x225724}, /* East Asian ideograph */ {"\xBE", 0, 0x225725}, /* East Asian ideograph */ {"\xBB", 0, 0x22572C}, /* East Asian ideograph */ {"\xB3", 0, 0x22572E}, /* East Asian ideograph */ {"\xAD", 0, 0x274A70}, /* East Asian ideograph */ {"\x88", 0, 0x274A72}, /* East Asian ideograph */ {"\xB1", 0, 0x274A7E}, /* East Asian ideograph */ {"\xAF", 0, 0x274B22}, /* East Asian ideograph */ {"\xAE", 0, 0x274B23}, /* East Asian ideograph */ {"\xAC", 0, 0x274B27}, /* East Asian ideograph */ {"\x9E", 0, 0x274B28}, /* East Asian ideograph */ {"\xB2", 0, 0x28575F}, /* East Asian ideograph */ {"\xB8", 0, 0x2D5965}, /* East Asian ideograph */ {"\xB0", 0, 0x4B4A78}, /* East Asian ideograph */ {"\xA2", 0, 0x4B5964}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page154 = { marc8r_31page154_flat, 0 }; /* PAGE 153 */ struct yaz_iconv_trie_flat marc8r_31page153_flat[] = { {"\x81", 0, 0x214A5B}, /* East Asian ideograph */ {"\x80", 0, 0x214A5C}, /* East Asian ideograph */ {"\x84", 0, 0x214A5D}, /* East Asian ideograph */ {"\x96", 0, 0x214A5E}, /* East Asian ideograph */ {"\x92", 0, 0x214A5F}, /* East Asian ideograph */ {"\x9B", 0, 0x214A60}, /* East Asian ideograph */ {"\xA2", 0, 0x214A61}, /* East Asian ideograph */ {"\xA7", 0, 0x214A62}, /* East Asian ideograph */ {"\xAC", 0, 0x214A63}, /* East Asian ideograph */ {"\xAF", 0, 0x214A64}, /* East Asian ideograph */ {"\x89", 0, 0x225574}, /* East Asian ideograph */ {"\x8B", 0, 0x22557C}, /* East Asian ideograph */ {"\x8D", 0, 0x225622}, /* East Asian ideograph */ {"\x8F", 0, 0x225628}, /* East Asian ideograph */ {"\xA8", 0, 0x225648}, /* East Asian ideograph */ {"\xAB", 0, 0x22564C}, /* East Asian ideograph */ {"\xB0", 0, 0x22564E}, /* East Asian ideograph */ {"\xB4", 0, 0x22564F}, /* East Asian ideograph */ {"\xB5", 0, 0x225652}, /* East Asian ideograph */ {"\xBC", 0, 0x225656}, /* East Asian ideograph */ {"\x8A", 0, 0x274A61}, /* East Asian ideograph */ {"\xB6", 0, 0x274A68}, /* East Asian ideograph */ {"\xB9", 0, 0x274A79}, /* East Asian ideograph */ {"\xB7", 0, 0x274B2A}, /* East Asian ideograph */ {"\xB8", 0, 0x28575E}, /* East Asian ideograph */ {"\x87", 0, 0x2D392F}, /* East Asian ideograph */ {"\x82", 0, 0x2D4A5B}, /* East Asian ideograph */ {"\xB2", 0, 0x2D5960}, /* East Asian ideograph */ {"\xA0", 0, 0x4B4A62}, /* East Asian ideograph */ {"\x9F", 0, 0x4C5638}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page153 = { marc8r_31page153_flat, 0 }; /* PAGE 152 */ struct yaz_iconv_trie_flat marc8r_31page152_flat[] = { {"\x86", 0, 0x214A46}, /* East Asian ideograph */ {"\x87", 0, 0x214A47}, /* East Asian ideograph */ {"\x88", 0, 0x214A48}, /* East Asian ideograph */ {"\x8C", 0, 0x214A49}, /* East Asian ideograph */ {"\x92", 0, 0x214A4A}, /* East Asian ideograph */ {"\x96", 0, 0x214A4B}, /* East Asian ideograph */ {"\x98", 0, 0x214A4C}, /* East Asian ideograph */ {"\x99", 0, 0x214A4D}, /* East Asian ideograph */ {"\x9B", 0, 0x214A4E}, /* East Asian ideograph */ {"\x9F", 0, 0x214A4F}, /* East Asian ideograph */ {"\x9D", 0, 0x214A50}, /* East Asian ideograph */ {"\xA2", 0, 0x214A51}, /* East Asian ideograph */ {"\xA1", 0, 0x214A52}, /* East Asian ideograph */ {"\xA0", 0, 0x214A53}, /* East Asian ideograph */ {"\xA7", 0, 0x214A54}, /* East Asian ideograph */ {"\xA9", 0, 0x214A55}, /* East Asian ideograph */ {"\xAF", 0, 0x214A56}, /* East Asian ideograph */ {"\xB2", 0, 0x214A57}, /* East Asian ideograph */ {"\xB4", 0, 0x214A58}, /* East Asian ideograph */ {"\xB9", 0, 0x214A59}, /* East Asian ideograph */ {"\xBD", 0, 0x214A5A}, /* East Asian ideograph */ {"\x81", 0, 0x225543}, /* East Asian ideograph */ {"\x82", 0, 0x225544}, /* East Asian ideograph */ {"\x90", 0, 0x22554F}, /* East Asian ideograph */ {"\x8F", 0, 0x225551}, /* East Asian ideograph */ {"\x93", 0, 0x225552}, /* East Asian ideograph */ {"\x95", 0, 0x225553}, /* East Asian ideograph */ {"\x9A", 0, 0x225556}, /* East Asian ideograph */ {"\xA3", 0, 0x225559}, /* East Asian ideograph */ {"\xB3", 0, 0x225561}, /* East Asian ideograph */ {"\xAE", 0, 0x225563}, /* East Asian ideograph */ {"\xB6", 0, 0x225566}, /* East Asian ideograph */ {"\xB7", 0, 0x225568}, /* East Asian ideograph */ {"\xBE", 0, 0x22556B}, /* East Asian ideograph */ {"\xBC", 0, 0x22556D}, /* East Asian ideograph */ {"\xBF", 0, 0x225571}, /* East Asian ideograph */ {"\x8D", 0, 0x274A4C}, /* East Asian ideograph */ {"\xB5", 0, 0x274A5A}, /* East Asian ideograph */ {"\xBA", 0, 0x274A62}, /* East Asian ideograph */ {"\x80", 0, 0x2D3C6E}, /* East Asian ideograph */ {"\x8B", 0, 0x33502B}, /* East Asian ideograph */ {"\xA6", 0, 0x3F4A60}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page152 = { marc8r_31page152_flat, 0 }; /* PAGE 151 */ struct yaz_iconv_trie_flat marc8r_31page151_flat[] = { {"\x86", 0, 0x214A35}, /* East Asian ideograph */ {"\x8D", 0, 0x214A36}, /* East Asian ideograph */ {"\x90", 0, 0x214A37}, /* East Asian ideograph */ {"\x9B", 0, 0x214A38}, /* East Asian ideograph */ {"\xA8", 0, 0x214A39}, /* East Asian ideograph */ {"\xAA", 0, 0x214A3A}, /* East Asian ideograph */ {"\xAD", 0, 0x214A3B}, /* East Asian ideograph */ {"\xAC", 0, 0x214A3C}, /* East Asian ideograph */ {"\xB0", 0, 0x214A3D}, /* East Asian ideograph */ {"\xB5", 0, 0x214A3E}, /* East Asian ideograph (variant of EACC 4B4A3E) */ {"\xB6", 0, 0x214A3F}, /* East Asian ideograph */ {"\xB8", 0, 0x214A40}, /* East Asian ideograph */ {"\xB9", 0, 0x214A41}, /* East Asian ideograph */ {"\xBA", 0, 0x214A42}, /* East Asian ideograph */ {"\xBB", 0, 0x214A43}, /* East Asian ideograph */ {"\xBD", 0, 0x214A44}, /* East Asian ideograph */ {"\xBE", 0, 0x214A45}, /* East Asian ideograph */ {"\x8C", 0, 0x22544B}, /* East Asian ideograph */ {"\x8E", 0, 0x22545B}, /* East Asian ideograph */ {"\x8A", 0, 0x22545E}, /* East Asian ideograph */ {"\x97", 0, 0x225460}, /* East Asian ideograph */ {"\x87", 0, 0x225461}, /* East Asian ideograph */ {"\x95", 0, 0x225466}, /* East Asian ideograph */ {"\x93", 0, 0x225469}, /* East Asian ideograph */ {"\x98", 0, 0x22546E}, /* East Asian ideograph */ {"\x8B", 0, 0x225471}, /* East Asian ideograph */ {"\x9A", 0, 0x225479}, /* East Asian ideograph */ {"\x9F", 0, 0x22547D}, /* East Asian ideograph */ {"\x9D", 0, 0x225521}, /* East Asian ideograph */ {"\xA5", 0, 0x225529}, /* East Asian ideograph */ {"\xA6", 0, 0x22552A}, /* East Asian ideograph */ {"\xBF", 0, 0x225541}, /* East Asian ideograph */ {"\xB1", 0, 0x273E77}, /* East Asian ideograph */ {"\xB7", 0, 0x274A42}, /* East Asian ideograph */ {"\xBC", 0, 0x4B316A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page151 = { marc8r_31page151_flat, 0 }; /* PAGE 150 */ struct yaz_iconv_trie_flat marc8r_31page150_flat[] = { {"\x99", 0, 0x21497E}, /* East Asian ideograph */ {"\x89", 0, 0x214A22}, /* East Asian ideograph */ {"\x90", 0, 0x214A23}, /* East Asian ideograph */ {"\x88", 0, 0x214A24}, /* East Asian ideograph */ {"\x9C", 0, 0x214A25}, /* East Asian ideograph */ {"\x92", 0, 0x214A26}, /* East Asian ideograph */ {"\x95", 0, 0x214A28}, /* East Asian ideograph */ {"\x8E", 0, 0x214A29}, /* East Asian ideograph */ {"\x83", 0, 0x214A2A}, /* East Asian ideograph */ {"\x84", 0, 0x214A2B}, /* East Asian ideograph */ {"\xAE", 0, 0x214A2C}, /* East Asian ideograph */ {"\xA7", 0, 0x214A2D}, /* East Asian ideograph */ {"\x9F", 0, 0x214A2E}, /* East Asian ideograph */ {"\xA5", 0, 0x214A2F}, /* East Asian ideograph */ {"\xAD", 0, 0x214A30}, /* East Asian ideograph */ {"\xA6", 0, 0x214A31}, /* East Asian ideograph */ {"\xAC", 0, 0x214A32}, /* East Asian ideograph */ {"\xB4", 0, 0x214A33}, /* East Asian ideograph */ {"\xBB", 0, 0x214A34}, /* East Asian ideograph */ {"\x91", 0, 0x225367}, /* East Asian ideograph */ {"\x87", 0, 0x225369}, /* East Asian ideograph */ {"\x8A", 0, 0x22536D}, /* East Asian ideograph */ {"\x8F", 0, 0x22536F}, /* East Asian ideograph */ {"\x96", 0, 0x225370}, /* East Asian ideograph */ {"\x82", 0, 0x225375}, /* East Asian ideograph */ {"\x85", 0, 0x225377}, /* East Asian ideograph */ {"\x9D", 0, 0x225421}, /* East Asian ideograph */ {"\x80", 0, 0x225422}, /* East Asian ideograph */ {"\x81", 0, 0x225424}, /* East Asian ideograph */ {"\x94", 0, 0x225426}, /* East Asian ideograph */ {"\x8B", 0, 0x225429}, /* East Asian ideograph */ {"\x9E", 0, 0x22542A}, /* East Asian ideograph */ {"\xAB", 0, 0x225432}, /* East Asian ideograph */ {"\xA8", 0, 0x225436}, /* East Asian ideograph */ {"\xB5", 0, 0x22543A}, /* East Asian ideograph */ {"\xB3", 0, 0x22543D}, /* East Asian ideograph */ {"\xA1", 0, 0x22543F}, /* East Asian ideograph */ {"\xA0", 0, 0x225447}, /* East Asian ideograph */ {"\xBC", 0, 0x22544F}, /* East Asian ideograph */ {"\xB9", 0, 0x225456}, /* East Asian ideograph */ {"\xBE", 0, 0x2E5452}, /* East Asian ideograph */ {"\xBF", 0, 0x33525B}, /* East Asian ideograph */ {"\x97", 0, 0x4B4A38}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page150 = { marc8r_31page150_flat, 0 }; /* PAGE 149 */ struct yaz_iconv_trie_flat marc8r_31page149_flat[] = { {"\x99", 0, 0x214977}, /* East Asian ideograph */ {"\x8A", 0, 0x214978}, /* East Asian ideograph */ {"\x84", 0, 0x214979}, /* East Asian ideograph */ {"\x9F", 0, 0x21497A}, /* East Asian ideograph */ {"\xA8", 0, 0x21497B}, /* East Asian ideograph */ {"\xAC", 0, 0x21497C}, /* East Asian ideograph */ {"\xB1", 0, 0x21497D}, /* East Asian ideograph */ {"\xBE", 0, 0x214A21}, /* East Asian ideograph */ {"\xB9", 0, 0x214A27}, /* East Asian ideograph */ {"\x87", 0, 0x22527B}, /* East Asian ideograph */ {"\x92", 0, 0x225323}, /* East Asian ideograph */ {"\x80", 0, 0x22532B}, /* East Asian ideograph */ {"\x89", 0, 0x22532C}, /* East Asian ideograph */ {"\x85", 0, 0x225332}, /* East Asian ideograph */ {"\x96", 0, 0x225333}, /* East Asian ideograph */ {"\x98", 0, 0x225339}, /* East Asian ideograph */ {"\x97", 0, 0x22533C}, /* East Asian ideograph */ {"\xB5", 0, 0x22533E}, /* East Asian ideograph */ {"\xA9", 0, 0x22533F}, /* East Asian ideograph */ {"\xA5", 0, 0x225342}, /* East Asian ideograph */ {"\x9E", 0, 0x225346}, /* East Asian ideograph */ {"\xB2", 0, 0x225347}, /* East Asian ideograph */ {"\x9B", 0, 0x22534A}, /* East Asian ideograph */ {"\xAF", 0, 0x22534E}, /* East Asian ideograph */ {"\xA4", 0, 0x225351}, /* East Asian ideograph */ {"\xA0", 0, 0x225352}, /* East Asian ideograph */ {"\x9A", 0, 0x225355}, /* East Asian ideograph */ {"\xB3", 0, 0x225357}, /* East Asian ideograph */ {"\xB4", 0, 0x225359}, /* East Asian ideograph */ {"\xB7", 0, 0x22536A}, /* East Asian ideograph */ {"\xBA", 0, 0x225372}, /* East Asian ideograph */ {"\xBF", 0, 0x22537A}, /* East Asian ideograph */ {"\xB8", 0, 0x22537C}, /* East Asian ideograph */ {"\x8F", 0, 0x2D4A34}, /* East Asian ideograph */ {"\x94", 0, 0x2D5E26}, /* East Asian ideograph */ {"\x88", 0, 0x4B4977}, /* East Asian ideograph */ {"\x95", 0, 0x695F70}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page149 = { marc8r_31page149_flat, 0 }; /* PAGE 148 */ struct yaz_iconv_trie_flat marc8r_31page148_flat[] = { {"\xAE", 0, 0x214963}, /* East Asian ideograph */ {"\x8E", 0, 0x214969}, /* East Asian ideograph */ {"\x89", 0, 0x21496A}, /* East Asian ideograph */ {"\x99", 0, 0x21496B}, /* East Asian ideograph */ {"\xA4", 0, 0x21496C}, /* East Asian ideograph */ {"\xA9", 0, 0x21496D}, /* East Asian ideograph */ {"\x9C", 0, 0x21496E}, /* East Asian ideograph */ {"\xAC", 0, 0x21496F}, /* East Asian ideograph */ {"\xA6", 0, 0x214970}, /* East Asian ideograph */ {"\xA7", 0, 0x214971}, /* East Asian ideograph */ {"\x9E", 0, 0x214972}, /* East Asian ideograph */ {"\xA5", 0, 0x214973}, /* East Asian ideograph */ {"\x8C", 0, 0x214974}, /* East Asian ideograph */ {"\xBD", 0, 0x214975}, /* East Asian ideograph */ {"\xB7", 0, 0x225248}, /* East Asian ideograph */ {"\x86", 0, 0x225251}, /* East Asian ideograph */ {"\x92", 0, 0x225252}, /* East Asian ideograph */ {"\x8F", 0, 0x225254}, /* East Asian ideograph */ {"\x9D", 0, 0x225255}, /* East Asian ideograph */ {"\x81", 0, 0x225256}, /* East Asian ideograph */ {"\xA0", 0, 0x225257}, /* East Asian ideograph */ {"\xB5", 0, 0x225259}, /* East Asian ideograph */ {"\xB3", 0, 0x22525A}, /* East Asian ideograph */ {"\x83", 0, 0x22525C}, /* East Asian ideograph */ {"\x9A", 0, 0x22525D}, /* East Asian ideograph */ {"\xB6", 0, 0x22525E}, /* East Asian ideograph */ {"\x8B", 0, 0x225260}, /* East Asian ideograph */ {"\x87", 0, 0x225262}, /* East Asian ideograph */ {"\xA8", 0, 0x225265}, /* East Asian ideograph */ {"\xB1", 0, 0x225266}, /* East Asian ideograph */ {"\x9F", 0, 0x225267}, /* East Asian ideograph */ {"\x90", 0, 0x225269}, /* East Asian ideograph */ {"\x93", 0, 0x22526B}, /* East Asian ideograph */ {"\x84", 0, 0x225270}, /* East Asian ideograph */ {"\xB2", 0, 0x225276}, /* East Asian ideograph */ {"\xB8", 0, 0x225278}, /* East Asian ideograph */ {"\xBB", 0, 0x22527C}, /* East Asian ideograph */ {"\xBC", 0, 0x225336}, /* East Asian ideograph */ {"\x85", 0, 0x2D5E24}, /* East Asian ideograph */ {"\x8A", 0, 0x2E3870}, /* East Asian ideograph */ {"\x9B", 0, 0x2E525D}, /* East Asian ideograph */ {"\x96", 0, 0x334342}, /* East Asian ideograph */ {"\xA2", 0, 0x345175}, /* East Asian ideograph */ {"\xBA", 0, 0x4C523A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page148 = { marc8r_31page148_flat, 0 }; /* PAGE 147 */ struct yaz_iconv_trie_flat marc8r_31page147_flat[] = { {"\x89", 0, 0x21495F}, /* East Asian ideograph */ {"\x8A", 0, 0x214960}, /* East Asian ideograph */ {"\x99", 0, 0x214962}, /* East Asian ideograph */ {"\x9A", 0, 0x214964}, /* East Asian ideograph */ {"\xB6", 0, 0x214965}, /* East Asian ideograph */ {"\xA1", 0, 0x214966}, /* East Asian ideograph */ {"\xB0", 0, 0x214967}, /* East Asian ideograph */ {"\xA6", 0, 0x214968}, /* East Asian ideograph */ {"\x84", 0, 0x225144}, /* East Asian ideograph */ {"\x90", 0, 0x22514A}, /* East Asian ideograph */ {"\x83", 0, 0x22514C}, /* East Asian ideograph */ {"\x91", 0, 0x225155}, /* East Asian ideograph */ {"\x92", 0, 0x225156}, /* East Asian ideograph */ {"\x8C", 0, 0x22515C}, /* East Asian ideograph */ {"\x93", 0, 0x225166}, /* East Asian ideograph */ {"\x80", 0, 0x225168}, /* East Asian ideograph */ {"\x9E", 0, 0x22516C}, /* East Asian ideograph */ {"\xB4", 0, 0x22516D}, /* East Asian ideograph */ {"\xA0", 0, 0x22516E}, /* East Asian ideograph */ {"\xBF", 0, 0x22516F}, /* East Asian ideograph */ {"\xB1", 0, 0x225174}, /* East Asian ideograph */ {"\xAD", 0, 0x225175}, /* East Asian ideograph */ {"\xB9", 0, 0x225227}, /* East Asian ideograph */ {"\xB5", 0, 0x225228}, /* East Asian ideograph */ {"\xBB", 0, 0x22522C}, /* East Asian ideograph */ {"\x9C", 0, 0x22522E}, /* East Asian ideograph */ {"\xBD", 0, 0x225232}, /* East Asian ideograph */ {"\xAF", 0, 0x225235}, /* East Asian ideograph */ {"\xA9", 0, 0x22523B}, /* East Asian ideograph */ {"\xAE", 0, 0x225243}, /* East Asian ideograph */ {"\x96", 0, 0x274A25}, /* East Asian ideograph */ {"\xBC", 0, 0x2D4A26}, /* East Asian ideograph */ {"\xB3", 0, 0x334968}, /* East Asian ideograph */ {"\x98", 0, 0x345452}, /* East Asian ideograph */ {"\x95", 0, 0x4B4973}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page147 = { marc8r_31page147_flat, 0 }; /* PAGE 146 */ struct yaz_iconv_trie_flat marc8r_31page146_flat[] = { {"\x8A", 0, 0x214958}, /* East Asian ideograph */ {"\xA4", 0, 0x214959}, /* East Asian ideograph */ {"\x98", 0, 0x21495A}, /* East Asian ideograph */ {"\x88", 0, 0x21495B}, /* East Asian ideograph */ {"\x99", 0, 0x21495C}, /* East Asian ideograph */ {"\x8F", 0, 0x21495D}, /* East Asian ideograph */ {"\xB9", 0, 0x21495E}, /* East Asian ideograph */ {"\xBD", 0, 0x214961}, /* East Asian ideograph */ {"\xBE", 0, 0x217627}, /* East Asian ideograph */ {"\xAA", 0, 0x225078}, /* East Asian ideograph */ {"\xA5", 0, 0x22507B}, /* East Asian ideograph */ {"\x9C", 0, 0x22507C}, /* East Asian ideograph */ {"\x93", 0, 0x22507D}, /* East Asian ideograph */ {"\x9D", 0, 0x225122}, /* East Asian ideograph */ {"\xA1", 0, 0x225123}, /* East Asian ideograph */ {"\xA3", 0, 0x225126}, /* East Asian ideograph */ {"\xA0", 0, 0x225128}, /* East Asian ideograph */ {"\x94", 0, 0x22512B}, /* East Asian ideograph */ {"\x91", 0, 0x22512E}, /* East Asian ideograph */ {"\x8B", 0, 0x225138}, /* East Asian ideograph */ {"\x90", 0, 0x22513A}, /* East Asian ideograph */ {"\x87", 0, 0x22513B}, /* East Asian ideograph */ {"\x9A", 0, 0x22513C}, /* East Asian ideograph */ {"\x86", 0, 0x22513D}, /* East Asian ideograph */ {"\xBA", 0, 0x22513F}, /* East Asian ideograph */ {"\xB7", 0, 0x225142}, /* East Asian ideograph */ {"\xB3", 0, 0x225148}, /* East Asian ideograph */ {"\xB4", 0, 0x225150}, /* East Asian ideograph */ {"\xB6", 0, 0x225160}, /* East Asian ideograph */ {"\xAF", 0, 0x225167}, /* East Asian ideograph */ {"\xA6", 0, 0x27496D}, /* East Asian ideograph */ {"\xAD", 0, 0x27497D}, /* East Asian ideograph */ {"\xAB", 0, 0x27497E}, /* East Asian ideograph */ {"\xA7", 0, 0x274A26}, /* East Asian ideograph */ {"\x9B", 0, 0x274A30}, /* East Asian ideograph */ {"\xA9", 0, 0x274A33}, /* East Asian ideograph */ {"\x81", 0, 0x274A36}, /* East Asian ideograph */ {"\x82", 0, 0x274A38}, /* East Asian ideograph */ {"\x83", 0, 0x285150}, /* East Asian ideograph */ {"\xA8", 0, 0x285424}, /* East Asian ideograph */ {"\xAC", 0, 0x28544F}, /* East Asian ideograph */ {"\xB1", 0, 0x2D4954}, /* East Asian ideograph */ {"\x9F", 0, 0x2D496B}, /* East Asian ideograph */ {"\x96", 0, 0x33494A}, /* East Asian ideograph */ {"\x80", 0, 0x706C43}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page146 = { marc8r_31page146_flat, 0 }; /* PAGE 145 */ struct yaz_iconv_trie_flat marc8r_31page145_flat[] = { {"\x95", 0, 0x21494B}, /* East Asian ideograph */ {"\x8E", 0, 0x21494C}, /* East Asian ideograph */ {"\x92", 0, 0x21494D}, /* East Asian ideograph */ {"\x99", 0, 0x21494E}, /* East Asian ideograph */ {"\x8A", 0, 0x21494F}, /* East Asian ideograph */ {"\xAB", 0, 0x214950}, /* East Asian ideograph */ {"\xBA", 0, 0x214951}, /* East Asian ideograph */ {"\xAC", 0, 0x214952}, /* East Asian ideograph */ {"\xB3", 0, 0x214953}, /* East Asian ideograph */ {"\xAF", 0, 0x214954}, /* East Asian ideograph */ {"\xAD", 0, 0x214955}, /* East Asian ideograph */ {"\xAE", 0, 0x214956}, /* East Asian ideograph */ {"\xB8", 0, 0x214957}, /* East Asian ideograph */ {"\x93", 0, 0x225040}, /* East Asian ideograph */ {"\x86", 0, 0x225042}, /* East Asian ideograph */ {"\x96", 0, 0x225048}, /* East Asian ideograph */ {"\x84", 0, 0x225049}, /* East Asian ideograph */ {"\x81", 0, 0x22504A}, /* East Asian ideograph */ {"\x88", 0, 0x225056}, /* East Asian ideograph */ {"\x98", 0, 0x225057}, /* East Asian ideograph */ {"\x8C", 0, 0x225059}, /* East Asian ideograph */ {"\xB7", 0, 0x22505C}, /* East Asian ideograph */ {"\xA1", 0, 0x225062}, /* East Asian ideograph */ {"\xA3", 0, 0x225063}, /* East Asian ideograph */ {"\xA7", 0, 0x22506F}, /* East Asian ideograph */ {"\xB5", 0, 0x225071}, /* East Asian ideograph */ {"\xBF", 0, 0x225072}, /* East Asian ideograph */ {"\xA9", 0, 0x225073}, /* East Asian ideograph */ {"\xBC", 0, 0x27496A}, /* East Asian ideograph */ {"\x80", 0, 0x27496F}, /* East Asian ideograph */ {"\xBD", 0, 0x274A21}, /* East Asian ideograph */ {"\x89", 0, 0x274A37}, /* East Asian ideograph */ {"\xB9", 0, 0x27626A}, /* East Asian ideograph */ {"\x9C", 0, 0x285252}, /* East Asian ideograph */ {"\x9D", 0, 0x28533C}, /* East Asian ideograph */ {"\xB0", 0, 0x2D4956}, /* East Asian ideograph */ {"\xA4", 0, 0x2D4971}, /* East Asian ideograph */ {"\x85", 0, 0x2D526B}, /* East Asian ideograph */ {"\xB1", 0, 0x2E506D}, /* East Asian ideograph */ {"\x94", 0, 0x39526B}, /* East Asian ideograph */ {"\xBB", 0, 0x706C42}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page145 = { marc8r_31page145_flat, 0 }; /* PAGE 144 */ struct yaz_iconv_trie_flat marc8r_31page144_flat[] = { {"\x8C", 0, 0x214940}, /* East Asian ideograph */ {"\x91", 0, 0x214941}, /* East Asian ideograph */ {"\x98", 0, 0x214942}, /* East Asian ideograph */ {"\xA3", 0, 0x214943}, /* East Asian ideograph */ {"\xA4", 0, 0x214944}, /* East Asian ideograph */ {"\xAB", 0, 0x214945}, /* East Asian ideograph */ {"\xB0", 0, 0x214946}, /* East Asian ideograph */ {"\xB6", 0, 0x214947}, /* East Asian ideograph */ {"\xBC", 0, 0x214948}, /* East Asian ideograph */ {"\xB8", 0, 0x214949}, /* East Asian ideograph */ {"\xBD", 0, 0x21494A}, /* East Asian ideograph */ {"\x83", 0, 0x224F5D}, /* East Asian ideograph */ {"\x84", 0, 0x224F61}, /* East Asian ideograph */ {"\x87", 0, 0x224F67}, /* East Asian ideograph */ {"\x89", 0, 0x224F69}, /* East Asian ideograph */ {"\x95", 0, 0x224F6B}, /* East Asian ideograph */ {"\x92", 0, 0x224F71}, /* East Asian ideograph */ {"\x9C", 0, 0x224F73}, /* East Asian ideograph */ {"\x99", 0, 0x224F78}, /* East Asian ideograph */ {"\x9E", 0, 0x224F7B}, /* East Asian ideograph */ {"\xA1", 0, 0x224F7C}, /* East Asian ideograph */ {"\x9D", 0, 0x224F7D}, /* East Asian ideograph */ {"\xA6", 0, 0x225025}, /* East Asian ideograph */ {"\xA5", 0, 0x225027}, /* East Asian ideograph */ {"\xA8", 0, 0x225028}, /* East Asian ideograph */ {"\x94", 0, 0x225029}, /* East Asian ideograph */ {"\xB4", 0, 0x225039}, /* East Asian ideograph */ {"\xBA", 0, 0x22503B}, /* East Asian ideograph */ {"\xAD", 0, 0x274842}, /* East Asian ideograph */ {"\xBE", 0, 0x27494A}, /* East Asian ideograph */ {"\xAF", 0, 0x274A24}, /* East Asian ideograph */ {"\xBF", 0, 0x274A31}, /* East Asian ideograph */ {"\xB5", 0, 0x275F6F}, /* East Asian ideograph */ {"\x8F", 0, 0x284F7D}, /* East Asian ideograph */ {"\xAE", 0, 0x2D3272}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page144 = { marc8r_31page144_flat, 0 }; /* PAGE 143 */ struct yaz_iconv_trie_flat marc8r_31page143_flat[] = { {"\x8B", 0, 0x214931}, /* East Asian ideograph */ {"\x89", 0, 0x214932}, /* East Asian ideograph */ {"\x86", 0, 0x214933}, /* East Asian ideograph */ {"\x91", 0, 0x214935}, /* East Asian ideograph */ {"\x8F", 0, 0x214937}, /* East Asian ideograph */ {"\x9B", 0, 0x214938}, /* East Asian ideograph */ {"\x9A", 0, 0x214939}, /* East Asian ideograph */ {"\xA8", 0, 0x21493A}, /* East Asian ideograph */ {"\x9D", 0, 0x21493B}, /* East Asian ideograph */ {"\x95", 0, 0x21493C}, /* East Asian ideograph */ {"\x9F", 0, 0x21493D}, /* East Asian ideograph */ {"\xBE", 0, 0x21493F}, /* East Asian ideograph */ {"\x85", 0, 0x224E66}, /* East Asian ideograph */ {"\x8C", 0, 0x224E67}, /* East Asian ideograph */ {"\x8D", 0, 0x224E6A}, /* East Asian ideograph */ {"\xA6", 0, 0x224E72}, /* East Asian ideograph */ {"\xA0", 0, 0x224F24}, /* East Asian ideograph */ {"\xA7", 0, 0x224F26}, /* East Asian ideograph */ {"\x9E", 0, 0x224F2B}, /* East Asian ideograph (variant of EACC 4C4F2B) */ {"\xAE", 0, 0x224F2F}, /* East Asian ideograph */ {"\xAD", 0, 0x224F31}, /* East Asian ideograph */ {"\xA1", 0, 0x224F35}, /* East Asian ideograph */ {"\x98", 0, 0x224F39}, /* East Asian ideograph */ {"\xA3", 0, 0x224F3A}, /* East Asian ideograph */ {"\xBC", 0, 0x224F41}, /* East Asian ideograph */ {"\xB5", 0, 0x224F44}, /* East Asian ideograph */ {"\xB4", 0, 0x224F51}, /* East Asian ideograph */ {"\xB9", 0, 0x224F53}, /* East Asian ideograph */ {"\xBA", 0, 0x224F54}, /* East Asian ideograph */ {"\x81", 0, 0x2D4853}, /* East Asian ideograph */ {"\xAC", 0, 0x2D493A}, /* East Asian ideograph */ {"\xB2", 0, 0x2E4E41}, /* East Asian ideograph */ {"\xB0", 0, 0x333D4C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page143 = { marc8r_31page143_flat, 0 }; /* PAGE 142 */ struct yaz_iconv_trie_dir marc8r_31page142_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {144, 0, 0}, {145, 0, 0}, {146, 0, 0}, {147, 0, 0}, {148, 0, 0}, {149, 0, 0}, {150, 0, 0}, {151, 0, 0}, {152, 0, 0}, {153, 0, 0}, {154, 0, 0}, {155, 0, 0}, {156, 0, 0}, {157, 0, 0}, {158, 0, 0}, {159, 0, 0}, {160, 0, 0}, {161, 0, 0}, {162, 0, 0}, {163, 0, 0}, {164, 0, 0}, {165, 0, 0}, {166, 0, 0}, {167, 0, 0}, {168, 0, 0}, {169, 0, 0}, {170, 0, 0}, {171, 0, 0}, {172, 0, 0}, {173, 0, 0}, {174, 0, 0}, {175, 0, 0}, {176, 0, 0}, {177, 0, 0}, {178, 0, 0}, {179, 0, 0}, {180, 0, 0}, {181, 0, 0}, {182, 0, 0}, {184, 0, 0}, {185, 0, 0}, {186, 0, 0}, {187, 0, 0}, {188, 0, 0}, {189, 0, 0}, {190, 0, 0}, {191, 0, 0}, {192, 0, 0}, {193, 0, 0}, {194, 0, 0}, {195, 0, 0}, {196, 0, 0}, {197, 0, 0}, {198, 0, 0}, {199, 0, 0}, {200, 0, 0}, {201, 0, 0}, {202, 0, 0}, {203, 0, 0}, {332, 0, 0}, {204, 0, 0}, {205, 0, 0}, {206, 0, 0}, {207, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page142 = { 0, marc8r_31page142_dir }; /* PAGE 141 */ struct yaz_iconv_trie_flat marc8r_31page141_flat[] = { {"\x82", 0, 0x21487A}, /* East Asian ideograph */ {"\x83", 0, 0x21487C}, /* East Asian ideograph */ {"\x81", 0, 0x214922}, /* East Asian ideograph */ {"\x80", 0, 0x214924}, /* East Asian ideograph */ {"\x9F", 0, 0x214926}, /* East Asian ideograph */ {"\x98", 0, 0x214927}, /* East Asian ideograph */ {"\xB1", 0, 0x214928}, /* East Asian ideograph */ {"\xA0", 0, 0x214929}, /* East Asian ideograph */ {"\xAF", 0, 0x21492A}, /* East Asian ideograph */ {"\xAB", 0, 0x21492B}, /* East Asian ideograph (variant of EACC 4B492B) */ {"\xA1", 0, 0x21492C}, /* East Asian ideograph */ {"\xA4", 0, 0x21492D}, /* East Asian ideograph */ {"\xBA", 0, 0x214934}, /* East Asian ideograph */ {"\xBE", 0, 0x214936}, /* East Asian ideograph */ {"\x86", 0, 0x224D7C}, /* East Asian ideograph */ {"\x87", 0, 0x224E26}, /* East Asian ideograph */ {"\x89", 0, 0x224E2D}, /* East Asian ideograph */ {"\x88", 0, 0x224E2F}, /* East Asian ideograph */ {"\x8A", 0, 0x224E32}, /* East Asian ideograph */ {"\x99", 0, 0x224E43}, /* East Asian ideograph */ {"\x9A", 0, 0x224E44}, /* East Asian ideograph */ {"\x94", 0, 0x224E50}, /* East Asian ideograph */ {"\xA9", 0, 0x224E56}, /* East Asian ideograph */ {"\xB8", 0, 0x224E57}, /* East Asian ideograph */ {"\x9E", 0, 0x224E5D}, /* East Asian ideograph */ {"\xAE", 0, 0x224E5E}, /* East Asian ideograph */ {"\xB0", 0, 0x224E62}, /* East Asian ideograph */ {"\x91", 0, 0x27493A}, /* East Asian ideograph */ {"\x92", 0, 0x27493C}, /* East Asian ideograph */ {"\xBC", 0, 0x2D4738}, /* East Asian ideograph */ {"\x95", 0, 0x2D4844}, /* East Asian ideograph */ {"\xB6", 0, 0x2D5E61}, /* East Asian ideograph */ {"\xAC", 0, 0x334755}, /* East Asian ideograph */ {"\x9B", 0, 0x455564}, /* East Asian ideograph (Version J extension) */ {"\xB3", 0, 0x4B4874}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page141 = { marc8r_31page141_flat, 0 }; /* PAGE 140 */ struct yaz_iconv_trie_flat marc8r_31page140_flat[] = { {"\x88", 0, 0x21486A}, /* East Asian ideograph */ {"\x84", 0, 0x21486B}, /* East Asian ideograph */ {"\x97", 0, 0x21486E}, /* East Asian ideograph */ {"\x86", 0, 0x214871}, /* East Asian ideograph */ {"\x8E", 0, 0x214872}, /* East Asian ideograph */ {"\xB1", 0, 0x21487B}, /* East Asian ideograph */ {"\xA7", 0, 0x21487D}, /* East Asian ideograph */ {"\xA1", 0, 0x21487E}, /* East Asian ideograph */ {"\xA4", 0, 0x214921}, /* East Asian ideograph */ {"\xB3", 0, 0x214925}, /* East Asian ideograph */ {"\x80", 0, 0x21492E}, /* East Asian ideograph */ {"\x95", 0, 0x224C64}, /* East Asian ideograph */ {"\x9D", 0, 0x224D24}, /* East Asian ideograph */ {"\x87", 0, 0x224D27}, /* East Asian ideograph */ {"\x90", 0, 0x224D35}, /* East Asian ideograph */ {"\x8D", 0, 0x224D37}, /* East Asian ideograph */ {"\x92", 0, 0x224D39}, /* East Asian ideograph */ {"\x89", 0, 0x224D3A}, /* East Asian ideograph */ {"\x8C", 0, 0x224D3C}, /* East Asian ideograph */ {"\x8B", 0, 0x224D4D}, /* East Asian ideograph */ {"\xB6", 0, 0x224D73}, /* East Asian ideograph */ {"\x9F", 0, 0x224D74}, /* East Asian ideograph */ {"\xA6", 0, 0x224D79}, /* East Asian ideograph */ {"\xBC", 0, 0x224D7D}, /* East Asian ideograph */ {"\xAA", 0, 0x224E21}, /* East Asian ideograph */ {"\xBF", 0, 0x224E25}, /* East Asian ideograph */ {"\xA0", 0, 0x224E30}, /* East Asian ideograph */ {"\xB4", 0, 0x224E35}, /* East Asian ideograph */ {"\xAF", 0, 0x224E37}, /* East Asian ideograph */ {"\xA8", 0, 0x224E3C}, /* East Asian ideograph */ {"\xA5", 0, 0x224E40}, /* East Asian ideograph */ {"\xB0", 0, 0x224E41}, /* East Asian ideograph */ {"\xAE", 0, 0x224E42}, /* East Asian ideograph */ {"\x9C", 0, 0x27493F}, /* East Asian ideograph */ {"\x94", 0, 0x2D4756}, /* East Asian ideograph */ {"\x82", 0, 0x2D486B}, /* East Asian ideograph */ {"\xA3", 0, 0x2E4873}, /* East Asian ideograph */ {"\xB9", 0, 0x33475E}, /* East Asian ideograph */ {"\x81", 0, 0x33492E}, /* East Asian ideograph */ {"\x91", 0, 0x4B484C}, /* East Asian ideograph */ {"\x99", 0, 0x4C4D63}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page140 = { marc8r_31page140_flat, 0 }; /* PAGE 139 */ struct yaz_iconv_trie_flat marc8r_31page139_flat[] = { {"\xBC", 0, 0x214869}, /* East Asian ideograph */ {"\x91", 0, 0x21486C}, /* East Asian ideograph */ {"\xA4", 0, 0x21486D}, /* East Asian ideograph */ {"\x94", 0, 0x21486F}, /* East Asian ideograph */ {"\xBA", 0, 0x214870}, /* East Asian ideograph */ {"\xAD", 0, 0x214873}, /* East Asian ideograph */ {"\x9B", 0, 0x214874}, /* East Asian ideograph */ {"\xAE", 0, 0x214875}, /* East Asian ideograph */ {"\xB8", 0, 0x214876}, /* East Asian ideograph */ {"\xA6", 0, 0x214877}, /* East Asian ideograph */ {"\xB0", 0, 0x214878}, /* East Asian ideograph */ {"\x98", 0, 0x214879}, /* East Asian ideograph */ {"\xA3", 0, 0x224C3D}, /* East Asian ideograph */ {"\x81", 0, 0x224C62}, /* East Asian ideograph */ {"\x89", 0, 0x224C6B}, /* East Asian ideograph */ {"\xBE", 0, 0x224D23}, /* East Asian ideograph */ {"\xAF", 0, 0x224D2B}, /* East Asian ideograph */ {"\x9A", 0, 0x224D2F}, /* East Asian ideograph */ {"\xA0", 0, 0x224D30}, /* East Asian ideograph */ {"\xA2", 0, 0x224D3D}, /* East Asian ideograph (variant of EACC 4C4D3D) */ {"\xAC", 0, 0x224D4B}, /* East Asian ideograph */ {"\x95", 0, 0x224D5A}, /* East Asian ideograph */ {"\xB2", 0, 0x224D5F}, /* East Asian ideograph */ {"\x97", 0, 0x224D62}, /* East Asian ideograph */ {"\x9F", 0, 0x224D63}, /* East Asian ideograph */ {"\x9D", 0, 0x224D68}, /* East Asian ideograph */ {"\x9E", 0, 0x224E2E}, /* East Asian ideograph */ {"\x87", 0, 0x27493D}, /* East Asian ideograph */ {"\x8B", 0, 0x284E41}, /* East Asian ideograph */ {"\x8D", 0, 0x284E62}, /* East Asian ideograph */ {"\x84", 0, 0x2D485C}, /* East Asian ideograph */ {"\x9C", 0, 0x2D4874}, /* East Asian ideograph */ {"\xB4", 0, 0x2E4E72}, /* East Asian ideograph */ {"\x85", 0, 0x4B4940}, /* East Asian ideograph */ {"\x86", 0, 0x4C4F24}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page139 = { marc8r_31page139_flat, 0 }; /* PAGE 138 */ struct yaz_iconv_trie_flat marc8r_31page138_flat[] = { {"\xB3", 0, 0x21484D}, /* East Asian ideograph */ {"\xA9", 0, 0x214851}, /* East Asian ideograph */ {"\x94", 0, 0x214852}, /* East Asian ideograph */ {"\xBE", 0, 0x214853}, /* East Asian ideograph */ {"\xAC", 0, 0x214854}, /* East Asian ideograph */ {"\xB2", 0, 0x214855}, /* East Asian ideograph */ {"\x8F", 0, 0x214856}, /* East Asian ideograph */ {"\xA2", 0, 0x214857}, /* East Asian ideograph (variant of EACC 4B4857) */ {"\xA3", 0, 0x214859}, /* East Asian ideograph */ {"\xB8", 0, 0x21485A}, /* East Asian ideograph */ {"\x95", 0, 0x21485B}, /* East Asian ideograph */ {"\xB1", 0, 0x21485C}, /* East Asian ideograph */ {"\x82", 0, 0x21485D}, /* East Asian ideograph */ {"\x86", 0, 0x21485E}, /* East Asian ideograph */ {"\xAB", 0, 0x214860}, /* East Asian ideograph */ {"\xAF", 0, 0x214861}, /* East Asian ideograph */ {"\xA0", 0, 0x214862}, /* East Asian ideograph */ {"\xBF", 0, 0x214863}, /* East Asian ideograph */ {"\x81", 0, 0x214865}, /* East Asian ideograph */ {"\x91", 0, 0x214866}, /* East Asian ideograph */ {"\xAA", 0, 0x214868}, /* East Asian ideograph */ {"\xB7", 0, 0x224C30}, /* East Asian ideograph */ {"\x89", 0, 0x224C35}, /* East Asian ideograph */ {"\xBB", 0, 0x224C3C}, /* East Asian ideograph */ {"\x92", 0, 0x224C3E}, /* East Asian ideograph */ {"\xA6", 0, 0x224C3F}, /* East Asian ideograph */ {"\x9A", 0, 0x224C41}, /* East Asian ideograph */ {"\x99", 0, 0x224C43}, /* East Asian ideograph */ {"\x80", 0, 0x224C44}, /* East Asian ideograph */ {"\xA4", 0, 0x224C4B}, /* East Asian ideograph */ {"\x98", 0, 0x224C51}, /* East Asian ideograph */ {"\x9F", 0, 0x224C57}, /* East Asian ideograph */ {"\x8A", 0, 0x224C5A}, /* East Asian ideograph */ {"\xB6", 0, 0x224C5E}, /* East Asian ideograph */ {"\xAD", 0, 0x224C65}, /* East Asian ideograph */ {"\xB4", 0, 0x224C67}, /* East Asian ideograph */ {"\xB0", 0, 0x224C6D}, /* East Asian ideograph */ {"\x88", 0, 0x224C78}, /* East Asian ideograph */ {"\x8E", 0, 0x224C79}, /* East Asian ideograph */ {"\xB5", 0, 0x224C7B}, /* East Asian ideograph */ {"\x8B", 0, 0x224D44}, /* East Asian ideograph */ {"\x93", 0, 0x284F6B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page138 = { marc8r_31page138_flat, 0 }; /* PAGE 137 */ struct yaz_iconv_trie_flat marc8r_31page137_flat[] = { {"\xB6", 0, 0x214838}, /* East Asian ideograph */ {"\xAF", 0, 0x21483B}, /* East Asian ideograph */ {"\xA2", 0, 0x21483C}, /* East Asian ideograph */ {"\x9D", 0, 0x21483D}, /* East Asian ideograph */ {"\xA5", 0, 0x21483F}, /* East Asian ideograph */ {"\x98", 0, 0x214840}, /* East Asian ideograph */ {"\x90", 0, 0x214841}, /* East Asian ideograph */ {"\xBC", 0, 0x214844}, /* East Asian ideograph */ {"\xAB", 0, 0x214845}, /* East Asian ideograph */ {"\xAA", 0, 0x21484A}, /* East Asian ideograph */ {"\x96", 0, 0x21484B}, /* East Asian ideograph */ {"\x9C", 0, 0x21484C}, /* East Asian ideograph */ {"\x8A", 0, 0x224A60}, /* East Asian ideograph */ {"\x84", 0, 0x224B2C}, /* East Asian ideograph */ {"\x8B", 0, 0x224B3B}, /* East Asian ideograph */ {"\x9B", 0, 0x224B45}, /* East Asian ideograph */ {"\x9F", 0, 0x224B46}, /* East Asian ideograph */ {"\x8F", 0, 0x224B4A}, /* East Asian ideograph */ {"\x93", 0, 0x224B4D}, /* East Asian ideograph */ {"\xA0", 0, 0x224B4F}, /* East Asian ideograph */ {"\xB1", 0, 0x224B51}, /* East Asian ideograph */ {"\xA8", 0, 0x224B57}, /* East Asian ideograph */ {"\x92", 0, 0x224B59}, /* East Asian ideograph */ {"\xA7", 0, 0x224B5A}, /* East Asian ideograph */ {"\x8E", 0, 0x224B5E}, /* East Asian ideograph */ {"\xBD", 0, 0x224B61}, /* East Asian ideograph */ {"\xBB", 0, 0x224B69}, /* East Asian ideograph */ {"\xB3", 0, 0x224B6C}, /* East Asian ideograph */ {"\xB7", 0, 0x224B6D}, /* East Asian ideograph */ {"\xA4", 0, 0x224B75}, /* East Asian ideograph */ {"\xB4", 0, 0x224C24}, /* East Asian ideograph */ {"\xB2", 0, 0x224C26}, /* East Asian ideograph */ {"\xB5", 0, 0x224C29}, /* East Asian ideograph */ {"\x88", 0, 0x224D58}, /* East Asian ideograph */ {"\x83", 0, 0x274878}, /* East Asian ideograph */ {"\x85", 0, 0x274934}, /* East Asian ideograph */ {"\xBA", 0, 0x2D3B52}, /* East Asian ideograph */ {"\xA6", 0, 0x2E4A6B}, /* East Asian ideograph */ {"\x86", 0, 0x2E4C7B}, /* East Asian ideograph */ {"\x80", 0, 0x4B4858}, /* East Asian ideograph */ {"\x89", 0, 0x4B4866}, /* East Asian ideograph */ {"\x82", 0, 0x695E63}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page137 = { marc8r_31page137_flat, 0 }; /* PAGE 136 */ struct yaz_iconv_trie_flat marc8r_31page136_flat[] = { {"\x93", 0, 0x214837}, /* East Asian ideograph */ {"\x82", 0, 0x214839}, /* East Asian ideograph */ {"\x85", 0, 0x214842}, /* East Asian ideograph */ {"\x87", 0, 0x214843}, /* East Asian ideograph */ {"\x91", 0, 0x214846}, /* East Asian ideograph */ {"\x8B", 0, 0x214847}, /* East Asian ideograph */ {"\x84", 0, 0x214848}, /* East Asian ideograph */ {"\x94", 0, 0x214849}, /* East Asian ideograph */ {"\xB4", 0, 0x21484E}, /* East Asian ideograph */ {"\xAC", 0, 0x21484F}, /* East Asian ideograph */ {"\xBE", 0, 0x214850}, /* East Asian ideograph */ {"\xBF", 0, 0x214858}, /* East Asian ideograph */ {"\xAF", 0, 0x21485F}, /* East Asian ideograph */ {"\xB2", 0, 0x214864}, /* East Asian ideograph */ {"\x8C", 0, 0x214867}, /* East Asian ideograph */ {"\x8E", 0, 0x224B43}, /* East Asian ideograph */ {"\x88", 0, 0x224B48}, /* East Asian ideograph */ {"\x98", 0, 0x224B49}, /* East Asian ideograph */ {"\x99", 0, 0x224B60}, /* East Asian ideograph */ {"\x81", 0, 0x224B63}, /* East Asian ideograph */ {"\x89", 0, 0x224B6A}, /* East Asian ideograph */ {"\x8F", 0, 0x224B79}, /* East Asian ideograph */ {"\x8A", 0, 0x224B7C}, /* East Asian ideograph */ {"\x95", 0, 0x224B7D}, /* East Asian ideograph */ {"\x83", 0, 0x224C21}, /* East Asian ideograph */ {"\xB8", 0, 0x224C2E}, /* East Asian ideograph */ {"\xBD", 0, 0x224C34}, /* East Asian ideograph */ {"\xB6", 0, 0x224C42}, /* East Asian ideograph */ {"\xB9", 0, 0x224C60}, /* East Asian ideograph */ {"\xAE", 0, 0x224C61}, /* East Asian ideograph */ {"\xBA", 0, 0x224C76}, /* East Asian ideograph */ {"\xAB", 0, 0x224C77}, /* East Asian ideograph */ {"\xA1", 0, 0x274858}, /* East Asian ideograph */ {"\x9E", 0, 0x27485F}, /* East Asian ideograph */ {"\xA8", 0, 0x274928}, /* East Asian ideograph */ {"\xA5", 0, 0x27492B}, /* East Asian ideograph */ {"\xA4", 0, 0x274936}, /* East Asian ideograph */ {"\xA9", 0, 0x274942}, /* East Asian ideograph */ {"\xA6", 0, 0x274944}, /* East Asian ideograph */ {"\x97", 0, 0x284D59}, /* East Asian ideograph */ {"\xA2", 0, 0x284E66}, /* East Asian ideograph */ {"\xA0", 0, 0x284F61}, /* East Asian ideograph */ {"\x9F", 0, 0x285029}, /* East Asian ideograph */ {"\x9A", 0, 0x2D4850}, /* East Asian ideograph */ {"\xB7", 0, 0x2F5D3C}, /* East Asian ideograph */ {"\x9D", 0, 0x4C4F26}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page136 = { marc8r_31page136_flat, 0 }; /* PAGE 135 */ struct yaz_iconv_trie_flat marc8r_31page135_flat[] = { {"\xA1", 0, 0x21477A}, /* East Asian ideograph */ {"\xB8", 0, 0x21477B}, /* East Asian ideograph */ {"\xB2", 0, 0x21477C}, /* East Asian ideograph */ {"\xA0", 0, 0x21477E}, /* East Asian ideograph */ {"\x9A", 0, 0x214822}, /* East Asian ideograph */ {"\xAF", 0, 0x214824}, /* East Asian ideograph */ {"\xA3", 0, 0x214827}, /* East Asian ideograph */ {"\xA4", 0, 0x214828}, /* East Asian ideograph */ {"\x9B", 0, 0x214829}, /* East Asian ideograph */ {"\xA5", 0, 0x21482A}, /* East Asian ideograph */ {"\xBA", 0, 0x21482C}, /* East Asian ideograph */ {"\xAD", 0, 0x21482E}, /* East Asian ideograph */ {"\xB4", 0, 0x21482F}, /* East Asian ideograph */ {"\xAC", 0, 0x214830}, /* East Asian ideograph */ {"\xA6", 0, 0x214831}, /* East Asian ideograph */ {"\xBE", 0, 0x214833}, /* East Asian ideograph */ {"\x99", 0, 0x214835}, /* East Asian ideograph */ {"\x9D", 0, 0x214836}, /* East Asian ideograph */ {"\x8F", 0, 0x224979}, /* East Asian ideograph */ {"\x92", 0, 0x224A44}, /* East Asian ideograph */ {"\x9F", 0, 0x224A4C}, /* East Asian ideograph */ {"\xA7", 0, 0x224A50}, /* East Asian ideograph */ {"\xBC", 0, 0x224A58}, /* East Asian ideograph */ {"\xA8", 0, 0x224B22}, /* East Asian ideograph */ {"\xB1", 0, 0x224B26}, /* East Asian ideograph */ {"\xAE", 0, 0x224B2E}, /* East Asian ideograph */ {"\xB6", 0, 0x224B30}, /* East Asian ideograph */ {"\xB0", 0, 0x224B33}, /* East Asian ideograph */ {"\xB9", 0, 0x224B36}, /* East Asian ideograph */ {"\xAA", 0, 0x224B40}, /* East Asian ideograph */ {"\xA2", 0, 0x224B42}, /* East Asian ideograph */ {"\x8A", 0, 0x274774}, /* East Asian ideograph */ {"\x8D", 0, 0x274854}, /* East Asian ideograph */ {"\x90", 0, 0x27485A}, /* East Asian ideograph */ {"\x97", 0, 0x274864}, /* East Asian ideograph */ {"\x94", 0, 0x274865}, /* East Asian ideograph */ {"\x8E", 0, 0x274933}, /* East Asian ideograph */ {"\x91", 0, 0x284E30}, /* East Asian ideograph */ {"\x87", 0, 0x2D482F}, /* East Asian ideograph */ {"\xA9", 0, 0x2D4845}, /* East Asian ideograph */ {"\xAB", 0, 0x334729}, /* East Asian ideograph */ {"\x88", 0, 0x3F4926}, /* East Asian ideograph */ {"\x95", 0, 0x454774}, /* East Asian ideograph */ {"\x85", 0, 0x4B4761}, /* East Asian ideograph */ {"\x93", 0, 0x4B484A}, /* East Asian ideograph */ {"\x8B", 0, 0x4B492E}, /* East Asian ideograph */ {"\x96", 0, 0x4B4931}, /* East Asian ideograph */ {"\x8C", 0, 0x4C4C35}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page135 = { marc8r_31page135_flat, 0 }; /* PAGE 134 */ struct yaz_iconv_trie_flat marc8r_31page134_flat[] = { {"\x94", 0, 0x214779}, /* East Asian ideograph */ {"\xA7", 0, 0x21477D}, /* East Asian ideograph */ {"\x9B", 0, 0x214821}, /* East Asian ideograph */ {"\x96", 0, 0x214823}, /* East Asian ideograph */ {"\xAE", 0, 0x214825}, /* East Asian ideograph */ {"\x98", 0, 0x214826}, /* East Asian ideograph */ {"\x8A", 0, 0x21482B}, /* East Asian ideograph */ {"\xAF", 0, 0x21482D}, /* East Asian ideograph */ {"\x8D", 0, 0x214832}, /* East Asian ideograph */ {"\x83", 0, 0x214834}, /* East Asian ideograph */ {"\x89", 0, 0x224A55}, /* East Asian ideograph */ {"\x8B", 0, 0x224A62}, /* East Asian ideograph */ {"\xA2", 0, 0x224A66}, /* East Asian ideograph */ {"\x91", 0, 0x224A6A}, /* East Asian ideograph */ {"\x84", 0, 0x224A6B}, /* East Asian ideograph */ {"\xA3", 0, 0x224A6D}, /* East Asian ideograph */ {"\xB3", 0, 0x224A71}, /* East Asian ideograph */ {"\x8F", 0, 0x224A74}, /* East Asian ideograph */ {"\x8E", 0, 0x224A77}, /* East Asian ideograph */ {"\x9C", 0, 0x224B24}, /* East Asian ideograph */ {"\x9E", 0, 0x224B28}, /* East Asian ideograph */ {"\x9D", 0, 0x224B31}, /* East Asian ideograph */ {"\xB2", 0, 0x224B32}, /* East Asian ideograph */ {"\x93", 0, 0x224B34}, /* East Asian ideograph */ {"\xB1", 0, 0x224B37}, /* East Asian ideograph */ {"\xA9", 0, 0x224B38}, /* East Asian ideograph */ {"\xAB", 0, 0x224B39}, /* East Asian ideograph */ {"\xB6", 0, 0x224B3E}, /* East Asian ideograph */ {"\x8C", 0, 0x224B41}, /* East Asian ideograph */ {"\xBF", 0, 0x274844}, /* East Asian ideograph */ {"\xBE", 0, 0x274943}, /* East Asian ideograph */ {"\xBC", 0, 0x2E493B}, /* East Asian ideograph */ {"\x9F", 0, 0x334730}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page134 = { marc8r_31page134_flat, 0 }; /* PAGE 133 */ struct yaz_iconv_trie_flat marc8r_31page133_flat[] = { {"\x99", 0, 0x214758}, /* East Asian ideograph */ {"\x9A", 0, 0x214759}, /* East Asian ideograph */ {"\xB3", 0, 0x21475A}, /* East Asian ideograph */ {"\xA4", 0, 0x21475C}, /* East Asian ideograph */ {"\xA1", 0, 0x21475E}, /* East Asian ideograph */ {"\x92", 0, 0x21475F}, /* East Asian ideograph */ {"\xB8", 0, 0x214761}, /* East Asian ideograph */ {"\x87", 0, 0x214762}, /* East Asian ideograph */ {"\x8B", 0, 0x214763}, /* East Asian ideograph */ {"\x85", 0, 0x214764}, /* East Asian ideograph */ {"\x9E", 0, 0x214765}, /* East Asian ideograph */ {"\xBA", 0, 0x214768}, /* East Asian ideograph */ {"\xB9", 0, 0x214769}, /* East Asian ideograph */ {"\x8C", 0, 0x21476A}, /* East Asian ideograph */ {"\xB7", 0, 0x21476B}, /* East Asian ideograph */ {"\x91", 0, 0x21476D}, /* East Asian ideograph */ {"\xB1", 0, 0x21476E}, /* East Asian ideograph */ {"\xA8", 0, 0x21476F}, /* East Asian ideograph */ {"\xAB", 0, 0x214770}, /* East Asian ideograph */ {"\x98", 0, 0x214771}, /* East Asian ideograph */ {"\xBB", 0, 0x214772}, /* East Asian ideograph */ {"\xAE", 0, 0x214773}, /* East Asian ideograph */ {"\xB5", 0, 0x214774}, /* East Asian ideograph */ {"\x86", 0, 0x214776}, /* East Asian ideograph */ {"\xAA", 0, 0x214777}, /* East Asian ideograph */ {"\x84", 0, 0x214778}, /* East Asian ideograph */ {"\xAF", 0, 0x224935}, /* East Asian ideograph */ {"\xAC", 0, 0x224960}, /* East Asian ideograph */ {"\xA2", 0, 0x22496C}, /* East Asian ideograph */ {"\x95", 0, 0x22496D}, /* East Asian ideograph */ {"\xA9", 0, 0x22496E}, /* East Asian ideograph */ {"\xB6", 0, 0x224971}, /* East Asian ideograph */ {"\x9F", 0, 0x224A2A}, /* East Asian ideograph */ {"\x93", 0, 0x224A2D}, /* East Asian ideograph */ {"\xBC", 0, 0x224A32}, /* East Asian ideograph */ {"\x9D", 0, 0x224A35}, /* East Asian ideograph */ {"\x9C", 0, 0x224A36}, /* East Asian ideograph */ {"\x9B", 0, 0x224A39}, /* East Asian ideograph */ {"\xB0", 0, 0x224A46}, /* East Asian ideograph */ {"\xA6", 0, 0x224A4A}, /* East Asian ideograph */ {"\x80", 0, 0x27487B}, /* East Asian ideograph */ {"\x96", 0, 0x2D514A}, /* East Asian ideograph */ {"\xA5", 0, 0x2E4C35}, /* East Asian ideograph */ {"\xA0", 0, 0x2E4E5D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page133 = { marc8r_31page133_flat, 0 }; /* PAGE 132 */ struct yaz_iconv_trie_flat marc8r_31page132_flat[] = { {"\x95", 0, 0x21474A}, /* East Asian ideograph */ {"\x87", 0, 0x21474E}, /* East Asian ideograph */ {"\x88", 0, 0x21474F}, /* East Asian ideograph */ {"\x93", 0, 0x214751}, /* East Asian ideograph */ {"\x89", 0, 0x214752}, /* East Asian ideograph */ {"\xBC", 0, 0x21475B}, /* East Asian ideograph */ {"\xB2", 0, 0x21475D}, /* East Asian ideograph */ {"\xAE", 0, 0x214760}, /* East Asian ideograph */ {"\xAF", 0, 0x214766}, /* East Asian ideograph */ {"\xB5", 0, 0x214767}, /* East Asian ideograph */ {"\xB8", 0, 0x21476C}, /* East Asian ideograph */ {"\x8E", 0, 0x214775}, /* East Asian ideograph */ {"\xA5", 0, 0x224877}, /* East Asian ideograph */ {"\x92", 0, 0x22487D}, /* East Asian ideograph */ {"\x91", 0, 0x224929}, /* East Asian ideograph */ {"\x81", 0, 0x22492C}, /* East Asian ideograph */ {"\x8A", 0, 0x22492E}, /* East Asian ideograph */ {"\x85", 0, 0x22493B}, /* East Asian ideograph */ {"\x94", 0, 0x224943}, /* East Asian ideograph */ {"\x98", 0, 0x224948}, /* East Asian ideograph */ {"\x96", 0, 0x22494F}, /* East Asian ideograph */ {"\xAB", 0, 0x224959}, /* East Asian ideograph */ {"\xB4", 0, 0x22495A}, /* East Asian ideograph */ {"\xAA", 0, 0x22495C}, /* East Asian ideograph */ {"\xAC", 0, 0x22496A}, /* East Asian ideograph */ {"\xB7", 0, 0x22496B}, /* East Asian ideograph */ {"\xBF", 0, 0x22497B}, /* East Asian ideograph */ {"\xA4", 0, 0x224A3D}, /* East Asian ideograph */ {"\x82", 0, 0x27384D}, /* East Asian ideograph */ {"\x8C", 0, 0x27477D}, /* East Asian ideograph */ {"\xA1", 0, 0x274831}, /* East Asian ideograph */ {"\xA8", 0, 0x274855}, /* East Asian ideograph */ {"\x9F", 0, 0x274859}, /* East Asian ideograph */ {"\xA6", 0, 0x27486D}, /* East Asian ideograph */ {"\xA7", 0, 0x27486E}, /* East Asian ideograph */ {"\x9B", 0, 0x27492D}, /* East Asian ideograph */ {"\xA9", 0, 0x27492E}, /* East Asian ideograph */ {"\x9E", 0, 0x284971}, /* East Asian ideograph */ {"\x9D", 0, 0x284D27}, /* East Asian ideograph */ {"\xA0", 0, 0x284D49}, /* East Asian ideograph */ {"\x99", 0, 0x4B4759}, /* East Asian ideograph */ {"\xA3", 0, 0x4B4835}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page132 = { marc8r_31page132_flat, 0 }; /* PAGE 131 */ struct yaz_iconv_trie_flat marc8r_31page131_flat[] = { {"\x8B", 0, 0x21473C}, /* East Asian ideograph */ {"\xB2", 0, 0x21473D}, /* East Asian ideograph */ {"\xA5", 0, 0x21473E}, /* East Asian ideograph */ {"\xB1", 0, 0x21473F}, /* East Asian ideograph */ {"\xAA", 0, 0x214740}, /* East Asian ideograph */ {"\x8C", 0, 0x214741}, /* East Asian ideograph */ {"\x9E", 0, 0x214742}, /* East Asian ideograph */ {"\x97", 0, 0x214743}, /* East Asian ideograph */ {"\xBB", 0, 0x214744}, /* East Asian ideograph */ {"\x9B", 0, 0x214745}, /* East Asian ideograph */ {"\xB6", 0, 0x214746}, /* East Asian ideograph */ {"\xBD", 0, 0x214747}, /* East Asian ideograph */ {"\xBE", 0, 0x214748}, /* East Asian ideograph */ {"\x9D", 0, 0x224837}, /* East Asian ideograph */ {"\xA8", 0, 0x22483B}, /* East Asian ideograph */ {"\xB9", 0, 0x224844}, /* East Asian ideograph */ {"\xA6", 0, 0x22484D}, /* East Asian ideograph */ {"\xA7", 0, 0x22484E}, /* East Asian ideograph */ {"\x8F", 0, 0x22484F}, /* East Asian ideograph */ {"\x8A", 0, 0x224850}, /* East Asian ideograph */ {"\xBF", 0, 0x224851}, /* East Asian ideograph */ {"\x87", 0, 0x22485A}, /* East Asian ideograph */ {"\x84", 0, 0x22485B}, /* East Asian ideograph */ {"\xAE", 0, 0x224860}, /* East Asian ideograph */ {"\xB5", 0, 0x224861}, /* East Asian ideograph */ {"\xBA", 0, 0x224862}, /* East Asian ideograph */ {"\x99", 0, 0x224864}, /* East Asian ideograph */ {"\x8E", 0, 0x224867}, /* East Asian ideograph */ {"\xAB", 0, 0x22486A}, /* East Asian ideograph */ {"\x91", 0, 0x22486B}, /* East Asian ideograph */ {"\x80", 0, 0x22486C}, /* East Asian ideograph */ {"\xA4", 0, 0x22486D}, /* East Asian ideograph */ {"\xB3", 0, 0x22486F}, /* East Asian ideograph */ {"\xB4", 0, 0x22492F}, /* East Asian ideograph (variant of EACC 34492F) */ {"\x81", 0, 0x27486F}, /* East Asian ideograph */ {"\x92", 0, 0x274941}, /* East Asian ideograph */ {"\xBC", 0, 0x274F5C}, /* East Asian ideograph */ {"\xA9", 0, 0x2D4729}, /* East Asian ideograph */ {"\xB8", 0, 0x2E4D3D}, /* East Asian ideograph */ {"\x9A", 0, 0x334740}, /* East Asian ideograph */ {"\x9F", 0, 0x33474A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page131 = { marc8r_31page131_flat, 0 }; /* PAGE 130 */ struct yaz_iconv_trie_flat marc8r_31page130_flat[] = { {"\x81", 0, 0x21473B}, /* East Asian ideograph */ {"\xAA", 0, 0x214749}, /* East Asian ideograph */ {"\xB8", 0, 0x21474B}, /* East Asian ideograph */ {"\xA6", 0, 0x21474C}, /* East Asian ideograph */ {"\x99", 0, 0x21474D}, /* East Asian ideograph */ {"\xAC", 0, 0x214750}, /* East Asian ideograph */ {"\xAE", 0, 0x214753}, /* East Asian ideograph */ {"\xB4", 0, 0x214754}, /* East Asian ideograph */ {"\x9A", 0, 0x214755}, /* East Asian ideograph */ {"\xA9", 0, 0x214756}, /* East Asian ideograph */ {"\xB7", 0, 0x214757}, /* East Asian ideograph */ {"\xA3", 0, 0x224873}, /* East Asian ideograph */ {"\xAD", 0, 0x224925}, /* East Asian ideograph */ {"\xAF", 0, 0x224926}, /* East Asian ideograph */ {"\xA1", 0, 0x224928}, /* East Asian ideograph */ {"\xB9", 0, 0x224934}, /* East Asian ideograph */ {"\xBF", 0, 0x224939}, /* East Asian ideograph */ {"\xA5", 0, 0x22493C}, /* East Asian ideograph */ {"\x9E", 0, 0x22493E}, /* East Asian ideograph */ {"\xA7", 0, 0x224940}, /* East Asian ideograph */ {"\xA0", 0, 0x224946}, /* East Asian ideograph */ {"\xBC", 0, 0x22494B}, /* East Asian ideograph */ {"\xB0", 0, 0x22494C}, /* East Asian ideograph */ {"\x85", 0, 0x274768}, /* East Asian ideograph */ {"\x8B", 0, 0x274830}, /* East Asian ideograph */ {"\x91", 0, 0x274833}, /* East Asian ideograph */ {"\x86", 0, 0x274863}, /* East Asian ideograph */ {"\x87", 0, 0x274871}, /* East Asian ideograph */ {"\x93", 0, 0x27487C}, /* East Asian ideograph */ {"\x8A", 0, 0x274922}, /* East Asian ideograph */ {"\x8E", 0, 0x274926}, /* East Asian ideograph */ {"\x8F", 0, 0x274937}, /* East Asian ideograph */ {"\x83", 0, 0x284934}, /* East Asian ideograph */ {"\x88", 0, 0x284B28}, /* East Asian ideograph */ {"\x92", 0, 0x284C2E}, /* East Asian ideograph */ {"\x94", 0, 0x284D2B}, /* East Asian ideograph */ {"\x8D", 0, 0x284E42}, /* East Asian ideograph */ {"\xA4", 0, 0x2E4747}, /* East Asian ideograph */ {"\x84", 0, 0x33476F}, /* East Asian ideograph */ {"\x9C", 0, 0x394928}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page130 = { marc8r_31page130_flat, 0 }; /* PAGE 129 */ struct yaz_iconv_trie_flat marc8r_31page129_flat[] = { {"\xB3", 0, 0x21467E}, /* East Asian ideograph */ {"\xA3", 0, 0x214721}, /* East Asian ideograph */ {"\xB0", 0, 0x214722}, /* East Asian ideograph */ {"\x93", 0, 0x214724}, /* East Asian ideograph */ {"\xA5", 0, 0x214726}, /* East Asian ideograph */ {"\x84", 0, 0x214729}, /* East Asian ideograph */ {"\x95", 0, 0x21472A}, /* East Asian ideograph */ {"\xA2", 0, 0x21472B}, /* East Asian ideograph */ {"\xB1", 0, 0x21472F}, /* East Asian ideograph */ {"\x81", 0, 0x214730}, /* East Asian ideograph */ {"\x85", 0, 0x214732}, /* East Asian ideograph */ {"\x97", 0, 0x214733}, /* East Asian ideograph */ {"\x9B", 0, 0x214735}, /* East Asian ideograph */ {"\xA1", 0, 0x214736}, /* East Asian ideograph */ {"\x8A", 0, 0x214738}, /* East Asian ideograph */ {"\x8C", 0, 0x214739}, /* East Asian ideograph */ {"\x89", 0, 0x21473A}, /* East Asian ideograph */ {"\xAB", 0, 0x224762}, /* East Asian ideograph */ {"\xAE", 0, 0x224763}, /* East Asian ideograph */ {"\x80", 0, 0x224764}, /* East Asian ideograph */ {"\xAF", 0, 0x224766}, /* East Asian ideograph */ {"\xB5", 0, 0x224772}, /* East Asian ideograph */ {"\x82", 0, 0x22477D}, /* East Asian ideograph */ {"\x98", 0, 0x224824}, /* East Asian ideograph */ {"\x86", 0, 0x224826}, /* East Asian ideograph */ {"\x8E", 0, 0x224828}, /* East Asian ideograph */ {"\xA9", 0, 0x224829}, /* East Asian ideograph */ {"\xB2", 0, 0x22482D}, /* East Asian ideograph */ {"\xA0", 0, 0x22482F}, /* East Asian ideograph */ {"\x91", 0, 0x224830}, /* East Asian ideograph */ {"\x92", 0, 0x224832}, /* East Asian ideograph */ {"\x9A", 0, 0x22485C}, /* East Asian ideograph */ {"\xBE", 0, 0x27474E}, /* East Asian ideograph */ {"\xAA", 0, 0x274759}, /* East Asian ideograph */ {"\xBC", 0, 0x27486C}, /* East Asian ideograph */ {"\xBD", 0, 0x274921}, /* East Asian ideograph */ {"\x9E", 0, 0x274927}, /* East Asian ideograph */ {"\xBB", 0, 0x274932}, /* East Asian ideograph */ {"\xA8", 0, 0x27584C}, /* East Asian ideograph */ {"\xB6", 0, 0x284E3E}, /* East Asian ideograph */ {"\xB7", 0, 0x284F26}, /* East Asian ideograph */ {"\xB8", 0, 0x284F39}, /* East Asian ideograph */ {"\x90", 0, 0x2E4670}, /* East Asian ideograph */ {"\x99", 0, 0x2E492F}, /* East Asian ideograph */ {"\x94", 0, 0x2E6F35}, /* East Asian ideograph */ {"\x9D", 0, 0x33483B}, /* East Asian ideograph */ {"\x96", 0, 0x335461}, /* East Asian ideograph */ {"\xBA", 0, 0x454738}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page129 = { marc8r_31page129_flat, 0 }; /* PAGE 128 */ struct yaz_iconv_trie_flat marc8r_31page128_flat[] = { {"\x9B", 0, 0x21466A}, /* East Asian ideograph */ {"\x81", 0, 0x21466B}, /* East Asian ideograph */ {"\x8C", 0, 0x21466F}, /* East Asian ideograph */ {"\x90", 0, 0x214670}, /* East Asian ideograph */ {"\x96", 0, 0x214674}, /* East Asian ideograph */ {"\x89", 0, 0x214676}, /* East Asian ideograph (variant of EACC 4B4676) */ {"\x99", 0, 0x214677}, /* East Asian ideograph */ {"\x92", 0, 0x21467A}, /* East Asian ideograph */ {"\x83", 0, 0x21467B}, /* East Asian ideograph */ {"\xB1", 0, 0x21467C}, /* East Asian ideograph */ {"\xB8", 0, 0x214723}, /* East Asian ideograph */ {"\xAB", 0, 0x214725}, /* East Asian ideograph */ {"\xBD", 0, 0x214727}, /* East Asian ideograph */ {"\xB3", 0, 0x214728}, /* East Asian ideograph */ {"\xBC", 0, 0x21472C}, /* East Asian ideograph */ {"\xAE", 0, 0x21472D}, /* East Asian ideograph */ {"\xB9", 0, 0x21472E}, /* East Asian ideograph */ {"\xBE", 0, 0x214731}, /* East Asian ideograph */ {"\xBB", 0, 0x214734}, /* East Asian ideograph */ {"\xBF", 0, 0x214737}, /* East Asian ideograph */ {"\x86", 0, 0x224732}, /* East Asian ideograph */ {"\x84", 0, 0x22473B}, /* East Asian ideograph */ {"\x94", 0, 0x22473E}, /* East Asian ideograph */ {"\x8F", 0, 0x224740}, /* East Asian ideograph */ {"\x9D", 0, 0x224749}, /* East Asian ideograph */ {"\x9A", 0, 0x22474B}, /* East Asian ideograph */ {"\x93", 0, 0x22474D}, /* East Asian ideograph */ {"\x87", 0, 0x224751}, /* East Asian ideograph */ {"\x95", 0, 0x224756}, /* East Asian ideograph */ {"\x82", 0, 0x22475A}, /* East Asian ideograph */ {"\xA0", 0, 0x22475C}, /* East Asian ideograph */ {"\xAC", 0, 0x224767}, /* East Asian ideograph */ {"\xAD", 0, 0x22476E}, /* East Asian ideograph (variant of EACC 4C476E) */ {"\xAF", 0, 0x224770}, /* East Asian ideograph */ {"\xBA", 0, 0x22477A}, /* East Asian ideograph */ {"\xB4", 0, 0x224833}, /* East Asian ideograph */ {"\xA6", 0, 0x274777}, /* East Asian ideograph */ {"\x9F", 0, 0x27483D}, /* East Asian ideograph */ {"\x85", 0, 0x274841}, /* East Asian ideograph */ {"\xA7", 0, 0x274848}, /* East Asian ideograph */ {"\xAA", 0, 0x27484F}, /* East Asian ideograph */ {"\x88", 0, 0x274931}, /* East Asian ideograph */ {"\xA5", 0, 0x27493B}, /* East Asian ideograph */ {"\xA4", 0, 0x284C41}, /* East Asian ideograph */ {"\xA9", 0, 0x284D58}, /* East Asian ideograph */ {"\xA3", 0, 0x284F5D}, /* East Asian ideograph */ {"\xB2", 0, 0x2D467C}, /* East Asian ideograph */ {"\xA1", 0, 0x33467A}, /* East Asian ideograph */ {"\xA2", 0, 0x4B4921}, /* East Asian ideograph */ {"\x8D", 0, 0x4B6A26}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page128 = { marc8r_31page128_flat, 0 }; /* PAGE 127 */ struct yaz_iconv_trie_flat marc8r_31page127_flat[] = { {"\x81", 0, 0x21465E}, /* East Asian ideograph */ {"\x80", 0, 0x214660}, /* East Asian ideograph */ {"\x82", 0, 0x214661}, /* East Asian ideograph */ {"\x9E", 0, 0x214662}, /* East Asian ideograph */ {"\x97", 0, 0x214663}, /* East Asian ideograph */ {"\x9F", 0, 0x214664}, /* East Asian ideograph */ {"\x99", 0, 0x214665}, /* East Asian ideograph */ {"\xA0", 0, 0x214666}, /* East Asian ideograph */ {"\x95", 0, 0x214667}, /* East Asian ideograph */ {"\x90", 0, 0x214668}, /* East Asian ideograph */ {"\x9D", 0, 0x214669}, /* East Asian ideograph */ {"\xBA", 0, 0x21466D}, /* East Asian ideograph */ {"\xAA", 0, 0x21466E}, /* East Asian ideograph */ {"\xB2", 0, 0x214671}, /* East Asian ideograph */ {"\xB0", 0, 0x214672}, /* East Asian ideograph */ {"\xA8", 0, 0x214673}, /* East Asian ideograph */ {"\xBE", 0, 0x214678}, /* East Asian ideograph */ {"\xBD", 0, 0x214679}, /* East Asian ideograph */ {"\x86", 0, 0x224678}, /* East Asian ideograph */ {"\x92", 0, 0x22467A}, /* East Asian ideograph */ {"\xA2", 0, 0x22467B}, /* East Asian ideograph */ {"\x8A", 0, 0x22467C}, /* East Asian ideograph */ {"\x9C", 0, 0x224724}, /* East Asian ideograph */ {"\x9B", 0, 0x224726}, /* East Asian ideograph */ {"\x8D", 0, 0x224727}, /* East Asian ideograph */ {"\x8B", 0, 0x22472B}, /* East Asian ideograph */ {"\x94", 0, 0x22472C}, /* East Asian ideograph */ {"\xA3", 0, 0x22472D}, /* East Asian ideograph */ {"\xB8", 0, 0x224730}, /* East Asian ideograph */ {"\xB4", 0, 0x224731}, /* East Asian ideograph */ {"\xB6", 0, 0x224733}, /* East Asian ideograph */ {"\xAC", 0, 0x224738}, /* East Asian ideograph */ {"\xA7", 0, 0x224739}, /* East Asian ideograph */ {"\xA5", 0, 0x224742}, /* East Asian ideograph */ {"\xAF", 0, 0x224747}, /* East Asian ideograph */ {"\xA9", 0, 0x22474A}, /* East Asian ideograph */ {"\xAD", 0, 0x22474C}, /* East Asian ideograph */ {"\xAE", 0, 0x224752}, /* East Asian ideograph */ {"\x87", 0, 0x273451}, /* East Asian ideograph */ {"\xA4", 0, 0x27482D}, /* East Asian ideograph */ {"\x89", 0, 0x274857}, /* East Asian ideograph */ {"\x8E", 0, 0x2D4735}, /* East Asian ideograph */ {"\xB9", 0, 0x2D4746}, /* East Asian ideograph */ {"\xB3", 0, 0x2E4731}, /* East Asian ideograph */ {"\xA1", 0, 0x334665}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page127 = { marc8r_31page127_flat, 0 }; /* PAGE 126 */ struct yaz_iconv_trie_flat marc8r_31page126_flat[] = { {"\x8F", 0, 0x21464C}, /* East Asian ideograph */ {"\x91", 0, 0x21464D}, /* East Asian ideograph */ {"\x90", 0, 0x21464E}, /* East Asian ideograph */ {"\x93", 0, 0x21464F}, /* East Asian ideograph */ {"\x96", 0, 0x214650}, /* East Asian ideograph */ {"\x9B", 0, 0x214651}, /* East Asian ideograph */ {"\x9F", 0, 0x214652}, /* East Asian ideograph */ {"\xA7", 0, 0x214653}, /* East Asian ideograph */ {"\xA6", 0, 0x214654}, /* East Asian ideograph */ {"\xA3", 0, 0x214655}, /* East Asian ideograph */ {"\xA8", 0, 0x214656}, /* East Asian ideograph */ {"\xA4", 0, 0x214657}, /* East Asian ideograph */ {"\xAB", 0, 0x214658}, /* East Asian ideograph */ {"\xAE", 0, 0x214659}, /* East Asian ideograph */ {"\xB3", 0, 0x21465A}, /* East Asian ideograph */ {"\xAF", 0, 0x21465B}, /* East Asian ideograph (variant of EACC 45465B) */ {"\xB4", 0, 0x21465C}, /* East Asian ideograph */ {"\xB8", 0, 0x21465D}, /* East Asian ideograph */ {"\xB9", 0, 0x21643F}, /* East Asian ideograph */ {"\x86", 0, 0x224644}, /* East Asian ideograph */ {"\x84", 0, 0x224648}, /* East Asian ideograph */ {"\x85", 0, 0x22464A}, /* East Asian ideograph */ {"\x88", 0, 0x22464C}, /* East Asian ideograph */ {"\x8C", 0, 0x224651}, /* East Asian ideograph */ {"\x8D", 0, 0x224652}, /* East Asian ideograph */ {"\x95", 0, 0x224659}, /* East Asian ideograph */ {"\x98", 0, 0x22465A}, /* East Asian ideograph */ {"\x99", 0, 0x22465B}, /* East Asian ideograph */ {"\x9A", 0, 0x22465C}, /* East Asian ideograph */ {"\x9D", 0, 0x22465E}, /* East Asian ideograph */ {"\xA0", 0, 0x224660}, /* East Asian ideograph */ {"\xA1", 0, 0x224662}, /* East Asian ideograph */ {"\xAA", 0, 0x224664}, /* East Asian ideograph */ {"\xAD", 0, 0x224666}, /* East Asian ideograph */ {"\xB0", 0, 0x224667}, /* East Asian ideograph */ {"\xAC", 0, 0x224668}, /* East Asian ideograph */ {"\xB1", 0, 0x224669}, /* East Asian ideograph */ {"\xBB", 0, 0x224670}, /* East Asian ideograph */ {"\xBF", 0, 0x224674}, /* East Asian ideograph */ {"\x94", 0, 0x274655}, /* East Asian ideograph */ {"\xA2", 0, 0x274658}, /* East Asian ideograph */ {"\x87", 0, 0x284651}, /* East Asian ideograph */ {"\xA9", 0, 0x284668}, /* East Asian ideograph */ {"\x82", 0, 0x2D4A60}, /* East Asian ideograph */ {"\xB7", 0, 0x33333C}, /* East Asian ideograph */ {"\xBE", 0, 0x394735}, /* East Asian ideograph */ {"\x97", 0, 0x4B4655}, /* East Asian ideograph */ {"\xB2", 0, 0x4B465A}, /* East Asian ideograph */ {"\xBD", 0, 0x513B52}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page126 = { marc8r_31page126_flat, 0 }; /* PAGE 125 */ struct yaz_iconv_trie_flat marc8r_31page125_flat[] = { {"\x80", 0, 0x21463D}, /* East Asian ideograph */ {"\x85", 0, 0x21463F}, /* East Asian ideograph */ {"\x86", 0, 0x214640}, /* East Asian ideograph */ {"\x8B", 0, 0x214641}, /* East Asian ideograph */ {"\x8D", 0, 0x214642}, /* East Asian ideograph */ {"\x8F", 0, 0x214643}, /* East Asian ideograph */ {"\x92", 0, 0x214644}, /* East Asian ideograph */ {"\x94", 0, 0x214646}, /* East Asian ideograph */ {"\x97", 0, 0x214647}, /* East Asian ideograph */ {"\x9B", 0, 0x214648}, /* East Asian ideograph */ {"\xAB", 0, 0x214649}, /* East Asian ideograph */ {"\xAF", 0, 0x21464A}, /* East Asian ideograph */ {"\xBD", 0, 0x21464B}, /* East Asian ideograph */ {"\x88", 0, 0x224554}, /* East Asian ideograph */ {"\x96", 0, 0x22455B}, /* East Asian ideograph */ {"\x9A", 0, 0x224560}, /* East Asian ideograph */ {"\x9C", 0, 0x224562}, /* East Asian ideograph */ {"\x9D", 0, 0x224563}, /* East Asian ideograph */ {"\x9F", 0, 0x224565}, /* East Asian ideograph */ {"\xA7", 0, 0x22456F}, /* East Asian ideograph */ {"\xAA", 0, 0x224570}, /* East Asian ideograph */ {"\xA8", 0, 0x224571}, /* East Asian ideograph */ {"\xB6", 0, 0x22462A}, /* East Asian ideograph */ {"\xB3", 0, 0x22462C}, /* East Asian ideograph */ {"\xB8", 0, 0x224633}, /* East Asian ideograph */ {"\xBA", 0, 0x224637}, /* East Asian ideograph */ {"\xB9", 0, 0x224638}, /* East Asian ideograph */ {"\xBF", 0, 0x224642}, /* East Asian ideograph */ {"\x99", 0, 0x274257}, /* East Asian ideograph */ {"\x95", 0, 0x274C33}, /* East Asian ideograph */ {"\x82", 0, 0x275B52}, /* East Asian ideograph */ {"\xB5", 0, 0x284642}, /* East Asian ideograph */ {"\xA1", 0, 0x28464C}, /* East Asian ideograph */ {"\x98", 0, 0x2D4647}, /* East Asian ideograph */ {"\xAC", 0, 0x2D4B45}, /* East Asian ideograph */ {"\x93", 0, 0x2D532C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page125 = { marc8r_31page125_flat, 0 }; /* PAGE 124 */ struct yaz_iconv_trie_flat marc8r_31page124_flat[] = { {"\x83", 0, 0x21462F}, /* East Asian ideograph */ {"\x86", 0, 0x214630}, /* East Asian ideograph */ {"\x8A", 0, 0x214631}, /* East Asian ideograph */ {"\x89", 0, 0x214632}, /* East Asian ideograph */ {"\x98", 0, 0x214633}, /* East Asian ideograph */ {"\x96", 0, 0x214634}, /* East Asian ideograph */ {"\xA4", 0, 0x214635}, /* East Asian ideograph */ {"\xAE", 0, 0x214636}, /* East Asian ideograph */ {"\xAF", 0, 0x214637}, /* East Asian ideograph */ {"\xB2", 0, 0x214638}, /* East Asian ideograph */ {"\xB5", 0, 0x214639}, /* East Asian ideograph */ {"\xB7", 0, 0x21463A}, /* East Asian ideograph */ {"\xBA", 0, 0x21463B}, /* East Asian ideograph */ {"\xBC", 0, 0x21463C}, /* East Asian ideograph */ {"\xBF", 0, 0x21463E}, /* East Asian ideograph */ {"\x82", 0, 0x224471}, /* East Asian ideograph */ {"\x84", 0, 0x224473}, /* East Asian ideograph */ {"\x8D", 0, 0x224479}, /* East Asian ideograph */ {"\x95", 0, 0x22447B}, /* East Asian ideograph */ {"\x99", 0, 0x224525}, /* East Asian ideograph */ {"\x9B", 0, 0x224529}, /* East Asian ideograph */ {"\xA3", 0, 0x224535}, /* East Asian ideograph */ {"\xA2", 0, 0x224536}, /* East Asian ideograph */ {"\xAA", 0, 0x224538}, /* East Asian ideograph */ {"\xAB", 0, 0x224539}, /* East Asian ideograph */ {"\xAD", 0, 0x22453B}, /* East Asian ideograph */ {"\xB0", 0, 0x22453D}, /* East Asian ideograph */ {"\xB3", 0, 0x22453F}, /* East Asian ideograph */ {"\xBD", 0, 0x224547}, /* East Asian ideograph */ {"\x8B", 0, 0x274633}, /* East Asian ideograph */ {"\x87", 0, 0x274635}, /* East Asian ideograph */ {"\x93", 0, 0x274636}, /* East Asian ideograph */ {"\xA1", 0, 0x274637}, /* East Asian ideograph */ {"\xB4", 0, 0x274640}, /* East Asian ideograph */ {"\x9A", 0, 0x284539}, /* East Asian ideograph */ {"\x80", 0, 0x2D3929}, /* East Asian ideograph */ {"\xBB", 0, 0x33463C}, /* East Asian ideograph */ {"\x9E", 0, 0x3F5F35}, /* East Asian ideograph */ {"\x81", 0, 0x4B462E}, /* East Asian ideograph */ {"\xB1", 0, 0x4B4638}, /* East Asian ideograph */ {"\x92", 0, 0x4B5F35}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page124 = { marc8r_31page124_flat, 0 }; /* PAGE 123 */ struct yaz_iconv_trie_flat marc8r_31page123_flat[] = { {"\x87", 0, 0x214579}, /* East Asian ideograph */ {"\x89", 0, 0x21457A}, /* East Asian ideograph */ {"\x8C", 0, 0x21457B}, /* East Asian ideograph */ {"\x90", 0, 0x21457C}, /* East Asian ideograph */ {"\x99", 0, 0x21457D}, /* East Asian ideograph */ {"\x9F", 0, 0x21457E}, /* East Asian ideograph */ {"\xA1", 0, 0x214621}, /* East Asian ideograph */ {"\xA3", 0, 0x214623}, /* East Asian ideograph */ {"\xA4", 0, 0x214624}, /* East Asian ideograph */ {"\xA5", 0, 0x214625}, /* East Asian ideograph */ {"\xA6", 0, 0x214627}, /* East Asian ideograph */ {"\xAA", 0, 0x214628}, /* East Asian ideograph */ {"\xB2", 0, 0x214629}, /* East Asian ideograph */ {"\xB7", 0, 0x21462A}, /* East Asian ideograph */ {"\xB8", 0, 0x21462B}, /* East Asian ideograph */ {"\xB9", 0, 0x21462C}, /* East Asian ideograph */ {"\xBB", 0, 0x21462D}, /* East Asian ideograph */ {"\xBF", 0, 0x21462E}, /* East Asian ideograph */ {"\x86", 0, 0x224437}, /* East Asian ideograph */ {"\x81", 0, 0x224438}, /* East Asian ideograph */ {"\x80", 0, 0x22443A}, /* East Asian ideograph */ {"\x82", 0, 0x22443B}, /* East Asian ideograph */ {"\x83", 0, 0x22443C}, /* East Asian ideograph */ {"\x88", 0, 0x22443E}, /* East Asian ideograph */ {"\x8A", 0, 0x22443F}, /* East Asian ideograph */ {"\x8E", 0, 0x224446}, /* East Asian ideograph (variant of EACC 4C4446) */ {"\x97", 0, 0x22444A}, /* East Asian ideograph */ {"\x94", 0, 0x22444C}, /* East Asian ideograph */ {"\x95", 0, 0x22444E}, /* East Asian ideograph */ {"\x9C", 0, 0x224451}, /* East Asian ideograph */ {"\x9E", 0, 0x224453}, /* East Asian ideograph */ {"\xA0", 0, 0x224454}, /* East Asian ideograph */ {"\xAB", 0, 0x22445B}, /* East Asian ideograph */ {"\xAC", 0, 0x22445D}, /* East Asian ideograph */ {"\xAE", 0, 0x22445F}, /* East Asian ideograph */ {"\xB1", 0, 0x224461}, /* East Asian ideograph */ {"\xBE", 0, 0x22446B}, /* East Asian ideograph */ {"\xBC", 0, 0x274638}, /* East Asian ideograph */ {"\xA2", 0, 0x2D353C}, /* East Asian ideograph */ {"\xBA", 0, 0x2D462C}, /* East Asian ideograph */ {"\x9B", 0, 0x334256}, /* East Asian ideograph */ {"\xAF", 0, 0x336321}, /* East Asian ideograph */ {"\xA7", 0, 0x4B3B67}, /* East Asian ideograph */ {"\x93", 0, 0x4B4621}, /* East Asian ideograph */ {"\xB4", 0, 0x4B462A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page123 = { marc8r_31page123_flat, 0 }; /* PAGE 122 */ struct yaz_iconv_trie_flat marc8r_31page122_flat[] = { {"\x84", 0, 0x21456E}, /* East Asian ideograph */ {"\x8A", 0, 0x214570}, /* East Asian ideograph */ {"\x96", 0, 0x214571}, /* East Asian ideograph */ {"\xA1", 0, 0x214573}, /* East Asian ideograph */ {"\xA3", 0, 0x214574}, /* East Asian ideograph */ {"\xBE", 0, 0x214576}, /* East Asian ideograph */ {"\xBA", 0, 0x214577}, /* East Asian ideograph */ {"\xBD", 0, 0x214578}, /* East Asian ideograph */ {"\x81", 0, 0x224352}, /* East Asian ideograph */ {"\x83", 0, 0x224358}, /* East Asian ideograph */ {"\x8D", 0, 0x22435F}, /* East Asian ideograph */ {"\x89", 0, 0x224360}, /* East Asian ideograph */ {"\x8E", 0, 0x224361}, /* East Asian ideograph */ {"\x91", 0, 0x224367}, /* East Asian ideograph */ {"\x99", 0, 0x22436D}, /* East Asian ideograph */ {"\x97", 0, 0x22436E}, /* East Asian ideograph */ {"\x9E", 0, 0x224372}, /* East Asian ideograph */ {"\xAC", 0, 0x22437E}, /* East Asian ideograph */ {"\xB5", 0, 0x22442A}, /* East Asian ideograph */ {"\xB7", 0, 0x22442C}, /* East Asian ideograph */ {"\xBB", 0, 0x22442D}, /* East Asian ideograph */ {"\xB9", 0, 0x224432}, /* East Asian ideograph */ {"\xBF", 0, 0x224435}, /* East Asian ideograph */ {"\xB2", 0, 0x273F3C}, /* East Asian ideograph */ {"\xA0", 0, 0x27457A}, /* East Asian ideograph (duplicate simplified) */ {"\xA7", 0, 0x27457C}, /* East Asian ideograph */ {"\xA4", 0, 0x27457E}, /* East Asian ideograph */ {"\xA2", 0, 0x274621}, /* East Asian ideograph */ {"\xB8", 0, 0x2D3642}, /* East Asian ideograph */ {"\x9D", 0, 0x2D616A}, /* East Asian ideograph */ {"\x92", 0, 0x394944}, /* East Asian ideograph */ {"\x85", 0, 0x4C4359}, /* East Asian ideograph */ {"\x9F", 0, 0x695D36}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page122 = { marc8r_31page122_flat, 0 }; /* PAGE 121 */ struct yaz_iconv_trie_flat marc8r_31page121_flat[] = { {"\x83", 0, 0x214565}, /* East Asian ideograph */ {"\xA5", 0, 0x214569}, /* East Asian ideograph */ {"\x9A", 0, 0x21456A}, /* East Asian ideograph */ {"\x9D", 0, 0x21456B}, /* East Asian ideograph */ {"\x9B", 0, 0x21456C}, /* East Asian ideograph */ {"\x93", 0, 0x21456D}, /* East Asian ideograph */ {"\xBB", 0, 0x21456F}, /* East Asian ideograph */ {"\x88", 0, 0x224255}, /* East Asian ideograph */ {"\x8A", 0, 0x224264}, /* East Asian ideograph */ {"\xA6", 0, 0x224279}, /* East Asian ideograph */ {"\xAD", 0, 0x22427E}, /* East Asian ideograph */ {"\x8C", 0, 0x224325}, /* East Asian ideograph */ {"\x91", 0, 0x224328}, /* East Asian ideograph */ {"\x9F", 0, 0x224333}, /* East Asian ideograph */ {"\x8D", 0, 0x224334}, /* East Asian ideograph */ {"\x9E", 0, 0x224335}, /* East Asian ideograph */ {"\xAC", 0, 0x224337}, /* East Asian ideograph */ {"\xB3", 0, 0x224339}, /* East Asian ideograph */ {"\xA7", 0, 0x22433A}, /* East Asian ideograph */ {"\xAB", 0, 0x22433F}, /* East Asian ideograph */ {"\xAA", 0, 0x224340}, /* East Asian ideograph */ {"\xB1", 0, 0x224344}, /* East Asian ideograph */ {"\xA8", 0, 0x224345}, /* East Asian ideograph */ {"\xB5", 0, 0x224348}, /* East Asian ideograph */ {"\xBD", 0, 0x22434E}, /* East Asian ideograph */ {"\xBA", 0, 0x224350}, /* East Asian ideograph */ {"\xB8", 0, 0x224359}, /* East Asian ideograph */ {"\x89", 0, 0x2D4569}, /* East Asian ideograph */ {"\x81", 0, 0x2E403D}, /* East Asian ideograph */ {"\x82", 0, 0x39447D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page121 = { marc8r_31page121_flat, 0 }; /* PAGE 120 */ struct yaz_iconv_trie_flat marc8r_31page120_flat[] = { {"\x80", 0, 0x21455E}, /* East Asian ideograph */ {"\x94", 0, 0x21455F}, /* East Asian ideograph */ {"\x84", 0, 0x214560}, /* East Asian ideograph */ {"\xA2", 0, 0x214561}, /* East Asian ideograph */ {"\x9C", 0, 0x214562}, /* East Asian ideograph */ {"\xB8", 0, 0x214563}, /* East Asian ideograph */ {"\xB3", 0, 0x214564}, /* East Asian ideograph */ {"\xBB", 0, 0x214566}, /* East Asian ideograph */ {"\xAC", 0, 0x214568}, /* East Asian ideograph */ {"\xAF", 0, 0x223B7D}, /* East Asian ideograph */ {"\x8D", 0, 0x224173}, /* East Asian ideograph */ {"\xA8", 0, 0x224175}, /* East Asian ideograph */ {"\xA5", 0, 0x224177}, /* East Asian ideograph */ {"\x96", 0, 0x224179}, /* East Asian ideograph */ {"\x89", 0, 0x224223}, /* East Asian ideograph */ {"\x91", 0, 0x224224}, /* East Asian ideograph */ {"\x9F", 0, 0x224226}, /* East Asian ideograph */ {"\x92", 0, 0x22422A}, /* East Asian ideograph */ {"\xA3", 0, 0x22422B}, /* East Asian ideograph */ {"\x99", 0, 0x224234}, /* East Asian ideograph */ {"\x9D", 0, 0x224235}, /* East Asian ideograph */ {"\x9B", 0, 0x224237}, /* East Asian ideograph */ {"\xA0", 0, 0x224242}, /* East Asian ideograph */ {"\x90", 0, 0x224247}, /* East Asian ideograph */ {"\x9E", 0, 0x224249}, /* East Asian ideograph */ {"\x87", 0, 0x22424A}, /* East Asian ideograph */ {"\x8E", 0, 0x22424B}, /* East Asian ideograph */ {"\xAB", 0, 0x224251}, /* East Asian ideograph */ {"\xAE", 0, 0x224257}, /* East Asian ideograph */ {"\xBF", 0, 0x22425D}, /* East Asian ideograph */ {"\xB4", 0, 0x224268}, /* East Asian ideograph */ {"\x97", 0, 0x2D563F}, /* East Asian ideograph */ {"\xA9", 0, 0x2E4174}, /* East Asian ideograph */ {"\x98", 0, 0x4B563F}, /* East Asian ideograph */ {"\xAA", 0, 0x4C4333}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page120 = { marc8r_31page120_flat, 0 }; /* PAGE 119 */ struct yaz_iconv_trie_flat marc8r_31page119_flat[] = { {"\x98", 0, 0x214551}, /* East Asian ideograph */ {"\x99", 0, 0x214552}, /* East Asian ideograph */ {"\xA2", 0, 0x214553}, /* East Asian ideograph */ {"\x84", 0, 0x214554}, /* East Asian ideograph */ {"\xAB", 0, 0x214556}, /* East Asian ideograph */ {"\x87", 0, 0x214559}, /* East Asian ideograph */ {"\xA1", 0, 0x21455A}, /* East Asian ideograph */ {"\x8B", 0, 0x21455B}, /* East Asian ideograph */ {"\x9F", 0, 0x21455D}, /* East Asian ideograph */ {"\xA3", 0, 0x224129}, /* East Asian ideograph */ {"\xA7", 0, 0x224137}, /* East Asian ideograph */ {"\x83", 0, 0x224139}, /* East Asian ideograph */ {"\x9A", 0, 0x22413C}, /* East Asian ideograph */ {"\x88", 0, 0x224140}, /* East Asian ideograph */ {"\x90", 0, 0x224141}, /* East Asian ideograph */ {"\x92", 0, 0x224142}, /* East Asian ideograph */ {"\xB2", 0, 0x224143}, /* East Asian ideograph */ {"\xB7", 0, 0x224146}, /* East Asian ideograph */ {"\x9B", 0, 0x224147}, /* East Asian ideograph */ {"\x9E", 0, 0x22414A}, /* East Asian ideograph */ {"\x9C", 0, 0x22414B}, /* East Asian ideograph */ {"\x91", 0, 0x22414F}, /* East Asian ideograph */ {"\x96", 0, 0x224151}, /* East Asian ideograph */ {"\xBA", 0, 0x224156}, /* East Asian ideograph */ {"\xA4", 0, 0x22416D}, /* East Asian ideograph */ {"\xBD", 0, 0x22417E}, /* East Asian ideograph */ {"\xBF", 0, 0x224222}, /* East Asian ideograph */ {"\xBE", 0, 0x224236}, /* East Asian ideograph */ {"\xB9", 0, 0x27456D}, /* East Asian ideograph */ {"\xBC", 0, 0x284335}, /* East Asian ideograph */ {"\xA6", 0, 0x2D3C5F}, /* East Asian ideograph */ {"\xB1", 0, 0x4B4569}, /* East Asian ideograph */ {"\xA5", 0, 0x4C433F}, /* East Asian ideograph */ {"\xB8", 0, 0x695C71}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page119 = { marc8r_31page119_flat, 0 }; /* PAGE 118 */ struct yaz_iconv_trie_flat marc8r_31page118_flat[] = { {"\x9F", 0, 0x214542}, /* East Asian ideograph */ {"\xA3", 0, 0x214544}, /* East Asian ideograph */ {"\x81", 0, 0x214546}, /* East Asian ideograph */ {"\x99", 0, 0x214547}, /* East Asian ideograph */ {"\x9E", 0, 0x214549}, /* East Asian ideograph */ {"\x93", 0, 0x21454A}, /* East Asian ideograph */ {"\xA1", 0, 0x21454B}, /* East Asian ideograph */ {"\x8A", 0, 0x21454D}, /* East Asian ideograph */ {"\x82", 0, 0x21454E}, /* East Asian ideograph */ {"\x85", 0, 0x21454F}, /* East Asian ideograph */ {"\xBD", 0, 0x214550}, /* East Asian ideograph */ {"\xB9", 0, 0x214555}, /* East Asian ideograph */ {"\xBA", 0, 0x214557}, /* East Asian ideograph */ {"\xB8", 0, 0x214558}, /* East Asian ideograph */ {"\xB5", 0, 0x21455C}, /* East Asian ideograph */ {"\x92", 0, 0x22403D}, /* East Asian ideograph */ {"\x91", 0, 0x22403E}, /* East Asian ideograph */ {"\x80", 0, 0x224041}, /* East Asian ideograph */ {"\x8B", 0, 0x22404B}, /* East Asian ideograph */ {"\x97", 0, 0x224054}, /* East Asian ideograph */ {"\xAB", 0, 0x22405E}, /* East Asian ideograph */ {"\xA0", 0, 0x224060}, /* East Asian ideograph */ {"\x9B", 0, 0x224067}, /* East Asian ideograph */ {"\xAD", 0, 0x224068}, /* East Asian ideograph */ {"\x98", 0, 0x22406E}, /* East Asian ideograph */ {"\x9D", 0, 0x224072}, /* East Asian ideograph */ {"\x8C", 0, 0x224075}, /* East Asian ideograph */ {"\x8F", 0, 0x224076}, /* East Asian ideograph */ {"\x94", 0, 0x224128}, /* East Asian ideograph */ {"\xB3", 0, 0x22413A}, /* East Asian ideograph */ {"\xB2", 0, 0x22413B}, /* East Asian ideograph */ {"\xA8", 0, 0x22413F}, /* East Asian ideograph */ {"\xBE", 0, 0x224145}, /* East Asian ideograph */ {"\xB6", 0, 0x224153}, /* East Asian ideograph */ {"\xBF", 0, 0x224158}, /* East Asian ideograph */ {"\xB1", 0, 0x27456F}, /* East Asian ideograph */ {"\xAF", 0, 0x28422B}, /* East Asian ideograph */ {"\xA2", 0, 0x2F252D}, /* East Asian ideograph */ {"\x90", 0, 0x45456D}, /* East Asian ideograph */ {"\xAA", 0, 0x4B4556}, /* East Asian ideograph */ {"\xA9", 0, 0x4B4570}, /* East Asian ideograph */ {"\xAE", 0, 0x695C53}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page118 = { marc8r_31page118_flat, 0 }; /* PAGE 117 */ struct yaz_iconv_trie_flat marc8r_31page117_flat[] = { {"\x81", 0, 0x214535}, /* East Asian ideograph */ {"\x8B", 0, 0x214539}, /* East Asian ideograph */ {"\x93", 0, 0x21453A}, /* East Asian ideograph */ {"\x8C", 0, 0x21453D}, /* East Asian ideograph */ {"\x90", 0, 0x21453F}, /* East Asian ideograph */ {"\x8D", 0, 0x214540}, /* East Asian ideograph */ {"\xA8", 0, 0x214543}, /* East Asian ideograph */ {"\xAA", 0, 0x214545}, /* East Asian ideograph */ {"\xBD", 0, 0x214548}, /* East Asian ideograph */ {"\xB3", 0, 0x21454C}, /* East Asian ideograph */ {"\x8E", 0, 0x223F50}, /* East Asian ideograph */ {"\x8A", 0, 0x223F51}, /* East Asian ideograph */ {"\x99", 0, 0x223F68}, /* East Asian ideograph */ {"\x96", 0, 0x223F6D}, /* East Asian ideograph */ {"\x91", 0, 0x223F78}, /* East Asian ideograph */ {"\xB6", 0, 0x223F7A}, /* East Asian ideograph */ {"\x95", 0, 0x223F7E}, /* East Asian ideograph */ {"\x94", 0, 0x224034}, /* East Asian ideograph */ {"\x83", 0, 0x224038}, /* East Asian ideograph */ {"\xA6", 0, 0x224046}, /* East Asian ideograph */ {"\xA5", 0, 0x22404C}, /* East Asian ideograph */ {"\xA9", 0, 0x22404D}, /* East Asian ideograph */ {"\xBC", 0, 0x224050}, /* East Asian ideograph */ {"\xA7", 0, 0x224056}, /* East Asian ideograph */ {"\xAB", 0, 0x224057}, /* East Asian ideograph */ {"\xB1", 0, 0x22405B}, /* East Asian ideograph */ {"\xBF", 0, 0x22405F}, /* East Asian ideograph */ {"\xAD", 0, 0x224064}, /* East Asian ideograph */ {"\xAE", 0, 0x22407C}, /* East Asian ideograph */ {"\xB0", 0, 0x224123}, /* East Asian ideograph */ {"\xB2", 0, 0x224124}, /* East Asian ideograph */ {"\xB9", 0, 0x22416C}, /* East Asian ideograph */ {"\x9F", 0, 0x274564}, /* East Asian ideograph */ {"\x9B", 0, 0x274566}, /* East Asian ideograph */ {"\xA0", 0, 0x28433A}, /* East Asian ideograph */ {"\x85", 0, 0x2D4444}, /* East Asian ideograph */ {"\xA3", 0, 0x2E3645}, /* East Asian ideograph */ {"\xBB", 0, 0x395829}, /* East Asian ideograph */ {"\x98", 0, 0x4B4544}, /* East Asian ideograph */ {"\x87", 0, 0x4C3F68}, /* East Asian ideograph */ {"\x9E", 0, 0x4C4339}, /* East Asian ideograph */ {"\x9D", 0, 0x695C4F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page117 = { marc8r_31page117_flat, 0 }; /* PAGE 116 */ struct yaz_iconv_trie_flat marc8r_31page116_flat[] = { {"\x86", 0, 0x214530}, /* East Asian ideograph */ {"\xA8", 0, 0x214531}, /* East Asian ideograph */ {"\x95", 0, 0x214532}, /* East Asian ideograph */ {"\x9C", 0, 0x214533}, /* East Asian ideograph */ {"\x94", 0, 0x214534}, /* East Asian ideograph */ {"\xB7", 0, 0x214536}, /* East Asian ideograph */ {"\xAE", 0, 0x214537}, /* East Asian ideograph */ {"\x9B", 0, 0x214538}, /* East Asian ideograph */ {"\xBB", 0, 0x21453B}, /* East Asian ideograph */ {"\xAB", 0, 0x21453C}, /* East Asian ideograph */ {"\xAD", 0, 0x21453E}, /* East Asian ideograph */ {"\xB4", 0, 0x214541}, /* East Asian ideograph */ {"\x80", 0, 0x223E7D}, /* East Asian ideograph */ {"\x85", 0, 0x223F2D}, /* East Asian ideograph */ {"\x8A", 0, 0x223F44}, /* East Asian ideograph */ {"\xA0", 0, 0x223F45}, /* East Asian ideograph */ {"\xB1", 0, 0x223F46}, /* East Asian ideograph */ {"\x8D", 0, 0x223F59}, /* East Asian ideograph */ {"\x91", 0, 0x223F5A}, /* East Asian ideograph */ {"\xAA", 0, 0x223F5C}, /* East Asian ideograph */ {"\xBC", 0, 0x223F60}, /* East Asian ideograph */ {"\xA7", 0, 0x223F61}, /* East Asian ideograph */ {"\x9E", 0, 0x223F65}, /* East Asian ideograph */ {"\x8E", 0, 0x223F6A}, /* East Asian ideograph */ {"\xA5", 0, 0x223F75}, /* East Asian ideograph */ {"\xBE", 0, 0x223F77}, /* East Asian ideograph */ {"\xBF", 0, 0x224027}, /* East Asian ideograph */ {"\xA3", 0, 0x22402D}, /* East Asian ideograph */ {"\xA4", 0, 0x22402E}, /* East Asian ideograph */ {"\x96", 0, 0x22454D}, /* East Asian ideograph */ {"\x88", 0, 0x27456A}, /* East Asian ideograph */ {"\x84", 0, 0x274571}, /* East Asian ideograph */ {"\x87", 0, 0x284337}, /* East Asian ideograph */ {"\x89", 0, 0x284359}, /* East Asian ideograph */ {"\x98", 0, 0x2D4E24}, /* East Asian ideograph */ {"\xB2", 0, 0x2E3F2D}, /* East Asian ideograph */ {"\xA6", 0, 0x45304C}, /* East Asian ideograph */ {"\x82", 0, 0x4B4545}, /* East Asian ideograph */ {"\x81", 0, 0x695C43}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page116 = { marc8r_31page116_flat, 0 }; /* PAGE 115 */ struct yaz_iconv_trie_flat marc8r_31page115_flat[] = { {"\x94", 0, 0x214523}, /* East Asian ideograph */ {"\xB7", 0, 0x214525}, /* East Asian ideograph */ {"\xB5", 0, 0x214526}, /* East Asian ideograph */ {"\x9A", 0, 0x214527}, /* East Asian ideograph */ {"\xA0", 0, 0x214528}, /* East Asian ideograph */ {"\xAB", 0, 0x214529}, /* East Asian ideograph */ {"\x8A", 0, 0x21452A}, /* East Asian ideograph */ {"\xA8", 0, 0x21452B}, /* East Asian ideograph */ {"\x9E", 0, 0x21452C}, /* East Asian ideograph */ {"\xAD", 0, 0x21452D}, /* East Asian ideograph */ {"\xB9", 0, 0x21452E}, /* East Asian ideograph */ {"\x93", 0, 0x21452F}, /* East Asian ideograph */ {"\xB4", 0, 0x223E53}, /* East Asian ideograph */ {"\xA2", 0, 0x223E58}, /* East Asian ideograph */ {"\x98", 0, 0x223E5D}, /* East Asian ideograph */ {"\x97", 0, 0x223E5F}, /* East Asian ideograph */ {"\xB1", 0, 0x223E61}, /* East Asian ideograph */ {"\x85", 0, 0x223E64}, /* East Asian ideograph */ {"\x9D", 0, 0x223E65}, /* East Asian ideograph */ {"\xAE", 0, 0x223E69}, /* East Asian ideograph */ {"\xA3", 0, 0x223E6A}, /* East Asian ideograph */ {"\x88", 0, 0x223E6B}, /* East Asian ideograph */ {"\xAA", 0, 0x223E70}, /* East Asian ideograph */ {"\xAC", 0, 0x223E7A}, /* East Asian ideograph */ {"\x8E", 0, 0x223E7B}, /* East Asian ideograph */ {"\x92", 0, 0x223F21}, /* East Asian ideograph */ {"\x9B", 0, 0x223F25}, /* East Asian ideograph */ {"\xB8", 0, 0x223F35}, /* East Asian ideograph */ {"\xBB", 0, 0x223F37}, /* East Asian ideograph */ {"\xA9", 0, 0x223F3B}, /* East Asian ideograph */ {"\x84", 0, 0x223F3D}, /* East Asian ideograph */ {"\xAF", 0, 0x223F3E}, /* East Asian ideograph */ {"\xBC", 0, 0x27454A}, /* East Asian ideograph */ {"\xA6", 0, 0x283F30}, /* East Asian ideograph */ {"\x82", 0, 0x2D443A}, /* East Asian ideograph */ {"\xB3", 0, 0x2D4466}, /* East Asian ideograph */ {"\xBD", 0, 0x2D454E}, /* East Asian ideograph */ {"\x99", 0, 0x2D5468}, /* East Asian ideograph */ {"\x95", 0, 0x4B4553}, /* East Asian ideograph */ {"\x9C", 0, 0x4B533B}, /* East Asian ideograph */ {"\xBE", 0, 0x695C39}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page115 = { marc8r_31page115_flat, 0 }; /* PAGE 114 */ struct yaz_iconv_trie_flat marc8r_31page114_flat[] = { {"\x8D", 0, 0x214474}, /* East Asian ideograph */ {"\x85", 0, 0x214475}, /* East Asian ideograph */ {"\x92", 0, 0x21447C}, /* East Asian ideograph */ {"\x8E", 0, 0x214521}, /* East Asian ideograph */ {"\xB0", 0, 0x214524}, /* East Asian ideograph */ {"\xAC", 0, 0x223D50}, /* East Asian ideograph */ {"\x97", 0, 0x223D51}, /* East Asian ideograph */ {"\x8C", 0, 0x223D53}, /* East Asian ideograph */ {"\x8B", 0, 0x223D56}, /* East Asian ideograph */ {"\x84", 0, 0x223D59}, /* East Asian ideograph */ {"\x8A", 0, 0x223D5B}, /* East Asian ideograph */ {"\x89", 0, 0x223D5C}, /* East Asian ideograph */ {"\xA9", 0, 0x223D5D}, /* East Asian ideograph */ {"\xAA", 0, 0x223D63}, /* East Asian ideograph */ {"\x90", 0, 0x223D6A}, /* East Asian ideograph */ {"\x93", 0, 0x223D7C}, /* East Asian ideograph */ {"\x87", 0, 0x223E21}, /* East Asian ideograph */ {"\x9A", 0, 0x223E23}, /* East Asian ideograph */ {"\x99", 0, 0x223E24}, /* East Asian ideograph */ {"\x9B", 0, 0x223E2B}, /* East Asian ideograph */ {"\x88", 0, 0x223E39}, /* East Asian ideograph */ {"\x91", 0, 0x223E44}, /* East Asian ideograph */ {"\xB8", 0, 0x223E55}, /* East Asian ideograph */ {"\xBF", 0, 0x223E60}, /* East Asian ideograph */ {"\xB2", 0, 0x223E66}, /* East Asian ideograph */ {"\xB9", 0, 0x223E6E}, /* East Asian ideograph */ {"\xB7", 0, 0x223E73}, /* East Asian ideograph */ {"\xB3", 0, 0x223E7E}, /* East Asian ideograph */ {"\xBD", 0, 0x223F32}, /* East Asian ideograph */ {"\xB4", 0, 0x223F3A}, /* East Asian ideograph */ {"\xAD", 0, 0x274553}, /* East Asian ideograph */ {"\x9F", 0, 0x27456B}, /* East Asian ideograph */ {"\xA0", 0, 0x284056}, /* East Asian ideograph */ {"\xA4", 0, 0x284366}, /* East Asian ideograph */ {"\xB6", 0, 0x2D446B}, /* East Asian ideograph */ {"\x81", 0, 0x2D4543}, /* East Asian ideograph */ {"\xBE", 0, 0x2D502B}, /* East Asian ideograph */ {"\x8F", 0, 0x2E3B22}, /* East Asian ideograph */ {"\x98", 0, 0x334527}, /* East Asian ideograph */ {"\x80", 0, 0x346126}, /* East Asian ideograph */ {"\x9C", 0, 0x4B4561}, /* East Asian ideograph */ {"\xA2", 0, 0x4C3F7A}, /* East Asian ideograph */ {"\xA6", 0, 0x695B7B}, /* East Asian ideograph */ {"\xA5", 0, 0x695C29}, /* East Asian ideograph */ {"\xA8", 0, 0x695C2D}, /* East Asian ideograph */ {"\xA3", 0, 0x695C30}, /* East Asian ideograph */ {"\xA1", 0, 0x695C31}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page114 = { marc8r_31page114_flat, 0 }; /* PAGE 113 */ struct yaz_iconv_trie_flat marc8r_31page113_flat[] = { {"\x95", 0, 0x21446B}, /* East Asian ideograph */ {"\xBA", 0, 0x21446C}, /* East Asian ideograph */ {"\x84", 0, 0x21446D}, /* East Asian ideograph */ {"\xB2", 0, 0x21446E}, /* East Asian ideograph */ {"\x92", 0, 0x21446F}, /* East Asian ideograph */ {"\xA3", 0, 0x214470}, /* East Asian ideograph */ {"\x9F", 0, 0x214471}, /* East Asian ideograph */ {"\x8B", 0, 0x214472}, /* East Asian ideograph */ {"\xAE", 0, 0x214473}, /* East Asian ideograph */ {"\xA7", 0, 0x214476}, /* East Asian ideograph */ {"\xA0", 0, 0x214477}, /* East Asian ideograph */ {"\xB5", 0, 0x214478}, /* East Asian ideograph */ {"\x8D", 0, 0x214479}, /* East Asian ideograph */ {"\x97", 0, 0x21447A}, /* East Asian ideograph */ {"\x98", 0, 0x21447B}, /* East Asian ideograph */ {"\xB9", 0, 0x21447D}, /* East Asian ideograph */ {"\x9A", 0, 0x21447E}, /* East Asian ideograph */ {"\x89", 0, 0x214522}, /* East Asian ideograph */ {"\x93", 0, 0x223D58}, /* East Asian ideograph */ {"\xAC", 0, 0x223D62}, /* East Asian ideograph */ {"\xAA", 0, 0x223D64}, /* East Asian ideograph */ {"\x96", 0, 0x223D6E}, /* East Asian ideograph */ {"\xAB", 0, 0x223D6F}, /* East Asian ideograph */ {"\xB1", 0, 0x223D73}, /* East Asian ideograph */ {"\xBD", 0, 0x223D78}, /* East Asian ideograph */ {"\xBC", 0, 0x223D79}, /* East Asian ideograph */ {"\xB3", 0, 0x223D7B}, /* East Asian ideograph */ {"\x9E", 0, 0x223E2A}, /* East Asian ideograph */ {"\xBB", 0, 0x223E2D}, /* East Asian ideograph */ {"\xA1", 0, 0x223E33}, /* East Asian ideograph */ {"\x91", 0, 0x223E37}, /* East Asian ideograph */ {"\x90", 0, 0x223E38}, /* East Asian ideograph */ {"\xA8", 0, 0x223E3E}, /* East Asian ideograph */ {"\xB0", 0, 0x223E3F}, /* East Asian ideograph */ {"\x83", 0, 0x223E40}, /* East Asian ideograph */ {"\x94", 0, 0x223E46}, /* East Asian ideograph */ {"\xAF", 0, 0x223E47}, /* East Asian ideograph */ {"\x86", 0, 0x223E49}, /* East Asian ideograph */ {"\x87", 0, 0x223E4B}, /* East Asian ideograph */ {"\x80", 0, 0x274561}, /* East Asian ideograph */ {"\x82", 0, 0x284350}, /* East Asian ideograph */ {"\x8A", 0, 0x2D4472}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page113 = { marc8r_31page113_flat, 0 }; /* PAGE 112 */ struct yaz_iconv_trie_flat marc8r_31page112_flat[] = { {"\x81", 0, 0x214457}, /* East Asian ideograph */ {"\x93", 0, 0x214458}, /* East Asian ideograph */ {"\xAF", 0, 0x214459}, /* East Asian ideograph */ {"\xB0", 0, 0x21445B}, /* East Asian ideograph */ {"\xA7", 0, 0x21445C}, /* East Asian ideograph */ {"\x97", 0, 0x21445D}, /* East Asian ideograph */ {"\xB5", 0, 0x21445E}, /* East Asian ideograph */ {"\xB3", 0, 0x21445F}, /* East Asian ideograph */ {"\xA2", 0, 0x214460}, /* East Asian ideograph */ {"\xB1", 0, 0x214462}, /* East Asian ideograph */ {"\x9D", 0, 0x214463}, /* East Asian ideograph */ {"\xAD", 0, 0x214464}, /* East Asian ideograph */ {"\x86", 0, 0x214465}, /* East Asian ideograph */ {"\x85", 0, 0x214466}, /* East Asian ideograph */ {"\xA8", 0, 0x214467}, /* East Asian ideograph */ {"\x9F", 0, 0x214468}, /* East Asian ideograph */ {"\x94", 0, 0x214469}, /* East Asian ideograph */ {"\x83", 0, 0x21446A}, /* East Asian ideograph */ {"\xB2", 0, 0x223C6E}, /* East Asian ideograph */ {"\x9B", 0, 0x223C71}, /* East Asian ideograph */ {"\xB6", 0, 0x223C74}, /* East Asian ideograph */ {"\x82", 0, 0x223C76}, /* East Asian ideograph */ {"\x90", 0, 0x223C7A}, /* East Asian ideograph */ {"\x9C", 0, 0x223D22}, /* East Asian ideograph */ {"\xA9", 0, 0x223D2E}, /* East Asian ideograph */ {"\x98", 0, 0x223D30}, /* East Asian ideograph */ {"\x8B", 0, 0x223D32}, /* East Asian ideograph */ {"\xA0", 0, 0x223D33}, /* East Asian ideograph */ {"\xA3", 0, 0x223D39}, /* East Asian ideograph */ {"\x8F", 0, 0x223D40}, /* East Asian ideograph */ {"\x8E", 0, 0x223D44}, /* East Asian ideograph */ {"\xB4", 0, 0x223D4B}, /* East Asian ideograph */ {"\xA5", 0, 0x22697E}, /* East Asian ideograph */ {"\xA6", 0, 0x273924}, /* East Asian ideograph */ {"\xBC", 0, 0x284257}, /* East Asian ideograph */ {"\xB9", 0, 0x2D4564}, /* East Asian ideograph */ {"\xBA", 0, 0x4B6258}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page112 = { marc8r_31page112_flat, 0 }; /* PAGE 111 */ struct yaz_iconv_trie_flat marc8r_31page111_flat[] = { {"\x88", 0, 0x214442}, /* East Asian ideograph */ {"\x93", 0, 0x214445}, /* East Asian ideograph */ {"\x86", 0, 0x214446}, /* East Asian ideograph */ {"\x82", 0, 0x214447}, /* East Asian ideograph */ {"\x94", 0, 0x214448}, /* East Asian ideograph */ {"\x91", 0, 0x21444B}, /* East Asian ideograph */ {"\x90", 0, 0x21444D}, /* East Asian ideograph */ {"\x83", 0, 0x214451}, /* East Asian ideograph */ {"\x80", 0, 0x214452}, /* East Asian ideograph */ {"\x85", 0, 0x214454}, /* East Asian ideograph */ {"\xB6", 0, 0x21445A}, /* East Asian ideograph */ {"\xBF", 0, 0x214461}, /* East Asian ideograph */ {"\x89", 0, 0x223C30}, /* East Asian ideograph */ {"\x8B", 0, 0x223C37}, /* East Asian ideograph */ {"\x8E", 0, 0x223C44}, /* East Asian ideograph */ {"\x8D", 0, 0x223C4A}, /* East Asian ideograph */ {"\x84", 0, 0x223C4F}, /* East Asian ideograph */ {"\x9D", 0, 0x223C55}, /* East Asian ideograph */ {"\x9E", 0, 0x223C56}, /* East Asian ideograph */ {"\x9A", 0, 0x223C65}, /* East Asian ideograph */ {"\xAB", 0, 0x223C68}, /* East Asian ideograph */ {"\xAC", 0, 0x223C69}, /* East Asian ideograph */ {"\xB9", 0, 0x223C6B}, /* East Asian ideograph */ {"\xBE", 0, 0x223C72}, /* East Asian ideograph */ {"\xB2", 0, 0x223D21}, /* East Asian ideograph */ {"\xAD", 0, 0x223D25}, /* East Asian ideograph */ {"\xAF", 0, 0x223D34}, /* East Asian ideograph */ {"\xB4", 0, 0x223D3B}, /* East Asian ideograph */ {"\xB5", 0, 0x223D3C}, /* East Asian ideograph */ {"\xB7", 0, 0x223D3F}, /* East Asian ideograph */ {"\xBB", 0, 0x223D43}, /* East Asian ideograph */ {"\xA2", 0, 0x27452B}, /* East Asian ideograph */ {"\xA9", 0, 0x274546}, /* East Asian ideograph */ {"\xA8", 0, 0x27454C}, /* East Asian ideograph */ {"\xA6", 0, 0x274557}, /* East Asian ideograph */ {"\xA5", 0, 0x27455B}, /* East Asian ideograph */ {"\xA3", 0, 0x27455F}, /* East Asian ideograph */ {"\xA7", 0, 0x274562}, /* East Asian ideograph */ {"\xA4", 0, 0x284027}, /* East Asian ideograph */ {"\xA1", 0, 0x284140}, /* East Asian ideograph */ {"\xAE", 0, 0x2D4425}, /* East Asian ideograph */ {"\x92", 0, 0x2D444B}, /* East Asian ideograph */ {"\x8C", 0, 0x2D447D}, /* East Asian ideograph */ {"\x81", 0, 0x2D5440}, /* East Asian ideograph */ {"\x8A", 0, 0x2E3D62}, /* East Asian ideograph */ {"\x95", 0, 0x3A4034}, /* East Asian ideograph */ {"\x9F", 0, 0x4B4476}, /* East Asian ideograph */ {"\x9C", 0, 0x4B456F}, /* East Asian ideograph */ {"\x99", 0, 0x4C3A5B}, /* East Asian ideograph */ {"\xA0", 0, 0x4C3B22}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page111 = { marc8r_31page111_flat, 0 }; /* PAGE 110 */ struct yaz_iconv_trie_flat marc8r_31page110_flat[] = { {"\x85", 0, 0x21443D}, /* East Asian ideograph */ {"\xA1", 0, 0x214443}, /* East Asian ideograph */ {"\xB8", 0, 0x214444}, /* East Asian ideograph */ {"\x97", 0, 0x214449}, /* East Asian ideograph */ {"\xBD", 0, 0x21444A}, /* East Asian ideograph */ {"\xA9", 0, 0x21444C}, /* East Asian ideograph */ {"\xB9", 0, 0x21444E}, /* East Asian ideograph */ {"\xAA", 0, 0x214453}, /* East Asian ideograph */ {"\xBC", 0, 0x214455}, /* East Asian ideograph */ {"\x93", 0, 0x214456}, /* East Asian ideograph (variant of EACC 4B4456) */ {"\x90", 0, 0x223B4E}, /* East Asian ideograph */ {"\x83", 0, 0x223B60}, /* East Asian ideograph */ {"\x82", 0, 0x223B6D}, /* East Asian ideograph */ {"\x86", 0, 0x223B78}, /* East Asian ideograph */ {"\xBE", 0, 0x223C31}, /* East Asian ideograph */ {"\x94", 0, 0x223C36}, /* East Asian ideograph */ {"\x9E", 0, 0x223C38}, /* East Asian ideograph */ {"\xB3", 0, 0x223C3B}, /* East Asian ideograph */ {"\xB1", 0, 0x223C40}, /* East Asian ideograph */ {"\xB2", 0, 0x223C41}, /* East Asian ideograph */ {"\xB5", 0, 0x223C42}, /* East Asian ideograph */ {"\xBB", 0, 0x223C43}, /* East Asian ideograph */ {"\xAB", 0, 0x223C47}, /* East Asian ideograph */ {"\xAD", 0, 0x223C48}, /* East Asian ideograph */ {"\xB4", 0, 0x223C58}, /* East Asian ideograph */ {"\x92", 0, 0x223C59}, /* East Asian ideograph */ {"\x9F", 0, 0x223D65}, /* East Asian ideograph */ {"\x80", 0, 0x274469}, /* East Asian ideograph */ {"\x96", 0, 0x27446E}, /* East Asian ideograph */ {"\x8B", 0, 0x274471}, /* East Asian ideograph */ {"\x88", 0, 0x274476}, /* East Asian ideograph */ {"\xB7", 0, 0x274544}, /* East Asian ideograph */ {"\x87", 0, 0x274547}, /* East Asian ideograph */ {"\x91", 0, 0x274555}, /* East Asian ideograph */ {"\x89", 0, 0x27456C}, /* East Asian ideograph */ {"\x8F", 0, 0x27456E}, /* East Asian ideograph */ {"\x8E", 0, 0x284333}, /* East Asian ideograph */ {"\x8A", 0, 0x284339}, /* East Asian ideograph */ {"\x8C", 0, 0x284345}, /* East Asian ideograph */ {"\xA2", 0, 0x2D4440}, /* East Asian ideograph */ {"\x9D", 0, 0x2D4562}, /* East Asian ideograph */ {"\x84", 0, 0x4B4537}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page110 = { marc8r_31page110_flat, 0 }; /* PAGE 109 */ struct yaz_iconv_trie_flat marc8r_31page109_flat[] = { {"\x93", 0, 0x21442E}, /* East Asian ideograph */ {"\xB1", 0, 0x21442F}, /* East Asian ideograph */ {"\xBF", 0, 0x214430}, /* East Asian ideograph */ {"\x94", 0, 0x214431}, /* East Asian ideograph */ {"\x84", 0, 0x214432}, /* East Asian ideograph */ {"\x90", 0, 0x214434}, /* East Asian ideograph */ {"\x91", 0, 0x214435}, /* East Asian ideograph */ {"\xAF", 0, 0x214436}, /* East Asian ideograph */ {"\xA9", 0, 0x214437}, /* East Asian ideograph */ {"\xAC", 0, 0x214439}, /* East Asian ideograph */ {"\xA5", 0, 0x21443A}, /* East Asian ideograph */ {"\xBA", 0, 0x21443B}, /* East Asian ideograph */ {"\x9A", 0, 0x21443C}, /* East Asian ideograph */ {"\x9E", 0, 0x21443E}, /* East Asian ideograph */ {"\x8F", 0, 0x214440}, /* East Asian ideograph */ {"\xB3", 0, 0x214441}, /* East Asian ideograph */ {"\xB4", 0, 0x214450}, /* East Asian ideograph */ {"\xB9", 0, 0x223B44}, /* East Asian ideograph */ {"\xBC", 0, 0x223B4C}, /* East Asian ideograph */ {"\x88", 0, 0x223B51}, /* East Asian ideograph */ {"\x8C", 0, 0x223B54}, /* East Asian ideograph */ {"\x85", 0, 0x223B58}, /* East Asian ideograph */ {"\xB8", 0, 0x223B61}, /* East Asian ideograph */ {"\x98", 0, 0x223B63}, /* East Asian ideograph */ {"\xA4", 0, 0x223B6F}, /* East Asian ideograph */ {"\x99", 0, 0x223B70}, /* East Asian ideograph */ {"\x9B", 0, 0x223B71}, /* East Asian ideograph */ {"\x9F", 0, 0x223B74}, /* East Asian ideograph */ {"\xB7", 0, 0x223B75}, /* East Asian ideograph */ {"\xB6", 0, 0x223B7A}, /* East Asian ideograph */ {"\xAE", 0, 0x223B7C}, /* East Asian ideograph */ {"\x82", 0, 0x223C23}, /* East Asian ideograph */ {"\xA3", 0, 0x223C24}, /* East Asian ideograph */ {"\x8A", 0, 0x223C26}, /* East Asian ideograph */ {"\x8E", 0, 0x223C28}, /* East Asian ideograph */ {"\xA2", 0, 0x223C29}, /* East Asian ideograph */ {"\xB2", 0, 0x223C2A}, /* East Asian ideograph */ {"\x83", 0, 0x223C2B}, /* East Asian ideograph */ {"\x9D", 0, 0x223C2D}, /* East Asian ideograph */ {"\xA7", 0, 0x223C2F}, /* East Asian ideograph */ {"\xA0", 0, 0x274563}, /* East Asian ideograph */ {"\x9C", 0, 0x274565}, /* East Asian ideograph */ {"\xBD", 0, 0x28405E}, /* East Asian ideograph */ {"\xB0", 0, 0x2D3931}, /* East Asian ideograph */ {"\x86", 0, 0x2D4039}, /* East Asian ideograph */ {"\xBE", 0, 0x2D4437}, /* East Asian ideograph */ {"\x92", 0, 0x33485E}, /* East Asian ideograph */ {"\x81", 0, 0x335445}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page109 = { marc8r_31page109_flat, 0 }; /* PAGE 108 */ struct yaz_iconv_trie_flat marc8r_31page108_flat[] = { {"\x8B", 0, 0x21437C}, /* East Asian ideograph */ {"\x95", 0, 0x21437D}, /* East Asian ideograph */ {"\x89", 0, 0x21437E}, /* East Asian ideograph */ {"\x87", 0, 0x214421}, /* East Asian ideograph */ {"\x9D", 0, 0x214423}, /* East Asian ideograph */ {"\x97", 0, 0x214424}, /* East Asian ideograph */ {"\x9C", 0, 0x214428}, /* East Asian ideograph */ {"\x9A", 0, 0x21442A}, /* East Asian ideograph */ {"\x90", 0, 0x21442B}, /* East Asian ideograph */ {"\xAF", 0, 0x214433}, /* East Asian ideograph */ {"\xB6", 0, 0x214438}, /* East Asian ideograph */ {"\xB8", 0, 0x21443F}, /* East Asian ideograph */ {"\x93", 0, 0x223A75}, /* East Asian ideograph */ {"\x9F", 0, 0x223A7A}, /* East Asian ideograph */ {"\x85", 0, 0x223A7C}, /* East Asian ideograph */ {"\x92", 0, 0x223B22}, /* East Asian ideograph */ {"\x91", 0, 0x223B25}, /* East Asian ideograph */ {"\x99", 0, 0x223B26}, /* East Asian ideograph */ {"\xA4", 0, 0x223B28}, /* East Asian ideograph */ {"\x8F", 0, 0x223B2E}, /* East Asian ideograph */ {"\x98", 0, 0x223B31}, /* East Asian ideograph (variant of EACC 4C3B31) */ {"\xAC", 0, 0x223B39}, /* East Asian ideograph */ {"\xA0", 0, 0x223B3B}, /* East Asian ideograph */ {"\xA1", 0, 0x223B3F}, /* East Asian ideograph */ {"\x8D", 0, 0x223B48}, /* East Asian ideograph */ {"\x8C", 0, 0x223B49}, /* East Asian ideograph */ {"\xBB", 0, 0x223B5C}, /* East Asian ideograph */ {"\xB0", 0, 0x223B5F}, /* East Asian ideograph */ {"\xB7", 0, 0x223B64}, /* East Asian ideograph */ {"\xB5", 0, 0x223B72}, /* East Asian ideograph */ {"\xB3", 0, 0x223B77}, /* East Asian ideograph */ {"\xAE", 0, 0x223B79}, /* East Asian ideograph */ {"\xB2", 0, 0x223B7E}, /* East Asian ideograph */ {"\xB9", 0, 0x223C21}, /* East Asian ideograph */ {"\xAD", 0, 0x274468}, /* East Asian ideograph */ {"\xA3", 0, 0x27447A}, /* East Asian ideograph */ {"\x81", 0, 0x274526}, /* East Asian ideograph */ {"\xAB", 0, 0x27452F}, /* East Asian ideograph */ {"\x84", 0, 0x274539}, /* East Asian ideograph */ {"\xAA", 0, 0x274540}, /* East Asian ideograph */ {"\xA2", 0, 0x274549}, /* East Asian ideograph */ {"\x9E", 0, 0x27454F}, /* East Asian ideograph */ {"\xA7", 0, 0x283D30}, /* East Asian ideograph */ {"\xA8", 0, 0x283D6E}, /* East Asian ideograph */ {"\xA5", 0, 0x284340}, /* East Asian ideograph */ {"\xB4", 0, 0x2D4049}, /* East Asian ideograph */ {"\x80", 0, 0x2D442D}, /* East Asian ideograph */ {"\xB1", 0, 0x3A3B7D}, /* East Asian ideograph */ {"\xA9", 0, 0x4B442D}, /* East Asian ideograph */ {"\xA6", 0, 0x4C4345}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page108 = { marc8r_31page108_flat, 0 }; /* PAGE 107 */ struct yaz_iconv_trie_flat marc8r_31page107_flat[] = { {"\x9E", 0, 0x214371}, /* East Asian ideograph */ {"\x91", 0, 0x214372}, /* East Asian ideograph */ {"\x8E", 0, 0x214373}, /* East Asian ideograph */ {"\x9C", 0, 0x214374}, /* East Asian ideograph */ {"\x90", 0, 0x214375}, /* East Asian ideograph */ {"\x96", 0, 0x214376}, /* East Asian ideograph */ {"\x9F", 0, 0x214377}, /* East Asian ideograph */ {"\x8F", 0, 0x214378}, /* East Asian ideograph */ {"\x89", 0, 0x214379}, /* East Asian ideograph */ {"\xAD", 0, 0x21437B}, /* East Asian ideograph */ {"\xB7", 0, 0x214422}, /* East Asian ideograph */ {"\xAF", 0, 0x214425}, /* East Asian ideograph */ {"\xB1", 0, 0x214426}, /* East Asian ideograph */ {"\xB3", 0, 0x214427}, /* East Asian ideograph */ {"\xB5", 0, 0x214429}, /* East Asian ideograph */ {"\xBE", 0, 0x21442D}, /* East Asian ideograph */ {"\x97", 0, 0x223A58}, /* East Asian ideograph */ {"\x85", 0, 0x223A5B}, /* East Asian ideograph */ {"\x87", 0, 0x223A5C}, /* East Asian ideograph */ {"\x9D", 0, 0x223A60}, /* East Asian ideograph */ {"\x95", 0, 0x223A61}, /* East Asian ideograph */ {"\x8C", 0, 0x223A66}, /* East Asian ideograph */ {"\x99", 0, 0x223A67}, /* East Asian ideograph */ {"\x88", 0, 0x223A68}, /* East Asian ideograph */ {"\xA3", 0, 0x223A6B}, /* East Asian ideograph */ {"\x93", 0, 0x223A6E}, /* East Asian ideograph */ {"\x8A", 0, 0x223A71}, /* East Asian ideograph */ {"\xBC", 0, 0x223A78}, /* East Asian ideograph */ {"\xBB", 0, 0x223B21}, /* East Asian ideograph */ {"\xB6", 0, 0x223B23}, /* East Asian ideograph */ {"\xB2", 0, 0x223B30}, /* East Asian ideograph */ {"\xAA", 0, 0x223B32}, /* East Asian ideograph */ {"\xA5", 0, 0x27314C}, /* East Asian ideograph */ {"\xB0", 0, 0x273241}, /* East Asian ideograph */ {"\xA1", 0, 0x274463}, /* East Asian ideograph */ {"\xA8", 0, 0x27452A}, /* East Asian ideograph */ {"\x83", 0, 0x274570}, /* East Asian ideograph */ {"\x80", 0, 0x27463B}, /* East Asian ideograph */ {"\xBF", 0, 0x275E65}, /* East Asian ideograph */ {"\x82", 0, 0x275F4B}, /* East Asian ideograph */ {"\xA9", 0, 0x283F5C}, /* East Asian ideograph */ {"\x86", 0, 0x2D4461}, /* East Asian ideograph */ {"\xA0", 0, 0x2D453A}, /* East Asian ideograph */ {"\x81", 0, 0x4C3A55}, /* East Asian ideograph */ {"\xA4", 0, 0x4C3B60}, /* East Asian ideograph */ {"\xA2", 0, 0x694C5D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page107 = { marc8r_31page107_flat, 0 }; /* PAGE 106 */ struct yaz_iconv_trie_flat marc8r_31page106_flat[] = { {"\x91", 0, 0x21433A}, /* East Asian ideograph */ {"\x97", 0, 0x21433E}, /* East Asian ideograph */ {"\x87", 0, 0x21433F}, /* East Asian ideograph */ {"\x89", 0, 0x214340}, /* East Asian ideograph */ {"\x88", 0, 0x214341}, /* East Asian ideograph */ {"\x96", 0, 0x214342}, /* East Asian ideograph */ {"\xA2", 0, 0x214343}, /* East Asian ideograph */ {"\xAB", 0, 0x214344}, /* East Asian ideograph */ {"\xB4", 0, 0x214345}, /* East Asian ideograph */ {"\xAE", 0, 0x214346}, /* East Asian ideograph */ {"\xB9", 0, 0x21434A}, /* East Asian ideograph */ {"\x84", 0, 0x223870}, /* East Asian ideograph */ {"\x8C", 0, 0x223871}, /* East Asian ideograph */ {"\x93", 0, 0x223872}, /* East Asian ideograph */ {"\x8B", 0, 0x223875}, /* East Asian ideograph */ {"\x90", 0, 0x223876}, /* East Asian ideograph */ {"\x94", 0, 0x223879}, /* East Asian ideograph */ {"\x8A", 0, 0x22387A}, /* East Asian ideograph */ {"\x98", 0, 0x22387C}, /* East Asian ideograph */ {"\x8D", 0, 0x22387D}, /* East Asian ideograph */ {"\xA0", 0, 0x22392A}, /* East Asian ideograph */ {"\x9D", 0, 0x223932}, /* East Asian ideograph */ {"\xB2", 0, 0x22393A}, /* East Asian ideograph */ {"\xB5", 0, 0x223940}, /* East Asian ideograph */ {"\xAA", 0, 0x223941}, /* East Asian ideograph */ {"\xAC", 0, 0x223943}, /* East Asian ideograph */ {"\xB1", 0, 0x223947}, /* East Asian ideograph */ {"\xBE", 0, 0x22394F}, /* East Asian ideograph */ {"\xBB", 0, 0x22395A}, /* East Asian ideograph */ {"\x82", 0, 0x274344}, /* East Asian ideograph */ {"\xA7", 0, 0x27434B}, /* East Asian ideograph */ {"\x8E", 0, 0x2D4329}, /* East Asian ideograph */ {"\x81", 0, 0x2D4348}, /* East Asian ideograph */ {"\xA6", 0, 0x2D4349}, /* East Asian ideograph */ {"\xA8", 0, 0x4B4347}, /* East Asian ideograph */ {"\xB8", 0, 0x4B4D73}, /* East Asian ideograph */ {"\x83", 0, 0x695A73}, /* East Asian ideograph */ {"\xBC", 0, 0x695A7E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page106 = { marc8r_31page106_flat, 0 }; /* PAGE 105 */ struct yaz_iconv_trie_flat marc8r_31page105_flat[] = { {"\x8F", 0, 0x21432C}, /* East Asian ideograph */ {"\x82", 0, 0x21432D}, /* East Asian ideograph */ {"\x92", 0, 0x21432E}, /* East Asian ideograph */ {"\x89", 0, 0x21432F}, /* East Asian ideograph */ {"\x83", 0, 0x214330}, /* East Asian ideograph */ {"\x8C", 0, 0x214331}, /* East Asian ideograph */ {"\x9D", 0, 0x214332}, /* East Asian ideograph */ {"\xA4", 0, 0x214333}, /* East Asian ideograph */ {"\xA8", 0, 0x214334}, /* East Asian ideograph */ {"\xA6", 0, 0x214335}, /* East Asian ideograph */ {"\x9A", 0, 0x214336}, /* East Asian ideograph */ {"\xAF", 0, 0x214337}, /* East Asian ideograph */ {"\xAE", 0, 0x214338}, /* East Asian ideograph */ {"\xB4", 0, 0x214339}, /* East Asian ideograph (variant of EACC 4B4339) */ {"\xB0", 0, 0x21433B}, /* East Asian ideograph */ {"\xB6", 0, 0x21433C}, /* East Asian ideograph */ {"\xBA", 0, 0x21433D}, /* East Asian ideograph */ {"\x85", 0, 0x223831}, /* East Asian ideograph */ {"\x9F", 0, 0x223832}, /* East Asian ideograph */ {"\xA5", 0, 0x22383D}, /* East Asian ideograph */ {"\x9C", 0, 0x22383E}, /* East Asian ideograph */ {"\xA1", 0, 0x22383F}, /* East Asian ideograph */ {"\x9B", 0, 0x223848}, /* East Asian ideograph */ {"\x99", 0, 0x223849}, /* East Asian ideograph */ {"\xA7", 0, 0x22384A}, /* East Asian ideograph */ {"\x9E", 0, 0x22384C}, /* East Asian ideograph */ {"\x97", 0, 0x22384D}, /* East Asian ideograph */ {"\xBE", 0, 0x223850}, /* East Asian ideograph */ {"\xAC", 0, 0x223851}, /* East Asian ideograph */ {"\xB8", 0, 0x22385A}, /* East Asian ideograph */ {"\xB3", 0, 0x223860}, /* East Asian ideograph */ {"\xAD", 0, 0x223866}, /* East Asian ideograph */ {"\xB7", 0, 0x223868}, /* East Asian ideograph */ {"\x96", 0, 0x274340}, /* East Asian ideograph */ {"\x95", 0, 0x274341}, /* East Asian ideograph */ {"\x93", 0, 0x274348}, /* East Asian ideograph */ {"\x94", 0, 0x28395C}, /* East Asian ideograph */ {"\xA2", 0, 0x2D433B}, /* East Asian ideograph */ {"\xBB", 0, 0x2D433E}, /* East Asian ideograph */ {"\x81", 0, 0x2F5E7D}, /* East Asian ideograph */ {"\x8B", 0, 0x33432F}, /* East Asian ideograph */ {"\x84", 0, 0x394330}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page105 = { marc8r_31page105_flat, 0 }; /* PAGE 104 */ struct yaz_iconv_trie_flat marc8r_31page104_flat[] = { {"\x86", 0, 0x21427B}, /* East Asian ideograph */ {"\x94", 0, 0x21427C}, /* East Asian ideograph */ {"\x8C", 0, 0x21427D}, /* East Asian ideograph */ {"\x80", 0, 0x21427E}, /* East Asian ideograph */ {"\x8E", 0, 0x214321}, /* East Asian ideograph */ {"\x93", 0, 0x214322}, /* East Asian ideograph */ {"\x82", 0, 0x214323}, /* East Asian ideograph */ {"\x8F", 0, 0x214324}, /* East Asian ideograph */ {"\xA5", 0, 0x214325}, /* East Asian ideograph */ {"\xA7", 0, 0x214326}, /* East Asian ideograph */ {"\xAF", 0, 0x214327}, /* East Asian ideograph */ {"\xAD", 0, 0x214328}, /* East Asian ideograph */ {"\xA0", 0, 0x214329}, /* East Asian ideograph */ {"\x9F", 0, 0x21432A}, /* East Asian ideograph */ {"\xA8", 0, 0x21432B}, /* East Asian ideograph */ {"\x89", 0, 0x22375A}, /* East Asian ideograph */ {"\x8A", 0, 0x22375E}, /* East Asian ideograph */ {"\x83", 0, 0x223764}, /* East Asian ideograph */ {"\x91", 0, 0x22376A}, /* East Asian ideograph */ {"\x95", 0, 0x22376B}, /* East Asian ideograph */ {"\x84", 0, 0x22376D}, /* East Asian ideograph */ {"\xB1", 0, 0x22376E}, /* East Asian ideograph */ {"\xA1", 0, 0x223772}, /* East Asian ideograph */ {"\xAC", 0, 0x223775}, /* East Asian ideograph */ {"\xB5", 0, 0x223777}, /* East Asian ideograph */ {"\x9E", 0, 0x22377C}, /* East Asian ideograph */ {"\xBA", 0, 0x22377D}, /* East Asian ideograph */ {"\xB3", 0, 0x223827}, /* East Asian ideograph */ {"\xAB", 0, 0x223828}, /* East Asian ideograph */ {"\xB4", 0, 0x22382B}, /* East Asian ideograph */ {"\xA4", 0, 0x22382C}, /* East Asian ideograph */ {"\xBC", 0, 0x274332}, /* East Asian ideograph */ {"\xBE", 0, 0x276058}, /* East Asian ideograph */ {"\x99", 0, 0x283955}, /* East Asian ideograph */ {"\x87", 0, 0x2D345B}, /* East Asian ideograph */ {"\x9A", 0, 0x2D3F24}, /* East Asian ideograph */ {"\xB0", 0, 0x2D4327}, /* East Asian ideograph */ {"\xB6", 0, 0x2D4343}, /* East Asian ideograph */ {"\x9C", 0, 0x2D5F2E}, /* East Asian ideograph */ {"\x9D", 0, 0x2E3A26}, /* East Asian ideograph */ {"\xBF", 0, 0x4B434D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page104 = { marc8r_31page104_flat, 0 }; /* PAGE 103 */ struct yaz_iconv_trie_flat marc8r_31page103_flat[] = { {"\x81", 0, 0x21426A}, /* East Asian ideograph */ {"\x85", 0, 0x21426B}, /* East Asian ideograph */ {"\x8E", 0, 0x21426C}, /* East Asian ideograph */ {"\x8B", 0, 0x21426D}, /* East Asian ideograph */ {"\x8C", 0, 0x21426E}, /* East Asian ideograph */ {"\x8F", 0, 0x21426F}, /* East Asian ideograph */ {"\x97", 0, 0x214270}, /* East Asian ideograph */ {"\x96", 0, 0x214271}, /* East Asian ideograph */ {"\xA2", 0, 0x214272}, /* East Asian ideograph */ {"\xA5", 0, 0x214273}, /* East Asian ideograph */ {"\xA9", 0, 0x214275}, /* East Asian ideograph */ {"\xAC", 0, 0x214276}, /* East Asian ideograph */ {"\xAD", 0, 0x214277}, /* East Asian ideograph */ {"\xA8", 0, 0x214278}, /* East Asian ideograph */ {"\xB1", 0, 0x214279}, /* East Asian ideograph */ {"\xBA", 0, 0x21427A}, /* East Asian ideograph */ {"\x86", 0, 0x223731}, /* East Asian ideograph */ {"\x83", 0, 0x223732}, /* East Asian ideograph */ {"\x84", 0, 0x223733}, /* East Asian ideograph */ {"\x82", 0, 0x223734}, /* East Asian ideograph */ {"\x90", 0, 0x22373B}, /* East Asian ideograph */ {"\x92", 0, 0x22373C}, /* East Asian ideograph */ {"\x9B", 0, 0x223744}, /* East Asian ideograph */ {"\x9C", 0, 0x223745}, /* East Asian ideograph */ {"\x9D", 0, 0x223747}, /* East Asian ideograph */ {"\x9F", 0, 0x223748}, /* East Asian ideograph */ {"\xA1", 0, 0x22374A}, /* East Asian ideograph */ {"\xA4", 0, 0x22374E}, /* East Asian ideograph */ {"\xB4", 0, 0x223754}, /* East Asian ideograph */ {"\xB0", 0, 0x223755}, /* East Asian ideograph */ {"\xBB", 0, 0x22375B}, /* East Asian ideograph */ {"\xBC", 0, 0x22375C}, /* East Asian ideograph */ {"\xB6", 0, 0x27432D}, /* East Asian ideograph */ {"\xB7", 0, 0x27434D}, /* East Asian ideograph */ {"\xA0", 0, 0x274966}, /* East Asian ideograph */ {"\xA7", 0, 0x275435}, /* East Asian ideograph */ {"\xA6", 0, 0x27565A}, /* East Asian ideograph */ {"\xA3", 0, 0x2D4272}, /* East Asian ideograph */ {"\xAE", 0, 0x2D4277}, /* East Asian ideograph */ {"\xAF", 0, 0x334277}, /* East Asian ideograph */ {"\x99", 0, 0x4C3744}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page103 = { marc8r_31page103_flat, 0 }; /* PAGE 102 */ struct yaz_iconv_trie_flat marc8r_31page102_flat[] = { {"\x82", 0, 0x214256}, /* East Asian ideograph */ {"\x83", 0, 0x214257}, /* East Asian ideograph */ {"\x87", 0, 0x214258}, /* East Asian ideograph */ {"\x91", 0, 0x214259}, /* East Asian ideograph */ {"\x90", 0, 0x21425A}, /* East Asian ideograph */ {"\x99", 0, 0x21425C}, /* East Asian ideograph */ {"\x9C", 0, 0x21425D}, /* East Asian ideograph */ {"\x9F", 0, 0x21425E}, /* East Asian ideograph */ {"\xA1", 0, 0x21425F}, /* East Asian ideograph */ {"\xA4", 0, 0x214260}, /* East Asian ideograph */ {"\xA5", 0, 0x214261}, /* East Asian ideograph */ {"\xA7", 0, 0x214262}, /* East Asian ideograph */ {"\xAC", 0, 0x214263}, /* East Asian ideograph */ {"\xAF", 0, 0x214264}, /* East Asian ideograph */ {"\xB0", 0, 0x214265}, /* East Asian ideograph */ {"\xB7", 0, 0x214266}, /* East Asian ideograph */ {"\xB9", 0, 0x214267}, /* East Asian ideograph */ {"\xBD", 0, 0x214269}, /* East Asian ideograph */ {"\xAB", 0, 0x214E2D}, /* East Asian ideograph */ {"\x85", 0, 0x223664}, /* East Asian ideograph */ {"\x8C", 0, 0x22366E}, /* East Asian ideograph */ {"\x92", 0, 0x223670}, /* East Asian ideograph */ {"\x95", 0, 0x223671}, /* East Asian ideograph */ {"\x9B", 0, 0x223675}, /* East Asian ideograph */ {"\x9D", 0, 0x223677}, /* East Asian ideograph */ {"\xA0", 0, 0x22367A}, /* East Asian ideograph */ {"\xA8", 0, 0x223722}, /* East Asian ideograph */ {"\xA6", 0, 0x223723}, /* East Asian ideograph */ {"\xAE", 0, 0x223727}, /* East Asian ideograph */ {"\xB6", 0, 0x22372A}, /* East Asian ideograph */ {"\xB8", 0, 0x22372C}, /* East Asian ideograph */ {"\xBF", 0, 0x22372F}, /* East Asian ideograph */ {"\xA9", 0, 0x274263}, /* East Asian ideograph */ {"\xAD", 0, 0x274266}, /* East Asian ideograph */ {"\x97", 0, 0x276167}, /* East Asian ideograph */ {"\x8E", 0, 0x27627E}, /* East Asian ideograph */ {"\x93", 0, 0x283671}, /* East Asian ideograph */ {"\x88", 0, 0x2D3A60}, /* East Asian ideograph */ {"\x8B", 0, 0x2D627E}, /* East Asian ideograph */ {"\xB5", 0, 0x2E3729}, /* East Asian ideograph */ {"\x8D", 0, 0x335830}, /* East Asian ideograph */ {"\x89", 0, 0x33627D}, /* East Asian ideograph */ {"\xBC", 0, 0x393052}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page102 = { marc8r_31page102_flat, 0 }; /* PAGE 101 */ struct yaz_iconv_trie_flat marc8r_31page101_flat[] = { {"\x85", 0, 0x214242}, /* East Asian ideograph */ {"\x88", 0, 0x214243}, /* East Asian ideograph */ {"\x8E", 0, 0x214244}, /* East Asian ideograph */ {"\x96", 0, 0x214245}, /* East Asian ideograph */ {"\x91", 0, 0x214246}, /* East Asian ideograph */ {"\x97", 0, 0x214247}, /* East Asian ideograph */ {"\x9D", 0, 0x214248}, /* East Asian ideograph */ {"\x98", 0, 0x214249}, /* East Asian ideograph */ {"\x8F", 0, 0x21424A}, /* East Asian ideograph */ {"\xA6", 0, 0x21424B}, /* East Asian ideograph */ {"\xA2", 0, 0x21424C}, /* East Asian ideograph */ {"\xA3", 0, 0x21424D}, /* East Asian ideograph */ {"\x9E", 0, 0x21424E}, /* East Asian ideograph */ {"\xAC", 0, 0x214250}, /* East Asian ideograph */ {"\xB2", 0, 0x214251}, /* East Asian ideograph */ {"\xB5", 0, 0x214252}, /* East Asian ideograph */ {"\xB7", 0, 0x214253}, /* East Asian ideograph */ {"\xB8", 0, 0x214254}, /* East Asian ideograph */ {"\xB4", 0, 0x214255}, /* East Asian ideograph */ {"\x81", 0, 0x22357C}, /* East Asian ideograph */ {"\x82", 0, 0x223634}, /* East Asian ideograph */ {"\x89", 0, 0x223636}, /* East Asian ideograph */ {"\x94", 0, 0x22363E}, /* East Asian ideograph */ {"\x95", 0, 0x22363F}, /* East Asian ideograph */ {"\xA7", 0, 0x223645}, /* East Asian ideograph */ {"\xA1", 0, 0x223647}, /* East Asian ideograph */ {"\xAD", 0, 0x22364F}, /* East Asian ideograph */ {"\xBA", 0, 0x223654}, /* East Asian ideograph */ {"\xAB", 0, 0x226055}, /* East Asian ideograph */ {"\x8C", 0, 0x274252}, /* East Asian ideograph */ {"\xB0", 0, 0x274254}, /* East Asian ideograph */ {"\x9B", 0, 0x274256}, /* East Asian ideograph */ {"\xBF", 0, 0x2E3654}, /* East Asian ideograph */ {"\x99", 0, 0x334244}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page101 = { marc8r_31page101_flat, 0 }; /* PAGE 100 */ struct yaz_iconv_trie_flat marc8r_31page100_flat[] = { {"\x86", 0, 0x21422C}, /* East Asian ideograph */ {"\x80", 0, 0x21422D}, /* East Asian ideograph */ {"\x8F", 0, 0x214231}, /* East Asian ideograph */ {"\x98", 0, 0x214232}, /* East Asian ideograph */ {"\x94", 0, 0x214233}, /* East Asian ideograph */ {"\x99", 0, 0x214234}, /* East Asian ideograph */ {"\x9D", 0, 0x214235}, /* East Asian ideograph */ {"\x9C", 0, 0x214236}, /* East Asian ideograph */ {"\xA3", 0, 0x214237}, /* East Asian ideograph */ {"\xA4", 0, 0x214238}, /* East Asian ideograph */ {"\xAB", 0, 0x214239}, /* East Asian ideograph */ {"\xAA", 0, 0x21423A}, /* East Asian ideograph */ {"\xAC", 0, 0x21423B}, /* East Asian ideograph */ {"\xAF", 0, 0x21423C}, /* East Asian ideograph */ {"\xB6", 0, 0x21423D}, /* East Asian ideograph */ {"\xB9", 0, 0x21423E}, /* East Asian ideograph */ {"\xBB", 0, 0x21423F}, /* East Asian ideograph */ {"\xBE", 0, 0x214240}, /* East Asian ideograph */ {"\xBF", 0, 0x214241}, /* East Asian ideograph */ {"\xB5", 0, 0x217874}, /* East Asian ideograph */ {"\x84", 0, 0x223546}, /* East Asian ideograph */ {"\x88", 0, 0x22354F}, /* East Asian ideograph */ {"\x89", 0, 0x223553}, /* East Asian ideograph */ {"\x9A", 0, 0x223559}, /* East Asian ideograph */ {"\x96", 0, 0x22355B}, /* East Asian ideograph */ {"\x9B", 0, 0x223561}, /* East Asian ideograph */ {"\xA7", 0, 0x223569}, /* East Asian ideograph */ {"\xA2", 0, 0x22356D}, /* East Asian ideograph */ {"\xA9", 0, 0x22356F}, /* East Asian ideograph */ {"\xA5", 0, 0x223572}, /* East Asian ideograph */ {"\xAE", 0, 0x223577}, /* East Asian ideograph */ {"\xB8", 0, 0x22362C}, /* East Asian ideograph */ {"\x92", 0, 0x28356D}, /* East Asian ideograph */ {"\xB4", 0, 0x2D416E}, /* East Asian ideograph */ {"\xB7", 0, 0x2D525D}, /* East Asian ideograph */ {"\x9F", 0, 0x2E3144}, /* East Asian ideograph */ {"\xA8", 0, 0x2E3328}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page100 = { marc8r_31page100_flat, 0 }; /* PAGE 99 */ struct yaz_iconv_trie_flat marc8r_31page99_flat[] = { {"\x85", 0, 0x214173}, /* East Asian ideograph */ {"\x81", 0, 0x214174}, /* East Asian ideograph */ {"\x98", 0, 0x214175}, /* East Asian ideograph */ {"\x8A", 0, 0x214176}, /* East Asian ideograph */ {"\x82", 0, 0x214178}, /* East Asian ideograph */ {"\x8B", 0, 0x21417A}, /* East Asian ideograph */ {"\x8D", 0, 0x21417B}, /* East Asian ideograph */ {"\x9A", 0, 0x21417C}, /* East Asian ideograph */ {"\x84", 0, 0x21417D}, /* East Asian ideograph */ {"\x87", 0, 0x21417E}, /* East Asian ideograph */ {"\x8E", 0, 0x214221}, /* East Asian ideograph */ {"\x94", 0, 0x214222}, /* East Asian ideograph */ {"\x92", 0, 0x214223}, /* East Asian ideograph */ {"\xA0", 0, 0x214225}, /* East Asian ideograph */ {"\xB0", 0, 0x214226}, /* East Asian ideograph */ {"\xA6", 0, 0x214227}, /* East Asian ideograph */ {"\xAC", 0, 0x214228}, /* East Asian ideograph */ {"\xB1", 0, 0x214229}, /* East Asian ideograph */ {"\xB4", 0, 0x21422A}, /* East Asian ideograph */ {"\xB2", 0, 0x21422B}, /* East Asian ideograph */ {"\xBE", 0, 0x21422E}, /* East Asian ideograph */ {"\xBB", 0, 0x21422F}, /* East Asian ideograph */ {"\xBA", 0, 0x214230}, /* East Asian ideograph */ {"\x97", 0, 0x22346A}, /* East Asian ideograph */ {"\x93", 0, 0x22346C}, /* East Asian ideograph */ {"\x90", 0, 0x223475}, /* East Asian ideograph */ {"\xAF", 0, 0x22352A}, /* East Asian ideograph */ {"\xA1", 0, 0x22352D}, /* East Asian ideograph */ {"\xA5", 0, 0x22352E}, /* East Asian ideograph */ {"\xAB", 0, 0x223531}, /* East Asian ideograph */ {"\xA2", 0, 0x223533}, /* East Asian ideograph */ {"\xAD", 0, 0x223536}, /* East Asian ideograph */ {"\xA4", 0, 0x223538}, /* East Asian ideograph */ {"\xB7", 0, 0x223542}, /* East Asian ideograph */ {"\xBD", 0, 0x22354B}, /* East Asian ideograph */ {"\x9E", 0, 0x27422F}, /* East Asian ideograph */ {"\xA3", 0, 0x2D4153}, /* East Asian ideograph */ {"\xA7", 0, 0x2D5434}, /* East Asian ideograph */ {"\x80", 0, 0x3A2F7C}, /* East Asian ideograph */ {"\xB6", 0, 0x695A31}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page99 = { marc8r_31page99_flat, 0 }; /* PAGE 98 */ struct yaz_iconv_trie_flat marc8r_31page98_flat[] = { {"\x9E", 0, 0x214162}, /* East Asian ideograph */ {"\xA4", 0, 0x214163}, /* East Asian ideograph */ {"\x87", 0, 0x214164}, /* East Asian ideograph */ {"\x88", 0, 0x214165}, /* East Asian ideograph */ {"\xA5", 0, 0x214166}, /* East Asian ideograph */ {"\xB0", 0, 0x214167}, /* East Asian ideograph */ {"\x93", 0, 0x214168}, /* East Asian ideograph */ {"\x95", 0, 0x214169}, /* East Asian ideograph */ {"\x92", 0, 0x21416A}, /* East Asian ideograph */ {"\xA9", 0, 0x21416B}, /* East Asian ideograph */ {"\x91", 0, 0x21416C}, /* East Asian ideograph */ {"\xAE", 0, 0x21416D}, /* East Asian ideograph */ {"\xB2", 0, 0x21416E}, /* East Asian ideograph */ {"\xAD", 0, 0x21416F}, /* East Asian ideograph */ {"\x9A", 0, 0x214170}, /* East Asian ideograph */ {"\xAB", 0, 0x214171}, /* East Asian ideograph */ {"\xAC", 0, 0x214172}, /* East Asian ideograph */ {"\xBB", 0, 0x214177}, /* East Asian ideograph */ {"\xBC", 0, 0x214179}, /* East Asian ideograph */ {"\xBF", 0, 0x214224}, /* East Asian ideograph */ {"\x82", 0, 0x223427}, /* East Asian ideograph */ {"\x9D", 0, 0x22343C}, /* East Asian ideograph */ {"\x99", 0, 0x22343F}, /* East Asian ideograph */ {"\x8F", 0, 0x223442}, /* East Asian ideograph */ {"\x96", 0, 0x22344D}, /* East Asian ideograph */ {"\xA2", 0, 0x22344E}, /* East Asian ideograph */ {"\x90", 0, 0x223454}, /* East Asian ideograph */ {"\xB6", 0, 0x22345B}, /* East Asian ideograph */ {"\x98", 0, 0x223461}, /* East Asian ideograph */ {"\x9F", 0, 0x223462}, /* East Asian ideograph */ {"\xA7", 0, 0x223465}, /* East Asian ideograph */ {"\xB3", 0, 0x223466}, /* East Asian ideograph */ {"\xBE", 0, 0x223474}, /* East Asian ideograph */ {"\xB5", 0, 0x27422C}, /* East Asian ideograph */ {"\xB7", 0, 0x283542}, /* East Asian ideograph */ {"\x84", 0, 0x28355B}, /* East Asian ideograph */ {"\xBA", 0, 0x283561}, /* East Asian ideograph */ {"\xA6", 0, 0x2D4031}, /* East Asian ideograph */ {"\x85", 0, 0x2D4122}, /* East Asian ideograph */ {"\x83", 0, 0x2D4176}, /* East Asian ideograph */ {"\xB9", 0, 0x4B423A}, /* East Asian ideograph */ {"\xB8", 0, 0x4C354A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page98 = { marc8r_31page98_flat, 0 }; /* PAGE 97 */ struct yaz_iconv_trie_flat marc8r_31page97_flat[] = { {"\x98", 0, 0x214157}, /* East Asian ideograph */ {"\xA9", 0, 0x214158}, /* East Asian ideograph */ {"\x94", 0, 0x214159}, /* East Asian ideograph */ {"\x92", 0, 0x21415A}, /* East Asian ideograph */ {"\xAF", 0, 0x21415B}, /* East Asian ideograph */ {"\xB8", 0, 0x21415C}, /* East Asian ideograph */ {"\xB9", 0, 0x21415D}, /* East Asian ideograph */ {"\xBA", 0, 0x21415E}, /* East Asian ideograph */ {"\x9F", 0, 0x21415F}, /* East Asian ideograph */ {"\x91", 0, 0x214160}, /* East Asian ideograph */ {"\xA7", 0, 0x214161}, /* East Asian ideograph */ {"\x81", 0, 0x223345}, /* East Asian ideograph */ {"\x80", 0, 0x223353}, /* East Asian ideograph */ {"\x9B", 0, 0x223368}, /* East Asian ideograph */ {"\x8F", 0, 0x22336A}, /* East Asian ideograph */ {"\xAB", 0, 0x22336C}, /* East Asian ideograph */ {"\xB6", 0, 0x22336F}, /* East Asian ideograph */ {"\xB4", 0, 0x223376}, /* East Asian ideograph */ {"\xBD", 0, 0x223378}, /* East Asian ideograph */ {"\xB3", 0, 0x22337B}, /* East Asian ideograph */ {"\x8E", 0, 0x223423}, /* East Asian ideograph */ {"\xA4", 0, 0x223424}, /* East Asian ideograph */ {"\x9E", 0, 0x223428}, /* East Asian ideograph */ {"\xBB", 0, 0x22342C}, /* East Asian ideograph */ {"\x9C", 0, 0x22342E}, /* East Asian ideograph */ {"\x86", 0, 0x274230}, /* East Asian ideograph */ {"\x84", 0, 0x274235}, /* East Asian ideograph */ {"\x8A", 0, 0x274238}, /* East Asian ideograph */ {"\x88", 0, 0x28352A}, /* East Asian ideograph */ {"\x85", 0, 0x283546}, /* East Asian ideograph */ {"\x87", 0, 0x2D4152}, /* East Asian ideograph */ {"\x83", 0, 0x394022}, /* East Asian ideograph */ {"\xAD", 0, 0x394042}, /* East Asian ideograph */ {"\x82", 0, 0x4B4235}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page97 = { marc8r_31page97_flat, 0 }; /* PAGE 96 */ struct yaz_iconv_trie_flat marc8r_31page96_flat[] = { {"\x9E", 0, 0x214149}, /* East Asian ideograph */ {"\xAA", 0, 0x21414A}, /* East Asian ideograph */ {"\xBE", 0, 0x21414B}, /* East Asian ideograph */ {"\x93", 0, 0x21414C}, /* East Asian ideograph */ {"\x8F", 0, 0x21414D}, /* East Asian ideograph */ {"\x94", 0, 0x21414E}, /* East Asian ideograph */ {"\x8D", 0, 0x21414F}, /* East Asian ideograph */ {"\xAD", 0, 0x214150}, /* East Asian ideograph */ {"\xBD", 0, 0x214151}, /* East Asian ideograph */ {"\x96", 0, 0x214152}, /* East Asian ideograph */ {"\x97", 0, 0x214153}, /* East Asian ideograph */ {"\x9C", 0, 0x214154}, /* East Asian ideograph */ {"\xB6", 0, 0x214155}, /* East Asian ideograph */ {"\xAC", 0, 0x214156}, /* East Asian ideograph */ {"\x92", 0, 0x22327E}, /* East Asian ideograph */ {"\x90", 0, 0x223322}, /* East Asian ideograph */ {"\xB4", 0, 0x223324}, /* East Asian ideograph */ {"\x9B", 0, 0x223329}, /* East Asian ideograph */ {"\xA0", 0, 0x22332B}, /* East Asian ideograph */ {"\xA4", 0, 0x22332C}, /* East Asian ideograph */ {"\xA6", 0, 0x22332F}, /* East Asian ideograph */ {"\x8C", 0, 0x223331}, /* East Asian ideograph */ {"\x95", 0, 0x223336}, /* East Asian ideograph */ {"\x98", 0, 0x223337}, /* East Asian ideograph */ {"\x8E", 0, 0x223338}, /* East Asian ideograph */ {"\xA2", 0, 0x22333B}, /* East Asian ideograph */ {"\xA1", 0, 0x22333D}, /* East Asian ideograph */ {"\xB0", 0, 0x223344}, /* East Asian ideograph */ {"\xB5", 0, 0x223348}, /* East Asian ideograph */ {"\x89", 0, 0x22334C}, /* East Asian ideograph */ {"\x8A", 0, 0x223351}, /* East Asian ideograph */ {"\x87", 0, 0x223359}, /* East Asian ideograph */ {"\xBB", 0, 0x22335B}, /* East Asian ideograph */ {"\xBF", 0, 0x22335D}, /* East Asian ideograph */ {"\x82", 0, 0x27415F}, /* East Asian ideograph */ {"\x81", 0, 0x274229}, /* East Asian ideograph */ {"\x80", 0, 0x274234}, /* East Asian ideograph */ {"\x85", 0, 0x27423A}, /* East Asian ideograph */ {"\xAF", 0, 0x2D4132}, /* East Asian ideograph */ {"\xA8", 0, 0x2D4150}, /* East Asian ideograph */ {"\x86", 0, 0x2D4539}, /* East Asian ideograph */ {"\x8B", 0, 0x2E3028}, /* East Asian ideograph */ {"\xA5", 0, 0x334131}, /* East Asian ideograph */ {"\x83", 0, 0x3F516D}, /* East Asian ideograph */ {"\xBA", 0, 0x4B4236}, /* East Asian ideograph */ {"\xA7", 0, 0x4B4975}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page96 = { marc8r_31page96_flat, 0 }; /* PAGE 95 */ struct yaz_iconv_trie_flat marc8r_31page95_flat[] = { {"\x86", 0, 0x214138}, /* East Asian ideograph */ {"\x89", 0, 0x214139}, /* East Asian ideograph */ {"\x8D", 0, 0x21413A}, /* East Asian ideograph */ {"\xA1", 0, 0x21413B}, /* East Asian ideograph */ {"\x80", 0, 0x21413C}, /* East Asian ideograph */ {"\xA9", 0, 0x21413D}, /* East Asian ideograph */ {"\x90", 0, 0x21413E}, /* East Asian ideograph */ {"\x9A", 0, 0x21413F}, /* East Asian ideograph */ {"\x96", 0, 0x214140}, /* East Asian ideograph */ {"\xAD", 0, 0x214141}, /* East Asian ideograph */ {"\xAE", 0, 0x214142}, /* East Asian ideograph */ {"\x8F", 0, 0x214143}, /* East Asian ideograph */ {"\xA3", 0, 0x214144}, /* East Asian ideograph */ {"\xB4", 0, 0x214145}, /* East Asian ideograph */ {"\x9B", 0, 0x214146}, /* East Asian ideograph (variant of EACC 454146) */ {"\x92", 0, 0x214147}, /* East Asian ideograph */ {"\xAA", 0, 0x214148}, /* East Asian ideograph */ {"\x9E", 0, 0x223243}, /* East Asian ideograph */ {"\xA5", 0, 0x223244}, /* East Asian ideograph */ {"\x93", 0, 0x223247}, /* East Asian ideograph */ {"\x83", 0, 0x223250}, /* East Asian ideograph */ {"\xB5", 0, 0x223252}, /* East Asian ideograph */ {"\xA6", 0, 0x223258}, /* East Asian ideograph */ {"\xA0", 0, 0x22325B}, /* East Asian ideograph */ {"\x95", 0, 0x22325C}, /* East Asian ideograph */ {"\xB6", 0, 0x22325D}, /* East Asian ideograph */ {"\xB2", 0, 0x22325E}, /* East Asian ideograph */ {"\xB8", 0, 0x22325F}, /* East Asian ideograph */ {"\x85", 0, 0x223266}, /* East Asian ideograph */ {"\xB9", 0, 0x22326A}, /* East Asian ideograph */ {"\xAB", 0, 0x223272}, /* East Asian ideograph */ {"\x9D", 0, 0x223273}, /* East Asian ideograph */ {"\x91", 0, 0x223276}, /* East Asian ideograph */ {"\x84", 0, 0x223279}, /* East Asian ideograph */ {"\x9C", 0, 0x22327A}, /* East Asian ideograph */ {"\x97", 0, 0x22327B}, /* East Asian ideograph */ {"\xBD", 0, 0x27423B}, /* East Asian ideograph */ {"\xBF", 0, 0x283466}, /* East Asian ideograph */ {"\x8E", 0, 0x2D4066}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page95 = { marc8r_31page95_flat, 0 }; /* PAGE 94 */ struct yaz_iconv_trie_flat marc8r_31page94_flat[] = { {"\xA5", 0, 0x214076}, /* East Asian ideograph */ {"\xA0", 0, 0x214078}, /* East Asian ideograph */ {"\x96", 0, 0x214079}, /* East Asian ideograph */ {"\xA7", 0, 0x21407A}, /* East Asian ideograph */ {"\x83", 0, 0x21407D}, /* East Asian ideograph */ {"\x98", 0, 0x214122}, /* East Asian ideograph */ {"\x9B", 0, 0x214123}, /* East Asian ideograph */ {"\xAA", 0, 0x214124}, /* East Asian ideograph */ {"\xA9", 0, 0x214126}, /* East Asian ideograph */ {"\x8C", 0, 0x214127}, /* East Asian ideograph */ {"\x89", 0, 0x214128}, /* East Asian ideograph */ {"\xA2", 0, 0x214129}, /* East Asian ideograph */ {"\x99", 0, 0x21412A}, /* East Asian ideograph */ {"\xA1", 0, 0x21412B}, /* East Asian ideograph */ {"\x88", 0, 0x21412C}, /* East Asian ideograph */ {"\xAC", 0, 0x21412D}, /* East Asian ideograph */ {"\x92", 0, 0x21412F}, /* East Asian ideograph */ {"\xA3", 0, 0x214130}, /* East Asian ideograph */ {"\x8F", 0, 0x214132}, /* East Asian ideograph */ {"\xA8", 0, 0x214133}, /* East Asian ideograph */ {"\x84", 0, 0x214136}, /* East Asian ideograph */ {"\x80", 0, 0x214137}, /* East Asian ideograph */ {"\xB6", 0, 0x22316A}, /* East Asian ideograph */ {"\x82", 0, 0x22316B}, /* East Asian ideograph */ {"\x9F", 0, 0x22316E}, /* East Asian ideograph */ {"\x9E", 0, 0x223172}, /* East Asian ideograph */ {"\x81", 0, 0x223179}, /* East Asian ideograph */ {"\x97", 0, 0x22317B}, /* East Asian ideograph */ {"\xAB", 0, 0x22317D}, /* East Asian ideograph */ {"\x87", 0, 0x223225}, /* East Asian ideograph */ {"\x8E", 0, 0x223227}, /* East Asian ideograph */ {"\x86", 0, 0x22322A}, /* East Asian ideograph */ {"\xAF", 0, 0x223230}, /* East Asian ideograph */ {"\xB1", 0, 0x223237}, /* East Asian ideograph */ {"\xB0", 0, 0x223238}, /* East Asian ideograph */ {"\xAE", 0, 0x223239}, /* East Asian ideograph */ {"\x90", 0, 0x22323B}, /* East Asian ideograph */ {"\xAD", 0, 0x22323D}, /* East Asian ideograph */ {"\xBD", 0, 0x22324F}, /* East Asian ideograph */ {"\xBE", 0, 0x223270}, /* East Asian ideograph */ {"\xB4", 0, 0x274160}, /* East Asian ideograph */ {"\xB3", 0, 0x27417D}, /* East Asian ideograph */ {"\xB7", 0, 0x27422B}, /* East Asian ideograph */ {"\xBA", 0, 0x28342C}, /* East Asian ideograph */ {"\xBC", 0, 0x28342E}, /* East Asian ideograph */ {"\xB8", 0, 0x283457}, /* East Asian ideograph */ {"\xB2", 0, 0x2D4141}, /* East Asian ideograph */ {"\x8A", 0, 0x3F404F}, /* East Asian ideograph */ {"\xB5", 0, 0x69595E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page94 = { marc8r_31page94_flat, 0 }; /* PAGE 93 */ struct yaz_iconv_trie_flat marc8r_31page93_flat[] = { {"\x82", 0, 0x214069}, /* East Asian ideograph */ {"\x95", 0, 0x21406B}, /* East Asian ideograph */ {"\x8E", 0, 0x21406E}, /* East Asian ideograph */ {"\x8F", 0, 0x21406F}, /* East Asian ideograph */ {"\x90", 0, 0x214070}, /* East Asian ideograph */ {"\x89", 0, 0x214071}, /* East Asian ideograph */ {"\xA9", 0, 0x214077}, /* East Asian ideograph */ {"\xB2", 0, 0x21407B}, /* East Asian ideograph */ {"\xB7", 0, 0x21407C}, /* East Asian ideograph */ {"\xAB", 0, 0x21407E}, /* East Asian ideograph */ {"\xA7", 0, 0x214121}, /* East Asian ideograph */ {"\xB1", 0, 0x214125}, /* East Asian ideograph */ {"\xB6", 0, 0x214131}, /* East Asian ideograph */ {"\xBB", 0, 0x214134}, /* East Asian ideograph */ {"\xA8", 0, 0x214135}, /* East Asian ideograph (variant of EACC 4B4135) */ {"\xA0", 0, 0x223132}, /* East Asian ideograph */ {"\x85", 0, 0x223142}, /* East Asian ideograph */ {"\x83", 0, 0x223144}, /* East Asian ideograph */ {"\x93", 0, 0x223147}, /* East Asian ideograph */ {"\xA4", 0, 0x223148}, /* East Asian ideograph */ {"\x84", 0, 0x22314A}, /* East Asian ideograph */ {"\x97", 0, 0x223158}, /* East Asian ideograph */ {"\x98", 0, 0x22315B}, /* East Asian ideograph */ {"\x8B", 0, 0x22315C}, /* East Asian ideograph */ {"\x94", 0, 0x22315F}, /* East Asian ideograph */ {"\xBD", 0, 0x223168}, /* East Asian ideograph */ {"\xAC", 0, 0x22316C}, /* East Asian ideograph */ {"\xBF", 0, 0x223173}, /* East Asian ideograph */ {"\xBA", 0, 0x223226}, /* East Asian ideograph */ {"\xB5", 0, 0x22322F}, /* East Asian ideograph */ {"\xBC", 0, 0x22323A}, /* East Asian ideograph */ {"\xAD", 0, 0x223241}, /* East Asian ideograph */ {"\x9F", 0, 0x27414F}, /* East Asian ideograph */ {"\xA3", 0, 0x274153}, /* East Asian ideograph */ {"\x9E", 0, 0x274165}, /* East Asian ideograph */ {"\xAE", 0, 0x27417C}, /* East Asian ideograph */ {"\xA1", 0, 0x274224}, /* East Asian ideograph */ {"\x86", 0, 0x27513D}, /* East Asian ideograph */ {"\x8C", 0, 0x2D3324}, /* East Asian ideograph */ {"\x9C", 0, 0x2D4154}, /* East Asian ideograph */ {"\x8D", 0, 0x2E2F7C}, /* East Asian ideograph */ {"\xB4", 0, 0x33516D}, /* East Asian ideograph */ {"\xA2", 0, 0x4B4146}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page93 = { marc8r_31page93_flat, 0 }; /* PAGE 92 */ struct yaz_iconv_trie_flat marc8r_31page92_flat[] = { {"\x89", 0, 0x214057}, /* East Asian ideograph */ {"\x96", 0, 0x214058}, /* East Asian ideograph */ {"\x88", 0, 0x21405B}, /* East Asian ideograph */ {"\x81", 0, 0x21405D}, /* East Asian ideograph */ {"\x87", 0, 0x214061}, /* East Asian ideograph */ {"\x91", 0, 0x214064}, /* East Asian ideograph */ {"\xAA", 0, 0x21406A}, /* East Asian ideograph */ {"\xBE", 0, 0x21406C}, /* East Asian ideograph */ {"\xAF", 0, 0x21406D}, /* East Asian ideograph */ {"\xAB", 0, 0x214073}, /* East Asian ideograph */ {"\xA8", 0, 0x214074}, /* East Asian ideograph */ {"\xBA", 0, 0x214075}, /* East Asian ideograph */ {"\xBD", 0, 0x21412E}, /* East Asian ideograph */ {"\x8D", 0, 0x223072}, /* East Asian ideograph */ {"\x8C", 0, 0x223131}, /* East Asian ideograph */ {"\xB1", 0, 0x22313A}, /* East Asian ideograph */ {"\xB5", 0, 0x223145}, /* East Asian ideograph */ {"\xB6", 0, 0x223149}, /* East Asian ideograph */ {"\xB9", 0, 0x223154}, /* East Asian ideograph */ {"\xBC", 0, 0x22315A}, /* East Asian ideograph */ {"\x9F", 0, 0x27406C}, /* East Asian ideograph */ {"\x82", 0, 0x274123}, /* East Asian ideograph */ {"\xA5", 0, 0x274142}, /* East Asian ideograph */ {"\x9A", 0, 0x27415B}, /* East Asian ideograph */ {"\xA0", 0, 0x274168}, /* East Asian ideograph */ {"\x9E", 0, 0x274177}, /* East Asian ideograph */ {"\xA1", 0, 0x27417A}, /* East Asian ideograph */ {"\xA4", 0, 0x274225}, /* East Asian ideograph */ {"\x9B", 0, 0x274237}, /* East Asian ideograph */ {"\xA2", 0, 0x283462}, /* East Asian ideograph */ {"\xB2", 0, 0x2E313A}, /* East Asian ideograph */ {"\x8E", 0, 0x2E337B}, /* East Asian ideograph */ {"\xA3", 0, 0x4B412A}, /* East Asian ideograph */ {"\xBF", 0, 0x4B4147}, /* East Asian ideograph */ {"\x99", 0, 0x4B5434}, /* East Asian ideograph */ {"\x9D", 0, 0x4C3474}, /* East Asian ideograph */ {"\xA7", 0, 0x69594B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page92 = { marc8r_31page92_flat, 0 }; /* PAGE 91 */ struct yaz_iconv_trie_dir marc8r_31page91_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x21403F} /* East Asian ideograph */, {0, 0, 0x22306A} /* East Asian ideograph */, {0, 0, 0x21403A} /* East Asian ideograph */, {0, 0, 0x274222} /* East Asian ideograph */, {0, 0, 0x214056} /* East Asian ideograph */, {0, 0, 0x21404E} /* East Asian ideograph */, {0, 0, 0x21404A} /* East Asian ideograph */, {0, 0, 0x214039} /* East Asian ideograph */, {0, 0, 0x2D4171} /* East Asian ideograph */, {0, 0, 0x214045} /* East Asian ideograph */, {0, 0, 0x21403B} /* East Asian ideograph */, {0, 0, 0x214052} /* East Asian ideograph */, {0, 0, 0x214054} /* East Asian ideograph */, {0, 0, 0x2D4067} /* East Asian ideograph */, {0, 0, 0x214049} /* East Asian ideograph (variant of EACC 4B4049) */, {0, 0, 0x223057} /* East Asian ideograph */, {0, 0, 0x214041} /* East Asian ideograph */, {0, 0, 0x214042} /* East Asian ideograph */, {0, 0, 0x214046} /* East Asian ideograph */, {0, 0, 0x334050} /* East Asian ideograph */, {0, 0, 0x214050} /* East Asian ideograph */, {0, 0, 0x214055} /* East Asian ideograph */, {0, 0, 0x214051} /* East Asian ideograph */, {0, 0, 0x21404B} /* East Asian ideograph */, {0, 0, 0x21404C} /* East Asian ideograph */, {0, 0, 0x214043} /* East Asian ideograph */, {0, 0, 0x21403D} /* East Asian ideograph */, {0, 0, 0x4B403D} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x274228} /* East Asian ideograph */, {0, 0, 0x39417C} /* East Asian ideograph */, {0, 0, 0x33422A} /* East Asian ideograph */, {0, 0, 0x274231} /* East Asian ideograph */, {0, 0, 0x27413C} /* East Asian ideograph */, {0, 0, 0x223061} /* East Asian ideograph */, {0, 0, 0x274174} /* East Asian ideograph */, {0, 0, 0x274233} /* East Asian ideograph */, {0, 0, 0x274226} /* East Asian ideograph */, {0, 0, 0x274166} /* East Asian ideograph */, {0, 0, 0x27417E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x214065} /* East Asian ideograph */, {0, 0, 0x21405C} /* East Asian ideograph */, {0, 0, 0x21405E} /* East Asian ideograph */, {0, 0, 0x21405F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x214062} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x21405A} /* East Asian ideograph */, {0, 0, 0x214066} /* East Asian ideograph (variant of EACC 4B4066) */, {0, 0, 0x223125} /* East Asian ideograph */, {0, 0, 0x223137} /* East Asian ideograph */, {0, 0, 0x214060} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x214059} /* East Asian ideograph */, {0, 0, 0x214063} /* East Asian ideograph */, {0, 0, 0x2D3457} /* East Asian ideograph */, {0, 0, 0x214067} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page91 = { 0, marc8r_31page91_dir }; /* PAGE 90 */ struct yaz_iconv_trie_flat marc8r_31page90_flat[] = { {"\x96", 0, 0x214025}, /* East Asian ideograph */ {"\x97", 0, 0x214026}, /* East Asian ideograph */ {"\x92", 0, 0x214027}, /* East Asian ideograph */ {"\x89", 0, 0x214029}, /* East Asian ideograph */ {"\x80", 0, 0x21402C}, /* East Asian ideograph */ {"\x8A", 0, 0x21402D}, /* East Asian ideograph */ {"\x84", 0, 0x214032}, /* East Asian ideograph */ {"\x95", 0, 0x214033}, /* East Asian ideograph */ {"\x91", 0, 0x214034}, /* East Asian ideograph */ {"\x98", 0, 0x214035}, /* East Asian ideograph */ {"\x93", 0, 0x214038}, /* East Asian ideograph */ {"\xA8", 0, 0x21403C}, /* East Asian ideograph */ {"\xBF", 0, 0x21403E}, /* East Asian ideograph */ {"\xB9", 0, 0x214040}, /* East Asian ideograph */ {"\xAB", 0, 0x214044}, /* East Asian ideograph */ {"\xBD", 0, 0x214047}, /* East Asian ideograph */ {"\xBC", 0, 0x214048}, /* East Asian ideograph */ {"\xAC", 0, 0x21404D}, /* East Asian ideograph */ {"\xB1", 0, 0x21404F}, /* East Asian ideograph */ {"\xB5", 0, 0x214053}, /* East Asian ideograph */ {"\x86", 0, 0x223031}, /* East Asian ideograph */ {"\x8E", 0, 0x223032}, /* East Asian ideograph */ {"\xA3", 0, 0x223041}, /* East Asian ideograph */ {"\x82", 0, 0x223043}, /* East Asian ideograph */ {"\x85", 0, 0x223046}, /* East Asian ideograph */ {"\x9D", 0, 0x22304B}, /* East Asian ideograph */ {"\xA6", 0, 0x223056}, /* East Asian ideograph */ {"\xB6", 0, 0x223069}, /* East Asian ideograph */ {"\xA5", 0, 0x273844}, /* East Asian ideograph */ {"\xA1", 0, 0x274136}, /* East Asian ideograph */ {"\xA2", 0, 0x274155}, /* East Asian ideograph */ {"\x9A", 0, 0x274171}, /* East Asian ideograph */ {"\xA4", 0, 0x275948}, /* East Asian ideograph */ {"\x9F", 0, 0x28336F}, /* East Asian ideograph */ {"\xA0", 0, 0x28337B}, /* East Asian ideograph */ {"\xBB", 0, 0x2D313A}, /* East Asian ideograph */ {"\x83", 0, 0x2D404C}, /* East Asian ideograph */ {"\x94", 0, 0x2D404F}, /* East Asian ideograph */ {"\x9B", 0, 0x334045}, /* East Asian ideograph */ {"\x9E", 0, 0x33417E}, /* East Asian ideograph */ {"\x9C", 0, 0x4B4046}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page90 = { marc8r_31page90_flat, 0 }; /* PAGE 89 */ struct yaz_iconv_trie_flat marc8r_31page89_flat[] = { {"\x80", 0, 0x213F75}, /* East Asian ideograph */ {"\x81", 0, 0x213F76}, /* East Asian ideograph */ {"\x88", 0, 0x213F78}, /* East Asian ideograph */ {"\x89", 0, 0x213F79}, /* East Asian ideograph */ {"\x8B", 0, 0x213F7A}, /* East Asian ideograph */ {"\x93", 0, 0x213F7D}, /* East Asian ideograph */ {"\x94", 0, 0x213F7E}, /* East Asian ideograph */ {"\x92", 0, 0x214021}, /* East Asian ideograph */ {"\x9B", 0, 0x214022}, /* East Asian ideograph */ {"\xA3", 0, 0x214023}, /* East Asian ideograph */ {"\x98", 0, 0x214024}, /* East Asian ideograph */ {"\xB6", 0, 0x214028}, /* East Asian ideograph */ {"\xBF", 0, 0x21402A}, /* East Asian ideograph */ {"\xB9", 0, 0x21402B}, /* East Asian ideograph */ {"\xAD", 0, 0x21402E}, /* East Asian ideograph */ {"\xBC", 0, 0x21402F}, /* East Asian ideograph */ {"\xBE", 0, 0x214030}, /* East Asian ideograph */ {"\xAF", 0, 0x214031}, /* East Asian ideograph */ {"\xAE", 0, 0x214036}, /* East Asian ideograph */ {"\xB3", 0, 0x214037}, /* East Asian ideograph */ {"\x83", 0, 0x222F75}, /* East Asian ideograph */ {"\x86", 0, 0x222F77}, /* East Asian ideograph */ {"\x85", 0, 0x222F78}, /* East Asian ideograph */ {"\x8A", 0, 0x222F79}, /* East Asian ideograph */ {"\x90", 0, 0x222F7A}, /* East Asian ideograph */ {"\x9E", 0, 0x222F7C}, /* East Asian ideograph */ {"\xA8", 0, 0x223026}, /* East Asian ideograph */ {"\xA0", 0, 0x223028}, /* East Asian ideograph */ {"\x9A", 0, 0x22302B}, /* East Asian ideograph */ {"\xA2", 0, 0x22302C}, /* East Asian ideograph */ {"\xA6", 0, 0x22302D}, /* East Asian ideograph */ {"\xA7", 0, 0x27383B}, /* East Asian ideograph */ {"\xAB", 0, 0x27407D}, /* East Asian ideograph */ {"\xAA", 0, 0x27407E}, /* East Asian ideograph */ {"\xAC", 0, 0x27413F}, /* East Asian ideograph */ {"\x91", 0, 0x27416E}, /* East Asian ideograph */ {"\xA9", 0, 0x27422A}, /* East Asian ideograph */ {"\xB0", 0, 0x27422E}, /* East Asian ideograph */ {"\x87", 0, 0x274975}, /* East Asian ideograph */ {"\x8E", 0, 0x275129}, /* East Asian ideograph */ {"\x8D", 0, 0x28736D}, /* East Asian ideograph */ {"\x95", 0, 0x2D403F}, /* East Asian ideograph */ {"\xB1", 0, 0x2D4147}, /* East Asian ideograph */ {"\xB5", 0, 0x4B3052}, /* East Asian ideograph */ {"\xBA", 0, 0x4B4053}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page89 = { marc8r_31page89_flat, 0 }; /* PAGE 88 */ struct yaz_iconv_trie_flat marc8r_31page88_flat[] = { {"\x80", 0, 0x213F5C}, /* East Asian ideograph */ {"\x88", 0, 0x213F5D}, /* East Asian ideograph */ {"\x8A", 0, 0x213F5E}, /* East Asian ideograph */ {"\x8E", 0, 0x213F5F}, /* East Asian ideograph */ {"\x8D", 0, 0x213F60}, /* East Asian ideograph */ {"\x8C", 0, 0x213F61}, /* East Asian ideograph */ {"\x90", 0, 0x213F62}, /* East Asian ideograph */ {"\x92", 0, 0x213F63}, /* East Asian ideograph */ {"\x91", 0, 0x213F64}, /* East Asian ideograph */ {"\x96", 0, 0x213F65}, /* East Asian ideograph */ {"\x95", 0, 0x213F66}, /* East Asian ideograph */ {"\x9B", 0, 0x213F67}, /* East Asian ideograph */ {"\x9A", 0, 0x213F68}, /* East Asian ideograph */ {"\x9F", 0, 0x213F69}, /* East Asian ideograph */ {"\xA1", 0, 0x213F6A}, /* East Asian ideograph */ {"\xA2", 0, 0x213F6B}, /* East Asian ideograph */ {"\xAA", 0, 0x213F6C}, /* East Asian ideograph */ {"\xAE", 0, 0x213F6D}, /* East Asian ideograph */ {"\xB0", 0, 0x213F6E}, /* East Asian ideograph */ {"\xB2", 0, 0x213F6F}, /* East Asian ideograph */ {"\xB4", 0, 0x213F70}, /* East Asian ideograph */ {"\xB3", 0, 0x213F71}, /* East Asian ideograph */ {"\xB6", 0, 0x213F72}, /* East Asian ideograph */ {"\xBF", 0, 0x213F73}, /* East Asian ideograph */ {"\xBE", 0, 0x213F74}, /* East Asian ideograph */ {"\x81", 0, 0x222F3D}, /* East Asian ideograph */ {"\x84", 0, 0x222F41}, /* East Asian ideograph */ {"\x87", 0, 0x222F43}, /* East Asian ideograph */ {"\x89", 0, 0x222F44}, /* East Asian ideograph */ {"\x94", 0, 0x222F47}, /* East Asian ideograph */ {"\xA3", 0, 0x222F56}, /* East Asian ideograph */ {"\xA5", 0, 0x222F5B}, /* East Asian ideograph */ {"\xA4", 0, 0x222F5D}, /* East Asian ideograph */ {"\xA9", 0, 0x222F61}, /* East Asian ideograph */ {"\xAD", 0, 0x222F67}, /* East Asian ideograph */ {"\xB9", 0, 0x222F6E}, /* East Asian ideograph */ {"\xBA", 0, 0x222F6F}, /* East Asian ideograph */ {"\xBD", 0, 0x222F70}, /* East Asian ideograph */ {"\x98", 0, 0x273F6E}, /* East Asian ideograph */ {"\x8F", 0, 0x273F6F}, /* East Asian ideograph */ {"\x86", 0, 0x282F43}, /* East Asian ideograph */ {"\x8B", 0, 0x282F47}, /* East Asian ideograph */ {"\x97", 0, 0x282F66}, /* East Asian ideograph */ {"\x9E", 0, 0x2D3F67}, /* East Asian ideograph */ {"\xA6", 0, 0x2D3F6E}, /* East Asian ideograph */ {"\xAF", 0, 0x2D3F6F}, /* East Asian ideograph */ {"\xBB", 0, 0x4B3F74}, /* East Asian ideograph */ {"\x9D", 0, 0x4B5A23}, /* East Asian ideograph */ {"\xAC", 0, 0x4C2F61}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page88 = { marc8r_31page88_flat, 0 }; /* PAGE 87 */ struct yaz_iconv_trie_flat marc8r_31page87_flat[] = { {"\x8D", 0, 0x213F49}, /* East Asian ideograph */ {"\x89", 0, 0x213F4A}, /* East Asian ideograph */ {"\x82", 0, 0x213F4D}, /* East Asian ideograph */ {"\x87", 0, 0x213F4E}, /* East Asian ideograph */ {"\x88", 0, 0x213F4F}, /* East Asian ideograph */ {"\x8A", 0, 0x213F50}, /* East Asian ideograph */ {"\xA3", 0, 0x213F51}, /* East Asian ideograph */ {"\xA6", 0, 0x213F52}, /* East Asian ideograph */ {"\xB2", 0, 0x213F53}, /* East Asian ideograph (variant of EACC 4B3F53) */ {"\xB7", 0, 0x213F54}, /* East Asian ideograph */ {"\xB6", 0, 0x213F55}, /* East Asian ideograph */ {"\xB8", 0, 0x213F56}, /* East Asian ideograph */ {"\xB5", 0, 0x213F57}, /* East Asian ideograph */ {"\xBA", 0, 0x213F58}, /* East Asian ideograph */ {"\xBE", 0, 0x213F59}, /* East Asian ideograph */ {"\xBF", 0, 0x213F5A}, /* East Asian ideograph */ {"\xBC", 0, 0x213F5B}, /* East Asian ideograph */ {"\x8B", 0, 0x222E5A}, /* East Asian ideograph */ {"\x8C", 0, 0x222E5C}, /* East Asian ideograph */ {"\x86", 0, 0x222E5D}, /* East Asian ideograph */ {"\xA0", 0, 0x222E71}, /* East Asian ideograph */ {"\xA5", 0, 0x222E77}, /* East Asian ideograph */ {"\x9C", 0, 0x222E7D}, /* East Asian ideograph */ {"\x9F", 0, 0x222E7E}, /* East Asian ideograph */ {"\xB3", 0, 0x222F29}, /* East Asian ideograph */ {"\x92", 0, 0x273F55}, /* East Asian ideograph */ {"\x90", 0, 0x2D3F54}, /* East Asian ideograph */ {"\xBD", 0, 0x2D4621}, /* East Asian ideograph */ {"\xB4", 0, 0x333F58}, /* East Asian ideograph */ {"\x83", 0, 0x393439}, /* East Asian ideograph */ {"\x9E", 0, 0x3F5564}, /* East Asian ideograph */ {"\x91", 0, 0x4B3F51}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page87 = { marc8r_31page87_flat, 0 }; /* PAGE 86 */ struct yaz_iconv_trie_flat marc8r_31page86_flat[] = { {"\x82", 0, 0x213F33}, /* East Asian ideograph */ {"\xA7", 0, 0x213F3D}, /* East Asian ideograph */ {"\xB2", 0, 0x213F3E}, /* East Asian ideograph */ {"\x91", 0, 0x213F3F}, /* East Asian ideograph */ {"\x8E", 0, 0x213F40}, /* East Asian ideograph */ {"\xAB", 0, 0x213F41}, /* East Asian ideograph */ {"\xA4", 0, 0x213F42}, /* East Asian ideograph */ {"\xAC", 0, 0x213F43}, /* East Asian ideograph */ {"\x9A", 0, 0x213F44}, /* East Asian ideograph */ {"\xA9", 0, 0x213F45}, /* East Asian ideograph */ {"\x94", 0, 0x213F46}, /* East Asian ideograph */ {"\x8A", 0, 0x213F47}, /* East Asian ideograph */ {"\xB6", 0, 0x213F48}, /* East Asian ideograph */ {"\x90", 0, 0x213F4B}, /* East Asian ideograph */ {"\xBE", 0, 0x213F4C}, /* East Asian ideograph */ {"\x83", 0, 0x222D6B}, /* East Asian ideograph */ {"\x8B", 0, 0x222E23}, /* East Asian ideograph */ {"\x9D", 0, 0x222E32}, /* East Asian ideograph */ {"\xA6", 0, 0x222E33}, /* East Asian ideograph */ {"\xA2", 0, 0x222E3D}, /* East Asian ideograph */ {"\xA8", 0, 0x222E40}, /* East Asian ideograph */ {"\x9C", 0, 0x222E42}, /* East Asian ideograph */ {"\xAF", 0, 0x222E43}, /* East Asian ideograph */ {"\x96", 0, 0x222E45}, /* East Asian ideograph */ {"\x97", 0, 0x222E46}, /* East Asian ideograph */ {"\xAD", 0, 0x222E47}, /* East Asian ideograph */ {"\x92", 0, 0x222E4C}, /* East Asian ideograph */ {"\xAE", 0, 0x222E52}, /* East Asian ideograph */ {"\x8D", 0, 0x222E55}, /* East Asian ideograph */ {"\xBA", 0, 0x222E68}, /* East Asian ideograph */ {"\xB8", 0, 0x222E6A}, /* East Asian ideograph */ {"\x87", 0, 0x273F45}, /* East Asian ideograph */ {"\x99", 0, 0x2D3661}, /* East Asian ideograph */ {"\x85", 0, 0x2D3F3A}, /* East Asian ideograph */ {"\xB7", 0, 0x706340}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page86 = { marc8r_31page86_flat, 0 }; /* PAGE 85 */ struct yaz_iconv_trie_flat marc8r_31page85_flat[] = { {"\x88", 0, 0x213F21}, /* East Asian ideograph */ {"\xA8", 0, 0x213F22}, /* East Asian ideograph */ {"\x8C", 0, 0x213F26}, /* East Asian ideograph */ {"\x8D", 0, 0x213F27}, /* East Asian ideograph */ {"\x8B", 0, 0x213F28}, /* East Asian ideograph */ {"\x87", 0, 0x213F2C}, /* East Asian ideograph */ {"\xB7", 0, 0x213F2D}, /* East Asian ideograph */ {"\xB6", 0, 0x213F2E}, /* East Asian ideograph */ {"\xA7", 0, 0x213F2F}, /* East Asian ideograph */ {"\xB0", 0, 0x213F30}, /* East Asian ideograph */ {"\x9A", 0, 0x213F31}, /* East Asian ideograph */ {"\x9D", 0, 0x213F32}, /* East Asian ideograph */ {"\xBC", 0, 0x213F34}, /* East Asian ideograph */ {"\xA2", 0, 0x213F35}, /* East Asian ideograph */ {"\xAE", 0, 0x213F36}, /* East Asian ideograph */ {"\x95", 0, 0x213F37}, /* East Asian ideograph */ {"\x98", 0, 0x213F38}, /* East Asian ideograph */ {"\xA3", 0, 0x213F39}, /* East Asian ideograph */ {"\x9F", 0, 0x213F3A}, /* East Asian ideograph */ {"\xAB", 0, 0x213F3B}, /* East Asian ideograph */ {"\xBE", 0, 0x213F3C}, /* East Asian ideograph */ {"\x89", 0, 0x222D48}, /* East Asian ideograph */ {"\x8A", 0, 0x222D4A}, /* East Asian ideograph */ {"\x90", 0, 0x222D51}, /* East Asian ideograph */ {"\x81", 0, 0x222D5B}, /* East Asian ideograph */ {"\x86", 0, 0x222D61}, /* East Asian ideograph */ {"\x9E", 0, 0x222D66}, /* East Asian ideograph */ {"\xB5", 0, 0x222D67}, /* East Asian ideograph */ {"\xB4", 0, 0x222D68}, /* East Asian ideograph */ {"\xB1", 0, 0x222D70}, /* East Asian ideograph */ {"\xAA", 0, 0x222D74}, /* East Asian ideograph */ {"\xB3", 0, 0x222D77}, /* East Asian ideograph */ {"\xA4", 0, 0x222D79}, /* East Asian ideograph */ {"\x93", 0, 0x222D7B}, /* East Asian ideograph */ {"\xAF", 0, 0x222E2C}, /* East Asian ideograph */ {"\xA5", 0, 0x222E2D}, /* East Asian ideograph */ {"\x9C", 0, 0x222E2F}, /* East Asian ideograph */ {"\x91", 0, 0x273F59}, /* East Asian ideograph */ {"\x99", 0, 0x2D3F31}, /* East Asian ideograph */ {"\x84", 0, 0x334449}, /* East Asian ideograph */ {"\x82", 0, 0x393E4C}, /* East Asian ideograph */ {"\x8E", 0, 0x3F3F24}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page85 = { marc8r_31page85_flat, 0 }; /* PAGE 84 */ struct yaz_iconv_trie_flat marc8r_31page84_flat[] = { {"\x8F", 0, 0x213E6B}, /* East Asian ideograph */ {"\x9C", 0, 0x213E6C}, /* East Asian ideograph */ {"\x9F", 0, 0x213E6E}, /* East Asian ideograph */ {"\x9A", 0, 0x213E72}, /* East Asian ideograph */ {"\x95", 0, 0x213E73}, /* East Asian ideograph */ {"\xA3", 0, 0x213E75}, /* East Asian ideograph */ {"\x9B", 0, 0x213E77}, /* East Asian ideograph */ {"\x8E", 0, 0x213E78}, /* East Asian ideograph */ {"\x80", 0, 0x213E79}, /* East Asian ideograph */ {"\x81", 0, 0x213E7A}, /* East Asian ideograph */ {"\x89", 0, 0x213E7C}, /* East Asian ideograph */ {"\x88", 0, 0x213E7D}, /* East Asian ideograph */ {"\xBC", 0, 0x213F24}, /* East Asian ideograph */ {"\xBE", 0, 0x213F29}, /* East Asian ideograph */ {"\xA7", 0, 0x213F2A}, /* East Asian ideograph */ {"\xB4", 0, 0x213F2B}, /* East Asian ideograph */ {"\x94", 0, 0x222C70}, /* East Asian ideograph */ {"\x83", 0, 0x222C73}, /* East Asian ideograph */ {"\x99", 0, 0x222C75}, /* East Asian ideograph */ {"\x8D", 0, 0x222C7D}, /* East Asian ideograph */ {"\x8A", 0, 0x222D2A}, /* East Asian ideograph */ {"\x90", 0, 0x222D2C}, /* East Asian ideograph */ {"\x92", 0, 0x222D32}, /* East Asian ideograph */ {"\xA5", 0, 0x222D37}, /* East Asian ideograph */ {"\xA1", 0, 0x222D3F}, /* East Asian ideograph */ {"\x86", 0, 0x222D43}, /* East Asian ideograph */ {"\xAB", 0, 0x222D4E}, /* East Asian ideograph */ {"\xA9", 0, 0x222D50}, /* East Asian ideograph */ {"\xB0", 0, 0x222D58}, /* East Asian ideograph */ {"\xB7", 0, 0x222D5E}, /* East Asian ideograph */ {"\xA4", 0, 0x273F42}, /* East Asian ideograph */ {"\xBF", 0, 0x276055}, /* East Asian ideograph */ {"\xA6", 0, 0x282E4C}, /* East Asian ideograph */ {"\xBD", 0, 0x2D3464}, /* East Asian ideograph */ {"\xA0", 0, 0x2D3F27}, /* East Asian ideograph */ {"\xAC", 0, 0x2D5856}, /* East Asian ideograph */ {"\xA8", 0, 0x2E2D79}, /* East Asian ideograph */ {"\xB3", 0, 0x333F5B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page84 = { marc8r_31page84_flat, 0 }; /* PAGE 83 */ struct yaz_iconv_trie_flat marc8r_31page83_flat[] = { {"\xA6", 0, 0x213E58}, /* East Asian ideograph */ {"\x8B", 0, 0x213E59}, /* East Asian ideograph */ {"\x85", 0, 0x213E5B}, /* East Asian ideograph (variant of EACC 4B3E5B) */ {"\x91", 0, 0x213E5D}, /* East Asian ideograph */ {"\xA0", 0, 0x213E60}, /* East Asian ideograph */ {"\xA1", 0, 0x213E61}, /* East Asian ideograph */ {"\x9C", 0, 0x213E62}, /* East Asian ideograph */ {"\x98", 0, 0x213E63}, /* East Asian ideograph */ {"\x95", 0, 0x213E64}, /* East Asian ideograph */ {"\x86", 0, 0x213E67}, /* East Asian ideograph */ {"\x9A", 0, 0x213E69}, /* East Asian ideograph */ {"\x9F", 0, 0x213E6A}, /* East Asian ideograph */ {"\xB3", 0, 0x213E6D}, /* East Asian ideograph */ {"\xB0", 0, 0x213E6F}, /* East Asian ideograph */ {"\xBB", 0, 0x213E70}, /* East Asian ideograph */ {"\xBA", 0, 0x213E71}, /* East Asian ideograph */ {"\xB9", 0, 0x213E74}, /* East Asian ideograph */ {"\xB4", 0, 0x213E76}, /* East Asian ideograph */ {"\xB6", 0, 0x213E7B}, /* East Asian ideograph */ {"\xB1", 0, 0x213E7E}, /* East Asian ideograph */ {"\x87", 0, 0x222C3E}, /* East Asian ideograph */ {"\x93", 0, 0x222C47}, /* East Asian ideograph */ {"\x94", 0, 0x222C48}, /* East Asian ideograph */ {"\x8E", 0, 0x222C4E}, /* East Asian ideograph */ {"\x8F", 0, 0x222C51}, /* East Asian ideograph */ {"\x99", 0, 0x222C53}, /* East Asian ideograph */ {"\x9D", 0, 0x222C56}, /* East Asian ideograph */ {"\x84", 0, 0x222C5D}, /* East Asian ideograph */ {"\xA3", 0, 0x222C62}, /* East Asian ideograph */ {"\xA2", 0, 0x222C66}, /* East Asian ideograph */ {"\xA5", 0, 0x222C67}, /* East Asian ideograph */ {"\x9B", 0, 0x222C69}, /* East Asian ideograph */ {"\xA9", 0, 0x222C6E}, /* East Asian ideograph */ {"\xBD", 0, 0x222C7C}, /* East Asian ideograph */ {"\xB2", 0, 0x222D34}, /* East Asian ideograph */ {"\xB8", 0, 0x222D3B}, /* East Asian ideograph */ {"\xBC", 0, 0x222D41}, /* East Asian ideograph */ {"\xAC", 0, 0x273E6C}, /* East Asian ideograph */ {"\xAD", 0, 0x273F31}, /* East Asian ideograph */ {"\xA8", 0, 0x273F38}, /* East Asian ideograph */ {"\xAF", 0, 0x273F39}, /* East Asian ideograph */ {"\xAE", 0, 0x273F44}, /* East Asian ideograph */ {"\xAB", 0, 0x273F47}, /* East Asian ideograph */ {"\xA7", 0, 0x273F5B}, /* East Asian ideograph */ {"\x8A", 0, 0x27614B}, /* East Asian ideograph */ {"\xAA", 0, 0x2D3D75}, /* East Asian ideograph */ {"\xB7", 0, 0x2D573B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page83 = { marc8r_31page83_flat, 0 }; /* PAGE 82 */ struct yaz_iconv_trie_flat marc8r_31page82_flat[] = { {"\x8C", 0, 0x213E4A}, /* East Asian ideograph */ {"\xA6", 0, 0x213E4B}, /* East Asian ideograph */ {"\x9F", 0, 0x213E4D}, /* East Asian ideograph */ {"\x9A", 0, 0x213E4E}, /* East Asian ideograph */ {"\x96", 0, 0x213E4F}, /* East Asian ideograph */ {"\x84", 0, 0x213E50}, /* East Asian ideograph */ {"\x8D", 0, 0x213E51}, /* East Asian ideograph */ {"\xA3", 0, 0x213E52}, /* East Asian ideograph */ {"\x89", 0, 0x213E53}, /* East Asian ideograph */ {"\x94", 0, 0x213E54}, /* East Asian ideograph */ {"\xA0", 0, 0x213E55}, /* East Asian ideograph */ {"\xA8", 0, 0x213E56}, /* East Asian ideograph */ {"\xB4", 0, 0x213E57}, /* East Asian ideograph */ {"\xB6", 0, 0x213E5C}, /* East Asian ideograph */ {"\xB5", 0, 0x213E5E}, /* East Asian ideograph */ {"\xBB", 0, 0x213E5F}, /* East Asian ideograph */ {"\xBC", 0, 0x213E65}, /* East Asian ideograph */ {"\xB2", 0, 0x213E66}, /* East Asian ideograph */ {"\xB8", 0, 0x213E68}, /* East Asian ideograph */ {"\x8A", 0, 0x222C24}, /* East Asian ideograph */ {"\x92", 0, 0x222C2B}, /* East Asian ideograph */ {"\x9D", 0, 0x222C2C}, /* East Asian ideograph */ {"\x81", 0, 0x222C2D}, /* East Asian ideograph */ {"\x9E", 0, 0x222C2F}, /* East Asian ideograph */ {"\x83", 0, 0x222C30}, /* East Asian ideograph */ {"\x97", 0, 0x222C32}, /* East Asian ideograph */ {"\xA7", 0, 0x222C34}, /* East Asian ideograph */ {"\x95", 0, 0x222C3A}, /* East Asian ideograph */ {"\xB0", 0, 0x222C42}, /* East Asian ideograph */ {"\xBE", 0, 0x222C46}, /* East Asian ideograph */ {"\xB3", 0, 0x222C54}, /* East Asian ideograph */ {"\xB1", 0, 0x222C60}, /* East Asian ideograph */ {"\xAF", 0, 0x273F41}, /* East Asian ideograph */ {"\xAC", 0, 0x273F56}, /* East Asian ideograph */ {"\xAD", 0, 0x282D77}, /* East Asian ideograph */ {"\xAB", 0, 0x282D79}, /* East Asian ideograph */ {"\x9B", 0, 0x2E2B74}, /* East Asian ideograph */ {"\x8B", 0, 0x33354E}, /* East Asian ideograph */ {"\xBD", 0, 0x33475F}, /* East Asian ideograph */ {"\xAA", 0, 0x393E61}, /* East Asian ideograph */ {"\xA4", 0, 0x396C6B}, /* East Asian ideograph */ {"\xA9", 0, 0x4B3E7E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page82 = { marc8r_31page82_flat, 0 }; /* PAGE 81 */ struct yaz_iconv_trie_flat marc8r_31page81_flat[] = { {"\x99", 0, 0x213E38}, /* East Asian ideograph */ {"\xA3", 0, 0x213E39}, /* East Asian ideograph */ {"\xA8", 0, 0x213E3A}, /* East Asian ideograph */ {"\x83", 0, 0x213E3B}, /* East Asian ideograph */ {"\xA5", 0, 0x213E3C}, /* East Asian ideograph */ {"\x90", 0, 0x213E3D}, /* East Asian ideograph */ {"\xAD", 0, 0x213E3E}, /* East Asian ideograph */ {"\xA2", 0, 0x213E3F}, /* East Asian ideograph */ {"\x86", 0, 0x213E40}, /* East Asian ideograph (variant of EACC 4B3E40) */ {"\x8D", 0, 0x213E41}, /* East Asian ideograph */ {"\xAB", 0, 0x213E42}, /* East Asian ideograph */ {"\xA9", 0, 0x213E43}, /* East Asian ideograph */ {"\xAC", 0, 0x213E44}, /* East Asian ideograph */ {"\xAF", 0, 0x213E45}, /* East Asian ideograph */ {"\xAA", 0, 0x213E46}, /* East Asian ideograph */ {"\xA4", 0, 0x213E47}, /* East Asian ideograph */ {"\xB0", 0, 0x213E48}, /* East Asian ideograph */ {"\x95", 0, 0x213E49}, /* East Asian ideograph */ {"\xBF", 0, 0x213E4C}, /* East Asian ideograph */ {"\x94", 0, 0x222B53}, /* East Asian ideograph */ {"\x9D", 0, 0x222B57}, /* East Asian ideograph */ {"\x87", 0, 0x222B5A}, /* East Asian ideograph */ {"\x89", 0, 0x222B5E}, /* East Asian ideograph */ {"\x93", 0, 0x222B5F}, /* East Asian ideograph */ {"\xA7", 0, 0x222B68}, /* East Asian ideograph */ {"\x8C", 0, 0x222B6F}, /* East Asian ideograph */ {"\x81", 0, 0x222B71}, /* East Asian ideograph */ {"\xB7", 0, 0x222B72}, /* East Asian ideograph */ {"\x82", 0, 0x222B74}, /* East Asian ideograph */ {"\x9F", 0, 0x222B76}, /* East Asian ideograph */ {"\xA1", 0, 0x222B7A}, /* East Asian ideograph */ {"\xB6", 0, 0x273E61}, /* East Asian ideograph */ {"\xBB", 0, 0x273E70}, /* East Asian ideograph */ {"\xBC", 0, 0x273E7E}, /* East Asian ideograph */ {"\xB8", 0, 0x273F3A}, /* East Asian ideograph */ {"\xB3", 0, 0x273F4E}, /* East Asian ideograph */ {"\x8B", 0, 0x273F5C}, /* East Asian ideograph */ {"\xBD", 0, 0x282D34}, /* East Asian ideograph */ {"\xBA", 0, 0x282D5E}, /* East Asian ideograph */ {"\xB9", 0, 0x282E79}, /* East Asian ideograph */ {"\xA0", 0, 0x2D3E2B}, /* East Asian ideograph */ {"\x92", 0, 0x2D3E40}, /* East Asian ideograph */ {"\xB5", 0, 0x2D3E60}, /* East Asian ideograph */ {"\x9A", 0, 0x2E2B5B}, /* East Asian ideograph */ {"\x8A", 0, 0x393460}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page81 = { marc8r_31page81_flat, 0 }; /* PAGE 80 */ struct yaz_iconv_trie_flat marc8r_31page80_flat[] = { {"\x94", 0, 0x213E29}, /* East Asian ideograph */ {"\xB5", 0, 0x213E2A}, /* East Asian ideograph (variant of EACC 4B3E2A) */ {"\xAA", 0, 0x213E2B}, /* East Asian ideograph */ {"\xAF", 0, 0x213E2C}, /* East Asian ideograph */ {"\x96", 0, 0x213E2D}, /* East Asian ideograph */ {"\x9D", 0, 0x213E2E}, /* East Asian ideograph */ {"\x8F", 0, 0x213E2F}, /* East Asian ideograph */ {"\xA1", 0, 0x213E30}, /* East Asian ideograph */ {"\xA0", 0, 0x213E31}, /* East Asian ideograph */ {"\xA8", 0, 0x213E32}, /* East Asian ideograph */ {"\xA5", 0, 0x213E33}, /* East Asian ideograph */ {"\xA7", 0, 0x213E34}, /* East Asian ideograph */ {"\x8E", 0, 0x213E35}, /* East Asian ideograph */ {"\x95", 0, 0x213E36}, /* East Asian ideograph */ {"\x92", 0, 0x213E37}, /* East Asian ideograph */ {"\xA6", 0, 0x222B2A}, /* East Asian ideograph */ {"\xA9", 0, 0x222B2C}, /* East Asian ideograph */ {"\xAB", 0, 0x222B2D}, /* East Asian ideograph */ {"\x99", 0, 0x222B30}, /* East Asian ideograph */ {"\x88", 0, 0x222B31}, /* East Asian ideograph */ {"\x8A", 0, 0x222B36}, /* East Asian ideograph */ {"\x8C", 0, 0x222B37}, /* East Asian ideograph */ {"\x9B", 0, 0x222B38}, /* East Asian ideograph */ {"\x97", 0, 0x222B3C}, /* East Asian ideograph */ {"\xB3", 0, 0x222B3D}, /* East Asian ideograph */ {"\x8D", 0, 0x222B45}, /* East Asian ideograph */ {"\x90", 0, 0x222B46}, /* East Asian ideograph */ {"\xB9", 0, 0x222B4B}, /* East Asian ideograph */ {"\x93", 0, 0x222B50}, /* East Asian ideograph */ {"\x85", 0, 0x273E5E}, /* East Asian ideograph */ {"\x81", 0, 0x273F28}, /* East Asian ideograph */ {"\x86", 0, 0x273F2B}, /* East Asian ideograph */ {"\x82", 0, 0x273F3B}, /* East Asian ideograph */ {"\x9C", 0, 0x273F4B}, /* East Asian ideograph */ {"\x80", 0, 0x273F54}, /* East Asian ideograph */ {"\xBB", 0, 0x27516D}, /* East Asian ideograph */ {"\x84", 0, 0x282D74}, /* East Asian ideograph */ {"\x83", 0, 0x282E52}, /* East Asian ideograph */ {"\xBF", 0, 0x282E5C}, /* East Asian ideograph */ {"\xBC", 0, 0x282E7E}, /* East Asian ideograph */ {"\xB1", 0, 0x336C6B}, /* East Asian ideograph */ {"\xBA", 0, 0x69576A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page80 = { marc8r_31page80_flat, 0 }; /* PAGE 79 */ struct yaz_iconv_trie_flat marc8r_31page79_flat[] = { {"\xBC", 0, 0x21352A}, /* East Asian ideograph */ {"\x81", 0, 0x214347}, /* East Asian ideograph */ {"\x89", 0, 0x214348}, /* East Asian ideograph */ {"\x86", 0, 0x214349}, /* East Asian ideograph */ {"\x96", 0, 0x21434B}, /* East Asian ideograph */ {"\x99", 0, 0x21434C}, /* East Asian ideograph */ {"\xA0", 0, 0x21434D}, /* East Asian ideograph */ {"\x9D", 0, 0x21434E}, /* East Asian ideograph */ {"\xA6", 0, 0x21434F}, /* East Asian ideograph */ {"\xB0", 0, 0x214350}, /* East Asian ideograph */ {"\xB2", 0, 0x214351}, /* East Asian ideograph */ {"\xB3", 0, 0x214352}, /* East Asian ideograph */ {"\xB4", 0, 0x214353}, /* East Asian ideograph */ {"\xB7", 0, 0x214354}, /* East Asian ideograph */ {"\xB8", 0, 0x214355}, /* East Asian ideograph */ {"\xB9", 0, 0x214356}, /* East Asian ideograph */ {"\xBE", 0, 0x214358}, /* East Asian ideograph */ {"\xBF", 0, 0x214359}, /* East Asian ideograph */ {"\x88", 0, 0x22394E}, /* East Asian ideograph */ {"\x80", 0, 0x223954}, /* East Asian ideograph */ {"\x87", 0, 0x223955}, /* East Asian ideograph */ {"\x84", 0, 0x22395C}, /* East Asian ideograph */ {"\x8F", 0, 0x223960}, /* East Asian ideograph */ {"\x9A", 0, 0x223971}, /* East Asian ideograph */ {"\x9B", 0, 0x223972}, /* East Asian ideograph */ {"\xA2", 0, 0x223973}, /* East Asian ideograph */ {"\xA1", 0, 0x223976}, /* East Asian ideograph */ {"\xA8", 0, 0x223978}, /* East Asian ideograph */ {"\xA9", 0, 0x22397C}, /* East Asian ideograph */ {"\xAC", 0, 0x2D432E}, /* East Asian ideograph */ {"\x8D", 0, 0x2E3936}, /* East Asian ideograph */ {"\x9C", 0, 0x39525B}, /* East Asian ideograph */ {"\xB5", 0, 0x4B4352}, /* East Asian ideograph */ {"\xBD", 0, 0x4B4358}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page79 = { marc8r_31page79_flat, 0 }; /* PAGE 78 */ struct yaz_iconv_trie_flat marc8r_31page78_flat[] = { {"\x80", 0, 0x213335}, /* East Asian ideograph */ {"\x83", 0, 0x21435A}, /* East Asian ideograph */ {"\x88", 0, 0x21435B}, /* East Asian ideograph */ {"\x89", 0, 0x21435C}, /* East Asian ideograph */ {"\x8D", 0, 0x21435D}, /* East Asian ideograph */ {"\x8B", 0, 0x21435E}, /* East Asian ideograph */ {"\x97", 0, 0x21435F}, /* East Asian ideograph */ {"\x95", 0, 0x214360}, /* East Asian ideograph */ {"\x94", 0, 0x214361}, /* East Asian ideograph */ {"\x9B", 0, 0x214362}, /* East Asian ideograph */ {"\x9D", 0, 0x214363}, /* East Asian ideograph */ {"\x9F", 0, 0x214364}, /* East Asian ideograph */ {"\xA7", 0, 0x214366}, /* East Asian ideograph */ {"\xA8", 0, 0x214367}, /* East Asian ideograph */ {"\xAC", 0, 0x214369}, /* East Asian ideograph */ {"\xAB", 0, 0x21436A}, /* East Asian ideograph */ {"\xAA", 0, 0x21436B}, /* East Asian ideograph */ {"\xBD", 0, 0x21436D}, /* East Asian ideograph */ {"\xB1", 0, 0x21436F}, /* East Asian ideograph */ {"\xB5", 0, 0x214370}, /* East Asian ideograph */ {"\x86", 0, 0x216C7B}, /* East Asian ideograph */ {"\x85", 0, 0x223A28}, /* East Asian ideograph */ {"\x8F", 0, 0x223A30}, /* East Asian ideograph */ {"\x90", 0, 0x223A31}, /* East Asian ideograph */ {"\x92", 0, 0x223A33}, /* East Asian ideograph */ {"\x93", 0, 0x223A34}, /* East Asian ideograph */ {"\x99", 0, 0x223A38}, /* East Asian ideograph */ {"\x98", 0, 0x223A39}, /* East Asian ideograph */ {"\xA3", 0, 0x223A47}, /* East Asian ideograph */ {"\xBE", 0, 0x223A4C}, /* East Asian ideograph */ {"\xBF", 0, 0x223A4E}, /* East Asian ideograph */ {"\x8A", 0, 0x22775C}, /* East Asian ideograph */ {"\x91", 0, 0x227775}, /* East Asian ideograph */ {"\xA0", 0, 0x22792E}, /* East Asian ideograph */ {"\xA5", 0, 0x22797E}, /* East Asian ideograph */ {"\xB4", 0, 0x274558}, /* East Asian ideograph */ {"\xBA", 0, 0x27455D}, /* East Asian ideograph */ {"\xAE", 0, 0x275746}, /* East Asian ideograph */ {"\xAD", 0, 0x276B5F}, /* East Asian ideograph */ {"\x96", 0, 0x2D435F}, /* East Asian ideograph */ {"\xA2", 0, 0x2D4362}, /* East Asian ideograph */ {"\x9E", 0, 0x2D4364}, /* East Asian ideograph */ {"\xB6", 0, 0x2D4370}, /* East Asian ideograph */ {"\xB8", 0, 0x2E2F7A}, /* East Asian ideograph */ {"\x82", 0, 0x334357}, /* East Asian ideograph */ {"\xA6", 0, 0x395564}, /* East Asian ideograph */ {"\xAF", 0, 0x455746}, /* East Asian ideograph */ {"\xB7", 0, 0x695B37}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page78 = { marc8r_31page78_flat, 0 }; /* PAGE 77 */ struct yaz_iconv_trie_flat marc8r_31page77_flat[] = { {"\x83", 0, 0x213D78}, /* East Asian ideograph */ {"\x85", 0, 0x213D79}, /* East Asian ideograph */ {"\x99", 0, 0x213D7A}, /* East Asian ideograph */ {"\x98", 0, 0x213D7B}, /* East Asian ideograph */ {"\x8C", 0, 0x213D7C}, /* East Asian ideograph */ {"\x96", 0, 0x213D7D}, /* East Asian ideograph */ {"\x8D", 0, 0x213E21}, /* East Asian ideograph */ {"\xAB", 0, 0x213E22}, /* East Asian ideograph */ {"\xA0", 0, 0x213E23}, /* East Asian ideograph */ {"\xB1", 0, 0x213E24}, /* East Asian ideograph */ {"\xBD", 0, 0x213E25}, /* East Asian ideograph */ {"\x9D", 0, 0x213E26}, /* East Asian ideograph */ {"\xB5", 0, 0x213E27}, /* East Asian ideograph */ {"\xBF", 0, 0x213E28}, /* East Asian ideograph */ {"\x89", 0, 0x222A57}, /* East Asian ideograph */ {"\x91", 0, 0x222A5F}, /* East Asian ideograph */ {"\x92", 0, 0x222A61}, /* East Asian ideograph */ {"\x90", 0, 0x222A63}, /* East Asian ideograph */ {"\x8E", 0, 0x222A67}, /* East Asian ideograph */ {"\xAD", 0, 0x222A68}, /* East Asian ideograph */ {"\xAE", 0, 0x222A72}, /* East Asian ideograph */ {"\xB8", 0, 0x222A73}, /* East Asian ideograph */ {"\xA1", 0, 0x222A78}, /* East Asian ideograph */ {"\xA4", 0, 0x222A7B}, /* East Asian ideograph */ {"\xAA", 0, 0x222B24}, /* East Asian ideograph */ {"\xB0", 0, 0x273E57}, /* East Asian ideograph */ {"\xBE", 0, 0x273F29}, /* East Asian ideograph */ {"\xA7", 0, 0x273F33}, /* East Asian ideograph */ {"\x86", 0, 0x273F48}, /* East Asian ideograph */ {"\x8F", 0, 0x273F58}, /* East Asian ideograph */ {"\x97", 0, 0x27586D}, /* East Asian ideograph */ {"\xBB", 0, 0x2D4574}, /* East Asian ideograph */ {"\x88", 0, 0x333066}, /* East Asian ideograph */ {"\x9E", 0, 0x343875}, /* East Asian ideograph */ {"\x9C", 0, 0x4B3F4A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page77 = { marc8r_31page77_flat, 0 }; /* PAGE 76 */ struct yaz_iconv_trie_flat marc8r_31page76_flat[] = { {"\x80", 0, 0x213D5C}, /* East Asian ideograph */ {"\x85", 0, 0x213D60}, /* East Asian ideograph */ {"\x88", 0, 0x213D61}, /* East Asian ideograph */ {"\x8B", 0, 0x213D62}, /* East Asian ideograph */ {"\x8A", 0, 0x213D63}, /* East Asian ideograph */ {"\x87", 0, 0x213D64}, /* East Asian ideograph */ {"\x8C", 0, 0x213D65}, /* East Asian ideograph */ {"\x92", 0, 0x213D66}, /* East Asian ideograph */ {"\x91", 0, 0x213D67}, /* East Asian ideograph */ {"\x90", 0, 0x213D68}, /* East Asian ideograph */ {"\x98", 0, 0x213D69}, /* East Asian ideograph */ {"\x97", 0, 0x213D6A}, /* East Asian ideograph */ {"\x99", 0, 0x213D6B}, /* East Asian ideograph */ {"\x9E", 0, 0x213D6C}, /* East Asian ideograph */ {"\xA9", 0, 0x213D6F}, /* East Asian ideograph */ {"\xAA", 0, 0x213D71}, /* East Asian ideograph */ {"\xAC", 0, 0x213D72}, /* East Asian ideograph */ {"\xAE", 0, 0x213D73}, /* East Asian ideograph */ {"\xB9", 0, 0x213D74}, /* East Asian ideograph */ {"\xB7", 0, 0x213D75}, /* East Asian ideograph */ {"\xB5", 0, 0x213D76}, /* East Asian ideograph */ {"\xBD", 0, 0x213D77}, /* East Asian ideograph */ {"\x82", 0, 0x222A23}, /* East Asian ideograph */ {"\x89", 0, 0x222A27}, /* East Asian ideograph */ {"\x94", 0, 0x222A2B}, /* East Asian ideograph */ {"\x9C", 0, 0x222A39}, /* East Asian ideograph */ {"\x9A", 0, 0x222A3D}, /* East Asian ideograph */ {"\xAF", 0, 0x222A46}, /* East Asian ideograph */ {"\xBC", 0, 0x222A50}, /* East Asian ideograph */ {"\x84", 0, 0x273D67}, /* East Asian ideograph */ {"\x81", 0, 0x273D76}, /* East Asian ideograph */ {"\x93", 0, 0x2D3D6C}, /* East Asian ideograph */ {"\xB4", 0, 0x2D3D76}, /* East Asian ideograph */ {"\xA1", 0, 0x2D4E79}, /* East Asian ideograph */ {"\xA7", 0, 0x2D5C3F}, /* East Asian ideograph */ {"\xA8", 0, 0x2D5C40}, /* East Asian ideograph */ {"\xAD", 0, 0x2E7328}, /* East Asian ideograph */ {"\x8F", 0, 0x2F4A4A}, /* East Asian ideograph */ {"\xA0", 0, 0x33314C}, /* East Asian ideograph */ {"\xBA", 0, 0x333251}, /* East Asian ideograph */ {"\xB3", 0, 0x333D75}, /* East Asian ideograph */ {"\x95", 0, 0x4B314C}, /* East Asian ideograph */ {"\x83", 0, 0x4B3D5C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page76 = { marc8r_31page76_flat, 0 }; /* PAGE 75 */ struct yaz_iconv_trie_flat marc8r_31page75_flat[] = { {"\x86", 0, 0x213D4A}, /* East Asian ideograph */ {"\x88", 0, 0x213D4B}, /* East Asian ideograph */ {"\x8C", 0, 0x213D4C}, /* East Asian ideograph */ {"\x8E", 0, 0x213D4D}, /* East Asian ideograph */ {"\x97", 0, 0x213D4E}, /* East Asian ideograph */ {"\x99", 0, 0x213D4F}, /* East Asian ideograph */ {"\x9D", 0, 0x213D50}, /* East Asian ideograph */ {"\xA2", 0, 0x213D51}, /* East Asian ideograph */ {"\xA4", 0, 0x213D52}, /* East Asian ideograph */ {"\xA5", 0, 0x213D53}, /* East Asian ideograph */ {"\xAC", 0, 0x213D54}, /* East Asian ideograph */ {"\xA9", 0, 0x213D55}, /* East Asian ideograph */ {"\xAD", 0, 0x213D57}, /* East Asian ideograph */ {"\xB0", 0, 0x213D58}, /* East Asian ideograph */ {"\xB1", 0, 0x213D59}, /* East Asian ideograph */ {"\xB9", 0, 0x213D5B}, /* East Asian ideograph */ {"\xBF", 0, 0x213D5E}, /* East Asian ideograph */ {"\xBC", 0, 0x213D5F}, /* East Asian ideograph */ {"\xAA", 0, 0x215646}, /* East Asian ideograph */ {"\x80", 0, 0x22295C}, /* East Asian ideograph */ {"\x84", 0, 0x22295F}, /* East Asian ideograph */ {"\x8D", 0, 0x222962}, /* East Asian ideograph */ {"\x90", 0, 0x222968}, /* East Asian ideograph */ {"\x94", 0, 0x222969}, /* East Asian ideograph */ {"\x96", 0, 0x22296A}, /* East Asian ideograph */ {"\x98", 0, 0x22296C}, /* East Asian ideograph */ {"\xA0", 0, 0x222970}, /* East Asian ideograph */ {"\xA1", 0, 0x222971}, /* East Asian ideograph */ {"\xA3", 0, 0x222972}, /* East Asian ideograph */ {"\xA7", 0, 0x222974}, /* East Asian ideograph */ {"\xB2", 0, 0x222978}, /* East Asian ideograph */ {"\xB3", 0, 0x222979}, /* East Asian ideograph */ {"\xB4", 0, 0x22297C}, /* East Asian ideograph */ {"\x93", 0, 0x273746}, /* East Asian ideograph (duplicate simplified) */ {"\xBB", 0, 0x273D74}, /* East Asian ideograph */ {"\x92", 0, 0x27462B}, /* East Asian ideograph */ {"\x95", 0, 0x275D74}, /* East Asian ideograph */ {"\x8A", 0, 0x2D3D48}, /* East Asian ideograph */ {"\x9C", 0, 0x2D3D50}, /* East Asian ideograph */ {"\x91", 0, 0x2E2968}, /* East Asian ideograph */ {"\xB7", 0, 0x333078}, /* East Asian ideograph */ {"\xAB", 0, 0x395F49}, /* East Asian ideograph */ {"\xA6", 0, 0x453D53}, /* East Asian ideograph */ {"\x81", 0, 0x69573B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page75 = { marc8r_31page75_flat, 0 }; /* PAGE 74 */ struct yaz_iconv_trie_flat marc8r_31page74_flat[] = { {"\x84", 0, 0x213D36}, /* East Asian ideograph */ {"\x88", 0, 0x213D37}, /* East Asian ideograph */ {"\x8A", 0, 0x213D38}, /* East Asian ideograph */ {"\x8F", 0, 0x213D39}, /* East Asian ideograph */ {"\x92", 0, 0x213D3A}, /* East Asian ideograph */ {"\x93", 0, 0x213D3B}, /* East Asian ideograph */ {"\x95", 0, 0x213D3C}, /* East Asian ideograph */ {"\x94", 0, 0x213D3D}, /* East Asian ideograph */ {"\x98", 0, 0x213D3E}, /* East Asian ideograph */ {"\x97", 0, 0x213D3F}, /* East Asian ideograph */ {"\x9B", 0, 0x213D40}, /* East Asian ideograph */ {"\x9F", 0, 0x213D41}, /* East Asian ideograph */ {"\xA6", 0, 0x213D42}, /* East Asian ideograph */ {"\xA7", 0, 0x213D43}, /* East Asian ideograph */ {"\xA9", 0, 0x213D44}, /* East Asian ideograph */ {"\xAD", 0, 0x213D45}, /* East Asian ideograph */ {"\xB1", 0, 0x213D46}, /* East Asian ideograph */ {"\xB5", 0, 0x213D47}, /* East Asian ideograph */ {"\xB7", 0, 0x213D48}, /* East Asian ideograph */ {"\xBC", 0, 0x213D49}, /* East Asian ideograph */ {"\x87", 0, 0x222935}, /* East Asian ideograph */ {"\x8B", 0, 0x22293A}, /* East Asian ideograph */ {"\xA8", 0, 0x22294A}, /* East Asian ideograph */ {"\xA2", 0, 0x22294B}, /* East Asian ideograph */ {"\xA3", 0, 0x22294C}, /* East Asian ideograph */ {"\xA4", 0, 0x22294D}, /* East Asian ideograph */ {"\xB3", 0, 0x222951}, /* East Asian ideograph */ {"\xB0", 0, 0x222952}, /* East Asian ideograph */ {"\xB8", 0, 0x222958}, /* East Asian ideograph */ {"\xA0", 0, 0x273D47}, /* East Asian ideograph */ {"\xB9", 0, 0x273D4B}, /* East Asian ideograph */ {"\xA5", 0, 0x273D4C}, /* East Asian ideograph */ {"\xAF", 0, 0x273D4D}, /* East Asian ideograph */ {"\x83", 0, 0x27446D}, /* East Asian ideograph */ {"\x82", 0, 0x274C34}, /* East Asian ideograph */ {"\x80", 0, 0x275E53}, /* East Asian ideograph */ {"\xAA", 0, 0x282951}, /* East Asian ideograph */ {"\x8C", 0, 0x2D3021}, /* East Asian ideograph */ {"\x8D", 0, 0x2D3051}, /* East Asian ideograph */ {"\xBA", 0, 0x333D48}, /* East Asian ideograph */ {"\x90", 0, 0x4B3051}, /* East Asian ideograph */ {"\x89", 0, 0x4B393A}, /* East Asian ideograph */ {"\xBE", 0, 0x4B3D4B}, /* East Asian ideograph */ {"\x81", 0, 0x4B5B5E}, /* East Asian ideograph */ {"\x96", 0, 0x695737}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page74 = { marc8r_31page74_flat, 0 }; /* PAGE 73 */ struct yaz_iconv_trie_dir marc8r_31page73_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {272, 0, 0}, {273, 0, 0}, {274, 0, 0}, {275, 0, 0}, {276, 0, 0}, {277, 0, 0}, {278, 0, 0}, {279, 0, 0}, {280, 0, 0}, {281, 0, 0}, {282, 0, 0}, {283, 0, 0}, {284, 0, 0}, {285, 0, 0}, {286, 0, 0}, {287, 0, 0}, {288, 0, 0}, {289, 0, 0}, {331, 0, 0}, {334, 0, 0}, {335, 0, 0}, {290, 0, 0}, {291, 0, 0}, {292, 0, 0}, {293, 0, 0}, {294, 0, 0}, {295, 0, 0}, {296, 0, 0}, {297, 0, 0}, {298, 0, 0}, {299, 0, 0}, {300, 0, 0}, {301, 0, 0}, {302, 0, 0}, {303, 0, 0}, {304, 0, 0}, {305, 0, 0}, {306, 0, 0}, {307, 0, 0}, {308, 0, 0}, {309, 0, 0}, {310, 0, 0}, {311, 0, 0}, {312, 0, 0}, {313, 0, 0}, {314, 0, 0}, {315, 0, 0}, {316, 0, 0}, {317, 0, 0}, {318, 0, 0}, {336, 0, 0}, {319, 0, 0}, {320, 0, 0}, {321, 0, 0}, {322, 0, 0}, {323, 0, 0}, {324, 0, 0}, {325, 0, 0}, {326, 0, 0}, {327, 0, 0}, {328, 0, 0}, {329, 0, 0}, {271, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page73 = { 0, marc8r_31page73_dir }; /* PAGE 72 */ struct yaz_iconv_trie_flat marc8r_31page72_flat[] = { {"\x82", 0, 0x213C7D}, /* East Asian ideograph */ {"\x81", 0, 0x213C7E}, /* East Asian ideograph */ {"\x8A", 0, 0x213D22}, /* East Asian ideograph */ {"\x89", 0, 0x213D23}, /* East Asian ideograph */ {"\x88", 0, 0x213D24}, /* East Asian ideograph */ {"\x93", 0, 0x213D25}, /* East Asian ideograph */ {"\x96", 0, 0x213D26}, /* East Asian ideograph */ {"\xA2", 0, 0x213D27}, /* East Asian ideograph */ {"\x9A", 0, 0x213D28}, /* East Asian ideograph */ {"\x9D", 0, 0x213D29}, /* East Asian ideograph */ {"\xA3", 0, 0x213D2A}, /* East Asian ideograph (variant of EACC 4B3D2A) */ {"\x9F", 0, 0x213D2B}, /* East Asian ideograph */ {"\xA0", 0, 0x213D2C}, /* East Asian ideograph */ {"\xAC", 0, 0x213D2E}, /* East Asian ideograph */ {"\xB3", 0, 0x213D2F}, /* East Asian ideograph */ {"\xB7", 0, 0x213D30}, /* East Asian ideograph */ {"\xB6", 0, 0x213D32}, /* East Asian ideograph */ {"\xBA", 0, 0x213D33}, /* East Asian ideograph */ {"\xBF", 0, 0x213D34}, /* East Asian ideograph */ {"\x84", 0, 0x22284C}, /* East Asian ideograph */ {"\x8C", 0, 0x222851}, /* East Asian ideograph */ {"\x8B", 0, 0x222855}, /* East Asian ideograph */ {"\x8D", 0, 0x222857}, /* East Asian ideograph */ {"\x92", 0, 0x22285A}, /* East Asian ideograph */ {"\x91", 0, 0x22285B}, /* East Asian ideograph */ {"\x95", 0, 0x22285C}, /* East Asian ideograph */ {"\x94", 0, 0x22285F}, /* East Asian ideograph */ {"\x99", 0, 0x222860}, /* East Asian ideograph */ {"\x8E", 0, 0x222861}, /* East Asian ideograph */ {"\xA1", 0, 0x222868}, /* East Asian ideograph */ {"\xA7", 0, 0x22286D}, /* East Asian ideograph */ {"\xA8", 0, 0x222871}, /* East Asian ideograph */ {"\xAD", 0, 0x22287C}, /* East Asian ideograph */ {"\xB1", 0, 0x222921}, /* East Asian ideograph */ {"\xB4", 0, 0x222923}, /* East Asian ideograph */ {"\xBE", 0, 0x2D3D34}, /* East Asian ideograph */ {"\xB5", 0, 0x2D5B69}, /* East Asian ideograph */ {"\x8F", 0, 0x2E284C}, /* East Asian ideograph */ {"\xA9", 0, 0x334F37}, /* East Asian ideograph */ {"\xB8", 0, 0x335B70}, /* East Asian ideograph */ {"\xBC", 0, 0x39303A}, /* East Asian ideograph */ {"\xBB", 0, 0x453768}, /* East Asian ideograph */ {"\x90", 0, 0x46284C}, /* East Asian ideograph */ {"\x83", 0, 0x4B3D27}, /* East Asian ideograph */ {"\xB0", 0, 0x4B3D2F}, /* East Asian ideograph */ {"\x9B", 0, 0x4C2867}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page72 = { marc8r_31page72_flat, 0 }; /* PAGE 71 */ struct yaz_iconv_trie_flat marc8r_31page71_flat[] = { {"\x8F", 0, 0x213C6C}, /* East Asian ideograph */ {"\x87", 0, 0x213C6D}, /* East Asian ideograph */ {"\x8A", 0, 0x213C6E}, /* East Asian ideograph */ {"\x9A", 0, 0x213C6F}, /* East Asian ideograph */ {"\x97", 0, 0x213C70}, /* East Asian ideograph */ {"\x96", 0, 0x213C71}, /* East Asian ideograph */ {"\x9C", 0, 0x213C72}, /* East Asian ideograph */ {"\x95", 0, 0x213C73}, /* East Asian ideograph */ {"\xA0", 0, 0x213C74}, /* East Asian ideograph */ {"\xA6", 0, 0x213C75}, /* East Asian ideograph */ {"\xAB", 0, 0x213C76}, /* East Asian ideograph */ {"\xA7", 0, 0x213C77}, /* East Asian ideograph */ {"\xAD", 0, 0x213C78}, /* East Asian ideograph */ {"\xB7", 0, 0x213C79}, /* East Asian ideograph */ {"\xB8", 0, 0x213C7A}, /* East Asian ideograph */ {"\xB6", 0, 0x213C7B}, /* East Asian ideograph */ {"\xB5", 0, 0x213C7C}, /* East Asian ideograph */ {"\xBE", 0, 0x213D21}, /* East Asian ideograph */ {"\x80", 0, 0x222777}, /* East Asian ideograph */ {"\x8B", 0, 0x22277E}, /* East Asian ideograph */ {"\xA4", 0, 0x22282F}, /* East Asian ideograph */ {"\xA5", 0, 0x222835}, /* East Asian ideograph */ {"\xAF", 0, 0x222836}, /* East Asian ideograph */ {"\xB9", 0, 0x222842}, /* East Asian ideograph */ {"\xB3", 0, 0x22284B}, /* East Asian ideograph */ {"\x93", 0, 0x273C76}, /* East Asian ideograph */ {"\x9F", 0, 0x273D27}, /* East Asian ideograph */ {"\x99", 0, 0x273D2B}, /* East Asian ideograph */ {"\x9E", 0, 0x273D2D}, /* East Asian ideograph */ {"\x90", 0, 0x273D2E}, /* East Asian ideograph */ {"\x86", 0, 0x273F2E}, /* East Asian ideograph */ {"\x94", 0, 0x273F4A}, /* East Asian ideograph */ {"\x84", 0, 0x27552D}, /* East Asian ideograph */ {"\x91", 0, 0x282868}, /* East Asian ideograph */ {"\xBD", 0, 0x2D3B2A}, /* East Asian ideograph */ {"\xBF", 0, 0x2D3D2B}, /* East Asian ideograph */ {"\x85", 0, 0x2D6260}, /* East Asian ideograph */ {"\x83", 0, 0x333D2A}, /* East Asian ideograph */ {"\x81", 0, 0x333D2F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page71 = { marc8r_31page71_flat, 0 }; /* PAGE 70 */ struct yaz_iconv_trie_flat marc8r_31page70_flat[] = { {"\x85", 0, 0x213C56}, /* East Asian ideograph */ {"\x80", 0, 0x213C58}, /* East Asian ideograph */ {"\x8C", 0, 0x213C59}, /* East Asian ideograph */ {"\x9B", 0, 0x213C5A}, /* East Asian ideograph */ {"\x94", 0, 0x213C5B}, /* East Asian ideograph */ {"\x97", 0, 0x213C5C}, /* East Asian ideograph */ {"\x95", 0, 0x213C5D}, /* East Asian ideograph */ {"\xA3", 0, 0x213C5E}, /* East Asian ideograph */ {"\xA2", 0, 0x213C5F}, /* East Asian ideograph */ {"\x9F", 0, 0x213C60}, /* East Asian ideograph */ {"\xAB", 0, 0x213C61}, /* East Asian ideograph */ {"\xB3", 0, 0x213C63}, /* East Asian ideograph */ {"\xB4", 0, 0x213C65}, /* East Asian ideograph */ {"\xBB", 0, 0x213C68}, /* East Asian ideograph */ {"\xBC", 0, 0x213C69}, /* East Asian ideograph */ {"\xBD", 0, 0x213C6A}, /* East Asian ideograph */ {"\xBE", 0, 0x213C6B}, /* East Asian ideograph */ {"\x84", 0, 0x222735}, /* East Asian ideograph */ {"\x83", 0, 0x222736}, /* East Asian ideograph */ {"\x82", 0, 0x222739}, /* East Asian ideograph */ {"\x8E", 0, 0x22273F}, /* East Asian ideograph */ {"\x98", 0, 0x222747}, /* East Asian ideograph */ {"\x88", 0, 0x222748}, /* East Asian ideograph */ {"\x9E", 0, 0x222757}, /* East Asian ideograph */ {"\xA1", 0, 0x222758}, /* East Asian ideograph */ {"\xA8", 0, 0x22275D}, /* East Asian ideograph */ {"\xAC", 0, 0x22275F}, /* East Asian ideograph */ {"\xAA", 0, 0x222760}, /* East Asian ideograph */ {"\xAE", 0, 0x222763}, /* East Asian ideograph */ {"\xAD", 0, 0x222764}, /* East Asian ideograph */ {"\xB0", 0, 0x222765}, /* East Asian ideograph */ {"\xB5", 0, 0x22276D}, /* East Asian ideograph */ {"\xB6", 0, 0x273032}, /* East Asian ideograph */ {"\xB2", 0, 0x27304C}, /* East Asian ideograph */ {"\xBF", 0, 0x273D2A}, /* East Asian ideograph */ {"\xB8", 0, 0x2D3177}, /* East Asian ideograph */ {"\x87", 0, 0x2D3C61}, /* East Asian ideograph */ {"\xB9", 0, 0x3F304C}, /* East Asian ideograph */ {"\xBA", 0, 0x456260}, /* East Asian ideograph */ {"\xA4", 0, 0x4B3C5E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page70 = { marc8r_31page70_flat, 0 }; /* PAGE 69 */ struct yaz_iconv_trie_flat marc8r_31page69_flat[] = { {"\x82", 0, 0x213C44}, /* East Asian ideograph */ {"\x86", 0, 0x213C46}, /* East Asian ideograph */ {"\x9A", 0, 0x213C49}, /* East Asian ideograph */ {"\x96", 0, 0x213C4A}, /* East Asian ideograph */ {"\x95", 0, 0x213C4B}, /* East Asian ideograph */ {"\x9B", 0, 0x213C4C}, /* East Asian ideograph */ {"\x91", 0, 0x213C4D}, /* East Asian ideograph */ {"\x9D", 0, 0x213C4E}, /* East Asian ideograph */ {"\xA5", 0, 0x213C4F}, /* East Asian ideograph */ {"\xAB", 0, 0x213C51}, /* East Asian ideograph */ {"\xB3", 0, 0x213C52}, /* East Asian ideograph */ {"\xB6", 0, 0x213C53}, /* East Asian ideograph */ {"\xB8", 0, 0x213C54}, /* East Asian ideograph */ {"\xB7", 0, 0x213C55}, /* East Asian ideograph */ {"\xBD", 0, 0x213C57}, /* East Asian ideograph */ {"\x80", 0, 0x222662}, /* East Asian ideograph */ {"\x94", 0, 0x222672}, /* East Asian ideograph */ {"\x97", 0, 0x222673}, /* East Asian ideograph */ {"\x99", 0, 0x222676}, /* East Asian ideograph */ {"\x92", 0, 0x222677}, /* East Asian ideograph */ {"\x9F", 0, 0x222678}, /* East Asian ideograph */ {"\xA3", 0, 0x22267A}, /* East Asian ideograph */ {"\xA1", 0, 0x22267B}, /* East Asian ideograph */ {"\xA2", 0, 0x222722}, /* East Asian ideograph */ {"\xA8", 0, 0x222724}, /* East Asian ideograph */ {"\x83", 0, 0x273138}, /* East Asian ideograph */ {"\x85", 0, 0x273C4F}, /* East Asian ideograph */ {"\x88", 0, 0x273C51}, /* East Asian ideograph */ {"\x90", 0, 0x273C52}, /* East Asian ideograph */ {"\xA6", 0, 0x273C53}, /* East Asian ideograph */ {"\xA7", 0, 0x273C58}, /* East Asian ideograph */ {"\xBC", 0, 0x273C5C}, /* East Asian ideograph */ {"\x81", 0, 0x273C5E}, /* East Asian ideograph */ {"\x9C", 0, 0x273C60}, /* East Asian ideograph */ {"\xAE", 0, 0x273C61}, /* East Asian ideograph */ {"\x8C", 0, 0x274F36}, /* East Asian ideograph */ {"\x98", 0, 0x275048}, /* East Asian ideograph */ {"\xAD", 0, 0x27555D}, /* East Asian ideograph */ {"\x8F", 0, 0x282736}, /* East Asian ideograph */ {"\xBB", 0, 0x282747}, /* East Asian ideograph */ {"\xB1", 0, 0x28275F}, /* East Asian ideograph */ {"\x8B", 0, 0x2D5124}, /* East Asian ideograph */ {"\xAC", 0, 0x2D5760}, /* East Asian ideograph */ {"\xB2", 0, 0x2F3B63}, /* East Asian ideograph */ {"\xB0", 0, 0x3F462B}, /* East Asian ideograph */ {"\xAF", 0, 0x4B3C53}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page69 = { marc8r_31page69_flat, 0 }; /* PAGE 68 */ struct yaz_iconv_trie_flat marc8r_31page68_flat[] = { {"\x8D", 0, 0x213C30}, /* East Asian ideograph */ {"\x92", 0, 0x213C31}, /* East Asian ideograph */ {"\x94", 0, 0x213C32}, /* East Asian ideograph */ {"\x96", 0, 0x213C33}, /* East Asian ideograph */ {"\x9D", 0, 0x213C34}, /* East Asian ideograph */ {"\x9E", 0, 0x213C35}, /* East Asian ideograph */ {"\xA2", 0, 0x213C36}, /* East Asian ideograph */ {"\xA5", 0, 0x213C37}, /* East Asian ideograph */ {"\xA8", 0, 0x213C38}, /* East Asian ideograph */ {"\xA7", 0, 0x213C39}, /* East Asian ideograph */ {"\xA6", 0, 0x213C3A}, /* East Asian ideograph */ {"\xAB", 0, 0x213C3B}, /* East Asian ideograph */ {"\xAE", 0, 0x213C3C}, /* East Asian ideograph */ {"\xB1", 0, 0x213C3D}, /* East Asian ideograph */ {"\xB2", 0, 0x213C3E}, /* East Asian ideograph */ {"\xB3", 0, 0x213C3F}, /* East Asian ideograph */ {"\xB4", 0, 0x213C40}, /* East Asian ideograph */ {"\xB7", 0, 0x213C41}, /* East Asian ideograph */ {"\xBD", 0, 0x213C42}, /* East Asian ideograph */ {"\xBE", 0, 0x213C43}, /* East Asian ideograph */ {"\xA1", 0, 0x215B69}, /* East Asian ideograph */ {"\x83", 0, 0x22263E}, /* East Asian ideograph */ {"\x87", 0, 0x222644}, /* East Asian ideograph */ {"\x89", 0, 0x222646}, /* East Asian ideograph */ {"\x8B", 0, 0x222647}, /* East Asian ideograph */ {"\x98", 0, 0x22264E}, /* East Asian ideograph */ {"\x9B", 0, 0x222650}, /* East Asian ideograph */ {"\x9C", 0, 0x222652}, /* East Asian ideograph */ {"\xA4", 0, 0x222656}, /* East Asian ideograph */ {"\x85", 0, 0x273C32}, /* East Asian ideograph */ {"\xA9", 0, 0x276023}, /* East Asian ideograph */ {"\xAF", 0, 0x282659}, /* East Asian ideograph */ {"\xA3", 0, 0x2D3C36}, /* East Asian ideograph */ {"\xB5", 0, 0x4B346B}, /* East Asian ideograph */ {"\x93", 0, 0x4B3C32}, /* East Asian ideograph */ {"\x8C", 0, 0x4B3C33}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page68 = { marc8r_31page68_flat, 0 }; /* PAGE 67 */ struct yaz_iconv_trie_flat marc8r_31page67_flat[] = { {"\x84", 0, 0x213C2A}, /* East Asian ideograph */ {"\x87", 0, 0x213C2B}, /* East Asian ideograph */ {"\x9D", 0, 0x213C2C}, /* East Asian ideograph */ {"\xBC", 0, 0x213C2D}, /* East Asian ideograph */ {"\xBD", 0, 0x213C2E}, /* East Asian ideograph */ {"\xBA", 0, 0x213C2F}, /* East Asian ideograph (variant of EACC 4B3C2F) */ {"\x82", 0, 0x22254D}, /* East Asian ideograph */ {"\x8E", 0, 0x222551}, /* East Asian ideograph */ {"\x81", 0, 0x22255A}, /* East Asian ideograph */ {"\x92", 0, 0x222566}, /* East Asian ideograph */ {"\x99", 0, 0x222568}, /* East Asian ideograph */ {"\x97", 0, 0x222569}, /* East Asian ideograph */ {"\xA2", 0, 0x22256A}, /* East Asian ideograph */ {"\xA1", 0, 0x222573}, /* East Asian ideograph */ {"\x93", 0, 0x222575}, /* East Asian ideograph */ {"\xA0", 0, 0x222577}, /* East Asian ideograph */ {"\x94", 0, 0x22257B}, /* East Asian ideograph */ {"\xAC", 0, 0x22257E}, /* East Asian ideograph */ {"\xA7", 0, 0x222626}, /* East Asian ideograph */ {"\xB0", 0, 0x22262A}, /* East Asian ideograph */ {"\xB4", 0, 0x22262E}, /* East Asian ideograph */ {"\xAE", 0, 0x22262F}, /* East Asian ideograph */ {"\xB6", 0, 0x222630}, /* East Asian ideograph */ {"\xB8", 0, 0x222632}, /* East Asian ideograph */ {"\xBF", 0, 0x222634}, /* East Asian ideograph */ {"\xB7", 0, 0x222636}, /* East Asian ideograph */ {"\x8B", 0, 0x2D3B79}, /* East Asian ideograph */ {"\x8C", 0, 0x4B3B79}, /* East Asian ideograph */ {"\x90", 0, 0x695657}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page67 = { marc8r_31page67_flat, 0 }; /* PAGE 66 */ struct yaz_iconv_trie_flat marc8r_31page66_flat[] = { {"\x8C", 0, 0x213C27}, /* East Asian ideograph */ {"\x90", 0, 0x213C28}, /* East Asian ideograph */ {"\xA9", 0, 0x213C29}, /* East Asian ideograph */ {"\x8B", 0, 0x222474}, /* East Asian ideograph */ {"\x97", 0, 0x222476}, /* East Asian ideograph */ {"\x92", 0, 0x222526}, /* East Asian ideograph */ {"\x8E", 0, 0x222528}, /* East Asian ideograph */ {"\x99", 0, 0x22252C}, /* East Asian ideograph */ {"\x87", 0, 0x22252D}, /* East Asian ideograph */ {"\x82", 0, 0x222531}, /* East Asian ideograph */ {"\xB4", 0, 0x222534}, /* East Asian ideograph */ {"\xAF", 0, 0x222539}, /* East Asian ideograph */ {"\xAB", 0, 0x22253A}, /* East Asian ideograph */ {"\xB5", 0, 0x22253F}, /* East Asian ideograph */ {"\x8A", 0, 0x222544}, /* East Asian ideograph */ {"\xAC", 0, 0x222549}, /* East Asian ideograph */ {"\xA2", 0, 0x22254A}, /* East Asian ideograph */ {"\xB9", 0, 0x222550}, /* East Asian ideograph */ {"\xBE", 0, 0x222560}, /* East Asian ideograph */ {"\x9D", 0, 0x28255A}, /* East Asian ideograph */ {"\x98", 0, 0x282632}, /* East Asian ideograph */ {"\x9C", 0, 0x4B3C21}, /* East Asian ideograph */ {"\x9B", 0, 0x4C2532}, /* East Asian ideograph */ {"\xB3", 0, 0x4C2539}, /* East Asian ideograph */ {"\xB6", 0, 0x69564E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page66 = { marc8r_31page66_flat, 0 }; /* PAGE 65 */ struct yaz_iconv_trie_flat marc8r_31page65_flat[] = { {"\x81", 0, 0x213B73}, /* East Asian ideograph */ {"\x87", 0, 0x213B7B}, /* East Asian ideograph */ {"\x86", 0, 0x213B7C}, /* East Asian ideograph */ {"\x9B", 0, 0x213B7D}, /* East Asian ideograph */ {"\x96", 0, 0x213B7E}, /* East Asian ideograph */ {"\x8E", 0, 0x213C21}, /* East Asian ideograph */ {"\x91", 0, 0x213C22}, /* East Asian ideograph */ {"\xA2", 0, 0x213C23}, /* East Asian ideograph */ {"\xA9", 0, 0x213C24}, /* East Asian ideograph */ {"\x94", 0, 0x213C25}, /* East Asian ideograph */ {"\x99", 0, 0x213C26}, /* East Asian ideograph */ {"\x80", 0, 0x222434}, /* East Asian ideograph */ {"\x9E", 0, 0x222449}, /* East Asian ideograph */ {"\x92", 0, 0x22244A}, /* East Asian ideograph */ {"\x9A", 0, 0x222450}, /* East Asian ideograph */ {"\x8C", 0, 0x222452}, /* East Asian ideograph */ {"\xA0", 0, 0x222453}, /* East Asian ideograph */ {"\xA1", 0, 0x222454}, /* East Asian ideograph */ {"\xA7", 0, 0x222457}, /* East Asian ideograph */ {"\x8D", 0, 0x222458}, /* East Asian ideograph */ {"\xA6", 0, 0x22245A}, /* East Asian ideograph */ {"\xAE", 0, 0x22245D}, /* East Asian ideograph */ {"\xA4", 0, 0x222469}, /* East Asian ideograph */ {"\xB6", 0, 0x222471}, /* East Asian ideograph */ {"\xBE", 0, 0x222472}, /* East Asian ideograph */ {"\xB4", 0, 0x222477}, /* East Asian ideograph */ {"\xBF", 0, 0x222525}, /* East Asian ideograph */ {"\xBD", 0, 0x222527}, /* East Asian ideograph */ {"\xB2", 0, 0x22252F}, /* East Asian ideograph */ {"\xAD", 0, 0x273C2A}, /* East Asian ideograph */ {"\x83", 0, 0x282458}, /* East Asian ideograph */ {"\x82", 0, 0x282569}, /* East Asian ideograph */ {"\x97", 0, 0x2D3B6E}, /* East Asian ideograph */ {"\x88", 0, 0x2D3B7B}, /* East Asian ideograph */ {"\x90", 0, 0x2D3C22}, /* East Asian ideograph */ {"\x98", 0, 0x2D3C26}, /* East Asian ideograph */ {"\x9F", 0, 0x2E257B}, /* East Asian ideograph */ {"\x8B", 0, 0x39553C}, /* East Asian ideograph */ {"\x95", 0, 0x4B3B7E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page65 = { marc8r_31page65_flat, 0 }; /* PAGE 64 */ struct yaz_iconv_trie_flat marc8r_31page64_flat[] = { {"\x99", 0, 0x213B72}, /* East Asian ideograph */ {"\xBD", 0, 0x213B74}, /* East Asian ideograph */ {"\xAD", 0, 0x213B75}, /* East Asian ideograph */ {"\xBB", 0, 0x213B76}, /* East Asian ideograph */ {"\xA8", 0, 0x213B77}, /* East Asian ideograph */ {"\xB0", 0, 0x213B78}, /* East Asian ideograph */ {"\xB6", 0, 0x213B79}, /* East Asian ideograph */ {"\xAA", 0, 0x213B7A}, /* East Asian ideograph */ {"\x81", 0, 0x22236D}, /* East Asian ideograph */ {"\x95", 0, 0x222370}, /* East Asian ideograph */ {"\x93", 0, 0x222378}, /* East Asian ideograph */ {"\xA0", 0, 0x222426}, /* East Asian ideograph */ {"\x92", 0, 0x222428}, /* East Asian ideograph */ {"\x9D", 0, 0x222429}, /* East Asian ideograph */ {"\x8B", 0, 0x22242B}, /* East Asian ideograph */ {"\x87", 0, 0x222430}, /* East Asian ideograph */ {"\x9C", 0, 0x222431}, /* East Asian ideograph */ {"\xBF", 0, 0x22243B}, /* East Asian ideograph */ {"\xAB", 0, 0x22243C}, /* East Asian ideograph */ {"\xB4", 0, 0x222441}, /* East Asian ideograph */ {"\xB1", 0, 0x222446}, /* East Asian ideograph */ {"\xA1", 0, 0x273B74}, /* East Asian ideograph */ {"\xA6", 0, 0x273C31}, /* East Asian ideograph */ {"\xA4", 0, 0x282577}, /* East Asian ideograph */ {"\x84", 0, 0x282626}, /* East Asian ideograph */ {"\xA9", 0, 0x2D3B77}, /* East Asian ideograph */ {"\xAF", 0, 0x2D3B78}, /* East Asian ideograph */ {"\xA5", 0, 0x4B3C23}, /* East Asian ideograph */ {"\xBA", 0, 0x4B4E39}, /* East Asian ideograph */ {"\x85", 0, 0x695632}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page64 = { marc8r_31page64_flat, 0 }; /* PAGE 63 */ struct yaz_iconv_trie_flat marc8r_31page63_flat[] = { {"\x90", 0, 0x213B67}, /* East Asian ideograph */ {"\x8C", 0, 0x213B68}, /* East Asian ideograph */ {"\x91", 0, 0x213B69}, /* East Asian ideograph */ {"\x94", 0, 0x213B6A}, /* East Asian ideograph */ {"\xB7", 0, 0x213B6B}, /* East Asian ideograph */ {"\xB8", 0, 0x213B6C}, /* East Asian ideograph */ {"\xA1", 0, 0x213B6E}, /* East Asian ideograph */ {"\xAB", 0, 0x213B6F}, /* East Asian ideograph */ {"\xB1", 0, 0x213B71}, /* East Asian ideograph */ {"\x8F", 0, 0x222346}, /* East Asian ideograph */ {"\x88", 0, 0x222349}, /* East Asian ideograph */ {"\x8D", 0, 0x22234B}, /* East Asian ideograph */ {"\x99", 0, 0x22234D}, /* East Asian ideograph */ {"\xA6", 0, 0x222355}, /* East Asian ideograph */ {"\xA0", 0, 0x222357}, /* East Asian ideograph */ {"\xA2", 0, 0x22235C}, /* East Asian ideograph */ {"\xB5", 0, 0x222360}, /* East Asian ideograph */ {"\xA7", 0, 0x222361}, /* East Asian ideograph */ {"\xA8", 0, 0x222366}, /* East Asian ideograph */ {"\xAC", 0, 0x222367}, /* East Asian ideograph */ {"\xA3", 0, 0x22236B}, /* East Asian ideograph */ {"\xB6", 0, 0x22236C}, /* East Asian ideograph */ {"\xAD", 0, 0x22236F}, /* East Asian ideograph */ {"\x9B", 0, 0x273B79}, /* East Asian ideograph */ {"\x9A", 0, 0x273C28}, /* East Asian ideograph */ {"\x96", 0, 0x273C2B}, /* East Asian ideograph */ {"\xB3", 0, 0x273C2E}, /* East Asian ideograph */ {"\xA9", 0, 0x273C33}, /* East Asian ideograph */ {"\x81", 0, 0x274629}, /* East Asian ideograph */ {"\x82", 0, 0x275954}, /* East Asian ideograph */ {"\x98", 0, 0x282441}, /* East Asian ideograph */ {"\xBF", 0, 0x282647}, /* East Asian ideograph */ {"\xBD", 0, 0x342453}, /* East Asian ideograph */ {"\x97", 0, 0x393B6E}, /* East Asian ideograph */ {"\xBB", 0, 0x69562E}, /* East Asian ideograph */ {"\xBC", 0, 0x695630}, /* East Asian ideograph */ {"\xBE", 0, 0x695633}, /* East Asian ideograph */ {"\x9C", 0, 0x706131}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page63 = { marc8r_31page63_flat, 0 }; /* PAGE 62 */ struct yaz_iconv_trie_flat marc8r_31page62_flat[] = { {"\x80", 0, 0x213B50}, /* East Asian ideograph */ {"\x81", 0, 0x213B51}, /* East Asian ideograph */ {"\x86", 0, 0x213B54}, /* East Asian ideograph */ {"\x85", 0, 0x213B55}, /* East Asian ideograph */ {"\x88", 0, 0x213B56}, /* East Asian ideograph */ {"\x8E", 0, 0x213B57}, /* East Asian ideograph */ {"\x8B", 0, 0x213B58}, /* East Asian ideograph */ {"\x8D", 0, 0x213B59}, /* East Asian ideograph */ {"\x95", 0, 0x213B5A}, /* East Asian ideograph */ {"\x91", 0, 0x213B5B}, /* East Asian ideograph */ {"\x90", 0, 0x213B5C}, /* East Asian ideograph */ {"\x9B", 0, 0x213B5D}, /* East Asian ideograph */ {"\xA0", 0, 0x213B5E}, /* East Asian ideograph */ {"\x9C", 0, 0x213B5F}, /* East Asian ideograph */ {"\xA2", 0, 0x213B60}, /* East Asian ideograph */ {"\xA4", 0, 0x213B61}, /* East Asian ideograph (variant of EACC 4B3B61) */ {"\xA5", 0, 0x213B62}, /* East Asian ideograph */ {"\xAC", 0, 0x213B63}, /* East Asian ideograph */ {"\xAF", 0, 0x213B64}, /* East Asian ideograph */ {"\xB1", 0, 0x213B65}, /* East Asian ideograph */ {"\xB9", 0, 0x213B66}, /* East Asian ideograph */ {"\x98", 0, 0x217E27}, /* East Asian ideograph */ {"\x97", 0, 0x222235}, /* East Asian ideograph */ {"\x84", 0, 0x222265}, /* East Asian ideograph */ {"\x89", 0, 0x222267}, /* East Asian ideograph */ {"\x99", 0, 0x222279}, /* East Asian ideograph */ {"\x9D", 0, 0x22227B}, /* East Asian ideograph */ {"\x9F", 0, 0x22227C}, /* East Asian ideograph */ {"\xA3", 0, 0x222323}, /* East Asian ideograph */ {"\xA7", 0, 0x222329}, /* East Asian ideograph */ {"\xA8", 0, 0x22232B}, /* East Asian ideograph */ {"\xAD", 0, 0x222330}, /* East Asian ideograph */ {"\xAE", 0, 0x222331}, /* East Asian ideograph */ {"\xB4", 0, 0x222337}, /* East Asian ideograph */ {"\xB3", 0, 0x222339}, /* East Asian ideograph */ {"\xB7", 0, 0x22233B}, /* East Asian ideograph */ {"\xBA", 0, 0x22233C}, /* East Asian ideograph */ {"\xBC", 0, 0x222340}, /* East Asian ideograph */ {"\xA1", 0, 0x273B60}, /* East Asian ideograph */ {"\x82", 0, 0x273B61}, /* East Asian ideograph */ {"\x9E", 0, 0x273B63}, /* East Asian ideograph */ {"\xBF", 0, 0x273C2D}, /* East Asian ideograph */ {"\x8F", 0, 0x27415A}, /* East Asian ideograph */ {"\xA6", 0, 0x28232B}, /* East Asian ideograph */ {"\x8A", 0, 0x2D3B54}, /* East Asian ideograph */ {"\xA9", 0, 0x4B5A7E}, /* East Asian ideograph */ {"\x93", 0, 0x4C2330}, /* East Asian ideograph */ {"\xB6", 0, 0x4C233F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page62 = { marc8r_31page62_flat, 0 }; /* PAGE 61 */ struct yaz_iconv_trie_flat marc8r_31page61_flat[] = { {"\x86", 0, 0x213B21}, /* East Asian ideograph */ {"\x87", 0, 0x213B22}, /* East Asian ideograph */ {"\x85", 0, 0x213B23}, /* East Asian ideograph */ {"\x84", 0, 0x213B24}, /* East Asian ideograph */ {"\x82", 0, 0x213B25}, /* East Asian ideograph */ {"\x8C", 0, 0x213B27}, /* East Asian ideograph */ {"\x92", 0, 0x213B28}, /* East Asian ideograph */ {"\x90", 0, 0x213B29}, /* East Asian ideograph */ {"\x93", 0, 0x213B2A}, /* East Asian ideograph */ {"\xA1", 0, 0x213B2B}, /* East Asian ideograph */ {"\xA5", 0, 0x213B2C}, /* East Asian ideograph */ {"\xA8", 0, 0x213B2D}, /* East Asian ideograph */ {"\xA2", 0, 0x213B2E}, /* East Asian ideograph */ {"\xA4", 0, 0x213B2F}, /* East Asian ideograph */ {"\x9E", 0, 0x213B30}, /* East Asian ideograph */ {"\xA6", 0, 0x213B31}, /* East Asian ideograph */ {"\xA7", 0, 0x213B32}, /* East Asian ideograph */ {"\x9F", 0, 0x213B33}, /* East Asian ideograph */ {"\xAE", 0, 0x213B34}, /* East Asian ideograph */ {"\xAC", 0, 0x213B35}, /* East Asian ideograph */ {"\xA9", 0, 0x213B36}, /* East Asian ideograph */ {"\xAB", 0, 0x213B37}, /* East Asian ideograph */ {"\xB5", 0, 0x213B38}, /* East Asian ideograph */ {"\xB6", 0, 0x213B39}, /* East Asian ideograph */ {"\xB8", 0, 0x213B3A}, /* East Asian ideograph */ {"\xBA", 0, 0x213B3B}, /* East Asian ideograph */ {"\x81", 0, 0x217E59}, /* East Asian ideograph */ {"\x89", 0, 0x217E60}, /* East Asian ideograph */ {"\x94", 0, 0x217E68}, /* East Asian ideograph */ {"\x83", 0, 0x217E6A}, /* East Asian ideograph */ {"\x96", 0, 0x217E6E}, /* East Asian ideograph */ {"\x97", 0, 0x217E75}, /* East Asian ideograph */ {"\xA0", 0, 0x217E79}, /* East Asian ideograph */ {"\xAA", 0, 0x217E7E}, /* East Asian ideograph */ {"\xB0", 0, 0x222224}, /* East Asian ideograph */ {"\xAF", 0, 0x222225}, /* East Asian ideograph */ {"\xBF", 0, 0x273877}, /* East Asian ideograph */ {"\x9D", 0, 0x273B2E}, /* East Asian ideograph */ {"\xBB", 0, 0x273B42}, /* East Asian ideograph */ {"\xB9", 0, 0x273B43}, /* East Asian ideograph */ {"\xBC", 0, 0x273B44}, /* East Asian ideograph */ {"\xB3", 0, 0x393B39}, /* East Asian ideograph */ {"\x98", 0, 0x395230}, /* East Asian ideograph */ {"\xBE", 0, 0x4B3B43}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page61 = { marc8r_31page61_flat, 0 }; /* PAGE 60 */ struct yaz_iconv_trie_flat marc8r_31page60_flat[] = { {"\x87", 0, 0x213A65}, /* East Asian ideograph */ {"\x88", 0, 0x213A66}, /* East Asian ideograph */ {"\x89", 0, 0x213A67}, /* East Asian ideograph */ {"\x85", 0, 0x213A68}, /* East Asian ideograph */ {"\x8C", 0, 0x213A69}, /* East Asian ideograph */ {"\x8B", 0, 0x213A6A}, /* East Asian ideograph */ {"\x8F", 0, 0x213A6B}, /* East Asian ideograph */ {"\x97", 0, 0x213A6C}, /* East Asian ideograph */ {"\x9A", 0, 0x213A6D}, /* East Asian ideograph */ {"\x9C", 0, 0x213A6E}, /* East Asian ideograph */ {"\x98", 0, 0x213A6F}, /* East Asian ideograph */ {"\x99", 0, 0x213A70}, /* East Asian ideograph */ {"\x9B", 0, 0x213A71}, /* East Asian ideograph */ {"\xA5", 0, 0x213A72}, /* East Asian ideograph */ {"\xA3", 0, 0x213A73}, /* East Asian ideograph */ {"\xA6", 0, 0x213A74}, /* East Asian ideograph */ {"\xA4", 0, 0x213A75}, /* East Asian ideograph */ {"\xA2", 0, 0x213A76}, /* East Asian ideograph */ {"\xB0", 0, 0x213A77}, /* East Asian ideograph */ {"\xB8", 0, 0x213A78}, /* East Asian ideograph */ {"\xB5", 0, 0x213A7A}, /* East Asian ideograph */ {"\xB4", 0, 0x213A7B}, /* East Asian ideograph */ {"\xAE", 0, 0x213A7C}, /* East Asian ideograph */ {"\xB9", 0, 0x213A7D}, /* East Asian ideograph */ {"\xB3", 0, 0x213A7E}, /* East Asian ideograph */ {"\xBF", 0, 0x213B26}, /* East Asian ideograph */ {"\x80", 0, 0x217E32}, /* East Asian ideograph */ {"\x84", 0, 0x217E34}, /* East Asian ideograph */ {"\x82", 0, 0x217E35}, /* East Asian ideograph */ {"\x95", 0, 0x217E40}, /* East Asian ideograph */ {"\x93", 0, 0x217E43}, /* East Asian ideograph */ {"\xAC", 0, 0x217E49}, /* East Asian ideograph */ {"\xA7", 0, 0x217E52}, /* East Asian ideograph */ {"\xB7", 0, 0x217E55}, /* East Asian ideograph */ {"\xB6", 0, 0x27323E}, /* East Asian ideograph */ {"\x9E", 0, 0x273B31}, /* East Asian ideograph */ {"\x81", 0, 0x273B32}, /* East Asian ideograph */ {"\xBD", 0, 0x273B35}, /* East Asian ideograph */ {"\xA1", 0, 0x273B36}, /* East Asian ideograph */ {"\xA0", 0, 0x273B38}, /* East Asian ideograph */ {"\x9D", 0, 0x273B39}, /* East Asian ideograph */ {"\xAA", 0, 0x273F3E}, /* East Asian ideograph */ {"\x83", 0, 0x274A53}, /* East Asian ideograph */ {"\xBE", 0, 0x275A29}, /* East Asian ideograph */ {"\x8D", 0, 0x2D5323}, /* East Asian ideograph */ {"\x9F", 0, 0x4B3B31}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page60 = { marc8r_31page60_flat, 0 }; /* PAGE 59 */ struct yaz_iconv_trie_flat marc8r_31page59_flat[] = { {"\x80", 0, 0x213A4C}, /* East Asian ideograph */ {"\x90", 0, 0x213A4D}, /* East Asian ideograph */ {"\x91", 0, 0x213A4E}, /* East Asian ideograph */ {"\x93", 0, 0x213A4F}, /* East Asian ideograph */ {"\x94", 0, 0x213A50}, /* East Asian ideograph */ {"\x95", 0, 0x213A51}, /* East Asian ideograph */ {"\x97", 0, 0x213A52}, /* East Asian ideograph */ {"\x98", 0, 0x213A53}, /* East Asian ideograph */ {"\x9D", 0, 0x213A54}, /* East Asian ideograph */ {"\x9C", 0, 0x213A55}, /* East Asian ideograph */ {"\x9F", 0, 0x213A57}, /* East Asian ideograph */ {"\xA3", 0, 0x213A58}, /* East Asian ideograph */ {"\xA4", 0, 0x213A59}, /* East Asian ideograph */ {"\xA9", 0, 0x213A5A}, /* East Asian ideograph */ {"\xAB", 0, 0x213A5B}, /* East Asian ideograph */ {"\xB0", 0, 0x213A5C}, /* East Asian ideograph */ {"\xB3", 0, 0x213A5D}, /* East Asian ideograph */ {"\xB1", 0, 0x213A5E}, /* East Asian ideograph */ {"\xB5", 0, 0x213A5F}, /* East Asian ideograph */ {"\xB8", 0, 0x213A60}, /* East Asian ideograph */ {"\xBA", 0, 0x213A61}, /* East Asian ideograph */ {"\xBD", 0, 0x213A62}, /* East Asian ideograph */ {"\xBF", 0, 0x213A63}, /* East Asian ideograph */ {"\x85", 0, 0x217D6E}, /* East Asian ideograph */ {"\x8C", 0, 0x217D74}, /* East Asian ideograph */ {"\x8B", 0, 0x217D76}, /* East Asian ideograph */ {"\x96", 0, 0x217D7C}, /* East Asian ideograph */ {"\x9B", 0, 0x217E21}, /* East Asian ideograph */ {"\xA2", 0, 0x217E23}, /* East Asian ideograph */ {"\xA5", 0, 0x217E24}, /* East Asian ideograph */ {"\xA7", 0, 0x217E25}, /* East Asian ideograph */ {"\xAC", 0, 0x217E28}, /* East Asian ideograph */ {"\xAE", 0, 0x217E2A}, /* East Asian ideograph */ {"\xBB", 0, 0x217E30}, /* East Asian ideograph */ {"\xBC", 0, 0x217E31}, /* East Asian ideograph */ {"\x99", 0, 0x273A5B}, /* East Asian ideograph */ {"\x9A", 0, 0x273A5F}, /* East Asian ideograph */ {"\xA6", 0, 0x273A60}, /* East Asian ideograph */ {"\xAA", 0, 0x273A63}, /* East Asian ideograph */ {"\x83", 0, 0x2D3974}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page59 = { marc8r_31page59_flat, 0 }; /* PAGE 58 */ struct yaz_iconv_trie_flat marc8r_31page58_flat[] = { {"\x89", 0, 0x213A42}, /* East Asian ideograph */ {"\x8B", 0, 0x213A43}, /* East Asian ideograph */ {"\x8C", 0, 0x213A44}, /* East Asian ideograph */ {"\xB4", 0, 0x213A46}, /* East Asian ideograph */ {"\x9D", 0, 0x213A47}, /* East Asian ideograph */ {"\xAA", 0, 0x213A48}, /* East Asian ideograph */ {"\xA4", 0, 0x213A49}, /* East Asian ideograph */ {"\xB0", 0, 0x213A4A}, /* East Asian ideograph */ {"\xB8", 0, 0x213A4B}, /* East Asian ideograph */ {"\x88", 0, 0x217D2B}, /* East Asian ideograph */ {"\x8D", 0, 0x217D2E}, /* East Asian ideograph */ {"\x83", 0, 0x217D38}, /* East Asian ideograph */ {"\x97", 0, 0x217D3D}, /* East Asian ideograph */ {"\x96", 0, 0x217D3E}, /* East Asian ideograph */ {"\x99", 0, 0x217D40}, /* East Asian ideograph */ {"\x9B", 0, 0x217D47}, /* East Asian ideograph */ {"\xA1", 0, 0x217D48}, /* East Asian ideograph */ {"\xAC", 0, 0x217D52}, /* East Asian ideograph */ {"\xB2", 0, 0x217D59}, /* East Asian ideograph */ {"\xBF", 0, 0x217D63}, /* East Asian ideograph */ {"\xAD", 0, 0x333944}, /* East Asian ideograph */ {"\xBE", 0, 0x333F55}, /* East Asian ideograph */ {"\xA2", 0, 0x4B3974}, /* East Asian ideograph */ {"\xB7", 0, 0x4B3A49}, /* East Asian ideograph */ {"\xB6", 0, 0x69554E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page58 = { marc8r_31page58_flat, 0 }; /* PAGE 57 */ struct yaz_iconv_trie_flat marc8r_31page57_flat[] = { {"\x8C", 0, 0x213A32}, /* East Asian ideograph */ {"\x81", 0, 0x213A33}, /* East Asian ideograph */ {"\x89", 0, 0x213A34}, /* East Asian ideograph */ {"\x82", 0, 0x213A38}, /* East Asian ideograph */ {"\xA1", 0, 0x213A3A}, /* East Asian ideograph */ {"\x97", 0, 0x213A3B}, /* East Asian ideograph */ {"\x96", 0, 0x213A3C}, /* East Asian ideograph */ {"\xA3", 0, 0x213A3D}, /* East Asian ideograph */ {"\xA9", 0, 0x213A3E}, /* East Asian ideograph */ {"\x98", 0, 0x213A3F}, /* East Asian ideograph */ {"\xA6", 0, 0x213A40}, /* East Asian ideograph */ {"\xBB", 0, 0x213A41}, /* East Asian ideograph */ {"\xB5", 0, 0x213A45}, /* East Asian ideograph */ {"\x8F", 0, 0x217B69}, /* East Asian ideograph */ {"\x88", 0, 0x217C39}, /* East Asian ideograph */ {"\x84", 0, 0x217C41}, /* East Asian ideograph */ {"\x91", 0, 0x217C49}, /* East Asian ideograph */ {"\x93", 0, 0x217C59}, /* East Asian ideograph */ {"\x9C", 0, 0x217C60}, /* East Asian ideograph */ {"\xA5", 0, 0x217C6D}, /* East Asian ideograph */ {"\xA0", 0, 0x217C6E}, /* East Asian ideograph */ {"\xAA", 0, 0x217C72}, /* East Asian ideograph */ {"\x9A", 0, 0x217C7B}, /* East Asian ideograph */ {"\xAB", 0, 0x217C7C}, /* East Asian ideograph */ {"\xBF", 0, 0x217D26}, /* East Asian ideograph */ {"\xBD", 0, 0x217D2A}, /* East Asian ideograph */ {"\x94", 0, 0x273A48}, /* East Asian ideograph */ {"\xB1", 0, 0x277D40}, /* East Asian ideograph */ {"\x92", 0, 0x277D48}, /* East Asian ideograph */ {"\xBA", 0, 0x2D3A41}, /* East Asian ideograph */ {"\x8B", 0, 0x2D3A47}, /* East Asian ideograph */ {"\x90", 0, 0x453666}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page57 = { marc8r_31page57_flat, 0 }; /* PAGE 56 */ struct yaz_iconv_trie_flat marc8r_31page56_flat[] = { {"\x9A", 0, 0x213A2D}, /* East Asian ideograph */ {"\x92", 0, 0x213A2E}, /* East Asian ideograph */ {"\xBC", 0, 0x213A30}, /* East Asian ideograph */ {"\x9B", 0, 0x213A31}, /* East Asian ideograph */ {"\xBE", 0, 0x213A35}, /* East Asian ideograph */ {"\xBD", 0, 0x213A36}, /* East Asian ideograph */ {"\xB2", 0, 0x213A37}, /* East Asian ideograph */ {"\xB3", 0, 0x213A39}, /* East Asian ideograph */ {"\x8A", 0, 0x217B65}, /* East Asian ideograph */ {"\x9F", 0, 0x217B71}, /* East Asian ideograph */ {"\xA0", 0, 0x217B75}, /* East Asian ideograph */ {"\xA6", 0, 0x217C21}, /* East Asian ideograph */ {"\x8C", 0, 0x217C22}, /* East Asian ideograph */ {"\xA7", 0, 0x217C24}, /* East Asian ideograph */ {"\x9E", 0, 0x217C25}, /* East Asian ideograph */ {"\xA2", 0, 0x217C26}, /* East Asian ideograph */ {"\x9C", 0, 0x217C27}, /* East Asian ideograph */ {"\x96", 0, 0x217C29}, /* East Asian ideograph */ {"\x93", 0, 0x217C30}, /* East Asian ideograph */ {"\xAC", 0, 0x217C31}, /* East Asian ideograph */ {"\xAE", 0, 0x217C34}, /* East Asian ideograph */ {"\x95", 0, 0x217C35}, /* East Asian ideograph */ {"\xAF", 0, 0x217C36}, /* East Asian ideograph */ {"\xB5", 0, 0x217C3E}, /* East Asian ideograph */ {"\xB7", 0, 0x217C45}, /* East Asian ideograph */ {"\x90", 0, 0x217C4A}, /* East Asian ideograph */ {"\xB8", 0, 0x217C4F}, /* East Asian ideograph */ {"\xBA", 0, 0x217C50}, /* East Asian ideograph */ {"\xAA", 0, 0x217C52}, /* East Asian ideograph */ {"\xB1", 0, 0x217C5B}, /* East Asian ideograph */ {"\xBF", 0, 0x2D3F2A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page56 = { marc8r_31page56_flat, 0 }; /* PAGE 55 */ struct yaz_iconv_trie_flat marc8r_31page55_flat[] = { {"\x86", 0, 0x213A21}, /* East Asian ideograph */ {"\x89", 0, 0x213A22}, /* East Asian ideograph */ {"\xAA", 0, 0x213A23}, /* East Asian ideograph */ {"\x8A", 0, 0x213A25}, /* East Asian ideograph */ {"\x80", 0, 0x213A26}, /* East Asian ideograph */ {"\xA6", 0, 0x213A27}, /* East Asian ideograph */ {"\x81", 0, 0x213A28}, /* East Asian ideograph */ {"\xA2", 0, 0x213A2A}, /* East Asian ideograph */ {"\x9A", 0, 0x213A2B}, /* East Asian ideograph */ {"\xB7", 0, 0x213A2C}, /* East Asian ideograph */ {"\xBF", 0, 0x213A2F}, /* East Asian ideograph */ {"\xA0", 0, 0x217B2C}, /* East Asian ideograph */ {"\xA7", 0, 0x217B31}, /* East Asian ideograph */ {"\x9E", 0, 0x217B3B}, /* East Asian ideograph */ {"\xAD", 0, 0x217B3C}, /* East Asian ideograph */ {"\x95", 0, 0x217B3E}, /* East Asian ideograph */ {"\x90", 0, 0x217B48}, /* East Asian ideograph */ {"\xA5", 0, 0x217B49}, /* East Asian ideograph */ {"\xA4", 0, 0x217B52}, /* East Asian ideograph */ {"\xBA", 0, 0x217B6A}, /* East Asian ideograph */ {"\xBC", 0, 0x217C28}, /* East Asian ideograph */ {"\xB5", 0, 0x273A43}, /* East Asian ideograph */ {"\xB4", 0, 0x273A4A}, /* East Asian ideograph */ {"\xB6", 0, 0x273A4B}, /* East Asian ideograph */ {"\xA3", 0, 0x2D3970}, /* East Asian ideograph */ {"\xAC", 0, 0x334770}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page55 = { marc8r_31page55_flat, 0 }; /* PAGE 54 */ struct yaz_iconv_trie_flat marc8r_31page54_flat[] = { {"\x83", 0, 0x21396B}, /* East Asian ideograph */ {"\x81", 0, 0x21396F}, /* East Asian ideograph */ {"\x91", 0, 0x213973}, /* East Asian ideograph */ {"\x98", 0, 0x213974}, /* East Asian ideograph */ {"\xA3", 0, 0x213975}, /* East Asian ideograph */ {"\x9C", 0, 0x213976}, /* East Asian ideograph */ {"\x93", 0, 0x213977}, /* East Asian ideograph */ {"\xA0", 0, 0x213979}, /* East Asian ideograph */ {"\x9F", 0, 0x21397A}, /* East Asian ideograph */ {"\x9B", 0, 0x21397B}, /* East Asian ideograph */ {"\x8C", 0, 0x21397C}, /* East Asian ideograph */ {"\xA9", 0, 0x21397D}, /* East Asian ideograph */ {"\xA5", 0, 0x21397E}, /* East Asian ideograph */ {"\xB6", 0, 0x213A24}, /* East Asian ideograph */ {"\xBC", 0, 0x213A29}, /* East Asian ideograph */ {"\x80", 0, 0x217A51}, /* East Asian ideograph */ {"\xAA", 0, 0x217A6E}, /* East Asian ideograph */ {"\x96", 0, 0x217A75}, /* East Asian ideograph */ {"\x89", 0, 0x217A78}, /* East Asian ideograph */ {"\x92", 0, 0x217A7E}, /* East Asian ideograph */ {"\xB8", 0, 0x217B3A}, /* East Asian ideograph */ {"\xB5", 0, 0x217B3D}, /* East Asian ideograph */ {"\xAC", 0, 0x217B41}, /* East Asian ideograph */ {"\x84", 0, 0x273A28}, /* East Asian ideograph */ {"\xB4", 0, 0x273A41}, /* East Asian ideograph */ {"\x87", 0, 0x273A44}, /* East Asian ideograph */ {"\x85", 0, 0x277B3C}, /* East Asian ideograph */ {"\xB2", 0, 0x277C24}, /* East Asian ideograph */ {"\x86", 0, 0x277D2B}, /* East Asian ideograph */ {"\x88", 0, 0x277D74}, /* East Asian ideograph */ {"\xB1", 0, 0x2D397B}, /* East Asian ideograph */ {"\xBF", 0, 0x2D3A26}, /* East Asian ideograph */ {"\x9A", 0, 0x4B3666}, /* East Asian ideograph */ {"\xAF", 0, 0x4B397B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page54 = { marc8r_31page54_flat, 0 }; /* PAGE 53 */ struct yaz_iconv_trie_flat marc8r_31page53_flat[] = { {"\x91", 0, 0x21395B}, /* East Asian ideograph */ {"\x86", 0, 0x21395D}, /* East Asian ideograph */ {"\x90", 0, 0x21395E}, /* East Asian ideograph */ {"\x97", 0, 0x21395F}, /* East Asian ideograph */ {"\x92", 0, 0x213961}, /* East Asian ideograph */ {"\x93", 0, 0x213962}, /* East Asian ideograph */ {"\x8A", 0, 0x213963}, /* East Asian ideograph */ {"\x8B", 0, 0x213965}, /* East Asian ideograph */ {"\x94", 0, 0x213966}, /* East Asian ideograph */ {"\xA3", 0, 0x213967}, /* East Asian ideograph */ {"\xBF", 0, 0x213969}, /* East Asian ideograph */ {"\x98", 0, 0x21396A}, /* East Asian ideograph */ {"\xA8", 0, 0x21396C}, /* East Asian ideograph */ {"\xA5", 0, 0x21396D}, /* East Asian ideograph */ {"\xAA", 0, 0x21396E}, /* East Asian ideograph */ {"\xBB", 0, 0x213970}, /* East Asian ideograph */ {"\xA6", 0, 0x213971}, /* East Asian ideograph */ {"\x9A", 0, 0x213972}, /* East Asian ideograph */ {"\xAC", 0, 0x213978}, /* East Asian ideograph */ {"\x85", 0, 0x217A24}, /* East Asian ideograph */ {"\x8F", 0, 0x217A28}, /* East Asian ideograph */ {"\x81", 0, 0x217A3E}, /* East Asian ideograph */ {"\xB9", 0, 0x217A43}, /* East Asian ideograph */ {"\xB8", 0, 0x217A44}, /* East Asian ideograph */ {"\xAE", 0, 0x217A4F}, /* East Asian ideograph */ {"\xB1", 0, 0x217A50}, /* East Asian ideograph */ {"\x9E", 0, 0x217A52}, /* East Asian ideograph */ {"\xBD", 0, 0x217A56}, /* East Asian ideograph */ {"\xB6", 0, 0x217A5D}, /* East Asian ideograph */ {"\x9D", 0, 0x217A5E}, /* East Asian ideograph */ {"\xBA", 0, 0x217A5F}, /* East Asian ideograph */ {"\xA4", 0, 0x217A61}, /* East Asian ideograph */ {"\x9C", 0, 0x275624}, /* East Asian ideograph */ {"\x99", 0, 0x2D3956}, /* East Asian ideograph */ {"\x89", 0, 0x333963}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page53 = { marc8r_31page53_flat, 0 }; /* PAGE 52 */ struct yaz_iconv_trie_flat marc8r_31page52_flat[] = { {"\x84", 0, 0x213945}, /* East Asian ideograph */ {"\x83", 0, 0x213946}, /* East Asian ideograph */ {"\x82", 0, 0x21394A}, /* East Asian ideograph */ {"\x81", 0, 0x21394B}, /* East Asian ideograph */ {"\xA8", 0, 0x21394C}, /* East Asian ideograph */ {"\x92", 0, 0x21394D}, /* East Asian ideograph */ {"\xA4", 0, 0x21394F}, /* East Asian ideograph */ {"\xA3", 0, 0x213950}, /* East Asian ideograph */ {"\x93", 0, 0x213951}, /* East Asian ideograph */ {"\x9E", 0, 0x213952}, /* East Asian ideograph */ {"\x9D", 0, 0x213953}, /* East Asian ideograph */ {"\x99", 0, 0x213954}, /* East Asian ideograph */ {"\xA5", 0, 0x213955}, /* East Asian ideograph */ {"\x8A", 0, 0x213956}, /* East Asian ideograph */ {"\x96", 0, 0x213957}, /* East Asian ideograph */ {"\xBE", 0, 0x213958}, /* East Asian ideograph */ {"\xBB", 0, 0x213959}, /* East Asian ideograph */ {"\xAE", 0, 0x21395A}, /* East Asian ideograph */ {"\xB9", 0, 0x21395C}, /* East Asian ideograph */ {"\xAF", 0, 0x213960}, /* East Asian ideograph */ {"\xA7", 0, 0x217969}, /* East Asian ideograph */ {"\x98", 0, 0x21796B}, /* East Asian ideograph */ {"\x9A", 0, 0x21796F}, /* East Asian ideograph */ {"\xA0", 0, 0x217971}, /* East Asian ideograph */ {"\x97", 0, 0x21797C}, /* East Asian ideograph */ {"\x90", 0, 0x217A21}, /* East Asian ideograph */ {"\xB5", 0, 0x217A25}, /* East Asian ideograph */ {"\xBA", 0, 0x217A2A}, /* East Asian ideograph */ {"\xB8", 0, 0x217A2C}, /* East Asian ideograph */ {"\xB2", 0, 0x217A35}, /* East Asian ideograph */ {"\xB7", 0, 0x217A3A}, /* East Asian ideograph */ {"\x86", 0, 0x273953}, /* East Asian ideograph */ {"\x87", 0, 0x273A27}, /* East Asian ideograph */ {"\x88", 0, 0x273A36}, /* East Asian ideograph */ {"\xAA", 0, 0x273A3B}, /* East Asian ideograph */ {"\xA9", 0, 0x273A45}, /* East Asian ideograph */ {"\xAB", 0, 0x277C36}, /* East Asian ideograph */ {"\xAC", 0, 0x2D394D}, /* East Asian ideograph */ {"\x8D", 0, 0x2D7A44}, /* East Asian ideograph */ {"\xB3", 0, 0x393944}, /* East Asian ideograph */ {"\x9B", 0, 0x69562C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page52 = { marc8r_31page52_flat, 0 }; /* PAGE 51 */ struct yaz_iconv_trie_flat marc8r_31page51_flat[] = { {"\x94", 0, 0x21392F}, /* East Asian ideograph */ {"\x89", 0, 0x213930}, /* East Asian ideograph */ {"\x88", 0, 0x213931}, /* East Asian ideograph */ {"\x87", 0, 0x213932}, /* East Asian ideograph */ {"\x84", 0, 0x213933}, /* East Asian ideograph */ {"\x95", 0, 0x213934}, /* East Asian ideograph */ {"\x91", 0, 0x213935}, /* East Asian ideograph */ {"\x8E", 0, 0x213936}, /* East Asian ideograph */ {"\x8F", 0, 0x213937}, /* East Asian ideograph */ {"\x90", 0, 0x213938}, /* East Asian ideograph */ {"\x97", 0, 0x213939}, /* East Asian ideograph */ {"\x98", 0, 0x21393A}, /* East Asian ideograph */ {"\x9A", 0, 0x21393B}, /* East Asian ideograph */ {"\xA0", 0, 0x21393C}, /* East Asian ideograph */ {"\xA2", 0, 0x21393D}, /* East Asian ideograph */ {"\xA7", 0, 0x21393E}, /* East Asian ideograph */ {"\xA9", 0, 0x21393F}, /* East Asian ideograph */ {"\xAA", 0, 0x213940}, /* East Asian ideograph */ {"\xAE", 0, 0x213941}, /* East Asian ideograph */ {"\xB3", 0, 0x213942}, /* East Asian ideograph */ {"\xB4", 0, 0x213943}, /* East Asian ideograph */ {"\xB6", 0, 0x213944}, /* East Asian ideograph */ {"\xB8", 0, 0x213947}, /* East Asian ideograph */ {"\xBD", 0, 0x213948}, /* East Asian ideograph */ {"\xB9", 0, 0x213949}, /* East Asian ideograph */ {"\x80", 0, 0x217933}, /* East Asian ideograph */ {"\x8D", 0, 0x217938}, /* East Asian ideograph */ {"\x93", 0, 0x217943}, /* East Asian ideograph */ {"\x9C", 0, 0x21794B}, /* East Asian ideograph */ {"\xA1", 0, 0x21794F}, /* East Asian ideograph */ {"\xAC", 0, 0x217954}, /* East Asian ideograph */ {"\xAD", 0, 0x217955}, /* East Asian ideograph */ {"\xBC", 0, 0x217965}, /* East Asian ideograph */ {"\x81", 0, 0x27393F}, /* East Asian ideograph */ {"\x8B", 0, 0x273941}, /* East Asian ideograph */ {"\x96", 0, 0x277954}, /* East Asian ideograph */ {"\x82", 0, 0x4B3938}, /* East Asian ideograph */ {"\xA5", 0, 0x4B393E}, /* East Asian ideograph */ {"\xA8", 0, 0x4B7954}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page51 = { marc8r_31page51_flat, 0 }; /* PAGE 50 */ struct yaz_iconv_trie_flat marc8r_31page50_flat[] = { {"\x8F", 0, 0x213878}, /* East Asian ideograph */ {"\x94", 0, 0x213879}, /* East Asian ideograph */ {"\x95", 0, 0x21387A}, /* East Asian ideograph */ {"\x96", 0, 0x21387B}, /* East Asian ideograph */ {"\x99", 0, 0x21387C}, /* East Asian ideograph */ {"\x9A", 0, 0x21387D}, /* East Asian ideograph */ {"\x9C", 0, 0x21387E}, /* East Asian ideograph */ {"\xA0", 0, 0x213921}, /* East Asian ideograph */ {"\xA4", 0, 0x213922}, /* East Asian ideograph */ {"\xA5", 0, 0x213923}, /* East Asian ideograph */ {"\xA2", 0, 0x213924}, /* East Asian ideograph */ {"\xA7", 0, 0x213925}, /* East Asian ideograph */ {"\xAA", 0, 0x213926}, /* East Asian ideograph */ {"\xAB", 0, 0x213927}, /* East Asian ideograph */ {"\xA9", 0, 0x213928}, /* East Asian ideograph */ {"\xAD", 0, 0x213929}, /* East Asian ideograph */ {"\xAE", 0, 0x21392A}, /* East Asian ideograph */ {"\xB1", 0, 0x21392B}, /* East Asian ideograph */ {"\xB7", 0, 0x21392C}, /* East Asian ideograph */ {"\xBE", 0, 0x21392E}, /* East Asian ideograph */ {"\x82", 0, 0x217870}, /* East Asian ideograph */ {"\x86", 0, 0x217873}, /* East Asian ideograph */ {"\x90", 0, 0x21787A}, /* East Asian ideograph */ {"\xAC", 0, 0x217928}, /* East Asian ideograph */ {"\xAF", 0, 0x21792B}, /* East Asian ideograph */ {"\xBC", 0, 0x217930}, /* East Asian ideograph */ {"\x91", 0, 0x22545C}, /* East Asian ideograph */ {"\x87", 0, 0x273240}, /* East Asian ideograph */ {"\xB9", 0, 0x27392E}, /* East Asian ideograph */ {"\xBA", 0, 0x273940}, /* East Asian ideograph */ {"\x8D", 0, 0x273D6F}, /* East Asian ideograph */ {"\x84", 0, 0x275647}, /* East Asian ideograph */ {"\xB8", 0, 0x275861}, /* East Asian ideograph */ {"\xB4", 0, 0x276046}, /* East Asian ideograph */ {"\x98", 0, 0x2D346A}, /* East Asian ideograph */ {"\x80", 0, 0x2D3877}, /* East Asian ideograph */ {"\x9F", 0, 0x2D3921}, /* East Asian ideograph */ {"\xB2", 0, 0x334369}, /* East Asian ideograph */ {"\x9B", 0, 0x4B387D}, /* East Asian ideograph */ {"\x89", 0, 0x4B594B}, /* East Asian ideograph */ {"\x8A", 0, 0x4B7874}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page50 = { marc8r_31page50_flat, 0 }; /* PAGE 49 */ struct yaz_iconv_trie_flat marc8r_31page49_flat[] = { {"\x87", 0, 0x213864}, /* East Asian ideograph (variant of EACC 4B3864) */ {"\x85", 0, 0x213865}, /* East Asian ideograph */ {"\x81", 0, 0x213866}, /* East Asian ideograph */ {"\x95", 0, 0x213868}, /* East Asian ideograph */ {"\x93", 0, 0x213869}, /* East Asian ideograph */ {"\x91", 0, 0x21386A}, /* East Asian ideograph */ {"\x99", 0, 0x21386B}, /* East Asian ideograph */ {"\x98", 0, 0x21386C}, /* East Asian ideograph */ {"\x9F", 0, 0x21386D}, /* East Asian ideograph */ {"\x9E", 0, 0x21386E}, /* East Asian ideograph */ {"\xA2", 0, 0x21386F}, /* East Asian ideograph */ {"\xA4", 0, 0x213870}, /* East Asian ideograph */ {"\xA9", 0, 0x213871}, /* East Asian ideograph */ {"\xAB", 0, 0x213872}, /* East Asian ideograph */ {"\xAC", 0, 0x213873}, /* East Asian ideograph */ {"\xAF", 0, 0x213874}, /* East Asian ideograph */ {"\xBA", 0, 0x213876}, /* East Asian ideograph */ {"\xBD", 0, 0x213877}, /* East Asian ideograph */ {"\x88", 0, 0x21783A}, /* East Asian ideograph */ {"\x86", 0, 0x21784B}, /* East Asian ideograph */ {"\x96", 0, 0x217850}, /* East Asian ideograph */ {"\x92", 0, 0x217854}, /* East Asian ideograph */ {"\x8E", 0, 0x217856}, /* East Asian ideograph */ {"\xA0", 0, 0x21785A}, /* East Asian ideograph */ {"\x9A", 0, 0x21785E}, /* East Asian ideograph */ {"\xBC", 0, 0x21786C}, /* East Asian ideograph */ {"\xAE", 0, 0x273874}, /* East Asian ideograph */ {"\xB6", 0, 0x273876}, /* East Asian ideograph */ {"\xB3", 0, 0x27463C}, /* East Asian ideograph */ {"\xB0", 0, 0x275274}, /* East Asian ideograph */ {"\x8A", 0, 0x2D386E}, /* East Asian ideograph */ {"\xB7", 0, 0x2D3876}, /* East Asian ideograph */ {"\xBB", 0, 0x2D3A2F}, /* East Asian ideograph */ {"\xB9", 0, 0x333021}, /* East Asian ideograph */ {"\x9C", 0, 0x347431}, /* East Asian ideograph */ {"\xB2", 0, 0x395A2F}, /* East Asian ideograph */ {"\xB1", 0, 0x4B3021}, /* East Asian ideograph */ {"\x8C", 0, 0x4B3870}, /* East Asian ideograph */ {"\x97", 0, 0x69545C}, /* East Asian ideograph */ {"\xA5", 0, 0x69545F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page49 = { marc8r_31page49_flat, 0 }; /* PAGE 48 */ struct yaz_iconv_trie_flat marc8r_31page48_flat[] = { {"\x83", 0, 0x213857}, /* East Asian ideograph */ {"\x8A", 0, 0x21385A}, /* East Asian ideograph */ {"\x85", 0, 0x21385C}, /* East Asian ideograph */ {"\x93", 0, 0x21385D}, /* East Asian ideograph */ {"\x9E", 0, 0x21385E}, /* East Asian ideograph */ {"\x80", 0, 0x21385F}, /* East Asian ideograph */ {"\xB3", 0, 0x213860}, /* East Asian ideograph */ {"\x9C", 0, 0x213861}, /* East Asian ideograph */ {"\xAE", 0, 0x213862}, /* East Asian ideograph */ {"\x9F", 0, 0x213863}, /* East Asian ideograph */ {"\xBE", 0, 0x213867}, /* East Asian ideograph */ {"\xA8", 0, 0x216267}, /* East Asian ideograph */ {"\x9A", 0, 0x217755}, /* East Asian ideograph */ {"\x92", 0, 0x217758}, /* East Asian ideograph */ {"\x8E", 0, 0x21775A}, /* East Asian ideograph */ {"\x89", 0, 0x21775C}, /* East Asian ideograph */ {"\x9B", 0, 0x217760}, /* East Asian ideograph */ {"\x88", 0, 0x217763}, /* East Asian ideograph */ {"\x90", 0, 0x217765}, /* East Asian ideograph */ {"\x98", 0, 0x217768}, /* East Asian ideograph */ {"\x81", 0, 0x217770}, /* East Asian ideograph */ {"\xA9", 0, 0x21777B}, /* East Asian ideograph */ {"\xA1", 0, 0x21777E}, /* East Asian ideograph */ {"\xB1", 0, 0x217824}, /* East Asian ideograph */ {"\xAD", 0, 0x21782B}, /* East Asian ideograph */ {"\xA0", 0, 0x21782E}, /* East Asian ideograph */ {"\xA3", 0, 0x217830}, /* East Asian ideograph */ {"\xA6", 0, 0x217832}, /* East Asian ideograph */ {"\xBC", 0, 0x217841}, /* East Asian ideograph */ {"\xBF", 0, 0x217849}, /* East Asian ideograph */ {"\xBA", 0, 0x21784C}, /* East Asian ideograph */ {"\x99", 0, 0x274A46}, /* East Asian ideograph */ {"\x96", 0, 0x2D3854}, /* East Asian ideograph */ {"\xAB", 0, 0x2D4550}, /* East Asian ideograph */ {"\xBB", 0, 0x2D4A46}, /* East Asian ideograph */ {"\x9D", 0, 0x346622}, /* East Asian ideograph */ {"\x97", 0, 0x4B385E}, /* East Asian ideograph */ {"\xB9", 0, 0x695451}, /* East Asian ideograph */ {"\xB8", 0, 0x695457}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page48 = { marc8r_31page48_flat, 0 }; /* PAGE 47 */ struct yaz_iconv_trie_flat marc8r_31page47_flat[] = { {"\x9E", 0, 0x21384C}, /* East Asian ideograph */ {"\x97", 0, 0x21384D}, /* East Asian ideograph */ {"\x98", 0, 0x21384E}, /* East Asian ideograph */ {"\x91", 0, 0x21384F}, /* East Asian ideograph */ {"\xAB", 0, 0x213850}, /* East Asian ideograph */ {"\x8C", 0, 0x213851}, /* East Asian ideograph */ {"\x9A", 0, 0x213852}, /* East Asian ideograph */ {"\xAD", 0, 0x213853}, /* East Asian ideograph */ {"\x94", 0, 0x213854}, /* East Asian ideograph */ {"\xA2", 0, 0x213855}, /* East Asian ideograph */ {"\x8A", 0, 0x213856}, /* East Asian ideograph */ {"\xBE", 0, 0x213858}, /* East Asian ideograph */ {"\xB5", 0, 0x213859}, /* East Asian ideograph */ {"\xB9", 0, 0x21385B}, /* East Asian ideograph */ {"\x87", 0, 0x21765F}, /* East Asian ideograph */ {"\x84", 0, 0x21767D}, /* East Asian ideograph */ {"\x88", 0, 0x217721}, /* East Asian ideograph */ {"\x8E", 0, 0x217730}, /* East Asian ideograph */ {"\x9D", 0, 0x217733}, /* East Asian ideograph */ {"\x99", 0, 0x217735}, /* East Asian ideograph */ {"\x8B", 0, 0x217737}, /* East Asian ideograph */ {"\xA5", 0, 0x21773D}, /* East Asian ideograph */ {"\xAC", 0, 0x217740}, /* East Asian ideograph */ {"\x92", 0, 0x217742}, /* East Asian ideograph */ {"\xA4", 0, 0x217745}, /* East Asian ideograph */ {"\x93", 0, 0x217747}, /* East Asian ideograph */ {"\x8F", 0, 0x217748}, /* East Asian ideograph */ {"\x8D", 0, 0x21774D}, /* East Asian ideograph */ {"\x96", 0, 0x21774E}, /* East Asian ideograph */ {"\x80", 0, 0x21775F}, /* East Asian ideograph */ {"\xBC", 0, 0x217761}, /* East Asian ideograph */ {"\xBD", 0, 0x21776B}, /* East Asian ideograph */ {"\xBF", 0, 0x21776F}, /* East Asian ideograph */ {"\xB2", 0, 0x2D384A}, /* East Asian ideograph */ {"\x9F", 0, 0x2D5550}, /* East Asian ideograph */ {"\xA9", 0, 0x2D6251}, /* East Asian ideograph */ {"\xA1", 0, 0x4B3850}, /* East Asian ideograph (variant of EACC 213850) */ {"\x81", 0, 0x4B386C}, /* East Asian ideograph */ {"\xB0", 0, 0x69544B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page47 = { marc8r_31page47_flat, 0 }; /* PAGE 46 */ struct yaz_iconv_trie_flat marc8r_31page46_flat[] = { {"\x8A", 0, 0x21383E}, /* East Asian ideograph */ {"\x85", 0, 0x21383F}, /* East Asian ideograph */ {"\x82", 0, 0x213840}, /* East Asian ideograph */ {"\x86", 0, 0x213841}, /* East Asian ideograph */ {"\xB1", 0, 0x213844}, /* East Asian ideograph */ {"\xAF", 0, 0x213845}, /* East Asian ideograph */ {"\xB5", 0, 0x213846}, /* East Asian ideograph */ {"\xAA", 0, 0x213847}, /* East Asian ideograph */ {"\xB0", 0, 0x213848}, /* East Asian ideograph */ {"\xA4", 0, 0x213849}, /* East Asian ideograph */ {"\xB4", 0, 0x21384A}, /* East Asian ideograph */ {"\xA1", 0, 0x21384B}, /* East Asian ideograph */ {"\x89", 0, 0x21756A}, /* East Asian ideograph */ {"\x83", 0, 0x21762B}, /* East Asian ideograph */ {"\x80", 0, 0x217633}, /* East Asian ideograph */ {"\x87", 0, 0x217636}, /* East Asian ideograph */ {"\x8E", 0, 0x217639}, /* East Asian ideograph */ {"\x8F", 0, 0x21763B}, /* East Asian ideograph */ {"\x90", 0, 0x21763E}, /* East Asian ideograph */ {"\x8D", 0, 0x217640}, /* East Asian ideograph */ {"\x81", 0, 0x217648}, /* East Asian ideograph */ {"\x92", 0, 0x217649}, /* East Asian ideograph */ {"\x8C", 0, 0x217650}, /* East Asian ideograph */ {"\x93", 0, 0x217651}, /* East Asian ideograph */ {"\x8B", 0, 0x217656}, /* East Asian ideograph */ {"\x84", 0, 0x217659}, /* East Asian ideograph */ {"\x9B", 0, 0x217667}, /* East Asian ideograph */ {"\x99", 0, 0x217669}, /* East Asian ideograph */ {"\xB3", 0, 0x21766A}, /* East Asian ideograph */ {"\x9E", 0, 0x21766C}, /* East Asian ideograph */ {"\xBF", 0, 0x21766D}, /* East Asian ideograph */ {"\xA7", 0, 0x217671}, /* East Asian ideograph */ {"\xA8", 0, 0x217676}, /* East Asian ideograph */ {"\xAE", 0, 0x217678}, /* East Asian ideograph */ {"\x9D", 0, 0x21767A}, /* East Asian ideograph */ {"\x98", 0, 0x217723}, /* East Asian ideograph */ {"\xAD", 0, 0x217729}, /* East Asian ideograph */ {"\xA0", 0, 0x21772B}, /* East Asian ideograph */ {"\xBD", 0, 0x217749}, /* East Asian ideograph */ {"\x91", 0, 0x27385B}, /* East Asian ideograph */ {"\x95", 0, 0x273862}, /* East Asian ideograph */ {"\xBA", 0, 0x2D4C2C}, /* East Asian ideograph */ {"\xA6", 0, 0x2D5F2C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page46 = { marc8r_31page46_flat, 0 }; /* PAGE 45 */ struct yaz_iconv_trie_flat marc8r_31page45_flat[] = { {"\x94", 0, 0x213835}, /* East Asian ideograph */ {"\x82", 0, 0x213836}, /* East Asian ideograph */ {"\x8E", 0, 0x213837}, /* East Asian ideograph */ {"\x8B", 0, 0x213838}, /* East Asian ideograph */ {"\x83", 0, 0x213839}, /* East Asian ideograph */ {"\xB9", 0, 0x21383A}, /* East Asian ideograph */ {"\xB7", 0, 0x21383B}, /* East Asian ideograph */ {"\xBA", 0, 0x21383C}, /* East Asian ideograph */ {"\x9F", 0, 0x21383D}, /* East Asian ideograph */ {"\xA4", 0, 0x213842}, /* East Asian ideograph */ {"\xA0", 0, 0x213843}, /* East Asian ideograph */ {"\x87", 0, 0x217560}, /* East Asian ideograph */ {"\x9B", 0, 0x217571}, /* East Asian ideograph */ {"\x95", 0, 0x217573}, /* East Asian ideograph */ {"\x92", 0, 0x217577}, /* East Asian ideograph */ {"\x86", 0, 0x21757E}, /* East Asian ideograph */ {"\x84", 0, 0x217622}, /* East Asian ideograph */ {"\xA3", 0, 0x217629}, /* East Asian ideograph */ {"\xBB", 0, 0x21762A}, /* East Asian ideograph */ {"\xB6", 0, 0x21762C}, /* East Asian ideograph */ {"\xA6", 0, 0x21762D}, /* East Asian ideograph */ {"\xAD", 0, 0x217631}, /* East Asian ideograph */ {"\xAC", 0, 0x217635}, /* East Asian ideograph */ {"\xB4", 0, 0x21763D}, /* East Asian ideograph */ {"\xAF", 0, 0x217643}, /* East Asian ideograph */ {"\xBD", 0, 0x21764D}, /* East Asian ideograph */ {"\xB8", 0, 0x21764E}, /* East Asian ideograph */ {"\xB0", 0, 0x217652}, /* East Asian ideograph */ {"\xB3", 0, 0x217658}, /* East Asian ideograph */ {"\x8F", 0, 0x21765A}, /* East Asian ideograph */ {"\x9D", 0, 0x21765B}, /* East Asian ideograph */ {"\xB5", 0, 0x217726}, /* East Asian ideograph */ {"\x9A", 0, 0x27767A}, /* East Asian ideograph */ {"\x98", 0, 0x277742}, /* East Asian ideograph */ {"\x99", 0, 0x277745}, /* East Asian ideograph */ {"\xBC", 0, 0x2D3C21}, /* East Asian ideograph */ {"\x9C", 0, 0x335D3B}, /* East Asian ideograph */ {"\x80", 0, 0x4B382E}, /* East Asian ideograph */ {"\x93", 0, 0x4B7577}, /* East Asian ideograph */ {"\x96", 0, 0x695442}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page45 = { marc8r_31page45_flat, 0 }; /* PAGE 44 */ struct yaz_iconv_trie_flat marc8r_31page44_flat[] = { {"\x83", 0, 0x213827}, /* East Asian ideograph */ {"\x82", 0, 0x21382E}, /* East Asian ideograph */ {"\xA0", 0, 0x213830}, /* East Asian ideograph */ {"\x8B", 0, 0x213831}, /* East Asian ideograph */ {"\xA3", 0, 0x213832}, /* East Asian ideograph */ {"\xAE", 0, 0x213833}, /* East Asian ideograph */ {"\xA2", 0, 0x213834}, /* East Asian ideograph */ {"\x8A", 0, 0x217475}, /* East Asian ideograph */ {"\x89", 0, 0x21752E}, /* East Asian ideograph */ {"\x88", 0, 0x217533}, /* East Asian ideograph */ {"\x9F", 0, 0x217538}, /* East Asian ideograph */ {"\x90", 0, 0x217539}, /* East Asian ideograph */ {"\x93", 0, 0x21753A}, /* East Asian ideograph */ {"\x9E", 0, 0x21753F}, /* East Asian ideograph */ {"\xB5", 0, 0x217540}, /* East Asian ideograph */ {"\x9A", 0, 0x217543}, /* East Asian ideograph */ {"\x94", 0, 0x217545}, /* East Asian ideograph */ {"\xA4", 0, 0x217547}, /* East Asian ideograph */ {"\x99", 0, 0x217548}, /* East Asian ideograph */ {"\x8C", 0, 0x217549}, /* East Asian ideograph */ {"\x97", 0, 0x21754B}, /* East Asian ideograph */ {"\x9D", 0, 0x21754E}, /* East Asian ideograph */ {"\x9C", 0, 0x217552}, /* East Asian ideograph */ {"\xA7", 0, 0x217554}, /* East Asian ideograph */ {"\xA1", 0, 0x217557}, /* East Asian ideograph */ {"\x95", 0, 0x21755B}, /* East Asian ideograph */ {"\xB8", 0, 0x21755F}, /* East Asian ideograph */ {"\xBE", 0, 0x21756C}, /* East Asian ideograph */ {"\xA9", 0, 0x27383E}, /* East Asian ideograph */ {"\xAB", 0, 0x27385A}, /* East Asian ideograph */ {"\xA6", 0, 0x273867}, /* East Asian ideograph */ {"\x92", 0, 0x27386C}, /* East Asian ideograph */ {"\x84", 0, 0x27386D}, /* East Asian ideograph */ {"\xAD", 0, 0x277638}, /* East Asian ideograph */ {"\xB2", 0, 0x277748}, /* East Asian ideograph */ {"\x85", 0, 0x27785A}, /* East Asian ideograph */ {"\x86", 0, 0x27785E}, /* East Asian ideograph */ {"\x9B", 0, 0x2D7552}, /* East Asian ideograph */ {"\xBB", 0, 0x4B3871}, /* East Asian ideograph */ {"\xB3", 0, 0x695438}, /* East Asian ideograph */ {"\xAA", 0, 0x69543A}, /* East Asian ideograph */ {"\xB0", 0, 0x69543B}, /* East Asian ideograph */ {"\xB4", 0, 0x705B71}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page44 = { marc8r_31page44_flat, 0 }; /* PAGE 43 */ struct yaz_iconv_trie_flat marc8r_31page43_flat[] = { {"\x91", 0, 0x21377C}, /* East Asian ideograph */ {"\x8A", 0, 0x21377D}, /* East Asian ideograph */ {"\x80", 0, 0x213821}, /* East Asian ideograph */ {"\x87", 0, 0x213822}, /* East Asian ideograph */ {"\x8D", 0, 0x213823}, /* East Asian ideograph */ {"\x8E", 0, 0x213825}, /* East Asian ideograph */ {"\xAA", 0, 0x213828}, /* East Asian ideograph */ {"\xA9", 0, 0x213829}, /* East Asian ideograph */ {"\xB7", 0, 0x21382A}, /* East Asian ideograph */ {"\xA1", 0, 0x21382B}, /* East Asian ideograph */ {"\xA4", 0, 0x21382C}, /* East Asian ideograph */ {"\xA6", 0, 0x21382D}, /* East Asian ideograph */ {"\xBC", 0, 0x21382F}, /* East Asian ideograph */ {"\x89", 0, 0x217463}, /* East Asian ideograph */ {"\x85", 0, 0x217465}, /* East Asian ideograph */ {"\x8B", 0, 0x217468}, /* East Asian ideograph */ {"\x8C", 0, 0x217469}, /* East Asian ideograph */ {"\xA8", 0, 0x217470}, /* East Asian ideograph */ {"\xAD", 0, 0x217477}, /* East Asian ideograph */ {"\xB4", 0, 0x217479}, /* East Asian ideograph */ {"\xA7", 0, 0x21747A}, /* East Asian ideograph */ {"\xB0", 0, 0x217526}, /* East Asian ideograph */ {"\xB1", 0, 0x217528}, /* East Asian ideograph */ {"\xAE", 0, 0x21752A}, /* East Asian ideograph */ {"\xB6", 0, 0x21752D}, /* East Asian ideograph */ {"\xBF", 0, 0x217530}, /* East Asian ideograph */ {"\xB5", 0, 0x217531}, /* East Asian ideograph */ {"\xBB", 0, 0x217532}, /* East Asian ideograph */ {"\xB3", 0, 0x217535}, /* East Asian ideograph */ {"\x9E", 0, 0x273855}, /* East Asian ideograph */ {"\x97", 0, 0x273856}, /* East Asian ideograph */ {"\x9F", 0, 0x273860}, /* East Asian ideograph */ {"\xA0", 0, 0x273861}, /* East Asian ideograph */ {"\x9B", 0, 0x273864}, /* East Asian ideograph */ {"\x8F", 0, 0x27386E}, /* East Asian ideograph */ {"\x9C", 0, 0x27386F}, /* East Asian ideograph */ {"\x9D", 0, 0x273871}, /* East Asian ideograph */ {"\x90", 0, 0x273C77}, /* East Asian ideograph */ {"\x9A", 0, 0x2D383F}, /* East Asian ideograph */ {"\xAB", 0, 0x2D3C70}, /* East Asian ideograph */ {"\xAF", 0, 0x33386E}, /* East Asian ideograph */ {"\x82", 0, 0x395E71}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page43 = { marc8r_31page43_flat, 0 }; /* PAGE 42 */ struct yaz_iconv_trie_flat marc8r_31page42_flat[] = { {"\x83", 0, 0x21376D}, /* East Asian ideograph */ {"\x88", 0, 0x21376E}, /* East Asian ideograph */ {"\x8B", 0, 0x21376F}, /* East Asian ideograph */ {"\x8D", 0, 0x213770}, /* East Asian ideograph */ {"\x92", 0, 0x213771}, /* East Asian ideograph */ {"\x93", 0, 0x213772}, /* East Asian ideograph */ {"\x98", 0, 0x213773}, /* East Asian ideograph */ {"\x96", 0, 0x213774}, /* East Asian ideograph */ {"\x9F", 0, 0x213775}, /* East Asian ideograph */ {"\xAD", 0, 0x213777}, /* East Asian ideograph */ {"\xAF", 0, 0x213778}, /* East Asian ideograph */ {"\xB0", 0, 0x213779}, /* East Asian ideograph */ {"\xA8", 0, 0x21377A}, /* East Asian ideograph */ {"\xB3", 0, 0x21377B}, /* East Asian ideograph */ {"\xBE", 0, 0x213824}, /* East Asian ideograph */ {"\x85", 0, 0x217427}, /* East Asian ideograph */ {"\x84", 0, 0x217428}, /* East Asian ideograph */ {"\x82", 0, 0x217429}, /* East Asian ideograph */ {"\x8A", 0, 0x21742C}, /* East Asian ideograph */ {"\x89", 0, 0x21742D}, /* East Asian ideograph */ {"\x87", 0, 0x21742E}, /* East Asian ideograph */ {"\x8C", 0, 0x217430}, /* East Asian ideograph */ {"\x95", 0, 0x217431}, /* East Asian ideograph */ {"\x94", 0, 0x217432}, /* East Asian ideograph */ {"\x9A", 0, 0x217435}, /* East Asian ideograph */ {"\x9B", 0, 0x217436}, /* East Asian ideograph */ {"\x9C", 0, 0x217437}, /* East Asian ideograph */ {"\x9D", 0, 0x217439}, /* East Asian ideograph */ {"\x9E", 0, 0x21743A}, /* East Asian ideograph */ {"\xA4", 0, 0x217441}, /* East Asian ideograph */ {"\xAE", 0, 0x217442}, /* East Asian ideograph */ {"\xA9", 0, 0x217443}, /* East Asian ideograph */ {"\xB8", 0, 0x217448}, /* East Asian ideograph */ {"\xAA", 0, 0x21744C}, /* East Asian ideograph */ {"\xBF", 0, 0x21746A}, /* East Asian ideograph */ {"\x86", 0, 0x273772}, /* East Asian ideograph */ {"\xBA", 0, 0x27384A}, /* East Asian ideograph */ {"\xB9", 0, 0x27386B}, /* East Asian ideograph */ {"\xA3", 0, 0x27526F}, /* East Asian ideograph */ {"\x80", 0, 0x2D376F}, /* East Asian ideograph */ {"\xBB", 0, 0x2D3830}, /* East Asian ideograph */ {"\xAC", 0, 0x343A5B}, /* East Asian ideograph */ {"\xA7", 0, 0x4B3869}, /* East Asian ideograph */ {"\xA6", 0, 0x695429}, /* East Asian ideograph */ {"\xB7", 0, 0x69542A}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page42 = { marc8r_31page42_flat, 0 }; /* PAGE 41 */ struct yaz_iconv_trie_flat marc8r_31page41_flat[] = { {"\x80", 0, 0x21375C}, /* East Asian ideograph */ {"\x81", 0, 0x21375D}, /* East Asian ideograph */ {"\x82", 0, 0x21375E}, /* East Asian ideograph */ {"\x8A", 0, 0x213760}, /* East Asian ideograph */ {"\x89", 0, 0x213761}, /* East Asian ideograph */ {"\x88", 0, 0x213762}, /* East Asian ideograph */ {"\x91", 0, 0x213764}, /* East Asian ideograph */ {"\x9B", 0, 0x213765}, /* East Asian ideograph */ {"\x9A", 0, 0x213766}, /* East Asian ideograph */ {"\xA0", 0, 0x213767}, /* East Asian ideograph */ {"\x9E", 0, 0x213768}, /* East Asian ideograph */ {"\xA4", 0, 0x213769}, /* East Asian ideograph */ {"\xB1", 0, 0x21376B}, /* East Asian ideograph */ {"\xBA", 0, 0x21376C}, /* East Asian ideograph */ {"\x83", 0, 0x21735B}, /* East Asian ideograph */ {"\x85", 0, 0x217360}, /* East Asian ideograph */ {"\x8F", 0, 0x217362}, /* East Asian ideograph */ {"\x8D", 0, 0x217367}, /* East Asian ideograph */ {"\x94", 0, 0x21736A}, /* East Asian ideograph */ {"\x97", 0, 0x21736B}, /* East Asian ideograph */ {"\x9D", 0, 0x21736D}, /* East Asian ideograph */ {"\xA1", 0, 0x21736F}, /* East Asian ideograph */ {"\x9F", 0, 0x217370}, /* East Asian ideograph */ {"\xAB", 0, 0x217375}, /* East Asian ideograph */ {"\xAE", 0, 0x217376}, /* East Asian ideograph */ {"\xA7", 0, 0x217377}, /* East Asian ideograph */ {"\xBB", 0, 0x217379}, /* East Asian ideograph */ {"\xB7", 0, 0x21737E}, /* East Asian ideograph */ {"\xB9", 0, 0x217421}, /* East Asian ideograph */ {"\xBF", 0, 0x217424}, /* East Asian ideograph */ {"\xAF", 0, 0x27376F}, /* East Asian ideograph */ {"\xB4", 0, 0x273770}, /* East Asian ideograph */ {"\xAD", 0, 0x273771}, /* East Asian ideograph */ {"\xA2", 0, 0x273773}, /* East Asian ideograph */ {"\xBE", 0, 0x273774}, /* East Asian ideograph */ {"\xB0", 0, 0x274D57}, /* East Asian ideograph */ {"\xB5", 0, 0x27742E}, /* East Asian ideograph */ {"\xAC", 0, 0x2D3768}, /* East Asian ideograph */ {"\x93", 0, 0x2D7345}, /* East Asian ideograph */ {"\xB2", 0, 0x393770}, /* East Asian ideograph */ {"\x8C", 0, 0x39563C}, /* East Asian ideograph */ {"\x98", 0, 0x4B3768}, /* East Asian ideograph */ {"\xBD", 0, 0x4B376F}, /* East Asian ideograph */ {"\xA3", 0, 0x4B3773}, /* East Asian ideograph */ {"\xB3", 0, 0x4B3774}, /* East Asian ideograph */ {"\x8E", 0, 0x695375}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page41 = { marc8r_31page41_flat, 0 }; /* PAGE 40 */ struct yaz_iconv_trie_flat marc8r_31page40_flat[] = { {"\x80", 0, 0x21374E}, /* East Asian ideograph */ {"\x8E", 0, 0x21374F}, /* East Asian ideograph */ {"\x85", 0, 0x213750}, /* East Asian ideograph */ {"\x87", 0, 0x213751}, /* East Asian ideograph */ {"\x90", 0, 0x213752}, /* East Asian ideograph */ {"\x8F", 0, 0x213753}, /* East Asian ideograph */ {"\x95", 0, 0x213754}, /* East Asian ideograph */ {"\xAE", 0, 0x213755}, /* East Asian ideograph (variant of EACC 453755) */ {"\xA8", 0, 0x213756}, /* East Asian ideograph */ {"\xB0", 0, 0x213757}, /* East Asian ideograph */ {"\xA5", 0, 0x213758}, /* East Asian ideograph */ {"\xB7", 0, 0x213759}, /* East Asian ideograph */ {"\xB4", 0, 0x21375A}, /* East Asian ideograph */ {"\xB6", 0, 0x21375B}, /* East Asian ideograph */ {"\xBC", 0, 0x21375F}, /* East Asian ideograph */ {"\x93", 0, 0x217325}, /* East Asian ideograph */ {"\x8C", 0, 0x217328}, /* East Asian ideograph */ {"\xBA", 0, 0x217332}, /* East Asian ideograph */ {"\x86", 0, 0x217334}, /* East Asian ideograph */ {"\x84", 0, 0x217335}, /* East Asian ideograph */ {"\x91", 0, 0x217336}, /* East Asian ideograph */ {"\x8A", 0, 0x217337}, /* East Asian ideograph */ {"\x9E", 0, 0x21733E}, /* East Asian ideograph */ {"\x9C", 0, 0x217341}, /* East Asian ideograph */ {"\x9A", 0, 0x217342}, /* East Asian ideograph */ {"\x99", 0, 0x217345}, /* East Asian ideograph */ {"\xAD", 0, 0x21734B}, /* East Asian ideograph */ {"\xA6", 0, 0x21734C}, /* East Asian ideograph */ {"\xAC", 0, 0x21734E}, /* East Asian ideograph */ {"\xB2", 0, 0x217353}, /* East Asian ideograph */ {"\xB3", 0, 0x21735A}, /* East Asian ideograph */ {"\xA3", 0, 0x27375E}, /* East Asian ideograph */ {"\xA0", 0, 0x4B4937}, /* East Asian ideograph */ {"\xAF", 0, 0x4D3359}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page40 = { marc8r_31page40_flat, 0 }; /* PAGE 39 */ struct yaz_iconv_trie_flat marc8r_31page39_flat[] = { {"\x8E", 0, 0x213734}, /* East Asian ideograph */ {"\x97", 0, 0x213739}, /* East Asian ideograph */ {"\x93", 0, 0x21373B}, /* East Asian ideograph */ {"\x99", 0, 0x21373F}, /* East Asian ideograph */ {"\xAB", 0, 0x213741}, /* East Asian ideograph */ {"\xA4", 0, 0x213742}, /* East Asian ideograph */ {"\xA9", 0, 0x213743}, /* East Asian ideograph */ {"\xB8", 0, 0x213744}, /* East Asian ideograph */ {"\xB4", 0, 0x213745}, /* East Asian ideograph */ {"\xB9", 0, 0x213746}, /* East Asian ideograph */ {"\xA5", 0, 0x213747}, /* East Asian ideograph */ {"\xAA", 0, 0x213748}, /* East Asian ideograph */ {"\xA8", 0, 0x213749}, /* East Asian ideograph */ {"\xB1", 0, 0x21374A}, /* East Asian ideograph */ {"\xAF", 0, 0x21374B}, /* East Asian ideograph */ {"\xA2", 0, 0x21374C}, /* East Asian ideograph (variant of EACC 4B374C) */ {"\xAC", 0, 0x21374D}, /* East Asian ideograph */ {"\x82", 0, 0x217247}, /* East Asian ideograph */ {"\x8C", 0, 0x217248}, /* East Asian ideograph */ {"\x8B", 0, 0x21724B}, /* East Asian ideograph */ {"\x80", 0, 0x217252}, /* East Asian ideograph */ {"\x89", 0, 0x217257}, /* East Asian ideograph */ {"\x81", 0, 0x217258}, /* East Asian ideograph */ {"\x98", 0, 0x21725C}, /* East Asian ideograph */ {"\x94", 0, 0x21725E}, /* East Asian ideograph */ {"\x8D", 0, 0x217269}, /* East Asian ideograph */ {"\x8F", 0, 0x21726C}, /* East Asian ideograph */ {"\xB0", 0, 0x21726E}, /* East Asian ideograph */ {"\x9F", 0, 0x21726F}, /* East Asian ideograph */ {"\xBC", 0, 0x217270}, /* East Asian ideograph */ {"\xA0", 0, 0x217272}, /* East Asian ideograph */ {"\xB6", 0, 0x217278}, /* East Asian ideograph */ {"\xA6", 0, 0x21727A}, /* East Asian ideograph */ {"\xB3", 0, 0x21727B}, /* East Asian ideograph */ {"\xAD", 0, 0x21727C}, /* East Asian ideograph */ {"\xB2", 0, 0x21727E}, /* East Asian ideograph */ {"\x9C", 0, 0x273754}, /* East Asian ideograph */ {"\x90", 0, 0x2D3749}, /* East Asian ideograph */ {"\xBA", 0, 0x694838}, /* East Asian ideograph */ {"\xBB", 0, 0x706067}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page39 = { marc8r_31page39_flat, 0 }; /* PAGE 38 */ struct yaz_iconv_trie_flat marc8r_31page38_flat[] = { {"\x80", 0, 0x213724}, /* East Asian ideograph */ {"\x9B", 0, 0x213725}, /* East Asian ideograph */ {"\x96", 0, 0x213727}, /* East Asian ideograph */ {"\x88", 0, 0x213729}, /* East Asian ideograph */ {"\x9F", 0, 0x21372A}, /* East Asian ideograph */ {"\x86", 0, 0x21372C}, /* East Asian ideograph (variant of EACC 4B372C) */ {"\x89", 0, 0x21372D}, /* East Asian ideograph */ {"\x94", 0, 0x21372E}, /* East Asian ideograph */ {"\x8E", 0, 0x21372F}, /* East Asian ideograph */ {"\x97", 0, 0x213730}, /* East Asian ideograph */ {"\x8D", 0, 0x213731}, /* East Asian ideograph */ {"\xAE", 0, 0x213732}, /* East Asian ideograph */ {"\xAF", 0, 0x213733}, /* East Asian ideograph */ {"\xB6", 0, 0x213735}, /* East Asian ideograph */ {"\xB2", 0, 0x213736}, /* East Asian ideograph */ {"\xBB", 0, 0x213737}, /* East Asian ideograph */ {"\xB9", 0, 0x213738}, /* East Asian ideograph */ {"\xBF", 0, 0x21373C}, /* East Asian ideograph */ {"\xB4", 0, 0x21373D}, /* East Asian ideograph */ {"\xB7", 0, 0x21373E}, /* East Asian ideograph */ {"\xB0", 0, 0x213740}, /* East Asian ideograph */ {"\x85", 0, 0x21712A}, /* East Asian ideograph */ {"\xA7", 0, 0x21717E}, /* East Asian ideograph */ {"\x92", 0, 0x217225}, /* East Asian ideograph */ {"\x8F", 0, 0x217228}, /* East Asian ideograph */ {"\x9E", 0, 0x21722E}, /* East Asian ideograph */ {"\x8C", 0, 0x217231}, /* East Asian ideograph */ {"\x9C", 0, 0x217234}, /* East Asian ideograph */ {"\x90", 0, 0x217235}, /* East Asian ideograph */ {"\x81", 0, 0x217236}, /* East Asian ideograph */ {"\x93", 0, 0x217238}, /* East Asian ideograph */ {"\x82", 0, 0x21723C}, /* East Asian ideograph */ {"\x9D", 0, 0x217242}, /* East Asian ideograph */ {"\xB5", 0, 0x217255}, /* East Asian ideograph */ {"\xA0", 0, 0x21725D}, /* East Asian ideograph */ {"\xAA", 0, 0x217260}, /* East Asian ideograph */ {"\xBD", 0, 0x217261}, /* East Asian ideograph */ {"\xAC", 0, 0x217264}, /* East Asian ideograph */ {"\xB8", 0, 0x217267}, /* East Asian ideograph */ {"\xAB", 0, 0x21726B}, /* East Asian ideograph */ {"\xA4", 0, 0x27375B}, /* East Asian ideograph */ {"\xB1", 0, 0x273764}, /* East Asian ideograph */ {"\xA9", 0, 0x2D5941}, /* East Asian ideograph */ {"\x91", 0, 0x393573}, /* East Asian ideograph */ {"\xA3", 0, 0x706054}, /* East Asian ideograph */ {"\xAD", 0, 0x706058}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page38 = { marc8r_31page38_flat, 0 }; /* PAGE 37 */ struct yaz_iconv_trie_flat marc8r_31page37_flat[] = { {"\xA8", 0, 0x213673}, /* East Asian ideograph */ {"\x9F", 0, 0x213674}, /* East Asian ideograph */ {"\x91", 0, 0x213675}, /* East Asian ideograph */ {"\x9C", 0, 0x213676}, /* East Asian ideograph */ {"\xA6", 0, 0x213677}, /* East Asian ideograph */ {"\x87", 0, 0x213678}, /* East Asian ideograph */ {"\x93", 0, 0x213679}, /* East Asian ideograph */ {"\x8E", 0, 0x21367A}, /* East Asian ideograph */ {"\xA3", 0, 0x21367B}, /* East Asian ideograph */ {"\xAF", 0, 0x21367C}, /* East Asian ideograph */ {"\xA4", 0, 0x21367D}, /* East Asian ideograph */ {"\x85", 0, 0x21367E}, /* East Asian ideograph */ {"\x9A", 0, 0x213721}, /* East Asian ideograph */ {"\x86", 0, 0x213722}, /* East Asian ideograph */ {"\xA1", 0, 0x213723}, /* East Asian ideograph */ {"\xBE", 0, 0x213726}, /* East Asian ideograph */ {"\xB7", 0, 0x213728}, /* East Asian ideograph */ {"\xBD", 0, 0x21372B}, /* East Asian ideograph */ {"\xA7", 0, 0x216C50}, /* East Asian ideograph */ {"\xA2", 0, 0x217143}, /* East Asian ideograph (variant of EACC 2D7143) */ {"\xB4", 0, 0x217156}, /* East Asian ideograph */ {"\x8C", 0, 0x217158}, /* East Asian ideograph */ {"\x90", 0, 0x217159}, /* East Asian ideograph */ {"\x9B", 0, 0x21715A}, /* East Asian ideograph */ {"\x8D", 0, 0x21715B}, /* East Asian ideograph */ {"\x9E", 0, 0x21715C}, /* East Asian ideograph */ {"\x99", 0, 0x21715D}, /* East Asian ideograph */ {"\x83", 0, 0x21715E}, /* East Asian ideograph */ {"\x89", 0, 0x21715F}, /* East Asian ideograph */ {"\x8A", 0, 0x217161}, /* East Asian ideograph */ {"\x9D", 0, 0x217162}, /* East Asian ideograph */ {"\x94", 0, 0x217164}, /* East Asian ideograph */ {"\x84", 0, 0x217165}, /* East Asian ideograph */ {"\xA9", 0, 0x217169}, /* East Asian ideograph */ {"\x8F", 0, 0x21716F}, /* East Asian ideograph */ {"\x92", 0, 0x217170}, /* East Asian ideograph */ {"\xA5", 0, 0x217175}, /* East Asian ideograph */ {"\x96", 0, 0x217177}, /* East Asian ideograph */ {"\x81", 0, 0x217178}, /* East Asian ideograph */ {"\xB2", 0, 0x217179}, /* East Asian ideograph */ {"\xBB", 0, 0x217224}, /* East Asian ideograph */ {"\xB8", 0, 0x217227}, /* East Asian ideograph */ {"\xB9", 0, 0x21722B}, /* East Asian ideograph */ {"\xB6", 0, 0x217239}, /* East Asian ideograph */ {"\xBF", 0, 0x217244}, /* East Asian ideograph */ {"\xB3", 0, 0x27374B}, /* East Asian ideograph */ {"\xAB", 0, 0x27375D}, /* East Asian ideograph */ {"\xAC", 0, 0x4B356A}, /* East Asian ideograph */ {"\xAA", 0, 0x70603A}, /* East Asian ideograph */ {"\xB5", 0, 0x70604C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page37 = { marc8r_31page37_flat, 0 }; /* PAGE 36 */ struct yaz_iconv_trie_flat marc8r_31page36_flat[] = { {"\xA7", 0, 0x21365A}, /* East Asian ideograph */ {"\x80", 0, 0x21365B}, /* East Asian ideograph */ {"\x94", 0, 0x21365F}, /* East Asian ideograph */ {"\x87", 0, 0x213660}, /* East Asian ideograph */ {"\x9C", 0, 0x213661}, /* East Asian ideograph */ {"\x8B", 0, 0x213662}, /* East Asian ideograph */ {"\xAA", 0, 0x213663}, /* East Asian ideograph */ {"\xB3", 0, 0x213664}, /* East Asian ideograph */ {"\x8A", 0, 0x213665}, /* East Asian ideograph */ {"\x83", 0, 0x213666}, /* East Asian ideograph */ {"\xB1", 0, 0x213667}, /* East Asian ideograph */ {"\xAE", 0, 0x213668}, /* East Asian ideograph */ {"\x82", 0, 0x213669}, /* East Asian ideograph */ {"\x9F", 0, 0x21366A}, /* East Asian ideograph */ {"\x9D", 0, 0x21366B}, /* East Asian ideograph */ {"\x98", 0, 0x21366C}, /* East Asian ideograph */ {"\x9A", 0, 0x21366D}, /* East Asian ideograph */ {"\xAC", 0, 0x21366F}, /* East Asian ideograph */ {"\x89", 0, 0x213670}, /* East Asian ideograph */ {"\xB2", 0, 0x213671}, /* East Asian ideograph */ {"\xBB", 0, 0x213672}, /* East Asian ideograph */ {"\x84", 0, 0x21523F}, /* East Asian ideograph */ {"\x91", 0, 0x217123}, /* East Asian ideograph */ {"\xA8", 0, 0x217126}, /* East Asian ideograph */ {"\xAD", 0, 0x217127}, /* East Asian ideograph */ {"\x93", 0, 0x21712D}, /* East Asian ideograph */ {"\x86", 0, 0x21712F}, /* East Asian ideograph */ {"\x88", 0, 0x217134}, /* East Asian ideograph */ {"\xB4", 0, 0x217136}, /* East Asian ideograph */ {"\x81", 0, 0x217144}, /* East Asian ideograph */ {"\x8E", 0, 0x217145}, /* East Asian ideograph */ {"\xB5", 0, 0x217147}, /* East Asian ideograph */ {"\x8F", 0, 0x217149}, /* East Asian ideograph */ {"\xA4", 0, 0x217150}, /* East Asian ideograph */ {"\x92", 0, 0x217151}, /* East Asian ideograph */ {"\x99", 0, 0x217152}, /* East Asian ideograph */ {"\xBD", 0, 0x273731}, /* East Asian ideograph */ {"\xB7", 0, 0x273745}, /* East Asian ideograph */ {"\xBE", 0, 0x27735A}, /* East Asian ideograph */ {"\xAB", 0, 0x2D3547}, /* East Asian ideograph */ {"\x9E", 0, 0x39365E}, /* East Asian ideograph */ {"\xB0", 0, 0x396074}, /* East Asian ideograph */ {"\xB6", 0, 0x4B4A2E}, /* East Asian ideograph */ {"\xB9", 0, 0x70602D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page36 = { marc8r_31page36_flat, 0 }; /* PAGE 35 */ struct yaz_iconv_trie_flat marc8r_31page35_flat[] = { {"\x96", 0, 0x213644}, /* East Asian ideograph */ {"\x86", 0, 0x213646}, /* East Asian ideograph */ {"\x8F", 0, 0x213648}, /* East Asian ideograph */ {"\x9E", 0, 0x213649}, /* East Asian ideograph */ {"\xA6", 0, 0x21364A}, /* East Asian ideograph */ {"\xAA", 0, 0x21364B}, /* East Asian ideograph */ {"\x8A", 0, 0x21364C}, /* East Asian ideograph */ {"\x84", 0, 0x21364D}, /* East Asian ideograph */ {"\x9C", 0, 0x21364E}, /* East Asian ideograph */ {"\x83", 0, 0x213650}, /* East Asian ideograph */ {"\xA1", 0, 0x213652}, /* East Asian ideograph */ {"\xA3", 0, 0x213654}, /* East Asian ideograph */ {"\x95", 0, 0x213655}, /* East Asian ideograph */ {"\xA4", 0, 0x213658}, /* East Asian ideograph */ {"\xBB", 0, 0x21365C}, /* East Asian ideograph */ {"\xBC", 0, 0x21365D}, /* East Asian ideograph */ {"\xBE", 0, 0x21366E}, /* East Asian ideograph */ {"\x93", 0, 0x21424F}, /* East Asian ideograph */ {"\xB5", 0, 0x21704B}, /* East Asian ideograph */ {"\xB3", 0, 0x21704D}, /* East Asian ideograph */ {"\x8C", 0, 0x21704E}, /* East Asian ideograph */ {"\xB6", 0, 0x21704F}, /* East Asian ideograph */ {"\x8D", 0, 0x217050}, /* East Asian ideograph */ {"\x9A", 0, 0x217051}, /* East Asian ideograph */ {"\x90", 0, 0x217055}, /* East Asian ideograph */ {"\x88", 0, 0x217058}, /* East Asian ideograph */ {"\x91", 0, 0x21705A}, /* East Asian ideograph */ {"\xA2", 0, 0x217060}, /* East Asian ideograph */ {"\x89", 0, 0x217064}, /* East Asian ideograph */ {"\x80", 0, 0x21706A}, /* East Asian ideograph */ {"\x85", 0, 0x217070}, /* East Asian ideograph */ {"\x81", 0, 0x21707B}, /* East Asian ideograph */ {"\xA5", 0, 0x21707D}, /* East Asian ideograph */ {"\xB7", 0, 0x217125}, /* East Asian ideograph */ {"\x99", 0, 0x21714B}, /* East Asian ideograph */ {"\xAC", 0, 0x273678}, /* East Asian ideograph */ {"\xA7", 0, 0x273727}, /* East Asian ideograph */ {"\xB8", 0, 0x273733}, /* East Asian ideograph */ {"\xAD", 0, 0x27375C}, /* East Asian ideograph */ {"\xAE", 0, 0x277345}, /* East Asian ideograph */ {"\x97", 0, 0x2D3644}, /* East Asian ideograph */ {"\x9F", 0, 0x2D424F}, /* East Asian ideograph */ {"\x94", 0, 0x39424F}, /* East Asian ideograph */ {"\x9D", 0, 0x69533B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page35 = { marc8r_31page35_flat, 0 }; /* PAGE 34 */ struct yaz_iconv_trie_flat marc8r_31page34_flat[] = { {"\x81", 0, 0x213634}, /* East Asian ideograph */ {"\x90", 0, 0x213636}, /* East Asian ideograph */ {"\x94", 0, 0x213638}, /* East Asian ideograph */ {"\x86", 0, 0x213641}, /* East Asian ideograph */ {"\x89", 0, 0x213642}, /* East Asian ideograph */ {"\xB3", 0, 0x213645}, /* East Asian ideograph */ {"\xB7", 0, 0x213647}, /* East Asian ideograph (Version J extension) */ {"\xB1", 0, 0x21364F}, /* East Asian ideograph */ {"\xAC", 0, 0x213651}, /* East Asian ideograph */ {"\xBE", 0, 0x213653}, /* East Asian ideograph */ {"\xAF", 0, 0x213656}, /* East Asian ideograph */ {"\xAE", 0, 0x213657}, /* East Asian ideograph */ {"\xB8", 0, 0x213659}, /* East Asian ideograph */ {"\xA7", 0, 0x21365E}, /* East Asian ideograph */ {"\x9A", 0, 0x216F7B}, /* East Asian ideograph */ {"\x87", 0, 0x216F7D}, /* East Asian ideograph */ {"\x97", 0, 0x217023}, /* East Asian ideograph */ {"\x8A", 0, 0x21702B}, /* East Asian ideograph */ {"\x98", 0, 0x21702E}, /* East Asian ideograph */ {"\x84", 0, 0x217030}, /* East Asian ideograph */ {"\x88", 0, 0x217034}, /* East Asian ideograph */ {"\x8E", 0, 0x21703E}, /* East Asian ideograph */ {"\xA3", 0, 0x217044}, /* East Asian ideograph */ {"\x8F", 0, 0x217046}, /* East Asian ideograph */ {"\x91", 0, 0x217047}, /* East Asian ideograph */ {"\xBC", 0, 0x217053}, /* East Asian ideograph */ {"\xB9", 0, 0x217057}, /* East Asian ideograph */ {"\xAD", 0, 0x217059}, /* East Asian ideograph */ {"\xAA", 0, 0x21705D}, /* East Asian ideograph */ {"\xB6", 0, 0x217061}, /* East Asian ideograph */ {"\xB0", 0, 0x217068}, /* East Asian ideograph */ {"\xB5", 0, 0x21706B}, /* East Asian ideograph */ {"\xBF", 0, 0x217079}, /* East Asian ideograph */ {"\xA4", 0, 0x27366D}, /* East Asian ideograph */ {"\xA0", 0, 0x273732}, /* East Asian ideograph */ {"\xA2", 0, 0x277169}, /* East Asian ideograph */ {"\x9B", 0, 0x277234}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page34 = { marc8r_31page34_flat, 0 }; /* PAGE 33 */ struct yaz_iconv_trie_flat marc8r_31page33_flat[] = { {"\x80", 0, 0x213624}, /* East Asian ideograph */ {"\x87", 0, 0x213628}, /* East Asian ideograph */ {"\x89", 0, 0x213629}, /* East Asian ideograph */ {"\x84", 0, 0x21362A}, /* East Asian ideograph */ {"\x82", 0, 0x21362B}, /* East Asian ideograph */ {"\x81", 0, 0x21362D}, /* East Asian ideograph */ {"\x8E", 0, 0x21362F}, /* East Asian ideograph */ {"\x88", 0, 0x213633}, /* East Asian ideograph */ {"\xBC", 0, 0x213635}, /* East Asian ideograph */ {"\xAA", 0, 0x213637}, /* East Asian ideograph */ {"\xBA", 0, 0x213639}, /* East Asian ideograph */ {"\xA5", 0, 0x21363A}, /* East Asian ideograph */ {"\xAE", 0, 0x21363B}, /* East Asian ideograph */ {"\xB2", 0, 0x21363C}, /* East Asian ideograph */ {"\xA8", 0, 0x21363D}, /* East Asian ideograph */ {"\xA1", 0, 0x21363E}, /* East Asian ideograph */ {"\xA9", 0, 0x21363F}, /* East Asian ideograph */ {"\xAD", 0, 0x213640}, /* East Asian ideograph */ {"\xA6", 0, 0x213643}, /* East Asian ideograph */ {"\x8F", 0, 0x216F5C}, /* East Asian ideograph */ {"\x9E", 0, 0x216F6B}, /* East Asian ideograph */ {"\x96", 0, 0x216F6C}, /* East Asian ideograph */ {"\x86", 0, 0x216F74}, /* East Asian ideograph */ {"\xA2", 0, 0x216F7C}, /* East Asian ideograph */ {"\xBD", 0, 0x217024}, /* East Asian ideograph */ {"\xA7", 0, 0x217025}, /* East Asian ideograph */ {"\xB3", 0, 0x217027}, /* East Asian ideograph */ {"\xA4", 0, 0x21702A}, /* East Asian ideograph */ {"\xBF", 0, 0x21702D}, /* East Asian ideograph */ {"\xAF", 0, 0x217032}, /* East Asian ideograph */ {"\xB6", 0, 0x217038}, /* East Asian ideograph */ {"\xB7", 0, 0x217039}, /* East Asian ideograph */ {"\x91", 0, 0x273649}, /* East Asian ideograph */ {"\x9F", 0, 0x273671}, /* East Asian ideograph */ {"\x9D", 0, 0x273747}, /* East Asian ideograph */ {"\x8D", 0, 0x276036}, /* East Asian ideograph */ {"\x94", 0, 0x277239}, /* East Asian ideograph */ {"\x93", 0, 0x277255}, /* East Asian ideograph */ {"\x92", 0, 0x277272}, /* East Asian ideograph */ {"\x95", 0, 0x27727A}, /* East Asian ideograph */ {"\x99", 0, 0x27727E}, /* East Asian ideograph */ {"\x9C", 0, 0x277328}, /* East Asian ideograph */ {"\x97", 0, 0x335941}, /* East Asian ideograph */ {"\x8C", 0, 0x4B357B}, /* East Asian ideograph */ {"\x98", 0, 0x695326}, /* East Asian ideograph */ {"\x90", 0, 0x705F51}, /* East Asian ideograph */ {"\x9A", 0, 0x705F61}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page33 = { marc8r_31page33_flat, 0 }; /* PAGE 32 */ struct yaz_iconv_trie_flat marc8r_31page32_flat[] = { {"\x95", 0, 0x21356B}, /* East Asian ideograph */ {"\x96", 0, 0x21356D}, /* East Asian ideograph */ {"\x92", 0, 0x213571}, /* East Asian ideograph */ {"\x84", 0, 0x213572}, /* East Asian ideograph */ {"\x86", 0, 0x213575}, /* East Asian ideograph */ {"\x8B", 0, 0x213576}, /* East Asian ideograph */ {"\x8C", 0, 0x213577}, /* East Asian ideograph */ {"\x90", 0, 0x213578}, /* East Asian ideograph */ {"\x9A", 0, 0x21357C}, /* East Asian ideograph */ {"\x8E", 0, 0x21357D}, /* East Asian ideograph */ {"\xA9", 0, 0x21357E}, /* East Asian ideograph */ {"\xAA", 0, 0x213621}, /* East Asian ideograph */ {"\xA8", 0, 0x213622}, /* East Asian ideograph */ {"\xAC", 0, 0x213623}, /* East Asian ideograph */ {"\xB3", 0, 0x213625}, /* East Asian ideograph */ {"\xA6", 0, 0x213626}, /* East Asian ideograph */ {"\xAB", 0, 0x213627}, /* East Asian ideograph */ {"\xB1", 0, 0x213630}, /* East Asian ideograph */ {"\xBB", 0, 0x213631}, /* East Asian ideograph */ {"\xAF", 0, 0x213632}, /* East Asian ideograph */ {"\x9C", 0, 0x216F2F}, /* East Asian ideograph */ {"\x88", 0, 0x216F35}, /* East Asian ideograph */ {"\x82", 0, 0x216F39}, /* East Asian ideograph */ {"\x91", 0, 0x216F3B}, /* East Asian ideograph */ {"\x94", 0, 0x216F42}, /* East Asian ideograph */ {"\x8D", 0, 0x216F49}, /* East Asian ideograph */ {"\xA4", 0, 0x216F55}, /* East Asian ideograph */ {"\xA1", 0, 0x216F58}, /* East Asian ideograph */ {"\xAD", 0, 0x216F5A}, /* East Asian ideograph */ {"\xBA", 0, 0x216F5B}, /* East Asian ideograph */ {"\xBE", 0, 0x216F5E}, /* East Asian ideograph */ {"\xA5", 0, 0x216F60}, /* East Asian ideograph */ {"\xA7", 0, 0x216F63}, /* East Asian ideograph */ {"\xB5", 0, 0x216F64}, /* East Asian ideograph */ {"\xA2", 0, 0x216F66}, /* East Asian ideograph */ {"\xBC", 0, 0x216F69}, /* East Asian ideograph */ {"\xB7", 0, 0x216F6A}, /* East Asian ideograph */ {"\xAE", 0, 0x216F6D}, /* East Asian ideograph */ {"\xBF", 0, 0x216F71}, /* East Asian ideograph */ {"\x80", 0, 0x27373D}, /* East Asian ideograph */ {"\x9B", 0, 0x27374E}, /* East Asian ideograph */ {"\x99", 0, 0x273756}, /* East Asian ideograph */ {"\xB8", 0, 0x276250}, /* East Asian ideograph */ {"\xBD", 0, 0x2D3758}, /* East Asian ideograph */ {"\x8F", 0, 0x2D584D}, /* East Asian ideograph */ {"\xB2", 0, 0x334F71}, /* East Asian ideograph */ {"\x9D", 0, 0x705F50}, /* East Asian ideograph */ {"\xB4", 0, 0x705F54}, /* East Asian ideograph */ {"\xA3", 0, 0x705F5B}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page32 = { marc8r_31page32_flat, 0 }; /* PAGE 31 */ struct yaz_iconv_trie_flat marc8r_31page31_flat[] = { {"\x8E", 0, 0x213551}, /* East Asian ideograph */ {"\x80", 0, 0x213554}, /* East Asian ideograph */ {"\x86", 0, 0x213556}, /* East Asian ideograph */ {"\x83", 0, 0x213558}, /* East Asian ideograph */ {"\x8A", 0, 0x21355F}, /* East Asian ideograph */ {"\x88", 0, 0x213560}, /* East Asian ideograph */ {"\x82", 0, 0x213564}, /* East Asian ideograph */ {"\xB3", 0, 0x213568}, /* East Asian ideograph */ {"\xA2", 0, 0x213569}, /* East Asian ideograph */ {"\xB5", 0, 0x21356A}, /* East Asian ideograph */ {"\xB8", 0, 0x21356C}, /* East Asian ideograph */ {"\xB7", 0, 0x21356E}, /* East Asian ideograph */ {"\xBB", 0, 0x21356F}, /* East Asian ideograph */ {"\xBC", 0, 0x213573}, /* East Asian ideograph */ {"\xA8", 0, 0x213574}, /* East Asian ideograph */ {"\xBD", 0, 0x213579}, /* East Asian ideograph */ {"\xB6", 0, 0x21357A}, /* East Asian ideograph */ {"\xB1", 0, 0x21357B}, /* East Asian ideograph */ {"\x8C", 0, 0x216E6C}, /* East Asian ideograph */ {"\x85", 0, 0x216E6D}, /* East Asian ideograph */ {"\x94", 0, 0x216E79}, /* East Asian ideograph */ {"\x8F", 0, 0x216F21}, /* East Asian ideograph */ {"\x9F", 0, 0x216F2E}, /* East Asian ideograph */ {"\xBF", 0, 0x216F37}, /* East Asian ideograph */ {"\xAD", 0, 0x216F3A}, /* East Asian ideograph */ {"\xAB", 0, 0x216F43}, /* East Asian ideograph */ {"\xA3", 0, 0x216F4A}, /* East Asian ideograph */ {"\xB4", 0, 0x216F4B}, /* East Asian ideograph */ {"\xA6", 0, 0x216F52}, /* East Asian ideograph */ {"\xA4", 0, 0x216F53}, /* East Asian ideograph */ {"\xB2", 0, 0x216F67}, /* East Asian ideograph */ {"\xB0", 0, 0x216F68}, /* East Asian ideograph */ {"\x98", 0, 0x27363E}, /* East Asian ideograph */ {"\x9C", 0, 0x273721}, /* East Asian ideograph */ {"\x9B", 0, 0x273722}, /* East Asian ideograph */ {"\x95", 0, 0x27372E}, /* East Asian ideograph */ {"\x93", 0, 0x273762}, /* East Asian ideograph */ {"\x99", 0, 0x276F69}, /* East Asian ideograph */ {"\x97", 0, 0x277030}, /* East Asian ideograph */ {"\x92", 0, 0x277267}, /* East Asian ideograph */ {"\x96", 0, 0x27734C}, /* East Asian ideograph */ {"\xAA", 0, 0x2D3571}, /* East Asian ideograph */ {"\x89", 0, 0x33355C}, /* East Asian ideograph */ {"\x8B", 0, 0x4D386F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page31 = { marc8r_31page31_flat, 0 }; /* PAGE 30 */ struct yaz_iconv_trie_dir marc8r_31page30_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x275055} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213547} /* East Asian ideograph */, {0, 0, 0x213546} /* East Asian ideograph */, {0, 0, 0x33365A} /* East Asian ideograph */, {0, 0, 0x21354A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275E5D} /* East Asian ideograph */, {0, 0, 0x213540} /* East Asian ideograph */, {0, 0, 0x213544} /* East Asian ideograph */, {0, 0, 0x21353F} /* East Asian ideograph */, {0, 0, 0x213543} /* East Asian ideograph */, {0, 0, 0x213545} /* East Asian ideograph */, {0, 0, 0x273D65} /* East Asian ideograph */, {0, 0, 0x213542} /* East Asian ideograph */, {0, 0, 0x213541} /* East Asian ideograph */, {0, 0, 0x273755} /* East Asian ideograph */, {0, 0, 0x213548} /* East Asian ideograph */, {0, 0, 0x273751} /* East Asian ideograph */, {0, 0, 0x216E61} /* East Asian ideograph */, {0, 0, 0x333564} /* East Asian ideograph */, {0, 0, 0x705F39} /* East Asian ideograph */, {0, 0, 0x27367A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x216E6F} /* East Asian ideograph */, {0, 0, 0x213550} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x21354E} /* East Asian ideograph */, {0, 0, 0x21354F} /* East Asian ideograph */, {0, 0, 0x213566} /* East Asian ideograph */, {0, 0, 0x21355A} /* East Asian ideograph */, {0, 0, 0x216E76} /* East Asian ideograph */, {0, 0, 0x216F26} /* East Asian ideograph */, {0, 0, 0x216F27} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x213559} /* East Asian ideograph */, {0, 0, 0x213553} /* East Asian ideograph */, {0, 0, 0x273744} /* East Asian ideograph */, {0, 0, 0x213567} /* East Asian ideograph */, {0, 0, 0x216F24} /* East Asian ideograph */, {0, 0, 0x213565} /* East Asian ideograph */, {0, 0, 0x27527B} /* East Asian ideograph */, {0, 0, 0x21354D} /* East Asian ideograph */, {0, 0, 0x21355E} /* East Asian ideograph */, {0, 0, 0x27424F} /* East Asian ideograph */, {0, 0, 0x216E78} /* East Asian ideograph */, {0, 0, 0x213555} /* East Asian ideograph */, {0, 0, 0x216E70} /* East Asian ideograph */, {0, 0, 0x21355C} /* East Asian ideograph */, {0, 0, 0x2D355C} /* East Asian ideograph */, {0, 0, 0x21355D} /* East Asian ideograph */, {0, 0, 0x21355B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213562} /* East Asian ideograph */, {0, 0, 0x213563} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213561} /* East Asian ideograph */, {0, 0, 0x213557} /* East Asian ideograph */, {0, 0, 0x216E7D} /* East Asian ideograph */, {0, 0, 0x213552} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page30 = { 0, marc8r_31page30_dir }; /* PAGE 29 */ struct yaz_iconv_trie_flat marc8r_31page29_flat[] = { {"\x84", 0, 0x213475}, /* East Asian ideograph */ {"\x9A", 0, 0x213476}, /* East Asian ideograph */ {"\x9D", 0, 0x213477}, /* East Asian ideograph */ {"\x9F", 0, 0x213478}, /* East Asian ideograph */ {"\xA5", 0, 0x213479}, /* East Asian ideograph */ {"\xAD", 0, 0x21347A}, /* East Asian ideograph */ {"\xB2", 0, 0x21347B}, /* East Asian ideograph */ {"\xBB", 0, 0x21347C}, /* East Asian ideograph */ {"\x80", 0, 0x216D5D}, /* East Asian ideograph */ {"\x8E", 0, 0x216D64}, /* East Asian ideograph */ {"\x93", 0, 0x216D66}, /* East Asian ideograph */ {"\x94", 0, 0x216D67}, /* East Asian ideograph */ {"\x99", 0, 0x216D6D}, /* East Asian ideograph */ {"\xA4", 0, 0x216D7A}, /* East Asian ideograph */ {"\xAB", 0, 0x216D7B}, /* East Asian ideograph */ {"\xB5", 0, 0x216E2C}, /* East Asian ideograph */ {"\xB9", 0, 0x216E2E}, /* East Asian ideograph */ {"\xAF", 0, 0x222D56}, /* East Asian ideograph */ {"\x8C", 0, 0x27347A}, /* East Asian ideograph */ {"\x89", 0, 0x27347B}, /* East Asian ideograph */ {"\x8B", 0, 0x273869}, /* East Asian ideograph */ {"\x95", 0, 0x273C7E}, /* East Asian ideograph */ {"\x82", 0, 0x273D2C}, /* East Asian ideograph */ {"\x85", 0, 0x273D2F}, /* East Asian ideograph */ {"\x86", 0, 0x274349}, /* East Asian ideograph (duplicate simplified) */ {"\xB6", 0, 0x274F25}, /* East Asian ideograph */ {"\xBF", 0, 0x275164}, /* East Asian ideograph (variant of EACC 455164) */ {"\x98", 0, 0x275D3D}, /* East Asian ideograph */ {"\x8D", 0, 0x276D6D}, /* East Asian ideograph */ {"\xA3", 0, 0x276E2A}, /* East Asian ideograph */ {"\xA2", 0, 0x2D3C7D}, /* East Asian ideograph */ {"\xA0", 0, 0x2D3C7E}, /* East Asian ideograph */ {"\xAE", 0, 0x2D3D29}, /* East Asian ideograph */ {"\x96", 0, 0x2D3D2D}, /* East Asian ideograph */ {"\x9B", 0, 0x2D3D2F}, /* East Asian ideograph */ {"\xA8", 0, 0x333D28}, /* East Asian ideograph */ {"\xA9", 0, 0x3A284C}, /* East Asian ideograph (variant of EACC 4C284C) */ {"\xB3", 0, 0x4B375A}, /* East Asian ideograph */ {"\xA6", 0, 0x4B3D24}, /* East Asian ideograph */ {"\xB0", 0, 0x4B3D2C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page29 = { marc8r_31page29_flat, 0 }; /* PAGE 28 */ struct yaz_iconv_trie_dir marc8r_31page28_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x213455} /* East Asian ideograph */, {0, 0, 0x213457} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213458} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213459} /* East Asian ideograph */, {0, 0, 0x27345F} /* East Asian ideograph */, {0, 0, 0x21345B} /* East Asian ideograph */, {0, 0, 0x21345A} /* East Asian ideograph */, {0, 0, 0x21345D} /* East Asian ideograph (variant of EACC 2D345D) */, {0, 0, 0x21345C} /* East Asian ideograph */, {0, 0, 0x39302D} /* East Asian ideograph */, {0, 0, 0x216D41} /* East Asian ideograph */, {0, 0, 0x216D42} /* East Asian ideograph */, {0, 0, 0x27553C} /* East Asian ideograph */, {0, 0, 0x273460} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213462} /* East Asian ideograph */, {0, 0, 0x21345F} /* East Asian ideograph */, {0, 0, 0x213461} /* East Asian ideograph */, {0, 0, 0x213460} /* East Asian ideograph */, {0, 0, 0x273668} /* East Asian ideograph */, {0, 0, 0x275A2F} /* East Asian ideograph */, {0, 0, 0x213463} /* East Asian ideograph */, {0, 0, 0x4B3668} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213464} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275573} /* East Asian ideograph */, {0, 0, 0x216D4B} /* East Asian ideograph */, {0, 0, 0x213466} /* East Asian ideograph */, {0, 0, 0x216E58} /* East Asian ideograph */, {0, 0, 0x27313C} /* East Asian ideograph */, {0, 0, 0x213467} /* East Asian ideograph */, {0, 0, 0x274D3F} /* East Asian ideograph */, {0, 0, 0x216D4C} /* East Asian ideograph */, {0, 0, 0x295D3C} /* East Asian ideograph */, {0, 0, 0x216D4E} /* East Asian ideograph */, {0, 0, 0x213469} /* East Asian ideograph */, {0, 0, 0x2D5424} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275C6B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275749} /* East Asian ideograph */, {0, 0, 0x216D53} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x21346B} /* East Asian ideograph */, {0, 0, 0x21346A} /* East Asian ideograph */, {0, 0, 0x21346C} /* East Asian ideograph */, {0, 0, 0x21346D} /* East Asian ideograph */, {0, 0, 0x216D57} /* East Asian ideograph */, {0, 0, 0x2D346E} /* East Asian ideograph */, {0, 0, 0x2D3473} /* East Asian ideograph */, {0, 0, 0x21346F} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27407B} /* East Asian ideograph */, {0, 0, 0x213471} /* East Asian ideograph */, {0, 0, 0x3F3E47} /* East Asian ideograph */, {0, 0, 0x216D58} /* East Asian ideograph */, {0, 0, 0x213473} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x21346E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213474} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page28 = { 0, marc8r_31page28_dir }; /* PAGE 27 */ struct yaz_iconv_trie_flat marc8r_31page27_flat[] = { {"\xB5", 0, 0x21344B}, /* East Asian ideograph */ {"\x83", 0, 0x21347D}, /* East Asian ideograph */ {"\x88", 0, 0x21347E}, /* East Asian ideograph */ {"\x89", 0, 0x213521}, /* East Asian ideograph */ {"\x8B", 0, 0x213522}, /* East Asian ideograph */ {"\x8A", 0, 0x213523}, /* East Asian ideograph */ {"\x8D", 0, 0x213524}, /* East Asian ideograph */ {"\x96", 0, 0x213525}, /* East Asian ideograph */ {"\x94", 0, 0x213526}, /* East Asian ideograph */ {"\x97", 0, 0x213527}, /* East Asian ideograph */ {"\x9B", 0, 0x213528}, /* East Asian ideograph */ {"\x9F", 0, 0x213529}, /* East Asian ideograph */ {"\xA2", 0, 0x21352B}, /* East Asian ideograph */ {"\xA3", 0, 0x21352C}, /* East Asian ideograph */ {"\xB8", 0, 0x21352D}, /* East Asian ideograph */ {"\xA4", 0, 0x21352E}, /* East Asian ideograph */ {"\xAE", 0, 0x21352F}, /* East Asian ideograph */ {"\xAF", 0, 0x213530}, /* East Asian ideograph */ {"\xA9", 0, 0x213531}, /* East Asian ideograph */ {"\xB3", 0, 0x213532}, /* East Asian ideograph */ {"\xBC", 0, 0x213533}, /* East Asian ideograph */ {"\xA8", 0, 0x213534}, /* East Asian ideograph */ {"\xA6", 0, 0x213535}, /* East Asian ideograph */ {"\xAC", 0, 0x213536}, /* East Asian ideograph */ {"\xAB", 0, 0x213537}, /* East Asian ideograph */ {"\xB0", 0, 0x213538}, /* East Asian ideograph (duplicate simplified) */ {"\xA5", 0, 0x213539}, /* East Asian ideograph */ {"\xB1", 0, 0x21353A}, /* East Asian ideograph */ {"\xAD", 0, 0x21353B}, /* East Asian ideograph */ {"\xAA", 0, 0x21353C}, /* East Asian ideograph */ {"\xB2", 0, 0x21353D}, /* East Asian ideograph */ {"\x90", 0, 0x216E3E}, /* East Asian ideograph */ {"\x9A", 0, 0x216E48}, /* East Asian ideograph */ {"\xBB", 0, 0x216E57}, /* East Asian ideograph */ {"\x82", 0, 0x27347D}, /* East Asian ideograph */ {"\xB9", 0, 0x27372C}, /* East Asian ideograph */ {"\xBD", 0, 0x273740}, /* East Asian ideograph */ {"\x91", 0, 0x274C7B}, /* East Asian ideograph */ {"\xB6", 0, 0x27554F}, /* East Asian ideograph */ {"\xB7", 0, 0x27564A}, /* East Asian ideograph */ {"\x98", 0, 0x27594B}, /* East Asian ideograph */ {"\x8C", 0, 0x275F4E}, /* East Asian ideograph */ {"\x99", 0, 0x2D4249}, /* East Asian ideograph */ {"\xA0", 0, 0x2D4C3C}, /* East Asian ideograph */ {"\xA1", 0, 0x2D4D65}, /* East Asian ideograph */ {"\x81", 0, 0x33347D}, /* East Asian ideograph */ {"\x9C", 0, 0x333529}, /* East Asian ideograph */ {"\x8E", 0, 0x33423D}, /* East Asian ideograph */ {"\xBA", 0, 0x69525D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page27 = { marc8r_31page27_flat, 0 }; /* PAGE 26 */ struct yaz_iconv_trie_flat marc8r_31page26_flat[] = { {"\x85", 0, 0x213441}, /* East Asian ideograph */ {"\x86", 0, 0x213442}, /* East Asian ideograph */ {"\x88", 0, 0x213443}, /* East Asian ideograph */ {"\x8D", 0, 0x213444}, /* East Asian ideograph */ {"\x90", 0, 0x213445}, /* East Asian ideograph */ {"\x8F", 0, 0x213446}, /* East Asian ideograph */ {"\x95", 0, 0x213447}, /* East Asian ideograph */ {"\x96", 0, 0x213448}, /* East Asian ideograph */ {"\x97", 0, 0x213449}, /* East Asian ideograph */ {"\x99", 0, 0x21344A}, /* East Asian ideograph */ {"\x9D", 0, 0x21344C}, /* East Asian ideograph */ {"\xA1", 0, 0x21344D}, /* East Asian ideograph */ {"\xA0", 0, 0x21344E}, /* East Asian ideograph */ {"\xA3", 0, 0x21344F}, /* East Asian ideograph */ {"\xAA", 0, 0x213450}, /* East Asian ideograph */ {"\xAF", 0, 0x213451}, /* East Asian ideograph */ {"\xB1", 0, 0x213452}, /* East Asian ideograph */ {"\xB9", 0, 0x213453}, /* East Asian ideograph */ {"\xBE", 0, 0x213454}, /* East Asian ideograph */ {"\xBF", 0, 0x213456}, /* East Asian ideograph */ {"\x87", 0, 0x216C69}, /* East Asian ideograph */ {"\x83", 0, 0x216C6A}, /* East Asian ideograph */ {"\x8A", 0, 0x216C6E}, /* East Asian ideograph */ {"\x8B", 0, 0x216C6F}, /* East Asian ideograph */ {"\x91", 0, 0x216C77}, /* East Asian ideograph */ {"\x9A", 0, 0x216D23}, /* East Asian ideograph */ {"\x9C", 0, 0x216D24}, /* East Asian ideograph */ {"\x9F", 0, 0x216D25}, /* East Asian ideograph */ {"\xAD", 0, 0x216D2E}, /* East Asian ideograph */ {"\xB0", 0, 0x216D33}, /* East Asian ideograph */ {"\xB5", 0, 0x216D36}, /* East Asian ideograph */ {"\xB8", 0, 0x216D3A}, /* East Asian ideograph */ {"\xBD", 0, 0x216D3E}, /* East Asian ideograph */ {"\xAE", 0, 0x273452}, /* East Asian ideograph */ {"\xBA", 0, 0x273455}, /* East Asian ideograph */ {"\xBB", 0, 0x275D31}, /* East Asian ideograph */ {"\xA6", 0, 0x276D2E}, /* East Asian ideograph */ {"\xB3", 0, 0x4B393F}, /* East Asian ideograph */ {"\x82", 0, 0x694677}, /* East Asian ideograph */ {"\x81", 0, 0x694C68}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page26 = { marc8r_31page26_flat, 0 }; /* PAGE 25 */ struct yaz_iconv_trie_flat marc8r_31page25_flat[] = { {"\x87", 0, 0x21342D}, /* East Asian ideograph */ {"\x83", 0, 0x21342E}, /* East Asian ideograph */ {"\x81", 0, 0x21342F}, /* East Asian ideograph */ {"\x89", 0, 0x213430}, /* East Asian ideograph */ {"\x98", 0, 0x213431}, /* East Asian ideograph */ {"\x92", 0, 0x213432}, /* East Asian ideograph */ {"\x99", 0, 0x213433}, /* East Asian ideograph */ {"\x95", 0, 0x213434}, /* East Asian ideograph */ {"\x9E", 0, 0x213435}, /* East Asian ideograph */ {"\x9B", 0, 0x213436}, /* East Asian ideograph */ {"\x9D", 0, 0x213437}, /* East Asian ideograph */ {"\xA2", 0, 0x213438}, /* East Asian ideograph */ {"\xA4", 0, 0x213439}, /* East Asian ideograph */ {"\x9F", 0, 0x21343A}, /* East Asian ideograph */ {"\xB5", 0, 0x21343C}, /* East Asian ideograph */ {"\xB8", 0, 0x21343D}, /* East Asian ideograph */ {"\xBB", 0, 0x21343E}, /* East Asian ideograph */ {"\xBF", 0, 0x213440}, /* East Asian ideograph */ {"\x97", 0, 0x214357}, /* East Asian ideograph */ {"\x8A", 0, 0x216C3C}, /* East Asian ideograph */ {"\x8D", 0, 0x216C3D}, /* East Asian ideograph */ {"\x90", 0, 0x216C40}, /* East Asian ideograph */ {"\x91", 0, 0x216C41}, /* East Asian ideograph */ {"\x94", 0, 0x216C46}, /* East Asian ideograph */ {"\x96", 0, 0x216C48}, /* East Asian ideograph */ {"\xA3", 0, 0x216C4C}, /* East Asian ideograph */ {"\xA1", 0, 0x216C4E}, /* East Asian ideograph */ {"\xA9", 0, 0x216C53}, /* East Asian ideograph */ {"\xB0", 0, 0x216C58}, /* East Asian ideograph */ {"\xB1", 0, 0x216C5A}, /* East Asian ideograph */ {"\xB7", 0, 0x216C5E}, /* East Asian ideograph */ {"\xB9", 0, 0x216C61}, /* East Asian ideograph */ {"\xBA", 0, 0x216C62}, /* East Asian ideograph */ {"\xBC", 0, 0x216C64}, /* East Asian ideograph */ {"\x8B", 0, 0x273436}, /* East Asian ideograph */ {"\xB3", 0, 0x2D3436}, /* East Asian ideograph */ {"\xA7", 0, 0x2D343D}, /* East Asian ideograph */ {"\xBE", 0, 0x2D3539}, /* East Asian ideograph */ {"\x85", 0, 0x2E363F}, /* East Asian ideograph */ {"\xA6", 0, 0x33337B}, /* East Asian ideograph */ {"\xA0", 0, 0x453F6D}, /* East Asian ideograph */ {"\xB2", 0, 0x4B3436}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page25 = { marc8r_31page25_flat, 0 }; /* PAGE 24 */ struct yaz_iconv_trie_flat marc8r_31page24_flat[] = { {"\x83", 0, 0x21337C}, /* East Asian ideograph */ {"\x88", 0, 0x21337D}, /* East Asian ideograph */ {"\x87", 0, 0x21337E}, /* East Asian ideograph */ {"\x8D", 0, 0x213421}, /* East Asian ideograph */ {"\x89", 0, 0x213422}, /* East Asian ideograph */ {"\x91", 0, 0x213423}, /* East Asian ideograph */ {"\x9B", 0, 0x213424}, /* East Asian ideograph */ {"\x9F", 0, 0x213425}, /* East Asian ideograph */ {"\xA0", 0, 0x213426}, /* East Asian ideograph */ {"\xA3", 0, 0x213427}, /* East Asian ideograph */ {"\xAB", 0, 0x213428}, /* East Asian ideograph */ {"\xA9", 0, 0x213429}, /* East Asian ideograph */ {"\xAC", 0, 0x21342A}, /* East Asian ideograph */ {"\xAA", 0, 0x21342B}, /* East Asian ideograph */ {"\xBE", 0, 0x21342C}, /* East Asian ideograph */ {"\x82", 0, 0x216B74}, /* East Asian ideograph */ {"\x81", 0, 0x216B75}, /* East Asian ideograph */ {"\x8C", 0, 0x216B79}, /* East Asian ideograph */ {"\x8A", 0, 0x216B7A}, /* East Asian ideograph */ {"\x90", 0, 0x216B7C}, /* East Asian ideograph */ {"\x93", 0, 0x216C21}, /* East Asian ideograph */ {"\x96", 0, 0x216C27}, /* East Asian ideograph */ {"\x98", 0, 0x216C29}, /* East Asian ideograph */ {"\x9A", 0, 0x216C2B}, /* East Asian ideograph */ {"\x99", 0, 0x216C2C}, /* East Asian ideograph */ {"\xA6", 0, 0x216C2E}, /* East Asian ideograph */ {"\xAD", 0, 0x216C31}, /* East Asian ideograph */ {"\xAE", 0, 0x216C33}, /* East Asian ideograph */ {"\xBB", 0, 0x216C37}, /* East Asian ideograph */ {"\xBC", 0, 0x216C38}, /* East Asian ideograph */ {"\xB2", 0, 0x27342F}, /* East Asian ideograph */ {"\xA1", 0, 0x273433}, /* East Asian ideograph */ {"\xA8", 0, 0x273434}, /* East Asian ideograph */ {"\xB3", 0, 0x273435}, /* East Asian ideograph */ {"\xBF", 0, 0x273438}, /* East Asian ideograph */ {"\xB1", 0, 0x27343C}, /* East Asian ideograph */ {"\x9D", 0, 0x27343D}, /* East Asian ideograph */ {"\x9E", 0, 0x275B5F}, /* East Asian ideograph */ {"\xB5", 0, 0x2D335F}, /* East Asian ideograph */ {"\x94", 0, 0x2D3421}, /* East Asian ideograph */ {"\xA2", 0, 0x2D343C}, /* East Asian ideograph */ {"\xB9", 0, 0x334243}, /* East Asian ideograph */ {"\xB4", 0, 0x4B3435}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page24 = { marc8r_31page24_flat, 0 }; /* PAGE 23 */ struct yaz_iconv_trie_flat marc8r_31page23_flat[] = { {"\x81", 0, 0x213366}, /* East Asian ideograph */ {"\x83", 0, 0x213368}, /* East Asian ideograph */ {"\x8D", 0, 0x213369}, /* East Asian ideograph */ {"\x8C", 0, 0x21336A}, /* East Asian ideograph */ {"\x8B", 0, 0x21336B}, /* East Asian ideograph */ {"\x8A", 0, 0x21336C}, /* East Asian ideograph */ {"\x87", 0, 0x21336D}, /* East Asian ideograph */ {"\x9C", 0, 0x21336E}, /* East Asian ideograph */ {"\x96", 0, 0x21336F}, /* East Asian ideograph */ {"\x9B", 0, 0x213370}, /* East Asian ideograph */ {"\x94", 0, 0x213371}, /* East Asian ideograph */ {"\x9D", 0, 0x213372}, /* East Asian ideograph */ {"\xAA", 0, 0x213373}, /* East Asian ideograph */ {"\xAF", 0, 0x213374}, /* East Asian ideograph */ {"\xB2", 0, 0x213375}, /* East Asian ideograph */ {"\xB4", 0, 0x213376}, /* East Asian ideograph */ {"\xA9", 0, 0x213377}, /* East Asian ideograph */ {"\xB5", 0, 0x213378}, /* East Asian ideograph */ {"\xBD", 0, 0x21337A}, /* East Asian ideograph */ {"\xBF", 0, 0x21337B}, /* East Asian ideograph */ {"\x84", 0, 0x216B3E}, /* East Asian ideograph */ {"\x89", 0, 0x216B43}, /* East Asian ideograph */ {"\xA0", 0, 0x216B47}, /* East Asian ideograph */ {"\x9A", 0, 0x216B4B}, /* East Asian ideograph */ {"\x92", 0, 0x216B4C}, /* East Asian ideograph */ {"\x9E", 0, 0x216B4D}, /* East Asian ideograph */ {"\x9F", 0, 0x216B50}, /* East Asian ideograph */ {"\x95", 0, 0x216B53}, /* East Asian ideograph */ {"\xAE", 0, 0x216B5B}, /* East Asian ideograph */ {"\xA8", 0, 0x216B5E}, /* East Asian ideograph */ {"\xB8", 0, 0x216B6B}, /* East Asian ideograph */ {"\x80", 0, 0x273376}, /* East Asian ideograph */ {"\xA7", 0, 0x27337E}, /* East Asian ideograph */ {"\x91", 0, 0x273421}, /* East Asian ideograph */ {"\x82", 0, 0x273423}, /* East Asian ideograph */ {"\x90", 0, 0x276B5B}, /* East Asian ideograph */ {"\xA5", 0, 0x2D3372}, /* East Asian ideograph */ {"\xB3", 0, 0x2D6B5F}, /* East Asian ideograph */ {"\xA1", 0, 0x2E3172}, /* East Asian ideograph */ {"\xB0", 0, 0x333377}, /* East Asian ideograph */ {"\xA4", 0, 0x333423}, /* East Asian ideograph */ {"\x97", 0, 0x335E2F}, /* East Asian ideograph */ {"\x8F", 0, 0x336B33}, /* East Asian ideograph */ {"\xB7", 0, 0x395E2F}, /* East Asian ideograph */ {"\x99", 0, 0x396B33}, /* East Asian ideograph */ {"\xB1", 0, 0x453421}, /* East Asian ideograph */ {"\xA3", 0, 0x4B3421}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page23 = { marc8r_31page23_flat, 0 }; /* PAGE 22 */ struct yaz_iconv_trie_dir marc8r_31page22_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x21334F} /* East Asian ideograph */, {0, 0, 0x213350} /* East Asian ideograph */, {0, 0, 0x2D334F} /* East Asian ideograph */, {0, 0, 0x213351} /* East Asian ideograph */, {0, 0, 0x4B3351} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213353} /* East Asian ideograph */, {0, 0, 0x213352} /* East Asian ideograph */, {0, 0, 0x213354} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213355} /* East Asian ideograph */, {0, 0, 0x4B3355} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27545C} /* East Asian ideograph */, {0, 0, 0x213359} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x213356} /* East Asian ideograph */, {0, 0, 0x27337C} /* East Asian ideograph */, {0, 0, 0x216B24} /* East Asian ideograph */, {0, 0, 0x2D4029} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x216B26} /* East Asian ideograph */, {0, 0, 0x213357} /* East Asian ideograph */, {0, 0, 0x273422} /* East Asian ideograph */, {0, 0, 0x27336D} /* East Asian ideograph */, {0, 0, 0x273370} /* East Asian ideograph */, {0, 0, 0x273378} /* East Asian ideograph */, {0, 0, 0x216B2A} /* East Asian ideograph */, {0, 0, 0x21574E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x396B2F} /* East Asian ideograph */, {0, 0, 0x21335C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x21335A} /* East Asian ideograph */, {0, 0, 0x21335B} /* East Asian ideograph */, {0, 0, 0x2D3428} /* East Asian ideograph */, {0, 0, 0x393428} /* East Asian ideograph */, {0, 0, 0x21335D} /* East Asian ideograph */, {0, 0, 0x21335E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x4B335B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x276B3E} /* East Asian ideograph */, {0, 0, 0x27605E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213362} /* East Asian ideograph */, {0, 0, 0x216B33} /* East Asian ideograph */, {0, 0, 0x216B37} /* East Asian ideograph */, {0, 0, 0x216B39} /* East Asian ideograph */, {0, 0, 0x2D3366} /* East Asian ideograph */, {0, 0, 0x216B36} /* East Asian ideograph */, {0, 0, 0x27576C} /* East Asian ideograph */, {0, 0, 0x213361} /* East Asian ideograph */, {0, 0, 0x21335F} /* East Asian ideograph */, {0, 0, 0x213367} /* East Asian ideograph */, {0, 0, 0x213363} /* East Asian ideograph */, {0, 0, 0x213360} /* East Asian ideograph */, {0, 0, 0x333428} /* East Asian ideograph */, {0, 0, 0x276B7A} /* East Asian ideograph */, {0, 0, 0x4B576C} /* East Asian ideograph */, {0, 0, 0x276B79} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page22 = { 0, marc8r_31page22_dir }; /* PAGE 21 */ struct yaz_iconv_trie_dir marc8r_31page21_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {81, 0, 0}, {82, 0, 0}, {83, 0, 0}, {84, 0, 0}, {85, 0, 0}, {86, 0, 0}, {87, 0, 0}, {88, 0, 0}, {89, 0, 0}, {90, 0, 0}, {91, 0, 0}, {92, 0, 0}, {93, 0, 0}, {94, 0, 0}, {95, 0, 0}, {96, 0, 0}, {97, 0, 0}, {98, 0, 0}, {99, 0, 0}, {100, 0, 0}, {101, 0, 0}, {102, 0, 0}, {103, 0, 0}, {104, 0, 0}, {105, 0, 0}, {106, 0, 0}, {107, 0, 0}, {80, 0, 0}, {79, 0, 0}, {108, 0, 0}, {109, 0, 0}, {110, 0, 0}, {111, 0, 0}, {112, 0, 0}, {113, 0, 0}, {114, 0, 0}, {115, 0, 0}, {116, 0, 0}, {117, 0, 0}, {118, 0, 0}, {119, 0, 0}, {120, 0, 0}, {121, 0, 0}, {122, 0, 0}, {123, 0, 0}, {124, 0, 0}, {125, 0, 0}, {126, 0, 0}, {127, 0, 0}, {128, 0, 0}, {129, 0, 0}, {130, 0, 0}, {132, 0, 0}, {131, 0, 0}, {133, 0, 0}, {134, 0, 0}, {136, 0, 0}, {135, 0, 0}, {138, 0, 0}, {137, 0, 0}, {139, 0, 0}, {140, 0, 0}, {141, 0, 0}, {142, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page21 = { 0, marc8r_31page21_dir }; /* PAGE 20 */ struct yaz_iconv_trie_flat marc8r_31page20_flat[] = { {"\x80", 0, 0x21332E}, /* East Asian ideograph */ {"\x89", 0, 0x21332F}, /* East Asian ideograph */ {"\x8C", 0, 0x213330}, /* East Asian ideograph */ {"\x8D", 0, 0x213331}, /* East Asian ideograph */ {"\x92", 0, 0x213332}, /* East Asian ideograph */ {"\x91", 0, 0x213333}, /* East Asian ideograph */ {"\x95", 0, 0x213334}, /* East Asian ideograph */ {"\x97", 0, 0x213336}, /* East Asian ideograph */ {"\xA0", 0, 0x213337}, /* East Asian ideograph */ {"\xA5", 0, 0x213339}, /* East Asian ideograph */ {"\xB0", 0, 0x21333C}, /* East Asian ideograph */ {"\xB6", 0, 0x21333D}, /* East Asian ideograph */ {"\xB7", 0, 0x21333E}, /* East Asian ideograph */ {"\x87", 0, 0x216425}, /* East Asian ideograph */ {"\x82", 0, 0x216967}, /* East Asian ideograph */ {"\x84", 0, 0x216969}, /* East Asian ideograph */ {"\x8F", 0, 0x21696E}, /* East Asian ideograph */ {"\x94", 0, 0x216970}, /* East Asian ideograph */ {"\x93", 0, 0x216971}, /* East Asian ideograph */ {"\x96", 0, 0x216975}, /* East Asian ideograph */ {"\xA1", 0, 0x21697B}, /* East Asian ideograph */ {"\xA3", 0, 0x21697C}, /* East Asian ideograph */ {"\xAA", 0, 0x216A22}, /* East Asian ideograph */ {"\xAB", 0, 0x216A23}, /* East Asian ideograph */ {"\xB1", 0, 0x216A26}, /* East Asian ideograph */ {"\xBC", 0, 0x216A35}, /* East Asian ideograph */ {"\xBB", 0, 0x273340}, /* East Asian ideograph */ {"\x99", 0, 0x273B37}, /* East Asian ideograph */ {"\x88", 0, 0x273B6E}, /* East Asian ideograph */ {"\xB2", 0, 0x27574A}, /* East Asian ideograph (duplicate simplified) */ {"\x9B", 0, 0x275B34}, /* East Asian ideograph */ {"\x9C", 0, 0x275B64}, /* East Asian ideograph */ {"\xAF", 0, 0x27612D}, /* East Asian ideograph */ {"\xAC", 0, 0x276276}, /* East Asian ideograph */ {"\x81", 0, 0x277360}, /* East Asian ideograph */ {"\x90", 0, 0x2D3332}, /* East Asian ideograph */ {"\xA2", 0, 0x2D3852}, /* East Asian ideograph */ {"\xA8", 0, 0x2D3B27}, /* East Asian ideograph */ {"\xB3", 0, 0x2D466D}, /* East Asian ideograph */ {"\xB5", 0, 0x2D4730}, /* East Asian ideograph */ {"\xA4", 0, 0x2D7E6A}, /* East Asian ideograph */ {"\x8A", 0, 0x333330}, /* East Asian ideograph */ {"\x85", 0, 0x4B3321}, /* East Asian ideograph */ {"\x86", 0, 0x4B3772}, /* East Asian ideograph */ {"\xA6", 0, 0x4B3B22}, /* East Asian ideograph */ {"\xA9", 0, 0x4B3B37}, /* East Asian ideograph */ {"\xBD", 0, 0x4B4741}, /* East Asian ideograph */ {"\xB4", 0, 0x516A26}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page20 = { marc8r_31page20_flat, 0 }; /* PAGE 19 */ struct yaz_iconv_trie_dir marc8r_31page19_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x21326C} /* East Asian ideograph */, {0, 0, 0x21326E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x21326D} /* East Asian ideograph */, {0, 0, 0x213270} /* East Asian ideograph */, {0, 0, 0x21326F} /* East Asian ideograph */, {0, 0, 0x213271} /* East Asian ideograph */, {0, 0, 0x213273} /* East Asian ideograph */, {0, 0, 0x213274} /* East Asian ideograph */, {0, 0, 0x213272} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27336B} /* East Asian ideograph */, {0, 0, 0x213275} /* East Asian ideograph */, {0, 0, 0x213277} /* East Asian ideograph */, {0, 0, 0x2D3279} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x33327A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x21327A} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213279} /* East Asian ideograph */, {0, 0, 0x213278} /* East Asian ideograph */, {0, 0, 0x27327B} /* East Asian ideograph */, {0, 0, 0x21327B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x216951} /* East Asian ideograph */, {0, 0, 0x27626F} /* East Asian ideograph */, {0, 0, 0x216952} /* East Asian ideograph */, {0, 0, 0x21327C} /* East Asian ideograph */, {0, 0, 0x216955} /* East Asian ideograph */, {0, 0, 0x216956} /* East Asian ideograph */, {0, 0, 0x216958} /* East Asian ideograph */, {0, 0, 0x216A73} /* East Asian ideograph */, {0, 0, 0x216959} /* East Asian ideograph */, {0, 0, 0x21327D} /* East Asian ideograph */, {0, 0, 0x21695C} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x21327E} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213321} /* East Asian ideograph */, {0, 0, 0x213322} /* East Asian ideograph */, {0, 0, 0x213323} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x213324} /* East Asian ideograph */, {0, 0, 0x213327} /* East Asian ideograph */, {0, 0, 0x213325} /* East Asian ideograph */, {0, 0, 0x213326} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x27563E} /* East Asian ideograph */, {0, 0, 0x213328} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x275E69} /* East Asian ideograph */, {0, 0, 0x275433} /* East Asian ideograph */, {0, 0, 0x213329} /* East Asian ideograph */, {0, 0, 0x21332A} /* East Asian ideograph */, {0, 0, 0x21332B} /* East Asian ideograph */, {0, 0, 0x21332C} /* East Asian ideograph */, {0, 0, 0x215521} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x276071} /* East Asian ideograph */, {0, 0, 0x21332D} /* East Asian ideograph */, {0, 0, 0x274B2B} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0x3F5631} /* East Asian ideograph */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page19 = { 0, marc8r_31page19_dir }; /* PAGE 18 */ struct yaz_iconv_trie_flat marc8r_31page18_flat[] = { {"\x80", 0, 0x213259}, /* East Asian ideograph */ {"\x84", 0, 0x21325A}, /* East Asian ideograph */ {"\x82", 0, 0x21325E}, /* East Asian ideograph */ {"\x8D", 0, 0x21325F}, /* East Asian ideograph */ {"\x88", 0, 0x213260}, /* East Asian ideograph */ {"\x89", 0, 0x213261}, /* East Asian ideograph */ {"\x90", 0, 0x213262}, /* East Asian ideograph */ {"\x98", 0, 0x213263}, /* East Asian ideograph */ {"\x92", 0, 0x213264}, /* East Asian ideograph */ {"\x94", 0, 0x213265}, /* East Asian ideograph */ {"\xAA", 0, 0x213266}, /* East Asian ideograph */ {"\x9F", 0, 0x213267}, /* East Asian ideograph */ {"\xA1", 0, 0x213268}, /* East Asian ideograph */ {"\xB2", 0, 0x213269}, /* East Asian ideograph */ {"\xB7", 0, 0x21326A}, /* East Asian ideograph */ {"\xBC", 0, 0x21326B}, /* East Asian ideograph */ {"\x8E", 0, 0x21685B}, /* East Asian ideograph */ {"\x85", 0, 0x21685F}, /* East Asian ideograph */ {"\x86", 0, 0x216865}, /* East Asian ideograph */ {"\x87", 0, 0x216866}, /* East Asian ideograph */ {"\x8F", 0, 0x216867}, /* East Asian ideograph */ {"\x8B", 0, 0x216869}, /* East Asian ideograph */ {"\x81", 0, 0x21686D}, /* East Asian ideograph */ {"\x95", 0, 0x216871}, /* East Asian ideograph */ {"\x93", 0, 0x216872}, /* East Asian ideograph */ {"\x9A", 0, 0x216878}, /* East Asian ideograph */ {"\xA6", 0, 0x21687E}, /* East Asian ideograph */ {"\xA4", 0, 0x216929}, /* East Asian ideograph */ {"\xA9", 0, 0x21692B}, /* East Asian ideograph */ {"\xB1", 0, 0x216930}, /* East Asian ideograph */ {"\xB5", 0, 0x21693E}, /* East Asian ideograph */ {"\xB3", 0, 0x216940}, /* East Asian ideograph */ {"\xBA", 0, 0x216944}, /* East Asian ideograph */ {"\xB9", 0, 0x216947}, /* East Asian ideograph */ {"\xBB", 0, 0x216948}, /* East Asian ideograph */ {"\xBF", 0, 0x27327A}, /* East Asian ideograph */ {"\x8C", 0, 0x2D3251}, /* East Asian ideograph */ {"\x9E", 0, 0x2D3944}, /* East Asian ideograph */ {"\x97", 0, 0x2D4228}, /* East Asian ideograph */ {"\x96", 0, 0x695130}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page18 = { marc8r_31page18_flat, 0 }; /* PAGE 17 */ struct yaz_iconv_trie_flat marc8r_31page17_flat[] = { {"\x85", 0, 0x213249}, /* East Asian ideograph */ {"\xA7", 0, 0x21324E}, /* East Asian ideograph */ {"\xAE", 0, 0x21324F}, /* East Asian ideograph */ {"\xB1", 0, 0x213250}, /* East Asian ideograph */ {"\xA5", 0, 0x213251}, /* East Asian ideograph */ {"\x96", 0, 0x213252}, /* East Asian ideograph */ {"\xAD", 0, 0x213253}, /* East Asian ideograph */ {"\x9A", 0, 0x213254}, /* East Asian ideograph */ {"\x95", 0, 0x213255}, /* East Asian ideograph */ {"\x8F", 0, 0x213257}, /* East Asian ideograph */ {"\x91", 0, 0x213258}, /* East Asian ideograph */ {"\xBB", 0, 0x21325B}, /* East Asian ideograph */ {"\xB5", 0, 0x21325C}, /* East Asian ideograph */ {"\xB9", 0, 0x21325D}, /* East Asian ideograph */ {"\x87", 0, 0x216771}, /* East Asian ideograph */ {"\x89", 0, 0x216775}, /* East Asian ideograph */ {"\x8A", 0, 0x21677B}, /* East Asian ideograph */ {"\x82", 0, 0x216822}, /* East Asian ideograph */ {"\x8D", 0, 0x21682E}, /* East Asian ideograph */ {"\x94", 0, 0x216832}, /* East Asian ideograph */ {"\xAF", 0, 0x216834}, /* East Asian ideograph */ {"\xA6", 0, 0x216835}, /* East Asian ideograph */ {"\xB4", 0, 0x21683A}, /* East Asian ideograph */ {"\x8E", 0, 0x21683B}, /* East Asian ideograph */ {"\x9D", 0, 0x21683C}, /* East Asian ideograph */ {"\xB3", 0, 0x216841}, /* East Asian ideograph */ {"\xA8", 0, 0x216842}, /* East Asian ideograph */ {"\xB0", 0, 0x216844}, /* East Asian ideograph */ {"\x99", 0, 0x216846}, /* East Asian ideograph */ {"\xAC", 0, 0x216855}, /* East Asian ideograph */ {"\xBC", 0, 0x216861}, /* East Asian ideograph */ {"\xBE", 0, 0x216868}, /* East Asian ideograph */ {"\xBD", 0, 0x21686A}, /* East Asian ideograph */ {"\xA3", 0, 0x2D3253}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page17 = { marc8r_31page17_flat, 0 }; /* PAGE 16 */ struct yaz_iconv_trie_flat marc8r_31page16_flat[] = { {"\x8D", 0, 0x21323D}, /* East Asian ideograph */ {"\xA2", 0, 0x21323E}, /* East Asian ideograph */ {"\x85", 0, 0x21323F}, /* East Asian ideograph */ {"\x99", 0, 0x213240}, /* East Asian ideograph */ {"\x91", 0, 0x213241}, /* East Asian ideograph */ {"\x80", 0, 0x213242}, /* East Asian ideograph */ {"\x96", 0, 0x213243}, /* East Asian ideograph */ {"\x98", 0, 0x213244}, /* East Asian ideograph */ {"\xAD", 0, 0x213245}, /* East Asian ideograph */ {"\xB3", 0, 0x213246}, /* East Asian ideograph */ {"\xB5", 0, 0x213247}, /* East Asian ideograph */ {"\xB2", 0, 0x213248}, /* East Asian ideograph */ {"\xBE", 0, 0x21324A}, /* East Asian ideograph */ {"\xAC", 0, 0x21324B}, /* East Asian ideograph */ {"\xB7", 0, 0x21324C}, /* East Asian ideograph */ {"\xAF", 0, 0x21324D}, /* East Asian ideograph */ {"\x94", 0, 0x21674E}, /* East Asian ideograph */ {"\x9E", 0, 0x216750}, /* East Asian ideograph */ {"\x9B", 0, 0x216752}, /* East Asian ideograph */ {"\x9A", 0, 0x216753}, /* East Asian ideograph */ {"\xA3", 0, 0x216757}, /* East Asian ideograph */ {"\x8C", 0, 0x21675A}, /* East Asian ideograph */ {"\x88", 0, 0x21675C}, /* East Asian ideograph */ {"\x8E", 0, 0x216762}, /* East Asian ideograph */ {"\x95", 0, 0x216764}, /* East Asian ideograph */ {"\xA6", 0, 0x216767}, /* East Asian ideograph */ {"\x92", 0, 0x21676A}, /* East Asian ideograph */ {"\x9C", 0, 0x21676C}, /* East Asian ideograph */ {"\xB4", 0, 0x21677C}, /* East Asian ideograph */ {"\xBA", 0, 0x21682C}, /* East Asian ideograph */ {"\xA7", 0, 0x273262}, /* East Asian ideograph */ {"\xA8", 0, 0x273269}, /* East Asian ideograph */ {"\xA9", 0, 0x276944}, /* East Asian ideograph */ {"\xA5", 0, 0x276948}, /* East Asian ideograph */ {"\xBB", 0, 0x2D325F}, /* East Asian ideograph (variant of EACC 4B325F) */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page16 = { marc8r_31page16_flat, 0 }; /* PAGE 15 */ struct yaz_iconv_trie_flat marc8r_31page15_flat[] = { {"\x9C", 0, 0x21322E}, /* East Asian ideograph */ {"\x8F", 0, 0x21322F}, /* East Asian ideograph */ {"\xA5", 0, 0x213230}, /* East Asian ideograph */ {"\x87", 0, 0x213231}, /* East Asian ideograph */ {"\x9A", 0, 0x213232}, /* East Asian ideograph */ {"\x89", 0, 0x213233}, /* East Asian ideograph */ {"\x83", 0, 0x213234}, /* East Asian ideograph */ {"\xB4", 0, 0x213235}, /* East Asian ideograph */ {"\xB6", 0, 0x213236}, /* East Asian ideograph */ {"\x8E", 0, 0x213237}, /* East Asian ideograph */ {"\xB5", 0, 0x213238}, /* East Asian ideograph */ {"\x8C", 0, 0x213239}, /* East Asian ideograph */ {"\x95", 0, 0x21323A}, /* East Asian ideograph */ {"\xB7", 0, 0x21323C}, /* East Asian ideograph */ {"\xBD", 0, 0x213256}, /* East Asian ideograph */ {"\xAF", 0, 0x216722}, /* East Asian ideograph */ {"\x90", 0, 0x216723}, /* East Asian ideograph */ {"\xB0", 0, 0x216725}, /* East Asian ideograph */ {"\x93", 0, 0x216729}, /* East Asian ideograph */ {"\xAA", 0, 0x21672A}, /* East Asian ideograph */ {"\x96", 0, 0x21672C}, /* East Asian ideograph */ {"\xAD", 0, 0x216731}, /* East Asian ideograph */ {"\x9D", 0, 0x216738}, /* East Asian ideograph */ {"\x88", 0, 0x216739}, /* East Asian ideograph */ {"\x98", 0, 0x21673B}, /* East Asian ideograph */ {"\xB2", 0, 0x21673C}, /* East Asian ideograph */ {"\x81", 0, 0x216741}, /* East Asian ideograph */ {"\xBA", 0, 0x216748}, /* East Asian ideograph */ {"\xAC", 0, 0x21674A}, /* East Asian ideograph */ {"\x9F", 0, 0x21674B}, /* East Asian ideograph */ {"\xAB", 0, 0x21674D}, /* East Asian ideograph */ {"\xBF", 0, 0x273267}, /* East Asian ideograph */ {"\xBB", 0, 0x276822}, /* East Asian ideograph */ {"\xBE", 0, 0x276842}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page15 = { marc8r_31page15_flat, 0 }; /* PAGE 14 */ struct yaz_iconv_trie_flat marc8r_31page14_flat[] = { {"\x89", 0, 0x21316C}, /* East Asian ideograph */ {"\x8D", 0, 0x21316E}, /* East Asian ideograph */ {"\xA6", 0, 0x213170}, /* East Asian ideograph */ {"\x8C", 0, 0x213171}, /* East Asian ideograph */ {"\xA5", 0, 0x213172}, /* East Asian ideograph */ {"\x91", 0, 0x213173}, /* East Asian ideograph */ {"\xA8", 0, 0x213175}, /* East Asian ideograph */ {"\x94", 0, 0x213176}, /* East Asian ideograph */ {"\x96", 0, 0x213177}, /* East Asian ideograph */ {"\xA9", 0, 0x213178}, /* East Asian ideograph */ {"\x86", 0, 0x213179}, /* East Asian ideograph */ {"\x92", 0, 0x21317B}, /* East Asian ideograph */ {"\xBC", 0, 0x21317C}, /* East Asian ideograph */ {"\x9A", 0, 0x21317D}, /* East Asian ideograph */ {"\x98", 0, 0x213221}, /* East Asian ideograph */ {"\xA1", 0, 0x213223}, /* East Asian ideograph */ {"\x8B", 0, 0x213224}, /* East Asian ideograph */ {"\x99", 0, 0x213225}, /* East Asian ideograph */ {"\x80", 0, 0x213226}, /* East Asian ideograph */ {"\xAD", 0, 0x213229}, /* East Asian ideograph */ {"\x83", 0, 0x21322A}, /* East Asian ideograph */ {"\xAA", 0, 0x21322C}, /* East Asian ideograph */ {"\xAB", 0, 0x21322D}, /* East Asian ideograph */ {"\x8F", 0, 0x21323B}, /* East Asian ideograph */ {"\x9E", 0, 0x216646}, /* East Asian ideograph */ {"\xBF", 0, 0x216648}, /* East Asian ideograph */ {"\x85", 0, 0x216649}, /* East Asian ideograph */ {"\x87", 0, 0x21664C}, /* East Asian ideograph */ {"\x93", 0, 0x21664D}, /* East Asian ideograph */ {"\xA2", 0, 0x21664E}, /* East Asian ideograph */ {"\xB7", 0, 0x21665B}, /* East Asian ideograph */ {"\xAE", 0, 0x21665E}, /* East Asian ideograph */ {"\x9C", 0, 0x216662}, /* East Asian ideograph */ {"\xAC", 0, 0x216666}, /* East Asian ideograph */ {"\x90", 0, 0x216669}, /* East Asian ideograph */ {"\xBD", 0, 0x216679}, /* East Asian ideograph */ {"\x95", 0, 0x216746}, /* East Asian ideograph */ {"\xBA", 0, 0x273247}, /* East Asian ideograph */ {"\xBE", 0, 0x27324A}, /* East Asian ideograph */ {"\x9F", 0, 0x27562E}, /* East Asian ideograph */ {"\x82", 0, 0x2D3147}, /* East Asian ideograph */ {"\x88", 0, 0x2D314C}, /* East Asian ideograph */ {"\xB9", 0, 0x2D3261}, /* East Asian ideograph */ {"\xA3", 0, 0x3F3078}, /* East Asian ideograph */ {"\xA4", 0, 0x4B317C}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page14 = { marc8r_31page14_flat, 0 }; /* PAGE 13 */ struct yaz_iconv_trie_flat marc8r_31page13_flat[] = { {"\xB9", 0, 0x21303E}, /* East Asian ideograph */ {"\x81", 0, 0x213B3C}, /* East Asian ideograph */ {"\x84", 0, 0x213B3D}, /* East Asian ideograph */ {"\x89", 0, 0x213B3E}, /* East Asian ideograph */ {"\x88", 0, 0x213B3F}, /* East Asian ideograph */ {"\x87", 0, 0x213B40}, /* East Asian ideograph */ {"\x8A", 0, 0x213B41}, /* East Asian ideograph */ {"\x8B", 0, 0x213B42}, /* East Asian ideograph */ {"\x8D", 0, 0x213B43}, /* East Asian ideograph */ {"\x8E", 0, 0x213B44}, /* East Asian ideograph */ {"\x8F", 0, 0x213B45}, /* East Asian ideograph */ {"\x91", 0, 0x213B46}, /* East Asian ideograph */ {"\x96", 0, 0x213B47}, /* East Asian ideograph */ {"\x9A", 0, 0x213B48}, /* East Asian ideograph */ {"\xA4", 0, 0x213B49}, /* East Asian ideograph */ {"\xAC", 0, 0x213B4A}, /* East Asian ideograph */ {"\xB1", 0, 0x213B4B}, /* East Asian ideograph */ {"\xB7", 0, 0x213B4C}, /* East Asian ideograph */ {"\xB8", 0, 0x213B4D}, /* East Asian ideograph */ {"\xBA", 0, 0x213B4E}, /* East Asian ideograph */ {"\xBC", 0, 0x213B4F}, /* East Asian ideograph */ {"\xBF", 0, 0x213B52}, /* East Asian ideograph */ {"\xBE", 0, 0x213B53}, /* East Asian ideograph */ {"\x80", 0, 0x222233}, /* East Asian ideograph */ {"\x95", 0, 0x22223C}, /* East Asian ideograph */ {"\xA2", 0, 0x222246}, /* East Asian ideograph */ {"\xA5", 0, 0x222248}, /* East Asian ideograph */ {"\xAA", 0, 0x22224B}, /* East Asian ideograph */ {"\xAF", 0, 0x222252}, /* East Asian ideograph */ {"\xB2", 0, 0x22225B}, /* East Asian ideograph */ {"\xBB", 0, 0x222263}, /* East Asian ideograph */ {"\xA1", 0, 0x223930}, /* East Asian ideograph */ {"\xBD", 0, 0x273263}, /* East Asian ideograph (duplicate simplified) */ {"\x9D", 0, 0x273730}, /* East Asian ideograph */ {"\xA7", 0, 0x273845}, /* East Asian ideograph */ {"\x98", 0, 0x273859}, /* East Asian ideograph */ {"\x86", 0, 0x273B40}, /* East Asian ideograph */ {"\xB4", 0, 0x273B4C}, /* East Asian ideograph */ {"\x94", 0, 0x274A45}, /* East Asian ideograph */ {"\x85", 0, 0x2D336B}, /* East Asian ideograph */ {"\x82", 0, 0x2D3B3F}, /* East Asian ideograph */ {"\x92", 0, 0x2D4A45}, /* East Asian ideograph */ {"\xA8", 0, 0x2D632B}, /* East Asian ideograph */ {"\xA0", 0, 0x396179}, /* East Asian ideograph */ {"\x9F", 0, 0x3F6179}, /* East Asian ideograph */ {"\x9C", 0, 0x4B372F}, /* East Asian ideograph */ {"\x93", 0, 0x4B4A45}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page13 = { marc8r_31page13_flat, 0 }; /* PAGE 12 */ struct yaz_iconv_trie_flat marc8r_31page12_flat[] = { {"\xA1", 0, 0x213036}, /* East Asian ideograph */ {"\x8D", 0, 0x213340}, /* East Asian ideograph */ {"\x8C", 0, 0x213341}, /* East Asian ideograph */ {"\x9C", 0, 0x213344}, /* East Asian ideograph */ {"\x9D", 0, 0x213345}, /* East Asian ideograph */ {"\xB0", 0, 0x213347}, /* East Asian ideograph */ {"\xB1", 0, 0x213348}, /* East Asian ideograph */ {"\xB3", 0, 0x213349}, /* East Asian ideograph */ {"\xBA", 0, 0x21334B}, /* East Asian ideograph */ {"\xB9", 0, 0x21334C}, /* East Asian ideograph */ {"\xB8", 0, 0x21334D}, /* East Asian ideograph */ {"\xBD", 0, 0x21334E}, /* East Asian ideograph */ {"\x8A", 0, 0x216A43}, /* East Asian ideograph */ {"\x87", 0, 0x216A46}, /* East Asian ideograph */ {"\x91", 0, 0x216A4E}, /* East Asian ideograph */ {"\x90", 0, 0x216A4F}, /* East Asian ideograph */ {"\x93", 0, 0x216A54}, /* East Asian ideograph */ {"\x99", 0, 0x216A63}, /* East Asian ideograph */ {"\x9F", 0, 0x216A66}, /* East Asian ideograph */ {"\xA2", 0, 0x216A68}, /* East Asian ideograph */ {"\xB5", 0, 0x216A78}, /* East Asian ideograph */ {"\xB7", 0, 0x216A79}, /* East Asian ideograph */ {"\xA7", 0, 0x222664}, /* East Asian ideograph */ {"\xB6", 0, 0x273273}, /* East Asian ideograph */ {"\xAF", 0, 0x273348}, /* East Asian ideograph */ {"\xA0", 0, 0x273C6B}, /* East Asian ideograph */ {"\xAD", 0, 0x273F3F}, /* East Asian ideograph */ {"\xBB", 0, 0x274176}, /* East Asian ideograph */ {"\x86", 0, 0x27484B}, /* East Asian ideograph */ {"\xBF", 0, 0x275E4B}, /* East Asian ideograph */ {"\xA4", 0, 0x276233}, /* East Asian ideograph */ {"\xBC", 0, 0x2D3C6A}, /* East Asian ideograph */ {"\x89", 0, 0x2D475B}, /* East Asian ideograph */ {"\x84", 0, 0x2D475F}, /* East Asian ideograph */ {"\x8F", 0, 0x2D4829}, /* East Asian ideograph */ {"\x9B", 0, 0x333344}, /* East Asian ideograph */ {"\xBE", 0, 0x33334E}, /* East Asian ideograph */ {"\xB4", 0, 0x333F3F}, /* East Asian ideograph */ {"\x80", 0, 0x39476F}, /* East Asian ideograph */ {"\x88", 0, 0x3F476F}, /* East Asian ideograph */ {"\x85", 0, 0x4B476C}, /* East Asian ideograph */ {"\x96", 0, 0x4B484B}, /* East Asian ideograph */ {"\xA6", 0, 0x4B5647}, /* East Asian ideograph */ {"\x8B", 0, 0x4B5F49}, /* East Asian ideograph */ {"\xAB", 0, 0x4D5973}, /* East Asian ideograph */ {"\x83", 0, 0x51384D}, /* East Asian ideograph */ {"\xAA", 0, 0x694664}, /* East Asian ideograph */ {"\xA9", 0, 0x69515E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page12 = { marc8r_31page12_flat, 0 }; /* PAGE 11 */ struct yaz_iconv_trie_flat marc8r_31page11_flat[] = { {"\xA1", 0, 0x213157}, /* East Asian ideograph */ {"\x91", 0, 0x213158}, /* East Asian ideograph */ {"\x9E", 0, 0x21315C}, /* East Asian ideograph */ {"\xA0", 0, 0x21315D}, /* East Asian ideograph */ {"\x8F", 0, 0x21315E}, /* East Asian ideograph */ {"\x9A", 0, 0x213160}, /* East Asian ideograph */ {"\x9D", 0, 0x213161}, /* East Asian ideograph */ {"\x83", 0, 0x213162}, /* East Asian ideograph */ {"\x98", 0, 0x213163}, /* East Asian ideograph */ {"\x9F", 0, 0x213164}, /* East Asian ideograph */ {"\x8A", 0, 0x213165}, /* East Asian ideograph */ {"\x90", 0, 0x213167}, /* East Asian ideograph */ {"\x84", 0, 0x213168}, /* East Asian ideograph */ {"\x82", 0, 0x213169}, /* East Asian ideograph */ {"\x8E", 0, 0x21316A}, /* East Asian ideograph */ {"\x97", 0, 0x21316B}, /* East Asian ideograph */ {"\xAF", 0, 0x21316F}, /* East Asian ideograph */ {"\xB8", 0, 0x213174}, /* East Asian ideograph */ {"\xBA", 0, 0x21317E}, /* East Asian ideograph */ {"\xB1", 0, 0x213222}, /* East Asian ideograph */ {"\xAE", 0, 0x213227}, /* East Asian ideograph */ {"\xB3", 0, 0x213228}, /* East Asian ideograph */ {"\xBE", 0, 0x21322B}, /* East Asian ideograph */ {"\x8D", 0, 0x21657C}, /* East Asian ideograph */ {"\xA4", 0, 0x216622}, /* East Asian ideograph */ {"\x85", 0, 0x216627}, /* East Asian ideograph */ {"\x89", 0, 0x216629}, /* East Asian ideograph */ {"\xA5", 0, 0x21662A}, /* East Asian ideograph */ {"\xA7", 0, 0x21662C}, /* East Asian ideograph */ {"\x9C", 0, 0x216633}, /* East Asian ideograph */ {"\x94", 0, 0x216635}, /* East Asian ideograph */ {"\x81", 0, 0x216637}, /* East Asian ideograph */ {"\x9B", 0, 0x21663B}, /* East Asian ideograph */ {"\x86", 0, 0x21663E}, /* East Asian ideograph */ {"\xB5", 0, 0x216652}, /* East Asian ideograph */ {"\xB4", 0, 0x216659}, /* East Asian ideograph */ {"\xB6", 0, 0x216661}, /* East Asian ideograph */ {"\xA9", 0, 0x273179}, /* East Asian ideograph */ {"\xAD", 0, 0x273261}, /* East Asian ideograph */ {"\xA6", 0, 0x273265}, /* East Asian ideograph */ {"\xAA", 0, 0x27326A}, /* East Asian ideograph */ {"\xA8", 0, 0x27326B}, /* East Asian ideograph */ {"\xBB", 0, 0x333240}, /* East Asian ideograph */ {"\xB2", 0, 0x394243}, /* East Asian ideograph */ {"\xA3", 0, 0x4B6637}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page11 = { marc8r_31page11_flat, 0 }; /* PAGE 10 */ struct yaz_iconv_trie_flat marc8r_31page10_flat[] = { {"\x9D", 0, 0x213145}, /* East Asian ideograph */ {"\x8D", 0, 0x213148}, /* East Asian ideograph */ {"\x9B", 0, 0x21314B}, /* East Asian ideograph */ {"\x86", 0, 0x21314C}, /* East Asian ideograph */ {"\x8B", 0, 0x21314E}, /* East Asian ideograph */ {"\x96", 0, 0x21314F}, /* East Asian ideograph */ {"\x83", 0, 0x213151}, /* East Asian ideograph */ {"\x88", 0, 0x213153}, /* East Asian ideograph */ {"\x8F", 0, 0x213155}, /* East Asian ideograph */ {"\xB5", 0, 0x213159}, /* East Asian ideograph */ {"\xAF", 0, 0x21315A}, /* East Asian ideograph */ {"\xBF", 0, 0x21315B}, /* East Asian ideograph */ {"\xB6", 0, 0x21315F}, /* East Asian ideograph */ {"\xAE", 0, 0x213166}, /* East Asian ideograph */ {"\x82", 0, 0x216556}, /* East Asian ideograph */ {"\x98", 0, 0x21655A}, /* East Asian ideograph */ {"\x92", 0, 0x21655B}, /* East Asian ideograph */ {"\x80", 0, 0x216560}, /* East Asian ideograph */ {"\xA2", 0, 0x216564}, /* East Asian ideograph */ {"\x91", 0, 0x216566}, /* East Asian ideograph */ {"\x95", 0, 0x216567}, /* East Asian ideograph */ {"\x97", 0, 0x21656D}, /* East Asian ideograph */ {"\x94", 0, 0x21656E}, /* East Asian ideograph */ {"\x9A", 0, 0x216571}, /* East Asian ideograph */ {"\x81", 0, 0x216572}, /* East Asian ideograph */ {"\x9C", 0, 0x216576}, /* East Asian ideograph */ {"\x90", 0, 0x216577}, /* East Asian ideograph */ {"\xB7", 0, 0x216626}, /* East Asian ideograph */ {"\xB9", 0, 0x216643}, /* East Asian ideograph */ {"\xA0", 0, 0x27315D}, /* East Asian ideograph */ {"\xA7", 0, 0x273235}, /* East Asian ideograph */ {"\xA6", 0, 0x273238}, /* East Asian ideograph */ {"\xA5", 0, 0x273251}, /* East Asian ideograph */ {"\xA8", 0, 0x273258}, /* East Asian ideograph */ {"\xAC", 0, 0x27325E}, /* East Asian ideograph */ {"\xA9", 0, 0x273260}, /* East Asian ideograph */ {"\xAA", 0, 0x276871}, /* East Asian ideograph */ {"\xA3", 0, 0x2D315F}, /* East Asian ideograph */ {"\xAD", 0, 0x2D3263}, /* East Asian ideograph */ {"\x84", 0, 0x2D396E}, /* East Asian ideograph */ {"\xA1", 0, 0x33325D}, /* East Asian ideograph */ {"\xAB", 0, 0x4B3130}, /* East Asian ideograph */ {"\x89", 0, 0x4B5861}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page10 = { marc8r_31page10_flat, 0 }; /* PAGE 9 */ struct yaz_iconv_trie_flat marc8r_31page9_flat[] = { {"\x8F", 0, 0x21312A}, /* East Asian ideograph */ {"\x8D", 0, 0x21312B}, /* East Asian ideograph */ {"\x87", 0, 0x21312D}, /* East Asian ideograph */ {"\x97", 0, 0x21312E}, /* East Asian ideograph */ {"\x9E", 0, 0x213130}, /* East Asian ideograph */ {"\x9B", 0, 0x213132}, /* East Asian ideograph */ {"\x95", 0, 0x213133}, /* East Asian ideograph */ {"\x90", 0, 0x213135}, /* East Asian ideograph */ {"\x91", 0, 0x213136}, /* East Asian ideograph */ {"\x88", 0, 0x213138}, /* East Asian ideograph */ {"\x86", 0, 0x213139}, /* East Asian ideograph */ {"\x83", 0, 0x21313B}, /* East Asian ideograph */ {"\x94", 0, 0x21313C}, /* East Asian ideograph */ {"\xA3", 0, 0x21313E}, /* East Asian ideograph */ {"\x9C", 0, 0x21313F}, /* East Asian ideograph */ {"\xA0", 0, 0x213140}, /* East Asian ideograph */ {"\x8E", 0, 0x213142}, /* East Asian ideograph */ {"\x9D", 0, 0x213143}, /* East Asian ideograph */ {"\xAF", 0, 0x213146}, /* East Asian ideograph */ {"\xB5", 0, 0x213147}, /* East Asian ideograph */ {"\xB3", 0, 0x213149}, /* East Asian ideograph */ {"\xBF", 0, 0x21314A}, /* East Asian ideograph */ {"\xAC", 0, 0x21314D}, /* East Asian ideograph */ {"\xBB", 0, 0x213152}, /* East Asian ideograph */ {"\xA9", 0, 0x213154}, /* East Asian ideograph */ {"\xBE", 0, 0x213156}, /* East Asian ideograph */ {"\x98", 0, 0x216536}, /* East Asian ideograph */ {"\xA2", 0, 0x216537}, /* East Asian ideograph */ {"\xA4", 0, 0x216539}, /* East Asian ideograph */ {"\x89", 0, 0x21653A}, /* East Asian ideograph */ {"\xA6", 0, 0x216540}, /* East Asian ideograph */ {"\xA7", 0, 0x216544}, /* East Asian ideograph */ {"\xA8", 0, 0x21654D}, /* East Asian ideograph */ {"\x9A", 0, 0x21654E}, /* East Asian ideograph */ {"\x9F", 0, 0x21654F}, /* East Asian ideograph */ {"\xBC", 0, 0x216557}, /* East Asian ideograph */ {"\xBD", 0, 0x21655C}, /* East Asian ideograph */ {"\xB4", 0, 0x216561}, /* East Asian ideograph */ {"\xB6", 0, 0x216562}, /* East Asian ideograph */ {"\x8C", 0, 0x21656C}, /* East Asian ideograph */ {"\xB9", 0, 0x216570}, /* East Asian ideograph */ {"\xB8", 0, 0x216573}, /* East Asian ideograph */ {"\xBA", 0, 0x21657B}, /* East Asian ideograph */ {"\x99", 0, 0x276076}, /* East Asian ideograph */ {"\x93", 0, 0x27615A}, /* East Asian ideograph */ {"\xA5", 0, 0x276775}, /* East Asian ideograph */ {"\xB0", 0, 0x2D4C7E}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page9 = { marc8r_31page9_flat, 0 }; /* PAGE 8 */ struct yaz_iconv_trie_flat marc8r_31page8_flat[] = { {"\x89", 0, 0x213079}, /* East Asian ideograph */ {"\x8A", 0, 0x21307D}, /* East Asian ideograph */ {"\x95", 0, 0x21307E}, /* East Asian ideograph */ {"\x91", 0, 0x213121}, /* East Asian ideograph */ {"\x90", 0, 0x213122}, /* East Asian ideograph */ {"\x8F", 0, 0x213123}, /* East Asian ideograph */ {"\x81", 0, 0x213125}, /* East Asian ideograph */ {"\xB4", 0, 0x21312C}, /* East Asian ideograph */ {"\xBA", 0, 0x21312F}, /* East Asian ideograph */ {"\xB0", 0, 0x213134}, /* East Asian ideograph */ {"\xBD", 0, 0x213137}, /* East Asian ideograph */ {"\xB8", 0, 0x21313A}, /* East Asian ideograph */ {"\xBC", 0, 0x21313D}, /* East Asian ideograph */ {"\xAF", 0, 0x213141}, /* East Asian ideograph */ {"\xB6", 0, 0x213144}, /* East Asian ideograph */ {"\x88", 0, 0x216472}, /* East Asian ideograph */ {"\x8E", 0, 0x216473}, /* East Asian ideograph */ {"\x83", 0, 0x216475}, /* East Asian ideograph */ {"\xA2", 0, 0x21647C}, /* East Asian ideograph */ {"\x87", 0, 0x216528}, /* East Asian ideograph */ {"\x80", 0, 0x21652A}, /* East Asian ideograph */ {"\x8B", 0, 0x21652C}, /* East Asian ideograph */ {"\xBB", 0, 0x216532}, /* East Asian ideograph */ {"\xBE", 0, 0x21653F}, /* East Asian ideograph */ {"\xA5", 0, 0x273226}, /* East Asian ideograph */ {"\xA6", 0, 0x27322D}, /* East Asian ideograph */ {"\x9F", 0, 0x273233}, /* East Asian ideograph */ {"\xA7", 0, 0x273243}, /* East Asian ideograph */ {"\x9E", 0, 0x273244}, /* East Asian ideograph */ {"\xA0", 0, 0x273246}, /* East Asian ideograph */ {"\xA4", 0, 0x27324C}, /* East Asian ideograph */ {"\xAA", 0, 0x273256}, /* East Asian ideograph */ {"\x98", 0, 0x273266}, /* East Asian ideograph */ {"\x99", 0, 0x273923}, /* East Asian ideograph */ {"\x9A", 0, 0x27435A}, /* East Asian ideograph */ {"\x97", 0, 0x274D56}, /* East Asian ideograph */ {"\x9C", 0, 0x276649}, /* East Asian ideograph */ {"\x9B", 0, 0x27677C}, /* East Asian ideograph */ {"\xB2", 0, 0x2D3140}, /* East Asian ideograph */ {"\x8D", 0, 0x393054}, /* East Asian ideograph */ {"\x9D", 0, 0x393246}, /* East Asian ideograph */ {"\xAB", 0, 0x4B312D}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page8 = { marc8r_31page8_flat, 0 }; /* PAGE 7 */ struct yaz_iconv_trie_flat marc8r_31page7_flat[] = { {"\x8A", 0, 0x213065}, /* East Asian ideograph */ {"\x81", 0, 0x213066}, /* East Asian ideograph */ {"\x83", 0, 0x213068}, /* East Asian ideograph */ {"\x84", 0, 0x213069}, /* East Asian ideograph */ {"\x8D", 0, 0x21306B}, /* East Asian ideograph */ {"\x87", 0, 0x21306C}, /* East Asian ideograph */ {"\x8B", 0, 0x21306D}, /* East Asian ideograph */ {"\xA4", 0, 0x21306E}, /* East Asian ideograph */ {"\x98", 0, 0x21306F}, /* East Asian ideograph */ {"\x95", 0, 0x213070}, /* East Asian ideograph */ {"\x96", 0, 0x213071}, /* East Asian ideograph */ {"\x9E", 0, 0x213072}, /* East Asian ideograph */ {"\xA3", 0, 0x213073}, /* East Asian ideograph */ {"\x94", 0, 0x213074}, /* East Asian ideograph */ {"\x97", 0, 0x213075}, /* East Asian ideograph */ {"\x99", 0, 0x213076}, /* East Asian ideograph */ {"\xA5", 0, 0x213077}, /* East Asian ideograph */ {"\xBF", 0, 0x213078}, /* East Asian ideograph */ {"\xBB", 0, 0x21307C}, /* East Asian ideograph */ {"\xB2", 0, 0x213124}, /* East Asian ideograph */ {"\xB3", 0, 0x213126}, /* East Asian ideograph */ {"\xB6", 0, 0x213127}, /* East Asian ideograph */ {"\xB0", 0, 0x213128}, /* East Asian ideograph */ {"\x89", 0, 0x21645E}, /* East Asian ideograph */ {"\x88", 0, 0x216461}, /* East Asian ideograph */ {"\x8E", 0, 0x216462}, /* East Asian ideograph */ {"\xA8", 0, 0x216463}, /* East Asian ideograph */ {"\xA1", 0, 0x21646B}, /* East Asian ideograph */ {"\xB5", 0, 0x216527}, /* East Asian ideograph */ {"\x91", 0, 0x27314F}, /* East Asian ideograph */ {"\x93", 0, 0x27316C}, /* East Asian ideograph */ {"\xAC", 0, 0x273173}, /* East Asian ideograph */ {"\x85", 0, 0x273249}, /* East Asian ideograph */ {"\x86", 0, 0x273255}, /* East Asian ideograph */ {"\xAA", 0, 0x273259}, /* East Asian ideograph */ {"\xB7", 0, 0x27325D}, /* East Asian ideograph */ {"\x8F", 0, 0x2D3132}, /* East Asian ideograph */ {"\x9F", 0, 0x2D3458}, /* East Asian ideograph */ {"\x9D", 0, 0x2D3543}, /* East Asian ideograph */ {"\xBD", 0, 0x333D54}, /* East Asian ideograph */ {"\xAD", 0, 0x4B3072}, /* East Asian ideograph */ {"\xAE", 0, 0x4B3231}, /* East Asian ideograph */ {"\x80", 0, 0x4B4B77}, /* East Asian ideograph */ {"\x82", 0, 0x4B682E}, /* East Asian ideograph */ {"\xAB", 0, 0x70586F}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page7 = { marc8r_31page7_flat, 0 }; /* PAGE 6 */ struct yaz_iconv_trie_flat marc8r_31page6_flat[] = { {"\x82", 0, 0x21304D}, /* East Asian ideograph */ {"\x8B", 0, 0x213050}, /* East Asian ideograph */ {"\x8C", 0, 0x213051}, /* East Asian ideograph */ {"\x8E", 0, 0x213052}, /* East Asian ideograph */ {"\x95", 0, 0x213053}, /* East Asian ideograph */ {"\x94", 0, 0x213054}, /* East Asian ideograph */ {"\x92", 0, 0x213055}, /* East Asian ideograph */ {"\x99", 0, 0x213057}, /* East Asian ideograph (variant of EACC 4B3057) */ {"\x9E", 0, 0x213058}, /* East Asian ideograph */ {"\x9B", 0, 0x213059}, /* East Asian ideograph */ {"\x9F", 0, 0x21305A}, /* East Asian ideograph */ {"\xA1", 0, 0x21305B}, /* East Asian ideograph */ {"\xA6", 0, 0x21305C}, /* East Asian ideograph */ {"\xA5", 0, 0x21305D}, /* East Asian ideograph */ {"\xA4", 0, 0x21305E}, /* East Asian ideograph */ {"\xA8", 0, 0x21305F}, /* East Asian ideograph */ {"\xAB", 0, 0x213060}, /* East Asian ideograph */ {"\xAC", 0, 0x213061}, /* East Asian ideograph */ {"\xAD", 0, 0x213062}, /* East Asian ideograph */ {"\xAE", 0, 0x213063}, /* East Asian ideograph */ {"\xBA", 0, 0x213064}, /* East Asian ideograph */ {"\x85", 0, 0x216446}, /* East Asian ideograph */ {"\xA0", 0, 0x216450}, /* East Asian ideograph */ {"\xA2", 0, 0x216451}, /* East Asian ideograph */ {"\xB3", 0, 0x216452}, /* East Asian ideograph */ {"\xB6", 0, 0x216455}, /* East Asian ideograph (variant of EACC 4B6455) */ {"\xB9", 0, 0x216458}, /* East Asian ideograph */ {"\xBC", 0, 0x21645A}, /* East Asian ideograph */ {"\x9A", 0, 0x273058}, /* East Asian ideograph */ {"\xBF", 0, 0x27325A}, /* East Asian ideograph */ {"\xA7", 0, 0x274B7A}, /* East Asian ideograph */ {"\xA9", 0, 0x274C2D}, /* East Asian ideograph */ {"\x86", 0, 0x274D73}, /* East Asian ideograph */ {"\x8F", 0, 0x27564C}, /* East Asian ideograph */ {"\x8D", 0, 0x275747}, /* East Asian ideograph */ {"\xB5", 0, 0x275777}, /* East Asian ideograph */ {"\xB2", 0, 0x27582C}, /* East Asian ideograph */ {"\x88", 0, 0x27595E}, /* East Asian ideograph */ {"\x91", 0, 0x275F54}, /* East Asian ideograph */ {"\x9C", 0, 0x2D3058}, /* East Asian ideograph */ {"\xBE", 0, 0x2D305B}, /* East Asian ideograph */ {"\xB0", 0, 0x2D3061}, /* East Asian ideograph */ {"\x89", 0, 0x2D4A3B}, /* East Asian ideograph */ {"\x80", 0, 0x2D632D}, /* East Asian ideograph */ {"\xAF", 0, 0x333060}, /* East Asian ideograph */ {"\x93", 0, 0x33332A}, /* East Asian ideograph */ {"\x81", 0, 0x39304C}, /* East Asian ideograph */ {"\x97", 0, 0x3F4629}, /* East Asian ideograph */ {"\x8A", 0, 0x4B3050}, /* East Asian ideograph */ {"\x98", 0, 0x513057}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page6 = { marc8r_31page6_flat, 0 }; /* PAGE 5 */ struct yaz_iconv_trie_flat marc8r_31page5_flat[] = { {"\x83", 0, 0x21303A}, /* East Asian ideograph */ {"\x85", 0, 0x21303B}, /* East Asian ideograph */ {"\x8B", 0, 0x21303D}, /* East Asian ideograph */ {"\x8F", 0, 0x21303F}, /* East Asian ideograph */ {"\x8E", 0, 0x213040}, /* East Asian ideograph */ {"\x8D", 0, 0x213041}, /* East Asian ideograph */ {"\x92", 0, 0x213042}, /* East Asian ideograph */ {"\x93", 0, 0x213043}, /* East Asian ideograph */ {"\x96", 0, 0x213044}, /* East Asian ideograph */ {"\x98", 0, 0x213045}, /* East Asian ideograph */ {"\x99", 0, 0x213046}, /* East Asian ideograph */ {"\x9D", 0, 0x213047}, /* East Asian ideograph */ {"\x9F", 0, 0x213048}, /* East Asian ideograph */ {"\x9E", 0, 0x213049}, /* East Asian ideograph */ {"\xB3", 0, 0x21304B}, /* East Asian ideograph */ {"\xBE", 0, 0x21304C}, /* East Asian ideograph */ {"\x82", 0, 0x216434}, /* East Asian ideograph */ {"\x9C", 0, 0x21643C}, /* East Asian ideograph */ {"\xB1", 0, 0x27304D}, /* East Asian ideograph */ {"\x94", 0, 0x27366F}, /* East Asian ideograph */ {"\xA6", 0, 0x274355}, /* East Asian ideograph */ {"\x90", 0, 0x27454E}, /* East Asian ideograph */ {"\x8C", 0, 0x27495D}, /* East Asian ideograph */ {"\x89", 0, 0x275242}, /* East Asian ideograph */ {"\xA0", 0, 0x27524D}, /* East Asian ideograph */ {"\x87", 0, 0x275644}, /* East Asian ideograph */ {"\xB0", 0, 0x27597A}, /* East Asian ideograph */ {"\xA1", 0, 0x275C70}, /* East Asian ideograph */ {"\x88", 0, 0x276260}, /* East Asian ideograph */ {"\x97", 0, 0x2D3045}, /* East Asian ideograph */ {"\xA9", 0, 0x2D4F41}, /* East Asian ideograph */ {"\xB9", 0, 0x33304C}, /* East Asian ideograph */ {"\x95", 0, 0x395643}, /* East Asian ideograph */ {"\xA2", 0, 0x695626}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page5 = { marc8r_31page5_flat, 0 }; /* PAGE 4 */ struct yaz_iconv_trie_flat marc8r_31page4_flat[] = { {"\x80", 0, 0x213021}, /* East Asian ideograph */ {"\x81", 0, 0x213022}, /* East Asian ideograph */ {"\x83", 0, 0x213023}, /* East Asian ideograph */ {"\x89", 0, 0x213024}, /* East Asian ideograph */ {"\x8B", 0, 0x213025}, /* East Asian ideograph */ {"\x8A", 0, 0x213026}, /* East Asian ideograph */ {"\x88", 0, 0x213027}, /* East Asian ideograph */ {"\x90", 0, 0x213029}, /* East Asian ideograph */ {"\x8D", 0, 0x21302A}, /* East Asian ideograph */ {"\x94", 0, 0x21302B}, /* East Asian ideograph */ {"\x99", 0, 0x21302C}, /* East Asian ideograph */ {"\x96", 0, 0x21302D}, /* East Asian ideograph */ {"\x95", 0, 0x21302E}, /* East Asian ideograph */ {"\x98", 0, 0x21302F}, /* East Asian ideograph */ {"\xA2", 0, 0x213030}, /* East Asian ideograph */ {"\x9E", 0, 0x213031}, /* East Asian ideograph */ {"\xA6", 0, 0x213032}, /* East Asian ideograph */ {"\xAD", 0, 0x213034}, /* East Asian ideograph */ {"\xB2", 0, 0x213035}, /* East Asian ideograph */ {"\xB8", 0, 0x213037}, /* East Asian ideograph */ {"\xB9", 0, 0x213038}, /* East Asian ideograph */ {"\xBB", 0, 0x213039}, /* East Asian ideograph */ {"\x8F", 0, 0x216424}, /* East Asian ideograph */ {"\xA8", 0, 0x216429}, /* East Asian ideograph */ {"\xB1", 0, 0x21642E}, /* East Asian ideograph */ {"\xB6", 0, 0x216431}, /* East Asian ideograph */ {"\xBF", 0, 0x216433}, /* East Asian ideograph */ {"\xAA", 0, 0x273224}, /* East Asian ideograph */ {"\xA4", 0, 0x273323}, /* East Asian ideograph */ {"\x9B", 0, 0x27352B}, /* East Asian ideograph */ {"\xA7", 0, 0x273663}, /* East Asian ideograph */ {"\xA5", 0, 0x27375A}, /* East Asian ideograph */ {"\x93", 0, 0x273B3F}, /* East Asian ideograph */ {"\x9C", 0, 0x274426}, /* East Asian ideograph */ {"\x9A", 0, 0x27452D}, /* East Asian ideograph */ {"\xBA", 0, 0x274951}, /* East Asian ideograph */ {"\x87", 0, 0x274F22}, /* East Asian ideograph */ {"\x9D", 0, 0x27513B}, /* East Asian ideograph */ {"\xB4", 0, 0x275425}, /* East Asian ideograph */ {"\x8E", 0, 0x275432}, /* East Asian ideograph */ {"\xBE", 0, 0x275434}, /* East Asian ideograph */ {"\xB0", 0, 0x275958}, /* East Asian ideograph */ {"\x91", 0, 0x275D30}, /* East Asian ideograph */ {"\xBD", 0, 0x276256}, /* East Asian ideograph */ {"\xAB", 0, 0x283B22}, /* East Asian ideograph */ {"\x97", 0, 0x2D302D}, /* East Asian ideograph */ {"\xBC", 0, 0x2D3053}, /* East Asian ideograph */ {"\x8C", 0, 0x2D332A}, /* East Asian ideograph */ {"\xA1", 0, 0x333323}, /* East Asian ideograph */ {"\xAC", 0, 0x4C5541}, /* East Asian ideograph */ {"", 0, 0} }; struct yaz_iconv_trie marc8r_31page4 = { marc8r_31page4_flat, 0 }; /* PAGE 3 */ struct yaz_iconv_trie_dir marc8r_31page3_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0}, {21, 0, 0}, {13, 0, 0}, {23, 0, 0}, {24, 0, 0}, {25, 0, 0}, {26, 0, 0}, {27, 0, 0}, {29, 0, 0}, {30, 0, 0}, {28, 0, 0}, {31, 0, 0}, {32, 0, 0}, {33, 0, 0}, {34, 0, 0}, {35, 0, 0}, {36, 0, 0}, {37, 0, 0}, {38, 0, 0}, {39, 0, 0}, {40, 0, 0}, {41, 0, 0}, {42, 0, 0}, {43, 0, 0}, {44, 0, 0}, {45, 0, 0}, {46, 0, 0}, {47, 0, 0}, {48, 0, 0}, {49, 0, 0}, {50, 0, 0}, {51, 0, 0}, {52, 0, 0}, {53, 0, 0}, {54, 0, 0}, {55, 0, 0}, {56, 0, 0}, {57, 0, 0}, {58, 0, 0}, {59, 0, 0}, {60, 0, 0}, {61, 0, 0}, {62, 0, 0}, {14, 0, 0}, {63, 0, 0}, {64, 0, 0}, {65, 0, 0}, {66, 0, 0}, {67, 0, 0}, {68, 0, 0}, {69, 0, 0}, {70, 0, 0}, {71, 0, 0}, {72, 0, 0}, {73, 0, 0}, {75, 0, 0}, {76, 0, 0}, {77, 0, 0}, {78, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page3 = { 0, marc8r_31page3_dir }; /* PAGE 2 */ struct yaz_iconv_trie_dir marc8r_31page2_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {330, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {5, 0, 0}, {6, 0, 0}, {7, 0, 0}, {8, 0, 0}, {9, 0, 0}, {10, 0, 0}, {11, 0, 0}, {12, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page2 = { 0, marc8r_31page2_dir }; /* PAGE 1 */ struct yaz_iconv_trie_dir marc8r_31page1_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {337, 0, 0}, {341, 0, 0}, {342, 0, 0}, {340, 0, 0}, {343, 0, 0}, {344, 0, 0}, {523, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {339, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {338, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page1 = { 0, marc8r_31page1_dir }; /* PAGE 0 */ struct yaz_iconv_trie_dir marc8r_31page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {2, 0, 0}, {3, 0, 0}, {4, 0, 0}, {22, 0, 0}, {143, 0, 0}, {183, 0, 0}, {74, 0, 0}, {345, 0, 0}, {362, 0, 0}, {427, 0, 0}, {491, 0, 0}, {524, 0, 0}, {525, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie marc8r_31page0 = { 0, marc8r_31page0_dir }; struct yaz_iconv_trie *marc8r_31ptrs [] = { &marc8r_31page0, &marc8r_31page1, &marc8r_31page2, &marc8r_31page3, &marc8r_31page4, &marc8r_31page5, &marc8r_31page6, &marc8r_31page7, &marc8r_31page8, &marc8r_31page9, &marc8r_31page10, &marc8r_31page11, &marc8r_31page12, &marc8r_31page13, &marc8r_31page14, &marc8r_31page15, &marc8r_31page16, &marc8r_31page17, &marc8r_31page18, &marc8r_31page19, &marc8r_31page20, &marc8r_31page21, &marc8r_31page22, &marc8r_31page23, &marc8r_31page24, &marc8r_31page25, &marc8r_31page26, &marc8r_31page27, &marc8r_31page28, &marc8r_31page29, &marc8r_31page30, &marc8r_31page31, &marc8r_31page32, &marc8r_31page33, &marc8r_31page34, &marc8r_31page35, &marc8r_31page36, &marc8r_31page37, &marc8r_31page38, &marc8r_31page39, &marc8r_31page40, &marc8r_31page41, &marc8r_31page42, &marc8r_31page43, &marc8r_31page44, &marc8r_31page45, &marc8r_31page46, &marc8r_31page47, &marc8r_31page48, &marc8r_31page49, &marc8r_31page50, &marc8r_31page51, &marc8r_31page52, &marc8r_31page53, &marc8r_31page54, &marc8r_31page55, &marc8r_31page56, &marc8r_31page57, &marc8r_31page58, &marc8r_31page59, &marc8r_31page60, &marc8r_31page61, &marc8r_31page62, &marc8r_31page63, &marc8r_31page64, &marc8r_31page65, &marc8r_31page66, &marc8r_31page67, &marc8r_31page68, &marc8r_31page69, &marc8r_31page70, &marc8r_31page71, &marc8r_31page72, &marc8r_31page73, &marc8r_31page74, &marc8r_31page75, &marc8r_31page76, &marc8r_31page77, &marc8r_31page78, &marc8r_31page79, &marc8r_31page80, &marc8r_31page81, &marc8r_31page82, &marc8r_31page83, &marc8r_31page84, &marc8r_31page85, &marc8r_31page86, &marc8r_31page87, &marc8r_31page88, &marc8r_31page89, &marc8r_31page90, &marc8r_31page91, &marc8r_31page92, &marc8r_31page93, &marc8r_31page94, &marc8r_31page95, &marc8r_31page96, &marc8r_31page97, &marc8r_31page98, &marc8r_31page99, &marc8r_31page100, &marc8r_31page101, &marc8r_31page102, &marc8r_31page103, &marc8r_31page104, &marc8r_31page105, &marc8r_31page106, &marc8r_31page107, &marc8r_31page108, &marc8r_31page109, &marc8r_31page110, &marc8r_31page111, &marc8r_31page112, &marc8r_31page113, &marc8r_31page114, &marc8r_31page115, &marc8r_31page116, &marc8r_31page117, &marc8r_31page118, &marc8r_31page119, &marc8r_31page120, &marc8r_31page121, &marc8r_31page122, &marc8r_31page123, &marc8r_31page124, &marc8r_31page125, &marc8r_31page126, &marc8r_31page127, &marc8r_31page128, &marc8r_31page129, &marc8r_31page130, &marc8r_31page131, &marc8r_31page132, &marc8r_31page133, &marc8r_31page134, &marc8r_31page135, &marc8r_31page136, &marc8r_31page137, &marc8r_31page138, &marc8r_31page139, &marc8r_31page140, &marc8r_31page141, &marc8r_31page142, &marc8r_31page143, &marc8r_31page144, &marc8r_31page145, &marc8r_31page146, &marc8r_31page147, &marc8r_31page148, &marc8r_31page149, &marc8r_31page150, &marc8r_31page151, &marc8r_31page152, &marc8r_31page153, &marc8r_31page154, &marc8r_31page155, &marc8r_31page156, &marc8r_31page157, &marc8r_31page158, &marc8r_31page159, &marc8r_31page160, &marc8r_31page161, &marc8r_31page162, &marc8r_31page163, &marc8r_31page164, &marc8r_31page165, &marc8r_31page166, &marc8r_31page167, &marc8r_31page168, &marc8r_31page169, &marc8r_31page170, &marc8r_31page171, &marc8r_31page172, &marc8r_31page173, &marc8r_31page174, &marc8r_31page175, &marc8r_31page176, &marc8r_31page177, &marc8r_31page178, &marc8r_31page179, &marc8r_31page180, &marc8r_31page181, &marc8r_31page182, &marc8r_31page183, &marc8r_31page184, &marc8r_31page185, &marc8r_31page186, &marc8r_31page187, &marc8r_31page188, &marc8r_31page189, &marc8r_31page190, &marc8r_31page191, &marc8r_31page192, &marc8r_31page193, &marc8r_31page194, &marc8r_31page195, &marc8r_31page196, &marc8r_31page197, &marc8r_31page198, &marc8r_31page199, &marc8r_31page200, &marc8r_31page201, &marc8r_31page202, &marc8r_31page203, &marc8r_31page204, &marc8r_31page205, &marc8r_31page206, &marc8r_31page207, &marc8r_31page208, &marc8r_31page209, &marc8r_31page210, &marc8r_31page211, &marc8r_31page212, &marc8r_31page213, &marc8r_31page214, &marc8r_31page215, &marc8r_31page216, &marc8r_31page217, &marc8r_31page218, &marc8r_31page219, &marc8r_31page220, &marc8r_31page221, &marc8r_31page222, &marc8r_31page223, &marc8r_31page224, &marc8r_31page225, &marc8r_31page226, &marc8r_31page227, &marc8r_31page228, &marc8r_31page229, &marc8r_31page230, &marc8r_31page231, &marc8r_31page232, &marc8r_31page233, &marc8r_31page234, &marc8r_31page235, &marc8r_31page236, &marc8r_31page237, &marc8r_31page238, &marc8r_31page239, &marc8r_31page240, &marc8r_31page241, &marc8r_31page242, &marc8r_31page243, &marc8r_31page244, &marc8r_31page245, &marc8r_31page246, &marc8r_31page247, &marc8r_31page248, &marc8r_31page249, &marc8r_31page250, &marc8r_31page251, &marc8r_31page252, &marc8r_31page253, &marc8r_31page254, &marc8r_31page255, &marc8r_31page256, &marc8r_31page257, &marc8r_31page258, &marc8r_31page259, &marc8r_31page260, &marc8r_31page261, &marc8r_31page262, &marc8r_31page263, &marc8r_31page264, &marc8r_31page265, &marc8r_31page266, &marc8r_31page267, &marc8r_31page268, &marc8r_31page269, &marc8r_31page270, &marc8r_31page271, &marc8r_31page272, &marc8r_31page273, &marc8r_31page274, &marc8r_31page275, &marc8r_31page276, &marc8r_31page277, &marc8r_31page278, &marc8r_31page279, &marc8r_31page280, &marc8r_31page281, &marc8r_31page282, &marc8r_31page283, &marc8r_31page284, &marc8r_31page285, &marc8r_31page286, &marc8r_31page287, &marc8r_31page288, &marc8r_31page289, &marc8r_31page290, &marc8r_31page291, &marc8r_31page292, &marc8r_31page293, &marc8r_31page294, &marc8r_31page295, &marc8r_31page296, &marc8r_31page297, &marc8r_31page298, &marc8r_31page299, &marc8r_31page300, &marc8r_31page301, &marc8r_31page302, &marc8r_31page303, &marc8r_31page304, &marc8r_31page305, &marc8r_31page306, &marc8r_31page307, &marc8r_31page308, &marc8r_31page309, &marc8r_31page310, &marc8r_31page311, &marc8r_31page312, &marc8r_31page313, &marc8r_31page314, &marc8r_31page315, &marc8r_31page316, &marc8r_31page317, &marc8r_31page318, &marc8r_31page319, &marc8r_31page320, &marc8r_31page321, &marc8r_31page322, &marc8r_31page323, &marc8r_31page324, &marc8r_31page325, &marc8r_31page326, &marc8r_31page327, &marc8r_31page328, &marc8r_31page329, &marc8r_31page330, &marc8r_31page331, &marc8r_31page332, &marc8r_31page333, &marc8r_31page334, &marc8r_31page335, &marc8r_31page336, &marc8r_31page337, &marc8r_31page338, &marc8r_31page339, &marc8r_31page340, &marc8r_31page341, &marc8r_31page342, &marc8r_31page343, &marc8r_31page344, &marc8r_31page345, &marc8r_31page346, &marc8r_31page347, &marc8r_31page348, &marc8r_31page349, &marc8r_31page350, &marc8r_31page351, &marc8r_31page352, &marc8r_31page353, &marc8r_31page354, &marc8r_31page355, &marc8r_31page356, &marc8r_31page357, &marc8r_31page358, &marc8r_31page359, &marc8r_31page360, &marc8r_31page361, &marc8r_31page362, &marc8r_31page363, &marc8r_31page364, &marc8r_31page365, &marc8r_31page366, &marc8r_31page367, &marc8r_31page368, &marc8r_31page369, &marc8r_31page370, &marc8r_31page371, &marc8r_31page372, &marc8r_31page373, &marc8r_31page374, &marc8r_31page375, &marc8r_31page376, &marc8r_31page377, &marc8r_31page378, &marc8r_31page379, &marc8r_31page380, &marc8r_31page381, &marc8r_31page382, &marc8r_31page383, &marc8r_31page384, &marc8r_31page385, &marc8r_31page386, &marc8r_31page387, &marc8r_31page388, &marc8r_31page389, &marc8r_31page390, &marc8r_31page391, &marc8r_31page392, &marc8r_31page393, &marc8r_31page394, &marc8r_31page395, &marc8r_31page396, &marc8r_31page397, &marc8r_31page398, &marc8r_31page399, &marc8r_31page400, &marc8r_31page401, &marc8r_31page402, &marc8r_31page403, &marc8r_31page404, &marc8r_31page405, &marc8r_31page406, &marc8r_31page407, &marc8r_31page408, &marc8r_31page409, &marc8r_31page410, &marc8r_31page411, &marc8r_31page412, &marc8r_31page413, &marc8r_31page414, &marc8r_31page415, &marc8r_31page416, &marc8r_31page417, &marc8r_31page418, &marc8r_31page419, &marc8r_31page420, &marc8r_31page421, &marc8r_31page422, &marc8r_31page423, &marc8r_31page424, &marc8r_31page425, &marc8r_31page426, &marc8r_31page427, &marc8r_31page428, &marc8r_31page429, &marc8r_31page430, &marc8r_31page431, &marc8r_31page432, &marc8r_31page433, &marc8r_31page434, &marc8r_31page435, &marc8r_31page436, &marc8r_31page437, &marc8r_31page438, &marc8r_31page439, &marc8r_31page440, &marc8r_31page441, &marc8r_31page442, &marc8r_31page443, &marc8r_31page444, &marc8r_31page445, &marc8r_31page446, &marc8r_31page447, &marc8r_31page448, &marc8r_31page449, &marc8r_31page450, &marc8r_31page451, &marc8r_31page452, &marc8r_31page453, &marc8r_31page454, &marc8r_31page455, &marc8r_31page456, &marc8r_31page457, &marc8r_31page458, &marc8r_31page459, &marc8r_31page460, &marc8r_31page461, &marc8r_31page462, &marc8r_31page463, &marc8r_31page464, &marc8r_31page465, &marc8r_31page466, &marc8r_31page467, &marc8r_31page468, &marc8r_31page469, &marc8r_31page470, &marc8r_31page471, &marc8r_31page472, &marc8r_31page473, &marc8r_31page474, &marc8r_31page475, &marc8r_31page476, &marc8r_31page477, &marc8r_31page478, &marc8r_31page479, &marc8r_31page480, &marc8r_31page481, &marc8r_31page482, &marc8r_31page483, &marc8r_31page484, &marc8r_31page485, &marc8r_31page486, &marc8r_31page487, &marc8r_31page488, &marc8r_31page489, &marc8r_31page490, &marc8r_31page491, &marc8r_31page492, &marc8r_31page493, &marc8r_31page494, &marc8r_31page495, &marc8r_31page496, &marc8r_31page497, &marc8r_31page498, &marc8r_31page499, &marc8r_31page500, &marc8r_31page501, &marc8r_31page502, &marc8r_31page503, &marc8r_31page504, &marc8r_31page505, &marc8r_31page506, &marc8r_31page507, &marc8r_31page508, &marc8r_31page509, &marc8r_31page510, &marc8r_31page511, &marc8r_31page512, &marc8r_31page513, &marc8r_31page514, &marc8r_31page515, &marc8r_31page516, &marc8r_31page517, &marc8r_31page518, &marc8r_31page519, &marc8r_31page520, &marc8r_31page521, &marc8r_31page522, &marc8r_31page523, &marc8r_31page524, &marc8r_31page525, &marc8r_31page526, 0, }; unsigned long yaz_marc8r_31_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(marc8r_31ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } yaz-5.28.0/src/iso5426.c0000644000175000017500000004164513273126163011416 00000000000000/** \file iso5426.c \brief Character conversion, generated from ./codetables-iso5426.xml Generated automatically by charconv.tcl */ #include #if HAVE_CONFIG_H #include #endif struct yaz_iconv_trie_flat { char from[6]; unsigned combining : 1; unsigned to : 24; }; struct yaz_iconv_trie_dir { int ptr : 15; unsigned combining : 1; unsigned to : 24; }; struct yaz_iconv_trie { struct yaz_iconv_trie_flat *flat; struct yaz_iconv_trie_dir *dir; }; static unsigned long lookup(struct yaz_iconv_trie **ptrs, int ptr, unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { struct yaz_iconv_trie *t = ptrs[ptr-1]; if (inbytesleft < 1) return 0; if (t->dir) { size_t ch = (inp[0] & mask) + boffset; unsigned long code; if (t->dir[ch].ptr) { code = lookup(ptrs, t->dir[ch].ptr, inp+1, inbytesleft-1, no_read, combining, mask, boffset); if (code) { (*no_read)++; return code; } } if (t->dir[ch].to) { code = t->dir[ch].to; *combining = t->dir[ch].combining; *no_read = 1; return code; } } else { struct yaz_iconv_trie_flat *flat = t->flat; while (flat->to) { size_t len = strlen(flat->from); if (len <= inbytesleft) { size_t i; for (i = 0; i < len; i++) { if (((unsigned char *) flat->from)[i] != (inp[i] & mask) + boffset) break; } if (i == len) { *no_read = len; *combining = flat->combining; return flat->to; } } flat++; } } return 0; } /* TRIE: size 98 */ /* PAGE 0 */ struct yaz_iconv_trie_dir iso5426_42page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x001D} /* RECORD TERMINATOR / GROUP SEPARATOR */, {0, 0, 0x001E} /* FIELD TERMINATOR / RECORD SEPARATOR */, {0, 0, 0x001F} /* SUBFIELD DELIMITER / UNIT SEPARATOR */, {0, 0, 0x0020} /* SPACE, BLANK / SPACE */, {0, 0, 0x0021} /* EXCLAMATION MARK */, {0, 0, 0x0022} /* QUOTATION MARK */, {0, 0, 0x0023} /* NUMBER SIGN */, {0, 0, 0x0024} /* DOLLAR SIGN */, {0, 0, 0x0025} /* PERCENT SIGN */, {0, 0, 0x0026} /* AMPERSAND */, {0, 0, 0x0027} /* APOSTROPHE */, {0, 0, 0x0028} /* OPENING PARENTHESIS / LEFT PARENTHESIS */, {0, 0, 0x0029} /* CLOSING PARENTHESIS / CLOSING PARENTHESIS */, {0, 0, 0x002A} /* ASTERISK */, {0, 0, 0x002B} /* PLUS SIGN */, {0, 0, 0x002C} /* COMMA */, {0, 0, 0x002D} /* HYPHEN-MINUS */, {0, 0, 0x002E} /* PERIOD, DECIMAL POINT / FULL STOP */, {0, 0, 0x002F} /* SLASH / SOLIDUS */, {0, 0, 0x0030} /* DIGIT ZERO */, {0, 0, 0x0031} /* DIGIT ONE */, {0, 0, 0x0032} /* DIGIT TWO */, {0, 0, 0x0033} /* DIGIT THREE */, {0, 0, 0x0034} /* DIGIT FOUR */, {0, 0, 0x0035} /* DIGIT FIVE */, {0, 0, 0x0036} /* DIGIT SIX */, {0, 0, 0x0037} /* DIGIT SEVEN */, {0, 0, 0x0038} /* DIGIT EIGHT */, {0, 0, 0x0039} /* DIGIT NINE */, {0, 0, 0x003A} /* COLON */, {0, 0, 0x003B} /* SEMICOLON */, {0, 0, 0x003C} /* LESS-THAN SIGN */, {0, 0, 0x003D} /* EQUALS SIGN */, {0, 0, 0x003E} /* GREATER-THAN SIGN */, {0, 0, 0x003F} /* QUESTION MARK */, {0, 0, 0x0040} /* COMMERCIAL AT */, {0, 0, 0x0041} /* LATIN CAPITAL LETTER A */, {0, 0, 0x0042} /* LATIN CAPITAL LETTER B */, {0, 0, 0x0043} /* LATIN CAPITAL LETTER C */, {0, 0, 0x0044} /* LATIN CAPITAL LETTER D */, {0, 0, 0x0045} /* LATIN CAPITAL LETTER E */, {0, 0, 0x0046} /* LATIN CAPITAL LETTER F */, {0, 0, 0x0047} /* LATIN CAPITAL LETTER G */, {0, 0, 0x0048} /* LATIN CAPITAL LETTER H */, {0, 0, 0x0049} /* LATIN CAPITAL LETTER I */, {0, 0, 0x004A} /* LATIN CAPITAL LETTER J */, {0, 0, 0x004B} /* LATIN CAPITAL LETTER K */, {0, 0, 0x004C} /* LATIN CAPITAL LETTER L */, {0, 0, 0x004D} /* LATIN CAPITAL LETTER M */, {0, 0, 0x004E} /* LATIN CAPITAL LETTER N */, {0, 0, 0x004F} /* LATIN CAPITAL LETTER O */, {0, 0, 0x0050} /* LATIN CAPITAL LETTER P */, {0, 0, 0x0051} /* LATIN CAPITAL LETTER Q */, {0, 0, 0x0052} /* LATIN CAPITAL LETTER R */, {0, 0, 0x0053} /* LATIN CAPITAL LETTER S */, {0, 0, 0x0054} /* LATIN CAPITAL LETTER T */, {0, 0, 0x0055} /* LATIN CAPITAL LETTER U */, {0, 0, 0x0056} /* LATIN CAPITAL LETTER V */, {0, 0, 0x0057} /* LATIN CAPITAL LETTER W */, {0, 0, 0x0058} /* LATIN CAPITAL LETTER X */, {0, 0, 0x0059} /* LATIN CAPITAL LETTER Y */, {0, 0, 0x005A} /* LATIN CAPITAL LETTER Z */, {0, 0, 0x005B} /* OPENING SQUARE BRACKET / LEFT SQUARE BRACKET */, {0, 0, 0x005C} /* REVERSE SLASH / REVERSE SOLIDUS */, {0, 0, 0x005D} /* CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET */, {0, 0, 0x005E} /* SPACING CIRCUMFLEX / CIRCUMFLEX ACCENT */, {0, 0, 0x005F} /* SPACING UNDERSCORE / LOW LINE */, {0, 0, 0x0060} /* SPACING GRAVE / GRAVE ACCENT */, {0, 0, 0x0061} /* LATIN SMALL LETTER A */, {0, 0, 0x0062} /* LATIN SMALL LETTER B */, {0, 0, 0x0063} /* LATIN SMALL LETTER C */, {0, 0, 0x0064} /* LATIN SMALL LETTER D */, {0, 0, 0x0065} /* LATIN SMALL LETTER E */, {0, 0, 0x0066} /* LATIN SMALL LETTER F */, {0, 0, 0x0067} /* LATIN SMALL LETTER G */, {0, 0, 0x0068} /* LATIN SMALL LETTER H */, {0, 0, 0x0069} /* LATIN SMALL LETTER I */, {0, 0, 0x006A} /* LATIN SMALL LETTER J */, {0, 0, 0x006B} /* LATIN SMALL LETTER K */, {0, 0, 0x006C} /* LATIN SMALL LETTER L */, {0, 0, 0x006D} /* LATIN SMALL LETTER M */, {0, 0, 0x006E} /* LATIN SMALL LETTER N */, {0, 0, 0x006F} /* LATIN SMALL LETTER O */, {0, 0, 0x0070} /* LATIN SMALL LETTER P */, {0, 0, 0x0071} /* LATIN SMALL LETTER Q */, {0, 0, 0x0072} /* LATIN SMALL LETTER R */, {0, 0, 0x0073} /* LATIN SMALL LETTER S */, {0, 0, 0x0074} /* LATIN SMALL LETTER T */, {0, 0, 0x0075} /* LATIN SMALL LETTER U */, {0, 0, 0x0076} /* LATIN SMALL LETTER V */, {0, 0, 0x0077} /* LATIN SMALL LETTER W */, {0, 0, 0x0078} /* LATIN SMALL LETTER X */, {0, 0, 0x0079} /* LATIN SMALL LETTER Y */, {0, 0, 0x007A} /* LATIN SMALL LETTER Z */, {0, 0, 0x007B} /* OPENING CURLY BRACKET / LEFT CURLY BRACKET */, {0, 0, 0x007C} /* VERTICAL BAR (FILL) / VERTICAL LINE */, {0, 0, 0x007D} /* CLOSING CURLY BRACKET / RIGHT CURLY BRACKET */, {0, 0, 0x007E} /* SPACING TILDE / TILDE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie iso5426_42page0 = { 0, iso5426_42page0_dir }; struct yaz_iconv_trie *iso5426_42ptrs [] = { &iso5426_42page0, 0, }; unsigned long yaz_iso5426_42_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(iso5426_42ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } /* TRIE: size 76 */ /* PAGE 0 */ struct yaz_iconv_trie_dir iso5426_45page0_dir[256] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x0098} /* NON-SORT BEGIN / START OF STRING */, {0, 0, 0x009C} /* NON-SORT END / STRING TERMINATOR */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x00A1} /* INVERTED EXCLAMATION MARK */, {0, 0, 0x201E} /* LOW DOUBLE COMMA QUOTATION MARK */, {0, 0, 0x00A3} /* BRITISH POUND / POUND SIGN */, {0, 0, 0x0024} /* DOLLAR SIGN */, {0, 0, 0x00A5} /* YEN SIGN */, {0, 0, 0x2020} /* DAGGER */, {0, 0, 0x00A7} /* SECTION SIGN */, {0, 0, 0x2032} /* PRIME */, {0, 0, 0x2018} /* SINGLE TURNED COMMA QUOTATION MARK */, {0, 0, 0x201C} /* DOUBLE TURNED COMMA QUOTATION MARK */, {0, 0, 0x00AB} /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (LEFT POINTING GUILLEMET) */, {0, 0, 0x266D} /* MUSIC FLAT SIGN (FLAT) */, {0, 0, 0x00A9} /* COPYRIGHT SIGN */, {0, 0, 0x2117} /* SOUND RECORDING COPYRIGHT */, {0, 0, 0x00AE} /* PATENT MARK / REGISTERED SIGN */, {0, 0, 0x02BB} /* AYN / MODIFIER LETTER TURNED COMMA */, {0, 0, 0x02BC} /* ALIF / MODIFIER LETTER APOSTROPHE */, {0, 0, 0x201A} /* SINGLE LOW-9 QUOTATION MARK (LOW SINGLE COMMA QUOTATION MARK) */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x2021} /* */, {0, 0, 0x00B7} /* MIDDLE DOT */, {0, 0, 0x2033} /* DOUBLE PRIME */, {0, 0, 0x2019} /* RIGHT SINGLE QUOTATION MARK (SINGLE COMMA QUOTATION MARK) */, {0, 0, 0x201D} /* RIGHT DOUBLE QUOTATION MARK (DOUBLE COMMA QUOTATION MARK) */, {0, 0, 0x00BB} /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (RIGHT POINTING GUILLEMET) */, {0, 0, 0x266F} /* MUSIC SHARP SIGN */, {0, 0, 0x02B9} /* SOFT SIGN, PRIME / MODIFIER LETTER PRIME */, {0, 0, 0x02BA} /* HARD SIGN, DOUBLE PRIME / MODIFIER LETTER DOUBLE PRIME */, {0, 0, 0x00BF} /* INVERTED QUESTION MARK */, {0, 1, 0x0309} /* PSEUDO QUESTION MARK / COMBINING HOOK ABOVE */, {0, 1, 0x0300} /* GRAVE / COMBINING GRAVE ACCENT (Varia) */, {0, 1, 0x0301} /* ACUTE / COMBINING ACUTE ACCENT (Oxia) */, {0, 1, 0x0302} /* CIRCUMFLEX / COMBINING CIRCUMFLEX ACCENT */, {0, 1, 0x0303} /* TILDE / COMBINING TILDE */, {0, 1, 0x0304} /* MACRON / COMBINING MACRON */, {0, 1, 0x0306} /* BREVE / COMBINING BREVE (Vrachy) */, {0, 1, 0x0307} /* SUPERIOR DOT / COMBINING DOT ABOVE */, {0, 1, 0x0308} /* U+034F COMBINING GRAPHEME JOINER (CGJ) / tréma */, {0, 1, 0x0308} /* UMLAUT, DIAERESIS / COMBINING DIAERESIS (Dialytika) */, {0, 1, 0x030A} /* CIRCLE ABOVE, ANGSTROM / COMBINING RING ABOVE */, {0, 1, 0x0315} /* HIGH COMMA, OFF CENTER / COMBINING COMMA ABOVE RIGHT */, {0, 1, 0x0313} /* HIGH COMMA, CENTERED / COMBINING COMMA ABOVE (Psili) */, {0, 1, 0x030B} /* DOUBLE ACUTE / COMBINING DOUBLE ACUTE ACCENT */, {0, 1, 0x031B} /* COMBINING HORN (NON-SPACING HORN) */, {0, 1, 0x030C} /* HACEK / COMBINING CARON */, {0, 1, 0x0327} /* CEDILLA / COMBINING CEDILLA */, {0, 1, 0x031C} /* RIGHT CEDILLA / COMBINING LEFT HALF RING BELOW */, {0, 1, 0x0326} /* LEFT HOOK (COMMA BELOW) / COMBINING COMMA BELOW */, {0, 1, 0x0328} /* RIGHT HOOK, OGONEK / COMBINING OGONEK */, {0, 1, 0x0325} /* CIRCLE BELOW / COMBINING RING BELOW */, {0, 1, 0x032E} /* UPADHMANIYA / COMBINING BREVE BELOW */, {0, 1, 0x0323} /* DOT BELOW / COMBINING DOT BELOW */, {0, 1, 0x0324} /* DOUBLE DOT BELOW / COMBINING DIAERESIS BELOW */, {0, 1, 0x0332} /* UNDERSCORE / COMBINING LOW LINE */, {0, 1, 0x0333} /* DOUBLE UNDERSCORE / COMBINING DOUBLE LOW LINE */, {0, 1, 0x0329} /* COMBINING VERTICAL LINE BELOW (NON-SPACING VERTICAL LINE BELOW) */, {0, 1, 0x032D} /* COMBINING CIRCUMFLEX ACCENT BELOW (NON-SPACING CIRCUMFLEX BELOW) */, {0, 0, 0}, {0, 1, 0x0360} /* DOUBLE TILDE, FIRST HALF / COMBINING DOUBLE TILDE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x00C6} /* UPPERCASE DIGRAPH AE / LATIN CAPITAL LIGATURE AE */, {0, 0, 0x0110} /* UPPERCASE D WITH CROSSBAR / LATIN CAPITAL LETTER D WITH STROKE */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x0132} /* LATIN CAPITAL LIGATURE IJ (LATIN CAPITAL LETTER I J) */, {0, 0, 0}, {0, 0, 0x0141} /* UPPERCASE POLISH L / LATIN CAPITAL LETTER L WITH STROKE */, {0, 0, 0x00D8} /* UPPERCASE SCANDINAVIAN O / LATIN CAPITAL LETTER O WITH STROKE */, {0, 0, 0x0152} /* UPPERCASE DIGRAPH OE / LATIN CAPITAL LIGATURE OE */, {0, 0, 0}, {0, 0, 0x00DE} /* UPPERCASE ICELANDIC THORN / LATIN CAPITAL LETTER THORN (Icelandic) */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0x00E6} /* LOWERCASE DIGRAPH AE / LATIN SMALL LIGATURE AE */, {0, 0, 0x0111} /* LOWERCASE D WITH CROSSBAR / LATIN SMALL LETTER D WITH STROKE */, {0, 0, 0x00F0} /* LOWERCASE ETH / LATIN SMALL LETTER ETH (Icelandic) */, {0, 0, 0}, {0, 0, 0x0131} /* LOWERCASE TURKISH I / LATIN SMALL LETTER DOTLESS I */, {0, 0, 0x0133} /* LATIN SMALL LIGATURE IJ (LATIN SMALL LETTER I J) */, {0, 0, 0}, {0, 0, 0x0142} /* LOWERCASE POLISH L / LATIN SMALL LETTER L WITH STROKE */, {0, 0, 0x00F8} /* LOWERCASE SCANDINAVIAN O / LATIN SMALL LETTER O WITH STROKE */, {0, 0, 0x0153} /* LOWERCASE DIGRAPH OE / LATIN SMALL LIGATURE OE */, {0, 0, 0x00DF} /* ESZETT SYMBOL */, {0, 0, 0x00FE} /* LOWERCASE ICELANDIC THORN / LATIN SMALL LETTER THORN (Icelandic) */, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; struct yaz_iconv_trie iso5426_45page0 = { 0, iso5426_45page0_dir }; struct yaz_iconv_trie *iso5426_45ptrs [] = { &iso5426_45page0, 0, }; unsigned long yaz_iso5426_45_conv (unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, unsigned int boffset) { unsigned long code; code = lookup(iso5426_45ptrs, 1, inp, inbytesleft, no_read, combining, mask, boffset); if (!code) { *no_read = 1; } return code; } yaz-5.28.0/src/oid_std.c0000644000175000017500000004564213273126163011731 00000000000000/** \file oid_std.c \brief Standard Object Identifiers: Generated from ./oid.csv */ #if HAVE_CONFIG_H #include #endif #include YAZ_EXPORT const Odr_oid yaz_oid_transyn_ber[] = {2,1,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_transyn_iso2709[] = {1,0,2709,1,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_general_isoill_1[] = {1,0,10161,2,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_absyn_z_apdu[] = {2,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_appctx_z_basic[] = {1,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_bib_1[] = {Z3950_PREFIX,3,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_exp_1[] = {Z3950_PREFIX,3,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_ext_1[] = {Z3950_PREFIX,3,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_ccl_1[] = {Z3950_PREFIX,3,4,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_gils[] = {Z3950_PREFIX,3,5,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_gils_attset[] = {Z3950_PREFIX,3,5,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_stas_attset[] = {Z3950_PREFIX,3,6,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_collections_attset[] = {Z3950_PREFIX,3,7,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_cimi_attset[] = {Z3950_PREFIX,3,8,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_geo_attset[] = {Z3950_PREFIX,3,9,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_zbig[] = {Z3950_PREFIX,3,10,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_util[] = {Z3950_PREFIX,3,11,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_xd_1[] = {Z3950_PREFIX,3,12,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_zthes[] = {Z3950_PREFIX,3,13,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_fin_1[] = {Z3950_PREFIX,3,14,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_dan_1[] = {Z3950_PREFIX,3,15,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_holdings[] = {Z3950_PREFIX,3,16,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_marc[] = {Z3950_PREFIX,3,17,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_bib_2[] = {Z3950_PREFIX,3,18,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_zeerex[] = {Z3950_PREFIX,3,19,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_thesaurus_attset[] = {Z3950_PREFIX,3,1000,81,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_idxpath[] = {Z3950_PREFIX,3,1000,81,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_attset_extlite[] = {Z3950_PREFIX,3,1000,81,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_diagset_bib_1[] = {Z3950_PREFIX,4,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_diagset_diag_1[] = {Z3950_PREFIX,4,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_diagset_diag_es[] = {Z3950_PREFIX,4,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_diagset_diag_general[] = {Z3950_PREFIX,4,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_unimarc[] = {Z3950_PREFIX,5,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_intermarc[] = {Z3950_PREFIX,5,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_ccf[] = {Z3950_PREFIX,5,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_usmarc[] = {Z3950_PREFIX,5,10,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_marc21[] = {Z3950_PREFIX,5,10,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_ukmarc[] = {Z3950_PREFIX,5,11,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_normarc[] = {Z3950_PREFIX,5,12,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_librismarc[] = {Z3950_PREFIX,5,13,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_danmarc[] = {Z3950_PREFIX,5,14,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_finmarc[] = {Z3950_PREFIX,5,15,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_mab[] = {Z3950_PREFIX,5,16,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_canmarc[] = {Z3950_PREFIX,5,17,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_sbn[] = {Z3950_PREFIX,5,18,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_picamarc[] = {Z3950_PREFIX,5,19,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_ausmarc[] = {Z3950_PREFIX,5,20,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_ibermarc[] = {Z3950_PREFIX,5,21,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_carmarc[] = {Z3950_PREFIX,5,22,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_malmarc[] = {Z3950_PREFIX,5,23,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_jpmarc[] = {Z3950_PREFIX,5,24,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_swemarc[] = {Z3950_PREFIX,5,25,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_siglemarc[] = {Z3950_PREFIX,5,26,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_isdsmarc[] = {Z3950_PREFIX,5,27,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_rusmarc[] = {Z3950_PREFIX,5,28,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_hunmarc[] = {Z3950_PREFIX,5,29,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_nacsis_catp[] = {Z3950_PREFIX,5,30,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_finmarc2000[] = {Z3950_PREFIX,5,31,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_marc21_fin[] = {Z3950_PREFIX,5,32,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_explain[] = {Z3950_PREFIX,5,100,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_sutrs[] = {Z3950_PREFIX,5,101,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_opac[] = {Z3950_PREFIX,5,102,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_summary[] = {Z3950_PREFIX,5,103,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_grs_0[] = {Z3950_PREFIX,5,104,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_grs_1[] = {Z3950_PREFIX,5,105,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_extended[] = {Z3950_PREFIX,5,106,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_fragment[] = {Z3950_PREFIX,5,107,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_pdf[] = {Z3950_PREFIX,5,109,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_postscript[] = {Z3950_PREFIX,5,109,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_html[] = {Z3950_PREFIX,5,109,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_tiff[] = {Z3950_PREFIX,5,109,4,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_gif[] = {Z3950_PREFIX,5,109,5,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_jpeg[] = {Z3950_PREFIX,5,109,6,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_png[] = {Z3950_PREFIX,5,109,7,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_mpeg[] = {Z3950_PREFIX,5,109,8,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_sgml[] = {Z3950_PREFIX,5,109,9,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_tiff_b[] = {Z3950_PREFIX,5,110,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_wav[] = {Z3950_PREFIX,5,110,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_sql_rs[] = {Z3950_PREFIX,5,111,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_soif[] = {Z3950_PREFIX,5,1000,81,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_json[] = {Z3950_PREFIX,5,1000,81,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_xml[] = {Z3950_PREFIX,5,109,10,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_text_xml[] = {Z3950_PREFIX,5,109,10,-1}; YAZ_EXPORT const Odr_oid yaz_oid_recsyn_application_xml[] = {Z3950_PREFIX,5,109,11,-1}; YAZ_EXPORT const Odr_oid yaz_oid_resform_resource_1[] = {Z3950_PREFIX,7,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_resform_resource_2[] = {Z3950_PREFIX,7,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_resform_universe_resource_report[] = {Z3950_PREFIX,7,1000,81,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_accform_prompt_1[] = {Z3950_PREFIX,8,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_accform_des_1[] = {Z3950_PREFIX,8,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_accform_krb_1[] = {Z3950_PREFIX,8,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_persistent_set[] = {Z3950_PREFIX,9,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_persistent_query[] = {Z3950_PREFIX,9,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_periodic_query[] = {Z3950_PREFIX,9,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_item_order[] = {Z3950_PREFIX,9,4,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_database_update_first_version[] = {Z3950_PREFIX,9,5,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_database_update_second_version[] = {Z3950_PREFIX,9,5,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_database_update[] = {Z3950_PREFIX,9,5,1,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_exp__spec_[] = {Z3950_PREFIX,9,6,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_exp__inv_[] = {Z3950_PREFIX,9,7,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_admin[] = {Z3950_PREFIX,9,1000,81,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_searchresult_1[] = {Z3950_PREFIX,10,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_charsetandlanguagenegotiation[] = {Z3950_PREFIX,10,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_userinfo_1[] = {Z3950_PREFIX,10,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_multiplesearchterms_1[] = {Z3950_PREFIX,10,4,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_multiplesearchterms_2[] = {Z3950_PREFIX,10,5,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_datetime[] = {Z3950_PREFIX,10,6,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_proxy[] = {Z3950_PREFIX,10,1000,81,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_cookie[] = {Z3950_PREFIX,10,1000,81,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_client_ip[] = {Z3950_PREFIX,10,1000,81,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_scan_set[] = {Z3950_PREFIX,10,1000,81,4,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_facet_1[] = {Z3950_PREFIX,10,1000,81,5,-1}; YAZ_EXPORT const Odr_oid yaz_oid_elemspec_espec_1[] = {Z3950_PREFIX,11,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_varset_variant_1[] = {Z3950_PREFIX,12,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_wais_schema[] = {Z3950_PREFIX,13,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_gils_schema[] = {Z3950_PREFIX,13,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_collections_schema[] = {Z3950_PREFIX,13,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_geo_schema[] = {Z3950_PREFIX,13,4,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_cimi_schema[] = {Z3950_PREFIX,13,5,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_update_es[] = {Z3950_PREFIX,13,6,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_holdings[] = {Z3950_PREFIX,13,7,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_zthes[] = {Z3950_PREFIX,13,8,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_thesaurus_schema[] = {Z3950_PREFIX,13,1000,81,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_schema_explain_schema[] = {Z3950_PREFIX,13,1000,81,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_tagset_tagsetm[] = {Z3950_PREFIX,14,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_tagset_tagsetg[] = {Z3950_PREFIX,14,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_tagset_stas_tagset[] = {Z3950_PREFIX,14,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_tagset_gils_tagset[] = {Z3950_PREFIX,14,4,-1}; YAZ_EXPORT const Odr_oid yaz_oid_tagset_collections_tagset[] = {Z3950_PREFIX,14,5,-1}; YAZ_EXPORT const Odr_oid yaz_oid_tagset_cimi_tagset[] = {Z3950_PREFIX,14,6,-1}; YAZ_EXPORT const Odr_oid yaz_oid_tagset_thesaurus_tagset[] = {Z3950_PREFIX,14,1000,81,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_tagset_explain_tagset[] = {Z3950_PREFIX,14,1000,81,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_tagset_zthes_tagset[] = {Z3950_PREFIX,14,8,-1}; YAZ_EXPORT const Odr_oid yaz_oid_negot_charset_3[] = {Z3950_PREFIX,15,3,-1}; YAZ_EXPORT const Odr_oid yaz_oid_negot_charset_4[] = {Z3950_PREFIX,15,4,-1}; YAZ_EXPORT const Odr_oid yaz_oid_negot_charset_id[] = {Z3950_PREFIX,15,1000,81,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_cql[] = {Z3950_PREFIX,16,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_general_ucs_2[] = {1,0,10646,1,0,2,-1}; YAZ_EXPORT const Odr_oid yaz_oid_general_ucs_4[] = {1,0,10646,1,0,4,-1}; YAZ_EXPORT const Odr_oid yaz_oid_general_utf_16[] = {1,0,10646,1,0,5,-1}; YAZ_EXPORT const Odr_oid yaz_oid_general_utf_8[] = {1,0,10646,1,0,8,-1}; YAZ_EXPORT const Odr_oid yaz_oid_userinfo_oclc_userinfo[] = {Z3950_PREFIX,10,1000,17,1,-1}; YAZ_EXPORT const Odr_oid yaz_oid_extserv_xml_es[] = {Z3950_PREFIX,9,1000,105,4,-1}; YAZ_EXPORT struct yaz_oid_entry yaz_oid_standard_entries[] = { {CLASS_TRANSYN, yaz_oid_transyn_ber, "BER"}, {CLASS_TRANSYN, yaz_oid_transyn_iso2709, "ISO2709"}, {CLASS_GENERAL, yaz_oid_general_isoill_1, "ISOILL-1"}, {CLASS_ABSYN, yaz_oid_absyn_z_apdu, "Z-APDU"}, {CLASS_APPCTX, yaz_oid_appctx_z_basic, "Z-BASIC"}, {CLASS_ATTSET, yaz_oid_attset_bib_1, "Bib-1"}, {CLASS_ATTSET, yaz_oid_attset_exp_1, "Exp-1"}, {CLASS_ATTSET, yaz_oid_attset_ext_1, "Ext-1"}, {CLASS_ATTSET, yaz_oid_attset_ccl_1, "CCL-1"}, {CLASS_ATTSET, yaz_oid_attset_gils, "GILS"}, {CLASS_ATTSET, yaz_oid_attset_gils_attset, "GILS-attset"}, {CLASS_ATTSET, yaz_oid_attset_stas_attset, "STAS-attset"}, {CLASS_ATTSET, yaz_oid_attset_collections_attset, "Collections-attset"}, {CLASS_ATTSET, yaz_oid_attset_cimi_attset, "CIMI-attset"}, {CLASS_ATTSET, yaz_oid_attset_geo_attset, "Geo-attset"}, {CLASS_ATTSET, yaz_oid_attset_zbig, "ZBIG"}, {CLASS_ATTSET, yaz_oid_attset_util, "Util"}, {CLASS_ATTSET, yaz_oid_attset_xd_1, "XD-1"}, {CLASS_ATTSET, yaz_oid_attset_zthes, "Zthes"}, {CLASS_ATTSET, yaz_oid_attset_fin_1, "Fin-1"}, {CLASS_ATTSET, yaz_oid_attset_dan_1, "Dan-1"}, {CLASS_ATTSET, yaz_oid_attset_holdings, "Holdings"}, {CLASS_ATTSET, yaz_oid_attset_marc, "MARC"}, {CLASS_ATTSET, yaz_oid_attset_bib_2, "Bib-2"}, {CLASS_ATTSET, yaz_oid_attset_zeerex, "ZeeRex"}, {CLASS_ATTSET, yaz_oid_attset_thesaurus_attset, "Thesaurus-attset"}, {CLASS_ATTSET, yaz_oid_attset_idxpath, "IDXPATH"}, {CLASS_ATTSET, yaz_oid_attset_extlite, "EXTLITE"}, {CLASS_DIAGSET, yaz_oid_diagset_bib_1, "Bib-1"}, {CLASS_DIAGSET, yaz_oid_diagset_diag_1, "Diag-1"}, {CLASS_DIAGSET, yaz_oid_diagset_diag_es, "Diag-ES"}, {CLASS_DIAGSET, yaz_oid_diagset_diag_general, "Diag-General"}, {CLASS_RECSYN, yaz_oid_recsyn_unimarc, "Unimarc"}, {CLASS_RECSYN, yaz_oid_recsyn_intermarc, "Intermarc"}, {CLASS_RECSYN, yaz_oid_recsyn_ccf, "CCF"}, {CLASS_RECSYN, yaz_oid_recsyn_usmarc, "USmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_marc21, "MARC21"}, {CLASS_RECSYN, yaz_oid_recsyn_ukmarc, "UKmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_normarc, "Normarc"}, {CLASS_RECSYN, yaz_oid_recsyn_librismarc, "Librismarc"}, {CLASS_RECSYN, yaz_oid_recsyn_danmarc, "Danmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_finmarc, "Finmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_mab, "MAB"}, {CLASS_RECSYN, yaz_oid_recsyn_canmarc, "Canmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_sbn, "SBN"}, {CLASS_RECSYN, yaz_oid_recsyn_picamarc, "Picamarc"}, {CLASS_RECSYN, yaz_oid_recsyn_ausmarc, "Ausmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_ibermarc, "Ibermarc"}, {CLASS_RECSYN, yaz_oid_recsyn_carmarc, "Carmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_malmarc, "Malmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_jpmarc, "JPmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_swemarc, "SWEmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_siglemarc, "SIGLEmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_isdsmarc, "ISDSmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_rusmarc, "RUSmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_hunmarc, "Hunmarc"}, {CLASS_RECSYN, yaz_oid_recsyn_nacsis_catp, "NACSIS-CATP"}, {CLASS_RECSYN, yaz_oid_recsyn_finmarc2000, "FINMARC2000"}, {CLASS_RECSYN, yaz_oid_recsyn_marc21_fin, "MARC21-fin"}, {CLASS_RECSYN, yaz_oid_recsyn_explain, "Explain"}, {CLASS_RECSYN, yaz_oid_recsyn_sutrs, "SUTRS"}, {CLASS_RECSYN, yaz_oid_recsyn_opac, "OPAC"}, {CLASS_RECSYN, yaz_oid_recsyn_summary, "Summary"}, {CLASS_RECSYN, yaz_oid_recsyn_grs_0, "GRS-0"}, {CLASS_RECSYN, yaz_oid_recsyn_grs_1, "GRS-1"}, {CLASS_RECSYN, yaz_oid_recsyn_extended, "Extended"}, {CLASS_RECSYN, yaz_oid_recsyn_fragment, "Fragment"}, {CLASS_RECSYN, yaz_oid_recsyn_pdf, "pdf"}, {CLASS_RECSYN, yaz_oid_recsyn_postscript, "postscript"}, {CLASS_RECSYN, yaz_oid_recsyn_html, "html"}, {CLASS_RECSYN, yaz_oid_recsyn_tiff, "tiff"}, {CLASS_RECSYN, yaz_oid_recsyn_gif, "gif"}, {CLASS_RECSYN, yaz_oid_recsyn_jpeg, "jpeg"}, {CLASS_RECSYN, yaz_oid_recsyn_png, "png"}, {CLASS_RECSYN, yaz_oid_recsyn_mpeg, "mpeg"}, {CLASS_RECSYN, yaz_oid_recsyn_sgml, "sgml"}, {CLASS_RECSYN, yaz_oid_recsyn_tiff_b, "tiff-b"}, {CLASS_RECSYN, yaz_oid_recsyn_wav, "wav"}, {CLASS_RECSYN, yaz_oid_recsyn_sql_rs, "SQL-RS"}, {CLASS_RECSYN, yaz_oid_recsyn_soif, "SOIF"}, {CLASS_RECSYN, yaz_oid_recsyn_json, "JSON"}, {CLASS_RECSYN, yaz_oid_recsyn_xml, "XML"}, {CLASS_RECSYN, yaz_oid_recsyn_text_xml, "text-XML"}, {CLASS_RECSYN, yaz_oid_recsyn_application_xml, "application-XML"}, {CLASS_RESFORM, yaz_oid_resform_resource_1, "Resource-1"}, {CLASS_RESFORM, yaz_oid_resform_resource_2, "Resource-2"}, {CLASS_RESFORM, yaz_oid_resform_universe_resource_report, "UNIverse-Resource-Report"}, {CLASS_ACCFORM, yaz_oid_accform_prompt_1, "Prompt-1"}, {CLASS_ACCFORM, yaz_oid_accform_des_1, "Des-1"}, {CLASS_ACCFORM, yaz_oid_accform_krb_1, "Krb-1"}, {CLASS_EXTSERV, yaz_oid_extserv_persistent_set, "Persistent set"}, {CLASS_EXTSERV, yaz_oid_extserv_persistent_query, "Persistent query"}, {CLASS_EXTSERV, yaz_oid_extserv_periodic_query, "Periodic query"}, {CLASS_EXTSERV, yaz_oid_extserv_item_order, "Item order"}, {CLASS_EXTSERV, yaz_oid_extserv_database_update_first_version, "Database Update (first version)"}, {CLASS_EXTSERV, yaz_oid_extserv_database_update_second_version, "Database Update (second version)"}, {CLASS_EXTSERV, yaz_oid_extserv_database_update, "Database Update"}, {CLASS_EXTSERV, yaz_oid_extserv_exp__spec_, "exp. spec."}, {CLASS_EXTSERV, yaz_oid_extserv_exp__inv_, "exp. inv."}, {CLASS_EXTSERV, yaz_oid_extserv_admin, "Admin"}, {CLASS_USERINFO, yaz_oid_userinfo_searchresult_1, "searchResult-1"}, {CLASS_USERINFO, yaz_oid_userinfo_charsetandlanguagenegotiation, "CharSetandLanguageNegotiation"}, {CLASS_USERINFO, yaz_oid_userinfo_userinfo_1, "UserInfo-1"}, {CLASS_USERINFO, yaz_oid_userinfo_multiplesearchterms_1, "MultipleSearchTerms-1"}, {CLASS_USERINFO, yaz_oid_userinfo_multiplesearchterms_2, "MultipleSearchTerms-2"}, {CLASS_USERINFO, yaz_oid_userinfo_datetime, "DateTime"}, {CLASS_USERINFO, yaz_oid_userinfo_proxy, "Proxy"}, {CLASS_USERINFO, yaz_oid_userinfo_cookie, "Cookie"}, {CLASS_USERINFO, yaz_oid_userinfo_client_ip, "Client-IP"}, {CLASS_USERINFO, yaz_oid_userinfo_scan_set, "Scan-Set"}, {CLASS_USERINFO, yaz_oid_userinfo_facet_1, "Facet-1"}, {CLASS_ELEMSPEC, yaz_oid_elemspec_espec_1, "Espec-1"}, {CLASS_VARSET, yaz_oid_varset_variant_1, "Variant-1"}, {CLASS_SCHEMA, yaz_oid_schema_wais_schema, "WAIS-schema"}, {CLASS_SCHEMA, yaz_oid_schema_gils_schema, "GILS-schema"}, {CLASS_SCHEMA, yaz_oid_schema_collections_schema, "Collections-schema"}, {CLASS_SCHEMA, yaz_oid_schema_geo_schema, "Geo-schema"}, {CLASS_SCHEMA, yaz_oid_schema_cimi_schema, "CIMI-schema"}, {CLASS_SCHEMA, yaz_oid_schema_update_es, "Update ES"}, {CLASS_SCHEMA, yaz_oid_schema_holdings, "Holdings"}, {CLASS_SCHEMA, yaz_oid_schema_zthes, "Zthes"}, {CLASS_SCHEMA, yaz_oid_schema_thesaurus_schema, "thesaurus-schema"}, {CLASS_SCHEMA, yaz_oid_schema_explain_schema, "Explain-schema"}, {CLASS_TAGSET, yaz_oid_tagset_tagsetm, "TagsetM"}, {CLASS_TAGSET, yaz_oid_tagset_tagsetg, "TagsetG"}, {CLASS_TAGSET, yaz_oid_tagset_stas_tagset, "STAS-tagset"}, {CLASS_TAGSET, yaz_oid_tagset_gils_tagset, "GILS-tagset"}, {CLASS_TAGSET, yaz_oid_tagset_collections_tagset, "Collections-tagset"}, {CLASS_TAGSET, yaz_oid_tagset_cimi_tagset, "CIMI-tagset"}, {CLASS_TAGSET, yaz_oid_tagset_thesaurus_tagset, "thesaurus-tagset"}, {CLASS_TAGSET, yaz_oid_tagset_explain_tagset, "Explain-tagset"}, {CLASS_TAGSET, yaz_oid_tagset_zthes_tagset, "Zthes-tagset"}, {CLASS_NEGOT, yaz_oid_negot_charset_3, "Charset-3"}, {CLASS_NEGOT, yaz_oid_negot_charset_4, "Charset-4"}, {CLASS_NEGOT, yaz_oid_negot_charset_id, "Charset-ID"}, {CLASS_USERINFO, yaz_oid_userinfo_cql, "CQL"}, {CLASS_GENERAL, yaz_oid_general_ucs_2, "UCS-2"}, {CLASS_GENERAL, yaz_oid_general_ucs_4, "UCS-4"}, {CLASS_GENERAL, yaz_oid_general_utf_16, "UTF-16"}, {CLASS_GENERAL, yaz_oid_general_utf_8, "UTF-8"}, {CLASS_USERINFO, yaz_oid_userinfo_oclc_userinfo, "OCLC-userInfo"}, {CLASS_EXTSERV, yaz_oid_extserv_xml_es, "XML-ES"}, {CLASS_NOP, 0, 0} }; yaz-5.28.0/src/icu_utf16.c0000644000175000017500000000636513265142510012103 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief UTF-16 string utilities for ICU */ #if HAVE_CONFIG_H #include "config.h" #endif #if YAZ_HAVE_ICU #include #include #include #include #include #include #include #include /* some more string fcns*/ #include /* char names */ struct icu_buf_utf16 *icu_buf_utf16_create(size_t capacity) { struct icu_buf_utf16 *buf16 = (struct icu_buf_utf16 *) xmalloc(sizeof(struct icu_buf_utf16)); buf16->utf16_len = 0; buf16->utf16_cap = capacity; if (capacity > 0) { buf16->utf16 = (UChar *) xmalloc(sizeof(UChar) * capacity); buf16->utf16[0] = (UChar) 0; } else buf16->utf16 = 0; return buf16; } struct icu_buf_utf16 *icu_buf_utf16_clear(struct icu_buf_utf16 *buf16) { assert(buf16); if (buf16->utf16) buf16->utf16[0] = (UChar) 0; buf16->utf16_len = 0; return buf16; } struct icu_buf_utf16 *icu_buf_utf16_resize(struct icu_buf_utf16 *buf16, size_t capacity) { assert(buf16); if (capacity > 0) { if (0 == buf16->utf16) buf16->utf16 = (UChar *) xmalloc(sizeof(UChar) * capacity); else buf16->utf16 = (UChar *) xrealloc(buf16->utf16, sizeof(UChar) * capacity); buf16->utf16_cap = capacity; } return buf16; } struct icu_buf_utf16 *icu_buf_utf16_copy(struct icu_buf_utf16 *dest16, const struct icu_buf_utf16 *src16) { if (!dest16 || !src16 || dest16 == src16) return 0; if (dest16->utf16_cap < src16->utf16_len) icu_buf_utf16_resize(dest16, src16->utf16_len * 2); u_strncpy(dest16->utf16, src16->utf16, src16->utf16_len); dest16->utf16_len = src16->utf16_len; return dest16; } struct icu_buf_utf16 *icu_buf_utf16_append(struct icu_buf_utf16 *dest16, const struct icu_buf_utf16 *src16) { assert(dest16); if (!src16) return dest16; if (dest16 == src16) return 0; if (dest16->utf16_cap <= src16->utf16_len + dest16->utf16_len) icu_buf_utf16_resize(dest16, dest16->utf16_len + src16->utf16_len * 2); u_strncpy(dest16->utf16 + dest16->utf16_len, src16->utf16, src16->utf16_len); dest16->utf16_len += src16->utf16_len; return dest16; } void icu_buf_utf16_destroy(struct icu_buf_utf16 *buf16) { if (buf16) xfree(buf16->utf16); xfree(buf16); } void icu_buf_utf16_log(const char *lead, struct icu_buf_utf16 *src16) { if (src16) { struct icu_buf_utf8 *dst8 = icu_buf_utf8_create(0); UErrorCode status = U_ZERO_ERROR; icu_utf16_to_utf8(dst8, src16, &status); yaz_log(YLOG_LOG, "%s=%s", lead, dst8->utf8); icu_buf_utf8_destroy(dst8); } else { yaz_log(YLOG_LOG, "%s=NULL", lead); } } #endif /* YAZ_HAVE_ICU */ /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ber_len.c0000644000175000017500000000576613265142510011710 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file ber_len.c * \brief Implements BER length octet encoding and decoding * * This source file implements BER encoding and decoding of * the length octets. */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" /** * ber_enclen: * Encode BER length octets. If exact, lenlen is the exact desired * encoding size, else, lenlen is the max available space. Len < 0 = * Indefinite encoding. * Returns: >0 success, number of bytes encoded. * Returns: =0 success, indefinite start-marker set. 1 byte encoded. * Returns: -1 failure, out of bounds. */ int ber_enclen(ODR o, int len, int lenlen, int exact) { unsigned char octs[sizeof(int)]; int n = 0; int lenpos, end; if (len < 0) /* Indefinite */ { if (odr_putc(o, 0x80) < 0) return 0; return 0; } if (len <= 127 && (lenlen == 1 || !exact)) /* definite short form */ { if (odr_putc(o, (unsigned char) len) < 0) return 0; return 1; } if (lenlen == 1) { if (odr_putc(o, 0x80) < 0) return 0; return 0; } /* definite long form */ do { octs[n++] = len; len >>= 8; } while (len); if (n >= lenlen) return -1; lenpos = odr_tell(o); /* remember length-of-length position */ if (odr_putc(o, 0) < 0) /* dummy */ return 0; if (exact) while (n < --lenlen) /* pad length octets */ if (odr_putc(o, 0) < 0) return 0; while (n--) if (odr_putc(o, octs[n]) < 0) return 0; /* set length of length */ end = odr_tell(o); odr_seek(o, ODR_S_SET, lenpos); if (odr_putc(o, (end - lenpos - 1) | 0X80) < 0) return 0; odr_seek(o, ODR_S_END, 0); return odr_tell(o) - lenpos; } /** * ber_declen: * Decode BER length octets. Returns * > 0 : number of bytes read * -1 : not enough room to read bytes within max bytes * -2 : other error * * After return: * len = -1 indefinite length. * len >= 0 definite length */ int ber_declen(const char *buf, int *len, int max) { const unsigned char *b = (const unsigned char *) buf; int n; if (max < 1) return -1; if (*b == 0X80) /* Indefinite */ { *len = -1; return 1; } if (!(*b & 0X80)) /* Definite short form */ { *len = (int) *b; return 1; } if (*b == 0XFF) /* reserved value */ return -2; /* indefinite long form */ n = *b & 0X7F; if (n >= max) return -1; *len = 0; b++; while (--n >= 0) { *len <<= 8; *len |= *(b++); } if (*len < 0) return -2; return ((const char *) b - buf); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/odr_bool.c0000644000175000017500000000225713265142510012071 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_bool.c * \brief Implements ODR BOOLEAN codec */ #if HAVE_CONFIG_H #include #endif #include #include "odr-priv.h" /* * Top level boolean en/decoder. * Returns 1 on success, 0 on error. */ int odr_bool(ODR o, Odr_bool **p, int opt, const char *name) { int res, cons = 0; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_BOOLEAN; } res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name); if (res < 0) return 0; if (!res) return odr_missing(o, opt, name); if (o->direction == ODR_PRINT) { odr_prname(o, name); odr_printf(o, "%s\n", (**p ? "TRUE" : "FALSE")); return 1; } if (cons) return 0; if (o->direction == ODR_DECODE) *p = (int *)odr_malloc(o, sizeof(int)); return ber_boolean(o, *p); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/Makefile.am0000644000175000017500000002013113273123630012152 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) Index Data YAZ_VERSION_INFO=5:0:0 lib_LTLIBRARIES = libyaz.la libyaz_server.la libyaz_icu.la dist-hook: test -f $(srcdir)/cql.c || exit 1 tabdatadir = $(pkgdatadir)/z39.50 tabdata_DATA=datetime.asn esupdate.asn univres.asn z3950v3.asn z.tcl \ esadmin.asn charneg-3.asn mterm2.asn oclcui.asn facet.asn illdatadir=$(pkgdatadir)/ill illdata_DATA=ill9702.asn item-req.asn ill.tcl oclc-ill-req-ext.asn EXTRA_DIST=$(tabdata_DATA) $(illdata_DATA) \ charconv.tcl codetables.xml codetables-iso5426.xml \ csvtodiag.tcl bib1.csv srw.csv \ csvtosru_update.tcl sru_update.csv \ oidtoc.tcl oid.csv sc_test.c YAZCOMP=$(top_srcdir)/util/yaz-asncomp YAZCOMP_Z = $(YAZCOMP) -d $(srcdir)/z.tcl -i yaz -I$(top_srcdir)/include YAZCOMP_I = $(YAZCOMP) -d $(srcdir)/ill.tcl -i yaz -I$(top_srcdir)/include AM_CPPFLAGS=-I$(top_srcdir)/include $(XML2_CFLAGS) $(SSL_CFLAGS) libyaz_la_LIBADD = $(SSL_LIBS) $(TCPD_LIBS) \ $(MEMCACHED_LIBS) $(HIREDIS_LIBS) libyaz_server_la_LIBADD = libyaz.la libyaz_icu_la_CPPFLAGS = $(AM_CPPFLAGS) $(ICU_CPPFLAGS) -I$(top_srcdir)/libstemmer_c/include libyaz_icu_la_LIBADD = libyaz.la $(ICU_LIBS) AM_YFLAGS=-p cql_ # MARC8->UTF8 conversion is generated from codetables.xml marc8.c: charconv.tcl codetables.xml $(TCLSH) $(srcdir)/charconv.tcl -p marc8 $(srcdir)/codetables.xml -o $@ # UTF-8->MARC8 conversion is generated from codetables.xml marc8r.c: charconv.tcl codetables.xml $(TCLSH) $(srcdir)/charconv.tcl -r -p marc8r $(srcdir)/codetables.xml -o $@ # ISO5426->UTF8 conversion is generated from codetables-iso5426.xml iso5426.c: charconv.tcl codetables-iso5426.xml $(TCLSH) $(srcdir)/charconv.tcl -p iso5426 $(srcdir)/codetables-iso5426.xml -o $@ # Generate OID database from CSV oid_std.c $(top_srcdir)/include/yaz/oid_std.h: oidtoc.tcl oid.csv $(TCLSH) $(srcdir)/oidtoc.tcl $(srcdir) $(srcdir)/oid.csv oid_std.c oid_std.h # Generate diagnostics from CSVs diagbib1.c $(top_srcdir)/include/yaz/diagbib1.h: bib1.csv $(TCLSH) $(srcdir)/csvtodiag.tcl $(srcdir)/bib1.csv $(srcdir)/diagbib1.c $(top_srcdir)/include/yaz/diagbib1.h bib1 diagbib1_str diagsrw.c $(top_srcdir)/include/yaz/diagsrw.h: srw.csv $(TCLSH) $(srcdir)/csvtodiag.tcl $(srcdir)/srw.csv $(srcdir)/diagsrw.c $(top_srcdir)/include/yaz/diagsrw.h srw diagsru_update.c $(top_srcdir)/include/yaz/diagsru_update.h: csvtosru_update.tcl sru_update.csv $(TCLSH) $(srcdir)/csvtosru_update.tcl $(srcdir) # Auto-generated C-files GEN_FILES = oid_std.c \ marc8.c marc8r.c iso5426.c \ diagbib1.c diagsrw.c diagsru_update.c \ z-accdes1.c z-accform1.c z-acckrb1.c z-core.c z-facet-1.c \ z-diag1.c z-espec1.c z-estask.c z-exp.c z-grs.c z-mterm2.c z-opac.c \ z-uifr1.c z-rrf1.c z-rrf2.c z-sum.c z-sutrs.c z-oclcui.c\ zes-expi.c zes-exps.c zes-order.c zes-pquery.c zes-psched.c \ zes-pset.c zes-update0.c z-date.c z-univ.c zes-update.c zes-admin.c \ z-charneg.c \ ill-core.c item-req.c oclc-ill-req-ext.c libyaz_la_SOURCES= $(GEN_FILES) \ base64.c version.c options.c log.c \ cookie.c marcdisp.c \ marc_read_json.c marc_read_xml.c marc_read_iso2709.c marc_read_line.c \ wrbuf.c wrbuf_sha1.c malloc_info.c oid_db.c errno.c \ nmemsdup.c xmalloc.c readconf.c tpath.c nmem.c matchstr.c atoin.c \ siconv.c iconv-p.h utf8.c ucs4.c iso5428.c advancegreek.c \ odr_bool.c ber_bool.c ber_len.c ber_tag.c odr_util.c facet.c \ odr_null.c ber_null.c odr_int.c ber_int.c odr_tag.c odr_cons.c \ odr_seq.c odr_oct.c ber_oct.c odr_bit.c ber_bit.c odr_oid.c \ ber_oid.c odr_use.c odr_choice.c odr_any.c ber_any.c odr.c odr_mem.c \ dumpber.c odr_enum.c odr-priv.h \ comstack.c tcpip.c unix.c \ prt-ext.c \ proxunit.c \ ill-get.c \ zget.c yaz-ccl.c diag-entry.c diag-entry.h \ logrpn.c \ otherinfo.c pquery.c sortspec.c charneg.c initopt.c init_diag.c \ init_globals.c \ zoom-c.c zoom-memcached.c zoom-z3950.c zoom-sru.c zoom-query.c \ zoom-record-cache.c zoom-event.c \ record_render.c zoom-socket.c zoom-opt.c zoom-p.h sru_facet.c sru-p.h \ grs1disp.c zgdu.c soap.c srw.c srwutil.c uri.c solr.c diag_map.c \ opac_to_xml.c xml_add.c xml_match.c xml_to_opac.c \ cclfind.c ccltoken.c cclerrms.c cclqual.c cclptree.c cclp.h \ cclqfile.c cclstr.c cclxmlconfig.c ccl_stop_words.c \ cql.y cqlstdio.c cqltransform.c cqlutil.c xcqlutil.c cqlstring.c \ cql_sortkeys.c cql2ccl.c rpn2cql.c \ rpn2solr.c solrtransform.c \ cqlstrer.c querytowrbuf.c \ tcpdchk.c \ test.c timing.c \ xml_get.c xmlquery.c xmlerror.c http.c \ mime.c mime.h oid_util.c tokenizer.c \ record_conv.c retrieval.c elementset.c snprintf.c query-charset.c \ copy_types.c match_glob.c poll.c daemon.c iconv_encode_danmarc.c \ iconv_encode_marc8.c iconv_encode_iso_8859_1.c iconv_encode_wchar.c \ iconv_decode_marc8.c iconv_decode_iso5426.c iconv_decode_danmarc.c sc.c \ json.c xml_include.c file_glob.c dirent.c mutex-p.h mutex.c condvar.c \ thread_id.c gettimeofday.c thread_create.c spipe.c url.c backtrace.c libyaz_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO) libyaz_server_la_SOURCES = statserv.c seshigh.c eventl.c \ requestq.c eventl.h session.h libyaz_server_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO) STEMMER_SOURCES = \ ../libstemmer_c/include/libstemmer.h \ ../libstemmer_c/libstemmer/libstemmer.c \ ../libstemmer_c/libstemmer/modules.h \ ../libstemmer_c/runtime/api.c \ ../libstemmer_c/runtime/api.h \ ../libstemmer_c/runtime/header.h \ ../libstemmer_c/runtime/utilities.c \ ../libstemmer_c/src_c/stem_UTF_8_porter.c \ ../libstemmer_c/src_c/stem_UTF_8_porter.h \ ../libstemmer_c/src_c/stem_UTF_8_english.c \ ../libstemmer_c/src_c/stem_UTF_8_english.h libyaz_icu_la_SOURCES = icu_chain.c icu_utf16.c icu_utf8.c stemmer.c \ icu_transform.c icu_casemap.c icu_tokenizer.c icu_sortkey.c \ $(STEMMER_SOURCES) libyaz_icu_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO) # Rules for Z39.50 V3 z-accdes1.c \ z-accform1.c \ z-acckrb1.c \ z-diag1.c \ z-espec1.c \ z-estask.c \ z-exp.c \ z-grs.c \ z-opac.c \ z-uifr1.c \ z-rrf1.c \ z-rrf2.c \ z-sum.c \ z-sutrs.c \ zes-expi.c \ zes-exps.c \ zes-order.c \ zes-pquery.c \ zes-psched.c \ zes-pset.c \ zes-update0.c \ $(top_srcdir)/include/yaz/z-accdes1.h \ $(top_srcdir)/include/yaz/z-core.h: z-core.c z-core.c: $(srcdir)/z.tcl $(srcdir)/z3950v3.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/z3950v3.asn # Date extension z-date.c \ $(top_srcdir)/include/yaz/z-date.h: $(srcdir)/z.tcl $(srcdir)/datetime.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/datetime.asn # UNIverse extension z-univ.c \ $(top_srcdir)/include/yaz/z-univ.h: \ $(srcdir)/z.tcl $(srcdir)/univres.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/univres.asn # New Update extended service zes-update.c \ $(top_srcdir)/include/yaz/zes-update.h: \ $(srcdir)/z.tcl $(srcdir)/esupdate.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/esupdate.asn # Admin extended service zes-admin.c \ $(top_srcdir)/include/yaz/zes-admin.h: \ $(srcdir)/z.tcl $(srcdir)/esadmin.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/esadmin.asn # Charset negotiation z-charneg.c \ $(top_srcdir)/include/yaz/z-charneg.h: \ $(srcdir)/z.tcl $(srcdir)/charneg-3.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/charneg-3.asn # UserInfoFormat-multipleSearchTerms-2 z-mterm2.c \ $(top_srcdir)/include/yaz/z-mterm2.h: \ $(srcdir)/z.tcl $(srcdir)/mterm2.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/mterm2.asn # UserInfoFormat-multipleSearchTerms-2 z-oclcui.c \ $(top_srcdir)/include/yaz/z-oclcui.h: \ $(srcdir)/z.tcl $(srcdir)/oclcui.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/oclcui.asn # UserInfoFormat-facet-1 z-facet-1.c \ $(top_srcdir)/include/yaz/z-facet-1.h: $(srcdir)/facet.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_Z) $(srcdir)/facet.asn # ILL protocol ill-core.c \ $(top_srcdir)/include/yaz/ill-core.h: \ $(srcdir)/ill.tcl $(srcdir)/ill9702.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_I) $(srcdir)/ill9702.asn # OCLC ILL Request Extension oclc-ill-req-ext.c \ $(top_srcdir)/include/yaz/oclc-ill-req-ext.h: \ $(srcdir)/ill.tcl $(srcdir)/oclc-ill-req-ext.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_I) $(srcdir)/oclc-ill-req-ext.asn # Item Request item-req.c \ $(top_srcdir)/include/yaz/item-req.h: \ $(srcdir)/ill.tcl $(srcdir)/item-req.asn $(YAZCOMP) $(TCLSH) $(YAZCOMP_I) $(srcdir)/item-req.asn yaz-5.28.0/src/iconv-p.h0000644000175000017500000001264313265142510011652 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * \brief Internal header for iconv */ #ifndef ICONV_P_H #define ICONV_P_H #include #include #include void yaz_iconv_set_errno(yaz_iconv_t cd, int no); typedef struct yaz_iconv_encoder_s *yaz_iconv_encoder_t; struct yaz_iconv_encoder_s { void *data; size_t (*write_handle)(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft); size_t (*flush_handle)(yaz_iconv_t cd, yaz_iconv_encoder_t e, char **outbuf, size_t *outbytesleft); void (*init_handle)(yaz_iconv_encoder_t e); void (*destroy_handle)(yaz_iconv_encoder_t e); }; yaz_iconv_encoder_t yaz_marc8_encoder(const char *name, yaz_iconv_encoder_t e); yaz_iconv_encoder_t yaz_utf8_encoder(const char *name, yaz_iconv_encoder_t e); yaz_iconv_encoder_t yaz_ucs4_encoder(const char *name, yaz_iconv_encoder_t e); yaz_iconv_encoder_t yaz_iso_8859_1_encoder(const char *name, yaz_iconv_encoder_t e); yaz_iconv_encoder_t yaz_iso_5428_encoder(const char *name, yaz_iconv_encoder_t e); yaz_iconv_encoder_t yaz_advancegreek_encoder(const char *name, yaz_iconv_encoder_t e); yaz_iconv_encoder_t yaz_danmarc_encoder(const char *name, yaz_iconv_encoder_t e); yaz_iconv_encoder_t yaz_wchar_encoder(const char *name, yaz_iconv_encoder_t e); typedef unsigned long yaz_conv_func_t(unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, int boffset); int yaz_iso_8859_1_lookup_y(unsigned long v, unsigned long *x1, unsigned long *x2); int yaz_iso_8859_1_lookup_x12(unsigned long x1, unsigned long x2, unsigned long *y); typedef struct yaz_iconv_decoder_s *yaz_iconv_decoder_t; struct yaz_iconv_decoder_s { void *data; size_t (*init_handle)(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inbuf, size_t inbytesleft, size_t *no_read); unsigned long (*read_handle)(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inbuf, size_t inbytesleft, size_t *no_read); void (*destroy_handle)(yaz_iconv_decoder_t d); }; yaz_iconv_decoder_t yaz_marc8_decoder(const char *fromcode, yaz_iconv_decoder_t d); yaz_iconv_decoder_t yaz_iso5426_decoder(const char *fromcode, yaz_iconv_decoder_t d); yaz_iconv_decoder_t yaz_utf8_decoder(const char *fromcode, yaz_iconv_decoder_t d); yaz_iconv_decoder_t yaz_ucs4_decoder(const char *tocode, yaz_iconv_decoder_t d); yaz_iconv_decoder_t yaz_iso_8859_1_decoder(const char *fromcode, yaz_iconv_decoder_t d); yaz_iconv_decoder_t yaz_iso_5428_decoder(const char *name, yaz_iconv_decoder_t d); yaz_iconv_decoder_t yaz_advancegreek_decoder(const char *name, yaz_iconv_decoder_t d); yaz_iconv_decoder_t yaz_wchar_decoder(const char *fromcode, yaz_iconv_decoder_t d); yaz_iconv_decoder_t yaz_danmarc_decoder(const char *fromcode, yaz_iconv_decoder_t d); #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/file_glob.c0000644000175000017500000001124113265142510012205 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file \brief File globbing (ala POSIX glob, but simpler) */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include struct res_entry { struct res_entry *next; char *file; }; struct glob_res { NMEM nmem; unsigned flags; size_t number_of_entries; struct res_entry **last_entry; struct res_entry *entries; }; static void add_entry(yaz_glob_res_t res, const char *str) { struct res_entry *ent = nmem_malloc(res->nmem, sizeof(*ent)); ent->file = nmem_strdup(res->nmem, str); ent->next = 0; *res->last_entry = ent; res->last_entry = &ent->next; res->number_of_entries++; } static void glob_r(yaz_glob_res_t res, const char *pattern, size_t off, char *prefix) { size_t prefix_len = strlen(prefix); int is_pattern = 0; size_t i = off; while (pattern[i] && !strchr("/\\", pattern[i])) { if (strchr("?*", pattern[i])) is_pattern = 1; i++; } if (!is_pattern && pattern[i]) /* no pattern and directory part */ { i++; /* skip dir sep */ memcpy(prefix + prefix_len, pattern + off, i - off); prefix[prefix_len + i - off] = '\0'; glob_r(res, pattern, i, prefix); prefix[prefix_len] = '\0'; } else if ((res->flags & YAZ_FILE_GLOB_FAIL_NOTEXIST) && !is_pattern && !pattern[i]) { strcpy(prefix + prefix_len, pattern + off); add_entry(res, prefix); } else { DIR * dir = opendir(*prefix ? prefix : "." ); if (dir) { struct dirent *ent; while ((ent = readdir(dir))) { int r; memcpy(prefix + prefix_len, pattern + off, i - off); prefix[prefix_len + i - off] = '\0'; r = yaz_match_glob(prefix + prefix_len, ent->d_name); prefix[prefix_len] = '\0'; if (r) { strcpy(prefix + prefix_len, ent->d_name); if (pattern[i]) { glob_r(res, pattern, i, prefix); } else { add_entry(res, prefix); } prefix[prefix_len] = '\0'; } } closedir(dir); } } } static int cmp_entry(const void *a, const void *b) { struct res_entry *ent_a = *(struct res_entry **) a; struct res_entry *ent_b = *(struct res_entry **) b; return strcmp(ent_a->file, ent_b->file); } static void sort_them(yaz_glob_res_t res) { size_t i; struct res_entry **ent_p; struct res_entry **ent = nmem_malloc(res->nmem, sizeof(*ent) * res->number_of_entries); struct res_entry *ent_i = res->entries; for (i = 0; i < res->number_of_entries; i++) { ent[i] = ent_i; ent_i = ent_i->next; } qsort(ent, res->number_of_entries, sizeof(*ent), cmp_entry); ent_p = &res->entries; for (i = 0; i < res->number_of_entries; i++) { *ent_p = ent[i]; ent_p = &ent[i]->next; } *ent_p = 0; } int yaz_file_glob(const char *pattern, yaz_glob_res_t *res) { return yaz_file_glob2(pattern, res, 0); } int yaz_file_glob2(const char *pattern, yaz_glob_res_t *res, unsigned flags) { char prefix[FILENAME_MAX+1]; NMEM nmem = nmem_create(); *prefix = '\0'; *res = nmem_malloc(nmem, sizeof(**res)); (*res)->flags = flags; (*res)->number_of_entries = 0; (*res)->nmem = nmem; (*res)->entries = 0; (*res)->last_entry = &(*res)->entries; glob_r(*res, pattern, 0, prefix); sort_them(*res); return 0; } void yaz_file_globfree(yaz_glob_res_t *res) { if (*res) { /* must free entries as well */ nmem_destroy((*res)->nmem); *res = 0; } } const char *yaz_file_glob_get_file(yaz_glob_res_t res, size_t idx) { struct res_entry *ent = res->entries; while (idx && ent) { ent = ent->next; idx--; } if (!ent) return 0; return ent->file; } size_t yaz_file_glob_get_num(yaz_glob_res_t res) { return res->number_of_entries; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/icu_sortkey.c0000644000175000017500000000317213265142510012627 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief sortkey utility based on ICU Collator */ #if HAVE_CONFIG_H #include "config.h" #endif #if YAZ_HAVE_ICU #include #include #include #include #include #include #include /* some more string fcns*/ #include /* char names */ void icu_sortkey8_from_utf16(UCollator *coll, struct icu_buf_utf8 *dest8, struct icu_buf_utf16 *src16, UErrorCode * status) { int32_t sortkey_len = 0; /* we'll fake a capacity of one less, because it turns out that ucol_getSortKey writes ONE character too much */ int32_t cap = dest8->utf8_cap ? dest8->utf8_cap - 1 : 0; sortkey_len = ucol_getSortKey(coll, src16->utf16, src16->utf16_len, dest8->utf8, cap); /* check for buffer overflow, resize and retry */ if (sortkey_len > cap) { icu_buf_utf8_resize(dest8, sortkey_len * 2); sortkey_len = ucol_getSortKey(coll, src16->utf16, src16->utf16_len, dest8->utf8, dest8->utf8_cap); } if (U_SUCCESS(*status) && sortkey_len > 0) dest8->utf8_len = sortkey_len; else icu_buf_utf8_clear(dest8); } #endif /* YAZ_HAVE_ICU */ /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/init_globals.c0000644000175000017500000000370313265142510012735 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file init_globals.c * \brief Initialize global things */ #if HAVE_CONFIG_H #include #endif #include #if YAZ_POSIX_THREADS #include #endif #include #if HAVE_GNUTLS_H #include #endif #if YAZ_HAVE_XML2 #include #endif #if YAZ_HAVE_XSLT #include #endif #if YAZ_HAVE_EXSLT #include #endif static int yaz_init_flag = 0; #if YAZ_POSIX_THREADS static pthread_mutex_t yaz_init_mutex = PTHREAD_MUTEX_INITIALIZER; #endif extern void yaz_log_init_globals(void); extern void yaz_log_deinit_globals(void); extern void nmem_init_globals(void); void yaz_init_globals(void) { if (yaz_init_flag) return; #if YAZ_POSIX_THREADS pthread_mutex_lock(&yaz_init_mutex); #endif if (!yaz_init_flag) { yaz_log_init_globals(); nmem_init_globals(); #if HAVE_GNUTLS_H gnutls_global_init(); #endif #if YAZ_HAVE_XML2 xmlInitParser(); #endif #if YAZ_HAVE_XSLT xsltInit(); #endif #if YAZ_HAVE_EXSLT exsltRegisterAll(); #endif yaz_init_flag = 1; /* must be last, before unlocking */ } #if YAZ_POSIX_THREADS pthread_mutex_unlock(&yaz_init_mutex); #endif } void yaz_deinit_globals(void) { if (!yaz_init_flag) return; #if YAZ_POSIX_THREADS pthread_mutex_lock(&yaz_init_mutex); #endif if (yaz_init_flag) { yaz_log_deinit_globals(); #if HAVE_GNUTLS_H gnutls_global_deinit(); #endif #if YAZ_HAVE_XSLT xsltCleanupGlobals(); #endif #if YAZ_HAVE_XML2 xmlCleanupParser(); #endif yaz_init_flag = 0; } #if YAZ_POSIX_THREADS pthread_mutex_unlock(&yaz_init_mutex); #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/ucs4.c0000644000175000017500000000630513265142510011146 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief UCS4 decoding and encoding */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "iconv-p.h" static unsigned long read_UCS4(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { unsigned long x = 0; if (inbytesleft < 4) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); /* incomplete input */ *no_read = 0; } else { x = (inp[0]<<24) | (inp[1]<<16) | (inp[2]<<8) | inp[3]; *no_read = 4; } return x; } static unsigned long read_UCS4LE(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inp, size_t inbytesleft, size_t *no_read) { unsigned long x = 0; if (inbytesleft < 4) { yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); /* incomplete input */ *no_read = 0; } else { x = (inp[3]<<24) | (inp[2]<<16) | (inp[1]<<8) | inp[0]; *no_read = 4; } return x; } static size_t write_UCS4(yaz_iconv_t cd, yaz_iconv_encoder_t en, unsigned long x, char **outbuf, size_t *outbytesleft) { unsigned char *outp = (unsigned char *) *outbuf; if (*outbytesleft >= 4) { *outp++ = (unsigned char) (x>>24); *outp++ = (unsigned char) (x>>16); *outp++ = (unsigned char) (x>>8); *outp++ = (unsigned char) x; (*outbytesleft) -= 4; } else { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t)(-1); } *outbuf = (char *) outp; return 0; } static size_t write_UCS4LE(yaz_iconv_t cd, yaz_iconv_encoder_t en, unsigned long x, char **outbuf, size_t *outbytesleft) { unsigned char *outp = (unsigned char *) *outbuf; if (*outbytesleft >= 4) { *outp++ = (unsigned char) x; *outp++ = (unsigned char) (x>>8); *outp++ = (unsigned char) (x>>16); *outp++ = (unsigned char) (x>>24); (*outbytesleft) -= 4; } else { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t)(-1); } *outbuf = (char *) outp; return 0; } yaz_iconv_encoder_t yaz_ucs4_encoder(const char *tocode, yaz_iconv_encoder_t e) { if (!yaz_matchstr(tocode, "UCS4")) e->write_handle = write_UCS4; else if (!yaz_matchstr(tocode, "UCS4LE")) e->write_handle = write_UCS4LE; else return 0; return e; } yaz_iconv_decoder_t yaz_ucs4_decoder(const char *tocode, yaz_iconv_decoder_t d) { if (!yaz_matchstr(tocode, "UCS4")) d->read_handle = read_UCS4; else if (!yaz_matchstr(tocode, "UCS4LE")) d->read_handle = read_UCS4LE; else return 0; return d; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-estask.c0000644000175000017500000000312313273126163012031 00000000000000/** \file z-estask.c \brief ASN.1 Module RecordSyntax-ESTaskPackage Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_TaskPackage(ODR o, Z_TaskPackage **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_oid, &(*p)->packageType, ODR_CONTEXT, 1, 0, "packageType") && odr_implicit_tag(o, z_InternationalString, &(*p)->packageName, ODR_CONTEXT, 2, 1, "packageName") && odr_implicit_tag(o, z_InternationalString, &(*p)->userId, ODR_CONTEXT, 3, 1, "userId") && odr_implicit_tag(o, z_IntUnit, &(*p)->retentionTime, ODR_CONTEXT, 4, 1, "retentionTime") && odr_implicit_tag(o, z_Permissions, &(*p)->permissions, ODR_CONTEXT, 5, 1, "permissions") && odr_implicit_tag(o, z_InternationalString, &(*p)->description, ODR_CONTEXT, 6, 1, "description") && odr_implicit_tag(o, odr_octetstring, &(*p)->targetReference, ODR_CONTEXT, 7, 1, "targetReference") && odr_implicit_tag(o, odr_generalizedtime, &(*p)->creationDateTime, ODR_CONTEXT, 8, 1, "creationDateTime") && odr_implicit_tag(o, odr_integer, &(*p)->taskStatus, ODR_CONTEXT, 9, 0, "taskStatus") && odr_implicit_settag(o, ODR_CONTEXT, 10) && (odr_sequence_of(o, (Odr_fun) z_DiagRec, &(*p)->packageDiagnostics, &(*p)->num_packageDiagnostics, "packageDiagnostics") || odr_ok(o)) && odr_implicit_tag(o, z_External, &(*p)->taskSpecificParameters, ODR_CONTEXT, 11, 0, "taskSpecificParameters") && odr_sequence_end(o); } yaz-5.28.0/src/xml_include.c0000644000175000017500000001056513265142510012576 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** \file \brief XML Include (not to be confused with W3C XInclude) */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include struct yaz_xml_include_s { const char *confdir; unsigned glob_flags; }; typedef struct yaz_xml_include_s *yaz_xml_include_t; static int process_config_includes(yaz_xml_include_t config, xmlNode *n); static void conf_dir_path(yaz_xml_include_t config, WRBUF w, const char *src) { if (config->confdir && *config->confdir > 0 && !yaz_is_abspath(src)) { wrbuf_printf(w, "%s/%s", config->confdir, src); } else wrbuf_puts(w, src); } static int config_include_one(yaz_xml_include_t config, xmlNode **sib, const char *path) { struct stat st; if (stat(path, &st) < 0) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "stat %s", path); return -1; } else { if ((st.st_mode & S_IFMT) == S_IFREG) { xmlDoc *doc = xmlParseFile(path); if (doc) { xmlNodePtr t = xmlDocGetRootElement(doc); int ret = process_config_includes(config, t); *sib = xmlAddNextSibling(*sib, xmlCopyNode(t, 1)); xmlFreeDoc(doc); if (ret) return -1; } else { yaz_log(YLOG_FATAL, "Could not parse %s", path); return -1; } } } return 0; } static int config_include_src(yaz_xml_include_t config, xmlNode **np, const char *src) { int ret = 0; /* return code. OK so far */ WRBUF w = wrbuf_alloc(); xmlNodePtr sib; /* our sibling that we append */ xmlNodePtr c; /* tmp node */ wrbuf_printf(w, " begin include src=\"%s\" ", src); /* replace include element with a 'begin' comment */ sib = xmlNewComment((const xmlChar *) wrbuf_cstr(w)); xmlReplaceNode(*np, sib); xmlFreeNode(*np); wrbuf_rewind(w); conf_dir_path(config, w, src); { int glob_ret; yaz_glob_res_t glob_res; glob_ret = yaz_file_glob2(wrbuf_cstr(w), &glob_res, config->glob_flags); if (glob_ret == 0) { size_t i; const char *path; for (i = 0; (path = yaz_file_glob_get_file(glob_res, i)); i++) ret = config_include_one(config, &sib, path); yaz_file_globfree(&glob_res); } } wrbuf_rewind(w); wrbuf_printf(w, " end include src=\"%s\" ", src); c = xmlNewComment((const xmlChar *) wrbuf_cstr(w)); sib = xmlAddNextSibling(sib, c); *np = sib; wrbuf_destroy(w); return ret; } static int process_config_includes(yaz_xml_include_t config, xmlNode *n) { for (n = n->children; n; n = n->next) { if (n->type == XML_ELEMENT_NODE) { if (!strcmp((const char *) n->name, "include")) { xmlChar *src = xmlGetProp(n, (xmlChar *) "src"); if (src) { /* src must be preserved, because n is destroyed */ int ret = config_include_src(config, &n, (const char *) src); xmlFree(src); if (ret) return ret; } } else { if (process_config_includes(config, n)) return -1; } } } return 0; } int yaz_xml_include_glob(xmlNode *n, const char *base_path, unsigned glob_flags) { struct yaz_xml_include_s s; s.confdir = base_path; s.glob_flags = glob_flags; return process_config_includes(&s, n); } int yaz_xml_include_simple(xmlNode *n, const char *base_path) { return yaz_xml_include_glob(n, base_path, 0); } /* YAZ_HAVE_XML2 */ #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/iconv_encode_danmarc.c0000644000175000017500000000420113265142510014401 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file * \brief Danmarc2 character set encoding */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "iconv-p.h" static size_t write_danmarc(yaz_iconv_t cd, yaz_iconv_encoder_t en, unsigned long x, char **outbuf, size_t *outbytesleft) { unsigned char *outp = (unsigned char *) *outbuf; if (x == '@' || x == '*') { if (*outbytesleft < 2) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t)(-1); } *outp++ = '@'; (*outbytesleft)--; *outp++ = (unsigned char) x; (*outbytesleft)--; } else if (x <= 255) { /* latin-1 range */ if (*outbytesleft < 1) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t)(-1); } *outp++ = (unsigned char) x; (*outbytesleft)--; } else { if (*outbytesleft < 6) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); return (size_t)(-1); } switch (x) { case 0xa733: *outp++ = '@'; *outp++ = 0xe5; (*outbytesleft) -= 2; break; case 0xa732: *outp++ = '@'; *outp++ = 0xc5; (*outbytesleft) -= 2; break; default: /* full unicode, emit @XXXX */ sprintf(*outbuf, "@%04lX", x); outp += 5; (*outbytesleft) -= 5; break; } } *outbuf = (char *) outp; return 0; } yaz_iconv_encoder_t yaz_danmarc_encoder(const char *tocode, yaz_iconv_encoder_t e) { if (!yaz_matchstr(tocode, "danmarc")) { e->write_handle = write_danmarc; return e; } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/zoom-sru.c0000644000175000017500000003746213265142510012073 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zoom-sru.c * \brief Implements ZOOM SRU */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "zoom-p.h" #include #include #if YAZ_HAVE_XML2 static void set_SRU_error(ZOOM_connection c, Z_SRW_diagnostic *d) { const char *uri = d->uri; if (uri) ZOOM_set_dset_error(c, ZOOM_uri_to_code(uri), uri, d->details, 0); } #endif #if YAZ_HAVE_XML2 static zoom_ret send_srw(ZOOM_connection c, Z_SRW_PDU *sr) { Z_GDU *gdu; const char *database = ZOOM_options_get(c->options, "databaseName"); gdu = z_get_HTTP_Request_uri(c->odr_out, c->host_port, database, c->proxy_mode); if (c->sru_mode == zoom_sru_get) { yaz_sru_get_encode(gdu->u.HTTP_Request, sr, c->odr_out, c->charset); } else if (c->sru_mode == zoom_sru_post) { yaz_sru_post_encode(gdu->u.HTTP_Request, sr, c->odr_out, c->charset); } else if (c->sru_mode == zoom_sru_soap) { yaz_sru_soap_encode(gdu->u.HTTP_Request, sr, c->odr_out, c->charset); } else if (c->sru_mode == zoom_sru_solr) { yaz_solr_encode_request(gdu->u.HTTP_Request, sr, c->odr_out, c->charset); } return ZOOM_send_GDU(c, gdu); } #endif #if YAZ_HAVE_XML2 static Z_SRW_PDU *ZOOM_srw_get_pdu(ZOOM_connection c, int type) { Z_SRW_PDU *sr = yaz_srw_get_pdu(c->odr_out, type, c->sru_version); if (c->url_authentication && c->user) { Z_SRW_extra_arg **ea = &sr->extra_args; while (*ea) ea = &(*ea)->next; *ea = (Z_SRW_extra_arg *) odr_malloc(c->odr_out, sizeof(**ea)); (*ea)->name = "x-username"; (*ea)->value = c->user; ea = &(*ea)->next; if (c->password) { *ea = (Z_SRW_extra_arg *) odr_malloc(c->odr_out, sizeof(**ea)); (*ea)->name = "x-password"; (*ea)->value = c->password; ea = &(*ea)->next; } *ea = 0; } else { sr->username = c->user; sr->password = c->password; } return sr; } #endif #if YAZ_HAVE_XML2 zoom_ret ZOOM_connection_srw_send_scan(ZOOM_connection c) { ZOOM_scanset scan; Z_SRW_PDU *sr = 0; const char *option_val = 0; Z_Query *z_query; if (!c->tasks) return zoom_complete; assert (c->tasks->which == ZOOM_TASK_SCAN); scan = c->tasks->u.scan.scan; sr = ZOOM_srw_get_pdu(c, Z_SRW_scan_request); z_query = ZOOM_query_get_Z_Query(scan->query); /* SRU scan can only carry CQL and PQF */ if (z_query->which == Z_Query_type_104) { sr->u.scan_request->queryType = "cql"; sr->u.scan_request->scanClause = odr_strdup(c->odr_out, ZOOM_query_get_query_string(scan->query)); } else if (z_query->which == Z_Query_type_1 || z_query->which == Z_Query_type_101) { sr->u.scan_request->queryType = "pqf"; sr->u.scan_request->scanClause = odr_strdup(c->odr_out, ZOOM_query_get_query_string(scan->query)); } else { ZOOM_set_error(c, ZOOM_ERROR_UNSUPPORTED_QUERY, 0); return zoom_complete; } sr->u.scan_request->maximumTerms = odr_intdup( c->odr_out, ZOOM_options_get_int(scan->options, "number", 10)); sr->u.scan_request->responsePosition = odr_intdup( c->odr_out, ZOOM_options_get_int(scan->options, "position", 1)); option_val = ZOOM_options_get(scan->options, "extraArgs"); yaz_encode_sru_extra(sr, c->odr_out, option_val); return send_srw(c, sr); } #else zoom_ret ZOOM_connection_srw_send_scan(ZOOM_connection c) { return zoom_complete; } #endif #if YAZ_HAVE_XML2 zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c) { int i; int *start, *count; ZOOM_resultset resultset = 0; Z_SRW_PDU *sr = 0; const char *option_val = 0; const char *schema = 0; Z_Query *z_query; Z_FacetList *facet_list = 0; if (c->error) /* don't continue on error */ return zoom_complete; assert(c->tasks); if (c->tasks->which != ZOOM_TASK_SEARCH) return zoom_complete; resultset = c->tasks->u.search.resultset; ZOOM_memcached_search(c, resultset); if (!resultset->setname) resultset->setname = odr_strdup(resultset->odr, "default"); ZOOM_options_set(resultset->options, "setname", resultset->setname); start = &c->tasks->u.search.start; count = &c->tasks->u.search.count; if (resultset->req_facets) facet_list = yaz_pqf_parse_facet_list(c->odr_out, resultset->req_facets); schema = c->tasks->u.search.schema; if (resultset->live_set) { if (*start >= resultset->size) return zoom_complete; if (*start + *count > resultset->size) *count = resultset->size - *start; } for (i = 0; i < *count; i++) { ZOOM_record rec = ZOOM_record_cache_lookup(resultset, i + *start, c->tasks->u.search.syntax, c->tasks->u.search.elementSetName, schema); if (!rec) break; } *start += i; *count -= i; if (*count == 0 && resultset->live_set) return zoom_complete; assert(resultset->query); sr = ZOOM_srw_get_pdu(c, Z_SRW_searchRetrieve_request); z_query = ZOOM_query_get_Z_Query(resultset->query); if (z_query->which == Z_Query_type_104 && z_query->u.type_104->which == Z_External_CQL) { sr->u.request->queryType = "cql"; sr->u.request->query = z_query->u.type_104->u.cql; } else if (z_query->which == Z_Query_type_1 && z_query->u.type_1) { sr->u.request->queryType = "pqf"; sr->u.request->query = odr_strdup(c->odr_out, ZOOM_query_get_query_string(resultset->query)); } else { ZOOM_set_error(c, ZOOM_ERROR_UNSUPPORTED_QUERY, 0); return zoom_complete; } option_val = ZOOM_query_get_sru11(resultset->query); if (option_val) { sr->u.request->sort_type = Z_SRW_sort_type_sort; sr->u.request->sort.sortKeys = odr_strdup(c->odr_out, option_val); } sr->u.request->startRecord = odr_intdup(c->odr_out, *start + 1); sr->u.request->maximumRecords = odr_intdup( c->odr_out, (resultset->step > 0 && resultset->step < *count) ? resultset->step : *count); sr->u.request->recordSchema = odr_strdup_null(c->odr_out, schema); sr->u.request->facetList = facet_list; option_val = ZOOM_resultset_option_get(resultset, "recordPacking"); if (option_val) sr->u.request->recordPacking = odr_strdup(c->odr_out, option_val); option_val = ZOOM_resultset_option_get(resultset, "extraArgs"); yaz_encode_sru_extra(sr, c->odr_out, option_val); return send_srw(c, sr); } #else zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c) { return zoom_complete; } #endif #if YAZ_HAVE_XML2 static zoom_ret handle_srw_response(ZOOM_connection c, Z_SRW_searchRetrieveResponse *res) { ZOOM_resultset resultset = 0; int *start, *count; int i; NMEM nmem; ZOOM_Event event; const char *syntax, *elementSetName, *schema; if (!c->tasks) return zoom_complete; if (c->tasks->which != ZOOM_TASK_SEARCH) return zoom_complete; resultset = c->tasks->u.search.resultset; start = &c->tasks->u.search.start; count = &c->tasks->u.search.count; syntax = c->tasks->u.search.syntax; elementSetName = c->tasks->u.search.elementSetName; schema = c->tasks->u.search.schema; if (resultset->live_set == 0) { event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH); ZOOM_connection_put_event(c, event); } if (res->facetList) ZOOM_handle_facet_list(resultset, res->facetList); resultset->size = 0; if (res->resultSetId) ZOOM_resultset_option_set(resultset, "resultSetId", res->resultSetId); yaz_log(c->log_details, "%p handle_srw_response got SRW response OK", c); if (res->num_diagnostics > 0) { resultset->live_set = 2; set_SRU_error(c, &res->diagnostics[0]); } else { if (res->numberOfRecords) { Z_OtherInformation *oi = 0; if (res->facetList) { ODR o = c->odr_in; Z_External *ext = (Z_External *) odr_malloc(o, sizeof(*ext)); ext->which = Z_External_userFacets; ext->u.facetList = res->facetList; ext->direct_reference = odr_oiddup(o, yaz_oid_userinfo_facet_1); ext->indirect_reference = 0; ext->descriptor = 0; oi = (Z_OtherInformation *) odr_malloc(o, sizeof(*oi)); oi->num_elements = 1; oi->list = (Z_OtherInformationUnit **) odr_malloc(o, sizeof(*oi->list)); oi->list[0] = (Z_OtherInformationUnit *) odr_malloc(o, sizeof(**oi->list)); oi->list[0]->category = 0; oi->list[0]->which = Z_OtherInfo_externallyDefinedInfo; oi->list[0]->information.externallyDefinedInfo = ext; } resultset->size = *res->numberOfRecords; ZOOM_memcached_hitcount(c, resultset, oi, res->resultCountPrecision ? res->resultCountPrecision : "exact"); } resultset->live_set = 2; if (res->suggestions) ZOOM_resultset_option_set(resultset, "suggestions", res->suggestions); for (i = 0; i < res->num_records; i++) { int pos = c->tasks->u.search.start + i; Z_SRW_record *sru_rec; Z_SRW_diagnostic *diag = 0; int num_diag; /* only trust recordPosition if >= calculated position */ if (res->records[i].recordPosition && *res->records[i].recordPosition >= pos + 1) pos = *res->records[i].recordPosition - 1; if (!ZOOM_record_cache_lookup(resultset, pos, syntax, elementSetName, schema)) { Z_NamePlusRecord *npr = (Z_NamePlusRecord *) odr_malloc(c->odr_in, sizeof(Z_NamePlusRecord)); sru_rec = &res->records[i]; npr->databaseName = 0; npr->which = Z_NamePlusRecord_databaseRecord; npr->u.databaseRecord = (Z_External *) odr_malloc(c->odr_in, sizeof(Z_External)); npr->u.databaseRecord->descriptor = 0; npr->u.databaseRecord->direct_reference = odr_oiddup(c->odr_in, yaz_oid_recsyn_xml); npr->u.databaseRecord->indirect_reference = 0; npr->u.databaseRecord->which = Z_External_octet; npr->u.databaseRecord->u.octet_aligned = odr_create_Odr_oct(c->odr_in, sru_rec->recordData_buf, sru_rec->recordData_len); if (sru_rec->recordSchema && !strcmp(sru_rec->recordSchema, "info:srw/schema/1/diagnostics-v1.1")) { sru_decode_surrogate_diagnostics(sru_rec->recordData_buf, sru_rec->recordData_len, &diag, &num_diag, resultset->odr); } ZOOM_record_cache_add(resultset, npr, pos, syntax, elementSetName, schema, diag); } } *count -= i; if (*count < 0) *count = 0; *start += i; nmem = odr_extract_mem(c->odr_in); nmem_transfer(odr_getmem(resultset->odr), nmem); nmem_destroy(nmem); return ZOOM_connection_srw_send_search(c); } return zoom_complete; } #endif #if YAZ_HAVE_XML2 static zoom_ret handle_srw_scan_response(ZOOM_connection c, Z_SRW_scanResponse *res) { NMEM nmem = odr_extract_mem(c->odr_in); ZOOM_scanset scan; if (!c->tasks || c->tasks->which != ZOOM_TASK_SCAN) return zoom_complete; scan = c->tasks->u.scan.scan; if (res->num_diagnostics > 0) set_SRU_error(c, &res->diagnostics[0]); scan->scan_response = 0; scan->srw_scan_response = res; nmem_transfer(odr_getmem(scan->odr), nmem); ZOOM_options_set_int(scan->options, "number", res->num_terms); nmem_destroy(nmem); return zoom_complete; } #endif int ZOOM_handle_sru(ZOOM_connection c, Z_HTTP_Response *hres, zoom_ret *cret, char **addinfo) { #if YAZ_HAVE_XML2 int ret = 0; /* not redirect (normal response) */ if (!yaz_srw_check_content_type(hres)) { *addinfo = "content-type"; ret = -1; } else if (c->sru_mode == zoom_sru_solr) { Z_SRW_PDU *sr; ret = yaz_solr_decode_response(c->odr_in, hres, &sr); if (ret == 0) { if (sr->which == Z_SRW_searchRetrieve_response) *cret = handle_srw_response(c, sr->u.response); else if (sr->which == Z_SRW_scan_response) *cret = handle_srw_scan_response(c, sr->u.scan_response); } } else { Z_SOAP *soap_package = 0; ODR o = c->odr_in; Z_SOAP_Handler soap_handlers[4] = { {YAZ_XMLNS_SRU_v1_response, 0, (Z_SOAP_fun) yaz_srw_codec}, {YAZ_XMLNS_SRU_v2_mask, 0, (Z_SOAP_fun) yaz_srw_codec}, {"searchRetrieveResponse", 0, (Z_SOAP_fun) yaz_srw_codec}, {0, 0, 0} }; ret = z_soap_codec(o, &soap_package, &hres->content_buf, &hres->content_len, soap_handlers); if (!ret && soap_package->which == Z_SOAP_generic) { Z_SRW_PDU *sr = (Z_SRW_PDU*) soap_package->u.generic->p; ZOOM_options_set(c->options, "sru_version", sr->srw_version); ZOOM_options_setl(c->options, "sru_extra_response_data", sr->extraResponseData_buf, sr->extraResponseData_len); if (sr->which == Z_SRW_searchRetrieve_response) *cret = handle_srw_response(c, sr->u.response); else if (sr->which == Z_SRW_scan_response) *cret = handle_srw_scan_response(c, sr->u.scan_response); else ret = -1; } else if (!ret && (soap_package->which == Z_SOAP_fault || soap_package->which == Z_SOAP_error)) { ZOOM_set_HTTP_error(c, hres->code, soap_package->u.fault->fault_code, soap_package->u.fault->fault_string); } else { size_t max_chars = 1000; size_t sz = hres->content_len; if (sz > max_chars - 1) sz = max_chars; *addinfo = odr_malloc(c->odr_in, sz + 4); memcpy(*addinfo, hres->content_buf, sz); if (sz == max_chars) strcpy(*addinfo + sz, "..."); else strcpy(*addinfo + sz, ""); ret = -1; } } return ret; #else return -1; #endif } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/unix.c0000644000175000017500000004571613467505553011302 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file unix.c * \brief Implements UNIX domain socket COMSTACK */ #if HAVE_CONFIG_H #include #endif #ifndef WIN32 #include #include #include #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_UNISTD_H #include #endif #if HAVE_SYS_SOCKET_H #include #endif #include #include #include #if HAVE_PWD_H #include #endif #if HAVE_SYS_STAT_H #include #endif #if HAVE_SYS_UN_H #include #endif #include #include #include #ifndef YAZ_SOCKLEN_T #define YAZ_SOCKLEN_T int #endif /* stat(2) masks: S_IFMT and S_IFSOCK may not be defined in gcc -ansi mode */ #if __STRICT_ANSI__ #ifndef S_IFSOCK #define S_IFMT 0170000 #define S_IFSOCK 0140000 #endif #endif static void unix_close(COMSTACK h); static int unix_put(COMSTACK h, char *buf, int size); static int unix_get(COMSTACK h, char **buf, int *bufsize); static int unix_connect(COMSTACK h, void *address); static int unix_more(COMSTACK h); static int unix_rcvconnect(COMSTACK h); static int unix_bind(COMSTACK h, void *address, int mode); static int unix_listen(COMSTACK h, char *raddr, int *addrlen, int (*check_ip)(void *cd, const char *a, int len, int type), void *cd); static int unix_set_blocking(COMSTACK p, int blocking); static COMSTACK unix_accept(COMSTACK h); static const char *unix_addrstr(COMSTACK h); static void *unix_straddr(COMSTACK h, const char *str); #ifndef SUN_LEN #define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \ + strlen ((ptr)->sun_path)) #endif /* this state is used for both SSL and straight TCP/IP */ typedef struct unix_state { char *altbuf; /* alternate buffer for surplus data */ int altsize; /* size as xmalloced */ int altlen; /* length of data or 0 if none */ int written; /* -1 if we aren't writing */ int towrite; /* to verify against user input */ int (*complete)(const char *buf, int len); /* length/complete. */ struct sockaddr_un addr; /* returned by cs_straddr */ int uid; int gid; int umask; char buf[128]; /* returned by cs_addrstr */ } unix_state; static int log_level = 0; static void unix_init (void) { static int log_level_set = 0; if (!log_level_set) { log_level = yaz_log_module_level("comstack"); log_level_set = 1; } } /* * This function is always called through the cs_create() macro. * s >= 0: socket has already been established for us. */ COMSTACK unix_type(int s, int flags, int protocol, void *vp) { COMSTACK p; unix_state *state; int new_socket; unix_init(); if (s < 0) { if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) return 0; new_socket = 1; } else new_socket = 0; if (!(p = (struct comstack *)xmalloc(sizeof(struct comstack)))) return 0; if (!(state = (struct unix_state *)(p->cprivate = xmalloc(sizeof(unix_state))))) return 0; p->flags = flags; if (!(p->flags&CS_FLAGS_BLOCKING)) { if (fcntl(s, F_SETFL, O_NONBLOCK) < 0) return 0; #ifndef MSG_NOSIGNAL signal (SIGPIPE, SIG_IGN); #endif } p->io_pending = 0; p->iofile = s; p->type = unix_type; p->protocol = (enum oid_proto) protocol; p->f_connect = unix_connect; p->f_rcvconnect = unix_rcvconnect; p->f_get = unix_get; p->f_put = unix_put; p->f_close = unix_close; p->f_more = unix_more; p->f_bind = unix_bind; p->f_listen = unix_listen; p->f_accept = unix_accept; p->f_addrstr = unix_addrstr; p->f_straddr = unix_straddr; p->f_set_blocking = unix_set_blocking; p->state = new_socket ? CS_ST_UNBND : CS_ST_IDLE; /* state of line */ p->event = CS_NONE; p->cerrno = 0; p->user = 0; state->altbuf = 0; state->altsize = state->altlen = 0; state->towrite = state->written = -1; state->complete = cs_complete_auto; yaz_log(log_level, "Created UNIX comstack h=%p", p); return p; } static int unix_strtoaddr_ex(const char *str, struct sockaddr_un *add) { char *cp; unix_init(); yaz_log(log_level, "unix_strtoaddr_ex %s", str ? str : "NULL"); add->sun_family = AF_UNIX; strncpy(add->sun_path, str, sizeof(add->sun_path)-1); add->sun_path[sizeof(add->sun_path)-1] = 0; cp = strchr (add->sun_path, ':'); if (cp) *cp = '\0'; return 1; } static void *unix_straddr1(COMSTACK h, const char *str, char *f) { unix_state *sp = (unix_state *)h->cprivate; char * s = f; const char * file = NULL; sp->uid = sp->gid = sp->umask = -1; if (strchr(s, '=')) { char *eol; do { if ((eol = strchr(s, ','))) *eol++ = '\0'; if (sp->uid == -1 && strncmp(s, "user=", 5) == 0) { char * arg = s + 5; if (strspn(arg, "0123456789") == strlen(arg)) { sp->uid = atoi(arg); } else { struct passwd * pw = getpwnam(arg); if (pw == NULL) { yaz_log(log_level, "unix_strtoaddr1 No such user %s", arg); return 0; } sp->uid = pw->pw_uid; } } else if (sp->gid == -1 && strncmp(s, "group=", 6) == 0) { char * arg = s + 6; if (strspn(arg, "0123456789") == strlen(arg)) { sp->gid = atoi(arg); } else { struct group * gr = getgrnam(arg); if (gr == NULL) { yaz_log(log_level, "unix_strtoaddr1 No such group %s", arg); return 0; } sp->gid = gr->gr_gid; } } else if (sp->umask == -1 && strncmp(s, "umask=", 6) == 0) { char * end; char * arg = s + 6; sp->umask = strtol(arg, &end, 8); if (errno == EINVAL || *end) { yaz_log(log_level, "unix_strtoaddr1 Invalid umask %s", arg); return 0; } } else if (file == NULL && strncmp(s, "file=", 5) == 0) { char * arg = s + 5; file = arg; } else { yaz_log(log_level, "unix_strtoaddr1 " "invalid or double argument %s", s); return 0; } } while ((s = eol)); } else { file = str; } if (!file) { errno = EINVAL; return 0; } yaz_log(log_level, "unix_straddr1: %s", str ? str : "NULL"); if (!unix_strtoaddr_ex (file, &sp->addr)) return 0; return &sp->addr; } static void *unix_straddr(COMSTACK h, const char *str) { char *f = xstrdup(str); void *vp = unix_straddr1(h, str, f); xfree(f); return vp; } struct sockaddr_un *unix_strtoaddr(const char *str) { static struct sockaddr_un add; yaz_log(log_level, "unix_strtoaddr %s", str ? str : "NULL"); if (!unix_strtoaddr_ex (str, &add)) return 0; return &add; } static int unix_more(COMSTACK h) { unix_state *sp = (unix_state *)h->cprivate; return sp->altlen && (*sp->complete)(sp->altbuf, sp->altlen); } /* * connect(2) will block (sometimes) - nothing we can do short of doing * weird things like spawning subprocesses or threading or some weird junk * like that. */ static int unix_connect(COMSTACK h, void *address) { struct sockaddr_un *add = (struct sockaddr_un *)address; int r; int i; yaz_log(log_level, "unix_connect h=%p", h); h->io_pending = 0; if (h->state != CS_ST_UNBND) { h->cerrno = CSOUTSTATE; return -1; } for (i = 0; i<3; i++) { r = connect(h->iofile, (struct sockaddr *) add, SUN_LEN(add)); if (r < 0 && yaz_errno() == EAGAIN) { #if HAVE_USLEEP usleep(i*10000+1000); /* 1ms, 11ms, 21ms */ #else sleep(1); #endif continue; } else break; } if (r < 0) { if (yaz_errno() == EINPROGRESS) { h->event = CS_CONNECT; h->state = CS_ST_CONNECTING; h->io_pending = CS_WANT_WRITE; return 1; } h->cerrno = CSYSERR; return -1; } h->event = CS_CONNECT; h->state = CS_ST_CONNECTING; return unix_rcvconnect (h); } /* * nop */ static int unix_rcvconnect(COMSTACK h) { yaz_log(log_level, "unix_rcvconnect h=%p", h); if (h->state == CS_ST_DATAXFER) return 0; if (h->state != CS_ST_CONNECTING) { h->cerrno = CSOUTSTATE; return -1; } h->event = CS_DATA; h->state = CS_ST_DATAXFER; return 0; } static int unix_bind(COMSTACK h, void *address, int mode) { unix_state *sp = (unix_state *)h->cprivate; struct sockaddr *addr = (struct sockaddr *)address; const char * path = ((struct sockaddr_un *)addr)->sun_path; struct stat stat_buf; yaz_log(log_level, "unix_bind h=%p", h); if(stat(path, &stat_buf) != -1) { struct sockaddr_un socket_unix; int socket_out = -1; if((stat_buf.st_mode&S_IFMT) != S_IFSOCK) { /* used to be S_ISSOCK */ h->cerrno = CSYSERR; yaz_set_errno(EEXIST); /* Not a socket (File exists) */ return -1; } if((socket_out = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { h->cerrno = CSYSERR; return -1; } socket_unix.sun_family = AF_UNIX; strncpy(socket_unix.sun_path, path, sizeof(socket_unix.sun_path)-1); socket_unix.sun_path[sizeof(socket_unix.sun_path)-1] = 0; if(connect(socket_out, (struct sockaddr *) &socket_unix, SUN_LEN(&socket_unix)) < 0) { if(yaz_errno() == ECONNREFUSED) { yaz_log(log_level, "unix_bind socket exists but nobody is listening"); } else { h->cerrno = CSYSERR; return -1; } } else { close(socket_out); h->cerrno = CSYSERR; yaz_set_errno(EADDRINUSE); return -1; } unlink(path); } if (bind(h->iofile, (struct sockaddr *) addr, SUN_LEN((struct sockaddr_un *)addr))) { h->cerrno = CSYSERR; return -1; } if (chown(path, sp->uid, sp->gid)) { h->cerrno = CSYSERR; return -1; } if (chmod(path, sp->umask != -1 ? sp->umask : 0666)) { h->cerrno = CSYSERR; return -1; } if (mode == CS_SERVER && listen(h->iofile, 100) < 0) { h->cerrno = CSYSERR; return -1; } h->state = CS_ST_IDLE; h->event = CS_LISTEN; return 0; } static int unix_listen(COMSTACK h, char *raddr, int *addrlen, int (*check_ip)(void *cd, const char *a, int len, int t), void *cd) { struct sockaddr_un addr; YAZ_SOCKLEN_T len = sizeof(addr); yaz_log(log_level, "unix_listen h=%p", h); if (h->state != CS_ST_IDLE) { h->cerrno = CSOUTSTATE; return -1; } h->newfd = accept(h->iofile, (struct sockaddr*)&addr, &len); if (h->newfd < 0) { if ( yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK || yaz_errno() == EAGAIN #endif #endif ) h->cerrno = CSNODATA; else h->cerrno = CSYSERR; return -1; } if (addrlen && (size_t) (*addrlen) >= sizeof(struct sockaddr_un)) memcpy(raddr, &addr, *addrlen = sizeof(struct sockaddr_un)); else if (addrlen) *addrlen = 0; h->state = CS_ST_INCON; return 0; } static COMSTACK unix_accept(COMSTACK h) { COMSTACK cnew; unix_state *state, *st = (unix_state *)h->cprivate; yaz_log(log_level, "unix_accept h=%p", h); if (h->state == CS_ST_INCON) { if (!(cnew = (COMSTACK)xmalloc(sizeof(*cnew)))) { h->cerrno = CSYSERR; close(h->newfd); h->newfd = -1; return 0; } memcpy(cnew, h, sizeof(*h)); cnew->iofile = h->newfd; cnew->io_pending = 0; if (!(state = (unix_state *) (cnew->cprivate = xmalloc(sizeof(unix_state))))) { h->cerrno = CSYSERR; if (h->newfd != -1) { close(h->newfd); h->newfd = -1; } return 0; } if (!(cnew->flags&CS_FLAGS_BLOCKING) && (fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0) ) { h->cerrno = CSYSERR; if (h->newfd != -1) { close(h->newfd); h->newfd = -1; } xfree (cnew); xfree (state); return 0; } h->newfd = -1; state->altbuf = 0; state->altsize = state->altlen = 0; state->towrite = state->written = -1; state->complete = st->complete; memcpy(&state->addr, &st->addr, sizeof(state->addr)); cnew->state = CS_ST_ACCEPT; cnew->event = CS_NONE; h->state = CS_ST_IDLE; h = cnew; } if (h->state == CS_ST_ACCEPT) { } else { h->cerrno = CSOUTSTATE; return 0; } h->io_pending = 0; h->state = CS_ST_DATAXFER; h->event = CS_DATA; return h; } #define CS_UNIX_BUFCHUNK 4096 /* * Return: -1 error, >1 good, len of buffer, ==1 incomplete buffer, * 0=connection closed. */ static int unix_get(COMSTACK h, char **buf, int *bufsize) { unix_state *sp = (unix_state *)h->cprivate; char *tmpc; int tmpi, berlen, rest, req, tomove; int hasread = 0, res; yaz_log(log_level, "unix_get h=%p bufsize=%d", h, *bufsize); if (sp->altlen) /* switch buffers */ { yaz_log(log_level, " %d bytes in altbuf (%p )", sp->altlen, sp->altbuf); tmpc = *buf; tmpi = *bufsize; *buf = sp->altbuf; *bufsize = sp->altsize; hasread = sp->altlen; sp->altlen = 0; sp->altbuf = tmpc; sp->altsize = tmpi; } h->io_pending = 0; while (!(berlen = (*sp->complete)(*buf, hasread))) { if (!*bufsize) { if (!(*buf = (char *)xmalloc(*bufsize = CS_UNIX_BUFCHUNK))) return -1; } else if (*bufsize - hasread < CS_UNIX_BUFCHUNK) if (!(*buf =(char *)xrealloc(*buf, *bufsize *= 2))) return -1; res = recv(h->iofile, *buf + hasread, CS_UNIX_BUFCHUNK, 0); yaz_log(log_level, " recv res=%d, hasread=%d", res, hasread); if (res < 0) { if (yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK || yaz_errno() == EAGAIN #endif #endif || yaz_errno() == EINPROGRESS ) { h->io_pending = CS_WANT_READ; break; } else if (yaz_errno() == 0) continue; else return -1; } else if (!res) return hasread; hasread += res; } yaz_log(log_level, " Out of read loop with hasread=%d, berlen=%d", hasread, berlen); /* move surplus buffer (or everything if we didn't get a BER rec.) */ if (hasread > berlen) { tomove = req = hasread - berlen; rest = tomove % CS_UNIX_BUFCHUNK; if (rest) req += CS_UNIX_BUFCHUNK - rest; if (!sp->altbuf) { if (!(sp->altbuf = (char *)xmalloc(sp->altsize = req))) return -1; } else if (sp->altsize < req) if (!(sp->altbuf =(char *)xrealloc(sp->altbuf, sp->altsize = req))) return -1; yaz_log(log_level, " Moving %d bytes to altbuf(%p)", tomove, sp->altbuf); memcpy(sp->altbuf, *buf + berlen, sp->altlen = tomove); } if (berlen < CS_UNIX_BUFCHUNK - 1) *(*buf + berlen) = '\0'; return berlen ? berlen : 1; } /* * Returns 1, 0 or -1 * In nonblocking mode, you must call again with same buffer while * return value is 1. */ static int unix_put(COMSTACK h, char *buf, int size) { int res; struct unix_state *state = (struct unix_state *)h->cprivate; yaz_log(log_level, "unix_put h=%p size=%d", h, size); h->io_pending = 0; h->event = CS_DATA; if (state->towrite < 0) { state->towrite = size; state->written = 0; } else if (state->towrite != size) { h->cerrno = CSWRONGBUF; return -1; } while (state->towrite > state->written) { if ((res = send(h->iofile, buf + state->written, size - state->written, #ifdef MSG_NOSIGNAL MSG_NOSIGNAL #else 0 #endif )) < 0) { if ( yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK || yaz_errno() == EAGAIN #endif #endif ) { yaz_log(log_level, " Flow control stop"); h->io_pending = CS_WANT_WRITE; return 1; } h->cerrno = CSYSERR; return -1; } state->written += res; yaz_log(log_level, " Wrote %d, written=%d, nbytes=%d", res, state->written, size); } state->towrite = state->written = -1; yaz_log(log_level, " Ok"); return 0; } static void unix_close(COMSTACK h) { unix_state *sp = (struct unix_state *)h->cprivate; yaz_log(log_level, "unix_close h=%p", h); if (h->iofile != -1) { close(h->iofile); } if (sp->altbuf) xfree(sp->altbuf); xfree(sp); xfree(h); } static const char *unix_addrstr(COMSTACK h) { unix_state *sp = (struct unix_state *)h->cprivate; char *buf = sp->buf; sprintf(buf, "unix:%s", sp->addr.sun_path); return buf; } static int unix_set_blocking(COMSTACK p, int flags) { unsigned long flag; if (p->flags == flags) return 1; flag = fcntl(p->iofile, F_GETFL, 0); if (flags & CS_FLAGS_BLOCKING) flag = flag & ~O_NONBLOCK; else flag = flag | O_NONBLOCK; if (fcntl(p->iofile, F_SETFL, flag) < 0) return 0; p->flags = flags; return 1; } #endif /* WIN32 */ /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-espec1.c0000644000175000017500000001414413273126163011724 00000000000000/** \file z-espec1.c \brief ASN.1 Module ElementSpecificationFormat-eSpec-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_Espec1(ODR o, Z_Espec1 **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_settag(o, ODR_CONTEXT, 1) && (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->elementSetNames, &(*p)->num_elementSetNames, "elementSetNames") || odr_ok(o)) && odr_implicit_tag(o, odr_oid, &(*p)->defaultVariantSetId, ODR_CONTEXT, 2, 1, "defaultVariantSetId") && odr_implicit_tag(o, z_Variant, &(*p)->defaultVariantRequest, ODR_CONTEXT, 3, 1, "defaultVariantRequest") && odr_implicit_tag(o, odr_integer, &(*p)->defaultTagType, ODR_CONTEXT, 4, 1, "defaultTagType") && odr_implicit_settag(o, ODR_CONTEXT, 5) && (odr_sequence_of(o, (Odr_fun) z_ElementRequest, &(*p)->elements, &(*p)->num_elements, "elements") || odr_ok(o)) && odr_sequence_end(o); } int z_ElementRequestCompositeElementPrimitives(ODR o, Z_ElementRequestCompositeElementPrimitives **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ElementRequestCompositeElementSpecs(ODR o, Z_ElementRequestCompositeElementSpecs **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_SimpleElement, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ElementRequestCompositeElement(ODR o, Z_ElementRequestCompositeElement **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementRequestCompositeElement_primitives, (Odr_fun) z_ElementRequestCompositeElementPrimitives, "primitives"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ElementRequestCompositeElement_specs, (Odr_fun) z_ElementRequestCompositeElementSpecs, "specs"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, "elementList") && odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) && odr_constructed_end(o) && odr_implicit_tag(o, z_ETagPath, &(*p)->deliveryTag, ODR_CONTEXT, 2, 0, "deliveryTag") && odr_implicit_tag(o, z_Variant, &(*p)->variantRequest, ODR_CONTEXT, 3, 1, "variantRequest") && odr_sequence_end(o); } int z_ElementRequest(ODR o, Z_ElementRequest **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ERequest_simpleElement, (Odr_fun) z_SimpleElement, "simpleElement"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ERequest_compositeElement, (Odr_fun) z_ElementRequestCompositeElement, "compositeElement"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_SimpleElement(ODR o, Z_SimpleElement **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_ETagPath, &(*p)->path, ODR_CONTEXT, 1, 0, "path") && odr_implicit_tag(o, z_Variant, &(*p)->variantRequest, ODR_CONTEXT, 2, 1, "variantRequest") && odr_sequence_end(o); } int z_SpecificTag(ODR o, Z_SpecificTag **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 1, "tagType") && odr_explicit_tag(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT, 2, 0, "tagValue") && odr_explicit_tag(o, z_Occurrences, &(*p)->occurrences, ODR_CONTEXT, 3, 1, "occurrences") && odr_sequence_end(o); } int z_ETagUnit(ODR o, Z_ETagUnit **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ETagUnit_specificTag, (Odr_fun) z_SpecificTag, "specificTag"}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_ETagUnit_wildThing, (Odr_fun) z_Occurrences, "wildThing"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ETagUnit_wildPath, (Odr_fun) odr_null, "wildPath"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_ETagPath(ODR o, Z_ETagPath **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_ETagUnit, &(*p)->tags, &(*p)->num_tags, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_OccurValues(ODR o, Z_OccurValues **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->start, ODR_CONTEXT, 1, 0, "start") && odr_implicit_tag(o, odr_integer, &(*p)->howMany, ODR_CONTEXT, 2, 1, "howMany") && odr_sequence_end(o); } int z_Occurrences(ODR o, Z_Occurrences **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Occurrences_all, (Odr_fun) odr_null, "all"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Occurrences_last, (Odr_fun) odr_null, "last"}, {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Occurrences_values, (Odr_fun) z_OccurValues, "values"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } yaz-5.28.0/src/odr_seq.c0000644000175000017500000000716213265142510011726 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file odr_seq.c * \brief Implements ODR SEQUENCE codec */ #if HAVE_CONFIG_H #include #endif #include "odr-priv.h" int odr_sequence_begin(ODR o, void *p, int size, const char *name) { char **pp = (char**) p; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_SEQUENCE; } if (o->direction == ODR_DECODE) *pp = 0; if (odr_constructed_begin(o, p, o->op->t_class, o->op->t_tag, name)) { if (o->direction == ODR_DECODE && size) *pp = (char *)odr_malloc(o, size); return 1; } else return 0; } int odr_set_begin(ODR o, void *p, int size, const char *name) { char **pp = (char**) p; if (o->error) return 0; if (o->op->t_class < 0) { o->op->t_class = ODR_UNIVERSAL; o->op->t_tag = ODR_SET; } if (o->direction == ODR_DECODE) *pp = 0; if (odr_constructed_begin(o, p, o->op->t_class, o->op->t_tag, name)) { if (o->direction == ODR_DECODE && size) *pp = (char *)odr_malloc(o, size); return 1; } else return 0; } int odr_sequence_end(ODR o) { return odr_constructed_end(o); } int odr_set_end(ODR o) { return odr_constructed_end(o); } static int odr_sequence_more(ODR o) { return odr_constructed_more(o); } static int odr_sequence_x (ODR o, Odr_fun type, void *p, int *num) { char ***pp = (char***) p; /* for dereferencing */ char **tmp = 0; int size = 0, i; switch (o->direction) { case ODR_DECODE: *num = 0; *pp = (char **)odr_nullval(); while (odr_sequence_more(o)) { /* outgrown array? */ if (*num * (int) sizeof(void*) >= size) { /* double the buffer size */ tmp = (char **)odr_malloc(o, sizeof(void*) * (size += size ? size : 128)); if (*num) { memcpy(tmp, *pp, *num * sizeof(void*)); /* * For now, we just throw the old *p away, since we use * nibble memory anyway (disgusting, isn't it?). */ } *pp = tmp; } if (!(*type)(o, (*pp) + *num, 0, 0)) return 0; (*num)++; } break; case ODR_ENCODE: case ODR_PRINT: for (i = 0; i < *num; i++) { if (!(*type)(o, *pp + i, 0, 0)) return 0; } break; default: odr_seterror(o, OOTHER, 47); return 0; } return odr_sequence_end(o); } int odr_set_of(ODR o, Odr_fun type, void *p, int *num, const char *name) { if (!odr_set_begin(o, p, 0, name)) { if (o->direction == ODR_DECODE) *num = 0; return 0; } return odr_sequence_x (o, type, p, num); } int odr_sequence_of(ODR o, Odr_fun type, void *p, int *num, const char *name) { if (!odr_sequence_begin(o, p, 0, name)) { if (o->direction == ODR_DECODE) *num = 0; return 0; } return odr_sequence_x (o, type, p, num); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z.tcl0000644000175000017500000003100413265142510011073 00000000000000# YC Sample Config File for Z39.50 # ---------------------------------------------------------- # Prefix Specifications # # 1: C function prefix # 2: C type prefix # 3: C preprocessor prefix # Default prefix set default-prefix {z_ Z_ Z_} # Name clash in extended services (TargetPart, OriginPartToKeep, etc) # You can possibly think of better names :) set prefix(ESFormat-PersistentResultSet) {z_PR Z_PR Z_PR} set prefix(ESFormat-PersistentQuery) {z_PQuery Z_PQuery Z_PQuery} set prefix(ESFormat-PeriodicQuerySchedule) {z_PQS Z_PQS Z_PQS} set prefix(ESFormat-ItemOrder) {z_IO Z_IO Z_IO} set prefix(ESFormat-Update0) {z_IU0 Z_IU0 Z_IU0} set prefix(ESFormat-Update) {z_IU Z_IU Z_IU} set prefix(ESFormat-ExportSpecification) {z_ES Z_ES Z_ES} set prefix(ESFormat-ExportInvocation) {z_EI Z_EI Z_EI} # ---------------------------------------------------------- # Settings for core of the protocol set m Z39-50-APDU-1995 # Filename set filename($m) z-core # Public header initialization code set init($m,h) { typedef struct Z_External Z_External; YAZ_EXPORT int z_External(ODR o, Z_External **p, int opt, const char *name); } set body($m,h) " #ifdef __cplusplus extern \"C\" \{ #endif int z_ANY_type_0 (ODR o, void **p, int opt); #ifdef __cplusplus \} #endif " set body($m,c) { /* the type-0 query ... */ int z_ANY_type_0 (ODR o, void **p, int opt) { return 0; } } # Type Name overrides set map($m,PDU) APDU set membermap($m,Operator,and) {Operator_and op_and} set membermap($m,Operator,or) {Operator_or op_or} #set membermap($m,Operator,and-not) {Operator_and_not op_and_not} set map($m,AttributeElement_complex) ComplexAttribute set map($m,DeleteSetStatus) DeleteStatus set membermap($m,ProximityOperator,private) {ProximityOperator_private zprivate} set unionmap($m,AttributeElement,attributeValue) {which value AttributeValue} set membermap($m,ElementSpec,externalEspec) externalSpec set membermap($m,RPNStructure,op) simple set membermap($m,RPNStructure,rpnRpnOp) complex set map($m,RPNStructure_complex) Complex set membermap($m,Operand,attrTerm) {Operand_APT attributesPlusTerm} set membermap($m,Operand,resultSet) {Operand_resultSetId resultSetId} set membermap($m,Operand,resultAttr) {Operand_resultAttr resultAttr} set membermap($m,Complex,rpn1) s1 set membermap($m,Complex,rpn2) s2 set membermap($m,Complex,op) roperator set membermap($m,RPNQuery,attributeSet) attributeSetId set membermap($m,RPNQuery,rpn) RPNStructure set map($m,KnownProximityUnit) ProxUnit set membermap($m,ProximityOperator,lessThan) {Prox_lessThan 1} set membermap($m,ProximityOperator,lessThanOrEqual) {Prox_lessThanOrEqual 1} set membermap($m,ProximityOperator,equal) {Prox_equal 1} set membermap($m,ProximityOperator,greaterThanOrEqual) {Prox_greaterThanOrEqual 1} set membermap($m,ProximityOperator,greaterThan) {Prox_greaterThan 1} set membermap($m,ProximityOperator,notEqual) {Prox_notEqual 1} # set membermap($m,Records,responseRecords) {Records_DBOSD databaseOrSurDiagnostics} set membermap($m,Records,nonSurrogateDiagnostic) {Records_NSD nonSurrogateDiagnostic} set membermap($m,Records,multipleNonSurDiagnostics) {Records_multipleNSD multipleNonSurDiagnostics} set map($m,Records_DBOSD) NamePlusRecordList set map($m,Records_NSD) DiagRec set map($m,Records_multipleNSD) DiagRecs set membermap($m,NamePlusRecord,name) databaseName set unionmap($m,DiagRecs) {num_diagRecs diagRecs} set unionmap($m,NamePlusRecordList) {num_records records} # set membermap($m,ElementSetNames,genericElementSetName) generic set map($m,ElementSetNames_databaseSpecific) DatabaseSpecific # set map($m,OccurrenceByAttributes_s) OccurrenceByAttributesElem set map($m,OccurrenceByAttributesElem_byDatabase) byDatabaseList # set membermap($m,SortElement,datbaseSpecific) databaseSpecific set map($m,SortElement_databaseSpecific) SortDbSpecificList # set map($m,SortKey_sortAttributes) SortAttributes set unionmap($m,PresentRequest,recordComposition) {} set map($m,PresentRequest_0) RecordComposition set unionmap($m,PresentRequest,additionalRanges) {num_ranges additionalRanges} set unionmap($m,SortRequest,sortSequence) {} set map($m,SortRequest_0) SortKeySpecList set unionmap($m,SortKeySpecList) {num_specs specs} set map($m,InitializeRequest) InitRequest set map($m,InitializeResponse) InitResponse set unionmap($m,CloseReason) Close set membermap($m,ProtocolVersion,version-1) 1 set membermap($m,ProtocolVersion,version-2) 2 set membermap($m,ProtocolVersion,version-3) 3 set membermap($m,InitRequest,exceptionalRecordSize) maximumRecordSize set membermap($m,InitResponse,exceptionalRecordSize) maximumRecordSize set map($m,RecordsMultipleNonSurDiagnostics) DiagRecs set map($m,RecordsDatabaseOrSurDiagnostics) NamePlusRecordList set membermap($m,NamePlusRecord,retrievalRecord) databaseRecord set unionmap($m,RecordComposition) {which u RecordComp} set unionmap($m,ScanResponse,scanStatus) Scan set unionmap($m,AttributeList) {num_attributes attributes} set membermap($m,SortKey,sortfield) sortField set map($m,CompSpec_0) DbSpecific set map($m,DatabaseSpecific_s) DatabaseSpecificUnit set map($m,ListStatuses_s) ListStatus set map($m,IdAuthenticationIdPass) IdPass set map($m,OtherInformation_s) OtherInformationUnit set unionmap($m,OtherInformationUnit,information) {which information OtherInfo} set unionmap($m,OtherInformation) {num_elements list} set unionmap($m,Specification,elementSpec) {} set map($m,Specification_0) ElementSpec set unionmap($m,Specification,schema) {which schema Schema} # ---- set m DiagnosticFormatDiag1 set filename($m) z-diag1 set map($m,DiagFormat_tooMany) TooMany set map($m,DiagFormat_badSpec) BadSpec set map($m,DiagFormat_dbUnavail) DbUnavail set map($m,DiagFormat_attribute) Attribute set map($m,DiagFormat_attCombo) AttCombo set map($m,DiagFormat_term) DiagTerm set map($m,DiagFormat_proximity) Proximity set map($m,DiagFormat_scan) Scan set map($m,DiagFormat_sort) Sort set unionmap($m,Sort) {which u SortD} set map($m,DiagFormat_segmentation) Segmentation set map($m,DiagFormat_extServices) ExtServices set map($m,DiagFormat_accessCtrl) AccessCtrl set map($m,DiagFormat_recordSyntax) RecordSyntax # set map($m,Scan_termList2) AttrListList set map($m,Sort_inputTooLarge) StringList # set map($m,AccessCtrl_oid) OidList set map($m,AccessCtrl_alternative) AltOidList # ---- set m RecordSyntax-explain set filename($m) z-exp set map($m,Explain-Record) ExplainRecord set map($m,ElementDataType_structured) ElementInfoList set map($m,HumanString_s) HumanStringUnit set unionmap($m,HumanString) {num_strings strings} set membermap($m,CommonInfo,humanString-Language) humanStringLanguage set unionmap($m,AttributeOccurrence,attributeValues) {which attributeValues AttributeOcc} set unionmap($m,AttributeCombination) {num_occurrences occurrences} # set membermap($m,NetworkAddress,internetAddress) {NetworkAddress_iA internetAddress} set map($m,NetworkAddress_iA) NetworkAddressIA set membermap($m,NetworkAddress,osiPresentationAddress) {NetworkAddress_oPA osiPresentationAddress} set map($m,NetworkAddress_oPA) NetworkAddressOPA set map($m,NetworkAddress_other) NetworkAddressOther set unionmap($m,DatabaseList) {num_databases databases} set membermap($m,TargetInfo,recent-news) recentNews set membermap($m,TargetInfo,usage-restrictions) usageRest set membermap($m,DatabaseInfo,user-fee) userFee # set map($m,ProximitySupport_0) ProxSupportUnit set map($m,ProxSupportUnitZprivate) ProxSupportPrivate set membermap($m,ProxSupportUnit,private) {ProxSupportUnit_private zprivate} # set map($m,AttributeOccurrence_specific) AttributeValueList set unionmap($m,AttributeValueList) {num_attributes attributes} set unionmap($m,ExplainRecord) {which u Explain} set map($m,SchemaInfo_0) TagTypeMapping set map($m,TagSetInfo_0) TagSetElements set map($m,TermListInfo_0) TermListElement set map($m,TermListDetails_0) EScanInfo set map($m,PrivateCapabilities_0) PrivateCapOperator set map($m,Costs_0) CostsOtherCharge set map($m,Path_s) PathUnit set map($m,IconObject_s) IconObjectUnit set map($m,NetworkAddressInternetAddress) NetworkAddressIA set map($m,NetworkAddressOsiPresentationAddress) NetworkAddressOPA set membermap($m,QueryTypeDetails,private) {QueryTypeDetails_private zprivate} set membermap($m,PrivateCapOperator,operator) roperator set map($m,AccessRestrictions_s) AccessRestrictionsUnit # ---- set m RecordSyntax-SUTRS set filename($m) z-sutrs #set map($m,SutrsRecord) SUTRS set body($m,c) { int z_SUTRS (ODR o, Odr_oct **p, int opt, const char *name) { return odr_implicit_tag(o, odr_octetstring, p, ODR_UNIVERSAL, ODR_GENERALSTRING, opt, name); } } set init($m,h) { typedef Odr_oct Z_SUTRS; YAZ_EXPORT int z_SUTRS (ODR o, Odr_oct **p, int opt, const char *name); } # ---- set m RecordSyntax-opac set filename($m) z-opac # ---- set m RecordSyntax-summary set filename($m) z-sum # ---- set m RecordSyntax-generic set filename($m) z-grs set map($m,ElementData_subtree) GenericRecord set map($m,Variant_0) Triple set membermap($m,Triple,class) zclass set unionmap($m,Triple,value) {which value Triple} set unionmap($m,GenericRecord) {num_elements elements} # ---- set m RecordSyntax-ESTaskPackage set filename($m) z-estask # ---- set m ResourceReport-Format-Resource-1 set filename($m) z-rrf1 set map($m,ResourceReport) ResourceReport1 set map($m,Estimate) Estimate1 # ---- set m ResourceReport-Format-Resource-2 set filename($m) z-rrf2 set map($m,ResourceReport) ResourceReport2 set map($m,Estimate) Estimate2 # ---- set m AccessControlFormat-prompt-1 set filename($m) z-accform1 set membermap($m,PromptId,enummeratedPrompt) enumeratedPrompt set map($m,PromptObject) PromptObject1 set map($m,Challenge) Challenge1 set map($m,Challenge1_s) ChallengeUnit1 set map($m,Response) Response1 set map($m,Response1_s) ResponseUnit1 set map($m,PromptObject) PromptObject1 # ---- set m AccessControlFormat-des-1 set filename($m) z-accdes1 # ---- set m AccessControlFormat-krb-1 set filename($m) z-acckrb1 # ---- set m ESFormat-PersistentResultSet set filename($m) zes-pset # ---- set m ESFormat-PersistentQuery set filename($m) zes-pquery # ---- set m ESFormat-PeriodicQuerySchedule set filename($m) zes-psched # ---- set m ESFormat-ItemOrder set filename($m) zes-order set map($m,ItemOrderEsRequest) Request set map($m,ItemOrderTaskPackage) TaskPackage set map($m,OriginPartToKeep_0) Contact set map($m,OriginPartToKeep_1) Billing set map($m,OriginPartNotToKeep_0) ResultSetItem # # ---- (old version) set m ESFormat-Update0 set filename($m) zes-update0 set map($m,SuppliedRecords_s) SuppliedRecords_elem set map($m,SuppliedRecords_elem_0) SuppliedRecordsId # # ---- (new, current version) set m ESFormat-Update set filename($m) zes-update set map($m,SuppliedRecords_s) SuppliedRecords_elem set map($m,SuppliedRecords_elem_0) SuppliedRecordsId # ---- set m ESFormat-ExportSpecification set filename($m) zes-exps # ---- set m ESFormat-ExportInvocation set filename($m) zes-expi # ---- set m UserInfoFormat-searchResult-1 set filename($m) z-uifr1 # ---- set m ElementSpecificationFormat-eSpec-1 set filename($m) z-espec1 set map($m,Espec-1) Espec1 set map($m,TagPath) ETagPath set map($m,ETagPath_s) ETagUnit set map($m,ETagUnitSpecificTag) SpecificTag set membermap($m,SpecificTag,occurrence) occurrences set unionmap($m,ElementRequest) {which u ERequest} set unionmap($m,ETagPath) {num_tags tags} set map($m,OccurrencesValues) OccurValues # ---- set m UserInfoFormat-dateTime set filename($m) z-date set map($m,Z3950Date) Date set map($m,Z3950Time) Time set unionmap($m,Z3950Date,era) {} set map($m,DateFlags_0) Era set map($m,Z3950DateMonthAndDay) MonthAndDay set map($m,Z3950DateQuarter) DateQuater set map($m,Z3950DateSeason) DateSeason set map($m,Date_0) DateFlags set unionmap($m,DateFlags,era) {} # ---- set m UserInfoFormat-multipleSearchTerms-2 set filename($m) z-mterm2 # ---- set m ResourceReport-Format-Universe-1 set filename($m) z-univ # ---- set m UserInfoFormat-oclcUserInformation set filename($m) z-oclcui # ---- set m ESFormat-Admin set filename($m) zes-admin set map($m,EsRequest) ESAdminRequest set map($m,TaskPackage) ESAdminTaskPackage set map($m,OriginPartToKeep) ESAdminOriginPartToKeep set map($m,OriginPartNotToKeep) ESAdminOriginPartNotToKeep set map($m,TargetPart) ESAdminTargetPart # ---- set m NegotiationRecordDefinition-charSetandLanguageNegotiation-3 set filename($m) z-charneg set membermap($m,OriginProposal_0,private) {OriginProposal_0_private zprivate} set membermap($m,TargetResponse,private) {TargetResponse_private zprivate} # ---- set m UserInfoFormat-facet-1 set filename($m) z-facet-1 # ---------------------------------------------------------- # "Constructed" types defined by means of C-types are declared here. # Each function returns the C-handler and the C-type. proc asnBasicEXTERNAL {} { return {z_External Z_External} } yaz-5.28.0/src/charneg.c0000644000175000017500000003132413265142510011676 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file charneg.c * \brief Implements Z39.50 Charset negotiation utilities * * Helper functions for Character Set and Language Negotiation - 3 */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include static Z_External* z_ext_record2(ODR o, const char *buf) { Z_External *p; int len = strlen(buf); if (!(p = (Z_External *)odr_malloc(o, sizeof(*p)))) return 0; p->descriptor = 0; p->indirect_reference = 0; p->direct_reference = odr_oiddup(o, yaz_oid_negot_charset_id); p->which = Z_External_octet; p->u.octet_aligned = odr_create_Odr_oct(o, buf, len); return p; } static int get_form(const char *charset) { int form = -1; if (!yaz_matchstr(charset, "UCS-2")) form = 2; if (!yaz_matchstr(charset, "UCS-4")) form = 4; if (!yaz_matchstr(charset, "UTF-16")) form = 5; if (!yaz_matchstr(charset, "UTF-8")) form = 8; return form; } static char *set_form(Odr_oid *encoding) { static char *charset = 0; if ( oid_oidlen(encoding) != 6) return 0; if (encoding[5] == 2) charset = "UCS-2"; if (encoding[5] == 4) charset = "UCS-4"; if (encoding[5] == 5) charset = "UTF-16"; if (encoding[5] == 8) charset = "UTF-8"; return charset; } static Z_OriginProposal_0 *z_get_OriginProposal_0(ODR o, const char *charset) { int form = get_form(charset); Z_OriginProposal_0 *p0 = (Z_OriginProposal_0*)odr_malloc(o, sizeof(*p0)); memset(p0, 0, sizeof(*p0)); if (form > 0) { /* ISO 10646 (UNICODE) */ char oidname[20]; Z_Iso10646 *is = (Z_Iso10646 *) odr_malloc(o, sizeof(*is)); p0->which = Z_OriginProposal_0_iso10646; p0->u.iso10646 = is; is->collections = 0; sprintf(oidname, "1.0.10646.1.0.%d", form); is->encodingLevel = odr_getoidbystr(o, oidname); } else { /* private ones */ Z_PrivateCharacterSet *pc = (Z_PrivateCharacterSet *)odr_malloc(o, sizeof(*pc)); memset(pc, 0, sizeof(*pc)); p0->which = Z_OriginProposal_0_private; p0->u.zprivate = pc; pc->which = Z_PrivateCharacterSet_externallySpecified; pc->u.externallySpecified = z_ext_record2(o, charset); } return p0; } static Z_OriginProposal *z_get_OriginProposal( ODR o, const char **charsets, int num_charsets, const char **langs, int num_langs, int selected) { int i; Z_OriginProposal *p = (Z_OriginProposal *) odr_malloc(o, sizeof(*p)); memset(p, 0, sizeof(*p)); p->recordsInSelectedCharSets = (bool_t *)odr_malloc(o, sizeof(bool_t)); *p->recordsInSelectedCharSets = (selected) ? 1 : 0; if (charsets && num_charsets) { p->num_proposedCharSets = num_charsets; p->proposedCharSets = (Z_OriginProposal_0**) odr_malloc(o, num_charsets*sizeof(Z_OriginProposal_0*)); for (i = 0; i < num_charsets; i++) p->proposedCharSets[i] = z_get_OriginProposal_0(o, charsets[i]); } if (langs && num_langs) { p->num_proposedlanguages = num_langs; p->proposedlanguages = (char **) odr_malloc(o, num_langs*sizeof(char *)); for (i = 0; i < num_langs; i++) p->proposedlanguages[i] = (char *)langs[i]; } return p; } static Z_CharSetandLanguageNegotiation *z_get_CharSetandLanguageNegotiation( ODR o) { Z_CharSetandLanguageNegotiation *p = (Z_CharSetandLanguageNegotiation *) odr_malloc(o, sizeof(*p)); memset(p, 0, sizeof(*p)); return p; } /* Create EXTERNAL for negotation proposal. Client side */ Z_External *yaz_set_proposal_charneg(ODR o, const char **charsets, int num_charsets, const char **langs, int num_langs, int selected) { Z_External *p = (Z_External *)odr_malloc(o, sizeof(*p)); p->descriptor = 0; p->indirect_reference = 0; p->direct_reference = odr_oiddup(o, yaz_oid_negot_charset_3); p->which = Z_External_charSetandLanguageNegotiation; p->u.charNeg3 = z_get_CharSetandLanguageNegotiation(o); p->u.charNeg3->which = Z_CharSetandLanguageNegotiation_proposal; p->u.charNeg3->u.proposal = z_get_OriginProposal(o, charsets, num_charsets, langs, num_langs, selected); return p; } Z_External *yaz_set_proposal_charneg_list(ODR o, const char *delim, const char *charset_list, const char *lang_list, int selected) { char **charsets_addresses = 0; char **langs_addresses = 0; int charsets_count = 0; int langs_count = 0; if (charset_list) nmem_strsplit(odr_getmem(o), delim, charset_list, &charsets_addresses, &charsets_count); if (lang_list) nmem_strsplit(odr_getmem(o), delim, lang_list, &langs_addresses, &langs_count); return yaz_set_proposal_charneg(o, (const char **) charsets_addresses, charsets_count, (const char **) langs_addresses, langs_count, selected); } /* used by yaz_set_response_charneg */ static Z_TargetResponse *z_get_TargetResponse(ODR o, const char *charset, const char *lang, int selected) { Z_TargetResponse *p = (Z_TargetResponse *) odr_malloc(o, sizeof(*p)); int form = get_form(charset); memset(p, 0, sizeof(*p)); if (form > 0) { char oidname[20]; Z_Iso10646 *is = (Z_Iso10646 *) odr_malloc (o, sizeof(*is)); p->which = Z_TargetResponse_iso10646; p->u.iso10646 = is; is->collections = 0; sprintf(oidname, "1.0.10646.1.0.%d", form); is->encodingLevel = odr_getoidbystr (o, oidname); } else { Z_PrivateCharacterSet *pc = (Z_PrivateCharacterSet *)odr_malloc(o, sizeof(*pc)); memset(pc, 0, sizeof(*pc)); p->which = Z_TargetResponse_private; p->u.zprivate = pc; pc->which = Z_PrivateCharacterSet_externallySpecified; pc->u.externallySpecified = z_ext_record2(o, charset); } p->recordsInSelectedCharSets = (bool_t *)odr_malloc(o, sizeof(bool_t)); *p->recordsInSelectedCharSets = (selected) ? 1 : 0; p->selectedLanguage = lang ? (char *) odr_strdup(o, lang) : 0; return p; } /* Create charset response. Server side */ Z_External *yaz_set_response_charneg(ODR o, const char *charset, const char *lang, int selected) { Z_External *p = (Z_External *)odr_malloc(o, sizeof(*p)); p->descriptor = 0; p->indirect_reference = 0; p->direct_reference = odr_oiddup(o, yaz_oid_negot_charset_3); p->which = Z_External_charSetandLanguageNegotiation; p->u.charNeg3 = z_get_CharSetandLanguageNegotiation(o); p->u.charNeg3->which = Z_CharSetandLanguageNegotiation_response; p->u.charNeg3->u.response = z_get_TargetResponse(o, charset, lang, selected); return p; } /* Get negotiation from OtherInformation. Client&Server side */ Z_CharSetandLanguageNegotiation *yaz_get_charneg_record(Z_OtherInformation *p) { int i; if (!p) return 0; for (i = 0; i < p->num_elements; i++) { Z_External *pext; if ((p->list[i]->which == Z_OtherInfo_externallyDefinedInfo) && (pext = p->list[i]->information.externallyDefinedInfo)) { if (!oid_oidcmp(pext->direct_reference, yaz_oid_negot_charset_3) && pext->which == Z_External_charSetandLanguageNegotiation) { return pext->u.charNeg3; } } } return 0; } /* Delete negotiation from OtherInformation. Client&Server side */ int yaz_del_charneg_record(Z_OtherInformation **p) { int i; if (!*p) return 0; for (i = 0; i < (*p)->num_elements; i++) { Z_External *pext; if (((*p)->list[i]->which == Z_OtherInfo_externallyDefinedInfo) && (pext = (*p)->list[i]->information.externallyDefinedInfo)) { if (!oid_oidcmp(pext->direct_reference, yaz_oid_negot_charset_3) && pext->which == Z_External_charSetandLanguageNegotiation) { if ((*p)->num_elements <= 1) *p = 0; else { --((*p)->num_elements); for (; i < (*p)->num_elements; i++) (*p)->list[i] = (*p)->list[i+1]; } return 1; } } } return 0; } /* Get charsets, langs, selected from negotiation.. Server side */ void yaz_get_proposal_charneg(NMEM mem, Z_CharSetandLanguageNegotiation *p, char ***charsets, int *num_charsets, char ***langs, int *num_langs, int *selected) { int i; Z_OriginProposal *pro = p->u.proposal; if (num_charsets && charsets) { if (pro->num_proposedCharSets) { *num_charsets = pro->num_proposedCharSets; (*charsets) = (char **) nmem_malloc(mem, pro->num_proposedCharSets * sizeof(char *)); for (i = 0; i < pro->num_proposedCharSets; i++) { (*charsets)[i] = 0; if (pro->proposedCharSets[i]->which == Z_OriginProposal_0_private && pro->proposedCharSets[i]->u.zprivate->which == Z_PrivateCharacterSet_externallySpecified) { Z_External *pext = pro->proposedCharSets[i]->u.zprivate->u.externallySpecified; if (pext->which == Z_External_octet) { (*charsets)[i] = (char *) nmem_malloc(mem, (1+pext->u.octet_aligned->len) * sizeof(char)); memcpy((*charsets)[i], pext->u.octet_aligned->buf, pext->u.octet_aligned->len); (*charsets)[i][pext->u.octet_aligned->len] = 0; } } else if (pro->proposedCharSets[i]->which == Z_OriginProposal_0_iso10646) (*charsets)[i] = set_form( pro->proposedCharSets[i]->u.iso10646->encodingLevel); } } else *num_charsets = 0; } if (langs && num_langs) { if (pro->num_proposedlanguages) { *num_langs = pro->num_proposedlanguages; (*langs) = (char **) nmem_malloc(mem, pro->num_proposedlanguages * sizeof(char *)); for (i = 0; i < pro->num_proposedlanguages; i++) (*langs)[i] = nmem_strdup(mem, pro->proposedlanguages[i]); } else *num_langs = 0; } if (pro->recordsInSelectedCharSets && selected) *selected = *pro->recordsInSelectedCharSets; } /* Return charset, lang, selected from negotiation.. Client side */ void yaz_get_response_charneg(NMEM mem, Z_CharSetandLanguageNegotiation *p, char **charset, char **lang, int *selected) { Z_TargetResponse *res = p->u.response; if (charset && res->which == Z_TargetResponse_private && res->u.zprivate->which == Z_PrivateCharacterSet_externallySpecified) { Z_External *pext = res->u.zprivate->u.externallySpecified; if (pext->which == Z_External_octet) { *charset = (char *) nmem_malloc(mem, (1+pext->u.octet_aligned->len)*sizeof(char)); memcpy(*charset, pext->u.octet_aligned->buf, pext->u.octet_aligned->len); (*charset)[pext->u.octet_aligned->len] = 0; } } if (charset && res->which == Z_TargetResponse_iso10646) *charset = set_form(res->u.iso10646->encodingLevel); if (lang && res->selectedLanguage) *lang = nmem_strdup(mem, res->selectedLanguage); if (selected && res->recordsInSelectedCharSets) *selected = *res->recordsInSelectedCharSets; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/logrpn.c0000644000175000017500000002660013265142510011571 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file logrpn.c * \brief Implements Z39.50 Query Printing */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include static const char *relToStr(Odr_int v) { const char *str = 0; switch (v) { case 1: str = "Less than"; break; case 2: str = "Less than or equal"; break; case 3: str = "Equal"; break; case 4: str = "Greater or equal"; break; case 5: str = "Greater than"; break; case 6: str = "Not equal"; break; case 100: str = "Phonetic"; break; case 101: str = "Stem"; break; case 102: str = "Relevance"; break; case 103: str = "AlwaysMatches"; break; } return str; } static void attrStr(Odr_int type, Odr_int value, char *str) { const char *rstr; *str = '\0'; switch (type) { case 1: sprintf(str, "use"); break; case 2: rstr = relToStr(value); if (rstr) sprintf(str, "relation=%s", rstr); else sprintf(str, "relation=" ODR_INT_PRINTF, value); break; case 3: switch (value) { case 1: sprintf(str, "position=First in field"); break; case 2: sprintf(str, "position=First in any subfield"); break; case 3: sprintf(str, "position=Any position in field"); break; default: sprintf(str, "position"); } break; case 4: switch (value) { case 1: sprintf(str, "structure=Phrase"); break; case 2: sprintf(str, "structure=Word"); break; case 3: sprintf(str, "structure=Key"); break; case 4: sprintf(str, "structure=Year"); break; case 5: sprintf(str, "structure=Date"); break; case 6: sprintf(str, "structure=Word list"); break; case 100: sprintf(str, "structure=Date (un)"); break; case 101: sprintf(str, "structure=Name (norm)"); break; case 102: sprintf(str, "structure=Name (un)"); break; case 103: sprintf(str, "structure=Structure"); break; case 104: sprintf(str, "structure=urx"); break; case 105: sprintf(str, "structure=free-form-text"); break; case 106: sprintf(str, "structure=document-text"); break; case 107: sprintf(str, "structure=local-number"); break; case 108: sprintf(str, "structure=string"); break; case 109: sprintf(str, "structure=numeric string"); break; default: sprintf(str, "structure"); } break; case 5: switch (value) { case 1: sprintf(str, "truncation=Right"); break; case 2: sprintf(str, "truncation=Left"); break; case 3: sprintf(str, "truncation=Left&right"); break; case 100: sprintf(str, "truncation=Do not truncate"); break; case 101: sprintf(str, "truncation=Process #"); break; case 102: sprintf(str, "truncation=re-1"); break; case 103: sprintf(str, "truncation=re-2"); break; case 104: sprintf(str, "truncation=CCL"); break; default: sprintf(str, "truncation"); } break; case 6: switch(value) { case 1: sprintf(str, "completeness=Incomplete subfield"); break; case 2: sprintf(str, "completeness=Complete subfield"); break; case 3: sprintf(str, "completeness=Complete field"); break; default: sprintf(str, "completeness"); } break; } if (*str) sprintf(str + strlen(str), " (" ODR_INT_PRINTF "=" ODR_INT_PRINTF")", type, value); else sprintf(str, ODR_INT_PRINTF "=" ODR_INT_PRINTF, type, value); } /* * zlog_attributes: print attributes of term */ static void zlog_attributes(Z_AttributesPlusTerm *t, int depth, const Odr_oid *ast, int loglevel) { int of, i; char str[80]; int num_attributes = t->attributes->num_attributes; for (of = 0; of < num_attributes; of++) { char attset_name_buf[OID_STR_MAX]; const char *attset_name = 0; Z_AttributeElement *element; element = t->attributes->attributes[of]; if (element->attributeSet) { attset_name = yaz_oid_to_string_buf(element->attributeSet, 0, attset_name_buf); } if (!attset_name) attset_name = ""; switch (element->which) { case Z_AttributeValue_numeric: attrStr(*element->attributeType, *element->value.numeric, str); yaz_log(loglevel, "%*.0s%s %s", depth, "", attset_name, str); break; case Z_AttributeValue_complex: yaz_log(loglevel, "%*.0s%s attributeType=" ODR_INT_PRINTF " complex", depth, "", attset_name, *element->attributeType); for (i = 0; ivalue.complex->num_list; i++) { if (element->value.complex->list[i]->which == Z_StringOrNumeric_string) yaz_log(loglevel, "%*.0s string: '%s'", depth, "", element->value.complex->list[i]->u.string); else if (element->value.complex->list[i]->which == Z_StringOrNumeric_numeric) yaz_log(loglevel, "%*.0s numeric: '" ODR_INT_PRINTF " '", depth, "", *element->value.complex->list[i]->u.numeric); } break; default: yaz_log(loglevel, "%.*s%s attribute unknown", depth, "", attset_name); } } } static char *complex_op_name(Z_Operator *op) { switch (op->which) { case Z_Operator_and: return "and"; case Z_Operator_or: return "or"; case Z_Operator_and_not: return "not"; case Z_Operator_prox: return "prox"; default: return "unknown complex operator"; } } const char *yaz_prox_unit_name(Z_ProximityOperator *op) { if (op->which!=Z_ProximityOperator_known) return "private"; const char *n = z_ProxUnit_to_str(*op->u.known); if (n) return n; return "unknown"; } static void zlog_structure(Z_RPNStructure *zs, int depth, const Odr_oid *ast, int loglevel) { if (zs->which == Z_RPNStructure_complex) { Z_Operator *op = zs->u.complex->roperator; switch (op->which) { case Z_Operator_and: case Z_Operator_or: case Z_Operator_and_not: yaz_log(loglevel, "%*.0s %s", depth, "", complex_op_name(op) ); break; case Z_Operator_prox: yaz_log(loglevel, "%*.0s prox excl=%s dist=" ODR_INT_PRINTF " order=%s " "rel=%s unit=%s", depth, "", op->u.prox->exclusion ? (*op->u.prox->exclusion ? "T" : "F") : "N", *op->u.prox->distance, *op->u.prox->ordered ? "T" : "F", relToStr(*op->u.prox->relationType), yaz_prox_unit_name(op->u.prox) ); break; default: yaz_log(loglevel, "%*.0s unknown complex", depth, ""); return; } zlog_structure(zs->u.complex->s1, depth+2, ast, loglevel); zlog_structure(zs->u.complex->s2, depth+2, ast, loglevel); } else if (zs->which == Z_RPNStructure_simple) { if (zs->u.simple->which == Z_Operand_APT) { Z_AttributesPlusTerm *zapt = zs->u.simple->u.attributesPlusTerm; switch (zapt->term->which) { case Z_Term_general: yaz_log(loglevel, "%*.0s term '%.*s' (general)", depth, "", zapt->term->u.general->len, zapt->term->u.general->buf); break; case Z_Term_characterString: yaz_log(loglevel, "%*.0s term '%s' (string)", depth, "", zapt->term->u.characterString); break; case Z_Term_numeric: yaz_log(loglevel, "%*.0s term '" ODR_INT_PRINTF "' (numeric)", depth, "", *zapt->term->u.numeric); break; case Z_Term_null: yaz_log(loglevel, "%*.0s term (null)", depth, ""); break; default: yaz_log(loglevel, "%*.0s term (not general)", depth, ""); } zlog_attributes(zapt, depth+2, ast, loglevel); } else if (zs->u.simple->which == Z_Operand_resultSetId) { yaz_log(loglevel, "%*.0s set '%s'", depth, "", zs->u.simple->u.resultSetId); } else yaz_log(loglevel, "%*.0s unknown simple structure", depth, ""); } else yaz_log(loglevel, "%*.0s unknown structure", depth, ""); } void log_rpn_query_level(int loglevel, Z_RPNQuery *rpn) { zlog_structure(rpn->RPNStructure, 0, rpn->attributeSetId, loglevel); } void log_rpn_query(Z_RPNQuery *rpn) { log_rpn_query_level(YLOG_LOG, rpn); } void log_scan_term_level(int loglevel, Z_AttributesPlusTerm *zapt, const Odr_oid *ast) { int depth = 0; if (!loglevel) return; if (zapt->term->which == Z_Term_general) { yaz_log(loglevel, "%*.0s term '%.*s' (general)", depth, "", zapt->term->u.general->len, zapt->term->u.general->buf); } else yaz_log(loglevel, "%*.0s term (not general)", depth, ""); zlog_attributes(zapt, depth+2, ast, loglevel); } void log_scan_term(Z_AttributesPlusTerm *zapt, const Odr_oid *ast) { log_scan_term_level(YLOG_LOG, zapt, ast); } void yaz_log_zquery_level(int loglevel, Z_Query *q) { if (!loglevel) return; switch (q->which) { case Z_Query_type_1: case Z_Query_type_101: log_rpn_query_level(loglevel, q->u.type_1); break; case Z_Query_type_2: yaz_log(loglevel, "CCL: %.*s", q->u.type_2->len, q->u.type_2->buf); break; case Z_Query_type_100: yaz_log(loglevel, "Z39.58: %.*s", q->u.type_100->len, q->u.type_100->buf); break; case Z_Query_type_104: if (q->u.type_104->which == Z_External_CQL) yaz_log(loglevel, "CQL: %s", q->u.type_104->u.cql); } } void yaz_log_zquery(Z_Query *q) { yaz_log_zquery_level(YLOG_LOG, q); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/esadmin.asn0000644000175000017500000000312313250277530012247 00000000000000ESFormat-Admin {Z39-50-extendedService Index-Data(81) AdminES (1)} DEFINITIONS ::= -- oid is 1.2.840.10003.9.81.1 BEGIN IMPORTS DiagRec, InternationalString, Segment FROM Z39-50-APDU-1995; Admin ::= CHOICE{ esRequest [1] IMPLICIT SEQUENCE{ toKeep [1] OriginPartToKeep, notToKeep [2] OriginPartNotToKeep}, taskPackage [2] IMPLICIT SEQUENCE{ originPart [1] OriginPartToKeep, targetPart [2] TargetPart}} OriginPartToKeep ::= SEQUENCE{ action [1] CHOICE{ reIndex [1] NULL, truncate [2] NULL, drop [3] NULL, create [4] NULL, import [5] ImportParameters, refresh [6] NULL, -- Review internal representation of records against source files on disk to -- see if they have been updated. commit [7] NULL, shutdown [8] NULL, start [9] NULL}, databaseName [2] IMPLICIT InternationalString OPTIONAL} OriginPartNotToKeep ::= CHOICE{ records [1] Segment, recordsWillFollow [0] NULL} TargetPart ::= SEQUENCE{ updateStatus [1] IMPLICIT INTEGER{ success (1), partial (2), failure (3)}, globalDiagnostics [2] IMPLICIT SEQUENCE OF DiagRec OPTIONAL } -- Auxiliary definitions for Admin ImportParameters ::= SEQUENCE{ recordType [1] IMPLICIT InternationalString } END yaz-5.28.0/src/mutex-p.h0000644000175000017500000000347413265142510011700 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file mutex-p.h * \brief Declares internal definitions of for Mutex functions */ struct yaz_mutex { #ifdef WIN32 CRITICAL_SECTION handle; #elif YAZ_POSIX_THREADS pthread_mutex_t handle; #endif char *name; int log_level; }; yaz-5.28.0/src/zoom-opt.c0000644000175000017500000001322013265142510012046 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file zoom-opt.c * \brief Implements ZOOM options handling */ #if HAVE_CONFIG_H #include #endif #include #include "zoom-p.h" #include struct ZOOM_options_entry { char *name; char *value; int len; /* of `value', which may contain NULs */ struct ZOOM_options_entry *next; }; struct ZOOM_options_p { int refcount; void *callback_handle; ZOOM_options_callback callback_func; struct ZOOM_options_entry *entries; ZOOM_options parent1; ZOOM_options parent2; }; static void set_value(struct ZOOM_options_entry **e, const char *value, int len) { (*e)->value = 0; (*e)->len = 0; if (value) { (*e)->value = (char *) xmalloc(len+1); memcpy((*e)->value, value, len); (*e)->value[len] = '\0'; (*e)->len = len; } } static void append_entry(struct ZOOM_options_entry **e, const char *name, const char *value, int len) { *e = (struct ZOOM_options_entry *) xmalloc(sizeof(**e)); (*e)->name = xstrdup(name); set_value(e, value, len); (*e)->next = 0; } ZOOM_API(ZOOM_options) ZOOM_options_dup(ZOOM_options src) { if (!src) return 0; else { ZOOM_options dst = ZOOM_options_create(); struct ZOOM_options_entry *src_e = src->entries; struct ZOOM_options_entry **dst_e = &dst->entries; while(src_e) { append_entry(dst_e, src_e->name, src_e->value, src_e->len); dst_e = &(*dst_e)->next; src_e = src_e->next; } dst->parent1 = ZOOM_options_dup(src->parent1); dst->parent2 = ZOOM_options_dup(src->parent2); return dst; } } ZOOM_API(ZOOM_options) ZOOM_options_create_with_parent(ZOOM_options parent) { return ZOOM_options_create_with_parent2(parent, 0); } ZOOM_API(ZOOM_options) ZOOM_options_create(void) { return ZOOM_options_create_with_parent(0); } ZOOM_API(ZOOM_options) ZOOM_options_create_with_parent2(ZOOM_options parent1, ZOOM_options parent2) { ZOOM_options opt = (ZOOM_options) xmalloc(sizeof(*opt)); opt->refcount = 1; opt->callback_func = 0; opt->callback_handle = 0; opt->entries = 0; opt->parent1= parent1; if (parent1) (parent1->refcount)++; opt->parent2= parent2; if (parent2) (parent2->refcount)++; return opt; } void ZOOM_options_addref(ZOOM_options opt) { (opt->refcount)++; } ZOOM_API(ZOOM_options_callback) ZOOM_options_set_callback ( ZOOM_options opt, ZOOM_options_callback callback_func, void *callback_handle) { ZOOM_options_callback callback_old; assert(opt); callback_old = opt->callback_func; opt->callback_func = callback_func; opt->callback_handle = callback_handle; return callback_old; } ZOOM_API(void) ZOOM_options_destroy(ZOOM_options opt) { if (!opt) return; (opt->refcount)--; if (opt->refcount == 0) { struct ZOOM_options_entry *e; ZOOM_options_destroy(opt->parent1); ZOOM_options_destroy(opt->parent2); e = opt->entries; while (e) { struct ZOOM_options_entry *e0 = e; xfree(e->name); xfree(e->value); e = e->next; xfree(e0); } xfree(opt); } } ZOOM_API(void) ZOOM_options_setl(ZOOM_options opt, const char *name, const char *value, int len) { struct ZOOM_options_entry **e; e = &opt->entries; while (*e) { if (!strcmp((*e)->name, name)) { xfree((*e)->value); set_value(e, value, len); return; } e = &(*e)->next; } append_entry(e, name, value, len); } ZOOM_API(void) ZOOM_options_set(ZOOM_options opt, const char *name, const char *value) { ZOOM_options_setl(opt, name, value, value ? strlen(value): 0); } ZOOM_API(const char *) ZOOM_options_getl(ZOOM_options opt, const char *name, int *lenp) { const char *v = 0; if (!opt) return 0; if (opt->callback_func) { v = (*opt->callback_func)(opt->callback_handle, name); if (v) *lenp = strlen(v); } if (!v) { struct ZOOM_options_entry *e; for (e = opt->entries; e; e = e->next) if (!strcmp(e->name, name)) { v = e->value; *lenp = e->len; break; } } if (!v) v = ZOOM_options_getl(opt->parent1, name, lenp); if (!v) v = ZOOM_options_getl(opt->parent2, name, lenp); return v; } ZOOM_API(const char *) ZOOM_options_get(ZOOM_options opt, const char *name) { int dummy; return ZOOM_options_getl(opt, name, &dummy); } ZOOM_API(int) ZOOM_options_get_bool(ZOOM_options opt, const char *name, int defa) { const char *v = ZOOM_options_get(opt, name); if (!v) return defa; if (!strcmp(v, "1") || !strcmp(v, "T")) return 1; return 0; } ZOOM_API(int) ZOOM_options_get_int(ZOOM_options opt, const char *name, int defa) { const char *v = ZOOM_options_get(opt, name); if (!v || !*v) return defa; return atoi(v); } ZOOM_API(void) ZOOM_options_set_int(ZOOM_options opt, const char *name, int value) { char s[40]; sprintf(s, "%d", value); ZOOM_options_set(opt, name, s); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-acckrb1.c0000644000175000017500000000315013273126163012045 00000000000000/** \file z-acckrb1.c \brief ASN.1 Module AccessControlFormat-krb-1 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_KRBObject(ODR o, Z_KRBObject **p, int opt, const char *name) { static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_KRBObject_challenge, (Odr_fun) z_KRBRequest, "challenge"}, {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_KRBObject_response, (Odr_fun) z_KRBResponse, "response"}, {-1, -1, -1, -1, (Odr_fun) 0, 0} }; if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } int z_KRBRequest(ODR o, Z_KRBRequest **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->service, ODR_CONTEXT, 1, 0, "service") && odr_implicit_tag(o, z_InternationalString, &(*p)->instance, ODR_CONTEXT, 2, 1, "instance") && odr_implicit_tag(o, z_InternationalString, &(*p)->realm, ODR_CONTEXT, 3, 1, "realm") && odr_sequence_end(o); } int z_KRBResponse(ODR o, Z_KRBResponse **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, z_InternationalString, &(*p)->userid, ODR_CONTEXT, 1, 1, "userid") && odr_implicit_tag(o, odr_octetstring, &(*p)->ticket, ODR_CONTEXT, 2, 0, "ticket") && odr_sequence_end(o); } yaz-5.28.0/src/xml_to_opac.c0000644000175000017500000002311413265142510012571 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /** * \file xml_to_opac.c * \brief Implements XML to OPAC conversion */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include "sru-p.h" static int match_element_next(xmlNode **ptr, const char *elem, NMEM nmem, char **val) { while (*ptr && (*ptr)->type != XML_ELEMENT_NODE) (*ptr) = (*ptr)->next; if (yaz_match_xsd_string_n_nmem(*ptr, elem, nmem, val, 0)) { *ptr = (*ptr)->next; return 1; } *val = 0; return 0; } static int match_v_next(xmlNode **ptr, const char *elem, NMEM nmem, Odr_bool **val) { while (*ptr && (*ptr)->type != XML_ELEMENT_NODE) (*ptr) = (*ptr)->next; *val = nmem_booldup(nmem, 0); if (yaz_match_xsd_element(*ptr, elem)) { struct _xmlAttr *attr = (*ptr)->properties; *ptr = (*ptr)->next; for (; attr; attr = attr->next) { if (!strcmp((const char *) attr->name, "value")) { if (attr->children->type == XML_TEXT_NODE) { if (attr->children->content[0] == '0') return 1; else if (attr->children->content[0] == '1') { **val = 1; return 1; } } } } } return 0; } static int bibliographicRecord(yaz_marc_t mt, xmlNode *ptr, Z_External **ext, yaz_iconv_t cd, NMEM nmem, const Odr_oid *syntax) { int ret = 0; if (yaz_marc_read_xml(mt, ptr) == 0) { WRBUF wr = wrbuf_alloc(); if (yaz_marc_write_iso2709(mt, wr) == 0) { *ext = z_ext_record_oid_nmem( nmem, syntax ? syntax : yaz_oid_recsyn_usmarc, wrbuf_buf(wr), wrbuf_len(wr)); ret = 1; } wrbuf_destroy(wr); } return ret; } static int volume(xmlNode *ptr, Z_Volume **volp, NMEM nmem) { *volp = (Z_Volume *) nmem_malloc(nmem, sizeof(Z_Volume)); match_element_next(&ptr, "enumeration", nmem, &(*volp)->enumeration); match_element_next(&ptr, "chronology", nmem, &(*volp)->chronology); match_element_next(&ptr, "enumAndChron", nmem, &(*volp)->enumAndChron); return 1; } static int volumes(xmlNode *ptr, Z_Volume ***volp, int *num, NMEM nmem) { int i; xmlNode *ptr0 = ptr; for (i = 0; ptr; i++) { while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!ptr) break; if (!yaz_match_xsd_element(ptr, "volume")) return 0; ptr = ptr->next; } *num = i; *volp = (Z_Volume **) nmem_malloc(nmem, sizeof(**volp) * i); ptr = ptr0; for (i = 0; ptr; i++) { while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!ptr) break; if (!yaz_match_xsd_element(ptr, "volume")) return 0; volume(ptr->children, (*volp) + i, nmem); ptr = ptr->next; } return 1; } static int circulation(xmlNode *ptr, Z_CircRecord **circp, NMEM nmem) { *circp = (Z_CircRecord *) nmem_malloc(nmem, sizeof(Z_CircRecord)); match_v_next(&ptr, "availableNow", nmem, &(*circp)->availableNow); /* note the spelling of the ASN.1 member below */ match_element_next(&ptr, "availabilityDate", nmem, &(*circp)->availablityDate); match_element_next(&ptr, "availableThru", nmem, &(*circp)->availableThru); match_element_next(&ptr, "restrictions", nmem, &(*circp)->restrictions); match_element_next(&ptr, "itemId", nmem, &(*circp)->itemId); match_v_next(&ptr, "renewable", nmem, &(*circp)->renewable); match_v_next(&ptr, "onHold", nmem, &(*circp)->onHold); match_element_next(&ptr, "enumAndChron", nmem, &(*circp)->enumAndChron); match_element_next(&ptr, "midspine", nmem, &(*circp)->midspine); match_element_next(&ptr, "temporaryLocation", nmem, &(*circp)->temporaryLocation); return 1; } static int circulations(xmlNode *ptr, Z_CircRecord ***circp, int *num, NMEM nmem) { int i; xmlNode *ptr0 = ptr; for (i = 0; ptr; i++) { while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!ptr) break; if (!yaz_match_xsd_element(ptr, "circulation")) return 0; ptr = ptr->next; } *num = i; *circp = (Z_CircRecord **) nmem_malloc(nmem, sizeof(**circp) * i); ptr = ptr0; for (i = 0; ptr; i++) { while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!ptr) break; if (!yaz_match_xsd_element(ptr, "circulation")) return 0; circulation(ptr->children, (*circp) + i, nmem); ptr = ptr->next; } return 1; } static int holdingsRecord(xmlNode *ptr, Z_HoldingsRecord **r, NMEM nmem) { Z_HoldingsAndCircData *h; *r = (Z_HoldingsRecord *) nmem_malloc(nmem, sizeof(**r)); (*r)->which = Z_HoldingsRecord_holdingsAndCirc; h = (*r)->u.holdingsAndCirc = (Z_HoldingsAndCircData *) nmem_malloc(nmem, sizeof(*h)); match_element_next(&ptr, "typeOfRecord", nmem, &h->typeOfRecord); match_element_next(&ptr, "encodingLevel", nmem, &h->encodingLevel); match_element_next(&ptr, "format", nmem, &h->format); match_element_next(&ptr, "receiptAcqStatus", nmem, &h->receiptAcqStatus); match_element_next(&ptr, "generalRetention", nmem, &h->generalRetention); match_element_next(&ptr, "completeness", nmem, &h->completeness); match_element_next(&ptr, "dateOfReport", nmem, &h->dateOfReport); match_element_next(&ptr, "nucCode", nmem, &h->nucCode); match_element_next(&ptr, "localLocation", nmem, &h->localLocation); match_element_next(&ptr, "shelvingLocation", nmem, &h->shelvingLocation); match_element_next(&ptr, "callNumber", nmem, &h->callNumber); match_element_next(&ptr, "shelvingData", nmem, &h->shelvingData); match_element_next(&ptr, "copyNumber", nmem, &h->copyNumber); match_element_next(&ptr, "publicNote", nmem, &h->publicNote); match_element_next(&ptr, "reproductionNote", nmem, &h->reproductionNote); match_element_next(&ptr, "termsUseRepro", nmem, &h->termsUseRepro); match_element_next(&ptr, "enumAndChron", nmem, &h->enumAndChron); h->num_volumes = 0; h->volumes = 0; while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (yaz_match_xsd_element(ptr, "volumes")) { volumes(ptr->children, &h->volumes, &h->num_volumes, nmem); ptr = ptr->next; } h->num_circulationData = 0; h->circulationData = 0; while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (yaz_match_xsd_element(ptr, "circulations")) { circulations(ptr->children, &h->circulationData, &h->num_circulationData, nmem); ptr = ptr->next; } return 1; } static int yaz_xml_to_opac_ptr(yaz_marc_t mt, xmlNode *ptr, Z_OPACRecord **dst, yaz_iconv_t cd, NMEM nmem, const Odr_oid *syntax) { int i; Z_External *ext = 0; Z_OPACRecord *opac; xmlNode *ptr0; if (!nmem) nmem = yaz_marc_get_nmem(mt); if (!yaz_match_xsd_element(ptr, "opacRecord")) return 0; ptr = ptr->children; while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!yaz_match_xsd_element(ptr, "bibliographicRecord")) return 0; if (!bibliographicRecord(mt, ptr->children, &ext, cd, nmem, syntax)) return 0; *dst = opac = (Z_OPACRecord *) nmem_malloc(nmem, sizeof(*opac)); opac->num_holdingsData = 0; opac->holdingsData = 0; opac->bibliographicRecord = ext; ptr = ptr->next; while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!yaz_match_xsd_element(ptr, "holdings")) return 0; ptr = ptr->children; ptr0 = ptr; for (i = 0; ptr; i++) { while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!ptr) break; if (!yaz_match_xsd_element(ptr, "holding")) return 0; ptr = ptr->next; } opac->num_holdingsData = i; opac->holdingsData = (Z_HoldingsRecord **) nmem_malloc(nmem, sizeof(*opac->holdingsData) * i); ptr = ptr0; for (i = 0; ptr; i++) { while (ptr && ptr->type != XML_ELEMENT_NODE) ptr = ptr->next; if (!ptr) break; if (!yaz_match_xsd_element(ptr, "holding")) return 0; if (!holdingsRecord(ptr->children, opac->holdingsData + i, nmem)) return 0; ptr = ptr->next; } return 1; } int yaz_xml_to_opac(yaz_marc_t mt, const char *buf_in, size_t size_in, Z_OPACRecord **dst, yaz_iconv_t cd, NMEM nmem, const Odr_oid *syntax) { xmlDocPtr doc = xmlParseMemory(buf_in, size_in); int r = 0; if (doc) { r = yaz_xml_to_opac_ptr(mt, xmlDocGetRootElement(doc), dst, cd, nmem, syntax); xmlFreeDoc(doc); } return r; } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/src/z-mterm2.c0000644000175000017500000000170013273126163011744 00000000000000/** \file z-mterm2.c \brief ASN.1 Module UserInfoFormat-multipleSearchTerms-2 Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int z_MultipleSearchTerms_2_s(ODR o, Z_MultipleSearchTerms_2_s **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_explicit_tag(o, z_Term, &(*p)->term, ODR_CONTEXT, 1, 0, "term") && odr_implicit_tag(o, odr_bool, &(*p)->flag, ODR_CONTEXT, 2, 1, "flag") && odr_sequence_end(o); } int z_MultipleSearchTerms_2(ODR o, Z_MultipleSearchTerms_2 **p, int opt, const char *name) { if (!odr_initmember(o, p, sizeof(**p))) return odr_missing(o, opt, name); if (odr_sequence_of(o, (Odr_fun) z_MultipleSearchTerms_2_s, &(*p)->elements, &(*p)->num, name)) return 1; if (o->direction == ODR_DECODE) *p = 0; return odr_missing(o, opt, name); } yaz-5.28.0/configure0000755000175000017500000171337113570011145011253 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for yaz 5.28.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: yaz-help@indexdata.dk about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='yaz' PACKAGE_TARNAME='yaz' PACKAGE_VERSION='5.28.0' PACKAGE_STRING='yaz 5.28.0' PACKAGE_BUGREPORT='yaz-help@indexdata.dk' PACKAGE_URL='' ac_unique_file="configure.ac" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS VERSION_SHA1 VERSION_HEX WIN_FILEVERSION ICU_LIBS ICU_CFLAGS ICU_CPPFLAGS ICU_CONFIG pkgconfigpath XML2_CFLAGS PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC acx_pthread_config YAZ_CONFIG_CFLAGS TCPD_LIBS SSL_LIBS SSL_CFLAGS MEMCACHED_LIBS HIREDIS_LIBS XSL_DIR DSSSL_DIR DTD_DIR PDF_COMPILE TKL_COMPILE HTML_COMPILE MAN_COMPILE XSLTPROC_COMPILE PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL TCLSH YACC CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC YAZ_CONF_CFLAGS READLINE_LIBS AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock with_docbook_dtd with_docbook_dsssl with_docbook_xsl with_redis with_memcached with_gnutls with_iconv enable_tcpd enable_threads with_xml2 with_xslt with_exslt with_icu ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP LT_SYS_LIBRARY_PATH PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures yaz 5.28.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/yaz] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of yaz 5.28.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-tcpd=PREFIX enable TCP wrapper for server if available --disable-threads disable POSIX threads Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-docbook-dtd=DIR use docbookx.dtd in DIR --with-docbook-dsssl=DIR use Docbook DSSSL in DIR/{html,print}/docbook.dsl --with-docbook-xsl=DIR use Docbook XSL in DIR/{htmlhelp,xhtml} --with-redis hiredis library --with-memcached Memcached library --with-gnutls=PREFIX GNU TLS library in PREFIX --with-iconv=PREFIX iconv library in PREFIX --with-xml2[=PREFIX] use libxml2 in PREFIX --with-xslt[=PREFIX] use libXSLT in PREFIX --with-exslt[=PREFIX] use libEXSLT in PREFIX --with-icu=PREFIX use ICU libs in PREFIX Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF yaz configure 5.28.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------ ## ## Report this to yaz-help@indexdata.dk ## ## ------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by yaz $as_me 5.28.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers include/config.h" ac_aux_dir= for ac_dir in config "$srcdir"/config; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='yaz' VERSION='5.28.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu for ac_prog in 'bison -y' do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_YACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -z "$YACC" -a ! -f src/cql.c && as_fn_error $? "GNU Bison not found" "$LINENO" 5 test -z "$YACC" && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GNU Bison not found" >&5 $as_echo "$as_me: WARNING: GNU Bison not found" >&2;} for ac_prog in tclsh tclsh8.5 tclsh8.4 tclsh8.3 tclsh8.2 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_TCLSH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$TCLSH"; then ac_cv_prog_TCLSH="$TCLSH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_TCLSH="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi TCLSH=$ac_cv_prog_TCLSH if test -n "$TCLSH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TCLSH" >&5 $as_echo "$TCLSH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$TCLSH" && break done test -n "$TCLSH" || TCLSH="tclsh" case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 $as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else pic_mode=default fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else if ${lt_cv_with_aix_soname+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 $as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkgconfigpath="$PKG_CONFIG" test -z "$pkgconfigpath" && pkgconfigpath=NONE if test -n "$docdir"; then docdir="${datadir}/doc/${PACKAGE}" fi XSLTPROC_COMPILE='xsltproc --xinclude -path ".:$(srcdir)"' MAN_COMPILE='$(XSLTPROC_COMPILE) $(srcdir)/common/id.man.xsl' HTML_COMPILE='$(XSLTPROC_COMPILE) $(srcdir)/common/id.htmlhelp.xsl' TKL_COMPILE='$(XSLTPROC_COMPILE) $(srcdir)/common/id.tkl.xsl' PDF_COMPILE='dblatex -P latex.class.options=a4paper,12pt,twoside,openright' # Check whether --with-docbook-dtd was given. if test "${with_docbook_dtd+set}" = set; then : withval=$with_docbook_dtd; if test -f "$withval/docbookx.dtd"; then DTD_DIR=$withval fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for docbookx.dtd" >&5 $as_echo_n "checking for docbookx.dtd... " >&6; } DTD_DIR="" for d in /usr/lib/sgml/dtd/docbook-xml \ /usr/share/sgml/docbook/dtd/4.2 \ /usr/share/sgml/docbook/dtd/xml/4.* \ /usr/share/sgml/docbook/xml-dtd-4.* \ /usr/local/share/xml/docbook/4.* do if test -f $d/docbookx.dtd; then DTD_DIR=$d fi done if test -z "$DTD_DIR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 $as_echo "Not found" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } fi fi # Check whether --with-docbook-dsssl was given. if test "${with_docbook_dsssl+set}" = set; then : withval=$with_docbook_dsssl; if test -f "$withval/html/docbook.dsl"; then DSSSL_DIR=$withval fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for docbook.dsl" >&5 $as_echo_n "checking for docbook.dsl... " >&6; } DSSSL_DIR="" for d in /usr/share/sgml/docbook/stylesheet/dsssl/modular \ /usr/share/sgml/docbook/dsssl-stylesheets-1.* \ /usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh \ /usr/local/share/sgml/docbook/dsssl/modular do if test -f $d/html/docbook.dsl; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } DSSSL_DIR=$d break fi done if test -z "$DSSSL_DIR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 $as_echo "Not found" >&6; } fi fi # Check whether --with-docbook-xsl was given. if test "${with_docbook_xsl+set}" = set; then : withval=$with_docbook_xsl; if test -f "$withval/htmlhelp/htmlhelp.xsl"; then XSL_DIR=$withval fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for htmlhelp.xsl" >&5 $as_echo_n "checking for htmlhelp.xsl... " >&6; } for d in /usr/share/sgml/docbook/stylesheet/xsl/nwalsh \ /usr/local/share/xsl/docbook \ /usr/share/sgml/docbook/xsl-stylesheets-1.* do if test -f $d/htmlhelp/htmlhelp.xsl; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } XSL_DIR=$d break fi done if test -z "$XSL_DIR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 $as_echo "Not found" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac for ac_header in dirent.h fnmatch.h wchar.h locale.h langinfo.h pwd.h unistd.h sys/select.h sys/socket.h sys/stat.h sys/time.h sys/times.h sys/types.h sys/un.h sys/wait.h sys/prctl.h netdb.h arpa/inet.h netinet/tcp.h netinet/in_systm.h execinfo.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in net/if.h netinet/in.h netinet/if_ether.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_SOCKET_H #include #endif #if HAVE_NET_IF_H #include #endif #if HAVE_NETINET_IN_H #include #endif " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi if test "$ac_cv_header_stdc" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your system doesn not seem to support ANSI C" >&5 $as_echo "$as_me: WARNING: Your system doesn not seem to support ANSI C" >&2;} fi ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" if test "x$ac_cv_type_long_long" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LONG_LONG 1 _ACEOF fi checkBoth=0 ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test "$ac_cv_func_connect" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lsocket" >&5 $as_echo_n "checking for main in -lsocket... " >&6; } if ${ac_cv_lib_socket_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_main=yes else ac_cv_lib_socket_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_main" >&5 $as_echo "$ac_cv_lib_socket_main" >&6; } if test "x$ac_cv_lib_socket_main" = xyes; then : LIBS="$LIBS -lsocket" else checkBoth=1 fi fi if test "$checkBoth" = "1"; then oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept" if test "x$ac_cv_func_accept" = xyes; then : else LIBS=$oldLibs fi fi ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lnsl" >&5 $as_echo_n "checking for main in -lnsl... " >&6; } if ${ac_cv_lib_nsl_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_main=yes else ac_cv_lib_nsl_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_main" >&5 $as_echo "$ac_cv_lib_nsl_main" >&6; } if test "x$ac_cv_lib_nsl_main" = xyes; then : LIBS="$LIBS -lnsl" fi fi hiredis=default # Check whether --with-redis was given. if test "${with_redis+set}" = set; then : withval=$with_redis; hiredis=$withval fi if test "$hiredis" != "no" -a "$pkgconfigpath" != "NONE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for redisCommandArgv in -lhiredis" >&5 $as_echo_n "checking for redisCommandArgv in -lhiredis... " >&6; } if ${ac_cv_lib_hiredis_redisCommandArgv+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lhiredis $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char redisCommandArgv (); int main () { return redisCommandArgv (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_hiredis_redisCommandArgv=yes else ac_cv_lib_hiredis_redisCommandArgv=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hiredis_redisCommandArgv" >&5 $as_echo "$ac_cv_lib_hiredis_redisCommandArgv" >&6; } if test "x$ac_cv_lib_hiredis_redisCommandArgv" = xyes; then : HIREDIS_LIBS=-lhiredis fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for redis" >&5 $as_echo_n "checking for redis... " >&6; } if $pkgconfigpath --cflags hiredis >/dev/null 2>&1 ; then if $pkgconfigpath --atleast-version 0.10 hiredis; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } CFLAGS="$CFLAGS `$pkgconfigpath --cflags hiredis`" HIREDIS_LIBS="`$pkgconfigpath --libs hiredis`" $as_echo "#define HAVE_HIREDIS 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no. Version 0.10 required" >&5 $as_echo "no. Version 0.10 required" >&6; } if test "$hiredis" != "default"; then as_fn_error $? "hiredis libraries missing" "$LINENO" 5 fi fi else if test "$ac_cv_lib_hiredis_redisCommandArgv" = "yes"; then $as_echo "#define HAVE_HIREDIS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$hiredis" != "default"; then as_fn_error $? "hiredis libraries missing" "$LINENO" 5 fi fi fi fi memcached=default # Check whether --with-memcached was given. if test "${with_memcached+set}" = set; then : withval=$with_memcached; memcached=$withval fi if test "$memcached" != "no" -a "$pkgconfigpath" != "NONE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libmemcached" >&5 $as_echo_n "checking for libmemcached... " >&6; } if $pkgconfigpath --cflags libmemcached >/dev/null 2>&1 ; then if $pkgconfigpath --atleast-version 0.40 libmemcached; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } CFLAGS="$CFLAGS `$pkgconfigpath --cflags libmemcached`" MEMCACHED_LIBS="`$pkgconfigpath --libs libmemcached`" $as_echo "#define HAVE_LIBMEMCACHED 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no. Version 0.40 required" >&5 $as_echo "no. Version 0.40 required" >&6; } if test "$memcached" != "default"; then as_fn_error $? "libmemcached libraries missing" "$LINENO" 5 fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$memcached" != "default"; then as_fn_error $? "libmemcached libraries missing" "$LINENO" 5 fi fi fi gnutls=default # Check whether --with-gnutls was given. if test "${with_gnutls+set}" = set; then : withval=$with_gnutls; gnutls=$withval fi if test "$gnutls" != "no"; then gnutlsver=no if test "$gnutls" != "yes" -a "$gnutls" != "default"; then if test -x $gnutls/bin/pkg-config; then if $gnutls/bin/pkg-config --exists gnutls; then SSL_CFLAGS=`$gnutls/bin/pkg-config --cflags gnutls` SSL_LIBS="`$gnutls/bin/pkg-config --libs gnutls`" gnutlsver=`$gnutls/bin/pkg-config --modversion gnutls` fi fi else if test "$pkgconfigpath" != "NONE"; then if $pkgconfigpath --exists gnutls; then SSL_CFLAGS=`$pkgconfigpath --cflags gnutls` SSL_LIBS="`$pkgconfigpath --libs gnutls`" gnutlsver=`$pkgconfigpath --modversion gnutls` fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU TLS" >&5 $as_echo_n "checking for GNU TLS... " >&6; } if test "$gnutlsver" != "no"; then $as_echo "#define HAVE_GNUTLS_H 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnutlsver" >&5 $as_echo "$gnutlsver" >&6; } else SSL_CFLAGS="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: None" >&5 $as_echo "None" >&6; } if test "$gnutls" != "default"; then as_fn_error $? "GNU TLS development libraries missing" "$LINENO" 5 fi fi fi READLINE_SHARED_LIBADD="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 $as_echo_n "checking for tgetent in -lncurses... " >&6; } if ${ac_cv_lib_ncurses_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ncurses_tgetent=yes else ac_cv_lib_ncurses_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 $as_echo "$ac_cv_lib_ncurses_tgetent" >&6; } if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then : READLINE_SHARED_LIBADD="-lncurses" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 $as_echo_n "checking for tgetent in -ltermcap... " >&6; } if ${ac_cv_lib_termcap_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltermcap $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_termcap_tgetent=yes else ac_cv_lib_termcap_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 $as_echo "$ac_cv_lib_termcap_tgetent" >&6; } if test "x$ac_cv_lib_termcap_tgetent" = xyes; then : READLINE_SHARED_LIBADD="-ltermcap" fi fi READLINE_LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } if ${ac_cv_lib_readline_readline+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline $READLINE_SHARED_LIBADD $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else ac_cv_lib_readline_readline=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } if test "x$ac_cv_lib_readline_readline" = xyes; then : READLINE_LIBS="$READLINE_LIBS -lreadline $READLINE_SHARED_LIBADD" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for add_history in -lhistory" >&5 $as_echo_n "checking for add_history in -lhistory... " >&6; } if ${ac_cv_lib_history_add_history+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lhistory $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char add_history (); int main () { return add_history (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_history_add_history=yes else ac_cv_lib_history_add_history=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_history_add_history" >&5 $as_echo "$ac_cv_lib_history_add_history" >&6; } if test "x$ac_cv_lib_history_add_history" = xyes; then : READLINE_LIBS="$READLINE_LIBS -lhistory" fi if test "$ac_cv_lib_readline_readline" = "yes"; then for ac_header in readline/readline.h readline/history.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done xLIBS=$LIBS LIBS="$LIBS $READLINE_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { rl_attempted_completion_over = 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_READLINE_COMPLETION_OVER 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { rl_completion_matches (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_READLINE_RL_COMPLETION_MATCHES 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$xLIBS fi # Check whether --with-iconv was given. if test "${with_iconv+set}" = set; then : withval=$with_iconv; fi if test "$with_iconv" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } oldLIBS="$LIBS" oldCPPFLAGS="${CPPFLAGS}" if test "$with_iconv" != "yes" -a "$with_iconv" != ""; then LIBS="$LIBS -L${with_iconv}/lib" CPPFLAGS="${CPPFLAGS} -I${with_iconv}/include" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { iconv_t t = iconv_open("", ""); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_ICONV_H 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else LIBS="$LIBS -liconv" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { iconv_t t = iconv_open("", ""); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_ICONV_H 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else LIBS="$oldLIBS" CPPFLAGS="$oldCPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi for ac_func in getaddrinfo vsnprintf gettimeofday poll strerror_r localtime_r usleep fopen64 open_memstream malloc_info do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done case $host in *-*-darwin*) trypoll="no"; ;; *) trypoll="yes"; ;; esac if test "$ac_cv_func_poll" = "yes" -a "$trypoll" = "yes"; then for ac_header in sys/poll.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/poll.h" "ac_cv_header_sys_poll_h" "$ac_includes_default" if test "x$ac_cv_header_sys_poll_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_POLL_H 1 _ACEOF fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 $as_echo_n "checking for socklen_t... " >&6; } if ${ac_cv_check_socklen_t+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_check_socklen_t='' cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif #define try 1 #ifdef AIX #if AIX >= 51 #define try 0 #endif #endif #if try extern int accept(int, struct sockaddr *, socklen_t *); #endif #ifdef __cplusplus } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_check_socklen_t=socklen_t else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif #define try 1 #ifdef AIX #if AIX >= 42 #define try 0 #endif #endif #if try extern int accept(int, struct sockaddr *, size_t t *); #endif #ifdef __cplusplus } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_check_socklen_t=size_t else ac_cv_check_socklen_t=int fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_check_socklen_t" >&5 $as_echo "$ac_cv_check_socklen_t" >&6; } cat >>confdefs.h <<_ACEOF #define YAZ_SOCKLEN_T $ac_cv_check_socklen_t _ACEOF # Check whether --enable-tcpd was given. if test "${enable_tcpd+set}" = set; then : enableval=$enable_tcpd; fi if test "$enable_tcpd" -a "$enable_tcpd" != "no"; then oldLibs=$LIBS oldCPPFLAGS=$CPPFLAGS if test "$enable_tcpd" != "yes"; then LIBS="$LIBS -L$enable_tcpd/lib" CPPFLAGS="$CPPFLAGS -I$enable_tcpd/include" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working tcpd.h" >&5 $as_echo_n "checking for working tcpd.h... " >&6; } LIBS="$LIBS -lwrap" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int allow_severity = LOG_INFO; int deny_severity = LOG_WARNING; int main () { struct request_info request_info; int i; i = hosts_access(&request_info); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcpd_ok=1 else tcpd_ok=0 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$oldLibs if test "$tcpd_ok" = "0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "tcpd development libraries missing" "$LINENO" 5 CPPFLAGS=$oldCPPFLAGS else TCPD_LIBS="-lwrap" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_TCPD_H 1" >>confdefs.h fi fi HAVETHREADS=0 # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; enable_threads=$enableval else enable_threads=yes fi if test "$enable_threads" = "yes" -a "$HAVETHREADS" = "0"; then ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_acx_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$acx_pthread_config"; then ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_acx_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" fi fi acx_pthread_config=$ac_cv_prog_acx_pthread_config if test -n "$acx_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 $as_echo "$acx_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr=$attr; return attr; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : attr_name=$attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 $as_echo "$attr_name" >&6; } if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $attr_name _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 $as_echo "${flag}" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then for ac_prog in xlc_r cc_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" else PTHREAD_CC=$CC fi else PTHREAD_CC="$CC" fi # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then OCFLAGS=$CFLAGS CFLAGS="$CFLAGS $PTHREAD_CFLAGS" if test "x$PTHREAD_LIBS" = "x"; then OLIBS=$LIBS for lib in -lpthread -lpthreads -lc_r; do LIBS="$lib $OLIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t id; pthread_join(id, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : PTHREAD_LIBS=$lib; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS=$OLIBS fi LIBS="$LIBS $PTHREAD_LIBS" $as_echo "#define YAZ_POSIX_THREADS 1" >>confdefs.h YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_POSIX_THREADS=1" : else acx_pthread_ok=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi xml_enabled=false # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_pkgconfigpath+:} false; then : $as_echo_n "(cached) " >&6 else case $pkgconfigpath in [\\/]* | ?:[\\/]*) ac_cv_path_pkgconfigpath="$pkgconfigpath" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_pkgconfigpath="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_pkgconfigpath" && ac_cv_path_pkgconfigpath="NONE" ;; esac fi pkgconfigpath=$ac_cv_path_pkgconfigpath if test -n "$pkgconfigpath"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfigpath" >&5 $as_echo "$pkgconfigpath" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi pkgmodule="" xml2dir=default XML2_VER="" # Check whether --with-xml2 was given. if test "${with_xml2+set}" = set; then : withval=$with_xml2; xml2dir=$withval fi if test "$xml2dir" = "yes" -o "$xml2dir" = "default"; then if test "$pkgconfigpath" != "NONE"; then if $pkgconfigpath --exists libxml-2.0; then pkgmodule="libxml-2.0" fi fi if test -z "$pkgmodule"; then for d in /usr /usr/local; do if test -x $d/bin/xml2-config; then xml2dir=$d fi done fi fi if test "$xml2dir" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libXML2" >&5 $as_echo_n "checking for libXML2... " >&6; } if test "$pkgmodule"; then XML2_LIBS=`$pkgconfigpath --libs $pkgmodule` XML2_CFLAGS=`$pkgconfigpath --cflags $pkgmodule` XML2_VER=`$pkgconfigpath --modversion $pkgmodule` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XML2_VER" >&5 $as_echo "$XML2_VER" >&6; } $as_echo "#define YAZ_HAVE_XML2 1" >>confdefs.h YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_XML2=1" xml_enabled=true elif test -x $xml2dir/bin/xml2-config; then XML2_LIBS=`$xml2dir/bin/xml2-config --libs` XML2_CFLAGS=`$xml2dir/bin/xml2-config --cflags` XML2_VER=`$xml2dir/bin/xml2-config --version` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XML2_VER" >&5 $as_echo "$XML2_VER" >&6; } $as_echo "#define YAZ_HAVE_XML2 1" >>confdefs.h YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_XML2=1" xml_enabled=true else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 $as_echo "Not found" >&6; } if test "$xml2dir" = "default"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libxml2 development libraries not found." >&5 $as_echo "$as_me: WARNING: libxml2 development libraries not found." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: There will be no support for SRU." >&5 $as_echo "$as_me: WARNING: There will be no support for SRU." >&2;} else as_fn_error $? "libxml2 development libraries not found." "$LINENO" 5 fi fi XML2_LIBS=`echo $XML2_LIBS|sed 's@-./usr/lib @@g'` fi if test "$xml_enabled" = "true"; then pkgmodule="" xsltdir=default yaz_xslt_pkgconfig=no XSLT_VER="" # Check whether --with-xslt was given. if test "${with_xslt+set}" = set; then : withval=$with_xslt; xsltdir=$withval fi if test "$xsltdir" = "yes" -o "$xsltdir" = "default"; then if test "$pkgconfigpath" != "NONE"; then # pkg-config on woody reports bad CFLAGS which does # not include libxml2 CFLAGS, so avoid it.. if $pkgconfigpath --atleast-version 1.1.0 libxslt; then pkgmodule="libxslt" fi fi if test -z "$pkgmodule"; then for d in /usr /usr/local; do if test -x $d/bin/xslt-config; then xsltdir=$d fi done fi fi if test "$xsltdir" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libXSLT" >&5 $as_echo_n "checking for libXSLT... " >&6; } if test "$pkgmodule"; then XML2_LIBS=`$pkgconfigpath --libs $pkgmodule` XML2_CFLAGS=`$pkgconfigpath --cflags $pkgmodule` XSLT_VER=`$pkgconfigpath --modversion $pkgmodule` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLT_VER" >&5 $as_echo "$XSLT_VER" >&6; } $as_echo "#define YAZ_HAVE_XSLT 1" >>confdefs.h YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_XSLT=1" yaz_xslt_pkgconfig=yes elif test -x $xsltdir/bin/xslt-config; then XML2_LIBS=`$xsltdir/bin/xslt-config --libs` XML2_CFLAGS=`$xsltdir/bin/xslt-config --cflags` XSLT_VER=`$xsltdir/bin/xslt-config --version` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLT_VER" >&5 $as_echo "$XSLT_VER" >&6; } $as_echo "#define YAZ_HAVE_XSLT 1" >>confdefs.h YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_XSLT=1" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 $as_echo "Not found" >&6; } if test "$xsltdir" = "default"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libXSLT development libraries not found." >&5 $as_echo "$as_me: WARNING: libXSLT development libraries not found." >&2;} else as_fn_error $? "libXSLT development libraries not found." "$LINENO" 5 fi fi XML2_LIBS=`echo $XML2_LIBS|sed 's@-./usr/lib @@g'` fi exsltdir=default pkgmodule="" EXSLT_VER="" # Check whether --with-exslt was given. if test "${with_exslt+set}" = set; then : withval=$with_exslt; exsltdir=$withval fi if test "$exsltdir" = "yes" -o "$exsltdir" = "default"; then if test "$pkgconfigpath" != "NONE"; then if $pkgconfigpath --exists libexslt; then pkgmodule="libexslt" fi fi fi if test "$exsltdir" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libEXSLT" >&5 $as_echo_n "checking for libEXSLT... " >&6; } if test "$pkgmodule"; then if test "$yaz_xslt_pkgconfig" != "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabled. Libxslt is not pkg-config configured" >&5 $as_echo "Disabled. Libxslt is not pkg-config configured" >&6; } else XML2_LIBS=`$pkgconfigpath --libs $pkgmodule` XML2_CFLAGS=`$pkgconfigpath --cflags $pkgmodule` EXSLT_VER=`$pkgconfigpath --modversion $pkgmodule` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXSLT_VER" >&5 $as_echo "$EXSLT_VER" >&6; } $as_echo "#define YAZ_HAVE_EXSLT 1" >>confdefs.h YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_EXSLT=1" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 $as_echo "Not found" >&6; } if test "$pkgconfigpath" = "NONE"; then extra="libEXSLT not enabled. pkg-config not found." else extra="libEXSLT development libraries not found." fi if test "$exsltdir" = "default"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $extra" >&5 $as_echo "$as_me: WARNING: $extra" >&2;} else as_fn_error $? "$extra" "$LINENO" 5 fi fi fi OLIBS=$LIBS LIBS="$LIBS $XML2_LIBS" for ac_func in xsltSaveResultToString do : ac_fn_c_check_func "$LINENO" "xsltSaveResultToString" "ac_cv_func_xsltSaveResultToString" if test "x$ac_cv_func_xsltSaveResultToString" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_XSLTSAVERESULTTOSTRING 1 _ACEOF fi done LIBS=$OLIBS fi YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS $XML2_CFLAGS" if test "$XML2_LIBS"; then LIBS="$XML2_LIBS $LIBS" fi icudir=default # Check whether --with-icu was given. if test "${with_icu+set}" = set; then : withval=$with_icu; icudir=$withval fi if test "$icudir" != "no"; then if test "$icudir" = "yes" -o "$icudir" = "default"; then # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_pkgconfigpath+:} false; then : $as_echo_n "(cached) " >&6 else case $pkgconfigpath in [\\/]* | ?:[\\/]*) ac_cv_path_pkgconfigpath="$pkgconfigpath" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_pkgconfigpath="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_pkgconfigpath" && ac_cv_path_pkgconfigpath="NONE" ;; esac fi pkgconfigpath=$ac_cv_path_pkgconfigpath if test -n "$pkgconfigpath"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfigpath" >&5 $as_echo "$pkgconfigpath" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -x $pkgconfigpath; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icu-i18n via pkg-config" >&5 $as_echo_n "checking for icu-i18n via pkg-config... " >&6; } if $pkgconfigpath --exists icu-i18n; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } ICU_VERSION=`$pkgconfigpath --modversion icu-i18n` ICU_CPPFLAGS="" ICU_CFLAGS=`$pkgconfigpath --cflags icu-i18n` ICU_LIBS=`$pkgconfigpath --libs icu-i18n` else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi fi fi if test -z "$ICU_VERSION"; then if test "$icudir" = "yes" -o "$icudir" = "default"; then # Extract the first word of "icu-config", so it can be a program name with args. set dummy icu-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ICU_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ICU_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ICU_CONFIG="$ICU_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ICU_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_ICU_CONFIG" && ac_cv_path_ICU_CONFIG="NONE" ;; esac fi ICU_CONFIG=$ac_cv_path_ICU_CONFIG if test -n "$ICU_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICU_CONFIG" >&5 $as_echo "$ICU_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else ICU_CONFIG=${icudir}/bin/icu-config fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking $ICU_CONFIG" >&5 $as_echo_n "checking $ICU_CONFIG... " >&6; } if test -x "$ICU_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } ICU_VERSION=`$ICU_CONFIG --version` ICU_PREFIX=`$ICU_CONFIG --prefix` ICU_CPPFLAGS=`$ICU_CONFIG --cppflags-searchpath`"" if test "$ICU_PREFIX" = "/usr"; then ICU_CPPFLAGS=`echo $ICU_CPPFLAGS|sed 's@-I/usr/include@@'` fi ICU_CFLAGS=`$ICU_CONFIG --cflags` if test "$ICU_PREFIX" = "/usr"; then ICU_LIBS=`$ICU_CONFIG --ldflags-libsonly` else ICU_LIBS=`$ICU_CONFIG --ldflags` fi case $host_os in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _fini in -lCrun" >&5 $as_echo_n "checking for _fini in -lCrun... " >&6; } if ${ac_cv_lib_Crun__fini+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lCrun $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char _fini (); int main () { return _fini (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Crun__fini=yes else ac_cv_lib_Crun__fini=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Crun__fini" >&5 $as_echo "$ac_cv_lib_Crun__fini" >&6; } if test "x$ac_cv_lib_Crun__fini" = xyes; then : ICU_LIBS="$ICU_LIBS -lCrun" fi ;; esac else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi fi if test -n "$ICU_VERSION"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICU >= 3.4" >&5 $as_echo_n "checking for ICU >= 3.4... " >&6; } VERSION_CHECK=`expr $ICU_VERSION \>\= 3.4` if test "$VERSION_CHECK" = "1" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICU_VERSION" >&5 $as_echo "$ICU_VERSION" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: can not find ICU >= 3.4" >&5 $as_echo "can not find ICU >= 3.4" >&6; } ICU_CPPFLAGS="" ICU_CFLAGS="" ICU_LIBS="" ICU_VERSION="" fi fi if test -z "$ICU_VERSION"; then if test "$icudir" != "default"; then as_fn_error $? "libicu development libraries not found." "$LINENO" 5 fi fi fi if test -n "$ICU_VERSION"; then if test "$xml_enabled" = "true"; then ICU_CPPFLAGS="$ICU_CPPFLAGS -D YAZ_HAVE_ICU=1" else ICU_CPPFLAGS="" { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ICU support disabled because XML support is unavailable" >&5 $as_echo "$as_me: WARNING: ICU support disabled because XML support is unavailable" >&2;} fi else : fi WIN_FILEVERSION=`echo $PACKAGE_VERSION | $AWK 'BEGIN { FS = "."; } { m = $4; printf("%d,%d,%d,%d", $1, $2, $3 == "" ? "0" : $3, $4 == "" ? "1" : $4);}'` VERSION_HEX=`echo $PACKAGE_VERSION | $AWK 'BEGIN { FS = "."; } { printf("%x", ($1 * 256 + $2) * 256 + $3);}'` if test -d ${srcdir}/.git; then VERSION_SHA1=`git show --pretty=format:%H|head -1` else VERSION_SHA1=`head -1 ${srcdir}/ChangeLog|awk '{print $2}'` fi ac_config_files="$ac_config_files Makefile src/Makefile test/Makefile util/Makefile include/Makefile include/yaz/Makefile client/Makefile ztest/Makefile zoom/Makefile doc/Makefile doc/local0.ent doc/common/Makefile doc/common/print.dsl etc/Makefile yaz-config yaz.pc Doxyfile win/version.nsi include/yaz/yaz-version.h" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by yaz $as_me 5.28.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ yaz config.status 5.28.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/yaz/Makefile") CONFIG_FILES="$CONFIG_FILES include/yaz/Makefile" ;; "client/Makefile") CONFIG_FILES="$CONFIG_FILES client/Makefile" ;; "ztest/Makefile") CONFIG_FILES="$CONFIG_FILES ztest/Makefile" ;; "zoom/Makefile") CONFIG_FILES="$CONFIG_FILES zoom/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/local0.ent") CONFIG_FILES="$CONFIG_FILES doc/local0.ent" ;; "doc/common/Makefile") CONFIG_FILES="$CONFIG_FILES doc/common/Makefile" ;; "doc/common/print.dsl") CONFIG_FILES="$CONFIG_FILES doc/common/print.dsl" ;; "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; "yaz-config") CONFIG_FILES="$CONFIG_FILES yaz-config" ;; "yaz.pc") CONFIG_FILES="$CONFIG_FILES yaz.pc" ;; "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; "win/version.nsi") CONFIG_FILES="$CONFIG_FILES win/version.nsi" ;; "include/yaz/yaz-version.h") CONFIG_FILES="$CONFIG_FILES include/yaz/yaz-version.h" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "default":C) sed s%echo_source=yes%echo_source=no%g < yaz-config > util/yaz-config && chmod +x yaz-config util/yaz-config diff doc/local.ent doc/local0.ent >/dev/null 2>/dev/null \ || cp doc/local0.ent doc/local.ent ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo \ "------------------------------------------------------------------------ Configuration: YAZ Package: ${PACKAGE} YAZ Version: ${VERSION} Bugreport: ${PACKAGE_BUGREPORT} Source code location: ${srcdir} C Preprocessor: ${CPP} C Preprocessor flags: ${CPPFLAGS} C Compiler: ${CC} C Compiler flags: ${CFLAGS} Linker flags: ${LDFLAGS} Linked libs: ${LIBS} Host System Type: ${host} Install path: ${prefix} Automake: ${AUTOMAKE} Archiver: ${AR} Ranlib: ${RANLIB} ------------------------------------------------------------------------" yaz-5.28.0/configure.ac0000644000175000017500000003214213265142510011621 00000000000000dnl This file is part of the YAZ toolkit. dnl Copyright (C) Index Data dnl See the file LICENSE for details. AC_PREREQ([2.60]) AC_INIT([yaz], m4_esyscmd([. ./IDMETA; printf $VERSION]), [yaz-help@indexdata.dk]) AC_CONFIG_HEADERS(include/config.h) AC_CONFIG_SRCDIR([configure.ac]) AC_CONFIG_AUX_DIR([config]) AM_INIT_AUTOMAKE([1.9 subdir-objects]) dnl AC_SUBST([READLINE_LIBS]) AC_SUBST([YAZ_CONF_CFLAGS]) dnl ------ Checking programs AC_PROG_CC AC_PROG_CPP AC_CHECK_PROGS([YACC], 'bison -y') test -z "$YACC" -a ! -f src/cql.c && AC_MSG_ERROR([GNU Bison not found]) test -z "$YACC" && AC_MSG_WARN([GNU Bison not found]) AC_CHECK_PROGS([TCLSH], [tclsh tclsh8.5 tclsh8.4 tclsh8.3 tclsh8.2], [tclsh]) AC_PROG_INSTALL AM_PROG_LIBTOOL AM_PROG_CC_C_O PKG_PROG_PKG_CONFIG pkgconfigpath="$PKG_CONFIG" test -z "$pkgconfigpath" && pkgconfigpath=NONE dnl YAZ_DOC dnl dnl AC_C_BIGENDIAN AC_CHECK_HEADERS([dirent.h fnmatch.h wchar.h locale.h langinfo.h pwd.h unistd.h sys/select.h sys/socket.h sys/stat.h sys/time.h sys/times.h sys/types.h sys/un.h sys/wait.h sys/prctl.h netdb.h arpa/inet.h netinet/tcp.h netinet/in_systm.h execinfo.h],[],[],[]) AC_CHECK_HEADERS([net/if.h netinet/in.h netinet/if_ether.h],[],[],[ #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_SOCKET_H #include #endif #if HAVE_NET_IF_H #include #endif #if HAVE_NETINET_IN_H #include #endif ]) AC_HEADER_STDC if test "$ac_cv_header_stdc" = "no"; then AC_MSG_WARN([Your system doesn not seem to support ANSI C]) fi dnl ----- Types AC_CHECK_TYPES([long long]) dnl dnl ----- Sockets checkBoth=0 AC_CHECK_FUNC([connect]) if test "$ac_cv_func_connect" = "no"; then AC_CHECK_LIB([socket],[main], LIBS="$LIBS -lsocket", checkBoth=1) fi if test "$checkBoth" = "1"; then oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC([accept], , [LIBS=$oldLibs]) fi AC_CHECK_FUNC([gethostbyname], ,[AC_CHECK_LIB(nsl, main, [LIBS="$LIBS -lnsl"])]) dnl dnl ------ redis hiredis=default AC_SUBST([HIREDIS_LIBS]) AC_ARG_WITH([redis], [ --with-redis hiredis library], [hiredis=$withval]) if test "$hiredis" != "no" -a "$pkgconfigpath" != "NONE"; then AC_CHECK_LIB([hiredis],[redisCommandArgv],[HIREDIS_LIBS=-lhiredis]) AC_MSG_CHECKING([for redis]) if $pkgconfigpath --cflags hiredis >/dev/null 2>&1 ; then if $pkgconfigpath --atleast-version 0.10 hiredis; then AC_MSG_RESULT([yes]) CFLAGS="$CFLAGS `$pkgconfigpath --cflags hiredis`" HIREDIS_LIBS="`$pkgconfigpath --libs hiredis`" AC_DEFINE([HAVE_HIREDIS],[1],[Define to 1 if hiredis is enabled]) else AC_MSG_RESULT([no. Version 0.10 required]) if test "$hiredis" != "default"; then AC_MSG_ERROR([hiredis libraries missing]) fi fi else if test "$ac_cv_lib_hiredis_redisCommandArgv" = "yes"; then AC_DEFINE([HAVE_HIREDIS],[1]) AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) if test "$hiredis" != "default"; then AC_MSG_ERROR([hiredis libraries missing]) fi fi fi fi dnl ------ memcached memcached=default AC_SUBST([MEMCACHED_LIBS]) AC_ARG_WITH([memcached], [ --with-memcached Memcached library], [memcached=$withval]) if test "$memcached" != "no" -a "$pkgconfigpath" != "NONE"; then AC_MSG_CHECKING([for libmemcached]) if $pkgconfigpath --cflags libmemcached >/dev/null 2>&1 ; then if $pkgconfigpath --atleast-version 0.40 libmemcached; then AC_MSG_RESULT([yes]) CFLAGS="$CFLAGS `$pkgconfigpath --cflags libmemcached`" MEMCACHED_LIBS="`$pkgconfigpath --libs libmemcached`" AC_DEFINE([HAVE_LIBMEMCACHED],[1],[Define to 1 if memcached is enabled]) else AC_MSG_RESULT([no. Version 0.40 required]) if test "$memcached" != "default"; then AC_MSG_ERROR([libmemcached libraries missing]) fi fi else AC_MSG_RESULT([no]) if test "$memcached" != "default"; then AC_MSG_ERROR([libmemcached libraries missing]) fi fi fi dnl dnl dnl dnl ------ GNU TLS AC_SUBST([SSL_CFLAGS]) AC_SUBST([SSL_LIBS]) gnutls=default AC_ARG_WITH([gnutls], [ --with-gnutls[=PREFIX] GNU TLS library in PREFIX], [gnutls=$withval]) if test "$gnutls" != "no"; then gnutlsver=no if test "$gnutls" != "yes" -a "$gnutls" != "default"; then if test -x $gnutls/bin/pkg-config; then if $gnutls/bin/pkg-config --exists gnutls; then SSL_CFLAGS=`$gnutls/bin/pkg-config --cflags gnutls` SSL_LIBS="`$gnutls/bin/pkg-config --libs gnutls`" gnutlsver=`$gnutls/bin/pkg-config --modversion gnutls` fi fi else if test "$pkgconfigpath" != "NONE"; then if $pkgconfigpath --exists gnutls; then SSL_CFLAGS=`$pkgconfigpath --cflags gnutls` SSL_LIBS="`$pkgconfigpath --libs gnutls`" gnutlsver=`$pkgconfigpath --modversion gnutls` fi fi fi AC_MSG_CHECKING([for GNU TLS]) if test "$gnutlsver" != "no"; then AC_DEFINE([HAVE_GNUTLS_H],[1],[Define to 1 if GNUTLS is present]) AC_MSG_RESULT([$gnutlsver]) else SSL_CFLAGS="" AC_MSG_RESULT([None]) if test "$gnutls" != "default"; then AC_MSG_ERROR([GNU TLS development libraries missing]) fi fi fi dnl dnl ------ GNU Readline READLINE_SHARED_LIBADD="" AC_CHECK_LIB([ncurses],[tgetent],[READLINE_SHARED_LIBADD="-lncurses"], AC_CHECK_LIB([termcap],[tgetent],[READLINE_SHARED_LIBADD="-ltermcap"]) ) READLINE_LIBS="" AC_CHECK_LIB([readline],[readline],[READLINE_LIBS="$READLINE_LIBS -lreadline $READLINE_SHARED_LIBADD"],,$READLINE_SHARED_LIBADD) AC_CHECK_LIB([history],[add_history],[READLINE_LIBS="$READLINE_LIBS -lhistory"]) if test "$ac_cv_lib_readline_readline" = "yes"; then AC_CHECK_HEADERS([readline/readline.h readline/history.h]) xLIBS=$LIBS LIBS="$LIBS $READLINE_LIBS" AC_TRY_LINK([ #include #include ],[ rl_attempted_completion_over = 0; ],AC_DEFINE([HAVE_READLINE_COMPLETION_OVER],1,[Define to 1 if rl_attempted_completion_over is defined])) AC_TRY_LINK([ #include #include ],[ rl_completion_matches (0, 0); ],[AC_DEFINE([HAVE_READLINE_RL_COMPLETION_MATCHES],1,[Define to 1 if rl_completion_matches is defined])]) LIBS=$xLIBS fi dnl ------ iconv AC_ARG_WITH([iconv],[ --with-iconv[=PREFIX] iconv library in PREFIX]) if test "$with_iconv" != "no"; then AC_MSG_CHECKING([for iconv]) oldLIBS="$LIBS" oldCPPFLAGS="${CPPFLAGS}" if test "$with_iconv" != "yes" -a "$with_iconv" != ""; then LIBS="$LIBS -L${with_iconv}/lib" CPPFLAGS="${CPPFLAGS} -I${with_iconv}/include" fi AC_TRY_LINK([ #include ],[ iconv_t t = iconv_open("", ""); ],[ AC_DEFINE([HAVE_ICONV_H],1,[Define to 1 if iconv.h is present]) AC_MSG_RESULT([yes]) ],[ LIBS="$LIBS -liconv" AC_TRY_LINK([ #include ],[ iconv_t t = iconv_open("", ""); ],[ AC_DEFINE([HAVE_ICONV_H],1) AC_MSG_RESULT([yes]) ],[ LIBS="$oldLIBS" CPPFLAGS="$oldCPPFLAGS" AC_MSG_RESULT([no]) ]) ]) fi dnl ------ various functions AC_CHECK_FUNCS([getaddrinfo vsnprintf gettimeofday poll strerror_r localtime_r usleep fopen64 open_memstream malloc_info]) case $host in *-*-darwin*) trypoll="no"; ;; *) trypoll="yes"; ;; esac if test "$ac_cv_func_poll" = "yes" -a "$trypoll" = "yes"; then AC_CHECK_HEADERS([sys/poll.h]) fi dnl ------ socklen_t dnl We check for socklen_t by making prototypes with the dnl various types. First socklen_t, then size_t, finally int. dnl If the prototype succeeds, we are probably safe. dnl That works if accept is not preprocessor defined (such sa AIX) AC_MSG_CHECKING([for socklen_t]) AC_CACHE_VAL(ac_cv_check_socklen_t,[ac_cv_check_socklen_t='' AC_TRY_COMPILE([ #include #include #ifdef __cplusplus extern "C" { #endif #define try 1 #ifdef AIX #if AIX >= 51 #define try 0 #endif #endif #if try extern int accept(int, struct sockaddr *, socklen_t *); #endif #ifdef __cplusplus } #endif ],,[ac_cv_check_socklen_t=socklen_t],[ AC_TRY_COMPILE([ #include #include #ifdef __cplusplus extern "C" { #endif #define try 1 #ifdef AIX #if AIX >= 42 #define try 0 #endif #endif #if try extern int accept(int, struct sockaddr *, size_t t *); #endif #ifdef __cplusplus } #endif ],,[ac_cv_check_socklen_t=size_t],[ac_cv_check_socklen_t=int]) ]) ]) AC_MSG_RESULT([$ac_cv_check_socklen_t]) AC_DEFINE_UNQUOTED([YAZ_SOCKLEN_T],[$ac_cv_check_socklen_t],[socklen_t type]) dnl dnl ------ tcpd AC_ARG_ENABLE([tcpd],[ --enable-tcpd[=PREFIX] enable TCP wrapper for server if available]) if test "$enable_tcpd" -a "$enable_tcpd" != "no"; then oldLibs=$LIBS oldCPPFLAGS=$CPPFLAGS if test "$enable_tcpd" != "yes"; then LIBS="$LIBS -L$enable_tcpd/lib" CPPFLAGS="$CPPFLAGS -I$enable_tcpd/include" fi AC_MSG_CHECKING([for working tcpd.h]) LIBS="$LIBS -lwrap" AC_TRY_LINK([#include #include int allow_severity = LOG_INFO; int deny_severity = LOG_WARNING;], [struct request_info request_info; int i; i = hosts_access(&request_info);], tcpd_ok=1, tcpd_ok=0) LIBS=$oldLibs if test "$tcpd_ok" = "0"; then AC_MSG_RESULT([no]) AC_MSG_ERROR([tcpd development libraries missing]) CPPFLAGS=$oldCPPFLAGS else TCPD_LIBS="-lwrap" AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_TCPD_H],1,[Define to 1 if tcp wrap library is present]) fi fi AC_SUBST([TCPD_LIBS]) dnl AC_SUBST([YAZ_CONFIG_CFLAGS]) dnl dnl ------ POSIX Threads HAVETHREADS=0 AC_ARG_ENABLE([threads],[ --disable-threads disable POSIX threads],[enable_threads=$enableval],[enable_threads=yes]) if test "$enable_threads" = "yes" -a "$HAVETHREADS" = "0"; then ACX_PTHREAD([ OCFLAGS=$CFLAGS CFLAGS="$CFLAGS $PTHREAD_CFLAGS" dnl unfortunately empty thread lib spec is problematic because dnl 'yaz-config --cflags' is not always passed to linker in dnl applications using YAZ (such as Zebra). if test "x$PTHREAD_LIBS" = "x"; then OLIBS=$LIBS for lib in -lpthread -lpthreads -lc_r; do LIBS="$lib $OLIBS" AC_TRY_LINK([ #include ], [ pthread_t id; pthread_join(id, 0); ], [ PTHREAD_LIBS=$lib; break ] ) done LIBS=$OLIBS fi LIBS="$LIBS $PTHREAD_LIBS" AC_DEFINE(YAZ_POSIX_THREADS,1,[Define to 1 if POSIX threads is present]) YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_POSIX_THREADS=1" ]) fi dnl ----- libXSLT/libEXLT/libXML2 AC_SUBST([XML2_CFLAGS]) xml_enabled=false YAZ_LIBXML2([ AC_DEFINE(YAZ_HAVE_XML2,1,[Define to 1 if Libxml2 is present]) YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_XML2=1" xml_enabled=true ]) if test "$xml_enabled" = "true"; then YAZ_LIBXSLT([ AC_DEFINE(YAZ_HAVE_XSLT,1,[Define to 1 if Libxslt is present]) YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_XSLT=1" ]) YAZ_LIBEXSLT([ AC_DEFINE(YAZ_HAVE_EXSLT,1,[Define to 1 if EXSLT is present]) YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_EXSLT=1" ]) fi YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS $XML2_CFLAGS" if test "$XML2_LIBS"; then LIBS="$XML2_LIBS $LIBS" fi dnl dnl AC_CHECK_ICU([3.4],[ if test "$xml_enabled" = "true"; then ICU_CPPFLAGS="$ICU_CPPFLAGS -D YAZ_HAVE_ICU=1" else ICU_CPPFLAGS="" AC_MSG_WARN([ICU support disabled because XML support is unavailable]) fi ]) dnl ------ versioning dnl WIN_FILEVERSION=`echo $PACKAGE_VERSION | $AWK 'BEGIN { FS = "."; } { m = $4; printf("%d,%d,%d,%d", $1, $2, $3 == "" ? "0" : $3, $4 == "" ? "1" : $4);}'` AC_SUBST([WIN_FILEVERSION]) VERSION_HEX=`echo $PACKAGE_VERSION | $AWK 'BEGIN { FS = "."; } { printf("%x", ($1 * 256 + $2) * 256 + $3);}'` AC_SUBST([VERSION_HEX]) if test -d ${srcdir}/.git; then VERSION_SHA1=`git show --pretty=format:%H|head -1` else VERSION_SHA1=`head -1 ${srcdir}/ChangeLog|awk '{print $2}'` fi AC_SUBST([VERSION_SHA1]) dnl dnl ------ Makefiles dnl AC_OUTPUT([ Makefile src/Makefile test/Makefile util/Makefile include/Makefile include/yaz/Makefile client/Makefile ztest/Makefile zoom/Makefile doc/Makefile doc/local0.ent doc/common/Makefile doc/common/print.dsl etc/Makefile yaz-config yaz.pc Doxyfile win/version.nsi include/yaz/yaz-version.h ],[ sed s%echo_source=yes%echo_source=no%g < yaz-config > util/yaz-config && chmod +x yaz-config util/yaz-config diff doc/local.ent doc/local0.ent >/dev/null 2>/dev/null \ || cp doc/local0.ent doc/local.ent ] ) echo \ "------------------------------------------------------------------------ Configuration: YAZ Package: ${PACKAGE} YAZ Version: ${VERSION} Bugreport: ${PACKAGE_BUGREPORT} Source code location: ${srcdir} C Preprocessor: ${CPP} C Preprocessor flags: ${CPPFLAGS} C Compiler: ${CC} C Compiler flags: ${CFLAGS} Linker flags: ${LDFLAGS} Linked libs: ${LIBS} Host System Type: ${host} Install path: ${prefix} Automake: ${AUTOMAKE} Archiver: ${AR} Ranlib: ${RANLIB} ------------------------------------------------------------------------" dnl Local Variables: dnl mode:shell-script dnl sh-indentation: 2 dnl sh-basic-offset: 4 dnl End: yaz-5.28.0/ChangeLog0000644000175000017500000500076613572540030011121 00000000000000commit 0037f7c30d59eaea44fcc40c237641784c50b582 Author: Adam Dickmeiss Date: Thu Nov 28 19:30:26 2019 +0100 5.28.0 commit 120ac7f4d5827e99b7b5720dc0a68247b34c038b Author: Adam Dickmeiss Date: Thu Nov 28 19:30:18 2019 +0100 5.28.0 NEWS commit a28301d45d3bcbd3fab94d61aabec3ccb00c0fef Author: Adam Dickmeiss Date: Thu Nov 28 19:28:35 2019 +0100 cql_strerror based on srw.csv commit d95ffcc61eafe5c054acfdc7906759ab317178e5 Author: Adam Dickmeiss Date: Thu Nov 28 19:18:01 2019 +0100 Fix trailing whitespace commit 6b42dd75dd2fda0f3e7b0ae2e42f25df18376918 Author: Adam Dickmeiss Date: Fri Nov 22 13:44:02 2019 +0100 Element-set case insensitive for yaz_retrieval_request YAZ-922 Also offer yaz_match_glob2 for the comparion. And avoid tail recursion for the routine. commit 76748ad6ee47af7863d6a50236eab487b0fb9735 Merge: 53592335 ce02e917 Author: Peter Murray Date: Mon Oct 21 09:13:34 2019 -0400 Merge pull request #50 from hughmcmaster/spelling Some spelling fixes detected by lintian. Thanks for the corrections, @hughmcmaster. commit ce02e917f5e85a0d2c812540e0718a84f3749439 Author: Hugh McMaster Date: Mon Oct 21 22:49:42 2019 +1100 Spelling fixes commit 535923358d47095e038debe24a6f19915e911c1a Author: Adam Dickmeiss Date: Mon Oct 7 13:15:49 2019 +0200 Version 5.27.2 commit 3c7019ce3754c98eeb3ba8b43f75ea7f3ffb8f40 Author: Adam Dickmeiss Date: Mon Oct 7 13:00:13 2019 +0200 2019 commit 51a2b8df7d1b8ce60baa9abc352848b968bf2d17 Author: Adam Dickmeiss Date: Mon Oct 7 12:55:21 2019 +0200 Fix docpath directory result in malloc failure YAZ-921 (#49) commit a73d4cb76cafa59c60a71ee504e1969b0617fa3d Author: Peter Murray Date: Mon Aug 5 06:46:28 2019 -0400 Add MacOS-specific instructions (#48) commit 296ffeb3c8d2ba7d30e373c738f7738f4e4b110d Author: Adam Dickmeiss Date: Mon May 20 14:31:13 2019 +0200 Happy new year commit 89b4368e13fb11bc69c85a30d81d36afb185755e Author: Adam Dickmeiss Date: Mon May 20 14:20:39 2019 +0200 Update for marc-in-json link fix commit d304b2ba910b4c8f5621d004629a269edd3288b3 Merge: 09547b17 ebb947c6 Author: Adam Dickmeiss Date: Fri May 17 12:22:35 2019 +0200 Merge branch 'master' of github.com:indexdata/yaz commit 09547b177b3b8886d718c9a7da4689ceb4643e46 Author: Adam Dickmeiss Date: Fri May 17 12:22:16 2019 +0200 Update doc/common (for updated doc URLs) commit ac8eaf9cb06e9fb16dd000574bd8e06fa49e199e Author: Adam Dickmeiss Date: Fri May 17 11:26:00 2019 +0200 Remove postal address from manual commit 28022e834f9cfccae76c091efbc9c5172a6c0855 Author: Adam Dickmeiss Date: Fri May 17 11:25:33 2019 +0200 Clarify about sru option and host scheme commit ebb947c6c975bb0974ca8e753db1000437d1db01 Author: Adam Dickmeiss Date: Wed Apr 24 15:23:46 2019 +0200 Fix make distcheck commit 44e208b9fda34f4f7975d9bee7ac8aa7d9842b49 Author: cclauss Date: Tue Mar 5 14:39:56 2019 +0100 Travis CI: Add dist: xenial (#42) commit a0c6b571885cbcc247eb76a6a7c0042fd35318ba Author: Hugh McMaster Date: Wed Mar 6 00:37:08 2019 +1100 yaz: Various spelling fixes (#43) commit 0accda03aebf92c16d960ba27e09937bbb84aef2 Author: Adam Dickmeiss Date: Fri Feb 22 10:39:36 2019 +0100 Two other TRC calls (that was missing before) commit 0dfc9c4f2ee5e4004352052063e0fa8882ebdd9b Author: Adam Dickmeiss Date: Fri Feb 22 10:00:55 2019 +0100 Remove trailing whitespace commit c79f30e8bb418c9748ea290d19eb818e696e96f5 Author: Adam Dickmeiss Date: Fri Feb 22 10:00:41 2019 +0100 Only use gnutls_transport_set_int when available commit 962d55f26030493ec1e0d2108f89622d33c7588e Merge: 3590317b 635e2363 Author: Adam Dickmeiss Date: Thu Feb 21 14:11:26 2019 +0100 Merge pull request #45 from indexdata/yaz-918-take-2 Yaz 918 take 2 commit 635e2363e036b31ae58f0a7044d0e42b9d9182d7 Author: Adam Dickmeiss Date: Thu Feb 21 13:57:15 2019 +0100 unix comstack logs to level "comstack" commit d3a4e2d16468dba45432eb1d35fc41632a636158 Author: Adam Dickmeiss Date: Thu Feb 21 13:27:00 2019 +0100 tcp/ssl logging to level "comstack". Rather than using compile time enabled debugging which was fashionable 24 years ago. commit 3ddbc899e83d4b349d7df362d96a60bdeaf38372 Author: Adam Dickmeiss Date: Thu Feb 21 13:08:17 2019 +0100 yaz-client: cs_close on exit commit 5a71304776dd9fd7a195ae5321a1b70fc9ab7ab6 Author: Adam Dickmeiss Date: Thu Feb 21 12:05:49 2019 +0100 Add trace stmt for gnutls_certificate_set_x509_key_file failure commit 334de02d445e3cac8f22819e19b1893ceaa94f64 Author: Adam Dickmeiss Date: Thu Feb 21 11:39:36 2019 +0100 Remove a couple of unused defines commit 9dfb1c1a6ab4777ba48b6270e2b81fad6699e3f5 Author: Adam Dickmeiss Date: Thu Feb 21 11:39:13 2019 +0100 Fix YAZ-918 take two Omit the gnutls goodbye for server completely. Partly reverts 5f25962922da4f65b650dc3645d5604d2ffbcb6e. commit 3590317bbf974d888e346c2fb6562f07c7d54e6c Merge: 5f259629 34c3304b Author: Adam Dickmeiss Date: Wed Feb 20 16:19:23 2019 +0100 Merge branch 'master' of github.com:indexdata/yaz commit 5f25962922da4f65b650dc3645d5604d2ffbcb6e Author: Adam Dickmeiss Date: Wed Feb 20 16:18:44 2019 +0100 Fix yaz-ztest ssl does not work when forking YAZ-918 commit 59cae3a05cf2f43d88b8341f5a4656bc2d776e93 Author: Adam Dickmeiss Date: Wed Feb 20 16:18:17 2019 +0100 Using gnutls_transport_set_int Instead of gnutls_transport_set_ptr commit 34c3304b5936fce833776c948b2e2805a2573079 Author: Heikki Levanto Date: Wed Feb 20 15:36:08 2019 +0100 Fix YAZ-919: Attempt to write HTTP to a non-listening socket loops commit 3a31861262b69d09dd477886826758b1e005456b Author: Adam Dickmeiss Date: Thu Jan 31 11:39:17 2019 +0100 Add Debian Buster commit b4b2ec9b325f781719f73a7d86feb61a76214a10 Author: Adam Dickmeiss Date: Tue Dec 4 22:21:45 2018 +0100 ZOOM ItemOrder omits toKeep if no elements set commit 872b6f92a024bb53bc1c11dfeccd47f065f98238 Author: Adam Dickmeiss Date: Mon Dec 3 17:03:24 2018 +0100 Version 5.27.1 commit 60da9a35b8e6af3da1d1c9a1bb0cdbf027a390c4 Merge: e88509a2 5b919d13 Author: Adam Dickmeiss Date: Sun Dec 2 18:53:50 2018 +0100 Merge branch 'master' of github.com:indexdata/yaz commit e88509a20f776644f481d112954673045931a622 Author: Adam Dickmeiss Date: Sun Dec 2 18:52:55 2018 +0100 Use pkg-config to detect ICU . Closes #41 commit 5b919d13e20f3018c4880c4745a8fbb80fdf99fd Author: Adam Dickmeiss Date: Thu Nov 1 14:29:38 2018 +0100 Describe ZOOM option timeout commit 8e44c0b6cd99a55e70ba039ba83cf1b3457ad475 Merge: 1c4fb94d 90cab04b Author: Adam Dickmeiss Date: Wed Oct 10 10:01:45 2018 +0200 Merge pull request #38 from a-roussos/fix_man_page_typos Fix typos in yaz-client man page commit 90cab04b09f9db8d6771c78d161e4437f70e8792 Author: Andreas Roussos Date: Tue Oct 9 12:43:34 2018 +0300 Fix various typos commit 1c4fb94d9b6427604f4d50ba32625e70ab4b1cfd Author: Adam Dickmeiss Date: Mon Oct 8 12:53:50 2018 +0200 Version 5.27.0 commit 527484b62a32314b515b8b79def0749687de5982 Author: Adam Dickmeiss Date: Mon Oct 8 12:51:12 2018 +0200 GFS: Allow External type TaskPackage response YAZ-915 commit f3a5e77d19a8c0992687de68fad9d0e0c23da2c4 Author: Adam Dickmeiss Date: Mon Oct 8 12:50:41 2018 +0200 zoomsh: fset command YAZ-916 commit 525ba8bfff55c2ce495d6a15a7b0a25e8dd07dc7 Author: Adam Dickmeiss Date: Thu Sep 27 09:40:14 2018 +0200 Improve logging of extended service task type YAZ-914 commit f570c1d920f8fb453c45df7af63311dc70816fcf Merge: 64b13de4 3f342ed8 Author: Adam Dickmeiss Date: Fri Sep 14 14:04:40 2018 +0200 Merge pull request #37 from jason-bigelow-insight/doc_for_show Document the third arg to the show command commit 3f342ed846c84626c4a75a5f11c2eebfb33a2b80 Author: Jason Bigelow Date: Mon Sep 10 10:18:20 2018 +1000 Document the third arg to the show command commit 64b13de405e85d7378abc6b347c572e4510d569b Author: Adam Dickmeiss Date: Wed Jul 11 10:48:39 2018 +0200 Version 5.26.1 commit cb819a58edf5fba4aacef5e460ddde73a4ecb490 Author: Adam Dickmeiss Date: Wed Jul 11 10:47:25 2018 +0200 Test case for YAZ-913 commit ea39a08f22dceb0b670265224c086b78860c36b7 Author: Adam Dickmeiss Date: Wed Jul 11 10:46:57 2018 +0200 Fix segv with element-set=null and split YAZ-913 commit d80d65349d3d9f9495fe54bd71cdbf9b363a5cf9 Author: Adam Dickmeiss Date: Mon Jul 9 15:10:14 2018 +0200 Version 5.26.0 commit 0896c7dade9f6f85e3728f49c5149947638881c3 Author: Adam Dickmeiss Date: Mon Jul 9 15:05:11 2018 +0200 Allow suffix split for retrieval element-set names YAZ-912 commit c1acee5b4cef549493bda71e8f747369168c8237 Author: Adam Dickmeiss Date: Mon Jul 9 12:52:59 2018 +0200 Fix cql2ccl: case sensitive comparisons for ops etc YAZ-911 commit 52e2b4c157fa2eda8d0ccf3d1f8568315700114c Author: Adam Dickmeiss Date: Tue May 29 12:20:35 2018 +0200 GFS: special handling with ES response (errcode==-2) commit e76e81668aec3260c4d1b15a919c9f262a5fae81 Author: Adam Dickmeiss Date: Tue May 29 12:20:06 2018 +0200 Print more ES response options commit fda4f06b77ab58d1b31f8e89584829015082089e Author: Adam Dickmeiss Date: Wed May 23 14:56:45 2018 +0200 Fix misleading indentation commit bcd44ecb65e300473e0f059aa73b082297ce0228 Author: Adam Dickmeiss Date: Thu May 10 14:12:47 2018 +0200 Add Ununtu Bionic commit 7d90957fbb249ff3be82ea2145b204ea28778de6 Author: Adam Dickmeiss Date: Thu May 10 14:11:06 2018 +0200 Revert "Force gzip compression (and not xz)" This reverts commit 40a621c2dd7abe3f29ae77a36973ff5200b12e4d. The server running apt now has newer dpkg-deb so this is no longer necessary. commit f0e13d1376e372fb479abb084d85b71109dbf2e5 Merge: 40a621c2 1c5763e4 Author: Adam Dickmeiss Date: Fri May 4 15:55:33 2018 +0200 Merge pull request #36 from indexdata/yaz-908-extended-services-diagnostics Yaz 908 extended services diagnostics commit 1c5763e4be32dc7b7c3e6c89a03a1e85b51c2481 Author: Adam Dickmeiss Date: Fri May 4 15:21:36 2018 +0200 YAZ 5.25.0 commit 9dcaf07bbabebf0e91180294bd982d8b997131e7 Author: Adam Dickmeiss Date: Fri May 4 15:17:28 2018 +0200 Document more options for extended services commit c2f94900de9dd31728fe45c8b8ed88a5fafb7858 Author: Adam Dickmeiss Date: Fri May 4 15:14:44 2018 +0200 ZOOM C: return extended service diagnostics separately YAZ-908 commit 40a621c2dd7abe3f29ae77a36973ff5200b12e4d Author: Adam Dickmeiss Date: Fri May 4 12:08:57 2018 +0200 Force gzip compression (and not xz) This is because at the moment ftp.indexdata.dk is user an older version of dpkg that does not handle xz. commit be97eebb1c2e43e0c4bc068a1b57b863c742a8f2 Author: Adam Dickmeiss Date: Wed Apr 25 10:27:53 2018 +0200 Remove ubuntu yakkety + precise commit bdc87ca3a8d01bed79c7f8331dc3e40226d0c0d5 Merge: 1551b587 04cc1b84 Author: Adam Dickmeiss Date: Wed Apr 25 10:18:24 2018 +0200 Merge pull request #35 from indexdata/yaz-5-24-0 Version 5.24.0 commit 04cc1b841bc2c580a115e8996c9170b1e3dd3cfb Author: Adam Dickmeiss Date: Wed Apr 25 10:04:46 2018 +0200 Version 5.24.0 commit 1551b58749441bec19ad8b3ef15bb4b38b3f18de Author: Adam Dickmeiss Date: Wed Apr 25 09:54:24 2018 +0200 ZOOM-C: recordIdString option for record update YAZ-907 commit 7b2f6bc954c202a9c4a9e47eeeadebd75fc6f23f Author: Adam Dickmeiss Date: Wed Apr 25 09:44:53 2018 +0200 Mention Visual Studio 2017 commit ec1c133bd71d6188e659c04db828e6a136fdb76b Author: Adam Dickmeiss Date: Tue Apr 17 13:59:51 2018 +0200 Proper install location from common NSIS commit d6119d8a0a87e48c3ce27f6a05d499ed19f8501a Author: Adam Dickmeiss Date: Tue Apr 17 13:39:00 2018 +0200 m4 part of YAZ source on Windows commit 11fb416a5f9da75f759b23e2bedd1fa40b84dc1a Author: Adam Dickmeiss Date: Tue Apr 17 13:13:11 2018 +0200 Move mk_version.tcl to shared m4 commit 5b78645d9fc90891fae7ef96c31c844893c01306 Author: Adam Dickmeiss Date: Tue Apr 17 11:42:29 2018 +0200 Update to VS 2017 and use common NSIS code commit 4183d91fc456117384d76f8e735dd61715d127e8 Merge: bd713c86 185fb55b Author: Adam Dickmeiss Date: Thu Mar 1 13:52:48 2018 +0100 Merge pull request #34 from indexdata/yaz-903-enable-test-in-test-solr Yaz 903 enable test in test solr commit 185fb55b4b4658c3fe639284973d74d26d5f6a65 Author: Adam Dickmeiss Date: Thu Mar 1 13:44:05 2018 +0100 Include nextRecordPosition element in test commit faf835968eacd03e19eb2a49fa9cbe868ede3b18 Author: Adam Dickmeiss Date: Thu Mar 1 13:39:40 2018 +0100 Add test case for YAZ and facets decoding YAZ-904 commit 75e4a9f592de5d4bc2d9fa7800defef9792b4f64 Author: Adam Dickmeiss Date: Thu Mar 1 11:42:40 2018 +0100 Enable and update test in test_solr YAZ-903 commit bd713c8653aac059add0f3381f048fc7d37d5bf7 Author: Adam Dickmeiss Date: Fri Jan 12 19:16:31 2018 +0100 Happy new year commit 9d2b8e2b6c661c7421ca7e86d70e5e101565bb3e Author: Adam Dickmeiss Date: Tue Oct 31 14:24:43 2017 +0100 Use the build architecture pkg-config YAZ-897 Thanks to helmutg@debian.org for patch. commit 008a94f3330e60107003ffd689ae3c53ea316fda Author: Adam Dickmeiss Date: Tue Sep 12 15:52:46 2017 +0200 NSIS: Use operator == for string comparion commit cebe1a3b7f77b2390edaa0803a9c458478947783 Author: Adam Dickmeiss Date: Mon Sep 11 13:41:25 2017 +0200 Only yaz_solr_decode_error when Libxml2 is available commit 3f65d0146eb03a89e705c8db801cb5879fe960d1 Merge: 7c5bd430 aaba1a83 Author: Adam Dickmeiss Date: Mon Sep 11 13:37:12 2017 +0200 Merge pull request #32 from indexdata/yaz-895-relay-solr-diagnostics-to-srw-response Relay Solr diagnostics message to SRW response commit aaba1a831ff83dc36589bda9949e7fcce50a0ad6 Author: Adam Dickmeiss Date: Mon Sep 11 13:15:02 2017 +0200 Relay Solr diagnostics message to SRW response commit 7c5bd4302c8538270af81f73d490b7ba00a022e0 Author: Adam Dickmeiss Date: Mon Sep 4 12:23:29 2017 +0200 Refer to correct introduce-bug version 5.20.0 commit fab26f85daef9c2bcb9f1236ad37ded279da3898 Author: Adam Dickmeiss Date: Mon Sep 4 11:20:57 2017 +0200 Version 5.23.1 commit ff74d6e932193bd73f6e800b12257cb72fae4f94 Merge: 01585d42 47b2f50b Author: Adam Dickmeiss Date: Mon Sep 4 11:05:32 2017 +0200 Merge pull request #31 from indexdata/yaz-894-omitted-content-length-3 Fix Omitted Content-Length not handled anymore YAZ-894 commit 47b2f50baaa9555f1d92cac8ebabc878c7892d21 Author: Adam Dickmeiss Date: Mon Sep 4 10:54:34 2017 +0200 Fix Omitted Content-Length not handled anymore YAZ-894 This issue was introduced by work in YAZ-878 YAZ Version 5.20.1. commit 01585d42731109b2cc3b39f95fce859d30d226ea Author: Adam Dickmeiss Date: Fri Aug 4 15:21:25 2017 +0200 Version 5.23.0 commit 8ce0c3a33cc3eac8195645a5f3d99685638a8c9e Author: Adam Dickmeiss Date: Fri Jul 28 15:20:03 2017 +0200 Allow for more Solr URL schemas YAZ-893 If the Solr URL contains ? it will be treated as a URL that includes request handler rather than hard-coded /select. For example /solr/search? . You can also pass own arguments. For example /solr/search?foo=bar . commit 248cdad8e52536ba7cf5aae5478be01b4acfa75a Author: Adam Dickmeiss Date: Thu Jun 22 12:59:30 2017 +0200 Clean up gitignore files commit 1fe61315abbef97ee228f21378e3cee7ccd0b87e Author: Adam Dickmeiss Date: Thu Jun 22 12:57:37 2017 +0200 Update libstemmer_c commit 3cddf517dc0ea033c052c5063bf8c5b275749c7a Author: Adam Dickmeiss Date: Wed May 31 11:34:16 2017 +0200 Update libstemmer_c commit 0e4a97a3c51a3be9527925ab8176e3032f7405b7 Author: Adam Dickmeiss Date: Wed May 31 11:21:10 2017 +0200 Ignore deb-src and build commit 08d38f312e6a984176b1d1c26ea95103c1addbd7 Author: Adam Dickmeiss Date: Tue May 30 11:43:08 2017 +0200 Version 5.22.0 commit 625f977009b29d9da818128ea30420aad6f8da98 Merge: 0fc926dd c8c5ec70 Author: Adam Dickmeiss Date: Tue May 30 11:38:50 2017 +0200 Merge pull request #29 from indexdata/yaz-891-add-timeout-for-rdf-lookup Yaz 891 add timeout for rdf lookup commit c8c5ec70697336c343fe5adc7cf84d52fb3c0d67 Author: Adam Dickmeiss Date: Tue May 30 11:25:47 2017 +0200 Make rdf-lookup timeout configurable Uses yaz_url_set_timeout commit dc1ee22330e1011debfbda9573a92493c37b557f Author: Adam Dickmeiss Date: Tue May 30 11:25:10 2017 +0200 Add yaz_url_set_timeout commit 11f6b84c7d02969c510f4ecb7b5529e091c79008 Author: Adam Dickmeiss Date: Tue May 30 11:23:42 2017 +0200 Fix description of return values commit 0fc926dd2e289b12c854899e683fd81d59616b01 Merge: 45b3c27d b14077ac Author: Adam Dickmeiss Date: Tue May 9 11:37:31 2017 +0200 Merge pull request #28 from indexdata/yaz-890-report-error-for-bad-x-path Yaz 890 report error for bad x path commit b14077ac819a1d735e01fa0531a94f565f81bc61 Author: Adam Dickmeiss Date: Tue May 9 11:15:30 2017 +0200 rdf-lookup: report error if X-Path cannot be compiled YAZ-890 commit 68fc613a1b49755b8b7e1e86d85ad4f8da7ffab7 Author: Adam Dickmeiss Date: Tue May 9 11:06:34 2017 +0200 Avoid traling newline for yaz_log_xml_errors commit 45b3c27d3df0705d9e86f8af0651c359f5a31171 Author: Adam Dickmeiss Date: Mon May 8 14:22:59 2017 +0200 Version 5.21.1 commit dcb0d6423160ac8e1f921cfc9a9a2521a32cf242 Author: Adam Dickmeiss Date: Mon May 8 14:19:11 2017 +0200 Add Debian stretch commit b998a6f156fa844e96647e4561cef746d62eaab8 Author: Adam Dickmeiss Date: Wed May 3 11:35:38 2017 +0200 CentOS 5 no longer supported commit 76c3c2bde6b3c921e3bf8bf79b17dc3d6a071c1f Author: Adam Dickmeiss Date: Wed May 3 10:38:32 2017 +0200 Remove redundant assignment. Closes #24 commit 7d63f62eacec62f7418d2e66c74a2fd13f18ff9d Author: Adam Dickmeiss Date: Wed May 3 10:33:12 2017 +0200 Fix fmt string in cs_print_session_info. Closes #25 commit a7e19d775c30651ee3417b67d00f3bcfeddf37d3 Author: Adam Dickmeiss Date: Wed May 3 10:30:12 2017 +0200 Fix missing va_end in yaz_xml_get_prop. Closes #26 commit 93b9f0bbae68c78431de37f6be7f42a5171ca7a8 Author: Mike Taylor Date: Wed May 3 08:18:04 2017 +0100 Fix redundant self-assignment commit 2a0c07071d75ba4931d674945cd25b1d7bacfa59 Author: Adam Dickmeiss Date: Tue Apr 4 10:04:25 2017 +0200 yaz_prox_unit_name returns const char commit 8dd8b42cfb950adb0f833902193289dbe7421c8d Author: Adam Dickmeiss Date: Tue Apr 4 10:02:16 2017 +0200 ABI 5.21.0 commit 942aaf5562e86bf2028dd4eef8052f6024cdfb41 Author: Adam Dickmeiss Date: Fri Mar 31 20:03:29 2017 +0200 Version 5.21.0 commit 5fe1d4d45ad0af8390962f57f1c9c13c926e5f2d Author: Adam Dickmeiss Date: Fri Mar 31 19:44:13 2017 +0200 Avoid 8-bit character literals in tests commit 4d93c02db13454f636a5ab9ec80c3d93e9f27c74 Author: Adam Dickmeiss Date: Fri Mar 31 19:24:28 2017 +0200 Add cast because yaz_prox_unit_name returns non-const ptr commit 0e172cd739c5ffff59e28ba5d290ee91bc6f9116 Author: Adam Dickmeiss Date: Fri Mar 31 19:23:22 2017 +0200 Include header with z_ProxUnit_to_str definition commit 20a98d2701dd3a75ab9ee879c4412c7a04b0df8d Author: Adam Dickmeiss Date: Thu Mar 30 13:55:58 2017 +0200 Update NEWS commit bf26a0bf313cb2d84fef88552aa5e3cdbbb2a991 Author: Adam Dickmeiss Date: Thu Mar 30 13:04:13 2017 +0200 CQL name+value relation modifiers rejected if not = commit dce542ddebdba17f0d73c83a2a02da925765d32b Author: Adam Dickmeiss Date: Thu Mar 30 13:03:06 2017 +0200 Better name for cql2pqf test section commit 0d380cca9e0dbeb06aa51c768a58d8866abeb40e Merge: 86d3d3a0 5ce60bb9 Author: Adam Dickmeiss Date: Thu Mar 30 11:51:08 2017 +0200 Merge pull request #22 from indexdata/yaz-886-rdf-lookup-can-produce-invalid-xml Yaz 886 rdf lookup can produce invalid xml commit 86d3d3a0168386f34decde60f23792fe82ce3136 Merge: 43aaf47c 5b5a38b3 Author: Adam Dickmeiss Date: Thu Mar 30 11:27:30 2017 +0200 Merge pull request #21 from indexdata/yaz-885-cql-relation-modifiers Yaz 885 cql relation modifiers commit 5b5a38b31910fe085bcef669c6b2a94a9e01daa3 Author: Adam Dickmeiss Date: Thu Mar 30 11:15:15 2017 +0200 Travis osx: do not install pkg-config commit f1a1222eeed520357aac3029870b12f7bd993f75 Author: Adam Dickmeiss Date: Thu Mar 30 11:01:09 2017 +0200 Test CQL to RPN conversion with proximity About time!! commit bc4e6db36623cf8bf2b6ada4f8bc03022167fc4a Author: Adam Dickmeiss Date: Thu Mar 30 10:50:13 2017 +0200 Use z_str_to_ProxUnit commit 586f3067fb74d35b384ff5532d290fa98c280eb9 Author: Adam Dickmeiss Date: Thu Mar 30 10:49:56 2017 +0200 Use z_ProxUnit_to_str commit 071a6b0bbab4f57fc690f9b63e3a93a05fdadfdc Author: Adam Dickmeiss Date: Thu Mar 30 10:47:46 2017 +0200 Add ProximityUnit map to/from string utility New functions z_ProxUnit_to_str and z_str_to_ProxUnit. commit 5ce60bb98fad97ab5dfea2817960c78cd1aac65e Author: Adam Dickmeiss Date: Wed Mar 29 20:53:11 2017 +0200 Reformat commit 9a1578e4840da02e794ae13d7d44443dbc6702fc Author: Adam Dickmeiss Date: Wed Mar 29 20:43:35 2017 +0200 Replace -- in uri with %2D%2D in XML comment While dash does not need to be URI encoded it shouldn't hurt and also ensures that double-slash will not be part of XML comment commit 5b7d3bda20dc44de6672ecee66c6375dc6c21267 Author: Adam Dickmeiss Date: Wed Mar 29 20:43:00 2017 +0200 Add wrbuf_puts_replace_str commit 2c6bc67b47268758174b7e88af5cfdbf4d7a620e Author: Adam Dickmeiss Date: Tue Mar 28 15:08:14 2017 +0200 Add test for CQL relations with modifier values commit 4f2f308dfda263c9ee2d414331c9bbe19b97a133 Author: Adam Dickmeiss Date: Tue Mar 28 15:07:09 2017 +0200 CQL relation modifier with value converts to proximity The relation modifier name is looked up as if it was an index. commit 43aaf47cf35c0946e543cb01120a457c8b5f889d Author: Adam Dickmeiss Date: Mon Mar 27 10:29:44 2017 +0200 Version 5.20.3 commit a639bfee0a723fd24409101026bc9f4606f01031 Author: Adam Dickmeiss Date: Fri Mar 24 11:02:44 2017 +0100 rdf-lookup: fix misleading log on rdf-failures YAZ-884 The HTTP response is only logged if - after removing leading whitespace - it is non-empty. rdf-lookup failures are always logged via yaz_log at level YLOG_LOG. As before XML comments are controlled by the debug property. commit 3831f10d6cf3e8f1d05e96062657974a078ebd44 Author: Adam Dickmeiss Date: Mon Feb 20 11:33:59 2017 +0100 Version 5.20.2 commit 3d54949772aa048e5111709754cbeec68745659b Author: Adam Dickmeiss Date: Mon Feb 20 11:33:50 2017 +0100 RPM: use make_build if defined (parallel builds) commit 416dd83feb0ce9353b9c55e116d76b98c0ae044d Author: Adam Dickmeiss Date: Mon Feb 20 11:04:42 2017 +0100 Debian: parallel builds commit b9411cfde18ea3bd150c6d395ed5df76b317e1a2 Author: Adam Dickmeiss Date: Mon Feb 20 10:55:14 2017 +0100 Ubuntu: +Yakkety -Wily commit 6ecb5d983403db04498709e72d0576f0e34b0744 Author: Adam Dickmeiss Date: Tue Feb 14 16:25:42 2017 +0100 Remove trailing whitespace from book.xml commit 91af1d15c90ef0a26f8c940936d70493c62cea91 Merge: 4684e96e bb9dc3d3 Author: Mike Taylor Date: Mon Feb 13 08:49:14 2017 +0000 Merge pull request #20 from wafschneider/patch-1 Add documentation for tag in xslt retrieval facility doc commit bb9dc3d341e0456098f607ed4a523fd14423d894 Author: Wayne Schneider Date: Sun Feb 12 16:47:50 2017 -0600 Add documentation for tag in xslt retrieval facility doc commit 4684e96eed99e1a5ef35733cfe73c1282b41690f Author: Adam Dickmeiss Date: Thu Feb 9 15:25:22 2017 +0100 Use printf to get version in configure.ac YAZ-883 commit 91ce676cdcdc3dbd252f48dd611572289f1c71fc Author: Adam Dickmeiss Date: Mon Feb 6 13:13:00 2017 +0100 Pass portable value to shutdown 0=SHUT_RD on POSIX. 0=SD_RECEIVE on Windows. 0=?? on OS2 commit 09eb8ca353074c619bfd2f5efe87f80d04aa198d Author: Adam Dickmeiss Date: Thu Feb 2 14:16:21 2017 +0100 tcpip_strtoaddr_ex internal and only when getaddrinfo unavail commit 111b1b9d75c07c5f5d814e4b9856ddc3e03144b3 Author: Adam Dickmeiss Date: Thu Feb 2 13:57:22 2017 +0100 Fix socklen_t use commit 9edd78338f9f095842b19c137218a261ce143a09 Author: Adam Dickmeiss Date: Thu Feb 2 13:52:09 2017 +0100 Fix compilation error if getaddrinfo does not exist commit 3572e242cce6f2ae1ddb7c693b9d1c7070cc21d3 Author: Adam Dickmeiss Date: Thu Feb 2 13:49:17 2017 +0100 Fix configure:ac version incorrect on OS2 commit 1a7b520d4b3fbd9c5ac012d83a8a1ed22b186629 Author: Adam Dickmeiss Date: Tue Jan 31 13:55:03 2017 +0100 Version 5.20.1 commit 28ff7693cfa0fd5d7c47c908ed46b16eea540644 Author: Adam Dickmeiss Date: Mon Jan 30 07:53:39 2017 +0100 DLL-export wrbuf_malloc_info commit 09783c72e869f099e28234191baf1d2a411e498a Author: Adam Dickmeiss Date: Wed Jan 25 15:44:02 2017 +0100 Slight re-indent commit 3cbece353151ea035869f02ef2abb317260fcd37 Author: Adam Dickmeiss Date: Wed Jan 25 15:43:54 2017 +0100 Add turbomarc as allowed inputformat in record conv commit 8dcc35e9a0bae2345ffdb80f439d09a77d6f0879 Author: Adam Dickmeiss Date: Wed Jan 25 15:30:54 2017 +0100 Remove traling whitespace commit 2d65a493bef47c263b3a2844c9ae6b37c9be0e7d Author: Adam Dickmeiss Date: Wed Jan 25 10:56:14 2017 +0100 Reformat commit de79f294729628aa60b1d3fad2535c320a221d6a Author: Adam Dickmeiss Date: Mon Jan 23 11:35:41 2017 +0100 Update m4 (C99) commit a088de025234db583a6aec342fd6118a24320685 Author: Adam Dickmeiss Date: Wed Jan 11 11:54:55 2017 +0100 Fix incorrect command in yaz-record-conv man page commit 7d8f0d5933f9c1938a55c28b92d3d60aa3b188b0 Merge: 76646716 8737fcc5 Author: Adam Dickmeiss Date: Tue Jan 10 14:09:26 2017 +0100 Merge branch 'master' of github.com:indexdata/yaz commit 8737fcc56697a6a707e459758ca27e7c495f6a20 Author: Heikki Levanto Date: Tue Jan 10 14:03:28 2017 +0100 Add doc for the method attr for rdf-lookup (LOC-14) commit 76646716de2b85da728f094b1c2e23472b8b05c8 Author: Adam Dickmeiss Date: Tue Jan 10 13:40:44 2017 +0100 Version 5.20.0 commit 1c7108fe2768289d9598347dbd1bf7a9e0476d23 Author: Adam Dickmeiss Date: Tue Jan 10 13:35:39 2017 +0100 yaz-url: do not wait for body when sending HEAD request YAZ-878 commit 33e909a1ef1e8af2c49d657ea3cc5841edd924a4 Author: Adam Dickmeiss Date: Tue Jan 10 13:34:22 2017 +0100 Add new COMSTACK utility cs_set_head_only Controls whether tcpip_get should read header only (ignore content) or response with body. commit f4821b82357ca6f721872ac7bd6894c837b5b27b Author: Adam Dickmeiss Date: Tue Jan 10 13:23:15 2017 +0100 HTTP decoding: ignore message length in head only mode commit fc695fb44561eb95226741971ea28f37b58a117d Author: Adam Dickmeiss Date: Tue Jan 10 11:14:42 2017 +0100 Updat NEWS commit dd9eb4d3a0d9199365f5bfbc67293460b8327c80 Author: Adam Dickmeiss Date: Tue Jan 10 10:29:21 2017 +0100 Happy new year commit 10d18aeface65a0fed00560ec69a00a3b193912f Author: Adam Dickmeiss Date: Tue Jan 10 10:24:05 2017 +0100 retrieval: fix incorrect backend schema YAZ-877 commit 6099c212c382d05fbea30b23e15b630e181ce1e2 Merge: e7ad2fff 84237f13 Author: Heikki Levanto Date: Mon Jan 9 12:14:38 2017 +0100 Merge branch 'master' of github.com:indexdata/yaz commit e7ad2fffafbf533abd49e83dee51d7243bea2e16 Author: Heikki Levanto Date: Mon Jan 9 12:13:52 2017 +0100 loc-14: Lookup using GET by default, config overrides commit 84237f135b453fbbe0fb15bf054e17253926c7f8 Author: Adam Dickmeiss Date: Fri Dec 30 15:04:59 2016 +0100 Version 5.19.2 commit c2a81c58d922aa0afa13dfd243c17e58d45236e2 Author: Adam Dickmeiss Date: Fri Dec 30 14:42:26 2016 +0100 hiredis gone too for centos 7; weird commit c8be5bafd25310ae2725cc341e655a80762a707e Author: Adam Dickmeiss Date: Thu Dec 29 10:59:05 2016 +0000 Version 5.19.1 commit 8e3006cdb50bb7b8bd9e504e3f5f78c31829d5cc Author: Adam Dickmeiss Date: Thu Dec 29 11:53:01 2016 +0100 Declare semantic version 5.18.0 This should have been done in 5.18.0. commit b8f181a6efc2a6cdbcd1eb934244d59316604810 Author: Adam Dickmeiss Date: Fri Dec 16 12:59:07 2016 +0000 Version 5.19.0 commit 8fe683c8bc9b35848fa0e8ea3b88847936892356 Author: Adam Dickmeiss Date: Fri Dec 16 13:25:33 2016 +0100 Fix a few leaks for rdf-lookup commit 3b20c5f46cef72b0b18426a08ab00a07f0f3b9db Author: Adam Dickmeiss Date: Fri Dec 16 13:01:44 2016 +0100 Include yaz/log.h due to yaz_log_init usage commit 53318596634321e64a46a8126c62fcd899835516 Merge: 0efbc1e1 9e712d7b Author: Adam Dickmeiss Date: Fri Dec 16 12:58:55 2016 +0100 Merge branch 'master' of github.com:indexdata/yaz commit 0efbc1e1dd5a846dc927bb60a90495203b7d64e0 Author: Adam Dickmeiss Date: Fri Dec 16 12:58:15 2016 +0100 Add example for yaz-record-conv manual page commit 9e712d7bea64a6a04f0081d3867f35a518104d25 Author: Heikki Levanto Date: Fri Dec 16 12:10:26 2016 +0100 minor doc thing commit a1e8003e6ae9e8c6f5a27083c0ec5094d3b8589c Merge: 8dd4adc5 3a18cfde Author: Heikki Levanto Date: Fri Dec 16 12:09:12 2016 +0100 Merge branch 'master' of github.com:indexdata/yaz commit 8dd4adc5df2edca24a825304ba9c491b37ebdecc Author: Heikki Levanto Date: Fri Dec 16 12:08:54 2016 +0100 Update docs for LOC-14 commit 3a18cfded11c3d63ebc2642846e0ec22b53bc4bc Author: Adam Dickmeiss Date: Fri Dec 16 10:00:58 2016 +0100 Avoid mixed declarations and code (C99) commit eacb9c4890a8ac19310cf913621f95da06f3f4d0 Author: Adam Dickmeiss Date: Fri Dec 16 10:00:32 2016 +0100 yaz-record-conv: honor -v. Typo commit 4198be8a116860237307e6cea92e8ae6b6a59d78 Merge: 5b82e0cd 83d61d11 Author: Heikki Levanto Date: Thu Dec 15 14:34:33 2016 +0100 Merge branch 'master' of github.com:indexdata/yaz commit 5b82e0cd34a0b6db0670e9f04d61c8dc77d6f3fa Author: Heikki Levanto Date: Thu Dec 15 14:33:58 2016 +0100 Add a small test script for rdf-lookup Can not be part of 'make check', as it depends on external services, but can be run manually. commit 83d61d11421f5e8ea54ed0fd54c4d33980eb3853 Merge: 2b3c3be3 6c83f12d Author: Adam Dickmeiss Date: Thu Dec 15 14:23:09 2016 +0100 Merge pull request #18 from indexdata/yaz-874 Fix typo; docbook-xsl commit 12bca5ef7f4bdb16cb91f2482f1d6cc139d20bb3 Author: Heikki Levanto Date: Thu Dec 15 14:23:02 2016 +0100 LOC-14: Accept a debug attr in rdf-lookup tag, if "1" output debug comments commit 1a29059a1607df2dace1fb42dad3a8db11626215 Merge: c284e29a 2b3c3be3 Author: Heikki Levanto Date: Thu Dec 15 14:21:50 2016 +0100 Merge branch 'master' of github.com:indexdata/yaz commit 6c83f12d9be4ffbf9f3e2dc3709adc7d68dad9b3 Author: Adam Dickmeiss Date: Thu Dec 15 14:08:47 2016 +0100 Fix typo; docbook-xsl commit 2b3c3be339e13ed3a471bdb397b374ea1d453b99 Merge: c75a7fc1 4c9a455f Author: Adam Dickmeiss Date: Thu Dec 15 13:30:48 2016 +0100 Merge pull request #15 from indexdata/yaz-875 Install yaz-record-conv commit 4c9a455f53c81ff3d4aff035fdce1572da359d54 Author: Adam Dickmeiss Date: Thu Dec 15 13:06:48 2016 +0100 Install yaz-record-conv commit c284e29a389af6f7703c67a1f5e32a962c011cdc Merge: 857f7d9f c75a7fc1 Author: Heikki Levanto Date: Thu Dec 15 12:46:01 2016 +0100 Merge branch 'master' of github.com:indexdata/yaz commit 857f7d9f934c61250031f9d0ccf049ecedd69728 Author: Heikki Levanto Date: Thu Dec 15 12:45:43 2016 +0100 Loc14: Define namespaces in config commit c75a7fc115bef81820d676b2a82655c1980f98dc Author: Adam Dickmeiss Date: Wed Dec 14 12:46:08 2016 +0000 Only enable redis on CentOS 7 commit 2721fb51925ee6051414ab0d81518aae5f76e18c Merge: 9c8a6b75 c76f7cce Author: Heikki Levanto Date: Wed Dec 14 10:57:22 2016 +0100 Merge pull request #14 from indexdata/loc-14 LOC-14: Add rdf-lookup backend to record_conv.c commit c76f7cce862ed17960b0958ec70e3b8c7911d103 Author: Heikki Levanto Date: Mon Dec 12 16:02:25 2016 +0100 LOC-14: Add rdf-lookup backend to record_conv.c Uses a config like this: Looks up any keys within the Xpath against the server, and if it gets back a 302 redirect with a X-URI header, replaces that within the tag. commit 9c8a6b75634a9fa26126028b058a168c924ca519 Author: Adam Dickmeiss Date: Tue Dec 13 13:49:26 2016 +0100 Fix yaz_url_exec sending same uri for 2nd call commit 6564ff7654f13e1641c3ae3cc22466326401bef6 Author: Adam Dickmeiss Date: Thu Nov 17 13:52:11 2016 +0100 Mention vcvarsall.bat rather than vcvars32.bat commit af0aa3ebd7c0f58bd62171a3b671328cd5453d42 Author: Adam Dickmeiss Date: Fri Oct 28 15:33:29 2016 +0200 JSON: to the spec check of number commit cf50dccff8134c0d5c0980687e6b56a7abc5a6b2 Author: Adam Dickmeiss Date: Fri Oct 28 14:47:05 2016 +0200 JSON: strict \uxxxx sequence commit 17c395f307edb0a225885eb792440ba76cdfbd8f Author: Adam Dickmeiss Date: Fri Oct 28 14:04:35 2016 +0200 JSON: fail for nesting more than 1000 levels The parser is recursive - so this is better than stack overflow. commit b0ea7188a987b179f5e0de6b71b85968630a5006 Author: Adam Dickmeiss Date: Thu Oct 27 12:08:06 2016 +0200 JSON: distinguish between EOF and error commit 7dbefe59539947975961773f13a8cdd128dea6e7 Author: Adam Dickmeiss Date: Mon Oct 17 09:41:26 2016 +0000 Version 5.18.0 commit ae326b331c1b75798604ff8c86a99d0ed46d92b2 Author: Adam Dickmeiss Date: Mon Oct 17 11:07:19 2016 +0200 Omitted MARXML indicator defaults to " " again This was the behavior until 5.16.0 which added multi-byte indicator support. commit 993d9374de9554491f7c83c90be826f44838cec4 Author: Adam Dickmeiss Date: Thu Oct 6 10:10:28 2016 +0200 Only include malloc.h if malloc_info is present. Closes #13 Fixes compilation on macOS commit 2b9db77e19e9e51c70774b3f993d79c619ca470b Author: Adam Dickmeiss Date: Wed Oct 5 14:39:23 2016 +0200 nmem: cope without POSIX threads commit c70e797c37a6dbeda4760574f34dbb65706a8182 Author: Adam Dickmeiss Date: Wed Oct 5 13:57:39 2016 +0200 Add nmem_get_status commit da43d7ca43314a20b46a04e8c7734db12f32b481 Author: Adam Dickmeiss Date: Tue Oct 4 10:04:32 2016 +0000 Version 5.17.0 commit 3cb097d7d1c4198a026569e6d82f5ac9a7272170 Author: Adam Dickmeiss Date: Tue Oct 4 12:02:45 2016 +0200 Upd NEWS commit da7b198c0a3b7a93131217b45e89966855843dc5 Author: Adam Dickmeiss Date: Tue Oct 4 12:00:18 2016 +0200 Add wrbuf_malloc_info - a wrapper for malloc_info(3) commit 2be5f299ee9ceeee4e42f67a6121010c639fd37e Author: Adam Dickmeiss Date: Wed Aug 17 11:00:10 2016 +0200 Beef up documentation on facets commit 7c508bd1a4cdd77384adf72f178c7b7442649b84 Author: Adam Dickmeiss Date: Fri Jul 8 15:16:45 2016 +0200 MARC-8 codetables: fix typos and remove trailing whitespace commit b8d540914c5ff223a39a52dca468ddd783b7e547 Author: Adam Dickmeiss Date: Thu Jul 7 11:19:48 2016 +0200 Remove trailing whitespace commit 8bca9b1b42e141d206f90103c02827c81c24f8d2 Author: Adam Dickmeiss Date: Tue May 17 16:17:53 2016 +0200 record_conv: change error for unsuported backend element Also fixes regression in the case where Libxslt is disabled and Libxml2 is enabled. commit 5af2e8f0420061c7913dc2cba18687b03913c9d6 Author: Adam Dickmeiss Date: Tue May 17 15:50:14 2016 +0200 Avoid strlen on MARC buffer. Close YAZ-872 MARC buffer memory is not 0-terminated. commit e3fd23ffc6ce9cc4d06177cb4c083d27dc69cc26 Author: Adam Dickmeiss Date: Fri Apr 29 18:25:38 2016 +0000 Version 5.16.0 commit abccd6cf425320331950d1320ea72b381e610b3d Author: Adam Dickmeiss Date: Fri Apr 29 18:24:41 2016 +0000 Add Ubuntu Xenial. Remove Ubuntu Vivid commit 8a8ffda7446db0710d727400460cf7e0d26ddc2f Merge: aad599c9 d3d58425 Author: Adam Dickmeiss Date: Sun Apr 24 18:43:54 2016 +0200 Merge branch 'gh-11'. Closes #11 commit d3d58425d1be30092efb54221724776eec9f9f13 Author: Adam Dickmeiss Date: Sun Apr 24 18:39:18 2016 +0200 Make two functions in XML marc reader static yaz_marc_read_xml_subfields and yaz_marc_read_turbo_xml_subfields were never used outside YAZ and not declared in header files. commit ffce7045088df690bcfaae044a24cd4d58af40fb Author: Adam Dickmeiss Date: Sun Apr 24 18:32:11 2016 +0200 Add marc0.marc with multi-byte indicator commit 494d6dbc3ac7de3640b0f007bdedfcf8d7dcd2dd Author: Adam Dickmeiss Date: Sun Apr 24 18:30:25 2016 +0200 Parse JSON deals with multi-byte indicator commit d7560a5903216a1ada3f4680f8a46bddb0fe9940 Author: Adam Dickmeiss Date: Sun Apr 24 16:26:45 2016 +0200 TurboMARC reading update for multi-byte indicators commit ccedda94291c3da949e63b3f667f07b23051d199 Author: Adam Dickmeiss Date: Sun Apr 24 16:25:20 2016 +0200 Update JSON creation for multi-byte indicators commit 4885eec40b257307966ac0a917bf6f4bc50e01b8 Author: Adam Dickmeiss Date: Sat Apr 23 18:16:24 2016 +0200 element_attribute_value_extract static (never used outside YAZ) commit a14378a5e198d97cd2bd2982866f3e1e9e818365 Author: Adam Dickmeiss Date: Sat Apr 23 18:14:36 2016 +0200 tag_value_extract not used anywhere so removed commit eba1ca9274669d35f729c16d0a9ac32b30cb1bef Author: Adam Dickmeiss Date: Sat Apr 23 18:13:20 2016 +0200 Turbomarc creation also updated for multi-byte indicators commit add932f8919838c73620be6b342a878524f36793 Author: Adam Dickmeiss Date: Sat Apr 23 17:56:01 2016 +0200 Make add_marc_datafield_turbo_xml static This function was never declared in a header, and, thus we assume nobody could be using it. commit 2f36adb16c0fecf56fc87e7f80a46fafe87d4cb2 Author: Adam Dickmeiss Date: Sat Apr 23 10:28:57 2016 +0200 Allow multi-byte indicators for ISO2709 reader commit e00abc5f65fcac7bb039c3a15efb591ec6483284 Author: Adam Dickmeiss Date: Sat Apr 23 10:28:37 2016 +0200 Add yaz_marc_sizeof_char commit ff3097d2e2624bfce49435e892a50aa7d09dec73 Author: Adam Dickmeiss Date: Sat Apr 23 08:50:43 2016 +0200 Update yaz_marc_write_xml for multi-byte indicators commit 104b5752e0e1891e4db784284e59fd8d720c7187 Author: Adam Dickmeiss Date: Thu Apr 21 14:28:27 2016 +0200 Start work on handling multi-byte indicators commit aad599c9fc16fbf1ba88df99ca5054cecdff48dc Merge: 7b9b025f f7857d85 Author: Adam Dickmeiss Date: Thu Apr 7 10:45:53 2016 +0200 Merge pull request #10 from dcrossleyau/master Fix typo commit f7857d8582702a46021d887daf857ec895ed6468 Author: David Crossley Date: Thu Apr 7 09:57:44 2016 +1000 Fix typo. commit 56c462f342fe28b5c5aec9bdda7f42c7406c4393 Merge: 6141c6af 7b9b025f Author: David Crossley Date: Thu Apr 7 09:48:23 2016 +1000 Merge remote-tracking branch 'indexdata/master' commit 7b9b025f4ca925ef5a1a939b989f8b35d3a17a72 Author: Adam Dickmeiss Date: Wed Apr 6 10:59:23 2016 +0000 Version 5.15.3 commit 15d3e0ce9c4c8e4afb168742358aaa50473ccbc3 Author: Adam Dickmeiss Date: Wed Apr 6 12:43:30 2016 +0200 Fix yaz_query2xml aborts for attribute type 0. Closes #9 commit 6141c6af03c4b1faa13a2027efbab0d7213cb588 Merge: eac3507c 87eced3e Author: David Crossley Date: Wed Apr 6 19:10:18 2016 +1000 Merge remote-tracking branch 'indexdata/master' commit 87eced3eeb54cdfe0de7dcdf971492fbe48a7286 Author: Adam Dickmeiss Date: Tue Apr 5 12:43:02 2016 +0200 backtrace: exit with same signal as original fired Until now with backtrace any signal would end up being an SIGABRT. commit e78f5b26109ba7437d756dc4a78f8c280acad081 Author: Adam Dickmeiss Date: Tue Apr 5 12:41:15 2016 +0200 backtrace: cancel alarm if backtrace succeeds This is to avoid "backtrace hangs" message that should not be printed and gdb be invoked twice. commit eac3507ca5301ac1e4a13faafdf2eadab527fa70 Merge: 91087da2 f8667f9b Author: David Crossley Date: Tue Apr 5 10:39:47 2016 +1000 Merge remote-tracking branch 'indexdata/master' commit f8667f9b2e4942f4f12af8755a89d1a96425b4df Author: Wolfram Schneider Date: Thu Mar 31 18:21:19 2016 +0000 test without xcode image commit 51504f5f8e4573824147391ca243764e7bf99076 Author: Wolfram Schneider Date: Thu Mar 31 18:01:19 2016 +0000 test with newer xcode7.3 commit 0079db2916dc2ca8021754dd7cf3ae7a9bb2c46c Merge: 239a1867 8a062680 Author: Wolfram Schneider Date: Thu Mar 31 18:52:37 2016 +0200 Merge pull request #8 from wschnrid/master travis ci commit 8a062680fdb55e6c140d641f437a64ea338bbc11 Author: Wolfram Schneider Date: Thu Mar 31 16:38:53 2016 +0000 make -j commit eb407905c4526573f0dd5511bcfcd3bdc4795b9b Author: Wolfram Schneider Date: Thu Mar 31 16:38:21 2016 +0000 split script targets commit 91087da27d235c30859b0919c94bef8371eef1a7 Merge: 8b8f9c95 239a1867 Author: David Crossley Date: Thu Mar 31 11:19:14 2016 +1100 Merge remote-tracking branch 'indexdata/master' commit 239a18674ea7e5e964b82a3b566103c6d0891441 Author: Wolfram Schneider Date: Wed Mar 30 15:37:04 2016 +0000 add spaces for better readability commit c1a5ab0cfcf7d2a6252c91e1fc98185c8462d954 Merge: 957eb162 0e2cb767 Author: Wolfram Schneider Date: Wed Mar 30 15:40:59 2016 +0200 Merge pull request #7 from wschnrid/xxx_travis merge travis ci commit 8b8f9c9558d7bbbcc6d9c0b732627dfbe7372e83 Merge: 2c64bed1 957eb162 Author: David Crossley Date: Thu Mar 24 10:46:39 2016 +1100 Merge remote-tracking branch 'indexdata/master' commit 0e2cb767444f8ad93279ca1f70401fac2ef2a41b Merge: 926a6b0a 957eb162 Author: Wolfram Schneider Date: Wed Mar 23 14:13:03 2016 +0000 Merge remote-tracking branch 'indexdata/master' into xxx_travis commit 957eb16268ebf1c1b6c50679849b8173359fc512 Merge: f466461d ce319437 Author: Mike Taylor Date: Wed Mar 23 08:30:31 2016 +0000 Merge pull request #6 from dcrossleyau/review-urls-1 Update some URLs. commit ce31943747913f636a458e6e2c22c421da7246da Author: David Crossley Date: Wed Mar 23 12:05:32 2016 +1100 Try to fix some broken URLs for older SRU/SRW/CQL. commit 63aa7eebddd9f6a4812e44267f58400293b341dd Author: David Crossley Date: Wed Mar 23 12:03:45 2016 +1100 Fix some broken URLs. commit 48ee2ab52aacf324ff38fe1767fabdf87ab93ccc Author: David Crossley Date: Wed Mar 23 10:42:59 2016 +1100 Fix some re-directed URLs. commit 2c64bed1ed628082de8ca74dac8cfed348dbc608 Merge: db19df41 f466461d Author: David Crossley Date: Tue Mar 22 17:18:40 2016 +1100 Merge remote-tracking branch 'indexdata/master' commit f466461dfe4720cbd478eb2798599bf47387af89 Author: Adam Dickmeiss Date: Mon Mar 21 09:51:40 2016 +0100 Update doc/common and m4 commit db19df410af002ad351acf0d49b27b23823d9a53 Merge: 398b895e 7b902fd3 Author: David Crossley Date: Tue Mar 15 11:13:17 2016 +1100 Merge remote-tracking branch 'indexdata/master' commit 7b902fd367608e4dbcea35d3da86d67de3896209 Merge: 8d3bc9e6 398b895e Author: Mike Taylor Date: Thu Mar 10 09:28:37 2016 +0000 Merge pull request #5 from dcrossleyau/master Fix references to old target bagel. commit 398b895e34e57d1a2cc5aa9f980c1a4f0ac0acec Author: David Crossley Date: Thu Mar 10 11:00:11 2016 +1100 Fix references to old target bagel. commit 926a6b0ac27bcee7eb005febb0d0e6b88dd41c16 Merge: 9253ddd0 8d3bc9e6 Author: Wolfram Schneider Date: Wed Mar 9 13:58:10 2016 +0000 Merge branch 'master' into xxx_travis commit 8d3bc9e67051266d8278a8d7bf8b9fa4a5f532bb Merge: 03bb8566 e0fe64f6 Author: Mike Taylor Date: Wed Mar 2 07:34:47 2016 +0000 Merge pull request #4 from indexgeo/master Fix typos. commit e0fe64f6303ab93a5c6329cb991683ed7f5aff12 Author: David Crossley Date: Wed Mar 2 10:29:42 2016 +1100 Unfix typo: addinfop commit d2e5dc5b9dc4e86c276a19ae9f9206c5eb5c2efa Author: David Crossley Date: Tue Mar 1 14:18:46 2016 +1100 Fix typos. commit 9253ddd087726e024ca7cbf0b65936ba15464139 Merge: 94a9904a 03bb8566 Author: Wolfram Schneider Date: Mon Feb 29 09:39:16 2016 +0000 Merge branch 'master' into xxx_travis commit 03bb85667c0848b8cdaf85dc8f9e7289458b87c5 Merge: aac7eaf9 1e5f8ab6 Author: Mike Taylor Date: Mon Feb 29 07:39:55 2016 +0000 Merge pull request #3 from indexgeo/update-doxygen-config Fix typos, which show in the Doxygen-generated docs commit 1e5f8ab6a68e072192b4264d742321f78e7d06b1 Author: David Crossley Date: Mon Feb 29 14:20:10 2016 +1100 Fix typos, which show on the front page and the "Files" section of the Doxygen-generated docs. commit aac7eaf9a10ed7dbdab46f24a15db40a4c6a04b9 Merge: 9d1a3741 4e7f75a3 Author: Adam Dickmeiss Date: Wed Feb 24 10:47:10 2016 +0100 Merge pull request #2 from indexgeo/update-doxygen-config Update Doxygen configuration file to current (1.8.11). commit 4e7f75a36d99a4f68befa5cc69ecf4c6d370ca4a Author: David Crossley Date: Wed Feb 24 18:33:51 2016 +1100 Update Doxygen configuration file to current (1.8.11). commit 9d1a37410082080120f4852b48edb236ce1a4a5d Author: Adam Dickmeiss Date: Mon Feb 22 14:20:53 2016 +0100 Fix YAZ_DAEMON_LOG_REOPEN description commit 94a9904a5b4a6678844a2227260c17249a42bd45 Author: Wolfram Schneider Date: Sun Feb 7 11:22:26 2016 +0000 nmake -> make commit 74f84e674cb94def1812187ff178dc325924d153 Author: Wolfram Schneider Date: Sun Feb 7 11:18:27 2016 +0000 try to install nmake commit 1bab3fcd0abee39077bf2e42715a6fe8834dd11a Author: Wolfram Schneider Date: Sun Feb 7 11:12:51 2016 +0000 use cmake instead nmake commit 770747891596697eb5d5daa08d68751c893c5534 Author: Wolfram Schneider Date: Sun Feb 7 10:34:31 2016 +0000 install Visual C++ commit 6ce0a6d428d0ab51fa436d3bbc7262a300c12ab1 Author: Wolfram Schneider Date: Sun Feb 7 10:22:13 2016 +0000 add appveyor.yml config commit e3372e4cb3e6d471a41ae775af4ec0ccfba4dff3 Author: Wolfram Schneider Date: Sat Feb 6 16:21:48 2016 +0000 set ENV commit 47b36ee5f8c2525f22c981f41187068191a4c2fd Author: Wolfram Schneider Date: Sat Feb 6 16:12:59 2016 +0000 configure compiler commit f8ca3a4191f502f8446c152fe6eb457c878cf3fd Author: Wolfram Schneider Date: Sat Feb 6 16:03:42 2016 +0000 enable clang again commit 471330d5080ddf486e710e30ca7bcb3572d4f08f Author: Wolfram Schneider Date: Sat Feb 6 15:55:12 2016 +0000 enable linux again commit 41c9b5fc1462215d0cf87042efbe5c3ec7409a0b Author: Wolfram Schneider Date: Sat Feb 6 15:46:02 2016 +0000 setup macos commit 4d8abb281ce7bcad20354cf7019afb86a350c42c Author: Wolfram Schneider Date: Sat Feb 6 14:55:11 2016 +0000 disable compiler commit fbdfd10e22b0de36e4b0ecd4d142c5847ae76b92 Author: Wolfram Schneider Date: Sat Feb 6 14:51:29 2016 +0000 sudo: required commit e9725f6a113871883ab944210d5c3d442373dc58 Author: Wolfram Schneider Date: Sat Feb 6 14:46:42 2016 +0000 setup & configure matrix commit 1ceae24ee62ee6ed5dceb8981fd82e0f5deeb831 Author: Wolfram Schneider Date: Sat Feb 6 14:29:30 2016 +0000 rewrite package config commit 49ed42adbf55c3e1c31020466cc0170f516aa592 Author: Wolfram Schneider Date: Sat Feb 6 14:26:50 2016 +0000 set operating system commit 9f0a9435818d5a2da5637cee68c0fb43cc880675 Author: Wolfram Schneider Date: Sat Feb 6 14:09:22 2016 +0000 fix tcl package name commit e5fa8558fd2ad2f3543e1d6d4fb722f97972ef59 Author: Wolfram Schneider Date: Sat Feb 6 13:56:25 2016 +0000 add more ubuntu packages commit ca87bfd4ae9268a87178f0c568c498f1906135c4 Author: Wolfram Schneider Date: Sat Feb 6 13:50:59 2016 +0000 create travis config file commit d1d370d865873cd9cd2484d86fe4760e8dbb37e4 Merge: 7f459311 6e175069 Author: Adam Dickmeiss Date: Wed Jan 27 17:44:36 2016 +0100 Merge pull request #1 from distobj/master Write indicator value using JSON wrbuf commit 6e175069cc1d5e4664b9706c2755b829b67f175f Author: Mark Baker Date: Wed Jan 27 10:59:05 2016 -0500 Write indicator value using JSON wrbuf commit 7f4593116818f80af091571c859eddd25822bce5 Author: Adam Dickmeiss Date: Wed Jan 20 20:31:35 2016 +0100 yaz_marc_write_iso2709: truncate if 99,999 limit is reached commit ea3530a126a20434283087b0973d3fade168d358 Author: Adam Dickmeiss Date: Wed Jan 20 20:30:43 2016 +0100 Ignore two generated XML files commit 011e572a310476e535f64512b82db5c7471a7811 Author: Adam Dickmeiss Date: Sun Jan 17 19:40:53 2016 +0100 Typo for list of debs commit 738b345708b245e67cded6d917393a80b5bd4eca Author: Adam Dickmeiss Date: Mon Jan 11 13:06:41 2016 +0000 Version 5.15.2 commit f43944a7ffc80bfcf8ec6a5ec1935c354d4bcac2 Author: Adam Dickmeiss Date: Mon Jan 11 11:04:38 2016 +0100 Happy new year commit d35bb455afe361c1f8ed360cce55e8fb75c6eec7 Author: Adam Dickmeiss Date: Mon Jan 11 11:04:11 2016 +0100 Mention configure as a script commit 2eb6e27fe677e40f53327f5af456d39df5b24edf Author: Adam Dickmeiss Date: Mon Jan 11 11:01:00 2016 +0100 Mention Github + buildconf.sh commit ccfd0bb7d8af350d358e70a3b4bedb289e2be042 Author: Adam Dickmeiss Date: Mon Jan 11 11:00:15 2016 +0100 Update list of Debian packages for buildconf.sh commit 4c57a37b6ff798585433440641d9c86a25c9092c Author: Adam Dickmeiss Date: Wed Jan 6 11:26:26 2016 +0100 Use submodules from Github commit 7b112287740b44d1dd939cea0ecca217356affd5 Author: Adam Dickmeiss Date: Thu Nov 26 10:06:18 2015 +0100 No more manifest files commit d4514445a1caea19faff82c3541a716ddfdc2b0f Author: Adam Dickmeiss Date: Tue Nov 24 14:14:20 2015 +0100 Include links to pre-compiled ICU binaries commit b687939804570b289122ca78f25b5f255ed36326 Author: Adam Dickmeiss Date: Tue Nov 24 14:14:11 2015 +0100 Update list of supported platforms commit 05f7afcaa053728864a9b1b6d7bd1a6a48701f2c Author: Adam Dickmeiss Date: Tue Nov 24 14:13:35 2015 +0100 Update doc/common commit ebfa76b327665398553785b6a00e69d119ba9297 Merge: b1a5a640 4e71d4a7 Author: Adam Dickmeiss Date: Tue Nov 24 13:54:30 2015 +0100 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit b1a5a6402e767afee10073381d842642d3a640d0 Author: Adam Dickmeiss Date: Tue Nov 24 13:52:36 2015 +0100 Win32/64 split. Use ICU compiled with VS2015 commit 4e71d4a715bca8fc6a9a1010ffa00def8c63ab1b Author: Adam Dickmeiss Date: Tue Nov 17 15:14:06 2015 +0100 Remove from ref entry header commit 81358822816ed75a14af31a0656550de1329c33a Author: Adam Dickmeiss Date: Mon Nov 16 16:01:50 2015 +0100 README.md commit 319ea8d6f518d08c1f50d8ec80899e1bc6ca7923 Author: Adam Dickmeiss Date: Mon Nov 16 13:27:13 2015 +0100 Update URL for Bison Windows version It used to be part of Git for Windows. It no longer is. commit 02b4f0ab937b62d892d3e0918439da770fe720c2 Author: Adam Dickmeiss Date: Thu Nov 12 08:54:19 2015 +0000 Version 5.15.1 commit 2bfb0b990bbbe0f9c5ef9e78b094a2063bc45f33 Author: Adam Dickmeiss Date: Thu Nov 12 09:48:02 2015 +0100 Add test case for YAZ-861 YAZ-865 commit 8484857deb143d2a71498d3b8b7a345328dac969 Author: Adam Dickmeiss Date: Wed Nov 11 21:52:15 2015 +0100 sha1: Work around older VS compilers commit 92e9ead954f1292391afde93235f0fd25891da8e Author: Adam Dickmeiss Date: Wed Nov 11 21:51:05 2015 +0100 Current YAZ are made with VS 2015 commit a6b61b9f8b6576e8159a4e7e6aee88bba7e5d07d Author: Adam Dickmeiss Date: Wed Nov 11 15:32:28 2015 +0100 Avoid using non-portable debian.h Instead use autoconf's AC_C_BIGENDIAN commit 4eb90d87b9374b30b8ea4f9d5e70d509a11d9a58 Author: Adam Dickmeiss Date: Wed Nov 11 14:50:27 2015 +0100 Fix rpn2cql fails for Bib-1 set in qry+conf YAZ-865 commit 94a0aa1a3d45b41484ac4bf81b85f90dca7f7181 Author: Adam Dickmeiss Date: Wed Nov 11 14:13:31 2015 +0100 Bundle sha1 rather than use libgcrypt/nettle commit 1b29294f1ba913fb798c3556e3fda09bfc46bb67 Author: Adam Dickmeiss Date: Wed Nov 11 09:04:25 2015 +0000 Version 5.15.0 commit 71e94b6a27e3dd1dcd8a781254a4c329de020f34 Author: Adam Dickmeiss Date: Wed Nov 11 09:03:41 2015 +0000 Add Ubuntu Wily Werewolf commit 240156e69d3a6390699644756e367fffd42891d1 Author: Adam Dickmeiss Date: Tue Nov 10 13:47:18 2015 +0100 CCL: fix other inherited attributes commit 31596bdcae098f8acea695d44c44ee5f646b4c1f Author: Adam Dickmeiss Date: Tue Nov 10 13:26:00 2015 +0100 CCL: fix r=o, r=r WRT inherited attributes YAZ-864 commit 13da404f1294cb29e30100e71b76c4b44e06cf89 Author: Adam Dickmeiss Date: Mon Nov 9 12:48:24 2015 +0000 Version 5.14.12 commit 8b9999744362603b448a74f779ff7a2b4d76c89d Author: Adam Dickmeiss Date: Mon Nov 9 13:47:46 2015 +0100 Set VS_REDIST_EXE for all architectures commit dae688b0b3ebe96d6b65385b2fa0e627ab6ce451 Author: Adam Dickmeiss Date: Mon Nov 9 13:29:01 2015 +0100 No more reachable memory with yaz_deinit_globals At least when nettle is in use (libgcrypt is hopeless) commit 84153486e91926be04dd28d4f2bda6c6ade0e005 Author: Adam Dickmeiss Date: Mon Nov 9 12:01:12 2015 +0000 Revert "Build without redis on Debian squeeze, Ubuntu Lucid" This reverts commit ad2e8b3190adb77733a744a26a08927ed026396d. We don't build for Debian squeeze and Ubuntu Lucid anymore, so this hack is redundant. Conflicts: debian/control debian/rules commit 2487937ef218d16b41294bf7d1845d164e17bfe2 Author: Adam Dickmeiss Date: Mon Nov 9 11:55:39 2015 +0000 Build with nettle on Debian/Ubuntu commit 60f0955d87a511503ce48de0e99f697e112ff3d0 Author: Adam Dickmeiss Date: Mon Nov 9 12:45:04 2015 +0100 Allow use of Nettle as an alternative to gcrypt commit 756129c2a4eaa8a0cc4e0acbc8b401083024c1e2 Author: Adam Dickmeiss Date: Mon Nov 9 12:00:14 2015 +0100 yaz_deinit_globals closes FILE log commit eec02e3b60802638aa3a105f3037814cf32af3b6 Author: Adam Dickmeiss Date: Thu Nov 5 12:50:26 2015 +0100 cs_get_host_args: allow unix:path:args notation commit 7207680c8f685c9ed33536bfd4a4878cb2616d99 Author: Adam Dickmeiss Date: Wed Oct 28 11:08:40 2015 +0100 Build with VS 2015 (2014 runtime) commit 70ce06b6fcbe3a53e94111ecedf0312848647c1b Author: Adam Dickmeiss Date: Wed Oct 28 11:08:01 2015 +0100 Fix registry keys for VC runtime commit a4a4e9d375bfbcc823e8b3820ffb23272e919004 Author: Adam Dickmeiss Date: Tue Oct 27 15:40:03 2015 +0100 Prepare to bundle VC 2015 Runtime 14.0.23026 commit 917d2c4a288a19c0da7fa98ad514288d0e045413 Author: Adam Dickmeiss Date: Tue Oct 27 15:39:38 2015 +0100 make64 does not build yaz4j commit d438b90ac17fbae25ba2554dd76f4e156f420437 Author: Adam Dickmeiss Date: Thu Oct 22 16:31:26 2015 +0200 Cleanup de-init function YAZ-863 New function yaz_deinit_globals commit 7cf33bcd4c625c2197101ebffd38513e44271be6 Author: Adam Dickmeiss Date: Fri Oct 9 15:09:34 2015 +0000 Version 5.14.11 commit 59830038599648515b34784fbab8f5befa63e185 Author: Adam Dickmeiss Date: Fri Oct 9 15:09:17 2015 +0000 Remove Ubuntu utopic commit e8001c3381e00a846e96fab5a1c6f7ca00df4f55 Author: Adam Dickmeiss Date: Fri Oct 9 16:15:42 2015 +0200 Fix RPN to CQL rejects local Bib-1 attribute set YAZ-861 commit 39671a069c30f6cc508de7692f49a01f413a5a16 Author: Adam Dickmeiss Date: Wed Oct 7 16:06:25 2015 +0200 cs_errmsg never writes to static buffer For the CSYSERR applications should check errno themselves commit ab99e2d94176eef3b1b23ef3f0f180c6d5077ea6 Author: Adam Dickmeiss Date: Wed Oct 7 16:04:43 2015 +0200 ZOOM C: tweak when connection failed is returned For cases with multiple socket addresses for some hostname, eg localhost IPV4+IPV6, the code now properly returns "connection failed" rather than "connection lost". commit 38f746ee0f3da5e620bbf3b60eb2ccc1bc647d19 Author: Adam Dickmeiss Date: Wed Oct 7 11:29:21 2015 +0200 Update doc/common commit 323805b6779bcf1befdc7cdd7f10c23b06885e0d Author: David Crossley Date: Wed Oct 7 12:57:33 2015 +1100 Various minor text tweaks. commit 0ec12c344e05f3637af9f48e6aa28a54d99f8343 Author: David Crossley Date: Mon Oct 5 15:22:20 2015 +1100 Various minor text tweaks. commit 2a624ff1daa841601aebca86c0196039da6978b3 Author: Adam Dickmeiss Date: Wed Sep 16 14:21:04 2015 +0200 Fix windows uninstall does not remove start menu shortcuts YAZ-860 commit 3cdd02c11b85c98430021bbc6413fcceda754354 Author: Adam Dickmeiss Date: Wed Sep 16 09:10:07 2015 +0000 Version 5.14.10 commit 4db60a9b1f537de4c0f04587b44be32d0701a64f Author: Adam Dickmeiss Date: Tue Sep 15 19:43:54 2015 +0200 prevent huge expansions in CCL s=sl YAZ-859 commit ba19dacdfe290bee024a23673a6e75f451e2c013 Author: Adam Dickmeiss Date: Tue Sep 15 09:02:49 2015 +0000 Version 5.14.9 commit 1426a3da9b0390bb0d928a6ee56ebf5fa0ceb0ef Author: Adam Dickmeiss Date: Tue Sep 15 10:13:27 2015 +0200 Fix segv in ZOOM_connection_fire_event_socket YAZ-858 The odr_in memory taken by handle_srw_response, and, thus if result set is destructed before we expect the HTTP response (hres) it may be come invalid. Therefore we inspect hres before the call to ZOOM_handle_sru. commit 7c6b3363478950a3a5c7f448e5bfa6f4ea19fbab Author: Adam Dickmeiss Date: Tue Sep 15 10:05:10 2015 +0200 Fix possible deadlock in backtrace (2nd attempt) YAZ-856 An alarm is set up so that backtrace is terminated if it hangs. Even if backtrace the handler also attempts to spawn gdb. commit 30af0a1ebbea75c3e757eb03d3f988c61fce8511 Author: Adam Dickmeiss Date: Mon Sep 14 13:53:34 2015 +0000 Version 5.14.8 commit c5b92d32f5619eae0b99c4bfb39374e8ef675e34 Author: Adam Dickmeiss Date: Mon Sep 14 15:49:47 2015 +0200 Remove ununsed function ccl_rpn_dup commit 4f3f16d519137001a916178e28ad1dff8b986a7d Author: Adam Dickmeiss Date: Mon Sep 14 15:48:43 2015 +0200 Fix SEGV for s=sl for 3 terms and syntax error YAZ-857 commit de94629a46584eafe114f740ed3000b26dd42ffb Author: Adam Dickmeiss Date: Sun Sep 13 19:31:45 2015 +0000 Version 5.14.7 commit fcb40f9ed16ce6a8ef86997890057af0f7692377 Author: Adam Dickmeiss Date: Sun Sep 13 21:12:40 2015 +0200 backtrace: add \n in error msg commit 7cda3530b0d64128462118433a9f69645f49a39b Author: Adam Dickmeiss Date: Sun Sep 13 21:08:30 2015 +0200 Fix possible deadlock in backtrace YAZ-856 commit b0afe9a4eb412d5d605450ea715dcd033f45b878 Merge: e94e943c a7261ce1 Author: Wolfram Schneider Date: Tue Sep 8 12:21:49 2015 +0000 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit e94e943c08f4f9265c2ff211d74984166b289841 Author: Wolfram Schneider Date: Tue Sep 8 11:45:37 2015 +0000 documentation: libreadline5-dev is retired, recommend to install libreadline-gplv2-dev commit 44c26c79fddc6d28b4da0a0fd5788eca526b390e Author: Wolfram Schneider Date: Tue Sep 8 11:42:23 2015 +0000 update documentation / help text commit a7261ce1171ca8e90561b2055e6198e15208bcd6 Author: Adam Dickmeiss Date: Tue Sep 8 09:02:05 2015 +0200 Fix docpath example commit a996c33edb96a3273c81d799189b33437ad6ae18 Author: David Crossley Date: Tue Sep 8 14:10:10 2015 +1000 Various minor text tweaks. commit 086d0dd7b180c786daf78359e1a7b94c656dd855 Author: Adam Dickmeiss Date: Mon Sep 7 17:26:20 2015 +0200 yaz-ztest: set named_result_sets flag commit d802116821b20c1dac70011b1ff36edfc4a3119b Author: David Crossley Date: Thu Sep 3 15:53:19 2015 +1000 Various minor text tweaks. commit f332be40c2edee783d37633597b4f7ac3b22fc3e Author: David Crossley Date: Wed Sep 2 12:26:12 2015 +1000 Refer to full name of Apache products at first mention, as per ASF trademark guidelines. commit 3b046fa5df64b76cc6a28f562c135c06d7a428a7 Author: David Crossley Date: Wed Sep 2 12:19:38 2015 +1000 Various minor text tweaks. commit 02ef0ddc8ff17fa5053089af7d5d93ea1f2182ea Author: David Crossley Date: Wed Sep 2 12:18:15 2015 +1000 Various minor text tweaks. commit 87faebe8ef5cab8f6df86f387e8b919b7b9897a8 Author: Adam Dickmeiss Date: Mon Aug 17 12:41:33 2015 +0000 Version 5.14.6 commit 473f3071b86a40479e38e3fe4d434c0d2bf03379 Author: Adam Dickmeiss Date: Mon Aug 17 14:38:01 2015 +0200 Fix yaz-client command args parsing broken YAZ-855 Bug introduced in 5be87e7a04c7219b31cefc0a3 commit 686414b0ac6446cd55610d5203d61a32672e2203 Author: Adam Dickmeiss Date: Thu Aug 6 10:23:41 2015 +0000 Version 5.14.5 commit 7673cf27f5be351a18a5d3ea1baf6c4aee06eb3b Author: Adam Dickmeiss Date: Wed Aug 5 13:43:22 2015 +0000 Remove Debian squeeze (compat 8) commit 8e27c4a44da61c8d639187f2b914ef7d432baed5 Author: Adam Dickmeiss Date: Wed Aug 5 15:29:19 2015 +0200 debian compat 9 YAZ-854 commit d7909431b9e73132e227463279bc8fe614c49184 Author: Adam Dickmeiss Date: Wed Aug 5 13:23:29 2015 +0200 rpn2cql diagnostics: provide use attribute addinfo YAZ-853 commit 5ae31048f134f9f9db937db6847edef583123a90 Author: Adam Dickmeiss Date: Tue Aug 4 12:19:09 2015 +0000 deb: deprecated substitution ${Source-Version} YAZ-852 commit 5be87e7a04c7219b31cefc0a3bd02fe5a255430c Author: Adam Dickmeiss Date: Wed Jul 29 15:36:51 2015 +0200 Fix yaz-client: semicolon terminates arguments YAZ-851 commit f575db041e99b9c7455e5251fe677d145c98f6f0 Author: Adam Dickmeiss Date: Wed Jul 29 08:54:34 2015 +0000 Version 5.14.4 commit eb556013557ef8c9e76c52614f88c059ec443c95 Author: Adam Dickmeiss Date: Tue Jul 28 13:04:55 2015 +0200 Solr >= 5.1 / content type text/xml YAZ-850 commit 74168354bcd4a020093adb4a1c0981e35ed340db Author: Adam Dickmeiss Date: Mon Jun 29 11:14:20 2015 +0000 Version 5.14.3 commit bbfdba5c15c113a65b0402de4b60643e2dd64cc2 Author: Adam Dickmeiss Date: Mon Jun 29 11:11:00 2015 +0000 Add centos7 commit 2327be4f0be093a2f87e2b2ac91288b81883070b Merge: 7c4d6e0f b64c8952 Author: Adam Dickmeiss Date: Fri Jun 26 21:30:42 2015 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 7c4d6e0fc700107e781c668ebd4ba0ac79f843b3 Author: Adam Dickmeiss Date: Fri Jun 26 21:29:09 2015 +0200 rpn2solr: structure, relation problem for serverChoice YAZ-849 commit b64c8952aa2cba7c856634d4d26ac0f8ec6f546c Author: Adam Dickmeiss Date: Mon Jun 22 16:47:35 2015 +0200 Fix idmetaversion strips n SA-743 commit a643b7e1c8b5643c3b3f78fe845745705a305fe0 Author: Adam Dickmeiss Date: Mon Jun 22 16:46:55 2015 +0200 Extend documentation of extended package type commit 92f596bde85d55acdd37df9c8d2323dd1b23f6a2 Author: Adam Dickmeiss Date: Mon Jun 22 11:41:37 2015 +0200 Windows: one NSI file again YAZ-848 commit da79b59082e749f9a9f40fd9805da5c81d34c4f3 Author: Adam Dickmeiss Date: Sat Jun 20 17:29:59 2015 +0200 Windows: Change check for vcredist YAZ-848 Use key for installer: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\UUID commit cd6fda1153b27b8f1df87110c93a51c53f0655ea Author: Adam Dickmeiss Date: Thu Jun 18 15:40:06 2015 +0200 Windows: bundle VS runtime exe YAZ-848 commit 3d757077b85e1f9d6227773f9ac716edeee18911 Author: Adam Dickmeiss Date: Thu Jun 18 15:39:17 2015 +0200 Avoid specifying YAZ4J_DIR for win64 Because the yaz4j is same sibling as for the win32 (default). commit 6202af8d37d028f08b17f82fd1c07f97c8d60cb4 Author: Adam Dickmeiss Date: Wed Jun 17 21:06:43 2015 +0200 Add runtime DLL settings for VS 2015 commit 22a58a7d5f716dc27824369f06b5ce4ad7b81588 Author: Adam Dickmeiss Date: Tue Jun 16 16:09:47 2015 +0200 Extend libxml2 installation on Windows commit af209bda301cb2bd2e469aff9b2a106926b48bb2 Author: Adam Dickmeiss Date: Mon Jun 15 17:10:05 2015 +0000 Version 5.14.2 commit 871c6b4f403790572c3501ec68d8ea7d12e883f7 Author: Adam Dickmeiss Date: Mon Jun 15 15:34:23 2015 +0200 Remove ZOOM lsg msg YAZ-846 commit 1352fba44fc02837055059fd137806c719fd2605 Author: Adam Dickmeiss Date: Mon Jun 15 15:09:18 2015 +0200 Document zoom extraArgs YAZ-817 commit ba234c5db2c8201ce9495b43533f7655975bfde1 Merge: 4d1450cc 56b8a451 Author: Adam Dickmeiss Date: Mon Jun 15 15:00:15 2015 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 4d1450cc691292cef5bcfdd41cefc030e4dabbf6 Author: Adam Dickmeiss Date: Mon Jun 15 14:58:36 2015 +0200 Fix ZOOM: crash extended services diagnostics YAZ-846 The immediate fix is to prevent ZOOM_set_dset_error from removing current task from connection. This, however, has been assumed in a number of places so this fix is rather large unfortunately. commit 56b8a45139df91927f39fe1629c4483a1700f331 Author: Adam Dickmeiss Date: Thu Jun 11 18:28:48 2015 +0000 Version 5.14.1 commit a8f3253d975333843cd8005300f794db58f57323 Author: Adam Dickmeiss Date: Thu Jun 11 20:25:08 2015 +0200 Make yaz_log_reopen async-signal safe YAZ-845 commit 1cb13d30835efee957d72558d419e78de9804e8b Author: Adam Dickmeiss Date: Tue Jun 9 20:41:29 2015 +0200 Cosmetic change: use 0 rather than \0 for pointer commit cb2e3cdb374b39333a99b902f6a1ef151b6246a4 Author: Adam Dickmeiss Date: Mon Jun 8 13:11:13 2015 +0000 Version 5.14.0 commit 6e8f854c8a6e4c4c8993bfd728367d1092a3108c Author: Adam Dickmeiss Date: Mon Jun 8 14:58:17 2015 +0200 CCL: fix leak on syntax errors with split-list commit 1119a1ee7eba10587a6087afc8bfa39d694043d8 Author: Adam Dickmeiss Date: Mon Jun 8 14:57:52 2015 +0200 CCL config example with two use atttributes commit c1efad57973e8a2442a537dabbb738e1af7d8c28 Author: Adam Dickmeiss Date: Sun Jun 7 11:05:21 2015 +0200 Revert change in default.bib WRT YAZ-844 commit e484d47e2e06b836878786d9772d01cb764913c7 Author: Adam Dickmeiss Date: Sat Jun 6 20:06:21 2015 +0200 CCL: re-factor and use internal utility ccl_rpn_node_mkbool commit 5921175c5859c16c2ba411999831b8aaf64917b4 Author: Adam Dickmeiss Date: Sat Jun 6 19:50:44 2015 +0200 CCL: split-list deals with multiple use attr YAZ-844 commit 81e668042ca6fcae703a82e2af9afd99a64322f8 Author: Adam Dickmeiss Date: Sat Jun 6 19:34:47 2015 +0200 CCL: fix regression introduced in YAZ-781 commit 1a219938c1325105582cdbc2c9a34b6fc3cdf191 Author: Adam Dickmeiss Date: Sat Jun 6 14:12:30 2015 +0200 CCL: split-list deals with use attr YAZ-844 commit c95d4ba97774c6feff8579544c36bf22b5d35976 Author: Adam Dickmeiss Date: Thu Jun 4 17:16:27 2015 +0200 CCL: And-list / sub-phrase split-out YAZ-844 Special structure config s=sl enables this. commit df60350f9737923dce347e59b9c4cafa789ab7aa Author: Adam Dickmeiss Date: Wed Jun 3 15:57:05 2015 +0200 CCL: slight reformat commit ba058997e52b990c7fa140301a1970be96ab6a4b Author: Adam Dickmeiss Date: Wed Jun 3 14:48:04 2015 +0200 CCL: slightly different point of error return Ensure that parser has advanced in any case. commit 203519066271f3449d1c4401ed7408f9da5e58ec Author: Adam Dickmeiss Date: Wed Jun 3 14:46:49 2015 +0200 Move code from search_term_x to ccl_term_on_use commit 349f8f12502e38018d65da6a6b89cdc95992496a Author: Adam Dickmeiss Date: Wed Jun 3 14:12:22 2015 +0200 Remove YAZ_781 def (=1) YAZ-781 commit dcbeb5cadb376882cf4ca64fc5c27d3718208e3a Author: Adam Dickmeiss Date: Wed Jun 3 14:11:03 2015 +0200 Set defType=lucene if not already set YAZ-736 commit 25235a16bedf28aeb6e1129bcaef77d42090124e Author: Adam Dickmeiss Date: Wed Jun 3 11:10:47 2015 +0200 Dont specify Solr query type YAZ-736 commit d483a4148476ad1bf6f92ffb9d1c961805a9c428 Author: Adam Dickmeiss Date: Mon Jun 1 11:14:00 2015 +0200 Remove Ubuntu Saucy commit 6533da485c4fcf4bc1bb6d70d0b18b13602381ff Author: Adam Dickmeiss Date: Fri May 29 08:09:56 2015 +0000 Version 5.13.0 commit 2ecbd5b9ef01b856c6dfa13023ae361fc71b7c44 Author: Adam Dickmeiss Date: Fri May 29 08:09:48 2015 +0000 Remove two obsolete Doxygen directives commit d654b817f2bdb80102dd663d78f31ab3eea4f6bd Author: Adam Dickmeiss Date: Thu May 28 13:51:54 2015 +0200 Add lock/unlock for YAZ log writes YAZ-843 commit 8df42b78dbe63f893e6f004b3c711c43f414f2a2 Author: Adam Dickmeiss Date: Fri May 22 10:26:33 2015 +0000 Version 5.12.2 commit 870d2233f4071fc1096e4adb41ed87380a2f4bce Author: Adam Dickmeiss Date: Fri May 22 10:46:03 2015 +0200 Add tests for cs_get_host_args YAZ-842 commit 4f75f882c49b802a366ef0b8c528c7e688c53b4b Author: Adam Dickmeiss Date: Fri May 22 10:45:28 2015 +0200 Fix incorrect parsing of URLs @:9999/somebase&url=http://some.host YAZ-842 commit cd86d90b86df0d534f35bc8308ed54105b9cb81c Author: Adam Dickmeiss Date: Wed May 13 09:27:11 2015 +0000 Version 5.12.1 commit 04aeb72237a5ed1b57b21c9b3610e7a68950ce83 Author: Adam Dickmeiss Date: Tue May 12 15:54:28 2015 +0200 Revert YAZ-830 fix (hack) The YAZ-833 fix is better commit 52c4f1b1dee821e201478b68d23edb6cd54c95a7 Author: Adam Dickmeiss Date: Tue May 12 15:47:16 2015 +0200 yaz-client: deal with excess bytes HTTPS case YAZ-833 commit d84e4c3cd444d04aee7beeadb5bb0ae061ee24c9 Author: Adam Dickmeiss Date: Tue May 12 15:26:27 2015 +0200 ZOOM C: deal with excess bytes HTTPS case YAZ-833 commit e2a9f7ce085c4c39cf1689f30a860fb6445cd346 Author: Adam Dickmeiss Date: Mon May 11 14:56:38 2015 +0200 Allow Windows installer for PATH to be updated YAZ-841 commit b8d7ac4d30477a8700bd1a68d437be3fcff05193 Author: Adam Dickmeiss Date: Mon May 11 14:51:36 2015 +0200 Allow version.nsi to be generated on Windows commit c9c54c9f75cfea59f26489d1b0ef011dafa4297e Author: Adam Dickmeiss Date: Fri May 8 18:58:34 2015 +0000 Add Ubuntu Vivid 15.04 commit 800e0637cfe783fa9966e11712b7e20023ba2245 Author: Adam Dickmeiss Date: Fri May 8 13:14:55 2015 +0000 Version 5.12.0 commit 9a50808021be48e8ff272f762b9f8245330a79e4 Author: Adam Dickmeiss Date: Fri May 8 14:55:27 2015 +0200 Allow Content-Type application/sru+xml YAZ-840 commit b2bc97df294f5da6c93e1119a42536b23afce8ef Author: Adam Dickmeiss Date: Fri May 8 14:53:12 2015 +0200 New yaz_xml_get_prop utility YAZ-839 commit f0379c36caadf35c41eb2acb7efad8aadaff0d68 Author: Adam Dickmeiss Date: Fri May 8 13:13:55 2015 +0200 Avoid warning when GNUTLS is not in use commit 75fff8a1c0b9deb4b402475a408fc69bc2b06a13 Author: Adam Dickmeiss Date: Fri Apr 24 10:37:37 2015 +0200 Fix zebrasrv [warn] ir_session (exception) YAZ-838 commit 67791b7efdc55585d77c3889699c9fe155a9abe6 Author: Adam Dickmeiss Date: Wed Apr 8 14:27:56 2015 +0200 Document itemorder-setname and list all ILL options commit 0793e4fbd909aa2b9030c7e0a69fee064c86d36a Author: Adam Dickmeiss Date: Tue Mar 31 13:17:57 2015 +0000 Version 5.11.0 commit a30e26753188529e2c8c896e9780e34d196d16d8 Author: Adam Dickmeiss Date: Tue Mar 31 14:58:29 2015 +0200 yaz-icu option -o writes original string as well This changes the output and so test results must be updated. yaz-icu now uses new facilities of YAZ-836. commit 35c32d033bf5d7201cb72a68d88e118e1851dc40 Author: Adam Dickmeiss Date: Tue Mar 31 14:54:12 2015 +0200 Extend get_org_info (snippets) to return original string YAZ-836 Two new functions have appeared: icu_chain_get_org_info2 and icu_iter_get_org_info2 with a 4th parameter being a pointer to the original string. commit 073a678e656f02d76ddbd5592600abf94d943ea7 Author: Adam Dickmeiss Date: Tue Mar 31 11:55:00 2015 +0200 Fix tcpip.c compilation failure on VC9 YAZ-835 commit eeee03de7fb33d03727696236aafd65b0e36e068 Author: Adam Dickmeiss Date: Mon Mar 30 16:19:15 2015 +0200 Test case for YAZ-834 commit db0eb0996fc35e065bbf995f34c86ba4cd9dfb0f Author: Adam Dickmeiss Date: Mon Mar 30 16:16:48 2015 +0200 Fix icu_iter_get_norm returns invalid size for some input YAZ-834 The icu_iter_get_org_info returns information based on string as it appears on tokenize step. commit 13736900c0e6209ee7acb0d04fecdb636f8ba86a Author: Adam Dickmeiss Date: Fri Mar 13 11:03:50 2015 +0000 Version 5.10.2 commit 1aa95d94a0084a5528b97807033b4833e8c201c4 Author: Adam Dickmeiss Date: Fri Mar 13 11:55:35 2015 +0100 Deal with excess bytes in HTTP response for keepalive YAZ-830 commit 20c28e99eaa71d4b73e8c03c8cfaf23653948da7 Author: Adam Dickmeiss Date: Fri Mar 13 11:14:08 2015 +0100 Refactor ssl_put and tcpip_put to one function YAZ-832 commit 7bfb3050edda3cfa84906284a329e3f7fb017e24 Author: Adam Dickmeiss Date: Fri Mar 13 11:12:29 2015 +0100 Simplify tcpip_get a bit YAZ-831 commit dc86a5103817732735d2591d3775114a86de94ae Author: Adam Dickmeiss Date: Wed Mar 11 13:46:24 2015 +0100 Refactor ssl_get and tcpip_get to one function YAZ-831 commit 077c4e7bb226de0f6414674e01a838498a49867b Author: Adam Dickmeiss Date: Wed Mar 11 13:26:18 2015 +0100 Fix SEGV yaz-client with SRU target www.bergen.folkebibl.no/cgi-bin/sru YAZ-829 This does not fix the decoding probelm with excessive bytes persists YAZ-830 commit 0f24d89832c8100312b48b9bf58a5c0eba877f93 Author: Adam Dickmeiss Date: Mon Mar 9 12:27:02 2015 +0100 Fix buffer overflow in cmd_elements YAZ-828 commit 853f930f2e7eb9c0735ead54628ff87de9d7cfe8 Author: Adam Dickmeiss Date: Tue Mar 3 15:23:53 2015 +0000 Version 5.10.1 commit 0fec07bf243fbf5a20b4881e428c053a56617e2d Author: Adam Dickmeiss Date: Tue Mar 3 16:20:49 2015 +0100 Fix test_sru.sh fails in pazpar2 YAZ-826 commit dca8928db421aa8750ac9ffead1a5c09a85f4f8b Author: Adam Dickmeiss Date: Tue Mar 3 12:27:07 2015 +0000 Version 5.10.0 commit 03397c97131718c46a657317ace96d7c59473b08 Author: Adam Dickmeiss Date: Tue Mar 3 13:14:47 2015 +0100 Fix proxy mode for url library YAZ-825 commit 9021ba4aa6fcdbdd177073d44edd03a86d70198f Author: Adam Dickmeiss Date: Tue Mar 3 12:30:41 2015 +0100 Use CONNECT for SSL backends and for Z39.50 thru HTTP proxy YAZ-825 Introduce cs_create_host2 which returns if connection should be proxy aware (HTTP:absoluteUri or Z39.50 proxy:vhost in init).. For CONNECT, the connection is NOT proxy aware (no absoluteUri and no Z39.50 vhost). commit b8cbf8f36033eb692b79b7e97207baa9904f0a9f Author: Adam Dickmeiss Date: Tue Mar 3 12:30:16 2015 +0100 Ensure event is still CS_CONNECT part of YAZ-825 commit 0b121738c22cd67b153792d645746447d8a81767 Author: Adam Dickmeiss Date: Mon Mar 2 15:14:30 2015 +0100 connect works with both SSL and TCP connections YAZ-825 commit 8fb781d91bd3f8bd73dc30b4a1bdc23a69120d87 Author: Adam Dickmeiss Date: Mon Mar 2 10:50:56 2015 +0100 Part 2 of http proxy fails with yaz-client YAZ-824 commit 1349cb3d913df6ec4fad5d5f185de8fec01b835e Author: Adam Dickmeiss Date: Mon Mar 2 10:34:54 2015 +0100 Fix http proxy fails with yaz-client YAZ-824 commit 27a317565e0cc11bb50ee2cc78cd86594c30164a Author: Adam Dickmeiss Date: Fri Feb 6 14:03:36 2015 +0000 Version 5.9.1 commit a7718c404d9f9317caf075a1d1bbacc1484018a7 Author: Adam Dickmeiss Date: Fri Feb 6 13:04:13 2015 +0100 Simple refactor due to yaz_match_xsd_element 0 check YAZ-822 commit 527dee673a04d80bd3002e4d7db7e754bb3b2eca Author: Adam Dickmeiss Date: Fri Feb 6 13:03:17 2015 +0100 Test case for YAZ-822 commit a5043f3ecfd59cd1f788f982f475abdc11327997 Author: Adam Dickmeiss Date: Fri Feb 6 13:01:32 2015 +0100 Fix 0 ptr reference for OPAC records from XML YAZ-822 commit 5c3d5999d1588a3963435412af22ec993b22e391 Author: Adam Dickmeiss Date: Mon Feb 2 10:30:52 2015 +0000 Version 5.9.0 commit 4588c6059ab91814bcfe2da9a4c956d99ec8dc23 Author: Adam Dickmeiss Date: Mon Feb 2 11:19:20 2015 +0100 daemon reopen flag change ownership of logfile to -u uid YAZ-819 commit bb84694ae5b1951689fe049bef536e5a73deb208 Author: Adam Dickmeiss Date: Wed Jan 28 16:46:56 2015 +0100 make yaz daemon facility to re-open log file YAZ-818 commit ffc8ea2eb23fe8c74fbeb96d05b31c477767923f Author: Adam Dickmeiss Date: Wed Jan 28 14:32:34 2015 +0100 Add check for integer overflow in odr_write YAZ-816 commit 49a4d29a88820425b7d88b8550ca5e4bf5a42adb Author: Adam Dickmeiss Date: Tue Jan 13 13:30:57 2015 +0000 Version 5.8.1 commit 50143446837df6792c0d59042c7c78fd41fa7aa7 Author: Adam Dickmeiss Date: Tue Jan 13 14:12:19 2015 +0100 record conv: select return org record if no x-path match YAZ-814 commit f24766f1e9fc5404fc0b512af8607d7f7054f4be Author: Adam Dickmeiss Date: Tue Jan 13 13:55:52 2015 +0100 retrieval: pick matched element-set rule YAZ-813 commit 8cb8947e3a7bff4dbf8f124871cb4905df1adce7 Author: Adam Dickmeiss Date: Tue Jan 13 13:54:51 2015 +0100 Fix crash in record conv rule select YAZ-812 commit 2f570511e1ca2d63705dc425e9e7bc3f3d744f64 Author: Adam Dickmeiss Date: Fri Jan 9 11:11:33 2015 +0000 Version 5.8.0 commit 63fb93940f1ad82877a3281605f7073b7e2ddf3a Author: Adam Dickmeiss Date: Fri Jan 9 12:11:16 2015 +0100 test_record_conv: missing yaz_record_conv_destroy commit 417ea0996dadd8b89ab767bfbfbd0aaaf64f07ad Author: Adam Dickmeiss Date: Fri Jan 9 11:06:47 2015 +0000 record_conv: remove fprintf and properly free select conv commit 80d0b86c41a5934878cb51657e92060909f320f4 Author: Adam Dickmeiss Date: Thu Jan 8 14:52:55 2015 +0100 record_conv: selection by X-Path YAZ-811 commit a7700a89cbccc75a841583be64b0ec1902220193 Author: Adam Dickmeiss Date: Wed Jan 7 13:03:58 2015 +0100 Document record render parameters - including base64 commit fbc1007d33bbaf966cc562febcf5a2d24253f05d Author: Adam Dickmeiss Date: Tue Jan 6 09:28:15 2015 +0000 Version 5.7.3 commit 6dc532f9c0278f7156e2940285247442681ddbf7 Author: Adam Dickmeiss Date: Tue Jan 6 09:25:09 2015 +0000 Bump year to 2015 commit 2b1f30bfd76fe82ff850f41508ae7a71b42e6be1 Author: Adam Dickmeiss Date: Mon Jan 5 15:34:17 2015 +0100 Fix application/x-www-form-urlencoded + empty YAZ-810 commit 66fded781f0dc83295c75dc35c4c6cc422307550 Author: Adam Dickmeiss Date: Mon Jan 5 14:09:32 2015 +0100 yaz-iconv: remove -X from example YAZ-809 commit 4c00ecb5fb64580b3f36cdbc04dc99855bc7f413 Author: Adam Dickmeiss Date: Mon Jan 5 14:08:53 2015 +0100 yaz-iconv: fix typos commit 90500878bfdf57e7c10ed4dc306b82fb9423e611 Author: Adam Dickmeiss Date: Wed Dec 17 14:20:59 2014 +0100 Fail hard if Bison is not found YAZ-808 commit 5d2037ccd6b74ec67f662a83477820792b7172b3 Author: Adam Dickmeiss Date: Tue Dec 16 10:24:15 2014 +0000 Version 5.7.2 commit 22138e4a2a4655010abe40daed42593d040bd6e4 Author: Adam Dickmeiss Date: Tue Dec 16 11:09:57 2014 +0100 Enable yaz4j again commit 652b518dd2393b9ab6bafaf384ca3bbd8a746f18 Author: Adam Dickmeiss Date: Fri Dec 12 14:00:25 2014 +0100 Nmake: move ICU_VER to top commit 11ed1645174d8ca8d8dcf5ef2bbe91e70a4a3e00 Author: Adam Dickmeiss Date: Fri Dec 12 13:21:04 2014 +0100 Use term Windows rather than win32 commit f1335560fa908652518cec29aab02b4e95eb56e5 Author: Adam Dickmeiss Date: Wed Dec 10 14:54:35 2014 +0000 Fix daemon: parent process stops before child YAZ-806 Try to fix the situation where parent process stops before child has acknowledged it .. SIGUSR2 back! commit f16fe49dbe30ef1e846958a09c0d2924a24c9be5 Author: Adam Dickmeiss Date: Wed Dec 10 15:03:24 2014 +0100 daemon: log message when keepalive stops commit 7a8a05adc0264c2dabad740830917e0eda4ad3ad Author: Adam Dickmeiss Date: Wed Dec 10 11:49:18 2014 +0100 Mention VS 2013 commit 0edeb96ed602b8f04d4902f9dd05a7a1d78b9217 Author: Adam Dickmeiss Date: Wed Dec 10 11:49:05 2014 +0100 Update doc/common commit dd37dbb261ac22f4d12bae1ec70236f51763051f Author: Adam Dickmeiss Date: Wed Dec 10 11:35:35 2014 +0100 backtrace: show error if pipe fails YAZ-805 commit 7f79b3a521ea4d5d4e89f8659324019cecc0fe8a Author: Adam Dickmeiss Date: Wed Dec 10 11:33:23 2014 +0100 Add link to our own Libxml2/Libxslt binaries for Windows commit 33025278d26febe3111cdec595e1f9331222086c Merge: 34886b04 808b7f27 Author: Adam Dickmeiss Date: Tue Dec 9 13:36:21 2014 +0100 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit 34886b048134b852abade14b9e535ac90f00093d Author: Adam Dickmeiss Date: Tue Dec 9 13:34:31 2014 +0100 Update to VS 2013 YAZ-804 Temporarily disable yaz4j for now (should be part of allj rule) commit 808b7f27ef276184df827786afa01f8f313aa4f6 Author: Adam Dickmeiss Date: Mon Dec 8 15:35:24 2014 +0100 Update information about Windows installation YAZ-804 commit 5c314a1f313d6bb6803a0863e0df76bf83ead4df Author: Adam Dickmeiss Date: Mon Dec 8 15:30:43 2014 +0100 Use libxml2 2.9.2/Libxslt 1.1.28 - part of YAZ-804 commit d7e028ba0de38f6060f53cf75ca7246c402eb34f Author: Adam Dickmeiss Date: Mon Dec 8 15:30:20 2014 +0100 Pass /manifest option always YAZ-804 Seems necessary on Visual Studio 2013. commit bfe768e3b0cf959ed9982a7b6ff6dc9e906820f4 Author: Adam Dickmeiss Date: Fri Dec 5 11:41:04 2014 +0100 avoid of fix warnings issued by Visual Studio YAZ-803 Add some type casts and in other cases change integer type. commit 28d3e3b08a856a66cb90ebf08787f8fa27a772eb Author: Adam Dickmeiss Date: Thu Dec 4 14:58:08 2014 +0100 Enable yaz backtrace for programs YAZ-802 commit cca16fae6ec1295a9517731ceb5672eafe3ad896 Author: Adam Dickmeiss Date: Thu Dec 4 14:47:31 2014 +0100 Test yaz-marcdump without character set conversion A test case for YAZ-801 commit 5e32cb44eba42ca45f4749d9c14d70a31edd62fc Author: Adam Dickmeiss Date: Wed Dec 3 16:37:46 2014 +0000 Version 5.7.1 commit 3d6e2f0931ae87fe01e857d4573d946f6cd8e6f1 Author: Adam Dickmeiss Date: Wed Dec 3 17:34:43 2014 +0100 Fix yaz-marcdump segfault YAZ-801 commit 675adde8432411979997c92351efe5efce0bc319 Author: Adam Dickmeiss Date: Mon Nov 24 14:49:50 2014 +0000 Version 5.7.0 commit 55b4bc7eb9295ce335fad273d08d82d62ce4b7ea Author: Adam Dickmeiss Date: Mon Nov 24 15:43:53 2014 +0100 Fix compilation on windows for new backtrace stuff commit 51e1ca7946289042c3c09e92afc1c1c465f5d870 Author: Adam Dickmeiss Date: Mon Nov 17 15:17:42 2014 +0100 Dump backtrace in case of SIGABRT, SIGSEGV YAZ-787 New function yaz_enable_panic_backtrace which enables backtrace handler for current process. The handler will call backtrace always, then gdb to provide as much detail as possible. commit f1e5f52fc3d92a50fbd34698cb6047d04dcc4225 Author: Adam Dickmeiss Date: Mon Nov 17 12:26:24 2014 +0000 Version 5.6.0 commit 79e492b21bc47563655bf044a6e5710c06a5fc9d Author: Adam Dickmeiss Date: Fri Nov 14 21:34:23 2014 +0100 Fix marc8/utf8 detection in yaz-marcdump Also update test_marccol.sh by putting proper leader in resulting MARC record. commit 8ceaeefe2e491935cba91f56007308be6e4996e6 Author: Adam Dickmeiss Date: Fri Nov 14 15:03:08 2014 +0100 marc8 + ISO2709 checks for leader 9 YAZ-800 commit 1b7419b08b3ac1d58bc8a147a5a563174276e151 Merge: 854382b8 04966981 Author: Adam Dickmeiss Date: Tue Nov 4 11:22:44 2014 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 854382b8be93e0673106fa27474a01149b2a04ce Author: Adam Dickmeiss Date: Tue Nov 4 11:21:58 2014 +0100 Fix cs_put may reconnect if send fails YAZ-798 commit 049669818c2933243d5a578e4111b75278b77407 Author: Adam Dickmeiss Date: Mon Nov 3 11:40:02 2014 +0000 Version 5.5.1 commit e3e6a89b0ebc5270208139c22d68735ee6626a19 Author: Adam Dickmeiss Date: Sun Nov 2 08:41:30 2014 +0000 Fix cannot build YAZ on jessie : libgnutls-dev is gone YAZ-797 commit 7cd90b94c031cdd9e8dc677dd9df27de971c4a01 Author: Adam Dickmeiss Date: Mon Oct 27 12:37:24 2014 +0100 Add version and date in NEWS commit 95ae35ac8ff301592032968b3ae8e666904556ad Author: Adam Dickmeiss Date: Mon Oct 27 10:47:19 2014 +0000 Version 5.5.0 commit 45a560b61e36aa01d99ebdb435c0896d3ce86a6d Author: Adam Dickmeiss Date: Mon Oct 27 10:47:06 2014 +0000 Add Ubuntu utopic 14.10 commit b822082114c8d580461eb58ff90de9a92e397b90 Author: Adam Dickmeiss Date: Wed Oct 22 15:34:33 2014 +0200 Extended comstack with outgoing IP YAZ-795 commit ad254547a6fc4d5dddbdf09e97b7c8ee38c8f0aa Author: Adam Dickmeiss Date: Mon Oct 20 12:49:33 2014 +0000 Version 5.4.4 commit c36351d51f39106b5cf6c81b51c25e3171a9b92a Author: Adam Dickmeiss Date: Mon Oct 20 10:01:52 2014 +0200 Add YAZ_EXPORT to cql_transform_r fixes YAZ-793 commit 9c155bdee8a61ed559b197bc0b2bf8c38caf9264 Author: Adam Dickmeiss Date: Wed Oct 8 13:53:12 2014 +0000 Version 5.4.3 commit 9fc22b417210e4c3fa2c8bf3b005cbf74f3c4c03 Author: Adam Dickmeiss Date: Wed Oct 8 09:57:09 2014 +0200 Fix uri array may overflow in yaz_solr_encode_request YAZ-775 commit f00caf7c3f8e70278f6ada47a1f5da79a8ba6858 Author: Adam Dickmeiss Date: Tue Oct 7 19:39:57 2014 +0200 Add test for empty term in RPN to Solr conversion commit 174b03578581f79852af95b878624013a15f540e Author: Adam Dickmeiss Date: Tue Oct 7 19:38:42 2014 +0200 Fix PQF to Solr conversion may produce invalid Solr query YAZ-792 Just deal with the empty PQF term and quote that as well. commit c9b29159e52218b7ce445e368e154e394a3b8d40 Author: Adam Dickmeiss Date: Tue Oct 7 19:17:59 2014 +0200 Add varous 0 ptr checks to Solr test commit 89e7ff7931bdc7775faaeaf2a3c96cdb53532c8d Author: Adam Dickmeiss Date: Tue Oct 7 19:15:31 2014 +0200 0 ptr reference in handling Solr response with error YAZ-791 yaz_solr_decode_response will always return non-NULL PDU if return value is 0 (success). commit d2f9663df5b6dc2aa97c28659bbe6fbf1db6ce32 Author: Adam Dickmeiss Date: Tue Sep 30 13:51:59 2014 +0000 Fix annoying warning about wrbuf_putc YAZ-789 commit acadb64ea9411fd04d5e1699c56d1191691ae058 Author: Adam Dickmeiss Date: Tue Sep 23 10:59:46 2014 +0200 Fix documentation about --installa option YAZ-788 commit 1e755f5a43d636df14dbebc272888be671ae38b3 Author: Adam Dickmeiss Date: Tue Aug 26 13:29:33 2014 +0000 Version 5.4.2 commit 72e2e84098e74e20ddc04be4ad43e9d13b9eec92 Author: Adam Dickmeiss Date: Tue Aug 26 13:54:35 2014 +0200 daemon: properly report when receiving SIGUSR2 from child YAZ-785 commit 12b96ce71560a566dfff5901e2b1aaa9d2dc94cc Author: Adam Dickmeiss Date: Thu Aug 21 10:32:50 2014 +0000 Version 5.4.1 commit a14c8137d1216177ce5ae1b998ea3681459811d1 Author: Adam Dickmeiss Date: Thu Aug 21 11:55:23 2014 +0200 Better diagnostics for xmalloc failures YAZ-784 commit 92deb3cc5d606ce01697f80ae234dc8019954f69 Author: Adam Dickmeiss Date: Thu Aug 21 11:41:57 2014 +0200 Make assert for invalid xmalloc YAZ-783 commit 931965cac0551eb37bd9b6a0e1de6ea90585b115 Author: Adam Dickmeiss Date: Tue Aug 19 09:07:49 2014 +0000 Version 5.4.0 commit 632b6b72eb8b6f828b6c63e84b9882b59958a6ad Author: Adam Dickmeiss Date: Tue Aug 19 09:07:38 2014 +0000 Upd NEWS commit 567334fecf3bd2b481e32c67ef91f3a4ee04eabb Author: Adam Dickmeiss Date: Tue Aug 19 10:51:15 2014 +0200 log: disable the non-buffered logging YAZ-780 This makes yaz_log on regular files make one write per line rather than one write per fprintf call. commit af7df1eb703a867fe5d2226a13d4ea59aa0c87dc Merge: b1df5f90 c659f52f Author: Adam Dickmeiss Date: Mon Aug 18 15:28:14 2014 +0200 Merge branch 'master' into yaz-781 commit c659f52fe4ee144502877f77cc0d6ff5125cc1cb Author: Adam Dickmeiss Date: Mon Aug 18 13:39:16 2014 +0200 Do not build for Ubuntu raring, quantal (obsolete) commit b1df5f9013d82510f6250d93623a0126ec19265f Author: Adam Dickmeiss Date: Fri Aug 15 15:35:10 2014 +0200 First work on YAZ-781 There's one regression still. commit 55dd9ff92e47e3e13fb11915bc5e1bdbd15537ab Author: Adam Dickmeiss Date: Fri Aug 15 11:47:07 2014 +0200 Documentation manref.xml depends on local.ent MP-566 commit eb467c75687daef0419eb95f652693ca00c60195 Author: Adam Dickmeiss Date: Tue Jul 15 14:11:30 2014 +0200 CCL combo qualifier should allow forward references YAZ-779 commit c6a0cb09dd5867c99fa742cf6d110c50f2cf600e Author: Adam Dickmeiss Date: Mon Jul 14 14:45:18 2014 +0200 Do not build for Ubuntu oneiric commit 51f282c74b96dcde90341c2e895f77b0d7b5a7bf Author: Adam Dickmeiss Date: Fri Jul 11 14:12:37 2014 +0000 Fix buildconf.sh, automake too old on centos5 YAZ-778 Achieved by adding AM_PROG_CC_C_O and requiring AM 1.9 instead. The AM_PROG_CC_C_O is obsolete for newer AM, but 1.14 (Debian jessie) accepts it without a warning. commit a5e46feb0d0a3e44c8c3ee8bebf9994195e9e82f Author: Adam Dickmeiss Date: Fri Jul 11 14:50:56 2014 +0200 Version 5.3.0 commit 301ce61c887b26caf05a6ce4f9ee95d9b296a145 Author: Adam Dickmeiss Date: Fri Jul 11 14:28:02 2014 +0200 Upd NEWS commit ce3b3ef890c54b53b9a438737a9b045e5c2b45b4 Author: Adam Dickmeiss Date: Fri Jul 11 14:23:37 2014 +0200 GFS: client_query_charset conversion YAZ-777 This is a feature for Z39.50 clients that sends queries that are not UTF-8 encoded. WIth client_query_charset, GFS will convert from the encoding given to UTF-8. commit 20fefe985756693f69f2fedef8deaeb686034b8d Author: Adam Dickmeiss Date: Thu Jul 10 15:19:38 2014 +0200 echo extra args as well YAZ-776 commit 60b23781949540ad214a331fa335da10f42fae7f Author: Adam Dickmeiss Date: Wed Jul 9 16:46:05 2014 +0200 echoedSearchRetrieveRequest for explain as well YAZ-776 commit d7f1bc4eb6c5d8e0d2eba2f040eb9c359eca9e45 Author: Adam Dickmeiss Date: Wed Jul 9 13:49:29 2014 +0200 echoedSearchRetrieveRequest support YAZ-776 commit 1ce6fcae3a6d556ae3ed362dd1288cc89b355bf7 Author: Adam Dickmeiss Date: Wed Jul 2 14:07:31 2014 +0200 debian/changelog now auto generated commit e05d81815980f703874bae24475ba474e424c0d7 Author: Adam Dickmeiss Date: Tue Jul 1 16:02:47 2014 +0200 ZOOM: expire times set for redis/memcached YAZ-772 For both redis and memcached option --expire=seconds sets expire time for a result-set/search. Default time is 600 seconds (10 minutes). commit b81655495132a3e219463c6a259d4214270029ef Author: Adam Dickmeiss Date: Tue Jul 1 15:58:46 2014 +0200 Update doc/common again Was downgraded by mistake in 07f52472f0a1f21c120b85fea5ece6. commit 02aab105f290cdd2743061ab1a6d6565d6701f72 Author: Adam Dickmeiss Date: Thu Jun 26 11:12:49 2014 +0200 Version 5.2.1 commit 3fd941dda9cb4fc873abbd9f94cb998b7e0bda50 Author: Adam Dickmeiss Date: Thu Jun 26 10:59:44 2014 +0200 No [rest of output is omitted] limit for yaz_log YAZ-774 commit cb991696faf940ea38b0307072daeaaa57f68cd3 Author: Adam Dickmeiss Date: Wed Jun 25 15:36:13 2014 +0200 Further optimize icu_iter_get_org_info By saving last utf8/utf16 offsets to reduce size of buffer to analyze by u_strToUTF8. commit e9f1f9fae5dd16e2016bf6988631d8111b3c0980 Author: Adam Dickmeiss Date: Wed Jun 25 15:04:06 2014 +0200 Optimize speed of icu_iter_get_org_info In particular, reduce calls to u_strToUTF8. commit 6260987fdcc904b2110b88f882e66fa47e0b35dc Author: Adam Dickmeiss Date: Wed Jun 25 14:27:52 2014 +0200 For ICU testing, pass -o to yaz-icu this will test the icu_iter_get_org_info function. commit 5c1eb188e9cf6f0dd2e435a1f81938f258515edb Author: Adam Dickmeiss Date: Fri Jun 20 15:07:12 2014 +0200 Fix null ptr reference for freeReplyObject YAZ-773 commit 3bf181e804874d8c878b67f03b2db439804263c0 Author: Adam Dickmeiss Date: Thu Jun 12 15:52:51 2014 +0200 Version 5.2.0 commit 242c7ecb8a857c749bf169a8dcd9579a73e546a5 Author: Adam Dickmeiss Date: Thu Jun 12 15:52:42 2014 +0200 Do not build for Ubuntu lucid anymore commit ad2e8b3190adb77733a744a26a08927ed026396d Author: Adam Dickmeiss Date: Thu Jun 12 15:00:29 2014 +0200 Build without redis on Debian squeeze, Ubuntu Lucid These older platforms have libmemcached5 availble. Dirty hack. commit e3b9ea8ba0cd1a3d328a479cbe6aa7418cc88dd5 Author: Adam Dickmeiss Date: Thu Jun 12 13:50:50 2014 +0200 Cope with hiredis not being available on CentOS 5 commit a0b82549e6d2d521c947448be3299b272b65e12c Author: Adam Dickmeiss Date: Thu Jun 12 12:56:34 2014 +0200 Update NEWS commit 363cb9e06cefa80ac549346360a9ee868f14ec2a Author: Adam Dickmeiss Date: Thu Jun 12 12:53:02 2014 +0200 spec: 1.indexdata again commit 07f52472f0a1f21c120b85fea5ece60102ad4353 Author: Adam Dickmeiss Date: Thu Jun 12 12:52:07 2014 +0200 Update RPM requires yaz: list only those not already in libyaz5 libyaz5: list all libs used - including hiredis commit 6c8a38e15663cd8e87cd3106f3cf2b283c6d7d49 Author: Adam Dickmeiss Date: Thu Jun 12 11:50:15 2014 +0200 Add note about libmemcached version commit b74358618ee9b581fd5121ebe2b70277dae878d7 Author: Adam Dickmeiss Date: Thu Jun 12 11:48:59 2014 +0200 Build Deb with redis support commit e2b8bf88befb43e4a189ce3e659c595e5b3af7dc Author: Adam Dickmeiss Date: Thu Jun 12 11:46:09 2014 +0200 Allow memcached version 0.40 Remove some redundant memcached defines and rename a bit. commit 8904a5b136d3d9bf359a1de242f554d009ab9888 Author: Adam Dickmeiss Date: Thu Jun 12 11:30:34 2014 +0200 Describe redis conf option + ZOOM redis option commit 41068e0f9be6eb86801eb54cbb0acae2aa2683a4 Author: Adam Dickmeiss Date: Thu Jun 12 11:30:21 2014 +0200 Indent configure description for --with-redis commit 19cf946139df0a0606e590859fb6e98a09369f5b Author: Adam Dickmeiss Date: Thu Jun 12 11:28:30 2014 +0200 ZOOM: no memcached/redis hack. Options for redis context At this stage only --server=host[:port] is a supported constructor option for (hi)redis. commit 0da4e766a245d5342950600835ee82f175df8106 Author: Adam Dickmeiss Date: Thu Jun 12 11:20:33 2014 +0200 Update doc/common commit d7cba4993e5c7c06c655d9a1d903f889fdee8329 Author: Adam Dickmeiss Date: Thu Jun 12 11:18:25 2014 +0200 configure: only consider hiredis if libgcrypt is also present commit af358fe9efc2376f4b29b7d16ff3e2ee3b90ebb4 Author: Adam Dickmeiss Date: Thu Jun 12 11:06:21 2014 +0200 in-source yaz-config prints HIREDIS_LIBS commit 85023e194798d21c44599f2057df59956ee20948 Merge: c18a5a0c be5a1b0a Author: Adam Dickmeiss Date: Wed Jun 11 14:36:47 2014 +0200 Merge branch 'yaz-770' of ssh://git.indexdata.com/home/git/pub/yaz into yaz-770 commit be5a1b0a591d47210a5508e8466f3f704136f280 Author: Adam Dickmeiss Date: Wed Jun 11 14:37:41 2014 +0200 configure: cope with hiredis without pkg-config commit 85e65b909968792d2bbc17daf95b66a60dff11fc Merge: aee5f339 cbe6fe88 Author: Adam Dickmeiss Date: Wed Jun 11 14:19:20 2014 +0200 Merge branch 'yaz-770' of ssh://git.indexdata.com/home/git/pub/yaz into yaz-770 commit c18a5a0c2620b67650b51255ea3139378ac64cec Author: Adam Dickmeiss Date: Wed Jun 11 14:18:32 2014 +0200 4.redis commit aee5f339aa17154788cd15bc3c373992e7f34de6 Author: Adam Dickmeiss Date: Wed Jun 11 14:18:12 2014 +0200 Honor memcached options= --server=localhost as redis conf This is only done where YAZ is without libmemcached support. commit cbe6fe88459e1dc051bf8bd66c91d5668fefbeb9 Author: Adam Dickmeiss Date: Wed Jun 11 14:01:21 2014 +0200 Upd RPM for hiredis commit 118a28603418dfc84a5c91463a1d02219e7e9941 Author: Adam Dickmeiss Date: Wed Jun 11 14:00:19 2014 +0200 Redis functional including configure + code No RPM/Deb work - yet. commit ae36e69eb7fa1ba7c8c10c7c41bf7e30dc861db4 Author: Adam Dickmeiss Date: Wed Jun 11 10:46:22 2014 +0200 Do not bundle libmemcached. Linking does not work for C Everybody using YAZ would have to switch to g++. And that doesn't fly. commit 840689efb0c489991444f71777030929255fab89 Author: Adam Dickmeiss Date: Tue Jun 10 14:13:45 2014 +0200 Define HAVE_LIBMEMCACHED_MEMCACHED_H again commit 6166a9b9b8434a39f893f4f37846a66c58ead847 Author: Adam Dickmeiss Date: Tue Jun 10 13:51:17 2014 +0200 RPM: no depend on libmemcached (static now) commit 9300aa0c18c95a88fe9f16dc3660122d5e1d95a1 Author: Adam Dickmeiss Date: Tue Jun 10 11:49:55 2014 +0000 Bundle libmemcached with YAZ on CentOS 5/6 YAZ-769 commit 94da887fdc444b624e4736e860e9a1777c92e847 Author: Adam Dickmeiss Date: Tue Jun 10 11:43:03 2014 +0000 Use pkg-config for getting libmemcached CFLAGS/LIBS Also, require version 1.0 or later of libmemcached. This is because older versions of libmemcached have a different API and because we have stability issues with version 0.31 on CentOS 6.5. commit 2f15cf2cbca7f982d34507a9975fdbeda0568dce Author: Adam Dickmeiss Date: Wed Jun 4 15:25:21 2014 +0200 Version 5.1.3 commit 7c4f2139acd38e5ce81cbcda225a499566d44df2 Author: Adam Dickmeiss Date: Wed Jun 4 15:08:10 2014 +0200 Fix dup ZOOM_EVENT_RECV_RECORD events for SRU/Solr YAZ-768 commit 291534d6ba703c3ca522d9324ddfe01eb3330f8d Author: Adam Dickmeiss Date: Wed Jun 4 11:15:18 2014 +0200 fix zoom+memcahced: present request out of range YAZ-767 commit 1001e8222a0f57492d71f70b84e7d531df800d36 Author: Adam Dickmeiss Date: Fri May 30 12:05:33 2014 +0200 Version 5.1.2 commit 74783cfd34e855445de582d7f0a1d795615bcfe8 Author: Adam Dickmeiss Date: Fri May 30 12:02:05 2014 +0200 Describe CCL qual r=omiteq commit cf91f233d0e16ed6920d84ce2d871eed90d3491b Merge: 9af32881 9782c90f Author: Adam Dickmeiss Date: Thu May 29 17:07:59 2014 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 9af3288133b60efbc2973c5739b71503d1932236 Author: Adam Dickmeiss Date: Thu May 29 17:07:50 2014 +0200 Add omiteq in example commit dd5e6e2ecc4d8d51095059c13ce725d263d99601 Author: Adam Dickmeiss Date: Thu May 29 17:07:16 2014 +0200 CCL: include r=omiteq in tests commit a8ff4e889fee9510119c0f02f963fd495dd8334b Author: Adam Dickmeiss Date: Thu May 29 17:06:37 2014 +0200 Allow r=omiteq to omit 2=3 for generated PQF YAZ-766 commit 9782c90f15aaf9e68b404ddc8fa9b9a078e7df55 Author: Adam Dickmeiss Date: Thu May 22 13:55:59 2014 +0200 GFS: prevent truncation in retrieval phase YAZ-763 commit 70b5d94fe23e5596ab67faa02eefd6e37df25058 Author: Adam Dickmeiss Date: Mon May 5 13:21:33 2014 +0200 Solr: simplify yaz_solr_decode_response commit 7c345b7e160617a70158eb4c1b031467894430fe Author: Adam Dickmeiss Date: Mon May 5 13:18:04 2014 +0200 Solr: use different local var for string manipulation commit 172a6108e1edcf63a23309999ac938c69f4c1bb0 Author: Adam Dickmeiss Date: Mon May 5 10:58:07 2014 +0200 Solr: reformat commit fe70a30cf56d64d794e5ccd83396c717cba88a9d Author: Adam Dickmeiss Date: Mon May 5 10:49:39 2014 +0200 Solr: Get rid of hardcoded limit of extra_args commit 1f966d166ff89011da3e8ca2fa143f017921ec57 Author: Adam Dickmeiss Date: Mon May 5 10:36:17 2014 +0200 Solr: encode lucene query type YAZ-736 Make sure the queries are treated as traditional "lucene", because that's what YAZ generates. commit 45fb4747b80f37bfa44738e1071c094f18660ae9 Author: Adam Dickmeiss Date: Wed Apr 30 15:56:44 2014 +0200 Fix compilation without Libxml2 YAZ-755 revisited commit 4d1fabb92a48f8fad70e715ecc0a419b1874b4f3 Author: Adam Dickmeiss Date: Wed Apr 30 15:56:22 2014 +0200 Avoid clang warning: if statement has empty body commit 6b75f20c7564502ea2d5606888f7e2ff2c1968d6 Author: Adam Dickmeiss Date: Wed Apr 30 15:47:35 2014 +0200 Avoid clang warning: if statement has empty body commit 7ee4de722ccf984fc27203e70c432e29290f3984 Author: Adam Dickmeiss Date: Wed Apr 30 14:09:15 2014 +0200 Fix ZOOM HTTP redirect failing on Windows+Solaris YAZ-755 commit 96b12227d0e350dab63f26a8bb1c8e2f7f834bf3 Author: Adam Dickmeiss Date: Tue Apr 22 15:44:44 2014 +0200 Version 5.1.1 commit b675ebc81ebe1f2cb7d28b4ce43a51ad5cb39598 Author: Adam Dickmeiss Date: Tue Apr 22 15:37:09 2014 +0200 Build packages for Ubuntu Trusty Tahr 14.04 LTS commit f36abe0a776fa52b972a3fec1b46b94e26814f22 Author: Adam Dickmeiss Date: Tue Apr 22 09:10:33 2014 +0200 Change local counter to size_t commit f9bc1d0850c92394c8dd3f8d05691e71811baf95 Author: Adam Dickmeiss Date: Sat Apr 19 11:17:22 2014 +0200 wrbuf_buf: make it always return non-NULL Also, wrbuf_buf will return same buffer as previous call to wrbuf_cstr. commit 5e0171c5568e93a00cad52e4187b9b28e8bacbf1 Author: Adam Dickmeiss Date: Fri Apr 18 19:45:11 2014 +0200 Add test for YAZ-760 commit 365cdf77999caa4f9edb02cc954b1075d57f299e Author: Adam Dickmeiss Date: Fri Apr 18 19:40:51 2014 +0200 Fix wrbuf_putc + wrbuf_cstr assert YAZ-760 Change the meaning of WRBUF size. Just allocate size + 1 instead of size. This means we can safely store \0 in pos. Simplify xrealloc use in wrbuf_grow. commit b80d372819c8c909455ca5868f6d7412dfbbef66 Author: Adam Dickmeiss Date: Thu Apr 17 13:31:00 2014 +0200 Version 5.1.0 commit f0df1959fda559c0d952810c338a9fde667b5a63 Author: Adam Dickmeiss Date: Thu Apr 17 13:11:09 2014 +0200 Move main YAZ manual to book.xml; use nxml YAZ-758 commit d9849e03a9313647aa81846cf9cb05a06394e9ea Author: Adam Dickmeiss Date: Thu Apr 17 08:52:54 2014 +0200 zoomsh: offer option -a apdulog As we're used to from yaz-client and GFS based servers. commit a2a4b952e0742e1527fcb8c9a0e6c85fe35c65f8 Author: Adam Dickmeiss Date: Thu Apr 17 08:52:31 2014 +0200 cqltransform: use odr_setprint_noclose commit 5ef9ca5de57e415b34c21fe0d17a79f7b8e6b636 Author: Adam Dickmeiss Date: Thu Apr 17 08:48:37 2014 +0200 ZOOM: new setting apdufile Sets name of APDU file. If not given, existing setting apdulog takes effect. Use odr_setprint_noclose for convenience. commit ce627148dbba2878565b8d9da33f6b25f33da4bd Author: Adam Dickmeiss Date: Thu Apr 17 08:47:03 2014 +0200 Add odr_setprint_noclose Like odr_setprint, but does not fclose. commit bfcb19b17256263c4fca826add7724ad7c847943 Author: Adam Dickmeiss Date: Thu Apr 17 07:52:42 2014 +0200 zoomsh: only prints ZOOM> lead if a console is use (isatty) commit 0a479be82be90639f4e37c4ead12baca543e88bf Author: Adam Dickmeiss Date: Wed Apr 16 17:44:14 2014 +0200 Bib-1 and SRU diagnostics in manual (appendix) YAZ-748 Tables in manual pages don't work well. So no man entry at this time. commit d5a4d0d6a476429a3588e8e7d9e31094c28ef204 Author: Adam Dickmeiss Date: Sat Apr 12 08:06:10 2014 +0200 Fix assert in ZOOM when http connect fails YAZ-757 commit 29644f5396a22ec0d51266011f57741adb2fd171 Author: Adam Dickmeiss Date: Fri Apr 11 11:03:01 2014 +0200 Add wrbuf_cstr_null commit 0d6f3ee9720647761ff74414a46828c0b9711ac0 Merge: 5564216d 7d640b3f Author: Adam Dickmeiss Date: Thu Apr 10 15:47:13 2014 +0200 Merge branch 'yaz-756' commit 7d640b3f9eeb46ab57958aa21b63f26271162ee7 Author: Adam Dickmeiss Date: Thu Apr 10 14:28:35 2014 +0200 Use WRBUF for addinfo member of cql_transform_t commit d161ec774d6250a6814918f68559560d5c9db8cc Author: Adam Dickmeiss Date: Thu Apr 10 14:19:32 2014 +0200 Add re-entrant CQL/Solr/RPN functions The re-entrant functions are: cql_transform_r, cql_transform_rpn2cql_stream_r, solr_transform_rpn2solr_stream_r. These have same functionality as cql_transform, cql_transform_rpn2cql_stream, solr_transform_rpn2solr_stream. They return the additional infomration as WRBUF to make them re-entrant. commit d93ce9819697b5724be8c9a02e41d0eaf818f13b Author: Adam Dickmeiss Date: Thu Apr 10 11:49:33 2014 +0200 cql2pqf allows RPN to Solr conversion commit 31b5ce78766f1731a376e2f5e11f530261434345 Author: Adam Dickmeiss Date: Thu Apr 10 11:43:37 2014 +0200 rpn2solr: solr_transform_set_error in main handler This is to make it possible to make a thread safe version later. commit 4f411c0f26882f2a4e91010ae901815b2bb245dc Author: Adam Dickmeiss Date: Thu Apr 10 11:42:54 2014 +0200 cql_transform_rpn2cql_stream back to error in cql_transform_t commit 6fff10e5d447893654828b451d366b3452edf637 Author: Adam Dickmeiss Date: Thu Apr 10 10:36:37 2014 +0200 Remove some redundant wrbuf_vp_puts alikes commit 5ae134cc01cf31868aa2adaa7daf801993e7c1e3 Author: Adam Dickmeiss Date: Thu Apr 10 10:29:35 2014 +0200 Remove CQL to Solr conversion and base on cql_transform_t The RPN to Solr is indeed in use. It uses exact same data structure as cql_transform_t. commit 171fd9ec0fba5789a6d14b733f77bbfe90df5512 Author: Adam Dickmeiss Date: Wed Apr 9 21:29:23 2014 +0200 Make cql_transform_rpn2cql_{stream,wrbuf} thread-safe They do not tamper with addinfo and error in cql_transform_t anymore. commit 9d12e94d17d3c31124221dc914aa36c9d8154643 Author: Adam Dickmeiss Date: Wed Apr 9 21:28:06 2014 +0200 Implement cql_transform_cql2rpn This is a thread-safe version of cql_transform. It does not write to the cql_transform_t object. commit 7fc0a649c80cade7f443c6deb552e1907be9af22 Author: Adam Dickmeiss Date: Wed Apr 9 15:57:52 2014 +0200 Make object member to temporary member (WRBUF) commit 5564216deccb49e138f665e223c81fe6c1edd79d Author: Adam Dickmeiss Date: Wed Apr 9 11:32:16 2014 +0200 Remove script no longer in use commit f7287fb60d390bd3533ab5afacd470a10e4b3e5e Author: Adam Dickmeiss Date: Wed Apr 9 09:54:58 2014 +0200 Version 5.0.22 commit 28a4fb36e751de91911b02fa76eba1f1caa284f5 Author: Adam Dickmeiss Date: Tue Apr 8 21:46:13 2014 +0200 Call cs_rcvconnect during redirect YAZ-754 This is ensure that non-blocking getaddrinfo completes. commit 1c8eaf558e17a0ef7de91a4e21a0b83683b3dfd7 Author: Adam Dickmeiss Date: Tue Apr 8 14:18:04 2014 +0200 wrbuf_cstr: ensure wrbuf_grow is never called YAZ-753 We just throw an assert instead, but that's never going to happen. commit 97fafedd350b74076d8a8e31e23102fa22d4b430 Author: Heikki Levanto Date: Tue Apr 8 13:44:58 2014 +0200 wrbuf_cstr bit more thread safe YAZ-753 Now it does not mess with the pos. Still not 100% safe, can have a race condition when reallocating the buf, if it needs room for the terminating null byte. commit c00f4d99781f83c51fce80af10927023a4150331 Author: Adam Dickmeiss Date: Mon Apr 7 22:12:11 2014 +0200 yaz_log_init_file may take fd= to open log file at the FD given. commit f0600e1e958cb80099c4a7fa4cc56a9c1db83735 Author: Adam Dickmeiss Date: Thu Mar 27 13:29:22 2014 +0100 Extend comment about start facet parameter commit 6b3366d135740d9ab37bdcd3f00b115fedf30a9d Author: Adam Dickmeiss Date: Wed Mar 26 14:29:48 2014 +0100 nmake: ICU_VER helper var commit ee3683039be09b0843e3159426ea0eeecb3777ac Author: Adam Dickmeiss Date: Fri Mar 21 13:19:51 2014 +0100 Versino 5.0.21 commit 30f492ef927015dcd1399147ddc77c3f61976f5a Author: Adam Dickmeiss Date: Fri Mar 21 13:03:26 2014 +0100 Support solrmarc decoding in record_conv/retrieval module commit 01e36a11adc97a240cc595f89280c8a619770251 Author: Adam Dickmeiss Date: Fri Mar 21 11:48:22 2014 +0100 Rename yaz_use_attribute_create to zget_AttributeList_use_string commit aab0b586a68a6d8df06b045d8043b434c0234bea Author: Adam Dickmeiss Date: Fri Mar 21 11:38:12 2014 +0100 yaz_use_attribute_create based on get_attributeList DRY commit 7adfe1c2e69ddf39a4f26c015171168a1a8f0ee4 Author: Adam Dickmeiss Date: Thu Mar 20 13:16:27 2014 +0100 Include proto.h for prototype of yaz_use_attribute_create commit 7fc72f3ae149e416a297ef1f55c09271056e98f1 Author: Adam Dickmeiss Date: Thu Mar 20 10:38:27 2014 +0100 Fix yaz_use_attribute_create (uninit memory) Bug introduced by recent commit 5350317640042c3507172d28d142795. commit 5350317640042c3507172d28d14279595eb7a49f Author: Adam Dickmeiss Date: Wed Mar 19 14:24:30 2014 +0100 Make yaz_use_attribute_create a public function Useful when generating a facet response in a server. commit 7557692f01c3021013c8e9d690e6ab13ea41f21e Author: Adam Dickmeiss Date: Thu Mar 13 15:20:20 2014 +0100 Version 5.0.20 commit ae102dcb4c5a0429f4ebdbb6ecb60b1cc437f8e4 Author: Adam Dickmeiss Date: Thu Mar 13 15:04:07 2014 +0100 Fix comment commit 935b1ba0c2c3dc480b0afcb3673abe2ef2dd893f Author: Adam Dickmeiss Date: Thu Mar 13 13:37:25 2014 +0000 Always initialize libgcrypt for POSIX threads YAZ-751 gnutls_global_init, we now know, in some systems, do not properly initialize libgcrypt for POSIX threads. commit 2d4ac23fdd43c7908123c8dfac739512c9bc8694 Author: Adam Dickmeiss Date: Thu Mar 13 14:06:04 2014 +0100 Extend test_wrbuf to use gcrypt in threaded mode This was primarily extended to check for improper libgcrypt initialization. commit 7b35dc1bb4add8c5db287eecdf57bb872751eea3 Author: Adam Dickmeiss Date: Thu Mar 13 14:05:36 2014 +0100 Initialize gcrypt for threaded mode YAZ-751 commit 16faee0e4d41d3df001b2abd89f6d4d11f2ae89d Author: Adam Dickmeiss Date: Mon Mar 10 14:57:41 2014 +0100 Version 5.0.19 commit 0ed95c1353efd0fefe62bb9c16895b084c84888b Author: Adam Dickmeiss Date: Mon Mar 10 14:23:39 2014 +0100 ZOOM: generate event Connect rather than None for partial connect (in fact getaddrinfo resolving). commit 3dbc44820fa5b82541856e83a370f6a1dfddc9a9 Author: Adam Dickmeiss Date: Mon Mar 10 11:23:55 2014 +0100 Fix ZOOM_connection_Z3950_search: Assertion YAZ-750 The standalone ZOOM sort was completely broken since 5.0.13. commit 970071e29956eb42d306f70d62032ecdd70740f6 Merge: 480f849f 59015cc6 Author: Adam Dickmeiss Date: Wed Mar 5 18:31:02 2014 +0100 Merge branch 'yaz-749' commit 480f849f7e012d2d742d2d1dffbd1b0691dcd33a Author: Adam Dickmeiss Date: Wed Mar 5 15:44:41 2014 +0100 ZOOM: only supply clientIP for InitRequest Rather than for all APDU types. commit 6e32d36c608fe4c1e345e07ba0bf93b1129f58f1 Author: Adam Dickmeiss Date: Wed Mar 5 12:00:00 2014 +0100 Add documentation about facets commit 59015cc6ed698cf6548ef177479ea2863494f2a7 Author: Adam Dickmeiss Date: Wed Mar 5 10:50:52 2014 +0100 GFS: peer_name adds X-Forwarded/Client-IP to value YAZ-749 commit 7713d084b5103df2b1d505be30de63021a5f7477 Author: Adam Dickmeiss Date: Mon Mar 3 13:06:06 2014 +0100 Add link to memcached(3) man page online commit 7e13f7fc5c0865a6f995ad7735f62015694890e1 Author: Adam Dickmeiss Date: Sat Mar 1 17:09:33 2014 +0100 tcpip: fix comp wo getaddrinfo; refactor tcp_state init commit ba71ec35d250a7bf8557827b0e0f74b11215fc1a Author: Adam Dickmeiss Date: Sat Mar 1 17:06:44 2014 +0100 Include stdlib.h due to getenv use commit 75ce92c9fc70d35dce5b2bca90fd79873e48c4c2 Author: Adam Dickmeiss Date: Sat Mar 1 15:47:05 2014 +0100 Revert "Move declaration to avoid warning when compiling wo Libxml2" This reverts commit 4df8de77ce5d4d97a9d5588f49a5c8298183776e. commit 4df8de77ce5d4d97a9d5588f49a5c8298183776e Author: Adam Dickmeiss Date: Sat Mar 1 14:51:29 2014 +0100 Move declaration to avoid warning when compiling wo Libxml2 commit 01e5482ff2f224a3a4219e100657e3e42aaefc5d Author: Adam Dickmeiss Date: Fri Feb 28 19:57:40 2014 +0100 Fix-uninit var in new non-blocking getaddrinfo bug This bug was not part of a public release. commit 62dc87f9ad8412dcf2a14bb00147dee88df83d70 Author: Adam Dickmeiss Date: Fri Feb 28 14:33:27 2014 +0100 Fix compilation wo libgcrypt commit f3fa080453f6e57618216f6e58d871fb06f0d1b6 Author: Adam Dickmeiss Date: Fri Feb 28 13:48:44 2014 +0100 ZOOM C uses non-blocking getaddrinfo commit e33389ee14d909d3a1b9874a40aa1b53c3fe42be Author: Adam Dickmeiss Date: Fri Feb 28 13:29:53 2014 +0100 COMSTACK flag CS_FLAGS_DNS_NO_BLOCK which will enable non-blocking getaddrinfo . This flag is passed to macro cs_create and cs_create_host, cs_create_host_proxy functions. commit 84ace86c8329403df98997b634cd022565914c14 Merge: 3c51b85f 7143bc8f Author: Adam Dickmeiss Date: Thu Feb 27 11:20:49 2014 +0100 Merge branch 'master' into yaz-744 commit 7143bc8f77ac03fdb6f36f30b16cf64c2d6cc3e2 Author: Adam Dickmeiss Date: Thu Feb 27 10:29:07 2014 +0100 Version 5.0.18 commit 3c51b85ff62261acc19c6995a041569ec4ef6d63 Merge: ab907eb3 44d6b019 Author: Adam Dickmeiss Date: Thu Feb 27 10:05:14 2014 +0100 Merge branch 'master' into yaz-744 commit 44d6b0193b4c993f23e081fa865cb0bf81b21272 Author: Adam Dickmeiss Date: Thu Feb 27 10:03:01 2014 +0100 Add note about yaz_log_mask_str_x commit 236966a07ceb8e28649470995f88251c37423715 Author: Adam Dickmeiss Date: Thu Feb 27 10:02:13 2014 +0100 YAZ_{BEGIN,END}_CDECL yaz_init_globals commit eb4631c82f3b57fb016234447443268d4f46b933 Author: Adam Dickmeiss Date: Thu Feb 27 10:01:12 2014 +0100 exsltRegisterAll in proper place commit 71e066dd201f095184b98199399ac7965f7f176e Author: Adam Dickmeiss Date: Wed Feb 26 22:03:00 2014 +0100 Call exsltRegisterAll in yaz_init_globals This is to enable EXSLT for XSL processing in application based on YAZ, such as Pazpar2. commit f41208530e726b3600657873e927a9bb33721a7c Author: Adam Dickmeiss Date: Wed Feb 26 20:45:04 2014 +0100 Update doc/common commit ab907eb379d1ed21cfe2d86844b1a8bc36330797 Merge: 7431ea2e 1d3538f5 Author: Adam Dickmeiss Date: Wed Feb 26 20:41:11 2014 +0100 Merge branch 'master' into yaz-744 commit 1d3538f5ffc0a38434e421ae3f2c34618b50d392 Author: Adam Dickmeiss Date: Wed Feb 26 20:40:42 2014 +0100 Update various URLs commit 2b35fdfa5fd016e7a0c99b0cd0958c9ce8606ef9 Author: Adam Dickmeiss Date: Wed Feb 26 20:10:55 2014 +0100 Update doc/common commit 7431ea2e3569968e945c6a381efac4c873b661b9 Merge: 68bbd857 4e500dea Author: Adam Dickmeiss Date: Wed Feb 26 15:30:31 2014 +0100 Merge branch 'master' into yaz-744 commit 4e500dea9790b5ff9ea4fbb3d150c358e3bd2cab Author: Adam Dickmeiss Date: Wed Feb 26 15:02:50 2014 +0100 Jumbo patch: Incorporate extraArgs in memcached key YAZ-747 Use plain text for things < 40 chars; SHA-1 for others. Except query and password. commit dcd92fbd62d989d5206835b7f2a1123bb525b14c Author: Adam Dickmeiss Date: Wed Feb 26 11:14:58 2014 +0100 Version 5.0.17 commit adbe5f4a8c685c31a978fcfc85c9099ebf647927 Author: Adam Dickmeiss Date: Wed Feb 26 11:00:59 2014 +0100 Fix ZOOM_connection_connect SEGVs if host==NULL YAZ-746 commit d51b21c6f41a021f21078921a0de50106264d55e Author: Adam Dickmeiss Date: Wed Feb 26 11:00:18 2014 +0100 Update comstack example a bit In particular use cs_rcvconnect. commit 68bbd857190c6e29727ca1f5070fe6d8e5102bbb Merge: c753bab9 fcc2b1bf Author: Adam Dickmeiss Date: Wed Feb 26 09:58:54 2014 +0100 Merge branch 'master' into yaz-744 commit fcc2b1bffbd6dd86fc8f95f1e2e6e8b2a94e731e Author: Adam Dickmeiss Date: Wed Feb 26 09:58:45 2014 +0100 tcpip: initialize ai_connect commit c753bab9ac07a09f1bd7ba1dc363e58310e307a7 Author: Adam Dickmeiss Date: Wed Feb 26 09:57:44 2014 +0100 Minor refactor in tcpip code commit 82f131850739c5806dde4e868654581cb1352cc1 Merge: 6eac80f3 7fbf3f2e Author: Adam Dickmeiss Date: Wed Feb 26 09:43:01 2014 +0100 Merge branch 'master' into yaz-744 commit 7fbf3f2eceeb0978881992fbf1e77cd6fc3c4a9b Author: Adam Dickmeiss Date: Wed Feb 26 09:42:44 2014 +0100 Remove call to gnutls_global_init. tcpip_init already does it commit 6eac80f3642f68e6d7ae5ed60574b96327d55051 Merge: b696a59e ab61788b Author: Adam Dickmeiss Date: Tue Feb 25 21:52:33 2014 +0100 Merge branch 'master' into yaz-744 commit ab61788b20fce5faedceb7599f6b5f43be72ba9a Author: Adam Dickmeiss Date: Tue Feb 25 21:49:34 2014 +0100 Fix: Setting env YAZ_LOG makes YAZ hang YAZ-745 yaz_init_gloabsl calls yaz_log_init_globals calls yaz_log_mask_str_x . Do not call yaz_init_globals from log_mask_str_x. commit b696a59e5609651787b64b953b581a3ceb263f14 Merge: ce1f4b11 662e5d30 Author: Adam Dickmeiss Date: Tue Feb 25 21:39:19 2014 +0100 Merge branch 'master' into yaz-744 commit ce1f4b11dd791353e8aa4d434c9f427dcfec2c3e Author: Adam Dickmeiss Date: Tue Feb 25 21:38:54 2014 +0100 First go ag non-blocking getaddrinfo YAZ-744 commit 662e5d304dcb17cb1f2b62680b3489054a2fa0e6 Author: Adam Dickmeiss Date: Tue Feb 25 15:10:52 2014 +0100 Version 5.0.16 commit f4864107db9ab5780218ca0d28c480f5e6ebd684 Author: Adam Dickmeiss Date: Tue Feb 25 12:14:29 2014 +0100 tcpip: connect retry in SSL mode works commit afb64586ca7d3f97d06d867dd4ca0fe2297a1bf5 Merge: 63b0249c 4341559a Author: Adam Dickmeiss Date: Tue Feb 25 08:33:57 2014 +0100 Merge branch 'master' into yaz-743 commit 4341559a11eeaa00d60efbefd0b3538abb2ef622 Author: Adam Dickmeiss Date: Tue Feb 25 08:32:56 2014 +0100 Simplify SSL code a bit commit 63b0249c36ae686af992c1426749ebfb14ad2a03 Author: Adam Dickmeiss Date: Mon Feb 24 20:20:26 2014 +0100 tcpip: connect tries all getaddrinfo addresses YAZ-743 commit ceea7d4298b1c939ee88864a8e45c61da5177001 Author: Adam Dickmeiss Date: Mon Feb 24 14:28:05 2014 +0100 Version 5.0.15 commit becf0d3294d52943303c8b3646f99260912c6f4b Author: Adam Dickmeiss Date: Mon Feb 24 13:01:05 2014 +0100 Thread safe yaz_init_globals commit b238b8e40486033974dfab1debe409c292bf81a1 Author: Adam Dickmeiss Date: Mon Feb 24 12:40:39 2014 +0100 COMSTACK: simplify tcpip_init a bit commit f516f94ad6cc3f11275e9dec04c9c523591b7a23 Author: Adam Dickmeiss Date: Sun Feb 23 16:11:05 2014 +0100 Add init_global.c YAZ-740 Should have been part of ebcb0cd0936. commit ebcb0cd09361a4b814ad8b7e629938c474af0be2 Author: Adam Dickmeiss Date: Fri Feb 21 22:07:55 2014 +0100 Fix: gcrypt not properly initialized YAZ-740 commit c4a725a56de1e3e72eca7e1e7fd56f430e4be7e2 Author: Adam Dickmeiss Date: Wed Feb 19 11:44:48 2014 +0100 Version 5.0.14 commit 2b8cf9ebca151f84ca793fc66747ddb62917e0ac Author: Adam Dickmeiss Date: Wed Feb 19 11:39:06 2014 +0100 Doc: update a few URLs; introduce soversion entity soversion is major .so/DLL version of YAZ library. commit 8b1b8e01c59549991c29393276fd56e78b3909f7 Author: Adam Dickmeiss Date: Wed Feb 19 11:38:55 2014 +0100 Describe memcached ZOOM option commit b41eafb39bc0ee50b4c5988f5ecfc6aad91933d5 Author: Adam Dickmeiss Date: Tue Feb 18 16:19:47 2014 +0100 ZOOM: throw present request out of range again YAZ-739 Was removed in YAZ 5.0.13. commit d0a4d2462d57a0392daf2eb0dc053d91aff5d285 Author: Adam Dickmeiss Date: Tue Feb 18 08:15:30 2014 +0100 Version 5.0.13 commit 6b3150faeb376ec3393214daa47c24cc838e5b51 Author: Adam Dickmeiss Date: Tue Feb 18 08:12:30 2014 +0100 Describe --with-memcached configure option commit 05193e78a2553c93a61da19a39e1276b1a509bac Author: Adam Dickmeiss Date: Mon Feb 17 17:59:15 2014 +0100 Use pthread_atfork to lock/unlock yaz_log system commit bc2c68cf9316d95c5b00444aaaa2f0a6127c1aa9 Author: Adam Dickmeiss Date: Mon Feb 17 16:02:10 2014 +0100 Provide yaz_log_{lock,unlock} This is to ensure yaz_log writes are atomic and allows us to use yaz_log_lock + yaz_log_unlock in threaded+forked applications. commit f31f3ef3afee001257b555e9a94c502a09de3fc4 Author: Adam Dickmeiss Date: Fri Feb 14 20:26:26 2014 +0100 Avoid yaz_log in sigterm handler YAZ-737 Logging is still performed, but outwide sig handler. commit fc5484cdf8e62584c976ce8eb1dfee2d787850ae Author: Adam Dickmeiss Date: Fri Feb 7 15:42:58 2014 +0100 Upd NEWS WRT memcached commit a71a136e28026d98022764e370043ef9c671494f Author: Adam Dickmeiss Date: Fri Feb 7 15:18:51 2014 +0100 RPM: incorporate libgcrypt and libmemcached deps commit f33b7979ed1553753c5c54819ea2b4038c783d43 Author: Adam Dickmeiss Date: Fri Feb 7 15:10:42 2014 +0100 yaz-config --libs: omit grypt+memcached libs These are not necessary because 3rd party tools do not need access to gcrypt/memcached funtions directly. commit 06724d5a90cb2d0da9f7f37981cee102b3711c4d Author: Adam Dickmeiss Date: Fri Feb 7 14:39:53 2014 +0100 Build depend on libmemcached and libgcrypt commit dbc0fcd670c29391e095582946b857ce7dffe582 Author: Adam Dickmeiss Date: Fri Feb 7 14:34:12 2014 +0100 Use memcached factory function when available Provide our own for libmemcached that do not offer it. For now, our wrapper only supports --server=host[:port]. commit dd883e77d19525d50c04ee97c0eb85b648a08e57 Author: Adam Dickmeiss Date: Fri Feb 7 12:42:26 2014 +0100 yaz-config: quote some RHS values (that might include blanks) commit 3789ac34f90b64e5c9937394a93ae7dadf678055 Author: Adam Dickmeiss Date: Fri Feb 7 11:45:19 2014 +0100 Check for libgcrypt version 1.2 and later commit b65af890b504372ca36ecc217e2166ed7f4d0beb Author: Adam Dickmeiss Date: Fri Feb 7 10:29:23 2014 +0100 marc?.json.marc part of dist commit a0b6afa0a1df8722572de79d563d3f0187f2fef7 Author: Adam Dickmeiss Date: Fri Feb 7 10:09:56 2014 +0100 Revert "Bison: use %name-prefix directive rather than -p option" This reverts commit 6fd59c085f99d8b823cd1d24d3110411c452cb87. Fixes YAZ-734. commit dcd64ead14aa87992702fd7cd7189244fc349296 Author: Adam Dickmeiss Date: Thu Feb 6 15:46:39 2014 +0100 Don't define memcached_return_t if libmemcached is unavailable commit bd5ae730cbd95ac48993f8d2504dfe298c3637c7 Author: Adam Dickmeiss Date: Thu Feb 6 15:24:51 2014 +0100 Updates for compilation with older libmemcached Use memcached_create + memcached_server_add instead of memcached. Use memcached_strerror instead of memcached_last_error. Check for memcached_return_t during configure and use memcached_return instead of memcached_return_t for older libmemcached versions. commit a22c4299fdfdd5d9756e422000116e11c29de7eb Author: Adam Dickmeiss Date: Thu Feb 6 10:38:45 2014 +0100 Revert "Sort: no need for present/search handling for sort response" This reverts commit 17d622aba7cd121799024edbca11a4b3cc0789ef. We do need present, sometimes, after sort!! commit 766712116d6bb82fd0ef8ab6eff32ea31ac65608 Author: Adam Dickmeiss Date: Thu Feb 6 10:31:53 2014 +0100 Change logging a bit in ZOOM's Z39.50 layer commit d1b6ed4a27c255041e3d719e4b05ab476c337bbf Author: Adam Dickmeiss Date: Tue Feb 4 14:40:55 2014 +0100 ZOOM_resultset_record_immedate never makes RECV_RECORD event Fixes test_http_86 for Pazpar2. commit 5eabfe6397e68d2a77af315ec7edfb30a1e6a54d Author: Adam Dickmeiss Date: Tue Feb 4 14:22:46 2014 +0100 ZOOM_record_cache_lookup makes RECV_RECORD event commit 31daf036f4ad6d6b33140d827859b4e530165848 Author: Adam Dickmeiss Date: Tue Feb 4 12:32:16 2014 +0100 memcached: generate SHA1 for records and store blob once commit ea0ffea1d02fe623b4da5b7b8aa972aa9f32f071 Author: Adam Dickmeiss Date: Tue Feb 4 11:25:29 2014 +0100 Deal with facets for caching Facets is part of search key. And corresponding facets in response are cached with the key. commit 9c0d61ec236fb24ac2c1f5641630488546438459 Author: Adam Dickmeiss Date: Tue Feb 4 11:22:59 2014 +0100 Enable memcahced binary protocol commit 2ac09752d7cb59ca0501c8666b8bc7a81d1e52d5 Author: Adam Dickmeiss Date: Fri Jan 31 12:35:59 2014 +0100 zoomsh: shows SearchResult-1 commit 192c53b56174fa2d80db61029ba95bfa2a1a480a Author: Adam Dickmeiss Date: Thu Jan 30 13:50:10 2014 +0100 ZOOM: resultset setname managed by ODR commit a91467db0bbbaefbaf64410b657a9439104997e0 Author: Adam Dickmeiss Date: Thu Jan 30 13:44:01 2014 +0100 memcached: use facets in key for result set commit 51f1a3a3ef95b75ce626c388c0e5e3310e2f0b1c Author: Adam Dickmeiss Date: Thu Jan 30 13:32:26 2014 +0100 ZOOM: change names of some facet var to denote response as opposed to request. commit bd4ea696fa932a215d18268afd1850035f7ebd05 Author: Adam Dickmeiss Date: Thu Jan 30 13:24:40 2014 +0100 Deprecate ZOOM_resultset_facets_names We can use ZOOM_resultset_facets to get list of facets, followed by ZOOM_facet_field_name for each facet. commit 50fbdc0bbd17afe2fd8f128330dc313700593d78 Author: Adam Dickmeiss Date: Thu Jan 30 11:47:41 2014 +0100 zoomsh: sortby command commit aaff6cb1913acdc1cff06d5290e5fecb6a2d53c3 Author: Adam Dickmeiss Date: Thu Jan 30 11:46:31 2014 +0100 memcached: take sorting into account for result set key commit dd016baf50d8cd02a1a32d1fd10b5544cae6ff96 Author: Adam Dickmeiss Date: Wed Jan 29 17:15:02 2014 +0100 Refactor: all memcached stuff to zoom-memcached.c commit 9779edc6c34338368c661ef6105dcde1a7398b95 Merge: c65e5692 5b0a40e3 Author: Adam Dickmeiss Date: Wed Jan 29 16:02:57 2014 +0100 Merge branch 'master' into yaz-728 commit 5b0a40e3ecc7fe72f9423a7a6c5f162082f5b2eb Author: Adam Dickmeiss Date: Wed Jan 29 15:59:47 2014 +0100 zoomsh: use proper list of connections and result sets YAZ-725 commit 5a0398df33ef2f0ed66ef4703c13b3edae754bae Author: Adam Dickmeiss Date: Wed Jan 29 10:14:16 2014 +0100 Implement cs_get_peer_certificate_x509 for GnuTLS commit c65e569219f8a60e2cba17ddc648a48a7b8b5096 Author: Adam Dickmeiss Date: Tue Jan 28 14:47:58 2014 +0100 Fix problem hit count caching in async mode commit 609ad9573e7ea6450727297bdd36080cf38a9032 Author: Adam Dickmeiss Date: Tue Jan 28 12:40:32 2014 +0100 ZOOM Z39.50 handling: refactor commit 9b04152a82503089d00716b383fdc20759990587 Merge: 17d622ab a3a04fe5 Author: Adam Dickmeiss Date: Tue Jan 28 11:39:47 2014 +0100 Merge branch 'master' into yaz-728 commit a3a04fe5dc71bfa1f55765ea6557ce312b2c57cf Author: Adam Dickmeiss Date: Tue Jan 28 11:39:17 2014 +0100 Require automake 1.11.1 or later YAZ-733 commit 17d622aba7cd121799024edbca11a4b3cc0789ef Author: Adam Dickmeiss Date: Mon Jan 27 15:50:36 2014 +0100 Sort: no need for present/search handling for sort response commit 503c86c1e635da2561cc4e16449257952f90ac4d Author: Adam Dickmeiss Date: Mon Jan 27 15:30:23 2014 +0100 Better Z39.50 search/present handling Need to look revisit Z39.50 sort next. commit 9c32d63a1113f58ceb168e8321f1e360b2006e3b Author: Adam Dickmeiss Date: Mon Jan 27 15:00:31 2014 +0100 Caches NamePlusRecord BER; works well But we must be smarter WRT Z39.50 present/search cache lookup commit 44de7e21fac2c7c731b635ba1d31b99ae6bb1259 Author: Adam Dickmeiss Date: Fri Jan 24 14:27:17 2014 +0100 Start work on record caching - does not work! Instead of caching the octet aligned record, we must cache Z_NamePlusRecord .. commit 053367cbe356fb3ce0def34b065dae589d700daf Author: Adam Dickmeiss Date: Fri Jan 24 13:08:52 2014 +0100 Add wrbuf_sha1_puts commit 0f4bd8b94ccda60070da27e5ba3ecb3204beea02 Author: Adam Dickmeiss Date: Fri Jan 24 13:07:23 2014 +0100 If libgcrypt is not found, disable memcached entirely That's because we need wrbuf_sha1_write / wrbuf_sha1_puts when we use memcached. commit 4b8b526fd4449f43debda51524325c251646a9c1 Merge: 7efed25c e050e2bc Author: Adam Dickmeiss Date: Fri Jan 24 12:54:47 2014 +0100 Merge branch 'master' into yaz-728 commit e050e2bc6f5e50c42f7b04cd002d47cd5e5ad6cf Author: Adam Dickmeiss Date: Fri Jan 24 11:46:10 2014 +0100 Win makefile: use tclsh straight (from PATH) This is part of msysgit (Windows Git). commit 7efed25c2ed807d32001e749f87f2eb300548c22 Author: Adam Dickmeiss Date: Thu Jan 23 15:12:32 2014 +0100 Add wrbuf_sha1_write commit 23a11d4150aeef79e2583c964214db8ad428487a Author: Adam Dickmeiss Date: Thu Jan 23 14:12:28 2014 +0100 Mention libgcrypt in Unix installation of YAZ commit 7b3a897f69c3b00b002020b0cdf29ddde3157f71 Author: Adam Dickmeiss Date: Thu Jan 23 14:04:10 2014 +0100 Tweak help msg for libgcrypt commit 35ffe076512941377bb6f3cbdfa774a4ceaf9641 Merge: 22c19c69 c1f23597 Author: Adam Dickmeiss Date: Thu Jan 23 14:00:51 2014 +0100 Merge branch 'master' into yaz-728 Conflicts: configure.ac commit c1f23597ea64485e2362d658f3653211202cc6a8 Author: Adam Dickmeiss Date: Thu Jan 23 13:10:49 2014 +0100 Remove SSL via OpenSSL support YAZ-732 Also deprecate three functions from comstack that aren't working with GnuTLS: cs_get_ssl, cs_set_ssl_ctx, cs_get_peer_certificate_x509. commit 22c19c698f72ce5328ea6d5d685c019be92d24d3 Author: Adam Dickmeiss Date: Thu Jan 23 11:40:33 2014 +0100 zoom: cache hit count commit fce18ebe9db3f404bf41362c723b06f1b28af29a Author: Adam Dickmeiss Date: Wed Jan 22 15:17:43 2014 +0100 zoom: simplify and turn some funcs into void commit c844fbf71bf74b1d677c6e6e12e1530cc9b314ce Author: Adam Dickmeiss Date: Wed Jan 22 15:07:26 2014 +0100 zoom: one common search task This simplifies some things but require us to note if a result set is live or not (live_set), so that we know if a search is required. Eventually this will allow us to postpone search/retrieve when caching is fully functional. commit a741500ee64cc5009f82d94585ea389e1c5e6613 Merge: 32790840 3e824a6f Author: Adam Dickmeiss Date: Wed Jan 22 14:32:06 2014 +0100 Merge branch 'master' into yaz-728 commit 3e824a6f36428c6a4ab72246796047803c080828 Author: Adam Dickmeiss Date: Wed Jan 22 11:47:31 2014 +0100 Add missing backslash for nmake makefile commit 64328f110e718807a11a74aa392c1f42a5538c47 Author: Adam Dickmeiss Date: Wed Jan 22 11:20:07 2014 +0100 Fix 5.0.12 date in NEWS commit afc7c6a84de378e105e63c4d853617ec3ffb4d48 Author: Adam Dickmeiss Date: Wed Jan 22 10:21:35 2014 +0100 Version 5.0.12 commit d913827c1f2e7c3ace54eb0d8b4c99daed376c2e Author: Adam Dickmeiss Date: Tue Jan 21 13:46:58 2014 +0100 Prefix URL with http:// if sru setting hints SRU/Solr mode YAZ-731 commit ad1e3b8cec6c1c6f7d009d5cc2d04453a294914e Author: Adam Dickmeiss Date: Tue Jan 21 13:44:19 2014 +0100 More fragment removal in SRU GET and Solr case YAZ-730 commit 09c113499ad3e65ca1679889c2a0165a52f1cb50 Author: Adam Dickmeiss Date: Tue Jan 21 12:55:26 2014 +0100 SRU GET/Solr base URLs may hold additional ?args YAZ-729 ZOOM option extraArgs already does this, though. It seems useful when dealing with Solr targets to limit by filter, eg. http://lui.indexdata.com:8080/solr4/select?fq=database:3902 commit d3ecee55bdfec0eec35b50b07ab830ad9535644d Author: Adam Dickmeiss Date: Tue Jan 21 11:42:25 2014 +0100 Remove #fragment for HTTP request encoding YAZ-730 commit 32790840d73b1f4a4bde1478e6b14699aac00e94 Author: Adam Dickmeiss Date: Mon Jan 20 15:29:15 2014 +0100 ZOOM: initial experiments with memcached Option memcached if set, enables memcached and the value is options for memcached, eg "--server localhost". Key for hit count is stored and retrieved in memcached. The value is just logged; no optimization WRT ZOOM yet. commit be89f721ce59303c3f7261b7bf86b971dff18376 Author: Adam Dickmeiss Date: Mon Jan 20 15:28:49 2014 +0100 Add configure check for memcached headers+libs commit e83e1a41848ba1e54e2ba23e58f84ce91ed05927 Author: Adam Dickmeiss Date: Thu Jan 16 12:56:57 2014 +0100 Delete trailing whitespace commit 2e8d07c37906b555ebdde08f2e855a391818f6b6 Author: Adam Dickmeiss Date: Thu Jan 16 12:47:14 2014 +0100 Doc: Update list of DLLs/LIBs commit db05fbd0f2d1daf9ab9dc33b9876fe37a53c0037 Author: Adam Dickmeiss Date: Thu Jan 16 12:46:50 2014 +0100 Remove trailing whitespace commit 4efb5e2a72135a8b9b8090bc0404277f3b143ccc Author: Adam Dickmeiss Date: Thu Jan 16 11:52:26 2014 +0100 Doc: update href link to Unix utils and Git commit 08cbe0ceed43df90c48a5863de2f1b72cca67cb2 Author: Adam Dickmeiss Date: Wed Jan 15 15:32:53 2014 +0100 Version 5.0.11 commit 82597a46abccacc8daa3f59838a88b0128414673 Author: Adam Dickmeiss Date: Wed Jan 15 15:31:51 2014 +0100 Update NEWS commit 02b9296d9a65ff5b325cedbd4d9455ba2edd9365 Author: Adam Dickmeiss Date: Wed Jan 15 15:04:11 2014 +0100 zoomsh: do not use readline for stdin (no tty) YAZ-724 Just use fgets in that case. If the user hits Ctrl-D a new-line is also printed. commit c44b53d5d69b1aa73ca1561de1b83392527c7233 Author: Adam Dickmeiss Date: Wed Jan 15 14:41:57 2014 +0100 zoomsh: empty command ignored YAZ-723 rather than performing exit of zoomsh. commit d1b8a1c1647ebb00401f6b6e8f992cca7480b5f9 Author: Adam Dickmeiss Date: Wed Jan 15 11:05:53 2014 +0100 ZOOM: For redirect, reconnect always YAZ-722 The problem is that some HTTP proxies, squid for one, do not allow connection to be re-used. commit a7caedd0f9ba12290619e65bd2277d54ef800e8e Author: Adam Dickmeiss Date: Fri Jan 10 14:01:53 2014 +0100 yaz-url utility offers option -v to enable verbose mode commit d0da7ea31871b3fcb3785ec7e1d06f4739fb6ada Author: Adam Dickmeiss Date: Fri Jan 10 14:01:21 2014 +0100 yaz_url uses yaz_check_location and offers verbose mode commit b7579b51680366f1f2be83185faf1730d49859da Author: Adam Dickmeiss Date: Fri Jan 10 14:00:36 2014 +0100 yaz-client uses yaz_check_location commit 3bfb3813869cfa6d6e199bf7a24ebd8e300054be Author: Adam Dickmeiss Date: Fri Jan 10 14:00:25 2014 +0100 ZOOM C uses yaz_check_location commit d606d0d7c6015414a1d5ba065d09b507679be5a3 Author: Adam Dickmeiss Date: Fri Jan 10 13:58:36 2014 +0100 Add yaz_check_location This function gets an absolute URI from Location (HTTP redirect). commit 053c92d650501a953d68b228ad74d96b4606eaf6 Author: Adam Dickmeiss Date: Fri Jan 10 13:57:33 2014 +0100 cookie: introduce yaz_cookies_reset commit 64e4e1f8e3298673309f5483bd6d74b3b357238a Author: Adam Dickmeiss Date: Thu Jan 9 16:28:26 2014 +0100 Add test_marc.sh JSON test results commit 6fd59c085f99d8b823cd1d24d3110411c452cb87 Author: Adam Dickmeiss Date: Thu Jan 9 16:23:51 2014 +0100 Bison: use %name-prefix directive rather than -p option commit b111819a3d4c8dea01efe2c12ef21689ea0c21ed Author: Adam Dickmeiss Date: Thu Jan 9 16:20:44 2014 +0100 Update cql.y for newer bison YAZ-720 The important part is that YYLEX_PARAM and YYPARSE_PARAM are no longer supported. Instead one must use %lex-param and %parse-param . commit 4bcf077d6d13516c00406c84021db939b0117d74 Author: Adam Dickmeiss Date: Thu Jan 9 13:34:38 2014 +0100 Version 5.0.10 commit 2cb501be3b31d5ddc14de30498fadb4b31d56fb5 Author: Adam Dickmeiss Date: Thu Jan 9 13:29:58 2014 +0100 Cookie handling; deal with relative URI in Location YAZ-719 commit 406ec3b354a9260bf09cc80c540d3d19845dc915 Author: Adam Dickmeiss Date: Fri Jan 3 11:08:16 2014 +0100 rpn2solr: support truncation left(2), left&right(3) YAZ-718 commit 473824797f568578dc17d7242551cb2f7ccef46c Author: Adam Dickmeiss Date: Thu Jan 2 19:52:46 2014 +0100 Happy new year Omit copyright year range from most source files. We don't want to update them every year anymore. commit 6ffc994bc475a1bc1b23e5a70f497637edcb53f2 Author: Adam Dickmeiss Date: Mon Dec 23 10:38:25 2013 +0100 Mention SRU version 2.0 in yaz-client man commit e746aded3630be444c66f12e341a63413df92371 Author: Adam Dickmeiss Date: Fri Dec 20 15:03:34 2013 +0100 Version 5.0.9 commit 23aa28662e9effc572e4517d253a589059691808 Merge: a2ee2bb7 176adcd5 Author: Adam Dickmeiss Date: Fri Dec 20 14:58:21 2013 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 176adcd5ec7f2340fb6f0f625a727498db9c04c4 Author: Adam Dickmeiss Date: Fri Dec 20 11:21:23 2013 +0100 Version 5.0.8 commit a2ee2bb752aefcfcec36b8880982a50c9ba1e4ff Author: Adam Dickmeiss Date: Fri Dec 20 11:12:13 2013 +0100 yaz-client: Loosen NS check for SRU YAZ-716 commit eeb3f9f3eb2b41f75341f5d93d0583bda80e5a07 Author: Adam Dickmeiss Date: Fri Dec 20 11:10:40 2013 +0100 ZOOM: Loosen NS check for SRU YAZ-716 commit fb14e7c421cd6539e67cebf31cb8a7787161937c Author: Adam Dickmeiss Date: Fri Dec 20 11:09:18 2013 +0100 For SOAP decoding, allow handler[i].ns to hold element It's assumed to be a namespace if it has a colon in it, and an element otherwise. Part of YAZ-716 . commit d33b2b3730c2746928944277ea8268485dc875b8 Author: Adam Dickmeiss Date: Wed Dec 18 14:09:25 2013 +0100 cs_parse_host free's connect_host on failure commit 90636015fbde45fc0c2d35368ab7a32b23041cd5 Author: Adam Dickmeiss Date: Wed Dec 18 14:04:01 2013 +0100 Make cs_parse_host public commit f84b7bc9900a44f2e760dd9fa2456c0d2d8955d9 Author: Adam Dickmeiss Date: Wed Dec 18 14:03:22 2013 +0100 Fix double HTTP dump Bug introduced in YAZ 5.0.6. commit a5c7c4da7da4998222954c0afb60b46513a3adfe Author: Adam Dickmeiss Date: Tue Dec 17 15:10:48 2013 +0100 Version 5.0.7 commit 777b03337c9a5d14ed30c65e48a7a13eb1993536 Author: Adam Dickmeiss Date: Tue Dec 17 14:58:35 2013 +0100 yaz-ztest: Proper 0-terminate user-defined record buffer commit 4ca81fbf3665bcd33a53c8b860de9dd5dfbd63a8 Author: Adam Dickmeiss Date: Tue Dec 17 10:43:56 2013 +0100 Version 5.0.6 commit 0123a5450b4a7eb7e0a52869dd5c099e415f5feb Author: Adam Dickmeiss Date: Tue Dec 17 10:43:36 2013 +0100 Update API use to 5.0.5 due to new yaz_marc_read_json_node commit dea9687d6287494fbabe3c4ab2b0b6960dc2a990 Author: Adam Dickmeiss Date: Tue Dec 17 10:23:06 2013 +0100 Upd NEWS commit cca8a96be6d6ce6de52009e53e23876ce2fc195c Author: Adam Dickmeiss Date: Mon Dec 16 14:23:20 2013 +0100 User-defined retrieval records for yaz-ztest YAZ-714 Man page for yaz-ztest updated too. commit 7c7738bb0d8a75779cd117132404cce5b0c15952 Author: Adam Dickmeiss Date: Mon Dec 16 13:47:22 2013 +0100 Fix spelling in log msg commit e5c4e6d4c245ae26a73953cbc5261929f55c103f Author: Adam Dickmeiss Date: Wed Dec 11 15:48:13 2013 +0100 Fix truncation of HTTP body log Use the stream write instead of odr_printf which has a 4K tmp buffer. commit 6ee0d7c0404834a0a59547c3bd7e2686f838ce37 Author: Adam Dickmeiss Date: Tue Dec 10 12:54:30 2013 +0100 Fix encoding of 0x00a4 (unicode to danmarc) YAZ-713 commit 939b4b8c6d6c6a3e5bb0833dc7977ebcdfe2dbf2 Author: Adam Dickmeiss Date: Mon Dec 9 11:45:22 2013 +0100 Version 5.0.5 Use 1.indexdata rather than 1indexdata for debian_revision + RPM Spec Release. commit f6352a17322875e33604e2118a0cca62563ef977 Author: Adam Dickmeiss Date: Mon Dec 9 11:19:45 2013 +0100 Add Ubuntu saucy commit 98bb77eba4edba21325c89b46dd288f71ca23215 Author: Adam Dickmeiss Date: Mon Dec 9 10:58:10 2013 +0100 Update documentation WRT MARC-in-JSON commit d7c2d20fef26a64dd97469cc0b6bf02f9eb95981 Author: Adam Dickmeiss Date: Mon Dec 9 10:57:51 2013 +0100 MARC-in-JSON support for record conversion utility commit 2a7d35ce3d1bad977c9cf4f8d586e3699b4d20b3 Author: Adam Dickmeiss Date: Mon Dec 9 10:57:07 2013 +0100 yaz-ztest: returns MARC-in-JSON for JSON format commit bb6ad257696a3b58e1f7f141b37e7471a6e91968 Author: Adam Dickmeiss Date: Fri Dec 6 16:23:47 2013 +0100 Update doc/common commit 8bcd70cb460d7a11175e82487f498102ead66472 Author: Adam Dickmeiss Date: Fri Dec 6 16:22:07 2013 +0100 Update doc WRT json render commit f6a16487df367408b149f74af99d92531af1bcaf Author: Adam Dickmeiss Date: Fri Dec 6 16:21:34 2013 +0100 Support record render "json" - for ZOOM_record_get commit 8df1aa3a267941f6b2fcd9af2223cdb0f0b325af Author: Adam Dickmeiss Date: Fri Dec 6 16:01:15 2013 +0100 Update yaz-marcdump with URL to MARC-in-JSON commit 725b07a551ac42b73d3b621e6a9b696cd13f42d0 Author: Adam Dickmeiss Date: Fri Dec 6 14:57:10 2013 +0100 JSON MARC decoding + tests commit 1ecf21b0324959e62628807d5df217d7a761730b Author: Adam Dickmeiss Date: Fri Dec 6 11:28:40 2013 +0100 marc json write: Combine two wrbuf calls into one commit 82fc895600b5781dcb28afd00ccf583f118745d2 Author: Adam Dickmeiss Date: Fri Dec 6 11:24:19 2013 +0100 Remove obsolete Doxygen entries commit 3276a62a929465af5c4db60f7b9d6751d590be57 Author: Adam Dickmeiss Date: Fri Dec 6 11:24:07 2013 +0100 Fix ICU comment for icu_chain_get_org_info commit e529ed18a6825f980bb16b230e56c6d53743ced1 Author: Adam Dickmeiss Date: Fri Dec 6 11:17:11 2013 +0100 wrbuf: new utility wrbuf_iconv_write2 which is a better wrbuf_iconv_write_x .. commit b8fbcf6d00bc77c4ccdb02d68c9316f3263be15a Author: Adam Dickmeiss Date: Thu Dec 5 17:20:10 2013 +0100 Proper encoding of JSON MARC records commit 574ae68dc570706b4468b29e82681efe15bc7180 Author: Adam Dickmeiss Date: Thu Dec 5 17:19:55 2013 +0100 Add wrbuf_iconv_json_{write,puts} commit bbfac2e92dee794029b7a2ee6c843c9b99e22cc3 Author: Adam Dickmeiss Date: Thu Dec 5 16:40:55 2013 +0100 JSON / MARC encoding commit b2c79728bb6d24c604a0a9c8fc278afe01827c2a Author: Adam Dickmeiss Date: Tue Dec 3 13:20:52 2013 +0100 yaz-ztest: Esn=pz2 and syntax=XML returns Pazpar2 records commit f8ff51d46ab411a8b4244becf67c9748ef5550a7 Author: Adam Dickmeiss Date: Thu Nov 28 14:27:14 2013 +0100 danmarc iconv: fixes and more tests 0xa733 is converted to @å , 0xa732 is converted to @Å instead of @a733, @a732 . commit 5b048b45e49be6a0af7cb17dee0c49da9074f013 Author: Adam Dickmeiss Date: Fri Nov 22 14:45:05 2013 +0100 Version 5.0.4 commit 1c54b505929ac84ab42bdee710e06a7c2f3513c3 Author: Adam Dickmeiss Date: Fri Nov 22 14:43:20 2013 +0100 Fix somewhat brain damaged test commit ffb913afb48e3a0cb3539827daafed79562ab0b7 Author: Adam Dickmeiss Date: Fri Nov 22 14:12:07 2013 +0100 Improve error reporting for ICU chains YAZ-707 Report config element+rule when ICU status is "failure". commit b0d1ba321a6bd82a2b511e4a707248ccc3c719e0 Author: Adam Dickmeiss Date: Thu Nov 21 12:55:25 2013 +0100 ZOOM: stop fetching if present response has no records YAZ-710 commit 9afc8581574131c6d3ecea36c85740c07714318c Author: Adam Dickmeiss Date: Wed Nov 20 12:00:32 2013 +0100 Fix XML config GFS do not fail if port is in use YAZ-709 commit 126038232da386521ce190348fe38e33376051ef Author: Adam Dickmeiss Date: Tue Nov 19 11:36:55 2013 +0100 Version 5.0.3 commit 79be1f661376242e7dd3a382cf87a23f60e45643 Merge: 99f1209b 090f0ff7 Author: Adam Dickmeiss Date: Tue Nov 19 11:35:29 2013 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 99f1209b269c1b5f63360a2339c694e110a086af Author: Adam Dickmeiss Date: Tue Nov 19 11:35:19 2013 +0100 Add Ubuntu raring, Debian jessie commit 090f0ff7c9c93f14467f6dd23383242a8b7926b3 Author: Adam Dickmeiss Date: Tue Nov 19 11:32:29 2013 +0100 Update NEWS commit d16b967479372b2ad3fdc8f348c0d1808710039a Author: Adam Dickmeiss Date: Mon Nov 18 10:33:15 2013 +0100 Add automake option subdir-objects YAZ-708 commit b352182364d72bc423cb7ae6e6e5a812e3c8cfd0 Author: Adam Dickmeiss Date: Wed Nov 13 13:23:21 2013 +0100 yaz-ztest: -V shows version (like yaz-client -V) commit e462d48003aafc70536f9982b44edef5d32a5f6a Author: Adam Dickmeiss Date: Thu Nov 7 16:02:44 2013 +0100 New encoding: danmarc YAZ-692 commit 2edad3fa067b30e1a8effde531a5fe75ddd899ce Author: Adam Dickmeiss Date: Thu Nov 7 13:28:59 2013 +0100 test_iconv: make variable local commit 03b00294a8f57bfd02c81e7ac4ee2bb280177f98 Author: Adam Dickmeiss Date: Thu Nov 7 11:14:05 2013 +0100 Remove unused code sections commit e6623bc5f605bca46774fdeed6e87067df9c5a7f Author: Adam Dickmeiss Date: Thu Nov 7 10:45:42 2013 +0100 Reformat commit 30b3c16a904efc6f5e0c4326eaa7e13589921572 Author: Adam Dickmeiss Date: Wed Nov 6 20:07:44 2013 +0100 Remove ZOOM_RESULT_LISTS not in use commit 9a83c08e1f5eca156f911f71189590b2d436a723 Author: Adam Dickmeiss Date: Wed Nov 6 15:57:18 2013 +0100 yaz-client: lslb, ssub, mspn are Odr_ints now YAZ-705 commit bc86f4cb335deebc4bd7e59db33ad503b04a827d Author: Adam Dickmeiss Date: Fri Nov 1 13:49:55 2013 +0000 daemon: only wait for immediate child YAZ-704 rather than all children. commit 0a60fb964618d708863b02a8483a863072cfd4cf Author: Adam Dickmeiss Date: Thu Oct 31 15:40:43 2013 +0100 On Type-7 commit 8010ebca66a1ba04c1e7517364d16be7434cc25c Author: Adam Dickmeiss Date: Wed Oct 30 13:23:33 2013 +0100 Beginnings of sorting chapter commit 0cd4a65083c86690792faa7bb14de67a30bcfc20 Author: Adam Dickmeiss Date: Wed Oct 30 11:44:44 2013 +0100 Add retrieval example - MARCXML backend commit 226063abdf1fadf1850eb6a7a19cc71a9bb1c8bf Author: Adam Dickmeiss Date: Tue Oct 29 13:25:18 2013 +0100 yaz-client: fix setting of SRU record schema If scheme was unset, it could lead to invalid memory reference. commit 9555e682b2e9e018092fb92a4abd43e11d4fedb7 Author: Adam Dickmeiss Date: Wed Oct 16 13:59:44 2013 +0200 Version 5.0.2 commit b8cd7370481de4461e97111f15c63360e8afbf13 Author: Adam Dickmeiss Date: Wed Oct 16 12:34:06 2013 +0200 Update NEWS commit 8ae71d0f1dbb847eff541dd5bc3882f39b1a037a Author: Adam Dickmeiss Date: Wed Oct 16 12:26:12 2013 +0200 GFS: make surrogate diagnostic when yaz_record_conv_record fails instead of non-surrogate diagnostic. This is a per-record failure. commit f05f8cc08216e57957e580e7bb1fd3c5db163ba7 Author: Adam Dickmeiss Date: Fri Oct 11 14:20:08 2013 +0200 yaz-ztest returns schema for MARCXML test records commit ad8727f7d06019b84e0103710bd184aba9887629 Author: Adam Dickmeiss Date: Fri Oct 11 13:58:43 2013 +0200 Ignore Debian build directories commit 0159b1dd08a8c5498fb87fffe000bff170f069f8 Author: Adam Dickmeiss Date: Fri Oct 11 13:58:12 2013 +0200 Use NULL path for non-abs XML config fname commit c586ade2977ae5f6bf01f24cc7c8a84492c544a8 Author: Adam Dickmeiss Date: Fri Oct 11 13:01:22 2013 +0200 GFS: Allow multiple listenrefs YAZ-554 commit 3a7d6f123828f282b26eddbb9724e4e03827605f Author: Adam Dickmeiss Date: Fri Oct 11 12:59:12 2013 +0200 Use xmlconfig path as prefix for fnames YAZ-702 commit b860b61a408af125d8f57f5a3a6d12844dff87ea Author: Adam Dickmeiss Date: Fri Oct 11 11:04:16 2013 +0200 Add simple type cast (xmlChar *) to (char *) commit 11af92513c72d3eb1e618e658b9418a42f4a630f Author: Adam Dickmeiss Date: Tue Oct 8 11:41:27 2013 +0200 Fix Content-Type charser fix for non-quoted mode commit cbe9e3611ef12ee0dd00ce6170d5b46f8a331d8a Author: Adam Dickmeiss Date: Mon Oct 7 14:09:15 2013 +0200 Content-Type charset fixes YAZ-701 Do not inspect charset in Content-Type header for SOAP in decoding of SRU. The paylaod (XML) itself tells what encoding it is. In response, never supply encoding in Content-Type. The response payload (XML) tells what it is (with no encoding in XML it's UTF-8). commit 13ac77e545b5d7e8b5ecb053d0aaa321ce12e487 Author: Adam Dickmeiss Date: Sat Oct 5 16:31:33 2013 +0200 Add test for blanks in URL path commit 4aec24bebc09735c5157ce9c9904e7b0ad310fdd Author: Adam Dickmeiss Date: Sat Oct 5 16:30:42 2013 +0200 HTTP decoding: allow blanks in URL paths YAZ-700 commit 33d0d214a9219e190e15779b4e4f5e31fd7946be Author: Adam Dickmeiss Date: Fri Oct 4 14:45:49 2013 +0200 Add check for YAZ-700 commit d94ffff6dcab70517a1588747bd76c6afc694a65 Author: Adam Dickmeiss Date: Fri Oct 4 12:57:00 2013 +0200 Version 5.0.1 commit ec0d220ff7a4d9b8aeaa5ce3ffcfc57a6b845287 Author: Adam Dickmeiss Date: Thu Oct 3 15:55:45 2013 +0200 Rework how SRU 2.0 facets are mapped to Facet ASN. commit 9fd324a42488bec84c27be945c66ea1563d4c60e Author: Adam Dickmeiss Date: Thu Oct 3 15:31:06 2013 +0200 Fix elements for which SRU facet NS is applied commit 8375be590a8640cd5673106bc828dd6d4711be28 Author: Adam Dickmeiss Date: Thu Oct 3 15:28:34 2013 +0200 Fix NS for SRU 2.0 diagnostics commit 8089c307623ed1e8094ef8c292d8598526472d84 Author: Adam Dickmeiss Date: Wed Oct 2 15:18:33 2013 +0200 Always include record{Data,Schema} for SRU record They are mandatory.. We include them, even if empty. commit 65b797ebae01184ec6e22c2ecfc2ce1de8eaf169 Author: Adam Dickmeiss Date: Wed Oct 2 15:17:45 2013 +0200 Fix NS for SRU explain for version 2.0 YAZ-697 commit 280940bf70395d3bccf45208efc302b6a7daf03e Author: Adam Dickmeiss Date: Wed Oct 2 14:57:33 2013 +0200 Use version when generating explain req commit 044e617fc468bfce45f39e66fe8d34b99654eba2 Author: Adam Dickmeiss Date: Wed Oct 2 14:02:23 2013 +0200 Proper diagnostics for unsupp operation YAZ-696 commit d6b502441f8d9b4b169e4f9bb28468d8f2dec627 Author: Adam Dickmeiss Date: Wed Oct 2 11:48:02 2013 +0200 Remove deprecated functions yaz_uri_val .. and yaz_uri_val_int. Never used outside YAZ. commit 1932238af8876622f567da122fb52fb3791c9514 Author: Adam Dickmeiss Date: Wed Oct 2 11:46:43 2013 +0200 Simplify in a lot of places using odr_strdupn commit 4db187fbff08310195d08260817d7aa63f1fa4bc Author: Adam Dickmeiss Date: Tue Oct 1 20:03:10 2013 +0200 odr_create_Odr_oct: null terminate the buffer Some applications rely on it :-) commit f43cb3097bc38bd3e38c5bb3024d567793ab30fe Author: Adam Dickmeiss Date: Tue Oct 1 15:20:13 2013 +0200 Version 5.0.0 commit 41fffe7a22f77d15b5d0214079e11ad62fdb2ca9 Merge: d7c3b6dd f0f1f893 Author: Adam Dickmeiss Date: Tue Oct 1 15:19:59 2013 +0200 Merge branch 'sru_2_0' of ssh://git.indexdata.com/home/git/pub/yaz into sru_2_0 commit f0f1f893cdc06a8c44cf1eef8086dc145fdfe5af Author: Adam Dickmeiss Date: Tue Oct 1 15:19:28 2013 +0200 Upd DLL fnames to version 5 commit d7c3b6dd905cd9c2e372534147e2e7afd747d5c6 Author: Adam Dickmeiss Date: Tue Oct 1 14:59:07 2013 +0200 More NEWS commit ad88b93c8fbb00728acd0b49b4079167304ed58d Author: Adam Dickmeiss Date: Tue Oct 1 14:57:43 2013 +0200 Minor reformatting commit b06636208651777c08e2456bf3b5953fc3c0f2c2 Author: Adam Dickmeiss Date: Tue Oct 1 14:53:00 2013 +0200 Remove timeout member from COMSTACK Was never used for anything commit 6cf32fafe48e17e937809e54edf5abc7451d557b Author: Adam Dickmeiss Date: Tue Oct 1 14:51:50 2013 +0200 Remove PROTO_SR, CS_SR, CS_Z3950 commit e14b57aabd2bcdd5996d17778bf9055935d7b252 Author: Adam Dickmeiss Date: Tue Oct 1 14:49:56 2013 +0200 Remove (last) bits of WAIS support commit 2b8637b1b34cbbd57cee3cd1b493f5a8231e9afd Author: Adam Dickmeiss Date: Tue Oct 1 14:39:50 2013 +0200 Remove member soap_handler from statserv_options_block It was not in use. commit 64384a8352413d396eb3cbdeb2d3d71cfa63ab21 Author: Adam Dickmeiss Date: Tue Oct 1 13:06:04 2013 +0200 Increase statserv GFS string buffers to 1024 Also remove default_listen that is of no use to backend implementations. commit 4466c3fb3ec5053427237ca4523ed4ed9f7e9425 Author: Adam Dickmeiss Date: Tue Oct 1 12:33:34 2013 +0200 doc: update supported SRU version commit dc6dc2ed4662ece6439e1ac3592fba93447bb02c Author: Adam Dickmeiss Date: Tue Oct 1 12:32:47 2013 +0200 Update picture WRT SRU/Solr commit 86c66b80a4eee1c86d6ed48bf65cbe55815df9e2 Author: Adam Dickmeiss Date: Tue Oct 1 11:50:14 2013 +0200 Upd NEWS commit 457156ca85763b2329eaf066918e2d379c61d47d Author: Adam Dickmeiss Date: Tue Oct 1 11:45:03 2013 +0200 Remove packing in Z_SRW_record (not in use) commit c4ca7f07c98c0cde1978b8b7f2140ce74ba809d7 Merge: 54823fb8 023439d5 Author: Adam Dickmeiss Date: Tue Oct 1 10:03:39 2013 +0200 Merge branch 'master' into sru_2_0 Conflicts: IDMETA debian/changelog debian/rules commit 023439d5ca0838437c2ca688aed1d7bf99551fca Merge: 026ad3d7 7d6d1273 Author: Adam Dickmeiss Date: Tue Oct 1 09:58:37 2013 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 026ad3d737be4cbba4e98c6b6dc753f8029e3655 Author: Adam Dickmeiss Date: Tue Oct 1 09:45:09 2013 +0200 Version 4.2.69 commit ddebba157a75a9947a5fc3a0eb59fffe9942659c Author: Adam Dickmeiss Date: Tue Oct 1 09:44:58 2013 +0200 Ignore yet another directory in debian/ commit eeb9ea6353f452fd1a7ea07e95d4827609213fc7 Author: Adam Dickmeiss Date: Tue Oct 1 09:42:36 2013 +0200 Upd NEWS commit 54823fb816a4bc3366d1091bbdbf1df88bcf2451 Merge: 7ce8caa1 7d6d1273 Author: Adam Dickmeiss Date: Fri Sep 27 17:30:53 2013 +0200 Merge branch 'master' into sru_2_0 commit 7d6d127337a9f3b76a9b0b8feeec3bf66dc740da Author: Adam Dickmeiss Date: Fri Sep 27 17:30:38 2013 +0200 Fix link in config commit 7ce8caa109dd9446e2d17f1dcaac1be088b548ff Merge: 04a6feee e7377c90 Author: Adam Dickmeiss Date: Fri Sep 27 15:43:31 2013 +0200 Merge branch 'master' into sru_2_0 commit e7377c90323e05943dcf318c172a5728605fd9b5 Author: Adam Dickmeiss Date: Fri Sep 27 15:42:06 2013 +0200 GFS: log when closing down - at least SIGTERM YAZ-684 Also change formatting WRT PID logging a bit. commit 04a6feeefe28e7f2f9f4701560b3344545a681c6 Merge: 2d59f978 6d59a642 Author: Adam Dickmeiss Date: Fri Sep 27 15:16:06 2013 +0200 Merge branch 'master' into sru_2_0 commit 6d59a642cb7cd71df249fc4ecf5928ea79c7038c Author: Adam Dickmeiss Date: Fri Sep 27 15:12:33 2013 +0200 Improve display of MARC records with multi-byte subfield IDs YAZ-695 In some rare cases subfield identifiers are multi-byte characters. This will try to deterime length of those and split accordingly. This affects display in line mode as MARCXML/MarcXchange. The encoding of ISO2709 is the same. commit a3e400f4aca554102ee4c84082dcf8f7244ff6d4 Author: Adam Dickmeiss Date: Fri Sep 27 15:11:46 2013 +0200 Change inp argument to const for yaz_read_UTF8_char commit 3bdd5907fac99ba859596aeb10fd948fd6447750 Author: Adam Dickmeiss Date: Fri Sep 27 14:57:55 2013 +0200 Add include of string.h commit 2d59f978bb2171ecdd77d822a71379a7ca5f29c3 Merge: f25efea3 f05461c7 Author: Adam Dickmeiss Date: Fri Sep 27 14:49:08 2013 +0200 Merge branch 'master' into sru_2_0 commit f05461c79b402d35bb6ca5feb75a848f4a5a3c7d Author: Adam Dickmeiss Date: Fri Sep 27 13:47:20 2013 +0200 yaz-marcdump: fix leaks for MARCXML parsing YAZ-694 commit f25efea391717fb9aeefa7dbfb7864d22595740e Merge: bb1e62c0 a4558673 Author: Adam Dickmeiss Date: Thu Sep 26 15:10:10 2013 +0200 Merge branch 'master' into sru_2_0 commit a4558673e495030fe31c38ff403f879923860b5e Author: Adam Dickmeiss Date: Thu Sep 26 14:45:32 2013 +0200 MARCXML parsing: avoid skipping 1st field if no leader YAZ-693 commit a6a0761adac3b5760765ee90c0146edf59f9f3ec Author: Adam Dickmeiss Date: Thu Sep 26 13:00:07 2013 +0200 Better check of marc leader info YAZ-691 Problem is that some systems generate MARCXML/MarcXchange with funny headers. These will not work if encoded as ISO2709. Some tests produce new output, due to updated warning messages about leader content. commit bb1e62c04a09a3faff8c22178626a536ecbf1e47 Merge: be4b5fc4 c0920cd3 Author: Adam Dickmeiss Date: Wed Sep 25 14:06:34 2013 +0200 Merge branch 'master' into sru_2_0 commit be4b5fc4e97e7d8a1d9b1afcf332ac3292da153b Author: Adam Dickmeiss Date: Wed Sep 25 14:06:00 2013 +0200 Convert to debhelper version 7 with smaller rules file commit 20d86f7e985c86dca5e4d471a3e5382fb2832602 Author: Adam Dickmeiss Date: Wed Sep 25 13:42:53 2013 +0200 Clean socket file (sometimes used in testing) commit c0920cd3948ac69f90605a47c2e2451c3d30b392 Author: Adam Dickmeiss Date: Wed Sep 25 10:45:29 2013 +0200 Add Heiko Jansen to credits commit c57f145946e02d33035cf27878a3ff618e77d6a2 Merge: 0efa8f2d fbd98e3b Author: Adam Dickmeiss Date: Tue Sep 24 19:21:10 2013 +0200 Merge branch 'master' into sru_2_0 commit fbd98e3ba1435882c6fa121e5dee6648ed295b60 Author: Adam Dickmeiss Date: Tue Sep 24 19:21:03 2013 +0200 cql2pqf: fix syntax error commit 0efa8f2d1b7c2b5d881f0a1e9aee32939f6aad83 Merge: a9f1420c 6bba4a5a Author: Adam Dickmeiss Date: Tue Sep 24 17:56:30 2013 +0200 Merge branch 'master' into sru_2_0 commit 6bba4a5ab440d5bfd06e547ebc1a2cae9e35cb30 Author: Adam Dickmeiss Date: Tue Sep 24 17:55:47 2013 +0200 cql2pqf: verbose=0 by default commit 9b685bd3c014fd6b68c8a3018290aaa8c6a1d518 Author: Adam Dickmeiss Date: Tue Sep 24 17:55:20 2013 +0200 cql2pqf: allow PQF queries from stdin commit a9f1420c2c1bc16b5a49391a56c8599dbd162187 Merge: 075d4ef0 73d18d08 Author: Adam Dickmeiss Date: Tue Sep 24 15:06:40 2013 +0200 Merge branch 'master' into sru_2_0 commit 73d18d08ae7ac42589508fb6f8db854087a3de78 Author: Adam Dickmeiss Date: Tue Sep 24 15:05:26 2013 +0200 yaz-client: display MAB records YAZ-689 Thanks for Heiko Jansen for this patch. commit 075d4ef0007e9675849275cac1c713ac7940e053 Merge: 2fc1ed65 c50a3a4c Author: Adam Dickmeiss Date: Tue Sep 24 10:28:04 2013 +0200 Merge branch 'master' into sru_2_0 commit c50a3a4cf22ccd05ad1cfae052dd3f6583bfb70c Author: Adam Dickmeiss Date: Tue Sep 24 10:27:20 2013 +0200 New utility z_get_HTTP_Response_server which allows both HTTP server name and HTTP server URL to be given in response. commit 2fc1ed65e59499ef747922ea9763d8f21f056f6e Merge: 758265d6 b8294dc8 Author: Adam Dickmeiss Date: Mon Sep 23 15:41:46 2013 +0200 Merge branch 'master' into sru_2_0 Conflicts: IDMETA debian/changelog debian/rules commit b8294dc86fb8e92d669f974f0bbe326da2bfc5de Author: Adam Dickmeiss Date: Mon Sep 23 15:40:32 2013 +0200 Debian: do not depend on obs tcl8.3 commit 943e66a6ac1688abd1adff0bf3c30952dfb7ba60 Author: Adam Dickmeiss Date: Mon Sep 23 15:39:45 2013 +0200 Debian: do not depend on obs libicu36-dev commit 00ec8caa79fb66584067d81d5807d53547ed833b Merge: e457b1e2 fd2bef01 Author: Adam Dickmeiss Date: Mon Sep 23 10:41:40 2013 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit e457b1e25f30fde461f1a13b430114a19f119d4e Author: Adam Dickmeiss Date: Mon Sep 23 10:12:11 2013 +0200 Version 4.2.68 commit 3d6a83ffdf9f09a97fea2c346029b7bff0d27adc Author: Adam Dickmeiss Date: Mon Sep 23 10:10:16 2013 +0200 Upd NEWS 2 commit baa4b0d4605b55a779da0a5a8466f183d07d0940 Author: Adam Dickmeiss Date: Mon Sep 23 10:07:29 2013 +0200 Upd NEWS commit c23b3002b19ba3fcc016eb3fab454f22e0ecacee Author: Adam Dickmeiss Date: Mon Sep 23 10:06:35 2013 +0200 zoom: authenticationMode YAZ-686 commit decbbc7c15f7c05fae05f6bcb4e677caf77959da Author: Adam Dickmeiss Date: Mon Sep 23 09:37:34 2013 +0200 yaz_encode_sru_extra: keep existing extra args commit fd2bef01ba028252d1ca18d07c6c27545b12d425 Author: Dennis Schafroth Date: Mon Sep 23 09:33:52 2013 +0200 Fix test commit 1b750a9f8ea0d258fde61f5bac2d5af5bd783eb0 Merge: 5a82300a 9eb7249e Author: Dennis Schafroth Date: Mon Sep 23 09:27:39 2013 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 5a82300afabd3820d847e9232cbefcca281ae4d8 Author: Dennis Schafroth Date: Mon Sep 23 09:27:36 2013 +0200 Add more complex queries commit 84e48bf312354bb4bc3c9a122f2c48346776a4fa Author: Dennis Schafroth Date: Mon Sep 23 09:27:01 2013 +0200 Add more complex query to test commit 758265d6f85aa627387be40bfa4fe90b829ec4f3 Author: Adam Dickmeiss Date: Sun Sep 22 18:19:50 2013 +0200 rpn2solr: reformat (same as "master"). commit f50e88ece40cd62eb9e969cd138e3f274725a991 Merge: ac0e4f37 9eb7249e Author: Adam Dickmeiss Date: Sun Sep 22 18:18:28 2013 +0200 Merge branch 'master' into sru_2_0 Conflicts: src/rpn2solr.c commit 9eb7249e5017426eef8177f99847696e7bc95a33 Author: Adam Dickmeiss Date: Sun Sep 22 18:12:11 2013 +0200 rpn2solr: rewrite rel operator handling YAZ-685 commit ac0e4f37db910a939851b6ad6dab5876df6ceeaf Merge: ec9cc99b def92a74 Author: Adam Dickmeiss Date: Fri Sep 20 13:55:39 2013 +0200 Merge branch 'master' into sru_2_0 commit def92a743ce6b4aaf3357bee1f07a847841b3fbe Author: Adam Dickmeiss Date: Fri Sep 20 13:54:56 2013 +0200 Add comparison routines for some Z-types commit ec9cc99b6542d68912f2855e1978d191d9bbe23a Merge: 833bf583 5efdf15f Author: Adam Dickmeiss Date: Fri Sep 20 11:07:15 2013 +0200 Merge branch 'master' into sru_2_0 commit 5efdf15f0506e9d67c0d739bd7829cfecac409ba Author: Adam Dickmeiss Date: Fri Sep 20 11:07:00 2013 +0200 Make yaz_clone_z_OtherInformation commit 833bf58328945361db8a744c0dec2c925c97d43a Author: Adam Dickmeiss Date: Fri Sep 20 10:48:57 2013 +0200 odr: move 5 members of struct odr to private commit eeff5ede530161a722200afb3d0042e66c954169 Merge: c6f7e215 80559dbf Author: Adam Dickmeiss Date: Fri Sep 20 09:20:28 2013 +0200 Merge branch 'sru_2_0' of ssh://git.indexdata.com/home/git/pub/yaz into sru_2_0 commit c6f7e21560c74ac3cd856c5d0bf9120fc2dfce9f Merge: b0c3ff46 fd89a3c5 Author: Adam Dickmeiss Date: Fri Sep 20 09:20:23 2013 +0200 Merge branch 'master' into sru_2_0 Conflicts: IDMETA debian/changelog debian/rules commit fd89a3c57dcb6869c3943109d5b43a4f7abd628c Author: Adam Dickmeiss Date: Fri Sep 20 09:19:30 2013 +0200 Better description of s=ag commit 80559dbf0a5d6993eef844e6f6198d28ff5a44fa Merge: 7da0c7d1 f991472f Author: Adam Dickmeiss Date: Thu Sep 19 21:02:18 2013 +0200 Merge branch 'master' into sru_2_0 commit f991472f1e2474cb605b4b40f69af1456b870570 Author: Adam Dickmeiss Date: Thu Sep 19 21:00:11 2013 +0200 GFS: look for facets in additionalSearchInfo commit 7da0c7d1755ad3b33bfc48f744bb0b35f4277b1a Author: Adam Dickmeiss Date: Thu Sep 19 21:00:42 2013 +0200 ZOOM/yaz-client: request facets in additionalSearchInfo rather than otherInformation commit 4b72516157f967c0bf70e1ca1e61e89a6c7daa5e Author: Adam Dickmeiss Date: Thu Sep 19 21:00:11 2013 +0200 GFS: look for facets in additionalSearchInfo commit a3fb0c980a8e4d3ef7231abb92f0c399197ed97d Merge: a00add15 2e8e1acb Author: Adam Dickmeiss Date: Thu Sep 19 14:00:20 2013 +0200 Merge branch 'master' into sru_2_0 Conflicts: debian/changelog debian/rules commit 2e8e1acb6ba390e3e746b97385e41c1cc7817e18 Author: Adam Dickmeiss Date: Thu Sep 19 13:20:00 2013 +0200 Version 4.2.67 commit a00add15f1d9f9a33d8f6fe2e5f3cb04171d8aa1 Merge: b0c3ff46 5a45e2c9 Author: Adam Dickmeiss Date: Thu Sep 19 13:11:47 2013 +0200 Merge branch 'master' into sru_2_0 Conflicts: IDMETA commit 5a45e2c9d4e4fb7e3b547df12481b339f50ba8c3 Author: Adam Dickmeiss Date: Thu Sep 19 13:10:26 2013 +0200 Don't decode MAB as MARC Just like we don't attempt to decode HTML/XML as MARC. commit a52fa2ad31d0ed5281f06a7682b355c35719be83 Author: Adam Dickmeiss Date: Wed Sep 18 15:31:55 2013 +0200 Bump to future version 4.2.67 commit b0c3ff462ce33f05398aef45cf83da3967ad2016 Author: Adam Dickmeiss Date: Wed Sep 18 14:53:20 2013 +0200 Include yaz/facet.h rather than yaz/z-facet-1.h commit 916ddaa16e2fe4f4bd649b463be12e7854f98dc8 Merge: a5b0faf7 14507ff5 Author: Adam Dickmeiss Date: Wed Sep 18 14:49:06 2013 +0200 Merge branch 'master' into sru_2_0 commit 14507ff5775af3d6453c1d0f856ca20002eaf045 Author: Adam Dickmeiss Date: Wed Sep 18 14:44:52 2013 +0200 Add yaz_facet_list_to_wrbuf YAZ-683 commit a5b0faf7d5c4311af8969128b9a93cd2d55be21d Merge: 4f3418e1 f6e09298 Author: Adam Dickmeiss Date: Wed Sep 18 11:29:55 2013 +0200 Merge branch 'master' into sru_2_0 commit f6e09298ab71294db809f1f657e90997f81c91ea Author: Adam Dickmeiss Date: Wed Sep 18 11:27:20 2013 +0200 CCL: allow quoted terms for date ranges YAZ-681 commit 4f3418e14ebbb9371444f39636baa36d20e802d1 Merge: a7585fd1 7fe4b7de Author: Adam Dickmeiss Date: Wed Sep 18 09:56:58 2013 +0200 Merge branch 'master' into sru_2_0 commit 7fe4b7de2eb91fc87a5c53ff081b15df0c449a0a Author: Adam Dickmeiss Date: Tue Sep 17 16:17:32 2013 +0200 Introduce ccl_parser_qual_search This function makes old function ccl_qual_search, from YAZ 2, available again. commit a7585fd1220c684189091e7fba2c5d6cf436031e Author: Adam Dickmeiss Date: Thu Sep 12 15:26:56 2013 +0200 Default facet start is 1 commit 4b0c7486973ba19ced60372e9ac34d653d76f6bf Author: Adam Dickmeiss Date: Thu Sep 12 15:26:45 2013 +0200 Make yaz_oi_set_facetlist public commit 2edd9764942ec2d62cabcb4190a69921c60af293 Author: Adam Dickmeiss Date: Thu Sep 12 14:22:28 2013 +0200 facetSort, facetStart honored. For both Solr and SRU 2.0 commit 9bca108ddbc555efaffb85dda76581eaeed44b4e Merge: 1f5e4f24 6be82a6e Author: Adam Dickmeiss Date: Wed Sep 11 15:29:45 2013 +0200 Merge branch 'master' into sru_2_0 Conflicts: IDMETA debian/changelog commit 6be82a6e9dc3eb84877ddcc2d86d70ce9f539e7c Author: Adam Dickmeiss Date: Wed Sep 11 15:11:23 2013 +0200 Version 4.2.66 commit 3ae80066499b6ec541c8f474654668f65f0f1c3c Merge: 30257fdf af3536cd Author: Dennis Schafroth Date: Wed Sep 11 14:17:41 2013 +0200 Merge branch 'yaz-621-optimized' commit af3536cd462cf09e507f2656dc3f1101bc78ea75 Author: Dennis Schafroth Date: Wed Sep 11 14:15:52 2013 +0200 Add tests to non-configuration commit 883245e48ad6e5735ab73884e18dc6cb5c297c86 Author: Dennis Schafroth Date: Wed Sep 11 14:14:49 2013 +0200 Fix return correct relation when not using configuration file commit 1f5e4f24c6e51d741e15317348bc7aef05fcc7ab Merge: 612ac7d3 30257fdf Author: Adam Dickmeiss Date: Wed Sep 11 13:15:43 2013 +0200 Merge branch 'master' into sru_2_0 Conflicts: src/rpn2solr.c commit 30257fdfae108b95848ef0ccbc4cac09466a60d8 Author: Adam Dickmeiss Date: Wed Sep 11 13:13:14 2013 +0200 Avoid mixed stmt/var declare commit 3177bd5bc45eb8d42f0c6ffd3dbe97c1c0f4054f Author: Dennis Schafroth Date: Wed Sep 11 11:14:50 2013 +0200 Using bib1 attribute values for relations commit 612ac7d30003582e44d4184c830eee7f1a1a0443 Author: Adam Dickmeiss Date: Wed Sep 11 11:13:04 2013 +0200 Further use of odr_create_Odr_oct commit 744a00b201a04b308f22fad1ece422b97d2cdd50 Author: Dennis Schafroth Date: Wed Sep 11 10:50:24 2013 +0200 Fix check on same index. Convert reversed into ranges as well commit 9c55fc71ac93d13a923c36c2a67c4f3d7ef5df38 Author: Dennis Schafroth Date: Wed Sep 11 10:48:15 2013 +0200 Fix two tests. Add new commit 28c5fe25e891098bcf5f18dfd0e3abe729dc340f Author: Adam Dickmeiss Date: Wed Sep 11 10:12:03 2013 +0200 Goodbye to Odr_oct.size commit 38dfcb07c905b2ba53e84678c3ce53c40e27b0b7 Author: Adam Dickmeiss Date: Wed Sep 11 10:05:58 2013 +0200 Remove 3 yaz_log from old ber_oct code commit 01c6a008c766d8666675a53dade6846a1ff65825 Author: Adam Dickmeiss Date: Wed Sep 11 09:30:17 2013 +0200 Version 5 commit c82db01c9fc0b51254ec6ead5fe3b503ca098ca0 Author: Adam Dickmeiss Date: Wed Sep 11 09:21:34 2013 +0200 Rename odr_write2 to odr_write commit 53c5b918a968e5baf6de36ce0fd586a1031ff1a5 Author: Dennis Schafroth Date: Tue Sep 10 23:34:42 2013 +0200 Rewrite to handle combining ranges. commit a883952f69d832ede3f390584703b2f330d6d3cd Author: Dennis Schafroth Date: Tue Sep 10 23:32:12 2013 +0200 Add test to check that different indexes does not get merged commit dd749e1547ed756dddc3ab4b22aec241e3e9eefa Author: Dennis Schafroth Date: Tue Sep 10 19:01:56 2013 +0200 Add new tests to test relation combined if range. commit 69b1d8e7b437179163fe97b7cbead51a56835f2a Author: Adam Dickmeiss Date: Tue Sep 10 16:20:01 2013 +0200 No unsigned char's in public API (except for iconv) commit cabcc223cd47503763e7c42969e3be30c58276af Author: Adam Dickmeiss Date: Tue Sep 10 15:09:47 2013 +0200 Get rid of size member of Odr_oct It has not served a purpose for years. commit f720562471a064dba92a465d999aa833e59d69b1 Author: Adam Dickmeiss Date: Tue Sep 10 11:34:31 2013 +0200 Re-use match functions a little more commit ece0a9c7035aa215eef48d73cb936ba503519d73 Author: Adam Dickmeiss Date: Tue Sep 10 11:34:21 2013 +0200 Update test_soap to new query struct commit bb1e5bdccc0b9b6658db924399bcbc2bf1bef057 Author: Adam Dickmeiss Date: Tue Sep 10 11:33:33 2013 +0200 Update test_solr, due to regression when query is omitted commit 5d024b6f31f7b2b841b0b295c4868078175ef06d Author: Adam Dickmeiss Date: Tue Sep 10 10:48:28 2013 +0200 Remove redundant header includes commit e3849ee0440d46eafbac045c6aba40785aa647b6 Author: Adam Dickmeiss Date: Tue Sep 10 10:44:10 2013 +0200 Move xml_add utilities to xml_add.c source commit 23d3217defe73218069ac17be28742b39637a144 Author: Adam Dickmeiss Date: Tue Sep 10 10:39:40 2013 +0200 Refactor yaz_match-routines to separate source commit c5ebd327a29b3ec88eedbea53f9a0f6cda164de7 Author: Adam Dickmeiss Date: Tue Sep 10 10:35:06 2013 +0200 Prefix match_xsd functions with yaz_-prefix commit 8ac490e8fafdf29688186370057017d83bc5b32c Author: Adam Dickmeiss Date: Mon Sep 9 20:56:04 2013 +0200 Decode SRU facet response commit 2205f6913f10af883c4756bd9979c62782bdc576 Author: Adam Dickmeiss Date: Mon Sep 9 20:54:24 2013 +0200 Remove log msg commit d2ed898832ae354c17254ff52c70c92278518efe Author: Adam Dickmeiss Date: Mon Sep 9 15:18:37 2013 +0200 Towards working facets commit b51665819b5685aeeac61d30aee5e66f1af7a4cc Author: Adam Dickmeiss Date: Mon Sep 9 10:58:19 2013 +0200 Make yaz_negotiate_sru_version internal commit 3c69a3a1f368966e501cd4662733476c3bf0474d Author: Adam Dickmeiss Date: Fri Sep 6 15:25:43 2013 +0200 Always supply operation and version for SRU 2.0 While not required by the standard it does improve compatibility. commit 47ceb84b5ac99c72bcaef53be93494541e9a68c0 Author: Adam Dickmeiss Date: Fri Sep 6 12:13:32 2013 +0200 Deal with resultCountPrecision - SRU 2.0 commit 503a37782cf225167804b55d2bd665a04141d9e4 Author: Adam Dickmeiss Date: Wed Sep 4 10:28:19 2013 +0200 Deal with resultSetTTL / resultSetIdleTime commit 0e6a432e1be3ac44fba55abd19a62fc294b2fcf7 Author: Adam Dickmeiss Date: Wed Sep 4 10:13:45 2013 +0200 version 2 check commit 2caef65db3a7a290fd2fff36910bc19e70a880a3 Author: Adam Dickmeiss Date: Wed Sep 4 10:13:36 2013 +0200 Proper scan SRU encoding commit d48a2b1b196d0964a538ba6684886f86036dce14 Author: Adam Dickmeiss Date: Wed Sep 4 09:47:09 2013 +0200 Encode record properly (recordXMLEscaping, recordPacking) commit b1d7576903bc85c943182ef1bf5e35149c0673f6 Author: Adam Dickmeiss Date: Wed Sep 4 09:46:56 2013 +0200 Add comment about yaz_srw_decode hack commit 800bea26443b57c0dee73f21f060e3f87113cbf1 Author: Adam Dickmeiss Date: Wed Sep 4 09:33:02 2013 +0200 Fix typo for xcql encoding commit f48b453627a7d8f2110fda172592fcefa8ed5005 Author: Adam Dickmeiss Date: Wed Sep 4 09:32:08 2013 +0200 Deal with recordPacking, recordXMLEscaping Dealing with those is complicated due to our desire for interoperability with both SRU 1.X and SRU 2.0. commit 799ea46466fc7433ce75d7c66d796b5a0997f59c Author: Adam Dickmeiss Date: Tue Sep 3 15:29:37 2013 +0200 Namespaces more or less in correct place commit 6aaef9a1c3ab51ac3a1791a4cc8cfef5cf65f286 Author: Dennis Schafroth Date: Tue Sep 3 09:02:53 2013 +0200 Ignore trs files commit 1331fd610a8bfc1e5a849d2c4d598c11557a8372 Author: Adam Dickmeiss Date: Mon Sep 2 15:49:04 2013 +0200 Refactor for string based queruType (SRU 2.0) commit 06e75ce285e9915a3a33095140bc390990e625f5 Author: Adam Dickmeiss Date: Wed Aug 28 10:44:52 2013 +0200 Update NEWS commit ba45bd82e84e9a83e0e3a09d879bbee62cd22e38 Author: Adam Dickmeiss Date: Wed Aug 28 09:49:59 2013 +0200 ZOOM: mark record cache with schema as requested rather than the one returned in record structure. The problem is that schema returned by SRU/Solr server may not be present.. So best assumption is to assume schema as requested. This should fix YAZ-675 . commit 030a9158c5c4991dba7b50de6b2f13f64177f99b Author: Dennis Schafroth Date: Fri Aug 23 13:34:16 2013 +0200 Remove printf commit 8f586809501cbb64a48e581ebb243d3ead17863d Author: Dennis Schafroth Date: Fri Aug 23 12:49:26 2013 +0200 Add tests for newly added >= and <= support commit 249f8a3fb06e57a672b21af5b00f66bdfde8633a Author: Dennis Schafroth Date: Fri Aug 23 12:47:13 2013 +0200 Re-arrange. Add "range" test (covered by other tests) commit fd9dee8f998fa0bc00ef967cfbdc732a9655e621 Author: Dennis Schafroth Date: Fri Aug 23 12:45:40 2013 +0200 Reuse cql.serverChoice is this is what we will get back from pqf properties when looking up 1=1016. Support for greater-than-equal and less-than-equal with solr ranges. A range will for now become two ranges and'ed commit 2b7da96b2737e522e40997ec77e928fd691a6045 Author: Adam Dickmeiss Date: Thu Aug 22 10:36:21 2013 +0200 Version 4.2.65 commit d82c199341382ab78de758b2afc0040f1514d271 Author: Adam Dickmeiss Date: Thu Aug 22 10:28:58 2013 +0200 Fix record caching problem YAZ-673 Problem introduced in YAZ 4.2.64. commit 5e0af5e35d8eab6402078124ef0dcbb149eb23ab Author: Adam Dickmeiss Date: Wed Aug 21 14:38:14 2013 +0200 Version 4.2.64 commit 9d9a3021a47317e36d0154084297b15434e887c6 Author: Adam Dickmeiss Date: Mon Aug 19 16:26:43 2013 +0200 Solr: fheck for ending "/" and "/select" as part of URI commit 047d6669724619dd486a9bfa62cde1b909951491 Author: Adam Dickmeiss Date: Mon Aug 19 16:10:47 2013 +0200 ZOOM: save record schema per request; fix caching This also fixes YAZ-671 commit 6db306098a49682128a8e7bde44020fdf28fab62 Author: Adam Dickmeiss Date: Mon Aug 19 11:13:36 2013 +0200 Don't MARC decode XML/HTML commit 1533023386c841cac9832a246e871795a2b217fc Author: Adam Dickmeiss Date: Mon Aug 19 10:54:03 2013 +0200 Attempt ISO2709 decoding of any octet aligned record Until this point only certain OIDs would trigger ISO2709 decoding. With this change all octet aligned records will be run though the MARC parser. If it's not MARC, an error will only occur if it is a known MARC OID. If not, all bets are off. It's probably not MARC if it doesn't parse. commit a07518d9bac49a25701a449cbc3935a66d4dc1cf Author: Adam Dickmeiss Date: Wed Jul 17 14:18:54 2013 +0200 Version 4.2.63 commit e7c4df57d3838ac1c0c15569daec2d118f4abb2c Author: Adam Dickmeiss Date: Tue Jul 16 14:00:10 2013 +0200 Add yaz_strcmp_null commit fc2ea703578e62e5ceac26a204402284465bc8cc Author: Adam Dickmeiss Date: Fri Jul 12 10:54:11 2013 +0200 Remove yaz_log request commit 8a6d9d5f9141f8437e22f4943beb464682d6e1b2 Author: Adam Dickmeiss Date: Thu Jul 11 10:04:42 2013 +0200 Version 4.2.62 commit 5dd014a83983f17743321598e0d3e55687b11381 Author: Adam Dickmeiss Date: Thu Jul 11 09:45:59 2013 +0200 Update NEWS commit b179e592e9bb5e77ded808373dafa1c279c29bf1 Author: Adam Dickmeiss Date: Tue Jul 9 15:03:19 2013 +0200 New utility z_get_HTTP_Response_details commit beab89a43b1060eff01824c32298128ef83a816e Author: Adam Dickmeiss Date: Tue Jul 9 15:02:07 2013 +0200 New utility yaz_url_get_error YAZ-669 commit af655caa3853ce12d97bf5351573099ed291fe52 Author: Adam Dickmeiss Date: Tue Jul 9 14:12:25 2013 +0200 Update NEWS commit 5ef30a0bda9a010b88266f90a253a2c46e6d47db Author: Adam Dickmeiss Date: Mon Jul 8 14:09:24 2013 +0200 New functions yaz_file_glob2, yaz_xml_include_glob These functions takes a flags parameter, which, for now only controls whether to fail inclusion of a non-existing file (without glob pattern) - flags YAZ_FILE_GLOB_FAIL_NOTEXIST. commit b9e9e8e2196e0081d4814c50cdd02c18911bcf29 Author: Adam Dickmeiss Date: Mon Jul 8 13:26:40 2013 +0200 xml_include fails if file is not found YAZ-668 Unless glob pattern is used. commit 32714ab839d402d1e6194316d5909b2ce37e3ee3 Merge: 94140e7e cdd67ab5 Author: Adam Dickmeiss Date: Tue Jul 2 10:35:27 2013 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 94140e7ec2de8ecd8c6f3715121b0502f469c003 Author: Adam Dickmeiss Date: Tue Jul 2 10:34:18 2013 +0200 Allow max HTTP redirects to be controlled YAZ-667 commit cdd67ab5b29250ce4c16dcaaecb62654346502c1 Author: Dennis Schafroth Date: Mon Jul 1 13:34:24 2013 +0200 Fix change in source repo commit 1552cfea944bbeea64899c0ab17bfc47882f451b Author: Adam Dickmeiss Date: Thu Jun 20 10:39:23 2013 +0200 Versio 4.2.61 commit f5c51ccf0ee232aaef2433e04abcfa47017f0e3b Author: Adam Dickmeiss Date: Thu Jun 20 10:21:01 2013 +0200 Fix leak in icu_iter_get_org_info YAZ-666 commit 2aad12aff6d9f75e56109b2855434fb8d6ec57ac Author: Adam Dickmeiss Date: Mon Jun 17 15:57:08 2013 +0200 MARC XML parse: insert fake leader if missing YAZ-664 commit cf3cacbdf855eaeaeb08f86cb7164c80386d49b0 Author: Adam Dickmeiss Date: Fri Jun 14 13:42:15 2013 +0200 Version 4.2.60 commit be73a431cd4e151c77d3024b7ee09197e4a4910a Author: Adam Dickmeiss Date: Fri Jun 14 13:35:19 2013 +0200 Fix un-init var in icu_iter_get_org_info YAZ-665 commit 33d53690f3b4205ff81b2d2b797dc43ac898fc0c Author: Adam Dickmeiss Date: Wed Jun 12 15:42:18 2013 +0200 No longer build for Ubuntu natty commit 5176062be1e2c2e8fd7f7a506acd990e711d9316 Author: Adam Dickmeiss Date: Wed Jun 12 15:15:44 2013 +0200 Avoid statement-not-reached warnings commit 951bf68e90a1f19fc5103c408b136bdb4242e67b Author: Adam Dickmeiss Date: Wed Jun 12 15:15:03 2013 +0200 Fix empty declarations Issues a warning with some compilers. commit 376aab71c32cc9c53ea9e706aac87ea3439f7222 Author: Adam Dickmeiss Date: Tue Jun 11 13:06:05 2013 +0200 Version 4.2.59 commit eeec1fcf0dad0e7d431c2494c8e65560563f3aae Author: Adam Dickmeiss Date: Tue Jun 11 13:04:30 2013 +0200 Implement z_HTTP_header_remove commit 64bfa635516bb5fd5e25b56a3ebb27ed16cdd604 Author: Adam Dickmeiss Date: Tue Jun 11 10:58:23 2013 +0200 Version 4.2.58 commit 5541b773e8ee0e5c086946016c060f6f629bd410 Author: Adam Dickmeiss Date: Tue Jun 11 10:56:19 2013 +0200 Mention that @mask requires YAZ 4.2.58 commit e8117f5e26e3eed1f7b48e1dcb2ce8c12a31fd52 Merge: 730279e1 e68a1570 Author: Adam Dickmeiss Date: Mon Jun 10 15:36:32 2013 +0200 Merge branch 'master' into yaz_663 commit 730279e1d22e626f03e2d6817fbb78963d210a7a Author: Adam Dickmeiss Date: Mon Jun 3 15:54:23 2013 +0200 Disallow 0 ptrs for some ICU string utilities commit d05e5d54fcac20824e0efa3d939e5fbb1505964a Author: Adam Dickmeiss Date: Mon Jun 3 15:33:56 2013 +0200 icu_iter_get_org_info returns size+info in UTF-8 rather than UTF-16. commit cc68144fc4b78e39a341832e3deb398125ee42bd Author: Adam Dickmeiss Date: Mon Jun 3 15:05:52 2013 +0200 ICU: avoid input member commit 1cab6ccc1402f83e02427a6c00d593c4d6ff1c6e Merge: 7e4656f4 1d1aeb8c Author: Adam Dickmeiss Date: Fri May 31 23:21:46 2013 +0200 Merge branch 'master' into yaz_663 commit 7e4656f4fb50445df3713d6bea33a6fc4c5ab3d8 Author: Adam Dickmeiss Date: Fri May 31 23:19:20 2013 +0200 Fix tests for modified internal ICU API commit 94b1547e5951e1e01bf5180159e74095cd0527f4 Author: Adam Dickmeiss Date: Fri May 31 23:05:12 2013 +0200 First go at returning start+offset The offset+size however are based on UChar however. commit e68a157030efef7b7893e2d53d53b98cd310d328 Merge: c3d7d4a6 1d1aeb8c Author: Adam Dickmeiss Date: Fri May 31 16:17:10 2013 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1d1aeb8cdd81a95305432e8fd31089787b451f3c Merge: cec9f9be 05e94adc Author: Heikki Levanto Date: Fri May 31 15:36:35 2013 +0200 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit cec9f9be3944b0d7891bf358a0679f0d32305621 Author: Heikki Levanto Date: Fri May 31 15:36:16 2013 +0200 Add a flag --test-stop to test programs commit c3d7d4a659e0c4c60507a29f475d99cbee878747 Author: Adam Dickmeiss Date: Wed May 29 12:47:43 2013 +0200 CCL: avoid z39.58/regex truncation when not needed Apply only the conversion of those masks, when absolutely necessary. commit 05e94adc1a717e85ba5b775468c3c9e2c8a26034 Author: Adam Dickmeiss Date: Wed May 29 10:43:24 2013 +0200 CCL: tests for configurable mask/truncation commit c13416878ec0afc9d91bdd20deb20c82425e67b6 Author: Adam Dickmeiss Date: Wed May 29 10:42:53 2013 +0200 CCL: configurable masking character YAZ-661 commit a79aad9d43494377709086e73ff7b66930bbdb38 Author: Adam Dickmeiss Date: Thu May 16 12:37:13 2013 +0200 Add YAZ_EXPORT to functions in matchstr.h commit cf0d647d4a642af04013d09f412e8629897187c5 Author: Adam Dickmeiss Date: Thu May 16 12:36:51 2013 +0200 document parameter (Doxygen warning) commit afb059d3e508ad4fd38f4a9fd643a4bedf3e0b3f Author: Adam Dickmeiss Date: Thu May 16 12:34:04 2013 +0200 Define local strcasecmp funcs and use them when appropriate. commit 991a3cbe7c36c152a5657caaa87ef8d8a5c49ade Author: Adam Dickmeiss Date: Thu May 16 10:53:28 2013 +0200 HTTP encode. Remove Transfer-Encoding header YAZ uses content_len and full response anyway, so a Transfer-Encoding header will obstruct the response. commit 38527b3ceab46772e46551ed0d311c1e3bf082e3 Author: Adam Dickmeiss Date: Wed May 15 14:31:59 2013 +0200 Version 4.2.57 commit d7971954990c423d60a52030f5dfa78d32003486 Author: Adam Dickmeiss Date: Wed May 15 14:11:21 2013 +0200 COMSTACK: @ uses AF_UNSPEC But we prefer AF_INET6 over others when picking a socket. Problem is that some systems has IPV6 support, but we can't create sockets for them, so we pick AF_UNSPEC first. commit 8f7c9a27753894afb11d443b1c58419d81251bd1 Author: Adam Dickmeiss Date: Wed May 8 16:27:21 2013 +0200 Add check for content_length stuff commit 4d32d8e976a69219ccbe14572d18e2e6fb75ed27 Author: Adam Dickmeiss Date: Wed May 8 11:29:58 2013 +0200 HTTP encode. Proper Content-Length YAZ-660 For yaz_encode_http_response use content_len to determine resulting Content-Length in HTTP response and NOT Content-Length supplied in headers by user. commit 5f5ce1a79c4061098904a01ff9c9e723e9d6e7b9 Author: Adam Dickmeiss Date: Mon May 6 12:26:25 2013 +0200 z_HTTP_header_add_basic_auth uses z_HTTP_header_set rather than z_HTTP_header_add, to avoid having two Authorization headers by mistake. commit 6a149fd3f0dc901448205e1511e434054a51bfa6 Author: Adam Dickmeiss Date: Thu May 2 13:55:14 2013 +0200 yaz_url_exec: mangle headers HOST/User-Agent Host as returned by z_get_HTTP_Request_uri takes precedence over user_headers. User-Agent from user_headers takes precedence over User-Agent YAZ. commit bd0fee845a611e98d52590ade70c5ef414289e24 Author: Adam Dickmeiss Date: Thu May 2 13:53:51 2013 +0200 Make z_HTTP_header_set public and extend z_HTTP_errmsg Utility z_HTTP_errmsg should now map all HTTP 1.1 diagnostic codes. commit 2658161722cc73f144d0f3d5695b13d00ffef1e7 Author: Adam Dickmeiss Date: Wed May 1 14:21:04 2013 +0200 Tweak trace messages (TRCs) of tcpip.c commit 8ac95eb45804822f698ab98bc6d42c8305eb12f8 Author: Adam Dickmeiss Date: Wed May 1 14:18:57 2013 +0200 Print only first 8K of HTTP pkgs and cut off at any zero's - assuming binary content. Also use odr_write2 in a number of places. commit 240de66672a5b12b1a0deebc18508719dc780828 Author: Adam Dickmeiss Date: Wed May 1 14:09:39 2013 +0200 Add odr_write2 (improved odr_write) Like odr_write but takes const char*, instead of unsigned char* . commit a17e9df75e5d75ccdc3f19101fb7b5d0c5a75e46 Author: Adam Dickmeiss Date: Wed May 1 14:05:32 2013 +0200 yaz_url_exec: only one User-Agent User-Agent in headers removes the default User-Agent: YAZ . commit 6e0314cce5d9c3d346d4d968a7ea07f92d8761b1 Author: Adam Dickmeiss Date: Wed May 1 13:50:31 2013 +0200 Fix problem with HTTP decoding For HTTP 1XX, 204, 304 assume no content-length. commit 2c293bcf3f3d36ca121b1e23769919c941e8ea19 Author: Adam Dickmeiss Date: Tue Apr 30 13:37:35 2013 +0200 Fix yaz_base64decode to use proper signed var YAZ-656 Problem occurred on platforms with big endian and unsigned char (by default). commit a7f066f298c283530e1e542c87858b28d594238b Author: Adam Dickmeiss Date: Tue Apr 30 11:25:15 2013 +0200 New test: test_zgdu Mostly to demonstrate how to decode HTTP response from a memory buffer. commit 1770f18530a45da520e9b47fedee3203d01e04af Author: Adam Dickmeiss Date: Fri Apr 26 18:05:46 2013 +0200 Version 4.2.56 commit df7a36a7eadf9d8b797a1199fe5229d94e58fe1f Author: Adam Dickmeiss Date: Fri Apr 26 18:02:47 2013 +0200 yaz-client: fix crash on connect Problem introduced by 7e90f2cc9a54 . commit f55e2f626aa07350ba6411dbff6d689180067854 Author: Adam Dickmeiss Date: Fri Apr 26 10:21:00 2013 +0200 Versio 4.2.55 commit 521bbc94ce94a8636e5dc88dd00a400eb127bfc3 Author: Adam Dickmeiss Date: Fri Apr 26 09:49:18 2013 +0200 Update NEWS commit 7e90f2cc9a54a66e4bdf35056cf69241a93c9e16 Author: Adam Dickmeiss Date: Tue Apr 23 15:00:01 2013 +0200 yaz-client uses cs_create_host_proxy commit a922f2f81cc0a360e271eb155df9b4f8cb8cd4e9 Author: Adam Dickmeiss Date: Tue Apr 23 14:54:21 2013 +0200 Fix vhost problem YAZ-654 Problem was that COMSTACK type was determined by vhost when proxy was given. Proxy overrides host, except for the determination of protocol (oid_proto). commit bcc0d13ab9dbdb6ebebc7c9d305e4eba84d09c66 Author: Adam Dickmeiss Date: Mon Apr 22 14:54:26 2013 +0200 Debug package libyaz4-dbg. YAZ-653 commit 4b0e4f2ebac2519c2e8a2034cb200dcd5bf0e532 Author: Adam Dickmeiss Date: Thu Apr 18 14:51:17 2013 +0200 Fix problem with cs_close hang/wait in SSL mode YAZ-652 Invoke gnutls_bye differently in tcpip_close commit ea68fe85f0ba1b6d7c52766104910ee4220a64cd Author: Adam Dickmeiss Date: Wed Apr 17 10:11:37 2013 +0200 Version 4.2.54 commit 4cbb72c3fcf92768bf258d0e02882dac51c54084 Author: Adam Dickmeiss Date: Wed Apr 17 10:11:31 2013 +0200 Fix YAZ4J Description commit cc94e0b0a1ff9b42754b57049434df7db6fb0e7c Author: Adam Dickmeiss Date: Wed Apr 17 09:10:18 2013 +0200 Update NEWS commit 8366b82fc43b5e2e04396f95c7032b68b2295826 Author: Adam Dickmeiss Date: Tue Apr 16 16:28:09 2013 +0200 cql2pqf: option -S for strict mode commit 5ae2f74ba9b27bb7e926d5908471ac79371f7823 Author: Adam Dickmeiss Date: Tue Apr 16 16:21:03 2013 +0200 cql_parser_strict cql_parser_strict with mode=1 puts CQL parser in a mode where CQL parser is conforming to standard. commit 2983ed28daf8cf109826224167bab2b344ea1477 Merge: 66603ce3 810fd922 Author: Adam Dickmeiss Date: Tue Apr 16 13:18:30 2013 +0200 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit 66603ce32e815e5b7970db4cceec5d03ebc26f9c Author: Adam Dickmeiss Date: Tue Apr 16 13:17:43 2013 +0200 Bumdle yaz4j.{jar,dll} with YAZ commit 810fd9221e5d34c4f3c4f8e2b4410f947cbc2504 Author: Adam Dickmeiss Date: Fri Apr 12 20:36:17 2013 +0200 yaz-ztest: return OPACXML for syntax=XML, esn=OP Purely for having a test server returns OPACXML. commit cd7c85097df2b7ccd4728e5911348b6e78ccf7f2 Author: Adam Dickmeiss Date: Fri Apr 12 14:17:43 2013 +0200 Revert "CQL: accept relations "within", "encloses"" This reverts commit e4e5f0bfaa1fcb5eb12cc37df216352df226b01e. commit 9ddbdf848f115043940d3e2edc72d434ebd53a0d Author: Adam Dickmeiss Date: Fri Apr 12 14:16:37 2013 +0200 Revert "Remove HDCQL functionality" This reverts commit 9084e20f4c5ffad9cfea2087396206b75a3a6654. commit 9732f4e8ccecd91b43de8eea00b62830b65cc0c5 Author: Adam Dickmeiss Date: Wed Apr 10 14:10:09 2013 +0200 Version 4.2.53 commit abdeca647e108e6d19110c367925ba1014fb86d6 Author: Adam Dickmeiss Date: Wed Apr 10 14:04:23 2013 +0200 MARC8c allows encoding of control characters (except ESC) MARC8 work as before. commit b9e057ce1b31f4cef4364de7c36b5c119cc94cc3 Author: Adam Dickmeiss Date: Wed Apr 10 13:50:10 2013 +0200 MARC 8 encoding: never pass through ESC as it is also uesd as escape for MARC-8 itself. commit f96a9bc9697b4b6b63ce52055ba0cfbe6cf6652a Author: Adam Dickmeiss Date: Wed Apr 10 12:15:31 2013 +0200 MARC8: keep existing behavior for control characters But create a new name, MARC8c, that passes all control characters through. commit 1346b30779b120691e4145a3578716f77300951e Author: Adam Dickmeiss Date: Wed Apr 10 11:07:58 2013 +0200 MARC-8: allow all characters 0x01-0x20 YAZ-650 commit e4d42c8bf05ddaef1e8a60f1179c8b6bc19aaa9d Author: Adam Dickmeiss Date: Wed Apr 10 10:49:11 2013 +0200 Fix dup'ed identifers for MARC-8 encoding YAZ-650 The problem was that cdata_one_character did not fully flush the output and so that would be carried over to the "real" output. commit 2e375c5e7b4bf62adb93cb5a9b66ce5d43a1e8b7 Author: Adam Dickmeiss Date: Wed Apr 3 13:30:02 2013 +0200 Version 4.2.52 commit 87ff4e1db83ca09c8996ba09cb0a66055b5f9409 Merge: 6c0bd6a6 d800a5c4 Author: Adam Dickmeiss Date: Wed Apr 3 13:21:58 2013 +0200 Merge branch 'normal_cql' commit 6c0bd6a620f90abcd498ceb5a5bb40ba15f19ad5 Author: Adam Dickmeiss Date: Wed Apr 3 12:49:42 2013 +0200 yaz-ztest: Use hash rather for fake hit count Before, random number was used. This is problematic for unit tests using yaz-ztest. This patch also makes a hash for CQL queries. For RPN, any term with a leading digit will be treated as pseudu hit count (to force any particular hit count by a client). commit 696ae4097b31e49a1b221d4ffa612892de5047e9 Author: Adam Dickmeiss Date: Wed Apr 3 12:48:35 2013 +0200 yaz-ztest: return unique MARC dummy records Beyond record offset 24, the author surname is patched with offset to make all records unique. commit bcf00627ba371f9e978ea5cee332d89bb5f68d76 Author: Adam Dickmeiss Date: Wed Apr 3 11:24:44 2013 +0200 Marcdump -c tries to make more readable strings For chr values 32 - 126 the charcter is produced verbatim. commit d583c111c78cfe84d51e1886a6d00aef985db97e Author: Adam Dickmeiss Date: Tue Apr 2 15:59:26 2013 +0200 Update doc WRT @4, @6, @ notations commit fa2f320241607861de8bc60e1b0b634e241ded77 Author: Adam Dickmeiss Date: Tue Apr 2 14:27:56 2013 +0200 COMSTACK: fix resolving of non-passive addresses Bug introduced in previous commit. commit 2ad51254bcafb41daf04f708f9d37ef37d16fb49 Author: Adam Dickmeiss Date: Tue Apr 2 14:13:48 2013 +0200 COMSTACK: make @ bind to IPV6+IPV4 consistenly YAZ-623 @4 binds to IPV4. @6 binds to IPV6. commit f705a5218c639706a71ae86a6231063c2fdd64b5 Author: Adam Dickmeiss Date: Wed Mar 27 13:43:25 2013 +0100 Ignore local0.ent commit 902eb6aa5d8af21c0cd5d378ef8586996ec8c807 Author: Adam Dickmeiss Date: Wed Mar 27 13:22:24 2013 +0100 Documentation rebuilt if local.ent changes commit 612588b7ff622528fa70ba982ae6ffd82ab30aa2 Author: Adam Dickmeiss Date: Wed Mar 27 13:15:42 2013 +0100 No prefix in local.ent commit d800a5c41213b7741e6d3dda93349e17e688d010 Merge: 1d174be5 9fc96078 Author: Adam Dickmeiss Date: Wed Mar 13 15:44:50 2013 +0100 Merge branch 'master' into normal_cql commit 9fc96078f8d79ad107515c3e450900cce1bf8605 Author: Adam Dickmeiss Date: Wed Mar 13 15:43:29 2013 +0100 Update CQL API documentation a bit commit 1d174be5d92bd388583905b152b0183665460bf6 Merge: 9084e20f 6a1e51ab Author: Adam Dickmeiss Date: Wed Mar 13 15:13:46 2013 +0100 Merge branch 'master' into normal_cql commit 6a1e51ab0313c7008e257e6c3644146d60f571ec Author: Adam Dickmeiss Date: Tue Mar 12 13:37:13 2013 +0000 Simplify make install commit 9084e20f4c5ffad9cfea2087396206b75a3a6654 Author: Adam Dickmeiss Date: Tue Mar 5 15:04:13 2013 +0100 Remove HDCQL functionality commit fcea26f3542a6097ad258cdbb6e57565366d5f35 Author: Adam Dickmeiss Date: Tue Mar 5 10:16:36 2013 +0100 Update header about CQL grammar commit e4e5f0bfaa1fcb5eb12cc37df216352df226b01e Author: Adam Dickmeiss Date: Tue Mar 5 10:12:40 2013 +0100 CQL: accept relations "within", "encloses" commit a0b4e78f94da1ed3915b513593fdd684044bb32b Author: Adam Dickmeiss Date: Tue Mar 5 10:06:55 2013 +0100 Delete trailing whitespace from .y files commit 18c13c600539404ef7b6912ded8d3294c178380c Author: Adam Dickmeiss Date: Wed Feb 20 14:47:18 2013 +0100 Honor CQL unmasked modifier + tests Add regexp/masked/unmasked to pqf.properties. commit 6a8bbb0642cc2256976e0f2e0203c4b61bd7f3ad Author: Adam Dickmeiss Date: Wed Feb 13 14:22:22 2013 +0100 Delete old openbsd ports link. SunOS -> Solaris commit 1871ec21035e62b527bbb609a40f019794e43387 Author: Adam Dickmeiss Date: Wed Feb 13 13:42:35 2013 +0100 Document ZOOM_query_{cql,ccl}2rpn commit a85318e88468026d7704f527fbe45010c5e24e91 Author: Adam Dickmeiss Date: Wed Feb 13 13:18:18 2013 +0100 Rename handle_facet_list to ZOOM_handle_facet_list commit 191c5db0e914f9774413da50bb1963ecf22b2f5c Author: Adam Dickmeiss Date: Wed Feb 13 13:14:08 2013 +0100 Trying to use Solr name consistently commit def193190d4979179d1d216c77f9d61d8865e234 Author: Adam Dickmeiss Date: Wed Feb 13 11:56:39 2013 +0100 Document ZOOM_resultset_sort commit 7376ec7d3d905accea9593f80da3c11b650e743b Author: Adam Dickmeiss Date: Wed Feb 13 11:37:44 2013 +0100 Document ZOOM_query_sortby2 commit 4d33de773178255ccbe2d36581906a8c681f399d Author: Adam Dickmeiss Date: Wed Feb 13 11:05:16 2013 +0100 reindent of yaz-client-man.xml commit d5ea9ffb52a014f258ac9e41ca34a6d9ba4b45c8 Author: Adam Dickmeiss Date: Tue Feb 12 12:36:20 2013 +0100 Version 4.2.51 commit a159f2ad6e29c63ef7eecf9127cd1d0407cc2630 Author: Adam Dickmeiss Date: Tue Feb 12 12:35:10 2013 +0100 Update NEWS commit 8fe13e342d037b0a7a265dfbf19c8d71e7eb9d49 Author: Adam Dickmeiss Date: Tue Feb 12 10:55:26 2013 +0100 Extra brace around it stmt to avoid warning commit db4394606d431a5070f67299895459d7ed179a4c Author: Adam Dickmeiss Date: Tue Feb 12 10:41:24 2013 +0100 yaz-ztest: echo extra request data to response data This is merely to test/illustrate how extra data works commit 1f1e067ae72eff85b653b72f9450ee6b50dcc272 Author: Adam Dickmeiss Date: Mon Feb 11 15:52:38 2013 +0100 GFS: scan handler gets extra_args from request commit 6ac71490dcd57707b2f5e77abfe3ca4e0944cc68 Author: Adam Dickmeiss Date: Mon Feb 11 15:40:37 2013 +0100 GFS: scan may return extra response data (SRU) commit ce46d8646a527a8364d3aa152822b3680a7321bd Author: Adam Dickmeiss Date: Mon Feb 11 12:41:02 2013 +0100 Remove unused local variable commit 0380a06a86927164ff17500bcf7c3b54fd5428c4 Author: Adam Dickmeiss Date: Mon Feb 11 12:39:46 2013 +0100 White space reformat commit 1a4d6b95fab9bceec919854df8efe8363df55997 Author: Simon Jacob Date: Fri Nov 2 14:59:31 2012 +1100 Added support for scan of SOLR indexes. To enable support, add the following request handler to your solrconfig.xml file. true terms commit fd0e844569539b1c365114ff1b82209832f14bf7 Author: Adam Dickmeiss Date: Thu Feb 7 15:35:47 2013 +0100 Add test case for iconv Test conversion of Aring to marc-8 in both NFC and NFD forms. commit 1d3113509304fb324a0a48a1731a4d88e14fb2d2 Author: Adam Dickmeiss Date: Wed Jan 30 16:55:55 2013 +0100 Version 4.2.50 commit f989e4ed3181bd8726ba98646e58232ed15b85f7 Author: Adam Dickmeiss Date: Wed Jan 30 16:53:12 2013 +0100 Update NEWS commit 74aa3f7eb2b76108e21dd9d1ea8535387075fe59 Author: Adam Dickmeiss Date: Wed Jan 30 13:29:52 2013 +0100 Diagnostic for missing MARC rule for OPAC commit a601f8d28e00bb3d66d7d425c4cf19cb691d8ce3 Author: Adam Dickmeiss Date: Wed Jan 30 12:54:39 2013 +0100 Remove comment for non-existing function commit 3d95738e1464a966faae513cbaff87e9f9ff2b47 Author: Adam Dickmeiss Date: Tue Jan 29 15:32:43 2013 +0100 yaz_xml_to_opac: OID for embedded MARC may be given commit dac7f3ee439abc1d6f6d547d9c59837b76e06315 Author: Adam Dickmeiss Date: Tue Jan 29 14:48:51 2013 +0100 GFS: conversions between OPAC and XML commit 4c1a14ddb2c650b935bc8dff4dc3f8a98ff7531c Author: Adam Dickmeiss Date: Tue Jan 29 14:46:21 2013 +0100 Complete XML to OPAC conversion commit d0ef47f9201e7316a04f8b1c9d8e7799d9eb8d8a Author: Adam Dickmeiss Date: Tue Jan 29 14:39:08 2013 +0100 Sync spelling of availabilityDate in XML to that of Schema The opacxml.xsd had the correct spelling of this member always. The ASN.1 was mis-spelled and still is (API change) - we are not changing this by this. However, the OPAC to XML conversion had yet *another* typo. This is fixed by this commit. commit c7737ca64f706b92bf37ad107b92d8c73ff82932 Author: Adam Dickmeiss Date: Mon Jan 28 15:31:47 2013 +0100 Further work on yaz_xml_to_opac Incomplete and not tested commit 9baecd2ded07c89696c86ab0a5ac8a324f47e779 Author: Adam Dickmeiss Date: Mon Jan 28 15:31:23 2013 +0100 record_conv: fix leaks (when configure fails) commit 2729cd06642622e1355f41f947498902e6dde61a Author: Adam Dickmeiss Date: Mon Jan 28 15:29:27 2013 +0100 Add test for yaz_record_conv_opac_record commit b6991544f40792c86802b3ed0404dc711c5e2651 Author: Adam Dickmeiss Date: Mon Jan 28 15:28:44 2013 +0100 Minor reformatting commit 633f1d5078e524d7f6cf6a1674821b5464f9fb76 Author: Adam Dickmeiss Date: Mon Jan 28 15:27:48 2013 +0100 New function: z_ext_record_oid_nmem Is like z_ext_record_oid, but takes NMEM rather than ODR. commit 4b92c6833026a51cc391840d1157cd5fefede1df Author: Adam Dickmeiss Date: Fri Jan 25 14:59:15 2013 +0100 Beginnings of XML to OPAC conversion commit 6437a10ee3d3160d01d04afe071901e8f496ad34 Author: Adam Dickmeiss Date: Fri Jan 25 14:48:57 2013 +0100 Fix a few Doxygen warnings commit d4effebe5599237746102ef51bf2421f77943082 Author: Adam Dickmeiss Date: Fri Jan 25 14:44:53 2013 +0100 Rename opacdisp.c to opac_to_xml.c commit 30a1eadf63ab5d1357d10847f905243a250703b8 Author: Giannis kosmas Date: Fri Jan 25 15:03:03 2013 +0200 Handle numeric subfields correctly. commit 2598d7948bb30770da2bcb729a4b2bf2a626a23f Author: Adam Dickmeiss Date: Wed Jan 23 12:40:29 2013 +0100 Doc: a example of #, ? chars in CCL queries commit b657639168eb62aa70ddea2bfc7179a81776cb2e Author: Adam Dickmeiss Date: Fri Jan 18 11:21:38 2013 +0100 Version 4.2.49 commit c6f8f40e4a0b1d970c6b5dbea05978e4f1bde47c Author: Adam Dickmeiss Date: Fri Jan 18 11:20:02 2013 +0100 Update NEWS commit bbbc5ceb43ac100efb9e193fd87d364c18e77f7b Author: Adam Dickmeiss Date: Fri Jan 18 11:19:18 2013 +0100 Call xmlCleanupParser to free Libxml2 memory This is to better check for memory leaks for ICU test. commit d96575f586fecf1d1eed9ecd7a172c9ccb261ffc Author: Adam Dickmeiss Date: Fri Jan 18 11:14:03 2013 +0100 Remove yaz-client-commands.xml Embed it in yaz-client-man.xml instead, because we no longer it include it from main manual (instead all manual pages are contained in Reference section). commit c57bd3de59dea509074f40e58da8a709aa51e945 Author: Adam Dickmeiss Date: Fri Jan 18 11:03:45 2013 +0100 Document join in yaz-icu man page commit 16f1772479c5eac26f81dc29d5f9e3d5aeefab1c Author: Adam Dickmeiss Date: Fri Jan 18 10:56:42 2013 +0100 Simplify icu_buf_utf{8,16}_{create,resize} commit 5a2b1f41cd0b3e0f5441a4cfb3b9484a1c4b017d Author: Adam Dickmeiss Date: Fri Jan 18 10:46:01 2013 +0100 Reformat some source for ICU commit a2d04f72d33de6b0e92900d38ebedeeecb3fc336 Author: Adam Dickmeiss Date: Fri Jan 18 10:33:03 2013 +0100 Add unit test for ICU rule join commit c1264a20ea15e9383d72063fa3c41e16afb611a8 Author: Adam Dickmeiss Date: Fri Jan 18 10:32:32 2013 +0100 ICU: better error handling of rule attribute (required) commit 8e4840a9a7b6117d92d9d97fdb4048a7f8b9ce09 Author: Adam Dickmeiss Date: Thu Jan 17 15:56:43 2013 +0100 New ICU chain rule, join, to join tokens commit 9f85f4de3ec88e4b76240c9fdb112a3dbbb6e34e Author: Adam Dickmeiss Date: Thu Jan 17 12:59:56 2013 +0100 Remove useless assert commit fd5c6eb04843b315e1096eff7a26e694a30d1f53 Author: Adam Dickmeiss Date: Thu Jan 17 12:58:43 2013 +0100 Simplification of initial call to icu_iter_invoke commit 9e1bf2f750bf5fdeadd295a5cf25cac035808641 Author: Adam Dickmeiss Date: Thu Jan 10 12:40:46 2013 +0100 version 4.2.48 commit cd0ccb9cbb4dd4333b94e83e3fa373e7a8806651 Author: Adam Dickmeiss Date: Thu Jan 10 12:38:18 2013 +0100 Update NEWS commit dbc40ad16aa82379d2884e106d79c7d83312667a Author: Adam Dickmeiss Date: Thu Jan 10 11:04:38 2013 +0100 New GFS search member: present_number This is a hint to the search handler how many records are going to be fetched immediately following search. There's no guarantee that it's going to be the case, since it depends on hit count (for Z39.50 piggyback) and whether errors turn up. commit efd4da3c41402c05a0f16aa8d58fe45c6321f681 Author: Adam Dickmeiss Date: Mon Jan 7 11:08:05 2013 +0100 Make a few functions static (private) The functions getbyte_stream, ungetbyte_stream and yaz_gets are now private. They were never declared in a header file. commit d7dccb162b3a3e3166b65de81022a78c71b70d16 Author: Adam Dickmeiss Date: Sun Jan 6 16:30:37 2013 +0100 Bump year commit 0c46d2e66bdeea1600e700124a81a5d0a65d349e Author: Adam Dickmeiss Date: Sun Jan 6 16:25:23 2013 +0100 Bump year commit a8f974f73892157aefb25a591dfa10cc62f2fe07 Author: Adam Dickmeiss Date: Sun Jan 6 16:16:00 2013 +0100 Simplify a few sort spec conversions commit f202b762e293b75fd3aa4683c3c92ce1ae0a7454 Author: Adam Dickmeiss Date: Fri Jan 4 14:50:22 2013 +0100 yaz-marcdump: exit(5) for serious decoding errors commit 5bc2ee09e4dff0f872ce738a5327bced915e3474 Author: Adam Dickmeiss Date: Fri Jan 4 14:46:58 2013 +0100 ISO2709 decoding: be more picky WRT header commit 3d168d8209a7708c568ba13620b6f704d01e3dde Author: Adam Dickmeiss Date: Thu Dec 20 12:02:21 2012 +0100 Reformat commit 82fade1c1b7531cda93c908e33d9af8b9fd91a6f Author: Adam Dickmeiss Date: Thu Dec 20 11:59:55 2012 +0100 odr_prepend: zero length prefix ignored commit 36d8976c55a2681d0057a0c200356a283e897b91 Author: Adam Dickmeiss Date: Thu Dec 20 11:35:58 2012 +0100 GFS: bail out of fetch if last_in_set is set Until now, last_in_set, was only used as to indicate that next-result-set-position should be set to zero. http://www.loc.gov/z3950/agency/markup/04.html#Next-result-set-position Based on patch from Ashley Sanders. commit b70c72a5a3914502cbdd17588e74e6c74bd282b6 Author: Adam Dickmeiss Date: Mon Dec 17 19:53:13 2012 +0100 Rework search for anchor/mask CQL ops Using expressions such as term[i] == some and term[i-1]=='\\' does NOT work. term[i-2] could be '\\' and so on. String *must* be searched from one end to anothor (due to the \\ case). commit f1bbea81f533c0386482e7e8cf000b982bdd9eb8 Author: Adam Dickmeiss Date: Thu Dec 13 11:37:13 2012 +0100 Add two more tests with anchoring commit f0a0db1db32d96c76ff331e28375ba5bae12b9d5 Author: Adam Dickmeiss Date: Thu Dec 13 11:33:51 2012 +0100 CQL: Don't treat \^ as anchor commit cc00f322b9a153a80ae197ab67463ae09f7b8116 Author: Adam Dickmeiss Date: Thu Dec 13 11:24:13 2012 +0100 Add CQL to PQF tests with anchoring commit f18f0f1668e388b081b0944799eacd3b8b8c6327 Author: Adam Dickmeiss Date: Tue Dec 11 15:28:22 2012 +0100 Make some functions static/private in PQF parsing Those functions were never declared in a public header and so should not be in use by applications based on YAZ. commit 765377f7bf8fc6f1c9089ec5a1e5e906dc80e930 Author: Adam Dickmeiss Date: Tue Dec 11 09:56:09 2012 +0100 Avoid mixed stmt/var declare commit f0a90ff91f426a5d1ce96bdf5f61d18cf37e5fb7 Author: Adam Dickmeiss Date: Mon Dec 3 16:03:04 2012 +0100 Check result of fread commit 6d8c5abbb0477835de7e1fcca7915b2f952c3c9f Author: Adam Dickmeiss Date: Mon Dec 3 15:50:16 2012 +0100 Include config.h via <>s commit c5f3f854bdd0d6264af0c7552ac7e3c7acdb9723 Author: Adam Dickmeiss Date: Thu Nov 29 14:04:20 2012 +0100 Provide SSL libs for in-source yaz-config commit a869081a5ad8d09951d8783f372c830f5f9463f4 Author: Adam Dickmeiss Date: Tue Nov 27 14:24:26 2012 +0100 Add Ubuntu quantal commit f7291976f3a89b9695650b3624cbc514490ccb28 Author: Adam Dickmeiss Date: Fri Nov 23 12:22:09 2012 +0100 Spelling fix in NEWS commit 7c7e37084545799555a7e49e0fb4d3d6f44f3a44 Author: Adam Dickmeiss Date: Fri Nov 23 12:17:46 2012 +0100 Version 4.2.47 commit 48b7a077523d1a86c16c9f536c56d6439fe90f42 Author: Adam Dickmeiss Date: Fri Nov 23 11:14:12 2012 +0100 Doc reformat, adjust "still to document" list commit a0b43ae242eb940fb511c1d91742e61e442ca191 Author: Adam Dickmeiss Date: Fri Nov 23 11:03:42 2012 +0100 Document new settings saveAPDU, APDU commit c91efbe35fe8ff53aeafedf0ffb8f1b90841ecdc Author: Adam Dickmeiss Date: Fri Nov 23 10:52:58 2012 +0100 Doc: strip-trailing-whitespace commit 62d24093ae987d90e07a40a8d75f1338b5bbb14b Author: Adam Dickmeiss Date: Thu Nov 22 09:54:49 2012 +0100 GFS: replay implementation_version from backend From 3.0.40 and later, implementation_version from backend was not used in init response at all. commit 411c62d6ff8ded6e1ef68eebea9d9bbaaac360fd Author: Adam Dickmeiss Date: Wed Nov 21 15:49:55 2012 +0100 ZOOM: special options to control APDU logging Using ZOOM_connection_option_set(c, "saveAPDU", "1") will enable logging of APDUs until "saveAPDU" option is set again. If logging is already enabled the effect is that current APDU buffer is cleared. Using ZOOM_connection_option_set(c, "saveAPDU", "0") disables logging (default behavior on new connection). The APDUs sent/received can be obtained by using Using ZOOM_connection_option_get(c, "APDU") or ZOOM_connection_option_getl(c, "APDU", &l). commit 79f02618682f616509d80665126918a07d1f9e80 Author: Adam Dickmeiss Date: Wed Nov 21 14:57:28 2012 +0100 ZOOM C refactor. Make helper ZOOM_send_GDU commit a5c02e630197fd72a4f9c9d4f403c5bd200c0edd Author: Adam Dickmeiss Date: Thu Nov 15 12:43:27 2012 +0100 Version 4.2.46 commit e846acf0e4432c35247996c9ff6988820b6d354f Author: Adam Dickmeiss Date: Thu Nov 15 12:26:30 2012 +0100 Fix tcpip_rcvconnect for gnutls comstack It was broken in the non-blocking case. commit 93c659dcd8c21e3ba1b9b1f18fecf229bdce996b Author: Adam Dickmeiss Date: Thu Nov 15 10:49:51 2012 +0100 Use gnutls_x509_crt_print for newer GNUTLS libs only commit 3c3d8455d2fe2d9934a746abe567ae88c1a91540 Author: Adam Dickmeiss Date: Wed Nov 14 18:48:50 2012 +0100 PEM file expires Nov 12 2022. commit cfb5d95cf2aa8514cccbc1c2d071632375a575e7 Author: Adam Dickmeiss Date: Wed Nov 14 18:44:35 2012 +0100 Renew testing certificate (PEM) commit b3e4cf00229da3e4bdb6931b836f834fbcb43118 Author: Adam Dickmeiss Date: Wed Nov 14 13:28:52 2012 +0100 Extend cs_print_session_info for GNUTLS mode Also check for proper CS type before accessing SSL stuff commit 8fba47fbab12564d6a1301ff175f83bad3ad180d Author: Adam Dickmeiss Date: Tue Nov 13 13:54:24 2012 +0100 Version 4.2.45 commit 3178894be28922a17125e31feff1010fcecc3128 Author: Adam Dickmeiss Date: Tue Nov 13 13:52:53 2012 +0100 Bump year commit 266cfeafc17930bfa6fb7eed92f80b8c751f43b4 Author: Adam Dickmeiss Date: Tue Nov 13 13:45:09 2012 +0100 rpn2cql: less quotes in generated terms Semantics unchanged, but it's prettier this way. commit 4fc6e040f08c366277d3405f178c62c580c7416c Author: Adam Dickmeiss Date: Mon Nov 12 19:35:28 2012 +0100 yaz_uri_to_array: fix check for x-form names commit a2fc23c434e6d48490bc862715898ee4e058ef05 Author: Adam Dickmeiss Date: Mon Nov 12 19:14:27 2012 +0100 Fix syntax of debian/control Introduced by previous commit. commit 1179b3374af000f211421b038e748d1ab4357a7a Merge: b9258ca9 c2981f9e Author: Adam Dickmeiss Date: Mon Nov 12 19:11:17 2012 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit b9258ca92b04e55253794ff5f3bbaef312897b10 Author: Adam Dickmeiss Date: Mon Nov 12 19:10:39 2012 +0100 Debian package libyaz4-dev provides libyaz-dev commit c2981f9eaa8aaf7d04e40f74a99415942bca7101 Author: Adam Dickmeiss Date: Mon Nov 12 15:51:25 2012 +0100 No need to report more than 10 unknown SRU args commit 028d5f9639695599a98f59ef8a59e7f03bc135f7 Author: Adam Dickmeiss Date: Mon Nov 12 15:50:25 2012 +0100 yaz_uri_to_array: reject non-ASCII x-form names commit 2614d567118004072591ae55a387d2cbb1d18130 Author: Adam Dickmeiss Date: Mon Nov 12 11:21:49 2012 +0100 yaz-client: display facets Initialize yaz_facet_attr properly. commit f7db9d090f9a6baf83fa7f1e6c277d1ecc4d0a64 Author: Adam Dickmeiss Date: Thu Nov 1 15:14:35 2012 +0100 Then some spelling commit 58b73e42cc56014e9a1f57474884c6bd4e97ccc1 Author: Adam Dickmeiss Date: Thu Nov 1 15:11:27 2012 +0100 Document CCL case to reflect reality commit 4fb5b41991f308da120e7efb5fee770197f8e41d Author: Adam Dickmeiss Date: Thu Oct 25 12:04:24 2012 +0200 Version 4.2.44 commit e873bb6090290c8615c9649f92c8c13259bafca1 Author: Adam Dickmeiss Date: Thu Oct 25 11:06:20 2012 +0200 New utility yaz_decode_init_diag By adding this, we move code from both ZOOM C and Metaproxy to YAZ. commit fe42f72dc30321041420cf2d1a83867b1c450f38 Author: Adam Dickmeiss Date: Tue Oct 23 13:36:29 2012 +0200 Allow HTTP protocol on unix local socket Allow also Z39.50 database to be given for unix local socket. The COMSTACK string for doing so is: unix:: Examples: unix:/myfile:tcp:localhost:9999/mybase unix:/myfile:localhost:9999/mybase unix:/myfile:http://fakehost/mybase The fakehost is parsed in Host HTTP-header. commit dfe2d4742a851b5830890ba53abd454f0513c5f7 Author: Adam Dickmeiss Date: Tue Oct 23 13:27:01 2012 +0200 Fix condition for unix socket option parsing Search for = instead of , in options, so that the case of unix:file=/myfile works. The search for = will make this case work. Previously a comma had to be included in the spec. commit 36959d3c169e35012248519b9aaa7076476ab573 Author: Adam Dickmeiss Date: Fri Oct 19 14:23:41 2012 +0200 Use dpkg-buildflags in build process This is to use hardening options for the libraries and programs. Refer to http://wiki.debian.org/Hardening for more information. commit 681d5b80f39d4be92bd1a1b934234e76347122ff Author: Adam Dickmeiss Date: Fri Oct 19 14:07:18 2012 +0200 Fix email in debian/changelog commit c2831e6edcef94c16a2504ae4b25a15d35dd666d Author: Adam Dickmeiss Date: Fri Oct 19 13:56:19 2012 +0200 Spell fix commit 64dbcabe91775e26370b75ee899c435f36389989 Author: Adam Dickmeiss Date: Fri Oct 19 13:56:07 2012 +0200 Spell fix commit 0b35884675ac5b97e941e46693792ed0e288f76c Author: Adam Dickmeiss Date: Fri Oct 19 13:11:27 2012 +0200 Version 4.2.43 commit ebdd32e66216c7f3d73523dc4dfb1ba31994c5c8 Author: Adam Dickmeiss Date: Fri Oct 19 11:46:04 2012 +0200 Update NEWS commit d1901517142aca48c48ee87072cad5b5e0d9f6b4 Author: Adam Dickmeiss Date: Fri Oct 19 11:42:28 2012 +0200 ZOOM C: don't trust recordPosition always Some servers, such as IGI global's SRU service uses a recordPosition scheme starting from zero. First record's position should be one according to the standard. commit 79786d23233dc896ecb0f68580298a8759592577 Author: Adam Dickmeiss Date: Thu Oct 18 13:48:14 2012 +0200 Version 4.2.42 commit b161284b288325f5eb5557152d4da21d18dc8ded Author: Adam Dickmeiss Date: Thu Oct 18 13:45:32 2012 +0200 Avoid strcasecmp which does not exist on Windows And also fix condition that would never be true. commit 00537b483d646bd04a204708ecbde708861f044e Author: Adam Dickmeiss Date: Thu Oct 18 13:24:25 2012 +0200 Allow more namespaces for SRU This is to allow, for example, an incorrect namespace returned from server http://services.igi-global.com/sru . commit c9bc3ea0c0b810eafda0ad70d80a83d310b2ef7f Author: Adam Dickmeiss Date: Thu Oct 18 13:24:17 2012 +0200 soap: remove fprintf debug stmt commit 6ab7468ae9a46a330eddc1faa88f1d4e4fff1da9 Author: Adam Dickmeiss Date: Thu Oct 11 08:59:51 2012 +0200 Version 4.2.41 commit 6407c641967e71b75507812ddf48a8bfeb4dabeb Author: Adam Dickmeiss Date: Tue Oct 9 21:14:04 2012 +0200 daemon: log total number of bad signals from child on stop so that it is more easy to spot problems with child worker processes. commit c7d6213beca538adec68facee5049a08066dcd01 Author: Adam Dickmeiss Date: Tue Oct 9 14:37:47 2012 +0200 Announce new functionality API on Debian commit 29eb8a4bca1b88b1954ad28935100cbc5e3540b3 Author: Adam Dickmeiss Date: Tue Oct 9 11:18:52 2012 +0200 retrieval: empty backend name attribute omits element set from being used in retrieval. commit 8ee259e2b0a8abe375fabd564b737e4250f62ecf Author: Dennis Schafroth Date: Thu Oct 4 22:57:32 2012 +0200 Add self to author commit 93da63461bcaa2f2b8c53c0e6c4e3adbec7ef61b Author: Dennis Schafroth Date: Thu Oct 4 20:03:50 2012 +0200 Version 4.2.40 commit eb03a7cb50e72a6359c20920eb2fee7751592a7c Author: Dennis Schafroth Date: Thu Oct 4 19:50:20 2012 +0200 Version 4.2.40 commit 894fd4c1b93cfd17a62a3645b2485a226362eb4f Author: Dennis Schafroth Date: Thu Oct 4 19:50:00 2012 +0200 Version 4.2.40 commit 71d7ffe7ec64adbc129682beef9df3f44bbca756 Author: Dennis Schafroth Date: Mon Oct 1 16:16:08 2012 +0200 Implement Solr sorting to internal Sort parameter. https://jira.indexdata.com/browse/YAZ-617 commit f48fb0d2637f96e6f8e1824201da71213dbc6928 Author: Dennis Schafroth Date: Mon Oct 1 16:13:35 2012 +0200 Add test for native sorting in Solr. ASSIGNED - issue YAZ-617: Implement native Sorting for solr https://jira.indexdata.com/browse/YAZ-617 commit 9d74b82276b2e844ffe8b9f59763da62d877e3a7 Author: Dennis Schafroth Date: Mon Oct 1 14:38:53 2012 +0200 Test for solr sort specs commit 4508cccd5af3c42765155c4d983efa27935b5dad Author: Dennis Schafroth Date: Mon Oct 1 14:38:17 2012 +0200 New solr sort strategy. Using it commit fa7650ec6fedd74a17b0229b52504f2f0b8b8c38 Author: Dennis Schafroth Date: Mon Oct 1 14:36:40 2012 +0200 Methods for conversion between solr and internal sort spec commit ba9b3f1a1499f53999f7b52f61be79524f5ba26f Author: Dennis Schafroth Date: Mon Oct 1 14:35:47 2012 +0200 Extract and add sorting parameters commit 42105f4853a7961b42b47f74abc71b0564e8c969 Author: Dennis Schafroth Date: Mon Oct 1 14:35:12 2012 +0200 New conversion methods for solr sorting commit 4ac462a7014a05f412d5120c9678d8215f842adc Author: Adam Dickmeiss Date: Fri Sep 28 13:31:38 2012 +0200 Versino 4.2.39 commit 6152d8cd8275e784278b6ccaf5f0fd3c240328b9 Author: Adam Dickmeiss Date: Thu Sep 27 15:11:49 2012 +0200 Test new function ccl_qual_fitem2 commit 17118baaeff3d358a93d93aacfa46cef14ee5bab Author: Adam Dickmeiss Date: Thu Sep 27 15:11:07 2012 +0200 Implement ccl_qual_fitem2 Like ccl_qual_fitem but with diagnostic string returned. commit c9b2e9553e1e59d74556a83f38d39e16a389a286 Author: Adam Dickmeiss Date: Thu Sep 20 14:15:32 2012 +0200 MARC: Extra/missing indicator handled for MARCXML The indicator length is given in header and is the same for the whole record. If attributes ind1, ind2 are missing, then content character defaults to blank. Extra indicator attributes (beyond) indicator length are treated as an error. commit 5242cb5a8634bfa38b9333ff7f903e718ac6e292 Author: Adam Dickmeiss Date: Wed Sep 19 15:33:09 2012 +0200 Reformat: delete trailing whitespace commit 7b27a8f378d73a86e8ff5e4fa3285117362481c5 Author: Adam Dickmeiss Date: Mon Sep 17 10:46:13 2012 +0200 Version 4.2.38 commit 62b57dd7f9c0ee57788bbcfb1f81697900587027 Author: Adam Dickmeiss Date: Mon Sep 17 10:43:09 2012 +0200 Document s=ag commit 5d5e6a37a11de6478704606b488f6c42c6a21f76 Author: Adam Dickmeiss Date: Fri Sep 14 11:27:28 2012 +0200 MARC: skip non-ASCII characters always for leader The standard explicitly disallows those. So even if output is non-XML we modify them. commit 6725546edd736d234e34c8878bdd1fad85be8ee1 Author: Adam Dickmeiss Date: Wed Sep 12 14:44:47 2012 +0200 Skip bad UTF-8 chars in MARC leaders But only when outputting XML. commit 887a9c6336d4731d898e185b5bd08cc6424114a8 Author: Adam Dickmeiss Date: Wed Sep 12 14:25:01 2012 +0200 Simplify construct commit f60a3fd863c6a5a8ec97c4918f5cad4a117a8f7d Author: Adam Dickmeiss Date: Mon Sep 10 13:22:11 2012 +0200 CCL: fix uninit local var (attset) commit 3e9991341defe84826dbb663400c2b434ef03641 Author: Adam Dickmeiss Date: Mon Sep 10 12:55:22 2012 +0200 CCL: s=ag automatically adds s=pw Apply structure=word/phrase for ag. It really makes no sense to not apply them. commit 7e12528ec54fa937612c94a936f02872d9a6ca5c Author: Adam Dickmeiss Date: Mon Sep 10 12:47:54 2012 +0200 CCL: add tests for CCL s=ag commit 818a9b6c9a5dfae6176d350346da0a9c55a393d6 Author: Adam Dickmeiss Date: Mon Sep 10 12:45:23 2012 +0200 CCL: implement s=ag special It's like s=al except that terms wo whitespace are combined in one leaf node. commit 70b6eca73431e3cec68c93096de4fb02378c7ae6 Author: Adam Dickmeiss Date: Wed Sep 5 16:12:47 2012 +0200 CCL: refactor search_term_x into two functions commit 3d94a0e2b70ddcd38e8cd881dce30742ee96255c Author: Adam Dickmeiss Date: Tue Sep 4 12:51:13 2012 +0200 Version 4.2.37 commit 99a9c51b93fd45748c78ace834345f2921c94d88 Author: Adam Dickmeiss Date: Tue Sep 4 12:18:24 2012 +0200 Add pretty printing to yaz-json-parse Define new public function json_write_wrbuf_pretty. commit e8c3333a9418ef060e9ba1e34f069ea635a534da Author: Adam Dickmeiss Date: Tue Sep 4 10:08:14 2012 +0200 yaz-client: increase default max message to 64 MB commit 0face583d9eded63ad552038b3cbae607866f646 Author: Adam Dickmeiss Date: Mon Sep 3 15:12:33 2012 +0200 ZOOM: increase default max message to 64 MB commit e418c3a09071c8ea587ce5e32b4f1dca18997dae Author: Adam Dickmeiss Date: Mon Sep 3 15:11:30 2012 +0200 GFS: increase default max message to 64 MB commit b3f7c70decd161e3aa6ad25d08db436662e32624 Author: Adam Dickmeiss Date: Mon Sep 3 15:10:59 2012 +0200 tcpip comstack: increase max recv to 128 MB commit 57714653dbb646c4831568e35d9065dc54502346 Author: Adam Dickmeiss Date: Wed Aug 22 10:10:27 2012 +0200 Versino 4.2.36 commit df60ae8abbe04d814b4852732b6e9008c755ac58 Author: Adam Dickmeiss Date: Wed Aug 22 10:05:59 2012 +0200 Update NEWS commit 3e11596504862f376b7340848715d6f549864660 Author: Adam Dickmeiss Date: Tue Aug 21 15:05:52 2012 +0200 yaz_poll: Allow num_fds == 0 commit 1d373de015fe24656f8fb7e4ff5edb3c2087085d Author: Adam Dickmeiss Date: Tue Aug 21 15:02:19 2012 +0200 zoomsh: allow shell command to be executed Via the system(3) call. commit aa022874f3bafc909a7d4ed3dd0923347856ba1b Author: Adam Dickmeiss Date: Tue Aug 21 14:42:01 2012 +0200 Update m4 commit 70167dec477969519b27873537a7d9d7d7e686c1 Author: Adam Dickmeiss Date: Mon Aug 13 14:06:46 2012 +0200 yaz-client: fix bad encoding of "itemorder item" The itemorder item - command forgot to use length of encoded Item Request package. Error present since YAZ 3. commit 0d16731ebba3c4988791de9d770eccff725f5bda Author: Adam Dickmeiss Date: Mon Aug 13 12:55:12 2012 +0200 yaz-ztest: fix bad usage of session handle Bug was introduced when result sets were saved (271a9c83). commit 2bf750fa7a6e28d9ebb1fabd6325ecf4cfac7e49 Author: Adam Dickmeiss Date: Wed Aug 8 14:53:22 2012 +0200 Decode SRU 2.0 responses The official namespace for responses, according to http://docs.oasis-open.org/search-ws/searchRetrieve/v1.0/cs01/schemas/sruResponse.xsd appears to be http://docs.oasis-open.org/ns/search-ws/sruResponse . nature.com's server, however, usee namespace http://docs.oasis-open.org/ns/search-ws/sru-2-0-response For this reason we are now using a glob-expr to match up the namespace. ZOOM C and yaz-client updated. Perhaps SRU 1.2 uses same namespace, I don't know. I can not find a single real example showing the "real" namespace in the documentation from OASIS. The namespace for requests is different from responses, but this is not added to YAZ yet, when we don't encode them yet. commit 430e6549acad5c87e110a9484c1e0302420c9588 Author: Adam Dickmeiss Date: Wed Aug 8 14:44:35 2012 +0200 SRU recordPacking: guess record packing in response rather than looking at the recordPacking element which, OF COURSE, changed semantics in SRU 2.0. commit eeefb8a3c1f94ccff4435e32bb675ae9dc75b20f Author: Adam Dickmeiss Date: Wed Aug 8 14:42:47 2012 +0200 ODR dump: truncate dump after 20k rather than 2k. commit e81dcf324298802ffbd45c85650b94ce245f65ce Author: Adam Dickmeiss Date: Wed Aug 8 09:27:38 2012 +0200 yaz-client: don't display bogus records from SRU servers Some SRU servers return more records than given by *maximumRecords*. Skipping those in display! commit bb44e503b21c87aabdb54bea64944132302ce77b Author: Adam Dickmeiss Date: Tue Aug 7 13:35:52 2012 +0200 Update m4 commit 25eeaa80c70de47a1f440482daf85f8321707a4c Author: Adam Dickmeiss Date: Tue Aug 7 13:32:59 2012 +0200 Use shared id-config.sh and fix automake check The automake version was incorrect and this is fixed by this. commit e015c65800a449e0c277ccb3c318ae9691b8a132 Author: Adam Dickmeiss Date: Mon Aug 6 15:22:04 2012 +0200 record_render: simplify buffer return handling and fix at least one bad memory reference, that broke the test_embed_record sometimes. commit 08921de88f9edf4a9ac2cb440af8ee4b009dc8fe Author: Adam Dickmeiss Date: Wed Aug 1 14:30:18 2012 +0200 Allow http://user:pass@host notation for yaz_url_exec commit 80184e0ebd6d82ad97874372236c2ad956e01d72 Author: Adam Dickmeiss Date: Mon Jul 30 15:18:50 2012 +0200 zoomsh: check for ext type parameter Must be given. commit bb1db6aa43a5f6c15dfa645ff15fecd463795cf6 Author: Adam Dickmeiss Date: Fri Jul 6 13:12:35 2012 +0200 Define two locals always; to avoid GCC warning commit 6960941c29901f61696152ad7ba8f8239aa8766a Author: Adam Dickmeiss Date: Fri Jul 6 12:53:24 2012 +0200 DH compat 5 commit 7a79bf9fad797a2d2e4fc8a2352e4ed2b0f95f94 Author: Adam Dickmeiss Date: Tue Jun 26 14:48:56 2012 +0200 Version 4.2.35 commit 45a886a6827c18bb47fafa3822e7e2496d386bb7 Author: Adam Dickmeiss Date: Tue Jun 26 14:47:56 2012 +0200 Update NEWS commit 46ef949fc6e8c975ebb5bd6ed1a4f745b2d24aae Author: Adam Dickmeiss Date: Thu Jun 21 14:35:54 2012 +0200 Add test case for rendering of UTF-8 MARC record commit 2465d6db8c6b6ee61f63369d1914ac592141a9c5 Author: Adam Dickmeiss Date: Thu Jun 21 14:35:08 2012 +0200 record_render: simplify a bit commit f70bb871b56cdbc9dab3685b7a7d2090c3258b5e Author: Adam Dickmeiss Date: Thu Jun 21 14:33:11 2012 +0200 record_render: fix buffer overrun This appeared as charset=.. being ignored for base64 conversions, but could also be giving SEGVs. commit a87b8b80bdeff5308d2c21a9f1dc004573f18dad Author: Adam Dickmeiss Date: Wed Jun 20 15:36:25 2012 +0200 record_render: allow ws after = in typespec For example, xml; charset= marc-8 commit 3e9a2da838e3e56d7a74958eff553f71199bbaa4 Author: Adam Dickmeiss Date: Wed Jun 20 15:19:03 2012 +0200 Fix record_render for case where len==NULL In which len is unset by record_render commit 7fb0d7639df297cd23ac4494b3c5001b41b595d0 Author: Adam Dickmeiss Date: Wed Jun 20 13:06:16 2012 +0200 Test base64 system more commit 5db2880c5fccc20012549556893bf93668657c1a Author: Adam Dickmeiss Date: Wed Jun 20 13:04:59 2012 +0200 Allow whitespace for base64 decoding commit 95a76bd311b56586f2f3e9bb6e2e2a6c3f2dbce4 Author: Adam Dickmeiss Date: Tue Jun 19 12:33:42 2012 +0200 render_render: Change spec for base64 record embedding Syntax is now base64=x-path .. part of record_render. For example, to produce embedded Turbomarc that comes in marc-8 encoding (usmarc typically), you could use: txml; charset=marc-8; base64=myxpath . commit b55bad569eb7255378533de9f46ced29c4a9d281 Author: Adam Dickmeiss Date: Mon Jun 18 15:47:01 2012 +0200 record_render: make it compile wo Libxml2 commit c78f61142413410e88ed2a83627516bb4fa24b33 Author: Adam Dickmeiss Date: Mon Jun 18 15:05:26 2012 +0200 record_render: base64 decoding of embedded records commit f938f90db302b31bdd72b86ca3f9671c7199a4f1 Author: Adam Dickmeiss Date: Thu Jun 7 15:19:32 2012 +0200 Version 4.2.34 commit 79635ba722de30013ed3d5a5e287737e294d8488 Author: Adam Dickmeiss Date: Thu Jun 7 15:18:33 2012 +0200 Add CentOS 5 commit 407aef92a1c92802757e9f6bd802697317a91462 Author: Adam Dickmeiss Date: Thu Jun 7 15:17:53 2012 +0200 Update NEWS commit a5af8f0be7d54de3a860346ee3909463008c5090 Merge: 9471482e bb9e3ae8 Author: Adam Dickmeiss Date: Wed Jun 6 14:07:12 2012 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 9471482ee33ba4513858f9bcc654327af4fe1b99 Author: Adam Dickmeiss Date: Wed Jun 6 14:06:38 2012 +0200 yaz-config --include: returns -Ipath for YAZ header files. commit bb9e3ae87d2a54e24f49ed2cd192b5015c960fa3 Author: Dennis Schafroth Date: Wed Jun 6 13:08:56 2012 +0200 Now copied from header commit 301ebe26faf3818afe489ca21aefeabf1b238486 Author: Dennis Schafroth Date: Wed Jun 6 12:07:34 2012 +0200 Implement missing function. already declared in API commit 19e0683f8919ec86f6340c1667da495328ec899a Merge: 76f9c2a8 7a64f4dd Author: Adam Dickmeiss Date: Tue Jun 5 08:16:12 2012 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 76f9c2a86cc9e541f3dc9ca19acdc1d930b0a90e Author: Adam Dickmeiss Date: Tue Jun 5 08:14:24 2012 +0200 Spell fix of ZOOM_resultset_facets_names Was ZOOM_resultset_facet_names before. This changes the public API but we have to assume nobody was using it, since it was never declared in a public header. commit 7a64f4dd174fc2ce822202423f159e487cbfc736 Author: Jakub Skoczen Date: Mon Jun 4 17:03:24 2012 +0200 Read and convert base64-encode marc commit 29410c87550c87533c019efeddb83d527a44ce64 Author: Adam Dickmeiss Date: Mon Jun 4 15:01:06 2012 +0200 Beginnings of test_embed_record commit e4e1d561118f9d95d4d3a67b79a8acaf33f972e8 Author: Adam Dickmeiss Date: Fri Jun 1 09:07:31 2012 +0200 Reformat commit ccb71a41bee3e0438d4a660fad5e4d98f4e140e4 Merge: 665d20fd 6c674d1f Author: Adam Dickmeiss Date: Fri Jun 1 09:04:01 2012 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 665d20fd5ce32ae2177ed17ace8a893aec375bb1 Author: Adam Dickmeiss Date: Fri Jun 1 09:03:51 2012 +0200 zoom: fix connect options (bad free) commit 6c674d1fb42e36b8fd7afe9da2a1f914b23063ad Author: Adam Dickmeiss Date: Wed May 30 09:51:18 2012 +0200 Remove comments about recordPosition in ZOOM commit 79aa9b03d9997228c511a685ad46e0f543427bea Author: Adam Dickmeiss Date: Wed May 30 09:50:49 2012 +0200 Update doc/common commit 13c6dff035b4cc31630241e085a6b34a2f93c436 Author: Adam Dickmeiss Date: Tue May 29 14:54:14 2012 +0200 Update doc/common commit 16c23e9a24f6f079e2f43a7e8cf929b6b2fe333f Author: Adam Dickmeiss Date: Tue May 29 14:52:50 2012 +0200 Add links to 3d party packages Mention the newer windows platforms that are being tested. Mention that CentOS, not RedHat is what we built for at the moment. commit 32e80f00a5c06ad5d5de0d4205897197a770fd31 Author: Adam Dickmeiss Date: Tue May 29 14:52:37 2012 +0200 Update doc/common commit ad89655683cbcda5c48711da5463a97e2c238d19 Author: Adam Dickmeiss Date: Thu May 24 11:09:39 2012 +0000 Add test_icu.4 results in dist So that it gets tested in dist-files as well. commit 431d7da079bc03eccb53ee2567ee35693ba6de24 Author: Adam Dickmeiss Date: Thu May 24 11:08:18 2012 +0000 icu test: don't use tokenize rule="s" because it differs from ICU 3.6 and ICU 4. commit 9184b4600f4db1371e57402cd0513318e8a72eef Author: Dennis Schafroth Date: Tue May 22 11:40:35 2012 +0000 Use specific characters instead of punktuation. Makes a difference commit d02429b9a7fb8bb01961a51c2446eb1dce048c78 Author: Adam Dickmeiss Date: Mon May 21 14:49:08 2012 +0200 Change APDU dump printing to avoid long leading blanks For levels 16 or larger the level is shown and the indentation is truncated but recursed with modula 8. This makes it still reasonable easy to read - even for nested BER dumps. commit 1e05a7181484150177da75a3a2fb43562d2c7520 Author: Adam Dickmeiss Date: Mon May 21 14:46:49 2012 +0200 Fix bug completeBER_n WRT too nested BER Function completeBER_n could return 0 (incomplete package) in case where the BER package was considered too nested (return value of -2). commit ba73ec378cd88f121a31f4afe62c1a32d562c8d5 Author: Adam Dickmeiss Date: Mon May 21 13:37:00 2012 +0200 dumpber: lines of level 15 are not indented furhter Two spaces per indentation; indentation 15 or more is indented to a fixed indentation and augmented with a lavel= indication. commit dcd0fca49ff6765fc01a2c0e13191c0453a7e422 Author: Adam Dickmeiss Date: Mon May 21 12:54:17 2012 +0200 zoomsh: increase max size of command+args commit 98eedcb6e6a9f3b0d94c7e8734dee262f6ea54a3 Author: Adam Dickmeiss Date: Mon May 21 12:13:43 2012 +0200 GFS: No limit in RPN buf size in CQL to RPN conv commit 5d212c6eea2e24b8c95aa7b66592fdc3884cef76 Author: Dennis Schafroth Date: Thu May 10 15:59:21 2012 +0200 Change after rule change commit 0b889da00e17eda0f6bf3e89d2a9ada76f45ef76 Author: Dennis Schafroth Date: Thu May 10 15:54:50 2012 +0200 Right rule commit 96173a25769cbab90e3bca98cc626f32d2570915 Author: Adam Dickmeiss Date: Wed May 9 15:30:45 2012 +0200 Fix date commit ab2649ca7089099e5f163e93ce90edb5fbfbfa56 Author: Adam Dickmeiss Date: Wed May 9 13:09:00 2012 +0200 Version 4.2.33 commit e5bf9a70d3b1cea35bb87151f6ca654d4dfbb571 Author: Adam Dickmeiss Date: Wed May 9 13:08:31 2012 +0200 Update NEWS commit 487b5074b34ff24575136df048d9c7970ccaf98f Author: Adam Dickmeiss Date: Wed May 9 12:57:02 2012 +0200 YAZ_EXPORT yaz_srw_sortkeys_to_sort_spec commit 23f92b53dea1b39e91cfeb46f1313583828fd320 Author: Adam Dickmeiss Date: Wed May 9 12:41:20 2012 +0200 More pointers in Doxygen mainpage commit 4d95bcc1c92abde629616853b6a5d8e56444f5f3 Author: Adam Dickmeiss Date: Wed May 9 12:39:46 2012 +0200 daemon: new scheme for graceful termination The keepalive child process calls new function, yaz_daemon_stop, which tells parent keepalive process to terminate. This function should be called when the child process has closed the listening socket. commit 185071b355f704ffe9072b3221eedbda78558dda Merge: 7ed3ff16 fdbc6811 Author: Dennis Schafroth Date: Mon May 7 16:28:39 2012 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 7ed3ff16e4d2bcaf16883cbf0bc8cbc223682b00 Author: Dennis Schafroth Date: Mon May 7 16:28:10 2012 +0200 Example of punctuals removal at sentence end commit 724205c3d9ef8aa171c469b8e4c837250f487047 Author: Dennis Schafroth Date: Mon May 7 16:27:49 2012 +0200 Example of punctuals removal at sentence end commit fdbc68116e40436502229bbbabec0c3d6b9da378 Author: Adam Dickmeiss Date: Thu May 3 16:38:24 2012 +0200 daemon: further tweaks to keepalive handling SIGTERM: we wait until child terminates. This ensures that stop script can safely assume that when moniotor process is gone, the listening socket is closed. SIGHUP: we send a signal to child process. Wait 2 seconds and stop without waiting for child to terminate. Indeed it may still be running serving remaining request. We have no way to know if the child has really closed the listening socket within the two seconds we wait. commit ab4fa4869bf147f316b418e6c1a24807d82ed5f6 Author: Adam Dickmeiss Date: Tue May 1 22:38:43 2012 +0200 daemon: exit monitor process for SIG{HUP,TERM,USR1} It ensures that binding socket is closed in monitor process. It also ensures that even if child process makes a failure during termination, SIGSEGV or other, monitor process also terminates. commit 66058c944888620921047997edd6d7e1e21c3cc8 Author: Adam Dickmeiss Date: Tue May 1 12:21:09 2012 +0200 Build for Ubuntu precise, no build for maverick commit 1a3be581e0f5a91de90d62d8cb8b41fd774efec5 Author: Adam Dickmeiss Date: Thu Apr 26 13:55:50 2012 +0200 Fix yaz_xml_include_simple to return -1 on failure commit 92085e57d085092c52e9b2ad9e0ee1405c0200c8 Author: Adam Dickmeiss Date: Wed Apr 25 16:06:49 2012 +0200 yaz_url_exec: minor adjustments to log msgs commit cc1a58f855146ca26d117f6424284beda0e7382b Author: Adam Dickmeiss Date: Wed Apr 25 10:06:38 2012 +0200 Version 4.2.32 commit 278bdaa09f8fe713d061aa346247447753ceb748 Author: Adam Dickmeiss Date: Wed Apr 25 10:03:48 2012 +0200 Update NEWS commit 544e5d194bfcba127333315679e280801f5eb903 Author: Adam Dickmeiss Date: Wed Apr 25 10:01:08 2012 +0200 Add some Bib-1/SRU diagnostics + mappings Bib-1: 1073 and 1074: Proxy failure SRU: 1074: Proxy failure commit 3327f7a80a6649a2ab323f70ef4749635494c1b9 Author: Adam Dickmeiss Date: Tue Apr 24 14:28:46 2012 +0200 Do not build for Debian lenny anymore commit 83b153f14227fddc9d4bf83e5f4479fe001d3f0f Author: Adam Dickmeiss Date: Mon Apr 23 11:21:56 2012 +0200 Version 4.2.31 commit 573ca6773abadcc7380bf900a6f443119f2e8c01 Author: Adam Dickmeiss Date: Tue Apr 17 16:22:04 2012 +0200 YAZ daemon utility relays SIGUSR1 to child process commit 09db2ad24d6ba8693290d4a5dbc0a741fff74c91 Author: Adam Dickmeiss Date: Tue Apr 17 15:52:03 2012 +0200 ZOOM: handle trailing slash for Z39.50 urls Previously localhost:9999/ would result in en empty database list - which in turn would result in encoding failure for search. commit 03dccce903176e61f889b1558834aa5a09f9f8c0 Author: Adam Dickmeiss Date: Mon Apr 16 10:32:28 2012 +0200 Fix reading beyond string in yaz_sort_spec Spotted by Debians buildds output: https://buildd.debian.org/fetch.cgi?pkg=yaz&arch=mips& ver=4.2.30-1&stamp=1334563202&file=log commit a08be0190f775496cea3136559508991cab52e26 Author: Adam Dickmeiss Date: Wed Apr 11 10:27:10 2012 +0200 Version 4.2.30 commit 4b881b11489fe1cb823f75dcfc5b88cbe7c21ba0 Author: Adam Dickmeiss Date: Wed Apr 4 12:54:14 2012 +0200 Update Bib-1/SRU diagnostic map for 236, 1015 commit 1de3e0a16b71a0d901efc76ed93285a1a869ef09 Author: Adam Dickmeiss Date: Wed Apr 4 12:53:14 2012 +0200 add two new SRU diagnostics 236: Access to specified database denied 1015: Init/AC: Maximum number of simultaneous sessions for Userid commit e7cef788e6e6ae270dc9a274b5da51e953ca5479 Author: Mike Taylor Date: Tue Apr 3 10:28:11 2012 +0100 Document the very useful ZOOM-C option "apdulog". commit d9dc3bb081f0b1ffc860569373cd35424c0f7c8d Merge: 1254f591 1941ff11 Author: Adam Dickmeiss Date: Fri Mar 23 14:28:17 2012 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1254f5913d639e30ac822165196170a9b53748ff Author: Adam Dickmeiss Date: Fri Mar 23 14:24:35 2012 +0100 CQL to RPN: term may be passed through verbatim This is enabled with truncation.cql . The assumption being that the term is already CQL. commit 1941ff11603ef323740f8aa8de0baa472e6ea489 Author: Wolfram Schneider Date: Fri Mar 23 12:22:51 2012 +0000 update packages names for FreeBSD commit 51595f1f496ef99ccbe325f1984f46575fd46ea8 Author: Adam Dickmeiss Date: Tue Mar 20 14:24:08 2012 +0100 CCL: fix spell error in message commit 94b8ca343cc7084394526bd26c80c208aa16c9f9 Author: Adam Dickmeiss Date: Tue Mar 20 10:36:12 2012 +0100 Version 4.2.29 commit 5c0fa4bf1be2881b55a3ed27ae08cdc8b35271bc Author: Adam Dickmeiss Date: Tue Mar 20 10:34:50 2012 +0100 Update NEWS commit d9c0ce2694cbd7198c03b8e7d7c4e20a804f809f Author: Adam Dickmeiss Date: Tue Mar 20 10:33:19 2012 +0100 yaz-marcdump man: quote in leader spec example commit 922a7e99f2317972f9d6f3329d37a7583f57cbaa Author: Adam Dickmeiss Date: Thu Mar 8 16:56:50 2012 +0100 record_conv: allow user-XSLT params For example: commit b1c1ccaac399ee2eff5f993654accb5d17844c9e Author: Adam Dickmeiss Date: Thu Mar 8 10:08:38 2012 +0100 record_conv: leader spec may be given for marc element The leader spec is given as attribute leaderspec for element marc. For example to convert a MARC21 record from MARC-8 to UTF-8: commit 2e8277ab9c32d32ac776f7164828ef016cf06860 Author: Adam Dickmeiss Date: Thu Mar 8 09:19:58 2012 +0100 record_conv: fix error handling for marc charsets mis Fix really brain damaged error handling of marc charset check. commit 67263adf9c8efbd384b09ec71b98844ce7c7d2bf Author: Adam Dickmeiss Date: Wed Mar 7 12:46:37 2012 +0100 CQL: fix extra terms in wrong order commit ca293278a7d1a064c21d35df8ee00cf6d3ed6936 Author: Adam Dickmeiss Date: Tue Mar 6 12:23:34 2012 +0100 Version 4.2.28 commit b32d9b00c627dfca899c5a017f159313cb95faaa Merge: 04bbf6b7 ecaa6d31 Author: Adam Dickmeiss Date: Tue Mar 6 12:19:29 2012 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 04bbf6b734eade606885f41fb448ba30de29a197 Author: Adam Dickmeiss Date: Tue Mar 6 12:19:24 2012 +0100 Update NEWS commit ecaa6d31f9384565debfbd1848f1a42bb36b0666 Author: Adam Dickmeiss Date: Fri Mar 2 22:41:04 2012 +0100 Update doc/common and m4 commit b0be69c0a676f1702f12b2ea17cd73f9ebb08ea2 Author: Adam Dickmeiss Date: Fri Mar 2 11:28:34 2012 +0100 record_conv: change construct prototype Removing yaz_record_conv_t from construct conversion type handler. commit a3e65bcd3250b107397675bc65b35b5939355025 Author: Adam Dickmeiss Date: Fri Mar 2 11:17:28 2012 +0100 record_conv: modify new API for conversion types The conversion types may be passed in new functions yaz_record_conv_configure_t and yaz_retrieval_configure_t. Removing yaz_record_conv_add_type . commit d71e0f5445235ed25ab633d73a26bb4f01a0885f Author: Adam Dickmeiss Date: Thu Mar 1 15:41:34 2012 +0100 record_conv: 2nd attempt compile wo Libxml2 commit b2d8fc833e5f604df069deb5b16a76b6e03a0e61 Author: Adam Dickmeiss Date: Thu Mar 1 15:17:00 2012 +0100 record_conv: proper diagnostic for unhandled types Thanks to Hudson for telling me. commit 6bad90d4b022ea2276a83ecaccef42de13708d2d Author: Adam Dickmeiss Date: Thu Mar 1 15:07:46 2012 +0100 Move yaz_record_conv_type to XML2-only area Because it refers to xmlNode. commit 95b69dabd857fa3342a71df2be123333b42c8da2 Author: Adam Dickmeiss Date: Thu Mar 1 14:52:58 2012 +0100 record_conv: extensible conversion A new conversion type may be defined for the record_conv system, with the new function yaz_record_conv_add_type. commit 558df80ae85811e84dbe5767df72bffdd19c3bcf Author: Adam Dickmeiss Date: Thu Mar 1 14:52:20 2012 +0100 Comment fix to make Doxygen happy commit a067640083f9ef3f18feb267cc361b7602b9fa37 Author: Adam Dickmeiss Date: Wed Feb 29 10:47:13 2012 +0100 Avoid mixed stmt/var declare commit a317903bc5eccb7cfb0c15411565fe4d5f2e72a4 Author: Adam Dickmeiss Date: Tue Feb 28 19:41:25 2012 +0000 Version 4.2.27 commit 9a15c4eecb9fc1ea2b52a59fbc496658fea534fd Author: Adam Dickmeiss Date: Tue Feb 28 17:10:43 2012 +0100 Update NEWS commit 0ee6ed21c56ed2fbcdab586054f95d1be1107e1d Author: Adam Dickmeiss Date: Tue Feb 28 16:53:19 2012 +0100 Diagnostic map tweaks for "Database does not exist" Bib-1 114: Database unavailable and Bib-1: 235 "Database does not exist" maps to SRU diagnostic 235 "Database does not exist". commit d996e25e6508fde1400a7c8aaea2a06f66503a29 Author: Adam Dickmeiss Date: Tue Feb 28 16:51:03 2012 +0100 Add SRU diagnostic 235: Database does not exist Not part of the standard. commit 6451a706e744f7b2d6142f60ab2ee025ecf48326 Author: Adam Dickmeiss Date: Fri Feb 24 14:48:26 2012 +0100 Reformat (no code changes) commit e38cab5629e6643d9e1621a697e8ccc8d7822727 Author: Adam Dickmeiss Date: Fri Feb 24 14:46:02 2012 +0100 retrieval: only one section allowed commit 97d7fdb61597302d861480d4bc7455d4bb1b08cb Author: Adam Dickmeiss Date: Fri Feb 24 11:26:56 2012 +0100 CCL: ccl_err_msg returns 0 ptr for invalid ccl_errno commit ba1f112c74932545871791eaf2c2e4cfe4014ee5 Author: Adam Dickmeiss Date: Fri Feb 24 11:23:46 2012 +0100 CCL: add two new diagnostics for unsupported masking The new diagnostics are: "Embedded truncation not supported" and "Single charcacter mask not supported". commit 6e3979a31cbe2af9e223930e04770a9efb5f2021 Author: Adam Dickmeiss Date: Thu Feb 23 08:14:55 2012 +0000 Version 4.2.26 commit 0e7fdbc857d4905e67a7bdf8fe5b6c773ee47a7b Author: Adam Dickmeiss Date: Thu Feb 23 09:09:48 2012 +0100 CCL: fix use of "term" field in sub queries commit d2b2e6cbf33f8d85dfc258fa7b53ff65e2423998 Author: Adam Dickmeiss Date: Fri Feb 17 15:30:12 2012 +0100 Update doc/common commit d1ea8fe378111656d531fb426eaa10f57d56f29f Author: Adam Dickmeiss Date: Tue Jan 17 14:55:54 2012 +0100 Fix 0 ptr ref in tcpd usage (host unknown) Thanks to Donovan Artz for the patch. commit eafd1552e1097d4f93f7eb22cabbb25d3b751bf8 Author: Adam Dickmeiss Date: Wed Jan 11 09:29:25 2012 +0100 Version 4.2.25 commit 529cef45a52c3f9425f3b81ce46ba77a72681685 Author: Adam Dickmeiss Date: Wed Jan 11 09:26:45 2012 +0100 Add Ubuntu Oneiric commit 77c5a4fca8b516fd39b8ba213daed17a465a6b2a Author: Adam Dickmeiss Date: Mon Jan 9 19:14:31 2012 +0100 Happy new year commit 08e2bab36d24a98ed921130df0973370be5aac80 Author: Adam Dickmeiss Date: Mon Jan 9 19:11:21 2012 +0100 Changes to NEWS commit 3add35fb1972e98b5f8922bd1c6f1985b4540009 Author: Adam Dickmeiss Date: Thu Jan 5 16:13:22 2012 +0100 Add some tests for CCL for new proximity behavior commit e5a3bea3827a893295f7d4d30fbb2fbacd27d02e Author: Adam Dickmeiss Date: Thu Jan 5 16:11:08 2012 +0100 CCL: allow parantheses for prox operands For example, (a) % (b) is now allowed. The parsing code was actually reduced by this. commit abe46958ffd48a2af09b9f7753f89342e31fb1e1 Author: Adam Dickmeiss Date: Fri Dec 30 14:36:47 2011 +0100 GFS: fix bend_assoc_is_alive When cs_get returns 0 the association is marked dead, rather then being destroyed. If not, the session memory is being free'd before the search/scan handler is finished. Also destroy request memory in request_release rather than in various places, which resulted in leaks from time to time. commit c6e6b1fe0674de638fbc1ad44393baa251d4af6f Author: Adam Dickmeiss Date: Wed Dec 21 14:52:19 2011 +0100 Version 4.2.24 commit f18ebddc25b66240a8c2396d7bc4f85c3eea8157 Author: Adam Dickmeiss Date: Wed Dec 21 14:49:57 2011 +0100 Changes commit b8c32e563453793ed92e311d4585d54fc77fbb04 Author: Adam Dickmeiss Date: Wed Dec 21 10:30:33 2011 +0100 Add test case for cql_sortby_to_sortkeys (sort prefix) commit f9070e3fc55f12dfa9562727f78734615535ec4c Author: Adam Dickmeiss Date: Wed Dec 21 10:29:56 2011 +0100 cql_sortby_to_sortkeys: honor sort prefix commit 85a0aae5ecc05652b0cf16aae811d64846835f80 Author: Adam Dickmeiss Date: Tue Dec 20 14:49:34 2011 +0100 RPN to CQL: always quote resulting terms For bizarre reasons, JSTOR's SRU server returns 0 hits on ISSN searches unless a CQL term is quoted. The rpn2cql family of functions now always returns quoted CQL terms. commit 871f1239cc0c8a2d4b2bd16a918a39c97633faa8 Author: Adam Dickmeiss Date: Tue Dec 20 12:56:08 2011 +0100 Fix CQL to CCL conversion for multiple terms Add two test cases as well. commit d3dd31e410ea2d3ecba76d825909db7a2c2279d1 Author: Adam Dickmeiss Date: Thu Dec 15 10:40:28 2011 +0100 Version 4.2.23 commit 0053add2774c4e79953db1095dfa1bb9c3d456d1 Author: Adam Dickmeiss Date: Thu Dec 15 10:40:17 2011 +0100 More consisten look of NEWS commit fbb95a6f20b90e3fc804d0e808a27175f6537bf4 Author: Adam Dickmeiss Date: Thu Dec 15 10:38:59 2011 +0100 Update dependency version due to new function ZOOM_connection_save_apdu_wrbuf. This should have been done for the 4.2.22 release. commit a58958a898bd469b252d3554f64b059a723aa774 Author: Adam Dickmeiss Date: Thu Dec 15 10:30:51 2011 +0100 Update news commit c239fa0fd573149e2d916b6c844aca8161ec2b45 Author: Adam Dickmeiss Date: Thu Dec 15 10:27:56 2011 +0100 configure.ac not needed for Windows package commit f1e531f6145bd036475a33dc7f3574ddd252624f Author: Adam Dickmeiss Date: Thu Dec 15 10:24:35 2011 +0100 IDMETA part of Windows package commit 0bcc1ed577edcdcab35fdc930f50ad0303946b8a Author: Adam Dickmeiss Date: Thu Dec 15 10:20:08 2011 +0100 Pass IDMETA to mk_version.tcl commit d384acaecc0cc8b226aae4cf2f7ae4125cf272e6 Author: Adam Dickmeiss Date: Thu Dec 15 10:17:21 2011 +0100 mk_version.tcl gets version from IDMETA It's a month ago we moved version from configure.ac to IDMETA, but mk_version.tcl is only used on Windows. commit 5634c61bba1700946c7e7f4292580e50a3f594d6 Author: Adam Dickmeiss Date: Thu Dec 15 09:39:34 2011 +0100 Add tests for yaz_uri_to_array and yaz_array_to_uri commit 692cfa1de9dd855c1725db48f6d0a2cddcae9fcd Author: Adam Dickmeiss Date: Thu Dec 15 09:37:11 2011 +0100 Allow =val to be omitted for yaz_uri_to_array Also, multiple &'s in sequence is treated as one. For example, &&a=b&&&c& is identical to a=b&c= . commit 49ef9093f47fbe076c85428d1b3f4aeb94d49165 Author: Adam Dickmeiss Date: Wed Dec 7 14:38:40 2011 +0100 Fix Doxygen filename commit 0faba8eaa6796ce9a1101e36d00d9b0d9f5ce3b2 Author: Adam Dickmeiss Date: Wed Dec 7 14:37:23 2011 +0100 Refactor SRU/Z39.50 diag map utils to diag_map.c commit f862d0cc736ecc220ca1a39093c2abf13c70e8e9 Author: Adam Dickmeiss Date: Mon Dec 5 10:53:19 2011 +0000 Version 4.2.22 commit 0b0eb588d2989d5bc7d77600e4e9b375d1eade12 Author: Adam Dickmeiss Date: Mon Dec 5 11:28:08 2011 +0100 Add ZOOM_connection_save_apdu_wrbuf This function may be used to save APDUs for a connection to a WRBUF. commit 11325508f28602eeeade2294f0b5e70f3f9c8429 Author: Adam Dickmeiss Date: Fri Nov 25 14:31:19 2011 +0100 buildconf removes autom4te.cache This is to ensure that software version is not cached but taken from IDMETA as it should. commit 2dbb55981b7169e8e3957e2ea2ea3f7fd5aea530 Author: Adam Dickmeiss Date: Thu Nov 24 14:17:07 2011 +0100 Add tests of CQL to CCL+sortkeys conversion commit b57542eb8dfd435b7c5f2c02e4b0d9a1a8431521 Author: Adam Dickmeiss Date: Thu Nov 24 11:00:10 2011 +0100 CQL to CCL: add ()s for boolean sub terms For boolean operation, a op b, make CCL (a) op (b) rather than (a op b), to ensure that proximity operator within a or be is only applied there. This is to ensure that field assigment in a is never applied to b in the resulting CQL. In CCL proximity has higher precedence than field assignment, unlike CQL. commit 0a23789949e767272bb46ca36cf66cbc0fb2cd87 Merge: ad737e79 956cbe81 Author: Adam Dickmeiss Date: Thu Nov 24 10:37:52 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 956cbe8186c430c4c5a3821a8bfe96eedfe5f898 Author: Adam Dickmeiss Date: Wed Nov 23 21:32:41 2011 +0100 Remove Ubuntu karmic from build commit 3603a0303af734f5b4fa234472cc7a3edf043045 Author: Adam Dickmeiss Date: Wed Nov 23 16:08:33 2011 +0000 Version 4.2.21 commit 5650509910a3a243d42113305be7ef5412d2f95e Author: Adam Dickmeiss Date: Wed Nov 23 17:05:34 2011 +0100 cql_sortby_to_sortkeys - fix pr_n It was so broken I wonder how it ever would work. commit ce0b30b9bf7f8f30798724aa29a4d4dc83eaccfa Author: Adam Dickmeiss Date: Wed Nov 23 14:05:25 2011 +0100 test_ccl: add special qualifier tests Such as @truncation, @and, @or, @not. commit e7ee503f39a77a3b79d590feef34e0bd959ece0c Author: Adam Dickmeiss Date: Wed Nov 23 14:04:25 2011 +0100 ccl: honor @truncation again commit ad737e79a0f8d3e8e7a354aa596acae68ae0083e Author: Adam Dickmeiss Date: Fri Nov 18 13:09:04 2011 +0100 Diagnostic mapping: tweak 10, 108 mappings The bib-1 to SRU are kept in order again, and 10->108 reverse is in the reverse mapping. commit 5ba32ffaf5223a74bcbf95812d7002b4ef5aa4cf Author: Adam Dickmeiss Date: Fri Nov 18 12:54:28 2011 +0100 Change diagnostic code mapping for Bib-1: "Unsupported search" Bib-1: "Unsupported search" now maps to SRU diagnostic : "Query feature unsupported". commit 3f320e9bc56210d730081b2d82f2658636afa5ca Author: Adam Dickmeiss Date: Tue Nov 15 14:03:08 2011 +0100 Refactor icu_chain_create And ensure proper clean up if UCollator can not be created. commit 689388c889a644a40ca1f447cc862da009049836 Author: Adam Dickmeiss Date: Tue Nov 15 13:55:45 2011 +0100 Reformat, remove a few redundant type casts commit 6c5f1e84b0917856d2bb726ee34bd982c9b91aa1 Author: Adam Dickmeiss Date: Tue Nov 15 13:45:48 2011 +0100 Minor refactor of ICU casemap commit 739856a108a9c54cdf8d85aaa21dc65b2b4d1a70 Author: Adam Dickmeiss Date: Tue Nov 15 13:45:41 2011 +0100 Ignore test_options program commit 17f0838c01af294a5b400a613c42c943083c8e4f Author: Adam Dickmeiss Date: Mon Nov 14 16:29:20 2011 +0100 RPM: get version from IDMETA So we don't need to update the spec file for each release anymore. commit fdc95948ee7f905c54a977006ea3f3ae24a83648 Author: Adam Dickmeiss Date: Mon Nov 14 16:28:53 2011 +0100 IDMETA part of dist commit 6c6f50e4763f3985548d4cabafab1be1673faaae Author: Adam Dickmeiss Date: Mon Nov 14 16:10:48 2011 +0100 Read version from IDMETA rather than configure.ac. In other words, configure.ac gets its version from IDMETA. commit 443b3302ebc9b47e4ffc97e826de5076daea3af2 Author: Adam Dickmeiss Date: Thu Nov 10 12:47:54 2011 +0100 Update m4 commit 2ba14237fbb3983161a63f321cbfd137eb622648 Author: Adam Dickmeiss Date: Wed Nov 9 16:02:55 2011 +0100 Version 4.2.20, really commit 3c287bc1d48ee6a1f300054c2cebd0ba312bd5b9 Author: Adam Dickmeiss Date: Wed Nov 9 15:56:04 2011 +0100 New ZOOM connection setting: tproxy It's like proxy, but does not set Z39.50 proxy OID or change HTTP for proxy behavior. Can be used to set resolved address + port for a connection outside ZOOM itself. commit a5dd43fc9e75e2267b42e0effb446d0483ea92e3 Author: Adam Dickmeiss Date: Wed Nov 9 12:31:23 2011 +0100 Fix atoi_n_check digit test Thanks to Giannis Kosmas for spotting it. commit eaeb5111f809df907a53890b797c854ecacfdf21 Author: Adam Dickmeiss Date: Mon Nov 7 10:31:15 2011 +0100 Version 4.2.20 commit 8cab0e7a022a9c5ec35cf74ea6b77b9a652a17f9 Author: Adam Dickmeiss Date: Mon Nov 7 10:13:59 2011 +0100 Describe changes commit 38b682e3f8a2c985098aa98c1d8c72fda65cf3ed Author: Dennis Schafroth Date: Fri Nov 4 15:40:40 2011 +0100 Initializing suggestions. commit 7b52338c50b952d6ab2848339975335446936fcb Author: Mike Taylor Date: Wed Nov 2 12:30:07 2011 +0000 Describe recent changes. commit 3d43554048d6e68909638c65a3d55b945ec38555 Author: Mike Taylor Date: Wed Nov 2 12:29:54 2011 +0000 When ZOOM_set_dset_error() is passed an addinfo2 as well as addinfo, they are separated by a colon and a space rather than simply concatenated. commit 2c511722276f25a9e845dde8c2504bd3ca6d356a Author: Mike Taylor Date: Wed Nov 2 12:28:51 2011 +0000 Error handling for Z_APDU_close uses ZOOM_set_dset_error() to pass back-end's addinfo through into the ZOOM response addinfo. commit cc3abee6f861d0166bef5333b1fc72fbdc8bd94c Author: Adam Dickmeiss Date: Fri Oct 28 14:19:51 2011 +0200 Version 4.2.18 commit bb616f1670e9198b048298b049dd8cdb7370353f Author: Adam Dickmeiss Date: Fri Oct 28 14:19:01 2011 +0200 May use libreadline-dev Because libreadline5-dev is gone in Debian wheezy. commit 5f934b45f139e441bf26a4d28168df7ea6f9f841 Author: Adam Dickmeiss Date: Fri Oct 28 14:13:30 2011 +0200 Fix compilation wo libxml2 commit dbe23d34a8ab88558e1fb9e3cefa1eecae5b8ab0 Author: Dennis Schafroth Date: Fri Oct 28 14:06:04 2011 +0200 Info about Solr spell-checking/suggestions. New command suggestions to show result commit 86dd4bfde2e51c5389135a45d29a98032ca0ac69 Author: Dennis Schafroth Date: Fri Oct 28 13:57:07 2011 +0200 Fix: usage of wrong xml node. Fix string compare. Cosmetic: add newline after xml element misspelled commit 43a39e3fad856932e6f538bb05781d0430c58899 Author: Dennis Schafroth Date: Fri Oct 28 12:47:37 2011 +0200 Implement display of suggestions commit 82f61d1dd58f64119e33ed88d4ab7572b0ad1083 Author: Dennis Schafroth Date: Fri Oct 28 12:46:39 2011 +0200 Impl. display of suggestions commit 78db92d203c03c589beb89e039e07cdc0c53ccc2 Author: Dennis Schafroth Date: Fri Oct 28 10:45:24 2011 +0200 Init new suggestions pointer commit 8b5fac33ba89011ccec1d04955d90b8585874164 Author: Dennis Schafroth Date: Fri Oct 28 10:32:42 2011 +0200 Add setting of suggestions options on resultset commit 06ff64edbe47561d10357592c23dcd196b60f116 Author: Dennis Schafroth Date: Fri Oct 28 10:32:00 2011 +0200 Fix missing return type. Fix function name commit c18fa0350a008cd57973968334ccf8270026b2e0 Author: Dennis Schafroth Date: Thu Oct 27 16:53:17 2011 +0200 parsing of optional mispelled/suggestions commit df65074917a6504ab9f21b5d1897b006ec086007 Author: Dennis Schafroth Date: Thu Oct 27 16:49:43 2011 +0200 New suggestions result commit 8f09a31746ca9b1450cce6106b89f9cfbf53e88f Author: Adam Dickmeiss Date: Fri Oct 14 14:34:24 2011 +0200 facet display: avoid printing 0-string commit ffca367b18062164e077f24b2563f219e5c4ad02 Author: Adam Dickmeiss Date: Wed Sep 28 12:25:28 2011 +0200 Version 4.2.17 commit 2715f6522ca62ab5dbc886c21ed18945743216f0 Author: Adam Dickmeiss Date: Wed Sep 28 11:26:40 2011 +0200 Reformat commit 29b39371225c6c6eaa746d8805dd46d42b9b9668 Author: Adam Dickmeiss Date: Wed Sep 28 11:25:31 2011 +0200 Slightly different format in generated C code Avoid space between term and ( except for operators. commit 794c0656c852e13d5c9b2fdc046309d83caf6916 Author: Adam Dickmeiss Date: Wed Sep 28 10:41:35 2011 +0200 test nmem_strsplit_escape2 commit 07ebfd1140984b5a36427dd5b0f3cb6a4b48684e Author: Adam Dickmeiss Date: Tue Sep 27 16:09:46 2011 +0200 New utility: nmem_strsplit_escape2 commit adad3479963999a4085240a5cd2a6aa4d405e846 Author: Adam Dickmeiss Date: Thu Sep 22 14:49:38 2011 +0200 Version 4.2.16 commit 474209f883ef0abea418e5fe2e3e2451b2ff3a0e Author: Adam Dickmeiss Date: Thu Sep 22 14:43:22 2011 +0200 Another fix for nmem_strsplit_escape Double-escape was not encoded to escape. Test case in place. commit 1bef37cb158d2c33a7ddf138ff299e4f96a084ae Author: Adam Dickmeiss Date: Thu Sep 22 14:30:10 2011 +0200 Fix nmem_strsplit_escape subsitutes escape char away commit 834902a1b9db396bd9aae10fe0ae725535afecfe Author: Adam Dickmeiss Date: Wed Sep 21 14:34:28 2011 +0200 YAZ options: special -- ends options Add test of YAZ options commit 5ce89138d84a5edc6d9b8e6d8128367b9b9b3e31 Author: Adam Dickmeiss Date: Wed Sep 21 14:12:26 2011 +0200 zoomsh: option -e for getting zoomsh to set EXIT code depending on success/failure. commit ab75b3bd5dffe9425dfcfd36e76a60e8496bdd5d Author: Adam Dickmeiss Date: Wed Sep 21 13:28:15 2011 +0200 Refactor zoomsh to use YAZ options commit 8fba4cf2cac1cc543aa4c1063c78b449ebac44a7 Author: Adam Dickmeiss Date: Tue Sep 20 13:13:14 2011 +0200 CCL: fix syntax error commit 3b5a46489f85d20012cff59320d7a43b16a43c99 Author: Adam Dickmeiss Date: Tue Sep 20 12:23:35 2011 +0200 CCL test: check for white-space preserve commit 22c55c8cd417ff79ed5a83fa00556db102fc1685 Author: Adam Dickmeiss Date: Tue Sep 20 12:23:24 2011 +0200 CCL: use strxcat rather than strlen+memcpy commit f77061f0ad18ff3a037a10ca4fcb0954e0848fa3 Author: Adam Dickmeiss Date: Tue Sep 20 11:21:19 2011 +0200 Reformat commit 176297882639f5e3318ffa4dcc515f081a6e08f4 Author: Adam Dickmeiss Date: Tue Sep 20 11:19:42 2011 +0200 CCL test: check for terms more special chars commit fcfd9a074ff29ffdd52e5eb0ee348fb74f0a0d17 Author: Adam Dickmeiss Date: Tue Sep 20 11:13:52 2011 +0200 CQL/CCL to RPN. Checks for leading @ Special case, since @ precedes PQF operators. commit 17a23431f99a678761992a2b7ad5cf6a0a2ff60c Author: Adam Dickmeiss Date: Fri Sep 16 10:59:23 2011 +0200 Version 4.2.15 commit 5d7f0c6837c49cc360d11bbab767634bf9ec1374 Author: Adam Dickmeiss Date: Fri Sep 16 10:58:09 2011 +0200 Comments on return values commit 141b1995386bd21dbbc05e6cba481aa0e57537d7 Merge: ba13392e 828e4c72 Author: Adam Dickmeiss Date: Thu Sep 8 08:46:01 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit ba13392e39d4e60db21b7017babbefacd8da8e0f Author: Adam Dickmeiss Date: Thu Sep 8 08:43:31 2011 +0200 yaz_filepath_resolve: path search for abs fname If fname is absolute, the path is not searched. commit 828e4c72181fb748b1f12072351f4cd3e5be4dd5 Author: Mike Taylor Date: Wed Sep 7 17:46:01 2011 +0100 Fix conv_xslt() error-reporting when stylesheet is not found. (The value of fullpath is meaningless in this situation.) commit 151897160304fd7e59a3109ad310ab31950c6c44 Author: Adam Dickmeiss Date: Wed Sep 7 12:22:03 2011 +0200 Version 4.2.14 commit f59fb84215267865b80710429592d7295f9d436d Author: Adam Dickmeiss Date: Wed Sep 7 11:00:02 2011 +0200 CQL node: un-init memory commit ff4dc282083d2c1920329cd6e7406a10669494dd Author: Adam Dickmeiss Date: Tue Sep 6 20:54:04 2011 +0200 New function yaz_srw_sortkeys_to_sort_spec commit 77aaeaf4801a896d3eaa93b8d76a81be82d95bad Author: Adam Dickmeiss Date: Tue Sep 6 16:26:59 2011 +0200 SRU 1.1 sorting for ZOOM_query_sortby2 commit 57cae124c6a1c7cdd8c70090db636b227887fc19 Author: Adam Dickmeiss Date: Tue Sep 6 13:14:44 2011 +0200 New ZOOM utility ZOOM_query_sortby2 That takes a strategy parameter: one of "z3950", "type7", "cql", "sru11" or "embed". The "embed" chooses type-7 or CQL sortby depending on whether Type-1 or CQL is actually sent to the target. "sru11" not implemented yet. commit 9b2f4955aee1fcee3702bcd832dbaf7fca7243ad Author: Adam Dickmeiss Date: Tue Sep 6 13:11:30 2011 +0200 New functions yaz_sort_spec_to_{cql,type7} These two new functions convert a Z39.50 SortKeySpecList to CQL SORTBY and Type-1/RPN with type-7 sorting. Tests in test_sortspec.c. commit c4aebcfe8750bd421de0c06820fdddb4e4443a11 Author: Adam Dickmeiss Date: Mon Sep 5 10:34:14 2011 +0200 rpn2solr supports Z39.58 truncation (104) Thus, CCL truncation mode t=z will make it possible to use both single-character mask (#) and wildcard (?) in CCL . Throw diagnostic for left truncation because that is not supported by SOLR. commit 11b233f8da71f0017d5625772a714ba50a026ae6 Author: Adam Dickmeiss Date: Thu Sep 1 15:01:12 2011 +0200 Version 4.2.13 commit 72ac2c02c91e8cdadbe18ac50cd0fd6d57a51437 Author: Adam Dickmeiss Date: Thu Sep 1 14:59:40 2011 +0200 Notes on changes commit 147ae312f9a9ea0e8d74517812eab22fdb87946f Author: Adam Dickmeiss Date: Thu Sep 1 14:47:46 2011 +0200 Update m4 for improved ICU check fixes commit 3423bbadcfd00b7965e7b4728adc4bc274e5bae4 Author: Adam Dickmeiss Date: Thu Sep 1 14:46:58 2011 +0200 yaz-client: allow scanpos of "none" For special value scanpos "none", yaz-client omits preferred position in response for scan. commit 135a70856fc99547451ea919da242e7e7382acea Author: Adam Dickmeiss Date: Tue Aug 30 12:26:29 2011 +0200 cql2pqf: refactor truncation handling and fix Z39.58 mode Refactor the CQL to PQF term code in cqltransform.c. Characters that don't need escaping aren't and characters that do need escaping are. For example CQL query a#a? must be handled as a Z39.58 mode query because the trailing ? (single-character mask in CQL). But since the generated term includes #, it must be escaped and survive the PQF parse, thus the result is "\\#a#" (was "a#a# before). Also the CQL term a*3 now produces "a?\\3" rather than "a?3" . This is becauase a?n has special meaning in Z39.58. Characters that do need escaping are the PQF specials " and \\. Rest are preseved and \-sequence in CQL are otherwise removed. commit c508282c3e52e145f998d0bb85c0ea6b36fe956c Author: Adam Dickmeiss Date: Mon Aug 29 15:57:05 2011 +0200 CQL/CCL/PQF conversion fixes. CCL support for Z39.58 trunc Lots of fixes for the conversions from CQL to CCL; CCL to RPN; RPN to CQL. yaz_encode_pqf_term's term parameter properly escaped into PQF term. CCL truncation configuration t=z enables Z39.58 truncation which is in fact CCL truncation, but there's more to it than one might think anyway. The RPN to CCL conversion handles Z39.58 truncation as well (5=104). commit 454ce0647544a588751b4a0fe536253a84867362 Author: Adam Dickmeiss Date: Mon Aug 29 13:04:57 2011 +0200 cql2ccl: term code for all/any sequences as well commit f7a3b7f177753fbe82a172efc1b61d59141991ae Author: Adam Dickmeiss Date: Mon Aug 29 12:33:30 2011 +0200 cql2ccl: fix handling of \\ commit e47569dbfbafa2ff798e0fe3ad5a32f26f3fc972 Author: Adam Dickmeiss Date: Mon Aug 29 12:24:08 2011 +0200 Add test of cql_to_ccl commit 23d1547f65851be2000c717bbddf32b380e2900e Author: Adam Dickmeiss Date: Mon Aug 29 12:21:59 2011 +0200 Trunc 104 is Z39.58 commit fda1ca39e89e4c7f3479c0a9d2a1e38acfdb46bb Author: Adam Dickmeiss Date: Mon Aug 29 12:06:18 2011 +0200 cql2ccl: handle CQL \-sequences differently For most CQL \-sequences do not produce \-sequence in resulting CCL term. Only \" and \\ are special commit bfb2ef5f27f900c15c13a239081ad9fa217e91ec Author: Adam Dickmeiss Date: Mon Aug 29 10:29:22 2011 +0200 bin-1 ref: mention Index Data's extensions commit 26e1223d0b98f56cf288fb8fdf1acaa15047db2b Author: Adam Dickmeiss Date: Sun Aug 28 00:09:45 2011 +0200 ccl2rpn: more characters to escape (regexp-1). commit ed6736a60464a131d0edb37467c15cf010bc588f Author: Adam Dickmeiss Date: Sun Aug 28 00:09:38 2011 +0200 rpn2cql: handle \\ sequence commit cf4a74a0d6b17bf1c6582835a7fceaec7ad4115d Author: Adam Dickmeiss Date: Sun Aug 28 00:07:48 2011 +0200 PQF parsing: handle \\\0 sequence A truncated PQF term, backslash as last character, would resolve in read one byte beyond end of string. commit c47f8dac157aaadeb46841c6537c3dc2a0164403 Author: Adam Dickmeiss Date: Sat Aug 27 16:03:18 2011 +0200 Version 4.2.12 commit 295502cfb885ae2dde3523d76bd691f01de3477c Author: Adam Dickmeiss Date: Sat Aug 27 15:38:59 2011 +0200 cql2ccl: quote term characters, except operators Fixes #4584. commit fa1a9e8e89873bad70a3707d95262e6e6c2ec457 Author: Adam Dickmeiss Date: Thu Aug 25 14:40:02 2011 +0200 Version 4.2.11 commit e902d25ca34c8498c6ccff8c9278ec0513d7c1b9 Author: Adam Dickmeiss Date: Thu Aug 25 14:36:14 2011 +0200 Changes commit 835fe1fa5d34428ba2803cd4a2b1a9b9aec48ab0 Author: Adam Dickmeiss Date: Thu Aug 25 14:06:40 2011 +0200 ccl2rpn: Conversion to regexp-1 terms (trunc=102). For mode t=x, the CCL parser will map both # and ? to their regular expression equivalents (. and .*). commit e1f778342e0563a5cf8e5ca34d5be264afa1340e Author: Adam Dickmeiss Date: Thu Aug 25 14:05:41 2011 +0200 rpn2cql: deal with truncation=102 (regexp-1) And ensure proper quoting of reserved CQL characters. commit 2bbab1599d7da506eca84f47ff4d70b2829a45b6 Author: Adam Dickmeiss Date: Thu Aug 25 13:56:20 2011 +0200 cql2ccl: deal with both * and ? in conversion Also leave escaped ones as is, so that they are pass-through. commit d22199db5fdac737990cebcd0f7c77232fcf5d0c Author: Adam Dickmeiss Date: Wed Aug 24 21:45:53 2011 +0200 CCL: retain ? for CCL terms commit 6cf204a1f25e251bc6de07f4254125b174a14c3a Author: Adam Dickmeiss Date: Wed Aug 24 17:58:07 2011 +0000 Version 4.2.10 commit 84831e1cdf373b303ac548002ae944f0ae0cc1d5 Merge: 1dfd68df 5fddafa9 Author: Mike Taylor Date: Wed Aug 24 15:03:17 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1dfd68dfcf6792062a242e78f7f93ebce3fa50d3 Author: Mike Taylor Date: Wed Aug 24 15:02:59 2011 +0100 Describe recent changes. commit ea883a980a6b7c787a7f68d3e270d94630048666 Author: Mike Taylor Date: Wed Aug 24 15:01:06 2011 +0100 rpn2cql_structure() supports proximity nodes (except that the Type-1 proximity node's "exclusion" binary is ignored, as there is no way to express that in CQL). Fixes bug #4564. commit f0b41a3b124a6305b14ae188361f11e0db9b3eb3 Author: Mike Taylor Date: Wed Aug 24 14:59:50 2011 +0100 Ignore generated script yaz-url commit 68a59422720c8dd69b2f070dc562fe56b4ec0b49 Author: Mike Taylor Date: Wed Aug 24 14:49:47 2011 +0100 Public declaration for yaz_prox_unit_name() commit 5fddafa991a00d90f1f9691458e026464b0fb213 Author: Adam Dickmeiss Date: Wed Aug 24 15:35:00 2011 +0200 ZOOM: HTTP prepare for reconnect if server don't say so In case the server HTTP/1.1 says Keep-Alive, we set the reconnect_ok to 1, if it closes anyway. Fixes #4555. commit 8532ec227a5c21c4a5d63bf81a40ddf47fef9d5d Author: Mike Taylor Date: Wed Aug 24 14:34:51 2011 +0100 static prox_unit_name() renamed to yaz_prox_unit_name(), made external. commit 85e483aa6245bb163485b57f1f77719dc1cf24b8 Author: Adam Dickmeiss Date: Wed Aug 24 15:14:56 2011 +0200 GFS: mention -K in usage commit a9a9b042053d185970dbb47c807305e2661ab35a Author: Mike Taylor Date: Wed Aug 24 12:44:53 2011 +0100 Lint-clean: void out an unused return value. commit ed907bd829d0a9e00cfd1b0f3cf0d41dc68563c6 Author: Adam Dickmeiss Date: Tue Aug 23 18:27:41 2011 +0200 zoomtst3: setting option step=5 This is to illustrate the step option and to check that it actually works. commit fc99a84b59f1b806f51eb5e4db0cdf44371048a4 Author: Adam Dickmeiss Date: Thu Aug 18 10:28:51 2011 +0200 Version 4.2.9 commit 4b92edda23ae263000414a98e037c5b9c226dd5f Author: Adam Dickmeiss Date: Wed Aug 17 15:50:11 2011 +0200 zoomsh: fix SEGV for set command wo value commit 86bfbf5acd6fd03bc1d483cdd6cc1f8ba30da6c4 Merge: d1f18e92 efb6e9da Author: Adam Dickmeiss Date: Tue Aug 16 10:30:10 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit d1f18e923658fe9817fbda7b510ae40e9be69e7f Author: Adam Dickmeiss Date: Tue Aug 16 10:27:20 2011 +0200 Check for invalid COMSTACK addresses Check return value of cs_parse_host in cs_create_host_proxy. For example, yaz-url would SEGV if ssl/https was given and SSL was not enabled in the built (as it happens on Windows). commit efb6e9da30907327939837a4d4e6374048d986e3 Author: Adam Dickmeiss Date: Fri Aug 12 09:57:14 2011 +0200 nmake: build yaz_url commit db40cd121fcb1e7a2d25a350ce683cbe8b4687b6 Author: Adam Dickmeiss Date: Thu Aug 11 12:56:06 2011 +0200 Version 2.4.8 commit 4c2a1989cfcdeba0338fce5fe9152a37837ef28a Author: Adam Dickmeiss Date: Thu Aug 11 11:23:54 2011 +0200 yaz-url + man page installed and part of packages commit bbb858cba04873a77ae3d55f759c4226cbd61eec Author: Adam Dickmeiss Date: Thu Aug 11 10:45:16 2011 +0200 Update other version of tcpip_straddr for https too commit bef3628f699c3d747292bd6c87a733818e618e6c Author: Adam Dickmeiss Date: Thu Aug 11 10:43:06 2011 +0200 yaz-url: Opt -O writes output to file instead of stdout commit 58391187e99197eed163baa468c0b979c7b942b7 Author: Adam Dickmeiss Date: Thu Aug 11 10:42:11 2011 +0200 tcpip_straddr: Use port 443 for https commit 12024d4ca595416375e534b44f2465543f1c0fa3 Author: Adam Dickmeiss Date: Thu Aug 11 10:33:38 2011 +0200 GFS: close connection immediately if EOF is received. Previously the assocation was marked DEAD and that could lead to a few seconds hang on SSL connections. commit ec603701ef51f85beef83898aa36e385028692f1 Author: Adam Dickmeiss Date: Thu Aug 11 10:31:25 2011 +0200 SSL: Handle EOF case in ssl_get If gnutls was in use and gnutls_record_recv returned 0 (EOF) the ssl_get function would never terminate. commit 15aeea31b59ead99109571dcf67a5f3b78fd5585 Author: Adam Dickmeiss Date: Thu Aug 11 10:26:48 2011 +0200 sockets: fix for whether poll is available The select(2) wrapper was in use even though poll(2) was available. commit e413e4b687759bbb7410e6153a3557a16c7e07f0 Author: Adam Dickmeiss Date: Thu Aug 11 08:33:50 2011 +0200 yaz-url: HTTP method may be given. Change header (-H) option. Argument for -H is now name:value rather than name=value - it just seems more natural for Web hackers that way. commit 2e45e866cd91bf96707fdc0a278e8481773c4c86 Author: Adam Dickmeiss Date: Thu Aug 11 08:21:08 2011 +0200 yaz-url: display usage if no ULRs are given commit 8cd8912e4ff99fd53ff78a028f7d84418e494b0d Author: Adam Dickmeiss Date: Wed Aug 10 15:03:53 2011 +0200 New utility yaz_url: fetches HTTP content This is a simple wrapper around COMSTACK and HTTP utilities; deals with proxy'ing. commit 4487d4c1bac624b4d02f99ad0f1239e405bed425 Author: Adam Dickmeiss Date: Wed Aug 10 11:23:19 2011 +0200 zoomsh: fix set command to use remaning args for value Before, only one token was taken as value for set (or one would have to quote if a token contained space). commit 2a890281a1ded6f53a1a6cbaaceea24e1b8f43e0 Author: Adam Dickmeiss Date: Wed Aug 10 11:22:56 2011 +0200 yaz_pqf_parse_facet_list returns FAIL (0) for bad facet spec commit 65fc6d0e2ca1ebe2d5a949f382a70b93f02ba88f Merge: 73662ac1 cfb1b8ff Author: Adam Dickmeiss Date: Tue Aug 9 18:42:49 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 73662ac185d4f1151c0b99cde88aecd4c26fc097 Author: Adam Dickmeiss Date: Tue Aug 9 18:41:27 2011 +0200 yaz_pqf_parser_facet_list also reads term list Thus yaz_pqf_parser_facet_list might also be used to create a facet response. commit cfb1b8ff4632b51bec4e5eab18137081efdfb02d Author: Adam Dickmeiss Date: Fri Aug 5 16:24:08 2011 +0200 New utility: nmem_strsplit_escape commit dcf6101fd8cf823c366b0703243381e8a0e11d75 Author: Adam Dickmeiss Date: Fri Aug 5 14:55:32 2011 +0200 Testin wrbuf_insert commit 027d8648a24b0b61b31a5f1752b29520791fd2fd Author: Adam Dickmeiss Date: Fri Aug 5 14:35:20 2011 +0200 New WRBUF utility: wrbuf_insert commit 3bd3293043f3c2ef02dc448cd707045376085ef6 Author: Adam Dickmeiss Date: Thu Aug 4 14:14:22 2011 +0200 Remove unused code commit d78eafbc5889e1f4602116cf6627b1f0dc1da100 Author: Adam Dickmeiss Date: Thu Aug 4 13:32:15 2011 +0200 Base64 utilities public commit 59aa88eb085c71e191802510804588a4f9edbe9b Author: Adam Dickmeiss Date: Thu Aug 4 13:00:25 2011 +0200 Remove variables and assignments with no effect As warned by newer GCC. commit 37fbd309fef590f0cc0e3bc955161bcb8e37e99e Author: Adam Dickmeiss Date: Thu Aug 4 13:00:02 2011 +0200 zoomsh: remove unused code for cmd facets commit 7ac6428937b4b235b59446ea7ca3f13a0378ed5c Author: Adam Dickmeiss Date: Thu Aug 4 12:59:22 2011 +0200 void mixed stmt/var declare commit e097399fc00cac905e6267bd2a1cfd2c23665e60 Author: Adam Dickmeiss Date: Thu Aug 4 12:58:40 2011 +0200 client: proper recid passing commit 29846d8b70756fceab1c76a524e172f68ad23cbe Author: Adam Dickmeiss Date: Wed Aug 3 13:39:47 2011 +0200 Version 4.2.7 commit 4aaca71aaade2a94eab1806a11967d672e7c90dd Author: Adam Dickmeiss Date: Wed Aug 3 11:40:33 2011 +0200 ZOOM: addinfo includes HTTP content when SRU decode fails When ZOOM C sees an SRU responst that it cannot decode it returns "meta" diagnostic ZOOM_ERROR_DECODE/10003 . The additional info now contains the HTTP content. commit 108a41cd16f10f21aad2bcdb74525ec4d5c94b34 Author: Adam Dickmeiss Date: Tue Aug 2 14:14:29 2011 +0200 Make json_write_wrbuf available commit 4540ab99193bc04001545865d0a71ea8d3bf3cd0 Merge: 5b25820d 23886f92 Author: Adam Dickmeiss Date: Fri Jul 29 17:59:48 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 23886f924273c18724a87b3c21a1c3f58f194d75 Author: Adam Dickmeiss Date: Thu Jul 28 14:18:54 2011 +0200 Version 4.2.6 commit 89a547847448c1288ce39a0d5af1a1f18378e979 Author: Adam Dickmeiss Date: Thu Jul 28 14:18:46 2011 +0200 Add YAZ_EXPORT for wrbuf_vp_puts commit ec96e7e16229e96777b3fa24ba12972e71c84915 Author: Adam Dickmeiss Date: Thu Jul 28 11:32:13 2011 +0200 ZOOM: throw diagnostic for invalid sru value commit 893f68144651cf991409de76198f98610b0567a0 Author: Adam Dickmeiss Date: Wed Jul 27 16:20:06 2011 +0200 rpn2cql: check for proper truncation attributes commit ef37da81cb79e50520faa5a2274423359353075a Author: Adam Dickmeiss Date: Wed Jul 27 15:41:41 2011 +0200 Reformat commit cfe5f99ac4ab3fda679a35e5d9591495a5879a05 Author: Adam Dickmeiss Date: Wed Jul 27 15:07:05 2011 +0200 cql2xcql: option -s deals with CQL sortkeys commit 38d2e7b4d30b060d3b6dc85e0e3f57c4930c6313 Author: Adam Dickmeiss Date: Wed Jul 27 15:06:35 2011 +0200 Adding new utility wrbuf_vp_puts commit fcdccb3e9a757d41e1bdf6c18c2b3bdb2314ca3f Author: Adam Dickmeiss Date: Wed Jul 27 15:04:31 2011 +0200 Header updates commit 896b145fa7a02199bfc3e8aa824c018b9d7cbf98 Author: Adam Dickmeiss Date: Tue Jul 26 09:38:07 2011 +0200 Remove assignment to variables not in use. Fixes warnings produced by GCC 4.6.1. commit 5b25820db8435aeb54205c4ef6c9155407fb3acc Merge: cf813a4e d951267d Author: Adam Dickmeiss Date: Mon Jul 25 21:05:00 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit d951267dfd65b4b0741d9b9621474f2731ea3b45 Author: Adam Dickmeiss Date: Mon Jul 25 13:50:34 2011 +0200 Add cclxmlconfig.obj commit cf6bf2f04ed7e376bfd9a37f7ef4ab0366f46804 Author: Adam Dickmeiss Date: Mon Jul 25 12:55:02 2011 +0200 yaz_is_abspath: drive letter test NOT using isalpha isalpha is problematic for signed chars and we assume drive letters are [a-zA-Z] only; also isalpha depends locale. commit 17144b85fb59bb8e0bdf1f8f634c339d88baf069 Author: Adam Dickmeiss Date: Mon Jul 25 12:52:48 2011 +0200 Reformat commit 9dba177f0fcfff591da208b07428ae3d45666084 Author: Adam Dickmeiss Date: Mon Jul 25 12:44:03 2011 +0200 Change yaz_filepath_resolve for path="" (empty) Applying empty path is equivalent to not passing a path at all or passing just the path ".". commit cf813a4e4ab337aeb540e75fd6373c27d6f8cadd Merge: 4a7e5fa7 796a205f Author: Adam Dickmeiss Date: Fri Jul 22 12:53:35 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 796a205f03250e4ed1eb4986f3e7a0feb36dd2bb Author: Adam Dickmeiss Date: Thu Jul 21 10:16:21 2011 +0200 Version 4.2.5 commit f9ee3b9ec26306b6397c37434e8066f084d33b3a Author: Adam Dickmeiss Date: Wed Jul 20 14:16:35 2011 +0200 ZOOM HTTP: refactor and simplify redirect/proxy code commit aaddb3668a93e2048e2237463a375ec3f48b68bb Author: Adam Dickmeiss Date: Wed Jul 20 11:02:13 2011 +0200 ZOOM C: fix un-init var for cookie buffer commit 1220d32af6f85baf5057172291be5dc882f6e777 Author: Adam Dickmeiss Date: Tue Jul 19 16:04:39 2011 +0200 ZOOM HTTP: proxy uses full URI in HTTP header Squid don't seem to like GET /?operation.. HTTP/1.1 but rather GET http://host/?operation HTTP/1.1 When HTTP proxy is in effect. When proxying the new function cs_create_host_proxy is used to so comstack type is determined from logical URL rather than proxy host. Proxy just needs host:port type of spec. Note: this change might break HTTP redirect. commit 05ee6a02d78ff422ddb63bb4ebbc2f5988d9a121 Author: Adam Dickmeiss Date: Tue Jul 19 16:03:32 2011 +0200 Add cs_create_host_proxy This is similar to cs_create_host but allows a proxy to be given. Comstack type is still taken from vhost (logical host). commit dd339eebb35a0068c15962d9a6872a95b79755f7 Author: Adam Dickmeiss Date: Tue Jul 19 14:13:24 2011 +0200 MARC line decoding: be less picky about length given Still, the MARC record must have 5 leading digits so we can distinguish this from header and other lines. commit a01e8d12dab3fbde9c494338f15f8177e04e98a1 Author: Adam Dickmeiss Date: Tue Jul 19 13:02:29 2011 +0200 cql_to_ccl deals with proximity , bug #4407 The CQL proximity modifiers are supported: unordered (CCL %), ordered (CCL !), distance with relation <= and < , unit with value word. Anything but those throws an error. commit d00ba88308804905d281209e6d90de0d9f12c959 Author: Adam Dickmeiss Date: Tue Jul 19 11:12:05 2011 +0200 Reformat commit 98a78d8028fa4835369006de527353d7e33f1ef9 Author: Adam Dickmeiss Date: Tue Jul 19 11:06:00 2011 +0200 Fix up SRU recordData with pseudo root This is to make recordData XML parseable (document) in case it is an XML fragment. The inserted root is . Fixes #4453. commit 301bd3892284e83875d90bd7a65f48366c81213d Author: Adam Dickmeiss Date: Mon Jul 18 13:27:59 2011 +0200 Spell fix commit 4a7e5fa76ce41e82c7e028aea763bcf63cd0237b Merge: 3b048412 38d3fafb Author: Adam Dickmeiss Date: Fri Jul 15 21:14:41 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 38d3fafb8baf5f2d0a3acfcb5a72f5994e75d4a4 Author: Dennis Schafroth Date: Fri Jul 15 15:48:29 2011 +0200 Create constant for SRW max parameters commit 12ab7a040623d875c3e324e6a1df20652087b551 Author: Dennis Schafroth Date: Fri Jul 15 15:47:55 2011 +0200 Encode special characters in term commit 7d2cc7589c630c539f114b24eaff53a98b696005 Author: Dennis Schafroth Date: Fri Jul 15 15:47:03 2011 +0200 Add support for extra parameters commit 7b2533f27f7bec5518fd73cf3b04c1f18d66e287 Author: Dennis Schafroth Date: Mon Jul 11 13:37:57 2011 +0200 Spell fix in comment commit f1354830c806b65e6ec6dfdc66dba451715608fc Author: Dennis Schafroth Date: Mon Jul 11 13:36:38 2011 +0200 Escaping : commit 3b048412a86f31a520c83d8604569c88ec9cbbf6 Author: Adam Dickmeiss Date: Sat Jul 9 18:10:02 2011 +0200 Reformat commit 11ef4db1458a878796cf3600bb67a2e140584227 Author: Adam Dickmeiss Date: Sat Jul 9 18:08:54 2011 +0200 Fix spelling of YAZ_OPTIONS_H commit 2e1d346b82bb60f3286e2fdd3a9a3eb6ff75cdf4 Merge: 443e78f2 fc9ad742 Author: Mike Taylor Date: Tue Jul 5 23:51:06 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 443e78f2e7d7894a1a9cb3cac79e4b1a84ec7a11 Author: Mike Taylor Date: Tue Jul 5 23:42:31 2011 +0100 The static function bool(), which is part of cql_to_ccl_r(), now makes some attempt to recognise and deal with proximity. Right now, all it does it recognise the CQL operator name "prox" and map it to the CCL operator "!" rather than the unrecognised plain word "prox" -- this suffices to get SOME indication of proximity into the resulting CCL, which is a big step forward for bug #4407. We ought to check for a an /ordered=0 relation modifier and emit "%" instead in that case. commit fc9ad7425061fafd9340229aa006c4db115deee7 Author: Adam Dickmeiss Date: Tue Jul 5 23:49:51 2011 +0200 GFS: properly initialise scan stepSixze commit 05ce3a6e0133e8d3279c193f9be066198cf0b8b6 Author: Adam Dickmeiss Date: Wed Jun 29 16:47:33 2011 +0200 Debian control: split long lines commit 281911a2d5a2599b56158e90779cad02c5aaf496 Author: Adam Dickmeiss Date: Tue Jun 21 15:10:11 2011 +0200 Version 4.2.4 commit 0f9a136e988a7f9813a9a6c8f6e014c4e2653e30 Author: Adam Dickmeiss Date: Tue Jun 21 12:39:12 2011 +0200 Fix uninit-memory for sru/solr databaseRecord commit 1fe0314280248c8f6d91deaaee26568369774831 Author: Adam Dickmeiss Date: Tue Jun 21 12:38:27 2011 +0200 Another fix for ccl_qual_dup commit 1a2bd22f51e34404b8bc130a3314ad8e99e2e2d7 Author: Adam Dickmeiss Date: Mon Jun 20 11:34:03 2011 +0200 cql2cql: convert mask char '*'=>'?' commit 3775cbf69e7cfefce240f69fc43e148d0a64fa60 Author: Adam Dickmeiss Date: Fri Jun 17 12:48:34 2011 +0200 Version 4.2.3 commit 4e0757c4ea6d3081ccdd5420d8a80926c858c960 Author: Adam Dickmeiss Date: Fri Jun 17 12:15:55 2011 +0200 ccl_qual_dup fixes; previous version totally broken commit 1f3fef356c699a9d7c68902cd6d3e33b08c3cc4e Author: Adam Dickmeiss Date: Fri Jun 17 11:08:27 2011 +0200 CCL: new utility ccl_qual_dup Function ccl_qual_dup makes a copy of a CCL_bibset. commit 989d5bac118f61e95638cf994b168ef29822443f Author: Adam Dickmeiss Date: Fri Jun 10 14:36:21 2011 +0200 Version 4.2.2 commit aed766ddea6fe0f47304816ed5d16983b4079125 Author: Adam Dickmeiss Date: Fri Jun 10 14:33:08 2011 +0200 Update for new source ccl2ccl commit 211fa151f2239cfecd08a212e00be8d27f7a35a7 Author: Adam Dickmeiss Date: Fri Jun 10 14:30:32 2011 +0200 Fix return values for cql_to_ccl_buf commit 02d2f2409c58ab49ab535758d85d70fae0f651f4 Author: Adam Dickmeiss Date: Fri Jun 10 14:01:26 2011 +0200 Add cql_to_ccl_buf commit fccc0e1dbb7cc7937abb742071d55ab36df96aaa Author: Adam Dickmeiss Date: Fri Jun 10 13:41:43 2011 +0200 cql2xcql: option -c makes conversion to CCL. By default cql2xcql converts to XCQL (XML). commit 2cf1b669768e41118f6937dd0afab37c8ed586a8 Author: Adam Dickmeiss Date: Fri Jun 10 13:40:39 2011 +0200 Add cql_to_ccl and cql_to_ccl_stdio. These utilities makes a rough conversion from CQL parse tree (cql_node) to a CCL string. commit c3cbd042e2c98206d2976806d14075f5f57e1617 Author: Adam Dickmeiss Date: Fri Jun 10 11:06:31 2011 +0200 Ignore test programs commit 4493d0acd68f0d3f1b0f1b6c79e3934bfa3207ed Author: Adam Dickmeiss Date: Thu Jun 9 15:25:17 2011 +0200 Work around a bug in ucol_getSortKey The problem seen is that ucol_getSortkey writes one byte at the capacity position. This in turn, results in malloc heap corruption. commit 9a23e52dbba0f2f6d7ab85361e3c53ac9f222446 Author: Adam Dickmeiss Date: Tue Jun 7 09:40:56 2011 +0200 Version 4.2.1 commit 6275cc5093f8226cbfab6906fcbd4f5c11f1c70c Author: Adam Dickmeiss Date: Mon May 30 11:22:56 2011 +0200 No need for ExternalToolBuilder commit a374152c4737fd8716a3f56052fce7c7680a4e9f Author: Adam Dickmeiss Date: Mon May 30 11:15:12 2011 +0200 Eclispse CDT: Use external Makefile Use External Builder and Makefile as produced by configure. commit 8c46ec68792635e698d8f6e83de83b9da37eebed Author: Adam Dickmeiss Date: Fri May 27 12:50:07 2011 +0200 test_xml_include: no test wo Libxml2 commit 47c02bcca227aca4fe6b17916a2c734a3e8421ce Author: Adam Dickmeiss Date: Fri May 27 12:47:25 2011 +0200 Reformat commit 0b09ad5de6d4790b75d8ac2aabc59b36e55834ab Author: Adam Dickmeiss Date: Fri May 27 12:27:47 2011 +0200 Fix compilation without Libxml2 (broke in 4.2.0) commit db073edc9e7834e7f71f1fa9f76866aeb29e0421 Author: Adam Dickmeiss Date: Tue May 24 12:34:52 2011 +0200 yaz-client: no extra blanks for searchResult-1 display This partly reverts 3c0e13a1. Facets as still indented. commit 74dc4c62bbdf03c3f7eb22f08836f11acd468449 Author: Adam Dickmeiss Date: Mon May 23 22:47:03 2011 +0200 Remove redundant comment commit a0e777e0003305532d60edce436ae8f4cc360453 Author: Adam Dickmeiss Date: Wed May 18 11:59:04 2011 +0000 Version 4.2.0 commit a14df7391f90790b0db8e4e286e7252e06bf8c38 Author: Adam Dickmeiss Date: Wed May 18 12:23:18 2011 +0200 Simplify facet parse commit b6b28dc63b69535fdab4e3d25b8ef30b6022f75e Author: Adam Dickmeiss Date: Wed May 18 10:51:23 2011 +0200 Reformat commit 665fb4d99b4cd1cf7cbd47f9bf289559e8a545cc Author: Adam Dickmeiss Date: Wed May 18 10:44:57 2011 +0200 Rename define FACET_DElIMITER->FACET_DELIMITER commit 3236c79e8d4287738236a804fe887ce4094fc9e9 Author: Adam Dickmeiss Date: Wed May 18 10:43:21 2011 +0200 yaz-client: reformat commit df19fd9743e7aa080e4b228572b0a116dbf76b7a Author: Adam Dickmeiss Date: Wed May 18 10:40:29 2011 +0200 yaz-client: remove unused define commit 77eb8faa2fa82a314874df3243cac0ca153adccf Author: Adam Dickmeiss Date: Wed May 18 10:39:14 2011 +0200 yaz-client: rework facet command; fix leak commit 8121243279bcd990bbbca2b80715467472003565 Author: Adam Dickmeiss Date: Tue May 17 15:22:15 2011 +0200 yaz-ztest: 10 facet entries by default commit b41a475db81d89458d4267b27e98f302c4519316 Author: Adam Dickmeiss Date: Tue May 17 12:25:28 2011 +0200 Add yaz_utf8_check A function that checks whether a string appears to be UTF-8 encoded. commit 847dc126960b1bcc6ce8cef8a73e3606588770af Author: Adam Dickmeiss Date: Mon May 16 15:54:00 2011 +0200 SOLR + facets: use Odr_int for counts For hit counts/occurrences Odr_int is used - not int, that usually has a limit of 2^31-1. Use also facet_term_create_cstr for creating Z_FacetTerms to use Odr_int and avoid Z_Term intermediate(s). commit 66dd1c1a5916fa62a186ba7d95804aa5a3fe6ca2 Author: Adam Dickmeiss Date: Mon May 16 15:53:10 2011 +0200 Add z_Term_create for creating Z_Term things commit 27ce41db1ab7b1a386d1a37dda90d4e143a2fc2c Author: Adam Dickmeiss Date: Mon May 16 13:38:20 2011 +0200 yaz-icu: fix compilation without ICU (disabled) Move declaration inside YAZ_HAVE_ICU section. commit 0dedb61924122466aeaba3557c3dc81a8f6ede4d Author: Adam Dickmeiss Date: Mon May 16 13:34:03 2011 +0200 buildconf.sh: update package list for compiling with sources commit 7d7e192def2fef342d235ea894eddb1e89edd714 Author: Adam Dickmeiss Date: Fri May 13 15:18:40 2011 +0200 Add new function nmem_strsplitx. This is like nmem_strsplitx but allows us to specify whether to collapse delimitors or not. The existing nmem_strsplit do collapse (collapse parameter = 1). commit dceeaf843f3bd4c87d667ed62fd4b5446d934cff Author: Adam Dickmeiss Date: Fri May 13 12:18:04 2011 +0200 GFS: fail if CQL properties can not be opened commit 068c332ae7dc06df7d4e0cc396061651720e9e50 Author: Adam Dickmeiss Date: Thu May 12 15:05:42 2011 +0200 SOLR tests: start work on decode tests commit 369d5e89785b7aefa6a269724692586af0215a91 Author: Adam Dickmeiss Date: Thu May 12 15:04:16 2011 +0200 SOLR decode: avoid creating empty records array Do not create records array if num_records == 0. commit 34356a0306446525cc3b2a5ddc268d77e5ade288 Author: Adam Dickmeiss Date: Thu May 12 13:58:40 2011 +0200 SOLR facets: no magic for non-date facets No longer remove/append _exact for facet names. Facets must be given from the API with their full names. commit 1597ca1e5e29c86afb20eee69de3db40f4c23ed8 Author: Adam Dickmeiss Date: Thu May 12 13:57:51 2011 +0200 Reformat; rename fun relationattr -> sortorderattr commit 33a39e24078032c9f726cacdf32c092fa0fe878d Author: Adam Dickmeiss Date: Thu May 12 13:03:58 2011 +0200 Add test for SOLR stuff; memory based, no network. commit 4849119cd60244ee5ed16958e885bc97315d23ad Author: Adam Dickmeiss Date: Thu May 12 13:02:25 2011 +0200 Reformat commit fc405db33968e9d67cfc066cdfcee2b8bdae6164 Author: Adam Dickmeiss Date: Thu May 12 13:02:02 2011 +0200 Reformat commit cc210c8334133d10df376ba1d914d34d96798e32 Author: Adam Dickmeiss Date: Thu May 12 13:01:45 2011 +0200 Reformat commit b57fc2b5c6741125e2ab27872a4898531f6408de Author: Adam Dickmeiss Date: Thu May 12 13:01:42 2011 +0200 Reformat commit 065b4a0fb49a47f88257a7fe49c1941a148286fa Author: Adam Dickmeiss Date: Wed May 11 14:47:12 2011 +0200 zoomsh: show returned facets (if any). commit c6d8de13a9a2fe8f1afed51bc57ec2b130b87365 Author: Adam Dickmeiss Date: Tue May 10 12:09:53 2011 +0200 CQL: ajd is a CQL 2.0 relation commit a6f6d77b75984f05b97942cfcca1b64d661fc76a Author: Adam Dickmeiss Date: Tue May 10 12:08:55 2011 +0200 CQL grammar: rename two terminals commit b80bf43768c7e00315720abde4cbd644fafa2bd1 Author: Adam Dickmeiss Date: Tue May 10 11:25:22 2011 +0200 Update to CQL 2.0 as of Feb 2011 Add all remaining relation symbols. Get rid of QUOTED_URI_STRING and make it a terminal instead based on QUITED_STRING. If not, the grammar is seriously broken, ie, search terms like "http://www.indexdata.com/" would be forbidden. Note that the search_term now (as for CQL 1.X) allows terms like 'and', 'or', 'sortby' . commit 9549afd48c2dc297f9bcd832d7ef9cea8c336f13 Author: Adam Dickmeiss Date: Tue May 10 10:43:36 2011 +0200 CQL grammar: simplify a bit WRT relations commit c52f7aa360f7aab46fe904e00293d8c3de7f77b8 Author: Adam Dickmeiss Date: Mon May 9 15:45:54 2011 +0200 Fix yacc grammar WRT prefix_assignment commit bdc72ca302452e555308e716c2f1e1743866a9ef Author: Adam Dickmeiss Date: Fri May 6 14:57:26 2011 +0200 GFS: convert to CQL sortkeys if CQL to PQF is used If CQL to PQF is in use by GFS, then it will also parse CQL sortby material and convert it to srw_sortkeys. commit dd993ee2910a754d46b2223c06b09abdd61caceb Author: Adam Dickmeiss Date: Fri May 6 14:56:51 2011 +0200 cql_sortby_to_sortkeys: handle modifiers. And add cql_sortby_to_sortkeys_buf. commit 4d827d4162155ab4514acb05dd2a1a38c29f4bcf Author: Adam Dickmeiss Date: Wed May 4 17:22:23 2011 +0200 CQL: start work on cql_sortby_to_sortkeys commit 7dfff1f7b79d8a3cf5f5ed62c71f6e4c2a616072 Author: Adam Dickmeiss Date: Wed May 4 16:09:29 2011 +0200 Reformat a bit commit ea44785920112e329fbc94c2e70758e6378eb775 Author: Adam Dickmeiss Date: Wed May 4 16:05:05 2011 +0200 CQL: handle SORT node in a few places In particular, CQL to PQF transform was broken after introduction of the SORT node. commit 4c5aa7d3ec9d1fe3fff1473e56b5690450ef4311 Author: Adam Dickmeiss Date: Wed May 4 15:15:32 2011 +0200 Add two CQL sortby tests commit b756b711841bac38e5b69baa51939ca9e1c01adb Author: Adam Dickmeiss Date: Wed May 4 15:09:33 2011 +0200 Renamed sh-based tests commit 262800f89e3280c5b594faf6eea2c98e988ee2cb Author: Adam Dickmeiss Date: Tue May 3 16:04:00 2011 +0200 CQL sortby; conversion to XML done. The cql_node struct has not changed size but a new type of node CQL_NODE_SORT is new. Strictly speaking this breaks binary compatibility so perhaps this has to be enabled "actively", by API. Bug #608. commit ed51c750eb5540c5a3a34ef3beb0c043a6e65f7c Author: Adam Dickmeiss Date: Tue May 3 14:28:20 2011 +0200 Add emacs/vim local variables commit 5038ee934566dcef1d366c32be2e54f53a0e4b99 Author: Adam Dickmeiss Date: Fri Apr 29 11:21:55 2011 +0000 Add Debian wheezy, Ubuntu natty commit 6bf58f547a8c58ec4ce4fefda177aec9e92c197e Author: Adam Dickmeiss Date: Fri Apr 29 10:18:39 2011 +0200 Omit redundant include of yaz/yconfig.h. commit cee361c60ab22518b0864d46d2c7b2b472ad797d Author: Adam Dickmeiss Date: Wed Apr 27 15:33:17 2011 +0200 Avoid printf %.*s for arbitrary strings Use wrbuf_write instead of wrbuf_printf in a few places for fixed length buffers. Use wrbuf_puts instead of wrbuf_printf when printf is not needed. There is a problem with printf("%.*", len, buf) when buf is in different encoding from what is given by LANG variable.. At least when readline is in use. commit 4f3bcae93d51a26709c12b51261c3d95af610cb2 Author: Adam Dickmeiss Date: Tue Apr 26 14:33:23 2011 +0200 Avoid ctype.h . The ctype.h-functions depend on the LANG environment which might be set to something totally different than a server application assumes. We also do not need anything but ASCII based checks (HTTP protocol for one). isxxx functions also require an unsigned int and a cast. These casts can be avoided now. commit 1fbd038d97d6e1bfe97270ecc17cca123bcc435c Author: Adam Dickmeiss Date: Mon Apr 11 13:05:17 2011 +0200 Rename internal func yaz_use_attribute_create commit 5bfd14747afb35c8009f9d6eb960c1b887717cab Author: Adam Dickmeiss Date: Mon Apr 11 12:14:41 2011 +0200 Log SRU auth params in GFS commit b7279e4a1668b45b6e6edbfeb7f45515dcabe191 Author: Adam Dickmeiss Date: Mon Apr 11 12:12:38 2011 +0200 SRU SOAP decoding: handle HTTP basic auth as well Call yaz_srw_decodeauth in the SRU SOAP decoder function yaz_srw_decode. commit dbd362a3dc1cfcafbcbafee0d5b28a4397fe7f03 Merge: d6717ba6 977d04b2 Author: Adam Dickmeiss Date: Mon Apr 11 11:20:10 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit d6717ba6822aea328e4a456edcf0318261cdc175 Author: Adam Dickmeiss Date: Mon Apr 11 11:18:18 2011 +0200 Handle password=0 for z_HTTP_header_add_basic_auth Avoid 0-ptr reference for z_HTTP_header_add_basic_auth . If NULL password is passed that is treated as treated as empty string. commit 977d04b2e65976b61396ff0e6cf97d4a883643cf Author: Dennis Schafroth Date: Thu Apr 7 14:13:59 2011 +0200 Remove empty lines and out-commented irrelevant test commit 9e6452d5c86ff5f0056803b95bcd26efd77a698a Merge: 6d79c6e2 c8a79e28 Author: Dennis Schafroth Date: Thu Apr 7 14:07:35 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6d79c6e2281fb22a755f95a15b3da16c3ace7c3a Author: Dennis Schafroth Date: Thu Apr 7 14:07:03 2011 +0200 Remove symbolic tests. Works only for ccl commit 617f469c9c7f5846d4ae3d53ac17616a09a49415 Author: Dennis Schafroth Date: Thu Apr 7 14:06:14 2011 +0200 Add truncation tests commit 173572735db6564239b28435231d34fada3fb446 Author: Dennis Schafroth Date: Thu Apr 7 14:05:32 2011 +0200 Fix left-right truncation fix commit c8a79e28da9f30fe4db703e598a33f63d22048c7 Merge: f6688651 801004d0 Author: Adam Dickmeiss Date: Thu Apr 7 13:58:13 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit f66886517ee1fbd4acd34d9942d9edde802a8c7b Author: Adam Dickmeiss Date: Thu Apr 7 13:57:27 2011 +0200 NSIS: Set InstallDir depending on x86/x64 commit 4d300e643896e74f94514065da5236fc24f14b13 Author: Adam Dickmeiss Date: Thu Apr 7 13:57:05 2011 +0200 nmake: add make64 target commit 801004d08d99b46b34f9a1b2342b9a5c13337d95 Author: Dennis Schafroth Date: Thu Apr 7 13:42:50 2011 +0200 Test for truncation. Not sure how CQL handles it commit 4f2a5c81a0efcee0fcd92bb89998126ee5dfd8e2 Author: Dennis Schafroth Date: Thu Apr 7 13:41:40 2011 +0200 Test that would have caught the truncation flags switch commit b68bf3d66b984c7dab7d4fe8707d761e7cc8c896 Merge: a6755038 8e4e5fd8 Author: Dennis Schafroth Date: Thu Apr 7 13:39:08 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit a6755038fe15be8e6aca7e062a0577407bb640a2 Author: Dennis Schafroth Date: Thu Apr 7 13:35:05 2011 +0200 Fix left/right switch of truncation flag commit 8e4e5fd8b258f7e3db8a5356cfc8ccddddebd150 Author: Adam Dickmeiss Date: Tue Apr 5 13:50:08 2011 +0200 Mods to tests to avoid clang warnings commit 44480613eaf589ad4cad250a3ef0bd9299b26c50 Author: Adam Dickmeiss Date: Tue Apr 5 13:32:22 2011 +0200 Adjust code a little to avoid clang warnings commit 86f056a3c67a9b6bb76f231c8cbaa010ce7f89b1 Author: Adam Dickmeiss Date: Fri Apr 1 14:03:21 2011 +0200 test_icu uses sortkey. Calls ICU cleanup. commit 47d9d5ac3241f8db09ba19a1a5c1fdd5e140e75f Author: Adam Dickmeiss Date: Thu Mar 31 14:34:44 2011 +0200 Reformatting commit 058d8ab3655c243e23e0adcb29a8fea345e9fa53 Author: Adam Dickmeiss Date: Thu Mar 31 14:23:38 2011 +0200 Reformatting commit 3dfa732aa036db355ccfc199a419c0ed90772a37 Author: Adam Dickmeiss Date: Thu Mar 31 14:21:44 2011 +0200 Make element_name_append_attribute_value static This, strictly speaking, changes binary compatibility but since this function was never declared in a public header we can get by .. commit 7c182a7a93e1f99fad3403946776c7167dbb7e08 Merge: 74f55d91 c1ee92c0 Author: Adam Dickmeiss Date: Wed Mar 30 16:03:04 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit 74f55d91dabcfa4f82e481e1a49ac57937d82d2f Author: Adam Dickmeiss Date: Wed Mar 30 16:01:45 2011 +0200 Build 64-bit YAZ with Libxml2, libxslt and ICU Make variable ICU_DIR replaced with ICU_LIB, ICU_INCLUDE and ICU_BIN. commit c1ee92c068d11468080418f5a5a5c44028deafa7 Author: Adam Dickmeiss Date: Wed Mar 30 13:50:20 2011 +0200 yaz-icu.c refactor and cleanup Use config parameter consistently. Call u_cleanup during exit to better cheak for leaks in ICU usage. commit 6cbdacfdeef5982e7d588aac5fabd5299732e78d Author: Adam Dickmeiss Date: Wed Mar 30 13:41:42 2011 +0200 yaz-icu: input file may be given. As an alternative to stdin.. Needed it for a gdb run and it seems useful. commit 79f064dd58f7d27cd29e429566f302bb18d87b9e Author: Adam Dickmeiss Date: Wed Mar 30 13:41:12 2011 +0200 Remove redundant utf-16 buffer term commit 86878f261a0679ae4cbddad2f8eb3208722e2e3b Author: Adam Dickmeiss Date: Thu Mar 24 10:33:34 2011 +0100 ZOOM: diagnostics for invalid ES usage, bug #3893. commit c1250b6b91fc106645f28bff1d6188936434a494 Author: Adam Dickmeiss Date: Thu Mar 17 09:19:22 2011 +0100 GFS: make statserv_main return for one-shot mode. Bug #4064. commit 3e45202a276daf769ce4727bc47147a1e669d4b1 Author: Dennis Schafroth Date: Wed Mar 16 14:54:09 2011 +0100 Remove extensive debug logging commit b0438903da4a34ce1dab8dbdc35eb3d938cbba90 Merge: c43e561f 9b1c5731 Author: Adam Dickmeiss Date: Tue Mar 15 14:19:48 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz Conflicts: win/yaz.nsi commit c43e561fdfe12989a6040163dae0e28ba0a02453 Author: Adam Dickmeiss Date: Tue Mar 15 14:11:09 2011 +0100 Version 4.1.7 commit b5ea4383e1229096765cfaf00e3c786ae6a3a572 Author: Adam Dickmeiss Date: Tue Mar 15 14:10:46 2011 +0100 NSIS: add configure.ac A nmake rule depends on it so we need it be part of the 'YAZ Source' component. commit 9b1c57318aabdbf8e6d0dc33e3a9848bdf062c64 Author: Adam Dickmeiss Date: Tue Mar 15 13:56:50 2011 +0100 NSIS: add configure.ac A nmake rule depends on it so we need it be part of the 'YAZ Source' component. commit 426de04212512159a1bb46b20d896478cb21c083 Author: Adam Dickmeiss Date: Tue Mar 15 13:28:13 2011 +0100 Update WIN32 makefile for stemmer commit e0cc7cde5fbb0dc5f0c170c9196ffc4eb181b05f Author: Adam Dickmeiss Date: Tue Mar 15 11:23:59 2011 +0100 Update m4 commit a02076d5c1a2ee1e080ea32b3e76c7af751b88b7 Author: Adam Dickmeiss Date: Tue Mar 15 09:44:26 2011 +0100 Multi iconv conversions for yaz_opac_decode_wrbuf2 This function uses iconv handle for MARC first; failing that uses iconv handle supplied to function yaz_opac_decode_wrbuf. Bug #4048. commit 22f541bb03c1fc3e9edbab5f4aaf01e9232bd003 Author: Adam Dickmeiss Date: Tue Mar 15 09:43:18 2011 +0100 Add new function wrbuf_iconv_write_x Is a generic WRBUF writer for iconv+cdata as an option . Returns if writing was successful or not. commit 554423d357ed2bcf4ece977f85de3bc1307d6536 Merge: e5567b53 e7c92dae Author: Dennis Schafroth Date: Fri Mar 11 13:36:52 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit e5567b53a976dd18a2a8b51deaa0189d53a2f226 Author: Dennis Schafroth Date: Fri Mar 11 13:36:39 2011 +0100 out-defined logging of stemming commit e7c92daefc4151eb51197bea80fbd4e80895945f Author: Adam Dickmeiss Date: Thu Mar 10 10:27:53 2011 +0100 Version 4.1.6 commit 14ce856a0a41fb7923d62bd173cd4d8e130f02f8 Author: Adam Dickmeiss Date: Thu Mar 10 10:22:53 2011 +0100 Avoid empty strings for yaz_iconv_open yaz_iconv_open apparently returns a non-null handle in case of to=(null) and from="" .. Avoid we call it this way. This resulted in bad records for Pazpar2 and was introduced in YAZ 4.1.5. commit e6f0ebc4aaded2fc0cfa36a78f7dc65a3b1e0d70 Author: Adam Dickmeiss Date: Tue Mar 8 14:22:10 2011 +0100 Fix date for NEWS commit 7bf4ce353e55ef9159f0eeb4c40fec3035c87ab4 Author: Adam Dickmeiss Date: Tue Mar 8 13:54:07 2011 +0100 Version 4.1.5 commit be199f850bc95c9908259e8c595b154081eadf93 Merge: 275390c6 fd43f843 Author: Adam Dickmeiss Date: Tue Mar 8 13:30:55 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 275390c6f75f5f1adf39a0bae4893168b95f7695 Author: Adam Dickmeiss Date: Tue Mar 8 13:28:34 2011 +0100 Separate OPAC record character set for ZOOM_record yaz_record_render allows a character set given as charset=from/opacfrom,to where 'from' is the character set of a bibliographic record, 'opacfrom' is character set of OPAC record and 'to' is the target character set. commit 45bf7a223153a11dcc07b1f1cb988f02af3a23f1 Author: Adam Dickmeiss Date: Tue Mar 8 13:28:10 2011 +0100 Implement yaz_opac_decode_wrbuf2 This function behaves likes yaz_opac_decode_wrbuf but takes yaz_iconv_t to allow character set conversion different from yaz_iconv_t part of yaz_marc_t. This is because OPAC record ASN.1 fields may have different encoding from the bibliographic MARC record. commit fd43f843d1366a7565533e66212507106bda5664 Author: Dennis Schafroth Date: Fri Mar 4 13:16:36 2011 +0100 Fix: import header so we dont return a int and seg.fault on that. commit 94524e7e3c8e47eaeabb16a246b3e892a75e7dbb Author: Dennis Schafroth Date: Fri Mar 4 12:26:55 2011 +0100 methods for handling DADS SRU-proxy facets commit 3b61496132dbd2b2127745cd9a3b4eeed8296ec5 Author: Dennis Schafroth Date: Fri Mar 4 12:25:55 2011 +0100 Refactor location of utility methods commit d71588ed52b5d84fa39a815f8c3893933a96dcbe Author: Dennis Schafroth Date: Fri Mar 4 11:26:35 2011 +0100 Add yaz_use_atttribute_create to private API commit 8cd027fbc995dce7192bdaeb5a9a7c87a411a2ac Author: Dennis Schafroth Date: Fri Mar 4 11:25:37 2011 +0100 Moved yaz_solr_use_atttribute_create to srwutil. Support for null attribute name in match_xml_node_attribute commit edfd7d1201e61701d29241bb684d85880a822310 Author: Dennis Schafroth Date: Thu Feb 24 12:23:07 2011 +0100 New non-public resultsets_count commit f3b96837fa4c86d0f10a9b167f94e897338bd16c Author: Adam Dickmeiss Date: Mon Feb 21 12:52:35 2011 +0100 Version 4.1.4 commit 9885c9c651e293561fad21cbc7d01b6b7b47e5c2 Author: Adam Dickmeiss Date: Mon Feb 21 12:42:36 2011 +0100 yaz-client: show may XML format records Command show followed by 'format' will format XML records retrieved using Libxml2's xmlDocDumpFormatMemory function. commit 46371c08c10cc1b0d9d101590e60f58ba65b5b11 Author: Wolfram Schneider Date: Sat Feb 19 12:52:50 2011 +0100 document icu4 for FreeBSD commit e4f86070d38505130eed815469a439f299eaaabd Author: Wolfram Schneider Date: Sat Feb 19 12:43:51 2011 +0100 update help message for FreeBSD commit f5e58c21e2318579bdfa500abfc483fa35b8c733 Author: Wolfram Schneider Date: Sat Feb 19 12:37:50 2011 +0100 run on FreeBSD 8.1 Release commit 17fe7bc7f9aba476c245d128e17f551f83dd5fdd Merge: 095bd74d 7bfdd9cd Author: Dennis Schafroth Date: Fri Feb 18 13:48:18 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 095bd74d0cc1cfd3bd4123da0a5fbeafbd1462ce Author: Dennis Schafroth Date: Fri Feb 18 13:47:59 2011 +0100 Remove unnessesary union commit 7bfdd9cdcbfd12d6690278c9b56a7ac26b2457e9 Merge: 222aad8d 4e9f63d3 Author: Adam Dickmeiss Date: Wed Feb 2 09:20:24 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 222aad8dece12c5a93a4dd8a67899933e4bd875e Author: Adam Dickmeiss Date: Wed Feb 2 09:19:35 2011 +0100 For phpyaz: set YAZVERSION, not YAZ_VERSION Thanks to Dave Burgess for pointing that out. commit 4e9f63d38f168dacc4952779e195e85bf46e61ed Author: Adam Dickmeiss Date: Sat Jan 29 15:35:07 2011 +0100 Fix compilation for case of unavailable ICU commit 3747235c36b720719687808418b60a2a33ea6c8d Merge: 3ec3ad2b 792769e0 Author: Adam Dickmeiss Date: Thu Jan 27 14:44:47 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 792769e081699489f37f1d7d34e3c8d49e098e66 Merge: 33054ee1 a03737d4 Author: Dennis Schafroth Date: Thu Jan 27 14:32:25 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 33054ee1b9de573a3de49e09267b1bfb912c5a0c Author: Dennis Schafroth Date: Thu Jan 27 14:32:20 2011 +0100 New libstemmer test commit 3ec3ad2bd1e248022bbb7c9d762844bef7f8a461 Author: Adam Dickmeiss Date: Thu Jan 27 14:06:06 2011 +0100 Version 4.1.3 commit 152722adad30e645e48890daf3c38910e52afaf1 Author: Adam Dickmeiss Date: Thu Jan 27 13:56:42 2011 +0100 Update NEWS commit 9c0c683e8e673023dec619948a62513d9a94a179 Author: Adam Dickmeiss Date: Thu Jan 27 10:43:39 2011 +0100 RPM: Release includes 'indexdata' name Use indexdata in release name so this package can be distinguished from other vendors. commit a03737d4f0a631d0c90521a8b5ad813c624c2d9c Merge: b637f5d4 50efb1a2 Author: Adam Dickmeiss Date: Thu Jan 27 10:37:48 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 50efb1a28ec6dc05a88280c404ee8c39e3d3c07e Author: Adam Dickmeiss Date: Thu Jan 27 10:37:18 2011 +0100 Fix distcheck for libstemmer_c commit b637f5d4f5d2aea0fba9a338da386e62a10dfd00 Author: Adam Dickmeiss Date: Thu Jan 27 10:27:59 2011 +0100 GFS: Z_PresentStatus_partial_4 for missing record If bend_fetch handler returns no error and no record, the present request is considered partial (only a subset of the records could be returned by backend), and so it is appropriate to set Present Status to partial-4. commit e7fe65bb0895a91714b664eff5d88602ea2524a5 Author: Adam Dickmeiss Date: Tue Jan 18 12:20:24 2011 +0100 RPM: use libgnutls-devel on SLES11. commit 17791e5c56b616ad9f845ae3d38f27fe2f0bbd46 Author: Adam Dickmeiss Date: Fri Jan 14 16:28:32 2011 +0100 Define tcpwrappers for fedora, redhat, suse commit 8a26576a7adf8cdec539d24055cff561020e6bc6 Author: Adam Dickmeiss Date: Fri Jan 14 15:43:53 2011 +0100 Multiple BuildRequires commit 7b1bbfddfb6e9d68c645388e3279a4990a6592ef Author: Adam Dickmeiss Date: Fri Jan 7 13:07:18 2011 +0100 Set YAZ_VERSION (php-yaz relies on it) commit ff8389b05aaf988715c0d67fbce43bfb25e5c6fd Author: Adam Dickmeiss Date: Fri Jan 7 10:56:39 2011 +0100 Update copyright-year commit 43a9d38d20c1b1bcd1a03b2445a501d27526bd35 Author: Adam Dickmeiss Date: Thu Jan 6 16:18:56 2011 +0100 Happy new year commit 3c7699211080055df1bb6fdcc2f45b95a096cf18 Author: Adam Dickmeiss Date: Thu Dec 23 11:16:26 2010 +0100 Update m4 commit 92d27e4d818fdd4613e42ea79184974c39d34c93 Author: Adam Dickmeiss Date: Wed Dec 22 14:48:05 2010 +0100 yaz-config: Use exec_prefix, libdir, includedir Use these variables as determined by configure commit f378ccccc2423f903390908eb8e9c41a015921c0 Author: Adam Dickmeiss Date: Mon Dec 20 13:55:57 2010 +0100 RPM: make it relocatable commit 8bfdf45d149101c4c3088c061094b5867e160822 Author: Adam Dickmeiss Date: Mon Dec 20 07:51:18 2010 -0500 Moved yaz.spec.in to yaz.spec commit 5909f3400a7e326c0a64bb56bc0567488669534f Author: Dennis Schafroth Date: Tue Nov 16 12:02:48 2010 +0100 Return no yaz_stemmer on misconfiguration. Handle null pointer in clone and destroy correctly commit c0e78d06e1febedac76533f51ae75971cf5a84d8 Merge: 0f073baf 640be7df Author: Dennis Schafroth Date: Fri Nov 12 13:41:14 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 640be7dfc9e6f7b4e15520cdc21caca957db9aec Merge: 6d7c7f98 22a1022c Author: Adam Dickmeiss Date: Fri Nov 12 11:21:45 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6d7c7f983e151470b2e543b76a4ce727686d914c Author: Adam Dickmeiss Date: Fri Nov 12 11:21:36 2010 +0100 Bundle more stemmer sources with dist commit 22a1022ca71a2b44b0f2e03dcf782be16375e0c1 Merge: 13ae8240 487a3ad0 Author: Dennis Schafroth Date: Fri Nov 12 11:17:24 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 13ae8240df93fc9a717ab9e069f356df1d9eca7f Author: Dennis Schafroth Date: Fri Nov 12 11:17:19 2010 +0100 Fix: using right destroy method commit 0f073baf2183a54f2a5691e697fde68c9a5f50c5 Merge: 31c5e5fa 487a3ad0 Author: Dennis Schafroth Date: Thu Nov 11 15:13:20 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 487a3ad015d2b63976a25022ec603b2cb8e76de6 Author: Dennis Schafroth Date: Thu Nov 11 14:27:01 2010 +0100 Fix: Destroy utf8 buffer with utf-8 buffer destroy commit 29f1edd41f3cc72bca9a2aacd10d6fd49f681aa8 Author: Adam Dickmeiss Date: Thu Nov 11 14:23:16 2010 +0100 Using different ICU diagnostic code commit 5a3e6fa63181ab4afa8bce5f01c6de016a333334 Author: Dennis Schafroth Date: Thu Nov 11 13:16:26 2010 +0100 Ups... memory leak commit 7b5b162f32acb625e9afba21e88acb56ca2ab04f Author: Dennis Schafroth Date: Thu Nov 11 13:13:04 2010 +0100 Test for stemming commit 640ef4d07f0b09f70578dccc4cda6d282ed6b281 Author: Dennis Schafroth Date: Thu Nov 11 13:06:44 2010 +0100 Stemmer implementation working. - Snowball stemmer now works. - Implementing "No Operation" for invalid settings. But returning error. commit c21a01f2a1dfff7f62636b251d4d129a9f0fbeec Author: Dennis Schafroth Date: Thu Nov 11 13:04:57 2010 +0100 Fix copy and paste code commit 3252229521745ee6413d1a5357a6348d36f87622 Author: Dennis Schafroth Date: Wed Nov 10 15:20:32 2010 +0100 Add Snowball API implementation commit afd1acce31b61e54fdc7550b4e7488c9b8511f5e Author: Dennis Schafroth Date: Wed Nov 10 15:19:29 2010 +0100 Updated to slimmed down snowball library: English/porter support commit b5b083d6c36e61c77b8b67980c155dde0a539ca5 Author: Dennis Schafroth Date: Wed Nov 10 14:41:16 2010 +0100 First implementation of yaz_stemmer API. Can compile. commit bcf7ddf816372109c2f46fe2bb959b80ebc491c9 Author: Adam Dickmeiss Date: Wed Nov 10 10:03:07 2010 +0100 Update libstemmer_c commit ec0326d927a40c3b5d917d35432ee06ad554f023 Author: Adam Dickmeiss Date: Wed Nov 10 10:00:02 2010 +0100 Update to new current libstemmer_c commit 2089dfbe2339c6f3e856e76f9b99e8fdda6ea8b8 Author: Adam Dickmeiss Date: Wed Nov 10 09:46:24 2010 +0100 Stemmer C sources part of libyaz_icu library commit fff2dc6469e36483e4547732aa8414fe3fe71183 Merge: c22010a4 bda8b160 Author: Adam Dickmeiss Date: Wed Nov 10 09:27:40 2010 +0100 Merge branch 'master' into stemming commit c22010a486adc7fe881418f831873dd62b7860f1 Author: Dennis Schafroth Date: Tue Nov 9 13:44:34 2010 +0100 Ignore some eclipse setting commit 7c078095142e5e064c88f238b9f3b6f5c7f0f82d Author: Dennis Schafroth Date: Tue Nov 9 13:43:34 2010 +0100 Add config.h stuff commit b3109da9bf75d6cb6c0e3cb003d9646d050cc2b9 Author: Dennis Schafroth Date: Tue Nov 9 13:37:25 2010 +0100 Add libstemmer_c (Snowball) as sub module commit bda8b16040f9cc9a5f5d7e90981c97a1726a9cca Author: Adam Dickmeiss Date: Tue Nov 9 13:14:45 2010 +0100 Deb: announce 4.1.0 because of new JSON OID commit 9e04bbdbec82ea6f5795dc2d16bd9876ecc7762f Merge: e1ad0cf9 29fc3c6e Author: Dennis Schafroth Date: Mon Nov 8 18:05:54 2010 +0100 Merge branch 'master' into stemming Conflicts: src/icu_chain.c Merge minor ICU change and test changes. Fix includes to include config.h. Fix Makefile: Include stemmer in libyaz_icu. commit e1ad0cf93484f86cbdcd53c73219eef124332dfc Author: Dennis Schafroth Date: Mon Nov 8 16:27:47 2010 +0100 Modify icu_chain to support yaz stemming commit 827d331a56e9c2b17983717155b74c2f3e5808fd Author: Dennis Schafroth Date: Mon Nov 8 16:26:47 2010 +0100 Add yaz stemmer file commit 1064b0521a608ba2c985f893772315819a990372 Author: Dennis Schafroth Date: Mon Nov 8 16:25:23 2010 +0100 Add Stemming API (following ICU transforms) commit 29fc3c6ee42b1c1bd2200c950393326007fa0d83 Author: Adam Dickmeiss Date: Mon Nov 8 15:30:55 2010 +0100 ICU: refactor step creation commit d5f0d8d7b52fa2dbf5b44654c877ae2506dc4a54 Author: Adam Dickmeiss Date: Mon Nov 8 15:29:28 2010 +0100 ICU: add test for multi-line rule commit 08fcb37b8bac4d5573b6afec27c3f3df4119781f Author: Adam Dickmeiss Date: Mon Nov 8 15:25:01 2010 +0100 Dont work with NULL chains commit af3b1f509a27cb38ca5c9cb7a22cd384f5ca7c70 Author: Adam Dickmeiss Date: Mon Nov 8 15:24:46 2010 +0100 ICU: remove check for attr rule (not required) commit ed329d8fb558a860215b29aea90ff688488bcf45 Author: Adam Dickmeiss Date: Mon Nov 8 15:11:18 2010 +0100 ICU rules may be specified as CDATA below the rule This allows for multi-line rules, such as ICU custom transliterators. For example: $back = \` ; $back $back > “ ; # generate right d.q.m. (double quotation mark) $back > ‘ ; commit 0e948cf6b84b6e601f3c7c12c83921e2753cdd1b Author: Adam Dickmeiss Date: Mon Nov 8 14:45:06 2010 +0100 Reformat commit 6b48f480f5095c2f26c628bb29c3a18220a5a278 Author: Adam Dickmeiss Date: Mon Nov 8 13:44:09 2010 +0100 Update ICU URL commit a75989ffbbddaae375ce9a9c3a323e38588cbe4b Author: Adam Dickmeiss Date: Mon Nov 8 13:37:04 2010 +0100 Reformat commit 8e6bdfe54743294add27acc265adae0f6999a9ca Author: Adam Dickmeiss Date: Mon Nov 8 13:34:12 2010 +0100 More consistent ICU info. Update URLs to ICU info commit d0e351c12fff564d876958e860338d43716dc269 Author: Adam Dickmeiss Date: Wed Nov 3 13:05:16 2010 +0100 Update configure to generate config.h commit 3224954c29109b736fb03f9b486fc5953223120c Author: Adam Dickmeiss Date: Tue Nov 2 16:49:42 2010 +0100 test_file_glob: return two files in test commit 25ede22cdd0f258801b169ecb6c787bf8e08ed54 Author: Adam Dickmeiss Date: Tue Nov 2 16:47:50 2010 +0100 yaz_file_glob sorts files commit a668cd0857e0141abba373761d77dbd556b6414a Author: Adam Dickmeiss Date: Tue Nov 2 10:05:58 2010 +0100 Version 4.1.2 commit 43c1d385fc4076fac26aa0a93783b078c7347b5c Author: Adam Dickmeiss Date: Tue Nov 2 10:03:02 2010 +0100 Mention @6 special hostname commit 9ffe61934ffe19de96352b10aad48bfb596c25cc Author: Adam Dickmeiss Date: Mon Nov 1 21:31:40 2010 +0100 Use yaz_log to print info about events; not printf commit d2c24334b58c3fe10d1af36dedb2f4de5a7d9fb9 Author: Adam Dickmeiss Date: Fri Oct 29 15:19:36 2010 +0200 Put yaz_log private data in non-static data Move yaz_log private data, such as log file, file type, log prefix from static to non-static (in a struct). This is to fix a problem where a shared object will see the "old" initialized data - not "current" data. For example, yaz_log_file would return stderr handle in shared object program despite the fact that yaz_log_init_file was called in mother program. The "private" data is combined in a struct yaz_log_info to minimize number of globals (that really are private data to yaz_log). commit 6bb56cea1f0da95aab92c52878f8501a7f4e6a75 Author: Adam Dickmeiss Date: Tue Oct 26 20:11:42 2010 +0200 buildconf.sh -d: use --with-pic commit 31c5e5fa92f5980deac3c042b765e4148329cd1b Merge: c205a1fe 29e4554a Author: Dennis Schafroth Date: Tue Oct 26 14:18:06 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 29e4554a9be9e8c25f200c3012e7fa4c2d03aaef Author: Adam Dickmeiss Date: Tue Oct 26 12:41:30 2010 +0200 tcp comstack: change behavior for @-specs (anyaddr) @ listens on AF_INET (IPV4) peers, and @6 listens to AF_INET6 (ipv6) peers. Previously @ listened on AF_INET6 which accepted both IPV4 and IPV6 peers on some Linux systems. However, in general that does not work so YAZ can not rely on that to work. Debian changed behavior in this respect from Debian lenny to Debian squeeze (still testing as of Oct 2010). Refer to: http://www.mail-archive.com/debian-devel@lists.debian.org/msg277726.html commit 10bb56d88175ffbc37e37615bd859ca6356c5f5d Author: Adam Dickmeiss Date: Mon Oct 25 14:30:55 2010 +0200 yaz-icu: avoid deprecated ICU API commit 754ccc50d4238e10be1aef777c83b2f86935b99d Author: Adam Dickmeiss Date: Mon Oct 25 14:06:31 2010 +0200 yaz-icu: mention libicu-dev; not old libicu36-dev commit bf522cd3aa2173ec426ae99f4b103a4bbaa04fca Author: Dennis Schafroth Date: Thu Oct 21 14:39:05 2010 +0200 Mention SOLR where SRU. commit 51dcfce92fb00a21315cd06e8330df594e730403 Author: Dennis Schafroth Date: Thu Oct 21 14:36:10 2010 +0200 Fixed spelling error. Add SOLR client only comment commit d52ecf4caac3228a6e543c0ab8c58e1befa1eee1 Author: Dennis Schafroth Date: Thu Oct 21 14:34:03 2010 +0200 Mention SOLR with other protocols commit f18e872c965a03818293cc914fdf30e1ec8f5f65 Author: Dennis Schafroth Date: Thu Oct 21 14:33:11 2010 +0200 Add comment on SOLR non-usage of version commit cc639afc463cc2a31d2e29c80c82a19c1a028228 Author: Dennis Schafroth Date: Thu Oct 21 14:31:33 2010 +0200 Add SOLR version. mentioning SOLR togetheer with Z39.50 and SRU. commit 88465f3bd8186da0903d08e8d1d124c509811541 Author: Adam Dickmeiss Date: Wed Oct 13 21:49:06 2010 +0200 RPM: comma separate package lists (requires) commit 00512e603a9a54c4499c84442fe07ba4c9b0af95 Author: Adam Dickmeiss Date: Tue Oct 12 13:41:30 2010 +0200 DLL Export a few more commit b98bdccf7972f49b21121d828f94e9506787a9c6 Author: Adam Dickmeiss Date: Tue Oct 12 13:41:16 2010 +0200 Add missing SOLR obj for Windows commit 93a9045258440573f0e2a54f0a8b401659778670 Author: Adam Dickmeiss Date: Tue Oct 12 13:26:23 2010 +0200 Add missing %s commit 476854e0207a1a3dddd648f71f5e24510956a142 Author: Adam Dickmeiss Date: Tue Oct 12 13:00:53 2010 +0200 Ubuntu maverick commit 6f60c2ddc5cbb085699d142af7e5836caaf6c69a Author: Adam Dickmeiss Date: Mon Oct 11 13:52:59 2010 +0200 First go at 64-bit install using NSIS Allow to build without documentation (html, css, ent). version.nsi is still required for NSIS. commit a99f6baa6d5d4203853a138de5b138d7e225e832 Merge: aa688c43 5b2fe23e Author: Adam Dickmeiss Date: Mon Oct 11 12:51:45 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit aa688c4388adbbbf022e0dbfad51e9a12eef37a1 Author: Adam Dickmeiss Date: Mon Oct 11 12:50:56 2010 +0200 Allow compilation without Libxml2 support (again) commit 9629dc2f718a92b415653d494527ee2c3b0640a2 Author: Adam Dickmeiss Date: Mon Oct 11 12:50:47 2010 +0200 Use casts rather than floor(3) commit 5b2fe23e1cffff1c658bdfe26fddc3f84256e7f4 Author: Dennis Schafroth Date: Thu Oct 7 12:31:16 2010 +0200 Describe ZOOM_facet_field_name commit eac6b7eead8e7149a7e1b2ae3954b649054c57c8 Merge: 27b61358 93b69aa5 Author: Adam Dickmeiss Date: Wed Oct 6 13:30:27 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 93b69aa5e5c81d58189d0e6827c1e73b2787bc76 Author: Dennis Schafroth Date: Wed Oct 6 12:59:37 2010 +0200 Eclipse project commit bd9c79c8a78ab881df8e2ba667b24021193151bc Author: Dennis Schafroth Date: Wed Oct 6 12:59:00 2010 +0200 Remove double-check on facet_list. Add facets parse warning commit 7d6ad94dbab567cc2d3e11a648594c4bb8fd4a9b Author: Dennis Schafroth Date: Wed Oct 6 12:56:41 2010 +0200 Add Facets sections, describing the Facets retrieval functions. commit 27b613584082f1221c73ee3d174ba3c02423e130 Author: Adam Dickmeiss Date: Wed Oct 6 12:56:19 2010 +0200 Move yaz-config man pages to section 1 commit a85807bde8a4a08706d266bd7dd089fb6778e281 Author: Adam Dickmeiss Date: Wed Oct 6 12:49:39 2010 +0200 Doc: update to DB 4.4. More metadata for man pages commit b1f0878598c07d7468612d81e8bead22b9d22066 Author: Adam Dickmeiss Date: Tue Oct 5 15:01:19 2010 +0200 Version 4.1.1 For 4.1.0: utility yaz-config did not reports flags and libraries correctly. commit 4c36250e9572cf234b1d43212c64fc438cabf2db Author: Adam Dickmeiss Date: Tue Oct 5 15:00:20 2010 +0200 Fix yaz-config (echo_source not set) commit f47da3c93d2beed65f9149c4550722ac4183c540 Merge: b580b6f6 679a6580 Author: Adam Dickmeiss Date: Tue Oct 5 11:58:27 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 679a6580c9d1ef83446e5f9f3693803c8145b8f2 Author: Adam Dickmeiss Date: Tue Oct 5 11:58:09 2010 +0200 Fix obj filename commit b580b6f606842cac87708b6bdf78140ca8ec0afa Author: Adam Dickmeiss Date: Tue Oct 5 10:13:48 2010 +0200 Version 4.1.0 commit 6a947d9c6d870cf15bb3805e5eaed843663474c1 Author: Adam Dickmeiss Date: Thu Sep 23 14:53:22 2010 +0200 zoomsh: display piggyback recs again Was removed by accident in previous commit. commit f0d23836907782b75c45f9572ff0df25561b2cf8 Author: Adam Dickmeiss Date: Thu Sep 23 14:37:07 2010 +0200 GFS: no-keepalive option, mostly for testing The no-keepalive option is enabled for GFS by supplying option -K. commit e31c087cd8187e3568f4a7af4203672cc5f67118 Author: Adam Dickmeiss Date: Thu Sep 23 14:28:52 2010 +0200 Avoid lost events (bug #3694) The ZOOM_connection_insert_task function no longer calls clear_error. This ensures that events are not lost when a server don't do keepalive. commit ba1a707a2125e63c7180d712f4b8bf3685a17105 Author: Adam Dickmeiss Date: Thu Sep 23 14:27:54 2010 +0200 zoomsh: print events if in async mode commit 544555bd2d47e79737c3a5ecd794bbee697c8f63 Merge: b6aa93dc a5795a2d Author: Adam Dickmeiss Date: Thu Sep 23 14:27:10 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit b6aa93dcb5c07ed09b664c006b5f33b0135a0854 Author: Adam Dickmeiss Date: Thu Sep 23 10:49:07 2010 +0200 zoomtst3: print event name commit 7eb11b475a9600b3e80fc1b1e94f341b99b2a565 Author: Adam Dickmeiss Date: Thu Sep 23 10:48:44 2010 +0200 Using YAZ_OPTIONS_-defines commit 2af72908b33a7847f9e150902f276f8fc95b74ba Author: Adam Dickmeiss Date: Thu Sep 23 10:48:11 2010 +0200 Not using GNU threads anymore commit a5795a2df2095d5a44b012a59426e7b906db3ec9 Author: Dennis Schafroth Date: Wed Sep 22 16:15:26 2010 +0200 Added debug logging to verify ZOOM_EVENT_RECV_SEARCH commit c8eb759d01c901904810106986d58ff1bb72e3f4 Author: Dennis Schafroth Date: Wed Sep 22 16:13:27 2010 +0200 Cosmetic commit b11da5f84991a07de9caf4ab52478e0e5a1028e0 Author: Adam Dickmeiss Date: Wed Sep 15 14:30:09 2010 +0200 Add SOLR material for ZOOM and yaz-client commit b606ea58c401186fc040bba5273d6353aabc230f Author: Adam Dickmeiss Date: Wed Sep 15 14:17:49 2010 +0200 Update doc/common commit cb0cb58575edb434b29bc20468eb6f456a65d9e2 Merge: 7ae6a3d1 e2cf8e56 Author: Adam Dickmeiss Date: Wed Sep 15 10:56:52 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 7ae6a3d178c4f29bad3af081c1882cdb6dcb3e06 Author: Adam Dickmeiss Date: Wed Sep 15 10:56:34 2010 +0200 Simplify yaz-config a bit src_root, build_root values can be taken from automake value. commit e2cf8e560e0a20fb96a52672deb205f4edf0c461 Author: Adam Dickmeiss Date: Mon Sep 13 20:13:13 2010 +0200 Add record syntax JSON / private Index Data OID commit c205a1feaf8e56abc17a0b761b16c35954f469b3 Merge: 2788a5e4 55f306a7 Author: Dennis Schafroth Date: Thu Sep 9 17:37:58 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 2788a5e4758bd50376bf2d69409aef9c77b05c42 Author: Dennis Schafroth Date: Thu Sep 9 17:37:50 2010 +0200 Work-around to be removed commit 55f306a7eb44ebfa39c096d2c76ad0cf12a089ea Author: Dennis Schafroth Date: Thu Sep 9 17:36:09 2010 +0200 Add facet.mincount=1 to avoid "ghost" facets commit 03253a9ef705cd30deb32f68f3d310cef407b1a7 Author: Dennis Schafroth Date: Thu Sep 9 16:15:10 2010 +0200 Work-around for bogus SOLR facets when zero hits commit 07127dd94f9d68932f75047f91fd4aed78d2b3cf Author: Adam Dickmeiss Date: Thu Sep 9 14:54:46 2010 +0200 yaz-client: add nl for cs_put error commit d4283605cc2af155bf822d1bcdd7db08868f7ab1 Merge: 87db97bc 082b5178 Author: Adam Dickmeiss Date: Thu Sep 9 11:35:01 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 87db97bc97dd4eb54a4d474f35fb585749135ff9 Author: Adam Dickmeiss Date: Thu Sep 9 11:34:48 2010 +0200 Initialize facetList commit 082b5178292fbba931469da363fe6541dda41c40 Author: Adam Dickmeiss Date: Wed Sep 8 20:29:12 2010 +0200 Fix yaz URL commit 709498d46ca78ef5338d3c4dce36b7e5c5037905 Author: Adam Dickmeiss Date: Wed Sep 8 20:23:34 2010 +0200 RPM: call ldconfig for libyaz4, not yaz commit 540b8919836aede9f2fe7f7a20978fc290e8972c Author: Adam Dickmeiss Date: Wed Sep 8 10:22:22 2010 +0200 Avoid mixed stmt/var declare commit efcd2fc68f269dd52d077da7f46c639d5b803117 Merge: 8f527ef1 cff93bfc Author: Dennis Schafroth Date: Wed Sep 1 14:20:39 2010 +0200 Merge branch 'solr_facets' of ssh://git.indexdata.com/home/git/pub/yaz into solr_facets commit 8f527ef1b249d9665418778c3c0661d5fdf68df3 Author: Dennis Schafroth Date: Wed Sep 1 14:19:46 2010 +0200 Use postfix "_exact" fields for SOLR facet requests. commit cff93bfc3cff822251abf7687bb5791a81b2bf0c Merge: 120d4102 b8b750a8 Author: Dennis Schafroth Date: Tue Aug 31 13:14:42 2010 +0200 Merge branch 'master' into solr_facets commit b8b750a84e0c9f7253d210f9604e385bd84a7569 Author: Dennis Schafroth Date: Tue Aug 31 12:42:04 2010 +0200 Fix: No default of 10 terms. Dont send terms unless limit is set. commit 120d41020531bb15a771971e9287b2f8f2b072ae Author: Dennis Schafroth Date: Mon Aug 30 15:46:22 2010 +0200 Extract handlie_facet_list to function. Used for SOLR as well commit 6e120dc3c508279e1733049e7aeb4626645d5eef Author: Dennis Schafroth Date: Mon Aug 30 15:41:59 2010 +0200 Support for facets for SRW targets (SOLR only) Using method handle_facet_list in zoom-z3950 commit 9d99233343d990135fe697f47f5933b1fd74cb0b Author: Dennis Schafroth Date: Mon Aug 30 15:37:08 2010 +0200 Fix: Initialize facets to empty commit e53c4f335802aa7e8d617b4dafc0908bc50cabce Author: Dennis Schafroth Date: Mon Aug 30 15:36:23 2010 +0200 Fix: allocating string on odr memory commit 44fa6a1823276d0f45796404e0fc5423a6a7f71d Author: Dennis Schafroth Date: Fri Aug 27 13:28:39 2010 +0200 Final bits to get facets from SOLR targets decoded commit 1c0ca5448add3823add4ba4993da0864e2d3657a Author: Dennis Schafroth Date: Fri Aug 27 13:27:30 2010 +0200 Show facets if present in search response commit d3c33ee221a22387ff0c260ba953aeffdd7ea040 Author: Dennis Schafroth Date: Thu Aug 26 16:49:30 2010 +0200 Implement SOLR xml int reader (for term + freq) commit 20e7d4946445ff49378144abbe6ab3f0f70a77d3 Author: Dennis Schafroth Date: Thu Aug 26 16:31:43 2010 +0200 Check for presense of numFound. commit 55af198a15d393b37618e3732ab0825ddc201469 Author: Dennis Schafroth Date: Thu Aug 26 16:30:29 2010 +0200 maximumRecords back to 0. Facets: warn on SRU/W of missing support. commit e73eb663eceab6bf4e364e30d0b59404c69aae16 Merge: a95e1c4f 2dd448af Author: Dennis Schafroth Date: Thu Aug 26 15:31:35 2010 +0200 Merge branch 'solr_facets' of ssh://git.indexdata.com/home/git/pub/yaz into solr_facets commit a95e1c4f3d0f4edad819cf20832fbab228db81d3 Author: Dennis Schafroth Date: Thu Aug 26 15:31:31 2010 +0200 Setting maximum records to 20 (testing) commit 2dd448afda333a5db88396d70d539089bf1a572d Author: Dennis Schafroth Date: Thu Aug 26 15:24:53 2010 +0200 add new test function: is_SRW commit d962efcd2c1f0a3abfb0c40e81e298d69a9757bd Author: Dennis Schafroth Date: Thu Aug 26 15:23:59 2010 +0200 re-impl. status check commit 9274947f1618751c10d1eb941692397537e79cae Author: Dennis Schafroth Date: Thu Aug 26 13:53:14 2010 +0200 Fix: facet_list -> facetList in SRW request/response commit b1f4aab8ff8fbf10958a3a18644972165d60621c Author: Dennis Schafroth Date: Thu Aug 26 12:10:45 2010 +0200 Implement encoding of Z_FacetList into SOLR request commit c3603459af001cb368a9906313b63fdc90fefaa3 Author: Dennis Schafroth Date: Thu Aug 26 12:08:56 2010 +0200 Add FacetList to SRW request/response. Change in public API. commit d082d063b2a6939de80d62150a1818d9ab1fe3a6 Author: Dennis Schafroth Date: Thu Aug 26 12:07:57 2010 +0200 Set facets on SRW request. Only implemented for SOLR. commit 93cf5a348dd93d545c30ffa2f2b1aa4bfee62cbb Author: Dennis Schafroth Date: Wed Aug 25 16:47:50 2010 +0200 Decode SOLR Facet response into Z_FacetList commit 869d0e8acb79984b9191576c566cb7753f653ea8 Author: Dennis Schafroth Date: Wed Aug 25 16:46:55 2010 +0200 Add facet list for request and response commit 2b33c56ec97fff11e300f441c88a61e04a176f68 Author: Dennis Schafroth Date: Tue Aug 24 17:52:44 2010 +0200 Remove the extensive logging commit 5e1889250160764822014ce89ee19dc84e5ce310 Author: Dennis Schafroth Date: Tue Aug 24 17:51:55 2010 +0200 Remove the extensive logging commit 83fe7a135733a28f6baecbfb054271163e8f46f6 Author: Dennis Schafroth Date: Tue Aug 24 17:37:35 2010 +0200 Fix: Work-around since zoom-sru handle_srw_response does not work with zero-based records commit 1ab314f533e2942e0898ad5fda346a48312b351a Merge: 09bf9425 4eeeeead Author: Dennis Schafroth Date: Thu Aug 19 10:25:18 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 09bf9425a83a58f4faf62a4de9fe4b465a8856a8 Author: Dennis Schafroth Date: Thu Aug 19 10:14:01 2010 +0200 Merge single change from local solr_client branch commit 4eeeeead8c63047aed5320c68ccb71f53fa130bd Author: Adam Dickmeiss Date: Thu Aug 19 10:10:45 2010 +0200 Version 4.0.13 in progress commit 8907fda61b461413a30d1634635136bbce540976 Merge: 7be47e0d 8c7858ee Author: Adam Dickmeiss Date: Tue Aug 17 13:17:12 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client commit 7be47e0daa09a9cf939668a65831cfaaa22bf2ff Merge: 90822107 aab59e4a Author: Adam Dickmeiss Date: Tue Aug 17 13:16:54 2010 +0200 Merge branch 'master' into solr_client commit aab59e4ad859bc77a361760c9e1dc3ebe6690233 Author: Adam Dickmeiss Date: Tue Aug 17 12:41:50 2010 +0200 Version 4.0.12 commit 8c7858ee7a1266db5ac2e18393ef331cadb687b0 Merge: 91dee596 45beb75c Author: Dennis Schafroth Date: Mon Aug 16 11:01:09 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client Conflicts: test/Makefile.am commit 91dee596d78d23af4c1ebc9f0c037b1bcb4728fc Author: Dennis Schafroth Date: Mon Aug 16 10:58:00 2010 +0200 eclipse update commit 98573bbc35a5eea1df877e5c887ef909bfaceddd Author: Dennis Schafroth Date: Mon Aug 16 10:57:05 2010 +0200 Add query with sort commit 671844eec000149592321bf3945a163a7078f342 Author: Dennis Schafroth Date: Mon Aug 16 10:54:39 2010 +0200 Added test_rpm2solr.c commit 90822107107281df9caf3ad66a693cb7403b16f8 Author: Adam Dickmeiss Date: Fri Aug 13 14:33:50 2010 +0200 SOLR: Map SRU recordSchema to "fl" commit 45beb75c13c772c5dc305cb443208862f33061c7 Author: Adam Dickmeiss Date: Thu Aug 12 15:27:24 2010 +0200 Rename yaz_solr_encode -> yaz_solr_encode_request commit 96e65728eefb6d7efef6e2f74a3b0d64f92b3c23 Author: Adam Dickmeiss Date: Thu Aug 12 15:22:16 2010 +0200 Rename SOLR HTTP response function From yaz_solr_decode to yaz_solr_decode_response; it only deals with HTTP response decoding. commit e8ab85dcfbcd1cdd8846a0b7f9b10adec780d9f1 Author: Adam Dickmeiss Date: Thu Aug 12 13:49:59 2010 +0200 Add test test_rpn2solr commit bb8c1303f5ffddd9dec1e3527f64fdaaa397698e Author: Adam Dickmeiss Date: Thu Aug 12 13:49:57 2010 +0200 Disable tests that do not yet work commit dfeb387a4744dd3c7ed9df15b3306ae6c35fa22e Author: Adam Dickmeiss Date: Thu Aug 12 13:38:06 2010 +0200 Make some internal functions static These functions were defined non-static by mistake (they were never defined in a header): emit_term, emit_terms, emit-wordlist. commit d2ca9fe2f99c4dd273eb21e00b645bc59c2315e2 Author: Adam Dickmeiss Date: Thu Aug 12 13:20:33 2010 +0200 Add new SOLR headers to header list commit 82130a0421d4d15df51078dd58aa8710e370a8ef Merge: e84dbd9a fabec8cc Author: Adam Dickmeiss Date: Thu Aug 12 13:15:36 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client commit fabec8cc81c901ee77f71e3d8667494b57507e7d Author: Dennis Schafroth Date: Thu Aug 12 13:15:12 2010 +0200 Add SOLR (rpn2solr) support. commit e84dbd9a06cc689f8919049213508db450055d82 Merge: 2ad26513 598a08eb Author: Adam Dickmeiss Date: Thu Aug 12 13:13:30 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client commit 2ad2651374674c895ad59b267da6fe2d8665fabd Author: Adam Dickmeiss Date: Thu Aug 12 13:08:34 2010 +0200 SOLR support for ZOOM and yaz-client The SOLR requests and responses (search only) are encoded in the same structures as SRW/SRU, because they are semantically so equal. It also means minimal change to existing software. However, at this time decoding of a SOLR search response must be instructed by the client. Had the SOLR Webservice used a namespace we might have a cleaner model. For ZOOM, option "sru" may be set to "solr" in which case ZOOM will contact a SOLR server with the URL with suffix "/select". So far the following SRU parameters are mapped: query, startRecord, maximumRecords. commit 1c256a41a684b68d2dea7c5bad34e02293a60de9 Merge: 0ae46bd1 205db649 Author: Adam Dickmeiss Date: Thu Aug 12 10:20:33 2010 +0200 Merge branch 'master' into solr_client commit 205db64953fc270a79878b89e5c6abc81c7c041a Author: Adam Dickmeiss Date: Thu Aug 12 10:20:19 2010 +0200 Fix compilation for without libxml2 commit 0ae46bd1e19dcc853c758af505c6f62f1f6be060 Author: Adam Dickmeiss Date: Thu Aug 12 09:59:29 2010 +0200 Refactor ZOOM event, hide more definitions commit 598a08eba1b5875837c606b9105b9d980092b40a Merge: 582c324a 83a7bb71 Author: Dennis Schafroth Date: Wed Aug 11 16:37:06 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client commit 582c324a5b5dc365195133e92f4ca6d02991e43b Author: Dennis Schafroth Date: Wed Aug 11 16:36:56 2010 +0200 Test cases for RPN to SOLR conversion commit 24a717fb09063be70ff56dc82e9f03e7673254e0 Author: Dennis Schafroth Date: Wed Aug 11 16:33:30 2010 +0200 Add SOLR (rpn2solr) support Not 100% working, only basic stuff. TODO: also clean out stuff not needed (based on the CQF files) commit 4e077901ce8ec84a24186bf6f00851b64a00a8a7 Author: Dennis Schafroth Date: Wed Aug 11 16:22:30 2010 +0200 Add new SOLR files for parsing from rpn2solr. (based on the rpn2cpf) Not working 100%. Only very basic parsing. TODO: clean out unused code. commit 83a7bb713c01e6c9b3311c6f5356e76a9a9fb92a Author: Adam Dickmeiss Date: Wed Aug 11 15:59:03 2010 +0200 Refactor ZOOM SRU stuff to separate source commit 61b325b3eedfffade2d918b58b8688911324a2d9 Author: Adam Dickmeiss Date: Wed Aug 11 14:26:13 2010 +0200 Fix filename in Doxygen comment commit f6def128a97444384d6c0939eaa04fb0e931d6df Author: Adam Dickmeiss Date: Wed Aug 11 14:24:15 2010 +0200 Refactor record render to separate source commit 74682526ffcdc625f5d8e7adec296b0d6d23a8b5 Author: Adam Dickmeiss Date: Wed Aug 11 14:03:18 2010 +0200 Refactor record cache to separate source commit 63c48920fd45817bf28177279f65099670fe258b Author: Adam Dickmeiss Date: Wed Aug 11 13:39:37 2010 +0200 Refactor ZOOM_query to separate source commit b7ac19e96f5e53975064b3dec2be6cbd2c1eccb8 Author: Adam Dickmeiss Date: Wed Aug 11 13:09:37 2010 +0200 Refactor ZOOM Z39.50 functions to zoom-z3950.c commit 9bc19cf107a572cfb533cf2c0505acdce4556540 Author: Adam Dickmeiss Date: Wed Aug 11 10:02:15 2010 +0200 Rename some functions to indicate Z39.50 handling commit 88c65669e62d0735931e64392b7c59129f6e68bc Merge: aca4eb82 b3b11da5 Author: Adam Dickmeiss Date: Wed Aug 11 09:27:40 2010 +0200 Merge branch 'master' into solr_client commit b3b11da5d7ad0d762d85ca912351351b7181d4d7 Author: Adam Dickmeiss Date: Tue Aug 10 15:46:38 2010 +0200 Avoid buffer[length] construct in yaz-ztest commit 5b2f8d46e7248f45b541500508f40959256e7421 Author: Adam Dickmeiss Date: Tue Aug 10 15:44:27 2010 +0200 Update Windows makefile for facets commit b9e418625581f4c56a7b47f7e29f541618d5e2fd Author: Adam Dickmeiss Date: Tue Aug 10 15:41:16 2010 +0200 Fix leak in parse_facet + compilation on Windows yaz_pqf_destroy not called. Constructs such as buffer[length] not supported on Visual Studio 2008. commit 96296b63bd2f5e471b05736910f7bb13984ea77e Author: Adam Dickmeiss Date: Tue Aug 10 12:29:21 2010 +0200 Revert recursive mutex patch We don't need recursive mutexes. Interestingly, PTHREAD_MUTEX_NORMAL and PTHREAD_MUTEX_RECURSIVE from man page pthread_mutexattr_settype are not defined in header pthread.h by default on my Ubuntu Linux (possibly others). Some defines may do trigger a definition of it, but what impact do they have then on other pthread-implementations? It crashed on FreeBSD - it could be fixed by using PTHREAD_MUTEX_NORMAL (rather than 0) for pthread_settype (normal mutex). commit f4294538bbeb77c910b083f1d385cf98d752e5b2 Author: Adam Dickmeiss Date: Mon Aug 9 14:29:09 2010 +0200 Daemon: make core files work if setuid is in use commit 08a57d6b7c0d759bf293fbad03d03363f1cb7bc5 Author: Adam Dickmeiss Date: Mon Aug 9 12:12:27 2010 +0200 GFS is using yaz_daemon commit 3dc0c503f9594142c8568fabb2c8e354377251ef Author: Dennis Schafroth Date: Sat Aug 7 12:00:22 2010 +0200 Fix wrapper function for creating standard mutex. Fix destruction of Mutex attribute. commit df1a0cf4e1b057630ead09d185ca9ef0deddda2e Merge: 9f11f349 8928d4a9 Author: Dennis Schafroth Date: Sat Aug 7 11:53:31 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 9f11f349958f122419856006d9295eb0ce41274d Author: Dennis Schafroth Date: Sat Aug 7 11:53:07 2010 +0200 Add new mutex create where mutex attribute can be set commit aca4eb82b50d781d4ab636cfc15412a2aca3e903 Author: Adam Dickmeiss Date: Thu Aug 5 14:27:32 2010 +0200 yaz-client: seacrh and show for SOLR commit 8928d4a9d67be45d4c60b26a11bc672af3297a8f Author: Adam Dickmeiss Date: Thu Aug 5 11:24:54 2010 +0200 Rename a few Z39.50 specific funcs commit 5f651ec4278aac5bed07f258c879f8f2691cb1c0 Author: Adam Dickmeiss Date: Wed Aug 4 13:29:14 2010 +0200 yaz-client: mark priv funcs static commit 44f9af0d137755e7452711b517dd87f5da95ace2 Author: Adam Dickmeiss Date: Wed Aug 4 13:16:27 2010 +0200 Reformat commit b23a551976e442c5cbb0ee4aa46768904dd57ccf Author: Adam Dickmeiss Date: Wed Aug 4 11:20:22 2010 +0200 Move otherinfo facet stuff to facet.c Reshape functions a little.. No need to pass the facet OID when it is already given that this is facets etc.. commit 0ca041667b871556ef285fe708cf70c6acef64a7 Author: Adam Dickmeiss Date: Wed Aug 4 10:55:29 2010 +0200 yaz_oi_get_facetlist_oid: odr=0 for yaz_oi_update This is because we do not want otherinformation entries to be created by this call. commit 6f64e76889c37909ac321a6149cbe45777e7688c Author: Adam Dickmeiss Date: Wed Aug 4 10:38:21 2010 +0200 yaz-client: otherinfo missing if facet is in use Do not skip index 0 of user-defined otherinfos if facets is in use. commit b56b6242e4e9c0011b9a2dae6d67c3ef0789251f Author: Adam Dickmeiss Date: Tue Aug 3 13:32:54 2010 +0200 Rename attr facet specific functions commit 76b807cf7d5aeff484005ab3168f3193da110f1f Author: Adam Dickmeiss Date: Tue Aug 3 13:21:19 2010 +0200 Reformat. Add YAZ_END_CDECL commit 79e871ca9f4d35a123a8a0dddb60b4a8c8b62dbd Author: Adam Dickmeiss Date: Tue Aug 3 13:10:58 2010 +0200 Rename struct attrvalues to yaz_facet_attr This structure is facet specific and not a generic attribute container. commit 77d462db11123735e9779da5d7783c06457beb75 Merge: 12eae661 46ea0a67 Author: Adam Dickmeiss Date: Tue Aug 3 13:07:40 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 12eae66114708ddcbb8e70add6ec6b46db822cb9 Author: Adam Dickmeiss Date: Tue Aug 3 13:03:10 2010 +0200 Add Copyright header and footer commit 8c9f54ecfc72ad52e773899df09170a7ab295a50 Author: Adam Dickmeiss Date: Tue Aug 3 12:59:03 2010 +0200 Avoid crash if facet use attribute is not supplied commit 46ea0a67951825a03cafc6c90cc6658cfbf40d75 Author: Adam Dickmeiss Date: Mon Aug 2 21:00:14 2010 +0200 Update expected MARC result due to upd message MARC results differ a little because warning about MARC directory has changed. commit 7e39a157bcf0419339fb279b9a64a8971b8a2151 Author: Adam Dickmeiss Date: Mon Aug 2 12:18:18 2010 +0200 MARC reader: more verbose if dir parsing fails commit b43711e9ef2aa51978eb3c6a7f403f43662ae785 Author: Dennis Schafroth Date: Fri Jul 30 17:16:39 2010 +0200 Avoid compile problem in eclipse commit 95a0f8e6ad2f79820c7a3cf2248c5c904b41a1e6 Author: Dennis Schafroth Date: Fri Jul 30 15:12:02 2010 +0200 Minor changes in build settings commit bed8863f24abfa980c56bf5841b67bb2d78c6fc5 Author: Dennis Schafroth Date: Fri Jul 30 15:08:48 2010 +0200 Add compile defines commit 247e4e69c61f39e8af636bd64cd09001ab4c0488 Author: Dennis Schafroth Date: Fri Jul 30 15:06:45 2010 +0200 Cosmetic plus fix of uninitialized variable commit 787368da704bbde501d20b8846b5fed3e3a81a9a Author: Dennis Schafroth Date: Fri Jul 30 12:05:33 2010 +0200 Fix LOG_* flags to YLOG_ flags. Uncomment unused functions commit 3442139fa753ec00fc988113a640fde46783db41 Author: Dennis Schafroth Date: Thu Jul 29 10:48:34 2010 +0200 Fix: missing init of descriptor and indirect_reference in externally defined commit 62a5a33362d50820f3ac509fa1412e946d576cff Author: Dennis Schafroth Date: Mon Jul 26 16:27:56 2010 +0200 Verbose debug logging on facets. Remove later commit 66490c4cd60228c4036596003a8f24373cbd0fd8 Author: Dennis Schafroth Date: Mon Jul 26 16:26:08 2010 +0200 ZOOM Facets. Fix: initialization of resultset.num_facets. Add some debug logging. commit fb91dfe5324b8492a8e90ec7c5dbfecad224c2a2 Author: Dennis Schafroth Date: Mon Jul 26 16:25:33 2010 +0200 Debug log on facet attribute limit commit be042bc51e825a53074dc1b586f1fff0a002ab0b Author: Dennis Schafroth Date: Mon Jul 26 11:27:47 2010 +0200 Support for skipping facet, if term count is 0. commit 848bd26348ba11c2dcc229cc7326d43dc9270e49 Author: Dennis Schafroth Date: Mon Jul 26 11:26:31 2010 +0200 helper for init. attribute values struct. Add some debug logging. commit f324699f321593c135a6bb3d858a29f7437cd72d Author: Dennis Schafroth Date: Mon Jul 26 11:25:31 2010 +0200 Add: method for initializing facet attributes helper struct commit 68a15f332deef91d6ace9f07c98ffbe3cf4aa2aa Author: Dennis Schafroth Date: Thu Jul 22 17:12:23 2010 +0200 Add missing facet function resultset_get_facet_field commit ddf3fefceb6290ce3da4d544f480f3bb72d2cf31 Author: Dennis Schafroth Date: Thu Jul 22 13:24:31 2010 +0200 Fix: Uninitialized member of Z_External when creating FacetList commit ca359fadd2bc021173109ad2e84a03f5e0f6a677 Author: Dennis Schafroth Date: Wed Jul 21 11:45:14 2010 +0200 Add help for facets commit d754c4d7836eb7ebe1accbb3620822d4a55c4df2 Author: Dennis Schafroth Date: Tue Jul 20 18:10:41 2010 +0200 Implementation of fake facets. Adding dummy facets to result if requesting facets in search. commit dfd9cdecdfc73057abe59c765f6ff24364aa7769 Author: Dennis Schafroth Date: Tue Jul 20 18:06:14 2010 +0200 Implemtation of ZOOM Facet API in zoom shell New option: set facets [AttributeList,]* : Defines the facets to be fetched, using comma-separated AttributeLists (@attr 1=title 2=0 3=0, @attr 1=author 2=0 3=0) New command: facets: shows the facets results commit 8d00bb643c800e61f47f7c26a5d489d4e6346229 Author: Dennis Schafroth Date: Tue Jul 20 18:05:13 2010 +0200 ZOOM Facet API implementation Implemented the facet API. commit 7c0b1d48b8192d2fa79f942d37c29d30a99c2fb6 Author: Dennis Schafroth Date: Tue Jul 20 18:02:57 2010 +0200 Fix: The facets_field variable was a pointer too much. Also not conditional on the ZOOM_RESULT_LIST representation. Add: Variables to hold numbers of facets_fields and the array of facets names. commit 81e8452cbfb569a63a07676b0dc7e32ea8343c5a Author: Dennis Schafroth Date: Tue Jul 20 18:01:52 2010 +0200 Fix: use the given OtherInformation. Also set the term when creating the Z_Term commit 544bbfdbc1da539b17542d740d25b154ebb4c182 Author: Dennis Schafroth Date: Tue Jul 20 17:56:59 2010 +0200 ZOOM Facet API changes ZOOM_resultset_facets returns a CONST array for interating over all facets. ZOOM_resultset_facets_names returns a constant array of names (char *) of the available facets returned in the search. commit 47776291269d5c75e61a6d2475d411c458f7bef5 Author: Dennis Schafroth Date: Tue Jul 20 17:56:17 2010 +0200 added helper functions commit ca1469bd104ff54c175f0ad25afc4cbf6d948551 Author: Dennis Schafroth Date: Tue Jul 20 09:33:43 2010 +0200 Using helper functions for facets commit ae61397330cc9b5ecb90c6f385dd6f22d4037021 Author: Dennis Schafroth Date: Tue Jul 20 09:32:28 2010 +0200 Fix: set the correct num elements on parsing error commit ac14cea20cab6607b203ec4d0e63b42008d70e6c Author: Dennis Schafroth Date: Tue Jul 20 09:28:12 2010 +0200 Helper functions for Facets. commit 85513aab61cd6a51f33bcf49cff49a124740b559 Author: Dennis Schafroth Date: Tue Jul 20 09:27:53 2010 +0200 Helper functions for Facets. commit 836e12246ca0e84c73f552d5aa5a0ca8d4978de9 Author: Dennis Schafroth Date: Mon Jul 19 17:25:28 2010 +0200 Add fake Facet list. Not yet working commit 7f7a775a9d2be4be61630cbdf4c54cf1d15e6e27 Author: Dennis Schafroth Date: Mon Jul 19 17:24:24 2010 +0200 Add facet structures commit 79b8802af30f0307dad1bd926d12580cb6d58bda Author: Dennis Schafroth Date: Mon Jul 19 17:23:27 2010 +0200 Add part of Facet API commit e4c68bbbfdfbfb44c4dbb62c3f528106ab65ffcf Author: Dennis Schafroth Date: Mon Jul 19 17:20:57 2010 +0200 Add yaz_parse_facet_list with helper functions commit 6ee6bd7baf9b8dccf3dffe2376b736a7d18c6791 Author: Dennis Schafroth Date: Mon Jul 19 17:18:23 2010 +0200 Add yaz_pqf_parse_facet_list commit 4c97c44fba095f26c8bee204fbdab63d1a249bc2 Author: Dennis Schafroth Date: Mon Jul 19 17:17:08 2010 +0200 Cosmetic commit eef7f890270dae6d226f3662395d67649d632122 Author: Dennis Schafroth Date: Mon Jul 19 17:08:57 2010 +0200 Add facets option commit 15cbfd594a64e997955bbecd1aeb95bc854a1217 Author: Dennis Schafroth Date: Mon Jul 19 17:06:35 2010 +0200 Refactor parsing of FacetList out (into pquery.c) Also need the parsing in the ZOOM API. commit f0476c98735293629895df18be7ad965146676f8 Author: Dennis Schafroth Date: Mon Jul 19 09:59:44 2010 +0200 Reworked as discussed. Keeping the optional for now. Perhaps adding the facet name iterator commit 3c0e13a17443542be86502796d95719d8414fd68 Author: Dennis Schafroth Date: Thu Jul 15 14:55:23 2010 +0200 Fix serious complaint from heikki Show Facets indented. commit 3fa5c310994e3449aac2926385f742fe34fb5757 Author: Dennis Schafroth Date: Thu Jul 15 14:46:07 2010 +0200 removed a stray s commit fe68107992cae293f6c2a3e2058ebfb5b09052a9 Merge: a508158c c2d4d247 Author: Dennis Schafroth Date: Thu Jul 15 14:41:09 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit a508158c2faf6e1bb96cd810d1d20f048eb01bae Author: Dennis Schafroth Date: Thu Jul 15 14:40:16 2010 +0200 Add FacetList name on external definition commit d2f977c26e0b16c544b69339c34ca9300b55b749 Author: Dennis Schafroth Date: Thu Jul 15 14:39:35 2010 +0200 Small reorder of code line for cosmetic commit b393fdf5e78549672d42e5292f99697c9d0feb76 Author: Dennis Schafroth Date: Thu Jul 15 14:38:21 2010 +0200 get Facet_List from OtherInformation commit f3328e07c858cad641f81bb4b758226d2d79da43 Author: Dennis Schafroth Date: Thu Jul 15 14:35:28 2010 +0200 Fix the FacetTerm. Remove the IMPLICIT on Term. Makes the decoder crash. commit df0a3ba592afe51a91a54152c3add5d1b51604a8 Author: Dennis Schafroth Date: Thu Jul 15 14:33:46 2010 +0200 New Facet helpers Use for extraction of values from the ASN.1 structures in C. commit 130d73eaa90fb40dd7d941b6a706036477ea8cdd Author: Dennis Schafroth Date: Thu Jul 15 14:30:30 2010 +0200 Support for printing of facets. - Rename display_term to display_term_info (as it is such a object it prints) - Extract display_term from display_queryExpression to display a term - Fully implement the display facet using new facet helpers. commit c2d4d247b3fe28f7c191fbc3644c8e011e1a4fea Author: Heikki Levanto Date: Thu Jul 15 11:09:07 2010 +0200 Fixed the asn1 for facets commit 1bb2934164457d2908fdceef0d415a52b704651b Author: Dennis Schafroth Date: Wed Jul 14 13:43:57 2010 +0200 Disabled the sending of a facet list (as Otherinformation) when (re)connecting commit 3472c8c6ca805adfe06e2e10a962e0467b5bdc18 Author: Dennis Schafroth Date: Wed Jul 14 13:06:02 2010 +0200 Eclipse files commit eb68779c8a1e2ea059b5cf1a790e5047e3190bf2 Author: Dennis Schafroth Date: Wed Jul 14 13:05:44 2010 +0200 Exclude eclipse build directory commit 558573d39acf41097935abebe06ba731d208e291 Author: Dennis Schafroth Date: Wed Jul 14 13:03:52 2010 +0200 New table entries for Facets commit 5a9b85ec05d3f3af1e4285be735bc9836aad2566 Author: Dennis Schafroth Date: Wed Jul 14 13:02:56 2010 +0200 Methods for encoding FacetLists commit a856c901f082e75a18f21734b47e89fa5534c8f7 Author: Dennis Schafroth Date: Wed Jul 14 13:01:22 2010 +0200 Add method for setting FacetList as Otherinformation commit be351d15fb835ad4d9d39b34016eef3cf3bf0c99 Author: Dennis Schafroth Date: Wed Jul 14 12:56:12 2010 +0200 Refactored to enable parsing of facets Facets is implementing as a Z_AttributeList Change the methods so the parsing of it can be done. commit b10a7695e0cd0a6f8a8db03388b10c5090522d0d Author: Dennis Schafroth Date: Wed Jul 14 12:52:03 2010 +0200 Facet suppport (partly) for Z39.50 Support for requesting facets using facets command. Sends the FacetList in the search request. Outstanding: Parsing of response. commit 5ee6205eb9bac20f3c6d033ff5926a7c1786a882 Author: Dennis Schafroth Date: Tue Jul 13 22:27:14 2010 +0200 Add facets to protocol commit 234a815c6258460f1746fe7ff92659f6639e72f9 Author: Dennis Schafroth Date: Tue Jul 13 22:26:36 2010 +0200 New method for parsing AttributeList used by facets. commit 15e7414994200ceccc20195f084a574f9b30ad1f Author: Dennis Schafroth Date: Tue Jul 13 22:24:26 2010 +0200 Added facet to external definition commit df84e4897abc4565fe11adead30b99d9634b41b1 Author: Dennis Schafroth Date: Tue Jul 13 22:22:31 2010 +0200 Fixed typo commit 78823e16ccc4715b60ba1ff4144b8e4d4611ae75 Merge: 120720e0 e8ca42e6 Author: Adam Dickmeiss Date: Fri Jul 9 17:18:03 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 120720e0d9c4fb0bcb2dae04d925ce03c64ede68 Author: Adam Dickmeiss Date: Fri Jul 9 17:13:05 2010 +0200 GFS: Add search_info member for bend_search_rr This member holds the otherInfo from the SearchRequest. commit e8ca42e680c5e5a644481e5d0b75a0e57c6d3e92 Author: Adam Dickmeiss Date: Fri Jul 9 16:44:42 2010 +0200 Version 4.0.11 commit a158e7aca7ab8b71d75c9dcdf6fd9bc2d65d2fd0 Author: Adam Dickmeiss Date: Fri Jul 9 16:43:50 2010 +0200 Add bib1 (CCL config example from ccl_test) commit 3c1365fc355b4ee90cb841e66cdb9c933f871ed9 Author: Adam Dickmeiss Date: Fri Jul 9 16:31:57 2010 +0200 CCL fixes: bug 2895 and bug 3539 commit 89d7ade063c6c1ecd3aba012204bb6d9ec5b8792 Author: Adam Dickmeiss Date: Fri Jul 9 11:55:46 2010 +0200 Work on fixing CCL quote problem, bug #3539. commit 417c6a81ea12af107047bf5f5b28a840ae553183 Author: Adam Dickmeiss Date: Thu Jul 8 11:29:34 2010 +0200 z-facet-1.h part of dist commit 5cf76d0f27403990896771b870e833605a7f87f6 Merge: ae29bbe3 f5730a77 Author: Adam Dickmeiss Date: Wed Jul 7 10:45:07 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit ae29bbe388c3ac6a15d0024009705f89b6184d02 Author: Adam Dickmeiss Date: Wed Jul 7 10:44:59 2010 +0200 facet.asn part of dist commit f5730a77d7a6b2190f0457a56d220937004df964 Author: Dennis Schafroth Date: Wed Jul 7 08:15:12 2010 +0200 Added z-facet-1.c to GEN_FILES commit 3d3fb279dd89ab042856f500ad92d472da250deb Author: Adam Dickmeiss Date: Tue Jul 6 13:54:41 2010 +0200 Add OID Facet-1: UserInfo.1000.81.5. commit b371ad40aaba0a2000cc31fee8cd536f3d5caeab Author: Adam Dickmeiss Date: Tue Jul 6 13:36:04 2010 +0200 New UserInfoFormat-facet-1 The ASN.1 is both for facet request and facet response and is to be part of additionalSearchInfo for Search{Request,Response}. commit b50190f4e3656107b5e3613cd6aed9cbe59fc2df Author: Adam Dickmeiss Date: Wed Jun 30 15:22:05 2010 +0200 Remove etch, jaunty, intrepid, hardy commit 20f793c68cde25f0883e9ce2f016bd33088e2110 Author: Adam Dickmeiss Date: Tue Jun 29 14:42:05 2010 +0200 Bundle MSVCP90.dll - used by icuuc42.dll. commit d578239b6183460779d9d34d4feeff3129dcab68 Author: Adam Dickmeiss Date: Tue Jun 29 10:51:37 2010 +0200 GR1-display: add comma in display Comma was remove by mistake in version 4.0.0. commit 3d536728dae01844f9a2b89337eb3b3fdb759382 Author: Giannis Kosmas Date: Wed Jun 16 18:47:08 2010 +0300 Merge cookies on SRU redirects. commit a2a90fc5775ae4d90cdff3c636fadf42315db540 Author: Adam Dickmeiss Date: Tue Jun 22 10:57:20 2010 +0200 More useful user handle for GFS example commit e7e9d6ab325472e8f103409f34ba853cdb314f2e Author: Adam Dickmeiss Date: Tue Jun 22 10:35:44 2010 +0200 Return fixed hit count 24 for anything but RPN For anything but RPN queries (CQL, CCL) return a fixed hit count in the dummy server. For RPN throw a random hit count as usual OR if a fixed hit count if any term has what appears to be an integer. commit b445b6a509785454c8128b6a09f3ca3b6f246140 Author: Adam Dickmeiss Date: Fri Jun 18 10:51:57 2010 +0200 API new functionality commit d642e9f8a9d6f2bebb4a283ba1a2d20f3dc0584b Author: Adam Dickmeiss Date: Fri Jun 18 10:51:12 2010 +0200 Version 4.0.10 commit fada8596e6a8574bbe8e95f7d0c7c317c1c04464 Author: Adam Dickmeiss Date: Fri Jun 18 10:50:15 2010 +0200 Update NEWS commit cabcc9b01684fb0410d4323399262563c6e9dc83 Author: Adam Dickmeiss Date: Fri Jun 18 10:37:56 2010 +0200 Add ZOOM_resultset_release ZOOM_resultset_release releases a result set from a connection. The result set will be on its own thereafter; no operations on it will perform retrievals from a target. Only cached copies are returned. commit e137416de024bcc37cc35ecae1ce2079f188ac41 Author: Adam Dickmeiss Date: Thu Jun 17 15:39:58 2010 +0200 Fix case for http:close and SRU step (bug #3484) Fix case where servers responds with Connection:close and ensure that if there is a current task it is resumed (like fetching more records in a result set). commit 48934edc63895e9881924b11791da324c450b8a2 Author: Adam Dickmeiss Date: Thu Jun 17 15:38:04 2010 +0200 GFS: modify log for SRU search commit bdd905698804f35851e060a58290f722dd5cffa0 Author: Adam Dickmeiss Date: Thu Jun 17 11:16:44 2010 +0200 ztest: Last test MARC record in UTF-8 ;was Latin-1 commit bb6807db66cc4aa2a9ceb1a5ae7eb79f53716614 Author: Adam Dickmeiss Date: Thu Jun 17 10:28:27 2010 +0200 Remove YLOG_LOG msg commit 9cfa827b7d5e4ed02820dd60691cd25d61ee0a23 Merge: 23ed5d17 ec2de5fe Author: Adam Dickmeiss Date: Thu Jun 17 10:27:03 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit ec2de5fe77b958d7dd00f8f0b030de368efe3619 Author: Adam Dickmeiss Date: Tue Jun 15 22:56:41 2010 +0200 ZOOM record render refactor commit 23ed5d17374725672f67e979a83b83c59c71eb66 Merge: 2d82f5e1 bfef45d6 Author: Adam Dickmeiss Date: Mon Jun 14 12:37:00 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 2d82f5e172577a498d19396b210ca28553683310 Author: Adam Dickmeiss Date: Mon Jun 14 12:36:42 2010 +0200 Add CQL 1.2 / 2.0 YACC grammars commit bfef45d6390bfabffc0d5e4dc3cf1aaa877fdef6 Author: Adam Dickmeiss Date: Fri Jun 11 14:13:19 2010 +0200 GFS: timeout is 15 minutes / 900 sec commit dc380c5373145eb1fe4dc99e7d5558791d9ecfca Merge: 84be3c9e 2b4785b3 Author: Adam Dickmeiss Date: Thu Jun 10 22:36:45 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 84be3c9eb6775a6c9477e4bfaf462076b0653ec1 Author: Adam Dickmeiss Date: Thu Jun 10 22:36:08 2010 +0200 GFS: timeout may be given in seconds (suffix s) commit 2b4785b39a2bbb4affd77fb9e24aaabc0b2dd069 Author: Adam Dickmeiss Date: Fri Jun 4 13:23:11 2010 +0200 Minor PQF encoding and decoding changes; reformat PQF decoding: attribute values that contain any non-digits are treated as string attributes (previously decoding only checked for leading character ([0-9]). PQF encoding: attribute string values are not surrounded by double-quotes. commit 092628feccc4f8f8dfe05df785f0d474b73742ce Author: Adam Dickmeiss Date: Fri Jun 4 11:30:11 2010 +0200 PQF parser: use odr_atoi for Odr_int (not atoi) commit e727aa6892bf8c0cb188c7a26506cd4805fea0c0 Author: Adam Dickmeiss Date: Tue Jun 1 11:26:07 2010 +0200 GFS example: set output_format commit 6cdb773ed83a2bd43d07bcf60b2f20ec71209838 Author: Adam Dickmeiss Date: Tue Jun 1 11:23:41 2010 +0200 GFS fetch: issue warning if output_format is unset commit 324d1241b0e9b40c897659e7ab9dc71edde5b1b0 Author: Adam Dickmeiss Date: Fri May 21 11:56:44 2010 +0200 Version 4.0.9-2 commit a5c1b81fd6863cc11133588c8a93c115ea25fed9 Author: Adam Dickmeiss Date: Fri May 21 11:55:27 2010 +0200 Summarize news commit 4437d37d1844243b154c4323413e18c50e3b8779 Author: Dennis Schafroth Date: Thu May 20 16:26:52 2010 +0200 Support for timeout event in yaz_poll_select Timeout events does not have a valid file descriptor but is below 0. commit 21d73f362bc5a84885739838fb6695d6c60c1187 Merge: cd093c26 3c02165c Author: Dennis Schafroth Date: Thu May 20 16:25:31 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 3c02165cdeb68fb7fc19637829f24e0952be7224 Author: Adam Dickmeiss Date: Thu May 20 14:15:32 2010 +0200 Add various #if HAVE_- for headers commit 7dc39ebcca4138d27f9a0e5082b2829a7c96375a Author: Adam Dickmeiss Date: Thu May 20 13:32:48 2010 +0200 Add socket pipe utility The socket pipe has same purpose as Unix pipe . Unfortunately Windows pipes do not work on select/poll. commit f3700fe68a59e969d9ef1f98e1748e10f4a80471 Author: Adam Dickmeiss Date: Wed May 19 16:11:02 2010 +0200 DLL export yaz_match_glob commit 89c5c3d0dcbbc3759604c4d5cd7b988a91cb64d5 Author: Adam Dickmeiss Date: Wed May 19 15:20:34 2010 +0200 Version 4.0.9 commit 1e957275de39799db9449c8d6c2f52359b494799 Author: Adam Dickmeiss Date: Wed May 19 15:14:43 2010 +0200 yaz_cond_create returns 0 if threads is unavail commit 7ceaeee4f1914d03c119340efc03e4b527240662 Author: Adam Dickmeiss Date: Wed May 19 14:39:48 2010 +0200 Make yaz_thread functions work on Windows commit 6779229aefba1c9ffce24a743a31ded066c12215 Author: Adam Dickmeiss Date: Wed May 19 14:39:34 2010 +0200 dirent.h: export DLL functions commit a4f3aed6537286535d1ea9962adb9ab77c528565 Author: Adam Dickmeiss Date: Wed May 19 13:43:01 2010 +0200 Add yaz_thread_{create,join,detach} These are simple wrappers for POSIX threads for now commit 7993bf125aa3ae6ac06e12a92209f54a863717c8 Author: unknown Date: Wed May 19 11:08:36 2010 +0200 Win makefile: omit /machine:i386 link option Conflicts on Win64 and is unnecessary on Win32. commit 6143ea31aa0013f8a835b979b8444ef691d0d208 Author: unknown Date: Wed May 19 10:52:46 2010 +0200 Fix retval check of SleepConditionVariableCS SleepConditionVariableCS of Windows returns non-zero on success; zero on failure (opposite of pthread_cond_timedwait). commit d29edd99352a6faa759d36867a6ebaa485012f25 Author: Adam Dickmeiss Date: Wed May 19 10:30:14 2010 +0200 Update doc/common (Unxutils URL) commit 20c7a39c2ac87673360f810b381b5798beaf2155 Author: Adam Dickmeiss Date: Wed May 19 10:30:12 2010 +0200 Make a link for Tcl commit 73608730730ad32ecdd61bb1f0790072d80d90e4 Author: Adam Dickmeiss Date: Mon May 17 13:41:59 2010 +0200 RPM libyaz4-devel: no *.la and less dependencies Because libyaz4-devel no longer includes *.la files we can remove the dependency to gnutls-devel and tcpd-devel commit 1925a433fb86d8f07cabd888b6f6ef697372c537 Author: Adam Dickmeiss Date: Mon May 17 13:40:22 2010 +0200 libyaz4-dev no longer depends on libgnutls-dev Because libyaz4-dev no longer include *.la files which screw things up. commit cd093c26605b9c436123e15c3a5989624e38831c Merge: a7eee1a2 f0a73bb9 Author: Dennis Schafroth Date: Mon May 17 12:38:49 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit f0a73bb9a6696231c37da9069c71f9e97cf6f933 Author: Adam Dickmeiss Date: Mon May 17 12:29:08 2010 +0200 zoomsh: show record do NOT render opac zoomsh's show command no longer renders "opac" by default. Only the one the user asks for; besides the buffered would be MANGLED because we were using two buffers from ZOOM_record_get at the same time (one would have to be copied first). commit a7eee1a2528940018127af361ba214b8688879f0 Merge: 1b814737 5f835d6a Author: Dennis Schafroth Date: Mon May 17 11:24:51 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 5f835d6ad1c5afd2b2c2652eef50b1c1fca459ae Author: Adam Dickmeiss Date: Mon May 17 10:42:53 2010 +0200 4.0.8-2 (without *.la files) commit 3d5041247b024fd0926b40048433102d1db29019 Author: Adam Dickmeiss Date: Wed May 12 14:28:34 2010 +0200 Remove *.la files. http://wiki.debian.org/ReleaseGoals/LAFileRemoval commit 04ad59c6a693bf48e656acbe8a414bbbbbd86083 Author: Adam Dickmeiss Date: Tue May 11 13:35:20 2010 +0200 Fix typo in deb version commit 88e0a27c2807e2bd1f06999b7312e77b7abdeea5 Author: Adam Dickmeiss Date: Tue May 11 12:46:28 2010 +0200 Version 4.0.8 commit 1de4d4f448337afc077a922d467c5999d1b9b3d6 Author: Adam Dickmeiss Date: Tue May 11 12:33:55 2010 +0200 libyaz4-dev depends on libgnutls-dev again For Libtool applications using YAZ, the .la file still refers to libgnutls libraries despite the fact the application do not use it at all. commit 1b814737d1572a6fc4bec2a3d120d6954d12bdb1 Merge: db32b715 5b4b1848 Author: Dennis Schafroth Date: Mon May 10 10:15:38 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit db32b7150acaf0e15dc6d33428f34bf49a1cc6d9 Author: Dennis Schafroth Date: Mon May 10 10:15:34 2010 +0200 Add detail logging of record create/destroy commit 5b4b18489c74c31ef915fef72621e8dcbfb4cdb3 Author: Adam Dickmeiss Date: Sat May 8 00:25:09 2010 +0200 ZOOM: resultsets not ref counted by connections Experimental code and revert to old behavior of result sets. ZOOM result sets are no longer ref counted by connections: it makes it very difficult to work with multiple result sets within one connection because connection would have to be destroyed before all its result sets are destroyed. It will also makes use of more result sets IDs on server than we need to - because ALL result sets in use will be still available (despite that ZOOM_resultset_destroy is called). This commit reverts to existing behavior: a result set is destroyed If ZOOM_resultset_destroy is used AND all operations on it are completed. commit 6244022fc260d3f35804ed690b1b2a4a466d0e51 Author: Adam Dickmeiss Date: Fri May 7 14:53:49 2010 +0200 Use shared WRBUF for returned record strings By sharing a WRBUF for a whole resultset for all records the number of allocations is reduced a lot. commit 6af53ed38e03e908a505cd059f436f4bab29cfdd Author: Adam Dickmeiss Date: Fri May 7 11:28:07 2010 +0200 Add header for shared pointer: shptr.h commit 24a138f8cd6c4c2c47d5c8d9b8efd7b19173b600 Author: Adam Dickmeiss Date: Fri May 7 11:21:02 2010 +0200 Add test_shared_ptr commit acb4c79e77bc112eabfa1f6a82f58cda507f4427 Author: Adam Dickmeiss Date: Wed May 5 11:26:11 2010 +0200 Extend description of ZOOM option 'proxy'. commit e1fa5ba09392c3bdd5c1bacac97d87d703ed1cf3 Author: Adam Dickmeiss Date: Wed May 5 11:20:32 2010 +0200 Document ZOOM option clientIP. commit 32edfa3b68ce3da45cb97375917764379b882767 Author: Adam Dickmeiss Date: Tue May 4 14:58:49 2010 +0200 ZOOM: scan number is 20 by default commit 0a24f02b05a021c6302f1ed340b049dd2f5576c8 Author: Adam Dickmeiss Date: Tue May 4 14:11:30 2010 +0200 Debian 4.0.7-1 commit 4ec0f264999f2cebbde404adaea140c081206e64 Author: Adam Dickmeiss Date: Tue May 4 14:10:41 2010 +0200 Version 4.0.7 commit cbf7cc9d4af4d1351fb8b1b99d37a8c069be6764 Author: Adam Dickmeiss Date: Tue May 4 13:56:21 2010 +0200 Add Ubuntu lucid commit 8a3b23f59f0d6558128f35b0973e08ec933fc012 Author: Adam Dickmeiss Date: Tue May 4 12:14:16 2010 +0200 record_conv: copy XML doc before passing to XSLT The record_conv reads the XSL file in two steps.. Reads XSL as XML Document.. Then passes that to XSL at each invocation to ensure the record_conv is multi-threaded. This patch ensures that XML document is copied before passed to XSL (instead of after). This makes at least one XSL transform behave differently (and correct). commit d0c99a160417bc4064050d23140516194352671c Author: Adam Dickmeiss Date: Tue May 4 10:45:32 2010 +0200 Fix check for xsltSaveResultToString commit 0bd27325c14ad88221c6909231682f0cf1e777fa Author: Adam Dickmeiss Date: Fri Apr 30 21:44:48 2010 +0200 Command line tool yaz-record-conv This is a simple program that allows testing of the record-conv utilities of YAZ (used by YAZ GFS and Metaproxy). commit 5d19a152f508dbd77d399c58c7e547118b1db636 Merge: 239ea376 d923469e Author: Adam Dickmeiss Date: Thu Apr 29 13:50:23 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 239ea37674040241e9567bd5c6c2b9c24ad32198 Author: Adam Dickmeiss Date: Thu Apr 29 13:48:22 2010 +0200 Debian 4.0.6-1 commit 617970be7b1544c55e1268fd14093f6b2160c0f6 Author: Adam Dickmeiss Date: Thu Apr 29 13:47:53 2010 +0200 Version 4.0.6 commit d923469e9f7acda378bcf9564d7d7f64581313fc Merge: fd829266 d4e1baf0 Author: Adam Dickmeiss Date: Thu Apr 29 13:46:16 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit fd8292660a22b62a4b2c6c1ef8482e639975e592 Author: Adam Dickmeiss Date: Thu Apr 29 13:45:14 2010 +0200 yaz-config: dont list SSL libs for shared libyaz commit d4e1baf0308848e2dadc5b55b46b0bbd4b936270 Author: Adam Dickmeiss Date: Thu Apr 29 11:18:09 2010 +0200 Debian 4.0.5-1 commit 3e842bc7f9d59df80805e96913bc7076d824f848 Author: Adam Dickmeiss Date: Thu Apr 29 11:17:23 2010 +0200 Version 4.0.5 commit bea6426b234d13fd4066de81599d71be9481f6c5 Author: Adam Dickmeiss Date: Thu Apr 29 11:15:41 2010 +0200 No need to YAZ_EXPORT timeval struct decl commit 363b51dfb7445d41b7a8c622f61d64736ce82eb4 Author: Adam Dickmeiss Date: Thu Apr 29 11:09:39 2010 +0200 Forward decl timeval. Include sys/time.h in source commit fe8b76d75847dfc7f9dac3d1382c2eb0ab28dec0 Author: Adam Dickmeiss Date: Thu Apr 29 11:00:11 2010 +0200 Declare timeval in mutex.h commit 5296093913444ee1a459e1342080c1b951e909b0 Author: Adam Dickmeiss Date: Thu Apr 29 10:54:48 2010 +0200 Omit use of local var lyaz commit 4a140e0b8cdecd8e80eec749153e8c4defe56436 Author: Adam Dickmeiss Date: Thu Apr 29 10:12:44 2010 +0200 yaz-config: List SSL libs for static mode The static mode is for apps that don't use Libtool. commit 28413a9ed5e61dc0da5ef34e3e96af116cda4890 Author: Adam Dickmeiss Date: Wed Apr 28 15:40:46 2010 +0200 yaz-config: don't list SSL/GNUTLS libs by default The yaz-config --libs output no longer lists SSL libs . Only if argument 'ssl' is supplied to yaz-config it will list those used to link with YAZ. This is to avoid having a dependency on libgnutls-dev for libyaz4-dev. commit 99f1879827d5be93a6363b5adbc83b824135dd88 Author: Adam Dickmeiss Date: Wed Apr 28 15:38:47 2010 +0200 TCPD libs only used in libyaz's LIBADD The TCPD libs (wrappers) are no longer put in to the LIBS make variable. This is to avoid a dependency on the libwrap development library for libyaz4-dev. commit e451bf7fd4bf5738731e6abe1452ac8f97ae46a3 Merge: 0903a184 2ee1aecf Author: Adam Dickmeiss Date: Wed Apr 28 14:36:20 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 2ee1aecfd1ccbf2cd68bf4e4f4e69b30cb0bfd2d Author: Adam Dickmeiss Date: Wed Apr 28 14:35:47 2010 +0200 POSIX thread conf check: preserve LIBS commit 0903a184ec89d2706a3d667e0a1641a61faba85c Author: Adam Dickmeiss Date: Wed Apr 28 14:03:00 2010 +0200 Debian 4.0.4-1 commit bda8349bc60d3a56197826c6b8095dda26d7b4f6 Author: Adam Dickmeiss Date: Wed Apr 28 14:02:36 2010 +0200 Bump to 4.0.4 commit e12005bd727ec3c5cf78dbeb10631bf066518691 Author: Adam Dickmeiss Date: Wed Apr 28 14:02:31 2010 +0200 4.0.4 NEWS commit 754e3b76f2ba650c5f18a0c2a8518986c7965000 Author: Adam Dickmeiss Date: Wed Apr 28 13:53:52 2010 +0200 Update m4. commit 25a6ea02602402282c3dd58ec922a792d4aa055f Author: Adam Dickmeiss Date: Wed Apr 28 13:50:31 2010 +0200 Doc: update ICU YAZ DLL to vers 4 commit 92bb2c69ec4cfdad9134b859932250ddc704f769 Author: Adam Dickmeiss Date: Wed Apr 28 13:49:36 2010 +0200 List new DLL yaz_cond4 commit b82cf50ef426bb3be1abe4260e5a1715e2c0603d Author: Adam Dickmeiss Date: Wed Apr 28 13:46:41 2010 +0200 Doc: update Windows library names (version 4) commit df00da5a3dbba000c75781fbb709e3e1cfb0a927 Author: Adam Dickmeiss Date: Wed Apr 28 13:35:52 2010 +0200 Condition variable functions in separate DLL The condition variable functions are in a separate DLL on Windows - named yaz_cond4.dll (release), yaz_cond4d.dll (debug). The split is done because Condition Variable functions is only supported in Vista or Windows Server 2008 or later. commit e2ee7361cc2ac8d8d00bbf4e74c46a77ccef1911 Author: Adam Dickmeiss Date: Wed Apr 28 13:13:48 2010 +0200 Automake updates for new gettimeofday source commit a60cfb6333496199c7c1d52d67ab8a3835597b48 Author: Adam Dickmeiss Date: Wed Apr 28 13:11:16 2010 +0200 Updates for Windows WRT timing and condition vars commit e45adb79ab73280e963c849927707089d4031040 Author: Adam Dickmeiss Date: Tue Apr 27 15:59:21 2010 +0200 Simple test of yaz_cond_wait commit e8be0a844a4301118fad33bd953b4a1d4044c575 Author: Adam Dickmeiss Date: Tue Apr 27 13:03:02 2010 +0200 Condition variable wrappers Add functions yaz_cond_{create,destroy,wait,signal,broadcast}. commit 11bd8b21620d78c0399387a501ec2277e85a2f47 Author: Adam Dickmeiss Date: Tue Apr 27 13:01:56 2010 +0200 Doxygen fixes commit cd082c414a5e15f800bc6070be0224fe9d4fc048 Author: Adam Dickmeiss Date: Tue Apr 27 13:01:27 2010 +0200 Fix Doxygen \file commit 355d07b69c11cad30ad0e5fb5e62c9abbb5f4658 Author: Adam Dickmeiss Date: Wed Apr 21 13:58:50 2010 +0200 Cosmetic: use symbolic names for two diagnostics commit 0518ff4b2713b8d219ae1e31ba92562f9e89f97b Author: Adam Dickmeiss Date: Wed Apr 21 13:53:51 2010 +0200 GFS: Fix nextResultSetPosition for dropped record commit b8295086e8dec1933af2f31b3f26893f67c6d88c Author: Adam Dickmeiss Date: Mon Apr 19 10:56:09 2010 +0200 Add mutex around resultset reference counter commit 5ba7734cc97eef6688596180b7faf535ee249976 Author: Adam Dickmeiss Date: Mon Apr 19 10:53:47 2010 +0200 Added mutex to resultset commit 8535dd99e47effa0d28f0a4b5f2357b0290bc7df Author: Adam Dickmeiss Date: Mon Apr 19 10:46:18 2010 +0200 Introduce ZOOM resultset list The ZOOM result set list - maintained by the ZOOM connection - is a smart pointer; before a connection was back referenced by the result set destroy call. commit 6f2f82e34ee173a0626432b57ebcbb8375e83a68 Author: Adam Dickmeiss Date: Fri Apr 16 15:04:18 2010 +0200 yaz_log: Log level tid logs thread ID Add new utility yaz_thread_id_cstr to return human-readable ID of current thread. At this stage pthread_self is used. This can be misleading because pthread_t (pointers presumably) are reused between thread creations. commit 3e6398d15008d68aa36b0b985a18f142fcfa9a8f Author: Adam Dickmeiss Date: Fri Apr 16 12:26:25 2010 +0200 libyaz.la (whole source) is compiled with threads If thread support is enabled enabled, all source of YAZ is compiled with treading support. This allows core utilities such as yaz_log to use thread facilities. Previously (YAZ 3 and YAZ 4 releases), only libyaz_server.la was using thread utilities. This commit moves mutex utilities (mutex.c) from libyaz_server.la to libyaz.la. commit a606039bceb5fb70f8ea8cfd88261f6f25ccc736 Author: Adam Dickmeiss Date: Sun Apr 11 11:49:36 2010 +0200 Do not return value in a void func commit 8fc5b2c281ffb8dcb97af9816aabbe04c37a8599 Author: Adam Dickmeiss Date: Fri Apr 9 14:05:02 2010 +0200 Properly encode JSON strings commit 14a92b63a016b6cc96c857cad8283efda91ea867 Author: Adam Dickmeiss Date: Fri Apr 9 13:40:31 2010 +0200 yaz-json-parse displays leading text until error commit 4e01ee252ae4ec86534061e905eb5d2a3ddb386b Author: Adam Dickmeiss Date: Fri Apr 9 13:39:27 2010 +0200 Add json_parser_get_position and json_parse2 commit c4d75ce92b9dbd5acc9348788cacffabcc526840 Author: Adam Dickmeiss Date: Fri Apr 9 12:26:16 2010 +0200 Spell fix commit 4c345cce4f4917ea0428c084a2d55b83d8e92d76 Author: Adam Dickmeiss Date: Fri Apr 9 12:22:32 2010 +0200 The IDMETA file as used by our pbuilder scripts commit 7b5205fa8cc74d5d17334216a5cd616296edb1a9 Author: Adam Dickmeiss Date: Fri Apr 9 11:33:28 2010 +0200 Verson 4.0.3 commit 732cf4e1fbb015bc2090a8dd43dd16bd88d3ffc2 Author: Adam Dickmeiss Date: Fri Apr 9 11:32:35 2010 +0200 Update WIN32 makefile for renamed tests commit 4e627aa761e0b91b240f703173eeb82462ee8409 Author: Adam Dickmeiss Date: Fri Apr 9 11:31:16 2010 +0200 Use srand rather than less portable srandom commit 7ae9aaa8123320e37aad3eb492890266f68a251c Author: Adam Dickmeiss Date: Fri Apr 9 11:27:43 2010 +0200 Include windows.h(WIN32) commit 6efe941c2ccde0e5a7895ab63d4b876fd6396bfc Author: Adam Dickmeiss Date: Fri Apr 9 11:25:47 2010 +0200 ztest delay: select(Unix) or Sleep(Win32) commit 53f20e62abbeeef515177b06c20922f50c8eea1c Author: Adam Dickmeiss Date: Fri Apr 9 11:10:42 2010 +0200 Document using TurboMARC from ZOOM C commit d9af31fa7067266b3bad4a734c0b61ac6bc5d67d Author: Adam Dickmeiss Date: Fri Apr 9 10:47:04 2010 +0200 yaz-client: show uses last position if omitted The show command has always used last position if omitted - except that this was messed up in YAZ 4.0.2. commit ad4b64e5b3ab9ebc4b2e8184a3782b10962f7d3d Author: Adam Dickmeiss Date: Thu Apr 8 14:37:49 2010 +0200 ZOOM C: handle HTTP redirect for SRU GET commit 5a0cf1c72149bbd2b40c766910d3196309bc5b46 Author: Adam Dickmeiss Date: Wed Apr 7 15:50:27 2010 +0200 Update TurboMARC namespace TurboMARC namespace is now: http://www.indexdata.com/turbomarc commit fb276eb339f39e6233de8e7540c4408089e8d3b3 Author: Adam Dickmeiss Date: Wed Apr 7 15:43:44 2010 +0200 Update TurboMARC definition and document it Document TurboMARC in the tools chapter of the YAZ manual. Update definition format mode to YAZ_MARC_TURBOMARC. The string as used in yaz-marcdump and other tools is called "turbomarc". Rename function yaz_marc_write_turbo_xml to yaz_marc_write_turbomarc. commit 5b61e9a2d6be8eddb62af8cc626dc1e98596cc7f Author: Adam Dickmeiss Date: Wed Apr 7 13:37:26 2010 +0200 Make ZOOM_connection_exec_task public This function, unlike ZOOM_connection_process and ZOOM_event_nonblock, do not process any events. commit f3027244f210c7014b46dc564e868bbdf10560e2 Author: Adam Dickmeiss Date: Tue Mar 30 15:45:15 2010 +0200 yaz-ztest: complete database delay arguments Fixed and random delays for yaz-ztest may be given as database options. Documented in code and man page for yaz-ztest. commit d180c9a6dfd641974a84e5107fc759f57e7b2d63 Author: Adam Dickmeiss Date: Tue Mar 30 12:51:08 2010 +0200 yaz-ztest: Work on database options Database parameters - URL style - ?n1=v2&n2=v2 .. are being parsed in ztest now. This will eventually allow us to specify delays for searching and other things that will make a fake search or retrieval to similate real systems. commit b0180cb3c16e1c9e4de0697dba03337204a27a51 Author: Adam Dickmeiss Date: Wed Mar 24 11:24:37 2010 +0100 MUTEX log: precede delay value with blank Was preceded with a =-sign before.. Easier to awk/grep with a blank. commit 263231600cbe7a49190b38fc724199fe2e69f7dd Author: Adam Dickmeiss Date: Tue Mar 23 15:39:58 2010 +0100 yaz_mutex_enter logs waiting time for lock commit 055ee272576c3f33a842adf5a9fdbe00c2c422f0 Author: Adam Dickmeiss Date: Tue Mar 23 13:04:38 2010 +0100 MARC test: Skip write using Libxml2 if unsupported commit d623f3970b7ddba573bef16f752966c6e93e14ba Author: Adam Dickmeiss Date: Tue Mar 23 13:03:26 2010 +0100 yaz-marcdump: exit(4) if write using Libxml2's bad commit 79c68f7855e83d0a9c641dadb8a0a378cf343c92 Author: Adam Dickmeiss Date: Tue Mar 23 11:28:38 2010 +0100 Documentation for mutex util commit 83bf5a83b9296d6fe16e55d2c54209c35d2fa20b Author: Adam Dickmeiss Date: Tue Mar 23 11:28:16 2010 +0100 Add one call to yaz_mutex_destroy in test commit 6bc9db9f9f6944f86f1337a9a4f1e232678afc7b Author: Adam Dickmeiss Date: Tue Mar 23 11:12:48 2010 +0100 Add mutex test commit 68bc4fc5d306d65ce2f9404626b9c627509a3e91 Author: Adam Dickmeiss Date: Tue Mar 23 11:12:06 2010 +0100 Extend yaz_mutex_set_naem with log level commit db70647849fbccb07d6feed7b7870fbac6cf07fb Author: Adam Dickmeiss Date: Mon Mar 22 15:39:37 2010 +0100 Minor adjustments and reformat of dummy MARC commit 50680214cefa3d57c9e49db3524c4d5497d99365 Author: Adam Dickmeiss Date: Mon Mar 22 15:39:31 2010 +0100 Reformat commit 15401488340849487c2d7782121bef66dd19e961 Author: Adam Dickmeiss Date: Mon Mar 22 15:31:19 2010 +0100 yaz-ztest: use built-in array for MARC always yaz-ztest no longer attempts to read dummy-records file. commit f4aef846d5972b8a2fafda28ceb99eeedaf21208 Author: Adam Dickmeiss Date: Mon Mar 22 15:28:09 2010 +0100 ZOOM: More informative surrogate diagnostic commit 17c29c7ff55b762c4e35e54e043a04b33fe35369 Author: Adam Dickmeiss Date: Mon Mar 22 12:57:00 2010 +0100 Do not mess with databaseName for HTTP redirect commit f5f832b061784c7a1a996f377ddb27e58fd8311e Author: Adam Dickmeiss Date: Fri Mar 19 15:50:41 2010 +0100 yaz-client: handle HTTP redirects commit 23b8fd79b9b42dd8655bcd2e0af8a3905348f059 Author: Adam Dickmeiss Date: Fri Mar 19 13:33:07 2010 +0100 MARC line reader: allow control fields of size 1 commit ae80b3d484b49ba877cb79f792fd217e1b7e9ffd Author: Adam Dickmeiss Date: Fri Mar 19 13:30:15 2010 +0100 Do not URI encode SRU database This reverts SRU URI handling back to YAZ 3.0.50 behavior. commit 4ee50d09c7df145666ba4c1d6bcc893349101770 Author: Adam Dickmeiss Date: Tue Mar 16 10:15:57 2010 +0100 tmarcxml tests files part of dist commit 2b80c10f9e398cb35212f147e9f792dc24e82bb1 Author: Adam Dickmeiss Date: Mon Mar 15 22:49:35 2010 +0100 Various clean ups of tmarcxml commit 56fae7ba6f0af88da829afa064908009c106fea6 Author: Adam Dickmeiss Date: Mon Mar 15 22:49:22 2010 +0100 Reindent commit 6835889492d68a285d59cfb1a156517a34937130 Author: Adam Dickmeiss Date: Mon Mar 15 19:51:56 2010 +0100 Reindent - including tabs -> spaces. commit 01f73e12327022619d6ca45d6624abd8de947552 Merge: 0836f7a7 b98d4fb5 Author: Dennis Schafroth Date: Mon Mar 15 15:11:46 2010 +0100 Merge branch 'turbomarc' commit 0836f7a70cff4b7a8edc2c2a2fd1b3cb2c6588cc Author: Adam Dickmeiss Date: Fri Mar 12 14:44:49 2010 +0100 Add yaz_mutex_set_name to debug a MUTEX When yaz_mutex_set_name is used, each lock/unlock operation will be yaz_log'ged. Remove YAZ_GNU_THREADS portions, since they are no not in use. The yaz_mutex_destroy now calls pthread_mutex_destroy if YAZ_POSIX_THREADS is on. commit b98d4fb5660adbcdbc981d01d1f028dc4ce46153 Author: Dennis Schafroth Date: Thu Mar 11 16:48:11 2010 +0100 Result of binmarc -> xml -> binmarc (utf-8) commit ec9d3fa5bfe410f39f5ec005a980c79be080468d Author: Dennis Schafroth Date: Thu Mar 11 16:45:22 2010 +0100 Updated with last fixes on code attribute commit c0a7048ecd7a2dd9bede0edb27dbe1547be2e9d4 Author: Dennis Schafroth Date: Thu Mar 11 16:36:14 2010 +0100 Fixed: double writting of code value commit cef8180172d07b7ba5e224beacac981083f2f283 Author: Dennis Schafroth Date: Thu Mar 11 15:35:15 2010 +0100 Updated to new format for non-valid characters in element names commit e92d8c8a0069412663e86b03ce1d87368118f532 Author: Dennis Schafroth Date: Thu Mar 11 15:33:19 2010 +0100 Added echo statement, but commented out commit 74d0b36793d64daf9c69a2a383a64ef49e17e159 Author: Dennis Schafroth Date: Thu Mar 11 15:30:04 2010 +0100 Re-implemented the element name encoding as Adams suggestion: when the values is not suited for element name commit f15418ee295542935d616a2163377b71e40ce04f Author: Dennis Schafroth Date: Thu Mar 11 15:29:21 2010 +0100 Re-implemented the element name encoding as Adams suggestion: when the values is suited for element name commit eb7eb1c9a8e4979c5a783393be7b74fd92a04c54 Author: Dennis Schafroth Date: Thu Mar 11 13:11:53 2010 +0100 Found a new place to add turbo marcxml element name "r". commit 209618d338385f6af442b6bf329bb4052eb02f4c Author: Dennis Schafroth Date: Thu Mar 11 12:41:37 2010 +0100 Result of converting (using libxml2) marc to xml back to marc commit af1da643dbc225f7cbb0a2f8c53c02f7eea8b9c5 Author: Dennis Schafroth Date: Thu Mar 11 12:33:04 2010 +0100 Added turbo marcxml record and a test for it commit df5c44e0977db702ebc177790d0e4ad87b73f8bd Author: Dennis Schafroth Date: Thu Mar 11 12:32:07 2010 +0100 Changed the add_datafield_turbo_xml to match indicators as attributes commit 73546e0de845d238d169531dfabc4590b080713f Author: Dennis Schafroth Date: Thu Mar 11 12:30:42 2010 +0100 Fixed: reading indicators as attributes, no longer sub elements. Added XML format detections (xml, turbo marc) based on record/r element. commit 26ae2d92619d0aba5a1e6e4a73412526acc3f1d6 Merge: d36517ad fec04146 Author: Dennis Schafroth Date: Thu Mar 11 09:47:26 2010 +0100 Merge branch 'master' into turbomarc commit d36517ad4b5054144bfcddf221c546cb61af9ea0 Author: Dennis Schafroth Date: Wed Mar 10 22:38:17 2010 +0100 Added new non-libxml2 tmarc. fixed naming so it matches non-libxml2/libxml2 commit eb5f027da754b8786e12dd6c7551fa551bc2e3ca Author: Dennis Schafroth Date: Wed Mar 10 22:33:40 2010 +0100 Result of libxml2 turbo marc conversion commit 653561fa749dbd5c0a438f249f2927ea33d5843c Author: Dennis Schafroth Date: Wed Mar 10 22:31:47 2010 +0100 Now non-libxml2 in tmarc*.xml commit 08c9e64c371cf2a25fbe682fc273a328a43a38a8 Author: Dennis Schafroth Date: Wed Mar 10 22:21:56 2010 +0100 Fixed: element_name_encode log statetment log statement messed up. commit 1d1a480fa1fc743cc5d471ffbd1fad81ff23192d Author: Dennis Schafroth Date: Wed Mar 10 16:36:53 2010 +0100 Commented out the marc -> xml -> marc compare. Fails due to leader/09 (character set) commit c54a5790984e8bd597a8ccd4d1d2d0cae6da8af3 Author: Dennis Schafroth Date: Wed Mar 10 16:34:45 2010 +0100 Extracted element name encoding into function. Moved indicators back as attributes to element commit 4a382949b64be5373386506e4b6f6c1e7c553d3d Author: Dennis Schafroth Date: Wed Mar 10 14:14:03 2010 +0100 Fixed: Generating correct xml after intro of turbo xml commit a83a2555fe95266031b6f3043e344eb1c1abd193 Author: Dennis Schafroth Date: Wed Mar 10 13:44:16 2010 +0100 Able to make valid turbo marcxml not using libxml2. commit fec04146c50098096daab3c22095f7174b2aa84c Author: Adam Dickmeiss Date: Wed Mar 10 11:27:49 2010 +0100 Fix EXTRA_DIST due to rename of tests commit f450fc48c1ab271aa0bd45d96e46dd2e0f2d9523 Author: Dennis Schafroth Date: Wed Mar 10 10:31:54 2010 +0100 Added support for turbo format in new function. Need testing commit 3107ce3a34993d2f784387f227a50343fff83bbc Author: Adam Dickmeiss Date: Tue Mar 9 15:37:11 2010 +0100 Rename C-based tests commit ed31c923f03ec124060972f5351b8b33e07a2e13 Author: Adam Dickmeiss Date: Tue Mar 9 15:13:48 2010 +0100 Use PTHREAD_CFLAGS for all test sources At this stage only tst_icu_I18N use threads. commit e5c00c8cfb4a34c9d2dde1e9d8ffa29817b38b7e Author: Dennis Schafroth Date: Tue Mar 9 13:50:12 2010 +0100 Removed redundant turbo_format commit 5e240678f83361786067bdb9741ad5302b5bc5d7 Author: Dennis Schafroth Date: Tue Mar 9 13:49:27 2010 +0100 Support for turbo marcxml commit 7c862e68f8fd3de440db2498bd5619f7f70ad43d Author: Dennis Schafroth Date: Tue Mar 9 13:49:05 2010 +0100 Support for turbo marcxml commit 7b4adcc54d64c9196a8c19a7f69c850774b8776b Author: Dennis Schafroth Date: Tue Mar 9 13:48:14 2010 +0100 Removed duplicate variable for turbo marcxml (using_turbo_format). Now works in zoomsh: show 0 1 txml commit 45092b952efe25cbb98ff928da8047a3e141036c Author: Dennis Schafroth Date: Tue Mar 9 13:46:43 2010 +0100 Updated eclipse settings commit 9527043ce026bae5a1ea8bb5fdca0f8d5f06f98d Author: Adam Dickmeiss Date: Tue Mar 9 09:55:41 2010 +0100 Deb 4.0.2-1indexdata commit 7dbe4b2f7fd95de64d15029e10d2ea04c8c1f46a Author: Adam Dickmeiss Date: Tue Mar 9 09:53:45 2010 +0100 Version 4.0.2 commit 055f23ee3692349a03f681ef1a0d5fd70c0cc770 Author: Adam Dickmeiss Date: Tue Mar 9 09:53:07 2010 +0100 wrbuf_destroy allows NULL WRBUF passed to it commit 387f22c564289db77315c0d6914e127fc99774bc Author: Adam Dickmeiss Date: Mon Mar 8 21:04:48 2010 +0100 icu_iter_get_token_number returns int commit 4adfba7e638623bfdca78c454d274174f7d1e01e Author: Adam Dickmeiss Date: Mon Mar 8 11:27:20 2010 +0100 Add tests for CCL qualifier aliases commit 3f02a85787de9b5340914aec0738f9eb46e89d79 Author: Adam Dickmeiss Date: Mon Mar 8 11:24:41 2010 +0100 CCL: Allow qualifier aliases to be defined in XML ccl_xml_config may now read CCL qualifier aliases as well, eg: commit 9773a01f6dae65e5f9c424b3f2bc7454b8270cfc Author: Adam Dickmeiss Date: Mon Mar 8 11:20:51 2010 +0100 CCL: fix parsing of ccl qualifiers aliases The configuration specification for CCL qualifier aliases is now parsed correctly. commit dc0ea3eaeb38d04f10118bfe62cd8e6c80033ce6 Author: Dennis Schafroth Date: Fri Mar 5 16:11:24 2010 +0100 Test files for libxml2 output commit 315dd387088f407f397ed5aa789e9ffadbcbbd80 Author: Dennis Schafroth Date: Fri Mar 5 16:09:46 2010 +0100 Ignore temporary test data commit cad33850686850356e9c7da4591abf9cab3193a2 Author: Dennis Schafroth Date: Fri Mar 5 16:09:19 2010 +0100 Added turbo marc data files (generated from marc format) commit ec6494bdb7c628db3b19c523db32d11a44225f79 Author: Dennis Schafroth Date: Fri Mar 5 16:07:04 2010 +0100 Updated to handle libxml2 and tmarcxml as well. Adding new check whether the conversion is reversible commit cde148647135f1a06f5b5ebf769430a9615d86bc Author: Dennis Schafroth Date: Fri Mar 5 16:05:24 2010 +0100 Fixed memory alloction errors. Added new function for turbo marcxml format. Handling decoding of subfield as hex number commit 0de835ef3a1c6e188718fe84d4f9a6a46312ab0b Author: Dennis Schafroth Date: Fri Mar 5 13:38:44 2010 +0100 Reverted manual changes in marcxml commit 77f27a99f17bdd5e6fc4d8a202ecc6da4ef95660 Author: Dennis Schafroth Date: Thu Mar 4 17:10:12 2010 +0100 Added turbo marcxml read and write commit f03f934986cd3ff1fbb98f8b1432d70c46f6809e Author: Dennis Schafroth Date: Thu Mar 4 17:09:09 2010 +0100 Added turbo marcxml format commit 21663da3c7047798632fbfe2871c242aa3a3a7cc Author: Dennis Schafroth Date: Thu Mar 4 17:08:23 2010 +0100 change some indicators to one commit 66632b7fb00f84ddc2a00a3a46ac459eb35e052e Author: Dennis Schafroth Date: Tue Mar 2 17:10:30 2010 +0100 Added turbo marcxml format. Added check for output error commit ba9dd475d02ebbebde75d82b23fa0b0c4631288e Author: Dennis Schafroth Date: Tue Mar 2 17:09:18 2010 +0100 Added turbo marcxml to output commit 7e32bf45764375a4485c359b8bc8c3c518a36680 Author: Dennis Schafroth Date: Tue Mar 2 17:04:00 2010 +0100 Added turbo marcxml format to output commit 5c0e243664a63c8522d400abbda6dc892cae4349 Author: Adam Dickmeiss Date: Tue Mar 2 13:44:15 2010 +0100 GFS: fix sizeof: saved by the bell commit 92e360a6e22fc5fda22d7f6a6449c3c8f0ee8fb9 Author: Adam Dickmeiss Date: Tue Mar 2 13:41:54 2010 +0100 GFS present: Deal with number of recs <= 0 commit 46f5205bdb8e837ab305644839451949916e40cb Author: Adam Dickmeiss Date: Tue Mar 2 12:30:03 2010 +0100 yaz-client: fail bad show args commit f2891d8771cb23cc70d973c6785bec20e31f511e Author: Adam Dickmeiss Date: Tue Mar 2 12:29:46 2010 +0100 Add odr_strtol (strtol for Odr_int). commit 1d81a9a4f7d31634552e8f93912b778527bcff00 Author: Dennis Schafroth Date: Mon Mar 1 16:05:31 2010 +0100 Working in progress: refactor the xml_write to handle two formats commit c27504bf04bb54c2744367d414358a11cf5ac84e Merge: 6c0318aa 0e9d6161 Author: Adam Dickmeiss Date: Tue Feb 23 12:41:32 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6c0318aa24f63e5a4e09953207691280c3964225 Author: Adam Dickmeiss Date: Tue Feb 23 12:40:51 2010 +0100 4.0.1-2indexdata for testing ZOOM_connection_close commit f49f756835c48c2d083ef5f2b24bbaf499ebd98e Author: Adam Dickmeiss Date: Tue Feb 23 12:39:26 2010 +0100 Add ZOOM_connection_close commit 0e9d6161b51ba5335ae4afa911e9f174b23a4b46 Merge: 401c6a43 4e641034 Author: Adam Dickmeiss Date: Wed Feb 10 22:32:51 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 401c6a437dd1cfd9103d9e4a71133365c53feeff Author: Adam Dickmeiss Date: Wed Feb 10 22:32:34 2010 +0100 Fix url.icu entity ref commit 4e641034b013c43b20922f66258f5daf8ac3ce59 Author: Adam Dickmeiss Date: Wed Feb 10 10:42:15 2010 +0100 yaz-client's auth command also works for SRU Until now the auth command and option -u would only work for Z39.50. commit 1958bfea3355304f47bd6dd2cc20b58b8c4b0f3e Author: Adam Dickmeiss Date: Tue Feb 9 14:51:10 2010 +0100 No fixed size buffers for ZOOM shell - bug #3257 commit 46a5c887dd9e559be988094bae9b7ca1bb1a6c24 Author: Adam Dickmeiss Date: Fri Feb 5 14:39:32 2010 +0100 tstodr: make it work on s390 Fix ODR test to make it work regardless of whether char is unsigned or signed by default (most platform's char is signed, s390's char is unsigned). commit 9efa074e7621acf1a41b8382567a40e9b0fccbfd Author: Adam Dickmeiss Date: Tue Feb 2 16:33:19 2010 +0100 Bump version to 4.0.2 commit fbb0389c468253ae678c1169fe0d7a8d8d54e8cb Author: Adam Dickmeiss Date: Tue Feb 2 13:54:07 2010 +0100 New icu_iter-functions The new icu_iter-functions makes it possible to use ICU chains from many threads. commit 399eedc05492646adc53a92193652aeae44deb1d Author: Adam Dickmeiss Date: Tue Feb 2 13:27:47 2010 +0100 Introduce icu_iter_first commit c16ca7db71f13d0dba5002a4d9c28438c18c06f7 Author: Adam Dickmeiss Date: Tue Feb 2 12:26:50 2010 +0100 Enable icu_chain_step_clone commit 7265cad51feddec535b81f94e644712618b76ecf Author: Adam Dickmeiss Date: Tue Feb 2 12:26:20 2010 +0100 Fix icu_tokenizer_clone (ubrk_safeClone) commit b71d00d4e1c65d134664f37502d62fcfa8136d76 Author: Adam Dickmeiss Date: Tue Feb 2 12:25:12 2010 +0100 ICU transform: init ICU status commit 527a008f2f3b1a19a968a7a1275132a04aa4d945 Author: Adam Dickmeiss Date: Mon Feb 1 16:32:38 2010 +0100 Working on cloning / thread safety for ICU stuff commit ded9dadedab82a379e0e52d78a61fe9632ac870c Author: Adam Dickmeiss Date: Mon Feb 1 15:05:44 2010 +0100 ICU test refactor. Hide icu_tokenizer struct. commit 4a44a7d9061b6d132ca1c6c50980fca5ad8e196a Author: Adam Dickmeiss Date: Mon Feb 1 14:17:44 2010 +0100 Use yaz_log rather than printf for ICU test commit 7d677757bffcf4cc8f30d69053004d50d8408e55 Author: Adam Dickmeiss Date: Tue Jan 26 15:17:39 2010 +0100 Fix home page for YAZ in Windows Menu commit 4cd30fbad4b8505f8f5b83f4f7ed6a22889f57bc Author: Adam Dickmeiss Date: Tue Jan 26 14:57:51 2010 +0100 Bump version to 4.0.1 commit ca56262b1976c7a55c406b44e730570fb70de418 Author: Adam Dickmeiss Date: Tue Jan 26 14:35:30 2010 +0100 yaz-json-parse part of Deb + RPM commit 4bd71a8e6144a4f1778e10311c407c66ab462c7c Author: Adam Dickmeiss Date: Tue Jan 26 13:59:53 2010 +0100 yaz-json-parse man page commit a6d42174fde823c89a661c17be2165bce0d94870 Author: Adam Dickmeiss Date: Tue Jan 26 13:39:37 2010 +0100 Add yaz-json-parse utility program commit 76d513fc3b7e7e267875fd965023dda71a635e1d Author: Adam Dickmeiss Date: Tue Jan 26 12:58:42 2010 +0100 dirent wrapper. Use yaz_file_glob for XML include commit de82e7fd43191fc2ae0d8eab9781c59c595c343a Author: Adam Dickmeiss Date: Tue Jan 26 12:19:47 2010 +0100 File globbing functional commit 39c353b281dd91c145e122110d516fce7bbde8c6 Author: Adam Dickmeiss Date: Mon Jan 25 16:30:14 2010 +0100 Start work on file_glob . commit 271a9c838f01dfb263d2bb13a7ef098def7e8f0f Author: Adam Dickmeiss Date: Mon Jan 25 13:46:48 2010 +0100 Not so dummy WRT result-sets yaz-ztest now do proper result-set handling. commit 419e0de8e395a9b43263d669eb83dc5bef0734a0 Author: Adam Dickmeiss Date: Mon Jan 25 13:45:41 2010 +0100 Fix spelling commit 20c8193263e5ada5c0aef97e1b0f6ec02fd7004d Merge: 16cec0c7 8f81448d Author: Adam Dickmeiss Date: Mon Jan 25 11:59:29 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 16cec0c7730f9ae5ce52a12a66d139e02cb806c0 Author: Adam Dickmeiss Date: Mon Jan 25 11:59:19 2010 +0100 All databases with prefix db allowed commit 2ce9902d5541bf71521587a073a9c09d36d4c3da Author: Adam Dickmeiss Date: Mon Jan 25 11:59:04 2010 +0100 Allow any range for dummy MARC commit 8f81448d9f3cbedaec633184c3a181b72de65c71 Author: Adam Dickmeiss Date: Mon Jan 25 10:45:39 2010 +0100 NSI: rephrase comment commit f51b5b23754da0f2446ade88c176939baffc64f9 Author: Adam Dickmeiss Date: Fri Jan 22 23:02:46 2010 +0100 XML Include: do not substitute root node Do not substitute root node .. The node parameter is simply xmlNode* - not xmlNode **. commit d3a3f3ed2d1b77d048e4ba0c7befebaa4b7671b8 Author: Adam Dickmeiss Date: Fri Jan 22 23:02:08 2010 +0100 Add test of XML Include commit 437cd481214b73c9dd33f86966f1edf244ffa4c4 Author: Adam Dickmeiss Date: Fri Jan 22 22:30:22 2010 +0100 One COMSTACK test program commit 3ead2151da31877742d79172250deb016682961b Author: Adam Dickmeiss Date: Fri Jan 22 22:21:13 2010 +0100 Header for Adding XML Include utility The header, xml_include.h, should have been part of previous commit. commit bc34bd42eb228125be6ff9143d9f98dbe11889a0 Author: Adam Dickmeiss Date: Fri Jan 22 15:38:32 2010 +0100 Adding XML Include utility (not W3C's include) commit 510bacff7df017db33072de7bc204d22a6b5535d Author: Adam Dickmeiss Date: Fri Jan 22 15:17:25 2010 +0100 Embarrassing commit 3498164f9058a807e5e25de88ecce61b97df2d14 Author: Adam Dickmeiss Date: Thu Jan 21 16:11:04 2010 +0100 Avoid mixed stmt/var declare commit f90459f4bb32ee8537edf31ea29fb59ae987d685 Author: Adam Dickmeiss Date: Thu Jan 21 13:18:18 2010 +0100 ZOOM_record_get: pretty xml format (bug #3182) ZOOM_record_get supports new parameter "format" which makes it pretty format XML record content. commit 6158d7465f3e832a18554c3e1157c12faaa7828e Author: Adam Dickmeiss Date: Thu Jan 21 09:22:47 2010 +0100 yaz-client: ctrl-d print \n before exiting Some small things just matter much. commit 8a6e1b377726cca5f60ce249b1a5bfcb6616bdab Author: Adam Dickmeiss Date: Wed Jan 20 15:05:19 2010 +0100 Fix JSON parser WRT start symbol The start grammar symbol (referred to as JSONText in ECMA-262) is JSONValue, not JSONObject. commit 8d297aab170c07e64ed6d1c0b817e13399f068d2 Author: Adam Dickmeiss Date: Wed Jan 20 10:35:10 2010 +0100 Fix ODR/NMEM proto WRT size_t in doc commit 0576c95614b10d6ede71b5b66651d9796a7d83e5 Author: Adam Dickmeiss Date: Wed Jan 20 09:53:51 2010 +0100 Version 4.0.0-2 commit ffe862e36b8b60b1197b223cec0b78482cbd7763 Author: Adam Dickmeiss Date: Tue Jan 19 22:34:30 2010 +0100 Add casts for signed/unsigned ints commit 4b178f16795cbdd5693abc705e5bdd4a17016672 Author: Adam Dickmeiss Date: Tue Jan 19 22:34:08 2010 +0100 Remove p_query_scan (not in use anywhere) commit c5a81c4eb35bcab571d42f4e02a69e4ed76dc20b Author: Adam Dickmeiss Date: Tue Jan 19 21:36:47 2010 +0100 Fix print in logrpn commit 31216a13d9e767800206f612fd14c408357fdafd Author: Adam Dickmeiss Date: Tue Jan 19 19:56:54 2010 +0100 Dont include removed header libxml2_error.h commit f037b7c90a9cae1c9fe35b589a1c1b9320d6e3ce Author: Adam Dickmeiss Date: Tue Jan 19 15:28:27 2010 +0100 Update NEWS for YAZ 4 changes commit e5c44d40aa8c2f5ab2dc7ad1e0b15d67eaca78c1 Author: Adam Dickmeiss Date: Tue Jan 19 15:23:23 2010 +0100 Reformat commit 99045261c60b0b3b93e3553ee01b90b2ba59cfc4 Author: Adam Dickmeiss Date: Tue Jan 19 15:13:49 2010 +0100 Update NEWS for 3.0.52 commit 46767b31f38d6b9a1964319c5473c948dbb10c1d Author: Adam Dickmeiss Date: Tue Jan 19 14:38:12 2010 +0100 RPN log: change some types to Odr_int commit 2d93f6df5a0d595628e2a61304ad0024a54775dd Author: Adam Dickmeiss Date: Tue Jan 19 14:37:47 2010 +0100 Add safe cast commit 002e8d5e6cdb9f188fd91df930b6cc763f50f96d Merge: f786c24e 80fee389 Author: Adam Dickmeiss Date: Tue Jan 19 14:16:08 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit f786c24ecec337c9055586cca0507c7e7bbe81f3 Author: Adam Dickmeiss Date: Tue Jan 19 14:13:13 2010 +0100 GFS: step_size, term_position, statuses type int Members step-size, term_position from bend_scan_rr changed from Odr_int to int. Member statuses from bend_delete_rr changed from Odr_int to int. commit 80fee38926477efd73c739731c5670d59c5d1bf7 Author: Adam Dickmeiss Date: Tue Jan 19 13:54:54 2010 +0100 More odr_int casts commit d758b64a40725394de0b05bdcf108948bf13ee49 Merge: efb222d1 1122ba75 Author: Adam Dickmeiss Date: Tue Jan 19 13:43:29 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit efb222d1aa3e4d12802ecc5c8dfdf1969085da65 Author: Adam Dickmeiss Date: Tue Jan 19 13:41:40 2010 +0100 Controlled conversion from Odr_int to int Some Odr_int values do not fit in the backend.h structure which still uses int for some things such as start and number (record positions). The conversion from Odr_int to int is performed by a utility odr_int_to_int in GFS now. commit 7cc2958d8f7877fa54a120cbc218ece03a8c0bcf Author: Adam Dickmeiss Date: Tue Jan 19 13:39:59 2010 +0100 Reindent commit 1122ba757b75750168f0ee748748b3bdc20dcd8b Author: Adam Dickmeiss Date: Tue Jan 19 13:12:39 2010 +0100 WIN32: dont mess with peer address For some reason we never got accept on Windows to return a peer address. This change just ensure we don't work with it (uninitialized variable addr). commit 03a8e03467d0085ffa2e34d885118fb8fe447149 Author: Adam Dickmeiss Date: Tue Jan 19 12:48:05 2010 +0100 WIN32: yaz-version.h depends on configure.ac commit c8ec7f23c5eaf841978968d8d9f85d459960a01f Author: Adam Dickmeiss Date: Tue Jan 19 12:17:09 2010 +0100 Fix VS 9 path commit 469a4f338acca4b3185548eedb03e07d36f26a48 Author: Adam Dickmeiss Date: Tue Jan 19 12:09:31 2010 +0100 Win32: use manifests by default commit 43849124700caab5cd76369c0fea934ca756e3a7 Author: Adam Dickmeiss Date: Tue Jan 19 12:09:12 2010 +0100 Use VS 2008 for NSI commit 606d0755a0441402d35cc597f1c85896d554898e Author: Adam Dickmeiss Date: Tue Jan 19 11:05:42 2010 +0100 log.h: Doxygen-friendlier commit d1b7e8b23770a100ae1baa74da31b0b2fd8ea0b2 Author: Adam Dickmeiss Date: Tue Jan 19 10:47:54 2010 +0100 log: strerror is always there commit 155ca4a5ebeb7827e1dd280dbd64e56f40e3bb4b Author: Adam Dickmeiss Date: Tue Jan 19 10:45:44 2010 +0100 Remove LOG_-defines (obsolete for >5 years) commit 2ca7419e15fc506b3ec2dcff3b288861a328793d Author: Adam Dickmeiss Date: Tue Jan 19 10:42:31 2010 +0100 Doc MARC utils. Remove yaz_display_OPAC commit 604f5efb41a53b29bad89178873572110a90c645 Author: Adam Dickmeiss Date: Tue Jan 19 10:06:08 2010 +0100 Make some zget_-func static. Functions such as zget_InitRequest, zget_InitResponse, .. are now static. They were never part of a public header - except zget_Close used by GFS. All these are used by public function zget_APDU. commit ff9ef529da0b40f6aa6ff73954933beb93c08186 Author: Adam Dickmeiss Date: Tue Jan 19 09:56:16 2010 +0100 GFS: Use zget_APDU rather than zget_Close Use zget_APDU rather than zget_Close.. Because zget_Close should not be public and because using zget_APDU is shorter. commit 1aac63eecd76d5d060da84037a355c153d747ca7 Author: Adam Dickmeiss Date: Tue Jan 19 09:45:06 2010 +0100 Remove redundant function libxml2_error_to_yazlog Function libxml2_error_to_yazlog is redundant and not in used by applications other than YAZ itself. yaz_log_xml_errors does the same - and is used at least by Pazpar2. commit d68f051b434a3a6171e56f12c798fd499e9abbbb Author: Adam Dickmeiss Date: Tue Jan 19 09:31:25 2010 +0100 yaz_log_xml_errors: use log level given Fix yaz_log_xml_errors to use the log_level given.. Instead of YLOG_WARN. commit 97193c4445d3dca23f65c4b517801f148da5a512 Author: Adam Dickmeiss Date: Tue Jan 19 09:25:44 2010 +0100 Document . Remove if/endif section commit c2e2ad215f5b5f76265f2651d1f326e160a8b5c2 Author: Adam Dickmeiss Date: Tue Jan 19 09:21:59 2010 +0100 Revert "Remove obsolete Z_-definitions" This reverts commit 1d2f32707c0d46f1fe11826fadbb2537fd90fac7. We keep various definitions to preserve backwards compatibility. commit 0923be02856667003bcef6b22a43dc18614e74ba Author: Adam Dickmeiss Date: Thu Jan 14 16:17:25 2010 +0100 Update m4 commit 2db517d64ac08da1f812f33812cf58f6aeb905e3 Author: Adam Dickmeiss Date: Thu Jan 14 16:16:54 2010 +0100 Comment WRBUF. Remove wrbuf_vputs commit 59569d48f6841cff9489858744e738fcc2dc3703 Author: Adam Dickmeiss Date: Thu Jan 14 16:16:20 2010 +0100 Mention timing commit 2da4a703da966708bb2e2bd4115ee9c348397667 Author: Adam Dickmeiss Date: Thu Jan 14 16:16:05 2010 +0100 Comment timing util commit ee2000792b8f11a3ada8b3cd7f197ac6c7fa7d67 Author: Adam Dickmeiss Date: Thu Jan 14 12:51:22 2010 +0100 Use size_t for local commit 7c9bef6a8e73fe722c2de81e76f56afc8d7f3cd3 Author: Adam Dickmeiss Date: Thu Jan 14 12:51:10 2010 +0100 Change type of cs_-masks commit 88d3bedf772316f87e1996f655ccf8d1e2589755 Author: Adam Dickmeiss Date: Thu Jan 14 12:39:12 2010 +0100 Bump copyright year commit ea7a73ee213b9dc8316f064628a8540313097a62 Author: Adam Dickmeiss Date: Thu Jan 14 12:33:57 2010 +0100 Fix comment commit ebd8274bfd15776ce3fec3ce41a835aedfa73f58 Merge: dec1c4b7 15645397 Author: Adam Dickmeiss Date: Thu Jan 14 12:31:11 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit dec1c4b71c8bb7a0d78efee541eeac07782bff73 Author: Adam Dickmeiss Date: Thu Jan 14 12:30:19 2010 +0100 WRBUF: size_t for sizes, void funcs. For size parameters for WRBUF size_t is now used .. Used to be int in some cases. Many wrbuf_-functions used to return an int indicating some length.. These return values were never used. And so they are now void. commit d7cf0285e21b40c1fba6259d57bdabae94571bd5 Author: Adam Dickmeiss Date: Thu Jan 14 11:08:38 2010 +0100 odr_malloc,odr_total uses size_t commit 070438f9027bec2411d0d3ec4491a6aa6651093a Author: Adam Dickmeiss Date: Thu Jan 14 11:07:41 2010 +0100 ASN.1 comp: Put blank in if stmt commit b5d18f0aff317a648757c41b9ebe49cc95be8d83 Author: Adam Dickmeiss Date: Thu Jan 14 10:58:34 2010 +0100 Add cast commit 82a298086b4a8f1988e45aeb8e52494f05ebc3e7 Author: Adam Dickmeiss Date: Thu Jan 14 10:58:13 2010 +0100 MARC table: offset type size_t commit 6006e6ad14bd76d1c57b1bc1d9044a321fe4aa26 Author: Adam Dickmeiss Date: Thu Jan 14 10:16:39 2010 +0100 Log: mostly local changes WRT size_t commit 25939454743eb1f58641b854b32f2235107ba4f2 Author: Adam Dickmeiss Date: Thu Jan 14 10:04:02 2010 +0100 Change local var type to size_t commit 14a3ce42903ba830cb2b838f5a6a7dd2afe93bd6 Author: Adam Dickmeiss Date: Thu Jan 14 10:03:24 2010 +0100 Update yaz_strerror to use size_t commit 2e7534d6db2aa45913384abf945475ebb08a021f Author: Adam Dickmeiss Date: Thu Jan 14 09:55:21 2010 +0100 Reformat commit 4e50d9461c89fb538b1826f9cecf4475deaeed3b Author: Adam Dickmeiss Date: Thu Jan 14 09:52:20 2010 +0100 NMEM: Update API to use size_t for sizes commit b0f1c1366ae428139ead8584c8c7e423aad7e0b3 Author: Adam Dickmeiss Date: Thu Jan 14 09:31:18 2010 +0100 RPN parsing: simplify and make some funcs static. Remove unused parameters and make functions p_query_scan_mk, p_query_rpn_mk static (they were never present in public headers anyway). commit abf8266c39394f5d3b182cfba09c4b3f64584e4a Author: Adam Dickmeiss Date: Thu Jan 14 09:30:51 2010 +0100 Remove redundant assert commit 6b75f79da659328925dbe37b9ce1dd3e95ba2122 Author: Adam Dickmeiss Date: Thu Jan 14 09:30:31 2010 +0100 Remove unused tcpip_getsockopt commit 38c840f98f5f85fdd0d4553d2ef2ea0f0d7fb1f0 Author: Adam Dickmeiss Date: Thu Jan 14 09:28:54 2010 +0100 MARC tables: avoid warning due to tail init Explicitly initalize last entry of flat table to avoid GCC warning. commit f1717bac2bc62456bcd4fa5f727f9a74d12122d1 Author: Adam Dickmeiss Date: Thu Jan 14 09:28:15 2010 +0100 Change type of idx=i to size_t commit 156453970cdd305bd535d2d08fd8a7eeab40bcc8 Author: Adam Dickmeiss Date: Thu Jan 14 08:58:53 2010 +0100 Bump year in copyright stmts commit edd37c41056b43c4be57887a0d87b6071144fd08 Author: Adam Dickmeiss Date: Thu Jan 14 08:58:39 2010 +0100 Update for YAZ4 DLL commit 21475478343527287499dada4b21e0366bf7e94e Author: Adam Dickmeiss Date: Wed Jan 13 16:02:29 2010 +0100 RPM: bump to libyaz4 commit c95af8bed6fc734e8007de756d7fd5a3ed892848 Author: Adam Dickmeiss Date: Wed Jan 13 16:00:37 2010 +0100 Add json.obj commit 0c2402d46da75fbba213cd43b2cfa60e346a5b3b Author: Adam Dickmeiss Date: Wed Jan 13 15:59:58 2010 +0100 Bump YAZ DLL names from 3 to 4 commit bf4af27e54345e280223257161448ace0f0b1d67 Author: Adam Dickmeiss Date: Wed Jan 13 15:44:10 2010 +0100 More JSON utilities New functions json_get_object, json_detach_object, json_get_elem, json_count_children, json_parser_subst, json_append_array. commit 8cd41e6a09e7279587dc29774669fbc13685566d Author: Adam Dickmeiss Date: Tue Jan 12 22:37:31 2010 +0100 Add JSON encoder and decoder commit 38f02127971c08e53bc65dcc4a54ef5c1396708e Merge: 1d2f3270 eceac7b7 Author: Adam Dickmeiss Date: Tue Jan 12 21:38:47 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1d2f32707c0d46f1fe11826fadbb2537fd90fac7 Author: Adam Dickmeiss Date: Tue Jan 12 21:38:39 2010 +0100 Remove obsolete Z_-definitions commit eceac7b7869288887b1b14212208e73ab54116db Author: Wolfram Schneider Date: Mon Jan 11 11:18:19 2010 +0100 document timeout option commit 770b156ad12cf75c816cdbe7f935493b812d6b5c Author: Adam Dickmeiss Date: Tue Dec 29 11:02:26 2009 +0100 Comment on conversion commit b97d1c530d7e111f3a4f9cfbb14220cc64561753 Author: Adam Dickmeiss Date: Fri Dec 25 23:00:01 2009 +0100 BER int: Operate on 64-bit regardless of Odr_int commit 086df1e70187914316d4755f9219335c92e6779d Author: Adam Dickmeiss Date: Fri Dec 25 22:59:23 2009 +0100 Only perform 64-bit int test in 64-bit mode commit 7c9a6eb7f59592b49669a456e0b66b46c81cd33e Author: Adam Dickmeiss Date: Fri Dec 25 22:58:45 2009 +0100 Update example for size_t args (scan) commit 1bc4f08eaac49e38f91a6bba89bf3092c1a60568 Author: Adam Dickmeiss Date: Fri Dec 25 01:11:56 2009 +0100 Fix uninit var in ber_decinteger commit 0988d80d70a06b9694664141f7068966d91caf3d Author: Adam Dickmeiss Date: Fri Dec 25 01:11:11 2009 +0100 Fix constant (-2^31) commit 552662f6f80c211b5b4ab81b8ea7afc2ba44f58a Author: Adam Dickmeiss Date: Tue Dec 22 14:55:15 2009 +0100 yaz-client: show operate on Odr_int commit 7acd2f2e64ad017d39c4aeb9c96882db1639d1d9 Author: Adam Dickmeiss Date: Tue Dec 22 14:49:12 2009 +0100 Testing of ber_integer commit 26fa70744fab926619fefa6aa50813e689d97981 Author: Adam Dickmeiss Date: Tue Dec 22 14:48:02 2009 +0100 BER: 64-bit codec for INTEGER. commit 1abd0885ceca8da4cf9c73d606b9681458f38d3a Author: Adam Dickmeiss Date: Thu Dec 17 23:35:13 2009 +0100 yaz-client: New command, 'url' which does HTTP GET commit 0b4aa2a134665d7161782db8e24f19e911178b1c Author: Adam Dickmeiss Date: Thu Dec 17 23:32:57 2009 +0100 Refactor HTTP chunk decoding to separate func commit dcac3690d8c478532eeb077233f93e8a791709a3 Author: Adam Dickmeiss Date: Wed Dec 16 13:31:15 2009 +0100 DB: Remove @id from YAZ book commit 202c86ec645b0ec72aa9123dcdd8f735153114ea Author: Adam Dickmeiss Date: Thu Dec 17 15:13:56 2009 +0100 clone_z_type: fix leak; occurred for enc failures commit b4dbbd7c2fa1a6ca687f589f895e1fe1e7addeed Author: Adam Dickmeiss Date: Thu Dec 17 13:57:42 2009 +0100 XML records printed as is (not forced to 7-bit) Some octet aligned records, such as XML, HTML, are now just printed as is.. They are not being displayed with \Xii-sequences for anything beyond chars 1-126 (decimal). This is becauase most terminals these days are UTF-8 encoded anyway. commit 8981acaf5c0aaf34a70f01178f22591bb8b3e19d Author: Adam Dickmeiss Date: Mon Dec 7 22:44:04 2009 +0100 Reformat, simplify commit 663c43bdba2dde816bb4d89df3daa0c323077e88 Author: Adam Dickmeiss Date: Mon Dec 7 22:29:47 2009 +0100 Remove socket (int *fd) from search_rr handler The socket descriptor ptr is a facility that allowed a search handler to supply a socket which would serve as a callback - when search was complete. This facility has now been in use for years .. Has not been tested for years and so probably does not work anyway. commit 84567c573de4d4b9822d9f2dd9caf8e97d864118 Author: Adam Dickmeiss Date: Mon Dec 7 22:12:39 2009 +0100 Remove bend_request definition from backend.h commit f170b856174b48f66a2cecb6ff6b4d02e02973fa Author: Adam Dickmeiss Date: Mon Dec 7 22:08:15 2009 +0100 Remove unused local commit f00d2bb50f84184c7682bd31a5361648a909f9f6 Author: Adam Dickmeiss Date: Mon Dec 7 22:03:52 2009 +0100 Remove unused GFS bend_request functions Remove some public GFS functions that operate on bend_request - bend_request_send, bend_request_mk, bend_request_destroy, bend_request_getid, bend_backend_response, bend_request_setdata, bend_request_getdata. commit 8965b9ad303ed2ef26f55db2224860745a0a5128 Author: Adam Dickmeiss Date: Mon Dec 7 21:51:25 2009 +0100 Doxygen frindly comments commit 4a9cbf62bc7a294f1782386997e09d2dd4ba9671 Author: Adam Dickmeiss Date: Fri Dec 4 13:50:43 2009 +0100 COMSTACK API changes: cs_stackerr, cs_addrstr. COMSTACK method cs_stackerr removed. It is not implemented by tcpip or unix COMSTACK, perhaps for ISO SR which was removed 7 years ago. COMSTACK macro / method cs_addrstr now returns 'const char *' rather than 'char *. The returned string is read-only and should not be modified by applications. COMSTACK cs_close is now a void function - it no longer returns int. No applications check for the value and the implementations has always returned 0. commit a1b50c5a7968be1cf039719da62c59bb89683253 Author: Adam Dickmeiss Date: Fri Dec 4 13:38:56 2009 +0100 Add COMSTACK example/test commit 4e50eccc10dbfb82098c72089c3b840813b71505 Author: Adam Dickmeiss Date: Fri Dec 4 13:36:46 2009 +0100 Make a working COMSTACK example commit c2317ad6444bd2a90a45fd519f286a7cef49c776 Author: Adam Dickmeiss Date: Fri Dec 4 13:23:58 2009 +0100 Update COMSTACK chapter WRT diagnostics commit 57b3990d07f7ed994884bc61504eb5a1962526eb Author: Adam Dickmeiss Date: Fri Dec 4 12:52:41 2009 +0100 Update ZOOM scanset doc commit 7dbee1f341772642df14925d639f03aec2eb3355 Author: Adam Dickmeiss Date: Fri Dec 4 12:29:47 2009 +0100 zoomsh: Refactor command show commit 5207f60678397943900b4e5f41d563335bf745d1 Author: Adam Dickmeiss Date: Fri Dec 4 11:59:54 2009 +0100 ZOOM: use size_t for scan hit counts and str size Functions ZOOM_scanset_term and ZOOM_scanset_display_term have changed, so that occ (hit count) and len (string length) are now of type size_t pointer rather than int pointer. This is to be able to represent large hit counts and to also just to use the proper type for string length (strlen result). commit a04475ec83719455dc7344a542eccc441095ff76 Author: Adam Dickmeiss Date: Fri Dec 4 11:08:10 2009 +0100 Fix yaz_logf formatting commit b56aa5c8101fb7474791acd8aedfec0801e57049 Author: Adam Dickmeiss Date: Thu Dec 3 23:19:05 2009 +0100 ZOOM: resultset size (hit count) is type Odr_int commit 96891b4d5a0681c2c9bc03f211639f0d98970796 Author: Adam Dickmeiss Date: Thu Dec 3 23:18:09 2009 +0100 Use odr_atoi to decode fake hit count (in term) commit d6dd2c2d762c1715d0733a0cb7afebc706a77b17 Author: Adam Dickmeiss Date: Thu Dec 3 23:16:12 2009 +0100 SRW/SRU decodes integers using odr_atoi Function odr_atoi is used instead of atoi. commit 6278ee39573b69b59333a876c52671d0ebbca320 Author: Adam Dickmeiss Date: Thu Dec 3 23:15:15 2009 +0100 Add odr_atoi - like atoi but returns Odr_int commit dc930d3eab99757f146e76ae5535c270f7d12dc1 Author: Adam Dickmeiss Date: Thu Dec 3 22:27:40 2009 +0100 Spell fix for package description This fixes Debian bugs: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=557679 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=557681 commit feebcc6b56911df135856c5d3475b617dd1c9eae Merge: e790adb2 c82f99e9 Author: Adam Dickmeiss Date: Thu Dec 3 22:24:02 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit e790adb21d9a2f892e9d49bf9f39985928474b44 Author: Adam Dickmeiss Date: Thu Dec 3 22:19:21 2009 +0100 Add libyaz.la to yaz-icu's LDADD list yaz-icu uses libyaz.la symbols - not only libyaz_icu.la. This should fix Debian bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=556768 A similar problem was present for yaz-ztest, IDs bugzilla #3036. commit c82f99e98f3b27c06d68eac02871a9b92486a89d Author: Adam Dickmeiss Date: Thu Dec 3 15:55:01 2009 +0100 Use _strtoui64 on Windows commit aff89a8d3531bee9e51bcdb9a244ff9b38fc1c6d Author: Adam Dickmeiss Date: Thu Dec 3 14:54:06 2009 +0100 Fix Doxygen comment commit ee12d78cea5ed5f277f869151a918c8b606887e4 Author: Adam Dickmeiss Date: Thu Dec 3 13:36:29 2009 +0100 Fix uninit-var bug in tcpip_straddr. A local variable ai was uninitialized in the case of getaddrinfo failing. It is not set to 0 (NULL) as it should. This bug was introduced in YAZ 3.0.51 when a leak for getaddrinfo resources was fixed. commit 7571b40f44e348f1b7d14f8747c9168bbd538444 Author: Adam Dickmeiss Date: Thu Dec 3 09:37:05 2009 +0100 yaz-ztest: fake hits based on Odr_int (not int) commit 0c5aa5100f29ca832bf6428d8ec92618a0fc027f Author: Adam Dickmeiss Date: Thu Dec 3 09:35:03 2009 +0100 GFS: Avoid piggyback for hits < 0 from backend If a backend returns negative hit count, then avoid comparisons against smallSetUpperBound and largeSetLowerBound. Otherwise a negative size in call to odr_malloc will occur. commit 804d3e0f68b6d6e1f6eb4c47499e547d92c4f334 Author: Adam Dickmeiss Date: Thu Dec 3 09:34:17 2009 +0100 Use ODR_INT_PRINTF to print Integer commit 8f826c92f2bfb303409fbfc67cd8e34049caa125 Author: Adam Dickmeiss Date: Tue Dec 1 16:17:54 2009 +0100 ICU: Remove dead code (non-iterator code) commit e662834ae7643141ab51c887afdbc40038494b1b Author: Adam Dickmeiss Date: Tue Dec 1 16:11:49 2009 +0100 ICU: using icu_iter for existing interface commit 3a98cd4b508df847d4aa2b7ed7c1a7213766bad3 Author: Adam Dickmeiss Date: Tue Dec 1 15:30:16 2009 +0100 ICU: iterator type commit 1cc0965c730ec9e2a9c9ccf45bb0d31cea8c1329 Author: Adam Dickmeiss Date: Tue Dec 1 15:28:36 2009 +0100 Reformat. Remove unused variable commit 5f15a8d9071bf901861d332e7d512109df57bea3 Author: Adam Dickmeiss Date: Tue Dec 1 10:52:28 2009 +0100 Reformat commit 87be3734a81ab7521e72524e2636b07a73cae345 Author: Adam Dickmeiss Date: Tue Dec 1 10:49:49 2009 +0100 Fix switch label commit a4d2915e5cdeb4da4a48c0e23793ce8bb82ad88b Author: Adam Dickmeiss Date: Tue Dec 1 10:40:17 2009 +0100 Remove TCP optim. for Solaris. Bug #3116. commit 9c0e939209ea21db376876168faa4e6563d3ac16 Author: Adam Dickmeiss Date: Mon Nov 30 15:14:49 2009 +0100 Add const modifier for two ICU utils commit 6b386515fef2b226ae495c72f1af983148b98211 Author: unknown Date: Mon Nov 30 14:58:10 2009 +0100 Add include for u_strToLower and others commit d4a367800a3abe5e9d88ab58062880e06ab3f5d2 Author: unknown Date: Mon Nov 30 14:57:55 2009 +0100 Update WRT to new sources for ICU commit 4adcf3fecf9b8d2880ee0b671c9f9d20da18ca49 Merge: 691a433e 54bd147d Author: Adam Dickmeiss Date: Mon Nov 30 14:21:24 2009 +0100 Merge branch 'icu_refactor' into yaz4 commit 54bd147d353f7f340a48a9da5c6a568446223371 Author: Adam Dickmeiss Date: Mon Nov 30 13:59:45 2009 +0100 Split ICU wrapper library into several sources commit f0b1f63415168bbc1a12f0eb3a1f03511b82c1ec Author: Adam Dickmeiss Date: Sun Nov 29 22:31:56 2009 +0100 ICU: icu_chain_step_next_token is internal commit 1d9b17a1ce08fbe1ca82ccf79a7fd847ee4f5323 Author: Adam Dickmeiss Date: Sat Nov 28 17:25:50 2009 +0100 More teformat commit 4226453c62566c807ef457f2262acb2a1b92fe71 Author: Adam Dickmeiss Date: Sat Nov 28 17:24:24 2009 +0100 Reformat commit 691a433ec15d5a3e113f2712956d2a14347a5bd2 Author: Adam Dickmeiss Date: Sat Nov 28 14:12:53 2009 +0100 Use __in64 type for 64-bit YAZ on Windows commit 5e547a006fbbdbc217b244818dcf92bc7310faef Merge: 10c562bc fc66745b Author: Adam Dickmeiss Date: Sat Nov 28 14:03:41 2009 +0100 Merge branch 'master' into yaz4 Conflicts: configure.ac debian/changelog commit fc66745b60adb55d6b9f998c0bb9d8f607953e51 Author: Adam Dickmeiss Date: Sat Nov 28 13:59:53 2009 +0100 YAZ on Windows uses newer Libxml2/Libxslt, ICU YAZ on Windows uses Libxml2 2.7.6, Libxslt 1.1.24, ICU 4.2. commit 2f577ad544711be46b63dd24fde4564d6e55d90d Author: Adam Dickmeiss Date: Fri Nov 27 22:21:29 2009 +0100 Remove unused function icu_utf16_from_utf8 commit c7959fac4deeda671f525c6e2ef47c3fc5e88759 Author: Adam Dickmeiss Date: Thu Nov 26 13:59:53 2009 +0100 Bump version to 3.0.51 commit 10c562bc3ccaaa440189f279ca562327612f87c6 Author: Adam Dickmeiss Date: Thu Nov 26 09:49:58 2009 +0100 Dont enable 64-bit on Windows commit 8b6adc336947fae13652d275d133ca3615368eed Author: Adam Dickmeiss Date: Wed Nov 25 22:02:21 2009 +0100 Bump major so version lib to 4 commit 776d524afd260ab0d671f1048ee6160ea2bc2bfd Author: Adam Dickmeiss Date: Wed Nov 25 21:04:02 2009 +0100 Update Debian package to version 4 commit 8b7d8579cda1772ab488813e3e639c6709948db1 Author: Adam Dickmeiss Date: Wed Nov 25 20:57:40 2009 +0100 GFS: remove member hits from bend_present_rr Member hits was probably added in bend_present_rr by a mistake. No applications should be using it. commit e6139770a5e990b966f7704137588f5e9cedaf25 Author: Adam Dickmeiss Date: Wed Nov 25 20:55:30 2009 +0100 64-bit BER integer commit 1141af3a859ba06226d7b3dd19eb3f83fa2f8753 Author: Adam Dickmeiss Date: Wed Nov 25 20:54:09 2009 +0100 Bump version to 4.0.0 commit 950a4ac3bd94072bb5cf880f0f411bb2c8dc80bd Author: Adam Dickmeiss Date: Wed Nov 25 16:50:31 2009 +0100 Fix description of update command commit 7996f8a4fcb85b0b7d5e8fad636e240904707a90 Author: Adam Dickmeiss Date: Tue Nov 24 14:14:57 2009 +0100 Win32 makefile: dist depends nsi commit 5ba0bc49a8588ea1df229f4f1d60a8629acf71cf Author: Adam Dickmeiss Date: Mon Nov 23 15:31:51 2009 +0100 tcpip comstack: fix leak for getaddrinfo commit 86c4a75e2ed9282be2202d9202be7f6a07dd3410 Author: Adam Dickmeiss Date: Mon Nov 23 14:53:54 2009 +0100 encode_uri_char: encode blank as %20 commit 54dc5b4629da5b10c2f3d4e3bdb7cb70c46669a5 Author: Adam Dickmeiss Date: Mon Nov 23 14:34:53 2009 +0100 URI component encode/decode SRU database Encoding of SRU database is performed by yaz_encode_sru_dbpath_odr or yaz_encode_sru_dbpath_buf. Now used by yaz-client and the ZOOM API. Decoding of SRU "path" database is performed by private function yaz_decode_sru_dbpath_odr . This in turn is used by yaz_srw_decode and yaz_sru_decode in server applications, GFS, yazproxy, metaproxy. commit b9db9bc681a9c78da31d0cb89c50f103197cfb65 Author: Adam Dickmeiss Date: Mon Nov 23 10:35:58 2009 +0100 yaz-client: honor base command for SRU Change when database setting is applied for SRU and ensure it is kept when a connection is reset. Change also the way errors are displayed for SRU (decoding of pacakges). commit c6b8edd2312a4606cc014738266059a20e3b6e61 Merge: fa4ce735 42bf8d7d Author: Adam Dickmeiss Date: Mon Nov 23 10:25:58 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 42bf8d7d53e41f6165e0eb889a7377d3482aeabd Author: Adam Dickmeiss Date: Sat Nov 21 09:27:46 2009 +0100 Refactor URI utils to uri.c commit fa4ce7352686da3893b47fde6e295cd4f558f014 Author: Adam Dickmeiss Date: Fri Nov 20 13:49:25 2009 +0100 HTTP response error, doctype + YAZ URL commit e719ab5b27bcf89d9741bbc78f6b4c372dc18e9b Author: Dennis Schafroth Date: Fri Nov 6 11:40:12 2009 +0100 removed tmp file from git commit 69c2dee55aa204cab368989b8385eda8b83bf2e2 Author: Dennis Schafroth Date: Fri Nov 6 11:38:38 2009 +0100 Added tests for pql2cql using relation and truncation. commit 43769ae204a1033190b8c044f0faa5e2341140c2 Author: Dennis Schafroth Date: Thu Nov 5 15:13:54 2009 +0100 Fixed: Removed the server option which was remedy from the copied function. Returning 0 on parse error. Returning equal on none. Added: Parsing the Truncation attribute: Left, Right and Both. No implementation of the 100 and above. commit f550c0a0456eae7e4450b3f2ed9bf6aa25eece30 Author: Dennis Schafroth Date: Thu Nov 5 09:17:56 2009 +0100 Attempt to get eclipse working commit 04a74288b3dc52703d09528428842f186ec78e43 Author: Dennis Schafroth Date: Thu Nov 5 09:15:05 2009 +0100 Fixed comment commit 7cf71345284c3f31dee1c1102a9fcc32c41480f2 Author: Dennis Schafroth Date: Wed Nov 4 16:15:23 2009 +0100 Comment fixes only commit e5ae7bef1ef7d79a07a89f329e6b603d40a44c7f Author: Dennis Schafroth Date: Wed Nov 4 15:42:50 2009 +0100 For phonetic, stem and relevance return no operator Was returning questionmarks commit 9f16968f01f8ffc7421be4bda437c69ee7e11eba Author: Dennis Schafroth Date: Wed Nov 4 15:33:58 2009 +0100 Addded a lookup of relation in the attributes. Not supporting the phonetic, stem and relevance as these are not listed on the CQL web page. commit b851307962ccc99ac9cc0c8a66b652d0afbb1ae9 Merge: 8007b02f 66809e64 Author: Dennis Schafroth Date: Wed Nov 4 15:28:40 2009 +0100 Merge branch 'master' of git://git.indexdata.com/yaz commit 8007b02f1f71539935da4895cea16fac3422e64c Author: Dennis Schafroth Date: Wed Nov 4 13:55:24 2009 +0100 Added break in reverse/'r' option check, or it would scan for iteration number. commit 66809e641d809eaa821a74db209c47deb3590f11 Author: Adam Dickmeiss Date: Mon Nov 2 22:38:30 2009 +0100 Use website for upload doc commit 9d63e51087691087c5adb6b2c6265b07e8ca0224 Author: Adam Dickmeiss Date: Mon Nov 2 14:24:31 2009 +0100 Version 3.0.50 commit 6e3d70edfadd110351b71466c51632e288e31773 Author: Adam Dickmeiss Date: Tue Oct 27 14:27:58 2009 +0100 Better support for extra data for SRU codecs and GFS The Z_SRW_PDU structure has two new members extraResponseData_{buf,len} for extra data response buffer and length. For the GFS, both request and response data (XML) is carried in extra_args and extra_response_data for the search handler. Patch by Ko van der Sloot. commit 5d493e5a4ce6300660debe3e2ad82c21592039ca Author: Adam Dickmeiss Date: Tue Oct 20 11:14:54 2009 +0200 ZOOM reject queries that cannot be char converted For queries that cannot be converted to the specified rpnCharset, ZOOM now returns a diagnostic on the client-side ('invalid query' / 10010). This fixes bug #2113. commit 3a3d99725a71801f9fc5308e21a4d7f7a325cbdd Merge: 93645abd a158bd53 Author: Adam Dickmeiss Date: Thu Oct 15 13:07:36 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 93645abd509e3ee6b6ecb5fee2abee0e12ac7d5d Author: Adam Dickmeiss Date: Thu Oct 15 13:07:17 2009 +0200 Fix do_nothing_useful example commit cad8970eb81efaf793ba96e576b09c47d141d0ea Author: Adam Dickmeiss Date: Thu Oct 15 13:06:55 2009 +0200 Fix odr_bool definition commit a158bd53b7a6c959772645e7e62c60a87dc8d733 Merge: dfcd482c b381adee Author: Adam Dickmeiss Date: Thu Oct 8 23:01:38 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit dfcd482cb9c615dd3f0410d20f5d9a398e701ade Author: Adam Dickmeiss Date: Thu Oct 8 22:57:43 2009 +0200 Fix SEGV for quit command in cmdfile If cmdfile is passed to yaz-client (option -f) and that cmdfile included a 'quit' command that would result in a memory violation. commit b381adee85c9f65bca8cb0c69eaaea0e3947d640 Author: Adam Dickmeiss Date: Thu Oct 8 13:53:23 2009 +0200 MARC21 to Endnote: omit text garbage. Match on text nodes to omit text garbage.. Makes this stylesheet work on OPACXML (with MARC21 embedded) as well. commit 5107068a489f5ea7923841d855a2145b0db94de1 Author: Adam Dickmeiss Date: Thu Oct 1 16:29:16 2009 +0200 More field mappings. Only consider surname authors. Map secondary title, call number, pages, volume, abstract. commit a796493ae0e9e16702b2a375aeb2bd2c02ab736b Author: Adam Dickmeiss Date: Thu Oct 1 15:34:05 2009 +0200 Use printfield everywhere commit 8a6fcb337caf230d1a9a674155630a659ac2719c Author: Adam Dickmeiss Date: Thu Oct 1 14:45:49 2009 +0200 Start work on MARC21 to Endnote import commit 8a980f7051e22ca1e4fac0395ed7f8647cd9eda3 Author: Adam Dickmeiss Date: Thu Oct 1 10:20:51 2009 +0200 Version 3.0.49. Update news. commit b2b333d62406d7497da3b8af5fb3a4e8f0a7b505 Author: Adam Dickmeiss Date: Tue Sep 29 15:08:49 2009 +0200 Optimize trie look for char conv. The lookup function now saves one function call for every character - to improve performance for conversion from/to MARC8. commit 1a67af25185515c813771b8f9e4d9efb020e9056 Author: Adam Dickmeiss Date: Tue Sep 29 15:07:00 2009 +0200 Optimize wrbuf_iconv_write. Use bigger temporary conversion buffer for wrbut_iconv_write.. This increases performance a bit. commit fe70606b0cc57dd49506de5d57aa4eab585fe6bd Merge: 1ccca650 a37f8195 Author: Adam Dickmeiss Date: Tue Sep 29 13:01:29 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1ccca650a133358c268ab3d0f9da58c621a663dc Author: Adam Dickmeiss Date: Tue Sep 29 13:00:17 2009 +0200 Allow Slow database wait to be set. The dummy Database Slow may be followed by an integer.. This integer specifies the time for an operation to execute - in seconds. commit a37f819598462f7ecc85b28bd56190e87e761bce Author: Adam Dickmeiss Date: Tue Sep 29 13:00:17 2009 +0200 Allow slow database wait to be set. The dummy Database Slow may be followed by an integer.. This integer specifies the time for an operation to execute - in seconds. commit a5ebdfbdd3845ef01e1c2e8d19daae12fc2f036e Author: Adam Dickmeiss Date: Tue Sep 29 12:58:40 2009 +0200 ZOOM_record_get returns 0 for bad MARC. ZOOM_record_get returns 0 pointer if a MARC record can not be decoded - unless type desired is "raw". This will prevent type "xml" from returning ISO2709 .. Which obviously can not be XML parsed. commit 5a945d96cd9da92cc3e37025d30dbee9d6f1d96e Author: Adam Dickmeiss Date: Sun Sep 27 21:21:06 2009 +0200 Dummy database Slow waits 3 seconds. commit 80be3d0580fa837e436b911e76c707e74ff9d14a Author: Adam Dickmeiss Date: Thu Sep 24 13:40:31 2009 +0200 Leak fixes for xmlquery stuff commit 4cdc954013878a64caac253e1275a5ca80782206 Author: Adam Dickmeiss Date: Thu Sep 24 13:14:24 2009 +0200 Make som internal functions static. Make a number of functions defined in xmlquery.c static. These have never been declared in a public header file (yaz/xmlquery.h) and was made public by mistake. commit dd6da3de6292dd8d087eac67c0c9a7eced8b88de Author: Adam Dickmeiss Date: Wed Sep 23 17:56:53 2009 +0200 Fix leak for odr_print of ZOOM connection. Calls to ZOOM_connection_connect would odr_print memory each time if option apdulog=1. commit f73e1241af0466a21445531a7ee442464a62e7e1 Author: Adam Dickmeiss Date: Wed Sep 23 17:51:41 2009 +0200 Updated m4 + doc/common. commit d6b903caaf638336e114be4d29e3e585330eb68a Merge: ebececde 2316d384 Author: Mike Taylor Date: Fri Sep 18 17:47:45 2009 +0100 Resolve commit 2316d384aec77ec59fa137edb6782053f325b6b4 Author: Adam Dickmeiss Date: Fri Sep 18 12:33:54 2009 +0200 GFS logs HTTP requests commit 643f3c67b24a03ea12d0d3420d78a734aedf5b1d Author: Adam Dickmeiss Date: Fri Sep 18 11:06:20 2009 +0200 Log session timeout. Reenable ASSOC_UP. The association_state ASSOC_UP was last used in YAZ 2.0.30. It was probably removed by mistake. We enable it - but for Z39.50 sessions only, so that when a timeout occurs we can send a Z39.50 close PDU again. The session timeout is now also logged at "session" log level. commit 9d01070e0ac3b559b13c76e1cd0f1b0ef17f03c0 Author: Adam Dickmeiss Date: Thu Sep 17 13:27:05 2009 +0200 Skip zero-length subfields for ISO2709. Skip zero-length subfields when decoding ISO2709. This rare case happens if a record has two FS characters in a sequence. Without this patch there would be a reference beyond char array in using_code_len fragments in marcdisp.c. commit a29cb625a72a11d5a65ee3cb423dc35193b5ca79 Author: Adam Dickmeiss Date: Wed Sep 16 13:58:26 2009 +0200 Fix install doc rule for Automake 1.11 commit ed14ef71dd40c863ee3b581bf5835406bd0ed3ea Author: Adam Dickmeiss Date: Tue Sep 15 10:18:06 2009 +0200 Link add libyaz.la to yaz-ztest (fix #3036). commit fa45ad3fa8a1dae7d030efd16ce6371777566813 Author: Adam Dickmeiss Date: Thu Sep 10 09:13:18 2009 +0200 Fix yaz-marcdump -n (bug #3028). commit 4bed35ab0329789b94620258dc57db5db37bfe02 Author: Adam Dickmeiss Date: Thu Sep 10 09:13:06 2009 +0200 MARC checkout output: No ()s in comments commit df76df087008d3d53a68958b31a018a3e292791a Author: Adam Dickmeiss Date: Wed Sep 2 17:36:14 2009 +0200 Add debian make rule commit 273716ada4a96213fb99182df2a3ee22509437b0 Author: Adam Dickmeiss Date: Fri Aug 28 14:46:21 2009 +0200 Fix quoting for upload.sh commit 1c7397ef1885c5c758ab0b6d22ed2ee45e2e24f8 Author: Adam Dickmeiss Date: Fri Aug 28 12:44:15 2009 +0200 Upload doc+dox script commit 7abc9bb8bc2dbc218e400aa7fbf635ea8257a24b Author: Adam Dickmeiss Date: Fri Aug 28 11:01:41 2009 +0200 Version 3.0.48 commit e90835e4a81a15a3f62e904f7e7771493bac9a2e Author: Adam Dickmeiss Date: Fri Aug 28 10:56:42 2009 +0200 Omit tkl rules for documentation commit 131f137354647cefe2e3494bdb946d77b8c2e959 Author: Adam Dickmeiss Date: Fri Aug 28 10:53:35 2009 +0200 zoomsh's shows 1 record by default commit 6d60541cbd1b81b23872214ad2d8ea11a54544ac Merge: 1d20ff81 30b68ac3 Author: Adam Dickmeiss Date: Fri Aug 28 10:39:43 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1d20ff81983715581b6a2cbed74878dd40895985 Author: Adam Dickmeiss Date: Fri Aug 28 10:35:44 2009 +0200 Mention new type for show command commit 30b68ac32ab0516934cee67a076b53b0cb85c6d9 Author: Adam Dickmeiss Date: Thu Aug 27 22:05:29 2009 +0200 Extend zoomsh's show command WRT type zoomsh's show command takes a new 3rd optional parameter which is the type as passed to ZOOM_record_get. Default is "render". commit ebececdef03b9ab5d4398f938fc4cc2fd5ebbaa1 Merge: c1f940fd 6985b22c Author: Mike Taylor Date: Thu Aug 20 09:16:05 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6985b22c1da4a0c4d4182a6b0570df490a913403 Author: Adam Dickmeiss Date: Wed Aug 19 21:00:27 2009 +0200 New tests cases for CQL to RPN conv commit 35a1937624d302f2a53618958036a41a88b70388 Author: Adam Dickmeiss Date: Wed Aug 19 20:56:58 2009 +0200 RPN to CQL: no use attr is treated as serverChoice commit 173f78f50536784bdc6a59d4586ba409b2b69182 Author: Adam Dickmeiss Date: Fri Aug 14 15:35:57 2009 +0200 RPN to CQL conv may use USE string attributes (bug #2978). In conversion from RPN to CQL (function cql_transform_rpn2cql_).. USE string attributes are used as a fallback if there is no match in the CQL transform (properties) lookup. Also change behavior so that unsupported use attribute if there is no match .. Ie if there is a numeric use attribute in a query and that is not matched anywhere. commit b9d525dc1bec0fb8da16a810f7115b656d4b328c Author: Adam Dickmeiss Date: Fri Aug 14 15:31:21 2009 +0200 Allow empty CQL transform in cql2pqf (and reverse) If value dash (-) is tiven as properties name, the cql2pqf program will use no properties file.. Ie just cql_transform_create rather than cql_transform_open_fname. This allows us to test RPN to CQL conversion with no properties file (-r). commit d90c4c6db3c30cabdabed5abe139f0fe13eb7c24 Author: Adam Dickmeiss Date: Fri Jul 31 15:07:20 2009 +0200 Add link to MARCXML and MarcXhange Web content commit de5a52bf8d9f21d9296ede827daf07e60a3882e7 Author: Adam Dickmeiss Date: Fri Jul 31 15:07:12 2009 +0200 Mention ISO25577 commit 1275cf769e414508b48ea85369458bb5d09a1757 Author: Adam Dickmeiss Date: Fri Jul 31 14:59:30 2009 +0200 MarcXchange NS is now info:lc/xmlns/marcxchange-v1 commit 8bb4b0631ee0f06de1cf065541bbf9537c04d726 Author: Adam Dickmeiss Date: Wed Jul 29 09:38:26 2009 +0200 Extend z_External to handle all extended services Extend z_External to handle all extended services persistentQuery, periodicQuerySchedule, exportSpecification, exportInvocation. Patch by Rustam T. Usmanov. commit c1f940fdcffa885b1336c932c624aa6f062bad38 Author: Mike Taylor Date: Tue Jul 28 10:28:09 2009 +0100 Rolling commit a85b5049b2c0e12a281695fe32bff10ef4901acb Author: Mike Taylor Date: Tue Jul 28 10:27:39 2009 +0100 Better message when receiving an unrecognised userInformationField. commit 124d3ef158982998fec69c091a35702223ab4616 Author: Adam Dickmeiss Date: Mon Jul 13 10:58:20 2009 +0200 Remove obsolete Doxygen setting commit 0046d7d79f79cbf9d03de7272d5069159aa92c24 Merge: 70db3b5f eda96f8c Author: Adam Dickmeiss Date: Thu Jul 9 16:31:51 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 70db3b5fb3e8310c587dd8ba95866f1cadf69608 Author: Adam Dickmeiss Date: Thu Jul 9 16:31:33 2009 +0200 Update to new ID URLs commit eda96f8cca72ec56811eff40f23b881b339afa56 Author: Adam Dickmeiss Date: Wed Jul 8 22:28:42 2009 +0200 Describe option -V of yaz-config commit 91a6395012ede2909078cdedea29a8d9efe60229 Author: Adam Dickmeiss Date: Wed Jul 8 14:06:08 2009 +0200 Version 3.0.47 commit e00da6d48d63d7ece2d2515ba9a9f422cf24c366 Author: Adam Dickmeiss Date: Fri Jul 3 16:20:26 2009 +0200 Allow yaz_xml2query to throw a certain diagnostic Function yaz_xml2query allows a diagnostic element in the PQF XML representation .. diagnostic@code and diagnostic@addinfo is diagnostic code and additional info respectively. commit e709ab8b395212d2d3d12ad215a3aa2272654c62 Merge: 8356ea58 82b56be0 Author: Adam Dickmeiss Date: Thu Jun 18 15:47:48 2009 +0200 Merge branch 'master' into longint commit 8356ea58313ee1f350226172cf99bfb0b7c5583c Author: Adam Dickmeiss Date: Thu Jun 18 14:09:21 2009 +0200 Introduce type for BER BOOLEAN/INTEGER . The BER BOOLEAN is now the integral type Odr_bool which still happens to be an 'int'. The BER INTEGER which used to be a plain 'int' is now typedef'd to Odr_int. This is still an integral 'int', but it may be changed to 64-bit via a one-liner in nmem.h (NMEM_64=1). The documentation, ASN-1 compiler as well as programs has been updated to use the new types. commit 82b56be0c22f75d8d40f295e09ca8b7c628fa530 Author: Adam Dickmeiss Date: Tue Jun 16 12:53:17 2009 +0200 CQL sortby parsing, no semantics yet commit 2cc3fc3eb644f09db82f30906e8d9a09601f544e Author: Adam Dickmeiss Date: Tue Jun 16 11:01:24 2009 +0200 Add type casts for tests for C++ compile commit 0d42bb835c37442eeffa77f24ad2fdf876f8f4da Author: Adam Dickmeiss Date: Tue Jun 16 10:59:41 2009 +0200 Add type casts to make YAZ C++ compile commit 6b76baf0fb5d0d437caedd8076f77f372d775758 Author: Adam Dickmeiss Date: Tue Jun 16 10:43:48 2009 +0200 64-bit BER integers. Fixes bug #114. Introduce a new type, odr_int_t, which is equivalent to 'long lont int' This type is pretty much available everywhere.. was introduced in C99. This change makes YAZ non-backwards compatible .. both source-wise and binary wise. However, it is expected to be fairly trivial to update applications. commit ae1c6f1a0a5fb745b1a5fa315869161d7480c6f7 Author: Adam Dickmeiss Date: Tue Jun 9 22:12:55 2009 +0200 Avoid #if inside macro expansion commit 6deb7e33545e987a7d3e3a090eefcd0cfc71805b Author: Adam Dickmeiss Date: Tue Jun 9 10:25:03 2009 +0200 CCL: test case for bug #2895 commit 135acd59310ef3892e9b86b70e3ead32e53eeabb Author: Adam Dickmeiss Date: Tue Jun 9 09:12:23 2009 +0200 Rename frontend.xml to server.xml commit 50910e85f05204a853e7e6975b1e3ef0adf1dbe6 Author: Adam Dickmeiss Date: Tue Jun 9 09:12:09 2009 +0200 Ignore program tstxmalloc commit bdf169109f6afec0588dcac3dbc35d961b073105 Author: Adam Dickmeiss Date: Tue Jun 9 09:07:16 2009 +0200 Fix unix socket example and reformat commit 0d8c31b34cd1bcf78c44ad669242f3967c76b379 Author: Adam Dickmeiss Date: Mon Jun 8 15:49:18 2009 +0200 Version 3.0.46 commit 18968faa568a744d9d1ce1421202f03e8905ae1a Author: Adam Dickmeiss Date: Mon Jun 8 15:48:31 2009 +0200 Version 3.0.46 commit c526818a49e2d8e469137afd50ee85e683484496 Author: Adam Dickmeiss Date: Mon Jun 8 15:45:26 2009 +0200 Summarize news commit 55bc5787ba3e68ae7e130866f95e70af6b98c6d8 Author: Adam Dickmeiss Date: Mon Jun 8 15:37:22 2009 +0200 ZOOM_record_get only returns OPAC record if present commit 43454d6c60e8f2d0d7d6208ec2436c55a6a67a0c Author: Adam Dickmeiss Date: Mon Jun 8 14:45:13 2009 +0200 Refactor wrbuf tmps for ZOOM_record_get commit 88c261910ace93cd45d25bfbb21ad32f8225ece1 Author: Adam Dickmeiss Date: Mon Jun 8 14:41:40 2009 +0200 Remove unused local member wrbuf_opac commit 486ea665463289f7ffb5eeabdf9c80dab3e07ee8 Author: Adam Dickmeiss Date: Mon Jun 8 14:35:10 2009 +0200 Refactor ZOOM record render code and fix #2892. Refactor code for ZOOM_record_get. The "xml" render for OPAC records now renders the full OPAC. Previously only the MARCXML bibliographic part was rendered (the bibliographic record). Pazpar2 relies on this functionality and this should fix bug #2892. commit b4f634a3359a330e6f74c51365c9c62d0c5039b2 Author: Adam Dickmeiss Date: Wed May 20 11:08:16 2009 +0200 post/postrun calls ldconfig commit 7657c9ac7c3d4555dd0bd1043a7b0d475e74e342 Author: Adam Dickmeiss Date: Wed May 20 10:09:52 2009 +0200 Fix RPM build for RHEL 5.3 RHEL 5.3 does not have package tcp_wrappers-devel . Only tcp_wrappers which includes both run-time and lib/headers. Fedora core 9 differs from RHEL 5.3 in that respect. commit d3bfd05c8ad9e4f9b6f58a9510778079eab446fc Author: Adam Dickmeiss Date: Wed May 13 09:21:41 2009 +0200 yaz-config -V shows version + SHA1 (Bug #2829) commit cf6e35300ec51e0bad1424aba7e83225fd168f8b Author: Adam Dickmeiss Date: Thu May 7 20:55:04 2009 +0200 Prefer IPV6 addresses over IPV4 - should refix bug #2350. commit 3ceb91da546fb4ef66bbea57b0ef219b3af21f65 Author: Adam Dickmeiss Date: Tue May 5 13:29:32 2009 +0200 Small fix for encoding of advancegreek commit 72942b6650af98632103a0908882b71c4113e153 Author: Adam Dickmeiss Date: Fri May 1 11:00:54 2009 +0200 buildconf.sh uses only Libtool flags when present commit 63ae67e43ae6770d77e5d8b925d71dd2e4e28ee1 Author: Adam Dickmeiss Date: Fri May 1 09:48:52 2009 +0200 Avoid double display of SRU/SRW records (bug #2798). commit 29b3b3213c4c8ad38bab054b56f8b70f1b14d67a Author: Adam Dickmeiss Date: Thu Apr 30 10:02:39 2009 +0200 Doxygen comments for xmalloc utils. Reformat commit 3594baeb76423dcee4a138f54bc1d5b5b4477fe3 Author: Adam Dickmeiss Date: Thu Apr 30 09:04:34 2009 +0200 Added xstrndup (similar to strndup) commit 16ae6b899b1eb60c570650b7acc8e673531f5510 Author: Adam Dickmeiss Date: Wed Apr 29 11:44:06 2009 +0200 Option auto_reconnect=on really reconnects. commit 19a9c4f58563f2bb28d69647096491ae965fd377 Author: Adam Dickmeiss Date: Wed Apr 29 10:43:34 2009 +0200 Fix bug #2770 - avoid length limit for auth parameters. commit 4fc0e0c70a077abd8009e139315a54a0e0ddd293 Author: Adam Dickmeiss Date: Tue Apr 14 11:44:03 2009 +0200 Avoid GCC warning about conversion from integer to ptr. Add intermediate cast to size_t from int to avoid GCC warning: cast to pointer from integer of different size . commit ac63793036c6d830d002241a750691b26235b3e1 Author: Adam Dickmeiss Date: Mon Apr 6 23:30:44 2009 +0200 Avoid null ptr ref for for yaz_poll errors. When yaz_poll returns error (-1) and errno is not EINTR the code previously assumed seshigh IOCHAN (client_link) and called cs_close.. In the mother process, however, the IOCHAN data is not this type. Code now prints a warning and resumes processing and does not use iochan_getdata. commit 62f4f43aa7b97890d7c4bf776e3749f25b2e1c5a Author: Adam Dickmeiss Date: Tue Mar 31 21:44:42 2009 +0200 Avoid redundant dependency commit 782dc736e899db69b72d388a747623a78fc90b17 Author: Adam Dickmeiss Date: Tue Mar 31 21:19:13 2009 +0200 Version 3.0.45 commit 859fd203f5075cca7d000ac4558795c662c9ba07 Author: Adam Dickmeiss Date: Mon Mar 30 16:23:56 2009 +0200 Update news commit 19411dcc2419807b0b81e7ad05f63880eba58d22 Author: Adam Dickmeiss Date: Sun Mar 29 21:02:07 2009 +0200 Reindent commit bd3fc10785d649f854929dfab90d8a002d55572c Author: Adam Dickmeiss Date: Sun Mar 29 21:01:55 2009 +0200 Reindent commit 4e3f7be8266559e07dc01ae5d6aba31d30b8bd44 Author: Adam Dickmeiss Date: Sun Mar 29 20:53:05 2009 +0200 Fix doc WRT ZOOM opts start, doc (bug #2198) commit 9748d1f21b8a1c8c6f14ef9384c0e4fdb2d41585 Author: Adam Dickmeiss Date: Sat Mar 28 08:00:09 2009 +0100 Fix trace prints for buffer ptrs commit 5fedb171148c114f2488f5bff941942226b31eef Author: Adam Dickmeiss Date: Sat Mar 28 07:51:24 2009 +0100 Fix bug #2709: TCP connect returns Invalid argument. The getaddrinfo result (struct addrinfo) is now properly updated in the sp->ai member .. Hence socket and connect uses same address. The poking for IPV6 address types, bug #2350, is now useless. commit 625aa16bd5f85153e468ddbfb8d213937890dd30 Author: Adam Dickmeiss Date: Thu Mar 26 14:25:12 2009 +0100 Add yaz_clone_z_RecordComposition. commit 4af16c3b47e4d3f6192345d27248cffe87aa02ec Author: Adam Dickmeiss Date: Thu Mar 26 11:29:36 2009 +0100 Bump version to 3.0.45 due to new functions. commit de9864f98c5fec785fb0e4cb05cf9db1e7a7e4af Author: Adam Dickmeiss Date: Thu Mar 26 11:27:24 2009 +0100 Rework copy/clone of ASN.1 type utilities. The copy/clone of a type, such as Z_RPNQuery, is implemented as a macro. The following funcions are defined at this stage: yaz_clone_z_{Query,RPNQuery,NamePlusRecord}. commit 3f316a4c208765a38b34e19704450cf0f34adef7 Author: Adam Dickmeiss Date: Wed Mar 11 22:22:35 2009 +0100 Fix compilation for mingw. Two sources files failed to compile on GCC mingw (Minimalist GNU for Windows). For oid_db.c the problem was that GCC reported 'initializer element is not constant'. And the fix is to use initialize (use) at run-time. For timing.c the problem that HAVE_SYS_TIME_H and WIN32 was both defined - and the code was not prepared for that. commit d16f37add45152d0d3b786a4676577a57e4f4139 Author: Adam Dickmeiss Date: Tue Mar 10 14:47:06 2009 +0100 Include yaz/errno.h in source that uses YAZ' errno utils. commit 13356a0cb532b646421e0169aef11d1bd25e89f8 Author: Adam Dickmeiss Date: Tue Mar 10 12:02:07 2009 +0100 Moved errno utility declarations to errno.h. commit f0128dd11d08d79384a97a13e44476769b061f4f Author: Adam Dickmeiss Date: Tue Mar 10 11:19:39 2009 +0100 Error utils in separate file and _REENTRANT mode. The functions yaz_errno / yaz_set_errno / yaz_strerror is defined in errno.c rather than nmem.c. Also _REENTRANT is always set to ensure that access to errno is thread-aware. commit 1428270503079d0ceb1ea113e3ec2aa175a0e52a Author: Adam Dickmeiss Date: Tue Mar 10 09:02:54 2009 +0100 Updated m4. commit 588dde23995415ad84f97e50194ef943fadce6a9 Author: Adam Dickmeiss Date: Tue Mar 10 09:00:20 2009 +0100 Honor charset for raw records (ZOOM_record_get). For MARC and string records (octet aligned and SUTRS) the charset option now takes effect (if given). commit 4efb9de61a4284830d3dde10a992a42067879c84 Author: Adam Dickmeiss Date: Fri Mar 6 15:34:48 2009 +0100 Fixed args passing with blanks for Windows Service commit 0e3cbe2d2a8508c66059eae870b15a65d0059a4a Author: Adam Dickmeiss Date: Mon Mar 2 05:23:07 2009 +0100 Output to real file rather than .tmp commit 1fb26db29805d4822763c205358f394725b0f02c Author: Adam Dickmeiss Date: Mon Mar 2 05:18:58 2009 +0100 Output file generated at very end rather than at beginning. Output is produced to a temporary file (.tmp) and then renamed at very end if operation is succesful. commit 2ffab517f033bf6c35de72616de5c05e0b43319f Author: Adam Dickmeiss Date: Mon Mar 2 05:17:25 2009 +0100 Doxygen comment fixes commit 64d15b4ed1a24c3064f4fa3c50668ea99b58111b Author: Adam Dickmeiss Date: Sun Mar 1 23:27:34 2009 +0100 Note about icu_I18N.h being unstable commit 47db800079d3df8e8adfd93b466795d0803dabe8 Author: Adam Dickmeiss Date: Sun Mar 1 23:26:46 2009 +0100 Document a little. commit dd44ae98149d0a96ca8c601a0c46cd17b1eb6c83 Author: Adam Dickmeiss Date: Sun Mar 1 23:06:51 2009 +0100 Function icu_chain_create is now private. This function is internal to ICU. It is now declared in icu_I18N.h rather than icu.h. commit 6cec9293846dc1aba8c0e2f5e46fc029a727f4ed Author: Adam Dickmeiss Date: Sun Mar 1 23:04:09 2009 +0100 Document yaz_errno utils commit 840854a00aa5c59f4a492f9e002e0396ba52ba45 Author: Adam Dickmeiss Date: Mon Feb 23 23:58:53 2009 +0100 Removed redundant statement commit f6a9c895dedabe8cbaaca0377cf9dbbfdf05368e Author: Adam Dickmeiss Date: Mon Feb 23 17:10:57 2009 +0100 Updated doc/common. commit 30be9a32fd26a2d08aa4413942408500c93ad4a3 Author: Adam Dickmeiss Date: Sun Feb 22 13:10:53 2009 +0100 Disable YAZ' own log rotate by default (no 1 GB limit). The variable l_max_size which specifies the log file limit is set to 0 (DISABLED): This is due to the fact that YAZ is most often deployed using logrotate. Also YAZ can not perform log rotate because of unsufficient permissions (setuid). commit d1c53252793e37efda0b7432b18a7c79b9810d86 Author: Adam Dickmeiss Date: Tue Feb 17 14:33:26 2009 +0100 Update version in NEWS commit 6c935519b45ef77520aad76aa0ec8d3fb6540057 Author: Adam Dickmeiss Date: Tue Feb 17 14:28:30 2009 +0100 Version 3.0.44. commit fee4224d6897ad849d74587d99a1a0f7e137128e Author: Adam Dickmeiss Date: Tue Feb 17 14:11:26 2009 +0100 Fixed bug #2530: yaz listener broken on Vista. The two remaining arguments to accept is now NULL ptrs.. The arguments (for Unix) makes the accept call return an error about invalid supplied pointers. commit 442f9815fa99344367af117cba29f2c0e209a0cf Author: Adam Dickmeiss Date: Mon Feb 16 23:05:31 2009 +0100 Dont assume error if fgets returns NULL commit 7a85a44b7f83777704755a13923df36b62ff0257 Merge: e32b8a75 4320117d Author: Adam Dickmeiss Date: Fri Feb 6 08:36:49 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit e32b8a753ae6ce8847c4b5307e726178e4ee3bc7 Author: Adam Dickmeiss Date: Thu Feb 5 15:14:24 2009 +0100 Fixed typo in transliterate rule commit 4320117d5dfc1cca841025c4ceb086c92c206524 Author: Adam Dickmeiss Date: Wed Feb 4 22:09:09 2009 +0100 One more redundant line. commit 6c8a66665c0c64572b5461a3050b4215240dab43 Author: Adam Dickmeiss Date: Wed Feb 4 22:04:12 2009 +0100 Removed unused file. commit b4ddd82f2554fd155ab38b078428cc4b0a519ee4 Author: Adam Dickmeiss Date: Wed Feb 4 22:04:02 2009 +0100 All debian build ignores in debian/.gitignore commit 9a93f996a29da6535a581a7278019e72ee07d188 Author: Adam Dickmeiss Date: Wed Feb 4 14:33:51 2009 +0100 Spell fix commit 25294d937c02e665569c37d3dd90e459bc363a2d Author: Adam Dickmeiss Date: Wed Feb 4 14:30:43 2009 +0100 List danmarc as supported encoding commit 2f13c9a407fe345dfe13ef8647ebba02ca519089 Author: Adam Dickmeiss Date: Wed Feb 4 13:55:12 2009 +0100 Describe character set semantics a little more commit abc5fc91e4340a8afe42c80ad0baec86dbe76c3a Author: Adam Dickmeiss Date: Wed Feb 4 13:54:42 2009 +0100 Refer explicitly to yaz-iconv man page commit 7fb420029552be59a80c8deadb638b4b8780d5d8 Author: Adam Dickmeiss Date: Wed Feb 4 13:39:58 2009 +0100 Update NEWS commit 890968dfc0149a8f59f4afb8055e18a0ff734595 Author: Adam Dickmeiss Date: Wed Feb 4 13:39:44 2009 +0100 Fixed reference to yaz-iconv man commit 0e1c21de5892acadabc0e1b01606245091c4d275 Author: Adam Dickmeiss Date: Wed Feb 4 13:39:06 2009 +0100 fixed list of encodings (added listitem tags) commit aca553f92283c93d9014be9d77b4b7481738e0df Author: Adam Dickmeiss Date: Wed Feb 4 10:56:45 2009 +0100 Removed unused source file. commit 49e8c1a3167e2ea965d1787b89e3ac731b590ad9 Author: Adam Dickmeiss Date: Wed Feb 4 10:56:27 2009 +0100 List encodings supported by YAZ. Bug #2513. commit e5babaef0f0a438f4372ee4373c90d37fdc7ff1e Author: Adam Dickmeiss Date: Wed Feb 4 10:56:08 2009 +0100 yaz-marcdump refers to yaz_iconv commit a05d96bd6dd1151bac4f0194f2bcc44e8771b558 Author: Adam Dickmeiss Date: Wed Feb 4 09:02:53 2009 +0100 Update NEWS. commit ded3889a5c015e8adbb3addb0a5ebbd85fe20bc2 Author: Adam Dickmeiss Date: Wed Feb 4 09:00:44 2009 +0100 Revert "Removed OID record syntax application-xml." Since applications might have used this symbol we keep it to avoid a so-name change. This reverts commit 9507c6ac14596ef68763e7ec8c08e92838ac44da. commit a19321599ba751f65f655a69c73ac05c72be22b3 Merge: df8b0a83 ecc54f13 Author: Adam Dickmeiss Date: Tue Feb 3 16:56:53 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit df8b0a83e237b1f7ff6722a2f10add5cafceeb9d Author: Adam Dickmeiss Date: Mon Feb 2 13:41:57 2009 +0100 Update news. Version 3.0.42. commit 860f937a09351b59294bd9b6ed97be8762e77ab0 Author: Adam Dickmeiss Date: Mon Feb 2 13:32:20 2009 +0100 Bump year to 2009 commit f0dcc975f66dc2e17e356497419b09cc94baddba Author: Adam Dickmeiss Date: Mon Feb 2 13:29:10 2009 +0100 Bump year commit ecc54f133ed87dee5854f87c771eaa75c2ab8fc7 Author: Adam Dickmeiss Date: Fri Jan 30 19:47:29 2009 +0100 Fixed missing SSL libs for --libs output commit 0f88139455a3aeffeca0a5650ca5d3d99abc1c17 Author: Adam Dickmeiss Date: Thu Jan 29 10:09:57 2009 +0100 Added member named_result_sets for init handler struct for the GFS. This allows a server to disable named result sets. Until now all negoation was handled exclusively by the GFS(server) and the client. The server implementation had no way to tell the system that it does not handle named result sets. commit 9507c6ac14596ef68763e7ec8c08e92838ac44da Author: Adam Dickmeiss Date: Thu Jan 29 09:12:59 2009 +0100 Removed OID record syntax application-xml. The OID record syntax application-xml was added 1998 probably because it was registered somewhere. It is no longer registered and of no use. commit 5b5d2ba5455538ccc356e208476dc7aeb3703421 Author: Adam Dickmeiss Date: Tue Jan 20 16:45:06 2009 +0100 Added support for rule-based transliterator for ICU wrapper of YAZ commit 362a3c56893f05cb1417cc23e24fc165303486dc Author: Adam Dickmeiss Date: Tue Jan 20 15:50:47 2009 +0100 Rename normalize to transform commit 13dbac38d069fe6c5ebe3e224e6a12bac907c140 Merge: 36f0d152 0aca0f8f Author: Adam Dickmeiss Date: Tue Jan 20 13:07:51 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 36f0d152f5f2b4d6ef4bcb01a041f4c16c1deaf8 Author: Adam Dickmeiss Date: Tue Jan 20 13:07:39 2009 +0100 Fixed bug #1902: yaz-icu XML output commit 5dd6d2f41f8db534e05a86632bdc78b6d4186435 Author: Adam Dickmeiss Date: Tue Jan 20 12:58:01 2009 +0100 Print ICU error when ICU can not be configured commit 8be4cad726760fbc18b83b1ae8af3790dcf31c81 Author: Adam Dickmeiss Date: Tue Jan 20 11:44:50 2009 +0100 Make YAZ checks Emacs friendly commit 0aca0f8f0d5849d6ed040f864713b8ac7d696304 Author: Wolfram Schneider Date: Mon Jan 19 09:46:36 2009 +0000 Docu update: When building from Git, you need the debian package 'pkg-config' as well. commit bf0ac0c751ab677318e0a92a8e40145e0e4623b9 Author: Adam Dickmeiss Date: Fri Jan 16 15:55:13 2009 +0100 BITSTRING value shows value. Bug #2346 commit 379504a233e3e2cc85bca1e7b6d864f1395aec7c Author: Adam Dickmeiss Date: Thu Jan 15 13:31:20 2009 +0100 Updated footer comment commit 4a23f09ebdcc59ef94e50d385cc5b17f42d8845d Author: Adam Dickmeiss Date: Thu Jan 15 13:06:06 2009 +0100 ISO2709 decoding: skip control characters from indicator data ISO2709 indicators that hold control characters are marked invalid and the control characters are now skipped. commit 6135f5d048a8bbbc29d14deb9512202c777bd6bc Author: Adam Dickmeiss Date: Tue Jan 13 15:59:17 2009 +0100 Omit sort key by default in yaz-icu's output Omit sort key by default in yaz-icu's output. It may be enabled with option -s. The sort key was used in previous tests. But since it is encoded differently between ICU version we omit it in our tests. commit 98f7557d475021fb087f75423468226c2ce3df20 Author: Adam Dickmeiss Date: Tue Jan 13 15:55:20 2009 +0100 Cosmetic commit 210462cd20476ec54208ccf3a65f15a32fad5bcc Author: Adam Dickmeiss Date: Tue Jan 13 15:54:56 2009 +0100 Cast integer to long for print commit 0edd22d3d3fb9bafa8795815517e9ad51d51641f Author: Adam Dickmeiss Date: Tue Jan 13 15:53:51 2009 +0100 Allow combined single char options (again) commit 3a54a02da2f546427c4e5fe57f952c97f54437ea Author: Adam Dickmeiss Date: Tue Jan 13 11:53:02 2009 +0100 More requirements for libyaz3-devel commit 3fe8d724fd45258f340a8396877aa93bd0a93d00 Author: Adam Dickmeiss Date: Tue Jan 13 09:14:58 2009 +0100 Removed yaz.spec.sles commit ad75101cb137ab43f2b7e6a0dab7b1efe30b02a7 Author: Adam Dickmeiss Date: Mon Jan 12 22:33:04 2009 +0100 Fixup for BuildRequires: tcpd-devel or tcp_wrappers-devel commit b3d1527a6d94b1af17bf36c7781be9679c3fbfc9 Author: Adam Dickmeiss Date: Mon Jan 12 18:52:44 2009 +0100 Utility yaz-marcdump got option to display YAZ version (-V) commit 2788a4851b551e1a3efb320a2878b809f2d8a9d7 Author: Adam Dickmeiss Date: Fri Jan 9 14:38:14 2009 +0100 Happy new year commit e91219e4b27bbd16a13c3f41012317c002e8d17b Author: Adam Dickmeiss Date: Thu Jan 8 15:52:30 2009 +0100 Added RPM spec for SUSE Linux Enterprice Server commit f8ac262931df40154fdae9629eba68c4ea3d5699 Author: Adam Dickmeiss Date: Thu Jan 8 15:52:16 2009 +0100 TODO no longer part of dist commit 8526300b58a12ecbb6e48b320839e28e4460a925 Author: Adam Dickmeiss Date: Thu Jan 8 15:50:45 2009 +0100 Allow YAZ to use ICU 3.4 commit f1e17f8a159c3536d122ff78c799bac16c298d39 Author: Adam Dickmeiss Date: Mon Jan 5 12:04:44 2009 +0100 Updated to use VERSION_HEX rather than YAZ_VERSION_HEX commit 83ba04bfd14a9089745f91ed45d8817339794e5e Author: Adam Dickmeiss Date: Mon Jan 5 11:19:32 2009 +0100 Renamed AC var YAZ_VERSION_HEX to VERSION_HEX commit 125918b4266de689eeee8067074a7da24c92e4e1 Author: Adam Dickmeiss Date: Tue Dec 30 14:31:18 2008 +0100 Ignore tst_rpn2cql generated test program commit ca68610f410cfe2134cf9e6a2437df7b2ea3abdf Author: Adam Dickmeiss Date: Tue Dec 30 14:29:34 2008 +0100 Added new ICU test case which illustrates removal of diacritics commit 32f85d9c71d4fd3d8ab44bd1651c77ddae55fbe6 Author: Adam Dickmeiss Date: Tue Dec 30 14:27:48 2008 +0100 Added other test text 'Carre' + combining acute accent commit 638b4a01b1bf9e1306b215dc0b400b0696631e15 Author: Adam Dickmeiss Date: Tue Dec 30 14:24:47 2008 +0100 Name .diff file differently commit 06fcbb2ac6af85e8a659ff9b000e16455a5cb847 Author: Adam Dickmeiss Date: Tue Dec 30 12:24:32 2008 +0100 Reformatting commit e8fb3033342e237ed26a45aa2147e1aacd96b4dd Author: Adam Dickmeiss Date: Tue Dec 30 11:57:48 2008 +0100 Beef up test a bit commit d9b58094a0cf30748e32337fa9f460f8f0273826 Author: Adam Dickmeiss Date: Tue Dec 30 11:57:33 2008 +0100 Removed set -x commit b58a6230156eca8cf241de17c2eb3b33057c102d Author: Adam Dickmeiss Date: Tue Dec 30 11:54:52 2008 +0100 Added new regression test using yaz-icu commit e8d49a7dea8eec8a8d588fca7464f29f4db5e838 Author: Adam Dickmeiss Date: Tue Dec 30 11:36:50 2008 +0100 yaz-icu returns exit code 3 if ICU is not present. commit 4e27827b16b9820a74e494a2b0c78bc7f3b21618 Author: Adam Dickmeiss Date: Tue Dec 30 11:04:02 2008 +0100 Updated doc/common. commit 8b373aba10e874dc00f5020cb40f490dbb930a88 Author: Adam Dickmeiss Date: Tue Dec 30 11:00:56 2008 +0100 Updated to latest doc/common. commit 22e07fa6a2c78af783e584a3002f6d61848f57aa Author: Adam Dickmeiss Date: Tue Dec 30 11:00:40 2008 +0100 Debian 3.0.41-1. commit 9fc92ab4c14e951aa91c545fee1aac5037979f8d Author: Adam Dickmeiss Date: Mon Dec 29 20:36:52 2008 +0100 Updated doc/common. commit 13a673b4f079ff0ba43b76cd07c1e34c3c932a2a Author: Adam Dickmeiss Date: Mon Dec 29 16:54:52 2008 +0100 Version 3.0.41. commit 9fdcce5bf33b647a635631f96f295394d729df7b Author: Adam Dickmeiss Date: Mon Dec 29 16:53:09 2008 +0100 Fixed test that makes VERSION_SHA1 appear on dist versions too. commit 22dca6e3b2a29f15ddbd3c2489e67aef608c3545 Author: Adam Dickmeiss Date: Mon Dec 29 10:53:41 2008 +0100 Version 3.0.40-1. commit 9f4ccf4f01cb18cc7e18f1db22e81be12fbe71be Author: Adam Dickmeiss Date: Mon Dec 29 10:53:29 2008 +0100 Added bib1-attr to RPM commit 394286df42e6e2c01e5b1b446ae1cf8d0b117f35 Author: Adam Dickmeiss Date: Mon Dec 29 10:51:08 2008 +0100 Changes commit 773a2092c54343d97a0315efa65ebcc75da7e122 Author: Adam Dickmeiss Date: Sun Dec 28 11:03:01 2008 +0100 Added bib1-attr manpage commit aee1a87eeda33b4b049e9fc0a0a826b9c14018cc Author: Adam Dickmeiss Date: Sun Dec 28 10:59:53 2008 +0100 Bib-1 man entry is now called bib1-attr (7) commit 6aabd5dc6f4ed207efe6ba163ddd01c32589673d Author: Adam Dickmeiss Date: Thu Dec 25 23:48:06 2008 +0100 Added Bib-1 Attribute Set man page. commit 01377b739732c93e763a767076768f0b6589c42a Author: Adam Dickmeiss Date: Thu Dec 25 23:47:17 2008 +0100 Removed synopsis from yaz man page commit ccdfc2c2b70849ee395f741ba7de1c1c92b5b9cf Author: Adam Dickmeiss Date: Thu Dec 25 23:46:23 2008 +0100 API libs version 3.0.39 commit a041518cb98067d3f7c7130258b09de83cde8821 Author: Adam Dickmeiss Date: Thu Dec 25 21:31:24 2008 +0100 Use ZOOM_EVENT_MAX for size of ZOOM event array commit df4b0f88de7de6ffcba31c26a0f0c94a15cbf2f8 Author: Adam Dickmeiss Date: Thu Dec 25 21:30:54 2008 +0100 Define ZOOM_EVENT_MAX (max event ID) commit 8bc333b208e7afd5a95ea6f553ae5681814b30d7 Author: Adam Dickmeiss Date: Thu Dec 25 15:41:09 2008 +0100 Debian 3.0.39-1. commit d65313c102154dc9f28a8b4dbbbee0278c2bd1cc Author: Adam Dickmeiss Date: Thu Dec 25 15:24:39 2008 +0100 Bump version to 3.0.39 commit 68398183c3b25120b484681482f461a1da4c6a36 Author: Adam Dickmeiss Date: Thu Dec 25 15:20:45 2008 +0100 Function icu_chain_xml_config allows certain obsolete elements. Function icu_chain_xml_config allows certain obsolete elements which was present in first version of ICU wrapper made for Pazpar2. The elements 'index' and 'sortkey' are ignored and a warning is issued. The element 'normalize' behaves as 'transform' but a warning is issued. commit 83178ddb2e40a3c9dbde8b7b3e6cf5e8918da990 Author: Adam Dickmeiss Date: Thu Dec 25 15:20:00 2008 +0100 Missing icu lib in static mode for --libs commit edc84a7af5e2b8e3f937fae5fd894f1a0054a96c Author: Adam Dickmeiss Date: Thu Dec 25 13:30:54 2008 +0100 Call autoheader when needed commit 98db267fe0117e2bff00e044ccbee8f37dd69548 Author: Adam Dickmeiss Date: Thu Dec 25 13:04:43 2008 +0100 Mention Git instead of CVS. Use [ instead of test where appropriate. commit 76f5f8bd7124c8643be25e0d9838e5897e19df8a Author: Adam Dickmeiss Date: Thu Dec 25 12:58:10 2008 +0100 Fixed check for custom cflags commit 11698a8c1cce5556f3c4dc803c94d2c1f3b60b23 Author: Adam Dickmeiss Date: Thu Dec 25 12:55:30 2008 +0100 Disabled read_iso5426s because it is not in use commit 3c03c66fdcf640bbf4c611a48bf8c74989d077f6 Author: Adam Dickmeiss Date: Wed Dec 24 01:15:14 2008 +0100 Added a few type casts to avoid warnings. commit f2b3c045e79a30c889ffdddb408d9d08ab8d7e01 Author: Adam Dickmeiss Date: Wed Dec 24 01:15:11 2008 +0100 Changed type to avoid warning commit c92a1e74838a25214df478878806c7fb48167db5 Author: Adam Dickmeiss Date: Wed Dec 24 01:13:42 2008 +0100 Removed unused variable commit dda6b9f4ca21d43c68d4c667b4d8e6d1bdaba095 Author: Adam Dickmeiss Date: Wed Dec 24 00:58:54 2008 +0100 Refactor getting subfield length to separate function. commit 4ce7bffcae2b1faaa0fb5d74eca9aeeb7f6d0c6e Merge: a5ac9b8b d96ec51b Author: Adam Dickmeiss Date: Wed Dec 24 00:43:52 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit a5ac9b8b5662012c69c5e7e5287c5ffc0c7a1f25 Author: Adam Dickmeiss Date: Wed Dec 24 00:36:05 2008 +0100 Fixed bug #2352: yaz-marcdump crashes for certain record. commit d96ec51bf86e8c38213abf5df1812de901f60bfa Author: Adam Dickmeiss Date: Mon Dec 22 14:40:43 2008 +0100 Choose IPV6 over IPV4 addrany addresses (bug #2350). commit f34dd5fd60d0e7433f6f5ed46effdd8c8758b269 Author: Adam Dickmeiss Date: Mon Dec 22 14:40:35 2008 +0100 Extract static/private stuff too commit a679666e56f9f6ea19e4c22e36089ccb3716dd0f Author: Adam Dickmeiss Date: Tue Dec 16 14:39:05 2008 +0100 Include sys/socket.h, arpa/inet.h commit 4e58607ee6ef2a5d183262b9a87415fed2311c85 Author: Adam Dickmeiss Date: Mon Dec 15 15:41:34 2008 +0100 Added Danmarc character set decoder (bug #2345). commit 8377081b9917f820ae91f17e24743c84ef0cfc4d Author: Adam Dickmeiss Date: Fri Dec 5 11:45:19 2008 +0100 Fixes for sys/stat.h on Windows. commit b3b89ab95e626286ad2fe9ccf5b589f153e5aa37 Author: Adam Dickmeiss Date: Fri Dec 5 11:34:45 2008 +0100 More explicit use of #if HAVE_...header's. commit 97bc202a55195296178a5ca9f2cb10e8b6de5ddd Author: Adam Dickmeiss Date: Fri Dec 5 11:34:20 2008 +0100 Set AC_INCLUDES argument for AC_CHECK_HEADERS commit 838af985fb73373d559a3445f07d88109afbfd51 Merge: 5a3a3e35 0e7513fa Author: Adam Dickmeiss Date: Mon Dec 1 09:48:29 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 5a3a3e3534d174cbc3b500a499611150bef8fc30 Author: Adam Dickmeiss Date: Mon Dec 1 09:46:10 2008 +0100 Simplified ZOOM C's implementation strings a bit. The implementationId (81) is no longer repeated, i.e. 81 instead of 81/81 but it may still be set by an application. The implementationVersion no longer includes CVS Revision. The Git SHA1 will do. commit 0e7513faa0f309121e7800827685f9bdccd2eeb9 Author: Mike Taylor Date: Thu Nov 27 16:10:09 2008 +0000 Ignore some files generated by the Debian-package build process. commit a624e2e9e2271292147cb432411464bd5eab8da6 Author: Mike Taylor Date: Thu Nov 27 16:07:23 2008 +0000 Add notes on required packages and building for Debian. commit e6c9d928f6626a7eea0588684f6ec0908604d0e4 Author: Adam Dickmeiss Date: Tue Nov 25 09:05:18 2008 +0100 Summarize more changes commit 50606c10e645308dddb9c8d0e676b33ce38f1df8 Author: Adam Dickmeiss Date: Mon Nov 24 12:13:48 2008 +0100 Disable xslt/exslt if --without-xml2 is given commit 355f20f785e6cd738a738da688ea038ac232a87b Author: Adam Dickmeiss Date: Mon Nov 24 12:07:38 2008 +0100 Updated to latest m4. commit 66c99e7681fc1922a5b2e662a6d37720c4f4bac9 Author: Adam Dickmeiss Date: Mon Nov 24 11:32:33 2008 +0100 Updated to latest m4 master. commit ab1058c9b1c86b6364e38e5bd47bfaf4eba7354c Author: Adam Dickmeiss Date: Mon Nov 24 11:29:25 2008 +0100 Updated to latest m4. commit a98ae0230792c8fba1df2e91cc0b3417ea2b144f Merge: 0fd57a34 3a36217e Author: Adam Dickmeiss Date: Mon Nov 24 10:07:22 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 3a36217ed64fc7c30c3c886d85d4f337fe2f9282 Author: Adam Dickmeiss Date: Mon Nov 24 10:07:10 2008 +0100 Got rid of a few warnings WRT signed/unsigned types commit 4936dff1c451bc76df80ddad8557c2396526f843 Author: Adam Dickmeiss Date: Mon Nov 24 09:57:31 2008 +0100 Using fwrite rather than write commit 0fd57a348f3f789eae517a19ee83c34b5812636a Author: Adam Dickmeiss Date: Thu Nov 20 13:49:12 2008 +0100 Updated news about ISO5426 support. commit a71313f1155a0e635be2263f4bbec94bb8b3a05b Author: Wolfram Schneider Date: Wed Nov 19 14:53:28 2008 +0100 Workaround for tréma <-> umlau, map / U+034F COMBINING GRAPHEME JOINER (CGJ) For the Latin script, the Unicode Standard does not distinguish identically appearing diacritical marks with different functions. commit 7887bf02371157d3db6e769506e57c13b7b076cf Merge: 2e9b1a9f 7a050afb Author: Wolfram Schneider Date: Tue Nov 18 23:48:47 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit 2e9b1a9f5eb9aa8524241772704e9828bd0de420 Author: Wolfram Schneider Date: Tue Nov 18 23:45:34 2008 +0100 cleanup & tidy commit ecc1ee5b177fdc11ed531dfe13b5c3aae52b2843 Author: Wolfram Schneider Date: Tue Nov 18 23:40:52 2008 +0100 charconv.tcl does not like multi-line comments commit 6758be8d15b9d0b14e06f4cbbb3a76ff645d280c Author: Wolfram Schneider Date: Tue Nov 18 23:32:50 2008 +0100 Implement real ISO546 character set, first version. commit 7a050afbba1b2daf9a1ab6d6c4bbae9ba674a705 Author: Adam Dickmeiss Date: Tue Nov 18 23:28:29 2008 +0100 Fixed creation of marc8.c / marc8r.c. commit 966500e45f2753898b99ccef92ed7d501a1f5e72 Author: Wolfram Schneider Date: Tue Nov 18 23:00:24 2008 +0100 don't create a broken *.c file if charconv.tcl failed commit 16b381fc13f2177874ca8e8be1441e0b0c91521b Author: Wolfram Schneider Date: Tue Nov 18 19:00:52 2008 +0100 remove non-latin character sets commit 645683e5223cb8c122c3d3ba565a46d07d53dca3 Author: Adam Dickmeiss Date: Tue Nov 18 12:33:35 2008 +0100 Deb pkg libyaz3-dev depend on libgnutls-dev. commit 19cf1d0612ee516241c2e4846756e47a16852b8e Author: Adam Dickmeiss Date: Tue Nov 18 12:23:46 2008 +0100 Use awk as found by configure commit 3489c6eaceb7ab7f4e8298a2f898dda0c3d0a09c Author: Adam Dickmeiss Date: Tue Nov 18 09:36:11 2008 +0100 Updates for the ISO5426 source. commit 9bf84c30a3d0e3e1d4b9136aee9c0a4b8ae769d2 Author: Adam Dickmeiss Date: Tue Nov 18 09:30:32 2008 +0100 Use mk_version.tcl to generate yaz-version.h commit 7e6b7d710c5a78caca338b63198efd9ac11320cb Merge: 32e16c37 fff1d634 Author: Adam Dickmeiss Date: Tue Nov 18 09:28:13 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 32e16c37ce5b2d1ed0b3e6edfb48fd5ae1ec24b3 Author: Adam Dickmeiss Date: Tue Nov 18 09:27:13 2008 +0100 Added script to auto-generate version-info on Windows. commit fff1d63445d5910aa5b5a73ee37e4b94f52de9ad Author: Wolfram Schneider Date: Tue Nov 18 09:05:44 2008 +0100 add -t option sync manual page with usage string commit 735479544d1cadf6a29722a3dfca7b3fd263cca0 Author: Wolfram Schneider Date: Tue Nov 18 08:42:38 2008 +0100 typo in comments commit 2ff562123d8043bf8e29c172a92c5da45268d786 Author: Adam Dickmeiss Date: Tue Nov 18 00:53:09 2008 +0100 Make codetables-iso5426.xml part of dist. commit e5d5336d0321fcc680a88f6db476223c5e507d91 Author: Adam Dickmeiss Date: Tue Nov 18 00:48:15 2008 +0100 Ignore generated file version.nsi. commit c9f14d1b54f5e094112153e473ed015c1542affb Author: Adam Dickmeiss Date: Tue Nov 18 00:47:56 2008 +0100 Ignore generated file iso5426.c. commit a62e3b3f79675a2b67d6e60dd2f96fbccce02dd6 Author: Adam Dickmeiss Date: Tue Nov 18 00:11:34 2008 +0100 Document version identifiers commit e5a6a3f08564436f90fcb8537d8f32e6685c176e Author: Adam Dickmeiss Date: Tue Nov 18 00:05:47 2008 +0100 Removed definitions of YAZ_OS and YAZ_DATE. Removed definition of YAZ_OS. It is not used by other parts of YAZ and is probably not to be used by other applications. The YAZ_DATE is also not of use. Was used to detect API changes for YAZ 2 series. commit 3185557b9c4f422e12f79a930a89a35b4cac6cfe Author: Adam Dickmeiss Date: Tue Nov 18 00:02:10 2008 +0100 Document yaz_version commit e97610b3e0040428e2cb74f846ade31a0194074e Author: Adam Dickmeiss Date: Tue Nov 18 00:00:37 2008 +0100 yaz-client's version info includes SHA1. commit 6f7757087a49db5fb3fa4f3b12b8b67ebbbe3aa3 Author: Adam Dickmeiss Date: Mon Nov 17 21:11:43 2008 +0100 Return SHA1 version for YAZ in yaz_version. commit f1ddcf0aca55660d122a40046a13483c4a06f922 Author: Adam Dickmeiss Date: Mon Nov 17 20:00:15 2008 +0100 Fixed awk stmt - which was apparently gawk only commit 7cf3484c8f09f224b5758798e746b1061b4a7437 Author: Wolfram Schneider Date: Mon Nov 17 16:30:03 2008 +0100 set ISOcode="42" commit 99eee17dbb3ef0d81d44b01d9072e3405f326595 Author: Wolfram Schneider Date: Mon Nov 17 16:13:53 2008 +0100 still learning using GIT, some changes were not committed: fake support for decoding ISO5426 -> utf8 commit 919e3dd6d63e3371053b5be495ee4c0b74ef2e13 Author: Wolfram Schneider Date: Mon Nov 17 16:12:52 2008 +0100 add ISO 5426 reference documentation commit 4d3388f14854ea6e6ad1b5d9722c7ad2c6dbc7ac Merge: a36b22f2 b7ef3b5b Author: Wolfram Schneider Date: Mon Nov 17 15:41:35 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit a36b22f2bb95b76a003041eed871fbc6f40834fa Author: Wolfram Schneider Date: Mon Nov 17 15:40:42 2008 +0100 fake support for decoding ISO5426 -> utf8 commit b7ef3b5b8eeb39b408065eaf0f77a978bd911e69 Author: Adam Dickmeiss Date: Mon Nov 17 15:33:09 2008 +0100 TODO no longer present. Check for distdir/win already being present. commit e6d6af3d3fe9fca9fa78dfc62f5c6887778744ba Author: Wolfram Schneider Date: Mon Nov 17 15:17:16 2008 +0100 add copy of iconv_decode_marc8.c commit 85e7aad7167c848ae654bacd378403894f2f889b Author: Wolfram Schneider Date: Mon Nov 17 15:15:17 2008 +0100 add copy of iconv_encode_marc8.c commit 5213b25de9ca4e1f7aa52540260233c4f5a2e8b7 Author: Wolfram Schneider Date: Mon Nov 17 15:12:39 2008 +0100 add function yaz_iso5426_decode commit c15bc44e2038d3555bbc44aacfd8f0c2f55594cd Author: Adam Dickmeiss Date: Mon Nov 17 15:04:01 2008 +0100 Removed this because it no longer has useful info commit 6c24a7636cfb5c6609061e8f4bb696ad8f1607d1 Author: Adam Dickmeiss Date: Mon Nov 17 14:43:38 2008 +0100 Version now propagated to yaz-version.h + NSI installer. commit 9397bf54a2ddb4e0fe8a73d5f753eee23a10601c Author: Adam Dickmeiss Date: Thu Nov 13 02:38:19 2008 +0100 Generate yaz-version.h from configure.ac (except YAZ_VERSIONL) commit f3cc474450a7c6be9c583b5b60e7fac51d1f4fc5 Author: Adam Dickmeiss Date: Thu Nov 13 02:38:16 2008 +0100 Generate yaz-version.h from configure.ac (except YAZ_VERSIONL) commit 5787f1e881be090f6bdfe708e179f9f466356bc8 Author: Wolfram Schneider Date: Mon Nov 17 12:23:06 2008 +0100 Add alias ANSEL -> MARC-8 for decoding to UTF8 commit efe945f2dbfdbb92fb21067da236b3edae146466 Merge: af111711 7ef1b50f Author: Adam Dickmeiss Date: Fri Nov 14 20:15:02 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 7ef1b50f481cda83d012cc3d69d83f9313836f1f Author: Adam Dickmeiss Date: Fri Nov 14 15:17:22 2008 +0100 Fixes for gcc warnings - mostly WRT check of returns values commit 1ffd6698cc631866391bf0d646f58907c32ab086 Author: Adam Dickmeiss Date: Fri Nov 14 14:00:22 2008 +0100 Re-format and check of return value from fread. commit 6178e716786433db7de986b6b6cdb694ed57834d Author: Adam Dickmeiss Date: Fri Nov 14 12:35:02 2008 +0100 Re-format commit af111711048b01f1ab94a6f100f34161ba8ff1be Author: Adam Dickmeiss Date: Mon Nov 10 18:13:14 2008 +0100 Updated doc/common. commit 5ba78554cf0c142fd6ff29f608e31eb30a83cd1f Author: Adam Dickmeiss Date: Mon Nov 10 17:14:25 2008 +0100 Fixed dox file comment commit 0b133751e275a00455d2f68fcc04960d6417def2 Author: Adam Dickmeiss Date: Mon Nov 10 16:50:11 2008 +0100 No longer executable (-x). commit 07af4a097fe9091a43232fa201e0833b330d21de Author: Adam Dickmeiss Date: Mon Nov 10 16:45:34 2008 +0100 Version 3.0.38. commit 89b120a18d5481e2b354accd07e07bc74816cfc9 Author: Adam Dickmeiss Date: Fri Nov 7 13:59:23 2008 +0100 Supports C++ compilations as well commit e579d2c5f9886c3929513a15724bd745ae4bacac Author: Wolfram Schneider Date: Fri Nov 7 12:01:57 2008 +0100 Set libtoolize on a MacOS commit 185932b6ae28e68c77e270196cd96a379fc775b6 Author: Adam Dickmeiss Date: Fri Nov 7 11:55:02 2008 +0100 Fixed include of matchstr.h. commit 9098839cb8361648d70d1708c6e1f4e05b9836ae Author: Adam Dickmeiss Date: Thu Nov 6 17:48:18 2008 +0100 Updated news commit ae309395bf5f5511c2eee751151a2962726f745a Author: Adam Dickmeiss Date: Thu Nov 6 14:14:21 2008 +0100 Renamed match-str.h to matchstr.h. commit 6ce7e4adc2de42e4b422558985468547c5a4423f Author: Adam Dickmeiss Date: Thu Nov 6 12:48:21 2008 +0100 DEBUG=0 for YAZ commit 4aee8993113119c95924d9be4ed2707d5034348c Author: Adam Dickmeiss Date: Sat Oct 25 22:08:47 2008 +0200 Added yaz_encode_pqf_term to encode PQF strings. Added yaz_encode_pqf_term to encode PQF strings. This function is used by yaz_rpnquery_to_wrbuf and CCL to PQF conversion utilities (ccl_pquery, ccl_pr_tree). commit 9c6dc183308e2e99b53871c4aea3c6a760d2db54 Author: Adam Dickmeiss Date: Sat Oct 25 20:32:12 2008 +0200 Include header for matchstr functions. commit 3a3c0ef92f785ff123069ea51ba0f8711b23dbf7 Author: Adam Dickmeiss Date: Fri Oct 24 16:45:22 2008 +0200 Ignore generated program gfs-example. commit 887e4b6664dee7210816744f92802b4d924d9a3a Author: Adam Dickmeiss Date: Fri Oct 24 08:54:10 2008 +0200 For ZOOM, ensure ZOOM_EVENT_SEARCH is only fired once per search task. commit 5a1156a0d8d50aa07af3eec75e939ed2065d3880 Author: Adam Dickmeiss Date: Thu Oct 23 17:15:49 2008 +0200 Honor databaseName option for ZOOM connection as path (SRU "database"). commit 93f4285bbf2ed5a42fe62f92c7c4618df5f20583 Author: Adam Dickmeiss Date: Thu Oct 23 09:14:03 2008 +0200 Smaller example GFS. Added match-str.h for string match functions. commit bc4b50939a936dbb214c783c18a44039ea048fdd Author: Adam Dickmeiss Date: Tue Oct 21 15:56:21 2008 +0200 Removed debug-like msg. commit ec4b6d4fd36351c38f76596c9e21197b7536cd00 Merge: 2ba84b15 29cc5fae Author: Adam Dickmeiss Date: Tue Oct 21 15:30:05 2008 +0200 Merge branch 'master' of ssh://adam@git.indexdata.com/home/git/pub/yaz commit 2ba84b155219d5d18eed5ba4d929c12abdb88f14 Author: Adam Dickmeiss Date: Tue Oct 21 15:29:42 2008 +0200 Fixed log message trunction on Windows. commit 29cc5faecbd855b9c3ad7bf2749c7fcd1a393704 Author: Adam Dickmeiss Date: Mon Oct 20 19:23:54 2008 +0200 Add missing ZOOM_END_CDECL commit bc384649b00fed1e378ac3f67b8b5e4872892942 Author: Adam Dickmeiss Date: Mon Oct 20 15:36:59 2008 +0200 Use ZOOM_API for new function ZOOM_get_event_str commit 9f082f8dd7fd80f8da3baf410c6dc003c5f471eb Author: Adam Dickmeiss Date: Mon Oct 20 15:05:37 2008 +0200 Update dep libs version because of new function ZOOM_get_event_str commit fd6a4db386252ed1b777ad2900ea26a0a9513662 Author: Adam Dickmeiss Date: Mon Oct 20 14:38:44 2008 +0200 For SRU diagnostics ensure result set memory is not saved. commit 80849747c53b9c8374e62672aa5f0bc994990389 Author: Adam Dickmeiss Date: Mon Oct 20 09:12:25 2008 +0200 Don't generate ZOOM_EVENT_RECV_SEARCH for SRU record retrievals. The event ZOOM_EVENT_RECV_SEARCH is no longer generated for SRU record retrievals - only for search responses (and an equivalent search task). commit 6dff34312a0f7c3272f7b52c5e13af1e04f72228 Author: Adam Dickmeiss Date: Mon Oct 20 08:38:56 2008 +0200 Added ZOOM_get_event_str. commit 3a494bb11f0a2f449e4848fd17c2ee603bb2367e Author: Adam Dickmeiss Date: Sat Oct 18 13:50:48 2008 +0200 Fixed memory leak (setname in ZOOM_resultset) commit 9f9eecbb73b46c9cf31edc5d4a9a95e16cac3a3c Author: Adam Dickmeiss Date: Sat Oct 18 13:47:33 2008 +0200 Fixed bad memory ref in case of SRU diagnostics. commit bf95c509245f5cb4025ef2db348d5f7ace3b5994 Author: Adam Dickmeiss Date: Sat Oct 18 00:19:43 2008 +0200 Adjustments to make YAZ compile as C++ code. commit 34225a58fbb7de89387c526a9dac54a8b636fb60 Author: Adam Dickmeiss Date: Thu Oct 16 16:20:22 2008 +0200 Update to use Libxml2 2.7.1 / Libxslt 1.1.24. commit 3fa6bf34c5496f69a63469a3184251d38758c85d Author: Adam Dickmeiss Date: Thu Oct 16 10:36:24 2008 +0200 Omit definitions of xmlNode and xmlDocPtr if YAZ_HAVE_XML2 is unset. When YAZ is compiled without Libxml2 support (YAZ_HAVE_XML2 is unset), the types xmlNode and xmlDocPtr are no longer defined in xmltypes.h. Problem was that these dummy definitions could clash with other apps that used Libxml2 anyway. commit 75c9defe1c9ffb8efe58507dc994a56e6fd0409b Author: Adam Dickmeiss Date: Wed Oct 15 22:20:08 2008 +0200 Omit some functions not used when XML2 is not enabled (YAZ_HAVE_XML2). commit 92b4e042f027d999411ee8c20814cc76e2736e71 Author: Adam Dickmeiss Date: Wed Oct 15 20:26:08 2008 +0200 Fixed compilation for no XML2 commit 14ce714521fcdab18a298c48977f23af20c476c0 Author: Adam Dickmeiss Date: Wed Oct 15 20:24:48 2008 +0200 Added include of stdlib.h because of atoi commit a0c2cb53362fb04ae59bcd764822aafa24b0370e Author: Adam Dickmeiss Date: Mon Oct 6 20:15:56 2008 +0200 3.0.37. commit 74e62ec12177e6dc1ff3c578f6e96186f5e63a13 Merge: 8ee8072f 6570bbb7 Author: Adam Dickmeiss Date: Thu Oct 2 19:55:08 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6570bbb754493471237d34bc87613fc26780ba90 Author: Adam Dickmeiss Date: Fri Sep 26 23:11:48 2008 +0200 Updated ICU DLLs for Windows dist (nsis) commit d4fb090b5d0d63b8fc2a8060c9869e8fa86dcbb8 Author: Adam Dickmeiss Date: Fri Sep 26 12:22:16 2008 +0200 Version 3.0.36. commit cafbfb115514fa25b200b845c2b32b92ef65a6d3 Author: Adam Dickmeiss Date: Thu Sep 25 23:17:59 2008 +0200 Honor start, step, count for SRU (multiple requests performed). commit 8ee8072ffe458a632055008d96d86359cebb46dc Merge: 90aa30ae 21f9634b Author: Adam Dickmeiss Date: Thu Sep 25 21:33:15 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 21f9634b8e42027596795fcb9fd6b307fc72d567 Author: Adam Dickmeiss Date: Thu Sep 25 13:47:42 2008 +0200 Fixed ODR example and use of XML entities in CDATA sections. commit 7eeb1efed000ed90d27018fd717301096daf65e4 Author: Adam Dickmeiss Date: Thu Sep 25 11:05:24 2008 +0200 Fixed bug #2256. Updated for newer libxml2/libxslt. commit 1d6f90173d496fe54190026abc3ae6b234d312c3 Merge: cf24b097 160f79b4 Author: Adam Dickmeiss Date: Thu Sep 25 10:10:45 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit cf24b0978994c8d4d7fc92428fe18bf417084375 Author: Adam Dickmeiss Date: Thu Sep 25 10:10:32 2008 +0200 Unix text. commit 160f79b459b7d7dc07830e679349d82c3a77256d Author: Adam Dickmeiss Date: Wed Sep 24 20:19:37 2008 +0200 Ensure format command is a no-op if bad syntax is passed to it. commit bb376bb6ee4fc45ee4a2e76e5221bd5392766132 Merge: f59f3bba 24aa5ea6 Author: Adam Dickmeiss Date: Wed Sep 24 20:10:48 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit f59f3bba11d2db2fa291b736a98bf2f9f7e8f6c0 Author: Adam Dickmeiss Date: Wed Sep 24 20:09:29 2008 +0200 Check the record syntax(es) given by the format command Check the record syntax(es) given by the format command and report an error if they don't look good. commit 24aa5ea66edef77f6d086275cc6370815aeaab60 Merge: 5f3c82fb ad65c72f Author: Adam Dickmeiss Date: Sat Sep 20 18:07:55 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit 5f3c82fbbf6f405e88a9f4ea15e91065d4fb5d88 Author: Adam Dickmeiss Date: Sat Sep 20 18:07:32 2008 +0200 Windows makefile - added mutex.obj and updated for ICU 4.0 commit ad65c72fe9600038ea5b0c7927e8d65c0f268df9 Author: Adam Dickmeiss Date: Fri Sep 19 00:54:24 2008 +0200 Added cql2rpn as allowed querytype commit dd4e8781d27c03476fd6dfd2626480c0c5db00d9 Author: Mike Taylor Date: Wed Sep 17 10:46:07 2008 +0100 Fix typo -- spurious "size" parameter to odr_reset() commit 824be7c5e882951dad0d60246b60c87f1103e11a Author: Adam Dickmeiss Date: Mon Sep 1 08:56:07 2008 +0200 Fixed copyright holder in license Fixed copyright holder in license to Index Data. commit 90aa30aeb696ad039711db3c1404406b53df4dd3 Author: Adam Dickmeiss Date: Tue Aug 26 11:29:11 2008 +0200 Run both git submodule init + update commit e77ab47ef9cea60b0c7acedef78a0c9913f493fd Author: Adam Dickmeiss Date: Tue Aug 26 11:15:38 2008 +0200 Always run 'git submodule update' when git is in use commit fde5f3463df4cdaf15ad7bb483a1758e1c8cd7b0 Author: Adam Dickmeiss Date: Tue Aug 26 10:37:04 2008 +0200 Updated m4 for PDF_COMPILE fix commit 94275ce2d65c0e0c8a27c259749769b75579ea53 Author: Adam Dickmeiss Date: Tue Aug 26 10:29:47 2008 +0200 Use PDF_COMPILE for PDF creation commit 437f7ef37a5f526f1d0492c1405a1f257a7c7479 Author: Adam Dickmeiss Date: Sat Aug 16 00:23:39 2008 +0200 Updated Deb pkg descriptions to follow policy commit 3d4e0c75cee82cc17fa5da38051b072d9bed61a7 Author: Adam Dickmeiss Date: Wed Jul 30 14:12:29 2008 +0200 Avoid mixed stmt/var declare. commit 3009c755ca909b0f32211ac3f3e3e0ab309cb09e Author: Adam Dickmeiss Date: Mon Jul 28 10:06:52 2008 +0200 Update WRT crash on Windows. commit dfe360ef9c3b9ae84a2812bed499c1ac1b84b16d Author: Adam Dickmeiss Date: Mon Jul 28 09:23:03 2008 +0200 Fix Libxml2 error handling under Windows. The call to yaz_log_xml_errors have been moved to new_session which is when a worker thread is active. Using xmlSetGenericError func and friends fails if set in mother thread. commit 8e9d2cec97def1cd8b89b1fe427f1a232661ec6f Author: Adam Dickmeiss Date: Fri Jul 25 09:00:04 2008 +0200 First RPN to CQL conversion using actual attribute matching. commit 6aa3a97ba632e1507ca00a98b8e45567e51e51e6 Author: Adam Dickmeiss Date: Tue Jul 22 20:17:08 2008 +0200 Comment OID utilities. commit 73de2a0dff87a450d7b9c3dda90c1d6ec796ca88 Author: Adam Dickmeiss Date: Tue Jul 22 15:59:08 2008 +0200 Fixed description commit b977948f73d07c0bf4478565f9af3497ffe862e7 Author: Adam Dickmeiss Date: Tue Jul 22 15:54:15 2008 +0200 Added cql_transform_define_pattern. Renamed rpn2cql funcs. commit 21c7fd1c4e86a5df03c4b2908b98571f9b16ed40 Author: Adam Dickmeiss Date: Tue Jul 22 14:10:24 2008 +0200 Describe ZOOM option 'sru' commit d136ea45c75630579ad66054d0d93708ab79a29b Author: Adam Dickmeiss Date: Mon Jul 21 19:24:45 2008 +0200 Option logapdu renamed apdulog as it harmonizes more with pazpar2 commit 61c2f2afd4d873c2409ebce0bbafb616cb7393c6 Author: Adam Dickmeiss Date: Mon Jul 21 19:17:12 2008 +0200 ZOOM Connection setting 'logapdu' logs APDUs to YAZ log. commit d04d76e81e83b653b2e8fcfd9e311e764c5d15ba Author: Adam Dickmeiss Date: Mon Jul 21 17:54:37 2008 +0200 ZOOM Connection setting 'logapdu' logs APDUs to YAZ log. commit 3d74409576bae9e1c80db193ec1fd9917f63fa42 Author: Adam Dickmeiss Date: Thu Jul 17 13:50:26 2008 +0200 Update to latest m4 master. commit 1f9d3a2e5da219399db2d574c001b52e7756b0f8 Author: Adam Dickmeiss Date: Thu Jul 10 12:33:42 2008 +0200 Mention Git. commit 138fbf3c4582f2738e5b30e440994c9b6d76e194 Author: Adam Dickmeiss Date: Thu Jul 10 11:16:35 2008 +0200 Minor reformatting. commit b3e402aaa7c30a8890706500862ce440aebea234 Author: Adam Dickmeiss Date: Thu Jul 10 11:06:45 2008 +0200 Document the recordOpaque option. commit 69577e2593ec0a537285fe6454945fd287a486d6 Author: Adam Dickmeiss Date: Thu Jul 10 10:48:42 2008 +0200 Added support for an "opaqueRecord" option in ES update. Added support for an "opaqueRecord" option in ES update. If "opaqueRecord" is present, call z_ext_record_oid_any() instead of z_ext_record_oid(). Set either the "record" or the "opaqueRecord" option, not both. commit a07a5e7fcd5417f81b546be932619b90e05ba72c Author: Adam Dickmeiss Date: Thu Jul 10 10:46:49 2008 +0200 Added z_ext_record_oid_any() function. This is a simplified version of z_ext_record_oid(). It does the same oid lookups, but adds the record as an Odr_any. commit c7e6e65dc7e8204798a41f6326a9e04632f1f507 Author: Adam Dickmeiss Date: Fri Jul 4 11:26:52 2008 +0200 Testing of RPN to CQL conversion. commit 1e02454e1c94b60f62a7942b81a17bdc6c6d54da Author: Adam Dickmeiss Date: Fri Jul 4 11:25:46 2008 +0200 Renamed wrbuf_put to wrbuf_vputs and changed prototype. commit a7bff1cefa274c110b80458cba718db5ed0fd97d Author: Adam Dickmeiss Date: Thu Jul 3 20:01:18 2008 +0200 Added wrbuf_put - same as wrbuf_puts but void return value. commit 8b0914ffc98a04464440843a795920e09b98376c Author: Adam Dickmeiss Date: Wed Jun 18 11:13:16 2008 +0200 Use gnutls_set_default_priority instead of gnutls_priority_set_direct. Use gnutls_set_default_priority instead of gnutls_priority_set_direct because gnutls_priority_set_direct is unavailable for older versions of GNU TLS. commit 9c3aa606e547656d16e5d06fa2bd79e4dbcb7930 Author: Adam Dickmeiss Date: Wed Jun 18 10:43:36 2008 +0200 Towards 3.0.34 commit 5ad7d533eb01f5f25f7c59f16a2d3c04a99ee041 Author: Adam Dickmeiss Date: Wed Jun 18 10:33:34 2008 +0200 Restructure SSL support funcs commit f8d2abd0349cdff6c9bcf41937cd1dfd5de54ed2 Author: Adam Dickmeiss Date: Wed Jun 18 10:30:49 2008 +0200 Remove GNU TLS openssl compat code and update configure. commit be49802a35b13fc0de847f5db05bfc4e6072ed06 Author: Adam Dickmeiss Date: Tue Jun 17 16:08:02 2008 +0200 Server functional for native use of GNU TLS. commit 3939d0f59b399825b75e55172794823a52c68bba Author: Adam Dickmeiss Date: Tue Jun 17 16:05:48 2008 +0200 Prevent COMSTACK use if cs_accept fails commit 419c705f52b0cf234f7d03133ca7318947654210 Author: Adam Dickmeiss Date: Thu Jun 12 15:11:19 2008 +0200 Client side SSL without gnutls-openssl. commit 635995241e865409ad462e33b0208d3a8ebfb14d Author: Adam Dickmeiss Date: Thu Jun 12 11:17:02 2008 +0200 Version 2.0.32. commit 5fa800e6ead7ceef916094cac7e9b7df71a3b324 Author: Adam Dickmeiss Date: Thu Jun 12 11:13:08 2008 +0200 Added test for utf-8 decode reset commit 7e58901d8acda68f8155cda54b0fd3cb6d45f0da Author: Adam Dickmeiss Date: Wed Jun 11 20:16:47 2008 +0200 Fixed #if ENABLE_SSL for ssl_check_error commit 72da88cf7d0a49886e78a2a171c44111c8f70e95 Author: Adam Dickmeiss Date: Wed Jun 11 20:08:54 2008 +0200 Rename yazextralibs to just LIBS commit 29ae3278722e4a61905cc5d330fc2d286d2e7016 Author: Adam Dickmeiss Date: Wed Jun 11 20:08:17 2008 +0200 Make ssl_check_error static and define ssl_type always. Make ssl_check_error static becuase it's a private function. Define function ssl_type always - also in case SSL is disabled - and make it return 0 (NULL ptr). commit 0a1043fe4b7f9e22e7481dc9d81a0a8ca2092292 Author: Adam Dickmeiss Date: Mon Jun 9 17:07:14 2008 +0200 Allow NULL inp(ut) for utf8 decoder commit bb0028c3ec66f017999b3f49daeb2b537e5e78b1 Author: Adam Dickmeiss Date: Fri Jun 6 11:54:41 2008 +0200 Fix date commit 76d7a32ad18dfab123315e59b2b941d7cdf3632a Author: Adam Dickmeiss Date: Fri Jun 6 11:22:51 2008 +0200 Version 3.0.30. commit 2221f6847ece72c7539a1f28e33da980fb2bd810 Author: Adam Dickmeiss Date: Fri Jun 6 11:18:39 2008 +0200 Supply SSL_LIBS for --libs output (in source) commit 2225afbde8949f3005ca9989724a3bd7e0f0c2f5 Author: Adam Dickmeiss Date: Fri Jun 6 11:03:12 2008 +0200 Supply SSL libs for static linking commit fd13a3c5b8cecdd1327f5db615387c8c0e691ba1 Author: Adam Dickmeiss Date: Fri Jun 6 00:19:24 2008 +0200 Added cs_print_session_info which shows SSL session info. Added cs_print_session_info which shows SSL session info. This utility used to be part of yaz-client but is now part of YAZ COMSTACK. This is deal with GNU TLS session info and avoid having SSL implementation code outside the YAZ core. commit 46f58d56d118687435ef38ba4617f8d359c20d45 Author: Adam Dickmeiss Date: Fri Jun 6 00:16:26 2008 +0200 RPM builds using GNU TLS commit 966a14020bc5855bbc4f3aebaa157f5c6d4ae292 Author: Adam Dickmeiss Date: Thu Jun 5 23:25:18 2008 +0200 Make cs_get_ssl return 0 if GNU TLS is enabled. Make sure cs_get_ssl return 0 if GNU TLS is enabled. GNU TLS and OpenSSL are not binary compatible so must ensure that only OpenSSL applications makes use of this (e.g. yaz-client). commit aa4c03825ae6767274bc70aff8332a7c3b61cfc0 Author: Adam Dickmeiss Date: Thu Jun 5 23:22:38 2008 +0200 Solaris OS version update. Mention libyaz_icu.la. commit 726bffd1002026ce15056e97a1511392724377e5 Author: Adam Dickmeiss Date: Thu Jun 5 23:07:12 2008 +0200 Added Giannis Kosmas commit 494421584e146db0b9a2c45c6ec70daacb44364c Author: Adam Dickmeiss Date: Thu Jun 5 23:01:41 2008 +0200 Show types of libs (thrads icu server) commit 02b6a809f17f142071384ffac8e406b6e9fbd2fb Author: Adam Dickmeiss Date: Thu Jun 5 22:52:27 2008 +0200 Minor formatting changes. commit 1043099645878acc549c3198729d16df13a6b948 Author: Adam Dickmeiss Date: Thu Jun 5 22:31:23 2008 +0200 Use GNU TLS for Debian package commit 6e826aa9e79c7dff4a26bc500bb57c8b462c9364 Author: Adam Dickmeiss Date: Thu Jun 5 22:31:18 2008 +0200 Use GNU TLS for Debian package commit 553a857a20bc8ab0e02c2efb1241e9a931b13353 Author: Adam Dickmeiss Date: Thu Jun 5 20:42:41 2008 +0200 debian directory no longer part of dist (upstream) commit 6104404b99d63343646f1d8e21bce49a82c16d3d Author: Adam Dickmeiss Date: Thu Jun 5 20:35:20 2008 +0200 Added info about GNU TLS. commit 3a97efa8f888c8f5a5e36ad9ca004b55e0cca2c6 Author: Adam Dickmeiss Date: Thu Jun 5 20:26:00 2008 +0200 Make GNU TLS the default choice for SSL commit 2090c10cba543198c6658e2ca4219c28ff46cefe Author: Adam Dickmeiss Date: Thu Jun 5 19:09:27 2008 +0200 GNU TLS non-block works. commit a4459ba5eb7552f2c11ad9efe7f5b7bd63c64fb3 Author: Adam Dickmeiss Date: Thu Jun 5 01:35:40 2008 +0200 GNU TLS operational. Issues with non-blocked I/O left. commit e8687e3d59ba411ee1ed143c8726ab9449bbbe57 Author: Adam Dickmeiss Date: Wed Jun 4 15:46:07 2008 +0200 Started work on using GNU TLS as an alterantive to OpenSSL. commit a18c2a5a76b4ff8e4f5eb9c1f215ade0c7e4e2ef Author: Adam Dickmeiss Date: Wed Jun 4 12:24:19 2008 +0200 Depend on libicu-dev . Not libicu38-dev commit 1f41a1d415d2ab138050a96020ed39caa0c4e323 Author: Adam Dickmeiss Date: Wed Jun 4 11:02:16 2008 +0200 Link SSL with libyaz.la and yaz-client only. commit 09f035ec955bc0a99eddc1dde09aa53e3773875d Author: Adam Dickmeiss Date: Wed Jun 4 10:34:04 2008 +0200 More news commit f58a188f6db8f4b458d62cb2c345443a5253f9c1 Author: Adam Dickmeiss Date: Tue Jun 3 15:24:57 2008 +0200 ICU parse_error no longer an array. The parse_error member in icu_normalizer is no longer an array of size 256. There seems to be no need for this and we don't know why it came up in the first place. commit 3c4fd1f1e79d1eac561ccf085558b69dbace2597 Author: Adam Dickmeiss Date: Tue Jun 3 15:23:29 2008 +0200 NEWS is ASCII commit 4e6d194a80ae85760471a2fe7568bfaeb18649dd Author: Adam Dickmeiss Date: Mon Jun 2 12:35:48 2008 +0200 Dummy OPAC records has a little more dummy data in it. commit 50cffeb44b5c2b644a76359142063660b6b80f7a Author: Adam Dickmeiss Date: Fri May 30 14:44:24 2008 +0200 Document Windows Service Control commit c81c923c94d47c16308d487de3431f5027059522 Author: Adam Dickmeiss Date: Fri May 30 14:27:47 2008 +0200 Truncate yaz-client history if it exceeds certain size (16K). commit ec7571c09ddbe4580775d3a8a60271a657ae02a6 Author: Adam Dickmeiss Date: Fri May 30 13:55:41 2008 +0200 Added a few comments. Source in ztest also analyzed by Doxygen. commit a341ccc0007ba1c05ac5a14a9f1cf92f7b576245 Author: Adam Dickmeiss Date: Fri May 30 13:36:35 2008 +0200 Fix diagnostic for MARC and present request out of range commit 9a4813613f9dcc5a03776064ce6dd41a71606b74 Author: Adam Dickmeiss Date: Fri May 30 13:35:55 2008 +0200 Fix comment regarding diagnostics commit 04b09c082a7882398a10d5ec62e80ac175fe2a9b Author: Adam Dickmeiss Date: Fri May 30 13:31:16 2008 +0200 Added proper header for reader record utilities for yaz-ztest. commit a0c511bee52164f097c30d5e2598c0810605ff55 Author: Adam Dickmeiss Date: Fri May 30 13:23:25 2008 +0200 Replaced some error code ints with proper defines (SRU / Bib-1). commit c752a33d6863b028e991c09451f977a00b4028aa Author: Adam Dickmeiss Date: Fri May 30 12:17:40 2008 +0200 yaz-ztest returns dummy OPAC records. commit fab857282ce150ffb962753bf98132deae20b8c9 Author: Adam Dickmeiss Date: Fri May 30 12:17:15 2008 +0200 Update. commit 7cf46a0f93d9118904335544412f5b15ee0345d3 Author: Adam Dickmeiss Date: Wed May 28 23:16:47 2008 +0200 Using YAZ tokenizer for CQL to PQF transform spec. commit 1aef63af06fa380247c91d12cd7288981985a406 Author: Adam Dickmeiss Date: Wed May 28 20:01:54 2008 +0200 Added yaz_mk_sru_surrogate to create SRU surrogate diagnostic. commit b3d5a30f4d074053085693a8fc5381a4ebc41544 Author: Adam Dickmeiss Date: Mon Apr 28 11:53:50 2008 +0200 Beginnings for RPN to CQL transform. commit 2cfddf92bc0688daa308a66f393ce7e2000f0762 Author: Adam Dickmeiss Date: Mon Apr 28 10:30:11 2008 +0200 Renamed a test. commit 1bd4b1c686ba63f685fc0195fa76ada49680d219 Author: Adam Dickmeiss Date: Mon Apr 28 10:28:59 2008 +0200 Indentation. commit 52f5dfc3bf664aa81a14add42e141b4d809061d6 Author: Adam Dickmeiss Date: Mon Apr 28 09:58:24 2008 +0200 Use SRU diagnostic defines rather than numbers. commit 214d072db09722a26e5eb1206bec57fb89664437 Author: Adam Dickmeiss Date: Wed Apr 23 23:24:34 2008 +0200 Updated m4 and doc/common. commit 3c4ae8968ea8fd87db472a14b6dcd2900553f430 Author: Adam Dickmeiss Date: Wed Apr 23 23:24:14 2008 +0200 Do not set charsetNegotiation bit by default (breaks some targets). commit d2789e43e814786b4d0e22715de16ab18b1cab98 Author: unknown Date: Tue Apr 22 13:08:42 2008 +0200 Fixed argument passing to sc_main. commit 1e9423ce7020bad4a16984caeaf6b7c16a5168c2 Merge: 6d91a07c d46b41eb Author: Adam Dickmeiss Date: Tue Apr 22 12:15:33 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6d91a07c81493b6535fd33d6a28382eba56b21e7 Author: Adam Dickmeiss Date: Tue Apr 22 12:14:40 2008 +0200 Bump version to 3.0.29. commit d46b41eb147e89d24f706a9663621923d75eb28a Author: Adam Dickmeiss Date: Tue Apr 22 11:47:00 2008 +0200 File sc_test.c part of dist (source for Windows only). commit e255616521c8ba665309bcaeccabb35b6efe35d7 Author: Adam Dickmeiss Date: Tue Apr 22 11:18:11 2008 +0200 Unix update for service control (sc). commit 540056f9cf1a3304b253db09eba899cc6763466d Author: Adam Dickmeiss Date: Tue Apr 22 10:54:49 2008 +0200 Implemented new Windows Service wrapper (sc). commit dedba382ec4773d8abdf244290020f3da42113b6 Author: Adam Dickmeiss Date: Mon Apr 21 12:44:13 2008 +0200 Initialize HAVETHREADS (was accidently removed in previous commit). commit 468bc06965c656dfb41c3ccf12eda582f427fd8f Author: Adam Dickmeiss Date: Sun Apr 20 16:24:31 2008 +0200 Proper m4 quoting. commit 1015e59c397c0421df1be835e1418ef95531ad98 Author: Adam Dickmeiss Date: Thu Apr 17 14:05:03 2008 +0200 Changed yaz_record_conv_record to be reentrant for XSLT. Changed yaz_record_conv_record to be reentrant for XSL transforms. Reusing xsltStylesheetPtr in one instance of yaz_record_conv_t was not reentrant as far as yaz_record_conv_record is concerned. Instead xsltStylesheetPtr is created for each invocation. Only the XSL stylesheet document is saved from the beginning via yaz_record_conv_configure. commit e6fc0b7b23620cd04801667b1921384f56a42fdb Author: Adam Dickmeiss Date: Thu Apr 17 14:04:05 2008 +0200 Added loop for record conversion to test performance. commit 91a490267e60208ff28e53a397e261956c4adc59 Author: Adam Dickmeiss Date: Thu Apr 17 11:43:23 2008 +0200 Changed yaz_record_conv_record to be reentrant. Changed yaz_record_conv_record and yaz_record_conv_opac_record to be reentrant. Now yaz_iconv_t is created for each invocation. commit 246af42ce354e7e37cddfb25420a16aaf9206c6c Author: Adam Dickmeiss Date: Tue Apr 15 10:19:14 2008 +0200 Updated doc/common. commit 4fdbe43c755194b4d31cf3d0bf42f01f49906881 Author: Adam Dickmeiss Date: Tue Apr 15 09:52:53 2008 +0200 Updated to m4 master. commit 72011b1abdb331ba835cbf40cabc9aee42e7847a Author: Adam Dickmeiss Date: Sat Apr 5 22:46:11 2008 +0200 Fixed Library add's for libyaz_la, libyaz_icu.la, libyaz_server.la. Fixed Library add's for libyaz.la, libyaz_icu.la, libyaz_server.la. This partially fixes bug #2129: dpkg-shlibdeps warnings. commit d940392c53c32ccf76fb287cc5b997b9e921a431 Author: Adam Dickmeiss Date: Fri Apr 4 23:24:40 2008 +0200 Update headers and omit CVS Ids. commit 52188379291c43d463d4ee6742cf81a700541723 Author: Adam Dickmeiss Date: Fri Apr 4 13:26:29 2008 +0200 Fixed bug #2116: Invalid: returning value from void func in wrbuf.c. commit 96c6e58f286787106e4a7b3bb3900a36051968d6 Author: Adam Dickmeiss Date: Thu Apr 3 17:19:55 2008 +0200 Refactor iconv decoders. commit ee6ab2ee3a9ee1a8c65d7272ec7fba1d886f5af0 Author: Adam Dickmeiss Date: Tue Apr 1 23:11:45 2008 +0200 Update source headers for 2008. Omit CVS ID keyword subst. commit ca322d4058580c495ce5e3e25d83b6a63a499d9e Author: Adam Dickmeiss Date: Tue Apr 1 20:41:54 2008 +0200 Added Copyright header. commit 65f1b9fce2d1d86df7d75645fb46fbba32dd01e3 Author: Adam Dickmeiss Date: Tue Apr 1 13:37:51 2008 +0200 Factored character encoders out to separate files (iconv system). commit e4fc51d4432f2adcc67db4b50ac5ce687302f9be Author: Adam Dickmeiss Date: Mon Mar 31 23:51:26 2008 +0200 Improved speed of MARC-8 encoding. Cosmetic changes. commit 062ae8c4cbdfd50766b13f34c11a5254825075a4 Author: Adam Dickmeiss Date: Mon Mar 31 23:12:25 2008 +0200 Implemented lossy and lossless MARC-8 encoding. The lossy encoding is named marc8-lossy. The lossless encoding is named marc8-lossless. commit a6f6305f2cd0479017a63809ff7f93cb0eaba572 Author: Adam Dickmeiss Date: Mon Mar 31 12:06:50 2008 +0200 Towards 3.0.28. commit ffa73561a78abb70d06d51cdcbf8ef3f8536a0ab Author: Adam Dickmeiss Date: Tue Mar 25 21:50:41 2008 +0100 Handle G1 in MARC-8 decoding. The MARC-8 decoding now handles G1 sequences in any code page. The code until now has only handled G1 in the ANSEL page. commit 14121668dfb035e79740cddb5518551b87b8da04 Author: Adam Dickmeiss Date: Tue Mar 25 14:12:49 2008 +0100 Ignore backup files. commit e858b0c178feedf5ef60bf6e66956ef5c4fd0b83 Author: Adam Dickmeiss Date: Tue Mar 25 13:52:48 2008 +0100 Bump to 3.0.27. commit 6fef48087ae8e01bae2638be8babe0b74a812f28 Author: Adam Dickmeiss Date: Tue Mar 25 13:49:46 2008 +0100 Added function yaz_log_xml_errors. commit d3012f2c5f1c14c3d1ca5174cd929d1b9b31388b Author: Adam Dickmeiss Date: Tue Mar 25 13:46:50 2008 +0100 Changed messages for XSLT conversion errors. commit 29640f69a8ba3211f384abca32b57b6c3faaf75e Author: Adam Dickmeiss Date: Wed Mar 19 23:33:01 2008 +0100 Produce
only once in MARCXML printing. commit 1b9e01d65c2e5a8b805c132bc1a043dc4d2c3ec5 Author: Adam Dickmeiss Date: Wed Mar 19 23:32:19 2008 +0100 Ignore unknown XML attributes in MARCXML parsing. commit b93c50cd7770a18bddd602a612ccd83795cd4922 Author: Adam Dickmeiss Date: Wed Mar 19 23:00:38 2008 +0100 For yaz-marcdump, allow use of prefix in record element. Fixed marcdump's check for element name. Now using xmlTextReaderLocalName used instead of xmlTextReaderConstName. commit 4ccac02c44e3c3e5f4aea70f14300bc1f853c75b Author: Adam Dickmeiss Date: Tue Mar 18 18:48:51 2008 +0100 Make iconv-p.h part of automake source. commit b568ddecc89242451a7f2188d027b3d2b8d2c4ba Author: Adam Dickmeiss Date: Tue Mar 18 11:36:17 2008 +0100 WS spaces. commit a4d9a7973644a72d521b462df6cad688e526d27c Author: Jacob Poulsen Date: Mon Mar 17 15:16:22 2008 +0100 Added print of status or Error Report from xml ES commit 7974df78bb70587ee593071d8e7fae43c7c6b84d Author: Adam Dickmeiss Date: Tue Mar 18 11:18:16 2008 +0100 Minor changes to parsing of itemorder comamand. The parsing of itemorder command was moved from create_ItemOrderExternal to cmd_itemorder. commit da47ac6c55796acce3860cbe8297c29e4563e4c9 Author: Jacob Poulsen Date: Mon Mar 17 15:08:14 2008 +0100 Added customisation of xml send in command itemorder xml 1 usage itemorder xml 1 "" or itemorder xml 1 Date: Tue Mar 18 00:23:00 2008 +0100 Update for new C source for iconv handling. commit cccb7ecd623450d5b3ca2391327788c84aed71c8 Author: Adam Dickmeiss Date: Tue Mar 18 00:14:11 2008 +0100 Factor iconv conversions to separate C files. commit 10927d911232ff5b224587f32aa68b8506777905 Author: Adam Dickmeiss Date: Tue Mar 18 00:11:41 2008 +0100 Avoid Latin-1 chars. commit 0ed2b44e7ae33f8b8f6a7bd4e535a3deb294bee2 Author: Adam Dickmeiss Date: Mon Mar 17 15:36:27 2008 +0100 Ignore .o files. commit af3fd923edc18c8ba6a0b629632e4a11ea30e8eb Author: Adam Dickmeiss Date: Mon Mar 17 15:32:59 2008 +0100 MARC-8 ANSEL fix and proper better handling of incompl. sequences. The routine yaz_read_marc8_comb was modified to handle the escape sequence for ANSEL properly . Thanks to Gary Anderson for pointing out the problem with ANSEL. A few tests were added to test for the use of incomplete sequences. commit 49cb82c6f1a4a54272ee8ec1ec4331d59da3d190 Author: Adam Dickmeiss Date: Sun Mar 16 12:42:07 2008 +0100 Ignore object files. commit bb8921da8850ce7f0aba00ae4444931b0f740727 Author: Adam Dickmeiss Date: Sun Mar 16 12:33:50 2008 +0100 Changed description of yaz_options. commit 0a6170ad8a87e0bae603dd6a128d7bdc91967ab8 Author: Adam Dickmeiss Date: Sun Mar 16 12:32:56 2008 +0100 Added defines for yaz_options return values. commit 23bcb0312c437eb86179a7da43cb91ae313e23f4 Author: Adam Dickmeiss Date: Wed Mar 12 21:33:02 2008 +0100 Ignore sub directory config. commit 212ecdc7daf9764e6fdd0951281f61b9c1a94c2d Author: Adam Dickmeiss Date: Wed Mar 12 21:32:17 2008 +0100 Fixed check for Git submodules. commit 5eb29b50793d5eb99d56a5d777eaaea080221276 Author: Adam Dickmeiss Date: Wed Mar 12 14:33:32 2008 +0100 Generate ChangeLog using Git. commit 74070de2e1115b836d4bfd1934a0db659ee3ffde Author: Adam Dickmeiss Date: Wed Mar 12 14:32:04 2008 +0100 Auto add Git submodules in buildconf.sh. commit d72929b7de6221054feb6a220dc72289b0f3e03d Author: Adam Dickmeiss Date: Wed Mar 12 11:43:09 2008 +0100 Moved ignore files. commit 689ff444ffea343f202398ee3eacf5a4cf94154e Author: Adam Dickmeiss Date: Wed Mar 12 11:09:36 2008 +0100 Create config if it does not exist. commit 5b0d595a2a0e917a5607ccfc875ac8f52f7dcafc Author: Adam Dickmeiss Date: Wed Mar 12 11:06:42 2008 +0100 Added sub modules m4 and doc/common. commit c7899589e137fd6848870b45f692ab0832b7069a Author: Adam Dickmeiss Date: Wed Mar 12 08:53:28 2008 +0000 Fixed bug #2120: Different greek symbols, UTF-8 to MARC-8. The UTF-8 to MARC-8 conversion no longer uses yaz_marc8r_67_conv and the table data associated with it. The table data (albeit small) is still produced. commit 9fb32b9ec35a83d916e0227c751d4a7925301d34 Author: Adam Dickmeiss Date: Wed Mar 5 21:21:22 2008 +0000 For MARC-8 decoding avoid messing up G0 when G1 is selected. Use two flags for G0/G1 selection so that selection of G1 does not conflict with selection of G0. Bug #2115. Note that G1 is not properly handled. We must add &127 for G1 decoding since those characters have bit 7 set. A flag must be parsed to the conversion routines probably. commit a39b278b1ab5c2df9a7f4451f903b94766f3c833 Author: Adam Dickmeiss Date: Wed Mar 5 10:41:45 2008 +0000 Fix C code build Z39.50v3 ASN.1 using make -j (parallel build). commit 3f41c75a88a9bb7f979a379b76de77c00d5ad984 Author: Marc Cromme Date: Mon Mar 3 07:32:06 2008 +0000 added libicu-dev fro compability with lenny ICU transition commit 82ff4d3d947dadc67459dfe16da2d13891fb7426 Author: Adam Dickmeiss Date: Thu Feb 28 09:40:42 2008 +0000 Document mask for name in retrieval commit fefc5e473b01ba1b99062854510cb37569c98397 Author: Adam Dickmeiss Date: Thu Feb 21 12:42:13 2008 +0000 Removed bad character from comment commit bab540a6816b1ae07a834075e0c71d0f160565e4 Author: Adam Dickmeiss Date: Thu Feb 21 11:03:33 2008 +0000 Fixed YAZ_VERSIONL commit fcd0af67e2324336b0e62278e74df62b66797e3b Author: Adam Dickmeiss Date: Thu Feb 21 10:48:44 2008 +0000 Towards 3.0.26. commit 52d3885223f58cfd722df38adcc8d9a58aba7b51 Author: Adam Dickmeiss Date: Thu Feb 21 10:44:43 2008 +0000 Comment yaz_daemon. commit cd5dfe9bb7b6a784a5591d659881a3c6fb428512 Author: Adam Dickmeiss Date: Thu Feb 21 10:18:15 2008 +0000 Indenting commit 2dbe1df5facb92bac31b5da0ca2e2e8ee6f9b358 Author: Adam Dickmeiss Date: Thu Feb 21 10:15:30 2008 +0000 Added yaz_daemoon for windows. commit b2e784850fc85ca61e06610756ebc54b19c59895 Author: Adam Dickmeiss Date: Thu Feb 21 10:15:12 2008 +0000 win32 export yaz_daemon commit 3f93d280860794205eae219c1364e50a6ba15bac Author: Adam Dickmeiss Date: Thu Feb 21 10:15:03 2008 +0000 win32 export yaz_poll commit 10ccaa73368f50b1bd876465d80a1ee911fa1f01 Author: Marc Cromme Date: Thu Feb 21 07:19:40 2008 +0000 added optional dependencies on libicu38-dev commit 9495b9ae90634603fb390ff56da459e3c8137a63 Author: Adam Dickmeiss Date: Wed Feb 20 10:03:42 2008 +0000 Describe YAZ' options function. commit ea992427ac691e1816649c98751a20ee3732d044 Author: Adam Dickmeiss Date: Wed Feb 20 10:03:25 2008 +0000 Fixed doxygen desc commit 732191377db384f2d9541781a453ab805c6f57db Author: Adam Dickmeiss Date: Tue Feb 19 19:58:40 2008 +0000 Bumped debian version to 3.0.25-1 commit 2c6d94b6653410fcb959d13b40a4eb9bfb15f7e6 Author: Adam Dickmeiss Date: Mon Feb 18 19:30:28 2008 +0000 Bump version to 3.0.25. commit 0f9b09e4b9be322378fa14418c3e402924f6a1b2 Author: Adam Dickmeiss Date: Mon Feb 18 18:03:21 2008 +0000 Bump dependency version due to new functions commit 906a9c59f8c77f4002616a34b0b98d91d8b1bbc5 Author: Adam Dickmeiss Date: Mon Feb 18 17:07:05 2008 +0000 Added daemon utility (yaz_daemon). commit 5b94469ebf68f1f9d2a23c9173bbd4d5a7d0b630 Author: Adam Dickmeiss Date: Mon Feb 18 16:44:48 2008 +0000 Removed always true expression part in if stmt commit 43cd3a37090503882d47c2b52ceeb2ebd5040a36 Author: Marc Cromme Date: Thu Feb 7 15:23:18 2008 +0000 allowing for version 3.6 and 3.8 of ICU libs commit 2979c8fc3b5c53c06facad850dcae09645b43044 Author: Adam Dickmeiss Date: Wed Jan 30 20:37:04 2008 +0000 Fixed bug #2068: pkg-config trouble. Add -I${includedir} as proposed by Ko van der Sloot. commit 1318f44dd22ba2a86fd3946c8b2b01ba2370235e Author: Adam Dickmeiss Date: Wed Jan 30 20:00:55 2008 +0000 Fixed bug #395: ZOOM_record / OPAC record encoding problems. The function yaz_opac_decode_wrbuf now uses the iconv handle as used by the yaz_mart_t handle to char convert the strings in the OPAC records (ASN.1). Presumaby this string data has same encoding as the embedded ISO2709 record. commit af1d725908fed3da0afa5d4a20c6e3359effe643 Author: Adam Dickmeiss Date: Wed Jan 30 19:59:02 2008 +0000 Added yaz_marc_get_iconv commit 3fec27d8561b3634b4c1c6e32f09395d9690509f Author: Adam Dickmeiss Date: Wed Jan 30 19:58:24 2008 +0000 Added wrbuf_iconv_puts_cdata commit 66651add5da56151f986e44957cfafc8ee81578c Author: Adam Dickmeiss Date: Mon Jan 28 09:51:02 2008 +0000 Changed definition of extra_args in Z_SRW_PDU. Changed definition of extra_args in Z_SRW_PDU. The extra_args was a char* before. Is not a Z_SRW_extra_arg list. The extra args is used for both encoding and decoding of SRU GET/POST (was only used in SRU encoding earlier). commit cb2f5bb4d16fa7a2045cd863d30a45e5d9c458ee Author: Adam Dickmeiss Date: Mon Jan 28 08:14:52 2008 +0000 Towards 3.0.24. commit ad3b14dd33d6ce41c79e3b39d176b4a18dff42fb Author: Adam Dickmeiss Date: Fri Jan 25 16:30:47 2008 +0000 Added OPAC XML XSD. commit 0409a05fb47e10ea415e1102790234fc189d6292 Author: Adam Dickmeiss Date: Fri Jan 25 16:29:35 2008 +0000 zebra::* name in GFS example config commit e703daa7bd7429dd7c7646b60723434157d9b860 Author: Adam Dickmeiss Date: Fri Jan 25 16:28:42 2008 +0000 Document --with-xml2 option commit b15f0626c7fac44328266d8bde239781548256f8 Author: Adam Dickmeiss Date: Fri Jan 25 16:28:26 2008 +0000 Name value is glob-expression for retrieval facility. The name attribute for the retrieval element is a glob-mask. This allows a GFS server to accept a mask of element set names, e.g. . commit cd23bbbe31daa41916092651e168fa6c35a3e515 Author: Adam Dickmeiss Date: Thu Jan 24 21:50:55 2008 +0000 Require autoconf 2.60 (bug #2050) commit 7812eaf5e45de650b8629df5a231dbcab1182b55 Author: Adam Dickmeiss Date: Mon Jan 21 13:34:34 2008 +0000 Fix use of shutdown for WIN32 commit d67990f0801618bce56afe464b3492b6eb81b309 Author: Adam Dickmeiss Date: Mon Jan 21 13:09:07 2008 +0000 Possible fix for bug #2035 commit 01808bebfc2fbd2bd422a01cf14a148714c77e75 Author: Adam Dickmeiss Date: Mon Jan 21 13:07:43 2008 +0000 Fix for bug #2037: cs_listen failed - is not handled correctly. commit 198b4472b55199a07aa1879f537617b45c42ab87 Author: Adam Dickmeiss Date: Sun Jan 20 22:46:25 2008 +0000 Set version to 3.0.22. commit fe5e31a9e294669de982be03fd71990664a46476 Author: Adam Dickmeiss Date: Fri Jan 18 11:47:56 2008 +0000 Added version resources for yaz_icu3.dll commit 500d51dce5e882104cbc30e93d4c10499ce258c8 Author: Adam Dickmeiss Date: Thu Jan 17 22:30:29 2008 +0000 Obsolste file removed. commit 6938850d6b09e61ffde4c17c5682f7be5597e63f Author: Adam Dickmeiss Date: Thu Jan 17 22:27:40 2008 +0000 Towards 3.0.22 commit 26315242ec7bdeab2e7bc2d9aba8bbf7c515bbc3 Author: Adam Dickmeiss Date: Thu Jan 17 21:45:05 2008 +0000 Update doc WRT ICU compilation commit bff4812dd725a9d003e8b8869fc4b13698c227ee Author: Adam Dickmeiss Date: Thu Jan 17 21:44:18 2008 +0000 Do not mention oid_getentbyoid commit 212435a238eb26a3a041a7ce6a271c0217dd29bb Author: Adam Dickmeiss Date: Thu Jan 17 14:58:19 2008 +0000 Separate RPM package : yaz-icu commit 203f271d166bc46eef6b0e2e08b75611b1580048 Author: Adam Dickmeiss Date: Thu Jan 17 14:49:54 2008 +0000 Update. commit 07a8c8800167988f82b055045bca6e3c91471ac4 Author: Adam Dickmeiss Date: Thu Jan 17 14:46:44 2008 +0000 libyaz3-dev depend on libicu36-dev commit efecfe73da3c8c90fe749d95b4d68105ba320e72 Author: Adam Dickmeiss Date: Thu Jan 17 14:44:57 2008 +0000 libyaz_icu depends on the ICU libs commit c5058fc7dd740d627c4e058435d7acb6a7d9ed93 Author: Adam Dickmeiss Date: Wed Jan 16 13:01:45 2008 +0000 Fixed bug #2027: Crash when closing connection. commit 55119209417d079125b94c4a708cdc0efa0a7446 Author: Adam Dickmeiss Date: Wed Jan 16 12:47:18 2008 +0000 Check ICU after Libxml2 availability commit 649e4050d9b27ff10eaeaa93ca07ae7ca8a159f9 Author: Adam Dickmeiss Date: Wed Jan 16 12:22:05 2008 +0000 Use yaz/xmltypes.h for public Libxml2 headers commit 46692c65fdb078ebbefb8a45e159fe65f528d8d8 Author: Adam Dickmeiss Date: Wed Jan 16 12:18:51 2008 +0000 Test for ICU_CPPFLAGS for ICU availability commit 96a8c2ed9ca281137d729d034312f8dceb27ee85 Author: Adam Dickmeiss Date: Wed Jan 16 12:17:26 2008 +0000 Disable ICU if XML support is unavailable commit 2083c7f425383e5def0200d98492aecaf6f5f509 Author: Adam Dickmeiss Date: Wed Jan 16 11:31:48 2008 +0000 Bump version to 3.0.21 commit 0402f8526787fc555058e44d8348b492c7b223a8 Author: Adam Dickmeiss Date: Wed Jan 16 11:30:51 2008 +0000 Fix --libs output in case of ICU being disabled commit aa445c654412e914fcc6df99f10e182d66067134 Author: Adam Dickmeiss Date: Mon Jan 14 23:44:00 2008 +0000 No longer depend/use libpcap. commit c06a0ea570b026b5a53cbc8637053c56ac2f450f Author: Adam Dickmeiss Date: Mon Jan 14 23:32:04 2008 +0000 Remove --with-pcap commit cc941fb37956158f364fb2b5bf7d7b56889e643e Author: Adam Dickmeiss Date: Mon Jan 14 23:13:54 2008 +0000 Year 2008 commit 46c6d34f1778ba3876412d78eb58515b423e5140 Author: Adam Dickmeiss Date: Mon Jan 14 23:11:51 2008 +0000 Towards version 3.0.20. commit 62d63755eee10d888ec290d43693975d42e24034 Author: Adam Dickmeiss Date: Mon Jan 14 23:11:39 2008 +0000 Do not Build depend on libpcap-0.8-dev commit eebab252c82eb9cc5977e73ad7dd0ad83bb8dbf6 Author: Adam Dickmeiss Date: Mon Jan 14 22:58:46 2008 +0000 Build ICU stuff in separate DLL: yaz_icu3.dll. commit e310bbc88afee1090799a0183d75c35d5eb060d9 Author: Adam Dickmeiss Date: Mon Jan 14 22:58:06 2008 +0000 Fix printf of token id commit bc8450e933a6faa623d37b3606bbdd9252d62df3 Author: Adam Dickmeiss Date: Mon Jan 14 20:45:24 2008 +0000 Summarize news (from ChangeLog). commit 97580f4c1107c30a3ffeed5a80ff43d7930eeb14 Author: Adam Dickmeiss Date: Mon Jan 14 20:37:08 2008 +0000 Remove yaz-ziffy Debian package. commit e218239a81500b87639ea22c39089648a8eee00a Author: Adam Dickmeiss Date: Mon Jan 14 20:34:14 2008 +0000 Factor ziffy out as a separate package. commit da7f94a6b0f603280dcae083f2e5c1627b817fe1 Author: Adam Dickmeiss Date: Fri Jan 11 17:04:02 2008 +0000 More news commit 5fcf42328e6f732db2f693fb3284507376da0284 Author: Adam Dickmeiss Date: Wed Jan 9 21:35:23 2008 +0000 Changed license of CCL module to 'Revised BSD' commit 65371f5d5f265a4c5ee43f784b2d8a6db1e0774a Author: Adam Dickmeiss Date: Wed Jan 9 21:32:27 2008 +0000 Changed license of CCL module to 'Revised BSD'. commit db57e054dd296ed1b25cd51bbae190a9a7648dd5 Author: Adam Dickmeiss Date: Wed Jan 9 15:34:30 2008 +0000 Build yaz-icu if ICU is enabled on Windows. commit 9b6117759c80f45b99b47fba0651e2b7912ca8dc Author: Adam Dickmeiss Date: Wed Jan 9 15:33:31 2008 +0000 DLL export ICU functions. commit 10541f418a12339fbb75de5f69ec0327d180f8f1 Author: Adam Dickmeiss Date: Wed Jan 9 15:00:47 2008 +0000 ICU support on Windows version of YAZ. Prepare makefile for ICU support. Thanks to Tumer Garip. commit b8d0ce914a074e4c6769d7f4d5f75b2f50c070c1 Author: Adam Dickmeiss Date: Mon Jan 7 17:32:49 2008 +0000 Fixed bug in ZOOM_options_getl WRT setting of parameter lenp. Fixed bug in ZOOM_options_getl WRT setting of parameter lenp that would be unset if a callback_handle is used to retrieve the options value. This bug caused ZOOM extended services update to malfunction. commit a061444f080ca7a0319bc176b48b0e70e067de13 Author: Adam Dickmeiss Date: Sun Jan 6 21:48:23 2008 +0000 Added tests using cql2pqf. commit 45754b01d18ddee3e71b79d6be871cc75c2c7c86 Author: Adam Dickmeiss Date: Sun Jan 6 19:34:34 2008 +0000 CQL free-form terms are ANDed (extra terms). CQL free-form terms are ANDed in the CQL to PQF conversion. For example, dc.title = a b, means dc.title = a and dc.title = b. And the query (a "b c") means (a and "b c"). This might be configurable in a future version of the conversion. This does not alter semantics for non-free form term queries, e.g. dc.title=a . commit 3db79025b276f232a4ab672f1ba996a0ccc64608 Author: Adam Dickmeiss Date: Sun Jan 6 17:37:13 2008 +0000 Added CQL free-form term tests. commit a29d852d610296e871716c137337fb44510eee1d Author: Adam Dickmeiss Date: Sun Jan 6 16:22:02 2008 +0000 Added support for free-form-terms. Bug #609: HDCQL. commit 783114bd4cf6e26e1743ce131d3e7f00af63ec50 Author: Adam Dickmeiss Date: Sun Jan 6 13:08:09 2008 +0000 CQL v1.2 functionality except sort. Modify CQL parser and transform code to become more CQL 1.2 compliant. Default relation is '=' instead 'scr'. Relation for exact is == instead of 'exact'. Work on bug #609: HDCQL. commit 33cb7ed48259fc7e22823531fc41a4a430aecc1b Author: Adam Dickmeiss Date: Sun Jan 6 13:02:48 2008 +0000 Use shell /usr/bin/tclsh for Tcl scripts. Use shell /usr/bin/tclsh for Tcl scripts. Do not use the smart exec invokation trick. It causes more confusion . Systems such as Debian has /usr/bin/tclsh as the preferred Tcl shell anyway. commit 162d5852cbb7881d8edae6648fbdc888d1cfe0c6 Author: Adam Dickmeiss Date: Thu Jan 3 23:10:08 2008 +0000 Always _BSD_SOURCE . Always _BSD_SOURCE regardless of GLIBC or not. Testing for __GLIBC__ after include of stdio.h was apparantly not enough commit 6ee6496a85720ce65235c5469264a6ea04b4347d Author: Adam Dickmeiss Date: Thu Jan 3 23:04:07 2008 +0000 Internal Debian pkg commit 832b917b15f8dba67b9fe41e8fb8adae107ac824 Author: Adam Dickmeiss Date: Thu Jan 3 22:55:17 2008 +0000 libyaz3-dev depends on some tclsh commit 6e325c841bbf92ba84e4a8361c8050a50943aa5c Author: Adam Dickmeiss Date: Thu Jan 3 22:54:06 2008 +0000 Define _BSD_SOURCE whenever GLIBC is used. For ziffy, define _BSD_SOURCE whenever GLIBC is used. This is to fix compilation on GNU/kFreeBSD. Debian bug #410346. commit 1251332183cc7eb0177c09c12d5c6f003192398e Author: Adam Dickmeiss Date: Sun Dec 30 22:04:12 2007 +0000 configure prefers tclsh over other versions. The configure now prefers tclsh over other versions because tclsh is (usually) the preferred tcl shell as set by the administrator. commit 13473bcae713a0df158fd9620fbeba13663459ca Author: Adam Dickmeiss Date: Thu Dec 27 13:27:40 2007 +0000 Do not reset querytype if session resets (HTTP/SRU). commit 22a9064b93713ca401a98cf7f416407c60b19def Author: Adam Dickmeiss Date: Fri Dec 21 19:01:33 2007 +0000 Improved tokenization for yaz-client coammnds update and xmles. The yaz-client commands update and xmles takes documents as parameters and parse_cmd_doc is used. This now accepts one of the forms: Date: Fri Dec 21 08:31:42 2007 +0000 Ensure fname is 0-terminated in parse_cmd_doc for yaz-client. commit c8f8034d0c8c592d036d19a7885ebc2db1706c59 Author: Adam Dickmeiss Date: Thu Dec 20 22:45:37 2007 +0000 Fixed bug #1988: CQL-to-PQF translation mishandles quoted doube. Fixed bug #1988: CQL-to-PQF translation mishandles quoted doube quotes. The CQL already uses \-escaped strings (such as \") . These can be copied verbatim to PQF. commit 36581ff40624336db8416e0892b9b78f52230224 Author: Adam Dickmeiss Date: Wed Dec 19 12:36:42 2007 +0000 Added YAZ_FILEVERSION commit 937b847b63d23182ef55eb081eb316ad034e1282 Author: Adam Dickmeiss Date: Wed Dec 19 11:02:20 2007 +0000 Towards 3.0.18. commit df747a20f74c54ee0cc2bdd4fedce527badf2d82 Author: Adam Dickmeiss Date: Tue Dec 18 21:13:06 2007 +0000 Do not use Libxml2's reader if libxml2 version < 2.6.15. commit 4bc595e8fd2364e93114ee66493544b9521680da Author: Adam Dickmeiss Date: Tue Dec 18 14:07:08 2007 +0000 Using YAZ' options rather than getopt.h. Ziffy now uses YAZ' options rather than getopt.h because getopt.h is unavailable on some systems. commit f97a90e1590b8aac0b6ab37ca32134c16dce0d3b Author: Adam Dickmeiss Date: Tue Dec 18 12:46:02 2007 +0000 Annotate commit 3eb8be5cd44ecdbd68ec3ca8a54ec86691ff9a4d Author: Adam Dickmeiss Date: Mon Dec 17 20:59:30 2007 +0000 Support read/write MARCXML collections. commit 98fd6745c622d0f3585a9cc5a2b7624472c6a028 Author: Adam Dickmeiss Date: Mon Dec 17 11:23:16 2007 +0000 Fixed bug in icu_buf_utf8_to_cstr (wrong length). Fixed bug in icu_buf_utf8_to_cstr . A string could be truncated because its string length is set to 0 in icu_buf_utf8_resize. Function icu_buf_utf8_resize no longer resets the string. commit eb70fee6c2f3154f7a8ef264810a3c015337b474 Author: Adam Dickmeiss Date: Sun Dec 16 22:43:59 2007 +0000 About new OPAC stuff commit 0b90ab9b0d18a47201ba1c5883593a14c1e5b148 Author: Adam Dickmeiss Date: Sun Dec 16 11:08:50 2007 +0000 Handle OPAC for record conversion module. Extend the record_conv system to handle Z39.50 OPAC records. Function yaz_record_conv_opac_record was added. commit 28b634e1ab587807300c4eb3bab72acaebc1647f Author: Adam Dickmeiss Date: Tue Dec 11 13:35:45 2007 +0000 Added ZOOM_package_option_{set,get}l. Added ZOOM_package_option_{set,get}l so that binary data can be used for Z39.50 packages (Update, etc). Using option_getl rather then option_get for few options that might be binary: "doc", "record" and "recordIdOpaque". commit e34f0b5ecf5e8dd010d212010b7041cfd059a853 Author: Adam Dickmeiss Date: Tue Dec 11 13:14:45 2007 +0000 Ensure ICU is part of built commit 84338b9f4dba9266b24830e23b185204bc0f87a9 Author: Adam Dickmeiss Date: Mon Dec 10 22:10:09 2007 +0000 No action-not-found rule for ICU. commit 52a0c81b9152036158b312173ec6006e9be8ab48 Author: Adam Dickmeiss Date: Mon Dec 10 20:33:47 2007 +0000 Generate yaz3.dll version from yaz-version.h commit 2852dc8fc967ac3a1e9c4fa05fdb3f77422e3499 Author: Adam Dickmeiss Date: Fri Dec 7 10:01:53 2007 +0000 Suggest yaz-doc instead of Recommend for libyaz3-dev commit 3576736bac485d8f04b2fc4f6b5cfcef7576d741 Author: Adam Dickmeiss Date: Fri Nov 30 11:44:46 2007 +0000 Adjustments to make YAZ compile as C++ code. commit 765b94caaa93566a9792019ec5d2bf56fc8100a3 Author: Adam Dickmeiss Date: Fri Nov 30 11:43:47 2007 +0000 Changed return value of function icu_sortkey8_from_utf16 to void. The return value is useless and error is signalled by status parameter. This breaks binary compatibility for that function but it is not in use anywhere. commit cf30376bd9e43ad653c6292f275ee4dd10b70a6c Author: Adam Dickmeiss Date: Fri Nov 30 11:42:04 2007 +0000 Use oid_class rather than int for OID class. Changed oclass parameter for yaz_oid_add function from type int to enum oid_class. This should not break binary compatibility. Changed oid member in struct yaz_oid_entry to enum oid_class. commit 03ce460f7ed624f0c36274cee763eb86fb2ace88 Author: Adam Dickmeiss Date: Wed Nov 21 13:53:20 2007 +0000 Use schema in Z39.50 Update. If schema is given, supply it as part of Z39.50 Extended Service update. Patch from Jacob Poulsen. commit e44e073beb75899cf954c94667b412f86009ef16 Author: Adam Dickmeiss Date: Wed Nov 21 09:04:46 2007 +0000 Man pages in Reference section. All man pages are combined in one Reference section, manref.xml, which is extracted via XSLT from each individual man page. commit a6661f2e025fd649e040da66c5ca4bc7f03aa2ff Author: Adam Dickmeiss Date: Fri Nov 16 08:01:47 2007 +0000 Update test for new wrbuf_puts_escaped functions commit 0d6e26ddc9a74fb5668efb2a8c72d58a2f4ea770 Author: Adam Dickmeiss Date: Thu Nov 15 08:45:52 2007 +0000 Introduce wrbuf_{write,puts}_escaped. Introduce wrbuf_{write,puts}_escaped. Removed wrbuf_verbose_str which now has the new name wrbuf_write_escaped. wrbuf_verbose_str has not been used outside YAZ in released software so this should be safe. Added a few Doxygen comments for wrbuf.h as well. commit 874e2073d9055e57737896300d3ad7545906de9e Author: Adam Dickmeiss Date: Thu Nov 15 08:36:31 2007 +0000 Added yaz_puts_escaped commit c8cce63830abf867befc40eee18c75b7b3dfec8f Author: Adam Dickmeiss Date: Thu Nov 15 08:33:15 2007 +0000 Version 3.0.17. commit 1d6d4797cbc07f9a87074912f8dcb119628ae173 Author: Adam Dickmeiss Date: Thu Nov 15 08:28:08 2007 +0000 ICU utility prints sortkey as well commit 861508216f18c9e932adf4b421b47bd8e4738327 Author: Adam Dickmeiss Date: Wed Nov 14 21:03:59 2007 +0000 Doxygen comments commit 37d3194530a29fe83a9340adb1b7861a257f2e81 Author: Adam Dickmeiss Date: Mon Nov 12 11:48:13 2007 +0000 More on the ICU wrapper. commit 0890bc4e5dd6103e064ec208a54f80a770e2677c Author: Adam Dickmeiss Date: Mon Nov 12 11:43:47 2007 +0000 Fix spelling commit 8fb19509bf519666171c0e6a67e4aec12f2dd81d Author: Adam Dickmeiss Date: Mon Nov 12 11:41:53 2007 +0000 yaz-icu man page/program in yaz-icu package only. The yaz-icu man page and program is part of package yaz-icu (not yaz). Descriptions in debian/control fixed to keep linda happy. commit 93848af242b888a6aeba304be54e2ff5cc5e510f Author: Adam Dickmeiss Date: Mon Nov 12 11:14:48 2007 +0000 yaz-icu part of packages commit e67f3cbcc8ebc79e343459fa5aba9ed3e3cbe990 Author: Adam Dickmeiss Date: Mon Nov 12 11:13:05 2007 +0000 Added yaz-icu man page commit 590e1743b586657868e62f00cb5181f189422c11 Author: Adam Dickmeiss Date: Mon Nov 12 11:12:19 2007 +0000 Update to use transform step commit ecd6d03e10dfbe4b6bb5b1b599c23bdb7ff305ca Author: Adam Dickmeiss Date: Mon Nov 12 11:11:16 2007 +0000 Renamed 'normalize' rule to 'transform'. The ICU chain step, normalize is now called transform because that's what ICU calls it. And we better keep things aligned. commit 5a4df800518e830b12ea3a0e906939506a7c3a65 Author: Adam Dickmeiss Date: Mon Nov 12 08:58:16 2007 +0000 Towards 3.0.16 commit 2ec0697230bef9e836df093900fd13cbdf945161 Author: Adam Dickmeiss Date: Mon Nov 12 08:57:45 2007 +0000 Using iochan_event_loop (WIN32) commit 997ab83aeb77caaff6929b4b33da327f0a894940 Author: Adam Dickmeiss Date: Mon Nov 12 08:47:22 2007 +0000 Program yaz-icu is noinst rather than bin. Program yaz-icu is noinst rather than bin for now. Will be installed in bin when a man page has been created, bug #1797. commit e76c761a46013ea1c46a2f36bc02c68bfdce3615 Author: Adam Dickmeiss Date: Mon Nov 12 08:43:49 2007 +0000 Added note about yaz_poll commit c038a022f891ee58e6d30aec93644d17d2b686d6 Author: Adam Dickmeiss Date: Mon Nov 12 08:41:56 2007 +0000 Rename function event_loop to iochan_event_loop. commit 91c35d653aea231aff9efc3eef6a6ab6662dd129 Author: Adam Dickmeiss Date: Sat Nov 10 08:59:31 2007 +0000 Do not handle EINTR in yaz_poll. Change yaz_poll so that it does not loop around select/poll if errno=EINTR is set. This sitution is handled in caller, such as event_loop used by GFS which must take further action if EINTR is set. If EINTR is handled by yaz_poll it does not get caught. commit 3b792849c676d96918850e2f1e0af87a75278501 Author: Adam Dickmeiss Date: Fri Nov 9 22:08:14 2007 +0000 Change timeout parameter for yaz_poll. Change timeout paramater from seconds to seconds+nano-seconds for yaz_poll. Also make yaz_poll_{poll,select} static (internal). commit dbf148183e1370d5b62e15abb8b24292a3009124 Author: Adam Dickmeiss Date: Fri Nov 9 21:52:38 2007 +0000 Remove include of sys/select.h from tcpip.c . It is not needed. commit 743e944e38c1f13a7304d924cd9d111c64f8c7f8 Author: Adam Dickmeiss Date: Fri Nov 9 19:00:42 2007 +0000 Use yaz_poll everywhere.. And fix syntax error! commit d6a36b43e4fa99ada736ee7680c7bb106107f223 Author: Adam Dickmeiss Date: Fri Nov 9 19:00:08 2007 +0000 Describe new functions. commit 071b5ca306efc84b1b22e071c4e03b31fb9fe17a Author: Adam Dickmeiss Date: Fri Nov 9 18:49:19 2007 +0000 Enable use of yaz_poll always in event_loop. commit 413ed128af037bdb681d673fc6ae68163ad218a4 Author: Adam Dickmeiss Date: Fri Nov 9 18:47:50 2007 +0000 YAZ GFS uses yaz_poll. The event_loop function uses by YAZ' Generic Frontend Server uses the yaz_poll function - instead of select. commit 8b4a08403ae705e22b604bffa4577ac403b7de8d Author: Adam Dickmeiss Date: Fri Nov 9 16:46:43 2007 +0000 Implemented yaz_poll - select/poll wrapper. commit 11bae153f20df554744a8b96592616eca05cc522 Author: Adam Dickmeiss Date: Thu Nov 8 18:02:04 2007 +0000 Reindent commit 1d6cd0231d7d52bd618ea33db95d3f83ba9915a5 Author: Adam Dickmeiss Date: Thu Nov 8 17:22:48 2007 +0000 Allow any locale for icu_chain_create. commit cb9f0bb98295d0b6634d41b1164f18481238f3fd Author: Adam Dickmeiss Date: Thu Nov 8 17:20:32 2007 +0000 Use xmalloc instead of malloc. commit a62ac98bc633b12d88014ba95ab212b9957571e4 Author: Adam Dickmeiss Date: Thu Nov 8 17:20:11 2007 +0000 Ignore test program commit c262e2c4e953e90016aaa2c4d3bbb190a8d29b99 Author: Adam Dickmeiss Date: Thu Nov 8 17:15:13 2007 +0000 Avoid locale member in icu_tokenizer. The locale member of icu_tokenizer is not needed. commit 20d2c2d674de4b78f90de2356537a4ea542aeeac Author: Adam Dickmeiss Date: Thu Nov 8 17:08:10 2007 +0000 Function icu_casemap_create no longer takes locale parameter. Function icu_casemap_create no longer takes locale parameter. Instead, icu_casemap_casemap takes a locale parameter. commit e089d89f38b4fc61fce16eb03150776844b053f8 Author: Adam Dickmeiss Date: Thu Nov 8 13:35:13 2007 +0000 Refactor ICU WRT locale. The locale parameter is no longer a parameter for icu_chain_xml_config and locale is read as an attribute for top XML node. The icu_casemap locale is no longer a member and a parater for icu_casemap_casemap instead. This saves a copy of a locale in each casemap. commit 307c60cf35acbe8d004b002e59416a2ebe3cb32d Author: Adam Dickmeiss Date: Thu Nov 8 09:29:38 2007 +0000 Public header icu.h, private header icu_I18N.h . commit ac218b6507b094599695b36b30fd80585a378c18 Author: Adam Dickmeiss Date: Thu Nov 8 09:07:14 2007 +0000 Indent commit 46f99a24bc67de00bcbb33458b9c187c7525b1b0 Author: Adam Dickmeiss Date: Thu Nov 8 09:03:11 2007 +0000 Changed header - part of YAZ not Pazpar2 commit 479969ddd4d243955f2e64ef8571926429ad4f37 Author: Adam Dickmeiss Date: Thu Nov 8 08:17:17 2007 +0000 For ICU enabled YAZ defined YAZ_HAVE_ICU instead of HAVE_ICU. commit def0d51c189bc8a2e9f5f9a67a58833897edecb7 Author: Adam Dickmeiss Date: Wed Nov 7 10:19:12 2007 +0000 For ICU, set ICU status to OK for some public functions. The ICU status code, UErrorCode, is now set to U_ZERO_ERROR in the preamble of functions icu_chain_create, icu_chain_xml_config and icu_chain_next_token. commit fffad7b88b5fcc5ce744151034d1df379919d6d6 Author: Adam Dickmeiss Date: Wed Nov 7 09:50:24 2007 +0000 ICU element index and sortkey no longer available. commit 71509ab1affd957fa0af7c7536105988a7ccd93d Author: Adam Dickmeiss Date: Tue Nov 6 10:27:30 2007 +0000 For ICU, locale, is a char ptr rather than uint8_t ptr. The type uint8_t is a ICU type that we don't want to use if we can avoid it. commit c2e065a4a7fa385b5658c1fcf1efa9f4ee4351e2 Author: Adam Dickmeiss Date: Thu Nov 1 10:32:43 2007 +0000 Fixed printf of pointer commit 852afaf94fd650550999e60782300525c50bdfd2 Author: Adam Dickmeiss Date: Thu Nov 1 10:29:28 2007 +0000 Fixed link to OID tools commit 8521c0ae7e5ffebcd5c463d67a829cffba80d466 Author: Adam Dickmeiss Date: Wed Oct 31 21:58:07 2007 +0000 Fixed bug #1122: Certain record IDs are not found by searches. The CQL parser preserves terms completely and \\s are no longer removed. This changes CQL output for some test cases and so these are updated accordingly. The CQL to PQF transform only treats * and ? operators if they aren't escaped. A memory leak was also fixed for the ANSIZ39.58 pattern case. commit c5408040f72a5a23dc23d6c8d30ee61ea8b6effc Author: Marc Cromme Date: Mon Oct 29 13:50:57 2007 +0000 changed ICU chain to return all tokens, also those which became empty under normalization. These might still have some display terms attached to them, which are to be used by the snippet display stuff or the scan term display stuff. commit 297aa7b45c3bd88aea2799f6810c8c85bc998f56 Author: Marc Cromme Date: Mon Oct 29 10:22:22 2007 +0000 renamed ICU chain functions to the following names relation the operation to the actually processed token int icu_chain_token_number(struct icu_chain * chain); const char * icu_chain_token_display(struct icu_chain * chain); const char * icu_chain_token_norm(struct icu_chain * chain); const char * icu_chain_token_sortkey(struct icu_chain * chain); commit c80d8f1c0245de69917debe3e918532491b87fac Author: Adam Dickmeiss Date: Mon Oct 29 09:16:32 2007 +0000 Extended auth command so that NULL User, pass may be set. This is to solve bug #1820. commit 674986e09b1e2c5ea9670355aef21c813323d186 Author: Marc Cromme Date: Thu Oct 25 10:04:32 2007 +0000 added special case with an empty ICU chain for 'raw' index processing without call of transliterators, case maps or tokenizators. It's optimized such that the following happens: if (!chain->sort), no utf8 to utf16 translation occurs, and the original cstring is returned for the icu_chain-get_norm8() call. if (chain->sort), utf8 to utf16 translation is made, the original cstring is returned for the icu_chain-get_norm8() call, and the utf16->sortkey conversion is run previous of calling icu_chain-get_sort8(). commit 80eb42ff87c6bda77018232e174e5aae41fc29e8 Author: Marc Cromme Date: Thu Oct 25 08:42:21 2007 +0000 simplified test case XML config root element tags commit b59f3a79326742a4432bda999670f0c85e2c83b7 Author: Marc Cromme Date: Thu Oct 25 08:40:06 2007 +0000 removed dead code from ICU files commit ee2314e5828aac6055031f9ed4441eb9852ec27c Author: Marc Cromme Date: Thu Oct 25 08:32:50 2007 +0000 added sortkey flag to icu_chain constructor commit 40f472b5f14f2d59d5f72d5814351ffdc1f54418 Author: Adam Dickmeiss Date: Wed Oct 24 22:10:24 2007 +0000 Avoid per-target CPPFLAGS. If we use per-target flags, AM_PROG_CC_C_O is required or we just dont it. commit e005fd551460aab9ccefb561e42c746cc58fd302 Author: Marc Cromme Date: Wed Oct 24 14:48:17 2007 +0000 Isolated ICU locale out of XML config file. Locale is now the second argument to chain = icu_chain_xml_config(xml_node, (uint8_t *) "en", &status); commit bbd768abbf09c38b0438e0186e50f3560b372dd9 Author: Adam Dickmeiss Date: Wed Oct 24 13:50:02 2007 +0000 Added yaz_match_glob commit 42e6fdb480e4de99b856018fd70475bd7fbdb928 Author: Marc Cromme Date: Wed Oct 24 13:23:34 2007 +0000 fixed wrong token count when tokens disappear with ICU normalization commit 9edd0f41a0323104c2632c2291eae336ab60874c Author: Marc Cromme Date: Wed Oct 24 07:41:48 2007 +0000 fixed memory violation in ICU chain code, restructuring tokenizer to allow for non-empty tokens still ongoing work commit 30212597593ba71295ef0b98aa3527526754a1eb Author: Marc Cromme Date: Tue Oct 23 07:51:57 2007 +0000 surpressed ICU test tokenization output commit 7a5661d46c2051c619fe1b794cca882a72707c52 Author: Adam Dickmeiss Date: Mon Oct 22 17:52:09 2007 +0000 File m4/ac_check_icu.m4 part of dist. commit c168c38b0beb83bca23c72d9203cc796a374bfac Author: Adam Dickmeiss Date: Mon Oct 22 17:32:07 2007 +0000 Make ICU stuff compatible with old C comps. YAZ License. commit b80c29e05c84270159284f5b1297e38175cd63e0 Author: Adam Dickmeiss Date: Mon Oct 22 12:50:52 2007 +0000 Fixed lalibs output for ICU mode. commit f98b671ac4ece0194de14c04ef7c281a410e0831 Author: Adam Dickmeiss Date: Mon Oct 22 12:40:04 2007 +0000 Debian package 3.0.15-1 with ICU. commit 0ffb25b0bf78f53399267664b71206c88980c4da Author: Adam Dickmeiss Date: Mon Oct 22 12:21:38 2007 +0000 Added ICU chain component - which used to be part of Pazpar2. commit 03531ce2d54914dde2e679aa6382eb04d9e8f1d6 Author: Adam Dickmeiss Date: Tue Oct 16 10:45:53 2007 +0000 Removed material about Object identifiers for YAZ 2. commit e6f45fddb3d4267340ad320dbedfbf5cb68c4d21 Author: Adam Dickmeiss Date: Mon Oct 15 20:45:46 2007 +0000 Added a record for testing of bug #1778. commit 02ba601656652e2362aee6fd23d1b2ac5c35bcca Author: Adam Dickmeiss Date: Mon Oct 15 20:45:05 2007 +0000 Fixed bug #1778: Extended ASCII not escaped always (UTF-8 to MARC-8). When in non-ASCII mode, YAZ now escapes combined character sequences. A test was added in tsticonv.c. commit 0efc47dc6d0080180038945a5f914749c3585799 Author: Adam Dickmeiss Date: Mon Oct 15 12:00:31 2007 +0000 Increase intermediate buffers for wrbuf+iconv. The intermediate buffer for wrbuf+iconv is increased from 12 to 16 bytes. There may be MARC-8 sequence overflows overwise - with at least reset (flush). commit f66b53c033be535cc3fab8bcb2949fa2927b25d4 Author: Adam Dickmeiss Date: Fri Oct 12 14:22:19 2007 +0000 Re-organized MARC-8 charset creating code a bit. Re-organized MARC-8 charset creating code a bit.. A define + code to work on bug #1778 was added. commit 377e50914cd78d52e77032a3eaf8972f23b4e7b9 Author: Adam Dickmeiss Date: Tue Oct 9 06:00:55 2007 +0000 Revised types for functions cs_complete_auto, etc. The functions cs_complete_auto, cs_complete_auto_head takes 'const char *' as buffer rather than 'const unsigned char *'. This makes some casts unnecessary. This also fixes tst_comstack which used to test cs_complete_http. This function, howver is no longer public, so cs_complete_auto is used instead. commit 29cc293e92725df0aaf70fa4897600597dd8db9b Author: Adam Dickmeiss Date: Sun Oct 7 08:53:26 2007 +0000 Added HTTP tunnel facility for COMSTACK, bug #1752. This is a facility that allows a Web proxy, such as squid, to tunnel Z39.50 traffic. This facility is "transparent" to must applications using YAZ. It's enabled by using pseudo transport connect: followed bý the we proxy address, followed by command, then follwed by he regular "virtual" addresss. For example, connect:webproxy.com:3128,tcp:z3950.loc.gov:7090/voyager . commit 019eca69c2a438db0aea7b8760685c618cb5f552 Author: Adam Dickmeiss Date: Fri Oct 5 16:46:55 2007 +0000 Implemented function cs_create_host. Implemented function cs_create_host parses a YAZ host component. This is to be used for HTTP Connect tunneling (bug #1752). commit 8508799fc20ead07aae07f5f29604719e96b4dda Author: Adam Dickmeiss Date: Fri Oct 5 15:11:36 2007 +0000 Changed blank (0x20) handling conversion to MARC-8. The conversion to MARC-8 now always escapes the BLANK character outside Basic ASCII. This is stricly speaking not necessary - blank is part of "all" pages (sets). But some tools cannot handle it. YAZ, however, treats blank as blank in all pages when MARC-8 is read (converted from). commit f4111def563afa2864d73ac82b86c933bc9138b3 Author: Adam Dickmeiss Date: Wed Sep 26 19:14:04 2007 +0000 Bump to 3.0.15. commit 185d51016579faad34f8b62151ee1d5125a4d430 Author: Adam Dickmeiss Date: Tue Sep 25 07:34:03 2007 +0000 Combine test from tstmarciso.sh and tstmarcxml.sh to tstmarc.sh .. Mostly because the latter requires output from the former (so make -j2 could break). commit 9a2e6a5228a544875ae781451bd149a72aaa54a7 Author: Adam Dickmeiss Date: Mon Sep 24 22:22:13 2007 +0000 Update this test due to fix for bug #1666. commit 386fc8aa64d01486aa4fb3dac0dde1003a3b3d3f Author: Adam Dickmeiss Date: Mon Sep 24 12:51:10 2007 +0000 Fixed bug with shadowing of variable in lookup_marc8. Bug introduced in previous commit (1.44). commit 790b38909763b433a994fdbdd277d1b01859728e Author: Adam Dickmeiss Date: Sun Sep 23 07:40:13 2007 +0000 Document more yaz-marcdump options commit f6d1839e909db3578670229fc9a6f56b18a034e6 Author: Adam Dickmeiss Date: Sun Sep 23 07:21:51 2007 +0000 Added MARC-8 encoded Arabic record, marc9.marc, to test that blanks are preserved. Added UTF-8 encoded Chinese record, marccol3.u8.marc, which has the Ideographic space sequence it. commit 6278560ff2c1d116cb6c06c7c145573d8d155a4f Author: Adam Dickmeiss Date: Sat Sep 22 18:56:22 2007 +0000 Added test for conversion of utf8 e38080 to marc8 212321 (Ideographic space). commit e77f334b9b8b6d0ba01b3ede0f58b99ac561dd2d Author: Adam Dickmeiss Date: Sat Sep 22 18:55:02 2007 +0000 Remove duplicates (already existing) in flat entries for MARC-8 tries. Previously only duplicates in index tries were treated. This ensures that only first sequence (of multiple) is used for conversion and takes precedence. For example utf E38080 is converted then converted to marc8 212321 (not marc8 212320). commit 6d61fec3c06d8ed1d648ec7da417a1a8aaa52691 Author: Adam Dickmeiss Date: Sat Sep 22 18:49:55 2007 +0000 Treat space (20X) as present in all MARC-8 charsets commit 1325ab853fdccee0f1a6659ef216eb96b8b6b39c Author: Adam Dickmeiss Date: Fri Sep 21 16:04:48 2007 +0000 Fixed compilation for absent Libxml2. commit 19422e2310de8b0ac931561be72410b5b6d8b2ae Author: Adam Dickmeiss Date: Fri Sep 21 09:24:17 2007 +0000 Towards 3.0.14 commit 8b057c45442fb3de1af1aa7d63b36126560fde12 Author: Adam Dickmeiss Date: Fri Sep 21 07:10:08 2007 +0000 Initialize diag_messÃage member of ZOOM_record commit 3085741e28eb94029b230bb25e4926aed32daf29 Author: Adam Dickmeiss Date: Thu Sep 20 17:22:45 2007 +0000 Fixed bug in conversion to XML from MARC: Non-XML characters in control fields were not removed. commit 8c49b29ec99736b215bb2b98f049e7ed5d87ed26 Author: Adam Dickmeiss Date: Tue Sep 18 19:19:16 2007 +0000 Removed reference to url.srw commit 53bc22fbe34749ba0151ac0cd80a0257056c15ee Author: Adam Dickmeiss Date: Tue Sep 18 13:05:18 2007 +0000 Versino 3.0.13 commit afae1117609712743c1109597d080a53a8dac5d4 Author: Adam Dickmeiss Date: Mon Sep 17 19:18:27 2007 +0000 Make an MARC conversion trie for each characterSet section rather than codeTable. This is ensure we can deal with G0/G1 sequences. Bug #1464. commit f56606aca0511a699aa7531acec63c212af61447 Author: Adam Dickmeiss Date: Mon Sep 17 19:15:22 2007 +0000 Log iconv tests that fail commit 270160339305b73c0b5cdf74f004c684e83e2cd8 Author: Adam Dickmeiss Date: Mon Sep 17 19:14:26 2007 +0000 Added wrbuf_verbose_str. commit 2b929cf75020ee215393a655f0403c849fed5ea9 Author: Adam Dickmeiss Date: Fri Sep 14 21:39:36 2007 +0000 Use updated codetables.xml as provided by Larry Dixson (bug #1464). commit ff006112d533333a6b3f40d9b24180cd8db5f121 Author: Adam Dickmeiss Date: Fri Sep 14 20:55:57 2007 +0000 Bump version to 3.0.13 commit 2df748278af6d0220d5d9e0a0e54a5e16cd3de63 Author: Adam Dickmeiss Date: Wed Sep 12 06:49:37 2007 +0000 Towards 3.0.12 commit 1be632f8a982457cd7c78aadd44e37f39454de18 Author: Adam Dickmeiss Date: Tue Sep 11 16:41:37 2007 +0000 More news commit a37c6b37804b2cad867b2740488f50e96007ba65 Author: Adam Dickmeiss Date: Tue Sep 11 16:36:51 2007 +0000 ZOOM C announces SRU version 1.2. commit 2f163ad29604f429bba4d5ac2bc5447be493af55 Author: Adam Dickmeiss Date: Tue Sep 11 15:42:43 2007 +0000 More news commit 6aed21d6613e5071a29885e1e1575c890adc3e0e Author: Adam Dickmeiss Date: Tue Sep 11 15:16:20 2007 +0000 Handle NULL SRU addinfo in printing commit 0c04c08f58c61bf0f16e6783d5461dacda43037a Author: Adam Dickmeiss Date: Tue Sep 11 08:40:28 2007 +0000 Fixed problem with record cache and schema/diagnostics not being set at all times. commit 42ee0e2611083beaa2d206e2039522c187735ffa Author: Adam Dickmeiss Date: Tue Sep 11 08:37:53 2007 +0000 Using odr_strdup_null a couple of places commit 116bfb8f4109efbe39bdfe98b0e17e15e8e50c4a Author: Adam Dickmeiss Date: Tue Sep 11 08:35:42 2007 +0000 Added odr_strdup_null which calls nmem_strdup_null. This function accepts a NULL ptr as source in which the result is a NULL ptr too. commit c9e4ad355f2f30b98fa129d9f63d00f70b56652d Author: Adam Dickmeiss Date: Sun Sep 9 05:54:45 2007 +0000 Handle surrogate diagnostics for SRU commit f9747584f933039d25a9ba450f362d61733d14ea Author: Adam Dickmeiss Date: Sat Sep 8 06:17:45 2007 +0000 Function ZOOM_record_get allows type_spec=schema in which case schema for record is returned. commit d9654ed894daa49f6f2996df86d330322ee28643 Author: Mike Taylor Date: Fri Sep 7 17:42:12 2007 +0000 Rolling commit f85108eb899eec594765c5c15408a8c64279099c Author: Mike Taylor Date: Fri Sep 7 17:41:47 2007 +0000 yaz_diag_srw_to_bib1 now looks up SRW diagnostic codes first in a new explicit reverse-mapping table, falling back to reverse-lookup in the old table only if this does not succeed. commit a94b5a44d632a6df1a1de5dc75e73adc03e8e6b4 Author: Mike Taylor Date: Thu Sep 6 17:11:59 2007 +0000 Add z_HTTP_header_add_basic_auth() Uses new static yaz_base64encode() commit 3f4afac741a6175e12d08ddcd0fe0ba677c42123 Author: Mike Taylor Date: Thu Sep 6 17:10:35 2007 +0000 Add HTTP Basic authentication to SRU/GET, SRU/POST and SRW requests. commit 7bb60eca43952aeddc459b3e67b111f032017e76 Author: Mike Taylor Date: Thu Sep 6 17:09:56 2007 +0000 Add z_HTTP_header_add_basic_auth() commit b07ed6e4de0ebfdb87a02d57f27de5c1a8b99616 Author: Mike Taylor Date: Thu Sep 6 16:38:38 2007 +0000 HTTP Basic clienty authentication. commit 67949e915ac730f385c48f3be8bdf38ba1b35eb5 Author: Mike Taylor Date: Thu Sep 6 12:40:53 2007 +0000 Set SRU request structure's username/password from connection options. commit c880dceeaeca4082b215a15eb48fd655cb7b62f7 Author: Adam Dickmeiss Date: Fri Aug 31 21:23:45 2007 +0000 Option sru_version holds negotiated SRU/SRW version. commit 669aa0722ab651e114f8226014e7957d5d2b92fd Author: Adam Dickmeiss Date: Fri Aug 24 13:26:03 2007 +0000 yaz_srw_get returns 1.1 PDU (as in earlier versions) commit 0c4bd81e2e56724de1adbbc753f812328fb20e3c Author: Adam Dickmeiss Date: Fri Aug 24 13:25:13 2007 +0000 yaz-client command 'sru' may set both SRU method (SOAP/GET/POST) and version. commit 87c5b79ec9ced76de948e833ef2f8eb561d2f77a Author: Adam Dickmeiss Date: Thu Aug 23 14:28:07 2007 +0000 Fixed typo commit 3f36e04a60f21ed11fbb7bdb32923cffcb519f2f Author: Adam Dickmeiss Date: Thu Aug 23 14:23:23 2007 +0000 Added new ZOOM connection option "sru_version" which specifies SRU version - say 1.1 or 1.2. Fixed YAZ server's SRU GET/POST decoding WRT version checking. Anything but 1.1 was rejected and this turned out to be a mistake. For the GFS, anything but version 1.1 is negotiated to 1.2, except 1.1 which is negotiated to 1.1. commit 407a291011ba2743e175f3d2a84d4c6837406f7c Author: Adam Dickmeiss Date: Thu Aug 23 12:24:38 2007 +0000 For SRU sarchRetrieve responses option resultSetId is set for result set commit ecbd263c8be1f35bde47ba8c119627a6dedb9b28 Author: Adam Dickmeiss Date: Wed Aug 22 09:09:03 2007 +0000 Version 3.0.10 commit 2e6fc26c0be8cbb1052599e12804a39adc1bbbe1 Author: Adam Dickmeiss Date: Wed Aug 22 08:58:16 2007 +0000 Updated RPM spec file with some enhancements from Martin Armbrecht. commit deb4950cd76f5ff06cbb5246a2c2303fea6c9dba Author: Adam Dickmeiss Date: Wed Aug 22 08:11:28 2007 +0000 Revert last change regarding display_term. There still exists systems with old behavior. commit c0858501c14e5b74a62656042dc6c8ad6a2a242c Author: Adam Dickmeiss Date: Tue Aug 21 13:20:51 2007 +0000 Always honor display_term being set by backend handler. There is no need to be pre YAZ 2.0 backwards compatible. commit a92ea4f2be422ed5f52f0fc1c8b6416aebfe0c5a Author: Adam Dickmeiss Date: Tue Aug 21 13:19:44 2007 +0000 Fixed scan continuation line not being set for displayTerm being ste commit c45f2b8efebe64cf3d8d45eae18dc0fd78bc933f Author: Adam Dickmeiss Date: Thu Aug 16 10:09:36 2007 +0000 Added support for SRU scan. commit fadf07ca8b5d84ed21b83e63bfec438666e11587 Author: Mike Taylor Date: Wed Aug 15 17:53:11 2007 +0000 COmment. commit c3a188aecc8906b5e480ec7a6435d5622867457f Author: Adam Dickmeiss Date: Tue Aug 14 12:22:51 2007 +0000 For XML ILL Request, YAZ attaches a dummy XML record as the ItemRequest EXTERNAL in the targetPart structure. commit 7eab93067f8ab95e6b422eedb2d900ca19d4d15e Author: Adam Dickmeiss Date: Tue Aug 14 12:21:14 2007 +0000 For XML ILL Response, YAZ prints Octet aligned buf (presumably XML) if that is the ItemRequest EXTERNAL in the targetPart structure. commit 68c26dc239554eb10af556b3c9d133228e862694 Author: Mike Taylor Date: Mon Aug 13 16:58:46 2007 +0000 Document ccl2rpn setting. commit d534632a867d62e9a443eac694845698916e855a Author: Mike Taylor Date: Mon Aug 13 16:58:27 2007 +0000 Add entity reference-tools-ccl-qualifiers Better section title. commit 45ed8af75a87b399a73a183d77738f3fec21f725 Author: Mike Taylor Date: Mon Aug 13 16:58:02 2007 +0000 Better section title. commit 3ee23524c33a4b3453930c5c05fc8b5f87fa48bb Author: Mike Taylor Date: Mon Aug 13 16:57:40 2007 +0000 Add entity reference-tools-ccl-qualifiers commit 4f8aff36e000a9d90227fd30d9f9dc63e8ffad40 Author: Mike Taylor Date: Mon Aug 13 16:46:47 2007 +0000 Add code to compile CCL qualifiers if specified using . commit b2cbc2112e0f909bc652d65ea9309c8ac918a638 Author: Mike Taylor Date: Mon Aug 13 16:46:19 2007 +0000 Add ccl_transform element to struct gfs_server. commit 0c639102deb9c9264d76f5c065b1f0e33d68751a Author: Mike Taylor Date: Mon Aug 13 16:43:59 2007 +0000 If a CCL qualifier mapping file has been specified, then incoming CCL queries are now transformed into Type-1 before being being handed off to the back-end callback. This is supported for Z39.50 searches, but not for Scan, nor for SRU (where it's impossible to send CCL anyway). commit 7be79ccf5e305ff863d2c093dfe67b0e56137c6d Author: Mike Taylor Date: Mon Aug 13 16:41:59 2007 +0000 Describe CCL support in GFS. commit 57f792928a420aca87e4a633eb5e1d6300746b46 Author: Mike Taylor Date: Mon Aug 13 16:23:30 2007 +0000 Fix minor type mismatch commit 5a52bdfe653f1b89343722aa0294276d9a113e97 Author: Adam Dickmeiss Date: Fri Jul 27 08:05:52 2007 +0000 Fixed bug #1338: GFS crashes when startRecord > number of hits. commit 6cca4572a48148d7d425d1643ddd08d03cedeb69 Author: Adam Dickmeiss Date: Fri Jul 13 09:28:43 2007 +0000 Remoevd unused definition commit d0beadb0e2b57bcef7fd18c3a8ecfcbcd83492d6 Author: Adam Dickmeiss Date: Wed Jul 11 08:35:57 2007 +0000 Attribute spec file. Not in use yet commit a6a6e734143028630b0cfc4af582840fbbbe9c2a Author: Adam Dickmeiss Date: Tue Jul 10 14:41:36 2007 +0000 Make configure produce error if --with-pcap=yes or --with-pcap is given and libpcap is not found. Added --with-pcap to configure in PRM spec. commit 5aaf79c4e4fbf5c5f17f136646e1933b5c989b7d Author: Adam Dickmeiss Date: Tue Jul 10 14:28:37 2007 +0000 For libpcap default search use AC_CHECK_LIB, AC_CHECK_HEADER. For manual libpcap spec, accept all values. But omit -L/-I for /usr. commit 797335bc656ffda99eddacfb5fdf344f716c5f80 Author: Adam Dickmeiss Date: Tue Jul 10 09:42:46 2007 +0000 Removed / in doc install rule to avoid double-slash (cygwin) commit 99f72cd57ac827461dd7d47f469a986c99a7285b Author: Adam Dickmeiss Date: Tue Jul 10 09:40:44 2007 +0000 Removed / in doc install rule to avoid double-slash (cygwin) commit 0068cd7cdfaa73ce838581a166e099f76ea3f86a Author: Adam Dickmeiss Date: Mon Jul 9 17:39:01 2007 +0000 BuildRequire libpcap-devel rather than libpcap commit 9478b64c522bc0314213d485b30a81643e3fed51 Author: Adam Dickmeiss Date: Wed Jul 4 11:44:20 2007 +0000 Changed the Z39.50 ASN.1 a little: make userId in Permissions optional and taskPackageRecords optional in Extended Service update (first version). This is due to at least one implementation which incorrectly omits these. commit 9c8fdeb92bede48bce060ec8ee50624c5622a633 Author: Adam Dickmeiss Date: Wed Jul 4 11:42:14 2007 +0000 ZOOM dumps BER if decoding fails and loglevel zoom is set commit b0af12e407d33fc35d41152e67c568f762e3b41f Author: Adam Dickmeiss Date: Wed Jul 4 09:21:00 2007 +0000 Revert commit 39975667295ec760cc15b863f64e8d5fd74ac209 Author: Adam Dickmeiss Date: Wed Jul 4 09:20:06 2007 +0000 Internal release commit e61253caa274993fbb46c38ea47495b611a1b8d6 Author: Adam Dickmeiss Date: Fri Jun 29 08:09:28 2007 +0000 Version 3.0.9 commit a669063b8341659cd03dc90998997876b7177f4a Author: Adam Dickmeiss Date: Fri Jun 29 08:05:06 2007 +0000 Added support for the use of the older versions or Extended Service Update in ZOOM. To faciliate this, an option "updateVersion" may be set to the version , 1=first, 2=second, 3=third. The third version is what ZOOM C has used so far. And that, obviously, is the default. commit c38061dc0c20aa564b53a78840970f581d795014 Author: Adam Dickmeiss Date: Fri Jun 29 08:03:02 2007 +0000 Bump version to 3.0.9 commit 8fc18939a7972d53f8f8c516ac41df0fe595f780 Author: Adam Dickmeiss Date: Thu Jun 28 07:58:07 2007 +0000 Changed CQL to XCQL conversion, so that element for relation value in modifier is 'comparison' rather than 'relation' so that it conforms to http://www.loc.gov/standards/sru/xml-files/xcql.xsd When a comparison value is omitted, the st.relation in cql_node will be NULL instead of "=". This has the effect that comparison will be omitted in those cases. commit 850094db17968d188737459af6e47c78059e6dc6 Author: Adam Dickmeiss Date: Mon Jun 25 18:42:05 2007 +0000 Ignore new programs commit 1a8d80ad60965cd61c35e90376517c43ba4d6478 Author: Adam Dickmeiss Date: Mon Jun 25 18:41:40 2007 +0000 Upstream 3.0.8 commit 349d7d67bd0ec0a56e885d4b4cadbfc9a4e35661 Author: Adam Dickmeiss Date: Mon Jun 25 18:41:13 2007 +0000 Towards 3.0.8 commit 4c0c2dd79acdadfda1e7fcb85309604d4f59bd02 Author: Adam Dickmeiss Date: Mon Jun 25 18:34:27 2007 +0000 Fixed spelling commit a5a9ecf542c87afaa06315bcb389686bedae07b3 Author: Adam Dickmeiss Date: Mon Jun 25 18:34:09 2007 +0000 Fixed bug #1208: SSL appears to be broken in ZOOM. The problem occurred when cs_rcvconnect returned 1. In this case no event was not generated. Now ZOOM_EVENT_NONE is created. commit 813b245533765d9ff66d35f0d28fdbfc5ba03bcb Author: Adam Dickmeiss Date: Sun Jun 24 19:27:11 2007 +0000 Implemented oid_name_to_dotstring. Added test for OID API. commit 1db93bf6100a499194c8c0e5917d718fe86f0509 Author: Adam Dickmeiss Date: Thu Jun 21 09:00:53 2007 +0000 Allow elementSetName to be specified for ZOOM C record update. commit 8a87b507b01dd8641c0dff2d9e346f54b298c473 Author: Adam Dickmeiss Date: Wed Jun 20 12:55:29 2007 +0000 Allow waitAction to be specified for ZOOM C based for Extended Services. commit 1f8f1e50d305948b3cec6e457e736e05c33a2209 Author: Adam Dickmeiss Date: Sun Jun 17 07:05:42 2007 +0000 Removed definition of docdir. It is set by automake already commit 64ff1eadd3537def2c729baa10c2d677714daa9c Author: Adam Dickmeiss Date: Thu Jun 14 10:44:18 2007 +0000 Fixed NULL ptr reference caused by omitted record syntax OID. Bug introduced in YAZ 3 series. commit 61de996db7f24e944ad8f392cc88241fee2eca41 Author: Adam Dickmeiss Date: Wed Jun 13 08:22:31 2007 +0000 Update to libxml2 2.6.28 / libxslt 1.1.19 commit 16895949a4bd1a0cc5c25b0642cb0c7a1e47ff12 Author: Adam Dickmeiss Date: Mon Jun 11 08:50:57 2007 +0000 Make yaz-ztest returns a certain number of hits if a "numeric" term is supplied. E.g. @attr 1=4 12 - returns 12 hits. A non-numeric term make yaz-ztest return a random hit count as before. commit 9a121950d3e3614bcbf3efdf52ba9aa2a6573ee0 Author: Heikki Levanto Date: Fri Jun 8 10:01:07 2007 +0000 Fixed a silly bug: displayed version info also if -l was specified. Added the missing break statement commit 0941acc604fd0ca61c4e0e25dd887669cfed1547 Author: Adam Dickmeiss Date: Thu Jun 7 08:27:57 2007 +0000 Bump version to 3.0.7 commit 18b038dc608f5fe5d4d30f2193acf15ae0d26b2d Author: Adam Dickmeiss Date: Wed Jun 6 16:42:35 2007 +0000 Towards 3.0.6. commit f24932e1b6b8a76074853086fe1c85f59d1e5122 Author: Adam Dickmeiss Date: Wed Jun 6 16:34:23 2007 +0000 Proper comments and info for dealing with various VS versions commit e6326dd550a7c1c266c084a0795658a04d4142f2 Author: Adam Dickmeiss Date: Wed Jun 6 16:33:19 2007 +0000 Removed WIN32 libs not in use commit 2581c46b3b3f9f26fb74621beb5ede69f8816382 Author: Adam Dickmeiss Date: Wed Jun 6 16:32:34 2007 +0000 Use LONGLONG rather than ULONGLONG on Windows to support good'old MSVC6. commit 26d27c1015a4279c44b09b18e495bc8454f92345 Author: Adam Dickmeiss Date: Tue Jun 5 06:52:23 2007 +0000 Fix potential buffer overrun that could occur if SRU charset name was more than 40 characters in length. commit 4ea32ed8aafed5ffecaeb5fe66ac9bb28f9dd180 Author: Adam Dickmeiss Date: Tue Jun 5 06:42:26 2007 +0000 Using yaz_snprintf (snprintf) rather than sprintf. No real buffer overrun since 511 < FILENAME_MAX in virtually all cases. commit e02ed55f805444f09393408c5779a2be3f5f699f Author: Adam Dickmeiss Date: Tue Jun 5 06:40:28 2007 +0000 Update usage msg commit 16ccd387f153b3e836f068b9ec4e032979d99393 Author: Adam Dickmeiss Date: Tue Jun 5 06:23:07 2007 +0000 Fix buffer overrun by one in the setting of l_prefix/l_prefix2 commit c6c31633806f578abea7a1c58e9b837c42150709 Author: Adam Dickmeiss Date: Tue Jun 5 06:22:19 2007 +0000 Exercise yaz_log_init_prefix commit bbc595bc456f198198ae96af6aa8b86ae2721e36 Author: Adam Dickmeiss Date: Tue Jun 5 05:58:16 2007 +0000 Fixed potential buffer overrun in yaz_log for YLOG_ERRNO messages. commit 963c246750e0f77d996fa4d9e1bc7cbe1ef9c49b Author: Adam Dickmeiss Date: Tue Jun 5 05:42:07 2007 +0000 Properly null-terminate Unix-domain socket path. Thanks to Marc Espie for spotting this. commit c6cccdaf2abfed2fd53b43e079a9dc47bc35be6b Author: Adam Dickmeiss Date: Mon Jun 4 09:18:09 2007 +0000 Fix NULL ptr reference which occurred for unknown diagset receieved. commit 1ed2381d1ea05352922d149a98257eb1c55a29c0 Author: Adam Dickmeiss Date: Sun Jun 3 15:55:50 2007 +0000 Order options and usage info commit 8cd0ea1bdddd37a48526a3e52045cada428379c5 Author: Adam Dickmeiss Date: Sun Jun 3 14:59:33 2007 +0000 yaz-client now reads commands from file given by option -f if specified; then tries to read .yazclientrc in current directory. Failing that, it reads .yazclientrc from user's home directory. commit e487ea875fb467142eb646c8efadcada30d4e846 Author: Adam Dickmeiss Date: Sun Jun 3 10:10:07 2007 +0000 Added Deb/RPM package for yaz-illclient. Closes #1155. commit 8cb2e2a9699826bbc9a09d9eea1723cec3cd418c Author: Adam Dickmeiss Date: Sun Jun 3 09:57:25 2007 +0000 Install yaz-illclient in PREFIX/bin commit cf1cd05a005dddace5aadb0cf2913dad0caec7d5 Author: Adam Dickmeiss Date: Sun Jun 3 09:56:50 2007 +0000 Added yaz-illclient man page. commit 641c4961572274353f39c09ed4063eb69e401996 Author: Adam Dickmeiss Date: Sun Jun 3 09:34:43 2007 +0000 Embed manifest file in EXE/DLLs for YAZ. But only if USE_MANIFEST is set to 1. commit 5fca2e8ca1775ad5adceb1568508d911d646a01b Author: Adam Dickmeiss Date: Sun Jun 3 08:06:31 2007 +0000 Fixed bug #1157: yaz-client does not read .yazclientrc from current directory. yaz-client now reads ·yazclient from current directory; failing that ~/.yazclientrc is read. commit 4003509be48a195f3da7d863f47bc5984168acfe Author: Adam Dickmeiss Date: Sat Jun 2 20:57:12 2007 +0000 3.0.5 for windows commit fc9ef9d18c52b651a6994b34d1a6c37640dfaef2 Author: Adam Dickmeiss Date: Thu May 31 12:14:02 2007 +0000 Using informaltable rather than table for list of Object Identifiers. This is to avoid truncation of the (long) table. Combine OID and Constant into one column. commit eede2a3b7257fc9a510471c2e9c52176c1444362 Author: Adam Dickmeiss Date: Thu May 31 09:45:14 2007 +0000 Fixed bug #1151: Doc's don't reflect new oid layout. Current backend.h structs copied into synopsys sections and minor wording changes about OIDs were changed. commit 392f31adbbc81e6d170003fcb60554ee5a8ef28b Author: Adam Dickmeiss Date: Thu May 31 08:01:30 2007 +0000 No need for -lnsl for wrap commit 0d928faa541ca71cbf230aff4a41bf11f2cb8e13 Author: Adam Dickmeiss Date: Thu May 31 07:40:25 2007 +0000 Internal release. commit 7e1f377cd635916be26b2240d996889129d0f249 Author: Adam Dickmeiss Date: Thu May 31 07:38:13 2007 +0000 Added support for correlationInfo Note and ID for Record Update via ZOOM C. commit 3ebf9c87afb52af8cc6e696ffbb040aeca68b3f4 Author: Adam Dickmeiss Date: Wed May 30 21:56:59 2007 +0000 Changed the way yaz-client encodes charset negotiation information to target when no negoatitionCharset is set by user using command negcharset. In YAZ 3.0.0 and later the negotation information was simply omitted. Now the OriginProposal is sent anway but with proposedCharSets and proposedlanaguages omitted (both are optional). YAZ Frontend server is also modified to deal with this: omitted proposedCharSets in the OriginProposal will make the frontend server return default character set for target if that is supplied by the backend init handler (member query_charset). commit a51cfbf3f8ca5c487fc8bbcecb4e456a08162a33 Author: Heikki Levanto Date: Wed May 30 13:59:04 2007 +0000 Some old changes were not committed properly commit f421f15a069d0038e5552b81d6d48bb2d3680732 Author: Adam Dickmeiss Date: Wed May 30 08:42:01 2007 +0000 Prepare for new internal deb package. commit 7ab87517b1d480eb94e95658ab9acbe8ce24648e Author: Adam Dickmeiss Date: Wed May 30 08:40:26 2007 +0000 Added yaz-client command querycharset which specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). commit b56e2d9e43985fa33d1d7ee8d0c9b1ed69eba8d3 Author: Adam Dickmeiss Date: Wed May 30 08:22:03 2007 +0000 Charset ISO5428:1984 is an alias for ISO5428-1984. commit f60c0db8c4379047cdd75e2be50549abc0a1c74a Author: Adam Dickmeiss Date: Wed May 30 08:12:16 2007 +0000 Implemented a way to perform scan in a result set using Z39.50. This is achieved by attaching the result set name in the characterInfo (type InternationalString) of OtherInformation in the Scan Request PDU. The result set is identified in the otherinformation by the new OID: USERINFO, Z3950_PREFIX.10.1000.81.4, "Scan-Set This allows for scan in result set and faceted search . Zebra did some of this in the APT term using attribute type 8 and value being result set. Using the OtherInformation approach for this is cleaner and easier to work with in proxies and the like. This facility can be used in yaz-client using new command setscan which takes a result set as first commit d554f7894acd70ee293d7c11294244bca870a6de Author: Adam Dickmeiss Date: Wed May 30 08:04:28 2007 +0000 Removed NMEM debug code commit f3c256e67f73eee9cace104051db51bfd13166b4 Author: Marc Cromme Date: Fri May 25 16:19:46 2007 +0000 corrected typo commit a0ae7e668314833310c9197dc451f893ec9c5731 Author: Adam Dickmeiss Date: Thu May 24 10:18:36 2007 +0000 Function encode_uri_char does not hex encode unreserved chars (RFC 2396 section 2.3). commit 49eef90be08a7a201e112dacd5e358d8776c9117 Author: Adam Dickmeiss Date: Wed May 23 13:16:32 2007 +0000 Bump version to 3.0.5-1 commit 337f11f176f339be5957832bb418b6b39a6c1101 Author: Adam Dickmeiss Date: Wed May 23 13:11:11 2007 +0000 Changed decoding of SRU XML packed records to deal with servers that have recordData with XML data with multiple root nodes. Also make comparison for recordPacking case insensitive. Again, one server returns "XML" where others return "xml". commit ffc156e81106f536a43f949379cee95b16e0c957 Author: Adam Dickmeiss Date: Wed May 23 12:58:59 2007 +0000 Change comment about second arg of yaz_matchstr commit 1e49cc7bdcdeb5cb9e7b2e709c5322acccec90df Author: Adam Dickmeiss Date: Wed May 23 11:54:46 2007 +0000 For SRU responses allow Content-Type application/xml as well as text/xml. commit 0bfb420c37acbbdbf44d24fe7c121fdf630190b9 Author: Adam Dickmeiss Date: Wed May 23 08:53:20 2007 +0000 Gary Anderson to credits commit 5d13a8684c8637334d17f2b0577fc511aa275477 Author: Adam Dickmeiss Date: Wed May 23 08:50:11 2007 +0000 Check for malformed UTF-8 characters. Thanks for Gary Anderson for pointing this out. commit 621c7fe7d7da36267384afe2d13c0309db293856 Author: Adam Dickmeiss Date: Tue May 22 11:10:08 2007 +0000 Use entity idcommon rather than common. Fix acronym entities. commit 9c75e92604fae1efd7137d085dd2281e7886345b Author: Adam Dickmeiss Date: Mon May 21 12:18:25 2007 +0000 Towards 3.0.4 commit 9e7bca777f3d5a7108fc06b203fbf890848be8b3 Author: Adam Dickmeiss Date: Mon May 21 11:51:01 2007 +0000 Fixed missing yaz_iconv reset call in odr_iconv_string in decoding phase. commit 1dfcc4cd55c5fb48b21b2afc08f87b4f1ca6f1f7 Author: Adam Dickmeiss Date: Wed May 16 10:47:49 2007 +0000 Tokenizer skips comments (# by default). commit 8fa6874f7c143499d03c5fdcfbc50bd01a31a58c Author: Adam Dickmeiss Date: Wed May 16 10:47:14 2007 +0000 Bump to version 3.0.3 commit 3c68f938d4100786cd27bf3dba5dfdea8d3740cd Author: Mike Taylor Date: Wed May 9 12:17:54 2007 +0000 Ignore generated std-oid-table.xml commit 811f0d2749a66ec13cd616898305ef38cd89da62 Author: Adam Dickmeiss Date: Wed May 9 11:04:35 2007 +0000 libyaz3-dev should conflict with libyaz2-dev commit d81bbb15578f13cc16f3599c11ba8e8d70fd6633 Author: Adam Dickmeiss Date: Wed May 9 08:10:30 2007 +0000 libyaz3-dev conflicts with libyaz2-dev commit 6578641e0e29e0c36fb29d09a98310dc42071d97 Author: Adam Dickmeiss Date: Tue May 8 08:39:00 2007 +0000 yaz3.lib part of devel commit 66db89c95f60b6d5a59703b7d568873681d1fca0 Author: Adam Dickmeiss Date: Tue May 8 08:27:45 2007 +0000 API version 3.0.2 commit 02ebf1b5aa8c7371c2678663fd1c13d01d80955c Author: Adam Dickmeiss Date: Tue May 8 08:27:13 2007 +0000 Towards 3.0.2. commit 7a98e9bfbb9d5fe7d44822a9838e3becbdce9363 Author: Adam Dickmeiss Date: Tue May 8 08:22:35 2007 +0000 For OIDs use Odr_oid type everywhere, i.e. do not assume Odr_oid=int. For OID class, use oid_class consistently. commit 38ce2c71a8aa497a5c445dd36d12d0d535dea79a Author: Adam Dickmeiss Date: Mon May 7 13:18:32 2007 +0000 List of built-in OIDs in documentation. commit 38629f9fd1b8802c986dcc32ee85d83b2760cd06 Author: Adam Dickmeiss Date: Mon May 7 12:06:09 2007 +0000 Functions yaz_oid_db_{new,destroy} in public header commit ef6afa1a84f2a0a05e94fd971af0ce0278594217 Author: Adam Dickmeiss Date: Mon May 7 12:04:06 2007 +0000 Fixed description commit 160e2c7f352ccad6728f1f972f373e862cee8644 Author: Adam Dickmeiss Date: Mon May 7 07:17:29 2007 +0000 Bump version to 3.0.1 commit 89614302a697fcc4f621142767fca1167bca46be Author: Adam Dickmeiss Date: Sun May 6 20:42:42 2007 +0000 Spell fix commit f1fb9790df4017c2b2e9b6fe1a281913da36b3fb Author: Adam Dickmeiss Date: Sun May 6 20:41:22 2007 +0000 Summarize changes commit cc4a5d8761e524821c67a4b13847ec84ba14f8ac Author: Adam Dickmeiss Date: Sun May 6 20:35:43 2007 +0000 Fixed type cast commit 0d19fa8f289c9f99f7b06275beac41fc08e76127 Author: Adam Dickmeiss Date: Sun May 6 20:27:14 2007 +0000 Import library now called yaz3.lib (yaz3d.lib for debug version). commit 8ca37f0ae9d71ebe21ad834c904479b4091e641f Author: Adam Dickmeiss Date: Sun May 6 20:18:29 2007 +0000 Define OID_STD_H no longer needed for oid_std.c code commit fe507b6b15788a3a8e58063d9dae52532a5229a5 Author: Adam Dickmeiss Date: Sun May 6 20:12:19 2007 +0000 Code updates which makes things compile as C++. Mostly type casts were added. But the exercise also revealed places where YAZ_BEGIN_CDEC was omitted. commit b8ab484f71da48a13342fff3ebd60efd23504681 Author: Adam Dickmeiss Date: Sat May 5 11:55:22 2007 +0000 Copying user,group,password + preferredMessage, maximumRecordSize when ZOOM_connection_connect is invoked; to ensure that if we send init request later those values are used. commit 0e664fbee06e451911bf53d2df4e541cbcecd495 Author: Adam Dickmeiss Date: Sat May 5 11:53:26 2007 +0000 Added ZOOM_options_dup. commit 4a40ca16622999fc7a99557a9e313400804287ad Author: Adam Dickmeiss Date: Sat May 5 10:26:31 2007 +0000 Fixed OIDs for SUTRS and Explain (external handling) commit 3ca2b225d05541f30950ed1d6a0da315d7832bed Author: Adam Dickmeiss Date: Fri May 4 17:16:21 2007 +0000 Indentation. commit 6f290732812ae97eb1df1c0af8da4916cd02063a Author: Adam Dickmeiss Date: Fri May 4 12:36:56 2007 +0000 Fixed oid_db.h fname commit c7cff6778b8d69f6e3c41dbfd939f44436911b90 Author: Adam Dickmeiss Date: Fri May 4 12:24:15 2007 +0000 OID documentation update. commit 955374c92f02d9714ccd593cc03f4394f45b2053 Author: Adam Dickmeiss Date: Fri May 4 12:23:54 2007 +0000 Removed dead code section commit 1dd26aed79c4c32a7a8b263651ddcd0ab88dbaf5 Author: Adam Dickmeiss Date: Fri May 4 08:06:24 2007 +0000 Added a few ids for sections commit 20f83e699d4868d263393996bd4b98fee045e360 Author: Adam Dickmeiss Date: Fri May 4 08:03:40 2007 +0000 Documentation updates for new names of dll/so files. commit cd6aeaa68dceee3c268dbb354fd32aadbc9fc942 Author: Adam Dickmeiss Date: Thu May 3 22:20:45 2007 +0000 Using old C style comments. commit 4991a9d63f060d93809d1efcb8b7b0776db41ab1 Author: Adam Dickmeiss Date: Thu May 3 22:18:13 2007 +0000 Fixed beta small in ISO5428 conversion commit b0d1f433788c844fc82a715be4e5a34db9dcbe3a Author: Adam Dickmeiss Date: Thu May 3 13:14:41 2007 +0000 Added partial support for ISO5428-1984, which is the "Greek alphabet coded character set for bibliographic information interchange". By Giannis Kosmas. commit 0b2c97b7e0af33f239cfdfebbc200f7eb5c9fcdd Author: Heikki Levanto Date: Thu May 3 08:35:10 2007 +0000 Undoing a file rename commit 6af7e3e45c77ed01ad75c0c4840576374718168a Author: Heikki Levanto Date: Thu May 3 08:34:52 2007 +0000 More asn1 for oclc commit 08f7b85c9ee7b4146cf61998d54ebd2cea93e89a Author: Adam Dickmeiss Date: Thu May 3 08:04:10 2007 +0000 Fix OID for record update command commit 384ca083ab338aa64a8f9ebf06b9148ad9f9cb7b Author: Adam Dickmeiss Date: Wed May 2 12:50:06 2007 +0000 API version 3.0.0 commit d6ff4a5227a71cb5ca0c99a6574067744afcbad0 Author: Adam Dickmeiss Date: Wed May 2 12:39:35 2007 +0000 Minor wording change. commit e46a29eb6ea3375d808cdb249bbcd4a2bc2bb427 Author: Adam Dickmeiss Date: Wed May 2 12:37:15 2007 +0000 Fixed syntax error. commit 38303a62b339c9242f028a55ec16e965669952e3 Author: Adam Dickmeiss Date: Wed May 2 12:36:34 2007 +0000 Allow a server to tell whether records uses same encoding as charset given by query_charset. commit af019cc83166ab755de4b9c9133c23caacc2f103 Author: Adam Dickmeiss Date: Wed May 2 11:53:25 2007 +0000 Added new member 'query_charset' for bend_initrequest structure. A backend init handler should set this member to its native character set for query terms. When defined, the frontend server logic will announce this character set to a client if the negotiationModel bit is set by the client. ALL server implementors are encouraged to specify this. If they don't, a warning is issued. commit 5ee8b8431f852d06d1963134d38c1bb8fe6343fa Author: Adam Dickmeiss Date: Wed May 2 11:51:54 2007 +0000 The negotiationModel bit is now set by default for init requests. This will allow our servers to present the character set that they support - even in case of no negotiation information from the client side. commit 4ea19fdd48db6b73584c5803313e537129001769 Author: Adam Dickmeiss Date: Wed May 2 11:31:59 2007 +0000 Added flush for yaz_iconv use commit 23511a86ab565d5a4ce3c8f5924a49e9d310ba98 Author: Mike Taylor Date: Tue May 1 22:23:30 2007 +0000 Note on SRU and SRW target strings. commit b3f6b8075dc3a63f46e28d0385ff2d102b841b58 Author: Adam Dickmeiss Date: Tue May 1 21:24:03 2007 +0000 Updated RPM for YAZ 3. Packages: libyaz3, libyaz3-devel, yaz, yaz-ziffy. commit 0f942db2d438ce7c125810a19e29d5637fc7f3f2 Author: Adam Dickmeiss Date: Tue May 1 12:54:44 2007 +0000 Added a few casts to throw away const commit d65ca0fdac8b4cddb7b6da4568a55b8e52d44e64 Author: Adam Dickmeiss Date: Tue May 1 12:48:07 2007 +0000 Build yaz3.dll rather than yaz.dll. New sources commit 1e351c10303ffb6084e6a01eb843409c69f390c2 Author: Adam Dickmeiss Date: Tue May 1 12:35:17 2007 +0000 Towards YAZ 3.0.0 commit 1da546504f6864048f4e0fb07b707171d252c9e9 Author: Adam Dickmeiss Date: Tue May 1 12:28:03 2007 +0000 More changes commit 73f6b7a6b12a1e0e54c9cc360f552a56726d75fd Author: Adam Dickmeiss Date: Tue May 1 12:22:10 2007 +0000 Moved stop word support code to separate ccl_stop_words.c and encapsulated the private info in opaque ptr ccl_stop_words_t. commit f37d3f03799b8d9979472111153cf3bdc9d5a739 Author: Adam Dickmeiss Date: Tue May 1 12:12:34 2007 +0000 In conversion from CCL RPN to RQF handle the empty string properly. commit fdb80724c17104b31f80527cca19b433f6c2fc33 Author: Adam Dickmeiss Date: Mon Apr 30 19:55:39 2007 +0000 Added stop word support for CCL parser. These are configured with @stop.field t1 t2 t3 .. All terms matching list of t1, t2, .. in field are removed from resulting RPN. commit f6ae71f4b4a45b3989700f5e1a73c40ccd53040a Author: Adam Dickmeiss Date: Mon Apr 30 19:50:22 2007 +0000 Destroy bibset upon completion commit 78b138b80fadc817d621f0a692fca857ee31399b Author: Adam Dickmeiss Date: Mon Apr 30 11:33:49 2007 +0000 Restructure qualifier handling so we can have more rules per-field - such as stop word handling. commit 55ca7cdb58b098d348054917296c0fe2c9cb1580 Author: Adam Dickmeiss Date: Mon Apr 30 08:29:07 2007 +0000 New ZOOM C option, "rpnCharset", which allows client-side conversion of terms in RPN queries. commit aa60dbcd982a4dbd52870120ef34b91a74d63274 Author: Adam Dickmeiss Date: Fri Apr 27 10:09:44 2007 +0000 Separate tokenizer stuff into parsing and configuration types. commit 6f95cfbbdf2f549ce23f511bc406e3d74446ea2b Author: Adam Dickmeiss Date: Fri Apr 27 09:50:35 2007 +0000 Added file description commit 0725af5d06bfcdaf9888886f04c63810c1d8cf72 Author: Adam Dickmeiss Date: Fri Apr 27 09:48:28 2007 +0000 Fix leak in test commit 048b6fc3d9fca5ac8fad4943031db503170e928d Author: Adam Dickmeiss Date: Thu Apr 26 22:11:32 2007 +0000 Doxygen frindly comments. Minor simplications. commit 1d8e2adb8e5cfeaf77a84f5f3277785bb24cdd56 Author: Adam Dickmeiss Date: Thu Apr 26 21:45:16 2007 +0000 Added functions to create CCL RPN nodes. Added small tokenizer utility (tokenizer.[ch]). CCL qualifier spec parsed using tokenizer which allows more flexible notation in terms of white-space etc. commit d4644bfe208fd1ba9158c6afb0ca616bf63e8357 Author: Adam Dickmeiss Date: Thu Apr 26 21:41:57 2007 +0000 Fixed problem with double free of memory commit 5465ce3572dee9b6dcbea43ebf02d9d548b6644d Author: Adam Dickmeiss Date: Thu Apr 26 09:11:56 2007 +0000 Various clean up. Removed function ccl_parset_get_bibset. Removed ccl_strdup and use xstrdup instead. commit de80462103c0fc554c8fa40827894f92fa9d8fe6 Author: Adam Dickmeiss Date: Wed Apr 25 20:52:18 2007 +0000 Clean-up the CCL API. Moved some internal structures from ccl.h to private header cclp.h. Changed ccl_parser_create so that a Bibset must be supplied. Removed tokenize API from ccl.h - including ccl_parser_find. This is replaced by ccl_parser_find_str which takes a string instead. commit 544ac779d4c6b5d3d07f54486a7cb851bd6f74ea Author: Adam Dickmeiss Date: Wed Apr 25 20:50:56 2007 +0000 Removed ccl_pr_tree_as_qrpn . Implement ccl_pr_tree in terms of ccl_pquery_indent. Saves roughly 50 lines of code (DRY). commit a2b00156f7c2c41c67a43deeeaf8b3621cc9643b Author: Heikki Levanto Date: Wed Apr 25 16:51:47 2007 +0000 Command-line params and params from a param file now go straight into the ILL request. The OCLC test server seems to accept the requesters now, complaining of a missing item (rightly so). commit 79c2e0067287fd81143627819ee336fcff4a32ab Author: Adam Dickmeiss Date: Wed Apr 25 13:49:52 2007 +0000 Fixed typo WRT Update OIDS commit 1bc07394aa02293c85dd781329a5a161e400381b Author: Adam Dickmeiss Date: Tue Apr 24 12:57:52 2007 +0000 Added example of qualifier alias commit 53862bf9e7756842158d38b1bb25f2c094b8d3d7 Author: Adam Dickmeiss Date: Tue Apr 24 12:55:15 2007 +0000 Windows build. commit 517b3b01c47fb87ed9656ee9b184eda54b6d0c99 Author: Adam Dickmeiss Date: Tue Apr 24 12:54:42 2007 +0000 Added definition of YAZ_IMPORT for DLL import on Windows commit c3ad59ea201aa090eeffecb0f85fedc18bf658be Author: Adam Dickmeiss Date: Tue Apr 24 12:53:56 2007 +0000 Added YAZ_EXPORT for new functions commit 8183a66090680db8b95d2f7060ea171ef3533c38 Author: Adam Dickmeiss Date: Tue Apr 24 09:29:34 2007 +0000 Fixed call to ZOOM_resultset_sort1 commit 7e1b1165cc76041a3ba611eb0ef97cdcbeec466a Author: Mike Taylor Date: Mon Apr 23 16:15:11 2007 +0000 Ignore yaz-illclient commit a766a381d38e67255fea3a9e9c4b818d49b73936 Author: Adam Dickmeiss Date: Wed Apr 18 18:47:51 2007 +0000 Ignore generated files oclc-ill-req-ext.[ch]. commit 59bb4eccfdc42a25d5bb1d3c35d6deaebf1fb805 Author: Adam Dickmeiss Date: Wed Apr 18 18:46:37 2007 +0000 Fixed missing thread libs in output of 'yaz-config --lalibs threads'. commit 965d5409daba88b43bbffb5bed90b58383c0cc3f Author: Adam Dickmeiss Date: Wed Apr 18 13:40:19 2007 +0000 Added new option 'static' for yaz-config which makes 'yaz-config --libs' returns static libs rather than shared libs for in-source compilations. This is to make Pazpar2 work for local builds when YAZ is built both statically and with shared objects. We have not seen this problem before because most other applications are built with Libtool. And these that aren't, such as PHP / Perl extensions deal with shared objects fine. commit b42021d3f227347b9ec107a28bf52fc7e2578fec Author: Heikki Levanto Date: Wed Apr 18 13:21:46 2007 +0000 Added the oclc-spcific extension part too. Didn't help. commit fec4b2a334086855ba77b531ffee06520bf96221 Author: Mike Taylor Date: Wed Apr 18 11:50:47 2007 +0000 t_test() arguments. commit c618d4743a6dff2764d4a95d8bcf4fc441fcd8db Author: Adam Dickmeiss Date: Wed Apr 18 08:08:02 2007 +0000 Doxygen comments in OID generated files. commit 68832d0951d7f4707b6140b2001134c1a52b878c Author: Adam Dickmeiss Date: Wed Apr 18 07:34:35 2007 +0000 Added ASN.1 and CODEC for OCLC ILL Request Extension. commit b2b487571a47cd30fdcc93354ab696a0bd3a78f5 Author: Adam Dickmeiss Date: Wed Apr 18 07:17:19 2007 +0000 No warnings commit dc4414aeda179bc8ebe3fc46ac53e4a24d265d16 Author: Adam Dickmeiss Date: Tue Apr 17 20:26:18 2007 +0000 Split YAZ library into two libs : libyaz.la and libyaz_server.la. libyaz.la is the core of YAZ except the generic frontend server and does not depend on POSIX threads anymore. libyaz_server.la is the generic frontend server facilities and uses POSIX thread functionality if available. The libyaz.la no longer depends on POSIX threads because the number of global structures is limited. NMEM no longer re-uses blocks between threads ; it simply free's memory immediately but allocates in "large" chunks as usual. We don't expect any performance penalties because of this. The yaz_log system is still using a global log_level so caution must be taken when modifying it with yaz_log_init_.. + yaz_log_mask_str. This, however, should not cause any trouble because these functions are called during initialization of application code anyway. `yaz-config --libs server` returns libs for server applications; `yaz-config --libs` returns libs for non-server applications. commit 926baf66afa1e3646b2e456adeb66c623c9aca9f Author: Heikki Levanto Date: Tue Apr 17 13:23:02 2007 +0000 Attempted to encode the oclc-specific login info. Doesn't seem to work, gives the same error as when it was not there at all. commit 35cded4faea1982245adfd947d73316453beb7ec Author: Adam Dickmeiss Date: Tue Apr 17 08:15:15 2007 +0000 Auto-generated files specified separately commit d2be1034a4eea6cf6091bf79c6f8a3e0c1a71660 Author: Adam Dickmeiss Date: Tue Apr 17 07:37:58 2007 +0000 Fixed bug #1052: oid_std.[ch] not made automatically. commit 6bba4d13ecf76fc9ccb330855376229a6b254505 Author: Adam Dickmeiss Date: Mon Apr 16 22:21:48 2007 +0000 Ignore oid_std.h commit 06ef98ae2376ef926be2f01193a36d87b9f3ba87 Author: Adam Dickmeiss Date: Mon Apr 16 22:21:27 2007 +0000 Ignore oid_std.c commit 3cdfbd27dfc8dd15619f127ae78bf0f71b27dd6d Author: Adam Dickmeiss Date: Mon Apr 16 21:53:08 2007 +0000 Generate built-in OIDs from oid.csv. commit 4ef54cf7f0c56ebb62f1a4c9bfecc50feca18656 Author: Heikki Levanto Date: Mon Apr 16 15:33:51 2007 +0000 Committing the raw version into cvs, just to have a backup. It can send an empty request, and parse incoming error messages. Filling actual data to the request still missing, as is extracting useful responses (if any). commit 2ccd19bd425d4d8b26dbdedf072ad618de7db94a Author: Adam Dickmeiss Date: Mon Apr 16 11:15:51 2007 +0000 OIDs in a .csv-file. commit 96c68285e01bfb51a4d03cede9dd1a673c854d30 Author: Adam Dickmeiss Date: Mon Apr 16 08:43:08 2007 +0000 Added functions to return const known OIDs commit 99ab8b6123275a614abfa69a13ce4f7df59aa7d7 Author: Adam Dickmeiss Date: Fri Apr 13 13:58:00 2007 +0000 Make Variant-1 OID definition. Fix OID for Espec-1 commit cd3162337ff8918cd2d997f79ca9da20b8c70855 Author: Adam Dickmeiss Date: Fri Apr 13 10:24:32 2007 +0000 Ensure YAZ' include files is listed first in output of yaz-config --cflags. commit b8d35dbb7de11dcfe5bc76fb2a353012baa5b63e Author: Adam Dickmeiss Date: Fri Apr 13 09:55:41 2007 +0000 Added utilities z_ext_record_{xml,sutrs,usmarc}. commit 9b1c48867ad6fafd2bfd1a2ba4893129953990e9 Author: Adam Dickmeiss Date: Fri Apr 13 09:55:21 2007 +0000 Added inclusion of oid_db.h commit 9daca88ec6081bf49bb53b4dd400ee6d40c04112 Author: Adam Dickmeiss Date: Fri Apr 13 07:04:42 2007 +0000 Function oid_dotstring_to_oid returns -1 if OID dot-string is ill-formed commit 54cc1be5702450c1666b2dda9d0248c36650318a Author: Adam Dickmeiss Date: Fri Apr 13 06:51:57 2007 +0000 Added inclusion of yaz/oid_util.h commit 183b1a799a1727586468b3867d986b93df3fdc7c Author: Adam Dickmeiss Date: Fri Apr 13 06:48:35 2007 +0000 Removed inclusion of yaz/oid.h commit be821514c869d68186361b5aab6bbfd1aa60e087 Author: Adam Dickmeiss Date: Thu Apr 12 20:47:27 2007 +0000 Added function yaz_oid_add which adds custom OID entry to database. Re-implemented 'register_oid' for yaz-client. commit aa29dbf34d5bb3cbf5b26ee3adfbaf9f9b4f3c67 Author: Adam Dickmeiss Date: Thu Apr 12 17:50:26 2007 +0000 Removed dead functions commit 4293b4d2f870120406df23706cc1fb5da9aa69af Author: Adam Dickmeiss Date: Thu Apr 12 13:53:33 2007 +0000 Bump version to 2.1.99.2 commit 7a4064cd15f6c6b34c1180e1bc51f0d0e90da320 Author: Adam Dickmeiss Date: Thu Apr 12 13:52:56 2007 +0000 New OID database - with public definitions in oid_db.h. Removed old OID database including the head oid.h and definitions such as enum oid_value and struct oident. The new OID database uses the same string names as before but the 'protocol' is gone. There are now only two representations raw OID (int *) and string. Functions with prefix yaz_string_to_oid converts from string to OID; functions with prefix yaz_oid_to_string converts the other way. commit 3bfe867a001cb4e4f88d47541f77a21027719bd5 Author: Adam Dickmeiss Date: Tue Apr 10 14:42:31 2007 +0000 Added test for query charset converter. commit e93edd27b69830dbd41cf2982ebb1f0d2847f207 Author: Mike Taylor Date: Thu Mar 29 11:14:47 2007 +0000 CQL translation fix. commit 74805d78e64e94e3b5e876c1fd2c34c294f43e28 Author: Mike Taylor Date: Thu Mar 29 11:14:11 2007 +0000 Change to emit_term(): when a term has the /regexp relation modifier, do not process it for leading and trailing "^" and "*", which have quite different meanings in regular expressions. commit 900aea38294d60d4cbf1153f480b27155d292c7a Author: Mike Taylor Date: Wed Mar 28 16:35:47 2007 +0000 Explicitly initialise cqltrans to 0 commit 4cd3f359d12ddfecd1f112cb81235a70a67f8665 Author: Adam Dickmeiss Date: Thu Mar 22 09:13:13 2007 +0000 Fixed tid declaration for non-threaded mode commit 62fd62f25a6893d042c4c87f8c770929fd8cf95d Author: Adam Dickmeiss Date: Wed Mar 21 19:47:28 2007 +0000 Added skeleton for query charset conversion. Bug #977. commit 82aa6fe37332e0b2a79a14f3d50c3c9f54034817 Author: Adam Dickmeiss Date: Wed Mar 21 11:27:46 2007 +0000 Revert ZOOM API changes. commit abf1f0df70aaf39735fa6cca208bd7c480da7e5e Author: Adam Dickmeiss Date: Wed Mar 21 10:22:31 2007 +0000 Get rid of 512 PQF string size limitation in cql2pqf (part of ZOOM C). commit 0889197c3664ce1600740c024f905869b6423593 Author: Adam Dickmeiss Date: Wed Mar 21 10:12:09 2007 +0000 Fix prototype for cql_transform commit 5e39adf043d8a0642a8af60b1ef54e7f90886fae Author: Adam Dickmeiss Date: Wed Mar 21 09:23:11 2007 +0000 Fix bad memory reference in CQL to PQF conversion which occurred when error 'Too many characters in query' was issued. commit fc07d9fb0a2fbaa0336c0f1da07b3a56eac5da48 Author: Adam Dickmeiss Date: Wed Mar 21 08:37:57 2007 +0000 Added yaz_iconv flush. commit d38ee71c31b49ad13164039140ed47d18e9432cb Author: Adam Dickmeiss Date: Tue Mar 20 21:37:31 2007 +0000 Attempted fix of bug #976: Segfault in yaz_iconv. The yaz_iconv function write handlers no longer carries a 'last' parameter. This will make yaz_iconv flush "less" characters. A flush is performed by call to yaz_iconv(cd, 0, 0, &outbut, &outbytesleft) . commit aaf2ab15830321d9db33cd2e47f739fb52324110 Author: Adam Dickmeiss Date: Mon Mar 19 22:17:41 2007 +0000 More wrbuf_buf woes. commit db93359f0cbf9a1e9dc81ea05f7b8662f843ae3d Author: Adam Dickmeiss Date: Mon Mar 19 21:08:13 2007 +0000 Moved more members of public struct odr (ODR*) to struct Odr_private. commit 72da3f05a07602494a978c266f473bb0b4c7841f Author: Adam Dickmeiss Date: Mon Mar 19 21:07:35 2007 +0000 Definition of wrbuf_diags moved to querytowrbuf.h. Function wrbuf_put_zquery removed, because function yaz_query_to_wrbuf does the same. commit 6cce919ae864cc0da9c6068b4adec45d5ec0c278 Author: Adam Dickmeiss Date: Mon Mar 19 20:58:47 2007 +0000 Notes on ZOOM changes commit e20877bdeb227b7c4179b6defa3eb5b44599d707 Author: Adam Dickmeiss Date: Mon Mar 19 20:58:34 2007 +0000 API changes to ZOOM. Functions for setting options returns int, rather than void, so we have a way to flag unknown options. ZOOM_resultset_sort1 has become "the" ZOOM_resultset_sort. (and old ZOOM_resultset_sort is removed). ZOOM_connection_scan1 removed. The generic scan is ZOOM_connection_scan and the ZOOM_connection_scan_pqf is a handy short-hand taking a PQF string as argument. commit 401da56d4a26f687cd42024bdef6f29a29bb7663 Author: Adam Dickmeiss Date: Mon Mar 19 14:40:06 2007 +0000 API changes to WRBUF. wrbuf_free removed; replaced by wrbuf_destroy. And wrbuf_puts no longer appends '\0'. Use wrbuf_cstr to get C-string out. Deprecated functions for yaz_marc-removed. Changed prototype of yaz_marc_decode_buf: const char for result and size_t for rsize. commit 728ffb55e072933a1208780272e545c51f080e90 Author: Adam Dickmeiss Date: Mon Mar 19 13:32:40 2007 +0000 Note on branch commit 7ea4c2e808b88500ad3148483d6a15a7c18a863c Author: Adam Dickmeiss Date: Mon Mar 19 13:32:11 2007 +0000 New packges libyaz3, libyaz3-dev with libyaz so version 3. commit 93f8228f2b4720e430e8e7c24ff4478c2b7cc001 Author: Adam Dickmeiss Date: Mon Mar 19 13:31:48 2007 +0000 libyaz major so version=3 commit 1d82c6ccef88862d57960fe8c1194ff561358172 Author: Adam Dickmeiss Date: Mon Mar 19 13:31:05 2007 +0000 Bump version to 2.1.99 commit 97b694eca0f3b0669e57bcca37d6a7bcf3766d58 Author: Adam Dickmeiss Date: Mon Mar 19 12:54:58 2007 +0000 Disable lOG_-defines by default commit e9b8966d4ef4572814a7e185aa7ac618761f422d Author: Adam Dickmeiss Date: Sun Mar 18 13:00:37 2007 +0000 Added continuation line support for MARC line format reader. commit 3eba413ef7e80467c7831731a8e35c733e447c47 Author: Adam Dickmeiss Date: Sun Mar 18 12:59:56 2007 +0000 Added wrbuf_cut_right which cuts WRBUF by a number of characters (chop right). commit 1e2d8a4038fdada537fc10ff0eb9c52b338a8f9d Author: Adam Dickmeiss Date: Sat Mar 17 09:14:00 2007 +0000 Use nmem_init + nmem_exit to track memory usage easier. commit 99b3cb2b79d12430d0b0788bee64a5706a235f31 Author: Adam Dickmeiss Date: Sat Mar 17 09:13:29 2007 +0000 Use WRBUF for MARC line reading. commit e2ac4b875fbaf0211beae88ef6ccda2f2a4a3e95 Author: Adam Dickmeiss Date: Sat Mar 17 08:44:24 2007 +0000 Remove unneeded assert. commit e69b8fde2b8c7f732e19b5d14e7c545114f7e422 Author: Adam Dickmeiss Date: Sat Mar 17 00:10:40 2007 +0000 Fixed marc8 flush to deal with sub/sup scripts. Refactor marc-8 page switch code to function yaz_write_marc8_page_chr. commit 1a2a3ed95f16f8f9d7bb3c42e725810d6829e189 Author: Adam Dickmeiss Date: Fri Mar 16 10:50:19 2007 +0000 Version 2.1.55. commit c6242bb0903cfac4154bf9eb6a4eb80f7d9060e8 Author: Adam Dickmeiss Date: Fri Mar 16 09:12:08 2007 +0000 Fix news version commit 617267c681a420024d13d8ba5b12039544d33664 Author: Adam Dickmeiss Date: Fri Mar 16 08:58:39 2007 +0000 Fix ChangeLog dist commit 8a838bc80080fd775043aed2994d33bfc7762950 Author: Adam Dickmeiss Date: Fri Mar 16 08:11:13 2007 +0000 Remove ether_h echo commit ba68124b7321baff51997107f1cf9f0a78f62351 Author: Adam Dickmeiss Date: Fri Mar 16 08:08:10 2007 +0000 Towards 2.1.54 commit 71bfb6b6bd12f696264c376fa878a71dce43362a Author: Adam Dickmeiss Date: Fri Mar 16 08:06:38 2007 +0000 More news commit e65dd6fdeb899a631867cc4f17aac2d04d3cecbb Author: Adam Dickmeiss Date: Fri Mar 16 08:06:26 2007 +0000 ChangeLog part of dist commit 254f399fe8304d224929420f17c2020896bfe467 Author: Mike Taylor Date: Thu Mar 15 14:15:06 2007 +0000 ZOOM-C async reconnection. commit b0aea56b51603b34d526bbfb94fed2ae0976fb0f Author: Adam Dickmeiss Date: Thu Mar 15 14:07:41 2007 +0000 Fixed bug #969: Fixed compiltation errors on OpenBSD 4.0. commit 6b90776a33987cb5df962be1db7c28b63e2213dd Author: Adam Dickmeiss Date: Wed Mar 14 11:46:37 2007 +0000 Fixed update command so that record ID = none means none. commit f183d2f4776c9161eb229eb6ad85260bc65af54e Author: Adam Dickmeiss Date: Tue Mar 13 09:12:09 2007 +0000 Missing return value for function commit 967a1293ee622053b05995d46d63085f6aa23204 Author: Adam Dickmeiss Date: Mon Mar 12 16:16:49 2007 +0000 Use wrbuf_puts rather than wrbuf_printf for GRS-1 display. commit 5e6dd2bd57b34f26e8bed2034450540ad1ec3d12 Author: Adam Dickmeiss Date: Mon Mar 12 11:18:00 2007 +0000 advancegreek ; NOT greekadvance. commit fd3e0c80b9b344777ef337909d197a14b69f251b Author: Adam Dickmeiss Date: Mon Mar 12 10:59:58 2007 +0000 Added character conversion support for "greekadvance"; based on patch from Giannis Kosmas. commit 55649442b6db726cae33bf4ee92ad447995c930f Author: Adam Dickmeiss Date: Mon Mar 12 08:27:44 2007 +0000 Encapsulate ZOOM_resultset_destroy. commit 19c0b332044f06ee33eaf66ca92675d9cda8d1b9 Author: Adam Dickmeiss Date: Fri Mar 9 08:39:38 2007 +0000 Fixed yaz_iconv to return YAZ_ICONV_EINVAL if an incomplete MARC-8 combo sequence is met. Before the error was not set so it would be unknown. commit dc720b90d5ff1d5c5a1821de3a0e335eb64a1951 Author: Adam Dickmeiss Date: Thu Mar 8 12:45:02 2007 +0000 Adjust marcdump so that it skips until record separator is read commit cc7d1eb374c88d7b2f56df13977278873b1e7f5a Author: Adam Dickmeiss Date: Wed Mar 7 14:26:44 2007 +0000 Fixed reconnect problem for ZOOM-C. The event queue was becoming empty in some cases of connect which failed. commit ec0f5bdedf10f755541500d9db2a8332dc09039a Author: Adam Dickmeiss Date: Wed Mar 7 13:12:42 2007 +0000 Check for errors at all times in this event test commit e91fb5895f950b41bd95142596026dc879075ab4 Author: Marc Cromme Date: Wed Mar 7 11:29:39 2007 +0000 corrected spelling error corrected ziffy dependencies commit f7cd94cdd1d0ab8655419c6f5ca9ec19f659b2f1 Author: Adam Dickmeiss Date: Wed Mar 7 09:09:22 2007 +0000 Omit acx_pthread.m4 from installation (only part of make dist). commit 57a8ebc46aff189207f1518cf7e21100464ffb79 Author: Adam Dickmeiss Date: Wed Mar 7 08:54:13 2007 +0000 YAZ 2.1.53. commit 7dca3501222dc961d4067367fc5222c48d36e0ef Author: Adam Dickmeiss Date: Wed Mar 7 08:05:25 2007 +0000 Towards 2.1.52. commit 5b851cf1bb19aea8448630ac6f179e53d8847e57 Author: Mike Taylor Date: Wed Feb 28 11:14:56 2007 +0000 Remove hardcoded limit of 1024 sockets in ZOOM_event_sys_poll(). Note that ZOOM_event_sys_select() still has the limit due to the fixed-size fd_set structure used as a bitmask for the FDs to be selected on. commit 5c167071ae977b217670e573d18c112634e8aa63 Author: Adam Dickmeiss Date: Mon Feb 26 14:24:00 2007 +0000 Fix "HAVE SNPRINTF" check. commit 3f7c21d3bf85a142671d97bd4183bc3fe9b61e9e Author: Adam Dickmeiss Date: Sun Feb 25 21:04:04 2007 +0000 Deal with empty thread spec if that is what ACX_PTHREAD returns. Unfortunately empty thread lib spec is problematic because 'yaz-config --cflags' is not always passed to linker in applications using YAZ (such as Zebra). commit 8d133ab04af9cc1fe4d2463fb2a0139644ecd6e2 Author: Adam Dickmeiss Date: Sun Feb 25 14:46:50 2007 +0000 Change the use of CFLAGS WRT ACX_PTHREAD. Thread libs/cflags are always returned in yaz-config, i.e. 'thread' option for yaz-config is a no-op. commit 97daa5b35cab732ac0fc5192bcdc70bbf46a1751 Author: Adam Dickmeiss Date: Sat Feb 24 18:44:54 2007 +0000 Fixed bug #927: DOM Module returns wrong diagnostic (24, should be 25). commit d18b1a02c459bc111a6b5928728f9690020e410d Author: Adam Dickmeiss Date: Sat Feb 24 13:35:23 2007 +0000 Use m4 macro ACX_PTHREAD for POSIX threads detection. commit 58dda1e89dc22c400b7da64582eebc91c6c598ec Author: Adam Dickmeiss Date: Fri Feb 23 14:04:37 2007 +0000 YAZ 2.1.51 commit 0a9596292ae022d000ae49340db024c245626ddd Author: Adam Dickmeiss Date: Fri Feb 23 11:54:38 2007 +0000 YAZ 2.1.50. commit a8939b4e46cff366d70894f77805a580e07187aa Author: Adam Dickmeiss Date: Fri Feb 23 10:58:25 2007 +0000 API version 2.1.49 due to new functoins yaz_snprintf, yaz_vsnprintf commit 021f5586a328c6600460aa9f9be664ba19ba20d4 Author: Adam Dickmeiss Date: Fri Feb 23 10:15:00 2007 +0000 Added snprintf/vsnprintf wrappers for systems that don't have limits (heavens forbid). commit acf93c6b774c7184c35c2b994d4d7764438656d8 Author: Adam Dickmeiss Date: Thu Feb 22 12:37:28 2007 +0000 Note changes regarding recent ZOOM-C changes commit 30aa82dcc70cbbb450305e0787681464bb6258c6 Author: Adam Dickmeiss Date: Wed Feb 21 13:00:19 2007 +0000 Internal Debian 2.1.49-1 commit aabf01d7516f121a50438dcfae14ecf8c351a8c8 Author: Adam Dickmeiss Date: Wed Feb 21 12:53:01 2007 +0000 Remove event queue when a new task is initiated. Also remove events when a connection is destroyed (to prevent a leak if connection is destroyed while events are outstanding). commit e4ef95b2ccfe88d7049543664f00e5fda957dd0c Author: Adam Dickmeiss Date: Wed Feb 21 09:19:26 2007 +0000 Moved prototype of ZOOM_connection_remove_tasks further to the "top" of the source to prevent warning. commit 3822378d7b75625b8b879025b22bffeb5483b788 Author: Adam Dickmeiss Date: Wed Feb 21 09:17:51 2007 +0000 Changed task queue management a little for ZOOM C. When a diagnostic is produced/received (error condition), the task queue is cleared immediately. In earlier versions the task queue was cleared when a new task was inserted in the queue. The effect was that a newly inserted task was _immediately_ removed and never fired. Hence tasks were silenty forgotten. The error code is still cleared when a new task is inserted in the queue. commit 6ae9b6acff7b96dda296313b8c0e24c1626afdd8 Author: Adam Dickmeiss Date: Wed Feb 21 09:10:19 2007 +0000 Added test for checking ZOOM task/event handling. commit 52f6cacfcfe9d91e909616719e77a27be0c82b29 Author: Adam Dickmeiss Date: Tue Feb 20 09:53:30 2007 +0000 Fixed bug #900: Configure warnings on FreeBSD. commit 75b457189bc3d6551a945b862d0618f2a29b86bd Author: Adam Dickmeiss Date: Tue Feb 20 09:53:01 2007 +0000 Fixed spelling commit adf2f426ab3869f3550d3cd56f48d0590d50f502 Author: Adam Dickmeiss Date: Tue Feb 20 09:39:17 2007 +0000 Fix type of thread id commit 259d7eb2a0c31853affc5147d1d57223345a1625 Author: Adam Dickmeiss Date: Sat Feb 17 10:53:05 2007 +0000 Fixed compilation and tests for case where Libxml2 is unavailable. commit b05a82226d0840e32772c62285e9eab584ae000a Author: Adam Dickmeiss Date: Thu Feb 8 11:36:59 2007 +0000 Fixed bug #615: Document retrievalInfo facilities for Frontend Server. commit 95c7f9bdc6544941ce153faff951a68e0e6fb389 Author: Adam Dickmeiss Date: Thu Feb 8 10:52:06 2007 +0000 Update retrievalinfo example. commit 0c4163220f1cdfcb44af12ac65d1ddf8bae3a806 Author: Adam Dickmeiss Date: Thu Feb 8 10:51:23 2007 +0000 Update example. commit cd015e61f7fcbc22776c41e8cc1860c059a39af5 Author: Adam Dickmeiss Date: Thu Feb 8 09:03:31 2007 +0000 Describe the asterisk substution for CQL to RPN mappings. commit 744b4f52caa38c0197331682cc9c89ef9d47da80 Author: Mike Taylor Date: Wed Feb 7 17:52:44 2007 +0000 Introduce zoom_yaz_str_to_z3950oid() wrapper, which called yaz_str_to_z3950oid() and reports lookup failures with yaz_log(YLOG_WARN). This helps to detect otherwise "silent errors", such as getting back a default-format record when having misspelled a desired preferredRecordSyntax. commit aef1debf34a8163603873e9c95e9c31d41e27e20 Author: Mike Taylor Date: Wed Feb 7 15:13:16 2007 +0000 Fix comment. commit e20eb836cfe0996588d259db1a57c80966795fd4 Author: Adam Dickmeiss Date: Wed Feb 7 13:36:57 2007 +0000 Implemented pass-through CQL-to-PQF conversions. Bug #861. commit 3879f5305286e152c9e16a5ccd20fbfc02428fce Author: Adam Dickmeiss Date: Mon Feb 5 17:51:48 2007 +0000 Do not print leading space when log level 'notime' is used. commit 47f3b538db5374f0b9cc9dc334e851a0542d2d2c Author: Sebastian Hammer Date: Sun Feb 4 02:24:56 2007 +0000 Fixed overly ambitional conditional which led to incorrect handling of retrieval/backend sub-element commit db6b40fa96ba3c3cda68d143a17b5b1fd0a20eb4 Author: Adam Dickmeiss Date: Thu Feb 1 09:56:14 2007 +0000 Only use XML standard entities commit 4aaef6f43f00ca8db95f6a7fa908147be1927093 Author: Adam Dickmeiss Date: Wed Jan 31 15:27:17 2007 +0000 Bad entity '&nums;' commit b7e0b586c47f8cc0c99f0195e0b554dc5f1af072 Author: Adam Dickmeiss Date: Wed Jan 24 23:10:01 2007 +0000 Capture Ctrl-C and save history commit d42f045690a68380de575447bf9755f922ec734d Author: Adam Dickmeiss Date: Wed Jan 24 23:09:48 2007 +0000 Do not save command history if it is empty commit 11594352845d8e70c9d668c20fde891a1d45f3d6 Author: Adam Dickmeiss Date: Wed Jan 24 15:14:57 2007 +0000 Fixed bug #832: Problem with MARC/charset in yaz-client. commit 3ff58a01241be351c3929f0750e7ec6242a79c2a Author: Adam Dickmeiss Date: Wed Jan 24 15:13:20 2007 +0000 Fix misleading comment commit 07dca8aeae6bc30c59e71b30a9ad83da57c0440d Author: Adam Dickmeiss Date: Wed Jan 24 11:50:18 2007 +0000 Fixed bug #668: save command line history for yaz-client. The history is saved in ~/.yazclient.history . commit 4f8ea8cfaf2f3d95e4efcf9494526c2b4be43eb8 Author: Adam Dickmeiss Date: Wed Jan 24 10:09:31 2007 +0000 Fixed bug #830: pkg-config support. YAZ installs yaz.pc for Debian package libyaz-dev and Redhat package libyaz-devel. commit 6faa400a39174ce64b5e0ed0507e652969ae968a Author: Adam Dickmeiss Date: Wed Jan 24 09:54:04 2007 +0000 Fixed bug #831: New yaz-client command: 'source'. commit 4b768398f592fe19364a3079d968da2f3a9e724f Author: Adam Dickmeiss Date: Tue Jan 23 20:02:09 2007 +0000 Version 2.1.49. commit 9dc245681225482bd54fcca542846a29b83be9d6 Author: Adam Dickmeiss Date: Tue Jan 23 19:31:10 2007 +0000 Towards 2.1.48. commit 7ac4583e06e6a5a3037603aa97c66ecb1f29f43d Author: Adam Dickmeiss Date: Tue Jan 23 19:28:08 2007 +0000 More news. commit d040a9ea56b37ca9f625a40a2d56a056f8447d07 Author: Adam Dickmeiss Date: Tue Jan 23 19:25:21 2007 +0000 Extended ZOOM result set options with two options that may be read by a client: resultSetStatus and presentStatus with values as specified for the ASN.1. See: http://www.loc.gov/z3950/agency/markup/04.html#Search-status commit c21aaab68b1d04dd8f3b2caaa172beb1e290017c Author: Adam Dickmeiss Date: Mon Jan 22 12:14:09 2007 +0000 Rule 'make yazj.pdf' produces PDF using jade. Good for checking that the Docbook format is valid. commit 84cb4c71eb572b5700cd7b3230446d9578521870 Author: Adam Dickmeiss Date: Mon Jan 22 10:35:07 2007 +0000 Implemented alternative Item Order package for ZOOM. If option "doc" is set, that is treated as an ItemOrder with itemRequest being an XML document external. The value of "doc" is the content. commit 39a28866369aca6d604441931dacb065b4097768 Author: Adam Dickmeiss Date: Mon Jan 22 09:21:16 2007 +0000 Remove dead code commit c5f96952344acb65f53b2ee221be9bc8e70692db Author: Mike Taylor Date: Sat Jan 20 00:31:41 2007 +0000 Ignore three more files. commit fad7dc54f5360188f0679553c80f8d2836094846 Author: Adam Dickmeiss Date: Fri Jan 19 16:08:33 2007 +0000 Using dblatex instead of pdfjadetex commit cad160fa45305f029e14282344e6f42ad9d42e57 Author: Adam Dickmeiss Date: Fri Jan 19 15:59:49 2007 +0000 Added authorgroup for author(s). Added releaseinfo. commit 5a06fa4cb1689807cd4bd8c6858001a2b9861538 Author: Adam Dickmeiss Date: Fri Jan 19 10:29:13 2007 +0000 For GFS, display COMSTACK error when cs_bind fails. commit 41458ee17f8860ec85898ffb81186d2736a5c1aa Author: Adam Dickmeiss Date: Fri Jan 19 10:28:42 2007 +0000 Fixed bug #827: Using SSL fails on Debian etch. Fixed by Using SSL_library_init() rather than SSLeay_add_all_algorithms(). Works fine with libssl0.9.6 (woody) and libssl0.9.8(etch). commit cf245e9bf14a9f66908f8a31e42788a945b77c5a Author: Adam Dickmeiss Date: Thu Jan 18 14:46:58 2007 +0000 marc8 test records in dist commit 60b5f5ba6f34ef79b037eb8af1e2554d9842bb10 Author: Adam Dickmeiss Date: Thu Jan 18 14:45:05 2007 +0000 Fixed bug #826: Weird looking chars for set of MARC records. Problematic record in test/marc8.marc . The record switched to MARC-8 mode 'Basic Arabic', then back to 'basic Hebrew' (and never back to Latin1/ASCII). commit 6e2be464f5440ef47e6c6228ad91062d961b75b2 Author: Adam Dickmeiss Date: Thu Jan 18 11:44:50 2007 +0000 Fix test of xmllint precense commit 9e3111eaac05558be44beadb89eb7ba8c73eb9d5 Author: Adam Dickmeiss Date: Tue Jan 16 14:12:37 2007 +0000 Extended the GFS search facility. New member of bend_search_rr 'estimated_hit_count' signals that hits is known to be an estmate (higher or lower than real hit count). New member 'partial_resultset' signals that the search was partial (hit count is lower or equal than real hit count). For Z39.50, the information is stored in resultSetStatus member of SearchResponse APDU. For SRU, the information is signalled via SRU diagnostic 59: "Result set created with valid partial results available". commit 4c1e71e27bbedb9bbaa66bfa5193c5746ef80acb Author: Mike Taylor Date: Mon Jan 15 23:43:14 2007 +0000 Ignore nfaxmltest1.log commit 4916a1038bbe9ab253d20d0bdaa1c9456b35ac1c Author: Adam Dickmeiss Date: Sat Jan 13 10:37:26 2007 +0000 YAZ 2.1.47 commit fb6a79de4493011a2b857048bed057dea3d72f06 Author: Adam Dickmeiss Date: Sat Jan 13 09:00:03 2007 +0000 Towards 2.1.46 commit 2a6b6691d7717640bbf7698d8bad5afafebb760d Author: Adam Dickmeiss Date: Sat Jan 13 08:57:47 2007 +0000 Removed mainpage - moved to yaz-util.h commit 31f45e37cf375384c5a68f99db540629b965c81e Author: Adam Dickmeiss Date: Fri Jan 12 21:41:53 2007 +0000 Added Doxygen mainpage. commit 0982c13b874d79d950800b62ea22d91d943f3036 Author: Adam Dickmeiss Date: Fri Jan 12 21:03:30 2007 +0000 Renamed ZOOM_process_event to ZOOM_event_nonblock to signal that it it is the non-blocking part of ZOOM_event. Added per-connection version called ZOOM_connecton_process which is used by implementation of ZOOM_event_nonblock. commit 54fefc3908aee6023f09c88326f612124869929c Author: Adam Dickmeiss Date: Thu Jan 11 11:05:01 2007 +0000 Added ZOOM_API() to definition of ZOOM_connection_peek_event commit f9d5791b3b7222309b5112e8e269ff36325d7498 Author: Adam Dickmeiss Date: Thu Jan 11 10:55:56 2007 +0000 Move HTTP logic out of zgdu.c to http.c. commit d6862f25e98c81258ac86ee865b82ba610fd0b8f Author: Adam Dickmeiss Date: Thu Jan 11 10:30:40 2007 +0000 Implemented bug #806: Deal with HTTP clients sending LF in HTTP headers. commit c9cf80cbfdc232006f0e5b117a1d6bec578e8d9e Author: Mike Taylor Date: Wed Jan 10 14:16:01 2007 +0000 Ignore NFA tests. commit 52741a76f17524da0bc416fe82db69eda7700797 Author: Adam Dickmeiss Date: Wed Jan 10 13:25:46 2007 +0000 Implemented ZOOM_connection_peek_event. commit 951fce6496397a6d8c11e15ab5b60b46abc43467 Author: Adam Dickmeiss Date: Tue Jan 9 13:56:47 2007 +0000 Implemented Generic select hook for ZOOM (bug #803). This is achieved with the following new functions: ZOOM_process_event, ZOOM_connection_get_{socket,mask,timeout}, ZOOM_connection_fire_event_{timeout,socket}. The existing blocking event handler, ZOOM_event, is a wrapper for the + blocking ZOOM_event_sys_{poll,select}. commit bc1bdc891836da144db8108bc062d30dbb922f8b Author: Adam Dickmeiss Date: Mon Jan 8 13:20:58 2007 +0000 Added missing source. commit 2edee0444eb7d2aba3528a6ae6523c2d1dd92a18 Author: Adam Dickmeiss Date: Mon Jan 8 10:48:06 2007 +0000 Implemented function ccl_xml_config which parses XML version of CCL configuration (bug #798). commit c03ea9aeb04a9a60daa61ac9861cbbb668e42a59 Author: Adam Dickmeiss Date: Mon Jan 8 10:45:19 2007 +0000 Fix Doxygen comment. commit e6384123a635189be8e807f475ed826a466ca501 Author: Mike Taylor Date: Mon Jan 8 08:54:41 2007 +0000 New commit cdd66b5fa55b05a37dcef3c8e718142e703b1ab0 Author: Mike Taylor Date: Mon Jan 8 08:54:29 2007 +0000 Append commit b479a755bb3329922d9d3fb496ba828716a7e40e Author: Adam Dickmeiss Date: Sat Jan 6 16:08:04 2007 +0000 Fixed bug #797: yaz_marc_write_xml does not honor character conversion. commit 654af126f4f8e4045cde587e749df9680a4901ba Author: Adam Dickmeiss Date: Sat Jan 6 16:05:24 2007 +0000 Added wrbuf_cstr which returns 0-terminated WRBUF commit 85aafc49077214164bbdc2b84f247343ef9c3696 Author: Adam Dickmeiss Date: Sat Jan 6 15:32:46 2007 +0000 Added wrbuf_destroy(w), equivalent to wrbuf_free(w,1) commit 95895828d75b60ab21b625b5a1af28448d08879e Author: Adam Dickmeiss Date: Fri Jan 5 14:05:55 2007 +0000 Use a little CPU in timing test commit 99d73aaa969a333373e5e2cc01a6aac16e378c3c Author: Adam Dickmeiss Date: Fri Jan 5 14:05:24 2007 +0000 Windows port of yaz_timing_t commit fde8674e9a18b10bea21d205d2606b527e1bddf6 Author: Adam Dickmeiss Date: Fri Jan 5 14:05:03 2007 +0000 Ignore .log files commit e1000eb6be4e847ac7d1099c5b919a0732276a9a Author: Adam Dickmeiss Date: Fri Jan 5 12:40:05 2007 +0000 win32 get real implemented (timings that is). commit 608c6fec24ade4344ec1c5d337dac18b5a72c655 Author: Adam Dickmeiss Date: Fri Jan 5 12:37:53 2007 +0000 Added this commit f7ee1943c414e220dd1061680f8fe69f6a13f13e Author: Adam Dickmeiss Date: Fri Jan 5 12:00:11 2007 +0000 Reformat a bit. Building tst_timing.exe. commit a0989999fec1457bdd624ca18915d7cc2b55fd2d Author: Adam Dickmeiss Date: Fri Jan 5 11:45:11 2007 +0000 Added test of timing_t. commit 6f2f78ce0e63f8d0afcde6c0f2bbf0e9079fd323 Author: Adam Dickmeiss Date: Fri Jan 5 11:44:49 2007 +0000 Special value -1.0 means 'could not get timings' on current platform. commit 7057bafc90e9fd31d1c33cd1a3dc86c093257bf7 Author: Marc Cromme Date: Thu Jan 4 14:44:34 2007 +0000 removed unused variable commit 57efcfe71d3485e8f2ddac6008fbbc8183804ac7 Author: Marc Cromme Date: Thu Jan 4 14:43:08 2007 +0000 changed output to be non-cascarding when using -n switch commit 192b23c3eecf2d125bde6b17e2178a30e5003887 Author: Mike Taylor Date: Wed Jan 3 13:55:49 2007 +0000 Note additional dependency libpcap0.8-dev commit 75c07fe53a0cf8bb2c138cb6d87cde84d3b8b6a6 Author: Adam Dickmeiss Date: Wed Jan 3 13:46:17 2007 +0000 Added timings utility. Bump version to 2.1.45. commit ec61b200f7ea4fc59d4343993b608de29ec0f5ac Author: Adam Dickmeiss Date: Wed Jan 3 09:02:06 2007 +0000 Announce 2.1.44 for dh_makeshlibs due to new function yaz_marc_write_xml commit 8d691989077a0addcbd840d769dce6700f3d9622 Author: Adam Dickmeiss Date: Wed Jan 3 08:42:13 2007 +0000 Towards 2.1.44. Bump copyright year. commit af364b92610b4b6b424b696064bf4564e653693d Author: Sebastian Hammer Date: Tue Jan 2 07:01:56 2007 +0000 Explicitly associates NS with record root element in xmlNode output. commit 6ed38c528705580734b1f5b12f6de638c26abba5 Author: Adam Dickmeiss Date: Mon Jan 1 22:56:37 2007 +0000 Define the LOG_ masks by default (again) commit 9776afc23d4a953d4baf399f9682f53baf4654fc Author: Adam Dickmeiss Date: Mon Jan 1 22:39:08 2007 +0000 Fixed bug #779: Rotation of apdu.log fails. commit daa259b6e86d28f72c82488ee9b0f7bb2ce52b8c Author: Adam Dickmeiss Date: Thu Dec 21 20:50:56 2006 +0000 Fixed Unicode to MARC-8 conversion for certain less preferred UTF-8 sequences. Conversion for first/second half double tilde + first/second half ligature was changed. Conversion should now perform: 6f ef b8 a0 --> eb 6f, 6f ef b8 a1 --> ec 6f, 6f ef b8 a2 --> fa 6f, 6f ef b8 a3 --> fb 6f. commit 7aebc8794443afa7792d665b9fc401fd55611cf6 Author: Adam Dickmeiss Date: Tue Dec 19 22:41:28 2006 +0000 Honor G1 set in MARC-8 decoding. commit 861f9deb72bd92679ea08d528b40993ada55cdb9 Author: Adam Dickmeiss Date: Mon Dec 18 10:32:11 2006 +0000 Added yaz_marc_write_xml which creates MARCXML/MarcXchange record as Libxml2 tree. commit 757531032a9fb869bc511a9b53831977738a3721 Author: Adam Dickmeiss Date: Mon Dec 18 08:48:30 2006 +0000 2.1.43 commit 7bf9ccceaf20e7922f50acc9c38dc32a8ceb5834 Author: Adam Dickmeiss Date: Sun Dec 17 16:28:16 2006 +0000 Towards 2.1.42. commit f0e73eaf11301cf7f28b23a3491fc745bd9f663a Author: Adam Dickmeiss Date: Sun Dec 17 16:03:01 2006 +0000 Fixed bug #772: presentChunk option yields "Present request out of range". commit 60fa7941321b3d313bfa0d94e188835a35e93320 Author: Adam Dickmeiss Date: Sun Dec 17 15:34:11 2006 +0000 Fixed bug #775: char conversion does not handle alternative UTF-8 sequences. commit 88df77cc241680a8ff13d9cdda0afaeb332c4b1b Author: Adam Dickmeiss Date: Fri Dec 15 20:36:45 2006 +0000 Add CABE as old UTF-8 sequence for Alif (MARC: AE) commit cd2f012a70ebadf660acb71936e32192287dc30a Author: Adam Dickmeiss Date: Fri Dec 15 19:28:45 2006 +0000 Implemented function yaz_marc_read_line which parses MARC line format records. There is a wealth of formats out there. So far, this function reads line records produced by yaz_marc_write_line. yaz-marcdump's options -x, -X, -I, -e have been replaced with the more generic and easier to remember(!) options: -i format and -o format which specifies input format and output format respectively - where format is one of "marc", "marcxml", "line", "marcxchange". commit 54db174ec4113c44b05f3766dc6f8ad665968cfb Author: Adam Dickmeiss Date: Fri Dec 15 12:37:17 2006 +0000 Split MARC reader functions out of marcdisp.c. Prepare for MARC format line reader. commit 85a1ec4eb983744107e98378be5f3a1d0c33ef52 Author: Adam Dickmeiss Date: Thu Dec 14 09:05:18 2006 +0000 For the CQL parser, make boolean node names lowercase.. but this time at the lexical level rather than at the parser level. commit b5fec6a001dbcd8b303a11cede8b6c55512dbda0 Author: Adam Dickmeiss Date: Thu Dec 14 08:55:52 2006 +0000 For the CQL parser, make boolean node names lowercase. commit 69cc5b167c5afbc8d14c0db30f9a5fb34dda0a24 Author: Adam Dickmeiss Date: Wed Dec 13 15:29:01 2006 +0000 Revert commit f25338b01de9ab9fb8dcc952b70b7b12b1e71c00 Author: Adam Dickmeiss Date: Wed Dec 13 15:28:28 2006 +0000 Central point of exit for xmalloc commit f92f152a8a4634eeace90c52e8c013db3b938659 Author: Adam Dickmeiss Date: Wed Dec 13 14:18:03 2006 +0000 Added title for ziffy example. commit 8f8560e0ab3b370263683d8aea81b839c5927091 Author: Adam Dickmeiss Date: Wed Dec 13 11:25:17 2006 +0000 Added header yaz/xmltypes.h which include libxml2' node definitions or provide dummy alternatives if libxml2 is disabled (or does not exist). This allows all Libxml2 related functions to be publicly defined unconditionally. Also provides a more type safe system for applications using these functions. commit 7b7ef94671d08c1e522377c90302751269e8621e Author: Adam Dickmeiss Date: Wed Dec 13 11:23:48 2006 +0000 Disable SRU update in case of missing Libxml2 commit 0f21ef6a3d846e26d4e6c1ef375f62ce12adce9b Author: Adam Dickmeiss Date: Wed Dec 13 11:22:20 2006 +0000 Added type cast from signed char to char commit affe25ddd764d889b566a080a1d7e40eca273044 Author: Adam Dickmeiss Date: Wed Dec 13 11:21:56 2006 +0000 Define SSL + Libxml2 CFLAGS commit 0687f09242bf75f0a1dcf03558b28ed800463d18 Author: Adam Dickmeiss Date: Wed Dec 13 10:47:10 2006 +0000 Predefine YAZ_HAVE_XML2, YAZ_HAVE_XSLT commit 7dc3167ac3347465c3772ac20e9df20c809d35a6 Author: Adam Dickmeiss Date: Wed Dec 13 10:36:00 2006 +0000 Removed objects nfa.obj, nfaxml.obj no longer in use commit 2d78d4d3c648767f4f54d9947ce18a39ffbeabbe Author: Adam Dickmeiss Date: Wed Dec 13 10:35:44 2006 +0000 Removed files nfa.h, nfaxml.h no longer in use commit 2e9966e7b28bef005dadfae9282ffbf912bd7a9f Author: Adam Dickmeiss Date: Wed Dec 13 09:40:32 2006 +0000 Added documentation about ziffy. commit ca44977409b92a8b1c7bfbc913a6422edc41d1d5 Author: Marc Cromme Date: Tue Dec 12 10:41:38 2006 +0000 config file XML syntax changed to a more intuitive and well-structured format. XML parser adjusted accordingly related error messages fixed and added more context information to error messages updated test suite and added a handful more XML config file tests still missing to document the YAZ record-transformation features commit aaab70eca11dd1e5d48eca30d74be082326928e1 Author: Adam Dickmeiss Date: Fri Dec 8 14:02:55 2006 +0000 Added SRU diagnostic 62: "Cannot process or store record, insufficent space" and diagnostic 100: "Not processed (replace or delete). Record ..." . Changed "invalid" to "Invalid" for diagnostic 100. commit 283660d9752a77fe9578b070c632bafae7595189 Author: Adam Dickmeiss Date: Fri Dec 8 13:53:26 2006 +0000 Fixed bug regarding incomplete incoming packages. The bug was introduced in version 1.105 of seshigh.c (and not part of official YAZ release). commit 6ac2cbf8b4f34a3e3d2bd0687d11d63579786dea Author: Adam Dickmeiss Date: Thu Dec 7 19:06:11 2006 +0000 Fixed bug #740 by using a simpler and smarter approach. Patch from Ko van der Sloot. commit 75f5418ca1d43364857be2fe987da45611e8a9a5 Author: Adam Dickmeiss Date: Thu Dec 7 11:08:04 2006 +0000 Added 'check only' option for MARC utilities. Option -n for yaz-marcdump does not print anything except warnings for records. For yaz-marcdump, added support for MARC split into files (-s) with a given chunk size (-C). commit 2ede0bb278b22c8ce1cdd48e9a11a5924d433763 Author: Adam Dickmeiss Date: Wed Dec 6 21:35:57 2006 +0000 Changed the SRU update structures and codecs to reflect the SRU pre 1.0 spec, at http://www.loc.gov/standards/sru/record-update/ This has changed the binary layout of the following structs: Z_SRW_extra_record, Z_SRW_updateRequest, Z_SRW_updateResponse and bend_update_rr . Patch by Ko van der Sloot. commit 3f8685ee91c382bb9769132d6a8692d282edf802 Author: Adam Dickmeiss Date: Wed Dec 6 13:26:47 2006 +0000 Debian 2.1.41-5 commit f6379872ace49628473c47d23b29e9f46b5afbe4 Author: Mike Taylor Date: Wed Dec 6 11:12:14 2006 +0000 Fixed bug #722: Allow Z39.50 Init Options to be specified / retrieved. Client code may now interrogate options such as "init_opt_sort" to find out whether the server claims to support various options. commit 09f5ad52b5ae914f6b8f5d16afcb14e6fc33ea45 Author: Adam Dickmeiss Date: Mon Dec 4 14:56:54 2006 +0000 Added GFS utility function bend_assoc_is_alive which returns 1 if association is still alive (client is connected); 0 otherwise (client closed connection). This allows busy servers to stop working for impatient clients. commit b745023f0d3a7ea51977e6edccd7a561af2cb1f0 Author: Adam Dickmeiss Date: Mon Dec 4 09:15:46 2006 +0000 Debian package 2.1.41-4. commit fce10c79d72f202c463e56f6c3f95f27a5a6eaf3 Author: Adam Dickmeiss Date: Sun Dec 3 18:07:10 2006 +0000 Make yaz-ziffy part of RPM. commit 78a6775fc61c195bec7cca0adb6d33d4e191dfa4 Author: Adam Dickmeiss Date: Fri Dec 1 08:11:09 2006 +0000 Debian package yaz-ziffy is architecture all (not any). 2.1.41-3. commit a570741e5337b5b7632a02e18807621c5296c8fa Author: Adam Dickmeiss Date: Fri Dec 1 07:57:38 2006 +0000 Debian yaz-2.1.40-2. commit fb67adbd15eb6c5c2b668c64d3df9bfb7021c1c5 Author: Adam Dickmeiss Date: Thu Nov 30 22:58:06 2006 +0000 Fixed bug #740: Handle SRU records referring to xmlns outside recordData. Implemented with static function fixup_xmlns. commit 31de2e747e8aab81f5de5867e237ec1f0eda5f62 Author: Mike Taylor Date: Thu Nov 30 17:07:50 2006 +0000 Postpone the setting of c->sru_mode until after leading options from host string have been applied. This means that host strings like the following now work correctly in specifying the use of SRU or SRW respectively: sru=get,http:z3950.loc.gov:7090/Voyager sru=soap,http:z3950.loc.gov:7090/Voyager (Previously, these options were set too late to have any effect.) commit a4524953b83ee8bf3b0c17bc760fa4c2d72bf235 Author: Adam Dickmeiss Date: Thu Nov 30 09:11:35 2006 +0000 Added debian package yaz-ziffy. commit a06bb3ab7af78c8ecb3f025729f16e0d796380d0 Author: Adam Dickmeiss Date: Thu Nov 30 08:46:52 2006 +0000 Change --with-pcap-dir to --with-pcap[=DIR]. Enable ziffy only if libpcap is found. commit 5fb7fa9318c6ea4a6aeecd515cc00fcd46709a3d Author: Adam Dickmeiss Date: Wed Nov 29 22:35:17 2006 +0000 Veresion 2.1.41. Added ziffy, the promiscuous Z39.50 APDU sniffer ny R. Carbone . commit 2f1772e6ceae5de8a838b9811822a21acc49a80b Author: Heikki Levanto Date: Wed Nov 29 12:48:59 2006 +0000 Removed the nfa tests as well. Now passes make check. commit 6d678c5970ec665607e3d1ddbd8809a14bccabdf Author: Heikki Levanto Date: Wed Nov 29 12:34:51 2006 +0000 Removed the nfa stuff - no longer needed commit e4368af2ede9079d33e7a8fd280d29b2bde1d1ad Author: Adam Dickmeiss Date: Mon Nov 27 14:15:53 2006 +0000 Towards 2.1.40. commit 8a1b979bf9034968de41289abf6d7769fdceed33 Author: Adam Dickmeiss Date: Mon Nov 27 14:09:32 2006 +0000 Test differently for overflow in log bits commit 74af0d31a49a9ed564d09f1f2e7780ab533b4ff5 Author: Adam Dickmeiss Date: Mon Nov 20 08:13:05 2006 +0000 Remove YLOG_LOG msg commit df2adb23954e8ad27dac8e234ee9206c5d980dd9 Author: Adam Dickmeiss Date: Tue Nov 14 08:48:26 2006 +0000 Added utilities yaz_{set,get}_esn commit 699e7501d441803e6abd38bb8771cef20846a0d6 Author: Adam Dickmeiss Date: Tue Nov 14 08:37:37 2006 +0000 Added utilities yaz_{set,get}_esn to set/get element set name from record composition. commit 2cb7bb0d334f94db0454178721b8777c64488909 Author: Adam Dickmeiss Date: Tue Nov 14 08:37:16 2006 +0000 For update, record ID "none" makes update omit record ID. commit 9e6f187978c4a79ceaa71921364336f5b5011aec Author: Adam Dickmeiss Date: Wed Nov 8 08:57:34 2006 +0000 Repeat call to select(2) if errno=EINTR is returned. commit e8b504e6b88e1254fb1c329a74fd1afaf973570b Author: Adam Dickmeiss Date: Wed Nov 8 08:55:50 2006 +0000 Fixed bug #729: Bad error message when starting with an invalid address. commit 05cbba0079b597a8e960ea52f4300771c8ca0812 Author: Adam Dickmeiss Date: Mon Nov 6 23:21:30 2006 +0000 Make fake 'Present Out Of Range' Diagnostic for bad Z39.50 Present Request Ranges. In ZOOM_Event, repeat call to poll if errno=EINTR. commit 1648788aab97d7f8ccb78037aee89b0039c90041 Author: Marc Cromme Date: Mon Nov 6 14:49:32 2006 +0000 added zoom layer record size debug output added debian package version number 2.39 in changelog to be able to install packages commit 282dd34ba931365f19aea49b262c7b60e67192cf Author: Adam Dickmeiss Date: Thu Nov 2 08:06:03 2006 +0000 Removed the build of libyazthread.la. The libyaz.so is the threaded version of YAZ and has been so since YAZ 2.1.10. commit 3a7dc22954c4469ebdc6e132c69fbd23638bce57 Author: Adam Dickmeiss Date: Wed Nov 1 15:39:05 2006 +0000 Fixed bug #719: Database in ZOOM_search may be different real search. Fixed the database(s) values for scan + search. For extended services there should not be a problem since those are built as APDUs initially. commit 17eb2fd28b9e01e9c80c55a0fcc48fd866082bfc Author: Adam Dickmeiss Date: Tue Oct 31 14:08:01 2006 +0000 Implemented ZOOM_record_error which returns error information for record (surrogate diagnostic). Bug #715. commit 19ceaa7b25280fbcdfb4e2d5eb94d3483f7d5d66 Author: Mike Taylor Date: Tue Oct 31 12:27:15 2006 +0000 Ignore generated diagsru_update.h commit 18066a4668e30a464d01cd5f01a060e453b368be Author: Adam Dickmeiss Date: Tue Oct 31 10:07:22 2006 +0000 Towards 2.1.38. commit 94befd6697082039477a3fa009e6657c1273e9c6 Author: Adam Dickmeiss Date: Tue Oct 31 10:02:06 2006 +0000 Added auto generated file diagsru_update.c commit 45ca1fdb638bf7aac77f3882a534ca19289aeaac Author: Mike Taylor Date: Tue Oct 31 09:15:00 2006 +0000 Fix typo. commit f97f41688df997a362e248bb64b830adb882c5c1 Author: Adam Dickmeiss Date: Sun Oct 29 18:33:54 2006 +0000 WIN32 mods for new SRU update commit 24483d4ace499b46ae33f06594d2d1f75f422f44 Author: Adam Dickmeiss Date: Fri Oct 27 12:19:15 2006 +0000 Fixed bug #711: Do not include Libxml2's headers from nmem.h. commit 0595ed2dacb6d69e73247e547142c49f8517cffa Author: Adam Dickmeiss Date: Fri Oct 27 11:25:57 2006 +0000 Mention bug 709 commit 02c2c415822721c98afff674fc9672d004bd92a2 Author: Adam Dickmeiss Date: Fri Oct 27 11:22:08 2006 +0000 Updates for SRU Update by Ko van der Sloot: 1. Changed name from "operation" to "action" 2. Fixed that that "recordIdentifier" was called "recordId". Kept the old versions in the code, marked as 'backward compatible'. 3. Added diagnostics for SRU Update. commit 0d6309b35855b9e9b8f09c4c75dcd71483c5da5f Author: Adam Dickmeiss Date: Fri Oct 27 11:02:50 2006 +0000 Change type to avoid problems with strict-aliasing rules commit f9e10939c4e5ac6cc0dd42587cc51c7fa7fa0007 Author: Adam Dickmeiss Date: Thu Oct 26 15:34:46 2006 +0000 Fixes for bug #709: Records are fetched in wrong format when tasks are queued. This change also queues elementSetName. commit 66ab37e39c6f32575526ffa2347ededb7ebf7bd0 Author: Adam Dickmeiss Date: Wed Oct 25 09:58:19 2006 +0000 Fixed bug #707: CQL->RPN ignores lines with leading spaces. Changed function cql_transform_open_FILE so that white-space is allowed in the beginning of a pattern=value line. Lines with pattern but missing value (or missing =) results in an error. commit e63923d5a33d54806b2d73670c26c57480c484da Author: Adam Dickmeiss Date: Wed Oct 25 09:54:35 2006 +0000 Document yaz_matchstr commit 8fddce6d5593652f0218f0fb0b7a798f4e59b894 Author: Adam Dickmeiss Date: Wed Oct 25 07:28:27 2006 +0000 Make an example reference to etc/pqf.properties. commit 5685184f38bc71ece7593fa7ee3f82ebe31b5054 Author: Mike Taylor Date: Tue Oct 24 11:48:42 2006 +0000 Note on selecting SRU dialect, including SRW. commit a1260bbefc2a64f75547b62151d19804403d9667 Author: Adam Dickmeiss Date: Tue Oct 24 10:12:36 2006 +0000 Make a doc-clean rule commit 4063d979ead2def7e1a921a05e5ac0d49bfdc999 Author: Adam Dickmeiss Date: Tue Oct 24 09:53:42 2006 +0000 Fix compilation error commit d34b7eb62c029d607550ef6c1090c94729bde38f Author: Adam Dickmeiss Date: Tue Oct 24 09:18:34 2006 +0000 Fix bug #706: 2nd try. Implement the charset rules as follows: SRU SOAP / POST: If charset in content-type is specified, use it . If omitted, do not assume a particular charset (And &#x.. is in use). SRU GET: If charset in content-type is specified, use it. If omitted, assume UTF-8. Note that in most cases there will not even be a content-type for SRU GET. commit 0698b2e37e7d857e50a72397f53d738a5d454ea4 Author: Adam Dickmeiss Date: Tue Oct 24 08:26:49 2006 +0000 Don't make map files. zoomtst10 part of build. commit 1d5b77651a731db70204f77e7b8662ac4b4bfad4 Author: Adam Dickmeiss Date: Tue Oct 24 08:26:25 2006 +0000 Change usage example. commit 7b4a8fda694b878b0b3c3bfd67be164fa8293043 Author: Adam Dickmeiss Date: Tue Oct 24 08:12:12 2006 +0000 Fixed problem with SRU diagnostic 'First record position out of range' being issued for 0 hits. commit 7cca838c3a2d3fbb017949dd44d1c7d8a19dc843 Author: Adam Dickmeiss Date: Tue Oct 24 08:07:02 2006 +0000 Fail decoding of SRU SOAP searchRetrieveRequest if queries are omitted commit d21d3b30a525282f427f81219bf5a0b42e45bb04 Author: Adam Dickmeiss Date: Tue Oct 24 08:05:45 2006 +0000 Fixed bug #706: XML hex encoding UTF-8 chars out of range 0-255. In order to preserve UTF-8 sequences we must use xmlDocDumpMemoryEnc instead of xmlDocDumpMemory. The former is only used if a charset is given. YAZ reads that from the content-type HTTP header (;charset=). This however, does not make sense for SRU GET. So for SRU GET we force charset=utf-8 and use xmlDocDumpMemoryEnc. commit 78f8391d48d53549d01c002629deb00c7cf388cf Author: Adam Dickmeiss Date: Tue Oct 17 07:57:14 2006 +0000 Towards 2.1.37. commit 9fff21450011d2d4609be0d3e5e1abfe73bf2525 Author: Adam Dickmeiss Date: Fri Oct 13 12:50:14 2006 +0000 Towards 2.1.36 commit c83035e0e0177b385091cd273562ea0d222b5908 Author: Adam Dickmeiss Date: Fri Oct 13 11:30:37 2006 +0000 Files that include full license should not also point to file LICENSE. commit e36d7fa6b0fdfdc0d49cf13c54b9724af6c1c752 Author: Adam Dickmeiss Date: Fri Oct 13 11:25:47 2006 +0000 Removed file with obsolete content. commit 91d51c66de0c9780a58795bf9d3cb82a1931accd Author: Adam Dickmeiss Date: Fri Oct 13 11:25:24 2006 +0000 Mention xsltproc. Refer to SRU rather than SRW commit 8df7d26b7379039b47e57c29712d21ac278f0745 Author: Adam Dickmeiss Date: Fri Oct 13 11:22:26 2006 +0000 VS 2003 or later has getaddrinfo; older versions do not commit 63ed4a2c42b0a5786e375be40947294f4ac1cf16 Author: Adam Dickmeiss Date: Fri Oct 13 08:26:44 2006 +0000 More news commit ad5ad9a7ef375193c0f526b6321c9ee5bd8ce8b1 Author: Adam Dickmeiss Date: Wed Oct 11 09:39:43 2006 +0000 Fixed 'make distcheck'. Failed due to html files not being removed by uninstall. Added uinstall-hook for the doc directory. commit 67471e87c134f2503546cdd250cd169b7d43d566 Author: Adam Dickmeiss Date: Wed Oct 11 08:43:21 2006 +0000 Implement yaz_filepath_comp which splits a path into file path components. commit d7859bbabce608d9c5296212844b6f0f1ada71fb Author: Adam Dickmeiss Date: Tue Oct 10 13:47:40 2006 +0000 Reindent commit a9927a5dcb277fa27a803b0ed74989175eadd6a9 Author: Adam Dickmeiss Date: Tue Oct 10 09:13:52 2006 +0000 Changes for retrieval module: if backend schema is omitted, use schema as specified in name attribute. And if name attribute is omitted use schema as specified by client. commit 73b96a0bddc9e9b8795451c4c1a795f3224b6b17 Author: Adam Dickmeiss Date: Mon Oct 9 21:12:44 2006 +0000 Extend ASN.1 compiler invocation rules with generated headers commit 964580242e2e0b2e570f652afa58bfb90ad0bb5e Author: Adam Dickmeiss Date: Mon Oct 9 21:02:40 2006 +0000 Change wording ot YAZ license the 'Revised BSD License'. YAZ has used a BSD inspired license until now so this should not have any real impact on anybody. See http://www.opensource.org/licenses/bsd-license.php commit be6bf53019f49c1448f0161e3b0ce8d3b5b09ec0 Author: Heikki Levanto Date: Mon Oct 9 14:22:43 2006 +0000 Using plain char instead of unsigned char in my tests. Removed warnings from printf formats on amd-64 commit ba1eb985bfd53a8cfbfd251e65688921dba56236 Author: Adam Dickmeiss Date: Mon Oct 9 11:21:37 2006 +0000 Fixed bug #687: Missing log lines. Immediate logging (i.e. flush) is no enabled by default for the Generic Frontend Server. Also the log system's use of the "global" l_level was changed and simplified. In particular the log_mask_str now uses the current log level as "input" - not some default log level. commit 5aacaac430b101d72de440cf3833b6faee0eb1bd Author: Adam Dickmeiss Date: Thu Oct 5 16:19:16 2006 +0000 Copyright year commit 4d377a28c907f9fee3f576f32d96020fb7a8436c Author: Adam Dickmeiss Date: Thu Oct 5 16:13:34 2006 +0000 Fixed CQL term parsing: first char in unquoted terms was not prepared for \ escaping. commit fbe668f0fed0122f70d56c438e8055fa74c3f660 Author: Adam Dickmeiss Date: Thu Oct 5 16:12:23 2006 +0000 Fixed bug #678: CQL to PQF translation does not preserve double-quote escaping. commit bd857a679e59df07af55d32365b55d1544514ca4 Author: Adam Dickmeiss Date: Thu Oct 5 15:24:02 2006 +0000 Simplify check for SRU record ranges in GFS. commit f7a54be570c51522047f42daf147f7739c557065 Author: Adam Dickmeiss Date: Thu Oct 5 15:19:33 2006 +0000 Fixed bug #689: SRU diagnostics to be added. The SRU decoding now checks for proper values of "startRecord", "maximumRecords", "maximumTerms", "responsePosition". commit 69d044abe3d3a3560267a16dc4db13386974d5e1 Author: Adam Dickmeiss Date: Thu Oct 5 14:58:58 2006 +0000 Use ZOOM_API(int) for public function ZOOM_connection_is_idle commit 757c8c0ffb82023c9059d9a5997515f65ad68561 Author: Adam Dickmeiss Date: Thu Oct 5 08:26:58 2006 +0000 Supply id on all sections + examples. commit 9dfcbb70828f8d5b524c9bb45852246ae1dd6878 Author: Mike Taylor Date: Wed Oct 4 16:59:33 2006 +0000 Change K&R-style empty function declarations to explicit ANSI-C (void) prototypes commit 358e1b7e886e6130547ca28e72e0f7fdb4f1c409 Author: Adam Dickmeiss Date: Wed Oct 4 16:24:05 2006 +0000 Implement ZOOM_connection_is_idle. commit 8b7e5ea3521972629d28b40db92c30ce91ffd314 Author: Adam Dickmeiss Date: Wed Oct 4 13:21:33 2006 +0000 More info on strftime(3) log file substitutions. commit 58dd808a7f4d7c69e8243b491a6cc35eea5275d0 Author: Adam Dickmeiss Date: Wed Oct 4 12:49:39 2006 +0000 2.1.35. commit 1321777c57cf0b7faaea70cded9c8e39698c23fa Author: Adam Dickmeiss Date: Wed Oct 4 08:04:09 2006 +0000 2.1.34 commit 1806291faf15a684bdf50ecf113fcd8edced9546 Author: Adam Dickmeiss Date: Wed Oct 4 08:01:28 2006 +0000 Update commit 04875a323c2a604664b0915e226d269fa65bf84c Author: Adam Dickmeiss Date: Wed Oct 4 07:42:13 2006 +0000 Only generate up to 10 rotated log files. commit 52ef22373a88e2cc18e515610a40b3cb4e0b7549 Author: Adam Dickmeiss Date: Wed Oct 4 07:32:36 2006 +0000 tstlog uses -r instead of -s o control log file max commit 99d342b33ff48e94f97d631b127279f2face6124 Author: Adam Dickmeiss Date: Wed Oct 4 07:26:00 2006 +0000 Change call to parse_cmd_doc to avoid problems with strict aliasing rules. commit 8b1a2764e09b3573a1d01edc193930962bf3401a Author: Adam Dickmeiss Date: Fri Sep 29 15:29:36 2006 +0000 Implement log rotate log.0, log.1, log.2,.. commit efee4fe9b116348fcc0eb94a529650f8770143fb Author: Adam Dickmeiss Date: Fri Sep 29 13:20:22 2006 +0000 Added support for specifying the max log file size for the Generic Frontend Server. The size is given with option -r. commit b64382a1e420049b882b87fb05fe058aa6592d1c Author: Adam Dickmeiss Date: Wed Sep 27 11:38:59 2006 +0000 Added GCC option -Wstrict-prototypes to buildconf.sh -d. Updated code accordingly. commit c2641d280328e9bc114ca8c7b4585842c0acb05c Author: Adam Dickmeiss Date: Fri Sep 22 14:09:25 2006 +0000 Fix initialization of recordPacking in SRU search in case of format=xml. commit 13f137b81808f6a3359f898614cc988995af3965 Author: Adam Dickmeiss Date: Thu Sep 21 15:55:25 2006 +0000 Change type of optval from long to int for invocation of setsockopt with the SO_REUSEADDR option. commit 9c730b08c6fe0075774ddd1c421b3643efade576 Author: Adam Dickmeiss Date: Thu Sep 21 07:26:24 2006 +0000 Bump version to 2.1.33 commit 49db0e419dbd39548ef06ecb731b1ac86a1179f0 Author: Adam Dickmeiss Date: Thu Sep 21 06:58:54 2006 +0000 YAZ 2.1.32 commit 1fe04a2500032660a1560896affe59467ceac595 Author: Adam Dickmeiss Date: Thu Sep 21 06:56:51 2006 +0000 Put real prefix in references commit e01f8268da29b2240666d4666fb114276322f4f2 Author: Mike Taylor Date: Wed Sep 20 10:12:29 2006 +0000 Zebra sorting relation-modifiers. commit 3e4f42cf6577901e054a02f2f1fb5c03cef7b3ac Author: Adam Dickmeiss Date: Tue Sep 19 21:15:01 2006 +0000 Added the test for bug #641. commit 841e368a9589815fbd5704a8173518b050bc9080 Author: Adam Dickmeiss Date: Tue Sep 19 21:09:44 2006 +0000 For ZOOM-C, put reconnect handling to separate function. Fix reconnect handling for lost session (which broke in 1.87). commit 87fdb8465b6f9a7e90a022de67e9dbbb57c4c5c9 Author: Adam Dickmeiss Date: Tue Sep 19 19:41:32 2006 +0000 Added ZOOM Keepalive/reconnect test utility. commit e899be08cd969b68e8fa04975b9c9205ff8acbae Author: Adam Dickmeiss Date: Mon Sep 18 15:16:14 2006 +0000 2.1.31 commit 660cbdd824cc429a6456308748b0883421f82399 Author: Mike Taylor Date: Mon Sep 18 10:50:59 2006 +0000 Add cql.allRecords commit d54bef901afb189baa796a40bd05e95be1bce13e Author: Marc Cromme Date: Mon Sep 18 09:40:05 2006 +0000 updated to use the ZOOM_EVENT_END event commit 8770b7b456dd3a136b73bb7963884632a671eb83 Author: Adam Dickmeiss Date: Sun Sep 17 10:53:01 2006 +0000 Towards 2.1.30. commit 0f42a62726ed8d0161fc075cb3db21c046b383fd Author: Adam Dickmeiss Date: Sun Sep 17 10:50:49 2006 +0000 Add more news commit 2c418266c8feeeb47453d38c8320e6c83d75fd74 Author: Adam Dickmeiss Date: Fri Sep 15 09:06:28 2006 +0000 Fixed bug #660: addrinfo not handled correctly in tcpip.c. commit 7d7cc0b18839b9a78048041d882c1f3baf006c29 Author: Adam Dickmeiss Date: Thu Sep 14 13:50:24 2006 +0000 Fixed bug in Generic Frontend Server that could cause a server to stop accepting new connections. Bug only seen on two CPU systems on 2003 server. commit 2ea001f75b08508115c9149fb16b41ebc4476c7d Author: Adam Dickmeiss Date: Thu Sep 14 13:47:57 2006 +0000 Increase FD_SETSIZE for winsock select commit caa5ae948706a481006e6d8d2abea24dec56b672 Author: Marc Cromme Date: Thu Sep 14 07:39:49 2006 +0000 const correctness of z_HTTP_header_lookup first argument 'headers' commit 9c70253e4c7eedab806490b87a9a58e970998429 Author: Adam Dickmeiss Date: Tue Sep 12 19:09:43 2006 +0000 Remove unneeded comma after enum list commit cddd92d66e3a59179357c552a53cd7cba43f646f Author: Mike Taylor Date: Tue Sep 12 09:25:17 2006 +0000 Use 4=6 and 5=105 respectively for the "all" and "any" relations. It turns out that Zebra supports these -- who knew?! :-) commit d37f43b0cd3bc5553c6e24203f2fdf3dbdca93a4 Author: Adam Dickmeiss Date: Mon Sep 11 12:12:42 2006 +0000 Added include of string.h commit 9eb25e97c63071b8cf5aa22c462ff38451909802 Author: Marc Cromme Date: Mon Sep 11 07:27:18 2006 +0000 enabled better C support commit 94d223d5f74b0bf34fc7d3789ab3ca59d86152d6 Author: Adam Dickmeiss Date: Thu Sep 7 11:31:39 2006 +0000 Avoid mixed stmt/var declare commit 8aa33c5962490e6f5609853a26512267f287f8d4 Author: Adam Dickmeiss Date: Thu Sep 7 10:01:50 2006 +0000 Fix test for index.html in dist/isntall hook commit 57f7b1e14b5caa622f39d374c650757b2c3264ec Author: ja7 Date: Thu Sep 7 08:14:04 2006 +0000 fixed bug 656 commit e61e837408b141d4a56eaea0abea76ceebd19b7e Author: Adam Dickmeiss Date: Wed Sep 6 16:03:52 2006 +0000 Fix compilation for non- getaddrinfo case commit 2d165abc74dc0cf021d2e526dc728aa79db77637 Author: Adam Dickmeiss Date: Wed Sep 6 15:45:13 2006 +0000 Other spell fix. Bug #653 commit 9a92128c0862d044e09458f56ec165aadbf4a051 Author: Adam Dickmeiss Date: Wed Sep 6 15:21:26 2006 +0000 Dont return value in void function commit 11dbebdf973d652e486f2b5e457cc46d1478556f Author: Adam Dickmeiss Date: Wed Sep 6 15:01:53 2006 +0000 Fixed bug 655: IP reverse map no longer works. Renamed blocking element of COMSTACK to flags to make things more clearer. commit 162ee9de8503efe26215c487e10789f6cfcc6d17 Author: Adam Dickmeiss Date: Wed Sep 6 13:37:50 2006 +0000 Revert changes for PQF SRU queries. commit 54d355d7afb0060f176c956abcf7ad7b895211fc Author: Adam Dickmeiss Date: Wed Sep 6 13:15:48 2006 +0000 Changed the way PQF queries are encoded in SRU GET/POST. PQF search before: x-pquery=pqf . PQF search now: query=pqf&x-querytype=pqf . This makes the SRU request more conformant because the required query parameter is always present. PQF scan before: x-pScanClause=pqf . PQF scan now: scanClause=pqf&x-querytype=pqf . commit 926357dcfb7a359cc7a23766460cef5fe21156ee Author: Adam Dickmeiss Date: Wed Sep 6 09:35:39 2006 +0000 For the generic frontend server, the maximum record size is used as maximum size of incoming packages (SRU + Z39.50). The value until was previously only used in Z39.50 Init negotiation and, later, in a session controlled sizes of records returned. This is controlled using -k option. It can be specified, per server, with element maximumrecordsize in YAZ' GFS XML config. commit 134a99a3c201bff6f36ba09ab7d288606aed32eb Author: Adam Dickmeiss Date: Wed Sep 6 09:27:04 2006 +0000 Removed duplicated entity definitions commit 1b7adad61c65fb89f3ce61ee68dd87e5239841c5 Author: Adam Dickmeiss Date: Wed Sep 6 09:26:36 2006 +0000 Added id attributes for section tags commit 5d73d6c1e27e6c2431c852fe99f025433a8a822b Author: Adam Dickmeiss Date: Mon Sep 4 12:43:45 2006 +0000 Reduce HTMLFILES to index.html and do hooks to install/distrib html files. commit 057a87ae00b04e7b14a67258006dbfc485af2263 Author: Adam Dickmeiss Date: Mon Sep 4 12:37:31 2006 +0000 Fix spelling of SRW diagnostic 60 (bug 653). Change wording of SRW diagnostic 35. Added SRW diagnostic 93. commit 8d6d35f727159d4b6ed2dc941882704766f6e11e Author: Adam Dickmeiss Date: Mon Sep 4 12:09:53 2006 +0000 Version 2.1.29 commit bf8bec2480d8e6fe101c82f4048ca3b6742c39d0 Author: Adam Dickmeiss Date: Mon Sep 4 10:14:34 2006 +0000 Version 2.1.28. commit 2c1c3d5cf64f131f3cee4da100df0851f325fc95 Author: Adam Dickmeiss Date: Fri Sep 1 12:49:03 2006 +0000 More news about getaddrinfo. commit 7b839ae07ba4bdec3a27e604260598633683c842 Author: Adam Dickmeiss Date: Fri Sep 1 12:42:31 2006 +0000 Fix tcpip_set_blocking for Windows. Set comstack cerrno to CSYSERR in more cases for tcpip_get (was unset before). commit 2346d7d4a9084a41800893d212610af66250e536 Author: Adam Dickmeiss Date: Fri Sep 1 12:40:44 2006 +0000 For frontend server, only issue error if recv buffer is too large commit 95fb5d3a1421a0e170f76aafb4bc0ce27a8f2ddd Author: Adam Dickmeiss Date: Fri Sep 1 11:27:20 2006 +0000 Use last rather than first colon in IP address as port separator commit 8fbe86c3ff80837cb658fd6f237675ad6c17556d Author: Adam Dickmeiss Date: Fri Sep 1 10:39:09 2006 +0000 Using results of getaddrinfo to create sockets. This might just be what it takes to go IPV6. commit e886a85739782eec2e0b41af4dbfa0b80bb1f80b Author: Adam Dickmeiss Date: Thu Aug 31 18:19:53 2006 +0000 Fixed problem with unset variable (compose_char) in yaz_iconv system commit fbf02609a8c31033ac787df798a26ea603526d78 Author: Adam Dickmeiss Date: Thu Aug 31 15:40:51 2006 +0000 Debian package 2.1.27-3. commit 42c3fe90f5347870131d2da2203502aab34f0a7c Author: Adam Dickmeiss Date: Wed Aug 30 20:43:26 2006 +0000 Ideographic space gets converted to MARC-8 212321 instead of 212320 commit 6f17341a80d2c4558e4944c0731231994b3da8bc Author: Adam Dickmeiss Date: Wed Aug 30 20:40:18 2006 +0000 For duplicates in char conv trie, first conversion takes precedence commit fd1be24c165b60d462f5a7e6ca983f1f2eabbcdf Author: Adam Dickmeiss Date: Wed Aug 30 20:14:51 2006 +0000 In character conversion to MARC-8, use ESC$1 instead ESC(1 to switch to CJK character(s). commit 0b3ab2336aeda693cbecbf78ff956103f4e6d0cc Author: Adam Dickmeiss Date: Wed Aug 30 19:26:43 2006 +0000 Use getaddrinfo on Windows too commit b335dcd534287a207ef75b35e486df21293feddb Author: Adam Dickmeiss Date: Wed Aug 30 18:58:58 2006 +0000 TCP/IP COMSTACK uses getaddrinfo as resolver on systems that have it - instead of gethostbyname_r which is not portable. commit 6b152d04e55e9d23fc2dd0c948929ad5e2bd4c05 Author: Adam Dickmeiss Date: Wed Aug 30 12:55:12 2006 +0000 Define INADDR_NONE to -1 if undefined commit 508ab620b78b136e861fce7a292882c140a8ec60 Author: Adam Dickmeiss Date: Wed Aug 30 12:47:23 2006 +0000 Windows compile fix. commit 8a0937d20238aa0f26e564f7eacc0483acb102da Author: Adam Dickmeiss Date: Wed Aug 30 12:04:42 2006 +0000 Fixed bug #644: Using Non Reentrant gethostbyname causes SIGSEGV. Function gethostbyname_r is used instead of gethostbyname - when available. commit 2faa91f8c7375275f7435916b40be2176379f9ee Author: Adam Dickmeiss Date: Mon Aug 28 19:18:02 2006 +0000 Added refentryinfo with productname + productnumber commit ad61957d649158cf2e1018da95fa428aa8999f2a Author: Adam Dickmeiss Date: Mon Aug 28 18:35:07 2006 +0000 Add -l to cmdsynopsis list commit 704aa32f468be55eae352d34dfab808954086ae2 Author: Adam Dickmeiss Date: Mon Aug 28 16:54:52 2006 +0000 Debian package 2.1.27-2 commit e8ac1e56929fe175624fb63e619c184b58ef63b9 Author: Adam Dickmeiss Date: Mon Aug 28 14:18:18 2006 +0000 New option for yaz-marcdump -lpos=value which allows setting a portion of MARC header to a certain value. Added function yaz_mac_leader_spec. commit b925ea17d6f146a28d745b0d34e9eec6eafda21f Author: Adam Dickmeiss Date: Mon Aug 28 12:34:40 2006 +0000 Fixed bug #643: Bad sequence for MARC conversions from UTF-8 to MARC-8. Added test tstmarccol.sh for testing this. All sample ISO2709 marc records renamed to have suffix .marc. commit 3a78b70f2e785e67e08b26c8e50101d10e054dbb Author: Adam Dickmeiss Date: Mon Aug 28 12:31:18 2006 +0000 Reformat commit 41f87f5dc9c06c045eb94157dbd4009ad52bc02a Author: Adam Dickmeiss Date: Sun Aug 27 19:04:03 2006 +0000 Fixed bug #642: Problem with sub script symbols in conversion to MARC-8. commit 1188462f8e71086cd6792f7bacf76a37cad499c4 Author: Adam Dickmeiss Date: Fri Aug 25 14:57:04 2006 +0000 Fixed bug #641: Sending a too-big packet sometimes make ZOOM-C no-op subsequent operations. commit 24c0e59876a904ebb14dc0e2449de74716d0d178 Author: Heikki Levanto Date: Thu Aug 24 14:29:58 2006 +0000 Took away that -Werror from -d until all tests pass cleanly commit 83800da8ab73064cd1031adb7f44d07691f95d55 Author: Heikki Levanto Date: Thu Aug 24 13:41:18 2006 +0000 Added -Werror to the -d option, so that the compilation ends at the first warning. commit 32687c1504015e0675d49983707576f8db9b7bfc Author: Adam Dickmeiss Date: Thu Aug 24 13:25:44 2006 +0000 Make a facility for COMSTACK to reject too large packages. The maximum size can be set with cs_ste_max_recv_bytes. By default, maximum is 5000000 (approx 5 MB). If max size is received error comstack error CSBUFSIZE is returned. The generic frontend server checks for this error and sends a close + logs if this condition occur. commit 4cadb168b5477478ceea77aa53364c54e6b3cfba Author: Adam Dickmeiss Date: Thu Aug 24 13:19:44 2006 +0000 Allow this update test to read record data from standard input. commit 2651656d43e5d5d9483469f2b319e734f449f9b1 Author: Adam Dickmeiss Date: Thu Aug 24 13:11:27 2006 +0000 Doxygen comment. commit 346311370361ec56af79a2f7756c9a8db4f55a68 Author: Adam Dickmeiss Date: Thu Aug 24 13:10:03 2006 +0000 completeBER, completeBER_n no longer checks for a maximum size of 5 MB. Too large packages to be rejected are dealt with in comstack instead. commit feea53ffb3c3f9dc9eef15548a7fbca4007a7a60 Author: Adam Dickmeiss Date: Thu Aug 24 12:51:49 2006 +0000 Fixed bug #640: ZOOM_connection_connect() does not clear error indicators. commit 2e40cc0b39b9e96695e70316c677f035f7bfd52e Author: Adam Dickmeiss Date: Thu Aug 24 10:01:03 2006 +0000 Make a public function, yaz_write_UTF8_char, to encode a UTF-8 sequence. commit 8170d48cb0b650f3d8ec35e3ad1e5fe0046eeecc Author: Adam Dickmeiss Date: Fri Aug 18 06:30:05 2006 +0000 Move yaz_srw_get_core_v_1_1 to other source. Define it always regardless of Libxml2 being available or not. commit 1757a898179e7e22bf2505354c308e8e353c0b0b Author: Adam Dickmeiss Date: Wed Aug 16 22:50:06 2006 +0000 Towards 2.1.27. commit 184f0911dd1ef651b6ba659df0eb33ff2455014c Author: Adam Dickmeiss Date: Wed Aug 16 22:47:09 2006 +0000 Implemented bug #635: YAZ/ZOOM layer should include non SRU options in the HTTP/GET URL. ZOOM-C reads option extraArgs. If set the value of extraArgs is appended to SRU URI (POST/GET). Value is _raw_ URI part, such as x-id-a=v1&x-id-b=v2 . commit b7d2e2be0cdfdcd7703f4097165c5342202b9c65 Author: Adam Dickmeiss Date: Wed Aug 16 14:18:59 2006 +0000 Fixed bug #636: Bad rpn causes seg faults. Error occurs for ZOOM C when a Scan is sent. Bug has been present in YAZ since version 2.1.12. commit c0b99bede94110bb6a6e824e5596c9eabe6f82dc Author: Adam Dickmeiss Date: Tue Aug 15 13:34:39 2006 +0000 Towards 2.1.26. commit 536ffb34a8baf9ec637c2cc2340f79e1fe9441ed Author: Adam Dickmeiss Date: Tue Aug 15 13:31:07 2006 +0000 Fix ZOOM-C so that SOAP mode sends SOAP requests commit 73709d08e8f3c85cbca1c8d883aac65bd6ffe8d6 Author: Adam Dickmeiss Date: Tue Aug 15 13:30:00 2006 +0000 Fix interpretation of sru command commit 4b46dbf6d639a40bdeae0c280861505b937f34b9 Author: Adam Dickmeiss Date: Sun Aug 13 17:30:57 2006 +0000 Only declare nmem_text_node_cdata if Libxml2 is available commit 461dbf959bb1d556261c66300d6b0eabb0ae0909 Author: Adam Dickmeiss Date: Fri Aug 11 13:10:27 2006 +0000 Fixes for nemm_memory statistics commit d3263920e1450036b3add4b0a8c049136594afa1 Author: Adam Dickmeiss Date: Fri Aug 11 12:57:30 2006 +0000 Include XML2_CFLAGS in AM_CPPFLAGS commit c168cffc46e3b2b66e66e48f94f8e87b6566702b Author: Adam Dickmeiss Date: Fri Aug 11 12:50:23 2006 +0000 Changed prototype for nmem_text_node_cdata so that ptr is using Libxml2 type rather than void pointer. Added functions nmem_get_memory_in_use and nmem_get_memory_free which returns size of block memory in use and in free lists respectively. Added doxygen friendly comments for nmem.h. commit 2fbc11d055be3297fe0a5c5b29a0d01001859614 Author: Adam Dickmeiss Date: Fri Aug 11 12:43:52 2006 +0000 Cosmetic for doxygen commit e31b76c9b37f96159fb400f049c8e1c240a6e7be Author: Adam Dickmeiss Date: Wed Aug 9 14:03:25 2006 +0000 Mention bug #626 commit 428847338cc5b48d012b3b724c1d4ecefdc5614e Author: Adam Dickmeiss Date: Wed Aug 9 14:00:18 2006 +0000 Allow a flag nmem_release_in_heap to be set (1) in which case NMEMs are reassigned to the memory heap rather than re-used.. This should make it easier for valgrind etc to find problems. commit d3deed18d17648b5561f11b926be6d6eb1d9110c Author: Adam Dickmeiss Date: Tue Aug 8 20:58:52 2006 +0000 Attempted to fix bug #626. commit ae141e38583b7c31bdaccdb67b1a2098890f34ec Author: Adam Dickmeiss Date: Tue Aug 8 20:35:02 2006 +0000 Version 2.1.25. commit 57d5c3b970b0c95999f6894f3bbf3dc642b9010f Author: Adam Dickmeiss Date: Tue Aug 8 08:41:09 2006 +0000 Towards 2.1.24. commit e87336d1ad9587d0a7fdc805e2b53c77d435d67c Author: Adam Dickmeiss Date: Fri Aug 4 14:35:39 2006 +0000 Use yaz_read_UTF8_char instead of xmlGetUTF8Char commit 11d3339c3128f129598072d1372d4bcc4aaeab14 Author: Adam Dickmeiss Date: Thu Aug 3 09:27:23 2006 +0000 Updated to use iconv-1.9.2, libxml2 2.6.26, libxslt 1.1.17. Added missing dependences for generated files. commit ec63c95902e8aecab659cad218331dc9cc3f58b5 Author: Adam Dickmeiss Date: Tue Aug 1 12:03:58 2006 +0000 Removed nfaxml..xml files from dist list. Not in CVS yet commit fc5112436c75279092ded9a787e9fcaa26982fb2 Author: Adam Dickmeiss Date: Tue Aug 1 09:48:23 2006 +0000 Copy news from ChangeLog commit 8456bd3e19e2d0f4694ad97ecdc737a82c3d0816 Author: Adam Dickmeiss Date: Tue Aug 1 09:28:04 2006 +0000 Fixed yaz_marc_write_iso2709 to honor character set conversion. commit 6d146b66bddee1a1f0857b548c614047db43693f Author: Adam Dickmeiss Date: Mon Jul 31 12:15:02 2006 +0000 Fixed bug #627: addInfo not propagated by srw_bend_fetch() when rr.surrogate_flag==0. commit 142dd0c6126310587d23465d4b7a26fb2f46fa98 Author: Adam Dickmeiss Date: Mon Jul 31 11:47:04 2006 +0000 Omit description of loglevel in statserv_options_block. Bug #612 commit aef662a463f8175044f519754e178c1291ee3014 Author: Adam Dickmeiss Date: Mon Jul 31 11:42:32 2006 +0000 CCL proximity tests commit 0c76adcaa70c004d8eaab1842d286e4462ac6b11 Author: Adam Dickmeiss Date: Mon Jul 31 10:05:04 2006 +0000 Get rid of redundant parameter to yaz_log_to_file. Reformat a bit commit 2a34da356160199e2a655d6ddb8d4964aa40710c Author: Mike Taylor Date: Wed Jul 19 16:36:33 2006 +0000 Ignore nfaxmltest1 and nfaxmltest1.log commit fd3a0b7302ceed6425c05b6537cb654201cb1494 Author: Heikki Levanto Date: Fri Jul 14 13:06:37 2006 +0000 Loading of the nfa now possible from an xml file. Had to disable two tests, because make distcheck could not find the files I wanted to load. After that distcheck passes all right. commit 5ed3b6561d90d13f64be7f9ae8beaf4a0b3f8e32 Author: Heikki Levanto Date: Fri Jul 7 13:39:02 2006 +0000 Added YAZ_CHECK_TODO macro, used it in nfaxmltest1. Added rm *.log in tests make distclean. commit d1ff65fe4a7472a58a182d922c4a9729f0e17f9f Author: Marc Cromme Date: Fri Jul 7 13:02:21 2006 +0000 moved superflous session logging from log_session to log_sessiondetails commit 64f21c5f41690ce42f89bedae8c5ba72bdd12365 Author: Marc Cromme Date: Fri Jul 7 12:40:15 2006 +0000 added number of terms returned to client from Scan or SRWScan to request log line commit 200e95a52c5a411bad2a23f2857bb1d7e5512449 Author: Marc Cromme Date: Fri Jul 7 12:09:05 2006 +0000 replaced RPN: with RPN , CQL: with CQL, ans so forth in log messages commit 15e6706cde980cdf149151fa2ceb5630646fafa9 Author: Marc Cromme Date: Fri Jul 7 10:31:26 2006 +0000 further cleaning of log messages, related to bug #405 commit 67678f8e96470defa2beb7157f936993b6a3cff3 Author: Adam Dickmeiss Date: Fri Jul 7 08:41:20 2006 +0000 Added nfaxml commit e93af44cba69b4b77b114b32802c0eaf7d6e2bac Author: Adam Dickmeiss Date: Fri Jul 7 08:36:50 2006 +0000 Added nfa commit 02ac5c5808e74192c93eab3fb97f833419c7ed2b Author: Adam Dickmeiss Date: Fri Jul 7 08:36:36 2006 +0000 Changed two vars to be of type size_t rather than int commit ca24595c149c79bfc63e4c8fa97b9a7bd0fb58f4 Author: Adam Dickmeiss Date: Fri Jul 7 08:32:53 2006 +0000 Split YAZ DLL objs into only 3 groups commit f83e5541f06bc5587efb2231006841137ba9f6d4 Author: Adam Dickmeiss Date: Fri Jul 7 07:14:30 2006 +0000 Avoid decl after stmt commit c372821536d22c1b7efb290fb7d120ae5151adf2 Author: Adam Dickmeiss Date: Fri Jul 7 07:11:05 2006 +0000 Make test pass commit 5c35a542079457f2f5bcb9f367d6c449a2879822 Author: Adam Dickmeiss Date: Fri Jul 7 06:59:49 2006 +0000 Fix compilation on Windows. Reformat a bit commit 6693b35490291a774e7ca952bf7f6197dbdb94af Author: Marc Cromme Date: Thu Jul 6 15:06:12 2006 +0000 downgraded superflous log comment from YAZ_LOG to log_requestdetail commit 9efa56ca92283783db05f88eb52cf212eef909d9 Author: Marc Cromme Date: Thu Jul 6 14:54:29 2006 +0000 added database name in scan response, both Z39.50 and SRU still missing to fix Z39.50 scan response with respect to missing RPN: or CQL: identifier on APT display commit 48bd1822e09cb4e5545c3e0a0178e45a664da8c6 Author: Marc Cromme Date: Thu Jul 6 14:16:00 2006 +0000 partiallay fix bug #405 database name now part of request log like Z39.50 log: 16:09:55-06/07 lt-zebrasrv(2) [request] Search Default OK 0 1 1+0 RPN: @bla@bla or SRW log: 16:09:19-06/07 lt-zebrasrv(1) [request] SRWSearch Default OK 60 - 1+0 CQL: bla needs still fixing in scan request commit 60fa9058b47df51d7ca169c3c75b72988d345119 Author: Heikki Levanto Date: Thu Jul 6 14:06:17 2006 +0000 Fixed order of declarations commit fc42e0dc251df1d80ffc4c9279478d64d8a7027c Author: Heikki Levanto Date: Thu Jul 6 13:10:29 2006 +0000 Added yaz_log_trunc() to truncate the log file Added YAZ_CHECK_LOG macro for enabling logging in the test files Changed test.c to write to the log, if logging enabled Small changes to the interface of nfaxml's interface commit fc6d778b923000b5c6ad8e108b0b184178a9d33f Author: Adam Dickmeiss Date: Thu Jul 6 10:17:51 2006 +0000 For Libxml2 and friends, YAZ defines YAZ_HAVE_{XML2,XSLT,EXSLT) in the compitation phase, but also for yaz-config --cflags output. This allows us to have public headers with Libxml2 stuff in them . It should also, eventually, make Libxml2 checks redundant in packages using YAZ, such as yazproxy. commit 262ce1bfa2a3bc7045217e59281b4b59938a7da8 Author: Adam Dickmeiss Date: Thu Jul 6 08:28:37 2006 +0000 Dont use xmlDocPtr local commit 845a4f128f89f03b7b917b95ad5788e9d5e92145 Author: Adam Dickmeiss Date: Thu Jul 6 08:26:11 2006 +0000 Yet another fix commit 11d1675ce7431f8b58a9b4d458c1b7a929a51959 Author: Adam Dickmeiss Date: Thu Jul 6 07:45:07 2006 +0000 Fix compilation on systems where Libxml2 does not exist commit 9eb7c036e5fba056b392eb803bddb7e75382b15c Author: Adam Dickmeiss Date: Thu Jul 6 06:09:12 2006 +0000 Disabled log_xml_error because it doesn't work on older Libxml2 and also because YAZ already has a "catch lixml2 error" handler. commit 10e13ea8cb74077e0f48b5832ccb84b996672193 Author: Adam Dickmeiss Date: Thu Jul 6 06:08:19 2006 +0000 Removed HAVE_XML2, because public headers never should rely on configure's definitions. commit 8396cd72b6ca7b7154c1df50492fc0dfd004aad5 Author: Adam Dickmeiss Date: Wed Jul 5 14:50:16 2006 +0000 Changed cql2pqf transformation to use a different evaluation order. The new order is: always, relation, structure, position, truncation, index and relationModifier. Old order was: always, relation, relationModifier, structure, index, position, truncation. Note that the the latter ones override former ones for identical attributes.. The new scheme means that it is possible to override any existing attribute with a relationModifier. And also that it is possible to override everything for the index rule (except the ones listed in relationModifier). No order is perfect but this one, we believe, covers more real cases.. The "always" should have been called "default", since the attributes there can be overridden with all the rest. commit 18f92d330bb581f4d216346dbb73e2b642e720f9 Author: Adam Dickmeiss Date: Wed Jul 5 14:45:57 2006 +0000 Added cql2pqf which shows evalutation order commit 8383a8bbc36d4ef3bf8393efcb2fe346570d6a46 Author: Adam Dickmeiss Date: Wed Jul 5 13:05:32 2006 +0000 Simplify YAZ windows makefile commit b9e447111828c6056c35b8a5f11a386e843edb59 Author: Heikki Levanto Date: Wed Jul 5 08:12:48 2006 +0000 Added the (empty) test file commit e5db38d08a1f5d4848c4ab6789a491d69a164349 Author: Heikki Levanto Date: Wed Jul 5 08:10:40 2006 +0000 Removed duplicate nfatest1 commit fb61309506b52ca0dad9aea4135ceeda63707b0d Author: Heikki Levanto Date: Tue Jul 4 12:59:56 2006 +0000 Started the error handling in nfaxml. Not at all ready, but I want it in CVS. commit acf66fb3406fb7eb3e8c76cbe073cbe061080a5a Author: Adam Dickmeiss Date: Fri Jun 30 11:09:44 2006 +0000 Log format '%!' prints thread ID commit 7cf511b16827d66df48d91c74cf8cb308e3b10a8 Author: Adam Dickmeiss Date: Wed Jun 28 21:41:54 2006 +0000 Fix dist-hook so that make distcheck works commit 0920106c1999d6628e21f42f2109dc1b18fbe58c Author: Adam Dickmeiss Date: Tue Jun 27 12:23:11 2006 +0000 Configure build shared libraries by default. commit e87b70ae77aed9a47ee29f69ce2c531fddf394ce Author: Adam Dickmeiss Date: Tue Jun 20 21:20:51 2006 +0000 Fixed option negotation for Frontend server . Option triggerResourceCtrl was always set in response options. Should only be set if option is also set in client options. commit 7056994408e8dd24412d4d8b507ed2e6f003fb2d Author: Adam Dickmeiss Date: Fri Jun 16 12:34:32 2006 +0000 More work on a fix for bug #612. We could have "dup" receive record events before. And ZOOM_event could also miss events fired in case of task "completed". commit face40cf2923792ba65702faa415a624973bf681 Author: Adam Dickmeiss Date: Fri Jun 16 10:20:17 2006 +0000 Fire ZOOM_EVENT_RECV_RECORD for cached records. Bug #612. commit 44319ea2e76c8e53ceac85188f7bed0304f84767 Author: Adam Dickmeiss Date: Fri Jun 16 10:19:23 2006 +0000 Internal version 2.1.23. commit 2cfc0533b65410ab8462eb819fb4d70f6038c8fa Author: Adam Dickmeiss Date: Thu Jun 15 14:15:17 2006 +0000 Make ChangeLog in make dist rule commit bce52f3b3f5fbfc29be0dd841d6ced3bba6d16b4 Author: Adam Dickmeiss Date: Thu Jun 15 13:38:05 2006 +0000 Towards 2.1.22 commit c18ecdaa7ecb2cbc0dff2eebc40e50b07239e339 Author: Adam Dickmeiss Date: Thu Jun 15 12:53:56 2006 +0000 hanged bend_update_rr so that diagnostics are stored in uri, message and details.. Previously diagnostics were stored in errcode, errstring. Patch by Ko van der Sloot. Breaks binary compatibility.. but he's probably the only one affected. commit d168db0590bc858a1bc9bd5a6ea66abbcd8f7d7d Author: Adam Dickmeiss Date: Thu Jun 15 10:43:15 2006 +0000 Ignore zoomst10 commit 762b8f1410065bff60b1e174ec58e9d3d229c871 Author: Adam Dickmeiss Date: Thu Jun 15 10:38:35 2006 +0000 Make the zoom programs by default. Problem is that if we don't, we won't test whehter they even compile. commit a89ed3c40c9eab3721ccbd5e91919ba06208edbc Author: Adam Dickmeiss Date: Thu Jun 15 10:34:15 2006 +0000 Changed ZOOM_query_ccl2rpn function so that it takes a CCL config as input and return error information directly. commit d1fb65aa541a7a50654b8b224f0b5303ebd9c516 Author: Mike Taylor Date: Wed Jun 14 09:15:28 2006 +0000 Fix leak of temporary connections created by ZOOM_query_c[cq]l2rpn() Thanks to Adam for spotting this. commit cc078710f81ae60a8922044313b5c4733ac90639 Author: Adam Dickmeiss Date: Wed Jun 14 05:47:10 2006 +0000 Fix complication for YAZ, when libxml2 is not present. commit cb0268ee168504b47fbf6c41da9ddbfeb5ed73fb Author: Adam Dickmeiss Date: Tue Jun 13 20:47:03 2006 +0000 Use simpler version resource. commit 202031e1ebcbec1331575150e5708be67822b388 Author: Mike Taylor Date: Tue Jun 13 17:02:12 2006 +0000 Describe ZOOM CCL support. commit 29c6ebfc19c403aa99c7f462d2b36f056ffd4dbc Author: Mike Taylor Date: Tue Jun 13 16:27:23 2006 +0000 I think this now supports CCL in scan, but I've not tested it. commit 3ee7ef4088b265faffbdcabe3eb13d5f04a3b832 Author: Mike Taylor Date: Tue Jun 13 16:21:42 2006 +0000 Add ZOOM_query_ccl2rpn() and two new error-codes that it generates: ZOOM_ERROR_CCL_CONFIG and ZOOM_ERROR_CCL_PARSE Also, new static utility function ccl2pqf() which may be useful elsewhere. Note that CCL is _not_ supported in scanning. commit 6ab8e8163865c43772a6249cb2d12dfae83259ab Author: Mike Taylor Date: Tue Jun 13 16:20:04 2006 +0000 Add ZOOM_query_ccl2rpn() and two new error-codes that it generates: ZOOM_ERROR_CCL_CONFIG and ZOOM_ERROR_CCL_PARSE commit 21f7c16c6b1b694405dbc1760d3d6cb3caac38f6 Author: Adam Dickmeiss Date: Tue Jun 13 16:01:51 2006 +0000 Mention SRU rather than SRW (where appropriate). commit bb7daed8b7299999f1c25e4e768e5e510d4b7e98 Author: Adam Dickmeiss Date: Tue Jun 13 15:36:09 2006 +0000 Emacs shell-script for these. commit 7d280285b7dd17c9a71b8d458171f40f35dd6682 Author: Mike Taylor Date: Mon Jun 12 16:12:58 2006 +0000 Avoid pointer-sign clash in yaz_marc_decode_buf() call. commit df6700d5c88cff54c491ad2a1ae7d8426f92f044 Author: Adam Dickmeiss Date: Fri Jun 9 13:29:52 2006 +0000 News about SSL commit 0aad40fcb08a072aebd1dd352bc831f43d1644d7 Author: Adam Dickmeiss Date: Fri Jun 9 13:29:21 2006 +0000 YAZ' configure searches for OpenSSL by default. commit 61a2c61568817a54422e52a1fe242b8ee1857920 Author: Adam Dickmeiss Date: Fri Jun 9 12:40:53 2006 +0000 SSL comstack uses SL_CTX_use_certificate_chain_file rather than SL_CTX_use_certificate_file. See http://lists.indexdata.dk/pipermail/yazlist/2006-June/001615.html commit 1e5f589925b0cbb16ea52243d300b02438fb3229 Author: Adam Dickmeiss Date: Thu Jun 8 20:55:38 2006 +0000 Fix other bug in yaz_filepath_resolve commit 6f3861dbfb754ceffb8587c64e7631ae6ca3b650 Author: Adam Dickmeiss Date: Thu Jun 8 10:26:10 2006 +0000 Fixed bug #606: Empty path in yaz_filepath_resolve reads from / . Added a test for it : tst_tpath. commit acbea5b1df81001dc8c0e1eb75386796dde425b3 Author: Adam Dickmeiss Date: Wed Jun 7 18:25:32 2006 +0000 Use same case for VS_RUNTIME_MANIFEST var commit 11db1845a1dfbe1e6fbc1715f9edce6071f63e0d Author: Adam Dickmeiss Date: Wed Jun 7 18:23:22 2006 +0000 Include manifest for msvcr80.dll commit 24e8ba4deca04c30ead995e4c961f08027e120a9 Author: Adam Dickmeiss Date: Wed Jun 7 14:25:43 2006 +0000 Remove debug DLLs part of dist. Add .manifest files commit c7e1a7aece8464775951ce9186988f2a881c867f Author: Adam Dickmeiss Date: Wed Jun 7 11:18:04 2006 +0000 Bundle with Visual Studio 8 by default commit f26962f9dfdbcd23a08a7f0880b1d9f8a36cbaf9 Author: Adam Dickmeiss Date: Wed Jun 7 11:17:22 2006 +0000 Removed commit 02c239d1b4b0ea8b03bfb64d08605efdc9f96705 Author: Adam Dickmeiss Date: Wed Jun 7 11:13:28 2006 +0000 Version 1.2.21 commit bb25a09cf2ddafa682867ae6a5ab2185dfa74e75 Author: Adam Dickmeiss Date: Wed Jun 7 10:51:14 2006 +0000 Changed a few types from int to size_t commit 2e5072f935bd399752daff78d8b4d347b4787fc0 Author: Adam Dickmeiss Date: Wed Jun 7 10:48:45 2006 +0000 Version 1.2.21 commit 73f741401a71bd024f03302a75403227d5bf7721 Author: Adam Dickmeiss Date: Wed Jun 7 09:25:47 2006 +0000 For VS, define _CRT_NONSTDC_NO_DEPRECATE, so we don't warnings about good functions such as getpid, chdir, etc. commit 72b7bb88d5ea8551193180c9e0f7869dd111db45 Author: Adam Dickmeiss Date: Mon Jun 5 18:13:01 2006 +0000 Use defined names for SRW diagnostics commit 88f8308cbfa3915b662f86c522d40b8f9753da58 Author: Adam Dickmeiss Date: Mon Jun 5 18:08:10 2006 +0000 Fixed bug #601: SRU decode does not issue diagnostic for bad parameter values. commit fd3974eae119ffd3ec0eded028a828bc6396f543 Author: Adam Dickmeiss Date: Fri Jun 2 14:01:34 2006 +0000 Add pkg-config to Builld-Depends commit 6deaadd7501d45aaf921edb7526689d1b95681a6 Author: Adam Dickmeiss Date: Fri Jun 2 13:31:21 2006 +0000 .dsl,.dsl not part of windows dist commit 84c9ccff7f7deb03ea8d8318c1bcad2d7fd66c3e Author: Adam Dickmeiss Date: Fri Jun 2 13:17:23 2006 +0000 Towards 2.1.20 commit 9903eb091689a6269e28742a16cb6a8705d96675 Author: Adam Dickmeiss Date: Fri Jun 2 13:12:53 2006 +0000 Bug #600: SRU GET, POST support for yaz-client. Introduced command 'sru' which selects method SOAP/GET/POST. commit d58b3c28b5efc7106f6ed65cd52c8ad56de7b6b9 Author: Adam Dickmeiss Date: Fri Jun 2 13:08:27 2006 +0000 Implemented yaz_sru_post_encode which builds a SRU POST requeste. Implemented z_get_HTTP_Request_host_path which builds a HTTP request using host, path. Updated ZOOM C to use these. commit 1429ec287c69a4a0b6a77b063af6796c529ff796 Author: Adam Dickmeiss Date: Fri Jun 2 10:50:28 2006 +0000 Move .xsl.in's to id.xsl's .. so that we reduce .in files further. commit 2fd3755bf6786b61d6b6a2342163cf1405a896cf Author: Sebastian Hammer Date: Wed May 31 16:20:41 2006 +0000 Set present->comp to NULL when no ESN is present in srw_bend_search commit ec938a2fa1feb3422d2533cbb6f7b66423d5ae80 Author: Adam Dickmeiss Date: Wed May 31 15:32:43 2006 +0000 Fixed bug #599: ODR error on incoming PDU. Error was in the ODR buffer handling for ZOOM packages (extended services). commit 3f282496986cbae7fd4bd7f95d44bf47a2cc6874 Author: Adam Dickmeiss Date: Tue May 30 22:00:09 2006 +0000 Added one type cast from char to unsigned char commit 4d1e4573d65a535e8f64527fd42434dcb08f0041 Author: Adam Dickmeiss Date: Tue May 30 21:39:15 2006 +0000 Fixed bug #598: Allow missingValueAction to be specified for sortSpec string. By default, the missing value action is null. Use ! to specify "abort". Use = followed by stringvalue to specify default value. commit f16d85c47887a02f0e1ed74dfd6d4977c1017f8a Author: Sebastian Hammer Date: Tue May 30 14:56:05 2006 +0000 Added entry about present handler commit f33b2c6a4acc73dd7c876cb5c02aa75b2e9156b6 Author: Sebastian Hammer Date: Tue May 30 04:50:04 2006 +0000 Simplified comp for present called from srw_bend_search commit 255028c8f59212f89479222cdd4477a5a6367785 Author: Sebastian Hammer Date: Tue May 30 04:01:55 2006 +0000 Arranged to call bend_present if records are displayed in SR* search commit d775854eb4b203433c54239cc447f20511850ef9 Author: Adam Dickmeiss Date: Sun May 28 19:56:24 2006 +0000 Using man COMPILE_HTML, COMPILE_MAN.. yaz.xml no longer generated by configure - only local.ent is. commit fd68bc7487e4d6b547999f21718955221f1c48a4 Author: Adam Dickmeiss Date: Fri May 26 15:46:44 2006 +0000 Define HAVE_XSLTSAVERESULTTOSTRING for Windows commit 471c6dccdbb5c5a9c08b24c9abd6a1dcda29e79e Author: Adam Dickmeiss Date: Fri May 26 15:09:03 2006 +0000 Revert commit 6bf59f76b5de3421afc0accae54d0829586398a8 Author: Adam Dickmeiss Date: Fri May 26 15:07:08 2006 +0000 Check for xsltSaveResultToString presence. commit 534fdfbf5a8c27f4695c1b73be5636e369ca1acc Author: Mike Taylor Date: Thu May 25 13:03:35 2006 +0000 Note two further Debain packages required for CVS build. commit 44e854d75508bb9af4a36f2644db4757e30ac985 Author: Adam Dickmeiss Date: Thu May 25 07:43:58 2006 +0000 Use xsltSaveResultToString instead of xmlDocDumpFormatMemory in record conversion utility. See also bug #594. commit 1ecd49d730df37f92f997957e2c9f32158bc5d0f Author: Adam Dickmeiss Date: Wed May 24 16:21:02 2006 +0000 Update info about depending packages commit 3b4164d129d859eb9595d7ab2297816e86b4f75e Author: Adam Dickmeiss Date: Wed May 24 14:44:01 2006 +0000 ../configure + make dist works from CVS commit 6e1014e43172e8b894b7726c46b146a465f2fb43 Author: Adam Dickmeiss Date: Wed May 24 14:19:32 2006 +0000 Align yaz main doc to use same header as man pages xml docs commit 85aea22217efed1ef50315fd98061dfbdab81e9f Author: Adam Dickmeiss Date: Wed May 24 12:49:45 2006 +0000 Added URI in XMl header commit c3db1e5bdc42eb3ba6c50d18b200e7c816ee6e9e Author: Adam Dickmeiss Date: Wed May 24 12:33:21 2006 +0000 Documentation for YAZ is now based on the Docbook XML/XSLT using xsltproc + N Walsh's stylesheets. It means that the CVS version of YAZ is no longer depending on jade/openjade or docbook-to-man scripts. PDF is no longer part of the distribution - but can optionally be made using DSSSL/jadetex or FOP. commit 713e1de05a39d3bab7f9becc34d7ebf244c26651 Author: Adam Dickmeiss Date: Wed May 24 09:40:26 2006 +0000 Pass SRCDIR to csvto tcl script commit 11b3a0d1c1be30f5052bf2eba788229df63f13b9 Author: Adam Dickmeiss Date: Tue May 23 20:43:37 2006 +0000 Fix output dir for diagnostics headers commit 6fff59263797b6dd62a12fd389543cb3b5416d5b Author: Adam Dickmeiss Date: Tue May 23 20:39:27 2006 +0000 Fix output dir for ASN.1 headers commit 72204554b2173de3d9aca31b28c69072f63ddbfe Author: Adam Dickmeiss Date: Tue May 23 19:13:44 2006 +0000 Mention docbook-to-man again commit 12be48d5f580afc49f3a08db84ddfddad0334509 Author: Adam Dickmeiss Date: Tue May 23 19:09:13 2006 +0000 Use docbook to man script wrapper commit 2b443dfd9c08a753c3e3e3f85b49aedac28c6bd9 Author: Adam Dickmeiss Date: Tue May 23 14:07:49 2006 +0000 No longer require GNU make. Update list of dependency ports commit aecf826f8ee83290a18c2c1415b55a46093c1a45 Author: Adam Dickmeiss Date: Tue May 23 13:43:40 2006 +0000 Fixed bug #592: CVS version of YAZ require gnu make. commit a1adc770bc8b74097e1d4388d16b1246063da7e7 Author: Adam Dickmeiss Date: Tue May 23 13:17:30 2006 +0000 Fixed bug #593: Buffers too small for MARC string buffers. commit 1a1922019030ff181fbe08491cf1760dca8d1686 Author: Marc Cromme Date: Tue May 23 10:05:28 2006 +0000 added YAZ to config output commit 277f94b778fbd0c608afb3efa9914aae6990aaf0 Author: Adam Dickmeiss Date: Tue May 23 09:54:12 2006 +0000 CVS build on FreeBSD fixes: libtool, show info about packages needed to build from commit 00abdd969f52b04d5d53e4645c30596f4040060b Author: Mike Taylor Date: Tue May 23 09:43:37 2006 +0000 Comment typo commit f230abfaa62e6a2a56ae17f1a531c55ba2973b92 Author: Marc Cromme Date: Tue May 23 09:40:43 2006 +0000 added configuration display and instructions commit 51755f9b44a6ab87089c169cb7c64b240833a909 Author: Adam Dickmeiss Date: Tue May 23 09:13:50 2006 +0000 Added check for tclsh programs commit 9f5de9011e59569e0bae5b484defe53bda38a457 Author: Adam Dickmeiss Date: Mon May 22 19:08:38 2006 +0000 Fix execution of tclsh. commit 057984051852854ce4125491a5acd2c54baa01e2 Author: Mike Taylor Date: Mon May 22 15:52:40 2006 +0000 Typo in comment commit 3f623df63496cd285de7cfb47b1bf902ac114fbd Author: Mike Taylor Date: Mon May 22 15:16:59 2006 +0000 Use FreeBSD's tclsh8.4 if it exists commit 243dcdc032523016724ee50765a8a58e9d808209 Author: Mike Taylor Date: Mon May 22 15:15:26 2006 +0000 Remind BSD users to use gmake rather than make. commit 2d247ac3b6ac4a8422e3260c3891ee1374a41c0a Author: Mike Taylor Date: Mon May 22 12:11:45 2006 +0000 Detect FreeBSD, where all the auto* tools are screwed up, and make appropriate allowances for it. *sigh* commit 95d8bd04e10519a635972a24176270ef4dbe8d2c Author: Mike Taylor Date: Wed May 17 14:12:09 2006 +0000 Fix mistake: fuzzy matching is 5=103, not 5=102 Add truncation.regexp, 5=102 commit 37287b6049ca23d7fa8e84f532eefa7e35f66520 Author: Adam Dickmeiss Date: Tue May 16 11:29:45 2006 +0000 YAZ RPM require libxslt commit 5a0004a1d8cdf8258c8b823d9026939411d2238f Author: Adam Dickmeiss Date: Sun May 14 20:03:19 2006 +0000 Removed a few yaz_log calls commit ba7e55ba0b21f2ead3ca112cc4fe9f94a80fb06a Author: Sebastian Hammer Date: Sat May 13 03:56:31 2006 +0000 Call 'present' backend function (when present) from process_searchResponse when piggybacking is in effect. Several SimpleServer gateways assume this, and I believe it's a mistake that it hasn't been called before. commit 548d17fb92d2efaa1ef637b56fcec09a7261e842 Author: Heikki Levanto Date: Wed May 10 13:58:46 2006 +0000 Higher-level interfaces, fixing the bugs these uncovered. Better defined return codes, doxygen comments, etc. commit 821e247a6d064e29703c74b21f755baaf4cc1e6e Author: Heikki Levanto Date: Wed May 10 12:52:17 2006 +0000 Added a way to get the verbosity to test programs commit 7e318eefe6a4dd4906261feb766cae881352ba07 Author: Adam Dickmeiss Date: Wed May 10 07:34:38 2006 +0000 Introduce a hash-table for the ZOOM C record caching system; makes things faster if a large number of records is fetched. commit 922617826ecc28cbdcbc5e6d5037843c7985a408 Author: Adam Dickmeiss Date: Tue May 9 21:37:02 2006 +0000 Finish Latin-1 to MARC-8 conversion handling. commit b4121b5416890fc21c34c762493161382e30a756 Author: Mike Taylor Date: Tue May 9 16:13:28 2006 +0000 Temporary fix for ZOOM_resultset_record()'s force_sync. commit 5008c98db7e9ca6291347b6ecddb946aff92d0fe Author: Adam Dickmeiss Date: Tue May 9 13:39:46 2006 +0000 Fixes for retrieval handling in SRU mode.. The "virtual" record syntax was not seen as XML , and, hence, there could be strange matches. Changed configuration format: schema and backendschema renamed to name and backendname respectively. commit 8489ef773c3c744b841f9b247dd9881bc3742473 Author: Adam Dickmeiss Date: Tue May 9 11:35:28 2006 +0000 Use OID_STR_MAX for size of oid dot string commit 7d849f69c1386fbeb27eefcc60b8d0ffbdd5218c Author: Mike Taylor Date: Tue May 9 11:09:09 2006 +0000 Render OID as string when used in error-messages. -- was type-mismatch of printf("%s", oid) commit 65f297c24c59e95f860f29928d3588c5dc98ba4c Author: Adam Dickmeiss Date: Mon May 8 19:48:26 2006 +0000 Change return values for yaz_retrieval_request a bit and improve diagnostics in the case where retrieval match fails. commit 750bc4f7094d6de74c64cfd028d66ae1261be1d1 Author: Adam Dickmeiss Date: Mon May 8 19:45:29 2006 +0000 Define max length of OID dot string: OID_STR_MAX. commit bb832e89b91e9e5fdac2e5e3ec577b903ed284cd Author: Adam Dickmeiss Date: Mon May 8 19:44:18 2006 +0000 Enable any element set and grs-1 in sample commit 5e758b60195c4115994972066dbeed7529a83cc9 Author: Sebastian Hammer Date: Mon May 8 16:58:25 2006 +0000 Calling exsltRegisterAll instead of exsltDynRegister commit fe75bce77d280de03589a9bca7e40f3c0ef79817 Author: Adam Dickmeiss Date: Mon May 8 12:20:48 2006 +0000 Using macros YAZ_LIBXML2, YAZ_LIBXSLT, YAZ_LIBEXSLT commit 62cdf9134790da1c26687d687b90528e477c07d5 Author: Adam Dickmeiss Date: Mon May 8 11:58:37 2006 +0000 Changed behavior of yaz_retrieval_request so that no rules, i.e. no retrieval elements, results in "success" (return value of 0). commit dbf7b94dbfd143f38e7e24132eca144474a65bfa Author: Adam Dickmeiss Date: Mon May 8 11:50:57 2006 +0000 Avoid using "pkg-config libxslt" on systems that don't report cflags which include libxml2. This is the case for Debian woody. For a system like that revert to xslt-config. commit 0b20fc2dcafe8d56501a3b34626b3174c60eefb5 Author: Adam Dickmeiss Date: Mon May 8 10:16:46 2006 +0000 LibEXSLT support. New configure option --with-exslt. commit 96a07bee0a27a24ba02657132fbe702f6c7beb5d Author: Adam Dickmeiss Date: Sun May 7 20:57:26 2006 +0000 Rename current_global_list to default_completer_list and localize it commit e67ac76103683fca15a5961b81068b3eb92bb9cd Author: Adam Dickmeiss Date: Sun May 7 20:32:56 2006 +0000 use strcmp instead of stricmp for -install,-remove options commit 248491b25960ff7c08860dd0065f7e04cc550e90 Author: Adam Dickmeiss Date: Sun May 7 19:43:00 2006 +0000 Rename curret_global_list to current_global_list; reformat. No code changes commit 16d6519a78fe4917ec865a7d084672579ab317ae Author: Adam Dickmeiss Date: Sun May 7 19:38:58 2006 +0000 tabcomplete only if readline is in use (second attempt) commit 60f5103f542e3f6dd2e22b6df7015f7bc4b3a937 Author: Adam Dickmeiss Date: Sun May 7 19:37:23 2006 +0000 tabcomplete only if readline is in use commit 5f9ae0e96f731be9abf8bc2eca538681fbd0279f Author: Adam Dickmeiss Date: Sun May 7 19:15:16 2006 +0000 Do nothing in command_generator if no readline is present commit 310bcbad07ab48568d6f82176241ba304192a43d Author: Adam Dickmeiss Date: Sun May 7 19:13:55 2006 +0000 Do nothing in cmd_register_tab if no readline is present commit df8e6c1a312cfc928aede6fc5eb0efa39364cfa6 Author: Adam Dickmeiss Date: Sun May 7 19:07:10 2006 +0000 Replace a few strdup/free with xstrdup/xfree commit e7004bad189b432530d20465b7b89c7777fd5645 Author: Adam Dickmeiss Date: Sun May 7 18:35:47 2006 +0000 Use strchr instead of index (which was only standard in 4.3 BSD). commit 34841706b5b43761ba4a3f3c6b0fd667b775654e Author: Adam Dickmeiss Date: Sun May 7 18:26:25 2006 +0000 Reformat comments for Doxygen commit 27481680fb1a69456e789e5bc8e1ec914337287d Author: Adam Dickmeiss Date: Sun May 7 17:45:41 2006 +0000 Added more tests for retrieval/record_conv system. For retrieval, fixed error handling which occurred in the case where syntax attribute was missing from retrieval element. Libxml2/libxslt errors may be sent to yaz_log via new utility libxml2_error_to_yazlog. commit 783d4b3820a54d9079499a4b09ad4b98b709dbde Author: Adam Dickmeiss Date: Sun May 7 17:43:42 2006 +0000 Added retrieval + libxml2_error commit d305f63028800611fd05a3bfc54db24e2634d7ad Author: Adam Dickmeiss Date: Sun May 7 14:48:24 2006 +0000 Added retrieval handling support in Generic Frontend Server to support conversion between MARC/XML as well as XSLTtransforms. See etc/yazgfs.xml for an example. commit a1c7e0185783d67c7d6022ae7d70dd890b7c0309 Author: Adam Dickmeiss Date: Sun May 7 14:31:30 2006 +0000 Initialize username and password in yaz_srw_codec. commit af895ebea6200bb5a752ae312b83a6f78edfad08 Author: Sebastian Hammer Date: Sat May 6 00:52:15 2006 +0000 Removed diagnostic output that shouldn't have been checked in. commit 0458d3cea29ddea65b66f7529590c21ac198bc0f Author: Sebastian Hammer Date: Sat May 6 00:51:04 2006 +0000 Addition of authentication parameters commit 9a931f88892b2d8be796bfafa07e430307b7c5f6 Author: Sebastian Hammer Date: Fri May 5 20:02:22 2006 +0000 Supporting Username/password in SRU server mode, either through x-username/x-password SRU parameters, or through Basic HTTP authentication. commit 0de95154d8512ee46d6b706fe019f8d1ffc18827 Author: Adam Dickmeiss Date: Fri May 5 18:37:08 2006 +0000 Implement yaz_retrieval_configure. commit c43225b3038c3fa459ac60202abf35183ad4f923 Author: Heikki Levanto Date: Fri May 5 14:04:03 2006 +0000 Removed a debug print I had forgotten in commit 065092597b2e0234d65b25b31930cbe98ec59738 Author: Heikki Levanto Date: Fri May 5 14:02:27 2006 +0000 Range converter for actually converting character ranges Fixed a nasty off-by-one in the endpoints of backrefs. Added tests for them. commit 440f23de23b0c2bce38451617cd69eb106b5c2df Author: Heikki Levanto Date: Fri May 5 09:14:42 2006 +0000 Fixed the interface to match, merged with Adam's whitespace patch, First converters work commit 76b209145568a179bb21a8d43db003ffe605b6d5 Author: Adam Dickmeiss Date: Thu May 4 20:00:45 2006 +0000 First code bits of record retrieval code commit 2ca607a50dd3ebdb0b05ce6cc1df66caa78eb544 Author: Adam Dickmeiss Date: Thu May 4 19:59:11 2006 +0000 Predefine HAVE_XSLT, HAVE_XML2 for Doxygen commit 2af6f28e5d261fa873d96611a10c56fc76681685 Author: Adam Dickmeiss Date: Thu May 4 18:58:54 2006 +0000 Reformat with a little more spacing (no code changes) commit 68175726e7a40ecd8bd16e63605b2196fbeffb9e Author: Adam Dickmeiss Date: Thu May 4 18:58:24 2006 +0000 Fixed one doxygen warning commit c55803155b03efbc55974dd5d6655f8f688e2098 Author: Adam Dickmeiss Date: Thu May 4 18:22:59 2006 +0000 Ensure tst_record_conv.c may include config.h commit 6db6a25098ef14e638db1e185330e2ba5b75e631 Author: Adam Dickmeiss Date: Thu May 4 15:31:04 2006 +0000 Make things compile --without-xslt commit b77f4b5c2b191b83cf3f213faa8b6b263e36fea4 Author: Heikki Levanto Date: Wed May 3 13:47:35 2006 +0000 The NFA seems to work now (as far as I can see). Still needs to do the output side of it. commit e26f2eaefc5fae6784beb45a1435a4fbfa25f25c Author: Adam Dickmeiss Date: Wed May 3 13:38:12 2006 +0000 Update Windows installation for libxslt enabling. commit 4be8e145d9cedeeedba4c03ec9b4caeb9e0488de Author: Adam Dickmeiss Date: Wed May 3 13:31:53 2006 +0000 Fix makefile. Added record_conv.c commit fdd2ce97843169097e9d808c78d8740d6c0d1cca Author: Adam Dickmeiss Date: Wed May 3 13:27:20 2006 +0000 libxslt part of windows build commit e70cbdfde382dd605d58fc112cc2458cfce37382 Author: Adam Dickmeiss Date: Wed May 3 13:04:46 2006 +0000 Record conversion utility (yaz_record_conv_t) supports marc and XSLT conversions. commit 6e30ece4502a0c2c875be511d2ec051598292133 Author: Adam Dickmeiss Date: Wed May 3 13:01:04 2006 +0000 Prepare test for latin-1 -> utf-8 with combo chars commit fc72f24cd9b585c819c6678befa7fffc829e9054 Author: Mike Taylor Date: Wed May 3 12:09:30 2006 +0000 Ignore generated "nfatest1" commit fd3508c19a217ebd059552cc301c76d203d03524 Author: Adam Dickmeiss Date: Wed May 3 12:02:23 2006 +0000 YAZ optionally uses libxslt. Check for xml2 obsoleted because libxslt includes it. commit ab2df1c8677d1403c766eb4dc7b9e699c7db1329 Author: Mike Taylor Date: Wed May 3 11:36:14 2006 +0000 Avoid mixed stmt/dcl commit 2b8a6e970b5ed4182a67d423ba4ba5dc74ffc6bb Author: Heikki Levanto Date: Wed May 3 11:09:59 2006 +0000 Added nfa.h to makefile.am. Work continues on the nfa commit 4d994a119a1949522fe229270983ba1b1b399c6a Author: Heikki Levanto Date: Wed May 3 09:04:33 2006 +0000 Added my new NFA character normalizer. Not yet ready, but want to have it in the cvs already now. commit a0e27aac0589d493172c73f6660b844fc6460d7c Author: Adam Dickmeiss Date: Tue May 2 20:47:45 2006 +0000 Added nmem_text_node_cdata which takes xmlNode CDATA content and creates NMEM string. Added first parts of record conversion utility (yaz_record_conv_t). commit 6fda497bc3df847077e0d72f487c2251df522715 Author: Adam Dickmeiss Date: Tue May 2 12:11:08 2006 +0000 Fixed Doxygen comments commit b2a7266c8dec5c194057670e0591b9d2cdbd3591 Author: Adam Dickmeiss Date: Sun Apr 30 07:23:08 2006 +0000 Dont use /YX commit a17a363a19bd13793c0d40dafa5a51eabf073513 Author: Adam Dickmeiss Date: Sun Apr 30 06:50:09 2006 +0000 Cosmetic fix commit b3b8edd6b3ce48471e5ed6b6870a065b2c172b5e Author: Marc Cromme Date: Thu Apr 27 20:08:49 2006 +0000 bumped yaz number to 2.1.19-1 the resting places commit 199ffcf6f817974587a9d5bcf8066531ed0f45ad Author: Adam Dickmeiss Date: Thu Apr 27 08:39:05 2006 +0000 Always include sys/stat.h commit 228ac8e67af8286708bf4ef65622e3d742272d61 Author: Heikki Levanto Date: Wed Apr 26 16:58:27 2006 +0000 Simplified outout to keep it on one line, even when verbose commit e4060b606fade264168221db5e3782d321f6918a Author: Adam Dickmeiss Date: Wed Apr 26 10:01:31 2006 +0000 More comments on path.{c,h} functions commit 68db5d6050f959bd126eec404447019b6176d2a1 Author: Adam Dickmeiss Date: Wed Apr 26 09:40:42 2006 +0000 Bump version to 2.1.19. Added function yaz_filepath_resolve. commit 23403c6f31b26b0e819a47980c42f3fc8c57d84d Author: Marc Cromme Date: Tue Apr 25 11:25:08 2006 +0000 reverting to sgml mode commit 711f37334de1dde9fee4dfdee2e9263f42373494 Author: Adam Dickmeiss Date: Mon Apr 24 23:21:25 2006 +0000 Added support for a new character set MARC8s identical to MARC8 except that it converts combined characters to single Unicode characters in the Latin-1 range (when possible). commit 6ac8148711c38d7c2a6c745d7c5cdb4086e052f9 Author: Marc Cromme Date: Mon Apr 24 12:54:08 2006 +0000 insered Emacs nxml-mode in bottom of XML files commit f0fff840ae259cab0b1c17297c4367172a7cd229 Author: Marc Cromme Date: Mon Apr 24 12:41:00 2006 +0000 corrected DOCTYPE header and called emacs nxml-mode instead of sgml-mode in bottom of files commit ef696802e6afb3df60b27070a432a48f064dc777 Author: Adam Dickmeiss Date: Mon Apr 24 12:12:24 2006 +0000 Fix a couple of URL entities commit 16ee7ff60aee87829916837bcb2a200ce72870d9 Author: Adam Dickmeiss Date: Mon Apr 24 10:30:44 2006 +0000 Cast to long commit 66d2b0af37de24e74184794825e08c540eac66c1 Author: Adam Dickmeiss Date: Mon Apr 24 09:35:10 2006 +0000 /usr/share/yaz in libyaz-devel package commit ffb747f54b057aa5c1e0f881c66296f7b2c4a2bc Author: Adam Dickmeiss Date: Mon Apr 24 09:26:10 2006 +0000 Ignore dox directory commit 6c0db91b0e046d33e2072ab007a7e31748aa90c6 Author: Adam Dickmeiss Date: Mon Apr 24 09:24:59 2006 +0000 Update release date commit 4641562b204d07a8fca9e1fa94c86593766fa165 Author: Adam Dickmeiss Date: Mon Apr 24 09:21:35 2006 +0000 Use URL entities for most link references commit 40db0160985e6d6269c005f15865421f681b0e3a Author: Adam Dickmeiss Date: Fri Apr 21 14:24:53 2006 +0000 Debian package changes: moved yaz.7 from libyaz to libyaz-dev; moved man page lists to .manpages files. commit 169c8b924e05c97b2128180cd7854ab8e513fe29 Author: Adam Dickmeiss Date: Fri Apr 21 13:50:26 2006 +0000 Back to Debian package libyaz (from libyaz2 experiment) commit b8fe093a9e425da79f7369d0a33dbaa9d1849698 Author: Marc Cromme Date: Fri Apr 21 13:02:47 2006 +0000 removed unnecessary misc:Depends commit 0b3c4bfa5acbf82ad95fb7041c3c3c29b350553a Author: Adam Dickmeiss Date: Fri Apr 21 12:54:52 2006 +0000 buildconf.sh adds GCC option -Wdeclaration-after-statement commit 3a7b7e75cb734e2edf9ef1469e9f554aad761fc0 Author: Marc Cromme Date: Fri Apr 21 12:54:36 2006 +0000 Debian package upgrade to follow policy 3.6.2 and renamed libjaz to libyaz2. Virtual package libyaz created for transition period. Lib API number bumped to 2.1.0 commit a9ad05863969a9803a709f264db875bee3faa67b Author: Adam Dickmeiss Date: Fri Apr 21 12:40:56 2006 +0000 Added comment about dh_makeshlibs in debian/rules commit 3180ed0f5c4e4a4de3be282ae3bf10adb0eb7c57 Author: Adam Dickmeiss Date: Fri Apr 21 10:30:14 2006 +0000 Revert last change commit d57ade59211707b9bcfacc61039e446c9fa3f36f Author: Adam Dickmeiss Date: Fri Apr 21 10:28:06 2006 +0000 Added several type casts due to no portable way of doing printf of a size_t variable. commit 3897c9638ab22fb5374307f63d6403c0ed754a43 Author: Adam Dickmeiss Date: Fri Apr 21 08:57:29 2006 +0000 Added common directory to be part of yaz-doc commit 8e555f1ff74875281e3c42635636bc4125d4cf4f Author: Adam Dickmeiss Date: Fri Apr 21 08:53:56 2006 +0000 API version 2.1.17 commit abd3118d2280ffe01b4ff3a7b36428b7b5c91827 Author: Adam Dickmeiss Date: Thu Apr 20 20:50:51 2006 +0000 More Doxygen stuff; for auto-generated code too commit d02fa05385c5bc77f4faafd2117bdba699e15cbf Author: Adam Dickmeiss Date: Thu Apr 20 20:45:38 2006 +0000 Remove Doxyfile. There is already another one in root dir of YAZ commit e26a0bc5ba4e66ca15bc2863b545e7d6b7d9752e Author: Adam Dickmeiss Date: Thu Apr 20 20:35:02 2006 +0000 Exteded yaz_marc_write_marcxhange new parameters, format and type. More Doxygen comments. commit 98128a8684aa2474140872c25e8c2f5a231710b1 Author: Adam Dickmeiss Date: Thu Apr 20 19:47:01 2006 +0000 Added utility yaz_marc_modify_leader which modifies a one or more characters in a MARC leader. Function yaz_write_marcxml and output mode YAZ_MARC_MARCXML sets leader byte at pos = 'a'. Actually this is not new (YAZ 2.1.16 did that too, but it was done differently). commit fc270c4515cd42f6bd7f749355464a9498badfe5 Author: Adam Dickmeiss Date: Thu Apr 20 13:46:55 2006 +0000 Fix path to id.png in copy commit 51d0b65c7d4af16f74f05638e242095ec09c7b80 Author: Adam Dickmeiss Date: Thu Apr 20 13:45:20 2006 +0000 Simplify file specs for devel+doc by using File /r. commit cb6a871ae1cac404bd751006a0ff03977f25504a Author: Adam Dickmeiss Date: Thu Apr 20 13:04:16 2006 +0000 Added common to SUBDIRS commit d79fc07b26da0378e2c036911fe1491fc3500a09 Author: Adam Dickmeiss Date: Thu Apr 20 11:56:20 2006 +0000 Updated to use doc/common (id-docbook-common) commit cf8a38eb0fc8063fbebbf3b3a0e37b900b8d6d38 Author: Adam Dickmeiss Date: Thu Apr 20 08:43:23 2006 +0000 Remove 2.1.17 from this commit 947cec98f066b45753b9fcc4da251659935900e1 Author: Marc Cromme Date: Thu Apr 20 08:38:01 2006 +0000 bumped version number to 2.1.18 commit 4d97c382557ea886ef39bb49a4f8dcbbf413881d Author: Adam Dickmeiss Date: Thu Apr 20 08:25:12 2006 +0000 ASN.1 compiler 0.4: generates brief Doxygen file header for generated .h/.c files. commit 02f53ef3b0ec345dd5288aa0b1acbaf0b4b5f322 Author: Marc Cromme Date: Thu Apr 20 08:24:54 2006 +0000 bumped number to 2.1.17 commit 60695a8a76312b7a2efd29ccbdf1b4313e6c4665 Author: Adam Dickmeiss Date: Thu Apr 20 08:24:31 2006 +0000 Let all .asn depend on yaz-asncomp commit 84d030a65b7a0fa2e2179b51c38d365af3ec245a Author: Marc Cromme Date: Thu Apr 20 08:04:13 2006 +0000 bumped version to 2.1.17-1 commit ca738bbdd47372785611f6e590e6500b76a34f2c Author: Adam Dickmeiss Date: Thu Apr 20 00:01:01 2006 +0000 Fixed bug in yaz_srw_get: case Z_SRW_scan_response missed a break. commit 8c7193a29c122745f3e4fb831cb3d62e4ef316d9 Author: Adam Dickmeiss Date: Wed Apr 19 23:49:50 2006 +0000 Updated for MARC-8 conversion commit 1069eaf4dbf89cdb270d26373f644e00e343d9ac Author: Adam Dickmeiss Date: Wed Apr 19 23:48:06 2006 +0000 Added another safe cast to prevent warning commit 4223ca41705363f737a55a6cda1ec383f6c421c9 Author: Adam Dickmeiss Date: Wed Apr 19 23:46:15 2006 +0000 Added safe cast to prevent warning commit 8626b7019b5d3d9c9594f20025e97d06a2d590fc Author: Adam Dickmeiss Date: Wed Apr 19 23:15:39 2006 +0000 Implemented yaz_iconv to support conversion to MARC-8 commit 39d32c922161800240dfcfb2b833e55872dfb2ee Author: Adam Dickmeiss Date: Wed Apr 19 11:00:26 2006 +0000 Missed this file commit 626ee9b09c95c3585c432623c042872b0d1fea92 Author: Adam Dickmeiss Date: Wed Apr 19 10:05:02 2006 +0000 New facilities for the MARC module. The reading - and writing of content are separate methods for the yaz_marc_t handle. The following read functions are available: yaz_marc_read_iso2709 (Reads MARC in ISO2709 format), yaz_marc_read_xml (reads MARC in MARCXML/MarcXchange format). Write functions have prefix yaz_marc_write_.. The existing utilities yaz_marc_decode_wrbuf and yaz_marc_decode_buf are still available. Removed support for OAI-MARC and simplexml (not the simplexml from PHP5). commit 78322aa6cb73f75c5772bd58c59fffef52597991 Author: Adam Dickmeiss Date: Wed Apr 19 09:05:09 2006 +0000 Better usage info commit a1f888c8d35ebce2c0b3a6be4e7dc4f7d9dfcf63 Author: Adam Dickmeiss Date: Mon Apr 17 07:40:15 2006 +0000 For decoding of OIDs, do more sanity checks , so that we don't end up in a situation where an OID can be decoded but not encoded. commit c19bca6828eadf24bb302e46d5de16691f0e26b2 Author: Adam Dickmeiss Date: Wed Apr 12 18:25:21 2006 +0000 Spellfix for VirtualHost examle commit 89929f93f8e83456495d777df76e48cd8c53c265 Author: Adam Dickmeiss Date: Fri Apr 7 11:27:24 2006 +0000 Added a new ZOOM event type ZOOM_EVENT_END which signals no more events to be returned for this connection. commit d281d88f97474092424163d82863b382b75596da Author: Mike Taylor Date: Wed Apr 5 12:05:36 2006 +0000 RPN buffer bumped from 512 chars to 5120. commit e9db3cf52b6df66badd97391a51e85f9c78a8c91 Author: Mike Taylor Date: Wed Apr 5 12:04:51 2006 +0000 Report SRU diagnostic 12 (too many chars in query) when rendering the compiled CQL query out into PQF tries to overrun the supplied buffer. Fixes a bug that was mystifying while we put the Alvis demo together. commit dedca4515134eb33b9e09f824a4c5dc976b36820 Author: Mike Taylor Date: Wed Apr 5 11:55:46 2006 +0000 Ignore generated tstpquery commit 65e57b77a51d4b03e6ab7a41bcc11e8e8be62e83 Author: Adam Dickmeiss Date: Sat Apr 1 11:47:41 2006 +0000 More PQF parser tests commit a7c0fe1d8d8d89204f5c25a72d556d3d67b32d35 Author: Adam Dickmeiss Date: Sat Apr 1 11:45:23 2006 +0000 Fixed 523: PQF parser does not properly diagnose @prox syntax errors. Added a few PQF parser diagnostics to improve error messages. Catch terms that aren't unsigned ints.. E.g. the invalid @attr p=q x . commit 0e1ac7200aeba08e2debbe83c951f1b47d1ef92e Author: Adam Dickmeiss Date: Sat Apr 1 07:21:12 2006 +0000 Fixed bug #558: present request out of range with presentChunk/step commit 4fac21e6986b91107dfe616fa944613e3577c8c9 Author: Adam Dickmeiss Date: Fri Mar 31 12:49:37 2006 +0000 2.1.17 commit 273b74fc2b199e9450a55b433df9b592b9fb4014 Author: Adam Dickmeiss Date: Fri Mar 31 09:55:01 2006 +0000 Towards 2.1.16 commit 4d43733b72afb2c042c06d1b91244b7b98bb3c86 Author: Adam Dickmeiss Date: Fri Mar 31 09:54:48 2006 +0000 2006 commit 2c44707f5748b152795560cb9551c4211394a8ef Author: Adam Dickmeiss Date: Fri Mar 31 09:51:21 2006 +0000 Allow multiple languages and charsets to be specified with yaz-client. Each item must be separated by comma (NO BLANKS). E.g. negcharset iso-8859-1,utf-8 Added az_set_proposal_charneg_list. commit d8b577d9635dccf489ddb3955c795fb1f754fad3 Author: Adam Dickmeiss Date: Thu Mar 30 16:30:25 2006 +0000 yaz.m4 moved to sub directory m4 commit cf139020e5158b2a6ab6ba7cfb04df3d85c74f4b Author: Adam Dickmeiss Date: Thu Mar 30 14:15:20 2006 +0000 Add YAZ_EXPORT yaz_opac_decode_wrbuf commit 09a0b5531c9286b7179625ce5f32009b2f27b8d5 Author: Adam Dickmeiss Date: Thu Mar 30 07:45:42 2006 +0000 Depends on libreadline5-dev commit c25a08abd4f2772ad2c5c8bc45de7f62d4e1978e Author: Adam Dickmeiss Date: Thu Mar 30 07:36:06 2006 +0000 More NEWS commit b761f6f993380802f05f44cd1b93b024ace20408 Author: Mike Taylor Date: Wed Mar 29 15:26:01 2006 +0000 CQL prox support. commit a43c354f46cc04bbf2168eb74b38e13c81c0b036 Author: Mike Taylor Date: Wed Mar 29 14:47:07 2006 +0000 Better rule for "fuzzy" commit f332061f06e2608957f71dd6a9acc0b67d45fc7d Author: Adam Dickmeiss Date: Tue Mar 28 16:53:56 2006 +0000 Require autoconf 2.59 or later. Extra m4 quoting commit 161e692d76b0cdb7184543c08b6619015a8423de Author: Adam Dickmeiss Date: Tue Mar 28 16:43:36 2006 +0000 Fix maintainer line commit dacd04afe05197b737e60c828c89c579d1b4b3cc Author: Adam Dickmeiss Date: Tue Mar 28 16:42:04 2006 +0000 Using config auxdir config. commit ba1c8ffb28b52f69e23cd1b199c6f235a3c1631d Author: Adam Dickmeiss Date: Tue Mar 28 16:36:35 2006 +0000 Move to automake1.8/1.9 commit 85b3adb824174e27a0e845ff67bed9f05233edff Author: Adam Dickmeiss Date: Mon Mar 27 09:57:18 2006 +0000 More news commit e17f83e1e6f332965035d74ba7ca7805fa5b5a41 Author: Marc Cromme Date: Sun Mar 26 21:00:09 2006 +0000 java script mime type added to the list of allowed mime types to be served by YAZ http server commit e461d6ab93b9d8af976e45d5cdc4491dbd58c4bb Author: Adam Dickmeiss Date: Sat Mar 25 14:42:16 2006 +0000 More testing for bug #537 commit f496a93d2049e6127b05260915f506d065588e1b Author: Adam Dickmeiss Date: Sat Mar 25 14:41:53 2006 +0000 Fixed bug #537: marc-8 -> iso-8859-1 konvertering fails for some sequences. commit 045b45e1cf3070d4eb6a95ec15686712449987c9 Author: Adam Dickmeiss Date: Fri Mar 24 13:58:43 2006 +0000 For yaz_log, allow special timeformat %! to display thread ID commit 10f391e000230e5a93c768f541a24a379809489e Author: Mike Taylor Date: Wed Mar 22 17:58:32 2006 +0000 Reinsert initialiser for __UNUSED_loglevel commit e38c23b29a89e9c4e1cd5aa9033015efc39b26c0 Author: Mike Taylor Date: Wed Mar 22 13:55:06 2006 +0000 Put __UNUSED_loglevel back into structure to maintain binary compatibility. commit 275991dfabd62de0128770c061c7f780716cc16e Author: Mike Taylor Date: Wed Mar 22 13:50:46 2006 +0000 Do not impose STAT_DEFAULT_LOG_LEVEL if the YAZ_LOG environment variable is set. Cleaner handling of logging options. commit 6b595f73431b4b38ec138ded59281632e0a1c47f Author: Mike Taylor Date: Wed Mar 22 13:38:17 2006 +0000 Removed loglevel from struct statserv_options_block -- it was only there as a hack from the days when yaz_log_init() was the only way to change any setting, and required all three to be set. commit 01d2e3a742a9ea1b083dccf68799dbf68b6e1236 Author: Adam Dickmeiss Date: Wed Mar 22 13:03:59 2006 +0000 Accept application/soap+xml as content-type for SOAP msg commit 3cbab3f245c712602c545780d13196a878e0346f Author: Adam Dickmeiss Date: Tue Mar 21 13:58:50 2006 +0000 Reestablish log_event_{start,end}. commit 41b946725f2c8d8617b3e4ece161cb9d99bfaa5c Author: Adam Dickmeiss Date: Tue Mar 21 12:54:02 2006 +0000 Remove log_event_{start,end}. Add function yaz_log_set_handler instead commit 56f715bb23c31ea1f8a551e7f1f9b58a10bafbad Author: Adam Dickmeiss Date: Tue Mar 21 12:32:16 2006 +0000 Allow Hook function to be tested (log_event_start) commit f1d7bbf6928a24c47f095193375e4c6046979521 Author: Adam Dickmeiss Date: Tue Mar 21 12:31:48 2006 +0000 Allow yaz_log logging to be disabled using yaz_log_init_file with fname == NULL. Output can be still be captured using log_event_start calls. Useful if YAZ is to be using foreign log facility.. commit b4fcff7bb8f63cf5d1c6871ecffd9c474fd57dda Author: Mike Taylor Date: Mon Mar 20 14:56:40 2006 +0000 Support for translating proximity nodes from CQL to PQF, including modifiers. commit 663d8cb7f0456d53b02d26f85dae90435a867c99 Author: Mike Taylor Date: Mon Mar 20 09:38:13 2006 +0000 Fix typo "libtools" (is now "libtool") commit fd9523b748576c5dabf640a18fcf3e95ced15dbd Author: Adam Dickmeiss Date: Thu Mar 16 12:30:03 2006 +0000 Ensure Bib-1 diagnostic is mapped to SRW diagnostic for bend_init commit b86de9339d429e755e5446fda4051f3685f67fda Author: Adam Dickmeiss Date: Thu Mar 16 08:55:28 2006 +0000 For GFS - SRU handling, empty stylesheet means no stylesheet ref commit e840ea4bc345c8cf0ffae4edc43ce5dfabedaa3e Author: Adam Dickmeiss Date: Thu Mar 16 08:36:29 2006 +0000 Bump to dev version 2.1.15 commit dfb47c5dc73f604e1b2704a4b4d9695b5e96a2f4 Author: Marc Cromme Date: Wed Mar 15 14:12:26 2006 +0000 removed superflous log message commit a6af2d19dddb0c2ef961d087d8ca0f2b3bda8f7a Author: Adam Dickmeiss Date: Wed Mar 15 13:32:05 2006 +0000 Added support for file access in GFS to facilitate static web pages, such XSL/CSS/HTML files. commit d4981d86af4a523288d1eadca634b83fad0f37e8 Author: Adam Dickmeiss Date: Tue Mar 14 09:04:07 2006 +0000 Towards 2.1.14 commit 4c6a8d0c5930e49e4937d3c3a60df7acb47c983a Author: Adam Dickmeiss Date: Tue Mar 14 08:58:56 2006 +0000 Towards 2.1.14 commit c2fcb51556930b5a360603e3cd3f08c8774c9cde Author: Adam Dickmeiss Date: Tue Mar 14 08:50:19 2006 +0000 Make bin/yazd.dll + lib/yazd.lib part of Development component. commit 1bc220ecf4e742f3ef70335a4217d9e72cca564f Author: Mike Taylor Date: Mon Mar 13 17:33:00 2006 +0000 YAZ_LOG environment variable. commit 1e8eb130ff83dedfb7382ca3e38651add9894662 Author: Adam Dickmeiss Date: Mon Mar 13 12:14:00 2006 +0000 Omit unnecessary warnings in ztest sample code. commit 27ea5a731ded352ca1b49970997be5fa570870b4 Author: Adam Dickmeiss Date: Mon Mar 13 11:59:27 2006 +0000 More informative GFS WRT Extended Services commit 1aa1abc04c0e2c40beb8b57f212b5150700b056d Author: Adam Dickmeiss Date: Mon Mar 13 10:48:14 2006 +0000 Survive in set_DatabaseNames if connection has not been connected. commit 8dde2679aeaae3fbe0cbee6c891ba07249245837 Author: Mike Taylor Date: Fri Mar 10 17:18:09 2006 +0000 Recognise the "always" configuration element. commit ca09c78fc8a550087b8f3469fd2c7842dea09a9b Author: Mike Taylor Date: Fri Mar 10 14:43:13 2006 +0000 Map structure and other attributes before indexes, so that index-specific structures can override defaults. So: structure.* = 4=1 index.dc.date = 1=date-modified 4=5 does the right thing. commit f1173ed21af445eeecf2acf2df3cbef7dfd61cf0 Author: Mike Taylor Date: Fri Mar 10 10:43:32 2006 +0000 Fix URL of SRU diagnostics list. (Yes, Ray has moved it. Thanks, Ray.) commit 3e598eec55e31da69d4ad2e15f3cb89b37d0b860 Author: Mike Taylor Date: Thu Mar 9 16:14:53 2006 +0000 Ignore yaz-xmlquery commit 732c1fae8404e9895941ffd173d0ad19fb4400e1 Author: Adam Dickmeiss Date: Mon Mar 6 08:11:41 2006 +0000 Null terminate a null-terminated string commit 00c29e543cad41be04da3c74c33cbe8f1f47d3b9 Author: Adam Dickmeiss Date: Thu Mar 2 09:38:41 2006 +0000 BNF for nested queries. commit 29ba0d3dcc93061615c53d8f22702646120338f2 Author: Adam Dickmeiss Date: Thu Mar 2 09:37:35 2006 +0000 Added sort extension commit 9dd857867cf2feb11ed3ae6f0c70db702629ec88 Author: Marc Cromme Date: Thu Mar 2 09:20:53 2006 +0000 added complex rewrite rules for multiple attribute combinations commit 1f3fe256d54ab81d998cd622abda89580cc0b3ff Author: Adam Dickmeiss Date: Wed Mar 1 23:24:24 2006 +0000 Added SRU-GET and SRU-POST support for ZOOM C. Option "sru" specifies which mode to use; one of "post", "get" or "soap" (SRW, default). commit 7816498d590a66569e6ca8d17e8a4a3723a36826 Author: Adam Dickmeiss Date: Wed Mar 1 22:33:06 2006 +0000 fix decode of resultSetTTL commit db0f3c6c74488592ae1ceb7267d41d9a23b9efc1 Author: Adam Dickmeiss Date: Mon Feb 27 21:31:33 2006 +0000 Fixed bug in GFS: bend_scan handler was not called when PQF-to-CQL conversion was enabled. commit c66f4dda30f7cb8b7d1c8503cc2eb75251187c3d Author: Marc Cromme Date: Fri Feb 24 14:07:23 2006 +0000 added some examples of XMLPQF to XMLPQF query rewrites look in the first comments of the stylesheet to see how it is run. probably this is the wrong place, but I checked it in here since I do not know of a better place. commit de11e6bdb853dce80abe2c1223fe490ae0b2ebd0 Author: Adam Dickmeiss Date: Thu Feb 23 13:15:43 2006 +0000 Fixed bug #488: tsticonv fails on Solaris with Sun C compiler. We no longer use a negative value in yaz_iconv_trie_dir.ptr member for a "null" pointer. Instead integer 0 is used and actual ptrs have an offset +1. commit a62320ec94a88d58e808511ed8ec4259974b4f95 Author: Adam Dickmeiss Date: Thu Feb 23 13:09:54 2006 +0000 Dont return value in void function commit e637973203a49a536a12a78ec9c8af55b7669fc6 Author: Adam Dickmeiss Date: Thu Feb 23 11:17:25 2006 +0000 For XML query structure, use 'operator' instead of 'binary'. For top-level of query, use .. rather than .. due to XML schemas and other unpleasant things. commit 20ba81cb8fa43d1a3837a9f3cb657384cef83a23 Author: Adam Dickmeiss Date: Thu Feb 23 11:16:22 2006 +0000 Removed redundant check commit f403b05509aac2b9da65ecb9397d9452bd3a3aab Author: Adam Dickmeiss Date: Thu Feb 23 10:40:59 2006 +0000 Added utility program yaz-xmlquery. commit 7a577f9c983bf42b294d8f1042e3ad0b4d588ba7 Author: Adam Dickmeiss Date: Wed Feb 22 19:53:02 2006 +0000 Update commit ebdd1051e91791160a961a884a02de1ed718900b Author: Adam Dickmeiss Date: Wed Feb 22 19:48:53 2006 +0000 Added a test case which exposes UTF-8 conversion bug. commit 6671d1583ced9613ab7f12bfed69fd70fd9e6b15 Author: Adam Dickmeiss Date: Sun Feb 19 18:44:23 2006 +0000 Implement yaz_xml2query. commit 78786494a1fd16e59db481444e042737cabd5cd1 Author: Adam Dickmeiss Date: Sun Feb 19 18:37:20 2006 +0000 Make ztest_explain non-static commit c1787052301876848e3b9ddd124c513de00919f7 Author: Adam Dickmeiss Date: Sun Feb 19 18:36:10 2006 +0000 Using odr_create_Odr_oct commit 4580363540605bea68d5b63de38b480d3d44ca81 Author: Adam Dickmeiss Date: Sun Feb 19 18:34:13 2006 +0000 More proper initialization ot union .. Not that it makes a difference commit 28b489257f5f5b9263659a83a4df0ad2c61428c4 Author: Adam Dickmeiss Date: Sun Feb 19 18:33:08 2006 +0000 Implemented utility odr_create_Odr_oct to create Odr_oct struct with content commit 094c2fc453eec688746dabf2e89ec9e197a6fd61 Author: Adam Dickmeiss Date: Fri Feb 10 12:45:39 2006 +0000 Fixed UTF-8 reading (for 3 byte sequences). commit 419a8eb0b2069682320ebab4868a3aac791731c3 Author: Adam Dickmeiss Date: Thu Feb 9 12:36:18 2006 +0000 For VS, use option /EHsc instead of /GX (deprecated) commit 421a6cab3464893ae0e28d929608b993912e0278 Author: Adam Dickmeiss Date: Fri Feb 3 10:44:57 2006 +0000 Added a few harmless casts . (famous last words) commit 7e156f9a105b894b600c78d0b0a55224ae9b9793 Author: Mike Taylor Date: Thu Feb 2 18:27:02 2006 +0000 Ignore generated file "tstxmlquery". commit 465343e3b3f2cd797e018b26df19c91a39cbeccf Author: Adam Dickmeiss Date: Thu Feb 2 15:00:58 2006 +0000 Supply Term type as attribute in XML RPN representation. commit 2ee27a05e8656bcba988bd138314fece797df4a2 Author: Adam Dickmeiss Date: Thu Feb 2 13:14:58 2006 +0000 Program zoom-benchmark is not part of RPM,DEB package yet, so it is not yet installed in bin. Needs a man page too. commit 0c494663a9a07cf01455ffe3b75689b7fac35b3b Author: Adam Dickmeiss Date: Thu Feb 2 13:02:55 2006 +0000 2.1.13 commit ef37a4f4d009b879da200f74b6cf5a7a15ae0e53 Author: Adam Dickmeiss Date: Wed Feb 1 21:07:02 2006 +0000 Do not depend on docbook tools in Debian build. Depend on debhelper commit f3d01eac8cac49b98e6e3520ee5b5480b0a6d865 Author: Adam Dickmeiss Date: Wed Feb 1 20:31:00 2006 +0000 Put test stuff as part of Source Windows Package commit 1bbc43ce88a03e20f3ddf503ba27ef6703d91d9a Author: Adam Dickmeiss Date: Wed Feb 1 20:29:19 2006 +0000 Use size_t rather than int commit b2062c674a33f3c6c0e5752a18408a11718afc91 Author: Adam Dickmeiss Date: Wed Feb 1 20:28:44 2006 +0000 Dont return value in void function commit e1c8b365a609e61754e5e24e72958c5f69541c5f Author: Adam Dickmeiss Date: Wed Feb 1 20:20:25 2006 +0000 Build-depend on libreadline5-dev rather than libreadline4-dev commit 300533a2f4f573ca4b40697c19ae1af61607a6be Author: Adam Dickmeiss Date: Wed Feb 1 20:14:31 2006 +0000 Added test.obj+xmlquery.obj commit 60d46ba249746bdb74d1e66d8a4a5363f640026f Author: Adam Dickmeiss Date: Wed Feb 1 20:11:22 2006 +0000 Towards 2.0.12 commit 1e6937d4f15b51c3d7be9d5bc89cd7ac6ef5aa3e Author: Adam Dickmeiss Date: Wed Feb 1 20:07:20 2006 +0000 Update link to mailing list commit 18f4359afdbd92aed268cd188505107e8a9ba8f1 Author: Adam Dickmeiss Date: Wed Feb 1 19:59:44 2006 +0000 Describe two more important changes commit 049ba50c77db8f008546899e56c8124f68cd112d Author: Adam Dickmeiss Date: Wed Feb 1 19:53:00 2006 +0000 Fix test so that it passes without libxml2-dev commit 7a025b4322380d71b3b2abb1843fcbf622ff4b56 Author: Adam Dickmeiss Date: Tue Jan 31 11:01:26 2006 +0000 Avoid mixed/stmt var declare commit dcc6cbe2a1c328c1d59f7ff350e7cd9e8a3b5a85 Author: Adam Dickmeiss Date: Mon Jan 30 16:58:06 2006 +0000 Avoid mixed stmt/var declare commit 3086f0e19e38428814c7da92fcaf21eba2bc9a64 Author: Adam Dickmeiss Date: Mon Jan 30 14:02:06 2006 +0000 yaz_query2xml complete and tested commit b65713c219e3ce0181d04ea9d3518a85ca2c6807 Author: Adam Dickmeiss Date: Mon Jan 30 08:08:23 2006 +0000 Avoid mixed stmt/var declare commit 06ae818deffa84ec4bc1308051ef411845dd4ce5 Author: Adam Dickmeiss Date: Sun Jan 29 21:59:12 2006 +0000 Added YAZ_CHECK_TERM which terminates test program. Using yaz/test.h in most existing tests now. commit be1157fee3451c37508c9ec3b4b4b8603a646c0b Author: Adam Dickmeiss Date: Fri Jan 27 19:04:15 2006 +0000 Make sure this compiles even without Libxml2. commit f332636bbd13c0d1b17ce5be702422b9f8fe56dd Author: Adam Dickmeiss Date: Fri Jan 27 19:01:56 2006 +0000 Annotate commit 886c6715463eba74b37575caa5df206ee9b970b6 Author: Adam Dickmeiss Date: Fri Jan 27 18:58:57 2006 +0000 A little more flexible test unit commit bedf53c5f2d3e240608d27a71037777fada559d3 Author: Adam Dickmeiss Date: Fri Jan 27 17:33:15 2006 +0000 First use of unit test macros. commit d1191d5f31177b3e839b32e09b2e39ce60ee91a3 Author: Adam Dickmeiss Date: Fri Jan 27 17:31:52 2006 +0000 Added xmlquery.h,test.h in build commit f7aa6f63af514f24b106b8068f610e23f7a39832 Author: Adam Dickmeiss Date: Fri Jan 27 17:31:37 2006 +0000 Added xmlquery.c in build commit cf75a1bc424083953d4f29e38177f178821de55f Author: Adam Dickmeiss Date: Fri Jan 27 17:30:44 2006 +0000 Added a few simple test framework macros (to be used in YAZ tests). commit 50bf09dd2a048e48cdb605ea224a40e672415bce Author: Adam Dickmeiss Date: Fri Jan 27 17:28:16 2006 +0000 Added initial implementation for XML Query representation. commit 84d09d80523986d05d098ee1972c426792918a02 Author: Adam Dickmeiss Date: Thu Jan 26 15:37:05 2006 +0000 Avoid mixed stmt/var declare commit b3f2d89141871dddbee9fba4061ece9fb90abcf2 Author: Adam Dickmeiss Date: Fri Jan 20 15:30:24 2006 +0000 Try to cope with subfields in multi-byte encoding - such as UTF-8. commit 2c5d2e0851ef4adf500a62f0bd179c775f13b7be Author: Adam Dickmeiss Date: Fri Jan 20 14:44:55 2006 +0000 Prevent leading blank in output of yaz_rpnquery_to_wrbuf commit f97d979896de564f24c1e18ac111223afd2f40b3 Author: Adam Dickmeiss Date: Fri Jan 20 11:01:46 2006 +0000 Make wrbuf_put_zquery public commit 2cb1374ad9b888dcb3462ec15b977fbb3a97c7cf Author: Adam Dickmeiss Date: Fri Jan 20 10:34:50 2006 +0000 Separate the logging utilities for queries in two . The multi-line logging is defined in logrpn.{c,h} as before. The one-line - PQF - reparseable output in querytowrbuf.{c,h}. commit 118e971be7e959eac406b316d25c149c367a3391 Author: Adam Dickmeiss Date: Tue Jan 17 19:04:05 2006 +0000 Have yaz-ztest support pseudo database Slow too commit 67945ae14416eb099fec28978f286ebba7f5313f Author: Adam Dickmeiss Date: Mon Jan 16 15:53:28 2006 +0000 Fixed bug in yaz_oi_get_string_oid. The function did not give categoryValue to yaz_oi_update. commit b7b983104b5eb6d9d0e18faae70a575b528ec845 Author: Mike Taylor Date: Wed Dec 21 17:13:44 2005 +0000 Describe new ZOOM CQL facilities. commit bc30d69369bfe07a94d88183d307385b66a4504b Author: Mike Taylor Date: Wed Dec 21 16:45:38 2005 +0000 Note need to document: ZOOM_connection_scan1 (ZOOM_connection c, ZOOM_query startterm) ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn) commit 6202be57112ed26410889081bb0ab87a779ae0bf Author: Mike Taylor Date: Wed Dec 21 16:41:36 2005 +0000 Add ZOOM_query_cql2rpn() commit c584380ce880fe0e0ba036f476f8a037763eac21 Author: Mike Taylor Date: Wed Dec 21 15:09:50 2005 +0000 Yikes! Yesterday's "defensive programming" introduced a bug (D'oh!) which made it impossible to transform CQL queries of more than a single term. Now fixed. commit 1eb08b83987bdbf846d7100c6231d1907275bb15 Author: Mike Taylor Date: Wed Dec 21 08:35:36 2005 +0000 Comment commit 28f52a57a140e602427fe10c3cc4309d23433e2c Author: Mike Taylor Date: Wed Dec 21 00:07:21 2005 +0000 Remove commented-out printf()s in cql2rpn() commit 67b4d800264ba7dd4c8b64719cbbc87464d3430f Author: Mike Taylor Date: Wed Dec 21 00:06:34 2005 +0000 cql2rpn() now works. Pernicious stack-whack bug fixed. commit ccb96652ac7afe10d0cd7db9f0e348001c6b3f82 Author: Mike Taylor Date: Wed Dec 21 00:04:14 2005 +0000 Abort when trying to translate a node of unknown type. This happens when (for example) the node is corrupted by its parser being freed before it's passed into the translation function ... a classic C-style bug that's taken much of this evening to find and fix. Defensive programming, guys ... commit 59686102d56120c1f244f56346e9f4e65a296d50 Author: Adam Dickmeiss Date: Tue Dec 20 23:07:27 2005 +0000 Fix double free in set_otherinfo commit 4d35e2e6ab9c8d544292cbd94a574dec6694cf9a Author: Mike Taylor Date: Tue Dec 20 22:24:05 2005 +0000 Support for scanning by CQL query (not yet debugged). commit 56d0c3a8ae8189554af1f11b5c8c828223fec47b Author: Mike Taylor Date: Tue Dec 20 22:23:04 2005 +0000 Two new ZOOM_ERROR codes, CQL_PARSE and CQL_TRANSFORM. commit 609db10a44b3423a6a1f5f33478a2e5e564c583a Author: Adam Dickmeiss Date: Mon Dec 19 20:19:29 2005 +0000 Addinfo is host when ZOOM returns failure for connections commit 6e8a098c117cb6a92c30c536f7ec939520c18e22 Author: Mike Taylor Date: Mon Dec 19 17:04:22 2005 +0000 Add ZOOM_connection_scan1(), which takes a ZOOM_query rather than a string as its start-term, thereby opening the way for scanning on CQL terms. commit bffff3b76a8401900e60096a587156a8bcbc03ef Author: Adam Dickmeiss Date: Sun Dec 18 15:58:02 2005 +0000 Avoid mixed stmt/vardeclare commit 5c8ffe664df674fe5f5331f6445019e6bfe13673 Author: Adam Dickmeiss Date: Sat Dec 17 20:22:01 2005 +0000 yaz-marcdump may dump raw records separately using -s splitfname option commit 728cddf6dff34fdfbee2d6f7562f8e4499f05878 Author: Adam Dickmeiss Date: Sat Dec 17 20:20:55 2005 +0000 Prevent YAZ from using poll on MacOSX commit 4c7661349ba9a54df9e6dc6223005466c89db19c Author: Adam Dickmeiss Date: Sat Dec 17 20:03:49 2005 +0000 No need to check for sys/poll.h twice commit d23e230497f751cccd40eca6d500fcc09b048716 Author: Adam Dickmeiss Date: Fri Dec 16 15:01:25 2005 +0000 Added sample YAZ GFS config file. commit 2d5c5f9149f57e143e59a5ec358d5664b0707398 Author: Adam Dickmeiss Date: Wed Dec 14 14:05:55 2005 +0000 Added two new utilities for encoding SRW diagnostics via a URI rather than code. The yaz_add_srw_diagnostic_uri complements yaz_add_srw_diagnostic in that it adds a diagnostic to a diagnostics list. And yaz_mk_srw_diagnostic complements yaz_mk_std_diagnostic. commit 5c3f36ce789b494e73f7bc64353dc7c324c3a55f Author: Mike Taylor Date: Tue Dec 13 17:10:32 2005 +0000 Ignore "tstlogthread", compiled by "make check". commit afbca314053ad3d8aaf5e83d27d54b48bf10bfa9 Author: Mike Taylor Date: Mon Dec 12 12:09:29 2005 +0000 Describe new options-within-host-string syntax: user=admin,password=halfAm4n,tcp:localhost:8017/db commit aa995956f023b0f5fce9c9aedf3fd996a83524dd Author: Mike Taylor Date: Mon Dec 12 12:02:04 2005 +0000 Throw out the 'user=pass%hoststring' syntax that I added a few days ago, and replace with the more general and rigorous 'key=value,...:hoststring' as suggested by Adam. commit 0190c4c6857ade1c3897a642d4d1660c495f4137 Author: Marc Cromme Date: Fri Dec 9 10:43:43 2005 +0000 upcounted debian number commit 79aa866d87464ecd3fc451668017c0fa1adb2776 Author: Adam Dickmeiss Date: Thu Dec 8 15:36:31 2005 +0000 Avoid mixed stmt/var declare commit 72009188eda06296bb8839ef16de1470ecc2d240 Author: Mike Taylor Date: Wed Dec 7 16:15:15 2005 +0000 ZOOM_connection_connect() now understands authentication parameters embedded in the host string, like this: admin:secretpw%localhost:9999/gils i.e. if there is a "%" sign, then what comes before is taken as a ":"-separated user/password pair. This is a bit hacky, but necessary to run zoomtst9 against secured databases, and it's much more general than just adding authentication parameters to that one program. commit b584d89b2b0ac60b56496762db23e33b1dd6d2fe Author: Adam Dickmeiss Date: Fri Dec 2 16:13:50 2005 +0000 Put exit command last in list of commands - so 'e'='elements' commit 473e1e9a53705645afc7123afad3ec32862c65f6 Author: Adam Dickmeiss Date: Tue Nov 29 20:40:33 2005 +0000 Make zoomtst9 part of windows build commit b3a9a74111d4f1f1e14dac4a245cd01b5fa5a9b5 Author: Adam Dickmeiss Date: Tue Nov 29 20:26:05 2005 +0000 Towards 2.1.10 commit 67c25cbfe1f268218bc25bed5e9140f38a6a16fb Author: Adam Dickmeiss Date: Tue Nov 29 20:25:38 2005 +0000 Build libyazthread.la for backwards compatibility commit 85acc151c28eeec0711a922a4a0183704909c257 Author: Adam Dickmeiss Date: Tue Nov 29 20:17:09 2005 +0000 Towards 2.1.10 commit 339c1274a943f721af8b9f36c89bc2796b95bc9b Author: Adam Dickmeiss Date: Mon Nov 28 13:21:38 2005 +0000 Another fix in extraRecordData handling commit 5c814fad6fbb79ea8943dd4da9d9a3591ca242ac Author: Mike Taylor Date: Sat Nov 26 16:56:42 2005 +0000 Ignore zoomtst9 commit fc1c67f5c7ba5e39cdfeff0631eb5f9bd8dbb40a Author: Adam Dickmeiss Date: Thu Nov 24 10:04:12 2005 +0000 Added ZOOM example program that illustrates Ext Record Update commit 4102d95bf434baaf92b1a8db63d1f7396c8e469f Author: Mike Taylor Date: Wed Nov 16 16:03:51 2005 +0000 Add ZOOM_connection_diagset() commit 5451196efde939261211e1c15e0bc373b527d33c Author: Adam Dickmeiss Date: Tue Nov 15 12:23:32 2005 +0000 Added CQL base YACC grammar. commit b3d4d4df2931f92f42f406f1bb9e6aeddd76a24a Author: Mike Taylor Date: Tue Nov 15 12:19:17 2005 +0000 Describe recent ZOOM changes. commit 6d439df429edc942dfae23f7906bc63adbc1e137 Author: Adam Dickmeiss Date: Fri Nov 11 22:07:11 2005 +0000 Fix bug introduced in srw.c revision 1.37 commit c74ab70e2005c25e517e68274cf7bb3fd9b53e34 Author: Adam Dickmeiss Date: Fri Nov 11 22:06:46 2005 +0000 Fix bug introduced in srw.c revision 1.37 commit f05880b7f0510968f2ceda2dc5860b2c223263bc Author: Adam Dickmeiss Date: Wed Nov 9 17:48:11 2005 +0000 Use int rather than short for bit field commit f985ce965530b3da821236d9c936e54c29884356 Author: Adam Dickmeiss Date: Wed Nov 9 17:47:50 2005 +0000 Fixed check for non-empty record syntax list commit 9a7cdcf5ae13e63eae0259f2a620119463e64f42 Author: Adam Dickmeiss Date: Wed Nov 9 17:47:07 2005 +0000 Avoid mixed stmt/var declare commit 7b869473f3fa47461c900c7c654814040607cbaa Author: Adam Dickmeiss Date: Tue Nov 8 21:57:47 2005 +0000 One more html doc part of dist commit c20830c3e36706390cc7a15c2a3a4ffa071dc36a Author: Adam Dickmeiss Date: Tue Nov 8 21:53:01 2005 +0000 Clarify start term in ZOOM_connection_scan. Document ZOOM_package functions (extended service facilities). commit 344311b8463f32cd4b7aec93ce0f42e090fc6cf8 Author: Mike Taylor Date: Tue Nov 8 17:12:55 2005 +0000 Note that sort1() needs documented when I do sort() commit 54833ceee2850b3de2f7ee28c6f9ca9e021b7fc8 Author: Mike Taylor Date: Tue Nov 8 16:52:29 2005 +0000 Add ZOOM_resultset_sort1() Old ZOOM_resultset_sort() is now a trivial wrapper for this. (Kept only for backwards compatibility.) commit 110d2cfec5051b981403e6aa432fa4863d401893 Author: Mike Taylor Date: Tue Nov 8 16:51:34 2005 +0000 Add ZOOM_resultset_sort1() commit 0d191bf4a0a8f0196e0ba1c42f0070255c04c1b4 Author: Adam Dickmeiss Date: Tue Nov 8 15:08:02 2005 +0000 Added ZiNG Update Support. New codecs are defined in srw.h. Extended the GFS to support this as well. Backend handler, bend_srw_update, does the update work. Code contributed by Ko van der Sloot. commit 9527520d6b18b7c74d74ff4ad42fbf7eab73d203 Author: Adam Dickmeiss Date: Sun Nov 6 01:55:06 2005 +0000 Fix bug #416 in a different way. Our handlers code in yaz_marc8_?_conv (generated by charconv.tcl) now returns 0 and no_read=1 when a sequence does not match the input. The SECOND HALFs in codetables.xml produces a non-existant entry in the conversion trie.. Hence when met, the input byte is skipped as it should (in yaz_iconv). commit a51e14df3987e0c5328d0379c059b772aa4976fa Author: Adam Dickmeiss Date: Sun Nov 6 01:28:09 2005 +0000 Remove no longer used MARC-8 conversion code commit bd1e6f0c2add0e1dced1719c7a89fdce0342ca92 Author: Mike Taylor Date: Fri Nov 4 17:15:30 2005 +0000 Clarify sort-specification syntax. commit a39eab79c04f1fa0f7a7197140a526319f2612d2 Author: Mike Taylor Date: Fri Nov 4 15:51:02 2005 +0000 Fix incorrect diagnostic. commit cf3ff0df41755297543b14f007842e1dc216ec25 Author: Mike Taylor Date: Thu Nov 3 16:49:00 2005 +0000 Fix formatting inconsistency. commit ca600d51e7c35d506e928b54fe78fb049a3cd1c3 Author: Adam Dickmeiss Date: Wed Nov 2 21:41:27 2005 +0000 Avoid mixed decl/stmt commit 2aac1412b1bfe2b6d96b72b254a0292d5e5ee056 Author: Mike Taylor Date: Wed Nov 2 14:54:01 2005 +0000 Add a list of the (surprisingly many) functions that still require documentation. commit 77f1e72ece143de75a2163369225ae15a13f7480 Author: Adam Dickmeiss Date: Wed Nov 2 13:32:58 2005 +0000 Fix path to yaz-asncomp commit e15cbdedce45f8d4ce7642182899919cf9266984 Author: Adam Dickmeiss Date: Wed Nov 2 11:54:40 2005 +0000 Change output for SearchResult-1. Display subqueryId as well commit a77e44dfd845725c768c8c60c1c01ba04209316d Author: Adam Dickmeiss Date: Wed Nov 2 10:19:46 2005 +0000 Rename serachresult options a bit commit 1b74d7ac0e734e7740dae73ea340d24334960bc5 Author: Adam Dickmeiss Date: Tue Nov 1 15:08:01 2005 +0000 Allow retrieval of Search Result-1 information in ZOOM by the use of options that are attached to a result set. ZOOM documentation updated accordingly. commit 09171d137882f80de8584a5adec1ac13c7718a4e Author: Adam Dickmeiss Date: Tue Nov 1 15:07:29 2005 +0000 Allow inspection of result set options with rget command commit 2a7d3ab36a99c81e9d33bd370cf03a020525f49e Author: Adam Dickmeiss Date: Fri Oct 28 18:36:58 2005 +0000 Fixed bug #416: First/second comb characters not handled in the MARC-8 to UTF-8 conversion. Patch by Raj Patel. commit 96278072bf26103bdd1bbd799f87328655b67756 Author: Adam Dickmeiss Date: Thu Oct 27 20:05:41 2005 +0000 Use xsl:element for document element to prevent ns commit 16d6dc8f953ccdaadd47ce6a60df22efff73bff4 Author: Adam Dickmeiss Date: Sat Oct 22 13:32:04 2005 +0000 Use xstrdup rather than strdup. Define stat(2) masks S_IFMT and S_IFSOCK when gcc -ansi is in use. commit 6d4f7e865f11d0fbcadd0820078a707f5588256c Author: Adam Dickmeiss Date: Sat Oct 22 13:28:03 2005 +0000 Do not use // comments commit a2089830bc03a6edd4130aee46e3af6964d185f4 Author: Adam Dickmeiss Date: Sat Oct 22 13:27:29 2005 +0000 tstlogthread by default prints nothing commit bbede51b2d1b9cf9674e0176d5f536d10f276962 Author: Adam Dickmeiss Date: Sat Oct 22 13:13:56 2005 +0000 yaz-benchmark uses yaz options rather than getopt commit 028cd0d846e6e44649ef699e205b2db453be5522 Author: Sebastian Hammer Date: Thu Oct 20 19:28:03 2005 +0000 Added option -m to GFS to control formatting of time stamps. commit 976e19ac608c2992096baf821426186570ea2df9 Author: Mike Taylor Date: Mon Oct 17 12:29:44 2005 +0000 Add ZOOM_connection_option_getl() -- very thin layer. commit 1a5d172598ed970a299d142cd2ff536e905659f8 Author: Mike Taylor Date: Mon Oct 17 12:28:20 2005 +0000 Add support for int len to struct ZOOM_options_entry. Factor repeated code out of ZOOM_options_setl() into new _set_value(). Add ZOOM_options_getl(). ZOOM_options_get() is now a one-line wrapper around ZOOM_options_getl(). commit 6d20344358c013b71bf23a93f1998fc6036c1aef Author: Mike Taylor Date: Mon Oct 17 12:25:39 2005 +0000 Add int len to struct ZOOM_options_entry. commit 3a12e23d93ba2aadcddefc74ebe02b90f53381c3 Author: Mike Taylor Date: Mon Oct 17 12:25:04 2005 +0000 Add ZOOM_connection_option_getl() and ZOOM_options_getl() commit 053ab437b20c680f8a4a06190a2ef08e0912bf82 Author: Adam Dickmeiss Date: Sat Oct 15 10:40:37 2005 +0000 Put static YAZ entities in separate file entities.ent. Put bookinfo section in separate file bookinfo.xml. commit abc454158e80cb39f9afb4d2731c8c1919e37450 Author: Adam Dickmeiss Date: Tue Oct 11 18:24:33 2005 +0000 Move ZOOM_task definition to private ZOOM header commit 323dd612ee1939e8082fa75edcd1083a238d5272 Author: Adam Dickmeiss Date: Tue Sep 27 17:52:46 2005 +0000 Added wrbuf_chlp_right commit a598b7f4ca1ad3c0ffcd5924aea118abc3d36574 Author: Adam Dickmeiss Date: Mon Sep 26 09:15:27 2005 +0000 Changed behavior of yaz-client's cancel command, so that it by default does not wait for a response. But if 'cancel wait' is given it will wait anyway. commit 8602fb839aceb9caf7b5e64d19cc0a35698dbe75 Author: Adam Dickmeiss Date: Wed Sep 21 19:46:33 2005 +0000 Allow multiple record syntaxes to be specified in 'format' command. If two or more are given, the syntax list in CompSpec is used for present requests. commit cf5cfe44d60e1066999eff41bd239f8f4a59cd3e Author: Marc Cromme Date: Tue Sep 20 12:07:29 2005 +0000 added a -g switch for gnuplot instructions in output. This way, the outpit stream can be used as input to gnuplot (when saved to a file, that is), and the gnuplot instruction file is obsolete, hence removed commit 0edf0cd59d2db226273f2d9f3ba3dad96834a23e Author: Marc Cromme Date: Tue Sep 20 11:29:03 2005 +0000 counting ewrror corrected such that multiple repeats do work correctly commit 66aa379343ce353b8faa99b86c666641bd0b1577 Author: Marc Cromme Date: Tue Sep 20 09:36:18 2005 +0000 moving int declaration to top of function to avoid upsetting old compilers commit 1172793f93230208d5b19c93a1d3c388060c91c8 Author: Adam Dickmeiss Date: Mon Sep 19 19:18:48 2005 +0000 Added ignore of zoom-benchmark program commit ba401b06433f6cebf02ec74bc64922293c39133f Author: Marc Cromme Date: Mon Sep 19 14:14:01 2005 +0000 better 3D graphics made possible by ordering events into groups of same connections commit 0f3124382d177e4bef923ab591220def33cc0b3c Author: Adam Dickmeiss Date: Fri Sep 16 21:46:24 2005 +0000 Use localtime_r rather than localtime if available. Only call time(2) and localtime(3) once per yaz_log call. commit 89cc3da6fca90bda52edaa8d368c755b5421ee06 Author: Adam Dickmeiss Date: Fri Sep 16 21:44:23 2005 +0000 Check for localtime_r commit 721b8849056eefbcec3965b9ae6eeb04b6580c9c Author: Adam Dickmeiss Date: Fri Sep 16 21:14:38 2005 +0000 New option -w sec for test log utility commit c6a5dc8ed65ae3ffcf8f27270c4de6f6ae05499e Author: Adam Dickmeiss Date: Fri Sep 16 21:13:54 2005 +0000 Filename passed to yaz_log_init_file assumed to be in strftime format. For each yaz_log call strftime is used to make an effective filename. If different from last yaz_log call, the log file opened. To make a log that rotates every midnight log%Y%m%d.log (year,month,day) could be used. commit 8f2212a99ffa921b44897379a5333f3bd09c2dd9 Author: Adam Dickmeiss Date: Fri Sep 16 10:51:05 2005 +0000 Remove C++ style comments. Remove mixed stmt/var decl. commit 1be28b14b54a225541d94621f325432a5d132b39 Author: Adam Dickmeiss Date: Fri Sep 16 09:16:40 2005 +0000 Implemented logging of authentication info in GFS. Bug #406. commit dad26e5daa5c4a10b926d3cd4026bf1aeb01d19f Author: Adam Dickmeiss Date: Fri Sep 16 07:05:46 2005 +0000 Boolrean and rather than bitwise and commit 5c5f9a65dedbaa37af4d1ba772568a176c9762a7 Author: Marc Cromme Date: Fri Sep 16 06:57:21 2005 +0000 tickmarks taken out commit 06aa72c00167e6611dbb41c157c65713d48871ae Author: Marc Cromme Date: Thu Sep 15 20:51:16 2005 +0000 changed output such that process comes first, then time, then progress. added3D plots commit 1632ffe4788128f6557bbaa9764e92493ae4934c Author: Marc Cromme Date: Thu Sep 15 11:14:22 2005 +0000 use points, no lines commit d7347ad7877139ce9da59cca55ac3efd91216f6b Author: Marc Cromme Date: Thu Sep 15 10:38:03 2005 +0000 made progres linearly increasing, and added gnuplot file commit 8c95dd70c139f3543227dc2f2cd43609dcb37ce6 Author: Adam Dickmeiss Date: Mon Sep 12 10:25:13 2005 +0000 Update NEWS with more info about SRU POST + resultSetId stuff commit 659228360513b8d8b5180dfc1455bf01b0f8767a Author: Adam Dickmeiss Date: Mon Sep 12 10:23:53 2005 +0000 Modified yaz_sru_decode to only perform SRU POST URL decoding if content-type is "application/x-www-form-urlencoded". commit 2bb854bbfa3e65436125c844d6a7edaf82133d8f Author: Adam Dickmeiss Date: Mon Sep 12 09:21:44 2005 +0000 Mention SRU POST commit 5009ac245dc8618eb45f4214b59c472c90869136 Author: Adam Dickmeiss Date: Mon Sep 12 09:14:57 2005 +0000 Changed yaz_uri_array to no assume ? in start of URI string. This is to fix SRU POST which does not have ? in start of URI string in HTTP body. commit 0d3acc914a510c397cb8f65bbd957697284c41d9 Author: Adam Dickmeiss Date: Mon Sep 12 09:13:26 2005 +0000 Fixed SEGV that could occur in Z39.50 v2 mode commit c3427ba84b89089ef7c2b1f5aaec843aa3af72e6 Author: Adam Dickmeiss Date: Sun Sep 11 20:21:27 2005 +0000 Compatibility fixes for older C compilers. Fixed printf format for print of time_t (changed %i to %ld). commit 1fe36f21be4d9ae40e62162651d144e0fd787df5 Author: Adam Dickmeiss Date: Sun Sep 11 18:39:10 2005 +0000 Added support for specifying SRW resultSetId + resultSetIdleTime in a Generic Frontend Server's search handler. Patch by Ko van der Sloot. commit 0c5b90281adaef44cc428df303cd54a0dee568b4 Author: Adam Dickmeiss Date: Sun Sep 11 13:32:39 2005 +0000 Put declarations before statements to make code work with older C compilers. commit 1908df105a83e97f3e404020fd9f4e2007654afd Author: Marc Cromme Date: Fri Sep 9 13:51:43 2005 +0000 pretty formatting with tabs for gnuplot reading commit 694d75cb1eaed143238ffc563414047dbfc77752 Author: Adam Dickmeiss Date: Fri Sep 9 11:29:54 2005 +0000 Fixed bug #410: Can not rotate log commit f04a7c5605e217527054d3bb617b1d22acba6f3e Author: Adam Dickmeiss Date: Fri Sep 9 11:28:48 2005 +0000 Add rules to build tstlog commit 455798a3154b5c08c872ca0fb90607ddea575038 Author: Adam Dickmeiss Date: Fri Sep 9 10:34:09 2005 +0000 Do not build the separate Multi-threaded (MT) library libyazthread.la. Instead make the library libyaz.la multi-threaded. Threading as a whole can still be disabled by configure option --disable-threads. Previosly, with older GLIBCs there were problems with MT libs under Apache. This has now been fixed a long time ago. commit fd446dea5b8ff2ac645272686f2be5308fd71f43 Author: Adam Dickmeiss Date: Fri Sep 9 10:33:45 2005 +0000 Major log system cleanup. Added various locks for the shared mask_names global structure. Also added mutex around yaz_log core code. It seems that vsnprintf or similar is not thread-safe after all (at least on Solaris 9). commit cb0de81ba19b675141bf9a8e5094e2fc973385e0 Author: Adam Dickmeiss Date: Fri Sep 9 10:32:09 2005 +0000 Changed nmem_mutex_create so that it properly handles concurrent calls. Now, only first thread will initialize the mutex. Others will do nothing. commit 40a2553a95734f7c8374e506b327bc6aca91f0cc Author: Adam Dickmeiss Date: Fri Sep 9 10:30:35 2005 +0000 Set ODR_MAX_STACK to 2000 instead of 10000. It seems that 10000 causes a stack overflow in threaded mode on FreeBSD. commit 04e7f1b09e302ca5862d752e63e2a6e396c82047 Author: Adam Dickmeiss Date: Fri Sep 9 10:20:14 2005 +0000 Document more tstlog options commit 9eca093a375190581d3ce6b4eb119dadd39692eb Author: Adam Dickmeiss Date: Thu Sep 8 13:51:27 2005 +0000 Fix cpp-if check for POSIX threads commit d8c29911dfa8d98b9adcc843bbc43fa6f139fe9b Author: Adam Dickmeiss Date: Thu Sep 8 13:25:33 2005 +0000 Added test tstlogthread which tests log system in multi threaded mode commit d061373561c647edbc7125796b53ab0c789d6648 Author: Adam Dickmeiss Date: Thu Sep 8 13:22:58 2005 +0000 Added option (-n) for tstlog to make call yaz_log a number of times commit d950c3e047f4ba482b7f36d7e81faae6d4b5dacb Author: Marc Cromme Date: Wed Sep 7 13:45:15 2005 +0000 added simple benchmark client program written over zoom api commit 23eba2ef170ee6236121e11480ad0c83b7211023 Author: Adam Dickmeiss Date: Wed Sep 7 11:53:25 2005 +0000 Document ZOOM_connection_last_event and the event types commit bd203324142f86a236b9867e10102abe14b7c676 Author: Adam Dickmeiss Date: Tue Aug 30 20:13:51 2005 +0000 Call bend_close during init if there is an old handle to release commit 457226809c15f78d68d29fd54791822d89c7ad80 Author: Adam Dickmeiss Date: Thu Aug 25 12:44:24 2005 +0000 yazphp.dsl no longer in use commit bc8a8531704e987a84f7e8d338eefc86e2b8fd70 Author: Adam Dickmeiss Date: Thu Aug 25 11:48:26 2005 +0000 Use proper location for VS C runtime msvcr71.dll commit 26bc83eeda2418e09c32f2ca4c9327901568fe98 Author: Heikki Levanto Date: Wed Aug 24 11:25:34 2005 +0000 Added 'exit' as an alternative for 'quit' in yaz-client (Per's request) commit 43a7aff23f364fd3fac6e9746c53cda01be13738 Author: Adam Dickmeiss Date: Mon Aug 22 20:34:21 2005 +0000 More type casts for char signed/unsigned and xmlChar. Using xmlStrcmp, xmlStrlen in a few places instead of strcmp/strlen. commit 637213cb79d34110cb367369ece0745cdc2b554f Author: Adam Dickmeiss Date: Thu Aug 18 18:42:37 2005 +0000 Updated to use libxml 2.6.20, zlib 1.2.3 commit b7c6d3740131ba03800c5c2cc935dc2626d12bb3 Author: Adam Dickmeiss Date: Thu Aug 11 14:21:55 2005 +0000 Increase the ODR stack size. Use different stack data structure for ODR constructed stack. commit e07c9107593d131eeb0f57cfd908e0e01be37010 Author: Adam Dickmeiss Date: Thu Aug 11 14:19:28 2005 +0000 Make test fail if circular refenced ODR does not fail commit 64e2bb98a2ecd300fc2819c2cbb0b72901f85fa6 Author: Adam Dickmeiss Date: Thu Aug 11 14:09:07 2005 +0000 Added tstodrstack to this commit aa8977f5880c963f6754cc0c4bfa05ef023e83a4 Author: Adam Dickmeiss Date: Thu Aug 11 14:08:38 2005 +0000 Test with 100 level query and another with circular refernce commit be5342e415872d9f43511f7b68fbcec42dc2c0a7 Author: Adam Dickmeiss Date: Thu Aug 11 14:00:43 2005 +0000 Added test for bad ODR nesting commit 2652e6d0585c1107642a3e53432c5a3bdd1cbb21 Author: Adam Dickmeiss Date: Wed Aug 10 09:12:53 2005 +0000 Added some news items collected frmo CVS commit 3f28795bb839ac16d929fb57180c0582e36c9de7 Author: Adam Dickmeiss Date: Wed Aug 10 09:02:43 2005 +0000 Removed /usr/share/yaz/etc from libyaz. All /usr/share/yaz content is now part of libyaz-dev. commit 8b40c551d14fe46439095674ba19cee2fe9a8e1c Author: Adam Dickmeiss Date: Tue Aug 9 18:29:35 2005 +0000 Fixed setting of record syntax for Extended Service update in ZOOM commit 162d5174d5fa510c0ee6810ae6bc0ee5f7c6fd61 Author: Adam Dickmeiss Date: Fri Aug 5 09:36:15 2005 +0000 Added missing start tag commit 4ebb00c5c13152f7c6742737ed1547b131af893b Author: Adam Dickmeiss Date: Fri Jul 22 06:23:14 2005 +0000 Implemented 'show all' command. Bug #398. Patch by Rob Styles. commit 7673e4ac1298b8557933244fc576219bd02fd640 Author: Mike Taylor Date: Tue Jul 19 12:41:20 2005 +0000 Note TCP/IP backlog change. commit aaf5a12c13670c9d034ecf809448201e1ef5d8de Author: Mike Taylor Date: Tue Jul 19 12:40:52 2005 +0000 Increase TCP/IP listener backlog from 3 (which I am guessing was copied from the SunOS manual entry way back when) so SOMAXCONN, so that the socket will queue as many incoming connections as it's able to handle ongoing connections. In other words, it will never now refuse a connection that it would be able to handle merely because it's not got around to accepting() enough of the pending connections yet. This is the behaviour anyway under Linux, where the listen() argument is ignored; but not under BSD and on systems such as MS-Windows that use BSD-derived TCP/IP stacks. The behaviour of YAZ-based servers should now be uniform across operating systems in this respect. commit c43b2d080cc557adb59b37b3d8f427871481c7e8 Author: Marc Cromme Date: Mon Jul 18 10:07:21 2005 +0000 started new developmenr version number to make side-by-side compilation with zebra feasable on debian systems commit 38e70c83aac4fabf9280fa246921e57d725424de Author: Marc Cromme Date: Mon Jul 18 10:06:36 2005 +0000 added some package names to message commit 20973de252eaeb5367d3c86f64b3db43fd9581d2 Author: Adam Dickmeiss Date: Thu Jun 30 08:34:01 2005 +0000 Check for open connection and proper protocol for update and xmles commands. Fixed uinitialized member in xmles. commit 5241f035b579b1dcf65fdbe379c0fb8f3ef7168c Author: Adam Dickmeiss Date: Wed Jun 29 22:52:54 2005 +0000 Pick latest Docbook XML DTD for 4.X commit f9828584ad6d0f66eb85b2e6d8bca5a29d569dcb Author: Adam Dickmeiss Date: Mon Jun 27 22:03:59 2005 +0000 Case insensitive CQL relations/indexes/operations. commit fb6d99a0c7e07d9cc4a315c447deaf6564a85505 Author: Adam Dickmeiss Date: Sat Jun 25 15:46:01 2005 +0000 Expanded tabs in all source files. Added vim/emacs local variables trailer. commit 67002f49611adb64993391b0cbf6c235f18080a4 Author: Adam Dickmeiss Date: Sat Jun 25 15:42:19 2005 +0000 Print ext command in help commit 2ba3d1d3bf2b57c7ac462b347cb18f06820ac73a Author: Adam Dickmeiss Date: Fri Jun 24 19:56:52 2005 +0000 WS updates. No code changes commit 0efb05eb1d586ad15c3c0b2f564b3cb58edbcd1b Author: Adam Dickmeiss Date: Fri Jun 24 12:50:46 2005 +0000 Add OID for External XMLES too commit 185028bccf8a5e6635fc5ef8f1f737c798e29c2a Author: Adam Dickmeiss Date: Thu Jun 23 15:03:40 2005 +0000 Fix relationModifier handling (incorrect value in check was used). commit 5b9a39fc00ab0969ff020f05c51c5d336e00d762 Author: Adam Dickmeiss Date: Thu Jun 23 13:09:42 2005 +0000 Changed xmles command to take OID + doc as parameter (previous version only took doc). commit 7a870687ef78606cd134e82fd9085722efe3c979 Author: Adam Dickmeiss Date: Tue Jun 21 07:34:26 2005 +0000 Describe new comman xmles. Update doc for Item Update. commit 58e7306c9f23189e136c52b21e39692392824ea7 Author: Adam Dickmeiss Date: Tue Jun 21 07:33:08 2005 +0000 Rename VAL_XMLUPDATE to XML_XMLES bacuase this is an XML extended service type facility rather than Update facility. commit 0866d407d83198a03f9876947ab29fde357f396d Author: Adam Dickmeiss Date: Thu Jun 16 09:05:10 2005 +0000 For RPM spec, use License: rather than Copyright: (obsolete) commit 7b43d0bb4e3c154246bdaba51b78e9861fd3bd97 Author: Adam Dickmeiss Date: Mon Jun 13 10:27:00 2005 +0000 For GFS, allow field record in bend_fetch_rr to hold NULL - meaning that record could not be returned and out of range. This present response will simply not include the record. Useful for Zebra 1.4 where approximate hit count is returned. commit 06cc6b7283ef5cd8e69adcfb760ea06f8a2c2c7b Author: Adam Dickmeiss Date: Fri Jun 10 17:56:35 2005 +0000 Update year in copyright message commit a0a3d5e9fb7405e286e464fcbef6d32d1bb1d246 Author: Adam Dickmeiss Date: Thu Jun 9 18:47:07 2005 +0000 LFS mode for yaz-marcdump so that it can read large ISO2709 files commit 71664fe63983cbd1a74e22dd2f5fb75df2f57981 Author: Adam Dickmeiss Date: Wed Jun 8 12:34:05 2005 +0000 Fix problem with pointer to last init response being corrupt due to set_auto_wait=off. If we have not yet received init response we assume option is set. commit ff9c21a4a93db3d49140602e6b8bdc062bde4153 Author: Adam Dickmeiss Date: Wed Jun 8 11:22:15 2005 +0000 Describe new yaz-client commands wait_response and set_auto_wait. commit fdc8cdeed79becf89c9ddedbaa0ebd6df3030c6b Author: Adam Dickmeiss Date: Wed Jun 8 09:11:17 2005 +0000 Bump version to 2.1.9. commit aafaead12e6b84b81ac131a5f2573310eed066ac Author: Adam Dickmeiss Date: Wed Jun 8 09:11:03 2005 +0000 Fixed wait_response handling so to deal with proper number of responses. commit 4fe454f1a00ab30fe2440b2bab2d9c1367dfe4e0 Author: Adam Dickmeiss Date: Tue Jun 7 19:51:45 2005 +0000 More NEWS commit 862b4ea8c948d499192abd1fd420000bec94d249 Author: Adam Dickmeiss Date: Tue Jun 7 19:47:31 2005 +0000 Use size_t for NMEM's get_block. Change space-left check to avoid signed/unsigned-ness problems. commit 8a616a92f7c17554add083af9163a8dd2d91694b Author: Adam Dickmeiss Date: Tue Jun 7 19:31:40 2005 +0000 Towards 2.1.8. commit e615729ba0e58045756f03cb409d5adc54181750 Author: Adam Dickmeiss Date: Tue Jun 7 19:25:38 2005 +0000 Fixed bug in yaz_marc_decode_buf. By mistake the routine appended MARC output rather than returning "new" buffer. commit b3aacc36f4f617fbc68126f102f6b96b7969932a Author: Adam Dickmeiss Date: Mon Jun 6 17:34:58 2005 +0000 Avoid mixed stmt, var declare commit c516122e7966c81722715371eb899655979adc8a Author: Adam Dickmeiss Date: Mon Jun 6 12:32:03 2005 +0000 Allow log level to be set for zoomsh commit fe3ae86a97bef6a815e2f04cdcaa77307801c902 Author: Adam Dickmeiss Date: Mon Jun 6 12:23:47 2005 +0000 Make a zoom,zoomdetails log level and try to make logging more consistent in ZOOM C. commit 44243f1a421921f27b7f4ab986a0d0a02285b664 Author: Adam Dickmeiss Date: Mon Jun 6 10:45:33 2005 +0000 Re-organize top-level code so main functions does less work. commit 850fbeeaac5612da71b74d277ef1588b6a57996b Author: Adam Dickmeiss Date: Mon Jun 6 10:37:14 2005 +0000 Internal package 2.1.7-1 for testing. commit b853eb3de1a249859eef71c9a285172a199656ce Author: Adam Dickmeiss Date: Mon Jun 6 10:29:33 2005 +0000 Add support for privately defined extended service, xml update, with OID 1.2.840.10003.9.1000.105.4. commit 561d51614757d3160312dca00a8aff7b9c218d3e Author: Adam Dickmeiss Date: Mon Jun 6 10:27:59 2005 +0000 Fix man page to include description of --comp. commit 48fdd95e1a026cfcc20ddd2329f0bda940f936e2 Author: Adam Dickmeiss Date: Mon Jun 6 07:28:12 2005 +0000 Bump version to 2.1.7 commit 85f1d1a0c611b54db8dd799e3b59be04a873c54e Author: Adam Dickmeiss Date: Mon Jun 6 07:25:47 2005 +0000 Warn about unknown Z39.50 options commit 8619c87efd449df46e51100488f7367e6832f4d4 Author: ja7 Date: Mon Jun 6 07:12:47 2005 +0000 Fix for bug 371 "options concurrentOperations ignores concurrentOperations" commit 9e53ad5fa700dbdf5d5c7ac518ff2458c5436da9 Author: Adam Dickmeiss Date: Fri Jun 3 20:33:13 2005 +0000 Use size_t for nmem block sizes internally commit a97174e3c213916ba968c8922ec69e9101badb2d Author: Adam Dickmeiss Date: Fri Jun 3 20:30:30 2005 +0000 Let nmem.h include stddef.h to get size_t defined. Hide strutures nmem_control and nmem_block. commit 029ba3910b555dc57c38fd8d5a27091e59338890 Author: Adam Dickmeiss Date: Thu May 26 21:47:16 2005 +0000 Add OID test. Changed prototype for ber_oidc. commit e497fb7edee04454e0f08fd1ed975fa6966341ac Author: Adam Dickmeiss Date: Thu May 26 21:46:40 2005 +0000 Allow decoding of zero-length OIDs, but reject OIDs longer than OID_SIZE. commit 2db81a6ebbae290b043cbe6b911972de3a00cb19 Author: Adam Dickmeiss Date: Tue May 24 12:16:22 2005 +0000 Towards 2.1.6. commit cbc7e0fcfe4559b017d1df1e62548f4207074780 Author: Adam Dickmeiss Date: Tue May 24 12:15:57 2005 +0000 Update dependancy libs commit df43df1a412b098478f0909e13430c3262c1e1c3 Author: Adam Dickmeiss Date: Fri May 20 19:29:18 2005 +0000 Added support for SRW sort in Generic Frontend Server. Patch by Ko van der Sloot. Member srw_sortKeys in bend_search_rr holds sortKeys - or NULL if none is provided. commit 022ffdfe3ef1fd6f868cc870c829b92f08166113 Author: ja7 Date: Fri May 20 06:22:48 2005 +0000 added 2 new commands for testing concurrent operations and cancel set_auto_wait wait_response commit 44522d349d922250169fe57b89dadbc6a1d12dab Author: Adam Dickmeiss Date: Wed May 18 20:23:47 2005 +0000 Warn if Libxml2 is not found commit 0594c1b39bd724b0f80ef9dc1ceb937f5cf2c199 Author: Adam Dickmeiss Date: Wed May 18 12:38:40 2005 +0000 Added functin yaz_del_charneg_record, which removes character set negotiation from otherInfo. commit 1db6276c63f9693d66273d710b4643572ed3f503 Author: Adam Dickmeiss Date: Wed May 18 12:30:00 2005 +0000 Reestablish LOG_APP,APP2,APP3 .. continued. commit 811aab8e16731999167fcb3cd2076e7256bf68ad Author: Adam Dickmeiss Date: Wed May 18 12:23:42 2005 +0000 Keep log level app2,app3. It is still being used commit 34406760af433ed1bf74d98df4265c4fa0c27230 Author: Adam Dickmeiss Date: Tue May 17 11:48:36 2005 +0000 Fixed bug #255: ZOOM does not decode Diagnostics in init-response. ZOOM C now decodes init diagnostics from user-information-field when present. If non-present, the pseudo error code 'Init Rejected' is issued. commit 967c7d6a006f0e4dc684b8086e08186d11311cfd Author: Mike Taylor Date: Mon May 16 12:00:31 2005 +0000 Ignore generated files "tstsoap1" and "tstsoap2" commit 3e21a17a5fbbdcacf674a943ce681207d72ce263 Author: Adam Dickmeiss Date: Wed May 11 12:19:15 2005 +0000 Bump version to 2.1.5 commit 35c80d96871b33904c9206919d2b31ce753d699b Author: Adam Dickmeiss Date: Wed May 11 12:07:48 2005 +0000 Initialize members scanClause,errcode,errstring for Z39.50 scan handling commit 725db3d87d84a1072939d74a537454a5d4e1e0cc Author: Mike Taylor Date: Mon May 9 11:17:06 2005 +0000 Ignore generated header files. commit 35aa1d01fc0569ea3022723acfcd0dc2d2f2d5fc Author: Mike Taylor Date: Mon May 9 11:16:29 2005 +0000 Ignore generated C files. commit b9bf54cdc48546ad358b829bb01e55fd612c1717 Author: Adam Dickmeiss Date: Mon May 9 11:01:07 2005 +0000 In yaz-client when evaluating time elapsed, it is done just after the incoming package has been decoded - not after display of result records etc. This to give a more true picture of target's performance. commit 7dbe4028e0cb3a7ed57fb2bbb0b05e62e112f56a Author: Adam Dickmeiss Date: Mon May 9 08:51:48 2005 +0000 Fix example commit 012d51aa722c887a9227a0c345c9663500486acc Author: Adam Dickmeiss Date: Sun May 8 22:53:59 2005 +0000 Bug fix: did not use outputCharset in the conversion of search term commit de7e9019dfe1a48e9bae5563152bed76075b850b Author: Adam Dickmeiss Date: Sun May 8 07:35:23 2005 +0000 Fixed bug #320: Improve UTF-8 -> Latin-1 conversion. The yaz_iconv utility now converts several composed UNICODE sequences to their single code Latin-1 equivalents. This improves the MARC-8 to ISO-8859-1 conversion in that more sequences are correctly converted. commit ec00e8cfc23cb7d04a9b13730607d6c094446f36 Author: Adam Dickmeiss Date: Sun May 8 07:33:12 2005 +0000 Comment out debug printf stmt commit dc068db61c02117e4e7e4aa3136f055965ec063c Author: Adam Dickmeiss Date: Sun May 8 07:13:57 2005 +0000 Fixed bug #322: yaz server does not log listener address if given commit 2539e1c4f232d30fd3e2a15f7668c6dc395c733a Author: Adam Dickmeiss Date: Fri May 6 12:18:26 2005 +0000 Encode SRW/SRU terms to UTF-8 from terminal (outputCharset). commit e8025256fa32ac74dee34da5ca49b0c8ac41508e Author: Adam Dickmeiss Date: Fri May 6 11:11:37 2005 +0000 Added two SOAP tests commit aad0bdeba9eb59ae42169cb20f1c2f4fc876d254 Author: Adam Dickmeiss Date: Tue May 3 21:32:19 2005 +0000 Collect CVS changes. commit c8caa31f42e8c22ddc30863c5df77997a338f8fe Author: Adam Dickmeiss Date: Tue May 3 12:30:13 2005 +0000 Added some help on proximity. commit 9cc8f4a4d0fd7f1e4bd6c9d5c85ef2dccaab5743 Author: Adam Dickmeiss Date: Mon May 2 19:33:55 2005 +0000 Removed a few redundant log messages commit a402baab0eac522450b628a6dcdfbc4a50e11bf0 Author: Adam Dickmeiss Date: Mon May 2 19:33:00 2005 +0000 Fix bug #307: It's impossible to specify indefinite/no timeout for ZOOM_event. Special timeout value -1 now means indefinite timeout (i.e. no timeout). commit f213113a8a7f5d311d5dc60aafbd6bc49d76e3b1 Author: Adam Dickmeiss Date: Mon May 2 19:17:48 2005 +0000 Added support for multiple languages and charsets to be specified in ZOOM. Each charset/language is separated by a blank. If negoation is in effect in init-response, Option "negotiation-charset-in-effect-for-records" set to 1(true) or 0(false). Code based on patch by Vasiliy Osadchuk. commit e627986266d8fcda1b273c1ecab36400494bf76c Author: Adam Dickmeiss Date: Mon May 2 19:14:33 2005 +0000 Added utilities nmem_strsplit and nmem_strsplit_blank which splits a string into arrays and allocates each stream using NMEM. commit 4dd0cf8a0d3ad8530d9bd6fb83b795cf73bd354f Author: Adam Dickmeiss Date: Fri Apr 29 19:06:13 2005 +0000 Fixed bug in scan handling in front end server: if preferredPositionInResponse was non-present it logged a NULL value. commit f517f60a95e2f94edd1efd750024642b5941ef08 Author: Heikki Levanto Date: Fri Apr 29 10:36:05 2005 +0000 Fixed the infinite recursion when calling yaz_log_level_init as the first call (before other log level or nmem_init calls) commit 7fdd4ae2061089485070e60cd7e2e8ea05d55b56 Author: Adam Dickmeiss Date: Tue Apr 26 19:51:31 2005 +0000 Modify one of the result set PQF examples commit a088ea8c24e28419057ddae8c23936272b578b7c Author: Adam Dickmeiss Date: Tue Apr 26 18:46:42 2005 +0000 Towards 2.1.4. commit 0714fa58662966ba0a4f4d9062de89524f539200 Author: Adam Dickmeiss Date: Tue Apr 26 18:46:24 2005 +0000 Added Mads Bondo Dydensborg commit dfd577ec0a4673580ae744babfdb9b4f8bdd80bf Author: Adam Dickmeiss Date: Fri Apr 22 15:14:24 2005 +0000 Missing quote commit b02f404f35f196079a0cd9569dace76d70c3f1c9 Author: Adam Dickmeiss Date: Fri Apr 22 15:09:36 2005 +0000 Allow srcdir!=dstdir for CVS checkout commit d675fdcc2386440425e3d230730378bc96a2664c Author: Adam Dickmeiss Date: Fri Apr 22 14:59:42 2005 +0000 Fix check for cql.c in dist-hook commit 3b703e575c88bd31b38f5af81c29aeed757ff11b Author: Adam Dickmeiss Date: Fri Apr 22 14:51:11 2005 +0000 WIN32 updates for Diagnostics from CSV files. commit 84d7b06c13daa609e93f353e655c4b02f936d65c Author: Adam Dickmeiss Date: Fri Apr 22 08:27:57 2005 +0000 Changed include/yaz/diagbib1.h and added include/yaz/diagsrw.h with diagnostic messages+codes for Bib-1 and SRW. Preprocessor defines are now defined for all those error codes. So instead of putting 109 in in a program, YAZ_BIB1_DATABASE_UNAVAILABLE can be used. The messages are now generated from a CSV files. See src/bib1.csv and srw/srw.csv. commit 00757f0ff95a6e5557823e151a7ae9d6f48f0f8f Author: Adam Dickmeiss Date: Wed Apr 20 13:51:47 2005 +0000 Towards 2.1.3 commit cd08b51966f34ed2b871f87bc07dd51a0d3fd6a4 Author: Adam Dickmeiss Date: Wed Apr 20 13:17:51 2005 +0000 Use XML comments for debug/verbose info. commit 163d307ad18c694b07f18da8071b517e6cd2095a Author: Adam Dickmeiss Date: Wed Apr 20 13:17:29 2005 +0000 Use XML comments for for meta info. commit b414bc74229f18537e6742b081aad7c4679006c8 Author: Adam Dickmeiss Date: Wed Apr 20 13:04:04 2005 +0000 yaz-marcdump skips non-digit chars betwen recs and warns about it commit 4602e6f66713b5c44cebd5a8deb2790e2cdea91e Author: Adam Dickmeiss Date: Wed Apr 20 12:59:51 2005 +0000 Exit if multiple server addresses is given (not supported) commit 22df553651d0ec221541c3df8766a114bbe05018 Author: Adam Dickmeiss Date: Mon Apr 18 08:04:36 2005 +0000 Update to libxml2 2.6.9, zlib 1.2.2 commit ee52d7a5f2325315de5391696bef64336ad88dbc Author: Adam Dickmeiss Date: Fri Apr 15 21:47:55 2005 +0000 Fix bug in CCL parser that could caused uninialized values of token member ws_prefix_len in some cases. Removed ccl_token_simple function. commit 1ee98ea192555da1959c4012736f7797cc5f91df Author: Adam Dickmeiss Date: Thu Apr 14 11:59:46 2005 +0000 Allow NULL value for basename in bend_fetch_rr struct commit b0ac22df7abdd45011addef4e726b278d5ba0f02 Author: Adam Dickmeiss Date: Mon Apr 11 08:41:39 2005 +0000 Fixed bug #280: make dist must depend on bison. The extra rule is necessary for automake 1.4pl6, not 1.9. commit 6215ff999c5f4c9ff2cc59ab99f794832ce30f1d Author: Adam Dickmeiss Date: Wed Mar 16 21:30:22 2005 +0000 Towards 2.1.2. commit 613473ea375ac8194f2cd14dd3f5f3820d6ac941 Author: Adam Dickmeiss Date: Wed Mar 16 21:28:43 2005 +0000 Get new codetables.xml from the LoC. Bug #273. commit 30d210952d2f8b305f9f79e637a4db53dcf0873c Author: Adam Dickmeiss Date: Wed Mar 16 21:26:37 2005 +0000 Change "to" type for MARC-8 -> UTF-8 conversion from 16-bit unsigned short to 24-bit unsigned int. Put code name (description of character) in output comments in C code. commit 4feb736e570d15bbc8254d593e0c44ed5066be85 Author: Adam Dickmeiss Date: Tue Mar 15 16:32:51 2005 +0000 Fixed bug #272: Preserve spacing for CCL terms. The spacing is preserved for phrases by saving the prefix (leading) white-space for tokens. Added ws_prefix_{buf,len} in ccl_token to support it. commit 5fcbf8f822406ea89d17737224232a5d0e90f2a4 Author: Adam Dickmeiss Date: Mon Mar 14 12:47:17 2005 +0000 Try again (to fix version) commit 1895c3d3396fa16d7437b1a1e0ee886dd6e62115 Author: Adam Dickmeiss Date: Mon Mar 14 12:41:14 2005 +0000 Fix bad version - should be 2.1.0-1 (was 2.0.1-1). commit e5e21b9c5dcaff4ef91c5a2f97eafd8aad6db11d Author: Adam Dickmeiss Date: Mon Mar 14 11:28:16 2005 +0000 Notes about MARC decoder changes commit adfb1e15b19027b2b2eaa9b89204fee07003842b Author: Adam Dickmeiss Date: Mon Mar 14 11:24:59 2005 +0000 Fix version commit 79b822d1cd0f781768924c32e1fdc1b210e7c368 Author: Adam Dickmeiss Date: Mon Mar 14 11:17:58 2005 +0000 Towards 2.1.0 commit bd2e35d738cb215abd9b113ffe3859a65b39d619 Author: Adam Dickmeiss Date: Mon Mar 14 11:14:21 2005 +0000 Support XInclude for XML config commit 587f46d7d56e57a3cfbbc50dd7fbc15e709190ac Author: Adam Dickmeiss Date: Mon Mar 14 11:13:12 2005 +0000 Example as given in doc commit ce9d3b203396b98a85dbc89bba85ba784ae4a3d8 Author: Adam Dickmeiss Date: Mon Mar 14 11:12:43 2005 +0000 Notes on changes for hosting commit e232998663cbfa8e9c489d99245e530c03223571 Author: Adam Dickmeiss Date: Mon Mar 14 11:12:16 2005 +0000 All elements for YAZ GFS XML config described commit 02e5bbc0d685b1f565cbd71bc7c61858e74c4382 Author: Adam Dickmeiss Date: Sun Mar 13 21:43:00 2005 +0000 Renamed ztest-options.xml to gfs-options.xml. Added GFS common synopsis to gfs-synopsis.xml. Initial work on GFS virtual hosts. commit 681b7be9d32f67cd1d7a970117d5526d348d5bd7 Author: Adam Dickmeiss Date: Tue Mar 8 13:59:08 2005 +0000 Exit GFS if XML parsing fails. commit c8e6236a5d7deea490a8c6902735f70c1515c0dc Author: Adam Dickmeiss Date: Tue Mar 8 11:48:09 2005 +0000 Call chdir before bend_{start,stop}. commit 49566a6ea1cc01c896584427ce1d327f7cd2be7e Author: Adam Dickmeiss Date: Tue Mar 8 11:07:49 2005 +0000 Read directory element of XML config so that server may chdir to proper location. commit 6ee931daadb39712436b7ba95326681de9369c14 Author: Adam Dickmeiss Date: Mon Mar 7 06:09:01 2005 +0000 New test result. commit 49dfd3f8ec91ce7ced774d66f5db9a248e574bbf Author: Adam Dickmeiss Date: Mon Mar 7 06:07:33 2005 +0000 No leading spaces in warning comments commit f514c7fcb9cd0c205b308a1213112317d564874c Author: Adam Dickmeiss Date: Sun Mar 6 21:27:09 2005 +0000 Better diagnostics for bad MARC records. commit 5a63f1bd6974a0fdd748d48ac791a414528f432e Author: Adam Dickmeiss Date: Sun Mar 6 12:54:32 2005 +0000 For record update, open file in binary mode commit af2e686d7372a0a2f4175cbe46d99fadd64bb465 Author: Adam Dickmeiss Date: Sat Mar 5 12:14:12 2005 +0000 WIN32 Updates for GFS to use TLS for control block. commit 7a5a8c9cbc588f8c52f54bacca3e8e07058f713f Author: Adam Dickmeiss Date: Sat Mar 5 09:17:27 2005 +0000 Fix compilation in mode without libxml2 (bug introduced in previous commit). commit c9d151d16586a20585bfb92607a6d578ceb07770 Author: Adam Dickmeiss Date: Fri Mar 4 12:00:00 2005 +0000 buildconf script configures directlry when -d / -c is given commit 7857ed3da7f4c6ed8bd99ad567cb3999b83b2c53 Author: Adam Dickmeiss Date: Thu Mar 3 23:16:20 2005 +0000 Added explain facility for frontend server XML config. Renamed element cql2pqf to cql2rpn. commit 89ebb6f247bae61360fe7ee2997c27e030ee1820 Author: Adam Dickmeiss Date: Wed Mar 2 23:59:22 2005 +0000 Wrap OPACXML in opacRecord as suggested by Larry Dixson. commit 8b2791efeb9e671fabf90c36c6828a5bf71c887b Author: Adam Dickmeiss Date: Tue Mar 1 20:37:01 2005 +0000 Enhancements and new bugs in Generic Frontend Server.. Reworked YAZ GFS XML config. Added pqf2cql support. commit 77d6853aec94df6c69da9cd35d8ba982b9b12299 Author: Adam Dickmeiss Date: Fri Feb 25 17:05:09 2005 +0000 Extended OPAC display utility. OPAC display utility renders bibliographic (MARC) record as well. Added yaz_opac_decode_wrbuf to supplement yaz_marc_decode_wrbuf. commit 9641621e0fbb1ac4eec857d70203637e89d184ce Author: Adam Dickmeiss Date: Fri Feb 25 17:04:45 2005 +0000 yaz_marc_decode_wrbuf no longer Wrewinds WRBUF commit dbb6de2b356dec17a7be4f118c30dad487edac52 Author: Adam Dickmeiss Date: Fri Feb 25 17:03:41 2005 +0000 Bug fix. Dump record content (-m) was duplicated for XML records commit 5265b9beb2ccb4208c503ad60c56daa97a9c194d Author: Adam Dickmeiss Date: Fri Feb 25 09:37:53 2005 +0000 Fixed bug that caused MARC decode to SEGV for some invalid MARC records. Adde marc4 + marc4.xml as a test case for it. commit 455aa1ff25e359fd7efef0a892619940a072e015 Author: Adam Dickmeiss Date: Fri Feb 25 09:36:46 2005 +0000 YAZ 2.0.35 commit 33b63ea317b9ccafa03f00ac12ffcad983dc2b3c Author: Adam Dickmeiss Date: Fri Feb 25 09:36:32 2005 +0000 YAZ 2.0.35 windows version commit 29b35858c0f8b9223be43bca5509b1dbe7635bca Author: Adam Dickmeiss Date: Mon Feb 21 14:37:54 2005 +0000 Fix M4 quotation (square brackets in strings) commit ce36f7f820809631ddafa09616d59d6d8640566d Author: Adam Dickmeiss Date: Mon Feb 21 14:37:16 2005 +0000 Quote 3rd arg to AC_CHECK_FUNC. YAZ 2.0.35 commit 4d2f3abbf60e9b3f49e1d769700ff44cc18d11cf Author: Adam Dickmeiss Date: Wed Feb 9 12:41:45 2005 +0000 Avoid unnecessary logs commit 8a836c1260ff2c7abf6752cc71262f582adf68b4 Author: Adam Dickmeiss Date: Wed Feb 9 12:40:56 2005 +0000 YAZ 2.0.34-2. commit 945e7d349478e8adddecf9aef35b62ec110c71ee Author: Adam Dickmeiss Date: Wed Feb 9 09:18:27 2005 +0000 Increase listen backlog parameter for UNIX domain sockets. commit 1425def96bbdcd685ab8634c4e655766819abd6a Author: Adam Dickmeiss Date: Tue Feb 8 23:43:56 2005 +0000 Fix option for MarcXchange commit 7acd3d5df1b0f5dd02f5ff7203934e598e1680d6 Author: Adam Dickmeiss Date: Tue Feb 8 22:47:14 2005 +0000 New MARCXML test results - due to new warning issued commit 03c6231e409402895462714b02d8d4e3ea463635 Author: Adam Dickmeiss Date: Tue Feb 8 14:58:19 2005 +0000 Dist zlib1.dll instead of zlib.dll commit 4f24bf72fe0d24c0215274d06d4cbd7e487457d0 Author: Adam Dickmeiss Date: Tue Feb 8 14:19:21 2005 +0000 Towards 2.0.34 commit 60a702f390f7e2addfdab79f2328db3ba2897c8b Author: Adam Dickmeiss Date: Tue Feb 8 13:51:30 2005 +0000 Added MarcXchange support. commit b61c6a39b6cc8152500cddb42ba99850249bf43b Author: Adam Dickmeiss Date: Tue Feb 8 13:47:10 2005 +0000 Summarize changes commit d7d0f190d7680a5b1ee4dd1635c3c30240d5782d Author: Adam Dickmeiss Date: Tue Feb 8 13:34:29 2005 +0000 Added check for usleep(3) commit 173c87dff98e363ecf2a663ae9de91bac69e77f5 Author: Adam Dickmeiss Date: Tue Feb 8 13:23:23 2005 +0000 Worked around bug #261 again. Added sleep for EAGAIN case commit 735c4cddf578265a31d960dffffc1bf65b75419c Author: Adam Dickmeiss Date: Tue Feb 8 01:01:42 2005 +0000 Look for docbookx.dtd in more places. commit 61de1faf970a0b81ef51c3c460510e186e1abee2 Author: Adam Dickmeiss Date: Mon Feb 7 11:23:47 2005 +0000 WIN32 compile fixes. No TLS for control block yet commit 65584e65c2b3b76e16c2ff984975a44813cf5353 Author: Adam Dickmeiss Date: Mon Feb 7 11:23:18 2005 +0000 Avoid ANSI inline declaration commit e728acf714651b3da99c282d27294e45981fdf91 Author: Adam Dickmeiss Date: Fri Feb 4 20:27:19 2005 +0000 Fix xmlns for SRW diagnostic in yaz_srw_diagnostics commit 85e3c8107b667d8c0701dc26974fbb3b17b74a4f Author: Adam Dickmeiss Date: Fri Feb 4 13:28:47 2005 +0000 Fixed problem with connect on Unix domain sockets that returned errno=EAGAIN. That is now treated as EINPROGRESS error. commit 7a896baab71b355189e437905513f4fdf53d1f5d Author: Adam Dickmeiss Date: Thu Feb 3 09:09:55 2005 +0000 Remove old-style logging commit 785a4eb49c2023ac55d8eac471cefcddf6d19e80 Author: Adam Dickmeiss Date: Wed Feb 2 23:27:19 2005 +0000 Fix MARC test case commit 1b22167f72a2de519e28be87aad12b1633cad835 Author: Adam Dickmeiss Date: Wed Feb 2 23:27:05 2005 +0000 Enable test case for bug #260 commit 5d66cee9efbd06349b0445661bbfd1de69ce6d75 Author: Adam Dickmeiss Date: Wed Feb 2 23:26:38 2005 +0000 Fix bug #260: Multi combining MARC-8 chars not converted properly commit 4050fa4e2dbbd93fe6297c2cab8e59ed01e9060d Author: Adam Dickmeiss Date: Wed Feb 2 23:25:08 2005 +0000 Never assume non 00X have controlfields commit 96a3a7bc95bf4014fb1224a7e3ad711e5e20e785 Author: Adam Dickmeiss Date: Wed Feb 2 23:07:56 2005 +0000 Put two spaces before datafield end tag (includes subfields) commit 1769f2fbe5b8de995b351754eec51ccdb1824dd4 Author: Adam Dickmeiss Date: Wed Feb 2 20:50:38 2005 +0000 Fixed bug #263: YAZ MARCXML dump shows extra spaces after control fields. Added yaz_marc_subfield_str which defines subfield lead string which is used in YAZ_MARC_LINE format. Default string is blank+$. Added yaz_marc_endline_str which defines end of fields string used in YAZ_MARC_LINE format. Default string is newline. commit 8258e03b8aca7dd78c650b6461e240e3f22cb8dd Author: Adam Dickmeiss Date: Wed Feb 2 20:25:37 2005 +0000 Fix statserv_getcontrol for non-threaded YAZ commit 7d212bcdc9d80ed8cc48e6dd72cb63855c936259 Author: Adam Dickmeiss Date: Wed Feb 2 17:11:05 2005 +0000 Added yaz-client command scansize commit 12cb41de8229035b3f5ca7268c6bb3fa62f19828 Author: Adam Dickmeiss Date: Wed Feb 2 10:17:02 2005 +0000 Added test case for bug #260 commit 273ad9b2ed17eaf4daa43e321ad4b96be2b92518 Author: Adam Dickmeiss Date: Tue Feb 1 21:07:19 2005 +0000 Better diagnostics for iconv test. Added case for bug #258 commit 45e7b7e3268c9d93cdecb1e9b363e2c02ae1efc4 Author: Adam Dickmeiss Date: Tue Feb 1 21:06:37 2005 +0000 Fixed bug #258: marc-8 to utf8 fails for some composed sequences commit 6bc4a3e8b7e73275e8b37e6de40e4c596302bd51 Author: Adam Dickmeiss Date: Tue Feb 1 17:23:36 2005 +0000 Added include stdlib.h commit c519e4716646be3b24f7d4d3de99e06e423da865 Author: Adam Dickmeiss Date: Tue Feb 1 14:46:47 2005 +0000 Added support for multi-homed YAZ frontend server. A backend config may be choosed based on host and/or port. For Z39.50 host is picked from OtherInfo in InitRequest (VAL_PROXY OID). For HTTP, host is picked from HTTP header. Configuration is XML based . Libxml2 is required. commit ee43c59df798a12d811827cfb2bb64aca37d492a Author: Adam Dickmeiss Date: Tue Feb 1 14:43:50 2005 +0000 Allow text/plain as HTTP Content-Type for SRW HTTP POST. I can't get ab to send text/xml. commit 31e3a0ef5a0866477a3b54dc6ffbeb0aca4e0029 Author: Adam Dickmeiss Date: Tue Feb 1 14:37:47 2005 +0000 Added member user for COMSTACK that is an opaque pointer for user-defined data. commit 25c0a712af079e5efd0b4c16a3c9094e83879b82 Author: Adam Dickmeiss Date: Thu Jan 27 09:08:42 2005 +0000 Fixed bug #255: EXTERNAL decoding with ASN.1 types in octet strings. Added a few doxygen comments as well. commit 019f1f2c2ea9a8f2b31904097933562c07365083 Author: Adam Dickmeiss Date: Thu Jan 27 09:06:51 2005 +0000 Added prototype for zget_init_diagnostics_octet. Added a few doxygen comments commit c74c6895815390dd19ec8b4f346bdb32dc1b07bb Author: Adam Dickmeiss Date: Thu Jan 27 09:06:12 2005 +0000 Added zget_init_diagnostics_octet which is similar to zget_init_diagnostics but encodes the EXTERNAL data in the octet-aligned arm. commit d2fc23a41ae7eb6bd5f6e76a45530ede776bd018 Author: Adam Dickmeiss Date: Thu Jan 27 09:05:09 2005 +0000 Fix printing of some non-zero terminated strings. WS updates. commit f0c297969e3fe8d043ef18022180b305b21b24a9 Author: Adam Dickmeiss Date: Thu Jan 27 09:04:07 2005 +0000 Fix comments for some ODR members commit fe575eb97799f141b6e97d17c0e64619c4a9cd03 Author: Adam Dickmeiss Date: Fri Jan 21 09:23:27 2005 +0000 Do not use acquire locks (NMEM_{ENTER,LEAVE}) in nmem_mutex_{create,destroy}. WS updates. commit 437e30b2d7d34613611192acf4eb7e3be153b3b9 Author: Adam Dickmeiss Date: Wed Jan 19 09:18:08 2005 +0000 Make scan logging prettier commit 274e56850a285f2b4fa1c3e5aafd3dcc2999f990 Author: Adam Dickmeiss Date: Wed Jan 19 08:26:59 2005 +0000 Do not set HAVE_.. stuff for WIN32 commit 49749c69ee15dee28948d353092d1bd8626b72df Author: Adam Dickmeiss Date: Wed Jan 19 08:26:44 2005 +0000 Added include sys/types.h if it exist. Added include sys/stat.h on Win32 commit 4e82b831a8ac31e25b246a631acde354d8161688 Author: Adam Dickmeiss Date: Mon Jan 17 13:09:43 2005 +0000 Added include stdlib.h commit 479669a3e2da231aaf11ff2a66ac5b72a4460d26 Author: Adam Dickmeiss Date: Mon Jan 17 13:08:53 2005 +0000 Added include sys/time.h commit d3b97cc263939f772a9cd0cae6c0e147278d2e96 Author: Adam Dickmeiss Date: Mon Jan 17 13:03:27 2005 +0000 Added include stdlib.h commit 6cdf6f2a3f67ce56d13b64a64a2a192f51ac445c Author: Adam Dickmeiss Date: Mon Jan 17 12:53:04 2005 +0000 Fix MAC compilation commit 811a01b02b3bf8851f13e1cdef1c01f755aa4ca5 Author: Adam Dickmeiss Date: Mon Jan 17 10:29:00 2005 +0000 Fixed includes for FreeBSD commit 5fc363ebc5bf97dc2285bceaa742b69e19c4c8b2 Author: Adam Dickmeiss Date: Mon Jan 17 10:19:48 2005 +0000 Do not declare several variables in non-XML mode commit 2407cf36ac1dfe34cbfc2a5d1c1695976233e611 Author: Adam Dickmeiss Date: Mon Jan 17 10:10:00 2005 +0000 Bump version to 2.0.33 commit 5766857b4ed71f0ebe01b1f5fb2ebfb052bd5dfa Author: Adam Dickmeiss Date: Sun Jan 16 23:20:55 2005 +0000 Define HAVE_SYS_TYPES_H in VS makefile commit 92a1c29ad9003d7dad229fd5170ed83269c87658 Author: Adam Dickmeiss Date: Sun Jan 16 22:12:39 2005 +0000 Minor include updates to make Windows happy commit 77ab03610562a282025ed218c7a0b3f8dfe2a214 Author: Adam Dickmeiss Date: Sun Jan 16 22:12:02 2005 +0000 Assume sys/stat.h is available on Windows commit f63c8f02c94733255df60469574324c7ef211f3e Author: Adam Dickmeiss Date: Sun Jan 16 22:01:13 2005 +0000 Added check for various headers, since comstack.h no longer include them commit 3126e48f1dcdd5684ef3677ac4cd6b1cc099f107 Author: Adam Dickmeiss Date: Sun Jan 16 21:56:42 2005 +0000 Do not use exit commit d35bf56a106a37b249e6ee4ab9f7eabd86662edb Author: Adam Dickmeiss Date: Sun Jan 16 21:56:24 2005 +0000 include stdlib.h commit 825d22351b1d59c71e98357b4931bf7bb67daa3a Author: Adam Dickmeiss Date: Sun Jan 16 21:51:49 2005 +0000 Removed away include of system headers in comstack.h. Instead include them in the various implementation C files. Added more headers in AC_CHECK_HEADERS. commit 434f8168ad00b6530158055cb9c7b4adaf9ebd9f Author: Adam Dickmeiss Date: Sun Jan 16 21:40:51 2005 +0000 WS update commit bcdea3c551bcbbbb94d69fbea014f26c85ff7ef7 Author: Adam Dickmeiss Date: Sun Jan 16 00:16:56 2005 +0000 Update for Libxml2-2.6.15, zlib-1.2.1 commit 4c176312acdc3444c9afc820f76a393e64668e52 Author: Adam Dickmeiss Date: Sat Jan 15 19:47:08 2005 +0000 Bump year commit 163ca1323081c3a85323b55cb0ff668b8f7c83a1 Author: Adam Dickmeiss Date: Tue Jan 11 12:13:18 2005 +0000 Towards 2.0.32 commit 2b3dd45defce5c722aea0d5cecfbd8db7df55818 Author: Adam Dickmeiss Date: Tue Jan 11 12:07:54 2005 +0000 Added SRW Scan support in yaz-client and Generic Frontend Server. commit 1c24ea5eab2eb460ba34f3b1b64fd7219916db4c Author: Adam Dickmeiss Date: Tue Jan 11 12:05:32 2005 +0000 match_xsd_string returns empty string rather than NULL for empty CDATA commit d85dad0f037288e50eddd2883f42403ff038c057 Author: Adam Dickmeiss Date: Tue Jan 11 10:50:06 2005 +0000 Added SRU decode of maximumTerms, responsePosition and extraRequestData commit fe4819bb8bb296f3d6b3db9121cd648672c95537 Author: Adam Dickmeiss Date: Tue Jan 11 10:48:47 2005 +0000 Fixes for value and pScanCluase in scan SRW codec commit 99deca38579f9e6c01550312e8004477a26921a8 Author: Adam Dickmeiss Date: Tue Jan 11 10:44:07 2005 +0000 Check for database in ztest_scan commit d62fb74edd3775095d23f2bffbace2b60cd3c57f Author: Adam Dickmeiss Date: Sun Jan 9 21:52:48 2005 +0000 Added whereInList member to SRW Scan Term commit 40317def0c00a4bb9ed1ec8c195af46e6c02c463 Author: Adam Dickmeiss Date: Sun Jan 9 21:50:26 2005 +0000 Rename pqf scan parameter from x-ScanClause to x-pScanClause commit f64aa61c61bf8bf851d7b66a5fc137669dc77452 Author: Adam Dickmeiss Date: Sat Jan 8 01:20:18 2005 +0000 Added support for SRW scan in yaz-client commit 5c3d2d2ab097e4bb59ba5718a396b020a2d302c0 Author: Heikki Levanto Date: Fri Jan 7 10:28:28 2005 +0000 Added a warning (always to stderr) when opening the log file fails commit 7788edff9108cafc593759e9e406d6da6509c799 Author: Adam Dickmeiss Date: Wed Jan 5 10:29:42 2005 +0000 Check that assignments to NMEM memory for some basic types commit 0e79cb04d61eec08580aa2ccc2883b9459db3cf1 Author: Adam Dickmeiss Date: Wed Jan 5 10:23:41 2005 +0000 Only use type 'long long' when available. commit d35622cea47fdf58f47d31023e28e49eaf1ecb47 Author: Mike Taylor Date: Tue Jan 4 21:31:44 2005 +0000 Recognise yet ANOTHER location where docbookx.dtd may be found -- this time, it's /usr/share/sgml/docbook/dtd/4.2 which is what my Debian testing laptop uses. Must be a change in sarge. commit 8aa7ee02ee4abdda2f19b42236600f2954ce6c05 Author: Mike Taylor Date: Tue Jan 4 21:29:10 2005 +0000 Ignore generated file tstlog commit ff0a9444cf86678ba0838569d1d610fa9fda9c57 Author: Mike Taylor Date: Tue Jan 4 21:28:06 2005 +0000 nmem alighment. commit 42dcf1902943937854ceacc8e3c72ec40fe2f48c Author: Mike Taylor Date: Tue Jan 4 21:27:54 2005 +0000 Return aligned blocks on the smallest boundaries that are suitably aligned for all possible types on the particular architecture YAZ is being built for. commit 11b2bb8143a6831d797df9f042ade8078f465802 Author: Adam Dickmeiss Date: Tue Jan 4 09:41:34 2005 +0000 Bump version to 2.0.31 commit 5b03be7b32fa5963aed1e575478a716b031cb17f Author: Adam Dickmeiss Date: Tue Jan 4 08:34:41 2005 +0000 Fix date commit 22bdebf29b4a1be5186ce72960a978d7adc8b8c6 Author: Adam Dickmeiss Date: Tue Jan 4 01:39:22 2005 +0000 Mention most important changes commit 9320dd82ebf2e4c0e656139618b897c26331702c Author: Adam Dickmeiss Date: Tue Jan 4 01:25:20 2005 +0000 Align NMEM blocks to 2*sizeof(long) commit 87307e08d8caeab5cd574fbe696878e8f0469e49 Author: Adam Dickmeiss Date: Mon Jan 3 13:36:06 2005 +0000 Towards 2.0.30 commit 6c35039e69102dbbce08e8f39a2fbbade4406c16 Author: Adam Dickmeiss Date: Mon Jan 3 13:28:35 2005 +0000 Towards 2.0.30. commit bc1239ae8cd63c0d42fbffebf68cdb452159f8f2 Author: Adam Dickmeiss Date: Mon Jan 3 12:34:09 2005 +0000 Towards 2.0.30 commit 6480fba1d587bfbd67e0a3e7775969669f8b2b5b Author: Adam Dickmeiss Date: Mon Jan 3 11:56:08 2005 +0000 Fix threading commit 66d6c2af06d2b293f183cfead975924e9da709c6 Author: Adam Dickmeiss Date: Mon Jan 3 09:18:36 2005 +0000 For daemon mode (-D), let parent wait till child has created PID file commit 9b9bfb10cc46f2d97c38bc9a0a9f96e9a5f385f4 Author: Adam Dickmeiss Date: Sun Jan 2 20:31:39 2005 +0000 Make negotiationCharsetRecords of type int commit b8cceb769510f6f0ebaac93e6b056de7950c53e8 Author: Adam Dickmeiss Date: Thu Dec 30 00:25:20 2004 +0000 Cast PIDs to longs so they can be printfd commit 6fad29ebb31777f3e01ad80f0c59a7a4dede9989 Author: Adam Dickmeiss Date: Thu Dec 30 00:21:12 2004 +0000 Avoid signed char subscript commit f2f3c5ba7374be95aba4f8f35bccd3c4c067e625 Author: Adam Dickmeiss Date: Thu Dec 30 00:20:15 2004 +0000 Include unistd.h always commit 905df6869e5ad8ab9f34590cce771fe50c444473 Author: Adam Dickmeiss Date: Thu Dec 30 00:11:00 2004 +0000 Avoid signed char subscript commit 2af25caef50026e60e2ae91dbf175e86c31463df Author: Adam Dickmeiss Date: Wed Dec 22 23:48:34 2004 +0000 Remove extra space in request log output commit 8071f0286b3c551df57bc22b11125d00d12725e6 Author: Adam Dickmeiss Date: Wed Dec 22 23:47:11 2004 +0000 Change GFS so that it listen&accept in parent process rather than child. This avoid the synchronization pipe, and seem to make the GFS a little faster. commit 2f5963dcec74ca26d9b0c2d75b007d98efe56f2e Author: Adam Dickmeiss Date: Wed Dec 22 23:45:13 2004 +0000 Added OID for charneg-4. commit 672bc1d4d13f12c0d291b0cff62be84fbe69f961 Author: Adam Dickmeiss Date: Tue Dec 21 20:25:39 2004 +0000 Command negcharset may take up to three args charset records version where records is an integer (0=false, 1=true), version is charset negotatition version (3 or 4). commit 9378c985aa6ea1ec9d5ddd6c34978051312dd035 Author: Adam Dickmeiss Date: Tue Dec 21 00:34:31 2004 +0000 When receiving no records in present response don't throw non-surrogate diagnostic "decoding failed. Instead add surrogate diagnostic record 14: System error in presenting records. commit dc641263aab10156d81d8c053ecd66dce9a46b85 Author: Adam Dickmeiss Date: Tue Dec 21 00:31:03 2004 +0000 Minor tweaks in logging (mostly for SRW search) commit ab405e9374f3fbbff57b5c69e3ee9bf9c7aa7351 Author: Adam Dickmeiss Date: Mon Dec 20 23:38:39 2004 +0000 Prefix PRN/Type-1 queries with RPN: rather than Z: commit cc8dd1424e89a4ad96ce0b30a1bd0a6ecf4f8715 Author: Adam Dickmeiss Date: Mon Dec 20 23:38:03 2004 +0000 Fixed bug in pack_records that caused piggyback searches to crash. Improved logging of diagnostics a bit. seshigh now using zget_- utilities. commit d40d934f291620fb4f37664c6908386297170371 Author: Adam Dickmeiss Date: Mon Dec 20 23:36:13 2004 +0000 Define YAZ_USE_NEW_LOG for YAZ itself commit b66b19957ce2c2c4db41ca6986bd7978b42db618 Author: Adam Dickmeiss Date: Mon Dec 20 23:35:42 2004 +0000 Added functions to initialize various structures for diagnostics: zget_DefaultDiagFormat, zget_surrogateDiagRec, zget_init_diagnostics, zget_DiagRecs, zget_DiacRec. commit 3e818921e959b654fe072fc7419f1b7f89007b21 Author: Heikki Levanto Date: Mon Dec 20 15:52:53 2004 +0000 Added YLOG_FLUSH to the default log level, to avoid problems on Solaris. Maybe this should be conditional on the OS, as it works fine under Linux? commit 5475567b7f05fbc245cedb1b3ecdbc63ac671685 Author: Adam Dickmeiss Date: Thu Dec 16 08:59:56 2004 +0000 Include marcdisp.h so that atoi_n gets public on WIN32 commit 130c4f389f6e2166f533beb831e991f806130f72 Author: Adam Dickmeiss Date: Thu Dec 16 08:59:36 2004 +0000 Fix declaration (WIN32 section) commit 86385826e403a1e2e194f41657e7e8470c33d4ed Author: Adam Dickmeiss Date: Wed Dec 15 09:10:12 2004 +0000 Get rid of tex messages commit bf3a7598b58514d7f8d864ccc5e37019af9455a6 Author: Adam Dickmeiss Date: Tue Dec 14 10:52:13 2004 +0000 Include stddef.h because of size_t use in header. commit 91905e9defa685f0c38914372a188721c38d0942 Author: Adam Dickmeiss Date: Mon Dec 13 20:17:41 2004 +0000 Change wording WRT ylog.h/log.h commit 202a9b4632862b584c3d024881d4bbe0d5b2bee5 Author: Adam Dickmeiss Date: Mon Dec 13 20:16:50 2004 +0000 Change order but not semantics regarding old LOG_-defs. commit f4ed92d039e200b903bd7330a9fd58bd11d71825 Author: Heikki Levanto Date: Mon Dec 13 14:31:19 2004 +0000 Included xmalloc.h from log.h, if usingthe old system, as it used to be there... If using new system, you need to include it yourself commit f4c095a042b1bcccb78136be87944e46412386aa Author: Heikki Levanto Date: Mon Dec 13 14:21:54 2004 +0000 Moved back to a single log.h, with the new #define YAZ_USE_NEW_LOG commit 8894d816ae5a3dfaa800dde0d6442f2bef144782 Author: Adam Dickmeiss Date: Mon Dec 13 14:15:55 2004 +0000 Define YAZ_USE_NEW_LOG=1 if app require YAZ > 2.0.28 commit 769837bc0ae28324b0a793549e1a20036e42e2e5 Author: Heikki Levanto Date: Fri Dec 10 10:42:33 2004 +0000 Deprecated yaz-util.h with a warinng in place. Re-enabled the warning in log.h Note: All these warings can be avoided with CFLAGS="-Wall -g -D YAZ_USE_OLD_LOG" ./configure commit 8862e24160fcdd1d99da8b8203e6d4fe942b91de Author: Adam Dickmeiss Date: Thu Dec 9 09:37:00 2004 +0000 Fixed place for YAZ_END_CDECL commit bbee0df765624f1596f9063d7284dc8874c66056 Author: Adam Dickmeiss Date: Thu Dec 9 09:30:00 2004 +0000 Document commands: list_all, set_auto_reconnect, negcharset, displaycharset, register_tab, sleep, zversion, options. commit 307671c871f04d55325ed94fc2c403797376efa3 Author: Adam Dickmeiss Date: Thu Dec 9 09:27:51 2004 +0000 Document .yazclientrc commit 3a98dc2732d34893d13b3b10e9cc9dd216ec01ae Author: Adam Dickmeiss Date: Thu Dec 9 09:25:44 2004 +0000 3rd argument for charset is marccharset commit 20554c224bb8e4dfec150889ebd91c6494fb92ce Author: Adam Dickmeiss Date: Thu Dec 9 07:53:21 2004 +0000 Implemented commands negcharset and displaycharset that specifies character set for negotiation and display respectively. Command charset works as usual and is implemented using the two. commit 6d8cd9d9df0209d1103dd9d4d78fd2879dce1b58 Author: Adam Dickmeiss Date: Wed Dec 8 09:08:01 2004 +0000 Had to remove. We will enable after has been public available for one or two months. commit cfdf8897f78ff0fe95ade83ba62c1952a9979779 Author: Adam Dickmeiss Date: Wed Dec 8 09:06:06 2004 +0000 Include old yaz/log.h so that old things still work (for some time) commit 74d40e99d2ea24a62dd59ec39dd9c18a825a533d Author: Adam Dickmeiss Date: Thu Dec 2 19:12:52 2004 +0000 Fix double-free in code that handles encoding errors (from backend) commit aeba0c2ad379a8779cd3f97965d10ad2beaf0dae Author: Adam Dickmeiss Date: Thu Dec 2 14:04:17 2004 +0000 Return values in cmd_source_ functions commit 085ad99f5717a64563effb8d8f1b8b36ec1182f5 Author: ja7 Date: Thu Dec 2 13:55:35 2004 +0000 Fixed bug 227 and bug 228 commit 242dd9f346cdc5c8295d99c27868e139d2b3e4b0 Author: Heikki Levanto Date: Fri Nov 26 11:06:29 2004 +0000 Added a way to get around the old log warning commit 9c0401b44ce62a030b9968ccbf7a5b445b2ab506 Author: Adam Dickmeiss Date: Fri Nov 26 11:01:05 2004 +0000 yaz-log.7 man pages part of RedHat package yaz commit 05a79698b4956c63642ebd0b4deedf56098c255c Author: Adam Dickmeiss Date: Fri Nov 26 11:00:27 2004 +0000 yaz-log.7 man pages part of Debian package yaz commit 14f4eaaffa771604e1cbb54edc51d6f213a3e30c Author: Heikki Levanto Date: Fri Nov 26 10:58:38 2004 +0000 Reintroduced the bit "defines for those log bits that are deprecated and not defined in the new ylog.h commit f5234a7d67df11584a2f29b35d999a603ab9cc80 Author: Adam Dickmeiss Date: Thu Nov 25 09:43:10 2004 +0000 Treat field as having subfields even if first char is blank/other commit b6ed17b957403d2db0475df7759de72ce3eda2ee Author: Heikki Levanto Date: Tue Nov 23 14:11:03 2004 +0000 Added a man page for yaz-log (7) commit 27a9c86e28cd54204d12517a94b338b30805c747 Author: Heikki Levanto Date: Tue Nov 23 14:10:47 2004 +0000 Re-enabled the -v notime option, it was broken. commit 469ab1a5bc1014b93bedd8dc034dbbd779ab4a00 Author: Adam Dickmeiss Date: Mon Nov 22 10:54:23 2004 +0000 Fix new bug introduced by previous commit (../yaz* not used) commit 6a07d35e5125e4a07ffcc75cfbd63052790b4605 Author: Adam Dickmeiss Date: Sun Nov 21 21:56:28 2004 +0000 Update SRW/SRU diagnostic message definitions and store them in separate source: diagsrw.c. commit 783a6ef05f341c0bb27bac3e78def89df7fc37df Author: Adam Dickmeiss Date: Sun Nov 21 21:55:31 2004 +0000 About log system changes commit 08eb8faf0366e6e0814ecd80ddd0ce6392424a52 Author: Adam Dickmeiss Date: Sun Nov 21 21:55:15 2004 +0000 Update log chapter for new log system commit c3241bc91ec9cf0ff52f107df66d1ea2718752bf Author: Adam Dickmeiss Date: Fri Nov 19 18:31:05 2004 +0000 Fixed bug #212: make distcheck uses global yaz, not a local one commit b4a967015d26ad86b1b089c77df61d14f71ae231 Author: Heikki Levanto Date: Fri Nov 19 10:07:08 2004 +0000 Moved the #define of logf back into log.h, so that it won't be available innewer software using ylog.h. It conflicted with a math function commit 95dfab01523e56dd46cba0dde323c9dd24585a48 Author: Heikki Levanto Date: Fri Nov 19 09:59:31 2004 +0000 Fixed a CDECL thing that broke yaz++ commit 3b96525a40981e162b959f3e842e0ff20e314320 Author: Heikki Levanto Date: Thu Nov 18 15:18:10 2004 +0000 Deprecated log.h and created a new ylog.h Renamed all LOG_ #defines to matching YLOG_, and used them everywhere Used the new dynamic log system in deveral places commit a94620ffd6001681474a94f5de767f168d772d1c Author: Heikki Levanto Date: Wed Nov 17 13:03:07 2004 +0000 Added an option to specify -word in the loglevel parsing, to clear a specific bit: -v all,-log commit 30e703f75c26ad4b564e380d586d122edd49046d Author: Adam Dickmeiss Date: Wed Nov 17 00:18:54 2004 +0000 Modify wrbuf_put_zquery and wrbuf_scan_term so the generated PQF code is valid for reparsing. commit b2277d52bde3d48087e288d23f78067ec561a8ed Author: Adam Dickmeiss Date: Wed Nov 17 00:17:17 2004 +0000 For @prox operator, the "which" member being known or private was not set correctly. Use odr_intdup where appropriate. commit 713dfee4f059554f5450ef5f914a8bc4d8648af3 Author: Adam Dickmeiss Date: Tue Nov 16 22:51:52 2004 +0000 Avoid generating tsticonv.log commit e2652e701d723d6bf549ee361e140385748b7ce6 Author: Adam Dickmeiss Date: Tue Nov 16 22:44:31 2004 +0000 Clean up temp CQL test files commit a4916ca87f9921a945ef68479f33c2bfe6fa6897 Author: Adam Dickmeiss Date: Tue Nov 16 22:10:29 2004 +0000 Avoid new ANSI inline declaration commit 8233c05994729938fdfe9ac5865094a44be9fdfb Author: Adam Dickmeiss Date: Tue Nov 16 17:12:28 2004 +0000 Make sure test only write to build directory to make distcheck happier. commit e958092d7a7b66ff71cb05434b900d871e1f30fa Author: Heikki Levanto Date: Tue Nov 16 17:08:11 2004 +0000 Improvements in the log system, especially on the server side. Now logging on levels 'server', 'session', 'request', and 'requestdetail', and on 'request', making only one-line log entries for each request. Documented it too! commit 9a32992b1041bf622fdc4825262f5f7110494cce Author: Adam Dickmeiss Date: Wed Nov 10 09:26:43 2004 +0000 Bump version to 2.0.29 commit c23776e0c46dc3ae8bff5e4f4a2086a44fedbf07 Author: Adam Dickmeiss Date: Tue Nov 9 20:54:08 2004 +0000 Use strchr,strrchr instead of index/rindex. commit b01dc00d2cc67780bc5dde45de163ee6b61f844d Author: Adam Dickmeiss Date: Tue Nov 9 20:42:32 2004 +0000 Added marc these regressions test MARCXML records commit d684d84696ff6bb6ed8eb5593889d5968282718f Author: Adam Dickmeiss Date: Tue Nov 9 20:35:30 2004 +0000 Towards 2.0.28 commit e3eb1582ad4be427e5faf145d6a51fe0e29376f8 Author: Adam Dickmeiss Date: Tue Nov 9 20:33:48 2004 +0000 Announce 2.0.27 because of new functions in log.h commit 4a09e50d43c74f8a07f76f44575ed9c78dcab925 Author: Adam Dickmeiss Date: Tue Nov 9 20:31:13 2004 +0000 Describe the new log utilities commit 5d309bb5cfcf1fd46efb31c6d240aeb36fc915b5 Author: Heikki Levanto Date: Thu Nov 4 14:19:58 2004 +0000 Fixed a bug that caused extra [level] tags in the log commit 3dc194a876fec3eeb9623f7a14cabf7eb0b4a2dc Author: Adam Dickmeiss Date: Wed Nov 3 22:33:17 2004 +0000 Using blanks for assignments (no code changes) commit 36197e32322202a7518d821aa7306cf24de77c39 Author: Adam Dickmeiss Date: Wed Nov 3 22:30:52 2004 +0000 Added test program for logging. commit 7244158c402939245200a87f9f85562f6b06cba2 Author: Heikki Levanto Date: Wed Nov 3 17:52:53 2004 +0000 Fixed a silly typo that made a numeric -v crash commit 8d57c383d5f05e759cb31b33a5b78b3cea2033d6 Author: Heikki Levanto Date: Wed Nov 3 14:25:06 2004 +0000 Added dynamic log-levels: - yaz_log_mask_str (and _x) can now be called with a previously unknown name, which will get a new log bit assigned. This happens in most programs when parsing the -v command line option. - yaz_log_module_level can be called with a name, and if that name has got a bit defined, this bit will be returned, otherwise zero. This can then be used as the log_level in yaz_log and logf calls. - the names are cleaned from prefix paths and suffixes, so ./foo.c becomes foo. Also added a routine to set the maximum log size, and a few comments in log.h commit 6f5c63a8b759040d31028a4f1437a9cbc7a21fd6 Author: Heikki Levanto Date: Tue Nov 2 15:47:31 2004 +0000 protecting log rotation with a mutex commit 22f22577949124de2a1761bbbe195189d84018de Author: Adam Dickmeiss Date: Tue Nov 2 14:13:11 2004 +0000 Ignore .lib, .map, .exp commit 0e967e932ab262eb724f19922594359a4bb3336e Author: Heikki Levanto Date: Tue Nov 2 14:13:09 2004 +0000 Rotating logfile if exceeding a gigabyte (need to add a semaphore around it, for multithreaded things) commit e667f42aeb4ad7ef6c863ac9a8d888371a0ba90e Author: Heikki Levanto Date: Tue Nov 2 13:52:54 2004 +0000 Not buffering the log file, unless LOG_FLUSH is set. Reopening if necessary commit 05e1dd414a3bcf5601a620ecd7b85f530517bc64 Author: Heikki Levanto Date: Tue Nov 2 12:57:54 2004 +0000 oops, forgot to give a name to LOG_FLUSH. Now added commit 86ed958b7fd25d668f426da532a2a5c0a78bc9ef Author: Heikki Levanto Date: Tue Nov 2 12:55:04 2004 +0000 Added a new log flag LOG_FLUSH that forces flushing the log after every write. Yaz used to do this unconditionally, now it only does if LOG_FLUSH or LOG_DEBUG are set in the log level. Presumably speeds up stuff that writes many log entries... commit d7b75f236b92e98bff554317e123753d0549c3c3 Author: Heikki Levanto Date: Tue Nov 2 11:37:21 2004 +0000 yaz_log_time_format sets the format of the timestamp. See man 3 strftime Calling with "old" sets to the old format "11:55:06-02/11" Calling with NULL or "" sets to the new format "20041102-115719" If not called at all, the old format is used, for backward compatibility commit d4f295af18b4678342ac477c3cbc6705438a035b Author: Adam Dickmeiss Date: Mon Nov 1 21:19:08 2004 +0000 Use Sleep(mseconds) on Windows commit f5f6f769af0077f31d0fae81b9bbdeab18f10544 Author: Adam Dickmeiss Date: Mon Nov 1 20:59:23 2004 +0000 Towards 2.0.27 commit 16ba4ea8a26971aff40e56398d6d826fd6107889 Author: Adam Dickmeiss Date: Mon Nov 1 20:16:44 2004 +0000 Reformat a bit commit 87ca9b11fd146605fc3b54fcafbcad9869487295 Author: Adam Dickmeiss Date: Mon Nov 1 20:13:02 2004 +0000 Fixed bug #148: CQL parser may leak. CQL nodes now allocated using NMEM instead of xmalloc. For this reason, few prototypes were changed in include/yaz/cql.h. commit 49cab9854f19abbef3a618a41514872039c316a3 Author: Adam Dickmeiss Date: Sun Oct 31 19:23:22 2004 +0000 Bug fix: explainRequest decoder did not initialize some members when explain record was missing. commit bbc84cdd3100e834c38e20aebe200ea99dcf170c Author: Adam Dickmeiss Date: Wed Oct 27 08:18:55 2004 +0000 Return proper value for --comp (yaz-asncomp) commit 05c274ef315384faafcc5900c17468f0ea2474e6 Author: Adam Dickmeiss Date: Fri Oct 15 00:18:59 2004 +0000 Doxyfile file description. Indentation. No change of code. commit 0420d74c15267c4cb7903503b51937f836096b7a Author: ja7 Date: Tue Oct 12 13:23:46 2004 +0000 Added a sleep command .. commit 451c575ae8c09aea34037ae2e7169337b38e89d0 Author: Adam Dickmeiss Date: Sun Oct 10 22:44:34 2004 +0000 Fix setting of AM_CPPFLAGS commit 1e19310ec1746e0c27f4cb8135650c875f1e8dbd Author: Adam Dickmeiss Date: Sun Oct 10 22:21:01 2004 +0000 Testing Deb commit 75dee2a58a9764c56c61fe40303f34d93db3ce8e Author: Adam Dickmeiss Date: Sun Oct 10 22:17:55 2004 +0000 Remove make rpm rule that is never used anymore commit 942203900c897670ff5b764a1d128b190653e334 Author: Adam Dickmeiss Date: Sun Oct 10 22:17:29 2004 +0000 Abort if OpenSSL does not exist and --with-openssl is given commit e25948f52421d8d0a1914f77dd7627db1aca7bb7 Author: Adam Dickmeiss Date: Sun Oct 10 21:48:18 2004 +0000 Dont define HAVE_WCHAR_H since wchar_t is a 16-bit int rather than a 32-bit int. So wchar_t can't represent the whole UNICODE anyway. commit 2d2263d4725895b9bc52a91d3a2b1ceca85e2919 Author: Adam Dickmeiss Date: Sun Oct 10 21:43:21 2004 +0000 Use other type to avoid warning commit 00a44ce036714ab57696ef7ca415e69422745706 Author: Adam Dickmeiss Date: Sun Oct 10 21:12:25 2004 +0000 Update NEWS with most important changes commit b09f6cf9d1feacf68efcf92ccc57d1e635de414e Author: Adam Dickmeiss Date: Sat Oct 9 08:49:55 2004 +0000 Fixed bug #176: Dont throw diagnostics on empty SRU args. commit 7c5d526290c4d003ce685a8a988934c0b7e631cc Author: Adam Dickmeiss Date: Sat Oct 9 08:21:38 2004 +0000 Fixed bug #172: surrogate diagnostics in SRW lacking NS. commit be3968a60792190ba6a87b9c60513c1fa761f512 Author: Adam Dickmeiss Date: Sat Oct 9 08:03:26 2004 +0000 Fixed bug #172: RPM builds does not enable SSL. commit b54dc2e9cad5da1763387f64146662a331cdd127 Author: Adam Dickmeiss Date: Thu Oct 7 07:42:34 2004 +0000 Not in use commit f53079fadcadb1eeef45e1e6d254801d984d6068 Author: Adam Dickmeiss Date: Sun Oct 3 22:34:07 2004 +0000 Initial work for Doxygen based YAZ reference commit 740ed563d470a188a1cf09971de266e8a2a830ce Author: Adam Dickmeiss Date: Sat Oct 2 13:41:46 2004 +0000 Update documentation about CQL nodes commit 70fa293577cb6f8077293cd16ace73d9e3e45e08 Author: Adam Dickmeiss Date: Sat Oct 2 13:41:14 2004 +0000 Remove unused define CQL_NODE_MOD commit dd7de5f04a0de631f98ad9c4774f2111a85388e5 Author: Adam Dickmeiss Date: Sat Oct 2 13:28:26 2004 +0000 Added several type casts for C++ compile commit 905200e7c7288464a3951f6eeb4c9b420aa27997 Author: Adam Dickmeiss Date: Sat Oct 2 13:27:26 2004 +0000 Add --with-xml2 to RPM spec commit 09d7eedf90e167c0493270eded1d2b1f2d2a7221 Author: Adam Dickmeiss Date: Fri Oct 1 23:01:57 2004 +0000 Add --with-xml2 to configure commit 26f5b2f33c2302130ed2301084620f55a7df7af4 Author: Adam Dickmeiss Date: Fri Oct 1 23:01:26 2004 +0000 If --with-xml2, --enable-tcpd is given and they cannot be found, configure stops. commit 1d308bb4c51f70f7c58b1c4b0c7f5a28a4d80e56 Author: Adam Dickmeiss Date: Fri Oct 1 19:34:09 2004 +0000 Extend CCL chapter. Describe r=r commit 684820a9cddcbe5abd359d468a06c2cb0dc3efef Author: Adam Dickmeiss Date: Fri Oct 1 13:16:30 2004 +0000 No TESTS here commit 36823208064a499a7813301dd494bdeb88d230d7 Author: Adam Dickmeiss Date: Fri Oct 1 13:16:18 2004 +0000 Added ()s to avoid warning. commit 370c346822ae752b601cbddc6a5fbf01df08caff Author: Adam Dickmeiss Date: Fri Oct 1 13:05:09 2004 +0000 Towards 2.0.26 commit 537450adf56c59b3f26ac9320cc6dd12b3ffdbb5 Author: Adam Dickmeiss Date: Fri Oct 1 11:45:48 2004 +0000 Fixed MARC utilities to use proper conversion to XML CDATA for subfields, tags, etc. to ensure validity of generated MARCXML records and others. commit ed9a470b2dbe08cfe51079bdb3e7fbd720f857c8 Author: Adam Dickmeiss Date: Fri Oct 1 11:44:46 2004 +0000 Prevent XML CDATA with ASCII control chars (except TAB,CR,LF) commit 48e3b97da367521131aa740054e51f30f1d00225 Author: Adam Dickmeiss Date: Fri Oct 1 11:43:43 2004 +0000 Adding test for MARC->MARCXML conversions with 3 weird records commit 8a8f1d9c4e73cbf616fff1d40ff88e521e0d9c67 Author: Adam Dickmeiss Date: Thu Sep 30 21:54:22 2004 +0000 Server returns surrogate diagnostic 14: "System error in presenting records" when single record cannot be converted to XML. commit 370a23c50a2583a93b0faf2116bb11b43f359080 Author: Adam Dickmeiss Date: Thu Sep 30 21:51:59 2004 +0000 Convert Z39.50 surrogate diagnostics to SRW diagnostics. Return SRW diagnostic 61: "First record position out of range", properly. commit b2aa1ebda116fb5ddfaec50e97f19c6a9a7193f8 Author: Adam Dickmeiss Date: Thu Sep 30 18:40:27 2004 +0000 Rephrase commit c437556fbbc225557c621c28d5c3a70e03c345de Author: Adam Dickmeiss Date: Thu Sep 30 18:40:13 2004 +0000 Bug fix: YAZ GFS did not return schema in explainResponse. commit f4d4b4e02b36802f7932f87413f3783c39b52093 Author: Adam Dickmeiss Date: Thu Sep 30 11:23:25 2004 +0000 Towards 2.0.25 commit 83c4bd6ae175bfc59576f76c5508c0c12a8f253f Author: Adam Dickmeiss Date: Thu Sep 30 11:15:52 2004 +0000 Added typecast and removed bad assignment commit 04b2fff543057fc1f6df0b5fb0347466bf51660c Author: Adam Dickmeiss Date: Thu Sep 30 11:13:42 2004 +0000 The YAZ GFS when converting SRW/SRU requests to Z39.50 structures now converts recordSchema to elementSetName as well as schema URI. commit d4bf9f0fc12586d2c0c38b77b6d4c865158a62ba Author: Adam Dickmeiss Date: Thu Sep 30 11:06:41 2004 +0000 Create NMEM automatically for odr_{str,int}dup. commit 1344321cfcf923b9b2bbffe31e81d6870587f5ef Author: Adam Dickmeiss Date: Thu Sep 30 10:00:17 2004 +0000 Fix serious bug regarding HTTP requests (introduced in YAZ 2.0.24) commit 9510c6c592b84da4a6b2616a61f0cebfce5a1c87 Author: Adam Dickmeiss Date: Wed Sep 29 21:08:22 2004 +0000 We added new functions so require 2.0.24 if YAZ is used. commit 1b8b5cb2b718a805d40ce904c270ea5fbf5b1e7c Author: Adam Dickmeiss Date: Wed Sep 29 20:44:44 2004 +0000 Towards YAZ 2.0.24 commit e4baade57ba02d625ecd6452b0f4383b24c25f2d Author: Adam Dickmeiss Date: Wed Sep 29 20:37:50 2004 +0000 Added CCL facility r=r "range" which is similar to r=o "ordered" but does not require white-space before and after the dash, e.g. x=-1990 is equivalent to x <= 1990 iff r=r, but equivalent to x= -1980 iff r=o. Added CCL tests for ranges. Fixed memory leak in CCL parser that occurred when proximity was used. commit 7bfa924f0f58b494c4aba33320183374ffd594cd Author: Adam Dickmeiss Date: Wed Sep 29 20:15:42 2004 +0000 Added include stdlib.h commit 29b883c70ce2c68da5be667fe52f86551c1de45b Author: Adam Dickmeiss Date: Wed Sep 29 20:14:56 2004 +0000 Remove unused variables commit 245a9ee60bf478011acf24aaa235a4ca7c575bf8 Author: Adam Dickmeiss Date: Wed Sep 22 19:22:24 2004 +0000 Rephrase info about option -m commit 4fa314498f1528ed66674ada044076a2ba75e815 Author: Adam Dickmeiss Date: Wed Sep 22 19:22:08 2004 +0000 Document scanpos and scanstep commit 5e0f6514b51d60187037b62f464adfd2723c1693 Author: Adam Dickmeiss Date: Wed Sep 22 19:12:53 2004 +0000 Notes about changes commit e09c0d10d5ccdde669713f9b1db52a3e85250115 Author: Adam Dickmeiss Date: Wed Sep 22 14:50:04 2004 +0000 Do not declare static function f in AC_TRY_LINK test. It is not necessary but more importanly the function f gets optimized away which resulted in error(s) in test result. commit c1c19e1c040869f7c767d4e52acc096b3cd45f83 Author: Adam Dickmeiss Date: Wed Sep 22 13:58:10 2004 +0000 Debian yaz-2.0.23-3 commit a1d70786445f8cb27761b776fa67b08a80e0d8a4 Author: Adam Dickmeiss Date: Wed Sep 22 13:21:37 2004 +0000 Added commands scanpos and scanstep that sets preferred position and scan step respectively. Renamed cmd stepsize to scanstep. commit efcfc53528435f8d6fb3a7d41a22a64e9731a690 Author: Adam Dickmeiss Date: Wed Sep 22 13:08:31 2004 +0000 Add command stepsize that sets stepSize for Scan (default 0) commit ce02a7514071a45dea4423dcb8e12b22d89bb1f5 Author: Adam Dickmeiss Date: Wed Sep 22 12:17:24 2004 +0000 Add prototype for ccl_qual_buf. commit 590aa50e623466e84242cb03b8704102def784ca Author: Adam Dickmeiss Date: Wed Sep 22 11:22:10 2004 +0000 Windows 2.0.23-6 commit 1b7116b57dee317a8ccc2d53401b629fabd8b9d8 Author: Adam Dickmeiss Date: Wed Sep 22 11:21:51 2004 +0000 Added CCL utility ccl_qual_buf which parses one or more CCL spec lines in a buffer. commit 6f64c3aec8f77d8378f8d06742041828ae7b75ba Author: Adam Dickmeiss Date: Wed Sep 22 09:30:42 2004 +0000 Prepare for new Debian commit 779f1d959e8b91db0e259648e6d5597bc2e06736 Author: Adam Dickmeiss Date: Tue Sep 21 16:28:17 2004 +0000 Fix saving of SRW query for show. Bug introduced by previous commit so no official YAZ release was affected. commit b7f03b57557b9da147ff84f172dac4f8eb8850d8 Author: Adam Dickmeiss Date: Tue Sep 21 14:59:01 2004 +0000 Fix problem with decoding of HTTP responses with no Content Length specified. commit 15a37a1983020a7266366cbfddda427c880d4f01 Author: Adam Dickmeiss Date: Fri Sep 17 08:44:23 2004 +0000 Remove Id from header due to inconvenient diffs when yaz.m4 is copied commit 0788928649e97f42c99cd5c1e8c0e3c0eb600555 Author: Adam Dickmeiss Date: Thu Sep 16 17:59:52 2004 +0000 Rephrased comment in NEWS commit 454369fd9e16211e97c8decd7be3c4e9729df6bf Author: Adam Dickmeiss Date: Mon Sep 13 09:24:42 2004 +0000 If queryType is prefix, yaz-client sends PQF to SRW server. commit 326efc2de5c707a312a3b0a0dc809245250e7f55 Author: Adam Dickmeiss Date: Mon Sep 13 09:23:33 2004 +0000 Log CCL and Z39.58 queries commit a87770ed51d988ce5a0b2f5f886dd4211c4055d6 Author: Adam Dickmeiss Date: Sat Sep 11 20:52:14 2004 +0000 option --with-yazconfig renamed to --with-yaz commit f1c754c5a459f86a455795a494ce98f0cdc0599b Author: Adam Dickmeiss Date: Fri Sep 10 11:28:58 2004 +0000 For SRW, do not set numberOfRecords when diagnostic is returned commit 85dc21cfee478bc99c95dce7e2d3d9ddc46cc755 Author: Adam Dickmeiss Date: Thu Sep 9 09:54:37 2004 +0000 DTD_DIR assignment commit 56afd8ef095a52912d1c74f3ee49f91e07d0cf77 Author: Adam Dickmeiss Date: Thu Sep 9 09:53:08 2004 +0000 Align text in configure --help commit 8153b48e80244618f32e3db56d88ed3e267ef409 Author: Adam Dickmeiss Date: Thu Sep 9 09:51:16 2004 +0000 Describe with-yazconfig change commit e148d5a5d75380bf3ee88e93d30e5aa756b931d3 Author: Adam Dickmeiss Date: Thu Sep 9 09:40:04 2004 +0000 Rename Docbook related --with options to --with-docbook-{dtd,dsssl,xsl}. Rename --with-yazconfig to --with-yaz-config. commit 0ef85492914ba31cc19d4ca65682c4d61fd69145 Author: Adam Dickmeiss Date: Fri Sep 3 18:55:59 2004 +0000 Manually test for OCLC UI OID and print commit 89791feaa7fab60e510bb893361a594553ebff0a Author: Adam Dickmeiss Date: Fri Sep 3 18:55:19 2004 +0000 Do not decode OCLC UI by default. commit 388a09802a50b37d3b3679949ac91b13594d3260 Author: Adam Dickmeiss Date: Tue Aug 24 08:44:10 2004 +0000 Clear ODR error in odr_setbuf commit a39fada8894d54eecd6a82f31d0b5fd672c5aef2 Author: Adam Dickmeiss Date: Thu Aug 19 07:47:59 2004 +0000 yazd.{dll,lib} instead of yazdebug.{dll,lib}. commit bc9313eae3f0735bf3382d994af1cfd558cd6991 Author: Adam Dickmeiss Date: Thu Aug 19 07:42:20 2004 +0000 Distribute msvcr71.dll with dist. Do not distribute yaz debug DLLs. commit c9520f65b13d4b0fef62b156aabd75838082dd70 Author: Adam Dickmeiss Date: Thu Aug 19 07:36:55 2004 +0000 Rephrase comment about windows DLL/lib commit 2e23fabe25973c7614b83ca1151b6c7be7df9024 Author: Adam Dickmeiss Date: Wed Aug 18 10:47:48 2004 +0000 Make sure dll,client,ztest rules depend on dirs,generate commit c0ed3a7cdb7fd412791154eab2fcd26a4bdd63a7 Author: Adam Dickmeiss Date: Wed Aug 18 10:05:20 2004 +0000 Bump minor win version commit 5655212777a8fe68bf5cc1e563287c0f075a0ae5 Author: Adam Dickmeiss Date: Wed Aug 18 10:03:01 2004 +0000 Added CCL utility ccl_qual_line which adds CCL qualifier line consisting of name and value - ignoring empty lines and comments. commit 7829806edcad05b4ecbe764eaba75ed639132f0a Author: Adam Dickmeiss Date: Wed Aug 18 10:01:07 2004 +0000 Adding to interface so update shlib depds commit 8f2c3e6f52ae02c7da85292088d03cc7d894bd4d Author: Adam Dickmeiss Date: Wed Aug 18 09:43:10 2004 +0000 Do not build debug mode exe files for dist (nsis rule) commit 103dfdda7d65dc866dfb07cb4f16b2fbc9bc2cf0 Author: Adam Dickmeiss Date: Wed Aug 18 09:08:58 2004 +0000 Document the changes WRT WIN32 debug DLL/lib. commit 248e1ad70322ee05a64c8c505490affb05c84b5e Author: Adam Dickmeiss Date: Wed Aug 18 09:01:13 2004 +0000 Use yazdebug.{dll,lib} for debug version of YAZ to allow both debug/release version of YAZ to be in use. Debug libraries are now part of WIn32 install. commit e494610db1c879925ce6d9e1c4efcf86904f243c Author: Adam Dickmeiss Date: Fri Aug 13 12:59:50 2004 +0000 YAZ 2.0.23-3 commit 58fea445ccce30dc82ffe09bc32bf41b4541937b Author: Adam Dickmeiss Date: Fri Aug 13 12:54:37 2004 +0000 Rephrase commit 2b17f66a25f1e9cf6e6a072736ea4459eefcc2b8 Author: Adam Dickmeiss Date: Fri Aug 13 11:36:48 2004 +0000 Cast to unsigned char to prevent assert in MS. Studio .NET commit c9408db23d24baece38e05035864f933ea5ea071 Author: Adam Dickmeiss Date: Fri Aug 13 11:35:37 2004 +0000 Cast to unsigned char to prevent assert in MS Studio .NET. commit 2b2afeeaa041c39c6fcafb225feba8b9e1dad010 Author: Adam Dickmeiss Date: Fri Aug 13 08:59:07 2004 +0000 Remove unused variable commit 0016aef97122936cb847026f5a70e03dd0542ab9 Author: Adam Dickmeiss Date: Fri Aug 13 08:58:59 2004 +0000 Move declaration to start of block commit 6ee1cba1206017fafc79b5ed58ff573d4e4d4681 Author: Adam Dickmeiss Date: Fri Aug 13 08:40:19 2004 +0000 Make clean removes .pdf too commit 3cef72d7093afaa8b106e4160ef0885b2ac50335 Author: Adam Dickmeiss Date: Fri Aug 13 07:30:05 2004 +0000 Reworked odr_set_stream a bit, so that write handler now takes a buffer and a length + ODR handle. Also implement odr_get_element_path that returns current path of elements. commit 5d82112ae34413cae5553fc3e3e2c55ce45fc145 Author: Adam Dickmeiss Date: Fri Aug 13 07:26:28 2004 +0000 Added Larry E. Dixson commit 5c3254b421ce3cc5f3d8c4f294a48f233a6cf3f7 Author: Adam Dickmeiss Date: Wed Aug 11 20:13:36 2004 +0000 Fixed bug in CCL parser where truncation char was not removed when truncation=both was in effect. commit f34de3e6a08dfb7e5440264730b75ba713e55789 Author: Adam Dickmeiss Date: Wed Aug 11 12:47:35 2004 +0000 Document odr_setpring and odr_set_stream. commit d094a0772f5a1d6d8bb6c390018f488307ae8410 Author: Adam Dickmeiss Date: Wed Aug 11 12:16:56 2004 +0000 Mention CQL char bug fix. commit 0a7d4354288c747883261e9f430a7e0069225a5b Author: Adam Dickmeiss Date: Wed Aug 11 12:15:38 2004 +0000 Added odr_set_stream which is is a more generic to odr_setprint. odr_set_stream takes a stream handle, pointer to puts function and pointer to close function. The close function - if non-NULL - will be called during odr_destroy. commit 93027bf060203898f33d1425585303945e58acbd Author: Adam Dickmeiss Date: Wed Aug 11 12:01:22 2004 +0000 Add check for proximity commit 6085aae155dd3bf339d82a7846cfd3903b9cfe92 Author: Adam Dickmeiss Date: Wed Aug 11 11:46:54 2004 +0000 Make 2.0.23-2 for Windows with fixes for MS. NET commit 8fa3d0c0967fd6db5c7a2b2ffc504cb48407a586 Author: Adam Dickmeiss Date: Wed Aug 11 11:44:30 2004 +0000 Use unsigned char pointers to prevent assert for 8-bit on MS .NET commit 9977ff5ba57bf5646f06d94dad206d0596fe7e38 Author: Adam Dickmeiss Date: Wed Aug 11 09:05:56 2004 +0000 Towards 2.0.23 commit 6e8a8f144dfc8225d07a56d6a7f18056cb18ee22 Author: Adam Dickmeiss Date: Wed Aug 11 09:02:48 2004 +0000 Fix buffer overrun in CCL parser for proximity commit b6d34be5a1131d2bb7ff367b7d5e498599f791a8 Author: Adam Dickmeiss Date: Sat Aug 7 08:18:19 2004 +0000 Fixes for MARC-8 in yaz_iconv character set utilies. The MARC-8 to UTF-8/UCS conversion is now only based on codetables.xml. Thanks to Larry Dixson for reporting this error. commit 95f9f397e64bd7a933482008f7afe647e56648a2 Author: Adam Dickmeiss Date: Sat Aug 7 08:06:57 2004 +0000 For MARCXML, set leader pos 9 to a to signal unicode commit b55ea70d15d3ffaa247cc30db0e6b8dcc4d6ac7c Author: Adam Dickmeiss Date: Fri Aug 6 08:31:02 2004 +0000 Towards 2.0.22 commit ac7fba8675ca9a61f93128a0b3c1683f7cce274d Author: Adam Dickmeiss Date: Wed Aug 4 09:30:30 2004 +0000 Remove unused code. commit 34a5c44eeae489d41e05323a4738bcd069eb0a1d Author: Adam Dickmeiss Date: Mon Aug 2 10:13:27 2004 +0000 Add support for more "commit changes" in ZOOM (uses Extended Services). commit 012ebe86693784419f1ab4c62a727d8c3a7aabf0 Author: Adam Dickmeiss Date: Mon Aug 2 10:06:34 2004 +0000 Add ES package of type commit commit 74b2585ecf03192ddc7cf9796634b9cde008ec8b Author: Adam Dickmeiss Date: Fri Jul 30 08:37:52 2004 +0000 For yaz-client, command set_marcdump and -m dumps SUTRS/XML/.. records as well. commit 719e0dcf2d15c08086a06457701e21c6aff3d791 Author: Mike Taylor Date: Mon Jul 26 12:16:56 2004 +0000 Fix typo. commit 2097571f3770669012ec51e2973f4740a201f62f Author: Adam Dickmeiss Date: Tue Jun 15 10:53:26 2004 +0000 Avoid using size_t for length modifier in printf format commit f4c4fc8248cfd5ceb834003b237359343aca9b38 Author: Adam Dickmeiss Date: Tue Jun 15 09:58:13 2004 +0000 Use db_printf instead of dprintf which is a public symbol in many systems commit a4c13e5a8035fed703ebcd1580e9dcfdd9929722 Author: Adam Dickmeiss Date: Tue Jun 15 09:33:12 2004 +0000 Specify that default is 15 minutes in timeout for GFS commit 78dcafef3ed6903e922e2cdd6479392d78a6b3a2 Author: Adam Dickmeiss Date: Sun Jun 6 20:56:56 2004 +0000 libyaz-dev depends on libssl-dev commit 6e8e985ed2ed85ebad7ee26a86dabcafebc18573 Author: ja7 Date: Thu May 27 21:24:44 2004 +0000 added new command for testing cancel cmd_cancel_find which makes a find command and then cancel's it. extended the buffer when processing input files commit 1e9120dcb40344edefe683feac5eb303c04d9dfa Author: Adam Dickmeiss Date: Wed May 26 11:14:29 2004 +0000 Yet another small fix for configure of SSL. commit 33bfb14559d5991bf34f99be507a89ffefe41632 Author: Adam Dickmeiss Date: Tue May 25 14:06:15 2004 +0000 Do not throw error if truncation.none is not given commit 6a50a0cb60cf23154bc37675a87225cfaf5f669c Author: Adam Dickmeiss Date: Fri May 21 12:27:38 2004 +0000 Swap definition order for YAZ_DOC and YAZ_INIT commit d57c9b0a346d64f0ed2a1003d90365794564e0b6 Author: oleg Date: Wed May 19 05:32:47 2004 +0000 Fixed use of dprintf(). The define of dprintf() is a part in some linux based OS. commit 422c5109f981fefdd87bd3f95c41cc799a645ffc Author: oleg Date: Wed May 19 05:28:06 2004 +0000 Added check of dprintf(). commit 8797798afa88b715781dcbd55fae8a2fabeb5c79 Author: Adam Dickmeiss Date: Fri May 14 08:19:15 2004 +0000 Towards 2.0.21 commit dfaf449760014172f167c413437cd57e2eb5c854 Author: Adam Dickmeiss Date: Thu May 13 13:11:24 2004 +0000 Fix SSL libs for configure when --with-openssl=DIR is given. commit bbd68e685f0eaab7bae461e04903a71a380605ca Author: Adam Dickmeiss Date: Thu May 13 10:07:14 2004 +0000 Fix SSL -L -lssl order commit 11e1b74da53b7403f5faf0f1771fefeb962e92dd Author: Adam Dickmeiss Date: Mon May 10 18:42:16 2004 +0000 Bump year commit bdbea3605bd2d48e76a671069156412aca1bd79f Author: Adam Dickmeiss Date: Mon May 10 12:32:01 2004 +0000 Upgrade to NSIS 2 commit 31f8cc74d05ca68c2fb011c2f7aa3087808826c7 Author: Adam Dickmeiss Date: Mon May 10 11:56:33 2004 +0000 Use libxml 2.6.9 commit 7d8ce865edf7af1329b506590717fc846c9becb6 Author: Adam Dickmeiss Date: Mon May 10 11:40:51 2004 +0000 Declare cs_set_ssl_certificate_file in non-ssl mode too commit 43b2549e1810961f9b00ac36b388336f29744b6b Author: Adam Dickmeiss Date: Mon May 10 11:27:54 2004 +0000 Updated Debian version dependency to 2.0.20. commit 589d16db6e07b56a5cb15b8f1e303a858734771b Author: Adam Dickmeiss Date: Mon May 10 11:24:59 2004 +0000 Towards 2.0.20 commit 16a3072e6e8e215fbcc4b46e03ad8f32715a0afe Author: Adam Dickmeiss Date: Mon May 10 11:21:18 2004 +0000 Build new Debian package commit f32747a49af98569b58b97461a2f86813f4764bc Author: Adam Dickmeiss Date: Mon May 10 10:47:04 2004 +0000 Rename cs_set_ssl_certf to cs_set_ssl_certificate_file commit 876a13d858b70e6f2c34eaefad90d0577f5f1583 Author: Adam Dickmeiss Date: Mon May 10 10:46:26 2004 +0000 Describe new SSL comstack functions commit 1c695d2fbcb0692e978237aef6cf2426678c9fdd Author: Adam Dickmeiss Date: Mon May 10 10:45:28 2004 +0000 Do not use obsolete YAZ defines commit 1a36f8a099705318313a2942f55ca081a625bdf6 Author: Adam Dickmeiss Date: Mon May 10 07:52:07 2004 +0000 Keep old defines for now. Reverts last commit commit 725fc033b729b22a1e0cfba614192b6fbfaeda4f Author: Adam Dickmeiss Date: Mon May 10 07:48:56 2004 +0000 Do not mention windows.txt anymore. Point to HTML doc commit e12cd77c1050b5722c19f9e6d312c99e14565efe Author: Adam Dickmeiss Date: Mon May 3 09:00:50 2004 +0000 Added a few casts commit f7acb94a8f4ddda59fa695163785a6756e92c21b Author: Adam Dickmeiss Date: Mon May 3 09:00:29 2004 +0000 Use better OID utilities. Simplify commit 2f1ad68193fa6825fc561a09684585280bd67895 Author: Adam Dickmeiss Date: Sun May 2 00:07:34 2004 +0000 Better check for SSL on non pkg-config systems commit 480c3cf04004acef3a792d1914382b38b0f79bfa Author: Adam Dickmeiss Date: Sun May 2 00:07:11 2004 +0000 Make sample SSL certificate part of dist commit 7a60e6ae656c6bc2825b6244c88bbd59106f3da9 Author: Adam Dickmeiss Date: Sat May 1 23:45:43 2004 +0000 Clarify stuff about libxml2 commit e23eae6ada71a70849bcdab7ee179579aad248e1 Author: Adam Dickmeiss Date: Sat May 1 23:32:20 2004 +0000 Get rid of SSL_{CFLAGS,DEFS,LIBS} commit 5cbf8c25b69296ba93015e6c7669f5298aefa7d8 Author: Adam Dickmeiss Date: Sat May 1 23:19:49 2004 +0000 Link with libxml2 2.6.9 commit cc6dad5cffd577eed9d001a82f08a552c2740525 Author: Adam Dickmeiss Date: Fri Apr 30 19:34:05 2004 +0000 dd autoconf m4 macro YAZ_DOC for YAZ documentation setup (docbook). commit 7bb5e2926727e963de8411dbba9cc18df967bfbb Author: Adam Dickmeiss Date: Fri Apr 30 19:10:35 2004 +0000 SSL comstack now uses yaz.pem certificate file on server side by default. Certificate filename can be configured by calling comstack function cs_set_ssl_cert before cs_bind is used. commit 89995b1f8d06d97dacbbce5fcc4fa0c059c0e1bd Author: Adam Dickmeiss Date: Fri Apr 30 12:43:32 2004 +0000 Handle duplicate connect commit 1ed99bdb19b146122c028871f5b707baceab336a Author: Adam Dickmeiss Date: Thu Apr 29 21:27:22 2004 +0000 Dont print system error when comstack cannot be created commit 69758252fce6231073cb288a4f5bbf8f7febc249 Author: Adam Dickmeiss Date: Thu Apr 29 21:19:23 2004 +0000 Implement cs_set_ssl_ctx which sets SSL_CTX for SSL comstack. Do not create SSL_CTX in cs_create (ssl_type). Create in tcpip_bind, tcpip_rcvconnect instead. This allows user to set custom SSL_CTX. commit c58035e31f65574542f72955007b1935c3669186 Author: Adam Dickmeiss Date: Thu Apr 29 21:15:14 2004 +0000 Get rid of GCC warnings commit 80f8ae2b0879fb9bcc811fbbcb3a72bc8064ae7a Author: Adam Dickmeiss Date: Thu Apr 29 08:55:17 2004 +0000 Relax http/https URL check a bit commit f5c26a76213127c130098547cbd361a4db11dd7e Author: Adam Dickmeiss Date: Thu Apr 29 08:54:56 2004 +0000 Get rid of SSL check code commit e72e394106dd25d6a8a8c7c2fa677f40ef5e7eb6 Author: Adam Dickmeiss Date: Wed Apr 28 22:44:58 2004 +0000 ZOOM now allows inspection of X509 peer certificate for verification. The X509 buffer is retrived by reading ZOOM option "sslPeerCert". Removed libyazssl.la. When SSL is enabled, libyaz.la has SSL support and all programs have too (yaz-ztest, yaz-client, zoom..). May not be as "modular" but it simplifies things. Added cs_get_peer_certificate to that returns peer X509 PEM. commit a159d35487ce391123e8e82274fd2ee95055c3a6 Author: Adam Dickmeiss Date: Wed Apr 28 13:25:57 2004 +0000 More SSL details for yaz-client commit 8dc67a9430644549801c18ec7e3a725e5a4ef782 Author: Adam Dickmeiss Date: Wed Apr 28 12:10:51 2004 +0000 Added cs_get_SSL. yaz-client-ssl prints peer info commit 552daed9f1e10b6979346194fe4ce781298b4b0d Author: Adam Dickmeiss Date: Mon Apr 26 21:23:24 2004 +0000 Update ASN.1 for UserInfoFormat-multipleSearchTerms-2. commit 1b59302c8003251955f2850039f463dd63c6dff3 Author: Adam Dickmeiss Date: Thu Apr 22 18:44:40 2004 +0000 Check for HTMLFILES commit 3ecb9c4867ae1915c01031611697da4fb2c15921 Author: Adam Dickmeiss Date: Thu Apr 22 18:25:41 2004 +0000 Revert commit e77fbf07b0a8d31165e643565d18e9ac71c322d6 Author: Adam Dickmeiss Date: Thu Apr 22 18:24:59 2004 +0000 Mention new docs on MARC commit ee254a91ecc9e3e03f85d6cc3a365eea3be8dd28 Author: Adam Dickmeiss Date: Thu Apr 22 13:12:49 2004 +0000 Document MARC API commit c39d5674598a4da3e194baae1927a648bd444638 Author: Adam Dickmeiss Date: Sat Apr 17 08:24:03 2004 +0000 Fix --disable-tcpd to really disable tcpd. Patch by Robin H. Johnson. commit 50a87fb7c533ee1a5f543c699e92c3480772ec86 Author: Mike Taylor Date: Fri Apr 16 12:34:08 2004 +0000 Ignore generated test programs. commit 8b607c83e5dcbca433f2c0f8354dcfaddfea2887 Author: Adam Dickmeiss Date: Wed Apr 14 12:58:27 2004 +0000 Fix code for ODR_DEBUG. Thanks to Ian Ibbotson commit e64c126967a22812f544317b1ca77fbba1f7c5b5 Author: Adam Dickmeiss Date: Sun Apr 11 15:02:00 2004 +0000 Make buildconf.sh part of dist commit a6866a0c08c5b0b853d2385ec2f28a0832cc3241 Author: Adam Dickmeiss Date: Wed Apr 7 13:51:50 2004 +0000 Check class for display of XML/HTML commit c365079c73de2cc75ca3630098c448f788a9007c Author: Adam Dickmeiss Date: Wed Apr 7 13:47:59 2004 +0000 Display records even if OID is unknown commit b067fd8539eb2348bf9f3928ff62006fb6021d7c Author: Adam Dickmeiss Date: Tue Apr 6 17:47:24 2004 +0000 Fixed charset spec parsing for ZOOM_record_get commit fa3ba5394671fe058f82eda2b888ae112bfc8fdf Author: Adam Dickmeiss Date: Tue Mar 30 14:15:56 2004 +0000 Fix RedHat package due to rename of CHANGELOG to NEWS commit f4adf254279a4fd165a18a77c8d4ee48a71eb24a Author: Adam Dickmeiss Date: Mon Mar 29 20:13:07 2004 +0000 Towards 2.0.19 commit 08516fefc3253bf9e414fecb48f475fa26b8869a Author: Adam Dickmeiss Date: Mon Mar 29 20:11:13 2004 +0000 Rename CHANGELOG to NEWS commit bf6876570c2eeade25f5ed23052d0e94244d568c Author: Adam Dickmeiss Date: Mon Mar 29 15:09:13 2004 +0000 Fix bug with missing initialization of member in init_diagnostics. This bug affects threaded version of GFS server. commit 8746c08e36ba07edc839f1396c17a27ea2915dc0 Author: Adam Dickmeiss Date: Wed Mar 24 10:14:24 2004 +0000 Spell fix commit 2750b61cf8ee6cf2632fbd57e6764559ae6e56cc Author: Adam Dickmeiss Date: Sat Mar 20 12:54:18 2004 +0000 Rephrase note commit dd472005b2c12e54a0436d22e56970f48bc32704 Author: Adam Dickmeiss Date: Sat Mar 20 07:16:25 2004 +0000 Use "" instead of 0 for last field 'from'. And test for end of list by checking 'to' instead of 'from'. commit 3261e100ea2fed86d45a15930af074098f072c26 Author: Adam Dickmeiss Date: Sat Mar 20 07:02:22 2004 +0000 Use wrbuf_xmlputs_n instead of wrbuf_write_cdata to avoid clash with Zebra symbol. Towards 2.0.18. commit 18a2b4f1c3da6d4206d8ee248a55c7526f4c96aa Author: Adam Dickmeiss Date: Fri Mar 19 21:13:02 2004 +0000 Build 2 commit 4cc34f9a4eec65d0eb629d070150dd55c5977522 Author: Adam Dickmeiss Date: Fri Mar 19 21:12:13 2004 +0000 Fix a few links. Mention zlib. commit 373fe4a394d22622621d6add4fac3217488b142c Author: Adam Dickmeiss Date: Fri Mar 19 20:57:44 2004 +0000 Make zlib.dll part of YAZ if libxml2 is enabled commit c2e6bfb2dcdaa71a6532ec3d1d429f9586d78b11 Author: Adam Dickmeiss Date: Wed Mar 17 20:00:11 2004 +0000 Fix date in top commit 770b443f619cd78a313b5cde3b10b4a34bfce728 Author: Adam Dickmeiss Date: Wed Mar 17 19:07:09 2004 +0000 Use libxml2-2.6.7 and iconv-1.9.1 commit 75ada5241cd3a0adf2a5623c7a392dd657e2c15b Author: Adam Dickmeiss Date: Wed Mar 17 18:47:41 2004 +0000 Towards 2.0.17 commit 6d50f66faab9c47d834c5433ae776ec6fc7df994 Author: Adam Dickmeiss Date: Wed Mar 17 18:43:35 2004 +0000 Fix encoding of xsd:string to use text instead of CDATA commit 4c7863aac66ff92802fcd5476f8b7ae1feb8ebdf Author: Adam Dickmeiss Date: Wed Mar 17 18:31:11 2004 +0000 Fix endless loop in CQL parser with unbalanced commit d30e034fc508f9d901f0fa60113eb160e2d7406f Author: Adam Dickmeiss Date: Wed Mar 17 11:00:04 2004 +0000 Use more compact way to store MARC-8 conversion tables commit a1d6c3e37313363550600ebcf45ec41ff9f1410b Author: Adam Dickmeiss Date: Wed Mar 17 10:59:41 2004 +0000 Indentation commit be9a7af42fad4d69ab2d4077f193c695407fa685 Author: Adam Dickmeiss Date: Tue Mar 16 23:07:04 2004 +0000 Depend on charconv.tcl commit 15b8df11c04098a83b1d7e545ee07ad4589e484f Author: Adam Dickmeiss Date: Tue Mar 16 13:29:43 2004 +0000 Towards 2.0.16 commit fa1dff894130765cb4a8fed41c42fc7125702c9c Author: Adam Dickmeiss Date: Tue Mar 16 13:22:16 2004 +0000 Get rid of a few warnings commit 80b89a67e69a53fb3dc7b58c5abc9bf99af93139 Author: Adam Dickmeiss Date: Tue Mar 16 13:15:58 2004 +0000 Remove unused var commit e3678b79cc201f61c67f46f558cfdbcb4a999ba3 Author: Adam Dickmeiss Date: Tue Mar 16 13:13:34 2004 +0000 Get rid of table commit f72e3ad49303bc42c4ea9343ae59f0dbed4b0694 Author: Adam Dickmeiss Date: Tue Mar 16 13:12:42 2004 +0000 All MARC-8 codetables, but G1 uncertain commit ee0442c5c2a8ea8dbac911edd15961997f457106 Author: Adam Dickmeiss Date: Mon Mar 15 23:14:59 2004 +0000 Allow length 100 for cjk conversion commit 47acd69a8a66bd220b56900cc2bc495aaa284ffa Author: Adam Dickmeiss Date: Mon Mar 15 23:14:40 2004 +0000 Use unsigned short rather than int for char conversion trie commit 9ee70f4c22c4990e7fe62a5238caa6b4e71f6a0f Author: Adam Dickmeiss Date: Mon Mar 15 22:51:10 2004 +0000 Skip multiple of ($, in MARC-8 ESC sequence commit 00106dc85fcaa3b02f9a0d471ea90a594bf3a175 Author: Adam Dickmeiss Date: Mon Mar 15 21:39:06 2004 +0000 Extend MARC-8 to handle ESC-G0 EACC. Fix conversion order for MARCXML output. Let CQL parser resolve prefixes to identifiers. Updates tests. commit b1133253fc7a5ebb20ae41cac2a38c061d6facc0 Author: Adam Dickmeiss Date: Thu Mar 11 20:40:02 2004 +0000 Mention Olegs fix commit af30aafd05572139098f984ddf13ba12072afa47 Author: oleg Date: Thu Mar 11 10:09:11 2004 +0000 Fixed error with UTF8 <-> UCS4, UCS4LE encoding (reverse direction for bit operation). For Latin-1 charcters the patch has not value, only for characters, which has code greater then xFF in UTF8. commit 08c3a57c9782652a28ca9a2a9966e3f75e943415 Author: Adam Dickmeiss Date: Thu Mar 11 09:34:42 2004 +0000 Update cql2xcql, cql2pqf to use options (same style) commit 50c8d7b43fda660f9d331135ba87b16da584a273 Author: Adam Dickmeiss Date: Wed Mar 10 21:09:01 2004 +0000 Add shelvingData too for OPAC XML commit d6efff2900cb1a9d4da10999d258ed0a4ceaf565 Author: Adam Dickmeiss Date: Wed Mar 10 19:42:45 2004 +0000 Show OPAC shelvingData commit 06151390083d3f8875bf7ed4b113942f6cccf9f4 Author: Adam Dickmeiss Date: Wed Mar 10 18:50:56 2004 +0000 Mention origin commit 6eef3434bf7d353f060f8a10d3dad6fad38e1edc Author: Adam Dickmeiss Date: Wed Mar 10 17:29:18 2004 +0000 Make cql test work if srcdir != . commit 76a636f169d66bea401275a41e8149b12584fa22 Author: Adam Dickmeiss Date: Wed Mar 10 17:18:08 2004 +0000 Add yaz-config to DISTCLEANFILES commit 42f18e58ed67f77727cde23bcee44dbd32ed242a Author: Adam Dickmeiss Date: Wed Mar 10 16:34:29 2004 +0000 Update CQL parser to use CQL 1.1 modifiers for booleans and relations. Add CQL regression cases. commit a4c9e87155ec7e343559946290ed8262cf5acf81 Author: Adam Dickmeiss Date: Tue Mar 9 20:49:04 2004 +0000 Remove fprintf about bad null commit 94d2f62cf9d0185e933e238ae36081b00e43d1a0 Author: Adam Dickmeiss Date: Mon Mar 1 17:33:02 2004 +0000 Another fix for decoding of XML packed records. Version 2.0.15. commit 59cf60844792d6f2b04af223cabc4d441bb28029 Author: Adam Dickmeiss Date: Thu Feb 26 14:46:01 2004 +0000 Map SRW unsupported relation modifier to Bib-1: 117 commit 42e7f88749275a5113afb561abc76cee88621986 Author: Adam Dickmeiss Date: Wed Feb 25 13:03:46 2004 +0000 Update Changes commit a23ee5449742beee9dc2ebf56c70f065d6239df3 Author: Adam Dickmeiss Date: Wed Feb 25 12:59:56 2004 +0000 Skip HTTP chunk extension (if present). Towards 2.0.14. commit 993e46ad4aa8360fb25367191b760f3990965e16 Author: Adam Dickmeiss Date: Wed Feb 25 10:37:02 2004 +0000 Initialize content_{len,buf} always commit 19e26d53c9fba91febbd197f088602c08478a13e Author: Adam Dickmeiss Date: Wed Feb 25 08:47:41 2004 +0000 Debian yaz-2.0.13-2 commit 34de58723fd367e50e9261089cffa86f1ac3750d Author: Adam Dickmeiss Date: Tue Feb 24 07:48:02 2004 +0000 Fix Debian package to announce >= 2.0.13 commit a04895cd2f66c3e5adcfb57eae54c795c2c6f1cc Author: Adam Dickmeiss Date: Mon Feb 23 12:58:12 2004 +0000 Rewrite changes. commit 9911c0d04369165de4401aa6f9c908da3b22038e Author: Adam Dickmeiss Date: Mon Feb 23 12:57:19 2004 +0000 Update NS for SRW diagnostic elements. commit d6fb3aa1d14381512225362ac585de1dd426ce1e Author: Adam Dickmeiss Date: Mon Feb 23 12:12:25 2004 +0000 Use default namespace for SRW diagnostic elements commit 8c9d442bdc292941b9f71bce1c9a10536cd94003 Author: Adam Dickmeiss Date: Mon Feb 23 11:04:24 2004 +0000 Update year commit 0cc88e06f6f9da823d51ea963857659e3685c2de Author: Adam Dickmeiss Date: Mon Feb 23 10:14:06 2004 +0000 Fix use of strcasecmp for WIN32 commit 2b1085e05e143d1e6fdbe0c961a926dd1b77d89a Author: Adam Dickmeiss Date: Mon Feb 23 09:30:17 2004 +0000 Towards 2.0.13 commit 1c793310ab772f41040bdf954d8a2b5e5da8b8ad Author: Adam Dickmeiss Date: Mon Feb 23 09:26:11 2004 +0000 Implement ZOOM_resultset_{sort,cache_reset} which sorts and resets cache for result set respectively. commit c04068990b0b702ea90bb191a199bdc9e67538e1 Author: Adam Dickmeiss Date: Thu Feb 19 23:39:13 2004 +0000 Use 1.1 by default commit ee8cea4c1d359ba7e46b69a418619b7f3b358c84 Author: Adam Dickmeiss Date: Thu Feb 19 23:37:36 2004 +0000 http_version var commit 8fb5c6c99b6fb42df8539ea457038aca8ac1f70b Author: Adam Dickmeiss Date: Thu Feb 19 23:22:33 2004 +0000 Implement chunked HTTP transfer commit 0e48274dd7b0ba3fd4d3f91e898f3d28bdf23dfa Author: Adam Dickmeiss Date: Thu Feb 19 23:21:44 2004 +0000 Support Transfer-Encoding: chunked commit aa8b9d245d1ff378c907669a350a4e484b35eac5 Author: Adam Dickmeiss Date: Thu Feb 19 23:20:44 2004 +0000 Define for CHUNK_DEBUG commit 8fc4b6ad422bdd99be8439f88693a86ca36b8e13 Author: Adam Dickmeiss Date: Tue Feb 17 10:29:51 2004 +0000 Mention tcl commit afabe5eef1993c5b71602942f2e50a0d27ecbf33 Author: Marc Cromme Date: Tue Feb 17 09:23:16 2004 +0000 build-dependencies added commit c34bc1a5b78e47a8b681aa2458d5636c76e57bce Author: Adam Dickmeiss Date: Mon Feb 16 23:46:14 2004 +0000 For SSL, use -lssl -lcrypto on systems that don't have pkg-config. commit 975c22d3fb94aaf91399f1967dbb173129205888 Author: Adam Dickmeiss Date: Mon Feb 16 21:40:39 2004 +0000 Fix type cast warning issued by GCC 3.3.3 commit 433cdda34f42f164b599d34d922a7cf83c5f030b Author: Adam Dickmeiss Date: Mon Feb 16 18:28:18 2004 +0000 Towards 2.0.12 commit 78723254cce0fc4e86db7e8d2bc503527d7c08f9 Author: Adam Dickmeiss Date: Mon Feb 16 17:57:05 2004 +0000 Towards 2.0.12 commit 06395306e21cd9e9235e14483a88ba70c3325030 Author: Adam Dickmeiss Date: Mon Feb 16 11:30:33 2004 +0000 2.0.11 commit 7e6099dcfa2a7d2f93642e5873286a84fc595cc0 Author: Adam Dickmeiss Date: Mon Feb 16 11:22:34 2004 +0000 Include stdlib.h for zoom.h commit 317ee76a1bbe9de384aea464c829b8ad627518a2 Author: Adam Dickmeiss Date: Sun Feb 15 07:19:42 2004 +0000 Set default preferred/maximum record size to 1 MB commit 97554b23cfc19394bb77f7f3c4bf0c8abf89297b Author: Adam Dickmeiss Date: Sat Feb 14 15:58:42 2004 +0000 SRW/SRU update: use uri instead of code for diagnostic commit 64a4f78d5566927b12b374157edf72f68232ffa3 Author: Adam Dickmeiss Date: Sat Feb 14 15:44:15 2004 +0000 Added init command for yaz-client which sends extra init request commit 0a1e9944179033c72f1fa9f9c13fabddc1945aeb Author: Adam Dickmeiss Date: Wed Feb 11 23:49:28 2004 +0000 Fixed two bugs in OID codec - ber_oidc. Throw error when encoding or decoding bad truncated OID. Fix decoding of OID X.Y when X=2, Y>39. commit 51f5ff156a2550d96b6d27fd901edaab161b32c8 Author: Adam Dickmeiss Date: Wed Feb 11 21:39:44 2004 +0000 Fixed a bug in ASN.1 compiler that caused Type-1 Operator codec to fail commit 8811f4c9c5a84976b696349b5dc4d7ae0faf66b6 Author: Adam Dickmeiss Date: Wed Feb 11 13:37:16 2004 +0000 Make separate error code for invalid query commit c0d273015235ff18b755a5375d468cbb9f14af19 Author: Adam Dickmeiss Date: Mon Feb 9 12:38:57 2004 +0000 New Debian Policy commit e9d0ea23cc3d9b9f6156e679a475d59289c0f3ef Author: Adam Dickmeiss Date: Mon Feb 9 09:54:57 2004 +0000 Fixed compilation for SSL commit 93d4cfa840acd64c55976bae197644000b5d8774 Author: Adam Dickmeiss Date: Mon Feb 9 08:41:49 2004 +0000 Ensure that YAZ is compiled with libwrap commit 02e141ff9bcfd2c6cfe2ad13991015018ca787b0 Author: Adam Dickmeiss Date: Thu Feb 5 14:15:42 2004 +0000 Remove extra AC_MSG_RESULT entry commit a1e8950b3ac76b9b8a85d9261b07c558ad8a3c9b Author: Adam Dickmeiss Date: Thu Feb 5 11:55:56 2004 +0000 2.0.10 commit 41e72cae5a6e59a2135765ad091dabb0de7221d5 Author: Adam Dickmeiss Date: Thu Feb 5 11:54:09 2004 +0000 Allows second argument for YAZ_INIT to hold required version of YAZ. commit 4b7f94b22a4a670274c028db7f0e438f2d7d74a0 Author: Adam Dickmeiss Date: Tue Jan 27 21:22:43 2004 +0000 Use prefix for SRW diagset in ZOOM commit 163abf332e441c2d39cf6ee4e83bad169fa1c59c Author: Adam Dickmeiss Date: Tue Jan 27 12:15:11 2004 +0000 SRW diagnostic code now a URI commit ccd8958b42e2d3d6aee55dd1201d56eb7a278b56 Author: Mike Taylor Date: Mon Jan 26 21:05:34 2004 +0000 Rolling tweaks, not yet running commit 764d3e4552e9a6c56f9cc07eadf9b6a5142722d0 Author: Adam Dickmeiss Date: Fri Jan 23 18:16:07 2004 +0000 Allow any PDU size if preferredMessageSize is 0 commit 0ff4f5bd6fc1007c322530ba6a3633869140f448 Author: Adam Dickmeiss Date: Fri Jan 23 11:52:52 2004 +0000 ASN.1 compiler sets Type pointer to NULL when DECODING omitted stuff commit 552f5f29bd93694954609b4669bca00752b92653 Author: Adam Dickmeiss Date: Thu Jan 22 11:20:54 2004 +0000 Allow recordID{Opaque,Number} to be se for ES upÃdate commit 832a7cfb01c097bb6afeac6f767b9a61c5355203 Author: Adam Dickmeiss Date: Sun Jan 18 21:11:11 2004 +0000 Debian sample init.d YAZ server script commit 83ac63cea12d7b176008739ac5fdafd01f628bef Author: Adam Dickmeiss Date: Sun Jan 18 02:28:42 2004 +0000 Fixed PID file so it is generated after fork (-r & -D) commit c7753f2a498076aae60b9a4682041c573792d0cd Author: Adam Dickmeiss Date: Sat Jan 17 01:20:12 2004 +0000 Implement option -D, -p for GFS commit 4fb9818b0657f561397b29e55d87cc8d4f194436 Author: Adam Dickmeiss Date: Fri Jan 16 10:04:54 2004 +0000 Make ZOOM C recognize option password commit 69074d2162afddc94e48d98d260f2dd70d6462b7 Author: Adam Dickmeiss Date: Thu Jan 15 23:33:29 2004 +0000 Fix sequence of diagnostic element commit 76bd6780cebee47ffefa4170fa2daa1f079d9559 Author: Adam Dickmeiss Date: Thu Jan 15 10:16:26 2004 +0000 Change proto of yaz_init_opt_decode. Added new function nmem_print_list_l (variant of nmem_print_list). Added new yaz-client command zversion that sets Z39.50 option bits - using yaz_init_opt_encode. commit 26978ebf6e44361779446e66a9891149d9032d59 Author: Adam Dickmeiss Date: Thu Jan 15 10:05:56 2004 +0000 Avoid reverse lookup in GFS commit b9c35fd3860882cc3804a4a9d69bec9b96099c57 Author: Adam Dickmeiss Date: Thu Jan 15 10:04:39 2004 +0000 Allow frontend server to stop (for debugging purposes) commit 5a8d9b1f3dc37b9e2420298e0daf1dc75f0a5433 Author: Adam Dickmeiss Date: Wed Jan 14 00:15:56 2004 +0000 Fix SOAP SRU encoding leak commit 4ddee9959ca6f59d3f8bd4259dfecee04b12c925 Author: Adam Dickmeiss Date: Tue Jan 13 11:19:24 2004 +0000 Use yaz_init_opt_decode to show options commit 11b76ecdb94556ae09761a5d43f0635c2f9a2974 Author: Adam Dickmeiss Date: Mon Jan 12 13:21:52 2004 +0000 Changes commit 6d9e8305bb173398dc9b886070a72b40618304ca Author: Adam Dickmeiss Date: Mon Jan 12 12:11:57 2004 +0000 Small utility to encode/decode init options as a string commit f1fef5aeb2f4aad16d5c66e7ed4b58def0a26464 Author: Adam Dickmeiss Date: Mon Jan 12 12:10:44 2004 +0000 Use displayTerm in zoomsh commit 81b54a15b8c4277b1e25338d21188ea1e209edda Author: Adam Dickmeiss Date: Mon Jan 12 12:10:17 2004 +0000 Fix displayTerm. Prepare for xpath for record element fetch. commit 5443d85bcd6ac9a3ca444586ab7a83c3ba85bc6b Author: Adam Dickmeiss Date: Fri Jan 9 19:54:05 2004 +0000 Update SRW messages strings to version 1.1 commit a38742c388bd6ad26a978d9b09525b6fd79d0418 Author: Adam Dickmeiss Date: Fri Jan 9 19:53:42 2004 +0000 Encode SRW/SRU diagnostic message from diagnostic code. commit 073195289eb9b73d6793fa283e5a7dca7a24fba8 Author: Adam Dickmeiss Date: Fri Jan 9 18:10:31 2004 +0000 Picky SRU decode. yaz_srw_get supports scan commit ced98df62664982b6340c504d90b9309d41f4a1b Author: Adam Dickmeiss Date: Wed Jan 7 22:27:41 2004 +0000 Read recordXPath for SRU commit e2572abf240cdd295a1761e5912ada162c435e61 Author: Adam Dickmeiss Date: Wed Jan 7 21:43:20 2004 +0000 2.0.9-5 commit cdf3162d32f13fd58d0b7fb06b3252bab2bc78ad Author: Adam Dickmeiss Date: Wed Jan 7 21:02:42 2004 +0000 Add z_soap_codec_enc_xsl commit b462b5047a365a76a5be26341e62b69076a33d3a Author: Adam Dickmeiss Date: Wed Jan 7 20:36:44 2004 +0000 Stylesheet support. commit b0663a3c3827d354e197fa9b8d42526bd3785cdd Author: Adam Dickmeiss Date: Wed Jan 7 20:33:57 2004 +0000 Fix warning commit bd005058ce4832b581a4f81ec5667212e995a49e Author: Adam Dickmeiss Date: Wed Jan 7 14:01:24 2004 +0000 Add isbn to bath commit 2bfedb1881eea1eb4e158779348794979ca9b681 Author: Adam Dickmeiss Date: Tue Jan 6 20:21:37 2004 +0000 Use _strnicmp on Windows commit 82988dd4a36739a5559015cb7df4dd757765d289 Author: Adam Dickmeiss Date: Tue Jan 6 19:12:19 2004 +0000 Fix a bug with decoding of XML packed records commit e87b4d274ad846d5cc5e1e443d2f1fc2c63ac633 Author: Adam Dickmeiss Date: Tue Jan 6 13:38:56 2004 +0000 Debian/window 2.0.9-3 commit 342d9afa535d530e54c1124705fde9d594a29a76 Author: Adam Dickmeiss Date: Tue Jan 6 13:38:39 2004 +0000 Report missin record data commit c39e347facce3cd8c3186f22ab14933119f8ae08 Author: Adam Dickmeiss Date: Tue Jan 6 11:21:04 2004 +0000 Fix record/literal XML decoding commit c0cae2eb789bb55c6e3739f169973a3ab54a62a7 Author: Adam Dickmeiss Date: Tue Jan 6 11:20:15 2004 +0000 Tweak error mapping commit b3d0700ef5df9c96be4c08dcb9ac2a7e123c9f48 Author: Adam Dickmeiss Date: Tue Jan 6 09:10:02 2004 +0000 SRW/Z39.50 diagnostic mapping: make bad ESN to bad schema commit 5b7816b7d347df94a6f3c3ec80680450b64e1e42 Author: Adam Dickmeiss Date: Tue Jan 6 09:09:13 2004 +0000 Rename variable commit 983b28466be0739a9408c79624aedb47894504a3 Author: Adam Dickmeiss Date: Mon Jan 5 14:46:52 2004 +0000 Allow empty ODR (NMEM=0) for odr_oiddup and odr_getoidbystr. commit 09745ff1f817a049d0cd412977f02144ade9c4fb Author: Adam Dickmeiss Date: Mon Jan 5 14:06:25 2004 +0000 Changes commit 67f0b922040d236afc88b8d247acca84e5fa0d73 Author: Adam Dickmeiss Date: Mon Jan 5 14:05:56 2004 +0000 Fix bug in diagnostics decoding commit 20ce1ea958eef4ff90fc8e5486ab058deec7065f Author: Adam Dickmeiss Date: Mon Jan 5 09:50:54 2004 +0000 Year commit 2c622539de3e2a0a5e6ca42f20c7f0379901b12d Author: Adam Dickmeiss Date: Mon Jan 5 09:45:49 2004 +0000 Remove yazmalloc references commit 8b1f021032708fbb64d8bee92be590f8ac3066a7 Author: Adam Dickmeiss Date: Mon Jan 5 09:41:31 2004 +0000 Fix flags for XML2 commit c82bbc07fb53f78aab88bb4121629daeef42ed2a Author: Adam Dickmeiss Date: Mon Jan 5 09:34:41 2004 +0000 2.0.9 candidate commit da52cf68299952193806f8093c04e46d1bbf8375 Author: Adam Dickmeiss Date: Wed Dec 31 00:14:00 2003 +0000 Fix problem with print ODR/HTTP/odr_reset commit 9fbebacf10f546b98ade3d7f7389b4241304f3a4 Author: Adam Dickmeiss Date: Tue Dec 30 15:18:53 2003 +0000 Fix ODR pritn of HTTP requests commit b1419c61a0ac369638256f2afd1fc6b8ecd8fa34 Author: Adam Dickmeiss Date: Tue Dec 30 00:29:53 2003 +0000 Fix several compile warnings commit b8daa05e7f9c86d3dc2d4204276ec7a6f9d18258 Author: Adam Dickmeiss Date: Tue Dec 30 00:23:28 2003 +0000 Remove obsolete /pdb switches commit 1df74413ba9a51d9cdcfb4ae7b5f32aae0d213e0 Author: Adam Dickmeiss Date: Tue Dec 30 00:22:11 2003 +0000 Fix return statement commit e2b321b91b26903966a53146e0fec1875199482e Author: Adam Dickmeiss Date: Tue Dec 30 00:16:24 2003 +0000 Missing return statements commit 582597c00fa0cab08133741f281b816719445198 Author: Adam Dickmeiss Date: Tue Dec 30 00:13:05 2003 +0000 Let GFS accept SRW 1.0 commit afd69722f67d2178a0286387afcd1e444f83517a Author: Adam Dickmeiss Date: Tue Dec 30 00:12:50 2003 +0000 Init recordXpath commit 037037e14faa1f992ed3574817086eabc469c9c4 Author: Adam Dickmeiss Date: Mon Dec 29 14:54:33 2003 +0000 SRW scan commit bf994e8c94edd6af6add9a94d6b14958da51a63f Author: Adam Dickmeiss Date: Mon Dec 29 13:39:41 2003 +0000 GFS could drop first record in a result set exceeding preferred message size. Reported and fixed by Irina Dijour. commit 92a2ec88190fdae80bde0730b81038c01452f51f Author: Adam Dickmeiss Date: Sun Dec 28 11:46:03 2003 +0000 Updated changes with GFS record fix commit 23d4b6d353d8f2727c3a6ff875eb04ad80063b2f Author: Adam Dickmeiss Date: Thu Dec 25 15:25:08 2003 +0000 Fix calculation of length of structured records in GFS record packer commit 0d7bebc5bead24c1cdd6c3bfdc2a9bf2b3678c07 Author: Mike Taylor Date: Wed Dec 24 16:59:12 2003 +0000 Option parsing. Still no functionality. Time to stop for Christmas. commit 9e678d07eb1deabb1cd342c6510512e9c82685cf Author: Mike Taylor Date: Wed Dec 24 16:23:43 2003 +0000 Empty benchmarking application commit bc6066a0d123d68d14074ad399926a96ad78a383 Author: Adam Dickmeiss Date: Tue Dec 23 08:47:25 2003 +0000 Note changes. commit 1eab9deeb96ddadbf8edf6b301ad9555196c1f99 Author: Adam Dickmeiss Date: Mon Dec 22 22:47:20 2003 +0000 Fix SRW/SRU NS for diagnostic commit fbb6eed845e784c43b0167712787b812ed214152 Author: Adam Dickmeiss Date: Mon Dec 22 19:46:22 2003 +0000 Handle unexpected HTTP closed sessions better commit 2fecc9fe2221c1bcbecca9730a96d7fdb04da2c3 Author: Adam Dickmeiss Date: Mon Dec 22 14:52:05 2003 +0000 Changes. commit f6010bba2dda2b3890e58961deec4a48cf2d4941 Author: Adam Dickmeiss Date: Mon Dec 22 14:46:26 2003 +0000 Towards 2.0.8 commit 49c5b42617e1fcd2e36d6f4e6628a93232b99b0f Author: Adam Dickmeiss Date: Mon Dec 22 14:24:10 2003 +0000 Init member database for explain request commit d21c0a79df949a31f337094b8e169d04a939a9dc Author: Adam Dickmeiss Date: Sun Dec 21 11:33:29 2003 +0000 HTTP header lookup case insensitive commit 7ae022686fea1c7d71db914b867032f8569ddb5f Author: Adam Dickmeiss Date: Sat Dec 20 22:40:46 2003 +0000 Init all SRW explain response members commit e28a34b085aa1970ff0ae49bb658e94a9a564e8a Author: Adam Dickmeiss Date: Sat Dec 20 19:11:39 2003 +0000 Fixed ODR usage in SRW decoding commit 9ef0cd3dce91d8effe3259ede499aaa972108c33 Author: Adam Dickmeiss Date: Sat Dec 20 00:52:08 2003 +0000 Fix SRW/SRU ns commit 06eb0818f902a5d6805b656e0ba2e39ac2ed7817 Author: Adam Dickmeiss Date: Sat Dec 20 00:51:19 2003 +0000 SRW/SRU 1.1 commit 30580efb58e1e71dfd4743db723a79a01206bac4 Author: Mike Taylor Date: Fri Dec 19 12:16:19 2003 +0000 Support for CQL transformations involving wildcard patterns, which were previously passed through untouched. We now make an effort to emit the most primitive (i.e. Bath-friendly) truncation attributes we can, based on what's in the configuration file, falling back on Z59.58-like wildcarding when necessary. The logic turns out to be non-trival (sigh ... so unlike an OpenURL resolver.) Although the code, once I'd finally arrived at it, turned out to be gratifying short and clear: If a term begins and ends with * and has no other WC characters in it AND we have a truncation.both element in the configuration file, strip the *s and use truncation.both. Otherwise, if it begins with * and has no other WC characters in it AND truncation.left is configured, use that. Otherwise, if it ends with * and has no other WC characters in it AND truncation.right is configured, use that. Otherwise, if it has any WCs anywhere in the string, transliterate * to ? and ? to # and use truncation.z3958, generating error 28 "Masking character not supported" if it's not configured. Otherwise it must be the case that it has no WCs. Use truncation.none, generating error 30 "Too many masking characters in term" if it's not configured. This arrangement allows some flexibility in the configuration file, e.g. you can omit the special-case left-, right- and both-truncation elements if you always want Z39.58-style truncation. I also fixed a small and harmless bug of Adam's, which I am pretty sure could _never_ have any effect, but which offended me anyway. This change is far too trivial to be worth mentioning in the CVS log, but I'm expecting Adam to read this, and probably go and see what the bug was :-) commit ce3481bda4af7147e61cb88f7e628e57c4c443c2 Author: Mike Taylor Date: Fri Dec 19 12:00:36 2003 +0000 Add truncation attributes. commit 2f5de47d0b100194d42e6ae9d17a994e8203da0d Author: Adam Dickmeiss Date: Thu Dec 18 23:04:23 2003 +0000 Fix memory leak in SRW/SRU encoding handler commit f3fed9cc883fdb00d409b84c3f3784368775d2d7 Author: Mike Taylor Date: Thu Dec 18 17:30:28 2003 +0000 Describe recent CQL changes. commit b7dce0eae6656ccb499233e04f5a5bf90178c7cd Author: Mike Taylor Date: Thu Dec 18 17:27:31 2003 +0000 All changes to the CQL section: Talk about context sets instead of index sets. Talk about indexes instead of qualifiers. Document new "index.set.name" specifier. (The old "qualifier.set.name" specifier is mentioned as DEPRECATED.) Describe default use of cql.serverChoice instead of srw.serverChoice. Update the example configuration file according to the above. commit 0698a93c2bb1b8e7fa7a63d906bb863ffdac40e9 Author: Mike Taylor Date: Thu Dec 18 17:05:01 2003 +0000 index set -> context set commit 9b9e5015dba09e7480f09351cfccdfafd99b2d30 Author: Mike Taylor Date: Thu Dec 18 17:02:24 2003 +0000 Comment commit 1bb6c593dea33c483d06114ab5fee75c06bc90e1 Author: Mike Taylor Date: Thu Dec 18 17:00:55 2003 +0000 Comment. commit 8e9026976dd4ff7786ceb73507ff0f0b4b6a8b6d Author: Mike Taylor Date: Thu Dec 18 16:59:28 2003 +0000 Look for cql.resultSet as well as srw.resultSet. Fall back to cql.serverChoice rather than srw.serverChoice when no index is provided for a term. (Unfortunately the structure of the code makes it hard to check both.) commit 160dbbfc3752e5be9e506bd9ab824b54e2e73e81 Author: Mike Taylor Date: Thu Dec 18 16:49:07 2003 +0000 s/qualifier/index in comments. commit 9691e3376fe3f178ac95e707610b83b36e8635c5 Author: Mike Taylor Date: Thu Dec 18 16:45:19 2003 +0000 Typo in Usage: message. commit 9c0500654d398012434385e07f44aa2a7545133b Author: Mike Taylor Date: Thu Dec 18 16:44:20 2003 +0000 Replace leading "qualifier." with "index." throughout. commit 0e2fe400d9cb82150d83c48404bead5b5d447a16 Author: Mike Taylor Date: Thu Dec 18 16:42:52 2003 +0000 Look up index-names as "index." in the qualifier configuration file, falling back to the old "qualifier." only if this fails. commit 1f8974fbf70eb3f6b1168bd2e0037284f1df1250 Author: Mike Taylor Date: Thu Dec 18 14:40:20 2003 +0000 More considered Bath Profile support. May need changes to the software to generate more Bath-friendly queries. Add support for "cql" set (replaces "srw" which is retained but deprecated) Add support for "rec" set (required by Bath) Add support for the "bath" set. Remove some old qualifiers that shouldn't be there at all. Remove qualifier.bath.remoteSystemRecordNumber (use rec.id instead) commit d46ff174293651723309c8a33312bee64556c6e4 Author: Mike Taylor Date: Thu Dec 18 13:44:59 2003 +0000 Very, very basic support for Bath profile. commit 2f42dd80660f2fe5b5bab74f0db83d968f806ba7 Author: Adam Dickmeiss Date: Thu Dec 18 13:08:48 2003 +0000 Fix @attr set for CCL to RPN commit a19316337aa3e23b74dac29e5dcad06493ecf083 Author: Adam Dickmeiss Date: Wed Dec 17 12:28:07 2003 +0000 Warn for bad base address in MARC parser commit 8d0e0fa62fea7c440a92d43452774523b5cf5faa Author: Adam Dickmeiss Date: Tue Dec 16 14:51:45 2003 +0000 Mention .NET version commit cbc706398c215b137f93d81986fd44029270a57a Author: Adam Dickmeiss Date: Tue Dec 16 14:45:59 2003 +0000 Towards 2.0.7 commit 79275c8b7ec33ad44f787051d0c47ca57daba8c5 Author: Adam Dickmeiss Date: Tue Dec 16 14:36:28 2003 +0000 Add C decl for cql.h commit 6ad80c673e9591ae178154cfe2ce002834cfdafd Author: Adam Dickmeiss Date: Thu Dec 11 00:37:19 2003 +0000 ISO2709 output for yaz_marc utility commit e323a843d06898d46d0aaac39d345bdd560c0c59 Author: Adam Dickmeiss Date: Tue Dec 9 17:13:35 2003 +0000 Fixed bad memory reference - when bad SRW/HTTP response was received commit 5b417578fa8bce4671d29d59201ae0ad0c7e5653 Author: Adam Dickmeiss Date: Tue Dec 9 12:51:16 2003 +0000 Added missing C decl macros for soap.h and srw.h. commit 95d3dcd343af68f6979dedb1e44f5781f1575df7 Author: Adam Dickmeiss Date: Thu Dec 4 13:20:39 2003 +0000 Towards 2.0.6 commit a020d200f829b4c3fb5fbb44fd83572405f8cf87 Author: Adam Dickmeiss Date: Thu Dec 4 13:02:28 2003 +0000 Changes commit b0940b7daa836cd50ed2be23d539fec9de602c89 Author: Adam Dickmeiss Date: Thu Dec 4 12:57:30 2003 +0000 Remove unused local var commit f52a29d87484996d9e18397b2bf07d28ad8cf99e Author: Adam Dickmeiss Date: Thu Dec 4 11:48:06 2003 +0000 Transfer decode memory to stream commit e5e0009a3e78e4ca72b5e0a4768e300091170323 Author: Adam Dickmeiss Date: Thu Dec 4 11:47:50 2003 +0000 memset freed NMEM block to Y (59 Hex) commit cc411c43c6681ea13581b8fbf17fd197f2612cd9 Author: Adam Dickmeiss Date: Thu Dec 4 11:46:36 2003 +0000 Add missing CDECL around this commit 5bd7d278653dd178ca7da5a1bcc79724017ecd5e Author: Mike Taylor Date: Fri Nov 28 09:02:19 2003 +0000 Kang-Jin Lee's typo commit afb64801b0ba90d99482d66eeb675e280628c996 Author: Adam Dickmeiss Date: Thu Nov 27 15:39:16 2003 +0000 Remove Index Data/ from implementationName (for response as well) commit b1cbe58ba4e530026c0d586eb1fbacd44e08cff6 Author: Adam Dickmeiss Date: Thu Nov 27 15:37:23 2003 +0000 Remove Index Data/ from implementationName commit a38648255b03b429e900f150cdf59eec987a7371 Author: Mike Taylor Date: Wed Nov 26 22:47:42 2003 +0000 Use odr_prepend() to assemble "implementation*" strings. commit 96886341515b414c7aed9112d41b1f346f95e24c Author: Mike Taylor Date: Wed Nov 26 16:56:00 2003 +0000 Omit leading space from ZOOM-C version number extracted from $Revision$ commit 4fbc7c05a14d80187951b2fc690ba71374449124 Author: Mike Taylor Date: Wed Nov 26 16:23:42 2003 +0000 Add odr_prepend() commit 23794062255aca1313eaff359edb7b73a5f1a742 Author: Mike Taylor Date: Wed Nov 26 16:22:35 2003 +0000 Use odr_prepend() to generate implementation{Id,Name,Version} commit 79c6d1159a62591c6fe14452fd09a3bd7394344f Author: Adam Dickmeiss Date: Tue Nov 25 23:19:59 2003 +0000 Allow command to send extended service package commit 6e27325647596d80d9fcf1c9ad8f10be7004718a Author: Adam Dickmeiss Date: Tue Nov 25 23:18:08 2003 +0000 More work on extended services, create database, drop database, update record commit 823ed165c1796f9d554178c6177b6e495b4290ba Author: Adam Dickmeiss Date: Tue Nov 25 19:46:18 2003 +0000 Mention -installa commit 8827b69f7d7ac9aee5fa3bdddc8f727b18497630 Author: Mike Taylor Date: Tue Nov 25 10:08:06 2003 +0000 ZOOM-C options changes. commit 1615d14c893250613d6670abe2b71533687aec4d Author: Mike Taylor Date: Tue Nov 25 09:55:20 2003 +0000 Describe "presentChunk" option in preference to old "step" (though that is also still mentioned). Clarify its meaning. commit f87d2eee00acc830ada9ee98c347f3d1415ea74b Author: Mike Taylor Date: Tue Nov 25 09:50:35 2003 +0000 Use new "presentChunk" options in preference to old "step" if it's defined. (But still fall back on "step" if it's not.) commit e8dc7001d403b6b4364753fcd194647cbfd737a1 Author: Mike Taylor Date: Mon Nov 24 11:27:57 2003 +0000 Document the newly-supported standard ZOOM options "serverImplementationId", "serverImplementationName" and "serverImplementationVersion" (as specified in the forthcoming AAPI 1.4), but note continues support for the old "targetImplementationId", "targetImplementationName" and "targetImplementationVersion" for the benefit of old applications.) commit bb0c882cc25ef16cea865719e4f51df16f645ea9 Author: Mike Taylor Date: Mon Nov 24 11:25:07 2003 +0000 Support the standard ZOOM options "serverImplementationId", "serverImplementationName" and "serverImplementationVersion" (as specified in the forthcoming AAPI 1.4), but continue also to support the old "targetImplementationId", "targetImplementationName" and "targetImplementationVersion" for the benefit of old applications.) commit 81c23570ac55dbb3faa04a6625a45d9c617c5c02 Author: Adam Dickmeiss Date: Wed Nov 19 22:24:57 2003 +0000 Add MARC21 as an alias for USMARC commit 6f5f4e50b5ca6f814995222adfff91f47ca45385 Author: Adam Dickmeiss Date: Wed Nov 19 22:06:06 2003 +0000 Updates OID, display term, etc commit 2bf08e725ba16cfa16df8d03468891c57c1670b8 Author: Adam Dickmeiss Date: Wed Nov 19 22:05:15 2003 +0000 Added a few URLs commit 13799de54193c0805742fcea46b493b2e2bcd98e Author: Adam Dickmeiss Date: Wed Nov 19 22:04:58 2003 +0000 Better looking frontpage commit cbd3dfed0ab7919bf1deb0e8af5fed4ffb8bdf5d Author: Adam Dickmeiss Date: Wed Nov 19 21:17:26 2003 +0000 Mention yaz-iconv, yaz-marcdump in documentation commit 8d92137c228ec24df2d62a8039635bb8ad19558d Author: Adam Dickmeiss Date: Wed Nov 19 19:07:26 2003 +0000 Implement ZOOM_scanset_display_term commit 2f405fd826dd2f2e837fe3557274fdc2c08d2f02 Author: Adam Dickmeiss Date: Wed Nov 19 19:06:41 2003 +0000 For Scan, yaz-client shows displayTerm if present commit ea46811da745f751b8db974a0a53517244e4a89d Author: Adam Dickmeiss Date: Wed Nov 19 19:04:12 2003 +0000 More tweaks for documentation CSS commit 0f2384e1337d9c4a23262a81312d54eccb8efaf6 Author: Adam Dickmeiss Date: Wed Nov 19 14:49:10 2003 +0000 Sans-serif fonts for headlings. Indent examples. Italic captions commit c40fa4c2f95aba19456731fa51c5a19a1aa19cb2 Author: Adam Dickmeiss Date: Wed Nov 19 14:03:36 2003 +0000 Configure uses pkg-config to get OpenSSL compile info where available commit 422a45e862fa7d6ed7ff4f5b5dcd7a7b503631f1 Author: Mike Taylor Date: Wed Nov 19 13:47:05 2003 +0000 Add OID for the new ExtLite attribute set. Add OIDs for NACSIS-CATP, FINMARC2000 and MARC21-fin record-syntaxes, as requested/supplid by Ere Maijala commit 75673d92aa9bc56afbf443569d9636fa4b95d2ec Author: Adam Dickmeiss Date: Tue Nov 18 21:06:26 2003 +0000 RedHat package updates for yaz-iconv commit 65f59a503a2450254dad6b8ce22330095a61a6ea Author: Adam Dickmeiss Date: Tue Nov 18 20:48:36 2003 +0000 yaz-iconv man page commit ec00b639169c2fb10e295ad712cb417156839d09 Author: Adam Dickmeiss Date: Tue Nov 18 20:34:34 2003 +0000 man page for yaz-iconv commit 4a27cb183d61f160ea6c012026d015437783d33a Author: Adam Dickmeiss Date: Tue Nov 18 18:39:24 2003 +0000 Make libyaz-devel depend on libxml2-devel commit 4f1622d17926aa4b30b0332905b087f912a5b5f6 Author: Adam Dickmeiss Date: Mon Nov 17 22:36:37 2003 +0000 Debian package updates commit 7330ea6fe4f984d5bd0498aa7e962ad4d7462916 Author: Mike Taylor Date: Mon Nov 17 21:32:58 2003 +0000 Reverse the order of "toolkit-supplied / application-supplied" strings sent as implementationId, Name and Version. Also, remove the spaces around the slash. This brings the GFS in line with the behaviour of ZOOM-C on the client side. commit 3dad3dbf94b411b5ebaf0714aa40d91def9d0945 Author: Mike Taylor Date: Mon Nov 17 16:52:52 2003 +0000 Note ZOOM-C enhancements commit 9236c79b8c1ea40370333bdce0f41145a9cb889e Author: Mike Taylor Date: Mon Nov 17 16:01:12 2003 +0000 Add support for implementationId and implementationVersion options to go along with implementationName. commit e7f794c7bf10e503d83fbb4284e5b3ad3df20c7e Author: Mike Taylor Date: Mon Nov 17 15:00:41 2003 +0000 Clarify description of piggy-backing, including moving all the elementSetSmallerThanSomewhatColour options from the Result Set Options table into the Connection Options table (since that's where they need to be set: by the time you set them on a Result Set, it's too late). This emerges from the work to standardise ZOOM options across bindings and implementations. commit 078ac9ebd245ab061726b49c41218549665dc61e Author: Mike Taylor Date: Mon Nov 17 10:40:56 2003 +0000 Include system-level error message in cs_errmsg() output when appropriate commit d8bba5ddfc90e17c8ce8eb509b868e74aed4765b Author: Mike Taylor Date: Mon Nov 17 10:40:08 2003 +0000 Add CSLASTERROR commit 000e5d43c17d2fd2bc91c48be97cb288a9746f8f Author: Adam Dickmeiss Date: Sun Nov 16 23:02:08 2003 +0000 Customize DSSSL for YAZ to use CSS commit 282f6995f72787ec08d70dd4c5ada29728ba49f3 Author: Adam Dickmeiss Date: Sun Nov 16 22:56:53 2003 +0000 Customize XSL for YAZ and add CSS for it commit a60b4f503640ee9ba810fbb5f07f754f22f922d0 Author: Mike Taylor Date: Mon Nov 3 21:30:23 2003 +0000 Ignore generated files commit 95caf42425fc1c7b6ba46fb35178a0e8a6b54ec8 Author: Adam Dickmeiss Date: Mon Nov 3 14:05:54 2003 +0000 Fix address commit bd704a58e941b7539473acd766c0ba3d155c3b29 Author: Adam Dickmeiss Date: Mon Nov 3 10:56:15 2003 +0000 Ooops commit 02892c02c9a5151b57db6d14e9a01a8d8c0d750d Author: Adam Dickmeiss Date: Mon Nov 3 10:55:44 2003 +0000 Mike author too commit 83826a4336911dffd420ce9c147156d7c7fbc894 Author: Adam Dickmeiss Date: Mon Nov 3 10:54:49 2003 +0000 minor commit 25bb8e0408680b477ff222771ab0544ac5f314c5 Author: Adam Dickmeiss Date: Mon Nov 3 10:54:01 2003 +0000 Fix link to europagate commit ae3d95927f9d9d0a02a271ee6bdce89b26b3ff4e Author: Adam Dickmeiss Date: Mon Nov 3 10:47:24 2003 +0000 Use example tag consistently commit 76194825bc72e6a8a710af2e9332b7dd034cf6a9 Author: Adam Dickmeiss Date: Mon Nov 3 10:47:06 2003 +0000 Fix spelling commit 96ca9f70fe68d941a7604f3dd1a6d5817556ddf0 Author: Adam Dickmeiss Date: Mon Nov 3 10:46:52 2003 +0000 Use example tag. Using Apache as SRW/SRU frontend commit ead1fed26c763853e05c25163d1916bee1684fc5 Author: Adam Dickmeiss Date: Mon Nov 3 10:45:05 2003 +0000 Use example element. Pointer to BER/ASN.1 standards/tutorial commit d1ad544488a515cb6ad80d1b98863baa57abb567 Author: Mike Taylor Date: Mon Nov 3 09:49:58 2003 +0000 Describe encoding of string attribute-values commit 29c7ed2c90cd7aa5b69ec785c618b260f9525b1b Author: Mike Taylor Date: Mon Nov 3 09:34:02 2003 +0000 Fix typo in grammar for @term commit 4d16fbc7b32700afd686bbaa51c2253d7f3287ec Author: Adam Dickmeiss Date: Sun Nov 2 17:59:28 2003 +0000 For HTTP requests, specify Host header (required by HTTP 1.1) commit accf4ae2bea381ba902f2058e8182510f96a0b5d Author: Adam Dickmeiss Date: Sun Nov 2 17:58:16 2003 +0000 Use 'Host' rather than 'host' for HTTP header commit 54462bdd66000b20ff13b8545ed58a838a12b793 Author: Adam Dickmeiss Date: Wed Oct 29 13:26:34 2003 +0000 Allow user,group,umask to be specified for Unix file socket commit 56d270b5025b8a6482f2d5cae6c8c72ce7f54b50 Author: Adam Dickmeiss Date: Mon Oct 27 13:43:43 2003 +0000 Fix documentation NSIS section commit a20cd84700c6053806bd89d37ab55eea6d160047 Author: Adam Dickmeiss Date: Mon Oct 27 13:35:24 2003 +0000 Update Windows Installer for new source layout commit e7895a6921a66c64484ef1d2434ffb8f9a8d9464 Author: Adam Dickmeiss Date: Mon Oct 27 12:34:09 2003 +0000 yaz-marcdump man page commit 97e3dda0b95f4f7a86d1bab2a0ba8eceaeff44ca Author: Adam Dickmeiss Date: Mon Oct 27 12:32:03 2003 +0000 Restructure of YAZ source commit c6e47cbbff56f39f6d81b079ebaeac41d793d4d9 Author: Adam Dickmeiss Date: Mon Oct 27 12:21:21 2003 +0000 Source restructure. yaz-marcdump part of installation commit c71d717ada2a9ef730d527f161eb5ba9aa641a9f Author: Adam Dickmeiss Date: Thu Oct 23 09:56:57 2003 +0000 Fix sample PQF commit e0b4bd0a5d34761d221be1d8809ec466e51b6754 Author: Mike Taylor Date: Tue Oct 21 12:44:42 2003 +0000 Tweak output format for nicer Init diagnostic messages commit c80275992d29b4815dd25d9203e094ae2880f1ae Author: Mike Taylor Date: Tue Oct 21 12:35:50 2003 +0000 Nice rendering for otherInfo in Init Response, including init diagnostics returned in accordance with Implementor Agreement 5 commit 0ee9db55cdfd44205cd2e389b27a79c3a2cb7dd6 Author: Adam Dickmeiss Date: Tue Oct 21 09:48:23 2003 +0000 Fix another request leak that occured on bad HTTP requests commit 2e0cefa8b248dafdbc6518d12d0ba646d2f19565 Author: Adam Dickmeiss Date: Tue Oct 21 09:30:32 2003 +0000 Flag zero-zero as error in completeBER commit b3c7ee20442440628e2772c087bdf55c8b007fce Author: Adam Dickmeiss Date: Mon Oct 20 20:48:37 2003 +0000 Fix release of requests (bug introduced by previous commit) commit 6588b4176290d756fa422b9b93e297ddba3e22d8 Author: Adam Dickmeiss Date: Mon Oct 20 18:21:45 2003 +0000 Do not allow more than 8K HTTP header (potential DOS attack) commit ea27f95dc32881b53a436c22b92e704f28a553a6 Author: Adam Dickmeiss Date: Mon Oct 20 18:20:55 2003 +0000 Fix leak in GFS that occurred when on ODR decoding error commit 99837f06c78dde81614bab9a3a58c005b004338d Author: Adam Dickmeiss Date: Mon Oct 20 13:44:05 2003 +0000 Prevent completeBER from returning 0 (PDU incomplete) on bad packages: it eats all memory until the process dies. commit 29a22396d7d7b1219f5b83c35983c8fb1cd79e8f Author: Adam Dickmeiss Date: Fri Oct 17 14:14:10 2003 +0000 Document -x and -k commit 4ba35f416af215511bfecb60a6c1e17d5723bddb Author: Adam Dickmeiss Date: Fri Oct 17 14:13:59 2003 +0000 Option -d to dump raw PDUs commit 668acdac33bd70daab674b47cd8654c83327e027 Author: Adam Dickmeiss Date: Thu Oct 16 10:37:06 2003 +0000 Add const to odr_perror message string commit 8195969f51aeb023710b6dd7ae39daaf7d625313 Author: Adam Dickmeiss Date: Thu Oct 16 10:18:56 2003 +0000 Fix warning commit e903da3b97a96b97de07a6a6deebf4b64d63a152 Author: Adam Dickmeiss Date: Thu Oct 16 10:18:29 2003 +0000 Remove extra ; commit 47665d5b746ad35798802738a6bb9118b8b1f20d Author: Adam Dickmeiss Date: Thu Oct 16 08:29:07 2003 +0000 Set YAZ_VERSION to 2.0.5 commit dca2c0c7693ce74885bedb35b3189173aa8a3d92 Author: Adam Dickmeiss Date: Thu Oct 16 08:27:40 2003 +0000 Compress man pages commit 88f9a8d15a81e2f425c57752047502d42b2827bc Author: Adam Dickmeiss Date: Mon Oct 13 21:28:27 2003 +0000 Towards 2.0.5. Update CHANGELOG commit fa3f53eb473b7d7cb50f83e094526dbd58cd5760 Author: Adam Dickmeiss Date: Thu Oct 9 15:51:36 2003 +0000 Towards 2.0.5 commit cfaa7c613385207003734b508b7bdff51ff90a7e Author: Adam Dickmeiss Date: Wed Oct 8 21:48:19 2003 +0000 Use new name for present-status-success commit bef6611df76c31df3c12bfe3f16084133ad5b52a Author: Adam Dickmeiss Date: Wed Oct 8 21:47:15 2003 +0000 Use bitmask for COMSTACK blocking parameter. Bit 0 (&1) controls whether socket is blocking or not. Bit 1 (&2) specifies whether reverse lookup should be performed in cs_addrstr; 0=full/slow ; 1=IP/fast. commit 64fdfaf56bcdb9144ec528f01771967f9981679f Author: Adam Dickmeiss Date: Thu Oct 2 19:47:41 2003 +0000 Remove symlinks for docbook2man. Add link for apilayer.png commit ea8a7e8ee5a459c4a995bf7d422ae2bca97c644d Author: Adam Dickmeiss Date: Thu Oct 2 06:30:45 2003 +0000 Quote ICONV_DIR/LIBXML2_DIR as suggested by Michael Freidgeim commit 34abcc554c790d1353f7ff1e7d76f223ac2c5388 Author: Adam Dickmeiss Date: Wed Sep 24 08:37:16 2003 +0000 Changes commit 0608ae655027f416c99b64e92fd468ab4d9a6c32 Author: Adam Dickmeiss Date: Tue Sep 16 20:48:28 2003 +0000 Fix rare SEGV in unix_addrstr with bad reference of UNIX socket path. commit 63f0ec14ae0d0f47e12c6fae2bfadb590ae2442a Author: Adam Dickmeiss Date: Tue Sep 16 20:15:48 2003 +0000 Changes commit 7ac44ff02a85cb8300da48bf08597af743f9b0ee Author: Adam Dickmeiss Date: Tue Sep 16 19:46:56 2003 +0000 Only C89 comments commit 0d82f249f832e8b0a6f2dc099304219e2ad29f72 Author: Adam Dickmeiss Date: Tue Sep 16 19:38:53 2003 +0000 Remove , commit ae9c5cbeb43ef0dc02d1c54d4a3b6291263a1641 Author: Adam Dickmeiss Date: Tue Sep 16 10:15:29 2003 +0000 Fix DOS format , no end of line commit f2b835100d3af6249f8659de9ecd15b5ce7446a9 Author: Adam Dickmeiss Date: Mon Sep 15 13:48:35 2003 +0000 Fix permission of postinst commit fb37a88ea31abe662d996deeeff6f2eca111f68c Author: Adam Dickmeiss Date: Mon Sep 15 12:57:29 2003 +0000 Fix permissions commit 2ba9155a6148802abc4949db2ed27a8b2934d5dc Author: Adam Dickmeiss Date: Thu Sep 11 12:45:11 2003 +0000 Reinstate THESAURUS since Elvil (better named 'evil') uses it. commit 53e939f11632e0ef384eee99983478c6bd88c7c8 Author: Mike Taylor Date: Thu Sep 11 12:30:59 2003 +0000 Reinstate VAL_SPAWN_OF_SATAN_THESAURUS since Elvil (better named 'evil') uses it commit 6aa60532542a01bfe78be0c91cbf57ce7cf851ce Author: Mike Taylor Date: Tue Sep 9 20:20:25 2003 +0000 Init diagnostics commit 58f8067bb0bac4d08b7fae8e0e93159759ce4dfa Author: Mike Taylor Date: Tue Sep 9 16:03:46 2003 +0000 When the back-end refuses initialisation, return diagnostics in a UserInfo-1 external in the Init response's User-information field, in accordance with Z35.90 Implementor Agreement 5 (Returning diagnostics in an InitResponse) at http://lcweb.loc.gov/z3950/agency/agree/initdiag.html (It's bothered me for literally about six and a half years that YAZ didn't do this -- right back to when I made the Index+/Z39.50 gateway for SSL in 1997.) commit 0b14b8e823580f06a417e38b6be7c875f3b4e5f5 Author: Adam Dickmeiss Date: Thu Sep 4 18:52:02 2003 +0000 Minor changes. Use libxml-2.5.10 commit 4acb9088c874e971fbe37f3d65ea4f47764e6219 Author: Adam Dickmeiss Date: Thu Sep 4 18:51:49 2003 +0000 Fix return of value commit e7819dea9102895078079cbf7db26a5e563463e3 Author: Adam Dickmeiss Date: Thu Sep 4 18:18:07 2003 +0000 Towards 2.0.4 commit 13cf18688ed84678703cf643bf8b140d091c226e Author: Adam Dickmeiss Date: Thu Sep 4 18:13:39 2003 +0000 Allow any CQL relation commit f06ca89e9eb0d0205a5ed97154d81e0064942d02 Author: Adam Dickmeiss Date: Thu Sep 4 17:44:49 2003 +0000 Fixes for OCLC UI ASN.1 so that it works with SilverPlatter targets too commit 4b3d1e197d75fcb2607be8d86d244f20c4180000 Author: Adam Dickmeiss Date: Tue Sep 2 12:12:12 2003 +0000 Implemented command update0 in YAZ client which is equivalent to update but uses old of Ext Update ASN.1. Use OID 1.2.840.10003.15.1000.81.1 for privately defined charsets in charset negotiation. Added VAL_ID_CHARSET in oid.h. Previously no OID was used for this info. commit 73dfa31aa3d623a2032525637ac07e78886cd4fd Author: Mike Taylor Date: Mon Aug 25 19:53:33 2003 +0000 failReason is no longer OPTIONAL, as advised by OCLC commit 83f95c956c2a3574759677b50f37e4fafb750cbf Author: Adam Dickmeiss Date: Tue Aug 19 12:32:28 2003 +0000 Use smallSetUpperBound=1 for ZOOM piggyback commit 472125ab093c3d31a28bbda92899bf8425679542 Author: Adam Dickmeiss Date: Wed Jul 30 22:33:12 2003 +0000 Fix ODR charset to use negotiated charset. Patch by Aaron Lav commit adc23cad74e4685c31fb088f84c34df347a5a6ee Author: Adam Dickmeiss Date: Wed Jul 30 11:39:45 2003 +0000 Yet one more OPAC fix commit 08ba4c2c26f2653c1e3ede909dc49bc17361ce7a Author: Adam Dickmeiss Date: Wed Jul 30 10:00:27 2003 +0000 Fix missing element, duplicate element commit a13492cef8a221e561ce1aa61865f03585e23799 Author: Adam Dickmeiss Date: Wed Jul 30 08:57:34 2003 +0000 OPAC record fixes commit 03c4f31ffb1a8a3c31d82dba28de87eb5b82ebd3 Author: Adam Dickmeiss Date: Tue Jul 29 15:09:19 2003 +0000 More ZOOM logging commit f9536e142ac3a38116fae114ab2f832b4cb58da1 Author: Adam Dickmeiss Date: Tue Jul 29 15:08:28 2003 +0000 Missing z-oclcui.h in _headers commit fed4c59a3c26f04ba3764947aa2f7ecdd9b46889 Author: Adam Dickmeiss Date: Fri Jul 25 11:11:19 2003 +0000 Change order of compilation to reflect Unix AM. commit 6164387805efc64a201204fa81e531a201d77014 Author: Mike Taylor Date: Thu Jul 24 09:44:52 2003 +0000 Fix the OID of "admin" extended service. Swap the human-readable text corresponding to the CQL and OCLC-userInfo OIDs, which had somehow got confused. Bring the CHANGELOG up to date with these and other changes. commit b258a14997c70bf78310b2e094eb6bcf14b26a55 Author: Mike Taylor Date: Wed Jul 23 12:57:22 2003 +0000 Note incorrect ID-private OID for VAL_ADMINSERVICE commit 94c77ca831e55b3dee31184347f25dd0583085d2 Author: Mike Taylor Date: Wed Jul 23 12:07:30 2003 +0000 Note incorrect ID-private OID for VAL_ADMINSERVICE commit 8edb56d9b3ffbf66b0d022b69fb926edb624535a Author: Adam Dickmeiss Date: Sat Jul 19 13:48:49 2003 +0000 makefile updated for oclcui.asn commit 0442642bb213139271943552e5c1bc731ee96872 Author: Mike Taylor Date: Fri Jul 18 22:41:25 2003 +0000 Tidy up debugging output commit 759184a854d23a99ca8ac0d401d5e3886cfde45b Author: Mike Taylor Date: Fri Jul 18 22:36:39 2003 +0000 Tweak as dictated by Adam, who is much better at reading packet dumps than I am :-) OCLC should be ashamed of themselves, sending ASN.1 that bears so very little resemblance to what they document! commit 5381b2f81bb793e364cd5b2a910e026ce84d9d05 Author: Mike Taylor Date: Fri Jul 18 19:54:30 2003 +0000 Support for the UserInformation DPU OCLC-UserInformation: - Add VAL_OCLCUI to oid.h - #include in include/yaz/proto.h - #define Z_External_OCLCUserInfo in include/yaz/prt-ext.h - Add Z_OCLC_UserInformation *oclc branch to Z_External.u - Add "OCLC-userInfo" entry to OID database in util/oid.c - New file "oclcui.asn" in z39.50 directory - Mention "oclcui.asn" and "z-oclcui.c" in z39.50/Makefile.am - Add VAL_OCLCUI registration in z39.50/prt-ext.c - Add arm to union-database in Z_External() in z39.50/prt-ext.c - Include UserInfoFormat-oclcUserInformation in z39.50/z.tcl (This is a handy checklist next time I need to add something.) More verbose authentication-setting in command-line client. Temporary debugging code in client (for OCLC diagnostics). commit d3f87757eae53fd87d2e3e48a392a9e06872f71b Author: Mike Taylor Date: Fri Jul 18 19:53:28 2003 +0000 Support for the UserInformation DPU OCLC-UserInformation: - Add VAL_OCLCUI to oid.h - #include in include/yaz/proto.h - #define Z_External_OCLCUserInfo in include/yaz/prt-ext.h - Add Z_OCLC_UserInformation *oclc branch to Z_External.u - Add "OCLC-userInfo" entry to OID database in util/oid.c - New file "oclcui.asn" in z39.50 directory - Mention "oclcui.asn" and "z-oclcui.c" in z39.50/Makefile.am - Add VAL_OCLCUI registration in z39.50/prt-ext.c - Add arm to union-database in Z_External() in z39.50/prt-ext.c - Include UserInfoFormat-oclcUserInformation in z39.50/z.tcl (This is a handy checklist next time I need to add something.) More verbose authentication-setting in command-line client. Temporary debugging code in client (for OCLC diagnostics). commit aeb5cc9755e2e4d6a788f0bf162017215772cbf8 Author: Adam Dickmeiss Date: Wed Jul 16 21:02:05 2003 +0000 Set resultCount to 0 in sort handler of frontend server commit 45b64d66df5092f645ce3eb5b979e28d16ed0b07 Author: Adam Dickmeiss Date: Tue Jul 15 08:26:26 2003 +0000 opacdisp.obj commit 6607d0bd04b26591614a84a9aa9bad7e7b00e7e9 Author: Adam Dickmeiss Date: Mon Jul 14 12:59:22 2003 +0000 OPAC record support for ZOOM commit 9360e7e7d56e77fb1253faa1232c0417cd5d3ee3 Author: Adam Dickmeiss Date: Mon Jul 14 12:58:18 2003 +0000 New utility wrbuf_xmlputs commit e1efa4cdf426e7eb952584ed4b9d3b818c8ff070 Author: Mike Taylor Date: Fri Jul 11 09:51:13 2003 +0000 Add documentation for oid_name_to_oid(), oid_to_dotstring() and oid_name_to_dotstring() commit bfad6661c8f3102304f1d79ed0ba2ff9aee2031b Author: Mike Taylor Date: Fri Jul 11 08:13:17 2003 +0000 New OID-translation functions commit 6636ca51def4b3e20a12505812397df355e2dfa2 Author: Adam Dickmeiss Date: Thu Jul 10 20:55:11 2003 +0000 Revert z_IU0Update changes in z3950v3.asn. commit 3d47aeca3756dc7d1c2ea91f74fef2b0886f76e8 Author: Mike Taylor Date: Thu Jul 10 11:51:46 2003 +0000 Add oid_name_to_oid(), oid_to_dotstring() and id_name_to_dotstring() commit b0555501e434d0f71f97ea17f282db2e795ff950 Author: Mike Taylor Date: Thu Jul 10 11:50:32 2003 +0000 Remove the oid_name_to_dotstring() function, which is now in oid.c (with a somewhat modified interface). Change the invocation to use the new thread-safe interface. commit c12f2351ad72e5e4788f30684de0d98e5bc0dc1e Author: Mike Taylor Date: Wed Jul 9 23:00:21 2003 +0000 display_records() now displays the record syntax OID as well as its symbolic name. It does this using a new utility function, oid_name_to_dotstring(), which is currently file-static but should probably go into the oid.c module. commit cf273cb8a7f73124935713928cd5df5b537f8b9c Author: Mike Taylor Date: Wed Jul 9 22:38:12 2003 +0000 Fix description of ZOOM_record_get("syntax") commit 4e738d9131106878f8b560e53034241db99d6099 Author: Adam Dickmeiss Date: Tue Jun 24 23:03:04 2003 +0000 Move ccl_pquery to ccl module (ccl.h). Add proper CCL test. commit 3cc234c5828fe21164f578848e6c32a0b1e09778 Author: Adam Dickmeiss Date: Mon Jun 23 12:42:14 2003 +0000 Another CCL->RPN fix. commit f4f32744882a4da78763956d1d363ea20a6bb471 Author: Adam Dickmeiss Date: Mon Jun 23 12:41:44 2003 +0000 Another CCL->RPN fix commit 1528b5eb5d95e8a0cb788b30af87178ca6534cf9 Author: Adam Dickmeiss Date: Mon Jun 23 12:38:39 2003 +0000 Fix CCL->RPN code for attribute strings. commit 7a7b5bfb988286089e1fbd498a8cfc4d2a5799e0 Author: Adam Dickmeiss Date: Mon Jun 23 10:24:00 2003 +0000 Debian release commit 79135288365437a3b1ee89ba36059dcec9f52a70 Author: Adam Dickmeiss Date: Mon Jun 23 10:22:21 2003 +0000 String attributes for CCL parser commit 4fa3973d89505116482232547bdeede84675f535 Author: Adam Dickmeiss Date: Sun Jun 22 11:48:33 2003 +0000 Fix compile warnings commit 88a38d975d021383194f2ec2a4e5a9b55decd21a Author: Adam Dickmeiss Date: Sun Jun 22 11:47:18 2003 +0000 Fix compile warnings commit 6f67e2799f0658a6abe374a3f31b7ec4810d65f0 Author: Adam Dickmeiss Date: Fri Jun 20 11:14:47 2003 +0000 documentation was part of libyaz; it must only be part of yaz-doc commit 96213b68ef6504b66a69e7167f23e7b549c4e832 Author: Adam Dickmeiss Date: Fri Jun 20 10:23:15 2003 +0000 Debian date update commit aaa38e89fd07e2bb5b0c0941af6bb4bc5553350a Author: Adam Dickmeiss Date: Fri Jun 20 10:21:49 2003 +0000 Changes. commit 6a26b59bc0d1b1181eec45a037b520f9f16ea304 Author: Adam Dickmeiss Date: Fri Jun 20 10:21:20 2003 +0000 Changes commit 2b63bef2ba80986b0d0431edddfa662580734897 Author: Adam Dickmeiss Date: Fri Jun 20 10:18:05 2003 +0000 More on CCL profiles commit 73f8c92214bd7afdb0e465dec053272130b53bb5 Author: Adam Dickmeiss Date: Thu Jun 19 23:05:29 2003 +0000 More on CCL profiles commit 985066ac6dfae6ac68960044fa05b4f7ea782b86 Author: Adam Dickmeiss Date: Thu Jun 19 21:10:03 2003 +0000 client does not close socket if decoding of PDU failed commit 594abeca3faac015a41b74ea9ee00df8708cf97f Author: Adam Dickmeiss Date: Thu Jun 19 21:09:25 2003 +0000 More printing for odr_perror commit 484fb80d9d457cb1d2967e0af0c4b88008bec79e Author: Adam Dickmeiss Date: Thu Jun 19 19:51:40 2003 +0000 Fix CCL directive @case handling so that it affects both keywords and qualifiers. commit 6eadf7b292a2375dde584cb876e3c9741c63d1de Author: Adam Dickmeiss Date: Wed Jun 11 18:37:10 2003 +0000 Dont use charconv_cjk.xml commit 84049ee5c6f284d80f72eba941307a0a2a7a6dbb Author: Adam Dickmeiss Date: Wed Jun 11 18:36:57 2003 +0000 Option -x shows hex dump of PDUs commit 7a0bd77bddcc803e5af23842dfd7fc83f02420f7 Author: Adam Dickmeiss Date: Wed Jun 11 11:09:22 2003 +0000 do not use charconv_cjk as is commit 0fffcb9ad658a63888678e2c7ca3e5cba9ca6a2c Author: Adam Dickmeiss Date: Tue Jun 10 11:24:03 2003 +0000 libyaz-dev depends on libxml2-dev commit 4c6462484342ee50f5d26f9fb3a625481b3d5bba Author: Adam Dickmeiss Date: Wed Jun 4 13:28:36 2003 +0000 Towards 2.0.3 commit 97e4d969c386e27b6a743fdf4c8d891170b8900a Author: Adam Dickmeiss Date: Wed Jun 4 13:25:37 2003 +0000 Added pop, pieter commit 9a8d8a211ddaa44211702d8cfcfefcdcbcf6276a Author: Adam Dickmeiss Date: Wed Jun 4 09:45:00 2003 +0000 Allow number of iterations to be specified for cql2pqf commit 9c27c751063dfcb13208f2ddc9bf3151a62c0794 Author: Adam Dickmeiss Date: Wed Jun 4 09:44:05 2003 +0000 Prevent memory leak if cql_parse is called repeatedly commit 2d3963fa7fe0f9f55d2f92e11ce03c5c9619de6c Author: Adam Dickmeiss Date: Wed Jun 4 09:15:40 2003 +0000 On the form[; charset=from[,to]] topic. commit ee083e1994e399ceb209780ff4bce7168c8bc82b Author: Adam Dickmeiss Date: Tue Jun 3 13:59:28 2003 +0000 Set smallSetElementSetName always in piggyback mode commit 790b75a5d95551b519aba2fd3a1f95cdac08c406 Author: Adam Dickmeiss Date: Tue Jun 3 09:17:12 2003 +0000 MARC-8 Asian, etc. commit fa81887b7cffa038fd4b0a4577d2071bd9a3cad0 Author: Adam Dickmeiss Date: Tue Jun 3 09:11:13 2003 +0000 WIN32 updates commit 31fc3893f4ee8cd8851ffdccf8a510d3cb4c3f59 Author: Adam Dickmeiss Date: Mon Jun 2 22:17:20 2003 +0000 charconv takes multiple input files commit cbdc36676c2e563581f4db76d976093429372db6 Author: Adam Dickmeiss Date: Mon Jun 2 13:44:54 2003 +0000 Added cqlstrer to win makefile commit 0e96e3780fe77ed9f8bd78245b9e9a8a42c0892d Author: Adam Dickmeiss Date: Mon Jun 2 12:53:27 2003 +0000 ESFormat-Update updates. Character set conversion for ZOOM_record_get. commit 77ad18d6eceea270338ae338f1e7d24f1003df24 Author: Adam Dickmeiss Date: Fri May 30 10:31:29 2003 +0000 Documentation for recordCharset commit 660689d0e3d249b5d6c10fa695e621ec5b8e36a9 Author: Adam Dickmeiss Date: Fri May 30 10:24:58 2003 +0000 Implemented ZOOM option: recordCharset commit 103dc949161eb23f38ee58cffcf8f039ef679cb8 Author: Adam Dickmeiss Date: Tue May 27 21:44:10 2003 +0000 Change to yaz-asncomp commit 3aa7b8fdff94c15c0c74ce809828dfb642696418 Author: Adam Dickmeiss Date: Tue May 27 21:42:45 2003 +0000 reordered tstodr_SOURCES commit 92887fb8af4d8697f6569d6a6756860fea5f4b84 Author: Adam Dickmeiss Date: Tue May 27 21:12:22 2003 +0000 YAZ ASN.1 compiler renamed from yaz-comp to yaz-asncomp commit 207401f82e01f380a3549fe5576069ac4b45331e Author: Adam Dickmeiss Date: Tue May 27 12:45:23 2003 +0000 Manual page for yaz-comp commit 087aa6548dbee815eed2e6bad4c5b105c35391cb Author: Mike Taylor Date: Tue May 27 09:52:38 2003 +0000 Describe cql_strerror() commit cf06b3dea55efd44a2568ac52a089a4c935743bb Author: Mike Taylor Date: Tue May 27 09:48:24 2003 +0000 Ignore tstodrcodec.[ch] commit 7e821ac84c016b3f4b8eed893c421b7adccaac8d Author: Mike Taylor Date: Tue May 27 09:47:15 2003 +0000 Add cqlster.c which provides cql_strerror() commit 35d8c5921e8b1cd89e52aa6bf71e0a9bf6e3471a Author: Mike Taylor Date: Tue May 27 09:46:26 2003 +0000 Add declaration of cql_strerror() Remove comment listing error-values, since the same information is now included in the cql/cqlstrer.c source file. commit 9ce28b253ce25d58c8f29228ae4573a1b8a8616a Author: Mike Taylor Date: Tue May 27 09:43:59 2003 +0000 tweak commit 7453b811c6086b24a0362509f38169ed42044016 Author: Mike Taylor Date: Tue May 27 09:42:08 2003 +0000 Better error reporting for CQL-to-RPN conversion failure commit 72d7fa413a2305be8626fcb3f6041bea959fc262 Author: Adam Dickmeiss Date: Mon May 26 20:09:01 2003 +0000 Special socklen_t check for AIX commit f6d688ae469ebf296b5fe6748e9b77be902e81da Author: Adam Dickmeiss Date: Mon May 26 13:47:23 2003 +0000 Use odr_getelement instead of odr_getaddinfo commit 32882a6e0491347b494586011a5df7bfadbc6675 Author: Adam Dickmeiss Date: Mon May 26 13:36:48 2003 +0000 Make MAC OSX gcc more happy commit 72a7de6dfe07d7079de3c287aecdeb0f164c78b8 Author: Adam Dickmeiss Date: Mon May 26 11:35:46 2003 +0000 Fix type of len var commit 0d628aff81afe450e3aeb2792b888b14e74254f2 Author: Adam Dickmeiss Date: Sat May 24 19:34:43 2003 +0000 added type cast to avoid warning commit 9308df890c3c8a5e668558487a138696996893aa Author: Adam Dickmeiss Date: Sat May 24 19:25:24 2003 +0000 Spelling. commit 39fc6d5c771c134df959cdd44b2ad62d07b9576f Author: Adam Dickmeiss Date: Sat May 24 19:20:14 2003 +0000 odr_getelement / odr_setelement commit 7aa202b31ec22a71d9c66f4602bf5ec60785c754 Author: Adam Dickmeiss Date: Fri May 23 10:41:26 2003 +0000 WIN32 updates commit e86e4e21d03623a97e7976fe737cb9644926ca54 Author: Adam Dickmeiss Date: Fri May 23 08:52:35 2003 +0000 Compilation now works again commit dd8e61419f08a386271a8e308141aab8131b27f6 Author: Mike Taylor Date: Fri May 23 00:24:04 2003 +0000 Document yaz-client's CQL2RPN query-type, the set_cqlfile command and the -q command-line options commit ad3b59f8c9beb50bd19cf7267479ad78eefe3fca Author: Mike Taylor Date: Thu May 22 23:55:19 2003 +0000 Set the default CQL qualifier file to /usr/local/share/yaz/etc/pqf.properties (How can I set it to look wherever YAZ is installed?) Refuse to do CQL2RPN queries if no valid CQL qualifier file has been set. commit 6d01d7cb60123e1e00db766198edc3ba8488d0ba Author: Adam Dickmeiss Date: Thu May 22 22:44:50 2003 +0000 Fix MARC8 conversion commit f98330f4a395ec9f830c39b4a4eb4e523bc0c796 Author: Mike Taylor Date: Thu May 22 22:32:08 2003 +0000 Fix to install XSLs and pqf.properties commit 07a80eea989576eaa13633f4e96e57e14b40ea0f Author: Mike Taylor Date: Thu May 22 17:01:33 2003 +0000 Support for a new queryType, CQL2RPN, which allows the user to provide queries in CQL and transforms them into Type-1 queries. This should allow CQL to be used against any server rather than just the tiny proportion that support native CQL queries. Also added set_cqlfile command (analogous to set_cclfile). commit 4ab240934731700f437e2bf8cb695e4b5fc9c0dc Author: Mike Taylor Date: Thu May 22 16:57:28 2003 +0000 Add documentation for CQL->RPN transformation's error-reporting commit 6dc4539f74395fa8f95596263d86edc1281bc399 Author: Heikki Levanto Date: Thu May 22 15:41:58 2003 +0000 Fixed a silly typo commit c39a893dfdae5f792139177132e7e7a70e010aa7 Author: Heikki Levanto Date: Thu May 22 13:15:07 2003 +0000 Defined log level bits app2 and app3 commit d0e56fdb958b43316f5ebffddd7f9dd8480978f8 Author: Marc Cromme Date: Thu May 22 11:20:54 2003 +0000 redhat package version 2 now commit a54c709b3e2feff5762bfa7dfa8ee653b429d369 Author: Adam Dickmeiss Date: Tue May 20 20:33:29 2003 +0000 Fix comments commit eeb13f1ab726d5437a76bcc92927d7d756949821 Author: Adam Dickmeiss Date: Tue May 20 20:22:11 2003 +0000 Show ODR error addinfo commit 4157c704e5b89d5cba0cb39937c6d4c697f3b0b0 Author: Adam Dickmeiss Date: Tue May 20 20:21:34 2003 +0000 Further ODR tests commit ec1f815d5348cd21e393f76bc212c910c34bbc45 Author: Adam Dickmeiss Date: Tue May 20 19:55:29 2003 +0000 Better ODR diagnostics for missing elements which includes additional info with name of element. New ODR function odr_missing. Removed depricated macros odr_implicit and odr_explicit. commit 05d1794c4ac57eabe6f6da766156f6986d5c987c Author: Adam Dickmeiss Date: Tue May 20 19:50:12 2003 +0000 Indentation commit 3f7b54230a51be797c9439b091aa59133da16732 Author: Adam Dickmeiss Date: Tue May 20 17:22:54 2003 +0000 Indentation commit ccb068efa655ace7835a122c1226356f2f933992 Author: Adam Dickmeiss Date: Tue May 20 08:22:32 2003 +0000 ZOOM option: step. More verbose GFS SRW server display commit 6aa7edbd02f5e6667921b62f145c909639d3a985 Author: Adam Dickmeiss Date: Mon May 19 20:45:52 2003 +0000 Changes. SRW support. charset fixes for yaz-client commit efda1a40ecc4cb16b0073a2b8a895ad28d5bfe4e Author: Adam Dickmeiss Date: Mon May 19 20:45:07 2003 +0000 charset/marccharset commands. SRW stuff commit 1f7d2e9faf6827f8890750cc1a404d119101c073 Author: Adam Dickmeiss Date: Mon May 19 20:44:33 2003 +0000 charset updates. Option -V to show version commit 94f604cea006e77285967d3e2f8a2ee32db7c434 Author: Adam Dickmeiss Date: Mon May 19 14:37:38 2003 +0000 odr_set_charset: allow to==from==0 to disable charset conversion commit c94e1ffb5944f018ec8e0a2f4549698872eab3ab Author: Adam Dickmeiss Date: Sun May 18 22:27:07 2003 +0000 Fix comment commit 5ea26f86eb5559d0b3ee8a96d1a3823f944a71a3 Author: Adam Dickmeiss Date: Fri May 16 14:39:57 2003 +0000 Mention GNU Bison on Windows installataion commit 9836663e7961c0354c510c278704efbab510bcff Author: Adam Dickmeiss Date: Fri May 16 13:14:26 2003 +0000 xmalloc trace fix for 64-bit systems such as DEC alpha. commit fd17207804a1ec0a27a86f0408674bb57f6c38b0 Author: Adam Dickmeiss Date: Wed May 14 22:31:52 2003 +0000 Fix last event setting. commit ceed5c63f84186abab20234590548ac041ba0f84 Author: Adam Dickmeiss Date: Wed May 14 21:12:41 2003 +0000 Updated yaz.7 page commit 824610960108c45109bf8f458289b281a17db264 Author: Adam Dickmeiss Date: Wed May 14 20:58:07 2003 +0000 Fix setting of last event# commit 2703ec73c9d338d55387ec3f787d0a7f30289cff Author: Adam Dickmeiss Date: Wed May 14 13:49:02 2003 +0000 Set permissions to 0777 for unix file socket commit 125af6f8db172ec8fd4c24dfe6f6ebeca49afacb Author: Adam Dickmeiss Date: Tue May 13 14:21:13 2003 +0000 Use YAZ_SOCKLEN_T instead of socklen_t commit f2dae7dadb188781bccd59c8994da0a7546c96a3 Author: Adam Dickmeiss Date: Mon May 12 22:38:40 2003 +0000 Mention http scheme commit 36e5387cdd76faccc5ebaacb657311a9d6314863 Author: Adam Dickmeiss Date: Mon May 12 22:37:56 2003 +0000 Minor change of def of EXTRA_DIST commit 83b766f076b18584868172bdb98e9584556d145a Author: Adam Dickmeiss Date: Mon May 12 22:36:10 2003 +0000 Omit print for XML data commit 0cae96a10e8393acabad6b07c9456d9f6175d0ff Author: Adam Dickmeiss Date: Mon May 12 22:35:06 2003 +0000 Fix handling of HTTP error. Dont print details when omitted commit f17b1db33f969f735f308aa639c17488f82793d0 Author: Mike Taylor Date: Mon May 12 13:34:00 2003 +0000 move description of databaseName option to the Connection section commit 233020e68e58b86aaed62598408a42ae5a27eabc Author: Adam Dickmeiss Date: Tue May 6 13:09:15 2003 +0000 Fix check commit 0d224465e46c5886cfdd5002b34cd3b239043fb5 Author: Adam Dickmeiss Date: Tue May 6 12:09:10 2003 +0000 Call automake twice to avoid missing depcomp commit 84f723fa43e53cdf8e485f2fa51be1550d97c63b Author: Adam Dickmeiss Date: Tue May 6 12:07:33 2003 +0000 Remove fix for missing depmod in Makefile commit f2428de7b5d72877c544d9812513fe465a1c75a6 Author: Adam Dickmeiss Date: Tue May 6 11:51:23 2003 +0000 Add include of yaz/yconfig.h commit 20268c3c0fbcabb3696d4cefcb8b0a84598ed9f0 Author: Adam Dickmeiss Date: Tue May 6 11:37:18 2003 +0000 Fix for missing depcomp commit b2efa1743e712eb8d713ff1b934a09cc19b35a55 Author: Adam Dickmeiss Date: Tue May 6 10:08:30 2003 +0000 New test for ODR. Demonstrates the use of small ASN.1 spec too. commit 41339c1f027372b433ed120569726f5448e558eb Author: Adam Dickmeiss Date: Tue May 6 10:07:33 2003 +0000 New tests. commit 2bf8ed1f3c0b77636bdfd37040afb97c54a7098a Author: Adam Dickmeiss Date: Tue May 6 10:06:43 2003 +0000 Include of odr.h does not use -i value. Always set to . commit d99be352be2b2e14fe66e6010dd89919d36f7d98 Author: Mike Taylor Date: Fri May 2 23:25:38 2003 +0000 ignore yazhtml.xsl commit 8bccad6217bd2ba078106a531a9e73e7f3aae4a9 Author: Mike Taylor Date: Fri May 2 09:23:26 2003 +0000 new file commit 006c3df264a95c03bfc557b2004595fc6cc3ee14 Author: Mike Taylor Date: Fri May 2 09:22:43 2003 +0000 ignore cql2pqf and cql2xcql commit e12c24b8e658bad4cca7a278a7ece7badc9d801d Author: Adam Dickmeiss Date: Thu May 1 07:49:26 2003 +0000 Removed cql.h from sources commit 4cb6a603653bf01c51ec6917573882215f817592 Author: Adam Dickmeiss Date: Wed Apr 30 14:04:45 2003 +0000 SRW fixes commit 1f64e3fdaa206ccd31cc4c007a1a2ee119c718eb Author: Adam Dickmeiss Date: Tue Apr 29 22:00:47 2003 +0000 yaz.7 moved from yaz to libyaz. commit 7e123f0a39a7e7f22e1d0fda5870ff7b6239c542 Author: Adam Dickmeiss Date: Tue Apr 29 21:53:54 2003 +0000 Database setting for SRW. Minor updates in messages commit bc9920b48da91d87e1c0e033a9151663998d6b6b Author: Adam Dickmeiss Date: Tue Apr 29 21:20:33 2003 +0000 Fixed a few warnings on non-libxml2 systems commit ec5e5849731e21b5cf0a5cb3fbe01d9c8c2c8c89 Author: Adam Dickmeiss Date: Tue Apr 29 21:13:08 2003 +0000 Proper ifdefs for non-libxml2 systems commit 04554076c032387b85ca7c9017d724b875e7766f Author: Adam Dickmeiss Date: Tue Apr 29 21:04:46 2003 +0000 SRW support for YAZ client commit a20386067416654230dd519fcd6e804520a23a2f Author: Adam Dickmeiss Date: Tue Apr 29 09:54:39 2003 +0000 Remove shlibs:Depends from yaz commit a4500a53ecbff46db730bcaa8703d2c9a0e6328b Author: Adam Dickmeiss Date: Mon Apr 28 21:02:14 2003 +0000 Towards 2.0.2 commit 3b10b3e056bb684b8f33123a79410f771adbee0a Author: Adam Dickmeiss Date: Mon Apr 28 11:04:51 2003 +0000 New ZOOM events ZOOM_EVENT_RECV_{RECORD,SEARCH} for receiving a record and search result respectively. commit c94a281b8f4d13dd8bb6df48ce3f925aad1bb600 Author: Adam Dickmeiss Date: Fri Apr 25 16:17:21 2003 +0000 libyaz does not depend on readline; yaz does (programs) commit 6b00e2dfd3546994abd3461464e564bedbe89f0e Author: Adam Dickmeiss Date: Thu Apr 24 20:38:08 2003 +0000 Release 1 commit 038665b6acb32a83cc1bb8395b83a0cf3c0cc38d Author: Adam Dickmeiss Date: Thu Apr 24 20:36:33 2003 +0000 Debian changelog commit ea1b96d754d0d7dc38ce3ce18a03824e1d9516cd Author: Adam Dickmeiss Date: Thu Apr 24 20:01:45 2003 +0000 Morten B. commit 12894b89898e9cdc4d171354f5454a624dbb80a8 Author: Adam Dickmeiss Date: Thu Apr 24 20:00:15 2003 +0000 version update commit 06e73cb9f6d59fc7a38f17636016f2daaed02548 Author: Adam Dickmeiss Date: Thu Apr 24 13:30:31 2003 +0000 For GFS: schema for bend_fetch; displayTerm for bend_scan. commit a36034d54bb308f3697df4b2702ea7f35ac636c6 Author: Adam Dickmeiss Date: Thu Apr 24 13:29:50 2003 +0000 Doxyfile part of make dist commit 840eb96a9f6989642b09c1f6fc4e92650fa991e6 Author: Adam Dickmeiss Date: Thu Apr 24 13:05:04 2003 +0000 Remove unused vars commit 4b849a9cafeb427c261a7f0e52d28edd3043ae27 Author: Adam Dickmeiss Date: Thu Apr 24 13:04:45 2003 +0000 Work on chunkced encoding commit f781ff13f9443a58e5eae30182e508df9dfe9555 Author: Adam Dickmeiss Date: Thu Apr 24 12:48:47 2003 +0000 Work on bug 24 commit 3dff993190eac9ccb1e9e8f681312493bdaf2fb9 Author: Adam Dickmeiss Date: Wed Apr 23 20:39:25 2003 +0000 Allow for quoted tokens in ZOOM shell commit 15715e1bb3a298a1894d2b680f5b132506313692 Author: Adam Dickmeiss Date: Wed Apr 23 20:38:19 2003 +0000 For ItemOrder, result set is unset if itemorder-setname is empty. Set HTTP header "host" in order to be HTTP/1.1 compliant. commit f8deda70a12072b9d0d7eb488a5f26631401c5f3 Author: Adam Dickmeiss Date: Wed Apr 23 20:36:05 2003 +0000 Indentation commit 38d29054baec012561d8a69ade2a55d6bee22c00 Author: Adam Dickmeiss Date: Wed Apr 23 20:34:08 2003 +0000 Test cases for nmem, iconv commit 9ef544523c1dc964401a8227dd784add479900fd Author: Marc Cromme Date: Wed Apr 23 12:56:05 2003 +0000 Doxyfile added for html-documentation generation commit d7e3f387cddf4ac8dee3ca0d90992d052834da95 Author: Adam Dickmeiss Date: Wed Apr 23 12:31:07 2003 +0000 Prepare for OPAC display commit b68205c92a959a871bc669606a64e0739b6513b9 Author: Adam Dickmeiss Date: Fri Apr 18 17:14:46 2003 +0000 Note about debian version commit beacc736e6a2c5f94c1ddf7e0544ef0dcca43b9b Author: Adam Dickmeiss Date: Fri Apr 18 15:11:58 2003 +0000 Changes commit 98423c2327870156c36dfe479746f541ee244ef2 Author: Adam Dickmeiss Date: Fri Apr 18 15:11:04 2003 +0000 default recordPacking is xml for SRU, string for SRW commit e6280ccfa52d2ffc28b3e879377b934faff2b350 Author: Adam Dickmeiss Date: Thu Apr 17 23:25:43 2003 +0000 Delete unused make var YAZ_VERSION commit 91d7176944dd2f5a42856ee97cd793d33f429cd0 Author: Adam Dickmeiss Date: Thu Apr 17 23:24:00 2003 +0000 Set LDFLAGS per library to avoid warning for newer libtools commit 1848aa2ce3860c97777343e0f0f509f6c831f016 Author: Adam Dickmeiss Date: Thu Apr 17 19:43:41 2003 +0000 recordPacking for ZOOM commit cd28165182813f5ed046a6ba44c7d13f46bdaca9 Author: Adam Dickmeiss Date: Thu Apr 17 19:43:32 2003 +0000 recordPacking for SRW commit 9241daf8b3104b67b2801872d0e07d6762f78b47 Author: Adam Dickmeiss Date: Thu Apr 17 06:06:49 2003 +0000 .la files part of RPM commit 9863871f229898036fae7c37735be44fa4b3c516 Author: Adam Dickmeiss Date: Mon Apr 14 17:02:12 2003 +0000 Use Log instead of Id commit 66ebb9d692735cc0b3b903c999dd225af2e2a08c Author: Adam Dickmeiss Date: Mon Apr 14 16:57:58 2003 +0000 Add include of string.h commit 712de175de28e9977ead36d1cdd877993b008d09 Author: Adam Dickmeiss Date: Mon Apr 14 16:52:10 2003 +0000 Fix another bug in lexer commit ad1c6ee16cd9f697abebffbd241d92ec89de5550 Author: Adam Dickmeiss Date: Mon Apr 14 15:40:03 2003 +0000 Fix bug with unset member of lex token commit 64faa24c05370c37816d4da5666120d65051ae9a Author: Adam Dickmeiss Date: Fri Apr 11 23:29:12 2003 +0000 EXPORT LanguageCode and Segment commit 2a8b6ee438067fd3cc2f85685b727d726136bfb8 Author: Adam Dickmeiss Date: Fri Apr 11 15:53:39 2003 +0000 Fix CQL lex buffer overflow. commit c7eb63e9060187fbba904c3da9697ff85f919af4 Author: Mike Taylor Date: Thu Apr 3 21:01:28 2003 +0000 Remove the Satan-spawn attribute VAL_THESAURUS commit 2280b039756aa1c891f0017d2a62d737dd6d4f00 Author: Adam Dickmeiss Date: Tue Mar 25 09:58:13 2003 +0000 AM_MAINTAINER_MODE commit 712226031c16536696c809523899e163471c6256 Author: Adam Dickmeiss Date: Tue Mar 25 09:57:26 2003 +0000 2.0.1 commit 74c32327950450b02892297f350eaff41212fc18 Author: Adam Dickmeiss Date: Tue Mar 25 09:55:11 2003 +0000 Fix non-XML compile commit 6bffc65936ba634077acb9f42ace217bc4737539 Author: Adam Dickmeiss Date: Mon Mar 24 22:26:50 2003 +0000 SRU/SRW Explain for Frontend server commit a834d92665e792c011e86d5603968ab31237575a Author: Adam Dickmeiss Date: Sun Mar 23 20:27:16 2003 +0000 SRW/SRU explain commit fe0db3ff0fad9d7d6bc043f7f6fd719262cd242e Author: Adam Dickmeiss Date: Fri Mar 21 10:48:11 2003 +0000 Only make ln -s when link does not yet exist commit d21f71aa7f9d30fdf457c58e7403723415506c1e Author: Adam Dickmeiss Date: Thu Mar 20 21:15:00 2003 +0000 SRW/SRU recordPacking commit c9fb3990d5713cac63c4b0d42a7eb7a66833ac75 Author: Adam Dickmeiss Date: Wed Mar 19 09:45:55 2003 +0000 Fix uninitialized var type_and_host commit 6a9f385c94281b3dbddd612f388837c01661c5c5 Author: Adam Dickmeiss Date: Tue Mar 18 13:34:35 2003 +0000 SRU support for frontend server commit 1e5554fc59c8cad2105b2a8cf095d13315dc6ed1 Author: Adam Dickmeiss Date: Tue Mar 18 13:30:21 2003 +0000 More on supported platforms commit 28ffcea180902ce2e8bf3eac92f49a1ba20d25d1 Author: Adam Dickmeiss Date: Tue Mar 11 21:47:00 2003 +0000 Add dependency commit e3c167e9a52717c346a93e1425575996a044d0d0 Author: Adam Dickmeiss Date: Tue Mar 11 21:19:16 2003 +0000 Updated TODO commit a7ecfb67151880d21a11bcb25bbc26269461b5ac Author: Adam Dickmeiss Date: Tue Mar 11 21:19:09 2003 +0000 Modular RPM Package commit 81afb524fb5c2d761d37853f4182fca4567cd2fd Author: Adam Dickmeiss Date: Tue Mar 11 11:09:17 2003 +0000 SRW character set handling commit 327abf4adcf732bcc8818f9b35ba366db6085d2a Author: Adam Dickmeiss Date: Tue Mar 11 11:07:47 2003 +0000 Minor updates/cleaning. New option -b to dump BER commit adcb574176dc52cce8ee299507da91228e2afc1b Author: Adam Dickmeiss Date: Tue Mar 11 11:06:35 2003 +0000 New tool for ODR testing. commit 30de094a4a567f7fada6d5932e23921770ac671c Author: Adam Dickmeiss Date: Tue Mar 11 11:05:19 2003 +0000 New function cs_get_host_args for method/host/path parsing. commit b75023664b529d1cd0dccac2deae78ddbd681369 Author: Adam Dickmeiss Date: Tue Mar 11 11:03:30 2003 +0000 Fixes for random/hostile BER. commit f7a92e6551774dcac7bc5d5158c0e76364944a28 Author: Adam Dickmeiss Date: Mon Mar 10 16:11:32 2003 +0000 yaz-devel recommends libxml2-dev commit 4115b78fa9956fa4b594aec7c7792e18bf1e1542 Author: Adam Dickmeiss Date: Fri Mar 7 08:39:40 2003 +0000 Fixed xref commit ba8d526ec24077c455979314147aaff20746a8ca Author: Adam Dickmeiss Date: Mon Mar 3 19:57:35 2003 +0000 Fixed warnings. Updated headers commit 27a018d8464d3e35bde108f171b48a2ea1eede39 Author: Adam Dickmeiss Date: Sun Mar 2 15:34:51 2003 +0000 Remove redundant include path commit 9dcf8b86675f48ecc89588960ec2b7a785aa05bc Author: Adam Dickmeiss Date: Fri Feb 28 15:59:02 2003 +0000 database case insensitive commit 6cb2907ac3f225846d8deaa0aea4772e539617cd Author: Adam Dickmeiss Date: Thu Feb 27 19:56:00 2003 +0000 truncation=CCL commit a66975fb6d7c8877a2eaa3861aaeb4952d398d7d Author: Adam Dickmeiss Date: Thu Feb 27 19:55:37 2003 +0000 cql available in yaz-client commit 66d1e9b0dee9593f80022dcc3a30dab627f7b0bf Author: Adam Dickmeiss Date: Tue Feb 25 18:35:48 2003 +0000 Fix compile bug for systems that have nl_langinfo but CODESET undefined commit 50e841cfceee9afecc96294187738e21669310ea Author: Adam Dickmeiss Date: Tue Feb 25 18:08:46 2003 +0000 Added missing PQF transform rules commit 2850c06be8cd7c08371028714715a9177026ef77 Author: Adam Dickmeiss Date: Mon Feb 24 14:15:00 2003 +0000 New Debian package - using older version of libxml2 commit 1167a422a06ea4d4a4b0c14a9f6df5042790f99e Author: Adam Dickmeiss Date: Mon Feb 24 13:14:49 2003 +0000 Added scan commit c938bc81f8da3cac9dd4ca57498cfbdff216d7e9 Author: Adam Dickmeiss Date: Sun Feb 23 21:39:26 2003 +0000 Fix debian conflict with php4-yaz commit b782d2bdebee1a46cc8d7336ce21e9b023baa349 Author: Adam Dickmeiss Date: Sun Feb 23 21:18:04 2003 +0000 Version commit 6b3cf0738c53080781fedd852e26b299224af3c3 Author: Adam Dickmeiss Date: Sun Feb 23 21:10:05 2003 +0000 Dates commit aebe2207088a26a1d6a3f4dad6bd32b6a41109a8 Author: Adam Dickmeiss Date: Sun Feb 23 20:40:17 2003 +0000 Minor changes commit b7e415906df8d63b3607c892dc2f6ef6bbea8fb1 Author: Adam Dickmeiss Date: Sun Feb 23 20:40:01 2003 +0000 More on SRW for the server commit 4fd9395530e56f0b5d2061d52a120b1cc4a1fade Author: Adam Dickmeiss Date: Sun Feb 23 20:39:31 2003 +0000 Check for status for init handler in SRW wrapper commit a2691350ad223dd62d441fab573cd3cb241a14b3 Author: Adam Dickmeiss Date: Sun Feb 23 15:24:27 2003 +0000 Reset count/start after running show commit bfdd572933425be072c526a50af9cc2ba3fdbbd1 Author: Adam Dickmeiss Date: Sun Feb 23 14:46:10 2003 +0000 Fix WIN32 compile commit 5f9dfb9266ab741d41a636249a39a254e4fb7211 Author: Adam Dickmeiss Date: Sun Feb 23 14:26:57 2003 +0000 Renamed Z_SRW_searchRetrieve to Z_SRW_PDU commit adae7ab7df270a3187630876b8d4668038a42e88 Author: Adam Dickmeiss Date: Sun Feb 23 14:25:34 2003 +0000 Revised introduction. Added figure with YAZ module layers. commit dd2c5a5e8e1ec1a3214423a6c8dcba065e13ddb0 Author: Adam Dickmeiss Date: Sun Feb 23 14:24:47 2003 +0000 Smallish. commit 8c2af81438405f3bbbd01a73265ce20edbd5bb73 Author: Adam Dickmeiss Date: Sun Feb 23 14:24:09 2003 +0000 More on SRW. commit 4908617c38ed64cae87afb6d6fc448e23c5ffa43 Author: Adam Dickmeiss Date: Sun Feb 23 14:23:40 2003 +0000 Updated PQF example queries. commit cfd0664043248f6e52ffa6265a0c430658d04370 Author: Adam Dickmeiss Date: Sat Feb 22 00:08:44 2003 +0000 work around for bug in strerror_r commit a1ac953ad3b1f310deec59e44119b52fc1325547 Author: Adam Dickmeiss Date: Fri Feb 21 12:20:22 2003 +0000 Fix soap.srw.html commit 4ca818ec201c9dcf5461e419002c95fd2eac620e Author: Adam Dickmeiss Date: Fri Feb 21 12:08:57 2003 +0000 Z_GDU definitions in zgdu.h. Renamed PROTO_SRW to PROTO_HTTP. commit add5a2db6b4360b1b448ad09f991a3977eb1220d Author: Adam Dickmeiss Date: Fri Feb 21 12:06:05 2003 +0000 Separate SOAP/SRW chapter commit 0718fd63660899964512631d1e246ded8e3d18d6 Author: Adam Dickmeiss Date: Fri Feb 21 00:24:26 2003 +0000 Stuff on SRW commit a040a2caa54445509bb70c14b57dffe3bbd0fcf4 Author: Adam Dickmeiss Date: Thu Feb 20 21:23:47 2003 +0000 Dates commit 1a834a4a0dc2d5f7f4c6bf6b178981822f937328 Author: Adam Dickmeiss Date: Thu Feb 20 21:19:16 2003 +0000 Date in CHANGELOG commit f093e1bd04649f47b2995e80f05305b66c72fdee Author: Adam Dickmeiss Date: Thu Feb 20 21:09:22 2003 +0000 No need to make doc (again) for make dist. commit afc7afd35aa4ba0f3070c96f0e351de7cecda160 Author: Adam Dickmeiss Date: Thu Feb 20 20:37:53 2003 +0000 Updated RPM package commit 35889bb3a838cd6ea10b19e9198663eccb14762a Author: Adam Dickmeiss Date: Thu Feb 20 15:15:04 2003 +0000 Cleanup. commit 916f3cef3434c7fc2a8e6a9e8d29eea8fb5b933d Author: Adam Dickmeiss Date: Thu Feb 20 15:14:10 2003 +0000 Break long line commit c3d11e6358396ceeb96b3051ea2d567d1c052618 Author: Adam Dickmeiss Date: Thu Feb 20 15:13:28 2003 +0000 Improve net I/O performance for server. commit 7d414d938ccbd98fc71383c356fec70ae269b2f5 Author: Adam Dickmeiss Date: Thu Feb 20 15:12:28 2003 +0000 ODR print for HTTP packages commit a6d84a7dae6b0dc41228c301069bb14fb26bd38e Author: Adam Dickmeiss Date: Thu Feb 20 15:11:38 2003 +0000 PQF native support for SRW ;) commit a40e9f3f82a7ffafcdd0a554721897669cac12f8 Author: Adam Dickmeiss Date: Thu Feb 20 15:10:24 2003 +0000 Playing with setsockopt commit 589712a429073d3608dbd45352cef6cf3b50cbd8 Author: Adam Dickmeiss Date: Thu Feb 20 15:05:40 2003 +0000 Fix problem with order of C include paths. commit e12377e7ea8e58cf447492b5cb9887b839a78700 Author: Adam Dickmeiss Date: Wed Feb 19 15:22:11 2003 +0000 Utility to map between Bib-1 and SRW diagnostics. Better handling of unsupported SRW constructs in server. commit f512aa33473ae86f8e8efd8da749a82c398e87f0 Author: Adam Dickmeiss Date: Tue Feb 18 21:27:53 2003 +0000 CQL w/bison on WIN32 commit 10e81e043068151fd32d623ace21222ab6c91ea3 Author: Adam Dickmeiss Date: Tue Feb 18 20:21:22 2003 +0000 Installation instruction updates commit df869b93d7eb00d07ffcd27556af94b00c518ad9 Author: Adam Dickmeiss Date: Tue Feb 18 14:47:23 2003 +0000 Oops Still need HAVE_XML2 in seshigh.c. commit 39f322672612cc6146a9a85fd32d2f8c325763da Author: Adam Dickmeiss Date: Tue Feb 18 14:28:52 2003 +0000 Function yaz_version. Better handling of non-SOAP enabled YAZ commit 4a72187a377987ccbe95cb7c549adb0678bc7159 Author: Adam Dickmeiss Date: Tue Feb 18 11:59:14 2003 +0000 Change a few yaz_log messages commit afddab87193266685fbbe2eba5592a22025fd3b6 Author: Adam Dickmeiss Date: Tue Feb 18 11:58:45 2003 +0000 New major version for yaz libs commit 34203146338c5f6c89774bde4caad110345405bd Author: Adam Dickmeiss Date: Tue Feb 18 10:37:08 2003 +0000 Use LIBS instead of XML2_LIBS for Makefiles commit c76d8db946107b4eab4849ca1166caf8bf1c7b5d Author: Adam Dickmeiss Date: Tue Feb 18 09:12:14 2003 +0000 Dont return values in void function commit 0e835ef58f6a0939626e6911a730945f81fa2e2f Author: Adam Dickmeiss Date: Tue Feb 18 09:11:50 2003 +0000 Prepare for external utilties: iconv, libxml2 on WIN32 commit 1f20fcf7c28b057d36b866ce9ba63dee95c27d41 Author: Adam Dickmeiss Date: Mon Feb 17 22:35:47 2003 +0000 Use libxml2 instead of libxslt(and libxml2) commit c76cdd28e9040ef40ae81a991a826d03b556e22c Author: Adam Dickmeiss Date: Mon Feb 17 22:34:39 2003 +0000 WIN32 updates commit db585d7fcb8319fa86543eb062df7fdaf16858c6 Author: Adam Dickmeiss Date: Mon Feb 17 21:23:31 2003 +0000 HTTP Timeouts. Memory leak checks and fixes. Changed member names for schema via ASN.1 compiler directives. commit d9d97a04b6f9597225b8440dad61790dfa39a751 Author: Adam Dickmeiss Date: Mon Feb 17 14:35:42 2003 +0000 SRW record retrieval works for ZOOM commit 6011a7156d007b94abde4bfc3d427a1bd853cd86 Author: Adam Dickmeiss Date: Fri Feb 14 20:32:59 2003 +0000 Configure option --with-xsl. commit 854bc0025cf4f8cbd509e2d1de7d2f8a1ea126ac Author: Adam Dickmeiss Date: Fri Feb 14 19:10:00 2003 +0000 Fix non-SOAP compile commit ac286ae76051058c8e340bf84eb98391340b7d22 Author: Adam Dickmeiss Date: Fri Feb 14 18:49:22 2003 +0000 More type casts. Modify CQL tree - bool is C++ reserved name. Using YAZ SOAP instead of gSOAP for ZOOM client (still incomplete). commit 6d6cdcaccf2b4cab92da8e29700053b43543dd4c Author: Adam Dickmeiss Date: Wed Feb 12 22:02:47 2003 +0000 add type cast commit 72d242591ea2f6374ffb3166383f3ffddc342215 Author: Adam Dickmeiss Date: Wed Feb 12 22:02:33 2003 +0000 remove unused variable commit 781633e7be33869d635c015dcf544037becc60e4 Author: Adam Dickmeiss Date: Wed Feb 12 21:34:57 2003 +0000 Added include of string.h commit c620a713f1418315efcd4e6fab225e036775d365 Author: Adam Dickmeiss Date: Wed Feb 12 15:06:42 2003 +0000 SOAP, SRW codecs and HTTP transport for YAZ using libxml2. Updated ASN.1 for Z39.50 amendment String Identifiers for Schemas. commit 06670a04cc9789bc938174a5e99ddaff97386867 Author: Heikki Levanto Date: Wed Feb 12 14:17:50 2003 +0000 Added a LOG_NOTIME flag to disable time stamping log entries (useful for regressions, can run a diff on logs) commit f9d9c90585dcce8b81c69104f1634da29a039cb3 Author: Heikki Levanto Date: Tue Feb 11 16:35:17 2003 +0000 Ficed the log level display for level app (used to display [all][app]) commit b33bbfa937912e532dd8842fc9e46003aa1848d6 Author: Adam Dickmeiss Date: Mon Feb 10 08:58:40 2003 +0000 1.9.3 commit 9a6ef6ade0e32716585b5dd5388a60285ea9d408 Author: Heikki Levanto Date: Fri Feb 7 14:39:00 2003 +0000 Added a way to get log back to stderr commit d193403feb3df490f60175d387603f4daf89cf1f Author: Adam Dickmeiss Date: Tue Jan 28 22:34:17 2003 +0000 CQL to RPN example commit 650cc0539b6a484eba203949cb43a08b9084504d Author: Adam Dickmeiss Date: Mon Jan 27 21:31:35 2003 +0000 Don't set syntax to none if bad syntax is supplied commit c63b8160e6b822d640a4e92ca4c3d5fb79828bbc Author: Adam Dickmeiss Date: Mon Jan 27 21:30:59 2003 +0000 CQL to RPN mappings commit fbfb7f5339bcc276a562e6b94b42750ff3b1af3f Author: Adam Dickmeiss Date: Fri Jan 24 12:15:45 2003 +0000 Save a few bytes for piggyback :) commit f9d027f2d879dca0b6a3e8a8ec9ce82188498110 Author: Adam Dickmeiss Date: Fri Jan 24 11:59:03 2003 +0000 Piggyback fix commit a84b343fd22845cbd7bea563e77250a84e48463b Author: Adam Dickmeiss Date: Fri Jan 24 11:52:57 2003 +0000 Fix SmallSetElementSetName for piggyback commit 6406d7955629f3b8d4bbeae9fc93ec1bb9d5366a Author: Adam Dickmeiss Date: Thu Jan 23 20:26:37 2003 +0000 More CQL information commit 35d5038e15279255dd608146e69630f0e88194ff Author: Adam Dickmeiss Date: Wed Jan 22 14:39:16 2003 +0000 2003 commit 967300e7c27a84954ac8568927adf5d9ef42a300 Author: Adam Dickmeiss Date: Wed Jan 22 13:33:34 2003 +0000 Build-depends on docbook, etc commit e13889f2448f526c2d7be104228a76278fdd1e18 Author: Adam Dickmeiss Date: Wed Jan 22 09:43:32 2003 +0000 CQL section in tools. Not yet finished commit c68c6c8dd7fb48b0e6ec82d580266470b2b62d7d Author: Adam Dickmeiss Date: Mon Jan 20 13:04:50 2003 +0000 Changed prototype of yaz_srw_serve to solve threading problem with srw-gateway. commit b36a815a64cd481e0a74fc51b8010019b83e4cb1 Author: Adam Dickmeiss Date: Wed Jan 15 14:26:55 2003 +0000 Fix compile problem in srw (when srw is disabled) commit 63d3984ef11179af51a79d202dca15b70403099b Author: Adam Dickmeiss Date: Tue Jan 14 08:21:14 2003 +0000 Using yaz_log instead of logf commit d83f8d1ff2016d70565f75ef1c4f5dc7d95b2109 Author: Adam Dickmeiss Date: Mon Jan 13 22:11:34 2003 +0000 Fix missing arg in select code commit eae04713fcef67a1f33f3120a76ab98c10dd07b1 Author: Adam Dickmeiss Date: Mon Jan 13 14:33:03 2003 +0000 Only enable libxml/xslt when SRW is enabled (gSOAP is found) commit 574e9d4d7ee5f61adc9db73fafaa2f48e51ec443 Author: Adam Dickmeiss Date: Mon Jan 13 14:32:41 2003 +0000 Add include commit 9b92a8975685e36dd4c199a508cabf01de6ebef0 Author: Adam Dickmeiss Date: Mon Jan 13 14:32:06 2003 +0000 Call bend_stop only for main process (not from forked child) commit 9ad7a007903707f49428bac36a96f56262d2ec44 Author: Adam Dickmeiss Date: Sat Jan 11 03:18:53 2003 +0000 Fixed two memory leaks commit 7c40ce6a98bf3d9c2881e7fddbbee7de5811a3a9 Author: Adam Dickmeiss Date: Mon Jan 6 21:52:37 2003 +0000 Only use strerror_r in threaded mode commit 4d531a1a9131d69c3b6c27fbac42837e22cff61c Author: Adam Dickmeiss Date: Mon Jan 6 08:20:26 2003 +0000 SRW, CQL, 2003 commit 6c2e6af12b26825488c74a655a40a0cc75a863ca Author: Adam Dickmeiss Date: Sat Dec 28 12:16:26 2002 +0000 Remove printf stmt commit 65efc4dd0a947e1b4620d93c88d771b83bc32dac Author: Adam Dickmeiss Date: Sat Dec 28 12:13:03 2002 +0000 CCL proximity support commit 58ad4fbc42a3493a49c7ee64f9593e6964b06231 Author: Adam Dickmeiss Date: Thu Dec 19 14:04:22 2002 +0000 TCP/IP receive buffer patch (Solaris). commit 4cc402d744b9fbfee11e31cea25835061cb759f1 Author: Adam Dickmeiss Date: Tue Dec 17 13:32:04 2002 +0000 Simplify use of WRBUF in marc handler commit 629799b5d2e09bbb9425442274424b12bdc801ba Author: Adam Dickmeiss Date: Mon Dec 16 14:06:34 2002 +0000 WIN32 updates for marc8.c commit 7a64e6e91bcaebfcb66db3b0b91728f5603fafdd Author: Adam Dickmeiss Date: Mon Dec 16 13:30:41 2002 +0000 Remove unused variable commit cdb4e1fb73e8204d87a63354e6e65e18aa45f141 Author: Adam Dickmeiss Date: Mon Dec 16 13:26:06 2002 +0000 MARC8 conversion file commit 1121eeb134f61c6c2510143858db59045c1b6757 Author: Adam Dickmeiss Date: Mon Dec 16 13:13:53 2002 +0000 MARC8 decoding for yaz_iconv. New MARC API. Utility marcdump allows you to specify source and destination encoding. YAZ client tries to convert MARC characters to native character encoding for output terminal (some unices only). commit 615dcec32011f62525931e5f04490ff7e721ea04 Author: Adam Dickmeiss Date: Mon Dec 16 13:11:24 2002 +0000 Make private functions static commit 12bf5354833705ed674118f83fc2aa9494dfec17 Author: Adam Dickmeiss Date: Sun Dec 15 21:42:06 2002 +0000 Spelling commit 7d4006fb1914018d99ea9764aa45b8edc86ebd5d Author: Adam Dickmeiss Date: Sun Dec 15 21:22:58 2002 +0000 Make private functions static in unix.c commit b08d68a3edac5a93dce61f98d2f030ea722311c4 Author: Adam Dickmeiss Date: Tue Dec 10 13:14:14 2002 +0000 ZOOM_record_get: xml returns MARC XML instead of OAI MARC commit 9841cfd6e74acdc325bf5158fddf0b3cc2d82fab Author: Adam Dickmeiss Date: Tue Dec 10 10:59:28 2002 +0000 More debugging tools for yaz_iconv commit 4d5043a735f072b648a7550b8f460726721b9f14 Author: Adam Dickmeiss Date: Tue Dec 10 10:23:21 2002 +0000 Fixed buffer handling (incomplete input) in yaziconv test commit 85fcb12fe992e4dc0fa91e95fc320943c1c26cc5 Author: Adam Dickmeiss Date: Mon Dec 9 23:32:29 2002 +0000 New ZOOM connection options: targetImplementation{Id,Name,Version} New function ZOOM_connection_error_x. commit 27743f316331a9ea508df5f204416a6864fc320f Author: Adam Dickmeiss Date: Mon Dec 9 23:29:00 2002 +0000 --tabs option no longer available commit 79b486cea07c6352407a289d3b4b9a8545b470e6 Author: Adam Dickmeiss Date: Thu Dec 5 12:19:23 2002 +0000 New function yaz_strerror. commit aff0149238f8b1d7eefc820d9c3dd1733e959361 Author: Adam Dickmeiss Date: Thu Dec 5 12:16:39 2002 +0000 yaz_strerror. WIN32 updates for mterm2.asn commit 05586eb8028d6f6a84d6389f8f3ab829b19f1760 Author: Adam Dickmeiss Date: Thu Dec 5 12:07:00 2002 +0000 Range search. Not fully implemented yet. commit 366dc7568281c9774cd309b28c24a077604264a0 Author: Adam Dickmeiss Date: Tue Dec 3 10:03:27 2002 +0000 MARC XML commit 79f065f5f8705a1a4391de64ae735505cc2463a8 Author: Mike Taylor Date: Mon Dec 2 16:02:01 2002 +0000 ignore tkl.xsl commit 9287c96097c00d28310becb14ea3dd7cfb9f2ab0 Author: Mike Taylor Date: Sun Dec 1 23:22:10 2002 +0000 Add Zthes tag-set -- where was it?! commit 162ddfa4248521c7af9183eac839353434c67f3c Author: Mike Taylor Date: Sat Nov 30 22:30:51 2002 +0000 Add new API function ZOOM_diag_str(), which maps error code to human-readable message. It uses code lifted from ZOOM_connection_error() (which now calls it) to map the ZOOM-specific errors by hand, and fall back to diagbib1_str() for others. I did this because I need the new function in ZOOM-C++, for reasons which would be otiose, for the moment, to rehearse. commit c3e00d3758858e61b92e3e1ba9ce08aa91cc1bee Author: Adam Dickmeiss Date: Fri Nov 29 15:41:00 2002 +0000 Apply patch (again) commit 53a07fe60bdd9837041cd6f0988b38f5c38c73e0 Author: Adam Dickmeiss Date: Fri Nov 29 11:53:55 2002 +0000 Fix creation of lib/yaz-config. commit bdd6284ebe715b4352d3b2ff4cdb613eabd8a6a7 Author: Adam Dickmeiss Date: Wed Nov 27 00:53:02 2002 +0000 Look for YAZ in more places commit 1d36452dba1d4b607123bacb83142e033f3bfba3 Author: Adam Dickmeiss Date: Tue Nov 26 17:25:07 2002 +0000 Changes commit faecf8f8503bb0e507fc19d9a67158f24bd79491 Author: Adam Dickmeiss Date: Tue Nov 26 16:56:39 2002 +0000 include nmem.h to get prototype for yaz_errno commit 42983d3821534c2cfc2fbac538ddbe9b751bd8cd Author: Adam Dickmeiss Date: Tue Nov 26 16:56:21 2002 +0000 Remove fprintf statement commit 8fa2c4c13a42090b0b2b52410bbae23da5db16e5 Author: Adam Dickmeiss Date: Tue Nov 26 16:47:04 2002 +0000 Fix RPM build commit e26ffdbc4b024a06b4ca46c6aecb5c3dd09b7e8d Author: Adam Dickmeiss Date: Tue Nov 26 16:04:15 2002 +0000 Win32 fix commit a8e4f36bc2740d3b8ce41f4c22b3c171b4bd8700 Author: Adam Dickmeiss Date: Tue Nov 26 15:47:38 2002 +0000 Changes commit 450b277660d870fa36aed2fdfbf88affa190ae96 Author: Adam Dickmeiss Date: Tue Nov 26 13:42:35 2002 +0000 Increased version number commit adbeacef10c4a91ba652516dff43c16fb3258f36 Author: Adam Dickmeiss Date: Tue Nov 26 13:15:42 2002 +0000 Fix SIGTERM handling in frontend server commit e74dfc354e4695e5238bc77f39c879e1d9fc6f20 Author: Adam Dickmeiss Date: Fri Nov 15 10:38:37 2002 +0000 Remove C++ comment commit 99746ff734496e41e344ca5e7a4127a1fbd348a3 Author: Adam Dickmeiss Date: Fri Nov 8 13:35:06 2002 +0000 Swap order of elements nonews and title commit ae5e063a5773a2c858901f8055dc1f8b8ac5bb63 Author: Adam Dickmeiss Date: Fri Nov 8 12:27:37 2002 +0000 Dont show navig titles for TKL commit 929d26653d54a64c12dff06cbb470c22667d79f1 Author: Adam Dickmeiss Date: Fri Nov 8 12:27:00 2002 +0000 TKL documentation commit 64f113142ce1f847896e50a43707d220681faf6b Author: Adam Dickmeiss Date: Fri Nov 8 12:23:38 2002 +0000 Relax check for zero length OCTET aligned commit f736b30f8eb7b0530b12ed7cd91734c870a8cd78 Author: Adam Dickmeiss Date: Mon Oct 28 10:53:09 2002 +0000 Fix length setting in ZOOM_record_get commit 709cc6e9e4f5bcb03fcc62be477e7d65eecfbda2 Author: Heikki Levanto Date: Thu Oct 24 12:14:01 2002 +0000 Using a default path to find tcl commit b6eddd61b2a19637bdfeda4762a328e0f1eb397d Author: Adam Dickmeiss Date: Thu Oct 24 10:28:39 2002 +0000 New debian release commit d239d37370affeb6525e5148554c05104dbdf5d7 Author: Adam Dickmeiss Date: Wed Oct 23 10:11:44 2002 +0000 Fix refernce to yaz(7) commit 12e68873046de1fc08b5589891914ec2cdc3d453 Author: Adam Dickmeiss Date: Tue Oct 22 14:40:21 2002 +0000 Add include of stdio.h commit 4a30229e344fc242c25951daef62af68481067c2 Author: Adam Dickmeiss Date: Tue Oct 22 13:49:53 2002 +0000 data1 gone commit 95a7ea9b644c520d7d7b7c5d0c71ca44dd58a225 Author: Adam Dickmeiss Date: Tue Oct 22 12:51:18 2002 +0000 data1 moved to zebra commit 6866fce7b026f5ce8b75945f72a844d7b44abd85 Author: Adam Dickmeiss Date: Tue Oct 22 10:32:46 2002 +0000 New source grs1disp.c commit 8590f113acfb6a4a1c5a4101f604690efdbc2420 Author: Adam Dickmeiss Date: Tue Oct 22 10:29:58 2002 +0000 Added grs1 display utility commit 9d9bbf2ad72a44772dca1e694de9a84c4e48aa21 Author: Adam Dickmeiss Date: Tue Oct 22 10:05:36 2002 +0000 GRS-1 render for ZOOM. New WRBUF printf utility: wrbuf_printf. commit 37406ac2e623304bcbdbfab5c521cc3f8ddcf8eb Author: Adam Dickmeiss Date: Tue Oct 22 10:04:51 2002 +0000 Add missing va_end commit 420d30f9df4c7a4f12a1f1e8265911bc38f37f99 Author: Adam Dickmeiss Date: Tue Oct 15 09:12:27 2002 +0000 Debian release commit b9a96aff744a65bfc785e1597d953a780754a929 Author: Adam Dickmeiss Date: Mon Oct 14 19:45:36 2002 +0000 Allow - in term. But - in ranges must be surrounded by whitespace commit bec71e151d306edbc5f58e19c7c139a196e867e9 Author: Mike Taylor Date: Thu Oct 10 22:52:40 2002 +0000 Add intermediate files from PDF production. commit 5b690aebb8dc2d05cad8f668de8fd821a1c231fa Author: Mike Taylor Date: Wed Oct 9 23:07:12 2002 +0000 Bugfix to allow #PQF and #CCL anchors to work in generated HTML commit c55facf40944e9cf30f8aab0b62df79403dcee43 Author: Adam Dickmeiss Date: Wed Oct 9 20:40:24 2002 +0000 Typo commit 72a4ca7254924278c171e51e4e0946b363576845 Author: Adam Dickmeiss Date: Wed Oct 9 20:38:29 2002 +0000 New debian package commit 58b2fdadbb7b8a8845ff67501520fe1660dedeee Author: Mike Taylor Date: Wed Oct 9 11:36:09 2002 +0000 ignore more files commit c9b7cb5f4ca3e9c570d921307e2d44ce32f51801 Author: Adam Dickmeiss Date: Tue Oct 8 23:00:09 2002 +0000 Make insert_node work (again) commit aabdf39f20d833179fefca73910a0b2649d0d7e6 Author: Adam Dickmeiss Date: Tue Oct 8 22:18:22 2002 +0000 More fixes for xmltext commit 3eef743c121a36edcf66e4e3651d5ceb8b4e0156 Author: Adam Dickmeiss Date: Tue Oct 8 20:14:43 2002 +0000 sgml filter doesn't interpret entities commit e742d7d7fdc38b3ffab681e32bc76551e1fb3264 Author: Mike Taylor Date: Tue Oct 8 11:34:02 2002 +0000 Add yaziconv commit d40f4c0f984fbb4ee31d3778905e46178e4e0e26 Author: Adam Dickmeiss Date: Tue Oct 8 09:07:29 2002 +0000 Fix man pages for RedHat docbook2man commit af14560c434c7209f587869bf4d5e15bff108dae Author: Adam Dickmeiss Date: Fri Oct 4 19:11:17 2002 +0000 Use hex character entity commit afd0e366dc8b6305e9795da94afc5c8f1ead0580 Author: Adam Dickmeiss Date: Fri Oct 4 19:06:36 2002 +0000 Clean log commit 471b7bd86c74d2c69faaa96d45c4fdf8c643615a Author: Adam Dickmeiss Date: Fri Oct 4 19:06:25 2002 +0000 Added include of yaz-util.h commit b732890efcff9d226dc30b5338fdfa8d8fa2a83c Author: Adam Dickmeiss Date: Fri Oct 4 19:05:36 2002 +0000 WIN32 portability fix commit 14e5ae78869e44ee231ba01775ecf282f84e4879 Author: Adam Dickmeiss Date: Fri Oct 4 18:29:42 2002 +0000 official release for debian commit a11d0a5867b3f7fa90a0f11f9fc59b8b4e083c4b Author: Adam Dickmeiss Date: Fri Oct 4 18:22:40 2002 +0000 Towards 1.9.1 commit 835cca40fdee0597232361c5129cf47160d77e79 Author: Adam Dickmeiss Date: Fri Oct 4 11:24:55 2002 +0000 OAI MARC fix commit 25eb3d7b8af9f8857903460121746afc1738c467 Author: Adam Dickmeiss Date: Fri Oct 4 11:24:39 2002 +0000 Use case-insensitive compare for charset names commit 72d53a9d929783e997c41330bb28859018088b53 Author: Adam Dickmeiss Date: Fri Oct 4 11:23:50 2002 +0000 Use OAI XML commit 50319ad67f5bae49fc9449bd6105dfa357f2dbb3 Author: Adam Dickmeiss Date: Fri Oct 4 10:19:58 2002 +0000 OAI MARC display commit 906a5ab4a9c3b8b9a4bef15de1df58ab873a1cb5 Author: Adam Dickmeiss Date: Wed Oct 2 15:51:52 2002 +0000 Create entities for MARC data (& <) commit bdcf00f7ba08b06323fbf8e1679c947316100ad3 Author: Adam Dickmeiss Date: Wed Sep 25 20:41:02 2002 +0000 Negotiated charset and languages saved in connection options negotiation-{charset,lang}. commit 5cc38fde071f94e8be5899679bea16e57e35a90f Author: Adam Dickmeiss Date: Wed Sep 25 20:38:36 2002 +0000 Installation mentions packages for YAZ as well as iconv support. commit b38addc8b6f4e44a7ff5c7167b3805ee01e50888 Author: Adam Dickmeiss Date: Wed Sep 25 20:32:53 2002 +0000 Spelling commit 4e1f50c179b87adc3eb1098b6edf28a653dd6d64 Author: Adam Dickmeiss Date: Wed Sep 25 20:32:22 2002 +0000 Create documentation files in current directory rather than $(srcdir). commit d054cdd41417401fbba915e20203882159f32283 Author: Adam Dickmeiss Date: Wed Sep 25 12:37:07 2002 +0000 Thread-safe handling of errno variable. For server option -a@ produces APDU prints in YAZ log. commit 400d5579f2fc2476dc8d97653e97b244691059c8 Author: Adam Dickmeiss Date: Wed Sep 25 10:01:33 2002 +0000 Changes commit e8e3ed14b62160f636e5df1901055743b4100fb8 Author: Adam Dickmeiss Date: Wed Sep 25 09:21:09 2002 +0000 Man pages part of Redhat package commit 9da4846f45a691c404093e724be268722932fc46 Author: Adam Dickmeiss Date: Wed Sep 25 08:11:33 2002 +0000 Check for docbook.dsl, docbookx.dtd on RedHat 7 commit b3f24b6b29adb7722dd5eb66a68f1df14907166b Author: Adam Dickmeiss Date: Wed Sep 25 07:43:29 2002 +0000 Make doc part of SUBDIRS so that 'make install' installs man pages commit b3c5bb2d6689135ebce9350150e132c2d1a7859b Author: Adam Dickmeiss Date: Tue Sep 24 14:39:10 2002 +0000 Fix ESpec handling commit e0b38a8744077e71e4673afc76a4e17546eb01a2 Author: Adam Dickmeiss Date: Tue Sep 24 13:58:13 2002 +0000 Fix ESpec handling commit 165b231b0f6eaa0b2b5fbf438f5ddede630b10e3 Author: Adam Dickmeiss Date: Tue Sep 24 08:05:41 2002 +0000 Added several type casts for C++ compilation. ZOOM fixes. commit a662fb07cab81d45cdd1b8f5b7e68c21992a8678 Author: Adam Dickmeiss Date: Tue Sep 24 08:00:50 2002 +0000 tst7 checks for memory leaks commit b6f9808662c04f1037956112e5cf8a83af19c59f Author: Adam Dickmeiss Date: Tue Sep 24 08:00:32 2002 +0000 spelling commit 263fe1daee74b19f379ed1a68222d09ef4c2752d Author: Adam Dickmeiss Date: Tue Sep 24 07:58:59 2002 +0000 SGML reader parses comments commit 4f0e281e16293a8c6403d7ad1265a13eae911006 Author: Adam Dickmeiss Date: Fri Sep 20 22:30:01 2002 +0000 Indentation commit fa4bfbc45c934a9431f40588c519085eff9e8ae6 Author: Adam Dickmeiss Date: Fri Sep 20 22:23:13 2002 +0000 Improve check for type of socket length (socklen_t). commit 56bb16e3c5714fc0ccb558d90eb927e3f80a3974 Author: Adam Dickmeiss Date: Fri Sep 20 10:22:53 2002 +0000 New descriptions commit 2ceb6ed00ff5be1dfcca786fbf000bb2c7682c5c Author: Adam Dickmeiss Date: Wed Sep 18 20:55:54 2002 +0000 Safer check for iconv commit b28230ab11ea960e0bf0ea04ceeaf88131ab2f02 Author: Adam Dickmeiss Date: Tue Sep 17 21:19:38 2002 +0000 Work on ES Update for client commit 519fe26fff30687caa26c4a26038d02dcc0429c8 Author: Adam Dickmeiss Date: Tue Sep 17 20:17:44 2002 +0000 Use proper tags for references to man pages commit f5235f6ab427d98731fb5184ac284ac97e1dfb40 Author: Adam Dickmeiss Date: Tue Sep 17 11:07:30 2002 +0000 Fix white space. Added vim indent directives commit 1a8c91e241c75be97b531ca514735196b94ca8dd Author: Adam Dickmeiss Date: Mon Sep 16 20:40:35 2002 +0000 yaz-comp and yaz-config moved to yaz-devel commit 141269ce5f566fcd7ed188ebe9bb878bf4b32018 Author: Adam Dickmeiss Date: Mon Sep 16 18:45:13 2002 +0000 Moved zoom implementation to zutil. Man page for zoomsh commit 94fce64abe00f0334941ca270c8898bdabb0ca7c Author: Adam Dickmeiss Date: Mon Sep 16 14:16:31 2002 +0000 man pages commit 9b1c2c1ef16e7311f6cb962e9854c08605a3e79e Author: Adam Dickmeiss Date: Mon Sep 16 10:48:06 2002 +0000 Shorter header commit 44b9f906bd7b0e1df901d37295ce46ed78456063 Author: Adam Dickmeiss Date: Sun Sep 15 20:41:01 2002 +0000 Remove unnecessary ; commit 2723c5eb5d1153c1cd6106060d23e8dbc74ae192 Author: Adam Dickmeiss Date: Sat Sep 14 10:27:21 2002 +0000 Remove unnecessary make rule commit 2374d315a30c80d1e913da03f455156c4c53377b Author: Adam Dickmeiss Date: Fri Sep 13 11:28:17 2002 +0000 Added more Bib-1 diagnostics commit fa6e929aaa0e09d27aa9ed9e9eebca3faa4fa51f Author: Adam Dickmeiss Date: Fri Sep 13 08:57:03 2002 +0000 Make buffer for OtherInfo larger commit 4dd885245b0ce82b18609ab4a05d0d5868ff1391 Author: Adam Dickmeiss Date: Wed Sep 11 21:25:56 2002 +0000 Remove LIBS = from Makefile.am's. commit a90265b447bd2d054406b234b9f86150658d5e35 Author: Adam Dickmeiss Date: Wed Sep 11 21:19:06 2002 +0000 Better check for iconv commit 4e0f9c05e7a85b597cd8c3efb7a11563067bd63a Author: Adam Dickmeiss Date: Wed Sep 11 21:00:16 2002 +0000 Update changes with socklen_t commit ca4948d9b8ea1e4d73d25a25b1da3a4de121ca73 Author: Adam Dickmeiss Date: Tue Sep 10 20:56:34 2002 +0000 Check for socklen_t type for accept, getpeername commit 2309bff1f17207f5952803760becd2390f7f8ea3 Author: Adam Dickmeiss Date: Tue Sep 10 18:43:02 2002 +0000 Updated version number commit 5acca4fa9c5841f48e8ef1b6ac7599dccde69b65 Author: Adam Dickmeiss Date: Tue Sep 10 18:41:18 2002 +0000 Added yaz_errno commit cd3269449ef2be79e241e1c687856257276ad97d Author: ja7 Date: Tue Sep 10 10:20:27 2002 +0000 Changed emacs tab-width: to 8 commit d4eedc26c6a6152f08c8a2e1dab4cdc131e447a5 Author: Adam Dickmeiss Date: Fri Sep 6 20:04:49 2002 +0000 debug=0 commit 4c0ff47b6c72bf6be3e466d48abbc1be89a3b778 Author: Adam Dickmeiss Date: Fri Sep 6 19:52:57 2002 +0000 Fixed use of service display name commit 4d79eefd8542f5a5c205f8ce32c5518f4e26ca43 Author: Adam Dickmeiss Date: Fri Sep 6 13:05:38 2002 +0000 Changes commit 5f67d6d62b8c0b8bfa20fac3d1a3a9b2ad984b56 Author: Adam Dickmeiss Date: Fri Sep 6 13:01:47 2002 +0000 Fix date commit 45079b6641e14101d5338fe1cae5af86647d289d Author: Adam Dickmeiss Date: Fri Sep 6 09:00:34 2002 +0000 Changes commit 86d44f674f4c207d4983f75d55c0036e88813534 Author: Adam Dickmeiss Date: Thu Sep 5 19:44:09 2002 +0000 yaz-doc moved to section doc commit 3c23d13ff10dd4fdc4059704f7b9df9e7a5d9fcf Author: Adam Dickmeiss Date: Thu Sep 5 13:36:53 2002 +0000 Towards 1.9 commit 399ff63d5fad2f5a249d6326b5a8658979897b68 Author: Adam Dickmeiss Date: Tue Sep 3 18:10:13 2002 +0000 Fixed crash due to absent database in NamePlusRecord commit 590c754f58a6fa4ca0f9050e470642eecd261031 Author: Adam Dickmeiss Date: Tue Sep 3 10:46:06 2002 +0000 Removed line for PQF grammar commit 6ba14eb5dc7229aa17977882024a475b6d258368 Author: Adam Dickmeiss Date: Tue Sep 3 09:50:34 2002 +0000 Updated doc about PQF. Spell fixes. commit 786269f1247effe4194494c834b5d7043417d0d5 Author: Adam Dickmeiss Date: Mon Sep 2 13:59:07 2002 +0000 New PQF API. Old API preserved. commit 524bfef7eb43a79c16beacccedf6d047074372b5 Author: Mike Taylor Date: Fri Aug 30 15:39:40 2002 +0000 Add VAL_BIB2 and VAL_ZEEREX. We use the existing VAL_USMARC in oid.c for the MARC attribute set rather than defining a new and somewhat redundant VAL_MARC. We may want to revisit that decision, though. commit ac5f8ad9508f5b3ada38117b0da7ae23c650ab1e Author: Mike Taylor Date: Fri Aug 30 15:38:26 2002 +0000 Add OID-database entries for the MARC, BIB-2 and ZeeRex attribute sets. commit 9c04f1661bc183ea54fb5581c63ecc338ae5ddea Author: Adam Dickmeiss Date: Fri Aug 30 11:28:01 2002 +0000 Remove EXPAT reader commit bcd8713c9df99fb20caf4c8226599d12229f07b2 Author: Adam Dickmeiss Date: Fri Aug 30 11:27:44 2002 +0000 Fix warnings (issued by VC 6) commit a2730f8f69a130acc4d5fedf5f9ec838f953b530 Author: Adam Dickmeiss Date: Fri Aug 30 09:06:42 2002 +0000 Small cosmetic changes to list_all output commit 066324901a18b5477f7a55b0a8c388b641c60efd Author: ja7 Date: Thu Aug 29 21:35:38 2002 +0000 added new commands set_otherinfo list_otherinfo clear_otherinfo list_all set_autoreconect commit 5a018835d3e6920aafca465862c37c2b2ba93a03 Author: Mike Taylor Date: Thu Aug 29 21:26:08 2002 +0000 Nothing to get excited about. commit ddac2b650c387c8ab108827c8ead16371f16340d Author: ja7 Date: Thu Aug 29 19:36:09 2002 +0000 Added YAZ_EXPORT const char* yaz_z3950_oid_value_to_str(oid_value ov, oid_class oc); Used for gettting ui friendly names for oid_value's commit aea27bc0e4e3f310196f0e6cee3de8cac69e9806 Author: ja7 Date: Thu Aug 29 19:34:44 2002 +0000 Added complete_auto_reconnect from completing for the auto_reconnect command commit 5f780a431cd088035d164277d8981bf9bd35a16e Author: Mike Taylor Date: Thu Aug 29 16:18:34 2002 +0000 dsssl for rh7.2 commit e0dc2b9e3d7bd7c91c6c6bb2fa650873a7ebfe72 Author: Mike Taylor Date: Thu Aug 29 11:14:30 2002 +0000 Add all my new .cvsignore files. Life will now be less noisy. You get bombarded with "? util/foo.lo" messages every time you do a CVS operation over the tree. commit cdf2ebfab56b50232a49bc4032d90704794ca4c0 Author: Adam Dickmeiss Date: Thu Aug 29 09:58:42 2002 +0000 Added yaz_log_init_prefix2 commit 6b7929b5e5663fb9a768b11aeaa3f930691e6ece Author: Mike Taylor Date: Wed Aug 28 21:00:29 2002 +0000 add docbook DTD path for Red Hat 7.2 commit 16aacc8655a9b0460f13c31f5459d030465b9c43 Author: Adam Dickmeiss Date: Wed Aug 28 20:06:04 2002 +0000 Changes commit 9dffa786b23759414b476e152f590f6aa0e8aa3a Author: Adam Dickmeiss Date: Wed Aug 28 19:34:50 2002 +0000 Remove unused variable commit a19b3326f39623ae79b6679c010c8db04c22fdf4 Author: Adam Dickmeiss Date: Wed Aug 28 19:34:36 2002 +0000 Iconv fix: Dont move inbuf pointer for bad init sequence commit 941c141092dc2ea6a2b6f5cc7bac181798113ae7 Author: Adam Dickmeiss Date: Wed Aug 28 19:33:53 2002 +0000 add missing return value commit cedc80efd96ff2d9c2a538ac319ec3c01aa80b04 Author: Adam Dickmeiss Date: Wed Aug 28 19:12:30 2002 +0000 Fix prototype for z_SUTRS commit d262777bcc71cadd8356f19da6eb70a76ad0d0e3 Author: Adam Dickmeiss Date: Wed Aug 28 19:10:56 2002 +0000 Fix infinite loop (bug introduced by previous commit) commit 8f3f8256752d09f66cd2c7a412cc8c30a0fc90ea Author: Adam Dickmeiss Date: Wed Aug 28 12:48:47 2002 +0000 XML reader removed. Now part of Zebra. commit f3fa2f64b69427aef4dbb191fc870865bb87c9b5 Author: Adam Dickmeiss Date: Wed Aug 28 12:44:35 2002 +0000 Fixed bug where wrong data was used for repeating fields commit 7f1b9680653ec5037c88b12e0b8e04c7f17e467f Author: Adam Dickmeiss Date: Wed Aug 28 08:12:49 2002 +0000 Fix: use yaz_iconv_open instead of iconv_open commit caa50534e057668bf2cded573d41c5b07034633b Author: Adam Dickmeiss Date: Wed Aug 28 07:54:11 2002 +0000 data1 uses yaz_iconv commit cf9f213fff1ae6b2471f8367114b93ae45ed8b75 Author: Adam Dickmeiss Date: Wed Aug 28 07:53:51 2002 +0000 ODR uses yaz_iconv commit c914ef625a80051757013e6ae47db7a4798e18b5 Author: Adam Dickmeiss Date: Tue Aug 27 22:33:30 2002 +0000 siconv added commit 33c972afb7998b7598f72ab1f4c072f92c2d6407 Author: Adam Dickmeiss Date: Tue Aug 27 21:45:28 2002 +0000 Mini iconv library functional. Supports UTF-8,ISO-8859-1,UCS4,UCS4LE commit 48abc88bc981af496e660e8f8a7a4aa678781623 Author: Adam Dickmeiss Date: Tue Aug 27 14:14:01 2002 +0000 More work on iconv test program commit 7dec30565506b5ecdd449866ebabe67bd816fc59 Author: Adam Dickmeiss Date: Tue Aug 27 14:02:13 2002 +0000 Simple iconv library commit 8b934374217ed1225466246ffa948e182124156e Author: Adam Dickmeiss Date: Tue Aug 27 13:30:18 2002 +0000 Cosmetic change; to test CVS loginfo commit d30f275ba6239b9e644ea60cd123487173704824 Author: Adam Dickmeiss Date: Tue Aug 27 13:18:26 2002 +0000 Remove dead comment commit a6a8ea2837dd78d21fe036fff4b8d91c0d6e09c8 Author: Adam Dickmeiss Date: Mon Aug 26 12:15:35 2002 +0000 Plus signs converted to spaces for database names commit 4fbad84813bfafe3c0c8e368d252a192cd84b3f3 Author: Adam Dickmeiss Date: Mon Aug 26 10:43:52 2002 +0000 Pointer fix for amp-handling commit 836f6f959c8bdde0c0ecc6317ba8d274d868e9e0 Author: Adam Dickmeiss Date: Mon Aug 26 09:25:56 2002 +0000 Buffer overflow fix commit 5ea4e843c189848da0b41935e7f2db8e41b7c8e7 Author: Adam Dickmeiss Date: Sun Aug 25 06:48:18 2002 +0000 Ensure that send_present doesn't use ODR if present is not performed commit 1274cfd835afa98442ac013e4556ad7b5c5f71a6 Author: oleg Date: Sat Aug 24 09:28:30 2002 +0000 Fix memory leaks, which corresponding with ODR out stream. Background: when result set has created and the record retrieve from cache that the Task Retieve to invoke send_present(), which allocate present APDU. APDU. commit 9fa5e9b2a5a3ba0644178d5ed85869a31ffe59f2 Author: Adam Dickmeiss Date: Fri Aug 23 14:27:18 2002 +0000 Preserve white space in data1. Strip in write of GRS-1,MARC,SUTRS commit fcbe67e161824f159620ed029a15bf42f719d0c8 Author: Adam Dickmeiss Date: Fri Aug 23 14:25:07 2002 +0000 Added conversions for ', & commit 424b34cfd7042e0c854ba2ca1f2cc656b61f3e46 Author: Adam Dickmeiss Date: Fri Aug 23 14:24:05 2002 +0000 Parse system entities commit b3b4ca03b140324f297525589a44c13c1f5e9dab Author: Adam Dickmeiss Date: Tue Aug 20 12:03:34 2002 +0000 Towards 1.8.9 commit 00a3858993442806aca78f82e28f88c5942dc135 Author: Adam Dickmeiss Date: Tue Aug 20 08:19:40 2002 +0000 Use elementSetName and syntax in record lookup in cache commit 87efa99fe797d07045266a5e0d876ac8b0e28a34 Author: Adam Dickmeiss Date: Mon Aug 19 21:09:10 2002 +0000 timeout option for ZOOM commit 0e8b1116b97d769ea233858fe3c2ced5d1da5d7c Author: Adam Dickmeiss Date: Sat Aug 17 07:56:59 2002 +0000 Updated version. Data1 compatibility fix for nodetomarc commit d82eeac05d2899fa30704e2c40e9dd603ff2c581 Author: Adam Dickmeiss Date: Sat Aug 17 07:55:51 2002 +0000 UNIX sockets commit 886a6a270e909137e3127ac4ce37c152a6e81c70 Author: Adam Dickmeiss Date: Sat Aug 17 07:55:38 2002 +0000 Fix commit 0441a493b34ad8a90d3ecc336a52a146d2794f13 Author: Adam Dickmeiss Date: Fri Aug 2 08:54:03 2002 +0000 Towards 1.8.8 commit 5f065af405ec0934b14756307d27eed69a3d9833 Author: Adam Dickmeiss Date: Fri Aug 2 08:20:31 2002 +0000 debian changes commit 069977745832f79608e732d7f1f433eade791f31 Author: Adam Dickmeiss Date: Wed Jul 31 14:06:29 2002 +0000 Enabling ILL in test server (again) commit 8b519a7e804301509a1bd7081f296da922e2afa1 Author: Adam Dickmeiss Date: Wed Jul 31 14:06:09 2002 +0000 Removed code that read dead pointer commit 32ff7687bdfe5b972d54b1ba4f3078cee011fadf Author: Adam Dickmeiss Date: Mon Jul 29 20:04:08 2002 +0000 created data1_createx and compatibility commit 3dcdf20f2ccc20554dc247f60281eb06111f0bf6 Author: Adam Dickmeiss Date: Mon Jul 29 19:51:34 2002 +0000 record fetch method ext that returns YAZ Z_External commit b4bd53509869a8fa32749b4cc9a00aae34a12ada Author: Adam Dickmeiss Date: Thu Jul 25 14:19:18 2002 +0000 EXPAT support on WIN32 commit 91e4c648cb5ba156f197059870050252d497bc4d Author: Adam Dickmeiss Date: Thu Jul 25 13:45:30 2002 +0000 iconv.dll commit a67cc28231d95548fda7d7b9626b0ead7eb0f13f Author: Adam Dickmeiss Date: Thu Jul 25 13:20:20 2002 +0000 Added private ODR header commit 0edfdd01ae95aa2770f2e122bdea25208494acbd Author: Adam Dickmeiss Date: Thu Jul 25 12:52:52 2002 +0000 Character set negotiation updates commit a0ff2572c63e4be9254b12d08b0166b6232477de Author: Adam Dickmeiss Date: Thu Jul 25 12:51:48 2002 +0000 Default timeout is 25 seconds commit 569f86b4615c2731727be2a0ff898d36f9725819 Author: Adam Dickmeiss Date: Thu Jul 25 12:51:08 2002 +0000 iconv conversions for ODR commit c903bb04318c52d60fd18b12aba1fe16ade8fc65 Author: Adam Dickmeiss Date: Thu Jul 25 12:50:16 2002 +0000 Updates to faciliate non-private character set negotiations commit 2947a1e4e735df14104e984b90f588cee8cc3ad3 Author: Adam Dickmeiss Date: Thu Jul 25 12:48:54 2002 +0000 Print @term commit 1b238b27b26f46bad4051ef9ea2a0244716bcdda Author: Adam Dickmeiss Date: Thu Jul 25 12:48:39 2002 +0000 Implement @term commit faad6e8d9b76ec323fd2c0facb30c5ff1d50ad13 Author: Adam Dickmeiss Date: Mon Jul 22 23:16:10 2002 +0000 Define SUN_LEN if undefined (Solaris) commit 2c530ea4045bf7a0c3895ea1ed31c222536d6143 Author: Adam Dickmeiss Date: Fri Jul 12 13:42:20 2002 +0000 Use _strnicmp on Windows commit f13b69ddee7417ad6430f6965982295e43ea687a Author: ja7 Date: Fri Jul 12 12:20:34 2002 +0000 Added new command ccl_parse which parses a ccl find command and print the qpn query for the given ccl find command. Changed to not coredump when retriving octet_alingned record the client is unable to handle. now it just telles about the error and treats the octets as sutrs. commit 79fb4b8deb48939a8d9e3fce48c7736eb3b1cf0b Author: ja7 Date: Fri Jul 12 12:11:33 2002 +0000 changed ccl_pr_tree to print as a qpn query instead of some infix notation commit 3422548c2ce84dce9283e9649588f82cc0cb5774 Author: Adam Dickmeiss Date: Thu Jul 11 10:40:50 2002 +0000 XML updates for print tree commit 0a39dcf0b6b38833a59e3deae198ef204cfee003 Author: Adam Dickmeiss Date: Thu Jul 11 10:40:34 2002 +0000 GRS-1 producer handles XML better commit 080575c92b35597c3beb394c23d2a1d22532bbdc Author: Adam Dickmeiss Date: Thu Jul 11 10:39:49 2002 +0000 XML readers handles iconv for unknown encodings commit f7fc04b3946c100bbc26d451fc3f47e368ecd224 Author: Adam Dickmeiss Date: Thu Jul 11 10:39:05 2002 +0000 Implement otherInfo%d setting commit 72593d004bbd59245c2c143e9806a384a2c2724f Author: Adam Dickmeiss Date: Fri Jul 5 16:04:28 2002 +0000 character conversion commit aeec32da5e13c9f46062d07ac3c16582dbd479c8 Author: Adam Dickmeiss Date: Fri Jul 5 12:42:52 2002 +0000 Keep white space for XML (do not pretty print) commit 751fc8b0c5b555a41feb9d8c0bf8ac71d5707d25 Author: Adam Dickmeiss Date: Wed Jul 3 14:09:34 2002 +0000 Changed MARC, GRS-1 handling to cope with new structure commit c3b984a6d1cf19b1731b7e783ae2c0fd539277ac Author: Adam Dickmeiss Date: Wed Jul 3 13:36:55 2002 +0000 unix sockets for zoom commit a774858896a9b56c966edbfb70d8eae1c91c4ad1 Author: Adam Dickmeiss Date: Wed Jul 3 10:04:04 2002 +0000 Extra root tag node for data1 commit c571556bb870d20c8047b4b4e837a9916733cda7 Author: Adam Dickmeiss Date: Mon Jul 1 12:59:12 2002 +0000 reconnect bugfix (when receiving close PDU) commit f576c6403441fc35f85a3e57f9423ff07d052de1 Author: Adam Dickmeiss Date: Tue Jun 18 21:30:38 2002 +0000 Fix warnings commit 2bdde7e3c49ae8dbc8da613f6554d6b7ae94c4e3 Author: Adam Dickmeiss Date: Tue Jun 18 21:30:25 2002 +0000 fix warnings. Indentation commit a2df70871ff2494610edf71f7c7c74b785a69cd6 Author: ja7 Date: Mon Jun 17 14:57:34 2002 +0000 Added support for adding tab completions to any command with out a build in completion function. add the folowing line to allow tab completion on element set name f2locations to the elements command register_tab elements f2locations som small clean up of the tabcompletions added completion on filenames to the set_apdufile set_marcdump . and ! commands now uses strncasecmp when findding stuff to complete on. eg format xml "tabcomplets to" format XML Extended authentication command to allow 2 arguments and send userid and password in the Z_IdAuthentication_idPass structure commit 8f3cccf67a99a23174b918872b0963f2c24b8cd6 Author: Adam Dickmeiss Date: Wed Jun 12 19:47:44 2002 +0000 Added Ko van der Sloot commit de70f47f9680c5fd7b3863f2a647d6dc760c2d98 Author: Adam Dickmeiss Date: Wed Jun 12 19:42:38 2002 +0000 Deal with Solaris recv that returns ENOENT commit d8b453a7e9a34f0254a3d9483a26add0aff3eb6c Author: Adam Dickmeiss Date: Mon Jun 10 11:07:57 2002 +0000 CCL always enabled commit f0c29efc372c97a94a32118de624b31c996d7ff5 Author: Adam Dickmeiss Date: Thu Jun 6 13:02:01 2002 +0000 CCL using xmalloc/xfree commit 6f41c38bc479344d4ecd347a607546dc95971efa Author: Adam Dickmeiss Date: Thu Jun 6 12:54:24 2002 +0000 Using xmalloc/xfree instead of malloc/free commit 9b24380fadc11b19041f1cde6da2ce02b7bf3572 Author: Adam Dickmeiss Date: Wed Jun 5 21:11:00 2002 +0000 NSIS bz2 commit b4c0c8a8dfcc63bd62b6104daf7d82062dc3e54c Author: Adam Dickmeiss Date: Wed Jun 5 21:10:16 2002 +0000 newer version commit c9c53d8b79a1d6283dcc446ed3f1292a4522a49c Author: Adam Dickmeiss Date: Wed Jun 5 21:09:20 2002 +0000 removed unused variables commit 20c29d8695afd66903288a1eabe259877b1dc79b Author: Adam Dickmeiss Date: Wed Jun 5 21:09:04 2002 +0000 added include commit f78b96e6645bb3309719a234ff68699d8fccb975 Author: Adam Dickmeiss Date: Tue Jun 4 11:36:10 2002 +0000 New COMSTACK: UNIX socket commit 827c292b2ffb8314a08f6a6352b68ead05d3ff62 Author: Adam Dickmeiss Date: Tue Jun 4 08:33:49 2002 +0000 dont return value in void commit a5c369a03734cbb9de4181fe294f409a0e655de4 Author: Adam Dickmeiss Date: Tue Jun 4 08:29:53 2002 +0000 ignore errors on del. commit 27e67487d8100738feb98ae7315540846d6bfdf0 Author: Adam Dickmeiss Date: Sun Jun 2 21:34:45 2002 +0000 Remove --enable-module option commit 9a7d52d3a1482c26ba7fb6c8aa2b74d4442c5cc3 Author: Adam Dickmeiss Date: Sun Jun 2 21:29:30 2002 +0000 Print more GRS-1 data types commit ddce0dd6eaf2b38def1cd1e04c6f7aac1eb5be6d Author: Adam Dickmeiss Date: Sun Jun 2 21:28:34 2002 +0000 Update definition to use explicit tagging for era CHOICE commit 67940e6310f39f7e289d48a7d1fbb577eca56686 Author: Adam Dickmeiss Date: Sun Jun 2 21:27:17 2002 +0000 First work on extended packages. Reconnect capability commit 507901d1ce2fee1278cdf2e7239b3087fb459ce6 Author: Adam Dickmeiss Date: Sun Jun 2 21:25:50 2002 +0000 Option to start a given number of connections on tst3 commit 152757332e4706017b02870c258edcead5575e72 Author: Adam Dickmeiss Date: Sun Jun 2 18:54:03 2002 +0000 Moved documentation commit 82529e23b0d26a3a8e107a5c826196ff17a32dbe Author: Adam Dickmeiss Date: Sun Jun 2 18:50:40 2002 +0000 Moved from /usr/share/yaz/doc to /usr/share/doc/yaz commit a384c3e843c6738f4648156371d1f95ba7e2dd2d Author: Adam Dickmeiss Date: Fri May 31 08:48:06 2002 +0000 Changed SectionIns for NSIS v1.98 commit df38683ebdd6534f3f7b3b3a45a7a63e74b2bb80 Author: Adam Dickmeiss Date: Thu May 30 20:57:38 2002 +0000 Spell fixes commit cff1ce5798328abf2ef7dce859b47ba1d9ec04f9 Author: Adam Dickmeiss Date: Thu May 30 20:57:31 2002 +0000 Updated PQF grammar commit 3fef09b4aaeb051928abf940049d138e5d73e20d Author: Adam Dickmeiss Date: Tue May 28 21:11:08 2002 +0000 No more @-tag for MARC commit 40de6aa3aafbf959d7fc3a1002e8a43874c77d7c Author: Adam Dickmeiss Date: Tue May 28 21:09:44 2002 +0000 schema mapping supports duplicate maps (copy instead of pointer swap) commit 7f3f56b0ee3a395f3570999a6c99a369b9e6a0cb Author: Adam Dickmeiss Date: Mon May 27 12:34:24 2002 +0000 Fixed is_indicator commit c6e53a084e3819438c2a1e7de947a655f708f15b Author: Adam Dickmeiss Date: Wed May 22 14:27:17 2002 +0000 Bump version commit 95328fb099ce6ba6d53322b02226d206d39af429 Author: Adam Dickmeiss Date: Wed May 22 11:34:31 2002 +0000 New version commit c7530a9d87527da7ea5f53b2e255179ce6ebefab Author: Adam Dickmeiss Date: Wed May 22 11:33:52 2002 +0000 New version. commit 751c149afdcefae54743ad78a6abac853aa81ea2 Author: Adam Dickmeiss Date: Wed May 22 11:19:34 2002 +0000 Towards 1.8.7 commit 1344028e56cd1456543fca8ef4889b053cf667a3 Author: Adam Dickmeiss Date: Wed May 22 11:19:20 2002 +0000 Spell fixes commit 5f20d0ca24f3ab6ff9cc5c1532760782387d038e Author: Adam Dickmeiss Date: Tue May 21 19:39:57 2002 +0000 Fix warning commit e8d17b7385e448e2b3f4ba3ff6426ecd543ed97e Author: Adam Dickmeiss Date: Tue May 21 08:36:03 2002 +0000 Minor changes to avoid warnings commit d9dfda0bf340a35a062c42d566a2390c1f5bc447 Author: Adam Dickmeiss Date: Tue May 21 07:43:16 2002 +0000 Comment node. Extra root level for XML parsed data1 commit 29b509a56dc168a85a584454cc89ad61662536b0 Author: oleg Date: Mon May 20 09:13:39 2002 +0000 Fixed using random values commit 73453b196192a42ea0ef9c26e0a1a0cc759fd105 Author: oleg Date: Sun May 19 15:39:54 2002 +0000 Added second part of helper functions for CharSetandLanguageNegotaiation-3 Model. Work with client/zoomsh. commit 1cd88a77abb7c32e5ff938e2f4b9392d03d45ec5 Author: oleg Date: Sat May 18 09:52:37 2002 +0000 Added support of CharacterSetandLanguageNegotiation-3 modele (based on Z_PrivateCharacterSet_externallySpecified) at the client side. commit 379c41a9a422911c58dc6a6db5f16eae56f22a7d Author: oleg Date: Sat May 18 09:41:11 2002 +0000 Helper function for Charset and Lang Negotiation 3 commit b52f95652272f117311f5ec35e61037589f7671e Author: Adam Dickmeiss Date: Fri May 17 12:52:02 2002 +0000 1.8.7.2 commit 2af1d65a7126d623ab596d831d6bc4257d75a051 Author: Adam Dickmeiss Date: Fri May 17 12:48:29 2002 +0000 Use __stdcall convention for ZOOM on WIN32 commit 1ba53c96f39c811c73af6f892136e21a2d2c246b Author: Adam Dickmeiss Date: Fri May 17 10:00:42 2002 +0000 Minor version update commit 2ec8a2e3d3ab021b9cfa40789e567f2dd9451996 Author: Adam Dickmeiss Date: Fri May 17 08:48:08 2002 +0000 New CCL feature commit e681255d9d97d3533049ec2d8cc836a72a03ebb0 Author: Adam Dickmeiss Date: Fri May 17 08:46:01 2002 +0000 Attributes from multifields may be OR'ed rather than merged commit 1449a89e77faaba24d3d35b4f08156452b8ec9b7 Author: oleg Date: Tue May 14 13:42:26 2002 +0000 Fixup random 'len' commit dccf2111a2f7bed8ac96b29565b691c6413941c9 Author: Adam Dickmeiss Date: Mon May 13 18:34:53 2002 +0000 removed yaz-date.h commit 651ccb74d12f2968e791b3f411a6c55bca68428a Author: Adam Dickmeiss Date: Mon May 13 14:13:37 2002 +0000 XML reader for data1 (EXPAT) commit 848e461264a05c14f4ced38f2df25c2232779fdd Author: Adam Dickmeiss Date: Tue May 7 11:02:56 2002 +0000 data1 backwards compatibility commit ec280185445fa342a6bf2f6a12ab3d29bbd1e54c Author: Adam Dickmeiss Date: Tue May 7 11:01:59 2002 +0000 server stops if bad listen address is given commit 685c6aaf6bf432a0de5e5f8c30a12629e7d26571 Author: Adam Dickmeiss Date: Tue May 7 11:01:14 2002 +0000 added include of ctype.h commit 6361856cbc8d8ddd689ce877dfb04c939504da03 Author: Adam Dickmeiss Date: Tue May 7 11:00:58 2002 +0000 Fixed memory leak (for proxy op) commit c705d85265b57bb0c4a8cca018274dde05142ee8 Author: Adam Dickmeiss Date: Mon May 6 07:33:50 2002 +0000 Fixed ZOOM connect for OpenBSD commit 901baaebec20b6465688280e05b02063208cbd5e Author: Adam Dickmeiss Date: Mon May 6 07:31:48 2002 +0000 Added Oleg Kolobov commit ffe5c37f0c9f55a685ac3559f1cad44baae399f4 Author: Adam Dickmeiss Date: Fri May 3 13:48:27 2002 +0000 data1 cleanup commit 48bd65a2f5bda9d3407d92137524c14d288ec074 Author: Adam Dickmeiss Date: Fri May 3 13:47:57 2002 +0000 check for rl_completion_matches commit 68446ede1353ec9912620dbbbc5ac756bee7d78d Author: Adam Dickmeiss Date: Thu May 2 10:35:44 2002 +0000 Index Data logo commit ed00497d5186ebac1435b0f5e1ef2fe732cfa05c Author: Adam Dickmeiss Date: Wed May 1 10:22:52 2002 +0000 Never treat @op as operator in quotes commit f44aed624693cd65d1c2f780452eb9aa6c339bdb Author: Adam Dickmeiss Date: Thu Apr 25 08:34:08 2002 +0000 fix zget of ExtendedServicesResponse commit 41f4872a24c96468bebeabc65398144c75d04f2f Author: Adam Dickmeiss Date: Thu Apr 18 13:18:47 2002 +0000 rename var to avoid GCC warning on OSX commit 695e6df9fce9b838cb3fe8f49b211ed99943caef Author: Heikki Levanto Date: Tue Apr 16 13:04:20 2002 +0000 Added log level flag LOG_MALLOC, moved malloc entries there. Now LOG_DEBUG can again be used for something real... commit 1f4ebcf4fbc8183c69b79b2b8ea86030732bb659 Author: Adam Dickmeiss Date: Mon Apr 15 12:03:39 2002 +0000 Fix test for rl_completion_over commit 2e817711bcfc8076b2500ab298e281357ed50115 Author: Adam Dickmeiss Date: Mon Apr 15 11:19:32 2002 +0000 Fix rl_attempted_completion_over commit 47f8bbd041e610b13dd25153872dfef2aa288c52 Author: Adam Dickmeiss Date: Mon Apr 15 09:44:41 2002 +0000 Using AM_CPPFLAGS instead of INCLUDES commit a9950f112b740bd1b6a2ccf20a584995608d26d6 Author: Adam Dickmeiss Date: Mon Apr 15 09:06:30 2002 +0000 Fix explain tags for XML writer commit ce44e106e7e56e264fd31795df50cd7581074ef3 Author: Adam Dickmeiss Date: Sun Apr 14 21:27:47 2002 +0000 add -pthread to LIBS for BSD commit ed79b7e1cc7717263edf485ca88d02eb117842a7 Author: Adam Dickmeiss Date: Sat Apr 13 18:09:01 2002 +0000 Fix help (should not wait for network I/O) commit 15441888880455587ad55891b2c3bc00336b8925 Author: Adam Dickmeiss Date: Fri Apr 12 14:40:20 2002 +0000 New private OID: IDXPATH commit e2f1c5070b1e64987f07f4fe7fa04dad55131264 Author: Adam Dickmeiss Date: Fri Apr 12 14:40:07 2002 +0000 GRS-1 writer accepts non-abs commit 6f079c85f0136946c6a36ebe778dd2b1b95993d9 Author: Adam Dickmeiss Date: Mon Apr 8 13:56:02 2002 +0000 Year range in copyright commit 0804c970f7c9926167055fd77cfc8a72c7271fa6 Author: Adam Dickmeiss Date: Mon Apr 8 11:40:41 2002 +0000 Fix for old readline commit c364aecd1a65c4d6bbc8fb97bd6949654ba9047f Author: Adam Dickmeiss Date: Fri Apr 5 12:49:13 2002 +0000 Fix return value of yaz_fclose. commit a1743ee8f71f729c1cc264e70d926b0908f77adc Author: Adam Dickmeiss Date: Fri Apr 5 12:46:07 2002 +0000 yaz_fclose and yaz_fopen implemented commit 98f0cc2d7eeed27912edb88bf16512bb622b19ee Author: Adam Dickmeiss Date: Thu Apr 4 20:49:46 2002 +0000 New functions yaz_is_abspath, yaz_path_fopen_base commit a45657fa0bf44a3064c4a42aad9d584b54891ecb Author: Adam Dickmeiss Date: Mon Apr 1 12:27:15 2002 +0000 Fix OID for ILL commit 395e1d0a3cdda0339d5476abd0437b20cd5098a6 Author: Adam Dickmeiss Date: Mon Mar 25 15:12:25 2002 +0000 Towards 1.7 commit 925f96038d281108c0a35e8bf35c4b15ff857afb Author: Adam Dickmeiss Date: Mon Mar 25 11:37:34 2002 +0000 Spell fix commit 3f54f6b4978f7a9c8fe6c1038931e097c3db5436 Author: Adam Dickmeiss Date: Mon Mar 25 11:37:10 2002 +0000 Service removed on uninstall/reinstall. commit 4dc9f274364e1f19d7839651bb402aaa310c88b7 Author: Adam Dickmeiss Date: Mon Mar 25 09:52:10 2002 +0000 Release date commit 4fcd0761b175c5b4d9a2eb98a99b6c8b7ca06018 Author: Adam Dickmeiss Date: Sun Mar 24 16:30:40 2002 +0000 Fix changelog commit da8068b4715e046e3d4592834f9bb9d5c9dac855 Author: Adam Dickmeiss Date: Sun Mar 24 16:19:23 2002 +0000 PQF feature: @use=value commit 397cccc3b0eeca050b002d96cefb8e042e4d2cbf Author: Adam Dickmeiss Date: Sun Mar 24 10:14:46 2002 +0000 Docbook autoconf for Redhat 7.2 commit b00cf9baf686ed72f826b69f2f731acb26698d10 Author: Adam Dickmeiss Date: Sat Mar 23 21:13:20 2002 +0000 remove make dependancy to prevent re-build on Redhat w/o docbook commit 914ee48f616bd669160d8c7be4fb7b2e0b77b8a2 Author: Adam Dickmeiss Date: Sat Mar 23 20:35:51 2002 +0000 Added zoom.scan.html commit 08ad39c1859f230c41588ee8b0961a35e4769ead Author: Adam Dickmeiss Date: Sat Mar 23 20:09:52 2002 +0000 Minor fixes for Debian build commit 1cfbd69fb907cb908ea062ef66de1594b5d54858 Author: Adam Dickmeiss Date: Sat Mar 23 02:03:52 2002 +0000 Debian package update commit 3bb2e157affd19490974257a252472716d7858b3 Author: Adam Dickmeiss Date: Fri Mar 22 23:44:55 2002 +0000 Fix -Iinclude for SSL objects commit ce8f4513ad7d16a5c77f9d1c57b4a57d6163e62b Author: Adam Dickmeiss Date: Fri Mar 22 20:53:13 2002 +0000 Duplicate use of include in SUBDIRS commit 96809bad943557af7ac0d01d78ed7fc18dc18436 Author: Adam Dickmeiss Date: Thu Mar 21 21:30:44 2002 +0000 --with-dtd, --with-dsssl commit 828c5ea4da2289925cbb665082b9e6df304812bb Author: Adam Dickmeiss Date: Wed Mar 20 14:36:00 2002 +0000 Additional Search Info for GFS commit a8fce80377e8bbbbbed33aa4d8927d1a53606f8a Author: Adam Dickmeiss Date: Wed Mar 20 14:35:42 2002 +0000 Display of USR.1:SearchResult-1 commit 6c30fd44237a06db6d45c0bdfa2bc4e334822341 Author: Adam Dickmeiss Date: Tue Mar 19 13:48:27 2002 +0000 Added include of ctype.h commit eb14cf14b5b176a8e2b73ca251d625e47223f116 Author: Adam Dickmeiss Date: Mon Mar 18 21:33:48 2002 +0000 MARC records embedded in C code for test server commit 0e81a96bebc0be43fc2972332091cdac57dcac5f Author: garkier Date: Mon Mar 18 21:16:55 2002 +0000 Ooops forgot this commit 4313aaf9f4f4dc830272bc5bdf15d44eaf4c278c Author: garkier Date: Mon Mar 18 21:14:16 2002 +0000 Heavy modification of debian/rules to allow easy building of -ssl and non-ssl versions Added yazrelease target to debian/rules Added postinst file to run ldconfig at install Added copyright file to make lintian whine less about missing it commit d50425318f3ef8e1fce265519eb8ce2dcfaa51b8 Author: Adam Dickmeiss Date: Mon Mar 18 18:21:33 2002 +0000 Comment about JZKit commit c4d8d77293c838ebb69fc2dbafe12a0d39599d1b Author: Adam Dickmeiss Date: Mon Mar 18 18:14:34 2002 +0000 Fixed CCL parsing of "field = - " commit 635dd986bff70edc8e8c39067bcc702e59215b56 Author: Adam Dickmeiss Date: Mon Mar 18 18:11:45 2002 +0000 MARC to XML ala JZKit commit 22f4e21c81ec94ad74eb7a329482cbe4a836cec9 Author: Adam Dickmeiss Date: Mon Mar 18 12:22:00 2002 +0000 Separate SSL libs for yaz-config commit 2b381dfe4c8f63130ce32e1117adf9e6be5cfa3b Author: Adam Dickmeiss Date: Sat Mar 16 17:37:40 2002 +0000 YAZ Runtime section (instead of yaz core) commit d476a8f3c038ba61a22c56415d68bc3ab22102c6 Author: Adam Dickmeiss Date: Sat Mar 16 12:48:47 2002 +0000 Shortcuts to start/stop service commit c63109c0af72dca3fc9b677c56797fa47b874908 Author: Adam Dickmeiss Date: Sat Mar 16 11:58:41 2002 +0000 Moved memdebug section commit a998e2bd0539fc9b719d89c45aa9127bbcb6a191 Author: Adam Dickmeiss Date: Sat Mar 16 11:48:32 2002 +0000 NSIS in changelog commit f722c8d9517ec491e2469cdc91a3751dd5e7a6df Author: Adam Dickmeiss Date: Sat Mar 16 11:46:18 2002 +0000 buildconf.sh more verbose commit 8e0cda1d5cd32573e71ba7246df71b2e1a3815a4 Author: Adam Dickmeiss Date: Sat Mar 16 11:45:00 2002 +0000 YAZ version auto-set in yaz.spec commit 109d9dfc07c2d1ddfa11e1f94ced487b4b5e7f31 Author: Adam Dickmeiss Date: Sat Mar 16 11:29:39 2002 +0000 yaz.xml modified by configure commit f1d9f7b3b3ba4e39f261f9b820dad51b8754549c Author: Adam Dickmeiss Date: Sat Mar 16 10:26:57 2002 +0000 Added NSIS rules (nmake nsis). commit e8f6432fc09babe4f948feef34b5114630a4ee88 Author: Adam Dickmeiss Date: Fri Mar 15 23:03:33 2002 +0000 Files that have version info in them commit cd4a54ee4548064f2a0538be34b54c16ccd4f965 Author: Adam Dickmeiss Date: Fri Mar 15 19:44:16 2002 +0000 fix for license.txt location commit b59881c24b105f2d56b304b1d33c74eecca3ace8 Author: Adam Dickmeiss Date: Fri Mar 15 19:32:39 2002 +0000 NSIS script. commit 0c88a5e1fc983f0bb653e26a6eac72dadf35db57 Author: Adam Dickmeiss Date: Wed Mar 13 11:47:23 2002 +0000 *** empty log message *** commit 09abca5ee8cb11137decdfa7d10b822173ad5fe1 Author: Adam Dickmeiss Date: Wed Mar 6 01:38:51 2002 +0000 Add yaz-date.h again commit 3baa4049b64103161bfc03360cfd61683faacd22 Author: Adam Dickmeiss Date: Wed Mar 6 01:22:41 2002 +0000 help for individual commands commit 903a4639c844273b73984ab9909835858d756b39 Author: Adam Dickmeiss Date: Wed Mar 6 01:21:59 2002 +0000 Docbook 4.1.2. commit b3a9e58543972f70ed7729d8aee2dab0814b023d Author: Adam Dickmeiss Date: Wed Mar 6 01:21:38 2002 +0000 Fix win version. commit ea5dd493ff58ce3460bd38560f35c7a1e7913fc4 Author: Mike Taylor Date: Tue Mar 5 12:45:48 2002 +0000 Add trivial support for implementation_id specified by backend. commit 6016e05970b4b20968c9750b6612e2db2c85d21e Author: Adam Dickmeiss Date: Thu Feb 28 14:28:40 2002 +0000 MARC dump utility prints either line mode or XML commit 08e514143cd7d16db15c1c3d4d15d687f561c047 Author: Adam Dickmeiss Date: Thu Feb 28 13:21:16 2002 +0000 MARC to XML conversion commit a97dab98e81128f07806d68b6891dbf65c732ede Author: Adam Dickmeiss Date: Sun Feb 24 12:24:40 2002 +0000 Removed C++ comment and empty statements/declarations commit 51d28a42486be5dd8bef3e09097d40eeacc94377 Author: Adam Dickmeiss Date: Sun Feb 24 12:23:43 2002 +0000 Fixed a few entities commit 7d1177ec1279066b5a3f12d49719344a377cf65d Author: Adam Dickmeiss Date: Wed Feb 20 14:52:39 2002 +0000 More info about decoding bug. commit 64e3a0e47be43804790df096797f55b4f0aa1d55 Author: Adam Dickmeiss Date: Wed Feb 20 14:47:05 2002 +0000 --disable-memdebug works commit 6874b8022eafb0d96fb45488db1dd01f81fa0a74 Author: Adam Dickmeiss Date: Wed Feb 20 14:42:30 2002 +0000 Fixed BER decoding of OPTIONAL CHOICE commit 797d7682876245f74600966fd1fee224cde354f2 Author: Adam Dickmeiss Date: Wed Feb 20 14:42:04 2002 +0000 Added--enable-memdebug commit 5bbfeaca272b9e5f384c2677893a249fa3461b0e Author: Adam Dickmeiss Date: Wed Feb 20 14:41:19 2002 +0000 Using printf instead of putchar commit 70c49c4cc7bd32eeaed7b88a82f43d50ee28ff20 Author: Adam Dickmeiss Date: Wed Feb 20 14:40:42 2002 +0000 Use printf instead of putchar commit 840a4ec014e70059d147b4ded3548df191c79687 Author: Adam Dickmeiss Date: Tue Feb 19 20:02:40 2002 +0000 Ignore SIGPIPE on systems that cannot prevent signal on send (Solaris) commit a92a7ff2538ad0d9e7b85edf860f2e6cd0a9bed4 Author: Adam Dickmeiss Date: Mon Feb 18 12:57:03 2002 +0000 No MARC decode of MAB (Stefan Lohrum) commit 8c45d04ab481f1dfa7527b88c5c56b291d9525f6 Author: Adam Dickmeiss Date: Mon Feb 18 12:54:02 2002 +0000 Avoid MARC decoding of MAB. commit 7ac6d7c142bea56f87d13f6bcb2d5adf7593691f Author: Adam Dickmeiss Date: Tue Feb 12 21:12:39 2002 +0000 Client prints new init options commit bd805d259bd25686f0e7d4a4bbe4b0f084cff805 Author: Adam Dickmeiss Date: Tue Feb 12 21:11:49 2002 +0000 Fixes for C++ reserved words commit 5c1c250634b4e4637f6942820e792d8d43031ba2 Author: Adam Dickmeiss Date: Tue Feb 12 15:59:12 2002 +0000 added z-charneg.obj commit c34d71d35aceed27cf7e30e6b329a235b48b9ccd Author: Adam Dickmeiss Date: Mon Feb 11 23:25:26 2002 +0000 Rustam's patch commit 8f15e8046e0de12e8083ba941c60f854559cb6c3 Author: Adam Dickmeiss Date: Mon Feb 4 21:05:28 2002 +0000 About Jacobs new commands commit 45a49b20c100086a32c50a0b2fa2feb0349a5033 Author: Adam Dickmeiss Date: Mon Feb 4 21:04:56 2002 +0000 It's 2002 commit 24c726523c505a153e2699fb67433ed14e098bf8 Author: Adam Dickmeiss Date: Sun Feb 3 09:04:55 2002 +0000 Added tabcomplete.h to SOURCES commit cb155b985e5e12149885c5ac8c725cbfd3eff3bc Author: Adam Dickmeiss Date: Sun Feb 3 08:44:48 2002 +0000 Release info. commit f38ccae4f7469843c30a7e742990ff8c51d2fd14 Author: Adam Dickmeiss Date: Fri Feb 1 23:59:49 2002 +0000 Fix memory leak. Disable readline for non-tty commit ad66342a43af360062a0ab12b351676828055b35 Author: Adam Dickmeiss Date: Fri Feb 1 14:59:22 2002 +0000 Changes. commit 8e8cb340836e3ffd48d464755903f6795754a226 Author: Adam Dickmeiss Date: Fri Feb 1 14:50:29 2002 +0000 MARC fix for Danmarc. commit 7401a51ed865b1dcdf5905b2bc6c793dc023416e Author: Adam Dickmeiss Date: Wed Jan 30 22:02:03 2002 +0000 WIN32 updates for YAZ client. commit febe52bd5496c1eb81b322499206f7bc43a76b5b Author: Adam Dickmeiss Date: Wed Jan 30 16:58:46 2002 +0000 Changes. commit c142c150b731e1dde2a1aef89fb3b326ea88cace Author: Adam Dickmeiss Date: Wed Jan 30 14:51:45 2002 +0000 YAZ client features: Command completion and new commands: push_command, set_apdufile, set_marcdump, set_cclfields, register_oid. CCVS: ---------------------------------------------------------------------- commit 2984a4a74dbbe7aaf4f07788ae4785041cf6004a Author: ja7 Date: Tue Jan 29 20:17:41 2002 +0000 Changed to flush apdu and marc log files a apdu is recived. Changed to remove blanks at end of commandline. Added source of $HOME/.yazclientrc and ./yazclientrc on startup added the folowing commands push_command - adds the rest of the line to set_apdufile - change apdu logfile from commandline set_marcdump - change marcdump file form commandline set_cclfields - change Ccl2rpn config file register_oid - regristrate a private oid Cleandup the tabcompletion and when it compleates on filenames. added completions for the follwing commands push_command format schema attributeset querytype new pr. command completion is placed in tabcomplete.[ch] Current problems: - the tabcompleation code is leaking - not mutch bot leaking. Added emacs local versiables comment for tabs config to client.c commit 506058d7a9f17fcc88f899d92476fe59cc09bdfb Author: Adam Dickmeiss Date: Tue Jan 29 13:47:33 2002 +0000 New call oid_trav. commit 08e079756cdb1cd5da5779e1833b6065d07292d3 Author: Adam Dickmeiss Date: Mon Jan 28 09:27:48 2002 +0000 ZOOM_record_get returns const char pointer instead of void. C++ compile. commit e0189c067378b23b5bd64b60c9b2f326f860a66f Author: Adam Dickmeiss Date: Mon Jan 28 09:26:42 2002 +0000 SR protocol no longer supported. commit 524904b45367ae17d287704bdbbe0744866fdd23 Author: Adam Dickmeiss Date: Mon Jan 28 09:26:14 2002 +0000 C++ compile. commit 5754b092c42f45eeac52fb1223e51e2a11c92653 Author: Adam Dickmeiss Date: Mon Jan 28 09:25:38 2002 +0000 IdPass authentication. commit f347eed7eaf5fc499d7a56d20084184ebce4aa9e Author: Adam Dickmeiss Date: Mon Jan 28 09:25:08 2002 +0000 Added documentation about source (.) and system (!) commands. commit 941802d34a3752e3ce2c96f1d4df2fb1a51591c1 Author: Adam Dickmeiss Date: Sat Jan 26 20:58:11 2002 +0000 More changes. CHCVS: ---------------------------------------------------------------------- commit 8e5a0692fb8d5d4d852eeb9782848d87ad25bfde Author: Adam Dickmeiss Date: Sat Jan 26 20:50:59 2002 +0000 Fix raw attribute sets (bug introduced by previous commit). commit fde978ee5097a46b9a162dcff3b4b15d24c8c82f Author: Adam Dickmeiss Date: Sat Jan 26 19:20:25 2002 +0000 Function data1_pr_tree prints XML attributes. commit 3ac26d1524a5f5988adfa2f40c00a0d0e3094978 Author: Adam Dickmeiss Date: Fri Jan 25 13:38:00 2002 +0000 Added Hans van Dalen. commit 505e0b7b02818b70cca8f1e911348a0da49ebdd0 Author: Adam Dickmeiss Date: Thu Jan 24 19:33:09 2002 +0000 Fix memory leak for MARC record management. commit 57a4650104210f5e0bd9b6e0dbde0690000c1dc1 Author: Adam Dickmeiss Date: Wed Jan 23 22:40:36 2002 +0000 Retrieval of post script files. -k option for client. commit 16bbe562b92ceb5129c779a2d772c068d6de028f Author: Adam Dickmeiss Date: Wed Jan 23 21:13:30 2002 +0000 More fixes for scan. Non-zero stepSize handled. OID's fixes. commit 05c2cf51484b104fe8cb8211b27b4d257b7865b8 Author: Adam Dickmeiss Date: Wed Jan 23 20:25:42 2002 +0000 Function p_query_rpn returns 0 for unknown attribute set. commit 5c08a4b4de3ef50d6842d5604a34238e200f7716 Author: Adam Dickmeiss Date: Wed Jan 23 20:22:49 2002 +0000 Name "GILS" is an attribute set (again). commit caaf64e73cf587d0e3092b67d5a647f3477ff970 Author: Adam Dickmeiss Date: Tue Jan 22 10:56:22 2002 +0000 Added Shigeru Ishida. commit a57b3c893b5eac42f8351f39331c7188e3abcd99 Author: Adam Dickmeiss Date: Tue Jan 22 10:54:46 2002 +0000 MARC decode fix. Attribute set fix for scan in server. Prox logging. commit d83cfde85ccff3bfb2d45515516c9c15bc785ebb Author: Adam Dickmeiss Date: Mon Jan 21 21:50:32 2002 +0000 SSL/COMSTACK updates. cs_rcvconnect completes SSL handshake. commit d6a829eb574e632408252cca4a65b8e7ff46e0fe Author: Adam Dickmeiss Date: Mon Jan 21 12:54:06 2002 +0000 More example code to handle Extended Services Update. commit ddc774841cef996601b73943f2bccada563af0b9 Author: Adam Dickmeiss Date: Thu Jan 17 23:22:40 2002 +0000 More (dummy) response for Item Order. commit 55003dbfec0492fabba2dcfaffc7a4c698742f98 Author: Adam Dickmeiss Date: Thu Jan 17 21:04:43 2002 +0000 Added check for fnmatch.h. commit 1728b7ac3f56d5dee9983d55a928a5609f811abd Author: Adam Dickmeiss Date: Thu Jan 17 21:04:24 2002 +0000 Reports Database unavailable unless "Default" is specified. commit 73696559c68178180ea533cd501fbdad3a7ff76e Author: Adam Dickmeiss Date: Thu Jan 17 21:03:36 2002 +0000 More diagnostics in log. commit b51db7b9db7ca8f8871f91f90683cd03c88bb4ea Author: Adam Dickmeiss Date: Fri Jan 11 20:26:11 2002 +0000 Option --with-openssl now works when directory is specified. commit 45a927f17e07369aa55e6c4971429e369eb2d103 Author: Adam Dickmeiss Date: Fri Jan 11 20:17:03 2002 +0000 Towards 1.8.5. Option -u for YAZ client. commit dc2ce7c4eed571234ed4f155834643f0c452b2ce Author: Adam Dickmeiss Date: Fri Jan 11 20:16:47 2002 +0000 YAZ client documenation updates. commit 1c990926c6fddba74f38f4c2bcd701d1994a5e1b Author: Adam Dickmeiss Date: Wed Jan 9 12:44:31 2002 +0000 ZOOM fix: fatal errors aren't reset. commit 4e8503c8c711511071c175bffc064c34bcbccfc3 Author: Adam Dickmeiss Date: Wed Jan 9 11:03:41 2002 +0000 ZOOM_record_get returns ISO2709 buffer when "raw" is given. commit 27f0a94af679e84cc738dbe2fa81f815025c3dbc Author: Adam Dickmeiss Date: Thu Jan 3 23:14:09 2002 +0000 Fix date. commit 9b9450232c6edcb5c34097bce758eca96ecc8b3c Author: Adam Dickmeiss Date: Thu Jan 3 22:44:17 2002 +0000 Date change. commit 394e5e325d9f2a4f5189aac7628cbb672118fb46 Author: Adam Dickmeiss Date: Thu Jan 3 22:41:18 2002 +0000 Minor. commit c09e535f7e2e835d4cfbe7833708656f200cfb3d Author: Adam Dickmeiss Date: Thu Jan 3 22:38:35 2002 +0000 Spell fix. commit cd8a27308e5bb886f561b517d091437c7afbf53c Author: Adam Dickmeiss Date: Thu Jan 3 12:18:37 2002 +0000 More options handling for scan. commit 0a34c1d78a7db63a70bbd43ee8efa93ef75488bc Author: Adam Dickmeiss Date: Thu Jan 3 12:09:01 2002 +0000 New copyright. commit 09364dc78e750fb5507a3586a8c1a4d0a25e6315 Author: Adam Dickmeiss Date: Thu Jan 3 10:23:46 2002 +0000 WIN32 fixes. commit 526ab3aa282b1e732814846655eefc199f3f5106 Author: Adam Dickmeiss Date: Thu Jan 3 10:23:33 2002 +0000 Using _vsnprintf on WIN32. commit 3599bbc013ec757862d8a2d6e62aa6a432ba4514 Author: Adam Dickmeiss Date: Wed Jan 2 10:30:25 2002 +0000 More on scansets. commit eab4041057c94f4fd3feffd76c1f987ca67da1c3 Author: Adam Dickmeiss Date: Sun Dec 30 22:21:11 2001 +0000 Scan for ZOOM. commit bd67bd91a1ef6340ba08db039aa04b6fc424fc8d Author: Adam Dickmeiss Date: Fri Nov 30 08:24:05 2001 +0000 New ZOOM option schema. commit 05238a71314c7a256a2c1c7c20d74fb75d8f7e6a Author: Adam Dickmeiss Date: Wed Nov 28 23:00:19 2001 +0000 ZOOM Task structure includes start and count for retrieval. commit cb9bad819f13e44d7af6753bfa1bc8274ca37b9b Author: Adam Dickmeiss Date: Tue Nov 27 22:38:50 2001 +0000 CCL qualifier aliases (use OR for more than one qualifier). commit 590c128319e6987f82f3e798b12173c5ecf197b4 Author: Adam Dickmeiss Date: Tue Nov 27 22:12:24 2001 +0000 Fix and remove OSI reference. commit d8bf5f7a48d0abb1db4bcb6ffceb74f2df8eae76 Author: Adam Dickmeiss Date: Thu Nov 22 11:04:48 2001 +0000 Fixed dup display of records (bug introduced by previous commit). commit c5634aa19153b7b36e6de5a8e5b4536d69b2b7a1 Author: Adam Dickmeiss Date: Thu Nov 22 09:45:31 2001 +0000 Implemented named result sets handling for ZOOM. commit 1cee858bb7ac87aa71e865acb0cdfd64646efa0b Author: Adam Dickmeiss Date: Thu Nov 22 09:45:03 2001 +0000 More verbose server. commit 398b30f86d12b3b14c7d389325164ee2df7836b9 Author: Adam Dickmeiss Date: Wed Nov 21 11:13:13 2001 +0000 New client commands: . (to source YAZ client commands) and ! (to execute shell command). commit c76c4dad2e55e50b26d35855e3f782f2c038d3a5 Author: Adam Dickmeiss Date: Tue Nov 20 10:52:07 2001 +0000 Fixed changes. commit d7c297ae11eae74257636c143bb7e02041c00f59 Author: Adam Dickmeiss Date: Tue Nov 20 09:25:45 2001 +0000 Debian build script part of make dist. commit 598c8178dc444f596d5bd6111b4fed52745cad5e Author: Adam Dickmeiss Date: Mon Nov 19 20:43:39 2001 +0000 No "copy" of source for thread/malloc libraries. commit 981369ab5234a8cb305042db7ad61f1e277900b5 Author: Adam Dickmeiss Date: Mon Nov 19 14:06:11 2001 +0000 More about authentication. Remove SR references. commit 2725f6883ebf5be89639b28969b05b4d203da802 Author: Adam Dickmeiss Date: Mon Nov 19 09:17:12 2001 +0000 changes. commit 7f0e24a73392b1288b117ee46482f58f471ea094 Author: Adam Dickmeiss Date: Mon Nov 19 09:16:37 2001 +0000 Using AM_CFLAGS instead of CFLAGS. 1.8.3 closer. commit 90ed644b177c035f174b3aad8be47bf155940d17 Author: Adam Dickmeiss Date: Sun Nov 18 23:17:45 2001 +0000 YAZ client uses setnames only if target supports it. commit 13671e7cc0f3dd4e4b02f94d64a50778c5696ba6 Author: Adam Dickmeiss Date: Sun Nov 18 21:14:22 2001 +0000 Prefix ZOOM_ instead of Z3950_. Documentation updates. commit b340923765c14d2ba050a171bb557474044d7e6a Author: Adam Dickmeiss Date: Sun Nov 18 21:05:13 2001 +0000 nmem revert fix: Set nmem_init_flag=0. commit c82a7ebce851c96c8c769c2ec4f4b2121a446e19 Author: Adam Dickmeiss Date: Fri Nov 16 10:18:20 2001 +0000 Fix: Remove new-lines from commands in ZOOM shell. commit fd2f1538cdb20385c2c267d318c59d567eb3d242 Author: Adam Dickmeiss Date: Fri Nov 16 09:52:39 2001 +0000 Removed Z3950_connection_host. commit 15f2d80b134fa41e213f6328440d1a25f80efd97 Author: Adam Dickmeiss Date: Thu Nov 15 21:59:40 2001 +0000 Client prevents "present request out of range". commit 02da040a0671d09dfe19790a53ff6408740e7cde Author: Adam Dickmeiss Date: Thu Nov 15 21:58:50 2001 +0000 More about ZOOM options. commit 5a7dc8a6745f24127f408db53cdc613fb6a41b1f Author: Adam Dickmeiss Date: Thu Nov 15 21:44:48 2001 +0000 Removed log .. commit 366e11a6ab3c8cb8d12558ff1d76566c5ebca80e Author: Adam Dickmeiss Date: Thu Nov 15 13:16:02 2001 +0000 ZOOM: Separate get/set for dealing with options. commit 806d40e9fc4341a0366dac49291f7cb5ca79809f Author: Adam Dickmeiss Date: Thu Nov 15 09:16:37 2001 +0000 More thanks. commit d00666d5391066b1acba398090170d3766ec7e4f Author: Adam Dickmeiss Date: Thu Nov 15 08:58:28 2001 +0000 ZOOM: record objects "owned" by result sets. Added Z3950_record_dup. commit fd4adcc80d442f84c6a1894e890b1b6ccd02615e Author: Adam Dickmeiss Date: Tue Nov 13 23:00:42 2001 +0000 Separate malloc debug library. Removal of ASN_COMPILED-#ifdefs. commit 78942f568d83ea621661bfcd2d3f25eee3d316a1 Author: Adam Dickmeiss Date: Tue Nov 13 22:57:03 2001 +0000 More work on event queues. *_option returns new value (not previous). commit 22af523e3a7da990757ab1edab65ac258eacefbd Author: Adam Dickmeiss Date: Mon Nov 12 12:04:49 2001 +0000 1.8.2. commit 0d3b35dc83e1838c199ea9d7f6e670de50df6bdb Author: Adam Dickmeiss Date: Mon Nov 12 11:55:06 2001 +0000 Fixed html dependancy. commit 2ab206244c2469005c12b5c071e360fbb6a1fb9c Author: Adam Dickmeiss Date: Mon Nov 12 11:27:21 2001 +0000 Towards 1.8.2. commit 6b7bf6ee33bf997eff9747550f28fbc27a7020aa Author: Adam Dickmeiss Date: Mon Nov 12 11:24:45 2001 +0000 Ignore comma when dealing with and-lists. commit 0f5de851295231cacc15f91b670fa01fbf22b6fe Author: Adam Dickmeiss Date: Mon Nov 12 10:41:36 2001 +0000 Minor. commit 49218d3cab22778f7460f1099d0534e057be629f Author: Adam Dickmeiss Date: Sun Nov 11 22:25:25 2001 +0000 Protocol behavior sections. record_get raw returning Z External *. commit 79e745223e808aef83c885d94a7a2e58ee8e4ba0 Author: Adam Dickmeiss Date: Thu Nov 8 12:36:15 2001 +0000 More installation info. commit 67e7a7a13ff1e787b9e5cfe84494dfd446c1bcb9 Author: Adam Dickmeiss Date: Tue Nov 6 17:05:19 2001 +0000 ZOOM changes. commit 733dc40da2770d3ecb98d2d2cdc66b05a89bb390 Author: Adam Dickmeiss Date: Tue Nov 6 17:04:32 2001 +0000 Mentions SSL and cs_create_host. Remove stuff about XTImOSI. commit db9768c3988f9536c898250880c13923a2dde32d Author: Adam Dickmeiss Date: Tue Nov 6 17:03:50 2001 +0000 More verbose. commit 3bbbe0d3054648b6fb58eb290632442d036087d4 Author: Adam Dickmeiss Date: Tue Nov 6 17:03:33 2001 +0000 Updated credits list. commit 8af7fd342d3c905ddd1e6be521242d881510ba14 Author: Adam Dickmeiss Date: Tue Nov 6 17:01:25 2001 +0000 System call getprotobyname no longer used. commit f0be6a8011eef48bacd02a6565f62a1ab3355dab Author: Adam Dickmeiss Date: Thu Nov 1 14:30:44 2001 +0000 Added Credits Appendix. commit f999e4ffddd7002f1044e9c8d61319f7b33af3da Author: Adam Dickmeiss Date: Mon Oct 29 14:51:14 2001 +0000 No rule to make yaz.tex. commit 23348031ba9c7b97bf22b76de0c41c48e97a7180 Author: Adam Dickmeiss Date: Mon Oct 29 14:50:40 2001 +0000 Minor change. commit 0305212384e19d2419d62cba83d5b83108665d17 Author: Adam Dickmeiss Date: Mon Oct 29 14:05:30 2001 +0000 Fix xml.dcl in Makefile commit 2c8ec8c2d1dd7dd698e406ff99e1b7b439c4fa9b Author: Adam Dickmeiss Date: Mon Oct 29 13:57:31 2001 +0000 Added *.dsl files for DEST_DIR. commit b24d2d58cd28380a1969780e5e2d7c4f0719f81c Author: Adam Dickmeiss Date: Mon Oct 29 09:17:19 2001 +0000 New function marc_display_exl - used by YAZ client. Server returns bad record on position 98 (for testing). commit dc8023116d26e0999aa8a2cc4372baae55f28adb Author: Adam Dickmeiss Date: Mon Oct 29 09:16:27 2001 +0000 Added comments to better track OID values. commit dfc522984de40e8528dccad20ee1da31021cc578 Author: Adam Dickmeiss Date: Sun Oct 28 23:44:59 2001 +0000 New changelog. commit 8ac07324aa0d1da687ce2d0a2d734e783c2e9144 Author: Adam Dickmeiss Date: Sun Oct 28 23:28:26 2001 +0000 Enable CCL-to-RPN for YAZ client on WIN32. commit e46cd1b274c0f3328ebb091fa61fb41352638778 Author: Adam Dickmeiss Date: Sun Oct 28 23:10:02 2001 +0000 Fix local attribute setting for pquery. commit bd7e251dac1b07c54884d26295f66b90cfb23131 Author: Adam Dickmeiss Date: Fri Oct 26 20:13:44 2001 +0000 Indentation. Variable sgml-local-catalogs set to nil. commit 31c471c3fb3316356e724c5b382f143acd23520c Author: Adam Dickmeiss Date: Thu Oct 25 13:04:01 2001 +0000 Changes to CHANGELOG. commit 12b2b42ab2da50d46f17354deaafaff24e683230 Author: Adam Dickmeiss Date: Thu Oct 25 12:46:07 2001 +0000 codecs not built as they should. commit 67edeb0f006c8ef39dd0f15934abf18e39067bc1 Author: Adam Dickmeiss Date: Thu Oct 25 12:33:06 2001 +0000 WIN version 1.8.0.0. commit fe569a8399e6072e18d7059b8b5950df32cf014e Author: Adam Dickmeiss Date: Thu Oct 25 12:29:35 2001 +0000 Minor changes. commit 04ea98dee3c25b71e8ba74b2446f6b55d9e54785 Author: Adam Dickmeiss Date: Thu Oct 25 12:28:07 2001 +0000 Smaller README. commit 49957b09c9f08b4a36c8e83babce44deac9db462 Author: Adam Dickmeiss Date: Thu Oct 25 12:00:41 2001 +0000 Version 1.8. commit 71a35a24552103dbfc1258085c706e1d6fcad180 Author: Adam Dickmeiss Date: Thu Oct 25 11:55:56 2001 +0000 Renamed ASN.1 Module to Z39.50 ASN.1 module. commit 73ecbfab9603fb29e87e9a01a446aa81a22f21d7 Author: Adam Dickmeiss Date: Thu Oct 25 10:45:08 2001 +0000 Fixed make clean. commit 0a65a91563f87ccc3ee67a6eb509d8d4754e07d1 Author: Adam Dickmeiss Date: Wed Oct 24 21:35:46 2001 +0000 Added include of string.h. commit 7248b20b9e675788555c25d58d807bd8313b8e6d Author: Adam Dickmeiss Date: Wed Oct 24 21:30:47 2001 +0000 More info about UNIX/WIN32 installation. commit f7471d960fb2671c714bdfcd74dae39ce8112652 Author: Sebastian Hammer Date: Wed Oct 24 21:24:38 2001 +0000 Various changes commit bb96685811b1601d9453b3ecfb67368cb37e7afb Author: Adam Dickmeiss Date: Wed Oct 24 20:33:29 2001 +0000 Fix. commit 717e787416d8f78f327fd6d458c82e8a4829c405 Author: Adam Dickmeiss Date: Wed Oct 24 20:27:00 2001 +0000 Fix for DIST files. commit 1391c68b801ea245c6734743cd7dcad81526577f Author: Adam Dickmeiss Date: Wed Oct 24 20:25:07 2001 +0000 Added unix.html. commit ab0fd2f75e554d1c9c0e722abf073f9840f7739b Author: Adam Dickmeiss Date: Wed Oct 24 20:12:36 2001 +0000 Typos. Better introduction, really. Other, minor, updates. commit 3b251ac2d9cbaa140d55abc8e263b11b69357365 Author: Adam Dickmeiss Date: Wed Oct 24 20:11:46 2001 +0000 Removed SR OID's. commit 30dc1fd726606bff28c2f3884f3f294c42550008 Author: Adam Dickmeiss Date: Wed Oct 24 12:50:44 2001 +0000 Typos. Configure options. nmem_init/nmem_exit deal.. commit bc66c2a11aa31c16f46c49100e99dc9b7e940faf Author: Adam Dickmeiss Date: Wed Oct 24 12:24:43 2001 +0000 WIN32 updates: ZOOM runs, nmem_init/nmem_exit called in DllMain. commit 33c05384cfbca55da4ff97e5b2047b16596c72f7 Author: Adam Dickmeiss Date: Wed Oct 24 09:27:59 2001 +0000 More ZOOM documentation. XML Docbook is now part of "make dist". commit e1f879d00e75be3b5b9f3ecc22b34cc0c1c61aec Author: Adam Dickmeiss Date: Tue Oct 23 22:44:32 2001 +0000 Minor change again. commit 304184190fe6812bc788d9eebbd39934eada9ca3 Author: Adam Dickmeiss Date: Tue Oct 23 22:39:53 2001 +0000 Minor corrections. commit 69bcd68523a9a8da083faef16887100369152673 Author: Adam Dickmeiss Date: Tue Oct 23 21:00:19 2001 +0000 Old Z39.50 codecs gone. Added ZOOM. WRBUF MARC display util. commit b638e7e4efc850ee6446b14fa45c66690377ccf2 Author: Adam Dickmeiss Date: Mon Oct 22 16:00:04 2001 +0000 Renamed states for COMSTACKs to avoid confusion with events. commit 670615227704f9ab1dc20c8bdf3db8f09b9600ea Author: Adam Dickmeiss Date: Mon Oct 22 14:03:42 2001 +0000 Added stuff about cs_look / cs_rcvconnect. commit 4e687307f10bd595d8af05c022871d1875c8c463 Author: Adam Dickmeiss Date: Mon Oct 22 13:57:24 2001 +0000 Implemented cs_rcvconnect and cs_look as described in the documentation. commit 1252daa48c1303465e00fccb7f7287d2d6b179ed Author: Adam Dickmeiss Date: Mon Oct 15 20:37:08 2001 +0000 Fix for --libs when pthread was selected on OpenBSD. commit 9e1594c51c65fa993e9d69928c0ecabee8c2b862 Author: Adam Dickmeiss Date: Mon Oct 15 19:36:48 2001 +0000 New function marc_display_wrbuf. commit 38d5a1c71a407c5e60c1bc650ed4edeae88a2efa Author: Adam Dickmeiss Date: Fri Oct 12 21:49:26 2001 +0000 For accept/recv/send check for EAGAIN if it's differs from EWOULDBLOCK. commit 91251107b8bed866a3adcd827f9298b823c03d21 Author: Adam Dickmeiss Date: Tue Oct 9 09:17:17 2001 +0000 WIN version 1.7.0.11. commit f03238c89d03779b3d5731ffdcce0bd7c3e099bc Author: Adam Dickmeiss Date: Sat Oct 6 08:17:34 2001 +0000 Changes. commit 94018089d9c75e5f787430892273cfb776ad374a Author: Adam Dickmeiss Date: Sat Oct 6 08:16:30 2001 +0000 Configure detects POSIX Threads on OpenBSD (and others, perhaps). commit b81a371f23d16b616e6f7355ec7345cf8a482511 Author: Adam Dickmeiss Date: Fri Oct 5 14:43:22 2001 +0000 Implementation name GFS/YAZ instead of GFS. commit 9158f8e318f25cb16171433742950236cae96d36 Author: Adam Dickmeiss Date: Fri Oct 5 13:55:17 2001 +0000 Added defines YAZ_GNU_THREADS, YAZ_POSIX_THREADS in code and yaz-config commit 281a02714c611fed96547b043fd434a57c43c68a Author: Adam Dickmeiss Date: Fri Oct 5 08:17:08 2001 +0000 Updated WIN version. commit c9b1ffcb5d47aa1cd0c0812c55bd1a3301cf834c Author: Adam Dickmeiss Date: Thu Oct 4 00:37:58 2001 +0000 Fixes for GNU threads (not working yet). commit 9eeffdf14fddcf59618fdd7c8c16e4cc32429b4d Author: Adam Dickmeiss Date: Wed Oct 3 23:55:18 2001 +0000 GNU threads support. commit bd6a2e5050dfc5ea460202106fe396c584c31838 Author: Adam Dickmeiss Date: Wed Oct 3 23:54:41 2001 +0000 Fixes for numeric ranges (date=1980-1990). commit ab6f8762c003a867d0e1eb8ac5686a99de47976a Author: Adam Dickmeiss Date: Sun Sep 30 20:15:49 2001 +0000 Bug fix: reading bad tag units could crash the library (espec). commit ce8f5caa5af3f70ce86985b384c0c8be156437b9 Author: Adam Dickmeiss Date: Sun Sep 30 20:10:28 2001 +0000 TRACE_MALLOC=1. commit c227960392ad224178f1ab16f02207717dbe3d1b Author: Adam Dickmeiss Date: Fri Sep 28 14:50:23 2001 +0000 Simpleelement allows upper case (as well as lower case). commit e9410a4de52da8f1ba857f3ebaba52349c331077 Author: Adam Dickmeiss Date: Fri Sep 28 10:42:28 2001 +0000 Bug fix: yaz-config print yazpthread when threads are unavailable. commit aa5f63565232666005bef5c83f2d500d8ce9dfb4 Author: Adam Dickmeiss Date: Thu Sep 27 12:09:18 2001 +0000 Function nmem_exit calls oid_exit (when reference is 0). commit 0de7ee46a77de43f2901103e317815e153efae62 Author: Adam Dickmeiss Date: Wed Sep 26 07:37:58 2001 +0000 Update debian changelog. commit abfaf391015e3036af3d56859511bb7daaa6fe23 Author: Adam Dickmeiss Date: Tue Sep 25 07:35:37 2001 +0000 New Z39.50 OID utilities. commit c7dfadc3347abda902e15f79bfd513e1d48cfbba Author: Adam Dickmeiss Date: Mon Sep 24 21:51:55 2001 +0000 New Z39.50 OID utilities: yaz_oidval_to_z3950oid, yaz_str_to_z3950oid and yaz_z3950oid_to_str. commit c5f9b67c889e65446bcbf727bef3705229c3fd7f Author: Adam Dickmeiss Date: Mon Sep 24 21:48:46 2001 +0000 Setting v1,v2,search and present options for init request. commit 12c55e7b4114d0263f90b8eb20ef67dcaf82d971 Author: Adam Dickmeiss Date: Mon Sep 24 21:47:30 2001 +0000 Added Morten Garkier Hendriksens Debian build rules. commit 5ce37c7fbfad917db2828ab6898d438dd7fd8e17 Author: Adam Dickmeiss Date: Wed Sep 19 10:19:07 2001 +0000 Z_SortCase_caseInsensitive was set to wrong value. commit 767ff54e1425e6be8208fe3fee6e7e1b9cadcfb6 Author: Adam Dickmeiss Date: Fri Sep 14 10:51:58 2001 +0000 WIN version 1.7.0.8. commit aa2763b1a0851b94b97c79c7e3e6c209097dcbbd Author: Adam Dickmeiss Date: Fri Sep 14 10:49:51 2001 +0000 Bug fix: file wasn't closed in ccl_qual_fname. commit 90f5d8f6431d64bceb9fb8d2af99445313119e48 Author: Adam Dickmeiss Date: Tue Sep 11 12:44:22 2001 +0000 Fix. commit 3fa2784b75e5afa82db5f4cbc1403321894e1f27 Author: Adam Dickmeiss Date: Tue Sep 11 12:43:40 2001 +0000 Extra new-line for yaz-date.h. commit 79890eac643c81189343316b06f2d14445cbd023 Author: Adam Dickmeiss Date: Thu Aug 23 09:12:09 2001 +0000 Setting relative width for ASN/PDU tables. commit 115041d41421c262942dd2d97d3828a1e3281ad1 Author: Adam Dickmeiss Date: Thu Aug 23 09:02:46 2001 +0000 WIN32 fixes: Socket not re-used for bind. yaz_log logs WIN32 error message. commit ea85612969e1b81276985c870ce800c5f4ffe189 Author: Adam Dickmeiss Date: Tue Aug 14 12:34:01 2001 +0000 Updated resoruce for YAZ version. commit dfdf794d56520037a623d858436ebfe7598a3113 Author: Adam Dickmeiss Date: Tue Aug 14 12:05:58 2001 +0000 Added sortspec. commit 62e8f19eea1de5311a51ca884305feed38757e81 Author: Adam Dickmeiss Date: Tue Aug 14 11:50:07 2001 +0000 Index Data web stylesheet works. commit 3b3deb4d093d747360a5eb0e02c6b4e9c8a89b84 Author: Adam Dickmeiss Date: Mon Aug 13 09:42:54 2001 +0000 Spell fixes. commit a25b89e9d30e6de573f20d5b591068d49d639a5d Author: Adam Dickmeiss Date: Fri Aug 10 12:50:40 2001 +0000 Fixed bug where sort flags a and d was reversed. commit 109b6408fbe38ca68651a23b59a9ac875e7b8944 Author: Adam Dickmeiss Date: Wed Aug 8 19:35:06 2001 +0000 Implemented utility yaz_sort_spec. commit fe4182bf1ca7bebcb3172cde916d4467c2154e7b Author: Adam Dickmeiss Date: Wed Aug 8 19:33:21 2001 +0000 Added chapter about YAZ client. commit b26c2480fcd2d6c93484372b1b748c5ac54f2c99 Author: Adam Dickmeiss Date: Mon Aug 6 20:22:23 2001 +0000 Client doesn't set VAL_PROXY otherinfo unless -p is specified. commit 3227202c561b3189378cba8318c7610aeae1421a Author: Adam Dickmeiss Date: Fri Jul 20 21:34:36 2001 +0000 Fixed minor typos. Converted PDU tables. commit 3d18b35078096b9fd1feb8e2d6fd7e9e48755ad5 Author: Adam Dickmeiss Date: Fri Jul 20 21:33:45 2001 +0000 Cleanup of stylesheets. Changed path to docbook.dsl. commit bc8b2eabc0fb24c32b0f69c67492edf454d52f7d Author: Adam Dickmeiss Date: Fri Jul 20 21:31:35 2001 +0000 Added oslash latin-1 identity (to fix the standard one). commit ce853cc4919ab346fd629e7727905d3ee6e1129f Author: Adam Dickmeiss Date: Thu Jul 19 23:29:40 2001 +0000 Emacs indent of XML-documentation. Only minor changes in contents. commit 088c938eb8a4c6e4db96603e30b3558fd3d67580 Author: Adam Dickmeiss Date: Thu Jul 19 19:51:41 2001 +0000 Added typecasts to make C++ happy. commit 53fc6ff5ab7aaf73cdf33a77ca11b2fbabf185d6 Author: Adam Dickmeiss Date: Thu Jul 19 19:49:40 2001 +0000 Fixed bug in tcpip_set_blocking. commit 8f2523329baf822bb1f71aaa262376551391553e Author: Adam Dickmeiss Date: Thu Jul 19 19:49:02 2001 +0000 Added include of string.h. commit 9e70372b2df6adc53ff9eef0bdb3a654e8975743 Author: Adam Dickmeiss Date: Thu Jul 19 19:14:53 2001 +0000 C++ compile. commit 2fb0256d3201f9b2a2b66561090b1809e67b6a65 Author: Adam Dickmeiss Date: Thu Jul 19 16:53:02 2001 +0000 More PDU tables updated. commit 1f14d2d8be1c47d9e97fdd8ec55e2e5113abe899 Author: Adam Dickmeiss Date: Thu Jul 19 12:46:57 2001 +0000 Updates to manual. Separate PHP stylesheet. commit e992383c6389f2b4d55c31d78d1c7d68a749284f Author: ja7 Date: Wed Jul 4 20:13:51 2001 +0000 Added new commend "proxy" for ysing a yaz-proxy to connect to the target Added new command line option -p for setting the proxy host commit c6ee180e89543b7c4cb21e98d5b679b65c4a51b6 Author: Adam Dickmeiss Date: Thu Jun 28 12:42:01 2001 +0000 Added prototype for ccl_qual_add_special. commit f84db68d03155813df0aa498f2962fbf8e609d46 Author: Adam Dickmeiss Date: Thu Jun 28 09:27:25 2001 +0000 Number of Extended Services Requests logged. commit 864edb36edafb2368d92f48c7f34223e91f735e4 Author: Adam Dickmeiss Date: Thu Jun 28 09:27:06 2001 +0000 Number of started sessions logged. commit a9407df0295ee7745827b2f053b3f4698857720d Author: Adam Dickmeiss Date: Tue Jun 26 14:11:27 2001 +0000 Added MUTEX functions for NMEM module (used by OID utility). commit 38a63db405b7da6bb6bf167a90b435874d2137f6 Author: Adam Dickmeiss Date: Tue Jun 26 13:03:48 2001 +0000 Bug fix: introduced by previous commit. commit 9a13337111b32d256182a4248f93ebe26e393059 Author: Adam Dickmeiss Date: Tue Jun 26 12:14:15 2001 +0000 When BER decoding a null byte is appended to the OCTET buffer. commit 834b8cc2eae2f3ebf8256cacf8cc137bcc91c038 Author: Adam Dickmeiss Date: Wed Jun 13 20:47:40 2001 +0000 When error is returned from present handler, non-surrogate diagnostic is returned in present response (and fetch handler is no longer called). commit 6e30fa2d25d57c9551106c1c2713c9da18a9f79d Author: Heikki Levanto Date: Mon Jun 11 12:54:47 2001 +0000 Displayng diags in EsResponse, even if they should not be there... commit 96714f89e8a4577ce57683d80c2c3147541e3efa Author: Adam Dickmeiss Date: Mon May 28 13:15:24 2001 +0000 Added missing file. commit 42f7dd415641c76b3c528c8dd04af1afd6a04797 Author: Adam Dickmeiss Date: Mon May 28 12:44:03 2001 +0000 Added Debian package build. commit 3ee667935c4cac82445ecd05c8ae421888dfd40f Author: Adam Dickmeiss Date: Fri May 18 11:42:03 2001 +0000 YAZ Build date for WIN32. commit 205549626352a3cc49c85b8fa055ffde318aad42 Author: Adam Dickmeiss Date: Thu May 17 14:16:15 2001 +0000 Added EXTERNAL handling for item update0 (1.0). commit d96213e7e29deb01d3f24408b557319adea3cb3d Author: Adam Dickmeiss Date: Wed May 16 07:37:39 2001 +0000 Added script cvs-date.tcl that determines last CVS change for YAZ by using output of 'cvs log'. The script generates include/yaz/yaz-date.h which defines YAZ_DATE - format YYYYMMDD. commit 1c699d71c9663164ebc26e3031d69c502886e02d Author: Adam Dickmeiss Date: Wed May 16 07:30:16 2001 +0000 Minor cosmetic changes that makes checker gcc happier. commit 27f74e96aeda8a7a5049444cf22416c4a4240d7e Author: Adam Dickmeiss Date: Wed May 16 07:27:29 2001 +0000 Reference id set for InitRequest. commit ada24b27e68c3a29b7c56147d8aedff0ebdba897 Author: Adam Dickmeiss Date: Wed May 16 07:25:59 2001 +0000 Modified oid_ent_to_oid so that if proto is general, then class is ignored (only oid value is compared). commit eb41380ef9489c53d98ceeffdc1ea8908b4303b6 Author: Adam Dickmeiss Date: Wed May 16 07:22:56 2001 +0000 YAZ CVS Date part of implementationVersion in init{request,Response}. commit 5e88d5b6fc2de30f032179e182c742de279f493e Author: Adam Dickmeiss Date: Wed May 16 07:21:36 2001 +0000 Accept any OID for record syntax. commit c1957f49e5f8c37c06ed839cde52d60108bc2e35 Author: Adam Dickmeiss Date: Wed May 9 23:31:35 2001 +0000 String attribute values for PQF. Proper C-backslash escaping for PQF. commit 15233cfdc4c7610b634b8a8643ed1609c386bcc8 Author: Adam Dickmeiss Date: Mon May 7 12:01:00 2001 +0000 Removed dup CCL lib. commit fcd3a8318a95b56fa3724d800c4e6057774e0da5 Author: ja7 Date: Sun Apr 22 12:26:17 2001 +0000 if Compiled with Command line history a open command is pushed into the command history if yaz-client is startet with a server on the command line. eg yaz-clinet tcp:server:port/database hash the commend open tcp:server:port/database in the command history on startup Added the refid set with setrefid to the update APDU commit 7057699040b614f56be178f3672b4a2b95301d5f Author: Adam Dickmeiss Date: Fri Apr 6 12:26:45 2001 +0000 Optional CCL module. Moved atoi_n to marcdisp.h from yaz-util.h. commit e02e52d1bd554b3c3c34a262dc715666fb42a223 Author: Adam Dickmeiss Date: Thu Apr 5 13:34:36 2001 +0000 Minor changes. commit 772d9a39dd0e3e139ab975d7d45d1262f5471164 Author: Adam Dickmeiss Date: Thu Apr 5 13:08:48 2001 +0000 New configure options: --enable-module. commit eff77f0655f20d0eefb8f94558c24f549d783500 Author: Adam Dickmeiss Date: Mon Apr 2 13:58:09 2001 +0000 Added this. commit e2a45cb579ee5b68950fedd2f9b8cb61591a8c28 Author: Adam Dickmeiss Date: Thu Mar 29 11:47:34 2001 +0000 WIN version 1.7.0.5. commit 09405de098947fc5f359e9bd1225b2747596b513 Author: Adam Dickmeiss Date: Tue Mar 27 23:06:21 2001 +0000 Quotes and slashes may occur within attributes. commit fb36df3c32d9023ca55f8050ea4128f42d2dfc34 Author: Adam Dickmeiss Date: Tue Mar 27 14:48:06 2001 +0000 Fixed scan for bad CCL. commit 065f7bce150c68453a8508adc61bffd15e70128a Author: Adam Dickmeiss Date: Mon Mar 26 14:42:37 2001 +0000 looking for YAZ source in srcdir/../yaz commit 8d08fd5b79e49e14ca014de8e6bed12a2cc0468d Author: Adam Dickmeiss Date: Sun Mar 25 21:55:12 2001 +0000 Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate. commit 5dd6504c984a2f87427aa0fba13a07421d1cb50b Author: Adam Dickmeiss Date: Sun Mar 25 21:54:24 2001 +0000 Update for build in any directory. commit aae3c7aae0c88261736f77459728dd1cd561d752 Author: Adam Dickmeiss Date: Fri Mar 23 13:21:53 2001 +0000 New WIN version. commit 59526fbbf2e3b54ce94b3e79e6c7fef9e4f456fb Author: Adam Dickmeiss Date: Thu Mar 22 21:23:30 2001 +0000 Directive s=pw sets structure to phrase if term includes blank(s). commit 3559c8472a802f894f84d048e0c3ae78132f68ac Author: Adam Dickmeiss Date: Thu Mar 22 16:09:43 2001 +0000 WIN version 1.7.0.3. commit 26d07328e36c41d39216d66d742d133cf7512995 Author: Adam Dickmeiss Date: Wed Mar 21 15:02:39 2001 +0000 More fixes for make where sourcedir and builddir are different. commit cfef2a68b0e7da6c2a3b47e44df9965d63156584 Author: Adam Dickmeiss Date: Wed Mar 21 12:43:36 2001 +0000 Implemented cs_create_host. Better error reporting for SSL comstack. commit 083dedcf7d9f7eac974a48dc49d5a23e284d9760 Author: Adam Dickmeiss Date: Tue Mar 20 15:58:23 2001 +0000 Improved yaz-config for build in any place. commit b1687618c7f5f40c0ac7d0192a6f129fd133e7d0 Author: Adam Dickmeiss Date: Tue Mar 20 11:22:58 2001 +0000 CCL Truncation character may be defined. commit 7e1f569f5266b46123b0174c95b7204338d55dd8 Author: Adam Dickmeiss Date: Mon Mar 19 21:30:06 2001 +0000 Added bib1 and default.bib. commit 3889f5ecf0d1c952175d010d6306f72c6c138f57 Author: ja7 Date: Sun Mar 18 20:45:39 2001 +0000 Added readline and history support to cclsh commit 3a0230d0c5f46e459efe9d12a46214e232a3039b Author: Adam Dickmeiss Date: Tue Mar 13 18:11:38 2001 +0000 Altered zget_ExtendedServicesRequest - sets waitAction to waitIfPossible. commit b9c0fc716a11606031639afe1e3ba6c420ba1035 Author: Adam Dickmeiss Date: Tue Mar 13 18:10:58 2001 +0000 Added option -c to set CCL config file. commit 49bb5732e64ef1bd772d5393450815684eac39b6 Author: Adam Dickmeiss Date: Tue Mar 13 18:10:39 2001 +0000 Updated. commit 9cae644f09ee79ffea80f800b5b037fd8e12304e Author: Adam Dickmeiss Date: Mon Mar 12 14:40:57 2001 +0000 Minor change of print of item update info. commit cb2620919f499439968dffed87671ec823da5afe Author: Adam Dickmeiss Date: Fri Mar 9 14:58:20 2001 +0000 Updated version resource. commit 0cf6aeaac483e7887e44c05fc1e0d008805ebf7b Author: Adam Dickmeiss Date: Fri Mar 9 13:31:34 2001 +0000 Updated version. commit 03c1d6e9c2c2c0bb2ee01e38d7f464a311bfe9e9 Author: Adam Dickmeiss Date: Thu Mar 8 20:18:55 2001 +0000 Added cs_set_blocking. Patch from Matthew Carey. commit da907ba05501a2050d0a70b1d1fdf22a8130589a Author: Adam Dickmeiss Date: Wed Mar 7 13:24:40 2001 +0000 Member and_not in Z_Operator is kept for backwards compatibility. Added support for definition of CCL operators in field spec file. commit 96dd068fd2057b2123ae9444fa441e4738776d87 Author: Adam Dickmeiss Date: Wed Feb 28 16:56:33 2001 +0000 Added version info for WIN32. commit d4b069b3c2525b7ae0fe3bf91c16c48d5cec100c Author: Adam Dickmeiss Date: Wed Feb 28 09:00:06 2001 +0000 Fixed problem with stack overflow for very nested records. commit 69392bd6f5e182f413fd406c598d4ae0108f166c Author: Adam Dickmeiss Date: Mon Feb 26 22:52:54 2001 +0000 Script buildconf script is quiet. commit 59fc25662cfb2144a8f9173616aa70a1da9e4f44 Author: Adam Dickmeiss Date: Wed Feb 21 23:16:49 2001 +0000 Added style sheets. commit e5324215018e129dd19734acd0e683e5af748423 Author: Adam Dickmeiss Date: Wed Feb 21 13:46:53 2001 +0000 C++ fixes. commit 84123e31b540666d168a28292c0461698841f8be Author: Adam Dickmeiss Date: Wed Feb 21 09:41:15 2001 +0000 Fixed problem with old codecs. commit 663704d5e3532c523d5401b2ce8c4d34a3d0cd17 Author: Adam Dickmeiss Date: Wed Feb 21 09:19:44 2001 +0000 Updated README and CHANGELOG. commit 13a51cad2e55f62459d7ce4b5a94ed9560105709 Author: Adam Dickmeiss Date: Wed Feb 21 09:08:37 2001 +0000 Removed this one. commit 1dc42669e01354e9bf56e306786177ffa0764781 Author: Adam Dickmeiss Date: Wed Feb 21 09:08:23 2001 +0000 Removed config.stub. commit b0ea0712dd81e2d3dd25ec14c0bb9a6ce0a51056 Author: Adam Dickmeiss Date: Wed Feb 21 09:03:34 2001 +0000 Removed Makefile.in's and libtool/automake files that are auto-created with the buildconf.sh script. commit 9f6bbd483ea92b4a5ae114a36bfebd942e138460 Author: Adam Dickmeiss Date: Tue Feb 20 11:25:32 2001 +0000 Added ill_get_APDU and ill_get_Cancel. commit 4491bbb1a05c42c1540c3eb16401028eac05c36a Author: Adam Dickmeiss Date: Tue Feb 20 11:23:50 2001 +0000 Updated ccl_pquery to consider local attribute set too. commit a7b99c21cc2445c19d3f76150049b42a96631b48 Author: Adam Dickmeiss Date: Mon Feb 12 15:35:19 2001 +0000 More gils CCL field mappings. commit aabf1ddf38ac10199480c78045c09456c86524a8 Author: Adam Dickmeiss Date: Sat Feb 10 01:21:59 2001 +0000 Dumper only keeps one record at a time in memory. commit 045c1b65972cd05508ff188e201c17e5da571b43 Author: Adam Dickmeiss Date: Thu Feb 1 08:52:26 2001 +0000 Fixed bug regarding inetd mode. commit 3dd5b55e719b2deba4bdc96c0e2dc55f41b7d70f Author: Adam Dickmeiss Date: Tue Jan 30 21:34:53 2001 +0000 Changes. commit 1e05ad915933124916c16e164cd2065646379cd7 Author: Adam Dickmeiss Date: Tue Jan 30 21:34:17 2001 +0000 Added step-size for Scan backend interface. commit 9a0db72d69faf9b014a9cb05c9c95c7d8ba214b9 Author: ja7 Date: Tue Jan 30 15:52:48 2001 +0000 added command for setting packageName in ES packages! command is named packagename default is NULL for server suplyed package name commit e437c49e5b848a38b8dd0913da4c79828c60af18 Author: Adam Dickmeiss Date: Mon Jan 29 11:19:05 2001 +0000 Clients prints options in InitResponse. commit 2888744f98c72347a8f584f4b56dad77905d1a2b Author: Adam Dickmeiss Date: Mon Jan 29 09:38:22 2001 +0000 Fixed bug that made the frontend server crash when no attribute set was specified for scan. commit 6a5e596a2520ae688b080432212728bd4b12901e Author: Adam Dickmeiss Date: Wed Jan 24 11:55:31 2001 +0000 Fixed nasty bug introduced by previous commit (attribute sets not properly allocated). commit 548d8ab9b0b5930db27643b47fc55afce5511219 Author: Adam Dickmeiss Date: Mon Jan 22 10:41:47 2001 +0000 Multiple attribute may be specified for sorging. commit dc3d5ecceac6245d85f90195e63e94018cbcdce7 Author: Adam Dickmeiss Date: Thu Jan 4 14:03:42 2001 +0000 Minor change. commit 0f72f09a46621eb0aa9960b990dd35c221333e4d Author: Adam Dickmeiss Date: Thu Jan 4 13:36:24 2001 +0000 Added XML Docbook documentation for YAZ - will eventually replace the linuxdoc SGML doc. commit 356e1d9e8eeb92d9ca9e883c1048ad79e5a5c49f Author: Adam Dickmeiss Date: Fri Dec 29 11:12:12 2000 +0000 Updated with more info. commit 4a9980caf2a67eb3168992d3a37afa296d5efaf8 Author: Adam Dickmeiss Date: Thu Dec 14 22:10:46 2000 +0000 Minor updates. commit bf2b1fb48dd2b2edb871441fb1b10d11df378e9c Author: Adam Dickmeiss Date: Thu Dec 14 16:01:32 2000 +0000 Fixed YAZLALIB setting (when no threads was specified). commit 0fa4ed293e6d00b6ef3f0179543a12f803c61b6d Author: Sebastian Hammer Date: Mon Dec 11 21:43:38 2000 +0000 Added blocking synopsis for COMSTACK commit 754b0cc078d975dc04dfb1e58e93780935a53a49 Author: Sebastian Hammer Date: Mon Dec 11 20:55:18 2000 +0000 Work commit ccdc25fd34d4ce420755fb6ed492e00d6df5d776 Author: Adam Dickmeiss Date: Tue Dec 5 19:14:12 2000 +0000 Updated CHANGELOG and windows.txt. commit 7dbfe8eb851425008edcba35173278f1c54fc037 Author: Adam Dickmeiss Date: Tue Dec 5 19:07:24 2000 +0000 Fixed problem with element level in reading of abstract syntax. commit e8d4a4b06783f74ff4e6a32f4f4b2622473d1b3c Author: Adam Dickmeiss Date: Tue Dec 5 19:05:10 2000 +0000 Service automatically starts in the directory from which it was installed. commit d3a6e1e7f5f661593507deecd86bc72c869d19c8 Author: Adam Dickmeiss Date: Tue Dec 5 19:03:19 2000 +0000 WIN32 fixes for drive specifications. commit 82780038a8dfa288d03d6e9c8ef9df5f4e67fbfe Author: Adam Dickmeiss Date: Tue Dec 5 14:44:25 2000 +0000 Readers skips sections. commit 8f3b80611e6f01ee8ef66fb8c57f2370497459eb Author: Adam Dickmeiss Date: Tue Dec 5 14:34:49 2000 +0000 Fixed bug with termlists (introduced by previous commit). commit fec7f7b97c77fbf1d7073bbd47816b9da02d0adb Author: Adam Dickmeiss Date: Tue Dec 5 12:21:44 2000 +0000 Added termlist source for data1 system. commit 99fef536b882e1a7e8fae9955ff8c28bfe171e9c Author: Adam Dickmeiss Date: Tue Dec 5 10:06:23 2000 +0000 Added support for null-data rules like . commit 7f6f1b2def7cb8f2124168f90ea3e2e728bd39b3 Author: Adam Dickmeiss Date: Fri Dec 1 17:56:41 2000 +0000 on WIN32 function statserv_closedown closes socket(s) to provoke close. commit 43801085d371c69455730182f72c4e53d8c8218f Author: Adam Dickmeiss Date: Wed Nov 29 14:22:47 2000 +0000 Implemented XML/SGML attributes for data1 so that d1_read reads them and d1_write generates proper attributes for XML/SGML records. Added register locking for threaded version. commit 1edc4e2e9b58c9ec9fe830eb7c991946084911b0 Author: Adam Dickmeiss Date: Mon Nov 27 15:17:40 2000 +0000 Using SSLeay_add_all_algorithms instead of OpenSSL_add_all_algorithms. commit ece0783e15e266f33b30db9d55b2dcdbacb55ac6 Author: Adam Dickmeiss Date: Mon Nov 27 14:16:55 2000 +0000 Fixed bug in ccl_rpn_simple regarding resultSetId's. commit ffe0319f6125ea953ba8859b0e5a3cc3f4a77716 Author: Adam Dickmeiss Date: Thu Nov 23 10:59:22 2000 +0000 Minor change. commit 8e4eabe621f8b8195faa6625a38a2e1ae7b68aa1 Author: Adam Dickmeiss Date: Thu Nov 23 10:58:32 2000 +0000 SSL comstack support. Separate POSIX thread support library. commit 37b3d8433b89248def810d7cfa9b110893519f65 Author: Adam Dickmeiss Date: Thu Nov 16 13:11:07 2000 +0000 Changed because ccl_rpn_query sets attribute set. commit eaf27c9dc97e048dcd9a90dc05aa8133b3020c5b Author: Adam Dickmeiss Date: Thu Nov 16 13:03:12 2000 +0000 Function ccl_rpn_query sets attributeSet to Bib-1. commit 448e7f2a48f6485a8d452c75420524fb37453bc1 Author: Adam Dickmeiss Date: Thu Nov 16 09:58:02 2000 +0000 Implemented local AttributeSet setting for CCL field maps. commit 4b89c0a02975f8140f079e5883692a7de30126be Author: Adam Dickmeiss Date: Mon Nov 13 09:44:59 2000 +0000 Work on SCAN: RPN2CCL conversion and proper "next" scan. commit e0fea214f3bf8b0a75ae18c0e9c97c6d5e22df5f Author: Adam Dickmeiss Date: Wed Nov 1 14:47:00 2000 +0000 Added CCL support for WIN32. commit 0bbcf1f8447a9d6514bc66e7390993c01d6ca0e3 Author: Adam Dickmeiss Date: Wed Nov 1 09:18:40 2000 +0000 Fixed for new version of automake. commit 33a6eab614ca84eef817f675843e6de820d13708 Author: Adam Dickmeiss Date: Tue Oct 17 19:50:28 2000 +0000 Implemented and-list and or-list for CCL module. commit 45f8f517ebe10930067907c19a56557afd779826 Author: Adam Dickmeiss Date: Wed Oct 11 12:39:49 2000 +0000 Updated current version number for library. commit eeffeb31d2d436d41161046b4a5c0f5ff43a9ad4 Author: Adam Dickmeiss Date: Wed Oct 11 12:38:42 2000 +0000 New spec release. commit 10a1b30cd1e5537ef3c60b27f96b36a428ebb390 Author: Adam Dickmeiss Date: Wed Oct 11 12:24:58 2000 +0000 Removed --source option from yaz-config. commit 5682310668a3e9607b5cc55f2ebeac402213f38f Author: Adam Dickmeiss Date: Wed Oct 11 11:36:15 2000 +0000 Updated version number for shared object. commit 180d8e06b6f1e7fe34b1a80ca1edde0dddf113f1 Author: Adam Dickmeiss Date: Wed Oct 11 10:40:56 2000 +0000 Work on yaz-config creation. Added yaz.m4. commit db715f04889e8811b9162e5308a8702985437f3f Author: Adam Dickmeiss Date: Fri Oct 6 12:55:50 2000 +0000 Minor updates (for fixed version of automake in CVS). commit cd1022386e3c47a196fd08d7b0bbf32f25b61a56 Author: Adam Dickmeiss Date: Fri Oct 6 12:46:27 2000 +0000 Including sys/types.h and netinet/in.h instead on arpa/inet.h on Unix. commit a8351208b6d55c46bf73cc4011645a81c9a94565 Author: Adam Dickmeiss Date: Fri Oct 6 12:01:12 2000 +0000 Updates regarding ASN-code generation (mostly). commit 23a3d157b61486fec09962339c407c4626e18268 Author: Adam Dickmeiss Date: Fri Oct 6 12:00:28 2000 +0000 Fixed Handle leak for WIN32. commit 21bb477b8b3d2e06ade68603a47b227040202ac8 Author: Adam Dickmeiss Date: Tue Oct 3 13:26:24 2000 +0000 Minor fix. commit faf616abe44b655b3154c5421b3ede39aca8783a Author: Adam Dickmeiss Date: Tue Oct 3 13:17:53 2000 +0000 Minor updates to configure script. commit fa21652860bfd374c3fa9adee83ad726bffd6dbd Author: Adam Dickmeiss Date: Tue Oct 3 12:55:50 2000 +0000 Removed several auto-generated files from CVS. commit b86dedd714b84b52d7f1bfe71555d08367c2c179 Author: Adam Dickmeiss Date: Mon Oct 2 13:58:50 2000 +0000 Added some OID's. commit 33b5e2e3822214b25aa544688a2788086840b7a6 Author: Adam Dickmeiss Date: Mon Oct 2 13:05:32 2000 +0000 Fixed bug introduced by previous commit. commit 7282236bf8f7f5ed9890f04c2b658397fd333e8b Author: Adam Dickmeiss Date: Mon Oct 2 12:31:43 2000 +0000 File yaz-config generated by configure (not Makefile). commit 4b05ad4607916d50257919cead06b54785c18e29 Author: Adam Dickmeiss Date: Mon Oct 2 11:07:44 2000 +0000 Added peer_name member for bend_init handler. Changed the YAZ client so that tcp: can be avoided in target spec. commit 9d746417d51ee7eedd3cedf78b734d498cc49521 Author: Adam Dickmeiss Date: Fri Sep 15 17:46:49 2000 +0000 Added TCP wrapper for yaz.spec. commit 53d3f4a26c04bd272452cac57cb4672456027324 Author: Adam Dickmeiss Date: Thu Sep 14 12:05:08 2000 +0000 Threads disabled unless specified for configure. commit 9b2bfae4cadcc52c5facf342f1abaa0c885d6f11 Author: Adam Dickmeiss Date: Sat Sep 9 08:05:57 2000 +0000 Fixed TCP wrapper setting so that it is only enabled when the set to. commit c066367416a8bed99c6c11eb8b6c74991762cd95 Author: Adam Dickmeiss Date: Thu Sep 7 12:53:29 2000 +0000 Changed copyright message in spec file. commit cbeb1227a16f62975115e1e9216ccf2724bfd046 Author: Adam Dickmeiss Date: Mon Sep 4 08:58:15 2000 +0000 Added prefix yaz_ for most logging utility functions. commit f9cb371e2a0eef09e1416fde6f1efd609ef80205 Author: Adam Dickmeiss Date: Mon Sep 4 08:27:11 2000 +0000 Work on error handling for tcpip_accept. commit 5411affe4d00fc2d7bb4e8c907c53d4c085a44ce Author: Per M. Hansen Date: Thu Aug 31 14:20:34 2000 +0000 A chapter about the yaz-client was added to the documentation. commit 68d5c20794c09348e4a0fed7f00c2bd97f535e12 Author: Adam Dickmeiss Date: Thu Aug 31 10:20:12 2000 +0000 Added member request_format and output_format for backend fetch method. commit 4f7e8b411cb0c30c02b3eaf23fdfef5275dae098 Author: Adam Dickmeiss Date: Thu Aug 31 09:51:25 2000 +0000 Added record_syntax member for fetch method (raw OID). commit 16ce40aa92448a07d7b8673d873f549087f27e83 Author: Adam Dickmeiss Date: Thu Aug 10 08:41:26 2000 +0000 Fixes for ILL. commit 3fbac983921247d7804695af483263420089beec Author: Adam Dickmeiss Date: Fri Aug 4 10:40:45 2000 +0000 Fixed bug in yaz-config.in. commit bc5e5d4ed7440baeac26adbbeedc5719d9b18dac Author: Adam Dickmeiss Date: Thu Jul 6 10:38:47 2000 +0000 Enhanced option --enable-tcpd. commit ee3757af27a96aa388b76c8dbcc175c02d91a50e Author: Adam Dickmeiss Date: Tue Jul 4 08:53:22 2000 +0000 Fixed bug. commit 3b2f87676aa2bf0d508e1ff71a57941852ce5628 Author: Adam Dickmeiss Date: Wed Jun 21 10:10:39 2000 +0000 Added CVS id. commit 188b39dc723e0011264f8bd8f4a07d65cf8ddb72 Author: Adam Dickmeiss Date: Wed Jun 21 10:10:05 2000 +0000 Modified yaz-config so that it only reports usage when bad options are specified. commit 861013735f9e11cdc85019cbb361661d3350a1a7 Author: Adam Dickmeiss Date: Tue Jun 20 15:25:37 2000 +0000 Fix. commit 70f0ff9bf920e65b47211fd88f409e2b1a2b8e43 Author: Adam Dickmeiss Date: Mon Jun 19 09:49:35 2000 +0000 Added options for yaz-config. commit c3f57c8345a7f18e072352e65e20b895a0011787 Author: ian Date: Fri Jun 9 13:51:01 2000 +0000 Added LOG_APP for logging application (Rather than code) events that might be useful when creating usage reports. commit 7220998c93de3081e36802fea70524ad6c1768b1 Author: Adam Dickmeiss Date: Thu Jun 8 13:40:14 2000 +0000 Using a4 instead of letter for postscript. commit 8fd016e2789222e1fb346063b1fe27a33e51a479 Author: Adam Dickmeiss Date: Thu May 25 19:58:00 2000 +0000 Changed CCLRPN setting to CCL2RPN. commit 4cc3807b8b684cbf198849703a9aa97500c9db6e Author: Adam Dickmeiss Date: Thu May 25 19:57:35 2000 +0000 Changed include of yaz-util.h to wrbuf.h. commit 986cee5f65c6f0d5dde92b7fe2977a4532ecd3f9 Author: Adam Dickmeiss Date: Thu May 18 11:57:04 2000 +0000 Client display time elapsed. commit 8b1bdc0019106e248a81c1997a4101643ac4c60c Author: Adam Dickmeiss Date: Thu May 18 11:55:47 2000 +0000 Fixed DANMARC profile. commit 9ed20d6529182e33ebca7423313eba893d07b69e Author: Adam Dickmeiss Date: Thu May 11 14:37:55 2000 +0000 Minor changes. commit 2b85787ba94cfbc6cd1123e9773802aee6740ca5 Author: Adam Dickmeiss Date: Tue May 9 11:48:58 2000 +0000 Fix (bug introduced by previous commit). commit 588af2e484a5a48afac3069578959437c9b3271e Author: Adam Dickmeiss Date: Tue May 9 10:55:05 2000 +0000 Public nmem_print_list (for debugging). commit 813d54d6b885886d0bf823937576e69fd48f81aa Author: Adam Dickmeiss Date: Fri May 5 13:48:15 2000 +0000 Minor changes. commit f93804a685b51e2d724847d071d47c173c2c0ee6 Author: Adam Dickmeiss Date: Wed May 3 22:00:00 2000 +0000 Reference counter (if multiple modules are init/freeing nmem). commit bc0541635987ad8f35af9df6aacd5534d519ccb6 Author: Adam Dickmeiss Date: Tue May 2 19:32:15 2000 +0000 Defined READLINE_LIBS for the yaz-client. commit 6817442a2614e09d9c32896dc3c2581a3dd491c7 Author: Adam Dickmeiss Date: Tue May 2 17:19:58 2000 +0000 Removed MINUS token. commit 95043c4abd87486b64ef44a575313cf4153c1445 Author: Adam Dickmeiss Date: Mon May 1 09:36:50 2000 +0000 Range operator only treated in ordered ranges so that minus (-) can be used for, say, the and-not operator. commit 247a4ed52a51a1dbd85877438b86a39ca68a3cca Author: Adam Dickmeiss Date: Mon Apr 17 14:21:38 2000 +0000 WIN32 update. commit ee0459ed35eb48fdbf8e221de1ef7d6d59a0b0ad Author: Adam Dickmeiss Date: Tue Apr 11 21:22:28 2000 +0000 Fixed linux specific test. commit 3518888d1548b5f157909599122c757f29d92080 Author: Adam Dickmeiss Date: Thu Apr 6 12:32:56 2000 +0000 Fixed setting of yaz-config. commit 3739a09637244036dedbabb6040ed48978b8e330 Author: Adam Dickmeiss Date: Wed Apr 5 09:43:45 2000 +0000 Minor fixes regarding packaging. commit d4f5c8867c6f02b3c8ee33e0b226e1d26e5c65d0 Author: Adam Dickmeiss Date: Wed Apr 5 07:41:16 2000 +0000 Added config files for libtool. commit 7acd51b7cdffca5ad92a777d2c6e8e9bae1f9fd3 Author: Adam Dickmeiss Date: Wed Apr 5 07:39:54 2000 +0000 Added shared library support (libtool). commit 6fdf5380057b2e9159050ddbb7cd79c86690a6ef Author: Adam Dickmeiss Date: Wed Mar 29 15:23:55 2000 +0000 Further work. commit 670bcd00bdc2b4559fde47a9b38cbb855b89aa48 Author: Adam Dickmeiss Date: Wed Mar 29 15:07:16 2000 +0000 Updated for PHP. commit 484e85dc68452b84d36770c1dc6801632dd75c45 Author: Adam Dickmeiss Date: Mon Mar 20 19:29:59 2000 +0000 Minor change. commit a6eef2e7073a7295d1a7bf09f538946135a5ebbb Author: Adam Dickmeiss Date: Mon Mar 20 19:06:25 2000 +0000 Added Segment request for fronend server. Work on admin for client. commit 29ad0d85b05dd7ed7a68a01b87ebce5195bdbb85 Author: Adam Dickmeiss Date: Fri Mar 17 12:47:02 2000 +0000 Minor changes to admin client. commit 49efb9d1b4fc68e075b5121b68922f866f4b330f Author: ian Date: Thu Mar 16 13:55:49 2000 +0000 Added commands for sending shutdown and startup admin requests via the admin ES. commit 9e92c884f129f66b829fdb3069b09e669fc7aa56 Author: ian Date: Thu Mar 16 13:30:11 2000 +0000 Added startup and shutdown options to admin extended service commit ee171c36f5db3f64d42b840c247ac33f056d656d Author: Adam Dickmeiss Date: Wed Mar 15 12:59:49 2000 +0000 Added handle member to statserv_control. commit 274791ccf3e873a88ef1f2aef185a3d711c972b4 Author: ian Date: Tue Mar 14 15:23:17 2000 +0000 Removed unwanted ifdef and include of zes-admin.h commit e06308d4b7e38f10c61acab44bbf32de9294a313 Author: ian Date: Tue Mar 14 15:22:04 2000 +0000 Added Admin external to choice table. commit 91bd424e18017a225bc500e5ac94f71382a6a03f Author: ian Date: Tue Mar 14 14:06:04 2000 +0000 Minor change to order of debugging output for send_apdu, fixed encoding of admin request. commit 8f0d059e248dba37a875875ae6d8561a0a9d49a1 Author: ian Date: Tue Mar 14 13:52:32 2000 +0000 Added Admin Extended Service to External Choice commit 3b5d9ce6b714e69e96b8c738c4055196cb1f42b4 Author: ian Date: Tue Mar 14 09:27:07 2000 +0000 Added code to enable sending of admin extended service requests commit 29796ec9a5a8b2393f578a44dc15b74db23fde50 Author: ian Date: Tue Mar 14 09:22:58 2000 +0000 Added Admin Extended Service ASN commit cf784482d7256a192c0b4f95e4746ed12efb3bab Author: ian Date: Tue Mar 14 09:22:15 2000 +0000 Added asn & encoders/decoders for Admin Extended Service commit 94e393e8f7af200a72bc27caf341c6dd2ca6d318 Author: ian Date: Tue Mar 14 09:21:08 2000 +0000 Added Admin Extended Service OID commit 1d88cc1a3680e80dc7996abe5a6e0a99f9ef3d1b Author: ian Date: Tue Mar 14 09:19:49 2000 +0000 Added admin extended service encoders & decoders. commit 2c77fc43bcc40cc4786a39b14c76a481dbe66ffe Author: Adam Dickmeiss Date: Tue Mar 14 09:06:10 2000 +0000 Added POSIX threads support for frontend server. commit 2059ba0c9ca49689d20c7687195c30d06cbb4cf9 Author: Adam Dickmeiss Date: Fri Mar 10 08:41:30 2000 +0000 Documentation no longer made when doing 'make all'. commit 93d0e8388bf22b6da2a9c2d7eb3d6df58cbe8344 Author: Adam Dickmeiss Date: Fri Mar 3 10:23:47 2000 +0000 Version 1.6. commit 6d04fc7a64ab1dd82574935bb189e055fe2d5e72 Author: Adam Dickmeiss Date: Fri Mar 3 10:18:50 2000 +0000 Added script to convert documentation to indexdata.dk web style. commit 1059af772d449ae66893bedf4a4ffd2b13b9c37f Author: Adam Dickmeiss Date: Thu Mar 2 08:53:47 2000 +0000 Fix. commit d90d31f39aba4c7256d5b83eaf4192630b18ae02 Author: Adam Dickmeiss Date: Thu Mar 2 08:48:20 2000 +0000 Renamed ASN.1 compiler to yaz-comp (used to be yc.tcl). commit 988421f953de4623a11b90008c52e135631078ba Author: Adam Dickmeiss Date: Wed Mar 1 14:19:21 2000 +0000 Added documentation. commit a5bef8528509e705092cd767e0b65bf8da85ccad Author: Adam Dickmeiss Date: Wed Mar 1 13:46:23 2000 +0000 Added ill decoders to CVS. commit 69abdf35bf2cb6927d34b9fb1f526a0962f0fe8f Author: Adam Dickmeiss Date: Wed Mar 1 13:41:03 2000 +0000 Added files. commit 007a366af5ddaebf813e39588f1c09646d33bcef Author: Adam Dickmeiss Date: Wed Mar 1 11:15:31 2000 +0000 Fix. commit 51901976217886437964a5450614caa377ded52c Author: Adam Dickmeiss Date: Wed Mar 1 11:08:22 2000 +0000 Fix. commit e973eb3ceaeaf25735f8250aed8400c87ddcb9da Author: Adam Dickmeiss Date: Wed Mar 1 11:06:09 2000 +0000 Updated makefiles (again). commit f6ed0e935a985cceea7fefeb745bbeb2b756d557 Author: Adam Dickmeiss Date: Wed Mar 1 11:05:28 2000 +0000 2000. commit 005f5cf043a2b4929eeeb9d41de4c410228d2e06 Author: Adam Dickmeiss Date: Wed Mar 1 10:59:53 2000 +0000 Updated doc. commit 2e7228ce7b24bbb78c072cffe4dd059e536eb76e Author: Adam Dickmeiss Date: Wed Mar 1 09:53:32 2000 +0000 Added header. commit afeee382cc14a2dbacf9f61217ef0e4209a371e1 Author: Adam Dickmeiss Date: Wed Mar 1 09:51:59 2000 +0000 Added O_BINARY again. commit 5641875c76fe4e239731fb97ac528f05a3c2de91 Author: Adam Dickmeiss Date: Tue Feb 29 15:58:19 2000 +0000 Added item-req.h commit 51ce48f9d3319a9f8952c4c6deb2c39692403376 Author: Adam Dickmeiss Date: Tue Feb 29 15:52:33 2000 +0000 Added compiled ASN.1 C files. commit ee5338c518eced23556105b4b2ad3cd850fd79ea Author: Adam Dickmeiss Date: Tue Feb 29 14:13:55 2000 +0000 Minor. commit 5dabb1f264e9fa71e977ddd8ad2e8c0e6de56484 Author: Adam Dickmeiss Date: Tue Feb 29 14:13:44 2000 +0000 MInor. commit 9affdfe1851fa0994299ca2c6495003911d56cb8 Author: Adam Dickmeiss Date: Tue Feb 29 13:52:36 2000 +0000 Updated. commit 19af2bd8dfd21731cc978beccd1346133d614c67 Author: Adam Dickmeiss Date: Tue Feb 29 13:44:54 2000 +0000 Check for config.h (currently not generated). commit 715f35c6d320d5589ea1b80434ab1b2abef823b0 Author: Adam Dickmeiss Date: Mon Feb 28 12:34:40 2000 +0000 Minor. commit 95ad0fb5f35ae1885c8f2c235d073961555a6329 Author: Adam Dickmeiss Date: Mon Feb 28 12:34:28 2000 +0000 MInor. commit b027d2d599e0c1e7806d8feebbe30afa62d3d41e Author: Adam Dickmeiss Date: Mon Feb 28 12:28:34 2000 +0000 Added. commit 4a61787f847937c8ec74286572a4aa1efb9e3d55 Author: Adam Dickmeiss Date: Mon Feb 28 11:46:25 2000 +0000 Minor. commit a3d5725ed3e509fea9ee6246e01b86416bf91a55 Author: Adam Dickmeiss Date: Mon Feb 28 11:45:41 2000 +0000 Updated again. commit 7dabb33444218a5c5b83cf1a4d9fe386699f872e Author: Adam Dickmeiss Date: Mon Feb 28 11:44:39 2000 +0000 Updated makefiles. commit c0903fd5f123d300c1a107af6cbd6f70631fcf32 Author: Adam Dickmeiss Date: Mon Feb 28 11:27:22 2000 +0000 Minor. commit eb403d586a08851dc75cdb8d1e70200f8e154fcb Author: Adam Dickmeiss Date: Mon Feb 28 11:25:45 2000 +0000 Minor. commit 275e3d21ac4979241fbe3522ce43c6e769020e46 Author: Adam Dickmeiss Date: Mon Feb 28 11:25:21 2000 +0000 Added Makefile.in for tab. commit 7650dadee1e1a910677c8d305aa70dbbf38e79e6 Author: Adam Dickmeiss Date: Mon Feb 28 11:21:36 2000 +0000 Added config.h.in. commit 78e049108ef4c65f1dc3dddd747e59b90b75a9a6 Author: Adam Dickmeiss Date: Mon Feb 28 11:20:05 2000 +0000 Using autoconf. New definitions: YAZ_BEGIN_CDECL/YAZ_END_CDECL. commit 4553ace9ab808a5db41bd7e03db6b8b4e9f8acc7 Author: Adam Dickmeiss Date: Mon Feb 28 11:13:03 2000 +0000 Removed odr_priv.obj. commit 494f920a167da8363b008176b75960f983e1631a Author: Adam Dickmeiss Date: Fri Feb 25 11:40:09 2000 +0000 Check for possible inclusion -ltermcap when doing -lreadline check. commit f8bd96fa2d6164cec530daa8cec05bec21b1854e Author: Adam Dickmeiss Date: Thu Feb 24 23:49:13 2000 +0000 Fixed memory allocation problem. commit c9f3e870fcf3f6f2dabb1046658c0a3804b14a55 Author: Adam Dickmeiss Date: Thu Feb 24 08:52:01 2000 +0000 Bug fix. commit 6fa916522816708cb739129df535850d561d0f3a Author: Adam Dickmeiss Date: Thu Feb 10 13:44:02 2000 +0000 Tcl command clock not used if unavailable (Tcl7.4 and earlier). commit 4a3375fecf8c2a6d6659c523bb38c5a5796355a1 Author: Adam Dickmeiss Date: Thu Feb 10 13:42:43 2000 +0000 Removed C++ comment. commit b4ae0369b59f4e3e9f077197a2bfca08dc654102 Author: Adam Dickmeiss Date: Tue Feb 8 10:39:53 2000 +0000 Added a few functions to set name of operands, etc. commit 4e06ed87f410f2304808ccd922856671785a9d7c Author: Adam Dickmeiss Date: Sat Feb 5 10:47:19 2000 +0000 Identifier-length and indicator-lenght no longer set to 2 (forced). commit 2fdf1cc871e6342d03460e703c8c3bb67b7f5267 Author: Adam Dickmeiss Date: Fri Feb 4 11:01:15 2000 +0000 Added more elements. commit b04a1b2d9a23bea37512d2219e2a3551afffd702 Author: Adam Dickmeiss Date: Wed Feb 2 15:13:23 2000 +0000 Minor change. commit c126b2a625462f95475f00efdfdf9ce41a0e9c79 Author: Adam Dickmeiss Date: Mon Jan 31 13:15:21 2000 +0000 Removed uses of assert(3). Cleanup of ODR. CCL parser update so that some characters are not surrounded by spaces in resulting term. ILL-code updates. commit 62bcf7a811cd3151ac10f93317c9ddfa6b16f539 Author: Adam Dickmeiss Date: Sat Jan 15 09:39:50 2000 +0000 Implemented ill_get_ILLRequest. More ILL testing for client. commit 6c025ab4358025e833fdcd5f0457607c5c69352b Author: Adam Dickmeiss Date: Sat Jan 15 09:38:51 2000 +0000 Implemented ill_get_ILLRequest. Added some type mappings for ILL protocol. commit 0341f9b770084da8ccb8e7be7039ce4a7abfdc88 Author: Adam Dickmeiss Date: Sat Jan 15 09:18:42 2000 +0000 Bug fix: some elements where treated as OPTIONAL when they shouldn't. commit acc7723b7d7d6cd3e63866354c8878d0aa21694f Author: Adam Dickmeiss Date: Thu Jan 13 23:05:50 2000 +0000 Fixed tagging for member requester-CHECKED-IN in ILL ASN.1 spec. commit 79430a0c78468168265d169c185c87379b25616b Author: Adam Dickmeiss Date: Wed Jan 12 14:36:07 2000 +0000 Added printing stream (ODR) for backend functions. commit 09c145d7b569e19acd43a50a53c3a8846f7a1c43 Author: Adam Dickmeiss Date: Mon Jan 10 15:16:53 2000 +0000 Added several OID's. commit e5ae0dd3bbac8bb387edb28df0dafc2e8230a96e Author: Adam Dickmeiss Date: Thu Jan 6 14:59:13 2000 +0000 Added oid_init/oid_exit. Changed oid_exit. commit 92c24290e2f731c145291392071b7de965fcacf5 Author: Adam Dickmeiss Date: Thu Jan 6 14:30:56 2000 +0000 Minor change - to prevent warnings. commit 6b12d4fd69aa6c44b45df80c9d3892134fb4cb0e Author: Adam Dickmeiss Date: Thu Jan 6 11:27:16 2000 +0000 Updated for ILL. commit 4ee3f2c5b2404a96041129f8bffa7d3e15a75d19 Author: Adam Dickmeiss Date: Thu Jan 6 11:27:02 2000 +0000 Minor fix so that this source compiles using Visual C++. commit f1f27f8024382290d2809faec271ffeead2cfd84 Author: Adam Dickmeiss Date: Thu Jan 6 11:25:59 2000 +0000 Added case to prevent warning. commit 809ef8947e98c402bdf0b57e730545525ce4e94a Author: ian Date: Tue Jan 4 17:46:17 2000 +0000 Added function to count occurences of a tag spec in a data1 tree. commit 88ce7f5c3713fbf4992763ae38c9fb79a5ccb551 Author: Adam Dickmeiss Date: Wed Dec 22 13:13:32 1999 +0000 Search terms may include "operators" without causing error. commit cca8ec45a77a26602e58dc8aec7f5116ce4b9d46 Author: Adam Dickmeiss Date: Tue Dec 21 16:25:20 1999 +0000 Fixed handling of default/inherited attributes. commit fc2093cfd23eda0ee8384b18dc7e7b8adffd073a Author: Adam Dickmeiss Date: Tue Dec 21 16:24:48 1999 +0000 More robust ISO2709 handling (in case of real bad formats). commit 5ebe07935fedc4ce6b2a3bb0aa29425674ce7d08 Author: ian Date: Tue Dec 21 14:16:19 1999 +0000 Changed retrieval module to allow data1 trees with no associated absyn. Also added a simple interface for extracting values from data1 trees using a string based tagpath. commit e347736dafbae4bbd1eec56e3577353662aee332 Author: Adam Dickmeiss Date: Mon Dec 20 15:20:13 1999 +0000 Implemented ccl_pquery to convert from CCL tree to prefix query. commit d205d4870b1d64af05e9d6f6a2223086af4cce9e Author: Adam Dickmeiss Date: Thu Dec 16 23:36:19 1999 +0000 Implemented ILL protocol. Minor updates ASN.1 compiler. commit 35288d484fe640629398ac8e0c937ced92c75ae0 Author: Adam Dickmeiss Date: Thu Dec 9 22:31:19 1999 +0000 Minor. commit 6e41787b76789b646db74d75a5239031898b13c6 Author: Adam Dickmeiss Date: Thu Dec 9 00:38:03 1999 +0000 New CHANGELOG. commit a27662836b544858a5b3c96cdc335d7da7d30088 Author: Adam Dickmeiss Date: Wed Dec 8 13:37:14 1999 +0000 Minor. commit d953d065a4ed1abd68cec29f93e061a2b8934cd8 Author: Adam Dickmeiss Date: Wed Dec 8 13:21:02 1999 +0000 Minor fix. commit 332d9c8c3c66d71a25dc258c87464f0271a2ca74 Author: Adam Dickmeiss Date: Wed Dec 8 13:14:12 1999 +0000 Added comp.sh. commit a24ec014f584c01a09f44d7900f59d8efd9bc87f Author: Adam Dickmeiss Date: Wed Dec 8 13:10:48 1999 +0000 New version. commit 3ccb0b75bece286721adca359095f1c36366197a Author: Adam Dickmeiss Date: Thu Dec 2 14:01:17 1999 +0000 Changed LICENSE. commit 30cfc59b71c25923e2e9cfb63c310c095bb3b6c1 Author: Adam Dickmeiss Date: Thu Dec 2 13:54:56 1999 +0000 Updated information about YAZ. commit d9ee01635f03f9095a66f71b73580560d48798e8 Author: Adam Dickmeiss Date: Tue Nov 30 13:47:10 1999 +0000 Improved installation. Moved header files to include/yaz. commit cb182c3eb21ca4405d0c9f928ceb33f3fd2f95ba Author: Adam Dickmeiss Date: Mon Nov 29 15:12:27 1999 +0000 Changed the way implementationName - and version is set. commit 5b539981aefd6607b1a4d7747645774c24987f79 Author: Adam Dickmeiss Date: Mon Nov 29 14:36:28 1999 +0000 Implementation_name and implementation_version copied verbatim. commit 77fe09be0d9eb7a585c35a7be679c738a23dffab Author: Adam Dickmeiss Date: Wed Nov 10 09:06:40 1999 +0000 Fixed yaz_oi_update so that it ignores NULL pointer. commit 5f743e6b18587c2daae4fe9cee8cf991b7352d24 Author: Adam Dickmeiss Date: Thu Nov 4 14:58:44 1999 +0000 Added status elements for backend delete result set handler. Updated delete result result set command for client. commit 83b2f733ce31f24ea6bbe014907552e58826a9dd Author: Adam Dickmeiss Date: Wed Nov 3 09:05:56 1999 +0000 Implemented wrbuf_puts. commit 9bf9aa776b136ecaddb3193da79639a70f1f8a6f Author: Adam Dickmeiss Date: Thu Oct 28 11:36:40 1999 +0000 wrbuf_write allows zero buffer length. commit 18ed9f15a489511014d4384a53b27e35824dd831 Author: Adam Dickmeiss Date: Thu Oct 21 12:06:28 1999 +0000 Retrieval module no longer uses ctype.h - functions. commit cdea632bd515af06beaa311c8569180da1e082da Author: Adam Dickmeiss Date: Thu Oct 21 09:50:33 1999 +0000 SGML reader uses own isspace - it doesn't do 8-bit on WIN32! commit 0f47fe84fe77373dad8b00d72836627b4ea3ae60 Author: Adam Dickmeiss Date: Tue Oct 19 12:35:55 1999 +0000 Better dump of OCTET STRING. commit 008efaed7cfe4bbbfdcae17ba22187b4acafdb02 Author: Adam Dickmeiss Date: Tue Oct 19 12:35:42 1999 +0000 Minor bug fix (bug introduced by previous commit). commit 8e3a0973e8149ae25f5404395f417761edee1604 Author: Adam Dickmeiss Date: Fri Oct 15 11:35:41 1999 +0000 Character '.' matches any single character. commit 4bf3190b5cb75c5f5a46ff7a1b6834c188cca008 Author: Per M. Hansen Date: Tue Oct 12 13:03:12 1999 +0000 The danmarc.abs file was addes to support the DANMarc2 record format. commit 0008748e4e9730bfffd4a4c5aba63fb0fe9a3371 Author: Adam Dickmeiss Date: Mon Oct 11 10:01:24 1999 +0000 Implemented bend_sort_rr handler for frontend server. commit 379059e41e165d18f177bacba85212018f451e57 Author: Adam Dickmeiss Date: Mon Oct 11 10:00:29 1999 +0000 Modified printing of records. commit b58f834c58793ae2f098a7da470f521c512784f3 Author: Per M. Hansen Date: Wed Sep 29 14:43:39 1999 +0000 The file dan1.att was added, containing the DAN-1 Attribute set. commit b61bad92f2725995d69732d46361638b8a101c27 Author: Adam Dickmeiss Date: Mon Sep 13 12:51:35 1999 +0000 Fixed bug in yaz_oi_update and added delete option. commit 0d8c0f33c8ab0063c1fac9b1188b9e353d35de5d Author: Adam Dickmeiss Date: Mon Sep 13 12:51:14 1999 +0000 Added CLIENT IP OID. commit b09357c410fba556fbf06e6065aadf78a04f5671 Author: Adam Dickmeiss Date: Fri Sep 10 08:58:32 1999 +0000 Set TRACE_XMALLOC to 1. commit b440dce0831a72bebe4f4821ab7771cc05e8facb Author: Adam Dickmeiss Date: Fri Aug 27 09:40:31 1999 +0000 Renamed logf function to yaz_log. Removed VC++ project files. commit d74993fb08e9d5112264f1cc73973dc986dd41ad Author: Adam Dickmeiss Date: Wed Jul 21 08:48:02 1999 +0000 Removed dmalloc.obj. commit c365561ca2d2f7b16dd287e524abc616eba9b9fc Author: Adam Dickmeiss Date: Tue Jul 13 13:29:02 1999 +0000 Removed dmalloc.h. commit 4d45f16d48247ba07d2eca0592239bba2d36b65d Author: Adam Dickmeiss Date: Tue Jul 13 13:28:24 1999 +0000 Better debugging for NMEM routines. commit 64d911da4c79982db410fc56e74e43aedf34f937 Author: Adam Dickmeiss Date: Tue Jul 13 13:24:53 1999 +0000 Updated memory debugging memory allocatation routines. commit d79d108cf41b2552d07f9219190fcf527cf5d264 Author: Adam Dickmeiss Date: Tue Jul 13 13:23:47 1999 +0000 Non-recursive version of data1_read_node. data1_read_nodex reads stream of bytes (instead of buffer in memory). commit a0bdc8bbd4d346939e7c24fd7e07b6d361d78643 Author: Adam Dickmeiss Date: Tue Jul 6 12:17:15 1999 +0000 Added option -1 that runs server once (for profiling purposes). commit 8e6b961d50a3cad40b5686ccff47540e7405135d Author: Adam Dickmeiss Date: Tue Jul 6 12:16:00 1999 +0000 Improved layout generated record in SGML/XML format. commit f22a5e53e3563367b54471bbcff0b544dab81c30 Author: Adam Dickmeiss Date: Tue Jul 6 12:13:35 1999 +0000 Added "schema" command. commit 762e0e6bf7324c38a001b7a14c41c4a1e98e9499 Author: Adam Dickmeiss Date: Wed Jun 30 09:10:32 1999 +0000 Fixed reading of MS-DOS files. commit 957e9475ba40602fa1def5f1a6ff5a5b10c7c13c Author: Adam Dickmeiss Date: Fri Jun 18 11:29:27 1999 +0000 Added doc to CHANGELOG. commit 617d78c63e7a502367abc3504f192770aa537482 Author: Adam Dickmeiss Date: Thu Jun 17 10:54:44 1999 +0000 Added facility to specify implementation version - and name for server. commit 01c57e6248b73d42453be75d5bceb6fa7ff8081d Author: Adam Dickmeiss Date: Wed Jun 16 12:00:08 1999 +0000 Added proximity. commit 5e81facdf5baf68e33e3370bbc3aa6226dac5bc2 Author: Adam Dickmeiss Date: Wed Jun 16 11:55:24 1999 +0000 Added APDU log to client. commit c74f92579fac45600836ca695a973fd11c1a20db Author: Adam Dickmeiss Date: Fri Jun 11 16:45:59 1999 +0000 Fixed minor bug in ScanRequest encoder. commit 61662168d4d4c1f7edb38cccac4b4a24dcecc58e Author: Adam Dickmeiss Date: Thu Jun 10 11:45:30 1999 +0000 Added bend_start, bend_stop handlers and removed pre_init. Handlers bend_start/bend_stop are called when service/daemon is started/stopped. commit f3eef298fe7e48d8305dd6b239cc7748561a4d5c Author: Adam Dickmeiss Date: Thu Jun 10 09:18:54 1999 +0000 Modified so that pre_init is called when service/server is started. commit c874a015436f78e8f6f5952e068db23d55a31b22 Author: Heikki Levanto Date: Wed Jun 9 15:10:08 1999 +0000 Cleaning up. Seems to work all right commit 30967dafb037ed60bb6c69d9a0e23bff9eba54b8 Author: Adam Dickmeiss Date: Wed Jun 9 14:37:37 1999 +0000 Minor changes. commit 04bb1765f48598e0a1c271c10980352f698f5046 Author: Adam Dickmeiss Date: Wed Jun 9 14:23:58 1999 +0000 Added enable-yc (removed with-yc) and enable-tcpd. commit 1a9b27497a71eafda912d0d4a9069bc61fa5455e Author: Adam Dickmeiss Date: Wed Jun 9 14:01:33 1999 +0000 Fixed for compiled ASN.1. commit 3eb44ee565de8be51505f8ac3c6ef724ac356e0e Author: Heikki Levanto Date: Wed Jun 9 13:33:32 1999 +0000 Compiles and links both old and new type stuff all right commit 7d97c14b8f494310d0d866e9e82bb37c8b5a4e63 Author: Heikki Levanto Date: Wed Jun 9 11:05:30 1999 +0000 At least it can compile commit 4e664c278636002a3a0c7897d233a258ac1ec18d Author: Adam Dickmeiss Date: Wed Jun 9 10:52:11 1999 +0000 Added YAZ_EXPORT. commit a19243ec18959150a30c63c521fc5b0af860ce18 Author: Adam Dickmeiss Date: Wed Jun 9 09:43:31 1999 +0000 Header files moved to include (used to be z39.50). commit a407bd021d8ea49257cf119e409a8c1e94e6fc25 Author: Adam Dickmeiss Date: Wed Jun 9 09:43:11 1999 +0000 Added option -I and variable h-path to specify path for header files. commit 25fa35a0e1f84fa9b6366d71ee5b2ab58a2bd468 Author: Heikki Levanto Date: Wed Jun 9 09:41:09 1999 +0000 More work on the ASN-generated files. commit 1a9dd6317f70b3d230429cab8a481913a6731813 Author: Heikki Levanto Date: Tue Jun 8 14:32:30 1999 +0000 Proto.h works all right, removed linker warnings from server.lib commit 6c5d249279c2d0035eae94aae229bb9d1324c418 Author: Heikki Levanto Date: Tue Jun 8 14:07:24 1999 +0000 Renamed a pile of files Tmpdir (to get around Ms leaving temp files around, and crashing when too many with same number...) commit 8d363b42a1805306b5df26aac694a4491d5c9119 Author: Adam Dickmeiss Date: Tue Jun 8 13:11:55 1999 +0000 Fixed problem with proto.h. commit 91481d554b60c13c6c163d20b7bd71c24af562aa Author: Heikki Levanto Date: Tue Jun 8 12:16:19 1999 +0000 Deleting this, renamed to makefile (.nothing) commit 6056c9215b71c976714e822e560ca6352e36387c Author: Heikki Levanto Date: Tue Jun 8 12:15:41 1999 +0000 Renamed to makefile (.nothing) (from .mak) Working on the proto.h problems and alternative confiigurations commit b4aa8d5fc85bd832c06f9782a3eb6a1e01a01d21 Author: Adam Dickmeiss Date: Tue Jun 8 10:16:17 1999 +0000 Minor changes. commit 0de9135acc6357f14e32cab39f5aa87949b78967 Author: Adam Dickmeiss Date: Tue Jun 8 10:12:43 1999 +0000 Moved file to be part of zutil (instead of util). commit 4dbd27ab2a5105631878e9a30c9cfcd57d85231d Author: Adam Dickmeiss Date: Tue Jun 8 10:10:49 1999 +0000 Added Makefile. commit 161ec45b40a3ab08e08946c9654ab6fea4604760 Author: Adam Dickmeiss Date: Tue Jun 8 10:10:15 1999 +0000 New sub directory zutil. Moved YAZ Compiler to be part of YAZ tree. commit ea114332560c12eaa8daa8de3d127e56d135b3e3 Author: Heikki Levanto Date: Fri Jun 4 10:04:28 1999 +0000 Cleaning up commit 0038ea56f28bf86ed4e70e6f076fed78ad5b96e1 Author: Heikki Levanto Date: Wed Jun 2 13:23:29 1999 +0000 Debug options for C compiler commit 2ae069a121b2105132a7e00702a1b8e439312981 Author: Adam Dickmeiss Date: Tue Jun 1 14:29:11 1999 +0000 Work on Extended Services. commit 30d40f3b6199b55b0bfbc59afabedf437330dacf Author: Adam Dickmeiss Date: Thu May 27 13:07:54 1999 +0000 Fix. commit 2c185557bb24fa795cee97d813074932e8cc6f78 Author: Adam Dickmeiss Date: Thu May 27 13:02:20 1999 +0000 Assigned OID for old DB Update (VAL_DBUPDATE0). commit c73dee95ff68d866ad3868e2494ac2325580b35a Author: Adam Dickmeiss Date: Wed May 26 15:24:26 1999 +0000 Fixed minor bugs regarding DB Update (introduced by previous commit). commit 3e8a6d354cf280b4a157796bae8d4ea713784247 Author: Adam Dickmeiss Date: Wed May 26 14:47:12 1999 +0000 Implemented z_ext_record. commit b23f8886419f5fa9f4a46ba15812ad02d1ca8e55 Author: Adam Dickmeiss Date: Wed May 26 13:49:12 1999 +0000 DB Update implemented in client (very basic). commit 18225043ecae8ca09b8e49fa047ecf7f314dcbfb Author: Adam Dickmeiss Date: Wed May 26 07:49:35 1999 +0000 C++ compilation. commit 68f9c30763ddbba9f25b6e893078ead2583c6f21 Author: Heikki Levanto Date: Wed May 19 08:26:22 1999 +0000 Added comments commit 891f66faece5ac308dc9a9ed021021841fbb712b Author: Heikki Levanto Date: Tue May 18 16:58:48 1999 +0000 Does yaz, client, server.lib, *and* ztest! commit 59c58f47d1a67496611b9a0f4eb71e9b1d8aa9b5 Author: Heikki Levanto Date: Tue May 18 16:03:50 1999 +0000 Compiles and links yaz.dll and client.exe, which seems to work. Server and ztest still missing commit ed4b5e42855bb04c65b4a8deb2be881e2af13daa Author: Adam Dickmeiss Date: Thu May 6 13:21:26 1999 +0000 Added tcpdchk.c. commit fd24afccaa7ffa98f8f39a43c56cc431d36a0ac5 Author: Adam Dickmeiss Date: Wed May 5 14:49:43 1999 +0000 Added ApS. commit bca4c4e39bb825d3cab14d9af01ac7f5dd5457a2 Author: Adam Dickmeiss Date: Thu Apr 29 07:31:23 1999 +0000 Changed tcpip_strtoaddr_ex so that only part 'till '/' is considered part of hostname. commit d6c907d206f3afa05de6cab2de81734946c24daf Author: Adam Dickmeiss Date: Wed Apr 28 15:17:01 1999 +0000 Fixed problem with Makefile and sub directories. commit d52639011c722745e5e6d563f8b6a41fb096a43b Author: Adam Dickmeiss Date: Tue Apr 27 08:34:10 1999 +0000 Modified odr_destroy so that file is not closed when file is 0. commit c591b6b2f9f567e259c536e4c312d9d76f0c58ea Author: Adam Dickmeiss Date: Mon Apr 26 07:25:25 1999 +0000 Implemented OtherInfo utility. commit 919441ddfbd885d783323cb1d23ee372d0be9ad0 Author: Adam Dickmeiss Date: Fri Apr 23 13:34:33 1999 +0000 Fixed bug in match_triple. Thanks to Franck Falcoz . commit dc0be0ca0f414a154581185f946426aba550bd89 Author: Adam Dickmeiss Date: Wed Apr 21 11:46:00 1999 +0000 Fixed bug in {en,de}coder for OtherInformation. commit e147ddf129696b470aed3cfcdb405af84ee56ef6 Author: Adam Dickmeiss Date: Tue Apr 20 09:56:47 1999 +0000 Added 'name' paramter to encoder/decoder routines (typedef Odr_fun). Modified all encoders/decoders to reflect this change. commit bf7ee634e855d15e955d06e7b225d2045abd518a Author: Adam Dickmeiss Date: Fri Apr 16 14:45:55 1999 +0000 Added interface for tcpd wrapper for access control. commit 742b23a913c14e0a4d39fa8f314300fea55c2352 Author: Adam Dickmeiss Date: Thu Apr 15 09:19:43 1999 +0000 Added COOKIE UserInfo OID. commit 27fe93072b78a3232f6ce368c63940e1bbef5db8 Author: Adam Dickmeiss Date: Fri Apr 9 12:16:11 1999 +0000 Added OtherInfo private OID proxy. commit 102fffd24eb36b4b8322b3f139166ce5f5a4b7d4 Author: Adam Dickmeiss Date: Wed Mar 31 11:18:24 1999 +0000 Implemented odr_strdup. Added Reference ID to backend server API. commit ba3b08ceb55b7448c0022892d6d013a107b26ab7 Author: Adam Dickmeiss Date: Wed Mar 31 11:15:37 1999 +0000 Fixed memory leaks in ccl_find_str and ccl_qual_rm. commit 2f97006aa778654d4ae5407c41292793ff2fce8f Author: Adam Dickmeiss Date: Wed Mar 31 11:11:14 1999 +0000 Function getprotobyname only called once. Minor change in tcpip_get to handle multi-threaded conditions. commit 52a3162e5220a69b5650b702653e3791918c24b0 Author: Adam Dickmeiss Date: Tue Mar 23 14:14:25 1999 +0000 Yet another fix. commit 9f37e63c44f09146effc68d3aa269d31c745bb12 Author: Adam Dickmeiss Date: Thu Mar 18 12:57:13 1999 +0000 Fixed bug in TargetInfo encoder/decoder. commit 546c28ba38f70ca66b6ce522df97645d9d5cefb9 Author: Adam Dickmeiss Date: Thu Mar 18 12:57:03 1999 +0000 Minor fix. commit 55d72035ddd00fcb6fe39a86023f472eb020c14b Author: Adam Dickmeiss Date: Thu Mar 11 15:26:51 1999 +0000 Fixed bug (introduced by previous commit). commit c066a043f79860daf37234db3509156a3fc9205f Author: Adam Dickmeiss Date: Thu Mar 11 11:12:07 1999 +0000 Added GNU readline support. HTML display in client. commit febd96e724a673b84f5db8f48dfb71c805c7f5e6 Author: Sebastian Hammer Date: Thu Feb 18 10:30:46 1999 +0000 Changed ES: Update OID commit 3e8dfca3d9632d64c9cba76a98b1adf6e5c65a1f Author: Sebastian Hammer Date: Thu Feb 18 10:30:29 1999 +0000 Added note about the ES: Update change commit f920402c075345a9e8de3bc8f5b513cba09bb58d Author: Adam Dickmeiss Date: Thu Feb 11 09:10:26 1999 +0000 Function nmem_init only mandatory on Windows. commit 26fdcc5e41254131ef755b14243c19d202b14d8e Author: Adam Dickmeiss Date: Tue Feb 2 13:57:28 1999 +0000 Uses preprocessor define WIN32 instead of WINDOWS to build code for Microsoft WIN32. commit eed3de307e48d66d45104148a1138e0a101cf3a1 Author: Adam Dickmeiss Date: Mon Feb 1 15:37:32 1999 +0000 Fixed minor bug introduced by previous commit. commit 49e9b34058467505c371057cb01425e877d6df02 Author: Adam Dickmeiss Date: Mon Feb 1 15:35:21 1999 +0000 Added XML display. commit 87ef7657b92bc53bd98e18ef5046ae3698a7fb01 Author: Adam Dickmeiss Date: Mon Jan 25 13:49:47 1999 +0000 Made data1_pr_tree make better printing of data1 buffers. commit 21ea17f766bb492a93154ec7b242653fa37dec91 Author: Adam Dickmeiss Date: Fri Jan 8 11:23:10 1999 +0000 Added const modifier to some of the BER/ODR encoding routines. commit a09c8bfc4f5f873400cfa411d73e58035e9e4f52 Author: Adam Dickmeiss Date: Tue Dec 15 12:45:42 1998 +0000 Minor change. commit 208f8e3130f2a3a4ebeac69a2097367ef8f1617e Author: Adam Dickmeiss Date: Mon Dec 14 14:48:05 1998 +0000 Fixed memory leak - happened when fetching MARC records. commit 9c515b4bffa3c99fec87d3bdfaba158aca8e1dc1 Author: Adam Dickmeiss Date: Thu Dec 3 11:33:04 1998 +0000 Added OID's for XML. commit 87e38ceac69db72baab73144743ba5a638ec984d Author: Adam Dickmeiss Date: Tue Nov 17 09:53:15 1998 +0000 Chagned project to include logrpn.c commit 93ba03e40c50a4216b871a24ba2aec4739c18b30 Author: Adam Dickmeiss Date: Tue Nov 17 09:52:59 1998 +0000 Fixed minor bug (introduced by previous commit). commit e207755675f8dbf552f1e0696077594e7fa68190 Author: Adam Dickmeiss Date: Mon Nov 16 16:02:32 1998 +0000 Added loggin utilies, log_rpn_query and log_scan_term. These used to be part of Zebra. commit 51a57f063cc48f3343ab59f10aab92b80d424eaf Author: Adam Dickmeiss Date: Mon Nov 9 13:39:45 1998 +0000 Fixed configure. commit 42eee1a00a498bd7a106363d85f804d163d3cfb6 Author: Adam Dickmeiss Date: Mon Nov 9 13:23:08 1998 +0000 Minor changes. commit 7c7a61e6c983a3f87a697597995ed885d8465a01 Author: Sebastian Hammer Date: Thu Nov 5 10:24:53 1998 +0000 Fixed typo in resourcetype commit d04c6957682517a2236c94dfbbec7eb8fbb4d8fa Author: Adam Dickmeiss Date: Tue Nov 3 10:14:12 1998 +0000 Changed definition of data1 node so that it uses less space. commit cacd7aaabab274094439a32b2876a865e06ca0dd Author: Adam Dickmeiss Date: Tue Nov 3 10:09:36 1998 +0000 Fixed bug regarding YC. commit f69d4aa4609ff3daa71733da1ea0fcd8322ab954 Author: Adam Dickmeiss Date: Wed Oct 28 15:09:59 1998 +0000 Added --with-yc option to configure. For the data1_node in data1.h: decreased size of localdata and removed member "line" which wasn't useful. commit ccbb2c2626db1995797199b57c99fd95d8d35a9e Author: Adam Dickmeiss Date: Wed Oct 28 10:28:35 1998 +0000 Minor changes for project. commit 938eac215351d662d5ed11efbd95f5e123f3195b Author: Adam Dickmeiss Date: Wed Oct 28 10:26:59 1998 +0000 New functions log_init_file, log_init_level, log_init_prefix. commit 8448f144099c16b7ab17b2547cc3a04816dcce07 Author: Adam Dickmeiss Date: Tue Oct 20 15:16:22 1998 +0000 Minor change to prevent warning. commit 25c96db16e4312d9936843d48442ddcd66a0c00d Author: Sebastian Hammer Date: Tue Oct 20 15:15:25 1998 +0000 Work commit 18b3066bd7ad40c86583503aa2d4a100c74c8c03 Author: Adam Dickmeiss Date: Tue Oct 20 15:13:45 1998 +0000 Minor fix regarding output for Item Order. commit 7fb350046d29651fbc27cf92aefde03ceff53895 Author: Sebastian Hammer Date: Tue Oct 20 14:00:30 1998 +0000 Fixed Scan commit 676a21e809c237ea03a72530126ce2c25b531be9 Author: Sebastian Hammer Date: Tue Oct 20 14:00:23 1998 +0000 Work commit f422693382524b11066ec4129ca9213effdb893a Author: Sebastian Hammer Date: Tue Oct 20 13:55:37 1998 +0000 Fixed Scan bug in asn and client commit f4fb653200d8de7ea39f89afba3a1c6a946fb167 Author: Sebastian Hammer Date: Tue Oct 20 13:23:15 1998 +0000 changed preferred pos to 1 commit ec63ca9a4271e2575a417346e67c45e84157ba35 Author: Adam Dickmeiss Date: Tue Oct 20 13:21:43 1998 +0000 Fixed scan response handler. commit a49837cbe6fcbeeb9ce857b0eeb942619ba80b5e Author: Adam Dickmeiss Date: Mon Oct 19 15:24:20 1998 +0000 New nmem utility, nmem_transfer, that transfer blocks from one NMEM to another. commit 576bbdac86159c56e0f609177a355e59e7cfc3a8 Author: Adam Dickmeiss Date: Mon Oct 19 14:16:36 1998 +0000 Fixed data1_gettagbyname. Bug introduced by previous revision. commit 8b0cb132d10388facca6fcdefb87b997e9c51203 Author: Sebastian Hammer Date: Sun Oct 18 22:33:35 1998 +0000 Added diagnostic dump of Item Order Eservice. commit 23e611c8f572fd6ae2a3aa9beed93948c4da5fb9 Author: Adam Dickmeiss Date: Sun Oct 18 07:48:56 1998 +0000 Fixed oid_getentbyoid so that it returns NULL when parsed oid is NULL. commit 21a7fea425de8b32ac71bbbb981e88e77e6a3428 Author: Adam Dickmeiss Date: Thu Oct 15 08:29:14 1998 +0000 Tag set type may be specified in reference to it using "tagset" directive in .abs-files and "include" directive in .tag-files. commit 62c71dc65bf251b5edc55b9583ba319336a51ded Author: Adam Dickmeiss Date: Thu Oct 15 08:26:23 1998 +0000 Added type cast to make C++ happy. commit cd4c2685a415533bd122c04adbdc3b90701ac6b3 Author: Per M. Hansen Date: Wed Oct 14 14:24:08 1998 +0000 Publisher changed from (2,3) to (2,31) in meta.abs. commit e93e1b6814d3e9cd8575f7f2d496bf3be83434b4 Author: Adam Dickmeiss Date: Wed Oct 14 13:32:35 1998 +0000 Added include of string.h. commit 45bfcdc6cfcb7af8b930fe49c43aeadfe5624f20 Author: Adam Dickmeiss Date: Wed Oct 14 13:31:56 1998 +0000 Bug fix. Bug introduced by previous commit. commit 90c3ff17bfb20a694faea88229b6230918818f16 Author: Adam Dickmeiss Date: Tue Oct 13 20:52:17 1998 +0000 Changed headers and removed obsolete ordinal spec from attsets. commit 8921101959d7544ec4691822357b1bcf08627097 Author: Adam Dickmeiss Date: Tue Oct 13 20:06:05 1998 +0000 Added changes. commit bf5a7e7603a4430bfd86ee30c8b18ade8101d169 Author: Adam Dickmeiss Date: Tue Oct 13 20:05:57 1998 +0000 Minor change. commit 63ce3b67bdea2b7cd0531f3f11ccbc8c94753455 Author: Adam Dickmeiss Date: Tue Oct 13 16:12:23 1998 +0000 Added support for Surrogate Diagnostics for Scan Term entries. commit cc5c16420eb491137840f6b0976a99a37573e7cb Author: Adam Dickmeiss Date: Tue Oct 13 16:11:11 1998 +0000 Added printf-format check for logf when using GNUC. commit 4482f2b095b641545987153d42c4069da9edf66e Author: Adam Dickmeiss Date: Tue Oct 13 16:10:16 1998 +0000 Added extra argument 'lineno' to function readconf_line. commit db9513f9eca4ef13d3cea779a695bb822fd973a9 Author: Adam Dickmeiss Date: Tue Oct 13 16:09:45 1998 +0000 Added support for arbitrary OID's for tagsets, schemas and attribute sets. Added support for multiple attribute set references and tagset references from an abstract syntax file. Fixed many bad logs-calls in routines that read the various specifications regarding data1 (*.abs,*.att,...) and made the messages consistent whenever possible. Added extra 'lineno' argument to function readconf_line. commit 2cfcdda457bc91588509f801ba55e956d37368f9 Author: Adam Dickmeiss Date: Tue Oct 13 16:03:37 1998 +0000 Better checking for invalid OID's in p_query_rpn. commit 23cfa431fda52535722e4efdc3f462995937e863 Author: Adam Dickmeiss Date: Tue Oct 13 16:01:52 1998 +0000 Implemented support for dynamic object identifiers. Function oid_getvalbyname now accepts raw OID's as well as traditional names. commit 853b3f256a6753ea6dc26f6123a4956740ed82b4 Author: Adam Dickmeiss Date: Tue Oct 13 16:00:17 1998 +0000 Implemented nmem_critical_{enter,leave}. commit 144325b3bf52d2408a6fe1c395ee955ec3b208c6 Author: Adam Dickmeiss Date: Tue Oct 13 15:58:36 1998 +0000 Minor fix in odr_getoidbystr_nmem. commit 0e3207ccc9893cb48c2f7938fedb9001ecbb9d71 Author: Adam Dickmeiss Date: Wed Sep 30 15:06:03 1998 +0000 Fixed LIB dependencies in Makefiles. commit db63853847b11ee3432b140fa28b23360db90007 Author: Adam Dickmeiss Date: Mon Sep 28 12:44:47 1998 +0000 Minor changes. commit d4727a15cd43e69241152bcdec5c8ad97c6c8695 Author: Adam Dickmeiss Date: Mon Sep 28 12:44:40 1998 +0000 Fixed bug in f_integer. commit 8030536c98d595898b316df5eb118b1d6398450c Author: Adam Dickmeiss Date: Tue Sep 22 09:41:21 1998 +0000 Fix. commit 142235dcf39ff59a20918e53abcf62f59fa9f2a4 Author: Adam Dickmeiss Date: Tue Sep 22 09:40:54 1998 +0000 Fixed Makefile. commit 16d8b52d5affdc95443895a2ac4a92dfcd5703eb Author: Adam Dickmeiss Date: Tue Sep 22 09:40:37 1998 +0000 Minor changes in sort spec. commit 962f5f857455567d9b56cc17d96eb95608a0222e Author: Adam Dickmeiss Date: Wed Sep 2 12:41:48 1998 +0000 Added decode stream in bend search structures. commit 30d8d86b830a88f1c8f5fef944b6d36150651b9b Author: Adam Dickmeiss Date: Tue Aug 25 16:19:37 1998 +0000 Minor changes to Makefile(s). commit 1fbf9907e66c5697b9537a1a4849295c05b12b6b Author: Adam Dickmeiss Date: Fri Aug 21 14:13:21 1998 +0000 Added GNU Configure script to build Makefiles. commit b5bc2a31ad5125dc6d3ed1b6e626f0b9d22618bb Author: Adam Dickmeiss Date: Wed Aug 19 16:10:03 1998 +0000 Changed som member names of DeleteResultSetRequest/Response. commit adfa93d3033913d04c134941f7035f00fd2f080b Author: Adam Dickmeiss Date: Mon Aug 3 10:23:55 1998 +0000 Fixed bug regarding Options for Sort. commit 3060b77b776350c6e677c06b3070542dba5c42b6 Author: Adam Dickmeiss Date: Mon Jul 20 12:38:41 1998 +0000 Implemented delete result set service to server API. commit 1b29df1d940a30bca2af0fb5c7e19961520bf230 Author: Adam Dickmeiss Date: Mon Jul 20 12:38:13 1998 +0000 More LOG_DEBUG-diagnostics. commit 9b639eeb66d918ee531668b405a6f4c4438c64af Author: Adam Dickmeiss Date: Mon Jul 20 12:37:06 1998 +0000 Added 'delete ' command. Changed open command so that it reconnects if already connected. commit 28418a65c9421ef2dc2779a4d8f5febbec3c36f2 Author: Adam Dickmeiss Date: Mon Jul 20 12:36:22 1998 +0000 Minor changes. commit 9fc822fe67ef4f5a898d9a85fbae7dd9a3435023 Author: Adam Dickmeiss Date: Mon Jul 20 12:35:57 1998 +0000 Added more memory diagnostics (when NMEM_DEBUG is 1). commit 348e11131385e72241a04997e90c8c77147e6423 Author: Adam Dickmeiss Date: Tue Jul 7 15:51:03 1998 +0000 Changed server so that it stops if bind fails - "address already in use" typically causes this. commit 3a14421799597d61196e2bb07bdd83396000cb45 Author: Adam Dickmeiss Date: Tue Jul 7 15:49:23 1998 +0000 Added braces to avoid warning. commit 5379711b958f1b4ae4148b1734f618e71b3dd6ef Author: Adam Dickmeiss Date: Tue Jul 7 15:49:01 1998 +0000 Reduced chunk size. commit 81503ca4c08bfaf4eb6782a9207cc33fa941a442 Author: Adam Dickmeiss Date: Fri Jul 3 14:21:27 1998 +0000 Added critical sections for pthreads-library. Thanks to Ian Ibbotson, Fretwell Downing Informatics. commit 6a39772ad0cbd1bcb5d0984cd783d4a9e06bdfdb Author: Adam Dickmeiss Date: Mon Jun 29 07:59:17 1998 +0000 Minor fix. commit 4519f45627820ab5acbb40400fc3667b08c140d3 Author: Sebastian Hammer Date: Fri Jun 26 11:17:23 1998 +0000 v2+ commit c03149b852e2937bd0637b21c3058a48dd25a739 Author: Adam Dickmeiss Date: Tue Jun 23 15:37:50 1998 +0000 Added type cast to prevent warning. commit 48096bb041fcc45b11666ad058963a633a0ec3db Author: Adam Dickmeiss Date: Mon Jun 22 11:32:35 1998 +0000 Added 'conditional cs_listen' feature. commit ec29e37cd269b330eb493157dedf9aacf5c6ca46 Author: Adam Dickmeiss Date: Tue Jun 9 13:55:06 1998 +0000 Minor changes. commit 3aefb04b1ebd1a699ab732b7504fdf25a2c35fa7 Author: Adam Dickmeiss Date: Tue Jun 9 13:21:32 1998 +0000 Added "other" element paths. commit 29001d9d8d6830e25a4430c7c3cb51408db984d0 Author: Adam Dickmeiss Date: Mon Jun 8 14:26:41 1998 +0000 Fixed bug in f_queryTypeDetails. commit 5a43720eeca6175e7eba0672a9dc622c24125996 Author: Adam Dickmeiss Date: Fri Jun 5 08:58:48 1998 +0000 Fixed un-initialised var in f_rpnCapabilities. commit cbd030fea600f6fb59fc377dec5efc2c708584bb Author: Adam Dickmeiss Date: Fri Jun 5 08:57:43 1998 +0000 Fixed problem with function wordlen. commit dcf5a575f87f61a78dfd2d82f6c480ddc72e273b Author: Adam Dickmeiss Date: Tue Jun 2 14:32:45 1998 +0000 Changed usmarc configuration files. commit 5772fdf31f5f93854570470b4956ae3faf6dcaf5 Author: Adam Dickmeiss Date: Tue Jun 2 10:23:07 1998 +0000 Minor changes. commit 2156e17830e0e3ba739800d6616fa045b0fe5565 Author: Adam Dickmeiss Date: Wed May 27 16:57:06 1998 +0000 Support for surrogate diagnostic records added for bend_fetch. commit 053b1a0ea316109ad6735c877c1472485458e31d Author: Adam Dickmeiss Date: Wed May 27 16:55:54 1998 +0000 Minor changes. commit 3e506bbbebc55bd870aaf2be4d0014cec0779851 Author: Adam Dickmeiss Date: Wed May 20 13:51:46 1998 +0000 Better documention in top-level Makefile. commit 63383353371a1a5ec1d84a42b56c44d6fdf09f07 Author: Adam Dickmeiss Date: Wed May 20 09:55:32 1998 +0000 Function tcpip_get treats EINPROGRESS error in the same way as EWOULDBLOCK. EINPROGRESS shouldn't be returned - but it is on Solaris in some cases. commit ce9012da65c7aec337e292f3b077ae954532501a Author: Adam Dickmeiss Date: Wed May 20 09:52:39 1998 +0000 Removed 'dead' definition. commit 0d9eca26da6a9369bb00efd75a9472380526f547 Author: Adam Dickmeiss Date: Mon May 18 13:06:50 1998 +0000 Changed the way attribute sets are handled by the retriaval module. Extended Explain conversion / schema. Modified server and client to work with ASN.1 compiled protocol handlers. commit 2f252f9a14edf0383d551b6aed12597c745cc264 Author: Adam Dickmeiss Date: Mon May 18 10:14:08 1998 +0000 Minor change - removed 'dead' definitions. commit fa0ebb67bb67a5f57b8a198e3e477cd84c064d26 Author: Adam Dickmeiss Date: Mon May 18 10:13:07 1998 +0000 Fixed call to es_request handler - extra argument was passed. commit e1be891b28d0123675ddcefe37587b0546f95936 Author: Adam Dickmeiss Date: Mon May 18 10:10:40 1998 +0000 Minor change to avoid C++ warning. commit 081bf3419fb97408aea83964cac9f130c6d1bbdc Author: Adam Dickmeiss Date: Mon May 18 10:10:01 1998 +0000 Added Explain-schema and Explain-tagset to OID database. commit ac9747b9c363db9de92cdcb83605ff274bfdcaa9 Author: Per M. Hansen Date: Mon Apr 27 10:17:03 1998 +0000 Copy files to binary directory. commit 87c7c5348b589a0acc3d84d8a88f3789e76df6a2 Author: Adam Dickmeiss Date: Sun Apr 26 11:08:09 1998 +0000 Fixed Makefile. commit c96b62f6352ee14de1a0c868a90c626d522664ed Author: Adam Dickmeiss Date: Sun Apr 26 10:55:48 1998 +0000 Fixed project dependencies. commit 4e0710badb00d3957d110ce661cec2f32148b2d0 Author: Per M. Hansen Date: Tue Apr 21 10:04:30 1998 +0000 Added Universe resource report. commit 8de81d57ebf189d37a160fe66df667b50ba7cb86 Author: Sebastian Hammer Date: Fri Apr 17 11:04:05 1998 +0000 *** empty log message *** commit bed56a5a945178d0b0ed76601753770fb581504f Author: Adam Dickmeiss Date: Thu Apr 2 14:33:29 1998 +0000 Minor changes. commit 4b867394d5d5dda2be8427c96e0fb0fd07eddbdc Author: Adam Dickmeiss Date: Thu Apr 2 08:27:36 1998 +0000 Minor change in definition of Z_TargetInfo. Furhter work on Explain schema - added AttributeDetails. commit f94999cca65bd3464c1c6db8b5046e0a010b0c7f Author: Adam Dickmeiss Date: Tue Mar 31 15:13:19 1998 +0000 Development towards compiled ASN.1. commit b436ce38e1e619d2225c7c75c1f0de841aa13bad Author: Adam Dickmeiss Date: Tue Mar 31 11:07:44 1998 +0000 Furhter work on UNIverse resource report. Added Extended Services handling in frontend server. commit 3248693ab32c811f109a70d653622c087977b418 Author: Adam Dickmeiss Date: Fri Mar 20 17:29:20 1998 +0000 Include of odr_use.h in odr.h. Added prototype for odr_enum. commit 84b60b9a8d2052540541726390fde416c59e1f40 Author: Adam Dickmeiss Date: Fri Mar 20 14:46:06 1998 +0000 Added UNIverse Resource Reports. commit bb28f91640a69a39e485e4c67b636fb17b3bb6af Author: Adam Dickmeiss Date: Fri Mar 20 14:45:27 1998 +0000 Implemented odr_set_of and odr_enum. commit 74582047b4f19d220c6722a85f4651dc742f083f Author: Adam Dickmeiss Date: Fri Mar 20 14:45:01 1998 +0000 Implemented odr_enum and odr_set_of. commit 90b607d71dc080e2d6d9bd9670d8e20431c9f2a0 Author: Adam Dickmeiss Date: Mon Mar 16 12:21:15 1998 +0000 Fixed problem with tag names that weren't set to the right value when wildcards were used. commit b995c31a59a57b7c338e57a4067028bb7619e64e Author: Adam Dickmeiss Date: Thu Mar 12 11:28:45 1998 +0000 Fix: didn't set root member of tagged node in function. data1_add_insert_taggeddata. commit 1ff2e27ec44aebe0c9f6cc5a26ea19cd6e97b9e8 Author: Sebastian Hammer Date: Fri Mar 6 11:47:48 1998 +0000 Updated meta schema to reflect Dublin Core additions to TagsetG commit e1af980ed4466d784db2395ad5bdddadb8a24504 Author: Adam Dickmeiss Date: Thu Mar 5 08:15:32 1998 +0000 Implemented data1_add_insert_taggeddata utility which is more flexible than data1_insert_taggeddata. commit 964a340466d80d4c992aaa5a81159f6c13fb70d8 Author: Adam Dickmeiss Date: Thu Mar 5 08:12:48 1998 +0000 Added description. commit 559aecba0e61eca34706023436692ba23faa29a7 Author: Adam Dickmeiss Date: Thu Mar 5 08:09:03 1998 +0000 Minor change to make C++ happy. commit 475b8ce3047108dcf7a87251733299077d7001e7 Author: Adam Dickmeiss Date: Thu Mar 5 08:07:58 1998 +0000 Make data1 to EXPLAIN ignore local tags in root. commit 413ba1f52face6dc6c160b24e64eb650591784ac Author: Adam Dickmeiss Date: Thu Mar 5 08:05:10 1998 +0000 Added a few casts to make C++ happy. commit f4be2b662141a53c7b9a8a9b410b549dfd2bc1fb Author: Adam Dickmeiss Date: Fri Feb 27 14:08:04 1998 +0000 Added const to some char pointer arguments. Reworked data1_read_node so that it doesn't create a tree with pointers to original "SGML"-buffer. commit 852a501e43f29602c69e7f12faf241b18f2479ac Author: Adam Dickmeiss Date: Fri Feb 27 14:05:34 1998 +0000 Added printing of integer nodes. commit 6f2577984a4b90d7ef4c4565b619927cd45c9132 Author: Adam Dickmeiss Date: Fri Feb 27 14:04:55 1998 +0000 Fixed bug in statserv_remove. commit 84842745a27a08eb4a6c1ea971dfcc320c81bac6 Author: Adam Dickmeiss Date: Mon Feb 23 10:57:09 1998 +0000 Take care of integer data nodes as well in conversion. commit 79fbddfe6b191ef88aae59f728af93d68252448c Author: Adam Dickmeiss Date: Mon Feb 16 10:20:42 1998 +0000 Added prt-dat.c. commit 97e0cd0e1341f4b75216dec7c95f7a4627f4e63d Author: Adam Dickmeiss Date: Wed Feb 11 13:48:00 1998 +0000 Changes. commit 044d170f0a963555486df54653cd2fdc5815928b Author: Adam Dickmeiss Date: Wed Feb 11 11:53:21 1998 +0000 Changed code so that it compiles as C++. commit 6565e283922168b7a1284d0c4164f94c833f6301 Author: Adam Dickmeiss Date: Tue Feb 10 17:25:21 1998 +0000 Updated tagset-G and M. commit 460e6384de368d1c41d544d7cb8cd95043cbe821 Author: Adam Dickmeiss Date: Tue Feb 10 15:32:03 1998 +0000 Added new Object Identifiers. commit fa86345c14168c451f8c76b71309b27230bfee44 Author: Adam Dickmeiss Date: Tue Feb 10 15:31:46 1998 +0000 Implemented date and time structure. Changed the Update Extended Service. commit 683bd26f52e6f7791627c60a08f14e4532e01769 Author: Adam Dickmeiss Date: Tue Feb 10 15:30:32 1998 +0000 Changes. commit ee1eaa955f545d57c0ff8ce4ce210db95a4d817c Author: Adam Dickmeiss Date: Tue Feb 10 11:03:56 1998 +0000 Added support for extended handlers in backend server interface. commit 20928b0dc31d2895dcc926f1c4192abaf25eca36 Author: Adam Dickmeiss Date: Tue Feb 10 11:03:06 1998 +0000 Implemented command refid. Client prints reference-ID's, when present, in responses. commit 00d32932ca2e4e86e83239bcfea3ab17007211eb Author: Adam Dickmeiss Date: Tue Feb 10 11:01:11 1998 +0000 Minor. commit dc00fb12c66d5718e5764daaaa9319749d67ea21 Author: Adam Dickmeiss Date: Tue Feb 10 11:00:59 1998 +0000 *** empty log message *** commit 11ef03208ae620bdba76aa18c924e83b1d433368 Author: Adam Dickmeiss Date: Tue Feb 10 10:29:37 1998 +0000 Changed definition of Z_Triple in file prt-grs.h - member boolean renamed to zboolean. Some C++ compilers complained about the name. commit 8f7995bdfe85beb2ff6fa08e99bb05242f3bf71f Author: Adam Dickmeiss Date: Tue Feb 10 10:28:56 1998 +0000 Added app_name, service_dependencies, service_display_name and options_func. options_func allows us to specify a different function to interogate the command line arguments. The other members allow us to pass the full service details accross to the service manager (CW). commit 7851330f91232de8147b1b9653d3e3d7069b5c06 Author: Adam Dickmeiss Date: Fri Jan 30 15:32:57 1998 +0000 1.4pl2. commit a807bde38544a7aa45dd2988e504a1acb3fd30c0 Author: Adam Dickmeiss Date: Fri Jan 30 15:24:57 1998 +0000 Fixed bug in inetd code. The server listened on tcp:@:9999 even though it was started in inetd mode. commit 43b1963c0e75ef802c8f5dd37bbc587d63188e72 Author: Adam Dickmeiss Date: Thu Jan 29 14:26:42 1998 +0000 Updated. commit deb4dce69ad5af12594d5712c8b50d8b84f8d9a0 Author: Adam Dickmeiss Date: Thu Jan 29 14:08:52 1998 +0000 Better sort diagnostics. commit 6a7d650e44134d161a4614a5e68245216dec2b19 Author: Adam Dickmeiss Date: Thu Jan 29 14:08:43 1998 +0000 Updated README. commit ffb88e8bb97c6e24989b7f04b8bbf1a4203d2f72 Author: Adam Dickmeiss Date: Thu Jan 29 13:42:18 1998 +0000 Updated. commit 7574c044d6c2dc8ede5c7c406f9939215a220260 Author: Adam Dickmeiss Date: Thu Jan 29 13:30:23 1998 +0000 Better event handle system for NT/Unix. commit b18eb98c47d7c5aa8dc816058d6a95d07286eff7 Author: Adam Dickmeiss Date: Thu Jan 29 13:28:23 1998 +0000 YAZ version 1.4pl1. commit 68f97633042d0d38061ff47aad35b46b3c4ab9a8 Author: Adam Dickmeiss Date: Thu Jan 29 13:18:29 1998 +0000 Removed Unicode file. commit 1f6254e4d56700f2862a549a77daeb6c22d1f8d4 Author: Adam Dickmeiss Date: Thu Jan 29 13:17:56 1998 +0000 Added sort. commit e50b06029483660fdcd60cb7f723baadfda34a0a Author: Adam Dickmeiss Date: Thu Jan 29 13:16:02 1998 +0000 Added dummy sort in test server. commit 7d30eaa32473c738d9fe494a526044e9cb9be658 Author: Adam Dickmeiss Date: Thu Jan 29 13:15:35 1998 +0000 Implemented sort for the backend interface. commit 0fa324b5444b23e6ad84796393644dcd6aeb7469 Author: Adam Dickmeiss Date: Thu Jan 29 13:13:39 1998 +0000 Function zget_presentRequest fills resultSetId with "default" instead of "Default". commit 2da6a9a95d6007eca27f715dbf77bea323cb9069 Author: Sebastian Hammer Date: Wed Jan 14 09:53:26 1998 +0000 Added a bit more info to dump. commit 62f35bd310a0201576b78d7f6695e8ff3de6ae3c Author: Adam Dickmeiss Date: Wed Jan 7 13:51:45 1998 +0000 Minor change. commit a7827306d9d9fd634a4b4336944bee781fa61e32 Author: Adam Dickmeiss Date: Wed Jan 7 13:34:06 1998 +0000 Fixed Makefile(s). commit 1ca987b3a11334e4b0ad24c372162f5ecbf28847 Author: Adam Dickmeiss Date: Wed Jan 7 12:59:27 1998 +0000 Updated Makefiles so that there is no dependancy on ELIBS. commit 084748e546e8f050b32b29bee29da13a1f6d9969 Author: Adam Dickmeiss Date: Wed Jan 7 12:58:22 1998 +0000 Using fgets instead of gets. commit fb9fcec623beac87912604f17c680fad3def4a1b Author: Adam Dickmeiss Date: Mon Jan 5 09:04:57 1998 +0000 Fixed bugs in encoders/decoders - Not operator (!) missing. commit cef1af6f2b0a094a907dec1a7bd1c4f6a42ef13c Author: Adam Dickmeiss Date: Mon Jan 5 09:03:37 1998 +0000 1998. commit 75e5b90dc0e8d15cb059025b61169f5a1bd113ca Author: Adam Dickmeiss Date: Mon Jan 5 09:03:12 1998 +0000 Moved to 1998. commit f7d86f5de3de80dcd56b7f5206d46203095eaf36 Author: Adam Dickmeiss Date: Thu Dec 18 10:51:30 1997 +0000 Implemented sub-trees feature for schemas - including forward references. commit 62e356bd92b3ab4c97d82dfdce290ca84f0759ca Author: Adam Dickmeiss Date: Fri Dec 12 06:32:33 1997 +0000 Added include of string.h. commit ed052a0eef82918aa53056c70b15e5b268fe0980 Author: Adam Dickmeiss Date: Tue Dec 9 16:28:04 1997 +0000 Changes. commit 4090fc5c7b77769020633d09cf63b325aceaf49a Author: Adam Dickmeiss Date: Tue Dec 9 16:18:16 1997 +0000 Work on EXPLAIN schema. First implementation of sub-schema facility in the *.abs files. commit 237dda955eb78cb6339c5dc3fc7be1246dafa4fb Author: Adam Dickmeiss Date: Tue Dec 9 16:17:09 1997 +0000 Fix bug regarding variants. Tags with prefix "var" was incorrectly interpreted as "start of variants". Now, only "var" indicates such start. Cleaned up data1_read_node so tag names and variant names are copied and not pointed to by the generated data1 tree. Data nodes still point to old buffer. commit c8cc5d797f7f1b2512bd34154c78360c1eeebb79 Author: Adam Dickmeiss Date: Tue Dec 9 16:11:02 1997 +0000 Assume strerror is defined on Unixes as well. It's standard ANSI. commit 28231d4c83085109d800c6689ae778cc041c51e7 Author: Adam Dickmeiss Date: Mon Nov 24 11:33:56 1997 +0000 Using function odr_nullval() instead of global ODR_NULLVAL when appropriate. commit 7674cd40af86e353235cb1b509f4b4687167cdf2 Author: Adam Dickmeiss Date: Wed Nov 19 10:30:06 1997 +0000 More explain work. commit dd307c65deac044b20c13e99aad2de0d8608a8b7 Author: Adam Dickmeiss Date: Tue Nov 18 09:51:08 1997 +0000 Removed element num_children from data1_node. Minor changes in data1 to Explain. commit 392d9ab6e5ff63fff887c3456d05853161c7fd2c Author: Adam Dickmeiss Date: Fri Nov 7 13:33:54 1997 +0000 Changes. commit 55c6ac70550af857d80ef233147dbc986e4095e1 Author: Adam Dickmeiss Date: Fri Nov 7 13:31:47 1997 +0000 Added NT Service name part of statserv_options_block. Moved NT service utility to server library. commit 9989790d80d5953f51e088712cb1b9113303b694 Author: Adam Dickmeiss Date: Thu Nov 6 11:36:44 1997 +0000 Implemented variant match on simple elements -data1 tree and Espec-1. commit 5c61f82e12a89cbff40d962d35f487552f709ff7 Author: Adam Dickmeiss Date: Wed Nov 5 09:20:51 1997 +0000 Minor change. commit 5bdebd49e54680d214fe5d87dda4ba41f1a3433b Author: Adam Dickmeiss Date: Wed Nov 5 09:18:31 1997 +0000 The client handles records with no associated syntax. commit 068a5a7412f492019b4d6f5e89158098d44368f7 Author: Adam Dickmeiss Date: Fri Oct 31 12:20:07 1997 +0000 Improved memory debugging for xmalloc/nmem.c. References to NMEM instead of ODR in n ESPEC-1 handling in source d1_espec.c. Bug fix: missing fclose in data1_read_espec1. commit 6063e06ec904a68cff5b1497c73a9022389af3ed Author: Adam Dickmeiss Date: Wed Oct 29 12:00:37 1997 +0000 Routine zget_SearchRequest fills resultSetName member with "default" instead of "Default". commit 41c09d8b6ab58b149435a6f87cd9f738fe7d86f5 Author: Adam Dickmeiss Date: Mon Oct 27 14:04:21 1997 +0000 Minor change. commit bc6408d690659dbefebbbde30e284962aeee6e24 Author: Adam Dickmeiss Date: Mon Oct 27 14:04:07 1997 +0000 New debug utility, data1_pr_tree, that dumps a data1 tree. commit c4159a200151b1704984ec01f48356fbc757372d Author: Adam Dickmeiss Date: Mon Oct 27 14:03:01 1997 +0000 Added new member to statserver_options_block, pre_init, which specifies a callback to be invoked after command line parsing and before the server listens for the first time. commit 62046e165c034a360b9ec8b5213bbb0e4b8fbca8 Author: Adam Dickmeiss Date: Mon Oct 27 13:55:03 1997 +0000 Fixed memory leak: member response wasn't freed when queue was destroyed. commit 52acac488c6f474a5260a2195b0b31ff68961924 Author: Adam Dickmeiss Date: Mon Oct 27 13:54:18 1997 +0000 Changed structure field in data1 node to be simple string which is "unknown" to the retrieval system itself. commit 1374fb292f8bf773290f1662460c422a3ff5a60d Author: Adam Dickmeiss Date: Mon Oct 27 13:52:46 1997 +0000 Header yaz-util includes all YAZ utility header files. commit 399d7c3b7664bf9c9c5cf58ccbcf80aabd4a9039 Author: Adam Dickmeiss Date: Mon Oct 6 09:37:53 1997 +0000 Added prototype for data1_get_map_buf. commit 78223496659afe7c31285f335b1eafc45a9a3b6a Author: Adam Dickmeiss Date: Mon Oct 6 09:09:52 1997 +0000 Function mmem_exit releases memory used by the freelists. commit 88d0696e5d482ccfeef78cce71ccfd38669d8a16 Author: Adam Dickmeiss Date: Mon Oct 6 08:55:07 1997 +0000 Changed log_init so that previous (if any) is closed. commit 03cb3a09ea39f9852123c7ef5ee6357950b0d2b8 Author: Sebastian Hammer Date: Thu Oct 2 12:16:51 1997 +0000 Smll commit 78400d74853fa7ada46541b93bb9c1f6689b5e1e Author: Sebastian Hammer Date: Thu Oct 2 12:10:24 1997 +0000 Attempt to fix bug in especs commit 79071b9f48a74b3cf2894dbe5430729bad25055d Author: Sebastian Hammer Date: Thu Oct 2 12:09:05 1997 +0000 CHanged date commit 0eb2cd457af935a98a1ae9d3b3cbb7c83cf3e368 Author: Adam Dickmeiss Date: Tue Sep 30 11:50:04 1997 +0000 Added handler data1_get_map_buf that is used by data1_nodetomarc. commit a6fdb006dd7e6a2bda36af3809c60ed2b2662f2c Author: Adam Dickmeiss Date: Tue Sep 30 11:48:12 1997 +0000 Fixed bug introduced by previous commit. commit 8a670a6fb183776cd612be6f537d0d6d5bc62d5c Author: Adam Dickmeiss Date: Tue Sep 30 11:47:47 1997 +0000 Added function 'cause checkergcc doesn't include assert handler. commit 87fc0addbe9e893294d402551e2ba67ba53417ec Author: Adam Dickmeiss Date: Tue Sep 30 09:33:10 1997 +0000 Minor changes - removed indentation of ifdef. commit 79bf9f1b8b224b6b7323b280fca704591ac17324 Author: Adam Dickmeiss Date: Mon Sep 29 13:18:59 1997 +0000 Added function, oid_ent_to_oid, to replace the function oid_getoidbyent, which is not thread safe. commit 18cc954000e6b33d2316faea946f0576602b60f3 Author: Adam Dickmeiss Date: Mon Sep 29 09:01:19 1997 +0000 Changed CCL parser to be thread safe. New type, CCL-parser, declared and a create/destructor ccl_parser_create/ccl_parser_destroy has been added. commit 5e2a2c9901994e4e772a499d5fc03c9d044ca80a Author: Adam Dickmeiss Date: Mon Sep 29 08:58:25 1997 +0000 Fixed conversion of trees so that true copy is made. commit 88e45d920d4fedb9557e896cf9448f9ab9cfb422 Author: Adam Dickmeiss Date: Mon Sep 29 08:56:37 1997 +0000 Changed CCL parser to be thread safe. New type, CCL_parser, declared and a create/destructers ccl_parser_create/ccl_parser/destory has been added. commit 16ca5674650eb3a7e0cc4bb8bd0fd66057bffe1e Author: Adam Dickmeiss Date: Mon Sep 29 07:24:42 1997 +0000 Added changes. commit 1f81de34041641b984664688688bd77ec3f0436a Author: Adam Dickmeiss Date: Mon Sep 29 07:24:21 1997 +0000 Updated project files, README, TODO, etc. commit 07105c9a04e982a8838dc25154998d4f60a8be34 Author: Adam Dickmeiss Date: Mon Sep 29 07:22:26 1997 +0000 Added static modifier to msg_tab. commit 9e83ba1ba78f4922d8e6f5434a263e2d339ea4b5 Author: Adam Dickmeiss Date: Mon Sep 29 07:20:31 1997 +0000 Client code uses nmem_init. commit 1f7958b4f3d909e12b5d76ec9f5a080f0fbca61f Author: Adam Dickmeiss Date: Mon Sep 29 07:19:32 1997 +0000 Server library uses nmem_init/nmem_exit. The log prefix no longer includes leading path on NT. commit 049f10d4442fb4a562331d465ec6196e17e77423 Author: Adam Dickmeiss Date: Mon Sep 29 07:17:31 1997 +0000 Added typecast to avoid warnings on MSVC. commit a2a7abe97309bb4b8e153145a00bd9817957dad7 Author: Adam Dickmeiss Date: Mon Sep 29 07:16:14 1997 +0000 Array cs_errlist no longer global. commit c287183a2eb9f42d40b8ba1293d98068ebe02002 Author: Adam Dickmeiss Date: Mon Sep 29 07:15:25 1997 +0000 Changed use of setsockopt to avoid warnings on MSVC. commit 6f4d57a5ce5f3f291ce118d8877c95d22ceb4e36 Author: Adam Dickmeiss Date: Mon Sep 29 07:14:16 1997 +0000 New functions nmem_init/nmem_exit to init/close NMEM system. commit a95a789a11a25cf2002a51ce1028f56c48e24b8f Author: Adam Dickmeiss Date: Mon Sep 29 07:13:43 1997 +0000 Changed type of a few variables to avoid warnings. commit 84e4c0195cfd14430102ccb7bc9deeb8951b55d1 Author: Adam Dickmeiss Date: Mon Sep 29 07:13:13 1997 +0000 Minor changes. commit eb0f67241481fb645a377b1c5df9683f8f1bd2fb Author: Adam Dickmeiss Date: Mon Sep 29 07:12:50 1997 +0000 NMEM thread safe. NMEM must be initialized before use (sigh) - routine nmem_init/nmem_exit implemented. commit a1863a0dc871b97b6fffe0f221e9c552c683848e Author: Adam Dickmeiss Date: Fri Sep 26 09:41:55 1997 +0000 Updated client to handle multiple diagnostics. commit 2c73c63dbd44310ca9a06b20d82e01f7ad617ddc Author: Adam Dickmeiss Date: Wed Sep 24 13:35:44 1997 +0000 Added two members to data1_marctab to ease reading of weird MARC records. commit 191f86396f357a0d26df67ce6b7d9ccb23f3e207 Author: Adam Dickmeiss Date: Wed Sep 24 13:29:40 1997 +0000 Added verbose option -v to marcdump utility. commit 07f19b4ed398c181a0ea8a9fb581f8098de6eec2 Author: Adam Dickmeiss Date: Mon Sep 22 12:33:41 1997 +0000 Fixed bug introduced by previous commit. commit 33ec719e54ba8b5cc86c7745ebcbcfa572eb3e0d Author: Adam Dickmeiss Date: Thu Sep 18 08:48:09 1997 +0000 Fixed minor bug that caused log_init to ignore filename. commit beea0cfaabaad70258dcaaa6b082a324e8f7e60f Author: Adam Dickmeiss Date: Thu Sep 18 08:47:17 1997 +0000 Added better doc about windows. commit 113640450c45ca7ac96285cc8ca666bfd597ed21 Author: Sebastian Hammer Date: Wed Sep 17 13:30:34 1997 +0000 Added RTF version of YAZ doc commit dd4eea1c142f1f4b6d2ec6343891d99d4fb7a269 Author: Adam Dickmeiss Date: Wed Sep 17 12:28:24 1997 +0000 Introduced new 'global' data1 handle. commit 94bebd449fe1a96a21fd39fb2b3549b5de9c11b1 Author: Adam Dickmeiss Date: Wed Sep 17 12:25:49 1997 +0000 First Unicode attempt. commit 6517fa53d35512887780fd07de5667940da18a9e Author: Adam Dickmeiss Date: Wed Sep 17 12:10:26 1997 +0000 YAZ version 1.4. commit 9006495b0949ec4c474866cb69376653540b1aab Author: Adam Dickmeiss Date: Tue Sep 9 10:10:18 1997 +0000 Another MSV5.0 port. Changed projects to include proper library/include paths. Server starts server in test-mode when no options are given. commit 8fcf022b257ac4321f13dd1b9045a01d1535992b Author: Adam Dickmeiss Date: Fri Sep 5 15:26:43 1997 +0000 Added ODR encode in search and scen bend request structures. Fixed a few enums that caused trouble with C++. commit 7eb2f0de616840d9a340519eac4c271820cd1248 Author: Adam Dickmeiss Date: Fri Sep 5 09:50:55 1997 +0000 Removed global data1_tabpath - uses data1_get_tabpath() instead. commit 44c7c8b6a256ed36e88ea3fbe4d6e88c202b1e23 Author: Adam Dickmeiss Date: Thu Sep 4 14:19:13 1997 +0000 Added credits. commit 5c4ee092bd344807137486d591fa1d03dce868e9 Author: Adam Dickmeiss Date: Thu Sep 4 13:51:58 1997 +0000 Added data1 to marc conversion with indicators. commit e7abd38ba0b6a5076d710a9bdc1eecd22abe00a8 Author: Adam Dickmeiss Date: Thu Sep 4 13:50:31 1997 +0000 Bug fix in ztest. commit 17d98abc1430e5be0973eeeb22dbd31896c5bedc Author: Adam Dickmeiss Date: Thu Sep 4 13:49:05 1997 +0000 Minor changes. commit 542c22e17883f15a72d783371891b492cbd4b80c Author: Adam Dickmeiss Date: Thu Sep 4 13:48:04 1997 +0000 Added data1 to marc conversion. commit 997adca73354c0845fc2290eec08376a1d10de95 Author: Adam Dickmeiss Date: Thu Sep 4 13:46:40 1997 +0000 Added ztest. commit 7ac51c067e1306e5451d10dca49ddaf5a0f61cbc Author: Adam Dickmeiss Date: Thu Sep 4 13:45:17 1997 +0000 Added UNImarc to list of available syntaxes. commit a897ee8640a92d11e5454c45b637b6644972d8b9 Author: Adam Dickmeiss Date: Thu Sep 4 07:59:29 1997 +0000 Added atoin.o. commit 082304e19f807fdd71b4810cc9e84492294a1c5d Author: Adam Dickmeiss Date: Thu Sep 4 07:59:02 1997 +0000 Added include of xmalloc.h. commit 53b093ecc1472f537c11a5392831740eeb3753e5 Author: Adam Dickmeiss Date: Thu Sep 4 07:58:36 1997 +0000 Added prototype for atoi_n. commit b5961610191b8bd0e1cb2124bac964e2bbdf6e87 Author: Adam Dickmeiss Date: Thu Sep 4 07:57:51 1997 +0000 Definition of ISO2709 control characters to this file. commit 613ae477d12bbe5ab06383a4c2372d1e4a6d2b62 Author: Adam Dickmeiss Date: Thu Sep 4 07:57:01 1997 +0000 When using UNIX, O_BINARY is defined if it's not already defined. commit c3cba493ccadbc990e8291eb707b0bf461c0e97f Author: Adam Dickmeiss Date: Thu Sep 4 07:54:34 1997 +0000 Right hande side operand of yaz_matchstr may include a ? in which case it returns "match ok". commit 4fa1a39b60253db85291f4001a92341e4eaf7faa Author: Adam Dickmeiss Date: Thu Sep 4 07:53:02 1997 +0000 Added include readconf.h. commit 2a782cebfa5189908617c8938ea0baac5d636587 Author: Adam Dickmeiss Date: Thu Sep 4 07:52:27 1997 +0000 Moved atoi_n function to separate source file. commit 43613b8c6c0d998668f15f493ea3612f55384279 Author: Adam Dickmeiss Date: Mon Sep 1 09:31:48 1997 +0000 Removed definition statserv_remove from statserv.h to eventl.h. commit 9a2b41f58cf220c9583b654ff77776a18e958b44 Author: Adam Dickmeiss Date: Mon Sep 1 09:31:26 1997 +0000 Removed definition statserv_remove to eventl.h. (A hack really). commit 9cf3ca740ee80f3242af98f5630450ca17078e9d Author: Adam Dickmeiss Date: Mon Sep 1 09:30:39 1997 +0000 Added include of yaz-util.h. commit 14136ccc562d5d894fb2ba59304ae64d3516f518 Author: Adam Dickmeiss Date: Mon Sep 1 08:58:04 1997 +0000 Removed declaration of data1_matchstr since it's a macro. commit 2203bb027f811b89e75ef2c743232f97eaf1464f Author: Adam Dickmeiss Date: Mon Sep 1 08:55:52 1997 +0000 New windows NT/95 port using MSV5.0. Test server ztest now in separate directory. When using NT, this test server may operate as an NT service. Note that the service.[ch] should be part of generic, but it isn't yet. commit 6b8dc2364e08641a6c6c83b6ec8a16cb33df9119 Author: Adam Dickmeiss Date: Mon Sep 1 08:54:12 1997 +0000 New windows NT/95 port using MSV5.0. Made prefix query handling thread safe. The function options ignores empty arguments when met. commit 69e1deffc8ce5541d72110417f9e555f7e33aac2 Author: Adam Dickmeiss Date: Mon Sep 1 08:52:58 1997 +0000 New windows NT/95 port using MSV5.0. The test server 'ztest' was moved a separate directory. MSV5.0 project server.dsp created. As an option, the server can now operate as an NT service. commit d690f39cdf024d17ef66fa7ef980c8804f3d7618 Author: Adam Dickmeiss Date: Mon Sep 1 08:51:06 1997 +0000 New windows NT/95 port using MSV5.0. Had to avoid a few static variables used in function ber_tag. These are now part of the ODR structure. commit 46ed30d0d83dd1b21e58a4db365a60aefaa5aad8 Author: Adam Dickmeiss Date: Mon Sep 1 08:49:47 1997 +0000 New windows NT/95 port using MSV5.0. To export DLL functions the YAZ_EXPORT modifier was added. Defined in yconfig.h. commit 6438b1afb3455d2b0aba71e90c873e3b8a6d5e54 Author: Adam Dickmeiss Date: Mon Sep 1 08:49:14 1997 +0000 New windows NT/95 port using MSV5.0. Minor changes only. commit dd7b0c83efe3e7b355332bd16b42a0e30f8874d7 Author: Adam Dickmeiss Date: Mon Sep 1 08:48:44 1997 +0000 New windows NT/95 port using MSV5.0. Only a few changes made to avoid warnings. Sub project created: client.dsp. commit a00dfa73d5d3796f8048f2134fec2685b62e2658 Author: Adam Dickmeiss Date: Mon Sep 1 08:48:11 1997 +0000 New windows NT/95 port using MSV5.0. Only a few changes made to avoid warnings. commit 84704ab102d3e9eb5a95061b141264d846c54628 Author: Adam Dickmeiss Date: Mon Sep 1 08:47:18 1997 +0000 New windows NT/95 port using MSV5.0. commit 53f9d5a65d5f1ca2e925490e7ed9b4e9d2a84dc9 Author: Sebastian Hammer Date: Fri Aug 29 13:34:58 1997 +0000 Added thesaurus oids commit 0036a074683ee59ce1d78ef400e648c395e38d5e Author: Sebastian Hammer Date: Tue Aug 19 08:46:05 1997 +0000 Added Thesaurus OID commit 838edb61c2e8ae6b501e78e0eac1453ae5120dc1 Author: Sebastian Hammer Date: Tue Aug 19 08:45:13 1997 +0000 Added Thesaurus commit 1d441010a7487ea43798e61ef8a1e58bcba44c10 Author: Sebastian Hammer Date: Tue Aug 19 08:43:49 1997 +0000 Housekeeping commit 2ce3c7f562337bd2b9141822e3dd82df6a9c9436 Author: Sebastian Hammer Date: Tue Aug 19 08:40:52 1997 +0000 Added thesaurus OID commit f62a2f5d68717e0eca21dbb60d1cb5afe943d666 Author: Adam Dickmeiss Date: Mon Jul 28 12:34:42 1997 +0000 Added new OID entries (RVDM). commit 605bd5bc3803abd10df0efb91ab385828f40a57d Author: Adam Dickmeiss Date: Mon Jul 21 12:48:11 1997 +0000 Removed windows DLL stubs. commit 20cae8a917916791dde5c0318a7b18f0ad5a4d67 Author: Adam Dickmeiss Date: Mon Jul 21 12:47:38 1997 +0000 Moved definition of nmem_control and nmem_block. commit e0d889da6625684d4f6a4f166af7e811e224b091 Author: Adam Dickmeiss Date: Mon Jul 21 12:46:03 1997 +0000 Bug fix: changed definition of attributeValues in Z_AttributeOccurrence. commit 88d26764ac94b4a2872c77e2deed58b15d2f6f02 Author: Adam Dickmeiss Date: Mon Jul 21 12:44:30 1997 +0000 Moved definitions of nmem_block and nmem_control. commit e7a11f55c79f2ddf7a2cdaa898cfe57ce2fe404a Author: Adam Dickmeiss Date: Wed Jul 2 14:12:52 1997 +0000 Changed header to 1997. commit b64a18142c265f9c760e995b7e400d571434eccf Author: Adam Dickmeiss Date: Wed Jul 2 12:57:48 1997 +0000 Fixed #if-bug. Thanks to RVDM. commit 35b62368432b7fa342483b6d4bc8c89297b59706 Author: Adam Dickmeiss Date: Tue Jul 1 14:15:10 1997 +0000 Added new BIB-1 diagnostic messages. commit a894f0001b48c407989e134b120502efaaf32592 Author: Adam Dickmeiss Date: Tue Jul 1 13:52:21 1997 +0000 Added messages about new diagnostic codes. commit 634b63bb77773c5ec28b772fa62384c9cf62ff38 Author: Adam Dickmeiss Date: Tue Jul 1 13:49:56 1997 +0000 Take care of case when invalid target is specified on command line. commit 73fc91ec903170c76d464c4ed7a83eb9ce635a1d Author: Adam Dickmeiss Date: Mon Jun 23 10:31:25 1997 +0000 Added ODR argument to ccl_rpn_query and ccl_scan_query. commit 5e46e56c425c46bad6cef226669767de3a990f9e Author: Adam Dickmeiss Date: Mon Jun 23 10:31:11 1997 +0000 Added RVDM's SEQUENCE OF patch again! commit 2d6537257dbfc2fd692468224f529c0e1fad5c3c Author: Adam Dickmeiss Date: Mon Jun 23 10:30:45 1997 +0000 Added ODR stream as parameter to ccl_rpn_query and ccl_scan_query. commit 157a6ff3b40c1fc21491df10d37e86ee93431c13 Author: Adam Dickmeiss Date: Mon Jun 23 10:30:18 1997 +0000 Added call to ccl_rpn_delete in search. Added ODR stream "out" as parameter to ccl_rpn_query to release RPN query. commit 9ea4211c533ffd9e7e7b5fea5cb192a986cdaf87 Author: Adam Dickmeiss Date: Mon Jun 23 10:28:27 1997 +0000 Added ODR argument to ccl_rpn_query to provide release of RPN structure. commit 88941d4a9e272daca9323cd19bf4829b6d32871b Author: Sebastian Hammer Date: Wed May 14 11:14:44 1997 +0000 Old versions of GILS tables commit b3052f9ebd9a9510b90d2dc56d558638bf30ece7 Author: Sebastian Hammer Date: Wed May 14 11:09:51 1997 +0000 Moved to GILS version 2 commit bf4149c63ad2e11429e302a89f472de52b4d7ce8 Author: Adam Dickmeiss Date: Wed May 14 06:53:19 1997 +0000 C++ support. commit 73664b466cb0c5e9478b4af7c5d4ebed1f2db49e Author: Adam Dickmeiss Date: Mon May 5 11:21:09 1997 +0000 In handling of SEQUENCE OF: Counter set to zero when SEQUENCE OF isn't there at all. commit a7a4ea3451105aa7dea1e4b2a3e7062dfbc727bc Author: Adam Dickmeiss Date: Mon May 5 11:20:35 1997 +0000 Client uses "options" utility and marc dump filename may be specified as an option (-m ). commit 55a302e87c3404fd8b8b56d7ef7263dd335b17b6 Author: Adam Dickmeiss Date: Mon May 5 11:19:51 1997 +0000 Changes. commit b70baaf0e38b063475d6043bb1ab405be957a389 Author: Sebastian Hammer Date: Fri May 2 08:39:27 1997 +0000 Support for private OID table added. Thanks to Ronald van der Meer commit 041ef5728e8383265ce2f1df34fe196cfa098823 Author: Sebastian Hammer Date: Fri May 2 08:39:10 1997 +0000 New PDUs added, thanks to Ronald van der Meer commit f81e1101449cb58fd07b881edfb1c241ffb742c0 Author: Sebastian Hammer Date: Fri May 2 08:38:33 1997 +0000 None commit 21b66c54ac623132427d5a34e6ff3dd8ebee9928 Author: Adam Dickmeiss Date: Thu May 1 15:07:55 1997 +0000 Added DLL entry point routines. commit 2d978ce2c9706142728e61af13294613b417ec44 Author: Adam Dickmeiss Date: Thu May 1 15:06:42 1997 +0000 Added log_mask_str_x routine. commit 5ea58e8014fef30e6e8217c911620d62e8eab6d9 Author: Adam Dickmeiss Date: Thu May 1 15:06:32 1997 +0000 Moved WINSOCK init. code to tcpip_init routine. commit 85a2e7affad79fd8bd59b403ba7b5f7867d60523 Author: Sebastian Hammer Date: Wed Apr 30 08:52:02 1997 +0000 Null commit 63af8d32cee5cb5222e22ed64d4752093a8b8d4a Author: Sebastian Hammer Date: Wed Apr 30 08:49:50 1997 +0000 Work commit e8ed2e5014d3ed2970406747c7913aa5438972db Author: Adam Dickmeiss Date: Mon Feb 24 10:37:26 1997 +0000 Changed header. commit 065bdef058a58e2db5242d99c16febf9f9aad899 Author: Adam Dickmeiss Date: Wed Feb 19 14:46:15 1997 +0000 The "all" specifier only affects elements that are indexed (and not all elements). commit 1082d0a6c655bcd6e30566aa7547e5d370572e67 Author: Sebastian Hammer Date: Thu Jan 2 10:47:56 1997 +0000 Added optional, physical ANY commit 214455c7382c4867df4f6cd8cb23b59602192e6d Author: Sebastian Hammer Date: Thu Dec 5 13:17:47 1996 +0000 Fixed GRS-1 null-ref commit e2cc1d8b0f67a734d0a16a0c95e169acf9106241 Author: Adam Dickmeiss Date: Fri Nov 15 15:48:24 1996 +0000 Fixed reference to bad element. Other small changes. commit 01dfe62210bac0f8fc1e566537ad99bbc378bd66 Author: Adam Dickmeiss Date: Mon Nov 11 13:15:29 1996 +0000 Added proximity operator. commit ca7139cb3a1ffbd081a8a64ecaa29be9eb50353f Author: Adam Dickmeiss Date: Mon Nov 11 13:14:46 1996 +0000 Fixed tagging bug in z_ProximityOperator. commit c6860bd2b0d52f5f53dd01f0f1857f5d310108ba Author: Adam Dickmeiss Date: Mon Nov 11 13:14:15 1996 +0000 Added doc about proximity in PQF. commit de62d4d97943ed7033f48bdbcaf06f67952f86fe Author: Adam Dickmeiss Date: Fri Nov 8 14:09:22 1996 +0000 Removed reference to gils-f.est. commit 6c5cedfce30df58be034fd3555ae6935b3023882 Author: Adam Dickmeiss Date: Fri Nov 8 11:03:26 1996 +0000 Client accepts multiple database names. commit 42dcb6fd4b9fccb404c4403e0d63c2bfb31cabbb Author: Adam Dickmeiss Date: Fri Nov 8 11:03:01 1996 +0000 More work. commit 086436151f45e51a855c748010a95615bc5e30a0 Author: Adam Dickmeiss Date: Fri Nov 1 08:45:18 1996 +0000 Bug fix: used close on MS-Windows. Fixed to closesocket. commit 684d09483b9c10997bc71503d36bc98451e34e93 Author: Adam Dickmeiss Date: Tue Oct 29 13:36:26 1996 +0000 Added header. commit e9728b65671cd921aeefddf5474689b0dbaf2010 Author: Adam Dickmeiss Date: Tue Oct 29 13:35:38 1996 +0000 Implemented data1_set_tabpath and data1_get_tabpath. commit 98d6fcc28c858c00a47aa59391abb99649f54ba0 Author: Adam Dickmeiss Date: Tue Oct 29 13:34:56 1996 +0000 Minor change. commit 527e5237725b631a58124f9b0d7b5ce97c62a183 Author: Adam Dickmeiss Date: Tue Oct 29 13:34:38 1996 +0000 New functions to get/set data1_tabpath. commit 0aa8e547996dc0adb27cc1e10c25c472585f63cb Author: Adam Dickmeiss Date: Tue Oct 29 13:33:52 1996 +0000 Updated. commit 11ac75c90de88b723bb755b12cacb9f388fe1502 Author: Adam Dickmeiss Date: Wed Oct 23 12:31:24 1996 +0000 Added 'static' modifier to dummy variable in odr_constructed_begin. commit 0a159e0b47088801788dc3a90b79f6d5e964ea1f Author: Sebastian Hammer Date: Fri Oct 11 15:06:52 1996 +0000 Version 1.3 commit 3888e88cde70f36851544ab7acc04e0943470ec6 Author: Adam Dickmeiss Date: Fri Oct 11 15:00:23 1996 +0000 CCL parser from Europagate Email gateway 1.0. commit 6c88d52909c7cb7a143a05583b2ac1c90c94a9d9 Author: Sebastian Hammer Date: Fri Oct 11 12:38:03 1996 +0000 Smallish commit e6a55188366477082cb2446e7065d0f624dabcfb Author: Sebastian Hammer Date: Fri Oct 11 11:57:16 1996 +0000 Smallish commit 110e7f1267301bf0174e9423b0b1a7172e0b3ae2 Author: Adam Dickmeiss Date: Fri Oct 11 10:35:38 1996 +0000 Fixed a bug that caused data1_read_node to core dump when no abstract syntax was defined in a "sgml"-record. commit f8ec9ce4a0624d49be64a0cce115846155b79e42 Author: Sebastian Hammer Date: Thu Oct 10 12:35:12 1996 +0000 Added Update extended service. commit 927478192af381aa21ba51487cb8c4417e3d87ff Author: Sebastian Hammer Date: Thu Oct 10 12:32:01 1996 +0000 ZZ commit 205c2223beca67a0dc7bf14df988b2c05faf1293 Author: Sebastian Hammer Date: Thu Oct 10 11:52:18 1996 +0000 Added SearchResult additionalInfo commit de697b2c40e31fd28235af628940bd08734f764b Author: Sebastian Hammer Date: Thu Oct 10 11:51:58 1996 +0000 Added SerchResult additional info commit 1318fabb307dce513479df1890cac2f20cddda45 Author: Sebastian Hammer Date: Wed Oct 9 15:54:51 1996 +0000 Added SearchInfoReport commit 7436fd1fdf0ca6d2c5c68d9cc0cd57f53d9c8e12 Author: Adam Dickmeiss Date: Tue Oct 8 12:58:08 1996 +0000 New ODR function, odr_choice_enable_bias, to control behaviour of odr_choice_bias. commit 78909a91319d7274a6c0f896d25c909d071742aa Author: Adam Dickmeiss Date: Tue Oct 8 12:56:57 1996 +0000 Bug fix: tagging of type 101 query. commit 29bc46cf839f066e31641eb21fdd3b2dbd4a35d0 Author: Adam Dickmeiss Date: Tue Oct 8 12:55:47 1996 +0000 changes. commit 5e0c6af02d0e1e2042d846de614dce4c061200f2 Author: Sebastian Hammer Date: Tue Oct 8 10:45:05 1996 +0000 *** empty log message *** commit 8ad1f962f612a8a14a0b1abad080fd18987caf4e Author: Sebastian Hammer Date: Tue Oct 8 10:44:57 1996 +0000 Resolved conflicts. commit 180d06f2b91d0197c8ac7548f0e90f91b8427068 Author: Sebastian Hammer Date: Tue Oct 8 10:43:20 1996 +0000 Added SOIF syntax. commit 93e6cd96accab7cdef3a573479a5ec9c9fc47610 Author: Sebastian Hammer Date: Mon Oct 7 15:54:47 1996 +0000 Added files commit 4ed0df89283b51f12daddfcce1eff246e6962a08 Author: Sebastian Hammer Date: Mon Oct 7 15:29:16 1996 +0000 Added SOIF support commit abda0ffc1ac8fca34535f39c6581ed16e70e15f9 Author: Sebastian Hammer Date: Mon Oct 7 15:28:54 1996 +0000 Work commit bb182c49a5a8b379b8a021eed572d070307333a9 Author: Sebastian Hammer Date: Thu Aug 29 14:19:34 1996 +0000 Fixed conflict (CVS) commit 52463063061a631f9cb086e938bc4494efec0bb5 Author: Sebastian Hammer Date: Tue Aug 27 10:43:22 1996 +0000 Made select() optional commit cbadcb46e4898cb46ad9b49dba8cc4fc789a164a Author: Adam Dickmeiss Date: Mon Aug 12 14:10:34 1996 +0000 New function p_query_attset to define default attribute set. commit 7fe0d6399102ca8c9b51d45f3d8b439a5e6adce0 Author: Adam Dickmeiss Date: Mon Aug 12 14:09:54 1996 +0000 ODR_DEBUG not set. commit 8e3d81fc1e875957337ff69c6a449c40c00ed8bd Author: Adam Dickmeiss Date: Mon Aug 12 14:09:11 1996 +0000 Default prefix query attribute set defined by using p_query_attset. commit 4eec94579e5ca6f1121ed12ce26945ed23bbea74 Author: Adam Dickmeiss Date: Mon Aug 12 14:08:30 1996 +0000 New function: p_query_attset. commit 711159f51111a2f1de5343bfdbd56a0e41d42baf Author: Sebastian Hammer Date: Fri Jul 26 14:07:21 1996 +0000 Small commit 63aea810bb0d282daf5468eca9f5aa6a5611fc2e Author: Sebastian Hammer Date: Fri Jul 26 13:37:06 1996 +0000 Various smaller things. Gathered header-files. commit a7ab1771fdb372874b190308cffd3517625b6c83 Author: Sebastian Hammer Date: Fri Jul 26 13:36:15 1996 +0000 Various smallish commit f537f1037e07b2a4be1681d158e17cc62683cbfa Author: Sebastian Hammer Date: Fri Jul 26 13:35:38 1996 +0000 Gathered header-files commit 2da1b7c395cd33f03bbb93919c88a4d0fb2de1ed Author: Sebastian Hammer Date: Fri Jul 26 12:34:07 1996 +0000 Porting. commit bc33b8b53697bcc10a02f7e7456fd75b2c3473ef Author: Sebastian Hammer Date: Sat Jul 6 19:58:23 1996 +0000 System headerfiles gathered in yconfig commit 567ab40a74611002aef26af8db8986d24b1c4bd5 Author: Adam Dickmeiss Date: Wed Jul 3 13:21:36 1996 +0000 Function xfree_f checks for NULL pointer. commit c1c75fd66581fb7df0a63f42eec3a055210b3bf0 Author: Sebastian Hammer Date: Mon Jun 10 08:57:45 1996 +0000 1.2 commit 5fe647af23484842955ab7a7e26d0ab34e3c2b1c Author: Sebastian Hammer Date: Mon Jun 10 08:57:38 1996 +0000 Added OPAC, ResourceReport commit 09127934b3646ba7d5bc0a853b693792d64d3bac Author: Sebastian Hammer Date: Mon Jun 10 08:56:00 1996 +0000 Work on Summary. commit 7b975f32e5bb0ae39b62167f9eb09b02be36d3f6 Author: Sebastian Hammer Date: Mon Jun 10 08:55:33 1996 +0000 Added Summary. Unfinished work commit 77c156ef02efc5a3da23d153dac166e729ec79ef Author: Sebastian Hammer Date: Mon Jun 10 08:55:20 1996 +0000 Added Summary, OPAC commit 9f1aa1005f6e9db2484ec053bf0fd9b109625755 Author: Sebastian Hammer Date: Mon Jun 10 08:53:47 1996 +0000 Added Summary commit bf6c973ee6b5864bdb95d7d953fdcac75ea1b060 Author: Sebastian Hammer Date: Mon Jun 10 08:53:31 1996 +0000 Added Summary,OPAC,ResourceReport commit fd4b371b704caa2b56210b4ca386cfdfd5da7089 Author: Sebastian Hammer Date: Mon Jun 10 08:53:01 1996 +0000 Work commit a3f3407f990d349081d3cc20645b3acea48a674c Author: Sebastian Hammer Date: Fri Jun 7 11:04:32 1996 +0000 Fixed tag->tagset dependency commit 89150df2052b2c929ea9de488b24bc86095ee5f8 Author: Sebastian Hammer Date: Thu Jun 6 12:07:17 1996 +0000 *** empty log message *** commit 7aad6ab82d35210ea6da14848effb175e91ddb0a Author: Adam Dickmeiss Date: Wed Jun 5 08:53:50 1996 +0000 Added availability/linkage to brief syntax. commit 0e653cc4ea3853110878a6ca04c364de85822fd7 Author: Adam Dickmeiss Date: Wed Jun 5 08:51:03 1996 +0000 Added local-subject-index to any. commit f593a4ffa67fe4fba173d75845923ccd4e11288e Author: Sebastian Hammer Date: Tue Jun 4 09:52:12 1996 +0000 Added sampletext commit 0ff5815242556923f24a9dcbbad9ebe30e64f165 Author: Sebastian Hammer Date: Mon Jun 3 15:57:16 1996 +0000 Added body-of-text to BIB-1 ANY and the WAIS profile commit 536d269ace110d131df1baa2daca17088ac8b734 Author: Sebastian Hammer Date: Mon Jun 3 09:47:05 1996 +0000 Added schemaIdentifier. commit d4f3ce4724b0bf9cec075846852b48108b67a67c Author: Sebastian Hammer Date: Mon Jun 3 09:46:42 1996 +0000 Added OID data type. commit d77bb491a62b7cb0f444bc88467c69c0b090e43a Author: Sebastian Hammer Date: Mon Jun 3 09:46:31 1996 +0000 Fixed stupid bug in str2oid routine. commit 59e8e36fa1b1e39a605a22ab2de0ac219ea481e8 Author: Sebastian Hammer Date: Mon Jun 3 09:46:03 1996 +0000 Added OID type. commit 97e81740fd91d912d75ff85fefc61b1d19cbc611 Author: Sebastian Hammer Date: Mon Jun 3 09:45:50 1996 +0000 Added display of OIDs in the GRS routine. commit 03bdc2bf7729a8de0050a4defb7f1fb9c85cb7b3 Author: Sebastian Hammer Date: Fri May 31 13:52:21 1996 +0000 Fixed uninitialized variable for local tags in abstract syntax. commit 52b0f7a370fd7444f650909a574e49fdb0ffc522 Author: Sebastian Hammer Date: Fri May 31 13:51:13 1996 +0000 *** empty log message *** commit 61332f860c40c483d1283532e5fb225daee75e67 Author: Sebastian Hammer Date: Thu May 30 12:03:51 1996 +0000 Work. commit d896caa8d64509d95e79ad1ec5966d880abc1883 Author: Sebastian Hammer Date: Thu May 30 11:03:10 1996 +0000 Fixed NextresultSetPosition bug fixed. commit d8effb26c004e99bfd83855511c4ec5a7c7f3c79 Author: Sebastian Hammer Date: Wed May 29 15:48:48 1996 +0000 Added \n to the isspace rule. commit d0ef7e3d61ea8c14a8649fd199e9060039f3b7b0 Author: Sebastian Hammer Date: Wed May 29 15:47:50 1996 +0000 Fixed in bug DiagRecs decoder. Thanks to Linda Harris. commit cc0ed1844dbaffb40219b3a2a2d8129aa52eab3f Author: Adam Dickmeiss Date: Wed May 29 11:25:59 1996 +0000 Fixed URL. commit 146c30a56bda9fcbb049ce2d4f442718fbb09341 Author: Sebastian Hammer Date: Wed May 29 11:19:17 1996 +0000 Added phrases to WAIS table commit cf1b621628966dac71de3648217dee37fae4f068 Author: Sebastian Hammer Date: Wed May 29 10:05:01 1996 +0000 Changed space criteria to support 8-bit characters commit 87ab96b9e9da7255fe0b1d13dc0ab1626afdd1b7 Author: Sebastian Hammer Date: Wed May 29 10:04:13 1996 +0000 Work commit e0816c15e2756bff6ef9265ac72ad5baf5306be9 Author: Sebastian Hammer Date: Wed May 29 10:03:28 1996 +0000 Options work commit dd8028493d407933a943543a243cb6c51eb627fc Author: Sebastian Hammer Date: Wed May 29 10:02:02 1996 +0000 Work commit bc39d5bc3e621e09a0d8b0b912a4e4dfaf43d087 Author: Adam Dickmeiss Date: Wed May 22 08:35:36 1996 +0000 Removed CFLAGS definiton. commit c8dee83a98997f5aaf799aad6d6e30c93783bc2a Author: Adam Dickmeiss Date: Wed May 22 08:35:24 1996 +0000 Bug fix. commit ab9f5c94f9c68c2cd137d5c27c068200606e18c8 Author: Adam Dickmeiss Date: Wed May 22 08:34:44 1996 +0000 Added ifdef USE_XTIMOSI; so that 'make depend' works. commit 7ff711579bfae14782a3334ca8b3c255c44cf3d2 Author: Sebastian Hammer Date: Tue May 14 09:26:46 1996 +0000 Added attribute set to scan backend commit 658b0fee0e1a3cb2eda9933a5287e9c2d731ba36 Author: Sebastian Hammer Date: Tue May 14 09:26:26 1996 +0000 Work. commit 8e4dbf0df9d4d7d72c288d79b97ba3d3c22ac17a Author: Sebastian Hammer Date: Tue May 14 09:01:52 1996 +0000 Added AttributeSet. commit 94ec9363531cb432fed61650c9719da443d4b1c2 Author: Sebastian Hammer Date: Thu May 9 09:32:41 1996 +0000 Any unfolds commit 20a7d5f03bb08f114a2133367e283ce5e811a16a Author: Sebastian Hammer Date: Thu May 9 07:27:55 1996 +0000 Added some phrase indices. commit e77a0b69d06145878c5ba474b1ec0293e6015a18 Author: Sebastian Hammer Date: Thu May 9 07:27:43 1996 +0000 Multiple local attributes values supported. commit 1ef40949fde41e67c12cb83ed039cbe6c6342f4c Author: Sebastian Hammer Date: Thu May 9 07:27:11 1996 +0000 Multiple local values supported. commit 52b081f8851742ade8c349aa54b80a3998aee957 Author: Sebastian Hammer Date: Thu May 9 07:26:49 1996 +0000 *** empty log message *** commit 5c03aa670c7420063f751a66e200987ea4bf40eb Author: Sebastian Hammer Date: Thu May 9 07:25:22 1996 +0000 Sm commit e42d9ee8961aed7ac5750a4eccbbe681da92df0c Author: Sebastian Hammer Date: Wed May 1 12:45:28 1996 +0000 Support use of local tag names in abs file. commit 6589c8c535a2c0e86f24cf45c2dd45ecf9ae7093 Author: Sebastian Hammer Date: Wed May 1 12:45:00 1996 +0000 *** empty log message *** commit d1c517a616a425f6a6966ae1639176248e65e68a Author: Sebastian Hammer Date: Wed Apr 10 11:40:43 1996 +0000 *** empty log message *** commit 20c20b95722fee18675cb36d9474612a2251853a Author: Sebastian Hammer Date: Wed Apr 10 11:40:33 1996 +0000 1.1pl2 commit ac690c9648474fd1cba7780a1ad25f86d0577a84 Author: Sebastian Hammer Date: Wed Apr 10 11:39:42 1996 +0000 Fixed bug in UserInfo commit ac00a317f993121e851a20209a233ab49fb232ef Author: Sebastian Hammer Date: Wed Apr 10 11:39:29 1996 +0000 New version commit 8c815707cf40388090327143d3d0d27be5c4a902 Author: Sebastian Hammer Date: Mon Mar 25 10:18:24 1996 +0000 Added "meta" profile - dublin core experiment commit 8a4ae2667c1cfc7b9f3ef5dfbae1a62573c7ab90 Author: Sebastian Hammer Date: Mon Mar 25 10:18:03 1996 +0000 Removed trailing whitespace from data elements commit fc89703038b1168a8f52b6920c50dedb9080063d Author: Adam Dickmeiss Date: Fri Mar 15 16:10:53 1996 +0000 Introduced new prefix query features. commit 7a41d7a92859be6ecc255e943e693d0a885c4229 Author: Adam Dickmeiss Date: Fri Mar 15 11:05:32 1996 +0000 The user can set the preferred query type (prefix, ccl, ..) with the querytype command. commit 7b57148e0984b3df36e031d866bfc461703160e3 Author: Adam Dickmeiss Date: Fri Mar 15 11:03:46 1996 +0000 Attribute set can be set globally for a query with the @attrset operator. The @attr operator has an optional attribute-set specifier that sets the attribute set locally. commit 168943c0bfd934f30eadfe523e3c145af85a8cb3 Author: Adam Dickmeiss Date: Fri Mar 15 11:01:46 1996 +0000 Extra argument to p_query_rpn: protocol. Extra arguments to p_query_scan: protocol and attributeSet. commit e909a485843cfc400caf7ca885c813f5337aa7e8 Author: Sebastian Hammer Date: Wed Mar 13 09:19:09 1996 +0000 Added bogus mapping of rank field commit 3111fa3db35d0d3b76ba0f70a2c9ed83d5114c11 Author: Sebastian Hammer Date: Fri Mar 8 14:38:41 1996 +0000 Fixed output. commit d1947ea9d8f4fab6ce179997c2554443884756d5 Author: Sebastian Hammer Date: Fri Mar 8 14:38:25 1996 +0000 *** empty log message *** commit b8d21245e1c2faeb7741bf87835ab67b9004f4e1 Author: Adam Dickmeiss Date: Thu Feb 29 14:23:13 1996 +0000 Bug fix. commit 092d47f339eb07f67dc9e8356a53af81be546737 Author: Adam Dickmeiss Date: Mon Feb 26 18:34:44 1996 +0000 Bug fix. commit 3931f892988e7ec50aebfb59189515f68dff103e Author: Sebastian Hammer Date: Fri Feb 23 10:01:00 1996 +0000 Smallish commit cb914e4afd1e815bf47604efdfa964cee69557fa Author: Sebastian Hammer Date: Fri Feb 23 10:00:51 1996 +0000 SCAN Work commit 214a19efbb9f3ccb3cfe678b5c9ba805774b3d12 Author: Sebastian Hammer Date: Fri Feb 23 10:00:39 1996 +0000 WAIS Work commit 2f1df9e6d0f93335cf2a6a487b0a06b43ff37b0c Author: Sebastian Hammer Date: Fri Feb 23 10:00:25 1996 +0000 Fixes to SCAN commit 081fe93172671cdb70410461ea1845566e3a5f25 Author: Sebastian Hammer Date: Wed Feb 21 15:57:17 1996 +0000 *** empty log message *** commit 01555b079443406950c519ad757b36eb2bc38657 Author: Sebastian Hammer Date: Wed Feb 21 15:23:36 1996 +0000 Reversed fclose and return; commit 9b233e7a12a109a54090ffbc5e059db0ab9b4621 Author: Sebastian Hammer Date: Wed Feb 21 14:55:38 1996 +0000 Smallish commit 2e7c9fd11f560b19856ea2a34f6953e949d8075a Author: Sebastian Hammer Date: Wed Feb 21 13:12:07 1996 +0000 *** empty log message *** commit d29152205ca296a1aaea14ab2a656d53c68680f6 Author: Sebastian Hammer Date: Wed Feb 21 12:55:51 1996 +0000 small commit 13710cb8cd0a6b8d6a1f88ff69f3a2ec2ec9769c Author: Sebastian Hammer Date: Wed Feb 21 12:52:55 1996 +0000 Test commit 12ecd8b127f4f576b37278eeaff07a12e73b7110 Author: Adam Dickmeiss Date: Tue Feb 20 17:58:09 1996 +0000 Added const to yaz_matchstr. commit ec28e95aa1800749663124d88106bc86b28b8ada Author: Adam Dickmeiss Date: Tue Feb 20 17:57:53 1996 +0000 Added const to oid_getvalbyname. commit a4b3ddd8ad754b42454c7a18fdb3ef61f7bd580d Author: Adam Dickmeiss Date: Tue Feb 20 16:41:36 1996 +0000 Minor change. commit 473db99967af5162fb1e0f1a68ec713ef4e19213 Author: Sebastian Hammer Date: Tue Feb 20 16:37:33 1996 +0000 Using yaz_matchstr in oid_getvalbyname commit 7826e2c92b1a07182ba5bfb94c304f1fa7d27387 Author: Sebastian Hammer Date: Tue Feb 20 16:33:02 1996 +0000 Moved matchstr to global util commit de40d7c17747988ed4c53e51e45cbb790a3abd7b Author: Sebastian Hammer Date: Tue Feb 20 16:32:48 1996 +0000 Created util file. commit d1f1647de20f92bdb32c61a8dafac5f252dac914 Author: Sebastian Hammer Date: Tue Feb 20 13:02:58 1996 +0000 Wais length. commit db974144cf7ea08657432437b71611ac85d1c2d1 Author: Sebastian Hammer Date: Tue Feb 20 12:57:41 1996 +0000 V1.1 commit 89eb5df93edfe3141cc0e06997a4c6023d7bc552 Author: Sebastian Hammer Date: Tue Feb 20 12:55:56 1996 +0000 *** empty log message *** commit dee13aeae17005ba0ef3adf7bf99958160e393d9 Author: Sebastian Hammer Date: Tue Feb 20 12:53:04 1996 +0000 Chanes to SCAN commit c830124fd18d0bc1dc330d7d8b62aac51d12659c Author: Sebastian Hammer Date: Tue Feb 20 12:52:54 1996 +0000 Added odr_peektag commit 8df01d1889fa540918519fa5fb00fa0afd82b67a Author: Sebastian Hammer Date: Tue Feb 20 12:52:09 1996 +0000 WAIS protocol support. commit 697c9c32315a2e827a0133b3f6c2eed9953926b6 Author: Sebastian Hammer Date: Tue Feb 20 12:51:54 1996 +0000 Fixed problems with EXTERNAL. commit ab66367f19b935a874d190bbe5b5d8f20dbf3592 Author: Sebastian Hammer Date: Tue Feb 20 12:51:41 1996 +0000 Completed SCAN. Fixed problems with EXTERNAL. commit 297a057b70eb2747f46b5fe216984394cde6ea8b Author: Sebastian Hammer Date: Tue Feb 20 12:50:45 1996 +0000 Various commit f1bb2364c333c161a8197785e51348c70f31ca6b Author: Sebastian Hammer Date: Mon Feb 12 18:18:07 1996 +0000 Fidgeting. commit 17c6fa471c8ff21bd9133a806569e10a0919e24c Author: Sebastian Hammer Date: Mon Feb 12 18:17:48 1996 +0000 SMALLISH commit 9d17b5cfa8555d4762f162785edede1e0314cc07 Author: Sebastian Hammer Date: Sat Feb 10 12:23:41 1996 +0000 Enable inetd operations fro TCP/IP stack commit b835ec5cc4cd3a601f589e948f3d1220f179710f Author: Sebastian Hammer Date: Sat Feb 10 12:23:11 1996 +0000 Enablie inetd operations fro TCP/IP stack commit bd6ab82d45c0079d404ec0c325c5f4c8a9ca86e6 Author: Sebastian Hammer Date: Sat Feb 10 12:22:49 1996 +0000 Work on SCAN commit 52cfdac6b573bceb94777e9393cf02719d6e2c9d Author: Sebastian Hammer Date: Sat Feb 10 12:21:57 1996 +0000 Smallish commit 069f580ad7901713aaf7bb8d27aaba82124c15c7 Author: Adam Dickmeiss Date: Mon Feb 5 12:24:26 1996 +0000 Implemented log_event_{start,end}-functions. commit 37a88d1e2934cddb2a6711b34011628e6b40e912 Author: Adam Dickmeiss Date: Mon Feb 5 12:23:41 1996 +0000 Removed RPN_QUERY define (not used in these modules). commit d4901e9a337370bf73e34a7d1ce718e3ea178a66 Author: Sebastian Hammer Date: Wed Jan 24 16:01:14 1996 +0000 pl4 commit 4324da797a51137daa4d7e2d665df2ff82ce8c66 Author: Sebastian Hammer Date: Mon Jan 22 09:46:31 1996 +0000 Added Sort PDU. Moved StringList to main protocol file. commit 4eb6ad2c0421101a9d68c4d4d519823526651a9b Author: Sebastian Hammer Date: Mon Jan 22 09:46:07 1996 +0000 Added Sort PDU commit a571156582fe34154568c7b42f142e56879557d3 Author: Sebastian Hammer Date: Fri Jan 19 15:41:52 1996 +0000 *** empty log message *** commit ef96020a7ee2ee72323f043a4257d332b91ee353 Author: Sebastian Hammer Date: Fri Jan 19 15:41:47 1996 +0000 Fixed uninitialized boolean. commit 4e88eb87479d35e80be11f9821f5e754dbea22eb Author: Sebastian Hammer Date: Fri Jan 19 15:41:34 1996 +0000 dumpber was ignoring the file argument. commit 8d041b46a730c44ea9488a3056f9fdcba4fd0ce9 Author: Sebastian Hammer Date: Fri Jan 19 15:41:14 1996 +0000 Smallish. commit 826b36840ea0cb5c0a6262ec25691e83ea20780a Author: Adam Dickmeiss Date: Thu Jan 18 09:46:34 1996 +0000 Changed prototype for reader function parsed to data1_read_record. commit 31cdb9d2330fe01012b3976ecf10c6bb1546f548 Author: Adam Dickmeiss Date: Wed Jan 17 14:52:47 1996 +0000 Changed prototype for reader function parsed to data1_read_record. commit 8987907b5c39b3f1575a40d02ffd8912487d81d3 Author: Sebastian Hammer Date: Wed Jan 10 15:21:24 1996 +0000 Added links to access control PDUs commit c195f14eb2fd48882f7b19dcb1b2421b1d174900 Author: Sebastian Hammer Date: Wed Jan 10 13:07:02 1996 +0000 *** empty log message *** commit 593e3a0579cb7de6d79c1ebc665612fd9cb5bac9 Author: Sebastian Hammer Date: Wed Jan 3 16:22:56 1996 +0000 *** empty log message *** commit 1aef484f50fc535620d43dab81584432115681b2 Author: Adam Dickmeiss Date: Tue Jan 2 13:57:30 1996 +0000 Added error messages. commit e37f1b24803ae41bba736eabdc14851018578abc Author: Sebastian Hammer Date: Tue Jan 2 11:46:49 1996 +0000 Changed 'operator' to 'roperator' to avoid C++ conflict. Moved to pl3 commit 8bec24d252450a514ba47690ef187a76a29f8b47 Author: Sebastian Hammer Date: Tue Jan 2 11:46:40 1996 +0000 Changed 'operator' to 'roperator' to avoid C++ conflict. commit 5510ef5973c29973156c06ffb920deeb04a662d8 Author: Sebastian Hammer Date: Tue Jan 2 11:42:31 1996 +0000 Moved to pl3 commit 4ae699c927bc26f3550d1a8ca911e8d1fe75dbfc Author: Sebastian Hammer Date: Tue Jan 2 08:57:19 1996 +0000 Changed enums in the ASN.1 .h files to #defines. Changed oident.class to oclass commit 3c061ecc327ee0e2e5f0c63b4951c7d51cb87ce7 Author: Sebastian Hammer Date: Fri Dec 15 16:57:11 1995 +0000 Added formatted-text. commit 1a74e6a6a7f7b81ebbda9de508b10610508b8db7 Author: Sebastian Hammer Date: Fri Dec 15 16:20:41 1995 +0000 Added formatted text. commit 05d23eb6c40d04281eb51c9e7931c63ea51ceb6f Author: Sebastian Hammer Date: Fri Dec 15 16:19:45 1995 +0000 Added formatted_text. commit 2967b364c0bc6c5e35957acb05dc27d45787171c Author: Sebastian Hammer Date: Fri Dec 15 11:22:15 1995 +0000 Added bodyofDisplay commit b2d4fae21009b1909a35ef9ae6bcd27c1a5dca74 Author: Sebastian Hammer Date: Thu Dec 14 16:28:07 1995 +0000 More explain stuff. commit abfbb8adfc5e2cbc048b623d41eaf36f05cf8bd9 Author: Sebastian Hammer Date: Thu Dec 14 11:09:43 1995 +0000 Work on Explain commit 53c17d9dc2f7c8355bbac800ed02862eb5780d4f Author: Sebastian Hammer Date: Thu Dec 14 11:09:31 1995 +0000 Added Explain record syntax to the format command. commit 78afbee947e1e4d6cd950e2fb9421abcdf1fbab4 Author: Sebastian Hammer Date: Thu Dec 14 11:09:09 1995 +0000 Fixed bug in tagging. commit 8916c5245235fa1229f8a23ba7ebb1500e98b818 Author: Sebastian Hammer Date: Wed Dec 13 17:14:26 1995 +0000 *** empty log message *** commit 381bf177c2d16c3f19ad60d3fca0d644c6e9e064 Author: Sebastian Hammer Date: Wed Dec 13 16:03:35 1995 +0000 *** empty log message *** commit 6545117117f63785408dec79e13e26d9f5779d55 Author: Sebastian Hammer Date: Wed Dec 13 15:38:43 1995 +0000 Added SGML-output filter. commit ad7f3313654b48d43981d8b55a2a99d53347529f Author: Sebastian Hammer Date: Wed Dec 13 15:32:47 1995 +0000 Added sgml-output. commit d296bf4d8d017e615b5030f422b99053c4e382e0 Author: Sebastian Hammer Date: Wed Dec 13 13:44:23 1995 +0000 Modified Data1-system to use nmem commit 5afa1465c452137580fe0c21a928f8bdcd08367b Author: Sebastian Hammer Date: Wed Dec 13 13:38:41 1995 +0000 First kick. commit 9446211daf0869d342b5738d153d810230b7a299 Author: Sebastian Hammer Date: Tue Dec 12 16:37:02 1995 +0000 Added destroy element to data1_node. commit a54eb1c1d02d6f7b7eb8e14db4772ebbc5387315 Author: Sebastian Hammer Date: Tue Dec 12 14:11:31 1995 +0000 More work on the large-record problem. commit 5c073098ad53cab537fd66d89c5b29e730c46a88 Author: Sebastian Hammer Date: Tue Dec 12 14:11:00 1995 +0000 Minimal. commit 378fb34b7013a9f6b15fd632f987a339da80b907 Author: Sebastian Hammer Date: Mon Dec 11 15:22:37 1995 +0000 Added last_child field to the node. Rewrote schema-mapping. commit 8986fb21c4b4a417de1817a73191b4b522c453d9 Author: Sebastian Hammer Date: Mon Dec 11 15:22:12 1995 +0000 Added last_child field to the node. commit bd0180737b693328bc8ced2e294588209a5d858b Author: Sebastian Hammer Date: Mon Dec 11 15:21:56 1995 +0000 Work. commit f850b018fdcafddfb5c0f72cc16c51a6be47cddc Author: Sebastian Hammer Date: Wed Dec 6 16:06:20 1995 +0000 Fixed YAZ library commit 14e430f03a8a98fc4a795cc5544dafcb23fd5031 Author: Sebastian Hammer Date: Wed Dec 6 15:50:42 1995 +0000 1.0pl2 commit 39255c75cf4b692fec73ce3fe52cf56333189bfc Author: Adam Dickmeiss Date: Wed Dec 6 13:00:19 1995 +0000 Minus alone not treated as an option. commit d6fec902f5ecce2849f1ea7a2fff073df3ea8db9 Author: Sebastian Hammer Date: Wed Dec 6 09:51:27 1995 +0000 Fixed the log-prefix buffer - it was too small and the setup code lacked a bounds-check. commit 3daec0c0ae02f6dffeb98fec83913c50de670510 Author: Sebastian Hammer Date: Wed Dec 6 09:50:56 1995 +0000 Bad #define. commit 1b9f6e078470e18513ac273c3e3e089b214c2d81 Author: Sebastian Hammer Date: Wed Dec 6 09:49:13 1995 +0000 Work. commit 16a55fae225f0d7597bf91b3fce7190bc87b9314 Author: Sebastian Hammer Date: Wed Dec 6 09:47:40 1995 +0000 *** empty log message *** commit 1a1ff494c26dcf1dc67530c92745e36725060dfd Author: Sebastian Hammer Date: Tue Dec 5 16:43:04 1995 +0000 Work. commit b6e8efd1bc9032260c1f30418f505f17ed2f4472 Author: Adam Dickmeiss Date: Tue Dec 5 15:08:44 1995 +0000 Fixed verbose of xrealloc. commit 8d84b94601b2be119f2a2d511b268a6123e4aaf9 Author: Sebastian Hammer Date: Tue Dec 5 14:26:40 1995 +0000 Added global lbuf to data1_node. commit 2dda9d9bfe56381a6a9ae1f6f72d69645e552dcb Author: Sebastian Hammer Date: Tue Dec 5 11:17:55 1995 +0000 Removed \r introduced from the Windows port somehow. commit ef856faa1846f53ea533cd4e4ce72291fcfa999e Author: Sebastian Hammer Date: Tue Dec 5 11:17:30 1995 +0000 Moved some paranthesises around. Sigh. commit 22539de88437f4812d17f8ab1d71db52f1da4c0e Author: Sebastian Hammer Date: Tue Dec 5 11:16:10 1995 +0000 Fixed malloc of 0. commit 450302c17fd8b1c07fa1b5400e5b85645118d319 Author: Sebastian Hammer Date: Tue Dec 5 11:15:50 1995 +0000 Work. commit 8265143b935609afba4d76c7f424e138da155ac2 Author: Sebastian Hammer Date: Tue Dec 5 11:15:40 1995 +0000 1.0pl1 commit 4eb98bb29689c555b7c854d7b175b60c153d0691 Author: Adam Dickmeiss Date: Tue Dec 5 11:08:37 1995 +0000 More verbose malloc routines. commit 202ccb243136e1753134aa778c21dac30f901985 Author: Sebastian Hammer Date: Mon Dec 4 23:59:04 1995 +0000 Added abreviated GILS tags. commit 4af141c2f6ca166ed85357c08334b2ed19da217d Author: Sebastian Hammer Date: Tue Nov 28 09:32:27 1995 +0000 v1.0 commit 0f08c4be1e64c5429e0b4c4c33e1acc7dcbc3f40 Author: Sebastian Hammer Date: Tue Nov 28 09:31:22 1995 +0000 Version 1.0 commit d3984fc00ab8ab6d26fbcb162723667e8bae95c1 Author: Sebastian Hammer Date: Tue Nov 28 09:30:41 1995 +0000 Work. commit a14bd4709da825b01f3cc42e5506b23bc3dea411 Author: Sebastian Hammer Date: Mon Nov 27 13:46:38 1995 +0000 Work commit 96b9676c49ab52a28c50dda95cf23bf92cd57507 Author: Sebastian Hammer Date: Tue Nov 21 15:09:43 1995 +0000 Work commit 91921982a89c15eaea23d60b2e01ec7261513c33 Author: Adam Dickmeiss Date: Fri Nov 17 11:09:39 1995 +0000 Added new option '-c' to specify configuration name in control block. commit 521f0f04ca70c76b28ad693f5f9854dc524dbab3 Author: Adam Dickmeiss Date: Fri Nov 17 11:08:57 1995 +0000 Install action added. commit 2927cf8d4c742fee3978ca41b3ade18b3af1fd60 Author: Sebastian Hammer Date: Wed Nov 15 11:51:21 1995 +0000 Smallish commit 0ef2b29604c21f65eaf7182bc992c9ca78bdd2e5 Author: Sebastian Hammer Date: Wed Nov 15 10:52:25 1995 +0000 Added profile documentation. commit a309d6ece06c0ab732d98c59f2718efaebd01ec6 Author: Sebastian Hammer Date: Mon Nov 13 09:27:22 1995 +0000 Fiddling with the variant stuff. commit d1a20e8d865a4ef50a024d5076f8aa2a8667500d Author: Sebastian Hammer Date: Wed Nov 8 17:57:20 1995 +0000 Fixed title ref. commit 20183db4fcbb8161529ee557ead6789ae2097ae0 Author: Sebastian Hammer Date: Wed Nov 8 17:41:11 1995 +0000 Smallish. commit c4b184d02212b522facfd4bb8d86f7c3e933b14c Author: Sebastian Hammer Date: Wed Nov 8 15:11:29 1995 +0000 Log of close transmit. commit b3b306f2e04d5ef2b918fcd377b74eaf1547de42 Author: Sebastian Hammer Date: Tue Nov 7 12:37:44 1995 +0000 Added support for forcing TIMEOUT event. commit 3ffa5dbc563e15bccb012f3d3d00a993f87ace82 Author: Sebastian Hammer Date: Wed Nov 1 16:34:52 1995 +0000 Making data1 look for tables in data1_tabpath commit 6b3cb0bd17248f844cae8744d29816809db1673f Author: Sebastian Hammer Date: Wed Nov 1 14:44:33 1995 +0000 Added tables. commit 2004bbd9b3bbce5eb8ecc49520255b3d0bf578b9 Author: Sebastian Hammer Date: Wed Nov 1 13:54:12 1995 +0000 Minor adjustments commit 1237873423722c1c5cffad7baa61281902c29c53 Author: Sebastian Hammer Date: Wed Nov 1 13:07:18 1995 +0000 Data1 module now lives in YAZ. commit a8b671f524437f17d856b567a5e3b4648c83fe6c Author: Sebastian Hammer Date: Wed Nov 1 12:19:13 1995 +0000 Second attempt to fix same bug. commit 00a64eba41e963e73b71f6b6850f748b5071663a Author: Sebastian Hammer Date: Wed Nov 1 11:56:53 1995 +0000 Added Xmalloc. commit 8ad9b2411f30d2a306bcf9b8a0cb0f03576e2a36 Author: Sebastian Hammer Date: Wed Nov 1 11:56:37 1995 +0000 Fixed bug in elementsetname-handling in piggybacked presents. commit cea212fba995de3fa0d6d6723d828f6fd7ca31df Author: Sebastian Hammer Date: Wed Nov 1 11:56:06 1995 +0000 Added Retrieval (data management) functions en masse. commit b6a465d196c8738156814a9fb3ba9e2450dd1be4 Author: Sebastian Hammer Date: Wed Nov 1 11:55:41 1995 +0000 Added xmalloc.c commit 29818ed78e32998641adcf5f23d3b854355918b5 Author: Sebastian Hammer Date: Mon Oct 30 12:41:06 1995 +0000 Added hostname lookup for server. commit b159db0e380339b4f51ba3871458fcf09bbfdece Author: Sebastian Hammer Date: Wed Oct 25 16:58:32 1995 +0000 Simple. commit d725e25e13a79b4b47d578580bd289b37f85c41c Author: Sebastian Hammer Date: Wed Oct 25 16:58:19 1995 +0000 Stupid bug in odr_malloc commit 3d0077a6eb90bf1cf4d2ecc3acd1afaf7c829bd0 Author: Sebastian Hammer Date: Wed Oct 18 16:12:55 1995 +0000 Better diagnostics. Added special case in NULL to handle WAIS server. commit cd5d6beb85878bfc65a2ebd2b771b86a1872af40 Author: Sebastian Hammer Date: Wed Oct 18 16:12:30 1995 +0000 Better diagnostics. commit 3e0bd65fd12dc5d8afc9c2da0e2465f49757c53d Author: Sebastian Hammer Date: Wed Oct 18 16:12:20 1995 +0000 Added a couple of special cases to handle the WAIS server. commit a3fb25600e5a7366e761b46c419462080fc13f73 Author: Sebastian Hammer Date: Mon Oct 16 13:51:41 1995 +0000 Changes to provide Especs to the backend. commit d5841c7c5616c3259c78e90cbf8e5e96ebd3ab31 Author: Sebastian Hammer Date: Fri Oct 13 16:08:04 1995 +0000 Added OID utility commit 0ba153ff51508cf37d3f5bbc48e3738dacfc6f42 Author: Sebastian Hammer Date: Thu Oct 12 10:34:28 1995 +0000 Added Espec-1. commit 7c3682d1d90e48dadca5e8c9b482044cbd65e939 Author: Sebastian Hammer Date: Wed Oct 11 14:49:12 1995 +0000 Smallish. commit 80c35fec715148c1c4547cf62aa6e2558884611a Author: Sebastian Hammer Date: Tue Oct 10 16:27:06 1995 +0000 *** empty log message *** commit a9a2a0427e8c387265ae6cccd16d97df6585e7ff Author: Sebastian Hammer Date: Fri Oct 6 12:59:06 1995 +0000 Added access macros commit b22117b182e372c6d1adc77c7da6a1de508e8594 Author: Sebastian Hammer Date: Fri Oct 6 08:51:13 1995 +0000 Added Write-buffer. commit 63cafe41a93427118959a74201b3e331169a71d9 Author: Sebastian Hammer Date: Fri Sep 29 17:11:52 1995 +0000 Smallish commit 9c459af695605b44a044ad206562818be10034f1 Author: Sebastian Hammer Date: Fri Sep 29 17:01:34 1995 +0000 More Windows work commit a65e0f7a2d18e29a619b137b8a1ddbc55891d573 Author: Sebastian Hammer Date: Thu Sep 28 10:24:32 1995 +0000 Windows changes commit fce935c96fc52b25533514e03fdd16b0d34f855e Author: Sebastian Hammer Date: Thu Sep 28 10:13:54 1995 +0000 Added central config file. commit aa45b978839c268db6eccafc6a13452d99a7929c Author: Sebastian Hammer Date: Thu Sep 28 10:12:26 1995 +0000 Windows-support changes commit 657fb99115b87a5244e9a33bbe4ca3d9d18849c4 Author: Sebastian Hammer Date: Wed Sep 27 15:02:33 1995 +0000 Modified function heads & prototypes. commit f305305306da9af74ed6c559f2b06353fd5a7c82 Author: Sebastian Hammer Date: Fri Sep 15 14:44:15 1995 +0000 *** empty log message *** commit 39d04935b765d492fdb6f27c0b8fb0eae6acd50f Author: Sebastian Hammer Date: Tue Sep 12 11:32:06 1995 +0000 Added a looker-upper by name. commit 3b54f840517967a8631829b96fdadf1e6abc3404 Author: Sebastian Hammer Date: Tue Sep 12 11:31:46 1995 +0000 Added some oids. commit 71936fd087fe8833926c9978b96c0e405d08aed7 Author: Sebastian Hammer Date: Tue Sep 12 11:31:36 1995 +0000 *** empty log message *** commit 6d73e5de2a3311b596132f879f60d9d43230778e Author: Sebastian Hammer Date: Tue Aug 29 14:44:50 1995 +0000 Reset timeouts. commit 42212b458f327fe54a537eabd80a3e42afcb2ee3 Author: Sebastian Hammer Date: Tue Aug 29 14:44:43 1995 +0000 *** empty log message *** commit 9e1a8a0a598aef894f59fa8abe3ccb144a5294a8 Author: Sebastian Hammer Date: Tue Aug 29 14:24:13 1995 +0000 Added second half of close-handshake commit 42d681412ccbe0b710a78f672bad207ce5b50d60 Author: Sebastian Hammer Date: Tue Aug 29 11:28:52 1995 +0000 *** empty log message *** commit edc031856dc0956a63914b19f20c1d93e48525a2 Author: Sebastian Hammer Date: Tue Aug 29 11:19:31 1995 +0000 Added Diagnostic Format commit d09e17f371431d3397588e6b749219608d37766a Author: Sebastian Hammer Date: Tue Aug 29 11:17:28 1995 +0000 Added code to receive close commit 602ffff9bb22a27dc020630a884c101ad09e1990 Author: Sebastian Hammer Date: Tue Aug 29 11:17:14 1995 +0000 *** empty log message *** commit 45f00f8e00111ba73b19c28568b8e0c88e55fdff Author: Sebastian Hammer Date: Tue Aug 29 11:16:53 1995 +0000 Added code to send close commit 071678ee007f2f0b28dbed63bfd48e65cf393f3c Author: Sebastian Hammer Date: Tue Aug 29 10:41:18 1995 +0000 Small. commit 43003ed479db7320b458611ea09db56f79de7cdb Author: Sebastian Hammer Date: Mon Aug 28 16:29:45 1995 +0000 A commit 32226dbfb020481e8589fad8f5f349eff63e3273 Author: Sebastian Hammer Date: Mon Aug 28 12:21:27 1995 +0000 Client can now ask for simple element set names. commit bad46a884892e5ed522dcbbe06a53b1cef475007 Author: Sebastian Hammer Date: Mon Aug 28 10:58:58 1995 +0000 Added extra choice-entry to data to catch visiblestring. commit 926053a25451c80865544d9c1278b05e5c04a707 Author: Sebastian Hammer Date: Mon Aug 28 10:58:21 1995 +0000 *** empty log message *** commit abaa7e4d8d4d9ad4a5a33e55895055a9975895aa Author: Sebastian Hammer Date: Thu Aug 24 15:13:18 1995 +0000 Beta 3 commit a8f0f1b7224655f2546b71608dbe8520ebc4f254 Author: Sebastian Hammer Date: Thu Aug 24 10:56:22 1995 +0000 Typos. commit 9d5b598c238693453bf2c7688374af1d940ce834 Author: Sebastian Hammer Date: Mon Aug 21 09:16:32 1995 +0000 Added Extended services + Item Order commit 7f4183f05884c781eb395a17e4282485c618ded6 Author: Sebastian Hammer Date: Mon Aug 21 09:10:10 1995 +0000 Smallish fixes to suppport new formats. commit 1c2df7a209b83db0b04700abff3512c0abf5d967 Author: Sebastian Hammer Date: Thu Aug 17 12:47:09 1995 +0000 Added GRS-1. commit 11fc1fa1b5e4b75942018efe466dbfdb41454077 Author: Sebastian Hammer Date: Thu Aug 17 12:44:55 1995 +0000 Fixed minor problems with GRS-1. Added support in c&s. commit e02b5659eaac4f86f7bf97779a5f0dcf9f6bf86a Author: Sebastian Hammer Date: Tue Aug 15 13:37:41 1995 +0000 Improved EXTERNAL commit 72592d242326dea9e05cae90d50348a2da0c0948 Author: Sebastian Hammer Date: Tue Aug 15 11:59:39 1995 +0000 Updated External commit c3900ef26a3b594b58a051116954daf3470e7f03 Author: Sebastian Hammer Date: Tue Aug 15 11:58:33 1995 +0000 Updated External. commit 650245423f092d3f645acee914230227901f2fd5 Author: Sebastian Hammer Date: Tue Aug 15 11:58:23 1995 +0000 *** empty log message *** commit d1c4d0f9dc12fadca9004dba185f78deeed46415 Author: Sebastian Hammer Date: Tue Aug 15 11:16:50 1995 +0000 CV:e ---------------------------------------------------------------------- CV:e ---------------------------------------------------------------------- commit 76231afd95f258db5024620636824dc905cf1de4 Author: Sebastian Hammer Date: Tue Aug 15 11:16:39 1995 +0000 Fixed pretty-printers. CV:e ---------------------------------------------------------------------- CV:e ---------------------------------------------------------------------- commit 8022d3fea9d2c3dfaa1ad1fbc2491cbd0cfa1d43 Author: Sebastian Hammer Date: Tue Aug 15 11:16:05 1995 +0000 *** empty log message *** commit 16b46be517decccb81f089c56ed798e202a4b86b Author: Sebastian Hammer Date: Thu Aug 10 08:54:33 1995 +0000 Added Explain. commit 6123c0dac006084449fb80900c5764417a6bd706 Author: Sebastian Hammer Date: Thu Aug 10 08:53:52 1995 +0000 Added Explain commit 718bedef3c688e26b434b25e2e77852ddda6181c Author: Sebastian Hammer Date: Wed Aug 2 10:23:06 1995 +0000 Smallish commit a54b78d4dfd37879e595070471ee69ab9dba64f1 Author: Sebastian Hammer Date: Mon Jul 31 14:34:26 1995 +0000 Fixed bug in process_searchResponse (numberOfRecordsReturned). commit 6dc5380b5f90907fb32efe356ff1659fc9c5531e Author: Sebastian Hammer Date: Mon Jul 31 14:33:39 1995 +0000 Smallish change. commit c7faf05cbdcd2718c695c36b2d4b3793a61c70a7 Author: Sebastian Hammer Date: Tue Jun 27 13:22:25 1995 +0000 *** empty log message *** commit 4c139281f38687ac9e5cf120bd8421d476d51bd6 Author: Sebastian Hammer Date: Tue Jun 27 13:20:59 1995 +0000 SUTRS support commit 9f397feecfd366f335e8a7e30b13431790c00f84 Author: Sebastian Hammer Date: Tue Jun 27 13:20:51 1995 +0000 Fixed sign-clash. Non-fatal warning commit 6d7038a051e53896c8447bec79279353a3ab57ef Author: Sebastian Hammer Date: Tue Jun 27 13:20:32 1995 +0000 Added SUTRS support commit 016a7b8249c7914dc028829009a7ea7574e29e51 Author: Sebastian Hammer Date: Tue Jun 27 13:20:06 1995 +0000 Can now inherit external libs from top-level makefile commit 44c069f9cae451dae880e8d576387f6a46ce588d Author: Sebastian Hammer Date: Tue Jun 27 13:19:28 1995 +0000 V1.0b2 commit 86316b9e9d3256c07468c85dd301e69e3865794d Author: Sebastian Hammer Date: Tue Jun 27 13:12:07 1995 +0000 v1.0b2 See CHANGELOG for update info now. commit c69f4f05fce93bee043f0edd6c428dc49d75620d Author: Adam Dickmeiss Date: Tue Jun 27 12:44:42 1995 +0000 Fixed bug. commit 502061d0cd291d3858c9b70eccd09dc35f400080 Author: Sebastian Hammer Date: Sun Jun 25 10:53:35 1995 +0000 Smallish adjustments. commit be8acf3280618446f31bb2beac8b1116f748467b Author: Sebastian Hammer Date: Thu Jun 22 12:25:13 1995 +0000 Added changelog commit fca985d5c2944fa01270d363190264e4ee36ec93 Author: Sebastian Hammer Date: Thu Jun 22 09:28:03 1995 +0000 Fixed bug in SUTRS processing. commit a200fc19301615242b43e18b9c03027d495302bb Author: Sebastian Hammer Date: Mon Jun 19 17:01:48 1995 +0000 This should bring us in sync with the version distributed as 1.0b commit 0a75f22446e3298f82acff44810eae3e9592bbdd Author: Sebastian Hammer Date: Mon Jun 19 13:48:49 1995 +0000 Initial revision commit 208b345b9128f274f3c349bc1616fe2d2bb21bde Author: Sebastian Hammer Date: Mon Jun 19 13:39:56 1995 +0000 *** empty log message *** commit 1a4ed05d639cfb9931783be01a93d1b91d28d313 Author: Sebastian Hammer Date: Mon Jun 19 13:39:16 1995 +0000 1.0 beta All of basic 1995 should be in place at this point. Some little features added to make the server more useful. BER dumper for bad protocol debugging. Etc. First major release. All following releases should come with a changelog. commit e31a14058cffd70c2d65a6f599e216e0bcddf7b7 Author: Sebastian Hammer Date: Mon Jun 19 13:06:50 1995 +0000 Fixed simple bug in the code to handle untagged choice elements. commit 76cc232b7a7313f292e2fa28a2ea12eaab865353 Author: Sebastian Hammer Date: Mon Jun 19 12:40:18 1995 +0000 Added log_file() commit d6a0e5ff2f35326b9cd2e1260c56fd5dabafd3eb Author: Sebastian Hammer Date: Mon Jun 19 12:39:09 1995 +0000 Fixed bug in timeout code. Added BER dumper. commit c70f63352bac2f0bfdcc3078d69f43adbcc7ad2d Author: Sebastian Hammer Date: Mon Jun 19 12:38:23 1995 +0000 Reorganized include-files. Added small features. commit 42d3d8a6486c495357574e5db0fc736834d8ba40 Author: Sebastian Hammer Date: Mon Jun 19 12:37:41 1995 +0000 Added BER dumper. commit 38f28b040157ff5bffcd41e557205224f6bb0e9c Author: Sebastian Hammer Date: Mon Jun 19 12:37:28 1995 +0000 Fixed a bug in the compspec. commit 77fe8ea4a114c45e899a63ccfe767ce0dff722a0 Author: Sebastian Hammer Date: Mon Jun 19 12:37:12 1995 +0000 *** empty log message *** commit 1110373102ed65ffcaa5384aa0514516b162c543 Author: Sebastian Hammer Date: Fri Jun 16 13:15:56 1995 +0000 Fixed Defaultdiagformat. commit 0d7bd5b0e03b77779702a35738e5c7bcc5d3849d Author: Sebastian Hammer Date: Fri Jun 16 10:46:48 1995 +0000 *** empty log message *** commit ccdaf5d5cd52555eefe9b22ea4bee98203e33626 Author: Sebastian Hammer Date: Fri Jun 16 10:31:33 1995 +0000 Added session timeout. commit 99197c4bc292188d25b7ccda5328546dc899648e Author: Sebastian Hammer Date: Fri Jun 16 10:30:38 1995 +0000 Added REUSEADDR. commit bee632cc3a4d22b61dd7dc1a196253be5782cf0c Author: Sebastian Hammer Date: Fri Jun 16 10:29:03 1995 +0000 *** empty log message *** commit 7b3772b8fcf2cc486e079b3687b183f997374271 Author: Sebastian Hammer Date: Thu Jun 15 15:45:03 1995 +0000 Added date info. commit 78f86cdd3cc8d44fb8c4329e408a3aa679bd8b9e Author: Sebastian Hammer Date: Thu Jun 15 15:42:01 1995 +0000 Fixed some v3 bugs commit a7b235097c10590dde6dfa1859590d4c4e930366 Author: Sebastian Hammer Date: Thu Jun 15 12:30:48 1995 +0000 Setuid-facility. commit 832b2543074a15413097abfc0d9b7aca2c301b68 Author: Sebastian Hammer Date: Thu Jun 15 12:30:06 1995 +0000 Added @ as hostname alias for INADDR ANY. commit 58eaa160fef1b2eae412e9be77833818a95dae92 Author: Sebastian Hammer Date: Thu Jun 15 12:29:45 1995 +0000 *** empty log message *** commit 1db60f5a7396b9b37560f6b6962be0b68240486c Author: Sebastian Hammer Date: Thu Jun 15 07:44:49 1995 +0000 Moving to v3. commit be3b6e0eee631d7611e6e5f96cce246d090b9848 Author: Sebastian Hammer Date: Thu Jun 15 07:44:39 1995 +0000 MOving to v3. commit 189fa86838b242b5f37e5ea2db92a84935050a81 Author: Sebastian Hammer Date: Wed Jun 14 15:26:30 1995 +0000 *** empty log message *** commit 9edede4a23ba78a2c4a463eabbe7623e7f8d8fbd Author: Sebastian Hammer Date: Wed Jun 14 12:34:55 1995 +0000 Moved version.h to include/ commit fd5d2db3eb371d4af60e2d50d1c7e6fb2d4e64c3 Author: Adam Dickmeiss Date: Wed Jun 14 11:06:35 1995 +0000 Bug fix: Attributes wasn't interpreted correctly! commit d9d409a0b09cff42f6937df2e78fb3eb2f81d319 Author: Sebastian Hammer Date: Wed Jun 14 10:06:25 1995 +0000 Moved yazlib to comstack commit 8a425ff5328260fff0dcc28f08b5bdf6bfac84ab Author: Sebastian Hammer Date: Wed Jun 14 09:58:19 1995 +0000 Renamed yazlib to comstack. commit c2af22077779cd65b746b2822b2b1478ea0619fe Author: Sebastian Hammer Date: Wed Jun 7 14:42:30 1995 +0000 Fixed CLOSE commit 6295998029aa62f64729e15d4a7ffb0038045d78 Author: Sebastian Hammer Date: Wed Jun 7 14:36:22 1995 +0000 Added CLOSE commit 98a0e019041e9911d573861dd440764cdd08b050 Author: Sebastian Hammer Date: Tue Jun 6 14:56:58 1995 +0000 Better diagnostics. commit c4c36570d87ff977f214af637a2f7cb658888dd0 Author: Sebastian Hammer Date: Tue Jun 6 08:41:44 1995 +0000 Better diagnostics. commit 5f2823e584b4b138886c985bc1490b35aa6cdd4c Author: Sebastian Hammer Date: Tue Jun 6 08:15:19 1995 +0000 Cosmetic. commit 6bd2c88268605657b4174f39af96a71b87931baf Author: Sebastian Hammer Date: Mon Jun 5 10:53:31 1995 +0000 Added a better SCAN. commit e0c187d10957ba9aa5c459c4f01afbedb38b33a0 Author: Sebastian Hammer Date: Mon Jun 5 10:53:13 1995 +0000 Smallish. commit e0bff0e5d91422453fa9779565beeef33c4f2740 Author: Sebastian Hammer Date: Mon Jun 5 10:52:22 1995 +0000 Added SCAN. commit c546a1218ae6a2ccda5dcf30809b18a0e335918c Author: Sebastian Hammer Date: Mon Jun 5 10:52:05 1995 +0000 Fixed some negligences. commit 10308339de640b9ff73ed096a6ed2f5faf5646de Author: Sebastian Hammer Date: Fri Jun 2 09:50:09 1995 +0000 Smallish. commit 101d89d1a26a27c93115a68af84e9c72beb1abd6 Author: Sebastian Hammer Date: Fri Jun 2 09:49:47 1995 +0000 Add access control commit 6edc916a5a8d44e1d7708f5018828e0d2020690b Author: Sebastian Hammer Date: Fri Jun 2 09:49:11 1995 +0000 Adding access control commit f45eb9a4844db2509e24e38a043625310c1e32a1 Author: Sebastian Hammer Date: Thu Jun 1 14:34:53 1995 +0000 Work commit ee91cff35d9150fe522c72b903680ccc49bd75ba Author: Sebastian Hammer Date: Thu Jun 1 11:25:03 1995 +0000 Smallish. commit 9760c02cdacaca31695e2adaf1747c82811f3b8a Author: Sebastian Hammer Date: Thu Jun 1 11:24:52 1995 +0000 Resource Control commit 4b449e2e477bc6feca0b83ce8e8e0bbc205c7e4a Author: Sebastian Hammer Date: Thu Jun 1 11:22:17 1995 +0000 Resource control commit 8cfe6e1e33b0d50d2f31c825c6db5fe2eef33663 Author: Sebastian Hammer Date: Thu Jun 1 11:21:01 1995 +0000 Attempting to fix a bug in pack-records. replaced break with continue for large records, according to standard. commit 51c420cc7f3b1c3a362822b353683653791cd8bb Author: Sebastian Hammer Date: Wed May 31 08:29:21 1995 +0000 Nothing significant. commit 0b2e335809568732b2bbae6bc0b585524570b7a7 Author: Sebastian Hammer Date: Tue May 30 10:54:51 1995 +0000 Added some backwards compatibility to the comstack (CS_SR->PROTO_SR) commit ddd998ca83ffe16e7548f0717d218d32a2b57a33 Author: Sebastian Hammer Date: Tue May 30 10:25:40 1995 +0000 Fixed dependency control commit 1b2f4362552dcb365b6e4722d5eac7bb704c6c01 Author: Sebastian Hammer Date: Tue May 30 10:16:03 1995 +0000 Makefile fix commit 4443923c16260ab0c3180fc98a6969a3bf3e1af3 Author: Sebastian Hammer Date: Tue May 30 10:15:49 1995 +0000 Added our implementor's ID commit 8f3107265c90e9e90f272eb4d77394b0ca13ff38 Author: Sebastian Hammer Date: Mon May 29 08:50:50 1995 +0000 *** empty log message *** commit b97c5f66c697c58dc6ee56c402da4237236d70ce Author: Sebastian Hammer Date: Mon May 29 08:17:13 1995 +0000 iMoved oid to util to support comstack. commit dd5f78cc0a977733507aaeb5c76b00ba2debe392 Author: Sebastian Hammer Date: Mon May 29 08:12:06 1995 +0000 Moved oid to util commit 0abf92a5ba3132c9727bec630ed1f04bc51b4f04 Author: Sebastian Hammer Date: Mon May 29 08:11:54 1995 +0000 *** empty log message *** commit d4081206ab9bd0ed0c97c032d264ad1e1d4a051e Author: Sebastian Hammer Date: Mon May 29 08:11:30 1995 +0000 Moved oid from odr/asn to util. commit 17428c7afa7e84d91e4529ba440a953317dc2b82 Author: Sebastian Hammer Date: Mon May 29 08:10:38 1995 +0000 Moved oid.c to util. commit 047c06fdbb9f4f188582b2a6c1f3f22c21333ac2 Author: Sebastian Hammer Date: Mon May 29 08:10:18 1995 +0000 Smallish doc updates. commit 3050c29a2d88f6af325f1fb9ae6d0927babf9193 Author: Adam Dickmeiss Date: Fri May 26 08:56:05 1995 +0000 New function: p_query_scan. commit 583beebdfacea28d31a43a42cbdf3b683fd3a3f1 Author: Sebastian Hammer Date: Thu May 25 11:00:08 1995 +0000 *** empty log message *** commit feeec79483b93bb8bc3f0b25b90377114d271db6 Author: Adam Dickmeiss Date: Mon May 22 15:31:26 1995 +0000 Removed ../../alex/include from -I. commit 8bc8803d672b7ecf182a0bb691885d37cf2a8160 Author: Adam Dickmeiss Date: Mon May 22 15:31:05 1995 +0000 New function, p_query_rpn, to convert from prefix (ascii) to rpn (asn). commit fe03e3dc1bf9c45d942064b92e0910c17220bcb1 Author: Adam Dickmeiss Date: Mon May 22 15:30:13 1995 +0000 Client uses prefix query notation. commit f65413048bdfaaa34f61c9930cc530c31ad2d97a Author: Sebastian Hammer Date: Mon May 22 15:06:53 1995 +0000 *** empty log message *** commit 426dee508ccda399a2ec5a43d26e97493184db2a Author: Sebastian Hammer Date: Mon May 22 14:56:57 1995 +0000 Fixed problem in decoding empty sequence. commit d96b5f6d7f2d2775e7532066d2c75e678cdc8a4c Author: Sebastian Hammer Date: Mon May 22 14:56:40 1995 +0000 *** empty log message *** commit cae330549b4c3cdd6e186815932cee9e7018d752 Author: Sebastian Hammer Date: Mon May 22 14:47:00 1995 +0000 ODR_NULLVAL --> void commit d4c07f5246e1fe90fb79aaf44a5baccf00140221 Author: Sebastian Hammer Date: Mon May 22 14:44:53 1995 +0000 *** empty log message *** commit 3a5079aa34321c59d355e40f684094b99da3a197 Author: Sebastian Hammer Date: Mon May 22 14:42:19 1995 +0000 Replaced empty attrlist with ODR_NULLVAL commit 2d093b88ca5c238b6394c1254078841b19f724ff Author: Sebastian Hammer Date: Mon May 22 14:02:23 1995 +0000 Added cleanup of lib/ commit a1099d28cc3966419e7e90989510fdc2ba53643b Author: Sebastian Hammer Date: Mon May 22 14:00:02 1995 +0000 removed silly ref to libserver. commit 15a2da6d1e7795f107bf056d0efce8e4cccf03b1 Author: Sebastian Hammer Date: Mon May 22 13:58:18 1995 +0000 Fixed an ODR_NULLVAL. commit d4c12ec7c451e74a949cc7c8d5fef226c995ddc6 Author: Sebastian Hammer Date: Mon May 22 11:32:15 1995 +0000 Moved yaz-ccl to util. commit 327f8d22cfd0b717efd69bb105ffee1d05f08e4e Author: Sebastian Hammer Date: Mon May 22 11:32:01 1995 +0000 Fixing Interface to odr_null. commit 54605527769927a70af506babc5d663a6caf7e64 Author: Sebastian Hammer Date: Mon May 22 11:31:24 1995 +0000 Added PDUs commit b3be6bf5b31785568d39c3c1d631759df84d90ca Author: Sebastian Hammer Date: Mon May 22 11:30:30 1995 +0000 Added prettier client. commit a8cbf4e58821b5a7e64063f6a1b50c453494167f Author: Sebastian Hammer Date: Mon May 22 11:30:15 1995 +0000 Adding Z39.50-1992 stuff to proto.c. Adding zget.c commit 1479cd42ce8537af61e2883d9567b0e13bd37197 Author: Sebastian Hammer Date: Mon May 22 11:29:19 1995 +0000 *** empty log message *** commit 28df1d8cbdbee7b3e9b5a23e340e63c7b852841c Author: Sebastian Hammer Date: Thu May 18 13:06:15 1995 +0000 Doc. update commit 86927dcf1fb5dbd4d30f2d906ff5ceba7319f142 Author: Sebastian Hammer Date: Thu May 18 13:02:07 1995 +0000 Smallish. commit dd509bd7c24e5c9f93f0c0072bfb91227142705b Author: Sebastian Hammer Date: Wed May 17 08:42:26 1995 +0000 Transfer auth info to backend. Allow backend to reject init gracefully. commit 18b7618dac0dc32da1f77134d15b60af0ffd84fe Author: Sebastian Hammer Date: Wed May 17 08:41:54 1995 +0000 Small, hopefully insignificant change. commit bceb14af6e76b53d2dcb49af2c981d4bbfc20e3a Author: Sebastian Hammer Date: Wed May 17 08:41:34 1995 +0000 Added delete to proto & other little things. Relaying auth info to backend. commit 37a5a5d8d849029f134e4fcef8f6b360a6420c38 Author: Sebastian Hammer Date: Wed May 17 08:40:56 1995 +0000 Added delete. Fixed some sequence_begins. Smallish. commit 7d3aff023a795b533064879e58946993a01ef729 Author: Sebastian Hammer Date: Wed May 17 08:37:31 1995 +0000 Removed dmalloc commit f09f5c509aa742243939b0b0b6a289beadc75dce Author: Adam Dickmeiss Date: Wed May 17 08:19:08 1995 +0000 Executable marcdump removed on make clean. commit 225a451c3b6a46e0034060affad7df94b18ba3aa Author: Sebastian Hammer Date: Tue May 16 09:37:18 1995 +0000 Fixed bug commit 99268f722648e84bf5c54eb685a1434e100f38a1 Author: Sebastian Hammer Date: Tue May 16 08:50:15 1995 +0000 License, documentation, and memory fixes commit 9e4d074b5d72a383addc86a2c7e76ed60d3c4883 Author: Sebastian Hammer Date: Mon May 15 13:25:10 1995 +0000 Fixed memory bug. commit b7cfb26ec2c224a900931d09d316efe78dd4d6c5 Author: Sebastian Hammer Date: Mon May 15 13:20:38 1995 +0000 ZZ commit eba5a38ad752c24f77110eb02e96e3895bd0fb3b Author: Sebastian Hammer Date: Mon May 15 12:12:22 1995 +0000 Request queue. commit dffa37262abe124e347fc19d7cc8a4cfa3a613bf Author: Sebastian Hammer Date: Mon May 15 11:58:32 1995 +0000 Added license document. commit 8c0d9ab51d716e170e6185dbfeb9462d91fb1a06 Author: Sebastian Hammer Date: Mon May 15 11:56:55 1995 +0000 Debuggng & adjustments. commit fe5f2da0c0c4ae00864cc72a36714e90405456e4 Author: Sebastian Hammer Date: Mon May 15 11:56:36 1995 +0000 Asynchronous facilities. Restructuring of seshigh code. commit 84fdcc95fbd65091100b861671f410313e78eb0e Author: Sebastian Hammer Date: Mon May 15 11:56:08 1995 +0000 More work on memory management. commit fed6a7e0b9f6c90dc49f0000de429b2aec7e43cb Author: Sebastian Hammer Date: Mon May 15 11:55:54 1995 +0000 Work on asynchronous activity. commit b6851a557131564beda1f460caa1197fd272d310 Author: Sebastian Hammer Date: Mon May 15 11:55:25 1995 +0000 Smallish. commit 57a0976b6e7d84f77a08dcd4cf03d6656dae60d4 Author: Sebastian Hammer Date: Mon May 15 11:55:13 1995 +0000 Documentation & other details. commit 944822bc44705a21ec8b9ce44e0765e0fe37f635 Author: Adam Dickmeiss Date: Thu May 11 15:31:43 1995 +0000 New function ccl_scan_query. commit 7148f4238bd2ea22c60008fc3062626b42456ae4 Author: Sebastian Hammer Date: Tue May 2 08:53:07 1995 +0000 Trying in vain to fix comm with ISODE commit 8ce78c7b1b91c6298c913349c46a61bd26244734 Author: Sebastian Hammer Date: Tue May 2 08:52:28 1995 +0000 Doc work commit 4c93ea2a3df5c172408103163ca10499d2c499ed Author: Sebastian Hammer Date: Fri Apr 28 14:15:36 1995 +0000 *** empty log message *** commit eb9336c6ecfd078b265ee69cef96a3a2dfa04ace Author: Sebastian Hammer Date: Fri Apr 21 16:31:56 1995 +0000 *** empty log message *** commit b200b3ce30a8db1d68b2ddfe9994acff1a5d2789 Author: Sebastian Hammer Date: Thu Apr 20 15:12:44 1995 +0000 Cosmetic commit 881c919d54a8d7da72375592033913fcf161e56e Author: Sebastian Hammer Date: Wed Apr 19 10:08:39 1995 +0000 Smallish commit 63cfdc4bcf039bad895e9d1bbbaa72e7714b59bc Author: Sebastian Hammer Date: Tue Apr 18 15:23:58 1995 +0000 *** empty log message *** commit aa82967af8f06004b567ad1ed40c67b056c44e7b Author: Sebastian Hammer Date: Tue Apr 18 08:15:11 1995 +0000 Added dynamic memory allocation on encoding (whew). Code is now somewhat neater. We'll make the same change for decoding one day. commit f2944c80ada3871faf8ec49bcad1470e6add4bac Author: Sebastian Hammer Date: Tue Apr 18 08:14:37 1995 +0000 Added dynamic memory allocation on encoding commit 923802efbd1b95c2349dbef298d0c650f21f95a2 Author: Sebastian Hammer Date: Mon Apr 17 11:28:17 1995 +0000 Smallish commit 549074d1394b37eb04b612c0f2f16fe1361d6243 Author: Sebastian Hammer Date: Mon Apr 17 09:37:31 1995 +0000 *** empty log message *** commit dabd8c212617030ef132e9b9a2ae3e1ed2817467 Author: Sebastian Hammer Date: Tue Apr 11 11:58:35 1995 +0000 Fixed bug. commit d32b1dbdc1f0392883547cc9e56c26f384a4c57f Author: Sebastian Hammer Date: Tue Apr 11 11:52:01 1995 +0000 Fixed possible buf in proto.c commit 7d093cf64e6045cf14dbf199f8cdf6b808dd3b65 Author: Sebastian Hammer Date: Mon Apr 10 10:28:46 1995 +0000 Added copy of CCL and MARC display commit 330271187bc05322c13e6e22483120ca8e5a20a1 Author: Sebastian Hammer Date: Mon Apr 10 10:28:16 1995 +0000 Added copy of CCL. commit f3dd50f81c9aed6768a88b253615d6667cd92a35 Author: Sebastian Hammer Date: Mon Apr 10 10:23:49 1995 +0000 Fixes. commit 79b35f162af8212091fab0ca10b458c262685eaa Author: Sebastian Hammer Date: Mon Apr 10 10:23:34 1995 +0000 Some work to add scan and other things. commit 7b336b394526b31a4c76063e5f63ae3b11d39dda Author: Sebastian Hammer Date: Mon Apr 10 10:23:10 1995 +0000 Smallish changes. commit b4bc42219f953362453be1b22bd323416e41cf98 Author: Sebastian Hammer Date: Mon Apr 10 10:22:57 1995 +0000 Tinkering. commit f16b3e60529eece2026d584d1f420555690488a6 Author: Sebastian Hammer Date: Mon Apr 10 10:22:46 1995 +0000 Added SCAN commit 205c8de99c5cfe2eb4a0cfbeed34603ebf49b318 Author: Sebastian Hammer Date: Mon Apr 10 10:22:21 1995 +0000 Added SCAN. commit 61c0c42465b6886f6aff3c5cf6a94404b03a1fbd Author: Sebastian Hammer Date: Mon Apr 10 10:22:06 1995 +0000 Added README. Mods to top-level mkf. commit 87a9bdcb0fda85461f9992519f4239645c8b2826 Author: Sebastian Hammer Date: Fri Mar 31 10:16:51 1995 +0000 Fixed logging. commit c7fa0e1f18e00b58b65b39b3c36cb68930e3838c Author: Sebastian Hammer Date: Fri Mar 31 09:18:55 1995 +0000 Added logging. commit bcd497eb945e135d9693ca7f1c0285930a0622fa Author: Sebastian Hammer Date: Thu Mar 30 16:08:39 1995 +0000 Little mods. commit 031f86a3dea0a26278eb9efcce46c1b4d3835a79 Author: Sebastian Hammer Date: Thu Mar 30 14:03:17 1995 +0000 Added RFC1006 as separate library commit e5e0b0c0af410a18ee3f57bdcfdc5e68265f0343 Author: Sebastian Hammer Date: Thu Mar 30 14:02:50 1995 +0000 *** empty log message *** commit a140c9feb12ed5e2b98fc0e94501774c926ff831 Author: Sebastian Hammer Date: Thu Mar 30 14:02:36 1995 +0000 Added rfc1006 commit 3cb5bc246b8640b6aca6339080315591881a24e1 Author: Sebastian Hammer Date: Thu Mar 30 13:29:02 1995 +0000 Smallish commit 26f25a4dd83618b5230956c6fb37bdda473ce501 Author: Sebastian Hammer Date: Thu Mar 30 12:18:17 1995 +0000 Fixed bug. commit fe47f8f7fe8dc10cfe508d5cd052dec12683cb50 Author: Sebastian Hammer Date: Thu Mar 30 12:18:09 1995 +0000 Added info. commit 6a0c308ce3cb682cb908d7c4acf634ed7ff1b90f Author: Sebastian Hammer Date: Thu Mar 30 11:10:56 1995 +0000 Added log.o commit 945f86bd3958b5d36aaaeb4be945b0a8632f3b40 Author: Sebastian Hammer Date: Thu Mar 30 10:26:53 1995 +0000 Logging system commit 5317b91368cca60e5a368b0ea2d7665704e2d57b Author: Sebastian Hammer Date: Thu Mar 30 10:26:43 1995 +0000 Added Term structure commit 372a500da226336c7bb4036e980be2587ad5fdeb Author: Sebastian Hammer Date: Thu Mar 30 09:39:31 1995 +0000 Moved .h files to include directory commit c3a132ce4aea3bb358b185ef58781b4bef8745fc Author: Sebastian Hammer Date: Thu Mar 30 09:09:24 1995 +0000 Added state-handle and some support for asynchronous activities. commit 1c026b4c8a1a509729b326328e55227604d9ca38 Author: Sebastian Hammer Date: Thu Mar 30 09:08:39 1995 +0000 Added Resource control protocol commit 2f5c9e5bc97a81a1e83f825146453a4a89696274 Author: Sebastian Hammer Date: Wed Mar 29 15:40:16 1995 +0000 Ongoing work. Statserv is now dynamic by default commit e8464a391ad260860795a69bcd1bcf6940cc17de Author: Sebastian Hammer Date: Wed Mar 29 15:39:57 1995 +0000 Fixed bugs in the bitmask operations commit c87d26ad68b76e89a5d1fd76b5074542860d8ba6 Author: Sebastian Hammer Date: Wed Mar 29 08:06:35 1995 +0000 *** empty log message *** commit 7e84d8b777a1f70e3a8c322360e0945704a48908 Author: Sebastian Hammer Date: Wed Mar 29 08:06:13 1995 +0000 Added a few v3 elements commit ab6840e96ece6494bbcc06e1c52f0deb371bcf53 Author: Sebastian Hammer Date: Tue Mar 28 09:16:21 1995 +0000 Added record packing to the search request commit f90ac049be17bf84f79ee8e541edab72f2b259e6 Author: Sebastian Hammer Date: Tue Mar 28 09:15:45 1995 +0000 Fixed bug in the printing mode commit 4972d81f72edfe9d44573e863cc2d4c6305e2a64 Author: Sebastian Hammer Date: Mon Mar 27 15:02:00 1995 +0000 Added some includes for better portability commit 441b13f600a164f373f19bba4b574527d13689a1 Author: Sebastian Hammer Date: Mon Mar 27 15:01:44 1995 +0000 Added include of sys/types to further portability commit f26c147b7e348a8e0b91364f4a4d100dc1832467 Author: Sebastian Hammer Date: Mon Mar 27 08:35:16 1995 +0000 Created util library Added memory debugging module. Imported options-manager commit afff2d64ae8758642c8e88bfebff9c00a982daa4 Author: Sebastian Hammer Date: Mon Mar 27 08:34:20 1995 +0000 Added dynamic server functionality. Released bindings to session.c (is now redundant) commit 5f4456fa00e080d850f7e25aba2f1e12cab8adcf Author: Sebastian Hammer Date: Mon Mar 27 08:33:13 1995 +0000 Added more OID utilities. commit 6ea099611ad6b5eacd8abdc2d798f86d4adfbd12 Author: Sebastian Hammer Date: Mon Mar 27 08:32:50 1995 +0000 Simple commit 6707f9687d531abc58665df48168d8c800300a54 Author: Sebastian Hammer Date: Mon Mar 27 08:32:09 1995 +0000 Added OID database commit 7a1249a8dee58e36565e610bb44a8175e0b64d33 Author: Sebastian Hammer Date: Mon Mar 27 08:29:30 1995 +0000 Added util commit 4cd00529895588ac3f40224b8e2bbb57ba28ddc1 Author: Sebastian Hammer Date: Wed Mar 22 15:01:26 1995 +0000 Adjusting record packing. commit 813f1a77544956dd0e0f8b9cbdf491a6b01927cb Author: Sebastian Hammer Date: Wed Mar 22 10:13:21 1995 +0000 Working on record packer commit b89858d4c181a814bd2a00eacdfee85120cee009 Author: Sebastian Hammer Date: Wed Mar 22 10:13:04 1995 +0000 Added echo in loop. commit 512bca4cb3acca0a9dd9386fb3fdd289804a4291 Author: Sebastian Hammer Date: Tue Mar 21 15:53:31 1995 +0000 Little changes. commit dbf6bee5181285baf2fd8f36511846d138655404 Author: Sebastian Hammer Date: Tue Mar 21 12:30:09 1995 +0000 Beginning to add support for record packing. commit 10eb94e29af1a3899279354253ecc01e8298659f Author: Sebastian Hammer Date: Tue Mar 21 10:17:27 1995 +0000 Fixed little bug in decoder. commit 396d0ccd2549e6f31cf1f9adc1c19a97d3a7b0de Author: Sebastian Hammer Date: Mon Mar 20 12:18:22 1995 +0000 Fixed bug in ber_oid commit bfd2f4429361a876789ef5329dc953ab6aa2ced0 Author: Sebastian Hammer Date: Mon Mar 20 11:26:52 1995 +0000 *** empty log message *** commit 74c93e64254dddb35f08ec54ee401fc85d3f8cb7 Author: Sebastian Hammer Date: Mon Mar 20 09:46:24 1995 +0000 Added osi support. commit 2f53a8463ada69f68e58a8c5dc4704acedab27b4 Author: Sebastian Hammer Date: Mon Mar 20 09:45:59 1995 +0000 Added odr_mem to library commit f12dd973a9e92e4d676696712ed5efbb6bf14aed Author: Sebastian Hammer Date: Mon Mar 20 09:45:34 1995 +0000 Added depend NOP commit 4b2fd659ae0a0d33827f8ad600fd6bbc87e54c89 Author: Sebastian Hammer Date: Mon Mar 20 09:45:09 1995 +0000 Working towards v3 commit 68dc3fc2e6ea601cd36a5bf578ab8adb04ed23f3 Author: Sebastian Hammer Date: Sat Mar 18 12:16:31 1995 +0000 Minor changes. commit 9799777340f74ef645acbf171636924a9369d052 Author: Sebastian Hammer Date: Fri Mar 17 10:44:13 1995 +0000 Added catch of null-string in makediagrec commit 892f7f56860a1ee8e8d816eeaec0387c54c1a0a7 Author: Sebastian Hammer Date: Fri Mar 17 10:17:25 1995 +0000 Added memory management. commit 08d286ddede794e73ba8b3c85497de3e0c80312b Author: Sebastian Hammer Date: Thu Mar 16 17:42:39 1995 +0000 Little changes commit ba37668dbdedb1fdc4a69a9d2363222c5e6f6fd7 Author: Sebastian Hammer Date: Thu Mar 16 17:42:29 1995 +0000 Added clean commit 25b7a1f19e0a16578e5918dd7ce70320d915dd23 Author: Sebastian Hammer Date: Thu Mar 16 13:28:59 1995 +0000 Partitioned server. commit 11a58ec3e43c76b092d85510825f7317d7efc3ad Author: Sebastian Hammer Date: Thu Mar 16 13:28:13 1995 +0000 Added makelib commit 5227c7d54c015a1fda5d5b848445fb0343554b61 Author: Sebastian Hammer Date: Wed Mar 15 16:02:10 1995 +0000 Modded session.c seshigh.c commit 81545d983681a20339cc3e391cc448a3e4ebaa32 Author: Sebastian Hammer Date: Wed Mar 15 15:36:12 1995 +0000 Removed pwrite commit 9e7c99310963a811885820ccccf9e96fae6ecf8b Author: Sebastian Hammer Date: Wed Mar 15 15:18:51 1995 +0000 Little changes to better support nonblocking I/O Added backend.h commit 281bd093d547534ce4e667214a1881a84a9f3227 Author: Adam Dickmeiss Date: Wed Mar 15 13:46:09 1995 +0000 New function diagbib1_str. commit cfd912f04c301c2db4cebd7f8ec8c4de6c51f314 Author: Sebastian Hammer Date: Wed Mar 15 11:18:17 1995 +0000 Smallish changes. commit 70efa832d93f63e4fe7de44b666f3b66ae87c23f Author: Sebastian Hammer Date: Wed Mar 15 11:18:04 1995 +0000 Fixed serious bug in odr_cons commit 33821b1729f0afa0cadcecf57fc67fea7138bdab Author: Sebastian Hammer Date: Wed Mar 15 11:17:40 1995 +0000 Fixed some return-checks from choice.. need better ay to handle those.. commit 970d03b19751c5b21c8c157aa95162dd2dad80b0 Author: Adam Dickmeiss Date: Wed Mar 15 09:08:29 1995 +0000 Take care of preferredMessageSize. commit 7f22a88d407609fc8a4f8554ef754dd649145447 Author: Sebastian Hammer Date: Wed Mar 15 08:37:40 1995 +0000 Now we're pretty much set for nonblocking I/O. commit adc5e45a46d9ce4f73370332f6e4c2f81c1d36fe Author: Sebastian Hammer Date: Wed Mar 15 08:37:06 1995 +0000 Fixed protocol bugs. commit 142dc0b64447a929fbd4dd7f9c8ba4c83c107d70 Author: Adam Dickmeiss Date: Wed Mar 15 08:27:15 1995 +0000 PresentRequest changed to return MARC records from file 'dummy-records'. commit a4d2b1d22b135d53d88c96a452a62d3009197d29 Author: Sebastian Hammer Date: Tue Mar 14 16:59:48 1995 +0000 Bug-fixes commit cb589c1cd95b040182aac4fb50d37bbf7107cde2 Author: Sebastian Hammer Date: Tue Mar 14 16:59:38 1995 +0000 Added odr_constructed_more check commit d4a0d41731122cc17df31b8e1957be28188df898 Author: Sebastian Hammer Date: Tue Mar 14 16:59:24 1995 +0000 Fixed OPTIONAL flag in attributeelement commit 231d73232fc9420212ae6889a9e8002d7a124b95 Author: Sebastian Hammer Date: Tue Mar 14 16:59:05 1995 +0000 *** empty log message *** commit 1ff3deef138c1f1af5f435c4931f61e5b1595372 Author: Sebastian Hammer Date: Tue Mar 14 11:30:14 1995 +0000 Works better now. commit 0a3a8b6400167c2dfd6e6b5f135f6ad4783e554c Author: Sebastian Hammer Date: Tue Mar 14 10:27:57 1995 +0000 More work on demo server. commit b3500b4a0d2b4bb25bb6d4e9ab72e0e488655da6 Author: Sebastian Hammer Date: Tue Mar 14 10:27:34 1995 +0000 Modified makefile to use common lib Beginning to add memory management to odr commit b44b4c3587d6a479d12f91c1ce38eaf533fb4980 Author: Sebastian Hammer Date: Tue Mar 14 10:27:12 1995 +0000 Modified makefile to use common lib commit 7e158942eb374e7211dd3dbd834e664c70a2d143 Author: Sebastian Hammer Date: Fri Mar 10 18:22:44 1995 +0000 The rudiments of an asynchronous server. commit e699f6c0dc97950dce23a228eeabc80f17edd6d3 Author: Sebastian Hammer Date: Fri Mar 10 18:22:18 1995 +0000 Just the usual copyright-header. commit eb2d32be86dd9b1db4303f37dcd4bc3b8927e5ad Author: Sebastian Hammer Date: Fri Mar 10 11:44:40 1995 +0000 Fixed serious stack-bug in odr_cons_begin commit 41f4b2c49b60cf5f9ae896b537211ae830c39a55 Author: Sebastian Hammer Date: Wed Mar 8 12:11:59 1995 +0000 Added better error checking. commit a783811c74b0c6c8c8b8d5e77144514af80892d0 Author: Sebastian Hammer Date: Tue Mar 7 16:29:33 1995 +0000 Added authentication stuff. commit 052d8d3106e25de403341929ca7f4241dad875a0 Author: Sebastian Hammer Date: Tue Mar 7 13:28:57 1995 +0000 *** empty log message *** commit 75b13633ae87b4e716c26d2d71a2342fa0be70c7 Author: Sebastian Hammer Date: Tue Mar 7 13:16:13 1995 +0000 Fixed bug in odr_reset commit a372d45e267573f7c0f53759de3db81ec1237383 Author: Sebastian Hammer Date: Tue Mar 7 10:21:31 1995 +0000 odr_errno-->odr_error commit bf3c907b04a3a1dd708f90ce08328014775758af Author: Sebastian Hammer Date: Tue Mar 7 10:19:05 1995 +0000 Addded some method functions to the ODR type. commit 398d5857516b707c1697721ec92bb0ec15619252 Author: Sebastian Hammer Date: Tue Mar 7 09:23:12 1995 +0000 Installing top-level API and documentation. commit c6cd059f7b70a2b12f2239c51bfdf0e30107dead Author: Sebastian Hammer Date: Wed Mar 1 14:46:03 1995 +0000 Fixed protocol bug in 8777query. commit 04cde6d037338d3128c77698d4c8a7f03010db1e Author: Sebastian Hammer Date: Wed Mar 1 08:40:56 1995 +0000 Smallish changes. commit 6c126e94642b41867fb323ff39fded733757a11e Author: Sebastian Hammer Date: Tue Feb 14 20:39:54 1995 +0000 Fixed bugs in completeBER and (serious one in) ber_oid. commit fb2db0abc51ed82583dc4600fd4ff035c96f7d79 Author: Sebastian Hammer Date: Tue Feb 14 11:54:33 1995 +0000 Adjustments. commit 4e87dd57ceafb4c027d9ad6601e187e6e28b5476 Author: Sebastian Hammer Date: Tue Feb 14 11:54:22 1995 +0000 Fixing include. commit 6d0cb38e2fd32c722b0af63ce050ac5c458d849f Author: Sebastian Hammer Date: Fri Feb 10 18:57:24 1995 +0000 More in the way of error-checking. commit 1b06a5c10770ef964044f824a33d4cc8652d8e7a Author: Sebastian Hammer Date: Fri Feb 10 15:55:28 1995 +0000 Bug fixes, mostly. commit 4e215eddb8432b3b39b70a106e2d7f45f3c68211 Author: Sebastian Hammer Date: Fri Feb 10 15:54:30 1995 +0000 Small adjustments. commit 88ad85bd973c764146777e7cfe2e4a56c71994b9 Author: Sebastian Hammer Date: Thu Feb 9 16:02:32 1995 +0000 *** empty log message *** commit d21336d699898344c0af816edf1064474af32b44 Author: Sebastian Hammer Date: Thu Feb 9 15:52:34 1995 +0000 Initial revision commit 10981b2f116449523a9f628c20a78212ce91553e Author: Sebastian Hammer Date: Thu Feb 9 15:51:39 1995 +0000 Works better now. commit aad9a6e6dbceb78f4a125c24c9b93d19f75af361 Author: Sebastian Hammer Date: Tue Feb 7 17:53:43 1995 +0000 Initial revision commit 0dcf720d5b83783f6dba31f44b12513cefdd2f75 Author: Sebastian Hammer Date: Tue Feb 7 17:52:58 1995 +0000 A damn mess, but now things work, I think. commit b40d7c8dfa49bf5e6800688e1dfb1373856796a8 Author: Sebastian Hammer Date: Tue Feb 7 14:13:45 1995 +0000 Bug fixes. commit 779afe2804f2dccc96d311862afceb22f5f3ac70 Author: Sebastian Hammer Date: Mon Feb 6 21:26:07 1995 +0000 Repaired this evening's damages.. commit b0df126f997b4d9f51be961a2fdbd4ebea001b84 Author: Sebastian Hammer Date: Mon Feb 6 16:45:03 1995 +0000 Small mods. commit d092115aeed58ef669c42c9b6d013c424b26684c Author: Sebastian Hammer Date: Mon Feb 6 16:44:47 1995 +0000 First hack at Z/SR protocol commit 82c1521f196b83c0ede4200b21eb25ed86bbf48e Author: Sebastian Hammer Date: Fri Feb 3 17:04:36 1995 +0000 Initial revision commit 32226b4f15d634d5e48b1306aeeb26a370c8f5c5 Author: Sebastian Hammer Date: Fri Feb 3 17:04:31 1995 +0000 *** empty log message *** commit 173d9f50b7a6c63dff6c74dc5c3efe985f75ef39 Author: Sebastian Hammer Date: Thu Feb 2 20:38:49 1995 +0000 Updates. commit a7d28a25277a208edb9c44d124f179cc2be6db70 Author: Sebastian Hammer Date: Thu Feb 2 16:21:51 1995 +0000 First kick. yaz-5.28.0/aclocal.m40000644000175000017500000014667213401251722011207 00000000000000# generated automatically by aclocal 1.15.1 -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29.1) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.1]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ac_check_icu.m4]) m4_include([m4/acx_pthread.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/yaz.m4]) m4_include([m4/yaz_libxml2.m4]) yaz-5.28.0/etc/0000755000175000017500000000000013572540030010164 500000000000000yaz-5.28.0/etc/cqlpass.properties0000644000175000017500000000550513250277530013702 00000000000000# Properties for pass-through index name to Bib-1 use attribute # Requires YAZ 2.1.49 or later. # Identifiers for prefixes used in this file. (index.*) set.cql = info:srw/cql-context-set/1/cql-v1.1 set.pass = http://indexdata.dk/yaz/cqlpass # The default set when an index doesn't specify one: CQL Passthrough set = http://indexdata.dk/yaz/cqlpass # The default index when none is specified by the query index.cql.serverChoice = 1=1016 index.pass.* = 1=* # Relation attributes are selected according to the CQL relation by # looking up the "relation." property: # relation.< = 2=1 relation.le = 2=2 relation.eq = 2=3 relation.exact = 2=3 relation.ge = 2=4 relation.> = 2=5 relation.<> = 2=6 # These two are what Zebra uses -- may not work on other servers relation.all = 4=6 relation.any = 4=105 # BIB-1 doesn't have a server choice relation, so we just make the # choice here, and use equality (which is clearly correct). relation.scr = 2=3 # Relation modifiers. # relationModifier.relevant = 2=102 relationModifier.fuzzy = 5=103 ### truncation=regExpr-2 (5=103) in Zebra is "fuzzy matching" relationModifier.stem = 2=101 relationModifier.phonetic = 2=100 # Non-standard extensions to provoke Zebra's inline sorting relationModifier.sort = 7=1 relationModifier.sort-desc = 7=2 relationModifier.numeric = 4=109 # Position attributes may be specified for anchored terms (those # beginning with "^", which is stripped) and unanchored (those not # beginning with "^"). This may change when we get a BIB-1 truncation # attribute that says "do what CQL does". # position.first = 3=1 6=1 # "first in field" position.any = 3=3 6=1 # "any position in field" position.last = 3=4 6=1 # not a standard BIB-1 attribute position.firstAndLast = 3=3 6=3 # search term is anchored to be complete field # Structure attributes may be specified for individual relations; a # default structure attribute my be specified by the pseudo-relation # "*", to be used whenever a relation not listed here occurs. # structure.exact = 4=108 # string structure.all = 4=2 structure.any = 4=2 structure.* = 4=1 # phrase # Truncation attributes used to implement CQL wildcard patterns. The # simpler forms, left, right- and both-truncation will be used for the # simplest patterns, so that we produce PQF queries that conform more # closely to the Bath Profile. However, when a more complex pattern # such as "foo*bar" is used, we fall back on Z39.58-style masking. # truncation.right = 5=1 truncation.left = 5=2 truncation.both = 5=3 truncation.none = 5=100 truncation.regexp = 5=102 truncation.z3958 = 5=104 # Finally, any additional attributes that should always be included # with each term can be specified in the "always" property. # always = 6=1 # 6=1: completeness = incomplete subfield yaz-5.28.0/etc/MARC21slimUtils.xsl0000644000175000017500000000470413250277530013441 00000000000000 yaz-5.28.0/etc/Makefile.in0000644000175000017500000003627613570011145012165 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = etc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(etcdatadir)" DATA = $(etcdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HIREDIS_LIBS = @HIREDIS_LIBS@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MEMCACHED_LIBS = @MEMCACHED_LIBS@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ etcdatadir = $(pkgdatadir)/etc etcdata_DATA = \ pqf.properties \ cqlpass.properties \ yazgfs.xml \ maps.xml \ MARC21slim2DC.xsl \ MARC21slim2MODS.xsl \ MARC21slim2RDFDC.xsl \ MARC21slimUtils.xsl \ marc21_to_endnote.xsl \ opacxml.xsd EXTRA_DIST = $(etcdata_DATA) debian.init.d all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-etcdataDATA: $(etcdata_DATA) @$(NORMAL_INSTALL) @list='$(etcdata_DATA)'; test -n "$(etcdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(etcdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(etcdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(etcdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(etcdatadir)" || exit $$?; \ done uninstall-etcdataDATA: @$(NORMAL_UNINSTALL) @list='$(etcdata_DATA)'; test -n "$(etcdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(etcdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(etcdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-etcdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-etcdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-etcdataDATA install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-etcdataDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-5.28.0/etc/MARC21slim2RDFDC.xsl0000644000175000017500000002061513250277530013244 00000000000000 abfghk yes yes text cartographic notated music sound recording still image moving image three dimensional object software, multimedia mixed material ab abcdq abcdq abcdq abcdq abcdq abcdq abcd abcdu ot yaz-5.28.0/etc/pqf.properties0000644000175000017500000001204113265142510013006 00000000000000# Properties file to drive org.z3950.zing.cql.CQLNode's toPQF() # back-end and the YAZ CQL-to-PQF converter. This specifies the # interpretation of various CQL indexes, relations, etc. in terms # of Type-1 query attributes. # # This configuration file generates queries using BIB-1 attributes. # See http://www.loc.gov/standards/sru/cql/contextSets/dc-context-set.html # for the Maintenance Agency's work-in-progress mapping of Dublin Core # indexes to Attribute Architecture (util, XD and BIB-2) # attributes. # Identifiers for prefixes used in this file. (index.*) set.cql = info:srw/cql-context-set/1/cql-v1.2 set.rec = info:srw/cql-context-set/2/rec-1.1 set.dc = info:srw/cql-context-set/1/dc-v1.1 set.bath = http://zing.z3950.org/cql/bath/2.0/ # The default set when an index doesn't specify one: Dublin Core set = info:srw/cql-context-set/1/dc-v1.1 # The default index when none is specified by the query index.cql.serverChoice = 1=1016 # srw.serverChoice is deprecated in favour of cql.serverChoice # BIB-1 "any" index.cql.allRecords = 1=_ALLRECORDS 2=103 index.rec.id = 1=12 index.dc.title = 1=4 index.dc.subject = 1=21 index.dc.creator = 1=1003 index.dc.author = 1=1003 ### Unofficial synonym for "creator" index.dc.editor = 1=1020 index.dc.publisher = 1=1018 index.dc.description = 1=62 # "abstract" index.dc.date = 1=30 index.dc.resourceType = 1=1031 # guesswork: "Material-type" index.dc.format = 1=1034 # guesswork: "Content-type" index.dc.resourceIdentifier = 1=12 # "Local number" index.dc.source = 1=1019 # "Record-source" index.dc.language = 1=54 # "Code--language" index.dc.relation = 1=? ### No idea how to represent this index.dc.coverage = 1=? ### No idea how to represent this index.dc.rights = 1=? ### No idea how to represent this # Relation attributes are selected according to the CQL relation by # looking up the "relation." property: # relation.< = 2=1 relation.le = 2=2 relation.eq = 2=3 relation.exact = 2=3 relation.ge = 2=4 relation.> = 2=5 relation.<> = 2=6 # These two are what Zebra uses -- may not work on other servers relation.all = 4=6 relation.any = 4=105 # BIB-1 doesn't have a server choice relation, so we just make the # choice here, and use equality (which is clearly correct). relation.scr = 2=3 # Relation modifiers. # relationModifier.relevant = 2=102 relationModifier.fuzzy = 5=103 ### truncation=regExpr-2 (5=103) in Zebra is "fuzzy matching" relationModifier.stem = 2=101 relationModifier.phonetic = 2=100 relationModifier.regexp = 5=102 relationModifier.unmasked = 5=100 relationModifier.masked = # Non-standard extensions to provoke Zebra's inline sorting relationModifier.sort = 7=1 relationModifier.sort-desc = 7=2 relationModifier.numeric = 4=109 # Position attributes may be specified for anchored terms (those # beginning with "^", which is stripped) and unanchored (those not # beginning with "^"). This may change when we get a BIB-1 truncation # attribute that says "do what CQL does". # position.first = 3=1 6=1 # "first in field" position.any = 3=3 6=1 # "any position in field" position.last = 3=4 6=1 # not a standard BIB-1 attribute position.firstAndLast = 3=3 6=3 # search term is anchored to be complete field # Structure attributes may be specified for individual relations; a # default structure attribute my be specified by the pseudo-relation # "*", to be used whenever a relation not listed here occurs. # structure.exact = 4=108 # string structure.all = 4=2 structure.any = 4=2 structure.* = 4=1 # phrase # Truncation attributes used to implement CQL wildcard patterns. The # simpler forms, left, right- and both-truncation will be used for the # simplest patterns, so that we produce PQF queries that conform more # closely to the Bath Profile. However, when a more complex pattern # such as "foo*bar" is used, we fall back on Z39.58-style masking. # truncation.right = 5=1 truncation.left = 5=2 truncation.both = 5=3 truncation.none = 5=100 truncation.regexp = 5=102 truncation.z3958 = 5=104 # Finally, any additional attributes that should always be included # with each term can be specified in the "always" property. # always = 6=1 # 6=1: completeness = incomplete subfield # Bath Profile support, added Thu Dec 18 13:06:20 GMT 2003 # See the Bath Profile for SRW at # http://zing.z3950.org/srw/bath/2.0/ # including the Bath Context Set defined within that document. # # In this file, we only map index-names to BIB-1 use attributes, doing # so in accordance with the specifications of the Z39.50 Bath Profile, # and leaving the relations, wildcards, etc. to fend for themselves. index.bath.keyTitle = 1=33 index.bath.possessingInstitution = 1=1044 index.bath.name = 1=1002 index.bath.personalName = 1=1 index.bath.corporateName = 1=2 index.bath.conferenceName = 1=3 index.bath.uniformTitle = 1=6 index.bath.isbn = 1=7 index.bath.issn = 1=8 index.bath.geographicName = 1=58 index.bath.notes = 1=63 index.bath.topicalSubject = 1=1079 index.bath.genreForm = 1=1075 yaz-5.28.0/etc/yazgfs.xml0000644000175000017500000000362613265142510012140 00000000000000 tcp:@:9000 . zebra.cfg pqf.properties xsl iso-8859-1 xsl/default.xsl 2000000 myserver.org 9000 Default yaz-5.28.0/etc/MARC21slim2DC.xsl0000644000175000017500000001470013250277530012706 00000000000000 abfghk yes yes text cartographic notated music sound recording still image moving image three dimensional object software, multimedia mixed material ab abcdq abcdq abcdq abcdq abcdq abcdq abcd abcdu ot yaz-5.28.0/etc/opacxml.xsd0000644000175000017500000000700313265142510012267 00000000000000 yaz-5.28.0/etc/MARC21slim2MODS.xsl0000644000175000017500000017677413250277530013206 00000000000000 BK SE BK MM CF MP VM MU abfghk <xsl:value-of select="substring($title,@ind2+1)"/> <xsl:value-of select="$title"/> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">ab</xsl:with-param> </xsl:call-template> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">abh</xsl:with-param> </xsl:call-template> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">abfh</xsl:with-param> </xsl:call-template> <xsl:variable name="str"> <xsl:for-each select="marc:subfield"> <xsl:if test="(contains('adfhklmor',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))"> <xsl:value-of select="text()"/><xsl:text> </xsl:text> </xsl:if> </xsl:for-each> </xsl:variable> <xsl:value-of select="substring($str,1,string-length($str)-1)"/> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">ah</xsl:with-param> </xsl:call-template> creator creator creator personal yes yes text cartographic notated music sound recording still image moving image three dimensional object software, multimedia mixed material globe remote sensing image map atlas database loose-leaf series newspaper periodical web site abstract or summary bibliography catalog dictionary encyclopedia handbook legal article index discography legislation theses survey of literature review programmed text filmography directory statistics technical report legal case and case notes law report or digest treaty conference publication numeric data database font game patent festschrift biography essay drama comic strip fiction humor, satire letter novel short story speech biography conference publication drama essay fiction folktale history humor, satire memoir poetry rehersal reporting sound speech art original kit art reproduction diorama filmstrip legal article picture graphic technical drawing motion picture chart flash card microscope slide model realia slide transparency videorecording toy abvxyz - monographic continuing ab rfc3066 iso639-2b reformatted digital
braille
electronic
microfiche
microfilm
abce
ab agrt ab adolescent adult general juvenile preschool specialized defg ab abx ab ab <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">av</xsl:with-param> </xsl:call-template> <xsl:call-template name="part"/> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">av</xsl:with-param> </xsl:call-template> <xsl:call-template name="part"/> <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">g</xsl:with-param> </xsl:call-template> abcq t g <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">dg</xsl:with-param> </xsl:call-template> c t dgn <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">g</xsl:with-param> </xsl:call-template> aqdc t gn <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">adfgklmorsv</xsl:with-param> </xsl:call-template> <xsl:value-of select="marc:subfield[@code='a']"/> <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">g</xsl:with-param> </xsl:call-template> abcq t g <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">dg</xsl:with-param> </xsl:call-template> c t dgn <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">g</xsl:with-param> </xsl:call-template> aqdc t gn <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">adfgklmorsv</xsl:with-param> </xsl:call-template> issue number matrix number music plate music publisher videorecording identifier ab ab doi uri abj abcd35 abcde35
n n fghkdlmor p p fghkdlmor
cdn abcq acdeq constituent related <xsl:value-of select="."/> <xsl:value-of select="."/> lcsh lcshac mesh csh nal rvm abcq cdnp abcdeqnp <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">adfhklor</xsl:with-param> </xsl:call-template> <xsl:call-template name="part"/> abcd
yaz-5.28.0/etc/debian.init.d0000755000175000017500000000222613250277530012447 00000000000000#! /bin/sh # Debian sample start/stop script for YAZ Generic Frontend Server # set -e DAEMON=/usr/local/bin/yaz-ztest NAME=yaz-ztest PIDFILE=/var/run/yaz-ztest.pid LOGFILE=/var/log/yaz-ztest.log RUNAS=nobody test -x $DAEMON || exit 0 case "$1" in start) echo -n "Starting YAZ server: " start-stop-daemon --start --pidfile $PIDFILE \ --exec $DAEMON -- \ -u $RUNAS -l $LOGFILE -D -p $PIDFILE @:210 echo "$NAME." ;; stop) echo -n "Stopping YAZ server: " start-stop-daemon --stop --pidfile $PIDFILE \ --oknodo --retry 30 --exec $DAEMON echo "$NAME." ;; restart) echo -n "Restarting YAZ server: " start-stop-daemon --stop --pidfile $PIDFILE \ --oknodo --retry 30 --exec $DAEMON start-stop-daemon --start --pidfile $PIDFILE d \ --exec $DAEMON -- \ -u $RUNAS -l $LOGFILE -D -p $PIDFILE @:210 echo "$NAME." ;; reload|force-reload) echo "Reloading $NAME configuration files" start-stop-daemon --stop --pidfile $PIDFILE \ --signal 1 --exec $DAEMON ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload}" exit 1 ;; esac exit 0 yaz-5.28.0/etc/maps.xml0000644000175000017500000000157313250277530011601 00000000000000 yaz-5.28.0/etc/Makefile.am0000644000175000017500000000054713265142510012146 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) Index Data etcdatadir = $(pkgdatadir)/etc etcdata_DATA = \ pqf.properties \ cqlpass.properties \ yazgfs.xml \ maps.xml \ MARC21slim2DC.xsl \ MARC21slim2MODS.xsl \ MARC21slim2RDFDC.xsl \ MARC21slimUtils.xsl \ marc21_to_endnote.xsl \ opacxml.xsd EXTRA_DIST = $(etcdata_DATA) debian.init.d yaz-5.28.0/etc/marc21_to_endnote.xsl0000644000175000017500000001515613250277530014154 00000000000000 % Electronic Resource Electronic Resource article Book 0 A A T B C I D K L P U V X @ @ yaz-5.28.0/Makefile.in0000644000175000017500000007413713570011145011410 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = yaz-config yaz.pc Doxyfile win/version.nsi CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(aclocaldir)" \ "$(DESTDIR)$(pkgconfigdir)" DATA = $(aclocal_DATA) $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.in \ $(srcdir)/yaz-config.in $(srcdir)/yaz.pc.in \ $(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \ $(top_srcdir)/config/config.sub \ $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \ $(top_srcdir)/config/missing $(top_srcdir)/win/version.nsi.in \ ChangeLog NEWS config/compile config/config.guess \ config/config.sub config/install-sh config/ltmain.sh \ config/missing config/ylwrap DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HIREDIS_LIBS = @HIREDIS_LIBS@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MEMCACHED_LIBS = @MEMCACHED_LIBS@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src include util test client ztest zoom doc etc aclocaldir = $(datadir)/aclocal aclocal_DATA = m4/yaz.m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = yaz.pc SPEC_FILE = $(PACKAGE).spec EXTRA_DIST = $(SPEC_FILE) IDMETA README.md LICENSE NEWS m4/id-config.sh \ yaz-config.in yaz.pc.in m4/yaz.m4 m4/yaz_libxml2.m4 buildconf.sh \ Doxyfile.in m4/acx_pthread.m4 m4/ac_check_icu.m4 m4/common.nsi m4/mk_version.tcl all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): yaz-config: $(top_builddir)/config.status $(srcdir)/yaz-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ yaz.pc: $(top_builddir)/config.status $(srcdir)/yaz.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $@ win/version.nsi: $(top_builddir)/config.status $(top_srcdir)/win/version.nsi.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-aclocalDATA: $(aclocal_DATA) @$(NORMAL_INSTALL) @list='$(aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(aclocaldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(aclocaldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(aclocaldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(aclocaldir)" || exit $$?; \ done uninstall-aclocalDATA: @$(NORMAL_UNINSTALL) @list='$(aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(aclocaldir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(aclocaldir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-aclocalDATA install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-aclocalDATA uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-libtool distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-aclocalDATA install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-aclocalDATA \ uninstall-am uninstall-pkgconfigDATA .PRECIOUS: Makefile dist-hook: if test -x /usr/bin/git -a -d .git; then git log >ChangeLog ; cp ChangeLog $(distdir); fi test -d $(distdir)/win || mkdir $(distdir)/win -cp $(srcdir)/win/* $(distdir)/win .PHONY:debian debian: dpkg-buildpackage -rfakeroot # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-5.28.0/doc/0000755000175000017500000000000013572540030010156 500000000000000yaz-5.28.0/doc/yaz-config-man.xml0000644000175000017500000000720113265142510013437 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-config 1 Commands yaz-config Script to get information about YAZ. yaz-config libraries DESCRIPTION yaz-config is a script that returns information that your own software should use to build software that uses YAZ. The following libraries are supported: threads Use the threaded version of YAZ. OPTIONS --prefix[=DIR] Returns prefix of YAZ or assume a different one if DIR is specified. --version Returns version of YAZ. --libs Library specification be used when using YAZ. --lalibs Return library specification. --cflags Return C Compiler flags. --include Return C compiler includes for YAZ header files (-Ipath). --comp Returns full path to YAZ' ASN.1 compiler: yaz-asncomp. -V Returns YAZ SHA1 ID (from Git) and version. FILES /usr/bin/yaz-config /usr/lib/libyaz*.a /usr/include/yaz/*.h SEE ALSO yaz(7) Section "How to make apps using YAZ on UNIX" in the YAZ manual. yaz-5.28.0/doc/std-oid-table.xml0000644000175000017500000007361513273126204013265 00000000000000 Name Class Constant / OID BER TRANSYN yaz_oid_transyn_ber 2.1.1 ISO2709 TRANSYN yaz_oid_transyn_iso2709 1.0.2709.1.1 ISOILL-1 GENERAL yaz_oid_general_isoill_1 1.0.10161.2.1 Z-APDU ABSYN yaz_oid_absyn_z_apdu 2.1 Z-BASIC APPCTX yaz_oid_appctx_z_basic 1.1 Bib-1 ATTSET yaz_oid_attset_bib_1 Z3950_PREFIX.3.1 Exp-1 ATTSET yaz_oid_attset_exp_1 Z3950_PREFIX.3.2 Ext-1 ATTSET yaz_oid_attset_ext_1 Z3950_PREFIX.3.3 CCL-1 ATTSET yaz_oid_attset_ccl_1 Z3950_PREFIX.3.4 GILS ATTSET yaz_oid_attset_gils Z3950_PREFIX.3.5 GILS-attset ATTSET yaz_oid_attset_gils_attset Z3950_PREFIX.3.5 STAS-attset ATTSET yaz_oid_attset_stas_attset Z3950_PREFIX.3.6 Collections-attset ATTSET yaz_oid_attset_collections_attset Z3950_PREFIX.3.7 CIMI-attset ATTSET yaz_oid_attset_cimi_attset Z3950_PREFIX.3.8 Geo-attset ATTSET yaz_oid_attset_geo_attset Z3950_PREFIX.3.9 ZBIG ATTSET yaz_oid_attset_zbig Z3950_PREFIX.3.10 Util ATTSET yaz_oid_attset_util Z3950_PREFIX.3.11 XD-1 ATTSET yaz_oid_attset_xd_1 Z3950_PREFIX.3.12 Zthes ATTSET yaz_oid_attset_zthes Z3950_PREFIX.3.13 Fin-1 ATTSET yaz_oid_attset_fin_1 Z3950_PREFIX.3.14 Dan-1 ATTSET yaz_oid_attset_dan_1 Z3950_PREFIX.3.15 Holdings ATTSET yaz_oid_attset_holdings Z3950_PREFIX.3.16 MARC ATTSET yaz_oid_attset_marc Z3950_PREFIX.3.17 Bib-2 ATTSET yaz_oid_attset_bib_2 Z3950_PREFIX.3.18 ZeeRex ATTSET yaz_oid_attset_zeerex Z3950_PREFIX.3.19 Thesaurus-attset ATTSET yaz_oid_attset_thesaurus_attset Z3950_PREFIX.3.1000.81.1 IDXPATH ATTSET yaz_oid_attset_idxpath Z3950_PREFIX.3.1000.81.2 EXTLITE ATTSET yaz_oid_attset_extlite Z3950_PREFIX.3.1000.81.3 Bib-1 DIAGSET yaz_oid_diagset_bib_1 Z3950_PREFIX.4.1 Diag-1 DIAGSET yaz_oid_diagset_diag_1 Z3950_PREFIX.4.2 Diag-ES DIAGSET yaz_oid_diagset_diag_es Z3950_PREFIX.4.3 Diag-General DIAGSET yaz_oid_diagset_diag_general Z3950_PREFIX.4.3 Unimarc RECSYN yaz_oid_recsyn_unimarc Z3950_PREFIX.5.1 Intermarc RECSYN yaz_oid_recsyn_intermarc Z3950_PREFIX.5.2 CCF RECSYN yaz_oid_recsyn_ccf Z3950_PREFIX.5.3 USmarc RECSYN yaz_oid_recsyn_usmarc Z3950_PREFIX.5.10 MARC21 RECSYN yaz_oid_recsyn_marc21 Z3950_PREFIX.5.10 UKmarc RECSYN yaz_oid_recsyn_ukmarc Z3950_PREFIX.5.11 Normarc RECSYN yaz_oid_recsyn_normarc Z3950_PREFIX.5.12 Librismarc RECSYN yaz_oid_recsyn_librismarc Z3950_PREFIX.5.13 Danmarc RECSYN yaz_oid_recsyn_danmarc Z3950_PREFIX.5.14 Finmarc RECSYN yaz_oid_recsyn_finmarc Z3950_PREFIX.5.15 MAB RECSYN yaz_oid_recsyn_mab Z3950_PREFIX.5.16 Canmarc RECSYN yaz_oid_recsyn_canmarc Z3950_PREFIX.5.17 SBN RECSYN yaz_oid_recsyn_sbn Z3950_PREFIX.5.18 Picamarc RECSYN yaz_oid_recsyn_picamarc Z3950_PREFIX.5.19 Ausmarc RECSYN yaz_oid_recsyn_ausmarc Z3950_PREFIX.5.20 Ibermarc RECSYN yaz_oid_recsyn_ibermarc Z3950_PREFIX.5.21 Carmarc RECSYN yaz_oid_recsyn_carmarc Z3950_PREFIX.5.22 Malmarc RECSYN yaz_oid_recsyn_malmarc Z3950_PREFIX.5.23 JPmarc RECSYN yaz_oid_recsyn_jpmarc Z3950_PREFIX.5.24 SWEmarc RECSYN yaz_oid_recsyn_swemarc Z3950_PREFIX.5.25 SIGLEmarc RECSYN yaz_oid_recsyn_siglemarc Z3950_PREFIX.5.26 ISDSmarc RECSYN yaz_oid_recsyn_isdsmarc Z3950_PREFIX.5.27 RUSmarc RECSYN yaz_oid_recsyn_rusmarc Z3950_PREFIX.5.28 Hunmarc RECSYN yaz_oid_recsyn_hunmarc Z3950_PREFIX.5.29 NACSIS-CATP RECSYN yaz_oid_recsyn_nacsis_catp Z3950_PREFIX.5.30 FINMARC2000 RECSYN yaz_oid_recsyn_finmarc2000 Z3950_PREFIX.5.31 MARC21-fin RECSYN yaz_oid_recsyn_marc21_fin Z3950_PREFIX.5.32 Explain RECSYN yaz_oid_recsyn_explain Z3950_PREFIX.5.100 SUTRS RECSYN yaz_oid_recsyn_sutrs Z3950_PREFIX.5.101 OPAC RECSYN yaz_oid_recsyn_opac Z3950_PREFIX.5.102 Summary RECSYN yaz_oid_recsyn_summary Z3950_PREFIX.5.103 GRS-0 RECSYN yaz_oid_recsyn_grs_0 Z3950_PREFIX.5.104 GRS-1 RECSYN yaz_oid_recsyn_grs_1 Z3950_PREFIX.5.105 Extended RECSYN yaz_oid_recsyn_extended Z3950_PREFIX.5.106 Fragment RECSYN yaz_oid_recsyn_fragment Z3950_PREFIX.5.107 pdf RECSYN yaz_oid_recsyn_pdf Z3950_PREFIX.5.109.1 postscript RECSYN yaz_oid_recsyn_postscript Z3950_PREFIX.5.109.2 html RECSYN yaz_oid_recsyn_html Z3950_PREFIX.5.109.3 tiff RECSYN yaz_oid_recsyn_tiff Z3950_PREFIX.5.109.4 gif RECSYN yaz_oid_recsyn_gif Z3950_PREFIX.5.109.5 jpeg RECSYN yaz_oid_recsyn_jpeg Z3950_PREFIX.5.109.6 png RECSYN yaz_oid_recsyn_png Z3950_PREFIX.5.109.7 mpeg RECSYN yaz_oid_recsyn_mpeg Z3950_PREFIX.5.109.8 sgml RECSYN yaz_oid_recsyn_sgml Z3950_PREFIX.5.109.9 tiff-b RECSYN yaz_oid_recsyn_tiff_b Z3950_PREFIX.5.110.1 wav RECSYN yaz_oid_recsyn_wav Z3950_PREFIX.5.110.2 SQL-RS RECSYN yaz_oid_recsyn_sql_rs Z3950_PREFIX.5.111 SOIF RECSYN yaz_oid_recsyn_soif Z3950_PREFIX.5.1000.81.2 JSON RECSYN yaz_oid_recsyn_json Z3950_PREFIX.5.1000.81.3 XML RECSYN yaz_oid_recsyn_xml Z3950_PREFIX.5.109.10 text-XML RECSYN yaz_oid_recsyn_text_xml Z3950_PREFIX.5.109.10 application-XML RECSYN yaz_oid_recsyn_application_xml Z3950_PREFIX.5.109.11 Resource-1 RESFORM yaz_oid_resform_resource_1 Z3950_PREFIX.7.1 Resource-2 RESFORM yaz_oid_resform_resource_2 Z3950_PREFIX.7.2 UNIverse-Resource-Report RESFORM yaz_oid_resform_universe_resource_report Z3950_PREFIX.7.1000.81.1 Prompt-1 ACCFORM yaz_oid_accform_prompt_1 Z3950_PREFIX.8.1 Des-1 ACCFORM yaz_oid_accform_des_1 Z3950_PREFIX.8.2 Krb-1 ACCFORM yaz_oid_accform_krb_1 Z3950_PREFIX.8.3 Persistent set EXTSERV yaz_oid_extserv_persistent_set Z3950_PREFIX.9.1 Persistent query EXTSERV yaz_oid_extserv_persistent_query Z3950_PREFIX.9.2 Periodic query EXTSERV yaz_oid_extserv_periodic_query Z3950_PREFIX.9.3 Item order EXTSERV yaz_oid_extserv_item_order Z3950_PREFIX.9.4 Database Update (first version) EXTSERV yaz_oid_extserv_database_update_first_version Z3950_PREFIX.9.5 Database Update (second version) EXTSERV yaz_oid_extserv_database_update_second_version Z3950_PREFIX.9.5.1 Database Update EXTSERV yaz_oid_extserv_database_update Z3950_PREFIX.9.5.1.1 exp. spec. EXTSERV yaz_oid_extserv_exp__spec_ Z3950_PREFIX.9.6 exp. inv. EXTSERV yaz_oid_extserv_exp__inv_ Z3950_PREFIX.9.7 Admin EXTSERV yaz_oid_extserv_admin Z3950_PREFIX.9.1000.81.1 searchResult-1 USERINFO yaz_oid_userinfo_searchresult_1 Z3950_PREFIX.10.1 CharSetandLanguageNegotiation USERINFO yaz_oid_userinfo_charsetandlanguagenegotiation Z3950_PREFIX.10.2 UserInfo-1 USERINFO yaz_oid_userinfo_userinfo_1 Z3950_PREFIX.10.3 MultipleSearchTerms-1 USERINFO yaz_oid_userinfo_multiplesearchterms_1 Z3950_PREFIX.10.4 MultipleSearchTerms-2 USERINFO yaz_oid_userinfo_multiplesearchterms_2 Z3950_PREFIX.10.5 DateTime USERINFO yaz_oid_userinfo_datetime Z3950_PREFIX.10.6 Proxy USERINFO yaz_oid_userinfo_proxy Z3950_PREFIX.10.1000.81.1 Cookie USERINFO yaz_oid_userinfo_cookie Z3950_PREFIX.10.1000.81.2 Client-IP USERINFO yaz_oid_userinfo_client_ip Z3950_PREFIX.10.1000.81.3 Scan-Set USERINFO yaz_oid_userinfo_scan_set Z3950_PREFIX.10.1000.81.4 Facet-1 USERINFO yaz_oid_userinfo_facet_1 Z3950_PREFIX.10.1000.81.5 Espec-1 ELEMSPEC yaz_oid_elemspec_espec_1 Z3950_PREFIX.11.1 Variant-1 VARSET yaz_oid_varset_variant_1 Z3950_PREFIX.12.1 WAIS-schema SCHEMA yaz_oid_schema_wais_schema Z3950_PREFIX.13.1 GILS-schema SCHEMA yaz_oid_schema_gils_schema Z3950_PREFIX.13.2 Collections-schema SCHEMA yaz_oid_schema_collections_schema Z3950_PREFIX.13.3 Geo-schema SCHEMA yaz_oid_schema_geo_schema Z3950_PREFIX.13.4 CIMI-schema SCHEMA yaz_oid_schema_cimi_schema Z3950_PREFIX.13.5 Update ES SCHEMA yaz_oid_schema_update_es Z3950_PREFIX.13.6 Holdings SCHEMA yaz_oid_schema_holdings Z3950_PREFIX.13.7 Zthes SCHEMA yaz_oid_schema_zthes Z3950_PREFIX.13.8 thesaurus-schema SCHEMA yaz_oid_schema_thesaurus_schema Z3950_PREFIX.13.1000.81.1 Explain-schema SCHEMA yaz_oid_schema_explain_schema Z3950_PREFIX.13.1000.81.2 TagsetM TAGSET yaz_oid_tagset_tagsetm Z3950_PREFIX.14.1 TagsetG TAGSET yaz_oid_tagset_tagsetg Z3950_PREFIX.14.2 STAS-tagset TAGSET yaz_oid_tagset_stas_tagset Z3950_PREFIX.14.3 GILS-tagset TAGSET yaz_oid_tagset_gils_tagset Z3950_PREFIX.14.4 Collections-tagset TAGSET yaz_oid_tagset_collections_tagset Z3950_PREFIX.14.5 CIMI-tagset TAGSET yaz_oid_tagset_cimi_tagset Z3950_PREFIX.14.6 thesaurus-tagset TAGSET yaz_oid_tagset_thesaurus_tagset Z3950_PREFIX.14.1000.81.1 Explain-tagset TAGSET yaz_oid_tagset_explain_tagset Z3950_PREFIX.14.1000.81.2 Zthes-tagset TAGSET yaz_oid_tagset_zthes_tagset Z3950_PREFIX.14.8 Charset-3 NEGOT yaz_oid_negot_charset_3 Z3950_PREFIX.15.3 Charset-4 NEGOT yaz_oid_negot_charset_4 Z3950_PREFIX.15.4 Charset-ID NEGOT yaz_oid_negot_charset_id Z3950_PREFIX.15.1000.81.1 CQL USERINFO yaz_oid_userinfo_cql Z3950_PREFIX.16.2 UCS-2 GENERAL yaz_oid_general_ucs_2 1.0.10646.1.0.2 UCS-4 GENERAL yaz_oid_general_ucs_4 1.0.10646.1.0.4 UTF-16 GENERAL yaz_oid_general_utf_16 1.0.10646.1.0.5 UTF-8 GENERAL yaz_oid_general_utf_8 1.0.10646.1.0.8 OCLC-userInfo USERINFO yaz_oid_userinfo_oclc_userinfo Z3950_PREFIX.10.1000.17.1 XML-ES EXTSERV yaz_oid_extserv_xml_es Z3950_PREFIX.9.1000.105.4 yaz-5.28.0/doc/bib1.html0000644000175000017500000001537313572540030011612 00000000000000Bib-1 Attribute Set

Name

bib1-attr — Bib-1 Attribute Set

DESCRIPTION

This reference entry lists the Bib-1 attribute set types and values.

TYPES

The Bib-1 attribute set defines six attribute types: Use (1), Relation (2), Position (3), Structure (4), Truncation (5) and Completeness (6).

USE (1)

    1     Personal-name
    2     Corporate-name
    3     Conference-name
    4     Title
    5     Title-series
    6     Title-uniform
    7     ISBN
    8     ISSN
    9     LC-card-number
    10    BNB-card-number
    11    BGF-number
    12    Local-number
    13    Dewey-classification
    14    UDC-classification
    15    Bliss-classification
    16    LC-call-number
    17    NLM-call-number
    18    NAL-call-number
    19    MOS-call-number
    20    Local-classification
    21    Subject-heading
    22    Subject-Rameau
    23    BDI-index-subject
    24    INSPEC-subject
    25    MESH-subject
    26    PA-subject
    27    LC-subject-heading
    28    RVM-subject-heading
    29    Local-subject-index
    30    Date
    31    Date-of-publication
    32    Date-of-acquisition
    33    Title-key
    34    Title-collective
    35    Title-parallel
    36    Title-cover
    37    Title-added-title-page
    38    Title-caption
    39    Title-running
    40    Title-spine
    41    Title-other-variant
    42    Title-former
    43    Title-abbreviated
    44    Title-expanded
    45    Subject-precis
    46    Subject-rswk
    47    Subject-subdivision
    48    Number-natl-biblio
    49    Number-legal-deposit
    50    Number-govt-pub
    51    Number-music-publisher
    52    Number-db
    53    Number-local-call
    54    Code-language
    55    Code-geographic
    56    Code-institution
    57    Name-and-title
    58    Name-geographic
    59    Place-publication
    60    CODEN
    61    Microform-generation
    62    Abstract
    63    Note
    1000  Author-title
    1001  Record-type
    1002  Name
    1003  Author
    1004  Author-name-personal
    1005  Author-name-corporate
    1006  Author-name-conference
    1007  Identifier-standard
    1008  Subject-LC-childrens
    1009  Subject-name-personal
    1010  Body-of-text
    1011  Date/time-added-to-db
    1012  Date/time-last-modified
    1013  Authority/format-id
    1014  Concept-text
    1015  Concept-reference
    1016  Any
    1017  Server-choice
    1018  Publisher
    1019  Record-source
    1020  Editor
    1021  Bib-level
    1022  Geographic-class
    1023  Indexed-by
    1024  Map-scale
    1025  Music-key
    1026  Related-periodical
    1027  Report-number
    1028  Stock-number
    1030  Thematic-number
    1031  Material-type
    1032  Doc-id
    1033  Host-item
    1034  Content-type
    1035  Anywhere
    1036  Author-Title-Subject
   

RELATION (2)

    1 Less than
    2 Less than or equal
    3 Equal
    4 Greater or equal
    5 Greater than
    6 Not equal
    100 Phonetic
    101 Stem
    102 Relevance
    103 AlwaysMatches
   

POSITION (3)

    1 First in field
    2 First in subfield
    3 Any position in field
   

STRUCTURE (4)

    1 Phrase
    2 Word
    3 Key
    4 Year
    5 Date (normalized)
    6 Word list
    100 Date (un-normalized)
    101 Name (normalized)
    102 Name (un-normalized)
    103 Structure
    104 Urx
    105 Free-form-text
    106 Document-text
    107 Local-number
    108 String
    109 Numeric-string
   

TRUNCATION (5)

    1 Right truncation
    2 Left truncation
    3 Left and right truncation
    100 Do not truncate
    101 Process # in search term  . regular #=.*
    102 RegExpr-1
    103 RegExpr-2
    104 Process # ?n . regular: #=., ?n=.{0,n} or ?=.* Z39.58
   

Thw 105-106 truncation attributes below are only supported by Index Data's Zebra server.

    105 Process * ! regular: *=.*, !=. and right truncate
    106 Process * ! regular: *=.*, !=.
   

COMPLETENESS (6)

    1 Incomplete subfield
    2 Complete subfield
    3 Complete field
   

SORTING (7)

    1 ascending
    2 descending
   

Type 7 is an Index Data extension to RPN queries that allows embedding a sort critieria into a query.

yaz-5.28.0/doc/comstack.common.html0000644000175000017500000002317713572540030014071 000000000000003. Common Functions

3. Common Functions

3.1. Managing Endpoints

     COMSTACK cs_create(CS_TYPE type, int blocking, int protocol);
    

Creates an instance of the protocol stack - a communications endpoint. The type parameter determines the mode of communication. At present the following values are supported:

tcpip_type

TCP/IP (BER over TCP/IP or HTTP over TCP/IP)

ssl_type

Secure Socket Layer (SSL). This COMSTACK is experimental and is not fully implemented. If HTTP is used, this effectively is HTTPS.

unix_type

Unix socket (unix only). Local Transfer via file socket. See unix(7).

The cs_create function returns a null-pointer if a system error occurs. The blocking parameter should be '1' if you wish the association to operate in blocking mode, and '0' otherwise. The protocol field should be PROTO_Z3950 or PROTO_HTTP. Protocol PROTO_SR is no longer supported.

     void cs_close(COMSTACK handle);
    

Closes the connection (as elegantly as the lower layers will permit), and releases the resources pointed to by the handle parameter. The handle should not be referenced again after this call.

Note

We really need a soft disconnect, don't we?

3.2. Data Exchange

     int cs_put(COMSTACK handle, char *buf, int len);
    

Sends buf down the wire. In blocking mode, this function will return only when a full buffer has been written, or an error has occurred. In nonblocking mode, it's possible that the function will be unable to send the full buffer at once, which will be indicated by a return value of 1. The function will keep track of the number of octets already written; you should call it repeatedly with the same values of buf and len, until the buffer has been transmitted. When a full buffer has been sent, the function will return 0 for success. The return value -1 indicates an error condition (see below).

     int cs_get(COMSTACK handle, char **buf, int *size);
    

Receives a PDU or HTTP Response from the peer. Returns the number of bytes read. In nonblocking mode, it is possible that not all of the packet can be read at once. In this case, the function returns 1. To simplify the interface, the function is responsible for managing the size of the buffer. It will be reallocated if necessary to contain large packages, and will sometimes be moved around internally by the subsystem when partial packages are read. Before calling cs_get for the first time, the buffer can be initialized to the null pointer, and the length should also be set to 0 (cs_get will perform a malloc(2) on the buffer for you). When a full buffer has been read, the size of the package is returned (which will always be greater than 1). The return value -1 indicates an error condition.

See also the cs_more() function below.

     int cs_more(COMSTACK handle);
    

The cs_more() function should be used in conjunction with cs_get and select(2). The cs_get() function will sometimes (notably in the TCP/IP mode) read more than a single protocol package off the network. When this happens, the extra package is stored by the subsystem. After calling cs_get(), and before waiting for more input, You should always call cs_more() to check if there's a full protocol package already read. If cs_more() returns 1, cs_get() can be used to immediately fetch the new package. For the mOSI subsystem, the function should always return 0, but if you want your stuff to be protocol independent, you should use it.

Note

The cs_more() function is required because the RFC1729-method does not provide a way of separating individual PDUs, short of partially decoding the BER. Some other implementations will carefully nibble at the packet by calling read(2) several times. This was felt to be too inefficient (or at least clumsy) - hence the call for this extra function.

     int cs_look(COMSTACK handle);
    

This function is useful when you're operating in nonblocking mode. Call it when select(2) tells you there's something happening on the line. It returns one of the following values:

CS_NONE

No event is pending. The data found on the line was not a complete package.

CS_CONNECT

A response to your connect request has been received. Call cs_rcvconnect to process the event and to finalize the connection establishment.

CS_DISCON

The other side has closed the connection (or maybe sent a disconnect request - but do we care? Maybe later). Call cs_close to close your end of the association as well.

CS_LISTEN

A connect request has been received. Call cs_listen to process the event.

CS_DATA

There's data to be found on the line. Call cs_get to get it.

Note

You should be aware that even if cs_look() tells you that there's an event event pending, the corresponding function may still return and tell you there was nothing to be found. This means that only part of a package was available for reading. The same event will show up again, when more data has arrived.

     int cs_fileno(COMSTACK h);
    

returns the file descriptor of the association. Use this when file-level operations on the endpoint are required (select(2) operations, specifically).

yaz-5.28.0/doc/tools.log.html0000644000175000017500000002057713572540030012717 000000000000004. Log

4. Log

YAZ has evolved a fairly complex log system which should be useful both for debugging YAZ itself, debugging applications that use YAZ, and for production use of those applications.

The log functions are declared in header yaz/log.h and implemented in src/log.c. Due to name clash with syslog and some math utilities the logging interface has been modified as of YAZ 2.0.29. The obsolete interface is still available in header file yaz/log.h. The key points of the interface are:

    void yaz_log(int level, const char *fmt, ...)
    void yaz_log_init(int level, const char *prefix, const char *name);
    void yaz_log_init_file(const char *fname);
    void yaz_log_init_level(int level);
    void yaz_log_init_prefix(const char *prefix);
    void yaz_log_time_format(const char *fmt);
    void yaz_log_init_max_size(int mx);

    int yaz_log_mask_str(const char *str);
    int yaz_log_module_level(const char *name);
   

The reason for the whole log module is the yaz_log function. It takes a bitmask indicating the log levels, a printf-like format string, and a variable number of arguments to log.

The log level is a bit mask, that says on which level(s) the log entry should be made, and optionally set some behaviour of the logging. In the most simple cases, it can be one of YLOG_FATAL, YLOG_DEBUG, YLOG_WARN, YLOG_LOG. Those can be combined with bits that modify the way the log entry is written:YLOG_ERRNO, YLOG_NOTIME, YLOG_FLUSH. Most of the rest of the bits are deprecated, and should not be used. Use the dynamic log levels instead.

Applications that use YAZ, should not use the LOG_LOG for ordinary messages, but should make use of the dynamic loglevel system. This consists of two parts, defining the loglevel and checking it.

To define the log levels, the (main) program should pass a string to yaz_log_mask_str to define which log levels are to be logged. This string should be a comma-separated list of log level names, and can contain both hard-coded names and dynamic ones. The log level calculation starts with YLOG_DEFAULT_LEVEL and adds a bit for each word it meets, unless the word starts with a '-', in which case it clears the bit. If the string 'none' is found, all bits are cleared. Typically this string comes from the command-line, often identified by -v. The yaz_log_mask_str returns a log level that should be passed to yaz_log_init_level for it to take effect.

Each module should check what log bits should be used, by calling yaz_log_module_level with a suitable name for the module. The name is cleared of a preceding path and an extension, if any, so it is quite possible to use __FILE__ for it. If the name has been passed to yaz_log_mask_str, the routine returns a non-zero bitmask, which should then be used in consequent calls to yaz_log. (It can also be tested, so as to avoid unnecessary calls to yaz_log, in time-critical places, or when the log entry would take time to construct.)

Yaz uses the following dynamic log levels: server, session, request, requestdetail for the server functionality. zoom for the zoom client API. ztest for the simple test server. malloc, nmem, odr, eventl for internal debugging of yaz itself. Of course, any program using yaz is welcome to define as many new ones as it needs.

By default the log is written to stderr, but this can be changed by a call to yaz_log_init_file or yaz_log_init. If the log is directed to a file, the file size is checked at every write, and if it exceeds the limit given in yaz_log_init_max_size, the log is rotated. The rotation keeps one old version (with a .1 appended to the name). The size defaults to 1GB. Setting it to zero will disable the rotation feature.

    A typical yaz-log looks like this
  13:23:14-23/11 yaz-ztest(1) [session] Starting session from tcp:127.0.0.1 (pid=30968)
  13:23:14-23/11 yaz-ztest(1) [request] Init from 'YAZ' (81) (ver 2.0.28) OK
  13:23:17-23/11 yaz-ztest(1) [request] Search Z: @attrset Bib-1 foo  OK:7 hits
  13:23:22-23/11 yaz-ztest(1) [request] Present: [1] 2+2  OK 2 records returned
  13:24:13-23/11 yaz-ztest(1) [request] Close OK
   

The log entries start with a time stamp. This can be omitted by setting the YLOG_NOTIME bit in the loglevel. This way automatic tests can be hoped to produce identical log files, that are easy to diff. The format of the time stamp can be set with yaz_log_time_format, which takes a format string just like strftime.

Next in a log line comes the prefix, often the name of the program. For yaz-based servers, it can also contain the session number. Then comes one or more logbits in square brackets, depending on the logging level set by yaz_log_init_level and the loglevel passed to yaz_log_init_level. Finally comes the format string and additional values passed to yaz_log

The log level YLOG_LOGLVL, enabled by the string loglevel, will log all the log-level affecting operations. This can come in handy if you need to know what other log levels would be useful. Grep the logfile for [loglevel].

The log system is almost independent of the rest of YAZ, the only important dependence is of nmem, and that only for using the semaphore definition there.

The dynamic log levels and log rotation were introduced in YAZ 2.0.28. At the same time, the log bit names were changed from LOG_something to YLOG_something, to avoid collision with syslog.h.

yaz-5.28.0/doc/yaz-illclient.html0000644000175000017500000000735613572540030013557 00000000000000yaz-illclient

Name

yaz-illclient — ILL client

Synopsis

yaz-illclient [-f filename] [-v loglevel] [-D name=value...] [-o] [-u user] [-p password] [-V] [server-addr]

DESCRIPTION

yaz-illclient is a client which sends an ISO ILL request to a remote server and decodes the response from it. Exactly one server address ( server-addr ) must be specified.

OPTIONS

-f filename]

Specify filename.

-v loglevel]

Specify the log level.

-D name=value]

Defines name & value pair.

-o

Enable OCLC authentication.

-u user]

Specify user.

-p password]

Specify password.

-V

Show yaz-illclient version.

EXAMPLES

None yet.

FILES

None yet.

SEE ALSO

yaz(7)

yaz-5.28.0/doc/zoom.resultsets.html0000644000175000017500000003253013572540030014167 000000000000003. Result sets

3. Result sets

The result set object is a container for records returned from a target.

     ZOOM_resultset ZOOM_connection_search(ZOOM_connection, ZOOM_query q);

     ZOOM_resultset ZOOM_connection_search_pqf(ZOOM_connection c,
                                               const char *q);
     void ZOOM_resultset_destroy(ZOOM_resultset r);
   

Function ZOOM_connection_search creates a result set, given a connection and query. Destroy a result set by calling ZOOM_resultset_destroy. Simple clients using PQF only, may use the function ZOOM_connection_search_pqf in which case creating query objects is not necessary.

     void ZOOM_resultset_option_set(ZOOM_resultset r,
                                    const char *key, const char *val);

     const char *ZOOM_resultset_option_get(ZOOM_resultset r, const char *key);

     size_t ZOOM_resultset_size(ZOOM_resultset r);
   

Functions ZOOM_resultset_options_set and ZOOM_resultset_get sets and gets an option for a result set similar to ZOOM_connection_option_get and ZOOM_connection_option_set.

The number of hits, also called result-count, is returned by function ZOOM_resultset_size.

Table 3.3. ZOOM Result set Options

OptionDescriptionDefault
startOffset of first record to be retrieved from target. First record has offset 0 unlike the protocol specifications where first record has position 1. This option affects ZOOM_resultset_search and ZOOM_resultset_search_pqf and must be set before any of these functions are invoked. If a range of records must be fetched manually after search, function ZOOM_resultset_records should be used. 0
countNumber of records to be retrieved. This option affects ZOOM_resultset_search and ZOOM_resultset_search_pqf and must be set before any of these functions are invoked. 0
presentChunkThe number of records to be requested from the server in each chunk (present request). The value 0 means to request all the records in a single chunk. (The old step option is also supported for the benefit of old applications.) 0
elementSetNameElement-Set name of records. Most targets should honor element set name B and F for brief and full respectively. none
preferredRecordSyntaxPreferred Syntax, such as USMARC, SUTRS, etc. none
schemaSchema for retrieval, such as Gils-schema, Geo-schema, etc. none
setnameName of Result Set (Result Set ID). If this option isn't set, the ZOOM module will automatically allocate a result set name. default
rpnCharsetCharacter set for RPN terms. If this is set, ZOOM C will assume that the ZOOM application is running UTF-8. Terms in RPN queries are then converted to the rpnCharset. If this is unset, ZOOM C will not assume any encoding of RPN terms and no conversion is performed. none

For servers that support Search Info report, the following options may be read using ZOOM_resultset_get. This detailed information is read after a successful search has completed.

This information is a list of of items, where each item is information about a term or subquery. All items in the list are prefixed by SearchResult.no where no presents the item number (0=first, 1=second). Read searchresult.size to determine the number of items.

Table 3.4. Search Info Report Options

OptionDescription
searchresult.size number of search result entries. This option is non-existent if no entries are returned by the server.
searchresult.no.idsub query ID
searchresult.no.countresult count for item (number of hits)
searchresult.no.subquery.termsubquery term
searchresult.no.interpretation.term interpretation term
searchresult.no.recommendation.term recommendation term

3.1. Z39.50 Result-set Sort

     void ZOOM_resultset_sort(ZOOM_resultset r,
                              const char *sort_type, const char *sort_spec);

     int ZOOM_resultset_sort1(ZOOM_resultset r,
                              const char *sort_type, const char *sort_spec);
    

ZOOM_resultset_sort and ZOOM_resultset_sort1 both sort an existing result-set. The sort_type parameter is not used. Set it to "yaz". The sort_spec is same notation as ZOOM_query_sortby and identical to that offered by yaz-client's sort command.

These functions only work for Z39.50. Use the more generic utility ZOOM_query_sortby2 for other protocols (and even Z39.50).

3.2. Z39.50 Protocol behavior

The creation of a result set involves at least a SearchRequest - SearchResponse protocol handshake. Following that, if a sort criteria was specified as part of the query, a SortRequest - SortResponse handshake takes place. Note that it is necessary to perform sorting before any retrieval takes place, so no records will be returned from the target as part of the SearchResponse because these would be unsorted. Hence, piggyback is disabled when sort criteria are set. Following Search - and a possible sort - Retrieval takes place - as one or more Present Requests/Response pairs being transferred.

The API allows for two different modes for retrieval. A high level mode which is somewhat more powerful and a low level one. The low level is enabled when searching on a Connection object for which the settings smallSetUpperBound, mediumSetPresentNumber and largeSetLowerBound are set. The low level mode thus allows you to precisely set how records are returned as part of a search response as offered by the Z39.50 protocol. Since the client may be retrieving records as part of the search response, this mode doesn't work well if sorting is used.

The high-level mode allows you to fetch a range of records from the result set with a given start offset. When you use this mode the client will automatically use piggyback if that is possible with the target, and perform one or more present requests as needed. Even if the target returns fewer records as part of a present response because of a record size limit, etc. the client will repeat sending present requests. As an example, if option start is 0 (default) and count is 4, and piggyback is 1 (default) and no sorting criteria is specified, then the client will attempt to retrieve the 4 records as part the search response (using piggyback). On the other hand, if either start is positive or if a sorting criteria is set, or if piggyback is 0, then the client will not perform piggyback but send Present Requests instead.

If either of the options mediumSetElementSetName and smallSetElementSetName are unset, the value of option elementSetName is used for piggyback searches. This means that for the high-level mode you only have to specify one elementSetName option rather than three.

3.3. SRU Protocol behavior

Current version of YAZ does not take advantage of a result set id returned by the SRU server. Future versions might do, however. Since the ZOOM driver does not save result set IDs, any present (retrieval) is transformed to a SRU SearchRetrieveRequest with same query but, possibly, different offsets.

Option schema specifies SRU schema for retrieval. However, options elementSetName and preferredRecordSyntax are ignored.

Options start and count are supported by SRU. The remaining options piggyback, smallSetUpperBound, largeSetLowerBound, mediumSetPresentNumber, mediumSetElementSetName, smallSetElementSetName are unsupported.

SRU supports CQL queries, not PQF. If PQF is used, however, the PQF query is transferred anyway using non-standard element pQuery in SRU SearchRetrieveRequest.

Solr queries need to be done in Solr query format.

Unfortunately, SRU and Solr do not define a database setting. Hence, databaseName is unsupported and ignored. However, the path part in host parameter for functions ZOOM_connecton_new and ZOOM_connection_connect acts as a database (at least for the YAZ SRU server).

yaz-5.28.0/doc/reference.html0000644000175000017500000000762213572540030012731 00000000000000Reference

Reference


The material in this chapter is drawn directly from the individual manual entries.

Table of Contents

yaz-client — Z39.50/SRU client for implementors
yaz-ztest — Z39.50/SRU Test Server
yaz-config — Script to get information about YAZ.
yaz — Z39.50 toolkit.
zoomsh — ZOOM shell
yaz-asncomp — YAZ ASN.1 compiler
yaz-marcdump — MARC record dump utility
yaz-iconv — YAZ Character set conversion utility
yaz-log — Log handling in all yaz-based programs
yaz-illclient — ILL client
yaz-icu — YAZ ICU utility
yaz-url — YAZ URL fetch utility
Bib-1 Attribute Set — Bib-1 Attribute Set
yaz-json-parse — YAZ JSON parser
yaz-record-iconv — YAZ Record Conversion Utility
yaz-5.28.0/doc/apilayer.png0000644000175000017500000000161313265142510012413 00000000000000‰PNG  IHDRöà¾?öRIDAThíØAOA`= W¤ý †D¢zôâo úàPƒ`)ñÀ‘3)¦GOêM ¥ D¶ô€I%[ú $­FÚTv„Ýqw¶Eètv*bÙ—46ß¼yÓìL·«K ¦ój“0V‹8-‹11C f˜ñ%ï4¿s’ˆåtÔ°Ó‰§r 0*½Aéë— ¨êI^% ¾z‘…±”Mv½IâÞZĨ&%öŒ«â Ÿ´]—Ì^¥D×ÇŒØÕÍàp‰`iøä7HѶ'œÉâ“ËL³HAÌrTE,ÝPÊT„&"*ÂRy%©Ô•„¨‡«žQu±«ûTEá“‹&+§ïc?¤V6/öIEND®B`‚yaz-5.28.0/doc/sru-diagnostics.html0000644000175000017500000002032413572540030014103 00000000000000Appendix C. SRU diagnostics

Appendix C. SRU diagnostics

List of SRU diagnostics that are known to YAZ.

CodeText
1 Permanent system error
2 System temporarily unavailable
3 Authentication error
4 Unsupported operation
5 Unsupported version
6 Unsupported parameter value
7 Mandatory parameter not supplied
8 Unsupported parameter
10 Query syntax error
11 Unsupported query type
12 Too many characters in query
13 Invalid or unsupported use of parentheses
14 Invalid or unsupported use of quotes
15 Unsupported context set
16 Unsupported index
17 Unsupported combination of index and context set
18 Unsupported combination of indexes
19 Unsupported relation
20 Unsupported relation modifier
21 Unsupported combination of relation modifiers
22 Unsupported combination of relation and index
23 Too many characters in term
24 Unsupported combination of relation and term
25 Special characters not quoted in term
26 Non special character escaped in term
27 Empty term unsupported
28 Masking character not supported
29 Masked words too short
30 Too many masking characters in term
31 Anchoring character not supported
32 Anchoring character in unsupported position
33 Combination of proximity/adjacency and masking characters not supported
34 Combination of proximity/adjacency and anchoring characters not supported
35 Term contains only stopwords
36 Term in invalid format for index or relation
37 Unsupported boolean operator
38 Too many boolean operators in query
39 Proximity not supported
40 Unsupported proximity relation
41 Unsupported proximity distance
42 Unsupported proximity unit
43 Unsupported proximity ordering
44 Unsupported combination of proximity modifiers
45 Prefix assigned to multiple identifiers
46 Unsupported boolean modifier
47 Cannot process query; reason unknown
48 Query feature unsupported
49 Masking character in unsupported position
50 Result sets not supported
51 Result set does not exist
52 Result set temporarily unavailable
53 Result sets only supported for retrieval
54 Retrieval may only occur from an existing result set
55 Combination of result sets with search terms not supported
56 Only combination of single result set with search terms supported
57 Result set created but no records available
58 Result set created with unpredictable partial results available
59 Result set created with valid partial results available
60 Result set not created: too many matching records
61 First record position out of range
62 Negative number of records requested
63 System error in retrieving records
64 Record temporarily unavailable
65 Record does not exist
66 Unknown schema for retrieval
67 Record not available in this schema
68 Not authorised to send record
69 Not authorised to send record in this schema
70 Record too large to send
71 Unsupported record packing
72 XPath retrieval unsupported
73 XPath expression contains unsupported feature
74 Unable to evaluate XPath expression
80 Sort not supported
81 Unsupported sort type
82 Unsupported sort sequence
83 Too many records to sort
84 Too many sort keys to sort
85 Duplicate sort keys
86 Cannot sort: incompatible record formats
87 Unsupported schema for sort
88 Unsupported path for sort
89 Path unsupported for schema
90 Unsupported direction value
91 Unsupported case value
92 Unsupported missing value action
93 Sort ended due to missing value
100 Explain not supported
101 Explain request type not supported (SOAP vs GET)
102 Explain record temporarily unavailable
110 Stylesheets not supported
111 Unsupported stylesheet
120 Response position out of range
121 Too many terms requested
235 Database does not exist
236 Access to specified database denied
1015 Init/AC: Maximum number of simultaneous sessions for Userid
1074 Proxy failure
yaz-5.28.0/doc/installation.html0000644000175000017500000001230213572540030013463 00000000000000Chapter 2. Compilation and Installation

Chapter 2. Compilation and Installation

1. Introduction

The latest version of the software will generally be found at:

http://ftp.indexdata.com/pub/yaz/

We have tried our best to keep the software portable, and on many platforms, you should be able to compile everything with little or no changes.

The software is regularly tested on Debian GNU/Linux, CentOS, Ubuntu Linux, FreeBSD (i386), MAC OSX, Windows 10.

Some versions have be known to work on Windows XP, Solaris, HP/UX, DEC Unix, NetBSD, OpenBSD, IBM AIX, Data General DG/UX (with some CFLAGS tinkering), SGI/IRIX, DDE Supermax, Apple Macintosh (using the Codewarrior programming environment and the GUSI socket libraries), IBM AS/400 .

If you move the software to other platforms, we'd be grateful if you'd let us know about it. If you run into difficulties, we will try to help if we can, and if you solve the problems, we would be happy to include your fixes in the next release. So far, we have mostly avoided #ifdefs for individual platforms, and we'd like to keep it that way as far as it makes sense.

We maintain a mailing-list for the purpose of announcing new releases and bug-fixes, as well as general discussion. Subscribe by filling-in the form here. General questions and problems can be directed at mailto:yaz-help@indexdata.dk, or the address given at the top of this document.

yaz-5.28.0/doc/yaz-url-man.xml0000644000175000017500000000752313467505553013021 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-url 1 Commands yaz-url YAZ URL fetch utility yaz-url -H name:value -m method -O fname -p fname -R num -u user/password -v -x proxy url DESCRIPTION yaz-url is utility to get web content. It is very limited in functionality compared to programs such as curl, wget. The options must precede the URL given on the command line, to take effect. Fetched HTTP content is written to stdout, unless option -O is given. OPTIONS -H name:value Specifies HTTP header content with name and value. This option can be given multiple times (for different names, of course). -m method Specifies the HTTP method to be used for the next URL. Default is method "GET". However, option -p sets it to "POST". -O fname Sets output filename for HTTP content. -p fname Sets a file to be POSTed in the following URL. -R num Sets maximum number of HTTP redirects to be followed. A value of zero disables follow of HTTP redirects. -u user/password Specifies a user and a password to be used in HTTP basic authentication in the following URL fetch. The user and password must be separated by a slash (thus it is not possible to specify a user with a slash in it). -v Makes yaz-url dump each HTTP request/response to stdout. -x proxy Specifies a proxy to be used for URL fetch. SEE ALSO yaz 7 yaz-5.28.0/doc/yaz-marcdump-man.xml0000644000175000017500000001741213265142510014007 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-marcdump 1 Commands yaz-marcdump MARC record dump utility yaz-marcdump file DESCRIPTION yaz-marcdump reads MARC records from one or more files. It parses each record and supports output in line-format, ISO2709, MARCXML, MARC-in-JSON, MarcXchange as well as Hex output. This utility parses records ISO2709(raw MARC), line format, MARC-in-JSON format as well as XML if that is structured as MARCXML/MarcXchange. MARC-in-JSON encoding/decoding is supported in YAZ 5.0.5 and later. As of YAZ 2.1.18, OAI-MARC is no longer supported. OAI-MARC is deprecated. Use MARCXML instead. By default, each record is written to standard output in a line format with newline for each field, $x for each subfield x. The output format may be changed with option -o, yaz-marcdump can also be requested to perform character set conversion of each record. OPTIONS -i format Specifies input format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), turbomarc (Turbo MARC), or json (MARC-in-JSON). -o format Specifies output format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), turbomarc (Turbo MARC), or json (MARC-in-JSON). -f from Specify the character set of the input MARC record. Should be used in conjunction with option -t. Refer to the yaz-iconv man page for supported character sets. -t to Specify the character set of the output. Should be used in conjunction with option -f. Refer to the yaz-iconv man page for supported character sets. -l leaderspec Specify a simple modification string for MARC leader. The leaderspec is a list of pos=value pairs, where pos is an integer offset (0 - 23) for leader. Value is either a quoted string or an integer (character value in decimal). Pairs are comma separated. For example, to set leader at offset 9 to a, use 9='a'. -s prefix Writes a chunk of records to a separate file with prefix given, i.e. splits a record batch into files with only at most "chunk" ISO2709 records per file. By default chunk is 1 (one record per file). See option -C. -C chunksize Specifies chunk size; to be used conjunction with option -s. -p Makes yaz-marcdump print record number and input file offset of each record read. -n MARC output is omitted so that MARC input is only checked. -v Writes more information about the parsing process. Useful if you have ill-formatted ISO2709 records as input. -V Prints YAZ version. EXAMPLES The following command converts MARC21/USMARC in MARC-8 encoding to MARC21/USMARC in UTF-8 encoding. Leader offset 9 is set to 'a'. Both input and output records are ISO2709 encoded. yaz-marcdump -f MARC-8 -t UTF-8 -o marc -l 9=97 marc21.raw >marc21.utf8.raw The same records may be converted to MARCXML instead in UTF-8: yaz-marcdump -f MARC-8 -t UTF-8 -o marcxml marc21.raw >marcxml.xml Turbo MARC is a compact XML notation with same semantics as MARCXML, but which allows for faster processing via XSLT. In order to generate Turbo MARC records encoded in UTF-8 from MARC21 (ISO), one could use: yaz-marcdump -f MARC8 -t UTF8 -o turbomarc -i marc marc21.raw >out.xml FILES prefix/bin/yaz-marcdump prefix/include/yaz/marcdisp.h SEE ALSO yaz 7 yaz-iconv 1 yaz-5.28.0/doc/soap.xml.html0000644000175000017500000001267613572540030012541 000000000000003. SOAP Packages

3. SOAP Packages

Every SOAP package in YAZ is represented as follows:

#include <yaz/soap.h>

typedef struct {
    char *fault_code;
    char *fault_string;
    char *details;
} Z_SOAP_Fault;

typedef struct {
    int no;
    char *ns;
    void *p;
} Z_SOAP_Generic;

#define Z_SOAP_fault 1
#define Z_SOAP_generic 2
#define Z_SOAP_error 3
typedef struct {
    int which;
    union {
        Z_SOAP_Fault   *fault;
        Z_SOAP_Generic *generic;
        Z_SOAP_Fault   *soap_error;
    } u;
    const char *ns;
} Z_SOAP;
    

The fault and soap_error arms both represent a SOAP fault - struct Z_SOAP_Fault. Any other generic (valid) package is represented by Z_SOAP_Generic.

The ns as part of Z_SOAP is the namespace for SOAP itself and reflects the SOAP version. For version 1.1 it is http://schemas.xmlsoap.org/soap/envelope/, for version 1.2 it is http://www.w3.org/2001/06/soap-envelope.

int z_soap_codec(ODR o, Z_SOAP **pp,
                 char **content_buf, int *content_len,
                 Z_SOAP_Handler *handlers);
   

The content_buf and content_len is XML buffer and length of buffer respectively.

The handlers is a list of SOAP codec handlers - one handler for each service namespace. For SRU SOAP, the namespace would be http://www.loc.gov/zing/srw/v1.0/.

When decoding, the z_soap_codec inspects the XML content and tries to match one of the services namespaces of the supplied handlers. If there is a match. a handler function is invoked which decodes that particular SOAP package. If successful, the returned Z_SOAP package will be of type Z_SOAP_Generic. Member no is set the offset of the handler that matched; ns is set to namespace of the matching handler; the void pointer p is set to the C data structure associated with the handler.

When a NULL namespace is met (member ns below), that specifies end-of-list.

Each handler is defined as follows:

typedef struct {
    char *ns;
    void *client_data;
    Z_SOAP_fun f;
} Z_SOAP_Handler;
    

The ns is the namespace of the service associated with handler f. The client_data is user-defined data which is passed to the handler.

The prototype for a SOAP service handler is:

int handler(ODR o, void * ptr, void **handler_data,
            void *client_data, const char *ns);
    

The o specifies the mode (decode/encode) as usual. The second argument, ptr, is a libxml2 tree node pointer (xmlNodePtr) and is a pointer to the Body element of the SOAP package. The handler_data is an opaque pointer to C definitions associated with the SOAP service. The client_data is the pointer which was set as part of the Z_SOAP_handler. Finally, ns is the service namespace.

yaz-5.28.0/doc/zoomsh.html0000644000175000017500000001420613572540030012306 00000000000000zoomsh

Name

zoomsh — ZOOM shell

Synopsis

zoomsh [-a apdufile] [-e] [-v loglevel] [commands...]

DESCRIPTION

zoomsh is a ZOOM client with a simple command line interface. The client demonstrates the ZOOM API and is useful for testing targets.

You may pass one or more commands to zoomsh. These commands are invoked first.

OPTIONS

-a apdufile

Logs protocol packages into apdufile (APDU log).

-e

Makes zoomsh stop processing commands as soon as an error occur. The exit code of zoomsh is 1 if error occurs; 0 otherwise.

-v loglevel

Sets YAZ log level to loglevel.

EXAMPLES

If you start the yaz-ztest in one console you can use the ZOOM shell as follows:

$ zoomsh
ZOOM>connect localhost:9999
ZOOM>search computer
localhost:9999: 7 hits
ZOOM>show 0 1
1 Default USmarc
001    11224466
003 DLC
005 00000000000000.0
008 910710c19910701nju           00010 eng
010    $a    11224466
040    $a DLC $c DLC
050 00 $a 123-xyz
100 10 $a Jack Collins
245 10 $a How to program a computer
260 1  $a Penguin
263    $a 8710
300    $a p. cm.
ZOOM>quit

    

You can also achieve the same result by passing the commands as arguments on a single command line:

$ zoomsh "connect localhost:9999" "search computer" "show 0 1" quit

COMMANDS

connect zurl

Connects to the target given by zurl.

close [zurl]

Closes connection to target given by zurl or all targets if zurl was omitted.

show [start [count]]

Displays count records starting at offset given by start. First records has offset 0 (unlike the Z39.50 protocol).

quit

Quits zoomsh.

set name [value]

Sets option name to value.

get name

Prints value of option name.

help

Prints list of available commands.

SEE ALSO

yaz(7), yaz-ztest(8),

Section "Building clients with ZOOM" in the YAZ manual.

ZOOM home page.

yaz-5.28.0/doc/tools.oid.html0000644000175000017500000002115513572540030012702 000000000000002. Object Identifiers

2. Object Identifiers

The basic YAZ representation of an OID is an array of integers, terminated with the value -1. This integer is of type Odr_oid.

Fundamental OID operations and the type Odr_oid are defined in yaz/oid_util.h.

An OID can either be declared as a automatic variable or it can be allocated using the memory utilities or ODR/NMEM. It's guaranteed that an OID can fit in OID_SIZE integers.

Example 7.13. Create OID on stack

We can create an OID for the Bib-1 attribute set with:

      Odr_oid bib1[OID_SIZE];
      bib1[0] = 1;
      bib1[1] = 2;
      bib1[2] = 840;
      bib1[3] = 10003;
      bib1[4] = 3;
      bib1[5] = 1;
      bib1[6] = -1;
     


And OID may also be filled from a string-based representation using dots (.). This is achieved by the function

     int oid_dotstring_to_oid(const char *name, Odr_oid *oid);
    

This functions returns 0 if name could be converted; -1 otherwise.

Example 7.14. Using oid_oiddotstring_to_oid

We can fill the Bib-1 attribute set OID more easily with:

      Odr_oid bib1[OID_SIZE];
      oid_oiddotstring_to_oid("1.2.840.10003.3.1", bib1);
     


We can also allocate an OID dynamically on an ODR stream with:

    Odr_oid *odr_getoidbystr(ODR o, const char *str);
    

This creates an OID from a string-based representation using dots. This function take an ODR stream as parameter. This stream is used to allocate memory for the data elements, which is released on a subsequent call to odr_reset() on that stream.

Example 7.15. Using odr_getoidbystr

We can create an OID for the Bib-1 attribute set with:

      Odr_oid *bib1 = odr_getoidbystr(odr, "1.2.840.10003.3.1");
     


The function

     char *oid_oid_to_dotstring(const Odr_oid *oid, char *oidbuf)
    

does the reverse of oid_oiddotstring_to_oid. It converts an OID to the string-based representation using dots. The supplied char buffer oidbuf holds the resulting string and must be at least OID_STR_MAX in size.

OIDs can be copied with oid_oidcpy which takes two OID lists as arguments. Alternatively, an OID copy can be allocated on an ODR stream with:

     Odr_oid *odr_oiddup(ODR odr, const Odr_oid *o);
    

OIDs can be compared with oid_oidcmp which returns zero if the two OIDs provided are identical; non-zero otherwise.

2.1. OID database

From YAZ version 3 and later, the oident system has been replaced by an OID database. OID database is a misnomer .. the old odient system was also a database.

The OID database is really just a map between named Object Identifiers (string) and their OID raw equivalents. Most operations either convert from string to OID or other way around.

Unfortunately, whenever we supply a string we must also specify the OID class. The class is necessary because some strings correspond to multiple OIDs. An example of such a string is Bib-1 which may either be an attribute-set or a diagnostic-set.

Applications using the YAZ database should include yaz/oid_db.h.

A YAZ database handle is of type yaz_oid_db_t. Actually that's a pointer. You need not deal with that. YAZ has a built-in database which can be considered "constant" for most purposes. We can get hold of that by using function yaz_oid_std.

All functions with prefix yaz_string_to_oid converts from class + string to OID. We have variants of this operation due to different memory allocation strategies.

All functions with prefix yaz_oid_to_string converts from OID to string + class.

Example 7.16. Create OID with YAZ DB

We can create an OID for the Bib-1 attribute set on the ODR stream odr with:

        Odr_oid *bib1 =
	yaz_string_to_oid_odr(yaz_oid_std(), CLASS_ATTSET, "Bib-1", odr);
      

This is more complex than using odr_getoidbystr. You would only use yaz_string_to_oid_odr when the string (here Bib-1) is supplied by a user or configuration.


2.2. Standard OIDs

All the object identifiers in the standard OID database as returned by yaz_oid_std can be referenced directly in a program as a constant OID. Each constant OID is prefixed with yaz_oid_ - followed by OID class (lowercase) - then by OID name (normalized and lowercase).

See Appendix A, List of Object Identifiers for list of all object identifiers built into YAZ. These are declared in yaz/oid_std.h but are included by yaz/oid_db.h as well.

Example 7.17. Use a built-in OID

We can allocate our own OID filled with the constant OID for Bib-1 with:

       Odr_oid *bib1 = odr_oiddup(o, yaz_oid_attset_bib1);
      


yaz-5.28.0/doc/license.html0000644000175000017500000000726213572540030012415 00000000000000Appendix D. License

Appendix D. License

Table of Contents

1. Index Data Copyright

1. Index Data Copyright

Copyright © 1995-2019 Index Data.

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  • Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY INDEX DATA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

yaz-5.28.0/doc/installation.win32.html0000644000175000017500000003303513572540030014432 000000000000003. Windows

3. Windows

The easiest way to install YAZ on Windows is by downloading an installer from Index Data's Windows support area . The installer comes with source too - in case you wish to compile YAZ with different compiler options, etc.

3.1. Compiling from Source on Windows

YAZ is shipped with "makefiles" for the NMAKE tool that comes with Microsoft Visual Studio. It has been tested with Microsoft Visual Studio 2017.

Start a command prompt and switch the sub directory WIN where the file makefile is located. Customize the installation by editing the makefile file (for example by using notepad). The following summarizes the most important settings in that file:

DEBUG

If set to 1, the software is compiled with debugging libraries (code generation is multi-threaded debug DLL). If set to 0, the software is compiled with release libraries (code generation is multi-threaded DLL).

HAVE_TCL, TCL

If HAVE_TCL is set to 1, nmake will use the ASN.1 compiler (Tcl based). You must set TCL to the full path of the Tcl interpreter. A Windows version of Tcl is part of Git for Windows.

If you do not have Tcl installed, set HAVE_TCL to 0.

HAVE_BISON, BISON

If GNU Bison is present, you might set HAVE_BISON to 1 and specify the Bison executable in BISON. Bison is only required if you use the Git version of YAZ or if you modify the grammar for CQL (cql.y).

A Windows version of GNU Bison can be fetched from here: Index Data's Windows support area .

HAVE_ICONV, ICONV_DIR

If HAVE_ICONV is set to 1, YAZ is compiled with iconv support. In this configuration, set ICONV_DIR to the iconv source directory.

HAVE_LIBXML2, LIBXML2_DIR

If HAVE_LIBXML2 is set to 1, YAZ is compiled with SRU support. In this configuration, set LIBXML2_DIR to the libxml2 source directory.

You can get pre-compiled Libxml2+Libxslt DLLs and headers from here. Should you with to compile those libraries yourself, refer to to Section 3.3, “Compiling Libxml2 and Libxslt on windows”

HAVE_LIBXSLT, LIBXSLT_DIR

If HAVE_LIBXSLT is set to 1, YAZ is compiled with XSLT support. In this configuration, set LIBXSLT_DIR to the libxslt source directory.

Note

libxslt depends on libxml2.

HAVE_ICU, ICU_DIR

If HAVE_ICU is set to 1, YAZ is compiled with ICU support. In this configuration, set ICU_DIR to the ICU source directory.

Pre-compiled ICU libraries for various versions of Visual Studio can be found here or from Index Data's Windows support site.

When satisfied with the settings in the makefile, type

      nmake
     

Note

If the nmake command is not found on your system you probably haven't defined the environment variables required to use that tool. To fix that, find and run the batch file vcvarsall.bat. You need to run it from within the command prompt or set the environment variables "globally"; otherwise it doesn't work.

If you wish to recompile YAZ - for example if you modify settings in the makefile you can delete object files, etc by running.

      nmake clean
     

The following files are generated upon successful compilation:

bin/yaz5.dll / bin/yaz5d.dll

YAZ Release/Debug DLL.

lib/yaz5.lib / lib/yaz5d.lib

Import library for yaz5.dll / yaz5d.dll.

bin/yaz_cond5.dll / bin/yaz_cond5d.dll

Release/Debug DLL for condition variable utilities (condvar.c).

lib/yaz_cond5.lib / lib/yaz_cond5d.lib

Import library for yaz_cond5.dll / yaz_cond5d.dll.

bin/yaz_icu5.dll / bin/yaz_icu5d.dll

Release/Debug DLL for the ICU wrapper utility. Only build if HAVE_ICU is 1.

lib/yaz_icu5.lib / lib/yaz_icu5d.lib

Import library for yaz_icu5.dll / yaz_icu5d.dll.

bin/yaz-ztest.exe

Z39.50 multi-threaded test/example server. It's a WIN32 console application.

bin/yaz-client.exe

YAZ Z39.50 client application. It's a WIN32 console application. See chapter YAZ client for more information.

bin/yaz-icu.exe

This program exposes the ICU wrapper library if that is enabled for YAZ. Only if ICU is available this program is built.

bin/zoomsh.exe

Simple console application implemented on top of the ZOOM functions. The application is a command line shell that allows you to enter simple commands to perform ZOOM operations.

bin/zoomtst1.exe, bin/zoomtst2.exe, ..

Several small applications that demonstrate the ZOOM API.

3.2. How to make apps using YAZ on Windows

This section will go though the process of linking your Windows applications with YAZ.

Some people are confused by the fact that we use the nmake tool to build YAZ. They think they have to do that too - in order to make their Windows applications work with YAZ. The good news is that you don't have to. You can use the integrated environment of Visual Studio if desired for your own application.

When setting up a project or Makefile you have to set the following:

include path

Set it to the include directory of YAZ.

import library yaz5.lib

You must link with this library. It's located in the sub directory lib of YAZ. If you want to link with the debug version of YAZ, you must link against yaz5d.lib instead.

dynamic link library yaz5.dll

This DLL must be in your execution path when you invoke your application. Specifically, you should distribute this DLL with your application.

3.3. Compiling Libxml2 and Libxslt on windows

Download libxml2 and Libxslt source and unpack it. In the example below we install Libxml2 2.9.2 and Libxslt 1.1.28 for 32-bit, so we use the destination directories libxml2.2.9.2.win32 and libxslt-1.1.28.win32 to reflect both version and architecture.

      cd win32
      cscript configure.js prefix=c:\libxml2-2.9.2.win32 iconv=no
      nmake
      nmake install
     

Note

There's an error in configure.js for Libxml2 2.9.2. Line 17 should be assigned to configure.ac rather than configure.in.

For Libxslt it is similar. We must ensure that compilation of Libxslt links against the already installed libxml2.

      cd win32
      cscript configure.js prefix=c:\libxslt-1.1.28.win32 iconv=no \
          lib=c:\libxml2-2.9.2.win32\lib \
	  include=c:\libxml2-2.9.2.win32\include\libxml2
      nmake
      nmake install
     

yaz-5.28.0/doc/server.frontend.html0000644000175000017500000000671013572540030014114 000000000000002. The Database Frontend

2. The Database Frontend

We refer to this software as a generic database frontend. Your database system is the backend database, and the interface between the two is called the backend API. The backend API consists of a small number of function handlers and structure definitions. You are required to provide the main() routine for the server (which can be quite simple), as well as a set of handlers to match each of the prototypes. The interface functions that you write can use any mechanism you like to communicate with your database system: You might link the whole thing together with your database application and access it by function calls; you might use IPC to talk to a database server somewhere; or you might link with third-party software that handles the communication for you (like a commercial database client library). At any rate, the handlers will perform the tasks of:

  • Initialization.

  • Searching.

  • Fetching records.

  • Scanning the database index (optional - if you wish to implement SCAN).

  • Extended Services (optional).

  • Result-Set Delete (optional).

  • Result-Set Sort (optional).

  • Return Explain for SRU (optional).

(more functions will be added in time to support as much of Z39.50-1995 as possible).

yaz-5.28.0/doc/Makefile.in0000644000175000017500000007453413570011145012156 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = local0.ent CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)" \ "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)" man7dir = $(mandir)/man7 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(doc_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/local0.ent.in NEWS DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HIREDIS_LIBS = @HIREDIS_LIBS@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MEMCACHED_LIBS = @MEMCACHED_LIBS@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = common XMLFILES = book.xml \ gfs-options.xml gfs-virtual.xml gfs-synopsis.xml \ std-oid-table.xml bib1-diag-table.xml srw-diag-table.xml \ manref.xml local.ent HTMLFILES = index.html MANFILES = yaz-client.1 yaz-ztest.8 \ yaz-config.1 yaz.7 zoomsh.1 yaz-asncomp.1 \ yaz-marcdump.1 yaz-iconv.1 yaz-log.7 \ yaz-illclient.1 yaz-icu.1 yaz-url.1 bib1-attr.7 \ yaz-json-parse.1 yaz-record-conv.1 REFFILES = yaz-client-man.xml yaz-ztest-man.xml yaz-config-man.xml \ yaz-man.xml zoomsh-man.xml yaz-asncomp-man.xml \ yaz-marcdump-man.xml yaz-iconv-man.xml yaz-log-man.xml \ yaz-illclient-man.xml yaz-icu-man.xml yaz-url-man.xml \ bib1-attr-man.xml yaz-json-parse-man.xml yaz-record-conv-man.xml SUPPORTFILES = entities.ent apilayer.obj doc_DATA = $(HTMLFILES) apilayer.png man_MANS = $(MANFILES) EXTRA_DIST = $(XMLFILES) $(SUPPORTFILES) $(man_MANS) $(REFFILES) \ $(doc_DATA) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): local0.ent: $(top_builddir)/config.status $(srcdir)/local0.ent.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man7: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man7dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man7dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man7dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.7[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \ done; } uninstall-man7: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man7dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.7[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir) install-man8: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man8dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.8[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-recursive all-am: Makefile $(MANS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-docDATA install-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-man7 install-man8 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-docDATA uninstall-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man1 uninstall-man7 uninstall-man8 .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip uninstall-am .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am dist-hook distclean distclean-generic \ distclean-libtool distclean-local distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-hook install-docDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-man1 install-man7 install-man8 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-docDATA \ uninstall-hook uninstall-man uninstall-man1 uninstall-man7 \ uninstall-man8 .PRECIOUS: Makefile std-oid-table.xml: $(srcdir)/../src/oid.csv $(TCLSH) $(srcdir)/../src/oidtoc.tcl $(srcdir) $(srcdir)/../src/oid.csv std-oid-table.xml bib1-diag-table.xml: $(srcdir)/../src/bib1.csv $(TCLSH) $(srcdir)/../src/csvtodiag.tcl $(srcdir)/../src/bib1.csv bib1-diag-table.xml bib1-diag-table srw-diag-table.xml: $(srcdir)/../src/srw.csv $(TCLSH) $(srcdir)/../src/csvtodiag.tcl $(srcdir)/../src/srw.csv srw-diag-table.xml srw-diag-table yaz-client.1: $(srcdir)/yaz-client-man.xml $(MAN_COMPILE) $(srcdir)/yaz-client-man.xml yaz-ztest.8: yaz-ztest-man.xml gfs-options.xml gfs-synopsis.xml gfs-virtual.xml $(MAN_COMPILE) $(srcdir)/yaz-ztest-man.xml yaz-config.1: yaz-config-man.xml $(MAN_COMPILE) $(srcdir)/yaz-config-man.xml yaz.7: yaz-man.xml $(MAN_COMPILE) $(srcdir)/yaz-man.xml bib1-attr.7: bib1-attr-man.xml $(MAN_COMPILE) $(srcdir)/bib1-attr-man.xml zoomsh.1: zoomsh-man.xml $(MAN_COMPILE) $(srcdir)/zoomsh-man.xml yaz-asncomp.1: yaz-asncomp-man.xml $(MAN_COMPILE) $(srcdir)/yaz-asncomp-man.xml yaz-marcdump.1: yaz-marcdump-man.xml $(MAN_COMPILE) $(srcdir)/yaz-marcdump-man.xml yaz-iconv.1: yaz-iconv-man.xml $(MAN_COMPILE) $(srcdir)/yaz-iconv-man.xml yaz-illclient.1: yaz-illclient-man.xml $(MAN_COMPILE) $(srcdir)/yaz-illclient-man.xml yaz-log.7: yaz-log-man.xml $(MAN_COMPILE) $(srcdir)/yaz-log-man.xml yaz-icu.1: yaz-icu-man.xml $(MAN_COMPILE) $(srcdir)/yaz-icu-man.xml yaz-url.1: yaz-url-man.xml $(MAN_COMPILE) $(srcdir)/yaz-url-man.xml yaz-json-parse.1: yaz-json-parse-man.xml $(MAN_COMPILE) $(srcdir)/yaz-json-parse-man.xml yaz-record-conv.1: yaz-record-conv-man.xml $(MAN_COMPILE) $(srcdir)/yaz-record-conv-man.xml $(HTMLFILES): $(XMLFILES) book.xml rm -f *.html $(HTML_COMPILE) $(srcdir)/book.xml $(MANFILES): local.ent yaz.pdf: $(XMLFILES) book.xml $(PDF_COMPILE) $(srcdir)/book.xml && mv book.pdf yaz.pdf yazj.pdf: jade -E14 -D $(srcdir) -d common/print.dsl -t tex $(srcdir)/common/xml.dcl $(srcdir)/book.xml rm -f yazj.pdf cp book.tex yazj.tex pdfjadetex yazj.tex pdfjadetex yazj.tex >/dev/null pdfjadetex yazj.tex >/dev/null manref.xml: $(REFFILES) $(srcdir)/common/stripref.xsl local.ent rm -f manref.xml for i in $(REFFILES); do \ xsltproc $(srcdir)/common/stripref.xsl $(srcdir)/$$i | sed 1d >>manref.xml; \ done apilayer.png: tgif -print -xbm apilayer.obj xbmtopbm apilayer.png dist-hook: if test -f index.html; then d=.; else d="$(srcdir)"; fi; \ for p in $$d/*.html; do \ cp $$p $(distdir); \ done doc-clean: rm -f manref.xml *.html *.[0-9] *.pdf toc.hhc htmlhelp.hhp local.ent install-data-hook: if test -f index.html; then d=.; else d="$(srcdir)"; fi; \ for p in $$d/*.html; do \ $(INSTALL_DATA) $$p $(DESTDIR)$(docdir); \ done uninstall-hook: rm -r $(DESTDIR)$(docdir) distclean-local: doc-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-5.28.0/doc/credits.html0000644000175000017500000000706313572540030012427 00000000000000Appendix F. Credits

Appendix F. Credits

This appendix lists individuals that have contributed in the development of YAZ. Some have contributed with code, while others have provided bug fixes or suggestions. If we're missing somebody, of if you, for whatever reason, don't like to be listed here, let us know.

  • Gary Anderson

  • Dimitrios Andreadis

  • Morten Bøgeskov

  • Rocco Carbone

  • Matthew Carey

  • Hans van Dalen

  • Irina Dijour

  • Larry E. Dixson

  • Hans van den Dool

  • Mads Bondo Dydensborg

  • Franck Falcoz

  • Kevin Gamiel

  • Morten Garkier Hendriksen

  • Morten Holmqvist

  • Ian Ibbotson

  • Shigeru Ishida

  • Heiko Jansen

  • David Johnson

  • Oleg Kolobov

  • Giannis Kosmas

  • Kang-Jin Lee

  • Pieter Van Lierop

  • Stefan Lohrum

  • Ronald van der Meer

  • Thomas W. Place

  • Peter Popovics

  • Jacob Chr. Poulsen

  • Ko van der Sloot

  • Mike Taylor

  • Rustam T. Usmanov

  • Charles Woodfield

  • Tom André Øverland

yaz-5.28.0/doc/yaz-client.10000644000175000017500000004753313570011155012252 00000000000000'\" t .\" Title: yaz-client .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: Commands .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "YAZ\-CLIENT" "1" "11/28/2019" "YAZ 5.28.0" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-client \- Z39\&.50/SRU client for implementors .SH "SYNOPSIS" .HP \w'\fByaz\-client\fR\ 'u \fByaz\-client\fR [\fB\-a\ \fR\fB\fIapdulog\fR\fR] [\fB\-b\ \fR\fB\fIberdump\fR\fR] [\fB\-c\ \fR\fB\fIcclfile\fR\fR] [\fB\-d\ \fR\fB\fIdump\fR\fR] [\fB\-f\ \fR\fB\fIcmdfile\fR\fR] [\fB\-k\ \fR\fB\fIsize\fR\fR] [\fB\-m\ \fR\fB\fImarclog\fR\fR] [\fB\-p\ \fR\fB\fIproxy\-addr\fR\fR] [\fB\-q\ \fR\fB\fIcqlfile\fR\fR] [\fB\-t\ \fR\fB\fIdispcharset\fR\fR] [\fB\-u\ \fR\fB\fIauth\fR\fR] [\fB\-v\ \fR\fB\fIloglevel\fR\fR] [\fB\-V\fR] [\fB\-x\fR] [server\-addr] .SH "DESCRIPTION" .PP \fByaz\-client\fR is a \m[blue]\fBZ39\&.50\fR\m[]\&\s-2\u[1]\d\s+2/\m[blue]\fBSRU\fR\m[]\&\s-2\u[2]\d\s+2 client (origin) with a simple command line interface that allows you to test behavior and performance of Z39\&.50 targets and SRU servers\&. .PP From YAZ version 4\&.1\&.0 \fByaz\-client\fR may also operate as a \m[blue]\fBSolr\fR\m[]\&\s-2\u[3]\d\s+2 Web Service client\&. .PP If the \fIserver\-addr\fR is specified, the client creates a connection to the Z39\&.50/SRU target at the address given\&. .PP When \fByaz\-client\fR is started it tries to read commands from one of the following files: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Command file if it is given by option \-f\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \&.yazclientrc in current working directory\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \&.yazclientrc in the user\*(Aqs home directory\&. The value of the $HOME environment variable is used to determine the home directory\&. Normally, $HOME is only set on POSIX systems such as Linux, FreeBSD, Solaris\&. .RE .sp .SH "OPTIONS" .PP \-a \fIfilename\fR .RS 4 If specified, logging of protocol packages will be appended to the file given\&. If \fIfilename\fR is specified as \-, the output is written to stdout\&. .RE .PP \-b \fIfilename\fR .RS 4 If specified, YAZ will dump BER data in readable notation to the file specified\&. If \fIfilename\fR is specified as \- the output is written to stdout\&. .RE .PP \-c \fIfilename\fR .RS 4 If specified, CCL configuration will be read from the file given\&. .RE .PP \-d \fIdump\fR .RS 4 If specified, YAZ will dump BER data for all PDUs sent and received to individual files, named \fIdump\fR\&.DDD\&.raw, where DDD is 001, 002, 003, \&.\&.\&. .RE .PP \-f \fIcmdfile\fR .RS 4 Reads commands from \fIcmdfile\fR\&. When this option is used, YAZ client does not read \&.yazclientrc from current directory or home directory\&. .RE .PP \-k \fIsize\fR .RS 4 Sets preferred messages and maximum record size for Initialize Request in kilobytes\&. Default value is 65536 (64 MB)\&. .RE .PP \-m \fIfilename\fR .RS 4 If specified, retrieved records will be appended to the file given\&. .RE .PP \-p \fIproxy\-addr\fR .RS 4 If specified, the client will use the proxy at the address given\&. YAZ client will connect to a proxy on the address and port given\&. The actual target will be specified as part of the InitRequest to inform the proxy about the actual target\&. .RE .PP \-q \fIfilename\fR .RS 4 If specified, CQL configuration will be read from the file given\&. .RE .PP \-t \fIdisplaycharset\fR .RS 4 If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running)\&. .RE .PP \-u \fIauth\fR .RS 4 If specified, the \fIauth\fR string will be used for authentication\&. .RE .PP \-v \fIlevel\fR .RS 4 Sets the LOG level to \fIlevel\fR\&. Level is a sequence of tokens separated by comma\&. Each token is a integer or a named LOG item \- one of fatal, debug, warn, log, malloc, all, none\&. .RE .PP \-V .RS 4 Prints YAZ version\&. .RE .PP \-x .RS 4 Makes the YAZ client print hex dumps of packages sent and received on standard output\&. .RE .SH "COMMANDS" .PP The YAZ client accepts the following commands\&. .PP open \fIzurl\fR .RS 4 Opens a connection to a server\&. The syntax for \fIzurl\fR is the same as described above for connecting from the command line\&. .sp Syntax: .sp [(tcp|ssl|unix|http)\*(Aq:\*(Aq]\fIhost\fR [:\fIport\fR][/\fIbase\fR] .RE .PP quit .RS 4 Quits YAZ client .RE .PP find \fIquery\fR .RS 4 Sends a Search Request using the \fIquery\fR given\&. By default the query is assumed to be PQF\&. See command querytype for more information\&. .RE .PP delete \fIsetname\fR .RS 4 Deletes result set with name \fIsetname\fR on the server\&. .RE .PP base \fIbase1\fR \fIbase2\fR \&.\&.\&. .RS 4 Sets the name(s) of the database(s) to search\&. One or more databases may be specified, separated by blanks\&. This command overrides the database given in \fIzurl\fR\&. .RE .PP show [\fIstart\fR[+\fInumber\fR [+\fIresultset\fR]]] .RS 4 Fetches records by sending a Present Request from the start position given by \fIstart\fR and a number of records given by \fInumber\fR, from the result set \fIresultset\fR\&. If \fIstart\fR is not given, then the client will fetch from the position of the last retrieved record plus 1\&. If \fInumber\fR is not given, then one record will be fetched at a time\&. If \fIresultset\fR is not given, the most recently retrieved result set is used\&. .RE .PP scan \fIterm\fR .RS 4 Scans database index for a term\&. The syntax resembles the syntax for find\&. If you want to scan for the word water you could write .sp .if n \{\ .RS 4 .\} .nf scan water .fi .if n \{\ .RE .\} .sp but if you want to scan only in, say the title field, you would write .sp .if n \{\ .RS 4 .\} .nf scan @attr 1=4 water .fi .if n \{\ .RE .\} .RE .PP setscan \fIset\fR \fIterm\fR .RS 4 Scans database index for a term within a result set\&. This is similar to the scan command but has a result set as its first argument\&. .RE .PP scanpos \fIpos\fR .RS 4 Sets preferred position for scan\&. This value is used in the next scan\&. By default, position is 1\&. .RE .PP scansize \fIsize\fR .RS 4 Sets number of entries to be returned by scan\&. Default number of entries is 20\&. .RE .PP scanstep \fIstep\fR .RS 4 Set step\-size for scan\&. This value is used in the next scan sent to the target\&. By default step\-size is 0\&. .RE .PP sort \fIsortspecs\fR .RS 4 Sorts a result set\&. The sort command takes a sequence of space\-separated sort specifications, with each sort specification consisting of two space\-separated words (so that the whole specification list is made up of an even number of words)\&. The first word of each specification holds a field (sort criterion) and the second holds flags\&. If the sort criterion includes = it is assumed that the SortKey is of type sortAttributes using Bib\-1: in this case the integer before = is the attribute type and the integer following = is the attribute value\&. If no = character is in the criterion, it is treated as a sortfield of type InternationalString\&. The flags word of each sort specification must consist of s for case sensitive or i for case insensitive, and < for ascending order or > for descending order\&. .RE .PP sort+ .RS 4 Same as sort but stores the sorted result set in a new result set\&. .RE .PP authentication \fIopenauth\fR .RS 4 Sets up an authentication string if a server requires authentication (v2 OpenStyle)\&. The authentication string is first sent to the server when the open command is issued and the Z39\&.50 Initialize Request is sent, so this command must be used before open in order to be effective\&. A common convention for the \fIauthopen\fR string is that the username \- and password is separated by a slash, e\&.g\&. myusername/mysecret\&. .RE .PP sru \fImethod\fR \fIversion\fR .RS 4 Selects Web Service method and version\&. Must be one of post, get, soap (default) or solr\&. Version should be either 1\&.1, 1\&.2 or 2\&.0 for SRU\&. Other versions are allowed \- for testing purposes (version negotiation with SRU server)\&. The version is currently not used for Solr Web Services .RE .PP list_all .RS 4 This command displays status and values for many settings\&. .RE .PP lslb \fIn\fR .RS 4 Sets the limit for when no records should be returned together with the search result\&. See the \m[blue]\fBZ39\&.50 standard on set bounds\fR\m[]\&\s-2\u[4]\d\s+2 for more details\&. .RE .PP ssub \fIn\fR .RS 4 Sets the limit for when all records should be returned with the search result\&. See the \m[blue]\fBZ39\&.50 standard on set bounds\fR\m[]\&\s-2\u[4]\d\s+2 for more details\&. .RE .PP mspn \fIn\fR .RS 4 Sets the number of records that should be returned if the number of records in the result set is between the values of lslb and ssub\&. See the \m[blue]\fBZ39\&.50 standard on set bounds\fR\m[]\&\s-2\u[4]\d\s+2 for more details\&. .RE .PP status .RS 4 Displays the values of lslb, ssub and mspn\&. .RE .PP setname .RS 4 Switches named result sets on and off\&. Default is on\&. .RE .PP cancel .RS 4 Sends a Trigger Resource Control Request to the target\&. .RE .PP facets \fIspec\fR .RS 4 Specifies requested facets to be used in search\&. The notation is specified in ???\&. .RE .PP format \fIoid\fR .RS 4 Sets the preferred transfer syntax for retrieved records\&. yaz\-client supports all the record syntaxes that currently are registered\&. See \m[blue]\fBZ39\&.50 Record Syntax Identifiers\fR\m[]\&\s-2\u[5]\d\s+2 for more details\&. Commonly used records syntaxes include usmarc, sutrs and xml\&. .RE .PP elements \fIe\fR .RS 4 Sets the element set name for the records\&. Many targets support element sets B (for brief) and F (for full)\&. .RE .PP close .RS 4 Sends a Z39\&.50 Close APDU and closes connection with the peer .RE .PP querytype \fItype\fR .RS 4 Sets the query type as used by command find\&. The following is supported: prefix for Prefix Query Notation (Type\-1 Query); ccl for CCL search (Type\-2 Query), cql for CQL (Type\-104 search with CQL OID), ccl2rpn for CCL to RPN conversion (Type\-1 Query), cql2rpn for CQL to RPN conversion (Type\-1 Query)\&. .RE .PP attributeset \fIset\fR .RS 4 Sets attribute set OID for prefix queries (RPN, Type\-1)\&. .RE .PP refid \fIid\fR .RS 4 Sets reference ID for Z39\&.50 Request(s)\&. .RE .PP itemorder \fItype\fR \fIno\fR .RS 4 Sends an Item Order Request using the ILL External\&. \fItype\fR is either 1 or 2 which corresponds to ILL\-Profile 1 and 2 respectively\&. The \fIno\fR is the Result Set position of the record to be ordered\&. .RE .PP update \fIaction\fR \fIrecid\fR \fIdoc\fR .RS 4 Sends Item Update Request\&. The \fIaction\fR argument must be the action type: one of insert, replace, delete and update\&. The second argument, \fIrecid\fR, is the record identifier (any string)\&. Third argument which is optional is the record document for the request\&. If doc is preceded with "<", then the following characters are treated as a filename with the records to be updated\&. Otherwise doc is treated as a document itself\&. The doc may also be quoted in double quotes\&. If doc is omitted, the last received record (as part of present response or piggybacked search response) is used for the update\&. .RE .PP source \fIfilename\fR .RS 4 Executes list of commands from file \fIfilename\fR, just like \*(Aqsource\*(Aq on most UNIX shells\&. A single dot (\&.) can be used as an alternative\&. .RE .PP ! \fIargs\fR .RS 4 Executes command \fIargs\fR in subshell using the system call\&. .RE .PP push_command \fIcommand\fR .RS 4 The push_command takes another command as its argument\&. That command is then added to the history information (so you can retrieve it later)\&. The command itself is not executed\&. This command only works if you have GNU readline/history enabled\&. .RE .PP set_apdufile \fIfilename\fR .RS 4 Sets that APDU should be logged to file \fIfilename\fR\&. Another way to achieve APDU log is by using command\-line option \-a\&. .RE .PP set_auto_reconnect \fIflag\fR .RS 4 Specifies whether YAZ client automatically reconnects if the target closes connection (Z39\&.50 only)\&. .sp \fIflag\fR must be either on or off\&. .RE .PP set_auto_wait \fIflag\fR .RS 4 Specifies whether YAZ client should wait for response protocol packages after a request\&. By default YAZ client waits (on) for response packages immediately after a command (find, show) has been issued\&. If off is used, YAZ client does not attempt to receive packages automatically\&. These will have to be manually received when command wait_response is used\&. .sp \fIflag\fR must be either on or off\&. .RE .PP set_marcdump \fIfilename\fR .RS 4 Specifies that all retrieved records should be appended to file \fIfilename\fR\&. This command does the same thing as option \-m\&. .RE .PP schema \fIschemaid\fR .RS 4 Specifies schema for retrieval\&. Schema may be specified as an OID for Z39\&.50\&. For SRU, schema is a simple string URI\&. .RE .PP charset \fInegotiationcharset\fR [\fIdisplaycharset\fR] [[\fImarccharset\fR]] .RS 4 Specifies character set (encoding) for Z39\&.50 negotiation / SRU encoding and/or character set for output (terminal)\&. .sp \fInegotiationcharset\fR is the name of the character set to be negotiated by the server\&. The special name \- for \fInegotiationcharset\fR specifies \fIno\fR character set to be negotiated\&. .sp If \fIdisplaycharset\fR is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running)\&. To disable conversion of characters to the output encoding, the special name \- (dash) can be used\&. If the special name auto is given, YAZ client will convert strings to the encoding of the terminal as returned by \fBnl_langinfo\fR call\&. .sp If \fImarccharset\fR is given, it specifies name of the character set of retrieved MARC records from server\&. See also marccharset command\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br Since character set negotiation takes effect in the Z39\&.50 Initialize Request you should issue this command before command open is used\&. .sp .5v .RE .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br MARC records are not covered by Z39\&.50 character set negotiation, so that\*(Aqs why there is a separate character that must be known in order to do meaningful conversion(s)\&. .sp .5v .RE .RE .PP negcharset \fIcharset\fR .RS 4 Specifies character set for negotiation (Z39\&.50)\&. The argument is the same as second argument for command charset\&. .RE .PP displaycharset \fIcharset\fR .RS 4 Specifies character set for output (display)\&. The argument is the same as second argument for command charset\&. .RE .PP marccharset \fIcharset\fR .RS 4 Specifies character set for retrieved MARC records so that YAZ client can display them in a character suitable for your display\&. See charset command\&. If auto is given, YAZ will assume that MARC21/USMARC is using MARC8/UTF8 and ISO\-8859\-1 for all other MARC variants\&. The charset argument is the same as third argument for command charset\&. .RE .PP querycharset \fIcharset\fR .RS 4 Specifies character set for query terms for Z39\&.50 RPN queries and Z39\&.50 Scan Requests (termListAndStartPoint)\&. This is a pure client\-side conversion which converts from displayCharset to queryCharset\&. .RE .PP set_cclfile \fIfilename\fR .RS 4 Specifies that CCL fields should be read from file file \fIfilename\fR\&. This command does the same thing as option \-c\&. .RE .PP set_cqlfile \fIfilename\fR .RS 4 Specifies that CQL fields should be read from file file \fIfilename\fR\&. This command does the same thing as option \-q\&. .RE .PP register_oid \fIname\fR \fIclass\fR \fIOID\fR .RS 4 This command allows you to register your own object identifier \- so that instead of entering a long dot\-notation you can use a short name instead\&. The \fIname\fR is your name for the OID, \fIclass\fR is the class, and \fIOID\fR is the raw OID in dot notation\&. Class is one of: appctx, absyn, attet, transyn, diagset, recsyn, resform, accform, extserv, userinfo, elemspec, varset, schema, tagset, general\&. If you\*(Aqre in doubt use the general class\&. .RE .PP register_tab \fIcommand\fR \fIstring\fR .RS 4 This command registers a TAB completion string for the command given\&. .RE .PP sleep \fIseconds\fR .RS 4 This command makes YAZ client sleep (be idle) for the number of seconds given\&. .RE .PP wait_response [ \fInumber\fR] .RS 4 This command makes YAZ client wait for a number of response packages from target\&. If \fInumber\fR is omitted, 1 is assumed\&. .sp This command is rarely used and is only useful if command set_auto_wait is set to off\&. .RE .PP xmles \fIOID\fR \fIdoc\fR .RS 4 Sends XML Extended Services request using the OID and doc given\&. .RE .PP zversion \fIver\fR .RS 4 This command sets Z39\&.50 version for negotiation\&. Should be used before open\&. By default 3 (version 3) is used\&. .RE .PP options \fIop1 op2\&.\&.\fR .RS 4 This command sets Z39\&.50 options for negotiation\&. Should be used before open\&. .sp The following options are supported: search, present, delSet, resourceReport, triggerResourceCtrl, resourceCtrl, accessCtrl, scan, sort, extendedServices, level_1Segmentation, level_2Segmentation, concurrentOperations, namedResultSets, encapsulation, resultCount, negotiationModel, duplicationDetection, queryType104, pQESCorrection, stringSchema\&. .RE .SH "EXAMPLE" .PP The simplest example of a Prefix Query would be something like .sp .if n \{\ .RS 4 .\} .nf f knuth .fi .if n \{\ .RE .\} .sp or .sp .if n \{\ .RS 4 .\} .nf f "donald knuth" .fi .if n \{\ .RE .\} .sp In those queries, no attributes were specified\&. This leaves it up to the server what fields to search but most servers will search in all fields\&. Some servers do not support this feature though, and require that some attributes are defined\&. To add one attribute you could do: .sp .if n \{\ .RS 4 .\} .nf f @attr 1=4 computer .fi .if n \{\ .RE .\} .sp where we search in the title field, since the use(1) is title(4)\&. If we want to search in the author field \fIand\fR in the title field, and in the title field using right truncation it could look something like this: .sp .if n \{\ .RS 4 .\} .nf f @and @attr 1=1003 knuth @attr 1=4 @attr 5=1 computer .fi .if n \{\ .RE .\} .sp Finally using a mix of Bib\-1 and GILS attributes could look something like this: .sp .if n \{\ .RS 4 .\} .nf f @attrset Bib\-1 @and @attr GILS 1=2008 Washington @attr 1=21 weather .fi .if n \{\ .RE .\} .sp .SH "FILES" .PP yaz\-/client/client\&.c .PP $HOME/\&.yazclientrc .PP $HOME/\&.yazclient\&.history .SH "SEE ALSO" .PP \fByaz\fR(7) \fBbib1-attr\fR(7) .SH "AUTHORS" .PP \fBIndex Data\fR .SH "NOTES" .IP " 1." 4 Z39.50 .RS 4 \%https://www.loc.gov/z3950/agency/ .RE .IP " 2." 4 SRU .RS 4 \%https://www.loc.gov/standards/sru/ .RE .IP " 3." 4 Solr .RS 4 \%https://lucene.apache.org/solr/ .RE .IP " 4." 4 Z39.50 standard on set bounds .RS 4 \%http://www.loc.gov/z3950/agency/markup/04.html#3.2.2.1.6 .RE .IP " 5." 4 Z39.50 Record Syntax Identifiers .RS 4 \%http://www.loc.gov/z3950/agency/defns/oids.html#5 .RE yaz-5.28.0/doc/zoom.scan.html0000644000175000017500000001437513572540030012705 000000000000006. Scan

6. Scan

This section describes an interface for Scan. Scan is not an official part of the ZOOM model yet. The result of a scan operation is the ZOOM_scanset which is a set of terms returned by a target.

The Scan interface is supported for both Z39.50, SRU and Solr.

    ZOOM_scanset ZOOM_connection_scan(ZOOM_connection c,
                                      const char *startpqf);

    ZOOM_scanset ZOOM_connection_scan1(ZOOM_connection c,
                                       ZOOM_query q);

    size_t ZOOM_scanset_size(ZOOM_scanset scan);

    const char *ZOOM_scanset_term(ZOOM_scanset scan, size_t pos,
                                  size_t *occ, size_t *len);

    const char *ZOOM_scanset_display_term(ZOOM_scanset scan, size_t pos,
                                          size_t *occ, size_t *len);

    void ZOOM_scanset_destroy(ZOOM_scanset scan);

    const char *ZOOM_scanset_option_get(ZOOM_scanset scan,
                                        const char *key);

    void ZOOM_scanset_option_set(ZOOM_scanset scan, const char *key,
                                 const char *val);
    

The scan set is created by function ZOOM_connection_scan which performs a scan operation on the connection using the specified startpqf. If the operation was successful, the size of the scan set can be retrieved by a call to ZOOM_scanset_size. Like result sets, the items are numbered 0..size-1. To obtain information about a particular scan term, call function ZOOM_scanset_term. This function takes a scan set offset pos and returns a pointer to a raw term or NULL if non-present. If present, the occ and len are set to the number of occurrences and the length of the actual term respectively. ZOOM_scanset_display_term is similar to ZOOM_scanset_term except that it returns the display term rather than the raw term. In a few cases, the term is different from display term. Always use the display term for display and the raw term for subsequent scan operations (to get more terms, next scan result, etc).

A scan set may be freed by a call to function ZOOM_scanset_destroy. Functions ZOOM_scanset_option_get and ZOOM_scanset_option_set retrieves and sets an option respectively.

The startpqf is a subset of PQF, namely the Attributes+Term part. Multiple @attr can be used. For example to scan in title (complete) phrases:


     @attr 1=4 @attr 6=2 "science o"
    

The ZOOM_connecton_scan1 is a newer and more generic alternative to ZOOM_connection_scan which allows to use both CQL and PQF for Scan.

Table 3.5. ZOOM Scan Set Options

OptionDescriptionDefault
numberNumber of Scan Terms requested in next scan. After scan it holds the actual number of terms returned. 20
positionPreferred Position of term in response in next scan; actual position after completion of scan. 1
stepSizeStep Size 0
scanStatusAn integer indicating the Scan Status of last scan. 0
rpnCharsetCharacter set for RPN terms. If this is set, ZOOM C will assume that the ZOOM application is running UTF-8. Terms in RPN queries are then converted to the rpnCharset. If this is unset, ZOOM C will not assume any encoding of RPN terms and no conversion is performed. none

yaz-5.28.0/doc/zoomsh-man.xml0000644000175000017500000001257213265142510012717 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data zoomsh 1 Commands zoomsh ZOOM shell zoomsh commands DESCRIPTION zoomsh is a ZOOM client with a simple command line interface. The client demonstrates the ZOOM API and is useful for testing targets. You may pass one or more commands to zoomsh. These commands are invoked first. OPTIONS -a apdufile Logs protocol packages into apdufile (APDU log). -e Makes zoomsh stop processing commands as soon as an error occur. The exit code of zoomsh is 1 if error occurs; 0 otherwise. -v loglevel Sets YAZ log level to loglevel. EXAMPLES If you start the yaz-ztest in one console you can use the ZOOM shell as follows: connect localhost:9999 ZOOM>search computer localhost:9999: 7 hits ZOOM>show 0 1 1 Default USmarc 001 11224466 003 DLC 005 00000000000000.0 008 910710c19910701nju 00010 eng 010 $a 11224466 040 $a DLC $c DLC 050 00 $a 123-xyz 100 10 $a Jack Collins 245 10 $a How to program a computer 260 1 $a Penguin 263 $a 8710 300 $a p. cm. ZOOM>quit ]]> You can also achieve the same result by passing the commands as arguments on a single command line: $ zoomsh "connect localhost:9999" "search computer" "show 0 1" quit COMMANDS connect zurl Connects to the target given by zurl. close [zurl] Closes connection to target given by zurl or all targets if zurl was omitted. show [start [count]] Displays count records starting at offset given by start. First records has offset 0 (unlike the Z39.50 protocol). quit Quits zoomsh. set name [value] Sets option name to value. get name Prints value of option name. help Prints list of available commands. SEE ALSO yaz 7 , yaz-ztest 8 , Section "Building clients with ZOOM" in the YAZ manual. ZOOM home page. yaz-5.28.0/doc/introduction.api.html0000644000175000017500000002173313572540030014263 000000000000002. The API

2. The API

The YAZ toolkit offers several different levels of access to the ISO23950/Z39.50, ILL and SRU protocols. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement. If you're developing a client application you should consider the ZOOM API. It is, by far, the easiest way to develop clients in C. Server implementers should consider the generic frontend server. None of those high-level APIs support the whole protocol, but they do include most facilities used in existing Z39.50 applications.

If you're using 'exotic' functionality (meaning anything not included in the high-level APIs), developing non-standard extensions to Z39.50 or you're going to develop an ILL application, you'll have to learn the lower level APIs of YAZ.

The YAZ toolkit modules are shown in figure Figure 1.1, “YAZ layers”.

Figure 1.1. YAZ layers

YAZ layers

There are four layers.

  • A client or server application (or both). This layer includes ZOOM and the generic frontend server.

  • The second layer provides a C representation of the protocol units (packages) for Z39.50 ASN.1, ILL ASN.1, SRU.

  • The third layer encodes and decodes protocol data units to simple packages (buffer with certain length). The ODR module encodes and decodes BER whereas the HTTP modules encodes and decodes HTTP requests/responses.

  • The lowest layer is COMSTACK which exchanges the encoded packages with a peer process over a network.

The Z39.50 ASN.1 module represents the ASN.1 definition of the Z39.50 protocol. It establishes a set of type and structure definitions, with one structure for each of the top-level PDUs, and one structure or type for each of the contained ASN.1 types. For primitive types, or other types that are defined by the ASN.1 standard itself (such as the EXTERNAL type), the C representation is provided by the ODR (Open Data Representation) subsystem.

ODR is a basic mechanism for representing an ASN.1 type in the C programming language, and for implementing BER encoders and decoders for values of that type. The types defined in the Z39.50 ASN.1 module generally have the prefix Z_, and a suffix corresponding to the name of the type in the ASN.1 specification of the protocol (generally Z39.50-1995). In the case of base types (those originating in the ASN.1 standard itself), the prefix Odr_ is sometimes seen. Either way, look for the actual definition in either z-core.h (for the types from the protocol), odr.h (for the primitive ASN.1 types). The Z39.50 ASN.1 library also provides functions (which are, in turn, defined using ODR primitives) for encoding and decoding data values. Their general form is

int z_xxx(o,  
 p,  
 optional,  
 name); 
ODR o;
Z_xxx **p;
int optional;
const char *name;
 

(note the lower-case "z" in the function name)

Note

If you are using the premade definitions of the Z39.50 ASN.1 module, and you are not adding a new protocol of your own, the only parts of ODR that you need to worry about are documented in Section 2, “Using ODR”.

When you have created a BER-encoded buffer, you can use the COMSTACK subsystem to transmit (or receive) data over the network. The COMSTACK module provides simple functions for establishing a connection (passively or actively, depending on the role of your application), and for exchanging BER-encoded PDUs over that connection. When you create a connection endpoint, you need to specify what transport to use (TCP/IP, SSL or UNIX sockets). For the remainder of the connection's lifetime, you don't have to worry about the underlying transport protocol at all - the COMSTACK will ensure that the correct mechanism is used.

We call the combined interfaces to ODR, Z39.50 ASN.1, and COMSTACK the service level API. It's the API that most closely models the Z39.50 service/protocol definition, and it provides unlimited access to all fields and facilities of the protocol definitions.

The reason that the YAZ service-level API is a conglomerate of the APIs from three different submodules is twofold. First, we wanted to allow the user a choice of different options for each major task. For instance, if you don't like the protocol API provided by ODR/Z39.50 ASN.1, you can use SNACC or BERUtils instead, and still have the benefits of the transparent transport approach of the COMSTACK module. Secondly, we realize that you may have to fit the toolkit into an existing event-processing structure, in a way that is incompatible with the COMSTACK interface or some other part of YAZ.

yaz-5.28.0/doc/tools.html0000644000175000017500000017653513572540030012145 00000000000000Chapter 7. Supporting Tools

Chapter 7. Supporting Tools

In support of the service API - primarily the ASN module, which provides the programmatic interface to the Z39.50 APDUs, YAZ contains a collection of tools that support the development of applications.

1. Query Syntax Parsers

Since the type-1 (RPN) query structure has no direct, useful string representation, every origin application needs to provide some form of mapping from a local query notation or representation to a Z_RPNQuery structure. Some programmers will prefer to construct the query manually, perhaps using odr_malloc() to simplify memory management. The YAZ distribution includes three separate, query-generating tools that may be of use to you.

1.1. Prefix Query Format

Since RPN or reverse polish notation is really just a fancy way of describing a suffix notation format (operator follows operands), it would seem that the confusion is total when we now introduce a prefix notation for RPN. The reason is one of simple laziness - it's somewhat simpler to interpret a prefix format, and this utility was designed for maximum simplicity, to provide a baseline representation for use in simple test applications and scripting environments (like Tcl). The demonstration client included with YAZ uses the PQF.

Note

The PQF has been adopted by other parties developing Z39.50 software. It is often referred to as Prefix Query Notation - PQN.

The PQF is defined by the pquery module in the YAZ library. There are two sets of functions that have similar behavior. First set operates on a PQF parser handle, second set doesn't. First set of functions are more flexible than the second set. Second set is obsolete and is only provided to ensure backwards compatibility.

First set of functions all operate on a PQF parser handle:

     #include <yaz/pquery.h>

     YAZ_PQF_Parser yaz_pqf_create(void);

     void yaz_pqf_destroy(YAZ_PQF_Parser p);

     Z_RPNQuery *yaz_pqf_parse(YAZ_PQF_Parser p, ODR o, const char *qbuf);

     Z_AttributesPlusTerm *yaz_pqf_scan(YAZ_PQF_Parser p, ODR o,
                          Odr_oid **attributeSetId, const char *qbuf);

     int yaz_pqf_error(YAZ_PQF_Parser p, const char **msg, size_t *off);
    

A PQF parser is created and destructed by functions yaz_pqf_create and yaz_pqf_destroy respectively. Function yaz_pqf_parse parses the query given by string qbuf. If parsing was successful, a Z39.50 RPN Query is returned which is created using ODR stream o. If parsing failed, a NULL pointer is returned. Function yaz_pqf_scan takes a scan query in qbuf. If parsing was successful, the function returns attributes plus term pointer and modifies attributeSetId to hold attribute set for the scan request - both allocated using ODR stream o. If parsing failed, yaz_pqf_scan returns a NULL pointer. Error information for bad queries can be obtained by a call to yaz_pqf_error which returns an error code and modifies *msg to point to an error description, and modifies *off to the offset within the last query where parsing failed.

The second set of functions are declared as follows:

     #include <yaz/pquery.h>

     Z_RPNQuery *p_query_rpn(ODR o, oid_proto proto, const char *qbuf);

     Z_AttributesPlusTerm *p_query_scan(ODR o, oid_proto proto,
                             Odr_oid **attributeSetP, const char *qbuf);

     int p_query_attset(const char *arg);
    

The function p_query_rpn() takes as arguments an ODR stream (see section The ODR Module) to provide a memory source (the structure created is released on the next call to odr_reset() on the stream), a protocol identifier (one of the constants PROTO_Z3950 and PROTO_SR), an attribute set reference, and finally a null-terminated string holding the query string.

If the parse went well, p_query_rpn() returns a pointer to a Z_RPNQuery structure which can be placed directly into a Z_SearchRequest. If parsing failed, due to syntax error, a NULL pointer is returned.

The p_query_attset specifies which attribute set to use if the query doesn't specify one by the @attrset operator. The p_query_attset returns 0 if the argument is a valid attribute set specifier; otherwise the function returns -1.

The grammar of the PQF is as follows:


     query ::= top-set query-struct.

     top-set ::= [ '@attrset' string ]

     query-struct ::= attr-spec | simple | complex | '@term' term-type query

     attr-spec ::= '@attr' [ string ] string query-struct

     complex ::= operator query-struct query-struct.

     operator ::= '@and' | '@or' | '@not' | '@prox' proximity.

     simple ::= result-set | term.

     result-set ::= '@set' string.

     term ::= string.

     proximity ::= exclusion distance ordered relation which-code unit-code.

     exclusion ::= '1' | '0' | 'void'.

     distance ::= integer.

     ordered ::= '1' | '0'.

     relation ::= integer.

     which-code ::= 'known' | 'private' | integer.

     unit-code ::= integer.

     term-type ::= 'general' | 'numeric' | 'string' | 'oid' | 'datetime' | 'null'.
    

You will note that the syntax above is a fairly faithful representation of RPN, except for the Attribute, which has been moved a step away from the term, allowing you to associate one or more attributes with an entire query structure. The parser will automatically apply the given attributes to each term as required.

The @attr operator is followed by an attribute specification (attr-spec above). The specification consists of an optional attribute set, an attribute type-value pair and a sub-query. The attribute type-value pair is packed in one string: an attribute type, an equals sign, and an attribute value, like this: @attr 1=1003. The type is always an integer, but the value may be either an integer or a string (if it doesn't start with a digit character). A string attribute-value is encoded as a Type-1 "complex" attribute with the list of values containing the single string specified, and including no semantic indicators.

Version 3 of the Z39.50 specification defines various encoding of terms. Use @term type string, where type is one of: general, numeric or string (for InternationalString). If no term type has been given, the general form is used. This is the only encoding allowed in both versions 2 and 3 of the Z39.50 standard.

1.1.1. Using Proximity Operators with PQF

Note

This is an advanced topic, describing how to construct queries that make very specific requirements on the relative location of their operands. You may wish to skip this section and go straight to the example PQF queries.

Warning

Most Z39.50 servers do not support proximity searching, or support only a small subset of the full functionality that can be expressed using the PQF proximity operator. Be aware that the ability to express a query in PQF is no guarantee that any given server will be able to execute it.

The proximity operator @prox is a special and more restrictive version of the conjunction operator @and. Its semantics are described in section 3.7.2 (Proximity) of Z39.50 the standard itself, which can be read on-line at https://www.loc.gov/z3950/agency/markup/09.html#3.7.2

In PQF, the proximity operation is represented by a sequence of the form

       @prox exclusion distance ordered relation which-code unit-code
      

in which the meanings of the parameters are as described in the standard, and they can take the following values:

  • exclusion.  0 = false (i.e. the proximity condition specified by the remaining parameters must be satisfied) or 1 = true (the proximity condition specified by the remaining parameters must not be satisfied).

  • distance.  An integer specifying the difference between the locations of the operands: e.g. two adjacent words would have distance=1 since their locations differ by one unit.

  • ordered.  1 = ordered (the operands must occur in the order the query specifies them) or 0 = unordered (they may appear in either order).

  • relation.  Recognised values are 1 (lessThan), 2 (lessThanOrEqual), 3 (equal), 4 (greaterThanOrEqual), 5 (greaterThan) and 6 (notEqual).

  • which-code.  known or k (the unit-code parameter is taken from the well-known list of alternatives described below) or private or p (the unit-code parameter has semantics specific to an out-of-band agreement such as a profile).

  • unit-code.  If the which-code parameter is known then the recognised values are 1 (character), 2 (word), 3 (sentence), 4 (paragraph), 5 (section), 6 (chapter), 7 (document), 8 (element), 9 (subelement), 10 (elementType) and 11 (byte). If which-code is private then the acceptable values are determined by the profile.

(The numeric values of the relation and well-known unit-code parameters are taken straight from the ASN.1 of the proximity structure in the standard.)

1.1.2. PQF queries

Example 7.1. PQF queries using simple terms

	dylan

	"bob dylan"
       


Example 7.2. PQF boolean operators

	@or "dylan" "zimmerman"

	@and @or dylan zimmerman when

	@and when @or dylan zimmerman
       


Example 7.3. PQF references to result sets

	@set Result-1

	@and @set seta @set setb
       


Example 7.4. Attributes for terms

	@attr 1=4 computer

	@attr 1=4 @attr 4=1 "self portrait"

	@attrset exp1 @attr 1=1 CategoryList

	@attr gils 1=2008 Copenhagen

	@attr 1=/book/title computer
       


Example 7.5. PQF Proximity queries

	@prox 0 3 1 2 k 2 dylan zimmerman
       

Here the parameters 0, 3, 1, 2, k and 2 represent exclusion, distance, ordered, relation, which-code and unit-code, in that order. So:

  • exclusion = 0: the proximity condition must hold

  • distance = 3: the terms must be three units apart

  • ordered = 1: they must occur in the order they are specified

  • relation = 2: lessThanOrEqual (to the distance of 3 units)

  • which-code is "known", so the standard unit-codes are used

  • unit-code = 2: word.

So the whole proximity query means that the words dylan and zimmerman must both occur in the record, in that order, differing in position by three or fewer words (i.e. with two or fewer words between them.) The query would find "Bob Dylan, aka. Robert Zimmerman", but not "Bob Dylan, born as Robert Zimmerman" since the distance in this case is four.


Example 7.6. PQF specification of search term type

	@term string "a UTF-8 string, maybe?"
       


Example 7.7. PQF mixed queries

	@or @and bob dylan @set Result-1

	@attr 4=1 @and @attr 1=1 "bob dylan" @attr 1=4 "slow train coming"

	@and @attr 2=4 @attr gils 1=2038 -114 @attr 2=2 @attr gils 1=2039 -109
       

The last of these examples is a spatial search: in the GILS attribute set, access point 2038 indicates West Bounding Coordinate and 2030 indicates East Bounding Coordinate, so the query is for areas extending from -114 degrees longitude to no more than -109 degrees longitude.


1.2. CCL

Not all users enjoy typing in prefix query structures and numerical attribute values, even in a minimalistic test client. In the library world, the more intuitive Common Command Language - CCL (ISO 8777) has enjoyed some popularity - especially before the widespread availability of graphical interfaces. It is still useful in applications where you for some reason or other need to provide a symbolic language for expressing boolean query structures.

1.2.1. CCL Syntax

The CCL parser obeys the following grammar for the FIND argument. The syntax is annotated using lines prefixed by --.

      CCL-Find ::= CCL-Find Op Elements
                | Elements.

      Op ::= "and" | "or" | "not"
      -- The above means that Elements are separated by boolean operators.

      Elements ::= '(' CCL-Find ')'
                | Set
                | Terms
                | Qualifiers Relation Terms
                | Qualifiers Relation '(' CCL-Find ')'
                | Qualifiers '=' string '-' string
      -- Elements is either a recursive definition, a result set reference, a
      -- list of terms, qualifiers followed by terms, qualifiers followed
      -- by a recursive definition or qualifiers in a range (lower - upper).

      Set ::= 'set' = string
      -- Reference to a result set

      Terms ::= Terms Prox Term
             | Term
      -- Proximity of terms.

      Term ::= Term string
            | string
      -- This basically means that a term may include a blank

      Qualifiers ::= Qualifiers ',' string
                  | string
      -- Qualifiers is a list of strings separated by comma

      Relation ::= '=' | '>=' | '<=' | '<>' | '>' | '<'
      -- Relational operators. This really doesn't follow the ISO8777
      -- standard.

      Prox ::= '%' | '!'
      -- Proximity operator

     

Example 7.8. CCL queries

The following queries are all valid:

       dylan

       "bob dylan"

       dylan or zimmerman

       set=1

       (dylan and bob) or set=1

       righttrunc?

       "notrunc?"

       singlechar#mask
      

Assuming that the qualifiers ti and au and date are defined, we may use:

       ti=self portrait

       au=(bob dylan and slow train coming)

       date>1980 and (ti=((self portrait)))
      

1.2.2. CCL Qualifiers

Qualifiers are used to direct the search to a particular searchable index, such as title (ti) and author indexes (au). The CCL standard itself doesn't specify a particular set of qualifiers, but it does suggest a few short-hand notations. You can customize the CCL parser to support a particular set of qualifiers to reflect the current target profile. Traditionally, a qualifier would map to a particular use-attribute within the BIB-1 attribute set. It is also possible to set other attributes, such as the structure attribute.

A CCL profile is a set of predefined CCL qualifiers that may be read from a file or set in the CCL API. The YAZ client reads its CCL qualifiers from a file named default.bib. There are four types of lines in a CCL profile: qualifier specification, qualifier alias, comments and directives.

1.2.2.1. Qualifier specification

A qualifier specification is of the form:

qualifier-name [attributeset,]type=val [attributeset,]type=val ...

where qualifier-name is the name of the qualifier to be used (e.g. ti), type is attribute type in the attribute set (Bib-1 is used if no attribute set is given) and val is attribute value. The type can be specified as an integer, or as a single-letter: u for use, r for relation, p for position, s for structure,t for truncation, or c for completeness. The attributes for the special qualifier name term are used when no CCL qualifier is given in a query.

Table 7.1. Common Bib-1 attributes

TypeDescription
u=value Use attribute (1). Common use attributes are 1 Personal-name, 4 Title, 7 ISBN, 8 ISSN, 30 Date, 62 Subject, 1003 Author, 1016 Any. Specify value as an integer.
r=value Relation attribute (2). Common values are 1 <, 2 <=, 3 =, 4 >=, 5 >, 6 <>, 100 phonetic, 101 stem, 102 relevance, 103 always matches.
p=value Position attribute (3). Values: 1 first in field, 2 first in any subfield, 3 any position in field.
s=value Structure attribute (4). Values: 1 phrase, 2 word, 3 key, 4 year, 5 date, 6 word list, 100 date (un), 101 name (norm), 102 name (un), 103 structure, 104 urx, 105 free-form-text, 106 document-text, 107 local-number, 108 string, 109 numeric string.
t=value Truncation attribute (5). Values: 1 right, 2 left, 3 left and right, 100 none, 101 process #, 102 regular-1, 103 regular-2, 104 CCL.
c=value Completeness attribute (6). Values: 1 incomplete subfield, 2 complete subfield, 3 complete field.


Refer to Bib-1 Attribute Set(7) or the complete list of Bib-1 attributes

It is also possible to specify non-numeric attribute values, which are used in combination with certain types. The special combinations are:

Table 7.2. Special attribute combos

NameDescription
s=pw The structure is set to either word or phrase depending on the number of tokens in a term (phrase-word).
s=al Each token in the term is ANDed (and-list). This does not set the structure at all.
s=ol Each token in the term is ORed (or-list). This does not set the structure at all.
s=ag Tokens that appears as phrases (with blank in them) gets structure phrase attached (4=1). Tokens that appear to be words gets structure word attached (4=2). Phrases and words are ANDed. This is a variant of s=al and s=pw, with the main difference that words are not split (with operator AND) but instead kept in one RPN token. This facility appeared in YAZ 4.2.38.
s=sl Tokens are split into sub-phrases of all combinations - in order. This facility appeared in YAZ 5.14.0.
r=o Allows ranges and the operators greater-than, less-than, ... equals. This sets Bib-1 relation attribute accordingly (relation ordered). A query construct is only treated as a range if dash is used and that is surrounded by white-space. So -1980 is treated as term "-1980" not <= 1980. If - 1980 is used, however, that is treated as a range.
r=r Similar to r=o but assumes that terms are non-negative (not prefixed with -). Thus, a dash will always be treated as a range. The construct 1980-1990 is treated as a range with r=r but as a single term "1980-1990" with r=o. The special attribute r=r is available in YAZ 2.0.24 or later.
r=omiteq This will omit relation=equals (@attr 2=3) when r=o / r=r is used. This is useful for servers that somehow break when an explicit relation=equals is used. Omitting the relation is usually safe because "equals" is the default behavior. This tweak was added in YAZ version 5.1.2.
t=l Allows term to be left-truncated. If term is of the form ?x, the resulting Type-1 term is x and truncation is left.
t=r Allows term to be right-truncated. If term is of the form x?, the resulting Type-1 term is x and truncation is right.
t=n If term is does not include ?, the truncation attribute is set to none (100).
t=b Allows term to be both left-and-right truncated. If term is of the form ?x?, the resulting term is x and truncation is set to both left and right.
t=x Allows masking anywhere in a term, thus fully supporting # (mask one character) and ? (zero or more of any). If masking is used, truncation is set to 102 (regexp-1 in term) and the term is converted accordingly to a regular expression.
t=z Allows masking anywhere in a term, thus fully supporting # (mask one character) and ? (zero or more of any). If masking is used, truncation is set to 104 (Z39.58 in term) and the term is converted accordingly to Z39.58 masking term - actually the same truncation as CCL itself.


Example 7.9. CCL profile

Consider the following definition:

	ti       u=4 s=1
	au       u=1 s=1
	term     s=105
	ranked   r=102
	date     u=30 r=o
       

ti and au both set structure attribute to phrase (s=1). ti sets the use-attribute to 4. au sets the use-attribute to 1. When no qualifiers are used in the query, the structure-attribute is set to free-form-text (105) (rule for term). The date sets the relation attribute to the relation used in the CCL query and sets the use attribute to 30 (Bib-1 Date).

You can combine attributes. To Search for "ranked title" you can do

	 ti,ranked=knuth computer
	

which will set relation=ranked, use=title, structure=phrase.

Query

	 date > 1980
	

is a valid query. But

	 ti > 1980
	

is invalid.


1.2.2.2. Qualifier alias

A qualifier alias is of the form:

q q1 q2 ..

which declares q to be an alias for q1, q2... such that the CCL query q=x is equivalent to q1=x or q2=x or ....

1.2.2.3. Comments

Lines with white space or lines that begin with character # are treated as comments.

1.2.2.4. Directives

Directive specifications takes the form

@directive value

Table 7.3. CCL directives

NameDescriptionDefault
truncationTruncation character?
maskMasking character. Requires YAZ 4.2.58 or later#
fieldSpecifies how multiple fields are to be combined. There are two modes: or: multiple qualifier fields are ORed, merge: attributes for the qualifier fields are merged and assigned to one term. merge
caseSpecifies if CCL operators and qualifiers should be compared with case sensitivity or not. Specify 1 for case sensitive; 0 for case insensitive.1
andSpecifies token for CCL operator AND.and
orSpecifies token for CCL operator OR.or
notSpecifies token for CCL operator NOT.not
setSpecifies token for CCL operator SET.set

1.2.3. CCL API

All public definitions can be found in the header file ccl.h. A profile identifier is of type CCL_bibset. A profile must be created with the call to the function ccl_qual_mk which returns a profile handle of type CCL_bibset.

To read a file containing qualifier definitions the function ccl_qual_file may be convenient. This function takes an already opened FILE handle pointer as argument along with a CCL_bibset handle.

To parse a simple string with a FIND query use the function

struct ccl_rpn_node *ccl_find_str(CCL_bibset bibset, const char *str,
                                  int *error, int *pos);
     

which takes the CCL profile (bibset) and query (str) as input. Upon successful completion the RPN tree is returned. If an error occurs, such as a syntax error, the integer pointed to by error holds the error code and pos holds the offset inside query string in which the parsing failed.

An English representation of the error may be obtained by calling the ccl_err_msg function. The error codes are listed in ccl.h.

To convert the CCL RPN tree (type struct ccl_rpn_node *) to the Z_RPNQuery of YAZ the function ccl_rpn_query must be used. This function which is part of YAZ is implemented in yaz-ccl.c. After calling this function the CCL RPN tree is probably no longer needed. The ccl_rpn_delete destroys the CCL RPN tree.

A CCL profile may be destroyed by calling the ccl_qual_rm function.

The token names for the CCL operators may be changed by setting the globals (all type char *) ccl_token_and, ccl_token_or, ccl_token_not and ccl_token_set. An operator may have aliases, i.e. there may be more than one name for the operator. To do this, separate each alias with a space character.

1.3. CQL

CQL - Common Query Language - was defined for the SRU protocol. In many ways CQL has a similar syntax to CCL. The objective of CQL is different. Where CCL aims to be an end-user language, CQL is the protocol query language for SRU.

Tip

If you are new to CQL, read the Gentle Introduction.

The CQL parser in YAZ provides the following:

  • It parses and validates a CQL query.

  • It generates a C structure that allows you to convert a CQL query to some other query language, such as SQL.

  • The parser converts a valid CQL query to PQF, thus providing a way to use CQL for both SRU servers and Z39.50 targets at the same time.

  • The parser converts CQL to XCQL. XCQL is an XML representation of CQL. XCQL is part of the SRU specification. However, since SRU supports CQL only, we don't expect XCQL to be widely used. Furthermore, CQL has the advantage over XCQL that it is easy to read.

1.3.1. CQL parsing

A CQL parser is represented by the CQL_parser handle. Its contents should be considered YAZ internal (private).

#include <yaz/cql.h>

typedef struct cql_parser *CQL_parser;

CQL_parser cql_parser_create(void);
void cql_parser_destroy(CQL_parser cp);
      

A parser is created by cql_parser_create and is destroyed by cql_parser_destroy.

To parse a CQL query string, the following function is provided:

int cql_parser_string(CQL_parser cp, const char *str);
      

A CQL query is parsed by the cql_parser_string which takes a query str. If the query was valid (no syntax errors), then zero is returned; otherwise -1 is returned to indicate a syntax error.

int cql_parser_stream(CQL_parser cp,
                      int (*getbyte)(void *client_data),
                      void (*ungetbyte)(int b, void *client_data),
                      void *client_data);

int cql_parser_stdio(CQL_parser cp, FILE *f);
      

The functions cql_parser_stream and cql_parser_stdio parse a CQL query - just like cql_parser_string. The only difference is that the CQL query can be fed to the parser in different ways. The cql_parser_stream uses a generic byte stream as input. The cql_parser_stdio uses a FILE handle which is opened for reading.

1.3.2. CQL tree

If the query string is valid, the CQL parser generates a tree representing the structure of the CQL query.

struct cql_node *cql_parser_result(CQL_parser cp);
      

cql_parser_result returns a pointer to the root node of the resulting tree.

Each node in a CQL tree is represented by a struct cql_node. It is defined as follows:

#define CQL_NODE_ST 1
#define CQL_NODE_BOOL 2
#define CQL_NODE_SORT 3
struct cql_node {
    int which;
    union {
        struct {
            char *index;
	    char *index_uri;
            char *term;
            char *relation;
	    char *relation_uri;
            struct cql_node *modifiers;
        } st;
        struct {
            char *value;
            struct cql_node *left;
            struct cql_node *right;
            struct cql_node *modifiers;
        } boolean;
        struct {
            char *index;
            struct cql_node *next;
            struct cql_node *modifiers;
            struct cql_node *search;
        } sort;
    } u;
};
      

There are three node types: search term (ST), boolean (BOOL) and sortby (SORT). A modifier is treated as a search term too.

The search term node has five members:

  • index: index for search term. If an index is unspecified for a search term, index will be NULL.

  • index_uri: index URI for search term or NULL if none could be resolved for the index.

  • term: the search term itself.

  • relation: relation for search term.

  • relation_uri: relation URI for search term.

  • modifiers: relation modifiers for search term. The modifiers list itself of cql_nodes each of type ST.

The boolean node represents and, or, not + proximity.

  • left and right: left - and right operand respectively.

  • modifiers: proximity arguments.

The sort node represents both the SORTBY clause.

1.3.3. CQL to PQF conversion

Conversion to PQF (and Z39.50 RPN) is tricky by the fact that the resulting RPN depends on the Z39.50 target capabilities (combinations of supported attributes). In addition, the CQL and SRU operates on index prefixes (URI or strings), whereas the RPN uses Object Identifiers for attribute sets.

The CQL library of YAZ defines a cql_transform_t type. It represents a particular mapping between CQL and RPN. This handle is created and destroyed by the functions:

cql_transform_t cql_transform_open_FILE (FILE *f);
cql_transform_t cql_transform_open_fname(const char *fname);
void cql_transform_close(cql_transform_t ct);
     

The first two functions create a transformation handle from either an already open FILE or from a filename respectively.

The handle is destroyed by cql_transform_close in which case no further reference of the handle is allowed.

When a cql_transform_t handle has been created you can convert to RPN.

int cql_transform_buf(cql_transform_t ct,
                      struct cql_node *cn, char *out, int max);
      

This function converts the CQL tree cn using handle ct. For the resulting PQF, you supply a buffer out which must be able to hold at at least max characters.

If conversion failed, cql_transform_buf returns a non-zero SRU error code; otherwise zero is returned (conversion successful). The meanings of the numeric error codes are listed in the SRU specification somewhere (no direct link anymore).

If conversion fails, more information can be obtained by calling

int cql_transform_error(cql_transform_t ct, char **addinfop);
      

This function returns the most recently returned numeric error-code and sets the string-pointer at *addinfop to point to a string containing additional information about the error that occurred: for example, if the error code is 15 ("Illegal or unsupported context set"), the additional information is the name of the requested context set that was not recognised.

The SRU error-codes may be translated into brief human-readable error messages using

const char *cql_strerror(int code);
      

If you wish to be able to produce a PQF result in a different way, there are two alternatives.

void cql_transform_pr(cql_transform_t ct,
                      struct cql_node *cn,
                      void (*pr)(const char *buf, void *client_data),
                      void *client_data);

int cql_transform_FILE(cql_transform_t ct,
                       struct cql_node *cn, FILE *f);
      

The former function produces output to a user-defined output stream. The latter writes the result to an already open FILE.

1.3.4. Specification of CQL to RPN mappings

The file supplied to functions cql_transform_open_FILE, cql_transform_open_fname follows a structure found in many Unix utilities. It consists of mapping specifications - one per line. Lines starting with # are ignored (comments).

Each line is of the form


       CQL pattern =   RPN equivalent
      

An RPN pattern is a simple attribute list. Each attribute pair takes the form:


       [settype=value
      

The attribute set is optional. The type is the attribute type, value the attribute value.

The character * (asterisk) has special meaning when used in the RPN pattern. Each occurrence of * is substituted with the CQL matching name (index, relation, qualifier etc). This facility can be used to copy a CQL name verbatim to the RPN result.

The following CQL patterns are recognized:

index.set.name

This pattern is invoked when a CQL index, such as dc.title is converted. set and name are the context set and index name respectively. Typically, the RPN specifies an equivalent use attribute.

For terms not bound by an index, the pattern index.cql.serverChoice is used. Here, the prefix cql is defined as http://www.loc.gov/zing/cql/cql-indexes/v1.0/. If this pattern is not defined, the mapping will fail.

The pattern, index.set.* is used when no other index pattern is matched.

qualifier.set.name (DEPRECATED)

For backwards compatibility, this is recognised as a synonym of index.set.name

relation.relation

This pattern specifies how a CQL relation is mapped to RPN. The pattern is name of relation operator. Since = is used as separator between CQL pattern and RPN, CQL relations including = cannot be used directly. To avoid a conflict, the names ge, eq, le, must be used for CQL operators, greater-than-or-equal, equal, less-than-or-equal respectively. The RPN pattern is supposed to include a relation attribute.

For terms not bound by a relation, the pattern relation.scr is used. If the pattern is not defined, the mapping will fail.

The special pattern, relation.* is used when no other relation pattern is matched.

relationModifier.mod

This pattern specifies how a CQL relation modifier is mapped to RPN. The RPN pattern is usually a relation attribute.

structure.type

This pattern specifies how a CQL structure is mapped to RPN. Note that this CQL pattern is somewhat similar to CQL pattern relation. The type is a CQL relation.

The pattern, structure.* is used when no other structure pattern is matched. Usually, the RPN equivalent specifies a structure attribute.

position.type

This pattern specifies how the anchor (position) of CQL is mapped to RPN. The type is one of first, any, last, firstAndLast.

The pattern, position.* is used when no other position pattern is matched.

set.prefix

This specification defines a CQL context set for a given prefix. The value on the right hand side is the URI for the set - not RPN. All prefixes used in index patterns must be defined this way.

set

This specification defines a default CQL context set for index names. The value on the right hand side is the URI for the set.

Example 7.10. CQL to RPN mapping file

This simple file defines two context sets, three indexes and three relations, a position pattern and a default structure.

       set.cql  = http://www.loc.gov/zing/cql/context-sets/cql/v1.1/
       set.dc   = http://www.loc.gov/zing/cql/dc-indexes/v1.0/

       index.cql.serverChoice = 1=1016
       index.dc.title         = 1=4
       index.dc.subject       = 1=21

       relation.<             = 2=1
       relation.eq            = 2=3
       relation.scr           = 2=3

       position.any           = 3=3 6=1

       structure.*            = 4=1

      

With the mappings above, the CQL query

        computer
       

is converted to the PQF:

        @attr 1=1016 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 "computer"
       

by rules index.cql.serverChoice, relation.scr, structure.*, position.any.

CQL query

        computer^
       

is rejected, since position.right is undefined.

CQL query

        >my = "http://www.loc.gov/zing/cql/dc-indexes/v1.0/" my.title = x
       

is converted to

        @attr 1=4 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 "x"
       


Example 7.11. CQL to RPN string attributes

In this example we allow any index to be passed to RPN as a use attribute.

       # Identifiers for prefixes used in this file. (index.*)
       set.cql  = info:srw/cql-context-set/1/cql-v1.1
       set.rpn  = http://bogus/rpn
       set      = http://bogus/rpn

       # The default index when none is specified by the query
       index.cql.serverChoice     = 1=any

       index.rpn.*                = 1=*
       relation.eq                = 2=3
       structure.*                = 4=1
       position.any               = 3=3

      

The http://bogus/rpn context set is also the default so we can make queries such as

        title = a
       

which is converted to

        @attr 2=3 @attr 4=1 @attr 3=3 @attr 1=title "a"
       


Example 7.12. CQL to RPN using Bath Profile

The file etc/pqf.properties has mappings from the Bath Profile and Dublin Core to RPN. If YAZ is installed as a package it's usually located in /usr/share/yaz/etc and part of the development package, such as libyaz-dev.


1.3.5. CQL to XCQL conversion

Conversion from CQL to XCQL is trivial and does not require a mapping to be defined. There are three functions to choose from depending on the way you wish to store the resulting output (XML buffer containing XCQL).

int cql_to_xml_buf(struct cql_node *cn, char *out, int max);
void cql_to_xml(struct cql_node *cn,
                void (*pr)(const char *buf, void *client_data),
                void *client_data);
void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
      

Function cql_to_xml_buf converts to XCQL and stores the result in a user-supplied buffer of a given max size.

cql_to_xml writes the result in a user-defined output stream. cql_to_xml_stdio writes to a a file.

1.3.6. PQF to CQL conversion

Conversion from PQF to CQL is offered by the two functions shown below. The former uses a generic stream for result. The latter puts result in a WRBUF (string container).

#include <yaz/rpn2cql.h>

int cql_transform_rpn2cql_stream(cql_transform_t ct,
                                 void (*pr)(const char *buf, void *client_data),
                                 void *client_data,
                                 Z_RPNQuery *q);

int cql_transform_rpn2cql_wrbuf(cql_transform_t ct,
                                WRBUF w,
                                Z_RPNQuery *q);
      

The configuration is the same as used in CQL to PQF conversions.

yaz-5.28.0/doc/index.html0000644000175000017500000006220113572540030012074 00000000000000YAZ User's Guide and Reference

YAZ User's Guide and Reference

Sebastian Hammer

Adam Dickmeiss

Mike Taylor

Heikki Levanto

Dennis Schafroth

5.28.0

Abstract

This document is the programmer's guide and reference to the YAZ package version 5.28.0. YAZ is a compact toolkit that provides access to the Z39.50 and SRU/Solr protocols, as well as a set of higher-level tools for implementing the server and client roles, respectively. The documentation can be used on its own, or as a reference when looking at the example applications provided with the package.


Table of Contents

1. Introduction
1. Reading this Manual
2. The API
2. Compilation and Installation
1. Introduction
2. UNIX/MacOS
2.1. Compiling from source on Unix
2.2. Compiling from source on MacOS
2.3. How to make apps using YAZ on UNIX
3. Windows
3.1. Compiling from Source on Windows
3.2. How to make apps using YAZ on Windows
3.3. Compiling Libxml2 and Libxslt on windows
3. ZOOM
1. Connections
1.1. Z39.50 Protocol behavior
1.2. SRU/Solr Protocol behavior
2. Queries
3. Result sets
3.1. Z39.50 Result-set Sort
3.2. Z39.50 Protocol behavior
3.3. SRU Protocol behavior
4. Records
4.1. Z39.50 Protocol behavior
4.2. SRU/Solr Protocol behavior
5. ZOOM Facets
6. Scan
7. Extended Services
7.1. Item Order
7.2. Record Update
7.3. Database Create
7.4. Database Drop
7.5. Commit Operation
7.6. Protocol behavior
8. Options
9. Query conversions
10. Events
4. Generic server
1. Introduction
2. The Database Frontend
3. The Backend API
4. Your main() Routine
5. The Backend Functions
5.1. Init
5.2. Search and Retrieve
5.3. Delete
5.4. Scan
6. Application Invocation
7. GFS Configuration and Virtual Hosts
5. The Z39.50 ASN.1 Module
1. Introduction
2. Preparing PDUs
3. EXTERNAL Data
4. PDU Contents Table
6. SOAP and SRU
1. Introduction
2. HTTP
3. SOAP Packages
4. SRU
7. Supporting Tools
1. Query Syntax Parsers
1.1. Prefix Query Format
1.1.1. Using Proximity Operators with PQF
1.1.2. PQF queries
1.2. CCL
1.2.1. CCL Syntax
1.2.2. CCL Qualifiers
1.2.3. CCL API
1.3. CQL
1.3.1. CQL parsing
1.3.2. CQL tree
1.3.3. CQL to PQF conversion
1.3.4. Specification of CQL to RPN mappings
1.3.5. CQL to XCQL conversion
1.3.6. PQF to CQL conversion
2. Object Identifiers
2.1. OID database
2.2. Standard OIDs
3. Nibble Memory
4. Log
5. MARC
5.1. TurboMARC
6. Retrieval Facility
6.1. Retrieval XML format
6.2. Retrieval Facility Examples
6.3. API
7. Sorting
7.1. Using the Z39.50 sort service
7.2. Type-7 sort
8. Facets
8. The ODR Module
1. Introduction
2. Using ODR
2.1. ODR Streams
2.2. Memory Management
2.3. Encoding and Decoding Data
2.4. Printing
2.5. Diagnostics
2.6. Summary and Synopsis
3. Programming with ODR
3.1. The Primitive ASN.1 Types
3.1.1. INTEGER
3.1.2. BOOLEAN
3.1.3. REAL
3.1.4. NULL
3.1.5. OCTET STRING
3.1.6. BIT STRING
3.1.7. OBJECT IDENTIFIER
3.2. Tagging Primitive Types
3.3. Constructed Types
3.4. Tagging Constructed Types
3.4.1. Implicit Tagging
3.4.2. Explicit Tagging
3.5. SEQUENCE OF
3.6. CHOICE Types
4. Debugging
9. The COMSTACK Module
1. Synopsis (blocking mode)
2. Introduction
3. Common Functions
3.1. Managing Endpoints
3.2. Data Exchange
4. Client Side
5. Server Side
6. Addresses
7. SSL
8. Diagnostics
9. Summary and Synopsis
10. Future Directions
I. Reference
yaz-client — Z39.50/SRU client for implementors
yaz-ztest — Z39.50/SRU Test Server
yaz-config — Script to get information about YAZ.
yaz — Z39.50 toolkit.
zoomsh — ZOOM shell
yaz-asncomp — YAZ ASN.1 compiler
yaz-marcdump — MARC record dump utility
yaz-iconv — YAZ Character set conversion utility
yaz-log — Log handling in all yaz-based programs
yaz-illclient — ILL client
yaz-icu — YAZ ICU utility
yaz-url — YAZ URL fetch utility
Bib-1 Attribute Set — Bib-1 Attribute Set
yaz-json-parse — YAZ JSON parser
yaz-record-iconv — YAZ Record Conversion Utility
A. List of Object Identifiers
B. Bib-1 diagnostics
C. SRU diagnostics
D. License
1. Index Data Copyright
E. About Index Data
F. Credits

List of Figures

1.1. YAZ layers
yaz-5.28.0/doc/odr.html0000644000175000017500000001374713572540030011564 00000000000000Chapter 8. The ODR Module

Chapter 8. The ODR Module

1. Introduction

ODR is the BER-encoding/decoding subsystem of YAZ. Care has been taken to isolate ODR from the rest of the package - specifically from the transport interface. ODR may be used in any context where basic ASN.1/BER representations are used.

If you are only interested in writing a Z39.50 implementation based on the PDUs that are already provided with YAZ, you only need to concern yourself with the section on managing ODR streams (Section 2, “Using ODR”). Only if you need to implement ASN.1 beyond that which has been provided, should you worry about the second half of the documentation (Section 3, “Programming with ODR”). If you use one of the higher-level interfaces, you can skip this section entirely.

This is important, so we'll repeat it for emphasis: You do not need to read Section 3, “Programming with ODR” to implement Z39.50 with YAZ.

If you need a part of the protocol that isn't already in YAZ, you should contact the authors before going to work on it yourself: We might already be working on it. Conversely, if you implement a useful part of the protocol before us, we'd be happy to include it in a future release.

yaz-5.28.0/doc/installation.unix.html0000644000175000017500000005037713572540030014463 000000000000002. UNIX/MacOS

2. UNIX/MacOS

We provide Debian GNU/Linux (i386 and amd64), Ubuntu (i386 and amd64) and CentOS (amd64 only) packages for YAZ. You should be able to create packages for other CPUs by building them from the source package.

YAZ is also part of several packages repositories. Some of them are

2.1. Compiling from source on Unix

You can choose to compile YAZ from official tar releases from http://ftp.indexdata.com/pub/yaz/ or clone it via Github https://github.com/indexdata/yaz.git.

If you wish to use character set conversion facilities in YAZ or if you are compiling YAZ for use with Zebra, it is a good idea to ensure that the iconv library is installed. Some Unixes today already have it - if not, we suggest GNU libiconv.

YAZ 3.0.16 and later includes a wrapper for the ICU (International Components for Unicode). In order to use this, the developer version of the ICU library must be available. ICU support is recommended for applications such as Pazpar2 and Zebra.

The libxslt, libxml2 librararies are required if YAZ is to support SRU/Solr. These libraries are very portable and should compile out-of-the box on virtually all Unix platforms. It is available in binary forms for Linux and others.

The GNU tools Autoconf, Automake and Libtool are used to generate Makefiles and configure YAZ for the system. You do not need these tools unless you're using the Git version of YAZ.

The CQL parser for YAZ is built using GNU Bison. This tool is only needed if you're using the Git version of YAZ.

YAZ includes a tiny ASN.1 compiler. This compiler is written in Tcl. But as for Bison you do not need it unless you're using Git version of YAZ or you're using the compiler to build your own codecs for private ASN.1.

If you are checking out from Git, run:

      ./buildconf.sh
     

This will create the configure script and Makefiles.

The next step is always:

     ./configure
    

The configure script attempts to use use the C compiler specified by the CC environment variable. If not set, GNU C will be used if it is available. The CFLAGS environment variable holds options to be passed to the C compiler. If you're using Bourne-compatible shell, you may pass something like this to use a particular C compiler with optimization enabled:

     CC=/opt/ccs/bin/cc CFLAGS=-O ./configure
    

To customize YAZ, the configure script also accepts a set of options. The most important are:

--prefix=prefix

Specifies installation prefix for YAZ. This is only needed if you run make install later to perform a "system" installation. The prefix is /usr/local if not specified.

--enable-tcpd

The front end server will be built using Wietse's TCP wrapper library. It allows you to allow/deny clients depending on IP number. The TCP wrapper library is often used in GNU/Linux and BSD distributions. See hosts_access(5) and tcpd(8).

--enable-threads

YAZ will be built using POSIX threads. Specifically, _REENTRANT will be defined during compilation.

--disable-shared

The make process will not create shared libraries (also known as shared objects .so). By default, shared libraries are created - equivalent to --enable-shared.

--disable-shared

The make process will not create static libraries (.a). By default, static libraries are created - equivalent to --enable-static.

--with-iconv[=prefix]

Compile YAZ with iconv library in directory prefix. By default configure will search for iconv on the system. Use this option if it doesn't find iconv. Alternatively, --without-iconv, can be used to force YAZ not to use iconv.

--with-xslt[=prefix]

Compile YAZ with libxslt in directory prefix. Use this option if you want XSLT and XML support. By default, configure will search for libxslt on the system. Use this option if libxslt is not found automatically. Alternatively, --without-xslt, can be used to force YAZ not to use libxslt.

--with-xml2[=prefix]

Compile YAZ with libxml2 in directory prefix. Use this option if you want YAZ to use XML and support SRU/Solr. By default, configure will search for libxml2 on the system. Use this option if libxml2 is not found automatically. Alternatively, --without-xml2, can be used to force YAZ not to use libxml2.

Note that option --with-xslt also enables libxml2.

--with-gnutls[=prefix]

YAZ will be linked with the GNU TLS libraries and an SSL COMSTACK will be provided. By default configure enables SSL support for YAZ if the GNU TLS development libraries are found on the system.

--with-icu[=prefix]

YAZ will be linked the ICU library in the prefix if given. If prefix is not given, the libraries exposed by the script icu-config will be used if found.

--with-memcached

YAZ will be linked with libMemcached to allow for result-set caching for ZOOM. The prefix can not be given. Note that 0.40 of libmemcached is required.

--with-redis

YAZ will be linked with the hiredis C library to allow for result-set caching for ZOOM on a redis server. The prefix can not be given.

When configured, build the software by typing:

      make
     

The following files are generated by the make process:

src/libyaz.la

Main YAZ library. This is no ordinary library. It's a Libtool archive. By default, YAZ creates a static library in lib/.libs/libyaz.a.

src/libyaz_server.la

Generic Frontend server. This is an add-on for libyaz.la. Code in this library uses POSIX threads functions - if POSIX threads are available on the platform.

src/libyaz_icu.la

Functions that wrap the ICU library.

ztest/yaz-ztest

Test Z39.50 server.

client/yaz-client

Z39.50 client for testing the protocol. See chapter YAZ client for more information.

util/yaz-config

A Bourne-shell script, generated by configure, that specifies how external applications should compile - and link with YAZ.

util/yaz-asncomp

The ASN.1 compiler for YAZ. Requires the Tcl Shell, tclsh, in PATH to operate.

util/yaz-iconv

This program converts data in one character set to another. This command exercises the YAZ character set conversion API.

util/yaz-marcdump

This program parses ISO2709 encoded MARC records and prints them in line-format or XML.

util/yaz-icu

This program exposes the ICU wrapper library if that is enabled for YAZ. Only if ICU is available this program is useful.

util/yaz-url

This program is a simple HTTP page fetcher ala wget or curl.

zoom/zoomsh

A simple shell implemented on top of the ZOOM functions. The shell is a command line application that allows you to enter simple commands to perform ZOOM operations.

zoom/zoomtst1, zoom/zoomtst2, ..

Several small applications that demonstrate the ZOOM API.

If you wish to install YAZ in system directories /usr/local/bin, /usr/local/lib .. etc, you can type:

     make install
    

You probably need to have root access in order to perform this. You must specify the --prefix option for configure if you wish to install YAZ in other directories than the default /usr/local/.

If you wish to perform an un-installation of YAZ, use:

     make uninstall
    

This will only work if you haven't reconfigured YAZ (and therefore changed installation prefix). Note that uninstall will not remove directories created by make install, e.g. /usr/local/include/yaz.

2.2. Compiling from source on MacOS

Compiling from source on MacOSX requires libxml2. This can be installed with Homebrew, for instance:

         brew install libxml2
       

Review the Caveats section (brew info libxml2) for the LDFLAGS, CPPFLAGS, and PKG_CONFIG_PATH environment variables before executing the ./compile command. For instance:

         export LDFLAGS="-L/usr/local/opt/libxml2/lib"
         export CPPFLAGS="-I/usr/local/opt/libxml2/include"
         export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig"
         ./configure
         make
       

2.3. How to make apps using YAZ on UNIX

This section describes how to compile - and link your own applications using the YAZ toolkit. If you're used to Makefiles this shouldn't be hard. As for other libraries you have used before, you need to set a proper include path for your C/C++ compiler and specify the location of YAZ libraries. You can do it by hand, but generally we suggest you use the yaz-config that is generated by configure. This is especially important if you're using the threaded version of YAZ which require you to pass more options to your linker/compiler.

The yaz-config script accepts command line options that makes the yaz-config script print options that you should use in your make process. The most important ones are: --cflags, --libs which prints C compiler flags, and linker flags respectively.

A small and complete Makefile for a C application consisting of one source file, myprog.c, may look like this:

      YAZCONFIG=/usr/local/bin/yaz-config
      CFLAGS=`$(YAZCONFIG) --cflags`
      LIBS=`$(YAZCONFIG) --libs`
      myprog: myprog.o
         $(CC) $(CFLAGS) -o myprog myprog.o $(LIBS)
      

The CFLAGS variable consists of a C compiler directive that will set the include path to the parent directory of yaz. That is, if YAZ header files were installed in /usr/local/include/yaz, then include path is set to /usr/local/include. Therefore, in your applications you should use

      #include <yaz/proto.h>
     

and not

      #include <proto.h>
     

For Libtool users, the yaz-config script provides a different variant of option --libs, called --lalibs that returns the name of the Libtool archive(s) for YAZ rather than the ordinary ones.

For applications using the threaded version of YAZ, specify threads after the other options. When threads is given, more flags and linker flags will be printed by yaz-config. If our previous example was using threads, you'd have to modify the lines that set CFLAGS and LIBS as follows:

      CFLAGS=`$(YAZCONFIG) --cflags threads`
      LIBS=`$(YAZCONFIG) --libs threads`
     

There is no need specify POSIX thread libraries in your Makefile. The LIBS variable includes that as well.

yaz-5.28.0/doc/comstack.html0000644000175000017500000001076313572540030012577 00000000000000Chapter 9. The COMSTACK Module

Chapter 9. The COMSTACK Module

1. Synopsis (blocking mode)

    COMSTACK stack;
    char *buf = 0;
    int size = 0, length_incoming;
    char server_address_str[] = "localhost:9999";
    void *server_address_ip;
    int status;

    char *protocol_package = "GET / HTTP/1.0\r\n\r\n";
    int protocol_package_length = strlen(protocol_package);

    stack = cs_create(tcpip_type, 1, PROTO_HTTP);
    if (!stack) {
        perror("cs_create");  /* use perror() here since we have no stack yet */
        return -1;
    }

    server_address_ip = cs_straddr(stack, server_address_str);
    if (!server_address_ip) {
        fprintf(stderr, "cs_straddr: address could not be resolved\n");
        return -1;
    }

    status = cs_connect(stack, server_address_ip);
    if (status) {
        fprintf(stderr, "cs_connect: %s\n", cs_strerror(stack));
        return -1;
    }

    status = cs_rcvconnect(stack);
    if (status) {
        fprintf(stderr, "cs_rcvconnect: %s\n", cs_strerror(stack));
        return -1;
    }

    status = cs_put(stack, protocol_package, protocol_package_length);
    if (status) {
        fprintf(stderr, "cs_put: %s\n", cs_strerror(stack));
        return -1;
    }

    /* Now get a response */
    length_incoming = cs_get(stack, &buf, &size);
    if (!length_incoming) {
        fprintf(stderr, "Connection closed\n");
        return -1;
    } else if (length_incoming < 0) {
        fprintf(stderr, "cs_get: %s\n", cs_strerror(stack));
        return -1;
    }

    /* Print result */
    fwrite(buf, length_incoming, 1, stdout);

    /* clean up */
    cs_close(stack);
    if (buf)
        xfree(buf);
    return 0;

   
yaz-5.28.0/doc/yaz-marcdump.html0000644000175000017500000002114413572540030013377 00000000000000yaz-marcdump

Name

yaz-marcdump — MARC record dump utility

Synopsis

yaz-marcdump [-i format] [-o format] [-f from] [-t to] [-l spec] [-c cfile] [-s prefix] [-C size] [-n] [-p] [-v] [-V] [file...]

DESCRIPTION

yaz-marcdump reads MARC records from one or more files. It parses each record and supports output in line-format, ISO2709, MARCXML, MARC-in-JSON, MarcXchange as well as Hex output.

This utility parses records ISO2709(raw MARC), line format, MARC-in-JSON format as well as XML if that is structured as MARCXML/MarcXchange.

MARC-in-JSON encoding/decoding is supported in YAZ 5.0.5 and later.

Note

As of YAZ 2.1.18, OAI-MARC is no longer supported. OAI-MARC is deprecated. Use MARCXML instead.

By default, each record is written to standard output in a line format with newline for each field, $x for each subfield x. The output format may be changed with option -o,

yaz-marcdump can also be requested to perform character set conversion of each record.

OPTIONS

-i format

Specifies input format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), turbomarc (Turbo MARC), or json (MARC-in-JSON).

-o format

Specifies output format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), turbomarc (Turbo MARC), or json (MARC-in-JSON).

-f from

Specify the character set of the input MARC record. Should be used in conjunction with option -t. Refer to the yaz-iconv man page for supported character sets.

-t to

Specify the character set of the output. Should be used in conjunction with option -f. Refer to the yaz-iconv man page for supported character sets.

-l leaderspec

Specify a simple modification string for MARC leader. The leaderspec is a list of pos=value pairs, where pos is an integer offset (0 - 23) for leader. Value is either a quoted string or an integer (character value in decimal). Pairs are comma separated. For example, to set leader at offset 9 to a, use 9='a'.

-s prefix

Writes a chunk of records to a separate file with prefix given, i.e. splits a record batch into files with only at most "chunk" ISO2709 records per file. By default chunk is 1 (one record per file). See option -C.

-C chunksize

Specifies chunk size; to be used conjunction with option -s.

-p

Makes yaz-marcdump print record number and input file offset of each record read.

-n

MARC output is omitted so that MARC input is only checked.

-v

Writes more information about the parsing process. Useful if you have ill-formatted ISO2709 records as input.

-V

Prints YAZ version.

EXAMPLES

The following command converts MARC21/USMARC in MARC-8 encoding to MARC21/USMARC in UTF-8 encoding. Leader offset 9 is set to 'a'. Both input and output records are ISO2709 encoded.

    yaz-marcdump -f MARC-8 -t UTF-8 -o marc -l 9=97 marc21.raw >marc21.utf8.raw
   

The same records may be converted to MARCXML instead in UTF-8:

    yaz-marcdump -f MARC-8 -t UTF-8 -o marcxml marc21.raw >marcxml.xml
   

Turbo MARC is a compact XML notation with same semantics as MARCXML, but which allows for faster processing via XSLT. In order to generate Turbo MARC records encoded in UTF-8 from MARC21 (ISO), one could use:

    yaz-marcdump -f MARC8 -t UTF8 -o turbomarc -i marc marc21.raw >out.xml
   

FILES

prefix/bin/yaz-marcdump

prefix/include/yaz/marcdisp.h

SEE ALSO

yaz(7)

yaz-iconv(1)

yaz-5.28.0/doc/server.html0000644000175000017500000001213213572540030012271 00000000000000Chapter 4. Generic server

Chapter 4. Generic server

1. Introduction

If you aren't into documentation, a good way to learn how the back end interface works is to look at the backend.h file. Then, look at the small dummy-server in ztest/ztest.c. The backend.h file also makes a good reference, once you've chewed your way through the prose of this file.

If you have a database system that you would like to make available by means of Z39.50 or SRU, YAZ basically offers two options. You can use the APIs provided by the Z39.50 ASN.1, ODR, and COMSTACK modules to create and decode PDUs, and exchange them with a client. Using this low-level interface gives you access to all fields and options of the protocol, and you can construct your server as close to your existing database as you like. It is also a fairly involved process, requiring you to set up an event-handling mechanism, protocol state machine, etc. To simplify server implementation, we have implemented a compact and simple, but reasonably full-functioned server-frontend that will handle most of the protocol mechanics, while leaving you to concentrate on your database interface.

Note

The backend interface was designed in anticipation of a specific integration task, while still attempting to achieve some degree of generality. We realize fully that there are points where the interface can be improved significantly. If you have specific functions or parameters that you think could be useful, send us a mail (or better, sign on to the mailing list referred to in the top-level README file). We will try to fit good suggestions into future releases, to the extent that it can be done without requiring too many structural changes in existing applications.

Note

The YAZ server does not support XCQL.

yaz-5.28.0/doc/soap.http.html0000644000175000017500000000470013572540030012705 000000000000002. HTTP

2. HTTP

YAZ only offers HTTP as transport carrier for SOAP, but it is relatively easy to change that.

The following definition of Z_GDU (Generic Data Unit) allows for both HTTP and Z39.50 in one packet.

#include <yaz/zgdu.h>

#define Z_GDU_Z3950         1
#define Z_GDU_HTTP_Request  2
#define Z_GDU_HTTP_Response 3
typedef struct {
  int which;
  union {
    Z_APDU *z3950;
    Z_HTTP_Request *HTTP_Request;
    Z_HTTP_Response *HTTP_Response;
  } u;
} Z_GDU ;
   

The corresponding Z_GDU encoder/decoder is z_GDU. The z3950 is any of the known BER encoded Z39.50 APDUs. HTTP_Request and HTTP_Response is the HTTP Request and Response respectively.

yaz-5.28.0/doc/zoom.extendedservices.html0000644000175000017500000004526013572540030015322 000000000000007. Extended Services

7. Extended Services

ZOOM offers an interface to a subset of the Z39.50 extended services as well as a few privately defined ones:

To create an extended service operation, a ZOOM_package must be created. The operation is a five step operation. The package is created, package is configured by means of options, the package is sent, result is inspected (by means of options), the package is destroyed.

    ZOOM_package ZOOM_connection_package(ZOOM_connection c,
                                         ZOOM_options options);

    const char *ZOOM_package_option_get(ZOOM_package p,
                                        const char *key);
    void ZOOM_package_option_set(ZOOM_package p, const char *key,
                                 const char *val);
    void ZOOM_package_send(ZOOM_package p, const char *type);

    void ZOOM_package_destroy(ZOOM_package p);
   

The ZOOM_connection_package creates a package for the connection given using the options specified.

Functions ZOOM_package_option_get and ZOOM_package_option_set gets and sets options.

ZOOM_package_send sends the package the via connection specified in ZOOM_connection_package. The type specifies the actual extended service package type to be sent.

Table 3.6. Extended Service Type

TypeDescription
itemorderItem Order
updateRecord Update
createDatabase Create
dropDatabase Drop
commitCommit Operation

Table 3.7. Extended Service Common Options

OptionDescriptionDefault
package-nameExtended Service Request package name. Must be specified as part of a request.none
user-idUser ID of Extended Service Package. Is a request option.none
function Function of package - one of create, delete, modify. Is a request option. create
waitAction Wait action for package. Possible values: wait, waitIfPossible, dontWait or dontReturnPackage. waitIfPossible
operationStatus Read after response. One of: done, accepted or failure. Inspect with ZOOM_pacakage_option_get. none
targetReference Target Reference. This is part of the response as returned by the target. Read it after a successful operation. Inspect with ZOOM_pacakage_option_get. none
taskStatus Read after response: One of: pending, active, complete, aborted. none
esError Read after response: is set to diagnostic code for response. none
esAddinfo Read after response: is set to additional info for response. none

7.1. Item Order

For Item Order, type must be set to itemorder in ZOOM_package_send.

Table 3.8. Item Order Options

OptionDescriptionDefault
contact-nameILL contact namenone
contact-phoneILL contact phonenone
contact-emailILL contact emailnone
itemorder-setnameName of result set for recorddefault
itemorder-itemPosition for item (record) requested. An integer1

There are two variants of item order: ILL-variant and XML document variant. In order to use the XML variant the setting doc must hold the XML item order document. If that setting is unset, the ILL-variant is used.

Table 3.9. ILL Request Options

Option
protocol-version-num
transaction-id,initial-requester-id,person-or-institution-symbol,person
transaction-id,initial-requester-id,person-or-institution-symbol,institution
transaction-id,initial-requester-id,name-of-person-or-institution,name-of-person
transaction-id,initial-requester-id,name-of-person-or-institution,name-of-institution
transaction-id,transaction-group-qualifier
transaction-id,transaction-qualifier
transaction-id,sub-transaction-qualifier
service-date-time,this,date
service-date-time,this,time
service-date-time,original,date
service-date-time,original,time
requester-id,person-or-institution-symbol,person
requester-id,person-or-institution-symbol,institution
requester-id,name-of-person-or-institution,name-of-person
requester-id,name-of-person-or-institution,name-of-institution
responder-id,person-or-institution-symbol,person
responder-id,person-or-institution-symbol,institution
responder-id,name-of-person-or-institution,name-of-person
responder-id,name-of-person-or-institution,name-of-institution
transaction-type
delivery-address,postal-address,name-of-person-or-institution,name-of-person
delivery-address,postal-address,name-of-person-or-institution,name-of-institution
delivery-address,postal-address,extended-postal-delivery-address
delivery-address,postal-address,street-and-number
delivery-address,postal-address,post-office-box
delivery-address,postal-address,city
delivery-address,postal-address,region
delivery-address,postal-address,country
delivery-address,postal-address,postal-code
delivery-address,electronic-address,telecom-service-identifier
delivery-address,electronic-address,telecom-service-addreess
billing-address,postal-address,name-of-person-or-institution,name-of-person
billing-address,postal-address,name-of-person-or-institution,name-of-institution
billing-address,postal-address,extended-postal-delivery-address
billing-address,postal-address,street-and-number
billing-address,postal-address,post-office-box
billing-address,postal-address,city
billing-address,postal-address,region
billing-address,postal-address,country
billing-address,postal-address,postal-code
billing-address,electronic-address,telecom-service-identifier
billing-address,electronic-address,telecom-service-addreess
ill-service-type
requester-optional-messages,can-send-RECEIVED
requester-optional-messages,can-send-RETURNED
requester-optional-messages,requester-SHIPPED
requester-optional-messages,requester-CHECKED-IN
search-type,level-of-service
search-type,need-before-date
search-type,expiry-date
search-type,expiry-flag
place-on-hold
client-id,client-name
client-id,client-status
client-id,client-identifier
item-id,item-type
item-id,call-number
item-id,author
item-id,title
item-id,sub-title
item-id,sponsoring-body
item-id,place-of-publication
item-id,publisher
item-id,series-title-number
item-id,volume-issue
item-id,edition
item-id,publication-date
item-id,publication-date-of-component
item-id,author-of-article
item-id,title-of-article
item-id,pagination
item-id,ISBN
item-id,ISSN
item-id,additional-no-letters
item-id,verification-reference-source
copyright-complicance
retry-flag
forward-flag
requester-note
forward-note

7.2. Record Update

For Record Update, type must be set to update in ZOOM_package_send.

Table 3.10. Record Update Options

OptionDescriptionDefault
action The update action. One of specialUpdate, recordInsert, recordReplace, recordDelete, elementUpdate. specialUpdate (recordInsert for updateVersion=1 which does not support specialUpdate)
recordIdOpaqueOpaque Record IDnone
recordIdNumberRecord ID numbernone
recordIdStringRecord ID stringnone
recordThe record itselfnone
recordOpaqueSpecifies an opaque record which is encoded as an ASN.1 ANY type with the OID as given by option syntax (see below). Option recordOpaque is an alternative to record - and record option (above) is ignored if recordOpaque is set. This option is only available in YAZ 3.0.35 and later, and is meant to facilitate Updates with servers from OCLC. none
syntaxThe record syntax (transfer syntax). Is a string that is a known record syntax. no syntax
databaseNameDatabase from connection objectDefault
correlationInfo.noteCorrelation Info Note (string)none
correlationInfo.idCorrelation Info ID (integer)none
elementSetNameElement Set for Recordnone
updateVersionRecord Update version which holds one of the values 1, 2 or 3. Each version has a distinct OID: 1.2.840.10003.9.5 (first version) , 1.2.840.10003.9.5.1 (second version) and 1.2.840.10003.9.5.1.1 (third and newest version). 3

7.3. Database Create

For Database Create, type must be set to create in ZOOM_package_send.

Table 3.11. Database Create Options

OptionDescriptionDefault
databaseNameDatabase from connection objectDefault

7.4. Database Drop

For Database Drop, type must be set to drop in ZOOM_package_send.

Table 3.12. Database Drop Options

OptionDescriptionDefault
databaseNameDatabase from connection objectDefault

7.5. Commit Operation

For Commit, type must be set to commit in ZOOM_package_send.

7.6. Protocol behavior

All the extended services are Z39.50-only.

Note

The database create, drop, and commit services are privately defined operations. Refer to esadmin.asn in YAZ for the ASN.1 definitions.

yaz-5.28.0/doc/tools.retrieval.html0000644000175000017500000004630213572540030014125 000000000000006. Retrieval Facility

6. Retrieval Facility

YAZ version 2.1.20 or later includes a Retrieval facility tool which allows a SRU/Z39.50 to describe itself and perform record conversions. The idea is the following:

  • An SRU/Z39.50 client sends a retrieval request which includes a combination of the following parameters: syntax (format), schema (or element set name).

  • The retrieval facility is invoked with parameters in a server/proxy. The retrieval facility matches the parameters a set of "supported" retrieval types. If there is no match, the retrieval signals an error (syntax and / or schema not supported).

  • For a successful match, the backend is invoked with the same or altered retrieval parameters (syntax, schema). If a record is received from the backend, it is converted to the frontend name / syntax.

  • The resulting record is sent back the client and tagged with the frontend syntax / schema.

The Retrieval facility is driven by an XML configuration. The configuration is neither Z39.50 ZeeRex or SRU ZeeRex. But it should be easy to generate both of them from the XML configuration. (Unfortunately the two versions of ZeeRex differ substantially in this regard.)

6.1. Retrieval XML format

All elements should be covered by namespace http://indexdata.com/yaz . The root element node must be retrievalinfo.

The retrievalinfo must include one or more retrieval elements. Each retrieval defines specific combination of syntax, name and identifier supported by this retrieval service.

The retrieval element may include any of the following attributes:

syntax (REQUIRED)

Defines the record syntax. Possible values is any of the names defined in YAZ' OID database or a raw OID in (n.n ... n).

name (OPTIONAL)

Defines the name of the retrieval format. This can be any string. For SRU, the value is equivalent to schema (short-hand); for Z39.50 it's equivalent to simple element set name. For YAZ 3.0.24 and later this name may be specified as a glob expression with operators * and ?.

identifier (OPTIONAL)

Defines the URI schema name of the retrieval format. This can be any string. For SRU, the value is equivalent to URI schema. For Z39.50, there is no equivalent.

The retrieval may include one backend element. If a backend element is given, it specifies how the records are retrieved by some backend and how the records are converted from the backend to the "frontend".

The attributes, name and syntax may be specified for the backend element. The semantics of these attributes is equivalent to those for the retrieval. However, these values are passed to the "backend".

The backend element may include one or more conversion instructions (as children elements). The supported conversions are:

marc

The marc element specifies a conversion to - and from ISO2709 encoded MARC and MARCXML/MarcXchange. The following attributes may be specified:

inputformat (REQUIRED)

Format of input. Supported values are marc (for ISO2709), xml (MARCXML/MarcXchange) and json (MARC-in-JSON).

outputformat (REQUIRED)

Format of output. Supported values are line (MARC line format); marcxml (for MARCXML), marc (ISO2709), turbomarc, marcxchange (for MarcXchange), or json (MARC-in-JSON ).

inputcharset (OPTIONAL)

Encoding of input. For XML input formats, this need not be given, but for ISO2709 based input formats, this should be set to the encoding used. For MARC21 records, a common inputcharset value would be marc-8.

outputcharset (OPTIONAL)

Encoding of output. If outputformat is XML based, it is strongly recommended to use utf-8.

select

The select selects one or more text nodes and decodes them as XML. The following attributes may be specified:

path (REQUIRED)

X-Path expression for selecting text nodes.

This conversion is available in YAZ 5.8.0 and later.

solrmarc

The solrmarc decodes solrmarc records. It assumes that the input is pure solrmarc text (no escaping) and will convert all sequences of the form #XX; to a single character of the hexadecimal value as given by XX. The output, presumably, is a valid ISO2709 buffer.

This conversion is available in YAZ 5.0.21 and later.

xslt

The xslt element specifies a conversion via XSLT. The following attributes may be specified:

stylesheet (REQUIRED)

Stylesheet file.

In addition, the element can be configured as follows:

param (OPTIONAL)

A param tag configures a parameter to be passed to the XSLT stylesheet. Multiple param tags may be defined.

rdf-lookup

The rdf-lookup element looks up BIBFRAME elements in some suitable service, for example http://id.loc.gov/authorities/names and replaces the URIs for specified elements with URIs it finds at that service. Its configuration consists of

debug (OPTIONAL)

Attribute to the rdf-lookup tag to enable debug output. A value of "1" makes the filter to add a XML comment next to each key it tried to look up, showing the URL, the result, and timing. This is useful for debugging the configuration. The default is not to add any comments.

timeout (OPTIONAL)

Attribute of the rdf-lookup tag which defines timeout in seconds for the HTTP based rdf-lookup.

namespace (OPTIONAL)

A namespace tag declares a namespace to be used in the xpath below. The tag requires two attributes: prefix and href.

lookup (REQUIRED)

A section that defines one tag to be looked up, for example an author.The xpath attribute (REQUIRED) specifies the path to the element(s).

key (REQUIRED)

A tag withing the lookup tag specifies the value to be used in the lookup, for example a name or an ID. It is a relative Xpath starting from the tag specified in the lookup.

server (OPTIONAL)

Specifies the URL for server to use for the lookup. A %s is replaced by the key value to be looked up. If not specified, defaults to the same as the previous lookup section, or lacking one, to http://id.loc.gov/authorities/names/label/%s . The method attribute can be used to specify the HTTP method to be used in this lookup. The default is GET, and the useful alternative is HEAD.

See the example below.

This conversion is available in YAZ 5.19.0 and later.

6.2. Retrieval Facility Examples

Example 7.19. MARC21 backend

A typical way to use the retrieval facility is to enable XML for servers that only supports ISO2709 encoded MARC21 records.

     <retrievalinfo>
       <retrieval syntax="usmarc" name="F"/>
       <retrieval syntax="usmarc" name="B"/>
       <retrieval syntax="xml" name="marcxml"
		  identifier="info:srw/schema/1/marcxml-v1.1">
         <backend syntax="usmarc" name="F">
	   <marc inputformat="marc" outputformat="marcxml"
		 inputcharset="marc-8"/>
	 </backend>
       </retrieval>
       <retrieval syntax="xml" name="dc">
         <backend syntax="usmarc" name="F">
	   <marc inputformat="marc" outputformat="marcxml"
		 inputcharset="marc-8"/>
           <xslt stylesheet="MARC21slim2DC.xsl"/>
	 </backend>
       </retrieval>
     </retrievalinfo>

     

This means that our frontend supports:

  • MARC21 F(ull) records.

  • MARC21 B(rief) records.

  • MARCXML records.

  • Dublin core records.


Example 7.20. MARCXML backend

SRW/SRU and Solr backends return records in XML. If they return MARCXML or MarcXchange, the retrieval module can convert those into ISO2709 formats, most commonly USMARC (AKA MARC21). In this example, the backend returns MARCXML for schema="marcxml".

     <retrievalinfo>
       <retrieval syntax="usmarc">
         <backend syntax="xml" name="marcxml">
	   <marc inputformat="xml" outputformat="marc"
		 outputcharset="marc-8"/>
	 </backend>
       </retrieval>
       <retrieval syntax="xml" name="marcxml"
		  identifier="info:srw/schema/1/marcxml-v1.1"/>
       <retrieval syntax="xml" name="dc">
         <backend syntax="xml" name="marcxml">
           <xslt stylesheet="MARC21slim2DC.xsl"/>
	 </backend>
       </retrieval>
     </retrievalinfo>

     

This means that our frontend supports:

  • MARC21 records (any element set name) in MARC-8 encoding.

  • MARCXML records for element-set=marcxml

  • Dublin core records for element-set=dc.


Example 7.21. RDF-lookup backend

This is a minimal example of the backend configuration for the rdf-lookup. It could well be used with some heavy xslt transforms that make BIBFRAME records out of MarxXml.

        <backend syntax="xml" name="rdf-lookup">
          <rdf-lookup debug="1" timeout="10">
            <namespace prefix="bf" href="http://id.loc.gov/ontologies/bibframe/" />
            <namespace prefix="bflc" href="http://id.loc.gov/ontologies/bibframe/lc-extensions/"/>
            <lookup xpath="//bf:contribution/bf:Contribution/bf:agent/bf:Agent">
              <key field="bflc:name00MatchKey"/>
              <key field="bflc:name01MatchKey"/>
              <key field="bflc:name11MatchKey"/>
              <server url="http://id.loc.gov/authorities/names/label/%s" method="HEAD"/>
            </lookup>
          </rdf-lookup>
        </backend>

     

The debug=1 attribute tells the filter to add XML comments to the key nodes that indicate what lookup it tried to do, how it went, and how long it took.

The namespace prefix bf: is defined in the namespace tags. These namespaces are used in the xpath expressions in the lookup sections.

The lookup tag specifies one tag to be looked up. The xpath attribute defines which node to modify. It may make use of the namespace definitions above.

The server tag gives the URL to be used for the lookup. A %s in the string will get replaced by the key value. If there is no server tag, the one from the preceding lookup section is used, and if there is no previous section, the id.loc.gov address is used as a default. The default is to make a GET request, this example uses HEAD


6.3. API

It should be easy to use the retrieval systems from applications. Refer to the headers yaz/retrieval.h and yaz/record_conv.h.

yaz-5.28.0/doc/comstack.introduction.html0000644000175000017500000000676313572540030015324 000000000000002. Introduction

2. Introduction

The COMSTACK subsystem provides a transparent interface to different types of transport stacks for the exchange of BER-encoded data and HTTP packets. At present, the RFC1729 method (BER over TCP/IP), local UNIX socket and an experimental SSL stack are supported, but others may be added in time. The philosophy of the module is to provide a simple interface by hiding unused options and facilities of the underlying libraries. This is always done at the risk of losing generality, and it may prove that the interface will need extension later on.

Note

There hasn't been interest in the XTImOSI stack for some years. Therefore, it is no longer supported.

The interface is implemented in such a fashion that only the sub-layers constructed to the transport methods that you wish to use in your application are linked in.

You will note that even though simplicity was a goal in the design, the interface is still orders of magnitudes more complex than the transport systems found in many other packages. One reason is that the interface needs to support the somewhat different requirements of the different lower-layer communications stacks; another important reason is that the interface seeks to provide a more or less industrial-strength approach to asynchronous event-handling. When no function is allowed to block, things get more complex - particularly on the server side. We urge you to have a look at the demonstration client and server provided with the package. They are meant to be easily readable and instructive, while still being at least moderately useful.

yaz-5.28.0/doc/local0.ent.in0000644000175000017500000000003613265142510012364 00000000000000 yaz-5.28.0/doc/bib1-diagnostics.html0000644000175000017500000003573613572540030014124 00000000000000Appendix B. Bib-1 diagnostics

Appendix B. Bib-1 diagnostics

List of Bib-1 diagnostics that are known to YAZ.

CodeText
1 Permanent system error
2 Temporary system error
3 Unsupported search
4 Terms only exclusion (stop) words
5 Too many argument words
6 Too many boolean operators
7 Too many truncated words
8 Too many incomplete subfields
9 Truncated words too short
10 Invalid format for record number (search term)
11 Too many characters in search statement
12 Too many records retrieved
13 Present request out of range
14 System error in presenting records
15 Record no authorized to be sent intersystem
16 Record exceeds Preferred-message-size
17 Record exceeds Maximum-record-size
18 Result set not supported as a search term
19 Only single result set as search term supported
20 Only ANDing of a single result set as search term supported
21 Result set exists and replace indicator off
22 Result set naming not supported
23 Combination of specified databases not supported
24 Element set names not supported
25 Specified element set name not valid for specified database
26 Only a single element set name supported
27 Result set no longer exists - unilaterally deleted by target
28 Result set is in use
29 One of the specified databases is locked
30 Specified result set does not exist
31 Resources exhausted - no results available
32 Resources exhausted - unpredictable partial results available
33 Resources exhausted - valid subset of results available
100 Unspecified error
101 Access-control failure
102 Security challenge required but could not be issued - request terminated
103 Security challenge required but could not be issued - record not included
104 Security challenge failed - record not included
105 Terminated by negative continue response
106 No abstract syntaxes agreed to for this record
107 Query type not supported
108 Malformed query
109 Database unavailable
110 Operator unsupported
111 Too many databases specified
112 Too many result sets created
113 Unsupported attribute type
114 Unsupported Use attribute
115 Unsupported value for Use attribute
116 Use attribute required but not supplied
117 Unsupported Relation attribute
118 Unsupported Structure attribute
119 Unsupported Position attribute
120 Unsupported Truncation attribute
121 Unsupported Attribute Set
122 Unsupported Completeness attribute
123 Unsupported attribute combination
124 Unsupported coded value for term
125 Malformed search term
126 Illegal term value for attribute
127 Unparsable format for un-normalized value
128 Illegal result set name
129 Proximity search of sets not supported
130 Illegal result set in proximity search
131 Unsupported proximity relation
132 Unsupported proximity unit code
201 Proximity not supported with this attribute combination
202 Unsupported distance for proximity
203 Ordered flag not supported for proximity
205 Only zero step size supported for Scan
206 Specified step size not supported for Scan
207 Cannot sort according to sequence
208 No result set name supplied on Sort
209 Generic sort not supported (database-specific sort only supported)
210 Database specific sort not supported
211 Too many sort keys
212 Duplicate sort keys
213 Unsupported missing data action
214 Illegal sort relation
215 Illegal case value
216 Illegal missing data action
217 Segmentation: Cannot guarantee records will fit in specified segments
218 ES: Package name already in use
219 ES: no such package, on modify/delete
220 ES: quota exceeded
221 ES: extended service type not supported
222 ES: permission denied on ES - id not authorized
223 ES: permission denied on ES - cannot modify or delete
224 ES: immediate execution failed
225 ES: immediate execution not supported for this service
226 ES: immediate execution not supported for these parameters
227 No data available in requested record syntax
228 Scan: malformed scan
229 Term type not supported
230 Sort: too many input results
231 Sort: incompatible record formats
232 Scan: term list not supported
233 Scan: unsupported value of position-in-response
234 Too many index terms processed
235 Database does not exist
236 Access to specified database denied
237 Sort: illegal sort
238 Record not available in requested syntax
239 Record syntax not supported
240 Scan: Resources exhausted looking for satisfying terms
241 Scan: Beginning or end of term list
242 Segmentation: max-segment-size too small to segment record
243 Present: additional-ranges parameter not supported
244 Present: comp-spec parameter not supported
245 Type-1 query: restriction ('resultAttr') operand not supported
246 Type-1 query: 'complex' attributeValue not supported
247 Type-1 query: 'attributeSet' as part of AttributeElement not supported
1001 Malformed APDU
1002 ES: EXTERNAL form of Item Order request not supported
1003 ES: Result set item form of Item Order request not supported
1004 ES: Extended services not supported unless access control is in effect
1005 Response records in Search response not supported
1006 Response records in Search response not possible for specified database (or database combination)
1007 No Explain server. Addinfo: pointers to servers that have a surrogate Explain database for this server
1008 ES: missing mandatory parameter for specified function. Addinfo: parameter
1009 ES: Item Order, unsupported OID in itemRequest. Addinfo: OID
1010 Init/AC: Bad Userid
1011 Init/AC: Bad Userid and/or Password
1012 Init/AC: No searches remaining (pre-purchased searches exhausted)
1013 Init/AC: Incorrect interface type (specified id valid only when used with a particular access method or client)
1014 Init/AC: Authentication System error
1015 Init/AC: Maximum number of simultaneous sessions for Userid
1016 Init/AC: Blocked network address
1017 Init/AC: No databases available for specified userId
1018 Init/AC: System temporarily out of resources
1019 Init/AC: System not available due to maintenance
1020 Init/AC: System temporarily unavailable (Addinfo: when it's expected back up)
1021 Init/AC: Account has expired
1022 Init/AC: Password has expired so a new one must be supplied
1023 Init/AC: Password has been changed by an administrator so a new one must be supplied
1024 Unsupported Attribute
1025 Service not supported for this database
1026 Record cannot be opened because it is locked
1027 SQL error
1028 Record deleted
1029 Scan: too many terms requested. Addinfo: max terms supported
1040 ES: Invalid function
1041 ES: Error in retention time
1042 ES: Permissions data not understood
1043 ES: Invalid OID for task specific parameters
1044 ES: Invalid action
1045 ES: Unknown schema
1046 ES: Too many records in package
1047 ES: Invalid wait action
1048 ES: Cannot create task package -- exceeds maximum permissible size
1049 ES: Cannot return task package -- exceeds maximum permissible size
1050 ES: Extended services request too large
1051 Scan: Attribute set id required -- not supplied
1052 ES: Cannot process task package record -- exceeds maximum permissible record size for ES
1053 ES: Cannot return task package record -- exceeds maximum permissible record size for ES response
1054 Init: Required negotiation record not included
1055 Init: negotiation option required
1056 Attribute not supported for database
1057 ES: Unsupported value of task package parameter
1058 Duplicate Detection: Cannot dedup on requested record portion
1059 Duplicate Detection: Requested detection criterion not supported
1060 Duplicate Detection: Requested level of match not supported
1061 Duplicate Detection: Requested regular expression not supported
1062 Duplicate Detection: Cannot do clustering
1063 Duplicate Detection: Retention criterion not supported
1064 Duplicate Detection: Requested number (or percentage) of entries
1065 Duplicate Detection: Requested sort criterion not supported
1066 CompSpec: Unknown schema, or schema not supported.
1067 Encapsulation: Encapsulated sequence of PDUs not supported
1068 Encapsulation: Base operation (and encapsulated PDUs) not executed based on pre-screening analysis
1069 No syntaxes available for this request
1070 user not authorized to receive record(s) in requested syntax
1071 preferredRecordSyntax not supplied
1072 Query term includes characters that do not translate into the target character set
1073 Database records do not contain data associated with access point
1074 Proxy failure
yaz-5.28.0/doc/yaz-asncomp.html0000644000175000017500000002445513572540030013237 00000000000000yaz-asncomp

Name

yaz-asncomp — YAZ ASN.1 compiler

Synopsis

yaz-asncomp [-v] [-c cfile] [-h hfile] [-p pfile] [-d config] [-I includeout] [-i includedir] [-m module] [filename]

DESCRIPTION

yaz-asncomp is an ASN.1 compiler that reads an ASN.1 specification in filename and produces C/C++ definitions and BER encoders/decoders for it.

The produced C/C++ code and header files uses the ODR module of YAZ which is a library that encodes/decodes/prints BER packages. yaz-asncomp allows you to specify name of resulting source via options. Alternatively, you can specify a DEFINITIONS file, which provides customized output to many output files - if the ASN.1 specification file consists of many modules.

This utility is written in Tcl. Any version of Tcl should work.

OPTIONS

-v

Makes the ASN.1 compiler print more verbose about the various stages of operations.

-c cfile

Specifies the name of the C/C++ file with encoders/decoders.

-h hfile

Specifies the name of header file with definitions.

-p pfile

Specifies the name of the a private header file with definitions. By default all definitions are put in header file (option -h).

-d dfile

Specifies the name of a definitions file.

-I iout

Specifies first part of directory in which header files are written.

-i idir

Specifies second part of directory in which header files are written.

-m module

Specifies that ASN.1 compiler should only process the module given. If this option is not specified, all modules in the ASN.1 file are processed.

DEFINITIONS FILE

The definitions file is really a Tcl script but follows traditional rules for Shell like configuration files. That is # denotes the beginning of a comment. Definitions are line oriented. The definitions files usually consist of a series of variable assignments of the form:

set name value

Available variables are:

default-prefix

Sets prefix for names in the produced output. The value consists of three tokens: C function prefix, C typedef prefix and preprocessor prefix respectively.

prefix(module)

This value sets prefix values for module module. The value has same form as default-prefix.

filename(module)

Specifies filename for C/header file for module module.

init(module,h)

Code fragment to be put in first part of public header for module module.

body(module,h)

Code fragment to be put in last part of public header for module module (trailer).

init(module,c)

Code fragment to be put in first part of C based encoder/decoder for module module.

body(module,c)

Code fragment to be put in last part of C based encoder/decoder for module module (trailer).

map(module,name)

Maps ASN.1 type in module module of name to value.

membermap(module,name,member)

Maps member member in SEQUENCE/CHOICE of name in module module to value. The value consists of one or two tokens. First token is name of C preprocessor part. Second token is resulting C member name. If second token is omitted the value (one token) is both preprocessor part and C struct,union.

unionmap(module,name,member)

Maps member member in CHOICE of name in module module to value. Value consists of two or three tokens. The first token is name of the integer in the union that is used as selector for the union itself. The second token is name of the union. The third token overrides the name of the CHOICE member; if omitted the member name is used.

FILES

/usr/share/yaz/z39.50/z.tcl

/usr/share/yaz/z39.50/*.asn

SEE ALSO

yaz(7)

Section "The ODR Module" in the YAZ manual.

yaz-5.28.0/doc/zoom.query.html0000644000175000017500000001037413572540030013121 000000000000002. Queries

2. Queries

Query objects represents queries.

     ZOOM_query ZOOM_query_create(void);

     void ZOOM_query_destroy(ZOOM_query q);

     int ZOOM_query_prefix(ZOOM_query q, const char *str);

     int ZOOM_query_cql(ZOOM_query s, const char *str);

     int ZOOM_query_sortby(ZOOM_query q, const char *criteria);

     int ZOOM_query_sortby2(ZOOM_query q, const char *strategy,
                            const char *criteria);
   

Create query objects using ZOOM_query_create and destroy them by calling ZOOM_query_destroy. RPN-queries can be specified in PQF notation by using the function ZOOM_query_prefix. The ZOOM_query_cql specifies a CQL query to be sent to the server/target. More query types will be added in future versions of YAZ, such as CCL to RPN-mapping, native CCL query, etc. In addition to a search, a sort criteria may be set. Function ZOOM_query_sortby enables Z39.50 sorting and it takes sort criteria using the same string notation as yaz-client's sort command.

ZOOM_query_sortby2 is similar to ZOOM_query_sortby but allows a strategy for sorting. The reason for the strategy parameter is that some protocols offer multiple ways of performing sorting. For example, Z39.50 has the standard sort, which is performed after search on an existing result set. It's also possible to use CQL in Z39.50 as the query type and use CQL's SORTBY keyword. Finally, Index Data's Zebra server also allows sorting to be specified as part of RPN (Type 7).

Table 3.2. ZOOM sort strategy

NameDescription
z39.50Z39.50 resultset sort
type7Sorting embedded in RPN(Type-7)
cqlCQL SORTBY
sru11SRU sortKeys parameter
solrSolr sort
embedtype7 for Z39.50, cql for SRU, solr for Solr protocol

yaz-5.28.0/doc/yaz-config.10000644000175000017500000000476713570011155012243 00000000000000'\" t .\" Title: yaz-config .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: Commands .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "YAZ\-CONFIG" "1" "11/28/2019" "YAZ 5.28.0" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-config \- Script to get information about YAZ\&. .SH "SYNOPSIS" .HP \w'\fByaz\-config\fR\ 'u \fByaz\-config\fR [\fB\-\-prefix[=\fR\fB\fIDIR\fR\fR\fB]\fR] [\fB\-\-version\fR] [\fB\-\-libs\fR] [\fB\-\-lalibs\fR] [\fB\-\-cflags\fR] [\fB\-\-include\fR] [\fB\-\-comp\fR] [\fB\-V\fR] [libraries...] .SH "DESCRIPTION" .PP \fByaz\-config\fR is a script that returns information that your own software should use to build software that uses YAZ\&. .PP The following libraries are supported: .PP threads .RS 4 Use the threaded version of YAZ\&. .RE .SH "OPTIONS" .PP \-\-prefix[=\fIDIR\fR] .RS 4 Returns prefix of YAZ or assume a different one if DIR is specified\&. .RE .PP \-\-version .RS 4 Returns version of YAZ\&. .RE .PP \-\-libs .RS 4 Library specification be used when using YAZ\&. .RE .PP \-\-lalibs .RS 4 Return library specification\&. .RE .PP \-\-cflags .RS 4 Return C Compiler flags\&. .RE .PP \-\-include .RS 4 Return C compiler includes for YAZ header files (\-Ipath)\&. .RE .PP \-\-comp .RS 4 Returns full path to YAZ\*(Aq ASN\&.1 compiler: yaz\-asncomp\&. .RE .PP \-V .RS 4 Returns YAZ SHA1 ID (from Git) and version\&. .RE .SH "FILES" .PP /usr/bin/yaz\-config .PP /usr/lib/libyaz*\&.a .PP /usr/include/yaz/*\&.h .SH "SEE ALSO" .PP yaz(7) .PP Section "How to make apps using YAZ on UNIX" in the YAZ manual\&. .SH "AUTHORS" .PP \fBIndex Data\fR yaz-5.28.0/doc/book.xml0000644000175000017500000133732013526305407011571 00000000000000 %local; %entities; %idcommon; ]> YAZ User's Guide and Reference SebastianHammer AdamDickmeiss MikeTaylor HeikkiLevanto DennisSchafroth &version; ©right-year; Index Data This document is the programmer's guide and reference to the &yaz; package version &version;. &yaz; is a compact toolkit that provides access to the Z39.50 and SRU/Solr protocols, as well as a set of higher-level tools for implementing the server and client roles, respectively. The documentation can be used on its own, or as a reference when looking at the example applications provided with the package. Introduction &yaz; is a C/C++ library for information retrieval applications using the Z39.50/SRU/Solr protocols for information retrieval. Properties of &yaz;: Complete Z39.50 version 3 support. Amendments and Z39.50-2002 revision is supported. Supports SRU GET/POST/SOAP version 1.1, 1.2 and 2.0 (over HTTP and HTTPS). Includes BER encoders/decoders for the ISO ILL protocol. Supports Apache Solr Web Service version 1.4.x (client side only) Supports the following transports: BER over TCP/IP (RFC1729), BER over unix local socket, and HTTP 1.1. Secure Socket Layer support using GnuTLS. If enabled, &yaz; uses HTTPS transport (for SOAP) or "Secure BER" (for Z39.50). Offers ZOOM C API implementing Z39.50, SRU and Solr Web Service. The &yaz; library offers a set of useful utilities related to the protocols, such as MARC (ISO2709) parser, CCL (ISO8777) parser, CQL parser, memory management routines, character set conversion. Portable code. &yaz; compiles out-of-the box on most Unixes and on Windows using Microsoft Visual C++. Fast operation. The C based BER encoders/decoders as well as the server component of &yaz; is very fast. Liberal license that allows for commercial use of &yaz;. Reading this Manual Most implementors only need to read a fraction of the material in this manual, so a quick walkthrough of the chapters is in order. contains installation instructions for &yaz;. You don't need to read this if you expect to download &yaz; binaries. However, the chapter contains information about how to make your application link with &yaz;. describes the ZOOM API of &yaz;. This is definitely worth reading if you wish to develop a Z39.50/SRU client. describes the generic frontend server and explains how to develop server Z39.50/SRU applications for &yaz;. Obviously worth reading if you're to develop a server. describes how to use the &yaz; Z39.50 client. If you're a developer and wish to test your server or a server from another party, you might find this chapter useful. documents the most commonly used Z39.50 C data structures offered by the &yaz; API. Client developers using ZOOM and non-Z39.50 implementors may skip this. describes how SRU and SOAP is used in &yaz;. Only if you're developing SRU applications this section is a must. contains sections for the various tools offered by &yaz;. Scan through the material quickly and see what's relevant to you! SRU implementors might find the CQL section particularly useful. goes through the details of the ODR module which is the work horse that encodes and decodes BER packages. Implementors using ZOOM only, do not need to read this. Most other Z39.50 implementors only need to read the first two sections ( and ). describes the network layer module COMSTACK. Implementors using ZOOM or the generic frontend server may skip this. Others, presumably, handling client/server communication on their own should read this. The API The &yaz; toolkit offers several different levels of access to the ISO23950/Z39.50, ILL and SRU protocols. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement. If you're developing a client application you should consider the ZOOM API. It is, by far, the easiest way to develop clients in C. Server implementers should consider the generic frontend server. None of those high-level APIs support the whole protocol, but they do include most facilities used in existing Z39.50 applications. If you're using 'exotic' functionality (meaning anything not included in the high-level APIs), developing non-standard extensions to Z39.50 or you're going to develop an ILL application, you'll have to learn the lower level APIs of &yaz;. The YAZ toolkit modules are shown in figure .
YAZ layers
There are four layers. A client or server application (or both). This layer includes ZOOM and the generic frontend server. The second layer provides a C representation of the protocol units (packages) for Z39.50 ASN.1, ILL ASN.1, SRU. The third layer encodes and decodes protocol data units to simple packages (buffer with certain length). The &odr; module encodes and decodes BER whereas the HTTP modules encodes and decodes HTTP requests/responses. The lowest layer is &comstack; which exchanges the encoded packages with a peer process over a network. The &asn; module represents the ASN.1 definition of the Z39.50 protocol. It establishes a set of type and structure definitions, with one structure for each of the top-level PDUs, and one structure or type for each of the contained ASN.1 types. For primitive types, or other types that are defined by the ASN.1 standard itself (such as the EXTERNAL type), the C representation is provided by the &odr; (Open Data Representation) subsystem. &odr; is a basic mechanism for representing an ASN.1 type in the C programming language, and for implementing BER encoders and decoders for values of that type. The types defined in the &asn; module generally have the prefix Z_, and a suffix corresponding to the name of the type in the ASN.1 specification of the protocol (generally Z39.50-1995). In the case of base types (those originating in the ASN.1 standard itself), the prefix Odr_ is sometimes seen. Either way, look for the actual definition in either z-core.h (for the types from the protocol), odr.h (for the primitive ASN.1 types). The &asn; library also provides functions (which are, in turn, defined using &odr; primitives) for encoding and decoding data values. Their general form is int z_xxx ODR o Z_xxx **p int optional const char *name (note the lower-case "z" in the function name) If you are using the premade definitions of the &asn; module, and you are not adding a new protocol of your own, the only parts of &odr; that you need to worry about are documented in . When you have created a BER-encoded buffer, you can use the &comstack; subsystem to transmit (or receive) data over the network. The &comstack; module provides simple functions for establishing a connection (passively or actively, depending on the role of your application), and for exchanging BER-encoded PDUs over that connection. When you create a connection endpoint, you need to specify what transport to use (TCP/IP, SSL or UNIX sockets). For the remainder of the connection's lifetime, you don't have to worry about the underlying transport protocol at all - the &comstack; will ensure that the correct mechanism is used. We call the combined interfaces to &odr;, &asn;, and &comstack; the service level API. It's the API that most closely models the Z39.50 service/protocol definition, and it provides unlimited access to all fields and facilities of the protocol definitions. The reason that the &yaz; service-level API is a conglomerate of the APIs from three different submodules is twofold. First, we wanted to allow the user a choice of different options for each major task. For instance, if you don't like the protocol API provided by &odr;/&asn;, you can use SNACC or BERUtils instead, and still have the benefits of the transparent transport approach of the &comstack; module. Secondly, we realize that you may have to fit the toolkit into an existing event-processing structure, in a way that is incompatible with the &comstack; interface or some other part of &yaz;.
Compilation and Installation Introduction The latest version of the software will generally be found at: We have tried our best to keep the software portable, and on many platforms, you should be able to compile everything with little or no changes. The software is regularly tested on Debian GNU/Linux, CentOS, Ubuntu Linux, FreeBSD (i386), MAC OSX, Windows 10. Some versions have be known to work on Windows XP, Solaris, HP/UX, DEC Unix, NetBSD, OpenBSD, IBM AIX, Data General DG/UX (with some CFLAGS tinkering), SGI/IRIX, DDE Supermax, Apple Macintosh (using the Codewarrior programming environment and the GUSI socket libraries), IBM AS/400 . If you move the software to other platforms, we'd be grateful if you'd let us know about it. If you run into difficulties, we will try to help if we can, and if you solve the problems, we would be happy to include your fixes in the next release. So far, we have mostly avoided #ifdefs for individual platforms, and we'd like to keep it that way as far as it makes sense. We maintain a mailing-list for the purpose of announcing new releases and bug-fixes, as well as general discussion. Subscribe by filling-in the form here. General questions and problems can be directed at , or the address given at the top of this document. UNIX/MacOS We provide Debian GNU/Linux (i386 and amd64), Ubuntu (i386 and amd64) and CentOS (amd64 only) packages for &yaz;. You should be able to create packages for other CPUs by building them from the source package. YAZ is also part of several packages repositories. Some of them are Solaris CSW: Solaris: FreeBSD: Debian: Ubuntu: NetBSD: Compiling from source on Unix You can choose to compile YAZ from official tar releases from or clone it via Github . If you wish to use character set conversion facilities in &yaz; or if you are compiling &yaz; for use with Zebra, it is a good idea to ensure that the iconv library is installed. Some Unixes today already have it - if not, we suggest GNU libiconv. YAZ 3.0.16 and later includes a wrapper for the ICU (International Components for Unicode). In order to use this, the developer version of the ICU library must be available. ICU support is recommended for applications such as Pazpar2 and Zebra. The libxslt, libxml2 librararies are required if &yaz; is to support SRU/Solr. These libraries are very portable and should compile out-of-the box on virtually all Unix platforms. It is available in binary forms for Linux and others. The GNU tools Autoconf, Automake and Libtool are used to generate Makefiles and configure &yaz; for the system. You do not need these tools unless you're using the Git version of &yaz;. The CQL parser for &yaz; is built using GNU Bison. This tool is only needed if you're using the Git version of &yaz;. &yaz; includes a tiny ASN.1 compiler. This compiler is written in Tcl. But as for Bison you do not need it unless you're using Git version of &yaz; or you're using the compiler to build your own codecs for private ASN.1. If you are checking out from Git, run: ./buildconf.sh This will create the configure script and Makefiles. The next step is always: ./configure The configure script attempts to use use the C compiler specified by the CC environment variable. If not set, GNU C will be used if it is available. The CFLAGS environment variable holds options to be passed to the C compiler. If you're using Bourne-compatible shell, you may pass something like this to use a particular C compiler with optimization enabled: CC=/opt/ccs/bin/cc CFLAGS=-O ./configure To customize &yaz;, the configure script also accepts a set of options. The most important are: --prefix=prefix Specifies installation prefix for &yaz;. This is only needed if you run make install later to perform a "system" installation. The prefix is /usr/local if not specified. --enable-tcpd The front end server will be built using Wietse's TCP wrapper library. It allows you to allow/deny clients depending on IP number. The TCP wrapper library is often used in GNU/Linux and BSD distributions. See hosts_access 5 and tcpd 8 . --enable-threads &yaz; will be built using POSIX threads. Specifically, _REENTRANT will be defined during compilation. --disable-shared The make process will not create shared libraries (also known as shared objects .so). By default, shared libraries are created - equivalent to --enable-shared. --disable-shared The make process will not create static libraries (.a). By default, static libraries are created - equivalent to --enable-static. --with-iconv[=prefix] Compile &yaz; with iconv library in directory prefix. By default configure will search for iconv on the system. Use this option if it doesn't find iconv. Alternatively, --without-iconv, can be used to force &yaz; not to use iconv. --with-xslt[=prefix] Compile &yaz; with libxslt in directory prefix. Use this option if you want XSLT and XML support. By default, configure will search for libxslt on the system. Use this option if libxslt is not found automatically. Alternatively, --without-xslt, can be used to force &yaz; not to use libxslt. --with-xml2[=prefix] Compile &yaz; with libxml2 in directory prefix. Use this option if you want &yaz; to use XML and support SRU/Solr. By default, configure will search for libxml2 on the system. Use this option if libxml2 is not found automatically. Alternatively, --without-xml2, can be used to force &yaz; not to use libxml2. Note that option --with-xslt also enables libxml2. --with-gnutls[=prefix] &yaz; will be linked with the GNU TLS libraries and an SSL COMSTACK will be provided. By default configure enables SSL support for YAZ if the GNU TLS development libraries are found on the system. --with-icu[=prefix] &yaz; will be linked the ICU library in the prefix if given. If prefix is not given, the libraries exposed by the script icu-config will be used if found. --with-memcached &yaz; will be linked with libMemcached to allow for result-set caching for ZOOM. The prefix can not be given. Note that 0.40 of libmemcached is required. --with-redis &yaz; will be linked with the hiredis C library to allow for result-set caching for ZOOM on a redis server. The prefix can not be given. When configured, build the software by typing: make The following files are generated by the make process: src/libyaz.la Main &yaz; library. This is no ordinary library. It's a Libtool archive. By default, &yaz; creates a static library in lib/.libs/libyaz.a. src/libyaz_server.la Generic Frontend server. This is an add-on for libyaz.la. Code in this library uses POSIX threads functions - if POSIX threads are available on the platform. src/libyaz_icu.la Functions that wrap the ICU library. ztest/yaz-ztest Test Z39.50 server. client/yaz-client Z39.50 client for testing the protocol. See chapter YAZ client for more information. util/yaz-config A Bourne-shell script, generated by configure, that specifies how external applications should compile - and link with &yaz;. util/yaz-asncomp The ASN.1 compiler for &yaz;. Requires the Tcl Shell, tclsh, in PATH to operate. util/yaz-iconv This program converts data in one character set to another. This command exercises the YAZ character set conversion API. util/yaz-marcdump This program parses ISO2709 encoded MARC records and prints them in line-format or XML. util/yaz-icu This program exposes the ICU wrapper library if that is enabled for YAZ. Only if ICU is available this program is useful. util/yaz-url This program is a simple HTTP page fetcher ala wget or curl. zoom/zoomsh A simple shell implemented on top of the ZOOM functions. The shell is a command line application that allows you to enter simple commands to perform ZOOM operations. zoom/zoomtst1, zoom/zoomtst2, .. Several small applications that demonstrate the ZOOM API. If you wish to install &yaz; in system directories /usr/local/bin, /usr/local/lib .. etc, you can type: make install You probably need to have root access in order to perform this. You must specify the --prefix option for configure if you wish to install &yaz; in other directories than the default /usr/local/. If you wish to perform an un-installation of &yaz;, use: make uninstall This will only work if you haven't reconfigured &yaz; (and therefore changed installation prefix). Note that uninstall will not remove directories created by make install, e.g. /usr/local/include/yaz. Compiling from source on MacOS Compiling from source on MacOSX requires libxml2. This can be installed with Homebrew, for instance: brew install libxml2 Review the Caveats section (brew info libxml2) for the LDFLAGS, CPPFLAGS, and PKG_CONFIG_PATH environment variables before executing the ./compile command. For instance: export LDFLAGS="-L/usr/local/opt/libxml2/lib" export CPPFLAGS="-I/usr/local/opt/libxml2/include" export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig" ./configure make How to make apps using YAZ on UNIX This section describes how to compile - and link your own applications using the &yaz; toolkit. If you're used to Makefiles this shouldn't be hard. As for other libraries you have used before, you need to set a proper include path for your C/C++ compiler and specify the location of &yaz; libraries. You can do it by hand, but generally we suggest you use the yaz-config that is generated by configure. This is especially important if you're using the threaded version of &yaz; which require you to pass more options to your linker/compiler. The yaz-config script accepts command line options that makes the yaz-config script print options that you should use in your make process. The most important ones are: --cflags, --libs which prints C compiler flags, and linker flags respectively. A small and complete Makefile for a C application consisting of one source file, myprog.c, may look like this: YAZCONFIG=/usr/local/bin/yaz-config CFLAGS=`$(YAZCONFIG) --cflags` LIBS=`$(YAZCONFIG) --libs` myprog: myprog.o $(CC) $(CFLAGS) -o myprog myprog.o $(LIBS) The CFLAGS variable consists of a C compiler directive that will set the include path to the parent directory of yaz. That is, if &yaz; header files were installed in /usr/local/include/yaz, then include path is set to /usr/local/include. Therefore, in your applications you should use #include <yaz/proto.h> and not #include <proto.h> For Libtool users, the yaz-config script provides a different variant of option --libs, called --lalibs that returns the name of the Libtool archive(s) for &yaz; rather than the ordinary ones. For applications using the threaded version of &yaz;, specify threads after the other options. When threads is given, more flags and linker flags will be printed by yaz-config. If our previous example was using threads, you'd have to modify the lines that set CFLAGS and LIBS as follows: CFLAGS=`$(YAZCONFIG) --cflags threads` LIBS=`$(YAZCONFIG) --libs threads` There is no need specify POSIX thread libraries in your Makefile. The LIBS variable includes that as well. Windows The easiest way to install YAZ on Windows is by downloading an installer from Index Data's Windows support area . The installer comes with source too - in case you wish to compile YAZ with different compiler options, etc. Compiling from Source on Windows &yaz; is shipped with "makefiles" for the NMAKE tool that comes with Microsoft Visual Studio. It has been tested with Microsoft Visual Studio 2017. Start a command prompt and switch the sub directory WIN where the file makefile is located. Customize the installation by editing the makefile file (for example by using notepad). The following summarizes the most important settings in that file: DEBUG If set to 1, the software is compiled with debugging libraries (code generation is multi-threaded debug DLL). If set to 0, the software is compiled with release libraries (code generation is multi-threaded DLL). HAVE_TCL, TCL If HAVE_TCL is set to 1, nmake will use the ASN.1 compiler (Tcl based). You must set TCL to the full path of the Tcl interpreter. A Windows version of Tcl is part of Git for Windows. If you do not have Tcl installed, set HAVE_TCL to 0. HAVE_BISON, BISON If GNU Bison is present, you might set HAVE_BISON to 1 and specify the Bison executable in BISON. Bison is only required if you use the Git version of YAZ or if you modify the grammar for CQL (cql.y). A Windows version of GNU Bison can be fetched from here: Index Data's Windows support area . HAVE_ICONV, ICONV_DIR If HAVE_ICONV is set to 1, YAZ is compiled with iconv support. In this configuration, set ICONV_DIR to the iconv source directory. HAVE_LIBXML2, LIBXML2_DIR If HAVE_LIBXML2 is set to 1, YAZ is compiled with SRU support. In this configuration, set LIBXML2_DIR to the libxml2 source directory. You can get pre-compiled Libxml2+Libxslt DLLs and headers from here. Should you with to compile those libraries yourself, refer to to HAVE_LIBXSLT, LIBXSLT_DIR If HAVE_LIBXSLT is set to 1, YAZ is compiled with XSLT support. In this configuration, set LIBXSLT_DIR to the libxslt source directory. libxslt depends on libxml2. HAVE_ICU, ICU_DIR If HAVE_ICU is set to 1, YAZ is compiled with ICU support. In this configuration, set ICU_DIR to the ICU source directory. Pre-compiled ICU libraries for various versions of Visual Studio can be found here or from Index Data's Windows support site. When satisfied with the settings in the makefile, type nmake If the nmake command is not found on your system you probably haven't defined the environment variables required to use that tool. To fix that, find and run the batch file vcvarsall.bat. You need to run it from within the command prompt or set the environment variables "globally"; otherwise it doesn't work. If you wish to recompile &yaz; - for example if you modify settings in the makefile you can delete object files, etc by running. nmake clean The following files are generated upon successful compilation: bin/yaz&soversion;.dll / bin/yaz&soversion;d.dll &yaz; Release/Debug DLL. lib/yaz&soversion;.lib / lib/yaz&soversion;d.lib Import library for yaz&soversion;.dll / yaz&soversion;d.dll. bin/yaz_cond&soversion;.dll / bin/yaz_cond&soversion;d.dll Release/Debug DLL for condition variable utilities (condvar.c). lib/yaz_cond&soversion;.lib / lib/yaz_cond&soversion;d.lib Import library for yaz_cond&soversion;.dll / yaz_cond&soversion;d.dll. bin/yaz_icu&soversion;.dll / bin/yaz_icu&soversion;d.dll Release/Debug DLL for the ICU wrapper utility. Only build if HAVE_ICU is 1. lib/yaz_icu&soversion;.lib / lib/yaz_icu&soversion;d.lib Import library for yaz_icu&soversion;.dll / yaz_icu&soversion;d.dll. bin/yaz-ztest.exe Z39.50 multi-threaded test/example server. It's a WIN32 console application. bin/yaz-client.exe &yaz; Z39.50 client application. It's a WIN32 console application. See chapter YAZ client for more information. bin/yaz-icu.exe This program exposes the ICU wrapper library if that is enabled for YAZ. Only if ICU is available this program is built. bin/zoomsh.exe Simple console application implemented on top of the ZOOM functions. The application is a command line shell that allows you to enter simple commands to perform ZOOM operations. bin/zoomtst1.exe, bin/zoomtst2.exe, .. Several small applications that demonstrate the ZOOM API. How to make apps using YAZ on Windows This section will go though the process of linking your Windows applications with &yaz;. Some people are confused by the fact that we use the nmake tool to build &yaz;. They think they have to do that too - in order to make their Windows applications work with &yaz;. The good news is that you don't have to. You can use the integrated environment of Visual Studio if desired for your own application. When setting up a project or Makefile you have to set the following: include path Set it to the include directory of &yaz;. import library yaz&soversion;.lib You must link with this library. It's located in the sub directory lib of &yaz;. If you want to link with the debug version of &yaz;, you must link against yaz&soversion;d.lib instead. dynamic link library yaz&soversion;.dll This DLL must be in your execution path when you invoke your application. Specifically, you should distribute this DLL with your application. Compiling Libxml2 and Libxslt on windows Download libxml2 and Libxslt source and unpack it. In the example below we install Libxml2 2.9.2 and Libxslt 1.1.28 for 32-bit, so we use the destination directories libxml2.2.9.2.win32 and libxslt-1.1.28.win32 to reflect both version and architecture. cd win32 cscript configure.js prefix=c:\libxml2-2.9.2.win32 iconv=no nmake nmake install There's an error in configure.js for Libxml2 2.9.2. Line 17 should be assigned to configure.ac rather than configure.in. For Libxslt it is similar. We must ensure that compilation of Libxslt links against the already installed libxml2. cd win32 cscript configure.js prefix=c:\libxslt-1.1.28.win32 iconv=no \ lib=c:\libxml2-2.9.2.win32\lib \ include=c:\libxml2-2.9.2.win32\include\libxml2 nmake nmake install ZOOM &zoom; is an acronym for 'Z39.50 Object-Orientation Model' and is an initiative started by Mike Taylor (Mike is from the UK, which explains the peculiar name of the model). The goal of &zoom; is to provide a common Z39.50 client API not bound to a particular programming language or toolkit. From YAZ version 2.1.12, SRU is supported. You can make SRU ZOOM connections by specifying scheme http:// for the hostname for a connection. The dialect of SRU used is specified by the value of the connection's sru option, which may be SRU over HTTP GET (get), SRU over HTTP POST (post), (SRU over SOAP) (soap) or solr (Solr Web Service). Using the facility for embedding options in target strings, a connection can be forced to use SRU rather the SRW (the default) by prefixing the target string with sru=get,, like this: sru=get,http://sru.miketaylor.org.uk:80/sru.pl Solr protocol support was added to YAZ in version 4.1.0, as a dialect of a SRU protocol, since both are HTTP based protocols. The lack of a simple Z39.50 client API for &yaz; has become more and more apparent over time. So when the first &zoom; specification became available, an implementation for &yaz; was quickly developed. For the first time, it is now as easy (or easier!) to develop clients as it is to develop servers with &yaz;. This chapter describes the &zoom; C binding. Before going further, please reconsider whether C is the right programming language for the job. There are other language bindings available for &yaz;, and still more are in active development. See the ZOOM web-site for more information. In order to fully understand this chapter you should read and try the example programs zoomtst1.c, zoomtst2.c, .. in the zoom directory. The C language misses features found in object oriented languages such as C++, Java, etc. For example, you'll have to manually, destroy all objects you create, even though you may think of them as temporary. Most objects have a _create - and a _destroy variant. All objects are in fact pointers to internal stuff, but you don't see that because of typedefs. All destroy methods should gracefully ignore a NULL pointer. In each of the sections below you'll find a sub section called protocol behavior, that describes how the API maps to the Z39.50 protocol. Connections The Connection object is a session with a target. #include <yaz/zoom.h> ZOOM_connection ZOOM_connection_new(const char *host, int portnum); ZOOM_connection ZOOM_connection_create(ZOOM_options options); void ZOOM_connection_connect(ZOOM_connection c, const char *host, int portnum); void ZOOM_connection_destroy(ZOOM_connection c); Connection objects are created with either function ZOOM_connection_new or ZOOM_connection_create. The former creates and automatically attempts to establish a network connection with the target. The latter doesn't establish a connection immediately, thus allowing you to specify options before establishing network connection using the function ZOOM_connection_connect. If the port number, portnum, is zero, the host is consulted for a port specification. If no port is given, 210 is used. A colon denotes the beginning of a port number in the host string. If the host string includes a slash, the following part specifies a database for the connection. You can prefix the host with a scheme followed by colon. The default scheme is tcp (Z39.50 protocol). The scheme http selects SRU/SOAP over HTTP by default, but can be changed with option sru. You can prefix the scheme-qualified host-string with one or more comma-separated key=value sequences, each of which represents an option to be set into the connection structure before the protocol-level connection is forged and the initialization handshake takes place. This facility can be used to provide authentication credentials, as in host-strings such as: user=admin,password=halfAm4n,tcp:localhost:8017/db Connection objects should be destroyed using the function ZOOM_connection_destroy. void ZOOM_connection_option_set(ZOOM_connection c, const char *key, const char *val); void ZOOM_connection_option_setl(ZOOM_connection c, const char *key, const char *val, int len); const char *ZOOM_connection_option_get(ZOOM_connection c, const char *key); const char *ZOOM_connection_option_getl(ZOOM_connection c, const char *key, int *lenp); The functions ZOOM_connection_option_set and ZOOM_connection_option_setl allows you to set an option given by key to the value value for the connection. For ZOOM_connection_option_set, the value is assumed to be a 0-terminated string. Function ZOOM_connection_option_setl specifies a value of a certain size (len). Functions ZOOM_connection_option_get and ZOOM_connection_option_getl returns the value for an option given by key. ZOOM Connection Options Option Description Default implementationNameName of your client none userAuthentication user name none groupAuthentication group name none passwordAuthentication password. none authenticationModeHow authentication is encoded. basic hostTarget host. This setting is "read-only". It's automatically set internally when connecting to a target. none proxyProxy host. If set, the logical host is encoded in the otherInfo area of the Z39.50 Init PDU with OID 1.2.840.10003.10.1000.81.1. none clientIPClient IP. If set, is encoded in the otherInfo area of a Z39.50 PDU with OID 1.2.840.10003.10.1000.81.3. Holds the original IP addresses of a client. Is used if ZOOM is used in a gateway of some sort. none timeoutIdle timeout which specifies how long ZOOM will wait for network I/O before giving up. Thus, the actual waiting time might be longer than this value if the target makes a chunked response and the time between each chunk arrive is less this value. For the connect+init, this is the time ZOOM will wait until receiving first byte from Init response. 30 asyncIf true (1) the connection operates in asynchronous operation which means that all calls are non-blocking except ZOOM_event. 0 maximumRecordSize Maximum size of single record. 1 MB preferredMessageSize Maximum size of multiple records. 1 MB lang Language for negotiation. none charset Character set for negotiation. none serverImplementationId Implementation ID of server. (The old targetImplementationId option is also supported for the benefit of old applications.) none targetImplementationName Implementation Name of server. (The old targetImplementationName option is also supported for the benefit of old applications.) none serverImplementationVersion Implementation Version of server. (The old targetImplementationVersion option is also supported for the benefit of old applications.) none databaseNameOne or more database names separated by character plus (+), which is to be used by subsequent search requests on this Connection. Default piggybackTrue (1) if piggyback should be used in searches; false (0) if not. 1 smallSetUpperBoundIf hits is less than or equal to this value, then target will return all records using small element set name 0 largeSetLowerBoundIf hits is greater than this value, the target will return no records. 1 mediumSetPresentNumberThis value represents the number of records to be returned as part of a search when hits is less than or equal to large set lower bound and if hits is greater than small set upper bound. 0 smallSetElementSetName The element set name to be used for small result sets. none mediumSetElementSetName The element set name to be used for medium-sized result sets. none init_opt_search, init_opt_present, init_opt_delSet, etc. After a successful Init, these options may be interrogated to discover whether the server claims to support the specified operations. none sru SRU/Solr transport type. Must be either soap, get, post, or solr. soap if scheme is already http; ignored otherwise sru_version SRU/SRW version. Should be 1.1, or 1.2. This is, prior to connect, the version to offer (highest version). And following connect (in fact first operation), holds the negotiated version with the server (same or lower version). 1.2 extraArgs Extra arguments for SRU/Solr URLs. The value must be URL encoded already. facets Requested or recommended facets may be given before a search is sent. The value of this setting is described in For inspection of the facets returned, refer to the functions described in . none apdulog If set to a true value such as "1", a log of low-level protocol packets is emitted on standard error stream. This can be very useful for debugging. 0 saveAPDU If set to a true value such as "1", a log of low-level protocol packets is saved. The log can be retrieved by reading option APDU. Setting saveAPDU always has the side effect of resetting the currently saved log. This setting is write-only. If read, NULL will be returned. It is only recognized in ZOOM_connection_option_set. 0 APDU Returns the log of protocol packets. Will be empty if logging is not enabled (see saveAPDU above). This setting is read-only. It is only recognized if used in call to ZOOM_connection_option_get or ZOOM_connection_option_getl. memcached If given and non-empty, libMemcached will be configured for the connection. This option is inspected by ZOOM when a connection is established. If the memcached option is given and YAZ is compiled without libMemcached support, an internal diagnostic (10018) will be thrown. libMemcached support is available for YAZ 5.0.13 or later. If this option is supplied for an earlier version of YAZ, it is ignored. The value of this option is a list options - each is of the form --name=value. Option --server=host[:port] specifies a memcached server. It may be repeated for multiple memcached servers. Option --expire=seconds sets expiry time in seconds for how long result sets are to be cached. none redis If given and non-empty, a redis context will be created for the connection. This option is inspected by ZOOM when a connection is established. If the redis option is given and YAZ is compiled without redis support, an internal diagnostic (10018) will be thrown. redis support is available for YAZ 5.2.0 or later. If this option is supplied for an earlier version of YAZ, it is ignored. The value of this option is a set of options, similar to that of the memcached setting. At this stage only --server=host[:port] and --expire=seconds are supported. none
If either option lang or charset is set, then Character Set and Language Negotiation is in effect. int ZOOM_connection_error(ZOOM_connection c, const char **cp, const char **addinfo); int ZOOM_connection_error_x(ZOOM_connection c, const char **cp, const char **addinfo, const char **dset); Function ZOOM_connection_error checks for errors for the last operation(s) performed. The function returns zero if no errors occurred; non-zero otherwise indicating the error. Pointers cp and addinfo holds messages for the error and additional-info if passed as non-NULL. Function ZOOM_connection_error_x is an extended version of ZOOM_connection_error that is capable of returning name of diagnostic set in dset. Z39.50 Protocol behavior The calls ZOOM_connection_new and ZOOM_connection_connect establishes a TCP/IP connection and sends an Initialize Request to the target if possible. In addition, the calls wait for an Initialize Response from the target and the result is inspected (OK or rejected). If proxy is set then the client will establish a TCP/IP connection with the peer as specified by the proxy host and the hostname as part of the connect calls will be set as part of the Initialize Request. The proxy server will then "forward" the PDUs transparently to the target behind the proxy. For the authentication parameters, if option user is set and both options group and pass are unset, then Open style authentication is used (Version 2/3) in which case the username is usually followed by a slash, then by a password. If either group or pass is set then idPass authentication (Version 3 only) is used. If none of the options are set, no authentication parameters are set as part of the Initialize Request (obviously). When option async is 1, it really means that all network operations are postponed (and queued) until the function ZOOM_event is invoked. When doing so it doesn't make sense to check for errors after ZOOM_connection_new is called since that operation "connecting - and init" is still incomplete and the API cannot tell the outcome (yet). SRU/Solr Protocol behavior The HTTP based protocols (SRU, SRW, Solr) do not feature an Inititialize Request, so the connection phase merely establishes a TCP/IP connection with the HTTP server. Most of the ZOOM connection options do not affect SRU/Solr and they are ignored. However, future versions of &yaz; might honor implementationName and put that as part of User-Agent header for HTTP requests. The charset is used in the Content-Type header of HTTP requests. Setting authentcationMode specifies how authentication parameters are encoded for HTTP. The default is "basic" where user and password are encoded by using HTTP basic authentication. If authentcationMode is "url", then user and password are encoded in the URL by parameters x-username and x-password as given by the SRU standard.
Queries Query objects represents queries. ZOOM_query ZOOM_query_create(void); void ZOOM_query_destroy(ZOOM_query q); int ZOOM_query_prefix(ZOOM_query q, const char *str); int ZOOM_query_cql(ZOOM_query s, const char *str); int ZOOM_query_sortby(ZOOM_query q, const char *criteria); int ZOOM_query_sortby2(ZOOM_query q, const char *strategy, const char *criteria); Create query objects using ZOOM_query_create and destroy them by calling ZOOM_query_destroy. RPN-queries can be specified in PQF notation by using the function ZOOM_query_prefix. The ZOOM_query_cql specifies a CQL query to be sent to the server/target. More query types will be added in future versions of &yaz;, such as CCL to RPN-mapping, native CCL query, etc. In addition to a search, a sort criteria may be set. Function ZOOM_query_sortby enables Z39.50 sorting and it takes sort criteria using the same string notation as yaz-client's sort command. ZOOM_query_sortby2 is similar to ZOOM_query_sortby but allows a strategy for sorting. The reason for the strategy parameter is that some protocols offer multiple ways of performing sorting. For example, Z39.50 has the standard sort, which is performed after search on an existing result set. It's also possible to use CQL in Z39.50 as the query type and use CQL's SORTBY keyword. Finally, Index Data's Zebra server also allows sorting to be specified as part of RPN (Type 7). ZOOM sort strategy Name Description z39.50Z39.50 resultset sort type7Sorting embedded in RPN(Type-7) cqlCQL SORTBY sru11SRU sortKeys parameter solrSolr sort embedtype7 for Z39.50, cql for SRU, solr for Solr protocol
Result sets The result set object is a container for records returned from a target. ZOOM_resultset ZOOM_connection_search(ZOOM_connection, ZOOM_query q); ZOOM_resultset ZOOM_connection_search_pqf(ZOOM_connection c, const char *q); void ZOOM_resultset_destroy(ZOOM_resultset r); Function ZOOM_connection_search creates a result set, given a connection and query. Destroy a result set by calling ZOOM_resultset_destroy. Simple clients using PQF only, may use the function ZOOM_connection_search_pqf in which case creating query objects is not necessary. void ZOOM_resultset_option_set(ZOOM_resultset r, const char *key, const char *val); const char *ZOOM_resultset_option_get(ZOOM_resultset r, const char *key); size_t ZOOM_resultset_size(ZOOM_resultset r); Functions ZOOM_resultset_options_set and ZOOM_resultset_get sets and gets an option for a result set similar to ZOOM_connection_option_get and ZOOM_connection_option_set. The number of hits, also called result-count, is returned by function ZOOM_resultset_size. ZOOM Result set Options Option Description Default startOffset of first record to be retrieved from target. First record has offset 0 unlike the protocol specifications where first record has position 1. This option affects ZOOM_resultset_search and ZOOM_resultset_search_pqf and must be set before any of these functions are invoked. If a range of records must be fetched manually after search, function ZOOM_resultset_records should be used. 0 countNumber of records to be retrieved. This option affects ZOOM_resultset_search and ZOOM_resultset_search_pqf and must be set before any of these functions are invoked. 0 presentChunkThe number of records to be requested from the server in each chunk (present request). The value 0 means to request all the records in a single chunk. (The old step option is also supported for the benefit of old applications.) 0 elementSetNameElement-Set name of records. Most targets should honor element set name B and F for brief and full respectively. none preferredRecordSyntaxPreferred Syntax, such as USMARC, SUTRS, etc. none schemaSchema for retrieval, such as Gils-schema, Geo-schema, etc. none setnameName of Result Set (Result Set ID). If this option isn't set, the ZOOM module will automatically allocate a result set name. default rpnCharsetCharacter set for RPN terms. If this is set, ZOOM C will assume that the ZOOM application is running UTF-8. Terms in RPN queries are then converted to the rpnCharset. If this is unset, ZOOM C will not assume any encoding of RPN terms and no conversion is performed. none
For servers that support Search Info report, the following options may be read using ZOOM_resultset_get. This detailed information is read after a successful search has completed. This information is a list of of items, where each item is information about a term or subquery. All items in the list are prefixed by SearchResult.no where no presents the item number (0=first, 1=second). Read searchresult.size to determine the number of items. Search Info Report Options Option Description searchresult.size number of search result entries. This option is non-existent if no entries are returned by the server. searchresult.no.id sub query ID searchresult.no.count result count for item (number of hits) searchresult.no.subquery.term subquery term searchresult.no.interpretation.term interpretation term searchresult.no.recommendation.term recommendation term
Z39.50 Result-set Sort void ZOOM_resultset_sort(ZOOM_resultset r, const char *sort_type, const char *sort_spec); int ZOOM_resultset_sort1(ZOOM_resultset r, const char *sort_type, const char *sort_spec); ZOOM_resultset_sort and ZOOM_resultset_sort1 both sort an existing result-set. The sort_type parameter is not used. Set it to "yaz". The sort_spec is same notation as ZOOM_query_sortby and identical to that offered by yaz-client's sort command. These functions only work for Z39.50. Use the more generic utility ZOOM_query_sortby2 for other protocols (and even Z39.50). Z39.50 Protocol behavior The creation of a result set involves at least a SearchRequest - SearchResponse protocol handshake. Following that, if a sort criteria was specified as part of the query, a SortRequest - SortResponse handshake takes place. Note that it is necessary to perform sorting before any retrieval takes place, so no records will be returned from the target as part of the SearchResponse because these would be unsorted. Hence, piggyback is disabled when sort criteria are set. Following Search - and a possible sort - Retrieval takes place - as one or more Present Requests/Response pairs being transferred. The API allows for two different modes for retrieval. A high level mode which is somewhat more powerful and a low level one. The low level is enabled when searching on a Connection object for which the settings smallSetUpperBound, mediumSetPresentNumber and largeSetLowerBound are set. The low level mode thus allows you to precisely set how records are returned as part of a search response as offered by the Z39.50 protocol. Since the client may be retrieving records as part of the search response, this mode doesn't work well if sorting is used. The high-level mode allows you to fetch a range of records from the result set with a given start offset. When you use this mode the client will automatically use piggyback if that is possible with the target, and perform one or more present requests as needed. Even if the target returns fewer records as part of a present response because of a record size limit, etc. the client will repeat sending present requests. As an example, if option start is 0 (default) and count is 4, and piggyback is 1 (default) and no sorting criteria is specified, then the client will attempt to retrieve the 4 records as part the search response (using piggyback). On the other hand, if either start is positive or if a sorting criteria is set, or if piggyback is 0, then the client will not perform piggyback but send Present Requests instead. If either of the options mediumSetElementSetName and smallSetElementSetName are unset, the value of option elementSetName is used for piggyback searches. This means that for the high-level mode you only have to specify one elementSetName option rather than three. SRU Protocol behavior Current version of &yaz; does not take advantage of a result set id returned by the SRU server. Future versions might do, however. Since the ZOOM driver does not save result set IDs, any present (retrieval) is transformed to a SRU SearchRetrieveRequest with same query but, possibly, different offsets. Option schema specifies SRU schema for retrieval. However, options elementSetName and preferredRecordSyntax are ignored. Options start and count are supported by SRU. The remaining options piggyback, smallSetUpperBound, largeSetLowerBound, mediumSetPresentNumber, mediumSetElementSetName, smallSetElementSetName are unsupported. SRU supports CQL queries, not PQF. If PQF is used, however, the PQF query is transferred anyway using non-standard element pQuery in SRU SearchRetrieveRequest. Solr queries need to be done in Solr query format. Unfortunately, SRU and Solr do not define a database setting. Hence, databaseName is unsupported and ignored. However, the path part in host parameter for functions ZOOM_connecton_new and ZOOM_connection_connect acts as a database (at least for the &yaz; SRU server).
Records A record object is a retrieval record on the client side - created from result sets. void ZOOM_resultset_records(ZOOM_resultset r, ZOOM_record *recs, size_t start, size_t count); ZOOM_record ZOOM_resultset_record(ZOOM_resultset s, size_t pos); const char *ZOOM_record_get(ZOOM_record rec, const char *type, size_t *len); int ZOOM_record_error(ZOOM_record rec, const char **msg, const char **addinfo, const char **diagset); ZOOM_record ZOOM_record_clone(ZOOM_record rec); void ZOOM_record_destroy(ZOOM_record rec); References to temporary records are returned by functions ZOOM_resultset_records or ZOOM_resultset_record. If a persistent reference to a record is desired ZOOM_record_clone should be used. It returns a record reference that should be destroyed by a call to ZOOM_record_destroy. A single record is returned by function ZOOM_resultset_record that takes a position as argument. First record has position zero. If no record could be obtained NULL is returned. Error information for a record can be checked with ZOOM_record_error which returns non-zero (error code) if record is in error, called Surrogate Diagnostics in Z39.50. Function ZOOM_resultset_records retrieves a number of records from a result set. Parameter start and count specifies the range of records to be returned. Upon completion, the array recs[0], ..recs[count-1] holds record objects for the records. The array of records recs should be allocated prior the call ZOOM_resultset_records. Note that for those records that couldn't be retrieved from the target, recs[ ..] is set to NULL. In order to extract information about a single record, ZOOM_record_get is provided. The function returns a pointer to certain record information. The nature (type) of the pointer depends on the parameter, type. The type is a string of the format: format[;charset=from[/opacfrom][,to]][;format=v][;base64=xpath] If charset is given, then from specifies the character set of the record in its original form (as returned by the server), to specifies the output (returned) character set encoding. If to is omitted, then UTF-8 is assumed. If charset is not given, then no character set conversion takes place. OPAC records may be returned in a different set from the bibliographic MARC record. If this is this the case, opacfrom should be set to the character set of the OPAC record part. The format is generic but can only be used to specify XML indentation when the value v is 1 (format=1). The base64 allows a full record to be extracted from base64-encoded string in an XML document. Specifying the OPAC record character set requires YAZ 4.1.5 or later. Specifying the base64 parameter requires YAZ 4.2.35 or later. The format argument controls whether record data should be XML pretty-printed (post process operation). It is enabled only if format value v is 1 and the record content is XML well-formed. In addition, for certain types, the length len passed will be set to the size in bytes of the returned information. The following are the supported values for form. database The Database of the record is returned as a C null-terminated string. Return type const char *. syntax The transfer syntax of the record is returned as a C null-terminated string containing the symbolic name of the record syntax, e.g. Usmarc. Return type is const char *. schema The schema of the record is returned as a C null-terminated string. Return type is const char *. render The record is returned in a display friendly format. Upon completion, buffer is returned (type const char *) and length is stored in *len. raw The record is returned in the internal YAZ specific format. For GRS-1, Explain, and others, the raw data is returned as type Z_External * which is just the type for the member retrievalRecord in type NamePlusRecord. For SUTRS and octet aligned record (including all MARCs) the octet buffer is returned and the length of the buffer. xml The record is returned in XML if possible. SRU, Solr and Z39.50 records with transfer syntax XML are returned verbatim. MARC records are returned in MARCXML (converted from ISO2709 to MARCXML by YAZ). OPAC records are also converted to XML and the bibliographic record is converted to MARCXML (when possible). GRS-1 records are not supported for this form. Upon completion, the XML buffer is returned (type const char *) and length is stored in *len. opac OPAC information for record is returned in XML if an OPAC record is present at the position given. If no OPAC record is present, a NULL pointer is returned. txml The record is returned in TurboMARC if possible. SRU and Z39.50 records with transfer syntax XML are returned verbatim. MARC records are returned in TurboMARC (converted from ISO2709 to TurboMARC by YAZ). Upon completion, the XML buffer is returned (type const char *) and length is stored in *len. json Like xml, but MARC records are converted to MARC-in-JSON. Most MARC21 records uses the MARC-8 character set encoding. An application that wishes to display in Latin-1 would use render; charset=marc8,iso-8859-1 Z39.50 Protocol behavior The functions ZOOM_resultset_record and ZOOM_resultset_records inspects the client-side record cache. Records not found in cache are fetched using Present. The functions may block (and perform network I/O) - even though option async is 1, because they return records objects. (And there's no way to return records objects without retrieving them!) There is a trick, however, in the usage of function ZOOM_resultset_records that allows for delayed retrieval (and makes it non-blocking). By using a null pointer for recs you're indicating you're not interested in getting records objects now. SRU/Solr Protocol behavior The ZOOM driver for SRU/Solr treats records returned by a SRU/Solr server as if they where Z39.50 records with transfer syntax XML and no element set name or database name. ZOOM Facets Facets are only supported for a few Z39.50 targets. It is a relatively new non-standard Z39.50 extension (see facets.asn in the YAZ source). However, facets are usually supported for Solr and SRU 2.0 targets. Facets may be specified by the facets option before a search is sent. See for the notation. For inspection of the returned facets, the following functions are available: ZOOM_facet_field *ZOOM_resultset_facets(ZOOM_resultset r); size_t ZOOM_resultset_facets_size(ZOOM_resultset r); ZOOM_facet_field ZOOM_resultset_get_facet_field(ZOOM_resultset r, const char *facet_name); ZOOM_facet_field ZOOM_resultset_get_facet_field_by_index(ZOOM_resultset r, int pos); const char *ZOOM_facet_field_name(ZOOM_facet_field facet_field); size_t ZOOM_facet_field_term_count(ZOOM_facet_field facet_field); const char *ZOOM_facet_field_get_term(ZOOM_facet_field facet_field, size_t idx, int *freq); References to temporary structures are returned by all functions. They are only valid as long the Result set is valid. All facet fields may be returned by a call to ZOOM_resultset_facets. The length of the array is given by ZOOM_resultset_facets_size. The array is zero-based and the last entry will be at ZOOM_resultset_facets_size(result_set)-1. Facet fields can also be fetched via its name using ZOOM_resultset_get_facet_field. Or by its index (starting from 0) by a call to ZOOM_resultset_get_facet_field_by_index. Both of these functions return NULL if name is not found or index is out of bounds. Function ZOOM_facet_field_name gets the request facet name from a returned facet field. Function ZOOM_facet_field_get_term returns the idx'th term and term count for a facet field. Idx must between 0 and ZOOM_facet_field_term_count-1, otherwise the returned reference will be NULL. On a valid idx, the value of the freq reference will be the term count. The freq parameter must be valid pointer to integer. Scan This section describes an interface for Scan. Scan is not an official part of the ZOOM model yet. The result of a scan operation is the ZOOM_scanset which is a set of terms returned by a target. The Scan interface is supported for both Z39.50, SRU and Solr. ZOOM_scanset ZOOM_connection_scan(ZOOM_connection c, const char *startpqf); ZOOM_scanset ZOOM_connection_scan1(ZOOM_connection c, ZOOM_query q); size_t ZOOM_scanset_size(ZOOM_scanset scan); const char *ZOOM_scanset_term(ZOOM_scanset scan, size_t pos, size_t *occ, size_t *len); const char *ZOOM_scanset_display_term(ZOOM_scanset scan, size_t pos, size_t *occ, size_t *len); void ZOOM_scanset_destroy(ZOOM_scanset scan); const char *ZOOM_scanset_option_get(ZOOM_scanset scan, const char *key); void ZOOM_scanset_option_set(ZOOM_scanset scan, const char *key, const char *val); The scan set is created by function ZOOM_connection_scan which performs a scan operation on the connection using the specified startpqf. If the operation was successful, the size of the scan set can be retrieved by a call to ZOOM_scanset_size. Like result sets, the items are numbered 0..size-1. To obtain information about a particular scan term, call function ZOOM_scanset_term. This function takes a scan set offset pos and returns a pointer to a raw term or NULL if non-present. If present, the occ and len are set to the number of occurrences and the length of the actual term respectively. ZOOM_scanset_display_term is similar to ZOOM_scanset_term except that it returns the display term rather than the raw term. In a few cases, the term is different from display term. Always use the display term for display and the raw term for subsequent scan operations (to get more terms, next scan result, etc). A scan set may be freed by a call to function ZOOM_scanset_destroy. Functions ZOOM_scanset_option_get and ZOOM_scanset_option_set retrieves and sets an option respectively. The startpqf is a subset of PQF, namely the Attributes+Term part. Multiple @attr can be used. For example to scan in title (complete) phrases: @attr 1=4 @attr 6=2 "science o" The ZOOM_connecton_scan1 is a newer and more generic alternative to ZOOM_connection_scan which allows to use both CQL and PQF for Scan. ZOOM Scan Set Options Option Description Default numberNumber of Scan Terms requested in next scan. After scan it holds the actual number of terms returned. 20 positionPreferred Position of term in response in next scan; actual position after completion of scan. 1 stepSizeStep Size 0 scanStatusAn integer indicating the Scan Status of last scan. 0 rpnCharsetCharacter set for RPN terms. If this is set, ZOOM C will assume that the ZOOM application is running UTF-8. Terms in RPN queries are then converted to the rpnCharset. If this is unset, ZOOM C will not assume any encoding of RPN terms and no conversion is performed. none
Extended Services ZOOM offers an interface to a subset of the Z39.50 extended services as well as a few privately defined ones: Z39.50 Item Order (ILL). See . Record Update. This allows a client to insert, modify or delete records. See . Database Create. This a non-standard feature. Allows a client to create a database. See . Database Drop. This a non-standard feature. Allows a client to delete/drop a database. See . Commit operation. This a non-standard feature. Allows a client to commit operations. See . To create an extended service operation, a ZOOM_package must be created. The operation is a five step operation. The package is created, package is configured by means of options, the package is sent, result is inspected (by means of options), the package is destroyed. ZOOM_package ZOOM_connection_package(ZOOM_connection c, ZOOM_options options); const char *ZOOM_package_option_get(ZOOM_package p, const char *key); void ZOOM_package_option_set(ZOOM_package p, const char *key, const char *val); void ZOOM_package_send(ZOOM_package p, const char *type); void ZOOM_package_destroy(ZOOM_package p); The ZOOM_connection_package creates a package for the connection given using the options specified. Functions ZOOM_package_option_get and ZOOM_package_option_set gets and sets options. ZOOM_package_send sends the package the via connection specified in ZOOM_connection_package. The type specifies the actual extended service package type to be sent. Extended Service Type Type Description itemorderItem Order updateRecord Update createDatabase Create dropDatabase Drop commitCommit Operation
Extended Service Common Options Option Description Default package-name Extended Service Request package name. Must be specified as part of a request. none user-id User ID of Extended Service Package. Is a request option. none function Function of package - one of create, delete, modify. Is a request option. create waitAction Wait action for package. Possible values: wait, waitIfPossible, dontWait or dontReturnPackage. waitIfPossible operationStatus Read after response. One of: done, accepted or failure. Inspect with ZOOM_pacakage_option_get. none targetReference Target Reference. This is part of the response as returned by the target. Read it after a successful operation. Inspect with ZOOM_pacakage_option_get. none taskStatus Read after response: One of: pending, active, complete, aborted. none esError Read after response: is set to diagnostic code for response. none esAddinfo Read after response: is set to additional info for response. none
Item Order For Item Order, type must be set to itemorder in ZOOM_package_send. Item Order Options Option Description Default contact-name ILL contact name none contact-phone ILL contact phone none contact-email ILL contact email none itemorder-setname Name of result set for record default itemorder-item Position for item (record) requested. An integer 1
There are two variants of item order: ILL-variant and XML document variant. In order to use the XML variant the setting doc must hold the XML item order document. If that setting is unset, the ILL-variant is used. ILL Request Options Option protocol-version-numtransaction-id,initial-requester-id,person-or-institution-symbol,persontransaction-id,initial-requester-id,person-or-institution-symbol,institutiontransaction-id,initial-requester-id,name-of-person-or-institution,name-of-persontransaction-id,initial-requester-id,name-of-person-or-institution,name-of-institutiontransaction-id,transaction-group-qualifiertransaction-id,transaction-qualifiertransaction-id,sub-transaction-qualifierservice-date-time,this,dateservice-date-time,this,timeservice-date-time,original,dateservice-date-time,original,timerequester-id,person-or-institution-symbol,personrequester-id,person-or-institution-symbol,institutionrequester-id,name-of-person-or-institution,name-of-personrequester-id,name-of-person-or-institution,name-of-institutionresponder-id,person-or-institution-symbol,personresponder-id,person-or-institution-symbol,institutionresponder-id,name-of-person-or-institution,name-of-personresponder-id,name-of-person-or-institution,name-of-institutiontransaction-typedelivery-address,postal-address,name-of-person-or-institution,name-of-persondelivery-address,postal-address,name-of-person-or-institution,name-of-institutiondelivery-address,postal-address,extended-postal-delivery-addressdelivery-address,postal-address,street-and-numberdelivery-address,postal-address,post-office-boxdelivery-address,postal-address,citydelivery-address,postal-address,regiondelivery-address,postal-address,countrydelivery-address,postal-address,postal-codedelivery-address,electronic-address,telecom-service-identifierdelivery-address,electronic-address,telecom-service-addreessbilling-address,postal-address,name-of-person-or-institution,name-of-personbilling-address,postal-address,name-of-person-or-institution,name-of-institutionbilling-address,postal-address,extended-postal-delivery-addressbilling-address,postal-address,street-and-numberbilling-address,postal-address,post-office-boxbilling-address,postal-address,citybilling-address,postal-address,regionbilling-address,postal-address,countrybilling-address,postal-address,postal-codebilling-address,electronic-address,telecom-service-identifierbilling-address,electronic-address,telecom-service-addreessill-service-typerequester-optional-messages,can-send-RECEIVEDrequester-optional-messages,can-send-RETURNEDrequester-optional-messages,requester-SHIPPEDrequester-optional-messages,requester-CHECKED-INsearch-type,level-of-servicesearch-type,need-before-datesearch-type,expiry-datesearch-type,expiry-flagplace-on-holdclient-id,client-nameclient-id,client-statusclient-id,client-identifieritem-id,item-typeitem-id,call-numberitem-id,authoritem-id,titleitem-id,sub-titleitem-id,sponsoring-bodyitem-id,place-of-publicationitem-id,publisheritem-id,series-title-numberitem-id,volume-issueitem-id,editionitem-id,publication-dateitem-id,publication-date-of-componentitem-id,author-of-articleitem-id,title-of-articleitem-id,paginationitem-id,ISBNitem-id,ISSNitem-id,additional-no-lettersitem-id,verification-reference-sourcecopyright-complicanceretry-flagforward-flagrequester-noteforward-note
Record Update For Record Update, type must be set to update in ZOOM_package_send. Record Update Options Option Description Default action The update action. One of specialUpdate, recordInsert, recordReplace, recordDelete, elementUpdate. specialUpdate (recordInsert for updateVersion=1 which does not support specialUpdate) recordIdOpaque Opaque Record ID none recordIdNumber Record ID number none recordIdString Record ID string none record The record itself none recordOpaque Specifies an opaque record which is encoded as an ASN.1 ANY type with the OID as given by option syntax (see below). Option recordOpaque is an alternative to record - and record option (above) is ignored if recordOpaque is set. This option is only available in YAZ 3.0.35 and later, and is meant to facilitate Updates with servers from OCLC. none syntax The record syntax (transfer syntax). Is a string that is a known record syntax. no syntax databaseName Database from connection object Default correlationInfo.note Correlation Info Note (string) none correlationInfo.id Correlation Info ID (integer) none elementSetName Element Set for Record none updateVersion Record Update version which holds one of the values 1, 2 or 3. Each version has a distinct OID: 1.2.840.10003.9.5 (first version) , 1.2.840.10003.9.5.1 (second version) and 1.2.840.10003.9.5.1.1 (third and newest version). 3
Database Create For Database Create, type must be set to create in ZOOM_package_send. Database Create Options Option Description Default databaseName Database from connection object Default
Database Drop For Database Drop, type must be set to drop in ZOOM_package_send. Database Drop Options Option Description Default databaseName Database from connection object Default
Commit Operation For Commit, type must be set to commit in ZOOM_package_send. Protocol behavior All the extended services are Z39.50-only. The database create, drop, and commit services are privately defined operations. Refer to esadmin.asn in YAZ for the ASN.1 definitions.
Options Most &zoom; objects provide a way to specify options to change behavior. From an implementation point of view, a set of options is just like an associative array / hash. ZOOM_options ZOOM_options_create(void); ZOOM_options ZOOM_options_create_with_parent(ZOOM_options parent); void ZOOM_options_destroy(ZOOM_options opt); const char *ZOOM_options_get(ZOOM_options opt, const char *name); void ZOOM_options_set(ZOOM_options opt, const char *name, const char *v); typedef const char *(*ZOOM_options_callback) (void *handle, const char *name); ZOOM_options_callback ZOOM_options_set_callback(ZOOM_options opt, ZOOM_options_callback c, void *handle); Query conversions int ZOOM_query_cql2rpn(ZOOM_query s, const char *cql_str, ZOOM_connection conn); int ZOOM_query_ccl2rpn(ZOOM_query s, const char *ccl_str, const char *config, int *ccl_error, const char **error_string, int *error_pos); ZOOM_query_cql2rpn translates the CQL string, client-side, into RPN which may be passed to the server. This is useful for servers that don't themselves support CQL, for which ZOOM_query_cql is useless. 'conn' is used only as a place to stash diagnostics if compilation fails; if this information is not needed, a null pointer may be used. The CQL conversion is driven by option cqlfile from connection conn. This specifies a conversion file (e.g. pqf.properties) which must be present. ZOOM_query_ccl2rpn translates the CCL string, client-side, into RPN which may be passed to the server. The conversion is driven by the specification given by config. Upon completion 0 is returned on success; -1 is returned on failure. On failure error_string and error_pos hold the error message and position of first error in original CCL string. Events If you're developing non-blocking applications, you have to deal with events. int ZOOM_event(int no, ZOOM_connection *cs); The ZOOM_event executes pending events for a number of connections. Supply the number of connections in no and an array of connections in cs (cs[0] ... cs[no-1]). A pending event could be sending a search, receiving a response, etc. When an event has occurred for one of the connections, this function returns a positive integer n denoting that an event occurred for connection cs[n-1]. When no events are pending for the connections, a value of zero is returned. To ensure that all outstanding requests are performed, call this function repeatedly until zero is returned. If ZOOM_event returns, and returns non-zero, the last event that occurred can be expected. int ZOOM_connection_last_event(ZOOM_connection cs); ZOOM_connection_last_event returns an event type (integer) for the last event. ZOOM Event IDs Event Description ZOOM_EVENT_NONE No event has occurred ZOOM_EVENT_CONNECT TCP/IP connect has initiated ZOOM_EVENT_SEND_DATA Data has been transmitted (sending) ZOOM_EVENT_RECV_DATA Data has been received ZOOM_EVENT_TIMEOUT Timeout ZOOM_EVENT_UNKNOWN Unknown event ZOOM_EVENT_SEND_APDU An APDU has been transmitted (sending) ZOOM_EVENT_RECV_APDU An APDU has been received ZOOM_EVENT_RECV_RECORD A result-set record has been received ZOOM_EVENT_RECV_SEARCH A search result has been received
Generic server Introduction If you aren't into documentation, a good way to learn how the back end interface works is to look at the backend.h file. Then, look at the small dummy-server in ztest/ztest.c. The backend.h file also makes a good reference, once you've chewed your way through the prose of this file. If you have a database system that you would like to make available by means of Z39.50 or SRU, &yaz; basically offers two options. You can use the APIs provided by the &asn;, &odr;, and &comstack; modules to create and decode PDUs, and exchange them with a client. Using this low-level interface gives you access to all fields and options of the protocol, and you can construct your server as close to your existing database as you like. It is also a fairly involved process, requiring you to set up an event-handling mechanism, protocol state machine, etc. To simplify server implementation, we have implemented a compact and simple, but reasonably full-functioned server-frontend that will handle most of the protocol mechanics, while leaving you to concentrate on your database interface. The backend interface was designed in anticipation of a specific integration task, while still attempting to achieve some degree of generality. We realize fully that there are points where the interface can be improved significantly. If you have specific functions or parameters that you think could be useful, send us a mail (or better, sign on to the mailing list referred to in the top-level README file). We will try to fit good suggestions into future releases, to the extent that it can be done without requiring too many structural changes in existing applications. The &yaz; server does not support XCQL. The Database Frontend We refer to this software as a generic database frontend. Your database system is the backend database, and the interface between the two is called the backend API. The backend API consists of a small number of function handlers and structure definitions. You are required to provide the main() routine for the server (which can be quite simple), as well as a set of handlers to match each of the prototypes. The interface functions that you write can use any mechanism you like to communicate with your database system: You might link the whole thing together with your database application and access it by function calls; you might use IPC to talk to a database server somewhere; or you might link with third-party software that handles the communication for you (like a commercial database client library). At any rate, the handlers will perform the tasks of: Initialization. Searching. Fetching records. Scanning the database index (optional - if you wish to implement SCAN). Extended Services (optional). Result-Set Delete (optional). Result-Set Sort (optional). Return Explain for SRU (optional). (more functions will be added in time to support as much of Z39.50-1995 as possible). The Backend API The header file that you need to use the interface are in the include/yaz directory. It's called backend.h. It will include other files from the include/yaz directory, so you'll probably want to use the -I option of your compiler to tell it where to find the files. When you run make in the top-level &yaz; directory, everything you need to create your server is to link with the lib/libyaz.la library. Your main() Routine As mentioned, your main() routine can be quite brief. If you want to initialize global parameters, or read global configuration tables, this is the place to do it. At the end of the routine, you should call the function int statserv_main(int argc, char **argv, bend_initresult *(*bend_init)(bend_initrequest *r), void (*bend_close)(void *handle)); The third and fourth arguments are pointers to handlers. Handler bend_init is called whenever the server receives an Initialize Request, so it serves as a Z39.50 session initializer. The bend_close handler is called when the session is closed. statserv_main will establish listening sockets according to the parameters given. When connection requests are received, the event handler will typically fork() and create a sub-process to handle a new connection. Alternatively the server may be setup to create threads for each connection. If you do use global variables and forking, you should be aware, then, that these cannot be shared between associations, unless you explicitly disable forking by command line parameters. The server provides a mechanism for controlling some of its behavior without using command-line options. The function statserv_options_block *statserv_getcontrol(void); will return a pointer to a struct statserv_options_block describing the current default settings of the server. The structure contains these elements: int dynamic A boolean value, which determines whether the server will fork on each incoming request (TRUE), or not (FALSE). Default is TRUE. This flag is only read by UNIX-based servers (WIN32-based servers do not fork). int threads A boolean value, which determines whether the server will create a thread on each incoming request (TRUE), or not (FALSE). Default is FALSE. This flag is only read by UNIX-based servers that offer POSIX Threads support. WIN32-based servers always operate in threaded mode. int inetd A boolean value, which determines whether the server will operate under a UNIX INET daemon (inetd). Default is FALSE. char logfile[ODR_MAXNAME+1] File for diagnostic output ("": stderr). char apdufile[ODR_MAXNAME+1] Name of file for logging incoming and outgoing APDUs ("": don't log APDUs, "-": stderr). char default_listen[1024] Same form as the command-line specification of listener address. "": no default listener address. Default is to listen at "tcp:@:9999". You can only specify one default listener address in this fashion. enum oid_proto default_proto; Either PROTO_Z3950 or PROTO_SR. Default is PROTO_Z39_50. int idle_timeout; Maximum session idle-time, in minutes. Zero indicates no (infinite) timeout. Default is 15 minutes. int maxrecordsize; Maximum permissible record (message) size. Default is 64 MB. This amount of memory will only be allocated if a client requests a very large amount of records in one operation (or a big record). Set it to a lower number if you are worried about resource consumption on your host system. char configname[ODR_MAXNAME+1] Passed to the backend when a new connection is received. char setuid[ODR_MAXNAME+1] Set user id to the user specified, after binding the listener addresses. void (*bend_start)(struct statserv_options_block *p) Pointer to function which is called after the command line options have been parsed - but before the server starts listening. For forked UNIX servers, this handler is called in the mother process; for threaded servers, this handler is called in the main thread. The default value of this pointer is NULL in which case it isn't invoked by the frontend server. When the server operates as an NT service, this handler is called whenever the service is started. void (*bend_stop)(struct statserv_options_block *p) Pointer to function which is called whenever the server has stopped listening for incoming connections. This function pointer has a default value of NULL in which case it isn't called. When the server operates as an NT service, this handler is called whenever the service is stopped. void *handle User defined pointer (default value NULL). This is a per-server handle that can be used to specify "user-data". Do not confuse this with the session-handle as returned by bend_init. The pointer returned by statserv_getcontrol points to a static area. You are allowed to change the contents of the structure, but the changes will not take effect until you call void statserv_setcontrol(statserv_options_block *block); You should generally update this structure before calling statserv_main(). The Backend Functions For each service of the protocol, the backend interface declares one or two functions. You are required to provide implementations of the functions representing the services that you wish to implement. Init bend_initresult (*bend_init)(bend_initrequest *r); This handler is called once for each new connection request, after a new process/thread has been created, and an Initialize Request has been received from the client. The pointer to the bend_init handler is passed in the call to statserv_start. This handler is also called when operating in SRU mode - when a connection has been made (even though SRU does not offer this service). Unlike previous versions of YAZ, the bend_init also serves as a handler that defines the Z39.50 services that the backend intends to support. Pointers to all service handlers, including search - and fetch must be specified here in this handler. The request - and result structures are defined as typedef struct bend_initrequest { /** \brief user/name/password to be read */ Z_IdAuthentication *auth; /** \brief encoding stream (for results) */ ODR stream; /** \brief printing stream */ ODR print; /** \brief decoding stream (use stream for results) */ ODR decode; /** \brief reference ID */ Z_ReferenceId *referenceId; /** \brief peer address of client */ char *peer_name; /** \brief character set and language negotiation see include/yaz/z-charneg.h */ Z_CharSetandLanguageNegotiation *charneg_request; /** \brief character negotiation response */ Z_External *charneg_response; /** \brief character set (encoding) for query terms This is NULL by default. It should be set to the native character set that the backend assumes for query terms */ char *query_charset; /** \brief whether query_charset also applies to records Is 0 (No) by default. Set to 1 (yes) if records is in the same character set as queries. If in doubt, use 0 (No). */ int records_in_same_charset; char *implementation_id; char *implementation_name; char *implementation_version; /** \brief Z39.50 sort handler */ int (*bend_sort)(void *handle, bend_sort_rr *rr); /** \brief SRU/Z39.50 search handler */ int (*bend_search)(void *handle, bend_search_rr *rr); /** \brief SRU/Z39.50 fetch handler */ int (*bend_fetch)(void *handle, bend_fetch_rr *rr); /** \brief SRU/Z39.50 present handler */ int (*bend_present)(void *handle, bend_present_rr *rr); /** \brief Z39.50 extended services handler */ int (*bend_esrequest) (void *handle, bend_esrequest_rr *rr); /** \brief Z39.50 delete result set handler */ int (*bend_delete)(void *handle, bend_delete_rr *rr); /** \brief Z39.50 scan handler */ int (*bend_scan)(void *handle, bend_scan_rr *rr); /** \brief Z39.50 segment facility handler */ int (*bend_segment)(void *handle, bend_segment_rr *rr); /** \brief SRU explain handler */ int (*bend_explain)(void *handle, bend_explain_rr *rr); /** \brief SRU scan handler */ int (*bend_srw_scan)(void *handle, bend_scan_rr *rr); /** \brief SRU record update handler */ int (*bend_srw_update)(void *handle, bend_update_rr *rr); /** \brief whether named result sets are supported (0=disable, 1=enable) */ int named_result_sets; } bend_initrequest; typedef struct bend_initresult { int errcode; /* 0==OK */ char *errstring; /* system error string or NULL */ void *handle; /* private handle to the backend module */ } bend_initresult; In general, the server frontend expects that the bend_*result pointer that you return is valid at least until the next call to a bend_* function. This applies to all of the functions described herein. The parameter structure passed to you in the call belongs to the server frontend, and you should not make assumptions about its contents after the current function call has completed. In other words, if you want to retain any of the contents of a request structure, you should copy them. The errcode should be zero if the initialization of the backend went well. Any other value will be interpreted as an error. The errstring isn't used in the current version, but one option would be to stick it in the initResponse as a VisibleString. The handle is the most important parameter. It should be set to some value that uniquely identifies the current session to the backend implementation. It is used by the frontend server in any future calls to a backend function. The typical use is to set it to point to a dynamically allocated state structure that is private to your backend module. The auth member holds the authentication information part of the Z39.50 Initialize Request. Interpret this if your server requires authentication. The members peer_name, implementation_id, implementation_name and implementation_version holds DNS of client, ID of implementor, name of client (Z39.50) implementation - and version. The bend_ - members are set to NULL when bend_init is called. Modify the pointers by setting them to point to backend functions. Search and Retrieve We now describe the handlers that are required to support search - and retrieve. You must support two functions - one for search - and one for fetch (retrieval of one record). If desirable you can provide a third handler which is called when a present request is received which allows you to optimize retrieval of multiple-records. int (*bend_search) (void *handle, bend_search_rr *rr); typedef struct { char *setname; /* name to give to this set */ int replace_set; /* replace set, if it already exists */ int num_bases; /* number of databases in list */ char **basenames; /* databases to search */ Z_ReferenceId *referenceId;/* reference ID */ Z_Query *query; /* query structure */ ODR stream; /* encode stream */ ODR decode; /* decode stream */ ODR print; /* print stream */ bend_request request; bend_association association; int *fd; int hits; /* number of hits */ int errcode; /* 0==OK */ char *errstring; /* system error string or NULL */ Z_OtherInformation *search_info; /* additional search info */ char *srw_sortKeys; /* holds SRU/SRW sortKeys info */ char *srw_setname; /* holds SRU/SRW generated resultsetID */ int *srw_setnameIdleTime; /* holds SRU/SRW life-time */ int estimated_hit_count; /* if hit count is estimated */ int partial_resultset; /* if result set is partial */ } bend_search_rr; The bend_search handler is a fairly close approximation of a protocol Z39.50 Search Request - and Response PDUs. The setname is the resultSetName from the protocol. You are required to establish a mapping between the set name and whatever your backend database likes to use. Similarly, the replace_set is a boolean value corresponding to the resultSetIndicator field in the protocol. num_bases/basenames is a length of/array of character pointers to the database names provided by the client. The query is the full query structure as defined in the protocol ASN.1 specification. It can be either of the possible query types, and it's up to you to determine if you can handle the provided query type. Rather than reproduce the C interface here, we'll refer you to the structure definitions in the file include/yaz/z-core.h. If you want to look at the attributeSetId OID of the RPN query, you can either match it against your own internal tables, or you can use the OID tools. The structure contains a number of hits, and an errcode/errstring pair. If an error occurs during the search, or if you're unhappy with the request, you should set the errcode to a value from the BIB-1 diagnostic set. The value will then be returned to the user in a nonsurrogate diagnostic record in the response. The errstring, if provided, will go in the addinfo field. Look at the protocol definition for the defined error codes, and the suggested uses of the addinfo field. The bend_search handler is also called when the frontend server receives a SRU SearchRetrieveRequest. For SRU, a CQL query is usually provided by the client. The CQL query is available as part of Z_Query structure (note that CQL is now part of Z39.50 via an external). To support CQL in existing implementations that only do Type-1, we refer to the CQL-to-PQF tool described here. To maintain backwards compatibility, the frontend server of yaz always assume that error codes are BIB-1 diagnostics. For SRU operation, a Bib-1 diagnostic code is mapped to SRU diagnostic. int (*bend_fetch) (void *handle, bend_fetch_rr *rr); typedef struct bend_fetch_rr { char *setname; /* set name */ int number; /* record number */ Z_ReferenceId *referenceId;/* reference ID */ Odr_oid *request_format; /* format, transfer syntax (OID) */ Z_RecordComposition *comp; /* Formatting instructions */ ODR stream; /* encoding stream - memory source if req */ ODR print; /* printing stream */ char *basename; /* name of database that provided record */ int len; /* length of record or -1 if structured */ char *record; /* record */ int last_in_set; /* is it? */ Odr_oid *output_format; /* response format/syntax (OID) */ int errcode; /* 0==success */ char *errstring; /* system error string or NULL */ int surrogate_flag; /* surrogate diagnostic */ char *schema; /* string record schema input/output */ } bend_fetch_rr; The frontend server calls the bend_fetch handler when it needs database records to fulfill a Z39.50 Search Request, a Z39.50 Present Request or a SRU SearchRetrieveRequest. The setname is simply the name of the result set that holds the reference to the desired record. The number is the offset into the set (with 1 being the first record in the set). The format field is the record format requested by the client (See ). A value of NULL for format indicates that the client did not request a specific format. The stream argument is an &odr; stream which should be used for allocating space for structured data records. The stream will be reset when all records have been assembled, and the response package has been transmitted. For unstructured data, the backend is responsible for maintaining a static or dynamic buffer for the record between calls. If a SRU SearchRetrieveRequest is received by the frontend server, the referenceId is NULL and the format (transfer syntax) is the OID for XML. The schema for SRU is stored in both the Z_RecordComposition structure and schema (simple string). In the structure, the basename is the name of the database that holds the record. len is the length of the record returned, in bytes, and record is a pointer to the record. last_in_set should be nonzero only if the record returned is the last one in the given result set. errcode and errstring, if given, will be interpreted as a global error pertaining to the set, and will be returned in a non-surrogate-diagnostic. If you wish to return the error as a surrogate-diagnostic (local error) you can do this by setting surrogate_flag to 1 also. If the len field has the value -1, then record is assumed to point to a constructed data type. The format field will be used to determine which encoder should be used to serialize the data. If your backend generates structured records, it should use odr_malloc() on the provided stream for allocating data: This allows the frontend server to keep track of the record sizes. The format field is mapped to an object identifier in the direct reference of the resulting EXTERNAL representation of the record. The current version of &yaz; only supports the direct reference mode. int (*bend_present) (void *handle, bend_present_rr *rr); typedef struct { char *setname; /* set name */ int start; int number; /* record number */ Odr_oid *format; /* format, transfer syntax (OID) */ Z_ReferenceId *referenceId;/* reference ID */ Z_RecordComposition *comp; /* Formatting instructions */ ODR stream; /* encoding stream - memory source if required */ ODR print; /* printing stream */ bend_request request; bend_association association; int hits; /* number of hits */ int errcode; /* 0==OK */ char *errstring; /* system error string or NULL */ } bend_present_rr; The bend_present handler is called when the server receives a Z39.50 Present Request. The setname, start and number is the name of the result set - start position - and number of records to be retrieved respectively. format and comp is the preferred transfer syntax and element specifications of the present request. Note that this is handler serves as a supplement for bend_fetch and need not to be defined in order to support search - and retrieve. Delete For back-ends that supports delete of a result set, only one handler must be defined. int (*bend_delete)(void *handle, bend_delete_rr *rr); typedef struct bend_delete_rr { int function; int num_setnames; char **setnames; Z_ReferenceId *referenceId; int delete_status; /* status for the whole operation */ int *statuses; /* status each set - indexed as setnames */ ODR stream; ODR print; } bend_delete_rr; The delete set function definition is rather primitive, mostly because we have had no practical need for it as of yet. If someone wants to provide a full delete service, we'd be happy to add the extra parameters that are required. Are there clients out there that will actually delete sets they no longer need? Scan For servers that wish to offer the scan service one handler must be defined. int (*bend_scan)(void *handle, bend_scan_rr *rr); typedef enum { BEND_SCAN_SUCCESS, /* ok */ BEND_SCAN_PARTIAL /* not all entries could be found */ } bend_scan_status; typedef struct bend_scan_rr { int num_bases; /* number of elements in databaselist */ char **basenames; /* databases to search */ Odr_oid *attributeset; Z_ReferenceId *referenceId; /* reference ID */ Z_AttributesPlusTerm *term; ODR stream; /* encoding stream - memory source if required */ ODR print; /* printing stream */ int *step_size; /* step size */ int term_position; /* desired index of term in result list/returned */ int num_entries; /* number of entries requested/returned */ /* scan term entries. The called handler does not have to allocate this. Size of entries is num_entries (see above) */ struct scan_entry *entries; bend_scan_status status; int errcode; char *errstring; char *scanClause; /* CQL scan clause */ char *setname; /* Scan in result set (NULL if omitted) */ } bend_scan_rr; This backend server handles both Z39.50 scan and SRU scan. In order for a handler to distinguish between SRU (CQL) scan Z39.50 Scan, it must check for a non-NULL value of scanClause. If designed today, it would be a choice using a union or similar, but that would break binary compatibility with existing servers. Application Invocation The finished application has the following invocation syntax (by way of statserv_main()): &gfs-synopsis; The options are: &gfs-options; A listener specification consists of a transport mode followed by a colon (:) followed by a listener address. The transport mode is either tcp, unix: or ssl. For TCP and SSL, an address has the form hostname | IP-number [: portnumber] The port number defaults to 210 (standard Z39.50 port). For UNIX, the address is the filename of socket. For TCP/IP and SSL, the special hostnames @, maps to IN6ADDR_ANY_INIT with IPV4 binding as well (bindv6only=0), The special hostname @4 binds to INADDR_ANY (IPV4 only listener). The special hostname @6 binds to IN6ADDR_ANY_INIT with bindv6only=1 (IPV6 only listener). Running the GFS on Unix Assuming the server application appname is started as root, the following will make it listen on port 210. The server will change identity to nobody and write its log to /var/log/app.log. application -l /var/log/app.log -u nobody tcp:@:210 The server will accept Z39.50 requests and offer SRU service on port 210. Setting up Apache as SRU Frontend If you use Apache as your public web server and want to offer HTTP port 80 access to the YAZ server on 210, you can use the ProxyPass directive. If you have virtual host srw.mydomain you can use the following directives in Apache's httpd.conf: <VirtualHost *> ErrorLog /home/srw/logs/error_log TransferLog /home/srw/logs/access_log ProxyPass / http://srw.mydomain:210/ </VirtualHost> The above is for the Apache 1.3 series. Running a server with local access only A server that is only being accessed from the local host should listen on UNIX file socket rather than an Internet socket. To listen on /tmp/mysocket start the server as follows: application unix:/tmp/mysocket GFS Configuration and Virtual Hosts &gfs-virtual; The Z39.50 ASN.1 Module Introduction The &asn; module provides you with a set of C struct definitions for the various PDUs of the Z39.50 protocol, as well as for the complex types appearing within the PDUs. For the primitive data types, the C representation often takes the form of an ordinary C language type, such as Odr_int which is equivalent to an integral C integer. For ASN.1 constructs that have no direct representation in C, such as general octet strings and bit strings, the &odr; module (see section The ODR Module) provides auxiliary definitions. The &asn; module is located in sub directory z39.50. There you'll find C files that implement encoders and decoders for the Z39.50 types. You'll also find the protocol definitions: z3950v3.asn, esupdate.asn, and others. Preparing PDUs A structure representing a complex ASN.1 type doesn't in itself contain the members of that type. Instead, the structure contains pointers to the members of the type. This is necessary, in part, to allow a mechanism for specifying which of the optional structure (SEQUENCE) members are present, and which are not. It follows that you will need to somehow provide space for the individual members of the structure, and set the pointers to refer to the members. The conversion routines don't care how you allocate and maintain your C structures - they just follow the pointers that you provide. Depending on the complexity of your application, and your personal taste, there are at least three different approaches that you may take when you allocate the structures. You can use static or automatic local variables in the function that prepares the PDU. This is a simple approach, and it provides the most efficient form of memory management. While it works well for flat PDUs like the InitRequest, it will generally not be sufficient for say, the generation of an arbitrarily complex RPN query structure. You can individually create the structure and its members using the malloc(2) function. If you want to ensure that the data is freed when it is no longer needed, you will have to define a function that individually releases each member of a structure before freeing the structure itself. You can use the odr_malloc() function (see for details). When you use odr_malloc(), you can release all of the allocated data in a single operation, independent of any pointers and relations between the data. The odr_malloc() function is based on a "nibble-memory" scheme, in which large portions of memory are allocated, and then gradually handed out with each call to odr_malloc(). The next time you call odr_reset(), all of the memory allocated since the last call is recycled for future use (actually, it is placed on a free-list). You can combine all of the methods described here. This will often be the most practical approach. For instance, you might use odr_malloc() to allocate an entire structure and some of its elements, while you leave other elements pointing to global or per-session default variables. The &asn; module provides an important aid in creating new PDUs. For each of the PDU types (say, Z_InitRequest), a function is provided that allocates and initializes an instance of that PDU type for you. In the case of the InitRequest, the function is simply named zget_InitRequest(), and it sets up reasonable default value for all of the mandatory members. The optional members are generally initialized to null pointers. This last aspect is very important: it ensures that if the PDU definitions are extended after you finish your implementation (to accommodate new versions of the protocol, say), you won't get into trouble with uninitialized pointers in your structures. The functions use odr_malloc() to allocate the PDUs and its members, so you can free everything again with a single call to odr_reset(). We strongly recommend that you use the zget_* functions whenever you are preparing a PDU (in a C++ API, the zget_ functions would probably be promoted to constructors for the individual types). The prototype for the individual PDU types generally look like this: Z_<type> *zget_<type>(ODR o); e.g.: Z_InitRequest *zget_InitRequest(ODR o); The &odr; handle should generally be your encoding stream, but it needn't be. As well as the individual PDU functions, a function zget_APDU() is provided, which allocates a top-level Z-APDU of the type requested: Z_APDU *zget_APDU(ODR o, int which); The which parameter is (of course) the discriminator belonging to the Z_APDU CHOICE type. All of the interface described here is provided by the &asn; module, and you access it through the proto.h header file. EXTERNAL Data In order to achieve extensibility and adaptability to different application domains, the new version of the protocol defines many structures outside of the main ASN.1 specification, referencing them through ASN.1 EXTERNAL constructs. To simplify the construction and access to the externally referenced data, the &asn; module defines a specialized version of the EXTERNAL construct, called Z_External.It is defined thus: typedef struct Z_External { Odr_oid *direct_reference; int *indirect_reference; char *descriptor; enum { /* Generic types */ Z_External_single = 0, Z_External_octet, Z_External_arbitrary, /* Specific types */ Z_External_SUTRS, Z_External_explainRecord, Z_External_resourceReport1, Z_External_resourceReport2 ... } which; union { /* Generic types */ Odr_any *single_ASN1_type; Odr_oct *octet_aligned; Odr_bitmask *arbitrary; /* Specific types */ Z_SUTRS *sutrs; Z_ExplainRecord *explainRecord; Z_ResourceReport1 *resourceReport1; Z_ResourceReport2 *resourceReport2; ... } u; } Z_External; When decoding, the &asn; module will attempt to determine which syntax describes the data by looking at the reference fields (currently only the direct-reference). For ASN.1 structured data, you need only consult the which field to determine the type of data. You can the access the data directly through the union. When constructing data for encoding, you set the union pointer to point to the data, and set the which field accordingly. Remember also to set the direct (or indirect) reference to the correct OID for the data type. For non-ASN.1 data such as MARC records, use the octet_aligned arm of the union. Some servers return ASN.1 structured data values (e.g. database records) as BER-encoded records placed in the octet-aligned branch of the EXTERNAL CHOICE. The ASN-module will not automatically decode these records. To help you decode the records in the application, the function Z_ext_typeent *z_ext_gettypebyref(const oid *oid); can be used to retrieve information about the known, external data types. The function returns a pointer to a static area, or NULL, if no match for the given direct reference is found. The Z_ext_typeent is defined as: typedef struct Z_ext_typeent { int oid[OID_SIZE]; /* the direct-reference OID. */ int what; /* discriminator value for the external CHOICE */ Odr_fun fun; /* decoder function */ } Z_ext_typeent; The what member contains the Z_External union discriminator value for the given type: For the SUTRS record syntax, the value would be Z_External_sutrs. The fun member contains a pointer to the function which encodes/decodes the given type. Again, for the SUTRS record syntax, the value of fun would be z_SUTRS (a function pointer). If you receive an EXTERNAL which contains an octet-string value that you suspect of being an ASN.1-structured data value, you can use z_ext_gettypebyref to look for the provided direct-reference. If the return value is different from NULL, you can use the provided function to decode the BER string (see ). If you want to send EXTERNALs containing ASN.1-structured values in the octet-aligned branch of the CHOICE, this is possible too. However, on the encoding phase, it requires a somewhat involved juggling around of the various buffers involved. If you need to add new, externally defined data types, you must update the struct above, in the source file prt-ext.h, as well as the encoder/decoder in the file prt-ext.c. When changing the latter, remember to update both the arm array and the list type_table, which drives the CHOICE biasing that is necessary to tell the different, structured types apart on decoding. Eventually, the EXTERNAL processing will most likely automatically insert the correct OIDs or indirect-refs. First, however, we need to determine how application-context management (specifically the presentation-context-list) should fit into the various modules. PDU Contents Table We include, for reference, a listing of the fields of each top-level PDU, as well as their default settings. Default settings for PDU Initialize Request Field Type Default Value referenceIdZ_ReferenceIdNULL protocolVersionOdr_bitmaskEmpty bitmask optionsOdr_bitmaskEmpty bitmask preferredMessageSizeOdr_int30*1024 maximumRecordSizeOdr_int30*1024 idAuthenticationZ_IdAuthenticationNULL implementationIdchar*"81" implementationNamechar*"YAZ" implementationVersionchar*YAZ_VERSION userInformationFieldZ_UserInformationNULL otherInfoZ_OtherInformationNULL
Default settings for PDU Initialize Response Field Type Default Value referenceIdZ_ReferenceIdNULL protocolVersionOdr_bitmaskEmpty bitmask optionsOdr_bitmaskEmpty bitmask preferredMessageSizeOdr_int30*1024 maximumRecordSizeOdr_int30*1024 resultOdr_boolTRUE implementationIdchar*"id)" implementationNamechar*"YAZ" implementationVersionchar*YAZ_VERSION userInformationFieldZ_UserInformationNULL otherInfoZ_OtherInformationNULL
Default settings for PDU Search Request Field Type Default Value referenceIdZ_ReferenceIdNULL smallSetUpperBoundOdr_int0 largeSetLowerBoundOdr_int1 mediumSetPresentNumberOdr_int0 replaceIndicatorOdr_boolTRUE resultSetNamechar *"default" num_databaseNamesOdr_int0 databaseNameschar **NULL smallSetElementSetNamesZ_ElementSetNames NULL mediumSetElementSetNamesZ_ElementSetNames NULL preferredRecordSyntaxOdr_oidNULL queryZ_QueryNULL additionalSearchInfoZ_OtherInformation NULL otherInfoZ_OtherInformationNULL
Default settings for PDU Search Response Field Type Default Value referenceIdZ_ReferenceIdNULL resultCountOdr_int0 numberOfRecordsReturnedOdr_int0 nextResultSetPositionOdr_int0 searchStatusOdr_boolTRUE resultSetStatusOdr_intNULL presentStatusOdr_intNULL recordsZ_RecordsNULL additionalSearchInfo Z_OtherInformationNULL otherInfoZ_OtherInformationNULL
Default settings for PDU Present Request Field Type Default Value referenceIdZ_ReferenceIdNULL resultSetIdchar*"default" resultSetStartPointOdr_int1 numberOfRecordsRequestedOdr_int10 num_rangesOdr_int0 additionalRangesZ_RangeNULL recordCompositionZ_RecordCompositionNULL preferredRecordSyntaxOdr_oidNULL maxSegmentCountOdr_intNULL maxRecordSizeOdr_intNULL maxSegmentSizeOdr_intNULL otherInfoZ_OtherInformationNULL
Default settings for PDU Present Response Field Type Default Value referenceIdZ_ReferenceIdNULL numberOfRecordsReturnedOdr_int0 nextResultSetPositionOdr_int0 presentStatusOdr_intZ_PresentStatus_success recordsZ_RecordsNULL otherInfoZ_OtherInformationNULL
Default settings for Delete Result Set Request Field Type Default Value referenceId Z_ReferenceIdNULL deleteFunctionOdr_intZ_DeleteResultSetRequest_list num_idsOdr_int0 resultSetListchar**NULL otherInfoZ_OtherInformationNULL
Default settings for Delete Result Set Response Field Type Default Value referenceIdZ_ReferenceIdNULL deleteOperationStatusOdr_int Z_DeleteStatus_success num_statusesOdr_int0 deleteListStatusesZ_ListStatus**NULL numberNotDeletedOdr_intNULL num_bulkStatusesOdr_int0 bulkStatusesZ_ListStatusNULL deleteMessagechar*NULL otherInfoZ_OtherInformationNULL
Default settings for Scan Request Field Type Default Value referenceIdZ_ReferenceIdNULL num_databaseNamesOdr_int0 databaseNameschar**NULL attributeSetOdr_oidNULL termListAndStartPointZ_AttributesPlus... NULL stepSizeOdr_intNULL numberOfTermsRequestedOdr_int20 preferredPositionInResponseOdr_intNULL otherInfoZ_OtherInformationNULL
Default settings for Scan Response Field Type Default Value referenceIdZ_ReferenceIdNULL stepSizeOdr_intNULL scanStatusOdr_intZ_Scan_success numberOfEntriesReturnedOdr_int0 positionOfTermOdr_intNULL entriesZ_ListEntriesNULL attributeSetOdr_oidNULL otherInfoZ_OtherInformationNULL
Default settings for Trigger Resource Control Request Field Type Default Value referenceIdZ_ReferenceIdNULL requestedActionOdr_int Z_TriggerResourceCtrl_resou.. prefResourceReportFormatOdr_oidNULL resultSetWantedOdr_boolNULL otherInfoZ_OtherInformationNULL
Default settings for Resource Control Request Field Type Default Value referenceIdZ_ReferenceIdNULL suspendedFlagOdr_boolNULL resourceReportZ_ExternalNULL partialResultsAvailableOdr_intNULL responseRequiredOdr_boolFALSE triggeredRequestFlagOdr_boolNULL otherInfoZ_OtherInformationNULL
Default settings for Resource Control Response Field Type Default Value referenceIdZ_ReferenceIdNULL continueFlagbool_tTRUE resultSetWantedbool_tNULL otherInfoZ_OtherInformationNULL
Default settings for Access Control Request Field Type Default Value referenceIdZ_ReferenceIdNULL whichenumZ_AccessRequest_simpleForm; uunionNULL otherInfoZ_OtherInformationNULL
Default settings for Access Control Response Field Type Default Value referenceIdZ_ReferenceIdNULL whichenumZ_AccessResponse_simpleForm uunionNULL diagnosticZ_DiagRecNULL otherInfoZ_OtherInformationNULL
Default settings for Segment Field Type Default Value referenceIdZ_ReferenceIdNULL numberOfRecordsReturnedOdr_intvalue=0 num_segmentRecordsOdr_int0 segmentRecordsZ_NamePlusRecordNULL otherInfoZ_OtherInformationNULL
Default settings for Close Field Type Default Value referenceIdZ_ReferenceIdNULL closeReasonOdr_intZ_Close_finished diagnosticInformationchar*NULL resourceReportFormatOdr_oidNULL resourceFormatZ_ExternalNULL otherInfoZ_OtherInformationNULL
SOAP and SRU Introduction &yaz; uses a very simple implementation of SOAP that only (currently) supports what is sufficient to offer SRU SOAP functionality. The implementation uses the tree API of libxml2 to encode and decode SOAP packages. Like the Z39.50 ASN.1 module, the &yaz; SRU implementation uses simple C structs to represent SOAP packages as well as HTTP packages. HTTP &yaz; only offers HTTP as transport carrier for SOAP, but it is relatively easy to change that. The following definition of Z_GDU (Generic Data Unit) allows for both HTTP and Z39.50 in one packet. #include <yaz/zgdu.h> #define Z_GDU_Z3950 1 #define Z_GDU_HTTP_Request 2 #define Z_GDU_HTTP_Response 3 typedef struct { int which; union { Z_APDU *z3950; Z_HTTP_Request *HTTP_Request; Z_HTTP_Response *HTTP_Response; } u; } Z_GDU ; The corresponding Z_GDU encoder/decoder is z_GDU. The z3950 is any of the known BER encoded Z39.50 APDUs. HTTP_Request and HTTP_Response is the HTTP Request and Response respectively. SOAP Packages Every SOAP package in &yaz; is represented as follows: #include <yaz/soap.h> typedef struct { char *fault_code; char *fault_string; char *details; } Z_SOAP_Fault; typedef struct { int no; char *ns; void *p; } Z_SOAP_Generic; #define Z_SOAP_fault 1 #define Z_SOAP_generic 2 #define Z_SOAP_error 3 typedef struct { int which; union { Z_SOAP_Fault *fault; Z_SOAP_Generic *generic; Z_SOAP_Fault *soap_error; } u; const char *ns; } Z_SOAP; The fault and soap_error arms both represent a SOAP fault - struct Z_SOAP_Fault. Any other generic (valid) package is represented by Z_SOAP_Generic. The ns as part of Z_SOAP is the namespace for SOAP itself and reflects the SOAP version. For version 1.1 it is http://schemas.xmlsoap.org/soap/envelope/, for version 1.2 it is http://www.w3.org/2001/06/soap-envelope. int z_soap_codec(ODR o, Z_SOAP **pp, char **content_buf, int *content_len, Z_SOAP_Handler *handlers); The content_buf and content_len is XML buffer and length of buffer respectively. The handlers is a list of SOAP codec handlers - one handler for each service namespace. For SRU SOAP, the namespace would be http://www.loc.gov/zing/srw/v1.0/. When decoding, the z_soap_codec inspects the XML content and tries to match one of the services namespaces of the supplied handlers. If there is a match. a handler function is invoked which decodes that particular SOAP package. If successful, the returned Z_SOAP package will be of type Z_SOAP_Generic. Member no is set the offset of the handler that matched; ns is set to namespace of the matching handler; the void pointer p is set to the C data structure associated with the handler. When a NULL namespace is met (member ns below), that specifies end-of-list. Each handler is defined as follows: typedef struct { char *ns; void *client_data; Z_SOAP_fun f; } Z_SOAP_Handler; The ns is the namespace of the service associated with handler f. The client_data is user-defined data which is passed to the handler. The prototype for a SOAP service handler is: int handler(ODR o, void * ptr, void **handler_data, void *client_data, const char *ns); The o specifies the mode (decode/encode) as usual. The second argument, ptr, is a libxml2 tree node pointer (xmlNodePtr) and is a pointer to the Body element of the SOAP package. The handler_data is an opaque pointer to C definitions associated with the SOAP service. The client_data is the pointer which was set as part of the Z_SOAP_handler. Finally, ns is the service namespace. SRU SRU SOAP is just one implementation of a SOAP handler as described in the previous section. The encoder/decoder handler for SRU is defined as follows: #include <yaz/srw.h> int yaz_srw_codec(ODR o, void * pptr, Z_SRW_GDU **handler_data, void *client_data, const char *ns); Here, Z_SRW_GDU is either searchRetrieveRequest or a searchRetrieveResponse. The xQuery and xSortKeys are not handled yet by the SRW implementation of &yaz;. Explain is also missing. Future versions of &yaz; will include these features. The definition of searchRetrieveRequest is: typedef struct { #define Z_SRW_query_type_cql 1 #define Z_SRW_query_type_xcql 2 #define Z_SRW_query_type_pqf 3 int query_type; union { char *cql; char *xcql; char *pqf; } query; #define Z_SRW_sort_type_none 1 #define Z_SRW_sort_type_sort 2 #define Z_SRW_sort_type_xSort 3 int sort_type; union { char *none; char *sortKeys; char *xSortKeys; } sort; int *startRecord; int *maximumRecords; char *recordSchema; char *recordPacking; char *database; } Z_SRW_searchRetrieveRequest; Please observe that data of type xsd:string is represented as a char pointer (char *). A null pointer means that the element is absent. Data of type xsd:integer is represented as a pointer to an int (int *). Again, a null pointer is used for absent elements. The SearchRetrieveResponse has the following definition. typedef struct { int * numberOfRecords; char * resultSetId; int * resultSetIdleTime; Z_SRW_record *records; int num_records; Z_SRW_diagnostic *diagnostics; int num_diagnostics; int *nextRecordPosition; } Z_SRW_searchRetrieveResponse; The num_records and num_diagnostics is number of returned records and diagnostics respectively, and also correspond to the "size of" arrays records and diagnostics. A retrieval record is defined as follows: typedef struct { char *recordSchema; char *recordData_buf; int recordData_len; int *recordPosition; } Z_SRW_record; The record data is defined as a buffer of some length so that data can be of any type. SRW 1.0 currently doesn't allow for this (only XML), but future versions might do. And, a diagnostic as: typedef struct { int *code; char *details; } Z_SRW_diagnostic; Supporting Tools In support of the service API - primarily the ASN module, which provides the programmatic interface to the Z39.50 APDUs, &yaz; contains a collection of tools that support the development of applications. Query Syntax Parsers Since the type-1 (RPN) query structure has no direct, useful string representation, every origin application needs to provide some form of mapping from a local query notation or representation to a Z_RPNQuery structure. Some programmers will prefer to construct the query manually, perhaps using odr_malloc() to simplify memory management. The &yaz; distribution includes three separate, query-generating tools that may be of use to you. Prefix Query Format Since RPN or reverse polish notation is really just a fancy way of describing a suffix notation format (operator follows operands), it would seem that the confusion is total when we now introduce a prefix notation for RPN. The reason is one of simple laziness - it's somewhat simpler to interpret a prefix format, and this utility was designed for maximum simplicity, to provide a baseline representation for use in simple test applications and scripting environments (like Tcl). The demonstration client included with YAZ uses the PQF. The PQF has been adopted by other parties developing Z39.50 software. It is often referred to as Prefix Query Notation - PQN. The PQF is defined by the pquery module in the YAZ library. There are two sets of functions that have similar behavior. First set operates on a PQF parser handle, second set doesn't. First set of functions are more flexible than the second set. Second set is obsolete and is only provided to ensure backwards compatibility. First set of functions all operate on a PQF parser handle: #include <yaz/pquery.h> YAZ_PQF_Parser yaz_pqf_create(void); void yaz_pqf_destroy(YAZ_PQF_Parser p); Z_RPNQuery *yaz_pqf_parse(YAZ_PQF_Parser p, ODR o, const char *qbuf); Z_AttributesPlusTerm *yaz_pqf_scan(YAZ_PQF_Parser p, ODR o, Odr_oid **attributeSetId, const char *qbuf); int yaz_pqf_error(YAZ_PQF_Parser p, const char **msg, size_t *off); A PQF parser is created and destructed by functions yaz_pqf_create and yaz_pqf_destroy respectively. Function yaz_pqf_parse parses the query given by string qbuf. If parsing was successful, a Z39.50 RPN Query is returned which is created using ODR stream o. If parsing failed, a NULL pointer is returned. Function yaz_pqf_scan takes a scan query in qbuf. If parsing was successful, the function returns attributes plus term pointer and modifies attributeSetId to hold attribute set for the scan request - both allocated using ODR stream o. If parsing failed, yaz_pqf_scan returns a NULL pointer. Error information for bad queries can be obtained by a call to yaz_pqf_error which returns an error code and modifies *msg to point to an error description, and modifies *off to the offset within the last query where parsing failed. The second set of functions are declared as follows: #include <yaz/pquery.h> Z_RPNQuery *p_query_rpn(ODR o, oid_proto proto, const char *qbuf); Z_AttributesPlusTerm *p_query_scan(ODR o, oid_proto proto, Odr_oid **attributeSetP, const char *qbuf); int p_query_attset(const char *arg); The function p_query_rpn() takes as arguments an &odr; stream (see section The ODR Module) to provide a memory source (the structure created is released on the next call to odr_reset() on the stream), a protocol identifier (one of the constants PROTO_Z3950 and PROTO_SR), an attribute set reference, and finally a null-terminated string holding the query string. If the parse went well, p_query_rpn() returns a pointer to a Z_RPNQuery structure which can be placed directly into a Z_SearchRequest. If parsing failed, due to syntax error, a NULL pointer is returned. The p_query_attset specifies which attribute set to use if the query doesn't specify one by the @attrset operator. The p_query_attset returns 0 if the argument is a valid attribute set specifier; otherwise the function returns -1. The grammar of the PQF is as follows: query ::= top-set query-struct. top-set ::= [ '@attrset' string ] query-struct ::= attr-spec | simple | complex | '@term' term-type query attr-spec ::= '@attr' [ string ] string query-struct complex ::= operator query-struct query-struct. operator ::= '@and' | '@or' | '@not' | '@prox' proximity. simple ::= result-set | term. result-set ::= '@set' string. term ::= string. proximity ::= exclusion distance ordered relation which-code unit-code. exclusion ::= '1' | '0' | 'void'. distance ::= integer. ordered ::= '1' | '0'. relation ::= integer. which-code ::= 'known' | 'private' | integer. unit-code ::= integer. term-type ::= 'general' | 'numeric' | 'string' | 'oid' | 'datetime' | 'null'. You will note that the syntax above is a fairly faithful representation of RPN, except for the Attribute, which has been moved a step away from the term, allowing you to associate one or more attributes with an entire query structure. The parser will automatically apply the given attributes to each term as required. The @attr operator is followed by an attribute specification (attr-spec above). The specification consists of an optional attribute set, an attribute type-value pair and a sub-query. The attribute type-value pair is packed in one string: an attribute type, an equals sign, and an attribute value, like this: @attr 1=1003. The type is always an integer, but the value may be either an integer or a string (if it doesn't start with a digit character). A string attribute-value is encoded as a Type-1 "complex" attribute with the list of values containing the single string specified, and including no semantic indicators. Version 3 of the Z39.50 specification defines various encoding of terms. Use @term type string, where type is one of: general, numeric or string (for InternationalString). If no term type has been given, the general form is used. This is the only encoding allowed in both versions 2 and 3 of the Z39.50 standard. Using Proximity Operators with PQF This is an advanced topic, describing how to construct queries that make very specific requirements on the relative location of their operands. You may wish to skip this section and go straight to the example PQF queries. Most Z39.50 servers do not support proximity searching, or support only a small subset of the full functionality that can be expressed using the PQF proximity operator. Be aware that the ability to express a query in PQF is no guarantee that any given server will be able to execute it. The proximity operator @prox is a special and more restrictive version of the conjunction operator @and. Its semantics are described in section 3.7.2 (Proximity) of Z39.50 the standard itself, which can be read on-line at In PQF, the proximity operation is represented by a sequence of the form @prox exclusion distance ordered relation which-code unit-code in which the meanings of the parameters are as described in the standard, and they can take the following values: exclusion 0 = false (i.e. the proximity condition specified by the remaining parameters must be satisfied) or 1 = true (the proximity condition specified by the remaining parameters must not be satisfied). distance An integer specifying the difference between the locations of the operands: e.g. two adjacent words would have distance=1 since their locations differ by one unit. ordered 1 = ordered (the operands must occur in the order the query specifies them) or 0 = unordered (they may appear in either order). relation Recognised values are 1 (lessThan), 2 (lessThanOrEqual), 3 (equal), 4 (greaterThanOrEqual), 5 (greaterThan) and 6 (notEqual). which-code known or k (the unit-code parameter is taken from the well-known list of alternatives described below) or private or p (the unit-code parameter has semantics specific to an out-of-band agreement such as a profile). unit-code If the which-code parameter is known then the recognised values are 1 (character), 2 (word), 3 (sentence), 4 (paragraph), 5 (section), 6 (chapter), 7 (document), 8 (element), 9 (subelement), 10 (elementType) and 11 (byte). If which-code is private then the acceptable values are determined by the profile. (The numeric values of the relation and well-known unit-code parameters are taken straight from the ASN.1 of the proximity structure in the standard.) PQF queries PQF queries using simple terms dylan "bob dylan" PQF boolean operators @or "dylan" "zimmerman" @and @or dylan zimmerman when @and when @or dylan zimmerman PQF references to result sets @set Result-1 @and @set seta @set setb Attributes for terms @attr 1=4 computer @attr 1=4 @attr 4=1 "self portrait" @attrset exp1 @attr 1=1 CategoryList @attr gils 1=2008 Copenhagen @attr 1=/book/title computer PQF Proximity queries @prox 0 3 1 2 k 2 dylan zimmerman Here the parameters 0, 3, 1, 2, k and 2 represent exclusion, distance, ordered, relation, which-code and unit-code, in that order. So: exclusion = 0: the proximity condition must hold distance = 3: the terms must be three units apart ordered = 1: they must occur in the order they are specified relation = 2: lessThanOrEqual (to the distance of 3 units) which-code is "known", so the standard unit-codes are used unit-code = 2: word. So the whole proximity query means that the words dylan and zimmerman must both occur in the record, in that order, differing in position by three or fewer words (i.e. with two or fewer words between them.) The query would find "Bob Dylan, aka. Robert Zimmerman", but not "Bob Dylan, born as Robert Zimmerman" since the distance in this case is four. PQF specification of search term type @term string "a UTF-8 string, maybe?" PQF mixed queries @or @and bob dylan @set Result-1 @attr 4=1 @and @attr 1=1 "bob dylan" @attr 1=4 "slow train coming" @and @attr 2=4 @attr gils 1=2038 -114 @attr 2=2 @attr gils 1=2039 -109 The last of these examples is a spatial search: in the GILS attribute set, access point 2038 indicates West Bounding Coordinate and 2030 indicates East Bounding Coordinate, so the query is for areas extending from -114 degrees longitude to no more than -109 degrees longitude. CCL Not all users enjoy typing in prefix query structures and numerical attribute values, even in a minimalistic test client. In the library world, the more intuitive Common Command Language - CCL (ISO 8777) has enjoyed some popularity - especially before the widespread availability of graphical interfaces. It is still useful in applications where you for some reason or other need to provide a symbolic language for expressing boolean query structures. CCL Syntax The CCL parser obeys the following grammar for the FIND argument. The syntax is annotated using lines prefixed by --. CCL-Find ::= CCL-Find Op Elements | Elements. Op ::= "and" | "or" | "not" -- The above means that Elements are separated by boolean operators. Elements ::= '(' CCL-Find ')' | Set | Terms | Qualifiers Relation Terms | Qualifiers Relation '(' CCL-Find ')' | Qualifiers '=' string '-' string -- Elements is either a recursive definition, a result set reference, a -- list of terms, qualifiers followed by terms, qualifiers followed -- by a recursive definition or qualifiers in a range (lower - upper). Set ::= 'set' = string -- Reference to a result set Terms ::= Terms Prox Term | Term -- Proximity of terms. Term ::= Term string | string -- This basically means that a term may include a blank Qualifiers ::= Qualifiers ',' string | string -- Qualifiers is a list of strings separated by comma Relation ::= '=' | '>=' | '<=' | '<>' | '>' | '<' -- Relational operators. This really doesn't follow the ISO8777 -- standard. Prox ::= '%' | '!' -- Proximity operator CCL queries The following queries are all valid: dylan "bob dylan" dylan or zimmerman set=1 (dylan and bob) or set=1 righttrunc? "notrunc?" singlechar#mask Assuming that the qualifiers ti and au and date are defined, we may use: ti=self portrait au=(bob dylan and slow train coming) date>1980 and (ti=((self portrait))) CCL Qualifiers Qualifiers are used to direct the search to a particular searchable index, such as title (ti) and author indexes (au). The CCL standard itself doesn't specify a particular set of qualifiers, but it does suggest a few short-hand notations. You can customize the CCL parser to support a particular set of qualifiers to reflect the current target profile. Traditionally, a qualifier would map to a particular use-attribute within the BIB-1 attribute set. It is also possible to set other attributes, such as the structure attribute. A CCL profile is a set of predefined CCL qualifiers that may be read from a file or set in the CCL API. The YAZ client reads its CCL qualifiers from a file named default.bib. There are four types of lines in a CCL profile: qualifier specification, qualifier alias, comments and directives. Qualifier specification A qualifier specification is of the form: qualifier-name [attributeset,]type=val [attributeset,]type=val ... where qualifier-name is the name of the qualifier to be used (e.g. ti), type is attribute type in the attribute set (Bib-1 is used if no attribute set is given) and val is attribute value. The type can be specified as an integer, or as a single-letter: u for use, r for relation, p for position, s for structure,t for truncation, or c for completeness. The attributes for the special qualifier name term are used when no CCL qualifier is given in a query. Common Bib-1 attributes Type Description u=value Use attribute (1). Common use attributes are 1 Personal-name, 4 Title, 7 ISBN, 8 ISSN, 30 Date, 62 Subject, 1003 Author, 1016 Any. Specify value as an integer. r=value Relation attribute (2). Common values are 1 <, 2 <=, 3 =, 4 >=, 5 >, 6 <>, 100 phonetic, 101 stem, 102 relevance, 103 always matches. p=value Position attribute (3). Values: 1 first in field, 2 first in any subfield, 3 any position in field. s=value Structure attribute (4). Values: 1 phrase, 2 word, 3 key, 4 year, 5 date, 6 word list, 100 date (un), 101 name (norm), 102 name (un), 103 structure, 104 urx, 105 free-form-text, 106 document-text, 107 local-number, 108 string, 109 numeric string. t=value Truncation attribute (5). Values: 1 right, 2 left, 3 left and right, 100 none, 101 process #, 102 regular-1, 103 regular-2, 104 CCL. c=value Completeness attribute (6). Values: 1 incomplete subfield, 2 complete subfield, 3 complete field.
Refer to or the complete list of Bib-1 attributes It is also possible to specify non-numeric attribute values, which are used in combination with certain types. The special combinations are: Special attribute combos Name Description s=pw The structure is set to either word or phrase depending on the number of tokens in a term (phrase-word). s=al Each token in the term is ANDed (and-list). This does not set the structure at all. s=ol Each token in the term is ORed (or-list). This does not set the structure at all. s=ag Tokens that appears as phrases (with blank in them) gets structure phrase attached (4=1). Tokens that appear to be words gets structure word attached (4=2). Phrases and words are ANDed. This is a variant of s=al and s=pw, with the main difference that words are not split (with operator AND) but instead kept in one RPN token. This facility appeared in YAZ 4.2.38. s=sl Tokens are split into sub-phrases of all combinations - in order. This facility appeared in YAZ 5.14.0. r=o Allows ranges and the operators greater-than, less-than, ... equals. This sets Bib-1 relation attribute accordingly (relation ordered). A query construct is only treated as a range if dash is used and that is surrounded by white-space. So -1980 is treated as term "-1980" not <= 1980. If - 1980 is used, however, that is treated as a range. r=r Similar to r=o but assumes that terms are non-negative (not prefixed with -). Thus, a dash will always be treated as a range. The construct 1980-1990 is treated as a range with r=r but as a single term "1980-1990" with r=o. The special attribute r=r is available in YAZ 2.0.24 or later. r=omiteq This will omit relation=equals (@attr 2=3) when r=o / r=r is used. This is useful for servers that somehow break when an explicit relation=equals is used. Omitting the relation is usually safe because "equals" is the default behavior. This tweak was added in YAZ version 5.1.2. t=l Allows term to be left-truncated. If term is of the form ?x, the resulting Type-1 term is x and truncation is left. t=r Allows term to be right-truncated. If term is of the form x?, the resulting Type-1 term is x and truncation is right. t=n If term is does not include ?, the truncation attribute is set to none (100). t=b Allows term to be both left-and-right truncated. If term is of the form ?x?, the resulting term is x and truncation is set to both left and right. t=x Allows masking anywhere in a term, thus fully supporting # (mask one character) and ? (zero or more of any). If masking is used, truncation is set to 102 (regexp-1 in term) and the term is converted accordingly to a regular expression. t=z Allows masking anywhere in a term, thus fully supporting # (mask one character) and ? (zero or more of any). If masking is used, truncation is set to 104 (Z39.58 in term) and the term is converted accordingly to Z39.58 masking term - actually the same truncation as CCL itself.
CCL profile Consider the following definition: ti u=4 s=1 au u=1 s=1 term s=105 ranked r=102 date u=30 r=o ti and au both set structure attribute to phrase (s=1). ti sets the use-attribute to 4. au sets the use-attribute to 1. When no qualifiers are used in the query, the structure-attribute is set to free-form-text (105) (rule for term). The date sets the relation attribute to the relation used in the CCL query and sets the use attribute to 30 (Bib-1 Date). You can combine attributes. To Search for "ranked title" you can do ti,ranked=knuth computer which will set relation=ranked, use=title, structure=phrase. Query date > 1980 is a valid query. But ti > 1980 is invalid.
Qualifier alias A qualifier alias is of the form: q q1 q2 .. which declares q to be an alias for q1, q2... such that the CCL query q=x is equivalent to q1=x or q2=x or .... Comments Lines with white space or lines that begin with character # are treated as comments. Directives Directive specifications takes the form @directive value CCL directives Name Description Default truncation Truncation character ? mask Masking character. Requires YAZ 4.2.58 or later # field Specifies how multiple fields are to be combined. There are two modes: or: multiple qualifier fields are ORed, merge: attributes for the qualifier fields are merged and assigned to one term. merge case Specifies if CCL operators and qualifiers should be compared with case sensitivity or not. Specify 1 for case sensitive; 0 for case insensitive. 1 and Specifies token for CCL operator AND. and or Specifies token for CCL operator OR. or not Specifies token for CCL operator NOT. not set Specifies token for CCL operator SET. set
CCL API All public definitions can be found in the header file ccl.h. A profile identifier is of type CCL_bibset. A profile must be created with the call to the function ccl_qual_mk which returns a profile handle of type CCL_bibset. To read a file containing qualifier definitions the function ccl_qual_file may be convenient. This function takes an already opened FILE handle pointer as argument along with a CCL_bibset handle. To parse a simple string with a FIND query use the function struct ccl_rpn_node *ccl_find_str(CCL_bibset bibset, const char *str, int *error, int *pos); which takes the CCL profile (bibset) and query (str) as input. Upon successful completion the RPN tree is returned. If an error occurs, such as a syntax error, the integer pointed to by error holds the error code and pos holds the offset inside query string in which the parsing failed. An English representation of the error may be obtained by calling the ccl_err_msg function. The error codes are listed in ccl.h. To convert the CCL RPN tree (type struct ccl_rpn_node *) to the Z_RPNQuery of YAZ the function ccl_rpn_query must be used. This function which is part of YAZ is implemented in yaz-ccl.c. After calling this function the CCL RPN tree is probably no longer needed. The ccl_rpn_delete destroys the CCL RPN tree. A CCL profile may be destroyed by calling the ccl_qual_rm function. The token names for the CCL operators may be changed by setting the globals (all type char *) ccl_token_and, ccl_token_or, ccl_token_not and ccl_token_set. An operator may have aliases, i.e. there may be more than one name for the operator. To do this, separate each alias with a space character.
CQL CQL - Common Query Language - was defined for the SRU protocol. In many ways CQL has a similar syntax to CCL. The objective of CQL is different. Where CCL aims to be an end-user language, CQL is the protocol query language for SRU. If you are new to CQL, read the Gentle Introduction. The CQL parser in &yaz; provides the following: It parses and validates a CQL query. It generates a C structure that allows you to convert a CQL query to some other query language, such as SQL. The parser converts a valid CQL query to PQF, thus providing a way to use CQL for both SRU servers and Z39.50 targets at the same time. The parser converts CQL to XCQL. XCQL is an XML representation of CQL. XCQL is part of the SRU specification. However, since SRU supports CQL only, we don't expect XCQL to be widely used. Furthermore, CQL has the advantage over XCQL that it is easy to read. CQL parsing A CQL parser is represented by the CQL_parser handle. Its contents should be considered &yaz; internal (private). #include <yaz/cql.h> typedef struct cql_parser *CQL_parser; CQL_parser cql_parser_create(void); void cql_parser_destroy(CQL_parser cp); A parser is created by cql_parser_create and is destroyed by cql_parser_destroy. To parse a CQL query string, the following function is provided: int cql_parser_string(CQL_parser cp, const char *str); A CQL query is parsed by the cql_parser_string which takes a query str. If the query was valid (no syntax errors), then zero is returned; otherwise -1 is returned to indicate a syntax error. int cql_parser_stream(CQL_parser cp, int (*getbyte)(void *client_data), void (*ungetbyte)(int b, void *client_data), void *client_data); int cql_parser_stdio(CQL_parser cp, FILE *f); The functions cql_parser_stream and cql_parser_stdio parse a CQL query - just like cql_parser_string. The only difference is that the CQL query can be fed to the parser in different ways. The cql_parser_stream uses a generic byte stream as input. The cql_parser_stdio uses a FILE handle which is opened for reading. CQL tree If the query string is valid, the CQL parser generates a tree representing the structure of the CQL query. struct cql_node *cql_parser_result(CQL_parser cp); cql_parser_result returns a pointer to the root node of the resulting tree. Each node in a CQL tree is represented by a struct cql_node. It is defined as follows: #define CQL_NODE_ST 1 #define CQL_NODE_BOOL 2 #define CQL_NODE_SORT 3 struct cql_node { int which; union { struct { char *index; char *index_uri; char *term; char *relation; char *relation_uri; struct cql_node *modifiers; } st; struct { char *value; struct cql_node *left; struct cql_node *right; struct cql_node *modifiers; } boolean; struct { char *index; struct cql_node *next; struct cql_node *modifiers; struct cql_node *search; } sort; } u; }; There are three node types: search term (ST), boolean (BOOL) and sortby (SORT). A modifier is treated as a search term too. The search term node has five members: index: index for search term. If an index is unspecified for a search term, index will be NULL. index_uri: index URI for search term or NULL if none could be resolved for the index. term: the search term itself. relation: relation for search term. relation_uri: relation URI for search term. modifiers: relation modifiers for search term. The modifiers list itself of cql_nodes each of type ST. The boolean node represents and, or, not + proximity. left and right: left - and right operand respectively. modifiers: proximity arguments. The sort node represents both the SORTBY clause. CQL to PQF conversion Conversion to PQF (and Z39.50 RPN) is tricky by the fact that the resulting RPN depends on the Z39.50 target capabilities (combinations of supported attributes). In addition, the CQL and SRU operates on index prefixes (URI or strings), whereas the RPN uses Object Identifiers for attribute sets. The CQL library of &yaz; defines a cql_transform_t type. It represents a particular mapping between CQL and RPN. This handle is created and destroyed by the functions: cql_transform_t cql_transform_open_FILE (FILE *f); cql_transform_t cql_transform_open_fname(const char *fname); void cql_transform_close(cql_transform_t ct); The first two functions create a transformation handle from either an already open FILE or from a filename respectively. The handle is destroyed by cql_transform_close in which case no further reference of the handle is allowed. When a cql_transform_t handle has been created you can convert to RPN. int cql_transform_buf(cql_transform_t ct, struct cql_node *cn, char *out, int max); This function converts the CQL tree cn using handle ct. For the resulting PQF, you supply a buffer out which must be able to hold at at least max characters. If conversion failed, cql_transform_buf returns a non-zero SRU error code; otherwise zero is returned (conversion successful). The meanings of the numeric error codes are listed in the SRU specification somewhere (no direct link anymore). If conversion fails, more information can be obtained by calling int cql_transform_error(cql_transform_t ct, char **addinfop); This function returns the most recently returned numeric error-code and sets the string-pointer at *addinfop to point to a string containing additional information about the error that occurred: for example, if the error code is 15 ("Illegal or unsupported context set"), the additional information is the name of the requested context set that was not recognised. The SRU error-codes may be translated into brief human-readable error messages using const char *cql_strerror(int code); If you wish to be able to produce a PQF result in a different way, there are two alternatives. void cql_transform_pr(cql_transform_t ct, struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data); int cql_transform_FILE(cql_transform_t ct, struct cql_node *cn, FILE *f); The former function produces output to a user-defined output stream. The latter writes the result to an already open FILE. Specification of CQL to RPN mappings The file supplied to functions cql_transform_open_FILE, cql_transform_open_fname follows a structure found in many Unix utilities. It consists of mapping specifications - one per line. Lines starting with # are ignored (comments). Each line is of the form CQL pattern = RPN equivalent An RPN pattern is a simple attribute list. Each attribute pair takes the form: [set] type=value The attribute set is optional. The type is the attribute type, value the attribute value. The character * (asterisk) has special meaning when used in the RPN pattern. Each occurrence of * is substituted with the CQL matching name (index, relation, qualifier etc). This facility can be used to copy a CQL name verbatim to the RPN result. The following CQL patterns are recognized: index.set.name This pattern is invoked when a CQL index, such as dc.title is converted. set and name are the context set and index name respectively. Typically, the RPN specifies an equivalent use attribute. For terms not bound by an index, the pattern index.cql.serverChoice is used. Here, the prefix cql is defined as http://www.loc.gov/zing/cql/cql-indexes/v1.0/. If this pattern is not defined, the mapping will fail. The pattern, index.set.* is used when no other index pattern is matched. qualifier.set.name (DEPRECATED) For backwards compatibility, this is recognised as a synonym of index.set.name relation.relation This pattern specifies how a CQL relation is mapped to RPN. The pattern is name of relation operator. Since = is used as separator between CQL pattern and RPN, CQL relations including = cannot be used directly. To avoid a conflict, the names ge, eq, le, must be used for CQL operators, greater-than-or-equal, equal, less-than-or-equal respectively. The RPN pattern is supposed to include a relation attribute. For terms not bound by a relation, the pattern relation.scr is used. If the pattern is not defined, the mapping will fail. The special pattern, relation.* is used when no other relation pattern is matched. relationModifier.mod This pattern specifies how a CQL relation modifier is mapped to RPN. The RPN pattern is usually a relation attribute. structure.type This pattern specifies how a CQL structure is mapped to RPN. Note that this CQL pattern is somewhat similar to CQL pattern relation. The type is a CQL relation. The pattern, structure.* is used when no other structure pattern is matched. Usually, the RPN equivalent specifies a structure attribute. position.type This pattern specifies how the anchor (position) of CQL is mapped to RPN. The type is one of first, any, last, firstAndLast. The pattern, position.* is used when no other position pattern is matched. set.prefix This specification defines a CQL context set for a given prefix. The value on the right hand side is the URI for the set - not RPN. All prefixes used in index patterns must be defined this way. set This specification defines a default CQL context set for index names. The value on the right hand side is the URI for the set. CQL to RPN mapping file This simple file defines two context sets, three indexes and three relations, a position pattern and a default structure. With the mappings above, the CQL query computer is converted to the PQF: @attr 1=1016 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 "computer" by rules index.cql.serverChoice, relation.scr, structure.*, position.any. CQL query computer^ is rejected, since position.right is undefined. CQL query >my = "http://www.loc.gov/zing/cql/dc-indexes/v1.0/" my.title = x is converted to @attr 1=4 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 "x" CQL to RPN string attributes In this example we allow any index to be passed to RPN as a use attribute. The http://bogus/rpn context set is also the default so we can make queries such as title = a which is converted to @attr 2=3 @attr 4=1 @attr 3=3 @attr 1=title "a" CQL to RPN using Bath Profile The file etc/pqf.properties has mappings from the Bath Profile and Dublin Core to RPN. If YAZ is installed as a package it's usually located in /usr/share/yaz/etc and part of the development package, such as libyaz-dev. CQL to XCQL conversion Conversion from CQL to XCQL is trivial and does not require a mapping to be defined. There are three functions to choose from depending on the way you wish to store the resulting output (XML buffer containing XCQL). int cql_to_xml_buf(struct cql_node *cn, char *out, int max); void cql_to_xml(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data); void cql_to_xml_stdio(struct cql_node *cn, FILE *f); Function cql_to_xml_buf converts to XCQL and stores the result in a user-supplied buffer of a given max size. cql_to_xml writes the result in a user-defined output stream. cql_to_xml_stdio writes to a a file. PQF to CQL conversion Conversion from PQF to CQL is offered by the two functions shown below. The former uses a generic stream for result. The latter puts result in a WRBUF (string container). #include <yaz/rpn2cql.h> int cql_transform_rpn2cql_stream(cql_transform_t ct, void (*pr)(const char *buf, void *client_data), void *client_data, Z_RPNQuery *q); int cql_transform_rpn2cql_wrbuf(cql_transform_t ct, WRBUF w, Z_RPNQuery *q); The configuration is the same as used in CQL to PQF conversions.
Object Identifiers The basic YAZ representation of an OID is an array of integers, terminated with the value -1. This integer is of type Odr_oid. Fundamental OID operations and the type Odr_oid are defined in yaz/oid_util.h. An OID can either be declared as a automatic variable or it can be allocated using the memory utilities or ODR/NMEM. It's guaranteed that an OID can fit in OID_SIZE integers. Create OID on stack We can create an OID for the Bib-1 attribute set with: Odr_oid bib1[OID_SIZE]; bib1[0] = 1; bib1[1] = 2; bib1[2] = 840; bib1[3] = 10003; bib1[4] = 3; bib1[5] = 1; bib1[6] = -1; And OID may also be filled from a string-based representation using dots (.). This is achieved by the function int oid_dotstring_to_oid(const char *name, Odr_oid *oid); This functions returns 0 if name could be converted; -1 otherwise. Using oid_oiddotstring_to_oid We can fill the Bib-1 attribute set OID more easily with: Odr_oid bib1[OID_SIZE]; oid_oiddotstring_to_oid("1.2.840.10003.3.1", bib1); We can also allocate an OID dynamically on an ODR stream with: Odr_oid *odr_getoidbystr(ODR o, const char *str); This creates an OID from a string-based representation using dots. This function take an &odr; stream as parameter. This stream is used to allocate memory for the data elements, which is released on a subsequent call to odr_reset() on that stream. Using odr_getoidbystr We can create an OID for the Bib-1 attribute set with: Odr_oid *bib1 = odr_getoidbystr(odr, "1.2.840.10003.3.1"); The function char *oid_oid_to_dotstring(const Odr_oid *oid, char *oidbuf) does the reverse of oid_oiddotstring_to_oid. It converts an OID to the string-based representation using dots. The supplied char buffer oidbuf holds the resulting string and must be at least OID_STR_MAX in size. OIDs can be copied with oid_oidcpy which takes two OID lists as arguments. Alternatively, an OID copy can be allocated on an ODR stream with: Odr_oid *odr_oiddup(ODR odr, const Odr_oid *o); OIDs can be compared with oid_oidcmp which returns zero if the two OIDs provided are identical; non-zero otherwise. OID database From YAZ version 3 and later, the oident system has been replaced by an OID database. OID database is a misnomer .. the old odient system was also a database. The OID database is really just a map between named Object Identifiers (string) and their OID raw equivalents. Most operations either convert from string to OID or other way around. Unfortunately, whenever we supply a string we must also specify the OID class. The class is necessary because some strings correspond to multiple OIDs. An example of such a string is Bib-1 which may either be an attribute-set or a diagnostic-set. Applications using the YAZ database should include yaz/oid_db.h. A YAZ database handle is of type yaz_oid_db_t. Actually that's a pointer. You need not deal with that. YAZ has a built-in database which can be considered "constant" for most purposes. We can get hold of that by using function yaz_oid_std. All functions with prefix yaz_string_to_oid converts from class + string to OID. We have variants of this operation due to different memory allocation strategies. All functions with prefix yaz_oid_to_string converts from OID to string + class. Create OID with YAZ DB We can create an OID for the Bib-1 attribute set on the ODR stream odr with: Odr_oid *bib1 = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_ATTSET, "Bib-1", odr); This is more complex than using odr_getoidbystr. You would only use yaz_string_to_oid_odr when the string (here Bib-1) is supplied by a user or configuration. Standard OIDs All the object identifiers in the standard OID database as returned by yaz_oid_std can be referenced directly in a program as a constant OID. Each constant OID is prefixed with yaz_oid_ - followed by OID class (lowercase) - then by OID name (normalized and lowercase). See for list of all object identifiers built into YAZ. These are declared in yaz/oid_std.h but are included by yaz/oid_db.h as well. Use a built-in OID We can allocate our own OID filled with the constant OID for Bib-1 with: Odr_oid *bib1 = odr_oiddup(o, yaz_oid_attset_bib1); Nibble Memory Sometimes when you need to allocate and construct a large, interconnected complex of structures, it can be a bit of a pain to release the associated memory again. For the structures describing the Z39.50 PDUs and related structures, it is convenient to use the memory-management system of the &odr; subsystem (see ). However, in some circumstances where you might otherwise benefit from using a simple nibble-memory management system, it may be impractical to use odr_malloc() and odr_reset(). For this purpose, the memory manager which also supports the &odr; streams is made available in the NMEM module. The external interface to this module is given in the nmem.h file. The following prototypes are given: NMEM nmem_create(void); void nmem_destroy(NMEM n); void *nmem_malloc(NMEM n, size_t size); void nmem_reset(NMEM n); size_t nmem_total(NMEM n); void nmem_init(void); void nmem_exit(void); The nmem_create() function returns a pointer to a memory control handle, which can be released again by nmem_destroy() when no longer needed. The function nmem_malloc() allocates a block of memory of the requested size. A call to nmem_reset() or nmem_destroy() will release all memory allocated on the handle since it was created (or since the last call to nmem_reset(). The function nmem_total() returns the number of bytes currently allocated on the handle. The nibble-memory pool is shared amongst threads. POSIX mutexes and WIN32 Critical sections are introduced to keep the module thread safe. Function nmem_init() initializes the nibble-memory library and it is called automatically the first time the YAZ.DLL is loaded. &yaz; uses function DllMain to achieve this. You should not call nmem_init or nmem_exit unless you're absolute sure what you're doing. Note that in previous &yaz; versions you'd have to call nmem_init yourself. Log &yaz; has evolved a fairly complex log system which should be useful both for debugging &yaz; itself, debugging applications that use &yaz;, and for production use of those applications. The log functions are declared in header yaz/log.h and implemented in src/log.c. Due to name clash with syslog and some math utilities the logging interface has been modified as of YAZ 2.0.29. The obsolete interface is still available in header file yaz/log.h. The key points of the interface are: void yaz_log(int level, const char *fmt, ...) void yaz_log_init(int level, const char *prefix, const char *name); void yaz_log_init_file(const char *fname); void yaz_log_init_level(int level); void yaz_log_init_prefix(const char *prefix); void yaz_log_time_format(const char *fmt); void yaz_log_init_max_size(int mx); int yaz_log_mask_str(const char *str); int yaz_log_module_level(const char *name); The reason for the whole log module is the yaz_log function. It takes a bitmask indicating the log levels, a printf-like format string, and a variable number of arguments to log. The log level is a bit mask, that says on which level(s) the log entry should be made, and optionally set some behaviour of the logging. In the most simple cases, it can be one of YLOG_FATAL, YLOG_DEBUG, YLOG_WARN, YLOG_LOG. Those can be combined with bits that modify the way the log entry is written:YLOG_ERRNO, YLOG_NOTIME, YLOG_FLUSH. Most of the rest of the bits are deprecated, and should not be used. Use the dynamic log levels instead. Applications that use &yaz;, should not use the LOG_LOG for ordinary messages, but should make use of the dynamic loglevel system. This consists of two parts, defining the loglevel and checking it. To define the log levels, the (main) program should pass a string to yaz_log_mask_str to define which log levels are to be logged. This string should be a comma-separated list of log level names, and can contain both hard-coded names and dynamic ones. The log level calculation starts with YLOG_DEFAULT_LEVEL and adds a bit for each word it meets, unless the word starts with a '-', in which case it clears the bit. If the string 'none' is found, all bits are cleared. Typically this string comes from the command-line, often identified by -v. The yaz_log_mask_str returns a log level that should be passed to yaz_log_init_level for it to take effect. Each module should check what log bits should be used, by calling yaz_log_module_level with a suitable name for the module. The name is cleared of a preceding path and an extension, if any, so it is quite possible to use __FILE__ for it. If the name has been passed to yaz_log_mask_str, the routine returns a non-zero bitmask, which should then be used in consequent calls to yaz_log. (It can also be tested, so as to avoid unnecessary calls to yaz_log, in time-critical places, or when the log entry would take time to construct.) Yaz uses the following dynamic log levels: server, session, request, requestdetail for the server functionality. zoom for the zoom client API. ztest for the simple test server. malloc, nmem, odr, eventl for internal debugging of yaz itself. Of course, any program using yaz is welcome to define as many new ones as it needs. By default the log is written to stderr, but this can be changed by a call to yaz_log_init_file or yaz_log_init. If the log is directed to a file, the file size is checked at every write, and if it exceeds the limit given in yaz_log_init_max_size, the log is rotated. The rotation keeps one old version (with a .1 appended to the name). The size defaults to 1GB. Setting it to zero will disable the rotation feature. A typical yaz-log looks like this 13:23:14-23/11 yaz-ztest(1) [session] Starting session from tcp:127.0.0.1 (pid=30968) 13:23:14-23/11 yaz-ztest(1) [request] Init from 'YAZ' (81) (ver 2.0.28) OK 13:23:17-23/11 yaz-ztest(1) [request] Search Z: @attrset Bib-1 foo OK:7 hits 13:23:22-23/11 yaz-ztest(1) [request] Present: [1] 2+2 OK 2 records returned 13:24:13-23/11 yaz-ztest(1) [request] Close OK The log entries start with a time stamp. This can be omitted by setting the YLOG_NOTIME bit in the loglevel. This way automatic tests can be hoped to produce identical log files, that are easy to diff. The format of the time stamp can be set with yaz_log_time_format, which takes a format string just like strftime. Next in a log line comes the prefix, often the name of the program. For yaz-based servers, it can also contain the session number. Then comes one or more logbits in square brackets, depending on the logging level set by yaz_log_init_level and the loglevel passed to yaz_log_init_level. Finally comes the format string and additional values passed to yaz_log The log level YLOG_LOGLVL, enabled by the string loglevel, will log all the log-level affecting operations. This can come in handy if you need to know what other log levels would be useful. Grep the logfile for [loglevel]. The log system is almost independent of the rest of &yaz;, the only important dependence is of nmem, and that only for using the semaphore definition there. The dynamic log levels and log rotation were introduced in &yaz; 2.0.28. At the same time, the log bit names were changed from LOG_something to YLOG_something, to avoid collision with syslog.h. MARC YAZ provides a fast utility for working with MARC records. Early versions of the MARC utility only allowed decoding of ISO2709. Today the utility may both encode - and decode to a variety of formats. /* create handler */ yaz_marc_t yaz_marc_create(void); /* destroy */ void yaz_marc_destroy(yaz_marc_t mt); /* set XML mode YAZ_MARC_LINE, YAZ_MARC_SIMPLEXML, ... */ void yaz_marc_xml(yaz_marc_t mt, int xmlmode); #define YAZ_MARC_LINE 0 #define YAZ_MARC_SIMPLEXML 1 #define YAZ_MARC_OAIMARC 2 #define YAZ_MARC_MARCXML 3 #define YAZ_MARC_ISO2709 4 #define YAZ_MARC_XCHANGE 5 #define YAZ_MARC_CHECK 6 #define YAZ_MARC_TURBOMARC 7 #define YAZ_MARC_JSON 8 /* supply iconv handle for character set conversion .. */ void yaz_marc_iconv(yaz_marc_t mt, yaz_iconv_t cd); /* set debug level, 0=none, 1=more, 2=even more, .. */ void yaz_marc_debug(yaz_marc_t mt, int level); /* decode MARC in buf of size bsize. Returns >0 on success; <=0 on failure. On success, result in *result with size *rsize. */ int yaz_marc_decode_buf(yaz_marc_t mt, const char *buf, int bsize, const char **result, size_t *rsize); /* decode MARC in buf of size bsize. Returns >0 on success; <=0 on failure. On success, result in WRBUF */ int yaz_marc_decode_wrbuf(yaz_marc_t mt, const char *buf, int bsize, WRBUF wrbuf); ]]> The synopsis is just a basic subset of all functionality. Refer to the actual header file marcdisp.h for details. A MARC conversion handle must be created by using yaz_marc_create and destroyed by calling yaz_marc_destroy. All other functions operate on a yaz_marc_t handle. The output is specified by a call to yaz_marc_xml. The xmlmode must be one of YAZ_MARC_LINE A simple line-by-line format suitable for display but not recommended for further (machine) processing. YAZ_MARC_MARCXML MARCXML. YAZ_MARC_ISO2709 ISO2709 (sometimes just referred to as "MARC"). YAZ_MARC_XCHANGE MarcXchange. YAZ_MARC_CHECK Pseudo format for validation only. Does not generate any real output except diagnostics. YAZ_MARC_TURBOMARC XML format with same semantics as MARCXML but more compact and geared towards fast processing with XSLT. Refer to for more information. YAZ_MARC_JSON MARC-in-JSON format. The actual conversion functions are yaz_marc_decode_buf and yaz_marc_decode_wrbuf which decodes and encodes a MARC record. The former function operates on simple buffers, and stores the resulting record in a WRBUF handle (WRBUF is a simple string type). Display of MARC record The following program snippet illustrates how the MARC API may be used to convert a MARC record to the line-by-line format: TurboMARC TurboMARC is yet another XML encoding of a MARC record. The format was designed for fast processing with XSLT. Applications like Pazpar2 uses XSLT to convert an XML encoded MARC record to an internal representation. This conversion mostly checks the tag of a MARC field to determine the basic rules in the conversion. This check is costly when that tag is encoded as an attribute in MARCXML. By having the tag value as the element instead, makes processing many times faster (at least for Libxslt). TurboMARC is encoded as follows: Record elements is part of namespace "http://www.indexdata.com/turbomarc". A record is enclosed in element r. A collection of records is enclosed in element collection. The leader is encoded as element l with the leader content as its (text) value. A control field is encoded as element c concatenated with the tag value of the control field if the tag value matches the regular expression [a-zA-Z0-9]*. If the tag value does not match the regular expression [a-zA-Z0-9]* the control field is encoded as element c and attribute code will hold the tag value. This rule ensures that in the rare cases where a tag value might result in a non-well-formed XML, then YAZ will encode it as a coded attribute (as in MARCXML). The control field content is the text value of this element. Indicators are encoded as attribute names i1, i2, etc. and corresponding values for each indicator. A data field is encoded as element d concatenated with the tag value of the data field or using the attribute code as described in the rules for control fields. The children of the data field element are subfield elements. Each subfield element is encoded as s concatenated with the sub field code. The text of the subfield element is the contents of the subfield. Indicators are encoded as attributes for the data field element, similar to the encoding for control fields. Retrieval Facility YAZ version 2.1.20 or later includes a Retrieval facility tool which allows a SRU/Z39.50 to describe itself and perform record conversions. The idea is the following: An SRU/Z39.50 client sends a retrieval request which includes a combination of the following parameters: syntax (format), schema (or element set name). The retrieval facility is invoked with parameters in a server/proxy. The retrieval facility matches the parameters a set of "supported" retrieval types. If there is no match, the retrieval signals an error (syntax and / or schema not supported). For a successful match, the backend is invoked with the same or altered retrieval parameters (syntax, schema). If a record is received from the backend, it is converted to the frontend name / syntax. The resulting record is sent back the client and tagged with the frontend syntax / schema. The Retrieval facility is driven by an XML configuration. The configuration is neither Z39.50 ZeeRex or SRU ZeeRex. But it should be easy to generate both of them from the XML configuration. (Unfortunately the two versions of ZeeRex differ substantially in this regard.) Retrieval XML format All elements should be covered by namespace http://indexdata.com/yaz . The root element node must be retrievalinfo. The retrievalinfo must include one or more retrieval elements. Each retrieval defines specific combination of syntax, name and identifier supported by this retrieval service. The retrieval element may include any of the following attributes: syntax (REQUIRED) Defines the record syntax. Possible values is any of the names defined in YAZ' OID database or a raw OID in (n.n ... n). name (OPTIONAL) Defines the name of the retrieval format. This can be any string. For SRU, the value is equivalent to schema (short-hand); for Z39.50 it's equivalent to simple element set name. For YAZ 3.0.24 and later this name may be specified as a glob expression with operators * and ?. identifier (OPTIONAL) Defines the URI schema name of the retrieval format. This can be any string. For SRU, the value is equivalent to URI schema. For Z39.50, there is no equivalent. The retrieval may include one backend element. If a backend element is given, it specifies how the records are retrieved by some backend and how the records are converted from the backend to the "frontend". The attributes, name and syntax may be specified for the backend element. The semantics of these attributes is equivalent to those for the retrieval. However, these values are passed to the "backend". The backend element may include one or more conversion instructions (as children elements). The supported conversions are: marc The marc element specifies a conversion to - and from ISO2709 encoded MARC and &acro.marcxml;/MarcXchange. The following attributes may be specified: inputformat (REQUIRED) Format of input. Supported values are marc (for ISO2709), xml (MARCXML/MarcXchange) and json (MARC-in-JSON). outputformat (REQUIRED) Format of output. Supported values are line (MARC line format); marcxml (for MARCXML), marc (ISO2709), turbomarc, marcxchange (for MarcXchange), or json (MARC-in-JSON ). inputcharset (OPTIONAL) Encoding of input. For XML input formats, this need not be given, but for ISO2709 based input formats, this should be set to the encoding used. For MARC21 records, a common inputcharset value would be marc-8. outputcharset (OPTIONAL) Encoding of output. If outputformat is XML based, it is strongly recommended to use utf-8. select The select selects one or more text nodes and decodes them as XML. The following attributes may be specified: path (REQUIRED) X-Path expression for selecting text nodes. This conversion is available in YAZ 5.8.0 and later. solrmarc The solrmarc decodes solrmarc records. It assumes that the input is pure solrmarc text (no escaping) and will convert all sequences of the form #XX; to a single character of the hexadecimal value as given by XX. The output, presumably, is a valid ISO2709 buffer. This conversion is available in YAZ 5.0.21 and later. xslt The xslt element specifies a conversion via &acro.xslt;. The following attributes may be specified: stylesheet (REQUIRED) Stylesheet file. In addition, the element can be configured as follows: param (OPTIONAL) A param tag configures a parameter to be passed to the &acro.xslt; stylesheet. Multiple param tags may be defined. rdf-lookup The rdf-lookup element looks up BIBFRAME elements in some suitable service, for example http://id.loc.gov/authorities/names and replaces the URIs for specified elements with URIs it finds at that service. Its configuration consists of debug (OPTIONAL) Attribute to the rdf-lookup tag to enable debug output. A value of "1" makes the filter to add a XML comment next to each key it tried to look up, showing the URL, the result, and timing. This is useful for debugging the configuration. The default is not to add any comments. timeout (OPTIONAL) Attribute of the rdf-lookup tag which defines timeout in seconds for the HTTP based rdf-lookup. namespace (OPTIONAL) A namespace tag declares a namespace to be used in the xpath below. The tag requires two attributes: prefix and href. lookup (REQUIRED) A section that defines one tag to be looked up, for example an author.The xpath attribute (REQUIRED) specifies the path to the element(s). key (REQUIRED) A tag withing the lookup tag specifies the value to be used in the lookup, for example a name or an ID. It is a relative Xpath starting from the tag specified in the lookup. server (OPTIONAL) Specifies the URL for server to use for the lookup. A %s is replaced by the key value to be looked up. If not specified, defaults to the same as the previous lookup section, or lacking one, to . The method attribute can be used to specify the HTTP method to be used in this lookup. The default is GET, and the useful alternative is HEAD. See the example below. This conversion is available in YAZ 5.19.0 and later. Retrieval Facility Examples MARC21 backend A typical way to use the retrieval facility is to enable XML for servers that only supports ISO2709 encoded MARC21 records. ]]> This means that our frontend supports: MARC21 F(ull) records. MARC21 B(rief) records. MARCXML records. Dublin core records. MARCXML backend SRW/SRU and Solr backends return records in XML. If they return MARCXML or MarcXchange, the retrieval module can convert those into ISO2709 formats, most commonly USMARC (AKA MARC21). In this example, the backend returns MARCXML for schema="marcxml". ]]> This means that our frontend supports: MARC21 records (any element set name) in MARC-8 encoding. MARCXML records for element-set=marcxml Dublin core records for element-set=dc. RDF-lookup backend This is a minimal example of the backend configuration for the rdf-lookup. It could well be used with some heavy xslt transforms that make BIBFRAME records out of MarxXml. ]]> The debug=1 attribute tells the filter to add XML comments to the key nodes that indicate what lookup it tried to do, how it went, and how long it took. The namespace prefix bf: is defined in the namespace tags. These namespaces are used in the xpath expressions in the lookup sections. The lookup tag specifies one tag to be looked up. The xpath attribute defines which node to modify. It may make use of the namespace definitions above. The server tag gives the URL to be used for the lookup. A %s in the string will get replaced by the key value. If there is no server tag, the one from the preceding lookup section is used, and if there is no previous section, the id.loc.gov address is used as a default. The default is to make a GET request, this example uses HEAD API It should be easy to use the retrieval systems from applications. Refer to the headers yaz/retrieval.h and yaz/record_conv.h. Sorting This chapter describes sorting and how it is supported in YAZ. Sorting applies to a result-set. The Z39.50 sorting facility takes one or more input result-sets and one result-set as output. The most simple case is that the input-set is the same as the output-set. Z39.50 sorting has a separate APDU (service) that is, thus, performed following a search (two phases). In SRU/Solr, however, the model is different. Here, sorting is specified during the search operation. Note, however, that SRU might perform sort as separate search, by referring to an existing result-set in the query (result-set reference). Using the Z39.50 sort service yaz-client and the ZOOM API support the Z39.50 sort facility. In any case the sort sequence or sort criteria is using a string notation. This notation is a one-line notation suitable for being manually entered or generated, and allows for easy logging (one liner). For the ZOOM API, the sort is specified in the call to ZOOM_query_sortby function. For yaz-client the sort is performed and specified using the sort and sort+ commands. For description of the sort criteria notation refer to the sort command in the yaz-client manual. The ZOOM API might choose one of several sort strategies for sorting. Refer to . Type-7 sort Type-7 sort is an extension to the Bib-1 based RPN query where the sort specification is embedded as an Attribute-Plus-Term. The objectives for introducing Type-7 sorting is that it allows a client to perform sorting even if it does not implement/support Z39.50 sort. Virtually all Z39.50 client software supports RPN queries. It also may improve performance because the sort criteria is specified along with the search query. The sort is triggered by the presence of type 7, and the value of type 7 specifies the sortRelation . The value for type 7 is 1 for ascending and 2 for descending. For the sortElement only the generic part is handled. If generic sortKey is of type sortField, then attribute type 1 is present and the value is sortField (InternationalString). If generic sortKey is of type sortAttributes, then the attributes in the list are used. Generic sortKey of type elementSpec is not supported. The term in the sorting Attribute-Plus-Term combo should hold an integer. The value is 0 for primary sorting criteria, 1 for second criteria, etc. Facets YAZ supports facets in the Solr, SRU 2.0 and Z39.50 protocols. Like Type-1/RPN, YAZ supports a string notation for specifying facets. This notataion maps straight to facets.asn. The notation is parsed by function yaz_pqf_parse_facet_list defined in header yaz/pquery.h. For ZOOM C the facets are specified by option "facets". For yaz-client, the 'facets' command is used. The grammar of this specification is as follows: facet-spec ::= facet-list facet-list ::= facet-list ',' attr-spec | attr-spec attr-spec ::= attr-spec '@attr' string | '@attr' string The notation is inspired by PQF. The string following '@attr' must not include blanks and is of the form type=value, where type is an integer and value is a string or an integer. There is no formal facets attribute set (it is not given in the protocol by the facets, although it could). The following types apply: Facet attributes Type Description 1 Field-name. This is often a string, e.g. "Author", "Year", etc. 2 Sort order. Value should be an integer. Value 0: count descending (frequency). Value 1: alpha ascending. 3 Number of terms requested. 4 Start offset (starting from 1)
The ODR Module Introduction &odr; is the BER-encoding/decoding subsystem of &yaz;. Care has been taken to isolate &odr; from the rest of the package - specifically from the transport interface. &odr; may be used in any context where basic ASN.1/BER representations are used. If you are only interested in writing a Z39.50 implementation based on the PDUs that are already provided with &yaz;, you only need to concern yourself with the section on managing ODR streams (). Only if you need to implement ASN.1 beyond that which has been provided, should you worry about the second half of the documentation (). If you use one of the higher-level interfaces, you can skip this section entirely. This is important, so we'll repeat it for emphasis: You do not need to read to implement Z39.50 with &yaz;. If you need a part of the protocol that isn't already in &yaz;, you should contact the authors before going to work on it yourself: We might already be working on it. Conversely, if you implement a useful part of the protocol before us, we'd be happy to include it in a future release. Using ODR ODR Streams Conceptually, the ODR stream is the source of encoded data in the decoding mode; when encoding, it is the receptacle for the encoded data. Before you can use an ODR stream it must be allocated. This is done with the function ODR odr_createmem(int direction); The odr_createmem() function takes as argument one of three manifest constants: ODR_ENCODE, ODR_DECODE, or ODR_PRINT. An &odr; stream can be in only one mode - it is not possible to change its mode once it's selected. Typically, your program will allocate at least two ODR streams - one for decoding, and one for encoding. When you're done with the stream, you can use void odr_destroy(ODR o); to release the resources allocated for the stream. Memory Management Two forms of memory management take place in the &odr; system. The first one, which has to do with allocating little bits of memory (sometimes quite large bits of memory, actually) when a protocol package is decoded, and turned into a complex of interlinked structures. This section deals with this system, and how you can use it for your own purposes. The next section deals with the memory management which is required when encoding data - to make sure that a large enough buffer is available to hold the fully encoded PDU. The &odr; module has its own memory management system, which is used whenever memory is required. Specifically, it is used to allocate space for data when decoding incoming PDUs. You can use the memory system for your own purposes, by using the function void *odr_malloc(ODR o, size_t size); You can't use the normal free(2) routine to free memory allocated by this function, and &odr; doesn't provide a parallel function. Instead, you can call void odr_reset(ODR o); when you are done with the memory: Everything allocated since the last call to odr_reset() is released. The odr_reset() call is also required to clear up an error condition on a stream. The function size_t odr_total(ODR o); returns the number of bytes allocated on the stream since the last call to odr_reset(). The memory subsystem of &odr; is fairly efficient at allocating and releasing little bits of memory. Rather than managing the individual, small bits of space, the system maintains a free-list of larger chunks of memory, which are handed out in small bits. This scheme is generally known as a nibble-memory system. It is very useful for maintaining short-lived constructions such as protocol PDUs. If you want to retain a bit of memory beyond the next call to odr_reset(), you can use the function ODR_MEM odr_extract_mem(ODR o); This function will give you control of the memory recently allocated on the ODR stream. The memory will live (past calls to odr_reset()), until you call the function void odr_release_mem(ODR_MEM p); The opaque ODR_MEM handle has no other purpose than referencing the memory block for you until you want to release it. You can use odr_extract_mem() repeatedly between allocating data, to retain individual control of separate chunks of data. Encoding and Decoding Data When encoding data, the ODR stream will write the encoded octet string in an internal buffer. To retrieve the data, use the function char *odr_getbuf(ODR o, int *len, int *size); The integer pointed to by len is set to the length of the encoded data, and a pointer to that data is returned. *size is set to the size of the buffer (unless size is null, signaling that you are not interested in the size). The next call to a primitive function using the same &odr; stream will overwrite the data, unless a different buffer has been supplied using the call void odr_setbuf(ODR o, char *buf, int len, int can_grow); which sets the encoding (or decoding) buffer used by o to buf, using the length len. Before a call to an encoding function, you can use odr_setbuf() to provide the stream with an encoding buffer of sufficient size (length). The can_grow parameter tells the encoding &odr; stream whether it is allowed to use realloc(2) to increase the size of the buffer when necessary. The default condition of a new encoding stream is equivalent to the results of calling odr_setbuf(stream, 0, 0, 1); In this case, the stream will allocate and reallocate memory as necessary. The stream reallocates memory by repeatedly doubling the size of the buffer - the result is that the buffer will typically reach its maximum, working size with only a small number of reallocation operations. The memory is freed by the stream when the latter is destroyed, unless it was assigned by the user with the can_grow parameter set to zero (in this case, you are expected to retain control of the memory yourself). To assume full control of an encoded buffer, you must first call odr_getbuf() to fetch the buffer and its length. Next, you should call odr_setbuf() to provide a different buffer (or a null pointer) to the stream. In the simplest case, you will reuse the same buffer over and over again, and you will just need to call odr_getbuf() after each encoding operation to get the length and address of the buffer. Note that the stream may reallocate the buffer during an encoding operation, so it is necessary to retrieve the correct address after each encoding operation. It is important to realize that the ODR stream will not release this memory when you call odr_reset(): It will merely update its internal pointers to prepare for the encoding of a new data value. When the stream is released by the odr_destroy() function, the memory given to it by odr_setbuf will be released only if the can_grow parameter to odr_setbuf() was nonzero. The can_grow parameter, in other words, is a way of signaling who is to own the buffer, you or the ODR stream. If you never call odr_setbuf() on your encoding stream, which is typically the case, the buffer allocated by the stream will belong to the stream by default. When you wish to decode data, you should first call odr_setbuf(), to tell the decoding stream where to find the encoded data, and how long the buffer is (the can_grow parameter is ignored by a decoding stream). After this, you can call the function corresponding to the data you wish to decode (e.g. odr_integer() odr z_APDU()). Encoding and decoding functions int odr_integer(ODR o, Odr_int **p, int optional, const char *name); int z_APDU(ODR o, Z_APDU **p, int optional, const char *name); If the data is absent (or doesn't match the tag corresponding to the type), the return value will be either 0 or 1 depending on the optional flag. If optional is 0 and the data is absent, an error flag will be raised in the stream, and you'll need to call odr_reset() before you can use the stream again. If optional is nonzero, the pointer pointed to/ by p will be set to the null value, and the function will return 1. The name argument is used to pretty-print the tag in question. It may be set to NULL if pretty-printing is not desired. If the data value is found where it's expected, the pointer pointed to by the p argument will be set to point to the decoded type. The space for the type will be allocated and owned by the &odr; stream, and it will live until you call odr_reset() on the stream. You cannot use free(2) to release the memory. You can decode several data elements (by repeated calls to odr_setbuf() and your decoding function), and new memory will be allocated each time. When you do call odr_reset(), everything decoded since the last call to odr_reset() will be released. Encoding and decoding of an integer The use of the double indirection can be a little confusing at first (its purpose will become clear later on, hopefully), so an example is in order. We'll encode an integer value, and immediately decode it again using a different stream. A useless, but informative operation. This looks like a lot of work, offhand. In practice, the &odr; streams will typically be allocated once, in the beginning of your program (or at the beginning of a new network session), and the encoding and decoding will only take place in a few, isolated places in your program, so the overhead is quite manageable. Printing When an ODR stream is created of type ODR_PRINT the ODR module will print the contents of a PDU in a readable format. By default output is written to the stderr stream. This behavior can be changed, however, by calling the function odr_setprint(ODR o, FILE *file); before encoders or decoders are being invoked. It is also possible to direct the output to a buffer (or indeed another file), by using the more generic mechanism: void odr_set_stream(ODR o, void *handle, void (*stream_write)(ODR o, void *handle, int type, const char *buf, int len), void (*stream_close)(void *handle)); Here the user provides an opaque handle and two handlers, stream_write for writing, and stream_close which is supposed to close/free resources associated with handle. The stream_close handler is optional and if NULL for the function is provided, it will not be invoked. The stream_write takes the ODR handle as parameter, the user-defined handle, a type ODR_OCTETSTRING, ODR_VISIBLESTRING which indicates the type of contents being written. Another utility useful for diagnostics (error handling) or as part of the printing facilities is: const char **odr_get_element_path(ODR o); which returns a list of current elements that ODR deals with at the moment. For the returned array, say ar, then ar[0] is the top level element, ar[n] is the last. The last element has the property that ar[n+1] == NULL. Element Path for record For a database record part of a PresentResponse the array returned by odr_get_element is presentResponse, databaseOrSurDiagnostics, ?, record, ?, databaseRecord . The question mark appears due to unnamed constructions. Diagnostics The encoding/decoding functions all return 0 when an error occurs. Until you call odr_reset(), you cannot use the stream again, and any function called will immediately return 0. To provide information to the programmer or administrator, the function void odr_perror(ODR o, char *message); is provided, which prints the message argument to stderr along with an error message from the stream. You can also use the function int odr_geterror(ODR o); to get the current error number from the screen. The number will be one of these constants: ODR Error codes code Description OMEMORYMemory allocation failed. OSYSERRA system- or library call has failed. The standard diagnostic variable errno should be examined to determine the actual error. OSPACENo more space for encoding. This will only occur when the user has explicitly provided a buffer for an encoding stream without allowing the system to allocate more space. OREQUIREDThis is a common protocol error; A required data element was missing during encoding or decoding. OUNEXPECTEDAn unexpected data element was found during decoding. OOTHEROther error. This is typically an indication of misuse of the &odr; system by the programmer, and also that the diagnostic system isn't as good as it should be, yet.
The character string array char *odr_errlist[] can be indexed by the error code to obtain a human-readable representation of the problem.
Summary and Synopsis #include <yaz/odr.h> ODR odr_createmem(int direction); void odr_destroy(ODR o); void odr_reset(ODR o); char *odr_getbuf(ODR o, int *len, int *size); void odr_setbuf(ODR o, char *buf, int len, int can_grow); void *odr_malloc(ODR o, int size); NMEM odr_extract_mem(ODR o); int odr_geterror(ODR o); void odr_perror(ODR o, const char *message); extern char *odr_errlist[];
Programming with ODR The API of &odr; is designed to reflect the structure of ASN.1, rather than BER itself. Future releases may be able to represent data in other external forms. There is an ASN.1 tutorial available at this site. This site also has standards for ASN.1 (X.680) and BER (X.690) online. The ODR interface is based loosely on that of the Sun Microsystems XDR routines. Specifically, each function which corresponds to an ASN.1 primitive type has a dual function. Depending on the settings of the ODR stream which is supplied as a parameter, the function may be used either to encode or decode data. The functions that can be built using these primitive functions, to represent more complex data types, share this quality. The result is that you only have to enter the definition for a type once - and you have the functionality of encoding, decoding (and pretty-printing) all in one unit. The resulting C source code is quite compact, and is a pretty straightforward representation of the source ASN.1 specification. In many cases, the model of the XDR functions works quite well in this role. In others, it is less elegant. Most of the hassle comes from the optional SEQUENCE members which don't exist in XDR. The Primitive ASN.1 Types ASN.1 defines a number of primitive types (many of which correspond roughly to primitive types in structured programming languages, such as C). INTEGER The &odr; function for encoding or decoding (or printing) the ASN.1 INTEGER type looks like this: int odr_integer(ODR o, Odr_int **p, int optional, const char *name); The Odr_int is just a simple integer. This form is typical of the primitive &odr; functions. They are named after the type of data that they encode or decode. They take an &odr; stream, an indirect reference to the type in question, and an optional flag (corresponding to the OPTIONAL keyword of ASN.1) as parameters. They all return an integer value of either one or zero. When you use the primitive functions to construct encoders for complex types of your own, you should follow this model as well. This ensures that your new types can be reused as elements in yet more complex types. The o parameter should obviously refer to a properly initialized &odr; stream of the right type (encoding/decoding/printing) for the operation that you wish to perform. When encoding or printing, the function first looks at * p. If * p (the pointer pointed to by p) is a null pointer, this is taken to mean that the data element is absent. If the optional parameter is nonzero, the function will return one (signifying success) without any further processing. If the optional is zero, an internal error flag is set in the &odr; stream, and the function will return 0. No further operations can be carried out on the stream without a call to the function odr_reset(). If *p is not a null pointer, it is expected to point to an instance of the data type. The data will be subjected to the encoding rules, and the result will be placed in the buffer held by the &odr; stream. The other ASN.1 primitives have similar functions that operate in similar manners: BOOLEAN int odr_bool(ODR o, Odr_bool **p, int optional, const char *name); REAL Not defined. NULL int odr_null(ODR o, Odr_null **p, int optional, const char *name); In this case, the value of **p is not important. If *p is different from the null pointer, the null value is present, otherwise it's absent. OCTET STRING typedef struct odr_oct { unsigned char *buf; int len; } Odr_oct; int odr_octetstring(ODR o, Odr_oct **p, int optional, const char *name); The buf field should point to the character array that holds the octetstring. The len field holds the actual length. The character array need not be null-terminated. To make things a little easier, an alternative is given for string types that are not expected to contain embedded NULL characters (e.g. VisibleString): int odr_cstring(ODR o, char **p, int optional, const char *name); which encodes or decodes between OCTETSTRING representations and null-terminated C strings. Functions are provided for the derived string types, e.g.: int odr_visiblestring(ODR o, char **p, int optional, const char *name); BIT STRING int odr_bitstring(ODR o, Odr_bitmask **p, int optional, const char *name); The opaque type Odr_bitmask is only suitable for holding relatively brief bit strings, e.g. for options fields, etc. The constant ODR_BITMASK_SIZE multiplied by 8 gives the maximum possible number of bits. A set of macros are provided for manipulating the Odr_bitmask type: void ODR_MASK_ZERO(Odr_bitmask *b); void ODR_MASK_SET(Odr_bitmask *b, int bitno); void ODR_MASK_CLEAR(Odr_bitmask *b, int bitno); int ODR_MASK_GET(Odr_bitmask *b, int bitno); The functions are modeled after the manipulation functions that accompany the fd_set type used by the select(2) call. ODR_MASK_ZERO should always be called first on a new bitmask, to initialize the bits to zero. OBJECT IDENTIFIER int odr_oid(ODR o, Odr_oid **p, int optional, const char *name); The C OID representation is simply an array of integers, terminated by the value -1 (the Odr_oid type is synonymous with the short type). We suggest that you use the OID database module (see ) to handle object identifiers in your application. Tagging Primitive Types The simplest way of tagging a type is to use the odr_implicit_tag() or odr_explicit_tag() macros: int odr_implicit_tag(ODR o, Odr_fun fun, int class, int tag, int optional, const char *name); int odr_explicit_tag(ODR o, Odr_fun fun, int class, int tag, int optional, const char *name); To create a type derived from the integer type by implicit tagging, you might write: MyInt ::= [210] IMPLICIT INTEGER In the &odr; system, this would be written like: int myInt(ODR o, Odr_int **p, int optional, const char *name) { return odr_implicit_tag(o, odr_integer, p, ODR_CONTEXT, 210, optional, name); } The function myInt() can then be used like any of the primitive functions provided by &odr;. Note that the behavior of odr_explicit_tag() and odr_implicit_tag() macros act exactly the same as the functions they are applied to - they respond to error conditions, etc, in the same manner - they simply have three extra parameters. The class parameter may take one of the values: ODR_CONTEXT, ODR_PRIVATE, ODR_UNIVERSAL, or /ODR_APPLICATION. Constructed Types Constructed types are created by combining primitive types. The &odr; system only implements the SEQUENCE and SEQUENCE OF constructions (although adding the rest of the container types should be simple enough, if the need arises). For implementing SEQUENCEs, the functions int odr_sequence_begin(ODR o, void *p, int size, const char *name); int odr_sequence_end(ODR o); are provided. The odr_sequence_begin() function should be called in the beginning of a function that implements a SEQUENCE type. Its parameters are the &odr; stream, a pointer (to a pointer to the type you're implementing), and the size of the type (typically a C structure). On encoding, it returns 1 if * p is a null pointer. The size parameter is ignored. On decoding, it returns 1 if the type is found in the data stream. size bytes of memory are allocated, and *p is set to point to this space. The odr_sequence_end() is called at the end of the complex function. Assume that a type is defined like this: MySequence ::= SEQUENCE { intval INTEGER, boolval BOOLEAN OPTIONAL } The corresponding &odr; encoder/decoder function and the associated data structures could be written like this: typedef struct MySequence { Odr_int *intval; Odr_bool *boolval; } MySequence; int mySequence(ODR o, MySequence **p, int optional, const char *name) { if (odr_sequence_begin(o, p, sizeof(**p), name) == 0) return optional && odr_ok(o); return odr_integer(o, &(*p)->intval, 0, "intval") && odr_bool(o, &(*p)->boolval, 1, "boolval") && odr_sequence_end(o); } Note the 1 in the call to odr_bool(), to mark that the sequence member is optional. If either of the member types had been tagged, the macros odr_implicit_tag() or odr_explicit_tag() could have been used. The new function can be used exactly like the standard functions provided with &odr;. It will encode, decode or pretty-print a data value of the MySequence type. We like to name types with an initial capital, as done in ASN.1 definitions, and to name the corresponding function with the first character of the name in lower case. You could, of course, name your structures, types, and functions any way you please - as long as you're consistent, and your code is easily readable. odr_ok is just that - a predicate that returns the state of the stream. It is used to ensure that the behavior of the new type is compatible with the interface of the primitive types. Tagging Constructed Types See for information on how to tag the primitive types, as well as types that are already defined. Implicit Tagging Assume the type above had been defined as MySequence ::= [10] IMPLICIT SEQUENCE { intval INTEGER, boolval BOOLEAN OPTIONAL } You would implement this in &odr; by calling the function int odr_implicit_settag(ODR o, int class, int tag); which overrides the tag of the type immediately following it. The macro odr_implicit_tag() works by calling odr_implicit_settag() immediately before calling the function pointer argument. Your type function could look like this: int mySequence(ODR o, MySequence **p, int optional, const char *name) { if (odr_implicit_settag(o, ODR_CONTEXT, 10) == 0 || odr_sequence_begin(o, p, sizeof(**p), name) == 0) return optional && odr_ok(o); return odr_integer(o, &(*p)->intval, 0, "intval") && odr_bool(o, &(*p)->boolval, 1, "boolval") && odr_sequence_end(o); } The definition of the structure MySequence would be the same. Explicit Tagging Explicit tagging of constructed types is a little more complicated, since you are in effect adding a level of construction to the data. Assume the definition: MySequence ::= [10] IMPLICIT SEQUENCE { intval INTEGER, boolval BOOLEAN OPTIONAL } Since the new type has an extra level of construction, two new functions are needed to encapsulate the base type: int odr_constructed_begin(ODR o, void *p, int class, int tag, const char *name); int odr_constructed_end(ODR o); Assume that the IMPLICIT in the type definition above were replaced with EXPLICIT (or that the IMPLICIT keyword was simply deleted, which would be equivalent). The structure definition would look the same, but the function would look like this: int mySequence(ODR o, MySequence **p, int optional, const char *name) { if (odr_constructed_begin(o, p, ODR_CONTEXT, 10, name) == 0) return optional && odr_ok(o); if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p)); if (odr_sequence_begin(o, p, sizeof(**p), 0) == 0) { *p = 0; /* this is almost certainly a protocol error */ return 0; } return odr_integer(o, &(*p)->intval, 0, "intval") && odr_bool(o, &(*p)->boolval, 1, "boolval") && odr_sequence_end(o) && odr_constructed_end(o); } Notice that the interface here gets kind of nasty. The reason is simple: Explicitly tagged, constructed types are fairly rare in the protocols that we care about, so the aesthetic annoyance (not to mention the dangers of a cluttered interface) is less than the time that would be required to develop a better interface. Nevertheless, it is far from satisfying, and it's a point that will be worked on in the future. One option for you would be to simply apply the odr_explicit_tag() macro to the first function, and not have to worry about odr_constructed_* yourself. Incidentally, as you might have guessed, the odr_sequence_ functions are themselves implemented using the /odr_constructed_ functions. SEQUENCE OF To handle sequences (arrays) of a specific type, the function int odr_sequence_of(ODR o, int (*fun)(ODR o, void *p, int optional), void *p, int *num, const char *name); The fun parameter is a pointer to the decoder/encoder function of the type. p is a pointer to an array of pointers to your type. num is the number of elements in the array. Assume a type MyArray ::= SEQUENCE OF INTEGER The C representation might be typedef struct MyArray { int num_elements; Odr_int **elements; } MyArray; And the function might look like int myArray(ODR o, MyArray **p, int optional, const char *name) { if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p)); if (odr_sequence_of(o, odr_integer, &(*p)->elements, &(*p)->num_elements, name)) return 1; *p = 0; return optional && odr_ok(o); } CHOICE Types The choice type is used fairly often in some ASN.1 definitions, so some work has gone into streamlining its interface. CHOICE types are handled by the function: int odr_choice(ODR o, Odr_arm arm[], void *p, void *whichp, const char *name); The arm array is used to describe each of the possible types that the CHOICE type may assume. Internally in your application, the CHOICE type is represented as a discriminated union. That is, a C union accompanied by an integer (or enum) identifying the active 'arm' of the union. whichp is a pointer to the union discriminator. When encoding, it is examined to determine the current type. When decoding, it is set to reference the type that was found in the input stream. The Odr_arm type is defined thus: typedef struct odr_arm { int tagmode; int class; int tag; int which; Odr_fun fun; char *name; } Odr_arm; The interpretation of the fields are: tagmode Either ODR_IMPLICIT, ODR_EXPLICIT, or ODR_NONE (-1) to mark no tagging. which The value of the discriminator that corresponds to this CHOICE element. Typically, it will be a #defined constant, or an enum member. fun A pointer to a function that implements the type of the CHOICE member. It may be either a standard &odr; type or a type defined by yourself. name Name of tag. A handy way to prepare the array for use by the odr_choice() function is to define it as a static, initialized array in the beginning of your decoding/encoding function. Assume the type definition: MyChoice ::= CHOICE { untagged INTEGER, tagged [99] IMPLICIT INTEGER, other BOOLEAN } Your C type might look like typedef struct MyChoice { enum { MyChoice_untagged, MyChoice_tagged, MyChoice_other } which; union { Odr_int *untagged; Odr_int *tagged; Odr_bool *other; } u; }; And your function could look like this: int myChoice(ODR o, MyChoice **p, int optional, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, MyChoice_untagged, odr_integer, "untagged"}, {ODR_IMPLICIT, ODR_CONTEXT, 99, MyChoice_tagged, odr_integer, "tagged"}, {-1, -1, -1, MyChoice_other, odr_boolean, "other"}, {-1, -1, -1, -1, 0} }; if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p); else if (!*p) return optional && odr_ok(o); if (odr_choice(o, arm, &(*p)->u, &(*p)->which), name) return 1; *p = 0; return optional && odr_ok(o); } In some cases (say, a non-optional choice which is a member of a sequence), you can "embed" the union and its discriminator in the structure belonging to the enclosing type, and you won't need to fiddle with memory allocation to create a separate structure to wrap the discriminator and union. The corresponding function is somewhat nicer in the Sun XDR interface. Most of the complexity of this interface comes from the possibility of declaring sequence elements (including CHOICEs) optional. The ASN.1 specifications naturally require that each member of a CHOICE have a distinct tag, so they can be told apart on decoding. Sometimes it can be useful to define a CHOICE that has multiple types that share the same tag. You'll need some other mechanism, perhaps keyed to the context of the CHOICE type. In effect, we would like to introduce a level of context-sensitiveness to our ASN.1 specification. When encoding an internal representation, we have no problem, as long as each CHOICE member has a distinct discriminator value. For decoding, we need a way to tell the choice function to look for a specific arm of the table. The function void odr_choice_bias(ODR o, int what); provides this functionality. When called, it leaves a notice for the next call to odr_choice() to be called on the decoding stream o, that only the arm entry with a which field equal to what should be tried. The most important application (perhaps the only one, really) is in the definition of application-specific EXTERNAL encoders/decoders which will automatically decode an ANY member given the direct or indirect reference. Debugging The protocol modules are suffering somewhat from a lack of diagnostic tools at the moment. Specifically ways to pretty-print PDUs that aren't recognized by the system. We'll include something to this end in a not-too-distant release. In the meantime, what we do when we get packages we don't understand is to compile the ODR module with ODR_DEBUG defined. This causes the module to dump tracing information as it processes data units. With this output and the protocol specification (Z39.50), it is generally fairly easy to see what goes wrong.
The COMSTACK Module Synopsis (blocking mode) Introduction The &comstack; subsystem provides a transparent interface to different types of transport stacks for the exchange of BER-encoded data and HTTP packets. At present, the RFC1729 method (BER over TCP/IP), local UNIX socket and an experimental SSL stack are supported, but others may be added in time. The philosophy of the module is to provide a simple interface by hiding unused options and facilities of the underlying libraries. This is always done at the risk of losing generality, and it may prove that the interface will need extension later on. There hasn't been interest in the XTImOSI stack for some years. Therefore, it is no longer supported. The interface is implemented in such a fashion that only the sub-layers constructed to the transport methods that you wish to use in your application are linked in. You will note that even though simplicity was a goal in the design, the interface is still orders of magnitudes more complex than the transport systems found in many other packages. One reason is that the interface needs to support the somewhat different requirements of the different lower-layer communications stacks; another important reason is that the interface seeks to provide a more or less industrial-strength approach to asynchronous event-handling. When no function is allowed to block, things get more complex - particularly on the server side. We urge you to have a look at the demonstration client and server provided with the package. They are meant to be easily readable and instructive, while still being at least moderately useful. Common Functions Managing Endpoints COMSTACK cs_create(CS_TYPE type, int blocking, int protocol); Creates an instance of the protocol stack - a communications endpoint. The type parameter determines the mode of communication. At present the following values are supported: tcpip_type TCP/IP (BER over TCP/IP or HTTP over TCP/IP) ssl_type Secure Socket Layer (SSL). This COMSTACK is experimental and is not fully implemented. If HTTP is used, this effectively is HTTPS. unix_type Unix socket (unix only). Local Transfer via file socket. See unix 7. The cs_create function returns a null-pointer if a system error occurs. The blocking parameter should be '1' if you wish the association to operate in blocking mode, and '0' otherwise. The protocol field should be PROTO_Z3950 or PROTO_HTTP. Protocol PROTO_SR is no longer supported. void cs_close(COMSTACK handle); Closes the connection (as elegantly as the lower layers will permit), and releases the resources pointed to by the handle parameter. The handle should not be referenced again after this call. We really need a soft disconnect, don't we? Data Exchange int cs_put(COMSTACK handle, char *buf, int len); Sends buf down the wire. In blocking mode, this function will return only when a full buffer has been written, or an error has occurred. In nonblocking mode, it's possible that the function will be unable to send the full buffer at once, which will be indicated by a return value of 1. The function will keep track of the number of octets already written; you should call it repeatedly with the same values of buf and len, until the buffer has been transmitted. When a full buffer has been sent, the function will return 0 for success. The return value -1 indicates an error condition (see below). int cs_get(COMSTACK handle, char **buf, int *size); Receives a PDU or HTTP Response from the peer. Returns the number of bytes read. In nonblocking mode, it is possible that not all of the packet can be read at once. In this case, the function returns 1. To simplify the interface, the function is responsible for managing the size of the buffer. It will be reallocated if necessary to contain large packages, and will sometimes be moved around internally by the subsystem when partial packages are read. Before calling cs_get for the first time, the buffer can be initialized to the null pointer, and the length should also be set to 0 (cs_get will perform a malloc(2) on the buffer for you). When a full buffer has been read, the size of the package is returned (which will always be greater than 1). The return value -1 indicates an error condition. See also the cs_more() function below. int cs_more(COMSTACK handle); The cs_more() function should be used in conjunction with cs_get and select(2). The cs_get() function will sometimes (notably in the TCP/IP mode) read more than a single protocol package off the network. When this happens, the extra package is stored by the subsystem. After calling cs_get(), and before waiting for more input, You should always call cs_more() to check if there's a full protocol package already read. If cs_more() returns 1, cs_get() can be used to immediately fetch the new package. For the mOSI subsystem, the function should always return 0, but if you want your stuff to be protocol independent, you should use it. The cs_more() function is required because the RFC1729-method does not provide a way of separating individual PDUs, short of partially decoding the BER. Some other implementations will carefully nibble at the packet by calling read(2) several times. This was felt to be too inefficient (or at least clumsy) - hence the call for this extra function. int cs_look(COMSTACK handle); This function is useful when you're operating in nonblocking mode. Call it when select(2) tells you there's something happening on the line. It returns one of the following values: CS_NONE No event is pending. The data found on the line was not a complete package. CS_CONNECT A response to your connect request has been received. Call cs_rcvconnect to process the event and to finalize the connection establishment. CS_DISCON The other side has closed the connection (or maybe sent a disconnect request - but do we care? Maybe later). Call cs_close to close your end of the association as well. CS_LISTEN A connect request has been received. Call cs_listen to process the event. CS_DATA There's data to be found on the line. Call cs_get to get it. You should be aware that even if cs_look() tells you that there's an event event pending, the corresponding function may still return and tell you there was nothing to be found. This means that only part of a package was available for reading. The same event will show up again, when more data has arrived. int cs_fileno(COMSTACK h); returns the file descriptor of the association. Use this when file-level operations on the endpoint are required (select(2) operations, specifically). Client Side int cs_connect(COMSTACK handle, void *address); Initiate a connection with the target at address (more on addresses below). The function will return 0 on success, and 1 if the operation does not complete immediately (this will only happen on a nonblocking endpoint). In this case, use cs_rcvconnect to complete the operation, when select(2) or poll(2) reports input pending on the association. int cs_rcvconnect(COMSTACK handle); Complete a connect operation initiated by cs_connect(). It will return 0 on success; 1 if the operation has not yet completed (in this case, call the function again later); -1 if an error has occurred. Server Side To establish a server under the inetd server, you can use COMSTACK cs_createbysocket(int socket, CS_TYPE type, int blocking, int protocol); The socket parameter is an established socket (when your application is invoked from inetd, the socket will typically be 0. The following parameters are identical to the ones for cs_create. int cs_bind(COMSTACK handle, void *address, int mode) Binds a local address to the endpoint. Read about addresses below. The mode parameter should be either CS_CLIENT or CS_SERVER. int cs_listen(COMSTACK handle, char *addr, int *addrlen); Call this to process incoming events on an endpoint that has been bound in listening mode. It will return 0 to indicate that the connect request has been received, 1 to signal a partial reception, and -1 to indicate an error condition. COMSTACK cs_accept(COMSTACK handle); This finalizes the server-side association establishment, after cs_listen has completed successfully. It returns a new connection endpoint, which represents the new association. The application will typically wish to fork off a process to handle the association at this point, and continue listen for new connections on the old handle. You can use the call const char *cs_addrstr(COMSTACK); on an established connection to retrieve the host-name of the remote host. You may need to use this function with some care if your name server service is slow or unreliable. Addresses The low-level format of the addresses are different depending on the mode of communication you have chosen. A function is provided by each of the lower layers to map a user-friendly string-form address to the binary form required by the lower layers. void *cs_straddr(COMSTACK handle, const char *str); The format for TCP/IP and SSL addresses is: <host> [ ':' <portnum> ] The hostname can be either a domain name or an IP address. The port number, if omitted, defaults to 210. For TCP/IP and SSL, the special hostnames @, maps to IN6ADDR_ANY_INIT with IPV4 binding as well (bindv6only=0), The special hostname @4 binds to INADDR_ANY (IPV4 only listener). The special hostname @6 binds to IN6ADDR_ANY_INIT with bindv6only=1 (IPV6 only listener). For UNIX sockets, the format of an address is the socket filename. When a connection has been established, you can use const char *cs_addrstr(COMSTACK h); to retrieve the host name of the peer system. The function returns a pointer to a static area, which is overwritten on the next call to the function. A fairly recent addition to the &comstack; module is the utility function COMSTACK cs_create_host (const char *str, int blocking, void **vp); which is just a wrapper for cs_create and cs_straddr. The str is similar to that described for cs_straddr but with a prefix denoting the &comstack; type. Prefixes supported are tcp: and unix: and ssl: for TCP/IP and UNIX and SSL respectively. If no prefix is given, then TCP/IP is used. The blocking is passed to function cs_create. The third parameter vp is a pointer to &comstack; stack type specific values. Parameter vp is reserved for future use. Set it to NULL. SSL void *cs_get_ssl(COMSTACK cs); Returns the SSL handle, SSL * for comstack. If comstack is not of type SSL, then NULL is returned. int cs_set_ssl_ctx(COMSTACK cs, void *ctx); Sets SSL context for comstack. The parameter is expected to be of type SSL_CTX *. This function should be called just after comstack has been created (before connect, bind, etc). This function returns 1 for success; 0 for failure. int cs_set_ssl_certificate_file(COMSTACK cs, const char *fname); Sets SSL certificate for comstack as a PEM file. This function returns 1 for success; 0 for failure. int cs_get_ssl_peer_certificate_x509(COMSTACK cs, char **buf, int *len); This function returns the peer certificate. If successful, *buf and *len holds X509 buffer and length respectively. Buffer should be freed with xfree. This function returns 1 for success; 0 for failure. Diagnostics All functions return -1 if an error occurs. Typically, the functions will return 0 on success, but the data exchange functions (cs_get, cs_put, cs_more) follow special rules. Consult their descriptions. The error code for the COMSTACK can be retrieved using C macro cs_errno which will return one of the error codes CSYSERR, CSOUTSTATE, CSNODATA, ... int cs_errno(COMSTACK handle); You can the textual representation of the error code by using cs_errmsg, which works like strerror(3). const char *cs_errmsg(int n); It is also possible to get straight to the textual representation without the error code, by using cs_strerror. const char *cs_strerror(COMSTACK h); Summary and Synopsis #include /* this is for TCP/IP and SSL support */ #include /* this is for UNIX socket support */ COMSTACK cs_create(CS_TYPE type, int blocking, int protocol); COMSTACK cs_createbysocket(int s, CS_TYPE type, int blocking, int protocol); COMSTACK cs_create_host(const char *str, int blocking, void **vp); int cs_bind(COMSTACK handle, int mode); int cs_connect(COMSTACK handle, void *address); int cs_rcvconnect(COMSTACK handle); int cs_listen(COMSTACK handle); COMSTACK cs_accept(COMSTACK handle); int cs_put(COMSTACK handle, char *buf, int len); int cs_get(COMSTACK handle, char **buf, int *size); int cs_more(COMSTACK handle); void cs_close(COMSTACK handle); int cs_look(COMSTACK handle); void *cs_straddr(COMSTACK handle, const char *str); const char *cs_addrstr(COMSTACK h); ]]> Future Directions We have a new and better version of the front-end server on the drawing board. Resources and external commitments will govern when we'll be able to do something real with it. Features should include greater flexibility, greater support for access/resource control, and easy support for Explain (possibly with Zebra as an extra database engine). &yaz; is a BER toolkit and as such should support all protocols out there based on that. We'd like to see running ILL applications. It shouldn't be that hard. Another thing that would be interesting is LDAP. Maybe a generic framework for doing IR using both LDAP and Z39.50 transparently. The SOAP implementation is incomplete. In the future we hope to add more features to it. Perhaps make a WSDL/XML Schema compiler. The authors of libxml2 are already working on XML Schema and RELAX NG compilers so this may not be too hard. It would be neat to have a proper module mechanism for the Generic Frontend Server so that backend would be dynamically loaded (as shared objects / DLLs). Other than that, &yaz; generally moves in the directions which appear to make the most people happy (including ourselves, as prime users of the software). If there's something you'd like to see in here, then drop us a note and let's see what we can come up with. Reference The material in this chapter is drawn directly from the individual manual entries. &manref; List of Object Identifiers These is a list of object identifiers that are built into YAZ. &std-oid-table; Bib-1 diagnostics List of Bib-1 diagnostics that are known to YAZ. &bib1-diag-table; SRU diagnostics List of SRU diagnostics that are known to YAZ. &srw-diag-table; License Index Data Copyright Copyright © ©right-year; Index Data. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY INDEX DATA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. About Index Data Index Data is a consulting and software-development enterprise that specializes in library and information management systems. Our interests and expertise span a broad range of related fields, and one of our primary, long-term objectives is the development of a powerful information management system with open network interfaces and hyper-media capabilities. We make this software available free of charge, on a fairly unrestrictive license; as a service to the networking community, and to further the development of quality software for open network communication. We'll be happy to answer questions about the software, and about ourselves in general. The Hacker's Jargon File has the following to say about the use of the prefix "YA" in the name of a software product. Yet Another. adj. 1. Of your own work: A humorous allusion often used in titles to acknowledge that the topic is not original, though the content is. As in "Yet Another AI Group" or "Yet Another Simulated Annealing Algorithm". 2. Of others' work: Describes something of which there are already far too many. Credits This appendix lists individuals that have contributed in the development of &yaz;. Some have contributed with code, while others have provided bug fixes or suggestions. If we're missing somebody, of if you, for whatever reason, don't like to be listed here, let us know. Gary Anderson Dimitrios Andreadis Morten Bøgeskov Rocco Carbone Matthew Carey Hans van Dalen Irina Dijour Larry E. Dixson Hans van den Dool Mads Bondo Dydensborg Franck Falcoz Kevin Gamiel Morten Garkier Hendriksen Morten Holmqvist Ian Ibbotson Shigeru Ishida Heiko Jansen David Johnson Oleg Kolobov Giannis Kosmas Kang-Jin Lee Pieter Van Lierop Stefan Lohrum Ronald van der Meer Thomas W. Place Peter Popovics Jacob Chr. Poulsen Ko van der Sloot Mike Taylor Rustam T. Usmanov Charles Woodfield Tom André Øverland
yaz-5.28.0/doc/zoom.facets.html0000644000175000017500000001064413572540030013221 000000000000005. ZOOM Facets

5. ZOOM Facets

Facets are only supported for a few Z39.50 targets. It is a relatively new non-standard Z39.50 extension (see facets.asn in the YAZ source). However, facets are usually supported for Solr and SRU 2.0 targets.

Facets may be specified by the facets option before a search is sent. See Section 8, “Facets” for the notation. For inspection of the returned facets, the following functions are available:

    ZOOM_facet_field *ZOOM_resultset_facets(ZOOM_resultset r);

    size_t ZOOM_resultset_facets_size(ZOOM_resultset r);

    ZOOM_facet_field ZOOM_resultset_get_facet_field(ZOOM_resultset r,
                                                    const char *facet_name);

    ZOOM_facet_field ZOOM_resultset_get_facet_field_by_index(ZOOM_resultset r,
                                                             int pos);

    const char *ZOOM_facet_field_name(ZOOM_facet_field facet_field);

    size_t ZOOM_facet_field_term_count(ZOOM_facet_field facet_field);

    const char *ZOOM_facet_field_get_term(ZOOM_facet_field facet_field,
                                          size_t idx, int *freq);
   

References to temporary structures are returned by all functions. They are only valid as long the Result set is valid.

All facet fields may be returned by a call to ZOOM_resultset_facets. The length of the array is given by ZOOM_resultset_facets_size. The array is zero-based and the last entry will be at ZOOM_resultset_facets_size(result_set)-1.

Facet fields can also be fetched via its name using ZOOM_resultset_get_facet_field. Or by its index (starting from 0) by a call to ZOOM_resultset_get_facet_field_by_index. Both of these functions return NULL if name is not found or index is out of bounds.

Function ZOOM_facet_field_name gets the request facet name from a returned facet field.

Function ZOOM_facet_field_get_term returns the idx'th term and term count for a facet field. Idx must between 0 and ZOOM_facet_field_term_count-1, otherwise the returned reference will be NULL. On a valid idx, the value of the freq reference will be the term count. The freq parameter must be valid pointer to integer.

yaz-5.28.0/doc/odr.programming.html0000644000175000017500000006505513572540030014104 000000000000003. Programming with ODR

3. Programming with ODR

The API of ODR is designed to reflect the structure of ASN.1, rather than BER itself. Future releases may be able to represent data in other external forms.

Tip

There is an ASN.1 tutorial available at this site. This site also has standards for ASN.1 (X.680) and BER (X.690) online.

The ODR interface is based loosely on that of the Sun Microsystems XDR routines. Specifically, each function which corresponds to an ASN.1 primitive type has a dual function. Depending on the settings of the ODR stream which is supplied as a parameter, the function may be used either to encode or decode data. The functions that can be built using these primitive functions, to represent more complex data types, share this quality. The result is that you only have to enter the definition for a type once - and you have the functionality of encoding, decoding (and pretty-printing) all in one unit. The resulting C source code is quite compact, and is a pretty straightforward representation of the source ASN.1 specification.

In many cases, the model of the XDR functions works quite well in this role. In others, it is less elegant. Most of the hassle comes from the optional SEQUENCE members which don't exist in XDR.

3.1. The Primitive ASN.1 Types

ASN.1 defines a number of primitive types (many of which correspond roughly to primitive types in structured programming languages, such as C).

3.1.1. INTEGER

The ODR function for encoding or decoding (or printing) the ASN.1 INTEGER type looks like this:

      int odr_integer(ODR o, Odr_int **p, int optional, const char *name);
     

The Odr_int is just a simple integer.

This form is typical of the primitive ODR functions. They are named after the type of data that they encode or decode. They take an ODR stream, an indirect reference to the type in question, and an optional flag (corresponding to the OPTIONAL keyword of ASN.1) as parameters. They all return an integer value of either one or zero. When you use the primitive functions to construct encoders for complex types of your own, you should follow this model as well. This ensures that your new types can be reused as elements in yet more complex types.

The o parameter should obviously refer to a properly initialized ODR stream of the right type (encoding/decoding/printing) for the operation that you wish to perform.

When encoding or printing, the function first looks at * p. If * p (the pointer pointed to by p) is a null pointer, this is taken to mean that the data element is absent. If the optional parameter is nonzero, the function will return one (signifying success) without any further processing. If the optional is zero, an internal error flag is set in the ODR stream, and the function will return 0. No further operations can be carried out on the stream without a call to the function odr_reset().

If *p is not a null pointer, it is expected to point to an instance of the data type. The data will be subjected to the encoding rules, and the result will be placed in the buffer held by the ODR stream.

The other ASN.1 primitives have similar functions that operate in similar manners:

3.1.2. BOOLEAN

int odr_bool(ODR o, Odr_bool **p, int optional, const char *name);
     

3.1.3. REAL

Not defined.

3.1.4. NULL

int odr_null(ODR o, Odr_null **p, int optional, const char *name);
     

In this case, the value of **p is not important. If *p is different from the null pointer, the null value is present, otherwise it's absent.

3.1.5. OCTET STRING

typedef struct odr_oct
{
    unsigned char *buf;
    int len;
} Odr_oct;

int odr_octetstring(ODR o, Odr_oct **p, int optional,
                    const char *name);
     

The buf field should point to the character array that holds the octetstring. The len field holds the actual length. The character array need not be null-terminated.

To make things a little easier, an alternative is given for string types that are not expected to contain embedded NULL characters (e.g. VisibleString):

      int odr_cstring(ODR o, char **p, int optional, const char *name);
     

which encodes or decodes between OCTETSTRING representations and null-terminated C strings.

Functions are provided for the derived string types, e.g.:

int odr_visiblestring(ODR o, char **p, int optional,
                      const char *name);
     

3.1.6. BIT STRING

int odr_bitstring(ODR o, Odr_bitmask **p, int optional,
                  const char *name);
     

The opaque type Odr_bitmask is only suitable for holding relatively brief bit strings, e.g. for options fields, etc. The constant ODR_BITMASK_SIZE multiplied by 8 gives the maximum possible number of bits.

A set of macros are provided for manipulating the Odr_bitmask type:

void ODR_MASK_ZERO(Odr_bitmask *b);

void ODR_MASK_SET(Odr_bitmask *b, int bitno);

void ODR_MASK_CLEAR(Odr_bitmask *b, int bitno);

int ODR_MASK_GET(Odr_bitmask *b, int bitno);
     

The functions are modeled after the manipulation functions that accompany the fd_set type used by the select(2) call. ODR_MASK_ZERO should always be called first on a new bitmask, to initialize the bits to zero.

3.1.7. OBJECT IDENTIFIER

int odr_oid(ODR o, Odr_oid **p, int optional, const char *name);
     

The C OID representation is simply an array of integers, terminated by the value -1 (the Odr_oid type is synonymous with the short type). We suggest that you use the OID database module (see Section 2.1, “OID database”) to handle object identifiers in your application.

3.2. Tagging Primitive Types

The simplest way of tagging a type is to use the odr_implicit_tag() or odr_explicit_tag() macros:

int odr_implicit_tag(ODR o, Odr_fun fun, int class, int tag,
                     int optional, const char *name);

int odr_explicit_tag(ODR o, Odr_fun fun, int class, int tag,
                     int optional, const char *name);
    

To create a type derived from the integer type by implicit tagging, you might write:

     MyInt ::= [210] IMPLICIT INTEGER
    

In the ODR system, this would be written like:

int myInt(ODR o, Odr_int **p, int optional, const char *name)
{
    return odr_implicit_tag(o, odr_integer, p,
			    ODR_CONTEXT, 210, optional, name);
}
    

The function myInt() can then be used like any of the primitive functions provided by ODR. Note that the behavior of odr_explicit_tag() and odr_implicit_tag() macros act exactly the same as the functions they are applied to - they respond to error conditions, etc, in the same manner - they simply have three extra parameters. The class parameter may take one of the values: ODR_CONTEXT, ODR_PRIVATE, ODR_UNIVERSAL, or /ODR_APPLICATION.

3.3. Constructed Types

Constructed types are created by combining primitive types. The ODR system only implements the SEQUENCE and SEQUENCE OF constructions (although adding the rest of the container types should be simple enough, if the need arises).

For implementing SEQUENCEs, the functions

int odr_sequence_begin(ODR o, void *p, int size, const char *name);
int odr_sequence_end(ODR o);
    

are provided.

The odr_sequence_begin() function should be called in the beginning of a function that implements a SEQUENCE type. Its parameters are the ODR stream, a pointer (to a pointer to the type you're implementing), and the size of the type (typically a C structure). On encoding, it returns 1 if * p is a null pointer. The size parameter is ignored. On decoding, it returns 1 if the type is found in the data stream. size bytes of memory are allocated, and *p is set to point to this space. The odr_sequence_end() is called at the end of the complex function. Assume that a type is defined like this:

MySequence ::= SEQUENCE {
     intval INTEGER,
     boolval BOOLEAN OPTIONAL
}
    

The corresponding ODR encoder/decoder function and the associated data structures could be written like this:

typedef struct MySequence
{
    Odr_int *intval;
    Odr_bool *boolval;
} MySequence;

int mySequence(ODR o, MySequence **p, int optional, const char *name)
{
    if (odr_sequence_begin(o, p, sizeof(**p), name) == 0)
        return optional && odr_ok(o);
    return
        odr_integer(o, &(*p)->intval, 0, "intval") &&
        odr_bool(o, &(*p)->boolval, 1, "boolval") &&
        odr_sequence_end(o);
}
    

Note the 1 in the call to odr_bool(), to mark that the sequence member is optional. If either of the member types had been tagged, the macros odr_implicit_tag() or odr_explicit_tag() could have been used. The new function can be used exactly like the standard functions provided with ODR. It will encode, decode or pretty-print a data value of the MySequence type. We like to name types with an initial capital, as done in ASN.1 definitions, and to name the corresponding function with the first character of the name in lower case. You could, of course, name your structures, types, and functions any way you please - as long as you're consistent, and your code is easily readable. odr_ok is just that - a predicate that returns the state of the stream. It is used to ensure that the behavior of the new type is compatible with the interface of the primitive types.

3.4. Tagging Constructed Types

Note

See Section 3.2, “Tagging Primitive Types” for information on how to tag the primitive types, as well as types that are already defined.

3.4.1. Implicit Tagging

Assume the type above had been defined as

MySequence ::= [10] IMPLICIT SEQUENCE {
      intval INTEGER,
      boolval BOOLEAN OPTIONAL
}
     

You would implement this in ODR by calling the function

int odr_implicit_settag(ODR o, int class, int tag);
     

which overrides the tag of the type immediately following it. The macro odr_implicit_tag() works by calling odr_implicit_settag() immediately before calling the function pointer argument. Your type function could look like this:

int mySequence(ODR o, MySequence **p, int optional, const char *name)
{
    if (odr_implicit_settag(o, ODR_CONTEXT, 10) == 0 ||
        odr_sequence_begin(o, p, sizeof(**p), name) == 0)
        return optional && odr_ok(o);
    return
        odr_integer(o, &(*p)->intval, 0, "intval") &&
        odr_bool(o, &(*p)->boolval, 1, "boolval") &&
        odr_sequence_end(o);
}
     

The definition of the structure MySequence would be the same.

3.4.2. Explicit Tagging

Explicit tagging of constructed types is a little more complicated, since you are in effect adding a level of construction to the data.

Assume the definition:

MySequence ::= [10] IMPLICIT SEQUENCE {
   intval INTEGER,
   boolval BOOLEAN OPTIONAL
}
     

Since the new type has an extra level of construction, two new functions are needed to encapsulate the base type:

int odr_constructed_begin(ODR o, void *p, int class, int tag,
                          const char *name);

int odr_constructed_end(ODR o);
     

Assume that the IMPLICIT in the type definition above were replaced with EXPLICIT (or that the IMPLICIT keyword was simply deleted, which would be equivalent). The structure definition would look the same, but the function would look like this:

int mySequence(ODR o, MySequence **p, int optional, const char *name)
{
    if (odr_constructed_begin(o, p, ODR_CONTEXT, 10, name) == 0)
        return optional && odr_ok(o);
    if (o->direction == ODR_DECODE)
        *p = odr_malloc(o, sizeof(**p));
    if (odr_sequence_begin(o, p, sizeof(**p), 0) == 0)
    {
        *p = 0; /* this is almost certainly a protocol error */
        return 0;
    }
    return
        odr_integer(o, &(*p)->intval, 0, "intval") &&
        odr_bool(o, &(*p)->boolval, 1, "boolval") &&
        odr_sequence_end(o) &&
        odr_constructed_end(o);
}
     

Notice that the interface here gets kind of nasty. The reason is simple: Explicitly tagged, constructed types are fairly rare in the protocols that we care about, so the aesthetic annoyance (not to mention the dangers of a cluttered interface) is less than the time that would be required to develop a better interface. Nevertheless, it is far from satisfying, and it's a point that will be worked on in the future. One option for you would be to simply apply the odr_explicit_tag() macro to the first function, and not have to worry about odr_constructed_* yourself. Incidentally, as you might have guessed, the odr_sequence_ functions are themselves implemented using the /odr_constructed_ functions.

3.5. SEQUENCE OF

To handle sequences (arrays) of a specific type, the function

int odr_sequence_of(ODR o, int (*fun)(ODR o, void *p, int optional),
                    void *p, int *num, const char *name);
    

The fun parameter is a pointer to the decoder/encoder function of the type. p is a pointer to an array of pointers to your type. num is the number of elements in the array.

Assume a type

MyArray ::= SEQUENCE OF INTEGER
    

The C representation might be

typedef struct MyArray
{
    int num_elements;
    Odr_int **elements;
} MyArray;
    

And the function might look like

int myArray(ODR o, MyArray **p, int optional, const char *name)
{
    if (o->direction == ODR_DECODE)
        *p = odr_malloc(o, sizeof(**p));
    if (odr_sequence_of(o, odr_integer, &(*p)->elements,
        &(*p)->num_elements, name))
        return 1;
    *p = 0;
        return optional && odr_ok(o);
}
    

3.6. CHOICE Types

The choice type is used fairly often in some ASN.1 definitions, so some work has gone into streamlining its interface.

CHOICE types are handled by the function:

int odr_choice(ODR o, Odr_arm arm[], void *p, void *whichp,
               const char *name);
    

The arm array is used to describe each of the possible types that the CHOICE type may assume. Internally in your application, the CHOICE type is represented as a discriminated union. That is, a C union accompanied by an integer (or enum) identifying the active 'arm' of the union. whichp is a pointer to the union discriminator. When encoding, it is examined to determine the current type. When decoding, it is set to reference the type that was found in the input stream.

The Odr_arm type is defined thus:

typedef struct odr_arm
{
    int tagmode;
    int class;
    int tag;
    int which;
    Odr_fun fun;
    char *name;
} Odr_arm;
    

The interpretation of the fields are:

tagmode

Either ODR_IMPLICIT, ODR_EXPLICIT, or ODR_NONE (-1) to mark no tagging.

which

The value of the discriminator that corresponds to this CHOICE element. Typically, it will be a #defined constant, or an enum member.

fun

A pointer to a function that implements the type of the CHOICE member. It may be either a standard ODR type or a type defined by yourself.

name

Name of tag.

A handy way to prepare the array for use by the odr_choice() function is to define it as a static, initialized array in the beginning of your decoding/encoding function. Assume the type definition:

MyChoice ::= CHOICE {
    untagged INTEGER,
    tagged   [99] IMPLICIT INTEGER,
    other    BOOLEAN
}
    

Your C type might look like

typedef struct MyChoice
{
    enum
    {
        MyChoice_untagged,
        MyChoice_tagged,
        MyChoice_other
    } which;
    union
    {
        Odr_int *untagged;
        Odr_int *tagged;
        Odr_bool *other;
    } u;
};
    

And your function could look like this:

int myChoice(ODR o, MyChoice **p, int optional, const char *name)
{
    static Odr_arm arm[] =
    {
      {-1, -1, -1, MyChoice_untagged, odr_integer, "untagged"},
      {ODR_IMPLICIT, ODR_CONTEXT, 99, MyChoice_tagged, odr_integer,
      "tagged"},
      {-1, -1, -1, MyChoice_other, odr_boolean, "other"},
      {-1, -1, -1, -1, 0}
    };

    if (o->direction == ODR_DECODE)
        *p = odr_malloc(o, sizeof(**p);
    else if (!*p)
        return optional && odr_ok(o);

    if (odr_choice(o, arm, &(*p)->u, &(*p)->which), name)
        return 1;
    *p = 0;
        return optional && odr_ok(o);
}
    

In some cases (say, a non-optional choice which is a member of a sequence), you can "embed" the union and its discriminator in the structure belonging to the enclosing type, and you won't need to fiddle with memory allocation to create a separate structure to wrap the discriminator and union.

The corresponding function is somewhat nicer in the Sun XDR interface. Most of the complexity of this interface comes from the possibility of declaring sequence elements (including CHOICEs) optional.

The ASN.1 specifications naturally require that each member of a CHOICE have a distinct tag, so they can be told apart on decoding. Sometimes it can be useful to define a CHOICE that has multiple types that share the same tag. You'll need some other mechanism, perhaps keyed to the context of the CHOICE type. In effect, we would like to introduce a level of context-sensitiveness to our ASN.1 specification. When encoding an internal representation, we have no problem, as long as each CHOICE member has a distinct discriminator value. For decoding, we need a way to tell the choice function to look for a specific arm of the table. The function

void odr_choice_bias(ODR o, int what);
    

provides this functionality. When called, it leaves a notice for the next call to odr_choice() to be called on the decoding stream o, that only the arm entry with a which field equal to what should be tried.

The most important application (perhaps the only one, really) is in the definition of application-specific EXTERNAL encoders/decoders which will automatically decode an ANY member given the direct or indirect reference.

yaz-5.28.0/doc/comstack.ssl.html0000644000175000017500000000562713572540030013402 000000000000007. SSL

7. SSL

     void *cs_get_ssl(COMSTACK cs);
    

Returns the SSL handle, SSL * for comstack. If comstack is not of type SSL, then NULL is returned.

     int cs_set_ssl_ctx(COMSTACK cs, void *ctx);
    

Sets SSL context for comstack. The parameter is expected to be of type SSL_CTX *. This function should be called just after comstack has been created (before connect, bind, etc). This function returns 1 for success; 0 for failure.

     int cs_set_ssl_certificate_file(COMSTACK cs, const char *fname);
    

Sets SSL certificate for comstack as a PEM file. This function returns 1 for success; 0 for failure.

     int cs_get_ssl_peer_certificate_x509(COMSTACK cs, char **buf, int *len);
    

This function returns the peer certificate. If successful, *buf and *len holds X509 buffer and length respectively. Buffer should be freed with xfree. This function returns 1 for success; 0 for failure.

yaz-5.28.0/doc/yaz-ztest-man.xml0000644000175000017500000001305413265142510013346 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-ztest 8 System management commands yaz-ztest Z39.50/SRU Test Server &gfs-synopsis; DESCRIPTION yaz-ztest is a Z39.50/SRU test server that uses the YAZ generic frontend server (GFS) API. The server acts as a real Z39.50/SRU server but does not use a database. It returns a random hit count and returns a subset of a few built-in records. The listener-spec consists of a transport mode followed by a colon, followed by a listener address. The transport mode is either tcp, unix, or ssl. For TCP and SSL, an address has the form: hostname | IP-number [ : portnumber ] For UNIX local socket, the address is the filename of the local socket. OPTIONS &gfs-options; TESTING yaz-ztest normally returns a random hit count between 0 and 24. However, if a query term includes leading digits, then the integer value of that term is used as hit count. This allows testers to return any number of hits. yaz-ztest includes 24 MARC records for testing. Hit counts exceeding 24 will make yaz-ztest return the same record batch over and over. So record at position 1, 25, 49, etc. are equivalent. For XML, if no element set is given or element has value "marcxml", MARCXML is returned (each of the 24 dummy records converted from ISO2709 to XML). For element set OP, then OPAC XML is returned. yaz-ztest may also return predefined XML records (for testing). This is enabled if YAZ_ZTEST_XML_FETCH environment variable is defined. A record is fetched from a file (one record per file). The path for the filename is FE.d.xml where F is the YAZ_ZTEST_XML_FETCH value (possibly empty), E is element-set, d is record position (starting from 1). The following databases are honored by yaz-ztest: Default, slow and db.* (all databases with prefix "db"). Any other database will make yaz-ztest return diagnostic 109: "Database unavailable". Options for search may be included in the form or URL get arguments included as part of the Z39.50 database name. The following database options are present: search-delay, present-delay, fetch-delay and seed. The former, delay type options, specify a fake delay (sleep) that yaz-ztest will perform when searching, presenting, fetching records respectively. The value of the delay may either be a fixed floating point value which specifies the delay in seconds. Alternatively the value may be given as two floating point numbers separated by colon, which will make yaz-ztest perform a random sleep between the first and second number. The database parameter seed takes an integer as value. This will call srand with this integer to ensure that the random behavior can be re-played. Suppose we want searches to take between 0.1 and 0.5 seconds and a fetch to take 0.2 second. To access test database Default we'd use: Default?search-delay=0.1:0.5&fetch-delay=0.2. GFS CONFIGURATION AND VIRTUAL HOSTS &gfs-virtual; FILES yaz-<version>/ztest/yaz-ztest.c yaz-<version>/include/yaz/backend.h SEE ALSO yaz 7 yaz-log 7 yaz-5.28.0/doc/future.html0000644000175000017500000000571613572540030012307 00000000000000Chapter 10. Future Directions

Chapter 10. Future Directions

We have a new and better version of the front-end server on the drawing board. Resources and external commitments will govern when we'll be able to do something real with it. Features should include greater flexibility, greater support for access/resource control, and easy support for Explain (possibly with Zebra as an extra database engine).

YAZ is a BER toolkit and as such should support all protocols out there based on that. We'd like to see running ILL applications. It shouldn't be that hard. Another thing that would be interesting is LDAP. Maybe a generic framework for doing IR using both LDAP and Z39.50 transparently.

The SOAP implementation is incomplete. In the future we hope to add more features to it. Perhaps make a WSDL/XML Schema compiler. The authors of libxml2 are already working on XML Schema and RELAX NG compilers so this may not be too hard.

It would be neat to have a proper module mechanism for the Generic Frontend Server so that backend would be dynamically loaded (as shared objects / DLLs).

Other than that, YAZ generally moves in the directions which appear to make the most people happy (including ourselves, as prime users of the software). If there's something you'd like to see in here, then drop us a note and let's see what we can come up with.

yaz-5.28.0/doc/tools.nmem.html0000644000175000017500000001043513572540030013062 000000000000003. Nibble Memory

3. Nibble Memory

Sometimes when you need to allocate and construct a large, interconnected complex of structures, it can be a bit of a pain to release the associated memory again. For the structures describing the Z39.50 PDUs and related structures, it is convenient to use the memory-management system of the ODR subsystem (see Section 2, “Using ODR”). However, in some circumstances where you might otherwise benefit from using a simple nibble-memory management system, it may be impractical to use odr_malloc() and odr_reset(). For this purpose, the memory manager which also supports the ODR streams is made available in the NMEM module. The external interface to this module is given in the nmem.h file.

The following prototypes are given:

    NMEM nmem_create(void);
    void nmem_destroy(NMEM n);
    void *nmem_malloc(NMEM n, size_t size);
    void nmem_reset(NMEM n);
    size_t nmem_total(NMEM n);
    void nmem_init(void);
    void nmem_exit(void);
   

The nmem_create() function returns a pointer to a memory control handle, which can be released again by nmem_destroy() when no longer needed. The function nmem_malloc() allocates a block of memory of the requested size. A call to nmem_reset() or nmem_destroy() will release all memory allocated on the handle since it was created (or since the last call to nmem_reset(). The function nmem_total() returns the number of bytes currently allocated on the handle.

The nibble-memory pool is shared amongst threads. POSIX mutexes and WIN32 Critical sections are introduced to keep the module thread safe. Function nmem_init() initializes the nibble-memory library and it is called automatically the first time the YAZ.DLL is loaded. YAZ uses function DllMain to achieve this. You should not call nmem_init or nmem_exit unless you're absolute sure what you're doing. Note that in previous YAZ versions you'd have to call nmem_init yourself.

yaz-5.28.0/doc/comstack.summary.html0000644000175000017500000000531213572540030014265 000000000000009. Summary and Synopsis

9. Summary and Synopsis

    #include <yaz/comstack.h>

    #include <yaz/tcpip.h>  /* this is for TCP/IP and SSL support */
    #include <yaz/unix.h>   /* this is for UNIX socket support */

    COMSTACK cs_create(CS_TYPE type, int blocking, int protocol);

    COMSTACK cs_createbysocket(int s, CS_TYPE type, int blocking,
                               int protocol);
    COMSTACK cs_create_host(const char *str, int blocking,
                            void **vp);

    int cs_bind(COMSTACK handle, int mode);

    int cs_connect(COMSTACK handle, void *address);

    int cs_rcvconnect(COMSTACK handle);

    int cs_listen(COMSTACK handle);

    COMSTACK cs_accept(COMSTACK handle);

    int cs_put(COMSTACK handle, char *buf, int len);

    int cs_get(COMSTACK handle, char **buf, int *size);

    int cs_more(COMSTACK handle);

    void cs_close(COMSTACK handle);

    int cs_look(COMSTACK handle);

    void *cs_straddr(COMSTACK handle, const char *str);

    const char *cs_addrstr(COMSTACK h);

   
yaz-5.28.0/doc/yaz-man.xml0000644000175000017500000000766013265142510012205 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz 7 Conventions and miscellaneous yaz Z39.50 toolkit. DESCRIPTION YAZ is a C/C++ programmer's toolkit supporting the development of Z39.50v3 clients and servers. The YAZ toolkit offers several different levels of access to the ISO23950/Z39.50, SRU Solr (client only) and ILL protocols. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement. COPYRIGHT Copyright © ©right-year; Index Data. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SEE ALSO yaz-client 1 , yaz-ztest 8 , yaz-config 8 , zoomsh 1 bib1-attr 7 YAZ manual ( /usr/share/doc/yaz) YAZ home page. Z39.50 Maintenance Agency Page. yaz-5.28.0/doc/yaz-record-iconv.html0000644000175000017500000001010713572540030014156 00000000000000yaz-record-iconv

Name

yaz-record-conv — YAZ Record Conversion Utility

Synopsis

yaz-record-conv [ -v loglevel ] [config] [fname...]

DESCRIPTION

yaz-record-conv is a program that exercises the record conversion sub system. Refer to record_conv.h header.

OPTIONS

-v level
Sets the LOG level to level. Level is a sequence of tokens separated by comma. Each token is a integer or a named LOG item - one of fatal, debug, warn, log, malloc, all, none.

EXAMPLES

The following backend configuration converts MARC records (ISO2709) to Dublin-Core XML.

    <backend name="F" syntax="usmarc">
      <marc inputcharset="marc-8" inputformat="marc" outputformat="marcxml"/>
      <xslt stylesheet="../etc/MARC21slim2DC.xsl"/>
    </backend>
    
 

We can convert one of the sample records from YAZ' test directory with:

$ ../util/yaz-record-conv record-conv-conf.xml marc6.marc
<?xml version="1.0"?>
<dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/">
  <dc:title>How to program a computer</dc:title>
  <dc:creator>
    Jack Collins
  </dc:creator>
  <dc:type>text</dc:type>
  <dc:publisher>Penguin</dc:publisher>
  <dc:language>eng</dc:language>
</dc:dc>

 

FILES

record_conv.h

SEE ALSO

yaz(7)

yaz-5.28.0/doc/server.invocation.html0000644000175000017500000003225113572540030014445 000000000000006. Application Invocation

6. Application Invocation

The finished application has the following invocation syntax (by way of statserv_main()):

application [-install] [-installa] [-remove] [-a file] [-v level] [-l file] [-u uid] [-c config] [-f vconfig] [-C fname] [-t minutes] [-k kilobytes] [-K] [-d daemon] [-w dir] [-p pidfile] [-r kilobytes] [-ziDSTV1] [listener-spec...]

The options are:

-a file

Specify a file for dumping PDUs (for diagnostic purposes). The special name - (dash) sends output to stderr.

-S

Don't fork or make threads on connection requests. This is good for debugging, but not recommended for real operation: Although the server is asynchronous and non-blocking, it can be nice to keep a software malfunction (okay then, a crash) from affecting all current users.

-1

Like -S but after one session the server exits. This mode is for debugging only.

-T

Operate the server in threaded mode. The server creates a thread for each connection rather than fork a process. Only available on UNIX systems that offer POSIX threads.

-s

Use the SR protocol (obsolete).

-z

Use the Z39.50 protocol (default). This option and -s complement each other. You can use both multiple times on the same command line, between listener-specifications (see below). This way, you can set up the server to listen for connections in both protocols concurrently, on different local ports.

-l file

The logfile.

-c config

A user option that serves as a specifier for some sort of configuration, usually a filename. The argument to this option is transferred to member configname of the statserv_options_block.

-f vconfig

This specifies an XML file that describes one or more YAZ frontend virtual servers.

-C fname

Sets SSL certificate file name for server (PEM).

-v level

The log level. Use a comma-separated list of members of the set {fatal,debug,warn,log,malloc,all,none}.

-u uid

Set user ID. Sets the real UID of the server process to that of the given user. It's useful if you aren't comfortable with having the server run as root, but you need to start it as such to bind a privileged port.

-w dir

The server changes to this directory before listening to incoming connections. This option is useful when the server is operating from the inetd daemon (see -i).

-p pidfile

Specifies that the server should write its Process ID to the file given by pidfile. A typical location would be /var/run/yaz-ztest.pid.

-i

Use this to make the the server run from the inetd server (UNIX only).

-D

Use this to make the server put itself in the background and run as a daemon. If neither -i nor -D is given, the server starts in the foreground.

-install

Use this to install the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel.

-installa

Use this to install the server as an NT service and mark it as "auto-start. Control the server by going to the Services in the Control Panel.

-remove

Use this to remove the server from the NT services (Windows NT/2000/XP only).

-t minutes

Idle session timeout, in minutes.

-k size

Maximum record size/message size, in kilobytes.

-K

Forces no-keepalive for HTTP sessions. By default GFS will keep sessions alive for HTTP 1.1 sessions (as defined by the standard). Using this option will force GFS to close the connection for each operation.

-r size

Maximum size of log file before rotation occurs, in kilobytes. Default size is 1048576 k (=1 GB).

-d daemon

Set name of daemon to be used in hosts access file. See hosts_access(5) and tcpd(8).

-m time-format

Sets the format of time-stamps in the log-file. Specify a string in the input format to strftime().

-V

Display YAZ version and exit.

A listener specification consists of a transport mode followed by a colon (:) followed by a listener address. The transport mode is either tcp, unix: or ssl.

For TCP and SSL, an address has the form

    hostname | IP-number [: portnumber]
   

The port number defaults to 210 (standard Z39.50 port).

For UNIX, the address is the filename of socket.

For TCP/IP and SSL, the special hostnames @, maps to IN6ADDR_ANY_INIT with IPV4 binding as well (bindv6only=0), The special hostname @4 binds to INADDR_ANY (IPV4 only listener). The special hostname @6 binds to IN6ADDR_ANY_INIT with bindv6only=1 (IPV6 only listener).

Example 4.1. Running the GFS on Unix

Assuming the server application appname is started as root, the following will make it listen on port 210. The server will change identity to nobody and write its log to /var/log/app.log.

      application -l /var/log/app.log -u nobody tcp:@:210
     

The server will accept Z39.50 requests and offer SRU service on port 210.


Example 4.2. Setting up Apache as SRU Frontend

If you use Apache as your public web server and want to offer HTTP port 80 access to the YAZ server on 210, you can use the ProxyPass directive. If you have virtual host srw.mydomain you can use the following directives in Apache's httpd.conf:

      <VirtualHost *>
       ErrorLog /home/srw/logs/error_log
       TransferLog /home/srw/logs/access_log
       ProxyPass / http://srw.mydomain:210/
      </VirtualHost>
     

The above is for the Apache 1.3 series.


Example 4.3. Running a server with local access only

A server that is only being accessed from the local host should listen on UNIX file socket rather than an Internet socket. To listen on /tmp/mysocket start the server as follows:

      application unix:/tmp/mysocket
     


yaz-5.28.0/doc/yaz-ztest.80000644000175000017500000003702313570011155012145 00000000000000'\" t .\" Title: yaz-ztest .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: System management commands .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "YAZ\-ZTEST" "8" "11/28/2019" "YAZ 5.28.0" "System management commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-ztest \- Z39\&.50/SRU Test Server .SH "SYNOPSIS" .HP \w'\fBapplication\fR\ 'u \fBapplication\fR [\fB\-install\fR] [\fB\-installa\fR] [\fB\-remove\fR] [\fB\-a\ \fR\fB\fIfile\fR\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-l\ \fR\fB\fIfile\fR\fR] [\fB\-u\ \fR\fB\fIuid\fR\fR] [\fB\-c\ \fR\fB\fIconfig\fR\fR] [\fB\-f\ \fR\fB\fIvconfig\fR\fR] [\fB\-C\ \fR\fB\fIfname\fR\fR] [\fB\-t\ \fR\fB\fIminutes\fR\fR] [\fB\-k\ \fR\fB\fIkilobytes\fR\fR] [\fB\-K\fR] [\fB\-d\ \fR\fB\fIdaemon\fR\fR] [\fB\-w\ \fR\fB\fIdir\fR\fR] [\fB\-p\ \fR\fB\fIpidfile\fR\fR] [\fB\-r\ \fR\fB\fIkilobytes\fR\fR] [\fB\-ziDSTV1\fR] [listener\-spec...] .SH "DESCRIPTION" .PP \fByaz\-ztest\fR is a Z39\&.50/SRU test server that uses the YAZ generic frontend server (GFS) API\&. The server acts as a real Z39\&.50/SRU server but does not use a database\&. It returns a random hit count and returns a subset of a few built\-in records\&. .PP The \fIlistener\-spec\fR consists of a transport mode followed by a colon, followed by a listener address\&. The transport mode is either tcp, unix, or ssl\&. .PP For TCP and SSL, an address has the form: .sp .if n \{\ .RS 4 .\} .nf hostname | IP\-number [ : portnumber ] .fi .if n \{\ .RE .\} .PP For UNIX local socket, the address is the filename of the local socket\&. .SH "OPTIONS" .PP \-a \fIfile\fR .RS 4 Specify a file for dumping PDUs (for diagnostic purposes)\&. The special name \- (dash) sends output to stderr\&. .RE .PP \-S .RS 4 Don\*(Aqt fork or make threads on connection requests\&. This is good for debugging, but not recommended for real operation: Although the server is asynchronous and non\-blocking, it can be nice to keep a software malfunction (okay then, a crash) from affecting all current users\&. .RE .PP \-1 .RS 4 Like \-S but after one session the server exits\&. This mode is for debugging \fIonly\fR\&. .RE .PP \-T .RS 4 Operate the server in threaded mode\&. The server creates a thread for each connection rather than fork a process\&. Only available on UNIX systems that offer POSIX threads\&. .RE .PP \-s .RS 4 Use the SR protocol (obsolete)\&. .RE .PP \-z .RS 4 Use the Z39\&.50 protocol (default)\&. This option and \-s complement each other\&. You can use both multiple times on the same command line, between listener\-specifications (see below)\&. This way, you can set up the server to listen for connections in both protocols concurrently, on different local ports\&. .RE .PP \-l \fIfile\fR .RS 4 The logfile\&. .RE .PP \-c \fIconfig\fR .RS 4 A user option that serves as a specifier for some sort of configuration, usually a filename\&. The argument to this option is transferred to member configname of the statserv_options_block\&. .RE .PP \-f \fIvconfig\fR .RS 4 This specifies an XML file that describes one or more YAZ frontend virtual servers\&. .RE .PP \-C \fIfname\fR .RS 4 Sets SSL certificate file name for server (PEM)\&. .RE .PP \-v \fIlevel\fR .RS 4 The log level\&. Use a comma\-separated list of members of the set {fatal,debug,warn,log,malloc,all,none}\&. .RE .PP \-u \fIuid\fR .RS 4 Set user ID\&. Sets the real UID of the server process to that of the given user\&. It\*(Aqs useful if you aren\*(Aqt comfortable with having the server run as root, but you need to start it as such to bind a privileged port\&. .RE .PP \-w \fIdir\fR .RS 4 The server changes to this directory before listening to incoming connections\&. This option is useful when the server is operating from the inetd daemon (see \-i)\&. .RE .PP \-p \fIpidfile\fR .RS 4 Specifies that the server should write its Process ID to the file given by \fIpidfile\fR\&. A typical location would be /var/run/yaz\-ztest\&.pid\&. .RE .PP \-i .RS 4 Use this to make the the server run from the inetd server (UNIX only)\&. .RE .PP \-D .RS 4 Use this to make the server put itself in the background and run as a daemon\&. If neither \-i nor \-D is given, the server starts in the foreground\&. .RE .PP \-install .RS 4 Use this to install the server as an NT service (Windows NT/2000/XP only)\&. Control the server by going to the Services in the Control Panel\&. .RE .PP \-installa .RS 4 Use this to install the server as an NT service and mark it as "auto\-start\&. Control the server by going to the Services in the Control Panel\&. .RE .PP \-remove .RS 4 Use this to remove the server from the NT services (Windows NT/2000/XP only)\&. .RE .PP \-t \fIminutes\fR .RS 4 Idle session timeout, in minutes\&. .RE .PP \-k \fIsize\fR .RS 4 Maximum record size/message size, in kilobytes\&. .RE .PP \-K .RS 4 Forces no\-keepalive for HTTP sessions\&. By default GFS will keep sessions alive for HTTP 1\&.1 sessions (as defined by the standard)\&. Using this option will force GFS to close the connection for each operation\&. .RE .PP \-r \fIsize\fR .RS 4 Maximum size of log file before rotation occurs, in kilobytes\&. Default size is 1048576 k (=1 GB)\&. .RE .PP \-d \fIdaemon\fR .RS 4 Set name of daemon to be used in hosts access file\&. See \fBhosts_access\fR(5) and \fBtcpd\fR(8)\&. .RE .PP \-m \fItime\-format\fR .RS 4 Sets the format of time\-stamps in the log\-file\&. Specify a string in the input format to strftime()\&. .RE .PP \-V .RS 4 Display YAZ version and exit\&. .RE .SH "TESTING" .PP \fByaz\-ztest\fR normally returns a random hit count between 0 and 24\&. However, if a query term includes leading digits, then the integer value of that term is used as hit count\&. This allows testers to return any number of hits\&. \fByaz\-ztest\fR includes 24 MARC records for testing\&. Hit counts exceeding 24 will make \fByaz\-ztest\fR return the same record batch over and over\&. So record at position 1, 25, 49, etc\&. are equivalent\&. .PP For XML, if no element set is given or element has value "marcxml", MARCXML is returned (each of the 24 dummy records converted from ISO2709 to XML)\&. For element set OP, then OPAC XML is returned\&. .PP yaz\-ztest may also return predefined XML records (for testing)\&. This is enabled if YAZ_ZTEST_XML_FETCH environment variable is defined\&. A record is fetched from a file (one record per file)\&. The path for the filename is \fIF\fR\fIE\fR\&.\fId\fR\&.xml where \fIF\fR is the YAZ_ZTEST_XML_FETCH value (possibly empty), \fIE\fR is element\-set, \fId\fR is record position (starting from 1)\&. .PP The following databases are honored by \fByaz\-ztest\fR: Default, slow and db\&.* (all databases with prefix "db")\&. Any other database will make \fByaz\-ztest\fR return diagnostic 109: "Database unavailable"\&. .PP Options for search may be included in the form or URL get arguments included as part of the Z39\&.50 database name\&. The following database options are present: search\-delay, present\-delay, fetch\-delay and seed\&. .PP The former, delay type options, specify a fake delay (sleep) that \fByaz\-ztest\fR will perform when searching, presenting, fetching records respectively\&. The value of the delay may either be a fixed floating point value which specifies the delay in seconds\&. Alternatively the value may be given as two floating point numbers separated by colon, which will make \fByaz\-ztest\fR perform a random sleep between the first and second number\&. .PP The database parameter seed takes an integer as value\&. This will call srand with this integer to ensure that the random behavior can be re\-played\&. .PP Suppose we want searches to take between 0\&.1 and 0\&.5 seconds and a fetch to take 0\&.2 second\&. To access test database Default we\*(Aqd use: Default?search\-delay=0\&.1:0\&.5&fetch\-delay=0\&.2\&. .SH "GFS CONFIGURATION AND VIRTUAL HOSTS" .PP The Virtual hosts mechanism allows a YAZ frontend server to support multiple backends\&. A backend is selected on the basis of the TCP/IP binding (port+listening address) and/or the virtual host\&. .PP A backend can be configured to execute in a particular working directory\&. Or the YAZ frontend may perform CQL to RPN conversion, thus allowing traditional Z39\&.50 backends to be offered as a SRW/SRU service\&. SRW/SRU Explain information for a particular backend may also be specified\&. .PP For the HTTP protocol, the virtual host is specified in the Host header\&. For the Z39\&.50 protocol, the virtual host is specified as in the Initialize Request in the OtherInfo, OID 1\&.2\&.840\&.10003\&.10\&.1000\&.81\&.1\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br .PP Not all Z39\&.50 clients allow the VHOST information to be set\&. For those, the selection of the backend must rely on the TCP/IP information alone (port and address)\&. .sp .5v .RE .PP The YAZ frontend server uses XML to describe the backend configurations\&. Command\-line option \-f specifies filename of the XML configuration\&. .PP The configuration uses the root element yazgfs\&. This element includes a list of listen elements, followed by one or more server elements\&. .PP The listen describes listener (transport end point), such as TCP/IP, Unix file socket or SSL server\&. Content for a listener: .PP CDATA (required) .RS 4 The CDATA for the listen element holds the listener string, such as tcp:@:210, tcp:server1:2100, etc\&. .RE .PP attribute id (optional) .RS 4 Identifier for this listener\&. This may be referred to from server sections\&. .RE .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br .PP We expect more information to be added for the listen section in a future version, such as CERT file for SSL servers\&. .sp .5v .RE .PP The server describes a server and the parameters for this server type\&. Content for a server: .PP attribute id (optional) .RS 4 Identifier for this server\&. Currently not used for anything, but it might be for logging purposes\&. .RE .PP attribute listenref (optional) .RS 4 Specifies one or more listeners for this server\&. Each server ID is separated by a comma\&. If this attribute is not given, the server is accessible from all listeners\&. In order for the server to be used for real, however, the virtual host must match if specified in the configuration\&. .RE .PP element config (optional) .RS 4 Specifies the server configuration\&. This is equivalent to the config specified using command line option \-c\&. .RE .PP element directory (optional) .RS 4 Specifies a working directory for this backend server\&. If specified, the YAZ frontend changes current working directory to this directory whenever a backend of this type is started (backend handler bend_start), stopped (backend handler hand_stop) and initialized (bend_init)\&. .RE .PP element host (optional) .RS 4 Specifies the virtual host for this server\&. If this is specified a client \fImust\fR specify this host string in order to use this backend\&. .RE .PP element cql2rpn (optional) .RS 4 Specifies a filename that includes CQL to RPN conversion for this backend server\&. See ???\&. If given, the backend server will only "see" a Type\-1/RPN query\&. .RE .PP element ccl2rpn (optional) .RS 4 Specifies a filename that includes CCL to RPN conversion for this backend server\&. See ???\&. If given, the backend server will only "see" a Type\-1/RPN query\&. .RE .PP element stylesheet (optional) .RS 4 Specifies the stylesheet reference to be part of SRU HTTP responses when the client does not specify one\&. If none is given, then if the client does not specify one, then no stylesheet reference is part of the SRU HTTP response\&. .RE .PP element client_query_charset (optional) .RS 4 If specified, a conversion from the character set given to UTF\-8 is performed by the generic frontend server\&. It is only executed for Z39\&.50 search requests (SRU/Solr are assumed to be UTF\-8 encoded already)\&. .RE .PP element docpath (optional) .RS 4 Specifies a path for local file access using HTTP\&. All URLs with a leading prefix (/ excluded) that matches the value of docpath are used for file access\&. For example, if the server is to offer access in directory xsl, the docpath would be xsl and all URLs of the form http://host/xsl will result in a local file access\&. .RE .PP element explain (optional) .RS 4 Specifies SRW/SRU ZeeRex content for this server\&. Copied verbatim to the client\&. As things are now, some of the Explain content seem redundant because host information, etc\&. is also stored elsewhere\&. .RE .PP element maximumrecordsize (optional) .RS 4 Specifies maximum record size/message size, in bytes\&. This value also serves as the maximum size of \fIincoming\fR packages (for Record Updates etc)\&. It\*(Aqs the same value as that given by the \-k option\&. .RE .PP element retrievalinfo (optional) .RS 4 Enables the retrieval facility to support conversions and specifications of record formats/types\&. See ??? for more information\&. .RE .PP The XML below configures a server that accepts connections from two ports, TCP/IP port 9900 and a local UNIX file socket\&. We name the TCP/IP server public and the other server internal\&. .sp .if n \{\ .RS 4 .\} .nf tcp:@:9900 unix:/var/tmp/socket server1\&.mydomain /var/www/s1 config\&.cfg server2\&.mydomain /var/www/s2 config\&.cfg \&.\&./etc/pqf\&.properties server2\&.mydomain 9900 a /var/www/s3 config\&.cfg .fi .if n \{\ .RE .\} .PP There are three configured backend servers\&. The first two servers, "server1" and "server2", can be reached by both listener addresses\&. "server1" is reached by all (two) since no listenref attribute is specified\&. "server2" is reached by the two listeners specified\&. In order to distinguish between the two, a virtual host has been specified for each server in the host elements\&. .PP For "server2" elements for CQL to RPN conversion is supported and explain information has been added (a short one here to keep the example small)\&. .PP The third server, "server3" can only be reached via listener "internal"\&. .SH "FILES" .PP yaz\-/ztest/yaz\-ztest\&.c .PP yaz\-/include/yaz/backend\&.h .SH "SEE ALSO" .PP \fByaz\fR(7) \fByaz-log\fR(7) .SH "AUTHORS" .PP \fBIndex Data\fR yaz-5.28.0/doc/asn.html0000644000175000017500000000637513572540030011560 00000000000000Chapter 5. The Z39.50 ASN.1 Module

Chapter 5. The Z39.50 ASN.1 Module

1. Introduction

The Z39.50 ASN.1 module provides you with a set of C struct definitions for the various PDUs of the Z39.50 protocol, as well as for the complex types appearing within the PDUs. For the primitive data types, the C representation often takes the form of an ordinary C language type, such as Odr_int which is equivalent to an integral C integer. For ASN.1 constructs that have no direct representation in C, such as general octet strings and bit strings, the ODR module (see section The ODR Module) provides auxiliary definitions.

The Z39.50 ASN.1 module is located in sub directory z39.50. There you'll find C files that implement encoders and decoders for the Z39.50 types. You'll also find the protocol definitions: z3950v3.asn, esupdate.asn, and others.

yaz-5.28.0/doc/local.ent0000644000175000017500000000003313570011152011670 00000000000000 yaz-5.28.0/doc/yaz-json-parse.10000644000175000017500000000377413570011160013050 00000000000000'\" t .\" Title: yaz-json-parse .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: Commands .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "YAZ\-JSON\-PARSE" "1" "11/28/2019" "YAZ 5.28.0" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-json-parse \- YAZ JSON parser .SH "SYNOPSIS" .HP \w'\fByaz\-json\-parse\fR\ 'u \fByaz\-json\-parse\fR [\-p] .SH "DESCRIPTION" .PP \fByaz\-json\-parse\fR is a utility which demonstrates the JSON API of YAZ\&. (yaz/json\&.h)\&. .PP The program attempts to parse a JSON from standard input (stdin)\&. It will return exit code 1 if parsing fails and the parsing error message will be printed to standard error (stderr)\&. The program returns exit code 0 if parsing succeeds, and returns no output unless \-p is given (see below)\&. .SH "OPTIONS" .PP \-p .RS 4 Makes the JSON parser echo the JSON result string to standard output, if parsing from stdin was successful\&. If \-p is given twice, then the output is a multi\-line output with indentation (pretty print)\&. .RE .SH "SEE ALSO" .PP \fByaz\fR(7) .SH "AUTHORS" .PP \fBIndex Data\fR yaz-5.28.0/doc/asn.preparing.html0000644000175000017500000001514413572540030013540 000000000000002. Preparing PDUs

2. Preparing PDUs

A structure representing a complex ASN.1 type doesn't in itself contain the members of that type. Instead, the structure contains pointers to the members of the type. This is necessary, in part, to allow a mechanism for specifying which of the optional structure (SEQUENCE) members are present, and which are not. It follows that you will need to somehow provide space for the individual members of the structure, and set the pointers to refer to the members.

The conversion routines don't care how you allocate and maintain your C structures - they just follow the pointers that you provide. Depending on the complexity of your application, and your personal taste, there are at least three different approaches that you may take when you allocate the structures.

You can use static or automatic local variables in the function that prepares the PDU. This is a simple approach, and it provides the most efficient form of memory management. While it works well for flat PDUs like the InitRequest, it will generally not be sufficient for say, the generation of an arbitrarily complex RPN query structure.

You can individually create the structure and its members using the malloc(2) function. If you want to ensure that the data is freed when it is no longer needed, you will have to define a function that individually releases each member of a structure before freeing the structure itself.

You can use the odr_malloc() function (see Section 2, “Using ODR” for details). When you use odr_malloc(), you can release all of the allocated data in a single operation, independent of any pointers and relations between the data. The odr_malloc() function is based on a "nibble-memory" scheme, in which large portions of memory are allocated, and then gradually handed out with each call to odr_malloc(). The next time you call odr_reset(), all of the memory allocated since the last call is recycled for future use (actually, it is placed on a free-list).

You can combine all of the methods described here. This will often be the most practical approach. For instance, you might use odr_malloc() to allocate an entire structure and some of its elements, while you leave other elements pointing to global or per-session default variables.

The Z39.50 ASN.1 module provides an important aid in creating new PDUs. For each of the PDU types (say, Z_InitRequest), a function is provided that allocates and initializes an instance of that PDU type for you. In the case of the InitRequest, the function is simply named zget_InitRequest(), and it sets up reasonable default value for all of the mandatory members. The optional members are generally initialized to null pointers. This last aspect is very important: it ensures that if the PDU definitions are extended after you finish your implementation (to accommodate new versions of the protocol, say), you won't get into trouble with uninitialized pointers in your structures. The functions use odr_malloc() to allocate the PDUs and its members, so you can free everything again with a single call to odr_reset(). We strongly recommend that you use the zget_* functions whenever you are preparing a PDU (in a C++ API, the zget_ functions would probably be promoted to constructors for the individual types).

The prototype for the individual PDU types generally look like this:

    Z_<type> *zget_<type>(ODR o);
   

e.g.:

    Z_InitRequest *zget_InitRequest(ODR o);
   

The ODR handle should generally be your encoding stream, but it needn't be.

As well as the individual PDU functions, a function zget_APDU() is provided, which allocates a top-level Z-APDU of the type requested:

    Z_APDU *zget_APDU(ODR o, int which);
   

The which parameter is (of course) the discriminator belonging to the Z_APDU CHOICE type. All of the interface described here is provided by the Z39.50 ASN.1 module, and you access it through the proto.h header file.

yaz-5.28.0/doc/bib1-attr.70000644000175000017500000001431113570011160011746 00000000000000'\" t .\" Title: Bib-1 Attribute Set .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: Conventions and miscellaneous .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "BIB\-1 ATTRIBUTE SET" "7" "11/28/2019" "YAZ 5.28.0" "Conventions and miscellaneous" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" bib1-attr \- Bib\-1 Attribute Set .SH "DESCRIPTION" .PP This reference entry lists the Bib\-1 attribute set types and values\&. .SH "TYPES" .PP The Bib\-1 attribute set defines six attribute types: Use (1), Relation (2), Position (3), Structure (4), Truncation (5) and Completeness (6)\&. .SH "USE (1)" .PP .if n \{\ .RS 4 .\} .nf 1 Personal\-name 2 Corporate\-name 3 Conference\-name 4 Title 5 Title\-series 6 Title\-uniform 7 ISBN 8 ISSN 9 LC\-card\-number 10 BNB\-card\-number 11 BGF\-number 12 Local\-number 13 Dewey\-classification 14 UDC\-classification 15 Bliss\-classification 16 LC\-call\-number 17 NLM\-call\-number 18 NAL\-call\-number 19 MOS\-call\-number 20 Local\-classification 21 Subject\-heading 22 Subject\-Rameau 23 BDI\-index\-subject 24 INSPEC\-subject 25 MESH\-subject 26 PA\-subject 27 LC\-subject\-heading 28 RVM\-subject\-heading 29 Local\-subject\-index 30 Date 31 Date\-of\-publication 32 Date\-of\-acquisition 33 Title\-key 34 Title\-collective 35 Title\-parallel 36 Title\-cover 37 Title\-added\-title\-page 38 Title\-caption 39 Title\-running 40 Title\-spine 41 Title\-other\-variant 42 Title\-former 43 Title\-abbreviated 44 Title\-expanded 45 Subject\-precis 46 Subject\-rswk 47 Subject\-subdivision 48 Number\-natl\-biblio 49 Number\-legal\-deposit 50 Number\-govt\-pub 51 Number\-music\-publisher 52 Number\-db 53 Number\-local\-call 54 Code\-language 55 Code\-geographic 56 Code\-institution 57 Name\-and\-title 58 Name\-geographic 59 Place\-publication 60 CODEN 61 Microform\-generation 62 Abstract 63 Note 1000 Author\-title 1001 Record\-type 1002 Name 1003 Author 1004 Author\-name\-personal 1005 Author\-name\-corporate 1006 Author\-name\-conference 1007 Identifier\-standard 1008 Subject\-LC\-childrens 1009 Subject\-name\-personal 1010 Body\-of\-text 1011 Date/time\-added\-to\-db 1012 Date/time\-last\-modified 1013 Authority/format\-id 1014 Concept\-text 1015 Concept\-reference 1016 Any 1017 Server\-choice 1018 Publisher 1019 Record\-source 1020 Editor 1021 Bib\-level 1022 Geographic\-class 1023 Indexed\-by 1024 Map\-scale 1025 Music\-key 1026 Related\-periodical 1027 Report\-number 1028 Stock\-number 1030 Thematic\-number 1031 Material\-type 1032 Doc\-id 1033 Host\-item 1034 Content\-type 1035 Anywhere 1036 Author\-Title\-Subject .fi .if n \{\ .RE .\} .sp .SH "RELATION (2)" .PP .if n \{\ .RS 4 .\} .nf 1 Less than 2 Less than or equal 3 Equal 4 Greater or equal 5 Greater than 6 Not equal 100 Phonetic 101 Stem 102 Relevance 103 AlwaysMatches .fi .if n \{\ .RE .\} .sp .SH "POSITION (3)" .PP .if n \{\ .RS 4 .\} .nf 1 First in field 2 First in subfield 3 Any position in field .fi .if n \{\ .RE .\} .sp .SH "STRUCTURE (4)" .PP .if n \{\ .RS 4 .\} .nf 1 Phrase 2 Word 3 Key 4 Year 5 Date (normalized) 6 Word list 100 Date (un\-normalized) 101 Name (normalized) 102 Name (un\-normalized) 103 Structure 104 Urx 105 Free\-form\-text 106 Document\-text 107 Local\-number 108 String 109 Numeric\-string .fi .if n \{\ .RE .\} .sp .SH "TRUNCATION (5)" .PP .if n \{\ .RS 4 .\} .nf 1 Right truncation 2 Left truncation 3 Left and right truncation 100 Do not truncate 101 Process # in search term \&. regular #=\&.* 102 RegExpr\-1 103 RegExpr\-2 104 Process # ?n \&. regular: #=\&., ?n=\&.{0,n} or ?=\&.* Z39\&.58 .fi .if n \{\ .RE .\} .PP Thw 105\-106 truncation attributes below are only supported by Index Data\*(Aqs Zebra server\&. .sp .if n \{\ .RS 4 .\} .nf 105 Process * ! regular: *=\&.*, !=\&. and right truncate 106 Process * ! regular: *=\&.*, !=\&. .fi .if n \{\ .RE .\} .sp .SH "COMPLETENESS (6)" .PP .if n \{\ .RS 4 .\} .nf 1 Incomplete subfield 2 Complete subfield 3 Complete field .fi .if n \{\ .RE .\} .sp .SH "SORTING (7)" .PP .if n \{\ .RS 4 .\} .nf 1 ascending 2 descending .fi .if n \{\ .RE .\} .PP Type 7 is an Index Data extension to RPN queries that allows embedding a sort critieria into a query\&. .SH "SEE ALSO" .PP \m[blue]\fBBib\-1 Attribute Set\fR\m[]\&\s-2\u[1]\d\s+2 .PP \m[blue]\fBAttribute Set Bib\-1 Semantics\fR\m[]\&\s-2\u[2]\d\s+2\&. .SH "AUTHORS" .PP \fBIndex Data\fR .SH "NOTES" .IP " 1." 4 Bib-1 Attribute Set .RS 4 \%https://www.loc.gov/z3950/agency/defns/bib1.html .RE .IP " 2." 4 Attribute Set Bib-1 Semantics .RS 4 \%http://www.loc.gov/z3950/agency/bib1.html .RE yaz-5.28.0/doc/zoom.html0000644000175000017500000006164713572540030011766 00000000000000Chapter 3. ZOOM

Chapter 3. ZOOM

ZOOM is an acronym for 'Z39.50 Object-Orientation Model' and is an initiative started by Mike Taylor (Mike is from the UK, which explains the peculiar name of the model). The goal of ZOOM is to provide a common Z39.50 client API not bound to a particular programming language or toolkit.

From YAZ version 2.1.12, SRU is supported. You can make SRU ZOOM connections by specifying scheme http:// for the hostname for a connection. The dialect of SRU used is specified by the value of the connection's sru option, which may be SRU over HTTP GET (get), SRU over HTTP POST (post), (SRU over SOAP) (soap) or solr (Solr Web Service). Using the facility for embedding options in target strings, a connection can be forced to use SRU rather the SRW (the default) by prefixing the target string with sru=get,, like this: sru=get,http://sru.miketaylor.org.uk:80/sru.pl

Solr protocol support was added to YAZ in version 4.1.0, as a dialect of a SRU protocol, since both are HTTP based protocols.

The lack of a simple Z39.50 client API for YAZ has become more and more apparent over time. So when the first ZOOM specification became available, an implementation for YAZ was quickly developed. For the first time, it is now as easy (or easier!) to develop clients as it is to develop servers with YAZ. This chapter describes the ZOOM C binding. Before going further, please reconsider whether C is the right programming language for the job. There are other language bindings available for YAZ, and still more are in active development. See the ZOOM web-site for more information.

In order to fully understand this chapter you should read and try the example programs zoomtst1.c, zoomtst2.c, .. in the zoom directory.

The C language misses features found in object oriented languages such as C++, Java, etc. For example, you'll have to manually, destroy all objects you create, even though you may think of them as temporary. Most objects have a _create - and a _destroy variant. All objects are in fact pointers to internal stuff, but you don't see that because of typedefs. All destroy methods should gracefully ignore a NULL pointer.

In each of the sections below you'll find a sub section called protocol behavior, that describes how the API maps to the Z39.50 protocol.

1. Connections

The Connection object is a session with a target.

    #include <yaz/zoom.h>

    ZOOM_connection ZOOM_connection_new(const char *host, int portnum);

    ZOOM_connection ZOOM_connection_create(ZOOM_options options);

    void ZOOM_connection_connect(ZOOM_connection c, const char *host,
                                 int portnum);
    void ZOOM_connection_destroy(ZOOM_connection c);
   

Connection objects are created with either function ZOOM_connection_new or ZOOM_connection_create. The former creates and automatically attempts to establish a network connection with the target. The latter doesn't establish a connection immediately, thus allowing you to specify options before establishing network connection using the function ZOOM_connection_connect. If the port number, portnum, is zero, the host is consulted for a port specification. If no port is given, 210 is used. A colon denotes the beginning of a port number in the host string. If the host string includes a slash, the following part specifies a database for the connection.

You can prefix the host with a scheme followed by colon. The default scheme is tcp (Z39.50 protocol). The scheme http selects SRU/SOAP over HTTP by default, but can be changed with option sru.

You can prefix the scheme-qualified host-string with one or more comma-separated key=value sequences, each of which represents an option to be set into the connection structure before the protocol-level connection is forged and the initialization handshake takes place. This facility can be used to provide authentication credentials, as in host-strings such as: user=admin,password=halfAm4n,tcp:localhost:8017/db

Connection objects should be destroyed using the function ZOOM_connection_destroy.

    void ZOOM_connection_option_set(ZOOM_connection c,
                                    const char *key, const char *val);

    void ZOOM_connection_option_setl(ZOOM_connection c,
                                     const char *key,
                                     const char *val, int len);

    const char *ZOOM_connection_option_get(ZOOM_connection c,
                                           const char *key);
    const char *ZOOM_connection_option_getl(ZOOM_connection c,
                                            const char *key,
                                            int *lenp);
   

The functions ZOOM_connection_option_set and ZOOM_connection_option_setl allows you to set an option given by key to the value value for the connection. For ZOOM_connection_option_set, the value is assumed to be a 0-terminated string. Function ZOOM_connection_option_setl specifies a value of a certain size (len).

Functions ZOOM_connection_option_get and ZOOM_connection_option_getl returns the value for an option given by key.

Table 3.1. ZOOM Connection Options

OptionDescriptionDefault
implementationNameName of your client none
userAuthentication user name none
groupAuthentication group name none
passwordAuthentication password. none
authenticationModeHow authentication is encoded. basic
hostTarget host. This setting is "read-only". It's automatically set internally when connecting to a target. none
proxyProxy host. If set, the logical host is encoded in the otherInfo area of the Z39.50 Init PDU with OID 1.2.840.10003.10.1000.81.1. none
clientIPClient IP. If set, is encoded in the otherInfo area of a Z39.50 PDU with OID 1.2.840.10003.10.1000.81.3. Holds the original IP addresses of a client. Is used if ZOOM is used in a gateway of some sort. none
timeoutIdle timeout which specifies how long ZOOM will wait for network I/O before giving up. Thus, the actual waiting time might be longer than this value if the target makes a chunked response and the time between each chunk arrive is less this value. For the connect+init, this is the time ZOOM will wait until receiving first byte from Init response. 30
asyncIf true (1) the connection operates in asynchronous operation which means that all calls are non-blocking except ZOOM_event. 0
maximumRecordSize Maximum size of single record. 1 MB
preferredMessageSize Maximum size of multiple records. 1 MB
lang Language for negotiation. none
charset Character set for negotiation. none
serverImplementationId Implementation ID of server. (The old targetImplementationId option is also supported for the benefit of old applications.) none
targetImplementationName Implementation Name of server. (The old targetImplementationName option is also supported for the benefit of old applications.) none
serverImplementationVersion Implementation Version of server. (The old targetImplementationVersion option is also supported for the benefit of old applications.) none
databaseNameOne or more database names separated by character plus (+), which is to be used by subsequent search requests on this Connection. Default
piggybackTrue (1) if piggyback should be used in searches; false (0) if not. 1
smallSetUpperBoundIf hits is less than or equal to this value, then target will return all records using small element set name 0
largeSetLowerBoundIf hits is greater than this value, the target will return no records. 1
mediumSetPresentNumberThis value represents the number of records to be returned as part of a search when hits is less than or equal to large set lower bound and if hits is greater than small set upper bound. 0
smallSetElementSetName The element set name to be used for small result sets. none
mediumSetElementSetName The element set name to be used for medium-sized result sets. none
init_opt_search, init_opt_present, init_opt_delSet, etc. After a successful Init, these options may be interrogated to discover whether the server claims to support the specified operations. none
sru SRU/Solr transport type. Must be either soap, get, post, or solr. soap if scheme is already http; ignored otherwise
sru_version SRU/SRW version. Should be 1.1, or 1.2. This is, prior to connect, the version to offer (highest version). And following connect (in fact first operation), holds the negotiated version with the server (same or lower version). 1.2
extraArgs Extra arguments for SRU/Solr URLs. The value must be URL encoded already.  
facets Requested or recommended facets may be given before a search is sent. The value of this setting is described in Section 8, “Facets” For inspection of the facets returned, refer to the functions described in Section 5, “ZOOM Facets”. none
apdulog If set to a true value such as "1", a log of low-level protocol packets is emitted on standard error stream. This can be very useful for debugging. 0
saveAPDU If set to a true value such as "1", a log of low-level protocol packets is saved. The log can be retrieved by reading option APDU. Setting saveAPDU always has the side effect of resetting the currently saved log. This setting is write-only. If read, NULL will be returned. It is only recognized in ZOOM_connection_option_set. 0
APDU Returns the log of protocol packets. Will be empty if logging is not enabled (see saveAPDU above). This setting is read-only. It is only recognized if used in call to ZOOM_connection_option_get or ZOOM_connection_option_getl.  
memcached If given and non-empty, libMemcached will be configured for the connection. This option is inspected by ZOOM when a connection is established. If the memcached option is given and YAZ is compiled without libMemcached support, an internal diagnostic (10018) will be thrown. libMemcached support is available for YAZ 5.0.13 or later. If this option is supplied for an earlier version of YAZ, it is ignored. The value of this option is a list options - each is of the form --name=value. Option --server=host[:port] specifies a memcached server. It may be repeated for multiple memcached servers. Option --expire=seconds sets expiry time in seconds for how long result sets are to be cached. none
redis If given and non-empty, a redis context will be created for the connection. This option is inspected by ZOOM when a connection is established. If the redis option is given and YAZ is compiled without redis support, an internal diagnostic (10018) will be thrown. redis support is available for YAZ 5.2.0 or later. If this option is supplied for an earlier version of YAZ, it is ignored. The value of this option is a set of options, similar to that of the memcached setting. At this stage only --server=host[:port] and --expire=seconds are supported. none

If either option lang or charset is set, then Character Set and Language Negotiation is in effect.

     int ZOOM_connection_error(ZOOM_connection c, const char **cp,
                               const char **addinfo);
     int ZOOM_connection_error_x(ZOOM_connection c, const char **cp,
                                 const char **addinfo, const char **dset);
   

Function ZOOM_connection_error checks for errors for the last operation(s) performed. The function returns zero if no errors occurred; non-zero otherwise indicating the error. Pointers cp and addinfo holds messages for the error and additional-info if passed as non-NULL. Function ZOOM_connection_error_x is an extended version of ZOOM_connection_error that is capable of returning name of diagnostic set in dset.

1.1. Z39.50 Protocol behavior

The calls ZOOM_connection_new and ZOOM_connection_connect establishes a TCP/IP connection and sends an Initialize Request to the target if possible. In addition, the calls wait for an Initialize Response from the target and the result is inspected (OK or rejected).

If proxy is set then the client will establish a TCP/IP connection with the peer as specified by the proxy host and the hostname as part of the connect calls will be set as part of the Initialize Request. The proxy server will then "forward" the PDUs transparently to the target behind the proxy.

For the authentication parameters, if option user is set and both options group and pass are unset, then Open style authentication is used (Version 2/3) in which case the username is usually followed by a slash, then by a password. If either group or pass is set then idPass authentication (Version 3 only) is used. If none of the options are set, no authentication parameters are set as part of the Initialize Request (obviously).

When option async is 1, it really means that all network operations are postponed (and queued) until the function ZOOM_event is invoked. When doing so it doesn't make sense to check for errors after ZOOM_connection_new is called since that operation "connecting - and init" is still incomplete and the API cannot tell the outcome (yet).

1.2. SRU/Solr Protocol behavior

The HTTP based protocols (SRU, SRW, Solr) do not feature an Inititialize Request, so the connection phase merely establishes a TCP/IP connection with the HTTP server.

Most of the ZOOM connection options do not affect SRU/Solr and they are ignored. However, future versions of YAZ might honor implementationName and put that as part of User-Agent header for HTTP requests.

The charset is used in the Content-Type header of HTTP requests.

Setting authentcationMode specifies how authentication parameters are encoded for HTTP. The default is "basic" where user and password are encoded by using HTTP basic authentication.

If authentcationMode is "url", then user and password are encoded in the URL by parameters x-username and x-password as given by the SRU standard.

yaz-5.28.0/doc/yaz-iconv-man.xml0000644000175000017500000001344113265142510013313 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-iconv 1 Commands yaz-iconv YAZ Character set conversion utility yaz-iconv file DESCRIPTION yaz-iconv converts data in the character set specified by from to output in the character set as specified by to. This yaz-iconv utility is similar to the iconv found on many POSIX systems (Glibc, Solaris, etc). If no file is specified, yaz-iconv reads from standard input. OPTIONS -ffrom] Specify the character set from of the input file. Should be used in conjunction with option -t. -tto] Specify the character set of of the output. Should be used in conjunction with option -f. -v Print more information about the conversion process. ENCODINGS The yaz-iconv command and the API as defined in yaz/yaz-iconv.h is a wrapper for the library system call iconv. But YAZ' iconv utility also implements conversions on its own. The table below lists characters sets (or encodings) that are supported by YAZ. Each character set is marked with either encode or decode. If an encoding is encode-enabled, YAZ may convert to the designated encoding. If an encoding is decode-enabled, YAZ may convert from the designated encoding. marc8 (encode, decode) The MARC8 encoding as defined by the Library of Congress. Most MARC21/USMARC records use this encoding. marc8s (encode, decode) Like MARC8 but conversion prefers non-combined characters in the Latin-1 plane over combined characters. marc8lossy (encode) Lossy encoding of MARC-8. marc8lossless (encode) Lossless encoding of MARC8. utf8 (encode, decode) The most commonly used UNICODE encoding on the Internet. iso8859-1 (encode, decode) ISO-8859-1, AKA Latin-1. iso5426 (decode) ISO 5426. Some MARC records (UNIMARC) use this encoding. iso5428:1984 (encode, decode) ISO 5428:1984. advancegreek (encode, decode) An encoding for Greek in use by some vendors (Advance). danmarc (decode) Danmarc (in danish) is an encoding based on UNICODE which is used for DanMARC2 records. EXAMPLES The following command converts from ISO-8859-1 (Latin-1) to UTF-8. yaz-iconv -f ISO-8859-1 -t UTF-8 <input.lst >output.lst FILES prefix/bin/yaz-iconv prefix/include/yaz/yaz-iconv.h SEE ALSO yaz(7) iconv(1) yaz-5.28.0/doc/bib1-diag-table.xml0000644000175000017500000004041513526305444013437 00000000000000 Code Text 1 Permanent system error 2 Temporary system error 3 Unsupported search 4 Terms only exclusion (stop) words 5 Too many argument words 6 Too many boolean operators 7 Too many truncated words 8 Too many incomplete subfields 9 Truncated words too short 10 Invalid format for record number (search term) 11 Too many characters in search statement 12 Too many records retrieved 13 Present request out of range 14 System error in presenting records 15 Record no authorized to be sent intersystem 16 Record exceeds Preferred-message-size 17 Record exceeds Maximum-record-size 18 Result set not supported as a search term 19 Only single result set as search term supported 20 Only ANDing of a single result set as search term supported 21 Result set exists and replace indicator off 22 Result set naming not supported 23 Combination of specified databases not supported 24 Element set names not supported 25 Specified element set name not valid for specified database 26 Only a single element set name supported 27 Result set no longer exists - unilaterally deleted by target 28 Result set is in use 29 One of the specified databases is locked 30 Specified result set does not exist 31 Resources exhausted - no results available 32 Resources exhausted - unpredictable partial results available 33 Resources exhausted - valid subset of results available 100 Unspecified error 101 Access-control failure 102 Security challenge required but could not be issued - request terminated 103 Security challenge required but could not be issued - record not included 104 Security challenge failed - record not included 105 Terminated by negative continue response 106 No abstract syntaxes agreed to for this record 107 Query type not supported 108 Malformed query 109 Database unavailable 110 Operator unsupported 111 Too many databases specified 112 Too many result sets created 113 Unsupported attribute type 114 Unsupported Use attribute 115 Unsupported value for Use attribute 116 Use attribute required but not supplied 117 Unsupported Relation attribute 118 Unsupported Structure attribute 119 Unsupported Position attribute 120 Unsupported Truncation attribute 121 Unsupported Attribute Set 122 Unsupported Completeness attribute 123 Unsupported attribute combination 124 Unsupported coded value for term 125 Malformed search term 126 Illegal term value for attribute 127 Unparsable format for un-normalized value 128 Illegal result set name 129 Proximity search of sets not supported 130 Illegal result set in proximity search 131 Unsupported proximity relation 132 Unsupported proximity unit code 201 Proximity not supported with this attribute combination 202 Unsupported distance for proximity 203 Ordered flag not supported for proximity 205 Only zero step size supported for Scan 206 Specified step size not supported for Scan 207 Cannot sort according to sequence 208 No result set name supplied on Sort 209 Generic sort not supported (database-specific sort only supported) 210 Database specific sort not supported 211 Too many sort keys 212 Duplicate sort keys 213 Unsupported missing data action 214 Illegal sort relation 215 Illegal case value 216 Illegal missing data action 217 Segmentation: Cannot guarantee records will fit in specified segments 218 ES: Package name already in use 219 ES: no such package, on modify/delete 220 ES: quota exceeded 221 ES: extended service type not supported 222 ES: permission denied on ES - id not authorized 223 ES: permission denied on ES - cannot modify or delete 224 ES: immediate execution failed 225 ES: immediate execution not supported for this service 226 ES: immediate execution not supported for these parameters 227 No data available in requested record syntax 228 Scan: malformed scan 229 Term type not supported 230 Sort: too many input results 231 Sort: incompatible record formats 232 Scan: term list not supported 233 Scan: unsupported value of position-in-response 234 Too many index terms processed 235 Database does not exist 236 Access to specified database denied 237 Sort: illegal sort 238 Record not available in requested syntax 239 Record syntax not supported 240 Scan: Resources exhausted looking for satisfying terms 241 Scan: Beginning or end of term list 242 Segmentation: max-segment-size too small to segment record 243 Present: additional-ranges parameter not supported 244 Present: comp-spec parameter not supported 245 Type-1 query: restriction ('resultAttr') operand not supported 246 Type-1 query: 'complex' attributeValue not supported 247 Type-1 query: 'attributeSet' as part of AttributeElement not supported 1001 Malformed APDU 1002 ES: EXTERNAL form of Item Order request not supported 1003 ES: Result set item form of Item Order request not supported 1004 ES: Extended services not supported unless access control is in effect 1005 Response records in Search response not supported 1006 Response records in Search response not possible for specified database (or database combination) 1007 No Explain server. Addinfo: pointers to servers that have a surrogate Explain database for this server 1008 ES: missing mandatory parameter for specified function. Addinfo: parameter 1009 ES: Item Order, unsupported OID in itemRequest. Addinfo: OID 1010 Init/AC: Bad Userid 1011 Init/AC: Bad Userid and/or Password 1012 Init/AC: No searches remaining (pre-purchased searches exhausted) 1013 Init/AC: Incorrect interface type (specified id valid only when used with a particular access method or client) 1014 Init/AC: Authentication System error 1015 Init/AC: Maximum number of simultaneous sessions for Userid 1016 Init/AC: Blocked network address 1017 Init/AC: No databases available for specified userId 1018 Init/AC: System temporarily out of resources 1019 Init/AC: System not available due to maintenance 1020 Init/AC: System temporarily unavailable (Addinfo: when it's expected back up) 1021 Init/AC: Account has expired 1022 Init/AC: Password has expired so a new one must be supplied 1023 Init/AC: Password has been changed by an administrator so a new one must be supplied 1024 Unsupported Attribute 1025 Service not supported for this database 1026 Record cannot be opened because it is locked 1027 SQL error 1028 Record deleted 1029 Scan: too many terms requested. Addinfo: max terms supported 1040 ES: Invalid function 1041 ES: Error in retention time 1042 ES: Permissions data not understood 1043 ES: Invalid OID for task specific parameters 1044 ES: Invalid action 1045 ES: Unknown schema 1046 ES: Too many records in package 1047 ES: Invalid wait action 1048 ES: Cannot create task package -- exceeds maximum permissible size 1049 ES: Cannot return task package -- exceeds maximum permissible size 1050 ES: Extended services request too large 1051 Scan: Attribute set id required -- not supplied 1052 ES: Cannot process task package record -- exceeds maximum permissible record size for ES 1053 ES: Cannot return task package record -- exceeds maximum permissible record size for ES response 1054 Init: Required negotiation record not included 1055 Init: negotiation option required 1056 Attribute not supported for database 1057 ES: Unsupported value of task package parameter 1058 Duplicate Detection: Cannot dedup on requested record portion 1059 Duplicate Detection: Requested detection criterion not supported 1060 Duplicate Detection: Requested level of match not supported 1061 Duplicate Detection: Requested regular expression not supported 1062 Duplicate Detection: Cannot do clustering 1063 Duplicate Detection: Retention criterion not supported 1064 Duplicate Detection: Requested number (or percentage) of entries 1065 Duplicate Detection: Requested sort criterion not supported 1066 CompSpec: Unknown schema, or schema not supported. 1067 Encapsulation: Encapsulated sequence of PDUs not supported 1068 Encapsulation: Base operation (and encapsulated PDUs) not executed based on pre-screening analysis 1069 No syntaxes available for this request 1070 user not authorized to receive record(s) in requested syntax 1071 preferredRecordSyntax not supplied 1072 Query term includes characters that do not translate into the target character set 1073 Database records do not contain data associated with access point 1074 Proxy failure yaz-5.28.0/doc/apilayer.obj0000644000175000017500000001572613265142510012413 00000000000000%TGIF 4.2.5-QPL state(1,37,100.000,0,20,1,16,1,0,0,0,0,0,3,1,1,0,'Helvetica',0,138240,0,0,1,5,0,1,1,1,0,16,0,0,1,1,1,0,1485,1050,0,0,2880,0). % % @(#)$Header$ % %W% % unit("1 pixel/pixel"). color_info(67,65535,0,[ "Black", 0, 0, 0, 0, 0, 0, 1, "White", 65535, 65535, 65535, 65535, 65535, 65535, 1, "#000080", 0, 0, 32896, 0, 0, 32768, 1, "#008000", 0, 32896, 0, 0, 32768, 0, 1, "#008080", 0, 32896, 32896, 0, 32768, 32768, 1, "#800000", 32896, 0, 0, 32768, 0, 0, 1, "#800080", 32896, 0, 32896, 32768, 0, 32768, 1, "#ff8000", 65535, 32896, 0, 65280, 32768, 0, 1, "#808080", 32896, 32896, 32896, 32768, 32768, 32768, 1, "#c0c0c0", 49344, 49344, 49344, 49152, 49152, 49152, 1, "#0000ff", 0, 0, 65535, 0, 0, 65280, 1, "#00ff00", 0, 65535, 0, 0, 65280, 0, 1, "#00ffff", 0, 65535, 65535, 0, 65280, 65280, 1, "#ff0000", 65535, 0, 0, 65280, 0, 0, 1, "#ff00ff", 65535, 0, 65535, 65280, 0, 65280, 1, "#ffff00", 65535, 65535, 0, 65280, 65280, 0, 1, "#4c4c4c", 19532, 19532, 19532, 19456, 19456, 19456, 1, "#b3b3b3", 46003, 46003, 46003, 45824, 45824, 45824, 1, "#e6e6e6", 59110, 59110, 59110, 58880, 58880, 58880, 1, "#dc2300", 56540, 8995, 0, 56320, 8960, 0, 1, "#ff3333", 65535, 13107, 13107, 65280, 13056, 13056, 1, "#b84747", 47288, 18247, 18247, 47104, 18176, 18176, 1, "#99284c", 39321, 10280, 19532, 39168, 10240, 19456, 1, "#94476b", 38036, 18247, 27499, 37888, 18176, 27392, 1, "#9966cc", 39321, 26214, 52428, 39168, 26112, 52224, 1, "#6b2394", 27499, 8995, 38036, 27392, 8960, 37888, 1, "#5e11a6", 24158, 4369, 42662, 24064, 4352, 42496, 1, "#4700b8", 18247, 0, 47288, 18176, 0, 47104, 1, "#2323dc", 8995, 8995, 56540, 8960, 8960, 56320, 1, "#0099ff", 0, 39321, 65535, 0, 39168, 65280, 1, "#99ccff", 39321, 52428, 65535, 39168, 52224, 65280, 1, "#00dcff", 0, 56540, 65535, 0, 56320, 65280, 1, "#23b8dc", 8995, 47288, 56540, 8960, 47104, 56320, 1, "#33a3a3", 13107, 41891, 41891, 13056, 41728, 41728, 1, "#355e00", 13621, 24158, 0, 13568, 24064, 0, 1, "#7da647", 32125, 42662, 18247, 32000, 42496, 18176, 1, "#00ae00", 0, 44718, 0, 0, 44544, 0, 1, "#3deb3d", 15677, 60395, 15677, 15616, 60160, 15616, 1, "#ffff99", 65535, 65535, 39321, 65280, 65280, 39168, 1, "#e6e64c", 59110, 59110, 19532, 58880, 58880, 19456, 1, "#b3b300", 46003, 46003, 0, 45824, 45824, 0, 1, "#666600", 26214, 26214, 0, 26112, 26112, 0, 1, "#4c1900", 19532, 6425, 0, 19456, 6400, 0, 1, "#663300", 26214, 13107, 0, 26112, 13056, 0, 1, "#804c19", 32896, 19532, 6425, 32768, 19456, 6400, 1, "#996633", 39321, 26214, 13107, 39168, 26112, 13056, 1, "#cc6633", 52428, 26214, 13107, 52224, 26112, 13056, 1, "#ff6633", 65535, 26214, 13107, 65280, 26112, 13056, 1, "#ff9966", 65535, 39321, 26214, 65280, 39168, 26112, 1, "#ffcc99", 65535, 52428, 39321, 65280, 52224, 39168, 1, "magenta", 65535, 0, 65535, 65535, 0, 65535, 1, "red", 65535, 0, 0, 65535, 0, 0, 1, "green", 0, 65535, 0, 0, 65535, 0, 1, "blue", 0, 0, 65535, 0, 0, 65535, 1, "yellow", 65535, 65535, 0, 65535, 65535, 0, 1, "pink", 65535, 49344, 52171, 65535, 49344, 52171, 1, "cyan", 0, 65535, 65535, 0, 65535, 65535, 1, "CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1, "DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1, "#00000000c000", 0, 0, 49344, 0, 0, 49152, 1, "#820782070000", 33410, 33410, 0, 33287, 33287, 0, 1, "#3cf3fbee34d2", 15420, 64507, 13364, 15603, 64494, 13522, 1, "#3cf3fbed34d3", 15420, 64507, 13364, 15603, 64493, 13523, 1, "#ffffa6990000", 65535, 42662, 0, 65535, 42649, 0, 1, "#ffff0000fffe", 65535, 0, 65535, 65535, 0, 65534, 1, "#fffe0000fffe", 65535, 0, 65535, 65534, 0, 65534, 1, "#fffe00000000", 65535, 0, 0, 65534, 0, 0, 1 ]). script_frac("0.6"). fg_bg_colors('Black','white'). dont_reencode("FFDingbests:ZapfDingbats"). objshadow_info('#c0c0c0',2,2). rotate_pivot(0,0,0,0). spline_tightness(1). page(1,"",1,''). text('Black',95,51,2,0,1,155,34,6,14,3,0,0,0,0,2,155,34,0,0,"",0,0,0,0,65,'',[ minilines(155,34,0,0,0,0,0,[ mini_line(155,14,3,0,0,0,[ str_block(0,155,14,3,0,-1,0,0,0,[ str_seg('Black','Helvetica',0,80640,155,14,3,0,-1,0,0,0,0,0, "Client/Server Application")]) ]), mini_line(0,14,3,0,0,0,[ str_block(0,0,14,3,0,0,0,0,0,[ str_seg('Black','Helvetica',0,80640,0,14,3,0,0,0,0,0,0,0, "")]) ]) ])]). text('Black',120,121,2,0,1,44,34,21,14,3,0,0,0,0,2,44,34,0,0,"",0,0,0,0,135,'',[ minilines(44,34,0,0,0,0,0,[ mini_line(44,14,3,0,0,0,[ str_block(0,44,14,3,0,-1,0,0,0,[ str_seg('Black','Helvetica',0,80640,44,14,3,0,-1,0,0,0,0,0, "Z39.50")]) ]), mini_line(39,14,3,0,0,0,[ str_block(0,39,14,3,0,-3,0,0,0,[ str_seg('Black','Helvetica',0,80640,39,14,3,0,-3,0,0,0,0,0, "ASN.1")]) ]) ])]). text('Black',190,186,1,0,1,37,17,25,14,3,0,0,0,0,2,37,17,0,0,"",0,0,0,0,200,'',[ minilines(37,17,0,0,0,0,0,[ mini_line(37,14,3,0,0,0,[ str_block(0,37,14,3,0,-1,0,0,0,[ str_seg('Black','Helvetica',0,80640,37,14,3,0,-1,0,0,0,0,0, "HTTP")]) ]) ])]). text('Black',240,266,1,0,1,26,17,53,14,3,0,0,0,0,2,26,17,0,0,"",0,0,0,0,280,'',[ minilines(26,17,0,0,0,0,0,[ mini_line(26,14,3,0,0,0,[ str_block(0,26,14,3,0,0,0,0,0,[ str_seg('Black','Helvetica',0,80640,26,14,3,0,0,0,0,0,0,0, "SSL")]) ]) ])]). box('Black','',35,230,305,255,0,1,1,197,0,0,0,0,0,'1',0,[ ]). box('Black','',175,180,305,215,0,1,1,198,0,0,0,0,0,'1',0,[ ]). box('Black','',175,115,240,165,0,1,1,200,0,0,0,0,0,'1',0,[ ]). box('Black','',100,115,170,165,0,1,1,203,0,0,0,0,0,'1',0,[ ]). box('Black','',205,255,305,290,0,1,1,214,0,0,0,0,0,'1',0,[ ]). text('Black',95,231,1,0,1,79,17,224,14,3,0,0,0,0,2,79,17,0,0,"",0,0,0,0,245,'',[ minilines(79,17,0,0,0,0,0,[ mini_line(79,14,3,0,0,0,[ str_block(0,79,14,3,0,0,0,0,0,[ str_seg('Black','Helvetica',0,80640,79,14,3,0,0,0,0,0,0,0, "COMSTACK")]) ]) ])]). text('Black',80,186,1,0,1,73,17,254,14,3,0,0,0,0,2,73,17,0,0,"",0,0,0,0,200,'',[ minilines(73,17,0,0,0,0,0,[ mini_line(73,14,3,0,0,0,[ str_block(0,73,14,3,0,-1,0,0,0,[ str_seg('Black','Helvetica',0,80640,73,14,3,0,-1,0,0,0,0,0, "ODR (BER)")]) ]) ])]). box('Black','',35,180,170,215,0,1,1,266,0,0,0,0,0,'1',0,[ ]). box('Black','',35,45,305,90,0,1,1,268,0,0,0,0,0,'1',0,[ ]). box('Black','',240,115,305,165,0,1,1,292,5,0,0,0,0,'1',0,[ ]). text('Black',255,126,1,0,1,25,17,293,14,3,0,0,0,0,2,25,17,0,0,"",0,0,0,0,140,'',[ minilines(25,17,0,0,0,0,0,[ mini_line(25,14,3,0,0,0,[ str_block(0,25,14,3,0,0,0,0,0,[ str_seg('Black','Helvetica',0,80640,25,14,3,0,0,0,0,0,0,0, "Solr")]) ]) ])]). text('Black',50,121,2,0,1,39,34,303,14,3,0,0,0,0,2,39,34,0,0,"",0,0,0,0,135,'',[ minilines(39,34,0,0,0,0,0,[ mini_line(20,14,3,0,0,0,[ str_block(0,20,14,3,0,0,0,0,0,[ str_seg('Black','Helvetica',0,80640,20,14,3,0,0,0,0,0,0,0, "ILL")]) ]), mini_line(39,14,3,0,0,0,[ str_block(0,39,14,3,0,-3,0,0,0,[ str_seg('Black','Helvetica',0,80640,39,14,3,0,-3,0,0,0,0,0, "ASN.1")]) ]) ])]). box('Black','',35,115,100,165,0,1,1,305,0,0,0,0,0,'1',0,[ ]). box('Black','',240,115,305,165,0,1,1,306,0,0,0,0,0,'1',0,[ ]). text('Black',190,126,1,0,1,29,17,323,14,3,0,0,0,0,2,29,17,0,0,"",0,0,0,0,140,'',[ minilines(29,17,0,0,0,0,0,[ mini_line(29,14,3,0,0,0,[ str_block(0,29,14,3,0,-1,0,0,0,[ str_seg('Black','Helvetica',0,80640,29,14,3,0,-1,0,0,0,0,0, "SRU")]) ]) ])]). yaz-5.28.0/doc/common/0000755000175000017500000000000013572540030011446 500000000000000yaz-5.28.0/doc/common/print.dsl.in0000644000175000017500000000107213250277666013652 00000000000000 ]> (define preferred-mediaobject-notations (list "PDF" "JPG" "JPEG" "PNG" "linespecific")) (define preferred-mediaobject-extensions (list "pdf" "jpg" "jpeg" "png")) yaz-5.28.0/doc/common/id.tkl.xsl0000644000175000017500000000260713250277666013327 00000000000000 1 .tkl 0 <xsl:apply-templates select="." mode="object.title.markup"/> 1 yaz-5.28.0/doc/common/README0000644000175000017500000000012213250277666012260 00000000000000This directory contains various common files for our Docbook based documentation. yaz-5.28.0/doc/common/id.eps0000644000175000017500000004137713250277666012526 00000000000000%!PS-Adobe-3.0 EPSF-3.0 %%Creator: GIMP PostScript file plugin V 1.12 by Peter Kirchgessner %%Title: /home/adam/ID.eps %%CreationDate: Wed May 1 13:27:33 2002 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%Pages: 1 %%BoundingBox: 14 14 135 172 %%EndComments %%BeginProlog % Use own dictionary to avoid conflicts 10 dict begin %%EndProlog %%Page: 1 1 % Translate for offset 14.173228 14.173228 translate % Translate to begin of first scanline 0.000000 157.000000 translate 120.000000 -157.000000 scale % Image geometry 120 157 8 % Transformation matrix [ 120 0 0 157 0 0 ] % Strings to hold RGB-samples per scanline /rstr 120 string def /gstr 120 string def /bstr 120 string def {currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} {currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} {currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} true 3 %%BeginData: 16148 ASCII Bytes colorimage mf*=@B(7YXB%aEgJ,~> mf*=\g%!8eg%DTLJ,~> mf*=IN:CK\N8h)AJ,~> n,EBom5"aKZ2]=~> n,ECSmE>RsZ2]=~> n,EC-m:H@ nG`OP5j^?.5j,HQJ,~> nG`OacgApWchOgGJ,~> nG`OVE:%6 nG`KIlSAO"ZN#F~> nG`LJlc]@gZN#F~> nG`KflXg-rZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K=lSANkZN#F~> nG`LGlc]@dZN#F~> nG`K\lXg-hZN#F~> nG`L4lSAObZN#F~> nG`LZlc]A"ZN#F~> nG`LAlXg.MZN#F~> n,EB n,ECFmE>RfZ2]=~> n,EB[m:H?jZ2]=~> mf*9TmkXs3YlB4~> mf*:Ln&tdoYlB4~> mf*9nmq)R+YlB4~> mJd4X^[mio^[eT.J,~> mJd4bn+5ZBn,0BhJ,~> mJd4[ch"IDch4LAJ,~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> pAk3,oDel[rk8OC!%5LpAGcH*1B= pAk3,oDel[rk8OH!%5LpAGcH*bQ-o,ncA4:o$%%&!9s4$!n-Z+rQG?-o$[0S!oNS"pWS-~> pG;floJ6KNrlYI,1K2K?KD[P'AcTLCf`BEknn.gQ!5/#;!dWJ=rFQ,Dfm34%!h\.upL\p~> pAk3moDem*rr3.P!!*'!JG]EF1C)/(bfoYXk?7F5!WV?^bQ+O51C(\pN&*82s1e.]!h'(#pG7=~> pAk3moDem*rr3.P!!*'!JG]EFbQm_=o()_Ypt#)]!WVronc7qIbQmV:iloX%s6oR'!p9O9pWS-~> pG;gKoJ6Kjrr3.i1Gf(2RJ\l=Ad@#hg"H&um=Y%C!WVQdf`8\XAd?Z^WFfb.s3L:K!jhocpL\p~> pAk3moDem*rr3/b$3:,+JG]EF1BG`"r\FV7s6'#1!WSSX1C$29nl\]Xk pAk3moDem*rr3/s%flY0JG]EFbQ7;7rlbH's7l61!WV pG;gKoJ6Kjrr3/h4#?p:RJ\l=Ac^Tbral52s6]Gj!WTLrAd<;Jon.P_m;VZ/!jhocpL\p~> pAk3moDem*rVm"N!<<(LquHXN!R1TB1BOo_JFt]!s-`@4"_Refbl;;G1BO!EB(n*3~> pAk3moDem*rVm"N!<<(LquHZ=!V69hbQ@/2ht>1os5rgp"kiqKo)ID6bQ?r,g%W^@~> pG;gKoJ6KjrVm"g1]RKCr%n7_!SRMOAcg!PTCldss0M3,"cWK@g&I$%Acf==N;$q7~> pAk3moDf33s1[Cjk6h7hJG]EF1BG`"rA+Les-`O9!WV?^bQ(f;1BXNSs-`C5!h'(#pG7=~> pAk3moDf33s1[Cjp^dE)JG]EFbQ7;7rQG>rs5s!u!WVronc784bQI,0s5rjq!p9O9pWS-~> pG;gKoJ6fss3'R)m5t@JRJ\l=Ac^TbrFQ+is0MB1!WVQdf`6ZrAco^Gs0M6-!jhocpL\p~> pAk3moDf33s1W%Ds+(.LJG]EF1BG`"rA+Les-`O9!WV?^bQ(f;1BX'Fs-`C5!h'(#pG7=~> pAk3moDf33s1W%Ds+(.LJG]EFbQ7;7rQG>rs5s!u!WVronc784bQI#-s5rjq!p9O9pWS-~> pG;gKoJ6fss3$&ps-`oeRJ\l=Ac^TbrFQ+is0MB1!WVQdf`6ZrAcoC>s0M6-!jhocpL\p~> pAk3moDf33s1SKjs6'F^JG]EF1BG`"rA+Lrs-`O9!WSSW1Bgq]bif"/nhU?8s(;!]J,~> pAk3moDf33s1SKjs7lWoJG]EFbQ7;7rQG>us5s!u!WV pG;gKoJ6fss3!4\s6]jdRJ\l=Ac^TbrFQ+ss0MB1!WTLqAd*heg$Sflnn%s0s,?\aJ,~> pAk3moDf$.s5*ferVlkJquHXN!R1TB1BQ80=nOQOs-`C5#=.JC9kOFg5k?c5RK$mn1Oo~> pAk3moDf$.s5*ferVlkJquHZ=!V69hbQ@J;f(I5fs5rjq#LE2Cdb4Zqch#?^k5X-/b^]~> pG;gKoJ6Wns5l+irVlkcr%n7_!SRMOAcgulKCrgWs0M6-#B9)'H&VdjE:[ZCZi?!YAq0~> pAk3moDf'/s8N'!huR!WTM*AcQ!,1C(8dN&*8es/,BD!h'(#pG7=~> pAk3moDf'/s8N'!hu pG;gKoJ6Zos8Ol2k5PA\RJ\l=Ad@#hN/XCgs2O\C!WU1=Mu\M'Ad??UWFfbTs1Ir8!jhocpL\p~> pAk3moDf'/s8N'!AH)T/JG]EF1B>YtrrM\Yo/$=E!6k-m!d"Ccr\FXAg&H-c1BO!EB(n*3~> pAk3moDf'/s8N'!AH)T/JG]EFbQ.54rrN&[o?@.4!:oj-!o3hHrlbJjp&Eh>bQ?r,g%W^@~> pG;gKoJ6Zos8Ol2KDtlNRJ\l=AcUN_rrMf!o4Iq#!87'X!g`l>ral7Oir>>:Acf==N;$q7~> pAk1ZoDeq?6:1YOr^$T4quHXN!*T;5!*ShJr+5q3p+lbQAjH;N!_m90oJ6PCAjH)HJ,~> pAk1ZoDeq?6:1YOr^$T4quHZ=!7q/&!7p\ar7M)$p<3Thg!BW@!n,cQoZRBbg!BE:J,~> pG;e]oJ6PIB4q3"rau40r%n7_!/(90!/'fRr/:W.p1=AYN,\`-!dT`WoO\/MN,\N'J,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> qD/DFs7/E21M6ZTr%n6N!5AF3!oKGWq>gCK!1Ecb!+tp\!iH!cr\FUYs4R!"s31'j!h')4r\FUf s(;*`J,~> qTK6-s8:3ebh<$Yr65'=!5AF3!oKGWq>gE:!9X4Z!87(i!pTaIrlbGps7Q!-s75d*!p9ORrlbGs s4R7mJ,~> qIU#>s7L>CArQbrr+>j_!6b?@!p6\=qD8"\!42V'!0$V`!keQ>ral4as5NW^s4R!U!jhp[ral4j s,?edJ,~> qD/DFs8SKC1M6ZTr%n6N!5A=0!1Ncbq_J;As0M]m!) qTK6-s8V6*bh<$Yr65'=!5A=0!1Ncbqof-(s6TaI!7LSb#g`;Gf$)A2s46ecs75d*#j20ehos qIU#>s8TE;ArQbrr+>j_!6b6=!3c8Uqdoo9s2P&E!."9M#]T22K4\`Ts+BoTs4R!U#daR2T4V\o s,?edJ,~> qD/DFs75_G1M6ZTr%n6N"ht$:6:..?rr?U-!;ePRRK$mh1BqIkfg)G7N:Je)bk!UrRK)I51G`YC B)4<6~> qTK6-s8;f@bh<$Yr65'="ht$:6:..?rr?U-!;jtAk5X-)bQcc#p!;n&ipt=no(1'2k5Y5Obfnc? g%rpC~> qIU#>s7Q&(ArQbrr+>j_"j?rGB4nFIrr@]L1](bcZi?!SAd44oic)R1WUa[$g%/e]ZiBF[AnI#% N;@.:~> qD/DFs-`nn1M6ZTr%n6N!l"^7rW!%Ns8Th2!;ePRRK$mg1Ba-Gbl>oW1]P\j1C0EKJH)#nB)cK> 1Oo~> qTK6-s5s@Jbh<$Yr65'=!l"^7rW!%Ns8Th2!;jtAk5X-(bQR).o)J:Nbl@8*bR!A2huDi_g&Kb% b^]~> qIU#>s0MaFArQbrr+>j_!mCWDr\FYEs8U:?1](bcZi?!RAd#I?g&KaqB)gQUAdGaCTDu60N;nk5 Aq0~> qD/DFs(8V;9kOEnr%n6N!l"^7rW!$es8Th2!;ePRRK(t>bjmOlg&LV.nMC3ho.pZ?s"i@!5\C%. qD3X~> qTK6-s4Qc=db4Z_r65'=!l"^7rW!$es8Th2!;jtAk5Y,Ro((!,p&Fs9n]_%(o?7L&s3106ce8?O qTOH~> qIU#>s,=ttH&Vd0r+>j_!mCWDr\FXhs8U:?1](bcZiB%ag%&_WirA[jnRhgSo4A97s(:9`E/agU qIY6~> qD/DFs(5"*b\$mCr%n6N!l"^7rW!$es8Th2!;ePRRK(t>bk!Un5k=sTB(7\Wbk!UrRK#'Ts-[L! B)4<6~> qTK6-s4Pj#o%F'*r65'=!l"^7rW!$es8Th2!;jtAk5Y,Ro(1'.ci!hCg%!;do(1'2k5WZYs5r#7 g%rpC~> qIU#>s,;7'fo5s;r+>j_!mCWDr\FXhs8U:?1](bcZiB%ag%/eYE:s82N:CN[g%/e]Zi=Wrs0I[a N;@.:~> qD/DFs(4'Ts-`nTr%n6N!l"^7rW!%Ns8Th2!;ePRRK$mg1BkPnN;r'+nh^ qTK6-s4PWYs5s@Dr65'=!l"^7rW!%Ns8Th2!;jtAk5X-(bQ[J8irAf"o$%.)o?7L&s3/^Xs53k0 qTOH~> qIU#>s,:Qrs0Ma3r+>j_!mCWDr\FYEs8U:?1](bcZi?!RAd-N\WW2@)nn.pTo4A97s(5lrs.B=M qIY6~> qD/DFs(4&Po()gKr%n6N"ht$:!%3 qTK6-s4PWBr;?TWr65'="ht$:!%3 qIU#>s,:Q/p%A?kr+>j_"j?rG1K0_@rr@]L1](bcZi?!SAd577]OnMMcgk]Jg%/e]Zi=WLH2m:3 N;@.:~> qD/DFs(4&CRK*;Tr%n6N!5A=0!1Ncbq_J;As0M]m!) qTK6-s4PW?k5YJDr65'=!5A=0!1Ncbqof-(s6TaI!7LSb#hJqKccjW+s53Fls75d*!TsF]bQI53 s4R7mJ,~> qIU#>s,:Q%ZiC'3r+>j_!6b6=!3c8Uqdoo9s2P&E!."9M#_Vg;E+W_As.Amps4R!U!OMh*Acp'Q s,?edJ,~> qD/2@s(;6d!pBTOr%n6N!5AC2!PW+@!;ePPRJd'bB(e"^g&G[`1BUABnkJa4s31'j!L`ue1BTo5 s(;*`J,~> qTK$'s4RCq!r2fXr65'=!5AC2!PW+@!;jt?k5>5Zg%NVkp&E_EbQH;kr6k5]s75d*!TsF]bQH2h s4R7mJ,~> qITf8s,?qh!q$#or+>j_!6bOom-1As4R!U!OMh*Acm#F s,?edJ,~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> qD/,>rVloOJGM)!!!'b1rr@TH!;nVSg&G[`1BP>kF7_6iB)e:j1]RITRJnuCbl@Am!6kEA!SMPh 1Oo~> qTJs%rVlokhtkRo!!'b1rr@TH!;t%Bp&E_EbQ@85h"8elg&L4+bl@\Ck5NR*o)JF-!:p*g!VP7C b^]~> qIT`6rVloXTDE0s1B>VqrrAJa1]1hdir=u:AcgN!TKF? Aq0~> qD/AEs,;#ekPqmc1]%.P^AIp1JGT?E1C%(_kVo; VYN#u~> qTK3,s5Mhrq#B^XbkhA?^AIp1JGT?EbQl`!ps71>s6oR'!nmV9o?@46"ObN qITu=s/DRJSf qD/DFs(4&C5hZ0fr%n3M"2=g86MCKW1Brg<^J4:^5k?c5B)e:j1C*sCs0FL;bl@Am!R1TC1BTo* s&o1SJ,~> qTK6-s4PW?ch7=qr65$<"2=g86MCKWbQd),n'_./ch#?^g&L4+bQn1Cs6RtRo)JF-!V69ibQH2d s47%jJ,~> qIU#>s,:Q%E8pnir+>g^"3^`EBD44ZAd577c[#3NE:[ZCN;p6UAdAA's2JY_g&LbX!SRMPAcm#> s+C/[J,~> qD/2@s(;6d!_r^0r%n3M"2=g8AH"mq$Msi"1Bbr%kPo/b1BM1gRI`3>s3.hL=Yn;%p+l`ns8=_T F8r-61Oo~> qTK$'s4RCq!n.,;r65$<"2=g8AH"mq&,QA'bQRM:q#B% qITf8s,?qh!dXglr+>g^"3^`EKDoK`48Ui1Ad$femJi.9AcdqkZh%c6s4PElK4`g:p1=?Ys8?O2 QN+VoAq0~> qD/2@s(;3c!WUCA1]%.P^AIp16MgcZ1BUAOs/, qTK$'s4R@p!WV`gbkhA?^AIp16MgcZbQH;ns69't!nmV9o?7I>o$[I,bjtf-bQ7;7rQG>hs76$1 J,~> qITf8s,?ng!WUjNB)=@abPV;>BDXL]Acm>Ys1Il6!f[/co4A7-fm38DB%d4XAc^TbrFQ+Ms4R6\ J,~> qD/2@s(;3c!WUCA1]%.S^An5jrk8@[qZ-IK"I];inj)b%!bVJ#o.pXObVP[eB$C;K1BG`"rA+L? s31 qTK$'s4R@p!WV`gbkhAB^An5jrk8@[qZ-K:"Qoaar6OrX!nmV9o?7I>o$$7rg%,1:bQ7;7rQG>h s76$1J,~> qITf8s,?ng!WUjNB)=@dbQ%V)rlY:?q_S(\"LJ..ol0J6!f[/co4A7-fk.SjN7n7)Ac^TbrFQ+M s4R6\J,~> qD/2@s(;6d!a5Q0r%n3M"2=g86MCKW1Bgq]b`)S:nhU>Zs-`I7#QN"(5k qTK$'s4RCq!nRD qITf8s,?qh!e^Nmr+>g^"3^`EBD44ZAd*hefr>"tnn%r^s0M qD/DFs(4&C5hZ0Lr%n3M"2=g8AH"mq-i3oA1C$2.nkCpas,?P*!bVJ#o.pOLbVM&6rr;[J!R1TC 1BUeNs%W>GJ,~> qTK6-s4PW?ch7=kr65$<"2=g8AH"mq-i3oAbQlJhr6ig[s5NXo!nmV9o?7@;o$#>;rr;]9!V69i bQHGos3gbfJ,~> qIU#>s,:Q%E8pnVr+>g^"3^`EKDoK`;u8BKAd<;Bom(0&s/GU%!f[/co4A.*fk+iqrr;\(!SRMP Acm\Ys*=HQJ,~> qD/AEs0J-;o)H&n1]%.P^AIp1JGT?E1C1>eN&*7ao(#rU1BM1gRI`38s31Hu!pBU`p+lrts-]b. s8RWF1Oo~> qTK3,s6Sn=r;Z-\bkhA?^AIp1JGT?EbR!S8iloWpr;>. qITu=s2MCup&E&/B)=@abPV;>RJSf qD/,>rr3&D^LmYurrUEN B)"04~> qTJs%rr3&jn(IQ]qZ$W1qu6YHqZ-T=!o3hHrQG>us7Q$.!nmV9o?778o)?i7h#IEJbQ.55rrVcX g%`dA~> qIT`6rr3&Qc]%^4q_J5qqu6Yaq_S1_!g`l>rFQ+ss5NZ_!f[/co4A%'g&>RbQN.!YAcUN`rrUln N;."8~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> q(i"9r+5q'q_S-M#q&&+-NF,o6:*'t!;SDO9kNuQ!^L@0rA+Id:%gCAAcPQr1B9] q9/ibr7M(uqons<#q&&+-NF,o6:*'t!;Xh>db469!mfQQrQG;qde:o`f`9IkbQ,uef`9Irb^]~> q.9VGr/:W$qe#a^#ubJL;_p4.B4k0@1\kV`H&V?,!cX*WrFQ(hH1kkKMu\.oAcQfJMu\/!Aq0~> q(i"_r;Qbbq_S-M$%W'UhZ*Z6s8PF`!;SDORK)k7"(qT5B)XRes-`R:r;Qf\B(RkZB)MZ/RJAXh~> q9/ilr;QcZqons<$%W'UhZ*Z6s8PF`!;Xh>k5Y%s"53_Sg&B1rs5s%!r;Qfmg% q.9Vcr;Qc'qe#a^$(:hnjtegUs8Qa01\kV`ZiBW/"-!9[N;dDis0ME2r;QfbN:^]^N;W\UZh\3`~> q(i(as0M]:!)<>HqZ$lYs8QV?s8Th1!;SDORK)k7"(qT5g& q9/ons6Tak5Y%s"53_Sp& q.9\es2P%s!."HRq_JK>s8R_(s8U:>1\kV`ZiBW/"-!9[ir3Njs0ME2#QMf&N3i3WQM"hkN;omV Mu\/!Aq0~> q(i(as-`U;qZ$jfs8V!6s5td,!;SDORK)k7#\O+\s*um]s-`R:!WSSe1BL_ZkOgV4B)cK91Oo~> q9/ons5s("qZ$jfs8V!6s7du=!;Xh>k5Y%s#hf7Ks52&Es5s%!!WV<]bQ?Aqq";i4g&Kaub^]~> q.9\es0MH3q_JIis8V6Ds6Wb^1\kV`ZiBW/#`Sf:s. q(i(as0M]:!'pE;q>^N0rVlkJq>g=I!L`uZ1C.UmB'8>51]Nm:1BINDrA+M]s(:s\!bVIkratp] J,~> q9/ons6Ta^N0rVlkJq>g?8!TsFRbQuo%g%b?dbl?i!bQ7b+rQG?0s4R+i!nmV5rn7(j J,~> q.9\es2P%s!-%gIqD/,prVlkcqD7qZ!OMgtAdF@qN:$"EB)f42Ac_q q(i"_r;Qb/q_S'K!%7aFq#L4H!L`uZ1C.UmAq9oL1]Nm:1BINDrA+MCs(:s\!+u0/pbRF~> q9/ilr;QcMqonm:!%7aFq#L67!TsFRbQuo%g#)hlbl?i!bQ7b+rQG?*s4R+i!87;Mprn6~> q.9Vcr;QbUqe#[\!)rjrq(qhY!OMgtAdF@qN1^-VB)f42Ac_q q(i(as0M]:!'pE;q>^N0rVlkJq>g=I!L`uZ1C.UmAi%[%5l[8G1BINDrA+MCs(:s\!bVIkratp] J,~> q9/ons6Ta^N0rVlkJq>g?8!TsFRbQuo%g!'$bci q.9\es2P%s!-%gIqD/,prVlkcqD7qZ!OMgtAdF@qN+Uc9E q(i(as-`U;qZ$^bs8V!Urr=GD!;SDORK)k7#\O*K1M6Zas-`R:!WSSd1BQ805kZu8B)cK91Oo~> q9/ons5s("qZ$^bs8V!Urr=GD!;Xh>k5Y%s#hf72bh<$\s5s%!!WV<\bQ@J;ch>Qag&Kaub^]~> q.9\es0MH3q_J=es8V6\rr?!p1\kV`ZiBW/#`SeBArQc&s0ME2!WTM)AcgulE;!lFN;nk0Aq0~> q(i(as-`U;qu@!0huE^CRfEE%qZ-FJ!L`uZ1C.UmAhu6Xs8SM\1C*rJ1G_;&s0MAS!bVIEoeV*~> q9/ons5s("qu@!5huE^CRfEE%qZ-H9!TsFRbQuo%g!%\/s8V6TbQn11bfnE"s6TF&!nmV,ouqp~> q.9\es0MH3r%eU?k5YHoYQ+XGq_S%[!OMgtAdF@qN+Q\Js8TG!AdA@BAnH#%s2O_D!f[/ q(i(as6'C*!.ar&qu?nhs8Te5-iX,G6MpiZ1BEpDo.pYas(4&C:&k6]p+lsRkKM0Ms3*b$1BM1g g&B1qJGD!O~> q9/ons7lTa!8m[tqu?nhs8Te5-iX,G6MpiZbQ6l+o?7Kns4PW?df9@0p<3dAq"""Us74M/bQ?Jt p&=L^htbKH~> q.9\es6]g=!2'.#r%eM[s8U7u;uZdsBDaR]Ac]7 q(i"Rr6,.kq_S0N!"/_>"t'BNAA5dHquHOK!J&Dc1BL_'=oL2YREU3T1]>MuVK;>b!*T6D!.al$ J,~> q9/iir:0jFqoo!=!"](C"t'BNAA5dHquHQ:!T3J>bQ?Adf)Ekpk47F'bl.)5l.kmS!7q)=!8mUr J,~> q.9VZr7M(Bqe#d_!'C2'##d<6K?MHAr%n.\!MA':AcdV lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> qD/2'R8*Z:!^N0(j>-c\r#,S\0(Uk!0)cah0(^q",PrAZ,P3bl0)cah0).5Q~> qTK#uk0j7Q!mg#djNIU^r+?%g\F[oE\Gg+@\FduFMu.,eMtG3n\Gg+@\G49u~> qITf$Z[)O^!cYK qD/1os31Hu!l+bcj>-cSqZ$X()Y>fc)ZB^:%.l=U%/U#)%.l=U)ZB^:%/;W/~> qTK#rs7605!q60HjNIU:qZ$X-BCsCJBDql21%`Zi1&CqN1%`ZiBDql21&/tC~> qITeps4RB`!mgn=jCSBdq_J77:%W#t:&ZpK5P/Of5Pm5:5P/Of:&ZpK5PSi@~> q(i5is,8aTs1dSM"W@@@"q1_8!!!r11B7XX!!"YE1C"U&"onW-$l&=i!!`B%!&"('J,~> q90'3s5M8Xs6o!l"_Rf8)DN00!!$[)bQ&R[!!'P%bQh!")?9aU0i@Se!#ke9!4_jKJ,~> q.9iWs/BUrs3K_;"\gd/3BoP'1B:/BAcOji1B:kVAd:gj3AWHO5=b?X!'1!6!+G\8J,~> q(i4?kPo/bk q90&hq#B%Fps8!E$"j5 q.9hMmJi. pbMn^rr2t1i\LZT!!!r:1BRsa!&""%"r%%;/cYkUo.pIe!!!r/1BnNn!%n6O#5L'*~> pri`krr2uOilhL;!!$[2bQA@U!4_dI##P@#\,ZLIo?7;L!!$['bQ^oE!4W"/)YqU-~> pgsMbrr2tWiar9e1G_c)Ack+N1L^#i#"LI*@5B]"o4A)!1G_bsAd1a]1LW'q3Vd9;~> pG2m(s6&>s!u_.>)ZDMp$ig8PpbN1.!!!]h,6.]goJ6Rf!!!r01C,T5!#.46!!"8?1Oo~> pWN^3s7kQs"(qT6BE$*W0`V33prj#R!!#m?MZ pLXKds6\cW"&1R-:&\`,5;P)rpgse?1G_O5<\lO4oO\2"1G_btAdDg$1Il%X1G`).Aq0~> pbN&@s6'EMi\LZT!!!r:1BRg]!&"%&![@[FrXAf,!#5&]!u_.>)Y>fe,6.`C%0$;-'`'V9~> prim's7lWVilhL;!!$[2bQAa`!4_gJ!fI$Yr\=EQ!)`C4"(qT6BCsCLMZSLe~> pgsZ8s6]imiar9e1G_c)Ack%L1L^&j!`h*5r]gE=!(ZZn"&1R-:%W$!<\lQ25Q8,?hJ~> q(i4Xs4K[#s(::I#oWdD)Da/f!!!5t1B7XU!!*EZoeQ[g!!!r01B7XU!!*EZq_Na~> q90&os7O_5s4QGV$"j5 q.9h`s5J"bs,>uM#u*339kJ!31G_&cAcOjf1BBRGok";#1G_btAcOjf1BBRGqdt?~> qD/CBkOMb3B)h$Zj>-rX!!!33#6"T&)Yc)j/cYkUrYbkI!!"8:1BSNq!#kMd""jQR#6#MC$ig8P q_Na~> qTK5kq#&^eg&LinjNId?!!!ol)ZB^:BDB[Q\,ZLIrau qIU"PmIc*DN;r9ajCSQi1G_$U3W:f7:&&<&@5B]"r_3JZ1G`))Acka`1JROS"( qD/2Zs,?q5!h')'j>-cSqZ$X()YZ#i'EA+Or\FX$!!!5r1BSNq!#kMd!u(_8)ZDMp,6.]Jq_Na~> qTK$-s5O%%!p9OOjNIU:qZ$X-BD9UP;#gT/rlbJ&!!!r1bQDJX!,(uK"&T$uBE$*WMZ<_qqojQ~> qITfKs/H!0!jhpQjCSBdq_J77:%r6%7l)qqral751G_&aAcka`1JROS"%P.':&\`,<\lNlqdt?~> q_J:=R>h&"s-WjPjYHl]r#,S\0(q(',8qIQr\FO,rYkGc"!\^&,P qof,fk2Q<_s5j=-jid^_r+?%g\G",KMe?\4rlbAPrb(oJ",gf)MtP9rMe?\4rlbAPrb),PJ,~> qdonKZ`3k7s0D]Ej^nKnr(R2m@J4:8<_Z:sral.=r_<&t"'/,j M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> %%EndData showpage %%Trailer end %%EOF yaz-5.28.0/doc/common/Makefile.in0000644000175000017500000003655313570011145013445 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/common ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = print.dsl CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(commondir)" DATA = $(common_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/print.dsl.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HIREDIS_LIBS = @HIREDIS_LIBS@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MEMCACHED_LIBS = @MEMCACHED_LIBS@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ commondir = $(datadir)/doc/$(PACKAGE)$(PACKAGE_SUFFIX)/common common_DATA = style1.css id.png SUPPORTFILES = \ xml.dcl \ common.ent \ id.eps \ ref2dbinc.xsl \ stripref.xsl \ print.dsl.in \ id.htmlhelp.xsl \ id.man.xsl \ id.tkl.xsl EXTRA_DIST = $(SUPPORTFILES) $(common_DATA) README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/common/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/common/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): print.dsl: $(top_builddir)/config.status $(srcdir)/print.dsl.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-commonDATA: $(common_DATA) @$(NORMAL_INSTALL) @list='$(common_DATA)'; test -n "$(commondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(commondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(commondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(commondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(commondir)" || exit $$?; \ done uninstall-commonDATA: @$(NORMAL_UNINSTALL) @list='$(common_DATA)'; test -n "$(commondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(commondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(commondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-commonDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-commonDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-commonDATA install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-commonDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-5.28.0/doc/common/xml.dcl0000644000175000017500000001522113250277666012672 00000000000000" PIC "?>" SHORTREF NONE NAMES SGMLREF QUANTITY NONE ENTITIES "amp" 38 "lt" 60 "gt" 62 "quot" 34 "apos" 39 FEATURES MINIMIZE DATATAG NO OMITTAG NO RANK NO SHORTTAG STARTTAG EMPTY NO UNCLOSED NO NETENABL IMMEDNET ENDTAG EMPTY NO UNCLOSED NO ATTRIB DEFAULT YES OMITNAME NO VALUE NO EMPTYNRM YES IMPLYDEF ATTLIST NO DOCTYPE NO ELEMENT NO ENTITY NO NOTATION NO LINK SIMPLE NO IMPLICIT NO EXPLICIT NO OTHER CONCUR NO SUBDOC NO FORMAL NO URN NO KEEPRSRE YES VALIDITY TYPE ENTITIES REF ANY INTEGRAL YES APPINFO NONE SEEALSO "ISO 8879:1986//NOTATION Extensible Markup Language (XML) 1.0//EN" > yaz-5.28.0/doc/common/id.man.xsl0000644000175000017500000000031313250277666013300 00000000000000 yaz-5.28.0/doc/common/common.ent0000644000175000017500000002637113526305414013403 00000000000000 Anders Sønderberg"> Adam Dickmeiss"> Heikki Levanto"> Marc Cromme"> Mike Taylor"> Sebastian Hammer"> Index Data ApS"> Metaproxy"> YAZ"> YazPP"> Yazproxy"> Zebra"> Zebra 1.3"> Zebra 2.0"> ANSI"> API"> APT"> BIB-1"> CQL"> DOM"> Explain"> EXSLT"> GET"> GRS-1"> IDXPATH"> MARC"> MARCXML"> MARC21"> OAI"> PHP"> POST"> PQF"> PQN"> REST"> RPN"> SGML"> SOAP"> SRU"> SRW"> SUTRS"> USMARC"> XML"> XPATH"> XSLT"> Z39.50"> ZOOM"> ZeeReX"> ZOOM.NET"> yaz-5.28.0/doc/common/stripref.xsl0000644000175000017500000000047213250277666013776 00000000000000 Generated by stripref.xsl . Do not edit yaz-5.28.0/doc/common/id.htmlhelp.xsl0000644000175000017500000000124613250277666014350 00000000000000 0 1 1 3 3 1 yaz-5.28.0/doc/common/Makefile.am0000644000175000017500000000044613250277666013445 00000000000000commondir=$(datadir)/doc/$(PACKAGE)$(PACKAGE_SUFFIX)/common common_DATA = style1.css id.png SUPPORTFILES = \ xml.dcl \ common.ent \ id.eps \ ref2dbinc.xsl \ stripref.xsl \ print.dsl.in \ id.htmlhelp.xsl \ id.man.xsl \ id.tkl.xsl EXTRA_DIST = $(SUPPORTFILES) $(common_DATA) README yaz-5.28.0/doc/common/ref2dbinc.xsl0000644000175000017500000000141113250277666013770 00000000000000 Generated by stripref.xsl . Do not edit
<xsl:value-of select="refmeta/refentrytitle"/>
yaz-5.28.0/doc/common/id.png0000644000175000017500000006147313250277666012522 00000000000000‰PNG  IHDRxð+´sRGB®Îé pHYsgŸÒRtIMEÙ±Þ— IDATxÚì½i°l[RöeæZ{ïª:ÓÞ½ož»ûu7tÓØÉ2 a…ÀÈÈÈV ÛüÃ’-ý1G¶C¿›PØa›  ‡$!,‹ Œ›¦^7Ý@Oožî}÷Ý{Ï=S {¯µ2Ó?Ö®sê¯qóóùUœ¨S§Î®ª]¹ÖÊÌõ}_æ&wÇÿç›#+ÅÎj xîEüÄ÷O~÷SÏéÊÒ@ƇÀ+¹h¿½Ó¹ößý=ßþ_þWß1™!F ÊJЛk ¾5~ áw£¯ÓÐèW2 “Ÿú_¾ú·þöy±ó—½uý*c0¦jèè`' s7 †´¿5Ù¯ÞjÛægþÁßûÞï},´ ¤€žw!Ÿz×У¡³bò‹ÿÇ õ¯þ- h!-©¾žÑÑÁ§/ ‰-ëQÓuaµÚoÚü ¿ð?÷_|î‘{‚¹¼c Í_ÿñq1ÇOþ÷ÿãöì"Ðu[(tLMà.p¤ ƒ4A"‡È!25"1ëââùG'íÎju²3»$<ýß~æçníC˜¡(†¼ ü§6ôñqŸ>ûìÁ#@ýw¿3¿;£ÿ„¹¶Ô]ïï|ûŒöÍ)웯w~wFoZ•¿Ö¿ª­ý4²…õ|ç»bææx8Þ †o·NmGgœ^ÏeÀ힉[ {v–h¬§w }›•iÃ-ÐúÉu¾Qÿ;Zá¶1©íN—Cëqr¼ƒo_Ÿ¡É«e Pr#¸8œ °o ÀÝœŒÜn_Êã`¶f@Aïd[ýÁÇÐZ hà#ì&@Cè€\ ði™‚8Ôá˜Z!Ϥ…B07‚ÅÆŒû]CêH)1¼d¬šš·›±Uƒ(P@Êq¢+K ÙÝ>çf†ùÖ´mš¢XBÁÝgÁ;5›þú íÄnæ š†s·í( ep6NNƒÑ`<€2À^ÐÆs 9:¹¦X6¼5_§4lmmÙ)ÐAìöÎ …Š`Ø÷xôÉ=n\².Ë!Ð`PÀaYÍüÌ0ru"ä´C^2šé}ð¾ïo|6i/]¼Ð4PŠ… wsâw7,€v‰øÎïùæ¡\L °:wqv°ƒÄ êm Sa  ËãåóÕ¾3ôþ»þ܃qÁf5Z AÞõÑg·Ù ÿéßü÷?t_hàæÁÍ€ òŠÕœA aìœËÂl^ü á2ëZÇ<—ƒ‡<÷Ã?ü׺ Üဈpè]Picg²XâÏþ™'~ögzÖÉlº½µ½‡²„&h)´¸«{ ÈÀóç™ižì­¦]8®}è#ÿʯþ܇¾i‚9ˆÀLx'¹fÆ_9»F©~úï?û‡ôÜÍý[ïÃä äx;óƒÃ·vwwc "ýÞ¿ôÝßû}Ï8 '‹²»¸3Ãaêè]C0©½‡9àëMÆ){M ?Êüv¤ƒÖG2Õ?ílmùí›ùÿŸgkÓdñm†€(Du³Ñ§›ôÛ¸ -½£Y¬?•¡Þ®ç5þ¼‰ZÜfJ!¯ðs5ä)Ëå·ÛœÖÏ󻆾ÃU3PÖÞo(h ݹÀ‚1tÃÊw ›·wðìþú Mëí5$ 8uʣʀÇp@xC±Áw‚ãýæ0¼3mý§˜ÑÕ åN?Ko“ zMÜgÁŽÏLy ¥ž-‘w]Ns M€ Øm{9Â:wf§H§x¿‡{ä‰wŒÇ;ÝM CßËcà° 6ƒñš§Ñ©½FN– à ÷}^Dϯ'µAÒ6ÇÂ^S ôµiÊOƒ4ï¨*Eɧ/Òõ‡óøF¬Fé♤n_÷ºf¿C¬8 i1 \ B€šéÛá³ïF¨©ßñn·²´<Ð:*úY®í0»B”ŒÐÀ‰r‹; F#Òzúu.;6â@ì•o'7ÃìŒéqWí0ȫà €¢¹1z˜˜ÀÙ ê`d‚,€8œ×¼‘ãõ9ªÁ t¾¦þïih¡”Ä¡•@N©s€\˜œœêãñtǹ\…d8•T/QMOº¶•Ôñ†»‘ PæXG+ĺ*\] Quët‘ÇLqƒóÒfcJY¡,­§3Bkf’G- Ø+ƒIÄ@€(Œu@Rß?–õ”©ìÄYxqAV6&f˜©®‰JVóö{rO¨babÜ ­gG0#Ü>_˜Áw8Ô;×õøwñ1òzªÙè”È™‰@›y.¤‘|Ð:ÜkcÂX7E§câ€mø‡SÓЩò»Îø4<(ãŽ-.Öþ…YÓú›!Î㌦²Nwã½¾´ÈZ¢XO#ek"ÿ‰ÐÒ™Iýk·¹¯æ»"€ŽÙ‹ŠÁ ´wù9¾#Ô ÷Ú‚å̾¶áOÏ| [Gm6Ô2>£° ¯ÍâÆÇÕcÒ†ë§ÃÆ(@Ïh7޼W0$Y¬Ðµ÷#f0ÃÛ¦ v½ ì´^°›{ÅÑÐr8Á«‚РÀ3zƒæp9œ!§‹ïš^¾ahŒöl i#Š®Ï×hã_õµuðx#Eõ—„ʯ-[)[;ÁÊ:AtNG?ãà{ú'~âWŸýýϹ3œ‰H$º“™‘WÏ\œŒŽ@ÖeP9=+'Àeý5mýÍÎõ$ *5’W²TJvî>þo}èáox É2sRÊf94M.0;¼ ùí»Fe&ëH×ÁGPˆ¯%O•i·oM0'(Nb @Jp²×)"†àF•ÆÈ<~®={²Ý¸¼º(|þsoý³_yV 3S%fæ %3Z£ÂÈFÊ0Cd› $PÕ16£1?­§ <ÌÀ@Èábd`Es‚Kýò¡ö#Oɪ—3 ©_ˆ…,1Ln¼öîgªÂ,ÕúŽÂ‚S£àÆXFC›Â2ÃàF¶^a À` eq%ed°ÄYÍŠÀÈ‚#*‚û¸þª¿ªy­£UPê(v´e<™zÀÛd¼£©!žÅØÚ»!Ä-+ì ^1 €±G`ˆ€Â30TçOÎÕ ëÐWç{]I‘<0"P Ü×a]Aáç¶[üV™{c¡…‹/µ¯Su!lú(Ó»‹‘²÷ÊhŠã°NJ¬H)ìÊvšà‘3;ŒÆ7 ÊÀ}`Ä¡„!ÀÉZµ` 5€ì¥ñž€¶€,£eƒb‹AŽz&b÷ΤƒºC‚R1Ãk eÇd–l–‰Xœ‹BD¸yŒï^׳¸ûe@"vew$ _ÞÄÝb쬞瓞섆lê—ÇÐH}ò·~ÛÇ¿ÿ¾#§“_þÅ_ûÌ'¯8„Ð: (ƒð0 8RñØ“ýÈò׺Žoüæoüîoýúo϶wÿÒ÷ýÅ?óíÿêW^øéÿ饹9!›ÁrÐ!hš¸·&±ÐÍÖc{÷íðtu2o§“›áÖ›7Žû¸Ý…fÚ«¦`€,Ä\ŒŒœƒ4‘ÎñÎùÉìéG#œŒ´Àê¹kÏïÌsô'.RÜÜCãa—\sÔ Wyüþ§ãs_øò¯ïðv×MÓý»ç÷yü­Å­«ýQD”ÅÆd‰„ÅЖêO°Ö±‹æƒ—»zõêÕ”&¾Ç†%Œq¬ÞûÙÄÜ[>óþ§ÿÆ´¾ð…/~ú“/5³U€4ò)0Mƒ™Wyé—~îŸÜXôd‚!ƒ î¤EJ‰¦*´ç?Äïx¾½œaöÄŧö/~eÿ…—o¼iÙÃ,ªYaÀM‚•*U(N…B”K{—Â#K† „Ð…­ C1‡Iˆ­»©ZKaÖÌ–É Ø%4¼õ$·Gí·¯¿b»Ûó7>ò4creØ‚dLnbìµèÌXªgÈ.,Qd&Ó§ñdß.¯·$¸‰ÛXV›÷.ð‰båÙÙ@0"Ã]‘0 ƒ¼êB©¨u+‚±¥”a ,» ´ 6ø¶oýÀG?òÄoÿ?Ÿ™NÕ „E E- &`q ˜ee_ ¶ÜΦ¿ü⯠Ë~ø‘‡žÚ~êñ ï;ârcu´$/ÄIL+Øâ,n¢±€^sIÅè->yáކy’Ôwùļ;)^4i %0ÑÀ‰T°5›ÍSþÒ•—{h÷™Ù^Ø>Þß¿ñ¾ïA\úíùçß¼u.ÎTG` î„}]™S'¤:(›»oaM¬8„Åüžt>¿Ö^‹ÁˆAŒ(ÙWÇë€ÇÌá%Ú7”O>.?ôüåV iAˆˆÂh Ubl"H,Ã@|a›Ø;ü•+/¿0¼ö¶·Ê0ˆ»¸‰Ì̩(›²5QˆÀ¢_-ûÕ¼_õšÏÉsï9£xqòBÂ@JÁéxµøÒÍ×nâäãßû¡ ?=yèåáÕ—Þx­ÛΗ‹cÍÌÉŒàä^Q¬ HZ4‚Õ´2DŒQøî{‚t ¬f‡„DÐâè‹.8 ià¾p¬b“×uàQó¦£Y@£)›‚ Ïþþ§ø¿üÏ<ñÌÉ~/†€vµ€c’ ÆYhî…J­ÚÈe~ý-?Âù¨\?x“‘/‡½-ø´¤YIÓ’§%OJn-·šÅó"$̇€rÝ{î»ü±ÇŸúØcO¼ÿâ¥û$JßsêYœ[h£¹)Ú˜†,ÁrÜiÞ;7}G¿{ü‡Ï`ï;/¾7aþå+ÏaJ“VmEœ•“rrNÆÉi|`œ!…¢ æè… (ƒmtªwýðXÞCv;âbÄÊ0³’3RÀÂLdU¥OÈZöˆs”•ºFoRòþ/~ý÷?ûâÖ~ìÇþóÝ-q9Ú&¶1*z0AZ≹ 9gM 3'C8wá¼™‘ÃÃÄ4CGnäFîâÆnÁ-ØøÃ̱ ÌpOtßîKN.D'6ml„x†>/!à ‹Å‚Ó¦2_ö‹“åÜ‘fh®] !0ó­ýýsۻêg¸“+»±™òX}Sòs"MLpv5MÁï"ç «0ÁÝÝAÑÕàpg3$w‰m‹Ršbd†•À:Á”0c´F}Á‰H›áÜuÈF_yîÊÏþܯ*áûÿÊ'ž~¦°ä°Zæk-+€g™J; ``ÛͲg3=J{“Ý“9Ê aY’H¡PZ1 6  3'.d×qý‹¯é7¿úÉϼüù×÷÷ 5fðÖ ØÐ…¨Ãà ³f' ¦•ˆ¨?„É'îïüE}ó½»ÏÜ7ݳy¾´{yukµ-31"˜”` œ@p‰.‘ÛÅ0í¢€§Ô‘É™_Ýøa–î(b¢8¤Ò·±ëÚY°š£kv»¸•´b'3x†eXB2,€>ëwVhĶþå¯}êù¯”Ðàñ'àN)÷­„b+,!MäVРXN'¹,³&¦wÐH¯»ÍìáËø¦ÝR✉¹0)±;± Ç>•!gn±üdX-†!eu«¾Ý„Ð5M˱_ö«!u;[«œæóùSx ~æä>ûÆó·püäÅ'Îmïï4±Uu÷¨gT¯i–yR)…b4p&·âV§±òöÖœPhM®IKrÏny£æ’ú¡ŽHIªÙÚÐjÐK  L$…¥Æˆ|Ö5R€„aÊç^üÊ«¿úK¿‘ØÛÛs iÎkn ˜Î`î® â\œ[’+réW“¶Úö¡Ë—éîÑ¿õÖ["âe¡0’`YÐÌ&`¯c_à`âJ8ñB7 ªñšÜݵ¢¶m{öJa<úè£ïíž¾†·^¾yõÊbÿK‡/u˜>óÐû¶§³0íW¿+Sfw'ò¦¦ì@o/† MÓHìŒ[¶€ˆ`."}^dÃÔ!}I v!îÉK|ay² `¹@û"îÿþÞÏß÷ÿ…'߇Հ“c´ínÖ#…! n0°zPBH!âø£|LG)ˆ*ìÕþµkû×e§³†o£ÍœŒó~Œgm#[Ø}Ï…gôí+¸º\–ż7‡"µRO54Ñ£/Ó*v“KÍòçÞø£^”¶ÛWn\i÷¦»¸¼}~÷Æþ5jV›‰ŒÂ×q¾:À"‘Aoá`ÐÄÊo‹Í‡”I‹C]Ý׈«SFkH¿òþæ«WßДþð Ï4„© µÇD0„­…Ë´¹0O·>ùé/ýÐôÓªþ©O~Þå¡×oÿ‡?üß>ôèÞª`q¢7n,M‹8È,€ƒÔX3奧7ß*ÄÇœú’”²Z,—˹lµ³½­ƒaÉ6TNF Á7 ƒJ²WŽß¸ÙÜ´âTÈ»¸ìÅrE·Ýˆ8†\4õe6Ý‚€½†«WN^Yت˜NÚ.‹}õÚ+“ûOöûãe^mµÓ;Êj020Š„èðãÅñ+xm¹Z([6ópo['[#ç4Ò9V«ªh®\ßý_ürÌB{¾(¡¤‘UàÊ䨉M èŠù?ýÇÿšT “Ø\üO1<›sQ„I(€ Œl À•ÈÁ^Hýp9_Þ¼:Le>,Z â”–‹B3›œ ‹Z>.>òTlˆ%$æàä7Nn*¢4Ì\ȇc[Y ]ôyð’c$Ì,yH^TKRò«G×ÓÁâòÎNe¾Zì̶ŽòòÕ×ãÎd2iSî­÷ßkñÛœš 9€UY^=( +B};ÅDHX‚V¤‚êA,-ჱ#0œa¹ØÅ1mF(žÊèÍ XÔâÍQÙVGY·BØV/ cPKÎ! (™‘¹š¨]èÕ^JKDI$t,¢ä‹~»¶Æ%ÄHÁ wOšX ’+‰yg+$!ÎLDª9ÄVš )¹šw¦°;9Ñ~gÒYòžri©(B@CayÒS”‘‘[#ãNîav7¥OYˆ\äkô >¶¯FáF¸q ˜EÌ,ª­`Ù˜š@Óbš‘”+¼ÒÚ ú›¥\–>å­¤i˜ß’­KšVÈvO³©’W戃)u¡É% CADD$Nœ”œ¨ˆ“³ÇVJ?”’"KÖ""¡mœÎªÆk8"‚8†œ„yÊÈÁªÅ¡‹¦CJ}ÝÈ5MÃD}Ÿ<˜gÕ­í•–å°Úšn÷'‹cÓÉv7ï{‰¼µ=],—ƒ{Ó6nzÊÃݦd.9Qlµì'ÓÛɭ·üíÇÿ÷€©%iK&QÝ™¸€ ;& €T$^$™·òlÇ.ýƒŸø¥ÏýÃÏAΧR±‘=;a‹€Xb J©Š/wƒ÷%E„œ—p'g/®Ô6æœ#I°âCj@¼¦ŒÍ´ ù”oÓõ$¯,¢r”lª®# (0‚{&f&TC—Rˆƒ2ëd‘ršˆxß·QŒ°@â–ÍM–ýŒ8”6H“Ê”úºîFDVJ²wûFñ]†¾&Ï]ko0E’®08Dƒ*2q9›,L^˜²`pWxÛЮiZÄ› h"HÁ.ÈUÛ±F°6eÑVaZr!¯Uù¬4VdUšj3—:}`§”Ç„µÀé´¸Üïd”k¡ØZlL0B´Qåëieƒ¡öka%K›Ü?;2¯u-ÝwÝÎ4:þyoC Å“‘[va¨ÁƒSœ)Âj×?c@Ù]äTL,Á àFTšÌi€góÂÀ”¼nô®t&]¯ º ¬™„‘ýVÚ`Ó7V®Ü“k¯Úœµ­yãe|ª#Yÿ§þ%kÖ‘…Íâp@ ¶~Ÿõb ÊÎì¸Þs³Sšøm}´ eÌ%š ±E‰¨¦)@,N WKÌØë¶§NßZü 3+ZÄAk-V¥œn×S;Ó=h€èš·>5­÷ !£S+ûm\øéýÚÜ·Á’§d¸2UN1ø:Õª(seÄ‹œ}¨ÝKÐâ#T;ÿ¨½Ñ{,‚M‘cÇ¥#xt²à`°Âën2ÂZXK(ŒØZ76b±€BTY AjÞ†fýå8;»£Š¦NÕ½f¾FÄÁëDÂ0åõú¥MʊשUe:6㺌èt®Í=ÎD´.Æ8U˜È‚D\&öJŒ‘#9œQ˜*ËF¾Vx¬O #Þì`G­p·{ª/ïœÑÚŠFƒV""%cR7Ø•Ac>鯿¢€ƒ‰¥î&!(ŠÇu£5¦Ú¬êÒnçýÈA0v9¡¨fÊwöMÙОÊn›¹›‚¿«QUBc\æÌtF¨ãv_ïóQ©÷vï¶yþ§Ç3ùÛ²‡hª2ÈÆÏa'ÐYPeÄ0#Í …—DÉP\$$F!!¹6ux£IØÐY‰Än·Ù¨ñE!Pt‚”}œ}õÛ­9ÿê%«Ç¨TKTðF²Û#/ÆÖ|*—b‡2avD3qDß¼¢ô9ÊØ´ÌO]Æéú0Å ´n!¿ÛKÝ!Û…»×Ö•Npsªj´èdp'ÏÁÐ$(àÁ+ª SdõÕ-k¥ZõX¼Eæ0r¸‡µ¯ÿ NpΠ,>o·³õ|áÓv5 8Ö3ÚFì4æºäg…äÊJ£*•¬ú2€ÝŒ@Ž"€›Ä=ؘ„ؽ8¨Í9«<¶å 6ŒÂ(q>] d 6¿k‘± Yà„¤¸I AU‰:÷)hË¢¨õ1wœSœ¬Â–SŒƒ[P0˜AÑÑ®Ð%t ›ŽŠP+±Ç*cÑP„2TC3…+B n‹‹JÏ’ƒÉÉ$‹à}Ë=SH‘¨º:)qý©VG«ˆÆÒvK³ÂÞkj(úà$—à²rIl½PæàFž]¬Ù‚f±hÖªE³AƒØ îbÜ’ˆ65 ” ­"¤<éš¹”ë'ÄMV2y)%P„‘“°zöˆ½j–%¨Q©È+¶¹±")3/RðF ì&õëŽôy¨̸5ú„›¬Ú&9‹,†I¶ ¿xùá²:hºm“-r'ccr!F ’ÉBF4‰& ‘q}ldÅkÿž†U›Ö¸³ØPìâÄsA2¬UÊÈj9LDBhê¬g·ZÊêdˆq^ RÈ“•¤Ù´"žTLì,Ïѵd‰Sí¹gÛžl§“UK1PH}ªd“#Àà®f¡Æß*qû·¶&3™ö‹Cn95ÁÔ.Ѭ-qe‹Ìy£öÆÜNÚ!ÍË©9S¦eB²:>^lµÓù°¼ùÖkÍì¾Ü¯`yTéùZÜíND­Ñ–uS¶&RYÙ`ÅÐ2™+i"ùÆÆ$v{ØVÅõýÃvk2 H‹a›ÚFx&È­€¡kq«-†ÖúX‰ Ô©lw;ûÃb¡\sTwµµòÞ×WWÓÉ@s'u ì#„³âƒªYus0yJÞA.†ß½þ…iØBû?à“á•£—, IDATWÁàwˆùLÓÌŸyÿCÿñX㇕0,Ð4€c9ÿ·ÿÑ?ü­¿ûwòdÙ›AÍórd‹ÑÖJwsB=ƒÇ ùN° —’i¯©Vbܵ‰1S%å~ Ì]¼øÒsztüäå‡>€÷yû…+ó›Ùµnw$6­—Í:;2°;Âåvï)ÌÈÙÝKP÷Žì EÕ%’)bÁüqÜÿêÖ•ý7¯t±á”/6{ló¿ÿÌ?û®ïøáæ}Ï<Á G†+HÇò„µ0°nnA)D=Ë‚mÉVºv§IªnÆ*@±ŽQ,íÔÛöN¾rðÜþ¯=òßöžoÙÁÞï½öÇ/ͯ­hÛ˜LÕÃf¬JÒŽ¯ÞºvýðÍGèþ§»'ÿàÊç:`º-%ÌW)£ Ì·ë ‘3œ‘5‚XYBDä®`ÒµÖ¿.ú Ü*åc‚ß\_ö¿içf™ÛÂS´€i.D5$øÈŸùZ]ƒ‡±.ïÀ·–ó—ñÚǦœ¹ ‰ö6 ‰ˆŒ“Žé¥$C‰RJóùŽ®ëš¦<ç ©§1v aff®§åð¦;´}ç·±ÍÌ"b÷¨¨wƒ¥”cιë:U=°)¥@¬ª)%!jÛ–™K)ªo{‚Bë¨÷}of1F5K‚̈†F!ëŽ`†û†þà¹/­°úÀÓïÅP×s®çÆÌ1F3 RÓ;re8;ªÈÄêÓøåן?ÿÈî3ïyzž—“öœ×]çi5÷Gm7mšF­"8)a nÒ~øCp|´º~ã&S¬Ç¤YoïBàW^ûì+|+ô«=ñ²r3™æ~AÎcJ‹šŒÀ;»SOf'ÃÃ?ùhûÄþòè8®¾ù‰¿qãxÑïSôÐ…¡_r;‰F¾m¨È6e7Q#ž(HpÖ”]¹¨êVÐÀfXWò2sBYŠë,-ôƒ H»7 i5äv‚UòìÇ÷]Šøð?õ¿þÔåËpÇW¾zå«_yykk ôi,›÷ÖW?õâï¤Ü÷¾Ë´Y†ʪo¨é…œá›…S&î@Yq^"±Á’ Aꮚ2ÃmAWÆò‹$( ¤°!ê"æ/¾ùÂ!–÷?ö@[w‘Âê&bfîî„À6â,Z)/¸±Õ ¤–öûã°_¸öÒÞóGðÄx]ÙØ¡µÖj$' z@c˜–ýÍÿìGð¯ühÛàÂÅ•×ñßü×?©ÎÇ'‡Mœ%ê¨z£Z­6ø4ÚÞ…YÃÝjê^LYB±tJ²8ay¹¤óÝì›/ô2.?{ô×í9=»øÜ‡gyâòƒÃõåæBŒu"f.nêÆÎa3U]t&[D=A*LÞ`znzpóèÅþsÝà ~Z`z†xÖ²Þé´,ª“’&ì^À¤Eßã—á•ÿ±ÿbÙ{-zLy!»3õkÞBÔT¿¡„¹8¹ûñK8Æê«xéÕ¯ŸÆÙ¤C?k¬ú÷vÒM±µÃ篿Öî´ñK×^¸øÔ¥-éöövGsg5ײ»µ7¤ÅFE¡óØÍËFßÄÑÔÑúb®ˆkrG NfÌJeˆlŽpšíf²×¾zôÖ¸¹Ù‰/IØL‰"ƒ‘ÂiH+ˆ0SùW×~¯ 4”Õñ±ºçço¾ößjf[ް.â»-2•åaú+¿ò[_øüúÖdg²êspõý~>yv.Ì^Ĺês@lã·rÊlÿòÆïte¿ä&ri©DÛ[»K/®ùÔ¡C Giõ¹ùVËÔ‡ìçiÙNå3×>îüîA´,)ve(­ÌNfäõzÁ(o¼5¿h«c¯Åö@ààfmí5 c‰/`Ê\Ø®^_ÙïÝ@^ Kk²Pþµ¯þß=pùRq38T•Ü& $«ãBAcžØD‡ «ÕâÅó{;D¦“Æœ¯Ý:œˆG8¡J9ÆË%(Èh2ñAo‹?¾Q2nŽ0A)m{.¢› Ü„¶›¿)çîW?˜Ø7.tüå~¿mBAi,¶¥I–0˜Qš9AÖÕ–8¶K·ç篗¡\?L©…†œW©_!ŒÕ†ëÚiƒo '7Râ g§ CTÆ"º¢Ö‚Q+Ìâ~ìmØšµê.l/Þºuuq«'ƒŒ¸Fm=%"E5€¨ïŒõ7' [Ý<õ±COúå¤Û:wéüáÁbä0ªvÇx9È;/Õæ¸)Wª¨Åø£x§ê&wС§…ÚãÑHZ9Ÿª$èöÀ»n44žÁ™Îâô8òÊ`õ"•s£mK:@ækÙͺl}ÝÎh-%P"1°¡Ëu;ÆpB’‘g¯ŽÁ°æïÚyÞÙp¤2c£‚b\°Ææð57F%Â=úüœ¶ªDøØÆGj> `Fím%8éúÁë$y%Y6¹×5aXçãiòsJæn63¹­èÌad#›N&ë‹ôÜñBÚàúhCµc>J“·Iú+W™dœGööý>CáZsFM™ÃÈxÌš]!^‹uéí¥ÖõªAÕËŒm$ ¯ßºqŒjS/!‚qOÅk7õñH6{í#åvÚGȹÊVlÔk8sfª +ß!:X3Ògàªøiƒ­Ñ¼§öº cZÛ½&6QI×ìx’Ѳ…aã)„,È@f0 E»çŒö*êJm2ìp‡¸ÛÚãÒ8‡ìîºÄ·AÕ±„â°^ŸÍ»mÔf:îëMv-îe÷Ó6oä›=YÈ*|çg»MKÕ&`}­4³…S^ÝGmmVñÛZãTF¿Jd`¨Ø¿VÐÈ ÑѽÔï¤|ç•iî4ô4cša‚¢ 3!)¢£%(Û'ÿ“:ÿ¬/TŸTð0¨ŽmxéTy±ÖÙX £JHªT@Ê>6¦²õ|dØ ÓiŒ­w6£ xÏmmÄê‘õ6Í8¨ì·Iù´v1€ñ¦bäTÂŽ˜)Ľ¼2©,ÌÛ´e,sÕù¬†>„&±¦3& €UÇçªêîfV 3kˆ”"e6fR’ád9›ÍB Á³;†e‘ŒÀ¹ýÚm§r´þÍŒŠ5Þôý-B?è¢SŠ1÷²²å„÷V©’sF7ƒ/¬$-·6éZfh¶\òD¶-3±oM&ðCÓ4âºq[]ç´)ï,Å„xÖti1,'¤mbñ³¶g§i;’û!5MÓ¶lÚ˜•Žc¯Î!ó%é2µ»Ñ˜=€¬ÜÖŠ`Äì˜5Sv.É‚pŸMÝÈ&a¯TQE¢E¤®¹°­´Lž)Ö(쑨µpŽgñ„W'±a{ZL©¨‘ÓmÅg%¸ÝÎ}ýñõ T²€ÓlÒ-W7<çØÜ¿#[«@ ¢Ãx…¶%ˆ™Ã$÷žsÖ‚N&¤ê)u³N‡Dª³¶+jê™}뤺Z`1ãYב„ì5ÈZ¹¾@ €íéäx¹š÷ƒ7–i‚V’¥Rš­ÜQž5m³3[¦U¡ä͆ýÔ³Gå¶·NiµXJÛ bhc AVei̵ܳª‚* îŸÃ–8ixΜ˜ÆÛ%|ÏÃßü(.øé9\éÖÕÒa>YøpWdeýñ!bCy¸xßö‹¯ý<''h:„y…ç>oÿó} ²âÍt+EÇâjÎÞÐv Ú&>òàÄ3/¦Ïíï;ÙÉj~þÁGoŸz¯]=ººÌ«2?ÝF«£ë&>OË“ùNœ~üòǾðú…F1]è:L‹ÃyœtMŒpÞ[ßúà7=€ '˜ÿ«7þ Òîlû‘K—£ËÏÞøBï«”{ DîU÷_­Ü(¶Þ7½ü¯ï}Ãm@8F>ÀÉ o¾ôÜ /54«hDL•ç¯õÌ#LIŽè MáF¹…LÑ,pôêÁ‹7Wo݇Ýãü'>qù›ÁÅO¯0;VüUö»yhÖ\n{‹ް\aH`2+fiyˆå ¦mÁÝ-—~ÑÞ:xsÿÚU¼ñ¡æ™óÖ¬®t%<ÖÞß‚‹ãÕ|U C§{Ô­ÃÕ"B4ÙÆd“bLÎt[Àæ(q •FýñÈÛˆ—pþÒÖyQ¢^gÔ>€ rpŽÒT%6bb\Û‘Åä{˜ 8~yÿ…«G¯î`òÑ>øû³-‰™•Rª‰+£""áÊ.]ï½¶•dyTb šÿ·²7µ,»Îû¾µÖÞg¸÷¾±Æ®žçæÐÔ$E‘VhG¢&;4dYŽÉ14À`eÁ‘(q,8‘dv"ØŽ-;r€0¶$ÃN+‰)Š¢„ÑTìf³«YÝ]óðÆ;aï½VþØç¾÷ªYEÈ…F£Ð¨®÷Þ¾çì½×Zß÷ûÞm¯½~íbp]?öÀƒ=ùÑGžýÝÝ—ñõWÚ<£aZöûEñ 8DÅßÿ{¿òá`:5.ÎÇùxÚ(PPQ[ßñ¤ÔtÖš- óñº¯j ñöõ;í g>óÜÙÇiO=tî¶¾Ò¼5ß›z'É,ÝG~£xTV© sÌz„’½ZŠÙ„b'[#p ¾í:ÑíÉæ¸Ä(£~¡On>:].g»ûÖW›´ª¢®*Ä q(޲tzáh ~içêå+W[¦óæç6NŸ-ίmmÏ–·û¾ÏÇ`>ðhØJ BnRXN|:·~3-ß¼z%¢}Ü?$w5ò 8Ѻ.*·µ˜MIÀŒ²BÛÌSìv÷vövï(¼¯¬ŸÕD÷÷‚ˆˆ—û®_¨¦„~ÙÌ߸óÚþñ<þ‡ê³s,®\» 8]Qî œ 'Z!N@±OH´Žõ1F±wucVéJHFEY\h—(¢D5Åô¥w^:sç7ÏŒ”7¨¨@#)U5f¼Áªu''.é\ø%â;»ÖlUoܺxûà¶«íq1r&82hBJɦ¥1„{h"Kï(ÂÆÐ3\õl;ºt§G˹^;¸þͧDÄ‘‹JŸŒhiÔ‚&ˆ1ÁÕ•eáô÷ý©ïùžïüîd%’|ñÿºüÃ?öõ©­×·šé"p>D3ª¤XKmTsL~ìòáÞùÚóÛO]ÇÎk—_Y ™&c%zÑÊÌ’ "6uâ´·Ò•‚W§ºb´£{G"(É¥E;*Ç úkw–Sgï|lôüaw±8l'•ëgKÞs¬)N¬ \'K4˜!ts{1m«²\«oÞ¾s7ÏáìÛÍ¥‘«LѦP”EÓ…²®¸ÈâuµÕNŒ 5àº@ò-†Ô™Z¤vLïÍp¢¢|€1»Aˆ“Qí}9™H쳟’ }3½SÖ0Á9céBÛu®šùu]è‰í§÷0u¨Æã13×ãœä³ˆWË# ‰%]¤Ž™H"(œ÷ù²a|2¹<¿}Ú„I  ±¢•¿µsg‰ùóϼ¯3´¬<;ic0°‚óÍVwJQ”$}«!ê…6G£ $r:Hn5Tá Æj`•¡ìåhð€"Á¬êh”ô”+KÃÓ“­²?¬msŸšPÐGùÙŸùùÿê¯þmȤ’3…žQŒêz³éS»Œ)%Pß{q¡÷]šðöûÞ÷±€ôû7ß|ìüOžztgq{o>·1÷ÐÄ(ÓÐ#Ž<ÈØ˜Yƒ*‰ =zu©S¦û)ª,*1ÐÅ®C ­…°8¼væÖû6Ù^m‘zM!%¹¨FPQäö ‹‘S.•+ÐzòûMwö·Š-”W°É’æ% £ $ö ‰F«4ÒÜNÐÈ|tïpÔ§ÇÏ_Ø^;½ƒƒDv$•¯×`øz\`”ÈP8:{执žüÀSO>ûð£­m¬3¹¦Y‚ˆ¨ÆÊì˜`˜QQT§OŸ~TùƒƒWß<¸új{ñ ¶äa!‹)e›K(Òqy€bVF¤<ô༷޳;, b!EÒ” µœZJïÞººDØZ?­ ¡ mQJHÄ—èˆÈlÚhHÔ–oõL½öGŸ:‹­½~/¤d«7@u˜l¸QÐB5-D좥F#ßÝÜþðO@ _mc{ŠðÚλ‘7”õ¸?­š)b¨c|ÿ÷}÷w}×w÷a\¾¨?öcÿáµÝƒØ4 Ú%Ä9Ô¤ãÐÖDÞarîÔù§ÜsïâÖ¥+ó‘¾~û³l¬’.†;˽ËéÚåÉÊ•7C]žÃ$f²£dS Ê gâQÍ“ÑYœz£Kñí;{‘DˆÉŒ’¦ÜrÆ”ò¸‚R:ŠïâÎRøú,ê€t7nïí¿µsN•Y±NDw;­PÔ2.ªÑ믃%…FÄC9G‡‹¶ ± T­UxU3cr޽©–X¾~íµÞ÷mì•[¯?wîÉ ¥NbD‡  jaa¤i» ©×dwW’|¬A³%UCê)ÞÁAƒ8ÓV N°¯Ý¾R?P8p/Z:¿Ð»Zu–ï-DѲ]Ƕ=9áîàðöüê¥+oOÇAK¢”ç fY]ææšA`g³`ÖŠýî­×G(c ç¢m[¾8µÖ Š€”2È4“„¼.S×_|÷«ÿö÷ÿhÛÍ&1I›šª\“0Ù9°6®OÏÛ; ,ÅF¤ôUc1z0?|Í]íIÀ²*öfÓo½º¶±.D^._S°!rö˜"Ì M—g×C‘ß³+ÂÌS‚“Ò»{×ʲ\j/®h¯[¾|ý<·–ôÈžK 0G\ïw®¼ØåÆdiº···Áe¹]v©£Â…ÔŒ™Á`b5sS'y2FN-P[ŠWºöÔÆæ<$ Ý„ËT"HŒf&z/’?Á4u3Ÿg/_¾nH…”!ExYLgW‚JÑÏ÷÷ÈÕ—(KµBˆ®gâ8i{ë`¶¹yaÿöþödk1ŸŽ6Æ{‡ûýöf ,F?Q^F&8,)6¤Ê²×ìõL²UvY» Ê;/}좩ffYŒ.Â&DpAI$8$‹¼Qî IÄó2$fô2ìfFȞδé‹©‚EU»>M”S ‚YAL …€d¦<Ð'5Se©&K,ùj´šb³ÒÐԞ穱µ²ê…òçÛ Áѱ‰ÌYšß¦ â0û¼ÊGÆÛ“u>X(„À€”NÉ%8qóØø’:Õ!Ï`S¶ãÉMÖ­'Fc‰ Œ$è9õ ª –bäÄAŒ4™Â@ ç²,²eg€ê”EeC”#õÝ5-4~¯;×2]xe_Íü@GqöGR`3¤0(Qd˜eXdãÈN‘ÇèJGþU‚)ƒ3áp„Á¨p2fÌ@ Íl¿MœíкòP jµ ¥D9)Æ¢XŽ>€”܉ï9¿v£H£@ÊÄ.CLÀ§ÃèI'È+°ãXêŒ:¥tŒŠT俢3(¬ð@–1è ÑÞ0„U"P„¥fÃÔnÅÓÈ’ ÊR•ÈÃÈ# Np‚Às"²E³–ãÄ¢ŸlH '«©>ŽFœ Ðñã!ºÒÄÐ1ƒ²ƒE4Q¿CA÷Nq’µì'„yôk'@ùèu:¨Õì=_`ã¤\‘V:s†9­²Mâ×…‰¨‘T¢‰1e/ ]ñJ"ÑýFà¶ÜËÊ÷%½ïÓŽ#çìîÆ”Ò]¨‚̶«™øXr¥dœcâV?«Ë™ –Å Ø=¹Æ.2'b6e5¦¬%Kdi%ÉB£*dA4f#ûÑàÙ˜à Ð,R1øã™iÎÊ‚c¨Ú‘ÄéDLððžª!È)à (ù4(²"CWy|bNyì8¼‹¢|bß8Îz/y‚ÌøÄMÕ)Ó,2å¡+3ÈŒA”ùzÔA#¬®G) |Ý`¥…5AG+1W¾¦ë@â:Yæ¯uú^G6ñRZŽ>UÎ ={/ƒö.ñJ¦–ˆux„”9^)ñ :ùJæ'ÿY6MÕNÓýbí¾.ÄãÈVä ¶#¯=ñÝ* … <fKDDÆF‰LyH­¸¯#1¡èøá"F Å dÑ8$BpF¦‰õn@/+eI9ŸØ¢âjC'„‘ìXLföæ ÕnIèGÂÊY%d3Í÷h5ÄwS¦îÖ|½æä$À¼ÚŒ‡×b%š5€GÇÏÊE:í$â,\Ê)ÛyNÖ;mܰó)•îÚ£Oìcjeͱ I…V²  èÌ‘‚4DÍó#¨’îÍ­~¦¸zƆ$ö´r¦ã[Gþ{LpÌT2î<9é!Ã>“‚za>Àé*óGñn e$ÿ·á[%gɺåØ0ß­i"ã!>Ó‘Èò¡žØVŠÕ¼ÖƒÛE¡ Ö¼•åg )'F¤¼{Ùý$sœ_ Q” “>­uVF#Cï©)dæ©"ñb ¤…8QQ/êÈÉŽ‚Z ªá X* $ï¥d7Œ IDATE™3P4] ÀŠBáa%«g-r{Ìœö¤|BAPÏÁ´‡çÀ‰‹deR†%†!ÿ„A*§Öšhôè…1 u×ý™7ò`§‘cô`‹)?nÚöÎdäkRòRXjeoDdì¹K ”÷F*ˆ…¦ÂB™’ÓÔ§(u™’‰/#C q],ºÄj–_l£UV’'‚Š©S:àêc²hJÎû¢EM)µmK'XBlyÔLq)ãµñf´ÎbðÐïµ0©Ï&d „Éöy´ýÉ”N‚RîГvÙ9Ï•çÂk ùàUb€%§B¬6%ӮªžPé£F탋ñä«À¬Œdjy㋚qá¼”U0L—ÍbÞôMï]YTu2íº.Æ^a]è‡!úPdjþ‘5ö!4m×…”¬¿UOî7«wG7Íœœ“ùRdVùBƒR€!$"~<Ö¶K#SUõÐ:‚y–š™(Çãõår™Òª\k»4o¥Ce}ïÆ§æû‹QO=¨7à¼ÿt™±àÀÒEÒÄ%3÷É„N§»:ìL\,--=DÜöÒqχÖG‡ˆ^¬˜)%"ï k{íR+ÚyQæ1•ë“ éS›ºÐ/4Šz}<6BŠIwÿÄÙ;Î<‹7Ú¨×G®`ë“¥¾oS³Gæž´Ýe MCÅU$.(±3Òˆ>%J]š·‹r½2ò,Köµ„–hUÒÂÁ‹ëâ} ¡ífeµÑµ‡õ£{Í>IKpQœ>Ûã:VÇãqµf,"¬ìC4O&NØkLN†þF:îã)‹xôT›km'±.}EÞzuòz1ÕD¥0“cR3#´]'DäD˜¤6ö}ë|4b*Ö•cÓx°?CèE„‹RI wíDIZµ¦ñ½‡æäJa-ØQ£1ò=áU¤zº5Ô`("Wm:[­}Í«•­ö7mw¦¡e™r€ãp°1k¶˜ž=?yò©³ä—7níÞ±ƒé\q볟ý£aêCzâ÷^}%r… ýí[(Í8©GìºÚºˆ÷J4tùjlDÃD#Q éŸ~ì±§ð8ÚC/áê\tÚîæÏH•Ã…·^€¢mÛ¿ûwÿ³j ]ÀÿÐ_þýß»ø=ßûÇþößüÇ„ÏþÒï½ü¢p™Ü©³׎.X–/0êA¤)8r?{Í_yyzÕæÄIŠ£tìÆ¤\ª¼ýñ åWñ΋/µ]Ú¬ª÷Ÿ~TœÛYÞYéŒXL(È4Ï’¼]Vªsaî¶7P2æ{åé+˜·ÀY·6‚[ï%0E…0#%¨¡ë@ìªZzZëå *Azãæ;Óƒ .œœùøäùÉ•—/5067·CÛ€4£4ó?œåw£\ÙÀ®-ÞýÚ|§ñ)-RïS&1ݲœ±.dXNg| —ÚÐ7ݲí—mWzŸ¥J&ê†ÐOñ´éþù/ÿÚ~÷RøSúü­¿óŸ?ð`þÑ/üoWÞy§k;ò('Çr€üQåE'-Š¢]´„¦ïÚ E•e±Jôni³ª²q@œãÐ#=0Þ^›lΗmjAÑ+•Ü)®Ê^Ų›DhàM0(‚À0gÔ]3þ‰ÿ«žqþ<¾ïÏ|ª*ñÎÛÍOÿµŸY¶©®Ï©ið;P^‚à%¨‹±UµÀ$YY–I5¥ÄÌ‘˜Þ ‡u®€ó ÄÃØ_Ù½ýLýl¿ìÖë ŠBQÏ]Òª(BÛÅ’RÅ–´O!Hu¹°ÚÑU ³Óã¿6»|“s\oMÖà bË ÅÄà#¯sU4Ñ¡;-õi+N©?Ç㺠,ôu}¥\_žè/®T—!E‡j[Ï>óþozæãO?ôÜÆÖ¶ñI–:ÑÀ]9q\ˆÇõöWß|ûŸüâo\WÂÏýÜßdv Ú5-€¨=DŽ›n©€† ™'Òöxc¼Ÿ«#hšÏç5ªhúîîí}4/<ðAÌ:h£)˜šÙ^Qó,”"¼÷ŽàkI—ž4öžnïî0âC[gšåR)²ÈNø5!ƶ f|þOèãO|ò±óOnŸ>u?c‹ñʪ8:"£sh+™B¯böêþÕ×ìúEì\ÓeSKbe€Ì­>’l›ˆÝ|O“–(w›Ý÷?ý¾Ï}î3M“éøþ?ý½Û‘+ÅÙd} háW›9 ¦ÌFvDD¹ÀÉ T–eÊ÷{ú÷ cNÛöFš¿…âüc£í20çya–T‚– ’´o»6ô}êµïâ®"qF•ó%¸`1¤®oº®•‘¦Wë½ Ž‹nìg 7íÖK³w^Á•¯è­=éï»GŸè±ádÄjb$Ðý;·¯~åk/]}÷àp/¥¸2‰0!7¹m˜ç» fÐŒHþ›¿ñ×67qãjóê+×`øìgßÿ#?òçË’bjæÓË£r‚ùš¹¼ÌçW¤(ŠºmSHËʦH‰ŽJ'ûp±,=Ð¥ÒȽsps·>öè󈪈Î9‰šRJ>Z öľôn\ø²ðà R¤ U›Ê¦ï÷.œ= ¸vêK¿XÌNÚdŽÝËЙÁMÛååë×.^þÚå«ïN§Óû)¸9ðq GNáT-ôïï%ÚN|6ÊZ—¼œ®Õ„%ÛŒKDÕ0Tügþìw|òÓ§Aø¥öÿÄÿô| þƒÿGϜݥ¬—Ý~yêìêq®†zÇ*µ2‡@E êEÁ$ÄófiLùÜ?2EYp—}—XX9NBûíü­;_[Çd}´€’jß«já|vоïÍ1 —X%™Gtè'MÜ\Ä­þÐÃO<\=xûoMo™ÓÂKb$0¯p ŸP\4ESE;SŽÎr}*ºQoî~mÒ¬ÄQ:ÂÁƒ9ï}D¬Q=ýÔ“$¬À®Mßݹv`‡šù‡–7VÂÜx}{1ßSÌþëŸùsëë¸t ¿ô?ÿú;ïÜü_ÿå~ðÏ~ò©§ðWþò_ùsñÇIÄIÝíÝÁÚ±Éj5Ü‚QŠ®ô=ûÊ/Sc¬Ü8©á$5û(Äjä‚Yãµ²Ùkµ ÛÓýKgn<‰Ç#š¬«f_¹ÐõMLªe»@g­¸ZÇú‡Ÿy__z™;Ø}éàµ4PTEµì{¥¼¯*­žhœ÷…wŠxzm›ÖÆbB?µæË·ßºÖ˜ßÓÉÕJc¬mÈi¿ÀrA½óŒ8ôè@kJh ðbzÉOêçþäÅ‹!½Õ¾ø¥×^þòþúOÿüž}!Íüdtê…~úÅ?øý¢ÚŠTí [¦Ê9"_^ÆõÝù¡÷>„EYVÐ!˜óä‰mÙ±\HgüÜ M6ïd.ñ‹7ßÔók7±×Š9çM£šÍœ&ÂzY³1bÏUÑJq³ ÌÇåÆªëØo½=»>³êÌFè‡Ó}©k»Ç¬@gÍb]ê)–§°¹…É!f‚‘Ý?‡…þ‹þó7îÜŽÎRI]êEÄ%r‘Š^(h%år¹$’&ãMç»(Jꪰuªì—þúÿñÕ_|——ä"¨a‡´(Ê¢ïPû‡bŒÁn3é¸.Öæ}n}$”K\˜}î§þÄÃß9>,n°£l„v& )ZÞŠk‹nÙN;ÝÞ©SgöçRŒ  bXÎ닱Õ,6)Òr-EI¶ˆ•• BSšú5 ]oÞ/œe‰e#†^­*JŠÀa{¦+êˆfÙ8}©ÝåÍŠ5ílcT¥”(+÷WwZݵ<7qma%I*ÝA»Ø˜Œ§Ý"­Qdýúësªb1Øh5,Q#Ó¬À!u:’üÈ÷ÖH$ aí¢°9o¨"÷DqL(ɨ7ƒ÷mC wAI?‰¹} ö` r6&Behc"õ$Á© §…›¥BS keÝ-æeÁi•I2é `¶¸&N,̪9i, ×[oFÑ3RŠä¼ÂItÉb#Bª8rìÙÔO´¯ú¨°mÙცô‘ƒ™JŽ©Éúë•䎇˜òï*ZÔ%R«Ç`-ÆÆÝË·íV&ÿãìœË8ЋFF}9òÎÐÁG»~v?ÆQšá#²^Õ ”g*Çå\¨̧œœ7ïÌ'væle‡EÖ šÈ”3xäxÞ¨^qvóÜÊ)ÚKbîaŽcM¦‰ôhò«9ÞD=çÂ}Ŧ‰té}²=i’]‘ýèëÝ~YLÒñÑ„ÚiÎ9¾_jÅ`Î\´ÕbކX&–‡ÊG¶tI°û‚‰I\åPy‘Qš%ËJZ fØ´0XP`”]oð~K.T_ê‚*ˆˆY1ƲÀ'¤m•Äd'½Þ:$,O™MÈ@èP•¡Ñ¦C¥bIr8‹2›D%d©ù‰í5w÷Né¬ÊzJ°ÁëŠÃ3ÈqDÌ «õ úÑvŸŒ§!—c{¨‚S4˜ !ôÜÃS¸¿•”!ÝPé©ÅèE;AJ¯€RôŸE‡~c¤4H¦¤°H%¯3”[1z\ÁĈÁ<ä5ÉMF"Rã0èE±Dʇ•üC‰³:ÔÀ'Âr@CV‚“£Øœ—0Eø˜äF‰†µ>®¨ï|8 $±x¼ƒè ÓpS$!Â|9 U‹µp±1¸[}a0NÐDspFá­4VÀõ(ã ;½qUôÜuqé]𥷸ÐådL+¬E–àøò~ô¯HÔå$˜ËÞ>…7cåĹim*VÀf+OÊ€Ý>«•2‹Œsp•Á× L¤Œ™°JRBõ2”"'اo°u|}wé(táHw²Š53q f}´;{æc–T×q³5•Æ( sÇ ÍŒSÏÞåÀ22²4 gž74ïÐ%1QŽMZ2¼³Ûñ4¢v—¬k•c¡«†8œZþÿÄ †Z ¬ßeõ¥IlÇ b‡¸ÉJ-ÈClžÉ1_„T³’x "«LؼÂÁâ×Qy†™!ß“b«'h6Jj†ü 3÷°¤´T´©ìžùæ3Ï}艊65$)7ƽ`ÌZ“ºŒÈ‰Ñ)È”=¤æÝ´ß#{°|\vc7TGõn¾ é1–‡‡Dt”£Ï2ÿR1*€˜ç5LJdŒ@`#N³ìã1‚1óJJ@tdUC2Ä<ÌFR¦£÷(¿ G 5…å)¡(Æ«%ìï=aɰ'¾˜C«Yb†‘ÙpLsê¢wT¸±Yj»¾¨=qÚïÈX”£q£†þ€-`…(¥Ü…‘ÄèÙR¡êTI)‚"×uˆ!ÆXÔŸX㨫o l´¢Ì0¯¸=ùÎÛ+ƒrZ"5X&Ö ƒ$&ƒpF”8§])`]f<©#²a:ˆ³ ¾Êƒ^L3• £˜á¦k Œ9ÓýåQjBDf1%bÊÌÏ’TŹzå,ALcW†ž×-!¥J$è•{°bdJÄYÂ7̙̈‘Ž‘!Š%¶˜™pÞ•ª.v* q9éöfkk)yß·] ±ª*6¤”|ábŒ™ˆ~Œä1˜ ¾ KsÖhWÖ¥†Þ£°¨¥”b¢&‰Š6†HZ—œZ«‹²‹èz-«µd¤±÷RÇÐ7Жł†jì5„˜zGãAaG‡!‚‚Åñb±¨j‰)ˆpLí¨,ÛESø{¯µ;Ñ—ZñF d<6‰8hð®ÐÀÃñhƒ<8域@Hù:F9UëøªÇfÒ¶ï< È9Ï8Fo›ÐQbGR:rÔ#©EÕØ´(Jw†Á 1ŽŒÉèøŒâ)¥¹Rpœ@AC—’*’ðåÈXºÔ{Õa$ðè8’p(bÓµžQx_x¶¾ïÚ%œl®¯·S;' éjÔƒRØØ‚uÜõMá|HS_ìÞsGÐŒ›ÍÊ>^e&Å£©¯‹  o]ŠèØÅDÑ­Ä«¼šåæÑƒËA/8*ªKbä@‘U`‹EB,Ê·)ij=Ç”lc¼®„Xó~s‡ˆFã}ß#WõrÙ’1{«[í-.„ ΗEiNèC» 5.&^*À‘I]#bãÔ·ÍÈ l¤=u½Í,ï®j¾¤Q=F§m虉ÁÃÞÎî¨ÜÐ}&ƒ¯’”‘úú>´‹¶®ëIáÖÆåt¶0c|¢ôûº'úÄÓÇ00öe¯f¾iŒë ìmaË•tquÙ%Í÷\çÌKÎñ«œÏ4S¨X+Ì‘ ˆEb2afƒ¦°ì•Öû.ö]¿6•ošÅ¢YÔã(]¿uys}Ë@šõ)–¿"‘²K–·©òÅ(ã ’ÆMMª’Èw!…>Á/}0ö\j]9Çj¤fd>8Zj3í¨¨+ñ¤…jéÚŒtxÓ™äš6ªÚ”}±Y»Q·˜¶M[~TtñÞ‹;9…öeG› ©hÛa¬mÒ&X忬[Áv²`›WDW–Äl ÆJ®¨Ê½qP¯vL ºL˜“ÑzÝl¬û:I˜pÃ#çK•´LÅÈÛØŽÉ1¤¬J&Fð“:4sßÛmú®öVšQ›–~´ltÞõsöc"D>%/ÎF!„¦m¬Oä’VVNdÃu¥D· WG‡íAÐ~¯ÙYÛ J5¿º!*RcÇk~[:¿A뱟z×,öç2½WÞ½K+°Šž ‹áÜ©s]fó¹Ázl¶l$ï„;n'ïéœ7¥•ñvÐhÆ>¥co_ÏÆ„(&dHF,¬dª*ÆÖQš»×¾xÅ-Æãº:8Ü+Ætá‰ó§ÏnwnÙ†…Jç=”³íOÙ(c ø§?ýk¸ØÀרšÿ…öï•oxÛ~I†ŽÐp²Q½†pC_ù•w¾ú?}7=äAX‰2wððüßü¸œªcÙ%í`Dêaó0©$‰ó¢æÓð[¯~éŸünîƒû¾íÃ?ú“?À›-\ï'Y«DJIÞ8üÚg6>õÄúüÌì±S*L^»ó%Â`•¼{Ã!%3VUg™®Ôæ¹[à³îXssªæBÕÝÂAF\oÔ[د1åñ¹ Ûç6ÛÑòÎí5¼~ýÅË¿½¸>÷¾6QÌbØ#Èpmãl“·ÓTæWZ¼³?ÙÀþ»—_ºùÄÖFq¾°0WflFâ ^“Ηˢ(77Ï<úè“{ߤgúG^ÿWW0~pÝ?ùØÁèÒxkmoyUJ$V6–”mÐPrJäjïu†K/ÞÂFyÍÞWv{Ìë‚»‚:HªüÑŸúåri™ŸH‰Ø:²$Ò´ŠŸàçiÙlXõìæ³¿Ó½z¥ÝW3ŸD‘/¶yÂD2@¾ 9BÎXTÄàL½’O´ˆbÁÅ( dèAdV‡ /ïØ[¿~3¤³œü¥Ÿûw·?3zà#½õò>vüÎ?ôo~ Îõ.k¢doìûÀä&åòNnöè¯þƒÿ}ñîõG?õéÃ+W`탫ßùÇ?½Ç7hdÖ9Sðˆ#)‚#FÚqרòô§>úÙ}˧¾å7ÿûÁ¹cüƒ?õo½ð½ï;t·\¡FQ%Å.MÒØ'gˆ(¹õ1XX/êÛoì|ñç¿€Åø}ßþÑÛï P·Q>ó­fv¬ J…ëB¨Gkm8eƈÁÁ˜”¢hpÔ„xíê­xó[|á<ö‰íµ+7¯/bcflšû·FJdÊÖ.9òëäEWòÊ9"URÁV$¢ÈE¡B”L#‘r)̬MÂt7Ö{ûÕåÉsöø'Î~Ó'_@ÐúËðZbSND™ÕX”DÑÏš3å™t·_¼ öŸúôÇ¿éÓß‚yœ¾5ûÚ®lÓ)i؃E¤KD(Yt][4‹j:í,ê=¸>†z:+îÌd'º…°rb"WU£‘sÞ,Ƹl›>ÆBFýn¸úÊ ô#Þ<ÿCß÷ýhvè­/Ý8¼¹ð(44ZŒQU˲äžR¤\Š3bƒØ°µ¾Ñ.–7nÞ iwwWíöh-¦Ù}ñ‡øe¤zìMË}"*¸pæHã–Kóã²Â¤jm²™’ŽÆüôÆ8Bgû³CÒR´v©s¢pšJíF½nÇz»]û½ñEÜPœ}ú‰Çß÷üG¾Õ»Y¼ñ[W6Û ÕrÝGqF̙䲞ŒØ\&÷—=¼÷…ó…Ž=”b»¥öm˜7ûËjRVUUiQ-Æ›‡¼ò«qcöÑgŸ}èìùg?ô­°Çg_<Ø¿ØnðùQÚóÆˆ«Š}èšÐÍÙlؾ²èÞ ¬æbêO­¯=üÐc»Xìcñ؃Oœ_ÛŠ»Ó£q:­~}ÃEÎ}‰»t\9tj¹l,qÍ£±›ˆ¹ÔƦiÐ5¡‰Îæ(Ô½séMè ¾l`ÂZJOŒH‰4¹Dã4±yñ·^æê%üæoþÆ×._„0úòâ+·ö®tÖ,¬cW¯ã•WIIô(£V¡ ÂᢟgK™IYÖ£²®Ê‘YLÖ'bSvÑü‚oõ¯í© ŸÿçŸ×xn8ÀW¾p1ì2- ,„zùÚ“¢ó Q¨Pt0gê{L kìŸ~øÑþý[¯CðÓÏ>ÿðãý¥ù®…ø‡{#€&õ@pÉOž HÂF¥pÞ×Ü£:EOÌéòWv.}õmh ×<ýü“ffêId >D‚KÎ[­}õÖ«—»[¦Åÿï_ücL¶1;€?·{ãð¥WÞ~ÿÃD,B3-bÑ.{¿² gG*'œªÎq JAÉ҆̕vTWä}H<[Db;3.Î…Ñ/ÿËßÄA‡5ÿú—~ýõ·ôÒbùΗ/‡½o?pnæ9à‘™XéÙy#!4©F ªŒkå [§Ocû’^½ÖšC…ëOáôçÎv×è„ïAÜk×zÁ686Ø(åÇÛU.¥c$bƒ)…Ʀè§;Wäþ»z½÷æ—_Ç+»8µuþ3yì¹nÛ5+qëœ&€à¼oüêÿò+èfXëÛÜï#17õ‹ÿãÿ‹ezå•7žûŽÇF§Æ]ê*+´³”N¸-mÈJ±¸ª[«'™&‹m !ED²Èe%ÆÌÌÚ]¿våÕÿçwÀÅú|îS/´ãE·ñìWîÜd¶ ÞüCíÔÇ*=EÏé²Yz/¾,hŒ…TN1iAñK¿øyœeH¶<ýmÏ÷|Ûœw£³ìñK1ס lÅ¥×/÷¯ëãÍ=úÉy?m/coõrûÅßøu´»o_|ûÍçN=Ëmq0šŒBL5j"9Õˆ©‘Eé°ÞÂ4Mš¡ï]M"»¸QŸÖ(3Wõ.dîàpúÚKo€x¤zè3kß÷Ÿü±tKçÅíßi^zù—á–o\|í©>Rl±Š)“2Øe°ËE /NŒýëíŃÃù6¼V(ëAXþÞí—677ÌåüüÆ«œ›G ¶ã•ÇÉú¦ï*àô#g>ñ'¿y g§M?ÚúŽû£Z¾å#/”k´_ìö>(3ælÏ…’‡ ‚ñþ{ªåäéço¶æ‡z}­õÚ~ïùßx·Ï·Î›…Æœ‹lD#U“‘qŒ®ûÄ_úP>Åãíz¿›ÁØ9ÒÚŒ4uírT®MÖ×ýFñÂO|®®ÖûÄö;Ý›ûºWUëë;ýM?ù]Ëfºuvc´Yô®3xIÆŠD?iŸß½y»´ä„ p’Rª’Ü3G¦DpеÞº(b¸Ÿ ÷~"cÒ‰£q0ÊÆ)Hod’|ÕO6çg],;ßE×z2uŠÄ©-º^¢R26½?„qçE‹ž…ÓZÙžQâ®ÜKÒˆ:0©IDATQ‘T*YWªtd0¸€1@Œ ÊýêHt•ýÚæüÏêi[Ì’kŒ’ȈÔi’ÎÀÐ  [úD>l*\çCp]ïZÀœJ‹ª±q\ß»†A†:ŒT ‘3JFQ²‚r*œ Ðc^-ò_{•sæ}þ·‘!qÊY@JjˆÁ5óêP”»b™¤eË46ÒÞÅD k‘ÙNá bFÔ™h/!°|âUdФÞ̓ÉPI%L”(q3êÉ«'ÀQBSÌ ®Ilp6æã;÷p²ËÑ2$+J ²¯DŠB bH»¢‰"@u‰5JLœ@ìœé‘­,­txFˆÃc«9*§¿é¿æ:Ÿðª¯èù£M †RP²Þ*çd%™˜bËööÌ’Ð죘™"‰D >8vÅAdND¢ìS!*¹(QØàѾœ«èQúä‘]$}[ÎŽÒÅUîŸb§†räS²Õ‰´/æ€JrEb‰.Z°¢ë’u9¶P9ëk€ó *Ü+˜˜3Çò*K>RN$yodÍòž§'ƒ]Þ³‰d¤½ëØVÀ2ÿä9 :ÀïáqÏ,–}]Q¹S™J:±ª&bž`ÊÄB2…ù\4aÚ0J½ëŒ q”®8h rRž@BLÍXY/.‰S!ãHš$(Ep29h9?®Ž*ªËRRÙ Š1Y†7%%bá ¿AYˆÁxÇ‹›ñædÈùȦ{qaDVw žˆ"S2ÒD:$ÝgG"ê”ÊE‚K^“R"ÄlQ%o ¡±=³aØÍŽ$ ‰]gR¦yĬ0Rp0k)ÊC ã”Șá2$¥‚CDeÅÈðÞHæ˜þÿîÓüü©bhIEND®B`‚yaz-5.28.0/doc/common/style1.css0000644000175000017500000000152013250277666013336 00000000000000 .table table { border-collapse: collapse; border: 1px solid black; border-spacing: 0; width: 94%; margin-left: auto; margin-right: 0; } .author { font-style: italic; } .TITLEPAGE, .LOT, .TOC { font-family: sans-serif; } .TITLEPAGE .abstract { margin: 0 150px 1em 0; font-style: oblique; } .TITLEPAGE .inlinemediaobject { position: absolute; top: 60px; right: 0; width: 140px; } .table th { padding: 3px 6px; border: 1px solid black; } .table td { text-align: left; padding: 3px 6px; } h1, h3, h4 { font-family: sans-serif; } h2 { font-style: italic; font-family: sans-serif; } .figure b, .table b, .example b { font-style: italic; } .example , .figure { margin-left: 3%; } .screen, .synopsis, .programlisting { margin-left: 6%; padding: 4px; border-style: solid; border-width: 1px; border-color: #bbbbbb; } yaz-5.28.0/doc/zoom.events.html0000644000175000017500000000777413572540030013272 0000000000000010. Events

10. Events

If you're developing non-blocking applications, you have to deal with events.

    int ZOOM_event(int no, ZOOM_connection *cs);
   

The ZOOM_event executes pending events for a number of connections. Supply the number of connections in no and an array of connections in cs (cs[0] ... cs[no-1]). A pending event could be sending a search, receiving a response, etc. When an event has occurred for one of the connections, this function returns a positive integer n denoting that an event occurred for connection cs[n-1]. When no events are pending for the connections, a value of zero is returned. To ensure that all outstanding requests are performed, call this function repeatedly until zero is returned.

If ZOOM_event returns, and returns non-zero, the last event that occurred can be expected.

    int ZOOM_connection_last_event(ZOOM_connection cs);
   

ZOOM_connection_last_event returns an event type (integer) for the last event.

Table 3.13. ZOOM Event IDs

EventDescription
ZOOM_EVENT_NONENo event has occurred
ZOOM_EVENT_CONNECTTCP/IP connect has initiated
ZOOM_EVENT_SEND_DATAData has been transmitted (sending)
ZOOM_EVENT_RECV_DATAData has been received
ZOOM_EVENT_TIMEOUTTimeout
ZOOM_EVENT_UNKNOWNUnknown event
ZOOM_EVENT_SEND_APDUAn APDU has been transmitted (sending)
ZOOM_EVENT_RECV_APDUAn APDU has been received
ZOOM_EVENT_RECV_RECORDA result-set record has been received
ZOOM_EVENT_RECV_SEARCHA search result has been received

yaz-5.28.0/doc/yaz-marcdump.10000644000175000017500000001344113570011156012574 00000000000000'\" t .\" Title: yaz-marcdump .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: Commands .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "YAZ\-MARCDUMP" "1" "11/28/2019" "YAZ 5.28.0" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-marcdump \- MARC record dump utility .SH "SYNOPSIS" .HP \w'\fByaz\-marcdump\fR\ 'u \fByaz\-marcdump\fR [\fB\-i\ \fR\fB\fIformat\fR\fR] [\fB\-o\ \fR\fB\fIformat\fR\fR] [\fB\-f\ \fR\fB\fIfrom\fR\fR] [\fB\-t\ \fR\fB\fIto\fR\fR] [\fB\-l\ \fR\fB\fIspec\fR\fR] [\fB\-c\ \fR\fB\fIcfile\fR\fR] [\fB\-s\ \fR\fB\fIprefix\fR\fR] [\fB\-C\ \fR\fB\fIsize\fR\fR] [\fB\-n\fR] [\fB\-p\fR] [\fB\-v\fR] [\fB\-V\fR] [file...] .SH "DESCRIPTION" .PP \fByaz\-marcdump\fR reads MARC records from one or more files\&. It parses each record and supports output in line\-format, ISO2709, \m[blue]\fBMARCXML\fR\m[]\&\s-2\u[1]\d\s+2, \m[blue]\fBMARC\-in\-JSON\fR\m[]\&\s-2\u[2]\d\s+2, \m[blue]\fBMarcXchange\fR\m[]\&\s-2\u[3]\d\s+2 as well as Hex output\&. .PP This utility parses records ISO2709(raw MARC), line format, MARC\-in\-JSON format as well as XML if that is structured as MARCXML/MarcXchange\&. .PP MARC\-in\-JSON encoding/decoding is supported in YAZ 5\&.0\&.5 and later\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br .PP As of YAZ 2\&.1\&.18, OAI\-MARC is no longer supported\&. OAI\-MARC is deprecated\&. Use MARCXML instead\&. .sp .5v .RE .PP By default, each record is written to standard output in a line format with newline for each field, $x for each subfield x\&. The output format may be changed with option \-o, .PP \fByaz\-marcdump\fR can also be requested to perform character set conversion of each record\&. .SH "OPTIONS" .PP \-i \fIformat\fR .RS 4 Specifies input format\&. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), turbomarc (Turbo MARC), or json (MARC\-in\-JSON)\&. .RE .PP \-o \fIformat\fR .RS 4 Specifies output format\&. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), turbomarc (Turbo MARC), or json (MARC\-in\-JSON)\&. .RE .PP \-f \fIfrom\fR .RS 4 Specify the character set of the input MARC record\&. Should be used in conjunction with option \-t\&. Refer to the yaz\-iconv man page for supported character sets\&. .RE .PP \-t \fIto\fR .RS 4 Specify the character set of the output\&. Should be used in conjunction with option \-f\&. Refer to the yaz\-iconv man page for supported character sets\&. .RE .PP \-l \fIleaderspec\fR .RS 4 Specify a simple modification string for MARC leader\&. The \fIleaderspec\fR is a list of pos=value pairs, where pos is an integer offset (0 \- 23) for leader\&. Value is either a quoted string or an integer (character value in decimal)\&. Pairs are comma separated\&. For example, to set leader at offset 9 to a, use 9=\*(Aqa\*(Aq\&. .RE .PP \-s \fIprefix\fR .RS 4 Writes a chunk of records to a separate file with prefix given, i\&.e\&. splits a record batch into files with only at most "chunk" ISO2709 records per file\&. By default chunk is 1 (one record per file)\&. See option \-C\&. .RE .PP \-C \fIchunksize\fR .RS 4 Specifies chunk size; to be used conjunction with option \-s\&. .RE .PP \-p .RS 4 Makes yaz\-marcdump print record number and input file offset of each record read\&. .RE .PP \-n .RS 4 MARC output is omitted so that MARC input is only checked\&. .RE .PP \-v .RS 4 Writes more information about the parsing process\&. Useful if you have ill\-formatted ISO2709 records as input\&. .RE .PP \-V .RS 4 Prints YAZ version\&. .RE .SH "EXAMPLES" .PP The following command converts MARC21/USMARC in MARC\-8 encoding to MARC21/USMARC in UTF\-8 encoding\&. Leader offset 9 is set to \*(Aqa\*(Aq\&. Both input and output records are ISO2709 encoded\&. .sp .if n \{\ .RS 4 .\} .nf yaz\-marcdump \-f MARC\-8 \-t UTF\-8 \-o marc \-l 9=97 marc21\&.raw >marc21\&.utf8\&.raw .fi .if n \{\ .RE .\} .PP The same records may be converted to MARCXML instead in UTF\-8: .sp .if n \{\ .RS 4 .\} .nf yaz\-marcdump \-f MARC\-8 \-t UTF\-8 \-o marcxml marc21\&.raw >marcxml\&.xml .fi .if n \{\ .RE .\} .PP Turbo MARC is a compact XML notation with same semantics as MARCXML, but which allows for faster processing via XSLT\&. In order to generate Turbo MARC records encoded in UTF\-8 from MARC21 (ISO), one could use: .sp .if n \{\ .RS 4 .\} .nf yaz\-marcdump \-f MARC8 \-t UTF8 \-o turbomarc \-i marc marc21\&.raw >out\&.xml .fi .if n \{\ .RE .\} .sp .SH "FILES" .PP \fIprefix\fR/bin/yaz\-marcdump .PP \fIprefix\fR/include/yaz/marcdisp\&.h .SH "SEE ALSO" .PP \fByaz\fR(7) .PP \fByaz-iconv\fR(1) .SH "AUTHORS" .PP \fBIndex Data\fR .SH "NOTES" .IP " 1." 4 MARCXML .RS 4 \%https://www.loc.gov/standards/marcxml/ .RE .IP " 2." 4 MARC-in-JSON .RS 4 \%https://rossfsinger.com/blog/2010/09/a-proposal-to-serialize-marc-in-json/ .RE .IP " 3." 4 MarcXchange .RS 4 \%https://www.loc.gov/standards/iso25577/ .RE yaz-5.28.0/doc/yaz-url.10000644000175000017500000000543613570011157011574 00000000000000'\" t .\" Title: yaz-url .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: Commands .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "YAZ\-URL" "1" "11/28/2019" "YAZ 5.28.0" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-url \- YAZ URL fetch utility .SH "SYNOPSIS" .HP \w'\fByaz\-url\fR\ 'u \fByaz\-url\fR [\-H\ \fIname:value\fR] [\-m\ \fImethod\fR] [\-O\ \fIfname\fR] [\-p\ \fIfname\fR] [\-R\ \fInum\fR] [\-u\ \fIuser/password\fR] [\-v] [\-x\ \fIproxy\fR] [url...] .SH "DESCRIPTION" .PP \fByaz\-url\fR is utility to get web content\&. It is very limited in functionality compared to programs such as curl, wget\&. .PP The options must precede the URL given on the command line, to take effect\&. .PP Fetched HTTP content is written to stdout, unless option \-O is given\&. .SH "OPTIONS" .PP \-H \fIname:value\fR .RS 4 Specifies HTTP header content with name and value\&. This option can be given multiple times (for different names, of course)\&. .RE .PP \-m \fImethod\fR .RS 4 Specifies the HTTP method to be used for the next URL\&. Default is method "GET"\&. However, option \-p sets it to "POST"\&. .RE .PP \-O \fIfname\fR .RS 4 Sets output filename for HTTP content\&. .RE .PP \-p \fIfname\fR .RS 4 Sets a file to be POSTed in the following URL\&. .RE .PP \-R \fInum\fR .RS 4 Sets maximum number of HTTP redirects to be followed\&. A value of zero disables follow of HTTP redirects\&. .RE .PP \-u \fIuser/password\fR .RS 4 Specifies a user and a password to be used in HTTP basic authentication in the following URL fetch\&. The user and password must be separated by a slash (thus it is not possible to specify a user with a slash in it)\&. .RE .PP \-v .RS 4 Makes yaz\-url dump each HTTP request/response to stdout\&. .RE .PP \-x \fIproxy\fR .RS 4 Specifies a proxy to be used for URL fetch\&. .RE .SH "SEE ALSO" .PP \fByaz\fR(7) .SH "AUTHORS" .PP \fBIndex Data\fR yaz-5.28.0/doc/yaz-record-conv-man.xml0000644000175000017500000000602113265142510014412 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-record-iconv 1 Commands yaz-record-conv YAZ Record Conversion Utility yaz-record-conv config fname DESCRIPTION yaz-record-conv is a program that exercises the record conversion sub system. Refer to record_conv.h header. OPTIONS -v level Sets the LOG level to level. Level is a sequence of tokens separated by comma. Each token is a integer or a named LOG item - one of fatal, debug, warn, log, malloc, all, none. EXAMPLES The following backend configuration converts MARC records (ISO2709) to Dublin-Core XML. ]]> We can convert one of the sample records from YAZ' test directory with: How to program a computer Jack Collins text Penguin eng ]]> FILES record_conv.h SEE ALSO yaz(7) yaz-5.28.0/doc/indexdata.html0000644000175000017500000000543413572540030012733 00000000000000Appendix E. About Index Data

Appendix E. About Index Data

Index Data is a consulting and software-development enterprise that specializes in library and information management systems. Our interests and expertise span a broad range of related fields, and one of our primary, long-term objectives is the development of a powerful information management system with open network interfaces and hyper-media capabilities.

We make this software available free of charge, on a fairly unrestrictive license; as a service to the networking community, and to further the development of quality software for open network communication.

We'll be happy to answer questions about the software, and about ourselves in general.

The Hacker's Jargon File has the following to say about the use of the prefix "YA" in the name of a software product.

[ Yet Another. adj. 1. Of your own work: A humorous allusion often used in titles to acknowledge that the topic is not original, though the content is. As in "Yet Another AI Group" or "Yet Another Simulated Annealing Algorithm". 2. Of others' work: Describes something of which there are already far too many. ]

yaz-5.28.0/doc/bib1-attr-man.xml0000644000175000017500000001342713467505553013203 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data Bib-1 Attribute Set 7 Conventions and miscellaneous bib1-attr Bib-1 Attribute Set DESCRIPTION This reference entry lists the Bib-1 attribute set types and values. TYPES The Bib-1 attribute set defines six attribute types: Use (1), Relation (2), Position (3), Structure (4), Truncation (5) and Completeness (6). USE (1) 1 Personal-name 2 Corporate-name 3 Conference-name 4 Title 5 Title-series 6 Title-uniform 7 ISBN 8 ISSN 9 LC-card-number 10 BNB-card-number 11 BGF-number 12 Local-number 13 Dewey-classification 14 UDC-classification 15 Bliss-classification 16 LC-call-number 17 NLM-call-number 18 NAL-call-number 19 MOS-call-number 20 Local-classification 21 Subject-heading 22 Subject-Rameau 23 BDI-index-subject 24 INSPEC-subject 25 MESH-subject 26 PA-subject 27 LC-subject-heading 28 RVM-subject-heading 29 Local-subject-index 30 Date 31 Date-of-publication 32 Date-of-acquisition 33 Title-key 34 Title-collective 35 Title-parallel 36 Title-cover 37 Title-added-title-page 38 Title-caption 39 Title-running 40 Title-spine 41 Title-other-variant 42 Title-former 43 Title-abbreviated 44 Title-expanded 45 Subject-precis 46 Subject-rswk 47 Subject-subdivision 48 Number-natl-biblio 49 Number-legal-deposit 50 Number-govt-pub 51 Number-music-publisher 52 Number-db 53 Number-local-call 54 Code-language 55 Code-geographic 56 Code-institution 57 Name-and-title 58 Name-geographic 59 Place-publication 60 CODEN 61 Microform-generation 62 Abstract 63 Note 1000 Author-title 1001 Record-type 1002 Name 1003 Author 1004 Author-name-personal 1005 Author-name-corporate 1006 Author-name-conference 1007 Identifier-standard 1008 Subject-LC-childrens 1009 Subject-name-personal 1010 Body-of-text 1011 Date/time-added-to-db 1012 Date/time-last-modified 1013 Authority/format-id 1014 Concept-text 1015 Concept-reference 1016 Any 1017 Server-choice 1018 Publisher 1019 Record-source 1020 Editor 1021 Bib-level 1022 Geographic-class 1023 Indexed-by 1024 Map-scale 1025 Music-key 1026 Related-periodical 1027 Report-number 1028 Stock-number 1030 Thematic-number 1031 Material-type 1032 Doc-id 1033 Host-item 1034 Content-type 1035 Anywhere 1036 Author-Title-Subject RELATION (2) 1 Less than 2 Less than or equal 3 Equal 4 Greater or equal 5 Greater than 6 Not equal 100 Phonetic 101 Stem 102 Relevance 103 AlwaysMatches POSITION (3) 1 First in field 2 First in subfield 3 Any position in field STRUCTURE (4) 1 Phrase 2 Word 3 Key 4 Year 5 Date (normalized) 6 Word list 100 Date (un-normalized) 101 Name (normalized) 102 Name (un-normalized) 103 Structure 104 Urx 105 Free-form-text 106 Document-text 107 Local-number 108 String 109 Numeric-string TRUNCATION (5) 1 Right truncation 2 Left truncation 3 Left and right truncation 100 Do not truncate 101 Process # in search term . regular #=.* 102 RegExpr-1 103 RegExpr-2 104 Process # ?n . regular: #=., ?n=.{0,n} or ?=.* Z39.58 Thw 105-106 truncation attributes below are only supported by Index Data's Zebra server. 105 Process * ! regular: *=.*, !=. and right truncate 106 Process * ! regular: *=.*, !=. COMPLETENESS (6) 1 Incomplete subfield 2 Complete subfield 3 Complete field SORTING (7) 1 ascending 2 descending Type 7 is an Index Data extension to RPN queries that allows embedding a sort critieria into a query. SEE ALSO Bib-1 Attribute Set Attribute Set Bib-1 Semantics. yaz-5.28.0/doc/yaz-client.html0000644000175000017500000011050413572540030013044 00000000000000yaz-client

Name

yaz-client — Z39.50/SRU client for implementors

Synopsis

yaz-client [-a apdulog] [-b berdump] [-c cclfile] [-d dump] [-f cmdfile] [-k size] [-m marclog] [-p proxy-addr] [-q cqlfile] [-t dispcharset] [-u auth] [-v loglevel] [-V] [-x] [server-addr]

DESCRIPTION

yaz-client is a Z39.50/SRU client (origin) with a simple command line interface that allows you to test behavior and performance of Z39.50 targets and SRU servers.

From YAZ version 4.1.0 yaz-client may also operate as a Solr Web Service client.

If the server-addr is specified, the client creates a connection to the Z39.50/SRU target at the address given.

When yaz-client is started it tries to read commands from one of the following files:

  • Command file if it is given by option -f.

  • .yazclientrc in current working directory.

  • .yazclientrc in the user's home directory. The value of the $HOME environment variable is used to determine the home directory. Normally, $HOME is only set on POSIX systems such as Linux, FreeBSD, Solaris.

OPTIONS

-a filename

If specified, logging of protocol packages will be appended to the file given. If filename is specified as -, the output is written to stdout.

-b filename

If specified, YAZ will dump BER data in readable notation to the file specified. If filename is specified as - the output is written to stdout.

-c filename

If specified, CCL configuration will be read from the file given.

-d dump

If specified, YAZ will dump BER data for all PDUs sent and received to individual files, named dump.DDD.raw, where DDD is 001, 002, 003, ...

-f cmdfile

Reads commands from cmdfile. When this option is used, YAZ client does not read .yazclientrc from current directory or home directory.

-k size

Sets preferred messages and maximum record size for Initialize Request in kilobytes. Default value is 65536 (64 MB).

-m filename

If specified, retrieved records will be appended to the file given.

-p proxy-addr

If specified, the client will use the proxy at the address given. YAZ client will connect to a proxy on the address and port given. The actual target will be specified as part of the InitRequest to inform the proxy about the actual target.

-q filename

If specified, CQL configuration will be read from the file given.

-t displaycharset

If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running).

-u auth

If specified, the auth string will be used for authentication.

-v level
Sets the LOG level to level. Level is a sequence of tokens separated by comma. Each token is a integer or a named LOG item - one of fatal, debug, warn, log, malloc, all, none.
-V

Prints YAZ version.

-x

Makes the YAZ client print hex dumps of packages sent and received on standard output.

COMMANDS

The YAZ client accepts the following commands.

open zurl

Opens a connection to a server. The syntax for zurl is the same as described above for connecting from the command line.

Syntax:

[(tcp|ssl|unix|http)':']host [:port][/base]

quit

Quits YAZ client

find query

Sends a Search Request using the query given. By default the query is assumed to be PQF. See command querytype for more information.

delete setname

Deletes result set with name setname on the server.

base base1 base2 ...

Sets the name(s) of the database(s) to search. One or more databases may be specified, separated by blanks. This command overrides the database given in zurl.

show [start[+number [+resultset]]]

Fetches records by sending a Present Request from the start position given by start and a number of records given by number, from the result set resultset. If start is not given, then the client will fetch from the position of the last retrieved record plus 1. If number is not given, then one record will be fetched at a time. If resultset is not given, the most recently retrieved result set is used.

scan term

Scans database index for a term. The syntax resembles the syntax for find. If you want to scan for the word water you could write

      scan water
     

but if you want to scan only in, say the title field, you would write

      scan @attr 1=4 water
     
setscan set term
Scans database index for a term within a result set. This is similar to the scan command but has a result set as its first argument.
scanpos pos
Sets preferred position for scan. This value is used in the next scan. By default, position is 1.
scansize size
Sets number of entries to be returned by scan. Default number of entries is 20.
scanstep step
Set step-size for scan. This value is used in the next scan sent to the target. By default step-size is 0.
sort sortspecs

Sorts a result set. The sort command takes a sequence of space-separated sort specifications, with each sort specification consisting of two space-separated words (so that the whole specification list is made up of an even number of words). The first word of each specification holds a field (sort criterion) and the second holds flags. If the sort criterion includes = it is assumed that the SortKey is of type sortAttributes using Bib-1: in this case the integer before = is the attribute type and the integer following = is the attribute value. If no = character is in the criterion, it is treated as a sortfield of type InternationalString. The flags word of each sort specification must consist of s for case sensitive or i for case insensitive, and < for ascending order or > for descending order.

sort+

Same as sort but stores the sorted result set in a new result set.

authentication openauth

Sets up an authentication string if a server requires authentication (v2 OpenStyle). The authentication string is first sent to the server when the open command is issued and the Z39.50 Initialize Request is sent, so this command must be used before open in order to be effective. A common convention for the authopen string is that the username - and password is separated by a slash, e.g. myusername/mysecret.

sru method version

Selects Web Service method and version. Must be one of post, get, soap (default) or solr. Version should be either 1.1, 1.2 or 2.0 for SRU. Other versions are allowed - for testing purposes (version negotiation with SRU server). The version is currently not used for Solr Web Services

list_all

This command displays status and values for many settings.

lslb n

Sets the limit for when no records should be returned together with the search result. See the Z39.50 standard on set bounds for more details.

ssub n

Sets the limit for when all records should be returned with the search result. See the Z39.50 standard on set bounds for more details.

mspn n

Sets the number of records that should be returned if the number of records in the result set is between the values of lslb and ssub. See the Z39.50 standard on set bounds for more details.

status

Displays the values of lslb, ssub and mspn.

setname

Switches named result sets on and off. Default is on.

cancel

Sends a Trigger Resource Control Request to the target.

facets spec

Specifies requested facets to be used in search. The notation is specified in Section 8, “Facets”.

format oid

Sets the preferred transfer syntax for retrieved records. yaz-client supports all the record syntaxes that currently are registered. See Z39.50 Record Syntax Identifiers for more details. Commonly used records syntaxes include usmarc, sutrs and xml.

elements e

Sets the element set name for the records. Many targets support element sets B (for brief) and F (for full).

close

Sends a Z39.50 Close APDU and closes connection with the peer

querytype type

Sets the query type as used by command find. The following is supported: prefix for Prefix Query Notation (Type-1 Query); ccl for CCL search (Type-2 Query), cql for CQL (Type-104 search with CQL OID), ccl2rpn for CCL to RPN conversion (Type-1 Query), cql2rpn for CQL to RPN conversion (Type-1 Query).

attributeset set

Sets attribute set OID for prefix queries (RPN, Type-1).

refid id

Sets reference ID for Z39.50 Request(s).

itemorder type no

Sends an Item Order Request using the ILL External. type is either 1 or 2 which corresponds to ILL-Profile 1 and 2 respectively. The no is the Result Set position of the record to be ordered.

update action recid doc

Sends Item Update Request. The action argument must be the action type: one of insert, replace, delete and update. The second argument, recid, is the record identifier (any string). Third argument which is optional is the record document for the request. If doc is preceded with "<", then the following characters are treated as a filename with the records to be updated. Otherwise doc is treated as a document itself. The doc may also be quoted in double quotes. If doc is omitted, the last received record (as part of present response or piggybacked search response) is used for the update.

source filename

Executes list of commands from file filename, just like 'source' on most UNIX shells. A single dot (.) can be used as an alternative.

! args

Executes command args in subshell using the system call.

push_command command

The push_command takes another command as its argument. That command is then added to the history information (so you can retrieve it later). The command itself is not executed. This command only works if you have GNU readline/history enabled.

set_apdufile filename

Sets that APDU should be logged to file filename. Another way to achieve APDU log is by using command-line option -a.

set_auto_reconnect flag

Specifies whether YAZ client automatically reconnects if the target closes connection (Z39.50 only).

flag must be either on or off.

set_auto_wait flag

Specifies whether YAZ client should wait for response protocol packages after a request. By default YAZ client waits (on) for response packages immediately after a command (find, show) has been issued. If off is used, YAZ client does not attempt to receive packages automatically. These will have to be manually received when command wait_response is used.

flag must be either on or off.

set_marcdump filename

Specifies that all retrieved records should be appended to file filename. This command does the same thing as option -m.

schema schemaid

Specifies schema for retrieval. Schema may be specified as an OID for Z39.50. For SRU, schema is a simple string URI.

charset negotiationcharset [displaycharset] [[marccharset]]

Specifies character set (encoding) for Z39.50 negotiation / SRU encoding and/or character set for output (terminal).

negotiationcharset is the name of the character set to be negotiated by the server. The special name - for negotiationcharset specifies no character set to be negotiated.

If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running). To disable conversion of characters to the output encoding, the special name - (dash) can be used. If the special name auto is given, YAZ client will convert strings to the encoding of the terminal as returned by nl_langinfo call.

If marccharset is given, it specifies name of the character set of retrieved MARC records from server. See also marccharset command.

Note

Since character set negotiation takes effect in the Z39.50 Initialize Request you should issue this command before command open is used.

Note

MARC records are not covered by Z39.50 character set negotiation, so that's why there is a separate character that must be known in order to do meaningful conversion(s).

negcharset charset

Specifies character set for negotiation (Z39.50). The argument is the same as second argument for command charset.

displaycharset charset

Specifies character set for output (display). The argument is the same as second argument for command charset.

marccharset charset

Specifies character set for retrieved MARC records so that YAZ client can display them in a character suitable for your display. See charset command. If auto is given, YAZ will assume that MARC21/USMARC is using MARC8/UTF8 and ISO-8859-1 for all other MARC variants. The charset argument is the same as third argument for command charset.

querycharset charset

Specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). This is a pure client-side conversion which converts from displayCharset to queryCharset.

set_cclfile filename

Specifies that CCL fields should be read from file file filename. This command does the same thing as option -c.

set_cqlfile filename

Specifies that CQL fields should be read from file file filename. This command does the same thing as option -q.

register_oid name class OID

This command allows you to register your own object identifier - so that instead of entering a long dot-notation you can use a short name instead. The name is your name for the OID, class is the class, and OID is the raw OID in dot notation. Class is one of: appctx, absyn, attet, transyn, diagset, recsyn, resform, accform, extserv, userinfo, elemspec, varset, schema, tagset, general. If you're in doubt use the general class.

register_tab command string

This command registers a TAB completion string for the command given.

sleep seconds

This command makes YAZ client sleep (be idle) for the number of seconds given.

wait_response [ number]

This command makes YAZ client wait for a number of response packages from target. If number is omitted, 1 is assumed.

This command is rarely used and is only useful if command set_auto_wait is set to off.

xmles OID doc

Sends XML Extended Services request using the OID and doc given.

zversion ver

This command sets Z39.50 version for negotiation. Should be used before open. By default 3 (version 3) is used.

options op1 op2..

This command sets Z39.50 options for negotiation. Should be used before open.

The following options are supported: search, present, delSet, resourceReport, triggerResourceCtrl, resourceCtrl, accessCtrl, scan, sort, extendedServices, level_1Segmentation, level_2Segmentation, concurrentOperations, namedResultSets, encapsulation, resultCount, negotiationModel, duplicationDetection, queryType104, pQESCorrection, stringSchema.

EXAMPLE

The simplest example of a Prefix Query would be something like

    f knuth
   

or

    f "donald knuth"
   

In those queries, no attributes were specified. This leaves it up to the server what fields to search but most servers will search in all fields. Some servers do not support this feature though, and require that some attributes are defined. To add one attribute you could do:

    f @attr 1=4 computer
   

where we search in the title field, since the use(1) is title(4). If we want to search in the author field and in the title field, and in the title field using right truncation it could look something like this:

    f @and @attr 1=1003 knuth @attr 1=4 @attr 5=1 computer
   

Finally using a mix of Bib-1 and GILS attributes could look something like this:

    f @attrset Bib-1 @and @attr GILS 1=2008 Washington @attr 1=21 weather
   

FILES

yaz-<version>/client/client.c

$HOME/.yazclientrc

$HOME/.yazclient.history

SEE ALSO

yaz(7) bib1-attr(7)

yaz-5.28.0/doc/yaz-icu.10000644000175000017500000001260213570011157011543 00000000000000'\" t .\" Title: yaz-icu .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: Commands .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "YAZ\-ICU" "1" "11/28/2019" "YAZ 5.28.0" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-icu \- YAZ ICU utility .SH "SYNOPSIS" .HP \w'\fByaz\-icu\fR\ 'u \fByaz\-icu\fR [\-c\ \fIconfig\fR] [\-p\ \fIopt\fR] [\-s] [\-x] [infile] .SH "DESCRIPTION" .PP \fByaz\-icu\fR is a utility which demonstrates the ICU chain module of yaz\&. (yaz/icu\&.h)\&. .PP The utility can be used in two ways\&. It may read some text using an XML configuration for configuring ICU and show text analysis\&. This mode is triggered by option \-c which specifies the configuration to be used\&. The input file is read from standard input or from a file if infile is specified\&. .PP The utility may also show ICU information\&. This is triggered by option \-p\&. .SH "OPTIONS" .PP \-c \fIconfig\fR .RS 4 Specifies the file containing ICU chain configuration which is XML based\&. .RE .PP \-p \fItype\fR .RS 4 Specifies extra information to be printed about the ICU system\&. If \fItype\fR is c then ICU converters are printed\&. If \fItype\fR is l, then available locales are printed\&. If \fItype\fR is t, then available transliterators are printed\&. .RE .PP \-s .RS 4 Specifies that output should include sort key as well\&. Note that sort key differs between ICU versions\&. .RE .PP \-x .RS 4 Specifies that output should be XML based rather than "text" based\&. .RE .SH "ICU CHAIN CONFIGURATION" .PP The ICU chain configuration specifies one or more rules to convert text data into tokens\&. The configuration format is XML based\&. .PP The toplevel element must be named icu_chain\&. The icu_chain element has one required attribute locale which specifies the ICU locale to be used in the conversion steps\&. .PP The icu_chain element must include elements where each element specifies a conversion step\&. The conversion is performed in the order in which the conversion steps are specified\&. Each conversion element takes one attribute: rule which serves as argument to the conversion step\&. .PP The following conversion elements are available: .PP casemap .RS 4 Converts case (and rule specifies how): .PP l .RS 4 Lower case using ICU function u_strToLower\&. .RE .PP u .RS 4 Upper case using ICU function u_strToUpper\&. .RE .PP t .RS 4 To title using ICU function u_strToTitle\&. .RE .PP f .RS 4 Fold case using ICU function u_strFoldCase\&. .RE .sp .RE .PP display .RS 4 This is a meta step which specifies that a term/token is to be displayed\&. This term is retrieved in an application using function icu_chain_token_display (yaz/icu\&.h)\&. .RE .PP transform .RS 4 Specifies an ICU transform rule using a transliterator Identifier\&. The rule attribute is the transliterator Identifier\&. See \m[blue]\fBICU Transforms\fR\m[]\&\s-2\u[1]\d\s+2 for more information\&. .RE .PP transliterate .RS 4 Specifies a rule\-based transliterator\&. The rule attribute is the custom transformation rule to be used\&. See \m[blue]\fBICU Transforms\fR\m[]\&\s-2\u[1]\d\s+2 for more information\&. .RE .PP tokenize .RS 4 Breaks / tokenizes a string into components using ICU functions ubrk_open, ubrk_setText, \&.\&. \&. The rule is one of: .PP l .RS 4 Line\&. ICU: UBRK_LINE\&. .RE .PP s .RS 4 Sentence\&. ICU: UBRK_SENTENCE\&. .RE .PP w .RS 4 Word\&. ICU: UBRK_WORD\&. .RE .PP c .RS 4 Character\&. ICU: UBRK_CHARACTER\&. .RE .PP t .RS 4 Title\&. ICU: UBRK_TITLE\&. .RE .sp .RE .PP join .RS 4 Joins tokens into one string\&. The rule attribute is the joining string, which may be empty\&. The join conversion element was added in YAZ 4\&.2\&.49\&. .RE .SH "EXAMPLES" .PP The following command analyzes text in file text using ICU chain configuration chain\&.xml: .sp .if n \{\ .RS 4 .\} .nf cat text | yaz\-icu \-c chain\&.xml .fi .if n \{\ .RE .\} .sp The chain\&.xml might look as follows: .sp .if n \{\ .RS 4 .\} .nf .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fByaz\fR(7) .PP \m[blue]\fBICU Home\fR\m[]\&\s-2\u[2]\d\s+2 .PP \m[blue]\fBICU Transforms\fR\m[]\&\s-2\u[1]\d\s+2 .SH "AUTHORS" .PP \fBIndex Data\fR .SH "NOTES" .IP " 1." 4 ICU Transforms .RS 4 \%http://userguide.icu-project.org/transforms/general .RE .IP " 2." 4 ICU Home .RS 4 \%http://www.icu-project.org/ .RE yaz-5.28.0/doc/server.main.html0000644000175000017500000002056013572540030013220 000000000000004. Your main() Routine

4. Your main() Routine

As mentioned, your main() routine can be quite brief. If you want to initialize global parameters, or read global configuration tables, this is the place to do it. At the end of the routine, you should call the function

int statserv_main(int argc, char **argv,
                  bend_initresult *(*bend_init)(bend_initrequest *r),
                  void (*bend_close)(void *handle));
   

The third and fourth arguments are pointers to handlers. Handler bend_init is called whenever the server receives an Initialize Request, so it serves as a Z39.50 session initializer. The bend_close handler is called when the session is closed.

statserv_main will establish listening sockets according to the parameters given. When connection requests are received, the event handler will typically fork() and create a sub-process to handle a new connection. Alternatively the server may be setup to create threads for each connection. If you do use global variables and forking, you should be aware, then, that these cannot be shared between associations, unless you explicitly disable forking by command line parameters.

The server provides a mechanism for controlling some of its behavior without using command-line options. The function

    statserv_options_block *statserv_getcontrol(void);
   

will return a pointer to a struct statserv_options_block describing the current default settings of the server. The structure contains these elements:

int dynamic

A boolean value, which determines whether the server will fork on each incoming request (TRUE), or not (FALSE). Default is TRUE. This flag is only read by UNIX-based servers (WIN32-based servers do not fork).

int threads

A boolean value, which determines whether the server will create a thread on each incoming request (TRUE), or not (FALSE). Default is FALSE. This flag is only read by UNIX-based servers that offer POSIX Threads support. WIN32-based servers always operate in threaded mode.

int inetd

A boolean value, which determines whether the server will operate under a UNIX INET daemon (inetd). Default is FALSE.

char logfile[ODR_MAXNAME+1]

File for diagnostic output ("": stderr).

char apdufile[ODR_MAXNAME+1]

Name of file for logging incoming and outgoing APDUs ("": don't log APDUs, "-": stderr).

char default_listen[1024]

Same form as the command-line specification of listener address. "": no default listener address. Default is to listen at "tcp:@:9999". You can only specify one default listener address in this fashion.

enum oid_proto default_proto;

Either PROTO_Z3950 or PROTO_SR. Default is PROTO_Z39_50.

int idle_timeout;

Maximum session idle-time, in minutes. Zero indicates no (infinite) timeout. Default is 15 minutes.

int maxrecordsize;

Maximum permissible record (message) size. Default is 64 MB. This amount of memory will only be allocated if a client requests a very large amount of records in one operation (or a big record). Set it to a lower number if you are worried about resource consumption on your host system.

char configname[ODR_MAXNAME+1]

Passed to the backend when a new connection is received.

char setuid[ODR_MAXNAME+1]

Set user id to the user specified, after binding the listener addresses.

void (*bend_start)(struct statserv_options_block *p)

Pointer to function which is called after the command line options have been parsed - but before the server starts listening. For forked UNIX servers, this handler is called in the mother process; for threaded servers, this handler is called in the main thread. The default value of this pointer is NULL in which case it isn't invoked by the frontend server. When the server operates as an NT service, this handler is called whenever the service is started.

void (*bend_stop)(struct statserv_options_block *p)

Pointer to function which is called whenever the server has stopped listening for incoming connections. This function pointer has a default value of NULL in which case it isn't called. When the server operates as an NT service, this handler is called whenever the service is stopped.

void *handle

User defined pointer (default value NULL). This is a per-server handle that can be used to specify "user-data". Do not confuse this with the session-handle as returned by bend_init.

The pointer returned by statserv_getcontrol points to a static area. You are allowed to change the contents of the structure, but the changes will not take effect until you call

void statserv_setcontrol(statserv_options_block *block);
   

Note

You should generally update this structure before calling statserv_main().

yaz-5.28.0/doc/gfs-synopsis.xml0000644000175000017500000000310413265142510013262 00000000000000 &gfs-synopsis-app; listener-spec yaz-5.28.0/doc/yaz-iconv.html0000644000175000017500000001463013572540030012707 00000000000000yaz-iconv

Name

yaz-iconv — YAZ Character set conversion utility

Synopsis

yaz-iconv [-f from] [-t to] [-v] [file...]

DESCRIPTION

yaz-iconv converts data in the character set specified by from to output in the character set as specified by to.

This yaz-iconv utility is similar to the iconv found on many POSIX systems (Glibc, Solaris, etc).

If no file is specified, yaz-iconv reads from standard input.

OPTIONS

-ffrom]

Specify the character set from of the input file. Should be used in conjunction with option -t.

-tto]

Specify the character set of of the output. Should be used in conjunction with option -f.

-v

Print more information about the conversion process.

ENCODINGS

The yaz-iconv command and the API as defined in yaz/yaz-iconv.h is a wrapper for the library system call iconv. But YAZ' iconv utility also implements conversions on its own. The table below lists characters sets (or encodings) that are supported by YAZ. Each character set is marked with either encode or decode. If an encoding is encode-enabled, YAZ may convert to the designated encoding. If an encoding is decode-enabled, YAZ may convert from the designated encoding.

marc8 (encode, decode)

The MARC8 encoding as defined by the Library of Congress. Most MARC21/USMARC records use this encoding.

marc8s (encode, decode)

Like MARC8 but conversion prefers non-combined characters in the Latin-1 plane over combined characters.

marc8lossy (encode)

Lossy encoding of MARC-8.

marc8lossless (encode)

Lossless encoding of MARC8.

utf8 (encode, decode)

The most commonly used UNICODE encoding on the Internet.

iso8859-1 (encode, decode)

ISO-8859-1, AKA Latin-1.

iso5426 (decode)

ISO 5426. Some MARC records (UNIMARC) use this encoding.

iso5428:1984 (encode, decode)

ISO 5428:1984.

advancegreek (encode, decode)

An encoding for Greek in use by some vendors (Advance).

danmarc (decode)

Danmarc (in danish) is an encoding based on UNICODE which is used for DanMARC2 records.

EXAMPLES

The following command converts from ISO-8859-1 (Latin-1) to UTF-8.

    yaz-iconv -f ISO-8859-1 -t UTF-8 <input.lst >output.lst
   

FILES

prefix/bin/yaz-iconv

prefix/include/yaz/yaz-iconv.h

SEE ALSO

yaz(7) iconv(1)

yaz-5.28.0/doc/yaz-illclient-man.xml0000644000175000017500000000625513265142510014161 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-illclient 1 Commands yaz-illclient ILL client yaz-illclient name=value server-addr DESCRIPTION yaz-illclient is a client which sends an ISO ILL request to a remote server and decodes the response from it. Exactly one server address ( server-addr ) must be specified. OPTIONS -f filename] Specify filename. -v loglevel] Specify the log level. -D name=value] Defines name & value pair. -o Enable OCLC authentication. -u user] Specify user. -p password] Specify password. -V Show yaz-illclient version. EXAMPLES None yet. FILES None yet. SEE ALSO yaz(7) yaz-5.28.0/doc/marc.html0000644000175000017500000002241513572540030011712 000000000000005. MARC

5. MARC

YAZ provides a fast utility for working with MARC records. Early versions of the MARC utility only allowed decoding of ISO2709. Today the utility may both encode - and decode to a variety of formats.

    #include <yaz/marcdisp.h>

    /* create handler */
    yaz_marc_t yaz_marc_create(void);
    /* destroy */
    void yaz_marc_destroy(yaz_marc_t mt);

    /* set XML mode YAZ_MARC_LINE, YAZ_MARC_SIMPLEXML, ... */
    void yaz_marc_xml(yaz_marc_t mt, int xmlmode);
    #define YAZ_MARC_LINE      0
    #define YAZ_MARC_SIMPLEXML 1
    #define YAZ_MARC_OAIMARC   2
    #define YAZ_MARC_MARCXML   3
    #define YAZ_MARC_ISO2709   4
    #define YAZ_MARC_XCHANGE   5
    #define YAZ_MARC_CHECK     6
    #define YAZ_MARC_TURBOMARC 7
    #define YAZ_MARC_JSON      8

    /* supply iconv handle for character set conversion .. */
    void yaz_marc_iconv(yaz_marc_t mt, yaz_iconv_t cd);

    /* set debug level, 0=none, 1=more, 2=even more, .. */
    void yaz_marc_debug(yaz_marc_t mt, int level);

    /* decode MARC in buf of size bsize. Returns >0 on success; <=0 on failure.
    On success, result in *result with size *rsize. */
    int yaz_marc_decode_buf(yaz_marc_t mt, const char *buf, int bsize,
                            const char **result, size_t *rsize);

    /* decode MARC in buf of size bsize. Returns >0 on success; <=0 on failure.
       On success, result in WRBUF */
    int yaz_marc_decode_wrbuf(yaz_marc_t mt, const char *buf,
                              int bsize, WRBUF wrbuf);

   

Note

The synopsis is just a basic subset of all functionality. Refer to the actual header file marcdisp.h for details.

A MARC conversion handle must be created by using yaz_marc_create and destroyed by calling yaz_marc_destroy.

All other functions operate on a yaz_marc_t handle. The output is specified by a call to yaz_marc_xml. The xmlmode must be one of

YAZ_MARC_LINE

A simple line-by-line format suitable for display but not recommended for further (machine) processing.

YAZ_MARC_MARCXML

MARCXML.

YAZ_MARC_ISO2709

ISO2709 (sometimes just referred to as "MARC").

YAZ_MARC_XCHANGE

MarcXchange.

YAZ_MARC_CHECK

Pseudo format for validation only. Does not generate any real output except diagnostics.

YAZ_MARC_TURBOMARC

XML format with same semantics as MARCXML but more compact and geared towards fast processing with XSLT. Refer to Section 5.1, “TurboMARC” for more information.

YAZ_MARC_JSON

MARC-in-JSON format.

The actual conversion functions are yaz_marc_decode_buf and yaz_marc_decode_wrbuf which decodes and encodes a MARC record. The former function operates on simple buffers, and stores the resulting record in a WRBUF handle (WRBUF is a simple string type).

Example 7.18. Display of MARC record

The following program snippet illustrates how the MARC API may be used to convert a MARC record to the line-by-line format:

      void print_marc(const char *marc_buf, int marc_buf_size)
      {
         char *result;      /* for result buf */
         size_t result_len;    /* for size of result */
         yaz_marc_t mt = yaz_marc_create();
         yaz_marc_xml(mt, YAZ_MARC_LINE);
         yaz_marc_decode_buf(mt, marc_buf, marc_buf_size,
                             &result, &result_len);
         fwrite(result, result_len, 1, stdout);
         yaz_marc_destroy(mt);  /* note that result is now freed... */
      }

     


5.1. TurboMARC

TurboMARC is yet another XML encoding of a MARC record. The format was designed for fast processing with XSLT.

Applications like Pazpar2 uses XSLT to convert an XML encoded MARC record to an internal representation. This conversion mostly checks the tag of a MARC field to determine the basic rules in the conversion. This check is costly when that tag is encoded as an attribute in MARCXML. By having the tag value as the element instead, makes processing many times faster (at least for Libxslt).

TurboMARC is encoded as follows:

  • Record elements is part of namespace "http://www.indexdata.com/turbomarc".

  • A record is enclosed in element r.

  • A collection of records is enclosed in element collection.

  • The leader is encoded as element l with the leader content as its (text) value.

  • A control field is encoded as element c concatenated with the tag value of the control field if the tag value matches the regular expression [a-zA-Z0-9]*. If the tag value does not match the regular expression [a-zA-Z0-9]* the control field is encoded as element c and attribute code will hold the tag value. This rule ensures that in the rare cases where a tag value might result in a non-well-formed XML, then YAZ will encode it as a coded attribute (as in MARCXML).

    The control field content is the text value of this element. Indicators are encoded as attribute names i1, i2, etc. and corresponding values for each indicator.

  • A data field is encoded as element d concatenated with the tag value of the data field or using the attribute code as described in the rules for control fields. The children of the data field element are subfield elements. Each subfield element is encoded as s concatenated with the sub field code. The text of the subfield element is the contents of the subfield. Indicators are encoded as attributes for the data field element, similar to the encoding for control fields.

yaz-5.28.0/doc/zoom.queryconversions.html0000644000175000017500000000614113572540030015407 000000000000009. Query conversions

9. Query conversions

    int ZOOM_query_cql2rpn(ZOOM_query s, const char *cql_str,
                           ZOOM_connection conn);

    int ZOOM_query_ccl2rpn(ZOOM_query s, const char *ccl_str,
                           const char *config,
                           int *ccl_error, const char **error_string,
                           int *error_pos);
   

ZOOM_query_cql2rpn translates the CQL string, client-side, into RPN which may be passed to the server. This is useful for servers that don't themselves support CQL, for which ZOOM_query_cql is useless. 'conn' is used only as a place to stash diagnostics if compilation fails; if this information is not needed, a null pointer may be used. The CQL conversion is driven by option cqlfile from connection conn. This specifies a conversion file (e.g. pqf.properties) which must be present.

ZOOM_query_ccl2rpn translates the CCL string, client-side, into RPN which may be passed to the server. The conversion is driven by the specification given by config. Upon completion 0 is returned on success; -1 is returned on failure. On failure error_string and error_pos hold the error message and position of first error in original CCL string.

yaz-5.28.0/doc/server.backend.html0000644000175000017500000000440013572540030013656 000000000000003. The Backend API

3. The Backend API

The header file that you need to use the interface are in the include/yaz directory. It's called backend.h. It will include other files from the include/yaz directory, so you'll probably want to use the -I option of your compiler to tell it where to find the files. When you run make in the top-level YAZ directory, everything you need to create your server is to link with the lib/libyaz.la library.

yaz-5.28.0/doc/odr.use.html0000644000175000017500000005051013572540030012344 000000000000002. Using ODR

2. Using ODR

2.1. ODR Streams

Conceptually, the ODR stream is the source of encoded data in the decoding mode; when encoding, it is the receptacle for the encoded data. Before you can use an ODR stream it must be allocated. This is done with the function

     ODR odr_createmem(int direction);
    

The odr_createmem() function takes as argument one of three manifest constants: ODR_ENCODE, ODR_DECODE, or ODR_PRINT. An ODR stream can be in only one mode - it is not possible to change its mode once it's selected. Typically, your program will allocate at least two ODR streams - one for decoding, and one for encoding.

When you're done with the stream, you can use

     void odr_destroy(ODR o);
    

to release the resources allocated for the stream.

2.2. Memory Management

Two forms of memory management take place in the ODR system. The first one, which has to do with allocating little bits of memory (sometimes quite large bits of memory, actually) when a protocol package is decoded, and turned into a complex of interlinked structures. This section deals with this system, and how you can use it for your own purposes. The next section deals with the memory management which is required when encoding data - to make sure that a large enough buffer is available to hold the fully encoded PDU.

The ODR module has its own memory management system, which is used whenever memory is required. Specifically, it is used to allocate space for data when decoding incoming PDUs. You can use the memory system for your own purposes, by using the function

     void *odr_malloc(ODR o, size_t size);
    

You can't use the normal free(2) routine to free memory allocated by this function, and ODR doesn't provide a parallel function. Instead, you can call

     void odr_reset(ODR o);
    

when you are done with the memory: Everything allocated since the last call to odr_reset() is released. The odr_reset() call is also required to clear up an error condition on a stream.

The function

     size_t odr_total(ODR o);
    

returns the number of bytes allocated on the stream since the last call to odr_reset().

The memory subsystem of ODR is fairly efficient at allocating and releasing little bits of memory. Rather than managing the individual, small bits of space, the system maintains a free-list of larger chunks of memory, which are handed out in small bits. This scheme is generally known as a nibble-memory system. It is very useful for maintaining short-lived constructions such as protocol PDUs.

If you want to retain a bit of memory beyond the next call to odr_reset(), you can use the function

     ODR_MEM odr_extract_mem(ODR o);
    

This function will give you control of the memory recently allocated on the ODR stream. The memory will live (past calls to odr_reset()), until you call the function

     void odr_release_mem(ODR_MEM p);
    

The opaque ODR_MEM handle has no other purpose than referencing the memory block for you until you want to release it.

You can use odr_extract_mem() repeatedly between allocating data, to retain individual control of separate chunks of data.

2.3. Encoding and Decoding Data

When encoding data, the ODR stream will write the encoded octet string in an internal buffer. To retrieve the data, use the function

     char *odr_getbuf(ODR o, int *len, int *size);
    

The integer pointed to by len is set to the length of the encoded data, and a pointer to that data is returned. *size is set to the size of the buffer (unless size is null, signaling that you are not interested in the size). The next call to a primitive function using the same ODR stream will overwrite the data, unless a different buffer has been supplied using the call

     void odr_setbuf(ODR o, char *buf, int len, int can_grow);
    

which sets the encoding (or decoding) buffer used by o to buf, using the length len. Before a call to an encoding function, you can use odr_setbuf() to provide the stream with an encoding buffer of sufficient size (length). The can_grow parameter tells the encoding ODR stream whether it is allowed to use realloc(2) to increase the size of the buffer when necessary. The default condition of a new encoding stream is equivalent to the results of calling

     odr_setbuf(stream, 0, 0, 1);
    

In this case, the stream will allocate and reallocate memory as necessary. The stream reallocates memory by repeatedly doubling the size of the buffer - the result is that the buffer will typically reach its maximum, working size with only a small number of reallocation operations. The memory is freed by the stream when the latter is destroyed, unless it was assigned by the user with the can_grow parameter set to zero (in this case, you are expected to retain control of the memory yourself).

To assume full control of an encoded buffer, you must first call odr_getbuf() to fetch the buffer and its length. Next, you should call odr_setbuf() to provide a different buffer (or a null pointer) to the stream. In the simplest case, you will reuse the same buffer over and over again, and you will just need to call odr_getbuf() after each encoding operation to get the length and address of the buffer. Note that the stream may reallocate the buffer during an encoding operation, so it is necessary to retrieve the correct address after each encoding operation.

It is important to realize that the ODR stream will not release this memory when you call odr_reset(): It will merely update its internal pointers to prepare for the encoding of a new data value. When the stream is released by the odr_destroy() function, the memory given to it by odr_setbuf will be released only if the can_grow parameter to odr_setbuf() was nonzero. The can_grow parameter, in other words, is a way of signaling who is to own the buffer, you or the ODR stream. If you never call odr_setbuf() on your encoding stream, which is typically the case, the buffer allocated by the stream will belong to the stream by default.

When you wish to decode data, you should first call odr_setbuf(), to tell the decoding stream where to find the encoded data, and how long the buffer is (the can_grow parameter is ignored by a decoding stream). After this, you can call the function corresponding to the data you wish to decode (e.g. odr_integer() odr z_APDU()).

Example 8.1. Encoding and decoding functions

      int odr_integer(ODR o, Odr_int **p, int optional, const char *name);

      int z_APDU(ODR o, Z_APDU **p, int optional, const char *name);
     

If the data is absent (or doesn't match the tag corresponding to the type), the return value will be either 0 or 1 depending on the optional flag. If optional is 0 and the data is absent, an error flag will be raised in the stream, and you'll need to call odr_reset() before you can use the stream again. If optional is nonzero, the pointer pointed to/ by p will be set to the null value, and the function will return 1. The name argument is used to pretty-print the tag in question. It may be set to NULL if pretty-printing is not desired.

If the data value is found where it's expected, the pointer pointed to by the p argument will be set to point to the decoded type. The space for the type will be allocated and owned by the ODR stream, and it will live until you call odr_reset() on the stream. You cannot use free(2) to release the memory. You can decode several data elements (by repeated calls to odr_setbuf() and your decoding function), and new memory will be allocated each time. When you do call odr_reset(), everything decoded since the last call to odr_reset() will be released.

Example 8.2. Encoding and decoding of an integer

The use of the double indirection can be a little confusing at first (its purpose will become clear later on, hopefully), so an example is in order. We'll encode an integer value, and immediately decode it again using a different stream. A useless, but informative operation.

void do_nothing_useful(Odr_int value)
{
    ODR encode, decode;
    Odr_int *valp, *resvalp;
    char *bufferp;
    int len;

    /* allocate streams */
    if (!(encode = odr_createmem(ODR_ENCODE)))
        return;
    if (!(decode = odr_createmem(ODR_DECODE)))
        return;

    valp = &value;
    if (odr_integer(encode, &valp, 0, 0) == 0)
    {
        printf("encoding went bad\n");
        return;
    }
    bufferp = odr_getbuf(encode, &len, 0);
    printf("length of encoded data is %d\n", len);

    /* now let's decode the thing again */
    odr_setbuf(decode, bufferp, len, 0);
    if (odr_integer(decode, &resvalp, 0, 0) == 0)
    {
        printf("decoding went bad\n");
        return;
    }
    /* ODR_INT_PRINTF format for printf (such as %d) */
    printf("the value is " ODR_INT_PRINTF "\n", *resvalp);

    /* clean up */
    odr_destroy(encode);
    odr_destroy(decode);
}

     

This looks like a lot of work, offhand. In practice, the ODR streams will typically be allocated once, in the beginning of your program (or at the beginning of a new network session), and the encoding and decoding will only take place in a few, isolated places in your program, so the overhead is quite manageable.


2.4. Printing

When an ODR stream is created of type ODR_PRINT the ODR module will print the contents of a PDU in a readable format. By default output is written to the stderr stream. This behavior can be changed, however, by calling the function

      odr_setprint(ODR o, FILE *file);
     

before encoders or decoders are being invoked. It is also possible to direct the output to a buffer (or indeed another file), by using the more generic mechanism:

      void odr_set_stream(ODR o, void *handle,
                         void (*stream_write)(ODR o, void *handle, int type,
                                              const char *buf, int len),
                         void (*stream_close)(void *handle));
     

Here the user provides an opaque handle and two handlers, stream_write for writing, and stream_close which is supposed to close/free resources associated with handle. The stream_close handler is optional and if NULL for the function is provided, it will not be invoked. The stream_write takes the ODR handle as parameter, the user-defined handle, a type ODR_OCTETSTRING, ODR_VISIBLESTRING which indicates the type of contents being written.

Another utility useful for diagnostics (error handling) or as part of the printing facilities is:

      const char **odr_get_element_path(ODR o);
     

which returns a list of current elements that ODR deals with at the moment. For the returned array, say ar, then ar[0] is the top level element, ar[n] is the last. The last element has the property that ar[n+1] == NULL.

Example 8.3. Element Path for record

For a database record part of a PresentResponse the array returned by odr_get_element is presentResponse, databaseOrSurDiagnostics, ?, record, ?, databaseRecord . The question mark appears due to unnamed constructions.


2.5. Diagnostics

The encoding/decoding functions all return 0 when an error occurs. Until you call odr_reset(), you cannot use the stream again, and any function called will immediately return 0.

To provide information to the programmer or administrator, the function

     void odr_perror(ODR o, char *message);
    

is provided, which prints the message argument to stderr along with an error message from the stream.

You can also use the function

     int odr_geterror(ODR o);
    

to get the current error number from the screen. The number will be one of these constants:

Table 8.1. ODR Error codes

codeDescription
OMEMORYMemory allocation failed.
OSYSERRA system- or library call has failed. The standard diagnostic variable errno should be examined to determine the actual error.
OSPACENo more space for encoding. This will only occur when the user has explicitly provided a buffer for an encoding stream without allowing the system to allocate more space.
OREQUIREDThis is a common protocol error; A required data element was missing during encoding or decoding.
OUNEXPECTEDAn unexpected data element was found during decoding.
OOTHEROther error. This is typically an indication of misuse of the ODR system by the programmer, and also that the diagnostic system isn't as good as it should be, yet.

The character string array

     char *odr_errlist[]
    

can be indexed by the error code to obtain a human-readable representation of the problem.

2.6. Summary and Synopsis

     #include <yaz/odr.h>

     ODR odr_createmem(int direction);

     void odr_destroy(ODR o);

     void odr_reset(ODR o);

     char *odr_getbuf(ODR o, int *len, int *size);

     void odr_setbuf(ODR o, char *buf, int len, int can_grow);

     void *odr_malloc(ODR o, int size);

     NMEM odr_extract_mem(ODR o);

     int odr_geterror(ODR o);

     void odr_perror(ODR o, const char *message);

     extern char *odr_errlist[];
    
yaz-5.28.0/doc/manref.xml0000644000175000017500000041427613570011155012105 00000000000000 YAZ 5.28.0 Index Data yaz-client 1 Commands yaz-client Z39.50/SRU client for implementors yaz-client server-addr DESCRIPTION yaz-client is a Z39.50/SRU client (origin) with a simple command line interface that allows you to test behavior and performance of Z39.50 targets and SRU servers. From YAZ version 4.1.0 yaz-client may also operate as a Solr Web Service client. If the server-addr is specified, the client creates a connection to the Z39.50/SRU target at the address given. When yaz-client is started it tries to read commands from one of the following files: Command file if it is given by option -f. .yazclientrc in current working directory. .yazclientrc in the user's home directory. The value of the $HOME environment variable is used to determine the home directory. Normally, $HOME is only set on POSIX systems such as Linux, FreeBSD, Solaris. OPTIONS -a filename If specified, logging of protocol packages will be appended to the file given. If filename is specified as -, the output is written to stdout. -b filename If specified, YAZ will dump BER data in readable notation to the file specified. If filename is specified as - the output is written to stdout. -c filename If specified, CCL configuration will be read from the file given. -d dump If specified, YAZ will dump BER data for all PDUs sent and received to individual files, named dump.DDD.raw, where DDD is 001, 002, 003, ... -f cmdfile Reads commands from cmdfile. When this option is used, YAZ client does not read .yazclientrc from current directory or home directory. -k size Sets preferred messages and maximum record size for Initialize Request in kilobytes. Default value is 65536 (64 MB). -m filename If specified, retrieved records will be appended to the file given. -p proxy-addr If specified, the client will use the proxy at the address given. YAZ client will connect to a proxy on the address and port given. The actual target will be specified as part of the InitRequest to inform the proxy about the actual target. -q filename If specified, CQL configuration will be read from the file given. -t displaycharset If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running). -u auth If specified, the auth string will be used for authentication. -v level Sets the LOG level to level. Level is a sequence of tokens separated by comma. Each token is a integer or a named LOG item - one of fatal, debug, warn, log, malloc, all, none. -V Prints YAZ version. -x Makes the YAZ client print hex dumps of packages sent and received on standard output. COMMANDS The YAZ client accepts the following commands. open zurl Opens a connection to a server. The syntax for zurl is the same as described above for connecting from the command line. Syntax: [(tcp|ssl|unix|http)':']host [:port][/base] quit Quits YAZ client find query Sends a Search Request using the query given. By default the query is assumed to be PQF. See command querytype for more information. delete setname Deletes result set with name setname on the server. base base1 base2 ... Sets the name(s) of the database(s) to search. One or more databases may be specified, separated by blanks. This command overrides the database given in zurl. show [start[+number [+resultset]]] Fetches records by sending a Present Request from the start position given by start and a number of records given by number, from the result set resultset. If start is not given, then the client will fetch from the position of the last retrieved record plus 1. If number is not given, then one record will be fetched at a time. If resultset is not given, the most recently retrieved result set is used. scan term Scans database index for a term. The syntax resembles the syntax for find. If you want to scan for the word water you could write scan water but if you want to scan only in, say the title field, you would write scan @attr 1=4 water setscan set term Scans database index for a term within a result set. This is similar to the scan command but has a result set as its first argument. scanpos pos Sets preferred position for scan. This value is used in the next scan. By default, position is 1. scansize size Sets number of entries to be returned by scan. Default number of entries is 20. scanstep step Set step-size for scan. This value is used in the next scan sent to the target. By default step-size is 0. sort sortspecs Sorts a result set. The sort command takes a sequence of space-separated sort specifications, with each sort specification consisting of two space-separated words (so that the whole specification list is made up of an even number of words). The first word of each specification holds a field (sort criterion) and the second holds flags. If the sort criterion includes = it is assumed that the SortKey is of type sortAttributes using Bib-1: in this case the integer before = is the attribute type and the integer following = is the attribute value. If no = character is in the criterion, it is treated as a sortfield of type InternationalString. The flags word of each sort specification must consist of s for case sensitive or i for case insensitive, and < for ascending order or > for descending order. sort+ Same as sort but stores the sorted result set in a new result set. authentication openauth Sets up an authentication string if a server requires authentication (v2 OpenStyle). The authentication string is first sent to the server when the open command is issued and the Z39.50 Initialize Request is sent, so this command must be used before open in order to be effective. A common convention for the authopen string is that the username - and password is separated by a slash, e.g. myusername/mysecret. sru method version Selects Web Service method and version. Must be one of post, get, soap (default) or solr. Version should be either 1.1, 1.2 or 2.0 for SRU. Other versions are allowed - for testing purposes (version negotiation with SRU server). The version is currently not used for Solr Web Services list_all This command displays status and values for many settings. lslb n Sets the limit for when no records should be returned together with the search result. See the Z39.50 standard on set bounds for more details. ssub n Sets the limit for when all records should be returned with the search result. See the Z39.50 standard on set bounds for more details. mspn n Sets the number of records that should be returned if the number of records in the result set is between the values of lslb and ssub. See the Z39.50 standard on set bounds for more details. status Displays the values of lslb, ssub and mspn. setname Switches named result sets on and off. Default is on. cancel Sends a Trigger Resource Control Request to the target. facets spec Specifies requested facets to be used in search. The notation is specified in . format oid Sets the preferred transfer syntax for retrieved records. yaz-client supports all the record syntaxes that currently are registered. See Z39.50 Record Syntax Identifiers for more details. Commonly used records syntaxes include usmarc, sutrs and xml. elements e Sets the element set name for the records. Many targets support element sets B (for brief) and F (for full). close Sends a Z39.50 Close APDU and closes connection with the peer querytype type Sets the query type as used by command find. The following is supported: prefix for Prefix Query Notation (Type-1 Query); ccl for CCL search (Type-2 Query), cql for CQL (Type-104 search with CQL OID), ccl2rpn for CCL to RPN conversion (Type-1 Query), cql2rpn for CQL to RPN conversion (Type-1 Query). attributeset set Sets attribute set OID for prefix queries (RPN, Type-1). refid id Sets reference ID for Z39.50 Request(s). itemorder type no Sends an Item Order Request using the ILL External. type is either 1 or 2 which corresponds to ILL-Profile 1 and 2 respectively. The no is the Result Set position of the record to be ordered. update action recid doc Sends Item Update Request. The action argument must be the action type: one of insert, replace, delete and update. The second argument, recid, is the record identifier (any string). Third argument which is optional is the record document for the request. If doc is preceded with "<", then the following characters are treated as a filename with the records to be updated. Otherwise doc is treated as a document itself. The doc may also be quoted in double quotes. If doc is omitted, the last received record (as part of present response or piggybacked search response) is used for the update. source filename Executes list of commands from file filename, just like 'source' on most UNIX shells. A single dot (.) can be used as an alternative. ! args Executes command args in subshell using the system call. push_command command The push_command takes another command as its argument. That command is then added to the history information (so you can retrieve it later). The command itself is not executed. This command only works if you have GNU readline/history enabled. set_apdufile filename Sets that APDU should be logged to file filename. Another way to achieve APDU log is by using command-line option -a. set_auto_reconnect flag Specifies whether YAZ client automatically reconnects if the target closes connection (Z39.50 only). flag must be either on or off. set_auto_wait flag Specifies whether YAZ client should wait for response protocol packages after a request. By default YAZ client waits (on) for response packages immediately after a command (find, show) has been issued. If off is used, YAZ client does not attempt to receive packages automatically. These will have to be manually received when command wait_response is used. flag must be either on or off. set_marcdump filename Specifies that all retrieved records should be appended to file filename. This command does the same thing as option -m. schema schemaid Specifies schema for retrieval. Schema may be specified as an OID for Z39.50. For SRU, schema is a simple string URI. charset negotiationcharset [displaycharset] [[marccharset]] Specifies character set (encoding) for Z39.50 negotiation / SRU encoding and/or character set for output (terminal). negotiationcharset is the name of the character set to be negotiated by the server. The special name - for negotiationcharset specifies no character set to be negotiated. If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running). To disable conversion of characters to the output encoding, the special name - (dash) can be used. If the special name auto is given, YAZ client will convert strings to the encoding of the terminal as returned by nl_langinfo call. If marccharset is given, it specifies name of the character set of retrieved MARC records from server. See also marccharset command. Since character set negotiation takes effect in the Z39.50 Initialize Request you should issue this command before command open is used. MARC records are not covered by Z39.50 character set negotiation, so that's why there is a separate character that must be known in order to do meaningful conversion(s). negcharset charset Specifies character set for negotiation (Z39.50). The argument is the same as second argument for command charset. displaycharset charset Specifies character set for output (display). The argument is the same as second argument for command charset. marccharset charset Specifies character set for retrieved MARC records so that YAZ client can display them in a character suitable for your display. See charset command. If auto is given, YAZ will assume that MARC21/USMARC is using MARC8/UTF8 and ISO-8859-1 for all other MARC variants. The charset argument is the same as third argument for command charset. querycharset charset Specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). This is a pure client-side conversion which converts from displayCharset to queryCharset. set_cclfile filename Specifies that CCL fields should be read from file file filename. This command does the same thing as option -c. set_cqlfile filename Specifies that CQL fields should be read from file file filename. This command does the same thing as option -q. register_oid name class OID This command allows you to register your own object identifier - so that instead of entering a long dot-notation you can use a short name instead. The name is your name for the OID, class is the class, and OID is the raw OID in dot notation. Class is one of: appctx, absyn, attet, transyn, diagset, recsyn, resform, accform, extserv, userinfo, elemspec, varset, schema, tagset, general. If you're in doubt use the general class. register_tab command string This command registers a TAB completion string for the command given. sleep seconds This command makes YAZ client sleep (be idle) for the number of seconds given. wait_response [ number] This command makes YAZ client wait for a number of response packages from target. If number is omitted, 1 is assumed. This command is rarely used and is only useful if command set_auto_wait is set to off. xmles OID doc Sends XML Extended Services request using the OID and doc given. zversion ver This command sets Z39.50 version for negotiation. Should be used before open. By default 3 (version 3) is used. options op1 op2.. This command sets Z39.50 options for negotiation. Should be used before open. The following options are supported: search, present, delSet, resourceReport, triggerResourceCtrl, resourceCtrl, accessCtrl, scan, sort, extendedServices, level_1Segmentation, level_2Segmentation, concurrentOperations, namedResultSets, encapsulation, resultCount, negotiationModel, duplicationDetection, queryType104, pQESCorrection, stringSchema. EXAMPLE The simplest example of a Prefix Query would be something like f knuth or f "donald knuth" In those queries, no attributes were specified. This leaves it up to the server what fields to search but most servers will search in all fields. Some servers do not support this feature though, and require that some attributes are defined. To add one attribute you could do: f @attr 1=4 computer where we search in the title field, since the use(1) is title(4). If we want to search in the author field and in the title field, and in the title field using right truncation it could look something like this: f @and @attr 1=1003 knuth @attr 1=4 @attr 5=1 computer Finally using a mix of Bib-1 and GILS attributes could look something like this: f @attrset Bib-1 @and @attr GILS 1=2008 Washington @attr 1=21 weather FILES yaz-<version>/client/client.c $HOME/.yazclientrc $HOME/.yazclient.history SEE ALSO yaz 7 bib1-attr 7 YAZ 5.28.0 Index Data yaz-ztest 8 System management commands yaz-ztest Z39.50/SRU Test Server application listener-spec DESCRIPTION yaz-ztest is a Z39.50/SRU test server that uses the YAZ generic frontend server (GFS) API. The server acts as a real Z39.50/SRU server but does not use a database. It returns a random hit count and returns a subset of a few built-in records. The listener-spec consists of a transport mode followed by a colon, followed by a listener address. The transport mode is either tcp, unix, or ssl. For TCP and SSL, an address has the form: hostname | IP-number [ : portnumber ] For UNIX local socket, the address is the filename of the local socket. OPTIONS -a file Specify a file for dumping PDUs (for diagnostic purposes). The special name - (dash) sends output to stderr. -S Don't fork or make threads on connection requests. This is good for debugging, but not recommended for real operation: Although the server is asynchronous and non-blocking, it can be nice to keep a software malfunction (okay then, a crash) from affecting all current users. -1 Like -S but after one session the server exits. This mode is for debugging only. -T Operate the server in threaded mode. The server creates a thread for each connection rather than fork a process. Only available on UNIX systems that offer POSIX threads. -s Use the SR protocol (obsolete). -z Use the Z39.50 protocol (default). This option and -s complement each other. You can use both multiple times on the same command line, between listener-specifications (see below). This way, you can set up the server to listen for connections in both protocols concurrently, on different local ports. -l file The logfile. -c config A user option that serves as a specifier for some sort of configuration, usually a filename. The argument to this option is transferred to member configname of the statserv_options_block. -f vconfig This specifies an XML file that describes one or more YAZ frontend virtual servers. -C fname Sets SSL certificate file name for server (PEM). -v level The log level. Use a comma-separated list of members of the set {fatal,debug,warn,log,malloc,all,none}. -u uid Set user ID. Sets the real UID of the server process to that of the given user. It's useful if you aren't comfortable with having the server run as root, but you need to start it as such to bind a privileged port. -w dir The server changes to this directory before listening to incoming connections. This option is useful when the server is operating from the inetd daemon (see -i). -p pidfile Specifies that the server should write its Process ID to the file given by pidfile. A typical location would be /var/run/yaz-ztest.pid. -i Use this to make the the server run from the inetd server (UNIX only). -D Use this to make the server put itself in the background and run as a daemon. If neither -i nor -D is given, the server starts in the foreground. -install Use this to install the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel. -installa Use this to install the server as an NT service and mark it as "auto-start. Control the server by going to the Services in the Control Panel. -remove Use this to remove the server from the NT services (Windows NT/2000/XP only). -t minutes Idle session timeout, in minutes. -k size Maximum record size/message size, in kilobytes. -K Forces no-keepalive for HTTP sessions. By default GFS will keep sessions alive for HTTP 1.1 sessions (as defined by the standard). Using this option will force GFS to close the connection for each operation. -r size Maximum size of log file before rotation occurs, in kilobytes. Default size is 1048576 k (=1 GB). -d daemon Set name of daemon to be used in hosts access file. See hosts_access 5 and tcpd 8 . -m time-format Sets the format of time-stamps in the log-file. Specify a string in the input format to strftime(). -V Display YAZ version and exit. TESTING yaz-ztest normally returns a random hit count between 0 and 24. However, if a query term includes leading digits, then the integer value of that term is used as hit count. This allows testers to return any number of hits. yaz-ztest includes 24 MARC records for testing. Hit counts exceeding 24 will make yaz-ztest return the same record batch over and over. So record at position 1, 25, 49, etc. are equivalent. For XML, if no element set is given or element has value "marcxml", MARCXML is returned (each of the 24 dummy records converted from ISO2709 to XML). For element set OP, then OPAC XML is returned. yaz-ztest may also return predefined XML records (for testing). This is enabled if YAZ_ZTEST_XML_FETCH environment variable is defined. A record is fetched from a file (one record per file). The path for the filename is FE.d.xml where F is the YAZ_ZTEST_XML_FETCH value (possibly empty), E is element-set, d is record position (starting from 1). The following databases are honored by yaz-ztest: Default, slow and db.* (all databases with prefix "db"). Any other database will make yaz-ztest return diagnostic 109: "Database unavailable". Options for search may be included in the form or URL get arguments included as part of the Z39.50 database name. The following database options are present: search-delay, present-delay, fetch-delay and seed. The former, delay type options, specify a fake delay (sleep) that yaz-ztest will perform when searching, presenting, fetching records respectively. The value of the delay may either be a fixed floating point value which specifies the delay in seconds. Alternatively the value may be given as two floating point numbers separated by colon, which will make yaz-ztest perform a random sleep between the first and second number. The database parameter seed takes an integer as value. This will call srand with this integer to ensure that the random behavior can be re-played. Suppose we want searches to take between 0.1 and 0.5 seconds and a fetch to take 0.2 second. To access test database Default we'd use: Default?search-delay=0.1:0.5&fetch-delay=0.2. GFS CONFIGURATION AND VIRTUAL HOSTS The Virtual hosts mechanism allows a YAZ frontend server to support multiple backends. A backend is selected on the basis of the TCP/IP binding (port+listening address) and/or the virtual host. A backend can be configured to execute in a particular working directory. Or the YAZ frontend may perform CQL to RPN conversion, thus allowing traditional Z39.50 backends to be offered as a SRW/SRU service. SRW/SRU Explain information for a particular backend may also be specified. For the HTTP protocol, the virtual host is specified in the Host header. For the Z39.50 protocol, the virtual host is specified as in the Initialize Request in the OtherInfo, OID 1.2.840.10003.10.1000.81.1. Not all Z39.50 clients allow the VHOST information to be set. For those, the selection of the backend must rely on the TCP/IP information alone (port and address). The YAZ frontend server uses XML to describe the backend configurations. Command-line option -f specifies filename of the XML configuration. The configuration uses the root element yazgfs. This element includes a list of listen elements, followed by one or more server elements. The listen describes listener (transport end point), such as TCP/IP, Unix file socket or SSL server. Content for a listener: CDATA (required) The CDATA for the listen element holds the listener string, such as tcp:@:210, tcp:server1:2100, etc. attribute id (optional) Identifier for this listener. This may be referred to from server sections. We expect more information to be added for the listen section in a future version, such as CERT file for SSL servers. The server describes a server and the parameters for this server type. Content for a server: attribute id (optional) Identifier for this server. Currently not used for anything, but it might be for logging purposes. attribute listenref (optional) Specifies one or more listeners for this server. Each server ID is separated by a comma. If this attribute is not given, the server is accessible from all listeners. In order for the server to be used for real, however, the virtual host must match if specified in the configuration. element config (optional) Specifies the server configuration. This is equivalent to the config specified using command line option -c. element directory (optional) Specifies a working directory for this backend server. If specified, the YAZ frontend changes current working directory to this directory whenever a backend of this type is started (backend handler bend_start), stopped (backend handler hand_stop) and initialized (bend_init). element host (optional) Specifies the virtual host for this server. If this is specified a client must specify this host string in order to use this backend. element cql2rpn (optional) Specifies a filename that includes CQL to RPN conversion for this backend server. See . If given, the backend server will only "see" a Type-1/RPN query. element ccl2rpn (optional) Specifies a filename that includes CCL to RPN conversion for this backend server. See . If given, the backend server will only "see" a Type-1/RPN query. element stylesheet (optional) Specifies the stylesheet reference to be part of SRU HTTP responses when the client does not specify one. If none is given, then if the client does not specify one, then no stylesheet reference is part of the SRU HTTP response. element client_query_charset (optional) If specified, a conversion from the character set given to UTF-8 is performed by the generic frontend server. It is only executed for Z39.50 search requests (SRU/Solr are assumed to be UTF-8 encoded already). element docpath (optional) Specifies a path for local file access using HTTP. All URLs with a leading prefix (/ excluded) that matches the value of docpath are used for file access. For example, if the server is to offer access in directory xsl, the docpath would be xsl and all URLs of the form http://host/xsl will result in a local file access. element explain (optional) Specifies SRW/SRU ZeeRex content for this server. Copied verbatim to the client. As things are now, some of the Explain content seem redundant because host information, etc. is also stored elsewhere. element maximumrecordsize (optional) Specifies maximum record size/message size, in bytes. This value also serves as the maximum size of incoming packages (for Record Updates etc). It's the same value as that given by the -k option. element retrievalinfo (optional) Enables the retrieval facility to support conversions and specifications of record formats/types. See for more information. The XML below configures a server that accepts connections from two ports, TCP/IP port 9900 and a local UNIX file socket. We name the TCP/IP server public and the other server internal. <yazgfs> <listen id="public">tcp:@:9900</listen> <listen id="internal">unix:/var/tmp/socket</listen> <server id="server1"> <host>server1.mydomain</host> <directory>/var/www/s1</directory> <config>config.cfg</config> </server> <server id="server2" listenref="public,internal"> <host>server2.mydomain</host> <directory>/var/www/s2</directory> <config>config.cfg</config> <cql2rpn>../etc/pqf.properties</cql2rpn> <explain xmlns="http://explain.z3950.org/dtd/2.0/"> <serverInfo> <host>server2.mydomain</host> <port>9900</port> <database>a</database> </serverInfo> </explain> </server> <server id="server3" listenref="internal"> <directory>/var/www/s3</directory> <config>config.cfg</config> </server> </yazgfs> There are three configured backend servers. The first two servers, "server1" and "server2", can be reached by both listener addresses. "server1" is reached by all (two) since no listenref attribute is specified. "server2" is reached by the two listeners specified. In order to distinguish between the two, a virtual host has been specified for each server in the host elements. For "server2" elements for CQL to RPN conversion is supported and explain information has been added (a short one here to keep the example small). The third server, "server3" can only be reached via listener "internal". FILES yaz-<version>/ztest/yaz-ztest.c yaz-<version>/include/yaz/backend.h SEE ALSO yaz 7 yaz-log 7 YAZ 5.28.0 Index Data yaz-config 1 Commands yaz-config Script to get information about YAZ. yaz-config libraries DESCRIPTION yaz-config is a script that returns information that your own software should use to build software that uses YAZ. The following libraries are supported: threads Use the threaded version of YAZ. OPTIONS --prefix[=DIR] Returns prefix of YAZ or assume a different one if DIR is specified. --version Returns version of YAZ. --libs Library specification be used when using YAZ. --lalibs Return library specification. --cflags Return C Compiler flags. --include Return C compiler includes for YAZ header files (-Ipath). --comp Returns full path to YAZ' ASN.1 compiler: yaz-asncomp. -V Returns YAZ SHA1 ID (from Git) and version. FILES /usr/bin/yaz-config /usr/lib/libyaz*.a /usr/include/yaz/*.h SEE ALSO yaz(7) Section "How to make apps using YAZ on UNIX" in the YAZ manual. YAZ 5.28.0 Index Data yaz 7 Conventions and miscellaneous yaz Z39.50 toolkit. DESCRIPTION YAZ is a C/C++ programmer's toolkit supporting the development of Z39.50v3 clients and servers. The YAZ toolkit offers several different levels of access to the ISO23950/Z39.50, SRU Solr (client only) and ILL protocols. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement. COPYRIGHT Copyright © 1995-2019 Index Data. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SEE ALSO yaz-client 1 , yaz-ztest 8 , yaz-config 8 , zoomsh 1 bib1-attr 7 YAZ manual ( /usr/share/doc/yaz) YAZ home page. Z39.50 Maintenance Agency Page. YAZ 5.28.0 Index Data zoomsh 1 Commands zoomsh ZOOM shell zoomsh commands DESCRIPTION zoomsh is a ZOOM client with a simple command line interface. The client demonstrates the ZOOM API and is useful for testing targets. You may pass one or more commands to zoomsh. These commands are invoked first. OPTIONS -a apdufile Logs protocol packages into apdufile (APDU log). -e Makes zoomsh stop processing commands as soon as an error occur. The exit code of zoomsh is 1 if error occurs; 0 otherwise. -v loglevel Sets YAZ log level to loglevel. EXAMPLES If you start the yaz-ztest in one console you can use the ZOOM shell as follows: $ zoomsh ZOOM>connect localhost:9999 ZOOM>search computer localhost:9999: 7 hits ZOOM>show 0 1 1 Default USmarc 001 11224466 003 DLC 005 00000000000000.0 008 910710c19910701nju 00010 eng 010 $a 11224466 040 $a DLC $c DLC 050 00 $a 123-xyz 100 10 $a Jack Collins 245 10 $a How to program a computer 260 1 $a Penguin 263 $a 8710 300 $a p. cm. ZOOM>quit You can also achieve the same result by passing the commands as arguments on a single command line: $ zoomsh "connect localhost:9999" "search computer" "show 0 1" quit COMMANDS connect zurl Connects to the target given by zurl. close [zurl] Closes connection to target given by zurl or all targets if zurl was omitted. show [start [count]] Displays count records starting at offset given by start. First records has offset 0 (unlike the Z39.50 protocol). quit Quits zoomsh. set name [value] Sets option name to value. get name Prints value of option name. help Prints list of available commands. SEE ALSO yaz 7 , yaz-ztest 8 , Section "Building clients with ZOOM" in the YAZ manual. ZOOM home page. YAZ 5.28.0 Index Data yaz-asncomp 1 Commands yaz-asncomp YAZ ASN.1 compiler yaz-asncomp filename DESCRIPTION yaz-asncomp is an ASN.1 compiler that reads an ASN.1 specification in filename and produces C/C++ definitions and BER encoders/decoders for it. The produced C/C++ code and header files uses the ODR module of YAZ which is a library that encodes/decodes/prints BER packages. yaz-asncomp allows you to specify name of resulting source via options. Alternatively, you can specify a DEFINITIONS file, which provides customized output to many output files - if the ASN.1 specification file consists of many modules. This utility is written in Tcl. Any version of Tcl should work. OPTIONS -v Makes the ASN.1 compiler print more verbose about the various stages of operations. -c cfile Specifies the name of the C/C++ file with encoders/decoders. -h hfile Specifies the name of header file with definitions. -p pfile Specifies the name of the a private header file with definitions. By default all definitions are put in header file (option -h). -d dfile Specifies the name of a definitions file. -I iout Specifies first part of directory in which header files are written. -i idir Specifies second part of directory in which header files are written. -m module Specifies that ASN.1 compiler should only process the module given. If this option is not specified, all modules in the ASN.1 file are processed. DEFINITIONS FILE The definitions file is really a Tcl script but follows traditional rules for Shell like configuration files. That is # denotes the beginning of a comment. Definitions are line oriented. The definitions files usually consist of a series of variable assignments of the form: set name value Available variables are: default-prefix Sets prefix for names in the produced output. The value consists of three tokens: C function prefix, C typedef prefix and preprocessor prefix respectively. prefix(module) This value sets prefix values for module module. The value has same form as default-prefix. filename(module) Specifies filename for C/header file for module module. init(module,h) Code fragment to be put in first part of public header for module module. body(module,h) Code fragment to be put in last part of public header for module module (trailer). init(module,c) Code fragment to be put in first part of C based encoder/decoder for module module. body(module,c) Code fragment to be put in last part of C based encoder/decoder for module module (trailer). map(module,name) Maps ASN.1 type in module module of name to value. membermap(module,name,member) Maps member member in SEQUENCE/CHOICE of name in module module to value. The value consists of one or two tokens. First token is name of C preprocessor part. Second token is resulting C member name. If second token is omitted the value (one token) is both preprocessor part and C struct,union. unionmap(module,name,member) Maps member member in CHOICE of name in module module to value. Value consists of two or three tokens. The first token is name of the integer in the union that is used as selector for the union itself. The second token is name of the union. The third token overrides the name of the CHOICE member; if omitted the member name is used. FILES /usr/share/yaz/z39.50/z.tcl /usr/share/yaz/z39.50/*.asn SEE ALSO yaz 7 Section "The ODR Module" in the YAZ manual. YAZ 5.28.0 Index Data yaz-marcdump 1 Commands yaz-marcdump MARC record dump utility yaz-marcdump file DESCRIPTION yaz-marcdump reads MARC records from one or more files. It parses each record and supports output in line-format, ISO2709, MARCXML, MARC-in-JSON, MarcXchange as well as Hex output. This utility parses records ISO2709(raw MARC), line format, MARC-in-JSON format as well as XML if that is structured as MARCXML/MarcXchange. MARC-in-JSON encoding/decoding is supported in YAZ 5.0.5 and later. As of YAZ 2.1.18, OAI-MARC is no longer supported. OAI-MARC is deprecated. Use MARCXML instead. By default, each record is written to standard output in a line format with newline for each field, $x for each subfield x. The output format may be changed with option -o, yaz-marcdump can also be requested to perform character set conversion of each record. OPTIONS -i format Specifies input format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), turbomarc (Turbo MARC), or json (MARC-in-JSON). -o format Specifies output format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), turbomarc (Turbo MARC), or json (MARC-in-JSON). -f from Specify the character set of the input MARC record. Should be used in conjunction with option -t. Refer to the yaz-iconv man page for supported character sets. -t to Specify the character set of the output. Should be used in conjunction with option -f. Refer to the yaz-iconv man page for supported character sets. -l leaderspec Specify a simple modification string for MARC leader. The leaderspec is a list of pos=value pairs, where pos is an integer offset (0 - 23) for leader. Value is either a quoted string or an integer (character value in decimal). Pairs are comma separated. For example, to set leader at offset 9 to a, use 9='a'. -s prefix Writes a chunk of records to a separate file with prefix given, i.e. splits a record batch into files with only at most "chunk" ISO2709 records per file. By default chunk is 1 (one record per file). See option -C. -C chunksize Specifies chunk size; to be used conjunction with option -s. -p Makes yaz-marcdump print record number and input file offset of each record read. -n MARC output is omitted so that MARC input is only checked. -v Writes more information about the parsing process. Useful if you have ill-formatted ISO2709 records as input. -V Prints YAZ version. EXAMPLES The following command converts MARC21/USMARC in MARC-8 encoding to MARC21/USMARC in UTF-8 encoding. Leader offset 9 is set to 'a'. Both input and output records are ISO2709 encoded. yaz-marcdump -f MARC-8 -t UTF-8 -o marc -l 9=97 marc21.raw >marc21.utf8.raw The same records may be converted to MARCXML instead in UTF-8: yaz-marcdump -f MARC-8 -t UTF-8 -o marcxml marc21.raw >marcxml.xml Turbo MARC is a compact XML notation with same semantics as MARCXML, but which allows for faster processing via XSLT. In order to generate Turbo MARC records encoded in UTF-8 from MARC21 (ISO), one could use: yaz-marcdump -f MARC8 -t UTF8 -o turbomarc -i marc marc21.raw >out.xml FILES prefix/bin/yaz-marcdump prefix/include/yaz/marcdisp.h SEE ALSO yaz 7 yaz-iconv 1 YAZ 5.28.0 Index Data yaz-iconv 1 Commands yaz-iconv YAZ Character set conversion utility yaz-iconv file DESCRIPTION yaz-iconv converts data in the character set specified by from to output in the character set as specified by to. This yaz-iconv utility is similar to the iconv found on many POSIX systems (Glibc, Solaris, etc). If no file is specified, yaz-iconv reads from standard input. OPTIONS -ffrom] Specify the character set from of the input file. Should be used in conjunction with option -t. -tto] Specify the character set of of the output. Should be used in conjunction with option -f. -v Print more information about the conversion process. ENCODINGS The yaz-iconv command and the API as defined in yaz/yaz-iconv.h is a wrapper for the library system call iconv. But YAZ' iconv utility also implements conversions on its own. The table below lists characters sets (or encodings) that are supported by YAZ. Each character set is marked with either encode or decode. If an encoding is encode-enabled, YAZ may convert to the designated encoding. If an encoding is decode-enabled, YAZ may convert from the designated encoding. marc8 (encode, decode) The MARC8 encoding as defined by the Library of Congress. Most MARC21/USMARC records use this encoding. marc8s (encode, decode) Like MARC8 but conversion prefers non-combined characters in the Latin-1 plane over combined characters. marc8lossy (encode) Lossy encoding of MARC-8. marc8lossless (encode) Lossless encoding of MARC8. utf8 (encode, decode) The most commonly used UNICODE encoding on the Internet. iso8859-1 (encode, decode) ISO-8859-1, AKA Latin-1. iso5426 (decode) ISO 5426. Some MARC records (UNIMARC) use this encoding. iso5428:1984 (encode, decode) ISO 5428:1984. advancegreek (encode, decode) An encoding for Greek in use by some vendors (Advance). danmarc (decode) Danmarc (in danish) is an encoding based on UNICODE which is used for DanMARC2 records. EXAMPLES The following command converts from ISO-8859-1 (Latin-1) to UTF-8. yaz-iconv -f ISO-8859-1 -t UTF-8 <input.lst >output.lst FILES prefix/bin/yaz-iconv prefix/include/yaz/yaz-iconv.h SEE ALSO yaz(7) iconv(1) YAZ 5.28.0 Index Data yaz-log 7 Conventions and miscellaneous yaz-log Log handling in all yaz-based programs yaz-XXXX DESCRIPTION All YAZ-based programs use a common log subsystem, and should support common command line options for controlling it. This man page documents those. OPTIONS -l logfile Specify the file where the log is to be written. If none is specified, stderr is used. The log is appended to this file. If the file grows overly large, it is silently rotated: It is renamed to logfile.1, logfile.2, .., 9 (old such file is deleted), and a new file is opened. The limit defaults to 1GB, but can be set by the program. The rotating limit can be specified with option -r for the YAZ frontend server (yaz-ztest). Rotation can also be implicitly enabled by using a filename which gets changed for a given date, due to substitutions as given by the strftime(3) function. -v loglevel Specify the logging level. The argument is a set of log level names, separated by commas (no whitespace!), optionally preceded by a '-' to negate that level. Most programs have their own default, often containing fatal,warn,log, and some application-specific values. The default list can be cleared with the word none, or individual bits can be removed by prefixing them with a dash '-'. LOG LEVELS TO CONTROL LOGGING Some of the log levels control the way the log is written. flush causes the log to be flushed after every write. This can have serious implications to performance, and should not be used in production. On the other hand, when debugging a program crash, this can be extremely useful. The option debug implies flush as well. notime prevents the writing of time stamps. This is intended for automatic test scripts, which should produce predictable log files that are easy to compare. GENERAL LOG LEVELS IN YAZ ITSELF YAZ itself uses the following log levels: fatal for fatal errors, that prevent further execution of the program. warn for warnings about things that should be corrected. debug for debugging. This flag may be used temporarily when developing or debugging yaz, or a program that uses yaz. It is practically deprecated, you should be defining and using your own log levels (see below). all turns on almost all hard-coded log levels. loglevel logs information about the log levels used by the program. Every time the log level is changed, lists all bits that are on. Every time a module asks for its log bits, this is logged. This can be used for getting an idea of what log levels are available in any program that uses yaz-log. Start the program with -v none,loglevel, and do some common operations with it. Another way is to grep for yaz_log_module_level in the source code, as in find . -name '*.[ch]' -print | xargs grep yaz_log_module_level | grep '"' | cut -d'"' -f2 | sort -u eventl, malloc, nmem, odr are used internally for debugging yaz. LOG LEVELS FOR CLIENTS zoom logs the calls to the zoom API, which may be useful in debugging client applications. LOG LEVELS FOR SERVERS server logs the server functions on a high level, starting up, listening on a port, etc. session logs individual sessions (connections). request logs a one-liner for each request (init, search, etc.). requestdetail logs the details of every request, before it is passed to the back-end, and the results received from it. Each server program (zebra, etc.) is supposed to define its own log levels in addition to these. As they depend on the server in question, they can not be described here. See above how to find out about them. LOGGING EXAMPLES See what log levels yaz-ztest is using: yaz-ztest -1 -v none,loglevel 14:43:29-23/11 [loglevel] Setting log level to 4096 = 0x00001000 14:43:29-23/11 [loglevel] Static log bit 00000001 'fatal' is off 14:43:29-23/11 [loglevel] Static log bit 00000002 'debug' is off 14:43:29-23/11 [loglevel] Static log bit 00000004 'warn' is off 14:43:29-23/11 [loglevel] Static log bit 00000008 'log' is off 14:43:29-23/11 [loglevel] Static log bit 00000080 'malloc' is off 14:43:29-23/11 [loglevel] Static log bit 00000800 'flush' is off 14:43:29-23/11 [loglevel] Static log bit 00001000 'loglevel' is ON 14:43:29-23/11 [loglevel] Static log bit 00002000 'server' is off 14:43:29-23/11 [loglevel] Dynamic log bit 00004000 'session' is off 14:43:29-23/11 [loglevel] Dynamic log bit 00008000 'request' is off 14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session' 14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x2000 for 'server' 14:44:13-23/11 yaz-ztest [loglevel] returning NO log bit for 'eventl' 14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session' 14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x8000 for 'request' 14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'requestdetail' 14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'odr' 14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'ztest' See the details of the requests for yaz-ztest ./yaz-ztest -1 -v requestdetail 14:45:35-23/11 yaz-ztest [server] Adding static Z3950 listener on tcp:@:9999 14:45:35-23/11 yaz-ztest [server] Starting server ./yaz-ztest pid=32200 14:45:38-23/11 yaz-ztest [session] Starting session from tcp:127.0.0.1 (pid=32200) 14:45:38-23/11 yaz-ztest [requestdetail] Got initRequest 14:45:38-23/11 yaz-ztest [requestdetail] Id: 81 14:45:38-23/11 yaz-ztest [requestdetail] Name: YAZ 14:45:38-23/11 yaz-ztest [requestdetail] Version: 2.0.28 14:45:38-23/11 yaz-ztest [requestdetail] Negotiated to v3: srch prst del extendedServices namedresults scan sort 14:45:38-23/11 yaz-ztest [request] Init from 'YAZ' (81) (ver 2.0.28) OK 14:45:39-23/11 yaz-ztest [requestdetail] Got SearchRequest. 14:45:39-23/11 yaz-ztest [requestdetail] ResultSet '1' 14:45:39-23/11 yaz-ztest [requestdetail] Database 'Default' 14:45:39-23/11 yaz-ztest [requestdetail] RPN query. Type: Bib-1 14:45:39-23/11 yaz-ztest [requestdetail] term 'foo' (general) 14:45:39-23/11 yaz-ztest [requestdetail] resultCount: 7 14:45:39-23/11 yaz-ztest [request] Search Z: @attrset Bib-1 foo OK:7 hits 14:45:41-23/11 yaz-ztest [requestdetail] Got PresentRequest. 14:45:41-23/11 yaz-ztest [requestdetail] Request to pack 1+1 1 14:45:41-23/11 yaz-ztest [requestdetail] pms=1048576, mrs=1048576 14:45:41-23/11 yaz-ztest [request] Present: [1] 1+1 OK 1 records returned LOG FILENAME EXAMPLES A file with format my_YYYYMMDD.log (where Y, M, D is year, month, and day digits) is given as follows: -l my_%Y%m%d.log . And since the filename is depending on day, rotation will occur on midnight. A weekly log could be specified as -l my_%Y%U.log. FILES prefix/include/yaz/log.h prefix/src/log.c SEE ALSO yaz 7 yaz-ztest 8 yaz-client 1 strftime 3 YAZ 5.28.0 Index Data yaz-illclient 1 Commands yaz-illclient ILL client yaz-illclient name=value server-addr DESCRIPTION yaz-illclient is a client which sends an ISO ILL request to a remote server and decodes the response from it. Exactly one server address ( server-addr ) must be specified. OPTIONS -f filename] Specify filename. -v loglevel] Specify the log level. -D name=value] Defines name & value pair. -o Enable OCLC authentication. -u user] Specify user. -p password] Specify password. -V Show yaz-illclient version. EXAMPLES None yet. FILES None yet. SEE ALSO yaz(7) YAZ 5.28.0 Index Data yaz-icu 1 Commands yaz-icu YAZ ICU utility yaz-icu -c config -p opt -s -x infile DESCRIPTION yaz-icu is a utility which demonstrates the ICU chain module of yaz. (yaz/icu.h). The utility can be used in two ways. It may read some text using an XML configuration for configuring ICU and show text analysis. This mode is triggered by option -c which specifies the configuration to be used. The input file is read from standard input or from a file if infile is specified. The utility may also show ICU information. This is triggered by option -p. OPTIONS -c config Specifies the file containing ICU chain configuration which is XML based. -p type Specifies extra information to be printed about the ICU system. If type is c then ICU converters are printed. If type is l, then available locales are printed. If type is t, then available transliterators are printed. -s Specifies that output should include sort key as well. Note that sort key differs between ICU versions. -x Specifies that output should be XML based rather than "text" based. ICU chain configuration The ICU chain configuration specifies one or more rules to convert text data into tokens. The configuration format is XML based. The toplevel element must be named icu_chain. The icu_chain element has one required attribute locale which specifies the ICU locale to be used in the conversion steps. The icu_chain element must include elements where each element specifies a conversion step. The conversion is performed in the order in which the conversion steps are specified. Each conversion element takes one attribute: rule which serves as argument to the conversion step. The following conversion elements are available: casemap Converts case (and rule specifies how): l Lower case using ICU function u_strToLower. u Upper case using ICU function u_strToUpper. t To title using ICU function u_strToTitle. f Fold case using ICU function u_strFoldCase. display This is a meta step which specifies that a term/token is to be displayed. This term is retrieved in an application using function icu_chain_token_display (yaz/icu.h). transform Specifies an ICU transform rule using a transliterator Identifier. The rule attribute is the transliterator Identifier. See ICU Transforms for more information. transliterate Specifies a rule-based transliterator. The rule attribute is the custom transformation rule to be used. See ICU Transforms for more information. tokenize Breaks / tokenizes a string into components using ICU functions ubrk_open, ubrk_setText, .. . The rule is one of: l Line. ICU: UBRK_LINE. s Sentence. ICU: UBRK_SENTENCE. w Word. ICU: UBRK_WORD. c Character. ICU: UBRK_CHARACTER. t Title. ICU: UBRK_TITLE. join Joins tokens into one string. The rule attribute is the joining string, which may be empty. The join conversion element was added in YAZ 4.2.49. EXAMPLES The following command analyzes text in file text using ICU chain configuration chain.xml: cat text | yaz-icu -c chain.xml The chain.xml might look as follows: <icu_chain locale="en"> <transform rule="[:Control:] Any-Remove"/> <tokenize rule="w"/> <transform rule="[[:WhiteSpace:][:Punctuation:]] Remove"/> <transliterate rule="xy > z;"/> <display/> <casemap rule="l"/> </icu_chain> SEE ALSO yaz 7 ICU Home ICU Transforms YAZ 5.28.0 Index Data yaz-url 1 Commands yaz-url YAZ URL fetch utility yaz-url -H name:value -m method -O fname -p fname -R num -u user/password -v -x proxy url DESCRIPTION yaz-url is utility to get web content. It is very limited in functionality compared to programs such as curl, wget. The options must precede the URL given on the command line, to take effect. Fetched HTTP content is written to stdout, unless option -O is given. OPTIONS -H name:value Specifies HTTP header content with name and value. This option can be given multiple times (for different names, of course). -m method Specifies the HTTP method to be used for the next URL. Default is method "GET". However, option -p sets it to "POST". -O fname Sets output filename for HTTP content. -p fname Sets a file to be POSTed in the following URL. -R num Sets maximum number of HTTP redirects to be followed. A value of zero disables follow of HTTP redirects. -u user/password Specifies a user and a password to be used in HTTP basic authentication in the following URL fetch. The user and password must be separated by a slash (thus it is not possible to specify a user with a slash in it). -v Makes yaz-url dump each HTTP request/response to stdout. -x proxy Specifies a proxy to be used for URL fetch. SEE ALSO yaz 7 YAZ 5.28.0 Index Data Bib-1 Attribute Set 7 Conventions and miscellaneous bib1-attr Bib-1 Attribute Set DESCRIPTION This reference entry lists the Bib-1 attribute set types and values. TYPES The Bib-1 attribute set defines six attribute types: Use (1), Relation (2), Position (3), Structure (4), Truncation (5) and Completeness (6). USE (1) 1 Personal-name 2 Corporate-name 3 Conference-name 4 Title 5 Title-series 6 Title-uniform 7 ISBN 8 ISSN 9 LC-card-number 10 BNB-card-number 11 BGF-number 12 Local-number 13 Dewey-classification 14 UDC-classification 15 Bliss-classification 16 LC-call-number 17 NLM-call-number 18 NAL-call-number 19 MOS-call-number 20 Local-classification 21 Subject-heading 22 Subject-Rameau 23 BDI-index-subject 24 INSPEC-subject 25 MESH-subject 26 PA-subject 27 LC-subject-heading 28 RVM-subject-heading 29 Local-subject-index 30 Date 31 Date-of-publication 32 Date-of-acquisition 33 Title-key 34 Title-collective 35 Title-parallel 36 Title-cover 37 Title-added-title-page 38 Title-caption 39 Title-running 40 Title-spine 41 Title-other-variant 42 Title-former 43 Title-abbreviated 44 Title-expanded 45 Subject-precis 46 Subject-rswk 47 Subject-subdivision 48 Number-natl-biblio 49 Number-legal-deposit 50 Number-govt-pub 51 Number-music-publisher 52 Number-db 53 Number-local-call 54 Code-language 55 Code-geographic 56 Code-institution 57 Name-and-title 58 Name-geographic 59 Place-publication 60 CODEN 61 Microform-generation 62 Abstract 63 Note 1000 Author-title 1001 Record-type 1002 Name 1003 Author 1004 Author-name-personal 1005 Author-name-corporate 1006 Author-name-conference 1007 Identifier-standard 1008 Subject-LC-childrens 1009 Subject-name-personal 1010 Body-of-text 1011 Date/time-added-to-db 1012 Date/time-last-modified 1013 Authority/format-id 1014 Concept-text 1015 Concept-reference 1016 Any 1017 Server-choice 1018 Publisher 1019 Record-source 1020 Editor 1021 Bib-level 1022 Geographic-class 1023 Indexed-by 1024 Map-scale 1025 Music-key 1026 Related-periodical 1027 Report-number 1028 Stock-number 1030 Thematic-number 1031 Material-type 1032 Doc-id 1033 Host-item 1034 Content-type 1035 Anywhere 1036 Author-Title-Subject RELATION (2) 1 Less than 2 Less than or equal 3 Equal 4 Greater or equal 5 Greater than 6 Not equal 100 Phonetic 101 Stem 102 Relevance 103 AlwaysMatches POSITION (3) 1 First in field 2 First in subfield 3 Any position in field STRUCTURE (4) 1 Phrase 2 Word 3 Key 4 Year 5 Date (normalized) 6 Word list 100 Date (un-normalized) 101 Name (normalized) 102 Name (un-normalized) 103 Structure 104 Urx 105 Free-form-text 106 Document-text 107 Local-number 108 String 109 Numeric-string TRUNCATION (5) 1 Right truncation 2 Left truncation 3 Left and right truncation 100 Do not truncate 101 Process # in search term . regular #=.* 102 RegExpr-1 103 RegExpr-2 104 Process # ?n . regular: #=., ?n=.{0,n} or ?=.* Z39.58 Thw 105-106 truncation attributes below are only supported by Index Data's Zebra server. 105 Process * ! regular: *=.*, !=. and right truncate 106 Process * ! regular: *=.*, !=. COMPLETENESS (6) 1 Incomplete subfield 2 Complete subfield 3 Complete field SORTING (7) 1 ascending 2 descending Type 7 is an Index Data extension to RPN queries that allows embedding a sort critieria into a query. SEE ALSO Bib-1 Attribute Set Attribute Set Bib-1 Semantics. YAZ 5.28.0 Index Data yaz-json-parse 1 Commands yaz-json-parse YAZ JSON parser yaz-json-parse -p DESCRIPTION yaz-json-parse is a utility which demonstrates the JSON API of YAZ. (yaz/json.h). The program attempts to parse a JSON from standard input (stdin). It will return exit code 1 if parsing fails and the parsing error message will be printed to standard error (stderr). The program returns exit code 0 if parsing succeeds, and returns no output unless -p is given (see below). OPTIONS -p Makes the JSON parser echo the JSON result string to standard output, if parsing from stdin was successful. If -p is given twice, then the output is a multi-line output with indentation (pretty print). SEE ALSO yaz 7 YAZ 5.28.0 Index Data yaz-record-iconv 1 Commands yaz-record-conv YAZ Record Conversion Utility yaz-record-conv config fname DESCRIPTION yaz-record-conv is a program that exercises the record conversion sub system. Refer to record_conv.h header. OPTIONS -v level Sets the LOG level to level. Level is a sequence of tokens separated by comma. Each token is a integer or a named LOG item - one of fatal, debug, warn, log, malloc, all, none. EXAMPLES The following backend configuration converts MARC records (ISO2709) to Dublin-Core XML. <backend name="F" syntax="usmarc"> <marc inputcharset="marc-8" inputformat="marc" outputformat="marcxml"/> <xslt stylesheet="../etc/MARC21slim2DC.xsl"/> </backend> We can convert one of the sample records from YAZ' test directory with: $ ../util/yaz-record-conv record-conv-conf.xml marc6.marc <?xml version="1.0"?> <dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:title>How to program a computer</dc:title> <dc:creator> Jack Collins </dc:creator> <dc:type>text</dc:type> <dc:publisher>Penguin</dc:publisher> <dc:language>eng</dc:language> </dc:dc> FILES record_conv.h SEE ALSO yaz(7) yaz-5.28.0/doc/yaz-iconv.10000644000175000017500000001021313570011157012075 00000000000000'\" t .\" Title: yaz-iconv .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: Commands .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "YAZ\-ICONV" "1" "11/28/2019" "YAZ 5.28.0" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-iconv \- YAZ Character set conversion utility .SH "SYNOPSIS" .HP \w'\fByaz\-iconv\fR\ 'u \fByaz\-iconv\fR [\fB\-f\ \fR\fB\fIfrom\fR\fR] [\fB\-t\ \fR\fB\fIto\fR\fR] [\fB\-v\fR] [file...] .SH "DESCRIPTION" .PP \fByaz\-iconv\fR converts data in the character set specified by \fIfrom\fR to output in the character set as specified by \fIto\fR\&. .PP This \fByaz\-iconv\fR utility is similar to the \fBiconv\fR found on many POSIX systems (Glibc, Solaris, etc)\&. .PP If no \fIfile\fR is specified, \fByaz\-iconv\fR reads from standard input\&. .SH "OPTIONS" .PP \-f\fIfrom\fR] .RS 4 Specify the character set \fIfrom\fR of the input file\&. Should be used in conjunction with option \-t\&. .RE .PP \-t\fIto\fR] .RS 4 Specify the character set \fIof\fR of the output\&. Should be used in conjunction with option \-f\&. .RE .PP \-v .RS 4 Print more information about the conversion process\&. .RE .SH "ENCODINGS" .PP The yaz\-iconv command and the API as defined in yaz/yaz\-iconv\&.h is a wrapper for the library system call iconv\&. But YAZ\*(Aq iconv utility also implements conversions on its own\&. The table below lists characters sets (or encodings) that are supported by YAZ\&. Each character set is marked with either \fIencode\fR or \fIdecode\fR\&. If an encoding is encode\-enabled, YAZ may convert \fIto\fR the designated encoding\&. If an encoding is decode\-enabled, YAZ may convert \fIfrom\fR the designated encoding\&. .PP marc8 (encode, decode) .RS 4 The \m[blue]\fBMARC8\fR\m[]\&\s-2\u[1]\d\s+2 encoding as defined by the Library of Congress\&. Most MARC21/USMARC records use this encoding\&. .RE .PP marc8s (encode, decode) .RS 4 Like MARC8 but conversion prefers non\-combined characters in the Latin\-1 plane over combined characters\&. .RE .PP marc8lossy (encode) .RS 4 Lossy encoding of MARC\-8\&. .RE .PP marc8lossless (encode) .RS 4 Lossless encoding of MARC8\&. .RE .PP utf8 (encode, decode) .RS 4 The most commonly used UNICODE encoding on the Internet\&. .RE .PP iso8859\-1 (encode, decode) .RS 4 ISO\-8859\-1, AKA Latin\-1\&. .RE .PP iso5426 (decode) .RS 4 ISO 5426\&. Some MARC records (UNIMARC) use this encoding\&. .RE .PP iso5428:1984 (encode, decode) .RS 4 ISO 5428:1984\&. .RE .PP advancegreek (encode, decode) .RS 4 An encoding for Greek in use by some vendors (Advance)\&. .RE .PP danmarc (decode) .RS 4 \m[blue]\fBDanmarc (in danish)\fR\m[]\&\s-2\u[2]\d\s+2 is an encoding based on UNICODE which is used for DanMARC2 records\&. .RE .SH "EXAMPLES" .PP The following command converts from ISO\-8859\-1 (Latin\-1) to UTF\-8\&. .sp .if n \{\ .RS 4 .\} .nf yaz\-iconv \-f ISO\-8859\-1 \-t UTF\-8 output\&.lst .fi .if n \{\ .RE .\} .sp .SH "FILES" .PP \fIprefix\fR/bin/yaz\-iconv .PP \fIprefix\fR/include/yaz/yaz\-iconv\&.h .SH "SEE ALSO" .PP yaz(7) iconv(1) .SH "AUTHORS" .PP \fBIndex Data\fR .SH "NOTES" .IP " 1." 4 MARC8 .RS 4 \%https://www.loc.gov/marc/specifications/speccharmarc8.html .RE .IP " 2." 4 Danmarc (in danish) .RS 4 \%http://www.kat-format.dk/danMARC2/Danmarc2.4.htm .RE yaz-5.28.0/doc/yaz-icu-man.xml0000644000175000017500000001720313265142510012755 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-icu 1 Commands yaz-icu YAZ ICU utility yaz-icu -c config -p opt -s -x infile DESCRIPTION yaz-icu is a utility which demonstrates the ICU chain module of yaz. (yaz/icu.h). The utility can be used in two ways. It may read some text using an XML configuration for configuring ICU and show text analysis. This mode is triggered by option -c which specifies the configuration to be used. The input file is read from standard input or from a file if infile is specified. The utility may also show ICU information. This is triggered by option -p. OPTIONS -c config Specifies the file containing ICU chain configuration which is XML based. -p type Specifies extra information to be printed about the ICU system. If type is c then ICU converters are printed. If type is l, then available locales are printed. If type is t, then available transliterators are printed. -s Specifies that output should include sort key as well. Note that sort key differs between ICU versions. -x Specifies that output should be XML based rather than "text" based. ICU chain configuration The ICU chain configuration specifies one or more rules to convert text data into tokens. The configuration format is XML based. The toplevel element must be named icu_chain. The icu_chain element has one required attribute locale which specifies the ICU locale to be used in the conversion steps. The icu_chain element must include elements where each element specifies a conversion step. The conversion is performed in the order in which the conversion steps are specified. Each conversion element takes one attribute: rule which serves as argument to the conversion step. The following conversion elements are available: casemap Converts case (and rule specifies how): l Lower case using ICU function u_strToLower. u Upper case using ICU function u_strToUpper. t To title using ICU function u_strToTitle. f Fold case using ICU function u_strFoldCase. display This is a meta step which specifies that a term/token is to be displayed. This term is retrieved in an application using function icu_chain_token_display (yaz/icu.h). transform Specifies an ICU transform rule using a transliterator Identifier. The rule attribute is the transliterator Identifier. See ICU Transforms for more information. transliterate Specifies a rule-based transliterator. The rule attribute is the custom transformation rule to be used. See ICU Transforms for more information. tokenize Breaks / tokenizes a string into components using ICU functions ubrk_open, ubrk_setText, .. . The rule is one of: l Line. ICU: UBRK_LINE. s Sentence. ICU: UBRK_SENTENCE. w Word. ICU: UBRK_WORD. c Character. ICU: UBRK_CHARACTER. t Title. ICU: UBRK_TITLE. join Joins tokens into one string. The rule attribute is the joining string, which may be empty. The join conversion element was added in YAZ 4.2.49. EXAMPLES The following command analyzes text in file text using ICU chain configuration chain.xml: cat text | yaz-icu -c chain.xml The chain.xml might look as follows: ]]> SEE ALSO yaz 7 ICU Home ICU Transforms yaz-5.28.0/doc/yaz-asncomp.10000644000175000017500000001263613570011156012431 00000000000000'\" t .\" Title: yaz-asncomp .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 11/28/2019 .\" Manual: Commands .\" Source: YAZ 5.28.0 .\" Language: English .\" .TH "YAZ\-ASNCOMP" "1" "11/28/2019" "YAZ 5.28.0" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-asncomp \- YAZ ASN\&.1 compiler .SH "SYNOPSIS" .HP \w'\fByaz\-asncomp\fR\ 'u \fByaz\-asncomp\fR [\fB\-v\fR] [\fB\-c\ \fR\fB\fIcfile\fR\fR] [\fB\-h\ \fR\fB\fIhfile\fR\fR] [\fB\-p\ \fR\fB\fIpfile\fR\fR] [\fB\-d\ \fR\fB\fIconfig\fR\fR] [\fB\-I\ \fR\fB\fIincludeout\fR\fR] [\fB\-i\ \fR\fB\fIincludedir\fR\fR] [\fB\-m\ \fR\fB\fImodule\fR\fR] [filename] .SH "DESCRIPTION" .PP \fByaz\-asncomp\fR is an ASN\&.1 compiler that reads an ASN\&.1 specification in \fIfilename\fR and produces C/C++ definitions and BER encoders/decoders for it\&. .PP The produced C/C++ code and header files uses the ODR module of YAZ which is a library that encodes/decodes/prints BER packages\&. \fByaz\-asncomp\fR allows you to specify name of resulting source via options\&. Alternatively, you can specify a DEFINITIONS file, which provides customized output to many output files \- if the ASN\&.1 specification file consists of many modules\&. .PP This utility is written in Tcl\&. Any version of Tcl should work\&. .SH "OPTIONS" .PP \-v .RS 4 Makes the ASN\&.1 compiler print more verbose about the various stages of operations\&. .RE .PP \-c \fIcfile\fR .RS 4 Specifies the name of the C/C++ file with encoders/decoders\&. .RE .PP \-h \fIhfile\fR .RS 4 Specifies the name of header file with definitions\&. .RE .PP \-p \fIpfile\fR .RS 4 Specifies the name of the a private header file with definitions\&. By default all definitions are put in header file (option \-h)\&. .RE .PP \-d \fIdfile\fR .RS 4 Specifies the name of a definitions file\&. .RE .PP \-I \fIiout\fR .RS 4 Specifies first part of directory in which header files are written\&. .RE .PP \-i \fIidir\fR .RS 4 Specifies second part of directory in which header files are written\&. .RE .PP \-m \fImodule\fR .RS 4 Specifies that ASN\&.1 compiler should only process the module given\&. If this option is not specified, all modules in the ASN\&.1 file are processed\&. .RE .SH "DEFINITIONS FILE" .PP The definitions file is really a Tcl script but follows traditional rules for Shell like configuration files\&. That is # denotes the beginning of a comment\&. Definitions are line oriented\&. The definitions files usually consist of a series of variable assignments of the form: .PP set \fIname\fR \fIvalue\fR .PP Available variables are: .PP default\-prefix .RS 4 Sets prefix for names in the produced output\&. The value consists of three tokens: C function prefix, C typedef prefix and preprocessor prefix respectively\&. .RE .PP prefix(\fImodule\fR) .RS 4 This value sets prefix values for module \fImodule\fR\&. The value has same form as default\-prefix\&. .RE .PP filename(\fImodule\fR) .RS 4 Specifies filename for C/header file for module \fImodule\fR\&. .RE .PP init(\fImodule\fR,h) .RS 4 Code fragment to be put in first part of public header for module \fImodule\fR\&. .RE .PP body(\fImodule\fR,h) .RS 4 Code fragment to be put in last part of public header for module \fImodule\fR (trailer)\&. .RE .PP init(\fImodule\fR,c) .RS 4 Code fragment to be put in first part of C based encoder/decoder for module \fImodule\fR\&. .RE .PP body(\fImodule\fR,c) .RS 4 Code fragment to be put in last part of C based encoder/decoder for module \fImodule\fR (trailer)\&. .RE .PP map(\fImodule\fR,\fIname\fR) .RS 4 Maps ASN\&.1 type in module \fImodule\fR of \fIname\fR to value\&. .RE .PP membermap(\fImodule\fR,\fIname\fR,\fImember\fR) .RS 4 Maps member \fImember\fR in SEQUENCE/CHOICE of \fIname\fR in module \fImodule\fR to value\&. The value consists of one or two tokens\&. First token is name of C preprocessor part\&. Second token is resulting C member name\&. If second token is omitted the value (one token) is both preprocessor part and C struct,union\&. .RE .PP unionmap(\fImodule\fR,\fIname\fR,\fImember\fR) .RS 4 Maps member \fImember\fR in CHOICE of \fIname\fR in module \fImodule\fR to value\&. Value consists of two or three tokens\&. The first token is name of the integer in the union that is used as selector for the union itself\&. The second token is name of the union\&. The third token overrides the name of the CHOICE member; if omitted the member name is used\&. .RE .SH "FILES" .PP /usr/share/yaz/z39\&.50/z\&.tcl .PP /usr/share/yaz/z39\&.50/*\&.asn .SH "SEE ALSO" .PP \fByaz\fR(7) .PP Section "The ODR Module" in the YAZ manual\&. .SH "AUTHORS" .PP \fBIndex Data\fR yaz-5.28.0/doc/NEWS0000644000175000017500000046321513570015614010613 00000000000000--- 5.28.0 2019/11/28 Element-set is case sensitive for yaz_retrieval. The element-set name should be case insensitive, and thus, the name property is matched in a case-insensive mannner. YAZ-922 --- 5.27.2 2019/10/07 Fix hitting directory for docpath results in malloc failure YAZ-921 Fix attempt to write HTTP to a non-listening socket loops YAZ-919 Fix yaz-ztest SSL does not work when forking YAZ-918 --- 5.27.1 2018/12/03 Use pkg-config to detect ICU . Closes #41 Describe ZOOM option timeout Fix typos in yaz-client man page and other typos --- 5.27.0 2018/10/08 GFS: Allow External type TaskPackage response YAZ-915 zoomsh: fset command YAZ-916 Improve logging of extended service task type YAZ-914 yaz-client: document the third arg to the show command #37 --- 5.26.1 2018/07/11 Fix segv with element-set=null and split YAZ-913 --- 5.26.0 2018/07/09 Allow suffix split for retrieval element-set names YAZ-912 cql2ccl: case sensitive comparisons for ops etc YAZ-911 --- 5.25.0 2018/05/04 ZOOM C: return extended services diagnostics separately YAZ-908 The diagnostic code and additional info is saved in options esError and esAddinfo respectively - as part of the ZOOM package. --- 5.24.0 2018/04/25 New option for ZOOM C' record update: recordIdString (the string variant of recordId). Until now only recordIdNumber and recordIdOpaque was possible. YAZ-907 Update for Visual Studio 2017. Bundle runtime from that compiler. YAZ-905 yaz FTCBFS: uses the build architecture pkg-config YAZ-897 --- 5.23.1 2017/09/04 Fix Omitted Content-Length not handled anymore YAZ-894 This issue was introduced by work in YAZ-878 YAZ Version 5.20.0. --- 5.23.0 2017/08/04 Allow for more Solr URL schemas YAZ-893 If the Solr URL contains ? it will be treated as a URL that includes request handler rather than hard-coded /select. For example /solr/search? . You can also pass own arguments. For example /solr/search?foo=bar . --- 5.22.0 2017/05/30 rdf-lookup: Add timeout configuration option YAZ-891 Add yaz_url_set_timeout rdf-lookup: report error if X-Path cannot be compiled YAZ-890 --- 5.21.1 2017/05/08 Fix a number of minor issues #24, #25, #26, #27 Package for Debian Stretch. Stop support for CentOS 5. yaz_prox_unit_name returns const char --- 5.21.0 2017/03/31 cql2pqf: relation modifiers with name and value are converted to proximity with unit=element. Left operand is the the primary index and term. Right operand is attribute index-name mapping of name and value being the relation modifier value. For example, dc.title =/dc.language=dk kirke could be mapped to @prox 0 0 0 0 k 8 @attr 1=4 "kirke" @attr 1=54 dk rdf-lookup: avoid double dash in generated XML comments Add ProximityUnit map to/from string utility New functions z_ProxUnit_to_str and z_str_to_ProxUnit. Add wrbuf_puts_replace_str --- 5.20.3 2017/03/27 rdf-lookup: fix misleading log on rdf-failures YAZ-884 The HTTP response is only logged if - after removing leading whitespace - it is non-empty. rdf-lookup failures are always logged via yaz_log at level YLOG_LOG. As before XML comments are controlled by the debug property. --- 5.20.2 2017/02/20 Add documentation for tag in xslt retrieval facility doc comstack: Pass portable value to shutdown comstack: Fix compilation error if getaddrinfo does not exist --- 5.20.1 2017/01/13 DLL export wrbuf_malloc_info Fix typo in yaz-record-conv man page Describe "method" attribute for rdf-lookup --- 5.20.0 2017/01/10 yaz-url: ignore content-length for HTTP method HEAD YAZ-878 retrieval: fix incorrect backend schema YAZ-877. Should fix https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=17871 record_conv: allow HTTP method to be set for authority lookup --- 5.19.2 2016/12/29 Do not use hiredis anymore on CentOS 6&7. --- 5.19.1 2016/12/29 Declare API 5.18.0. --- 5.19.0 2016/12/16 New type, rdf-lookup, for record conversion system (retrieval) yaz-record-conv now installed and packaged Fix yaz_url_exec sending same uri for 2nd call JSON: to the spec check of number JSON: strict \uxxxx sequence JSON: fail for nesting more than 1000 levels The parser is recursive - so this is better than stack overflow. JSON: distinguish between EOF and error --- 5.18.0 2016/10/17 Omitted MARXML indicator defaults to " " again This was the behavior until 5.16.0 which added multi-byte indicator support. Only include malloc.h if malloc_info is present. Closes #13 Fixes compilation on macOS Add nmem_get_status which returns memory status for NMEM --- 5.17.0 2016/10/04 Add wrbuf_malloc_info - a wrapper for malloc_info(3) Beef up documentation on facets record_conv: change error for unsupported backend element Also fixes regression in the case where Libxslt is disabled and Libxml2 is enabled. Avoid strlen on MARC buffer. Close YAZ-872 MARC buffer memory is not 0-terminated. --- 5.16.0 2016/04/29 Allow multi-byte indicators for MARC subsystem. GitHub #11. --- 5.15.3 2016/04/06 Fix yaz_query2xml aborts for attribute type 0. GitHub #9. backtrace: exit with same signal as original fired Until now with backtrace any signal would end up being an SIGABRT. backtrace: cancel alarm if backtrace succeeds This is to avoid "backtrace hangs" message that should not be printed and gdb be invoked twice. Fix some broken URLs in documentation and code. yaz_marc_write_iso2709: truncate if 99,999 limit is reached. --- 5.15.2 2016/01/11 Re-organize Windows build. Use ICU compiled with VS 2015 to use same runtime as rest of components (YAZ, Libxml2, etc). Move YAZ and many other software components to GitHub. --- 5.15.1 2015/11/12 Bundle sha1 rather than use libgcrypt/nettle. This means that configure no longer accepts --with-gcrypt and --with-nettle. Fix rpn2cql fails for Bib-1 set in qry+conf YAZ-865 --- 5.15.0 2015/11/11 CCL: fix r=o, r=r WRT inherited attributes YAZ-864 --- 5.14.12 2015/11/09 Build with nettle on Debian/Ubuntu test system calls yaz_deinit_globals for better memory leak detection cs_get_host_args: allow unix:path:args notation Windows: build YAZ with VC 2015 and bundle it with runtime version 14.0.23026. --- 5.14.11 2015/10/09 Fix RPN to CQL rejects local Bib-1 attribute set YAZ-861 ZOOM C: tweak when connection failed is returned For cases with multiple socket addresses for some hostname, eg localhost IPV4+IPV6, the code now properly returns "connection failed" rather than "connection lost". Various minor documenation tweaks from David Crossley. Thanks. Fix windows uninstall does not remove start menu shortcuts YAZ-860 --- 5.14.10 2015/09/16 Prevent huge expansions in CCL s=sl YAZ-859 --- 5.14.9 2015/09/15 Fix segv in ZOOM_connection_fire_event_socket YAZ-858 The odr_in memory taken by handle_srw_response, and, thus if result set is destructed before we expect the HTTP response (hres) it may be come invalid. Therefore we inspect hres before the call to ZOOM_handle_sru. Fix possible deadlock in backtrace (2nd attempt) YAZ-856 An alarm is set up so that backtrace is terminated if it hangs. Even if backtrace the handler also attempts to spawn gdb. --- 5.14.8 2015/09/14 Fix SEGV for s=sl for 3 terms and syntax error YAZ-857 --- 5.14.7 2015/09/13 Fix possible deadlock in backtrace YAZ-856 Various minor text tweaks in documentation --- 5.14.6 2015/08/17 Fix yaz-client command args parsing broken YAZ-855 Bug introduced in 5be87e7a04c7219b31cefc0a3 - version 5.14.5 --- 5.14.5 2015/08/06 Stop building packages for obsolete Debian squeeze and use DH version 9. YAZ-854 rpn2cql diagnostics: provide use attribute addinfo YAZ-853 deb: deprecated substitution ${Source-Version} YAZ-852 Fix yaz-client: semicolon terminates arguments YAZ-851 --- 5.14.4 2015/07/29 Windows: Bundle VC runtime exe YAZ-848 Omit Content-Type for HTTP requests to Solr YAZ-850 --- 5.14.3 2015/06/29 Fix rpn2cql: structure, relation problem for serverChoice YAZ-849 Problem was that for things mapped to cql.serverChoice the relation would sometimes be omitted when it should not. Eg for relation "all". --- 5.14.2 2015/06/15 Document zoom extraArgs YAZ-817 Fix ZOOM: crash extended services diagnostics YAZ-846 The immediate fix is to prevent ZOOM_set_dset_error from removing current task from connection. This, however, has been assumed in a number of places so this fix is rather large unfortunately. --- 5.14.1 2015/06/11 Make yaz_log_reopen async-signal YAZ-845 Fixes potential dead-lock issue with YAZ_DAEMON_LOG_REOPEN flags for daemon API. --- 5.14.0 2015/06/08 CCL: new feature s=spl (split-list) that splits terms in a search into sub-phrases of all sizes (from 1 up to the number of terms) with order preserved. For 3 terms the CCL search a b c is turned into PQF: @or @or @or @and @and a b c @and "a b" c @and a "b c" "a b c" Solr: don't set defType=lucene in URLs if extraArgs already defines it. --- 5.13.0 2015/05/29 Add lock/unlock for YAZ log writes YAZ-843 --- 5.12.2 2015/05/22 Fix incorrect parsing of URLs @:9999/somebase&url=http://some.host YAZ-842 --- 5.12.1 2015/05/13 yaz-client: deal with excess bytes HTTPS case YAZ-833 ZOOM C: deal with excess bytes HTTPS case YAZ-833 Allow Windows installer for PATH to be updated YAZ-841 Add Ubuntu Vivid 15.04 to list of Deb's to built --- 5.12.0 2015/05/08 Allow Content-Type application/sru+xml YAZ-840 New yaz_xml_get_prop utility YAZ-839 Fix zebrasrv [warn] ir_session (exception) YAZ-838 Document itemorder-setname and list all ILL options --- 5.11.0 2015/03/31 Extend get_org_info (snippets) to return original string YAZ-836 Two new functions have appeared: icu_chain_get_org_info2 and icu_iter_get_org_info2 with a 4th parameter being a pointer to the original string. Fix tcpip.c compilation failure on VC9 YAZ-835 Fix icu_iter_get_norm returns invalid size for some input YAZ-834 The icu_iter_get_org_info returns information based on string as it appears on tokenize step. --- 5.10.2 2015/03/13 Deal with excess bytes in HTTP response for keepalive YAZ-830 Refactor ssl_put and tcpip_put to one function YAZ-832 Refactor ssl_get and tcpip_get to one function YAZ-831 Fix SEGV yaz-client for HTTP decoding error YAZ-829 Fix buffer overflow in cmd_elements in yaz-client YAZ-828 --- 5.10.1 2015/03/03 Fix test_sru.sh fails in pazpar2 YAZ-826 Unfortunately a regression occurred with YAZ 5.10.0 that would make Pazpar2 fail for HTTP connections. --- 5.10.0 2015/03/03 Use CONNECT for SSL backends and for Z39.50 thru HTTP proxy YAZ-825 Introduce cs_create_host2 which returns if connection should be proxy aware (HTTP:absoluteUri or Z39.50 proxy:vhost in init).. For CONNECT, the connection is NOT proxy aware (no absoluteUri and no Z39.50 vhost). Fix http proxy fails with yaz-client YAZ-824 --- 5.9.1 2015/02/06 Fix 0 ptr reference for OPAC records from XML YAZ-822 --- 5.9.0 2015/02/02 Extend yaz daemon facility to assist int log rotation YAZ-818 YAZ-819 --- 5.8.1 2015/01/13 record conv: 'select' return org record if no x-path match YAZ-814 retrieval: pick matched element-set rule YAZ-813 Fix crash in record conv rule 'select' YAZ-812 --- 5.8.0 2015/01/09 record_conv: selection by X-Path YAZ-811 That's a new step in record conversion system () Document record render parameters for ZOOM - including base64 --- 5.7.3 2015/01/06 Fix application/x-www-form-urlencoded + empty YAZ-810 A SEGV occurred if Content-Type was "application/x-www-form-urlencoded" and empty content was supplied. Fix yaz-iconv man page for typos and incorrect example. YAZ-809 Fail hard if Bison is not found and is needed YAZ-808 --- 5.7.2 2014/12/16 Enable YAZ backtrace for programs YAZ-802 Update NMAKE makefile to use Visual Studio 2013 along with ICU 54.1, Libxml2 2.9.2, Libxslt 1.1.28. Fix daemon: parent process stops before child YAZ-806 Try to fix the situation where parent process stops before child has acknowledged it .. SIGUSR2 back! daemon: log message when keepalive stops. --- 5.7.1 2014/12/03 Fix yaz-marcdump segfault YAZ-801. Problem in YAZ 5.6.0/5.7.0 and would make yaz-marcdump crash when from-character set was issued. --- 5.7.0 2014/11/24 Dump backtrace in case of SIGABRT, SIGSEGV YAZ-787 New function yaz_enable_panic_backtrace which enables backtrace handler for current process. The handler will call backtrace always, then gdb to provide as much detail as possible. --- 5.6.0 2014/11/17 When marc-8 charset is specified when decoding MARC records, yaz-marcdump and ZOOM record render will inspect leader 9 and switch to UTF-8 (Unicode) if that holds 'a'. This changes behavior, but is considered safe because only MARC21 with leader 9='a' are Unicode. YAZ-800 Fix cs_put may reconnect if send fails. YAZ-798 --- 5.5.1 2014/11/03 Fix cannot build YAZ on jessie : libgnutls-dev is gone YAZ-797 --- 5.5.0 2014/10/27 Extended comstack with outgoing IP YAZ-795. For cs_create_host + cs_create_host_proxy the vhost may be followed by a outgoing host/IP. Separator is blank. --- 5.4.4 2014/10/20 Add YAZ_EXPORT to cql_transform_r fixes YAZ-793 . This issue fixes linker error with yazpp on Windows. --- 5.4.3 2014/10/08 Fix uri array may overflow in yaz_solr_encode_request YAZ-775 Fix PQF to Solr conversion may produce invalid Solr query YAZ-792 0 ptr reference in handling Solr response with error YAZ-791 Fix annoying warning about wrbuf_putc on newer GCC YAZ-789 Fix documentation about --installa option YAZ-788 --- 5.4.2 2014/08/26 daemon: properly report when receiving SIGUSR2 from child YAZ-785 --- 5.4.1 2014/08/21 xmalloc: throw assert for clearly invalid calls to malloc and improve diagnostics YAZ-783 YAZ-784 --- 5.4.0 2014/08/19 Stop building debs for Ubuntu raring, quantal, oneiric. CCL YAZ-781: for multiple use attributes in a specification the generated RPN will perform @or on each term. For spec: term u=31 u=1016 the CCL: t will generate: @or @attr 1=31 t @attr 1=1016 t log YAZ-780: avoid mixed log files by perform only one write(2) per log entry. CCL YAZ-779: combo qualifier should allow for forward references Fix buildconf.sh, automake too old on centos5 YAZ-778 Achieved by adding AM_PROG_CC_C_O and requiring AM 1.9 instead. The AM_PROG_CC_C_O is obsolete for newer AM, but 1.14 (Debian jessie) accepts it without a warning. --- 5.3.0 2014/07/11 GFS: client_query_charset conversion YAZ-777 This is a feature for Z39.50 clients that sends queries that are not UTF-8 encoded. WIth client_query_charset, GFS will convert from the encoding given to UTF-8. Echoed SRU arguments support YAZ-776 This is achieved with new function yaz_srw_get_pdu_e. ZOOM: expire times set for redis/memcached YAZ-772 For both redis and memcached option --expire=seconds sets expire time for a result-set/search. Default time is 600 seconds (10 minutes). --- 5.2.1 2014/06/26 No [rest of output is omitted] limit for yaz_log YAZ-774 Optimize icu_iter_get_org_info. Reduce calls to u_strToUTF8. For ICU testing, pass -o to yaz-icu. This will test the icu_iter_get_org_info function. Fix null ptr reference for freeReplyObject YAZ-773 --- 5.2.0 2014/06/12 Allow ZOOM caching using redis. New ZOOM option "redis" controls it. RPM: do not build with libmemcached support. The libmemcached library on CentOS 5/6 does not work reliably for us (redis to the rescue). configure: only allow libmemcached version 0.40 or later. That's the version on Debian squeeze. We recommend libmemcached version 1.0 or later. If that's not an option, consider redis. --- 5.1.3 2014/06/04 Fix dup ZOOM_EVENT_RECV_RECORD events for SRU/Solr YAZ-768 Fix zoom+memcached: present request out of range YAZ-767 --- 5.1.2 2014/05/30 CCL: add new qualifier r=omiteq which will omit relation=equals for ordered relations. This should be used in combination with either r=r or r=o. YAZ-766 GFS: prevent truncation/overflow in retrieval phase. YAZ-763 Solr: simplify yaz_solr_decode_response Solr: use different local var for string manipulation Solr: Get rid of hardcoded limit of extra_args Solr: encode lucene query type YAZ-736 Make sure the queries are treated as traditional "lucene", because that's what YAZ generates. Fix ZOOM HTTP redirect failing on Windows+Solaris YAZ-755 --- 5.1.1 2014/04/22 Build packages for Ubuntu Trusty Tahr 14.04 LTS wrbuf_cstr: fix off by one error. wrbuf_buf: make it always return non-NULL Also, wrbuf_buf will return same buffer as previous call to wrbuf_cstr. --- 5.1.0 2014/04/17 Doc: move main YAZ manual to book.xml; use nxml YAZ-758 zoomsh: offer option -a apdulog As we're used to from yaz-client and GFS based servers. ZOOM: new setting apdufile. Sets name of APDU file. If not given, existing setting apdulog takes effect. Add odr_setprint_noclose. It's like odr_setprint, but does not fclose at odr_destroy. Add wrbuf_cstr_null. Add re-entrant CQL/Solr/RPN query conversion functions. The re-entrant functions are: cql_transform_r, cql_transform_rpn2cql_stream_r, solr_transform_rpn2solr_stream_r. These have same functionality as cql_transform, cql_transform_rpn2cql_stream, solr_transform_rpn2solr_stream. They return the additional infomration as WRBUF to make them re-entrant. Remove CQL to Solr conversion and base solr_transform_t on cql_transform_t. The RPN to Solr is indeed in use. It uses exact same data structure as cql_transform_t. cql2pqf utility allows RPN to Solr conversion Fix assert in ZOOM when http connect fails YAZ-757 --- 5.0.22 2014/04/09 ZOOM: Call cs_rcvconnect during HTTP redirect YAZ-754 wrbuf_cstr: make it thread safe YAZ-753 yaz_log_init_file may take fd= to open log file at the FD given. --- 5.0.21 2014/03/21 Offer new utility function zget_AttributeList_use_string. New conversion step, solrmarc, for record conversion module. --- 5.0.20 2014/03/13 Fix gcrypt initialization for threaded mode. On systems were GnuTLS did not initialize gcrypt for threaded mode, wrbuf_sha1_write could throw an assert. --- 5.0.19 2014/03/10 Fix ZOOM_connection_Z3950_search: Assertion YAZ-750 The standalone ZOOM sort was completely broken since 5.0.13. ZOOM: generate event Connect rather than None for partial connect (in fact getaddrinfo resolving). ZOOM: only supply clientIP for InitRequest. Rather than for all APDU types. GFS: peer_name adds X-Forwarded/Client-IP to value YAZ-749 COMSTACK flag CS_FLAGS_DNS_NO_BLOCK. This will enable non-blocking getaddrinfo . This flag is passed to cs_create macro and cs_create_host, cs_create_host_proxy functions. ZOOM C uses this flag. YAZ-744 New "Facets" section in the documentation. --- 5.0.18 2014/02/27 Call exsltRegisterAll in yaz_init_globals, so that all applications using YAZ will have EXSLT things enabled. Use extraArgs in key for memcached ZOOM C caching YAZ-747. Update various URLs to the re-organized SRU pages at LoC. --- 5.0.17 2014/02/26 Fix ZOOM_connection_connect SEGVs if host==NULL YAZ-746. Problem introduced in 5.0.12. Fix: Setting env YAZ_LOG makes YAZ hang YAZ-745 yaz_init_gloabsl calls yaz_log_init_globals calls yaz_log_mask_str_x . Do not call yaz_init_globals from log_mask_str_x. Problem introduce in 5.0.15. --- 5.0.16 2014/02/25 tcpip/SSL COMSTACK: connect tries all getaddrinfo addresses YAZ-743 --- 5.0.15 2014/02/24 Fix gcrypt not properly initialized YAZ-740. --- 5.0.14 2014/02/19 Describe memcached option for ZOOM. ZOOM: throw present request out of range again YAZ-739 Was removed in YAZ 5.0.13. --- 5.0.13 2014/02/18 yaz_log MUTEX protected and pthread_atfork is used to avoid dead-lock with localtime_r when threads + fork is used (such as Metaproxy). yaz-config: quote some RHS values (that might include blanks) zoomsh: shows SearchResult-1 zoomsh: sortby command zoomsh: use proper list of connections and result sets YAZ-725 Avoid yaz_log in sigterm handler for GFS YAZ-737 Logging is still performed, but outside sig handler. New ZOOM C feature: result-set caching with memcached. Example: zoomsh "set memcached --server=memcachehost" "connect zurl" "search query" Remove SSL via OpenSSL support YAZ-732 Also deprecate two functions from comstack that aren't working with GnuTLS: cs_get_ssl, cs_set_ssl_ctx. Revert "Bison: use %name-prefix directive rather than -p option" --- 5.0.12 2014/01/22 Prefix URL with http:// if sru setting hints SRU/Solr mode YAZ-731 SRU GET/Solr base URLs may hold additional ?args YAZ-729 ZOOM option extraArgs already does this, though. It seems useful when dealing with Solr targets to limit by filter, eg. http://lui.indexdata.com:8080/solr4/select?fq=database:3902 Remove #fragment for HTTP request encoding YAZ-730 Doc: Update list of DLLs/LIBs Doc: update href link to Unix utils and Git. --- 5.0.11 2014/01/15 ZOOM: fix "lost connection" problem with servers that uses both squid and another proxy behind it that returns Location headers with relative URIs. YAZ-724 zoomsh: do not use readline for stdin (no tty) YAZ-724 Just use fgets in that case. If the user hits Ctrl-D a new-line is also printed. zoomsh: empty command ignored YAZ-723 rather than performing exit of zoomsh. yaz-url utility offers option -v to enable verbose mode. yaz_url uses yaz_check_location and offers verbose mode. Add new function yaz_check_location. This function gets an absolute URI from Location (HTTP redirect). cookie API: introduce yaz_cookies_reset Update cql.y for newer bison YAZ-720 The important part is that YYLEX_PARAM and YYPARSE_PARAM are no longer supported. Instead one must use %lex-param and %parse-param . --- 5.0.10 2014/01/09 ZOOM/yaz-client: Cookie handling; deal with relative URI in Location header. YAZ-719 rpn2solr: support truncation left(2), left&right(3) YAZ-718 Mention SRU version 2.0 in yaz-client man page. --- 5.0.9 2013/12/20 ZOOM/yaz-client: allow SRU searchRetrieveResponse with incorrect namespace. --- 5.0.8 2013/12/20 Make cs_parse_host public.A Fix double HTTP dump (-a log would show HTTP packages twice). Bug introduced in YAZ 5.0.6. --- 5.0.7 2013/12/17 Fix buffer corruption for yaz-ztest record fetch. --- 5.0.6 2013/12/17 Allow yaz-ztest to return user-defined records (one record per file). This is enabled by defining environment variable YAZ_ZTEST_XML_FETCH. Prevent early truncatin of HTTP log. (ODR_PRINT for HTTP streams). Use the stream write instead of odr_printf which has a 4K tmp buffer. Fix encoding of 0x00a4 (unicode to danmarc) YAZ-713 --- 5.0.5 2013/12/09 Add support for MARC-in-JSON. yaz-marcdump and the record conversion module can read and write this format. For record format JSON, yaz-ztest returns MARC-in-JSON records. iconv: fixes and more tests for danmarc character set encoding. 0xa733 is converted to @Ã¥ , 0xa732 is converted to @Ã… instead of @a733, @a732 . --- 5.0.4 2013/11/22 Improve error reporting for ICU chains YAZ-707 Report config element+rule when ICU status is "failure". ZOOM: stop fetching if present response has no records YAZ-710 Some targets return less records than their hit count would suggest. This prevents ZOOM from continuing to fetch records if any present response has 0 records in the response. Ensure that GFS calls exit if any listener fails YAZ-710 Before, if XML config was in use, it would start the default listener @:9999! --- 5.0.3 2013/11/19 yaz-ztest: -V shows version (like yaz-client -V) New iconv encoding: danmarc YAZ-692 yaz-client: lslb, ssub, mspn are Odr_ints now YAZ-705 daemon: only wait for immediate child rather than all children. YAZ-704 yaz-client: fix setting of SRU record schema. If scheme was unset, it could lead to invalid memory reference. --- 5.0.2 2013/10/16 yaz-ztest returns schema for MARCXML test records. SRU require that recordSchema for records. GFS: make surrogate diagnostic when yaz_record_conv_record fails - instead of non-surrogate diagnostic. This is a per-record failure. GFS: Allow multiple listenrefs YAZ-554. A server in yazgfs configuration may refer to multiple listeners now. Attribute listenref is a comma separated list of listen IDs. GFS: Use xmlconfig path as prefix for fnames YAZ-702. When -f option is given for GFS, the dirname of filename (for -f) is used as prefix for options such as cql2rpn, ccl2rpn, etc. Content-Type charset fixes YAZ-701 . Do not inspect charset in Content-Type header for SOAP when decoding SRU. The payload (XML) itself tells what encoding it is. In response, never supply encoding in Content-Type. The response payload (XML) tells what it is (with no encoding in XML it's UTF-8). HTTP decoding: allow blanks in URL paths YAZ-700 --- 5.0.1 2013/10/04 Various fixes for how SRU 2.0 is encoded. Fix NS for SRU 2.0 diagnostics and facets. Ensure recordData and recordSchema are always present in record element, because they are required. Remove deprecated functions yaz_uri_val .. and yaz_uri_val_int. Never used outside YAZ. Simplify in a lot of places using odr_strdupn. odr_create_Odr_oct: null terminate the buffer. Some applications rely on it. --- 5.0.0 2013/10/01 Increase various buffers in GFS's statserv_options_block Change many 'unsigned char *' to 'char *' for ODR-related utilties. This change makes many type-casts redundant, and, thus simplifies code. Remove last bits of WAIS support. Remove member 'size' from Odr_oct. Slim down the public part of 'struct odr'. Most elements are not part of struct Odr_private. Add support for SRU 2.0. Since SRU 2.0 is incompatible with earlier versions of SRU, yaz-client and zoom C are using SRU 1.2 by default. In particular facets are supported in both client - and server side. Facets are also supported for Z39.50 and is carried in additionalSearchInfo of searchRequest/searchResponse with OID 1.2.840.10003.10.1000.81.5 AKA "Facet-1" in oid.csv. The info is defined in facet.asn (which covers both request/response). This is what a search handler in the GFS will see (regardless of whether operating in SRU mode or Z39.50). Changes to the srw.h (SRU/Solr) definitions include: - New element in Z_SRW_searchRetrieveRequest, queryType (char*) and query (char*), which replace union query and query_type (int). This is because SRU 2.0 supports a queryType parameter. This also means that, to carry PQF, in SRU we can now use queryType=pqf and query=PQFstring , rather than x-pquery=PQFstring (extention parameter). The extension parameter is still supported. - New element, packing, that has information about SRU 2.0 recordPacking (not to be confused with SRU 2.0 recordXMLEscaping). New element in Z_SRW_searchRetrieveResponse, resultCountPrecision. New element, packing, in Z_SRW_explainRequest. New elements in Z_SRW_scanRequest, queryType and scanClause. These replace query_type and scanClase untion. This is similar to what happend to search. --- 4.2.69 2013/10/01 GFS: log when closing down - at least SIGTERM YAZ-684 Also change formatting WRT PID logging a bit. Improve display of MARC records with multi-byte subfield IDs YAZ-695 In some rare cases subfield identifiers are multi-byte characters. This will try to deterime length of those and split accordingly. This affects display in line mode as MARCXML/MarcXchange. The encoding of ISO2709 is the same. Change inp argument to const for yaz_read_UTF8_char. yaz-marcdump: fix leaks for MARCXML parsing. YAZ-694 MARCXML parsing: avoid skipping 1st field if no leader. YAZ-693 Better check of marc leader info YAZ-691 Problem is that some systems generate MARCXML/MarcXchange with funny headers. These will not work if encoded as ISO2709. Some tests produce new output, due to updated warning messages cql2pqf: allow PQF queries from stdin (because CQL is also allowed) yaz-client: display MAB records YAZ-689. Thanks for Heiko Jansen for this patch. New utility z_get_HTTP_Response_server which allows both HTTP server name and HTTP server URL to be given in response. Debian: do not depend on obs tcl8.3. Debian: do not depend on obs libicu36-dev. --- 4.2.68 2013/09/23 GFS: pass additionalSearchInfo to search memeber search_input if given. Otherwise pass otherInfo. Request for facets and other search related things will be passed there in future versions of YAZ. New ZOOM setting, authenticationMode, which allows authentication paramters to be encoded in the URL rather than via HTTP Basic auth. YAZ-686 rpn2solr: fix nested AND/OR handling. YAZ-685 Add comparison routines for some Z-types, such as NamePlusRecord, RPNQuery, Query, RecordComposition and OtherInformation. --- 4.2.67 2013/09/19 Don't decode MAB as MARC. Just like we don't attempt to decode HTML/XML as MARC. Fixes MAB display problem that was introduced in 4.2.64. CCL: allow quoted terms for date ranges. YAZ-681 Introduce ccl_parser_qual_search. This function makes old function ccl_qual_search, from YAZ 2, available again. Add yaz_facet_list_to_wrbuf. YAZ-683 --- 4.2.66 2013/09/11 ZOOM: fix record handling for Solr. ZOOM_record_get would return 0, if schema was given for search. YAZ-675 Add Solr date range searches. YAZ-621 --- 4.2.65 2013/08/22 ZOOM: another fix for record caching (introduced in YAZ 4.2.64). --- 4.2.64 2013/08/21 (Broken WRT ZOOM C, do not use) ISO2709/MARC parse most octet aligned records; not just those that are known to be ISO2709/MARC. This makes ZOOM and yaz-client MARC parse more records instead of just dumping as is. YAZ-670 ZOOM: proper caching for variations of record schema. YAZ-671 Solr: Check for enging / and perhaps commands (select/term) YAZ-651 --- 4.2.63 2013/07/17 Add yaz_strcmp_null --- 4.2.62 2013/07/11 New utility z_get_HTTP_Response_details - an extended version of z_get_HTTP_Response. New utility yaz_url_get_error which returns error message of last failed yaz_url_exec call. yaz-url and url functions: allow max HTTP redirects to be controlled. New functions yaz_file_glob2, yaz_xml_include_glob. These functions takes a flags parameter, which, for now only controls whether to fail inclusion of a non-existing file (without glob pattern) - flags YAZ_FILE_GLOB_FAIL_NOTEXIST. --- 4.2.61 2013/06/20 For MARC XML parsing, allow record without leader. A fake/default leader is inserted and a warning is tagged with the record. ICU: fix leak in in icu_iter_get_org_info. --- 4.2.60 2013/06/14 ICU: fix bug in icu_iter_get_org_info (un-init variable). --- 4.2.59 2013/06/11 Implement z_HTTP_header_remove. --- 4.2.58 2013/06/11 ICU: Disallow 0 ptrs for some ICU string utilities. ICU: new utilities icu_iter_get_org_info and icu_chain_get_org_info: returns original tokens (before normalization). CCL: avoid z39.58/regex truncation when not needed. Apply only the conversion of those masks, when absolutely necessary. CCL: configurable masking character - @mask. Default masking character is # for CCL. HTTP encoding: remove Transfer-Encoding header. YAZ uses content_len and full response anyway, so a Transfer-Encoding header will obstruct the response. --- 4.2.57 2013/05/15 COMSTACK: @ uses AF_UNSPEC . But we prefer AF_INET6 over others when picking a socket. Problem is that some systems has IPV6 support, but we can't create sockets for them, so we pick AF_UNSPEC first. HTTP encode. Proper Content-Length YAZ-660. For yaz_encode_http_response use content_len to determine resulting Content-Length in HTTP response and NOT Content-Length supplied in headers by user. z_HTTP_header_add_basic_auth uses z_HTTP_header_set rather than z_HTTP_header_add, to avoid having two Authorization headers by mistake. Fix problem with HTTP decoding. For HTTP 1XX, 204, 304 assume no content-length. Fix yaz_base64decode to use proper signed. Problem occurred on platforms with big endian and unsigned char (by default). --- 4.2.56 2013/04/26 Fix yaz-client connect (crash in 4.2.55). --- 4.2.55 2013/04/26 Fix proxy/host problem for ZOOM that could occur if unix sockets was in use. New Debian package libyaz4-dbg. Fix problem with cs_close hang/wait in SSL mode. Invoke gnutls_bye differently in tcpip_close. --- 4.2.54 2013/04/17 Windows installer of YAZ includes YAZ4J as a component. CQL: allow "extra terms" again, by default. Thus, the CQL parser accepts a superset the standard. This reverts to CQL as of YAZ 4.2.51 and earlier. CQL parser may operate in strict mode where queries not conforming to the standard BNF are rejected (syntax error). Whether the CQL parser operates in strict mode is controlled with cql_parser_strict . Strict mode enabled with option -S for utilities cql2pqf and cql2xcql . yaz-ztest: returns OPACXML records for syntax=XML and element set=OP. --- 4.2.53 2013/04/10 New charset, MARC-8c, which is like MARC-8 but allows control characters 0x01 through 0x1F, except ESC to be passed through verbatim. Fix a problem with duplicate sub field character in MARC output. Problem happened only when output was MARC-8 encoded. --- 4.2.52 2013/04/03 yaz-ztest: Use hash for fake hit count. Before, random number was used. This is problematic for unit tests using yaz-ztest. This patch also makes a hash for CQL queries. For RPN, any term with a leading digit will be treated as pseudu hit count (to force any particular hit count by a client). yaz-ztest: return unique MARC dummy records. Beyond record offset 24, the author surname is patched with offset to make all records unique. COMSTACK: make @ bind to IPV6+IPV4 consistenly and avoid depending on system wide default (/proc/sys/net/ipv6/bindv6only). @4 binds to IPV4 only. @6 binds to IPV6 only. Update CQL API documentation a bit CQL: don't accept extra terms for queries. Makes the CQL parser stricly conformant to the standard. --- 4.2.51 2013/02/12 GFS: scan handler gets extra_args from request and may return extra response data . That's for SRU only. Solr scan support for ZOOM and yaz-client. Patch from Simon Jacob. --- 4.2.50 2013/01/30 New function, yaz_xml_to_opac, to convert from OPACXML to Z39.50 OPAC. OPACXML: sync spelling of availabilityDate in XML to that of Schema opacxml.xsd. The schema had the correct spelling of this member always. The ASN.1 was mis-spelled and still is (API change) - we are not changing this. However, the OPAC to XML conversion had yet *another* typo. GFS: Allow conversion between Z39.50 OPAC and OPACXML via retrieval element. New function, z_ext_record_oid_nmem, which is similar to z_ext_record_oid but takes NMEM rather than ODR --- 4.2.49 2013/01/18 ICU: New conversion element 'join' which joins tokens into one with a custom character given by rule attribute. --- 4.2.48 2013/01/10 New GFS search member: present_number. This is a hint to the search handler how many records are going to be fetched immediately following search. There's no guarantee that it's going to be the case, since it depends on hit count (for Z39.50 piggyback) and whether errors turn up. Make a few functions static (private). The functions getbyte_stream, ungetbyte_stream and yaz_gets are now private. They were never declared in a header file. yaz-marcdump: exit(5) for serious decoding errors ISO2709 decoding: be more picky WRT header GFS: bail out of fetch if last_in_set is set. Until now, last_in_set, was only used as to indicate that next-result-set-position should be set to zero. http://www.loc.gov/z3950/agency/markup/04.html#Next-result-set-position Based on patch from Ashley Sanders. Make some functions static/private in PQF parsing. Those functions were never declared in a public header and so should not be in use by applications based on YAZ. --- 4.2.47 2012/11/23 ZOOM: special options to control APDU logging. Using ZOOM_connection_option_set(c, "saveAPDU", "1") will enable logging of APDUs until "saveAPDU" option is set again. If logging is already enabled the effect is that current APDU buffer is cleared. Using ZOOM_connection_option_set(c, "saveAPDU", "0") disables logging (default behavior on new connection). The APDUs sent/received can be obtained by using Using ZOOM_connection_option_get(c, "APDU") or ZOOM_connection_option_getl(c, "APDU", &l). GFS: relay implementation_version from backend From 3.0.40 and later, implementation_version from backend was not used in init response at all. --- 4.2.46 2012/11/15 Fix cs_rcvconnect for SSL comstack GNUTLS. Did not work in non-blocking mode at all. Probably never did. Make a new version of ztest.pem that, at least, is not expired. --- 4.2.45 2012/11/13 Fix description of CCL directive 'case'. More tight checking of form arguments (yaz_uri_to_array). Makes YAZ better at rejecting big and/or bad POSTs. SRU decoding does not report more than up to 10 invalid arguments. rpn2cql: less quotes in generated terms. Semantics unchanged, but it's prettier this way. --- 4.2.44 2012/10/25 New utility yaz_decode_init_diag. Defined in proto.h. Allow HTTP protocol on unix local socket. Also Z39.50 database may be given for unix local socket. The COMSTACK string for doing so is: unix:: Examples: unix:/myfile:tcp:localhost:9999/mybase unix:/myfile:localhost:9999/mybase unix:/myfile:http://fakehost/mybase debian: Use dpkg-buildflags in build process. --- 4.2.43 2012/10/19 ZOOM C: don't trust recordPosition always. Some servers, such as IGI global's SRU service uses a recordPosition scheme starting from zero. First record's position should be one according to the standard. --- 4.2.42 2012/10/18 Allow more namespaces for SRU. This is to allow, for example, an incorrect namespace returned from server http://services.igi-global.com/sru . Minor fixes for compilation on Windows. --- 4.2.41 2012/10/11 daemon: log total number of bad signals from child on stop so that it is more easy to spot problems with child worker processes. retrieval: empty backend name attribute omits element set from being used in retrieval. --- 4.2.40 2012/10/04 Implement Solr sort strategy "solr", similar to sru11 sorting. This will implement the correct parameters on Solr requst to do native sorting. --- 4.2.39 2012/09/28 Implement ccl_qual_fitem2. Like ccl_qual_fitem but with diagnostic string returned. MARC: Extra/missing indicator handled for MARCXML. The indicator length is given in header and is the same for the whole record. If attributes ind1, ind2 are missing, then content character defaults to blank. Extra indicator attributes (beyond) indicator length are treated as an error. Reformat: delete trailing whitespace --- 4.2.38 2012/09/17 MARC: fix non-ASCII characters for leader. This is to ensure we can generate XML in UTF-8. CCL: new special attribute s=ag . Almost s=pw,al but preserves words in one node with structure word. --- 4.2.37 2012/09/04 yaz-json-parse: JSON output may be pretty printed by using option -p twice. Increase default value of max message for Z39.50 Init for GFS, ZOOM and yaz-client. Old value was 1 MB. New value is 64 MB. --- 4.2.36 2012/08/22 yaz-client: don't display bogus records from SRU servers. Some SRU servers return more records than given by *maximumRecords*. Skipping those in display! record_render: simplify buffer return handling and fix at least one bad memory reference, that broke the test_embed_record sometimes. Allow http://user:pass@host notation for yaz_url_exec. zoomsh: allow shell command to be executed. Via the system(3) call. yaz_poll: Allow num_fds == 0 yaz-client: fix bad encoding of "itemorder item". The itemorder item - command forgot to use length of encoded Item Request package. Error present since YAZ 3. yaz-ztest: fix bad usage of session handle. Bug was introduced when result sets were saved (271a9c83). SRU recordPacking: guess record packing in response rather than looking at the recordPacking element which, OF COURSE, changed semantics in SRU 2.0. Decode SRU 2.0 responses. The official namespace for responses, according to http://docs.oasis-open.org/search-ws/searchRetrieve/v1.0/cs01/schemas/sruRes appears to be http://docs.oasis-open.org/ns/search-ws/sruResponse . nature.com's server, however, usee namespace http://docs.oasis-open.org/ns/search-ws/sru-2-0-response . For this reason we are now using a glob-expr to match up the namespace. ZOOM C and yaz-client updated. Perhaps SRU 1.2 uses same namespace, I don't know. I can not find a single real example showing the "real" namespace in the documentation from OASIS. The namespace for requests is different from responses, but this is not added to YAZ yet, when we don't encode them yet. --- 4.2.35 2012/06/26 zoom/record_render: add support for Base64 decoding fo MARC records within XML element. For example: "xml; charset=marc-8; base64=/my/text()" which will decode base64 + ISO2709 marc-8 encoded material from text node under /my . --- 4.2.34 2012/06/07 Add missing definitions ZOOM_resultset_get_facet_field_by_index and ZOOM_resultset_facets_names. zoom: fix bad free for ZOOM_connect - happened when ZOOM connection options was in use. Change APDU dump printing to avoid long leading blanks. For levels 16 or larger the level is shown and the indentation is truncated but recursed with modula 8. This makes it still reasonable easy to read - even for nested BER dumps. Fix bug completeBER_n WRT too nested BER. Function completeBER_n could return 0 (incomplete package) in case where the BER package was considered too nested (return value of -2). dumpber: lines of level 15 are not indented further. Two spaces per indentation; indentation 15 or more is indented to a fixed indentation and augmented with a level= indication. zoomsh: increase max size of command+args GFS: No limit in RPN buf size in CQL to RPN conversion. --- 4.2.33 2012/05/09 New function for daemon utility, yaz_daemon_stop . Makes yaz_srw_sortkeys_to_sort_spec public on Windows. --- 4.2.32 2012/04/25 Add some Bib-1/SRU diagnostics + mappings. Bib-1: 1073 and Bib-1 1074: Proxy failure. SRU: 1074: Proxy failure --- 4.2.31 2012/04/23 YAZ daemon utility relays SIGUSR1 to child process. ZOOM: handle trailing slash for Z39.50 urls. Previously localhost:9999/ would result in en empty database list - which in turn would result in encoding failure for search. Fix reading beyond string in yaz_sort_spec. --- 4.2.30 2012/04/11 Add two new SRU diagnostics: 236: Access to specified database denied 1015: Init/AC: Maximum number of simultaneous sessions for Userid Document the very useful ZOOM-C option "apdulog". CQL to RPN: term may be passed through verbatim. This is enabled with truncation.cql . The assumption being that the term is already CQL. --- 4.2.29 2012/03/20 record_conv: leader spec may be given for marc element. The leader spec is given as attribute leaderspec for element marc. For example to convert a MARC21 record from MARC-8 to UTF-8: record_conv: allow user-XSLT params. For example: record_conv: fix error handling for missing marc charsets. CQL: fix extra terms in wrong order. --- 4.2.28 2012/03/06 record_conv: modify new API for conversion types. The conversion types may be passed in new functions yaz_record_conv_configure_t and yaz_retrieval_configure_t. Removing yaz_record_conv_add_type . Avoid mixed statement/variable declare; fixes compilation with Visual Studio. --- 4.2.27 2012/02/28 Add non-standard SRU diagnostic: 235: "Database does not exist". Couldn't live without it. HTTP 404: "Not found" is just so anonymous. Update SRU to Bib-1 diagnostic maps accordingly. CCL: add two new diagnostics for unsupported masking. The new diagnostics are: "Embedded truncation not supported" and "Single charcacter mask not supported". --- 4.2.26 2012/02/23 CCL: fix use of "term" field in sub queries. Bug introduced in YAZ 4.2.25. --- 4.2.25 2012/01/11 Build YAZ for Ubuntu Oneiric. CCL: allow parantheses for proximity operands. For example CCL query (a) % (b) is now allowed. GFS: fix bend_assoc_is_alive. When cs_get returns 0 the association is marked dead, rather then being destroyed. If not, the session memory is being free'd before the search/scan handler is finished. Also destroy 'request' memory in request_release rather than in various places, which resulted in leaks from time to time. --- 4.2.24 2011/12/21 cql_sortby_to_sortkeys: honor sort prefix. RPN to CQL: always quote resulting terms. For bizarre reasons, JSTOR's SRU server returns 0 hits on ISSN searches unless a CQL term is quoted. The rpn2cql family of functions now always returns quoted CQL terms. Fix CQL to CCL conversion for multiple terms. Add two test cases as well. --- 4.2.23 2011/12/15 Allow =val to be omitted for yaz_uri_to_array. Also, multiple &'s in sequence is treated as one. For example, &&a=b&&&c& is identical to a=b&c= . --- 4.2.22 2011/12/05 Add ZOOM_connection_save_apdu_wrbuf. This function may be used to save APDUs for a connection to a WRBUF. --- 4.2.21 2011/11/23 Fix cql_sortby_to_sortkeys. Completely broken before. Make CCL's @truncation work again. --- 4.2.20 2011/11/09 New ZOOM connection setting: tproxy. It's like proxy, but does not set Z39.50 proxy OID or change HTTP for proxy behavior. Can be used to set resolved address + port for a connection outside ZOOM itself. Fix atoi_n_check digit test. Thanks to Giannis Kosmas for spotting it. --- 4.2.19 2011/11/07 Fix uninitialized variable in Solr spell support (could cause SEGV for SRU response decoding). Error handling for Z_APDU_close uses ZOOM_set_dset_error() to pass back-end's addinfo through into the ZOOM response addinfo. When ZOOM_set_dset_error() is passed an addinfo2 as well as addinfo, they are separated by a colon and a space rather than simply concatenated. --- 4.2.18 2011/10/28 Add support for Solr spell-checking/suggestions through ZOOM. If a Solr target has been configured correctly for spelling-checking and suggestions, these will now be returned on the ResultSet option "suggestions". zoomsh has been extended to show this with the cmd suggestions. --- 4.2.17 2011/09/28 Fix function nmem_strsplit_escape2 which extends nmem_strsplit_escape with a flag whether to substitute escape sequences or not. --- 4.2.16 2011/09/22 Fix nmem_strsplit_escape to substitute escape char properly. New option for zoomsh -e , which makes it abort on first error and return process exit code to indicate success/failure. YAZ options utility supports special option -- which makes all it treat all following arguments as non-options. --- 4.2.15 2011/09/16 Fix yaz_file_path_resolve/yaz_path_fopen/yaz_fopen so that path is not searched if absolute filename is given. Fix conv_xslt() error-reporting when stylesheet is not found. (The value of fullpath is meaningless in this situation.) --- 4.2.14 2011/09/07 Fix problem in CQL sort node creation: un-initialized memory. New ZOOM utility ZOOM_query_sortby2. That takes a strategy parameter: one of "z3950", "type7", "cql", "sru11" or "embed". The "embed" chooses type-7 or CQL sortby depending on whether Type-1 or CQL is actually sent to the target. New sortspec utilities: yaz_srw_sortkeys_to_sort_spec, yaz_sort_spec_to_srw_sortkeys, yaz_sort_spec_to_type and 7yaz_sort_spec_to_cql. rpn2solr supports Z39.58 truncation (104). Thus, CCL truncation mode t=z will make it possible to use both single-character mask (#) and wildcard (?) in CCL . Throw diagnostic for left truncation because that is not supported by Solr. --- 4.2.13 2011/09/01 Fixes for cql2rpn, cql2ccl and ccl2rpn; mostly in the area of special cases using escapes (\-sequences) and masking. PQF parse fix: A trailing backslash followed by end-of-string (\0) would result in a read one byte beyond string. rpn2ccl may use Z39.50 masking for terms (t=z). ICU check fix. Don't include library -lCrun on Solaris, unless present. ICU check fix: Use --cppflags-searchpath to determine ICU include files; not --cppflags (which seeems like an error in icu-config). --- 4.2.12 2011/08/27 RPM package only cql2ccl: fix conversion of terms: operator characters were not quoted/escaped. --- 4.2.11 2011/08/25 RPM package only ccl2rpn: Conversion to regexp-1 terms (trunc=102). For mode t=x, the CCL parser will map both # and ? to their regular expression quivalents (. and .*). rpn2cql: deal with truncation=102 (regexp-1). And ensure proper quoting of reserved CQL characters. cql2ccl: deal with both * and ? in conversion. Also leave escaped ones as is, so that they are passed through. --- 4.2.10 2011/08/24 ZOOM SRU mode: more aggressive re-connect. Private function prox_unit_name() renamed to yaz_prox_unit_name() and made available as a utility function, declared in rpn2cql_structure() supports proximity nodes (except that the Type-1 proximity node's "exclusion" binary is ignored, as there is no way to express that in CQL). Fixes bug #4564. --- 4.2.9 2011/08/18 Fix SEGV that could occur if set command of zoomsh was given without value (2nd argument). Fix SEGV that could occur if unsupported transport was given for COMSTACK - say https (when SSL was unavailable). Build yaz-url on Windows too. --- 4.2.8 2011/08/11 New utility to get web content. Header is url.h. A command line tool yaz-url is part of the distribution and packages. Fixes for SSL COMSTACK (when gnutls is in use). New functions yaz_base64{encode,decode}. Header is base64.h. --- 4.2.7 2011/08/03 ZOOM C includes HTTP response buffer as additional info if it fails to decode the SRU response. Make wrbuf_json_puts available. --- 4.2.6 2011/07/28 zoom: throw diagnostic for invalid value for option "sru". Before a bad SRU request was sent. Adding new utility wrbuf_vp_puts. Add cclxmlconfig.obj to win/makefile. It was missing completely. --- 4.2.5 2011/07/21 ZOOM HTTP: use absoluteURI's in proxy mode as required by RFC 2616 (HTTP). Fix a bug in handling of cookies. Fix a bug that would occur if proxy + redirect was used at the same time. MARC line mode decoding: be less picky about length given - first 5 digits of header that is. CQL to CCL conversion: deal with CQL proximity (cql_to_ccl function). Changes to decoding of SRU records: a record with recordPacking=xml is modified with a new root element if the recordData contains multiple children elements. This is to make the record XML parseable afterwards. RPN to Solr conversion: encode special characters. Generic Frontend Server: fix uinitialized member, stepSize. --- 4.2.4 2011/06/21 Fix a bug in SRU decoding of records.. The database records stored had un-initialized memory, but it would only be seen with yaz_record_render and type_spec="ext" . Fix a bug in ccl_qual_dup introduced in 4.2.3. --- 4.2.3 2011/06/17 Add new CCL utility, ccl_qual_dup, which makes a copy of a CCL bibset. --- 4.2.2 2011/06/10 Add new utilities to convert from CQL to CCL . These utilities have prefix cql_to_ccl defined in cql.h. Defensive coding for an off-by-one bug in ucol_getSortKey. This could lead to memory heap corruptions when ICU utilities were in use. --- 4.2.1 2011/06/07 Make compilation work without Libxml2. yaz-client: remove redundant blanks in display of searchResult-1 term hit counts. --- 4.2.0 2011/05/18 CQL: parse CQL sortby spec. The resulting sort spec is stored in the resulting CQL node (tree) in a new node CQL_NODE_SORT. CQL and GFS: add utility cql_sortby_to_sortkeys which converts CQL sortby 1.2 node tree to CQL 1.1 spec. This in turn allows the generic frontend server to only consider srw_sortkeys and support both SRU 1.1 and 1.2. Note that the CQL sortby spec is only converted when the GFS is already converting from CQL to RPN (cql2rpn element). New function nmem_strsplitx. This is like nmem_strsplit but allows us to specify whether to collapse delimitors or not. The existing nmem_strsplit do collapse (collapse parameter = 1). Windows installer: For NSIS, set InstallDir depending on x86/x64. Rename internal func yaz_use_attribute_create. While non-static, this function is not declared in a public header. --- 4.1.7 2011/03/15 Add -lCrun when linking with ICU on Solaris. More quicks character set conversions for OPAC records. --- 4.1.6 2011/03/10 fix problem with record_render: records were converted (character set wise) even if no charset was given. Problem introduced in YAZ 4.1.5. --- 4.1.5 2011/03/08 SRU: add methods for handling DADS SRU-proxy facets. Separate OPAC record character set for ZOOM_record. yaz_record_render allows a character set given as charset=from/opacfrom,to where 'from' is the character set of a bibliographic record, 'opacfrom' is character set of OPAC record and 'to' is the target character set. --- 4.1.4 2011/02/21 yaz-client: show may XML format records. Command show followed by 'format' will format XML records retrieved using Libxml2's xmlDocDumpFormatMemory function. src/stemmer.c: Avoid using unnamed union. It is not supported by some older C compilers. For PHPYAZ: set YAZVERSION, not YAZ_VERSION. --- 4.1.3 2011/01/27 Update yaz.spec to operate on both SLES11 / Centos 5.5. RPM: Release includes 'indexdata' name. Use indexdata in release name so this package can be distinguished from other vendors. yaz-config: Use exec_prefix, libdir, includedir . Use these variables as determined by configure yaz-config: set YAZ_VERSION env. php_yaz relies on it. GFS: Z_PresentStatus_partial_4 for missing record. If bend_fetch handler returns no error and no record, the present request is considered partial (only a subset of the records could be returned by backend), and so it is appropriate to set Present Status to partial-4. --- 4.1.2 2010/11/02 Move yaz-config man pages to section 1. More documentation about Solr. tcp comstack: change behavior for @-specs (anyaddr). @ listens on AF_INET (IPV4) peers, and @6 listens to AF_INET6 (ipv6) peers. Previously @ listened on AF_INET6 which accepted both IPV4 and IPV6 peers on some Linux systems. However, in general that does not work so YAZ can not rely on that to work. Debian changed behavior in this respect from Debian lenny to Debian squeeze (still testing as of Oct 2010). Refer to: http://www.mail-archive.com/debian-devel@lists.debian.org/msg277726.html zoomsh: remove "debugging" output. Was added by mistake in 4.1.0. --- 4.1.1 2010/10/05 Fix yaz-config output: echo_source not set correctly by configure. --- 4.1.0 2010/10/05 Solr Web Service support for yaz-client and ZOOM. Define record syntax JSON. OID: 1.2.840.10003.5.1000.81.3 . --- 4.0.12 2010/08/17 Z39.50 facet support. Facet specifications are passed for search in other-information with ASN.1 as defined in facet.asn and OID .10.1000.81.5 . Facets are expressed as an Attribute list as known from Type-1/RPN queries. Type 1 is field. Type 2 is sort order. Type 3 is limit (number of entries to get in response). yaz-ztest returns dummy facets if a client asks for them. --- 4.0.11 2010/07/09 CCL fixes: bug 2895 and bug 3539. GR1-display: add comma in display - was removed by mistake in version 4.0.0. Windows installer: bundle MSVCP90.dll - used by icuuc42.dll. SRU: Merge cookies on HTTP redirects (Giannis Kosmas ). --- 4.0.10 2010/06/18 ZOOM C: Add ZOOM_resultset_release. ZOOM_resultset_release releases a result set from a connection. The result set will be on its own thereafter; no operations on it will perform retrievals from a target. Only cached copies are returned. ZOOM C:fix case for HTTP servers responding with Connection:close. Ensure that if there is a current task it is resumed (like fetching more records in a result set) . Bug #3484. PQF parser: use odr_atoi for Odr_int (not atoi) Minor PQF encoding and decoding changes; reformat. PQF decoding: attribute values that contain any non-digits are treated as string attributes (previously decoding only checked for leading character ([0-9]). PQF encoding: attribute string values are not surrounded by double-quotes. --- 4.0.9 2010/05/21 New utility for managing threads - thread_create.h. Add socket pipe utility - spipe.h. The socket pipe has same purpose as Unix pipe . Unfortunately Windows pipes do not work on select/poll - but YAZ' implementation do. Fixes for yaz_cond-functions on Windows 7. DLL export more symbols. zoomsh: show record do NOT render opac. Remove *.la files from Debian and RPM packages. --- 4.0.8 2010/05/11 Debian package libyaz-dev depends on libgnutls-dev again (was removed in YAZ 4.0.6, but due to Libtool it is still needed even though yaz-config do not list libgnutls libs). ZOOM: Use only one WRBUF for returning string results for ZOOM_resultset. Reduces memory usage for ZOOM in general. ZOOM: ZOOM_connection do not use a shared pointer to ZOOM_resultset after ZOOM_resultset is destructed by user. Reverts to YAZ 4.0.4 behavior. --- 4.0.7 2010/05/04 record-conv: fix problem with at least one XSL conversion - due to probably incorrect usage of XML XSL documents. --- 4.0.6 2010/04/29 Fix yaz-config for static mode and the use of SSL (gnutls). --- 4.0.5 2010/04/29 Forward decl timeval struct in mutex.h and gettimeofday.h. yaz-config: fix 'static' mode linking. --- 4.0.4 2010/04/28 Add functions yaz_cond_{create,destroy,wait,signal,broadcast}. These are wrappers for pthreads or Windows. For Windows these are put in a separate DLL: yaz_cond4. libyaz.la (whole source) is compiled with thread. If thread support is enabled enabled, all source of YAZ is compiled with treading support. This allows core utilities such as yaz_log to use thread facilities. Previously (YAZ 3 and YAZ 4 releases), only libyaz_server.la was using thread utilities. This commit moves mutex utilities (mutex.c) from libyaz_server.la to libyaz.la. yaz-json-parse displays leading text until error. --- 4.0.3 2010/04/09 Handle HTTP redirect for SRU GET in yaz-client and ZOOM C. Based on patch from Giannis Kosmas. SRU: no longer URL encode SRU database. The URL for an SRU server is a URL and such is alreeady encoded - at least when given with leading http:// or https://. This reverts behavior to YAZ 3.0.50. Support for new MARC XML notation TurboMARC which like MARCXML is a complete representation of MARC/ISO2709.. This one, however, is more compact and allows for faster processing with XSLT. TurboMARC can be used in the marcdisp.h API, from the yaz-marcdump utility and from the API of ZOOM C. yaz-ztest can be configured - via the database - to perform certain delays when it performs operations search, present and single record fetch. This allows testers to make yaz-ztest act as a real or even slow Z39.50 server. Refer to the yaz-ztest man pages for details. --- 4.0.2 2010/03/09 wrbuf_destroy allows NULL WRBUF passed to it. Fix CCL qualifier aliases (did not work since YAZ 2.1.56). Add ZOOM_connection_close. No fixed size buffers for ZOOM shell - bug #3257. tstodr: make it work on s390 platform. New icu iterator-functions. The new icu_iter-functions makes it possible to use ICU chains from many threads. yaz-client: better syntax check for show command. --- 4.0.1 2010/01/26 New glob file pattern utility. Like POSIX glob. For Windows too. Refer to yaz/file_glob.h. New simple local-file XML include facility which allows file glob-patterns. Refer to yaz/xml_include.h. Utility yaz-json-parse which parses JSON and demonstrates the JSON parser API. ZOOM_record_get supports new parameter "format" which makes it format XML record content. Fix JSON parser WRT start symbol. The start grammar symbol (referred to as JSONText in ECMA-262) is JSONValue, not JSONObject. --- 4.0.0 2010/01/20 Windows binaries for YAZ now compiled with Visual Studio 2008 (VC9). Older versions of YAZ was compiled with Visual Studio 6.0 (1998). Update so/DLL to version 4. Windows version builds YAZ4.DLL. POSIX/Unix builds .so with major version 4. Remove old LOG_-defines from log.h. They have been obsolete and undefined by default for the last 5 years. Odr_int is now of type 'long long'. Used to be 'int' in YAZ 3 series. GFS: Remove socket (int *fd) from search_rr handler. The socket descriptor ptr is a facility that allowed a search handler to supply a socket which would serve as a callback - when search was complete. This facility has now been in use for years. COMSTACK API changes: cs_stackerr, cs_addrstr. COMSTACK method cs_stackerr removed. It is not implemented by tcpip or unix COMSTACK, perhaps for ISO SR which was removed 7 years ago. COMSTACK macro / method cs_addrstr now returns 'const char *' rather than 'char *. The returned string is read-only and should not be modified by applications. COMSTACK cs_close is now a void function - it no longer returns int. No applications check for the value and the implementations has always returned 0. ZOOM: use size_t for scan hit counts and str size. Functions ZOOM_scanset_term and ZOOM_scanset_display_term have changed, so that occ (hit count) and len (string length) are now of type size_t pointer rather than int pointer. This is to be able to represent large hit counts and to also just to use the proper type for string length (strlen result). New JSON parser. Refer to include/yaz/json.h . WRBUF API changes.. For size parameters for WRBUF size_t is now used .. Used to be int in some cases. Many wrbuf_-functions used to return an int indicating some length.. These return values were never used. And so they are now void. ODR: odr_malloc, odr_total now takes size_t for size. clone_z_type: fix leak; occurred for encoding failures. --- 3.0.52 2009/12/03 tcpip comstack: fix use of uinitialized variable in cs_straddr. This bug was introduced in 3.0.51. --- 3.0.51 2009/12/02 tcpip comstack: Remove TCP receiver buffer optimizations for Solaris. tcpip comstack: fix leak for getaddrinfo. Encoding of SRU database is performed by yaz_encode_sru_dbpath_odr or yaz_encode_sru_dbpath_buf. Now used by yaz-client and the ZOOM API. Decoding of SRU "path" database is performed by private function yaz_decode_sru_dbpath_odr . This in turn is used by yaz_srw_decode and yaz_sru_decode in server applications, GFS, yazproxy, metaproxy. yaz-client: honor base command for SRU. Change when database setting is applied for SRU and ensure it is kept when a connection is reset. Change also the way errors are displayed or SRU (decoding of packages). --- 3.0.50 2009/11/02 Add support for extra request / response data for SRU codecs and GFS. The Z_SRW_PDU structure has two new members extraResponseData_{buf,len} for extra data response buffer and length. For the GFS, both request and response data (XML) is carried in extra_args and extra_response_data for the search handler. Patch by Ko van der Sloot. ZOOM: For queries that cannot be converted to the specified rpnCharset, ZOOM now returns a diagnostic on the client-side ('invalid query' / 10010). This fixes bug #2113. yaz-client fix: If cmdfile is passed to yaz-client (option -f) and that cmdfile included a 'quit' command that would result in a memory violation. --- 3.0.49 2009/10/01 Make a number of functions defined in xmlquery.c static. These have never been declared in a public header file (yaz/xmlquery.h) and was made public by mistake. Improve speed of character conversions (iconv utilities). This makes conversions from MARC-8 faster. ZOOM_record_get returns 0 pointer if a MARC record can not be decoded - unless type desired is "raw". This will prevent type "xml" from returning ISO2709 .. Which obviously can not be XML parsed. Fix memory leak in ZOOM that would occur if option apdulog was used on a re-used connection. Frontend server logs HTTP requests. Frontend server now sends Z39.50 close when it times out (sesssion has been idle for too long). Versions 2.0.30 and earlier also sent close. But due to a mistake this was disabled in all versions after that, i.e. the server would just close the socket immediately. yaz-client emits a better message when receiving an unrecognised userInformationField. Skip zero-length subfields when decoding ISO2709. This rare case happens if a record has two FS characters in a sequence. Without this patch there would be a reference beyond char array in using_code_len fragments in marcdisp.c. Fix yaz-marcdump error that would occur if option -n was used (bug #3028). --- 3.0.48 2009/08/28 The show command offered by the zoomsh command now takes a 3d optional parameter type which is what is passed to ZOOM_record. If the type argument is omitted, "render" is used. RPN to CQL conv may use USE string attributes (bug #2978). MarcXchange NS is now info:lc/xmlns/marcxchange-v1 . --- 3.0.47 2009/07/08 Function yaz_xml2query allows a diagnostic element in the PQF XML representation .. diagnostic@code and diagnostic@addinfo is diagnostic code and additional info respectively. The BER BOOLEAN is now the integral type Odr_bool which still happens to be an 'int'. The BER INTEGER which used to be a plain 'int' is now typedef'd to Odr_int. This is still an integral 'int', but it may be changed to 64-bit via a one-liner in nmem.h (NMEM_64=1). The documentation, ASN-1 compiler as well as programs has been updated to use the new types. --- 3.0.46 2009/06/08 zoom: ZOOM_record_get now renders OPAC records when type=xml. Previously only the bibliographic record was rendered. For type=opac, an OPAC record is only returned if it is present. iconv: small fix for encoding of advancegreek. yaz-client: avoid double display of SRU/SRW records (bug #2798). yaz-client: option auto_reconnect=on really reconnects. yaz-client: fix bug #2770 - avoid length limit for auth parameters. server: avoid null ptr ref for for yaz_poll errors. build: fix RPM build for RHEL 5.3. comstack: prefer IPV6 addresses over IPV4 - should refix bug #2350 --- 3.0.45 2009/03/31 Fixed bug #2709: TCP connect returns Invalid argument. Fixed compilation for mingw. Honor charset for raw records (ZOOM_record_get). Fixed use of errno for threaded mode that was seen on Solaris 10. Fixed argument passing with blanks in value for Windows Service. Disable YAZ' own log rotate by default (no 1 GB limit). The variable l_max_size which specifies the log file limit is set to 0 (DISABLED): This is due to the fact that YAZ is most often deployed using logrotate. Also YAZ can not perform log rotate because of unsufficient permissions (setuid). --- 3.0.44 2009/02/17 List supported encodings in man page for yaz-iconv. Fixed missing SSL libs for --libs output Re-established OID record syntax application-xml. Nobody should use it but we don't want to change soname because of this symbol being absent. --- 3.0.42 2009/02/02 YAZ' RPM spec works for both SUSE Linux Enterprise and RedHat Fedora. Added member named_result_sets for init handler struct for the GFS. This allows a server to disable named result sets. Removed OID record syntax application-xml. Added support for rule-based transliterator for ICU wrapper of YAZ. Fixed bug #1902: yaz-icu XML output. Make YAZ checks Emacs friendly. BITSTRING value shows value. Bug #2346. ISO2709 decoding: skip control characters from indicator data. Omit sort key by default in yaz-icu's output. Allow combined single char options (again) for YAZ' options function. Utility yaz-marcdump got option to display YAZ version (-V). Allow YAZ to use ICU 3.4. Added new ICU test case which illustrates removal of diacritics. --- 3.0.41 2008/12/29 Fixed Fixed test that makes VERSION_SHA1 appear on dist versions too. --- 3.0.40 2008/12/29 For configure, using option --without-xml2 also disables Libxslt/Libexslt support. Fixed bug #2352: yaz-marcdump crashes for certain record. Added man page 'bib1-attr' which includes list of common Bib-1 attributes. Added support for Danmarc2 to UTF-8 conversion. Added support for ISO5426 to UTF-8 conversion. zget_InitRequest/zget_InitResponse returns GIT SHA1 hash as part of implementation version. Function yaz_version returns GIT SHA1 hash for parameter sha1_str. --- 3.0.38 2008/11/10 ZOOM C now only fires one ZOOM_EVENT_SEARCH per search-task. Previously, ZOOM_EVENT_SEARCH was fired for each searchRetrieve Response received. ZOOM C now interprets databaseName option for ZOOM connection as path (SRU "database"). Windows version bundled with Libxml2 2.7.1 / Libxslt 1.1.24 / ICU 4.0. Fixed CCL to RPN/PQF conversion which could result in invalid PQF. Dummy Libxml2 types no longer defined in headers of YAZ'. Fixed memory violation for ZOOM C - could occur when SRU diagnostics was received. --- 3.0.36 2008/09/26 Various ODR chapter fixes. Windows version uses libxml2 2.6.32+, libxslt 1.1.23+ and ICU 4.0. Added missing source for Windows compilation, mutex.c. Fixed compilation of YAZ for Visual Studio 2008. Bug #2256. For SRU connections in ZOOM all records up to "count" are now fetched. Fixed crash in generic frontend server (and yaz-ztest) which occurred in Windows due to bad error handling for Libxml2. Added facility for sending arbitrary records (ASN.1 any) using ZOOM C's Extended service update. Patch by Sam Reynolds. New options for ZOOM C's connection, logapdu which makes ZOOM log APDUs. --- 3.0.34 2008/06/18 YAZ uses GNU TLS without the OpenSSL compatibility wrapper. --- 3.0.32 2008/06/12 Fixed memory violation that could occur when decoding UTF-8. This bug was only present in 3.0.30 of YAZ. --- 3.0.30 2008/06/06 Implemented SSL sockets using GNU TLS. OpenSSL is still supported, but GNU TLS is used by default (if found). yaz-ztest returns OPAC records if a client asks for OPAC. Improved speed of MARC-8 encoding. Added support for lossy and loss-less MARC-8 encoding. Changed yaz_record_conv_record to be reentrant for XSLT conversions. Added new Windows Service wrapper (sc). yaz-client's itemorder command may now send a file. Fixed yaz-marcdump to allow the use of NS prefix for record element. Added new function yaz_log_xml_errors. Allow (but warn) unknown XML attributes in MARCXML parsing. Handle G1 sequneces in MARC-8 decoding. Bug #2115. The UTF-8 to MARC-8 conversion now uses a different set of characters for Greek symbols. Bug #2120. --- 3.0.26 2008/02/21 Added yaz_daemon (daemon.h). Fixed bug #2068: pkg-config trouble Fixed bug #395: ZOOM_record / OPAC record encoding problems. --- 3.0.24 2008/01/28 Document --with-xml2 option. Added OPAC XML XSD (etc/opacxml.xsd). Allow glob mask for name attribute in retrieval element for the generic frontend server's retrieval facility. Changed yaz_poll_poll to return yaz_poll_except for all returned events except POLLIN/POLLOUT. Fixed error handling in cs_listen. Bug #2037. --- 3.0.22 2008/01/20 Fixed version in yaz/yaz-version.h. Fixed bug #2027: Crash when closing connection. Changed configure so that ICU support is only enabled if only ICU and Libxml2 is available (because the ICU chain is XML based). --- 3.0.20 2008/01/15 YAZ now makes ICU utilities for Windows. A separate DLL, yaz_icu3.dll, is built. Only this DLL depends on the ICU runtime. yaz-ziffy is no longer part of YAZ. It is distributed separately by Index Data because ziffy's license is GPL2 rather then 'Revised BSD'. Changed license of CCL module to 'Revised BSD'. After consultation with remaining members of the original EUROPAGATE consortium, we are re-issuing the CCL module without a separate license. The software was developed by Index Data as part of a research project. The special license was included to help feed usage information back to the project consortium to support project evaluation. At this time, the project consortium has long-since disbanded, and the majority of the original principals have retired. At the same time, we have significantly modified the software during the following years, to the point where very practically no original code remains. To simplify re-use of the software, we have contacted those members of the consortium who could be reached, and agreed to re-issue the module as a proper part of the YAZ package. Tcl scripts uses /usr/bin/tclsh as preferred shell. CQL closer to being version 1.2 compliant. CQL also allows free-form terms, such as 'title=a b', and thus, make the CQL parser more CCL-like and user-frendly. Fixed bug in ZOOM_options_getl WRT setting of parameter lenp. This bug could make Extended services handling crash in the ZOOM layer. This bug was only present in YAZ 3.0.18. --- 3.0.18 2007/12/19 ziffy uses YAZ' options rather than getopt; getopt is unavailable on some systems. yaz-marcdump reads and writes collection wrapped records. Handle OPAC for record conversion module. Fixes for ICU wrapper. Allow ICU libs to be controlled with --with-icu . --- 3.0.16 2007/11/12 Added yaz_poll which is a wrapper for select/poll. When poll is available and non-buggy, it is used, by yaz_poll . This allows more than 1024 sockets to be in use. Added ICU wrapper library which exposes ICU http://www.icu-project.org/ functionality through an XML based configuration (ICU chain). This system is useful for search facilities such as Pazpar2 and Zebra that needs to perform tokenization of indexed material. The ICU code in a separate library libyaz3_icu.a. Added HTTP tunnel facility for COMSTACK, bug #1752. This is a facility that allows a Web proxy, such as squid, to tunnel Z39.50 traffic. This facility is "transparent" to must applications using YAZ. It's enabled by using pseudo transport connect: followed by the proxy address, followed by command, then follwed by he regular "virtual" addresss. For example, connect:webproxy.com:3128,tcp:z3950.loc.gov:7090/voyager . More MARC-8/UTF-8 conversion fixes. Bugs #1666, #1667, #1778. --- 3.0.14 2007/09/21 Fixed bad memory reference in ZOOM_record - cuased by member not being initialized. This was a problem only in YAZ 3.0.12. Fixed bug in conversion from MARC to XML: Non-XML characters in control fields were not removed. Changed the way C code is generated from codetables.xml. Made a MARC-8 conversion trie for each characterSet section rather than codeTable. This is ensure the code can deal with G0/G1 sequences. Use of a newer version of codetables.xml from Larry Dixson, LOC. Bug #1464. --- 3.0.12 2007/09/12 ZOOM C now handles SRU surrogate diagnostics (i.e. errors returned from ZOOM_record_error). ZOOM C function ZOOM_record_get returns record schema for type="schema". Implemented HTTP Basic authentication to SRU/GET, SRU/POST and SRW requests. Added new ZOOM C connection option 'sru_option' which specifies SRU version. Better SRW-to-Bib-1 diagnostic mapping. ZOOM C and yaz-client announces SRU version 1.2 by default. yaz-client 'sru' command may specifiy both SRU version and transport (SOAP, GET or POST). Fixed in yaz_sru_decode to allow other version than 1.1. --- 3.0.10 2007/08/22 Added support for SRU scan for ZOOM. Added support for the use of the older versions or Extended Service Update in ZOOM. To faciliate this, an option "updateVersion" may be set to the version , 1=first, 2=second, 3=third. The third version is what ZOOM C has used so far. And that, obviously, is the default. Added support for CCL queries in Z39.50 queries sent to the GFS (and therefore in Zebra and in SimpleServer-based applications). The new element in a GFS configuration file, if present, names a CCL qualifier file used to transform incoming CCL queries into Type-1 RPN, which is passed into the back-end search callback function. Added support for HTTP Basic authentication in clients: the SRU/W codec encodes the username/password elements of the PDU structure appropriately, and these may be set using the "user" and "password" options in ZOOM-C applications (the same options that are used for Z39.50 authentication). --- 3.0.8 2007/06/25 Fixed bug #1208: SSL appears to be broken in ZOOM. Fixed bug #1206: Libxml2 include path weirdness. Added oid_name_to_dotstring. Allow elementSetName to be specified for ZOOM C record update. Allow waitAction to be specified for ZOOM C based for Extended Services. Fixed NULL ptr reference bug in yaz-ztest - caused by omitted record syntax OID. Bug introduced in YAZ 3 series. Updated WIN32 build to include Libxml2 2.6.28 / Libxslt 1.1.19. --- 3.0.6 2007/06/06 Fixed bug #1157: yaz-client does not read .yazclientrc from current directory. yaz-client now reads commands from file given by option -f if specified; then tries to read .yazclientrc in current directory. Failing that, it reads .yazclientrc from user's home directory. Added support for correlationInfo Note and ID for Record Update via ZOOM C. Added yaz-client command querycharset which specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). Charset ISO5428:1984 is an alias for ISO5428-1984. Implemented a way to perform scan in a result set using Z39.50. This is achieved by attaching the result set name in the characterInfo (type InternationalString) of OtherInformation in the Scan Request PDU. The result set is identified in the otherinformation by the new OID: USERINFO, Z3950_PREFIX.10.1000.81.4, "Scan-Set This allows for scan in result set and faceted search . Zebra did some of this in the APT term using attribute type 8 and value being result set. Using the OtherInformation approach for this is cleaner and easier to work with in proxies and the like. This facility can be used in yaz-client using new command setscan which takes a result set as first argument, start position (APT) as second. Changed decoding of SRU XML packed records to deal with servers that have recordData with XML data with multiple root nodes. Also make comparison for recordPacking case insensitive. Again, one server returns "XML" where others return "xml". For SRU responses allow Content-Type application/xml as well as text/xml. --- 3.0.4 2007/05/21 Fixed bug in character set conversion of BER strings. Bug introduced in 3.0.0. --- 3.0.2 2007/05/08 For OIDs use Odr_oid type everywhere, i.e. do not assume Odr_oid=int. For OID class, use oid_class consistently. Fixed external handling for SUTRS and Explain records (bug appeared in 3.0 series). Added partial support for ISO5428-1984, which is the "Greek alphabet coded character set for bibliographic information interchange". By Giannis Kosmas. Added documentation on new OID API. --- 3.0.0 2007/05/02 Changes to generic frontend server interface: added new member 'query_charset' for bend_initrequest structure. A backend init handler should set this member to its native character set for query terms. When defined, the frontend server logic will announce this character set to a client if the negotiationModel bit is set by the client. All server implementors are encouraged to specify this. If a backend server does not specify this a warning is issued using yaz_log(YLOG_WARN,..). Added CCL utility to remove terms (stop words) from resulting RPN tree. This is handled by functions with prefix ccl_stop_words_ . New ZOOM C option, "rpnCharset", which allows client-side conversion of terms in RPN queries. Clean-up the CCL API. Moved some internal structures from ccl.h to private header cclp.h. Changed ccl_parser_create so that a Bibset must be supplied. Removed tokenize API from ccl.h - including ccl_parser_find. This is replaced by ccl_parser_find_str which takes a string instead. Split YAZ library into two libs : libyaz.la and libyaz_server.la. libyaz.la is the core of YAZ except the generic frontend server and does not depend on POSIX threads anymore. libyaz_server.la is the generic frontend server facilities and uses POSIX thread functionality if available. The libyaz.la no longer depends on POSIX threads because the number of global structures is limited. NMEM no longer re-uses blocks between threads ; it simply free's memory immediately but allocates in "large" chunks as usual. We don't expect any performance penalties because of this. The yaz_log system is still using a global log_level so caution must be taken when modifying it with yaz_log_init_.. + yaz_log_mask_str. This, however, should not cause any trouble because these functions are called during initialization of application code anyway. `yaz-config --libs server` returns libs for server applications; `yaz-config --libs` returns libs for non-server applications. New OID database - with public definitions in oid_db.h. Removed old OID database including the head oid.h and definitions such as enum oid_value and struct oident. The new OID database uses the same string names as before but the 'protocol' is gone. There are now only two representations raw OID (int *) and string. Functions with prefix yaz_string_to_oid converts from string to OID; functions with prefix yaz_oid_to_string converts the other way. Change to emit_term() in CQL-to-PQF query translation: when a term has the /regexp relation modifier, do not process it for leading and trailing "^" and "*", which have quite different meanings in regular expressions. Attempted fix of bug #976: Segfault in yaz_iconv. The yaz_iconv function write handlers no longer carries a 'last' parameter. This will make yaz_iconv flush "less" characters. A flush is performed by call to yaz_iconv(cd, 0, 0, &outbut, &outbytesleft) . Definition of wrbuf_diags moved to querytowrbuf.h. Function wrbuf_put_zquery removed, because function yaz_query_to_wrbuf does the same. API changes to WRBUF. wrbuf_free removed; replaced by wrbuf_destroy. And wrbuf_puts no longer appends '\0'. Use wrbuf_cstr to get C-string out. Deprecated MARC utility functions removed. Changed prototype of yaz_marc_decode_buf: const char for result and size_t for rsize. Branch split: YAZ_2_1_55_branch --- 2.1.54 2007/03/16 Fix to ZOOM-C so that transparent reconnection is properly handled on connections that are in asynchronous mode. Fixed compilation on OpenBSD 4.0. Large strings in GRS-1 records are now properly displayed in yaz-client. Added character conversion support for "advancegreek"; based on patch from Giannis Kosmas. Fixed yaz_iconv to return YAZ_ICONV_EINVAL if an incomplete MARC-8 combo sequence is met. Before the error was not set so it would be unknown. Adjust yaz-marcdump MARC reader so that it skips until record separator is read --- 2.1.52 2007/03/07 ZOOM-C: Removed hardcoded limit of 1024 sockets in ZOOM_event_sys_poll(). Note that ZOOM_event_sys_select() still has the limit due to the fixed-size fd_set structure used as a bitmask for the FDs to be selected on. Using ACX_PTHREAD macro to check for POSIX threads. Fixed have-vsnprintf check. --- 2.1.50 2007/02/23 Fixes for configure on BSD. Bug #900. Added snprintf/vsnprintf wrappers for systems that don't have limits (heavens forbid). Fixed bug in ZOOM-C's event and task handling. If a ZOOM task was created before all previous tasks were completed and removed from the task queue, the new task could be removed by a mistake. Fixed bug #615: Document retrievalInfo facilities for Frontend Server. Implemented pass-through CQL-to-PQF conversions. Bug #861. Fixed bug #832: Problem with MARC/charset in yaz-client. Fixed bug #668: save command line history for yaz-client. Fixed bug #830: pkg-config support. --- 2.1.48 2007/01/23 Extended ZOOM result set options with two options that may be read by a client: resultSetStatus and presentStatus with values as specified for the ASN.1. See: http://www.loc.gov/z3950/agency/markup/04.html#Search-status Fixed bug #827: Using SSL fails on Debian etch. Fixed bug #826: Weird looking chars for set of MARC records. Implemented alternative Item Order package for ZOOM. If option "doc" is set, that is treated as an ItemOrder with itemRequest being an XML document external. The value of "doc" is the content. Extended the GFS search facility. New member of bend_search_rr 'estimated_hit_count' signals that hits is known to be an estmate (higher or lower than real hit count). New member 'partial_resultset' signals that the search was partial (hit count is lower or equal than real hit count). For Z39.50, the information is stored in resultSetStatus member of SearchResponse APDU. For SRU, the information is signalled via SRU diagnostic 59: "Result set created with valid partial results available". Switched from jade/pdfjdaetex to dblatex for Docbook documentation in PDF. --- 2.1.46 2007/01/13 Implemented bug #806: Deal with HTTP clients sending LF in HTTP headers. Added ZOOM_connection_peek_event. Implemented Generic select hook for ZOOM (bug #803). This is achieved with the following new functions: ZOOM_event_nonblock, ZOOM_connection_process, ZOOM_connection_get_{socket,mask,timeout}, ZOOM_connection_fire_event_{timeout,socket}. The existing blocking event handler, ZOOM_event, is a wrapper for the + blocking ZOOM_event_sys_{poll,select}. Implemented function ccl_xml_config which parses XML version of CCL configuration (bug #798). Fixed bug #797: yaz_marc_write_xml does not honor character conversion. Added timings utility (yaz/timing.h) --- 2.1.44 2007/01/03 Added yaz_marc_write_xml which creates MARCXML/MarcXchange record as Libxml2 tree. Fixed bug #779: Rotation of apdu.log fails. Fixed for character set conversions: Unicode to MARC-8 conversion for certain less preferred UTF-8 sequences. Honor G1 set in MARC-8 decoding. --- 2.1.42 2006/12/17 Fixed bug #775: char conversion does not handle Alternative UTF-8 sequences. Implemented function yaz_marc_read_line which parses MARC line format records. There is a wealth of formats out there. So far, this function reads line records produced by yaz_marc_write_line. yaz-marcdump's options -x, -X, -I, -e have been replaced with the more generic and easier to remember(!) options: -i format and -o format which specifies input format and output format respectively - where format is one of "marc", "marcxml", "line", "marcxchange". Added 'check only' option for MARC utilities. Option -n for yaz-marcdump does not print anything except warnings for records. For yaz-marcdump, added support for MARC split into files (-s) with a given chunk size (-C). Changed the SRU update structures and codecs to reflect the SRU pre 1.0 spec, at http://www.loc.gov/standards/sru/record-update/ This has changed the binary layout of the following structs: Z_SRW_extra_record, Z_SRW_updateRequest, Z_SRW_updateResponse and bend_update_rr . Patch by Ko van der Sloot. Added GFS utility function bend_assoc_is_alive which returns 1 if association is still alive (client is connected); 0 otherwise (client closed connection). This allows busy servers to stop working for impatient clients. Added ziffy: the promiscuous Z39.50 APDU sniffer. until now, ziffy has been a separate piece of software. This version of ziffy has been modified to fit with YAZ. ziffy is copyright Rocco Carbone and covered by GPL v2. Fixed bug #740: Handle SRU records referring to xmlns's outside recordData. Fixed bug #722: Allow Z39.50 Init Options to be specified / retrieved. Client code may now interrogate options such as "init_opt_sort" to find out whether the server claims to support various options. --- 2.1.40 2006/11/27 Added utilities yaz_{set,get}_esn to set/get element set name from record composition. Removed the build of libyazthread.la. The libyaz.so is the threaded version of YAZ and has been so since YAZ 2.1.10. Implemented ZOOM_record_error which returns error information for record (surrogate diagnostic). --- 2.1.38 2006/10/31 Updates for SRU Update by Ko van der Sloot: 1. Changed name from "operation" to "action" 2. Fixed that that "recordIdentifier" was called "recordId". Kept the old versions in the code, marked as 'backward compatible'. 3. Added diagnostics for SRU Update. Fixed bug #709: Records are fetched in wrong format when tasks are queued. Fixed bug #707: CQL->RPN ignores lines with leading spaces. Fixed bug #706: XML hex encoding UTF-8 chars out of range 0-255. For GFS, fixed problem with SRU diagnostic 'First record position out of range' being issued for 0 hits. zoomtst10 part of Windows Build. --- 2.1.36 2006/10/13 Implemented yaz_filepath_comp which splits a path into file path components (required by Zebra 2.0.3+). Change wording of YAZ license to the 'Revised BSD License'. YAZ has used a BSD inspired license until now so this should not have any real impact on anybody. See http://www.opensource.org/licenses/bsd-license.php Fixed bug #687: Missing log lines. Fixed bug #678: CQL to PQF translation does not preserve double-quote escaping. Fixed bug #689: SRU diagnostics to be added. Implemented new ZOOM function, ZOOM_connection_is_idle, which checks whether a connection is idle (no more work do do). --- 2.1.34 2006/10/04 Change type of optval from long to int for invocation of setsockopt with the SO_REUSEADDR option. Thanks to Ateeq A. Altaf, Talis. Added support for specifying the max log file size for the Generic Frontend Server. The size is given with option -r. --- 2.1.32 2006/09/21 Fix problem introduced in YAZ 2.1.28 WRT unix sockets in the ZOOM code. --- 2.1.30 2006/09/17 Fixes for getaddrinfo use, Bugs #655 + #660. These bugs were introduced in YAZ 2.1.28. Fixed bug in Generic Frontend Server that could cause a server to stop accepting new connections. Bug only seen on dual CPU Windows 2003 server. For the generic frontend server, the maximum record size is used as maximum size of incoming packages (SRU + Z39.50). The value until was previously only used in Z39.50 Init negotiation and, later, in a session controlled sizes of records returned. This is controlled using -k option. It can be specified, per server, with element maximumrecordsize in YAZ' GFS XML config. --- 2.1.28 2006/09/04 TCP/IP comstack uses getaddrinfo now to resolve names. It should be IPV6 friendly now. Fixed bug #644: Using Non Reentrant gethostbyname causes SIGSEGV. New option for yaz-marcdump -lpos=value which allows setting a portion of MARC header to a certain value. Fixes for MARC generation when encoded as MARC-8 (bug 642, 643). ZOOM-C reads option extraArgs. If set the value of extraArgs is appended to SRU URI (POST/GET). Value must be URL encoded, such as x-id-a=v1&x-id-b=v2 . --- 2.1.26 2006/08/15 Fixed problem with SRU mode type (soap, get, post) for yaz-client and ZOOM-C. Fixed problem another problem with ZOOM_EVENT_RECV_RECORD . Bug #626. --- 2.1.24 2006/08/08 Fixed MARC ISO2709 encoding routines to deal with character set conversion. Minor changes to GFS logging. Database included in search request log line. Fixes for ZOOM-C: event ZOOM_EVENT_RECV_RECORD was not generated for cached/multiple records. Shared libraries are built by default on Unix+configure. Changed cql2pqf transformation to use a different evaluation order. The new order is: always, relation, structure, position, truncation, index and relationModifier. Old order was: always, relation, relationModifier, structure, index, position, truncation. Note that the the latter ones override former ones for identical attributes.. The new scheme means that it is possible to override any existing attribute with a relationModifier. And also that it is possible to override everything for the index rule (except the ones listed in relationModifier). No order is perfect but this one, we believe, covers more real cases.. The "always" should have been called "default", since the attributes there can be overridden with all the rest. For Libxml2 and friends, YAZ defines YAZ_HAVE_{XML2,XSLT,EXSLT) in the compilation phase, but also for yaz-config --cflags output. This allows us to have public headers with Libxml2 stuff in them . It should also, eventually, make Libxml2 checks redundant in packages using YAZ, such as yazproxy. --- 2.1.22 2006/06/15 Changed SRU update structure bend_update_rr so that SRU diagnostics are stored in uri, message and details.. Previously diagnostics were stored in errcode, errstring. Patch by Ko van der Sloot. Breaks binary compatibility.. but he's probably the only one affected, so. Added support for CCL, compiled on the client side, in ZOOM-C. This is invoked using ZOOM_query_ccl2rpn() with the CCL configuration as input; the resulting query objects can be used for for searching with ZOOM_connection_search() and scanning with ZOOM_connection_scan1(). YAZ' configure searches for OpenSSL by default. SSL comstack uses SL_CTX_use_certificate_chain_file rather than SL_CTX_use_certificate_file. See http://lists.indexdata.dk/pipermail/yazlist/2006-June/001615.html for more info. Thanks to Ko van der Sloot. --- 2.1.20 2006/06/02 Bug #600: SRU GET, POST support for yaz-client. Introduced command 'sru' which selects method SOAP/GET/POST. Allow missingValueAction to be specified for the sortspec string - function yaz_sort_spec. By default, the missing value action is null. Use ! to specify "abort". Use = followed by stringvalue to specify default value. Ensured that Present-handler (if defined) is called in GFS before any call to fetch-hhndler. This now includes piggy-backed presents as well as SRW/U searchRetrieve requests. Documentation for YAZ is now based on the Docbook XML/XSLT using xsltproc + N Walsh's stylesheets. It means that the CVS version of YAZ is no longer depending on jade/openjade or docbook-to-man scripts. PDF is no longer part of the distribution - but can optionally be made using DSSSL/jadetex or FOP. Added retrieval handling support in Generic Frontend Server to support conversion between MARC/XML as well as XSLTtransforms. See etc/yazgfs.xml for an example. Added Authentication support to Generic Frontend Server in SRU mode. Authentication using HTTP Basic is supported, as is the use of 'x-username' and 'x-password' parameters in the request itself. Added support for a new character set MARC8s identical to MARC8 except that it converts combined characters to single Unicode characters in the Latin-1 range (when possible). --- 2.1.18 2006/04/24 ASN.1 compiler 0.4: generates brief Doxygen file header for generated .h/.c files. Utility yaz_iconv now supports conversion to MARC-8. New facilities for the MARC module. The reading - and writing of content are separate methods for the yaz_marc_t handle. The following read functions are available: yaz_marc_read_iso2709 (Reads MARC in ISO2709 format), yaz_marc_read_xml (reads MARC in MARCXML/MarcXchange format). Write functions have prefix yaz_marc_write_.. The existing utilities yaz_marc_decode_wrbuf and yaz_marc_decode_buf are still available. Removed support for OAI-MARC and simplexml (not the simplexml from PHP5). Added a new ZOOM event type ZOOM_EVENT_END which signals no more events to be returned for this connection. --- 2.1.16 2006/03/31 Allow multiple languages and charsets to be specified with yaz-client. Each item must be separated by comma (NO BLANKS). E.g. negcharset iso-8859-1,utf-8 Translation of proximity nodes from CQL into PQF now works. Moved to automake 1.8, 1.9. Added function yaz_log_set_handler which allows a log handler to be installed. This handler will be called for all log messages. Output to file is also produced; but that can be disabled by passing NULL fname to yaz_log_init_file. Fixed another problem with MARC-8 -> ISO-8859-1 conversions. Bug #537. For SRW (including GFS), accept application/soap+xml as content-type for SOAP msg. For GFS in SRU mode, an empty stylesheet in SRU URL (&stylesheet=&) produces NO stylesheet reference even if a default stylesheet is specified in GFS XML config. --- 2.1.14 2006/03/14 Updated Windows package to include yazd.dll + yazd.lib for the Development component. If the environment variable YAZ_LOG is set, then it is used as a string indicating the default level of logging to use if not overridden by calls to yaz_log_init() or yaz_log_init_level(). If it's not defined, then the manifest constant YLOG_DEFAULT_LEVEL is used as before. So, for example, to omit warnings from YAZ logging, export YAZ_LOG=-warn cql_transform() now map structure and other attributes before indexes, so that index-specific structures and other attributes can override defaults. So now a combination of mapping specifications such as: structure.* = 4=1 index.dc.date = 1=date-modified 4=5 does the right thing. cql_transform() now also respects the "always" mapping specification, which establishes an initial set of attributes to be used for all terms except where overridden by more specific attributes associated with the index, relation or modifier. Added SRU-GET and SRU-POST support for ZOOM C. Option "sru" specifies which mode to use; one of "post", "get" or "soap" (SRW, default). Fixes for yaz_iconv routines: changed trie-based character set conversions to use only non-negative values for bit fields due to Sun's C compiler not supporting negative values. Fixed bug in character set conversion yaz_iconv. Some three byte UTF-8 sequences where not read correctly. Fix by Rustam Usmanov. Updated win/makefile to use options, settings which makes things compile with VS C 2005. --- 2.1.12 2006/02/01 Fixed bug in yaz_oi_update which used incorrect value for categoryValue. In ZOOM socket code, use select instead of poll on MacOSX. ZOOM-C now support client-side compilation of CQL into RPN that is sent to the server, enabling CQL to be used against all Z39.50 servers. Use ZOOM_query_cql2rpn() to set the compiled CQL into a ZOOM_query object, and submit it using ZOOM_connection_search(). The CQL-to-RPN translation uses a configuration file, the name of which must be specified in the Connection's "cqlfile" option. ZOOM-C also support CQL scanning, via the new ZOOM_connection_scan1() function, which takes as its start-term parameter a ZOOM_query object (which may have had either CQL or RPN set into it). --- 2.1.10 2005/11/29 Added ZiNG Update Support. New codecs are defined in srw.h. Extended the GFS to support this as well. Backend handler, bend_srw_update, does the update work. Code contributed by Ko van der Sloot. Allow retrieval of Search Result-1 information in ZOOM by the use of options that are attached to a result set. ZOOM documentation updated accordingly. Fixed bug #416: First/second comb characters not handled in the MARC-8 to UTF-8 conversion. Patch by Raj Patel. Added option -m to GFS to control formatting of timestamps in log file. Added 'exit' as synonym for 'quit' in yaz-client Added support for specifying SRW resultSetId + resultSetIdleTime in a Generic Frontend Server's search handler. Refer to include/yaz/backend.h for the new members. Patch by Ko van der Sloot. Added support for SRU POST. It is supported for content-type application/x-www-form-urlencoded only. Patch by Ko van der Sloot. Do not build the separate Multi-threaded (MT) library libyazthread.la. Instead make the library libyaz.la multi-threaded. Threading as a whole can still be disabled by configure option --disable-threads. Previosly, with older GLIBCs there were problems with MT libs under Apache. This has now been fixed a long time ago. Fixed bugs in yaz_log that occurred on Sparc Solaris in Multi-threaded applications. CQL module modified to be case insensitive for relations/indexes/operations. Fixed bug in CQL transform code: incorrect value relationModifieder was used. Added 'show all' command for yaz-client which retrieves all results for last search. Added new yaz-client, xmles, which takes a (private) OID and a document to be sent as an extended service request. Describe new yaz-client commands wait_response and set_auto_wait. Increase TCP/IP listener backlog from 3 (which I am guessing was copied from the SunOS manual entry way back when) so SOMAXCONN, so that the socket will queue as many incoming connections as it's able to handle ongoing connections. In other words, it will never now refuse a connection that it would be able to handle merely because it's not got around to accepting() enough of the pending connections yet. This is the behaviour anyway under Linux, where the listen() argument is ignored; but not under BSD and on systems such as MS-Windows that use BSD-derived TCP/IP stacks. The behaviour of YAZ-based servers should now be uniform across operating systems in this respect. yaz-marcdump uses 64-bit file access on some systems. This is enabled on Linux and other Unix variants where _FILE_OFSET_BITS=64 is supported. This allows yaz-marcdump to read large MARC batches (>2 GB). Modified all YAZ source files - except the source which is auto-generated by tools - to use spaces rather than TABS. Emacs/VIM trailer added to all source files. Add ZOOM_connection_option_getl() and ZOOM_options_getl(), corresponding to the existing *_setl() function. These allow option values containing arbitrary valuues. Add ZOOM_resultset_sort1(), which should ALWAYS be used in place of ZOOM_resultset_sort() in new applications. Its behaviour is identical except that it returns an indicator of whether or not the sort criterion was accepted (0 for OK, -1 for invalid). --- 2.1.8 2005/06/07 Fixed bug in yaz_marc_decode_buf. By mistake the routine appended MARC output rather than returning "new" buffer. yaz-client warns about unknown init options. Fixed bug #371: "options concurrentOperations ignores concurrentOperations" --- 2.1.6 2005/05/24 Added support for SRW sort in Generic Frontend Server. Patch by Ko van der Sloot. Member srw_sortKeys in bend_search_rr holds sortKeys - or NULL if none is provided. Fixed bug #307: It was impossible to specify indefinite/no timeout for ZOOM_event. Special timeout value -1 now means indefinite timeout (i.e. no timeout). Added support for multiple languages and charsets to be specified in ZOOM. Each charset/language is separated by a blank. If negotiation is in effect in init-response, Option "negotiation-charset-in-effect-for-records" set to 1(true) or 0(false). Code based on patch by Vasiliy Osadchuk. Fixed bug #306: infinite recursion that occurred when calling yaz_log_level_init as the first call (before other log level or nmem_init calls) Fixed bug in scan handling in front end server: if preferred-Position-In- Response was non-present, a NULL pointer referece was performed. --- 2.1.4 2005/04/26 Changed include/yaz/diagbib1.h and added include/yaz/diagsrw.h with diagnostic messages+codes for Bib-1 and SRW. Preprocessor defines are now defined for all those error codes. So instead of putting 109 in your program you'd use YAZ_BIB1_DATABASE_UNAVAILABLE. The messages are generated from a .csv - file. See src/bib1.csv and srw/srw.csv. Modified the yaz-marcdump utility to skip garbage bytes between MARC records in a file. Fixed bug - uninitialized memory - due to bad code for fix of bug #272. Program yaz-client now exits and produces an error message if multiple Z39.50 servers are specified on the command line (none or one allowed only). Program yaz-marcdump skips garbage bytes between ISO2709 records rather than abort. --- 2.1.2 2005/03/16 Fixed bug #273: Update for recent MARC-8 -> UNICODE changes. Fixed bug #272: Preserve spacing for CCL terms. --- 2.1.0 2005/03/14 Added support for virtual hosts and multiple backend servers for the YAZ frontend server. The configution is XML based and support specificition of CQL to RPN mappings and explain information. See section "Virtual Hosts" in the YAZ manual. Extended OPAC display utility. OPAC display utility renders bibliographic (MARC) record as well. Added yaz_opac_decode_wrbuf to supplement yaz_marc_decode_wrbuf. Fixed a bug in MARC decoder that could caused it to crash for some invalid MARC records. More diagnostics and warnings where added in XML output (warnings, etc are stored in comments). --- 2.0.34 2005/02/08 Fixes for UNIX domain sockets. Bug #261. Fixes for MARC-8 to UTF-8 conversion. Bugs #258 and #260. Fixed bug #263: YAZ MARCXML dump shows extra spaces after control fields. Added yaz_marc_subfield_str which defines subfield lead string which is used in YAZ_MARC_LINE format. Default string is blank+$. Added yaz_marc_endline_str which defines end of fields string used in YAZ_MARC_LINE format. Default string is newline. Experimental support for MarcXChange. This format can be produced by yaz-marcdump and is implemented in yaz_marc_decode - functions. http://www.bs.dk/standards/MarcXchange.xsd Added yaz-client commands scansize that sets maximum number of entries to be returned by scan. --- 2.0.32 2005/01/11 Added support for SRW scan in yaz-client and Generic Frontend Server. * Added whereInList member to SRW Scan Term. * Changed Z_SRW_scanRequest to be able to carry both CCL and PQF. Fixed NMEM system to return aligned blocks on the smallest boundaries that are suitably aligned for all possible types on the particular architecture YAZ is being built for. --- 2.0.30 2005/01/04 Fixed numerious warnings that was issued with newer versions of GCC. Fixed NMEM system to return aligned blocks on 8 byte boundaries rather than 4 bytes, since 4 may not be enough on some systems such as GCC 3.4.3 on Solaris. Make YAZ Generic Frontend Server slightly faster. Enhance (and reduce) logging for Generic Frontend Server. Revert YAZ log system so that it flushes every write operation by default. (YAZ 2.0.26 and earlier verisons did that). Bug #240. Modified the YAZ logging system. The LOG level defines use YLOG_ prefix instead of LOG_, due to name clash with syslog(3). LOG_ are still present. New applications should define YAZ_USE_NEW_LOG=1 - this will effectively disable old definitions. --- 2.0.28 2004/11/09 Added yaz_log_time_format which specifies log format using strftime(3). Added yaz_log_module_level which returns mask for a module. Value is non-zero mask a if module is enabled; zero if disabled. * Fixed bug #148: CQL parser may leak. A few prototypes were changed in include/yaz/cql.h. Fixed bug #176: Dont throw diagnostics on empty SRU args. Fixed bug #175: surrogate diagnostics in SRW lacking NS. Fixed bug #172: RPM builds does not enable SSL. Doxyfile.in part of dist. Doxyfile generated by configure. Configure aborts if any of --with-xml2, --with-openssl, --enable-tcpd are given and the corresponding component does not exist. Extend CCL documentation in YAZ reference. Describe r=r. --- 2.0.26 2004/10/01 Fixed MARC->MARCXML conversion to properly deal with fields, subfields, indicators having non-ASCII characters. Fixed MARC->MARCXML conversion so that ASCII control characters except TAB,CR,LF are removed from resulting XML (XML 1.0 does not support these). Added YAZ GFS support for conversion from Z39.50 surrogate diagnostics to SRW surrogate diagnostics. Bug fix: YAZ GFS did not return schema in explainResponse. --- 2.0.25 2004/09/30 The YAZ GFS when converting SRW/SRU requests to Z39.50 structures now converts recordSchema to elementSetName as well as schema URI. Fixed bug in COMSTACK that prevented HTTP request packages from being decoded properly. --- 2.0.24 2004/09/29 Added CCL facility r=r "range" which is similar to r=o "ordered" but does not require white-space before and after the dash in a range, e.g. x=-1990 is equivalent to x <= 1990 iff r=r, but equivalent to x= -1980 iff r=o. Fixed a few AC_TRY_LINK configure tests that did not operate properly due to new GCC removing "redundant" code. Added yaz-client commands scanpos and scanstep that sets preferred position and step-size for scan. Macro YAZ_INIT in yaz.m4: option --with-yazconfig renamed to --with-yaz. Added CCL utility ccl_qual_buf which parses one or more CCL spec lines in a buffer. Added CCL utility ccl_qual_line which adds CCL qualifier line consisting of name and value - ignoring empty lines and comments. On Windows, the debug DLL/import lib is now named yazd.{dll,lib}. Added odr_get_element_path which returns current element path for an ODR handle. This utility is useful in error handling or user-defined ODR_PRINT stream. Added ODR_PRINT utility odr_set_stream which is is a more generic alternative to odr_setprint. odr_set_stream takes a stream handle, pointer to a write function and pointer to close function. The close function - if non-NULL - will be called during odr_destroy. Fixed bug in CCL parser where truncation char was not removed from right side when truncation=both was in effect. Fixed CQL parser to use unsigned chars for isxxx from ctype.h due to VS.NET. --- 2.0.23 2004/08/11 Fix buffer overrun in CQL parser when dealing with proximity (%). Fixes for MARC-8 in yaz_iconv character set utilies. The MARC-8 to UTF-8/UCS conversion is now only based on codetables.xml. yaz_marc_decode_buf sets leader pos 9 to "a" for MARCXML output. --- 2.0.22 2004/08/06 Add support for more "commit changes" in ZOOM (uses Extended Services). For yaz-client, command set_marcdump / -m dumps SUTRS/XML/.. records as well. Yet another small fix for configure of SSL. --- 2.0.21 2004/05/14 Fix SSL libs for configure when --with-openssl=DIR is given. --- 2.0.20 2004/05/10 Add autoconf m4 macro YAZ_DOC for YAZ documentation setup (docbook). SSL comstack now uses yaz.pem certificate file on server side by default. Certificate filename can be configured by calling comstack function cs_set_ssl_certificate_file before cs_bind is used. Fix bug regarding multiple calls to ZOOM_connection_connect. Implement cs_set_ssl_ctx which sets SSL_CTX for SSL comstack. Do not create SSL_CTX in cs_create (ssl_type). Create in tcpip_bind, tcpip_rcvconnect instead. This allows user to set custom SSL_CTX. ZOOM now allows inspection of X509 peer certificate for verification. The X509 buffer is retrived by reading ZOOM option "sslPeerCert". Removed libyazssl.la. When SSL is enabled, libyaz.la has SSL support and all programs have too (yaz-ztest, yaz-client, zoom..). May not be as "modular" but it simplifies things. Added cs_get_peer_certificate to that returns peer X509 PEM. Added cs_get_ssl that returns SSL handle (SSL *) for SSL comstack; returns NULL if SSL is unavailable. Documentation about MARC decoding tools. Fix --disable-tcpd to really disable tcpd. Patch by Robin H. Johnson. --- 2.0.19 2004/03/30 Rename CHANGELOG to NEWS to follow GNU style packing. Fix bug with missing initialization of member in init_diagnostics. This bug affects threaded version of GFS server. --- 2.0.18 2004/03/20 Use wrbuf_xmlputs_n instead of wrbuf_write_cdata to avoid clash with Zebra symbol. Ensure zlib.dll is packed with Windows install. --- 2.0.17 2004/03/17 Fix encoding of xsd:string to use text instead of CDATA. Fix endless loop in CQL parser with unbalanced ". Use a more compact way to store MARC-8 conversion tables. --- 2.0.16 2004/03/16 Debian only Oleg Kolobov Fixed a bug in yaz_iconv regarding conversion to UCS4 / UCS4LE. Update CQL parser to use new CQL 1.1 modifiers for booleans and relations. Add CQL test cases. --- 2.0.15 2004/03/01 Another fix for decoding of XML packed records. --- 2.0.14 2004/02/25 Fixes for Chunked encoding. White space not ignored after length spec. Update NS and use default NS for SRW diagnostic elements. --- 2.0.13 2004/02/23 Implement ZOOM_resultset_cache_reset which resets record cache. Implement ZOOM_resultset_sort which sorts a result set. Implement chunked HTTP transfer. For SSL, use -lssl -lcrypto on systems that don't have pkg-config. --- 2.0.12 2004/02/16 Added member 'schema' to bend_explain_rr structure so that backend can specify explain record identifier. Defaults to Zeerex 2.0. Fix encoding of OID's of form 1.0.X. Bug introduced in 2.0.11. --- 2.0.11 2004/02/16 * SRW/SRU 1.1 updates: updated diagnostic in srw.h to use uri instead of code. Added init command for yaz-client which sends "extra" init request. Fixed two bugs in OID codec - ber_oidc. Throw error when encoding/decoding bad truncated OID. Fix decoding of OID X.Y... when X=2 and Y>39. Fixed a bug in ASN.1 compiler that caused Type-1 Operator codec to fail. Make ZOOM error code for "invalid query". Fixed compilation for SSL which wasn't properly enabled for all platforms. --- 2.0.10 2004/02/05 For yaz.m4, allow second argument for YAZ_INIT to hold minimal version of YAZ required. * SRW/SRU 1.1 updates. Diagnostic code now a URI. Added option -p to make Generic Frontend Server to write PID file. Added option -D to put Generic Frontend Server in background on its own. Make ZOOM C recognize option "password". If unset, "pass" is used (for backwards compatibility). Fixed a bug in Generic Frontend Server that could make it crash if a client sets characterSetNegotation bit, but didn't pass negotiation stuff in InitRequest. New YAZ client command, zversion, that sets Z39.50 version (1,2,3..). Must be issued before open, in order to be in effect. --- 2.0.9-6 2004/01/12 Debian/Windows Make the SRU server more picky WRT unknown params, etc. Bug fix: ZOOM scan response didn't return displayTerm - when present. New YAZ client command, options, that sets Z39.50 options. New utility functions yaz_init_opt_{encode,decode} to encode/decode Z39.50 options from a string of tokens (one token for each option bit). Update SRW diagnostic code messages. --- 2.0.9-5 2004/01/07 Debian/Windows Handle user defined stylesheet for SRW/SRU. --- 2.0.9-4 2004/01/06 Debian/Windows Fix bug in decoding of Content-Length. --- 2.0.9-3 2004/01/06 Debian/Windows Fix a bug with decoding of XML packed records. --- 2.0.9-2 2004/01/05 Debian only Allow empty ODR (NMEM=0) for odr_oiddup and odr_getoidbystr. Fix bug in SRW/SRU diagnostics decoding. --- 2.0.9 2004/01/05 Fixed bug in Generic Frontend Server which could drop records exceeding preferred message size. Reported and fixed by Irina Dijour. Fixed calculation of package size for structured records in Generic Frontend Server. Reported and fixed by Irina Dijour. Fixed namespace for SRW/SRU diagnostics. Fixed SEGV in yaz-client that occured for HTTP connection errors. --- 2.0.8 2003/12/22 * SRW/SRU 1.1. Since the Namespace has changed for SRW/SRU, it means that this version is incompatible with version 1.0 and older YAZ SRW/SRU implementations. CQL changes to reflect recent changes to the specification: * Documentation talks about context sets instead of index sets. * Documentation talks about indexes instead of qualifiers. * The CQL-to-PQF transformer's configuration file now uses "index.set.name = " instead of the old form "qualifier.set.name = ". (Both forms are still understood but the latter is deprecated.) * CQL terms with no explicit index specified are now interpreted as cql.serverChoice instead of srw.serverChoice (which of course behaves exactly the same.) --- 2.0.7 2003/12/16 MARC conversion can now generate ISO2709 output in another character set. yaz-marcdump uses this facility if you invoke it with option -O. Added missing C decl macros for include/yaz/{soap.h,srw.h,cql.h}, so that functions from there can be used from C++. --- 2.0.6 2003/12/04 Frontend server now transfers memory from decoded packages to stream ODR for search. NMEM now clears freed blocks with 'Y' (hex 59) to force bad memory references to show up. ZOOM-C now supports standard ZOOM option names as described in v1.4 of the ZOOM Abstract API. The older names for the same options are still also supported for the benefit of old applications. ZOOM-C supports "implementationId" and "implementationVersion" options to go along with "implementationName". These allow the user code to specify identification strings to be sent to servers. Add OID for the new ExtLite attribute set. Add OIDs for NACSIS-CATP, FINMARC2000 and MARC21-fin record-syntaxes, as requested/supplid by Ere Maijala For generic frontend server, reverse the order of "toolkit-supplied / application-supplied" strings sent as implementationId, Name and Version. Also, remove the spaces around the slash. This brings the GFS in line with the behaviour of ZOOM-C on the client side. Add function ZOOM_scanset_display_term. yaz-client shows scan displayTerm if present. Utility yaz-iconv is now installed by default along with the man page yaz-iconv.1. Extend configure check for OpenSSL to use pkg-config where available (such as RedHat 9). Incorporate patch by Morten Bogeskov which allows a Unix file socket server to specify uid/gid/mask for socket using the format unix:[user=uid,][group=gid,][umask=mask,]file=path If file= is omitted the existing format is assumed, e.g. unix:path in which case the mask is 0666 (rw for everybody). Major restructure of YAZ source. All source in libyaz is in src directory. Programs in client (yaz-client), ztest (yaz-ztest), zoom (zoom programs), util (utility programs such as ASN.1 compiler, yaz-marcdump). Added man page for utility yaz-marcdump (used to be called marcdump). yaz-marcdump is installed by 'make install'. Fixed a memory leak in Generic Frontend Server that occurred when decoding of incoming package failed. Fixed a potential DOS attack vulnerability in COMSTACK/ODR. Change prototype of odr_perror: add const to message string. New function yaz_log_reopen which reopens log file (for log rotate, etc.) * Blocking parameter for COMSTACK cs_create is now a bit mask rather than a blocking flag. Bit 0 is set for blocking, reset for non-blocking. Bit 1 is set if cs_addrstr should avoid DNS lookup; reset for full DNS lookup. There should not be any compatibility problems with this assuming that blocking=1 or 0 is used. Fix bad reference in UNIX comstack in function cs_addrstr. Fix for compilation on AIX. The generic front-end server (server/seshigh.c) now supports returning Init diagnostics to the client in User-information-field, in accordance with Z35.90 Implementor Agreement 5 (Returning diagnostics in an InitResponse) --- 2.0.4 2003/09/04 Allow any CQL relation (not just all,any,exact,scr). Fixes for OCLC UI ASN.1 to make it work with SilverPlatter targets that features the same UI. Implemented command update0 in YAZ client which is equivalent to update but uses old of Ext Update ASN.1. Use OID 1.2.840.10003.15.1000.81.1 for privately defined charsets in charset negotiation. Added VAL_ID_CHARSET in oid.h. Previously no OID was used for this info. ZOOM uses smallSetUpperBound=1 instead of 0 for piggyback searches. It apparantely upsets EBSCO Publishing IR Z39.50 Server which returns 'malformed search term' otherwise. SortResponse member resultCount now set to NULL in sort handler of frontend server. OPAC support ZOOM. ZOOM_record_get returns OPAC info (as XML) if type is "opac". Add three new utility functions for translating OIDs between various formats -- symbolic name such as "Usmarc", minus-1-terminated int arrays and dotted strings such as "1.2.840.10003.9.5.1": int *oid_name_to_oid(oid_class oclass, const char *name, int *oid); char *oid_to_dotstring(const int *oid, char *oidbuf); char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oidbuf); Reverted modifications for ES Update definition for z_IU0Update (OID 1.2.840.10003.9.5.1 and 1.2.840.10003.9.5). The definition is back to YAZ 2.0.2. String value attributes for CCL parser. Support for OCLC's locally registered "OCLC-UserInformation" PDU, which their FirstSearch server returns in Init responses, sometimes carrying useful diagnostic information when Init fails. This has the OID 1.2.840.10003.10.1000.17.1 and is defined in the file "z39.50/oclcui.asn", where its definition is somewhat different from what OCLC document on their web-site, as required to interoperate with their servers. Support for anonymous authentication in yaz-client. Use the command "auth -". * Fix the OID of the Index Data-local "admin" Extended Service from 1.2.840.10003.9.81.1 to 1.2.840.10003.9.1000.81.1. The omission of the 1000, which indicates a locally-defined OID, was a mistake. --- 2.0.3 2003/06/20 Fix CCL directive @case handling so that it affects string match for both CCL keywords and qualifiers. * ESFormat-Update updates. Packages with OID 1.2.840.10003.9.5.1 and 1.2.840.10003.9.5 are now handled by the same decoder z_IU0Update . Decoder has been updated with ASN.1 changes as listed in http://lcweb.loc.gov/z3950/agency/defns/updateES.html Note that the "latest" DB Update, OID 1.2.840.10003.9.5.1.1 , handler z_IUUpdate, remains unchanged. ZOOM_record_get may now return a record in a specific character set. For type use "form; charset=from[,to]" where form (render, xml, ..) , "from" is the character set of record as returned by target. "to" is the character set to be returned. If omitted, "to" is UTF-8. YAZ ASN.1 compiler renamed from yaz-comp to yaz-asncomp New ODR utility, odr_getelement, which returns name of element for which encoding/decoding failed. Fixed ODR so that it returns error code OREQUIRED rather than ONONE in cases where a required element was omitted. Bug fix: some MARC8 sequences were not converted. New ZOOM option "step" which specifies number of records to be retrieved in one chunk. Used in conjunction with "start" and "count". SRW support for yaz-client. Use scheme http: to use it, e.g. http://host:port/db yaz-client no longer does (un)intelligent character set conversions by default. Can be enabled with charset and marc_charset commands. xmalloc trace fix for 64-bit systems such as DEC alpha. Solaris 2.6 compile fix. New function, cql_strerror() translates SRW error codes, as returned by cql_transform_error(), into human-readable English strings. Used in yaz-client diagnostics when appropriate. New CQL2RPN query-type for the command-line yaz-client, parses CQL and converts it into a type-1 query which is sent to the server. This makes CQL available for use with all Z-servers, as opposed to the tiny minority that can handle CQL queries themselves. --- 2.0.2 2003/04/28 New Debian package layout similar to the Redhat Package layout. New ZOOM events ZOOM_EVENT_RECV_{RECORD,SEARCH} for receiving a record and search result respectively. --- 2.0.1 2003/04/25 Redhat package is now several packages: libyaz (runtime libraries), libyaz-devel (development and documentation, and yaz (utility programs). Package spec file by Morten Bogeskov. New member 'schema' in struct bend_fetch_rr which the name of requested schema (SRW/SRU) for record (or NULL if none was given). The fetch handler MAY set this to reflect the schema of the returned record. New member 'display_term' in struct scan_entry. GFS now sets member entries and allocates scan entries to be filled by user scan handler. In previous version, entries member was allocated by the scan handler. That still works, but the GFS will ignore member display_term - assuming it was NOT set by the handler. The fact that the GFS now allocates the entries both allows for new members and makes a scan handler easier to write. Fix CQL lex buffer overflow. SRW/SRU recordPacking. For SRW default recordPacking is string. For SRU default recordPacking is string. SRU protocol support for frontend server. Fix compile bug for systems that have nl_langinfo but CODESET undefined. Added missing PQF transform rules for <= and >= . Thanks to Peter Popovics. Added scan for the ZOOM shell (zoomsh). --- 2.0 2003/02/23 * String Identifers for Schemas (Amendment 5). http://lcweb.loc.gov/z3950/agency/amend/am5.html Old definition for schema Odr_oid *schema; /* OPT */ New: int which; union { Odr_oid *oid; Z_InternationalString *uri; #define Z_Schema_oid 1 #define Z_Schema_uri 2 } schema; /* OPT */ * resultCount parameter to Sort Response (Amendment 1). http://lcweb.loc.gov/z3950/agency/amend/am1.html Support for SRW 1.0 over HTTP. This is an optional feature and requires libxml2 to operate. Enable SOAP by specifying --with-xml2 for configure. Generic frontend server supports HTTP/SOAP/SRW and Z39.50/BER on the same port. SRW SearchRetrieveRequests are mapped to bend_init,bend_search,bend_fetch,bend_close. Z39.50 Query Type-104 added - to facilitate CQL within Z39.50. CQL support. Source is directory 'cql'. CQL is supported in ZOOM (both SRW and Z39.50) and the YAZ client (Z39.50 only). ZOOM connections are SRW based if schem http is used for hostname in connect, e.g. z = ZOOM_connection_new("http://myserver"); ZOOM_query may be of type CQL, e.g. ZOOM_query_cql(q, "dc.title=x"); CCL proximity operators !n, %n converts to PQF @prox 0 n 1 2 k 2 and @prox 0 n 0 1 k 2 respectively, meaning: exlusion=false, distance=n, order=true/false, relation=le, prox unit=word. If n is omitted, distance 1 is used. Fixed problem with C compiler include path in wrong order. For TCP/IP COMSTACK, set recv buffer to an appropriate "large" value on Solaris. Patch from Ko van der Sloot. New MARC decode API. All new functions operate on a yaz_marc_t handle. The most important new functions are: yaz_marc_create, yaz_marc_decode_{buf,wrbuf}, yaz_marc_destroy, .. to create handler, decode and destroy respectively. Decoder can produce formats MARC line, simple XML, OAI MARC and MARC XML (LoC). See include/yaz/marcdisp.h. YAZ Iconv utility now supports MARC8 decoding (marc8.c). Converts to UTF-8, UCS-32, wchar_t or Latin-1. * Prototypes for yaz_iconv_-functions moved to separate header include/yaz/yaz-iconv.h. Make a few private functions 'static' in unix.c. This prevents duplicate unix_close in PHP with YAZ and imap. PHP Bug 20977. For ZOOM connection, the options targetImplementation{Id,Name,Version} are set when Init Response is received. New function ZOOM_connection_error_x similar to ZOOM_connection_error but returns diagnostic set as well. New function yaz_strerror which is a portable wrapper for strerror/strerror_r/GetLastMessage. * ZOOM_record_get supports type "xml" in which case MARC XML (from LOC) is returned for MARC. If type is "oai", then OAI MARC is returned. Fix creation of lib/yaz-config so it works if srcdir != objdir. Patch from Kang-Jin Lee. --- 1.9.2 2002/11/26 yaz_marc_decode uses OAI MARC as XML format for ISO2709 records. Fix bad race conditions on SIGTERM and terminate gracefully in frontend server. Move retrieval (data1) module to Zebra since nobody seems to be using it. Add GRS-1 render for ZOOM using same format as yaz-client. --- 1.9.1 2002/10/05 Added man pages: yaz-client(1), yaz-ztest(8), yaz(7), zoomsh(1). Fix broken ESpec handling in data1 module. SGML reader parses comments and makes them part of the data1 tree. Added several type casts so that YAZ compiles as C++ code. ZOOM didn't handle PDU encoding failures properly. Added more Bib-1 diagnostics (approved extensions). GNU configure: better check for iconv. More portable use of accept, getpeername. Check for socklen_t. Use int/size_t if socklen_t is not defined. --- 1.9 2002/09/06 PQF parser rejects bad queries - including those with extra characters in them. PQF parser used to silently ignore that. Cleaner API for PQF added, which allows you to get detailed error information for bad queries (see yaz/pquery.h). Fixed bug in ZOOM_record_get for type "database". Implemented mini iconv library supporting conversions between UTF-8, UCS4, UCS4LE and ISO-8859-1. Implemented in util/siconv.c. * Removed XML reader (d1_expat.c). It's part of Zebra instead. --- 1.8.9 2002/08/20 Fixed ZOOM C record cache so that preferredRecordSyntax and elementSetName is used to check for already fetched records. --- 1.8.8 2002/08/02 Added three members in bend_initrequest structure to facilitate character set negotiation. Fixed a bug in frontend server that could cause indefinite loops under rare conditions. Revised character set utilities (charneg.h) so that encoding UCS-4, UCSA-4, UTF-16 and UTF-8 are encoded non-privately. For PQF, directive @term sets term type for Scan/Search. Here is general, string, numeric, null. The term type is inherited - just like @attr. New call odr_set_charset that sets character set conversion for international-strings on a ODR stream. Prototype is: int odr_set_charset(ODR o, const char *to, const char *from); The InternationalString is still represented as C string in YAZ so native strings of type UTF-8, ASCII, etc. will work (UTF-16 won't). On the protocol level, you can use any encoding. Support for UNIX sockets in ZOOM. Solaris recv sometimes returns errno == ENOENT. It is treated as EINPROGRESS. COMSTACK patch by Ko van der Sloot. New COMSTACK of type UNIX Socket. Use "unix:/path" as address for both client and server. Code by Morten Bogeskov. --- 1.8.7 2002/05/22 On Windows ZOOM functions are of type __stdcall rather than __cdecl, so that they can be used directly from Visual Basic. You must recompile your windows APP if you're using ZOOM. Character Set and Language Negotiation(3) for ZOOM API and YAZ client. Commands "lang" and "charset" sets language and character set respectively. Options "lang" and "charset" is interpreted by the ZOOM API. Note, these are not part of the official ZOOM spec) All is due to Oleg Kolobov. Attributes from multiple CCL fields may be OR'ed rather than merged using directive "@field or". Fields are still merged by default - equivalent to "@field merge". Fixed bug in ZOOM connect that occurred on OpenBSD (maybe others). Patch by Oleg Kolobov. Fixed bug in zget for parameter ExtendedServicesResponse. Fix OID for ILL. --- 1.8.6 2002/03/25 Added PQF feature: '@attr type=value' may be written as '@type=value'. Client displays USR.1:SearchResult-1 (hits per term). Additional Search Info for search in Generic Frontend Server. Fixed CCL parsing of "field=s". WIN32 installer - using the excellent NSIS software from nullsoft. Fixed CCL parsing of "field = - ". Added function yaz_marc_decode that decodes MARC for line mode display or XML (similar to that used by JZKit). Fixed BER decoding of OPTIONAL CHOICE. The bug didn't affect the Z39.50. But ISO/ILL was, however. Added patch by Rustam T. Usmanov that implements Z39.50 duplicate detection service (Z39.50-1995 Amendment 2) and Language Negotiation (3). See: http://lcweb.loc.gov/z3950/agency/amend/am2.html http://lcweb.loc.gov/z3950/agency/defns/charneg-3.html --- 1.8.5 2002/02/03 New YAZ client features: Command completion and new commands: push_command, set_apdufile, set_marcdump, set_cclfields, register_oid. Code provided by Jacob Poulsen. New call oid_trav, that visits all registered OIDs via callback. Function ZOOM_record_get now returns const char pointer rather than void pointer. It saves a lot of type casts. For YAZ client, command "auth" now allows you to set authentication in IdPass style. It is enabled when three tokens are given - order is user, group and password. Fix memory leaks in MARC record handling for ZOOM. New option for YAZ client, -k that sets maximum record size. Similar to -k option for generic frontend server and yaz-ztest. More fixes for scan. Non-zero stepSize handled. OID's fixes. Prefix query parser reports "fail" when bad attribute set is given. Fix in MARC decoder. Proximity logging. Fix for attribute set in scan handler for server. Patches by Shigeru Ishida. SSL/COMSTACK updates. cs_rcvconnect completes SSL handshake. ZOOM works with SSL. Configure option --with-openssl= now works when a directory is specified. Patch provided by Morten Bogeskov. New option for YAZ client, -u , that sets authentication. ZOOM fix: error information was sometimes "missing", since error was cleared/reset too when it shouldn't. ZOOM_record_get returns ISO2709 buffer when "raw" is given. --- 1.8.4 2002/01/04 Scan for ZOOM API. New object ZOOM_scanset. New functions ZOOM_connection_scan, ZOOM_scanset_size, ZOOM_scanset_term and ZOOM_scanset_destroy. New ZOOM function, ZOOM_connection_last_event, that returns type of last event (such as "receive data", "send data", "apdu received", etc. New ZOOM option, schema, that specifies schema for retrieval. New CCL feature. Qualifiers can be aliases for one or more other qualifiers (if more than one is given, OR is used). ZOOM uses named result sets if target supports it. Two new YAZ client commands: . (dot, which sources a script of YAZ client commands), and ! (to execute shell command.). Implemented by Jacob Poulsen. Working on Debian packages. --- 1.8.3 2001/11/19 YAZ client enables named result sets only if target supports it. *** ZOOM. Prefix for ZOOM definitions changed from Z3950_ to ZOOM_. * ZOOM. Removed Z3950_connection_host. Use Z3950_connection_option_get with key="host" to get same result. * ZOOM. Added Z3950_record_clone and removed Z3950_resultset_get. Function Z3950_resultset_record(s) returns references to records "owned" by resultset. To become owner use Z3950_record_clone. Function z_ext_record handles Extended Services. Thanks to Irina Dijour. --- 1.8.2 2001/11/12 CCL Parser fix: ignore token comma when dealing with and-lists. Documentation updates for COMSTACK. * ZOOM changes. Query object renamed from Z3950_search to Z3950_query. Changed prototype Z3950_records. For some functions, int parameters were changed to size_t. TCP/IP COMSTACK no longer uses getprotobyname to avoid memory leak on some Unices. New MARC decode/display function, marc_display_exl, which properly rejects non-ISO2709 records. YAZ client uses it. --- 1.8.1 2001/10/29 Fix bug: local attribute set wasn't set correctly in PQF strings. --- 1.8 2001/10/25 * Old Z39.50 codecs no longer supported. Added ZOOM C binding. See http://zoom.z3950.org/ Renamed states for COMSTACKs to avoid confusion with events. Implemented cs_look and proper cs_rcvconnect. Fixed COMSTACK error that occurred on HPUX. Fix by Giannis Kosmas. Configure detects POSIX threads on OpenBSD. When sort flag 'i' was specified in yaz-client the caseSensitivy flag was set to a wrong value. Thanks to Robert Sanderson for reporting this. When error is returned from present handler, non-surrogate diagnostic is returned in present response (and fetch handler is no longer called). * Minor adjustments to pquery parser (PQF). Token characters may be escaped by using backslash (C-style). PQF parser allows string attribute values to be specified. For @attr, non-numeric characters after the equal-sign are treated as strings (e.g. @attr 9=title). CCL trunction character may be defined (@truncation in file) * function zget_ExtendedServicesRequest sets waitAction to waitIfPossible (was wait). Added cs_set_blocking to set change blocking mode of a COMSTACK. Thanks to Matthew Carey. CCL operator names may be set in field definition files (CCL_bibset). See ccl/bib1 for an example. Fixes in ASN.1 compiler for C++ compatibility. * Renamed members "and" and "or" in struct Z_Operator to "op_and" and "op_or" to avoid conflict with C++. Fixed problem with GNU readline detection on Redhat 7.0. Added step-size for Scan backend handler. Fixed bug that made the frontend server crash when no attribute set was specified for scan. Front-end server automatically switches to original working directory when installed as an NT service. Previously -w had to be specified to make it work. Added extended attributes for retrieval module (data1), so that data1 records carry d1_readXML/SGML attributes. d1_read also supports null-data rules ( ) On UNIX when POSIX threads are available, a separate library libyazthread is created. Programmers should link with that library and the yaz library when using threads. The reason for the split was that some applications on Linux, such as Apache, doesn't work well when using shared objects that relies on threads. Added SSL support for the COMSTACK. You start yaz-client and yaz-ztest (or any frontend server) in SSL mode by specifying ssl: followed by address. Only tested on UNIX. Added feature for CCL module. Virtual structure s=al or s=ol generates and-list and or-list respectively instead of phrase search. Added some OID's. * Added prefix "yaz_" for the functions log_init.., log_file.. and log_mask_str. This was done to avoid name conflicts with other libraries (such as other PHP extensions). Added raw OID member for preferred record syntax (request_format_raw) and returned record syntax (output_format_raw) for backend fetch method. Config file yaz-config now accepts options so that it returns specific compile settings, etc. Thanks to Morten Bogeskov Shared library support for UNIX using GNU libtool. * Modified backend interface. Request/Response struct's replaced by one read/write C struct. For example bend_fetchrequest and bend_fetchresult have been replaced by single bend_fetch_rr struct. Every handler - even search has to be registered in bend_init handler. This means that the YAZ library no longer refers to external functions and it makes it possible to make the whole thing a single DLL/SO. Added Segment handler for backend server. Added Zmbol/Zebra administrative functions to YAZ client. Threaded frontend server on UNIX (when POSIX Threads are available). Starting the server with option -T enables multi-threading. --- 1.6 2000/03/03 Added configure option --enable-comp/disable-comp to control use of YAZ ASN.1 compiler. Use --disable-comp to use the old *coders located in sub directory asn. YAZ ASN.1 compiler renamed to yaz-comp in sub directory. It's installed in ${exec_prefix}/bin along with the other programs yaz-client and yaz-ztest. GNU automake used to maintain makefiles. Added several OID's. Changed retrieval module so that we can load records with no abstract syntax defined. Tagpaths in these records are fully composed of string tags. Implemented ISO ILL protocol. Refer to stuff in sub directory ill. --- 1.5 1999/12/10 On UNIX, the generated makefile now supports a proper 'make install'. The prefix can be set via GNU configure to set the install location (default is /usr/local). * YAZ programs client and ztest were renamed to yaz-client and yaz-ztest to avoid conflicts when users install YAZ in "standard" locations, such as /usr/bin,/usr/local/bin,etc. * YAZ Header files were moved from include to include/yaz. YAZ Header files are referred to as include rather than . The YAZ include path (-I ..) is therefore the same as before. Programmers should update their #include statements or use -Ipath/include/yaz instead. The main motivation for doing this change is that YAZ header files can be installed in "standard" locations /usr/include,/usr/local/include without introducing conflicts, since ALL YAZ header files are stored in subdirectory yaz (under /usr/include for example). Compilation of YAZ for WIN32 is now handled by an nmake-style makefile rather than project/workspace files. We switched because project files are incompatible between Visual C++ 5 and 6. Refer to windows.txt for details. Changed name of logging function, logf, to yaz_log, to prevent name clash with some math-log functions. The YAZ header log.h defines logf to yaz_log (#define) so there should be no incompatibilities by this modification. Added bend_start/bend_stop handlers for server. These handler are called on start/stop of server. For windows they are called whenever a service is started/stopped. * YAZ now auto-generates decoders/encoders for the Z39.50 protocol using a fairly small ASN.1 compiler written in Tcl. The compiler is located in util/yc.tcl. The auto-generated C code structures are, in a few cases, incompatible with the old decoders. There are differences in the following C structures Z_DiagRec, Z_External, Z_SortRequest, Z_SortResponse, Z_AttributesPlusTerm, Z_ProximityOperator, Z_DefaultDiagFormat. The preprocessor variable ASN_COMPILED is defined when the compiled ASN.1 is being used. Encoder/decoder routines as well as the Z39.50 protocol ASN.1 is located sub directory z39.50. If you wish to use the old encoders/decoders you can specify --disable-yc for configure. Assigned OID for old DB Update (VAL_DBUPDATE0). Updated YAZ compiled version so that it supports both new - and old version of DB Update * Added 'name' parameter to ODR encoder/decoder routines to facilitate pretty ODR print. Updated whole Z39.50 encoder/decoder to reflect the change. The name parameter can be set to 0 in which no name is specified for the construction. The macros odr_implicit and odr_explicit sets name parameter to zero for the construction involved. New macros odr_implicit_tag and odr_explicit_tag are similar to the others, except that a name parameter is added. For programmers' that don't use ODR they probably only need to change the call to z_APDU and z_External. Added access control facility by interfacing the TCP wrapper library. YAZ automatically attempts to find the TCP wrapper Library (-lwrap) and tcpd.h on Unix systems. For the server, option -d specifies the name of the daemon and enables the access control as specified in hosts.allow/hosts.deny. Refer to man pages tcpd(8) and hosts_access(5). Fixed memory leak in ccl_find_str and ccl_qual_rm. Thanks to Hans van den Dool . Added reference ID parameter to most functions in server API - refer to backend.h. Thanks to Hans van den Dool . Changed name of ccl library to libccl.a (was ccl.a). Fixed bug in decoder for Explain (Category TargetInfo). Added support for GNU readline in client. Thanks to Jacob Poulsen . GNU configure attempts to detect if readline is available. * CHANGED DEFINITION OF ES: UPDATE (INCLUDING THE OID) to reflect the new definition from the ZIG. NOTE THIS IF YOU HAVE AN UPDATE IMPLEMENTATION! This change was made to the development version before the ZIG decided to retract the amendment. If any users MUST be compatible with the original Update definition, PLEASE CONTACT US, and we will include a separate definition corresponding to the old Update ES. Note that because of the change to the ASN.1 of the TaskPackageRecordStructure we cannot define a single structure that will support both versions. * Added const modifier to buffer parameter for some ODR/BER encoding routines: ber_dectag, ber_declen, odp_more_chunks, completeBER, completeWAIS, odr_dumpBER. Fixed bug in client.c which caused a crash when a scanResponse didn't contain positionOfTerm. * Fixed inconsistency in the ScanResponse/ListEntries protocol. This * will cause an error in a client if a non-YAZ target sends both a * list of Scan entries and non-surrogate diagnostics. Retrieval module enhancements. Tag sets may be typed in the reference to it. From the .abs-file the "tagset" directive takes a third optional integer type for the tag set referenced. From a .tag-file the "include" directive takes a third optional type as well. The old "type" directive in the tag set itself is still recognized but acts as the default type for the tag set. Backend interface change. Individual Scan terms returned from bend_scan may also be tagged as Surrogate Diagnostics. Refer to struct scan_entry in include/backend.h. Retrieval module enhancements. Multiple tag sets and attribute sets may be specified in abstract syntax specs. Revised the error/warning for logging messages reported by the retrieval module when reading the various spec files. Object Identifier system (oid_..) changed. The API is backwards compatible but the oid-routines now allocates new OID's when needed. Raw OID's may be specified in oid_getvalbyname. YAZ now uses GNU configure to generate Makefile(s). * Minor changes in some of the member names of DeleteResultSetRequest and DeleteResultSetResponse. See include/proto.h. * Changed some C definitions regarding EXPLAIN record syntax (prt-exp.h) and added member 'languages' in TargetInfo (which was missing). Changed the way attribute sets are handled in the retrieval module. These are now cached, just like the abstract syntaxes (schemas). Changed YAZ so that it links with compiled ASN.1. Added Explain-schema definitions and mapping routines. The following Explain categories have been implemented: AttributeDetails, AttributeSetInfo, DatabaseInfo, CategoryList and TargetInfo. Fixed minor bug in Windows version of Server Library. --- 1.4pl2+ 1998/4/17 (Released with Zebra) Added Extended Services to server (backend.h). Thanks to Charles Woodfield. Added EXTERNAL: UNIverse Resource Report (non-standard). Implemened odr_enum and odr_set_of functions to handle ASN.1 types ENUMERATED and SET OF. * Added 'const' to some of the char pointer arguments for the functions, data1_read_node, data1_getelementbytagname, data1_insert_taggeddata, data1_getesetbyname, data1_getelementbyname, data1_get_absyn. Fixed bug in data1_insert_taggeddata - the last_child member of parent wasn't initialised. * Changed data1_read_record and data1_read_node so that the supplied "SGML"-buffer is read-only. In particular the resulting data1 - tree doesn't refer to any parts of the "SGML"-buffer. Fixed bug in server library (Windows version of statserv_remove). * Changed code so that it compiles as C++. The type definition of Odr_fun which is a member of Odr_arm was changed. The result is, that an explicit typecast is needed for the fun pointer when using Odr_arm - as in: {1, -1, -1, Z_IdAuthentication_idPass, (Odr_fun)z_IdPass}, Updated TagSet-G and -M definitions (tagsetm.tag and tagsetg.tag). Implemented the new structured date and time definition as approved by the ZIG. Added schemaId element to the specificTag in Espec-1 (also approved at the last ZIG). Thanks to RVDM. Added some Object identifiers (RVDM). Changed the Update Extended Service (RVDM). Added command "refid" to client which specifies referenceId for the following requests. Implemented extended service handling for server. See ztest.c for an example as well as backend.h. New handlers are registerd in the Init handler. * Changed interface for sort in server. Added new members to statserv_options_block. It allows a server to read options from another source than just the command line. Thanks to Charles Woodfield. * Changed definition of Z_Triple in file prt-grs.h - member boolean renamed to zboolean. Some C++ compilers complained about the name. Minor changes to gils.abs. Added index 's' (sort) on title and date/time-last-modified. --- 1.4pl2 1998/1/30 Fixed bug in server library regarding inetd mode (-i). This bug was introduced by release 1.4. --- 1.4pl1 1998/1/29 Added sort facility in client and backend server interface. Fixed problem with dependencies in Makefile(s). Fixed bugs for encoders/decoders of extended services and SearchInfoReport. Implemented sub-tree feature for schemas. Sub-trees are referenced in *.abs-files. See explain.abs for an example of the use of this feature. Modified bib1.att; local attributes for ANY didn't include ANY itself (only affects use of the retrieval module). Fixed bug in plain SGML reader in function data1_read_node: tags with prefix "var" was incorrectly interpreted as variants. Added feature "sub-schemas" to enable references to - and definitions of - group of elements. * Removed member parent from type data1_element (in data1.h). Implemented function odr_nullval() that returns the value of ODR_NULLVAL. * Removed member num_children from data1_node (in data1.h). Made NT service interface part of the server library. The function statserv_main uses the NT service when required and calls the statserv_start / statserv_close routines. Routine zget_SearchRequest and zget_PresentRequest fills resultSetName/Id member with "default" instead of "Default". Fixed memory leak in server. Request queue member wasn't freed. Fixed nmem_exit so that memory is freed. --- 1.4 1997/10/2 Revised the CCL parser utility to be thread safe. Added function, oid_ent_to_oid, to replace the function oid_getoidbyent, which is not thread safe. * Added nmem_init and nmem_exit to initialize and release NMEM resources. Function nmem_init should be called once in the initial thread before NMEM/ODR is used. statserv.c and client.c have been changed accordingly. The change was necessary to make NMEM thread safe. The NMEM memory pool is shared amongst threads in a process. Unix-based applications will still work fine without calling this. Added NT Services interface for the the Z39.50 (statserv) Server. Refer to the ztest.c source on the usage. Windows 95/NT port using MSVC5.0. Project files are included in the distribution. * Defined new 'global' handle for the retrieval (data1) system. The new handled, data1_handle, describes the state of the data1 system. This handle is passed as first argument to virtually all data1 related routines. The functions data1_create and data1_destroy creates and destroys a data1 handle respectively. Added ODR encode stream member to all backend request structures init, search, scan etc. This stream should be used to allocate all memory used for the response when thread safe operation is needed. Changed the comstack utility, cs_addstr, to be thread safe. The returned hostname string returned by the function is now part the COMSTACK instance. Added comstack utility, cs_straddr, which replaces the tcpip_strtoaddr function. The cs_straddr takes a COMSTACK handle as argument, so this function must be used after cs_create and before bind/connect. This function is thread safe. Moved test server to 'ztest' directory - generic server code still in 'server' directory. Made prefix query (pquery.c) utility thread safe. Added new function modifier YAZ_EXPORT to 'export' public DLL functions when using windows (see include/yconfig.h). Added definitions to the OID database (util/oid.c) (RVDM). Added new BIB-1 diagnostic messages to the handler diagbib1_str. Added call to ccl_rpn_delete in client program. Added ODR argument to ccl_rpn_query and ccl_scan_query to provide release of RPN structure. Added support for C++, headers uses extern "C" for public definitions. With input from RVDM. In handling of SEQUENCE OF: Counter set to zero when SEQUENCE OF is absent. Thanks to Ronald van der Meer (RVDM). Added initializers (zget_ routines) for a number of PDUs. Thanks to RVDM. Added support for private extensions to the OID database (oid_setprivateoids()). Thanks to RVDM. Added optional, physical ANY (key replication) Fixed null-reference problem in GRS-1 output filter. Proximity operator added to Prefix Query Format (PQF). In test client command "base" accepts multiple databases. Fixed bug in cs_close stack that caused trouble with WINSOCK. --- 1.3 1996/10/11 Fixed tagging bug in ResourceReportResponse PDU encoder/decode. Smallish bug-fixes in the new encoders/decoders (explain). Bug fixed in DeleteRequest. Fixed tagging bug of type 101 query in SearchRequest-Query PDU encoder/decoder. Fixed tagging bug in ResourceReportResponse PDU encoder/decode. Added SOIF syntax (using private OID for now) to retrieval module and client. Added Update extended service. Added SearchResult-1 additional info structure. Added optional CCL (ISO8777) interpreter as separate module. Available in linemode client. --- 1.2 1996/6/10 (1st anniversary release) Added Summary record syntax. Lightly tested. Added OPAC record syntax. Untested. Added ResourceReport service encoders/decoders. Untested. Fixed bug in z_Unit - wrong tagging on unitSystem. Fixed bug in the DiagRecs decoder. Added options for max PDU size and session timeout to frontend-server. Added documentation of query-language parsers and other supporting utilities. [frontend-server] Added Attribute set to the bend_scanrequest API. [frontend-server] NextResultSetPosition was sometimes set incorrectly when surrogate diagnostics were generated. [retrieval] Allow multiple local values for attribute. [retrieval] Allow multiple attributes per element in .abs files. index type. [retrieval] Added Summary tagset, abstract syntax, and d1-node/ASN filter. --- 1.1pl2 1996/4/10 Minor changes, mostly specific to Zebra's requirements (retrieval) --- 1.1 1996/2/20 Repaired bug in frontend server when running multiple listening endpoints in dynamic mode. z_External() now won't break if a known, ASN.1 value comes encapsulated in an octet-string. The value will pass through unmodified in an Odr_oct. Added a bit of code to the demo client to decode & display ASN.1-structured records represented in the octet-aligned branch of the EXTERNAL CHOICE. Thanks to CAS for prodding us to finally do this. Added z_ext_getentbyref() to the ASN module. Doc updated. * Completed the SCAN definition in the ASN module. This may break SCAN code based on older YAZ-versions at compile-time. The fix is easy - look in proto.h. * Added 'displayTerm' and OtherInformation to the TermInfo structure under the SCAN definition. Remember to initialize this, server-people. Comstack should now support the WAIS protocol in TCP/IP mode. Note that this does not extend to ODR and ASN. Comstack allows insertion of established socket (primarily for inetd-operation of servers). Doc updated. Front-end server can now start from the inetd in TCP mode. Doc updated. --- 1.0pl4 1996/1/24 Added Sort PDU. Fixed small problem in SUTRS-filter. A newline was sometimes inserted before the rank and record number. Adjustments to the frontend server. Fixed diagnostic BER dumper. It ignored the file argument. --- 1.0pl3 1996/1/2 Various changes to retrieval module. Changed the union discriminators of the protocol files from enums to ints paired with #defines. *Changed oident.class to oident.oclass to avoid a reserved word in C++ compilers. *Changed operator in the RPN structure to 'roperator', again to avoid a conflict with C++. Fixed problems in Explain decoders/encoders. --- 1.0pl2 1995/12/6 Memory bug in log module fixed. --- 1.0pl1 1995/12/5 Occasional malloc() of 0 bytes fixed in d1_espec.c. Bug in Explain DatabaseInfo module fixed. Some '\r' snuck into one or two of the ret'l config tables. A curse on Windows. --- 1.0 1995/11/28 The shift to v1.0 signals that we now consider the *core* functionality of YAZ reasonably stable (the core being more or less equivalent to Z39.50-1992). Some of the really nifty v3 stuff is still not heavily tested (Explain not at all - though that will happen soonish). Minor changes to code to support Windows port. Various minor changes after we're getting to use GRS-1 & co. more. Added Espec-1 format. Added VisibleString field body type to GRS-1. It is illegal acc. to my copy of the protocol and it cannot be selected when encoding (maps into 'string' when decoding). Needed to talk to some servers. Demo client can request simple element set names. Added Diagnostic Format encoders/decoders. Added simple Close handling to frontend server (no hooks for resource reporting yet), and demonstration client. Added cs_addrstr() command to COMSTACK to retrieve peer hostname/address. --- 1.0b3 1995/08/24 Fixed bug in the frontend-server. The numberOfRecordsReturned field was handled incorrectly when records were requested in the searchResponse. This will only affect you if you use the frontend-server. Added GRS-1 encoders/decoders to the service-level API. Lightly tested. Test-client will ask for and print GRS1. Ztest will return dummy records on request. Added Explain encoders/decoders to the service-level API. Untested. Added Extended Services: Item Order encoders and decoders to the Service- level API. Untested. We could use a recent copy of the pertinent bits of the ILL protocol to add those bits. Added diagnostic format 1 encoders/decoders to the service-level API. Untested. Moved pretty-printing of structure-wrappers ({..}) from odr_seq.c to odr_cons.c, which causes a more correct output. Fixed handling of searchRequest in frontend server. NextResultSetPosition was always set to 0 when no records were requested in the searchRequest. * Added better external-handling. This shouldn't harm old code that *encodes* externals. It can break code that looks for a 'single-ASN1-type' representation, since those types that are known are now decoded immediately. Look at the SUTRS sample code in seshigh.c and client.c. Documentation updated. Handling of structured records in bend_fetchresponse. Length -1 marks structured record, type is deduced from format field. --- 1.0b2 1995/06/27 Fairly quick maintenance release to add SUTRS support. Fixed handling of SUTRS records in the demonstration client. * Added format field to the bend_fetchrequest and bend_fetchresponce structures of the backend API (frontend server). When the record is returned, the value of the format field is mapped to an OID. The value VAL_SUTRS will also cause a slightly different ASN.1 packaging of the record. The special value VAL_NONE in the bend_request means that no specific format was requested by the client. Documentation updated accordingly. Test server (ztest) will return a fixed dummy SUTRS record if your client requests SUTRS. Documentation updated accordingly. You can now set external libraries and RANLIB support in the top-level Makefile. --- 1.0b 1995/06/19 First public release. yaz-5.28.0/buildconf.sh0000755000175000017500000000232413265142510011636 00000000000000#!/bin/sh if [ -d .git ]; then git submodule init git submodule update fi . m4/id-config.sh if $enable_help; then cat <?" } ], "ind1":" ", "ind2":" " } } ] } yaz-5.28.0/test/xml2tmarc2.xml0000644000175000017500000000377713572540030013043 00000000000000 01116nam0a32002171 450 9 182 502 3710100acesf1995gbeng0sxcbefMimmsGarnetCry babyWarm and soulfulGarnet Mimms ... [et al.]Bury St. EdmundsBGO19951 cdIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)Indhold:BGOBGOCD26878.7944soulrhythm & bluesvokal1960-1969USA11Cry babyNobody but youUntil you were goneAnytime you want meSo closeFor your precious loveBaby don't you weepA ¤quiet placeCry to meDon't change your heartWanting youThe ¤truth hurtsI'll take good care of youLooking for youIt won't hurt (half as much)It was easier to hurt herThinkin'Prove it to meMore than a miracleAs long as I have youOne girlThere goes my babyIt's just a matter of timeA ¤little bit of soapLook awayI'll make it up to you4001 girl yaz-5.28.0/test/xml2marc4.xml.marc0000644000175000017500000000003213572540030013557 00000000000000000260091a2200025003370 yaz-5.28.0/test/xml2tmarc6.xml0000644000175000017500000000113313572540030013027 00000000000000 00366nam a22001698a 4500 11224466 DLC00000000000000.0910710c19910701nju 00010 eng 11224466 DLCDLC123-xyzJack CollinsHow to program a computerPenguin8710p. cm. yaz-5.28.0/test/test_retrieval.c0000644000175000017500000003505013570007121013510 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #if YAZ_HAVE_XSLT #include #include yaz_retrieval_t conv_configure(const char *xmlstring, WRBUF w) { xmlDocPtr doc = xmlParseMemory(xmlstring, strlen(xmlstring)); if (!doc) { wrbuf_printf(w, "xmlParseMemory"); return 0; } else { xmlNodePtr ptr = xmlDocGetRootElement(doc); yaz_retrieval_t p = yaz_retrieval_create(); if (p) { const char *srcdir = getenv("srcdir"); if (srcdir) yaz_retrieval_set_path(p, srcdir); } if (!ptr) { wrbuf_printf(w, "xmlDocGetRootElement"); yaz_retrieval_destroy(p); p = 0; } else if (!p) { wrbuf_printf(w, "yaz_retrieval_create"); } else { int r = yaz_retrieval_configure(p, ptr); if (r) { wrbuf_puts(w, yaz_retrieval_get_error(p)); yaz_retrieval_destroy(p); p = 0; } } xmlFreeDoc(doc); return p; } } int conv_configure_test(const char *xmlstring, const char *expect_error, yaz_retrieval_t *pt) { WRBUF w = wrbuf_alloc(); int ret; yaz_retrieval_t p = conv_configure(xmlstring, w); if (!p) { if (expect_error && !strcmp(wrbuf_cstr(w), expect_error)) ret = 1; else { ret = 0; printf("%s\n", wrbuf_cstr(w)); } } else { if (expect_error) { ret = 0; yaz_retrieval_destroy(p); } else { if (pt) *pt = p; else yaz_retrieval_destroy(p); ret = 1; } } wrbuf_destroy(w); return ret; } static void tst_configure(void) { YAZ_CHECK(conv_configure_test( "", "Expected element ", 0)); YAZ_CHECK(conv_configure_test( "", 0, 0)); YAZ_CHECK(conv_configure_test( "", "Element :" " expected element , got ", 0)); YAZ_CHECK(conv_configure_test("" "", "Missing 'syntax' attribute", 0)); YAZ_CHECK(conv_configure_test( "" "" "" "", "Element : expected attributes " "'syntax', identifier' or 'name', got " "'unknown'", 0)); YAZ_CHECK(conv_configure_test( "" "" "" "", "Element : unknown attribute " "value syntax='unknown_synt'", 0)); YAZ_CHECK(conv_configure_test( "" "" "", 0, 0)); YAZ_CHECK(conv_configure_test( "" "" "", 0, 0)); YAZ_CHECK(conv_configure_test( "" "" "", 0, 0)); YAZ_CHECK(conv_configure_test( "" "" "" "" "", "Element : expected zero or one element " ", got ", 0)); YAZ_CHECK(conv_configure_test( "" "" " " "" "", "Element : expected attributes 'syntax' or 'name," " got 'schema'", 0)); YAZ_CHECK(conv_configure_test( "" "" " " "" "", 0, 0)); YAZ_CHECK(conv_configure_test( "" "" " " "" "", "Element : " "attribute 'syntax' has invalid value " "'unknown'", 0)); YAZ_CHECK(conv_configure_test( "" "" " " "" "", "Element : expected attributes " "'syntax' or 'name, got 'unknown'", 0)); YAZ_CHECK(conv_configure_test( "" "" "" "" "" "" "" "", "Element : Unsupported character" " set mapping defined by attribute values", 0)); YAZ_CHECK(conv_configure_test( "" "" "" "" "" "" "" "", "Element : Unsupported" " input format defined by attribute value", 0)); YAZ_CHECK(conv_configure_test( "" "" "" "" "" "" "" "" "", "Element : " "only one allowed", 0)); YAZ_CHECK(conv_configure_test( "" "" "" "" "" "" "" "", 0, 0)); yaz_retrieval_t p = 0; YAZ_CHECK(conv_configure_test( "" "" "" "" "" " " " " " " "" "" " " " " " " "" "" " " " " " " " " "" "", 0, &p)); const char *match_schema = 0; Odr_oid *match_syntax = 0; const char *backend_schema = 0; Odr_oid *backend_syntax = 0; int r; r = yaz_retrieval_request(p, "e", yaz_oid_recsyn_usmarc, &match_schema, &match_syntax, 0, &backend_schema, &backend_syntax); YAZ_CHECK(r != 0); r = yaz_retrieval_request(p, "F", yaz_oid_recsyn_usmarc, &match_schema, &match_syntax, 0, &backend_schema, &backend_syntax); YAZ_CHECK(r == 0); YAZ_CHECK(backend_schema && !strcmp(backend_schema, "F")); YAZ_CHECK(!oid_oidcmp(backend_syntax, yaz_oid_recsyn_usmarc)); r = yaz_retrieval_request(p, "f", yaz_oid_recsyn_usmarc, &match_schema, &match_syntax, 0, &backend_schema, &backend_syntax); YAZ_CHECK(r == 0); YAZ_CHECK(backend_schema && !strcmp(backend_schema, "f")); YAZ_CHECK(!oid_oidcmp(backend_syntax, yaz_oid_recsyn_usmarc)); r = yaz_retrieval_request(p, 0, yaz_oid_recsyn_usmarc, &match_schema, &match_syntax, 0, &backend_schema, &backend_syntax); YAZ_CHECK(r == 0); YAZ_CHECK(backend_schema == 0); YAZ_CHECK(!oid_oidcmp(backend_syntax, yaz_oid_recsyn_usmarc)); r = yaz_retrieval_request(p, 0, yaz_oid_recsyn_usmarc, &match_schema, &match_syntax, 0, &backend_schema, &backend_syntax); YAZ_CHECK(r == 0); YAZ_CHECK(backend_schema == 0); YAZ_CHECK(!oid_oidcmp(backend_syntax, yaz_oid_recsyn_usmarc)); r = yaz_retrieval_request(p, 0, yaz_oid_recsyn_xml, &match_schema, &match_syntax, 0, &backend_schema, &backend_syntax); YAZ_CHECK(r == 0); YAZ_CHECK(backend_schema && !strcmp(backend_schema, "F")); YAZ_CHECK(!oid_oidcmp(backend_syntax, yaz_oid_recsyn_usmarc)); r = yaz_retrieval_request(p, "f1:9988", yaz_oid_recsyn_danmarc, &match_schema, &match_syntax, 0, &backend_schema, &backend_syntax); YAZ_CHECK(r == 0); YAZ_CHECK(backend_schema && !strcmp(backend_schema, "F:9988")); YAZ_CHECK(!oid_oidcmp(backend_syntax, yaz_oid_recsyn_usmarc)); r = yaz_retrieval_request(p, "F1:9988", yaz_oid_recsyn_danmarc, &match_schema, &match_syntax, 0, &backend_schema, &backend_syntax); YAZ_CHECK(r == 0); YAZ_CHECK(backend_schema && !strcmp(backend_schema, "F:9988")); YAZ_CHECK(!oid_oidcmp(backend_syntax, yaz_oid_recsyn_usmarc)); r = yaz_retrieval_request(p, 0, yaz_oid_recsyn_danmarc, &match_schema, &match_syntax, 0, &backend_schema, &backend_syntax); YAZ_CHECK(r == 0); YAZ_CHECK(backend_schema && !strcmp(backend_schema, "F")); YAZ_CHECK(!oid_oidcmp(backend_syntax, yaz_oid_recsyn_usmarc)); yaz_retrieval_destroy(p); } #endif int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); yaz_log_xml_errors(0, 0 /* disable it */); #if YAZ_HAVE_XSLT tst_configure(); #endif YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/test_icu.1.input0000644000175000017500000000004413265142510013345 00000000000000Børn Le Carré Le Carre Le CarreÌ yaz-5.28.0/test/test_iconv.c0000644000175000017500000005427613265142510012647 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #define ESC "\x1b" static int compare_buffers(char *msg, int no, int expect_len, const char *expect_buf, int got_len, const char *got_buf) { if (expect_len == got_len && !memcmp(expect_buf, got_buf, expect_len)) return 1; if (0) /* use 1 see how the buffers differ (for debug purposes) */ { int i; printf("tsticonv test=%s i=%d failed\n", msg, no); printf("off got exp\n"); for (i = 0; i 0 ? in_len : strlen(in_buf); char outbuf0[64]; char *outbuf = outbuf0; while (inbytesleft) { size_t outbytesleft = outbuf0 + sizeof(outbuf0) - outbuf; if (outbytesleft > 12) outbytesleft = 12; r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (r == (size_t) (-1)) { int e = yaz_iconv_error(cd); if (e != YAZ_ICONV_E2BIG) return 0; } else { yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft); break; } } return compare_buffers("tsticonv 22", 0, expect_len, expect_buf, outbuf - outbuf0, outbuf0); } static int tst_convert_x(yaz_iconv_t cd, const char *buf, const char *cmpbuf, int expect_error) { int ret = 1; WRBUF b = wrbuf_alloc(); char outbuf[16]; size_t inbytesleft = strlen(buf); const char *inp = buf; int rounds = 0; for (rounds = 0; inbytesleft && rounds < (int) sizeof(outbuf); rounds++) { size_t outbytesleft = sizeof(outbuf); char *outp = outbuf; size_t r = yaz_iconv(cd, (char**) &inp, &inbytesleft, &outp, &outbytesleft); wrbuf_write(b, outbuf, outp - outbuf); if (r == (size_t) (-1)) { int e = yaz_iconv_error(cd); if (e != YAZ_ICONV_E2BIG) { if (expect_error != -1) if (e != expect_error) ret = 0; break; } } else { size_t outbytesleft = sizeof(outbuf); char *outp = outbuf; r = yaz_iconv(cd, 0, 0, &outp, &outbytesleft); wrbuf_write(b, outbuf, outp - outbuf); if (expect_error != -1) if (expect_error) ret = 0; break; } } if (wrbuf_len(b) == strlen(cmpbuf) && !memcmp(cmpbuf, wrbuf_buf(b), wrbuf_len(b))) ; else { WRBUF w = wrbuf_alloc(); ret = 0; wrbuf_rewind(w); wrbuf_puts_escaped(w, buf); yaz_log(YLOG_LOG, "input %s", wrbuf_cstr(w)); wrbuf_rewind(w); wrbuf_write_escaped(w, wrbuf_buf(b), wrbuf_len(b)); yaz_log(YLOG_LOG, "got %s", wrbuf_cstr(w)); wrbuf_rewind(w); wrbuf_puts_escaped(w, cmpbuf); yaz_log(YLOG_LOG, "exp %s", wrbuf_cstr(w)); wrbuf_destroy(w); } wrbuf_destroy(b); return ret; } static int tst_convert(yaz_iconv_t cd, const char *buf, const char *cmpbuf) { return tst_convert_x(cd, buf, cmpbuf, 0); } static void tst_marc8_to_ucs4b(void) { yaz_iconv_t cd = yaz_iconv_open("UCS4", "MARC8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert_l( cd, 0, "\033$1" "\x21\x2B\x3B" /* FF1F */ "\033(B" "o", 8, "\x00\x00\xFF\x1F" "\x00\x00\x00o")); YAZ_CHECK(tst_convert_l( cd, 0, "\033$1" "\x6F\x77\x29" /* AE0E */ "\x6F\x52\x7C" /* c0F4 */ "\033(B", 8, "\x00\x00\xAE\x0E" "\x00\x00\xC0\xF4")); YAZ_CHECK(tst_convert_l( cd, 0, "\033$1" "\x21\x50\x6E" /* UCS 7CFB */ "\x21\x51\x31" /* UCS 7D71 */ "\x21\x3A\x67" /* UCS 5B89 */ "\x21\x33\x22" /* UCS 5168 */ "\x21\x33\x53" /* UCS 5206 */ "\x21\x44\x2B" /* UCS 6790 */ "\033(B", 24, "\x00\x00\x7C\xFB" "\x00\x00\x7D\x71" "\x00\x00\x5B\x89" "\x00\x00\x51\x68" "\x00\x00\x52\x06" "\x00\x00\x67\x90")); YAZ_CHECK(tst_convert_l( cd, 0, "\xB0\xB2", /* AYN and oSLASH */ 8, "\x00\x00\x02\xBB" "\x00\x00\x00\xF8")); YAZ_CHECK(tst_convert_l( cd, 0, "\xF6\x61", /* a underscore */ 8, "\x00\x00\x00\x61" "\x00\x00\x03\x32")); YAZ_CHECK(tst_convert_l( cd, 0, "\x61\xC2", /* a, phonorecord mark */ 8, "\x00\x00\x00\x61" "\x00\x00\x21\x17")); /* bug #258 */ YAZ_CHECK(tst_convert_l( cd, 0, "el" "\xe8" "am\xe8" "an", /* elaman where a is a" */ 32, "\x00\x00\x00" "e" "\x00\x00\x00" "l" "\x00\x00\x00" "a" "\x00\x00\x03\x08" "\x00\x00\x00" "m" "\x00\x00\x00" "a" "\x00\x00\x03\x08" "\x00\x00\x00" "n")); /* bug #260 */ YAZ_CHECK(tst_convert_l( cd, 0, "\xe5\xe8\x41", 12, "\x00\x00\x00\x41" "\x00\x00\x03\x04" "\x00\x00\x03\x08")); /* bug #416 */ YAZ_CHECK(tst_convert_l( cd, 0, "\xEB\x74\xEC\x73", 12, "\x00\x00\x00\x74" "\x00\x00\x03\x61" "\x00\x00\x00\x73")); /* bug #416 */ YAZ_CHECK(tst_convert_l( cd, 0, "\xFA\x74\xFB\x73", 12, "\x00\x00\x00\x74" "\x00\x00\x03\x60" "\x00\x00\x00\x73")); yaz_iconv_close(cd); } static void tst_ucs4b_to_utf8(void) { yaz_iconv_t cd = yaz_iconv_open("UTF8", "UCS4"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert_l( cd, 8, "\x00\x00\xFF\x1F\x00\x00\x00o", 4, "\xEF\xBC\x9F\x6F")); YAZ_CHECK(tst_convert_l( cd, 8, "\x00\x00\xAE\x0E\x00\x00\xC0\xF4", 6, "\xEA\xB8\x8E\xEC\x83\xB4")); yaz_iconv_close(cd); } static void dconvert(int mandatory, const char *tmpcode) { /* some test strings in ISO-8859-1 format */ static const char *iso_8859_1_a[] = { "ax" , "\xd8", "eneb\346r", "\xe5" "\xd8", "\xe5" "\xd8" "b", "\xe5" "\xe5", 0 }; int i; int ret; yaz_iconv_t cd; for (i = 0; iso_8859_1_a[i]; i++) { size_t r; char *inbuf = (char*) iso_8859_1_a[i]; size_t inbytesleft = strlen(inbuf); char outbuf0[24]; char outbuf1[10]; char *outbuf = outbuf0; size_t outbytesleft = sizeof(outbuf0); cd = yaz_iconv_open(tmpcode, "ISO-8859-1"); YAZ_CHECK(cd || !mandatory); if (!cd) return; r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); r = yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); yaz_iconv_close(cd); if (r == (size_t) (-1)) return; cd = yaz_iconv_open("ISO-8859-1", tmpcode); YAZ_CHECK(cd || !mandatory); if (!cd) return; inbuf = outbuf0; inbytesleft = sizeof(outbuf0) - outbytesleft; outbuf = outbuf1; outbytesleft = sizeof(outbuf1); r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); r = yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft); if (r == (size_t)(-1)) { fprintf(stderr, "failed\n"); } YAZ_CHECK(r != (size_t) (-1)); if (r != (size_t)(-1)) { ret = compare_buffers("dconvert", i, strlen(iso_8859_1_a[i]), iso_8859_1_a[i], sizeof(outbuf1) - outbytesleft, outbuf1); YAZ_CHECK(ret); } yaz_iconv_close(cd); } } int utf8_check(unsigned c) { if (sizeof(c) >= 4) { size_t r; char src[4]; char dst[4]; char utf8buf[6]; char *inbuf = src; size_t inbytesleft = 4; char *outbuf = utf8buf; size_t outbytesleft = sizeof(utf8buf); int i; yaz_iconv_t cd = yaz_iconv_open("UTF-8", "UCS4LE"); if (!cd) return 0; for (i = 0; i<4; i++) src[i] = c >> (i*8); r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); yaz_iconv_close(cd); if (r == (size_t)(-1)) return 0; cd = yaz_iconv_open("UCS4LE", "UTF-8"); if (!cd) return 0; inbytesleft = sizeof(utf8buf) - outbytesleft; inbuf = utf8buf; outbuf = dst; outbytesleft = 4; r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (r == (size_t)(-1)) return 0; yaz_iconv_close(cd); if (memcmp(src, dst, 4)) return 0; } return 1; } static void tst_marc8_to_utf8(void) { yaz_iconv_t cd = yaz_iconv_open("UTF-8", "MARC8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); /* COMBINING ACUTE ACCENT */ YAZ_CHECK(tst_convert(cd, "Cours de math\xe2" "e", "Cours de mathe\xcc\x81")); YAZ_CHECK(tst_convert(cd, "\xea" "a", "a\xcc\x8a")); YAZ_CHECK(tst_convert(cd, "a" "\xea" "\x1e", "a" "\x1e\xcc\x8a")); YAZ_CHECK(tst_convert(cd, "a" "\xea" "p", "a" "p\xcc\x8a")); YAZ_CHECK(tst_convert_x(cd, "a\xea", "a", YAZ_ICONV_EINVAL)); YAZ_CHECK(tst_convert(cd, "p", "\xcc\x8a")); /* note: missing p */ yaz_iconv(cd, 0, 0, 0, 0); /* incomplete. so we have to reset */ /* bug #2115 */ YAZ_CHECK(tst_convert(cd, ESC "(N" ESC ")Qp" ESC "(B", "\xd0\x9f")); YAZ_CHECK(tst_convert_x(cd, ESC , "", YAZ_ICONV_EINVAL)); YAZ_CHECK(tst_convert_x(cd, ESC "(", "", YAZ_ICONV_EINVAL)); YAZ_CHECK(tst_convert_x(cd, ESC "(B", "", 0)); YAZ_CHECK(tst_convert(cd, ESC "(B" "\x31", "1")); /* ASCII in G0 */ YAZ_CHECK(tst_convert(cd, ESC ")B" "\xB1", "1")); /* ASCII in G1 */ yaz_iconv_close(cd); } static void tst_marc8s_to_utf8(void) { yaz_iconv_t cd = yaz_iconv_open("UTF-8", "MARC8s"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); /* E9: LATIN SMALL LETTER E WITH ACUTE */ YAZ_CHECK(tst_convert(cd, "Cours de math\xe2" "e", "Cours de math\xc3\xa9")); yaz_iconv_close(cd); } static void tst_marc8_to_latin1(void) { yaz_iconv_t cd = yaz_iconv_open("ISO-8859-1", "MARC8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "ax", "ax")); /* latin capital letter o with stroke */ YAZ_CHECK(tst_convert(cd, "\xa2", "\xd8")); /* with latin small letter ae */ YAZ_CHECK(tst_convert(cd, "eneb\xb5r", "eneb\346r")); YAZ_CHECK(tst_convert(cd, "\xea" "a\xa2", "\xe5" "\xd8")); YAZ_CHECK(tst_convert(cd, "\xea" "a\xa2" "b", "\xe5" "\xd8" "b")); YAZ_CHECK(tst_convert(cd, "\xea" "a" "\xea" "a", "\xe5" "\xe5")); YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); YAZ_CHECK(tst_convert(cd, "Cours de math\xe2" "e", "Cours de math\xe9")); YAZ_CHECK(tst_convert(cd, "12345678\xe2" "e", "12345678\xe9")); YAZ_CHECK(tst_convert(cd, "123456789\xe2" "e", "123456789\xe9")); YAZ_CHECK(tst_convert(cd, "1234567890\xe2" "e", "1234567890\xe9")); YAZ_CHECK(tst_convert(cd, "12345678901\xe2" "e", "12345678901\xe9")); YAZ_CHECK(tst_convert(cd, "Cours de math\xe2" "em", "Cours de math\xe9m")); YAZ_CHECK(tst_convert(cd, "Cours de math\xe2" "ematiques", "Cours de math\xe9matiques")); yaz_iconv_close(cd); } static void tst_utf8_to_marc8(const char *marc8_type) { yaz_iconv_t cd = yaz_iconv_open(marc8_type, "UTF-8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours ", "Cours ")); /** Pure ASCII. 11 characters (sizeof(outbuf)-1) */ YAZ_CHECK(tst_convert(cd, "Cours de mat", "Cours de mat")); /** Pure ASCII. 12 characters (sizeof(outbuf)) */ YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); /** Pure ASCII. 13 characters (sizeof(outbuf)+1) */ YAZ_CHECK(tst_convert(cd, "Cours de math.", "Cours de math.")); /** UPPERCASE SCANDINAVIAN O */ YAZ_CHECK(tst_convert(cd, "S\xc3\x98", "S\xa2")); /** ARING (NFD) */ YAZ_CHECK(tst_convert(cd, "A" "\xCC\x8A", "\xEA" "A")); /** ARING (NFC) */ YAZ_CHECK(tst_convert(cd, "\xC3\x85", "\xEA" "A")); /** A MACRON + UMLAUT, DIAERESIS */ YAZ_CHECK(tst_convert(cd, "A" "\xCC\x84" "\xCC\x88", "\xE5\xE8\x41")); /* Ligature spanning two characters */ YAZ_CHECK(tst_convert(cd, "\x74" "\xCD\xA1" "\x73", /* UTF-8 */ "\xEB\x74\xEC\x73")); /* MARC-8 */ /* Double title spanning two characters */ YAZ_CHECK(tst_convert(cd, "\x74" "\xCD\xA0" "\x73", /* UTF-8 */ "\xFA\x74\xFB\x73")); /* MARC-8 */ /** Ideographic question mark (Unicode FF1F) */ YAZ_CHECK(tst_convert(cd, "\xEF\xBC\x9F" "o", /* UTF-8 */ "\033$1" "\x21\x2B\x3B" "\033(B" "o" )); /** Ideographic space per ANSI Z39.64 */ YAZ_CHECK(tst_convert(cd, "\xe3\x80\x80" "o", /* UTF-8 */ "\033$1" "\x21\x23\x21" "\033(B" "o" )); /** Superscript 0 . bug #642 */ YAZ_CHECK(tst_convert(cd, "(\xe2\x81\xb0)", /* UTF-8 */ "(\033p0\x1bs)")); /** bug #1778 */ YAZ_CHECK(tst_convert(cd, /* offset 0x530 in UTF-8 rec marccol4.u8.marc */ "\xE3\x83\xB3" "\xE3\x82\xBF" "\xCC\x84" "\xCC\x84" "\xE3\x83\xBC" /* UTF-8 */, "\x1B\x24\x31" "\x69\x25\x73" "\x1B\x28\x42" "\xE5\xE5" "\x1B\x24\x31" "\x69\x25\x3F" "\x69\x21\x3C" "\x1B\x28\x42")); /** bug #2120 */ YAZ_CHECK(tst_convert(cd, "\xCE\x94\xCE\xB5\xCF\x84" "\xCE\xBF\xCF\x81\xCE\xB1" "\xCE\xBA\xCE\xB7\xCF\x82\x2C", "\x1B\x28\x53\x45\x66\x78\x72\x75" "\x61\x6D\x6A\x77" "\x1B\x28\x42\x2C" )); { char *inbuf0 = "\xe2\x81\xb0"; char *inbuf = inbuf0; size_t inbytesleft = strlen(inbuf); char outbuf0[64]; char *outbuf = outbuf0; size_t outbytesleft = sizeof(outbuf0)-1; size_t r; #if 0 int i; #endif r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); #if 0 *outbuf = '\0'; /* so we know when to stop printing */ for (i = 0; outbuf0[i]; i++) { int ch = outbuf0[i] & 0xff; yaz_log(YLOG_LOG, "ch%d %02X %c", i, ch, ch >= ' ' ? ch : '?'); } #endif r = yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); *outbuf = '\0'; /* for strcmp test below and printing */ #if 0 for (i = 0; outbuf0[i]; i++) { int ch = outbuf0[i] & 0xff; yaz_log(YLOG_LOG, "ch%d %02X %c", i, ch, ch >= ' ' ? ch : '?'); } #endif YAZ_CHECK(strcmp("\033p0\x1bs", outbuf0) == 0); } yaz_iconv(cd, 0, 0, 0, 0); yaz_iconv_close(cd); } static void tst_advance_to_utf8(void) { yaz_iconv_t cd = yaz_iconv_open("utf-8", "advancegreek"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours ", "Cours ")); yaz_iconv_close(cd); } static void tst_utf8_to_advance(void) { yaz_iconv_t cd = yaz_iconv_open("advancegreek", "utf-8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours ", "Cours ")); yaz_iconv_close(cd); } static void tst_latin1_to_marc8(void) { yaz_iconv_t cd = yaz_iconv_open("MARC8", "ISO-8859-1"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours ", "Cours ")); /** Pure ASCII. 11 characters (sizeof(outbuf)-1) */ YAZ_CHECK(tst_convert(cd, "Cours de mat", "Cours de mat")); /** Pure ASCII. 12 characters (sizeof(outbuf)) */ YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); /** Pure ASCII. 13 characters (sizeof(outbuf)) */ YAZ_CHECK(tst_convert(cd, "Cours de math.", "Cours de math.")); /** D8: UPPERCASE SCANDINAVIAN O */ YAZ_CHECK(tst_convert(cd, "S\xd8", "S\xa2")); /** E9: LATIN SMALL LETTER E WITH ACUTE */ YAZ_CHECK(tst_convert(cd, "Cours de math\xe9", "Cours de math\xe2" "e")); YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math" )); YAZ_CHECK(tst_convert(cd, "Cours de math\xe9", "Cours de math\xe2" "e" )); YAZ_CHECK(tst_convert(cd, "12345678\xe9","12345678\xe2" "e")); YAZ_CHECK(tst_convert(cd, "123456789\xe9", "123456789\xe2" "e")); YAZ_CHECK(tst_convert(cd, "1234567890\xe9","1234567890\xe2" "e")); YAZ_CHECK(tst_convert(cd, "12345678901\xe9", "12345678901\xe2" "e")); YAZ_CHECK(tst_convert(cd, "Cours de math\xe9m", "Cours de math\xe2" "em")); YAZ_CHECK(tst_convert(cd, "Cours de math\xe9matiques", "Cours de math\xe2" "ematiques")); yaz_iconv_close(cd); } static void tst_utf8_codes(void) { YAZ_CHECK(utf8_check(3)); YAZ_CHECK(utf8_check(127)); YAZ_CHECK(utf8_check(128)); YAZ_CHECK(utf8_check(255)); YAZ_CHECK(utf8_check(256)); YAZ_CHECK(utf8_check(900)); YAZ_CHECK(utf8_check(1000)); YAZ_CHECK(utf8_check(10000)); YAZ_CHECK(utf8_check(100000)); YAZ_CHECK(utf8_check(1000000)); YAZ_CHECK(utf8_check(10000000)); YAZ_CHECK(utf8_check(100000000)); } static void tst_danmarc_to_utf8(void) { yaz_iconv_t cd = yaz_iconv_open("utf-8", "danmarc"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "ax", "ax")); YAZ_CHECK(tst_convert(cd, "a@@b", "a@b")); YAZ_CHECK(tst_convert(cd, "a@@@@b", "a@@b")); YAZ_CHECK(tst_convert(cd, "@*", "*")); YAZ_CHECK(tst_convert(cd, "@@", "@")); YAZ_CHECK(tst_convert(cd, "@\xa4", "\xC2\xA4")); YAZ_CHECK(tst_convert(cd, "\xa4", "\xC2\xA4")); YAZ_CHECK(tst_convert(cd, "@\xe5", "\xEA\x9C\xB3")); YAZ_CHECK(tst_convert(cd, "@\xc5.", "\xEA\x9C\xB2" ".")); YAZ_CHECK(tst_convert(cd, "@a733", "\xEA\x9C\xB3")); YAZ_CHECK(tst_convert(cd, "@a732.", "\xEA\x9C\xB2" ".")); YAZ_CHECK(tst_convert(cd, "a@03BBb", "a\xce\xbb" "b")); /* lambda */ yaz_iconv_close(cd); } static void tst_utf8_to_danmarc(void) { yaz_iconv_t cd = yaz_iconv_open("danmarc", "utf-8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "ax", "ax")); YAZ_CHECK(tst_convert(cd, "a@b", "a@@b")); YAZ_CHECK(tst_convert(cd, "a@@b", "a@@@@b")); YAZ_CHECK(tst_convert(cd, "*", "@*")); YAZ_CHECK(tst_convert(cd, "@", "@@")); YAZ_CHECK(tst_convert(cd, "\xC2\xA4", "\xa4")); YAZ_CHECK(tst_convert(cd, "a\xc3\xa5" "b", "a\xe5" "b")); /* aring */ YAZ_CHECK(tst_convert(cd, "a\xce\xbb" "b", "a@03BBb")); /* lambda */ YAZ_CHECK(tst_convert(cd, "\xEA\x9C\xB2" ".", "@\xc5.")); YAZ_CHECK(tst_convert(cd, "\xEA\x9C\xB3", "@\xe5")); yaz_iconv_close(cd); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst_utf8_codes(); tst_marc8_to_utf8(); tst_marc8s_to_utf8(); tst_marc8_to_latin1(); tst_advance_to_utf8(); tst_utf8_to_advance(); tst_utf8_to_marc8("marc8"); tst_utf8_to_marc8("marc8lossy"); tst_utf8_to_marc8("marc8lossless"); tst_danmarc_to_utf8(); tst_utf8_to_danmarc(); tst_latin1_to_marc8(); tst_marc8_to_ucs4b(); tst_ucs4b_to_utf8(); dconvert(1, "UTF-8"); dconvert(1, "ISO-8859-1"); dconvert(1, "UCS4"); dconvert(1, "UCS4LE"); dconvert(0, "CP865"); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/marc9.xml.marc0000644000175000017500000000430413572540030012767 0000000000000002244cas a22005055a 4500001001300000003000400013005001700017008004100034010001700075012003100092035002100123906004500144040001800189041001300207042000700220043001200227050001500239066000700254245008700261246002600348246004900374260011100423300002500534310002700559362004400586490010100630500004700731500005800778546003600836650004700872650002600919650002700945650004100972710008801013710004201101850000801143880009001151880005601241880011501297880005201412880010501464880009101569880005001660936002801710 2005336282DLC20070911033614.0070910c20059999mr uu p f0 0ara  a 2005336282 a-3-7-0709110002-p-----  a(OCoLC)170490164 a7bundcserialsduencipf19gn-oclcserc aDLCcDLCdDLC0 aaraafre alc af-mr---00aIN PROCESS c(3006880-01aQadÌ£āʼ al-usrah :bmajallah mutakhasÌ£sÌ£isÌ£ah /cWizaÌ„rat al-Ê»Adl.13aJustice de la famille136880-02aMajallat QadÌ£āʼ al-usrahf<2006> 6880-03aal-RabaÌ„tÌ£ :bJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah,c2005- av. :bill. ;c24 cm. aIrregular (semiannual)0 6880-04aal-Ê»Adad 1. (YuÌ„lyuÌ„z 2005)-0 6880-05aManshuÌ„raÌ„t JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah aSome issues have also a distinctive title. aLatest issue consulted: al-Ê»Adad 3. (Dujanbir 2006). aChiefly in Arabic; some French. 0aDomestic relations (Islamic law)zMorocco. 0aDivorce (Islamic law) 0aMarriage lawzMorocco. 0aLaw reports, digests, etc.zMorocco.2 6880-06aJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah.1 6880-07aMorocco.bWizaÌ„rat al-Ê»Adl. aDLC006245-01/(3/raقضاء الأسرة :bمجلة متخصصة /cوزارة العدل.136246-02/(3/raمجلة قضاء الأسرةf<2006> 6260-03/(3/raالرباط :bجمعية نشر المعلومة القانونية والقضائية،c2005-0 6362-04/(3/raالعدد 1. (يوليوز 2005)-0 6490-05/(3/raمنشورات جمعية نشر المعلومة القانونية والقضائية2 6710-06/(3/raجمعية نشر المعلومة القانونية والقضائية.1 6710-07/(3/raMorocco.bوزارة العدل. aLC Cairo Office [we 45]yaz-5.28.0/test/xml2marc3.xml0000644000175000017500000000734213572540030012650 00000000000000 00914naa a2200337 450 a00001508ain1991xxnora9axxnoreng06Byfornyelse ved Ibsen-RingenfarvefotoplansnitByggekunst19911/241-45byfornyelsesaneringNorgeOsloTelje Torp Aasen ArkitektkontorKristian Augustsgate 7BEng, Dagfinanlund, TomKristian AugustsgatePilestredet 19aITMARK50000014519911/241-4520020111ARK01200220020111ARK01211620021002ARK011000ICLLOAD0020021122ARK01194820030618ARK011330a00001508 yaz-5.28.0/test/marc8.xml.marc0000644000175000017500000000512313572540030012766 0000000000000002643nam^a2200469^^^4500001001400000005001700014006001900031007001500050008004100065035001500106037009000121040004500211100002300256245028100279246006300560246006300623260014400686300001100830500001300841500005700854500009300911500002501004500005701029510002401086530004201110533008901152655002901241650004301270700003601313700002801349793003101377852001501408852001401423856015401437856015401591852003001745852002801775856015401803856014901957830004702106901002002153UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d a99851339eo aCL0036000039bProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 aCu-RivEScCu-RivESdCStRLINedcrbdWaOLN1 aClinton, Atkinson.00aClinton, Purser & Arnold, to their countreymen wheresoeuerh[electronic resource] :bWherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie2 aClinton, Purser & Arnold, to their countreymen wheresoever2 aClinton, Purser & Arnold, to their countreymen wheresoever aLondon :bImprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,c[1583?] a[12] p aIn verse aThe first poem is signed: Thomas Walton alias Purser aClinton's full name and bookseller's name from, and publication date conjectured by, STC aSignatures: Aâ´ B² aReproduction of the original in the Bodleian Library4 aSTC (2nd ed.)c5431 aAlso issued in print and on microform aElectronic reproduction.nMode of access: World Wide Web.nRestricted to UC campuses 7aElectronic texts.2local 0aPirateszEnglandvEarly works to 1800.1 aWalton, Thomas,dfl. 1583.4aut1 aArnold,dfl. 1583.4aut0 aEarly English books online aMERbkmain aSCBbnnet40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 aDVXLbELECT-GENhInternet aLAGEbin3Online access40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610xCDL 0aEarly English books, 1475-1640 ;v1406:13. aDVXLb002592301yaz-5.28.0/test/test_mutex.c0000644000175000017500000000454413265142510012664 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if HAVE_SYS_TIME_H #include #endif #ifdef WIN32 #include #endif #include #include #include static void tst_mutex(void) { YAZ_MUTEX p = 0; yaz_mutex_create(&p); YAZ_CHECK(p); yaz_mutex_enter(p); yaz_mutex_leave(p); yaz_mutex_destroy(&p); YAZ_CHECK(p == 0); yaz_mutex_create(&p); YAZ_CHECK(p); yaz_mutex_set_name(p, YLOG_LOG, "mymutex"); yaz_mutex_enter(p); yaz_mutex_leave(p); yaz_mutex_destroy(&p); YAZ_CHECK(p == 0); yaz_mutex_destroy(&p); /* OK to "destroy" NULL handle */ } static void tst_cond(void) { YAZ_MUTEX p = 0; YAZ_COND c; struct timeval abstime; int r; yaz_mutex_create(&p); YAZ_CHECK(p); if (!p) return; yaz_cond_create(&c); if (c) { r = yaz_gettimeofday(&abstime); YAZ_CHECK_EQ(r, 0); abstime.tv_sec += 1; /* wait 1 second */ r = yaz_cond_wait(c, p, &abstime); YAZ_CHECK(r != 0); } yaz_cond_destroy(&c); YAZ_CHECK(c == 0); yaz_mutex_destroy(&p); YAZ_CHECK(p == 0); } static void *my_handler(void *arg) { int *mydata = (int*) arg; (*mydata)++; return mydata; } static void tst_create_thread(void) { void *return_data; int mydata0 = 42; int mydata1= 42; yaz_thread_t t[2]; t[0] = yaz_thread_create(my_handler, &mydata0); YAZ_CHECK(t[0]); t[1] = yaz_thread_create(my_handler, &mydata1); YAZ_CHECK(t[1]); return_data = 0; yaz_thread_join(&t[0], &return_data); YAZ_CHECK(!t[0]); YAZ_CHECK(return_data == &mydata0); return_data = 0; yaz_thread_join(&t[1], &return_data); YAZ_CHECK(!t[1]); YAZ_CHECK(return_data == &mydata1); YAZ_CHECK_EQ(mydata0, 43); YAZ_CHECK_EQ(mydata1, 43); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst_mutex(); tst_cond(); tst_create_thread(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/marccol3.u8.2.lst0000644000175000017500000000227313250277530013243 0000000000000001373cam a2200349ua 4500 001 82129893 003 DLC 005 20070808062021.0 008 841102s1980 cc a 000 0 chi 035 $a (DLC)5011703 010 $a 82129893 035 $a (CStRLIN)DCLP84-B3561 040 $a DLC-R $c DLC-R $d CStRLIN $d DLC 050 00 $a TL546.7 $b .S48 1980 066 $c $1 082 00 $a 629.4 $2 19 100 1 $6 880-01 $a Shen, Guoliang. 245 10 $6 880-02 $a Yu zhou hang xing he shu li hua / $c Shen Guoliang wen ; Chen Genxiang tu. 250 $6 880-03 $a Di 1 ban. 260 $6 880-04 $a [Canton] : $b Guangdong ren min chu ban she : $b Guangdong sheng xin hua shu dian fa xing, $c 1980. 300 $a 199 p. : $b ill. ; $c 19 cm. 440 0 $6 880-05 $a Ke xue zhi shi pu ji cong shu 650 0 $a Astronautics $x Popular works. 700 1 $6 880-06 $a Chen, Genxiang. 880 1 $6 100-01/1 $a 沈 国良. 880 10 $6 245-02/1 $a 宇宙 航行 和 数ç†åŒ– / $c 沈 国良 文 ; 陈 根祥 图. 880 $6 250-03/1 $a 第1版. 880 $6 260-04/1 $a [Canton] : $b 广东 人民 出版社 : $b 广东çœã€€æ–°è¯ã€€æ›¸åº— å‘行, $c 1980. 880 0 $6 440-05/1 $a 科学 知识 普åŠã€€ä¸›ä¹¦ 880 1 $6 700-06/1 $a 陈 根祥. 906 $a 0 $b cbc $c orignew $d u $e ncip $f 19 $g y-rlinjack 985 $a spacingreload yaz-5.28.0/test/marccol2.u8.2.lst0000644000175000017500000000561113250277530013241 0000000000000003091cam a2200337 i 4500 001 12683849 005 20051218154744.0 008 981008b2001 ilu 000 0 eng 035 $a 57779 035 $a 90490 035 $a 93202 040 $a DLC $c DLC 906 $a 0 $b und $c orignew $d u $e ncip $f 19 $g y-gencatlg 010 $a 77123332 245 00 $a Voyager Diacritic test -- New input 001 (SBIE) 260 $a ny $b ny, $c 2001. 300 $a p. $c cm. 500 $a New copy imported from file (8/12/99) 500 $a VOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡) 500 $a VOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·) 500 $a VOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʼ); alpha (DO NOT USE); Ayn (Ê»); Polish l (Å‚) 500 $a VOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð) 500 $a VOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta (DO NOT USE); Gamma (DO NOT USE); Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³) 500 $a VOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½); 500 $a VOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇) 500 $a VOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ) 500 $a VOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (oÍ¡) 500 $a VOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥) 500 $a VOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (oÍ ); Double Tilde 2nd half (o) ; High Comma centered (oÌ“) 500 $a VOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~) 500 $a Standard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>? yaz-5.28.0/test/tmarc4.xml0000644000175000017500000000107613572540030012230 00000000000000 009140091a22a 22003370 yaz-5.28.0/test/tmarc6.xml0000644000175000017500000000131513572540030012226 00000000000000 00366nam a22001698a 4500 11224466 DLC 00000000000000.0 910710c19910701nju 00010 eng 11224466 DLC DLC 123-xyz Jack Collins How to program a computer Penguin 8710 p. cm. yaz-5.28.0/test/test_icu.4.xml0000644000175000017500000000013513265142510013012 00000000000000 [,. -]* } [$] > ; yaz-5.28.0/test/marc3.xml0000644000175000017500000001031213572540030012034 00000000000000 00914naa a2200337 450 a00001508 a i n 1991 xx nor a 9 a xx nor eng 06 Byfornyelse ved Ibsen-Ringen farvefoto plan snit Byggekunst 1991 1/2 41-45 byfornyelse sanering Norge Oslo Telje Torp Aasen Arkitektkontor Kristian Augustsgate 7B Eng, Dagfin anlund, Tom Kristian Augustsgate Pilestredet 19 a ITM ARK50 0000145 1991 1/2 41-45 20020111 ARK01 2002 20020111 ARK01 2116 20021002 ARK01 1000 ICLLOAD 00 20021122 ARK01 1948 20030618 ARK01 1330 a00001508 yaz-5.28.0/test/xml2tmarc5.xml0000644000175000017500000000215013572540030013026 00000000000000 00492nam a22001455a 450000027748520051026111436.0050413s1894 gr 000 0 gre dΜαρούδης, Κωνσταντίνος ΙωΕλληνικόν κρυπτογραφικόν λεξικόν /Κωνστ. Ι. Μαρούδης. εκδ.Αθήνα,1894.248 σελ.Greek language, ModernDialectsDictionariesCryptography. yaz-5.28.0/test/marc4.json.marc0000644000175000017500000000003213572540030013125 0000000000000000026009142200025003370 yaz-5.28.0/test/xml2tmarc8.xml.marc0000644000175000017500000000512313572540030013755 0000000000000002643nam^a2200469^^^4500001001400000005001700014006001900031007001500050008004100065035001500106037009000121040004500211100002300256245028100279246006300560246006300623260014400686300001100830500001300841500005700854500009300911500002501004500005701029510002401086530004201110533008901152655002901241650004301270700003601313700002801349793003101377852001501408852001401423856015401437856015401591852003001745852002801775856015401803856014901957830004702106901002002153UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d a99851339eo aCL0036000039bProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 aCu-RivEScCu-RivESdCStRLINedcrbdWaOLN1 aClinton, Atkinson.00aClinton, Purser & Arnold, to their countreymen wheresoeuerh[electronic resource] :bWherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie2 aClinton, Purser & Arnold, to their countreymen wheresoever2 aClinton, Purser & Arnold, to their countreymen wheresoever aLondon :bImprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,c[1583?] a[12] p aIn verse aThe first poem is signed: Thomas Walton alias Purser aClinton's full name and bookseller's name from, and publication date conjectured by, STC aSignatures: Aâ´ B² aReproduction of the original in the Bodleian Library4 aSTC (2nd ed.)c5431 aAlso issued in print and on microform aElectronic reproduction.nMode of access: World Wide Web.nRestricted to UC campuses 7aElectronic texts.2local 0aPirateszEnglandvEarly works to 1800.1 aWalton, Thomas,dfl. 1583.4aut1 aArnold,dfl. 1583.4aut0 aEarly English books online aMERbkmain aSCBbnnet40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 aDVXLbELECT-GENhInternet aLAGEbin3Online access40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610xCDL 0aEarly English books, 1475-1640 ;v1406:13. aDVXLb002592301yaz-5.28.0/test/marc6.chr0000644000175000017500000000000713572540030012013 00000000000000marc-8 yaz-5.28.0/test/test_tpath.c0000644000175000017500000000300413265142510012630 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #include #include #include #include #if HAVE_CONFIG_H #include #endif static void tst_tpath(void) { char fullpath[FILENAME_MAX]; YAZ_CHECK(!yaz_filepath_resolve("etc", 0, 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("etc", "", 0, fullpath)); /* bug #606 */ YAZ_CHECK(!yaz_filepath_resolve("etc", ".", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("does_not_exist", "", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("does_not_exist", ".", 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_tpath", 0, 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_tpath", "", 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_tpath", ".", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_tpath", "unknown_dir", 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_tpath", "unknown_dir:.", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_tpath", "unknown_dir:", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_tpath", "unknown_dir:c:", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_tpath", "unknown_dir:c:\\other", 0, fullpath)); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst_tpath(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/test_timing.c0000644000175000017500000000241313265142510013002 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #ifdef WIN32 #include #endif static void tst(void) { yaz_timing_t t = yaz_timing_create(); double real, user, sys; int i = 0; double x = 0; YAZ_CHECK(t); if (!t) return; #ifdef WIN32 Sleep(10); #endif for (i = 0; i<5000000; i++) x += i; YAZ_CHECK_EQ(i, 5000000); yaz_log(YLOG_LOG, "i=%d x=%f", i, x); yaz_timing_stop(t); real = yaz_timing_get_real(t); YAZ_CHECK(real == -1.0 || real >= 0.0); user = yaz_timing_get_user(t); YAZ_CHECK(user == -1.0 || user >= 0.0); sys = yaz_timing_get_sys(t); YAZ_CHECK(sys == -1.0 || sys >= 0.0); yaz_log(YLOG_LOG, "real=%f user=%f sys=%f", real, user, sys); yaz_timing_destroy(&t); YAZ_CHECK(!t); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/marccol1.u8.marc0000644000175000017500000005266713250277530013235 0000000000000001087cam a2200277 a 4500001002000000003000400020005001700024008004100041010002400082035002700106040001800133043001200151050002500163066000700188245002600195260006800221300003600289500012800325505009200453651003000545651004900575880003000624880007000654880003300724880005200757 70813420 /AJ/r86DLC19871006084439.0860826m19689999ja ab l00000 jpn  a 70813420 /AJ/r86 a(CStRLIN)DCLP86-B14482 cNNCdNNCdDLC aa-ja---0 aDS897.H325bH36 1968 c$1006880-01aHanda shishi.0 6880-02a[Handa-shi] :bHanda-shi,cShoÌ„wa 43-<59> [1968-<1984> av. <1-5, 7-8> :bill. ;c22 cm. aVol. 3 accompanied by Handa-shi chiiki chishitsuzu; v. 8, Handa-shi Otsukawa Asaiyama dashi kumiage zumen (1 folded) leaf).1 a[1]-[4] ShiryoÌ„ hen -- [5] Honbun hen -- [7] Bunkazai hen -- [8] Sairei minzoku hen 06880-03aHanda-shi (Japan) 06880-04aHanda-shi (Japan)xHistoryxSources.006245-01/$1aåŠç”° 市誌.0 6260-02/$1a[åŠç”°å¸‚] :båŠç”°å¸‚,c昭和 43-<59> [1968-<1984> 46651-03/$1aåŠç”°å¸‚ (Japan) 46651-04/$1aåŠç”°å¸‚ (Japan)xHistoryxSources.00847nam a2200229 a 4500001002100000003000400021005001700025008004100042010002500083035002600108050001900134066000700153245002400160260012100184300004600305500001700351650003900368710004400407880002300451880010600474880003700580 75840215 /ACN/r86DLC19870219000000.0860606m19009999ch 00001 chi  a 75840215 /ACN/r86 a(CStRLIN)DCLP86-B97420 aPL3031.T32bL5 c$1006880-01aLi tsÊ»ung.0 6880-02a[Kao-hsiung shih] :bWen hua yüan :bFa hsing so Sheng su chÊ»u pan she,c av. <4, pts 1-2; v. 5> in <3 > ;c22 cm. aCover title. 0aDidactic fiction, ChinesezTaiwan.206880-03aKao-hsiung shih wen hua yüan.006245-01/$1aæ­·å¢.0 6260-02/$1a[高雄市] :b文化院 :bç™¼è¡Œæ‰€ã€€è–æ›¸ã€€å‡ºç‰ˆç¤¾,c<民國63-66 [1974-1977 >206710-03/$1a高雄市 文化院.01020nam a2200277 a 4500001001700000003000400017005001700021008004100038010002100079035002600100050002000126066000700146082001600153245003700169250002200206260011600228300004600344440003200390504003000422650004700452650004600499880004100545880002400586880010100610880003100711 84226659 /ACNDLC19870219000000.0860227s1983 cc ac b 00000dchi  a 84226659 /ACN a(CStRLIN)DCLP86-B34000 aNX90b.I18 1983 c$10 a174/.97219006880-01aI shu chia yü te yü. 6880-02aTi 1 pan.0 6880-03aChÊ»eng-tu :bSsu-chÊ»uan jen min chÊ»u pan she :bSsu-chÊ»uan sheng hsin hua shu tien fa hsing,c1983. a2, 3, 4, 244 p. :bill., ports. ;c19 cm. 06880-04aTe yü tsÊ»ung shu aBibliography: p. 239-240. 0aArtistsxAnecdotes, facetiae, satire, etc. 0aEthicsxAnecdotes, facetiae, satire, etc.006245-01/$1a艺术家 与 德育. 6250-02/$1a第1版.0 6260-03/$1aæˆéƒ½ :bå››å·ã€€äººæ°‘ 出版社 :bå››å·çœã€€æ–°åŽã€€ä¹¦åº— å‘行,c1983. 06440-04/$1a德育 丛书01336cam a2200349 a 4500001001300000003000400013005001700017008004100034010001700075020002000092035002600112040003800138043001200176050002700188066000700215082002000222245005600242250002200298260010400320300003000424500006000454504004100514610004900555710004200604740002900646880005700675880002400732880010100756880004700857880004400904987003800948 84231405 DLC20001214140017.0841203m19849999cc b 000 0 chi  a 84231405  cRMBY0.38 (v. 1) a(CStRLIN)DCLP84-B5184 aDLC-RcDLC-RdDLC-RdCStRLINdDLC aa-cc---00aJQ1519.A5bC47529 1984 c$100a324.251/075219006880-01aZheng dang xue xi cai liao /cben she bian. 6880-02aDi 1 ban. 6880-03aShenyang :bLiaoning ren min chu ban she :bLiaoning sheng xin hua shu dian fa xing,c1984- av. <1, 3-5, > ;c19 cm. aColophon title also in pinyin: Zhengdang xuexi cailiao. aIncludes bibliographical references.206880-04aZhongguo gong chan dangxParty work.2 6880-05aLiaoning ren min chu ban she.0 aZhengdang xuexi cailiao.006245-01/$1aæ•´å…šã€€å­¦ä¹ ã€€ææ–™ /c本社 编. 6250-02/$1a第1版. 6260-03/$1a沈阳 :bè¾½å®ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾ :bè¾½å®çœã€€æ–°åŽã€€ä¹¦åº— å±è¡Œ,c1984-246610-04/$1a中国 共产党xParty work.2 6710-05/$1aè¾½å®ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾. aPINYINbCStRLINc20001212dce1.000916nam a2200241 a 4500001001700000003000400017005001700021008004100038010002100079035002600100043001200126050002300138066000700161082002200168245008000190250002400270260011200294300003200406650003400438880007400472880002400546880010400570 85174785 /ACNDLC19870219000000.0860312s1983 cc a 00000 chi  a 85174785 /ACN a(CStRLIN)DCLP86-B4377 aa-cc-hp0 aGR336.H67bH6 1983 c$10 a398.2/32/5115219006880-01aHo-pei min chien ku shih hsüan /c[chÊ»a tÊ»u Chang Wen-hsüeh]. 6880-02aHsin 1 pan.0 6880-03aShih-chia-chuang :bHua shan wen i chÊ»u pan she :bHo-pei sheng hsin hua shu tien fa hsing,c1983. a2, 255 p. :bill. ;c19 cm. 0aTaleszChinazHopeh Province.006245-01/$1a河北 氱间 故事 选 /c[æ’图 张 文学]. 6250-02/$1aæ–°1版.0 6260-03/$1a石家庄 :b花山 文艺 出版社 :b河北çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ,c1983.01171nam a2200325 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113050002100139066000700160082001200167100003100179245006500210250002200275260010500297300002100402440004900423500005100472504002900523650001600552740002300568880002900591880005700620880002400677880010400701880004000805 86116930 /ACNDLC19870219000000.0860430s1984 cc b 00010 chi  a 86116930 /ACN cRMBY1.00 a(CStRLIN)DCLP86-B71900 aPN45b.C436 1984 c$10 a809219106880-01aChang, Hsin-chien.106880-02aWen hsüeh chi chÊ»u chih shih /cChang Hsin-chien. 6880-03aTi 1 pan.0 6880-04aHo-fei shih :bAn-hui wen i chÊ»u pan she :bAn-hui sheng hsin hua shu tien fa hsing,c1984. a196 p. ;c19 cm. 06880-05aChÊ»ing nien wen hsüeh tsÊ»ung shu aCover title also in pinyin: Wenxuejichuzhishi. aIncludes bibliographies. 0aLiterature.01aWenxuejichuzhishi.106100-01/$1a章 新建.106245-02/$1a文学 基础 知识 /c章 新建. 6250-03/$1a第1版.0 6260-04/$1aåˆè‚¥å¸‚ :b安徽 文艺 出版社 :b安徽çœã€€æ–°è¯ã€€æ›¸åº— å‘行,c1984. 06440-05/$1aé’年 文学 丛书01437nam a2200301 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113043001200139050002400151066000700175082002200182245019000204250002200394260011900416300003800535504002600573650004700599710006500646740006800711880015700779880002400936880011000960880006501070 86117080 /ACNDLC19870219000000.0860502s1985 cc ab b 00000 chi  a 86117080 /ACN cRMBY2.30 a(CStRLIN)DCLP86-B7475 aa-cc---0 aQE537.2.C6bS5 1985 c$10 a551.2/2/09514219006880-01aShan Kan Ning ChÊ»ing ssu sheng (chÊ»ü) chÊ»iang ti chen mu lu :bkung yüan [chÊ»ien] 1177 nien-kung yüan 1982 nien /cKuo chia ti chen chü Lan-chou ti chen yen chiu so. 6880-02aTi 1 pan.0 6880-03aHsi-an :bShan-hsi kÊ»o hsüeh chi shu chÊ»u pan she :bShan-hsi sheng hsin hua shu tien fa hsing,c1985. a2, 170 p. :bill., maps ;c26 cm. aBibliography: p. 170. 0aEarthquakeszChina, NorthwestxChronology.206880-04aKuo chia ti chen chü Lan-chou ti chen yen chiu so.01aShan Kan Ning ChÊ»ing 4 sheng (chÊ»ü) chÊ»iang ti chen mu lu.006245-01/$1a陕甘å®é’ 四çœ(区) 强 地震 目录 :b公元[å‰] 1177å¹´ï¼å…¬å…ƒ 1982å¹´ /c国家 地震局 兰州 地震 研究所. 6250-02/$1a第1版.0 6260-03/$1a西安 :b陕西 秱学 技术 出版社 :b陕西çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ,c1985.206710-04/$1a国家 地震局 兰州 地震 研究所.01289cam a2200337 a 4500001002100000003000400021005001700025008004100042010002500083020001400108035002600122041001100148050002200159066000700181082002000188100003300208245014100241250002300382260007400405300002100479500002000500650004000520650004500560700003100605740004400636880002900680880012500709880002300834880006500857880002900922 86118651 /ACN/r88DLC19880830123434.0860218s1985 ch d 00110 chi  a 86118651 /ACN/r88 cNT$260.00 a(CStRLIN)DCLP86-B26690 achieng0 aSD126b.C473 1985 c$10 a634.9/03/21219106880-01aChÊ»en, Ming-tsÊ»un.106880-02aSen lin hsüeh ming tzÊ»u tzÊ»u tien =bEnglish Chinese dictionary of forestry /cChÊ»en Ming-tsÊ»un, Huang Chin-hsien ho pien. 6880-03aChÊ»u pan.0 6880-04aTÊ»ai-pei shih :bMing shan chÊ»u pan she,cmin kuo 74 [1985] a274 p. ;c20 cm. aIncludes index. 0aForests and forestryxDictionaries. 0aEnglish languagexDictionariesxChinese.106880-05aHuang, Chin-hsien.01aEnglish Chinese dictionary of forestry.106100-01/$1a陳 銘æ±.106245-02/$1a森林學 å詞 辭典 =bEnglish Chinese dictionary of forestry /c陳 銘æ±, 黃 釱仙 åˆç·¨. 6250-03/$1aåˆç‰ˆ.0 6260-04/$1aå°åŒ—市 :bå山 出版社,c氱國74 [1985]106700-05/$1a黃 釱仙.00995nam a2200289 a 4500001001700000003000400017005001700021008004100038010002100079035002600100050002400126066000700150082001700157100003100174245005700205250002300262260007500285300002100360440005200381500001900433650003000452880003300482880005700515880002300572880006500595880004500660 86118679 /ACNDLC19870219000000.0860218s1985 ch 00011 chi  a 86118679 /ACN a(CStRLIN)DCLP86-B26740 aPL2865.H3bH84 1985 c$10 a895.1/35219106880-01aHuang, Hai,d1943-106880-02aHsing hsing ti hsiang lien /cHuang Hai chu. 6880-03aChÊ»u pan.0 6880-04aTÊ»ai-pei shih :bHuang kuan chÊ»u pan she,cmin kuo 74 [1985] a297 p. ;c19 cm. 06880-05aHuang kuan tsÊ»ung shu ;vti 1143 chung aShort stories. 0aScience fiction, Chinese.106100-01/$1a黃 海,d1943-106245-02/$1a星星 的 項練 /c黃 海 著. 6250-03/$1aåˆç‰ˆ.0 6260-04/$1aå°åŒ—市 :b皇冠 出版社,c民國74 [1985] 06440-05/$1açš‡å† ã€€å¢æ›¸ ;v第1143種01365cam a2200361 a 4500001001300000003000400013005001700017008004100034010001700075020001300092035002600105040004000131043001200171050002300183066000700206082001700213245010300230250002200333260007900355300005400434500005400488504004100542651004500583700002600628700002400654740002200678880010600700880002400806880008000830880002900910880002600939987003800965 86119726 DLC20010412140706.0860403s1985 cc af b 00000 chi  a 86119726  cRMBY3.90 a(CStRLIN)DCLP86-B5782 aDLC-RcDLC-RdDLC-RdCStRLINdDLC-R aa-cc---00aDS751b.C4945 1985 c$100a951/.024219006880-01aJian ming Song shi /cZhou Baozhu, Chen Zhen zhu bian ; Zhou Baozhu ... [et al.] bian xie. 6880-02aDi 1 ban. 6880-03aBeijing :bRen min chu ban she :bXin hua shu dian fa xing,c1985. a4, 5, 603 p., [12] p. of plates :bill. ;c21 cm. aColophon title also in pinyin : Jianming Songshi. aIncludes bibliographical references. 0aChinaxHistoryySong dynasty, 960-1279.1 6880-04aZhou, Baozhu.1 6880-05aChen, Zhen.0 aJianming Songshi.006245-01/$1aç°¡æ˜Žã€€å®‹ã€€å² /c周 å®ç , 陈 振 主编 ; 周 å®ç  ... [et al.] 编写. 6250-02/$1a第1版. 6260-03/$1a北京 :b人民 出版社 :bæ–°è¯ã€€æ›¸åº— å‘行,c1985.1 6700-04/$1a周 å®ç .1 6700-05/$1a陈 振. aPINYINbCStRLINc20001214dce1.001069nam a2200289 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113043001200139050002200151066000700173082002000180100002800200245006400228250002200292260011800314300002500432504004100457650005700498880002900555880006500584880002400649880010600673 86122256 /ACNDLC19870219000000.0860303s1984 cc b 00010 chi  a 86122256 /ACN cRMBY2.80 a(CStRLIN)DCLP86-B3622 aa-cc---0 aPL2333b.L63 1984 c$10 a895.1/15/09219106880-01aLo, Han-chÊ»ao.106880-02aChung-kuo hsien tai shih ko lun /c[Lo Han-chÊ»ao]. 6880-03aTi 1 pan.0 6880-04a[Nan-ching shih] :bChiang-su jen min chÊ»u pan she :bChiang-su sheng hsin hua shu tien fa hsing,c1984. a11, 411 p. ;c20 cm. aIncludes bibliographical references. 0aChinese poetryy20th centuryxHistory and criticism.106100-01/$1a骆 寒超.106245-02/$1a中国 现代 诗歌 论 /c[骆 寒超]. 6250-03/$1a第1版.0 6260-04/$1a[å—京市] :b江è‹ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾ :b江è‹çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ,c1984.01194nam a2200325 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113043001200139050002300151066000700174082001500181100002300196245005300219250002200272260011900294300002400413440004700437650003300484650004400517651005000561880002600611880005700637880002400694880010700718880004300825 86124008 /ACNDLC19870219000000.0860417s1985 cc j 00010 chi  a 86124008 /ACN cRMBY0.61 a(CStRLIN)DCLP86-B6501 aa-cc---0 aDS731.U4bH75 1985 c$10 a951/.6219106880-01aHsin, She.106880-02aTsai Wei-wu-erh chih hsiang /cHsin She. 6880-03aTi 1 pan.0 6880-04aWu-lu-mu-chÊ»i shih :bHsin-chiang jen min chÊ»u pan she :bHsin-chiang hsin hua shu tien fa hsing,c1985. a2, 178 p. ;c19 cm. 06880-05aTsu kuo ta chia tÊ»ing tsÊ»ung shu 0aUigursxJuvenile literature. 0aEthnologyzChinaxJuvenile literatture. 0aChinaxEthnic relationsxJuvenile literature.106100-01/$1a辛 涉.106245-02/$1a在 维å¾å°” 之 乡 /c辛 涉. 6250-03/$1a第1版.0 6260-04/$1aä¹Œé²æœ¨é½å¸‚ :b新疆 人民 出版社 :b新疆 新è¯ã€€æ›¸åº— å‘行,c1985. 06440-05/$1a祖国 大家庭 丛书01192cam a2200313 a 4500001001300000003000400013005001700017008004100034010001700075020001300092035002700105040003100132050002400163066000700187082001700194100003600211245006400247250003000311260010700341300002400448440004900472500001900521880003900540880006900579880003300648880011000681880004900791987003800840 86124229 DLC20001214140017.0860703s1985 cc 000 1 chi  a 86124229  cRMBY1.05 a(CStRLIN)DCLP86-B11515 aDLC-RcDLC-RdCStRLINdDLC00aPL2724.H37bH7 1985 c$100a895.1/342191 6880-01aShen, Qifeng,db. 1741.106880-02aXie duo /cShen Qifeng zhu ; Qiao Yuzhou jiao dian. 6880-03aBeijing di 1 ban. 6880-04aBeijing :bRen min wen xue chu ban she :bXin hua shu dian Beijing fa xing suo fa xing,c1985. a7, 198 p. ;c19 cm. 06880-05aZhongguo xiao shuo shi liao cong shu aShort stories.1 6100-01/$1a沈 起凤,db. 1741.106245-02/$1aè°é“Ž /c沈 起凤 著 ; 乔 雨舟 校点. 6250-03/$1a北京 第1版. 6260-04/$1a北京 :b人民 文学 出版社 :bæ–°åŽã€€ä¹¦åº— 北京 å‘行所 å‘行,c1985. 06440-05/$1a中国 å°è¯´ã€€å²æ–™ã€€ä¸›ä¹¦ aPINYINbCStRLINc20001214dce1.001470cam a2200349 a 4500001002100000003000400021005001700025008004100042010002500083020001300108035002600121043001200147050002400159066000700183082002000190245013300210250002200343260011700365300002400482500006600506650002200572650002600594651003400620651003400654651003500688710006400723740003800787880010800825880002400933880011000957880005301067 86124531 /ACN/r93DLC19930723073715.0860319s1985 cc 00000 chi  a 86124531 /ACN/r93 cRMBY1.80 a(CStRLIN)DCLP86-B4826 aa-cc---0 aHX418.5b.C482 1985 c$10 a322/.2/0951219006880-01aChÊ»ing kung cheng chih lun hsün chiao tsÊ»ai /cChung kung Shang-hai shih wei hsüan chÊ»uan pu tsu chih pien hsieh. 6880-02aTi 1 pan. 6880-03aShang-hai :bShang-hai jen min chÊ»u pan she :bHsin hua shu tien Shang-hai fa hsing so fa hsing,c1985. a8, 479 p. ;c19 cm. aCover title also in pinyin: Qinggong zhengzhi lunxun jiaocai. 0aCommunismzChina. 0aWorking classzChina. 0aChinaxHistoryy19th century. 0aChinaxHistoryy20th century. 0aChinaxDescription and travel.206880-04aChung kung Shang-hai shih wei.bHsüan chÊ»uan pu.01aQinggong zhengzhi lunxun jiaocai.006245-01/$1aé’工 政治 轮训 教æ /c中共 上海 市委 宣传部 组织 编写. 6250-02/$1a第1版. 6260-03/$1a上海 :b上海 人氱 出版社 :bæ–°è¯ã€€æ›¸åº— 上海 å±è¡Œæ‰€ã€€å±è¡Œ,c1985.206710-04/$1a中共 上海 市委.b宣传部.01072nam a2200301 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113050002500139066000700164082001700171100002800188245004100216250002200257260012700279300006300406440003400469500001100503740001500514880002600529880004100555880002400596880011900620880003100739 86125160 /ACNDLC19870219000000.0860327s1985 cc cfh 00010 chi  a 86125160 /ACN cRMBY1.05 a(CStRLIN)DCLP86-B52920 aPL2862.I276bW8 1985 c$10 a895.1/15219106880-01aHsiao, ChÊ»ing.106880-02aWu shu hua /cHsiao ChÊ»ing. 6880-03aTi 1 pan.0 6880-04aPei-ching :bPei-ching shih yüeh wen i chÊ»u pan she :bHsin hua shu tien Pei-ching fa hsing so fa hsing,c1985. a4, 3, 199 p., [2] p. of plates :bfacsim., port. ;c19 cm. 06880-05aHung yeh shih tsÊ»ung aPoems.01a5 shu hua.106100-01/$1a晓 晴.106245-02/$1a五æŸã€€èб/c晓 晴. 6250-03/$1a第1版.0 6260-04/$1a北京 :båŒ—äº¬ã€€åæœˆã€€æ–‡è‰ºã€€å‡ºç‰ˆç¤¾ :bæ–°åŽã€€ä¹¦åº— 北京 å±è¡Œæ‰€ã€€å±è¡Œ,c1985. 06440-05/$1a红å¶ã€€è¯—丛01248nam a2200301 a 4500001001700000003000400017005001700021008004100038010002100079035002600100043001200126050002500138066000700163082001500170100003000185245006900215260008800284300003000372490007900402500004100481651004100522830006900563880002900632880006500661880007900726880007600805880006500881 86125348 /ACNDLC19870219000000.0860304r19851917ch 00010 chi  a 86125348 /ACN a(CStRLIN)DCLP86-B3824 aa-cc---0 aDS754.18b.C446 1985 c$10 a327.51219106880-01aChuang, Ping-hai.106880-02aWai chiao ssu tÊ»ung lu /cChuang Ping-hai pien [tsuan].0 6880-03a[TÊ»ai-pei hsien Yung-ho shih] :bWen hai chÊ»u pan she,cmin kuo 74 [1985] a2, 2, 2, 272 p. ;c22 cm.1 6880-04aChin tai Chung-kuo shih liao tsÊ»ung kÊ»an 3 pien : ti 2 chi ;v20 aReprint. Originally published: 1917? 0aChinaxForeign relationsy1644-1912. 06880-05aChin tai Chung-kuo shih liao tsÊ»ung kÊ»an 3 pien ;v20.106100-01/$1a莊 病骸.106245-02/$1a外交 æ€ç—›ã€€éŒ„ /c莊 病骸 編[纂].0 6260-03/$1a[臺北縣 永和市] :b文海 出版社,c民國74 [1985]1 6490-04/$1aè¿‘ä»£ã€€ä¸­åœ‹ã€€å²æ–™ã€€å¢åˆŠã€€ä¸‰ç·¨ : 第二輯 ;v20 06830-05/$1aè¿‘ä»£ã€€ä¸­åœ‹ã€€å²æ–™ã€€å¢åˆŠã€€ä¸‰ç·¨ ;v20.01116cam a2200325 a 4500001001300000003000400013005001700017008004100034010001700075020001700092035002600109040003300135043001200168050002100180066000700201082001600208100002500224245009600249250002100345260006100366300003600427546001600463650002500479740004000504880002900544880010300573880002300676880006200699987002900761 86125443 DLC20020326070412.0860304s1985 ch a 00010 chi  a 86125443  c$9.00 (U.S.) a(CStRLIN)DCLP86-B3795 aDLC-RcDLC-RdCStRLINdDLC-R aa-cc---00aB5231b.L59 1985 c$100a181/.112191 6880-01aLiu, Shaoji.106880-02aZhongguo zhe xue xin lun =bA new view of the Chinese philosophy /cLiu Shaoji zhu. 6880-03aChu ban. 6880-04aTaibei Shi :bShi jie shu ju,cmin guo 74 [1985] a6, 12, 424 p. :bill. ;c27 cm. aIn Chinese. 0aPhilosophy, Chinese.0 aNew view of the Chinese philosophy.1 6100-01/$1a劉 紹基.106245-02/$1a中國 哲學 新論 =bA new view of the Chinese philosophy /c劉 紹基 豗. 6250-03/$1aåˆç‰ˆ. 6260-04/$1aå°åŒ—市 :b世界 書局,c氱國74 [1985] aPINYINbDLCc20020326dc01199nam a2200301 a 4500001002100000003000400021005001700025008004100042010002500083020002000108035002600128043001200154050002400166066000700190082001800197245009700215250002200312260011900334300001900453500007200472650003100544700002700575740004100602880009500643880002400738880010600762880002900868 86154542 /ACN/r86DLC19870219000000.0860528s1985 cc 00000 chi  a 86154542 /ACN/r86 cRMBY3.60 (v. 1) a(CStRLIN)DCLP86-B9002 aa-cc---0 aHB126.C4bC533 1985 c$10 a330/.0951219006880-01aChung-kuo ku tai ching chi chu shu hsüan tu /cYü Tsu-yao ... [et al.] pien chu. 6880-02aTi 1 pan.0 6880-03a[ChÊ»ang-chÊ»un shih] :bChi-lin jen min chÊ»u pan she :bChi-lin sheng hsin hua shu tien fa hsing,c1985. a2 v. ;c20 cm. aColophon title also in pinyin: Zhongguo gudai jingji zhushu xuandu. 0aEconomicszChinaxHistory.106880-04aYü, Tsu-yao.01aZhongguo gudai jingji zhushu xuandu.006245-01/$1a中國 å¤ä»£ã€€ç¶“濟 著述 é¸è®€ /c虞 祖尧 ... [et al.] ç¼–è‘—. 6250-02/$1a第1版.0 6260-03/$1a[长春市] :b剿ž— 人民 出版社 :b剿ž—çœã€€æ–°åŽã€€ä¹¦åº— å‘行,c1985.106700-04/$1a虞 祖尧.00920nam a2200253 a 4500001001600000003000400016005001700020008004100037010002000078020001000098035002600108040002400134050002500158066000700183100003400190245006700224260006400291300002100355440005300376880003600429880007900465880005900544880006300603 86159478 /AKDLC19870219000000.0860602s1984 ko 00010 kor  a 86159478 /AK cW2800 a(CStRLIN)DCLP86-B9357 aCLASIAcCLASIAdDLC0 aAC148b.K589256 1985 c$1106880-01aKim, Tong-gil,d1928-106880-02aTŭrŏra, ttaltŭl a :bKim Tong-gil taepÊ»yo esei.0 6880-03aSŏul :bChÊ»ŏngnyŏnsa,c1984g(1985 printing) a271 p. ;c23 cm. 06880-04aUri sidae ŭi taepÊ»yo sanmunsŏn ;v1106100-01/$1a김 ë™ê¸¸,d1928-106245-02/$1a들어ë¼, 딸들 아 :b김 ë™ê¸¸ã€€ëŒ€í‘œã€€ì—세ì´.0 6260-03/$1a서울 :b청년사,c1984g(1985 printing) 06440-04/$1a우리 시대 ì˜ã€€ëŒ€í‘œã€€ì‚°ë¬¸ì„  ;v1yaz-5.28.0/test/marc2.xml.marc0000644000175000017500000000214113572540030012755 0000000000000001121nam0a32002171 450 001002800000004001000028008002800038009001100066039000900077100001900086245005900105260003300164300001000197512007300207531001400280538001900294652001500313666004900328795050600377795002000883000a9 182 502 3b710100fa000rcae000tsufa1995bgblengv0000asgxc000abef000aMimmshGarnet000aCry babyaWarm and soulfuleGarnet Mimms ... [et al.]000aBury St. EdmundsbBGOc1995000n1 cd000aIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)000aIndhold:000fBGOgBGOCD268000m78.794v4000msoulmrhythm & bluesnvokalp1960-1969lUSA000Ã¥11aCry babyaNobody but youaUntil you were goneaAnytime you want meaSo closeaFor your precious loveaBaby don't you weepaA ¤quiet placeaCry to meaDon't change your heartaWanting youaThe ¤truth hurtsaI'll take good care of youaLooking for youaIt won't hurt (half as much)aIt was easier to hurt heraThinkin'aProve it to meaMore than a miracleaAs long as I have youaOne girlaThere goes my babyaIt's just a matter of timeaA ¤little bit of soapaLook awayaI'll make it up to you000Ã¥40y0a1 girlyaz-5.28.0/test/test_oid.c0000644000175000017500000000420113265142510012263 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static void tst(void) { char oid_buf[OID_STR_MAX]; const char *n; yaz_oid_db_t db; const Odr_oid *c_oid; Odr_oid *oid; NMEM nmem = nmem_create(); ODR odr = odr_createmem(ODR_ENCODE); db = yaz_oid_std(); YAZ_CHECK(db); c_oid = yaz_string_to_oid(db, CLASS_ATTSET, "Bib-1"); YAZ_CHECK(c_oid && oid_oidcmp(c_oid, yaz_oid_attset_bib_1) == 0); c_oid = yaz_string_to_oid(db, CLASS_GENERAL, "Bib-1"); YAZ_CHECK(c_oid && oid_oidcmp(c_oid, yaz_oid_attset_bib_1) == 0); c_oid = yaz_string_to_oid(db, CLASS_ATTSET, "unknown"); YAZ_CHECK(c_oid == 0); oid = yaz_string_to_oid_nmem(db, CLASS_ATTSET, "1.2.840.10003.3.1", nmem); YAZ_CHECK(oid && !oid_oidcmp(oid, yaz_oid_attset_bib_1)); oid = yaz_string_to_oid_nmem(db, CLASS_ATTSET, "unknown", nmem); YAZ_CHECK(oid == 0); oid = yaz_string_to_oid_odr(db, CLASS_ATTSET, "1.2.840.10003.3.1", odr); YAZ_CHECK(oid && !oid_oidcmp(oid, yaz_oid_attset_bib_1)); oid = yaz_string_to_oid_odr(db, CLASS_ATTSET, "unknown", odr); YAZ_CHECK(oid == 0); n = yaz_oid_to_string(db, yaz_oid_attset_bib_1, 0); YAZ_CHECK(n && !strcmp(n, "Bib-1")); n = oid_name_to_dotstring(CLASS_ATTSET, "Bib-1", oid_buf); YAZ_CHECK(n && !strcmp(n, "1.2.840.10003.3.1")); n = oid_name_to_dotstring(CLASS_DIAGSET, "Bib-1", oid_buf); YAZ_CHECK(n && !strcmp(n, "1.2.840.10003.4.1")); n = oid_name_to_dotstring(CLASS_DIAGSET, "unknown", oid_buf); YAZ_CHECK(!n); n = oid_name_to_dotstring(CLASS_DIAGSET, "1.2.840.10003.3.1", oid_buf); YAZ_CHECK(!n); nmem_destroy(nmem); odr_destroy(odr); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/test_zgdu.c0000644000175000017500000000355113265142510012470 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include static void tst_http_response(void) { /* response, content */ const char *http_buf = /*123456789012345678 */ "HTTP/1.1 200 OK\r\n" "Content-Length: 2\r\n" "\r\n" "12"; int r; Z_GDU *zgdu; ODR enc = odr_createmem(ODR_ENCODE); ODR dec = odr_createmem(ODR_DECODE); odr_setbuf(dec, (char *) http_buf, strlen(http_buf), 0); r = z_GDU(dec, &zgdu, 0, 0); YAZ_CHECK(r); if (r) { char *http_buf1; int http_len1; YAZ_CHECK_EQ(zgdu->which, Z_GDU_HTTP_Response); zgdu->u.HTTP_Response->content_len = 1; /* we now have Content-Length=2, but content_len=1 */ z_GDU(enc, &zgdu, 0, 0); http_buf1 = odr_getbuf(enc, &http_len1, 0); YAZ_CHECK(http_buf1); if (http_buf1) { const char *http_buf2 = /*123456789012345678 */ "HTTP/1.1 200 OK\r\n" "Content-Length: 1\r\n" /* content_len takes precedence */ "\r\n" "1"; YAZ_CHECK_EQ(http_len1, strlen(http_buf2)); YAZ_CHECK(http_len1 == strlen(http_buf2) && memcmp(http_buf1, http_buf2, http_len1) == 0); } } odr_destroy(enc); odr_destroy(dec); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst_http_response(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/test_log.c0000644000175000017500000000415613265142510012302 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #if HAVE_UNISTD_H #include #endif void hook_func(int level, const char *msg, void *vp) { fprintf(stderr, "[HOOK level=%d msg=%s]\n", level, msg); } int main(int argc, char **argv) { char *arg; int i, ret; int level = YLOG_LOG; int number = 1; unsigned int wait_between_log = 0; while ((ret = options("f:p:v:l:m:n:r:w:Hh", argv, argc, &arg)) != -2) { switch (ret) { case 'r': yaz_log_init_max_size(atoi(arg)); break; case 'f': yaz_log_time_format(arg); break; case 'p': yaz_log_init_prefix(arg); break; case 'v': yaz_log_init_level(yaz_log_mask_str(arg)); break; case 'l': if (!strcmp(arg, "@")) yaz_log_init_file(0); else yaz_log_init_file(arg); break; case 'n': number = atoi(arg); break; case 'm': level = yaz_log_module_level(arg); break; case 'w': wait_between_log = atoi(arg); break; case 'H': yaz_log_set_handler(hook_func, 0); break; case 0: for (i = 0; i 02647nam^a2200469^^^4500UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d99851339eoCL0036000039ProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106Cu-RivESCu-RivESCStRLINdcrbWaOLNClinton, Atkinson.Clinton, Purser & Arnold, to their countreymen wheresoeuer[electronic resource] :Wherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent MaiestieClinton, Purser & Arnold, to their countreymen wheresoeverClinton, Purser & Arnold, to their countreymen wheresoeverLondon :Imprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,[1583?][12] pIn verseThe first poem is signed: Thomas Walton alias PurserClinton's full name and bookseller's name from, and publication date conjectured by, STCSignatures: A⁴ B²Reproduction of the original in the Bodleian LibrarySTC (2nd ed.)5431Also issued in print and on microformElectronic reproduction.Mode of access: World Wide Web.Restricted to UC campusesElectronic texts.localPiratesEnglandEarly works to 1800.Walton, Thomas,fl. 1583.autArnold,fl. 1583.autEarly English books onlineMERkmainSCBnnetRestricted to UC campusesSCP UCSDhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610Restricted to UC campusesSCP UCSDhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610DVXLELECT-GENInternetLAGEinOnline accessRestricted to UC campusesSCP UCSDhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610Restricted to UC campuseshttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610CDLEarly English books, 1475-1640 ;1406:13.DVXL002592301 yaz-5.28.0/test/test_icu.sh0000755000175000017500000000163213265142510012470 00000000000000#!/bin/sh # Tests a couple of yaz-icu conversions # # Reads tsticu-[0-9].input files # Writes tsticu-[0-9].output / output.tmp files # Config tsticu-[0-9].xml srcdir=${srcdir:-.} ecode=0 ../util/yaz-icu >/dev/null 2>&1 if test $? = "3"; then exit 0 fi for f in ${srcdir}/test_icu.[0-9].input; do fb=`basename ${f} .input` CONFIG=${srcdir}/${fb}.xml NEW=${fb}.output.tmp OLD=${srcdir}/${fb}.output DIFF=`basename ${fb}`.diff ../util/yaz-icu -o -c $CONFIG <$f > $NEW if test $? != "0"; then echo "$f: yaz-icu returned error" ecode=1 elif test -f $OLD; then if diff $OLD $NEW >$DIFF; then rm $DIFF rm $NEW else echo "$f: $NEW and $OLD differ" ecode=1 fi else echo "$f: Making test result $OLD for the first time" mv $NEW $OLD ecode=1 fi done exit $ecode # Local Variables: # mode:shell-script # sh-indentation: 2 # sh-basic-offset: 4 # End: yaz-5.28.0/test/test_pquery.c0000644000175000017500000000464013265142510013044 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include int expect_pqf(const char *pqf, const char *expect_pqf, int expect_error) { YAZ_PQF_Parser parser = yaz_pqf_create(); int res = 0; ODR odr = odr_createmem(ODR_ENCODE); Z_RPNQuery *rpn; if (!parser) return 0; if (!odr) return 0; rpn = yaz_pqf_parse(parser, odr, pqf); if (!rpn) { const char *msg; size_t offset; int got_error = yaz_pqf_error (parser, &msg, &offset); if (expect_error == got_error) res = 1; } else if (expect_error == YAZ_PQF_ERROR_NONE) { WRBUF wrbuf = wrbuf_alloc(); if (wrbuf) { yaz_rpnquery_to_wrbuf(wrbuf, rpn); if (!strcmp(wrbuf_cstr(wrbuf), expect_pqf)) { res = 1; } wrbuf_destroy(wrbuf); } } yaz_pqf_destroy(parser); odr_destroy(odr); return res; } static void tst(void) { YAZ_CHECK(expect_pqf("a", "@attrset Bib-1 a", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("@attr 1=4 a", "@attrset Bib-1 @attr 1=4 a", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("@attr 1=title a", "@attrset Bib-1 @attr 1=title a", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("a b", "", YAZ_PQF_ERROR_EXTRA)); YAZ_CHECK(expect_pqf("@and a", "", YAZ_PQF_ERROR_MISSING)); YAZ_CHECK(expect_pqf("@attr p=q a", "", YAZ_PQF_ERROR_BAD_INTEGER)); YAZ_CHECK(expect_pqf("@prox 0 0 0 0 k 0 a b", "@attrset Bib-1 @prox 0 0 0 0 k 0 a b", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("@prox 0 0 0 0 3 0 a b", "", YAZ_PQF_ERROR_PROXIMITY)); YAZ_CHECK(expect_pqf("@attr 1=12345678901 x", "@attrset Bib-1 @attr 1=12345678901 x", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("@attr 1=1234567890.1 x", "@attrset Bib-1 @attr 1=1234567890.1 x", YAZ_PQF_ERROR_NONE)); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/marc3.json0000644000175000017500000001072013572540030012210 00000000000000{ "leader":"00914naa 2200337 450 ", "fields": [ { "001": { "subfields": [ { "a":"a00001508" }, { "f":"a" } ], "ind1":" ", "ind2":" " } }, { "004": { "subfields": [ { "a":"i" }, { "r":"n" } ], "ind1":" ", "ind2":" " } }, { "008": { "subfields": [ { "a":"1991" }, { "b":"xx" }, { "l":"nor" }, { "t":"a" }, { "v":"9" } ], "ind1":" ", "ind2":" " } }, { "009": { "subfields": [ { "a":"a" }, { "g":"xx" } ], "ind1":" ", "ind2":" " } }, { "041": { "subfields": [ { "a":"nor" } ], "ind1":" ", "ind2":" " } }, { "041": { "subfields": [ { "d":"eng" } ], "ind1":" ", "ind2":" " } }, { "097": { "subfields": [ { "a":"06" } ], "ind1":"0", "ind2":"0" } }, { "245": { "subfields": [ { "a":"Byfornyelse ved Ibsen-Ringen" } ], "ind1":" ", "ind2":" " } }, { "300": { "subfields": [ { "b":"farvefoto" }, { "b":"plan" }, { "b":"snit" } ], "ind1":" ", "ind2":" " } }, { "557": { "subfields": [ { "a":"Byggekunst" }, { "j":"1991" }, { "v":"1/2" }, { "k":"41-45" } ], "ind1":" ", "ind2":" " } }, { "630": { "subfields": [ { "f":"byfornyelse" } ], "ind1":" ", "ind2":" " } }, { "630": { "subfields": [ { "f":"sanering" } ], "ind1":" ", "ind2":" " } }, { "633": { "subfields": [ { "f":"Norge" } ], "ind1":" ", "ind2":" " } }, { "633": { "subfields": [ { "f":"Oslo" } ], "ind1":" ", "ind2":" " } }, { "648": { "subfields": [ { "a":"Telje Torp Aasen Arkitektkontor" }, { "c":"Kristian Augustsgate 7B" } ], "ind1":" ", "ind2":" " } }, { "648": { "subfields": [ { "a":"Eng, Dagfin" } ], "ind1":" ", "ind2":" " } }, { "648": { "subfields": [ { "r":"anlund, Tom" }, { "c":"Kristian Augustsgate" }, { "c":"Pilestredet 19" } ], "ind1":" ", "ind2":" " } }, { "J01": { "subfields": [ { "a":"a" } ], "ind1":" ", "ind2":" " } }, { "BAS": { "subfields": [ { "0":"" } ], "ind1":" ", "ind2":" " } }, { "LKR": { "subfields": [ { "a":"ITM" }, { "l":"ARK50" }, { "b":"0000145" }, { "y":"1991" }, { "i":"1/2" }, { "k":"41-45" } ], "ind1":" ", "ind2":" " } }, { "CAT": { "subfields": [ { "a":"" }, { "b":"" }, { "c":"20020111" }, { "l":"ARK01" }, { "h":"2002" } ], "ind1":" ", "ind2":" " } }, { "CAT": { "subfields": [ { "a":"" }, { "b":"" }, { "c":"20020111" }, { "l":"ARK01" }, { "h":"2116" } ], "ind1":" ", "ind2":" " } }, { "CAT": { "subfields": [ { "a":"" }, { "b":"" }, { "c":"20021002" }, { "l":"ARK01" }, { "h":"1000" } ], "ind1":" ", "ind2":" " } }, { "CAT": { "subfields": [ { "a":"ICLLOAD" }, { "b":"00" }, { "c":"20021122" }, { "l":"ARK01" }, { "h":"1948" } ], "ind1":" ", "ind2":" " } }, { "CAT": { "subfields": [ { "c":"20030618" }, { "l":"ARK01" }, { "h":"1330" } ], "ind1":" ", "ind2":" " } }, { "UID": { "subfields": [ { "a":"a00001508" } ], "ind1":" ", "ind2":" " } } ] } yaz-5.28.0/test/xml2marc4.xml0000644000175000017500000000106313572540030012643 00000000000000 009140091a22a 22003370 yaz-5.28.0/test/test_sortspec.c0000644000175000017500000001754713265142510013373 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static int cql(const char *arg, const char *expected_result) { ODR odr = odr_createmem(ODR_ENCODE); Z_SortKeySpecList *sort_spec = yaz_sort_spec(odr, arg); int ret = 0; if (!sort_spec) { yaz_log(YLOG_WARN, "yaz_sort_spec : parse error: %s", arg); } else { WRBUF w = wrbuf_alloc(); int r = yaz_sort_spec_to_cql(sort_spec, w); if (!expected_result && r) ret = 1; else if (expected_result && r == 0) { if (strcmp(wrbuf_cstr(w), expected_result) == 0) ret = 1; else { yaz_log(YLOG_WARN, "sort: diff: %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } } else if (r) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got error %d", r); } else if (r == 0) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected error"); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } wrbuf_destroy(w); } odr_destroy(odr); return ret; } static int type7(const char *arg, const char *expected_result) { ODR odr = odr_createmem(ODR_ENCODE); Z_SortKeySpecList *sort_spec = yaz_sort_spec(odr, arg); int ret = 0; if (!sort_spec) { yaz_log(YLOG_WARN, "yaz_sort_spec : parse error: %s", arg); } else { WRBUF w = wrbuf_alloc(); int r; wrbuf_puts(w, "q"); r = yaz_sort_spec_to_type7(sort_spec, w); if (!expected_result && r) ret = 1; else if (expected_result && r == 0) { if (strcmp(wrbuf_cstr(w), expected_result) == 0) ret = 1; else { yaz_log(YLOG_WARN, "sort: diff: %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } } else if (r) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got error %d", r); } else if (r == 0) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected error"); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } wrbuf_destroy(w); } odr_destroy(odr); return ret; } static int strategy_sortkeys(const char *arg, const char *expected_result, int (*strategy) (Z_SortKeySpecList *, WRBUF)) { ODR odr = odr_createmem(ODR_ENCODE); Z_SortKeySpecList *sort_spec = yaz_sort_spec(odr, arg); int ret = 0; if (!sort_spec) { yaz_log(YLOG_WARN, "yaz_sort_spec : parse error: %s", arg); } else { WRBUF w = wrbuf_alloc(); int r = (strategy)(sort_spec, w); if (!expected_result && r) ret = 1; else if (expected_result && r == 0) { if (strcmp(wrbuf_cstr(w), expected_result) == 0) ret = 1; else { yaz_log(YLOG_WARN, "sort: diff: %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } } else if (r) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got error %d", r); } else if (r == 0) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected error"); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } wrbuf_destroy(w); } odr_destroy(odr); return ret; } static int srw_sortkeys(const char *arg, const char *expected_result) { return strategy_sortkeys(arg, expected_result, yaz_sort_spec_to_srw_sortkeys); } static int solr_sortkeys(const char *arg, const char *expected_result) { return strategy_sortkeys(arg, expected_result, yaz_sort_spec_to_solr_sortkeys); } static int check_sortkeys_to_sort_spec(const char *arg, const char *expected_result, int (*sort_strategy)(const char *, WRBUF)) { WRBUF w = wrbuf_alloc(); int ret = 0; int r = sort_strategy(arg, w); if (!expected_result && r) ret = 1; else if (expected_result && r == 0) { if (strcmp(wrbuf_cstr(w), expected_result) == 0) ret = 1; else { yaz_log(YLOG_WARN, "sort: diff: %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } } else if (r) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got error %d", r); } else if (r == 0) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected error"); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } wrbuf_destroy(w); return ret; } static int check_srw_sortkeys_to_sort_spec(const char *arg, const char *expected_result) { return check_sortkeys_to_sort_spec(arg, expected_result, yaz_srw_sortkeys_to_sort_spec); } static int check_solr_sortkeys_to_sort_spec(const char *arg, const char *expected_result) { return check_sortkeys_to_sort_spec(arg, expected_result, yaz_solr_sortkeys_to_sort_spec); } static void tst(void) { YAZ_CHECK(cql("title a", " SORTBY title/ascending/ignoreCase")); YAZ_CHECK(cql("title a date ds", " SORTBY title/ascending/ignoreCase" " date/descending/respectCase")); YAZ_CHECK(cql("1=4,2=3 a", 0)); YAZ_CHECK(cql("date a=1900", " SORTBY date/ascending/ignoreCase/missingValue=1900")); YAZ_CHECK(type7("title a", "@or q @attr 1=title @attr 7=1 0")); YAZ_CHECK(type7("title a date ds", "@or @or q @attr 1=title @attr 7=1 0" " @attr 1=date @attr 7=2 1")); YAZ_CHECK(type7("1=4,2=3 a", "@or q @attr 1=4 @attr 2=3 @attr 7=1 0")); YAZ_CHECK(type7("date a=1900", "@or q @attr 1=date @attr 7=1 0")); YAZ_CHECK(srw_sortkeys("title a", "title,,1,0,highValue")); YAZ_CHECK(srw_sortkeys("title a date ds", "title,,1,0,highValue " "date,,0,1,highValue")); YAZ_CHECK(srw_sortkeys("1=4,2=3 a", 0)); YAZ_CHECK(srw_sortkeys("date a=1900", "date,,1,0,1900")); YAZ_CHECK(check_srw_sortkeys_to_sort_spec( "date,,1,0,1900", "date ai=1900")); YAZ_CHECK(solr_sortkeys("title a", "title asc")); YAZ_CHECK(solr_sortkeys("title a date ds", "title asc" ",date desc")); YAZ_CHECK(solr_sortkeys("1=4,2=3 a", 0)); YAZ_CHECK(check_solr_sortkeys_to_sort_spec( "date asc", "date ai")); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/xml2tmarc3.xml0000644000175000017500000000344213572540030013031 00000000000000 00914naa a2200337 450 a00001508ain1991xxnora9axxnoreng06Byfornyelse ved Ibsen-RingenfarvefotoplansnitByggekunst19911/241-45byfornyelsesaneringNorgeOsloTelje Torp Aasen ArkitektkontorKristian Augustsgate 7BEng, Dagfinanlund, TomKristian AugustsgatePilestredet 19aITMARK50000014519911/241-4520020111ARK01200220020111ARK01211620021002ARK011000ICLLOAD0020021122ARK01194820030618ARK011330a00001508 yaz-5.28.0/test/Makefile.in0000644000175000017500000020676113570011145012367 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test_ccl$(EXEEXT) test_comstack$(EXEEXT) \ test_cql2ccl$(EXEEXT) test_embed_record$(EXEEXT) \ test_filepath$(EXEEXT) test_file_glob$(EXEEXT) \ test_iconv$(EXEEXT) test_icu$(EXEEXT) test_json$(EXEEXT) \ test_libstemmer$(EXEEXT) test_log$(EXEEXT) \ test_log_thread$(EXEEXT) test_match_glob$(EXEEXT) \ test_matchstr$(EXEEXT) test_mutex$(EXEEXT) test_nmem$(EXEEXT) \ test_odr$(EXEEXT) test_odrstack$(EXEEXT) test_oid$(EXEEXT) \ test_options$(EXEEXT) test_pquery$(EXEEXT) \ test_query_charset$(EXEEXT) test_record_conv$(EXEEXT) \ test_rpn2cql$(EXEEXT) test_rpn2solr$(EXEEXT) \ test_retrieval$(EXEEXT) test_shared_ptr$(EXEEXT) \ test_soap1$(EXEEXT) test_soap2$(EXEEXT) test_solr$(EXEEXT) \ test_sortspec$(EXEEXT) test_timing$(EXEEXT) \ test_tpath$(EXEEXT) test_wrbuf$(EXEEXT) test_xmalloc$(EXEEXT) \ test_xml_include$(EXEEXT) test_xmlquery$(EXEEXT) \ test_zgdu$(EXEEXT) subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_VPATH_FILES = am_test_ccl_OBJECTS = test_ccl.$(OBJEXT) test_ccl_OBJECTS = $(am_test_ccl_OBJECTS) test_ccl_LDADD = $(LDADD) test_ccl_DEPENDENCIES = ../src/libyaz.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_comstack_OBJECTS = test_comstack.$(OBJEXT) test_comstack_OBJECTS = $(am_test_comstack_OBJECTS) test_comstack_LDADD = $(LDADD) test_comstack_DEPENDENCIES = ../src/libyaz.la am_test_cql2ccl_OBJECTS = test_cql2ccl.$(OBJEXT) test_cql2ccl_OBJECTS = $(am_test_cql2ccl_OBJECTS) test_cql2ccl_LDADD = $(LDADD) test_cql2ccl_DEPENDENCIES = ../src/libyaz.la am_test_embed_record_OBJECTS = test_embed_record.$(OBJEXT) test_embed_record_OBJECTS = $(am_test_embed_record_OBJECTS) test_embed_record_LDADD = $(LDADD) test_embed_record_DEPENDENCIES = ../src/libyaz.la am_test_file_glob_OBJECTS = test_file_glob.$(OBJEXT) test_file_glob_OBJECTS = $(am_test_file_glob_OBJECTS) test_file_glob_LDADD = $(LDADD) test_file_glob_DEPENDENCIES = ../src/libyaz.la am_test_filepath_OBJECTS = test_filepath.$(OBJEXT) test_filepath_OBJECTS = $(am_test_filepath_OBJECTS) test_filepath_LDADD = $(LDADD) test_filepath_DEPENDENCIES = ../src/libyaz.la am_test_iconv_OBJECTS = test_iconv.$(OBJEXT) test_iconv_OBJECTS = $(am_test_iconv_OBJECTS) test_iconv_LDADD = $(LDADD) test_iconv_DEPENDENCIES = ../src/libyaz.la am_test_icu_OBJECTS = test_icu.$(OBJEXT) test_icu_OBJECTS = $(am_test_icu_OBJECTS) am__DEPENDENCIES_1 = test_icu_DEPENDENCIES = ../src/libyaz_icu.la ../src/libyaz.la \ $(am__DEPENDENCIES_1) am_test_json_OBJECTS = test_json.$(OBJEXT) test_json_OBJECTS = $(am_test_json_OBJECTS) test_json_LDADD = $(LDADD) test_json_DEPENDENCIES = ../src/libyaz.la am_test_libstemmer_OBJECTS = test_libstemmer.$(OBJEXT) test_libstemmer_OBJECTS = $(am_test_libstemmer_OBJECTS) test_libstemmer_DEPENDENCIES = ../src/libyaz_icu.la ../src/libyaz.la \ $(am__DEPENDENCIES_1) am_test_log_OBJECTS = test_log.$(OBJEXT) test_log_OBJECTS = $(am_test_log_OBJECTS) test_log_LDADD = $(LDADD) test_log_DEPENDENCIES = ../src/libyaz.la am_test_log_thread_OBJECTS = test_log_thread.$(OBJEXT) test_log_thread_OBJECTS = $(am_test_log_thread_OBJECTS) test_log_thread_LDADD = $(LDADD) test_log_thread_DEPENDENCIES = ../src/libyaz.la am_test_match_glob_OBJECTS = test_match_glob.$(OBJEXT) test_match_glob_OBJECTS = $(am_test_match_glob_OBJECTS) test_match_glob_LDADD = $(LDADD) test_match_glob_DEPENDENCIES = ../src/libyaz.la am_test_matchstr_OBJECTS = test_matchstr.$(OBJEXT) test_matchstr_OBJECTS = $(am_test_matchstr_OBJECTS) test_matchstr_LDADD = $(LDADD) test_matchstr_DEPENDENCIES = ../src/libyaz.la am_test_mutex_OBJECTS = test_mutex.$(OBJEXT) test_mutex_OBJECTS = $(am_test_mutex_OBJECTS) test_mutex_LDADD = $(LDADD) test_mutex_DEPENDENCIES = ../src/libyaz.la am_test_nmem_OBJECTS = test_nmem.$(OBJEXT) test_nmem_OBJECTS = $(am_test_nmem_OBJECTS) test_nmem_LDADD = $(LDADD) test_nmem_DEPENDENCIES = ../src/libyaz.la am_test_odr_OBJECTS = test_odrcodec.$(OBJEXT) test_odr.$(OBJEXT) test_odr_OBJECTS = $(am_test_odr_OBJECTS) test_odr_LDADD = $(LDADD) test_odr_DEPENDENCIES = ../src/libyaz.la am_test_odrstack_OBJECTS = test_odrstack.$(OBJEXT) test_odrstack_OBJECTS = $(am_test_odrstack_OBJECTS) test_odrstack_LDADD = $(LDADD) test_odrstack_DEPENDENCIES = ../src/libyaz.la am_test_oid_OBJECTS = test_oid.$(OBJEXT) test_oid_OBJECTS = $(am_test_oid_OBJECTS) test_oid_LDADD = $(LDADD) test_oid_DEPENDENCIES = ../src/libyaz.la am_test_options_OBJECTS = test_options.$(OBJEXT) test_options_OBJECTS = $(am_test_options_OBJECTS) test_options_LDADD = $(LDADD) test_options_DEPENDENCIES = ../src/libyaz.la am_test_pquery_OBJECTS = test_pquery.$(OBJEXT) test_pquery_OBJECTS = $(am_test_pquery_OBJECTS) test_pquery_LDADD = $(LDADD) test_pquery_DEPENDENCIES = ../src/libyaz.la am_test_query_charset_OBJECTS = test_query_charset.$(OBJEXT) test_query_charset_OBJECTS = $(am_test_query_charset_OBJECTS) test_query_charset_LDADD = $(LDADD) test_query_charset_DEPENDENCIES = ../src/libyaz.la am_test_record_conv_OBJECTS = test_record_conv.$(OBJEXT) test_record_conv_OBJECTS = $(am_test_record_conv_OBJECTS) test_record_conv_LDADD = $(LDADD) test_record_conv_DEPENDENCIES = ../src/libyaz.la am_test_retrieval_OBJECTS = test_retrieval.$(OBJEXT) test_retrieval_OBJECTS = $(am_test_retrieval_OBJECTS) test_retrieval_LDADD = $(LDADD) test_retrieval_DEPENDENCIES = ../src/libyaz.la am_test_rpn2cql_OBJECTS = test_rpn2cql.$(OBJEXT) test_rpn2cql_OBJECTS = $(am_test_rpn2cql_OBJECTS) test_rpn2cql_LDADD = $(LDADD) test_rpn2cql_DEPENDENCIES = ../src/libyaz.la am_test_rpn2solr_OBJECTS = test_rpn2solr.$(OBJEXT) test_rpn2solr_OBJECTS = $(am_test_rpn2solr_OBJECTS) test_rpn2solr_LDADD = $(LDADD) test_rpn2solr_DEPENDENCIES = ../src/libyaz.la am_test_shared_ptr_OBJECTS = test_shared_ptr.$(OBJEXT) test_shared_ptr_OBJECTS = $(am_test_shared_ptr_OBJECTS) test_shared_ptr_LDADD = $(LDADD) test_shared_ptr_DEPENDENCIES = ../src/libyaz.la am_test_soap1_OBJECTS = test_soap1.$(OBJEXT) test_soap1_OBJECTS = $(am_test_soap1_OBJECTS) test_soap1_LDADD = $(LDADD) test_soap1_DEPENDENCIES = ../src/libyaz.la am_test_soap2_OBJECTS = test_soap2.$(OBJEXT) test_soap2_OBJECTS = $(am_test_soap2_OBJECTS) test_soap2_LDADD = $(LDADD) test_soap2_DEPENDENCIES = ../src/libyaz.la am_test_solr_OBJECTS = test_solr.$(OBJEXT) test_solr_OBJECTS = $(am_test_solr_OBJECTS) test_solr_LDADD = $(LDADD) test_solr_DEPENDENCIES = ../src/libyaz.la am_test_sortspec_OBJECTS = test_sortspec.$(OBJEXT) test_sortspec_OBJECTS = $(am_test_sortspec_OBJECTS) test_sortspec_LDADD = $(LDADD) test_sortspec_DEPENDENCIES = ../src/libyaz.la am_test_timing_OBJECTS = test_timing.$(OBJEXT) test_timing_OBJECTS = $(am_test_timing_OBJECTS) test_timing_LDADD = $(LDADD) test_timing_DEPENDENCIES = ../src/libyaz.la am_test_tpath_OBJECTS = test_tpath.$(OBJEXT) test_tpath_OBJECTS = $(am_test_tpath_OBJECTS) test_tpath_LDADD = $(LDADD) test_tpath_DEPENDENCIES = ../src/libyaz.la am_test_wrbuf_OBJECTS = test_wrbuf.$(OBJEXT) test_wrbuf_OBJECTS = $(am_test_wrbuf_OBJECTS) test_wrbuf_LDADD = $(LDADD) test_wrbuf_DEPENDENCIES = ../src/libyaz.la am_test_xmalloc_OBJECTS = test_xmalloc.$(OBJEXT) test_xmalloc_OBJECTS = $(am_test_xmalloc_OBJECTS) test_xmalloc_LDADD = $(LDADD) test_xmalloc_DEPENDENCIES = ../src/libyaz.la am_test_xml_include_OBJECTS = test_xml_include.$(OBJEXT) test_xml_include_OBJECTS = $(am_test_xml_include_OBJECTS) test_xml_include_LDADD = $(LDADD) test_xml_include_DEPENDENCIES = ../src/libyaz.la am_test_xmlquery_OBJECTS = test_xmlquery.$(OBJEXT) test_xmlquery_OBJECTS = $(am_test_xmlquery_OBJECTS) test_xmlquery_LDADD = $(LDADD) test_xmlquery_DEPENDENCIES = ../src/libyaz.la am_test_zgdu_OBJECTS = test_zgdu.$(OBJEXT) test_zgdu_OBJECTS = $(am_test_zgdu_OBJECTS) test_zgdu_LDADD = $(LDADD) test_zgdu_DEPENDENCIES = ../src/libyaz.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(test_ccl_SOURCES) $(test_comstack_SOURCES) \ $(test_cql2ccl_SOURCES) $(test_embed_record_SOURCES) \ $(test_file_glob_SOURCES) $(test_filepath_SOURCES) \ $(test_iconv_SOURCES) $(test_icu_SOURCES) $(test_json_SOURCES) \ $(test_libstemmer_SOURCES) $(test_log_SOURCES) \ $(test_log_thread_SOURCES) $(test_match_glob_SOURCES) \ $(test_matchstr_SOURCES) $(test_mutex_SOURCES) \ $(test_nmem_SOURCES) $(test_odr_SOURCES) \ $(test_odrstack_SOURCES) $(test_oid_SOURCES) \ $(test_options_SOURCES) $(test_pquery_SOURCES) \ $(test_query_charset_SOURCES) $(test_record_conv_SOURCES) \ $(test_retrieval_SOURCES) $(test_rpn2cql_SOURCES) \ $(test_rpn2solr_SOURCES) $(test_shared_ptr_SOURCES) \ $(test_soap1_SOURCES) $(test_soap2_SOURCES) \ $(test_solr_SOURCES) $(test_sortspec_SOURCES) \ $(test_timing_SOURCES) $(test_tpath_SOURCES) \ $(test_wrbuf_SOURCES) $(test_xmalloc_SOURCES) \ $(test_xml_include_SOURCES) $(test_xmlquery_SOURCES) \ $(test_zgdu_SOURCES) DIST_SOURCES = $(test_ccl_SOURCES) $(test_comstack_SOURCES) \ $(test_cql2ccl_SOURCES) $(test_embed_record_SOURCES) \ $(test_file_glob_SOURCES) $(test_filepath_SOURCES) \ $(test_iconv_SOURCES) $(test_icu_SOURCES) $(test_json_SOURCES) \ $(test_libstemmer_SOURCES) $(test_log_SOURCES) \ $(test_log_thread_SOURCES) $(test_match_glob_SOURCES) \ $(test_matchstr_SOURCES) $(test_mutex_SOURCES) \ $(test_nmem_SOURCES) $(test_odr_SOURCES) \ $(test_odrstack_SOURCES) $(test_oid_SOURCES) \ $(test_options_SOURCES) $(test_pquery_SOURCES) \ $(test_query_charset_SOURCES) $(test_record_conv_SOURCES) \ $(test_retrieval_SOURCES) $(test_rpn2cql_SOURCES) \ $(test_rpn2solr_SOURCES) $(test_shared_ptr_SOURCES) \ $(test_soap1_SOURCES) $(test_soap2_SOURCES) \ $(test_solr_SOURCES) $(test_sortspec_SOURCES) \ $(test_timing_SOURCES) $(test_tpath_SOURCES) \ $(test_wrbuf_SOURCES) $(test_xmalloc_SOURCES) \ $(test_xml_include_SOURCES) $(test_xmlquery_SOURCES) \ $(test_zgdu_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \ $(top_srcdir)/config/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HIREDIS_LIBS = @HIREDIS_LIBS@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MEMCACHED_LIBS = @MEMCACHED_LIBS@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ check_SCRIPTS = test_marc.sh test_marccol.sh test_cql2xcql.sh \ test_cql2pqf.sh test_icu.sh TESTS = $(check_PROGRAMS) $(check_SCRIPTS) EXTRA_DIST = tstodr.asn test_odrcodec.c test_odrcodec.h cql2xcqlsample \ cql2pqf-order.txt cql2pqfsample \ $(check_SCRIPTS) \ marccol1.u8.marc marccol1.u8.1.lst marccol1.u8.2.lst \ marccol2.u8.marc marccol2.u8.1.lst marccol2.u8.2.lst \ marccol3.u8.marc marccol3.u8.1.lst marccol3.u8.2.lst \ marccol4.u8.marc marccol4.u8.1.lst marccol4.u8.2.lst \ marccol5.u8.marc marccol5.u8.1.lst marccol5.u8.2.lst \ test_icu.0.xml test_icu.0.input test_icu.0.output \ test_icu.1.xml test_icu.1.input test_icu.1.output \ test_icu.2.xml test_icu.2.input test_icu.2.output \ test_icu.3.xml test_icu.3.input test_icu.3.output \ test_icu.4.xml test_icu.4.input test_icu.4.output \ test_record_conv.xsl test_xml_include.xml YAZCOMP = ../util/yaz-asncomp YAZCOMPLINE = $(YAZCOMP) -d z.tcl -i yaz -I../include $(YCFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/include $(XML2_CFLAGS) $(ICU_CPPFLAGS) LDADD = ../src/libyaz.la test_icu_LDADD = ../src/libyaz_icu.la ../src/libyaz.la $(ICU_LIBS) test_libstemmer_LDADD = ../src/libyaz_icu.la ../src/libyaz.la $(ICU_LIBS) CONFIG_CLEAN_FILES = *.log test_cql2ccl_SOURCES = test_cql2ccl.c test_xmalloc_SOURCES = test_xmalloc.c test_iconv_SOURCES = test_iconv.c test_nmem_SOURCES = test_nmem.c test_matchstr_SOURCES = test_matchstr.c test_wrbuf_SOURCES = test_wrbuf.c test_odr_SOURCES = test_odrcodec.c test_odrcodec.h test_odr.c test_odrstack_SOURCES = test_odrstack.c test_ccl_SOURCES = test_ccl.c test_log_SOURCES = test_log.c test_mutex_SOURCES = test_mutex.c test_soap1_SOURCES = test_soap1.c test_soap2_SOURCES = test_soap2.c test_solr_SOURCES = test_solr.c test_sortspec_SOURCES = test_sortspec.c test_log_thread_SOURCES = test_log_thread.c test_xmlquery_SOURCES = test_xmlquery.c test_options_SOURCES = test_options.c test_pquery_SOURCES = test_pquery.c test_comstack_SOURCES = test_comstack.c test_filepath_SOURCES = test_filepath.c test_oid_SOURCES = test_oid.c test_record_conv_SOURCES = test_record_conv.c test_retrieval_SOURCES = test_retrieval.c test_tpath_SOURCES = test_tpath.c test_timing_SOURCES = test_timing.c test_query_charset_SOURCES = test_query_charset.c test_icu_SOURCES = test_icu.c test_match_glob_SOURCES = test_match_glob.c test_rpn2cql_SOURCES = test_rpn2cql.c test_rpn2solr_SOURCES = test_rpn2solr.c test_json_SOURCES = test_json.c test_xml_include_SOURCES = test_xml_include.c test_file_glob_SOURCES = test_file_glob.c test_shared_ptr_SOURCES = test_shared_ptr.c test_libstemmer_SOURCES = test_libstemmer.c test_embed_record_SOURCES = test_embed_record.c test_zgdu_SOURCES = test_zgdu.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list test_ccl$(EXEEXT): $(test_ccl_OBJECTS) $(test_ccl_DEPENDENCIES) $(EXTRA_test_ccl_DEPENDENCIES) @rm -f test_ccl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ccl_OBJECTS) $(test_ccl_LDADD) $(LIBS) test_comstack$(EXEEXT): $(test_comstack_OBJECTS) $(test_comstack_DEPENDENCIES) $(EXTRA_test_comstack_DEPENDENCIES) @rm -f test_comstack$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_comstack_OBJECTS) $(test_comstack_LDADD) $(LIBS) test_cql2ccl$(EXEEXT): $(test_cql2ccl_OBJECTS) $(test_cql2ccl_DEPENDENCIES) $(EXTRA_test_cql2ccl_DEPENDENCIES) @rm -f test_cql2ccl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_cql2ccl_OBJECTS) $(test_cql2ccl_LDADD) $(LIBS) test_embed_record$(EXEEXT): $(test_embed_record_OBJECTS) $(test_embed_record_DEPENDENCIES) $(EXTRA_test_embed_record_DEPENDENCIES) @rm -f test_embed_record$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_embed_record_OBJECTS) $(test_embed_record_LDADD) $(LIBS) test_file_glob$(EXEEXT): $(test_file_glob_OBJECTS) $(test_file_glob_DEPENDENCIES) $(EXTRA_test_file_glob_DEPENDENCIES) @rm -f test_file_glob$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_file_glob_OBJECTS) $(test_file_glob_LDADD) $(LIBS) test_filepath$(EXEEXT): $(test_filepath_OBJECTS) $(test_filepath_DEPENDENCIES) $(EXTRA_test_filepath_DEPENDENCIES) @rm -f test_filepath$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_filepath_OBJECTS) $(test_filepath_LDADD) $(LIBS) test_iconv$(EXEEXT): $(test_iconv_OBJECTS) $(test_iconv_DEPENDENCIES) $(EXTRA_test_iconv_DEPENDENCIES) @rm -f test_iconv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_iconv_OBJECTS) $(test_iconv_LDADD) $(LIBS) test_icu$(EXEEXT): $(test_icu_OBJECTS) $(test_icu_DEPENDENCIES) $(EXTRA_test_icu_DEPENDENCIES) @rm -f test_icu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_icu_OBJECTS) $(test_icu_LDADD) $(LIBS) test_json$(EXEEXT): $(test_json_OBJECTS) $(test_json_DEPENDENCIES) $(EXTRA_test_json_DEPENDENCIES) @rm -f test_json$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_json_OBJECTS) $(test_json_LDADD) $(LIBS) test_libstemmer$(EXEEXT): $(test_libstemmer_OBJECTS) $(test_libstemmer_DEPENDENCIES) $(EXTRA_test_libstemmer_DEPENDENCIES) @rm -f test_libstemmer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_libstemmer_OBJECTS) $(test_libstemmer_LDADD) $(LIBS) test_log$(EXEEXT): $(test_log_OBJECTS) $(test_log_DEPENDENCIES) $(EXTRA_test_log_DEPENDENCIES) @rm -f test_log$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_log_OBJECTS) $(test_log_LDADD) $(LIBS) test_log_thread$(EXEEXT): $(test_log_thread_OBJECTS) $(test_log_thread_DEPENDENCIES) $(EXTRA_test_log_thread_DEPENDENCIES) @rm -f test_log_thread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_log_thread_OBJECTS) $(test_log_thread_LDADD) $(LIBS) test_match_glob$(EXEEXT): $(test_match_glob_OBJECTS) $(test_match_glob_DEPENDENCIES) $(EXTRA_test_match_glob_DEPENDENCIES) @rm -f test_match_glob$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_match_glob_OBJECTS) $(test_match_glob_LDADD) $(LIBS) test_matchstr$(EXEEXT): $(test_matchstr_OBJECTS) $(test_matchstr_DEPENDENCIES) $(EXTRA_test_matchstr_DEPENDENCIES) @rm -f test_matchstr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_matchstr_OBJECTS) $(test_matchstr_LDADD) $(LIBS) test_mutex$(EXEEXT): $(test_mutex_OBJECTS) $(test_mutex_DEPENDENCIES) $(EXTRA_test_mutex_DEPENDENCIES) @rm -f test_mutex$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mutex_OBJECTS) $(test_mutex_LDADD) $(LIBS) test_nmem$(EXEEXT): $(test_nmem_OBJECTS) $(test_nmem_DEPENDENCIES) $(EXTRA_test_nmem_DEPENDENCIES) @rm -f test_nmem$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_nmem_OBJECTS) $(test_nmem_LDADD) $(LIBS) test_odr$(EXEEXT): $(test_odr_OBJECTS) $(test_odr_DEPENDENCIES) $(EXTRA_test_odr_DEPENDENCIES) @rm -f test_odr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_odr_OBJECTS) $(test_odr_LDADD) $(LIBS) test_odrstack$(EXEEXT): $(test_odrstack_OBJECTS) $(test_odrstack_DEPENDENCIES) $(EXTRA_test_odrstack_DEPENDENCIES) @rm -f test_odrstack$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_odrstack_OBJECTS) $(test_odrstack_LDADD) $(LIBS) test_oid$(EXEEXT): $(test_oid_OBJECTS) $(test_oid_DEPENDENCIES) $(EXTRA_test_oid_DEPENDENCIES) @rm -f test_oid$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_oid_OBJECTS) $(test_oid_LDADD) $(LIBS) test_options$(EXEEXT): $(test_options_OBJECTS) $(test_options_DEPENDENCIES) $(EXTRA_test_options_DEPENDENCIES) @rm -f test_options$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_options_OBJECTS) $(test_options_LDADD) $(LIBS) test_pquery$(EXEEXT): $(test_pquery_OBJECTS) $(test_pquery_DEPENDENCIES) $(EXTRA_test_pquery_DEPENDENCIES) @rm -f test_pquery$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pquery_OBJECTS) $(test_pquery_LDADD) $(LIBS) test_query_charset$(EXEEXT): $(test_query_charset_OBJECTS) $(test_query_charset_DEPENDENCIES) $(EXTRA_test_query_charset_DEPENDENCIES) @rm -f test_query_charset$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_query_charset_OBJECTS) $(test_query_charset_LDADD) $(LIBS) test_record_conv$(EXEEXT): $(test_record_conv_OBJECTS) $(test_record_conv_DEPENDENCIES) $(EXTRA_test_record_conv_DEPENDENCIES) @rm -f test_record_conv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_record_conv_OBJECTS) $(test_record_conv_LDADD) $(LIBS) test_retrieval$(EXEEXT): $(test_retrieval_OBJECTS) $(test_retrieval_DEPENDENCIES) $(EXTRA_test_retrieval_DEPENDENCIES) @rm -f test_retrieval$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_retrieval_OBJECTS) $(test_retrieval_LDADD) $(LIBS) test_rpn2cql$(EXEEXT): $(test_rpn2cql_OBJECTS) $(test_rpn2cql_DEPENDENCIES) $(EXTRA_test_rpn2cql_DEPENDENCIES) @rm -f test_rpn2cql$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_rpn2cql_OBJECTS) $(test_rpn2cql_LDADD) $(LIBS) test_rpn2solr$(EXEEXT): $(test_rpn2solr_OBJECTS) $(test_rpn2solr_DEPENDENCIES) $(EXTRA_test_rpn2solr_DEPENDENCIES) @rm -f test_rpn2solr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_rpn2solr_OBJECTS) $(test_rpn2solr_LDADD) $(LIBS) test_shared_ptr$(EXEEXT): $(test_shared_ptr_OBJECTS) $(test_shared_ptr_DEPENDENCIES) $(EXTRA_test_shared_ptr_DEPENDENCIES) @rm -f test_shared_ptr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_shared_ptr_OBJECTS) $(test_shared_ptr_LDADD) $(LIBS) test_soap1$(EXEEXT): $(test_soap1_OBJECTS) $(test_soap1_DEPENDENCIES) $(EXTRA_test_soap1_DEPENDENCIES) @rm -f test_soap1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_soap1_OBJECTS) $(test_soap1_LDADD) $(LIBS) test_soap2$(EXEEXT): $(test_soap2_OBJECTS) $(test_soap2_DEPENDENCIES) $(EXTRA_test_soap2_DEPENDENCIES) @rm -f test_soap2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_soap2_OBJECTS) $(test_soap2_LDADD) $(LIBS) test_solr$(EXEEXT): $(test_solr_OBJECTS) $(test_solr_DEPENDENCIES) $(EXTRA_test_solr_DEPENDENCIES) @rm -f test_solr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_solr_OBJECTS) $(test_solr_LDADD) $(LIBS) test_sortspec$(EXEEXT): $(test_sortspec_OBJECTS) $(test_sortspec_DEPENDENCIES) $(EXTRA_test_sortspec_DEPENDENCIES) @rm -f test_sortspec$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sortspec_OBJECTS) $(test_sortspec_LDADD) $(LIBS) test_timing$(EXEEXT): $(test_timing_OBJECTS) $(test_timing_DEPENDENCIES) $(EXTRA_test_timing_DEPENDENCIES) @rm -f test_timing$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_timing_OBJECTS) $(test_timing_LDADD) $(LIBS) test_tpath$(EXEEXT): $(test_tpath_OBJECTS) $(test_tpath_DEPENDENCIES) $(EXTRA_test_tpath_DEPENDENCIES) @rm -f test_tpath$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_tpath_OBJECTS) $(test_tpath_LDADD) $(LIBS) test_wrbuf$(EXEEXT): $(test_wrbuf_OBJECTS) $(test_wrbuf_DEPENDENCIES) $(EXTRA_test_wrbuf_DEPENDENCIES) @rm -f test_wrbuf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wrbuf_OBJECTS) $(test_wrbuf_LDADD) $(LIBS) test_xmalloc$(EXEEXT): $(test_xmalloc_OBJECTS) $(test_xmalloc_DEPENDENCIES) $(EXTRA_test_xmalloc_DEPENDENCIES) @rm -f test_xmalloc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_xmalloc_OBJECTS) $(test_xmalloc_LDADD) $(LIBS) test_xml_include$(EXEEXT): $(test_xml_include_OBJECTS) $(test_xml_include_DEPENDENCIES) $(EXTRA_test_xml_include_DEPENDENCIES) @rm -f test_xml_include$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_xml_include_OBJECTS) $(test_xml_include_LDADD) $(LIBS) test_xmlquery$(EXEEXT): $(test_xmlquery_OBJECTS) $(test_xmlquery_DEPENDENCIES) $(EXTRA_test_xmlquery_DEPENDENCIES) @rm -f test_xmlquery$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_xmlquery_OBJECTS) $(test_xmlquery_LDADD) $(LIBS) test_zgdu$(EXEEXT): $(test_zgdu_OBJECTS) $(test_zgdu_DEPENDENCIES) $(EXTRA_test_zgdu_DEPENDENCIES) @rm -f test_zgdu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_zgdu_OBJECTS) $(test_zgdu_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ccl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_comstack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cql2ccl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_embed_record.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_file_glob.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_filepath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_iconv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_icu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_json.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_libstemmer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_log_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_match_glob.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_matchstr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mutex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_nmem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_odr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_odrcodec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_odrstack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_oid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_pquery.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_query_charset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_record_conv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_retrieval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rpn2cql.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rpn2solr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_shared_ptr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_soap1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_soap2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_solr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sortspec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_timing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tpath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_wrbuf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_xmalloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_xml_include.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_xmlquery.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_zgdu.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test_ccl.log: test_ccl$(EXEEXT) @p='test_ccl$(EXEEXT)'; \ b='test_ccl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_comstack.log: test_comstack$(EXEEXT) @p='test_comstack$(EXEEXT)'; \ b='test_comstack'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_cql2ccl.log: test_cql2ccl$(EXEEXT) @p='test_cql2ccl$(EXEEXT)'; \ b='test_cql2ccl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_embed_record.log: test_embed_record$(EXEEXT) @p='test_embed_record$(EXEEXT)'; \ b='test_embed_record'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_filepath.log: test_filepath$(EXEEXT) @p='test_filepath$(EXEEXT)'; \ b='test_filepath'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_file_glob.log: test_file_glob$(EXEEXT) @p='test_file_glob$(EXEEXT)'; \ b='test_file_glob'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_iconv.log: test_iconv$(EXEEXT) @p='test_iconv$(EXEEXT)'; \ b='test_iconv'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_icu.log: test_icu$(EXEEXT) @p='test_icu$(EXEEXT)'; \ b='test_icu'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_json.log: test_json$(EXEEXT) @p='test_json$(EXEEXT)'; \ b='test_json'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_libstemmer.log: test_libstemmer$(EXEEXT) @p='test_libstemmer$(EXEEXT)'; \ b='test_libstemmer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_log.log: test_log$(EXEEXT) @p='test_log$(EXEEXT)'; \ b='test_log'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_log_thread.log: test_log_thread$(EXEEXT) @p='test_log_thread$(EXEEXT)'; \ b='test_log_thread'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_match_glob.log: test_match_glob$(EXEEXT) @p='test_match_glob$(EXEEXT)'; \ b='test_match_glob'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_matchstr.log: test_matchstr$(EXEEXT) @p='test_matchstr$(EXEEXT)'; \ b='test_matchstr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_mutex.log: test_mutex$(EXEEXT) @p='test_mutex$(EXEEXT)'; \ b='test_mutex'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_nmem.log: test_nmem$(EXEEXT) @p='test_nmem$(EXEEXT)'; \ b='test_nmem'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_odr.log: test_odr$(EXEEXT) @p='test_odr$(EXEEXT)'; \ b='test_odr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_odrstack.log: test_odrstack$(EXEEXT) @p='test_odrstack$(EXEEXT)'; \ b='test_odrstack'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_oid.log: test_oid$(EXEEXT) @p='test_oid$(EXEEXT)'; \ b='test_oid'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_options.log: test_options$(EXEEXT) @p='test_options$(EXEEXT)'; \ b='test_options'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_pquery.log: test_pquery$(EXEEXT) @p='test_pquery$(EXEEXT)'; \ b='test_pquery'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_query_charset.log: test_query_charset$(EXEEXT) @p='test_query_charset$(EXEEXT)'; \ b='test_query_charset'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_record_conv.log: test_record_conv$(EXEEXT) @p='test_record_conv$(EXEEXT)'; \ b='test_record_conv'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_rpn2cql.log: test_rpn2cql$(EXEEXT) @p='test_rpn2cql$(EXEEXT)'; \ b='test_rpn2cql'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_rpn2solr.log: test_rpn2solr$(EXEEXT) @p='test_rpn2solr$(EXEEXT)'; \ b='test_rpn2solr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_retrieval.log: test_retrieval$(EXEEXT) @p='test_retrieval$(EXEEXT)'; \ b='test_retrieval'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_shared_ptr.log: test_shared_ptr$(EXEEXT) @p='test_shared_ptr$(EXEEXT)'; \ b='test_shared_ptr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_soap1.log: test_soap1$(EXEEXT) @p='test_soap1$(EXEEXT)'; \ b='test_soap1'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_soap2.log: test_soap2$(EXEEXT) @p='test_soap2$(EXEEXT)'; \ b='test_soap2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_solr.log: test_solr$(EXEEXT) @p='test_solr$(EXEEXT)'; \ b='test_solr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_sortspec.log: test_sortspec$(EXEEXT) @p='test_sortspec$(EXEEXT)'; \ b='test_sortspec'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_timing.log: test_timing$(EXEEXT) @p='test_timing$(EXEEXT)'; \ b='test_timing'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_tpath.log: test_tpath$(EXEEXT) @p='test_tpath$(EXEEXT)'; \ b='test_tpath'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_wrbuf.log: test_wrbuf$(EXEEXT) @p='test_wrbuf$(EXEEXT)'; \ b='test_wrbuf'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_xmalloc.log: test_xmalloc$(EXEEXT) @p='test_xmalloc$(EXEEXT)'; \ b='test_xmalloc'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_xml_include.log: test_xml_include$(EXEEXT) @p='test_xml_include$(EXEEXT)'; \ b='test_xml_include'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_xmlquery.log: test_xmlquery$(EXEEXT) @p='test_xmlquery$(EXEEXT)'; \ b='test_xmlquery'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_zgdu.log: test_zgdu$(EXEEXT) @p='test_zgdu$(EXEEXT)'; \ b='test_zgdu'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_marc.sh.log: test_marc.sh @p='test_marc.sh'; \ b='test_marc.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_marccol.sh.log: test_marccol.sh @p='test_marccol.sh'; \ b='test_marccol.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_cql2xcql.sh.log: test_cql2xcql.sh @p='test_cql2xcql.sh'; \ b='test_cql2xcql.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_cql2pqf.sh.log: test_cql2pqf.sh @p='test_cql2pqf.sh'; \ b='test_cql2pqf.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_icu.sh.log: test_icu.sh @p='test_icu.sh'; \ b='test_icu.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am dist-hook distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile dist-hook: mkdir -p $(distdir)/cql cp $(srcdir)/cql/*.err $(srcdir)/cql/*.out $(distdir)/cql mkdir -p $(distdir)/cql2pqf cp $(srcdir)/cql2pqf/*.err $(srcdir)/cql2pqf/*.out $(distdir)/cql2pqf cp $(srcdir)/marc?.chr $(distdir) cp $(srcdir)/marc?.marc $(distdir) cp $(srcdir)/marc?.xml $(distdir) cp $(srcdir)/marc?.json $(distdir) cp $(srcdir)/marc?.json.marc $(distdir) cp $(srcdir)/*.xml.marc $(distdir) cp $(srcdir)/xml2marc?.xml $(distdir) cp $(srcdir)/tmarc?.xml $(distdir) cp $(srcdir)/xml2tmarc?.xml $(distdir) # Rule for generating codecs for our small ASN.1 spec test_odrcodec.c test_odrcodec.h: tstodr.asn $(YAZCOMP) cd $(srcdir); $(YAZCOMP) tstodr.asn # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-5.28.0/test/test_filepath.c0000644000175000017500000000162713265142510013315 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include void tst(void) { char fullpath[1024]; YAZ_CHECK(yaz_filepath_resolve("test_filepath", ".", 0, fullpath)); YAZ_CHECK(strcmp(fullpath, "./test_filepath") == 0); YAZ_CHECK(!yaz_filepath_resolve("test_filepath1", ".", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_filepath", "bogus", 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_filepath", "bogus:.", 0, fullpath)); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/marccol5.u8.marc0000644000175000017500000005140313250277530013224 0000000000000001385cam a2200301Ka 4500001001300000003000600013005001700019008004100036040003000077020001500107020001800122035002000140041001100160092001400171090002200185049000900207245017900216260007900395300002200474500008300496546002500579650004500604650004500649700002300694880022100717880013300938994001201071ocm57665435 OCoLC20080328102918.0050215s2004 ii d 000 0 eng d aACNcACNdOCLCQdIXAdOCL a8176500623 a9788176500623 a(OCoLC)576654350 abeneng a491.44321 aPK1687b.E65 2004 aLNNA006880-01aEnglish-Bengali Bengali-English combined dictionary =bImÌ£raÌ„jiÌ„ - BaÌ„mÌ£laÌ„ BaÌ„mÌ£laÌ„ - ImÌ£raÌ„jiÌ„ samshukuta diksaÌnariÌ„ /ccompiled by Debasis Adhikary. aNew Delhi :bWorld of Learning :bDistributed by Star Publications,c2004. a1518 p. ;c23 cm. a"More than 90,000 total words from English to Bengali and Bengali to English." aBengali and English. 0aEnglish languagevDictionariesxBengali. 0aBengali languagevDictionariesxEnglish.1 aAdhikary, Debasis.006245-01aEnglish-Bengali Bengali-English combined dictionary =bইংরাজী - বাংলা বাংলা - ইংরাজী সংযà§à¦•à§à¦¤ ডিকà§à¦¶à¦¨à¦°à§€ /ccompiled by Debasis Adhikary.316246-00aইংরাজী - বাংলা বাংলা - ইংরাজী সংযà§à¦•à§à¦¤ ডিকà§à¦¶à¦¨à¦°à§€ aC0bLNN02873nam a22005053i 4500001001300000003000600013005001700019008004100036040001300077035002000090041001300110050001600123049000900139100002400148240002500172245020900197246010100406250003100507260016100538300001100699440006000710546003500770500006200805500003300867504004100900650003200941650004900973700005201022700004801074700004401122740003901166740003501205880003201240880004601272880033401318880003801652880026101690880009601951880007302047880007102120880006102191880005302252880005002305994001202355ocm86174229 OCoLC20080328102918.0070326s1977 ii b 000 0 san d aSTFcSTF a(OCoLC)861742290 asanahin04aPK511b1977 aLNNA0 6880-01aPaÌ„nÌ£ini.10aAsÌ£tÌ£aÌ„dhyaÌ„yiÌ„106880-02aAsÌ£tÌ£aÌ„dhyaÌ„yiÌ„suÌ„trapaÌ„tÌ£hahÌ£ :bPaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„-liṅgaÌ„nusÌaÌ„sanasahitasÌca /cMaharsÌ£ipaÌ„nÌ£inipranÌ£iÌ„tahÌ£ ; upoddhaÌ„talekhakahÌ£ SÌriÌ„naÌ„raÌ„yanÌ£a MisÌrahÌ£.15aAsÌ£tÌ£aÌ„dhyaÌ„yiÌ„suÌ„trapaÌ„tÌ£ha :bwith PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„ and LiṅgaÌ„nusÌaÌ„sana 6880-03a1. samÌ£skaranÌ£a. 6880-04aVaÌ„raÌ„nÌ£asiÌ„ ;aDilliÌ„ :bCaukhambhaÌ„ OriyantÌ£aÌ„liyaÌ„ ;aVaÌ„raÌ„nÌ£asiÌ„ :banya praÌ„ptisthaÌ„na, CaukhambhaÌ„ VisÌvabhaÌ„ratiÌ„,c1977. a100 p. 06880-05aGokuladaÌ„sa SamÌ£skrÌ¥ta granthamaÌ„laÌ„ ;v29 aIn Sanskrit; introd. in Hindi. a"SampaÌ„dakahÌ£ SÌriÌ„naÌ„raÌ„yanÌ£a MisÌrahÌ£"--Cover. aAdded title page in English. aIncludes bibliographical references. 0aSanskrit languagexGrammar. 0aSanskrit languagexAccents and accentuation.026880-06aPaÌ„nÌ£ini.tPaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„.026880-07aPaÌ„nÌ£ini.tLiṅgaÌ„nusÌaÌ„sana.1 6880-08aMisÌra, SÌriÌ„naÌ„raÌ„yanÌ£a.026880-09aPaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„.026880-10aLiṅgaÌ„nusÌaÌ„sana.0 6100-01aपाणिनी.106240-00aअषà¥à¤Ÿà¤¾à¤§à¥à¤¯à¤¾à¤¯à¥€106245-02aअषà¥à¤Ÿà¤¾à¤§à¥à¤¯à¤¾à¤¯à¥€à¤¸à¥‚तà¥à¤°à¤ªà¤¾à¤ à¤ƒ :bपाणिणीयशिकà¥à¤·à¤¾-लिङà¥à¤—ानà¥à¤¶à¤¾à¤¸à¤¨à¤¸à¤¹à¤¿à¤¤à¤¶à¥à¤°à¥à¤š /cमहरà¥à¤·à¤¿à¤ªà¤¾à¤£à¤¿à¤¨à¤¿à¤ªà¥à¤°à¤£à¥€à¤¤à¤ƒ ; उपोदà¥à¤˜à¤¾à¤¤à¤²à¥‡à¤–कः शà¥à¤°à¥€à¤¨à¤¾à¤°à¤¾à¤¯à¤£ मिशà¥à¤°à¤ƒ. 6250-03a1. संसà¥à¤•रण. 6260-04aवाराणसी ;aदिलà¥à¤²à¥€ :bचौखमà¥à¤­à¤¾ ओरियनà¥à¤Ÿà¤¾à¤²à¤¿à¤¯à¤¾ ;aवाराणसी :bअनà¥à¤¯ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤¿à¤¸à¥à¤¥à¤¾à¤¨, चौखमà¥à¤­à¤¾ विशà¥à¤µà¤­à¤¾à¤°à¤¤à¥€,c1977. 06440-05aगोकà¥à¤²à¤¦à¤¾à¤¸ संसà¥à¤•ृत गà¥à¤°à¤¨à¥à¤¥à¤®à¤¾à¤²à¤¾ ;v29026700-06aपाणिनी.tपाणिणीयशिकà¥à¤·à¤¾026700-07aपाणिनी.tलिङà¥à¤—ानà¥à¤¶à¤¾à¤¸à¤¨.1 6700-08aमिशà¥à¤°, शà¥à¤°à¥€à¤¨à¤¾à¤°à¤¾à¤¯à¤£.026740-09aपाणिणीयशिकà¥à¤·à¤¾.026740-10aलिङà¥à¤—ानà¥à¤¶à¤¾à¤¸à¤¨. aC0bLNN02242cam a2200433Ia 4500001001300000003000600013005001700019008004100036040003000077020002500107020001800132035002000150041001600170050002000186082001900206049000900225100002200234240004300256245013700299250001200436260007200448300004200520500004200562500007700604500007700681546003100758500002900789600002200818650004900840650004100889740004400930740002800974880006501002880017001067880031601237880013301553880011001686994001201796ocm44944167 OCoLC20080328102918.0000906s2000 ilua 000 0 tam d aOCOcOCOdOCLdOCLCQdTEF a0967621208 :c$24.95 a9780967621203 a(OCoLC)449441671 atamenghtam 4aPL4758.9.T5bT504a894.811bT597t aLNNA0 aTiruvalÌ£lÌ£uvar.106880-01aThirukku ral.lTamil & English106880-02aThirukkural :bThamizh Marai = Tirukkural : the Holy Scripture /c[by Tiruvalluvar ; English translation by P.S. Sundaram.]. a1st ed. aWoodridge, Ill. :bInternational Tamil Language Foundation,cc2000. a1813 p. :bill. (some col.) ;c20 cm. aTamil text, with English translation. a"An edition of this translation was published by Penguin Books in 1991." aSection 2 and section 3, English translation from Tamil by R. Natarajan. aText in Tamil and English. aNon-Latin script record.00aTiruvalÌ£lÌ£uvar. 0aTamil literaturevTranslations into English. 0aTamil language materialsxBilingual.02aHandbook of Tamil culture and heritage.02aTamils guide to future.106240-01aதிரூகà¯à®•௠றளà¯.lTamil & English106245-02aதிரூகà¯à®•à¯à®±à®³à¯ :bதமிழ௠மறை = Tirukkural : the Holy Scripture /c[by Tiruvalluvar ; English translation by P.S. Sundaram.]0 6505-00aSection 1: திரூகà¯à®•à¯à®±à®³à¯ : Tirukkural -- Section 2: தறிழà¯à®ªà¯ பணà¯à®ªà®¾à®Ÿà¯à®Ÿà¯‚க௠கையேடூ : The handbook of Tamil culture and heritage -- Section 3: தமிழின எதிரà¯à®•ால வழிகாடà¯à®Ÿà®¿ : Tamils guide to future.026740-00aதமிழà¯à®ªà¯ பணà¯à®ªà®¾à®Ÿà¯à®Ÿà¯‚க௠கையேடூ : The handbook of Tamil culture and heritage.026740-00aதமிழின எதிரà¯à®•ால வழிகாடà¯à®Ÿà®¿ : Tamils guide to future. aC0bLNN01025cam a2200301Ia 4500001001300000003000600013005001700019008004100036040002300077020001500100020001800115035002000133090002600153049000900179100002600188245005000214250003300264260006200297300002100359500001100380546001300391655002900404880003800433880008400471880005500555880010100610994001200711ocm62425106 OCoLC20080328102918.0051203s2002 th 000 f thaod aTEFcTEFdLNQdOCL a9749204808 a9789749204801 a(OCoLC)62425106 aPL4209.D837bP57 2002 aLNNA0 6880-01aDuÌ„angtawan.106880-02aPhracÌŒhan sǣnkon /cDuÌ„angtawan. 6880-03aPhim khrang thiÌ„ 3. 6880-04aKrung TheÌ„p :bPhimkham Samnakphim,c2545 [2002] a154 p. ;c21 cm. aNovel. aIn Thai. 7aHumorous fiction.2gsafd0 6100-01aดวงตะวัน.106245-02aพระจันทร์à¹à¸ªà¸™à¸à¸¥ /cดวงตะวัน. 6250-03aพิมพ์ครั้งที่ 3. 6260-04aà¸à¸£à¸¸à¸‡à¹€à¸—พฯ :bพิมพ์คำ สานัà¸à¸žà¸´à¸¡à¸žà¹Œ,c2545. aC0bLNN02684cam a2200409 a 45000010009000000050017000090080041000260350018000679060045000850100017001300400029001470430021001760500021001971000056002182450184002742600039004583000029004974400063005265000203005895040053007926000056008456100047009016500023009486510042009716510038010137000058010518520042011098800079011518800288012308800055015188800094015738800320016678800079019878800101020668800091021679850016022581487678220071121181842.0990326s1997 ai a b 001 0 armo  a(Uk)006855813 apbcbccundeterduencipf20gy-nonroman a 99189840  aDLCbengcDLCdDLC-RdUk aa-ai---aa-tu---00aBX121b.S63 19971 6880-01aSmbatyantsÊ¿, Artak,cEpiskopos,d1876-1937106880-02aArtak Episkopos SmbatyantsÊ¿ (TaushetsÊ¿i) : hogevor, grakan, patma-banasirakan gortsuneutÊ¿yuneÌŒ ev gndakaharutÊ¿yuneÌŒ, 1876-1937 tÊ¿tÊ¿. /ckazmetsÊ¿ Sandro Behbudyan. 6880-03aErevan :b"Anahit",c1997. a691 p. :bill. ;c27 cm. 06880-04aVaveragrer Hay EkeghetsÊ¿u patmutÊ¿yan ;vgirkÊ¿ 3 6880-05aAt head of title: Hayastani HanrapetutÊ¿yan KarÌ£avarutÊ¿yann arÌ£eÌŒntÊ¿er. Arkhivayin Gortsi VarchÊ¿utÊ¿yun. Arvesti, GrakanutÊ¿yan ev Mamuli PÊ¿astatÊ¿ghtÊ¿eri Petakan Kentronakan Arkhiv. aIncludes bibliographical references and indexes.106880-06aSmbatyantsÊ¿, Artak,cEpiskopos,d1876-1937206880-07aArmenian ChurchxHistoryvSources. 0aArmenianszTurkey. 0aArmeniaxHistoryy1801-1900vSources. 0aArmeniaxHistoryy1901-vSources.1 6880-08aBehbudyan, Sandroq(Sandro Artashesi),d1934-41aBritish LibrarybOCjHEC.1994.a.294/31 6100-01 /aÕÕ´Õ¢Õ¡Õ¿ÕµÕ¡Õ¶Ö, Ô±Ö€Õ¿Õ¡Õ¯,cÔµÕ¢Õ«Õ½Õ¯Õ¸ÕºÕ¸Õ½,d1876-1937.106245-02 /aÔ±Ö€Õ¿Õ¡Õ¯ ÔµÕ¢Õ«Õ½Õ¯Õ¸ÕºÕ¸Õ½ ÕÕ´Õ¢Õ¡Õ¿ÕµÕ¡Õ¶Ö (ÕÕ¡Õ¸Ö‚Õ·Õ¥ÖÕ«) : Õ°Õ¸Õ£Õ¥Õ¾Õ¸Ö€, Õ£Ö€Õ¡Õ¯Õ¡Õ¶ ÕºÕ¡Õ¿Õ´Õ¡-Õ¢Õ¡Õ¶Õ¡Õ½Õ«Ö€Õ¡Õ¯Õ¡Õ¶ Õ£Õ¸Ö€Õ®Õ¸Ö‚Õ¶Õ¥Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¥Õ¾ Õ£Õ¶Õ¤Õ¡Õ¯Õ¡Õ°Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨, 1876-1937 Õ©Õ©. /cÕ¯Õ¡Õ¦Õ´Õ¥Ö ÕÕ¡Õ¶Õ¤Ö€Õ¸ Ô²Õ¥Õ°Õ¢Õ¸Ö‚Õ©ÕµÕ¡Õ¶. 6260-03 /aÔµÖ€Õ¥Õ¾Õ¡Õ¶ :b«Անահիտ»,c1997. 06440-04 /aÕŽÕ¡Õ¾Õ¥Ö€Õ¡Õ£Ö€Õ¥Ö€ Õ€Õ¡Õµ ÔµÕ¯Õ¥Õ²Õ¥ÖÕ¸Ö‚ ÕºÕ¡Õ¿Õ´Õ¸Ö‚Õ©ÕµÕ¡Õ¶ ;vÕ£Õ«Ö€Ö„ 3 6500-05 /aÕÕ«Õ¿Õ²Õ¸Õ½Õ« Õ£Õ¬Õ¸Ö‚Õ­: Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ« Õ€Õ¡Õ¶Ö€Õ¡ÕºÕ¥Õ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Ô¿Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¡Õ¼Õ¨Õ¶Õ©Õ¥Ö€. Ô±Ö€Õ­Õ«Õ¾Õ¡ÕµÕ«Õ¶ Ô³Õ¸Ö€Õ®Õ« ÕŽÕ¡Ö€Õ¹Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶. Ô±Ö€Õ¾Õ¥Õ½Õ¿Õ«, Ô³Ö€Õ¡Õ¯Õ¡Õ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¥Õ¾ Õ„Õ¡Õ´Õ¸Ö‚Õ¬Õ« Ô²Õ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ¥Ö€Õ« ÕŠÕ¥Õ¿Õ¡Õ¯Õ¡Õ¶ Ô¿Õ¥Õ¶Õ¿Ö€Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Ô±Ö€Õ­Õ«Õ¾.106600-06 /aÕÕ´Õ¢Õ¡Õ¿ÕµÕ¡Õ¶Ö, Ô±Ö€Õ¿Õ¡Õ¯,cÔµÕ¢Õ«Õ½Õ¯Õ¸ÕºÕ¸Õ½,d1876-1937.206610-07 /aÕ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ Õ. ÔµÕ¯Õ¥Õ²Õ¥ÖÕ«xÕŠÕ¡Õ¿Õ´Õ¸Ö‚Õ©Õ«Ö‚Õ¶vÔ±Õ²Õ¢Õ«Ö‚Ö€Õ¶Õ¥Ö€.1 6700-08 /aÔ²Õ¥Õ°Õ¢Õ¸Ö‚Õ©ÕµÕ¡Õ¶, ÕÕ¡Õ¶Õ¤Ö€Õ¸,q(ÕÕ¡Õ¶Õ¤Ö€Õ¸ Ô±Ö€Õ¿Õ¡Õ·Õ¥Õ½Õ«),d1934- aarmenian LC01466 am a2200349 a 45000010009000000050017000090080041000260350018000679060045000850100017001300350023001470400029001700430012001990500020002112450037002312600088002683000035003565050031003916100051004226500038004736500031005116500034005426500047005766500049006237100051006728520040007238800054007638800131008178800076009488800076010249850016011001487678320071121181846.0040502m19461951sy ac 000 0 arm  a(Uk)006881105 apbcbccundeterduencipf20gy-nonroman a 2003207810 a(OCoLC)ocm51506679 aDLCbengcDLCdOCoLCdUk aa-sy---00aBV4539.A75bM36006880-01aMananay :btaregrkÊ¿oyk. 6880-02aHaleÌ„p :bHratarakutÊ¿iwn Hogewor EghbarutÊ¿ean EritasardatsÊ¿,c1946-1951 a2 v. :bill., ports. ;c23 cm.0 a[1]. 1946, 5-6. 1950-1951.206880-03aHogewor EghbayrutÊ¿iwn EritasardatsÊ¿. 0aArmeniansxReligious lifezSyria. 0aAlmanacs, ArmenianzSyria. 0aYouthxReligious lifezSyria. 0aArmenianszSyriaxSocial life and customs. 0aArmenianszLebanonxSocial life and customs.2 6880-04aHogewor EghbayrutÊ¿iwn EritasardatsÊ¿.41aBritish LibrarybOCjHEC.2002.a.492006245-01 /aÕ„Õ¡Õ¶Õ¡Õ¶Õ¡Õµ :bÕ¿Õ¡Ö€Õ¥Õ£Ö€Ö„Õ¸ÕµÕ¯. 6260-02 /aÕ€Õ¡Õ¬Õ§Õº :bÕ€Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ¸Ö‚Õ©Õ«Ö‚Õ¶ Õ€Õ¸Õ£Õ¥Ö‚Õ¸Ö€ ÔµÕ²Õ¢Õ¡ÕµÖ€Õ¸Ö‚Õ©Õ¥Õ¡Õ¶ ÔµÖ€Õ«Õ¿Õ¡Õ½Ö€Õ¤Õ¡Ö,c1946-1951.206610-03 /aÕ€Õ¸Õ£Õ¥Ö‚Õ¸Ö€ ÔµÕ²Õ¢Õ¡ÕµÖ€Õ¸Ö‚Õ©Õ«Ö‚Õ¶ ÔµÖ€Õ«Õ¿Õ¡Õ½Ö€Õ¤Õ¡Ö.2 6710-04 /aÕ€Õ¸Õ£Õ¥Ö‚Õ¸Ö€ ÔµÕ²Õ¢Õ¡ÕµÖ€Õ¸Ö‚Õ©Õ«Ö‚Õ¶ ÔµÖ€Õ«Õ¿Õ¡Õ½Ö€Õ¤Õ¡Ö. aarmenian LC01818cab a2200385 a 45000010009000000050017000090080041000260350018000679060045000850100017001300190015001470400016001622450074001782460009002522600085002613000017003465000047003635000086004105050147004966100060006436500026007036500040007296510038007696510033008076550037008407100060008777400022009378520035009598800102009948800119010968800089012158800089013048800026013939850013014191487741020071121185010.0040502m18971900enkmr|p 0 z0arm  a(Uk)002848266 apbcbccundeterduencipf20gy-nonroman a 2007970004x a2532250240 aUkbengcUk006880-01aMart :b[amsatÊ¿ertÊ¿, oÌ„rgan HnchÊ¿akean KusaktsÊ¿utÊ¿ean].3 aMard 6880-02aLondon :b[SotsÊ¿ial Demokrat HnchÊ¿akean KusaktsÊ¿utÊ¿iwn],c1897-1900. av. ;c44 cm. a"Battle": an Armenian political newspaper. a"Mart" published after 1897, as "HnchÊ¿ak" could not be due to legal proceedings.0 aI year, no. 1 (15 Apr., 1897)-10 (10 Apr., 1898); II year, no. 11 (7 May, 1898)-16 (Mar., 1899); III year, no. 17 (Aug., 1899)-27 (Oct., 1900)206880-03aSotsÊ¿ial Demokrat HnchÊ¿akean KusaktsÊ¿utÊ¿iwn 0aArmenian periodicals. 0aArmeniansxPolitics and government. 0aArmeniaxPolitics and government. 0aArmeniaxHistoryy1801-1900. 4aPeriodical publications.- London2 6880-04aSotsÊ¿ial Demokrat HnchÊ¿akean KusaktsÊ¿utÊ¿iwn0 6880-05aHnchÊ¿ak.41aBritish LibrarybHMNTSjOP.411006245-01 /aÕ„Õ¡Ö€Õ¿ :b[Õ¡Õ´Õ½Õ¡Õ©Õ¥Ö€Õ©, Ö…Ö€Õ£Õ¡Õ¶ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ¥Õ¡Õ¶]. 6260-02 /aÔ¼Õ¸Õ¶Õ¤Õ¸Õ¶ :b[ÕÕ¸ÖÕ«Õ¡Õ¬ Ô´Õ¥Õ´Õ¸Õ¯Ö€Õ¡Õ¿ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ«Ö‚Õ¶],c1897-1900.206610-03 /aÕÕ¸ÖÕ«Õ¡Õ¬ Ô´Õ¥Õ´Õ¸Õ¯Ö€Õ¡Õ¿ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ«Ö‚Õ¶.2 6710-04 /aÕÕ¸ÖÕ«Õ¡Õ¬ Ô´Õ¥Õ´Õ¸Õ¯Ö€Õ¡Õ¿ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ«Ö‚Õ¶.0 6740-05 /aÕ€Õ¶Õ¹Õ¡Õ¯. aarmenian03105cab a2200601 a 45000010009000000050017000090080041000260350018000679060045000850100017001300190015001470350020001620400016001820410023001980430021002212450093002422460022003352460028003572460055003852460073004402460052005132460037005652600110006023000033007123100031007453210026007763620044008023620020008465000127008665000070009935050072010635150027011355460028011626500028011906500047012186500039012656510026013046510039013306550036013697000049014058520036014548800133014908800082016238800102017058800071018078800056018788800139019348800061020738800202021348800093023368800061024299850013024901487741320071121185021.0000316d18551865fr er p 0 z0armod a(Uk)002863571 apbcbccundeterduencipf20gy-nonroman a 2007970007x a2541830122 a(OCoLC)43646516 aUkbengcUk1 aarmafrearusharm aa-ai---ae------006880-01aMaseatsÊ¿ aghawni :bawetaber HayastaneaytsÊ¿ /c[khmb. GabrieÌ„l AyvazeantsÊ¿].15aColombe du Massis15aMessager de l'ArmeÌnie136880-02aMaseatsÊ¿ aghawni awetaber HayastaneaytsÊ¿146880-03aMaseatsÊ¿ aghawni ew Tsiatsan HayastaneaytsÊ¿f306880-04aTsiatsan HayastaneaytsÊ¿f306880-05aAwetaber HayastaneaytsÊ¿ 6880-06aPÊ¿ariz :b[Khmbagir ew hratarakichÊ¿ GabrieÌ„l AyvazeantsÊ¿],c1855-e(Paris :fImp. W. Remquet) av. :bill., ports. ;c32 cm. aBiweekly,b<1 Sept. 1861-> aMonthly,bJan. 1855->0 6880-07a1. tari, tÊ¿iw 1 (Hunuar 1855)-1 aCeased in 1865. 6880-08aImprint varies: Paris : i GranotsÊ¿i Chaniki Aramean, Jan. 1856-> ; Theodosia : Khalipean Usumnaran,  6880-09aLatest issue consulted: 6. tari, tÊ¿iw 17 (15 Sept. 1861)0 aVol. I (1855); vol. II (1856); vol. III (1857); vol. VI, 1-8 (1861) aNot published in 1859. aIn Armenian and French. 0aArmeniansvPeriodicals. 0aArmenianszForeign countriesvPeriodicals. 0aArmeniansvBiographyvPeriodicals. 0aArmeniavPeriodicals. 0aEuropev19th centuryvPeriodicals. 4aPeriodical publications.- Paris1 6880-10aAyvazovskÊ¿i, GabrieÌ„l,d1812-1880.41aBritish LibrarybOCj17070.g.5.006245-01 /aÕ„Õ¡Õ½Õ¥Õ¡Ö Õ¡Õ²Õ¡Ö‚Õ¶Õ« :bÕ¡Ö‚Õ¥Õ¿Õ¡Õ¢Õ¥Ö€ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ /c[Õ­Õ´Õ¢. Ô³Õ¡Õ¢Ö€Õ«Õ§Õ¬ Ô±ÕµÕ¾Õ¡Õ¦Õ¥Õ¡Õ¶Ö].136246-02 /aÕ„Õ¡Õ½Õ¥Õ¡Ö Õ¡Õ²Õ¡Ö‚Õ¶Õ« Õ¡Ö‚Õ¥Õ¿Õ¡Õ¢Õ¥Ö€ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ146246-03 /aÕ„Õ¡Õ½Õ¥Õ¡Ö Õ¡Õ²Õ¡Ö‚Õ¶Õ« Õ¥Ö‚ Ô¾Õ«Õ¡Õ®Õ¡Õ¶ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖf<ÕÕ¥ÕºÕ¿. 1861->306246-04 /aÔ¾Õ«Õ¡Õ®Õ¡Õ¶ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖf<ÕÕ¥ÕºÕ¿. 1861->306246-05 /aÔ±Ö‚Õ¥Õ¿Õ¡Õ¢Õ¥Ö€ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ 6260-06 /aÕ“Õ¡Ö€Õ«Õ¦ :b[Ô½Õ´Õ¢Õ¡Õ£Õ«Ö€ Ö‡ Õ°Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ«Õ¹ Ô³Õ¡Õ¢Ö€Õ«Õ§Õ¬ Ô±ÕµÕ¾Õ¡Õ¦Õ¥Õ¡Õ¶Ö],c1855-e(Paris :fImp. W. Remquet)0 6362-07 /a1. Õ¿Õ¡Ö€Õ«, Õ©Õ«Ö‚ 1 (Õ…Õ¸Ö‚Õ¶Õ¸Ö‚Õ¡Ö€ 1855)- 6500-08 /aÕÕ¡Ö€Õ¢Õ¥Ö€ Õ°Ö€Õ¡Õ¿.: Õ“Õ¡Ö€Õ«Õ¦ : Õ« Ô³Ö€Õ¡Õ¶Õ¸ÖÕ« ÕƒÕ¡Õ¶Õ«Õ¯Õ« Ô±Ö€Õ¡Õ´Õ¥Õ¡Õ¶, Õ…Õ¸Ö‚Õ¶Õ¸Ö‚Õ¡Ö€ 1856-> ; Ô¹Õ¥Õ¸Õ¤Õ¸Õ½Õ«Õ¡ : Ô½Õ¡Õ¬Õ«ÕºÕ¥Õ¡Õ¶ ÕˆÖ‚Õ½Õ¸Ö‚Õ´Õ¶Õ¡Ö€Õ¡Õ¶, <ÕÕ¥ÕºÕ¿. 1861-> 6500-09 /aÕ”Õ¶Õ¶Õ¸Ö‚Õ¡Õ® Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ©Õ«Ö‚: 6. Õ¿Õ¡Ö€Õ«, Õ©Õ«Ö‚ 17 (15 ÕÕ¥ÕºÕ¿. 1861)1 6700-10 /aÔ±ÕµÕ¾Õ¡Õ¦Õ¥Õ¡Õ¶Ö, Ô³Õ¡Õ¢Ö€Õ«Õ§Õ¬d1812-1880. aarmenian01794 ab a2200349 a 45000010009000000050017000090080041000260350018000679060045000850100017001300190015001470400016001622450208001782460021003862600060004073000017004675000029004846500028005136510045005416510061005866510073006477000044007207000030007647000035007948520036008298800319008658800088011848800067012728800042013398800050013819850013014311487741720071121185036.0040502m18121816it wu|p 0 a0arm  a(Uk)002870975 apbcbccundeterduencipf20gy-nonroman a 2007970012x a2543960295 aUkbengcUk006880-01aDitak Biwzandean :bshabatÊ¿atÊ¿ertÊ¿ apa erkshapatÊ¿atÊ¿ertÊ¿, patmutÊ¿iwn kÊ¿aghakÊ¿agan u paterazmakan, banasirakan, ekeghetsakan /ckhmb. Grigor Gaparachean, M. PÊ¿iwskiwlean, M. Jakhjakhean.3 aTidag Piwzantean 6880-02ai Venetik :bi Vans Srboyn Ghazaru,c1812-1816. av. ;c23 cm. aBegan 1808; ceased 1816. 0aArmeniansvPeriodicals. 0aEuropexHistoryy1789-1815vPeriodicals. 0aEuropexPolitics and governmenty1789-1915vPeriodicals. 0aFrancexHistoryyConsulate and First Empire, 1799-1815vPeriodicals.1 6880-03aKarapetean, Grigor KhaparÌ£achi1 6880-04aPÊ¿iwskiwlean, M.1 6880-05aJakhjakhean, ManueÌ„l.41aBritish LibrarybOCj17070.d.3.006245-01 /aÔ´Õ«Õ¿Õ¡Õ¯ Ô²Õ«Ö‚Õ¦Õ¡Õ¶Õ¤Õ¥Õ¡Õ¶ :bÕ·Õ¡Õ¢Õ¡Õ©Õ¡Õ©Õ¥Ö€Õ© Õ¡ÕºÕ¡ Õ¥Ö€Õ¯Õ·Õ¡Õ¢Õ¡Õ©Õ¡Õ©Õ¥Ö€Õ©, ÕºÕ¡Õ¿Õ´Õ¸Ö‚Õ©Õ«Ö‚Õ¶ Ö„Õ¡Õ²Õ¡Ö„Õ¡Õ¯Õ¡Õ¶ Õ¸Ö‚ ÕºÕ¡Õ¿Õ¥Ö€Õ¡Õ¦Õ´Õ¡Õ¯Õ¡Õ¶, Õ¢Õ¡Õ¶Õ¡Õ½Õ«Ö€Õ¡Õ¯Õ¡Õ¶, Õ¥Õ¯Õ¥Õ²Õ¥ÖÕ¡Õ¯Õ¡Õ¶ /cÕ­Õ´Õ¢. Ô³Ö€Õ«Õ£Õ¸Ö€ Ô³Õ¡ÕºÕ¡Ö€Õ¡Õ³Õ¥Õ¡Õ¶, Õ„. Õ“Õ«Ö‚Õ½Õ¯Õ«Ö‚Õ¬Õ¥Õ¡Õ¶, Õ„. Õ‹Õ¡Õ­Õ»Õ¡Õ­Õ¥Õ¡Õ¶. 6260-02 /aÕ« ÕŽÕ¥Õ¶Õ¥Õ¿Õ«Õ¯ :bÕ« ÕŽÕ¡Õ¶Õ½ ÕÖ€Õ¢Õ¸ÕµÕ¶ Õ‚Õ¡Õ¦Õ¡Ö€Õ¸Ö‚,c1812-1816.1 6700-03 /aÔ¿Õ¡Ö€Õ¡ÕºÕ¥Õ¿Õ¥Õ¡Õ¶, Ô³Ö€Õ«Õ£Õ¸Ö€ Ô½Õ¡ÕºÕ¡Õ¼Õ¡Õ³Õ«.1 6700-04 /aÕ“Õ«Ö‚Õ½Õ¯Õ«Ö‚Õ¬Õ¥Õ¡Õ¶, Õ„.1 6700-05 /aÕ‹Õ¡Õ­Õ»Õ¡Õ­Õ¥Õ¡Õ¶, Õ„Õ¡Õ¶Õ¸Ö‚Õ§Õ¬. aarmenian01672cam a2200325 a 45000010009000000050017000090080041000260350018000679060045000850100017001300400016001471000045001632400017002082450115002252460058003402600087003983000046004855000028005316500025005597000044005847100055006288520035006838800060007188800181007788800090009598800133010498800060011828800091012429850013013331487741820071121185039.0040502m19481961ai acf b 000 0darm  a(Uk)006842308 apbcbccundeterduencipf20gy-nonroman a 2007970013 aUkbengcUk1 6880-01aAbovyan, KhachÊ¿atur,d1805-184810aWorks.f1948106880-02aErkeri liakatar zhoghovatsu utÊ¿ hatorov /cKh. Abovyan ; [khmb. kolegia, Av. Isahakyan ... [et al.]].156880-03aPolnoe sobranie sochineniiÌŒ v vosʹmi tomakh 6880-04aErevan :bHSSRÌ£ GitutÊ¿yunneri Akademiai HratarakchÊ¿utÊ¿yun,c1948-1961. a8 v. in 10 books :bill., port. ;c26 cm. aIllustrated end-papers. 0aArmenian literature.1 6880-05aIsahakyan, AvetikÊ¿,d1875-19572 6880-06aM. Abeghyani Anvan GrakanutÊ»yan Institut.41aBritish LibrarybOCj17046.h.11 6100-01 /aÔ±Õ¢Õ¸Õ¾ÕµÕ¡Õ¶, Ô½Õ¡Õ¹Õ¡Õ¿Õ¸Ö‚Ö€,d1805-1848.106245-02 /aÔµÖ€Õ¯Õ¥Ö€Õ« Õ¬Õ«Õ¡Õ¯Õ¡Õ¿Õ¡Ö€ ÕªÕ¸Õ²Õ¸Õ¾Õ¡Õ®Õ¸Ö‚ Õ¸Ö‚Õ© Õ°Õ¡Õ¿Õ¸Ö€Õ¸Õ¾ /cÔ½. Ô±Õ¢Õ¸Õ¾ÕµÕ¡Õ¶ ; [Õ­Õ´Õ¢. Õ¯Õ¸Õ¬Õ¥Õ£Õ«Õ¡ Ô±Õ¾. Ô»Õ½Õ¡Õ°Õ¡Õ¯ÕµÕ¡Õ¶ ... [Ö‡ Õ¸Ö‚Ö€Õ·Õ¶.]].156246-03 /aПолное Ñобрание Ñочинений в воÑьми томах 6260-04 /aÔµÖ€Õ¥Õ¾Õ¡Õ¶ :bÕ€ÕÕÕŒ Ô³Õ«Õ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Ô±Õ¯Õ¡Õ¤Õ¥Õ´Õ«Õ¡Õ« Õ€Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ¹Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶,c1948-1961.1 6700-05 /aÔ»Õ½Õ¡Õ°Õ¡Õ¯ÕµÕ¡Õ¶, Ô±Õ¾Õ¥Õ¿Õ«Ö„,d1875-1957.2 6710-06 /aÕ„. Ô±Õ¢Õ¥Õ²ÕµÕ¡Õ¶Õ« Ô±Õ¶Õ¾Õ¡Õ¶ Ô³Ö€Õ¡Õ¯Õ¡Õ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Ô»Õ¶Õ½Õ¿Õ«Õ¿Õ¸Ö‚Õ¿. aarmenian01187cab a2200301 a 45000010009000000050017000090080041000260350018000679060045000850100017001300190015001470400016001622450065001782460009002432460009002522600052002613000017003135000147003305050052004776500038005296500036005676500031006036550037006348520036006718800099007078800065008069850014008711487901520071203081856.0040502m18641877tu mr|p 0 z0arm  a(Uk)002824493 apbcbccundeterduencipf20gy-nonroman a 2007970001x a2520240032 aUkbengcUk006880-01aHoys :b[droÌ„shak hayreneats, amsagir banasirakan].3 aHuys3 aYuys 6880-02aArmash :b[Armashi VankÊ¿],c1864-1877. av. ;c23 cm. aHoys. “Hope,†a monthly magazine of literature in modern Armenian, Western dialect, printed at the Convent of the Mother of God at Armash.0 aVol. I, 1-12 (1864-1865), II, 13-24 (1865-1866) 0aArmenian literaturevPeriodicals. 0aArmenian languagevPeriodicals. 0aArmeniansxReligious life. 4aPeriodical publications.- Armash41aBritish LibrarybOCj17070.g.3.006245-01 /aÕ…Õ¸ÕµÕ½ :bÕ¤Ö€Ö…Õ·Õ¡Õ¯ Õ°Õ¡ÕµÖ€Õ¥Õ¶Õ¥Õ¡Ö, Õ¡Õ´Õ½Õ¡Õ£Õ«Ö€ Õ¢Õ¡Õ¶Õ¡Õ½Õ«Ö€Õ¡Õ¯Õ¡Õ¶]. 6260-02 /aÔ±Ö€Õ´Õ¡Õ· :b[Ô±Ö€Õ´Õ¡Õ·Õ« ÕŽÕ¡Õ¶Ö„],c1864-1877. aarmenian2yaz-5.28.0/test/test_xmlquery.c0000644000175000017500000002121613265142510013403 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include #endif enum pqf2xml_status { PQF_FAILED, QUERY2XML_FAILED, XML_NO_MATCH, XML_MATCH, XML_NO_ERROR }; enum pqf2xml_status pqf2xml_text(const char *pqf, const char *expect_xml, const char *expect_pqf) { YAZ_PQF_Parser parser = yaz_pqf_create(); ODR odr = odr_createmem(ODR_ENCODE); Z_RPNQuery *rpn; enum pqf2xml_status status = XML_NO_ERROR; YAZ_CHECK(parser); YAZ_CHECK(odr); rpn = yaz_pqf_parse(parser, odr, pqf); yaz_pqf_destroy(parser); if (!rpn) status = PQF_FAILED; else { #if YAZ_HAVE_XML2 xmlDocPtr doc = 0; yaz_rpnquery2xml(rpn, &doc); if (!doc) status = QUERY2XML_FAILED; else { char *buf_out; int len_out; xmlDocDumpMemory(doc, (xmlChar **) &buf_out, &len_out); if (len_out == (int) strlen(expect_xml) && memcmp(buf_out, expect_xml, len_out) == 0) { Z_Query *query2 = 0; int error_code = 0; const char *addinfo = 0; const xmlNode *root_element = xmlDocGetRootElement(doc); ODR odr2 = odr_createmem(ODR_ENCODE); yaz_xml2query(root_element, &query2, odr2, &error_code, &addinfo); if (error_code || !query2) status = XML_NO_MATCH; else { WRBUF w = wrbuf_alloc(); yaz_query_to_wrbuf(w, query2); if (!expect_pqf || strcmp(expect_pqf, wrbuf_cstr(w)) == 0) status = XML_MATCH; else { status = XML_NO_MATCH; printf("Result: %s\n", wrbuf_cstr(w)); } wrbuf_destroy(w); } odr_destroy(odr2); } else { printf("%.*s\n", len_out, buf_out); status = XML_NO_MATCH; } xmlFreeDoc(doc); xmlFree(buf_out); } #else status = QUERY2XML_FAILED; #endif } odr_destroy(odr); return status; } static void tst(void) { YAZ_CHECK_EQ(pqf2xml_text("@attr 1=4 bad query", "", 0), PQF_FAILED); #if YAZ_HAVE_XML2 YAZ_CHECK_EQ(pqf2xml_text( "@attr 1=4 computer", "\n" "" "" "computer" "\n", "RPN @attrset Bib-1 @attr 1=4 computer" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@attr 2=1 @attr 1=title computer", "\n" "" "" "" "computer" "\n", "RPN @attrset Bib-1 @attr 1=title @attr 2=1 computer" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@attr 2=1 @attr exp1 1=1 computer", "\n" "" "" "" "computer" "\n", "RPN @attrset Bib-1 @attr Exp-1 1=1 @attr 2=1 computer" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@and a b", "\n" "" "" "a" "b" "\n", "RPN @attrset Bib-1 @and a b" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@or @and a b c", "\n" "" "" "" "a" "b" "c" "\n", "RPN @attrset Bib-1 @or @and a b c" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@set abe", "\n" "" "abe\n", "RPN @attrset Bib-1 @set abe" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( /* exclusion, distance, ordered, relationtype, knownunit, proxunit */ "@prox 0 3 1 2 k 2 a b", "\n" "" "" "a" "b" "\n", "RPN @attrset Bib-1 @prox 0 3 1 2 k 2 a b" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@term numeric 32", "\n" "" "" "32" "\n", "RPN @attrset Bib-1 @term numeric 32" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@term string computer", "\n" "" "" "computer" "\n", "RPN @attrset Bib-1 @term string computer" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@term null void", "\n" "" "" "" "\n", "RPN @attrset Bib-1 @term null x" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@attrset gils @attr 4=2 x", "\n" "" "" "" "x" "\n", "RPN @attrset GILS @attr 4=2 x" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@attrset Bib-1 @attr 0=1016 \" AILSA\"", "\n" "" "" " AILSA" "\n", 0 ), XML_MATCH); #endif } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/test_icu.c0000644000175000017500000006763213265142510012311 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ /* DO NOT EDIT THIS FILE IF YOUR EDITOR DOES NOT SUPPORT UTF-8 */ #if HAVE_CONFIG_H #include "config.h" #endif #define USE_TIMING 0 #if USE_TIMING #include #endif #include #include #include #if YAZ_HAVE_ICU #include #include #if YAZ_POSIX_THREADS #include #endif #if YAZ_HAVE_XML2 #include #endif #include #include #define MAX_KEY_SIZE 256 struct icu_termmap { uint8_t sort_key[MAX_KEY_SIZE]; /* standard C string '\0' terminated */ char disp_term[MAX_KEY_SIZE]; /* standard C utf-8 string */ }; static int icu_termmap_cmp(const void *vp1, const void *vp2) { struct icu_termmap *itmp1 = *(struct icu_termmap **) vp1; struct icu_termmap *itmp2 = *(struct icu_termmap **) vp2; int cmp = 0; cmp = strcmp((const char *)itmp1->sort_key, (const char *)itmp2->sort_key); return cmp; } static int test_icu_casemap(const char *locale, char action, const char *src8cstr, const char *chk8cstr) { int success = 0; UErrorCode status = U_ZERO_ERROR; struct icu_buf_utf8 *src8 = icu_buf_utf8_create(0); struct icu_buf_utf8 *dest8 = icu_buf_utf8_create(0); struct icu_buf_utf16 *src16 = icu_buf_utf16_create(0); struct icu_buf_utf16 *dest16 = icu_buf_utf16_create(0); int src8cstr_len = strlen(src8cstr); int chk8cstr_len = strlen(chk8cstr); /* converting to UTF16 */ icu_utf16_from_utf8_cstr(src16, src8cstr, &status); /* perform case mapping */ icu_utf16_casemap(dest16, src16, locale, action, &status); /* converting to UTF8 */ icu_utf16_to_utf8(dest8, dest16, &status); /* determine success */ if (dest8->utf8 && (dest8->utf8_len == strlen(chk8cstr)) && !strcmp(chk8cstr, (const char *) dest8->utf8)) success = 1; else success = 0; /* report failures */ if (!success) { yaz_log(YLOG_WARN, "test_icu_casemap failed"); yaz_log(YLOG_LOG, "Original string: '%s' (%d)", src8cstr, src8cstr_len); yaz_log(YLOG_LOG, "icu_casemap '%s:%c' '%s' (%d)", locale, action, dest8->utf8, dest8->utf8_len); yaz_log(YLOG_LOG, "expected string: '%s' (%d)", chk8cstr, chk8cstr_len); } /* clean the buffers */ icu_buf_utf8_destroy(src8); icu_buf_utf8_destroy(dest8); icu_buf_utf16_destroy(src16); icu_buf_utf16_destroy(dest16); return success; } static void check_icu_casemap(void) { /* Locale 'en' */ /* successful tests */ YAZ_CHECK(test_icu_casemap("en", 'l', "A ReD fOx hunTS sQUirriLs", "a red fox hunts squirrils")); YAZ_CHECK(test_icu_casemap("en", 'u', "A ReD fOx hunTS sQUirriLs", "A RED FOX HUNTS SQUIRRILS")); YAZ_CHECK(test_icu_casemap("en", 'f', "A ReD fOx hunTS sQUirriLs", "a red fox hunts squirrils")); YAZ_CHECK(test_icu_casemap("en", 't', "A ReD fOx hunTS sQUirriLs", "A Red Fox Hunts Squirrils")); /* Locale 'da' */ /* success expected */ YAZ_CHECK(test_icu_casemap("da", 'l', "Ã¥h ÆbLE, øs fLØde i Ã…en efter bLÃ¥BærGRødeN", "Ã¥h æble, øs fløde i Ã¥en efter blÃ¥bærgrøden")); YAZ_CHECK(test_icu_casemap("da", 'u', "Ã¥h ÆbLE, øs fLØde i Ã…en efter bLÃ¥BærGRødeN", "Ã…H ÆBLE, ØS FLØDE I Ã…EN EFTER BLÃ…BÆRGRØDEN")); YAZ_CHECK(test_icu_casemap("da", 'f', "Ã¥h ÆbLE, øs fLØde i Ã…en efter bLÃ¥BærGRødeN", "Ã¥h æble, øs fløde i Ã¥en efter blÃ¥bærgrøden")); YAZ_CHECK(test_icu_casemap("da", 't', "Ã¥h ÆbLE, øs fLØde i Ã…en efter bLÃ¥BærGRødeN", "Ã…h Æble, Øs Fløde I Ã…en Efter BlÃ¥bærgrøden")); /* Locale 'de' */ /* success expected */ YAZ_CHECK(test_icu_casemap("de", 'l', "zWÖlf ärgerliche Würste rollen ÜBer die StRAße", "zwölf ärgerliche würste rollen über die straße")); YAZ_CHECK(test_icu_casemap("de", 'u', "zWÖlf ärgerliche Würste rollen ÜBer die StRAße", "ZWÖLF ÄRGERLICHE WÜRSTE ROLLEN ÜBER DIE STRASSE")); YAZ_CHECK(test_icu_casemap("de", 'f', "zWÖlf ärgerliche Würste rollen ÜBer die StRAße", "zwölf ärgerliche würste rollen über die strasse")); YAZ_CHECK(test_icu_casemap("de", 't', "zWÖlf ärgerliche Würste rollen ÜBer die StRAße", "Zwölf Ärgerliche Würste Rollen Über Die Straße")); } static int test_icu_sortmap(const char *locale, int src_list_len, const char **src_list, const char **chk_list) { int success = 1; UErrorCode status = U_ZERO_ERROR; struct icu_buf_utf8 *buf8 = icu_buf_utf8_create(0); struct icu_buf_utf16 *buf16 = icu_buf_utf16_create(0); int i; struct icu_termmap *list[src_list_len]; UCollator *coll = ucol_open(locale, &status); icu_check_status(status); if (U_FAILURE(status)) return 0; /* assigning display terms and sort keys using buf 8 and buf16 */ for (i = 0; i < src_list_len; i++) { list[i] = (struct icu_termmap *) malloc(sizeof(struct icu_termmap)); /* copy display term */ strcpy(list[i]->disp_term, src_list[i]); /* transforming to UTF16 */ icu_utf16_from_utf8_cstr(buf16, list[i]->disp_term, &status); icu_check_status(status); /* computing sortkeys */ icu_sortkey8_from_utf16(coll, buf8, buf16, &status); icu_check_status(status); /* assigning sortkeys */ memcpy(list[i]->sort_key, buf8->utf8, buf8->utf8_len); } /* do the sorting */ qsort(list, src_list_len, sizeof(struct icu_termmap *), icu_termmap_cmp); /* checking correct sorting */ for (i = 0; i < src_list_len; i++) { if (0 != strcmp(list[i]->disp_term, chk_list[i])){ success = 0; } } if (!success) { yaz_log(YLOG_LOG, "ERROR"); yaz_log(YLOG_LOG, "Input str:'%s':", locale); for (i = 0; i < src_list_len; i++) { yaz_log(YLOG_LOG, " '%s'", list[i]->disp_term); } yaz_log(YLOG_LOG, "ICU sort: '%s':", locale); for (i = 0; i < src_list_len; i++) { yaz_log(YLOG_LOG, " '%s'", list[i]->disp_term); } yaz_log(YLOG_LOG, "Expected: '%s':", locale); for (i = 0; i < src_list_len; i++) { yaz_log(YLOG_LOG, " '%s'", chk_list[i]); } } for (i = 0; i < src_list_len; i++) free(list[i]); ucol_close(coll); icu_buf_utf8_destroy(buf8); icu_buf_utf16_destroy(buf16); return success; } static void check_icu_sortmap(void) { /* successful tests */ size_t en_1_len = 6; const char *en_1_src[6] = {"z", "K", "a", "A", "Z", "k"}; const char *en_1_cck[6] = {"a", "A", "k", "K", "z", "Z"}; YAZ_CHECK(test_icu_sortmap("en", en_1_len, en_1_src, en_1_cck)); YAZ_CHECK(test_icu_sortmap("en_AU", en_1_len, en_1_src, en_1_cck)); YAZ_CHECK(test_icu_sortmap("en_CA", en_1_len, en_1_src, en_1_cck)); YAZ_CHECK(test_icu_sortmap("en_GB", en_1_len, en_1_src, en_1_cck)); YAZ_CHECK(test_icu_sortmap("en_US", en_1_len, en_1_src, en_1_cck)); /* successful tests */ { size_t da_1_len = 6; const char *da_1_src[6] = {"z", "Ã¥", "o", "æ", "a", "ø"}; const char *da_1_cck[6] = {"a", "o", "z", "æ", "ø", "Ã¥"}; YAZ_CHECK(test_icu_sortmap("da", da_1_len, da_1_src, da_1_cck)); YAZ_CHECK(test_icu_sortmap("da_DK", da_1_len, da_1_src, da_1_cck)); } /* successful tests */ { size_t de_1_len = 9; const char *de_1_src[9] = {"u", "ä", "o", "t", "s", "ß", "ü", "ö", "a"}; const char *de_1_cck[9] = {"a","ä", "o", "ö", "s", "ß", "t", "u", "ü"}; YAZ_CHECK(test_icu_sortmap("de", de_1_len, de_1_src, de_1_cck)); YAZ_CHECK(test_icu_sortmap("de_AT", de_1_len, de_1_src, de_1_cck)); YAZ_CHECK(test_icu_sortmap("de_DE", de_1_len, de_1_src, de_1_cck)); } } static int test_icu_normalizer(const char *rules8cstr, const char *src8cstr, const char *chk8cstr) { int success = 0; UErrorCode status = U_ZERO_ERROR; struct icu_buf_utf16 *src16 = icu_buf_utf16_create(0); struct icu_buf_utf16 *dest16 = icu_buf_utf16_create(0); struct icu_buf_utf8 *dest8 = icu_buf_utf8_create(0); struct icu_transform *transform = icu_transform_create(rules8cstr, 'f', 0, &status); icu_check_status(status); icu_utf16_from_utf8_cstr(src16, src8cstr, &status); icu_check_status(status); icu_transform_trans(transform, dest16, src16, &status); icu_check_status(status); icu_utf16_to_utf8(dest8, dest16, &status); icu_check_status(status); if (!strcmp((const char *) dest8->utf8, (const char *) chk8cstr)) success = 1; else { success = 0; yaz_log(YLOG_LOG, "Normalization"); yaz_log(YLOG_LOG, " Rules: '%s'", rules8cstr); yaz_log(YLOG_LOG, " Input: '%s'", src8cstr); yaz_log(YLOG_LOG, " Normalized: '%s'", dest8->utf8); yaz_log(YLOG_LOG, " Expected: '%s'", chk8cstr); } icu_transform_destroy(transform); icu_buf_utf16_destroy(src16); icu_buf_utf16_destroy(dest16); icu_buf_utf8_destroy(dest8); return success; } static void check_icu_normalizer(void) { YAZ_CHECK(test_icu_normalizer("[:Punctuation:] Any-Remove", "Don't shoot!", "Dont shoot")); YAZ_CHECK(test_icu_normalizer("[:Control:] Any-Remove", "Don't\n shoot!", "Don't shoot!")); YAZ_CHECK(test_icu_normalizer("[:Decimal_Number:] Any-Remove", "This is 4 you!", "This is you!")); YAZ_CHECK(test_icu_normalizer("Lower; [:^Letter:] Remove", "Don't shoot!", "dontshoot")); YAZ_CHECK(test_icu_normalizer("[:^Number:] Remove", "Monday 15th of April", "15")); YAZ_CHECK(test_icu_normalizer("Lower;" "[[:WhiteSpace:][:Punctuation:]] Remove", " word4you? ", "word4you")); YAZ_CHECK(test_icu_normalizer("NFD; [:Nonspacing Mark:] Remove; NFC", "à côté de l'alcôve ovoïde", "a cote de l'alcove ovoide")); } static int test_icu_tokenizer(const char *locale, char action, const char *src8cstr, int count) { int success = 1; UErrorCode status = U_ZERO_ERROR; struct icu_buf_utf16 *src16 = icu_buf_utf16_create(0); struct icu_buf_utf16 *tkn16 = icu_buf_utf16_create(0); struct icu_buf_utf8 *tkn8 = icu_buf_utf8_create(0); struct icu_tokenizer *tokenizer = 0; size_t org_start, org_len; /* transforming to UTF16 */ icu_utf16_from_utf8_cstr(src16, src8cstr, &status); icu_check_status(status); /* set up tokenizer */ tokenizer = icu_tokenizer_create(locale, action, &status); icu_check_status(status); YAZ_CHECK(tokenizer); /* attach text buffer to tokenizer */ icu_tokenizer_attach(tokenizer, src16, &status); icu_check_status(status); /* perform work on tokens */ while (icu_tokenizer_next_token(tokenizer, tkn16, &status, &org_start, &org_len)) { icu_check_status(status); /* converting to UTF8 */ icu_utf16_to_utf8(tkn8, tkn16, &status); } if (count != icu_tokenizer_token_count(tokenizer)) { success = 0; yaz_log(YLOG_LOG, "Tokenizer '%s:%c' Error:", locale, action); yaz_log(YLOG_LOG, " Input: '%s'", src8cstr); yaz_log(YLOG_LOG, " Tokens: %d", icu_tokenizer_token_count(tokenizer)); yaz_log(YLOG_LOG, " Expected: %d", count); } icu_tokenizer_destroy(tokenizer); icu_buf_utf16_destroy(src16); icu_buf_utf16_destroy(tkn16); icu_buf_utf8_destroy(tkn8); return success; } static void check_icu_tokenizer(void) { const char *en_str = "O Romeo, Romeo! wherefore art thou Romeo?"; YAZ_CHECK(test_icu_tokenizer("en", 's', en_str, 2)); YAZ_CHECK(test_icu_tokenizer("en", 'l', en_str, 7)); YAZ_CHECK(test_icu_tokenizer("en", 'w', en_str, 16)); YAZ_CHECK(test_icu_tokenizer("en", 'c', en_str, 41)); { const char *da_str = "BlÃ¥bærtærte. Denne kage stammer fra Finland. " "Den er med blÃ¥bær, men alle sommerens forskellige bær kan bruges."; YAZ_CHECK(test_icu_tokenizer("da", 's', da_str, 3)); YAZ_CHECK(test_icu_tokenizer("dar", 'l', da_str, 17)); YAZ_CHECK(test_icu_tokenizer("da", 'w', da_str, 37)); YAZ_CHECK(test_icu_tokenizer("da", 'c', da_str, 110)); } } static void check_icu_chain(void) { const char *en_str = "O Romeo, Romeo! wherefore art thou\t Romeo?"; UErrorCode status = U_ZERO_ERROR; struct icu_chain *chain = 0; const char *xml_str = "" "" "" "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); xmlNode *xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); chain = icu_chain_xml_config(xml_node, 0, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); if (!chain) return; YAZ_CHECK(icu_chain_assign_cstr(chain, en_str, &status)); while (icu_chain_next_token(chain, &status)) { yaz_log(YLOG_LOG, "%d '%s' '%s'", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); } YAZ_CHECK_EQ(icu_chain_token_number(chain), 7); YAZ_CHECK(icu_chain_assign_cstr(chain, "what is this?", &status)); while (icu_chain_next_token(chain, &status)) { yaz_log(YLOG_LOG, "%d '%s' '%s'", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); } YAZ_CHECK_EQ(icu_chain_token_number(chain), 3); icu_chain_destroy(chain); } static void check_bug_1140(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain *chain = 0; const char *xml_str = "" /* if the first rule is normalize instead. Then it works */ #if 0 "" #endif "" "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); xmlNode *xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); chain = icu_chain_xml_config(xml_node, 0, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); if (!chain) return; YAZ_CHECK(icu_chain_assign_cstr( chain, "O Romeo, Romeo! wherefore art thou\t Romeo?", &status)); while (icu_chain_next_token(chain, &status)) { ; /* printf("%d '%s' '%s'\n", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); */ } YAZ_CHECK_EQ(icu_chain_token_number(chain), 7); YAZ_CHECK(icu_chain_assign_cstr(chain, "what is this?", &status)); while (icu_chain_next_token(chain, &status)) { ; /* printf("%d '%s' '%s'\n", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); */ } /* we expect 'what' 'is' 'this', i.e. 3 tokens */ YAZ_CHECK_EQ(icu_chain_token_number(chain), 3); icu_chain_destroy(chain); } static void check_chain_empty_token(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain *chain = 0; const char *xml_str = "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); xmlNode *xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); chain = icu_chain_xml_config(xml_node, 0, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); YAZ_CHECK(icu_chain_assign_cstr( chain, "a string with 15 tokenss and 8 displays", &status)); while (icu_chain_next_token(chain, &status)) { ; /* printf("%d '%s' '%s'\n", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); */ } YAZ_CHECK_EQ(icu_chain_token_number(chain), 15); icu_chain_destroy(chain); } static void check_chain_empty_chain(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain *chain = 0; const char *xml_str = "" ""; const char *src8 = "some 5487 weired !¤%&(/& sTuFf"; char *dest8 = 0; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); xmlNode *xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); chain = icu_chain_xml_config(xml_node, 0, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); YAZ_CHECK(icu_chain_assign_cstr( chain, src8, &status)); while (icu_chain_next_token(chain, &status)) { ; /* printf("%d '%s' '%s'\n", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); */ } YAZ_CHECK_EQ(icu_chain_token_number(chain), 1); dest8 = (char *) icu_chain_token_norm(chain); YAZ_CHECK_EQ(strcmp(src8, dest8), 0); icu_chain_destroy(chain); } static void check_icu_iter1(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain *chain = 0; xmlNode *xml_node; yaz_icu_iter_t iter; const char *xml_str = "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); YAZ_CHECK(doc); if (!doc) return; xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); if (!xml_node) return ; chain = icu_chain_xml_config(xml_node, 1, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); iter = icu_iter_create(chain); icu_iter_first(iter, "a string with 15 tokens and 8 displays"); YAZ_CHECK(iter); if (!iter) return; while (icu_iter_next(iter)) { yaz_log(YLOG_LOG, "[%s]", icu_iter_get_norm(iter)); } icu_iter_destroy(iter); icu_chain_destroy(chain); } static int test_iter(struct icu_chain *chain, const char *input, const char *expected) { yaz_icu_iter_t iter = icu_iter_create(chain); WRBUF result, second, sort_result; int success = 1; if (!iter) { yaz_log(YLOG_WARN, "test_iter: input=%s !iter", input); return 0; } if (icu_iter_next(iter)) { yaz_log(YLOG_WARN, "test_iter: expecting 0 before icu_iter_first"); return 0; } sort_result = wrbuf_alloc(); result = wrbuf_alloc(); icu_iter_first(iter, input); while (icu_iter_next(iter)) { const char *sort_str = icu_iter_get_sortkey(iter); if (sort_str) { wrbuf_puts(sort_result, "["); wrbuf_puts_escaped(sort_result, sort_str); wrbuf_puts(sort_result, "]"); } else { wrbuf_puts(sort_result, "[NULL]"); } wrbuf_puts(result, "["); wrbuf_puts(result, icu_iter_get_norm(iter)); wrbuf_puts(result, "]"); } yaz_log(YLOG_LOG, "sortkey=%s", wrbuf_cstr(sort_result)); second = wrbuf_alloc(); icu_iter_first(iter, input); while (icu_iter_next(iter)) { wrbuf_puts(second, "["); wrbuf_puts(second, icu_iter_get_norm(iter)); wrbuf_puts(second, "]"); } icu_iter_destroy(iter); if (strcmp(expected, wrbuf_cstr(result))) { yaz_log(YLOG_WARN, "test_iter: input=%s expected=%s got=%s", input, expected, wrbuf_cstr(result)); success = 0; } if (strcmp(expected, wrbuf_cstr(second))) { yaz_log(YLOG_WARN, "test_iter: input=%s expected=%s got=%s (2nd)", input, expected, wrbuf_cstr(second)); success = 0; } wrbuf_destroy(result); wrbuf_destroy(second); wrbuf_destroy(sort_result); return success; } static void *iter_thread(void *p) { struct icu_chain *chain = (struct icu_chain *) p; int i; for (i = 0; i < 1000; i++) { YAZ_CHECK(test_iter(chain, "Adobe Acrobat Reader, 1991-1999.", "[adobe][acrobat][reader][1991][][1999][]")); } return 0; } static void check_iter_threads(struct icu_chain *chain) { #if YAZ_POSIX_THREADS #define NO_THREADS 1 pthread_t t[NO_THREADS]; int i; for (i = 0; i < NO_THREADS; i++) pthread_create(t + i, 0, iter_thread, chain); for (i = 0; i < NO_THREADS; i++) pthread_join(t[i], 0); #endif } static void check_icu_iter2(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain *chain = 0; xmlNode *xml_node; const char *xml_str = "" "" "" "" "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); YAZ_CHECK(doc); if (!doc) return; xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); if (!xml_node) return ; chain = icu_chain_xml_config(xml_node, 1, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); if (!chain) return; YAZ_CHECK(test_iter(chain, "Adobe Acrobat Reader, 1991-1999.", "[adobe][acrobat][reader][1991][][1999][]")); YAZ_CHECK(test_iter(chain, "ÎόταÏης, Γιάννης Σωτ", "[νόταÏης][γιάννης][σωτ]")); check_iter_threads(chain); icu_chain_destroy(chain); } static void check_icu_iter3(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain *chain = 0; xmlNode *xml_node; const char *xml_str = "\n" "\n" "\n" "\n" "\n" "\n" "\n"; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); YAZ_CHECK(doc); if (!doc) return; xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); if (!xml_node) return ; chain = icu_chain_xml_config(xml_node, 1, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); if (!chain) return; YAZ_CHECK(test_iter(chain, "Adobe Acrobat Reader, 1991-1999.", "[adobeacrobatreader19911999]")); YAZ_CHECK(test_iter(chain, "ÎόταÏης, Γιάννης Σωτ", "[νοταÏηςγιαννηςσωτ]")); icu_chain_destroy(chain); } static void check_icu_iter4(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain *chain = 0; xmlNode *xml_node; const char *xml_str = "" "" "" "" "" "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); YAZ_CHECK(doc); if (!doc) return; xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); if (!xml_node) return ; chain = icu_chain_xml_config(xml_node, 1, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); if (!chain) return; YAZ_CHECK(test_iter(chain, "Adobe Acrobat Reader, 1991-1999.", "[adobeacrobatreader19911999]")); YAZ_CHECK(test_iter(chain, "ÎόταÏης, Γιάννης Σωτ", "[νόταÏηςγιάννηςσωτ]")); // check_iter_threads(chain); icu_chain_destroy(chain); } static void check_norm(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain *chain = 0; xmlNode *xml_node; yaz_icu_iter_t it; const char *xml_str = " " " " " " " " " " " "; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); YAZ_CHECK(doc); if (!doc) return; xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); if (!xml_node) return ; chain = icu_chain_xml_config(xml_node, 1, &status); it = icu_iter_create(chain); if (it) { icu_iter_first(it, " y😄"); while (icu_iter_next(it)) { const char *norm_str = icu_iter_get_norm(it); size_t start, len; YAZ_CHECK(norm_str); if (norm_str) yaz_log(YLOG_LOG, "norm_str len=%ld=%s", (long) strlen(norm_str), norm_str); icu_iter_get_org_info(it, &start, &len); YAZ_CHECK(start <= 1000); YAZ_CHECK(len <= 1000); } icu_iter_first(it, "\n y😄"); while (icu_iter_next(it)) { const char *norm_str = icu_iter_get_norm(it); size_t start, len; YAZ_CHECK(norm_str); if (norm_str) yaz_log(YLOG_LOG, "norm_str len=%ld=%s", (long) strlen(norm_str), norm_str); icu_iter_get_org_info(it, &start, &len); YAZ_CHECK(start <= 1000); YAZ_CHECK(len <= 1000); } } icu_iter_destroy(it); icu_chain_destroy(chain); xmlFreeDoc(doc); } #endif /* YAZ_HAVE_ICU */ int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); #if YAZ_HAVE_ICU check_icu_casemap(); check_icu_sortmap(); check_icu_normalizer(); check_icu_tokenizer(); check_icu_chain(); check_chain_empty_token(); check_chain_empty_chain(); check_icu_iter1(); check_icu_iter2(); check_icu_iter3(); check_icu_iter4(); check_bug_1140(); check_norm(); u_cleanup(); #else /* YAZ_HAVE_ICU */ yaz_log(YLOG_LOG, "ICU unit tests omitted"); YAZ_CHECK(0 == 0); #endif /* YAZ_HAVE_ICU */ YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/xml2marc0.xml.marc0000644000175000017500000000007613572540030013563 0000000000000000062cgm a2200037Ia 4500092002400000 áaDVD CHI 791.43bQIyaz-5.28.0/test/test_log_thread.c0000644000175000017500000000304213265142510013622 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if YAZ_POSIX_THREADS #include static void *t_loop2(void *vp) { int i, sz = 10; for (i = 0; i 02075cas a22005055a 4500 2005336282 DLC 20070911033614.0 070910c20059999mr uu p f0 0ara 2005336282 -3-7-0709110002-p----- (OCoLC)170490164 7 und serials u ncip 19 n-oclcserc DLC DLC DLC ara fre lc f-mr--- IN PROCESS (3 880-01 QadÌ£āʼ al-usrah : majallah mutakhasÌ£sÌ£isÌ£ah / WizaÌ„rat al-Ê»Adl. Justice de la famille 880-02 Majallat QadÌ£āʼ al-usrah <2006> 880-03 al-RabaÌ„tÌ£ : JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah, 2005- v. : ill. ; 24 cm. Irregular (semiannual) 880-04 al-Ê»Adad 1. (YuÌ„lyuÌ„z 2005)- 880-05 ManshuÌ„raÌ„t JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah Some issues have also a distinctive title. Latest issue consulted: al-Ê»Adad 3. (Dujanbir 2006). Chiefly in Arabic; some French. Domestic relations (Islamic law) Morocco. Divorce (Islamic law) Marriage law Morocco. Law reports, digests, etc. Morocco. 880-06 JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah. 880-07 Morocco. WizaÌ„rat al-Ê»Adl. DLC 245-01/(3/r قضاء الأسرة : مجلة متخصصة / وزارة العدل. 246-02/(3/r مجلة قضاء الأسرة <2006> 260-03/(3/r الرباط : جمعية نشر المعلومة القانونية والقضائية، 2005- 362-04/(3/r العدد 1. (يوليوز 2005)- 490-05/(3/r منشورات جمعية نشر المعلومة القانونية والقضائية 710-06/(3/r جمعية نشر المعلومة القانونية والقضائية. 710-07/(3/r Morocco. وزارة العدل. LC Cairo Office [we 45] yaz-5.28.0/test/marc0.xml0000644000175000017500000000042113572540030012031 00000000000000 00062cgm a2200037Ia 4500 DVD CHI 791.43 QI yaz-5.28.0/test/marc3.xml.marc0000644000175000017500000000162213572540030012761 0000000000000000914naa a2200337 450 001001700000004000900017008002400026009001000050041000800060041000800068097000700076245003300083300002600116557003300142630001600175630001300191633001000204633000900214648006100223648001600284648005400300J01000600354BAS000500360LKR004200365CAT003000407CAT003000437CAT003000467CAT003900497CAT002600536UID001400562 aa00001508fa airn a1991bxxlnortav9 aagxx anor deng00a06 aByfornyelse ved Ibsen-Ringen bfarvefotobplanbsnit aByggekunstj1991v1/2k41-45 fbyfornyelse fsanering fNorge fOslo aTelje Torp Aasen ArkitektkontorcKristian Augustsgate 7B aEng, Dagfin ranlund, TomcKristian AugustsgatecPilestredet 19 aa 0 aITMlARK50b0000145y1991i1/2k41-45 abc20020111lARK01h2002 abc20020111lARK01h2116 abc20021002lARK01h1000 aICLLOADb00c20021122lARK01h1948 c20030618lARK01h1330 aa00001508yaz-5.28.0/test/tmarc0.xml.marc0000644000175000017500000000007613572540030013144 0000000000000000062cgm a2200037Ia 4500092002400000 áaDVD CHI 791.43bQIyaz-5.28.0/test/marc7.json.marc0000644000175000017500000000604513572540030013142 0000000000000003109cam 2200349 i 4500001001300000003000400013005001700017008004100034035001000075035001000085035001000095040001300105906004500118010001700163245005200180260002100232300002100253500004300274500017600317500020000493500016100693500019500854500017801049500022001227500020501447500019901652500017701851500021402028500021502242500016102457500014102618 77123332 DLC20051218154744.0981008b2001 ilu 000 0 eng  a57779 a90490 a93202 aDLCcDLC a0bundcorignewduencipf19gy-gencatlg a 77123332 00aVoyager Diacritic test -- New input 001 (SBIE). any :bny,c2001. a100 p. ;c12 cm. aNew copy imported from file (8/12/99). aVOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡). aVOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·). aVOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʼ); alpha α; Ayn (Ê»); Polish l (Å‚). aVOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð). aVOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta β; Gamma γ; Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³). aVOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½). aVOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇). aVOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ). aVOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (oÍ¡). aVOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥). aVOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (oÍ ); Double Tilde 2nd half (o) ; High Comma centered (oÌ“). aVOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~). aStandard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>?yaz-5.28.0/test/tmarc8.xml0000644000175000017500000001014713572540030012233 00000000000000 02647nam^a2200469^^^4500 UCD-002592301 20061209034435.0 m d cr bn |||a|bb| 920330s1583 enk s 000 0 eng d 99851339eo CL0036000039 ProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 Cu-RivES Cu-RivES CStRLIN dcrb WaOLN Clinton, Atkinson. Clinton, Purser & Arnold, to their countreymen wheresoeuer [electronic resource] : Wherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie Clinton, Purser & Arnold, to their countreymen wheresoever Clinton, Purser & Arnold, to their countreymen wheresoever London : Imprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church, [1583?] [12] p In verse The first poem is signed: Thomas Walton alias Purser Clinton's full name and bookseller's name from, and publication date conjectured by, STC Signatures: Aâ´ B² Reproduction of the original in the Bodleian Library STC (2nd ed.) 5431 Also issued in print and on microform Electronic reproduction. Mode of access: World Wide Web. Restricted to UC campuses Electronic texts. local Pirates England Early works to 1800. Walton, Thomas, fl. 1583. aut Arnold, fl. 1583. aut Early English books online MER kmain SCB nnet Restricted to UC campuses SCP UCSD http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 Restricted to UC campuses SCP UCSD http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 DVXL ELECT-GEN Internet LAGE in Online access Restricted to UC campuses SCP UCSD http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 Restricted to UC campuses http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 CDL Early English books, 1475-1640 ; 1406:13. DVXL 002592301 yaz-5.28.0/test/test_matchstr.c0000644000175000017500000000427613265142510013351 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK(yaz_matchstr("x", "x") == 0); YAZ_CHECK(yaz_matchstr("x", "X") == 0); YAZ_CHECK(yaz_matchstr("a", "b") > 0); YAZ_CHECK(yaz_matchstr("b", "a") > 0); YAZ_CHECK(yaz_matchstr("aa","a") > 0); YAZ_CHECK(yaz_matchstr("a-", "a") > 0); YAZ_CHECK(yaz_matchstr("A-b", "ab") == 0); YAZ_CHECK(yaz_matchstr("A--b", "ab") > 0); YAZ_CHECK(yaz_matchstr("A--b", "a-b") > 0); YAZ_CHECK(yaz_matchstr("A--b", "a--b") == 0); YAZ_CHECK(yaz_matchstr("a123", "a?") == 0); YAZ_CHECK(yaz_matchstr("a123", "a1.3") == 0); YAZ_CHECK(yaz_matchstr("a123", "..?") == 0); YAZ_CHECK(yaz_matchstr("a123", "a1.") > 0); YAZ_CHECK(yaz_matchstr("a123", "a...") == 0); YAZ_CHECK_EQ(yaz_strncasecmp("a", "b", 0), 0); YAZ_CHECK_EQ(yaz_strncasecmp("a", "a", 1), 0); YAZ_CHECK_EQ(yaz_strncasecmp("a", "a", 2), 0); YAZ_CHECK_EQ(yaz_strncasecmp("a", "b", 1), -1); YAZ_CHECK_EQ(yaz_strncasecmp("a", "b", 2), -1); YAZ_CHECK_EQ(yaz_strncasecmp("b", "a", 1), 1); YAZ_CHECK_EQ(yaz_strncasecmp("b", "a", 2), 1); YAZ_CHECK_EQ(yaz_strncasecmp("bb", "ba", 1), 0); YAZ_CHECK_EQ(yaz_strncasecmp("bb", "ba", 2), 1); YAZ_CHECK_EQ(yaz_strncasecmp("ba", "bb", 2), -1); YAZ_CHECK_EQ(yaz_strncasecmp("ba", "b", 2), 'a'); YAZ_CHECK_EQ(yaz_strncasecmp("b", "ba", 2), -'a'); YAZ_CHECK_EQ(yaz_strcasecmp("", ""), 0); YAZ_CHECK_EQ(yaz_strcasecmp("a", "a"), 0); YAZ_CHECK_EQ(yaz_strcasecmp("a", "b"), -1); YAZ_CHECK_EQ(yaz_strcasecmp("b", "a"), 1); YAZ_CHECK_EQ(yaz_strcasecmp("bb", "ba"), 1); YAZ_CHECK_EQ(yaz_strcasecmp("ba", "bb"), -1); YAZ_CHECK_EQ(yaz_strcasecmp("ba", "b"), 'a'); YAZ_CHECK_EQ(yaz_strcasecmp("b", "ba"), -'a'); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/test_odr.c0000644000175000017500000002261013265142510012300 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "test_odrcodec.h" #include #define MYOID "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19" void tst_MySequence1(ODR encode, ODR decode) { int ret; char *ber_buf; int ber_len; Yc_MySequence *s = (Yc_MySequence *) odr_malloc(encode, sizeof(*s)); Yc_MySequence *t; YAZ_CHECK(s); s->first = odr_intdup(encode, 12345); s->second = (Odr_oct *) odr_malloc(encode, sizeof(*s->second)); s->second->buf = (char *) "hello"; s->second->len = 5; s->third = odr_booldup(encode, 1); s->fourth = odr_nullval(); s->fifth = odr_intdup(encode, YC_MySequence_enum1); s->myoid = odr_getoidbystr(decode, MYOID); ret = yc_MySequence(encode, &s, 0, 0); YAZ_CHECK(ret); if (!ret) return; ber_buf = odr_getbuf(encode, &ber_len, 0); odr_setbuf(decode, ber_buf, ber_len, 0); ret = yc_MySequence(decode, &t, 0, 0); YAZ_CHECK(ret); if (!ret) return; YAZ_CHECK(t); YAZ_CHECK(t->first && *t->first == 12345); YAZ_CHECK(t->second && t->second->buf && t->second->len == 5); YAZ_CHECK(t->second && t->second->buf && t->second->len == 5 && memcmp(t->second->buf, "hello", t->second->len) == 0); YAZ_CHECK(t->third && *t->third == 1); YAZ_CHECK(t->fourth); YAZ_CHECK(t->fifth && *t->fifth == YC_MySequence_enum1); YAZ_CHECK(t->myoid); if (t->myoid) { Odr_oid *myoid = odr_getoidbystr(decode, MYOID); YAZ_CHECK(oid_oidcmp(myoid, t->myoid) == 0); } } void tst_MySequence2(ODR encode, ODR decode) { int ret; Yc_MySequence *s = (Yc_MySequence *) odr_malloc(encode, sizeof(*s)); YAZ_CHECK(s); s->first = 0; /* deliberately miss this .. */ s->second = (Odr_oct *) odr_malloc(encode, sizeof(*s->second)); s->second->buf = (char *) "hello"; s->second->len = 5; s->third = odr_booldup(encode, 1); s->fourth = odr_nullval(); s->fifth = odr_intdup(encode, YC_MySequence_enum1); s->myoid = odr_getoidbystr(encode, MYOID); ret = yc_MySequence(encode, &s, 0, 0); /* should fail */ YAZ_CHECK(!ret); YAZ_CHECK(odr_geterror(encode) == OREQUIRED); YAZ_CHECK(strcmp(odr_getelement(encode), "first") == 0); odr_reset(encode); YAZ_CHECK(odr_geterror(encode) == ONONE); YAZ_CHECK(strcmp(odr_getelement(encode), "") == 0); } void tst_MySequence3(ODR encode, ODR decode) { char buf[40]; int i; Yc_MySequence *t; srand(123); for (i = 0; i < 1000; i++) { int j; for (j = 0; j < (int) sizeof(buf); j++) buf[j] = rand(); for (j = 1; j < (int) sizeof(buf); j++) { odr_setbuf(decode, buf, j, 0); yc_MySequence(decode, &t, 0, 0); odr_reset(decode); } } } static void tst_berint32(ODR encode, ODR decode) { char *buf = 0; int len = 0; Odr_int val; Odr_int ret_val; int r; val = 0; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 2); YAZ_CHECK_EQ(buf[0], 1); YAZ_CHECK_EQ(buf[1], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 0); val = 1; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 2); YAZ_CHECK_EQ(buf[0], 1); YAZ_CHECK_EQ(buf[1], 1); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 1); val = -1; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 2); YAZ_CHECK_EQ(buf[0], 1); YAZ_CHECK_EQ((unsigned char) buf[1], 255); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, -1); val = 127; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 2); YAZ_CHECK_EQ(buf[0], 1); YAZ_CHECK_EQ(buf[1], 127); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 127); val = 128; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 3); YAZ_CHECK_EQ(buf[0], 2); YAZ_CHECK_EQ(buf[1], 0); YAZ_CHECK_EQ(((unsigned char *) buf)[2], 128); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 128); val = 2147483647; /* 2^31-1 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 5); YAZ_CHECK_EQ(buf[0], 4); YAZ_CHECK_EQ(buf[1], 127); YAZ_CHECK_EQ((unsigned char) buf[2], 255); YAZ_CHECK_EQ((unsigned char) buf[3], 255); YAZ_CHECK_EQ((unsigned char) buf[4], 255); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 2147483647); val = -2147483647L -1; /* -2^31 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 5); YAZ_CHECK_EQ(buf[0], 4); YAZ_CHECK_EQ((unsigned char) buf[1], 128); YAZ_CHECK_EQ(buf[2], 0); YAZ_CHECK_EQ(buf[3], 0); YAZ_CHECK_EQ(buf[4], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, (Odr_int) -2147483647L -1); } static void tst_berint64(ODR encode, ODR decode) { #if NMEM_64 char *buf = 0; int len = 0; Odr_int val; Odr_int ret_val; int r; val = (Odr_int) 2 * 2147483648UL; /* 2^32 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 6); YAZ_CHECK_EQ(buf[0], 5); YAZ_CHECK_EQ(buf[1], 1); YAZ_CHECK_EQ(buf[2], 0); YAZ_CHECK_EQ(buf[3], 0); YAZ_CHECK_EQ(buf[4], 0); YAZ_CHECK_EQ(buf[5], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, val); val = (Odr_int) -2 * 2147483648UL; /* -2^32 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 6); YAZ_CHECK_EQ(buf[0], 5); YAZ_CHECK_EQ((unsigned char) buf[1], 255); YAZ_CHECK_EQ(buf[2], 0); YAZ_CHECK_EQ(buf[3], 0); YAZ_CHECK_EQ(buf[4], 0); YAZ_CHECK_EQ(buf[5], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, val); val = (Odr_int) 1000 * 1000000000L; /* 10^12 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 7); YAZ_CHECK_EQ(buf[0], 6); YAZ_CHECK_EQ(buf[1], 0); YAZ_CHECK_EQ((unsigned char) buf[2], 232); YAZ_CHECK_EQ((unsigned char) buf[3], 212); YAZ_CHECK_EQ((unsigned char) buf[4], 165); YAZ_CHECK_EQ(buf[5], 16); YAZ_CHECK_EQ(buf[6], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, val); #endif } static void tst(void) { ODR odr_encode = odr_createmem(ODR_ENCODE); ODR odr_decode = odr_createmem(ODR_DECODE); YAZ_CHECK(odr_encode); YAZ_CHECK(odr_decode); tst_MySequence1(odr_encode, odr_decode); tst_MySequence2(odr_encode, odr_decode); tst_MySequence3(odr_encode, odr_decode); tst_berint32(odr_encode, odr_decode); tst_berint64(odr_encode, odr_decode); odr_destroy(odr_encode); odr_destroy(odr_decode); } /* example from documentation.. 'Using Odr' */ void do_nothing_useful(Odr_int value) { ODR encode, decode; Odr_int *valp, *resvalp; char *bufferp; int len; /* allocate streams */ if (!(encode = odr_createmem(ODR_ENCODE))) return; if (!(decode = odr_createmem(ODR_DECODE))) return; valp = &value; if (odr_integer(encode, &valp, 0, 0) == 0) { printf("encoding went bad\n"); return; } bufferp = odr_getbuf(encode, &len, 0); printf("length of encoded data is %d\n", len); /* now let's decode the thing again */ odr_setbuf(decode, bufferp, len, 0); if (odr_integer(decode, &resvalp, 0, 0) == 0) { printf("decoding went bad\n"); return; } /* ODR_INT_PRINTF format for printf (such as %d) */ printf("the value is " ODR_INT_PRINTF "\n", *resvalp); /* clean up */ odr_destroy(encode); odr_destroy(decode); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/tmarc6.xml.marc0000644000175000017500000000055613572540030013155 0000000000000000366nam a22001698a 4500001001300000003000400013005001700017008004100034010001700075040001300092050001200105100001700117245003000134260001200164263000900176300001100185 11224466 DLC00000000000000.0910710c19910701nju 00010 eng  a 11224466  aDLCcDLC00a123-xyz10aJack Collins10aHow to program a computer1 aPenguin a8710 ap. cm.yaz-5.28.0/test/marccol3.u8.marc0000644000175000017500000000244113250277530013220 0000000000000001313cam a2200349ua 450000100090000000300040000900500170001300800410003003500170007101000170008803500260010504000310013105000230016206600070018508200140019210000280020624500850023425000220031926001060034130000290044744000420047665000330051870000280055188000280057988000920060788000230069988001020072288000480082488000280087290600450090098500180094582129893DLC20070808062021.0841102s1980 cc a 000 0 chi  a(DLC)5011703 a 82129893  a(CStRLIN)DCLP84-B3561 aDLC-RcDLC-RdCStRLINdDLC00aTL546.7b.S48 1980 c$100a629.42191 6880-01aShen, Guoliang.106880-02aYu zhou hang xing he shu li hua /cShen Guoliang wen ; Chen Genxiang tu. 6880-03aDi 1 ban. 6880-04a[Canton] :bGuangdong ren min chu ban she :bGuangdong sheng xin hua shu dian fa xing,c1980. a199 p. :bill. ;c19 cm. 06880-05aKe xue zhi shi pu ji cong shu 0aAstronauticsxPopular works.1 6880-06aChen, Genxiang.1 6100-01/1a沈 国良.106245-02/1a宇宙 航行 和 数ç†åŒ– /c沈 国良 文 ; 陈 根祥 图. 6250-03/1a第1版. 6260-04/1a[Canton] :b广东 人民 出版社 :b广东çœã€€æ–°è¯ã€€æ›¸åº— å‘行,c1980. 06440-05/1a科学 知识 普åŠã€€ä¸›ä¹¦1 6700-06/1a陈 根祥. a0bcbccorignewduencipf19gy-rlinjack aspacingreloadyaz-5.28.0/test/test_file_glob.c0000644000175000017500000000400413265142510013433 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include void tst_with_path(const char *tpath) { yaz_glob_res_t glob_res; int ret = yaz_file_glob(tpath, &glob_res); if (ret == 0) { size_t n = yaz_file_glob_get_num(glob_res); size_t i; for (i = 0; i < n; i++) { yaz_log(YLOG_LOG, "match %s", yaz_file_glob_get_file(glob_res, i)); } } yaz_file_globfree(&glob_res); } static int check_file(const char *got, const char *expect) { const char *f = got; size_t l_match = strlen(expect); YAZ_CHECK(f && strlen(f) >= l_match); if (f && strlen(f) >= l_match && !strcmp(f + strlen(f) - l_match, expect)) return 1; return 0; } void tst(void) { yaz_glob_res_t glob_res; int ret; WRBUF tpath = wrbuf_alloc(); const char *srcdir = getenv("srcdir"); if (srcdir) { wrbuf_puts(tpath, srcdir); wrbuf_puts(tpath, "/"); } wrbuf_puts(tpath, "test_file*.c"); ret = yaz_file_glob(wrbuf_cstr(tpath), &glob_res); YAZ_CHECK_EQ(ret, 0); YAZ_CHECK_EQ(2, yaz_file_glob_get_num(glob_res)); if (yaz_file_glob_get_num(glob_res) == 2) { YAZ_CHECK(check_file(yaz_file_glob_get_file(glob_res, 0), "test_file_glob.c")); YAZ_CHECK(check_file(yaz_file_glob_get_file(glob_res, 1), "test_filepath.c")); } wrbuf_destroy(tpath); yaz_file_globfree(&glob_res); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); if (argc >= 2) tst_with_path(argv[1]); else tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/xml2tmarc1.xml.marc0000644000175000017500000000173513572540030013753 0000000000000000989nam0a32003011 450 001002800000004001000028008002800038009001100066021002700077032001500104100002100119245005400140250004100194260004000235300002700275504012300302512006100425520005000486652002400536652001600560666001600576666001900592666001500611666001800626666001900644666000900663666001500672000a9 181 423 4b710100fa000rnae000tmuua2002buslengv0000aagxx000a1-4000-4596-7d$14,00000&DBC2004390000aSlomanhLarry000aOn the road with Bob DylaneLarry "Ratso" Sloman000aRevised editionbThree Rivers Press000aNew YorkbThree Rivers Pressc2002000axv, 464 sider, tavler000aLarry "Ratso" Slomans meget personlige beretning om Bob Dylans koncertturne i USA i 1975: "The Rolling Thunder revue"000aPÃ¥ omslaget: With a new introduction by Kinky Friedman000aTidligere: 1. udgave. New York, Bantam, 19780000m99.4aDylanhBob000p78.9064v5000ffolkemusik000ffolkemusikere000frockmusik000frockmusikere000frockkoncerter000eUSA000i1970-1979yaz-5.28.0/test/tmarc0.xml0000644000175000017500000000027713572540030012226 00000000000000 00062cgm a2200037Ia 4500 DVD CHI 791.43 QI yaz-5.28.0/test/test_xmalloc.c0000644000175000017500000000177713265142510013166 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include void tst(void) { char *p = 0; p = (char *) xmalloc(10); YAZ_CHECK(p); p = (char *) xrealloc(p, 20); YAZ_CHECK(p); xfree(p); p = xstrdup("hello"); YAZ_CHECK(p); if (!p) return; YAZ_CHECK(!strcmp(p, "hello")); xfree(p); p = xstrndup("hello", 2); YAZ_CHECK(p); if (!p) return; YAZ_CHECK(!strcmp(p, "he")); xfree(p); p = xstrndup("hello", 6); YAZ_CHECK(p); if (!p) return; YAZ_CHECK(!strcmp(p, "hello")); xfree(p); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-5.28.0/test/marc5.json.marc0000644000175000017500000000075413572540030013141 0000000000000000492nam a22001455a 450000100100000000500170001000800410002710000520006824501040012025000140022426000230023830000160026165000510027765000180032800027748520051026111436.0050413s1894 gr 000 0 gre d1 aΜαÏοÏδης, Κωνσταντίνος Ιω10aΕλληνικόν κÏυπτογÏαφικόν λεξικόν /cΚωνστ. Ι. ΜαÏοÏδης. η εκδ. aΑθήνα,c1894. a248 σελ. 0aGreek language, ModernxDialectsvDictionaries 0aCryptography.yaz-5.28.0/test/marc5.chr0000644000175000017500000000000613572540030012011 00000000000000utf-8 yaz-5.28.0/test/marccol2.u8.marc0000644000175000017500000000603713250277530013224 0000000000000003103cam a2200337 i 45000010009000000050017000090080041000260350010000670350010000770350010000870400013000979060045001100100017001552450051001722600019002233000012002425000042002545000175002965000199004715000170006705000194008405000197010345000220012315000204014515000198016555000177018535000216020305000218022465000160024645000141026241268384920051218154744.0981008b2001 ilu 000 0 eng  a57779 a90490 a93202 aDLCcDLC a0bundcorignewduencipf19gy-gencatlg a 77123332 00aVoyager Diacritic test -- New input 001 (SBIE) anybny,c2001. ap.ccm. aNew copy imported from file (8/12/99) aVOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡) aVOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·) aVOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʾ); alpha (DO NOT USE); Ayn (Ê»); Polish l (Å‚) aVOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð) aVOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta (DO NOT USE); Gamma (DO NOT USE); Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³) aVOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½); aVOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇) aVOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ) aVOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (o︠) aVOYAGER COLUMN 9: Ligature right (o︡) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥) aVOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (o︢); Double Tilde 2nd half (o︣) ; High Comma centered (oÌ“) aVOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~) aStandard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>?yaz-5.28.0/test/marccol4.u8.2.lst0000644000175000017500000000234113250277530013240 0000000000000001390nas a2200313 a 4500 001 2007210635 003 DLC 005 20071005153240.0 008 071005c200u9999ja | | d0jpn 010 $a 2007210635 035 $a (OCoLC)173684089 040 $a DLC $c DLC $d DLC 042 $a lc 043 $a a-ja--- 050 00 $a T27.J32 $b S83a 066 $c $1 110 2 $6 880-01 $a SangyoÌ„ Gijutsu SoÌ„goÌ„ KenkyuÌ„jo. $b Shikoku Sangakukan Renkei SentaÌ„. 245 10 $6 880-02 $a Shikoku Sangakukan Renkei Sentā̄ katsudo hokoku. 246 11 $a Activity report 260 $6 880-03 $a Kagawa-ken Takamatsu-shi : $b SangyoÌ„ Gijutsu SoÌ„goÌ„ KenkyuÌ„jo Shikoku Sangakukan Renkei SentaÌ„ 500 $a Description based on: 2005; title from cover. 610 20 $a SangyoÌ„ Gijutsu SoÌ„goÌ„ KenkyuÌ„jo. $b Shikoku Sangakukan Renkei SentaÌ„ $v Periodicals. 650 0 $a Technology $z Japan $v Periodicals. 650 0 $a Technological innovations $z Japan $v Periodicals. 850 $a DLC 880 2 $6 110-01/$1 $a 産業技術ç·åˆç ”究所. $b 四国産学官連æºã‚»ãƒ³ã‚¿ãƒ¼. 880 10 $6 245-02/$1 $a 四国産学官連æºã‚»ãƒ³ã‚¿Ì„̄ー活動報告. 880 $6 260-03/$1 $a 香å·çœŒé«˜æ¾å¸‚ : $b 産業技術ç·åˆç ”究所研究所四国産学官連æºã‚»ãƒ³ã‚¿ãƒ¼. 880 24 $6 610-00/$1 $a 産業技術ç·åˆç ”究所. $b 四国産学官連æºã‚»ãƒ³ã‚¿Ì„̄ー $v Periodicals. yaz-5.28.0/test/marccol2.u8.1.lst0000644000175000017500000000562113250277530013241 0000000000000003103cam a2200337 i 4500 001 12683849 005 20051218154744.0 008 981008b2001 ilu 000 0 eng 035 $a 57779 035 $a 90490 035 $a 93202 040 $a DLC $c DLC 906 $a 0 $b und $c orignew $d u $e ncip $f 19 $g y-gencatlg 010 $a 77123332 245 00 $a Voyager Diacritic test -- New input 001 (SBIE) 260 $a ny $b ny, $c 2001. 300 $a p. $c cm. 500 $a New copy imported from file (8/12/99) 500 $a VOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡) 500 $a VOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·) 500 $a VOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʾ); alpha (DO NOT USE); Ayn (Ê»); Polish l (Å‚) 500 $a VOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð) 500 $a VOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta (DO NOT USE); Gamma (DO NOT USE); Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³) 500 $a VOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½); 500 $a VOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇) 500 $a VOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ) 500 $a VOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (o︠) 500 $a VOYAGER COLUMN 9: Ligature right (o︡) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥) 500 $a VOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (o︢); Double Tilde 2nd half (o︣) ; High Comma centered (oÌ“) 500 $a VOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~) 500 $a Standard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>? yaz-5.28.0/test/tmarc2.xml.marc0000644000175000017500000000214113572540030013141 0000000000000001121nam0a32002171 450 001002800000004001000028008002800038009001100066039000900077100001900086245005900105260003300164300001000197512007300207531001400280538001900294652001500313666004900328795050600377795002000883000a9 182 502 3b710100fa000rcae000tsufa1995bgblengv0000asgxc000abef000aMimmshGarnet000aCry babyaWarm and soulfuleGarnet Mimms ... [et al.]000aBury St. EdmundsbBGOc1995000n1 cd000aIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)000aIndhold:000fBGOgBGOCD268000m78.794v4000msoulmrhythm & bluesnvokalp1960-1969lUSA000Ã¥11aCry babyaNobody but youaUntil you were goneaAnytime you want meaSo closeaFor your precious loveaBaby don't you weepaA ¤quiet placeaCry to meaDon't change your heartaWanting youaThe ¤truth hurtsaI'll take good care of youaLooking for youaIt won't hurt (half as much)aIt was easier to hurt heraThinkin'aProve it to meaMore than a miracleaAs long as I have youaOne girlaThere goes my babyaIt's just a matter of timeaA ¤little bit of soapaLook awayaI'll make it up to you000Ã¥40y0a1 girlyaz-5.28.0/test/marc4.chr0000644000175000017500000000001313572540030012006 00000000000000iso-8859-1 yaz-5.28.0/test/test_record_conv.c0000644000175000017500000005371613265142510014032 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include #if YAZ_HAVE_XSLT #include #endif yaz_record_conv_t conv_configure(const char *xmlstring, WRBUF w) { xmlDocPtr doc = xmlParseMemory(xmlstring, strlen(xmlstring)); if (!doc) { wrbuf_printf(w, "xmlParseMemory"); return 0; } else { xmlNodePtr ptr = xmlDocGetRootElement(doc); yaz_record_conv_t p = yaz_record_conv_create(); if (p) { const char *srcdir = getenv("srcdir"); if (srcdir) yaz_record_conv_set_path(p, srcdir); } if (!ptr) { wrbuf_printf(w, "xmlDocGetRootElement"); yaz_record_conv_destroy(p); p = 0; } else if (!p) { wrbuf_printf(w, "yaz_record_conv_create"); } else { int r = yaz_record_conv_configure(p, ptr); if (r) { wrbuf_puts(w, yaz_record_conv_get_error(p)); yaz_record_conv_destroy(p); p = 0; } } xmlFreeDoc(doc); return p; } } int conv_configure_test(const char *xmlstring, const char *expect_error, yaz_record_conv_t *pt) { WRBUF w = wrbuf_alloc(); int ret; yaz_record_conv_t p = conv_configure(xmlstring, w); if (!p) { if (expect_error && !strcmp(wrbuf_cstr(w), expect_error)) ret = 1; else { ret = 0; printf("%s\n", wrbuf_cstr(w)); } } else { if (expect_error) ret = 0; else ret = 1; } if (pt) *pt = p; else if (p) yaz_record_conv_destroy(p); wrbuf_destroy(w); return ret; } static void tst_configure(void) { YAZ_CHECK(conv_configure_test("" "", "Element : " "unsupported element ", 0)); #if YAZ_HAVE_XSLT YAZ_CHECK(conv_configure_test("" "" "" "", "Element : attribute 'inputformat' " "required", 0)); YAZ_CHECK(conv_configure_test("" "" "", "Element : attribute 'stylesheet' " "expected", 0)); #endif YAZ_CHECK(conv_configure_test("" "" "" "", #if YAZ_HAVE_XSLT 0 #else "Element : unsupported element " #endif , 0)); } static int conv_convert_test(yaz_record_conv_t p, const char *input_record, const char *output_expect_record) { int ret = 0; if (!p) { YAZ_CHECK(ret); } else { WRBUF output_record = wrbuf_alloc(); int r = yaz_record_conv_record(p, input_record, strlen(input_record), output_record); if (r) { if (output_expect_record) { printf("yaz_record_conv error=%s\n", yaz_record_conv_get_error(p)); ret = 0; } else ret = 1; } else { if (!output_expect_record) { ret = 0; } else if (strcmp(output_expect_record, wrbuf_cstr(output_record))) { ret = 0; printf("got-output_record len=%ld: %s\n", (long) wrbuf_len(output_record), wrbuf_cstr(output_record)); printf("output_expect_record len=%ld %s\n", (long) strlen(output_expect_record), output_expect_record); } else { ret = 1; } } wrbuf_destroy(output_record); } return ret; } static int conv_convert_test_iter(yaz_record_conv_t p, const char *input_record, const char *output_expect_record, int num_iter) { int i; int ret; for (i = 0; i < num_iter; i++) { ret = conv_convert_test(p, input_record, output_expect_record); if (!ret) break; } return ret; } static void tst_convert1(void) { yaz_record_conv_t p = 0; const char *marcxml_rec = "\n" " 00080nam a22000498a 4500\n" " 11224466 \n" " \n" " 11224466 \n" " \n" "\n"; const char *tmarcxml_rec = "\n" " 00080nam a22000498a 4500\n" " 11224466 \n" " \n" " 11224466 \n" " \n" "\n"; const char *iso2709_rec = "\x30\x30\x30\x38\x30\x6E\x61\x6D\x20\x61\x32\x32\x30\x30\x30\x34" "\x39\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x31\x30\x30\x30\x31\x37\x30\x30\x30\x31\x33" "\x1E\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x20\x20" "\x1F\x61\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x1D"; const char *solrmarc_rec = "\x30\x30\x30\x38\x30\x6E\x61\x6D\x20\x61\x32\x32\x30\x30\x30\x34" "\x39\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x31\x30\x30\x30\x31\x37\x30\x30\x30\x31\x33" "#30;\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20#30;\x20\x20" "#31;\x61\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20#30;#29;"; const char *raw_rec = /* raw is xml-string of marcxml_rec */ "<record xmlns=\"http://www.loc.gov/MARC21/slim\">\n" " <leader>00080nam a22000498a 4500</leader>\n" " <controlfield tag=\"001\"> 11224466 </controlfield>\n" " <datafield tag=\"010\" ind1=\" \" ind2=\" \">\n" " <subfield code=\"a\"> 11224466 </subfield>\n" " </datafield>\n" "</record>\n\n"; YAZ_CHECK(conv_configure_test("" "" "", 0, &p)); YAZ_CHECK(conv_convert_test(p, marcxml_rec, iso2709_rec)); YAZ_CHECK(conv_convert_test(p, tmarcxml_rec, iso2709_rec)); yaz_record_conv_destroy(p); YAZ_CHECK(conv_configure_test("" "" "", 0, &p)); YAZ_CHECK(conv_convert_test(p, iso2709_rec, marcxml_rec)); yaz_record_conv_destroy(p); YAZ_CHECK(conv_configure_test("" "" "" "", 0, &p)); YAZ_CHECK(conv_convert_test(p, solrmarc_rec, marcxml_rec)); yaz_record_conv_destroy(p); YAZ_CHECK(conv_configure_test("" "" "" "" "" "", 0, &p)); YAZ_CHECK(conv_convert_test(p, marcxml_rec, marcxml_rec)); yaz_record_conv_destroy(p); YAZ_CHECK(conv_configure_test("" "" "" "" "" "", 0, &p)); YAZ_CHECK(conv_convert_test(p, marcxml_rec, marcxml_rec)); yaz_record_conv_destroy(p); YAZ_CHECK(conv_configure_test("" "