Blame lib/Xm/XmStringI.h

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
/*   $TOG: XmStringI.h /main/7 1999/09/01 17:15:15 mgreess $ */
Packit b099d7
Packit b099d7
#ifndef _XmStringI_h
Packit b099d7
#define _XmStringI_h
Packit b099d7
Packit b099d7
#include <Xm/XmP.h>
Packit b099d7
Packit b099d7
#ifdef __cplusplus
Packit b099d7
extern "C" {
Packit b099d7
#endif
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * These are the fontlist structures
Packit b099d7
 */
Packit b099d7
Packit b099d7
typedef struct _XmFontListContextRec
Packit b099d7
{
Packit b099d7
  Boolean		error;			  /* something bad */
Packit b099d7
  unsigned short	index;			  /* next rendition */
Packit b099d7
  XmRenderTable		table;			  /* associated table */
Packit b099d7
} XmFontListContextRec;
Packit b099d7
Packit b099d7
/* useful macros */
Packit b099d7
#define two_byte_font(f)        (( (f)->min_byte1 != 0 || (f)->max_byte1 != 0))
Packit b099d7
Packit b099d7
#define  FontListType(r)		((_XmRendition)(*(r)))->fontType
Packit b099d7
#define  FontListFont(r)		((_XmRendition)(*(r)))->font
Packit b099d7
#define  FontListTag(r)			((_XmRendition)(*(r)))->tag
Packit b099d7
Packit b099d7
/* Convenience macros */
Packit b099d7
#define _XmStringCvtNonOpt(str)		(_XmStrOptimized(str) ? \
Packit b099d7
					 _XmStringOptToNonOpt(str) : (str))
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Macros for string internal context block data structure access
Packit b099d7
 */
Packit b099d7
Packit b099d7
#define _XmStrContString(cont)	  \
Packit b099d7
                 ((_XmStringContextRec *)(cont))->string
Packit b099d7
#define _XmStrContCurrLine(cont)  \
Packit b099d7
                 ((_XmStringContextRec *)(cont))->current_line
Packit b099d7
#define _XmStrContCurrSeg(cont)   \
Packit b099d7
                 ((_XmStringContextRec *)(cont))->current_seg
Packit b099d7
#define _XmStrContOpt(cont)	  \
Packit b099d7
                 ((_XmStringContextRec *)(cont))->optimized
Packit b099d7
#define _XmStrContError(cont)	  ((_XmStringContextRec *)(cont))->error
Packit b099d7
#define _XmStrContTabCount(cont)  ((_XmStringContextRec *)(cont))->tab_count
Packit b099d7
#define _XmStrContDir(cont) 	  ((_XmStringContextRec *)(cont))->dir
Packit b099d7
#define _XmStrContTag(cont) 	  ((_XmStringContextRec *)(cont))->tag
Packit b099d7
#define _XmStrContTagType(cont)	  ((_XmStringContextRec *)(cont))->tag_type
Packit b099d7
#define _XmStrContState(cont) 	  ((_XmStringContextRec *)(cont))->state
Packit b099d7
#define _XmStrContRendTags(cont)  ((_XmStringContextRec *)(cont))->rend_tags
Packit b099d7
#define _XmStrContRendCount(cont) ((_XmStringContextRec *)(cont))->rend_count
Packit b099d7
#define _XmStrContRendIndex(cont) ((_XmStringContextRec *)(cont))->rend_index
Packit b099d7
#define _XmStrContTmpStrDir(cont) ((_XmStringContextRec *)(cont))->tmp_str_dir
Packit b099d7
#define _XmStrContTmpDir(cont)	  ((_XmStringContextRec *)(cont))->tmp_dir
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * internal context data block, for read-out
Packit b099d7
 */
Packit b099d7
enum 
Packit b099d7
{
Packit b099d7
  PUSH_STATE, BEGIN_REND_STATE, TAG_STATE, TAB_STATE, DIR_STATE,  
Packit b099d7
  TEXT_STATE, END_REND_STATE, POP_STATE, SEP_STATE
Packit b099d7
};
Packit b099d7
Packit b099d7
typedef struct __XmStringContextRec
Packit b099d7
{
Packit b099d7
    _XmString   	string;		/* pointer to internal string	*/
Packit b099d7
    short       	current_line;	/* index of current line	*/
Packit b099d7
    unsigned short      current_seg;	/* index of current segment	*/
Packit b099d7
    Boolean     	optimized;      /* is string optimized		*/
Packit b099d7
    Boolean     	error;          /* something wrong		*/
Packit b099d7
    short		tab_count;	/* tabs processed		*/
Packit b099d7
    XmStringDirection	dir;		/* last direction		*/
Packit b099d7
    XmStringTag		tag;		/* last tag seen		*/
Packit b099d7
    XmTextType		tag_type;	/* type of last tag seen	*/
Packit b099d7
    char		state;		/* current state of output	*/
Packit b099d7
    XmStringTag        *rend_tags;	/* active renditions.		*/
Packit b099d7
    short               rend_count;	/* number of rend_tags.		*/
Packit b099d7
    short		rend_index;	/* renditions processed		*/
Packit b099d7
    XmDirection		tmp_dir;	/* temporary storage            */
Packit b099d7
    XmStringDirection	tmp_str_dir;	/* temporary storage            */
Packit b099d7
} _XmStringContextRec;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Internal representation of an XmParseMapping.
Packit b099d7
 */
Packit b099d7
typedef struct __XmParseMappingRec {
Packit b099d7
  XtPointer		pattern;
Packit b099d7
  XmTextType		pattern_type;
Packit b099d7
  XmString		substitute;
Packit b099d7
  XmParseProc		parse_proc;
Packit b099d7
  XtPointer		client_data;
Packit b099d7
  XmIncludeStatus	include_status;
Packit b099d7
  unsigned char		internal_flags;	/* reserved for unparse data */
Packit b099d7
} _XmParseMappingRec, *_XmParseMapping;
Packit b099d7

Packit b099d7
/****************************************************************
Packit b099d7
 * Symbolic values
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
#define XmSTRING_OPTIMIZED			0x0
Packit b099d7
#define XmSTRING_OTHER				0x1
Packit b099d7
#define XmSTRING_MULTIPLE_ENTRY	 		0x2
Packit b099d7
Packit b099d7
#define TAG_INDEX_BITS  	3
Packit b099d7
#define REND_INDEX_BITS		4
Packit b099d7
#define BYTE_COUNT_BITS		8
Packit b099d7
#define TEXT_BYTES_IN_STRUCT	1
Packit b099d7
Packit b099d7
#define TAG_INDEX_UNSET		((1 << TAG_INDEX_BITS) - 1)
Packit b099d7
#define TAG_INDEX_MAX		TAG_INDEX_UNSET
Packit b099d7
#define REND_INDEX_UNSET	((1 << REND_INDEX_BITS) - 1)
Packit b099d7
#define REND_INDEX_MAX		REND_INDEX_UNSET
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
Packit b099d7
  XmStringOpt is an optimized string containing text of less than
Packit b099d7
  256 bytes with an associated string direction and up to three 
Packit b099d7
  implicit tabs.
Packit b099d7
  
Packit b099d7
  The text is stored immediately after the header within the string.
Packit b099d7
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
typedef struct __XmStringOptHeader {	
Packit b099d7
  unsigned int type        : 2;	     /* XmSTRING_OPTIMIZED */
Packit b099d7
  unsigned int text_type   : 2;	     /* MB, WC, locale or charset text.*/
Packit b099d7
  unsigned int tag_index   : TAG_INDEX_BITS;	/* index into charset cache */
Packit b099d7
  unsigned int rend_begin  : 1;	     /* flag for RENDITION_BEGIN */
Packit b099d7
  unsigned char byte_count;	     /* size of text in this seg.*/
Packit b099d7
  unsigned int rend_end    : 1;	     /* flag for RENDITION_END */
Packit b099d7
  unsigned int rend_index  : REND_INDEX_BITS;	/* index in tag cache */
Packit b099d7
  unsigned int str_dir     : 2;      /* string direction set by app */
Packit b099d7
  unsigned int flipped     : 1;      /* whether the text has been flipped */
Packit b099d7
  unsigned int tabs	   : 2;	     /* number of tabs preceding the text */
Packit b099d7
  unsigned int refcount    : 6;      /* reference count */ 
Packit b099d7
} _XmStringOptHeader;
Packit b099d7
Packit b099d7
typedef struct __XmStringOpt {	
Packit b099d7
  _XmStringOptHeader header;
Packit b099d7
  char               text[TEXT_BYTES_IN_STRUCT];
Packit b099d7
} _XmStringOptRec, *_XmStringOpt;
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
Packit b099d7
  XmStringMulti specifies a string consisting of multiple entries.
