diff --git a/4coder_API.html b/4coder_API.html index bc7fb52b..1e9c0904 100644 --- a/4coder_API.html +++ b/4coder_API.html @@ -26,143 +26,143 @@ This is the documentation for alpha 4.0.8 super! The documentation has been made

§2.1 Function List

§2.2 Descriptions

-
+

§2.2.0: exec_command

void exec_command(Application_Links *app, int command_id)
@@ -170,7 +170,7 @@ DOC_PARAM(command_id, an integer id enumerated in 4coder_custom.h starting with DOC(Executes the command associated with the command_id passed in)
-
+

§2.2.1: exec_system_command

int exec_system_command(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int path_len, char *command, int command_len, unsigned int flags)
@@ -203,87 +203,8 @@ of at the beginning. )
-
-

§2.2.2: directory_get_hot

-
int directory_get_hot(Application_Links *app, char *out, int capacity)
-
-DOC_PARAM(out, a buffer that receives the 4coder 'hot directory') -DOC_PARAM(capacity, the maximum size to be output to the output buffer) -DOC_RETURN(returns the size of the string written into the buffer) -DOC -( -4coder has a concept of a 'hot directory' which is the directory most recently -accessed in the GUI. Whenever the GUI is opened it shows the hot directory. - -In the future this will be deprecated and eliminated in favor of more flexible -directories controlled by the custom side. -) -
-
-
-

§2.2.3: get_4ed_path

-
int get_4ed_path(Application_Links *app, char *out, int capacity)
-
-DOC_PARAM(out, a buffer that receives the path to the 4ed executable file) -DOC_PARAM(capacity, the maximum capacity of the output buffer) -DOC_RETURN(returns non-zero on success, returns zero on failure) -
-
-
-

§2.2.4: file_exists

-
int file_exists(Application_Links *app, char *filename, int len)
-
-DOC_PARAM(filename, the full path to a file) -DOC_PARAM(len, the number of characters in the filename string) -DOC_RETURN(returns non-zero if the file exists, returns zero if the file does not exist) -
-
-
-

§2.2.5: directory_cd

-
int directory_cd(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len)
-
-DOC_PARAM(dir, a string buffer containing a directory) -DOC_PARAM(len, the length of the string in the string buffer) -DOC_PARAM(capacity, the maximum size of the string buffer) -DOC_PARAM(rel_path, the path to change to, may include '.' or '..') -DOC_PARAM(rel_len, the length of the rel_path string) -DOC_RETURN(returns non-zero if the call succeeds, returns zero otherwise) -DOC -( -This call succeeds if the directory exists and the new directory fits inside the dir buffer. -If the call succeeds the dir buffer is filled with the new directory and len contains the -length of the string in the buffer. - -For instance if dir contains "C:/Users/MySelf" and rel is "Documents" the buffer will contain -"C:/Users/MySelf/Documents" and len will contain the length of that string. This call can -also be used with rel as ".." to traverse to parent folders. -) -
-
-
-

§2.2.6: get_file_list

-
File_List get_file_list(Application_Links *app, char *dir, int len)
-
-DOC_PARAM(dir, the directory whose files will be enumerated in the returned list) -DOC_PARAM(len, the length of the dir string) -DOC_RETURN -( -returns a File_List struct containing pointers to the names of the files in -the specified directory. The File_List returned should be passed to free_file_list -when it is no longer in use. -) -
-
-
-

§2.2.7: free_file_list

-
void free_file_list(Application_Links *app, File_List list)
-
-DOC_PARAM(list, the file list to be freed) -DOC(after this call the file list passed in should not be read or written to) -
-
-
-

§2.2.8: clipboard_post

+
+

§2.2.2: clipboard_post

void clipboard_post(Application_Links *app, char *str, int len)
DOC_PARAM(str, the string to post to the clipboard) @@ -296,15 +217,15 @@ be pasted into other applications. )
-
-

§2.2.9: clipboard_count

+
+

§2.2.3: clipboard_count

int clipboard_count(Application_Links *app)
DOC(returns the number of items in the clipboard)
-
-

§2.2.10: clipboard_index

+
+

§2.2.4: clipboard_index

int clipboard_index(Application_Links *app, int index, char *out, int len)
DOC_PARAM(index, the index of the item to be read) @@ -323,8 +244,8 @@ string is not null terminated. )
-
-

§2.2.11: get_buffer_first

+
+

§2.2.5: get_buffer_first

Buffer_Summary get_buffer_first(Application_Links *app, unsigned int access)
DOC_PARAM(access, the access flags for the access) @@ -340,8 +261,8 @@ DOC_SEE(Access_Flag) DOC_SEE(get_buffer_next)
-
-

§2.2.12: get_buffer_next

+
+

§2.2.6: get_buffer_next

void get_buffer_next(Application_Links *app, Buffer_Summary *buffer, unsigned int access)
DOC_PARAM(buffer, pointer to the loop buffer originally returned by get_buffer_first) @@ -359,8 +280,8 @@ DOC_SEE(Access_Flag) DOC_SEE(get_buffer_first)
-
-

§2.2.13: get_buffer

+
+

§2.2.7: get_buffer

Buffer_Summary get_buffer(Application_Links *app, int buffer_id, unsigned int access)
DOC_PARAM(buffer_id, the id of the buffer to get) @@ -368,8 +289,8 @@ DOC_PARAM(access, the access flags for the access) DOC_RETURN(returns a summary that describes the indicated buffer if it exists and is accessible)
-
-

§2.2.14: get_buffer_by_name

+
+

§2.2.8: get_buffer_by_name

Buffer_Summary get_buffer_by_name(Application_Links *app, char *name, int len, unsigned int access)
DOC_PARAM(name, the name of the buffer) @@ -378,9 +299,9 @@ DOC_PARAM(access, the access flags for the access) DOC_RETURN(returns a summary that describes the indicated buffer if it exists and is accessible)
-
-

§2.2.15: buffer_seek

-
int buffer_seek(Application_Links *app, Buffer_Summary *buffer, int start_pos, int seek_forward, unsigned int flags)
+
+

§2.2.9: buffer_boundary_seek

+
int buffer_boundary_seek(Application_Links *app, Buffer_Summary *buffer, int start_pos, int seek_forward, unsigned int flags)
DOC_PARAM(buffer, the buffer to seek through) DOC_PARAM(start_pos, the absolute position in the buffer to begin the seek) @@ -390,8 +311,8 @@ DOC_RETURN(returns the position where the seek stops) DOC_SEE(Seek_Boundary_Flag)
-
-

§2.2.16: buffer_read_range

+
+

§2.2.10: buffer_read_range

int buffer_read_range(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *out)
DOC_PARAM(buffer, the buffer to read out of) @@ -409,8 +330,8 @@ is not within the bounds of the buffer. )
-
-

§2.2.17: buffer_replace_range

+
+

§2.2.11: buffer_replace_range

int buffer_replace_range(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *str, int len)
DOC_PARAM(buffer, the buffer to edit) @@ -432,8 +353,8 @@ range is not within the bounds of the buffer. )
-
-

§2.2.18: buffer_set_setting

+
+

§2.2.12: buffer_set_setting

int buffer_set_setting(Application_Links *app, Buffer_Summary *buffer, int setting, int value)
DOC_PARAM(buffer, the buffer to set a setting on) @@ -442,8 +363,8 @@ DOC_PARAM(value, the value to set the specified setting to) DOC_SEE(Buffer_Setting_ID)
-
-

§2.2.19: buffer_auto_indent

+
+

§2.2.13: buffer_auto_indent

int buffer_auto_indent(Application_Links *app, Buffer_Summary *buffer, int start, int end, int tab_width, unsigned int flags)
DOC_PARAM(buffer, the buffer in which to apply the auto indenting) @@ -462,8 +383,8 @@ completed this function will fail. DOC_SEE(Auto_Tab_Flag)
-
-

§2.2.20: create_buffer

+
+

§2.2.14: create_buffer

Buffer_Summary create_buffer(Application_Links *app, char *filename, int filename_len, unsigned int flags)
DOC_PARAM(filename, the name of the file to be opened or created) @@ -481,8 +402,8 @@ the filename does not correspond to a file on disk the buffer is created empty. DOC_SEE(Buffer_Create_Flag)
-
-

§2.2.21: save_buffer

+
+

§2.2.15: save_buffer

int save_buffer(Application_Links *app, Buffer_Summary *buffer, char *filename, int filename_len, unsigned int flags)
DOC_PARAM(buffer, the buffer to save to a file) @@ -492,8 +413,8 @@ DOC_PARAM(flags, not currently used) DOC_RETURN(returns non-zero if the save succeeds)
-
-

§2.2.22: kill_buffer

+
+

§2.2.16: kill_buffer

int kill_buffer(Application_Links *app, Buffer_Identifier buffer, int view_id, unsigned int flags)
DOC_PARAM(buffer, a buffer identifier specifying the buffer to try to kill) @@ -509,8 +430,8 @@ If the view is not open the kill fails. DOC_SEE(Buffer_Kill_Flags)
-
-

§2.2.23: get_view_first

+
+

§2.2.17: get_view_first

View_Summary get_view_first(Application_Links *app, unsigned int access)
DOC_PARAM(access, the access flags for the access) @@ -526,8 +447,8 @@ DOC_SEE(Access_Flag) DOC_SEE(get_view_next)
-
-

§2.2.24: get_view_next

+
+

§2.2.18: get_view_next

void get_view_next(Application_Links *app, View_Summary *view, unsigned int access)
DOC_PARAM(view, pointer to the loop view originally returned by get_view_first) @@ -545,8 +466,8 @@ DOC_SEE(Access_Flag) DOC_SEE(get_view_first)
-
-

§2.2.25: get_view

+
+

§2.2.19: get_view

View_Summary get_view(Application_Links *app, int view_id, unsigned int access)
DOC_PARAM(view_id, the id of the view to get) @@ -554,16 +475,16 @@ DOC_PARAM(access, the access flags for the access) DOC_RETURN(returns a summary that describes the indicated view if it is open and is accessible)
-
-

