LF OS
Hobby operating system for amd64 with high ambitions
Loading...
Searching...
No Matches
state.c File Reference

(475a4fe LLVM update: finally on 18.x!)

#include "vterm_internal.h"
#include <stdio.h>
#include <string.h>
+ Include dependency graph for state.c:

Go to the source code of this file.

Macros

#define strneq(a, b, n)   (strncmp(a,b,n)==0)
 
#define NO_FORCE   0
 
#define FORCE   1
 
#define DWL_OFF   0
 
#define DWL_ON   1
 
#define DHL_OFF   0
 
#define DHL_TOP   1
 
#define DHL_BOTTOM   2
 
#define LBOUND(v, min)   if((v) < (min)) (v) = (min)
 
#define UBOUND(v, max)   if((v) > (max)) (v) = (max)
 
#define LEADER(l, b)   ((l << 8) | b)
 
#define INTERMED(i, b)   ((i << 16) | b)
 

Functions

static void putglyph (VTermState *state, const uint32_t chars[], int width, VTermPos pos)
 
static void updatecursor (VTermState *state, VTermPos *oldpos, int cancel_phantom)
 
static void erase (VTermState *state, VTermRect rect, int selective)
 
static VTermStatevterm_state_new (VTerm *vt)
 
INTERNAL void vterm_state_free (VTermState *state)
 
static void scroll (VTermState *state, VTermRect rect, int downward, int rightward)
 
static void linefeed (VTermState *state)
 
static void grow_combine_buffer (VTermState *state)
 
static void set_col_tabstop (VTermState *state, int col)
 
static void clear_col_tabstop (VTermState *state, int col)
 
static int is_col_tabstop (VTermState *state, int col)
 
static int is_cursor_in_scrollregion (const VTermState *state)
 
static void tab (VTermState *state, int count, int direction)
 
static void set_lineinfo (VTermState *state, int row, int force, int dwl, int dhl)
 
static int on_text (const char bytes[], size_t len, void *user)
 
static int on_control (unsigned char control, void *user)
 
static int settermprop_bool (VTermState *state, VTermProp prop, int v)
 
static int settermprop_int (VTermState *state, VTermProp prop, int v)
 
static int settermprop_string (VTermState *state, VTermProp prop, VTermStringFragment frag)
 
static void savecursor (VTermState *state, int save)
 
static int on_escape (const char *bytes, size_t len, void *user)
 
static void set_mode (VTermState *state, int num, int val)
 
static void set_dec_mode (VTermState *state, int num, int val)
 
static void request_dec_mode (VTermState *state, int num)
 
static void request_version_string (VTermState *state)
 
static int on_csi (const char *leader, const long args[], int argcount, const char *intermed, char command, void *user)
 
static char base64_one (uint8_t b)
 
static uint8_t unbase64one (char c)
 
static void osc_selection (VTermState *state, VTermStringFragment frag)
 
static int on_osc (int command, VTermStringFragment frag, void *user)
 
static void request_status_string (VTermState *state, VTermStringFragment frag)
 
static int on_dcs (const char *command, size_t commandlen, VTermStringFragment frag, void *user)
 
static int on_apc (VTermStringFragment frag, void *user)
 
static int on_pm (VTermStringFragment frag, void *user)
 
static int on_sos (VTermStringFragment frag, void *user)
 
static int on_resize (int rows, int cols, void *user)
 
VTermStatevterm_obtain_state (VTerm *vt)
 
void vterm_state_reset (VTermState *state, int hard)
 
void vterm_state_get_cursorpos (const VTermState *state, VTermPos *cursorpos)
 
void vterm_state_set_callbacks (VTermState *state, const VTermStateCallbacks *callbacks, void *user)
 
void * vterm_state_get_cbdata (VTermState *state)
 
void vterm_state_set_unrecognised_fallbacks (VTermState *state, const VTermStateFallbacks *fallbacks, void *user)
 
void * vterm_state_get_unrecognised_fbdata (VTermState *state)
 