Packit b099d7
  Each entry is a segment, either an optimized single segment, an
Packit b099d7
  unoptimized segment, or an array of segments.
Packit b099d7
  
Packit b099d7
  If implicit_line is 1, each entry is treated as a single line for
Packit b099d7
  display and other purposes.
Packit b099d7
  
Packit b099d7
  If implicit_line is 0, the string is a sequence of entries, treated as
Packit b099d7
  being on one line.
Packit b099d7
  
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
/* Forward definitions */
Packit b099d7
typedef union __XmStringEntryRec *_XmStringEntry;
Packit b099d7
typedef union __XmStringNREntryRec *_XmStringNREntry;
Packit b099d7
Packit b099d7
typedef struct __XmStringMultiHeader {
Packit b099d7
  unsigned int	type          : 2;	/* XmSTRING_MULTIPLE_ENTRY */
Packit b099d7
  unsigned int	implicit_line : 1;	/* 1 => linefeed at end */
Packit b099d7
  unsigned int	entry_count   : 21;	
Packit b099d7
  unsigned char	refcount;		
Packit b099d7
} _XmStringMultiHeader;
Packit b099d7
Packit b099d7
typedef struct __XmStringMulti{	
Packit b099d7
  _XmStringMultiHeader	header;
Packit b099d7
  _XmStringEntry      * entry;	/* pointer to array of pointers to entries */
Packit b099d7
} _XmStringMultiRec, *_XmStringMulti;
Packit b099d7
Packit b099d7
typedef struct __XmStringEmptyHeader {
Packit b099d7
  unsigned int	type          : 2;	
Packit b099d7
} _XmStringEmptyHeader;
Packit b099d7
Packit b099d7
typedef union __XmStringRec {	
Packit b099d7
  _XmStringEmptyHeader  empty;
Packit b099d7
  _XmStringOptHeader	opt_str;	/* XmSTRING_OPTIMIZED */
Packit b099d7
  XtPointer		component;	/* unused */
Packit b099d7
  _XmStringMultiHeader	multi_str;      /* XmSTRING_MULTIPLE_ENTRY */
Packit b099d7
} _XmStringRec;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
Packit b099d7
  Cache data structures
Packit b099d7
Packit b099d7
 ****************************************************************/
Packit b099d7
#define _XmSCANNING_CACHE  0
Packit b099d7
#define _XmRENDERING_CACHE 1
Packit b099d7
/* #define _XmHIGHLIGHT_CACHE 2 */
Packit b099d7
/* #define _XmCSTEXT_CACHE    3 */
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Header
Packit b099d7
 */
Packit b099d7
typedef struct __XmStringCacheRec {
Packit b099d7
  struct __XmStringCacheRec * next;
Packit b099d7
  unsigned char               cache_type;/* only 255 cache types supported */
Packit b099d7
  Boolean		      dirty;	 /* 1 => recompute this cache */
Packit b099d7
}  _XmStringCacheHeader, *_XmStringCache;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Scanning cache
Packit b099d7
 */
Packit b099d7
typedef struct __XmStringScanning {
Packit b099d7
  _XmStringCacheHeader header;           /* cache_type == _XmSCANNING_CACHE */
Packit b099d7
  /* Matching fields */
Packit b099d7
  XmDirection          prim_dir;         /* primary layout direction */
Packit b099d7
Packit b099d7
  /* Cached data */
Packit b099d7
  _XmStringEntry       left;	         /* leftward segment in string */
Packit b099d7
  _XmStringEntry       right;	         /* rightward segment in string */
Packit b099d7
  XmDirection          layout_direction; /* current segment layout direction */
Packit b099d7
  unsigned short       depth;		 /* depth of layout push */
Packit b099d7
} _XmStringScanningRec, *_XmStringScanningCache;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Rendering cache
Packit b099d7
 */
Packit b099d7
typedef struct __XmStringRendering {
Packit b099d7
  _XmStringCacheHeader header;           /* cache_type == _XmRENDERING_CACHE */
Packit b099d7
  /* Matching fields */
Packit b099d7
  XmRenderTable        rt;  
Packit b099d7
Packit b099d7
  /* Cached data */
Packit b099d7
  int  	               x;	         /* x pos of segment */
Packit b099d7
  int                  y;	         /* y pos of segment */
Packit b099d7
  int  	               width;	         /* width of segment */
Packit b099d7
  int                  height;	         /* height of segment */
Packit b099d7
  int		       ascent;		 /* ascent of segment */
Packit b099d7
  int		       descent;		 /* descent of segment */
Packit b099d7
  int                  baseline;	 /* baseline of segment */
Packit b099d7
  XmRendition          rendition;        /* Rendition used for this segment */
Packit b099d7
  char                 prev_tabs;        /* accumulates tabs on line */
Packit b099d7
} _XmStringRenderingRec, *_XmStringRenderingCache;
Packit b099d7
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
Packit b099d7
  Optimized segment definition. 
Packit b099d7
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
typedef struct __XmStringOptSegHdrRec {	
Packit b099d7
  unsigned int type            : 2;  /* XmSTRING_ENTRY_OPTIMIZED */
Packit b099d7
  unsigned int text_type       : 2;  /* MB, WC, locale or charset */
Packit b099d7
  unsigned int tag_index       : TAG_INDEX_BITS; /* index into charset cache */
Packit b099d7
  unsigned int rend_begin      : 1;  /* flag for RENDITION_BEGIN */
Packit b099d7
  unsigned char byte_count;
Packit b099d7
  unsigned int rend_end        : 1;  /* flag for RENDITION_END */
Packit b099d7
  unsigned int rend_index : REND_INDEX_BITS; /* index in rendition tag cache */
Packit b099d7
  unsigned int str_dir         : 2;  /* Direction of text in segment */
Packit b099d7
  unsigned int flipped         : 1;  /* 1 => data is character-flipped */
Packit b099d7
  unsigned int tabs_before     : 3;  /* number of preceding tabs */    
Packit b099d7
  unsigned int permanent       : 1;  /* 0 => Pointer data can be freed */
Packit b099d7
  unsigned int soft_line_break : 1;  /* linebreak before is soft */
Packit b099d7
  unsigned int immediate       : 1;  /* 0 => data is immediate */
Packit b099d7
  unsigned int pad             : 2;
Packit b099d7
} _XmStringOptSegHdrRec;
Packit b099d7
Packit b099d7
typedef struct __XmStringOptSegRec {
Packit b099d7
  _XmStringOptSegHdrRec header;
Packit b099d7
  union {	
Packit b099d7
    wchar_t		wchars[1];
Packit b099d7
    unsigned char	chars[1];
Packit b099d7
    XtPointer	        text;
Packit b099d7
  } data;
Packit b099d7
} _XmStringOptSegRec, *_XmStringOptSeg;
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
Packit b099d7
  Array 'segment' definition. 
Packit b099d7
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
typedef struct __XmStringArraySegHdrRec {	
Packit b099d7
  unsigned int type            : 2;  /* XmSTRING_ENTRY_ARRAY */
Packit b099d7
  unsigned int soft_line_break : 1;  /* linebreak before is soft */
Packit b099d7
  unsigned int pad             : 5; 
Packit b099d7
  unsigned int segment_count   : 8;  /* 256 segments per line */
Packit b099d7
  unsigned char pad2byte[2];
Packit b099d7
} _XmStringArraySegHdrRec;
Packit b099d7
Packit b099d7
typedef struct __XmStringArraySegRec {	
Packit b099d7
  _XmStringArraySegHdrRec header;
Packit b099d7
  _XmStringNREntry	* seg;	      /* array of pointers to segments */
Packit b099d7
} _XmStringArraySegRec, *_XmStringArraySeg;
Packit b099d7
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
Packit b099d7
  Unoptimized segment definition. 
