diff --git a/4ed.cpp b/4ed.cpp index 2137b137..19eee6a3 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -33,9 +33,6 @@ struct CLI_List{ i32 count, max; }; -#define SysAppCreateView 0x1 -#define SysAppCreateNewBuffer 0x2 - struct Complete_State{ Search_Set set; Search_Iter iter; @@ -49,7 +46,6 @@ struct Command_Data{ Models *models; struct App_Vars *vars; System_Functions *system; - Exchange *exchange; Live_Views *live_set; Panel *panel; @@ -167,7 +163,6 @@ do_feedback_message(System_Functions *system, Models *models, String value){ #define USE_PANEL(n) Panel *n = command->panel #define USE_VIEW(n) View *n = command->view #define USE_FILE(n,v) Editing_File *n = (v)->file_data.file -#define USE_EXCHANGE(n) Exchange *n = command->exchange #define REQ_OPEN_VIEW(n) View *n = command->panel->view; if (view_lock_level(n) > LockLevel_Open) return #define REQ_READABLE_VIEW(n) View *n = command->panel->view; if (view_lock_level(n) > LockLevel_NoWrite) return @@ -219,7 +214,7 @@ param_stack_end(Partition *part){ } internal View* -panel_make_empty(System_Functions *system, Exchange *exchange, App_Vars *vars, Panel *panel){ +panel_make_empty(System_Functions *system, App_Vars *vars, Panel *panel){ Models *models = &vars->models; View_And_ID new_view; @@ -1160,7 +1155,6 @@ COMMAND_DECL(open_panel_vsplit){ USE_VARS(vars); USE_MODELS(models); USE_PANEL(panel); - USE_EXCHANGE(exchange); if (models->layout.panel_count < models->layout.panel_max_count){ Split_Result split = layout_split_panel(&models->layout, panel, 1); @@ -1179,16 +1173,14 @@ COMMAND_DECL(open_panel_vsplit){ panel2->prev_inner = panel2->inner; models->layout.active_panel = (i32)(panel2 - models->layout.panels); - panel_make_empty(system, exchange, vars, panel2); + panel_make_empty(system, vars, panel2); } } COMMAND_DECL(open_panel_hsplit){ - USE_VARS(vars); USE_MODELS(models); USE_PANEL(panel); - USE_EXCHANGE(exchange); if (models->layout.panel_count < models->layout.panel_max_count){ Split_Result split = layout_split_panel(&models->layout, panel, 0); @@ -1207,16 +1199,14 @@ COMMAND_DECL(open_panel_hsplit){ panel2->prev_inner = panel2->inner; models->layout.active_panel = (i32)(panel2 - models->layout.panels); - panel_make_empty(system, exchange, vars, panel2); + panel_make_empty(system, vars, panel2); } } COMMAND_DECL(close_panel){ - USE_MODELS(models); USE_PANEL(panel); USE_VIEW(view); - USE_EXCHANGE(exchange); Panel *panel_ptr, *used_panels; Divider_And_ID div, parent_div, child_div; @@ -1226,7 +1216,7 @@ COMMAND_DECL(close_panel){ i32 active; if (models->layout.panel_count > 1){ - live_set_free_view(system, exchange, command->live_set, view); + live_set_free_view(system, command->live_set, view); panel->view = 0; div = layout_get_divider(&models->layout, panel->parent); @@ -3411,7 +3401,7 @@ App_Init_Sig(app_init){ // NOTE(allen): init first panel Panel_And_ID p = layout_alloc_panel(&models->layout); - panel_make_empty(system, exchange, vars, p.panel); + panel_make_empty(system, vars, p.panel); models->layout.active_panel = p.id; String hdbase = make_fixed_width_string(models->hot_dir_base_); @@ -3733,7 +3723,6 @@ App_Step_Sig(app_step){ cmd->models = models; cmd->vars = vars; cmd->system = system; - cmd->exchange = exchange; cmd->live_set = &vars->live_set; cmd->panel = models->layout.panels + models->layout.active_panel; @@ -4066,7 +4055,7 @@ App_Step_Sig(app_step){ GUI_Scroll_Vars *vars = view->current_scroll; // TODO(allen): I feel like the scroll context should actually not // be allowed to change in here at all. - result = do_input_file_view(system, exchange, view, panel->inner, active, + result = do_input_file_view(system, view, panel->inner, active, &summary, *vars, view->scroll_region); if (result.is_animating){ app_result.animating = 1; @@ -4356,7 +4345,8 @@ App_Step_Sig(app_step){ draw_rectangle(target, full, back_color); draw_push_clip(target, panel->inner); - do_render_file_view(system, exchange, view, cmd->view, panel->inner, active, target, &dead_input); + do_render_file_view(system, view, cmd->view, + panel->inner, active, target, &dead_input); draw_pop_clip(target); u32 margin_color; diff --git a/4ed.h b/4ed.h index c9d27895..47b66a5b 100644 --- a/4ed.h +++ b/4ed.h @@ -86,7 +86,6 @@ typedef App_Read_Command_Line_Sig(App_Read_Command_Line); name(System_Functions *system, \ Render_Target *target, \ Application_Memory *memory, \ - Exchange *exchange, \ String clipboard, \ String current_directory, \ Custom_API api) @@ -124,7 +123,6 @@ struct Application_Step_Input{ name(System_Functions *system, \ Render_Target *target, \ Application_Memory *memory, \ - Exchange *exchange, \ Application_Step_Input *input, \ Application_Step_Result *result) diff --git a/4ed_app_target.cpp b/4ed_app_target.cpp index 1ec9a45b..d3f4b609 100644 --- a/4ed_app_target.cpp +++ b/4ed_app_target.cpp @@ -39,7 +39,6 @@ #include "4ed_style.h" #include "4ed_style.cpp" -#include "4ed_exchange.cpp" #include "4ed_command.cpp" #include "4ed_file.cpp" #include "4ed_gui.cpp" diff --git a/4ed_exchange.cpp b/4ed_exchange.cpp deleted file mode 100644 index 24b1d9ae..00000000 --- a/4ed_exchange.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Mr. 4th Dimention - Allen Webster - * - * 9.12.2015 - * - * Exchange stuff - * - */ - -// TOP - -// NOTE(allen): Uhhh.... is it just me or did it get awkward -// in here when I deleted all the file exchange stuff? - -internal b32 -queue_job_is_pending(Work_Queue *queue, u32 job_id){ - b32 result; - u32 job_index; - Full_Job_Data *full_job; - - job_index = job_id % QUEUE_WRAP; - full_job = queue->jobs + job_index; - - Assert(full_job->id == job_id); - - result = 0; - if (full_job->running_thread != 0){ - result = 1; - } - - return(result); -} - -// BOTTOM - diff --git a/4ed_file_view.cpp b/4ed_file_view.cpp index f7fd5d17..d858b124 100644 --- a/4ed_file_view.cpp +++ b/4ed_file_view.cpp @@ -844,8 +844,6 @@ Job_Callback_Sig(job_full_lex){ } system->release_lock(FRAME_LOCK); - exchange->force_redraw = 1; - // NOTE(allen): These are outside the locked section because I don't // think getting these out of order will cause critical bugs, and I // want to minimize what's done in locked sections. @@ -4459,7 +4457,7 @@ struct Input_Process_Result{ }; internal Input_Process_Result -do_input_file_view(System_Functions *system, Exchange *exchange, +do_input_file_view(System_Functions *system, View *view, i32_Rect rect, b32 is_active, Input_Summary *user_input, GUI_Scroll_Vars vars, i32_Rect region){ @@ -5168,8 +5166,8 @@ draw_style_preview(GUI_Target *gui_target, Render_Target *target, View *view, i3 } internal i32 -do_render_file_view(System_Functions *system, Exchange *exchange, - View *view, View *active, i32_Rect rect, b32 is_active, +do_render_file_view(System_Functions *system, View *view, + View *active, i32_Rect rect, b32 is_active, Render_Target *target, Input_Summary *user_input){ Editing_File *file = view->file_data.file; @@ -5635,7 +5633,7 @@ live_set_alloc_view(Live_Views *live_set, Panel *panel, Models *models){ } inline void -live_set_free_view(System_Functions *system, Exchange *exchange, Live_Views *live_set, View *view){ +live_set_free_view(System_Functions *system, Live_Views *live_set, View *view){ Assert(live_set->count > 0); --live_set->count; file_view_free_buffers(view); diff --git a/4ed_system.h b/4ed_system.h index 32527d58..6597a83e 100644 --- a/4ed_system.h +++ b/4ed_system.h @@ -157,9 +157,11 @@ thread_memory_zero(){ struct Thread_Exchange; struct System_Functions; -#define Job_Callback_Sig(name) void name( \ - System_Functions *system, Thread_Context *thread, Thread_Memory *memory, \ - Thread_Exchange *exchange, void *data[2]) +#define Job_Callback_Sig(name) void name( \ + System_Functions *system, \ + Thread_Context *thread, \ + Thread_Memory *memory, \ + void *data[2]) typedef Job_Callback_Sig(Job_Callback); struct Job_Data{ @@ -189,11 +191,6 @@ struct Work_Queue{ #define JOB_ID_WRAP (ArrayCount(queue->jobs) * 4) #define QUEUE_WRAP (ArrayCount(queue->jobs)) -struct Thread_Exchange{ - Work_Queue queues[THREAD_GROUP_COUNT]; - volatile u32 force_redraw; -}; - #define Sys_Post_Job_Sig(name) u32 name(Thread_Group_ID group_id, Job_Data job) typedef Sys_Post_Job_Sig(System_Post_Job); @@ -267,9 +264,5 @@ struct System_Functions{ char slash; }; -struct Exchange{ - Thread_Exchange thread; -}; - // BOTTOM diff --git a/README.txt b/README.txt index 5ca9b38e..fb715b69 100644 --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -Distribution Date: 28.5.2016 (dd.mm.yyyy) +Distribution Date: 31.5.2016 (dd.mm.yyyy) Thank you for contributing to the 4coder project! diff --git a/SUPERREADME.txt b/SUPERREADME.txt index 820ddefc..d7220460 100644 --- a/SUPERREADME.txt +++ b/SUPERREADME.txt @@ -1,4 +1,4 @@ -Distribution Date: 28.5.2016 (dd.mm.yyyy) +Distribution Date: 31.5.2016 (dd.mm.yyyy) Thank you for contributing to the 4coder project! diff --git a/TODO.txt b/TODO.txt index 083fa665..dae85159 100644 --- a/TODO.txt +++ b/TODO.txt @@ -68,10 +68,11 @@ ; [X] miblo's off screen cursor thing ; [X] new file is messed up for code files, it never finishes parsing! ; [X] key presses that should be consumed in the GUI are now passed to the file! +; [X] paste snaps the cursor back into view! +; ; [] indication on failure to save ; [] clean whitespace doesn't appear to be cleaning trailing whitespace anymore??? ; -; [] paste snaps the cursor back into view! ; ; TODOS diff --git a/win32_4ed.cpp b/win32_4ed.cpp index 085e2305..56ea7f54 100644 --- a/win32_4ed.cpp +++ b/win32_4ed.cpp @@ -125,6 +125,7 @@ struct Win32_Vars{ Plat_Settings settings; + Work_Queue queues[THREAD_GROUP_COUNT]; Thread_Group groups[THREAD_GROUP_COUNT]; CRITICAL_SECTION locks[LOCK_COUNT]; Thread_Memory *thread_memory; @@ -164,7 +165,6 @@ struct Win32_Vars{ globalvar Win32_Vars win32vars; globalvar Application_Memory memory_vars; -globalvar Exchange exchange_vars; // @@ -319,8 +319,8 @@ JobThreadProc(LPVOID lpParameter){ thread_memory->size = new_size; } } - full_job->job.callback(&win32vars.system, thread, thread_memory, - &exchange_vars.thread, full_job->job.data); + full_job->job.callback(&win32vars.system, + thread, thread_memory, full_job->job.data); PostMessage(win32vars.window_handle, WM_4coder_ANIMATE, 0, 0); full_job->running_thread = 0; thread->running = 0; @@ -335,7 +335,7 @@ JobThreadProc(LPVOID lpParameter){ internal Sys_Post_Job_Sig(system_post_job){ - Work_Queue *queue = exchange_vars.thread.queues + group_id; + Work_Queue *queue = win32vars.queues + group_id; Assert((queue->write_position + 1) % QUEUE_WRAP != queue->read_position % QUEUE_WRAP); @@ -366,7 +366,7 @@ Sys_Post_Job_Sig(system_post_job){ // but I still don't know what exactly I would do without it. internal Sys_Cancel_Job_Sig(system_cancel_job){ - Work_Queue *queue = exchange_vars.thread.queues + group_id; + Work_Queue *queue = win32vars.queues + group_id; Thread_Group *group = win32vars.groups + group_id; u32 job_index; @@ -414,7 +414,7 @@ system_grow_thread_memory(Thread_Memory *memory){ #if FRED_INTERNAL internal void INTERNAL_get_thread_states(Thread_Group_ID id, bool8 *running, i32 *pending){ - Work_Queue *queue = exchange_vars.thread.queues + id; + Work_Queue *queue = win32vars.queues + id; u32 write = queue->write_position; u32 read = queue->read_position; if (write < read) write += JOB_ID_WRAP; @@ -1611,7 +1611,6 @@ WinMain(HINSTANCE hInstance, char **argv = __argv; memset(&win32vars, 0, sizeof(win32vars)); - memset(&exchange_vars, 0, sizeof(exchange_vars)); // @@ -1626,7 +1625,7 @@ WinMain(HINSTANCE hInstance, Thread_Memory thread_memory[ArrayCount(background)]; win32vars.thread_memory = thread_memory; - exchange_vars.thread.queues[BACKGROUND_THREADS].semaphore = + win32vars.queues[BACKGROUND_THREADS].semaphore = Win32Handle(CreateSemaphore(0, 0, win32vars.groups[BACKGROUND_THREADS].count, 0)); @@ -1639,7 +1638,7 @@ WinMain(HINSTANCE hInstance, *memory = thread_memory_zero(); memory->id = thread->id; - thread->queue = &exchange_vars.thread.queues[BACKGROUND_THREADS]; + thread->queue = &win32vars.queues[BACKGROUND_THREADS]; thread->handle = CreateThread(0, 0, JobThreadProc, thread, creation_flag, (LPDWORD)&thread->windows_id); } @@ -1955,9 +1954,11 @@ WinMain(HINSTANCE hInstance, // Main Loop // - win32vars.app.init(&win32vars.system, &win32vars.target, - &memory_vars, &exchange_vars, - win32vars.clipboard_contents, current_directory, + win32vars.app.init(&win32vars.system, + &win32vars.target, + &memory_vars, + win32vars.clipboard_contents, + current_directory, win32vars.custom_api); system_free_memory(current_directory.str); @@ -2078,7 +2079,6 @@ WinMain(HINSTANCE hInstance, win32vars.app.step(&win32vars.system, &win32vars.target, &memory_vars, - &exchange_vars, &input, &result);