Mercurial > hg > xemacs-beta
comparison src/text.h @ 4985:358aa3bb603f
Automatic merge
| author | Ben Wing <ben@xemacs.org> |
|---|---|
| date | Fri, 05 Feb 2010 12:12:28 -0600 |
| parents | 3c3c1d139863 |
| children | ae48681c47fa 46cf825f6158 |
comparison
equal
deleted
inserted
replaced
| 4984:f23cd0184dcf | 4985:358aa3bb603f |
|---|---|
| 1934 \ | 1934 \ |
| 1935 ASSERT_ASCTEXT_ASCII_LEN (ei6, ei6len); \ | 1935 ASSERT_ASCTEXT_ASCII_LEN (ei6, ei6len); \ |
| 1936 eicpy_ext_len (ei, ei6, ei6len, Qbinary); \ | 1936 eicpy_ext_len (ei, ei6, ei6len, Qbinary); \ |
| 1937 } while (0) | 1937 } while (0) |
| 1938 | 1938 |
| 1939 #define eicpy_ext_len(ei, extdata, extlen, codesys) \ | 1939 #define eicpy_ext_len(ei, extdata, extlen, codesys) \ |
| 1940 do { \ | 1940 do { \ |
| 1941 const Extbyte *ei7 = (extdata); \ | 1941 const Extbyte *ei7 = (extdata); \ |
| 1942 int ei7len = (extlen); \ | 1942 int ei7len = (extlen); \ |
| 1943 \ | 1943 \ |
| 1944 SIZED_EXTERNAL_TO_SIZED_C_STRING (ei7, ei7len, (ei)->data_, \ | 1944 TO_INTERNAL_FORMAT (DATA, (ei7, ei7len), \ |
| 1945 (ei)->bytelen_, codesys); \ | 1945 ALLOCA, ((ei)->data_, (ei)->bytelen_), \ |
| 1946 (ei)->max_size_allocated_ = (ei)->bytelen_ + 1; \ | 1946 codesys); \ |
| 1947 (ei)->max_size_allocated_ = (ei)->bytelen_ + 1; \ | |
| 1947 (ei)->charlen_ = bytecount_to_charcount ((ei)->data_, (ei)->bytelen_); \ | 1948 (ei)->charlen_ = bytecount_to_charcount ((ei)->data_, (ei)->bytelen_); \ |
| 1948 } while (0) | 1949 } while (0) |
| 1949 | 1950 |
| 1950 #define eicpy_ext(ei, extdata, codesys) \ | 1951 #define eicpy_ext(ei, extdata, codesys) \ |
| 1951 do { \ | 1952 do { \ |
| 2809 sink = make_opaque (dfc_sink.data.ptr, dfc_sink.data.len) | 2810 sink = make_opaque (dfc_sink.data.ptr, dfc_sink.data.len) |
| 2810 #define DFC_LISP_LSTREAM_USE_CONVERTED_DATA(sink) /* data already used */ | 2811 #define DFC_LISP_LSTREAM_USE_CONVERTED_DATA(sink) /* data already used */ |
| 2811 #define DFC_LISP_BUFFER_USE_CONVERTED_DATA(sink) \ | 2812 #define DFC_LISP_BUFFER_USE_CONVERTED_DATA(sink) \ |
| 2812 Lstream_delete (XLSTREAM (dfc_sink.lisp_object)) | 2813 Lstream_delete (XLSTREAM (dfc_sink.lisp_object)) |
| 2813 | 2814 |
| 2814 /* #define TEST_NEW_DFC */ | |
| 2815 | |
| 2816 /* Convenience macros for extremely common invocations */ | |
| 2817 #ifdef TEST_NEW_DFC | |
| 2818 #define C_STRING_TO_EXTERNAL(in, out, codesys) \ | |
| 2819 do { * (Extbyte **) &(out) = \ | |
| 2820 NEW_C_STRING_TO_EXTERNAL (in, codesys); } while (0) | |
| 2821 #define SIZED_C_STRING_TO_EXTERNAL(in, inlen, out, codesys) \ | |
| 2822 do { * (Extbyte **) &(out) = \ | |
| 2823 NEW_SIZED_C_STRING_TO_EXTERNAL (in, inlen, codesys); } while (0) | |
| 2824 #define EXTERNAL_TO_C_STRING(in, out, codesys) \ | |
| 2825 do { * (Ibyte **) &(out) = \ | |
| 2826 NEW_EXTERNAL_TO_C_STRING (in, codesys); } while (0) | |
| 2827 #define SIZED_EXTERNAL_TO_C_STRING(in, inlen, out, codesys) \ | |
| 2828 do { * (Ibyte **) &(out) = \ | |
| 2829 NEW_SIZED_EXTERNAL_TO_C_STRING (in, inlen, codesys); } while (0) | |
| 2830 #define LISP_STRING_TO_EXTERNAL(in, out, codesys) \ | |
| 2831 do { * (Extbyte **) &(out) = \ | |
| 2832 NEW_LISP_STRING_TO_EXTERNAL (in, codesys); } while (0) | |
| 2833 #else | |
| 2834 #define C_STRING_TO_EXTERNAL(in, out, codesys) \ | |
| 2835 TO_EXTERNAL_FORMAT (C_STRING, in, C_STRING_ALLOCA, out, codesys) | |
| 2836 #define SIZED_C_STRING_TO_EXTERNAL(in, inlen, out, codesys) \ | |
| 2837 TO_EXTERNAL_FORMAT (DATA, (in, inlen), C_STRING_ALLOCA, out, codesys) | |
| 2838 #define EXTERNAL_TO_C_STRING(in, out, codesys) \ | |
| 2839 TO_INTERNAL_FORMAT (C_STRING, in, C_STRING_ALLOCA, out, codesys) | |
| 2840 #define SIZED_EXTERNAL_TO_C_STRING(in, inlen, out, codesys) \ | |
| 2841 TO_INTERNAL_FORMAT (DATA, (in, inlen), C_STRING_ALLOCA, out, codesys) | |
| 2842 #define LISP_STRING_TO_EXTERNAL(in, out, codesys) \ | |
| 2843 TO_EXTERNAL_FORMAT (LISP_STRING, in, C_STRING_ALLOCA, out, codesys) | |
| 2844 #endif /* TEST_NEW_DFC */ | |
| 2845 | |
| 2846 #define C_STRING_TO_SIZED_EXTERNAL(in, out, outlen, codesys) \ | |
| 2847 TO_EXTERNAL_FORMAT (C_STRING, in, ALLOCA, (out, outlen), codesys) | |
| 2848 #define SIZED_C_STRING_TO_SIZED_EXTERNAL(in, inlen, out, outlen, codesys) \ | |
| 2849 TO_EXTERNAL_FORMAT (DATA, (in, inlen), ALLOCA, (out, outlen), codesys) | |
| 2850 #define EXTERNAL_TO_SIZED_C_STRING(in, out, outlen, codesys) \ | |
| 2851 TO_INTERNAL_FORMAT (C_STRING, in, ALLOCA, (out, outlen), codesys) | |
| 2852 #define SIZED_EXTERNAL_TO_SIZED_C_STRING(in, inlen, out, outlen, codesys) \ | |
| 2853 TO_INTERNAL_FORMAT (DATA, (in, inlen), ALLOCA, (out, outlen), codesys) | |
| 2854 #define LISP_STRING_TO_SIZED_EXTERNAL(in, out, outlen, codesys) \ | |
| 2855 TO_EXTERNAL_FORMAT (LISP_STRING, in, ALLOCA, (out, outlen), codesys) | |
| 2856 | |
| 2857 /* In place of EXTERNAL_TO_LISP_STRING(), use build_extstring() and/or | |
| 2858 make_extstring(). */ | |
| 2859 | |
| 2860 #ifdef TEST_NEW_DFC | |
| 2861 #define C_STRING_TO_EXTERNAL_MALLOC(in, out, codesys) \ | |
| 2862 do { * (Extbyte **) &(out) = \ | |
| 2863 NEW_C_STRING_TO_EXTERNAL_MALLOC (in, codesys); } while (0) | |
| 2864 #define SIZED_C_STRING_TO_EXTERNAL_MALLOC(in, inlen, out, codesys) \ | |
| 2865 do { * (Extbyte **) &(out) = \ | |
| 2866 NEW_SIZED_C_STRING_TO_EXTERNAL_MALLOC (in, inlen, codesys); } \ | |
| 2867 while (0) | |
| 2868 #define EXTERNAL_TO_C_STRING_MALLOC(in, out, codesys) \ | |
| 2869 do { * (Ibyte **) &(out) = \ | |
| 2870 NEW_EXTERNAL_TO_C_STRING_MALLOC (in, codesys); } while (0) | |
| 2871 #define SIZED_EXTERNAL_TO_C_STRING_MALLOC(in, inlen, out, codesys) \ | |
| 2872 do { * (Ibyte **) &(out) = \ | |
| 2873 NEW_SIZED_EXTERNAL_TO_C_STRING_MALLOC (in, inlen, codesys); } \ | |
| 2874 while (0) | |
| 2875 #define LISP_STRING_TO_EXTERNAL_MALLOC(in, out, codesys) \ | |
| 2876 do { * (Extbyte **) &(out) = \ | |
| 2877 NEW_LISP_STRING_TO_EXTERNAL_MALLOC (in, codesys); } while (0) | |
| 2878 #else | |
| 2879 #define C_STRING_TO_EXTERNAL_MALLOC(in, out, codesys) \ | |
| 2880 TO_EXTERNAL_FORMAT (C_STRING, in, C_STRING_MALLOC, out, codesys) | |
| 2881 #define SIZED_C_STRING_TO_EXTERNAL_MALLOC(in, inlen, out, codesys) \ | |
| 2882 TO_EXTERNAL_FORMAT (DATA, (in, inlen), C_STRING_MALLOC, out, codesys) | |
| 2883 #define EXTERNAL_TO_C_STRING_MALLOC(in, out, codesys) \ | |
| 2884 TO_INTERNAL_FORMAT (C_STRING, in, C_STRING_MALLOC, out, codesys) | |
| 2885 #define SIZED_EXTERNAL_TO_C_STRING_MALLOC(in, inlen, out, codesys) \ | |
| 2886 TO_INTERNAL_FORMAT (DATA, (in, inlen), C_STRING_MALLOC, out, codesys) | |
| 2887 #define LISP_STRING_TO_EXTERNAL_MALLOC(in, out, codesys) \ | |
| 2888 TO_EXTERNAL_FORMAT (LISP_STRING, in, C_STRING_MALLOC, out, codesys) | |
| 2889 #endif /* TEST_NEW_DFC */ | |
| 2890 | |
| 2891 #define C_STRING_TO_SIZED_EXTERNAL_MALLOC(in, out, outlen, codesys) \ | |
| 2892 TO_EXTERNAL_FORMAT (C_STRING, in, MALLOC, (out, outlen), codesys) | |
| 2893 #define SIZED_C_STRING_TO_SIZED_EXTERNAL_MALLOC(in, inlen, out, outlen, \ | |
| 2894 codesys) \ | |
| 2895 TO_EXTERNAL_FORMAT (DATA, (in, inlen), MALLOC, (out, outlen), codesys) | |
| 2896 #define EXTERNAL_TO_SIZED_C_STRING_MALLOC(in, out, outlen, codesys) \ | |
| 2897 TO_INTERNAL_FORMAT (C_STRING, in, MALLOC, (out, outlen), codesys) | |
| 2898 #define SIZED_EXTERNAL_TO_SIZED_C_STRING_MALLOC(in, inlen, out, outlen, \ | |
| 2899 codesys) \ | |
| 2900 TO_INTERNAL_FORMAT (DATA, (in, inlen), MALLOC, (out, outlen), codesys) | |
| 2901 #define LISP_STRING_TO_SIZED_EXTERNAL_MALLOC(in, out, outlen, codesys) \ | |
| 2902 TO_EXTERNAL_FORMAT (LISP_STRING, in, MALLOC, (out, outlen), codesys) | |
| 2903 | |
| 2904 enum new_dfc_src_type | 2815 enum new_dfc_src_type |
| 2905 { | 2816 { |
| 2906 DFC_EXTERNAL, | 2817 DFC_EXTERNAL, |
| 2907 DFC_SIZED_EXTERNAL, | 2818 DFC_SIZED_EXTERNAL, |
| 2908 DFC_INTERNAL, | 2819 DFC_INTERNAL, |
| 2921 MODULE_API void *new_dfc_convert_copy_data (const char *srctext, | 2832 MODULE_API void *new_dfc_convert_copy_data (const char *srctext, |
| 2922 void *alloca_data); | 2833 void *alloca_data); |
| 2923 | 2834 |
| 2924 END_C_DECLS | 2835 END_C_DECLS |
| 2925 | 2836 |
| 2926 /* Version of EXTERNAL_TO_C_STRING that *RETURNS* the translated string, | 2837 /* Version of EXTERNAL_TO_ITEXT that *RETURNS* the translated string, |
| 2927 still in alloca() space. Requires some trickiness to do this, but gets | 2838 still in alloca() space. Requires some trickiness to do this, but gets |
| 2928 it done! */ | 2839 it done! */ |
| 2929 | 2840 |
| 2930 /* NOTE: If you make two invocations of the dfc functions below in the same | 2841 /* NOTE: If you make two invocations of the dfc functions below in the same |
| 2931 subexpression and use the exact same expression for the source in both | 2842 subexpression and use the exact same expression for the source in both |
| 2943 #define NEW_DFC_CONVERT_1_ALLOCA(src, src_size, type, codesys) \ | 2854 #define NEW_DFC_CONVERT_1_ALLOCA(src, src_size, type, codesys) \ |
| 2944 new_dfc_convert_copy_data \ | 2855 new_dfc_convert_copy_data \ |
| 2945 (#src, ALLOCA_FUNCALL_OK (new_dfc_convert_size (#src, src, src_size, \ | 2856 (#src, ALLOCA_FUNCALL_OK (new_dfc_convert_size (#src, src, src_size, \ |
| 2946 type, codesys))) | 2857 type, codesys))) |
| 2947 | 2858 |
| 2948 #define NEW_EXTERNAL_TO_C_STRING(src, codesys) \ | 2859 #define EXTERNAL_TO_ITEXT(src, codesys) \ |
| 2949 (Ibyte *) NEW_DFC_CONVERT_1_ALLOCA (src, -1, DFC_EXTERNAL, codesys) | 2860 ((Ibyte *) NEW_DFC_CONVERT_1_ALLOCA (src, -1, DFC_EXTERNAL, codesys)) |
| 2950 #define NEW_EXTERNAL_TO_C_STRING_MALLOC(src, codesys) \ | 2861 #define EXTERNAL_TO_ITEXT_MALLOC(src, codesys) \ |
| 2951 (Ibyte *) new_dfc_convert_malloc (src, -1, DFC_EXTERNAL, codesys) | 2862 ((Ibyte *) new_dfc_convert_malloc (src, -1, DFC_EXTERNAL, codesys)) |
| 2952 #define NEW_SIZED_EXTERNAL_TO_C_STRING(src, len, codesys) \ | 2863 #define SIZED_EXTERNAL_TO_ITEXT(src, len, codesys) \ |
| 2953 (Ibyte *) NEW_DFC_CONVERT_1_ALLOCA (src, len, DFC_SIZED_EXTERNAL, codesys) | 2864 ((Ibyte *) NEW_DFC_CONVERT_1_ALLOCA (src, len, DFC_SIZED_EXTERNAL, codesys)) |
| 2954 #define NEW_SIZED_EXTERNAL_TO_C_STRING_MALLOC(src, len, codesys) \ | 2865 #define SIZED_EXTERNAL_TO_ITEXT_MALLOC(src, len, codesys) \ |
| 2955 (Ibyte *) new_dfc_convert_malloc (src, len, DFC_SIZED_EXTERNAL, codesys) | 2866 ((Ibyte *) new_dfc_convert_malloc (src, len, DFC_SIZED_EXTERNAL, codesys)) |
| 2956 #define NEW_C_STRING_TO_EXTERNAL(src, codesys) \ | 2867 #define ITEXT_TO_EXTERNAL(src, codesys) \ |
| 2957 (Extbyte *) NEW_DFC_CONVERT_1_ALLOCA (src, -1, DFC_INTERNAL, codesys) | 2868 ((Extbyte *) NEW_DFC_CONVERT_1_ALLOCA (src, -1, DFC_INTERNAL, codesys)) |
| 2958 #define NEW_C_STRING_TO_EXTERNAL_MALLOC(src, codesys) \ | 2869 #define ITEXT_TO_EXTERNAL_MALLOC(src, codesys) \ |
| 2959 (Extbyte *) new_dfc_convert_malloc (src, -1, DFC_INTERNAL, codesys) | 2870 ((Extbyte *) new_dfc_convert_malloc (src, -1, DFC_INTERNAL, codesys)) |
| 2960 #define NEW_SIZED_C_STRING_TO_EXTERNAL(src, len, codesys) \ | 2871 #define LISP_STRING_TO_EXTERNAL(src, codesys) \ |
| 2961 (Extbyte *) NEW_DFC_CONVERT_1_ALLOCA (src, len, DFC_SIZED_INTERNAL, codesys) | 2872 ((Extbyte *) NEW_DFC_CONVERT_1_ALLOCA (LISP_TO_VOID (src), -1, \ |
| 2962 #define NEW_SIZED_C_STRING_TO_EXTERNAL_MALLOC(src, len, codesys) \ | 2873 DFC_LISP_STRING, codesys)) |
| 2963 (Extbyte *) new_dfc_convert_malloc (src, len, DFC_SIZED_INTERNAL, codesys) | 2874 #define LISP_STRING_TO_EXTERNAL_MALLOC(src, codesys) \ |
| 2964 #define NEW_LISP_STRING_TO_EXTERNAL(src, codesys) \ | 2875 ((Extbyte *) new_dfc_convert_malloc (LISP_TO_VOID (src), -1, \ |
| 2965 (Extbyte *) NEW_DFC_CONVERT_1_ALLOCA (LISP_TO_VOID (src), -1, \ | 2876 DFC_LISP_STRING, codesys)) |
| 2966 DFC_LISP_STRING, codesys) | 2877 /* In place of EXTERNAL_TO_LISP_STRING(), use build_extstring() and/or |
| 2967 #define NEW_LISP_STRING_TO_EXTERNAL_MALLOC(src, codesys) \ | 2878 make_extstring(). */ |
| 2968 (Extbyte *) new_dfc_convert_malloc (LISP_TO_VOID (src), -1, \ | 2879 |
| 2969 DFC_LISP_STRING, codesys) | 2880 /* The next four have two outputs, so we make both of them be parameters */ |
| 2881 #define ITEXT_TO_SIZED_EXTERNAL(in, out, outlen, codesys) \ | |
| 2882 TO_EXTERNAL_FORMAT (C_STRING, in, ALLOCA, (out, outlen), codesys) | |
| 2883 #define LISP_STRING_TO_SIZED_EXTERNAL(in, out, outlen, codesys) \ | |
| 2884 TO_EXTERNAL_FORMAT (LISP_STRING, in, ALLOCA, (out, outlen), codesys) | |
| 2885 #define ITEXT_TO_SIZED_EXTERNAL_MALLOC(in, out, outlen, codesys) \ | |
| 2886 TO_EXTERNAL_FORMAT (C_STRING, in, MALLOC, (out, outlen), codesys) | |
| 2887 #define LISP_STRING_TO_SIZED_EXTERNAL_MALLOC(in, out, outlen, codesys) \ | |
| 2888 TO_EXTERNAL_FORMAT (LISP_STRING, in, MALLOC, (out, outlen), codesys) | |
| 2970 | 2889 |
| 2971 /* Wexttext functions. The type of Wexttext is selected at compile time | 2890 /* Wexttext functions. The type of Wexttext is selected at compile time |
| 2972 and will sometimes be wchar_t, sometimes char. */ | 2891 and will sometimes be wchar_t, sometimes char. */ |
| 2973 | 2892 |
| 2974 int wcscmp_ascii (const wchar_t *s1, const Ascbyte *s2); | 2893 int wcscmp_ascii (const wchar_t *s1, const Ascbyte *s2); |
| 3144 int __gsnum__ = (num); \ | 3063 int __gsnum__ = (num); \ |
| 3145 Extbyte * __gserr__ = strerror (__gsnum__); \ | 3064 Extbyte * __gserr__ = strerror (__gsnum__); \ |
| 3146 \ | 3065 \ |
| 3147 if (!__gserr__) \ | 3066 if (!__gserr__) \ |
| 3148 { \ | 3067 { \ |
| 3149 var = alloca_ibytes (99); \ | 3068 var = alloca_ibytes (99); \ |
| 3150 qxesprintf (var, "Unknown error %d", __gsnum__); \ | 3069 qxesprintf (var, "Unknown error %d", __gsnum__); \ |
| 3151 } \ | 3070 } \ |
| 3152 else \ | 3071 else \ |
| 3153 EXTERNAL_TO_C_STRING (__gserr__, var, Qstrerror_encoding); \ | 3072 var = EXTERNAL_TO_ITEXT (__gserr__, Qstrerror_encoding); \ |
| 3154 } while (0) | 3073 } while (0) |
| 3155 | 3074 |
| 3156 #endif /* INCLUDED_text_h_ */ | 3075 #endif /* INCLUDED_text_h_ */ |
