720 lines
16 KiB
C
720 lines
16 KiB
C
#if !defined(FCODER_TYPES_H)
|
|
#define FCODER_TYPES_H
|
|
|
|
#if !defined(FCODER_META_TAGS)
|
|
#define FCODER_META_TAGS
|
|
|
|
# define ENUM(type,name) typedef type name; enum name##_
|
|
# define TYPEDEF typedef
|
|
# define TYPEDEF_FUNC typedef
|
|
# define STRUCT struct
|
|
# define UNION union
|
|
# define GLOBAL_VAR static
|
|
|
|
#endif
|
|
|
|
struct Application_Links{
|
|
void *cmd_context;
|
|
void *current_coroutine;
|
|
i32 type_coroutine;
|
|
};
|
|
typedef b32 _Get_Version_Function(i32 maj, i32 min, i32 patch);
|
|
typedef void _Init_APIs(struct API_VTable_custom *custom_vtable,
|
|
struct API_VTable_system *system_vtable);
|
|
|
|
////////////////////////////////
|
|
|
|
TYPEDEF u32 argb_color;
|
|
|
|
TYPEDEF u32 int_color;
|
|
|
|
TYPEDEF u16 id_color;
|
|
|
|
TYPEDEF u32 Child_Process_ID;
|
|
|
|
TYPEDEF i32 Buffer_ID;
|
|
|
|
TYPEDEF i32 View_ID;
|
|
|
|
TYPEDEF i32 Panel_ID;
|
|
|
|
TYPEDEF u32 Text_Layout_ID;
|
|
|
|
STRUCT Buffer_Point{
|
|
i64 line_number;
|
|
Vec2 pixel_shift;
|
|
};
|
|
|
|
STRUCT Line_Shift_Vertical{
|
|
i64 line;
|
|
f32 y_delta;
|
|
};
|
|
|
|
STRUCT Line_Shift_Character{
|
|
i64 line;
|
|
i64 character_delta;
|
|
};
|
|
|
|
ENUM(u32, Child_Process_Set_Target_Flags){
|
|
ChildProcessSet_FailIfBufferAlreadyAttachedToAProcess = 1,
|
|
ChildProcessSet_FailIfProcessAlreadyAttachedToABuffer = 2,
|
|
ChildProcessSet_NeverOverrideExistingAttachment = 3,
|
|
ChildProcessSet_CursorAtEnd = 4,
|
|
};
|
|
|
|
ENUM(i32, Key_Modifier_Index){
|
|
MDFR_SHIFT_INDEX,
|
|
MDFR_CONTROL_INDEX,
|
|
MDFR_ALT_INDEX,
|
|
MDFR_COMMAND_INDEX,
|
|
|
|
MDFR_INDEX_BINDABLE_COUNT,
|
|
|
|
MDFR_CAPS_INDEX = MDFR_INDEX_BINDABLE_COUNT,
|
|
MDFR_HOLD_INDEX,
|
|
|
|
MDFR_INDEX_COUNT
|
|
};
|
|
|
|
ENUM(u32, Key_Modifier_Flag){
|
|
MDFR_NONE = 0x0,
|
|
MDFR_CTRL = 0x1,
|
|
MDFR_ALT = 0x2,
|
|
MDFR_CMND = 0x4,
|
|
MDFR_SHIFT = 0x8,
|
|
};
|
|
|
|
ENUM(u32, Memory_Protect_Flags){
|
|
MemProtect_Read = 0x1,
|
|
MemProtect_Write = 0x2,
|
|
MemProtect_Execute = 0x4,
|
|
};
|
|
|
|
ENUM(i32, Wrap_Indicator_Mode){
|
|
WrapIndicator_Hide,
|
|
WrapIndicator_Show_After_Line,
|
|
WrapIndicator_Show_At_Wrap_Edge,
|
|
};
|
|
|
|
ENUM(i32, Global_Setting_ID){
|
|
GlobalSetting_Null,
|
|
GlobalSetting_LAltLCtrlIsAltGr,
|
|
};
|
|
|
|
ENUM(i32, Buffer_Setting_ID){
|
|
BufferSetting_Null,
|
|
BufferSetting_MapID,
|
|
BufferSetting_Eol,
|
|
BufferSetting_Unimportant,
|
|
BufferSetting_ReadOnly,
|
|
BufferSetting_RecordsHistory,
|
|
};
|
|
|
|
STRUCT Character_Predicate{
|
|
u8 b[32];
|
|
};
|
|
|
|
ENUM(i32, View_Setting_ID){
|
|
ViewSetting_Null,
|
|
ViewSetting_ShowWhitespace,
|
|
ViewSetting_ShowScrollbar,
|
|
ViewSetting_ShowFileBar,
|
|
ViewSetting_UICommandMap
|
|
};
|
|
|
|
ENUM(u32, Buffer_Create_Flag){
|
|
BufferCreate_Background = 0x1,
|
|
BufferCreate_AlwaysNew = 0x2,
|
|
BufferCreate_NeverNew = 0x4,
|
|
BufferCreate_JustChangedFile = 0x8,
|
|
BufferCreate_MustAttachToFile = 0x10,
|
|
BufferCreate_NeverAttachToFile = 0x20,
|
|
BufferCreate_SuppressNewFileHook = 0x40,
|
|
};
|
|
|
|
ENUM(u32, Buffer_Save_Flag){
|
|
BufferSave_IgnoreDirtyFlag = 0x1,
|
|
};
|
|
|
|
ENUM(u32, Buffer_Kill_Flag){
|
|
BufferKill_AlwaysKill = 0x2,
|
|
};
|
|
|
|
ENUM(u32, Buffer_Reopen_Flag){};
|
|
|
|
ENUM(i32, Buffer_Kill_Result){
|
|
BufferKillResult_Killed = 0,
|
|
BufferKillResult_Dirty = 1,
|
|
BufferKillResult_Unkillable = 2,
|
|
BufferKillResult_DoesNotExist = 3,
|
|
};
|
|
|
|
ENUM(i32, Buffer_Reopen_Result){
|
|
BufferReopenResult_Reopened = 0,
|
|
BufferReopenResult_Failed = 1,
|
|
};
|
|
|
|
ENUM(u32, Access_Flag){
|
|
AccessOpen = 0x0,
|
|
AccessProtected = 0x1,
|
|
AccessHidden = 0x2,
|
|
AccessAll = 0xFF
|
|
};
|
|
|
|
ENUM(u32, Dirty_State){
|
|
DirtyState_UpToDate = 0,
|
|
DirtyState_UnsavedChanges = 1,
|
|
DirtyState_UnloadedChanges = 2,
|
|
DirtyState_UnsavedChangesAndUnloadedChanges = 3,
|
|
};
|
|
|
|
ENUM(u32, Command_Line_Interface_Flag){
|
|
CLI_OverlapWithConflict = 0x1,
|
|
CLI_AlwaysBindToView = 0x2,
|
|
CLI_CursorAtEnd = 0x4,
|
|
CLI_SendEndSignal = 0x8,
|
|
};
|
|
|
|
ENUM(u32, Set_Buffer_Flag){
|
|
SetBuffer_KeepOriginalGUI = 0x1
|
|
};
|
|
|
|
ENUM(u32, Input_Type_Flag){
|
|
EventOnAnyKey = 0x1,
|
|
EventOnEsc = 0x2,
|
|
EventOnMouseLeftButton = 0x4,
|
|
EventOnMouseRightButton = 0x8,
|
|
EventOnMouseWheel = 0x10,
|
|
EventOnMouseMove = 0x20,
|
|
EventOnAnimate = 0x40,
|
|
EventOnViewActivation = 0x80,
|
|
EventAll = 0xFFFFFFFF,
|
|
};
|
|
|
|
ENUM(i32, Mouse_Cursor_Show_Type){
|
|
MouseCursorShow_Never,
|
|
MouseCursorShow_Always,
|
|
};
|
|
|
|
ENUM(i32, View_Split_Position){
|
|
ViewSplit_Top,
|
|
ViewSplit_Bottom,
|
|
ViewSplit_Left,
|
|
ViewSplit_Right,
|
|
};
|
|
|
|
ENUM(i32, Panel_Split_Kind){
|
|
PanelSplitKind_Ratio_Min = 0,
|
|
PanelSplitKind_Ratio_Max = 1,
|
|
PanelSplitKind_FixedPixels_Min = 2,
|
|
PanelSplitKind_FixedPixels_Max = 3,
|
|
};
|
|
|
|
ENUM(i32, Panel_Split_Orientation){
|
|
PanelSplit_LeftAndRight = 0,
|
|
PanelSplit_TopAndBottom = 1,
|
|
};
|
|
|
|
ENUM(i32, Panel_Child){
|
|
PanelChild_Min = 0,
|
|
PanelChild_Max = 1,
|
|
};
|
|
|
|
typedef u32 Key_Code;
|
|
typedef u32 Mouse_Code;
|
|
typedef u32 Core_Event_Code;
|
|
enum{
|
|
CoreEventCode_Animate,
|
|
CoreEventCode_ClickActivateView,
|
|
CoreEventCode_ClickDeactivateView,
|
|
};
|
|
|
|
typedef i32 Input_Event_Kind;
|
|
enum{
|
|
InputEventKind_TextInsert,
|
|
InputEventKind_KeyStroke,
|
|
InputEventKind_MouseButton,
|
|
InputEventKind_MouseWheel,
|
|
InputEventKind_MouseMove,
|
|
InputEventKind_Core,
|
|
};
|
|
|
|
struct Key_Modifiers{
|
|
b8 modifiers[MDFR_INDEX_COUNT];
|
|
};
|
|
|
|
struct Input_Event{
|
|
Input_Event_Kind kind;
|
|
union{
|
|
struct{
|
|
String_Const_u8 string;
|
|
Key_Modifiers modifiers;
|
|
} text;
|
|
struct{
|
|
Key_Code code;
|
|
Key_Modifiers modifiers;
|
|
} key;
|
|
struct{
|
|
Key_Code code;
|
|
Key_Modifiers modifiers;
|
|
Vec2_i32 p;
|
|
} mouse;
|
|
struct{
|
|
f32 value;
|
|
Vec2_i32 p;
|
|
} mouse_wheel;
|
|
struct{
|
|
Vec2_i32 p;
|
|
} mouse_move;
|
|
struct{
|
|
Core_Event_Code code;
|
|
} core;
|
|
};
|
|
};
|
|
|
|
struct Input_Event_Node{
|
|
Input_Event_Node *next;
|
|
Input_Event event;
|
|
};
|
|
|
|
struct Input_List{
|
|
Input_Event_Node *first;
|
|
Input_Event_Node *last;
|
|
i32 count;
|
|
};
|
|
|
|
TYPEDEF u8 Key_Modifier;
|
|
|
|
STRUCT Mouse_State{
|
|
b8 l;
|
|
b8 r;
|
|
b8 press_l;
|
|
b8 press_r;
|
|
b8 release_l;
|
|
b8 release_r;
|
|
b8 out_of_window;
|
|
i32 wheel;
|
|
UNION{
|
|
STRUCT{
|
|
i32 x;
|
|
i32 y;
|
|
};
|
|
Vec2_i32 p;
|
|
};
|
|
};
|
|
|
|
STRUCT Parser_String_And_Type{
|
|
char *str;
|
|
u32 length;
|
|
u32 type;
|
|
};
|
|
|
|
ENUM(u32, File_Attribute_Flag){
|
|
FileAttribute_IsDirectory = 1,
|
|
};
|
|
|
|
STRUCT File_Attributes{
|
|
u64 size;
|
|
u64 last_write_time;
|
|
File_Attribute_Flag flags;
|
|
};
|
|
|
|
STRUCT File_Info{
|
|
File_Info *next;
|
|
String_Const_u8 file_name;
|
|
File_Attributes attributes;
|
|
};
|
|
|
|
STRUCT File_List{
|
|
File_Info **infos;
|
|
u32 count;
|
|
};
|
|
|
|
STRUCT Buffer_Identifier{
|
|
char *name;
|
|
i32 name_len;
|
|
Buffer_ID id;
|
|
};
|
|
|
|
STRUCT Buffer_Scroll{
|
|
Buffer_Point position;
|
|
Buffer_Point target;
|
|
};
|
|
|
|
STRUCT Basic_Scroll{
|
|
Vec2_f32 position;
|
|
Vec2_f32 target;
|
|
};
|
|
|
|
ENUM(i32, Buffer_Seek_Type){
|
|
buffer_seek_pos,
|
|
buffer_seek_line_col,
|
|
};
|
|
|
|
STRUCT Buffer_Seek{
|
|
Buffer_Seek_Type type;
|
|
UNION{
|
|
STRUCT{
|
|
i64 pos;
|
|
};
|
|
STRUCT{
|
|
i64 line;
|
|
i64 col;
|
|
};
|
|
};
|
|
};
|
|
|
|
STRUCT Buffer_Cursor{
|
|
i64 pos;
|
|
i64 line;
|
|
i64 col;
|
|
};
|
|
|
|
STRUCT Range_Cursor{
|
|
struct{
|
|
Buffer_Cursor min;
|
|
Buffer_Cursor max;
|
|
};
|
|
struct{
|
|
Buffer_Cursor begin;
|
|
Buffer_Cursor end;
|
|
};
|
|
struct{
|
|
Buffer_Cursor start;
|
|
Buffer_Cursor end;
|
|
};
|
|
struct{
|
|
Buffer_Cursor first;
|
|
Buffer_Cursor one_past_last;
|
|
};
|
|
};
|
|
|
|
STRUCT Marker{
|
|
i64 pos;
|
|
b32 lean_right;
|
|
};
|
|
|
|
|
|
ENUM(i32, Managed_Object_Type)
|
|
{
|
|
ManagedObjectType_Error = 0,
|
|
ManagedObjectType_Memory = 1,
|
|
ManagedObjectType_Markers = 2,
|
|
|
|
ManagedObjectType_COUNT = 4,
|
|
};
|
|
|
|
|
|
TYPEDEF u64 Managed_ID;
|
|
|
|
TYPEDEF u64 Managed_Scope;
|
|
TYPEDEF u64 Managed_Object;
|
|
|
|
static Managed_Scope ManagedScope_NULL = 0;
|
|
static Managed_Object ManagedObject_NULL = 0;
|
|
|
|
static Managed_ID ManagedIndex_ERROR = 0;
|
|
|
|
STRUCT Marker_Visual{
|
|
Managed_Scope scope;
|
|
u32 slot_id;
|
|
u32 gen_id;
|
|
};
|
|
|
|
ENUM(u32, Glyph_Flag){
|
|
GlyphFlag_None = 0x0,
|
|
GlyphFlag_Rotate90 = 0x1,
|
|
};
|
|
|
|
STRUCT Query_Bar{
|
|
String_Const_u8 prompt;
|
|
String_Const_u8 string;
|
|
umem string_capacity;
|
|
};
|
|
|
|
STRUCT Query_Bar_Ptr_Array{
|
|
Query_Bar **ptrs;
|
|
i32 count;
|
|
};
|
|
|
|
TYPEDEF_FUNC void UI_Quit_Function_Type(struct Application_Links *app, View_ID view);
|
|
#define UI_QUIT_FUNCTION(name) void name(struct Application_Links *app, View_ID view)
|
|
|
|
STRUCT Theme_Color{
|
|
id_color tag;
|
|
argb_color color;
|
|
};
|
|
|
|
//STRUCT Theme{
|
|
//int_color colors[Stag_COUNT];
|
|
//};
|
|
|
|
TYPEDEF u32 Face_ID;
|
|
|
|
STRUCT Font_Load_Location{
|
|
String_Const_u8 file_name;
|
|
b32 in_4coder_font_folder;
|
|
};
|
|
|
|
STRUCT Face_Load_Parameters{
|
|
u32 pt_size;
|
|
b32 bold;
|
|
b32 italic;
|
|
b32 underline;
|
|
b32 hinting;
|
|
};
|
|
|
|
STRUCT Face_Description{
|
|
Font_Load_Location font;
|
|
Face_Load_Parameters parameters;
|
|
};
|
|
|
|
STRUCT Face_Metrics{
|
|
f32 text_height;
|
|
f32 line_height;
|
|
f32 max_advance;
|
|
f32 normal_advance;
|
|
f32 space_advance;
|
|
f32 decimal_digit_advance;
|
|
f32 hex_digit_advance;
|
|
};
|
|
|
|
STRUCT Edit{
|
|
String_Const_u8 text;
|
|
Interval_i64 range;
|
|
};
|
|
|
|
STRUCT Batch_Edit{
|
|
Batch_Edit *next;
|
|
Edit edit;
|
|
};
|
|
|
|
ENUM(i32, Record_Kind){
|
|
RecordKind_Single,
|
|
RecordKind_Group,
|
|
};
|
|
|
|
ENUM(i32, Record_Error){
|
|
RecordError_NoError,
|
|
RecordError_InvalidBuffer,
|
|
RecordError_NoHistoryAttached,
|
|
RecordError_IndexOutOfBounds,
|
|
RecordError_SubIndexOutOfBounds,
|
|
RecordError_InitialStateDummyRecord,
|
|
RecordError_WrongRecordTypeAtIndex,
|
|
};
|
|
|
|
ENUM(u32, Record_Merge_Flag){
|
|
RecordMergeFlag_StateInRange_MoveStateForward = 0x0,
|
|
RecordMergeFlag_StateInRange_MoveStateBackward = 0x1,
|
|
RecordMergeFlag_StateInRange_ErrorOut = 0x2,
|
|
};
|
|
|
|
TYPEDEF i32 History_Record_Index;
|
|
|
|
STRUCT Record_Info{
|
|
Record_Error error;
|
|
Record_Kind kind;
|
|
i32 edit_number;
|
|
union{
|
|
struct{
|
|
String_Const_u8 string_forward;
|
|
String_Const_u8 string_backward;
|
|
i64 first;
|
|
} single;
|
|
struct{
|
|
i32 count;
|
|
} group;
|
|
};
|
|
};
|
|
|
|
TYPEDEF void Custom_Command_Function(struct Application_Links *app);
|
|
|
|
#if defined(CUSTOM_COMMAND_SIG) || defined(CUSTOM_DOC) || defined(CUSTOM_ALIAS)
|
|
#error Please do not define CUSTOM_COMMAND_SIG, CUSTOM_DOC, or CUSTOM_ALIAS
|
|
#endif
|
|
|
|
#if !defined(META_PASS)
|
|
#define CUSTOM_COMMAND_SIG(name) void name(struct Application_Links *app)
|
|
#define CUSTOM_DOC(str)
|
|
#define CUSTOM_ALIAS(x) x
|
|
#else
|
|
#define CUSTOM_COMMAND_SIG(name) CUSTOM_COMMAND_SIG(name, __FILE__, __LINE__)
|
|
#define CUSTOM_DOC(str) CUSTOM_DOC(str)
|
|
#define CUSTOM_ALIAS(x) CUSTOM_ALIAS(x)
|
|
#endif
|
|
|
|
UNION Generic_Command{
|
|
Custom_Command_Function *command;
|
|
};
|
|
|
|
|
|
STRUCT User_Input{
|
|
Input_Event event;
|
|
Generic_Command command;
|
|
b32 abort;
|
|
};
|
|
|
|
STRUCT Frame_Info{
|
|
i32 index;
|
|
f32 literal_dt;
|
|
f32 animation_dt;
|
|
};
|
|
|
|
TYPEDEF_FUNC void Render_Callback(struct Application_Links *app);
|
|
|
|
ENUM(i32, Hook_ID){
|
|
hook_file_out_of_sync,
|
|
hook_exit,
|
|
hook_buffer_viewer_update,
|
|
// never below this
|
|
hook_type_count
|
|
};
|
|
|
|
ENUM(i32, Special_Hook_ID){
|
|
special_hook_scroll_rule = hook_type_count,
|
|
special_hook_new_file,
|
|
special_hook_open_file,
|
|
special_hook_save_file,
|
|
special_hook_end_file,
|
|
special_hook_file_edit_range,
|
|
special_hook_file_edit_finished,
|
|
special_hook_file_externally_modified,
|
|
special_hook_command_caller,
|
|
special_hook_render_caller,
|
|
special_hook_input_filter,
|
|
special_hook_start,
|
|
special_hook_buffer_name_resolver,
|
|
special_hook_modify_color_table,
|
|
special_hook_clipboard_change,
|
|
special_hook_get_view_buffer_region,
|
|
};
|
|
|
|
TYPEDEF_FUNC i32 Command_Caller_Hook_Function(struct Application_Links *app, Generic_Command cmd);
|
|
#define COMMAND_CALLER_HOOK(name) i32 name(struct Application_Links *app, Generic_Command cmd)
|
|
|
|
TYPEDEF_FUNC void Render_Caller_Function(struct Application_Links *app, Frame_Info frame_info);
|
|
#define RENDER_CALLER_SIG(name) void name(struct Application_Links *app, Frame_Info frame_info)
|
|
|
|
TYPEDEF_FUNC i32 Hook_Function(struct Application_Links *app);
|
|
#define HOOK_SIG(name) i32 name(struct Application_Links *app)
|
|
|
|
TYPEDEF_FUNC i32 Buffer_Hook_Function(struct Application_Links *app, Buffer_ID buffer_id);
|
|
#define BUFFER_HOOK_SIG(name) i32 name(struct Application_Links *app, Buffer_ID buffer_id)
|
|
|
|
TYPEDEF_FUNC i32 File_Edit_Range_Function(struct Application_Links *app, Buffer_ID buffer_id,
|
|
Interval_i64 range, String_Const_u8 text);
|
|
#define FILE_EDIT_RANGE_SIG(name) i32 name(struct Application_Links *app, Buffer_ID buffer_id, Interval_i64 range, String_Const_u8 text)
|
|
|
|
TYPEDEF_FUNC i32 File_Externally_Modified_Function(struct Application_Links *app, Buffer_ID buffer_id);
|
|
#define FILE_EXTERNALLY_MODIFIED_SIG(name) i32 name(struct Application_Links *app, Buffer_ID buffer_id)
|
|
|
|
TYPEDEF_FUNC void Input_Filter_Function(Mouse_State *mouse);
|
|
#define INPUT_FILTER_SIG(name) void name(Mouse_State *mouse)
|
|
|
|
TYPEDEF_FUNC Vec2_f32 Delta_Rule_Function(Vec2_f32 pending_delta, View_ID view_id, b32 is_new_target, f32 dt);
|
|
#define DELTA_RULE_SIG(name) Vec2_f32 name(Vec2_f32 pending_delta, View_ID view_id, b32 is_new_target, f32 dt)
|
|
|
|
STRUCT Color_Table{
|
|
argb_color *vals;
|
|
u32 count;
|
|
};
|
|
|
|
TYPEDEF_FUNC Color_Table Modify_Color_Table_Function(struct Application_Links *app, Frame_Info frame);
|
|
#define MODIFY_COLOR_TABLE_SIG(name) Color_Table name(struct Application_Links *app, Frame_Info frame)
|
|
|
|
ENUM(u32, Clipboard_Change_Flag){
|
|
ClipboardFlag_FromOS = 0x1,
|
|
};
|
|
TYPEDEF_FUNC void Clipboard_Change_Hook_Function(struct Application_Links *app, String_Const_u8 contents, Clipboard_Change_Flag flags);
|
|
#define CLIPBOARD_CHANGE_HOOK_SIG(name) void name(struct Application_Links *app, String_Const_u8 contents, Clipboard_Change_Flag flags)
|
|
|
|
TYPEDEF_FUNC Rect_f32 Get_View_Buffer_Region_Function(struct Application_Links *app, View_ID view_id, Rect_f32 sub_region);
|
|
#define GET_VIEW_BUFFER_REGION_SIG(name) Rect_f32 name(struct Application_Links *app, View_ID view_id, Rect_f32 sub_region)
|
|
|
|
STRUCT Buffer_Name_Conflict_Entry{
|
|
Buffer_ID buffer_id;
|
|
String_Const_u8 file_name;
|
|
String_Const_u8 base_name;
|
|
u8 *unique_name_in_out;
|
|
umem unique_name_len_in_out;
|
|
umem unique_name_capacity;
|
|
};
|
|
|
|
TYPEDEF_FUNC void Buffer_Name_Resolver_Function(struct Application_Links *app, Buffer_Name_Conflict_Entry *conflicts, i32 conflict_count);
|
|
#define BUFFER_NAME_RESOLVER_SIG(n) \
|
|
void n(struct Application_Links *app, Buffer_Name_Conflict_Entry *conflicts, i32 conflict_count)
|
|
|
|
TYPEDEF_FUNC i32 Start_Hook_Function(struct Application_Links *app, char **files, i32 file_count, char **flags, i32 flag_count);
|
|
#define START_HOOK_SIG(name) \
|
|
i32 name(struct Application_Links *app, char **files, i32 file_count, char **flags, i32 flag_count)
|
|
|
|
TYPEDEF_FUNC i32 Get_Binding_Data_Function(void *data, i32 size);
|
|
#define GET_BINDING_DATA(name) i32 name(void *data, i32 size)
|
|
|
|
// NOTE(allen): Definitions for the format that Get_Binding_Data uses to launch 4coder.
|
|
// TODO(allen): Transition to a more dynamic Command_Map system.
|
|
|
|
|
|
ENUM(i32, Binding_Unit_Type){
|
|
unit_header,
|
|
unit_map_begin,
|
|
unit_callback,
|
|
unit_inherit,
|
|
unit_hook
|
|
};
|
|
|
|
ENUM(i32, Map_ID){
|
|
mapid_global = (1 << 24),
|
|
mapid_file,
|
|
mapid_nomap
|
|
};
|
|
|
|
|
|
STRUCT Binding_Unit{
|
|
Binding_Unit_Type type;
|
|
UNION{
|
|
STRUCT{ i32 total_size; i32 user_map_count; i32 error; } header;
|
|
STRUCT{ i32 mapid; i32 replace; i32 bind_count; } map_begin;
|
|
STRUCT{ i32 mapid; } map_inherit;
|
|
STRUCT{ Key_Code code; uint8_t modifiers; Custom_Command_Function *func; } callback;
|
|
STRUCT{ i32 hook_id; void *func; } hook;
|
|
};
|
|
};
|
|
|
|
STRUCT Color_Picker{
|
|
String_Const_u8 title;
|
|
argb_color *dest;
|
|
b32 *finished;
|
|
};
|
|
|
|
ENUM(u32, String_Match_Flag){
|
|
StringMatch_CaseSensitive = 1,
|
|
StringMatch_LeftSideSloppy = 2,
|
|
StringMatch_RightSideSloppy = 4,
|
|
StringMatch_Straddled = 8,
|
|
};
|
|
|
|
STRUCT String_Match{
|
|
String_Match *next;
|
|
Buffer_ID buffer;
|
|
i32 string_id;
|
|
String_Match_Flag flags;
|
|
Range_i64 range;
|
|
};
|
|
|
|
STRUCT String_Match_List{
|
|
String_Match *first;
|
|
String_Match *last;
|
|
i32 count;
|
|
};
|
|
|
|
STRUCT Process_State{
|
|
b32 valid;
|
|
b32 is_updating;
|
|
i64 return_code;
|
|
};
|
|
|
|
#endif
|
|
|