int vterm_state_set_termprop (VTermState *state, VTermProp prop, VTermValue *val)
 
void vterm_state_focus_in (VTermState *state)
 
void vterm_state_focus_out (VTermState *state)
 
const VTermLineInfovterm_state_get_lineinfo (const VTermState *state, int row)
 
void vterm_state_set_selection_callbacks (VTermState *state, const VTermSelectionCallbacks *callbacks, void *user, char *buffer, size_t buflen)
 
void vterm_state_send_selection (VTermState *state, VTermSelectionMask mask, VTermStringFragment frag)
 

Variables

static const VTermParserCallbacks parser_callbacks
 

Macro Definition Documentation

◆ DHL_BOTTOM

#define DHL_BOTTOM   2

Definition at line 246 of file state.c.

◆ DHL_OFF

#define DHL_OFF   0

Definition at line 244 of file state.c.

◆ DHL_TOP

#define DHL_TOP   1

Definition at line 245 of file state.c.

◆ DWL_OFF

#define DWL_OFF   0

Definition at line 241 of file state.c.

◆ DWL_ON

#define DWL_ON   1

Definition at line 242 of file state.c.

◆ FORCE

#define FORCE   1

Definition at line 239 of file state.c.

◆ INTERMED

#define INTERMED (   i,
 
)    ((i << 16) | b)

◆ LBOUND

#define LBOUND (   v,
  min 
)    if((v) < (min)) (v) = (min)

◆ LEADER

#define LEADER (   l,
 
)    ((l << 8) | b)

◆ NO_FORCE

#define NO_FORCE   0

Definition at line 238 of file state.c.

◆ strneq

#define strneq (   a,
  b,
 
)    (strncmp(a,b,n)==0)

Definition at line 6 of file state.c.

◆ UBOUND

#define UBOUND (   v,
  max 
)    if((v) > (max)) (v) = (max)

Function Documentation

◆ base64_one()

static char base64_one ( uint8_t  b)
static

Definition at line 1586 of file state.c.

+ Here is the caller graph for this function:

◆ clear_col_tabstop()

static void clear_col_tabstop ( VTermState state,
int  col 
)
static

Definition at line 193 of file state.c.

References state, and VTermState::tabstops.

+ Here is the caller graph for this function:

◆ erase()

static void erase ( VTermState state,
VTermRect  rect,
int  selective 
)
static

Definition at line 44 of file state.c.

References VTermState::callbacks, VTermState::cbdata, VTermState::cols, VTermLineInfo::continuation, VTermRect::end_col, VTermRect::end_row, VTermStateCallbacks::erase, VTermState::lineinfo, VTermState::rows, VTermRect::start_row, and state.

+ Here is the caller graph for this function:

◆ grow_combine_buffer()

static void grow_combine_buffer ( VTermState state)
static

Definition at line 174 of file state.c.

References VTermState::combine_chars, VTermState::combine_chars_size, memcpy(), state, VTermState::vt, vterm_allocator_free(), and vterm_allocator_malloc().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ is_col_tabstop()

static int is_col_tabstop ( VTermState state,
int  col 
)
static

Definition at line 199 of file state.c.

References state, and VTermState::tabstops.

+ Here is the caller graph for this function:

◆ is_cursor_in_scrollregion()

static int is_cursor_in_scrollregion ( const VTermState state)
static

Definition at line 205 of file state.c.

References VTermPos::col, VTermState::pos, VTermPos::row, SCROLLREGION_BOTTOM, SCROLLREGION_LEFT, SCROLLREGION_RIGHT, VTermState::scrollregion_top, and state.

+ Here is the caller graph for this function:

◆ linefeed()

static void linefeed ( VTermState state)
static

Definition at line 158 of file state.c.

References VTermState::pos, VTermPos::row, VTermState::rows, scroll(), SCROLLREGION_BOTTOM, SCROLLREGION_LEFT, SCROLLREGION_RIGHT, VTermState::scrollregion_top, VTermRect::start_row, and state.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ on_apc()

static int on_apc ( VTermStringFragment  frag,
void *  user 
)
static

