From f458ba2113e9f9f717707800e935864725779760 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Mon, 27 Jun 2016 10:25:17 -0400 Subject: [PATCH 1/3] pre-change to single location API names. --- 4coder_API.html | 823 ++++++++++++++++++++++++++++++++----- 4ed_api_implementation.cpp | 15 +- 4ed_metagen.cpp | 169 +++++++- 4ed_rendering.cpp | 2 +- build_all.bat | 7 +- custom_api_spec.cpp | 2 +- package.bat | 3 +- win32_4ed.cpp | 14 +- 8 files changed, 901 insertions(+), 134 deletions(-) diff --git a/4coder_API.html b/4coder_API.html index 75e6f58c..bc7fb52b 100644 --- a/4coder_API.html +++ b/4coder_API.html @@ -1,145 +1,778 @@ 4coder API Docs + - -

4coder API

-§1 Introduction

-
Coming Soon

-§2 Functions

+ +
+

4coder API

+

§1 Introduction

-exec_command +

+This is the documentation for alpha 4.0.8 super! The documentation has been made as accurate as possible but there may be errors. If you have questions or discover errors please contact editor@4coder.net.

+

+

-
-exec_system_command +

§2 Types and Functions

+

§2.1 Function List

+ +

§2.2 Descriptions

+
+

§2.2.0: exec_command

+
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)
-
-directory_get_hot
-
-get_4ed_path +
+

§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)
+
+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) +DOC_PARAM(path_len, the length of the path string) +DOC_PARAM(command, the command to be executed) +DOC_PARAM(command_len, the length of the command string) +DOC_PARAM(flags, may be zero or one or more CLI flags ORed together) +DOC_RETURN(returns non-zero if the command is successfully started, returns zero otherwise) +DOC +( +Executes a system command as if called from the command line, and sends the output to a buffer. The buffer +identifier can either name a new buffer that does not exist, name a buffer that does exist, or provide the +id of a buffer that does exist. If the buffer already exists the command will fail, unless +CLI_OverlapWithConflict is set in the flags. + +If the buffer is not already in an open view, and the view parameter is no NULL, then the provided view +will display the output buffer. If the view parameter is NULL, no view will display the output. + +If CLI_OverlapWithConflict is set in the flags, the command will always be executed even if another command +was outputting to the same buffer still. + +If CLI_AlwaysBindToView is set and the view parameter is not NULL, then the specified view will always +begin displaying the output buffer, even if another open view already displays that buffer. + +If CLI_CursorAtEnd is set the cursor in the output buffer will be placed at the end of the buffer instead +of at the beginning. +)
-
-file_exists
-
-directory_cd +
+

§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. +)
-
-get_file_list
-
-free_file_list +
+

§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)
-
-clipboard_post
-
-clipboard_count +
+

§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)
-
-clipboard_index
-
-get_buffer_first +
+

§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. +)
-
-get_buffer_next
-
-get_buffer +
+

§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. +)
-
-get_buffer_by_name
-
-buffer_seek +
+

§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)
-
-buffer_read_range
-
-buffer_replace_range +
+

§2.2.8: clipboard_post

+
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 +( +Stores the string str in the clipboard initially with index 0. +Also reports the copy to the operating system, so that it may +be pasted into other applications. +)
-
-buffer_set_setting
-
-buffer_auto_indent +
+

§2.2.9: clipboard_count

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

§2.2.10: 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) +DOC_PARAM(out, a buffer where the clipboard contents are written or NULL) +DOC_PARAM(len, the length of the out buffer) +DOC_RETURN(returns the size of the item on the clipboard associated with the given index) +DOC +( +There are multiple items on the 4coder clipboard. The most recent copy is always at +index 0. The second most recent is at index 1, and so on for all the stored clipboard items. +This function reads one of the clipboard items and stores it into the out buffer, if the out +buffer is not NULL. This function always returns the size of the clipboard item specified +even if the output buffer is NULL. If the output buffer is too small to contain the whole +string, it is filled with the first len character of the clipboard contents. The output +string is not null terminated. +)
-
-kill_buffer
-
-get_view_first +
+

§2.2.11: get_buffer_first

+
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 +( +Begins a loop across all the buffers. + +If the buffer returned does not exist, the loop is finished. Buffers +should not be killed durring a buffer loop. +) +DOC_SEE(Access_Flag) +DOC_SEE(get_buffer_next)
-
-get_view_next
-
-get_view +
+

§2.2.12: 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) +DOC_PARAM(access, the access flags for the access) +DOC +( +Writes the next buffer into the buffer struct. To get predictable results every +call to get_buffer_first and get_buffer_next in the loop should have the same +access flags. + +If the buffer returned does not exist, the loop is finished. Buffers +should not be killed durring a buffer loop. +) +DOC_SEE(Access_Flag) +DOC_SEE(get_buffer_first)
-
-get_active_view
-
-view_compute_cursor +
+

§2.2.13: 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) +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)
-
-view_set_cursor
-
-view_set_mark +
+

§2.2.14: 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) +DOC_PARAM(len, the length of the name string) +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)
-
-view_set_highlight
-
-view_set_buffer +
+

§2.2.15: buffer_seek

+
int buffer_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) +DOC_PARAM(flags, one or more types of boundaries to use for stopping the seek) +DOC_RETURN(returns the position where the seek stops) +DOC_SEE(Seek_Boundary_Flag)
-
-view_post_fade
-
-view_set_paste_rewrite_ +
+

§2.2.16: 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) +DOC_PARAM(start, the beginning of the read range) +DOC_PARAM(end, one past the end of the read range) +DOC_PARAM(out, the output buffer to fill with the result of the read) +DOC_RETURN(returns non-zero on success) +DOC +( +The output buffer might have a capacity of at least (end - start) +The output is not null terminated. + +This call fails if the buffer does not exist, or if the read range +is not within the bounds of the buffer. +)
-
-view_get_paste_rewrite_
-
-get_user_input +
+