Packit b099d7
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
typedef struct __XmStringUnoptSegHdrRec {
Packit b099d7
  unsigned int	type            : 2;  /* XmSTRING_ENTRY_UNOPTIMIZED */
Packit b099d7
  unsigned int  soft_line_break : 1;  /* linebreak before is soft */
Packit b099d7
  unsigned int	permanent       : 1;  /* 0 => Pointer data can be freed */
Packit b099d7
  unsigned int	pop_after       : 1;  /* whether a pop follows the text */
Packit b099d7
  unsigned int	str_dir         : 2;  /* Direction of text in segment */
Packit b099d7
  unsigned int  flipped         : 1;  /* 1 => data is character-flipped */
Packit b099d7
  XmDirection	push_before;	      /* if NULL => no push */
Packit b099d7
  unsigned char	tabs_before;	      /* Number of tabs preceding segment */
Packit b099d7
  XmTextType	text_type;	      /* determines type of text and tag */
Packit b099d7
}  _XmStringUnoptSegHdrRec;
Packit b099d7
Packit b099d7
typedef struct __XmStringUnoptSegRec {
Packit b099d7
  _XmStringUnoptSegHdrRec header;
Packit b099d7
  union {
Packit b099d7
    wchar_t		* wchars;
Packit b099d7
    unsigned char	* chars;
Packit b099d7
    XtPointer             text;		   /* pointer to text. */
Packit b099d7
  } data;			           /* To conform to opt. segment */
Packit b099d7
  unsigned char           begin_count;	   /* count of rendition tag begins */
Packit b099d7
  unsigned char	          end_count;	   /* count of rendition tag ends */
Packit b099d7
  XmStringTag	        * rend_begin_tags; /* list of rendition tag begins */
Packit b099d7
  XmStringTag	        * rend_end_tags;   /* list of rendition tag ends */
Packit b099d7
  XmStringTag	          tag;		   /* locale or charset tag */
Packit b099d7
  unsigned int	          byte_count;	   /* byte count for this segment */
Packit b099d7
  unsigned int	          char_count;	   /* character count */
Packit b099d7
  _XmStringCache          cache;
Packit b099d7
}  _XmStringUnoptSegRec, *_XmStringUnoptSeg;
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
Packit b099d7
  XmStringEntry specifies the different 'segments' that can be part 
Packit b099d7
  of a multiple-entry XmString. 
Packit b099d7
Packit b099d7
  These entries can be an optimized segment, an segment with cache,
Packit b099d7
  also optimized, an unoptimized segment or an array of segments. 
Packit b099d7
Packit b099d7
  The array entry type can contain any of the three other entry types, 
Packit b099d7
  but not an array entry. This is because we do not want to handle 
Packit b099d7
  recursive XmStrings.  
Packit b099d7
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
#define XmSTRING_ENTRY_OPTIMIZED		0x0
Packit b099d7
#define XmSTRING_ENTRY_UNOPTIMIZED		0x1
Packit b099d7
/* #define XmSTRING_ENTRY_OPTIMIZED_CACHE  	0x2 */
Packit b099d7
#define XmSTRING_ENTRY_ARRAY			0x3
Packit b099d7
Packit b099d7
typedef union __XmStringEntryRec {	
Packit b099d7
  _XmStringEmptyHeader         empty;
Packit b099d7
  _XmStringOptSegHdrRec	       single;	       /* XmSTRING_ENTRY_OPTIMIZED */
Packit b099d7
  _XmStringUnoptSegHdrRec      unopt_single;   /* XmSTRING_ENTRY_UNOPTIMIZED */
Packit b099d7
  _XmStringArraySegHdrRec      multiple;       /* XmSTRING_ENTRY_ARRAY */
Packit b099d7
} _XmStringEntryRec;
Packit b099d7
Packit b099d7
/***************************************************************
Packit b099d7
Packit b099d7
  _XmStringNREntry: 
Packit b099d7
  Used in the XmStringArraySeg, to prevent recursive 
Packit b099d7
  definitions of XmStrings.
Packit b099d7
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
typedef union __XmStringNREntryRec {	
Packit b099d7
  _XmStringEmptyHeader         empty;
Packit b099d7
  _XmStringOptSegHdrRec	       single;		/* XmSTRING_ENTRY_OPTIMIZED */
Packit b099d7
  _XmStringUnoptSegHdrRec      unopt_single; 	/* XmSTRING_ENTRY_UNOPTIMIZED */
Packit b099d7
} _XmStringNREntryRec;
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
 *
Packit b099d7
 * Typedefs for old structures 
Packit b099d7
 *
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
typedef struct __XmStringUnoptSegRec _XmStringSegmentRec;
Packit b099d7
typedef struct __XmStringUnoptSegRec *_XmStringSegment;
Packit b099d7
Packit b099d7
typedef struct __XmStringArraySegRec _XmStringLineRec;
Packit b099d7
typedef struct __XmStringArraySegRec *_XmStringLine;
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
 *
Packit b099d7
 * Macros 
Packit b099d7
 *
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
/* General */
Packit b099d7
#define _XmStrType(str)	      ((str)->empty.type)
Packit b099d7
#define _XmStrOptimized(str)  ((str)->empty.type == XmSTRING_OPTIMIZED)
Packit b099d7
#define _XmStrMultiple(str)   ((str)->empty.type ==  XmSTRING_MULTIPLE_ENTRY)
Packit b099d7
#define _XmStrRefCountGet(str)	(_XmStrMultiple(str)  ? 		   \
Packit b099d7
			       (str)->multi_str.refcount : 		   \
Packit b099d7
			       (_XmStrOptimized(str) ?		   	   \
Packit b099d7
			        (str)->opt_str.refcount : 		   \
Packit b099d7
			        1))
Packit b099d7
#define _XmStrRefCountSet(str, val)					   \
Packit b099d7
  (_XmStrMultiple(str)  ? 		   				   \
Packit b099d7
   ((str)->multi_str.refcount = (val)) : 	  			   \
Packit b099d7
   (_XmStrOptimized(str) ?		   	  			   \
Packit b099d7
    ((str)->opt_str.refcount = (val)) : 0))
Packit b099d7
Packit b099d7
#define _XmStrRefCountInc(str)						   \
Packit b099d7
  (_XmStrMultiple(str)  ? 		   				   \
Packit b099d7
   ++((str)->multi_str.refcount) :	 	  			   \
Packit b099d7
   (_XmStrOptimized(str) ?		   	  			   \
Packit b099d7
    ++((str)->opt_str.refcount) : 0))
Packit b099d7
Packit b099d7
#define _XmStrRefCountDec(str)						   \
Packit b099d7
  (_XmStrMultiple(str)  ? 		   				   \
Packit b099d7
   --((str)->multi_str.refcount) :	 	  			   \
Packit b099d7
   (_XmStrOptimized(str) ?		   	  			   \
Packit b099d7
    --((str)->opt_str.refcount) : 0))
Packit b099d7
Packit b099d7
/* Optimized, one-segment XmStrings */
Packit b099d7
#define _XmStrTextType(str)   ((str)->opt_str.text_type) 
Packit b099d7
#define _XmStrTagIndex(str)   ((str)->opt_str.tag_index)
Packit b099d7
#define _XmStrTagGet(str)     (_XmStrTagIndex(str) == TAG_INDEX_UNSET ?    \
Packit b099d7
			       NULL :                                      \
Packit b099d7
			       _XmStringIndexGetTag(_XmStrTagIndex(str)))
Packit b099d7
#define _XmStrByteCount(str)  ((str)->opt_str.byte_count)
Packit b099d7
#define _XmStrCharCount(str)  _XmStringCharacterCount((str)->opt_str.text, \
Packit b099d7
						      _XmStrTextType(str), \
Packit b099d7
						      _XmStrByteCount(str),\
Packit b099d7
						      NULL)
Packit b099d7
#define _XmStrRendBegin(str)  ((str)->opt_str.rend_begin)
Packit b099d7
#define _XmStrRendIndex(str)  ((str)->opt_str.rend_index)
Packit b099d7
#define _XmStrRendTagGet(str) (_XmStrRendIndex(str) == REND_INDEX_UNSET ?  \
Packit b099d7
			       NULL :                                      \
Packit b099d7
			       _XmStringIndexGetTag(_XmStrRendIndex(str)))
Packit b099d7
#define _XmStrRendEnd(str)    ((str)->opt_str.rend_end)
Packit b099d7
#define _XmStrDirection(str)  ((str)->opt_str.str_dir)
Packit b099d7
#define _XmStrFlipped(str)    ((str)->opt_str.flipped)
Packit b099d7
#define _XmStrTabs(str)	      ((str)->opt_str.tabs)
Packit b099d7
#define _XmStrText(str)       (((_XmStringOpt)(str))->text)
Packit b099d7
Packit b099d7
/* Multi-segment XmStrings */
Packit b099d7
#define _XmStrImplicitLine(str) (str)->multi_str.implicit_line 
Packit b099d7
#define _XmStrAddNewline(str)   (_XmStrMultiple(str) ? 		           \
Packit b099d7
			         _XmStrImplicitLine(str) : False)
Packit b099d7
#define _XmStrEntryCount(str)	(str)->multi_str.entry_count
Packit b099d7
#define _XmStrEntryCountGet(str) (_XmStrMultiple(str) ? 		   \
Packit b099d7
				  _XmStrEntryCount(str) : 1)