§2.2.26: get_active_view

+
+

§2.2.20: get_active_view

View_Summary get_active_view(Application_Links *app, unsigned int access)
DOC_PARAM(access, the access flags for the access) DOC_RETURN(returns a summary that describes the active view)
-
-

§2.2.27: view_compute_cursor

+
+

§2.2.21: view_compute_cursor

int view_compute_cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, Full_Cursor *cursor_out)
DOC_PARAM(view, the view on which to run the cursor computation) @@ -577,8 +498,8 @@ Computes a full cursor for the given seek position. DOC_SEE(Buffer_Seek)
-
-

§2.2.28: view_set_cursor

+
+

§2.2.22: view_set_cursor

int view_set_cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, int set_preferred_x)
DOC_PARAM(view, the view in which to set the cursor) @@ -593,8 +514,8 @@ cursor position is is a vertical motion that tries to keep the cursor in the sam DOC_SEE(Buffer_Seek)
-
-

§2.2.29: view_set_mark

+
+

§2.2.23: view_set_mark

int view_set_mark(Application_Links *app, View_Summary *view, Buffer_Seek seek)
DOC_PARAM(view, the view in which to set the mark) @@ -607,8 +528,8 @@ Sets the the view's mark position. DOC_SEE(Buffer_Seek)
-
-

§2.2.30: view_set_highlight

+
+

§2.2.24: view_set_highlight

int view_set_highlight(Application_Links *app, View_Summary *view, int start, int end, int turn_on)
DOC_PARAM(view, the view to set the highlight in) @@ -625,8 +546,8 @@ the turn_on set to false, will switch back to showing the cursor. )
-
-

§2.2.31: view_set_buffer

+
+

§2.2.25: view_set_buffer

int view_set_buffer(Application_Links *app, View_Summary *view, int buffer_id, unsigned int flags)
DOC_PARAM(view, the view to display the buffer in) @@ -641,8 +562,8 @@ cancels and dialogue shown in the view and displays the file. DOC_SEE(Set_Buffer_Flag)
-
-

§2.2.32: view_post_fade

+
+

§2.2.26: view_post_fade

int view_post_fade(Application_Links *app, View_Summary *view, float seconds, int start, int end, unsigned int color)
DOC_PARAM(view, the veiw to post a fade effect to) @@ -652,18 +573,18 @@ DOC_PARAM(end, one after the last character in the fade range) DOC_PARAM(color, the color to fade from)
-
-

§2.2.33: view_set_paste_rewrite_

+
+

§2.2.27: view_set_paste_rewrite_

void view_set_paste_rewrite_(Application_Links *app, View_Summary *view)
No doc generated ~ assume this call is not meant to be public
-
-

§2.2.34: view_get_paste_rewrite_

+
+

§2.2.28: view_get_paste_rewrite_

int view_get_paste_rewrite_(Application_Links *app, View_Summary *view)
No doc generated ~ assume this call is not meant to be public
-
-

§2.2.35: get_user_input

+
+

§2.2.29: get_user_input

User_Input get_user_input(Application_Links *app, unsigned int get_type, unsigned int abort_type)
DOC_PARAM(get_type, input type flag that specifies the types of inputs that should be returned) @@ -681,24 +602,24 @@ DOC_SEE(Input_Type_Flag) DOC_SEE(User_Input)
-
-

§2.2.36: get_command_input

+
+

§2.2.30: get_command_input

User_Input get_command_input(Application_Links *app)
DOC_RETURN(returns the input that triggered the command in execution.) DOC_SEE(User_Input)
-
-

§2.2.37: get_mouse_state

+
+

§2.2.31: get_mouse_state

Mouse_State get_mouse_state(Application_Links *app)
DOC_RETURN(returns the current mouse state) DOC_SEE(Mouse_State)
-
-

§2.2.38: start_query_bar

+
+

§2.2.32: start_query_bar

int start_query_bar(Application_Links *app, Query_Bar *bar, unsigned int flags)
DOC_PARAM(bar, a pointer to the Query_Bar struct that defines the bar's contents) @@ -711,8 +632,8 @@ until the command returns. )
-
-

§2.2.39: end_query_bar

+
+

§2.2.33: end_query_bar

void end_query_bar(Application_Links *app, Query_Bar *bar, unsigned int flags)
DOC_PARAM(bar, a pointer to the Query_Bar struct to end) @@ -723,32 +644,32 @@ bar must be a pointer previously passed to start_query_bar previously in the sam )
-
-

§2.2.40: print_message

+ -
-

§2.2.41: change_theme

+
+

§2.2.35: change_theme

void change_theme(Application_Links *app, char *name, int len)
DOC_PARAM(name, the name of the built in theme to change to) DOC_PARAM(len, the length of the name string)
-
-

§2.2.42: change_font

+
+

§2.2.36: change_font

void change_font(Application_Links *app, char *name, int len)
DOC_PARAM(name, the name of the built in font to change to) DOC_PARAM(len, the length of the name string)
-
-

§2.2.43: set_theme_colors

+
+

§2.2.37: set_theme_colors

void set_theme_colors(Application_Links *app, Theme_Color *colors, int count)
DOC_PARAM(colors, an array of color structs pairing differet style tags to color codes) @@ -760,8 +681,8 @@ code paired with the tag. )
-
-

§2.2.44: get_theme_colors

+
+

§2.2.38: get_theme_colors

void get_theme_colors(Application_Links *app, Theme_Color *colors, int count)
DOC_PARAM(colors, an array of color structs listing style tags to get color values for) @@ -773,6 +694,85 @@ color from the specified color in the pallet. )
+
+

§2.2.39: directory_get_hot

+
int directory_get_hot(Application_Links *app, char *out, int capacity)
+
+DOC_PARAM(out, a buffer that receives the 4coder 'hot directory') +DOC_PARAM(capacity, the maximum size to be output to the output buffer) +DOC_RETURN(returns the size of the string written into the buffer) +DOC +( +4coder has a concept of a 'hot directory' which is the directory most recently +accessed in the GUI. Whenever the GUI is opened it shows the hot directory. + +In the future this will be deprecated and eliminated in favor of more flexible +directories controlled by the custom side. +) +
+
+
+

§2.2.40: get_file_list

+
File_List get_file_list(Application_Links *app, char *dir, int len)
+
+DOC_PARAM(dir, the directory whose files will be enumerated in the returned list) +DOC_PARAM(len, the length of the dir string) +DOC_RETURN +( +returns a File_List struct containing pointers to the names of the files in +the specified directory. The File_List returned should be passed to free_file_list +when it is no longer in use. +) +
+
+
+

§2.2.41: free_file_list

+
void free_file_list(Application_Links *app, File_List list)
+
+DOC_PARAM(list, the file list to be freed) +DOC(after this call the file list passed in should not be read or written to) +
+
+
+

§2.2.42: file_exists

+
int file_exists(Application_Links *app, char *filename, int len)
+
+DOC_PARAM(filename, the full path to a file) +DOC_PARAM(len, the number of characters in the filename string) +DOC_RETURN(returns non-zero if the file exists, returns zero if the file does not exist) +
+
+
+

§2.2.43: directory_cd

+
int directory_cd(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len)
+
+DOC_PARAM(dir, a string buffer containing a directory) +DOC_PARAM(len, the length of the string in the string buffer) +DOC_PARAM(capacity, the maximum size of the string buffer) +DOC_PARAM(rel_path, the path to change to, may include '.' or '..') +DOC_PARAM(rel_len, the length of the rel_path string) +DOC_RETURN(returns non-zero if the call succeeds, returns zero otherwise) +DOC +( +This call succeeds if the directory exists and the new directory fits inside the dir buffer. +If the call succeeds the dir buffer is filled with the new directory and len contains the +length of the string in the buffer. + +For instance if dir contains "C:/Users/MySelf" and rel is "Documents" the buffer will contain +"C:/Users/MySelf/Documents" and len will contain the length of that string. This call can +also be used with rel set to ".." to traverse to parent folders. +) +
+
+
+

§2.2.44: get_4ed_path

