removed the delayed action system
parent
5275ac5823
commit
17dfa93c34
148
4ed.cpp
148
4ed.cpp
|
@ -906,7 +906,7 @@ COMMAND_DECL(save){
|
|||
|
||||
if (file){
|
||||
if (name.str){
|
||||
if (!file->state.is_dummy && file_is_ready(file)){
|
||||
if (!file->is_dummy && file_is_ready(file)){
|
||||
view_save_file(system, models, file, 0, name, 1);
|
||||
}
|
||||
}
|
||||
|
@ -927,7 +927,7 @@ COMMAND_DECL(save){
|
|||
|
||||
if (name.size != 0){
|
||||
if (file){
|
||||
if (!file->state.is_dummy && file_is_ready(file)){
|
||||
if (!file->is_dummy && file_is_ready(file)){
|
||||
view_save_file(system, models, file, 0, name, 0);
|
||||
}
|
||||
}
|
||||
|
@ -1751,7 +1751,7 @@ globalvar Command_Function command_table[cmdid_count];
|
|||
internal void
|
||||
fill_buffer_summary(Buffer_Summary *buffer, Editing_File *file, Working_Set *working_set){
|
||||
*buffer = buffer_summary_zero();
|
||||
if (!file->state.is_dummy){
|
||||
if (!file->is_dummy){
|
||||
buffer->exists = 1;
|
||||
buffer->ready = file_is_ready(file);
|
||||
|
||||
|
@ -1952,7 +1952,7 @@ extern "C"{
|
|||
Working_Set *working_set = &cmd->models->working_set;
|
||||
|
||||
file = working_set_contains(cmd->system, working_set, make_string(filename, len));
|
||||
if (file && !file->state.is_dummy){
|
||||
if (file && !file->is_dummy){
|
||||
fill_buffer_summary(&buffer, file, working_set);
|
||||
}
|
||||
|
||||
|
@ -2241,7 +2241,7 @@ extern "C"{
|
|||
if (view_id >= 0 && view_id < live_set->max){
|
||||
vptr = live_set->views + view_id;
|
||||
file = vptr->file_data.file;
|
||||
if (file && !file->state.is_loading){
|
||||
if (file && !file->is_loading){
|
||||
if (seek.type == buffer_seek_line_char && seek.character <= 0){
|
||||
seek.character = 1;
|
||||
}
|
||||
|
@ -2268,7 +2268,7 @@ extern "C"{
|
|||
if (view_id >= 0 && view_id < live_set->max){
|
||||
vptr = live_set->views + view_id;
|
||||
file = vptr->file_data.file;
|
||||
if (file && !file->state.is_loading){
|
||||
if (file && !file->is_loading){
|
||||
result = 1;
|
||||
if (seek.type == buffer_seek_line_char && seek.character <= 0){
|
||||
seek.character = 1;
|
||||
|
@ -3029,7 +3029,7 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings,
|
|||
settings->font_size = str_to_int(clparams.argv[i]);
|
||||
}
|
||||
action = CLAct_Nothing;
|
||||
}break;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3415,17 +3415,6 @@ App_Init_Sig(app_init){
|
|||
copy(dest, make_string((char*)clipboard.str, clipboard.size));
|
||||
}
|
||||
|
||||
// NOTE(allen): delay setup
|
||||
models->delay1.general = &models->mem.general;
|
||||
models->delay1.max = 16;
|
||||
models->delay1.acts = (Delayed_Action*)general_memory_allocate(
|
||||
&models->mem.general, models->delay1.max*sizeof(Delayed_Action), 0);
|
||||
|
||||
models->delay2.general = &models->mem.general;
|
||||
models->delay2.max = 16;
|
||||
models->delay2.acts = (Delayed_Action*)general_memory_allocate(
|
||||
&models->mem.general, models->delay2.max*sizeof(Delayed_Action), 0);
|
||||
|
||||
// NOTE(allen): style setup
|
||||
app_hardcode_styles(models);
|
||||
|
||||
|
@ -3455,12 +3444,12 @@ App_Init_Sig(app_init){
|
|||
|
||||
internal i32
|
||||
update_cli_handle_with_file(System_Functions *system, Models *models,
|
||||
CLI_Handles *cli, Editing_File *file, char *dest, i32 max, b32 cursor_at_end){
|
||||
CLI_Handles *cli, Editing_File *file, char *dest, i32 max, b32 cursor_at_end){
|
||||
i32 result = 0;
|
||||
u32 amount;
|
||||
|
||||
for (system->cli_begin_update(cli);
|
||||
system->cli_update_step(cli, dest, max, &amount);){
|
||||
system->cli_update_step(cli, dest, max, &amount);){
|
||||
amount = eol_in_place_convert_in(dest, amount);
|
||||
output_file_append(system, models, file, make_string(dest, amount), cursor_at_end);
|
||||
result = 1;
|
||||
|
@ -3482,8 +3471,8 @@ update_cli_handle_with_file(System_Functions *system, Models *models,
|
|||
}
|
||||
|
||||
for (View_Iter iter = file_view_iter_init(&models->layout, file, 0);
|
||||
file_view_iter_good(iter);
|
||||
iter = file_view_iter_next(iter)){
|
||||
file_view_iter_good(iter);
|
||||
iter = file_view_iter_next(iter)){
|
||||
view_cursor_move(iter.view, new_cursor);
|
||||
}
|
||||
|
||||
|
@ -3695,7 +3684,7 @@ App_Step_Sig(app_step){
|
|||
Divider_And_ID div = layout_get_divider(&models->layout, mouse_divider_id);
|
||||
|
||||
if (which_child == mouse_divider_side &&
|
||||
div.divider->v_divider == mouse_divider_vertical){
|
||||
div.divider->v_divider == mouse_divider_vertical){
|
||||
mouse_on_divider = 1;
|
||||
break;
|
||||
}
|
||||
|
@ -3824,9 +3813,15 @@ App_Step_Sig(app_step){
|
|||
|
||||
if (i < models->layout.panel_count){
|
||||
view_open_file(system, models, panel->view, filename);
|
||||
#if 0
|
||||
if (i == 0){
|
||||
delayed_set_line(&models->delay1, panel, models->settings.initial_line);
|
||||
if (panel->view->file_data.file){
|
||||
// TODO(allen): How to set the cursor of a file on the first frame?
|
||||
view_compute_cursor_from_line_pos(panel->view, models->settings.initial_line, 1);
|
||||
view_move_view_to_cursor(panel->view, &panel->view->recent->scroll);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else{
|
||||
view_open_file(system, models, 0, filename);
|
||||
|
@ -4293,111 +4288,6 @@ App_Step_Sig(app_step){
|
|||
|
||||
update_command_data(vars, cmd);
|
||||
|
||||
// NOTE(allen): process as many delayed actions as possible
|
||||
if (models->delay1.count > 0){
|
||||
Working_Set *working_set = &models->working_set;
|
||||
Mem_Options *mem = &models->mem;
|
||||
General_Memory *general = &mem->general;
|
||||
|
||||
i32 count = models->delay1.count;
|
||||
models->delay1.count = 0;
|
||||
models->delay2.count = 0;
|
||||
|
||||
Delayed_Action *act = models->delay1.acts;
|
||||
for (i32 i = 0; i < count; ++i, ++act){
|
||||
String string = act->string;
|
||||
Panel *panel = act->panel;
|
||||
Editing_File *file = act->file;
|
||||
i32 integer = act->integer;
|
||||
|
||||
// TODO(allen): Paramter checking in each DACT case.
|
||||
switch (act->type){
|
||||
#if 0
|
||||
case DACT_TOUCH_FILE:
|
||||
{
|
||||
|
||||
}break;
|
||||
#endif
|
||||
#if 0
|
||||
case DACT_OPEN:
|
||||
case DACT_OPEN_BACKGROUND:
|
||||
{
|
||||
|
||||
}break;
|
||||
#endif
|
||||
|
||||
case DACT_SET_LINE:
|
||||
{
|
||||
// TODO(allen): deduplicate
|
||||
if (panel){
|
||||
file = panel->view->file_data.file;
|
||||
}
|
||||
else if (string.str && string.size > 0){
|
||||
file = working_set_lookup_file(working_set, string);
|
||||
}
|
||||
if (file){
|
||||
if (file->state.is_loading){
|
||||
file->preload.start_line = integer;
|
||||
}
|
||||
else{
|
||||
// TODO(allen): write this case
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
#if 0
|
||||
case DACT_SAVE:
|
||||
case DACT_SAVE_AS:
|
||||
{
|
||||
|
||||
}break;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
case DACT_NEW:
|
||||
{
|
||||
|
||||
}break;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
case DACT_SWITCH:
|
||||
{
|
||||
|
||||
}break;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
case DACT_KILL:
|
||||
{
|
||||
|
||||
}break;
|
||||
#endif
|
||||
|
||||
|
||||
#if 0
|
||||
case DACT_TRY_KILL:
|
||||
{
|
||||
|
||||
}break;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
case DACT_CLOSE:
|
||||
{
|
||||
|
||||
}break;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
if (string.str){
|
||||
general_memory_free(general, string.str);
|
||||
}
|
||||
}
|
||||
Swap(Delay, models->delay1, models->delay2);
|
||||
}
|
||||
|
||||
end_temp_memory(param_stack_temp);
|
||||
|
||||
// NOTE(allen): send resize messages to panels that have changed size
|
||||
|
|
|
@ -58,8 +58,6 @@ struct Models{
|
|||
char hot_dir_base_[256];
|
||||
Hot_Directory hot_directory;
|
||||
|
||||
Delay delay1, delay2;
|
||||
|
||||
Panel *prev_mouse_panel;
|
||||
|
||||
Custom_API config_api;
|
||||
|
|
|
@ -44,7 +44,6 @@
|
|||
#include "4ed_file.cpp"
|
||||
#include "4ed_gui.cpp"
|
||||
#include "4ed_layout.cpp"
|
||||
#include "4ed_delay.cpp"
|
||||
#include "4ed_app_models.h"
|
||||
#include "4ed_file_view.cpp"
|
||||
#include "4ed.cpp"
|
||||
|
|
120
4ed_delay.cpp
120
4ed_delay.cpp
|
@ -1,120 +0,0 @@
|
|||
enum Action_Type{
|
||||
DACT_SET_LINE,
|
||||
};
|
||||
|
||||
struct Delayed_Action{
|
||||
Action_Type type;
|
||||
String string;
|
||||
Panel* panel;
|
||||
Editing_File* file;
|
||||
i32 integer;
|
||||
};
|
||||
|
||||
struct Delay{
|
||||
General_Memory* general;
|
||||
Delayed_Action* acts;
|
||||
i32 count;
|
||||
i32 max;
|
||||
};
|
||||
|
||||
internal String
|
||||
str_alloc_copy(General_Memory *general, String str){
|
||||
String result;
|
||||
result.memory_size = str.memory_size + 1;
|
||||
result.size = str.size;
|
||||
result.str = (char*)general_memory_allocate(general, result.memory_size, 0);
|
||||
memcpy(result.str, str.str, str.size);
|
||||
result.str[result.size] = 0;
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action
|
||||
delayed_action_zero(){
|
||||
Delayed_Action result = {(Action_Type)0};
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action*
|
||||
delayed_action_(Delay *delay, Action_Type type){
|
||||
Delayed_Action *result;
|
||||
if (delay->count == delay->max){
|
||||
delay->max *= 2;
|
||||
delay->acts = (Delayed_Action*)general_memory_reallocate(delay->general, delay->acts, delay->count*sizeof(Delayed_Action), delay->max*sizeof(Delayed_Action), 0);
|
||||
}
|
||||
result = delay->acts + delay->count++;
|
||||
*result = delayed_action_zero();
|
||||
result->type = type;
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action*
|
||||
delayed_action_(Delay *delay, Action_Type type, String string){
|
||||
Delayed_Action *result;
|
||||
result = delayed_action_(delay, type);
|
||||
result->string = str_alloc_copy(delay->general, string);
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action*
|
||||
delayed_action_(Delay *delay, Action_Type type, Panel* panel){
|
||||
Delayed_Action *result;
|
||||
result = delayed_action_(delay, type);
|
||||
result->panel = panel;
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action*
|
||||
delayed_action_(Delay *delay, Action_Type type, Editing_File* file){
|
||||
Delayed_Action *result;
|
||||
result = delayed_action_(delay, type);
|
||||
result->file = file;
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action*
|
||||
delayed_action_(Delay *delay, Action_Type type, Editing_File* file, Panel* panel){
|
||||
Delayed_Action *result;
|
||||
result = delayed_action_(delay, type);
|
||||
result->file = file;
|
||||
result->panel = panel;
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action*
|
||||
delayed_action_(Delay *delay, Action_Type type, String string, Panel* panel){
|
||||
Delayed_Action *result;
|
||||
result = delayed_action_(delay, type);
|
||||
result->string = str_alloc_copy(delay->general, string);
|
||||
result->panel = panel;
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action*
|
||||
delayed_action_(Delay *delay, Action_Type type, String string, Editing_File* file){
|
||||
Delayed_Action *result;
|
||||
result = delayed_action_(delay, type);
|
||||
result->string = str_alloc_copy(delay->general, string);
|
||||
result->file = file;
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action*
|
||||
delayed_action_(Delay *delay, Action_Type type, Panel* panel, i32 integer){
|
||||
Delayed_Action *result;
|
||||
result = delayed_action_(delay, type);
|
||||
result->panel = panel;
|
||||
result->integer = integer;
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline Delayed_Action*
|
||||
delayed_action_repush(Delay *delay, Delayed_Action *act){
|
||||
Delayed_Action *new_act = delayed_action_(delay, (Action_Type)0);
|
||||
*new_act = *act;
|
||||
if (act->string.str){
|
||||
new_act->string = str_alloc_copy(delay->general, act->string);
|
||||
}
|
||||
return(new_act);
|
||||
}
|
||||
|
||||
#define delayed_set_line(delay, ...) delayed_action_(delay, DACT_SET_LINE, ##__VA_ARGS__)
|
24
4ed_file.cpp
24
4ed_file.cpp
|
@ -111,9 +111,6 @@ struct Editing_File_Settings{
|
|||
// NOTE(allen): This part of the Editing_File is cleared whenever
|
||||
// the contents of the file is set.
|
||||
struct Editing_File_State{
|
||||
b32 is_dummy;
|
||||
b32 is_loading;
|
||||
|
||||
i16 font_id;
|
||||
Buffer_Type buffer;
|
||||
|
||||
|
@ -135,10 +132,6 @@ struct Editing_File_State{
|
|||
u64 last_sys_write_time;
|
||||
};
|
||||
|
||||
struct Editing_File_Preload{
|
||||
i32 start_line;
|
||||
};
|
||||
|
||||
struct Editing_File_Name{
|
||||
char live_name_[256];
|
||||
char source_path_[256];
|
||||
|
@ -168,9 +161,10 @@ struct Editing_File{
|
|||
// NOTE(allen): node must be the first member of Editing_File!
|
||||
File_Node node;
|
||||
Editing_File_Settings settings;
|
||||
union{
|
||||
struct{
|
||||
b32 is_loading;
|
||||
b32 is_dummy;
|
||||
Editing_File_State state;
|
||||
Editing_File_Preload preload;
|
||||
};
|
||||
Editing_File_Name name;
|
||||
Buffer_Slot_ID id;
|
||||
|
@ -317,7 +311,7 @@ working_set_alloc_always(Working_Set *working_set, General_Memory *general){
|
|||
|
||||
inline void
|
||||
working_set_free_file(Working_Set *working_set, Editing_File *file){
|
||||
file->state.is_dummy = 1;
|
||||
file->is_dummy = 1;
|
||||
dll_remove(&file->node);
|
||||
dll_insert(&working_set->free_sentinel, &file->node);
|
||||
--working_set->file_count;
|
||||
|
@ -349,7 +343,7 @@ inline Editing_File*
|
|||
working_set_get_active_file(Working_Set *working_set, Buffer_Slot_ID id){
|
||||
Editing_File *result = 0;
|
||||
result = working_set_index(working_set, id);
|
||||
if (result && result->state.is_dummy){
|
||||
if (result && result->is_dummy){
|
||||
result = 0;
|
||||
}
|
||||
return(result);
|
||||
|
@ -383,7 +377,7 @@ working_set_init(Working_Set *working_set, Partition *partition, General_Memory
|
|||
|
||||
null_file = working_set_index(working_set, 0);
|
||||
dll_remove(&null_file->node);
|
||||
null_file->state.is_dummy = 1;
|
||||
null_file->is_dummy = 1;
|
||||
++working_set->file_count;
|
||||
|
||||
table_size = working_set->file_max;
|
||||
|
@ -489,7 +483,7 @@ working_set_lookup_file(Working_Set *working_set, String string){
|
|||
internal void
|
||||
touch_file(Working_Set *working_set, Editing_File *file){
|
||||
if (file){
|
||||
Assert(!file->state.is_dummy);
|
||||
Assert(!file->is_dummy);
|
||||
dll_remove(&file->node);
|
||||
dll_insert(&working_set->used_sentinel, &file->node);
|
||||
}
|
||||
|
@ -650,7 +644,7 @@ buffer_needs_save(Editing_File *file){
|
|||
inline b32
|
||||
file_is_ready(Editing_File *file){
|
||||
b32 result = 0;
|
||||
if (file && file->state.is_loading == 0){
|
||||
if (file && file->is_loading == 0){
|
||||
result = 1;
|
||||
}
|
||||
return(result);
|
||||
|
@ -672,7 +666,7 @@ inline void
|
|||
file_set_to_loading(Editing_File *file){
|
||||
file->state = editing_file_state_zero();
|
||||
file->settings = editing_file_settings_zero();
|
||||
file->state.is_loading = 1;
|
||||
file->is_loading = 1;
|
||||
}
|
||||
|
||||
// BOTTOM
|
||||
|
|
|
@ -627,7 +627,7 @@ view_compute_lowest_line(View *view){
|
|||
f32 max_width = view_file_width(view);
|
||||
|
||||
Editing_File *file = view->file_data.file;
|
||||
Assert(!file->state.is_dummy);
|
||||
Assert(!file->is_dummy);
|
||||
f32 width = file->state.buffer.line_widths[last_line];
|
||||
i32 line_span = view_wrapped_line_span(width, max_width);
|
||||
lowest_line += line_span - 1;
|
||||
|
@ -878,7 +878,7 @@ file_first_lex_parallel(System_Functions *system,
|
|||
General_Memory *general, Editing_File *file){
|
||||
file->settings.tokens_exist = 1;
|
||||
|
||||
if (file->state.is_loading == 0 && file->state.still_lexing == 0){
|
||||
if (file->is_loading == 0 && file->state.still_lexing == 0){
|
||||
Assert(file->state.token_stack.tokens == 0);
|
||||
|
||||
file->state.tokens_complete = 0;
|
||||
|
@ -2428,7 +2428,7 @@ view_clean_whitespace(System_Functions *system, Models *models, View *view){
|
|||
i32 edit_max = line_count * 2;
|
||||
i32 edit_count = 0;
|
||||
|
||||
Assert(file && !file->state.is_dummy);
|
||||
Assert(file && !file->is_dummy);
|
||||
|
||||
Temp_Memory temp = begin_temp_memory(part);
|
||||
Buffer_Edit *edits = push_array(part, Buffer_Edit, edit_max);
|
||||
|
@ -2844,7 +2844,7 @@ view_auto_tab_tokens(System_Functions *system, Models *models,
|
|||
Partition *part = &mem->part;
|
||||
Buffer *buffer = &file->state.buffer;
|
||||
|
||||
Assert(file && !file->state.is_dummy);
|
||||
Assert(file && !file->is_dummy);
|
||||
Cpp_Token_Stack tokens = file->state.token_stack;
|
||||
Assert(tokens.tokens);
|
||||
|
||||
|
@ -3506,7 +3506,7 @@ internal b32
|
|||
file_step(View *view, i32_Rect region, Input_Summary *user_input, b32 is_active){
|
||||
i32 is_animating = 0;
|
||||
Editing_File *file = view->file_data.file;
|
||||
if (file && !file->state.is_loading){
|
||||
if (file && !file->is_loading){
|
||||
f32 max_visible_y = view_file_height(view);
|
||||
f32 max_x = view_file_width(view);
|
||||
|
||||
|
@ -4232,7 +4232,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
|
|||
used_nodes = &working_set->used_sentinel;
|
||||
for (dll_items(node, used_nodes)){
|
||||
file = (Editing_File*)node;
|
||||
Assert(!file->state.is_dummy);
|
||||
Assert(!file->is_dummy);
|
||||
|
||||
if (filename_match(view->dest, &absolutes, file->name.live_name, 1)){
|
||||
iter = file_view_iter_init(layout, file, 0);
|
||||
|
@ -4687,7 +4687,7 @@ draw_file_loaded(View *view, i32_Rect rect, b32 is_active, Render_Target *target
|
|||
i32 max_x = rect.x1 - rect.x0;
|
||||
i32 max_y = rect.y1 - rect.y0 + line_height;
|
||||
|
||||
Assert(file && !file->state.is_dummy && buffer_good(&file->state.buffer));
|
||||
Assert(file && !file->is_dummy && buffer_good(&file->state.buffer));
|
||||
|
||||
b32 tokens_use = 0;
|
||||
Cpp_Token_Stack token_stack = {};
|
||||
|
@ -4941,7 +4941,7 @@ draw_file_bar(Render_Target *target, View *view, Editing_File *file, i32_Rect re
|
|||
intbar_draw_string(target, &bar, file->name.live_name, base_color);
|
||||
intbar_draw_string(target, &bar, make_lit_string(" -"), base_color);
|
||||
|
||||
if (file->state.is_loading){
|
||||
if (file->is_loading){
|
||||
intbar_draw_string(target, &bar, make_lit_string(" loading"), base_color);
|
||||
}
|
||||
else{
|
||||
|
|
185
4ed_metagen.cpp
185
4ed_metagen.cpp
|
@ -143,188 +143,6 @@ char* generate_keycode_enum(){
|
|||
return(filename);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
char daction_enum_name[] = "Action_Type";
|
||||
char *daction_enum[] = {
|
||||
#if 0
|
||||
"OPEN",
|
||||
"OPEN_BACKGROUND",
|
||||
#endif
|
||||
"SET_LINE",
|
||||
#if 0
|
||||
"SAVE_AS",
|
||||
"SAVE",
|
||||
"NEW",
|
||||
"SWITCH",
|
||||
"TRY_KILL",
|
||||
"KILL",
|
||||
"TOUCH_FILE",
|
||||
"CLOSE",
|
||||
#endif
|
||||
};
|
||||
|
||||
char str_alloc_copy[] =
|
||||
"internal String\n"
|
||||
"str_alloc_copy(General_Memory *general, String str){\n"
|
||||
" String result;\n"
|
||||
" result.memory_size = str.memory_size + 1;\n"
|
||||
" result.size = str.size;\n"
|
||||
" result.str = (char*)general_memory_allocate(general, result.memory_size, 0);\n"
|
||||
" memcpy(result.str, str.str, str.size);\n"
|
||||
" result.str[result.size] = 0;\n"
|
||||
" return(result);\n"
|
||||
"}\n\n";
|
||||
|
||||
char delayed_action_zero[] =
|
||||
"inline Delayed_Action\n"
|
||||
"delayed_action_zero(){\n"
|
||||
" Delayed_Action result = {(Action_Type)0};\n"
|
||||
" return(result);\n"
|
||||
"}\n\n"
|
||||
;
|
||||
|
||||
char daction_name[] = "Delayed_Action";
|
||||
Struct_Field daction_fields[] = {
|
||||
{"Action_Type", "type"},
|
||||
};
|
||||
Struct_Field daction_fields_primary[] = {
|
||||
{"String", "string"},
|
||||
{"Panel*", "panel"},
|
||||
{"Editing_File*", "file"},
|
||||
{"i32", "integer"},
|
||||
};
|
||||
enum Daction_Field_Handle{
|
||||
dfph_null,
|
||||
dfph_string,
|
||||
dfph_panel,
|
||||
dfph_file,
|
||||
dfph_integer,
|
||||
};
|
||||
Daction_Field_Handle dact_param_sets[] = {
|
||||
dfph_string, dfph_null,
|
||||
dfph_panel, dfph_null,
|
||||
dfph_file, dfph_null,
|
||||
dfph_file, dfph_panel, dfph_null,
|
||||
dfph_string, dfph_panel, dfph_null,
|
||||
dfph_string, dfph_file, dfph_null,
|
||||
dfph_panel, dfph_integer, dfph_null,
|
||||
};
|
||||
|
||||
char delay_name[] = "Delay";
|
||||
Struct_Field delay_fields[] = {
|
||||
{"General_Memory*", "general"},
|
||||
{"Delayed_Action*", "acts"},
|
||||
{"i32", "count"},
|
||||
{"i32", "max"},
|
||||
};
|
||||
|
||||
char delayed_action_function_top[] =
|
||||
"inline Delayed_Action*\n"
|
||||
"delayed_action_(Delay *delay, Action_Type type";
|
||||
|
||||
char delayed_action_function_bottom[] =
|
||||
"){\n"
|
||||
" Delayed_Action *result;\n"
|
||||
" if (delay->count == delay->max){\n"
|
||||
" delay->max *= 2;\n"
|
||||
" delay->acts = (Delayed_Action*)general_memory_reallocate("
|
||||
"delay->general, delay->acts, delay->count*sizeof(Delayed_Action), delay->max*sizeof(Delayed_Action), 0);\n"
|
||||
" }\n"
|
||||
" result = delay->acts + delay->count++;\n"
|
||||
" *result = delayed_action_zero();\n"
|
||||
" result->type = type;\n"
|
||||
" return(result);\n"
|
||||
"}\n\n";
|
||||
|
||||
char delayed_action_special_param[] = ", %s %s";
|
||||
|
||||
char delayed_action_specialized_middle[] =
|
||||
"){\n"
|
||||
" Delayed_Action *result;\n"
|
||||
" result = delayed_action_(delay, type);\n";
|
||||
|
||||
char delayed_action_special_line[] =
|
||||
" result->%s = %s;\n";
|
||||
|
||||
char delayed_action_special_string_line[] =
|
||||
" result->%s = str_alloc_copy(delay->general, %s);\n";
|
||||
|
||||
char delayed_action_specialized_bottom[] =
|
||||
" return(result);\n"
|
||||
"}\n\n";
|
||||
|
||||
char delayed_action_macro[] =
|
||||
"#define delayed_%s(delay, ...) delayed_action_(delay, DACT_%s, ##__VA_ARGS__)\n";
|
||||
|
||||
char delayed_action_repush_function[] =
|
||||
"inline Delayed_Action*\n"
|
||||
"delayed_action_repush(Delay *delay, Delayed_Action *act){\n"
|
||||
" Delayed_Action *new_act = delayed_action_(delay, (Action_Type)0);\n"
|
||||
" *new_act = *act;\n"
|
||||
" if (act->string.str){\n"
|
||||
" new_act->string = str_alloc_copy(delay->general, act->string);\n"
|
||||
" }\n"
|
||||
" return(new_act);\n"
|
||||
"}\n\n";
|
||||
|
||||
char* generate_delayed_action(){
|
||||
FILE *file;
|
||||
char *filename = "4ed_delay.cpp";
|
||||
char scratch[256];
|
||||
int i,j;
|
||||
|
||||
file = fopen(filename, "wb");
|
||||
|
||||
fprintf(file, "enum %s{\n", daction_enum_name);
|
||||
for (i = 0; i < ArrayCount(daction_enum); ++i){
|
||||
fprintf(file, " DACT_%s,\n", daction_enum[i]);
|
||||
}
|
||||
fprintf(file, "};\n\n");
|
||||
|
||||
struct_begin(file, daction_name);
|
||||
struct_fields(file, daction_fields, ArrayCount(daction_fields));
|
||||
struct_fields(file, daction_fields_primary, ArrayCount(daction_fields_primary));
|
||||
struct_end(file);
|
||||
|
||||
struct_begin(file, delay_name);
|
||||
struct_fields(file, delay_fields, ArrayCount(delay_fields));
|
||||
struct_end(file);
|
||||
|
||||
fprintf(file, "%s", str_alloc_copy);
|
||||
fprintf(file, "%s", delayed_action_zero);
|
||||
fprintf(file, "%s%s", delayed_action_function_top, delayed_action_function_bottom);
|
||||
|
||||
for (i = 0; i < ArrayCount(dact_param_sets); ++i){
|
||||
j = i;
|
||||
fprintf(file, "%s", delayed_action_function_top);
|
||||
for (; dact_param_sets[i] != dfph_null; ++i){
|
||||
Struct_Field field = daction_fields_primary[dact_param_sets[i] - 1];
|
||||
fprintf(file, delayed_action_special_param, field.type, field.name);
|
||||
}
|
||||
fprintf(file, "%s", delayed_action_specialized_middle);
|
||||
for (; dact_param_sets[j] != dfph_null; ++j){
|
||||
int handle = (int)(dact_param_sets[j]);
|
||||
Struct_Field field = daction_fields_primary[handle - 1];
|
||||
if (handle == dfph_string){
|
||||
fprintf(file, delayed_action_special_string_line, field.name, field.name);
|
||||
}
|
||||
else{
|
||||
fprintf(file, delayed_action_special_line, field.name, field.name);
|
||||
}
|
||||
}
|
||||
fprintf(file, "%s", delayed_action_specialized_bottom);
|
||||
}
|
||||
|
||||
fprintf(file, "%s", delayed_action_repush_function);
|
||||
|
||||
for (i = 0; i < ArrayCount(daction_enum); ++i){
|
||||
to_lower(daction_enum[i], scratch);
|
||||
fprintf(file, delayed_action_macro, scratch, daction_enum[i]);
|
||||
}
|
||||
|
||||
return(filename);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
char* bar_style_fields[] = {
|
||||
"bar",
|
||||
|
@ -669,9 +487,6 @@ int main(){
|
|||
filename = generate_keycode_enum();
|
||||
printf("gen success: %s\n", filename);
|
||||
|
||||
filename = generate_delayed_action();
|
||||
printf("gen success: %s\n", filename);
|
||||
|
||||
filename = generate_style();
|
||||
printf("gen success: %s\n", filename);
|
||||
|
||||
|
|
Loading…
Reference in New Issue