Packit b099d7
#define _XmStrLineCountGet(str) (_XmStrMultiple(str)&&_XmStrAddNewline(str) ? \
Packit b099d7
				 _XmStrEntryCount(str) : 	   	   \
Packit b099d7
				  1)
Packit b099d7
#define _XmStrEntry(str)	((_XmStringMulti)(str))->entry
Packit b099d7
#define _XmStrEntryGet(str)     (_XmStrMultiple(str) ? 		   	   \
Packit b099d7
				 _XmStrEntry(str) :			   \
Packit b099d7
				 (_XmStringEntry*)NULL)
Packit b099d7
Packit b099d7
#define _XmStrInit(str, type)						   \
Packit b099d7
{									   \
Packit b099d7
  switch (type) { 							   \
Packit b099d7
  case XmSTRING_OPTIMIZED : 						   \
Packit b099d7
    bzero((char*)str, sizeof(_XmStringOptRec));				   \
Packit b099d7
    _XmStrType(str) = type; 						   \
Packit b099d7
    _XmStrTextType(str) = XmNO_TEXT;                                       \
Packit b099d7
    _XmStrDirection(str) = XmSTRING_DIRECTION_UNSET;			   \
Packit b099d7
    _XmStrTagIndex(str) = TAG_INDEX_UNSET;			 	   \
Packit b099d7
    _XmStrRendIndex(str) = REND_INDEX_UNSET;			 	   \
Packit b099d7
    _XmStrRefCountSet(str, 1);			 	 	 	   \
Packit b099d7
    break; 								   \
Packit b099d7
  case XmSTRING_MULTIPLE_ENTRY : 					   \
Packit b099d7
    bzero((char*)str, sizeof(_XmStringMultiRec));			   \
Packit b099d7
    _XmStrType(str) = type; 						   \
Packit b099d7
    _XmStrRefCountSet(str, 1);			 	 	 	   \
Packit b099d7
    break; 								   \
Packit b099d7
  } 									   \
Packit b099d7
}
Packit b099d7
Packit b099d7
#ifdef _XmDEBUG_XMSTRING_MEM
Packit b099d7
#define STR_OFFSET		sizeof(double)
Packit b099d7
#define _XmStrMalloc(size)	(XtMalloc((size) + STR_OFFSET) + STR_OFFSET)
Packit b099d7
#define _XmStrFree(ptr)		(XtFree(((char*)(ptr)) - STR_OFFSET))
Packit b099d7
#else
Packit b099d7
#define _XmStrMalloc(size)	(XtMalloc(size))
Packit b099d7
#define _XmStrFree(ptr)		(XtFree((char*)(ptr)))
Packit b099d7
#endif /* _XmDEBUG_XMSTRING_MEM */
Packit b099d7
Packit b099d7
#define _XmStrCreate(str, type, text_len)				   \
Packit b099d7
{									   \
Packit b099d7
  switch (type) { 							   \
Packit b099d7
  case XmSTRING_OPTIMIZED : 						   \
Packit b099d7
    (str) = (_XmString)							   \
Packit b099d7
      _XmStrMalloc(sizeof(_XmStringOptRec) +                               \
Packit b099d7
		   (text_len ? (text_len - TEXT_BYTES_IN_STRUCT) : 0));    \
Packit b099d7
    bzero((char*)str, sizeof(_XmStringOptRec)); 			   \
Packit b099d7
    _XmStrType(str) = type; 						   \
Packit b099d7
    _XmStrTextType(str) = XmNO_TEXT;                                       \
Packit b099d7
    _XmStrDirection(str) = XmSTRING_DIRECTION_UNSET;			   \
Packit b099d7
    _XmStrTagIndex(str) = TAG_INDEX_UNSET;			 	   \
Packit b099d7
    _XmStrRendIndex(str) = REND_INDEX_UNSET;			 	   \
Packit b099d7
    _XmStrRefCountSet(str, 1);			 	 	 	   \
Packit b099d7
    _XmStrByteCount(str) = text_len;                                       \
Packit b099d7
    break; 								   \
Packit b099d7
  case XmSTRING_MULTIPLE_ENTRY : 					   \
Packit b099d7
    (str) = (_XmString)_XmStrMalloc(sizeof(_XmStringMultiRec));		   \
Packit b099d7
    bzero((char*)str, sizeof(_XmStringMultiRec));			   \
Packit b099d7
    _XmStrType(str) = type; 						   \
Packit b099d7
    _XmStrRefCountSet(str, 1);			 	 	 	   \
Packit b099d7
    break; 								   \
Packit b099d7
  } 									   \
Packit b099d7
}
Packit b099d7
Packit b099d7
/* General XmString Entry macros */
Packit b099d7
#define _XmEntryType(entry)	(((_XmStringEntry)(entry))->empty.type)
Packit b099d7
#define _XmEntryOptimized(entry) 					   \
Packit b099d7
        (_XmEntryType(entry) == XmSTRING_ENTRY_OPTIMIZED)
Packit b099d7
#define _XmEntryMultiple(entry) 					   \
Packit b099d7
        (_XmEntryType(entry) == XmSTRING_ENTRY_ARRAY)
Packit b099d7
#define _XmEntryUnoptimized(entry) 					   \
Packit b099d7
	(_XmEntryType(entry) == XmSTRING_ENTRY_UNOPTIMIZED)
Packit b099d7
Packit b099d7
/* Non-array entry macros */
Packit b099d7
#define _XmEntryTextTypeSet(entry, val)					   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->single.text_type = (val)) :	   \
Packit b099d7
	 (((_XmStringEntry)(entry))->unopt_single.text_type = (val)))
Packit b099d7
#define _XmEntryTagIndex(entry) 					   \
Packit b099d7
	(((_XmStringEntry)(entry))->single.tag_index)
Packit b099d7
#define _XmUnoptSegTag(entry) 						   \
Packit b099d7
        ((_XmStringUnoptSeg)(entry))->tag
Packit b099d7
#define _XmUnoptSegByteCount(entry)                                        \
Packit b099d7
        ((_XmStringUnoptSeg)(entry))->byte_count
Packit b099d7
#define _XmEntryByteCountSet(entry, val)				   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->single.byte_count = (val)) : 	   \
Packit b099d7
	 (_XmUnoptSegByteCount(entry) = (val)))
Packit b099d7
#define _XmEntryCharCountSet(entry, val)			           \
Packit b099d7
	(_XmEntryUnoptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringUnoptSeg)(entry))->char_count = (val)) :	 	   \
Packit b099d7
	 0)
Packit b099d7
#define _XmEntryRendIndex(entry) 					   \
Packit b099d7
        (((_XmStringEntry)(entry))->single.rend_index)
Packit b099d7
#define _XmUnoptSegRendBeginCount(entry)				   \
Packit b099d7
 	((_XmStringUnoptSeg)(entry))->begin_count
Packit b099d7
#define _XmEntryRendBeginCountSet(entry, val) 				   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->single.rend_begin = (val)) : 	   \
Packit b099d7
	 (_XmUnoptSegRendBeginCount(entry) = (val)))
Packit b099d7
#define _XmUnoptSegRendBegins(entry)					   \
Packit b099d7
  	((_XmStringUnoptSeg)(entry))->rend_begin_tags
Packit b099d7
#define _XmUnoptSegRendEndCount(entry)					   \
Packit b099d7
  	((_XmStringUnoptSeg)(entry))->end_count
Packit b099d7
#define _XmEntryRendEndCountSet(entry, val) 				   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->single.rend_end = (val)) : 	   \
Packit b099d7
	 (_XmUnoptSegRendEndCount(entry) = (val)))
Packit b099d7
#define _XmUnoptSegRendEnds(entry)					   \
Packit b099d7
  	((_XmStringUnoptSeg)(entry))->rend_end_tags
Packit b099d7
#define _XmEntryTabsSet(entry, val) 					   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->single.tabs_before = (val)) :	   \
Packit b099d7
	 (((_XmStringEntry)(entry))->unopt_single.tabs_before = (val)))
Packit b099d7
#define _XmEntryFlippedGet(entry) 					   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 ((_XmStringEntry)(entry))->single.flipped : 			   \
Packit b099d7
	 ((_XmStringEntry)(entry))->unopt_single.flipped)
Packit b099d7
#define _XmEntryFlippedSet(entry, val) 					   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->single.flipped = (val)) : 		   \
Packit b099d7
	 (((_XmStringEntry)(entry))->unopt_single.flipped = (val)))
Packit b099d7
#define _XmEntryPermGet(entry) 						   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 ((_XmStringEntry)(entry))->single.permanent : 			   \
Packit b099d7
	 ((_XmStringEntry)(entry))->unopt_single.permanent)