Definition at line 1913 of file state.c.

References VTermStateFallbacks::apc, VTermState::fallbacks, VTermState::fbdata, and state.

◆ on_control()

static int on_control ( unsigned char  control,
void *  user 
)
static

◆ on_csi()

static int on_csi ( const char *  leader,
const long  args[],
int  argcount,
const char *  intermed,
char  command,
void *  user 
)
static

◆ on_dcs()

static int on_dcs ( const char *  command,
size_t  commandlen,
VTermStringFragment  frag,
void *  user 
)
static

Definition at line 1897 of file state.c.

References VTermStateFallbacks::dcs, DEBUG_LOG, VTermState::fallbacks, VTermState::fbdata, request_status_string(), state, and strneq.

+ Here is the call graph for this function:

◆ on_escape()

static int on_escape ( const char *  bytes,
size_t  len,
void *  user 
)
static

◆ on_osc()

static int on_osc ( int  command,
VTermStringFragment  frag,
void *  user 
)
static

Definition at line 1777 of file state.c.

References VTermState::callbacks, VTermState::fallbacks, VTermState::fbdata, VTermStateFallbacks::osc, osc_selection(), VTermState::selection, settermprop_string(), state, VTERM_PROP_ICONNAME, and VTERM_PROP_TITLE.

+ Here is the call graph for this function:

◆ on_pm()

static int on_pm ( VTermStringFragment  frag,
void *  user 
)
static

Definition at line 1925 of file state.c.

References VTermState::fallbacks, VTermState::fbdata, VTermStateFallbacks::pm, and state.

◆ on_resize()

◆ on_sos()

static int on_sos ( VTermStringFragment  frag,
void *  user 
)
static

Definition at line 1937 of file state.c.

References VTermState::fallbacks, VTermState::fbdata, VTermStateFallbacks::sos, and state.

◆ on_text()

◆ osc_selection()

static void osc_selection ( VTermState state,
VTermStringFragment  frag 
)
static

Definition at line 1617 of file state.c.

References VTermState::callbacks, DEBUG_LOG, VTermStringFragment::final, VTermStringFragment::initial, VTermStringFragment::len, VTermState::selection, state, VTermStringFragment::str, VTermState::tmp, unbase64one(), VTERM_SELECTION_CLIPBOARD, VTERM_SELECTION_CUT0, VTERM_SELECTION_PRIMARY, VTERM_SELECTION_SECONDARY, and VTERM_SELECTION_SELECT.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ putglyph()

static void putglyph ( VTermState state,
const uint32_t  chars[],
int  width,
VTermPos  pos 
)
static

Definition at line 14 of file state.c.

References VTermState::callbacks, VTermState::cbdata, VTermGlyphInfo::chars, VTermPos::col, DEBUG_LOG, VTermLineInfo::doubleheight, VTermLineInfo::doublewidth, info, VTermState::lineinfo, VTermState::protected_cell, VTermStateCallbacks::putglyph, VTermPos::row, state, and width.

+ Here is the caller graph for this function:

◆ request_dec_mode()

static void request_dec_mode ( VTermState state,
int  num 
)
static

Definition at line 843 of file state.c.

References C1_CSI, VTermState::mode, VTermState::mouse_flags, VTermState::mouse_protocol, MOUSE_WANT_CLICK, MOUSE_WANT_DRAG, MOUSE_WANT_MOVE, num, state, VTermState::vt, and vterm_push_output_sprintf_ctrl().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ request_status_string()

static void request_status_string ( VTermState state,
VTermStringFragment  frag 
)
static

Definition at line 1810 of file state.c.

