Blame clients/uil/UilSemCSet.c

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
*/ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$TOG: UilSemCSet.c /main/10 1997/03/12 15:21:53 dbl $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
*  (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
Packit b099d7
Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FACILITY:
Packit b099d7
**
Packit b099d7
**      User Interface Language Compiler (UIL)
Packit b099d7
**
Packit b099d7
**  ABSTRACT:
Packit b099d7
**
Packit b099d7
**      This file contains and routines related to the semantics of
Packit b099d7
**	character sets.
Packit b099d7
**	semantic validation.
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  INCLUDE FILES
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
#include <Xm/Xm.h>
Packit b099d7
Packit b099d7
#include "UilDefI.h"
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  DEFINE and MACRO DEFINITIONS
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  EXTERNAL VARIABLE DECLARATIONS
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  GLOBAL VARIABLE DECLARATIONS
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  OWN VARIABLE DECLARATIONS
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FUNCTIONAL DESCRIPTION:
Packit b099d7
**
Packit b099d7
**      This function returns a pointer to a character set name given
Packit b099d7
**	its sym_k_..._charset code and possibly a userdefined charset
Packit b099d7
**	value entry.
Packit b099d7
**
Packit b099d7
**  FORMAL PARAMETERS:
Packit b099d7
**
Packit b099d7
**	l_charset	charset of the string (token value)
Packit b099d7
**	az_charset_entry   charset of the string (symbol table value entry)
Packit b099d7
**
Packit b099d7
**  IMPLICIT INPUTS:
Packit b099d7
**
Packit b099d7
**      charset data tables
Packit b099d7
**
Packit b099d7
**  IMPLICIT OUTPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  FUNCTION VALUE:
Packit b099d7
**
Packit b099d7
**      pointer to name (must NOT be freed)
Packit b099d7
**
Packit b099d7
**  SIDE EFFECTS:
Packit b099d7
**
Packit b099d7
**      error messages may be issued for objects that are still undefined
Packit b099d7
**	or of the wrong type
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
char *sem_charset_name (l_charset, az_charset_entry)
Packit b099d7
    int				l_charset;
Packit b099d7
    sym_value_entry_type	*az_charset_entry;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int		charset;		/* mapped character set */
Packit b099d7
Packit b099d7
charset = sem_map_subclass_to_charset (l_charset);
Packit b099d7
switch ( charset )
Packit b099d7
    {
Packit b099d7
    case sym_k_fontlist_default_tag:
Packit b099d7
      return XmFONTLIST_DEFAULT_TAG;      
Packit b099d7
    case sym_k_userdefined_charset:
Packit b099d7
        /*
Packit b099d7
	 ** If the charset is user-defined, then fetch info from the symbol 
Packit b099d7
	 ** table entry for it.						   
Packit b099d7
	 */
Packit b099d7
	_assert (az_charset_entry!=NULL, "null userdefined charset entry");
Packit b099d7
	return az_charset_entry->value.c_value;
Packit b099d7
    default:
Packit b099d7
	return charset_xmstring_names_table[charset];
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FUNCTIONAL DESCRIPTION:
Packit b099d7
**
Packit b099d7
**      This function returns information about the character set specified
Packit b099d7
**	(writing direction and sixteen_bit properties).
Packit b099d7
**
Packit b099d7
**  FORMAL PARAMETERS:
Packit b099d7
**
Packit b099d7
**	l_charset	charset of the string (token value)
Packit b099d7
**	az_charset_entry   charset of the string (symbol table value entry)
Packit b099d7
**	direction	string writing direction
Packit b099d7
**	sixteen_bit	Boolean return value
Packit b099d7
**
Packit b099d7
**  IMPLICIT INPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  IMPLICIT OUTPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  FUNCTION VALUE:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  SIDE EFFECTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
void sem_charset_info
Packit b099d7
    (l_charset, az_charset_entry, write_direction, parse_direction,  sixteen_bit)
Packit b099d7
Packit b099d7
int			l_charset;
Packit b099d7
sym_value_entry_type	*az_charset_entry;
Packit b099d7
int			*write_direction;
Packit b099d7
int			*parse_direction;
Packit b099d7
int			*sixteen_bit;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int		charset;	/* mapped character set */
Packit b099d7
    
Packit b099d7
charset = sem_map_subclass_to_charset (l_charset);
Packit b099d7
switch (charset) 
Packit b099d7
    {
Packit b099d7
    /*
Packit b099d7
     ** If the charset is user-defined, then fetch info from the symbol 
Packit b099d7
     ** table entry for it.						   
Packit b099d7
     */
Packit b099d7
    case sym_k_userdefined_charset:
Packit b099d7
        {
Packit b099d7
	*write_direction = az_charset_entry->b_direction;
Packit b099d7
	*parse_direction = az_charset_entry->b_direction;
Packit b099d7
	*sixteen_bit = (az_charset_entry->b_aux_flags &
Packit b099d7
			sym_m_sixteen_bit) != 0;
Packit b099d7
	break;
Packit b099d7
	}
Packit b099d7
    default:
Packit b099d7
	{
Packit b099d7
	*write_direction = charset_writing_direction_table[charset];
Packit b099d7
	*parse_direction = charset_parsing_direction_table[charset];
Packit b099d7
	if ( charset_character_size_table[charset] != sym_k_onebyte_charsize )
Packit b099d7
	    *sixteen_bit = TRUE;
Packit b099d7
	else
Packit b099d7
	    *sixteen_bit = FALSE;
Packit b099d7
	break;
Packit b099d7
	}
Packit b099d7
	}
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FUNCTIONAL DESCRIPTION:
Packit b099d7
**
Packit b099d7
**      This function returns the charset id corresponding to the
Packit b099d7
**	charset specified in a $LANG variable. User-defined character
Packit b099d7
**	sets are not recognized - it must be one available in the
Packit b099d7
**	the compiler tables.
Packit b099d7
**
Packit b099d7
**	The name match is case-insensitive.
Packit b099d7
**
Packit b099d7
**  FORMAL PARAMETERS:
Packit b099d7
**
Packit b099d7
**	lang_charset	string naming a character set
Packit b099d7
**
Packit b099d7
**  IMPLICIT INPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  IMPLICIT OUTPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  FUNCTION VALUE:
Packit b099d7
**
Packit b099d7
**      0	no match - character set not found
Packit b099d7
**	>0	character set code from sym_k_..._charset.
Packit b099d7
**		sym_k_userdefined_charset is never returned.
Packit b099d7
**		
Packit b099d7
**
Packit b099d7
**  SIDE EFFECTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
int sem_charset_lang_name (lang_charset)
Packit b099d7
    char		*lang_charset;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
char		uname[200];	/* upper-case character set name */
Packit b099d7
int		ndx;		/* loop index */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Convert name to upper case, then search table (which is already in
Packit b099d7
 * upper case).
Packit b099d7
 */
Packit b099d7
strcpy (uname, lang_charset);
Packit b099d7
for ( ndx=0 ; ndx<(int)strlen(uname) ; ndx++ )
Packit b099d7
    uname[ndx] = _upper (uname[ndx]);
Packit b099d7
Packit b099d7
for ( ndx=0 ; ndx<(int)charset_lang_table_max ; ndx++ )
Packit b099d7
    if ( strcmp(uname,charset_lang_names_table[ndx]) == 0 )
Packit b099d7
	return (int)charset_lang_codes_table[ndx];
Packit b099d7
return 0;
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7