Packit b099d7
#define _XmEntryPermSet(entry, val) 					   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->single.permanent = (val)) : 	   \
Packit b099d7
	 (((_XmStringEntry)(entry))->unopt_single.permanent = (val)))
Packit b099d7
#define _XmEntrySoftNewlineGet(entry) 					   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 ((_XmStringEntry)(entry))->single.soft_line_break : 		   \
Packit b099d7
	 (_XmEntryUnoptimized(entry) ? 					   \
Packit b099d7
	  ((_XmStringEntry)(entry))->unopt_single.soft_line_break : 	   \
Packit b099d7
	  ((_XmStringEntry)(entry))->multiple.soft_line_break))
Packit b099d7
#define _XmEntrySoftNewlineSet(entry, val) 				   \
Packit b099d7
	(_XmEntryOptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->single.soft_line_break = (val)) : 	   \
Packit b099d7
	 (_XmEntryUnoptimized(entry) ? 					   \
Packit b099d7
	  (((_XmStringEntry)(entry))->unopt_single.soft_line_break = (val)):\
Packit b099d7
	  (((_XmStringEntry)(entry))->multiple.soft_line_break = (val))))
Packit b099d7
#define _XmEntryImm(entry) 						   \
Packit b099d7
	(((_XmStringEntry)(entry))->single.immediate)
Packit b099d7
#define _XmEntryPushSet(entry, val) 					   \
Packit b099d7
	(_XmEntryUnoptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->unopt_single.push_before = (val)) :  \
Packit b099d7
	 0)
Packit b099d7
#define _XmEntryPopSet(entry, val) 					   \
Packit b099d7
	(_XmEntryUnoptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringEntry)(entry))->unopt_single.pop_after = (val)) :    \
Packit b099d7
	 0)
Packit b099d7
#define _XmEntryMBText(entry) 						   \
Packit b099d7
	(((_XmStringOptSeg)(entry))->data.chars)
Packit b099d7
#define _XmEntryWCText(entry) 						   \
Packit b099d7
	(((_XmStringOptSeg)(entry))->data.wchars)
Packit b099d7
#define _XmEntryCacheSet(entry, val) 					   \
Packit b099d7
	(_XmEntryUnoptimized(entry) ? 					   \
Packit b099d7
	 (((_XmStringUnoptSeg)(entry))->cache = (val)) :		   \
Packit b099d7
	 NULL)
Packit b099d7
Packit b099d7
	 
Packit b099d7
/* Array entry specific macros */
Packit b099d7
#define _XmEntrySegmentCount(entry) 					   \
Packit b099d7
  (((_XmStringEntry)(entry))->multiple.segment_count)
Packit b099d7
#define _XmEntrySegmentCountGet(entry) 					   \
Packit b099d7
        (_XmEntryMultiple(entry) ? 					   \
Packit b099d7
	 _XmEntrySegmentCount(entry) :			 		   \
Packit b099d7
	 1)
Packit b099d7
#define _XmEntrySegment(entry) 						   \
Packit b099d7
  (((_XmStringArraySeg)(entry))->seg)
Packit b099d7
Packit b099d7
#define _XmEntrySegmentGet(entry) 					   \
Packit b099d7
        (_XmEntryMultiple(entry) ? 					   \
Packit b099d7
	 _XmEntrySegment(entry) : 					   \
Packit b099d7
	 (_XmStringNREntry *)&(entry))
Packit b099d7
Packit b099d7
/* Creation macros */
Packit b099d7
Packit b099d7
#define _XmEntryInit(entry, type)                               	   \
Packit b099d7
{									   \
Packit b099d7
  switch (type) { 							   \
Packit b099d7
  case XmSTRING_ENTRY_OPTIMIZED : 					   \
Packit b099d7
    bzero((char*)entry, sizeof(_XmStringOptSegRec));			   \
Packit b099d7
    _XmEntryTagIndex(entry) = TAG_INDEX_UNSET;			 	   \
Packit b099d7
    _XmEntryRendIndex(entry) = REND_INDEX_UNSET;		 	   \
Packit b099d7
    break; 								   \
Packit b099d7
  case XmSTRING_ENTRY_ARRAY : 						   \
Packit b099d7
    bzero((char*)entry, sizeof(_XmStringArraySegRec));			   \
Packit b099d7
    break; 								   \
Packit b099d7
  case XmSTRING_ENTRY_UNOPTIMIZED :					   \
Packit b099d7
    bzero((char*)entry, sizeof(_XmStringUnoptSegRec));		   \
Packit b099d7
    break; 								   \
Packit b099d7
  } 									   \
Packit b099d7
  _XmEntryType(entry) = type; 						   \
Packit b099d7
  _XmEntryTextTypeSet(entry, XmNO_TEXT);                                   \
Packit b099d7
  if (type != XmSTRING_ENTRY_ARRAY)                                        \
Packit b099d7
    _XmEntryDirectionSet(entry, XmSTRING_DIRECTION_UNSET);		   \
Packit b099d7
}
Packit b099d7
        
Packit b099d7
#define _XmEntryCreate(entry, type)					   \
Packit b099d7
{									   \
Packit b099d7
  switch (type) { 							   \
Packit b099d7
  case XmSTRING_ENTRY_OPTIMIZED : 					   \
Packit b099d7
    (entry) = (_XmStringEntry)XtMalloc(sizeof(_XmStringOptSegRec));	   \
Packit b099d7
    bzero((char*)entry, sizeof(_XmStringOptSegRec));			   \
Packit b099d7
    _XmEntryTagIndex(entry) = TAG_INDEX_UNSET;			 	   \
Packit b099d7
    _XmEntryRendIndex(entry) = REND_INDEX_UNSET;		 	   \
Packit b099d7
    break; 								   \
Packit b099d7
  case XmSTRING_ENTRY_ARRAY : 						   \
Packit b099d7
    (entry) = (_XmStringEntry)XtMalloc(sizeof(_XmStringArraySegRec));	   \
Packit b099d7
    bzero((char*)entry, sizeof(_XmStringArraySegRec));			   \
Packit b099d7
    break; 								   \
Packit b099d7
  case XmSTRING_ENTRY_UNOPTIMIZED :					   \
Packit b099d7
    (entry) = (_XmStringEntry)XtMalloc(sizeof(_XmStringUnoptSegRec));  \
Packit b099d7
    bzero((char*)entry, sizeof(_XmStringUnoptSegRec));		   \
Packit b099d7
    break; 								   \
Packit b099d7
  } 									   \
Packit b099d7
  if (entry) {                                                             \
Packit b099d7
    _XmEntryType(entry) = type; 					   \
Packit b099d7
    _XmEntryTextTypeSet(entry, XmNO_TEXT);                                 \
Packit b099d7
    if (type != XmSTRING_ENTRY_ARRAY)                                      \
Packit b099d7
      _XmEntryDirectionSet(entry, XmSTRING_DIRECTION_UNSET);		   \
Packit b099d7
  } 									   \
Packit b099d7
}
Packit b099d7
Packit b099d7
#define _XmCACHE_DIRTY        0
Packit b099d7
#define _XmCacheDirty(cache)    (((_XmStringCache)(cache))->dirty)
Packit b099d7
#define _XmCacheNext(cache)     (((_XmStringCache)(cache))->next)
Packit b099d7
Packit b099d7
#define _XmEntryDirtyGet(entry, type, data) \
Packit b099d7
     (((type) == _XmSCANNING_CACHE) ? \
Packit b099d7
      (Boolean)(long)_XmScanningCacheGet((_XmStringNREntry)entry, \
Packit b099d7
					 (XmDirection)(long)data, \
Packit b099d7
					 _XmCACHE_DIRTY) : \
Packit b099d7
      (((type) == _XmRENDERING_CACHE) ? \
Packit b099d7
       (Boolean)(long)_XmRenderCacheGet((_XmStringEntry)entry, \
Packit b099d7
					(XmRenderTable)(long)data, \
Packit b099d7
				        _XmCACHE_DIRTY) : \
Packit b099d7
       True))
Packit b099d7
Packit b099d7
Packit b099d7
#define _XmEntryDirtySet(entry, type, data, val) \
Packit b099d7
     (((type) == _XmSCANNING_CACHE) ? \
Packit b099d7
      _XmScanningCacheSet((_XmStringNREntry)entry, \
Packit b099d7
			  (XmDirection)(long)data, \
Packit b099d7
			  _XmCACHE_DIRTY, (XtPointer)(long)val) : \
Packit b099d7
      (((type) == _XmRENDERING_CACHE) ? \
Packit b099d7
       _XmRenderCacheSet((_XmStringEntry)entry, \
Packit b099d7
			 (XmRenderTable)(long)data, \
Packit b099d7
			 _XmCACHE_DIRTY, (XtPointer)(long)val) : \
Packit b099d7
       (void)NULL))