§2.2.17: 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) +DOC_PARAM(start, the start of the range to edit) +DOC_PARAM(end, the end of the range to edit) +DOC_PARAM(str, the string to write into the range) +DOC_PARAM(len, the length of the str string) +DOC_RETURN(returns non-zero if the replacement succeeds) +DOC +( +If this call succeeds it deletes the range from start to end +and writes str in the same position. If end == start then +this call is equivalent to inserting the string at start. +If len == 0 this call is equivalent to deleteing the range +from start to end. + +This call fails if the buffer does not exist, or if the replace +range is not within the bounds of the buffer. +)
-
-get_command_input
-
-get_mouse_state +
+

§2.2.18: 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) +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) +DOC_SEE(Buffer_Setting_ID)
-
-start_query_bar
-
-end_query_bar +
+

§2.2.19: 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) +DOC_PARAM(start, the position to start the auto indenting) +DOC_PARAM(end, the position to end the auto indenting) +DOC_PARAM(tab_width, the number of spaces to place as a tab) +DOC_PARAM(flags, the auto tab behavior flags) +DOC_RETURN(returns non-zero when the call succeeds) +DOC +( +Applies the built in auto-indentation rule to the code in the range from +start to end by inserting spaces or tabs at the beginning of the lines. +If the buffer does not have lexing enabled or the lexing job has not +completed this function will fail. +) +DOC_SEE(Auto_Tab_Flag)
-
-print_message
-
-change_theme +
+

§2.2.20: 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) +DOC_PARAM(filename_len, the length of the filename string) +DOC_PARAM(flags, flags for buffer creation behavior) +DOC_RETURN(returns the summary of the created buffer on success or a NULL buffer otherwise) +DOC +( +Tries to create a new buffer and associate it to the given filename. If such a buffer already +exists the existing buffer is returned in the buffer summary and no new buffer is created. +If the buffer does not exist a new buffer is created and named after the given filename. If +the filename corresponds to a file on the disk that file is loaded and put into buffer, if +the filename does not correspond to a file on disk the buffer is created empty. +) +DOC_SEE(Buffer_Create_Flag)
-
-change_font
-
-set_theme_colors +
+

§2.2.21: 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) +DOC_PARAM(filename, the name of the file to save the buffer into) +DOC_PARAM(filename_len, length of the filename string) +DOC_PARAM(flags, not currently used) +DOC_RETURN(returns non-zero if the save succeeds)
-
-get_theme_colors
- +
+

§2.2.22: 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) +DOC_PARAM(view_id, the id of view that will contain the "are you sure" dialogue) +DOC_PARAM(flags, flags for buffer kill behavior) +DOC_RETURN(returns non-zero if the kill succeeds) +DOC +( +Tries to kill the idenfied buffer. If the buffer is dirty and the "are you sure" +dialogue needs to be displayed the provided view is used to show the dialogue. +If the view is not open the kill fails. +) +DOC_SEE(Buffer_Kill_Flags) +
+
+
+

§2.2.23: get_view_first

+
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 +( +Begins a loop across all the open views. + +If the view summary returned is NULL, the loop is finished. +Views should not be closed or opened durring a view loop. +) +DOC_SEE(Access_Flag) +DOC_SEE(get_view_next) +
+
+
+

§2.2.24: 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) +DOC_PARAM(access, the access flags for the access) +DOC +( +Writes the next view into the view struct. To get predictable results every +call to get_view_first and get_view_next in the loop should have the same +access flags. + +If the view summary returned is NULL, the loop is finished. +Views should not be closed or opened durring a view loop. +) +DOC_SEE(Access_Flag) +DOC_SEE(get_view_first) +
+
+
+

§2.2.25: 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) +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

+
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

+
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) +DOC_RETURN(returns non-zero on success) +DOC +( +Computes a full cursor for the given seek position. +) +DOC_SEE(Buffer_Seek) +
+
+
+

§2.2.28: 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) +DOC_PARAM(seek, the seek position) +DOC_PARAM(set_preferred_x, if true the preferred x is updated to match the new cursor position) +DOC_RETURN(returns non-zero on success) +DOC +( +Sets the the view's cursor position. set_preferred_x should usually be true unless the change in +cursor position is is a vertical motion that tries to keep the cursor in the same column or x position. +) +DOC_SEE(Buffer_Seek) +
+
+
+

§2.2.29: 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) +DOC_PARAM(seek, the seek position) +DOC_RETURN(returns non-zero on success) +DOC +( +Sets the the view's mark position. +) +DOC_SEE(Buffer_Seek) +
+
+
+

§2.2.30: 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) +DOC_PARAM(start, the start of the highlight range) +DOC_PARAM(end, the end of the highlight range) +DOC_PARAM(turn_on, indicates whether the highlight is being turned on or off) +DOC_RETURN(returns non-zero on success) +DOC +( +The highlight is mutually exclusive to the cursor. When the turn_on parameter +is set to true the highlight will be shown and the cursor will be hidden. After +that either setting the with view_set_cursor or calling view_set_highlight and +the turn_on set to false, will switch back to showing the cursor. +) +
+
+
+

§2.2.31: 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) +DOC_PARAM(buffer_id, the buffer to show in the view) +DOC_PARAM(flags, set buffer behavior flags) +DOC_RETURN(returns non-zero on success) +DOC +( +On success view_set_buffer sets the specified view's current buffer and +cancels and dialogue shown in the view and displays the file. +) +DOC_SEE(Set_Buffer_Flag) +
+
+
+

§2.2.32: 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) +DOC_PARAM(seconds, the number of seconds the fade effect should last) +DOC_PARAM(start, the first character in the fade range) +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_

+
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_

+
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

+
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) +DOC +( +This call preempts the command. The command is resumed if either a get or abort condition +is met, or if another command is executed. If either the abort condition is met or another +command is executed an abort signal is returned. If an abort signal is ever returned the +command should finish execution without any more calls that preempt the command. +If a get condition is met the user input is returned +) +DOC_SEE(Input_Type_Flag) +DOC_SEE(User_Input) +
+
+
+

§2.2.36: 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

+
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

+
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) +DOC +( +The memory pointed to by bar must remain valid until a call to end_query_bar or +until the command returns. +) +
+
+
+

