|
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 |
|