4coder/custom/4coder_types.h

587 lines
13 KiB
C
Raw Normal View History

#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
2019-10-05 02:48:05 +00:00
struct Application_Links{
void *cmd_context;
void *current_coroutine;
i32 type_coroutine;
};
2019-10-10 22:57:02 +00:00
typedef void Custom_Layer_Init_Type(Application_Links *app);
void custom_layer_init(Application_Links *app);
typedef b32 _Get_Version_Type(i32 maj, i32 min, i32 patch);
typedef Custom_Layer_Init_Type *_Init_APIs_Type(struct API_VTable_custom *custom_vtable,
struct API_VTable_system *system_vtable);
2019-10-05 02:48:05 +00:00
////////////////////////////////
2019-02-25 23:42:13 +00:00
TYPEDEF u32 argb_color;
TYPEDEF u32 int_color;
TYPEDEF u16 id_color;
2016-07-02 14:15:15 +00:00
TYPEDEF u32 Child_Process_ID;
TYPEDEF i32 Buffer_ID;
2016-07-02 14:15:15 +00:00
TYPEDEF i32 View_ID;
2016-07-02 14:15:15 +00:00
TYPEDEF i32 Panel_ID;
2019-02-24 07:22:16 +00:00
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(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,
2016-07-04 20:40:57 +00:00
BufferSetting_Eol,
BufferSetting_Unimportant,
BufferSetting_ReadOnly,
BufferSetting_RecordsHistory,
};
STRUCT Character_Predicate{
u8 b[32];
};
ENUM(i32, View_Setting_ID){
ViewSetting_Null,
2016-07-04 20:40:57 +00:00
ViewSetting_ShowWhitespace,
ViewSetting_ShowScrollbar,
ViewSetting_ShowFileBar,
ViewSetting_UICommandMap
};
ENUM(u32, Buffer_Create_Flag){
BufferCreate_Background = 0x1,
BufferCreate_AlwaysNew = 0x2,
BufferCreate_NeverNew = 0x4,
2017-11-21 21:30:40 +00:00
BufferCreate_JustChangedFile = 0x8,
2018-08-05 07:09:18 +00:00
BufferCreate_MustAttachToFile = 0x10,
BufferCreate_NeverAttachToFile = 0x20,
2018-10-06 01:42:56 +00:00
BufferCreate_SuppressNewFileHook = 0x40,
};
ENUM(u32, Buffer_Save_Flag){
2017-11-21 21:30:40 +00:00
BufferSave_IgnoreDirtyFlag = 0x1,
};
ENUM(u32, Buffer_Kill_Flag){
BufferKill_AlwaysKill = 0x2,
};
ENUM(u32, Buffer_Reopen_Flag){};
ENUM(i32, Buffer_Kill_Result){
2018-08-05 07:09:18 +00:00
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,
2019-02-25 23:42:13 +00:00
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(i32, Mouse_Cursor_Show_Type){
MouseCursorShow_Never,
MouseCursorShow_Always,
};
ENUM(i32, View_Split_Position){
2016-07-05 01:36:30 +00:00
ViewSplit_Top,
ViewSplit_Bottom,
ViewSplit_Left,
2019-02-05 09:13:38 +00:00
ViewSplit_Right,
};
ENUM(i32, Panel_Split_Kind){
2019-02-24 07:22:16 +00:00
PanelSplitKind_Ratio_Min = 0,
PanelSplitKind_Ratio_Max = 1,
PanelSplitKind_FixedPixels_Min = 2,
PanelSplitKind_FixedPixels_Max = 3,
};
ENUM(i32, Panel_Split_Orientation){
2019-02-26 21:05:02 +00:00
PanelSplit_LeftAndRight = 0,
PanelSplit_TopAndBottom = 1,
2019-02-24 07:22:16 +00:00
};
ENUM(i32, Panel_Child){
2019-02-26 21:05:02 +00:00
PanelChild_Min = 0,
PanelChild_Max = 1,
2016-07-05 01:36:30 +00:00
};
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;
2019-02-25 23:42:13 +00:00
UNION{
STRUCT{
i32 x;
i32 y;
2019-02-25 23:42:13 +00:00
};
Vec2_i32 p;
};
};
STRUCT Parser_String_And_Type{
char *str;
u32 length;
u32 type;
};
2019-06-02 00:45:18 +00:00
ENUM(u32, File_Attribute_Flag){
FileAttribute_IsDirectory = 1,
};
STRUCT File_Attributes{
u64 size;
u64 last_write_time;
File_Attribute_Flag flags;
};
STRUCT File_Info{
2019-08-04 00:49:40 +00:00
File_Info *next;
String_Const_u8 file_name;
File_Attributes attributes;
};
STRUCT File_List{
2019-08-04 00:49:40 +00:00
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{
2019-06-01 23:58:28 +00:00
struct{
Buffer_Cursor min;
Buffer_Cursor max;
2019-06-01 23:58:28 +00:00
};
struct{
Buffer_Cursor begin;
Buffer_Cursor end;
2019-06-01 23:58:28 +00:00
};
struct{
Buffer_Cursor start;
Buffer_Cursor end;
2019-06-01 23:58:28 +00:00
};
struct{
Buffer_Cursor first;
Buffer_Cursor one_past_last;
2019-06-01 23:58:28 +00:00
};
};
STRUCT Marker{
i64 pos;
b32 lean_right;
};
ENUM(i32, Managed_Object_Type)
{
ManagedObjectType_Error = 0,
ManagedObjectType_Memory = 1,
ManagedObjectType_Markers = 2,
ManagedObjectType_COUNT = 4,
};
2018-10-06 15:26:20 +00:00
2019-09-04 05:31:35 +00:00
TYPEDEF u64 Managed_ID;
2018-10-06 15:26:20 +00:00
2019-09-04 05:31:35 +00:00
TYPEDEF u64 Managed_Scope;
TYPEDEF u64 Managed_Object;
2018-09-28 23:42:32 +00:00
static Managed_Scope ManagedScope_NULL = 0;
static Managed_Object ManagedObject_NULL = 0;
2019-09-04 05:31:35 +00:00
static Managed_ID ManagedIndex_ERROR = 0;
2018-10-01 19:32:28 +00:00
STRUCT Marker_Visual{
2018-09-28 23:42:32 +00:00
Managed_Scope scope;
u32 slot_id;
u32 gen_id;
2018-09-28 23:42:32 +00:00
};
2018-10-06 15:26:20 +00:00
ENUM(u32, Glyph_Flag){
2019-02-24 07:22:16 +00:00
GlyphFlag_None = 0x0,
GlyphFlag_Rotate90 = 0x1,
2019-01-25 21:03:52 +00:00
};
STRUCT Query_Bar{
2019-06-01 23:58:28 +00:00
String_Const_u8 prompt;
String_Const_u8 string;
umem string_capacity;
};
STRUCT Query_Bar_Ptr_Array{
Query_Bar **ptrs;
i32 count;
};
2019-04-05 21:56:58 +00:00
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{
2019-02-25 23:42:13 +00:00
id_color tag;
argb_color color;
};
2019-02-25 23:42:13 +00:00
//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;
};
2019-03-31 21:30:06 +00:00
STRUCT Face_Metrics{
f32 text_height;
2019-03-31 21:30:06 +00:00
f32 line_height;
f32 max_advance;
f32 normal_advance;
f32 space_advance;
f32 decimal_digit_advance;
f32 hex_digit_advance;
2019-03-31 21:30:06 +00:00
};
STRUCT Edit{
String_Const_u8 text;
Interval_i64 range;
2019-02-08 10:03:48 +00:00
};
STRUCT Batch_Edit{
Batch_Edit *next;
Edit edit;
2016-09-09 01:02:51 +00:00
};
2016-09-02 17:01:52 +00:00
ENUM(i32, Record_Kind){
2019-02-08 10:03:48 +00:00
RecordKind_Single,
RecordKind_Group,
};
ENUM(i32, Record_Error){
RecordError_NoError,
RecordError_InvalidBuffer,
RecordError_NoHistoryAttached,
RecordError_IndexOutOfBounds,
2019-06-01 23:58:28 +00:00
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;
2019-02-08 10:03:48 +00:00
STRUCT Record_Info{
Record_Error error;
Record_Kind kind;
i32 edit_number;
union{
struct{
2019-06-01 23:58:28 +00:00
String_Const_u8 string_forward;
String_Const_u8 string_backward;
i64 first;
} single;
struct{
i32 count;
} group;
};
2019-02-08 10:03:48 +00:00
};
2016-09-02 17:01:52 +00:00
TYPEDEF void Custom_Command_Function(struct Application_Links *app);
#if defined(CUSTOM_COMMAND_SIG) || defined(CUSTOM_DOC) || defined(CUSTOM_ALIAS)
2018-08-10 21:52:57 +00:00
#error Please do not define CUSTOM_COMMAND_SIG, CUSTOM_DOC, or CUSTOM_ALIAS
2018-06-15 20:10:49 +00:00
#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)
2018-06-15 20:10:49 +00:00
#endif
2019-10-10 22:57:02 +00:00
// TODO(allen): rename
STRUCT User_Input{
Input_Event event;
b32 abort;
};
STRUCT Frame_Info{
i32 index;
f32 literal_dt;
f32 animation_dt;
};
TYPEDEF_FUNC void Render_Callback(struct Application_Links *app);
2019-10-10 22:57:02 +00:00
typedef i32 Hook_ID;
enum{
HookID_FileOutOfSync,
HookID_Exit,
HookID_BufferViewerUpdate,
HookID_ScrollRule,
HookID_NewFile,
HookID_OpenFile,
HookID_SaveFile,
HookID_EndFile,
HookID_FileEditRange,
HookID_FileExternallyModified,
HookID_CommandCaller,
HookID_RenderCaller,
HookID_InputFilter,
HookID_Start,
HookID_BufferNameResolver,
HookID_ModifyColorTable,
HookID_ClipboardChange,
HookID_GetViewBufferRegion,
};
2018-09-22 23:45:24 +00:00
TYPEDEF_FUNC i32 Hook_Function(struct Application_Links *app);
#define HOOK_SIG(name) i32 name(struct Application_Links *app)
2019-10-10 22:57:02 +00:00
TYPEDEF_FUNC i32 Command_Caller_Hook_Function(struct Application_Links *app);
#define COMMAND_CALLER_HOOK(name) i32 name(struct Application_Links *app)
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)
2019-09-04 05:31:35 +00:00
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)
2019-03-22 01:27:28 +00:00
2019-08-13 18:54:15 +00:00
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)
2019-02-25 23:42:13 +00:00
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)
2019-02-25 23:42:13 +00:00
2019-03-30 22:36:31 +00:00
ENUM(u32, Clipboard_Change_Flag){
ClipboardFlag_FromOS = 0x1,
};
2019-06-01 23:58:28 +00:00
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)
2019-06-19 02:31:59 +00:00
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;
2019-06-01 23:58:28 +00:00
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)
typedef i64 Command_Map_ID;
STRUCT Color_Picker{
2019-06-01 23:58:28 +00:00
String_Const_u8 title;
2019-02-25 23:42:13 +00:00
argb_color *dest;
b32 *finished;
2019-02-24 07:22:16 +00:00
};
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;
};
2019-02-24 07:22:16 +00:00
2019-06-19 02:31:59 +00:00
STRUCT Process_State{
b32 valid;
b32 is_updating;
i64 return_code;
};
#endif