cdesktopenv/cde/lib/DtTerm/TermPrim/TermPrimParserP.h

185 lines
6.8 KiB
C

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these libraries and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/*
** $XConsortium: TermPrimParserP.h /main/1 1996/04/21 19:18:27 drk $
*/
/* *
* (c) Copyright 1993, 1994 Hewlett-Packard Company *
* (c) Copyright 1993, 1994 International Business Machines Corp. *
* (c) Copyright 1993, 1994 Sun Microsystems, Inc. *
* (c) Copyright 1993, 1994 Novell, Inc. *
*/
#ifndef _Dt_TermPrimParserP_h
#define _Dt_TermPrimParserP_h
#include "TermPrimParser.h"
#include <limits.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef enum _TermParserSign
{
TermPARSER_SIGNnone = 0,
TermPARSER_SIGNnegative,
TermPARSER_SIGNpositive
} TermParserSign;
#define GetInputChar(context) ((context)->inputChar)
#define GetWorkingNum(context) ((context)->workingNum)
#define GetWorkingNumIsDefault(context) ((context)->workingNumIsDefault)
#define GetSign(context) ((context)->sign)
#define GetParm(context, i) ((context)->parms[i])
#define SetWorkingNum(context, value) (context)->workingNum = (value)
#define SetWorkingNumIsDefault(context, value) \
(context)->workingNumIsDefault = (value)
#define SetSign(context, value) (context)->sign = (value)
#define SetParm(context, i, value) ((context)->parms[i]) = (value)
/*
** seq - parser state machine transition table
*/
typedef struct _StateEntryRec
{
unsigned char lower; /* lower end of character range */
unsigned char upper; /* upper end of character range */
StateTable nextState; /* next state to enter */
void (*action)(); /* index to next runtime routine */
} StateEntryRec, *StateEntry;
typedef struct _StateTableRec
{
Boolean startState; /* is this a start state? */
StateEntry stateEntry; /* state entry table for state */
StateEntry statePreParseEntry;
/* pre-parse state entry table */
} StateTableRec;
/*
** Maximum length of a softkey definition.
*/
#define STR_SIZE 256
typedef struct _stringParameter
{
unsigned char str[STR_SIZE + 1]; /* buffer for string */
unsigned char length; /* length of str */
} stringParameter;
/*
** states in escape sequence parsing
*/
typedef enum _parseState
{
START, /* initial state */
ESCAPE, /* saw an escape */
AMP, /* saw an escape & */
AMP_A, /* saw an escape & a */
AMP_A_SIGN, /* saw an ^[&a- or ^[&a+ */
AMP_A_NUM, /* saw an escape & a num */
AMP_D, /* saw an escape & d */
AMP_F, /* saw an escape & f */
AMP_F_NUM, /* saw an escape & f num */
AMP_F_MIN, /* saw an escape & f - */
AMP_F_MIN_NUM, /* saw an escape & f - num */
AMP_F_STR, /* saw an escape & f string */
AMP_J, /* saw an escape & j */
AMP_J_NUM, /* saw an escape & j num */
AMP_J_NUM_L, /* saw an escape & j num L */
AMP_J_NUM_D,
AMP_K, /* saw an escape & k */
AMP_K_NUM, /* saw an escape & k [0-9]* */
AMP_R, /* saw an escape & r */
AMP_R_NUM, /* saw an escape & r num */
AMP_S, /* saw an escape & s */
AMP_S_0, /* saw an escape & s 0 */
AMP_S_1, /* saw an escape & s 1 */
LPAREN, /* saw an escape ( */
RPAREN, /* saw an escape ) */
ASTERISK, /* saw an escape * */
ASTERISK_D, /* saw an escape * d */
ASTERISK_S, /* saw an escape * s */
AMP_P,
AMP_P_NUM,
AMP_P_NUM_W,
AMP_P_W,
ERROR, /* error in escape sequence */
ASTERISK_X, /* saw an escape * x */
ASTERISK_Y, /* saw an escape * y */
ASTERISK_Y_EXC, /* saw an escape * y ! */
AMP_V, /* saw an escape & v */
AMP_V_ZERO, /* saw an escape & v 0 */
AMP_V_ONE, /* saw an escape & v 1 */
AMP_V_2_7, /* saw an escape & v [2-7] */
AMP_V_DEC, /* saw an escape & v . */
AMP_X, /* saw an escape & x */
AMP_X_0, /* saw an escape & x 0 */
AMP_X_1, /* saw an escape & x 1 */
KJCODE /* Kanji State 1/17/86 NY */
} parseState;
#define NUM_PARMS 20
typedef struct _ParserContextRec
{
/*
** escape sequence parsing variables
*/
StateTable stateTable; /* state table of the current state */
unsigned char inputChar[MB_LEN_MAX];
/* character being parsed */
short inputCharLen; /* length of the above */
parseState stateName; /* enum type with current state */
int workingNum; /* working number for entering parm */
Boolean workingNumIsDefault;
/* true if working num not touched */
TermParserSign sign; /* for numeric sign */
int parms[NUM_PARMS]; /* parameters */
stringParameter stringParms[2];
} ParserContextRec;
/*
** Parser support routines.
*/
extern void _DtTermPrimParserSaveSign ( Widget w);
extern void _DtTermPrimParserNextState(Widget w);
extern void _DtTermPrimParserClearParm(Widget w);
extern void _DtTermPrimParserClrStrParm(Widget w);
extern void _DtTermPrimParserEnterNum(Widget w);
extern void _enterMinNum(Widget w);
extern void _DtTermPrimParserParm1(Widget w);
extern void _DtTermPrimParserParm2(Widget w);
extern void _DtTermPrimParserParm3(Widget w);
extern void _DtTermPrimParserParm4(Widget w);
#ifdef __cplusplus
} /* close scope of 'extern "C"'... */
#endif /* __cplusplus */
#endif /* _Dt_TermPrimParserP_h */
/* DON'T ADD ANYTHING AFTER THIS #endif... */