§2.2.39: 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) +DOC_PARAM(flags, not currently used) +DOC +( +bar must be a pointer previously passed to start_query_bar previously in the same command. +) +
+
+
+

§2.2.40: print_message

+
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) +
+
+
+

§2.2.41: 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

+
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

+
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 +( +For each color struct in the array, the color in the style pallet is set to the color +code paired with the tag. +) +
+
+
+

§2.2.44: 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) +DOC_PARAM(count, the number of color structs in the colors array) +DOC +( +For each color struct in the array, the color field of the struct is filled with the +color from the specified color in the pallet. +) +
+
+
+ + diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index d1d42692..6472fda8 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -661,6 +661,9 @@ DOC ( The output buffer might have a capacity of at least (end - start) The output is not null terminated. + +This call fails if the buffer does not exist, or if the read range +is not within the bounds of the buffer. ) */{ Command_Data *cmd = (Command_Data*)app->cmd_context; @@ -689,10 +692,14 @@ DOC_PARAM(len, the length of the str string) DOC_RETURN(returns non-zero if the replacement succeeds) DOC ( -Replace simultaneously deletes the range from start to end and writes str -in the same position. If end == start then this call is equivalent to -inserting the string at start. If len == 0 this call is equivalent to -deleteing the range from start to end. +If this call succeeds it deletes the range from start to end +and writes str in the same position. If end == start then +this call is equivalent to inserting the string at start. +If len == 0 this call is equivalent to deleteing the range +from start to end. + +This call fails if the buffer does not exist, or if the replace +range is not within the bounds of the buffer. ) */{ Command_Data *cmd = (Command_Data*)app->cmd_context; diff --git a/4ed_metagen.cpp b/4ed_metagen.cpp index 176783f8..f5560d7c 100644 --- a/4ed_metagen.cpp +++ b/4ed_metagen.cpp @@ -19,6 +19,8 @@ #define FCPP_LEXER_IMPLEMENTATION #include "4cpp_lexer.h" +#include "4coder_version.h" + struct Struct_Field{ char *type; char *name; @@ -328,16 +330,17 @@ char* generate_style(){ } ////////////////////////////////////////////////////////////////////////////////////////////////// -struct Function_Set{ +typedef struct Function_Set{ String *name; String *ret; String *args; String *macros; String *public_name; + String *doc_string; int *valid; -}; +} Function_Set; void zero_index(Function_Set fnc_set, int sig_count){ @@ -430,7 +433,6 @@ is_comment(String str){ struct Doc_Parse{ Cpp_Token_Stack tokens; - String doc_string; }; int @@ -462,9 +464,14 @@ doc_note_string[] = { make_lit_string("DOC_SEE"), }; +String +doc_parse_identifier(String lexeme, int *pos){ + String result = {0}; + return(result); +} + void perform_doc_parse(Doc_Parse *parse, String lexeme){ -#if 0 int keep_parsing = true; int pos = 0; @@ -474,15 +481,15 @@ perform_doc_parse(Doc_Parse *parse, String lexeme){ keep_parsing = false; } else{ - if (string_set_match(doc_note_string, ArrayCount(doc_note_string), doc_note, &match)){ - + int doc_note_type; + if (string_set_match(doc_note_string, ArrayCount(doc_note_string), doc_note, &doc_note_type)){ + // TODO(allen): switch on the note type and add the info to the parse data } else{ // TODO(allen): do warning } } }while(keep_parsing); -#endif } char* @@ -505,11 +512,12 @@ generate_custom_headers(){ Function_Set function_set = {0}; - function_set.name = (String*)malloc((sizeof(String)*5 + sizeof(int))*line_count); + 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; @@ -671,7 +679,7 @@ generate_custom_headers(){ String *code = &code_data[J]; Doc_Parse *parse = &parses[J]; - // TODO(allen): KILL THIS FUCKIN' Cpp_File FUCKIN NONSENSE BULLSHIT!!!!! + // TODO(allen): KILL THIS FUCKIN' Cpp_File FUCKIN NONSENSE HORSE SHIT!!!!! Cpp_File file; file.data = code->str; file.size = code->size; @@ -692,10 +700,14 @@ generate_custom_headers(){ 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; + } } } } @@ -704,32 +716,145 @@ generate_custom_headers(){ file = fopen(API_DOC, "wb"); +#define CODE_STYLE "font-family: \"Courier New\", Courier, monospace; text-align: left;" + +#define BACK_COLOR "#FFFFE0" +#define POP_COLOR_1 "#007000" +#define POP_BACK_1 "#E0FFD0" +#define POP_COLOR_2 "#007070" +#define POP_COLOR_3 "#005000" + fprintf(file, "\n" "\n" "4coder API Docs\n" + "\n" "\n" - "\n" - "

4coder API

" + "\n" + "
\n" + "

4coder API

\n" ); fprintf(file, - "

\n§1 Introduction

\n" - "
Coming Soon
"); + "

§1 Introduction

\n" + "
\n" + + "

\n" + "This is the documentation for " VERSION " The documentation has been made as " + "accurate as possible but there may be errors. If you have questions or " + "discover errors please contact editor@4coder.net." + "

\n" + + "

\n" + "

\n" + + "
\n"); - fprintf(file, "

\n§2 Functions

\n"); - for (int i = 0; i < sig_count; ++i){ - String name = function_set.public_name[i]; + fprintf(file, "

§2 Types and Functions

\n"); + { +#undef SECTION +#define SECTION "2.1" + fprintf(file, - "
\n" - "%.*s\n" - "
\n", - name.size, name.str - ); + "

§"SECTION" Function List

\n" + "
    \n"); + + for (int i = 0; i < sig_count; ++i){ + String name = function_set.public_name[i]; + fprintf(file, + "
  • \n" + "%.*s\n" + "
  • \n", + i, name.size, name.str + ); + } + fprintf(file, "
\n"); + +#undef SECTION +#define SECTION "2.2" + + fprintf(file, "

§"SECTION" Descriptions

\n"); + for (int i = 0; i < sig_count; ++i){ + String name = function_set.public_name[i]; + String ret = function_set.ret[i]; + String args = function_set.args[i]; + String doc = function_set.doc_string[i]; + + if (doc.size <= 0){ + doc = make_lit_string("No doc generated ~ assume this call is not meant to be public"); + printf("warning: missing info for %.*s\n", name.size, name.str); + } + + fprintf(file, + "
\n" + "

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

\n" + "
", + i, i, + name.size, name.str + ); + + fprintf(file, "%.*s %.*s", ret.size, ret.str, name.size, name.str); + // TODO(allen): replace this with a loop to write each parameter on it's own line + fprintf(file, "%.*s", args.size, args.str); + + fprintf(file, + "
\n" + "
%.*s
\n" + "
\n", + doc.size, doc.str + ); + } } fprintf(file, - "" + "
\n" + "\n" "\n" ); diff --git a/4ed_rendering.cpp b/4ed_rendering.cpp index 965a4e42..458049d9 100644 --- a/4ed_rendering.cpp +++ b/4ed_rendering.cpp @@ -359,7 +359,7 @@ part_free(void *ptr, void *context){ #include "stb_truetype.h" internal i32 -font_load_stb(Partition *part, +stb_font_load(Partition *part, Render_Font *font_out, char *filename_untranslated, i32 pt_size, diff --git a/build_all.bat b/build_all.bat index a985ff47..97583cbc 100644 --- a/build_all.bat +++ b/build_all.bat @@ -21,18 +21,19 @@ pushd ..\code if %ERRORLEVEL% neq 0 (set FirstError=1) 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_casey.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 -cl %OPTS% %INCLUDES% %DEFINES% ..\code\4ed_app_target.cpp %* /Fe4ed_app /LD /link /INCREMENTAL:NO /OPT:REF %EXPORTS% +REM 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) -cl %OPTS% %INCLUDES% %DEFINES% ..\code\win32_4ed.cpp %LIBS% %ICON% %* /Fe4ed /link /NODEFAULTLIB:library +REM 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 index 939f107b..3ec5f60a 100644 --- a/custom_api_spec.cpp +++ b/custom_api_spec.cpp @@ -53,7 +53,7 @@ int View_Post_Fade (Application_Links *app, View_Summary *view, float secon // 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); +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); diff --git a/package.bat b/package.bat index 5a193156..f10801fb 100644 --- a/package.bat +++ b/package.bat @@ -9,6 +9,7 @@ pushd W:\4ed\code ..\meta\readmegen call "build_all.bat" /O2 /DFRED_KEEP_ASSERT +del ..\current_dist\4coder\*.html copy ..\build\4ed.exe ..\current_dist\4coder\* copy ..\build\4ed.pdb ..\current_dist\4coder\* copy ..\build\4ed_app.dll ..\current_dist\4coder\* @@ -16,12 +17,12 @@ copy ..\build\4ed_app.pdb ..\current_dist\4coder\* copy ..\data\* ..\current_dist\4coder\* copy README.txt ..\current_dist\4coder\* copy TODO.txt ..\current_dist\4coder\* -copy 4coder_API.html ..\current_dist\4coder\* del ..\current_dist\SUPERREADME.txt del ..\current_dist\4coder\basic.cpp del ..\current_dist\4coder\.4coder_settings call "build_all.bat" /O2 /DFRED_SUPER /DFRED_KEEP_ASSERT +del ..\current_dist\4coder\*.html copy ..\build\4ed.exe ..\current_dist_super\4coder\* copy ..\build\4ed.pdb ..\current_dist_super\4coder\* copy ..\build\4ed_app.dll ..\current_dist_super\4coder\* diff --git a/win32_4ed.cpp b/win32_4ed.cpp index c872fdd0..67b933ce 100644 --- a/win32_4ed.cpp +++ b/win32_4ed.cpp @@ -1227,13 +1227,13 @@ Font_Load_Sig(system_draw_font_load){ #else - success = font_load(&win32vars.font_part, - font_out, - filename, - pt_size, - tab_width, - oversample, - store_texture); + success = stb_font_load(&win32vars.font_part, + font_out, + filename, + pt_size, + tab_width, + oversample, + store_texture); #endif From ed29d04c101155b370a02d573fafb40476cefce8 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Mon, 27 Jun 2016 11:52:58 -0400 Subject: [PATCH 2/3] now generating API headers and docs solely from the implementation file, thus eliminating the declaration/definition duplication --- 4coder_API.html | 402 ++++++++++++++++++------------------- 4coder_buffer_types.h | 2 +- 4coder_custom_api.h | 132 ++++++------ 4coder_default_include.cpp | 7 +- 4ed.cpp | 2 - 4ed_api_implementation.cpp | 236 +++++++++++++--------- 4ed_metagen.cpp | 264 ++++++++++++++++++------ build_all.bat | 6 +- custom_api_spec.cpp | 76 ------- win32_4ed.cpp | 105 +--------- win32_api_impl.cpp | 111 ++++++++++ 11 files changed, 729 insertions(+), 614 deletions(-) delete mode 100644 custom_api_spec.cpp create mode 100644 win32_api_impl.cpp 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 + From 27b93e3474a069ebe762e5213fe16f0e6ddbfdff Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Mon, 27 Jun 2016 15:45:15 -0400 Subject: [PATCH 3/3] basic function doc formatting --- 4coder_API.html | 1093 +++++++++++++++++++++--------------- 4ed_api_implementation.cpp | 2 +- 4ed_metagen.cpp | 480 ++++++++++++---- build.bat | 9 - build_all.bat | 10 +- 5 files changed, 1004 insertions(+), 590 deletions(-) diff --git a/4coder_API.html b/4coder_API.html index 1e9c0904..e693546f 100644 --- a/4coder_API.html +++ b/4coder_API.html @@ -2,9 +2,10 @@ 4coder API Docs -
    +

    4coder API

    §1 Introduction

    @@ -162,29 +163,50 @@ This is the documentation for alpha 4.0.8 super! The documentation has been made

    §2.2 Descriptions

    -
    +

    §2.2.0: exec_command

    -
    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) +
    void exec_command( +
    Application_Links *app,
    int command_id
    )
    +
    Parameters
    +
    command_id
    +
    an integer id enumerated in 4coder_custom.h starting with cmdid
    -
    +
    Description
    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)
    -
    -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) -DOC_PARAM(path_len, the length of the path string) -DOC_PARAM(command, the command to be executed) -DOC_PARAM(command_len, the length of the command string) -DOC_PARAM(flags, may be zero or one or more CLI flags ORed together) -DOC_RETURN(returns non-zero if the command is successfully started, returns zero otherwise) -DOC -( -Executes a system command as if called from the command line, and sends the output to a buffer. The buffer +
    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
    ) +
    +
    Parameters
    +
    view
    +
    the target view that will display the output buffer, may be NULL, see description for details
    +
    +
    +
    buffer
    +
    a buffer identifier for the buffer that will be filled with the output from the command
    +
    +
    +
    path
    +
    the path from which the command is executed
    +
    +
    +
    path_len
    +
    the length of the path string
    +
    +
    +
    command
    +
    the command to be executed
    +
    +
    +
    command_len
    +
    the length of the command string
    +
    +
    +
    flags
    +
    may be zero or one or more CLI flags ORed together
    +
    +
    Return
    returns non-zero if the command is successfully started, returns zero otherwise
    Description
    Executes a system command as if called from the command line, and sends the output to a buffer. The buffer identifier can either name a new buffer that does not exist, name a buffer that does exist, or provide the id of a buffer that does exist. If the buffer already exists the command will fail, unless CLI_OverlapWithConflict is set in the flags. @@ -199,580 +221,735 @@ If CLI_AlwaysBindToView is set and the view parameter is not NULL, then the spec begin displaying the output buffer, even if another open view already displays that buffer. If CLI_CursorAtEnd is set the cursor in the output buffer will be placed at the end of the buffer instead -of at the beginning. -) -
    -
    -
    +of at the beginning.

    +

    §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) -DOC_PARAM(len, the length of the string str) -DOC -( -Stores the string str in the clipboard initially with index 0. +
    void clipboard_post( +
    Application_Links *app,
    char *str,
    int len
    ) +
    +
    Parameters
    +
    str
    +
    the string to post to the clipboard
    +
    +
    +
    len
    +
    the length of the string str
    +
    +
    Description
    Stores the string str in the clipboard initially with index 0. Also reports the copy to the operating system, so that it may -be pasted into other applications. -) -
    -
    -
    +be pasted into other applications.

    +

    §2.2.3: clipboard_count

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

    +

    §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) -DOC_PARAM(out, a buffer where the clipboard contents are written or NULL) -DOC_PARAM(len, the length of the out buffer) -DOC_RETURN(returns the size of the item on the clipboard associated with the given index) -DOC -( -There are multiple items on the 4coder clipboard. The most recent copy is always at +
    int clipboard_index( +
    Application_Links *app,
    int index,
    char *out,
    int len
    ) +
    +
    Parameters
    +
    index
    +
    the index of the item to be read
    +
    +
    +
    out
    +
    a buffer where the clipboard contents are written or NULL
    +
    +
    +
    len
    +
    the length of the out buffer
    +
    +
    Return
    returns the size of the item on the clipboard associated with the given index
    Description
    There are multiple items on the 4coder clipboard. The most recent copy is always at index 0. The second most recent is at index 1, and so on for all the stored clipboard items. This function reads one of the clipboard items and stores it into the out buffer, if the out buffer is not NULL. This function always returns the size of the clipboard item specified even if the output buffer is NULL. If the output buffer is too small to contain the whole string, it is filled with the first len character of the clipboard contents. The output -string is not null terminated. -) -
    -
    -
    +string is not null terminated.

    +

    §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) -DOC_RETURN(returns the summary of the first buffer in a buffer loop) -DOC -( -Begins a loop across all the buffers. +
    Buffer_Summary get_buffer_first( +
    Application_Links *app,
    unsigned int access
    ) +
    +
    Parameters
    +
    access
    +
    the access flags for the access
    +
    +
    Return
    returns the summary of the first buffer in a buffer loop
    Description
    Begins a loop across all the buffers. If the buffer returned does not exist, the loop is finished. Buffers -should not be killed durring a buffer loop. -) -DOC_SEE(Access_Flag) -DOC_SEE(get_buffer_next) -
    -
    -
    +should not be killed durring a buffer loop.
    See Also

    +

    §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) -DOC_PARAM(access, the access flags for the access) -DOC -( -Writes the next buffer into the buffer struct. To get predictable results every +
    void get_buffer_next( +
    Application_Links *app,
    Buffer_Summary *buffer,
    unsigned int access
    ) +
    +
    Parameters
    +
    buffer
    +
    pointer to the loop buffer originally returned by get_buffer_first
    +
    +
    +
    access
    +
    the access flags for the access
    +
    +
    Description
    Writes the next buffer into the buffer struct. To get predictable results every call to get_buffer_first and get_buffer_next in the loop should have the same access flags. If the buffer returned does not exist, the loop is finished. Buffers -should not be killed durring a buffer loop. -) -DOC_SEE(Access_Flag) -DOC_SEE(get_buffer_first) -
    -
    -
    +should not be killed durring a buffer loop.
    See Also

    +

    §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) -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) +
    Buffer_Summary get_buffer( +
    Application_Links *app,
    int buffer_id,
    unsigned int access
    )
    +
    Parameters
    +
    buffer_id
    +
    the id of the buffer to get
    -
    +
    +
    access
    +
    the access flags for the access
    +
    +
    Return
    returns a summary that describes the indicated buffer if it exists and is accessible

    +

    §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) -DOC_PARAM(len, the length of the name string) -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) +
    Buffer_Summary get_buffer_by_name( +
    Application_Links *app,
    char *name,
    int len,
    unsigned int access
    )
    +
    Parameters
    +
    name
    +
    the name of the buffer
    -
    +
    +
    len
    +
    the length of the name string
    +
    +
    +
    access
    +
    the access flags for the access
    +
    +
    Return
    returns a summary that describes the indicated buffer if it exists and is accessible

    +

    §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) -DOC_PARAM(seek_forward, non-zero indicates to seek forward otherwise the seek goes backward) -DOC_PARAM(flags, one or more types of boundaries to use for stopping the seek) -DOC_RETURN(returns the position where the seek stops) -DOC_SEE(Seek_Boundary_Flag) +
    int buffer_boundary_seek( +
    Application_Links *app,
    Buffer_Summary *buffer,
    int start_pos,
    int seek_forward,
    unsigned int flags
    )
    +
    Parameters
    +
    buffer
    +
    the buffer to seek through
    -
    +
    +
    start_pos
    +
    the absolute position in the buffer to begin the seek
    +
    +
    +
    seek_forward
    +
    non-zero indicates to seek forward otherwise the seek goes backward
    +
    +
    +
    flags
    +
    one or more types of boundaries to use for stopping the seek
    +
    +
    Return
    returns the position where the seek stops
    See Also

    +

    §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) -DOC_PARAM(start, the beginning of the read range) -DOC_PARAM(end, one past the end of the read range) -DOC_PARAM(out, the output buffer to fill with the result of the read) -DOC_RETURN(returns non-zero on success) -DOC -( -The output buffer might have a capacity of at least (end - start) +
    int buffer_read_range( +
    Application_Links *app,
    Buffer_Summary *buffer,
    int start,
    int end,
    char *out
    ) +
    +
    Parameters
    +
    buffer
    +
    the buffer to read out of
    +
    +
    +
    start
    +
    the beginning of the read range
    +
    +
    +
    end
    +
    one past the end of the read range
    +
    +
    +
    out
    +
    the output buffer to fill with the result of the read
    +
    +
    Return
    returns non-zero on success
    Description
    The output buffer must have a capacity of at least (end - start) The output is not null terminated. This call fails if the buffer does not exist, or if the read range -is not within the bounds of the buffer. -) -
    -
    -
    +is not within the bounds of the buffer.

    +

    §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) -DOC_PARAM(start, the start of the range to edit) -DOC_PARAM(end, the end of the range to edit) -DOC_PARAM(str, the string to write into the range) -DOC_PARAM(len, the length of the str string) -DOC_RETURN(returns non-zero if the replacement succeeds) -DOC -( -If this call succeeds it deletes the range from start to end +
    int buffer_replace_range( +
    Application_Links *app,
    Buffer_Summary *buffer,
    int start,
    int end,
    char *str,
    int len
    ) +
    +
    Parameters
    +
    buffer
    +
    the buffer to edit
    +
    +
    +
    start
    +
    the start of the range to edit
    +
    +
    +
    end
    +
    the end of the range to edit
    +
    +
    +
    str
    +
    the string to write into the range
    +
    +
    +
    len
    +
    the length of the str string
    +
    +
    Return
    returns non-zero if the replacement succeeds
    Description
    If this call succeeds it deletes the range from start to end and writes str in the same position. If end == start then this call is equivalent to inserting the string at start. If len == 0 this call is equivalent to deleteing the range from start to end. This call fails if the buffer does not exist, or if the replace -range is not within the bounds of the buffer. -) -
    -
    -
    +range is not within the bounds of the buffer.

    +

    §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) -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) -DOC_SEE(Buffer_Setting_ID) +
    int buffer_set_setting( +
    Application_Links *app,
    Buffer_Summary *buffer,
    int setting,
    int value
    )
    +
    Parameters
    +
    buffer
    +
    the buffer to set a setting on
    -
    +
    +
    setting
    +
    one of the Buffer_Setting_ID enum values that identifies the setting to set
    +
    +
    +
    value
    +
    the value to set the specified setting to
    +
    +
    See Also

    +

    §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) -DOC_PARAM(start, the position to start the auto indenting) -DOC_PARAM(end, the position to end the auto indenting) -DOC_PARAM(tab_width, the number of spaces to place as a tab) -DOC_PARAM(flags, the auto tab behavior flags) -DOC_RETURN(returns non-zero when the call succeeds) -DOC -( -Applies the built in auto-indentation rule to the code in the range from +
    int buffer_auto_indent( +
    Application_Links *app,
    Buffer_Summary *buffer,
    int start,
    int end,
    int tab_width,
    unsigned int flags
    ) +
    +
    Parameters
    +
    buffer
    +
    the buffer in which to apply the auto indenting
    +
    +
    +
    start
    +
    the position to start the auto indenting
    +
    +
    +
    end
    +
    the position to end the auto indenting
    +
    +
    +
    tab_width
    +
    the number of spaces to place as a tab
    +
    +
    +
    flags
    +
    the auto tab behavior flags
    +
    +
    Return
    returns non-zero when the call succeeds
    Description
    Applies the built in auto-indentation rule to the code in the range from start to end by inserting spaces or tabs at the beginning of the lines. If the buffer does not have lexing enabled or the lexing job has not -completed this function will fail. -) -DOC_SEE(Auto_Tab_Flag) -
    -
    -
    +completed this function will fail.
    See Also

    +

    §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) -DOC_PARAM(filename_len, the length of the filename string) -DOC_PARAM(flags, flags for buffer creation behavior) -DOC_RETURN(returns the summary of the created buffer on success or a NULL buffer otherwise) -DOC -( -Tries to create a new buffer and associate it to the given filename. If such a buffer already +
    Buffer_Summary create_buffer( +
    Application_Links *app,
    char *filename,
    int filename_len,
    unsigned int flags
    ) +
    +
    Parameters
    +
    filename
    +
    the name of the file to be opened or created
    +
    +
    +
    filename_len
    +
    the length of the filename string
    +
    +
    +
    flags
    +
    flags for buffer creation behavior
    +
    +
    Return
    returns the summary of the created buffer on success or a NULL buffer otherwise
    Description
    Tries to create a new buffer and associate it to the given filename. If such a buffer already exists the existing buffer is returned in the buffer summary and no new buffer is created. If the buffer does not exist a new buffer is created and named after the given filename. If the filename corresponds to a file on the disk that file is loaded and put into buffer, if -the filename does not correspond to a file on disk the buffer is created empty. -) -DOC_SEE(Buffer_Create_Flag) -
    -
    -
    +the filename does not correspond to a file on disk the buffer is created empty.
    See Also

    +

    §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) -DOC_PARAM(filename, the name of the file to save the buffer into) -DOC_PARAM(filename_len, length of the filename string) -DOC_PARAM(flags, not currently used) -DOC_RETURN(returns non-zero if the save succeeds) +
    int save_buffer( +
    Application_Links *app,
    Buffer_Summary *buffer,
    char *filename,
    int filename_len,
    unsigned int flags
    )
    +
    Parameters
    +
    buffer
    +
    the buffer to save to a file
    -
    +
    +
    filename
    +
    the name of the file to save the buffer into
    +
    +
    +
    filename_len
    +
    length of the filename string
    +
    +
    +
    flags
    +
    not currently used
    +
    +
    Return
    returns non-zero if the save succeeds

    +

    §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) -DOC_PARAM(view_id, the id of view that will contain the "are you sure" dialogue) -DOC_PARAM(flags, flags for buffer kill behavior) -DOC_RETURN(returns non-zero if the kill succeeds) -DOC -( -Tries to kill the idenfied buffer. If the buffer is dirty and the "are you sure" +
    int kill_buffer( +
    Application_Links *app,
    Buffer_Identifier buffer,
    int view_id,
    unsigned int flags
    ) +
    +
    Parameters
    +
    buffer
    +
    a buffer identifier specifying the buffer to try to kill
    +
    +
    +
    view_id
    +
    the id of view that will contain the "are you sure" dialogue
    +
    +
    +
    flags
    +
    flags for buffer kill behavior
    +
    +
    Return
    returns non-zero if the kill succeeds
    Description
    Tries to kill the idenfied buffer. If the buffer is dirty and the "are you sure" dialogue needs to be displayed the provided view is used to show the dialogue. -If the view is not open the kill fails. -) -DOC_SEE(Buffer_Kill_Flags) -
    -
    -
    +If the view is not open the kill fails.
    See Also

    +

    §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) -DOC_RETURN(returns the summary of the first view in a view loop) -DOC -( -Begins a loop across all the open views. +
    View_Summary get_view_first( +
    Application_Links *app,
    unsigned int access
    ) +
    +
    Parameters
    +
    access
    +
    the access flags for the access
    +
    +
    Return
    returns the summary of the first view in a view loop
    Description
    Begins a loop across all the open views. If the view summary returned is NULL, the loop is finished. -Views should not be closed or opened durring a view loop. -) -DOC_SEE(Access_Flag) -DOC_SEE(get_view_next) -
    -
    -
    +Views should not be closed or opened durring a view loop.
    See Also

    +

    §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) -DOC_PARAM(access, the access flags for the access) -DOC -( -Writes the next view into the view struct. To get predictable results every +
    void get_view_next( +
    Application_Links *app,
    View_Summary *view,
    unsigned int access
    ) +
    +
    Parameters
    +
    view
    +
    pointer to the loop view originally returned by get_view_first
    +
    +
    +
    access
    +
    the access flags for the access
    +
    +
    Description
    Writes the next view into the view struct. To get predictable results every call to get_view_first and get_view_next in the loop should have the same access flags. If the view summary returned is NULL, the loop is finished. -Views should not be closed or opened durring a view loop. -) -DOC_SEE(Access_Flag) -DOC_SEE(get_view_first) -
    -
    -
    +Views should not be closed or opened durring a view loop.
    See Also

    +

    §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) -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) +
    View_Summary get_view( +
    Application_Links *app,
    int view_id,
    unsigned int access
    )
    +
    Parameters
    +
    view_id
    +
    the id of the view to get
    -
    +
    +
    access
    +
    the access flags for the access
    +
    +
    Return
    returns a summary that describes the indicated view if it is open and is accessible

    +

    §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) +
    View_Summary get_active_view( +
    Application_Links *app,
    unsigned int access
    )
    +
    Parameters
    +
    access
    +
    the access flags for the access
    -
    +
    Return
    returns a summary that describes the active view

    +

    §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) -DOC_PARAM(seek, the seek position) -DOC_PARAM(cursor_out, on success this is filled with result of the seek) -DOC_RETURN(returns non-zero on success) -DOC -( -Computes a full cursor for the given seek position. -) -DOC_SEE(Buffer_Seek) +
    int view_compute_cursor( +
    Application_Links *app,
    View_Summary *view,
    Buffer_Seek seek,
    Full_Cursor *cursor_out
    )
    +
    Parameters
    +
    view
    +
    the view on which to run the cursor computation
    -
    +
    +
    seek
    +
    the seek position
    +
    +
    +
    cursor_out
    +
    on success this is filled with result of the seek
    +
    +
    Return
    returns non-zero on success
    Description
    Computes a full cursor for the given seek position.
    See Also

    +

    §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) -DOC_PARAM(seek, the seek position) -DOC_PARAM(set_preferred_x, if true the preferred x is updated to match the new cursor position) -DOC_RETURN(returns non-zero on success) -DOC -( -Sets the the view's cursor position. set_preferred_x should usually be true unless the change in -cursor position is is a vertical motion that tries to keep the cursor in the same column or x position. -) -DOC_SEE(Buffer_Seek) +
    int view_set_cursor( +
    Application_Links *app,
    View_Summary *view,
    Buffer_Seek seek,
    int set_preferred_x
    )
    +
    Parameters
    +
    view
    +
    the view in which to set the cursor
    -
    +
    +
    seek
    +
    the seek position
    +
    +
    +
    set_preferred_x
    +
    if true the preferred x is updated to match the new cursor position
    +
    +
    Return
    returns non-zero on success
    Description
    Sets the the view's cursor position. set_preferred_x should usually be true unless the change in +cursor position is is a vertical motion that tries to keep the cursor in the same column or x position.
    See Also

    +

    §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) -DOC_PARAM(seek, the seek position) -DOC_RETURN(returns non-zero on success) -DOC -( -Sets the the view's mark position. -) -DOC_SEE(Buffer_Seek) +
    int view_set_mark( +
    Application_Links *app,
    View_Summary *view,
    Buffer_Seek seek
    )
    +
    Parameters
    +
    view
    +
    the view in which to set the mark
    -
    +
    +
    seek
    +
    the seek position
    +
    +
    Return
    returns non-zero on success
    Description
    Sets the the view's mark position.
    See Also

    +

    §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) -DOC_PARAM(start, the start of the highlight range) -DOC_PARAM(end, the end of the highlight range) -DOC_PARAM(turn_on, indicates whether the highlight is being turned on or off) -DOC_RETURN(returns non-zero on success) -DOC -( -The highlight is mutually exclusive to the cursor. When the turn_on parameter +
    int view_set_highlight( +
    Application_Links *app,
    View_Summary *view,
    int start,
    int end,
    int turn_on
    ) +
    +
    Parameters
    +
    view
    +
    the view to set the highlight in
    +
    +
    +
    start
    +
    the start of the highlight range
    +
    +
    +
    end
    +
    the end of the highlight range
    +
    +
    +
    turn_on
    +
    indicates whether the highlight is being turned on or off
    +
    +
    Return
    returns non-zero on success
    Description
    The highlight is mutually exclusive to the cursor. When the turn_on parameter is set to true the highlight will be shown and the cursor will be hidden. After that either setting the with view_set_cursor or calling view_set_highlight and -the turn_on set to false, will switch back to showing the cursor. -) -
    -
    -
    +the turn_on set to false, will switch back to showing the cursor.

    +

    §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) -DOC_PARAM(buffer_id, the buffer to show in the view) -DOC_PARAM(flags, set buffer behavior flags) -DOC_RETURN(returns non-zero on success) -DOC -( -On success view_set_buffer sets the specified view's current buffer and -cancels and dialogue shown in the view and displays the file. -) -DOC_SEE(Set_Buffer_Flag) +
    int view_set_buffer( +
    Application_Links *app,
    View_Summary *view,
    int buffer_id,
    unsigned int flags
    )
    +
    Parameters
    +
    view
    +
    the view to display the buffer in
    -
    +
    +
    buffer_id
    +
    the buffer to show in the view
    +
    +
    +
    flags
    +
    set buffer behavior flags
    +
    +
    Return
    returns non-zero on success
    Description
    On success view_set_buffer sets the specified view's current buffer and +cancels and dialogue shown in the view and displays the file.
    See Also

    +

    §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) -DOC_PARAM(seconds, the number of seconds the fade effect should last) -DOC_PARAM(start, the first character in the fade range) -DOC_PARAM(end, one after the last character in the fade range) -DOC_PARAM(color, the color to fade from) +
    int view_post_fade( +
    Application_Links *app,
    View_Summary *view,
    float seconds,
    int start,
    int end,
    unsigned int color
    )
    +
    Parameters
    +
    view
    +
    the veiw to post a fade effect to
    -
    +
    +
    seconds
    +
    the number of seconds the fade effect should last
    +
    +
    +
    start
    +
    the first character in the fade range
    +
    +
    +
    end
    +
    one after the last character in the fade range
    +
    +
    +
    color
    +
    the color to fade from
    +
    +

    +

    §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
    +
    void view_set_paste_rewrite_( +
    Application_Links *app,
    View_Summary *view
    )
    -
    +No documentation generated for this function, assume it is non-public. +

    +

    §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
    +
    int view_get_paste_rewrite_( +
    Application_Links *app,
    View_Summary *view
    )
    -
    +No documentation generated for this function, assume it is non-public. +

    +

    §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) -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) -DOC -( -This call preempts the command. The command is resumed if either a get or abort condition +
    User_Input get_user_input( +
    Application_Links *app,
    unsigned int get_type,
    unsigned int abort_type
    ) +
    +
    Parameters
    +
    get_type
    +
    input type flag that specifies the types of inputs that should be returned
    +
    +
    +
    abort_type
    +
    input type flag that specifies the types of inputs that should cause an abort signal
    +
    +
    Return
    returns a User_Input that describes an event passed to the command
    Description
    This call preempts the command. The command is resumed if either a get or abort condition is met, or if another command is executed. If either the abort condition is met or another command is executed an abort signal is returned. If an abort signal is ever returned the command should finish execution without any more calls that preempt the command. -If a get condition is met the user input is returned -) -DOC_SEE(Input_Type_Flag) -DOC_SEE(User_Input) -
    -
    -
    +If a get condition is met the user input is returned
    See Also

    +

    §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) +
    User_Input get_command_input( +
    Application_Links *app
    )
    -
    -
    +
    Return
    returns the input that triggered the command in execution.
    See Also

    +

    §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) +
    Mouse_State get_mouse_state( +
    Application_Links *app
    )
    -
    -
    +
    Return
    returns the current mouse state
    See Also

    +

    §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) -DOC_PARAM(flags, not currently used) -DOC_RETURN(returns non-zero on success) -DOC -( -The memory pointed to by bar must remain valid until a call to end_query_bar or -until the command returns. -) +
    int start_query_bar( +
    Application_Links *app,
    Query_Bar *bar,
    unsigned int flags
    )
    +
    Parameters
    +
    bar
    +
    a pointer to the Query_Bar struct that defines the bar's contents
    -
    +
    +
    flags
    +
    not currently used
    +
    +
    Return
    returns non-zero on success
    Description
    The memory pointed to by bar must remain valid until a call to end_query_bar or +until the command returns.

    +

    §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) -DOC_PARAM(flags, not currently used) -DOC -( -bar must be a pointer previously passed to start_query_bar previously in the same command. -) +
    void end_query_bar( +
    Application_Links *app,
    Query_Bar *bar,
    unsigned int flags
    )
    +
    Parameters
    +
    bar
    +
    a pointer to the Query_Bar struct to end
    -
    +