References C1_DCS, CSI_ARG, CSI_ARG_HAS_MORE, ESC_S, VTermStringFragment::final, VTermStringFragment::initial, VTermStringFragment::len, VTermState::mode, VTerm::mode, VTermState::protected_cell, SCROLLREGION_BOTTOM, SCROLLREGION_LEFT, SCROLLREGION_RIGHT, VTermState::scrollregion_top, state, VTermStringFragment::str, VTermState::tmp, VTerm::tmpbuffer, VTerm::tmpbuffer_len, vt, VTermState::vt, VTERM_PROP_CURSORSHAPE_BAR_LEFT, VTERM_PROP_CURSORSHAPE_BLOCK, VTERM_PROP_CURSORSHAPE_UNDERLINE, vterm_push_output_bytes(), vterm_push_output_sprintf_str(), and vterm_state_getpen().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ request_version_string()

static void request_version_string ( VTermState state)
static

Definition at line 920 of file state.c.

References C1_DCS, state, VTermState::vt, vterm_push_output_sprintf_str(), VTERM_VERSION_MAJOR, and VTERM_VERSION_MINOR.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ savecursor()

static void savecursor ( VTermState state,
int  save 
)
static

Definition at line 566 of file state.c.

References VTermState::mode, VTermState::pos, VTermState::saved, settermprop_bool(), settermprop_int(), state, updatecursor(), VTERM_PROP_CURSORBLINK, VTERM_PROP_CURSORSHAPE, VTERM_PROP_CURSORVISIBLE, and vterm_state_savepen().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ scroll()

static void scroll ( VTermState state,
VTermRect  rect,
int  downward,
int  rightward 
)
static

Definition at line 112 of file state.c.

References VTermState::callbacks, VTermState::cbdata, cols, VTermState::cols, VTermRect::end_col, VTermRect::end_row, VTermStateCallbacks::erase, height, VTermState::lineinfo, memmove(), VTermStateCallbacks::moverect, rows, VTermStateCallbacks::scrollrect, VTermRect::start_col, VTermRect::start_row, state, and vterm_scroll_rect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_col_tabstop()

static void set_col_tabstop ( VTermState state,
int  col 
)
static

Definition at line 187 of file state.c.

References state, and VTermState::tabstops.

+ Here is the caller graph for this function:

◆ set_dec_mode()

static void set_dec_mode ( VTermState state,
int  num,
int  val 
)
static

Definition at line 749 of file state.c.

References VTermPos::col, DEBUG_LOG, DHL_OFF, DWL_OFF, FORCE, VTermState::mode, VTermState::mouse_protocol, num, VTermState::pos, VTermPos::row, VTermState::rows, savecursor(), SCROLLREGION_LEFT, VTermState::scrollregion_top, set_lineinfo(), settermprop_bool(), settermprop_int(), state, updatecursor(), VTERM_PROP_ALTSCREEN, VTERM_PROP_CURSORBLINK, VTERM_PROP_CURSORVISIBLE, VTERM_PROP_FOCUSREPORT, VTERM_PROP_MOUSE, VTERM_PROP_MOUSE_CLICK, VTERM_PROP_MOUSE_DRAG, VTERM_PROP_MOUSE_MOVE, VTERM_PROP_MOUSE_NONE, and VTERM_PROP_REVERSE.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_lineinfo()

static void set_lineinfo ( VTermState state,
int  row,
int  force,
int  dwl,
int  dhl 
)
static

Definition at line 248 of file state.c.

References VTermState::callbacks, VTermState::cbdata, DHL_BOTTOM, DHL_OFF, DHL_TOP, VTermLineInfo::doublewidth, DWL_OFF, DWL_ON, info, VTermState::lineinfo, VTermStateCallbacks::setlineinfo, and state.

+ Here is the caller graph for this function:

◆ set_mode()

static void set_mode ( VTermState state,
int  num,
int  val 
)
static

Definition at line 732 of file state.c.

References DEBUG_LOG, VTermState::mode, num, and state.

+ Here is the caller graph for this function:

◆ settermprop_bool()

static int settermprop_bool ( VTermState state,
VTermProp  prop,
int  v 
)
static

Definition at line 548 of file state.c.

References VTermValue::boolean, state, and vterm_state_set_termprop().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ settermprop_int()

static int settermprop_int ( VTermState state,
VTermProp  prop,
int  v 
)
static

Definition at line 554 of file state.c.

References VTermValue::number, state, and vterm_state_set_termprop().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ settermprop_string()