Packit b099d7
	
Packit b099d7
/* Scanning cache */
Packit b099d7
#define _XmCACHE_SCAN_LEFT    1
Packit b099d7
#define _XmCACHE_SCAN_RIGHT   2
Packit b099d7
#define _XmCACHE_SCAN_LAYOUT  3
Packit b099d7
#define _XmCACHE_SCAN_DEPTH   4
Packit b099d7
#define _XmEntryLeftGet(entry, d) 					   \
Packit b099d7
      (_XmStringEntry)_XmScanningCacheGet(entry, d, _XmCACHE_SCAN_LEFT)
Packit b099d7
#define _XmEntryRightGet(entry, d) 				   \
Packit b099d7
      (_XmStringEntry)_XmScanningCacheGet(entry, d, _XmCACHE_SCAN_RIGHT)
Packit b099d7
#define _XmEntryLayoutGet(entry, d) 				   \
Packit b099d7
      (XmDirection)(long)_XmScanningCacheGet(entry, d, _XmCACHE_SCAN_LAYOUT)
Packit b099d7
#define _XmEntryLayoutDepthGet(entry, d) 				   \
Packit b099d7
      (unsigned short)(long)_XmScanningCacheGet(entry, d, _XmCACHE_SCAN_DEPTH)
Packit b099d7
#define _XmEntryLeftSet(entry, d, val) 				   \
Packit b099d7
      _XmScanningCacheSet(entry, d, _XmCACHE_SCAN_LEFT, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryRightSet(entry, d, val) 				   \
Packit b099d7
      _XmScanningCacheSet(entry, d, _XmCACHE_SCAN_RIGHT, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryLayoutSet(entry, d, val) 				   \
Packit b099d7
      _XmScanningCacheSet(entry, d, _XmCACHE_SCAN_LAYOUT, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryLayoutDepthSet(entry, d, val) 			   \
Packit b099d7
      _XmScanningCacheSet(entry, d, _XmCACHE_SCAN_DEPTH, (XtPointer)(long)val)
Packit b099d7
Packit b099d7
/* Rendering cache */
Packit b099d7
#define _XmCACHE_RENDER_WIDTH     1
Packit b099d7
#define _XmCACHE_RENDER_HEIGHT    2
Packit b099d7
#define _XmCACHE_RENDER_RENDITION 3
Packit b099d7
#define _XmCACHE_RENDER_X         4
Packit b099d7
#define _XmCACHE_RENDER_Y         5
Packit b099d7
#define _XmCACHE_RENDER_BASELINE  6
Packit b099d7
#define _XmCACHE_RENDER_ASCENT	  7
Packit b099d7
#define _XmCACHE_RENDER_DESCENT	  8
Packit b099d7
#define _XmCACHE_RENDER_PREV_TABS 9
Packit b099d7
#define _XmEntryXGet(entry, rt) 					   \
Packit b099d7
        (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_X)
Packit b099d7
#define _XmEntryYGet(entry, rt) 					   \
Packit b099d7
        (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_Y)
Packit b099d7
#define _XmEntryWidthGet(entry, rt) 					   \
Packit b099d7
        (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_WIDTH)
Packit b099d7
#define _XmEntryHeightGet(entry, rt) 					   \
Packit b099d7
        (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_HEIGHT)
Packit b099d7
#define _XmEntryBaselineGet(entry, rt) 				 	   \
Packit b099d7
        (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_BASELINE)
Packit b099d7
#define _XmEntryAscentGet(entry, rt) 				 	   \
Packit b099d7
        (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_ASCENT)
Packit b099d7
#define _XmEntryDescentGet(entry, rt) 				 	   \
Packit b099d7
        (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_DESCENT)
Packit b099d7
#define _XmEntryRenditionGet(entry, rt) 				   \
Packit b099d7
        (XmRendition)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_RENDITION)
Packit b099d7
#define _XmEntryPrevTabsGet(entry, rt)					   \
Packit b099d7
        (char)(long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_PREV_TABS)
Packit b099d7
#define _XmEntryXSet(entry, rt, val) 					   \
Packit b099d7
        _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_X, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryYSet(entry, rt, val) 					   \
Packit b099d7
        _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_Y, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryWidthSet(entry, rt, val) 				   \
Packit b099d7
        _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_WIDTH, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryHeightSet(entry, rt, val) 				   \
Packit b099d7
        _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_HEIGHT, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryBaselineSet(entry, rt, val) 			 	   \
Packit b099d7
        _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_BASELINE, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryAscentSet(entry, rt, val) 				 	   \
Packit b099d7
        _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_ASCENT, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryDescentSet(entry, rt, val) 				 	   \
Packit b099d7
        _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_DESCENT, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryRenditionSet(entry, rt, val) 				   \
Packit b099d7
        _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_RENDITION, (XtPointer)(long)val)
Packit b099d7
#define _XmEntryPrevTabsSet(entry, rt, val)				   \
Packit b099d7
        _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_PREV_TABS, (XtPointer)(long)val)
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Macros for old non-optimized segment data structure access
Packit b099d7
 */
Packit b099d7
Packit b099d7
#define _XmSegTag(seg)			_XmUnoptSegTag(seg)
Packit b099d7
#define _XmSegCharCount(seg)		_XmUnoptSegByteCount(seg)
Packit b099d7
#define _XmSegText(seg)			((_XmStringUnoptSeg)(seg))->data.text
Packit b099d7
#define _XmSegDirection(seg)		_XmEntryDirectionGet(seg)
Packit b099d7
#define _XmSegLayoutDirection(seg)      _XmEntryPushGet(seg)
Packit b099d7
#define _XmSegLayout(seg)               _XmEntryPopGet(seg)
Packit b099d7
Packit b099d7
#define _XmSegType(seg)			_XmEntryTextTypeGet(seg)
Packit b099d7
#define _XmSegTextGet(seg)		(unsigned char *)_XmSegText(seg)
Packit b099d7
#define _XmSegTextSet(seg,val)		_XmEntryTextSet(seg, (XtPointer)(val))
Packit b099d7
#define _XmSegMBTextGet(seg)		_XmEntryMBText(seg)
Packit b099d7
#define _XmSegWCTextGet(seg)		_XmEntryWCText(seg)
Packit b099d7
#define _XmSegTab(seg)			_XmEntryTabsGet(seg)
Packit b099d7
#define _XmSegLeft(seg)			((_XmStringUnoptSeg)seg)->cache
Packit b099d7
#define _XmSegRight(seg)		((_XmStringUnoptSeg)seg)->cache
Packit b099d7
#define _XmSegRendBegins(seg)		_XmUnoptSegRendBegins(seg)
Packit b099d7
#define _XmSegRendBeginGet(seg,n)	_XmEntryRendBeginGet(seg,n)
Packit b099d7
#define _XmSegRendBeginCount(seg)	_XmUnoptSegRendBeginCount(seg)
Packit b099d7
#define _XmSegRendEnds(seg)		_XmUnoptSegRendEnds(seg)
Packit b099d7
#define _XmSegRendEndGet(seg,n)		_XmEntryRendEndGet(seg,n)
Packit b099d7
#define _XmSegRendEndCount(seg)		_XmUnoptSegRendEndCount(seg)
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Macros for line data structure access
Packit b099d7
 */
Packit b099d7
Packit b099d7
#define _XmStrLineSegCount(line)        _XmEntrySegmentCount(line)
Packit b099d7
#define _XmStrLineSegment(line)						\
Packit b099d7
  ((_XmStringSegment *)_XmEntrySegment(line))
Packit b099d7
#define _XmStrLineSegmentSet(line, val)	_XmEntrySegment(line) = 	\
Packit b099d7
  (_XmStringNREntry *)(val)
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Macros for internal string data structure access
Packit b099d7
 */
Packit b099d7
Packit b099d7
#define _XmStrLineCnt(str)		_XmStrEntryCount(str)
Packit b099d7
#define _XmStrLineLine(str)		((_XmStringLine *)_XmStrEntry(str))
Packit b099d7
#define _XmStrLineLineSet(str, val)	_XmStrEntry(str) = 		\
Packit b099d7
  (_XmStringEntry *)(val)
Packit b099d7
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
 *
Packit b099d7
 * Function headers
Packit b099d7
 *
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
/**** Private Defines, Typedefs, and Function Declarations for XmString.c ****/
Packit b099d7
Packit b099d7
extern XFontStruct * _XmGetFirstFont( 
Packit b099d7
                        XmFontListEntry entry) ;
