home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / evbl0627.zip / everblue_20010627.zip / x11 / Xlc_CharSet.c < prev    next >
C/C++ Source or Header  |  1999-11-02  |  5KB  |  173 lines

  1. /* $XConsortium: lcCharSet.c,v 1.3 95/02/22 22:02:59 kaleb Exp $ */
  2. /*
  3.  * Copyright 1992, 1993 by TOSHIBA Corp.
  4.  *
  5.  * Permission to use, copy, modify, and distribute this software and its
  6.  * documentation for any purpose and without fee is hereby granted, provided
  7.  * that the above copyright notice appear in all copies and that both that
  8.  * copyright notice and this permission notice appear in supporting
  9.  * documentation, and that the name of TOSHIBA not be used in advertising
  10.  * or publicity pertaining to distribution of the software without specific,
  11.  * written prior permission. TOSHIBA make no representations about the
  12.  * suitability of this software for any purpose.  It is provided "as is"
  13.  * without express or implied warranty.
  14.  *
  15.  * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  16.  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  17.  * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  18.  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  19.  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  20.  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  21.  * SOFTWARE.
  22.  *
  23.  * Author: Katsuhisa Yano    TOSHIBA Corp.
  24.  *                   mopi@osa.ilab.toshiba.co.jp
  25.  */
  26. /* $XFree86: xc/lib/X11/lcCharSet.c,v 3.0.6.1 1998/01/25 06:11:05 dawes Exp $ */
  27.  
  28. #include <stdio.h>
  29. #include "Xlib_private.h"
  30. #include "XlcPublic.h"
  31.  
  32. #if NeedVarargsPrototypes
  33. char *
  34. _XlcGetCSValues(XlcCharSet charset, ...)
  35. #else
  36. char *
  37. _XlcGetCSValues(charset, va_alist)
  38.     XlcCharSet charset;
  39.     va_dcl
  40. #endif
  41. {
  42.     DBUG_ENTER("_XlcGetCSValues")
  43.     va_list var;
  44.     XlcArgList args;
  45.     char *ret;
  46.     int num_args;
  47.  
  48.     Va_start(var, charset);
  49.     _XlcCountVaList(var, &num_args);
  50.     va_end(var);
  51.  
  52.     Va_start(var, charset);
  53.     _XlcVaToArgList(var, num_args, &args);
  54.     va_end(var);
  55.  
  56.     if (args == (XlcArgList) NULL)
  57.     DBUG_RETURN((char *) NULL);
  58.     
  59.     if (charset->get_values)
  60.     ret = (*charset->get_values)(charset, args, num_args);
  61.     else
  62.     ret = args->name;
  63.  
  64.     Xfree(args);
  65.  
  66.     DBUG_RETURN(ret);
  67. }
  68.  
  69. typedef struct _XlcCharSetListRec {
  70.     XlcCharSet charset;
  71.     struct _XlcCharSetListRec *next;
  72. } XlcCharSetListRec, *XlcCharSetList;
  73.  
  74. static XlcCharSetList charset_list = NULL;
  75.  
  76. XlcCharSet
  77. _XlcGetCharSet(name)
  78.     char *name;
  79. {
  80.     DBUG_ENTER("_XlcGetCharSet")
  81.     XlcCharSetList list;
  82.     XrmQuark xrm_name;
  83.     
  84.     xrm_name = XrmStringToQuark(name);
  85.  
  86.     for (list = charset_list; list; list = list->next) {
  87.     if (xrm_name == list->charset->xrm_name)
  88.         DBUG_RETURN((XlcCharSet) list->charset);
  89.     }
  90.  
  91.     DBUG_RETURN((XlcCharSet) NULL);
  92. }
  93.  
  94. Bool
  95. _XlcAddCharSet(charset)
  96.     XlcCharSet charset;
  97. {
  98.     DBUG_ENTER("_XlcAddCharSet")
  99.     XlcCharSetList list;
  100.  
  101.     if (_XlcGetCharSet(charset->name))
  102.     DBUG_RETURN(False);
  103.  
  104.     list = (XlcCharSetList) Xmalloc(sizeof(XlcCharSetListRec));
  105.     if (list == NULL)
  106.     DBUG_RETURN(False);
  107.     
  108.     list->charset = charset;
  109.     list->next = charset_list;
  110.     charset_list = list;
  111.  
  112.     DBUG_RETURN(True);
  113. }
  114.  
  115. static XlcResource resources[] = {
  116.     { XlcNName, NULLQUARK, sizeof(char *),
  117.       XOffsetOf(XlcCharSetRec, name), XlcGetMask },
  118.     { XlcNEncodingName, NULLQUARK, sizeof(char *),
  119.       XOffsetOf(XlcCharSetRec, encoding_name), XlcGetMask },
  120.     { XlcNSide, NULLQUARK, sizeof(XlcSide),
  121.       XOffsetOf(XlcCharSetRec, side), XlcGetMask },
  122.     { XlcNCharSize, NULLQUARK, sizeof(int),
  123.       XOffsetOf(XlcCharSetRec, char_size), XlcGetMask },
  124.     { XlcNSetSize, NULLQUARK, sizeof(int),
  125.       XOffsetOf(XlcCharSetRec, set_size), XlcGetMask },
  126.     { XlcNControlSequence, NULLQUARK, sizeof(char *),
  127.       XOffsetOf(XlcCharSetRec, ct_sequence), XlcGetMask }
  128. };
  129.  
  130. static char *
  131. get_values(charset, args, num_args)
  132.     register XlcCharSet charset;
  133.     register XlcArgList args;
  134.     register int num_args;
  135. {
  136.     DBUG_ENTER("get_values")
  137.     char *result;
  138.     if (resources[0].xrm_name == NULLQUARK)
  139.     _XlcCompileResourceList(resources, XlcNumber(resources));
  140.  
  141.     result = _XlcGetValues((XPointer) charset, resources, XlcNumber(resources),
  142.              args, num_args, XlcGetMask);
  143.     DBUG_RETURN(result);
  144. }
  145.  
  146. XlcCharSet
  147. _XlcCreateDefaultCharSet(name, ct_sequence)
  148.     _Xconst char *name;
  149.     char *ct_sequence;
  150. {
  151.     DBUG_ENTER("_XlcCreateDefaultCharSet")
  152.     XlcCharSet charset;
  153.  
  154.     charset = (XlcCharSet) Xmalloc(sizeof(XlcCharSetRec));
  155.     if (charset == NULL)
  156.     DBUG_RETURN((XlcCharSet) NULL);
  157.     bzero((char *) charset, sizeof(XlcCharSetRec));
  158.     
  159.     charset->name = (char *) Xmalloc(strlen(name) + strlen(ct_sequence) + 2);
  160.     if (charset->name == NULL) {
  161.     Xfree((char *) charset);
  162.     DBUG_RETURN((XlcCharSet) NULL);
  163.     }
  164.     strcpy(charset->name, name);
  165.     charset->ct_sequence = charset->name + strlen(name) + 1;
  166.     strcpy(charset->ct_sequence, ct_sequence);
  167.     charset->get_values = get_values;
  168.  
  169.     _XlcParseCharSet(charset);
  170.  
  171.     DBUG_RETURN((XlcCharSet) charset);
  172. }
  173.