static int settermprop_string ( VTermState state,
VTermProp  prop,
VTermStringFragment  frag 
)
static

Definition at line 560 of file state.c.

References state, VTermValue::string, and vterm_state_set_termprop().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tab()

static void tab ( VTermState state,
int  count,
int  direction 
)
static

Definition at line 217 of file state.c.

References VTermPos::col, is_col_tabstop(), VTermState::pos, state, and THISROWWIDTH.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ unbase64one()

static uint8_t unbase64one ( char  c)
static

Definition at line 1601 of file state.c.

+ Here is the caller graph for this function:

◆ updatecursor()

static void updatecursor ( VTermState state,
VTermPos oldpos,
int  cancel_phantom 
)
static

Definition at line 31 of file state.c.

References VTermState::at_phantom, VTermState::callbacks, VTermState::cbdata, VTermPos::col, VTermState::mode, VTermStateCallbacks::movecursor, VTermState::pos, VTermPos::row, and state.

+ Here is the caller graph for this function:

◆ vterm_obtain_state()

VTermState * vterm_obtain_state ( VTerm vt)

Definition at line 2059 of file state.c.

References parser_callbacks, VTerm::state, state, vt, vterm_parser_set_callbacks(), and vterm_state_new().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vterm_state_focus_in()

void vterm_state_focus_in ( VTermState state)

Definition at line 2239 of file state.c.

References C1_CSI, VTermState::mode, state, VTermState::vt, and vterm_push_output_sprintf_ctrl().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vterm_state_focus_out()

void vterm_state_focus_out ( VTermState state)

Definition at line 2245 of file state.c.

References C1_CSI, VTermState::mode, state, VTermState::vt, and vterm_push_output_sprintf_ctrl().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vterm_state_free()

INTERNAL void vterm_state_free ( VTermState state)

Definition at line 102 of file state.c.

References BUFIDX_ALTSCREEN, BUFIDX_PRIMARY, VTermState::combine_chars, VTermState::lineinfos, state, VTermState::tabstops, VTermState::vt, and vterm_allocator_free().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vterm_state_get_cbdata()

void * vterm_state_get_cbdata ( VTermState state)

Definition at line 2159 of file state.c.

References VTermState::cbdata, and state.

◆ vterm_state_get_cursorpos()

void vterm_state_get_cursorpos ( const VTermState state,
VTermPos cursorpos 
)

Definition at line 2139 of file state.c.

References VTermState::pos, and state.

+ Here is the caller graph for this function:

◆ vterm_state_get_lineinfo()

const VTermLineInfo * vterm_state_get_lineinfo ( const VTermState state,
int  row 
)

Definition at line 2251 of file state.c.

References VTermState::lineinfo, and state.

+ Here is the caller graph for this function:

◆ vterm_state_get_unrecognised_fbdata()

void * vterm_state_get_unrecognised_fbdata ( VTermState state)

Definition at line 2176 of file state.c.

References VTermState::fbdata, and state.

+ Here is the caller graph for this function:

◆ vterm_state_new()

static VTermState * vterm_state_new ( VTerm vt)
static

Definition at line 59 of file state.c.

References VTermState::bold_is_highbright, BUFIDX_ALTSCREEN, BUFIDX_PRIMARY, VTermState::callbacks, VTermState::cbdata, VTermState::cols, VTerm::cols, VTermState::combine_chars, VTermState::combine_chars_size, VTermEncodingInstance::data, VTermEncodingInstance::enc, ENC_UTF8, VTermState::encoding_utf8, VTermEncoding::init, VTermState::lineinfo, VTermState::lineinfos, VTermState::mouse_buttons, VTermState::mouse_col, VTermState::mouse_protocol, VTermState::mouse_row, VTermState::rows, VTerm::rows, VTermState::selection, state, VTermState::tabstops, vt, VTermState::vt, vterm_allocator_malloc(), vterm_lookup_encoding(), and vterm_state_newpen().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vterm_state_reset()

◆ vterm_state_send_selection()