Packit b099d7
extern Boolean _XmFontListSearch( 
Packit b099d7
                        XmFontList fontlist,
Packit b099d7
                        XmStringCharSet charset,
Packit b099d7
                        short *indx,
Packit b099d7
                        XFontStruct **font_struct) ;
Packit b099d7
Packit b099d7
extern int _XmStringIndexCacheTag( 
Packit b099d7
                        XmStringTag tag,
Packit b099d7
                        int length) ;
Packit b099d7
extern XmStringTag _XmStringCacheTag( 
Packit b099d7
                        XmStringTag tag,
Packit b099d7
                        int length) ;
Packit b099d7
Packit b099d7
Packit b099d7
extern Boolean _XmStringInitContext( 
Packit b099d7
                        _XmStringContext *context,
Packit b099d7
                        _XmString string) ;
Packit b099d7
extern Boolean _XmStringGetNextSegment( 
Packit b099d7
                        _XmStringContext context,
Packit b099d7
                        XmStringCharSet *charset,
Packit b099d7
                        XmStringDirection *direction,
Packit b099d7
                        char **text,
Packit b099d7
                        short *char_count,
Packit b099d7
                        Boolean *separator) ;
Packit b099d7
extern void _XmStringFreeContext( 
Packit b099d7
                        _XmStringContext context) ;
Packit b099d7
extern Dimension _XmStringWidth( 
Packit b099d7
                        XmFontList fontlist,
Packit b099d7
                        _XmString string) ;
Packit b099d7
extern Dimension _XmStringHeight( 
Packit b099d7
                        XmFontList fontlist,
Packit b099d7
                        _XmString string) ;
Packit b099d7
extern void _XmStringExtent( 
Packit b099d7
                        XmFontList fontlist,
Packit b099d7
                        _XmString string,
Packit b099d7
                        Dimension *width,
Packit b099d7
                        Dimension *height) ;
Packit b099d7
extern Boolean _XmStringEmpty( 
Packit b099d7
                        _XmString string) ;
Packit b099d7
extern void _XmStringDraw( 
Packit b099d7
                        Display *d,
Packit b099d7
                        Window w,
Packit b099d7
                        XmFontList fontlist,
Packit b099d7
                        _XmString string,
Packit b099d7
                        GC gc,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
                        int x,
Packit b099d7
                        int y,
Packit b099d7
                        int width,
Packit b099d7
                        unsigned int align,
Packit b099d7
                        unsigned int lay_dir,
Packit b099d7
#else
Packit b099d7
                        Position x,
Packit b099d7
                        Position y,
Packit b099d7
                        Dimension width,
Packit b099d7
                        unsigned char align,
Packit b099d7
                        unsigned char lay_dir,
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
                        XRectangle *clip) ;
Packit b099d7
extern void _XmStringDrawImage( 
Packit b099d7
                        Display *d,
Packit b099d7
                        Window w,
Packit b099d7
                        XmFontList fontlist,
Packit b099d7
                        _XmString string,
Packit b099d7
                        GC gc,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
                        int x,
Packit b099d7
                        int y,
Packit b099d7
                        int width,
Packit b099d7
                        unsigned int align,
Packit b099d7
                        unsigned int lay_dir,
Packit b099d7
#else
Packit b099d7
                        Position x,
Packit b099d7
                        Position y,
Packit b099d7
                        Dimension width,
Packit b099d7
                        unsigned char align,
Packit b099d7
                        unsigned char lay_dir,
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
                        XRectangle *clip) ;
Packit b099d7
extern void _XmStringDrawUnderline( 
Packit b099d7
                        Display *d,
Packit b099d7
                        Window w,
Packit b099d7
                        XmFontList f,
Packit b099d7
                        _XmString s,
Packit b099d7
                        GC gc,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
                        int x,
Packit b099d7
                        int y,
Packit b099d7
                        int width,
Packit b099d7
                        unsigned int align,
Packit b099d7
                        unsigned int lay_dir,
Packit b099d7
#else
Packit b099d7
                        Position x,
Packit b099d7
                        Position y,
Packit b099d7
                        Dimension width,
Packit b099d7
                        unsigned char align,
Packit b099d7
                        unsigned char lay_dir,
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
                        XRectangle *clip,
Packit b099d7
                        _XmString u) ;
Packit b099d7
extern void _XmStringDrawMnemonic( 
Packit b099d7
                        Display *d,
Packit b099d7
                        Window w,
Packit b099d7
                        XmFontList fontlist,
Packit b099d7
                        _XmString string,
Packit b099d7
                        GC gc,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
                        int x,
Packit b099d7
                        int y,
Packit b099d7
                        int width,
Packit b099d7
                        unsigned int align,
Packit b099d7
                        unsigned int lay_dir,
Packit b099d7
#else
Packit b099d7
                        Position x,
Packit b099d7
                        Position y,
Packit b099d7
                        Dimension width,
Packit b099d7
                        unsigned char align,
Packit b099d7
                        unsigned char lay_dir,
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
                        XRectangle *clip,
Packit b099d7
                        String mnemonic,
Packit b099d7
                        XmStringCharSet charset) ;
Packit b099d7
extern void _XmStringRender(Display *d,
Packit b099d7
                            Drawable w,
Packit b099d7
                            XmRenderTable rendertable,
Packit b099d7
                            XmRendition rend,
Packit b099d7
                            _XmString string,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
                            int x,
Packit b099d7
                            int y,
Packit b099d7
                            int width,
Packit b099d7
                            unsigned int align,
Packit b099d7
                            unsigned int lay_dir
Packit b099d7
#else
Packit b099d7
                            Position x,
Packit b099d7
                            Position y,
Packit b099d7
                            Dimension width,
Packit b099d7
                            unsigned char align,
Packit b099d7
                            unsigned char lay_dir
Packit b099d7
#endif	/* NeedWidePrototypes */
Packit b099d7
                            ) ;
Packit b099d7
extern _XmString _XmStringCreate( 
Packit b099d7
                        XmString cs) ;
Packit b099d7
extern void _XmStringFree( 
Packit b099d7
                        _XmString string) ;
Packit b099d7
extern char * _XmStringGetCurrentCharset( void ) ;
Packit b099d7
extern char * _XmCharsetCanonicalize( 
Packit b099d7
                        String charset) ;
Packit b099d7
extern _XmString _XmStringCopy( 
Packit b099d7
                        _XmString string) ;
Packit b099d7
extern Boolean _XmStringByteCompare( 
Packit b099d7
                        _XmString a,
Packit b099d7
                        _XmString b) ;
Packit b099d7
extern Boolean _XmStringHasSubstring( 
Packit b099d7
                        _XmString string,
Packit b099d7
                        _XmString substring) ;
Packit b099d7
extern XmString _XmStringCreateExternal( 
Packit b099d7
                        XmFontList fontlist,
Packit b099d7
                        _XmString cs) ;
Packit b099d7
extern Dimension _XmStringBaseline( 
Packit b099d7
                        XmFontList fontlist,
Packit b099d7
                        _XmString string) ;
Packit b099d7
extern void _XmStringGetBaselines(XmRenderTable rendertable,
Packit b099d7
                                  _XmString string,
Packit b099d7
                                  Dimension **baselines,
Packit b099d7
                                  Cardinal *line_count);
Packit b099d7
extern int _XmStringLineCount( 
Packit b099d7
                        _XmString string) ;
Packit b099d7
extern char * _XmStringGetTextConcat( 
Packit b099d7
                        XmString string) ;
Packit b099d7
extern Boolean _XmStringIsCurrentCharset(
Packit b099d7
			XmStringCharSet c) ;
Packit b099d7
extern Boolean _XmStringSingleSegment(
Packit b099d7
			XmString str,
Packit b099d7
			char **pTextOut,
Packit b099d7
			XmStringCharSet *pCharsetOut ) ;
Packit b099d7
extern NextTabResult _XmStringGetNextTabWidth(XmStringContext ctx,
Packit b099d7
				Widget widget,
Packit b099d7
                                unsigned char units,
Packit b099d7
                                XmRenderTable rt,
Packit b099d7
				float *width,
Packit b099d7
				XmRendition *rend); 
Packit b099d7
extern XtPointer _XmStringUngenerate (XmString string,
Packit b099d7
			XmStringTag tag,
Packit b099d7
			XmTextType tag_type,
Packit b099d7
			XmTextType output_type);
