now generating API headers and docs solely from the implementation file, thus eliminating the declaration/definition duplication
This commit is contained in:
parent
f458ba2113
commit
ed29d04c10
402
4coder_API.html
402
4coder_API.html
|
@ -26,143 +26,143 @@ This is the documentation for alpha 4.0.8 super! The documentation has been made
|
|||
<h3>§2.1 Function List</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a href='#2.2.0'>exec_command</a>
|
||||
<a href='#exec_command_doc'>exec_command</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.1'>exec_system_command</a>
|
||||
<a href='#exec_system_command_doc'>exec_system_command</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.2'>directory_get_hot</a>
|
||||
<a href='#clipboard_post_doc'>clipboard_post</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.3'>get_4ed_path</a>
|
||||
<a href='#clipboard_count_doc'>clipboard_count</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.4'>file_exists</a>
|
||||
<a href='#clipboard_index_doc'>clipboard_index</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.5'>directory_cd</a>
|
||||
<a href='#get_buffer_first_doc'>get_buffer_first</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.6'>get_file_list</a>
|
||||
<a href='#get_buffer_next_doc'>get_buffer_next</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.7'>free_file_list</a>
|
||||
<a href='#get_buffer_doc'>get_buffer</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.8'>clipboard_post</a>
|
||||
<a href='#get_buffer_by_name_doc'>get_buffer_by_name</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.9'>clipboard_count</a>
|
||||
<a href='#buffer_boundary_seek_doc'>buffer_boundary_seek</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.10'>clipboard_index</a>
|
||||
<a href='#buffer_read_range_doc'>buffer_read_range</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.11'>get_buffer_first</a>
|
||||
<a href='#buffer_replace_range_doc'>buffer_replace_range</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.12'>get_buffer_next</a>
|
||||
<a href='#buffer_set_setting_doc'>buffer_set_setting</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.13'>get_buffer</a>
|
||||
<a href='#buffer_auto_indent_doc'>buffer_auto_indent</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.14'>get_buffer_by_name</a>
|
||||
<a href='#create_buffer_doc'>create_buffer</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.15'>buffer_seek</a>
|
||||
<a href='#save_buffer_doc'>save_buffer</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.16'>buffer_read_range</a>
|
||||
<a href='#kill_buffer_doc'>kill_buffer</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.17'>buffer_replace_range</a>
|
||||
<a href='#get_view_first_doc'>get_view_first</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.18'>buffer_set_setting</a>
|
||||
<a href='#get_view_next_doc'>get_view_next</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.19'>buffer_auto_indent</a>
|
||||
<a href='#get_view_doc'>get_view</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.20'>create_buffer</a>
|
||||
<a href='#get_active_view_doc'>get_active_view</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.21'>save_buffer</a>
|
||||
<a href='#view_compute_cursor_doc'>view_compute_cursor</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.22'>kill_buffer</a>
|
||||
<a href='#view_set_cursor_doc'>view_set_cursor</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.23'>get_view_first</a>
|
||||
<a href='#view_set_mark_doc'>view_set_mark</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.24'>get_view_next</a>
|
||||
<a href='#view_set_highlight_doc'>view_set_highlight</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.25'>get_view</a>
|
||||
<a href='#view_set_buffer_doc'>view_set_buffer</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.26'>get_active_view</a>
|
||||
<a href='#view_post_fade_doc'>view_post_fade</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.27'>view_compute_cursor</a>
|
||||
<a href='#view_set_paste_rewrite__doc'>view_set_paste_rewrite_</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.28'>view_set_cursor</a>
|
||||
<a href='#view_get_paste_rewrite__doc'>view_get_paste_rewrite_</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.29'>view_set_mark</a>
|
||||
<a href='#get_user_input_doc'>get_user_input</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.30'>view_set_highlight</a>
|
||||
<a href='#get_command_input_doc'>get_command_input</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.31'>view_set_buffer</a>
|
||||
<a href='#get_mouse_state_doc'>get_mouse_state</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.32'>view_post_fade</a>
|
||||
<a href='#start_query_bar_doc'>start_query_bar</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.33'>view_set_paste_rewrite_</a>
|
||||
<a href='#end_query_bar_doc'>end_query_bar</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.34'>view_get_paste_rewrite_</a>
|
||||
<a href='#print_message_doc'>print_message</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.35'>get_user_input</a>
|
||||
<a href='#change_theme_doc'>change_theme</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.36'>get_command_input</a>
|
||||
<a href='#change_font_doc'>change_font</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.37'>get_mouse_state</a>
|
||||
<a href='#set_theme_colors_doc'>set_theme_colors</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.38'>start_query_bar</a>
|
||||
<a href='#get_theme_colors_doc'>get_theme_colors</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.39'>end_query_bar</a>
|
||||
<a href='#directory_get_hot_doc'>directory_get_hot</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.40'>print_message</a>
|
||||
<a href='#get_file_list_doc'>get_file_list</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.41'>change_theme</a>
|
||||
<a href='#free_file_list_doc'>free_file_list</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.42'>change_font</a>
|
||||
<a href='#file_exists_doc'>file_exists</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.43'>set_theme_colors</a>
|
||||
<a href='#directory_cd_doc'>directory_cd</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='#2.2.44'>get_theme_colors</a>
|
||||
<a href='#get_4ed_path_doc'>get_4ed_path</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 style='margin-top: 5mm; margin-bottom: 5mm;'>§2.2 Descriptions</h3>
|
||||
<div id='2.2.0' style='margin-bottom: 1cm;'>
|
||||
<div id='exec_command' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.0: exec_command</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void exec_command(Application_Links *app, int command_id)</div>
|
||||
<div>
|
||||
|
@ -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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.1' style='margin-bottom: 1cm;'>
|
||||
<div id='exec_system_command' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.1: exec_system_command</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>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)</div>
|
||||
<div>
|
||||
|
@ -203,87 +203,8 @@ of at the beginning.
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.2' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.2: directory_get_hot</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int directory_get_hot(Application_Links *app, char *out, int capacity)</div>
|
||||
<div>
|
||||
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.
|
||||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.3' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.3: get_4ed_path</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int get_4ed_path(Application_Links *app, char *out, int capacity)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.4' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.4: file_exists</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int file_exists(Application_Links *app, char *filename, int len)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.5' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.5: directory_cd</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int directory_cd(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len)</div>
|
||||
<div>
|
||||
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.
|
||||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.6' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.6: get_file_list</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>File_List get_file_list(Application_Links *app, char *dir, int len)</div>
|
||||
<div>
|
||||
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.
|
||||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.7' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.7: free_file_list</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void free_file_list(Application_Links *app, File_List list)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.8' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.8: clipboard_post</h4>
|
||||
<div id='clipboard_post' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.2: clipboard_post</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void clipboard_post(Application_Links *app, char *str, int len)</div>
|
||||
<div>
|
||||
DOC_PARAM(str, the string to post to the clipboard)
|
||||
|
@ -296,15 +217,15 @@ be pasted into other applications.
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.9' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.9: clipboard_count</h4>
|
||||
<div id='clipboard_count' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.3: clipboard_count</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int clipboard_count(Application_Links *app)</div>
|
||||
<div>
|
||||
DOC(returns the number of items in the clipboard)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.10' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.10: clipboard_index</h4>
|
||||
<div id='clipboard_index' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.4: clipboard_index</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int clipboard_index(Application_Links *app, int index, char *out, int len)</div>
|
||||
<div>
|
||||
DOC_PARAM(index, the index of the item to be read)
|
||||
|
@ -323,8 +244,8 @@ string is not null terminated.
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.11' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.11: get_buffer_first</h4>
|
||||
<div id='get_buffer_first' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.5: get_buffer_first</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>Buffer_Summary get_buffer_first(Application_Links *app, unsigned int access)</div>
|
||||
<div>
|
||||
DOC_PARAM(access, the access flags for the access)
|
||||
|
@ -340,8 +261,8 @@ DOC_SEE(Access_Flag)
|
|||
DOC_SEE(get_buffer_next)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.12' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.12: get_buffer_next</h4>
|
||||
<div id='get_buffer_next' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.6: get_buffer_next</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void get_buffer_next(Application_Links *app, Buffer_Summary *buffer, unsigned int access)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.13' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.13: get_buffer</h4>
|
||||
<div id='get_buffer' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.7: get_buffer</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>Buffer_Summary get_buffer(Application_Links *app, int buffer_id, unsigned int access)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.14' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.14: get_buffer_by_name</h4>
|
||||
<div id='get_buffer_by_name' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.8: get_buffer_by_name</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>Buffer_Summary get_buffer_by_name(Application_Links *app, char *name, int len, unsigned int access)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.15' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.15: buffer_seek</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int buffer_seek(Application_Links *app, Buffer_Summary *buffer, int start_pos, int seek_forward, unsigned int flags)</div>
|
||||
<div id='buffer_boundary_seek' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.9: buffer_boundary_seek</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int buffer_boundary_seek(Application_Links *app, Buffer_Summary *buffer, int start_pos, int seek_forward, unsigned int flags)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.16' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.16: buffer_read_range</h4>
|
||||
<div id='buffer_read_range' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.10: buffer_read_range</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int buffer_read_range(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *out)</div>
|
||||
<div>
|
||||
DOC_PARAM(buffer, the buffer to read out of)
|
||||
|
@ -409,8 +330,8 @@ is not within the bounds of the buffer.
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.17' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.17: buffer_replace_range</h4>
|
||||
<div id='buffer_replace_range' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.11: buffer_replace_range</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int buffer_replace_range(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *str, int len)</div>
|
||||
<div>
|
||||
DOC_PARAM(buffer, the buffer to edit)
|
||||
|
@ -432,8 +353,8 @@ range is not within the bounds of the buffer.
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.18' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.18: buffer_set_setting</h4>
|
||||
<div id='buffer_set_setting' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.12: buffer_set_setting</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int buffer_set_setting(Application_Links *app, Buffer_Summary *buffer, int setting, int value)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.19' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.19: buffer_auto_indent</h4>
|
||||
<div id='buffer_auto_indent' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.13: buffer_auto_indent</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int buffer_auto_indent(Application_Links *app, Buffer_Summary *buffer, int start, int end, int tab_width, unsigned int flags)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.20' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.20: create_buffer</h4>
|
||||
<div id='create_buffer' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.14: create_buffer</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>Buffer_Summary create_buffer(Application_Links *app, char *filename, int filename_len, unsigned int flags)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.21' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.21: save_buffer</h4>
|
||||
<div id='save_buffer' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.15: save_buffer</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int save_buffer(Application_Links *app, Buffer_Summary *buffer, char *filename, int filename_len, unsigned int flags)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.22' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.22: kill_buffer</h4>
|
||||
<div id='kill_buffer' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.16: kill_buffer</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int kill_buffer(Application_Links *app, Buffer_Identifier buffer, int view_id, unsigned int flags)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.23' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.23: get_view_first</h4>
|
||||
<div id='get_view_first' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.17: get_view_first</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>View_Summary get_view_first(Application_Links *app, unsigned int access)</div>
|
||||
<div>
|
||||
DOC_PARAM(access, the access flags for the access)
|
||||
|
@ -526,8 +447,8 @@ DOC_SEE(Access_Flag)
|
|||
DOC_SEE(get_view_next)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.24' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.24: get_view_next</h4>
|
||||
<div id='get_view_next' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.18: get_view_next</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void get_view_next(Application_Links *app, View_Summary *view, unsigned int access)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.25' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.25: get_view</h4>
|
||||
<div id='get_view' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.19: get_view</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>View_Summary get_view(Application_Links *app, int view_id, unsigned int access)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.26' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.26: get_active_view</h4>
|
||||
<div id='get_active_view' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.20: get_active_view</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>View_Summary get_active_view(Application_Links *app, unsigned int access)</div>
|
||||
<div>
|
||||
DOC_PARAM(access, the access flags for the access)
|
||||
DOC_RETURN(returns a summary that describes the active view)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.27' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.27: view_compute_cursor</h4>
|
||||
<div id='view_compute_cursor' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.21: view_compute_cursor</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int view_compute_cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, Full_Cursor *cursor_out)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.28' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.28: view_set_cursor</h4>
|
||||
<div id='view_set_cursor' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.22: view_set_cursor</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int view_set_cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, int set_preferred_x)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.29' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.29: view_set_mark</h4>
|
||||
<div id='view_set_mark' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.23: view_set_mark</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int view_set_mark(Application_Links *app, View_Summary *view, Buffer_Seek seek)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.30' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.30: view_set_highlight</h4>
|
||||
<div id='view_set_highlight' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.24: view_set_highlight</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int view_set_highlight(Application_Links *app, View_Summary *view, int start, int end, int turn_on)</div>
|
||||
<div>
|
||||
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.
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.31' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.31: view_set_buffer</h4>
|
||||
<div id='view_set_buffer' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.25: view_set_buffer</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int view_set_buffer(Application_Links *app, View_Summary *view, int buffer_id, unsigned int flags)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.32' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.32: view_post_fade</h4>
|
||||
<div id='view_post_fade' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.26: view_post_fade</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int view_post_fade(Application_Links *app, View_Summary *view, float seconds, int start, int end, unsigned int color)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.33' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.33: view_set_paste_rewrite_</h4>
|
||||
<div id='view_set_paste_rewrite_' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.27: view_set_paste_rewrite_</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void view_set_paste_rewrite_(Application_Links *app, View_Summary *view)</div>
|
||||
<div>No doc generated ~ assume this call is not meant to be public</div>
|
||||
</div>
|
||||
<div id='2.2.34' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.34: view_get_paste_rewrite_</h4>
|
||||
<div id='view_get_paste_rewrite_' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.28: view_get_paste_rewrite_</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int view_get_paste_rewrite_(Application_Links *app, View_Summary *view)</div>
|
||||
<div>No doc generated ~ assume this call is not meant to be public</div>
|
||||
</div>
|
||||
<div id='2.2.35' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.35: get_user_input</h4>
|
||||
<div id='get_user_input' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.29: get_user_input</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>User_Input get_user_input(Application_Links *app, unsigned int get_type, unsigned int abort_type)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.36' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.36: get_command_input</h4>
|
||||
<div id='get_command_input' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.30: get_command_input</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>User_Input get_command_input(Application_Links *app)</div>
|
||||
<div>
|
||||
DOC_RETURN(returns the input that triggered the command in execution.)
|
||||
DOC_SEE(User_Input)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.37' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.37: get_mouse_state</h4>
|
||||
<div id='get_mouse_state' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.31: get_mouse_state</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>Mouse_State get_mouse_state(Application_Links *app)</div>
|
||||
<div>
|
||||
DOC_RETURN(returns the current mouse state)
|
||||
DOC_SEE(Mouse_State)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.38' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.38: start_query_bar</h4>
|
||||
<div id='start_query_bar' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.32: start_query_bar</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int start_query_bar(Application_Links *app, Query_Bar *bar, unsigned int flags)</div>
|
||||
<div>
|
||||
DOC_PARAM(bar, a pointer to the Query_Bar struct that defines the bar's contents)
|
||||
|
@ -711,8 +632,8 @@ until the command returns.
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.39' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.39: end_query_bar</h4>
|
||||
<div id='end_query_bar' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.33: end_query_bar</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void end_query_bar(Application_Links *app, Query_Bar *bar, unsigned int flags)</div>
|
||||
<div>
|
||||
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
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.40' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.40: print_message</h4>
|
||||
<div id='print_message' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.34: print_message</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void print_message(Application_Links *app, char *str, int len)</div>
|
||||
<div>
|
||||
DOC_PARAM(str, the string to post to *messages*)
|
||||
DOC_PARAM(len, the length of str string)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.41' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.41: change_theme</h4>
|
||||
<div id='change_theme' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.35: change_theme</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void change_theme(Application_Links *app, char *name, int len)</div>
|
||||
<div>
|
||||
DOC_PARAM(name, the name of the built in theme to change to)
|
||||
DOC_PARAM(len, the length of the name string)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.42' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.42: change_font</h4>
|
||||
<div id='change_font' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.36: change_font</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void change_font(Application_Links *app, char *name, int len)</div>
|
||||
<div>
|
||||
DOC_PARAM(name, the name of the built in font to change to)
|
||||
DOC_PARAM(len, the length of the name string)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.43' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.43: set_theme_colors</h4>
|
||||
<div id='set_theme_colors' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.37: set_theme_colors</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void set_theme_colors(Application_Links *app, Theme_Color *colors, int count)</div>
|
||||
<div>
|
||||
DOC_PARAM(colors, an array of color structs pairing differet style tags to color codes)
|
||||
|
@ -760,8 +681,8 @@ code paired with the tag.
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='2.2.44' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.44: get_theme_colors</h4>
|
||||
<div id='get_theme_colors' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.38: get_theme_colors</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void get_theme_colors(Application_Links *app, Theme_Color *colors, int count)</div>
|
||||
<div>
|
||||
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.
|
|||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='directory_get_hot' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.39: directory_get_hot</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int directory_get_hot(Application_Links *app, char *out, int capacity)</div>
|
||||
<div>
|
||||
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.
|
||||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='get_file_list' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.40: get_file_list</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>File_List get_file_list(Application_Links *app, char *dir, int len)</div>
|
||||
<div>
|
||||
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.
|
||||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='free_file_list' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.41: free_file_list</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>void free_file_list(Application_Links *app, File_List list)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='file_exists' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.42: file_exists</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int file_exists(Application_Links *app, char *filename, int len)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
<div id='directory_cd' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.43: directory_cd</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int directory_cd(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len)</div>
|
||||
<div>
|
||||
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.
|
||||
)
|
||||
</div>
|
||||
</div>
|
||||
<div id='get_4ed_path' style='margin-bottom: 1cm;'>
|
||||
<h4>§2.2.44: get_4ed_path</h4>
|
||||
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>int get_4ed_path(Application_Links *app, char *out, int capacity)</div>
|
||||
<div>
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
2
4ed.cpp
2
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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
262
4ed_metagen.cpp
262
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,
|
||||
"<li>\n"
|
||||
"<a href='#2.2.%d'>%.*s</a>\n"
|
||||
"<a href='#%.*s_doc'>%.*s</a>\n"
|
||||
"</li>\n",
|
||||
i, name.size, name.str
|
||||
name.size, name.str,
|
||||
name.size, name.str
|
||||
);
|
||||
}
|
||||
fprintf(file, "</ul>\n");
|
||||
|
@ -832,10 +966,10 @@ generate_custom_headers(){
|
|||
}
|
||||
|
||||
fprintf(file,
|
||||
"<div id='"SECTION".%d' style='margin-bottom: 1cm;'>\n"
|
||||
"<div id='%.*s' style='margin-bottom: 1cm;'>\n"
|
||||
" <h4>§"SECTION".%d: %.*s</h4>\n"
|
||||
" <div style='"CODE_STYLE" margin-top: 3mm; margin-bottom: 3mm; font-size: .95em;'>",
|
||||
i, i,
|
||||
name.size, name.str, i,
|
||||
name.size, name.str
|
||||
);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
105
win32_4ed.cpp
105
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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
Loading…
Reference in New Issue