improvements to the string library
							parent
							
								
									fb1230e991
								
							
						
					
					
						commit
						48eeb211ae
					
				|  | @ -198,23 +198,21 @@ enum Command_ID{ | |||
|     cmdid_interactive_kill_buffer, | ||||
|     cmdid_kill_buffer, | ||||
|      | ||||
|     cmdid_change_active_panel, | ||||
|      | ||||
|     cmdid_to_uppercase, | ||||
|     cmdid_to_lowercase, | ||||
|      | ||||
|     cmdid_toggle_line_wrap, | ||||
|     cmdid_toggle_show_whitespace, | ||||
|      | ||||
|     cmdid_eol_dosify, | ||||
|     cmdid_eol_nixify, | ||||
|      | ||||
|     cmdid_clean_all_lines, | ||||
|     cmdid_auto_tab_range, | ||||
|     cmdid_eol_dosify, | ||||
|     cmdid_eol_nixify, | ||||
|      | ||||
|     cmdid_open_panel_vsplit, | ||||
|     cmdid_open_panel_hsplit, | ||||
|     cmdid_close_panel, | ||||
|     cmdid_change_active_panel, | ||||
|      | ||||
|     cmdid_page_up, | ||||
|     cmdid_page_down, | ||||
|  | @ -226,7 +224,9 @@ enum Command_ID{ | |||
|      | ||||
|     cmdid_hide_scrollbar, | ||||
|     cmdid_show_scrollbar, | ||||
|      | ||||
|     cmdid_set_settings, | ||||
|      | ||||
|     cmdid_command_line, | ||||
|     //
 | ||||
|     cmdid_count | ||||
|  | @ -360,7 +360,7 @@ struct Theme_Color{ | |||
| #define GET_BINDING_DATA(name) int name(void *data, int size) | ||||
| #define CUSTOM_COMMAND_SIG(name) void name(struct Application_Links *app) | ||||
| #define HOOK_SIG(name) int name(struct Application_Links *app) | ||||
| #define SCROLL_RULE_SIG(name) int name(float target_x, float target_y, float *scroll_x, float *scroll_y, int view_id, int is_new_target) | ||||
| #define SCROLL_RULE_SIG(name) int name(float target_x, float target_y, float *scroll_x, float *scroll_y, int view_id, int is_new_target, float dt) | ||||
| 
 | ||||
| extern "C"{ | ||||
|     typedef VIEW_ROUTINE_SIG(View_Routine_Function); | ||||
|  |  | |||
|  | @ -244,6 +244,7 @@ default_keys(Bind_Helper *context){ | |||
|     bind(context, 'k', MDFR_CTRL, cmdid_interactive_kill_buffer); | ||||
|     bind(context, 'i', MDFR_CTRL, cmdid_interactive_switch_buffer); | ||||
|     bind(context, 'c', MDFR_ALT, cmdid_open_color_tweaker); | ||||
|     bind(context, 'd', MDFR_ALT, cmdid_open_debug); | ||||
|     bind(context, 'o', MDFR_ALT, open_in_other); | ||||
|     bind(context, 'w', MDFR_CTRL, save_as); | ||||
|      | ||||
|  |  | |||
|  | @ -1,30 +1,65 @@ | |||
| enum Key_Code{ | ||||
|     key_back = 1, | ||||
|     key_up = 2, | ||||
|     key_down = 3, | ||||
|     key_left = 4, | ||||
|     key_right = 5, | ||||
|     key_del = 6, | ||||
|     key_insert = 7, | ||||
|     key_home = 8, | ||||
|     key_end = 11, | ||||
|     key_page_up = 12, | ||||
|     key_page_down = 13, | ||||
|     key_esc = 14, | ||||
|     key_f1 = 127, | ||||
|     key_f2 = 128, | ||||
|     key_f3 = 129, | ||||
|     key_f4 = 130, | ||||
|     key_f5 = 131, | ||||
|     key_f6 = 132, | ||||
|     key_f7 = 133, | ||||
|     key_f8 = 134, | ||||
|     key_f9 = 135, | ||||
|     key_f10 = 136, | ||||
|     key_f11 = 137, | ||||
|     key_f12 = 138, | ||||
|     key_f13 = 139, | ||||
|     key_f14 = 140, | ||||
|     key_f15 = 141, | ||||
|     key_f16 = 142, | ||||
| key_back = 1, | ||||
| key_up = 2, | ||||
| key_down = 3, | ||||
| key_left = 4, | ||||
| key_right = 5, | ||||
| key_del = 6, | ||||
| key_insert = 7, | ||||
| key_home = 8, | ||||
| key_end = 11, | ||||
| key_page_up = 12, | ||||
| key_page_down = 13, | ||||
| key_esc = 14, | ||||
| key_f1 = 127, | ||||
| key_f2 = 128, | ||||
| key_f3 = 129, | ||||
| key_f4 = 130, | ||||
| key_f5 = 131, | ||||
| key_f6 = 132, | ||||
| key_f7 = 133, | ||||
| key_f8 = 134, | ||||
| key_f9 = 135, | ||||
| key_f10 = 136, | ||||
| key_f11 = 137, | ||||
| key_f12 = 138, | ||||
| key_f13 = 139, | ||||
| key_f14 = 140, | ||||
| key_f15 = 141, | ||||
| key_f16 = 142, | ||||
| }; | ||||
| static char* | ||||
| global_key_name(int key_code, int *size){ | ||||
| char *result = 0; | ||||
| switch(key_code){ | ||||
| case key_back: result = "back"; *size = sizeof("back")-1; break; | ||||
| case key_up: result = "up"; *size = sizeof("up")-1; break; | ||||
| case key_down: result = "down"; *size = sizeof("down")-1; break; | ||||
| case key_left: result = "left"; *size = sizeof("left")-1; break; | ||||
| case key_right: result = "right"; *size = sizeof("right")-1; break; | ||||
| case key_del: result = "del"; *size = sizeof("del")-1; break; | ||||
| case key_insert: result = "insert"; *size = sizeof("insert")-1; break; | ||||
| case key_home: result = "home"; *size = sizeof("home")-1; break; | ||||
| case key_end: result = "end"; *size = sizeof("end")-1; break; | ||||
| case key_page_up: result = "page_up"; *size = sizeof("page_up")-1; break; | ||||
| case key_page_down: result = "page_down"; *size = sizeof("page_down")-1; break; | ||||
| case key_esc: result = "esc"; *size = sizeof("esc")-1; break; | ||||
| case key_f1: result = "f1"; *size = sizeof("f1")-1; break; | ||||
| case key_f2: result = "f2"; *size = sizeof("f2")-1; break; | ||||
| case key_f3: result = "f3"; *size = sizeof("f3")-1; break; | ||||
| case key_f4: result = "f4"; *size = sizeof("f4")-1; break; | ||||
| case key_f5: result = "f5"; *size = sizeof("f5")-1; break; | ||||
| case key_f6: result = "f6"; *size = sizeof("f6")-1; break; | ||||
| case key_f7: result = "f7"; *size = sizeof("f7")-1; break; | ||||
| case key_f8: result = "f8"; *size = sizeof("f8")-1; break; | ||||
| case key_f9: result = "f9"; *size = sizeof("f9")-1; break; | ||||
| case key_f10: result = "f10"; *size = sizeof("f10")-1; break; | ||||
| case key_f11: result = "f11"; *size = sizeof("f11")-1; break; | ||||
| case key_f12: result = "f12"; *size = sizeof("f12")-1; break; | ||||
| case key_f13: result = "f13"; *size = sizeof("f13")-1; break; | ||||
| case key_f14: result = "f14"; *size = sizeof("f14")-1; break; | ||||
| case key_f15: result = "f15"; *size = sizeof("f15")-1; break; | ||||
| case key_f16: result = "f16"; *size = sizeof("f16")-1; break; | ||||
| } | ||||
| return(result); | ||||
| } | ||||
|  |  | |||
							
								
								
									
										654
									
								
								4coder_string.h
								
								
								
								
							
							
						
						
									
										654
									
								
								4coder_string.h
								
								
								
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										36
									
								
								4ed.cpp
								
								
								
								
							
							
						
						
									
										36
									
								
								4ed.cpp
								
								
								
								
							|  | @ -2295,37 +2295,47 @@ internal void | |||
| setup_command_table(){ | ||||
| #define SET(n) command_table[cmdid_##n] = command_##n | ||||
|     SET(null); | ||||
|      | ||||
|     SET(seek_left); | ||||
|     SET(seek_right); | ||||
|      | ||||
|     SET(center_view); | ||||
|      | ||||
|     SET(word_complete); | ||||
|      | ||||
|     SET(copy); | ||||
|     SET(cut); | ||||
|     SET(paste); | ||||
|     SET(paste_next); | ||||
|      | ||||
|     SET(undo); | ||||
|     SET(redo); | ||||
|     SET(history_backward); | ||||
|     SET(history_forward); | ||||
|      | ||||
|     SET(interactive_new); | ||||
|     SET(interactive_open); | ||||
|     SET(reopen); | ||||
|     SET(save); | ||||
|     SET(change_active_panel); | ||||
|     SET(interactive_switch_buffer); | ||||
|     SET(interactive_kill_buffer); | ||||
|     SET(kill_buffer); | ||||
|          | ||||
|     SET(to_uppercase); | ||||
|     SET(to_lowercase); | ||||
|      | ||||
|     SET(toggle_line_wrap); | ||||
|     SET(toggle_show_whitespace); | ||||
|      | ||||
|     SET(clean_all_lines); | ||||
|     SET(auto_tab_range); | ||||
|     SET(eol_dosify); | ||||
|     SET(eol_nixify); | ||||
|     SET(auto_tab_range); | ||||
|      | ||||
|     SET(open_panel_vsplit); | ||||
|     SET(open_panel_hsplit); | ||||
|     SET(close_panel); | ||||
|     SET(change_active_panel); | ||||
|      | ||||
|     SET(page_up); | ||||
|     SET(page_down); | ||||
|  | @ -3120,7 +3130,7 @@ update_cli_handle_with_file(System_Functions *system, Models *models, | |||
|         char str_space[256]; | ||||
|         String str = make_fixed_width_string(str_space); | ||||
|         append(&str, "exited with code "); | ||||
|         append_int_to_str(cli->exit, &str); | ||||
|         append_int_to_str(&str, cli->exit); | ||||
|         output_file_append(system, models, file, str, cursor_at_end); | ||||
|         result = -1; | ||||
|     } | ||||
|  | @ -3705,7 +3715,6 @@ App_Step_Sig(app_step){ | |||
|         View *view = 0, *active_view = 0; | ||||
|         b32 active = 0; | ||||
|         Input_Summary summary = {0}; | ||||
|         Input_Process_Result result = {0}; | ||||
|          | ||||
|         active_view = cmd->panel->view; | ||||
|         used_panels = &models->layout.used_sentinel; | ||||
|  | @ -3726,13 +3735,8 @@ App_Step_Sig(app_step){ | |||
|             if (result.consume_keys || result.consume_esc){ | ||||
|                 consume_input(&available_input, Input_Esc); | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         for (dll_items(panel, used_panels)){ | ||||
|             view = panel->view; | ||||
|              | ||||
|             if (view->changed_context_in_step == 0){ | ||||
|                 Assert(view->current_scroll); | ||||
|                 active = (panel == cmd->panel); | ||||
|                 summary = (active)?(active_input):(dead_input); | ||||
|                 if (panel == mouse_panel && !input->mouse.out_of_window){ | ||||
|  | @ -3740,15 +3744,15 @@ 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_step_file_view(system, view, panel->inner, active, | ||||
|                                            &summary, *vars, view->scroll_region); | ||||
|                 if (result.is_animating){ | ||||
|                 Input_Process_Result ip_result = | ||||
|                     do_step_file_view(system, view, panel->inner, active, | ||||
|                                       &summary, *vars, view->scroll_region); | ||||
|                 if (ip_result.is_animating){ | ||||
|                     app_result.animating = 1; | ||||
|                 } | ||||
|                 *vars = result.vars; | ||||
|                 view->scroll_region = result.region; | ||||
|                 Assert(view->current_scroll == vars); | ||||
|                 *vars = ip_result.vars; | ||||
|                 view->scroll_region = ip_result.region; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  |  | |||
							
								
								
									
										1
									
								
								4ed.h
								
								
								
								
							
							
						
						
									
										1
									
								
								4ed.h
								
								
								
								
							|  | @ -54,6 +54,7 @@ get_single_key(Key_Summary *summary, i32 index){ | |||
| struct Input_Summary{ | ||||
|     Mouse_State mouse; | ||||
|     Key_Summary keys; | ||||
|     f32 dt; | ||||
| }; | ||||
| 
 | ||||
| struct Command_Line_Parameters{ | ||||
|  |  | |||
|  | @ -23,6 +23,19 @@ struct App_Settings{ | |||
|     i32 font_size; | ||||
| }; | ||||
| 
 | ||||
| struct Debug_Input_Event{ | ||||
|     char key; | ||||
|      | ||||
|     b8 is_hold; | ||||
|     b8 is_ctrl; | ||||
|     b8 is_alt; | ||||
|     b8 is_shift; | ||||
| }; | ||||
| 
 | ||||
| struct Debug_Data{ | ||||
|     Debug_Input_Event input_events[16]; | ||||
| }; | ||||
| 
 | ||||
| struct Models{ | ||||
|     Mem_Options mem; | ||||
|     App_Settings settings; | ||||
|  | @ -64,6 +77,8 @@ struct Models{ | |||
|     Scroll_Rule_Function *scroll_rule; | ||||
|      | ||||
|     b32 keep_playing; | ||||
|      | ||||
|     Debug_Data debug; | ||||
| }; | ||||
| 
 | ||||
| // BOTTOM
 | ||||
|  |  | |||
|  | @ -404,7 +404,7 @@ file_set_name(Working_Set *working_set, Editing_File *file, char *filename){ | |||
|             if (hit_conflict){ | ||||
|                 file->name.live_name.size = original_len; | ||||
|                 append(&file->name.live_name, " <"); | ||||
|                 append_int_to_str(file_x, &file->name.live_name); | ||||
|                 append_int_to_str(&file->name.live_name, file_x); | ||||
|                 append(&file->name.live_name, ">"); | ||||
|             } | ||||
|         } | ||||
|  | @ -4468,8 +4468,99 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su | |||
|                  | ||||
|                 case VUI_Debug: | ||||
|                 { | ||||
|                     view->current_scroll = &view->gui_scroll; | ||||
|                      | ||||
| }break; | ||||
|                     // TODO(allen):
 | ||||
|                     // - Incoming input
 | ||||
|                     // - Memory info
 | ||||
|                     // - Thread info
 | ||||
|                     // - View inspection
 | ||||
|                     // - Buffer inspection
 | ||||
|                     // - Command maps inspection
 | ||||
|                      | ||||
|                     String empty_str = string_zero(); | ||||
|                     char space[512]; | ||||
|                     String string = make_fixed_width_string(space); | ||||
|                      | ||||
|                     // Time Watcher
 | ||||
|                     { | ||||
|                         string.size = 0; | ||||
|                         u64 time = system->now_time_stamp(); | ||||
|                          | ||||
|                         append(&string, "last event time stamp: "); | ||||
|                         append_u64_to_str(&string, time); | ||||
|                          | ||||
|                         gui_do_text_field(target, string, empty_str); | ||||
|                     } | ||||
|                      | ||||
|                     // Incoming input
 | ||||
|                     //  - keeping track of where something get's consumed!?
 | ||||
|                     //  - convert mouse clicks into key coded events??!!
 | ||||
|                     { | ||||
|                         Debug_Data *debug = &view->persistent.models->debug; | ||||
|                          | ||||
|                         { | ||||
|                             int mx = input.mouse.x; | ||||
|                             int my = input.mouse.y; | ||||
|                              | ||||
|                             string.size = 0; | ||||
|                             append(&string, "mouse: ("); | ||||
|                             append_int_to_str(&string, mx); | ||||
|                             append(&string, ","); | ||||
|                             append_int_to_str(&string, my); | ||||
|                             append(&string, ")"); | ||||
|                         } | ||||
|                          | ||||
|                         gui_do_text_field(target, string, empty_str); | ||||
|                          | ||||
|                         Debug_Input_Event *input_event = debug->input_events; | ||||
|                         for (i32 i = 0; | ||||
|                              i < ArrayCount(debug->input_events); | ||||
|                              ++i, ++input_event){ | ||||
|                             string.size = 0; | ||||
|                              | ||||
|                             if (input_event->is_hold){ | ||||
|                                 append(&string, "hold:  "); | ||||
|                             } | ||||
|                             else{ | ||||
|                                 append(&string, "press: "); | ||||
|                             } | ||||
|                              | ||||
|                             if (input_event->is_ctrl){ | ||||
|                                 append(&string, "ctrl-"); | ||||
|                             } | ||||
|                             else{ | ||||
|                                 append(&string, "    -"); | ||||
|                             } | ||||
|                              | ||||
|                             if (input_event->is_alt){ | ||||
|                                 append(&string, "alt-"); | ||||
|                             } | ||||
|                             else{ | ||||
|                                 append(&string, "   -"); | ||||
|                             } | ||||
|                              | ||||
|                             if (input_event->is_shift){ | ||||
|                                 append(&string, "shift "); | ||||
|                             } | ||||
|                             else{ | ||||
|                                 append(&string, "      "); | ||||
|                             } | ||||
|                              | ||||
|                             if (input_event->key >= ' ' && input_event->key <= '~'){ | ||||
|                                 append(&string, make_string(&input_event->key, 1)); | ||||
|                             } | ||||
|                             else{ | ||||
|                                 String str; | ||||
|                                 str.str = global_key_name(input_event->key, &str.size); | ||||
|                                 str.memory_size = str.size + 1; | ||||
|                                 append(&string, str); | ||||
|                             } | ||||
|                              | ||||
|                             gui_do_text_field(target, string, empty_str); | ||||
|                         } | ||||
|                     } | ||||
|                 }break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | @ -4748,7 +4839,7 @@ do_step_file_view(System_Functions *system, | |||
|              | ||||
|             if (view->persistent.models->scroll_rule(scroll_vars.target_x, scroll_vars.target_y, | ||||
|                                                      &scroll_vars.scroll_x, &scroll_vars.scroll_y, | ||||
|                                                      (view->persistent.id) + 1, is_new_target)){ | ||||
|                                                      (view->persistent.id) + 1, is_new_target, user_input->dt)){ | ||||
|                 result.is_animating = 1; | ||||
|             } | ||||
|              | ||||
|  | @ -5040,9 +5131,9 @@ draw_file_bar(Render_Target *target, View *view, Editing_File *file, i32_Rect re | |||
|                 char line_number_space[30]; | ||||
|                 String line_number = make_fixed_width_string(line_number_space); | ||||
|                 append(&line_number, " L#"); | ||||
|                 append_int_to_str(view->recent->cursor.line, &line_number); | ||||
|                 append_int_to_str(&line_number, view->recent->cursor.line); | ||||
|                 append(&line_number, " C#"); | ||||
|                 append_int_to_str(view->recent->cursor.character, &line_number); | ||||
|                 append_int_to_str(&line_number, view->recent->cursor.character); | ||||
| 
 | ||||
|                 intbar_draw_string(target, &bar, line_number, base_color); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,30 +0,0 @@ | |||
| enum Key_Code{ | ||||
| key_back = 1, | ||||
| key_up = 2, | ||||
| key_down = 3, | ||||
| key_left = 4, | ||||
| key_right = 5, | ||||
| key_del = 6, | ||||
| key_insert = 7, | ||||
| key_home = 8, | ||||
| key_end = 11, | ||||
| key_page_up = 12, | ||||
| key_page_down = 13, | ||||
| key_esc = 14, | ||||
| key_f1 = 127, | ||||
| key_f2 = 128, | ||||
| key_f3 = 129, | ||||
| key_f4 = 130, | ||||
| key_f5 = 131, | ||||
| key_f6 = 132, | ||||
| key_f7 = 133, | ||||
| key_f8 = 134, | ||||
| key_f9 = 135, | ||||
| key_f10 = 136, | ||||
| key_f11 = 137, | ||||
| key_f12 = 138, | ||||
| key_f13 = 139, | ||||
| key_f14 = 140, | ||||
| key_f15 = 141, | ||||
| key_f15 = 142, | ||||
| } | ||||
|  | @ -125,7 +125,7 @@ char* generate_keycode_enum(){ | |||
|     file = fopen(filename, "wb"); | ||||
|     fprintf(file, "enum Key_Code{\n"); | ||||
|     count = ArrayCount(keys_that_need_codes); | ||||
|     for (i = 0; i < count;){ | ||||
|     for (i = 0; i < count; i){ | ||||
|         if (strcmp(keys_that_need_codes[i], "f1") == 0 && code < 0x7F){ | ||||
|             code = 0x7F; | ||||
|         } | ||||
|  | @ -134,11 +134,32 @@ char* generate_keycode_enum(){ | |||
|         case '\t': code++; break; | ||||
|         case 0x20: code = 0x7F; break; | ||||
|         default: | ||||
|         fprintf(file, "    key_%s = %d,\n", keys_that_need_codes[i++], code++); | ||||
|         fprintf(file, "key_%s = %d,\n", keys_that_need_codes[i++], code++); | ||||
|         break; | ||||
|         } | ||||
|     } | ||||
|     fprintf(file, "};\n"); | ||||
|      | ||||
|     fprintf(file, | ||||
|             "static char*\n" | ||||
|             "global_key_name(int key_code, int *size){\n" | ||||
|             "char *result = 0;\n" | ||||
|             "switch(key_code){\n" | ||||
|             ); | ||||
|     for (i = 0; i < count; ++i){ | ||||
|         fprintf(file, | ||||
|                 "case key_%s: result = \"%s\"; *size = sizeof(\"%s\")-1; break;\n", | ||||
|                 keys_that_need_codes[i], | ||||
|                 keys_that_need_codes[i], | ||||
|                 keys_that_need_codes[i] | ||||
|                 ); | ||||
|     } | ||||
|     fprintf(file, | ||||
|             "}\n" | ||||
|             "return(result);\n" | ||||
|             "}\n" | ||||
|             ); | ||||
|      | ||||
|     fclose(file); | ||||
|     return(filename); | ||||
| } | ||||
|  |  | |||
|  | @ -1326,10 +1326,9 @@ struct Casey_Scroll_Velocity | |||
| }; | ||||
| 
 | ||||
| Casey_Scroll_Velocity casey_scroll_velocity_[16] = {0}; | ||||
| Casey_Scroll_Velocity *casey_scroll_velocity = casey_scroll_velocity_; | ||||
| Casey_Scroll_Velocity *casey_scroll_velocity = casey_scroll_velocity_ - 1; | ||||
| 
 | ||||
| SCROLL_RULE_SIG(casey_smooth_scroll_rule){ | ||||
|     float dt = 1.0f/60.0f; // TODO(casey): Why do I not get the timestep here?
 | ||||
|     Casey_Scroll_Velocity *velocity = casey_scroll_velocity + view_id; | ||||
|     int result = 0; | ||||
|     if(is_new_target) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Allen Webster
						Allen Webster