Packit b099d7
Packit b099d7
extern void _XmStringDrawSegment(Display *d,
Packit b099d7
				 Drawable w, 
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
				 int x,
Packit b099d7
				 int y,
Packit b099d7
				 int width,
Packit b099d7
				 int height,
Packit b099d7
#else
Packit b099d7
				 Position x,
Packit b099d7
				 Position y,
Packit b099d7
				 Dimension width,
Packit b099d7
				 Dimension height,
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
				 _XmStringNREntry seg, 
Packit b099d7
				 XmRendition rend, 
Packit b099d7
				 XmRenderTable rendertable,
Packit b099d7
#if NeedWidePrototypes 
Packit b099d7
				 int image,
Packit b099d7
#else
Packit b099d7
				 Boolean image, 
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
				 XmString *underline, 
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
				 unsigned int descender
Packit b099d7
#else 
Packit b099d7
				 Dimension descender
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
				 ); 
Packit b099d7
extern void _XmStringDrawLining(Display *d,
Packit b099d7
				Drawable w,
Packit b099d7
				Position x,
Packit b099d7
				Position y,
Packit b099d7
				Dimension width,
Packit b099d7
				Dimension height,
Packit b099d7
				Dimension descender,
Packit b099d7
				XmRendition rend,
Packit b099d7
				Pixel select_color,
Packit b099d7
				XmHighlightMode mode,
Packit b099d7
				Boolean colors_set);
Packit b099d7
Packit b099d7
extern Boolean _XmStringSegmentExtents(_XmStringEntry entry,
Packit b099d7
				       XmRenderTable rendertable, 
Packit b099d7
				       XmRendition *rend_in_out,
Packit b099d7
				       XmRendition base,
Packit b099d7
				       Dimension *width,
Packit b099d7
				       Dimension *height,
Packit b099d7
				       Dimension *ascent,
Packit b099d7
				       Dimension *descent); 
Packit b099d7
Packit b099d7
extern void _XmStringLayout(_XmString string,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
			    int direction
Packit b099d7
#else
Packit b099d7
                            XmDirection direction
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
			    );
Packit b099d7
extern _XmString _XmStringOptToNonOpt(_XmStringOpt string);
Packit b099d7
extern XmString _XmStringCvtOptToMulti(XmString str);
Packit b099d7
extern XmString _XmStringOptimize(XmString str);
Packit b099d7
extern XmString _XmStringMakeXmString(_XmStringEntry **entries, 
Packit b099d7
				      int count);
Packit b099d7
extern void _XmStringEntryFree(_XmStringEntry entry);
Packit b099d7
extern _XmStringEntry _XmStringEntryCopy(_XmStringEntry entry);
Packit b099d7
extern unsigned char _XmStringCharacterCount(XtPointer text,
Packit b099d7
					     XmTextType text_type,
Packit b099d7
					     int byte_count,
Packit b099d7
					     XFontStruct *font);
Packit b099d7
extern unsigned char _XmEntryCharCountGet(_XmStringEntry entry, 
Packit b099d7
					  XmRenderTable rt);
Packit b099d7
extern _XmStringCache _XmStringCacheGet(_XmStringCache caches, 
Packit b099d7
					int type);
Packit b099d7
extern void _XmStringCacheFree(_XmStringCache caches);
Packit b099d7
extern XtPointer _XmScanningCacheGet(_XmStringNREntry entry, 
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
				     int d,
Packit b099d7
#else				     
Packit b099d7
				     XmDirection d, 
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
				     int field);
Packit b099d7
extern void      _XmScanningCacheSet(_XmStringNREntry entry, 
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
				     int d,
Packit b099d7
#else				     
Packit b099d7
				     XmDirection d, 
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
				     int field,
Packit b099d7
				     XtPointer value);
Packit b099d7
/* Rendering cache */
Packit b099d7
extern XtPointer _XmRenderCacheGet(_XmStringEntry entry,
Packit b099d7
				   XmRenderTable rt, 
Packit b099d7
				   int field);
Packit b099d7
extern void      _XmRenderCacheSet(_XmStringEntry entry, 
Packit b099d7
				   XmRenderTable rt, 
Packit b099d7
				   int field, 
Packit b099d7
				   XtPointer value);
Packit b099d7
Packit b099d7
extern XmStringTag _XmStringIndexGetTag(int index);
Packit b099d7
Packit b099d7
extern Boolean _XmStringGetSegment(_XmStringContext   context, 
Packit b099d7
				   Boolean	      update_context,
Packit b099d7
				   Boolean	      copy_data,
Packit b099d7
				   XtPointer         *text, 
Packit b099d7
				   XmStringTag       *tag, 
Packit b099d7
				   XmTextType        *type, 
Packit b099d7
				   XmStringTag      **rendition_tags, 
Packit b099d7
				   unsigned int      *tag_count,
Packit b099d7
				   XmStringDirection *direction,
Packit b099d7
				   Boolean           *separator, 
Packit b099d7
				   unsigned char     *tabs,
Packit b099d7
				   short             *char_count,
Packit b099d7
				   XmDirection       *push_before,
Packit b099d7
				   Boolean	     *pop_after);
Packit b099d7
Packit b099d7
/* Declarations for macro to function switchover. */
Packit b099d7
extern _XmStringCache _XmEntryCacheGet(_XmStringEntry entry); 
Packit b099d7
extern XmStringTag _XmEntryTag(_XmStringEntry entry); 
Packit b099d7
extern void _XmEntryTagSet(_XmStringEntry entry, XmStringTag tag); 
Packit b099d7
extern XtPointer _XmEntryTextGet(_XmStringEntry entry); 
Packit b099d7
extern XmDirection _XmEntryPushGet(_XmStringEntry entry); 
Packit b099d7
extern Boolean _XmEntryPopGet(_XmStringEntry entry); 
Packit b099d7
extern unsigned int _XmEntryByteCountGet(_XmStringEntry entry); 
Packit b099d7
extern unsigned int _XmEntryDirectionGet(_XmStringEntry entry);
Packit b099d7
extern void _XmEntryDirectionSet(_XmStringEntry entry, XmDirection val);
Packit b099d7
extern unsigned char _XmEntryRendEndCountGet(_XmStringEntry entry);
Packit b099d7
extern unsigned char _XmEntryRendBeginCountGet(_XmStringEntry entry);
Packit b099d7
extern XmStringTag _XmEntryRendEndGet(_XmStringEntry entry,
Packit b099d7
				      int n);
Packit b099d7
extern XmStringTag _XmEntryRendBeginGet(_XmStringEntry entry,
Packit b099d7
					int n);
Packit b099d7
extern void _XmEntryRendEndSet(_XmStringEntry entry,
Packit b099d7
			       XmStringTag tag,
Packit b099d7
			       int n);
Packit b099d7
extern void _XmEntryRendBeginSet(_XmStringEntry entry,
Packit b099d7
				 XmStringTag tag,
Packit b099d7
				 int n);
Packit b099d7
extern unsigned char _XmEntryTabsGet(_XmStringEntry entry);
Packit b099d7
extern unsigned int _XmEntryTextTypeGet(_XmStringEntry entry); 
Packit b099d7
extern void _XmEntryTextSet(_XmStringEntry entry, XtPointer val);
Packit b099d7
Packit b099d7
extern unsigned char *_XmStringTruncateASN1(unsigned char *str, int n); 
Packit b099d7
extern void _XmStringContextCopy(_XmStringContext target,
Packit b099d7
				 _XmStringContext source);
Packit b099d7
extern void _XmStringContextFree(_XmStringContext target);
Packit b099d7
extern XmString _XmStringNCreate(char *text, XmStringTag tag, int len);
Packit b099d7
extern void _XmStringSegmentNew(_XmString string,
Packit b099d7
				int line_index,
Packit b099d7
				_XmStringEntry value,
Packit b099d7
				int copy) ;
Packit b099d7
extern void _XmStringContextReInit(_XmStringContext context,
Packit b099d7
			 _XmString	  string);
Packit b099d7
extern int _XmConvertFactor(unsigned char units,
Packit b099d7
			    float *factor);
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
#ifdef _XmDEBUG_XMSTRING
Packit b099d7
extern void _Xm_dump_fontlist(XmFontList f) ;
Packit b099d7
extern void _Xm_dump_fontlist_cache( void ) ;
Packit b099d7
extern void _Xm_dump_stream( unsigned char *cs) ;
Packit b099d7
extern void _Xm_dump_internal(_XmString string) ;
Packit b099d7
#endif /* _XmDEBUG_XMSTRING */
Packit b099d7
/********    End Private Function Declarations    ********/
Packit b099d7
Packit b099d7
#ifdef __cplusplus
Packit b099d7
}  /* Close scope of 'extern "C"' declaration which encloses file. */
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#endif /* _XmStringI_h */
Packit b099d7
/* DON'T ADD ANYTHING AFTER THIS #endif */