+
int get_4ed_path(Application_Links *app, char *out, int capacity)
+
+DOC_PARAM(out, a buffer that receives the path to the 4ed executable file) +DOC_PARAM(capacity, the maximum capacity of the output buffer) +DOC_RETURN(returns non-zero on success, returns zero on failure) +
+
diff --git a/4coder_buffer_types.h b/4coder_buffer_types.h index 26f25cf3..3ca46096 100644 --- a/4coder_buffer_types.h +++ b/4coder_buffer_types.h @@ -19,7 +19,7 @@ typedef struct Full_Cursor{ float wrapped_x, wrapped_y; } Full_Cursor; -typedef enum{ +typedef enum Buffer_Seek_Type{ buffer_seek_pos, buffer_seek_wrapped_xy, buffer_seek_unwrapped_xy, diff --git a/4coder_custom_api.h b/4coder_custom_api.h index a2370492..683cee5e 100644 --- a/4coder_custom_api.h +++ b/4coder_custom_api.h @@ -1,11 +1,5 @@ #define EXEC_COMMAND_SIG(n) void n(Application_Links *app, int command_id) #define EXEC_SYSTEM_COMMAND_SIG(n) int n(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int path_len, char *command, int command_len, unsigned int flags) -#define DIRECTORY_GET_HOT_SIG(n) int n(Application_Links *app, char *out, int capacity) -#define GET_4ED_PATH_SIG(n) int n(Application_Links *app, char *out, int capacity) -#define FILE_EXISTS_SIG(n) int n(Application_Links *app, char *filename, int len) -#define DIRECTORY_CD_SIG(n) int n(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len) -#define GET_FILE_LIST_SIG(n) File_List n(Application_Links *app, char *dir, int len) -#define FREE_FILE_LIST_SIG(n) void n(Application_Links *app, File_List list) #define CLIPBOARD_POST_SIG(n) void n(Application_Links *app, char *str, int len) #define CLIPBOARD_COUNT_SIG(n) int n(Application_Links *app) #define CLIPBOARD_INDEX_SIG(n) int n(Application_Links *app, int index, char *out, int len) @@ -13,7 +7,7 @@ #define GET_BUFFER_NEXT_SIG(n) void n(Application_Links *app, Buffer_Summary *buffer, unsigned int access) #define GET_BUFFER_SIG(n) Buffer_Summary n(Application_Links *app, int buffer_id, unsigned int access) #define GET_BUFFER_BY_NAME_SIG(n) Buffer_Summary n(Application_Links *app, char *name, int len, unsigned int access) -#define BUFFER_SEEK_SIG(n) int n(Application_Links *app, Buffer_Summary *buffer, int start_pos, int seek_forward, unsigned int flags) +#define BUFFER_BOUNDARY_SEEK_SIG(n) int n(Application_Links *app, Buffer_Summary *buffer, int start_pos, int seek_forward, unsigned int flags) #define BUFFER_READ_RANGE_SIG(n) int n(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *out) #define BUFFER_REPLACE_RANGE_SIG(n) int n(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *str, int len) #define BUFFER_SET_SETTING_SIG(n) int n(Application_Links *app, Buffer_Summary *buffer, int setting, int value) @@ -43,15 +37,15 @@ #define CHANGE_FONT_SIG(n) void n(Application_Links *app, char *name, int len) #define SET_THEME_COLORS_SIG(n) void n(Application_Links *app, Theme_Color *colors, int count) #define GET_THEME_COLORS_SIG(n) void n(Application_Links *app, Theme_Color *colors, int count) +#define DIRECTORY_GET_HOT_SIG(n) int n(Application_Links *app, char *out, int capacity) +#define GET_FILE_LIST_SIG(n) File_List n(Application_Links *app, char *dir, int len) +#define FREE_FILE_LIST_SIG(n) void n(Application_Links *app, File_List list) +#define FILE_EXISTS_SIG(n) int n(Application_Links *app, char *filename, int len) +#define DIRECTORY_CD_SIG(n) int n(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len) +#define GET_4ED_PATH_SIG(n) int n(Application_Links *app, char *out, int capacity) extern "C"{ typedef EXEC_COMMAND_SIG(Exec_Command_Function); typedef EXEC_SYSTEM_COMMAND_SIG(Exec_System_Command_Function); - typedef DIRECTORY_GET_HOT_SIG(Directory_Get_Hot_Function); - typedef GET_4ED_PATH_SIG(Get_4ed_Path_Function); - typedef FILE_EXISTS_SIG(File_Exists_Function); - typedef DIRECTORY_CD_SIG(Directory_CD_Function); - typedef GET_FILE_LIST_SIG(Get_File_List_Function); - typedef FREE_FILE_LIST_SIG(Free_File_List_Function); typedef CLIPBOARD_POST_SIG(Clipboard_Post_Function); typedef CLIPBOARD_COUNT_SIG(Clipboard_Count_Function); typedef CLIPBOARD_INDEX_SIG(Clipboard_Index_Function); @@ -59,7 +53,7 @@ extern "C"{ typedef GET_BUFFER_NEXT_SIG(Get_Buffer_Next_Function); typedef GET_BUFFER_SIG(Get_Buffer_Function); typedef GET_BUFFER_BY_NAME_SIG(Get_Buffer_By_Name_Function); - typedef BUFFER_SEEK_SIG(Buffer_Seek_Function); + typedef BUFFER_BOUNDARY_SEEK_SIG(Buffer_Boundary_Seek_Function); typedef BUFFER_READ_RANGE_SIG(Buffer_Read_Range_Function); typedef BUFFER_REPLACE_RANGE_SIG(Buffer_Replace_Range_Function); typedef BUFFER_SET_SETTING_SIG(Buffer_Set_Setting_Function); @@ -89,18 +83,18 @@ extern "C"{ typedef CHANGE_FONT_SIG(Change_Font_Function); typedef SET_THEME_COLORS_SIG(Set_Theme_Colors_Function); typedef GET_THEME_COLORS_SIG(Get_Theme_Colors_Function); + typedef DIRECTORY_GET_HOT_SIG(Directory_Get_Hot_Function); + typedef GET_FILE_LIST_SIG(Get_File_List_Function); + typedef FREE_FILE_LIST_SIG(Free_File_List_Function); + typedef FILE_EXISTS_SIG(File_Exists_Function); + typedef DIRECTORY_CD_SIG(Directory_CD_Function); + typedef GET_4ED_PATH_SIG(Get_4ed_Path_Function); } struct Application_Links{ void *memory; int memory_size; Exec_Command_Function *exec_command; Exec_System_Command_Function *exec_system_command; - Directory_Get_Hot_Function *directory_get_hot; - Get_4ed_Path_Function *get_4ed_path; - File_Exists_Function *file_exists; - Directory_CD_Function *directory_cd; - Get_File_List_Function *get_file_list; - Free_File_List_Function *free_file_list; Clipboard_Post_Function *clipboard_post; Clipboard_Count_Function *clipboard_count; Clipboard_Index_Function *clipboard_index; @@ -108,7 +102,7 @@ struct Application_Links{ Get_Buffer_Next_Function *get_buffer_next; Get_Buffer_Function *get_buffer; Get_Buffer_By_Name_Function *get_buffer_by_name; - Buffer_Seek_Function *buffer_seek; + Buffer_Boundary_Seek_Function *buffer_boundary_seek; Buffer_Read_Range_Function *buffer_read_range; Buffer_Replace_Range_Function *buffer_replace_range; Buffer_Set_Setting_Function *buffer_set_setting; @@ -138,54 +132,60 @@ struct Application_Links{ Change_Font_Function *change_font; Set_Theme_Colors_Function *set_theme_colors; Get_Theme_Colors_Function *get_theme_colors; + Directory_Get_Hot_Function *directory_get_hot; + Get_File_List_Function *get_file_list; + Free_File_List_Function *free_file_list; + File_Exists_Function *file_exists; + Directory_CD_Function *directory_cd; + Get_4ed_Path_Function *get_4ed_path; void *cmd_context; void *system_links; void *current_coroutine; int type_coroutine; }; #define FillAppLinksAPI(app_links) do{\ -app_links->exec_command = external_exec_command;\ -app_links->exec_system_command = external_exec_system_command;\ -app_links->directory_get_hot = external_directory_get_hot;\ -app_links->get_4ed_path = external_get_4ed_path;\ -app_links->file_exists = external_file_exists;\ -app_links->directory_cd = external_directory_cd;\ -app_links->get_file_list = external_get_file_list;\ -app_links->free_file_list = external_free_file_list;\ -app_links->clipboard_post = external_clipboard_post;\ -app_links->clipboard_count = external_clipboard_count;\ -app_links->clipboard_index = external_clipboard_index;\ -app_links->get_buffer_first = external_get_buffer_first;\ -app_links->get_buffer_next = external_get_buffer_next;\ -app_links->get_buffer = external_get_buffer;\ -app_links->get_buffer_by_name = external_get_buffer_by_name;\ -app_links->buffer_seek = external_buffer_seek;\ -app_links->buffer_read_range = external_buffer_read_range;\ -app_links->buffer_replace_range = external_buffer_replace_range;\ -app_links->buffer_set_setting = external_buffer_set_setting;\ -app_links->buffer_auto_indent = external_buffer_auto_indent;\ -app_links->create_buffer = external_create_buffer;\ -app_links->save_buffer = external_save_buffer;\ -app_links->kill_buffer = external_kill_buffer;\ -app_links->get_view_first = external_get_view_first;\ -app_links->get_view_next = external_get_view_next;\ -app_links->get_view = external_get_view;\ -app_links->get_active_view = external_get_active_view;\ -app_links->view_compute_cursor = external_view_compute_cursor;\ -app_links->view_set_cursor = external_view_set_cursor;\ -app_links->view_set_mark = external_view_set_mark;\ -app_links->view_set_highlight = external_view_set_highlight;\ -app_links->view_set_buffer = external_view_set_buffer;\ -app_links->view_post_fade = external_view_post_fade;\ -app_links->view_set_paste_rewrite_ = external_view_set_paste_rewrite_;\ -app_links->view_get_paste_rewrite_ = external_view_get_paste_rewrite_;\ -app_links->get_user_input = external_get_user_input;\ -app_links->get_command_input = external_get_command_input;\ -app_links->get_mouse_state = external_get_mouse_state;\ -app_links->start_query_bar = external_start_query_bar;\ -app_links->end_query_bar = external_end_query_bar;\ -app_links->print_message = external_print_message;\ -app_links->change_theme = external_change_theme;\ -app_links->change_font = external_change_font;\ -app_links->set_theme_colors = external_set_theme_colors;\ -app_links->get_theme_colors = external_get_theme_colors; } while(false) +app_links->exec_command = Exec_Command;\ +app_links->exec_system_command = Exec_System_Command;\ +app_links->clipboard_post = Clipboard_Post;\ +app_links->clipboard_count = Clipboard_Count;\ +app_links->clipboard_index = Clipboard_Index;\ +app_links->get_buffer_first = Get_Buffer_First;\ +app_links->get_buffer_next = Get_Buffer_Next;\ +app_links->get_buffer = Get_Buffer;\ +app_links->get_buffer_by_name = Get_Buffer_By_Name;\ +app_links->buffer_boundary_seek = Buffer_Boundary_Seek;\ +app_links->buffer_read_range = Buffer_Read_Range;\ +app_links->buffer_replace_range = Buffer_Replace_Range;\ +app_links->buffer_set_setting = Buffer_Set_Setting;\ +app_links->buffer_auto_indent = Buffer_Auto_Indent;\ +app_links->create_buffer = Create_Buffer;\ +app_links->save_buffer = Save_Buffer;\ +app_links->kill_buffer = Kill_Buffer;\ +app_links->get_view_first = Get_View_First;\ +app_links->get_view_next = Get_View_Next;\ +app_links->get_view = Get_View;\ +app_links->get_active_view = Get_Active_View;\ +app_links->view_compute_cursor = View_Compute_Cursor;\ +app_links->view_set_cursor = View_Set_Cursor;\ +app_links->view_set_mark = View_Set_Mark;\ +app_links->view_set_highlight = View_Set_Highlight;\ +app_links->view_set_buffer = View_Set_Buffer;\ +app_links->view_post_fade = View_Post_Fade;\ +app_links->view_set_paste_rewrite_ = View_Set_Paste_Rewrite_;\ +app_links->view_get_paste_rewrite_ = View_Get_Paste_Rewrite_;\ +app_links->get_user_input = Get_User_Input;\ +app_links->get_command_input = Get_Command_Input;\ +app_links->get_mouse_state = Get_Mouse_State;\ +app_links->start_query_bar = Start_Query_Bar;\ +app_links->end_query_bar = End_Query_Bar;\ +app_links->print_message = Print_Message;\ +app_links->change_theme = Change_Theme;\ +app_links->change_font = Change_Font;\ +app_links->set_theme_colors = Set_Theme_Colors;\ +app_links->get_theme_colors = Get_Theme_Colors;\ +app_links->directory_get_hot = Directory_Get_Hot;\ +app_links->get_file_list = Get_File_List;\ +app_links->free_file_list = Free_File_List;\ +app_links->file_exists = File_Exists;\ +app_links->directory_cd = Directory_CD;\ +app_links->get_4ed_path = Get_4ed_Path; } while(false) diff --git a/4coder_default_include.cpp b/4coder_default_include.cpp index e66b50da..f87c5fa2 100644 --- a/4coder_default_include.cpp +++ b/4coder_default_include.cpp @@ -599,7 +599,7 @@ basic_seek(Application_Links *app, int seek_type, unsigned int flags){ unsigned int access = AccessProtected; View_Summary view = app->get_active_view(app, access); Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, access); - int pos = app->buffer_seek(app, &buffer, view.cursor.pos, seek_type, flags); + int pos = app->buffer_boundary_seek(app, &buffer, view.cursor.pos, seek_type, flags); app->view_set_cursor(app, &view, seek_pos(pos), true); } @@ -798,9 +798,9 @@ CUSTOM_COMMAND_SIG(snipe_token_or_word){ view = app->get_active_view(app, access); buffer = app->get_buffer(app, view.buffer_id, access); - pos1 = app->buffer_seek(app, &buffer, view.cursor.pos, false, BoundryToken | BoundryWhitespace); + pos1 = app->buffer_boundary_seek(app, &buffer, view.cursor.pos, false, BoundryToken | BoundryWhitespace); - pos2 = app->buffer_seek(app, &buffer, pos1, true, BoundryToken | BoundryWhitespace); + pos2 = app->buffer_boundary_seek(app, &buffer, pos1, true, BoundryToken | BoundryWhitespace); Range range = make_range(pos1, pos2); app->buffer_replace_range(app, &buffer, range.start, range.end, 0, 0); @@ -836,6 +836,7 @@ CUSTOM_COMMAND_SIG(open_file_in_quotes){ append(&file_name, make_string(short_file_name, size)); exec_command(app, cmdid_change_active_panel); + view = app->get_active_view(app, AccessAll); view_open_file(app, &view, expand_str(file_name), false); } } diff --git a/4ed.cpp b/4ed.cpp index 3da9232b..d0ee0376 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -984,9 +984,7 @@ update_command_data(App_Vars *vars, Command_Data *cmd){ globalvar Command_Function command_table[cmdid_count]; -//extern "C"{ #include "4ed_api_implementation.cpp" -//} struct Command_In{ Command_Data *cmd; diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 6472fda8..43ef729f 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -139,7 +139,10 @@ imp_get_view(Command_Data *cmd, View_Summary *view){ return(vptr); } -EXEC_COMMAND_SIG(external_exec_command)/* +#define API_EXPORT + +API_EXPORT void +Exec_Command(Application_Links *app, int command_id)/* DOC_PARAM(command_id, an integer id enumerated in 4coder_custom.h starting with cmdid) DOC(Executes the command associated with the command_id passed in) */{ @@ -153,7 +156,8 @@ DOC(Executes the command associated with the command_id passed in) } // TODO(allen): This is a bit of a mess and needs to be fixed soon -EXEC_SYSTEM_COMMAND_SIG(external_exec_system_command)/* +API_EXPORT int +Exec_System_Command(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int path_len, char *command, int command_len, unsigned int flags)/* DOC_PARAM(view, the target view that will display the output buffer, may be NULL, see description for details) DOC_PARAM(buffer, a buffer identifier for the buffer that will be filled with the output from the command) DOC_PARAM(path, the path from which the command is executed) @@ -321,63 +325,8 @@ of at the beginning. return(result); } -DIRECTORY_GET_HOT_SIG(external_directory_get_hot)/* -DOC_PARAM(out, a buffer that receives the 4coder 'hot directory') -DOC_PARAM(capacity, the maximum size to be output to the output buffer) -DOC_RETURN(returns the size of the string written into the buffer) -DOC -( -4coder has a concept of a 'hot directory' which is the directory most recently -accessed in the GUI. Whenever the GUI is opened it shows the hot directory. - -In the future this will be deprecated and eliminated in favor of more flexible -directories controlled by the custom side. -) -*/{ - Command_Data *cmd = (Command_Data*)app->cmd_context; - Hot_Directory *hot = &cmd->models->hot_directory; - i32 copy_max = capacity - 1; - hot_directory_clean_end(hot); - if (copy_max > hot->string.size) - copy_max = hot->string.size; - memcpy(out, hot->string.str, copy_max); - out[copy_max] = 0; - return(hot->string.size); -} - -#define external_get_4ed_path system->get_4ed_path - -#define external_file_exists system->file_exists - -#define external_directory_cd system->directory_cd - -GET_FILE_LIST_SIG(external_get_file_list)/* -DOC_PARAM(dir, the directory whose files will be enumerated in the returned list) -DOC_PARAM(len, the length of the dir string) -DOC_RETURN -( -returns a File_List struct containing pointers to the names of the files in -the specified directory. The File_List returned should be passed to free_file_list -when it is no longer in use. -) -*/{ - Command_Data *cmd = (Command_Data*)app->cmd_context; - System_Functions *system = cmd->system; - File_List result = {}; - system->set_file_list(&result, make_string(dir, len)); - return(result); -} - -FREE_FILE_LIST_SIG(external_free_file_list)/* -DOC_PARAM(list, the file list to be freed) -DOC(after this call the file list passed in should not be read or written to) -*/{ - Command_Data *cmd = (Command_Data*)app->cmd_context; - System_Functions *system = cmd->system; - system->set_file_list(&list, make_string(0, 0)); -} - -CLIPBOARD_POST_SIG(external_clipboard_post)/* +API_EXPORT void +Clipboard_Post(Application_Links *app, char *str, int len)/* DOC_PARAM(str, the string to post to the clipboard) DOC_PARAM(len, the length of the string str) DOC @@ -398,7 +347,8 @@ be pasted into other applications. system->post_clipboard(*dest); } -CLIPBOARD_COUNT_SIG(external_clipboard_count)/* +API_EXPORT int +Clipboard_Count(Application_Links *app)/* DOC(returns the number of items in the clipboard) */{ Command_Data *cmd = (Command_Data*)app->cmd_context; @@ -407,7 +357,8 @@ DOC(returns the number of items in the clipboard) return(count); } -CLIPBOARD_INDEX_SIG(external_clipboard_index)/* +API_EXPORT int +Clipboard_Index(Application_Links *app, int index, char *out, int len)/* DOC_PARAM(index, the index of the item to be read) DOC_PARAM(out, a buffer where the clipboard contents are written or NULL) DOC_PARAM(len, the length of the out buffer) @@ -460,7 +411,8 @@ internal_get_buffer_next(Working_Set *working_set, Buffer_Summary *buffer){ } } -GET_BUFFER_FIRST_SIG(external_get_buffer_first)/* +API_EXPORT Buffer_Summary +Get_Buffer_First(Application_Links *app, unsigned int access)/* DOC_PARAM(access, the access flags for the access) DOC_RETURN(returns the summary of the first buffer in a buffer loop) DOC @@ -485,7 +437,8 @@ DOC_SEE(get_buffer_next) return(result); } -GET_BUFFER_NEXT_SIG(external_get_buffer_next)/* +API_EXPORT void +Get_Buffer_Next(Application_Links *app, Buffer_Summary *buffer, unsigned int access)/* DOC_PARAM(buffer, pointer to the loop buffer originally returned by get_buffer_first) DOC_PARAM(access, the access flags for the access) DOC @@ -509,7 +462,8 @@ DOC_SEE(get_buffer_first) } } -GET_BUFFER_SIG(external_get_buffer)/* +API_EXPORT Buffer_Summary +Get_Buffer(Application_Links *app, int buffer_id, unsigned int access)/* DOC_PARAM(buffer_id, the id of the buffer to get) DOC_PARAM(access, the access flags for the access) DOC_RETURN(returns a summary that describes the indicated buffer if it exists and is accessible) @@ -530,7 +484,8 @@ DOC_RETURN(returns a summary that describes the indicated buffer if it exists an return(buffer); } -GET_BUFFER_BY_NAME_SIG(external_get_buffer_by_name)/* +API_EXPORT Buffer_Summary +Get_Buffer_By_Name(Application_Links *app, char *name, int len, unsigned int access)/* DOC_PARAM(name, the name of the buffer) DOC_PARAM(len, the length of the name string) DOC_PARAM(access, the access flags for the access) @@ -552,7 +507,8 @@ DOC_RETURN(returns a summary that describes the indicated buffer if it exists an return(buffer); } -BUFFER_SEEK_SIG(external_buffer_seek)/* +API_EXPORT int +Buffer_Boundary_Seek(Application_Links *app, Buffer_Summary *buffer, int start_pos, int seek_forward, unsigned int flags)/* DOC_PARAM(buffer, the buffer to seek through) DOC_PARAM(start_pos, the absolute position in the buffer to begin the seek) DOC_PARAM(seek_forward, non-zero indicates to seek forward otherwise the seek goes backward) @@ -651,7 +607,8 @@ DOC_SEE(Seek_Boundary_Flag) return(result); } -BUFFER_READ_RANGE_SIG(external_buffer_read_range)/* +API_EXPORT int +Buffer_Read_Range(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *out)/* DOC_PARAM(buffer, the buffer to read out of) DOC_PARAM(start, the beginning of the read range) DOC_PARAM(end, one past the end of the read range) @@ -683,7 +640,8 @@ is not within the bounds of the buffer. return(result); } -BUFFER_REPLACE_RANGE_SIG(external_buffer_replace_range)/* +API_EXPORT int +Buffer_Replace_Range(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *str, int len)/* DOC_PARAM(buffer, the buffer to edit) DOC_PARAM(start, the start of the range to edit) DOC_PARAM(end, the end of the range to edit) @@ -728,7 +686,8 @@ range is not within the bounds of the buffer. return(result); } -BUFFER_SET_SETTING_SIG(external_buffer_set_setting)/* +API_EXPORT int +Buffer_Set_Setting(Application_Links *app, Buffer_Summary *buffer, int setting, int value)/* DOC_PARAM(buffer, the buffer to set a setting on) DOC_PARAM(setting, one of the Buffer_Setting_ID enum values that identifies the setting to set) DOC_PARAM(value, the value to set the specified setting to) @@ -799,7 +758,8 @@ DOC_SEE(Buffer_Setting_ID) return(result); } -BUFFER_AUTO_INDENT_SIG(external_buffer_auto_indent)/* +API_EXPORT int +Buffer_Auto_Indent(Application_Links *app, Buffer_Summary *buffer, int start, int end, int tab_width, unsigned int flags)/* DOC_PARAM(buffer, the buffer in which to apply the auto indenting) DOC_PARAM(start, the position to start the auto indenting) DOC_PARAM(end, the position to end the auto indenting) @@ -839,7 +799,8 @@ DOC_SEE(Auto_Tab_Flag) return(result); } -CREATE_BUFFER_SIG(external_create_buffer)/* +API_EXPORT Buffer_Summary +Create_Buffer(Application_Links *app, char *filename, int filename_len, unsigned int flags)/* DOC_PARAM(filename, the name of the file to be opened or created) DOC_PARAM(filename_len, the length of the filename string) DOC_PARAM(flags, flags for buffer creation behavior) @@ -930,7 +891,8 @@ DOC_SEE(Buffer_Create_Flag) return(result); } -SAVE_BUFFER_SIG(external_save_buffer)/* +API_EXPORT int +Save_Buffer(Application_Links *app, Buffer_Summary *buffer, char *filename, int filename_len, unsigned int flags)/* DOC_PARAM(buffer, the buffer to save to a file) DOC_PARAM(filename, the name of the file to save the buffer into) DOC_PARAM(filename_len, length of the filename string) @@ -952,7 +914,8 @@ DOC_RETURN(returns non-zero if the save succeeds) return(result); } -KILL_BUFFER_SIG(external_kill_buffer)/* +API_EXPORT int +Kill_Buffer(Application_Links *app, Buffer_Identifier buffer, int view_id, unsigned int flags)/* DOC_PARAM(buffer, a buffer identifier specifying the buffer to try to kill) DOC_PARAM(view_id, the id of view that will contain the "are you sure" dialogue) DOC_PARAM(flags, flags for buffer kill behavior) @@ -1027,7 +990,8 @@ internal_get_view_next(Command_Data *cmd, View_Summary *view){ } } -GET_VIEW_FIRST_SIG(external_get_view_first)/* +API_EXPORT View_Summary +Get_View_First(Application_Links *app, unsigned int access)/* DOC_PARAM(access, the access flags for the access) DOC_RETURN(returns the summary of the first view in a view loop) DOC @@ -1051,7 +1015,8 @@ DOC_SEE(get_view_next) return(view); } -GET_VIEW_NEXT_SIG(external_get_view_next)/* +API_EXPORT void +Get_View_Next(Application_Links *app, View_Summary *view, unsigned int access)/* DOC_PARAM(view, pointer to the loop view originally returned by get_view_first) DOC_PARAM(access, the access flags for the access) DOC @@ -1074,7 +1039,8 @@ DOC_SEE(get_view_first) } } -GET_VIEW_SIG(external_get_view)/* +API_EXPORT View_Summary +Get_View(Application_Links *app, int view_id, unsigned int access)/* DOC_PARAM(view_id, the id of the view to get) DOC_PARAM(access, the access flags for the access) DOC_RETURN(returns a summary that describes the indicated view if it is open and is accessible) @@ -1097,7 +1063,8 @@ DOC_RETURN(returns a summary that describes the indicated view if it is open and return(view); } -GET_ACTIVE_VIEW_SIG(external_get_active_view)/* +API_EXPORT View_Summary +Get_Active_View(Application_Links *app, unsigned int access)/* DOC_PARAM(access, the access flags for the access) DOC_RETURN(returns a summary that describes the active view) */{ @@ -1110,7 +1077,8 @@ DOC_RETURN(returns a summary that describes the active view) return(view); } -VIEW_COMPUTE_CURSOR_SIG(external_view_compute_cursor)/* +API_EXPORT int +View_Compute_Cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, Full_Cursor *cursor_out)/* DOC_PARAM(view, the view on which to run the cursor computation) DOC_PARAM(seek, the seek position) DOC_PARAM(cursor_out, on success this is filled with result of the seek) @@ -1141,7 +1109,8 @@ DOC_SEE(Buffer_Seek) return(result); } -VIEW_SET_CURSOR_SIG(external_view_set_cursor)/* +API_EXPORT int +View_Set_Cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, int set_preferred_x)/* DOC_PARAM(view, the view in which to set the cursor) DOC_PARAM(seek, the seek position) DOC_PARAM(set_preferred_x, if true the preferred x is updated to match the new cursor position) @@ -1177,7 +1146,8 @@ DOC_SEE(Buffer_Seek) return(result); } -VIEW_SET_MARK_SIG(external_view_set_mark)/* +API_EXPORT int +View_Set_Mark(Application_Links *app, View_Summary *view, Buffer_Seek seek)/* DOC_PARAM(view, the view in which to set the mark) DOC_PARAM(seek, the seek position) DOC_RETURN(returns non-zero on success) @@ -1207,7 +1177,8 @@ DOC_SEE(Buffer_Seek) return(result); } -VIEW_SET_HIGHLIGHT_SIG(external_view_set_highlight)/* +API_EXPORT int +View_Set_Highlight(Application_Links *app, View_Summary *view, int start, int end, int turn_on)/* DOC_PARAM(view, the view to set the highlight in) DOC_PARAM(start, the start of the highlight range) DOC_PARAM(end, the end of the highlight range) @@ -1239,7 +1210,8 @@ the turn_on set to false, will switch back to showing the cursor. return(result); } -VIEW_SET_BUFFER_SIG(external_view_set_buffer)/* +API_EXPORT int +View_Set_Buffer(Application_Links *app, View_Summary *view, int buffer_id, unsigned int flags)/* DOC_PARAM(view, the view to display the buffer in) DOC_PARAM(buffer_id, the buffer to show in the view) DOC_PARAM(flags, set buffer behavior flags) @@ -1276,7 +1248,8 @@ DOC_SEE(Set_Buffer_Flag) return(result); } -VIEW_POST_FADE_SIG(external_view_post_fade)/* +API_EXPORT int +View_Post_Fade(Application_Links *app, View_Summary *view, float seconds, int start, int end, unsigned int color)/* DOC_PARAM(view, the veiw to post a fade effect to) DOC_PARAM(seconds, the number of seconds the fade effect should last) DOC_PARAM(start, the first character in the fade range) @@ -1299,7 +1272,8 @@ DOC_PARAM(color, the color to fade from) return(result); } -VIEW_SET_PASTE_REWRITE__SIG(external_view_set_paste_rewrite_){ +API_EXPORT void +View_Set_Paste_Rewrite_(Application_Links *app, View_Summary *view){ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); if (vptr){ @@ -1307,7 +1281,8 @@ VIEW_SET_PASTE_REWRITE__SIG(external_view_set_paste_rewrite_){ } } -VIEW_GET_PASTE_REWRITE__SIG(external_view_get_paste_rewrite_){ +API_EXPORT int +View_Get_Paste_Rewrite_(Application_Links *app, View_Summary *view){ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); int result = false; @@ -1317,7 +1292,8 @@ VIEW_GET_PASTE_REWRITE__SIG(external_view_get_paste_rewrite_){ return(result); } -GET_USER_INPUT_SIG(external_get_user_input)/* +API_EXPORT User_Input +Get_User_Input(Application_Links *app, unsigned int get_type, unsigned int abort_type)/* DOC_PARAM(get_type, input type flag that specifies the types of inputs that should be returned) DOC_PARAM(abort_type, input type flag that specifies the types of inputs that should cause an abort signal) DOC_RETURN(returns a User_Input that describes an event passed to the command) @@ -1348,7 +1324,8 @@ DOC_SEE(User_Input) return(result); } -GET_COMMAND_INPUT_SIG(external_get_command_input)/* +API_EXPORT User_Input +Get_Command_Input (Application_Links *app)/* DOC_RETURN(returns the input that triggered the command in execution.) DOC_SEE(User_Input) */{ @@ -1363,7 +1340,8 @@ DOC_SEE(User_Input) return(result); } -GET_MOUSE_STATE_SIG(external_get_mouse_state)/* +API_EXPORT Mouse_State +Get_Mouse_State(Application_Links *app)/* DOC_RETURN(returns the current mouse state) DOC_SEE(Mouse_State) */{ @@ -1374,7 +1352,9 @@ DOC_SEE(Mouse_State) } #if 0 -GET_EVENT_MESSAGE_SIG(external_get_event_message){ +//API_EXPORT +Event_Message +Get_Event_Message (Application_Links *app){ Event_Message message = {0}; System_Functions *system = (System_Functions*)app->system_links; Coroutine *coroutine = (Coroutine*)app->current_coroutine; @@ -1389,7 +1369,8 @@ GET_EVENT_MESSAGE_SIG(external_get_event_message){ } #endif -START_QUERY_BAR_SIG(external_start_query_bar)/* +API_EXPORT int +Start_Query_Bar(Application_Links *app, Query_Bar *bar, unsigned int flags)/* DOC_PARAM(bar, a pointer to the Query_Bar struct that defines the bar's contents) DOC_PARAM(flags, not currently used) DOC_RETURN(returns non-zero on success) @@ -1411,7 +1392,8 @@ until the command returns. return(slot != 0); } -END_QUERY_BAR_SIG(external_end_query_bar)/* +API_EXPORT void +End_Query_Bar(Application_Links *app, Query_Bar *bar, unsigned int flags)/* DOC_PARAM(bar, a pointer to the Query_Bar struct to end) DOC_PARAM(flags, not currently used) DOC @@ -1425,7 +1407,8 @@ bar must be a pointer previously passed to start_query_bar previously in the sam free_query_slot(&vptr->query_set, bar); } -PRINT_MESSAGE_SIG(external_print_message)/* +API_EXPORT void +Print_Message(Application_Links *app, char *str, int len)/* DOC_PARAM(str, the string to post to *messages*) DOC_PARAM(len, the length of str string) */{ @@ -1434,7 +1417,8 @@ DOC_PARAM(len, the length of str string) do_feedback_message(cmd->system, models, make_string(str, len)); } -CHANGE_THEME_SIG(external_change_theme)/* +API_EXPORT void +Change_Theme(Application_Links *app, char *name, int len)/* DOC_PARAM(name, the name of the built in theme to change to) DOC_PARAM(len, the length of the name string) */{ @@ -1454,7 +1438,8 @@ DOC_PARAM(len, the length of the name string) } } -CHANGE_FONT_SIG(external_change_font)/* +API_EXPORT void +Change_Font(Application_Links *app, char *name, int len)/* DOC_PARAM(name, the name of the built in font to change to) DOC_PARAM(len, the length of the name string) */{ @@ -1470,7 +1455,8 @@ DOC_PARAM(len, the length of the name string) } } -SET_THEME_COLORS_SIG(external_set_theme_colors)/* +API_EXPORT void +Set_Theme_Colors(Application_Links *app, Theme_Color *colors, int count)/* DOC_PARAM(colors, an array of color structs pairing differet style tags to color codes) DOC_PARAM(count, the number of color structs in the colors array) DOC @@ -1492,7 +1478,8 @@ code paired with the tag. } } -GET_THEME_COLORS_SIG(external_get_theme_colors)/* +API_EXPORT void +Get_Theme_Colors(Application_Links *app, Theme_Color *colors, int count)/* DOC_PARAM(colors, an array of color structs listing style tags to get color values for) DOC_PARAM(count, the number of color structs in the colors array) DOC @@ -1519,5 +1506,62 @@ color from the specified color in the pallet. } } +API_EXPORT int +Directory_Get_Hot(Application_Links *app, char *out, int capacity)/* +DOC_PARAM(out, a buffer that receives the 4coder 'hot directory') +DOC_PARAM(capacity, the maximum size to be output to the output buffer) +DOC_RETURN(returns the size of the string written into the buffer) +DOC +( +4coder has a concept of a 'hot directory' which is the directory most recently +accessed in the GUI. Whenever the GUI is opened it shows the hot directory. + +In the future this will be deprecated and eliminated in favor of more flexible +directories controlled by the custom side. +) +*/{ + Command_Data *cmd = (Command_Data*)app->cmd_context; + Hot_Directory *hot = &cmd->models->hot_directory; + i32 copy_max = capacity - 1; + hot_directory_clean_end(hot); + if (copy_max > hot->string.size) + copy_max = hot->string.size; + memcpy(out, hot->string.str, copy_max); + out[copy_max] = 0; + return(hot->string.size); +} + +#define Get_4ed_Path system->get_4ed_path +#define File_Exists system->file_exists +#define Directory_CD system->directory_cd + +API_EXPORT File_List +Get_File_List(Application_Links *app, char *dir, int len)/* +DOC_PARAM(dir, the directory whose files will be enumerated in the returned list) +DOC_PARAM(len, the length of the dir string) +DOC_RETURN +( +returns a File_List struct containing pointers to the names of the files in +the specified directory. The File_List returned should be passed to free_file_list +when it is no longer in use. +) +*/{ + Command_Data *cmd = (Command_Data*)app->cmd_context; + System_Functions *system = cmd->system; + File_List result = {}; + system->set_file_list(&result, make_string(dir, len)); + return(result); +} + +API_EXPORT void +Free_File_List(Application_Links *app, File_List list)/* +DOC_PARAM(list, the file list to be freed) +DOC(after this call the file list passed in should not be read or written to) +*/{ + Command_Data *cmd = (Command_Data*)app->cmd_context; + System_Functions *system = cmd->system; + system->set_file_list(&list, make_string(0, 0)); +} + // BOTTOM diff --git a/4ed_metagen.cpp b/4ed_metagen.cpp index f5560d7c..c1265bb7 100644 --- a/4ed_metagen.cpp +++ b/4ed_metagen.cpp @@ -431,7 +431,7 @@ is_comment(String str){ return(result); } -struct Doc_Parse{ +struct Parse{ Cpp_Token_Stack tokens; }; @@ -471,7 +471,7 @@ doc_parse_identifier(String lexeme, int *pos){ } void -perform_doc_parse(Doc_Parse *parse, String lexeme){ +perform_doc_parse(Parse *parse, String lexeme){ int keep_parsing = true; int pos = 0; @@ -499,6 +499,9 @@ generate_custom_headers(){ char *filename = API_H " & " API_DOC; + Function_Set function_set = {0}; + +#if 0 // NOTE(allen): Header String data = file_dump("custom_api_spec.cpp"); @@ -510,16 +513,6 @@ generate_custom_headers(){ ++line_count; } - Function_Set function_set = {0}; - - function_set.name = (String*)malloc((sizeof(String)*6 + sizeof(int))*line_count); - function_set.ret = function_set.name + line_count; - function_set.args = function_set.ret + line_count; - function_set.macros = function_set.args + line_count; - function_set.public_name = function_set.macros + line_count; - function_set.doc_string = function_set.public_name + line_count; - function_set.valid = (int*)(function_set.public_name + line_count); - int max_name_size = 0; int sig_count = 0; line_count = 0; @@ -584,8 +577,189 @@ generate_custom_headers(){ } } } +#endif - FILE *file = fopen(API_H, "wb"); + // NOTE(allen): Documentation + String code_data[2]; + code_data[0] = file_dump("4ed_api_implementation.cpp"); + code_data[1] = file_dump("win32_api_impl.cpp"); + Parse parses[2]; + + int max_name_size = 0; + int line_count = 0; + + for (int J = 0; J < 2; ++J){ + String *code = &code_data[J]; + Parse *parse = &parses[J]; + + // TODO(allen): KILL THIS FUCKIN' Cpp_File FUCKIN' NONSENSE HORSE SHIT!!!!! + Cpp_File file; + file.data = code->str; + file.size = code->size; + + parse->tokens = cpp_make_token_stack(512); + cpp_lex_file(file, &parse->tokens); + + int count = parse->tokens.count; + Cpp_Token *tokens = parse->tokens.tokens; + + Cpp_Token *token = tokens; + + for (int i = 0; i < count; ++i, ++token){ + if (token->type == CPP_TOKEN_IDENTIFIER && + !(token->flags & CPP_TFLAG_PP_BODY)){ + String lexeme = make_string(file.data + token->start, token->size); + if (match(lexeme, "API_EXPORT")){ + for (; i < count; ++i, ++token){ + if (token->type == CPP_TOKEN_PARENTHESE_OPEN){ + break; + } + } + + if (i < count){ + --i; + --token; + + if (token->type == CPP_TOKEN_IDENTIFIER){ + ++line_count; + + if (max_name_size < token->size){ + max_name_size = token->size; + } + } + } + } + } + } + } + + int total_memory = (sizeof(String)*6 + sizeof(int))*line_count; + + function_set.name = (String*)malloc(total_memory); + function_set.ret = function_set.name + line_count; + function_set.args = function_set.ret + line_count; + function_set.macros = function_set.args + line_count; + function_set.public_name = function_set.macros + line_count; + function_set.doc_string = function_set.public_name + line_count; + function_set.valid = (int*)(function_set.doc_string + line_count); + + memset(function_set.name, 0, total_memory); + + int sig_count = 0; + for (int J = 0; J < 2; ++J){ + String *code = &code_data[J]; + Parse *parse = &parses[J]; + + // TODO(allen): KILL THIS FUCKIN' Cpp_File FUCKIN' NONSENSE HORSE SHIT!!!!! + Cpp_File file; + file.data = code->str; + file.size = code->size; + + int count = parse->tokens.count; + Cpp_Token *tokens = parse->tokens.tokens; + + Cpp_Token *token = 0; + + // NOTE(allen): Header Parse + token = tokens; + for (int i = 0; i < count; ++i, ++token){ + if (token->type == CPP_TOKEN_IDENTIFIER && + !(token->flags & CPP_TFLAG_PP_BODY)){ + String lexeme = make_string(file.data + token->start, token->size); + if (match(lexeme, "API_EXPORT")){ + ++i; + ++token; + if (i < count){ + Cpp_Token *ret_start_token = token; + + for (; i < count; ++i, ++token){ + if (token->type == CPP_TOKEN_PARENTHESE_OPEN){ + break; + } + } + + Cpp_Token *args_start_token = token; + + if (i < count){ + --i; + --token; + + function_set.name[sig_count] = make_string(file.data + token->start, token->size); + + int size = token->start - ret_start_token->start; + String ret = make_string(file.data + ret_start_token->start, size); + ret = chop_whitespace(ret); + function_set.ret[sig_count] = ret; + + for (; i < count; ++i, ++token){ + if (token->type == CPP_TOKEN_PARENTHESE_CLOSE){ + break; + } + } + + if (i < count){ + int size = token->start + token->size - args_start_token->start;; + function_set.args[sig_count] = + make_string(file.data + args_start_token->start, size); + function_set.valid[sig_count] = true; + } + } + } + + if (!function_set.valid[sig_count]){ + function_set.ret[sig_count] = string_zero(); + function_set.name[sig_count] = string_zero(); + function_set.args[sig_count] = string_zero(); + // TODO(allen): get warning line numbers + printf("custom_api_spec.cpp(???) : generator warning : invalid function signature\n"); + } + ++sig_count; + } + } + } + + // NOTE(allen): Documentation Parse + token = tokens; + for (int i = 0; i < count; ++i, ++token){ + if (token->type == CPP_TOKEN_IDENTIFIER && + !(token->flags & CPP_TFLAG_PP_BODY)){ + String lexeme = make_string(file.data + token->start, token->size); + if (match(lexeme, "API_EXPORT")){ + + for (; i < count; ++i, ++token){ + if (token->type == CPP_TOKEN_PARENTHESE_OPEN){ + break; + } + } + + if (i < count){ + --i; + --token; + + if (token->type == CPP_TOKEN_IDENTIFIER){ + lexeme = make_string(file.data + token->start, token->size); + int match = 0; + if (string_set_match(function_set.name, sig_count, lexeme, &match)){ + for (; i < count; ++i, ++token){ + if (token->type == CPP_TOKEN_COMMENT){ + lexeme = make_string(file.data + token->start, token->size); + if (check_and_fix_docs(&lexeme)){ + function_set.doc_string[match] = lexeme; + perform_doc_parse(parse, lexeme); + break; + } + } + else if (token->type == CPP_TOKEN_BRACE_OPEN){ + break; + } + } + } + } + } + } + } + } + } for (int i = 0; i < sig_count; ++i){ String name_string = function_set.name[i]; @@ -609,6 +783,9 @@ generate_custom_headers(){ to_lower(public_name); } + // NOTE(allen): Header + FILE *file = fopen(API_H, "wb"); + for (int i = 0; i < sig_count; ++i){ String ret_string = function_set.ret[i]; String args_string = function_set.args[i]; @@ -655,13 +832,14 @@ generate_custom_headers(){ fprintf(file, "#define FillAppLinksAPI(app_links) do{"); for (int i = 0; i < sig_count; ++i){ + String name = function_set.name[i]; String public_string = function_set.public_name[i]; fprintf(file, "\\\n" - "app_links->%.*s = external_%.*s;", + "app_links->%.*s = %.*s;", public_string.size, public_string.str, - public_string.size, public_string.str + name.size, name.str ); } fprintf(file, " } while(false)\n"); @@ -669,51 +847,6 @@ generate_custom_headers(){ fclose(file); // NOTE(allen): Documentation - String code_data[2]; - Doc_Parse parses[2]; - - code_data[0] = file_dump("4ed_api_implementation.cpp"); - code_data[1] = file_dump("win32_4ed.cpp"); - - for (int J = 0; J < 2; ++J){ - String *code = &code_data[J]; - Doc_Parse *parse = &parses[J]; - - // TODO(allen): KILL THIS FUCKIN' Cpp_File FUCKIN NONSENSE HORSE SHIT!!!!! - Cpp_File file; - file.data = code->str; - file.size = code->size; - - parse->tokens = cpp_make_token_stack(512); - cpp_lex_file(file, &parse->tokens); - - int count = parse->tokens.count; - Cpp_Token *tokens = parse->tokens.tokens; - - Cpp_Token *token = tokens; - for (int i = 0; i < count; ++i, ++token){ - if (token->type == CPP_TOKEN_IDENTIFIER){ - String lexeme = make_string(file.data + token->start, token->size); - int match = 0; - if (string_set_match(function_set.macros, sig_count, lexeme, &match)){ - for (; i < count; ++i, ++token){ - if (token->type == CPP_TOKEN_COMMENT){ - lexeme = make_string(file.data + token->start, token->size); - if (check_and_fix_docs(&lexeme)){ - function_set.doc_string[match] = lexeme; - perform_doc_parse(parse, lexeme); - break; - } - } - else if (token->type == CPP_TOKEN_BRACE_OPEN){ - break; - } - } - } - } - } - } - file = fopen(API_DOC, "wb"); #define CODE_STYLE "font-family: \"Courier New\", Courier, monospace; text-align: left;" @@ -809,9 +942,10 @@ generate_custom_headers(){ String name = function_set.public_name[i]; fprintf(file, "
  • \n" - "%.*s\n" + "%.*s\n" "
  • \n", - i, name.size, name.str + name.size, name.str, + name.size, name.str ); } fprintf(file, "\n"); @@ -832,10 +966,10 @@ generate_custom_headers(){ } fprintf(file, - "
    \n" + "
    \n" "

    §"SECTION".%d: %.*s

    \n" "
    ", - i, i, + name.size, name.str, i, name.size, name.str ); @@ -859,7 +993,7 @@ generate_custom_headers(){ ); fclose(file); - + return(filename); } diff --git a/build_all.bat b/build_all.bat index 97583cbc..02e95c8d 100644 --- a/build_all.bat +++ b/build_all.bat @@ -24,16 +24,16 @@ popd pushd ..\build REM call "..\code\buildsuper.bat" ..\code\4coder_default_bindings.cpp -REM call "..\code\buildsuper.bat" ..\code\power\4coder_experiments.cpp +call "..\code\buildsuper.bat" ..\code\power\4coder_experiments.cpp REM call "..\code\buildsuper.bat" ..\code\power\4coder_casey.cpp REM call "..\code\buildsuper.bat" ..\4vim\4coder_chronal.cpp if %ERRORLEVEL% neq 0 (set FirstError=1) set EXPORTS=/EXPORT:app_get_functions -REM cl %OPTS% %INCLUDES% %DEFINES% ..\code\4ed_app_target.cpp %* /Fe4ed_app /LD /link /INCREMENTAL:NO /OPT:REF %EXPORTS% +cl %OPTS% %INCLUDES% %DEFINES% ..\code\4ed_app_target.cpp %* /Fe4ed_app /LD /link /INCREMENTAL:NO /OPT:REF %EXPORTS% if %ERRORLEVEL% neq 0 (set FirstError=1) -REM cl %OPTS% %INCLUDES% %DEFINES% ..\code\win32_4ed.cpp %LIBS% %ICON% %* /Fe4ed /link /NODEFAULTLIB:library +cl %OPTS% %INCLUDES% %DEFINES% ..\code\win32_4ed.cpp %LIBS% %ICON% %* /Fe4ed /link /NODEFAULTLIB:library if %ERRORLEVEL% neq 0 (set FirstError=1) call "print_size.bat" 4ed_app.dll diff --git a/custom_api_spec.cpp b/custom_api_spec.cpp deleted file mode 100644 index 3ec5f60a..00000000 --- a/custom_api_spec.cpp +++ /dev/null @@ -1,76 +0,0 @@ - -// Command exectuion -void Exec_Command(Application_Links *app, int command_id); -int Exec_System_Command(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int path_len, char *command, int command_len, unsigned int flags); - -// File system navigation -int Directory_Get_Hot(Application_Links *app, char *out, int capacity); -int Get_4ed_Path(Application_Links *app, char *out, int capacity); -int File_Exists(Application_Links *app, char *filename, int len); -int Directory_CD(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len); -File_List Get_File_List(Application_Links *app, char *dir, int len); -void Free_File_List(Application_Links *app, File_List list); - -// Clipboard - -// TODO(allen): extend this API out a little bit to allow for future expansion. -void Clipboard_Post(Application_Links *app, char *str, int len); -int Clipboard_Count(Application_Links *app); -int Clipboard_Index(Application_Links *app, int index, char *out, int len); - -// Direct buffer manipulation -Buffer_Summary Get_Buffer_First(Application_Links *app, unsigned int access); -void Get_Buffer_Next(Application_Links *app, Buffer_Summary *buffer, unsigned int access); - -Buffer_Summary Get_Buffer(Application_Links *app, int buffer_id, unsigned int access); -Buffer_Summary Get_Buffer_By_Name(Application_Links *app, char *name, int len, unsigned int access); - -int Buffer_Seek(Application_Links *app, Buffer_Summary *buffer, int start_pos, int seek_forward, unsigned int flags); -int Buffer_Read_Range(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *out); - -int Buffer_Replace_Range(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *str, int len); -int Buffer_Set_Setting(Application_Links *app, Buffer_Summary *buffer, int setting, int value); -int Buffer_Auto_Indent(Application_Links *app, Buffer_Summary *buffer, int start, int end, int tab_width, unsigned int flags); - -Buffer_Summary Create_Buffer(Application_Links *app, char *filename, int filename_len, unsigned int flags); -int Save_Buffer(Application_Links *app, Buffer_Summary *buffer, char *filename, int filename_len, unsigned int flags); -int Kill_Buffer(Application_Links *app, Buffer_Identifier buffer, int view_id, unsigned int flags); - -// View manipulation -View_Summary Get_View_First(Application_Links *app, unsigned int access); -void Get_View_Next(Application_Links *app, View_Summary *view, unsigned int access); - -View_Summary Get_View(Application_Links *app, int view_id, unsigned int access); -View_Summary Get_Active_View(Application_Links *app, unsigned int access); - -int View_Compute_Cursor (Application_Links *app, View_Summary *view, Buffer_Seek seek, Full_Cursor *cursor_out); -int View_Set_Cursor (Application_Links *app, View_Summary *view, Buffer_Seek seek, int set_preferred_x); -int View_Set_Mark (Application_Links *app, View_Summary *view, Buffer_Seek seek); -int View_Set_Highlight (Application_Links *app, View_Summary *view, int start, int end, int turn_on); -int View_Set_Buffer (Application_Links *app, View_Summary *view, int buffer_id, unsigned int flags); -int View_Post_Fade (Application_Links *app, View_Summary *view, float seconds, int start, int end, unsigned int color); - -// TODO(allen): -// Get rid of this temporary hack ass soon ass possible. -void View_Set_Paste_Rewrite_(Application_Links *app, View_Summary *view); -int View_Get_Paste_Rewrite_(Application_Links *app, View_Summary *view); - -// Directly get user input -User_Input Get_User_Input (Application_Links *app, unsigned int get_type, unsigned int abort_type); -User_Input Get_Command_Input (Application_Links *app); -Mouse_State Get_Mouse_State (Application_Links *app); -//Event_Message Get_Event_Message (Application_Links *app); - -// Queries and information display -int Start_Query_Bar (Application_Links *app, Query_Bar *bar, unsigned int flags); -void End_Query_Bar (Application_Links *app, Query_Bar *bar, unsigned int flags); -void Print_Message (Application_Links *app, char *str, int len); -//GUI_Functions* Get_GUI_Functions(Application_Links *app); -//GUI* Get_GUI(Application_Links *app, int view_id); - -// Color settings -void Change_Theme (Application_Links *app, char *name, int len); -void Change_Font (Application_Links *app, char *name, int len); -void Set_Theme_Colors (Application_Links *app, Theme_Color *colors, int count); -void Get_Theme_Colors (Application_Links *app, Theme_Color *colors, int count); - diff --git a/win32_4ed.cpp b/win32_4ed.cpp index 67b933ce..c8cc2811 100644 --- a/win32_4ed.cpp +++ b/win32_4ed.cpp @@ -867,100 +867,12 @@ Sys_File_Unique_Hash_Sig(system_file_unique_hash){ return(hash); } -// NOTE(allen): Exposed to the custom layer. -internal -FILE_EXISTS_SIG(system_file_exists)/* -DOC_PARAM(filename, the full path to a file) -DOC_PARAM(len, the number of characters in the filename string) -DOC_RETURN(returns non-zero if the file exists, returns zero if the file does not exist) -*/{ - char full_filename_space[1024]; - String full_filename; - HANDLE file; - b32 result; - - result = 0; - - if (len < sizeof(full_filename_space)){ - full_filename = make_fixed_width_string(full_filename_space); - copy(&full_filename, make_string(filename, len)); - terminate_with_null(&full_filename); - - file = CreateFile(full_filename.str, GENERIC_READ, 0, 0, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - - if (file != INVALID_HANDLE_VALUE){ - CloseHandle(file); - result = 1; - } - } - - return(result); -} - b32 Win32DirectoryExists(char *path){ DWORD attrib = GetFileAttributesA(path); return (attrib != INVALID_FILE_ATTRIBUTES && (attrib & FILE_ATTRIBUTE_DIRECTORY)); } -// NOTE(allen): Exposed to the custom layer. -internal -DIRECTORY_CD_SIG(system_directory_cd)/* -DOC_PARAM(dir, a string buffer containing a directory) -DOC_PARAM(len, the length of the string in the string buffer) -DOC_PARAM(capacity, the maximum size of the string buffer) -DOC_PARAM(rel_path, the path to change to, may include '.' or '..') -DOC_PARAM(rel_len, the length of the rel_path string) -DOC_RETURN(returns non-zero if the call succeeds, returns zero otherwise) -DOC -( -This call succeeds if the directory exists and the new directory fits inside the dir buffer. -If the call succeeds the dir buffer is filled with the new directory and len contains the -length of the string in the buffer. - -For instance if dir contains "C:/Users/MySelf" and rel is "Documents" the buffer will contain -"C:/Users/MySelf/Documents" and len will contain the length of that string. This call can -also be used with rel as ".." to traverse to parent folders. -) -*/{ - String directory = make_string(dir, *len, capacity); - b32 result = 0; - i32 old_size; - - char rel_path_space[1024]; - String rel_path_string = make_fixed_width_string(rel_path_space); - copy(&rel_path_string, make_string(rel_path, rel_len)); - terminate_with_null(&rel_path_string); - - if (rel_path[0] != 0){ - if (rel_path[0] == '.' && rel_path[1] == 0){ - result = 1; - } - else if (rel_path[0] == '.' && rel_path[1] == '.' && rel_path[2] == 0){ - result = remove_last_folder(&directory); - terminate_with_null(&directory); - } - else{ - if (directory.size + rel_len + 1 > directory.memory_size){ - old_size = directory.size; - append_partial(&directory, rel_path); - append_partial(&directory, "\\"); - if (Win32DirectoryExists(directory.str)){ - result = 1; - } - else{ - directory.size = old_size; - } - } - } - } - - *len = directory.size; - - return(result); -} - internal Sys_Get_Binary_Path_Sig(system_get_binary_path){ i32 result = 0; @@ -974,16 +886,7 @@ Sys_Get_Binary_Path_Sig(system_get_binary_path){ return(result); } -// NOTE(allen): Exposed to the custom layer. -GET_4ED_PATH_SIG(system_get_4ed_path)/* -DOC_PARAM(out, a buffer that receives the path to the 4ed executable file) -DOC_PARAM(capacity, the maximum capacity of the output buffer) -DOC_RETURN(returns non-zero on success, returns zero on failure) -*/{ - String str = make_string(out, 0, capacity); - return(system_get_binary_path(&str)); -} - +#include "win32_api_impl.cpp" // // Clipboard @@ -1323,9 +1226,9 @@ Win32LoadSystemCode(){ win32vars.system.file_load_end = system_file_load_end; win32vars.system.file_save = system_file_save; - win32vars.system.file_exists = system_file_exists; - win32vars.system.directory_cd = system_directory_cd; - win32vars.system.get_4ed_path = system_get_4ed_path; + win32vars.system.file_exists = File_Exists; + win32vars.system.directory_cd = Directory_CD; + win32vars.system.get_4ed_path = Get_4ed_Path; win32vars.system.post_clipboard = system_post_clipboard; diff --git a/win32_api_impl.cpp b/win32_api_impl.cpp new file mode 100644 index 00000000..fae43fae --- /dev/null +++ b/win32_api_impl.cpp @@ -0,0 +1,111 @@ +/* +Implementation of system level functions that get exposed straight +into the 4coder custom API. This file need not be split on other platforms, +as this is the only one that will be used for generating headers and docs. +-Allen + +27.06.2016 (dd.mm.yyyy) +*/ + +// TOP + +#define API_EXPORT + +API_EXPORT int +File_Exists(Application_Links *app, char *filename, int len)/* +DOC_PARAM(filename, the full path to a file) +DOC_PARAM(len, the number of characters in the filename string) +DOC_RETURN(returns non-zero if the file exists, returns zero if the file does not exist) +*/{ + char full_filename_space[1024]; + String full_filename; + HANDLE file; + b32 result; + + result = 0; + + if (len < sizeof(full_filename_space)){ + full_filename = make_fixed_width_string(full_filename_space); + copy(&full_filename, make_string(filename, len)); + terminate_with_null(&full_filename); + + file = CreateFile(full_filename.str, GENERIC_READ, 0, 0, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + + if (file != INVALID_HANDLE_VALUE){ + CloseHandle(file); + result = 1; + } + } + + return(result); +} + +API_EXPORT int +Directory_CD(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len)/* +DOC_PARAM(dir, a string buffer containing a directory) +DOC_PARAM(len, the length of the string in the string buffer) +DOC_PARAM(capacity, the maximum size of the string buffer) +DOC_PARAM(rel_path, the path to change to, may include '.' or '..') +DOC_PARAM(rel_len, the length of the rel_path string) +DOC_RETURN(returns non-zero if the call succeeds, returns zero otherwise) +DOC +( +This call succeeds if the directory exists and the new directory fits inside the dir buffer. +If the call succeeds the dir buffer is filled with the new directory and len contains the +length of the string in the buffer. + +For instance if dir contains "C:/Users/MySelf" and rel is "Documents" the buffer will contain +"C:/Users/MySelf/Documents" and len will contain the length of that string. This call can +also be used with rel set to ".." to traverse to parent folders. +) +*/{ + String directory = make_string(dir, *len, capacity); + b32 result = 0; + i32 old_size; + + char rel_path_space[1024]; + String rel_path_string = make_fixed_width_string(rel_path_space); + copy(&rel_path_string, make_string(rel_path, rel_len)); + terminate_with_null(&rel_path_string); + + if (rel_path[0] != 0){ + if (rel_path[0] == '.' && rel_path[1] == 0){ + result = 1; + } + else if (rel_path[0] == '.' && rel_path[1] == '.' && rel_path[2] == 0){ + result = remove_last_folder(&directory); + terminate_with_null(&directory); + } + else{ + if (directory.size + rel_len + 1 > directory.memory_size){ + old_size = directory.size; + append_partial(&directory, rel_path); + append_partial(&directory, "\\"); + if (Win32DirectoryExists(directory.str)){ + result = 1; + } + else{ + directory.size = old_size; + } + } + } + } + + *len = directory.size; + + return(result); +} + +API_EXPORT int +Get_4ed_Path(Application_Links *app, char *out, int capacity)/* +DOC_PARAM(out, a buffer that receives the path to the 4ed executable file) +DOC_PARAM(capacity, the maximum capacity of the output buffer) +DOC_RETURN(returns non-zero on success, returns zero on failure) +*/{ + String str = make_string(out, 0, capacity); + return(system_get_binary_path(&str)); +} + +// BOTTOM +