scroll bar 99 ready
parent
2bbf370abb
commit
05230ad669
|
@ -17,10 +17,6 @@ CUSTOM_COMMAND_SIG(write_increment){
|
||||||
write_string(app, make_lit_string("++"));
|
write_string(app, make_lit_string("++"));
|
||||||
}
|
}
|
||||||
|
|
||||||
CUSTOM_COMMAND_SIG(write_decrement){
|
|
||||||
write_string(app, make_lit_string("--"));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
basic_seek(Application_Links *app, Command_ID seek_type, unsigned int flags){
|
basic_seek(Application_Links *app, Command_ID seek_type, unsigned int flags){
|
||||||
push_parameter(app, par_flags, flags);
|
push_parameter(app, par_flags, flags);
|
||||||
|
|
|
@ -386,7 +386,6 @@ void default_get_bindings(Bind_Helper *context, int set_hooks){
|
||||||
bind(context, '\t', MDFR_SHIFT, auto_tab_line_at_cursor);
|
bind(context, '\t', MDFR_SHIFT, auto_tab_line_at_cursor);
|
||||||
|
|
||||||
bind(context, '=', MDFR_CTRL, write_increment);
|
bind(context, '=', MDFR_CTRL, write_increment);
|
||||||
bind(context, '-', MDFR_CTRL, write_decrement);
|
|
||||||
bind(context, 't', MDFR_ALT, write_allen_todo);
|
bind(context, 't', MDFR_ALT, write_allen_todo);
|
||||||
bind(context, 'n', MDFR_ALT, write_allen_note);
|
bind(context, 'n', MDFR_ALT, write_allen_note);
|
||||||
bind(context, '[', MDFR_CTRL, open_long_braces);
|
bind(context, '[', MDFR_CTRL, open_long_braces);
|
||||||
|
|
|
@ -8,6 +8,24 @@ enum Cpp_Token_Type{
|
||||||
CPP_TOKEN_JUNK,
|
CPP_TOKEN_JUNK,
|
||||||
CPP_TOKEN_COMMENT,
|
CPP_TOKEN_COMMENT,
|
||||||
|
|
||||||
|
CPP_PP_INCLUDE,
|
||||||
|
CPP_PP_DEFINE,
|
||||||
|
CPP_PP_UNDEF,
|
||||||
|
CPP_PP_IF,
|
||||||
|
CPP_PP_IFDEF,
|
||||||
|
CPP_PP_IFNDEF,
|
||||||
|
CPP_PP_ELSE,
|
||||||
|
CPP_PP_ELIF,
|
||||||
|
CPP_PP_ENDIF,
|
||||||
|
CPP_PP_ERROR,
|
||||||
|
CPP_PP_IMPORT,
|
||||||
|
CPP_PP_USING,
|
||||||
|
CPP_PP_LINE,
|
||||||
|
CPP_PP_PRAGMA,
|
||||||
|
CPP_PP_STRINGIFY,
|
||||||
|
CPP_PP_CONCAT,
|
||||||
|
CPP_PP_UNKNOWN,
|
||||||
|
|
||||||
CPP_TOKEN_KEY_TYPE,
|
CPP_TOKEN_KEY_TYPE,
|
||||||
CPP_TOKEN_KEY_MODIFIER,
|
CPP_TOKEN_KEY_MODIFIER,
|
||||||
CPP_TOKEN_KEY_QUALIFIER,
|
CPP_TOKEN_KEY_QUALIFIER,
|
||||||
|
@ -142,29 +160,14 @@ enum Cpp_Token_Type{
|
||||||
// NOTE(allen): Precedence 16, LtoR
|
// NOTE(allen): Precedence 16, LtoR
|
||||||
CPP_TOKEN_COMMA,
|
CPP_TOKEN_COMMA,
|
||||||
|
|
||||||
CPP_PP_INCLUDE,
|
|
||||||
CPP_PP_DEFINE,
|
|
||||||
CPP_PP_UNDEF,
|
|
||||||
CPP_PP_IF,
|
|
||||||
CPP_PP_IFDEF,
|
|
||||||
CPP_PP_IFNDEF,
|
|
||||||
CPP_PP_ELSE,
|
|
||||||
CPP_PP_ELIF,
|
|
||||||
CPP_PP_ENDIF,
|
|
||||||
CPP_PP_ERROR,
|
|
||||||
CPP_PP_IMPORT,
|
|
||||||
CPP_PP_USING,
|
|
||||||
CPP_PP_LINE,
|
|
||||||
CPP_PP_PRAGMA,
|
|
||||||
CPP_PP_STRINGIFY,
|
|
||||||
CPP_PP_CONCAT,
|
|
||||||
CPP_PP_UNKNOWN,
|
|
||||||
CPP_TOKEN_DEFINED,
|
CPP_TOKEN_DEFINED,
|
||||||
CPP_TOKEN_INCLUDE_FILE,
|
CPP_TOKEN_INCLUDE_FILE,
|
||||||
CPP_TOKEN_ERROR_MESSAGE,
|
CPP_TOKEN_ERROR_MESSAGE,
|
||||||
|
|
||||||
// NOTE(allen): used in the parser
|
// NOTE(allen): used in the parser
|
||||||
CPP_TOKEN_EOF
|
CPP_TOKEN_EOF,
|
||||||
|
|
||||||
|
CPP_TOKEN_TYPE_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO(allen): This is a dumb redundant type... probably just
|
// TODO(allen): This is a dumb redundant type... probably just
|
||||||
|
@ -176,9 +179,9 @@ struct Cpp_File{
|
||||||
|
|
||||||
struct Cpp_Token{
|
struct Cpp_Token{
|
||||||
Cpp_Token_Type type;
|
Cpp_Token_Type type;
|
||||||
fcpp_i32 start, size;
|
int start, size;
|
||||||
fcpp_u16 state_flags;
|
unsigned short state_flags;
|
||||||
fcpp_u16 flags;
|
unsigned short flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Cpp_Token_Flag{
|
enum Cpp_Token_Flag{
|
||||||
|
@ -208,15 +211,15 @@ enum Cpp_Preprocessor_State{
|
||||||
|
|
||||||
struct Cpp_Lex_Data{
|
struct Cpp_Lex_Data{
|
||||||
Cpp_Preprocessor_State pp_state;
|
Cpp_Preprocessor_State pp_state;
|
||||||
fcpp_i32 pos;
|
int pos;
|
||||||
fcpp_bool32 complete;
|
int complete;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Cpp_Read_Result{
|
struct Cpp_Read_Result{
|
||||||
Cpp_Token token;
|
Cpp_Token token;
|
||||||
fcpp_i32 pos;
|
int pos;
|
||||||
fcpp_bool8 newline;
|
char newline;
|
||||||
fcpp_bool8 has_result;
|
char has_result;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Cpp_Token_Stack{
|
struct Cpp_Token_Stack{
|
||||||
|
@ -226,17 +229,17 @@ struct Cpp_Token_Stack{
|
||||||
|
|
||||||
struct Cpp_Token_Merge{
|
struct Cpp_Token_Merge{
|
||||||
Cpp_Token new_token;
|
Cpp_Token new_token;
|
||||||
fcpp_bool32 did_merge;
|
int did_merge;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Seek_Result{
|
struct Seek_Result{
|
||||||
fcpp_i32 pos;
|
int pos;
|
||||||
fcpp_bool32 new_line;
|
int new_line;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Cpp_Get_Token_Result{
|
struct Cpp_Get_Token_Result{
|
||||||
fcpp_i32 token_index;
|
int token_index;
|
||||||
fcpp_bool32 in_whitespace;
|
int in_whitespace;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Cpp_Relex_State{
|
struct Cpp_Relex_State{
|
||||||
|
|
6
4ed.cpp
6
4ed.cpp
|
@ -864,6 +864,8 @@ COMMAND_DECL(interactive_open){
|
||||||
// calls so that they still allocate the buffer right away. This way
|
// calls so that they still allocate the buffer right away. This way
|
||||||
// it's still possible to get at the buffer if so wished in the API.
|
// it's still possible to get at the buffer if so wished in the API.
|
||||||
// The switch for this view doesn't need to happen until the file is ready.
|
// The switch for this view doesn't need to happen until the file is ready.
|
||||||
|
//
|
||||||
|
// Alternatively... fuck all delayed actions. Please make them go away.
|
||||||
delayed_open(delay, string, panel);
|
delayed_open(delay, string, panel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3954,7 +3956,7 @@ App_Step_Sig(app_step){
|
||||||
for (dll_items(panel, used_panels)){
|
for (dll_items(panel, used_panels)){
|
||||||
view = panel->view;
|
view = panel->view;
|
||||||
active = (panel == cmd->panel);
|
active = (panel == cmd->panel);
|
||||||
if (step_file_view(view, active)){
|
if (step_file_view(system, view, active)){
|
||||||
app_result.redraw = 1;
|
app_result.redraw = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4404,7 +4406,7 @@ App_Step_Sig(app_step){
|
||||||
}
|
}
|
||||||
// TODO(allen): We could handle the case where someone tries to save the same thing
|
// TODO(allen): We could handle the case where someone tries to save the same thing
|
||||||
// twice... that would be nice to have under control.
|
// twice... that would be nice to have under control.
|
||||||
if (file && buffer_needs_save(file)){
|
if (file && buffer_get_sync(file) != SYNC_GOOD){
|
||||||
i32 sys_id = file_save(system, exchange, mem, file, file->name.source_path.str);
|
i32 sys_id = file_save(system, exchange, mem, file, file->name.source_path.str);
|
||||||
if (sys_id){
|
if (sys_id){
|
||||||
if (act->type == DACT_SAVE_AS){
|
if (act->type == DACT_SAVE_AS){
|
||||||
|
|
|
@ -75,14 +75,16 @@ struct View{
|
||||||
Command_Map *map;
|
Command_Map *map;
|
||||||
|
|
||||||
Editing_File *file;
|
Editing_File *file;
|
||||||
|
f32 prev_wrap_width;
|
||||||
|
|
||||||
View_UI showing_ui;
|
View_UI showing_ui;
|
||||||
GUI_Target gui_target;
|
GUI_Target gui_target;
|
||||||
|
|
||||||
#if 0
|
|
||||||
// interactive stuff
|
|
||||||
Interactive_Interaction interaction;
|
Interactive_Interaction interaction;
|
||||||
Interactive_Action action;
|
Interactive_Action action;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// interactive stuff
|
||||||
b32 finished;
|
b32 finished;
|
||||||
char query_[256];
|
char query_[256];
|
||||||
char dest_[256];
|
char dest_[256];
|
||||||
|
@ -151,10 +153,13 @@ view_lock_level(View *view){
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(allen): need to be able to get this from a gui interpretation loop somehow.
|
||||||
inline f32
|
inline f32
|
||||||
view_compute_width(View *view){
|
view_wrap_width(View *view){
|
||||||
Panel *panel = view->panel;
|
Panel *panel = view->panel;
|
||||||
return (f32)(panel->inner.x1 - panel->inner.x0);
|
f32 result = (f32)(panel->inner.x1 - panel->inner.x0);
|
||||||
|
result -= GUIScrollbarWidth;
|
||||||
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline f32
|
inline f32
|
||||||
|
@ -472,7 +477,7 @@ view_compute_lowest_line(View *view){
|
||||||
else{
|
else{
|
||||||
f32 wrap_y = view->line_wrap_y[last_line];
|
f32 wrap_y = view->line_wrap_y[last_line];
|
||||||
lowest_line = FLOOR32(wrap_y / view->font_height);
|
lowest_line = FLOOR32(wrap_y / view->font_height);
|
||||||
f32 max_width = view_compute_width(view);
|
f32 max_width = view_wrap_width(view);
|
||||||
|
|
||||||
Editing_File *file = view->file;
|
Editing_File *file = view->file;
|
||||||
Assert(!file->state.is_dummy);
|
Assert(!file->state.is_dummy);
|
||||||
|
@ -506,7 +511,7 @@ view_measure_wraps(System_Functions *system,
|
||||||
}
|
}
|
||||||
|
|
||||||
f32 line_height = (f32)view->font_height;
|
f32 line_height = (f32)view->font_height;
|
||||||
f32 max_width = view_compute_width(view);
|
f32 max_width = view_wrap_width(view);
|
||||||
buffer_measure_wrap_y(buffer, view->line_wrap_y, line_height, max_width);
|
buffer_measure_wrap_y(buffer, view->line_wrap_y, line_height, max_width);
|
||||||
|
|
||||||
view->line_count = line_count;
|
view->line_count = line_count;
|
||||||
|
@ -1123,7 +1128,7 @@ view_compute_cursor_from_pos(View *view, i32 pos){
|
||||||
|
|
||||||
Full_Cursor result = {};
|
Full_Cursor result = {};
|
||||||
if (font){
|
if (font){
|
||||||
f32 max_width = view_compute_width(view);
|
f32 max_width = view_wrap_width(view);
|
||||||
result = buffer_cursor_from_pos(&file->state.buffer, pos, view->line_wrap_y,
|
result = buffer_cursor_from_pos(&file->state.buffer, pos, view->line_wrap_y,
|
||||||
max_width, (f32)view->font_height, font->advance_data);
|
max_width, (f32)view->font_height, font->advance_data);
|
||||||
}
|
}
|
||||||
|
@ -1138,10 +1143,9 @@ view_compute_cursor_from_unwrapped_xy(View *view, f32 seek_x, f32 seek_y, b32 ro
|
||||||
|
|
||||||
Full_Cursor result = {};
|
Full_Cursor result = {};
|
||||||
if (font){
|
if (font){
|
||||||
f32 max_width = view_compute_width(view);
|
f32 max_width = view_wrap_width(view);
|
||||||
result = buffer_cursor_from_unwrapped_xy(&file->state.buffer, seek_x, seek_y,
|
result = buffer_cursor_from_unwrapped_xy(&file->state.buffer, seek_x, seek_y,
|
||||||
round_down, view->line_wrap_y,
|
round_down, view->line_wrap_y, max_width, (f32)view->font_height, font->advance_data);
|
||||||
max_width, (f32)view->font_height, font->advance_data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -1155,7 +1159,7 @@ view_compute_cursor_from_wrapped_xy(View *view, f32 seek_x, f32 seek_y, b32 roun
|
||||||
|
|
||||||
Full_Cursor result = {};
|
Full_Cursor result = {};
|
||||||
if (font){
|
if (font){
|
||||||
f32 max_width = view_compute_width(view);
|
f32 max_width = view_wrap_width(view);
|
||||||
result = buffer_cursor_from_wrapped_xy(&file->state.buffer, seek_x, seek_y,
|
result = buffer_cursor_from_wrapped_xy(&file->state.buffer, seek_x, seek_y,
|
||||||
round_down, view->line_wrap_y,
|
round_down, view->line_wrap_y,
|
||||||
max_width, (f32)view->font_height, font->advance_data);
|
max_width, (f32)view->font_height, font->advance_data);
|
||||||
|
@ -1172,7 +1176,7 @@ view_compute_cursor_from_line_pos(View *view, i32 line, i32 pos){
|
||||||
|
|
||||||
Full_Cursor result = {};
|
Full_Cursor result = {};
|
||||||
if (font){
|
if (font){
|
||||||
f32 max_width = view_compute_width(view);
|
f32 max_width = view_wrap_width(view);
|
||||||
result = buffer_cursor_from_line_character(&file->state.buffer, line, pos,
|
result = buffer_cursor_from_line_character(&file->state.buffer, line, pos,
|
||||||
view->line_wrap_y, max_width, (f32)view->font_height, font->advance_data);
|
view->line_wrap_y, max_width, (f32)view->font_height, font->advance_data);
|
||||||
}
|
}
|
||||||
|
@ -2481,6 +2485,7 @@ style_get_color(Style *style, Cpp_Token token){
|
||||||
|
|
||||||
default:
|
default:
|
||||||
result = &style->main.default_color;
|
result = &style->main.default_color;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -2488,8 +2493,9 @@ style_get_color(Style *style, Cpp_Token token){
|
||||||
|
|
||||||
inline f32
|
inline f32
|
||||||
view_compute_max_target_y(i32 lowest_line, i32 line_height, f32 view_height){
|
view_compute_max_target_y(i32 lowest_line, i32 line_height, f32 view_height){
|
||||||
real32 max_target_y = ((lowest_line+.5f)*line_height) - view_height*.5f;
|
f32 max_target_y = ((lowest_line+.5f)*line_height) - view_height*.5f;
|
||||||
return max_target_y;
|
if (max_target_y < 0) max_target_y = 0;
|
||||||
|
return(max_target_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal f32
|
internal f32
|
||||||
|
@ -2499,7 +2505,7 @@ view_compute_max_target_y(View *view){
|
||||||
f32 view_height = view_compute_height(view);
|
f32 view_height = view_compute_height(view);
|
||||||
f32 max_target_y = view_compute_max_target_y(
|
f32 max_target_y = view_compute_max_target_y(
|
||||||
lowest_line, line_height, view_height);
|
lowest_line, line_height, view_height);
|
||||||
return max_target_y;
|
return(max_target_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
|
@ -2613,8 +2619,6 @@ view_show_interactive(System_Functions *system, View *view, Command_Map *gui_map
|
||||||
view->map_for_file = view->map;
|
view->map_for_file = view->map;
|
||||||
view->map = gui_map;
|
view->map = gui_map;
|
||||||
view->showing_ui = VUI_Interactive;
|
view->showing_ui = VUI_Interactive;
|
||||||
view->action = action;
|
|
||||||
view->interaction = interaction;
|
|
||||||
view->finished = 0;
|
view->finished = 0;
|
||||||
|
|
||||||
copy(&view->query, query);
|
copy(&view->query, query);
|
||||||
|
@ -2646,7 +2650,17 @@ view_show_config(View *view, Command_Map *gui_map){}
|
||||||
inline void
|
inline void
|
||||||
view_show_interactive(System_Functions *system, View *view,
|
view_show_interactive(System_Functions *system, View *view,
|
||||||
Command_Map *gui_map, Interactive_Action action,
|
Command_Map *gui_map, Interactive_Action action,
|
||||||
Interactive_Interaction interaction, String query){}
|
Interactive_Interaction interaction, String query){
|
||||||
|
|
||||||
|
Models *models = view->models;
|
||||||
|
|
||||||
|
view->showing_ui = VUI_Interactive;
|
||||||
|
view->action = action;
|
||||||
|
view->interaction = interaction;
|
||||||
|
|
||||||
|
hot_directory_clean_end(&models->hot_directory);
|
||||||
|
hot_directory_reload(system, &models->hot_directory, &models->working_set);
|
||||||
|
}
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
view_show_theme(View *view, Command_Map *gui_map){}
|
view_show_theme(View *view, Command_Map *gui_map){}
|
||||||
|
@ -2663,9 +2677,8 @@ view_show_file(View *view, Command_Map *file_map){
|
||||||
view->showing_ui = VUI_None;
|
view->showing_ui = VUI_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
internal void
|
internal void
|
||||||
interactive_view_complete(View *view){
|
interactive_view_complete(View *view, String dest, i32 user_action){
|
||||||
Models *models = view->models;
|
Models *models = view->models;
|
||||||
Panel *panel = view->panel;
|
Panel *panel = view->panel;
|
||||||
Editing_File *old_file = view->file;
|
Editing_File *old_file = view->file;
|
||||||
|
@ -2688,16 +2701,16 @@ interactive_view_complete(View *view){
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IAct_Switch:
|
case IAct_Switch:
|
||||||
delayed_switch(&models->delay1, view->dest, panel);
|
delayed_switch(&models->delay1, dest, panel);
|
||||||
delayed_touch_file(&models->delay1, old_file);
|
delayed_touch_file(&models->delay1, old_file);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IAct_Kill:
|
case IAct_Kill:
|
||||||
delayed_try_kill(&models->delay1, view->dest);
|
delayed_try_kill(&models->delay1, dest);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IAct_Sure_To_Close:
|
case IAct_Sure_To_Close:
|
||||||
switch (view->user_action){
|
switch (user_action){
|
||||||
case 0:
|
case 0:
|
||||||
delayed_close(&models->delay1);
|
delayed_close(&models->delay1);
|
||||||
break;
|
break;
|
||||||
|
@ -2712,9 +2725,9 @@ interactive_view_complete(View *view){
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IAct_Sure_To_Kill:
|
case IAct_Sure_To_Kill:
|
||||||
switch (view->user_action){
|
switch (user_action){
|
||||||
case 0:
|
case 0:
|
||||||
delayed_kill(&models->delay1, view->dest);
|
delayed_kill(&models->delay1, dest);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -2723,8 +2736,8 @@ interactive_view_complete(View *view){
|
||||||
case 2:
|
case 2:
|
||||||
// TODO(allen): This is fishy! What if the save doesn't happen this time around?
|
// TODO(allen): This is fishy! What if the save doesn't happen this time around?
|
||||||
// We need to ensure delayed acts happen in order I think.
|
// We need to ensure delayed acts happen in order I think.
|
||||||
delayed_save(&models->delay1, view->dest);
|
delayed_save(&models->delay1, dest);
|
||||||
delayed_kill(&models->delay1, view->dest);
|
delayed_kill(&models->delay1, dest);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2735,7 +2748,6 @@ interactive_view_complete(View *view){
|
||||||
// underlying file which is a giant pain.
|
// underlying file which is a giant pain.
|
||||||
view->file = 0;
|
view->file = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
internal void
|
internal void
|
||||||
|
@ -3424,7 +3436,7 @@ view_reinit_scrolling(View *view){
|
||||||
cursor_x = view_get_cursor_x(view);
|
cursor_x = view_get_cursor_x(view);
|
||||||
cursor_y = view_get_cursor_y(view);
|
cursor_y = view_get_cursor_y(view);
|
||||||
|
|
||||||
w = view_compute_width(view);
|
w = view_wrap_width(view);
|
||||||
h = view_compute_height(view);
|
h = view_compute_height(view);
|
||||||
|
|
||||||
if (cursor_x >= target_x + w){
|
if (cursor_x >= target_x + w){
|
||||||
|
@ -3455,32 +3467,16 @@ file_step(View *view, i32_Rect region, Input_Summary *user_input, b32 is_active)
|
||||||
|
|
||||||
f32 delta_y = 3.f*line_height;
|
f32 delta_y = 3.f*line_height;
|
||||||
|
|
||||||
f32 max_y = (f32)(region.y1 - region.y0);
|
// TODO(allen): Would prefer to use this commented version,
|
||||||
|
// but then it disagrees with other values of max_y...
|
||||||
|
//f32 max_y = (f32)(region.y1 - region.y0);
|
||||||
|
f32 max_y = view_compute_height(view);
|
||||||
f32 max_x = (f32)(region.x1 - region.x0);
|
f32 max_x = (f32)(region.x1 - region.x0);
|
||||||
f32 max_target_y = view_compute_max_target_y(lowest_line, (i32)line_height, max_y);
|
f32 max_target_y = view_compute_max_target_y(lowest_line, (i32)line_height, max_y);
|
||||||
|
f32 cursor_max_y = max_y - view->font_height * 3;
|
||||||
if (user_input->mouse.wheel != 0){
|
|
||||||
f32 wheel_multiplier = 3.f;
|
|
||||||
f32 delta_target_y = delta_y*user_input->mouse.wheel*wheel_multiplier;
|
|
||||||
target_y += delta_target_y;
|
|
||||||
|
|
||||||
if (target_y < view->scroll_min_limit) target_y = view->scroll_min_limit;
|
if (cursor_y > target_y + cursor_max_y){
|
||||||
if (target_y > max_target_y) target_y = max_target_y;
|
target_y = cursor_y - cursor_max_y + delta_y;
|
||||||
|
|
||||||
f32 old_cursor_y = cursor_y;
|
|
||||||
if (cursor_y >= target_y + max_y) cursor_y = target_y + max_y;
|
|
||||||
if (cursor_y < target_y - view->scroll_min_limit) cursor_y = target_y - view->scroll_min_limit;
|
|
||||||
|
|
||||||
if (cursor_y != old_cursor_y){
|
|
||||||
view->cursor =
|
|
||||||
view_compute_cursor_from_xy(view, view->preferred_x, cursor_y);
|
|
||||||
}
|
|
||||||
|
|
||||||
result = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cursor_y > target_y + max_y){
|
|
||||||
target_y = cursor_y - max_y + delta_y;
|
|
||||||
}
|
}
|
||||||
if (cursor_y < target_y - view->scroll_min_limit){
|
if (cursor_y < target_y - view->scroll_min_limit){
|
||||||
target_y = cursor_y - delta_y + view->scroll_min_limit;
|
target_y = cursor_y - delta_y + view->scroll_min_limit;
|
||||||
|
@ -3550,33 +3546,277 @@ view_do_queries(View *view, GUI_Target *target){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal i32
|
internal void
|
||||||
step_file_view(View *view, b32 is_active){
|
do_widget(View *view, GUI_Target *target){
|
||||||
gui_begin_top_level(&view->gui_target);
|
gui_begin_serial_section(target);
|
||||||
{
|
{
|
||||||
gui_do_top_bar(&view->gui_target);
|
view_do_queries(view, target);
|
||||||
|
}
|
||||||
gui_begin_overlap(&view->gui_target);
|
gui_end_serial_section(target);
|
||||||
{
|
}
|
||||||
gui_begin_serial_section(&view->gui_target);
|
|
||||||
{
|
|
||||||
view_do_queries(view, &view->gui_target);
|
|
||||||
}
|
|
||||||
gui_end_serial_section(&view->gui_target);
|
|
||||||
|
|
||||||
gui_begin_serial_section(&view->gui_target);
|
internal i32
|
||||||
|
step_file_view(System_Functions *system, View *view, b32 is_active){
|
||||||
|
GUI_Target *target = &view->gui_target;
|
||||||
|
Models *models = view->models;
|
||||||
|
|
||||||
|
f32 max_y = view_compute_height(view);
|
||||||
|
|
||||||
|
i32 lowest_line = view_compute_lowest_line(view);
|
||||||
|
f32 min_target_y = view->scroll_min_limit;
|
||||||
|
f32 max_target_y = view_compute_max_target_y(lowest_line, view->font_height, max_y);
|
||||||
|
|
||||||
|
|
||||||
|
gui_begin_top_level(target);
|
||||||
|
{
|
||||||
|
gui_do_top_bar(target);
|
||||||
|
|
||||||
|
if (view->showing_ui == VUI_None){
|
||||||
|
gui_begin_overlap(target);
|
||||||
|
do_widget(view, target);
|
||||||
|
|
||||||
|
gui_begin_serial_section(target);
|
||||||
|
{
|
||||||
|
f32 v = unlerp(min_target_y, view->target_y, max_target_y);
|
||||||
|
f32 old_cursor_y = view_get_cursor_y(view);
|
||||||
|
f32 cursor_y = old_cursor_y;
|
||||||
|
f32 cursor_max_y = max_y - view->font_height * 3;
|
||||||
|
|
||||||
|
f32 delta = 9.f * view->font_height;
|
||||||
|
f32 lerp_space_delta = (delta);
|
||||||
|
if (max_target_y > min_target_y){
|
||||||
|
lerp_space_delta /= (max_target_y - min_target_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gui_start_scrollable(target, &v, lerp_space_delta)){
|
||||||
|
view->target_y = lerp(min_target_y, v, max_target_y);
|
||||||
|
|
||||||
|
if (view->target_y < min_target_y) view->target_y = min_target_y;
|
||||||
|
if (view->target_y > max_target_y) view->target_y = max_target_y;
|
||||||
|
|
||||||
|
if (cursor_y > view->target_y + cursor_max_y) cursor_y = view->target_y + cursor_max_y;
|
||||||
|
if (cursor_y < view->target_y - view->scroll_min_limit) cursor_y = view->target_y - view->scroll_min_limit;
|
||||||
|
|
||||||
|
if (cursor_y != old_cursor_y){
|
||||||
|
if (cursor_y > old_cursor_y){
|
||||||
|
cursor_y += view->font_height;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
cursor_y -= view->font_height;
|
||||||
|
}
|
||||||
|
view->cursor = view_compute_cursor_from_xy(view, view->preferred_x, cursor_y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view->scroll_y < min_target_y) view->scroll_y = min_target_y;
|
||||||
|
if (view->scroll_y > max_target_y) view->scroll_y = max_target_y;
|
||||||
|
|
||||||
|
gui_do_file(target);
|
||||||
|
}
|
||||||
|
gui_end_serial_section(target);
|
||||||
|
|
||||||
|
gui_end_overlap(target);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
do_widget(view, target);
|
||||||
|
switch (view->showing_ui){
|
||||||
|
case VUI_Interactive:
|
||||||
|
switch (view->interaction){
|
||||||
|
case IInt_Sys_File_List:
|
||||||
|
{
|
||||||
|
persist String p4c_extension = make_lit_string("p4c");
|
||||||
|
persist String message_loaded = make_lit_string(" LOADED");
|
||||||
|
persist String message_unsaved = make_lit_string(" LOADED *");
|
||||||
|
persist String message_unsynced = make_lit_string(" LOADED !");
|
||||||
|
persist String message_nothing = {};
|
||||||
|
|
||||||
|
char front_name_space[256];
|
||||||
|
String front_name = make_fixed_width_string(front_name_space);
|
||||||
|
|
||||||
|
char full_path_[256];
|
||||||
|
String full_path = make_fixed_width_string(full_path_);
|
||||||
|
|
||||||
|
Absolutes absolutes;
|
||||||
|
|
||||||
|
i32 i, r;
|
||||||
|
Hot_Directory *hdir = &models->hot_directory;
|
||||||
|
File_List *files = &hdir->file_list;
|
||||||
|
File_Info *info = files->infos;
|
||||||
|
Editing_File *file = 0;
|
||||||
|
GUI_id file_option_id;
|
||||||
|
|
||||||
|
get_front_of_directory(&front_name, hdir->string);
|
||||||
|
get_absolutes(front_name, &absolutes, 1, 1);
|
||||||
|
|
||||||
|
get_path_of_directory(&full_path, hdir->string);
|
||||||
|
r = full_path.size;
|
||||||
|
|
||||||
|
String message = {0};
|
||||||
|
String text = {0};
|
||||||
|
switch (view->action){
|
||||||
|
case IAct_Open: message = make_lit_string("Open: "); break;
|
||||||
|
case IAct_Save_As: message = make_lit_string("Save As: "); break;
|
||||||
|
case IAct_New: message = make_lit_string("New: "); break;
|
||||||
|
}
|
||||||
|
gui_do_text_field(target, message, text);
|
||||||
|
|
||||||
|
gui_start_scrollable(target, 0, 3.f);
|
||||||
|
for (i = 0; i < files->count; ++i, ++info){
|
||||||
|
append(&full_path, info->filename);
|
||||||
|
terminate_with_null(&full_path);
|
||||||
|
file = working_set_contains(system, &models->working_set, full_path);
|
||||||
|
full_path.size = r;
|
||||||
|
|
||||||
|
b8 is_folder = (info->folder != 0);
|
||||||
|
b8 name_match = (filename_match(front_name, &absolutes, info->filename, 0) != 0);
|
||||||
|
b8 is_loaded = (file != 0 && file_is_ready(file));
|
||||||
|
|
||||||
|
String message = message_nothing;
|
||||||
|
if (is_loaded){
|
||||||
|
switch (buffer_get_sync(file)){
|
||||||
|
case SYNC_GOOD: message = message_loaded; break;
|
||||||
|
case SYNC_BEHIND_OS: message = message_unsynced; break;
|
||||||
|
case SYNC_UNSAVED: message = message_unsaved; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name_match){
|
||||||
|
file_option_id.id[0] = (u64)(info);
|
||||||
|
if (gui_do_file_option(target, file_option_id, info->filename, is_folder, message)){
|
||||||
|
// TODO(allen): actually perform whatever action we need
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gui_end_top_level(target);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
gui_begin_top_level(target);
|
||||||
|
{
|
||||||
|
gui_begin_overlap(target);
|
||||||
|
{
|
||||||
|
gui_begin_serial_section(target);
|
||||||
|
{
|
||||||
|
view_do_queries(view, target);
|
||||||
|
}
|
||||||
|
gui_end_serial_section(target);
|
||||||
|
|
||||||
|
gui_begin_serial_section(target);
|
||||||
{
|
{
|
||||||
switch (view->showing_ui){
|
switch (view->showing_ui){
|
||||||
case VUI_None:
|
case VUI_None:
|
||||||
gui_do_file(&view->gui_target);
|
{
|
||||||
break;
|
f32 v = unlerp(min_target_y, view->target_y, max_target_y);
|
||||||
|
f32 old_cursor_y = view_get_cursor_y(view);
|
||||||
|
f32 cursor_y = old_cursor_y;
|
||||||
|
|
||||||
|
f32 delta = 9.f * view->font_height;
|
||||||
|
f32 lerp_space_delta = (delta);
|
||||||
|
if (max_target_y > min_target_y){
|
||||||
|
lerp_space_delta /= (max_target_y - min_target_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gui_start_scrollable(target, &v, lerp_space_delta)){
|
||||||
|
view->target_y = lerp(min_target_y, v, max_target_y);
|
||||||
|
|
||||||
|
if (view->target_y < min_target_y) view->target_y = min_target_y;
|
||||||
|
if (view->target_y > max_target_y) view->target_y = max_target_y;
|
||||||
|
|
||||||
|
if (cursor_y >= view->target_y + max_y) cursor_y = view->target_y + max_y;
|
||||||
|
if (cursor_y < view->target_y - view->scroll_min_limit) cursor_y = view->target_y - view->scroll_min_limit;
|
||||||
|
|
||||||
|
if (cursor_y != old_cursor_y){
|
||||||
|
view->cursor = view_compute_cursor_from_xy(view, view->preferred_x, cursor_y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view->scroll_y < min_target_y) view->scroll_y = min_target_y;
|
||||||
|
if (view->scroll_y > max_target_y) view->scroll_y = max_target_y;
|
||||||
|
|
||||||
|
gui_do_file(target);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case VUI_Interactive:
|
||||||
|
switch (view->interaction){
|
||||||
|
case IInt_Sys_File_List:
|
||||||
|
{
|
||||||
|
persist String p4c_extension = make_lit_string("p4c");
|
||||||
|
persist String message_loaded = make_lit_string(" LOADED");
|
||||||
|
persist String message_unsaved = make_lit_string(" LOADED *");
|
||||||
|
persist String message_unsynced = make_lit_string(" LOADED !");
|
||||||
|
persist String message_nothing = {};
|
||||||
|
|
||||||
|
char front_name_space[256];
|
||||||
|
String front_name = make_fixed_width_string(front_name_space);
|
||||||
|
|
||||||
|
char full_path_[256];
|
||||||
|
String full_path = make_fixed_width_string(full_path_);
|
||||||
|
|
||||||
|
Absolutes absolutes;
|
||||||
|
|
||||||
|
i32 i, r;
|
||||||
|
Hot_Directory *hdir = &models->hot_directory;
|
||||||
|
File_List *files = &hdir->file_list;
|
||||||
|
File_Info *info = files->infos;
|
||||||
|
Editing_File *file = 0;
|
||||||
|
GUI_id file_option_id;
|
||||||
|
|
||||||
|
get_front_of_directory(&front_name, hdir->string);
|
||||||
|
get_absolutes(front_name, &absolutes, 1, 1);
|
||||||
|
|
||||||
|
get_path_of_directory(&full_path, hdir->string);
|
||||||
|
r = full_path.size;
|
||||||
|
|
||||||
|
String message = {0};
|
||||||
|
String text = {0};
|
||||||
|
switch (view->action){
|
||||||
|
case IAct_Open: message = make_lit_string("Open: "); break;
|
||||||
|
case IAct_Save_As: message = make_lit_string("Save As: "); break;
|
||||||
|
case IAct_New: message = make_lit_string("New: "); break;
|
||||||
|
}
|
||||||
|
gui_do_text_field(target, message, text);
|
||||||
|
|
||||||
|
gui_start_scrollable(target, 0, 3.f);
|
||||||
|
for (i = 0; i < files->count; ++i, ++info){
|
||||||
|
append(&full_path, info->filename);
|
||||||
|
terminate_with_null(&full_path);
|
||||||
|
file = working_set_contains(system, &models->working_set, full_path);
|
||||||
|
full_path.size = r;
|
||||||
|
|
||||||
|
b8 is_folder = (info->folder != 0);
|
||||||
|
b8 name_match = (filename_match(front_name, &absolutes, info->filename, 0) != 0);
|
||||||
|
b8 is_loaded = (file != 0 && file_is_ready(file));
|
||||||
|
|
||||||
|
String message = message_nothing;
|
||||||
|
if (is_loaded){
|
||||||
|
switch (buffer_get_sync(file)){
|
||||||
|
case SYNC_GOOD: message = message_loaded; break;
|
||||||
|
case SYNC_BEHIND_OS: message = message_unsynced; break;
|
||||||
|
case SYNC_UNSAVED: message = message_unsaved; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name_match){
|
||||||
|
file_option_id.id[0] = (u64)(info);
|
||||||
|
if (gui_do_file_option(target, file_option_id, info->filename, is_folder, message)){
|
||||||
|
// TODO(allen): actually perform whatever action we need
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gui_end_serial_section(&view->gui_target);
|
gui_end_serial_section(target);
|
||||||
}
|
}
|
||||||
gui_end_overlap(&view->gui_target);
|
gui_end_overlap(target);
|
||||||
}
|
}
|
||||||
gui_end_top_level(&view->gui_target);
|
gui_end_top_level(target);
|
||||||
|
#endif
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
@ -3584,18 +3824,21 @@ step_file_view(View *view, b32 is_active){
|
||||||
internal i32
|
internal i32
|
||||||
do_input_file_view(System_Functions *system, Exchange *exchange,
|
do_input_file_view(System_Functions *system, Exchange *exchange,
|
||||||
View *view, i32_Rect rect, b32 is_active, Input_Summary *user_input){
|
View *view, i32_Rect rect, b32 is_active, Input_Summary *user_input){
|
||||||
|
|
||||||
i32 result = 0;
|
i32 result = 0;
|
||||||
|
|
||||||
GUI_Session gui_session;
|
GUI_Session gui_session;
|
||||||
GUI_Header *h;
|
GUI_Header *h;
|
||||||
|
GUI_Target *target = &view->gui_target;
|
||||||
|
|
||||||
gui_session_init(&gui_session, rect, view->font_height);
|
gui_session_init(&gui_session, rect, view->font_height);
|
||||||
|
|
||||||
for (h = (GUI_Header*)view->gui_target.push.base;
|
target->active = {0};
|
||||||
|
|
||||||
|
for (h = (GUI_Header*)target->push.base;
|
||||||
h->type;
|
h->type;
|
||||||
h = NextHeader(h)){
|
h = NextHeader(h)){
|
||||||
if (gui_interpret(&gui_session, h)){
|
if (gui_interpret(target, &gui_session, h)){
|
||||||
switch (h->type){
|
switch (h->type){
|
||||||
case guicom_top_bar: break;
|
case guicom_top_bar: break;
|
||||||
|
|
||||||
|
@ -3611,16 +3854,117 @@ do_input_file_view(System_Functions *system, Exchange *exchange,
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
case guicom_text_field: break;
|
case guicom_text_field: break;
|
||||||
|
|
||||||
|
case guicom_file_option:
|
||||||
|
{
|
||||||
|
GUI_Interactive *b = (GUI_Interactive*)h;
|
||||||
|
i32 mx = user_input->mouse.x;
|
||||||
|
i32 my = user_input->mouse.y;
|
||||||
|
|
||||||
|
if (hit_check(mx, my, gui_session.rect)){
|
||||||
|
target->hover = b->id;
|
||||||
|
if (user_input->mouse.press_l){
|
||||||
|
target->hot = b->id;
|
||||||
|
}
|
||||||
|
if (user_input->mouse.release_l && gui_id_eq(target->hot, b->id)){
|
||||||
|
target->active = b->id;
|
||||||
|
target->hot = {0};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (gui_id_eq(target->hover, b->id)){
|
||||||
|
target->hover = {0};
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case guicom_scrollable_top:
|
||||||
|
{
|
||||||
|
GUI_id id = gui_id_scrollbar_top();
|
||||||
|
i32 mx = user_input->mouse.x;
|
||||||
|
i32 my = user_input->mouse.y;
|
||||||
|
|
||||||
|
if (hit_check(mx, my, gui_session.rect)){
|
||||||
|
target->hover = id;
|
||||||
|
if (user_input->mouse.press_l){
|
||||||
|
target->hot = id;
|
||||||
|
}
|
||||||
|
if (user_input->mouse.release_l && gui_id_eq(target->hot, id)){
|
||||||
|
target->active = gui_id_scrollbar();
|
||||||
|
target->hot = {0};
|
||||||
|
target->scroll_v -= target->scroll_delta;
|
||||||
|
if (target->scroll_v < 0) target->scroll_v = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (gui_id_eq(target->hover, id)){
|
||||||
|
target->hover = {0};
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case guicom_scrollable_slider:
|
||||||
|
{
|
||||||
|
GUI_id id = gui_id_scrollbar_slider();
|
||||||
|
i32 mx = user_input->mouse.x;
|
||||||
|
i32 my = user_input->mouse.y;
|
||||||
|
|
||||||
|
if (hit_check(mx, my, gui_session.rect)){
|
||||||
|
target->hover = id;
|
||||||
|
if (user_input->mouse.press_l){
|
||||||
|
target->hot = id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (gui_id_eq(target->hover, id)){
|
||||||
|
target->hover = {0};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gui_id_eq(target->hot, id)){
|
||||||
|
target->active = gui_id_scrollbar();
|
||||||
|
target->scroll_v = unlerp(gui_session.scroll_top, (f32)my, gui_session.scroll_bottom);
|
||||||
|
if (target->scroll_v < 0) target->scroll_v = 0;
|
||||||
|
if (target->scroll_v > 1) target->scroll_v = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user_input->mouse.wheel != 0){
|
||||||
|
target->active = gui_id_scrollbar();
|
||||||
|
target->scroll_v += user_input->mouse.wheel*target->scroll_delta;
|
||||||
|
if (target->scroll_v < 0) target->scroll_v = 0;
|
||||||
|
if (target->scroll_v > 1) target->scroll_v = 1;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case guicom_scrollable_bottom:
|
||||||
|
{
|
||||||
|
GUI_id id = gui_id_scrollbar_bottom();
|
||||||
|
i32 mx = user_input->mouse.x;
|
||||||
|
i32 my = user_input->mouse.y;
|
||||||
|
|
||||||
|
if (hit_check(mx, my, gui_session.rect)){
|
||||||
|
target->hover = id;
|
||||||
|
if (user_input->mouse.press_l){
|
||||||
|
target->hot = id;
|
||||||
|
}
|
||||||
|
if (user_input->mouse.release_l && gui_id_eq(target->hot, id)){
|
||||||
|
target->active = gui_id_scrollbar();
|
||||||
|
target->hot = {0};
|
||||||
|
target->scroll_v += target->scroll_delta;
|
||||||
|
if (target->scroll_v > 1) target->scroll_v = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (gui_id_eq(target->hover, id)){
|
||||||
|
target->hover = {0};
|
||||||
|
}
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!user_input->mouse.l){
|
||||||
|
target->hot = {0};
|
||||||
|
}
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
Models *models = view->models;
|
Models *models = view->models;
|
||||||
i32 result = 0;
|
i32 result = 0;
|
||||||
|
|
||||||
i32 widget_height = 0;
|
i32 widget_height = 0;
|
||||||
AllowLocal(models);
|
AllowLocal(models);
|
||||||
|
|
||||||
|
@ -3899,14 +4243,14 @@ do_render_text_field(Render_Target *target, View *view, i32_Rect rect, String p,
|
||||||
u32 text2_color = style->main.file_info_style.pop1_color;
|
u32 text2_color = style->main.file_info_style.pop1_color;
|
||||||
|
|
||||||
i32 x = rect.x0;
|
i32 x = rect.x0;
|
||||||
i32 y = rect.y0;
|
i32 y = rect.y0 + 3;
|
||||||
|
|
||||||
i16 font_id = models->global_font.font_id;
|
i16 font_id = models->global_font.font_id;
|
||||||
|
|
||||||
if (target){
|
if (target){
|
||||||
draw_rectangle(target, rect, back_color);
|
draw_rectangle(target, rect, back_color);
|
||||||
x = draw_string(target, font_id, p, x, y + 1, text2_color);
|
x = draw_string(target, font_id, p, x, y, text2_color);
|
||||||
draw_string(target, font_id, t, x, y + 1, text1_color);
|
draw_string(target, font_id, t, x, y, text1_color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3983,6 +4327,46 @@ do_render_file_bar(Render_Target *target, View *view, Editing_File *file, i32_Re
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void
|
||||||
|
draw_fat_option_block(GUI_Target *gui_target, Render_Target *target, View *view, i32_Rect rect, GUI_id id, String text, String pop){
|
||||||
|
Models *models = view->models;
|
||||||
|
Style *style = &models->style;
|
||||||
|
|
||||||
|
i32 active_level = gui_active_level(gui_target, id);
|
||||||
|
i16 font_id = models->global_font.font_id;
|
||||||
|
|
||||||
|
i32_Rect inner = get_inner_rect(rect, 3);
|
||||||
|
|
||||||
|
u32 margin;
|
||||||
|
u32 back = style->main.back_color;
|
||||||
|
u32 text_color = style->main.default_color;
|
||||||
|
u32 pop_color = style->main.special_character_color;
|
||||||
|
|
||||||
|
i32 h = view->font_height;
|
||||||
|
i32 x = inner.x0 + 3;
|
||||||
|
i32 y = inner.y0 + h/2 - 1;
|
||||||
|
|
||||||
|
switch (active_level){
|
||||||
|
case 0:
|
||||||
|
margin = style->main.margin_color;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: case 2:
|
||||||
|
margin = style->main.margin_hover_color;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
margin = style->main.margin_active_color;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_rectangle(target, inner, back);
|
||||||
|
draw_margin(target, rect, inner, margin);
|
||||||
|
|
||||||
|
x = draw_string(target, font_id, text, x, y, text_color);
|
||||||
|
draw_string(target, font_id, pop, x, y, pop_color);
|
||||||
|
}
|
||||||
|
|
||||||
internal i32
|
internal i32
|
||||||
do_render_file_view(System_Functions *system, Exchange *exchange,
|
do_render_file_view(System_Functions *system, Exchange *exchange,
|
||||||
View *view, View *active, i32_Rect rect, b32 is_active,
|
View *view, View *active, i32_Rect rect, b32 is_active,
|
||||||
|
@ -3993,13 +4377,14 @@ do_render_file_view(System_Functions *system, Exchange *exchange,
|
||||||
|
|
||||||
GUI_Session gui_session = {0};
|
GUI_Session gui_session = {0};
|
||||||
GUI_Header *h;
|
GUI_Header *h;
|
||||||
|
GUI_Target *gui_target = &view->gui_target;
|
||||||
|
|
||||||
gui_session_init(&gui_session, rect, view->font_height);
|
gui_session_init(&gui_session, rect, view->font_height);
|
||||||
|
|
||||||
for (h = (GUI_Header*)view->gui_target.push.base;
|
for (h = (GUI_Header*)gui_target->push.base;
|
||||||
h->type;
|
h->type;
|
||||||
h = NextHeader(h)){
|
h = NextHeader(h)){
|
||||||
if (gui_interpret(&gui_session, h)){
|
if (gui_interpret(&view->gui_target, &gui_session, h)){
|
||||||
switch (h->type){
|
switch (h->type){
|
||||||
case guicom_top_bar:
|
case guicom_top_bar:
|
||||||
{
|
{
|
||||||
|
@ -4027,6 +4412,83 @@ do_render_file_view(System_Functions *system, Exchange *exchange,
|
||||||
String t = gui_read_string(&ptr);
|
String t = gui_read_string(&ptr);
|
||||||
do_render_text_field(target, view, gui_session.rect, p, t);
|
do_render_text_field(target, view, gui_session.rect, p, t);
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
case guicom_file_option:
|
||||||
|
{
|
||||||
|
GUI_Interactive *b = (GUI_Interactive*)h;
|
||||||
|
void *ptr = (b + 1);
|
||||||
|
b32 folder = gui_read_integer(&ptr);
|
||||||
|
String f = gui_read_string(&ptr);
|
||||||
|
String m = gui_read_string(&ptr);
|
||||||
|
|
||||||
|
if (folder){
|
||||||
|
append(&f, system->slash);
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_fat_option_block(gui_target, target, view, gui_session.rect, b->id, f, m);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case guicom_scrollable:
|
||||||
|
{
|
||||||
|
Models *models = view->models;
|
||||||
|
Style *style = &models->style;
|
||||||
|
|
||||||
|
u32 back;
|
||||||
|
u32 outline;
|
||||||
|
|
||||||
|
i32_Rect bar = gui_session.rect;
|
||||||
|
|
||||||
|
back = style->main.back_color;
|
||||||
|
if (is_active){
|
||||||
|
outline = style->main.margin_active_color;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
outline = style->main.margin_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_rectangle(target, bar, back);
|
||||||
|
draw_rectangle_outline(target, bar, outline);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case guicom_scrollable_top:
|
||||||
|
case guicom_scrollable_slider:
|
||||||
|
case guicom_scrollable_bottom:
|
||||||
|
{
|
||||||
|
GUI_id id;
|
||||||
|
Models *models = view->models;
|
||||||
|
Style *style = &models->style;
|
||||||
|
|
||||||
|
i32 active_level;
|
||||||
|
|
||||||
|
u32 back;
|
||||||
|
u32 outline;
|
||||||
|
|
||||||
|
i32_Rect box = gui_session.rect;
|
||||||
|
|
||||||
|
switch (h->type){
|
||||||
|
case guicom_scrollable_top: id = gui_id_scrollbar_top(); break;
|
||||||
|
case guicom_scrollable_bottom: id = gui_id_scrollbar_bottom(); break;
|
||||||
|
default: id = gui_id_scrollbar_slider(); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
active_level = gui_active_level(gui_target, id);
|
||||||
|
|
||||||
|
switch (active_level){
|
||||||
|
case 0: back = style->main.back_color; break;
|
||||||
|
case 1: case 2: back = style->main.margin_hover_color; break;
|
||||||
|
default: back = style->main.margin_active_color; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_active){
|
||||||
|
outline = style->main.margin_active_color;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
outline = style->main.margin_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_rectangle(target, box, back);
|
||||||
|
draw_rectangle_outline(target, box, outline);
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
351
4ed_gui.cpp
351
4ed_gui.cpp
|
@ -70,9 +70,19 @@ struct Super_Color{
|
||||||
u32 *out;
|
u32 *out;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct GUI_id{
|
||||||
|
u64 id[1];
|
||||||
|
};
|
||||||
|
|
||||||
struct GUI_Target{
|
struct GUI_Target{
|
||||||
Partition push;
|
Partition push;
|
||||||
b32 show_file;
|
|
||||||
|
GUI_id active;
|
||||||
|
GUI_id hot;
|
||||||
|
GUI_id hover;
|
||||||
|
|
||||||
|
f32 scroll_v;
|
||||||
|
f32 scroll_delta;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GUI_Header{
|
struct GUI_Header{
|
||||||
|
@ -80,6 +90,11 @@ struct GUI_Header{
|
||||||
i32 size;
|
i32 size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct GUI_Interactive{
|
||||||
|
GUI_Header h;
|
||||||
|
GUI_id id;
|
||||||
|
};
|
||||||
|
|
||||||
enum GUI_Command_Type{
|
enum GUI_Command_Type{
|
||||||
guicom_null,
|
guicom_null,
|
||||||
guicom_begin_overlap,
|
guicom_begin_overlap,
|
||||||
|
@ -88,13 +103,50 @@ enum GUI_Command_Type{
|
||||||
guicom_end_serial,
|
guicom_end_serial,
|
||||||
guicom_top_bar,
|
guicom_top_bar,
|
||||||
guicom_file,
|
guicom_file,
|
||||||
guicom_text_field
|
guicom_text_field,
|
||||||
|
guicom_file_option,
|
||||||
|
guicom_scrollable,
|
||||||
|
guicom_scrollable_top,
|
||||||
|
guicom_scrollable_slider,
|
||||||
|
guicom_scrollable_bottom,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
internal b32
|
||||||
|
gui_id_eq(GUI_id id1, GUI_id id2){
|
||||||
|
b32 result = (id1.id[0] == id2.id[0]);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal b32
|
||||||
|
gui_id_is_null(GUI_id id){
|
||||||
|
b32 result = (id.id[0] == 0);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal i32
|
||||||
|
gui_active_level(GUI_Target *target, GUI_id id){
|
||||||
|
i32 level = 0;
|
||||||
|
if (gui_id_eq(target->active, id)){
|
||||||
|
level = 4;
|
||||||
|
}
|
||||||
|
else if (gui_id_eq(target->hot, id)){
|
||||||
|
if (gui_id_eq(target->hover, id)){
|
||||||
|
level = 3;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
level = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (gui_id_eq(target->hover, id) && gui_id_is_null(target->hot)){
|
||||||
|
level = 1;
|
||||||
|
}
|
||||||
|
return(level);
|
||||||
|
}
|
||||||
|
|
||||||
internal void*
|
internal void*
|
||||||
gui_push_command(GUI_Target *target, void *item, i32 size){
|
gui_push_item(GUI_Target *target, void *item, i32 size){
|
||||||
void *dest = partition_allocate(&target->push, size);
|
void *dest = partition_allocate(&target->push, size);
|
||||||
if (dest){
|
if (dest && item){
|
||||||
memcpy(dest, item, size);
|
memcpy(dest, item, size);
|
||||||
}
|
}
|
||||||
return(dest);
|
return(dest);
|
||||||
|
@ -108,13 +160,48 @@ gui_align(GUI_Target *target){
|
||||||
return(ptr);
|
return(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void*
|
||||||
|
gui_push_aligned_item(GUI_Target *target, GUI_Header *h, void *item, i32 size){
|
||||||
|
char *start, *end;
|
||||||
|
start = (char*)partition_allocate(&target->push, size);
|
||||||
|
if (start){
|
||||||
|
memcpy(start, item, size);
|
||||||
|
}
|
||||||
|
end = (char*)gui_align(target);
|
||||||
|
size = (i32)(end - start);
|
||||||
|
h->size += size;
|
||||||
|
return(start);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void*
|
||||||
|
gui_push_item(GUI_Target *target, GUI_Header *h, void *item, i32 size){
|
||||||
|
void *ptr;
|
||||||
|
ptr = (char*)partition_allocate(&target->push, size);
|
||||||
|
if (ptr){
|
||||||
|
memcpy(ptr, item, size);
|
||||||
|
}
|
||||||
|
h->size += size;
|
||||||
|
return(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
internal GUI_Header*
|
internal GUI_Header*
|
||||||
gui_push_simple_command(GUI_Target *target, i32 type){
|
gui_push_simple_command(GUI_Target *target, i32 type){
|
||||||
GUI_Header *result = 0;
|
GUI_Header *result = 0;
|
||||||
GUI_Header item;
|
GUI_Header item;
|
||||||
item.type = type;
|
item.type = type;
|
||||||
item.size = sizeof(item);
|
item.size = sizeof(item);
|
||||||
result = (GUI_Header*)gui_push_command(target, &item, item.size);
|
result = (GUI_Header*)gui_push_item(target, &item, sizeof(item));
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal GUI_Interactive*
|
||||||
|
gui_push_button_command(GUI_Target *target, i32 type, GUI_id id){
|
||||||
|
GUI_Interactive *result = 0;
|
||||||
|
GUI_Interactive item;
|
||||||
|
item.h.type = type;
|
||||||
|
item.h.size = sizeof(item);
|
||||||
|
item.id = id;
|
||||||
|
result = (GUI_Interactive*)gui_push_item(target, &item, sizeof(item));
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,8 +209,20 @@ internal void
|
||||||
gui_push_string(GUI_Target *target, GUI_Header *h, String s){
|
gui_push_string(GUI_Target *target, GUI_Header *h, String s){
|
||||||
u8 *start, *end;
|
u8 *start, *end;
|
||||||
i32 size;
|
i32 size;
|
||||||
start = (u8*)gui_push_command(target, &s.size, sizeof(s.size));
|
start = (u8*)gui_push_item(target, &s.size, sizeof(s.size));
|
||||||
gui_push_command(target, s.str, s.size);
|
gui_push_item(target, s.str, s.size);
|
||||||
|
end = (u8*)gui_align(target);
|
||||||
|
size = (i32)(end - start);
|
||||||
|
h->size += size;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void
|
||||||
|
gui_push_string(GUI_Target *target, GUI_Header *h, String s, i32 extra){
|
||||||
|
u8 *start, *end;
|
||||||
|
i32 size;
|
||||||
|
start = (u8*)gui_push_item(target, &s.size, sizeof(s.size));
|
||||||
|
gui_push_item(target, s.str, s.size);
|
||||||
|
gui_push_item(target, 0, extra);
|
||||||
end = (u8*)gui_align(target);
|
end = (u8*)gui_align(target);
|
||||||
size = (i32)(end - start);
|
size = (i32)(end - start);
|
||||||
h->size += size;
|
h->size += size;
|
||||||
|
@ -131,8 +230,8 @@ gui_push_string(GUI_Target *target, GUI_Header *h, String s){
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
gui_begin_top_level(GUI_Target *target){
|
gui_begin_top_level(GUI_Target *target){
|
||||||
target->show_file = 0;
|
|
||||||
target->push.pos = 0;
|
target->push.pos = 0;
|
||||||
|
target->scroll_delta = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
|
@ -168,34 +267,106 @@ gui_do_top_bar(GUI_Target *target){
|
||||||
internal void
|
internal void
|
||||||
gui_do_file(GUI_Target *target){
|
gui_do_file(GUI_Target *target){
|
||||||
gui_push_simple_command(target, guicom_file);
|
gui_push_simple_command(target, guicom_file);
|
||||||
target->show_file = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
gui_do_text_field(GUI_Target *target, String p, String t){
|
gui_do_text_field(GUI_Target *target, String prompt, String text){
|
||||||
GUI_Header *h = gui_push_simple_command(target, guicom_text_field);
|
GUI_Header *h = gui_push_simple_command(target, guicom_text_field);
|
||||||
gui_push_string(target, h, p);
|
gui_push_string(target, h, prompt);
|
||||||
gui_push_string(target, h, t);
|
gui_push_string(target, h, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal b32
|
||||||
|
gui_do_file_option(GUI_Target *target, GUI_id file_id, String filename, b32 is_folder, String message){
|
||||||
|
b32 result = 0;
|
||||||
|
|
||||||
|
GUI_Interactive *b = gui_push_button_command(target, guicom_file_option, file_id);
|
||||||
|
GUI_Header *h = (GUI_Header*)b;
|
||||||
|
gui_push_item(target, h, &is_folder, sizeof(is_folder));
|
||||||
|
gui_push_string(target, h, filename, 1);
|
||||||
|
gui_push_string(target, h, message);
|
||||||
|
|
||||||
|
if (gui_id_eq(file_id, target->active)){
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal GUI_id
|
||||||
|
gui_id_scrollbar(){
|
||||||
|
GUI_id id;
|
||||||
|
id.id[0] = max_u64;
|
||||||
|
return(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal GUI_id
|
||||||
|
gui_id_scrollbar_top(){
|
||||||
|
GUI_id id;
|
||||||
|
id.id[0] = max_u64 - 1;
|
||||||
|
return(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal GUI_id
|
||||||
|
gui_id_scrollbar_slider(){
|
||||||
|
GUI_id id;
|
||||||
|
id.id[0] = max_u64 - 2;
|
||||||
|
return(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal GUI_id
|
||||||
|
gui_id_scrollbar_bottom(){
|
||||||
|
GUI_id id;
|
||||||
|
id.id[0] = max_u64 - 3;
|
||||||
|
return(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal b32
|
||||||
|
gui_start_scrollable(GUI_Target *target, f32 *v, f32 d){
|
||||||
|
b32 result = 0;
|
||||||
|
GUI_Header *h;
|
||||||
|
|
||||||
|
target->scroll_delta = d;
|
||||||
|
h = gui_push_simple_command(target, guicom_scrollable);
|
||||||
|
if (gui_id_eq(gui_id_scrollbar(), target->active)){
|
||||||
|
if (v) *v = target->scroll_v;
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (v) target->scroll_v = *v;
|
||||||
|
}
|
||||||
|
|
||||||
|
gui_push_simple_command(target, guicom_scrollable_top);
|
||||||
|
gui_push_simple_command(target, guicom_scrollable_slider);
|
||||||
|
gui_push_simple_command(target, guicom_scrollable_bottom);
|
||||||
|
|
||||||
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct GUI_Section{
|
struct GUI_Section{
|
||||||
b32 overlapped;
|
b32 overlapped;
|
||||||
i32 v;
|
i32 max_v, v;
|
||||||
i32 max_v;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GUI_Session{
|
struct GUI_Session{
|
||||||
i32_Rect full_rect;
|
i32_Rect full_rect;
|
||||||
i32_Rect rect;
|
|
||||||
i32_Rect clip_rect;
|
i32_Rect clip_rect;
|
||||||
|
i32_Rect rect;
|
||||||
|
|
||||||
i32 line_height;
|
i32 line_height;
|
||||||
|
i32 scroll_bar_w;
|
||||||
|
b32 is_scrollable;
|
||||||
|
|
||||||
|
i32_Rect scroll_rect;
|
||||||
|
f32 scroll_top, scroll_bottom;
|
||||||
|
|
||||||
GUI_Section sections[64];
|
GUI_Section sections[64];
|
||||||
i32 t;
|
i32 t;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define GUIScrollbarWidth 16
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
gui_session_init(GUI_Session *session, i32_Rect full_rect, i32 line_height){
|
gui_session_init(GUI_Session *session, i32_Rect full_rect, i32 line_height){
|
||||||
GUI_Section *section;
|
GUI_Section *section;
|
||||||
|
@ -203,6 +374,7 @@ gui_session_init(GUI_Session *session, i32_Rect full_rect, i32 line_height){
|
||||||
*session = {0};
|
*session = {0};
|
||||||
session->full_rect = full_rect;
|
session->full_rect = full_rect;
|
||||||
session->line_height = line_height;
|
session->line_height = line_height;
|
||||||
|
session->scroll_bar_w = GUIScrollbarWidth;
|
||||||
|
|
||||||
section = &session->sections[0];
|
section = &session->sections[0];
|
||||||
section->v = full_rect.y0;
|
section->v = full_rect.y0;
|
||||||
|
@ -217,8 +389,69 @@ gui_section_end_item(GUI_Section *section, i32 v){
|
||||||
section->max_v = v;
|
section->max_v = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline i32_Rect
|
||||||
|
gui_layout_top_bottom(GUI_Session *session, i32 y0, i32 y1){
|
||||||
|
i32_Rect rect;
|
||||||
|
i32_Rect full_rect = session->full_rect;
|
||||||
|
rect.y0 = y0;
|
||||||
|
rect.y1 = y1;
|
||||||
|
rect.x0 = full_rect.x0;
|
||||||
|
rect.x1 = full_rect.x1;
|
||||||
|
if (session->is_scrollable){
|
||||||
|
rect.x1 -= session->scroll_bar_w;
|
||||||
|
}
|
||||||
|
return(rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline i32_Rect
|
||||||
|
gui_layout_fixed_h(GUI_Session *session, i32 y, i32 h){
|
||||||
|
i32_Rect rect;
|
||||||
|
rect = gui_layout_top_bottom(session, y, y + h);
|
||||||
|
return(rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void
|
||||||
|
gui_scrollbar_top(i32_Rect bar, i32_Rect *top){
|
||||||
|
i32 w = (bar.x1 - bar.x0);
|
||||||
|
|
||||||
|
top->x0 = bar.x0;
|
||||||
|
top->x1 = bar.x1;
|
||||||
|
top->y0 = bar.y0;
|
||||||
|
top->y1 = top->y0 + w;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void
|
||||||
|
gui_scrollbar_slider(i32_Rect bar, i32_Rect *slider, f32 s, f32 *min_out, f32 *max_out){
|
||||||
|
i32 w = (bar.x1 - bar.x0);
|
||||||
|
i32 min, max, pos;
|
||||||
|
|
||||||
|
slider->x0 = bar.x0;
|
||||||
|
slider->x1 = bar.x1;
|
||||||
|
|
||||||
|
min = bar.y0 + w + w/2;
|
||||||
|
max = bar.y1 - w - w/2;
|
||||||
|
|
||||||
|
pos = lerp(min, s, max);
|
||||||
|
|
||||||
|
slider->y0 = pos - w/2;
|
||||||
|
slider->y1 = slider->y0 + w;
|
||||||
|
|
||||||
|
*min_out = (f32)min;
|
||||||
|
*max_out = (f32)max;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void
|
||||||
|
gui_scrollbar_bottom(i32_Rect bar, i32_Rect *bottom){
|
||||||
|
i32 w = (bar.x1 - bar.x0);
|
||||||
|
|
||||||
|
bottom->x0 = bar.x0;
|
||||||
|
bottom->x1 = bar.x1;
|
||||||
|
bottom->y1 = bar.y1;
|
||||||
|
bottom->y0 = bottom->y1 - w;
|
||||||
|
}
|
||||||
|
|
||||||
internal b32
|
internal b32
|
||||||
gui_interpret(GUI_Session *session, GUI_Header *h){
|
gui_interpret(GUI_Target *target, GUI_Session *session, GUI_Header *h){
|
||||||
GUI_Section *section = 0;
|
GUI_Section *section = 0;
|
||||||
GUI_Section *new_section = 0;
|
GUI_Section *new_section = 0;
|
||||||
GUI_Section *prev_section = 0;
|
GUI_Section *prev_section = 0;
|
||||||
|
@ -242,6 +475,7 @@ gui_interpret(GUI_Session *session, GUI_Header *h){
|
||||||
new_section = &session->sections[session->t];
|
new_section = &session->sections[session->t];
|
||||||
new_section->overlapped = 1;
|
new_section->overlapped = 1;
|
||||||
new_section->v = y;
|
new_section->v = y;
|
||||||
|
new_section->max_v = y;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case guicom_end_overlap:
|
case guicom_end_overlap:
|
||||||
|
@ -258,6 +492,7 @@ gui_interpret(GUI_Session *session, GUI_Header *h){
|
||||||
new_section = &session->sections[session->t];
|
new_section = &session->sections[session->t];
|
||||||
new_section->overlapped = 0;
|
new_section->overlapped = 0;
|
||||||
new_section->v = y;
|
new_section->v = y;
|
||||||
|
new_section->max_v = y;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case guicom_end_serial:
|
case guicom_end_serial:
|
||||||
|
@ -270,33 +505,64 @@ gui_interpret(GUI_Session *session, GUI_Header *h){
|
||||||
|
|
||||||
case guicom_top_bar:
|
case guicom_top_bar:
|
||||||
give_to_user = 1;
|
give_to_user = 1;
|
||||||
rect.y0 = y;
|
rect = gui_layout_fixed_h(session, y, session->line_height + 2);
|
||||||
rect.y1 = rect.y0 + session->line_height + 2;
|
|
||||||
rect.x0 = session->full_rect.x0;
|
|
||||||
rect.x1 = session->full_rect.x1;
|
|
||||||
end_v = rect.y1;
|
end_v = rect.y1;
|
||||||
end_section = section;
|
end_section = section;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case guicom_file:
|
case guicom_file:
|
||||||
give_to_user = 1;
|
give_to_user = 1;
|
||||||
rect.y0 = y;
|
rect = gui_layout_top_bottom(session, y, session->full_rect.y1);
|
||||||
rect.y1 = session->full_rect.y1;
|
|
||||||
rect.x0 = session->full_rect.x0;
|
|
||||||
rect.x1 = session->full_rect.x1;
|
|
||||||
end_v = rect.y1;
|
end_v = rect.y1;
|
||||||
end_section = section;
|
end_section = section;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case guicom_text_field:
|
case guicom_text_field:
|
||||||
give_to_user = 1;
|
give_to_user = 1;
|
||||||
rect.y0 = y;
|
rect = gui_layout_fixed_h(session, y, session->line_height + 2);
|
||||||
rect.y1 = rect.y0 + session->line_height + 2;
|
|
||||||
rect.x0 = session->full_rect.x0;
|
|
||||||
rect.x1 = session->full_rect.x1;
|
|
||||||
end_v = rect.y1;
|
end_v = rect.y1;
|
||||||
end_section = section;
|
end_section = section;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case guicom_file_option:
|
||||||
|
give_to_user = 1;
|
||||||
|
rect = gui_layout_fixed_h(session, y, session->line_height * 2);
|
||||||
|
end_v = rect.y1;
|
||||||
|
end_section = section;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case guicom_scrollable:
|
||||||
|
Assert(session->is_scrollable == 0);
|
||||||
|
Assert(!section->overlapped);
|
||||||
|
give_to_user = 1;
|
||||||
|
rect.x1 = session->full_rect.x1;
|
||||||
|
rect.x0 = rect.x1 - session->scroll_bar_w;
|
||||||
|
rect.y0 = y;
|
||||||
|
rect.y1 = session->full_rect.y1;
|
||||||
|
session->scroll_rect = rect;
|
||||||
|
session->is_scrollable = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case guicom_scrollable_top:
|
||||||
|
Assert(session->is_scrollable);
|
||||||
|
Assert(!section->overlapped);
|
||||||
|
give_to_user = 1;
|
||||||
|
gui_scrollbar_top(session->scroll_rect, &rect);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case guicom_scrollable_slider:
|
||||||
|
Assert(session->is_scrollable);
|
||||||
|
Assert(!section->overlapped);
|
||||||
|
give_to_user = 1;
|
||||||
|
gui_scrollbar_slider(session->scroll_rect, &rect, target->scroll_v, &session->scroll_top, &session->scroll_bottom);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case guicom_scrollable_bottom:
|
||||||
|
Assert(session->is_scrollable);
|
||||||
|
Assert(!section->overlapped);
|
||||||
|
give_to_user = 1;
|
||||||
|
gui_scrollbar_bottom(session->scroll_rect, &rect);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (give_to_user){
|
if (give_to_user){
|
||||||
|
@ -307,21 +573,19 @@ gui_interpret(GUI_Session *session, GUI_Header *h){
|
||||||
for (i = 0; i <= session->t; ++i, ++section){
|
for (i = 0; i <= session->t; ++i, ++section){
|
||||||
if (section->overlapped){
|
if (section->overlapped){
|
||||||
max_v = Max(max_v, section->max_v);
|
max_v = Max(max_v, section->max_v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
session->rect = rect;
|
session->rect = rect;
|
||||||
|
|
||||||
if (rect.y0 < max_v){
|
if (rect.y0 < max_v){
|
||||||
rect.y0 = max_v;
|
rect.y0 = max_v;
|
||||||
}
|
}
|
||||||
|
|
||||||
session->clip_rect = rect;
|
session->clip_rect = rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (end_section){
|
if (end_section){
|
||||||
gui_section_end_item(end_section, end_v);
|
gui_section_end_item(end_section, end_v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(give_to_user);
|
return(give_to_user);
|
||||||
|
@ -329,6 +593,22 @@ gui_interpret(GUI_Session *session, GUI_Header *h){
|
||||||
|
|
||||||
#define NextHeader(h) ((GUI_Header*)((char*)(h) + (h)->size))
|
#define NextHeader(h) ((GUI_Header*)((char*)(h) + (h)->size))
|
||||||
|
|
||||||
|
internal i32
|
||||||
|
gui_read_integer(void **ptr){
|
||||||
|
i32 result;
|
||||||
|
result = *(i32*)*ptr;
|
||||||
|
*ptr = ((char*)*ptr) + 4;
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal f32
|
||||||
|
gui_read_float(void **ptr){
|
||||||
|
f32 result;
|
||||||
|
result = *(f32*)*ptr;
|
||||||
|
*ptr = ((char*)*ptr) + 4;
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
internal String
|
internal String
|
||||||
gui_read_string(void **ptr){
|
gui_read_string(void **ptr){
|
||||||
String result;
|
String result;
|
||||||
|
@ -344,6 +624,7 @@ gui_read_string(void **ptr){
|
||||||
size = (i32)(end - start);
|
size = (i32)(end - start);
|
||||||
size = (size + 7) & (~7);
|
size = (size + 7) & (~7);
|
||||||
|
|
||||||
|
result.memory_size = size;
|
||||||
*ptr = ((char*)start) + size;
|
*ptr = ((char*)start) + size;
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
|
|
256
4ed_gui_old.cpp
256
4ed_gui_old.cpp
|
@ -155,20 +155,20 @@ app_single_file_input_step(System_Functions *system,
|
||||||
mode.fast_folder_select = fast_folder_select;
|
mode.fast_folder_select = fast_folder_select;
|
||||||
mode.try_to_match = try_to_match;
|
mode.try_to_match = try_to_match;
|
||||||
mode.case_sensitive = case_sensitive;
|
mode.case_sensitive = case_sensitive;
|
||||||
return app_single_line_input_core(system, working_set, key, mode);
|
return app_single_line_input_core(system, working_set, key, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Single_Line_Input_Step
|
inline Single_Line_Input_Step
|
||||||
app_single_number_input_step(System_Functions *system, Key_Event_Data key, String *string){
|
app_single_number_input_step(System_Functions *system, Key_Event_Data key, String *string){
|
||||||
Single_Line_Input_Step result = {};
|
Single_Line_Input_Step result = {};
|
||||||
Single_Line_Mode mode = {};
|
Single_Line_Mode mode = {};
|
||||||
mode.type = SINGLE_LINE_STRING;
|
mode.type = SINGLE_LINE_STRING;
|
||||||
mode.string = string;
|
mode.string = string;
|
||||||
|
|
||||||
char c = (char)key.character;
|
char c = (char)key.character;
|
||||||
if (c == 0 || c == '\n' || char_is_numeric(c))
|
if (c == 0 || c == '\n' || char_is_numeric(c))
|
||||||
result = app_single_line_input_core(system, 0, key, mode);
|
result = app_single_line_input_core(system, 0, key, mode);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Widget_ID{
|
struct Widget_ID{
|
||||||
|
@ -192,13 +192,13 @@ struct UI_State{
|
||||||
Key_Summary *keys;
|
Key_Summary *keys;
|
||||||
Working_Set *working_set;
|
Working_Set *working_set;
|
||||||
i16 font_id;
|
i16 font_id;
|
||||||
|
|
||||||
Widget_ID selected, hover, hot;
|
Widget_ID selected, hover, hot;
|
||||||
b32 activate_me;
|
b32 activate_me;
|
||||||
b32 redraw;
|
b32 redraw;
|
||||||
b32 input_stage;
|
b32 input_stage;
|
||||||
i32 sub_id1_change;
|
i32 sub_id1_change;
|
||||||
|
|
||||||
f32 height, view_y;
|
f32 height, view_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -249,7 +249,7 @@ struct UI_Layout{
|
||||||
i32 row_count;
|
i32 row_count;
|
||||||
i32 row_item_width;
|
i32 row_item_width;
|
||||||
i32 row_max_item_height;
|
i32 row_max_item_height;
|
||||||
|
|
||||||
i32_Rect rect;
|
i32_Rect rect;
|
||||||
i32 x, y;
|
i32 x, y;
|
||||||
};
|
};
|
||||||
|
@ -346,15 +346,15 @@ get_colors(UI_State *state, u32 *back, u32 *fore, Widget_ID wid, UI_Style style)
|
||||||
b32 hot = is_hot(state, wid);
|
b32 hot = is_hot(state, wid);
|
||||||
i32 level = hot + hover;
|
i32 level = hot + hover;
|
||||||
switch (level){
|
switch (level){
|
||||||
case 2:
|
case 2:
|
||||||
*back = style.bright;
|
*back = style.bright;
|
||||||
*fore = style.dark;
|
*fore = style.dark;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
*back = style.dim;
|
*back = style.dim;
|
||||||
*fore = style.bright;
|
*fore = style.bright;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
*back = style.dark;
|
*back = style.dark;
|
||||||
*fore = style.bright;
|
*fore = style.bright;
|
||||||
break;
|
break;
|
||||||
|
@ -367,13 +367,13 @@ get_pop_color(UI_State *state, u32 *pop, Widget_ID wid, UI_Style style){
|
||||||
b32 hot = is_hot(state, wid);
|
b32 hot = is_hot(state, wid);
|
||||||
i32 level = hot + hover;
|
i32 level = hot + hover;
|
||||||
switch (level){
|
switch (level){
|
||||||
case 2:
|
case 2:
|
||||||
*pop = style.pop1;
|
*pop = style.pop1;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
*pop = style.pop1;
|
*pop = style.pop1;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
*pop = style.pop1;
|
*pop = style.pop1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -382,7 +382,7 @@ get_pop_color(UI_State *state, u32 *pop, Widget_ID wid, UI_Style style){
|
||||||
internal UI_State
|
internal UI_State
|
||||||
ui_state_init(UI_State *state_in, Render_Target *target, Input_Summary *user_input,
|
ui_state_init(UI_State *state_in, Render_Target *target, Input_Summary *user_input,
|
||||||
Style *style, i16 font_id, Font_Set *font_set, Working_Set *working_set, b32 input_stage){
|
Style *style, i16 font_id, Font_Set *font_set, Working_Set *working_set, b32 input_stage){
|
||||||
|
|
||||||
UI_State state = {};
|
UI_State state = {};
|
||||||
state.target = target;
|
state.target = target;
|
||||||
state.style = style;
|
state.style = style;
|
||||||
|
@ -414,18 +414,18 @@ ui_state_match(UI_State a, UI_State b){
|
||||||
|
|
||||||
internal b32
|
internal b32
|
||||||
ui_finish_frame(UI_State *persist_state, UI_State *state, UI_Layout *layout, i32_Rect rect,
|
ui_finish_frame(UI_State *persist_state, UI_State *state, UI_Layout *layout, i32_Rect rect,
|
||||||
b32 do_wheel, b32 *did_activation){
|
b32 do_wheel, b32 *did_activation){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
f32 h = layout->y + persist_state->view_y - rect.y0;
|
f32 h = layout->y + persist_state->view_y - rect.y0;
|
||||||
f32 max_y = h - (rect.y1 - rect.y0);
|
f32 max_y = h - (rect.y1 - rect.y0);
|
||||||
|
|
||||||
persist_state->height = h;
|
persist_state->height = h;
|
||||||
persist_state->view_y = state->view_y;
|
persist_state->view_y = state->view_y;
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
Mouse_State *mouse = state->mouse;
|
Mouse_State *mouse = state->mouse;
|
||||||
Font_Set *font_set = state->font_set;
|
Font_Set *font_set = state->font_set;
|
||||||
|
|
||||||
if (mouse->wheel != 0 && do_wheel){
|
if (mouse->wheel != 0 && do_wheel){
|
||||||
i32 height = get_font_info(font_set, state->font_id)->height;
|
i32 height = get_font_info(font_set, state->font_id)->height;
|
||||||
persist_state->view_y += mouse->wheel*height;
|
persist_state->view_y += mouse->wheel*height;
|
||||||
|
@ -440,14 +440,14 @@ ui_finish_frame(UI_State *persist_state, UI_State *state, UI_Layout *layout, i32
|
||||||
if (!mouse->l && !mouse->r){
|
if (!mouse->l && !mouse->r){
|
||||||
state->hot = {};
|
state->hot = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ui_state_match(*persist_state, *state) || state->redraw){
|
if (!ui_state_match(*persist_state, *state) || state->redraw){
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
*persist_state = *state;
|
*persist_state = *state;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (persist_state->view_y >= max_y) persist_state->view_y = max_y;
|
if (persist_state->view_y >= max_y) persist_state->view_y = max_y;
|
||||||
if (persist_state->view_y < 0) persist_state->view_y = 0;
|
if (persist_state->view_y < 0) persist_state->view_y = 0;
|
||||||
|
|
||||||
|
@ -487,7 +487,7 @@ ui_do_subdivided_button_input(UI_State *state, i32_Rect rect, i32 parts, Widget_
|
||||||
sub_rect.y0 = rect.y0;
|
sub_rect.y0 = rect.y0;
|
||||||
sub_rect.y1 = rect.y1;
|
sub_rect.y1 = rect.y1;
|
||||||
x1 = (real32)rect.x0;
|
x1 = (real32)rect.x0;
|
||||||
|
|
||||||
for (i32 i = 0; i < parts; ++i){
|
for (i32 i = 0; i < parts; ++i){
|
||||||
x0 = x1;
|
x0 = x1;
|
||||||
x1 = x1 + sub_width;
|
x1 = x1 + sub_width;
|
||||||
|
@ -499,14 +499,14 @@ ui_do_subdivided_button_input(UI_State *state, i32_Rect rect, i32 parts, Widget_
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal real32
|
internal real32
|
||||||
ui_do_vscroll_input(UI_State *state, i32_Rect top, i32_Rect bottom, i32_Rect slider,
|
ui_do_vscroll_input(UI_State *state, i32_Rect top, i32_Rect bottom, i32_Rect slider,
|
||||||
Widget_ID id, real32 val, real32 step_amount,
|
Widget_ID id, real32 val, real32 step_amount,
|
||||||
real32 smin, real32 smax, real32 vmin, real32 vmax){
|
real32 smin, real32 smax, real32 vmin, real32 vmax){
|
||||||
Mouse_State *mouse = state->mouse;
|
Mouse_State *mouse = state->mouse;
|
||||||
i32 mx = mouse->x;
|
i32 mx = mouse->x;
|
||||||
i32 my = mouse->y;
|
i32 my = mouse->y;
|
||||||
|
@ -569,21 +569,21 @@ ui_do_text_field_input(UI_State *state, String *str){
|
||||||
|
|
||||||
internal b32
|
internal b32
|
||||||
ui_do_file_field_input(System_Functions *system, UI_State *state,
|
ui_do_file_field_input(System_Functions *system, UI_State *state,
|
||||||
Hot_Directory *hot_dir, b32 try_to_match, b32 case_sensitive){
|
Hot_Directory *hot_dir, b32 try_to_match, b32 case_sensitive){
|
||||||
Key_Event_Data key;
|
Key_Event_Data key;
|
||||||
Single_Line_Input_Step step;
|
Single_Line_Input_Step step;
|
||||||
String *str = &hot_dir->string;
|
String *str = &hot_dir->string;
|
||||||
Key_Summary *keys = state->keys;
|
Key_Summary *keys = state->keys;
|
||||||
i32 key_i;
|
i32 key_i;
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
|
|
||||||
terminate_with_null(str);
|
terminate_with_null(str);
|
||||||
|
|
||||||
for (key_i = 0; key_i < keys->count; ++key_i){
|
for (key_i = 0; key_i < keys->count; ++key_i){
|
||||||
key = get_single_key(keys, key_i);
|
key = get_single_key(keys, key_i);
|
||||||
step =
|
step =
|
||||||
app_single_file_input_step(system, state->working_set, key, str,
|
app_single_file_input_step(system, state->working_set, key, str,
|
||||||
hot_dir, 1, try_to_match, case_sensitive);
|
hot_dir, 1, try_to_match, case_sensitive);
|
||||||
if ((step.hit_newline || step.hit_ctrl_newline) && !step.no_file_match) result = 1;
|
if ((step.hit_newline || step.hit_ctrl_newline) && !step.no_file_match) result = 1;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -591,7 +591,7 @@ ui_do_file_field_input(System_Functions *system, UI_State *state,
|
||||||
|
|
||||||
internal b32
|
internal b32
|
||||||
ui_do_line_field_input(System_Functions *system,
|
ui_do_line_field_input(System_Functions *system,
|
||||||
UI_State *state, String *string){
|
UI_State *state, String *string){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
Key_Summary *keys = state->keys;
|
Key_Summary *keys = state->keys;
|
||||||
for (i32 key_i = 0; key_i < keys->count; ++key_i){
|
for (i32 key_i = 0; key_i < keys->count; ++key_i){
|
||||||
|
@ -606,7 +606,7 @@ ui_do_line_field_input(System_Functions *system,
|
||||||
|
|
||||||
internal b32
|
internal b32
|
||||||
ui_do_slider_input(UI_State *state, i32_Rect rect, Widget_ID wid,
|
ui_do_slider_input(UI_State *state, i32_Rect rect, Widget_ID wid,
|
||||||
real32 min, real32 max, real32 *v){
|
real32 min, real32 max, real32 *v){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
ui_do_button_input(state, rect, wid, 0);
|
ui_do_button_input(state, rect, wid, 0);
|
||||||
Mouse_State *mouse = state->mouse;
|
Mouse_State *mouse = state->mouse;
|
||||||
|
@ -624,7 +624,7 @@ do_text_field(Widget_ID wid, UI_State *state, UI_Layout *layout, String prompt,
|
||||||
i32 character_h = get_font_info(state->font_set, state->font_id)->height;
|
i32 character_h = get_font_info(state->font_set, state->font_id)->height;
|
||||||
|
|
||||||
i32_Rect rect = layout_rect(layout, character_h);
|
i32_Rect rect = layout_rect(layout, character_h);
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
ui_do_button_input(state, rect, wid, 1);
|
ui_do_button_input(state, rect, wid, 1);
|
||||||
if (is_selected(state, wid)){
|
if (is_selected(state, wid)){
|
||||||
|
@ -639,9 +639,9 @@ do_text_field(Widget_ID wid, UI_State *state, UI_Layout *layout, String prompt,
|
||||||
u32 back, fore, prompt_pop;
|
u32 back, fore, prompt_pop;
|
||||||
get_colors(state, &back, &fore, wid, ui_style);
|
get_colors(state, &back, &fore, wid, ui_style);
|
||||||
get_pop_color(state, &prompt_pop, wid, ui_style);
|
get_pop_color(state, &prompt_pop, wid, ui_style);
|
||||||
|
|
||||||
draw_rectangle(target, rect, back);
|
draw_rectangle(target, rect, back);
|
||||||
|
|
||||||
i32 x = draw_string(target, state->font_id, prompt, rect.x0, rect.y0 + 1, prompt_pop);
|
i32 x = draw_string(target, state->font_id, prompt, rect.x0, rect.y0 + 1, prompt_pop);
|
||||||
draw_string(target, state->font_id, dest, x, rect.y0 + 1, ui_style.base);
|
draw_string(target, state->font_id, dest, x, rect.y0 + 1, ui_style.base);
|
||||||
}
|
}
|
||||||
|
@ -651,7 +651,7 @@ do_text_field(Widget_ID wid, UI_State *state, UI_Layout *layout, String prompt,
|
||||||
|
|
||||||
internal b32
|
internal b32
|
||||||
do_button(i32 id, UI_State *state, UI_Layout *layout, char *text, i32 height_mult,
|
do_button(i32 id, UI_State *state, UI_Layout *layout, char *text, i32 height_mult,
|
||||||
b32 is_toggle = 0, b32 on = 0){
|
b32 is_toggle = 0, b32 on = 0){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
i16 font_id = state->font_id;
|
i16 font_id = state->font_id;
|
||||||
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
||||||
|
@ -662,9 +662,9 @@ do_button(i32 id, UI_State *state, UI_Layout *layout, char *text, i32 height_mul
|
||||||
btn_rect.x0 += 2;
|
btn_rect.x0 += 2;
|
||||||
btn_rect.x1 -= 2;
|
btn_rect.x1 -= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget_ID wid = make_id(state, id);
|
Widget_ID wid = make_id(state, id);
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
if (ui_do_button_input(state, btn_rect, wid, 0)){
|
if (ui_do_button_input(state, btn_rect, wid, 0)){
|
||||||
result = 1;
|
result = 1;
|
||||||
|
@ -676,7 +676,7 @@ do_button(i32 id, UI_State *state, UI_Layout *layout, char *text, i32 height_mul
|
||||||
u32 back, fore, outline;
|
u32 back, fore, outline;
|
||||||
outline = ui_style.bright;
|
outline = ui_style.bright;
|
||||||
get_colors(state, &back, &fore, wid, ui_style);
|
get_colors(state, &back, &fore, wid, ui_style);
|
||||||
|
|
||||||
draw_rectangle(target, btn_rect, back);
|
draw_rectangle(target, btn_rect, back);
|
||||||
draw_rectangle_outline(target, btn_rect, outline);
|
draw_rectangle_outline(target, btn_rect, outline);
|
||||||
real32 text_width = font_string_width(target, font_id, text);
|
real32 text_width = font_string_width(target, font_id, text);
|
||||||
|
@ -684,17 +684,17 @@ do_button(i32 id, UI_State *state, UI_Layout *layout, char *text, i32 height_mul
|
||||||
i32 box_height = btn_rect.y1 - btn_rect.y0;
|
i32 box_height = btn_rect.y1 - btn_rect.y0;
|
||||||
i32 x_pos = TRUNC32(btn_rect.x0 + (box_width - text_width)*.5f);
|
i32 x_pos = TRUNC32(btn_rect.x0 + (box_width - text_width)*.5f);
|
||||||
draw_string(target, font_id, text, x_pos, btn_rect.y0 + (box_height - character_h) / 2, fore);
|
draw_string(target, font_id, text, x_pos, btn_rect.y0 + (box_height - character_h) / 2, fore);
|
||||||
|
|
||||||
if (is_toggle){
|
if (is_toggle){
|
||||||
i32_Rect on_box = get_inner_rect(btn_rect, character_h/2);
|
i32_Rect on_box = get_inner_rect(btn_rect, character_h/2);
|
||||||
on_box.x1 = on_box.x0 + (on_box.y1 - on_box.y0);
|
on_box.x1 = on_box.x0 + (on_box.y1 - on_box.y0);
|
||||||
|
|
||||||
if (on) draw_rectangle(target, on_box, fore);
|
if (on) draw_rectangle(target, on_box, fore);
|
||||||
else draw_rectangle(target, on_box, back);
|
else draw_rectangle(target, on_box, back);
|
||||||
draw_rectangle_outline(target, on_box, fore);
|
draw_rectangle_outline(target, on_box, fore);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -703,15 +703,15 @@ do_undo_slider(Widget_ID wid, UI_State *state, UI_Layout *layout, i32 max, i32 v
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
i16 font_id = state->font_id;
|
i16 font_id = state->font_id;
|
||||||
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
||||||
|
|
||||||
i32_Rect containing_rect = layout_rect(layout, character_h);
|
i32_Rect containing_rect = layout_rect(layout, character_h);
|
||||||
|
|
||||||
i32_Rect click_rect;
|
i32_Rect click_rect;
|
||||||
click_rect.x0 = containing_rect.x0 + character_h - 1;
|
click_rect.x0 = containing_rect.x0 + character_h - 1;
|
||||||
click_rect.x1 = containing_rect.x1 - character_h + 1;
|
click_rect.x1 = containing_rect.x1 - character_h + 1;
|
||||||
click_rect.y0 = containing_rect.y0 + 2;
|
click_rect.y0 = containing_rect.y0 + 2;
|
||||||
click_rect.y1 = containing_rect.y1 - 2;
|
click_rect.y1 = containing_rect.y1 - 2;
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
real32 l;
|
real32 l;
|
||||||
if (ui_do_slider_input(state, click_rect, wid, (real32)click_rect.x0, (real32)click_rect.x1, &l)){
|
if (ui_do_slider_input(state, click_rect, wid, (real32)click_rect.x0, (real32)click_rect.x1, &l)){
|
||||||
|
@ -725,18 +725,18 @@ do_undo_slider(Widget_ID wid, UI_State *state, UI_Layout *layout, i32 max, i32 v
|
||||||
Render_Target *target = state->target;
|
Render_Target *target = state->target;
|
||||||
if (max > 0){
|
if (max > 0){
|
||||||
UI_Style ui_style = get_ui_style_upper(state->style);
|
UI_Style ui_style = get_ui_style_upper(state->style);
|
||||||
|
|
||||||
real32 L = unlerp(0.f, (real32)v, (real32)max);
|
real32 L = unlerp(0.f, (real32)v, (real32)max);
|
||||||
i32 x = FLOOR32(lerp((real32)click_rect.x0, L, (real32)click_rect.x1));
|
i32 x = FLOOR32(lerp((real32)click_rect.x0, L, (real32)click_rect.x1));
|
||||||
|
|
||||||
i32 bar_top = ((click_rect.y0 + click_rect.y1) >> 1) - 1;
|
i32 bar_top = ((click_rect.y0 + click_rect.y1) >> 1) - 1;
|
||||||
i32 bar_bottom = bar_top + 2;
|
i32 bar_bottom = bar_top + 2;
|
||||||
|
|
||||||
bool32 show_bar = 1;
|
bool32 show_bar = 1;
|
||||||
real32 tick_step = (click_rect.x1 - click_rect.x0) / (real32)max;
|
real32 tick_step = (click_rect.x1 - click_rect.x0) / (real32)max;
|
||||||
bool32 show_ticks = 1;
|
bool32 show_ticks = 1;
|
||||||
if (tick_step <= 5.f) show_ticks = 0;
|
if (tick_step <= 5.f) show_ticks = 0;
|
||||||
|
|
||||||
if (undo == 0){
|
if (undo == 0){
|
||||||
if (show_bar){
|
if (show_bar){
|
||||||
i32_Rect slider_rect;
|
i32_Rect slider_rect;
|
||||||
|
@ -744,27 +744,27 @@ do_undo_slider(Widget_ID wid, UI_State *state, UI_Layout *layout, i32 max, i32 v
|
||||||
slider_rect.x1 = x;
|
slider_rect.x1 = x;
|
||||||
slider_rect.y0 = bar_top;
|
slider_rect.y0 = bar_top;
|
||||||
slider_rect.y1 = bar_bottom;
|
slider_rect.y1 = bar_bottom;
|
||||||
|
|
||||||
draw_rectangle(target, slider_rect, ui_style.dim);
|
draw_rectangle(target, slider_rect, ui_style.dim);
|
||||||
|
|
||||||
slider_rect.x0 = x;
|
slider_rect.x0 = x;
|
||||||
slider_rect.x1 = click_rect.x1;
|
slider_rect.x1 = click_rect.x1;
|
||||||
draw_rectangle(target, slider_rect, ui_style.pop1);
|
draw_rectangle(target, slider_rect, ui_style.pop1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (show_ticks){
|
if (show_ticks){
|
||||||
f32_Rect tick;
|
f32_Rect tick;
|
||||||
tick.x0 = (real32)click_rect.x0 - 1;
|
tick.x0 = (real32)click_rect.x0 - 1;
|
||||||
tick.x1 = (real32)click_rect.x0 + 1;
|
tick.x1 = (real32)click_rect.x0 + 1;
|
||||||
tick.y0 = (real32)bar_top - 3;
|
tick.y0 = (real32)bar_top - 3;
|
||||||
tick.y1 = (real32)bar_bottom + 3;
|
tick.y1 = (real32)bar_bottom + 3;
|
||||||
|
|
||||||
for (i32 i = 0; i < v; ++i){
|
for (i32 i = 0; i < v; ++i){
|
||||||
draw_rectangle(target, tick, ui_style.dim);
|
draw_rectangle(target, tick, ui_style.dim);
|
||||||
tick.x0 += tick_step;
|
tick.x0 += tick_step;
|
||||||
tick.x1 += tick_step;
|
tick.x1 += tick_step;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i32 i = v; i <= max; ++i){
|
for (i32 i = v; i <= max; ++i){
|
||||||
draw_rectangle(target, tick, ui_style.pop1);
|
draw_rectangle(target, tick, ui_style.pop1);
|
||||||
tick.x0 += tick_step;
|
tick.x0 += tick_step;
|
||||||
|
@ -778,16 +778,16 @@ do_undo_slider(Widget_ID wid, UI_State *state, UI_Layout *layout, i32 max, i32 v
|
||||||
slider_rect.x0 = click_rect.x0;
|
slider_rect.x0 = click_rect.x0;
|
||||||
slider_rect.y0 = bar_top;
|
slider_rect.y0 = bar_top;
|
||||||
slider_rect.y1 = bar_bottom;
|
slider_rect.y1 = bar_bottom;
|
||||||
|
|
||||||
Edit_Step *history = undo->history.edits;
|
Edit_Step *history = undo->history.edits;
|
||||||
i32 block_count = undo->history_block_count;
|
i32 block_count = undo->history_block_count;
|
||||||
Edit_Step *step = history;
|
Edit_Step *step = history;
|
||||||
for (i32 i = 0; i < block_count; ++i){
|
for (i32 i = 0; i < block_count; ++i){
|
||||||
u32 color;
|
u32 color;
|
||||||
if (step->type == ED_REDO ||
|
if (step->type == ED_REDO ||
|
||||||
step->type == ED_UNDO) color = ui_style.pop1;
|
step->type == ED_UNDO) color = ui_style.pop1;
|
||||||
else color = ui_style.dim;
|
else color = ui_style.dim;
|
||||||
|
|
||||||
real32 L;
|
real32 L;
|
||||||
if (i + 1 == block_count){
|
if (i + 1 == block_count){
|
||||||
L = 1.f;
|
L = 1.f;
|
||||||
|
@ -797,15 +797,15 @@ do_undo_slider(Widget_ID wid, UI_State *state, UI_Layout *layout, i32 max, i32 v
|
||||||
}
|
}
|
||||||
if (L > 1.f) L = 1.f;
|
if (L > 1.f) L = 1.f;
|
||||||
i32 x = FLOOR32(lerp((real32)click_rect.x0, L, (real32)click_rect.x1));
|
i32 x = FLOOR32(lerp((real32)click_rect.x0, L, (real32)click_rect.x1));
|
||||||
|
|
||||||
slider_rect.x1 = x;
|
slider_rect.x1 = x;
|
||||||
draw_rectangle(target, slider_rect, color);
|
draw_rectangle(target, slider_rect, color);
|
||||||
slider_rect.x0 = slider_rect.x1;
|
slider_rect.x0 = slider_rect.x1;
|
||||||
|
|
||||||
if (L == 1.f) break;
|
if (L == 1.f) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (show_ticks){
|
if (show_ticks){
|
||||||
f32_Rect tick;
|
f32_Rect tick;
|
||||||
tick.x0 = (real32)click_rect.x0 - 1;
|
tick.x0 = (real32)click_rect.x0 - 1;
|
||||||
|
@ -819,7 +819,7 @@ do_undo_slider(Widget_ID wid, UI_State *state, UI_Layout *layout, i32 max, i32 v
|
||||||
if (i != max){
|
if (i != max){
|
||||||
if (history[i].type == ED_REDO) color = ui_style.pop1;
|
if (history[i].type == ED_REDO) color = ui_style.pop1;
|
||||||
else if (history[i].type == ED_UNDO ||
|
else if (history[i].type == ED_UNDO ||
|
||||||
history[i].type == ED_NORMAL) color = ui_style.pop2;
|
history[i].type == ED_NORMAL) color = ui_style.pop2;
|
||||||
else color = ui_style.dim;
|
else color = ui_style.dim;
|
||||||
}
|
}
|
||||||
draw_rectangle(target, tick, color);
|
draw_rectangle(target, tick, color);
|
||||||
|
@ -828,17 +828,17 @@ do_undo_slider(Widget_ID wid, UI_State *state, UI_Layout *layout, i32 max, i32 v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
i32_Rect slider_handle;
|
i32_Rect slider_handle;
|
||||||
slider_handle.x0 = x - 2;
|
slider_handle.x0 = x - 2;
|
||||||
slider_handle.x1 = x + 2;
|
slider_handle.x1 = x + 2;
|
||||||
slider_handle.y0 = click_rect.y0;
|
slider_handle.y0 = click_rect.y0;
|
||||||
slider_handle.y1 = click_rect.y1;
|
slider_handle.y1 = click_rect.y1;
|
||||||
|
|
||||||
draw_rectangle(target, slider_handle, ui_style.bright);
|
draw_rectangle(target, slider_handle, ui_style.bright);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -848,7 +848,7 @@ do_label(UI_State *state, UI_Layout *layout, char *text, int text_size, f32 heig
|
||||||
i16 font_id = state->font_id;
|
i16 font_id = state->font_id;
|
||||||
i32 line_height = get_font_info(state->font_set, font_id)->height;
|
i32 line_height = get_font_info(state->font_set, font_id)->height;
|
||||||
i32_Rect label = layout_rect(layout, FLOOR32(line_height * height));
|
i32_Rect label = layout_rect(layout, FLOOR32(line_height * height));
|
||||||
|
|
||||||
if (!state->input_stage){
|
if (!state->input_stage){
|
||||||
Render_Target *target = state->target;
|
Render_Target *target = state->target;
|
||||||
u32 back = style->main.margin_color;
|
u32 back = style->main.margin_color;
|
||||||
|
@ -858,7 +858,7 @@ do_label(UI_State *state, UI_Layout *layout, char *text, int text_size, f32 heig
|
||||||
|
|
||||||
String textstr = make_string(text, text_size);
|
String textstr = make_string(text, text_size);
|
||||||
draw_string(target, font_id, textstr, label.x0,
|
draw_string(target, font_id, textstr, label.x0,
|
||||||
label.y0 + (height - line_height)/2, fore);
|
label.y0 + (height - line_height)/2, fore);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -872,65 +872,65 @@ do_scroll_bar(UI_State *state, i32_Rect rect){
|
||||||
i32 id = 1;
|
i32 id = 1;
|
||||||
i32 w = (rect.x1 - rect.x0);
|
i32 w = (rect.x1 - rect.x0);
|
||||||
i32 h = (rect.y1 - rect.y0);
|
i32 h = (rect.y1 - rect.y0);
|
||||||
|
|
||||||
i32_Rect top_arrow, bottom_arrow;
|
i32_Rect top_arrow, bottom_arrow;
|
||||||
top_arrow.x0 = rect.x0;
|
top_arrow.x0 = rect.x0;
|
||||||
top_arrow.x1 = rect.x1;
|
top_arrow.x1 = rect.x1;
|
||||||
top_arrow.y0 = rect.y0;
|
top_arrow.y0 = rect.y0;
|
||||||
top_arrow.y1 = top_arrow.y0 + w;
|
top_arrow.y1 = top_arrow.y0 + w;
|
||||||
|
|
||||||
bottom_arrow.x0 = rect.x0;
|
bottom_arrow.x0 = rect.x0;
|
||||||
bottom_arrow.x1 = rect.x1;
|
bottom_arrow.x1 = rect.x1;
|
||||||
bottom_arrow.y1 = rect.y1;
|
bottom_arrow.y1 = rect.y1;
|
||||||
bottom_arrow.y0 = bottom_arrow.y1 - w;
|
bottom_arrow.y0 = bottom_arrow.y1 - w;
|
||||||
|
|
||||||
f32 space_h = (f32)(bottom_arrow.y0 - top_arrow.y1);
|
f32 space_h = (f32)(bottom_arrow.y0 - top_arrow.y1);
|
||||||
if (space_h <= w) return;
|
if (space_h <= w) return;
|
||||||
|
|
||||||
i32 slider_h = w;
|
i32 slider_h = w;
|
||||||
|
|
||||||
f32 view_hmin = 0;
|
f32 view_hmin = 0;
|
||||||
f32 view_hmax = state->height - h;
|
f32 view_hmax = state->height - h;
|
||||||
f32 L = unlerp(view_hmin, state->view_y, view_hmax);
|
f32 L = unlerp(view_hmin, state->view_y, view_hmax);
|
||||||
|
|
||||||
f32 slider_hmin = (f32)top_arrow.y1;
|
f32 slider_hmin = (f32)top_arrow.y1;
|
||||||
f32 slider_hmax = (f32)bottom_arrow.y0 - slider_h;
|
f32 slider_hmax = (f32)bottom_arrow.y0 - slider_h;
|
||||||
f32 S = lerp(slider_hmin, L, slider_hmax);
|
f32 S = lerp(slider_hmin, L, slider_hmax);
|
||||||
|
|
||||||
i32_Rect slider;
|
i32_Rect slider;
|
||||||
slider.x0 = rect.x0;
|
slider.x0 = rect.x0;
|
||||||
slider.x1 = rect.x1;
|
slider.x1 = rect.x1;
|
||||||
slider.y0 = FLOOR32(S);
|
slider.y0 = FLOOR32(S);
|
||||||
slider.y1 = slider.y0 + slider_h;
|
slider.y1 = slider.y0 + slider_h;
|
||||||
|
|
||||||
Widget_ID wid = make_id(state, id);
|
Widget_ID wid = make_id(state, id);
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
state->view_y =
|
state->view_y =
|
||||||
ui_do_vscroll_input(state, top_arrow, bottom_arrow, slider, wid, state->view_y,
|
ui_do_vscroll_input(state, top_arrow, bottom_arrow, slider, wid, state->view_y,
|
||||||
(f32)(get_font_info(state->font_set, state->font_id)->height),
|
(f32)(get_font_info(state->font_set, state->font_id)->height),
|
||||||
slider_hmin, slider_hmax, view_hmin, view_hmax);
|
slider_hmin, slider_hmax, view_hmin, view_hmax);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
Render_Target *target = state->target;
|
Render_Target *target = state->target;
|
||||||
|
|
||||||
f32 x0, y0, x1, y1, x2, y2;
|
f32 x0, y0, x1, y1, x2, y2;
|
||||||
f32 w_1_2 = w*.5f;
|
f32 w_1_2 = w*.5f;
|
||||||
f32 w_1_3 = w*.333333f;
|
f32 w_1_3 = w*.333333f;
|
||||||
f32 w_2_3 = w*.666667f;
|
f32 w_2_3 = w*.666667f;
|
||||||
|
|
||||||
|
|
||||||
UI_Style ui_style = get_ui_style(state->style);
|
UI_Style ui_style = get_ui_style(state->style);
|
||||||
u32 outline, back, fore;
|
u32 outline, back, fore;
|
||||||
|
|
||||||
outline = ui_style.bright;
|
outline = ui_style.bright;
|
||||||
|
|
||||||
wid.sub_id2 = 0;
|
wid.sub_id2 = 0;
|
||||||
|
|
||||||
x0 = (w_1_2 + top_arrow.x0);
|
x0 = (w_1_2 + top_arrow.x0);
|
||||||
x1 = (w_1_3 + top_arrow.x0);
|
x1 = (w_1_3 + top_arrow.x0);
|
||||||
x2 = (w_2_3 + top_arrow.x0);
|
x2 = (w_2_3 + top_arrow.x0);
|
||||||
|
|
||||||
++wid.sub_id2;
|
++wid.sub_id2;
|
||||||
y0 = (w_1_3 + top_arrow.y0);
|
y0 = (w_1_3 + top_arrow.y0);
|
||||||
y1 = (w_2_3 + top_arrow.y0);
|
y1 = (w_2_3 + top_arrow.y0);
|
||||||
|
@ -938,7 +938,7 @@ do_scroll_bar(UI_State *state, i32_Rect rect){
|
||||||
get_colors(state, &back, &fore, wid, ui_style);
|
get_colors(state, &back, &fore, wid, ui_style);
|
||||||
draw_rectangle(target, top_arrow, back);
|
draw_rectangle(target, top_arrow, back);
|
||||||
draw_rectangle_outline(target, top_arrow, outline);
|
draw_rectangle_outline(target, top_arrow, outline);
|
||||||
|
|
||||||
++wid.sub_id2;
|
++wid.sub_id2;
|
||||||
y0 = (w_2_3 + bottom_arrow.y0);
|
y0 = (w_2_3 + bottom_arrow.y0);
|
||||||
y1 = (w_1_3 + bottom_arrow.y0);
|
y1 = (w_1_3 + bottom_arrow.y0);
|
||||||
|
@ -946,19 +946,19 @@ do_scroll_bar(UI_State *state, i32_Rect rect){
|
||||||
get_colors(state, &back, &fore, wid, ui_style);
|
get_colors(state, &back, &fore, wid, ui_style);
|
||||||
draw_rectangle(target, bottom_arrow, back);
|
draw_rectangle(target, bottom_arrow, back);
|
||||||
draw_rectangle_outline(target, bottom_arrow, outline);
|
draw_rectangle_outline(target, bottom_arrow, outline);
|
||||||
|
|
||||||
++wid.sub_id2;
|
++wid.sub_id2;
|
||||||
get_colors(state, &back, &fore, wid, ui_style);
|
get_colors(state, &back, &fore, wid, ui_style);
|
||||||
draw_rectangle(target, slider, back);
|
draw_rectangle(target, slider, back);
|
||||||
draw_rectangle_outline(target, slider, outline);
|
draw_rectangle_outline(target, slider, outline);
|
||||||
|
|
||||||
draw_rectangle_outline(target, rect, outline);
|
draw_rectangle_outline(target, rect, outline);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
draw_gradient_slider(Render_Target *target, Vec4 base, i32 channel,
|
draw_gradient_slider(Render_Target *target, Vec4 base, i32 channel,
|
||||||
i32 steps, f32 top, f32_Rect slider, b32 hsla){
|
i32 steps, f32 top, f32_Rect slider, b32 hsla){
|
||||||
Vec4 low, high;
|
Vec4 low, high;
|
||||||
f32 *lowv, *highv;
|
f32 *lowv, *highv;
|
||||||
f32 x;
|
f32 x;
|
||||||
|
@ -966,14 +966,14 @@ draw_gradient_slider(Render_Target *target, Vec4 base, i32 channel,
|
||||||
f32 x_step;
|
f32 x_step;
|
||||||
f32 v_step;
|
f32 v_step;
|
||||||
f32 m;
|
f32 m;
|
||||||
|
|
||||||
x = (real32)slider.x0;
|
x = (real32)slider.x0;
|
||||||
x_step = (real32)(slider.x1 - slider.x0) / steps;
|
x_step = (real32)(slider.x1 - slider.x0) / steps;
|
||||||
v_step = top / steps;
|
v_step = top / steps;
|
||||||
m = 1.f / top;
|
m = 1.f / top;
|
||||||
lowv = &low.v[channel];
|
lowv = &low.v[channel];
|
||||||
highv = &high.v[channel];
|
highv = &high.v[channel];
|
||||||
|
|
||||||
if (hsla){
|
if (hsla){
|
||||||
for (i32 i = 0; i < steps; ++i){
|
for (i32 i = 0; i < steps; ++i){
|
||||||
low = high = base;
|
low = high = base;
|
||||||
|
@ -983,7 +983,7 @@ draw_gradient_slider(Render_Target *target, Vec4 base, i32 channel,
|
||||||
*highv *= m;
|
*highv *= m;
|
||||||
low = hsla_to_rgba(low);
|
low = hsla_to_rgba(low);
|
||||||
high = hsla_to_rgba(high);
|
high = hsla_to_rgba(high);
|
||||||
|
|
||||||
next_x = x + x_step;
|
next_x = x + x_step;
|
||||||
draw_gradient_2corner_clipped(
|
draw_gradient_2corner_clipped(
|
||||||
target, x, slider.y0, next_x, slider.y1,
|
target, x, slider.y0, next_x, slider.y1,
|
||||||
|
@ -998,7 +998,7 @@ draw_gradient_slider(Render_Target *target, Vec4 base, i32 channel,
|
||||||
*highv = *lowv + v_step;
|
*highv = *lowv + v_step;
|
||||||
*lowv *= m;
|
*lowv *= m;
|
||||||
*highv *= m;
|
*highv *= m;
|
||||||
|
|
||||||
next_x = x + x_step;
|
next_x = x + x_step;
|
||||||
draw_gradient_2corner_clipped(
|
draw_gradient_2corner_clipped(
|
||||||
target, x, slider.y0, next_x, slider.y1,
|
target, x, slider.y0, next_x, slider.y1,
|
||||||
|
@ -1022,7 +1022,7 @@ draw_rgb_slider(Render_Target *target, Vec4 base, i32 channel,
|
||||||
|
|
||||||
internal b32
|
internal b32
|
||||||
do_main_file_box(System_Functions *system, UI_State *state, UI_Layout *layout,
|
do_main_file_box(System_Functions *system, UI_State *state, UI_Layout *layout,
|
||||||
Hot_Directory *hot_directory, b32 try_to_match, b32 case_sensitive, char *end){
|
Hot_Directory *hot_directory, b32 try_to_match, b32 case_sensitive, char *end){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
Style *style = state->style;
|
Style *style = state->style;
|
||||||
String *string = &hot_directory->string;
|
String *string = &hot_directory->string;
|
||||||
|
@ -1030,7 +1030,7 @@ do_main_file_box(System_Functions *system, UI_State *state, UI_Layout *layout,
|
||||||
i16 font_id = state->font_id;
|
i16 font_id = state->font_id;
|
||||||
i32 line_height = get_font_info(state->font_set, font_id)->height;
|
i32 line_height = get_font_info(state->font_set, font_id)->height;
|
||||||
i32_Rect box = layout_rect(layout, line_height + 2);
|
i32_Rect box = layout_rect(layout, line_height + 2);
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
if (ui_do_file_field_input(system, state, hot_directory, try_to_match, case_sensitive)){
|
if (ui_do_file_field_input(system, state, hot_directory, try_to_match, case_sensitive)){
|
||||||
result = 1;
|
result = 1;
|
||||||
|
@ -1046,7 +1046,7 @@ do_main_file_box(System_Functions *system, UI_State *state, UI_Layout *layout,
|
||||||
x = draw_string(target, font_id, string->str, x, box.y0, fore);
|
x = draw_string(target, font_id, string->str, x, box.y0, fore);
|
||||||
if (end) draw_string(target, font_id, end, x, box.y0, special);
|
if (end) draw_string(target, font_id, end, x, box.y0, special);
|
||||||
}
|
}
|
||||||
|
|
||||||
layout->y = box.y1;
|
layout->y = box.y1;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1055,11 +1055,11 @@ internal b32
|
||||||
do_main_string_box(System_Functions *system, UI_State *state, UI_Layout *layout, String *string){
|
do_main_string_box(System_Functions *system, UI_State *state, UI_Layout *layout, String *string){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
Style *style = state->style;
|
Style *style = state->style;
|
||||||
|
|
||||||
i16 font_id = state->font_id;
|
i16 font_id = state->font_id;
|
||||||
i32 line_height = get_font_info(state->font_set, font_id)->height;
|
i32 line_height = get_font_info(state->font_set, font_id)->height;
|
||||||
i32_Rect box = layout_rect(layout, line_height + 2);
|
i32_Rect box = layout_rect(layout, line_height + 2);
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
if (ui_do_line_field_input(system, state, string)){
|
if (ui_do_line_field_input(system, state, string)){
|
||||||
result = 1;
|
result = 1;
|
||||||
|
@ -1073,7 +1073,7 @@ do_main_string_box(System_Functions *system, UI_State *state, UI_Layout *layout,
|
||||||
i32 x = box.x0;
|
i32 x = box.x0;
|
||||||
x = draw_string(target, font_id, string->str, x, box.y0, fore);
|
x = draw_string(target, font_id, string->str, x, box.y0, fore);
|
||||||
}
|
}
|
||||||
|
|
||||||
layout->y = box.y1;
|
layout->y = box.y1;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1082,13 +1082,13 @@ internal b32
|
||||||
do_list_option(i32 id, UI_State *state, UI_Layout *layout, String text){
|
do_list_option(i32 id, UI_State *state, UI_Layout *layout, String text){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
Style *style = state->style;
|
Style *style = state->style;
|
||||||
|
|
||||||
i16 font_id = state->font_id;
|
i16 font_id = state->font_id;
|
||||||
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
||||||
|
|
||||||
i32_Rect box = layout_rect(layout, character_h*2);
|
i32_Rect box = layout_rect(layout, character_h*2);
|
||||||
Widget_ID wid = make_id(state, id);
|
Widget_ID wid = make_id(state, id);
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
if (ui_do_button_input(state, box, wid, 0)){
|
if (ui_do_button_input(state, box, wid, 0)){
|
||||||
result = 1;
|
result = 1;
|
||||||
|
@ -1103,13 +1103,13 @@ do_list_option(i32 id, UI_State *state, UI_Layout *layout, String text){
|
||||||
pop = style->main.file_info_style.pop2_color;
|
pop = style->main.file_info_style.pop2_color;
|
||||||
if (is_hover(state, wid)) outline = style->main.margin_active_color;
|
if (is_hover(state, wid)) outline = style->main.margin_active_color;
|
||||||
else outline = style->main.margin_color;
|
else outline = style->main.margin_color;
|
||||||
|
|
||||||
draw_rectangle(target, inner, back);
|
draw_rectangle(target, inner, back);
|
||||||
i32 x = inner.x0, y = box.y0 + character_h/2;
|
i32 x = inner.x0, y = box.y0 + character_h/2;
|
||||||
x = draw_string(target, font_id, text, x, y, fore);
|
x = draw_string(target, font_id, text, x, y, fore);
|
||||||
draw_margin(target, box, inner, outline);
|
draw_margin(target, box, inner, outline);
|
||||||
}
|
}
|
||||||
|
|
||||||
layout->y = box.y1;
|
layout->y = box.y1;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1118,13 +1118,13 @@ internal b32
|
||||||
do_checkbox_list_option(i32 id, UI_State *state, UI_Layout *layout, String text, b32 is_on){
|
do_checkbox_list_option(i32 id, UI_State *state, UI_Layout *layout, String text, b32 is_on){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
Style *style = state->style;
|
Style *style = state->style;
|
||||||
|
|
||||||
i16 font_id = state->font_id;
|
i16 font_id = state->font_id;
|
||||||
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
||||||
|
|
||||||
i32_Rect box = layout_rect(layout, character_h*2);
|
i32_Rect box = layout_rect(layout, character_h*2);
|
||||||
Widget_ID wid = make_id(state, id);
|
Widget_ID wid = make_id(state, id);
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
if (ui_do_button_input(state, box, wid, 0)){
|
if (ui_do_button_input(state, box, wid, 0)){
|
||||||
result = 1;
|
result = 1;
|
||||||
|
@ -1140,21 +1140,21 @@ do_checkbox_list_option(i32 id, UI_State *state, UI_Layout *layout, String text,
|
||||||
if (is_hover(state, wid)) outline = style->main.margin_active_color;
|
if (is_hover(state, wid)) outline = style->main.margin_active_color;
|
||||||
else outline = style->main.margin_color;
|
else outline = style->main.margin_color;
|
||||||
box_color = style->main.margin_active_color;
|
box_color = style->main.margin_active_color;
|
||||||
|
|
||||||
draw_rectangle(target, inner, back);
|
draw_rectangle(target, inner, back);
|
||||||
|
|
||||||
i32_Rect square;
|
i32_Rect square;
|
||||||
square = get_inner_rect(inner, character_h/3);
|
square = get_inner_rect(inner, character_h/3);
|
||||||
square.x1 = square.x0 + (square.y1 - square.y0);
|
square.x1 = square.x0 + (square.y1 - square.y0);
|
||||||
if (is_on) draw_rectangle(target, square, box_color);
|
if (is_on) draw_rectangle(target, square, box_color);
|
||||||
else draw_margin(target, square, 1, box_color);
|
else draw_margin(target, square, 1, box_color);
|
||||||
|
|
||||||
i32 x = square.x1 + 3;
|
i32 x = square.x1 + 3;
|
||||||
i32 y = box.y0 + character_h/2;
|
i32 y = box.y0 + character_h/2;
|
||||||
x = draw_string(target, font_id, text, x, y, fore);
|
x = draw_string(target, font_id, text, x, y, fore);
|
||||||
draw_margin(target, box, inner, outline);
|
draw_margin(target, box, inner, outline);
|
||||||
}
|
}
|
||||||
|
|
||||||
layout->y = box.y1;
|
layout->y = box.y1;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1167,10 +1167,10 @@ do_file_option(i32 id, UI_State *state, UI_Layout *layout, String filename, b32
|
||||||
i16 font_id = state->font_id;
|
i16 font_id = state->font_id;
|
||||||
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
i32 character_h = get_font_info(state->font_set, font_id)->height;
|
||||||
char slash_buf[2] = { slash, 0 };
|
char slash_buf[2] = { slash, 0 };
|
||||||
|
|
||||||
i32_Rect box = layout_rect(layout, character_h*2);
|
i32_Rect box = layout_rect(layout, character_h*2);
|
||||||
Widget_ID wid = make_id(state, id);
|
Widget_ID wid = make_id(state, id);
|
||||||
|
|
||||||
if (state->input_stage){
|
if (state->input_stage){
|
||||||
if (ui_do_button_input(state, box, wid, 0)){
|
if (ui_do_button_input(state, box, wid, 0)){
|
||||||
result = 1;
|
result = 1;
|
||||||
|
@ -1185,7 +1185,7 @@ do_file_option(i32 id, UI_State *state, UI_Layout *layout, String filename, b32
|
||||||
pop = style->main.file_info_style.pop2_color;
|
pop = style->main.file_info_style.pop2_color;
|
||||||
if (is_hover(state, wid)) outline = style->main.margin_active_color;
|
if (is_hover(state, wid)) outline = style->main.margin_active_color;
|
||||||
else outline = style->main.margin_color;
|
else outline = style->main.margin_color;
|
||||||
|
|
||||||
draw_rectangle(target, inner, back);
|
draw_rectangle(target, inner, back);
|
||||||
i32 x = inner.x0, y = box.y0 + character_h/2;
|
i32 x = inner.x0, y = box.y0 + character_h/2;
|
||||||
x = draw_string(target, font_id, filename, x, y, fore);
|
x = draw_string(target, font_id, filename, x, y, fore);
|
||||||
|
@ -1193,7 +1193,7 @@ do_file_option(i32 id, UI_State *state, UI_Layout *layout, String filename, b32
|
||||||
draw_string(target, font_id, extra, x, y, pop);
|
draw_string(target, font_id, extra, x, y, pop);
|
||||||
draw_margin(target, box, inner, outline);
|
draw_margin(target, box, inner, outline);
|
||||||
}
|
}
|
||||||
|
|
||||||
layout->y = box.y1;
|
layout->y = box.y1;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1215,45 +1215,45 @@ do_file_list_box(System_Functions *system, UI_State *state, UI_Layout *layout,
|
||||||
persist String message_unsaved = make_lit_string(" LOADED *");
|
persist String message_unsaved = make_lit_string(" LOADED *");
|
||||||
persist String message_unsynced = make_lit_string(" LOADED !");
|
persist String message_unsynced = make_lit_string(" LOADED !");
|
||||||
persist String message_nothing = {};
|
persist String message_nothing = {};
|
||||||
|
|
||||||
char front_name_space[256];
|
char front_name_space[256];
|
||||||
String front_name = make_fixed_width_string(front_name_space);
|
String front_name = make_fixed_width_string(front_name_space);
|
||||||
get_front_of_directory(&front_name, hot_dir->string);
|
get_front_of_directory(&front_name, hot_dir->string);
|
||||||
|
|
||||||
Absolutes absolutes;
|
Absolutes absolutes;
|
||||||
get_absolutes(front_name, &absolutes, 1, 1);
|
get_absolutes(front_name, &absolutes, 1, 1);
|
||||||
|
|
||||||
char full_path_[256];
|
char full_path_[256];
|
||||||
String full_path = make_fixed_width_string(full_path_);
|
String full_path = make_fixed_width_string(full_path_);
|
||||||
get_path_of_directory(&full_path, hot_dir->string);
|
get_path_of_directory(&full_path, hot_dir->string);
|
||||||
i32 restore_size = full_path.size;
|
i32 restore_size = full_path.size;
|
||||||
|
|
||||||
i32 i;
|
i32 i;
|
||||||
File_Info *info, *end;
|
File_Info *info, *end;
|
||||||
end = files->infos + files->count;
|
end = files->infos + files->count;
|
||||||
for (info = files->infos, i = 0; info != end; ++info, ++i){
|
for (info = files->infos, i = 0; info != end; ++info, ++i){
|
||||||
String filename = info->filename;
|
String filename = info->filename;
|
||||||
|
|
||||||
append(&full_path, filename);
|
append(&full_path, filename);
|
||||||
terminate_with_null(&full_path);
|
terminate_with_null(&full_path);
|
||||||
|
|
||||||
Editing_File *file = working_set_contains(system, state->working_set, full_path);
|
Editing_File *file = working_set_contains(system, state->working_set, full_path);
|
||||||
full_path.size = restore_size;
|
full_path.size = restore_size;
|
||||||
|
|
||||||
b8 is_folder = (info->folder != 0);
|
b8 is_folder = (info->folder != 0);
|
||||||
b8 ext_match = (match(file_extension(filename), p4c_extension) != 0);
|
b8 ext_match = (match(file_extension(filename), p4c_extension) != 0);
|
||||||
b8 name_match = (filename_match(front_name, &absolutes, filename, case_sensitive) != 0);
|
b8 name_match = (filename_match(front_name, &absolutes, filename, case_sensitive) != 0);
|
||||||
b8 is_loaded = (file != 0 && file_is_ready(file));
|
b8 is_loaded = (file != 0 && file_is_ready(file));
|
||||||
|
|
||||||
String message = message_nothing;
|
String message = message_nothing;
|
||||||
if (is_loaded){
|
if (is_loaded){
|
||||||
switch (buffer_get_sync(file)){
|
switch (buffer_get_sync(file)){
|
||||||
case SYNC_GOOD: message = message_loaded; break;
|
case SYNC_GOOD: message = message_loaded; break;
|
||||||
case SYNC_BEHIND_OS: message = message_unsynced; break;
|
case SYNC_BEHIND_OS: message = message_unsynced; break;
|
||||||
case SYNC_UNSAVED: message = message_unsaved; break;
|
case SYNC_UNSAVED: message = message_unsaved; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((is_folder || !has_filter || ext_match) && name_match){
|
if ((is_folder || !has_filter || ext_match) && name_match){
|
||||||
if (do_file_option(100+i, state, layout, filename, is_folder, message, system->slash)){
|
if (do_file_option(100+i, state, layout, filename, is_folder, message, system->slash)){
|
||||||
result = 1;
|
result = 1;
|
||||||
|
@ -1271,13 +1271,13 @@ do_file_list_box(System_Functions *system, UI_State *state, UI_Layout *layout,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal b32
|
internal b32
|
||||||
do_live_file_list_box(System_Functions *system, UI_State *state, UI_Layout *layout,
|
do_live_file_list_box(System_Functions *system, UI_State *state, UI_Layout *layout,
|
||||||
Working_Set *working_set, String *string, b32 *selected){
|
Working_Set *working_set, String *string, b32 *selected){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
|
|
||||||
if (do_main_string_box(system, state, layout, string)){
|
if (do_main_string_box(system, state, layout, string)){
|
||||||
|
|
37
4ed_math.cpp
37
4ed_math.cpp
|
@ -590,33 +590,42 @@ invert(Matrix2 m){
|
||||||
* Lerps, Clamps, Thresholds, Etc
|
* Lerps, Clamps, Thresholds, Etc
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline real32
|
inline f32
|
||||||
lerp(real32 a, real32 t, real32 b){
|
lerp(f32 a, f32 t, f32 b){
|
||||||
return a + (b-a)*t;
|
return(a + (b-a)*t);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline i32
|
||||||
|
lerp(i32 a, f32 t, i32 b){
|
||||||
|
return ((i32)(lerp((f32)a, t, (f32)b)));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Vec2
|
inline Vec2
|
||||||
lerp(Vec2 a, real32 t, Vec2 b){
|
lerp(Vec2 a, f32 t, Vec2 b){
|
||||||
return a + (b-a)*t;
|
return(a + (b-a)*t);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Vec3
|
inline Vec3
|
||||||
lerp(Vec3 a, real32 t, Vec3 b){
|
lerp(Vec3 a, f32 t, Vec3 b){
|
||||||
return a + (b-a)*t;
|
return(a + (b-a)*t);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Vec4
|
inline Vec4
|
||||||
lerp(Vec4 a, real32 t, Vec4 b){
|
lerp(Vec4 a, f32 t, Vec4 b){
|
||||||
return a + (b-a)*t;
|
return(a + (b-a)*t);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline real32
|
inline f32
|
||||||
unlerp(real32 a, real32 x, real32 b){
|
unlerp(f32 a, f32 x, f32 b){
|
||||||
return (x - a) / (b - a);
|
f32 r = x;
|
||||||
|
if (b > a){
|
||||||
|
r = (x - a) / (b - a);
|
||||||
|
}
|
||||||
|
return(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline real32
|
inline f32
|
||||||
clamp(real32 a, real32 n, real32 z){
|
clamp(f32 a, f32 n, f32 z){
|
||||||
return (n<a)?(a):((n>z)?(z):n);
|
return (n<a)?(a):((n>z)?(z):n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,60 +43,5 @@ struct Style_Library{
|
||||||
i32 count, max;
|
i32 count, max;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
|
||||||
struct Style_File_Format{
|
|
||||||
i32 name_size;
|
|
||||||
char name[24];
|
|
||||||
|
|
||||||
i32 color_specifier_count;
|
|
||||||
};
|
|
||||||
|
|
||||||
internal b32
|
|
||||||
style_library_add(Style_Library *library, Style *style){
|
|
||||||
b32 result = 0;
|
|
||||||
i32 count = library->count;
|
|
||||||
String my_name = style->name;
|
|
||||||
Style *ostyle = library->styles;
|
|
||||||
Style *out = 0;
|
|
||||||
// TODO(allen): hashtable for name lookup?
|
|
||||||
for (i32 i = 0; i < count; ++i, ++ostyle){
|
|
||||||
if (match(my_name, ostyle->name)){
|
|
||||||
out = ostyle;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!out && count < library->max){
|
|
||||||
out = library->styles + library->count++;
|
|
||||||
}
|
|
||||||
if (out){
|
|
||||||
style_copy(out, style);
|
|
||||||
result = 1;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal Style_File_Format*
|
|
||||||
style_format_for_file(Font_Set *set, Style *style, Style_File_Format *out){
|
|
||||||
out->name_size = style->name.size;
|
|
||||||
memcpy(out->name, style->name.str, ArrayCount(out->name));
|
|
||||||
|
|
||||||
Style_Color_Specifier *spec = (Style_Color_Specifier*)(out + 1);
|
|
||||||
i32 count = 0;
|
|
||||||
|
|
||||||
for (u32 i = 0; i < Stag_Count; ++i){
|
|
||||||
u32 *color = style_index_by_tag(style, i);
|
|
||||||
if (color){
|
|
||||||
spec->tag = i;
|
|
||||||
spec->color = *color;
|
|
||||||
++count;
|
|
||||||
++spec;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out->color_specifier_count = count;
|
|
||||||
|
|
||||||
return (Style_File_Format*)spec;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// BOTTOM
|
// BOTTOM
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,11 @@
|
||||||
|
|
||||||
// TOP
|
// TOP
|
||||||
|
|
||||||
|
struct String_And_Flag{
|
||||||
|
char *str;
|
||||||
|
unsigned int flags;
|
||||||
|
};
|
||||||
|
|
||||||
enum Lex_State{
|
enum Lex_State{
|
||||||
LS_default,
|
LS_default,
|
||||||
LS_identifier,
|
LS_identifier,
|
||||||
|
@ -91,7 +96,10 @@ struct Whitespace_FSM{
|
||||||
|
|
||||||
struct Lex_FSM{
|
struct Lex_FSM{
|
||||||
unsigned char state;
|
unsigned char state;
|
||||||
unsigned char int_state;
|
union{
|
||||||
|
unsigned char int_state;
|
||||||
|
unsigned char directive_state;
|
||||||
|
};
|
||||||
unsigned char emit_token;
|
unsigned char emit_token;
|
||||||
unsigned char multi_line;
|
unsigned char multi_line;
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,42 +28,41 @@ unsigned char multiline_state_table[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned short main_fsm_eq_classes[] = {
|
unsigned short main_fsm_eq_classes[] = {
|
||||||
0,39,39,39,39,39,39,39,39,78,117,156,156,156,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,78,195,234,273,312,351,390,429,312,312,468,507,312,546,585,624,663,702,702,702,702,702,702,702,702,702,741,312,780,819,858,312,312,897,897,897,897,897,897,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,312,975,312,1014,936,39,897,897,897,897,1053,897,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,1092,936,936,312,1131,312,312,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
|
0,39,39,39,39,39,39,39,39,39,78,117,117,117,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,156,195,234,273,312,351,390,273,273,429,468,273,507,546,585,624,663,663,663,663,663,663,663,663,663,702,273,741,780,819,273,273,858,858,858,858,858,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,273,936,273,975,897,39,858,858,858,858,1014,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,1053,897,897,273,1092,273,273,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
|
||||||
};
|
};
|
||||||
|
|
||||||
const int num_main_fsm_eq_classes = 30;
|
const int num_main_fsm_eq_classes = 29;
|
||||||
|
|
||||||
unsigned char main_fsm_table[] = {
|
unsigned char main_fsm_table[] = {
|
||||||
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
||||||
0,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40, 2,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40, 2,42, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
37,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
7,40, 3,42, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
42,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
2,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
34,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
29,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
4,40, 3,42,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
33,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
31,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
27,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
21,40, 3,42, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
16,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
11, 1, 3, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
10, 1, 3, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
32,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
23,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
36,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
25,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1, 3, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1, 3, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40, 3,42, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
35,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1, 3, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1, 3, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
30,40, 3,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned short pp_include_fsm_eq_classes[] = {
|
unsigned short pp_include_fsm_eq_classes[] = {
|
||||||
|
@ -89,34 +88,34 @@ const int num_pp_macro_fsm_eq_classes = 29;
|
||||||
|
|
||||||
unsigned char pp_macro_fsm_table[] = {
|
unsigned char pp_macro_fsm_table[] = {
|
||||||
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
||||||
0,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
37,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
7,40,41,42, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
2,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
34,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
29,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
4,40,41,42,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
33,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
31,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
27,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
21,40,41,42, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
16,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
32,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
23,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
36,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
25,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
35,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
30,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned short pp_identifier_fsm_eq_classes[] = {
|
unsigned short pp_identifier_fsm_eq_classes[] = {
|
||||||
|
@ -127,34 +126,34 @@ const int num_pp_identifier_fsm_eq_classes = 29;
|
||||||
|
|
||||||
unsigned char pp_identifier_fsm_table[] = {
|
unsigned char pp_identifier_fsm_table[] = {
|
||||||
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
||||||
0,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
37,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
7,40,41,42, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
2,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
34,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
29,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
4,40,41,42,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
33,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
31,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
27,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
21,40,41,42, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
16,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
32,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
23,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
36,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
25,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
35,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
30,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned short pp_body_if_fsm_eq_classes[] = {
|
unsigned short pp_body_if_fsm_eq_classes[] = {
|
||||||
|
@ -165,34 +164,34 @@ const int num_pp_body_if_fsm_eq_classes = 29;
|
||||||
|
|
||||||
unsigned char pp_body_if_fsm_table[] = {
|
unsigned char pp_body_if_fsm_table[] = {
|
||||||
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
||||||
0,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
37,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
7,40,41,42, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
2,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
34,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
29,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
4,40,41,42,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
33,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
31,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
27,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
21,40,41,42, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
16,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
32,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
23,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
36,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
25,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
35,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
30,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned short pp_body_fsm_eq_classes[] = {
|
unsigned short pp_body_fsm_eq_classes[] = {
|
||||||
|
@ -203,34 +202,34 @@ const int num_pp_body_fsm_eq_classes = 29;
|
||||||
|
|
||||||
unsigned char pp_body_fsm_table[] = {
|
unsigned char pp_body_fsm_table[] = {
|
||||||
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
||||||
0,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
37,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
7,40,41,42, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
2,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
34,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
29,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
4,40,41,42,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
33,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
31,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
27,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
21,40,41,42, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
16,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
32,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
23,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
36,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
25,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
35,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
30,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned short pp_number_fsm_eq_classes[] = {
|
unsigned short pp_number_fsm_eq_classes[] = {
|
||||||
|
@ -241,34 +240,34 @@ const int num_pp_number_fsm_eq_classes = 29;
|
||||||
|
|
||||||
unsigned char pp_number_fsm_table[] = {
|
unsigned char pp_number_fsm_table[] = {
|
||||||
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
||||||
0,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
37,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
7,40,41,42, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
2,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
34,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
29,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
4,40,41,42,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
33,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
31,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
27,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
21,40,41,42, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
16,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
32,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
23,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
36,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
25,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
35,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
30,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned short pp_error_fsm_eq_classes[] = {
|
unsigned short pp_error_fsm_eq_classes[] = {
|
||||||
|
@ -291,34 +290,34 @@ const int num_pp_junk_fsm_eq_classes = 29;
|
||||||
|
|
||||||
unsigned char pp_junk_fsm_table[] = {
|
unsigned char pp_junk_fsm_table[] = {
|
||||||
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
|
||||||
0,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 5, 7, 8, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
0,40,41,42, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
37,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
7,40,41,42, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
2,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
34,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
29,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
4,40,41,42,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
33,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
31,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
27,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
21,40,41,42, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
16,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
32,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
23,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
36,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
25,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
39,40,41,42, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
35,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
30,40,41,42, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned short * get_eq_classes[] = {
|
unsigned short * get_eq_classes[] = {
|
||||||
|
@ -345,3 +344,52 @@ pp_error_fsm_table,
|
||||||
pp_junk_fsm_table,
|
pp_junk_fsm_table,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsigned short pp_directive_eq_classes[] = {
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0,119, 0,119,119,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,238, 0,357,476,595,714,833, 0,952, 0, 0,1071,1190,1309,1428,1547, 0,1666,1785,1904,2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2142, 0,2261,2380,2499,2618,2737, 0,2856, 0, 0,2975,3094,3213,3332,3451, 0,3570,3689,3808,3927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
const int num_pp_directive_eq_classes = 34;
|
||||||
|
|
||||||
|
unsigned char pp_directive_table[] = {
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
0,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,67,200,200,70,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,35,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
4,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,41,200,200,200,38,200,202,42,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,81,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,103,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
10,200,200,200,56,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,39,202,200,45,43,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,60,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,82,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,111,200,208,209,200,200,214,200,118,214,
|
||||||
|
200,200,33,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,44,207,46,206,200,200,200,212,200,200,200,200,203,57,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,83,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,105,210,200,200,211,200,112,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,68,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,86,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
2,200,200,200,200,200,200,200,200,200,200,200,116,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,58,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,84,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,110,104,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
12,200,200,200,200,200,200,200,200,200,102,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,36,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,34,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,69,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,32,200,200,200,200,200,79,200,100,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,40,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,59,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,85,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,117,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,48,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,107,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
6,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,47,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,66,200,200,200,101,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,49,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,106,200,200,200,210,200,108,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,80,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,109,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,50,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
8,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,37,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,62,200,200,65,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,16,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
3,200,200,200,200,200,200,200,200,200,200,200,200,200,22,200,200,200,19,200,202,23,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,73,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,90,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
9,200,200,51,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,20,202,200,26,24,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,55,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,74,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,98,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,115,214,200,200,214,
|
||||||
|
200,14,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,25,207,27,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,52,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,75,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,92,210,200,200,211,200,99,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,63,200,200,215,200,200,200,200,215,200,200,200,200,204,200,78,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
1,200,200,200,200,200,200,200,200,200,200,113,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,53,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,76,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,97,91,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
11,200,200,200,200,200,200,200,200,89,200,200,200,200,205,200,17,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,15,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,64,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,13,200,200,200,200,200,71,200,87,200,200,200,200,21,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,54,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,77,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,114,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,29,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,94,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
5,200,200,200,200,200,200,200,200,200,200,200,200,200,205,28,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,61,200,200,200,88,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,30,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,93,200,200,200,210,200,95,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,72,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,96,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,31,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
7,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,18,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214,
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned char LSDIR_default = 0;
|
||||||
|
|
||||||
|
unsigned char LSDIR_count = 119;
|
||||||
|
|
||||||
|
unsigned char pp_directive_terminal_base = 200;
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,6 @@
|
||||||
#define lexer_link static
|
#define lexer_link static
|
||||||
|
|
||||||
// TODO(allen): revisit this keyword data declaration system
|
// TODO(allen): revisit this keyword data declaration system
|
||||||
struct String_And_Flag{
|
|
||||||
char *str;
|
|
||||||
fcpp_u32 flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct String_List{
|
struct String_List{
|
||||||
String_And_Flag *data;
|
String_And_Flag *data;
|
||||||
int count;
|
int count;
|
||||||
|
@ -25,26 +20,8 @@ struct Sub_Match_List_Result{
|
||||||
fcpp_i32 new_pos;
|
fcpp_i32 new_pos;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// TODO(allen): shift towards storing in a context
|
|
||||||
static String_And_Flag int_suf_strings[] = {
|
|
||||||
{"ull"}, {"ULL"},
|
|
||||||
{"llu"}, {"LLU"},
|
|
||||||
{"ll"}, {"LL"},
|
|
||||||
{"l"}, {"L"},
|
|
||||||
{"u"}, {"U"}
|
|
||||||
};
|
|
||||||
|
|
||||||
#define lexer_string_list(x) {x, (sizeof(x)/sizeof(*x))}
|
#define lexer_string_list(x) {x, (sizeof(x)/sizeof(*x))}
|
||||||
|
|
||||||
static String_List int_sufs = lexer_string_list(int_suf_strings);
|
|
||||||
|
|
||||||
static String_And_Flag float_suf_strings[] = {
|
|
||||||
{"f"}, {"F"},
|
|
||||||
{"l"}, {"L"}
|
|
||||||
};
|
|
||||||
static String_List float_sufs = lexer_string_list(float_suf_strings);
|
|
||||||
|
|
||||||
static String_And_Flag bool_lit_strings[] = {
|
static String_And_Flag bool_lit_strings[] = {
|
||||||
{"true"}, {"false"}
|
{"true"}, {"false"}
|
||||||
};
|
};
|
||||||
|
@ -138,65 +115,6 @@ static String_And_Flag keyword_strings[] = {
|
||||||
};
|
};
|
||||||
static String_List keywords = lexer_string_list(keyword_strings);
|
static String_List keywords = lexer_string_list(keyword_strings);
|
||||||
|
|
||||||
static String_And_Flag op_strings[] = {
|
|
||||||
{"...", CPP_TOKEN_ELLIPSIS},
|
|
||||||
{"<<=", CPP_TOKEN_LSHIFTEQ},
|
|
||||||
{">>=", CPP_TOKEN_RSHIFTEQ},
|
|
||||||
{"->*", CPP_TOKEN_PTRARROW},
|
|
||||||
{"<<", CPP_TOKEN_LSHIFT},
|
|
||||||
{">>", CPP_TOKEN_RSHIFT},
|
|
||||||
{"&&", CPP_TOKEN_AND},
|
|
||||||
{"||", CPP_TOKEN_OR},
|
|
||||||
{"->", CPP_TOKEN_ARROW},
|
|
||||||
{"++", CPP_TOKEN_INCREMENT},
|
|
||||||
{"--", CPP_TOKEN_DECREMENT},
|
|
||||||
{"::", CPP_TOKEN_SCOPE},
|
|
||||||
{"+=", CPP_TOKEN_ADDEQ},
|
|
||||||
{"-=", CPP_TOKEN_SUBEQ},
|
|
||||||
{"*=", CPP_TOKEN_MULEQ},
|
|
||||||
{"/=", CPP_TOKEN_DIVEQ},
|
|
||||||
{"%=", CPP_TOKEN_MODEQ},
|
|
||||||
{"&=", CPP_TOKEN_ANDEQ},
|
|
||||||
{"|=", CPP_TOKEN_OREQ},
|
|
||||||
{"^=", CPP_TOKEN_XOREQ},
|
|
||||||
{"==", CPP_TOKEN_EQEQ},
|
|
||||||
{">=", CPP_TOKEN_GRTREQ},
|
|
||||||
{"<=", CPP_TOKEN_LESSEQ},
|
|
||||||
{"!=", CPP_TOKEN_NOTEQ},
|
|
||||||
{".*", CPP_TOKEN_PTRDOT},
|
|
||||||
{"{", CPP_TOKEN_BRACE_OPEN},
|
|
||||||
{"}", CPP_TOKEN_BRACE_CLOSE},
|
|
||||||
{"[", CPP_TOKEN_BRACKET_OPEN},
|
|
||||||
{"]", CPP_TOKEN_BRACKET_CLOSE},
|
|
||||||
{"(", CPP_TOKEN_PARENTHESE_OPEN},
|
|
||||||
{")", CPP_TOKEN_PARENTHESE_CLOSE},
|
|
||||||
{"<", CPP_TOKEN_LESS},
|
|
||||||
{">", CPP_TOKEN_GRTR},
|
|
||||||
{"+", CPP_TOKEN_PLUS},
|
|
||||||
{"-", CPP_TOKEN_MINUS},
|
|
||||||
{"!", CPP_TOKEN_NOT},
|
|
||||||
{"~", CPP_TOKEN_TILDE},
|
|
||||||
{"*", CPP_TOKEN_STAR},
|
|
||||||
{"&", CPP_TOKEN_AMPERSAND},
|
|
||||||
{"|", CPP_TOKEN_BIT_OR},
|
|
||||||
{"^", CPP_TOKEN_BIT_XOR},
|
|
||||||
{"=", CPP_TOKEN_EQ},
|
|
||||||
{",", CPP_TOKEN_COMMA},
|
|
||||||
{":", CPP_TOKEN_COLON},
|
|
||||||
{";", CPP_TOKEN_SEMICOLON},
|
|
||||||
{"/", CPP_TOKEN_DIV},
|
|
||||||
{"?", CPP_TOKEN_TERNARY_QMARK},
|
|
||||||
{"%", CPP_TOKEN_MOD},
|
|
||||||
{".", CPP_TOKEN_DOT},
|
|
||||||
};
|
|
||||||
static String_List ops = lexer_string_list(op_strings);
|
|
||||||
|
|
||||||
static String_And_Flag pp_op_strings[] = {
|
|
||||||
{"##", CPP_PP_CONCAT},
|
|
||||||
{"#", CPP_PP_STRINGIFY},
|
|
||||||
};
|
|
||||||
static String_List pp_ops = lexer_string_list(pp_op_strings);
|
|
||||||
|
|
||||||
static String_And_Flag preprop_strings[] = {
|
static String_And_Flag preprop_strings[] = {
|
||||||
{"include", CPP_PP_INCLUDE},
|
{"include", CPP_PP_INCLUDE},
|
||||||
{"INCLUDE", CPP_PP_INCLUDE},
|
{"INCLUDE", CPP_PP_INCLUDE},
|
||||||
|
@ -467,6 +385,7 @@ cpp_lex_nonalloc(Lex_Data *S_ptr, char *chunk, int size, Cpp_Token_Stack *token_
|
||||||
DrCase(3);
|
DrCase(3);
|
||||||
DrCase(4);
|
DrCase(4);
|
||||||
DrCase(5);
|
DrCase(5);
|
||||||
|
DrCase(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;){
|
for (;;){
|
||||||
|
@ -641,29 +560,31 @@ cpp_lex_nonalloc(Lex_Data *S_ptr, char *chunk, int size, Cpp_Token_Stack *token_
|
||||||
|
|
||||||
case LS_pp:
|
case LS_pp:
|
||||||
{
|
{
|
||||||
--S.pos;
|
S.fsm.directive_state = LSDIR_default;
|
||||||
int start = 1;
|
S.fsm.emit_token = 0;
|
||||||
|
for (;;){
|
||||||
|
for (; S.fsm.directive_state < LSDIR_count && S.pos < end_pos;){
|
||||||
|
c = chunk[S.pos++];
|
||||||
|
S.fsm.directive_state = pp_directive_table[S.fsm.directive_state + pp_directive_eq_classes[c]];
|
||||||
|
}
|
||||||
|
S.fsm.emit_token = (S.fsm.int_state >= LSDIR_count);
|
||||||
|
|
||||||
c = S.tb[start];
|
if (S.fsm.emit_token == 0){
|
||||||
while (start < S.tb_pos && (c == ' ' || c == '\t' || c == '\r' || c == '\v' || c == '\f')){
|
DrYield(6, 1);
|
||||||
++start;
|
}
|
||||||
c = S.tb[start];
|
else break;
|
||||||
}
|
}
|
||||||
|
--S.pos;
|
||||||
int word_size = S.tb_pos - start - 1;
|
|
||||||
Sub_Match_List_Result match;
|
Cpp_Token_Type type = (Cpp_Token_Type)(S.fsm.directive_state - pp_directive_terminal_base);
|
||||||
match = sub_match_list(S.tb, S.tb_pos, start, preprops, word_size);
|
S.token.type = type;
|
||||||
|
if (type == CPP_TOKEN_JUNK){
|
||||||
if (match.index != -1){
|
S.token.flags = 0;
|
||||||
String_And_Flag data = preprops.data[match.index];
|
}
|
||||||
S.token.type = (Cpp_Token_Type)data.flags;
|
else{
|
||||||
S.token.flags = CPP_TFLAG_PP_DIRECTIVE;
|
S.token.flags = CPP_TFLAG_PP_DIRECTIVE;
|
||||||
S.pp_state = (unsigned char)cpp_pp_directive_to_state(S.token.type);
|
S.pp_state = (unsigned char)cpp_pp_directive_to_state(S.token.type);
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
S.token.type = CPP_TOKEN_JUNK;
|
|
||||||
S.token.flags = 0;
|
|
||||||
}
|
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
case LS_number:
|
case LS_number:
|
||||||
|
|
|
@ -341,7 +341,7 @@ int main(){
|
||||||
int verbose_level = -1;
|
int verbose_level = -1;
|
||||||
int chunk_start = 0;
|
int chunk_start = 0;
|
||||||
int chunk_end = 0;
|
int chunk_end = 0;
|
||||||
#define TEST_FILE "autotab.cpp"
|
#define TEST_FILE "junk.cpp"
|
||||||
#define SINGLE_ITEM 0
|
#define SINGLE_ITEM 0
|
||||||
|
|
||||||
int chunks = (chunk_start > 0 && chunk_start <= chunk_end);
|
int chunks = (chunk_start > 0 && chunk_start <= chunk_end);
|
||||||
|
|
|
@ -7,6 +7,21 @@
|
||||||
|
|
||||||
// TOP
|
// TOP
|
||||||
|
|
||||||
|
/* TODO(allen):
|
||||||
|
|
||||||
|
1. Reduce away states that only ever show up as terminal states.
|
||||||
|
2. Reduce away states that cannot ever be reached.
|
||||||
|
3. Output new enum that only includes the reduced states.
|
||||||
|
4. How to name these things so that we can deal with different
|
||||||
|
pp_states that want very similar fsm main states?
|
||||||
|
4.a. Perhaps a lookup table to convert back to canonical enum
|
||||||
|
values after the fsm is finished?
|
||||||
|
|
||||||
|
5. How can we eliminate S.tb for keywords?? They are too long for
|
||||||
|
building into an FSM table... (state,index,input) -> state ???
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -14,8 +29,317 @@
|
||||||
|
|
||||||
#define ArrayCount(a) (sizeof(a)/sizeof(*a))
|
#define ArrayCount(a) (sizeof(a)/sizeof(*a))
|
||||||
|
|
||||||
|
#include "../4cpp_lexer_types.h"
|
||||||
#include "4cpp_lexer_fsms.h"
|
#include "4cpp_lexer_fsms.h"
|
||||||
|
|
||||||
|
static String_And_Flag preprop_strings[] = {
|
||||||
|
{"include", CPP_PP_INCLUDE},
|
||||||
|
{"INCLUDE", CPP_PP_INCLUDE},
|
||||||
|
{"ifndef", CPP_PP_IFNDEF},
|
||||||
|
{"IFNDEF", CPP_PP_IFNDEF},
|
||||||
|
{"define", CPP_PP_DEFINE},
|
||||||
|
{"DEFINE", CPP_PP_DEFINE},
|
||||||
|
{"import", CPP_PP_IMPORT},
|
||||||
|
{"IMPORT", CPP_PP_IMPORT},
|
||||||
|
{"pragma", CPP_PP_PRAGMA},
|
||||||
|
{"PRAGMA", CPP_PP_PRAGMA},
|
||||||
|
{"undef", CPP_PP_UNDEF},
|
||||||
|
{"UNDEF", CPP_PP_UNDEF},
|
||||||
|
{"endif", CPP_PP_ENDIF},
|
||||||
|
{"ENDIF", CPP_PP_ENDIF},
|
||||||
|
{"error", CPP_PP_ERROR},
|
||||||
|
{"ERROR", CPP_PP_ERROR},
|
||||||
|
{"ifdef", CPP_PP_IFDEF},
|
||||||
|
{"IFDEF", CPP_PP_IFDEF},
|
||||||
|
{"using", CPP_PP_USING},
|
||||||
|
{"USING", CPP_PP_USING},
|
||||||
|
{"else", CPP_PP_ELSE},
|
||||||
|
{"ELSE", CPP_PP_ELSE},
|
||||||
|
{"elif", CPP_PP_ELIF},
|
||||||
|
{"ELIF", CPP_PP_ELIF},
|
||||||
|
{"line", CPP_PP_LINE},
|
||||||
|
{"LINE", CPP_PP_LINE},
|
||||||
|
{"if", CPP_PP_IF},
|
||||||
|
{"IF", CPP_PP_IF},
|
||||||
|
};
|
||||||
|
static String_And_Flag keyword_strings[] = {
|
||||||
|
{"and", CPP_TOKEN_AND},
|
||||||
|
{"and_eq", CPP_TOKEN_ANDEQ},
|
||||||
|
{"bitand", CPP_TOKEN_BIT_AND},
|
||||||
|
{"bitor", CPP_TOKEN_BIT_OR},
|
||||||
|
{"or", CPP_TOKEN_OR},
|
||||||
|
{"or_eq", CPP_TOKEN_OREQ},
|
||||||
|
{"sizeof", CPP_TOKEN_SIZEOF},
|
||||||
|
{"alignof", CPP_TOKEN_ALIGNOF},
|
||||||
|
{"decltype", CPP_TOKEN_DECLTYPE},
|
||||||
|
{"throw", CPP_TOKEN_THROW},
|
||||||
|
{"new", CPP_TOKEN_NEW},
|
||||||
|
{"delete", CPP_TOKEN_DELETE},
|
||||||
|
{"xor", CPP_TOKEN_BIT_XOR},
|
||||||
|
{"xor_eq", CPP_TOKEN_XOREQ},
|
||||||
|
{"not", CPP_TOKEN_NOT},
|
||||||
|
{"not_eq", CPP_TOKEN_NOTEQ},
|
||||||
|
{"typeid", CPP_TOKEN_TYPEID},
|
||||||
|
{"compl", CPP_TOKEN_BIT_NOT},
|
||||||
|
|
||||||
|
{"void", CPP_TOKEN_KEY_TYPE},
|
||||||
|
{"bool", CPP_TOKEN_KEY_TYPE},
|
||||||
|
{"char", CPP_TOKEN_KEY_TYPE},
|
||||||
|
{"int", CPP_TOKEN_KEY_TYPE},
|
||||||
|
{"float", CPP_TOKEN_KEY_TYPE},
|
||||||
|
{"double", CPP_TOKEN_KEY_TYPE},
|
||||||
|
|
||||||
|
{"long", CPP_TOKEN_KEY_MODIFIER},
|
||||||
|
{"short", CPP_TOKEN_KEY_MODIFIER},
|
||||||
|
{"unsigned", CPP_TOKEN_KEY_MODIFIER},
|
||||||
|
|
||||||
|
{"const", CPP_TOKEN_KEY_QUALIFIER},
|
||||||
|
{"volatile", CPP_TOKEN_KEY_QUALIFIER},
|
||||||
|
|
||||||
|
{"asm", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"break", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"case", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"catch", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"continue", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"default", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"do", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"else", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"for", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"goto", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"if", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"return", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"switch", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"try", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"while", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
{"static_assert", CPP_TOKEN_KEY_CONTROL_FLOW},
|
||||||
|
|
||||||
|
{"const_cast", CPP_TOKEN_KEY_CAST},
|
||||||
|
{"dynamic_cast", CPP_TOKEN_KEY_CAST},
|
||||||
|
{"reinterpret_cast", CPP_TOKEN_KEY_CAST},
|
||||||
|
{"static_cast", CPP_TOKEN_KEY_CAST},
|
||||||
|
|
||||||
|
{"class", CPP_TOKEN_KEY_TYPE_DECLARATION},
|
||||||
|
{"enum", CPP_TOKEN_KEY_TYPE_DECLARATION},
|
||||||
|
{"struct", CPP_TOKEN_KEY_TYPE_DECLARATION},
|
||||||
|
{"typedef", CPP_TOKEN_KEY_TYPE_DECLARATION},
|
||||||
|
{"union", CPP_TOKEN_KEY_TYPE_DECLARATION},
|
||||||
|
{"template", CPP_TOKEN_KEY_TYPE_DECLARATION},
|
||||||
|
{"typename", CPP_TOKEN_KEY_TYPE_DECLARATION},
|
||||||
|
|
||||||
|
{"friend", CPP_TOKEN_KEY_ACCESS},
|
||||||
|
{"namespace", CPP_TOKEN_KEY_ACCESS},
|
||||||
|
{"private", CPP_TOKEN_KEY_ACCESS},
|
||||||
|
{"protected", CPP_TOKEN_KEY_ACCESS},
|
||||||
|
{"public", CPP_TOKEN_KEY_ACCESS},
|
||||||
|
{"using", CPP_TOKEN_KEY_ACCESS},
|
||||||
|
|
||||||
|
{"extern", CPP_TOKEN_KEY_LINKAGE},
|
||||||
|
{"export", CPP_TOKEN_KEY_LINKAGE},
|
||||||
|
{"inline", CPP_TOKEN_KEY_LINKAGE},
|
||||||
|
{"static", CPP_TOKEN_KEY_LINKAGE},
|
||||||
|
{"virtual", CPP_TOKEN_KEY_LINKAGE},
|
||||||
|
|
||||||
|
{"alignas", CPP_TOKEN_KEY_OTHER},
|
||||||
|
{"explicit", CPP_TOKEN_KEY_OTHER},
|
||||||
|
{"noexcept", CPP_TOKEN_KEY_OTHER},
|
||||||
|
{"nullptr", CPP_TOKEN_KEY_OTHER},
|
||||||
|
{"operator", CPP_TOKEN_KEY_OTHER},
|
||||||
|
{"register", CPP_TOKEN_KEY_OTHER},
|
||||||
|
{"this", CPP_TOKEN_KEY_OTHER},
|
||||||
|
{"thread_local", CPP_TOKEN_KEY_OTHER},
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TerminalBase 200
|
||||||
|
|
||||||
|
struct FSM_State{
|
||||||
|
unsigned char transition_rule[256];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FSM{
|
||||||
|
FSM_State *states;
|
||||||
|
unsigned short count, max;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Match_Node{
|
||||||
|
Match_Node *first_child;
|
||||||
|
Match_Node *next_sibling;
|
||||||
|
|
||||||
|
int *words;
|
||||||
|
int count, max;
|
||||||
|
int index;
|
||||||
|
|
||||||
|
FSM_State *state;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Match_Tree{
|
||||||
|
Match_Node *nodes;
|
||||||
|
int count, max;
|
||||||
|
};
|
||||||
|
|
||||||
|
Match_Node*
|
||||||
|
match_get_node(Match_Tree *tree){
|
||||||
|
Match_Node *result;
|
||||||
|
assert(tree->count < tree->max);
|
||||||
|
result = &tree->nodes[tree->count++];
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
match_init_node(Match_Node *node, int match_count){
|
||||||
|
*node = {};
|
||||||
|
node->words = (int*)malloc(sizeof(int)*match_count);
|
||||||
|
node->max = match_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
match_add_word(Match_Node *node, int word){
|
||||||
|
assert(node->count < node->max);
|
||||||
|
node->words[node->count++] = word;
|
||||||
|
}
|
||||||
|
|
||||||
|
FSM_State*
|
||||||
|
fsm_get_state(FSM *fsm){
|
||||||
|
FSM_State *result;
|
||||||
|
unsigned short i;
|
||||||
|
assert(fsm->count < fsm->max);
|
||||||
|
result = &fsm->states[fsm->count++];
|
||||||
|
for (i = 0; i < 256; ++i){
|
||||||
|
result->transition_rule[i] = TerminalBase;
|
||||||
|
}
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char
|
||||||
|
fsm_index(FSM *fsm, FSM_State *s){
|
||||||
|
unsigned char result;
|
||||||
|
result = (unsigned char)(unsigned long long)(s - fsm->states);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
fsm_add_transition(FSM_State *state, char c, unsigned char dest){
|
||||||
|
state->transition_rule[c] = dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Terminal_Lookup_Table{
|
||||||
|
unsigned int state_to_type[60];
|
||||||
|
unsigned char type_to_state[CPP_TOKEN_TYPE_COUNT];
|
||||||
|
unsigned char state_count;
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
process_match_node(String_And_Flag *input, Match_Node *node, Match_Tree *tree, FSM *fsm, Terminal_Lookup_Table *terminal_table = 0){
|
||||||
|
int next_index = node->index + 1;
|
||||||
|
int match_count = node->count;
|
||||||
|
FSM_State *this_state = node->state;
|
||||||
|
|
||||||
|
int i, j, *words = node->words;
|
||||||
|
|
||||||
|
String_And_Flag saf;
|
||||||
|
int l;
|
||||||
|
|
||||||
|
char c;
|
||||||
|
Match_Node *next_nodes[256];
|
||||||
|
Match_Node *newest_child = 0;
|
||||||
|
Match_Node *n;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
unsigned char unjunkify = 0;
|
||||||
|
|
||||||
|
memset(next_nodes, 0, sizeof(next_nodes));
|
||||||
|
|
||||||
|
for (i = 0; i < match_count; ++i){
|
||||||
|
j = words[i];
|
||||||
|
saf = input[j];
|
||||||
|
l = (int)strlen(saf.str);
|
||||||
|
|
||||||
|
if (next_index < l){
|
||||||
|
c = saf.str[next_index];
|
||||||
|
|
||||||
|
if (next_nodes[c] == 0){
|
||||||
|
next_nodes[c] = match_get_node(tree);
|
||||||
|
match_init_node(next_nodes[c], match_count);
|
||||||
|
next_nodes[c]->state = fsm_get_state(fsm);
|
||||||
|
next_nodes[c]->index = next_index;
|
||||||
|
if (newest_child == 0){
|
||||||
|
assert(node->first_child == 0);
|
||||||
|
node->first_child = next_nodes[c];
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
assert(newest_child->next_sibling == 0);
|
||||||
|
newest_child->next_sibling = next_nodes[c];
|
||||||
|
}
|
||||||
|
newest_child = next_nodes[c];
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
|
||||||
|
match_add_word(next_nodes[c], j);
|
||||||
|
fsm_add_transition(this_state, c, fsm_index(fsm, next_nodes[c]->state));
|
||||||
|
}
|
||||||
|
else if (next_index == l){
|
||||||
|
assert(unjunkify == 0);
|
||||||
|
if (terminal_table == 0){
|
||||||
|
unjunkify = (unsigned char)saf.flags;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
unjunkify = terminal_table->type_to_state[saf.flags];
|
||||||
|
}
|
||||||
|
assert(unjunkify < 55);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unjunkify){
|
||||||
|
for (i = 0; i < 256; ++i){
|
||||||
|
if (this_state->transition_rule[i] == TerminalBase){
|
||||||
|
this_state->transition_rule[i] = TerminalBase + unjunkify;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (n = node->first_child; n; n = n->next_sibling){
|
||||||
|
process_match_node(input, n, tree, fsm, terminal_table);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FSM
|
||||||
|
generate_pp_directive_fsm(){
|
||||||
|
Match_Tree tree;
|
||||||
|
Match_Node *root_node;
|
||||||
|
FSM fsm;
|
||||||
|
FSM_State *root_state;
|
||||||
|
int memsize;
|
||||||
|
|
||||||
|
fsm.max = 200;
|
||||||
|
fsm.count = 0;
|
||||||
|
memsize = sizeof(FSM_State)*fsm.max;
|
||||||
|
fsm.states = (FSM_State*)malloc(memsize);
|
||||||
|
|
||||||
|
tree.max = 200;
|
||||||
|
tree.count = 0;
|
||||||
|
memsize = sizeof(Match_Node)*tree.max;
|
||||||
|
tree.nodes = (Match_Node*)malloc(memsize);
|
||||||
|
|
||||||
|
root_state = fsm_get_state(&fsm);
|
||||||
|
|
||||||
|
root_node = match_get_node(&tree);
|
||||||
|
match_init_node(root_node, ArrayCount(preprop_strings));
|
||||||
|
for (int i = 0; i < ArrayCount(preprop_strings); ++i){
|
||||||
|
root_node->words[i] = i;
|
||||||
|
}
|
||||||
|
root_node->count = ArrayCount(preprop_strings);
|
||||||
|
root_node->state = root_state;
|
||||||
|
root_node->index = -1;
|
||||||
|
process_match_node(preprop_strings, root_node, &tree, &fsm);
|
||||||
|
|
||||||
|
root_state->transition_rule[' '] = 0;
|
||||||
|
root_state->transition_rule['\t'] = 0;
|
||||||
|
root_state->transition_rule['\r'] = 0;
|
||||||
|
root_state->transition_rule['\v'] = 0;
|
||||||
|
root_state->transition_rule['\f'] = 0;
|
||||||
|
|
||||||
|
return(fsm);
|
||||||
|
}
|
||||||
|
|
||||||
Whitespace_FSM
|
Whitespace_FSM
|
||||||
whitespace_skip_fsm(Whitespace_FSM wfsm, char c){
|
whitespace_skip_fsm(Whitespace_FSM wfsm, char c){
|
||||||
if (wfsm.pp_state != LSPP_default){
|
if (wfsm.pp_state != LSPP_default){
|
||||||
|
@ -165,7 +489,15 @@ main_fsm(Lex_FSM fsm, unsigned char pp_state, unsigned char c){
|
||||||
case '=': fsm.state = LS_eq; break;
|
case '=': fsm.state = LS_eq; break;
|
||||||
case '!': fsm.state = LS_bang; break;
|
case '!': fsm.state = LS_bang; break;
|
||||||
|
|
||||||
case '#': fsm.state = LS_pound; break;
|
case '#':
|
||||||
|
if (pp_state == LSPP_default){
|
||||||
|
fsm.state = LS_pp;
|
||||||
|
fsm.emit_token = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
fsm.state = LS_pound;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
#define OperCase(op,type) case op: fsm.emit_token = 1; break;
|
#define OperCase(op,type) case op: fsm.emit_token = 1; break;
|
||||||
OperCase('{', CPP_TOKEN_BRACE_OPEN);
|
OperCase('{', CPP_TOKEN_BRACE_OPEN);
|
||||||
|
@ -196,29 +528,18 @@ main_fsm(Lex_FSM fsm, unsigned char pp_state, unsigned char c){
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LS_pound:
|
case LS_pound:
|
||||||
if (pp_state == LSPP_default){
|
switch (c){
|
||||||
if (c == ' ' || c == '\t' || c == '\r' || c == '\f' || c == '\v'){
|
case '#': fsm.emit_token = 1; break;
|
||||||
fsm.state = LS_pound;
|
default: fsm.emit_token = 1; break;
|
||||||
}
|
|
||||||
else if (c == '\n'){
|
|
||||||
fsm.emit_token = 1;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
fsm.state = LS_pp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
switch (c){
|
|
||||||
case '#': fsm.emit_token = 1; break;
|
|
||||||
default: fsm.emit_token = 1; break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LS_pp:
|
case LS_pp:
|
||||||
|
#if 0
|
||||||
if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_')){
|
if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_')){
|
||||||
fsm.emit_token = 1;
|
fsm.emit_token = 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LS_char:
|
case LS_char:
|
||||||
|
@ -528,6 +849,16 @@ struct FSM_Tables{
|
||||||
unsigned short state_count;
|
unsigned short state_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
allocate_full_tables(FSM_Tables *table, unsigned char state_count){
|
||||||
|
table->full_transition_table = (unsigned char*)malloc(state_count * 256);
|
||||||
|
table->marks = (unsigned char*)malloc(state_count * 256);
|
||||||
|
table->eq_class = (unsigned char*)malloc(state_count * 256);
|
||||||
|
table->eq_class_rep = (unsigned char*)malloc(state_count * 256);
|
||||||
|
table->state_count = state_count;
|
||||||
|
memset(table->marks, 0, 256);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
do_table_reduction(FSM_Tables *table, unsigned short state_count){
|
do_table_reduction(FSM_Tables *table, unsigned short state_count){
|
||||||
{
|
{
|
||||||
|
@ -566,12 +897,7 @@ FSM_Tables
|
||||||
generate_whitespace_skip_table(){
|
generate_whitespace_skip_table(){
|
||||||
unsigned char state_count = LSPP_count;
|
unsigned char state_count = LSPP_count;
|
||||||
FSM_Tables table;
|
FSM_Tables table;
|
||||||
table.full_transition_table = (unsigned char*)malloc(state_count * 256);
|
allocate_full_tables(&table, state_count);
|
||||||
table.marks = (unsigned char*)malloc(state_count * 256);
|
|
||||||
table.eq_class = (unsigned char*)malloc(state_count * 256);
|
|
||||||
table.eq_class_rep = (unsigned char*)malloc(state_count * 256);
|
|
||||||
table.state_count = state_count;
|
|
||||||
memset(table.marks, 0, 256);
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
Whitespace_FSM wfsm = {0};
|
Whitespace_FSM wfsm = {0};
|
||||||
|
@ -594,12 +920,7 @@ FSM_Tables
|
||||||
generate_int_table(){
|
generate_int_table(){
|
||||||
unsigned char state_count = LSINT_count;
|
unsigned char state_count = LSINT_count;
|
||||||
FSM_Tables table;
|
FSM_Tables table;
|
||||||
table.full_transition_table = (unsigned char*)malloc(state_count * 256);
|
allocate_full_tables(&table, state_count);
|
||||||
table.marks = (unsigned char*)malloc(state_count * 256);
|
|
||||||
table.eq_class = (unsigned char*)malloc(state_count * 256);
|
|
||||||
table.eq_class_rep = (unsigned char*)malloc(state_count * 256);
|
|
||||||
table.state_count = state_count;
|
|
||||||
memset(table.marks, 0, 256);
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
Lex_FSM fsm = {0};
|
Lex_FSM fsm = {0};
|
||||||
|
@ -622,12 +943,7 @@ FSM_Tables
|
||||||
generate_fsm_table(unsigned char pp_state){
|
generate_fsm_table(unsigned char pp_state){
|
||||||
unsigned char state_count = LS_count;
|
unsigned char state_count = LS_count;
|
||||||
FSM_Tables table;
|
FSM_Tables table;
|
||||||
table.full_transition_table = (unsigned char*)malloc(state_count * 256);
|
allocate_full_tables(&table, state_count);
|
||||||
table.marks = (unsigned char*)malloc(state_count * 256);
|
|
||||||
table.eq_class = (unsigned char*)malloc(state_count * 256);
|
|
||||||
table.eq_class_rep = (unsigned char*)malloc(state_count * 256);
|
|
||||||
table.state_count = state_count;
|
|
||||||
memset(table.marks, 0, 256);
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
Lex_FSM fsm = {0};
|
Lex_FSM fsm = {0};
|
||||||
|
@ -668,6 +984,11 @@ render_fsm_table(FILE *file, FSM_Tables tables, char *group_name){
|
||||||
end_table(file);
|
end_table(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
render_variable(FILE *file, char *type, char *variable, unsigned int x){
|
||||||
|
fprintf(file, "%s %s = %d;\n\n", type, variable, x);
|
||||||
|
}
|
||||||
|
|
||||||
struct PP_Names{
|
struct PP_Names{
|
||||||
unsigned char pp_state;
|
unsigned char pp_state;
|
||||||
char *name;
|
char *name;
|
||||||
|
@ -685,7 +1006,29 @@ PP_Names pp_names[] = {
|
||||||
{LSPP_junk, "pp_junk_fsm"},
|
{LSPP_junk, "pp_junk_fsm"},
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(){
|
FSM_Tables
|
||||||
|
generate_table_from_abstract_fsm(FSM fsm){
|
||||||
|
unsigned char state_count = (unsigned char)fsm.count;
|
||||||
|
FSM_Tables table;
|
||||||
|
allocate_full_tables(&table, state_count);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
unsigned char new_state;
|
||||||
|
for (unsigned short c = 0; c < 256; ++c){
|
||||||
|
for (unsigned char state = 0; state < state_count; ++state){
|
||||||
|
new_state = fsm.states[state].transition_rule[c];
|
||||||
|
table.full_transition_table[i++] = new_state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
do_table_reduction(&table, state_count);
|
||||||
|
|
||||||
|
return(table);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main(){
|
||||||
FILE *file;
|
FILE *file;
|
||||||
file = fopen("4cpp_lexer_tables.c", "wb");
|
file = fopen("4cpp_lexer_tables.c", "wb");
|
||||||
|
|
||||||
|
@ -722,6 +1065,14 @@ int main(){
|
||||||
}
|
}
|
||||||
end_table(file);
|
end_table(file);
|
||||||
|
|
||||||
|
FSM pp_directive_fsm = generate_pp_directive_fsm();
|
||||||
|
FSM_Tables pp_directive_tables = generate_table_from_abstract_fsm(pp_directive_fsm);
|
||||||
|
|
||||||
|
render_fsm_table(file, pp_directive_tables, "pp_directive");
|
||||||
|
render_variable(file, "unsigned char", "LSDIR_default", 0);
|
||||||
|
render_variable(file, "unsigned char", "LSDIR_count", pp_directive_fsm.count);
|
||||||
|
render_variable(file, "unsigned char", "pp_directive_terminal_base", TerminalBase);
|
||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1444,7 +1444,7 @@ Win32Callback(HWND hwnd, UINT uMsg,
|
||||||
}
|
}
|
||||||
|
|
||||||
Font_Load_Parameters *params = win32vars.fnt.params + lParam;
|
Font_Load_Parameters *params = win32vars.fnt.params + lParam;
|
||||||
i32 oversample = DpiMultiplier(2, win32vars.target.dpi);
|
i32 oversample = 2;
|
||||||
|
|
||||||
for (b32 success = 0; success == 0;){
|
for (b32 success = 0; success == 0;){
|
||||||
success = draw_font_load(win32vars.fnt.part.base,
|
success = draw_font_load(win32vars.fnt.part.base,
|
||||||
|
|
Loading…
Reference in New Issue