From 1baa27d098d5282cb942455f3f4a642ed21924d6 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 27 Aug 2016 02:13:27 +0200 Subject: update files from modules dir of libX11 1.3.4 --- nx-X11/lib/X11/imCallbk.c | 138 ++++++------- nx-X11/lib/X11/imDefFlt.c | 16 +- nx-X11/lib/X11/imDefIc.c | 57 ++++-- nx-X11/lib/X11/imDefIm.c | 84 +++++--- nx-X11/lib/X11/imDefLkup.c | 26 +-- nx-X11/lib/X11/imDispch.c | 10 +- nx-X11/lib/X11/imEvToWire.c | 32 +-- nx-X11/lib/X11/imExten.c | 12 +- nx-X11/lib/X11/imImSw.c | 18 +- nx-X11/lib/X11/imInsClbk.c | 5 +- nx-X11/lib/X11/imInt.c | 33 ++- nx-X11/lib/X11/imLcFlt.c | 66 ++++-- nx-X11/lib/X11/imLcGIc.c | 8 +- nx-X11/lib/X11/imLcIc.c | 21 +- nx-X11/lib/X11/imLcIm.c | 469 ++++++++++++++++++++++++++++++++++++++---- nx-X11/lib/X11/imLcLkup.c | 208 ++++++++++--------- nx-X11/lib/X11/imLcPrs.c | 151 ++++++++------ nx-X11/lib/X11/imLcSIc.c | 8 +- nx-X11/lib/X11/imRm.c | 486 +++++++++++++++++++++++++------------------- nx-X11/lib/X11/imRmAttr.c | 6 +- nx-X11/lib/X11/imThaiFlt.c | 203 ++++++++++-------- nx-X11/lib/X11/imThaiIc.c | 77 ++++--- nx-X11/lib/X11/imThaiIm.c | 38 ++-- nx-X11/lib/X11/imTrX.c | 70 ++++--- nx-X11/lib/X11/imTrans.c | 56 +++-- nx-X11/lib/X11/imTransR.c | 74 ++++--- nx-X11/lib/X11/lcDefConv.c | 2 +- nx-X11/lib/X11/lcEuc.c | 26 +-- nx-X11/lib/X11/lcGenConv.c | 108 +++++----- nx-X11/lib/X11/lcJis.c | 26 +-- nx-X11/lib/X11/lcSjis.c | 30 +-- nx-X11/lib/X11/lcUTF8Load.c | 15 +- nx-X11/lib/X11/omGeneric.c | 115 ++++++----- nx-X11/lib/X11/omText.c | 6 +- nx-X11/lib/X11/omTextEsc.c | 2 +- nx-X11/lib/X11/omTextPer.c | 2 +- nx-X11/lib/X11/omXChar.c | 10 +- 37 files changed, 1694 insertions(+), 1020 deletions(-) diff --git a/nx-X11/lib/X11/imCallbk.c b/nx-X11/lib/X11/imCallbk.c index b0414ed59..866b27c64 100644 --- a/nx-X11/lib/X11/imCallbk.c +++ b/nx-X11/lib/X11/imCallbk.c @@ -5,14 +5,14 @@ Copyright 1994 by Sony Corporation All Rights Reserved -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in +both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital, FUJITSU LIMITED and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written -prior permission. +prior permission. DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF @@ -29,7 +29,7 @@ PERFORMANCE OF THIS SOFTWARE. fujiwara@a80.tech.yk.fujitsu.co.jp Makoto Wakamatsu Sony Corporation makoto@sm.sony.co.jp - + ***********************************************************************/ #ifdef HAVE_CONFIG_H @@ -68,11 +68,11 @@ extern int _Xmblen (); #define sz_ximStatusDone 0 typedef enum { - XimCbSuccess, - XimCbNoCallback, - XimCbError, - XimCbQueued, - XimCbBadContextID, + XimCbSuccess, + XimCbNoCallback, + XimCbError, + XimCbQueued, + XimCbBadContextID, XimCbBadOpcode } XimCbStatus; @@ -111,7 +111,7 @@ Private XimCbStatus _XimPreeditStateNotifyCallback(Xim, Xic, char *, int); #endif /* NOTE: - * the table below depends on the protocol number + * the table below depends on the protocol number * defined in the IM Protocol document. */ static RConst XimCb callback_table[] = { @@ -149,11 +149,11 @@ _XimProcessPendingCallbacks(Xic ic) { XimPendingCallback pcbq; - while (((pcbq = ic->private.proto.pend_cb_que) != (XimPendingCallback)NULL) + while (((pcbq = ic->private.proto.pend_cb_que) != (XimPendingCallback)NULL) && _XimIsReadyForProcess(ic)) { - (void) (*callback_table[pcbq->major_opcode])(pcbq->im, - pcbq->ic, - pcbq->proto, + (void) (*callback_table[pcbq->major_opcode])(pcbq->im, + pcbq->ic, + pcbq->proto, pcbq->proto_len); ic->private.proto.pend_cb_que = pcbq->next; Xfree(pcbq->proto); /* free memory of XimPendingCallback */ @@ -183,9 +183,9 @@ _XimPutCbIntoQueue(Xic ic, XimPendingCallback call_data) } Public Bool -_XimCbDispatch(Xim xim, - INT16 len, - XPointer data, +_XimCbDispatch(Xim xim, + INT16 len, + XPointer data, XPointer call_data) { /* `data' points to the beginning of the packet defined in IM Protocol doc. @@ -260,16 +260,16 @@ _XimCbDispatch(Xim xim, } Private XimCbStatus -_XimGeometryCallback(Xim im, - Xic ic, - char* proto, +_XimGeometryCallback(Xim im, + Xic ic, + char* proto, int len) { XICCallback* cb = &ic->core.geometry_callback; /* invoke the callack */ - if (cb && cb->callback) { + if (cb && cb->callback) { (*cb->callback)((XIC)ic, cb->client_data, (XPointer)NULL); } else { @@ -283,9 +283,9 @@ _XimGeometryCallback(Xim im, } Private XimCbStatus -_XimStrConversionCallback(Xim im, - Xic ic, - char* proto, +_XimStrConversionCallback(Xim im, + Xic ic, + char* proto, int len) { XICCallback* cb = &ic->core.string_conversion_callback; /* check HM */ @@ -310,10 +310,10 @@ _XimStrConversionCallback(Xim im, /* no callback registered */ - _XimError(im, ic, - (CARD16)XIM_BadSomething, - (INT16)len, - (CARD16)XIM_STR_CONVERSION, + _XimError(im, ic, + (CARD16)XIM_BadSomething, + (INT16)len, + (CARD16)XIM_STR_CONVERSION, (char*)proto); /* send XIM_ERROR */ return XimCbNoCallback; } @@ -332,9 +332,9 @@ _XimStrConversionCallback(Xim im, length_in_bytes = (cbrec.text->encoding_is_wchar)? sizeof(wchar_t) * cbrec.text->length: /* wchar */ strlen(cbrec.text->string.mbs); /* mb */ - buf_len = XIM_HEADER_SIZE + + buf_len = XIM_HEADER_SIZE + sz_CARD16 + - 2 + length_in_bytes + + 2 + length_in_bytes + XIM_PAD(2 + length_in_bytes) + 2 + 2 + sz_CARD32 * cbrec.text->length; buf = (CARD8*)Xmalloc(buf_len); @@ -366,9 +366,9 @@ _XimStrConversionCallback(Xim im, } Private XimCbStatus -_XimPreeditStartCallback(Xim im, - Xic ic, - char* proto, +_XimPreeditStartCallback(Xim im, + Xic ic, + char* proto, int len) { XICCallback* cb = &ic->core.preedit_attr.start_callback; @@ -381,12 +381,12 @@ _XimPreeditStartCallback(Xim im, } else { - /* no callback registered + /* no callback registered */ - _XimError(im, ic, - (CARD16)XIM_BadSomething, - (INT16)len, - (CARD16)XIM_PREEDIT_START, + _XimError(im, ic, + (CARD16)XIM_BadSomething, + (INT16)len, + (CARD16)XIM_PREEDIT_START, (char*)proto); /* send XIM_ERROR */ return XimCbNoCallback; } @@ -415,9 +415,9 @@ _XimPreeditStartCallback(Xim im, } Private XimCbStatus -_XimPreeditDoneCallback(Xim im, - Xic ic, - char* proto, +_XimPreeditDoneCallback(Xim im, + Xic ic, + char* proto, int len) { XICCallback* cb = &ic->core.preedit_attr.done_callback; @@ -438,8 +438,8 @@ _XimPreeditDoneCallback(Xim im, } Private void -_read_text_from_packet(Xim im, - char* buf, +_read_text_from_packet(Xim im, + char* buf, XIMText** text_ptr) { int status; @@ -469,8 +469,8 @@ _read_text_from_packet(Xim im, tmp_buf[tmp_len] = '\0'; text->encoding_is_wchar = False; - text->length = im->methods->ctstombs((XIM)im, - tmp_buf, tmp_len, + text->length = im->methods->ctstombs((XIM)im, + tmp_buf, tmp_len, NULL, 0, &s); /* CT? HM */ if (s != XLookupNone) { #ifndef NO_DEC_I18N_FIX @@ -487,12 +487,12 @@ _read_text_from_packet(Xim im, int char_len; #endif tmp = im->methods->ctstombs((XIM)im, - tmp_buf, tmp_len, + tmp_buf, tmp_len, #ifndef NO_DEC_I18N_FIX text->string.multi_byte, text->length * XLC_PUBLIC(im->core.lcd,mb_cur_max) + 1, #else - text->string.multi_byte, text->length, + text->string.multi_byte, text->length, #endif &s); text->string.multi_byte[tmp] = '\0'; @@ -536,7 +536,7 @@ _read_text_from_packet(Xim im, i -= sz_CARD32; j++; } - /* + /* * text->length tells how long both the status string and * the feedback array are. If there's "no string" the * text->length was set to zero previously. See above. @@ -565,9 +565,9 @@ _free_memory_for_text(XIMText* text) } Private XimCbStatus -_XimPreeditDrawCallback(Xim im, - Xic ic, - char* proto, +_XimPreeditDrawCallback(Xim im, + Xic ic, + char* proto, int len) { XICCallback* cb = &ic->core.preedit_attr.draw_callback; @@ -596,8 +596,8 @@ _XimPreeditDrawCallback(Xim im, } Private XimCbStatus -_XimPreeditCaretCallback(Xim im, - Xic ic, +_XimPreeditCaretCallback(Xim im, + Xic ic, char* proto, int len) { @@ -615,12 +615,12 @@ _XimPreeditCaretCallback(Xim im, } else { - /* no callback registered + /* no callback registered */ - _XimError(im, ic, - (CARD16)XIM_BadSomething, - (INT16)len, - (CARD16)XIM_PREEDIT_CARET, + _XimError(im, ic, + (CARD16)XIM_BadSomething, + (INT16)len, + (CARD16)XIM_PREEDIT_CARET, (char*)proto); /* send XIM_ERROR */ return XimCbNoCallback; } @@ -648,9 +648,9 @@ _XimPreeditCaretCallback(Xim im, } Private XimCbStatus -_XimStatusStartCallback(Xim im, - Xic ic, - char* proto, +_XimStatusStartCallback(Xim im, + Xic ic, + char* proto, int len) { XICCallback* cb = &ic->core.status_attr.start_callback; @@ -671,9 +671,9 @@ _XimStatusStartCallback(Xim im, } Private XimCbStatus -_XimStatusDoneCallback(Xim im, - Xic ic, - char* proto, +_XimStatusDoneCallback(Xim im, + Xic ic, + char* proto, int len) { XICCallback* cb = &ic->core.status_attr.done_callback; @@ -694,9 +694,9 @@ _XimStatusDoneCallback(Xim im, } Private XimCbStatus -_XimStatusDrawCallback(Xim im, - Xic ic, - char* proto, +_XimStatusDrawCallback(Xim im, + Xic ic, + char* proto, int len) { XICCallback* cb = &ic->core.status_attr.draw_callback; @@ -735,7 +735,7 @@ _XimPreeditStateNotifyCallback( Xim im, Xic ic, char* proto, int len ) /* invoke the callack */ - if( cb && cb->callback ) { + if( cb && cb->callback ) { XIMPreeditStateNotifyCallbackStruct cbrec; cbrec.state = *(BITMASK32 *)proto; diff --git a/nx-X11/lib/X11/imDefFlt.c b/nx-X11/lib/X11/imDefFlt.c index b14d16889..9717aa2c3 100644 --- a/nx-X11/lib/X11/imDefFlt.c +++ b/nx-X11/lib/X11/imDefFlt.c @@ -10,7 +10,7 @@ in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of -this software for any purpose. +this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, @@ -21,7 +21,7 @@ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -261,7 +261,7 @@ _XimFilterKeyrelease( return _XimProtoKeyreleaseFilter((Xic)client_data, (XKeyEvent *)ev); } -Private void +Private void _XimRegisterKeyPressFilter( Xic ic) { @@ -278,7 +278,7 @@ _XimRegisterKeyPressFilter( return; } -Private void +Private void _XimRegisterKeyReleaseFilter( Xic ic) { @@ -295,7 +295,7 @@ _XimRegisterKeyReleaseFilter( return; } -Private void +Private void _XimUnregisterKeyPressFilter( Xic ic) { @@ -311,7 +311,7 @@ _XimUnregisterKeyPressFilter( return; } -Private void +Private void _XimUnregisterKeyReleaseFilter( Xic ic) { @@ -380,7 +380,7 @@ _XimFilterServerDestroy( return True; } -Public void +Public void _XimRegisterServerFilter( Xim im) { @@ -399,7 +399,7 @@ _XimRegisterServerFilter( return; } -Public void +Public void _XimUnregisterServerFilter( Xim im) { diff --git a/nx-X11/lib/X11/imDefIc.c b/nx-X11/lib/X11/imDefIc.c index 42c9a6d10..ba720b56c 100644 --- a/nx-X11/lib/X11/imDefIc.c +++ b/nx-X11/lib/X11/imDefIc.c @@ -1,29 +1,50 @@ +/* + * Copyright 1991, 1992 Sun Microsystems, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ /****************************************************************** - Copyright 1991, 1992 by Sun Microsystems, Inc. Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear -in supporting documentation, and that the name of Sun Microsystems, Inc. -and FUJITSU LIMITED not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Sun Microsystems, Inc. and FUJITSU LIMITED makes no representations about -the suitability of this software for any purpose. +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. It is provided "as is" without express or implied warranty. -Sun Microsystems Inc. AND FUJITSU LIMITED DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS, IN NO EVENT SHALL Sun Microsystems, Inc. AND FUJITSU LIMITED -BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. - Takashi Fujiwara FUJITSU LIMITED + Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -916,7 +937,7 @@ _XimProtoSetFocus( CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len; - + #ifndef XIM_CONNECTABLE if (!IS_IC_CONNECTED(ic)) return; @@ -947,6 +968,8 @@ _XimProtoSetFocus( (void)_XimWrite(im, len, (XPointer)buf); _XimFlush(im); + MARK_FOCUSED(ic); + _XimRegisterFilter(ic); return; } @@ -992,6 +1015,8 @@ _XimProtoUnsetFocus( (void)_XimWrite(im, len, (XPointer)buf); _XimFlush(im); + UNMARK_FOCUSED(ic); + _XimUnregisterFilter(ic); return; } @@ -1311,7 +1336,7 @@ _XimDelayModeCreateIC( XimDefICValues ic_values; int len; XIMStyle input_style; - + bzero((char *)&ic_values, sizeof(XimDefICValues)); _XimGetCurrentICValues(ic, &ic_values); if (!(_XimGetInputStyle(values, &input_style))) diff --git a/nx-X11/lib/X11/imDefIm.c b/nx-X11/lib/X11/imDefIm.c index 058a516e2..f29f44436 100644 --- a/nx-X11/lib/X11/imDefIm.c +++ b/nx-X11/lib/X11/imDefIm.c @@ -1,30 +1,50 @@ +/* + * Copyright 1990, 1991, 1992 Sun Microsystems, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + /****************************************************************** - Copyright 1990, 1991, 1992 by Sun Microsystems, Inc. Copyright 1992, 1993, 1994 by FUJITSU LIMITED Copyright 1993, 1994 by Sony Corporation -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that copyright -notice and this permission notice appear in supporting documentation, and -that the name of Sun Microsystems, Inc., FUJITSU LIMITED and Sony -Corporation not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Sun Microsystems, Inc., FUJITSU LIMITED and Sony Corporation makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -Sun Microsystems Inc., FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL -WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL Sun Microsystems, Inc., -FUJITSU LIMITED AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -OF THIS SOFTWARE. +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital, FUJITSU +LIMITED and Sony Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. - Takashi Fujiwara FUJITSU LIMITED + Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Makoto Wakamatsu Sony Corporation makoto@sm.sony.co.jp @@ -73,7 +93,7 @@ _XimSetHeader( return; } -Private char +Public char _XimGetMyEndian(void) { CARD16 test_card = 1; @@ -106,7 +126,7 @@ _XimCheckServerName( if(strncmp(str, XIM_SERVER_CATEGORY, category_len)) return False; - + pp = &str[category_len]; for(;;) { @@ -142,7 +162,7 @@ _XimCheckLocaleName( if(strncmp(address, XIM_LOCAL_CATEGORY, category_len)) return (char*)NULL; - + pp = &address[category_len]; for(;;) { @@ -166,7 +186,7 @@ Private Bool _XimCheckTransport( char *address, int address_len, - char *transport, + const char *transport, int len, char **trans_addr) { @@ -179,7 +199,7 @@ _XimCheckTransport( if(strncmp(address, XIM_TRANSPORT_CATEGORY, category_len)) return False; - + pp = &address[category_len]; for(;;) { @@ -254,7 +274,7 @@ _XimPreConnectionIM( Xim im, Atom selection) { - Display *display = im->core.display; + Display *display = im->core.display; Atom locales, transport; char *address; XLCd lcd; @@ -364,14 +384,14 @@ Error: if( locale_name[i] != NULL ) XFree( locale_name[i] ); XDestroyWindow(display, window); - return False; + return False; } Private Bool _XimPreConnect( Xim im) { - Display *display = im->core.display; + Display *display = im->core.display; Atom imserver; Atom actual_type; int actual_format; @@ -386,7 +406,7 @@ _XimPreConnect( return False; if(XGetWindowProperty(display, RootWindow(display, 0), - imserver, 0L, 1000000L, False, XA_ATOM, &actual_type, + imserver, 0L, 1000000L, False, XA_ATOM, &actual_type, &actual_format, &nitems, &bytes_after, &prop_return) != Success) return False; @@ -681,7 +701,7 @@ _XimConnection( } } - if (!( buf_s[0] == im->private.proto.protocol_major_version + if (!( buf_s[0] == im->private.proto.protocol_major_version && buf_s[1] == im->private.proto.protocol_minor_version)) { if(reply != preply) Xfree(preply); @@ -915,7 +935,7 @@ _XimClose( buf_s[1] = 0; /* unused */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16); /* sizeof unused */ - + _XimSetHeader((XPointer)buf, XIM_CLOSE, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; diff --git a/nx-X11/lib/X11/imDefLkup.c b/nx-X11/lib/X11/imDefLkup.c index 3b90fd8d4..d1c3a6567 100644 --- a/nx-X11/lib/X11/imDefLkup.c +++ b/nx-X11/lib/X11/imDefLkup.c @@ -10,7 +10,7 @@ in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of -this software for any purpose. +this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, @@ -21,7 +21,7 @@ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -213,8 +213,13 @@ _XimRespSyncReply( Xic ic, BITMASK16 mode) { - if (mode & XimSYNCHRONUS) /* SYNC Request */ - MARK_NEED_SYNC_REPLY(ic); + if (mode & XimSYNCHRONUS) /* SYNC Request */ { + if (IS_FOCUSED(ic)) + MARK_NEED_SYNC_REPLY(ic); + else + _XimProcSyncReply((Xim)ic->core.im, ic); + } + return True; } @@ -463,7 +468,7 @@ _XimGetWindowEventmask( Xim im = (Xim )ic->core.im; XWindowAttributes atr; - if (!_XGetWindowAttributes(im->core.display, ic->core.focus_window, &atr)) + if (!XGetWindowAttributes(im->core.display, ic->core.focus_window, &atr)) return 0; return (EVENTMASK)atr.your_event_mask; } @@ -885,13 +890,8 @@ _Ximctsconvert( } Public int -_Ximctstombs(xim, from, from_len, to, to_len, state) - XIM xim; - char *from; - int from_len; - char *to; - int to_len; - Status *state; +_Ximctstombs(XIM xim, char *from, int from_len, + char *to, int to_len, Status *state) { return _Ximctsconvert(((Xim)xim)->private.proto.ctom_conv, from, from_len, to, to_len, state); @@ -930,7 +930,7 @@ _Ximctstowcs( /* Reset the converter. The CompoundText at 'from' starts in initial state. */ _XlcResetConverter(conv); - + from_left = from_len; to_left = BUFSIZ; from_cnvlen = 0; diff --git a/nx-X11/lib/X11/imDispch.c b/nx-X11/lib/X11/imDispch.c index 951e75000..cd4870671 100644 --- a/nx-X11/lib/X11/imDispch.c +++ b/nx-X11/lib/X11/imDispch.c @@ -10,7 +10,7 @@ in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of -this software for any purpose. +this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, @@ -21,7 +21,7 @@ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -61,8 +61,7 @@ _XimRegProtoIntrCallback( } Public void -_XimFreeProtoIntrCallback(im) - Xim im; +_XimFreeProtoIntrCallback(Xim im) { register XimProtoIntrRec *rec, *next; @@ -97,8 +96,7 @@ _XimTransportIntr( } Public Bool -_XimDispatchInit(im) - Xim im; +_XimDispatchInit(Xim im) { if (_XimRegisterDispatcher(im, _XimTransportIntr, (XPointer)im)) return True; diff --git a/nx-X11/lib/X11/imEvToWire.c b/nx-X11/lib/X11/imEvToWire.c index d1837db21..45677c461 100644 --- a/nx-X11/lib/X11/imEvToWire.c +++ b/nx-X11/lib/X11/imEvToWire.c @@ -3,13 +3,13 @@ Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in +both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. +software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL @@ -55,14 +55,14 @@ _XimProtoEventToWire( event->u.keyButtonPointer.root = sw32(ev->root, sw); event->u.keyButtonPointer.event = sw32(ev->window, sw); - event->u.keyButtonPointer.child = + event->u.keyButtonPointer.child = sw32(ev->subwindow, sw); event->u.keyButtonPointer.time = sw32(ev->time, sw); event->u.keyButtonPointer.eventX = sw16(ev->x, sw) ; event->u.keyButtonPointer.eventY = sw16(ev->y, sw) ; event->u.keyButtonPointer.rootX = sw16(ev->x_root, sw); - event->u.keyButtonPointer.rootY = + event->u.keyButtonPointer.rootY = sw16(ev->y_root, sw); event->u.keyButtonPointer.state = sw16(ev->state, sw); event->u.keyButtonPointer.sameScreen = ev->same_screen; @@ -139,7 +139,7 @@ _XimProtoEventToWire( { register XKeymapEvent *ev = (XKeymapEvent *) re; memcpy((char *)(((xKeymapEvent *) event)->map), - &ev->key_vector[1], + &ev->key_vector[1], sizeof (((xKeymapEvent *) event)->map)); } break; @@ -356,12 +356,12 @@ _XimProtoEventToWire( case ClientMessage: { register int i; - register XClientMessageEvent *ev + register XClientMessageEvent *ev = (XClientMessageEvent *) re; event->u.clientMessage.window = sw32(ev->window, sw); event->u.u.detail = ev->format; switch (ev->format) { - case 8: + case 8: event->u.clientMessage.u.b.type = sw32(ev->message_type, sw); for (i = 0; i < 20; i++) event->u.clientMessage.u.b.bytes[i] = ev->data.b[i]; @@ -401,7 +401,7 @@ _XimProtoEventToWire( event->u.mappingNotify.count = ev->count; } break; - + default: return(0); } @@ -429,7 +429,7 @@ _XimProtoWireToEvent( ((XAnyEvent *)re)->serial = sw16(event->u.u.sequenceNumber, sw); ((XAnyEvent *)re)->send_event = ((event->u.u.type & 0x80) != 0); ((XAnyEvent *)re)->display = NULL; - + /* Ignore the leading bit of the event type since it is set when a client sends an event rather than the server. */ @@ -498,7 +498,7 @@ _XimProtoWireToEvent( ev->y_root = cvtINT16toInt(sw16(event->u.enterLeave.rootY, sw)); ev->state = sw16(event->u.enterLeave.state, sw); ev->mode = event->u.enterLeave.mode; - ev->same_screen = (event->u.enterLeave.flags & + ev->same_screen = (event->u.enterLeave.flags & ELFlagSameScreen) && True; ev->focus = (event->u.enterLeave.flags & ELFlagFocus) && True; @@ -518,7 +518,7 @@ _XimProtoWireToEvent( { register XKeymapEvent *ev = (XKeymapEvent *) re; ev->window = None; - memcpy(&ev->key_vector[1], + memcpy(&ev->key_vector[1], (char *)((xKeymapEvent *) event)->map, sizeof (((xKeymapEvent *) event)->map)); } @@ -736,14 +736,14 @@ _XimProtoWireToEvent( case ClientMessage: { register int i; - register XClientMessageEvent *ev + register XClientMessageEvent *ev = (XClientMessageEvent *) re; ev->window = sw32(event->u.clientMessage.window, sw); ev->format = event->u.u.detail; switch (ev->format) { - case 8: + case 8: ev->message_type = sw32(event->u.clientMessage.u.b.type, sw); - for (i = 0; i < 20; i++) + for (i = 0; i < 20; i++) ev->data.b[i] = event->u.clientMessage.u.b.bytes[i]; break; case 16: diff --git a/nx-X11/lib/X11/imExten.c b/nx-X11/lib/X11/imExten.c index 9eafdb270..3ffe7f891 100644 --- a/nx-X11/lib/X11/imExten.c +++ b/nx-X11/lib/X11/imExten.c @@ -10,7 +10,7 @@ in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of -this software for any purpose. +this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, @@ -21,7 +21,7 @@ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -48,7 +48,7 @@ PERFORMANCE OF THIS SOFTWARE. typedef struct _XIM_QueryExtRec { Bool is_support; - char *name; + const char *name; int name_len; CARD16 major_opcode; CARD16 minor_opcode; @@ -57,7 +57,7 @@ typedef struct _XIM_QueryExtRec { Private XIM_QueryExtRec extensions[] = { {False, "XIM_EXT_SET_EVENT_MASK", 0, 0, 0, - XIM_EXT_SET_EVENT_MASK_IDX}, + XIM_EXT_SET_EVENT_MASK_IDX}, #ifdef EXT_FORWARD {False, "XIM_EXT_FORWARD_KEYEVENT", 0, 0, 0, XIM_EXT_FORWARD_KEYEVENT_IDX}, @@ -222,7 +222,7 @@ _XimExtForwardKeyEvent( Xim im = (Xim) ic->core.im; CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; - CARD8 *buf_b = &buf[XIM_HEADER_SIZE]; + CARD8 *buf_b = &buf[XIM_HEADER_SIZE]; CARD16 *buf_s = (CARD16 *)buf_b; CARD32 *buf_l = (CARD32 *)buf_b; CARD32 reply32[BUFSIZE/4]; @@ -382,7 +382,7 @@ _XimParseExtensionList( + sizeof(CARD8) /* sizeof minor_opcode */ + sizeof(INT16) /* sizeof length */ + XIM_PAD(len); /* sizeof pad */ - buf += len; + buf += len; } return True; diff --git a/nx-X11/lib/X11/imImSw.c b/nx-X11/lib/X11/imImSw.c index e8a950417..acad4b8af 100644 --- a/nx-X11/lib/X11/imImSw.c +++ b/nx-X11/lib/X11/imImSw.c @@ -15,17 +15,17 @@ makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL -WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky Ling Digital Equipment Corporation frankyling@hgrd01.enet.dec.com diff --git a/nx-X11/lib/X11/imInsClbk.c b/nx-X11/lib/X11/imInsClbk.c index 5980d3efd..cb1905c01 100644 --- a/nx-X11/lib/X11/imInsClbk.c +++ b/nx-X11/lib/X11/imInsClbk.c @@ -108,7 +108,7 @@ _XimFilterPropertyNotify( } lock = True; - for( ii = 0; ii < nitems; ii++ ) { + for( ii = 0; ii < nitems; ii++, atoms ) { if(XGetSelectionOwner (display, atoms[ii])) { for( icb = callback_list; icb; icb = icb->next ) { if( !icb->call && !icb->destroy ) { @@ -268,8 +268,7 @@ _XimUnRegisterIMInstantiateCallback( Public void -_XimResetIMInstantiateCallback( xim ) - Xim xim; +_XimResetIMInstantiateCallback(Xim xim) { char locale[XIM_MAXLCNAMELEN]; XimInstCallback icb; diff --git a/nx-X11/lib/X11/imInt.c b/nx-X11/lib/X11/imInt.c index e149d8c56..c78ffc68d 100644 --- a/nx-X11/lib/X11/imInt.c +++ b/nx-X11/lib/X11/imInt.c @@ -10,7 +10,7 @@ in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of -this software for any purpose. +this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, @@ -21,7 +21,7 @@ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -61,7 +61,7 @@ _XimSetIMStructureList( } } if(i >= _XimCurrentIMcount) { - if(!(xim = (Xim *)Xrealloc(_XimCurrentIMlist, + if(!(xim = (Xim *)Xrealloc(_XimCurrentIMlist, ((i + 1) * sizeof(Xim))))) return False; _XimCurrentIMlist = xim; @@ -73,8 +73,7 @@ _XimSetIMStructureList( } Public void -_XimDestroyIMStructureList(im) - Xim im; +_XimDestroyIMStructureList(Xim im) { register int i; @@ -88,8 +87,7 @@ _XimDestroyIMStructureList(im) } Public void -_XimServerDestroy(im_2_destroy) - Xim im_2_destroy; +_XimServerDestroy(Xim im_2_destroy) { register int i; Xim im; @@ -123,7 +121,7 @@ _XimServerDestroy(im_2_destroy) #ifdef XIM_CONNECTABLE Public void -_XimServerReconectableDestroy() +_XimServerReconectableDestroy(void) { register int i; Xim im; @@ -149,13 +147,13 @@ _XimServerReconectableDestroy() } #endif /* XIM_CONNECTABLE */ -Private char * +Private const char * _XimStrstr( - register char *src, - register char *dest) + register const char *src, + register const char *dest) { int len; - + len = strlen(dest); while((src = strchr(src, *dest))) { if(!strncmp(src, dest, len)) @@ -169,10 +167,10 @@ Private char * _XimMakeImName( XLCd lcd) { - char* begin = NULL; - char* end = NULL; + const char* begin = NULL; + const char* end = NULL; char* ret = NULL; - char* ximmodifier = XIMMODIFIER; + const char* ximmodifier = XIMMODIFIER; if(lcd->core->modifiers != NULL && *lcd->core->modifiers != '\0') { begin = _XimStrstr(lcd->core->modifiers, ximmodifier); @@ -205,7 +203,7 @@ _XimOpenIM( { Xim im; register int i; - + if (!(im = (Xim)Xmalloc(sizeof(XimRec)))) return (XIM)NULL; bzero(im, sizeof(XimRec)); @@ -257,8 +255,7 @@ Error1: } Public Bool -_XInitIM(lcd) - XLCd lcd; +_XInitIM(XLCd lcd) { if(lcd == (XLCd)NULL) return False; diff --git a/nx-X11/lib/X11/imLcFlt.c b/nx-X11/lib/X11/imLcFlt.c index 6e054e34b..e812fdd0d 100644 --- a/nx-X11/lib/X11/imLcFlt.c +++ b/nx-X11/lib/X11/imLcFlt.c @@ -7,7 +7,7 @@ Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear -in supporting documentation, and that the name of Fuji Xerox, +in supporting documentation, and that the name of Fuji Xerox, FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Fuji Xerox, FUJITSU LIMITED make no representations @@ -24,7 +24,7 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author : Kazunori Nishihara Fuji Xerox - Modifier : Takashi Fujiwara FUJITSU LIMITED + Modifier : Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -38,43 +38,67 @@ PERFORMANCE OF THIS SOFTWARE. #include "Ximint.h" Bool -_XimLocalFilter(d, w, ev, client_data) - Display *d; - Window w; - XEvent *ev; - XPointer client_data; +_XimLocalFilter(Display *d, Window w, XEvent *ev, XPointer client_data) { Xic ic = (Xic)client_data; KeySym keysym; static char buf[256]; - DefTree *p; + DefTree *b = ic->private.local.base.tree; + DTIndex t; - if( (ev->type != KeyPress) - || (ev->xkey.keycode == 0) - || (((Xim)ic->core.im)->private.local.top == (DefTree *)NULL) ) - return(False); + if(ev->xkey.keycode == 0) + return (False); XLookupString((XKeyEvent *)ev, buf, sizeof(buf), &keysym, NULL); if(IsModifierKey(keysym)) return (False); - for(p = ic->private.local.context; p; p = p->next) { - if(((ev->xkey.state & p->modifier_mask) == p->modifier) && - (keysym == p->keysym)) { - break; + if(keysym >= XK_braille_dot_1 && keysym <= XK_braille_dot_8) { + if(ev->type == KeyPress) { + ic->private.local.brl_pressed |= + 1<<(keysym-XK_braille_dot_1); + } else { + if(!ic->private.local.brl_committing + || ev->xkey.time - ic->private.local.brl_release_start > 300) { + ic->private.local.brl_committing = ic->private.local.brl_pressed; + ic->private.local.brl_release_start = ev->xkey.time; + } + ic->private.local.brl_pressed &= ~(1<<(keysym-XK_braille_dot_1)); + if(!ic->private.local.brl_pressed) { + if(ic->private.local.brl_committing) { + ic->private.local.brl_committed = + ic->private.local.brl_committing; + ic->private.local.composed = 0; + ev->type = KeyPress; + ev->xkey.keycode = 0; + _XPutBackEvent(d, ev); + } + } } + return(True); + } + + if( (ev->type != KeyPress) + || (((Xim)ic->core.im)->private.local.top == 0 ) ) + return(False); + + for(t = ic->private.local.context; t; t = b[t].next) { + if(((ev->xkey.state & b[t].modifier_mask) == b[t].modifier) && + (keysym == b[t].keysym)) + break; } - if(p) { /* Matched */ - if(p->succession) { /* Intermediate */ - ic->private.local.context = p->succession; + if(t) { /* Matched */ + if(b[t].succession) { /* Intermediate */ + ic->private.local.context = b[t].succession; return(True); } else { /* Terminate (reached to leaf) */ - ic->private.local.composed = p; + ic->private.local.composed = t; + ic->private.local.brl_committed = 0; /* return back to client KeyPressEvent keycode == 0 */ ev->xkey.keycode = 0; - _XPutBackEvent(d, ev); + XPutBackEvent(d, ev); /* initialize internal state for next key sequence */ ic->private.local.context = ((Xim)ic->core.im)->private.local.top; return(True); diff --git a/nx-X11/lib/X11/imLcGIc.c b/nx-X11/lib/X11/imLcGIc.c index bd5c1eec1..26930c426 100644 --- a/nx-X11/lib/X11/imLcGIc.c +++ b/nx-X11/lib/X11/imLcGIc.c @@ -10,7 +10,7 @@ in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of -this software for any purpose. +this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, @@ -21,7 +21,7 @@ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -34,9 +34,7 @@ PERFORMANCE OF THIS SOFTWARE. #include "Ximint.h" Public char * -_XimLocalGetICValues(xic, values) - XIC xic; - XIMArg *values; +_XimLocalGetICValues(XIC xic, XIMArg *values) { Xic ic = (Xic)xic; XimDefICValues ic_values; diff --git a/nx-X11/lib/X11/imLcIc.c b/nx-X11/lib/X11/imLcIc.c index 79da511df..66ff3e913 100644 --- a/nx-X11/lib/X11/imLcIc.c +++ b/nx-X11/lib/X11/imLcIc.c @@ -10,7 +10,7 @@ in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of -this software for any purpose. +this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, @@ -21,7 +21,7 @@ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -85,7 +85,7 @@ _XimLocalSetFocus( if (ic->core.focus_window) _XRegisterFilterByType(ic->core.im->core.display, - ic->core.focus_window, KeyPress, KeyPress, + ic->core.focus_window, KeyPress, KeyRelease, _XimLocalFilter, (XPointer)ic); return; } @@ -95,8 +95,11 @@ _XimLocalReset( XIC xic) { Xic ic = (Xic)xic; - ic->private.local.composed = (DefTree *)NULL; - ic->private.local.context = ((Xim)ic->core.im)->private.local.top; + ic->private.local.composed = 0; + ic->private.local.context = ((Xim)ic->core.im)->private.local.top; + ic->private.local.brl_pressed = 0; + ic->private.local.brl_committing = 0; + ic->private.local.brl_committed = 0; } Private char * @@ -147,8 +150,12 @@ _XimLocalCreateIC( ic->methods = &Local_ic_methods; ic->core.im = im; - ic->private.local.context = ((Xim)im)->private.local.top; - ic->private.local.composed = (DefTree *)NULL; + ic->private.local.base = ((Xim)im)->private.local.base; + ic->private.local.context = ((Xim)im)->private.local.top; + ic->private.local.composed = 0; + ic->private.local.brl_pressed = 0; + ic->private.local.brl_committing = 0; + ic->private.local.brl_committed = 0; num = im->core.ic_num_resources; len = sizeof(XIMResource) * num; diff --git a/nx-X11/lib/X11/imLcIm.c b/nx-X11/lib/X11/imLcIm.c index fa73f43ba..81645e5bd 100644 --- a/nx-X11/lib/X11/imLcIm.c +++ b/nx-X11/lib/X11/imLcIm.c @@ -15,17 +15,17 @@ makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL -WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky Ling Digital Equipment Corporation frankyling@hgrd01.enet.dec.com @@ -48,10 +48,55 @@ THIS SOFTWARE. #include "XlcPubI.h" #include "Ximint.h" #include +#include + +#ifdef COMPOSECACHE +# include +# include +# include +# include +#endif + + +#ifdef COMPOSECACHE + +/* include trailing '/' for cache directory, file prefix otherwise */ +#define XIM_GLOBAL_CACHE_DIR "/var/cache/libx11/compose/" +#define XIM_HOME_CACHE_DIR "/.compose-cache/" +#define XIM_CACHE_MAGIC ('X' | 'i'<<8 | 'm'<<16 | 'C'<<24) +#define XIM_CACHE_VERSION 4 +#define XIM_CACHE_TREE_ALIGNMENT 4 + +#define XIM_HASH_PRIME_1 13 +#define XIM_HASH_PRIME_2 1234096939 + +typedef INT32 DTStructIndex; +struct _XimCacheStruct { + INT32 id; + INT32 version; + DTStructIndex tree; + DTStructIndex mb; + DTStructIndex wc; + DTStructIndex utf8; + DTStructIndex size; + DTIndex top; + DTIndex treeused; + DTCharIndex mbused; + DTCharIndex wcused; + DTCharIndex utf8used; + char fname[1]; + /* char encoding[1] */ +}; + +Private struct _XimCacheStruct* _XimCache_mmap = NULL; +Private DefTreeBase _XimCachedDefaultTreeBase; +Private int _XimCachedDefaultTreeRefcount = 0; + +#endif + Public Bool -_XimCheckIfLocalProcessing(im) - Xim im; +_XimCheckIfLocalProcessing(Xim im) { FILE *fp; char *name; @@ -76,23 +121,37 @@ _XimCheckIfLocalProcessing(im) Private void XimFreeDefaultTree( - DefTree *top) + DefTreeBase *b) { - if (!top) return; - if (top->succession) XimFreeDefaultTree(top->succession); - if (top->next) XimFreeDefaultTree(top->next); - if (top->mb) Xfree(top->mb); - if (top->wc) Xfree(top->wc); - if (top->utf8) Xfree(top->utf8); - Xfree(top); + if (!b) return; + if (b->tree == NULL) return; +#ifdef COMPOSECACHE + if (b->tree == _XimCachedDefaultTreeBase.tree) { + _XimCachedDefaultTreeRefcount--; + /* No deleting, it's a cache after all. */ + return; + } +#endif + Xfree (b->tree); + if (b->mb) Xfree (b->mb); + if (b->wc) Xfree (b->wc); + if (b->utf8) Xfree (b->utf8); + b->tree = NULL; + b->mb = NULL; + b->wc = NULL; + b->utf8 = NULL; + b->treeused = b->treesize = 0; + b->mbused = b->mbsize = 0; + b->wcused = b->wcsize = 0; + b->utf8used = b->utf8size = 0; } Public void _XimLocalIMFree( Xim im) { - XimFreeDefaultTree(im->private.local.top); - im->private.local.top = NULL; + XimFreeDefaultTree(&im->private.local.base); + im->private.local.top = 0; if(im->core.im_resources) { Xfree(im->core.im_resources); @@ -211,28 +270,282 @@ _XimLocalSetIMValues( return(name); } + +#ifdef COMPOSECACHE + +Private Bool +_XimReadCachedDefaultTree( + int fd_cache, + const char *name, + const char *encoding, + DTStructIndex size) +{ + struct _XimCacheStruct* m; + int namelen = strlen (name) + 1; + int encodinglen = strlen (encoding) + 1; + + m = mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd_cache, 0); + if (m == NULL || m == MAP_FAILED) + return False; + assert (m->id == XIM_CACHE_MAGIC); + assert (m->version == XIM_CACHE_VERSION); + if (size != m->size || + size < XOffsetOf (struct _XimCacheStruct, fname) + namelen + encodinglen) { + fprintf (stderr, "Ignoring broken XimCache %s [%s]\n", name, encoding); + munmap (m, size); + return False; + } + if (strncmp (name, m->fname, namelen) != 0) { + /* m->fname may *not* be terminated - but who cares here */ + fprintf (stderr, "Filename hash clash - expected %s, got %s\n", + name, m->fname); + munmap (m, size); + return False; + } + if (strncmp (encoding, m->fname + namelen, encodinglen) != 0) { + /* m->fname+namelen may *not* be terminated - but who cares here */ + fprintf (stderr, "Enoding hash clash - expected %s, got %s\n", + encoding, m->fname + namelen); + munmap (m, size); + return False; + } + _XimCache_mmap = m; + _XimCachedDefaultTreeBase.tree = (DefTree *) (((char *) m) + m->tree); + _XimCachedDefaultTreeBase.mb = (((char *) m) + m->mb); + _XimCachedDefaultTreeBase.wc = (wchar_t *) (((char *) m) + m->wc); + _XimCachedDefaultTreeBase.utf8 = (((char *) m) + m->utf8); + _XimCachedDefaultTreeBase.treeused = m->treeused; + _XimCachedDefaultTreeBase.mbused = m->mbused; + _XimCachedDefaultTreeBase.wcused = m->wcused; + _XimCachedDefaultTreeBase.utf8used = m->utf8used; + /* treesize etc. is ignored because only used during parsing */ + _XimCachedDefaultTreeRefcount = 0; +/* fprintf (stderr, "read cached tree at %p: %s\n", (void *) m, name); */ + return True; +} + +Private unsigned int strToHash ( + const char *name) +{ + unsigned int hash = 0; + while (*name) + hash = hash * XIM_HASH_PRIME_1 + *(unsigned const char *)name++; + return hash % XIM_HASH_PRIME_2; +} + + +/* Returns read-only fd of cache file, -1 if none. + * Sets *res to cache filename if safe. Sets *size to file size of cache. */ +Private int _XimCachedFileName ( + const char *dir, const char *name, + const char *intname, const char *encoding, + uid_t uid, int isglobal, char **res, off_t *size) +{ + struct stat st_name, st; + int fd; + unsigned int len, hash, hash2; + struct _XimCacheStruct *m; + /* There are some races here with 'dir', but we are either in our own home + * or the global cache dir, and not inside some public writable dir */ +/* fprintf (stderr, "XimCachedFileName for dir %s name %s intname %s encoding %s uid %d\n", dir, name, intname, encoding, uid); */ + if (stat (name, &st_name) == -1 || ! S_ISREG (st_name.st_mode) + || stat (dir, &st) == -1 || ! S_ISDIR (st.st_mode) || st.st_uid != uid + || (st.st_mode & 0022) != 0000) { + *res = NULL; + return -1; + } + len = strlen (dir); + hash = strToHash (intname); + hash2 = strToHash (encoding); + *res = Xmalloc (len + 1 + 27 + 1); /* Max VERSION 9999 */ + + if (len == 0 || dir [len-1] != '/') + sprintf (*res, "%s/%c%d_%03x_%08x_%08x", dir, _XimGetMyEndian(), + XIM_CACHE_VERSION, (unsigned int)sizeof (DefTree), hash, hash2); + else + sprintf (*res, "%s%c%d_%03x_%08x_%08x", dir, _XimGetMyEndian(), + XIM_CACHE_VERSION, (unsigned int)sizeof (DefTree), hash, hash2); + +/* fprintf (stderr, "-> %s\n", *res); */ + if ( (fd = _XOpenFile (*res, O_RDONLY)) == -1) + return -1; + + if (fstat (fd, &st) == -1) { + Xfree (*res); + *res = NULL; + close (fd); + return -1; + } + *size = st.st_size; + + if (! S_ISREG (st.st_mode) || st.st_uid != uid + || (st.st_mode & 0022) != 0000 || st.st_mtime <= st_name.st_mtime + || (st.st_mtime < time (NULL) - 24*60*60 && ! isglobal)) { + + close (fd); + if (unlink (*res) != 0) { + Xfree (*res); + *res = NULL; /* cache is not safe */ + } + return -1; + } + + m = mmap (NULL, sizeof (struct _XimCacheStruct), PROT_READ, MAP_PRIVATE, + fd, 0); + if (m == NULL || m == MAP_FAILED) { + close (fd); + Xfree (*res); + *res = NULL; + return -1; + } + if (*size < sizeof (struct _XimCacheStruct) || m->id != XIM_CACHE_MAGIC) { + munmap (m, sizeof (struct _XimCacheStruct)); + close (fd); + fprintf (stderr, "Ignoring broken XimCache %s\n", *res); + Xfree (*res); + *res = NULL; + return -1; + } + if (m->version != XIM_CACHE_VERSION) { + munmap (m, sizeof (struct _XimCacheStruct)); + close (fd); + if (unlink (*res) != 0) { + Xfree (*res); + *res = NULL; /* cache is not safe */ + } + return -1; + } + munmap (m, sizeof (struct _XimCacheStruct)); + + return fd; +} + + +Private Bool _XimLoadCache ( + int fd, + const char *name, + const char *encoding, + off_t size, + Xim im) +{ + if (_XimCache_mmap || + _XimReadCachedDefaultTree (fd, name, encoding, size)) { + _XimCachedDefaultTreeRefcount++; + memcpy (&im->private.local.base, &_XimCachedDefaultTreeBase, + sizeof (_XimCachedDefaultTreeBase)); + im->private.local.top = _XimCache_mmap->top; + return True; + } + + return False; +} + + +Private void +_XimWriteCachedDefaultTree( + const char *name, + const char *encoding, + const char *cachename, + Xim im) +{ + int fd; + FILE *fp; + struct _XimCacheStruct *m; + int msize = (XOffsetOf(struct _XimCacheStruct, fname) + + strlen(name) + strlen(encoding) + 2 + + XIM_CACHE_TREE_ALIGNMENT-1) & -XIM_CACHE_TREE_ALIGNMENT; + DefTreeBase *b = &im->private.local.base; + + if (! b->tree && ! (b->tree = Xmalloc (sizeof(DefTree))) ) + return; + if (! b->mb && ! (b->mb = Xmalloc (1)) ) + return; + if (! b->wc && ! (b->wc = Xmalloc (sizeof(wchar_t))) ) + return; + if (! b->utf8 && ! (b->utf8 = Xmalloc (1)) ) + return; + + /* First entry is always unused */ + memset (b->tree, 0, sizeof(DefTree)); + b->mb[0] = 0; + b->wc[0] = 0; + b->utf8[0] = 0; + + m = Xmalloc (msize); + memset (m, 0, msize); + m->id = XIM_CACHE_MAGIC; + m->version = XIM_CACHE_VERSION; + m->top = im->private.local.top; + m->treeused = b->treeused; + m->mbused = b->mbused; + m->wcused = b->wcused; + m->utf8used = b->utf8used; + /* Tree first, then wide chars, then the rest due to alignment */ + m->tree = msize; + m->wc = msize + sizeof (DefTree) * m->treeused; + m->mb = m->wc + sizeof (wchar_t) * m->wcused; + m->utf8 = m->mb + m->mbused; + m->size = m->utf8 + m->utf8used; + strcpy (m->fname, name); + strcpy (m->fname+strlen(name)+1, encoding); + + /* This STILL might be racy on NFS */ + if ( (fd = _XOpenFileMode (cachename, O_WRONLY | O_CREAT | O_EXCL, + 0600)) < 0) + return; + if (! (fp = fdopen (fd, "wb")) ) { + close (fd); + return; + } + fwrite (m, msize, 1, fp); + fwrite (im->private.local.base.tree, sizeof(DefTree), m->treeused, fp); + fwrite (im->private.local.base.wc, sizeof(wchar_t), m->wcused, fp); + fwrite (im->private.local.base.mb, 1, m->mbused, fp); + fwrite (im->private.local.base.utf8, 1, m->utf8used, fp); + if (fclose (fp) != 0) + unlink (cachename); + _XimCache_mmap = m; + memcpy (&_XimCachedDefaultTreeBase, &im->private.local.base, + sizeof (_XimCachedDefaultTreeBase)); +/* fprintf (stderr, "wrote tree %s size %ld to %s\n", name, m->size, cachename); */ +} + +#endif + + Private void _XimCreateDefaultTree( Xim im) { FILE *fp = NULL; - char *name, *tmpname = NULL; + char *name, *tmpname = NULL, *intname; + char *cachename = NULL; + /* Should use getpwent() instead of $HOME (cross-platform?) */ + char *home = getenv("HOME"); + char *cachedir = NULL; + char *tmpcachedir = NULL; + int hl = home ? strlen (home) : 0; +#ifdef COMPOSECACHE + const char *encoding = nl_langinfo (CODESET); + uid_t euid = geteuid (); + gid_t egid = getegid (); + int cachefd = -1; + off_t size; +#endif name = getenv("XCOMPOSEFILE"); - if (name == (char *) NULL) { - char *home = getenv("HOME"); if (home != (char *) NULL) { - int hl = strlen(home); tmpname = name = Xmalloc(hl + 10 + 1); if (name != (char *) NULL) { + int fd; strcpy(name, home); strcpy(name + hl, "/.XCompose"); - fp = _XFopenFile (name, "r"); - if (fp == (FILE *) NULL) { - Xfree(name); - name = tmpname = NULL; - } + if ( (fd = _XOpenFile (name, O_RDONLY)) < 0) { + Xfree (name); + name = tmpname = NULL; + } else + close (fd); } } } @@ -240,19 +553,94 @@ _XimCreateDefaultTree( if (name == (char *) NULL) { tmpname = name = _XlcFileName(im->core.lcd, COMPOSE_FILE); } + intname = name; + +#ifdef COMPOSECACHE + if (getuid () == euid && getgid () == egid && euid != 0) { + char *c; + /* Usage: XCOMPOSECACHE=[=] + * cachedir: directory of cache files + * filename: internally used name for cache file */ + cachedir = getenv("XCOMPOSECACHE"); + if (cachedir && (c = strchr (cachedir, '='))) { + tmpcachedir = strdup (cachedir); + intname = tmpcachedir + (c-cachedir) + 1; + tmpcachedir[c-cachedir] = '\0'; + cachedir = tmpcachedir; + } + } - if (name == (char *) NULL) - return; - if (fp == (FILE *) NULL) { - fp = _XFopenFile (name, "r"); + if (! cachedir) { + cachefd = _XimCachedFileName (XIM_GLOBAL_CACHE_DIR, name, intname, + encoding, 0, 1, &cachename, &size); + if (cachefd != -1) { + if (_XimLoadCache (cachefd, intname, encoding, size, im)) { + if (tmpcachedir) + Xfree (tmpcachedir); + if (tmpname) + Xfree (tmpname); + if (cachename) + Xfree (cachename); + close (cachefd); + return; + } + close (cachefd); + } + if (cachename) + Xfree (cachename); + cachename = NULL; } - if (tmpname != (char *) NULL) { - Xfree(tmpname); + + if (getuid () == euid && getgid () == egid && euid != 0 && home) { + + if (! cachedir) { + tmpcachedir = cachedir = Xmalloc (hl+strlen(XIM_HOME_CACHE_DIR)+1); + strcpy (cachedir, home); + strcat (cachedir, XIM_HOME_CACHE_DIR); + } + cachefd = _XimCachedFileName (cachedir, name, intname, encoding, + euid, 0, &cachename, &size); + if (cachefd != -1) { + if (_XimLoadCache (cachefd, intname, encoding, size, im)) { + if (tmpcachedir) + Xfree (tmpcachedir); + if (tmpname) + Xfree (tmpname); + if (cachename) + Xfree (cachename); + close (cachefd); + return; + } + close (cachefd); + } + } +#endif + + if (! (fp = _XFopenFile (name, "r"))) { + if (tmpcachedir) + Xfree (tmpcachedir); + if (tmpname) + Xfree (tmpname); + if (cachename) + Xfree (cachename); + return; } - if (fp == (FILE *) NULL) - return; _XimParseStringFile(fp, im); fclose(fp); + +#ifdef COMPOSECACHE + if (cachename) { + assert (euid != 0); + _XimWriteCachedDefaultTree (intname, encoding, cachename, im); + } +#endif + + if (tmpcachedir) + Xfree (tmpcachedir); + if (tmpname) + Xfree (tmpname); + if (cachename) + Xfree (cachename); } Private XIMMethodsRec Xim_im_local_methods = { @@ -325,6 +713,11 @@ _XimLocalOpenIM( goto Open_Error; private->ucstoutf8_conv = conv; + private->base.treeused = 1; + private->base.mbused = 1; + private->base.wcused = 1; + private->base.utf8used = 1; + _XimCreateDefaultTree(im); im->methods = &Xim_im_local_methods; diff --git a/nx-X11/lib/X11/imLcLkup.c b/nx-X11/lib/X11/imLcLkup.c index a23a72c54..fa65ed077 100644 --- a/nx-X11/lib/X11/imLcLkup.c +++ b/nx-X11/lib/X11/imLcLkup.c @@ -16,7 +16,7 @@ It is provided "as is" without express or implied warranty. FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER @@ -24,7 +24,7 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Kazunori Nishihara Fuji Xerox - Takashi Fujiwara FUJITSU LIMITED + Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -40,43 +40,59 @@ PERFORMANCE OF THIS SOFTWARE. #include #include "Xlibint.h" #include "Xlcint.h" +#include "XlcPubI.h" #include "Ximint.h" Public int -_XimLocalMbLookupString(xic, ev, buffer, bytes, keysym, status) - XIC xic; - XKeyEvent *ev; - char *buffer; - int bytes; - KeySym *keysym; - Status *status; +_XimLocalMbLookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes, + KeySym *keysym, Status *status) { Xic ic = (Xic)xic; int ret; + DefTree *b = ic->private.local.base.tree; + char *mb = ic->private.local.base.mb; if(ev->type != KeyPress) { if(status) *status = XLookupNone; return(0); } - if(ev->keycode == 0 && ic->private.local.composed != NULL) { /* Composed Event */ - ret = strlen(ic->private.local.composed->mb); - if(ret > bytes) { - if(status) *status = XBufferOverflow; - return(ret); - } - memcpy(buffer, ic->private.local.composed->mb, ret); - if(keysym) *keysym = ic->private.local.composed->ks; - if (ret > 0) { - if (keysym && *keysym != NoSymbol) { + if(ev->keycode == 0 && + ( (ic->private.local.composed != 0) + ||(ic->private.local.brl_committed != 0))) { + if (ic->private.local.brl_committed != 0) { /* Braille Event */ + unsigned char pattern = ic->private.local.brl_committed; + char mb[XLC_PUBLIC(ic->core.im->core.lcd, mb_cur_max)]; + ret = _Xlcwctomb(ic->core.im->core.lcd, mb, BRL_UC_ROW | pattern); + if(ret > bytes) { + if(status) *status = XBufferOverflow; + return(ret); + } + if(keysym) { + *keysym = XK_braille_blank | pattern; if(status) *status = XLookupBoth; - } else { + } else if(status) *status = XLookupChars; + memcpy(buffer, mb, ret); + } else { /* Composed Event */ + ret = strlen(&mb[b[ic->private.local.composed].mb]); + if(ret > bytes) { + if(status) *status = XBufferOverflow; + return(ret); } - } else { - if(keysym && *keysym != NoSymbol) { - if(status) *status = XLookupKeySym; + memcpy(buffer, &mb[b[ic->private.local.composed].mb], ret); + if(keysym) *keysym = b[ic->private.local.composed].ks; + if (ret > 0) { + if (keysym && *keysym != NoSymbol) { + if(status) *status = XLookupBoth; + } else { + if(status) *status = XLookupChars; + } } else { - if(status) *status = XLookupNone; + if(keysym && *keysym != NoSymbol) { + if(status) *status = XLookupKeySym; + } else { + if(status) *status = XLookupNone; + } } } return (ret); @@ -102,41 +118,53 @@ _XimLocalMbLookupString(xic, ev, buffer, bytes, keysym, status) } Public int -_XimLocalWcLookupString(xic, ev, buffer, wlen, keysym, status) - XIC xic; - XKeyEvent *ev; - wchar_t *buffer; - int wlen; - KeySym *keysym; - Status *status; +_XimLocalWcLookupString(XIC xic, XKeyEvent *ev, wchar_t *buffer, int wlen, + KeySym *keysym, Status *status) { Xic ic = (Xic)xic; int ret; + DefTree *b = ic->private.local.base.tree; + wchar_t *wc = ic->private.local.base.wc; if(ev->type != KeyPress) { if(status) *status = XLookupNone; return(0); } - if(ev->keycode == 0) { /* Composed Event */ - ret = _Xwcslen(ic->private.local.composed->wc); - if(ret > wlen) { - if(status) *status = XBufferOverflow; - return (ret); - } - memcpy((char *)buffer, (char *)ic->private.local.composed->wc, - ret * sizeof(wchar_t)); - if(keysym) *keysym = ic->private.local.composed->ks; - if (ret > 0) { - if (keysym && *keysym != NoSymbol) { + if(ev->keycode == 0) { + if (ic->private.local.brl_committed != 0) { /* Braille Event */ + unsigned char pattern = ic->private.local.brl_committed; + ret = 1; + if (ret > wlen) { + if(status) *status = XBufferOverflow; + return (ret); + } + *buffer = BRL_UC_ROW | pattern; + if(keysym) { + *keysym = XK_braille_blank | pattern; if(status) *status = XLookupBoth; - } else { + } else if(status) *status = XLookupChars; + } else { /* Composed Event */ + ret = _Xwcslen(&wc[b[ic->private.local.composed].wc]); + if(ret > wlen) { + if(status) *status = XBufferOverflow; + return (ret); } - } else { - if(keysym && *keysym != NoSymbol) { - if(status) *status = XLookupKeySym; + memcpy((char *)buffer, (char *)&wc[b[ic->private.local.composed].wc], + ret * sizeof(wchar_t)); + if(keysym) *keysym = b[ic->private.local.composed].ks; + if (ret > 0) { + if (keysym && *keysym != NoSymbol) { + if(status) *status = XLookupBoth; + } else { + if(status) *status = XLookupChars; + } } else { - if(status) *status = XLookupNone; + if(keysym && *keysym != NoSymbol) { + if(status) *status = XLookupKeySym; + } else { + if(status) *status = XLookupNone; + } } } return (ret); @@ -162,40 +190,49 @@ _XimLocalWcLookupString(xic, ev, buffer, wlen, keysym, status) } Public int -_XimLocalUtf8LookupString(xic, ev, buffer, bytes, keysym, status) - XIC xic; - XKeyEvent *ev; - char *buffer; - int bytes; - KeySym *keysym; - Status *status; +_XimLocalUtf8LookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes, + KeySym *keysym, Status *status) { Xic ic = (Xic)xic; int ret; + DefTree *b = ic->private.local.base.tree; + char *utf8 = ic->private.local.base.utf8; if(ev->type != KeyPress) { if(status) *status = XLookupNone; return(0); } - if(ev->keycode == 0) { /* Composed Event */ - ret = strlen(ic->private.local.composed->utf8); - if(ret > bytes) { - if(status) *status = XBufferOverflow; - return (ret); - } - memcpy(buffer, ic->private.local.composed->utf8, ret); - if(keysym) *keysym = ic->private.local.composed->ks; - if (ret > 0) { - if (keysym && *keysym != NoSymbol) { - if(status) *status = XLookupBoth; - } else { - if(status) *status = XLookupChars; + if(ev->keycode == 0) { + if (ic->private.local.brl_committed != 0) { /* Braille Event */ + unsigned char pattern = ic->private.local.brl_committed; + ret = 3; + if (ret > bytes) { + if(status) *status = XBufferOverflow; + return (ret); } - } else { - if(keysym && *keysym != NoSymbol) { - if(status) *status = XLookupKeySym; + buffer[0] = 0xe0 | ((BRL_UC_ROW >> 12) & 0x0f); + buffer[1] = 0x80 | ((BRL_UC_ROW >> 8) & 0x30) | (pattern >> 6); + buffer[2] = 0x80 | (pattern & 0x3f); + } else { /* Composed Event */ + ret = strlen(&utf8[b[ic->private.local.composed].utf8]); + if(ret > bytes) { + if(status) *status = XBufferOverflow; + return (ret); + } + memcpy(buffer, &utf8[b[ic->private.local.composed].utf8], ret); + if(keysym) *keysym = b[ic->private.local.composed].ks; + if (ret > 0) { + if (keysym && *keysym != NoSymbol) { + if(status) *status = XLookupBoth; + } else { + if(status) *status = XLookupChars; + } } else { - if(status) *status = XLookupNone; + if(keysym && *keysym != NoSymbol) { + if(status) *status = XLookupKeySym; + } else { + if(status) *status = XLookupNone; + } } } return (ret); @@ -287,26 +324,16 @@ _XimLcctsconvert( } Public int -_XimLcctstombs(xim, from, from_len, to, to_len, state) - XIM xim; - char *from; - int from_len; - char *to; - int to_len; - Status *state; +_XimLcctstombs(XIM xim, char *from, int from_len, + char *to, int to_len, Status *state) { return _XimLcctsconvert(((Xim)xim)->private.local.ctom_conv, from, from_len, to, to_len, state); } Public int -_XimLcctstowcs(xim, from, from_len, to, to_len, state) - XIM xim; - char *from; - int from_len; - wchar_t *to; - int to_len; - Status *state; +_XimLcctstowcs(XIM xim, char *from, int from_len, + wchar_t *to, int to_len, Status *state) { Xim im = (Xim)xim; XlcConv conv = im->private.local.ctow_conv; @@ -332,7 +359,7 @@ _XimLcctstowcs(xim, from, from_len, to, to_len, state) /* Reset the converter. The CompoundText at 'from' starts in initial state. */ _XlcResetConverter(conv); - + from_left = from_len; to_left = BUFSIZ; from_cnvlen = 0; @@ -368,13 +395,8 @@ _XimLcctstowcs(xim, from, from_len, to, to_len, state) } Public int -_XimLcctstoutf8(xim, from, from_len, to, to_len, state) - XIM xim; - char *from; - int from_len; - char *to; - int to_len; - Status *state; +_XimLcctstoutf8(XIM xim, char *from, int from_len, + char *to, int to_len, Status *state) { return _XimLcctsconvert(((Xim)xim)->private.local.ctoutf8_conv, from, from_len, to, to_len, state); diff --git a/nx-X11/lib/X11/imLcPrs.c b/nx-X11/lib/X11/imLcPrs.c index 85269b1ef..4dbcbbed4 100644 --- a/nx-X11/lib/X11/imLcPrs.c +++ b/nx-X11/lib/X11/imLcPrs.c @@ -42,6 +42,8 @@ OR PERFORMANCE OF THIS SOFTWARE. #include #include +#define XLC_BUFSIZE 256 + extern int _Xmbstowcs( wchar_t *wstr, char *str, @@ -276,38 +278,33 @@ static long modmask( char *name) { - long mask; - struct _modtbl { - char *name; + const char name[6]; long mask; }; - struct _modtbl *p; - static struct _modtbl tbl[] = { + static const struct _modtbl tbl[] = { { "Ctrl", ControlMask }, { "Lock", LockMask }, { "Caps", LockMask }, { "Shift", ShiftMask }, { "Alt", Mod1Mask }, - { "Meta", Mod1Mask }, - { NULL, 0 }}; - - p = tbl; - mask = 0; - for (p = tbl; p->name != NULL; p++) { - if (strcmp(name, p->name) == 0) { - mask = p->mask; - break; - } - } - return(mask); + { "Meta", Mod1Mask }}; + + int i, num_entries = sizeof (tbl) / sizeof (tbl[0]); + + for (i = 0; i < num_entries; i++) + if (!strcmp (name, tbl[i].name)) + return tbl[i].mask; + + return 0; } static char* TransFileName(Xim im, char *name) { char *home = NULL, *lcCompose = NULL; + char dir[XLC_BUFSIZE]; char *i = name, *ret, *j; int l = 0; @@ -328,6 +325,10 @@ TransFileName(Xim im, char *name) if (lcCompose) l += strlen(lcCompose); break; + case 'S': + xlocaledir(dir, XLC_BUFSIZE); + l += strlen(dir); + break; } } else { l++; @@ -359,6 +360,10 @@ TransFileName(Xim im, char *name) Xfree(lcCompose); } break; + case 'S': + strcpy(j, dir); + j += strlen(dir); + break; } i++; } else { @@ -408,7 +413,7 @@ get_mb_string (Xim im, char *buf, KeySym ks) return len; } -#define AllMask (ShiftMask | LockMask | ControlMask | Mod1Mask) +#define AllMask (ShiftMask | LockMask | ControlMask | Mod1Mask) #define LOCAL_WC_BUFSIZE 128 #define LOCAL_UTF8_BUFSIZE 256 #define SEQUENCE_MAX 10 @@ -420,11 +425,13 @@ parseline( char* tokenbuf) { int token; - unsigned modifier_mask; - unsigned modifier; - unsigned tmp; + DTModifier modifier_mask; + DTModifier modifier; + DTModifier tmp; KeySym keysym = NoSymbol; - DefTree **top = &im->private.local.top; + DTIndex *top = &im->private.local.top; + DefTreeBase *b = &im->private.local.base; + DTIndex t; DefTree *p = NULL; Bool exclam, tilde; KeySym rhs_keysym = 0; @@ -436,8 +443,8 @@ parseline( char local_utf8_buf[LOCAL_UTF8_BUFSIZE], *rhs_string_utf8; struct DefBuffer { - unsigned modifier_mask; - unsigned modifier; + DTModifier modifier_mask; + DTModifier modifier; KeySym keysym; }; @@ -447,7 +454,7 @@ parseline( do { token = nexttoken(fp, tokenbuf, &lastch); } while (token == ENDOFLINE); - + if (token == ENDOFFILE) { return(-1); } @@ -467,6 +474,7 @@ parseline( if (infp == NULL) goto error; _XimParseStringFile(infp, im); + fclose(infp); return (0); } else if ((token == KEY) && (strcmp("None", tokenbuf) == 0)) { modifier = 0; @@ -534,20 +542,24 @@ parseline( token = nexttoken(fp, tokenbuf, &lastch); if (token == STRING) { - if( (rhs_string_mb = Xmalloc(strlen(tokenbuf) + 1)) == NULL ) - goto error; + l = strlen(tokenbuf) + 1; + while (b->mbused + l > b->mbsize) { + b->mbsize = b->mbsize ? b->mbsize * 1.5 : 1024; + if (! (b->mb = Xrealloc (b->mb, b->mbsize)) ) + goto error; + } + rhs_string_mb = &b->mb[b->mbused]; + b->mbused += l; strcpy(rhs_string_mb, tokenbuf); token = nexttoken(fp, tokenbuf, &lastch); if (token == KEY) { rhs_keysym = XStringToKeysym(tokenbuf); if (rhs_keysym == NoSymbol) { - Xfree(rhs_string_mb); goto error; } token = nexttoken(fp, tokenbuf, &lastch); } if (token != ENDOFLINE && token != ENDOFFILE) { - Xfree(rhs_string_mb); goto error; } } else if (token == KEY) { @@ -561,14 +573,13 @@ parseline( } l = get_mb_string(im, local_mb_buf, rhs_keysym); - if (l == 0) { - rhs_string_mb = Xmalloc(1); - } else { - rhs_string_mb = Xmalloc(l + 1); - } - if( rhs_string_mb == NULL ) { - goto error; + while (b->mbused + l + 1 > b->mbsize) { + b->mbsize = b->mbsize ? b->mbsize * 1.5 : 1024; + if (! (b->mb = Xrealloc (b->mb, b->mbsize)) ) + goto error; } + rhs_string_mb = &b->mb[b->mbused]; + b->mbused += l + 1; memcpy(rhs_string_mb, local_mb_buf, l); rhs_string_mb[l] = '\0'; } else { @@ -579,62 +590,70 @@ parseline( if (l == LOCAL_WC_BUFSIZE - 1) { local_wc_buf[l] = (wchar_t)'\0'; } - if( (rhs_string_wc = (wchar_t *)Xmalloc((l + 1) * sizeof(wchar_t))) == NULL ) { - Xfree( rhs_string_mb ); - return( 0 ); + while (b->wcused + l + 1 > b->wcsize) { + b->wcsize = b->wcsize ? b->wcsize * 1.5 : 512; + if (! (b->wc = Xrealloc (b->wc, sizeof(wchar_t) * b->wcsize)) ) + goto error; } + rhs_string_wc = &b->wc[b->wcused]; + b->wcused += l + 1; memcpy((char *)rhs_string_wc, (char *)local_wc_buf, (l + 1) * sizeof(wchar_t) ); l = _Xmbstoutf8(local_utf8_buf, rhs_string_mb, LOCAL_UTF8_BUFSIZE - 1); if (l == LOCAL_UTF8_BUFSIZE - 1) { local_utf8_buf[l] = '\0'; } - if( (rhs_string_utf8 = (char *)Xmalloc(l + 1)) == NULL ) { - Xfree( rhs_string_wc ); - Xfree( rhs_string_mb ); - return( 0 ); + while (b->utf8used + l + 1 > b->utf8size) { + b->utf8size = b->utf8size ? b->utf8size * 1.5 : 1024; + if (! (b->utf8 = Xrealloc (b->utf8, b->utf8size)) ) + goto error; } + rhs_string_utf8 = &b->utf8[b->utf8used]; + b->utf8used += l + 1; memcpy(rhs_string_utf8, local_utf8_buf, l + 1); for (i = 0; i < n; i++) { - for (p = *top; p; p = p->next) { - if (buf[i].keysym == p->keysym && - buf[i].modifier == p->modifier && - buf[i].modifier_mask == p->modifier_mask) { + for (t = *top; t; t = b->tree[t].next) { + if (buf[i].keysym == b->tree[t].keysym && + buf[i].modifier == b->tree[t].modifier && + buf[i].modifier_mask == b->tree[t].modifier_mask) { break; } } - if (p) { + if (t) { + p = &b->tree[t]; top = &p->succession; } else { - if( (p = (DefTree*)Xmalloc(sizeof(DefTree))) == NULL ) { - Xfree( rhs_string_mb ); - goto error; + while (b->treeused >= b->treesize) { + DefTree *old = b->tree; + int oldsize = b->treesize; + b->treesize = b->treesize ? b->treesize * 1.5 : 256; + if (! (b->tree = Xrealloc (b->tree, sizeof(DefTree) * b->treesize)) ) + goto error; + if (top >= (DTIndex *) old && top < (DTIndex *) &old[oldsize]) + top = (DTIndex *) (((char *) top) + (((char *)b->tree)-(char *)old)); } + p = &b->tree[b->treeused]; p->keysym = buf[i].keysym; p->modifier = buf[i].modifier; p->modifier_mask = buf[i].modifier_mask; - p->succession = NULL; + p->succession = 0; p->next = *top; - p->mb = NULL; - p->wc = NULL; - p->utf8 = NULL; + p->mb = 0; + p->wc = 0; + p->utf8 = 0; p->ks = NoSymbol; - *top = p; + *top = b->treeused; top = &p->succession; + b->treeused++; } } - if( p->mb != NULL ) - Xfree( p->mb ); - p->mb = rhs_string_mb; - if( p->wc != NULL ) - Xfree( p->wc ); - p->wc = rhs_string_wc; - if( p->utf8 != NULL ) - Xfree( p->utf8 ); - p->utf8 = rhs_string_utf8; - p->ks = rhs_keysym; + /* old entries no longer freed... */ + p->mb = rhs_string_mb - b->mb; + p->wc = rhs_string_wc - b->wc; + p->utf8 = rhs_string_utf8 - b->utf8; + p->ks = rhs_keysym; return(n); error: while (token != ENDOFLINE && token != ENDOFFILE) { diff --git a/nx-X11/lib/X11/imLcSIc.c b/nx-X11/lib/X11/imLcSIc.c index 1dceb3b10..8f656f670 100644 --- a/nx-X11/lib/X11/imLcSIc.c +++ b/nx-X11/lib/X11/imLcSIc.c @@ -10,7 +10,7 @@ in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of -this software for any purpose. +this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, @@ -21,7 +21,7 @@ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -38,9 +38,7 @@ PERFORMANCE OF THIS SOFTWARE. #include "Ximint.h" Public char * -_XimLocalSetICValues(xic, values) - XIC xic; - XIMArg *values; +_XimLocalSetICValues(XIC xic, XIMArg *values) { XimDefICValues ic_values; Xic ic = (Xic)xic; diff --git a/nx-X11/lib/X11/imRm.c b/nx-X11/lib/X11/imRm.c index fa5a57021..7f79765e1 100644 --- a/nx-X11/lib/X11/imRm.c +++ b/nx-X11/lib/X11/imRm.c @@ -23,7 +23,7 @@ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Makoto Wakamatsu Sony Corporation makoto@sm.sony.co.jp @@ -40,8 +40,10 @@ PERFORMANCE OF THIS SOFTWARE. #include "Ximint.h" #include "Xresource.h" +#define GET_NAME(x) name_table + x.name_offset + typedef struct _XimValueOffsetInfo { - char *name; + unsigned short name_offset; XrmQuark quark; unsigned int offset; Bool (*defaults)( @@ -94,11 +96,11 @@ _XimSetProtoResource(im) else res_class = Xmalloc (strlen (im->core.res_class) + 50); /* pretend malloc always works */ - (void) sprintf (res_name, "%s%s%s", + (void) sprintf (res_name, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "useAuth"); - (void) sprintf (res_class, "%s%s%s", + (void) sprintf (res_class, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "UseAuth"); @@ -109,11 +111,11 @@ _XimSetProtoResource(im) } } - (void) sprintf (res_name, "%s%s%s", + (void) sprintf (res_name, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "delaybinding"); - (void) sprintf (res_class, "%s%s%s", + (void) sprintf (res_class, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "Delaybinding"); @@ -124,11 +126,11 @@ _XimSetProtoResource(im) } } - (void) sprintf (res_name, "%s%s%s", + (void) sprintf (res_name, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "reconnect"); - (void) sprintf (res_class, "%s%s%s", + (void) sprintf (res_class, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "Reconnect"); @@ -145,11 +147,11 @@ _XimSetProtoResource(im) return; } - (void) sprintf (res_name, "%s%s%s", + (void) sprintf (res_name, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "preeditDefaultStyle"); - (void) sprintf (res_class, "%s%s%s", + (void) sprintf (res_class, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "PreeditDefaultStyle"); @@ -168,11 +170,11 @@ _XimSetProtoResource(im) if(!preedit_style) preedit_style = XIMPreeditNothing; - (void) sprintf (res_name, "%s%s%s", + (void) sprintf (res_name, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "statusDefaultStyle"); - (void) sprintf (res_class, "%s%s%s", + (void) sprintf (res_class, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "StatusDefaultStyle"); @@ -204,54 +206,136 @@ _XimSetProtoResource(im) } #endif /* XIM_CONNECTABLE */ -static char *supported_local_im_values_list[] = { - XNQueryInputStyle, - XNResourceName, - XNResourceClass, - XNDestroyCallback, - XNQueryIMValuesList, - XNQueryICValuesList, - XNVisiblePosition, - (char *)NULL +static const char name_table[] = + /* 0 */ XNQueryInputStyle"\0" + /* 16 */ XNClientWindow"\0" + /* 29 */ XNInputStyle"\0" + /* 40 */ XNFocusWindow"\0" + /* 52 */ XNResourceName"\0" + /* 65 */ XNResourceClass"\0" + /* 79 */ XNGeometryCallback"\0" + /* 96 */ XNDestroyCallback"\0" + /* 112 */ XNFilterEvents"\0" + /* 125 */ XNPreeditStartCallback"\0" + /* 146 */ XNPreeditDoneCallback"\0" + /* 166 */ XNPreeditDrawCallback"\0" + /* 186 */ XNPreeditCaretCallback"\0" + /* 207 */ XNPreeditStateNotifyCallback"\0" + /* 234 */ XNPreeditAttributes"\0" + /* 252 */ XNStatusStartCallback"\0" + /* 272 */ XNStatusDoneCallback"\0" + /* 291 */ XNStatusDrawCallback"\0" + /* 310 */ XNStatusAttributes"\0" + /* 327 */ XNArea"\0" + /* 332 */ XNAreaNeeded"\0" + /* 343 */ XNSpotLocation"\0" + /* 356 */ XNColormap"\0" + /* 365 */ XNStdColormap"\0" + /* 377 */ XNForeground"\0" + /* 388 */ XNBackground"\0" + /* 399 */ XNBackgroundPixmap"\0" + /* 416 */ XNFontSet"\0" + /* 424 */ XNLineSpace"\0" + /* 434 */ XNCursor"\0" + /* 441 */ XNQueryIMValuesList"\0" + /* 459 */ XNQueryICValuesList"\0" + /* 477 */ XNVisiblePosition"\0" + /* 493 */ XNStringConversionCallback"\0" + /* 518 */ XNStringConversion"\0" + /* 535 */ XNResetState"\0" + /* 546 */ XNHotKey"\0" + /* 553 */ XNHotKeyState"\0" + /* 565 */ XNPreeditState +; + +#define OFFSET_XNQUERYINPUTSTYLE 0 +#define OFFSET_XNCLIENTWINDOW 16 +#define OFFSET_XNINPUTSTYLE 29 +#define OFFSET_XNFOCUSWINDOW 40 +#define OFFSET_XNRESOURCENAME 52 +#define OFFSET_XNRESOURCECLASS 65 +#define OFFSET_XNGEOMETRYCALLBACK 79 +#define OFFSET_XNDESTROYCALLBACK 96 +#define OFFSET_XNFILTEREVENTS 112 +#define OFFSET_XNPREEDITSTARTCALLBACK 125 +#define OFFSET_XNPREEDITDONECALLBACK 146 +#define OFFSET_XNPREEDITDRAWCALLBACK 166 +#define OFFSET_XNPREEDITCARETCALLBACK 186 +#define OFFSET_XNPREEDITSTATENOTIFYCALLBACK 207 +#define OFFSET_XNPREEDITATTRIBUTES 234 +#define OFFSET_XNSTATUSSTARTCALLBACK 252 +#define OFFSET_XNSTATUSDONECALLBACK 272 +#define OFFSET_XNSTATUSDRAWCALLBACK 291 +#define OFFSET_XNSTATUSATTRIBUTES 310 +#define OFFSET_XNAREA 327 +#define OFFSET_XNAREANEEDED 332 +#define OFFSET_XNSPOTLOCATION 343 +#define OFFSET_XNCOLORMAP 356 +#define OFFSET_XNSTDCOLORMAP 365 +#define OFFSET_XNFOREGROUND 377 +#define OFFSET_XNBACKGROUND 388 +#define OFFSET_XNBACKGROUNDPIXMAP 399 +#define OFFSET_XNFONTSET 416 +#define OFFSET_XNLINESPACE 424 +#define OFFSET_XNCURSOR 434 +#define OFFSET_XNQUERYIMVALUESLIST 441 +#define OFFSET_XNQUERYICVALUESLIST 459 +#define OFFSET_XNVISIBLEPOSITION 477 +#define OFFSET_XNSTRINGCONVERSIONCALLBACK 493 +#define OFFSET_XNSTRINGCONVERSION 518 +#define OFFSET_XNRESETSTATE 535 +#define OFFSET_XNHOTKEY 546 +#define OFFSET_XNHOTKEYSTATE 553 +#define OFFSET_XNPREEDITSTATE 565 + +/* offsets into name_table */ +static const unsigned short supported_local_im_values_list[] = { + OFFSET_XNQUERYINPUTSTYLE, + OFFSET_XNRESOURCENAME, + OFFSET_XNRESOURCECLASS, + OFFSET_XNDESTROYCALLBACK, + OFFSET_XNQUERYIMVALUESLIST, + OFFSET_XNQUERYICVALUESLIST, + OFFSET_XNVISIBLEPOSITION }; -static char *supported_local_ic_values_list[] = { - XNInputStyle, - XNClientWindow, - XNFocusWindow, - XNResourceName, - XNResourceClass, - XNGeometryCallback, - XNFilterEvents, - XNDestroyCallback, - XNStringConversionCallback, - XNStringConversion, - XNResetState, - XNHotKey, - XNHotKeyState, - XNPreeditAttributes, - XNStatusAttributes, - XNArea, - XNAreaNeeded, - XNSpotLocation, - XNColormap, - XNStdColormap, - XNForeground, - XNBackground, - XNBackgroundPixmap, - XNFontSet, - XNLineSpace, - XNCursor, - XNPreeditStartCallback, - XNPreeditDoneCallback, - XNPreeditDrawCallback, - XNPreeditCaretCallback, - XNStatusStartCallback, - XNStatusDoneCallback, - XNStatusDrawCallback, - XNPreeditState, - XNPreeditStateNotifyCallback, - (char *)NULL +/* offsets into name_table */ +static const unsigned short supported_local_ic_values_list[] = { + OFFSET_XNINPUTSTYLE, + OFFSET_XNCLIENTWINDOW, + OFFSET_XNFOCUSWINDOW, + OFFSET_XNRESOURCENAME, + OFFSET_XNRESOURCECLASS, + OFFSET_XNGEOMETRYCALLBACK, + OFFSET_XNFILTEREVENTS, + OFFSET_XNDESTROYCALLBACK, + OFFSET_XNSTRINGCONVERSIONCALLBACK, + OFFSET_XNSTRINGCONVERSIONCALLBACK, + OFFSET_XNRESETSTATE, + OFFSET_XNHOTKEY, + OFFSET_XNHOTKEYSTATE, + OFFSET_XNPREEDITATTRIBUTES, + OFFSET_XNSTATUSATTRIBUTES, + OFFSET_XNAREA, + OFFSET_XNAREANEEDED, + OFFSET_XNSPOTLOCATION, + OFFSET_XNCOLORMAP, + OFFSET_XNSTDCOLORMAP, + OFFSET_XNFOREGROUND, + OFFSET_XNBACKGROUND, + OFFSET_XNBACKGROUNDPIXMAP, + OFFSET_XNFONTSET, + OFFSET_XNLINESPACE, + OFFSET_XNCURSOR, + OFFSET_XNPREEDITSTARTCALLBACK, + OFFSET_XNPREEDITDONECALLBACK, + OFFSET_XNPREEDITDRAWCALLBACK, + OFFSET_XNPREEDITCARETCALLBACK, + OFFSET_XNSTATUSSTARTCALLBACK, + OFFSET_XNSTATUSDONECALLBACK, + OFFSET_XNSTATUSDRAWCALLBACK, + OFFSET_XNPREEDITSTATE, + OFFSET_XNPREEDITSTATENOTIFYCALLBACK }; static XIMStyle const supported_local_styles[] = { @@ -310,7 +394,7 @@ _XimDefaultIMValues( int len; XPointer tmp; - n = XIMNumber(supported_local_im_values_list) - 1; + n = XIMNumber(supported_local_im_values_list); len = sizeof(XIMValuesList) + sizeof(char **) * n; if(!(tmp = (XPointer)Xmalloc(len))) { return False; @@ -323,8 +407,8 @@ _XimDefaultIMValues( values_list->supported_values = (char **)((char *)tmp + sizeof(XIMValuesList)); for(i = 0; i < n; i++) { - values_list->supported_values[i] - = supported_local_im_values_list[i]; + values_list->supported_values[i] = + (char *)name_table + supported_local_im_values_list[i]; } } @@ -347,7 +431,7 @@ _XimDefaultICValues( int len; XPointer tmp; - n = XIMNumber(supported_local_ic_values_list) - 1; + n = XIMNumber(supported_local_ic_values_list); len = sizeof(XIMValuesList) + sizeof(char **) * n; if(!(tmp = (XPointer)Xmalloc(len))) { return False; @@ -360,8 +444,8 @@ _XimDefaultICValues( values_list->supported_values = (char **)((char *)tmp + sizeof(XIMValuesList)); for(i = 0; i < n; i++) { - values_list->supported_values[i] - = supported_local_ic_values_list[i]; + values_list->supported_values[i] = + (char *)name_table + supported_local_ic_values_list[i]; } } @@ -510,7 +594,7 @@ _XimDefaultArea( if(XGetGeometry(im->core.display, (Drawable)ic->core.focus_window, &root_return, &x_return, &y_return, &width_return, &height_return, &border_width_return, &depth_return) - == (Status)NULL) { + == (Status)Success) { return True; } area.x = 0; @@ -539,10 +623,10 @@ _XimDefaultColormap( return True; } if(XGetWindowAttributes(im->core.display, ic->core.client_window, - &win_attr) == (Status)NULL) { + &win_attr) == (Status)Success) { return True; } - + out = (Colormap *)((char *)top + info->offset); *out = win_attr.colormap; return True; @@ -1010,7 +1094,7 @@ _XimDecodeStyles( if(num >0) { out->count_styles = (unsigned short)num; out->supported_styles = (XIMStyle *)((char *)tmp + sizeof(XIMStyles)); - + for(i = 0; i < num; i++) { out->supported_styles[i] = styles->supported_styles[i]; } @@ -1049,7 +1133,7 @@ _XimDecodeValues( if(num) { out->count_values = (unsigned short)num; out->supported_values = (char **)((char *)tmp + sizeof(XIMValuesList)); - + for(i = 0; i < num; i++) { out->supported_values[i] = values_list->supported_values[i]; } @@ -1437,247 +1521,245 @@ static XIMResource ic_inner_resources[] = { }; static XimValueOffsetInfoRec im_attr_info[] = { - {XNQueryInputStyle, 0, + {OFFSET_XNQUERYINPUTSTYLE, 0, XOffsetOf(XimDefIMValues, styles), _XimDefaultStyles, NULL, _XimDecodeStyles}, - {XNDestroyCallback, 0, + {OFFSET_XNDESTROYCALLBACK, 0, XOffsetOf(XimDefIMValues, destroy_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNResourceName, 0, + {OFFSET_XNRESOURCENAME, 0, XOffsetOf(XimDefIMValues, res_name), NULL, _XimEncodeString, _XimDecodeString}, - {XNResourceClass, 0, + {OFFSET_XNRESOURCECLASS, 0, XOffsetOf(XimDefIMValues, res_class), NULL, _XimEncodeString, _XimDecodeString}, - {XNQueryIMValuesList, 0, + {OFFSET_XNQUERYIMVALUESLIST, 0, XOffsetOf(XimDefIMValues, im_values_list), _XimDefaultIMValues, NULL, _XimDecodeValues}, - {XNQueryICValuesList, 0, + {OFFSET_XNQUERYICVALUESLIST, 0, XOffsetOf(XimDefIMValues, ic_values_list), _XimDefaultICValues, NULL, _XimDecodeValues}, - {XNVisiblePosition, 0, + {OFFSET_XNVISIBLEPOSITION, 0, XOffsetOf(XimDefIMValues, visible_position), _XimDefaultVisiblePos, NULL, _XimDecodeBool} }; static XimValueOffsetInfoRec ic_attr_info[] = { - {XNInputStyle, 0, + {OFFSET_XNINPUTSTYLE, 0, XOffsetOf(XimDefICValues, input_style), NULL, _XimEncodeStyle, _XimDecodeStyle}, - {XNClientWindow, 0, + {OFFSET_XNCLIENTWINDOW, 0, XOffsetOf(XimDefICValues, client_window), NULL, _XimEncodeWindow, _XimDecodeWindow}, - {XNFocusWindow, 0, + {OFFSET_XNFOCUSWINDOW, 0, XOffsetOf(XimDefICValues, focus_window), _XimDefaultFocusWindow, _XimEncodeWindow, _XimDecodeWindow}, - {XNResourceName, 0, + {OFFSET_XNRESOURCENAME, 0, XOffsetOf(XimDefICValues, res_name), _XimDefaultResName, _XimEncodeString, _XimDecodeString}, - {XNResourceClass, 0, + {OFFSET_XNRESOURCECLASS, 0, XOffsetOf(XimDefICValues, res_class), _XimDefaultResClass, _XimEncodeString, _XimDecodeString}, - {XNGeometryCallback, 0, + {OFFSET_XNGEOMETRYCALLBACK, 0, XOffsetOf(XimDefICValues, geometry_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNFilterEvents, 0, + {OFFSET_XNFILTEREVENTS, 0, XOffsetOf(XimDefICValues, filter_events), NULL, NULL, _XimDecodeLong}, - {XNDestroyCallback, 0, + {OFFSET_XNDESTROYCALLBACK, 0, XOffsetOf(XimDefICValues, destroy_callback), _XimDefaultDestroyCB, _XimEncodeCallback, _XimDecodeCallback}, - {XNStringConversionCallback, 0, + {OFFSET_XNSTRINGCONVERSIONCALLBACK, 0, XOffsetOf(XimDefICValues, string_conversion_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNStringConversion, 0, + {OFFSET_XNSTRINGCONVERSION, 0, XOffsetOf(XimDefICValues, string_conversion), NULL, _XimEncodeStringConv, _XimDecodeStringConv}, - {XNResetState, 0, + {OFFSET_XNRESETSTATE, 0, XOffsetOf(XimDefICValues, reset_state), _XimDefaultResetState, _XimEncodeResetState, _XimDecodeResetState}, - {XNHotKey, 0, + {OFFSET_XNHOTKEY, 0, XOffsetOf(XimDefICValues, hotkey), NULL, _XimEncodeHotKey, _XimDecodeHotKey}, - {XNHotKeyState, 0, + {OFFSET_XNHOTKEYSTATE, 0, XOffsetOf(XimDefICValues, hotkey_state), _XimDefaultHotKeyState, _XimEncodeHotKetState, _XimDecodeHotKetState}, - {XNPreeditAttributes, 0, + {OFFSET_XNPREEDITATTRIBUTES, 0, XOffsetOf(XimDefICValues, preedit_attr), _XimDefaultNest, _XimEncodeNest, _XimDecodeNest}, - {XNStatusAttributes, 0, + {OFFSET_XNSTATUSATTRIBUTES, 0, XOffsetOf(XimDefICValues, status_attr), _XimDefaultNest, _XimEncodeNest, _XimDecodeNest}, }; static XimValueOffsetInfoRec ic_pre_attr_info[] = { - {XNArea, 0, + {OFFSET_XNAREA, 0, XOffsetOf(ICPreeditAttributes, area), _XimDefaultArea, _XimEncodeRectangle, _XimDecodeRectangle}, - {XNAreaNeeded, 0, + {OFFSET_XNAREANEEDED, 0, XOffsetOf(ICPreeditAttributes, area_needed), NULL, _XimEncodeRectangle, _XimDecodeRectangle}, - {XNSpotLocation, 0, + {OFFSET_XNSPOTLOCATION, 0, XOffsetOf(ICPreeditAttributes, spot_location), NULL, _XimEncodeSpot, _XimDecodeSpot}, - {XNColormap, 0, + {OFFSET_XNCOLORMAP, 0, XOffsetOf(ICPreeditAttributes, colormap), _XimDefaultColormap, _XimEncodeColormap, _XimDecodeColormap}, - {XNStdColormap, 0, + {OFFSET_XNSTDCOLORMAP, 0, XOffsetOf(ICPreeditAttributes, std_colormap), _XimDefaultStdColormap, _XimEncodeStdColormap, _XimDecodeStdColormap}, - {XNForeground, 0, + {OFFSET_XNFOREGROUND, 0, XOffsetOf(ICPreeditAttributes, foreground), _XimDefaultFg, _XimEncodeLong, _XimDecodeLong}, - {XNBackground, 0, + {OFFSET_XNBACKGROUND, 0, XOffsetOf(ICPreeditAttributes, background), _XimDefaultBg, _XimEncodeLong, _XimDecodeLong}, - {XNBackgroundPixmap, 0, + {OFFSET_XNBACKGROUNDPIXMAP, 0, XOffsetOf(ICPreeditAttributes, background_pixmap), _XimDefaultBgPixmap, _XimEncodeBgPixmap, _XimDecodeBgPixmap}, - {XNFontSet, 0, + {OFFSET_XNFONTSET, 0, XOffsetOf(ICPreeditAttributes, fontset), _XimDefaultFontSet, _XimEncodeFontSet, _XimDecodeFontSet}, - {XNLineSpace, 0, + {OFFSET_XNLINESPACE, 0, XOffsetOf(ICPreeditAttributes, line_spacing), _XimDefaultLineSpace, _XimEncodeLineSpace, _XimDecodeLineSpace}, - {XNCursor, 0, + {OFFSET_XNCURSOR, 0, XOffsetOf(ICPreeditAttributes, cursor), _XimDefaultCursor, _XimEncodeCursor, _XimDecodeCursor}, - {XNPreeditStartCallback, 0, + {OFFSET_XNPREEDITSTARTCALLBACK, 0, XOffsetOf(ICPreeditAttributes, start_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNPreeditDoneCallback, 0, + {OFFSET_XNPREEDITDONECALLBACK, 0, XOffsetOf(ICPreeditAttributes, done_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNPreeditDrawCallback, 0, + {OFFSET_XNPREEDITDRAWCALLBACK, 0, XOffsetOf(ICPreeditAttributes, draw_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNPreeditCaretCallback, 0, + {OFFSET_XNPREEDITCARETCALLBACK, 0, XOffsetOf(ICPreeditAttributes, caret_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNPreeditState, 0, + {OFFSET_XNPREEDITSTATE, 0, XOffsetOf(ICPreeditAttributes, preedit_state), _XimDefaultPreeditState, _XimEncodePreeditState,_XimDecodePreeditState}, - {XNPreeditStateNotifyCallback, 0, + {OFFSET_XNPREEDITSTATENOTIFYCALLBACK, 0, XOffsetOf(ICPreeditAttributes, state_notify_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, }; static XimValueOffsetInfoRec ic_sts_attr_info[] = { - {XNArea, 0, + {OFFSET_XNAREA, 0, XOffsetOf(ICStatusAttributes, area), _XimDefaultArea, _XimEncodeRectangle, _XimDecodeRectangle}, - {XNAreaNeeded, 0, + {OFFSET_XNAREANEEDED, 0, XOffsetOf(ICStatusAttributes, area_needed), NULL, _XimEncodeRectangle, _XimDecodeRectangle}, - {XNColormap, 0, + {OFFSET_XNCOLORMAP, 0, XOffsetOf(ICStatusAttributes, colormap), _XimDefaultColormap, _XimEncodeColormap, _XimDecodeColormap}, - {XNStdColormap, 0, + {OFFSET_XNSTDCOLORMAP, 0, XOffsetOf(ICStatusAttributes, std_colormap), _XimDefaultStdColormap, _XimEncodeStdColormap, _XimDecodeStdColormap}, - {XNForeground, 0, + {OFFSET_XNFOREGROUND, 0, XOffsetOf(ICStatusAttributes, foreground), _XimDefaultFg, _XimEncodeLong, _XimDecodeLong}, - {XNBackground, 0, + {OFFSET_XNBACKGROUND, 0, XOffsetOf(ICStatusAttributes, background), _XimDefaultBg, _XimEncodeLong, _XimDecodeLong}, - {XNBackgroundPixmap, 0, + {OFFSET_XNBACKGROUNDPIXMAP, 0, XOffsetOf(ICStatusAttributes, background_pixmap), _XimDefaultBgPixmap, _XimEncodeBgPixmap, _XimDecodeBgPixmap}, - {XNFontSet, 0, + {OFFSET_XNFONTSET, 0, XOffsetOf(ICStatusAttributes, fontset), _XimDefaultFontSet, _XimEncodeFontSet, _XimDecodeFontSet}, - {XNLineSpace, 0, + {OFFSET_XNLINESPACE, 0, XOffsetOf(ICStatusAttributes, line_spacing), _XimDefaultLineSpace, _XimEncodeLineSpace, _XimDecodeLineSpace}, - {XNCursor, 0, + {OFFSET_XNCURSOR, 0, XOffsetOf(ICStatusAttributes, cursor), _XimDefaultCursor, _XimEncodeCursor, _XimDecodeCursor}, - {XNStatusStartCallback, 0, + {OFFSET_XNSTATUSSTARTCALLBACK, 0, XOffsetOf(ICStatusAttributes, start_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNStatusDoneCallback, 0, + {OFFSET_XNSTATUSDONECALLBACK, 0, XOffsetOf(ICStatusAttributes, done_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNStatusDrawCallback, 0, + {OFFSET_XNSTATUSDRAWCALLBACK, 0, XOffsetOf(ICStatusAttributes, draw_callback), NULL, _XimEncodeCallback, _XimDecodeCallback} }; typedef struct _XimIMMode { - char *name; - XrmQuark quark; + unsigned short name_offset; unsigned short mode; } XimIMMode; -static XimIMMode im_mode[] = { - {XNQueryInputStyle, 0, +static const XimIMMode im_mode[] = { + {OFFSET_XNQUERYINPUTSTYLE, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}, - {XNDestroyCallback, 0, + {OFFSET_XNDESTROYCALLBACK, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)}, - {XNResourceName, 0, + {OFFSET_XNRESOURCENAME, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)}, - {XNResourceClass, 0, + {OFFSET_XNRESOURCECLASS, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)}, - {XNQueryIMValuesList, 0, + {OFFSET_XNQUERYIMVALUESLIST, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}, - {XNQueryICValuesList, 0, + {OFFSET_XNQUERYICVALUESLIST, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}, - {XNVisiblePosition, 0, + {OFFSET_XNVISIBLEPOSITION, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)} }; typedef struct _XimICMode { - char *name; - XrmQuark quark; + unsigned short name_offset; unsigned short preedit_callback_mode; unsigned short preedit_position_mode; unsigned short preedit_area_mode; @@ -1689,8 +1771,8 @@ typedef struct _XimICMode { unsigned short status_none_mode; } XimICMode; -static XimICMode ic_mode[] = { - {XNInputStyle, 0, +static const XimICMode ic_mode[] = { + {OFFSET_XNINPUTSTYLE, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), @@ -1700,7 +1782,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET), (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET), (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET)}, - {XNClientWindow, 0, + {OFFSET_XNCLIENTWINDOW, (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), @@ -1710,7 +1792,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET), (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET), 0}, - {XNFocusWindow, 0, + {OFFSET_XNFOCUSWINDOW, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1720,7 +1802,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNResourceName, 0, + {OFFSET_XNRESOURCENAME, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1730,7 +1812,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNResourceClass, 0, + {OFFSET_XNRESOURCECLASS, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1740,7 +1822,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNGeometryCallback, 0, + {OFFSET_XNGEOMETRYCALLBACK, 0, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1750,7 +1832,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0}, - {XNFilterEvents, 0, + {OFFSET_XNFILTEREVENTS, XIM_MODE_PRE_GET, XIM_MODE_PRE_GET, XIM_MODE_PRE_GET, @@ -1760,7 +1842,7 @@ static XimICMode ic_mode[] = { XIM_MODE_STS_GET, XIM_MODE_STS_GET, XIM_MODE_STS_GET}, - {XNDestroyCallback, 0, + {OFFSET_XNDESTROYCALLBACK, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1770,7 +1852,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStringConversionCallback, 0, + {OFFSET_XNSTRINGCONVERSIONCALLBACK, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1780,7 +1862,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStringConversion, 0, + {OFFSET_XNSTRINGCONVERSION, XIM_MODE_PRE_SET, XIM_MODE_PRE_SET, XIM_MODE_PRE_SET, @@ -1790,7 +1872,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNResetState, 0, + {OFFSET_XNRESETSTATE, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1800,7 +1882,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNHotKey, 0, + {OFFSET_XNHOTKEY, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1810,7 +1892,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNHotKeyState, 0, + {OFFSET_XNHOTKEYSTATE, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1820,7 +1902,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditAttributes, 0, + {OFFSET_XNPREEDITATTRIBUTES, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1830,7 +1912,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStatusAttributes, 0, + {OFFSET_XNSTATUSATTRIBUTES, 0, 0, 0, @@ -1840,7 +1922,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNArea, 0, + {OFFSET_XNAREA, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1850,7 +1932,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0}, - {XNAreaNeeded, 0, + {OFFSET_XNAREANEEDED, 0, 0, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1860,7 +1942,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0}, - {XNSpotLocation, 0, + {OFFSET_XNSPOTLOCATION, 0, /*(XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),*/ (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, @@ -1870,7 +1952,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNColormap, 0, + {OFFSET_XNCOLORMAP, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1880,7 +1962,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNStdColormap, 0, + {OFFSET_XNSTDCOLORMAP, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1890,7 +1972,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNForeground, 0, + {OFFSET_XNFOREGROUND, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1900,7 +1982,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNBackground, 0, + {OFFSET_XNBACKGROUND, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1910,7 +1992,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNBackgroundPixmap, 0, + {OFFSET_XNBACKGROUNDPIXMAP, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1920,7 +2002,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNFontSet, 0, + {OFFSET_XNFONTSET, 0, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1930,7 +2012,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNLineSpace, 0, + {OFFSET_XNLINESPACE, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1940,7 +2022,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNCursor, 0, + {OFFSET_XNCURSOR, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1950,7 +2032,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNPreeditStartCallback, 0, + {OFFSET_XNPREEDITSTARTCALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, @@ -1960,7 +2042,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditDoneCallback, 0, + {OFFSET_XNPREEDITDONECALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, @@ -1970,7 +2052,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditDrawCallback, 0, + {OFFSET_XNPREEDITDRAWCALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, @@ -1980,7 +2062,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditCaretCallback, 0, + {OFFSET_XNPREEDITCARETCALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, @@ -1990,7 +2072,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditState, 0, + {OFFSET_XNPREEDITSTATE, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -2000,7 +2082,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditStateNotifyCallback, 0, + {OFFSET_XNPREEDITSTATENOTIFYCALLBACK, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -2010,7 +2092,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStatusStartCallback, 0, + {OFFSET_XNSTATUSSTARTCALLBACK, 0, 0, 0, @@ -2020,7 +2102,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStatusDoneCallback, 0, + {OFFSET_XNSTATUSDONECALLBACK, 0, 0, 0, @@ -2030,7 +2112,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStatusDrawCallback, 0, + {OFFSET_XNSTATUSDRAWCALLBACK, 0, 0, 0, @@ -2042,6 +2124,12 @@ static XimICMode ic_mode[] = { 0} }; +/* the quarks are separated from im_mode/ic_mode so those arrays + * can be const. + */ +static XrmQuark im_mode_quark[sizeof(im_mode) / sizeof(im_mode[0])]; +static XrmQuark ic_mode_quark[sizeof(ic_mode) / sizeof(ic_mode[0])]; + Private Bool _XimSetResourceList( XIMResourceList *res_list, @@ -2154,7 +2242,7 @@ Public XIMResourceList _XimGetResourceListRec( XIMResourceList res_list, unsigned int list_num, - char *name) + const char *name) { XrmQuark quark = XrmStringToQuark(name); @@ -2177,13 +2265,13 @@ _XimSetIMValueData( if(!(res = _XimGetResourceListRec(res_list, list_num, p->name))) { return p->value; } - check = _XimCheckIMMode(res, XIM_SETIMVALUES); + check = _XimCheckIMMode(res, XIM_SETIMVALUES); if(check == XIM_CHECK_INVALID) { continue; } else if (check == XIM_CHECK_ERROR) { return p->value; } - + if(!_XimEncodeLocalIMAttr(res, top, p->value)) { return p->value; } @@ -2207,13 +2295,13 @@ _XimGetIMValueData( if(!(res = _XimGetResourceListRec(res_list, list_num, p->name))) { return p->value; } - check = _XimCheckIMMode(res, XIM_GETIMVALUES); + check = _XimCheckIMMode(res, XIM_GETIMVALUES); if(check == XIM_CHECK_INVALID) { continue; } else if (check == XIM_CHECK_ERROR) { return p->value; } - + if(!_XimDecodeLocalIMAttr(res, top, p->value)) { return p->value; } @@ -2232,7 +2320,7 @@ _XimSetIMMode( for(i = 0; i < n; i++) { if(!(res = _XimGetResourceListRecByQuark(res_list, - list_num, im_mode[i].quark))) { + list_num, im_mode_quark[i]))) { continue; } res->mode = im_mode[i].mode; @@ -2290,10 +2378,7 @@ Public int } Public void -_XimSetICMode(res_list, list_num, style) - XIMResourceList res_list; - unsigned int list_num; - XIMStyle style; +_XimSetICMode(XIMResourceList res_list, unsigned int list_num, XIMStyle style) { XIMResourceList res; unsigned int n = XIMNumber(ic_mode); @@ -2325,7 +2410,7 @@ _XimSetICMode(res_list, list_num, style) for(i = 0; i < n; i++) { if(!(res = _XimGetResourceListRecByQuark(res_list, - list_num, ic_mode[i].quark))) { + list_num, ic_mode_quark[i]))) { continue; } res->mode = ( (*(unsigned short *)((char *)&ic_mode[i] + pre_offset)) @@ -2542,7 +2627,7 @@ _XimSetLocalIMDefaults( for(i = 0; i < num; i++) { if((res = _XimGetResourceListRecByQuark( res_list, list_num, - info[i].quark)) == (XIMResourceList)NULL) { + info[i].quark)) == (XIMResourceList)NULL) { return False; } @@ -2700,7 +2785,7 @@ _XimEncodeLocalTopValue( if (flag) { _XRegisterFilterByType(ic->core.im->core.display, ic->core.focus_window, - KeyPress, KeyPress, _XimLocalFilter, (XPointer)ic); + KeyPress, KeyRelease, _XimLocalFilter, (XPointer)ic); } } else if (res->xrm_name == XrmStringToQuark(XNFocusWindow)) { if (ic->core.client_window) { @@ -2711,7 +2796,7 @@ _XimEncodeLocalTopValue( ic->core.focus_window = (Window)p->value; if (flag) { _XRegisterFilterByType(ic->core.im->core.display, - ic->core.focus_window, KeyPress, KeyPress, + ic->core.focus_window, KeyPress, KeyRelease, _XimLocalFilter, (XPointer)ic); } } else @@ -2887,7 +2972,7 @@ _XimDecodeAttr( if(!info[i].decode) { return False; } - return (*info[i].decode)(&info[i], top, val); + return (*info[i].decode)(&info[i], top, val); } } return False; @@ -2928,13 +3013,8 @@ _XimDecodeLocalICAttr( } Public char * -_XimGetICValueData(ic, top, res_list, list_num, values, mode) - Xic ic; - XPointer top; - XIMResourceList res_list; - unsigned int list_num; - XIMArg *values; - unsigned long mode; +_XimGetICValueData(Xic ic, XPointer top, XIMResourceList res_list, + unsigned int list_num, XIMArg *values, unsigned long mode) { register XIMArg *p; XIMResourceList res; @@ -2982,9 +3062,7 @@ _XimGetICValueData(ic, top, res_list, list_num, values, mode) } Public void -_XimGetCurrentIMValues(im, im_values) - Xim im; - XimDefIMValues *im_values; +_XimGetCurrentIMValues(Xim im, XimDefIMValues *im_values) { bzero((char *)im_values, sizeof(XimDefIMValues)); @@ -2998,9 +3076,7 @@ _XimGetCurrentIMValues(im, im_values) } Public void -_XimSetCurrentIMValues(im, im_values) - Xim im; - XimDefIMValues *im_values; +_XimSetCurrentIMValues(Xim im, XimDefIMValues *im_values) { im->core.styles = im_values->styles; im->core.im_values_list = im_values->im_values_list; @@ -3012,9 +3088,7 @@ _XimSetCurrentIMValues(im, im_values) } Public void -_XimGetCurrentICValues(ic, ic_values) - Xic ic; - XimDefICValues *ic_values; +_XimGetCurrentICValues(Xic ic, XimDefICValues *ic_values) { bzero((char *)ic_values, sizeof(XimDefICValues)); @@ -3067,7 +3141,7 @@ _XimInitialIMOffsetInfo(void) register int i; for(i = 0; i < n; i++) { - im_attr_info[i].quark = XrmStringToQuark(im_attr_info[i].name); + im_attr_info[i].quark = XrmStringToQuark(GET_NAME(im_attr_info[i])); } } @@ -3079,17 +3153,17 @@ _XimInitialICOffsetInfo(void) n = XIMNumber(ic_attr_info); for(i = 0; i < n; i++) { - ic_attr_info[i].quark = XrmStringToQuark(ic_attr_info[i].name); + ic_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_attr_info[i])); } n = XIMNumber(ic_pre_attr_info); for(i = 0; i < n; i++) { - ic_pre_attr_info[i].quark = XrmStringToQuark(ic_pre_attr_info[i].name); + ic_pre_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_pre_attr_info[i])); } n = XIMNumber(ic_sts_attr_info); for(i = 0; i < n; i++) { - ic_sts_attr_info[i].quark = XrmStringToQuark(ic_sts_attr_info[i].name); + ic_sts_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_sts_attr_info[i])); } } @@ -3100,7 +3174,7 @@ _XimInitialIMMode(void) register int i; for(i = 0; i < n; i++) { - im_mode[i].quark = XrmStringToQuark(im_mode[i].name); + im_mode_quark[i] = XrmStringToQuark(GET_NAME(im_mode[i])); } } @@ -3111,7 +3185,7 @@ _XimInitialICMode(void) register int i; for(i = 0; i < n; i++) { - ic_mode[i].quark = XrmStringToQuark(ic_mode[i].name); + ic_mode_quark[i] = XrmStringToQuark(GET_NAME(ic_mode[i])); } } diff --git a/nx-X11/lib/X11/imRmAttr.c b/nx-X11/lib/X11/imRmAttr.c index a73e0a9b9..b6d1e1293 100644 --- a/nx-X11/lib/X11/imRmAttr.c +++ b/nx-X11/lib/X11/imRmAttr.c @@ -10,7 +10,7 @@ in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of -this software for any purpose. +this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, @@ -21,7 +21,7 @@ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -457,7 +457,7 @@ _XimDecodeIMATTRIBUTE( if (total < min_len) return p->name; - if (!(_XimAttributeToValue((Xic) im->private.local.current_ic, + if (!(_XimAttributeToValue((Xic) im->private.local.current_ic, res, &buf[2], buf[1], p->value, mode))) return p->name; } diff --git a/nx-X11/lib/X11/imThaiFlt.c b/nx-X11/lib/X11/imThaiFlt.c index e62dea091..5f67373d1 100644 --- a/nx-X11/lib/X11/imThaiFlt.c +++ b/nx-X11/lib/X11/imThaiFlt.c @@ -27,13 +27,13 @@ Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in +both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. +software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL @@ -46,20 +46,20 @@ SOFTWARE. ******************************************************************/ /* -**++ -** FACILITY: -** -** Xlib -** -** ABSTRACT: -** +**++ +** FACILITY: +** +** Xlib +** +** ABSTRACT: +** ** Thai specific functions. ** Handles character classifications, composibility checking, ** Input sequence check and other Thai specific requirements ** according to WTT specification and DEC extensions. -** -** MODIFICATION HISTORY: -** +** +** MODIFICATION HISTORY: +** **/ #ifdef HAVE_CONFIG_H @@ -316,17 +316,17 @@ THAI_istone (unsigned char ch) Private Bool THAI_iscomposible ( - unsigned char follow_ch, + unsigned char follow_ch, unsigned char lead_ch) {/* "Can follow_ch be put in the same display cell as lead_ch?" */ - return (write_rules_lookup[THAI_chtype(lead_ch)][THAI_chtype(follow_ch)] + return (write_rules_lookup[THAI_chtype(lead_ch)][THAI_chtype(follow_ch)] == CP); } Private Bool THAI_isaccepted ( - unsigned char follow_ch, + unsigned char follow_ch, unsigned char lead_ch, unsigned char mode) { @@ -335,11 +335,11 @@ THAI_isaccepted ( switch (mode) { case WTT_ISC1: - iskeyvalid = + iskeyvalid = (wtt_isc1_lookup[THAI_chtype(lead_ch)][THAI_chtype(follow_ch)] != RJ); break; case WTT_ISC2: - iskeyvalid = + iskeyvalid = (wtt_isc2_lookup[THAI_chtype(lead_ch)][THAI_chtype(follow_ch)] != RJ); break; case THAICAT_ISC: @@ -355,15 +355,15 @@ THAI_isaccepted ( } #ifdef UNUSED -Private void +Private void THAI_apply_write_rules( - unsigned char *instr, - unsigned char *outstr, - unsigned char insert_ch, + unsigned char *instr, + unsigned char *outstr, + unsigned char insert_ch, int *num_insert_ch) { /* -Input parameters: +Input parameters: instr - input string insert_ch specify what char to be added when invalid composition is found Output parameters: @@ -387,8 +387,8 @@ Output parameters: *out_ch++ = *lead_ch; while (*follow_ch != '\0') /* more char in string to check */ { - if (THAI_isdead(*follow_ch) && - !THAI_iscomposible(*follow_ch,*lead_ch)) + if (THAI_isdead(*follow_ch) && + !THAI_iscomposible(*follow_ch,*lead_ch)) { *out_ch++ = SPACE; (*num_insert_ch)++; @@ -401,9 +401,9 @@ Output parameters: } } -Private int +Private int THAI_find_chtype ( - unsigned char *instr, + unsigned char *instr, int chtype) { /* @@ -421,7 +421,7 @@ Output parameters: case DEAD: for (i = 0; *instr != '\0' && THAI_isdead(*instr); i++, instr++) ; - if (*instr != '\0') position = i; + if (*instr != '\0') position = i; break; default: break; @@ -430,12 +430,12 @@ Output parameters: } -Private int +Private int THAI_apply_scm( - unsigned char *instr, - unsigned char *outstr, - unsigned char spec_ch, - int num_sp, + unsigned char *instr, + unsigned char *outstr, + unsigned char spec_ch, + int num_sp, unsigned char insert_ch) { unsigned char *scan, *outch; @@ -450,7 +450,7 @@ THAI_apply_scm( if (THAI_isdead(*scan)) dead_count++; /* count number of non-spacing char */ if (*scan == spec_ch) - if (!isconsecutive) + if (!isconsecutive) found_count++; /* count number consecutive spec char found */ *outch++ = *scan++; if (found_count == num_sp) { @@ -472,7 +472,7 @@ Private void SetLed(Display *dpy, int num, int state); Private CARD8 FindKeyCode(); -/* The following functions are specific to this module */ +/* The following functions are specific to this module */ Private int XThaiTranslateKey(); Private int XThaiTranslateKeySym(); @@ -520,9 +520,9 @@ Private Bool ThaiComposeConvert( * Macros to save and recall last input character in XIC */ #define IC_SavePreviousChar(ic,ch) \ - (*((ic)->private.local.context->mb) = (char) (ch)) + ((ic)->private.local.base.mb[(ic)->private.local.base.tree[(ic)->private.local.context].mb] = (char) (ch)) #define IC_ClearPreviousChar(ic) \ - (*((ic)->private.local.context->mb) = 0) + ((ic)->private.local.base.mb[(ic)->private.local.base.tree[(ic)->private.local.context].mb] = 0) #define IC_GetPreviousChar(ic) \ (IC_RealGetPreviousChar(ic,1)) #define IC_GetContextChar(ic) \ @@ -534,6 +534,7 @@ Private unsigned char IC_RealGetPreviousChar(Xic ic, unsigned short pos) { XICCallback* cb = &ic->core.string_conversion_callback; + DefTreeBase *b = &ic->private.local.base; if (cb && cb->callback) { XIMStringConversionCallbackStruct screc; @@ -550,25 +551,49 @@ IC_RealGetPreviousChar(Xic ic, unsigned short pos) (cb->callback)((XIC)ic, cb->client_data, (XPointer)&screc); if (!screc.text) - return (unsigned char) *((ic)->private.local.context->mb); + return (unsigned char) b->mb[b->tree[(ic)->private.local.context].mb]; if ((screc.text->feedback && *screc.text->feedback == XIMStringConversionLeftEdge) || screc.text->length < 1) { c = 0; } else { + Xim im; + XlcConv conv; + int from_left; + int to_left; + char *from_buf; + char *to_buf; + + im = (Xim) XIMOfIC((XIC)ic); if (screc.text->encoding_is_wchar) { - c = ucs2tis(screc.text->string.wcs[0]); - XFree(screc.text->string.wcs); + conv = _XlcOpenConverter(im->core.lcd, XlcNWideChar, + im->core.lcd, XlcNCharSet); + from_buf = (char *) screc.text->string.wcs; + from_left = screc.text->length * sizeof(wchar_t); } else { - c = screc.text->string.mbs[0]; - XFree(screc.text->string.mbs); + conv = _XlcOpenConverter(im->core.lcd, XlcNMultiByte, + im->core.lcd, XlcNCharSet); + from_buf = screc.text->string.mbs; + from_left = screc.text->length; + } + to_buf = (char *)&c; + to_left = 1; + + _XlcResetConverter(conv); + if (_XlcConvert(conv, (XPointer *)&from_buf, &from_left, + (XPointer *)&to_buf, &to_left, NULL, 0) < 0) + { + c = (unsigned char) b->mb[b->tree[(ic)->private.local.context].mb]; } + _XlcCloseConverter(conv); + + XFree(screc.text->string.mbs); } XFree(screc.text); return c; } else { - return (unsigned char) *((ic)->private.local.context->mb); + return (unsigned char) b->mb[b->tree[(ic)->private.local.context].mb]; } } @@ -791,12 +816,12 @@ XThaiTranslateKey( } /* * ThaiCat keyboard support : - * When the Shift and Thai keys are hold for some keys a 'Thai Compose' + * When the Shift and Thai keys are hold for some keys a 'Thai Compose' * character code is generated which is different from column 3 and - * 4 of the keymap. + * 4 of the keymap. * Since we don't know whether ThaiCat keyboard or WTT keyboard is * in use, the same mapping is done for all Thai input. - * We just arbitary choose to use column 3 keysyms as the indices of + * We just arbitary choose to use column 3 keysyms as the indices of * this mapping. * When the control key is also hold, this mapping has no effect. */ @@ -814,7 +839,7 @@ XThaiTranslateKey( return 1; } -/* +/* * XThaiTranslateKeySym * * Translate KeySym to TACTIS code output. @@ -833,7 +858,7 @@ XThaiTranslateKeySym( int nbytes) { KeySym ckey = 0; - register struct _XKeytrans *p; + register struct _XKeytrans *p; int length; unsigned long hiBytes; register unsigned char c; @@ -910,8 +935,8 @@ XThaiTranslateKeySym( } /* * ThaiCat has a key that generates two TACTIS codes D1 & E9. - * It is represented by the latin-1 keysym XK_thorn (0xfe). - * If c is XK_thorn, this key is pressed and it is converted to + * It is represented by the latin-1 keysym XK_thorn (0xfe). + * If c is XK_thorn, this key is pressed and it is converted to * 0xd1 0xe9. */ if (c == XK_thorn) { @@ -937,7 +962,7 @@ FindKeyCode( register KeySym code) { - register KeySym *kmax = dpy->keysyms + + register KeySym *kmax = dpy->keysyms + (dpy->max_keycode - dpy->min_keycode + 1) * dpy->keysyms_per_keycode; register KeySym *k = dpy->keysyms; while (k < kmax) { @@ -987,8 +1012,8 @@ ComputeMaskFromKeytrans( * * * Compose handling routines - compose handlers 0,1,2 - * - * + * + * ************************************************************************/ #define NORMAL_KEY_STATE 0 @@ -1084,7 +1109,7 @@ int tactis_code; hi_digit = ks1 - XK_a + 10; else /* out of range */ return NoSymbol; - + if ((ks2 >= XK_0) && (ks2 <= XK_9)) lo_digit = ks2 - XK_0; else if ((ks2 >= XK_A) && (ks2 <= XK_F)) @@ -1153,7 +1178,7 @@ void SetLed( #endif /* - * Initialize ISC mode from im modifier + * Initialize ISC mode from im modifier */ Private void InitIscMode(Xic ic) { @@ -1184,20 +1209,21 @@ Private void InitIscMode(Xic ic) return; } - + /* * Helper functions for _XimThaiFilter() */ Private Bool ThaiFltAcceptInput(Xic ic, unsigned char new_char, KeySym symbol) { - ic->private.local.composed->wc[0] = tis2ucs(new_char); - ic->private.local.composed->wc[1] = '\0'; + DefTreeBase *b = &ic->private.local.base; + b->wc[b->tree[ic->private.local.composed].wc+0] = tis2ucs(new_char); + b->wc[b->tree[ic->private.local.composed].wc+1] = '\0'; if ((new_char <= 0x1f) || (new_char == 0x7f)) - ic->private.local.composed->keysym = symbol; + b->tree[ic->private.local.composed].keysym = symbol; else - ic->private.local.composed->keysym = NoSymbol; + b->tree[ic->private.local.composed].keysym = NoSymbol; return True; } @@ -1205,12 +1231,13 @@ ThaiFltAcceptInput(Xic ic, unsigned char new_char, KeySym symbol) Private Bool ThaiFltReorderInput(Xic ic, unsigned char previous_char, unsigned char new_char) { + DefTreeBase *b = &ic->private.local.base; if (!IC_DeletePreviousChar(ic)) return False; - ic->private.local.composed->wc[0] = tis2ucs(new_char); - ic->private.local.composed->wc[1] = tis2ucs(previous_char); - ic->private.local.composed->wc[2] = '\0'; + b->wc[b->tree[ic->private.local.composed].wc+0] = tis2ucs(new_char); + b->wc[b->tree[ic->private.local.composed].wc+1] = tis2ucs(previous_char); + b->wc[b->tree[ic->private.local.composed].wc+2] = '\0'; - ic->private.local.composed->keysym = NoSymbol; + b->tree[ic->private.local.composed].keysym = NoSymbol; return True; } @@ -1218,27 +1245,40 @@ ThaiFltReorderInput(Xic ic, unsigned char previous_char, unsigned char new_char) Private Bool ThaiFltReplaceInput(Xic ic, unsigned char new_char, KeySym symbol) { + DefTreeBase *b = &ic->private.local.base; if (!IC_DeletePreviousChar(ic)) return False; - ic->private.local.composed->wc[0] = tis2ucs(new_char); - ic->private.local.composed->wc[1] = '\0'; + b->wc[b->tree[ic->private.local.composed].wc+0] = tis2ucs(new_char); + b->wc[b->tree[ic->private.local.composed].wc+1] = '\0'; if ((new_char <= 0x1f) || (new_char == 0x7f)) - ic->private.local.composed->keysym = symbol; + b->tree[ic->private.local.composed].keysym = symbol; else - ic->private.local.composed->keysym = NoSymbol; + b->tree[ic->private.local.composed].keysym = NoSymbol; return True; } +Private unsigned +NumLockMask(Display *d) +{ + int i; + XModifierKeymap *map = XGetModifierMapping (d); + KeyCode numlock_keycode = XKeysymToKeycode (d, XK_Num_Lock); + if (numlock_keycode == NoSymbol) + return 0; + + for (i = 0; i < 8; i++) { + if (map->modifiermap[map->max_keypermod * i] == numlock_keycode) + return 1 << i; + } + return 0; +} + /* * Filter function for TACTIS */ Bool -_XimThaiFilter(d, w, ev, client_data) -Display *d; -Window w; -XEvent *ev; -XPointer client_data; +_XimThaiFilter(Display *d, Window w, XEvent *ev, XPointer client_data) { Xic ic = (Xic)client_data; KeySym symbol; @@ -1254,6 +1294,7 @@ XPointer client_data; #endif wchar_t wbuf[10]; Bool isReject; + DefTreeBase *b = &ic->private.local.base; if ((ev->type != KeyPress) || (ev->xkey.keycode == 0)) @@ -1264,7 +1305,7 @@ XPointer client_data; XwcLookupString((XIC)ic, &ev->xkey, wbuf, sizeof(wbuf) / sizeof(wbuf[0]), &symbol, NULL); - if ((ev->xkey.state & (AllMods & ~ShiftMask)) || + if ((ev->xkey.state & (AllMods & ~(ShiftMask|LockMask|NumLockMask(d)))) || ((symbol >> 8 == 0xFF) && ((XK_BackSpace <= symbol && symbol <= XK_Clear) || (symbol == XK_Return) || @@ -1278,7 +1319,7 @@ XPointer client_data; IsMiscFunctionKey(symbol) || IsFunctionKey(symbol)))) { - IC_ClearPreviousChar(ic); + IC_ClearPreviousChar(ic); return False; } if (((symbol >> 8 == 0xFF) && @@ -1297,7 +1338,7 @@ XPointer client_data; return False; /* - * Hex input method processing + * Hex input method processing */ thai_part = &ic->private.local.thai; @@ -1356,11 +1397,11 @@ XPointer client_data; return True; } - _Xlcwcstombs(ic->core.im->core.lcd, ic->private.local.composed->mb, - ic->private.local.composed->wc, 10); + _Xlcwcstombs(ic->core.im->core.lcd, &b->mb[b->tree[ic->private.local.composed].mb], + &b->wc[b->tree[ic->private.local.composed].wc], 10); - _Xlcmbstoutf8(ic->core.im->core.lcd, ic->private.local.composed->utf8, - ic->private.local.composed->mb, 10); + _Xlcmbstoutf8(ic->core.im->core.lcd, &b->utf8[b->tree[ic->private.local.composed].utf8], + &b->mb[b->tree[ic->private.local.composed].mb], 10); /* Remember the last character inputted * (as fallback in case StringConversionCallback is not provided) diff --git a/nx-X11/lib/X11/imThaiIc.c b/nx-X11/lib/X11/imThaiIc.c index 5f022f2fd..72e99ba75 100644 --- a/nx-X11/lib/X11/imThaiIc.c +++ b/nx-X11/lib/X11/imThaiIc.c @@ -15,17 +15,17 @@ makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL -WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky Ling Digital Equipment Corporation frankyling@hgrd01.enet.dec.com @@ -60,6 +60,8 @@ _XimThaiDestroyIC( XIC xic) { Xic ic = (Xic)xic; + DefTreeBase *b = &ic->private.local.base; + if(((Xim)ic->core.im)->private.local.current_ic == (XIC)ic) { _XimThaiUnSetFocus(xic); } @@ -68,14 +70,14 @@ _XimThaiDestroyIC( ic->private.local.ic_resources = NULL; } - Xfree(ic->private.local.context->mb); - Xfree(ic->private.local.context->wc); - Xfree(ic->private.local.context->utf8); - Xfree(ic->private.local.context); - Xfree(ic->private.local.composed->mb); - Xfree(ic->private.local.composed->wc); - Xfree(ic->private.local.composed->utf8); - Xfree(ic->private.local.composed); + if (b->tree) Xfree (b->tree); + if (b->mb) Xfree (b->mb); + if (b->wc) Xfree (b->wc); + if (b->utf8) Xfree (b->utf8); + b->tree = NULL; + b->mb = NULL; + b->wc = NULL; + b->utf8 = NULL; return; } @@ -105,11 +107,12 @@ _XimThaiReset( XIC xic) { Xic ic = (Xic)xic; + DefTreeBase *b = &ic->private.local.base; ic->private.local.thai.comp_state = 0; ic->private.local.thai.keysym = 0; - ic->private.local.composed->mb[0] = '\0'; - ic->private.local.composed->wc[0] = 0; - ic->private.local.composed->utf8[0] = '\0'; + b->mb[b->tree[ic->private.local.composed].mb] = '\0'; + b->wc[b->tree[ic->private.local.composed].wc] = '\0'; + b->utf8[b->tree[ic->private.local.composed].utf8] = '\0'; } Private char * @@ -152,6 +155,7 @@ _XimThaiCreateIC( XIMResourceList res; unsigned int num; int len; + DefTree *tree; if((ic = (Xic)Xmalloc(sizeof(XicRec))) == (Xic)NULL) { return ((XIC)NULL); @@ -161,30 +165,23 @@ _XimThaiCreateIC( ic->methods = &Thai_ic_methods; ic->core.im = im; ic->core.filter_events = KeyPressMask; - if ((ic->private.local.context = (DefTree *)Xmalloc(sizeof(DefTree))) - == (DefTree *)NULL) - goto Set_Error; - if ((ic->private.local.context->mb = (char *)Xmalloc(10)) - == (char *)NULL) - goto Set_Error; - if ((ic->private.local.context->wc = (wchar_t *)Xmalloc(10*sizeof(wchar_t))) - == (wchar_t *)NULL) - goto Set_Error; - if ((ic->private.local.context->utf8 = (char *)Xmalloc(10)) - == (char *)NULL) - goto Set_Error; - if ((ic->private.local.composed = (DefTree *)Xmalloc(sizeof(DefTree))) - == (DefTree *)NULL) + + if (! (ic->private.local.base.tree = tree = (DefTree *)Xmalloc(sizeof(DefTree)*3)) ) goto Set_Error; - if ((ic->private.local.composed->mb = (char *)Xmalloc(10)) - == (char *)NULL) + if (! (ic->private.local.base.mb = (char *)Xmalloc(21)) ) goto Set_Error; - if ((ic->private.local.composed->wc = (wchar_t *)Xmalloc(10*sizeof(wchar_t))) - == (wchar_t *)NULL) + if (! (ic->private.local.base.wc = (wchar_t*)Xmalloc(sizeof(wchar_t)*21)) ) goto Set_Error; - if ((ic->private.local.composed->utf8 = (char *)Xmalloc(10)) - == (char *)NULL) + if (! (ic->private.local.base.utf8 = (char *)Xmalloc(21)) ) goto Set_Error; + ic->private.local.context = 1; + tree[1].mb = 1; + tree[1].wc = 1; + tree[1].utf8 = 1; + ic->private.local.composed = 2; + tree[2].mb = 11; + tree[2].wc = 11; + tree[2].utf8 = 11; ic->private.local.thai.comp_state = 0; ic->private.local.thai.keysym = 0; diff --git a/nx-X11/lib/X11/imThaiIm.c b/nx-X11/lib/X11/imThaiIm.c index 00a6d13b1..73de70748 100644 --- a/nx-X11/lib/X11/imThaiIm.c +++ b/nx-X11/lib/X11/imThaiIm.c @@ -15,17 +15,17 @@ makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL -WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - Author: Takashi Fujiwara FUJITSU LIMITED + Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky Ling Digital Equipment Corporation frankyling@hgrd01.enet.dec.com @@ -59,21 +59,25 @@ Private XIMMethodsRec Xim_im_thai_methods = { #define THAI_LANGUAGE_NAME "th" Bool -_XimCheckIfThaiProcessing(im) - Xim im; +_XimCheckIfThaiProcessing(Xim im) { char *language; _XGetLCValues(im->core.lcd, XlcNLanguage, &language, NULL); - if(strcmp(language, THAI_LANGUAGE_NAME) == 0) { + if(strcmp(language, THAI_LANGUAGE_NAME) == 0 && + (strcmp(im->core.im_name, "") == 0 || + strcmp(im->core.im_name, "BasicCheck") == 0 || + strcmp(im->core.im_name, "Strict") == 0 || + strcmp(im->core.im_name, "Thaicat") == 0 || + strcmp(im->core.im_name, "Passthrough") == 0)) + { return(True); } return(False); } Public Bool -_XimThaiOpenIM(im) - Xim im; +_XimThaiOpenIM(Xim im) { XLCd lcd = im->core.lcd; XlcConv conv; @@ -142,8 +146,7 @@ Open_Error : } Public void -_XimThaiIMFree(im) - Xim im; +_XimThaiIMFree(Xim im) { if(im->core.im_resources) { Xfree(im->core.im_resources); @@ -213,8 +216,7 @@ _XimThaiIMFree(im) } Public Status -_XimThaiCloseIM(xim) - XIM xim; +_XimThaiCloseIM(XIM xim) { Xim im = (Xim)xim; XIC ic; diff --git a/nx-X11/lib/X11/imTrX.c b/nx-X11/lib/X11/imTrX.c index 723c97021..eba328057 100644 --- a/nx-X11/lib/X11/imTrX.c +++ b/nx-X11/lib/X11/imTrX.c @@ -1,29 +1,50 @@ +/* + * Copyright 1992 Sun Microsystems, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ /****************************************************************** - Copyright 1992 by Sun Microsystems, Inc. Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear -in supporting documentation, and that the name of Sun Microsystems, Inc. -and FUJITSU LIMITED not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Sun Microsystems, Inc. and FUJITSU LIMITED makes no representations about -the suitability of this software for any purpose. +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. It is provided "as is" without express or implied warranty. -Sun Microsystems Inc. AND FUJITSU LIMITED DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS, IN NO EVENT SHALL Sun Microsystems, Inc. AND FUJITSU LIMITED -BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. - Takashi Fujiwara FUJITSU LIMITED + Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -102,12 +123,12 @@ _XimXFilterWaitEvent( spec->ev = (XPointer)ev; ret = _XimFilterWaitEvent(im); - /* + /* * If ev is a pointer to a stack variable, there could be * a coredump later on if the pointer is dereferenced. * Therefore, reset to NULL to force reinitialization in * _XimXRead(). - * + * * Keep in mind _XimXRead may be called again when the stack * is very different. */ @@ -153,6 +174,8 @@ _XimXConnect(Xim im) event.xclient.data.l[0] = (CARD32)spec->lib_connect_wid; event.xclient.data.l[1] = spec->major_code; event.xclient.data.l[2] = spec->minor_code; + event.xclient.data.l[3] = 0; + event.xclient.data.l[4] = 0; if(event.xclient.data.l[1] == 1 || event.xclient.data.l[1] == 2) { XWindowAttributes atr; @@ -193,7 +216,7 @@ _XimXConnect(Xim im) ((major_code == 2) && (minor_code == 1))) { spec->BoundarySize = (CARD32)event.xclient.data.l[3]; } - + /* ClientMessage Event Filter */ _XRegisterFilterByType(im->core.display, spec->lib_connect_wid, ClientMessage, ClientMessage, @@ -233,7 +256,7 @@ _NewAtom( } Private Bool -_XimXWrite(Xim im, INT16 len, XPointer data) +_XimXWrite(Xim im, INT16 len, XPointer data) { Atom atom; char atomName[16]; @@ -353,6 +376,7 @@ _XimXGetReadData( (void)memcpy(buf, prop_ret, (int)nitems); *ret_len = (int)nitems; if (bytes_after_ret > 0) { + XFree(prop_ret); XGetWindowProperty(im->core.display, spec->lib_connect_wid, prop, 0L, ((length + bytes_after_ret + 3)/ 4), True, AnyPropertyType, @@ -360,7 +384,7 @@ _XimXGetReadData( &prop_ret); XChangeProperty(im->core.display, spec->lib_connect_wid, prop, XA_STRING, 8, PropModePrepend, &prop_ret[length], - (nitems - length)); + (nitems - length)); } } else { (void)memcpy(buf, prop_ret, buf_len); @@ -375,7 +399,7 @@ _XimXGetReadData( &type_ret, &format_ret, &nitems, &bytes_after_ret, &prop_ret); } XChangeProperty(im->core.display, spec->lib_connect_wid, prop, - XA_STRING, 8, PropModePrepend, &prop_ret[buf_len], len); + XA_STRING, 8, PropModePrepend, &prop_ret[buf_len], len); event->xclient.data.l[0] = (long)len; event->xclient.data.l[1] = (long)prop; XPutBackEvent(im->core.display, event); @@ -400,7 +424,7 @@ _XimXGetReadData( *ret_len = buf_len; len = nitems - buf_len; XChangeProperty(im->core.display, spec->lib_connect_wid, prop, - XA_STRING, 8, PropModePrepend, &prop_ret[buf_len], len); + XA_STRING, 8, PropModePrepend, &prop_ret[buf_len], len); } XFree(prop_ret); } @@ -459,9 +483,7 @@ _XimXFlush(Xim im) } Public Bool -_XimXConf(im, address) - Xim im; - char *address; +_XimXConf(Xim im, char *address) { XSpecRec *spec; diff --git a/nx-X11/lib/X11/imTrans.c b/nx-X11/lib/X11/imTrans.c index ec2757983..0fdc8cd9a 100644 --- a/nx-X11/lib/X11/imTrans.c +++ b/nx-X11/lib/X11/imTrans.c @@ -1,29 +1,50 @@ +/* + * Copyright 1992 Sun Microsystems, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ /****************************************************************** - Copyright 1992 by Sun Microsystems, Inc. Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear -in supporting documentation, and that the name of Sun Microsystems, Inc. -and FUJITSU LIMITED not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Sun Microsystems, Inc. and FUJITSU LIMITED makes no representations about -the suitability of this software for any purpose. +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. It is provided "as is" without express or implied warranty. -Sun Microsystems Inc. AND FUJITSU LIMITED DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS, IN NO EVENT SHALL Sun Microsystems, Inc. AND FUJITSU LIMITED -BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. - Takashi Fujiwara FUJITSU LIMITED + Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -74,10 +95,7 @@ _XimTransConnect( spec->trans_conn = NULL; if (connect_stat == TRANS_TRY_CONNECT_AGAIN) - { - sleep(1); continue; - } else break; } @@ -98,8 +116,8 @@ _XimTransConnect( _XRegisterFilterByType(im->core.display, window, KeyPress, KeyPress, _XimTransFilterWaitEvent, (XPointer)im); - return _XRegisterInternalConnection(im->core.display, spec->fd, - (_XInternalConnectionProc)_XimTransInternalConnection, + return _XRegisterInternalConnection(im->core.display, spec->fd, + (_XInternalConnectionProc)_XimTransInternalConnection, (XPointer)im); } diff --git a/nx-X11/lib/X11/imTransR.c b/nx-X11/lib/X11/imTransR.c index 532eaf151..e536bbc9b 100644 --- a/nx-X11/lib/X11/imTransR.c +++ b/nx-X11/lib/X11/imTransR.c @@ -1,29 +1,50 @@ +/* + * Copyright 1992 Sun Microsystems, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ /****************************************************************** - Copyright 1992 by Sun Microsystems, Inc. Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear -in supporting documentation, and that the name of Sun Microsystems, Inc. -and FUJITSU LIMITED not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Sun Microsystems, Inc. and FUJITSU LIMITED makes no representations about -the suitability of this software for any purpose. +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. It is provided "as is" without express or implied warranty. -Sun Microsystems Inc. AND FUJITSU LIMITED DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS, IN NO EVENT SHALL Sun Microsystems, Inc. AND FUJITSU LIMITED -BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. - Takashi Fujiwara FUJITSU LIMITED + Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -37,7 +58,7 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "Ximint.h" Public TransportSW _XimTransportRec[] = { - { "X", _XimXConf }, /* 1st entry must be X. + { "X", _XimXConf }, /* 1st entry must be X. This will be a fallback */ #ifdef TCPCONN { "tcp", _XimTransConf }, /* use X transport lib */ @@ -55,15 +76,13 @@ Public TransportSW _XimTransportRec[] = { }; Public Bool -_XimConnect(im) - Xim im; +_XimConnect(Xim im) { return im->private.proto.connect(im); } Public Bool -_XimShutdown(im) - Xim im; +_XimShutdown(Xim im) { return im->private.proto.shutdown(im); } @@ -212,15 +231,8 @@ _XimCallDispatcher( } Public int -_XimRead(im, len, buf, buf_size, predicate, arg) - Xim im; - INT16 *len; - XPointer buf; - int buf_size; - Bool (*predicate)( - Xim, INT16, XPointer, XPointer - ); - XPointer arg; +_XimRead(Xim im, INT16 *len, XPointer buf, int buf_size, + Bool (*predicate)(Xim, INT16, XPointer, XPointer), XPointer arg) { INT16 read_len; int ret_code; @@ -252,16 +264,14 @@ _XimRegisterDispatcher( } Public void -_XimFlush(im) - Xim im; +_XimFlush(Xim im) { im->private.proto.flush(im); return; } Public Bool -_XimFilterWaitEvent(im) - Xim im; +_XimFilterWaitEvent(Xim im) { INT16 read_len; CARD32 reply32[BUFSIZE/4]; diff --git a/nx-X11/lib/X11/lcDefConv.c b/nx-X11/lib/X11/lcDefConv.c index 375d6419d..5860a79a5 100644 --- a/nx-X11/lib/X11/lcDefConv.c +++ b/nx-X11/lib/X11/lcDefConv.c @@ -44,7 +44,7 @@ #define MB_LEN_MAX 6 #endif -#if !defined(macII) && !defined(Lynx_22) && !defined(X_LOCALE) +#if !defined(Lynx_22) && !defined(X_LOCALE) #define STDCVT #endif diff --git a/nx-X11/lib/X11/lcEuc.c b/nx-X11/lib/X11/lcEuc.c index 3e8b77c88..442e3090f 100644 --- a/nx-X11/lib/X11/lcEuc.c +++ b/nx-X11/lib/X11/lcEuc.c @@ -62,7 +62,7 @@ OF THIS SOFTWARE. #define KANJI_CODESET 1 #define KANA_CODESET 2 #define USERDEF_CODESET 3 -#define MAX_CODESETS +#define MAX_CODESETS #define GR 0x80 /* begins right-side (non-ascii) region */ #define GL 0x7f /* ends left-side (ascii) region */ @@ -123,7 +123,7 @@ euc_mbstowcs( const char *inbufptr = *from; wchar_t *outbufptr = (wchar_t *) *to; - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); + CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); int codeset_num = XLC_GENERIC(lcd, codeset_num); Ulong wc_shift = XLC_GENERIC(lcd, wc_shift_bits); @@ -213,7 +213,7 @@ euc_mbstowcs( chrcode <<= (wc_shift * shift_mult); shift_mult--; - wc_tmp |= chrcode; + wc_tmp |= chrcode; if (--chr_len == 0) { wc_tmp |= wc_encode; @@ -438,11 +438,11 @@ euc_mbstocs( *from_left = tmp_from_left; *to = (XPointer) tmp_to; *to_left = tmp_to_left; - } + } if (num_args > 0) *((XlcCharSet *) args[0]) = charset; - + return unconv_num; } @@ -528,7 +528,7 @@ euc_cstombs( if (num_args < 1) return -1; - + if (!(codeset = GetCodeSetFromCharSet(lcd, (XlcCharSet) args[0]))) return -1; @@ -586,10 +586,10 @@ euc_cstowcs( int length; Ulong wc_shift_bits = XLC_GENERIC(lcd, wc_shift_bits); CodeSet codeset; - + if (num_args < 1) return -1; - + if (!(codeset = GetCodeSetFromCharSet(lcd, (XlcCharSet) args[0]))) return -1; @@ -602,7 +602,7 @@ euc_cstowcs( toptr += buf_len; *to = (XPointer) toptr; - + while (buf_len--) { wch = (wchar_t) BIT8OFF(*csptr); @@ -674,7 +674,7 @@ create_conv( conv = (XlcConv) Xmalloc(sizeof(XlcConvRec)); if (conv == NULL) return (XlcConv) NULL; - + conv->methods = methods; conv->state = (XPointer) lcd; return conv; @@ -1068,7 +1068,7 @@ euc_wcstocts( } - } while (length); + } while (length); } /* end for */ @@ -1327,7 +1327,7 @@ euc_mbstocts( unconv_num++; break; } - + if (ctptr) { strcpy(ctptr, ctdptr[cs_num]->ct_encoding); ctptr += ctdptr[cs_num]->ct_encoding_len; @@ -1347,7 +1347,7 @@ euc_mbstocts( do { *ctptr++ = charset == ct_state.GR_charset ? BIT8ON(*inbufptr++) : BIT8OFF(*inbufptr++); - } while (--clen); + } while (--clen); } *to = (XPointer)ctptr; diff --git a/nx-X11/lib/X11/lcGenConv.c b/nx-X11/lib/X11/lcGenConv.c index 0c1af957c..074a8d726 100644 --- a/nx-X11/lib/X11/lcGenConv.c +++ b/nx-X11/lib/X11/lcGenConv.c @@ -31,7 +31,7 @@ * */ /* - * 2000 + * 2000 * Modifier: Ivan Pascal The XFree86 Project */ @@ -53,13 +53,13 @@ #include "XlcGeneric.h" #include -#if !defined(macII) && !defined(Lynx_22) && !defined(X_LOCALE) +#if !defined(Lynx_22) && !defined(X_LOCALE) #define STDCVT #endif typedef struct _CTDataRec { - char *name; - char *encoding; /* Compound Text encoding */ + const char *name; + const char *encoding; /* Compound Text encoding */ } CTDataRec, *CTData; static CTDataRec directionality_data[] = @@ -199,7 +199,7 @@ mb_to_gi( return(mb_tmp); } - if (codeset->side == XlcC0 || codeset->side == XlcGL || + if (codeset->side == XlcC0 || codeset->side == XlcGL || codeset->side == XlcC1 || codeset->side == XlcGR) { for (i = 0; i < codeset->length; i++) @@ -281,7 +281,7 @@ wc_to_gi( wc = wc & ~wc_encode_mask; for (*glyph_index = 0, i = (*codeset)->length - 1; i >= 0; i--) - *glyph_index = (*glyph_index << 8) | + *glyph_index = (*glyph_index << 8) | ( ((unsigned long)wc >> (i * wc_shift_bits)) & mask ); return(True); @@ -300,7 +300,7 @@ mb_parse_codeset( ParseInfo *mb_parse_list = XLC_GENERIC(state->lcd, mb_parse_list); ParseInfo parse_info; CodeSet codeset; - + for (--num ; (parse_info = mb_parse_list[num]) != NULL; num++) { len = compare(src, parse_info->encoding, from_len); if (len > 0) { @@ -342,7 +342,7 @@ byteM_parse_codeset( continue; for (j = 0; j < codeset->length; j++) { - ch = *((unsigned char *)(inbufptr + j)); + ch = *((unsigned char *)(inbufptr + j)); byteM_rec = byteM[j]; byteinfo = byteM_rec.byteinfo; @@ -363,7 +363,7 @@ byteM_parse_codeset( } return(NULL); -} +} #define GLGR_parse_codeset(ch) \ (isrightside(ch) ? (state->GR_codeset) : \ @@ -428,7 +428,7 @@ ct_parse_csi( if ( !(*ctr_seq_len = strlen(directionality_data[i].encoding)) ) continue; - if ( strncmp(inbufptr, directionality_data[i].encoding, + if ( strncmp(inbufptr, directionality_data[i].encoding, *ctr_seq_len) == 0) return(True); } @@ -571,7 +571,7 @@ segment_conversion( range = segment_conv[i].range; if (*glyph_index < range.start || range.end < *glyph_index) return(True); - + *charset = segment_conv[i].dest; conv_rec.conv_num = segment_conv[i].conv_num; conv_rec.convlist = segment_conv[i].conv; @@ -799,7 +799,7 @@ mbstowcs_org( continue; } } - + /* next mb char data for byteM ? */ if ((codeset = byteM_parse_codeset(lcd, (inbufptr - 1)))) goto next_mb_char; @@ -807,7 +807,7 @@ mbstowcs_org( /* next mb char data for GL or GR side ? */ if ((codeset = GLGR_parse_codeset(ch))) goto next_mb_char; - + /* can't find codeset for the ch */ unconv_num++; continue; @@ -876,7 +876,7 @@ stdc_mbstowcs( /* null ? */ src++; src_left--; - if (dst) + if (dst) *dst++ = L'\0'; dst_left--; } @@ -916,7 +916,7 @@ wcstombs_org( const wchar_t *inbufptr = (const wchar_t *) *from; char *outbufptr = *to; int from_size = *from_left; - + const char *default_string = XLC_PUBLIC(lcd, default_string); int defstr_len = strlen(default_string); @@ -1031,14 +1031,14 @@ stdc_wcstombs( if (length > 0) { src++; src_left--; - if (dst) + if (dst) dst += length; dst_left -= length; } else if (length < 0) { src++; src_left--; unconv_num++; - } + } } *from = (XPointer) src; @@ -1117,7 +1117,7 @@ wcstocts( * +-----+-----+-----+-----+-----+-----+-----+---- ----+-----+-----+ * | esc sequence | M | L | encoding name | STX | * +-----+-----+-----+-----+-----+-----+-----+---- ----+-----+-----+ - * 4bytes 1byte 1byte variable length 1byte + * 4bytes 1byte 1byte variable length 1byte * | | * +-----------------------------------------+ * name length = ((M - 128) * 128) + (L - 128) @@ -1145,7 +1145,7 @@ wcstocts( *ext_seg_len = i % 128 + 128; ext_seg_len = NULL; } - + if (*to_left < total_len + 1) { unconv_num++; break; @@ -1219,14 +1219,14 @@ stdc_wcstocts( int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; - unconv_num1 = stdc_wcstombs(conv, + unconv_num1 = stdc_wcstombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; - unconv_num2 = mbstocts(conv, + unconv_num2 = mbstocts(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; @@ -1319,25 +1319,25 @@ ctstowcs( /* escape sequence ? */ if (ch == ESC) { - if ( !ct_parse_charset(lcd, + if ( !ct_parse_charset(lcd, inbufptr - 1, &state->charset, &ctr_seq_len) ) goto skip_the_seg; - if (state->charset->side == XlcC0 || + if (state->charset->side == XlcC0 || state->charset->side == XlcGL) { state->GL_charset = state->charset; } - else if (state->charset->side == XlcC1 || + else if (state->charset->side == XlcC1 || state->charset->side == XlcGR) { state->GR_charset = state->charset; - } + } else if (state->charset->side == XlcGLGR) { state->GL_charset = state->charset; state->GR_charset = state->charset; - } + } if (*from_left + 1 < ctr_seq_len) { inbufptr--; @@ -1351,7 +1351,7 @@ ctstowcs( *from_left -= (ctr_seq_len - 1); continue; - } + } /* check current state */ if (isleftside(ch)) @@ -1378,7 +1378,7 @@ output_one_wc: segment_conversion(lcd, &charset_tmp, &glyph_index); /* get codeset */ - if ( !_XlcGetCodeSetFromCharSet(lcd, charset_tmp, + if ( !_XlcGetCodeSetFromCharSet(lcd, charset_tmp, &codeset, &glyph_index) ) { unconv_num += gi_len; continue; @@ -1497,7 +1497,7 @@ cstowcs( segment_conversion(lcd, &charset_tmp, &glyph_index); /* get codeset */ - if ( !_XlcGetCodeSetFromCharSet(lcd, charset_tmp, + if ( !_XlcGetCodeSetFromCharSet(lcd, charset_tmp, &codeset, &glyph_index) ) { unconv_num += gi_len; continue; @@ -1542,14 +1542,14 @@ stdc_ctstowcs( int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; - unconv_num1 = ctstombs(conv, + unconv_num1 = ctstombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; - unconv_num2 = stdc_mbstowcs(conv, + unconv_num2 = stdc_mbstowcs(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; @@ -1578,14 +1578,14 @@ stdc_cstowcs( int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; - unconv_num1 = cstombs(conv, + unconv_num1 = cstombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; - unconv_num2 = stdc_mbstowcs(conv, + unconv_num2 = stdc_mbstowcs(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; @@ -1614,14 +1614,14 @@ mbstocts( int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; - unconv_num1 = mbstowcs_org(conv, + unconv_num1 = mbstowcs_org(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = (buf_ptr1 - buf_ptr2) / sizeof(wchar_t); - unconv_num2 += wcstocts(conv, + unconv_num2 += wcstocts(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; @@ -1709,7 +1709,7 @@ mbstostr( /* next char data : GL or GR side ? */ if ((codeset = GLGR_parse_codeset(ch))) goto next_mb_char; - + /* can't find codeset for the ch */ unconv_num++; continue; @@ -1821,7 +1821,7 @@ mbtocs( /* next mb char data for GL or GR side ? */ if ((codeset = GLGR_parse_codeset(ch))) goto next_mb_char; - + /* can't find codeset for the ch */ unconv_num = 1; break; @@ -1904,7 +1904,7 @@ mbstocs( ret = mbtocs(conv, from, from_left, to, to_left, tmp_args, 1); charset_old = charset; - + while ( ret == 0 && *from_left && *to_left) { inbufptr = *from; in_left = *from_left; @@ -1955,7 +1955,7 @@ wcstostr( const wchar_t *inbufptr = (const wchar_t *) *from; char *outbufptr = *to; int from_size = *from_left; - + const char *default_string = XLC_PUBLIC(lcd, default_string); int defstr_len = strlen(default_string); @@ -2071,14 +2071,14 @@ stdc_wcstostr( int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; - unconv_num1 = stdc_wcstombs(conv, + unconv_num1 = stdc_wcstombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; - unconv_num2 = mbstostr(conv, + unconv_num2 = mbstostr(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; @@ -2204,7 +2204,7 @@ stdc_wctocs( } else { goto end; } - + if (length < 0) goto end; @@ -2349,14 +2349,14 @@ ctstombs( int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; - unconv_num1 = ctstowcs(conv, + unconv_num1 = ctstowcs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = (buf_ptr1 - buf_ptr2) / sizeof(wchar_t); - unconv_num2 += wcstombs_org(conv, + unconv_num2 += wcstombs_org(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; @@ -2385,14 +2385,14 @@ cstombs( int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; - unconv_num1 = cstowcs(conv, + unconv_num1 = cstowcs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = (buf_ptr1 - buf_ptr2) / sizeof(wchar_t); - unconv_num2 += wcstombs_org(conv, + unconv_num2 += wcstombs_org(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; @@ -2600,14 +2600,14 @@ stdc_strtowcs( int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; - unconv_num1 = strtombs(conv, + unconv_num1 = strtombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; - unconv_num2 = stdc_mbstowcs(conv, + unconv_num2 = stdc_mbstowcs(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; @@ -2653,23 +2653,23 @@ create_conv( conv = (XlcConv) Xmalloc(sizeof(XlcConvRec)); if (conv == NULL) return (XlcConv) NULL; - + conv->methods = (XlcConvMethods) Xmalloc(sizeof(XlcConvMethodsRec)); if (conv->methods == NULL) goto err; *conv->methods = *methods; - conv->methods->reset = init_state; + conv->methods->reset = init_state; conv->state = (XPointer) Xmalloc(sizeof(StateRec)); if (conv->state == NULL) goto err; bzero((char *) conv->state, sizeof(StateRec)); - + state = (State) conv->state; state->lcd = lcd; - + _XlcResetConverter(conv); - + return conv; err: @@ -3110,7 +3110,7 @@ _XlcGenericLoader( _XlcSetConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte, open_ctstombs); _XlcSetConverter(lcd, XlcNString, lcd, XlcNMultiByte, open_strtombs); _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte, open_cstombs); - + #ifdef STDCVT gen = XLC_GENERIC_PART(lcd); diff --git a/nx-X11/lib/X11/lcJis.c b/nx-X11/lib/X11/lcJis.c index 6cb6ce0f8..594e6363c 100644 --- a/nx-X11/lib/X11/lcJis.c +++ b/nx-X11/lib/X11/lcJis.c @@ -39,7 +39,7 @@ #include "XlcGeneric.h" #include -#if !defined(macII) && !defined(X_LOCALE) +#if !defined(X_LOCALE) #define STDCVT #endif @@ -220,7 +220,7 @@ mbstocs( if (num_args > 0) *((XlcCharSet *) args[0]) = charset; - + return unconv_num; } @@ -372,7 +372,7 @@ cstombs( if (num_args < 1) return -1; - + charset = (XlcCharSet) args[0]; codeset = GetCodeSetFromCharSet(state->lcd, charset); @@ -418,7 +418,7 @@ cstombs( buf_len /= codeset->length + encoding_len; if (csstr_len < buf_len) buf_len = csstr_len; - + cvt_length += buf_len * (encoding_len + codeset->length); if (bufptr) { while (buf_len--) { @@ -478,7 +478,7 @@ cstowcs( if (num_args < 1) return -1; - + codeset = GetCodeSetFromCharSet(lcd, (XlcCharSet) args[0]); if (codeset == NULL) return -1; @@ -487,7 +487,7 @@ cstowcs( csstr_len /= length; if (csstr_len < buf_len) buf_len = csstr_len; - + code_mask = ~XLC_GENERIC(lcd, wc_encode_mask); wc_encoding = codeset->wc_encoding; wc_shift_bits = XLC_GENERIC(lcd, wc_shift_bits); @@ -537,7 +537,7 @@ create_conv( conv = (XlcConv) Xmalloc(sizeof(XlcConvRec)); if (conv == NULL) return (XlcConv) NULL; - + conv->methods = (XlcConvMethods) Xmalloc(sizeof(XlcConvMethodsRec)); if (conv->methods == NULL) goto err; @@ -549,11 +549,11 @@ create_conv( if (conv->state == NULL) goto err; bzero((char *) conv->state, sizeof(StateRec)); - + state = (State) conv->state; state->lcd = lcd; init_state(conv); - + return conv; err: @@ -760,7 +760,7 @@ stdc_wcstocs( length = 1; *tmp = '\0'; } - + if (length < 0) break; @@ -786,7 +786,7 @@ stdc_wcstocs( if (num_args > 0) *((XlcCharSet *) args[0]) = charset; - + return unconv_num; } @@ -808,7 +808,7 @@ stdc_cstowcs( DefineLocalBuf; XPointer buf, save_buf; int length, left, ret; - + left = length = *to_left * XLC_PUBLIC(lcd, mb_cur_max); buf = save_buf = (XPointer) AllocLocalBuf(length); if (buf == NULL) @@ -817,7 +817,7 @@ stdc_cstowcs( ret = cstombs(conv, from, from_left, &buf, &left, args, num_args); if (ret < 0) goto err; - + buf = save_buf; length -= left; if (stdc_mbstowcs(conv, &buf, &length, to, to_left, args, num_args) < 0) diff --git a/nx-X11/lib/X11/lcSjis.c b/nx-X11/lib/X11/lcSjis.c index 459156eb9..74dd033ec 100644 --- a/nx-X11/lib/X11/lcSjis.c +++ b/nx-X11/lib/X11/lcSjis.c @@ -154,7 +154,7 @@ sjis_mbstowcs( wchar_t *outbufptr = (wchar_t *) *to; wchar_t *outbuf_base = outbufptr; - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); + CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); int codeset_num = XLC_GENERIC(lcd, codeset_num); Ulong wc_shift = XLC_GENERIC(lcd, wc_shift_bits); @@ -321,7 +321,7 @@ sjis_wcstombs( } *outbufptr++ = (char)tmp; - } while (length); + } while (length); } /* end for */ @@ -390,7 +390,7 @@ wc_codeset( return( codesets[0] ); #endif } - + static int sjis_mbtocs( @@ -419,7 +419,7 @@ sjis_mbtocs( if (*from_left >= char_size && *to_left >= char_size) { *dst++ = *src++; - *dst++ = *src++; + *dst++ = *src++; if (!VALID_MULTIBYTE((Uchar) *(src-1))) /* check 2nd byte */ unconv_num++; sjis_to_jis((Uchar *)(dst-2), (Uchar *)(dst-1)); @@ -431,10 +431,10 @@ sjis_mbtocs( return -1; charset = *CS3->charset_list; char_size = charset->char_size; - + if (*from_left >= char_size && *to_left >= char_size) { *dst++ = *src++; - *dst++ = *src++; + *dst++ = *src++; if (!VALID_MULTIBYTE((Uchar) *(src-1))) /* check 2nd byte */ unconv_num++; sjis_to_jis((Uchar *)(dst-2), (Uchar *)(dst-1)); @@ -528,11 +528,11 @@ sjis_mbstocs( *from_left = tmp_from_left; *to = (XPointer) tmp_to; *to_left = tmp_to_left; - } + } if (num_args > 0) *((XlcCharSet *) args[0]) = charset; - + return unconv_num; } @@ -660,7 +660,7 @@ sjis_cstombs( if (num_args < 1) return -1; - + if (!(codeset = GetCodeSetFromCharSet(lcd, (XlcCharSet) args[0]))) return -1; @@ -668,7 +668,7 @@ sjis_cstombs( buf_len /= codeset->length; if (csstr_len < buf_len) buf_len = csstr_len; - + cvt_length += buf_len * codeset->length; if (bufptr) { @@ -962,7 +962,7 @@ sjis_mbstocts( unconv_num++; break; } - + if (ctptr) { strcpy(ctptr, ctdptr[cs_num]->ct_encoding); ctptr += ctdptr[cs_num]->ct_encoding_len; @@ -972,7 +972,7 @@ sjis_mbstocts( clen = charset->length; do { *ctptr++ = *inbufptr++; - } while (--clen); + } while (--clen); if (charset->length >= 2) { sjis_to_jis((Uchar *)(ctptr-2), (Uchar *)(ctptr-1)); @@ -1118,7 +1118,7 @@ sjis_wcstocts( } *ctptr++ = (char)tmp; } - } while (length); + } while (length); } /* end for */ @@ -1297,7 +1297,7 @@ sjis_ctstowcs( if (*from_left > *to_left) *from_left = *to_left; - + for (length = ctdata[Ascii].length; *from_left > 0; (*from_left) -= length ) { ct_type = CT_STD; @@ -1434,7 +1434,7 @@ create_conv( conv = (XlcConv) Xmalloc(sizeof(XlcConvRec)); if (conv == NULL) return (XlcConv) NULL; - + conv->methods = methods; conv->state = (XPointer) lcd; return conv; diff --git a/nx-X11/lib/X11/lcUTF8Load.c b/nx-X11/lib/X11/lcUTF8Load.c index 15165243b..82ea3b54d 100644 --- a/nx-X11/lib/X11/lcUTF8Load.c +++ b/nx-X11/lib/X11/lcUTF8Load.c @@ -1,4 +1,3 @@ -/* $TOG: $ */ /****************************************************************** Copyright 1993 by SunSoft, Inc. @@ -50,13 +49,21 @@ _XlcUtf8Loader( return lcd; /* The official IANA name for UTF-8 is "UTF-8" in upper case with a dash. */ - if (!XLC_PUBLIC_PART(lcd)->codeset || - (_XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "UTF-8"))) { + if (!XLC_PUBLIC_PART(lcd)->codeset) { + _XlcDestroyLC(lcd); + return (XLCd) NULL; + } + else if (!_XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "UTF-8")) { + _XlcAddUtf8LocaleConverters(lcd); + } + else if (!_XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "GB18030")) { + _XlcAddGB18030LocaleConverters(lcd); + } + else { _XlcDestroyLC(lcd); return (XLCd) NULL; } - _XlcAddUtf8LocaleConverters(lcd); _XlcAddUtf8Converters(lcd); return lcd; diff --git a/nx-X11/lib/X11/omGeneric.c b/nx-X11/lib/X11/omGeneric.c index 1b75a3067..32a066a75 100644 --- a/nx-X11/lib/X11/omGeneric.c +++ b/nx-X11/lib/X11/omGeneric.c @@ -39,7 +39,7 @@ * so that you can figure out what in the heck we're doing. We * realize this is a departure from the norm, but hey, we're * rebels! :-) :-) - * + * * Modifiers: Jeff Walls, Paul Anderson: HEWLETT-PACKARD */ /* @@ -221,7 +221,7 @@ get_prop_name( unsigned long fp; if (XGetFontProperty(fs, XA_FONT, &fp)) - return XGetAtomName(dpy, fp); + return XGetAtomName(dpy, fp); return (char *) NULL; } @@ -259,7 +259,7 @@ load_fontset_data( if(font_set->font_name == (char *)NULL) return False ; /* If font_set->font is not NULL, it contains the *best* - * match font for this FontSet. + * match font for this FontSet. * -- jjw/pma (HP) */ if(font_set->font == NULL) { @@ -336,7 +336,7 @@ load_font_info( &font_set->info); if (font_set->info == NULL) return False; - + XFreeFontNames(fn_list); } } @@ -410,11 +410,10 @@ set_fontset_extents( } } - if(font_set->vrotate_num > 0) { + if(font_set->vrotate_num > 0 && font_set->vrotate != NULL) { font_data = (FontData) font_set->vrotate; font_data_count = font_set->vrotate_num; for( ; font_data_count-- ; font_data++) { - if(font_data != NULL) if(font_data->font != NULL) { check_fontset_extents(&overall, &logical_ascent, &logical_descent, @@ -527,7 +526,7 @@ get_font_name( name = (char *) Xmalloc(strlen(*list) + 1); if (name) strcpy(name, *list); - + XFreeFontNames(list); return name; @@ -566,9 +565,12 @@ get_rotate_fontname( for(field_num = 0 ; field_num < CHARSET_ENCODING_FIELD && ptr && *ptr ; ptr++, field_num++) { fields[field_num] = ptr; - + if((ptr = strchr(ptr, '-'))) { *ptr = '\0'; + } else { + field_num++; /* Count last field */ + break; } } @@ -602,7 +604,7 @@ get_rotate_fontname( } /* Max XLFD length is 255 */ - if (len > XLFD_MAX_LEN) + if (len > XLFD_MAX_LEN) return NULL; rotate_font_ptr = (char *)Xmalloc(len + 1); @@ -613,7 +615,8 @@ get_rotate_fontname( for(field_num = 0 ; field_num < CHARSET_ENCODING_FIELD && fields[field_num] ; field_num++) { - sprintf(rotate_font_ptr, "%s-%s", rotate_font_ptr, fields[field_num]); + strcat(rotate_font_ptr, "-"); + strcat(rotate_font_ptr, fields[field_num]); } if(pattern) @@ -636,7 +639,7 @@ is_match_charset( length = strlen(font_data->name); if (length > name_len) return False; - + if (_XlcCompareISOLatin1(last - length, font_data->name) == 0) return True; @@ -666,7 +669,7 @@ get_font_name_from_list( break; } } - + XFreeFontNames(list); return name; @@ -756,7 +759,7 @@ parse_omit_name( if (length > XLFD_MAX_LEN) return -1; - + strcpy(buf, pattern); last = buf + length - 1; @@ -769,12 +772,12 @@ parse_omit_name( switch (num_fields) { case 12: /* This is the best way to have specifed the fontset. In this - * case, there is no original encoding. E.g., + * case, there is no original encoding. E.g., * -*-*-*-*-*-*-14-*-*-*-*-* * To this, we'll append a dash: * -*-*-*-*-*-*-14-*-*-*-*-*- * then append the encoding to get: - * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 + * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 */ /* * Take care of: @@ -787,7 +790,7 @@ parse_omit_name( break; case 13: /* Got the charset, not the encoding, zap the charset In this - * case, there is no original encoding, but there is a charset. E.g., + * case, there is no original encoding, but there is a charset. E.g., * -*-*-*-*-*-*-14-*-*-*-*-*-jisx0212.1990 * To this, we remove the charset: * -*-*-*-*-*-*-14-*-*-*-*-*- @@ -800,11 +803,11 @@ parse_omit_name( case 14: /* Both the charset and the encoding are specified. Get rid * of them so that we can append the new charset encoding. E.g., - * -*-*-*-*-*-*-14-*-*-*-*-*-jisx0212.1990-0 + * -*-*-*-*-*-*-14-*-*-*-*-*-jisx0212.1990-0 * To this, we'll remove the encoding and charset to get: * -*-*-*-*-*-*-14-*-*-*-*-*- * then append the new encoding to get: - * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 + * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 */ last = strrchr (buf, '-'); *last = '\0'; @@ -817,17 +820,17 @@ parse_omit_name( break; } - /* At this point, "last" is pointing to the last "-" in the + /* At this point, "last" is pointing to the last "-" in the * xlfd, and all xlfd's at this point take a form similar to: * -*-*-*-*-*-*-14-*-*-*-*-*- * (i.e., no encoding). * After the strcpy, we'll end up with something similar to: - * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 + * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 * - * If the modified font is found in the current FontSet, + * If the modified font is found in the current FontSet, * we've found a match. */ - + last++; if ((last - buf) + strlen(font_data->name) > XLFD_MAX_LEN) @@ -844,12 +847,12 @@ parse_omit_name( *last = '*'; *(last + 1) = '-'; strcpy(last + 2, font_data->name); - num_fields++; + num_fields++; last+=2; if ((font_data->xlfd_name = get_font_name(oc, buf)) != NULL) - return True; + return True; } - + return False; } @@ -882,7 +885,7 @@ parse_fontdata( if(font_data == NULL || font_data_count <= 0) { return False; } - + /* Loop through each font encoding defined in the "font_data" FontSet. */ for ( ; font_data_count-- > 0; font_data++) { Bool is_found = False; @@ -902,7 +905,7 @@ parse_fontdata( fprintf(stderr,"Font pattern: %s %s\n", pattern,font_data->name); #endif - + /* * If the current font is fully specified (i.e., the * xlfd contains no wildcards) and the font exists on @@ -923,16 +926,16 @@ parse_fontdata( if (ret == False) continue; /* * Since there was an exact match of a fully-specified font - * or a font alias, we can return now since the desired font + * or a font alias, we can return now since the desired font * was found for the current font encoding for this FontSet. * * Previous implementations of this algorithm would - * not return here. Instead, they continued searching - * through the font encodings for this FontSet. The side-effect - * of that behavior is you may return a "substitute" match - * instead of an "exact" match. We believe there should be a + * not return here. Instead, they continued searching + * through the font encodings for this FontSet. The side-effect + * of that behavior is you may return a "substitute" match + * instead of an "exact" match. We believe there should be a * preference on exact matches. Therefore, as soon as we - * find one, we bail. + * find one, we bail. * * Also, previous implementations seemed to think it was * important to find either a primary or substitute font @@ -940,7 +943,7 @@ parse_fontdata( * acceptable font. We don't believe this is necessary. * All the client cares about is finding a reasonable font * for what was passed in. If we find an exact match, - * there's no reason to look any further. + * there's no reason to look any further. * * -- jjw/pma (HP) */ @@ -971,7 +974,7 @@ parse_fontdata( if (ret == False) continue; /* - * A font which matched the wild-carded specification was found. + * A font which matched the wild-carded specification was found. * Only update the return data if a font has not yet been found. * This maintains the convention that FontSets listed higher in * a CodeSet in the Locale Database have higher priority than @@ -988,7 +991,7 @@ parse_fontdata( * * a font found in the JISX0208.1990-0 FontSet will have a * higher priority than a font found in the JISX0208.1983-0 - * FontSet. + * FontSet. */ if (font_data_return && font_data_return->xlfd_name == NULL) { @@ -1015,7 +1018,7 @@ parse_fontdata( /* * Did not find a font for the current FontSet. Check the * FontSet's "substitute" font for a match. If we find a - * match, we'll keep searching in hopes of finding an exact + * match, we'll keep searching in hopes of finding an exact * match later down the FontSet list. * * when we return and we have found a font font_data_return @@ -1023,8 +1026,8 @@ parse_fontdata( * is a C_PRIMARY or a C_SUBSTITUTE font */ ret = parse_fontdata(oc, font_set, font_set->substitute, - font_set->substitute_num, name_list, - name_list_count, C_SUBSTITUTE, + font_set->substitute_num, name_list, + name_list_count, C_SUBSTITUTE, font_data_return); if (ret == -1) return -1; if (ret == False) continue; @@ -1113,7 +1116,7 @@ parse_vw( if(font_set->vrotate == (VRotate)NULL) return (-1); memset(font_set->vrotate, 0x00, sizeof(VRotateRec) * sub_num); - + for(i = 0 ; i < sub_num ; i++) { vrotate[i].charset_name = font_set->substitute[i].name; vrotate[i].side = font_set->substitute[i].side; @@ -1166,12 +1169,12 @@ parse_fontname( if(font_set->font_data_count > 0) { /* - * If there are a non-zero number of FontSets defined + * If there are a non-zero number of FontSets defined * for this CharSet. * Try to find a font for this CharSet. If we find an * acceptable font, we save the information for return * to the client. If we do not find an acceptable font, - * a "missing_charset" will be reported to the client + * a "missing_charset" will be reported to the client * for this CharSet. */ font_data_return. xlfd_name = NULL; @@ -1208,7 +1211,7 @@ parse_fontname( } else if(font_set->substitute_num > 0) { /* - * If there are no FontSets defined for this + * If there are no FontSets defined for this * CharSet. We can only find "substitute" fonts. */ ret = parse_fontdata(oc, font_set, font_set->substitute, @@ -1275,14 +1278,14 @@ set_missing_list( if (font_set->info || font_set->font) { continue; } - + /* Change 1996.01.23 start */ if(font_set->font_data_count <= 0 || font_set->font_data == (FontData)NULL) { if(font_set->substitute_num <= 0 || font_set->substitute == (FontData)NULL) { if(font_set->charset_list != NULL){ - length += + length += strlen(font_set->charset_list[0]->encoding_name) + 1; } else { length += 1; @@ -1344,7 +1347,7 @@ set_missing_list( /* Change 1996.01.23 end */ *charset_list++ = charset_buf; charset_buf += strlen(charset_buf) + 1; - } + } if(result == 0) { return(False); @@ -1406,7 +1409,7 @@ free_fontdataOC( XFreeFontInfo(NULL, font_data->font, 1);/* Add 1996.01.23 */ font_data->font = NULL; } -/* +/* * font_data->name and font_data->scopes belong to the OM not OC. * To save space this data is shared between OM and OC. We are * not allowed to free it here. @@ -1494,7 +1497,7 @@ destroy_oc( _XlcCloseConverter(gen->utf8_to_cs); /* For VW/UDC start */ /* Change 1996.01.8 */ - destroy_fontdata(gen,dpy); + destroy_fontdata(gen,dpy); /* */ /* For VW/UDC end */ @@ -1518,7 +1521,7 @@ destroy_oc( if (oc->core.res_class) Xfree(oc->core.res_class); #endif - + Xfree(oc); } @@ -1614,7 +1617,7 @@ static XOCMethodsRec oc_generic_methods = { }; typedef struct _XOCMethodsListRec { - char *name; + const char *name; XOCMethods methods; } XOCMethodsListRec, *XOCMethodsList; @@ -1657,12 +1660,12 @@ create_oc( if (oc == NULL) return (XOC) NULL; bzero((char *) oc, sizeof(XOCGenericRec)); - + oc->core.om = om; if (oc_resources[0].xrm_name == NULLQUARK) _XlcCompileResourceList(oc_resources, XlcNumber(oc_resources)); - + if (_XlcSetValues((XPointer) oc, oc_resources, XlcNumber(oc_resources), args, num_args, XlcCreateMask | XlcDefaultMask)) goto err; @@ -1845,7 +1848,7 @@ create_om( if (om == NULL) return (XOM) NULL; bzero((char *) om, sizeof(XOMGenericRec)); - + om->methods = &methods; om->core.lcd = lcd; om->core.display = dpy; @@ -1865,7 +1868,7 @@ create_om( if (om_resources[0].xrm_name == NULLQUARK) _XlcCompileResourceList(om_resources, XlcNumber(om_resources)); - + om->core.resources = om_resources; om->core.num_resources = XlcNumber(om_resources); @@ -2035,7 +2038,7 @@ init_om( data = add_data(om); if (data == NULL) return False; - + charset_list = (XlcCharSet *) Xmalloc(sizeof(XlcCharSet) * count); if (charset_list == NULL) return False; @@ -2163,7 +2166,7 @@ _XomGenericOpenOM(XLCd lcd, Display *dpy, XrmDatabase rdb, om = create_om(lcd, dpy, rdb, res_name, res_class); if (om == NULL) return (XOM) NULL; - + if (init_om(om) == False) goto err; diff --git a/nx-X11/lib/X11/omText.c b/nx-X11/lib/X11/omText.c index 676edde6e..bfceca96e 100644 --- a/nx-X11/lib/X11/omText.c +++ b/nx-X11/lib/X11/omText.c @@ -108,7 +108,7 @@ draw_vertical( int direction = 0; int font_ascent_return = 0, font_descent_return = 0; int i; - XCharStruct overall; + XCharStruct overall; wy = y; if (is_xchar2b) { @@ -190,7 +190,7 @@ DrawStringWithFontSet( * If it was, use that font. If it was not set, then use the * font defined by font_set->font_data[0] (which is what * _XomGetFontDataFromFontSet() always seems to return for - * non-VW text). Note that given the new algorithm in + * non-VW text). Note that given the new algorithm in * parse_fontname() and parse_fontdata(), fs->font will * *always* contain good data. We should probably remove * the check for "fd->font", but we won't :-) -- jjw/pma (HP) @@ -305,7 +305,7 @@ _XomGenericDrawString( conv = _XomInitConverter(oc, type); if (conv == NULL) return -1; - + args[0] = (XPointer) &font; args[1] = (XPointer) &is_xchar2b; args[2] = (XPointer) &fs; diff --git a/nx-X11/lib/X11/omTextEsc.c b/nx-X11/lib/X11/omTextEsc.c index a57ffb46a..df1fb10c0 100644 --- a/nx-X11/lib/X11/omTextEsc.c +++ b/nx-X11/lib/X11/omTextEsc.c @@ -257,7 +257,7 @@ _XomGenericTextEscapement( conv = _XomInitConverter(oc, type); if (conv == NULL) return escapement; - + args[0] = (XPointer) &font; args[1] = (XPointer) &is_xchar2b; args[2] = (XPointer) &font_set; diff --git a/nx-X11/lib/X11/omTextPer.c b/nx-X11/lib/X11/omTextPer.c index fb15847fa..ae08fe6a4 100644 --- a/nx-X11/lib/X11/omTextPer.c +++ b/nx-X11/lib/X11/omTextPer.c @@ -57,7 +57,7 @@ _XomGenericTextPerCharExtents( conv = _XomInitConverter(oc, type); if (conv == NULL) return 0; - + bzero((char *) &overall, sizeof(XCharStruct)); logical_ascent = logical_descent = require_num = *num_chars = 0; diff --git a/nx-X11/lib/X11/omXChar.c b/nx-X11/lib/X11/omXChar.c index d25b98bf4..85d2f15b7 100644 --- a/nx-X11/lib/X11/omXChar.c +++ b/nx-X11/lib/X11/omXChar.c @@ -118,7 +118,7 @@ _XomGetFontDataFromFontSet( unsigned char *str, int len, int *len_ret, - int is2b, + int is2b, int type) /* VMAP , VROTATE , else */ { unsigned long value; @@ -126,7 +126,7 @@ _XomGetFontDataFromFontSet( FontData fontdata; unsigned char *c; int vfont_type; - + c = str; hit = -1; if(type == VMAP){ @@ -162,7 +162,7 @@ _XomGetFontDataFromFontSet( } else { value = (unsigned long)*c; } - + /* ### NOTE: This routine DOES NOT WORK! * ### We can work around the problem in the calling routine, * ### but we really need to understand this better. As it @@ -289,7 +289,7 @@ load_font( oc->core.font_info.font_name_list[font_set->id]); if (font_set->font == NULL) return False; - + oc->core.font_info.font_struct_list[font_set->id] = font_set->font; XFreeFontInfo(NULL, font_set->info, 1); font_set->info = NULL; @@ -365,7 +365,7 @@ _XomInitConverter( { XOCGenericPart *gen = XOC_GENERIC(oc); XlcConv *convp; - char *conv_type; + const char *conv_type; XlcConv conv; XLCd lcd; -- cgit v1.2.3