void vterm_state_send_selection ( VTermState state,
VTermSelectionMask  mask,
VTermStringFragment  frag 
)

Definition at line 2268 of file state.c.

References base64_one(), C1_OSC, VTermStringFragment::final, VTermStringFragment::initial, VTermStringFragment::len, VTermState::selection, state, VTermStringFragment::str, VTermState::tmp, vt, VTermState::vt, vterm_push_output_bytes(), and vterm_push_output_sprintf_str().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vterm_state_set_callbacks()

void vterm_state_set_callbacks ( VTermState state,
const VTermStateCallbacks callbacks,
void *  user 
)

Definition at line 2144 of file state.c.

References VTermState::callbacks, VTermState::cbdata, VTermStateCallbacks::initpen, and state.

+ Here is the caller graph for this function:

◆ vterm_state_set_selection_callbacks()

void vterm_state_set_selection_callbacks ( VTermState state,
const VTermSelectionCallbacks callbacks,
void *  user,
char *  buffer,
size_t  buflen 
)

Definition at line 2256 of file state.c.

References VTermState::callbacks, VTermState::selection, state, VTermState::vt, and vterm_allocator_malloc().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vterm_state_set_termprop()

int vterm_state_set_termprop ( VTermState state,
VTermProp  prop,
VTermValue val 
)

Definition at line 2181 of file state.c.

References VTermValue::boolean, BUFIDX_ALTSCREEN, BUFIDX_PRIMARY, VTermState::callbacks, VTermState::cbdata, VTermState::cols, erase(), VTermState::lineinfo, VTermState::lineinfos, VTermState::mode, VTermState::mouse_flags, MOUSE_WANT_CLICK, MOUSE_WANT_DRAG, MOUSE_WANT_MOVE, VTermValue::number, VTermState::rows, VTermStateCallbacks::settermprop, VTermRect::start_row, state, VTERM_N_PROPS, VTERM_PROP_ALTSCREEN, VTERM_PROP_CURSORBLINK, VTERM_PROP_CURSORSHAPE, VTERM_PROP_CURSORVISIBLE, VTERM_PROP_FOCUSREPORT, VTERM_PROP_ICONNAME, VTERM_PROP_MOUSE, VTERM_PROP_MOUSE_DRAG, VTERM_PROP_MOUSE_MOVE, VTERM_PROP_REVERSE, and VTERM_PROP_TITLE.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vterm_state_set_unrecognised_fallbacks()

void vterm_state_set_unrecognised_fallbacks ( VTermState state,
const VTermStateFallbacks fallbacks,
void *  user 
)

Definition at line 2164 of file state.c.

References VTermState::fallbacks, fallbacks, VTermState::fbdata, and state.

+ Here is the caller graph for this function:

Variable Documentation

◆ parser_callbacks

const VTermParserCallbacks parser_callbacks
static
Initial value:
= {
.text = on_text,
.control = on_control,
.escape = on_escape,
.csi = on_csi,
.osc = on_osc,
.dcs = on_dcs,
.apc = on_apc,
.pm = on_pm,
.sos = on_sos,
.resize = on_resize,
}
static int on_apc(VTermStringFragment frag, void *user)
Definition state.c:1913
static int on_sos(VTermStringFragment frag, void *user)
Definition state.c:1937
static int on_control(unsigned char control, void *user)
Definition state.c:449
static int on_csi(const char *leader, const long args[], int argcount, const char *intermed, char command, void *user)
Definition state.c:926
static int on_dcs(const char *command, size_t commandlen, VTermStringFragment frag, void *user)
Definition state.c:1897
static int on_pm(VTermStringFragment frag, void *user)
Definition state.c:1925
static int on_text(const char bytes[], size_t len, void *user)
Definition state.c:272
static int on_resize(int rows, int cols, void *user)
Definition state.c:1949
static int on_escape(const char *bytes, size_t len, void *user)
Definition state.c:591
static int on_osc(int command, VTermStringFragment frag, void *user)
Definition state.c:1777

Definition at line 2046 of file state.c.