fixed initial file loading name issue; wrapped lexer string.h in include guard
This commit is contained in:
parent
ac8ef58e95
commit
3970f1f338
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
|||
#define EXEC_COMMAND_SIG(n) bool32 n(Application_Links *app, Command_ID command_id)
|
||||
#define EXEC_SYSTEM_COMMAND_SIG(n) bool32 n(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int32_t path_len, char *command, int32_t command_len, Command_Line_Input_Flag flags)
|
||||
#define EXEC_SYSTEM_COMMAND_SIG(n) bool32 n(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int32_t path_len, char *command, int32_t command_len, Command_Line_Interface_Flag flags)
|
||||
#define CLIPBOARD_POST_SIG(n) void n(Application_Links *app, int32_t clipboard_id, char *str, int32_t len)
|
||||
#define CLIPBOARD_COUNT_SIG(n) int32_t n(Application_Links *app, int32_t clipboard_id)
|
||||
#define CLIPBOARD_INDEX_SIG(n) int32_t n(Application_Links *app, int32_t clipboard_id, int32_t item_index, char *out, int32_t len)
|
||||
|
|
|
@ -364,11 +364,10 @@ buffer_seek_string_forward(Application_Links *app, Buffer_Summary *buffer,
|
|||
read_str.size = size;
|
||||
|
||||
char chunk[1024];
|
||||
int32_t chunk_size = sizeof(chunk);
|
||||
Stream_Chunk stream = {0};
|
||||
stream.max_end = end;
|
||||
|
||||
if (init_stream_chunk(&stream, app, buffer, pos, chunk, chunk_size)){
|
||||
if (init_stream_chunk(&stream, app, buffer, pos, chunk, sizeof(chunk))){
|
||||
int32_t still_looping = 1;
|
||||
do{
|
||||
for(; pos < stream.end; ++pos){
|
||||
|
@ -419,11 +418,10 @@ buffer_seek_string_backward(Application_Links *app, Buffer_Summary *buffer,
|
|||
read_str.size = size;
|
||||
|
||||
char chunk[1024];
|
||||
int32_t chunk_size = sizeof(chunk);
|
||||
Stream_Chunk stream = {0};
|
||||
stream.min_start = min;
|
||||
|
||||
if (init_stream_chunk(&stream, app, buffer, pos, chunk, chunk_size)){
|
||||
if (init_stream_chunk(&stream, app, buffer, pos, chunk, sizeof(chunk))){
|
||||
int32_t still_looping = 1;
|
||||
do{
|
||||
for(; pos >= stream.start; --pos){
|
||||
|
|
|
@ -201,7 +201,7 @@ access call. An access call is usually one the returns a summary struct. If a
|
|||
4coder object has a particular protection flag set and the corresponding bit is
|
||||
not set in the access field, that 4coder object is hidden. On the other hand if
|
||||
a protection flag is set in the access parameter and the object does not have
|
||||
that protection flag, the object is still returned from the access call.) TODO */
|
||||
that protection flag, the object is still returned from the access call.) */
|
||||
ENUM(uint32_t, Access_Flag){
|
||||
/* DOC(AccessOpen does not include any bits, it indicates that the access should
|
||||
only return objects that have no protection flags set.) */
|
||||
|
@ -218,6 +218,23 @@ ENUM(uint32_t, Access_Flag){
|
|||
AccessAll = 0xFF
|
||||
};
|
||||
|
||||
/* DOC(A Dirty_State value describes whether changes have been made to a buffer
|
||||
or to an underlying file since the last sync time between the two. Saving a buffer
|
||||
to it's file or loading the buffer from the file both act as sync points.) */
|
||||
ENUM(uint32_t, Dirty_State){
|
||||
/* DOC(DirtyState_UpToDate indicates that there are no unsaved changes and
|
||||
the underlying system file still agrees with the buffer's state.) */
|
||||
DirtyState_UpToDate,
|
||||
|
||||
/* DOC(DirtyState_UnsavedChanges indicates that there have been changes in the
|
||||
buffer since the last sync point.) */
|
||||
DirtyState_UnsavedChanges,
|
||||
|
||||
/* DOC(DirtyState_UnsavedChanges indicates that the underlying file has been
|
||||
edited since the last sync point with the buffer.) */
|
||||
DirtyState_UnloadedChanges
|
||||
};
|
||||
|
||||
/* DOC(A Seek_Boundary_Flag field specifies a set of "boundary" types used in seeks for the
|
||||
beginning or end of different types of words.) */
|
||||
ENUM(uint32_t, Seek_Boundary_Flag){
|
||||
|
@ -227,8 +244,8 @@ ENUM(uint32_t, Seek_Boundary_Flag){
|
|||
BoundaryCamelCase = 0x8
|
||||
};
|
||||
|
||||
/* DOC(A Command_Line_Input_Flag field specifies the behavior of a call to a command line interface.) */
|
||||
ENUM(uint32_t, Command_Line_Input_Flag){
|
||||
/* DOC(A Command_Line_Interface_Flag field specifies the behavior of a call to a command line interface.) */
|
||||
ENUM(uint32_t, Command_Line_Interface_Flag){
|
||||
/* DOC(If CLI_OverlapWithConflict is set if output buffer of the new command is already
|
||||
in use by another command which is still executing, the older command relinquishes control
|
||||
of the buffer and both operate simultaneously with only the newer command outputting to
|
||||
|
@ -561,7 +578,8 @@ struct Buffer_Edit{
|
|||
};
|
||||
|
||||
/* DOC(Buffer_Summary acts as a handle to a buffer and describes the state of the buffer.)
|
||||
DOC_SEE(Access_Flag) */
|
||||
DOC_SEE(Access_Flag)
|
||||
DOC_SEE(Dirty_State) */
|
||||
struct Buffer_Summary{
|
||||
/* DOC(
|
||||
This field indicates whether the Buffer_Summary describes a buffer that is open in 4coder.
|
||||
|
@ -595,6 +613,9 @@ struct Buffer_Summary{
|
|||
/* DOC(This field specifies the length of the buffer_name string.) */
|
||||
int32_t buffer_name_len;
|
||||
|
||||
/* DOC(This field indicates the dirty state of the buffer.) */
|
||||
Dirty_State dirty;
|
||||
|
||||
/* DOC(If this is not a null summary, this field indicates whether the buffer is set to lex tokens.) */
|
||||
bool32 is_lexed;
|
||||
/* DOC(If this is not a null summary, this field indicates whether the buffer has up to date tokens available.
|
||||
|
|
|
@ -15,7 +15,9 @@
|
|||
#define FCPP_INTERNAL FCPP_LINK
|
||||
|
||||
#include <stdint.h>
|
||||
#define FSTRING_IMPLEMENTATION
|
||||
#if !defined(FSTRING_GUARD)
|
||||
# define FSTRING_IMPLEMENTATION
|
||||
#endif
|
||||
#include "4coder_string.h"
|
||||
#include "4cpp_lexer_types.h"
|
||||
#include "4cpp_lexer_tables.c"
|
||||
|
|
15
4ed.cpp
15
4ed.cpp
|
@ -1989,13 +1989,20 @@ App_Step_Sig(app_step){
|
|||
models->hooks[hook_start](&models->app_links);
|
||||
}
|
||||
|
||||
char space[512];
|
||||
String cl_filename = make_fixed_width_string(space);
|
||||
copy_ss(&cl_filename, models->hot_directory.string);
|
||||
|
||||
i32 cl_filename_len = cl_filename.size;
|
||||
|
||||
i32 i = 0;
|
||||
Panel *panel = models->layout.used_sentinel.next;
|
||||
for (; i < models->settings.init_files_count; ++i, panel = panel->next){
|
||||
String filename = make_string_slowly(models->settings.init_files[i]);
|
||||
cl_filename.size = cl_filename_len;
|
||||
append_sc(&cl_filename, models->settings.init_files[i]);
|
||||
|
||||
if (i < models->layout.panel_count){
|
||||
view_open_file(system, models, panel->view, filename);
|
||||
view_open_file(system, models, panel->view, cl_filename);
|
||||
view_show_file(panel->view);
|
||||
Assert("Earlier" && panel->view->file_data.file != 0);
|
||||
#if 0
|
||||
|
@ -2009,14 +2016,14 @@ App_Step_Sig(app_step){
|
|||
#endif
|
||||
}
|
||||
else{
|
||||
view_open_file(system, models, 0, filename);
|
||||
view_open_file(system, models, 0, cl_filename);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (i < models->layout.panel_count){
|
||||
view_set_file(panel->view, models->message_buffer, models);
|
||||
view_show_file(panel->view);
|
||||
|
||||
++i;
|
||||
panel = panel->next;
|
||||
}
|
||||
|
|
|
@ -31,6 +31,8 @@ fill_buffer_summary(Buffer_Summary *buffer, Editing_File *file, Working_Set *wor
|
|||
buffer->file_name = file->name.source_path.str;
|
||||
buffer->buffer_name = file->name.live_name.str;
|
||||
|
||||
buffer->dirty = file->state.dirty;
|
||||
|
||||
buffer->is_lexed = file->settings.tokens_exist;
|
||||
|
||||
if (file->state.token_array.tokens &&
|
||||
|
@ -180,9 +182,9 @@ DOC_SEE(Command_ID)
|
|||
return(result);
|
||||
}
|
||||
|
||||
// TODO(allen): This is a bit of a mess and needs to be fixed soon
|
||||
// TODO(allen): This is a bit of a mess and needs to be fixed soon.
|
||||
API_EXPORT bool32
|
||||
Exec_System_Command(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int32_t path_len, char *command, int32_t command_len, Command_Line_Input_Flag flags)/*
|
||||
Exec_System_Command(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int32_t path_len, char *command, int32_t command_len, Command_Line_Interface_Flag flags)/*
|
||||
DOC_PARAM(view, If the view parameter is non-null it specifies a view to display the command's output buffer.)
|
||||
DOC_PARAM(buffer, The buffer the command will output to is specified by the buffer parameter.
|
||||
See Buffer_Identifier for information on how this type specifies a buffer.)
|
||||
|
|
29
4ed_file.cpp
29
4ed_file.cpp
|
@ -100,12 +100,6 @@ struct Undo_Data{
|
|||
b32 current_block_normal;
|
||||
};
|
||||
|
||||
enum File_Sync_State{
|
||||
SYNC_GOOD,
|
||||
SYNC_BEHIND_OS,
|
||||
SYNC_UNSAVED
|
||||
};
|
||||
|
||||
struct Text_Effect{
|
||||
i32 start, end;
|
||||
u32 color;
|
||||
|
@ -143,7 +137,7 @@ struct Editing_File_State{
|
|||
|
||||
Text_Effect paste_effect;
|
||||
|
||||
File_Sync_State sync;
|
||||
Dirty_State dirty;
|
||||
u32 ignore_behind_os;
|
||||
|
||||
File_Edit_Positions edit_pos_space[16];
|
||||
|
@ -671,6 +665,7 @@ touch_file(Working_Set *working_set, Editing_File *file){
|
|||
struct Hot_Directory{
|
||||
String string;
|
||||
File_List file_list;
|
||||
// TODO(allen): eliminate slash
|
||||
char slash;
|
||||
};
|
||||
|
||||
|
@ -765,7 +760,7 @@ inline b32
|
|||
buffer_needs_save(Editing_File *file){
|
||||
b32 result = 0;
|
||||
if (!file->settings.unimportant){
|
||||
if (file->state.sync == SYNC_UNSAVED){
|
||||
if (file->state.dirty == DirtyState_UnsavedChanges){
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
|
@ -776,8 +771,8 @@ inline b32
|
|||
buffer_can_save(Editing_File *file){
|
||||
b32 result = 0;
|
||||
if (!file->settings.unimportant){
|
||||
if (file->state.sync == SYNC_UNSAVED ||
|
||||
file->state.sync == SYNC_BEHIND_OS){
|
||||
if (file->state.dirty == DirtyState_UnsavedChanges ||
|
||||
file->state.dirty == DirtyState_UnloadedChanges){
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
|
@ -814,26 +809,26 @@ file_set_to_loading(Editing_File *file){
|
|||
|
||||
inline void
|
||||
file_mark_clean(Editing_File *file){
|
||||
if (file->state.sync != SYNC_BEHIND_OS){
|
||||
file->state.sync = SYNC_GOOD;
|
||||
if (file->state.dirty != DirtyState_UnloadedChanges){
|
||||
file->state.dirty = DirtyState_UpToDate;
|
||||
}
|
||||
}
|
||||
|
||||
inline void
|
||||
file_mark_dirty(Editing_File *file){
|
||||
if (file->state.sync != SYNC_BEHIND_OS){
|
||||
file->state.sync = SYNC_UNSAVED;
|
||||
if (file->state.dirty != DirtyState_UnloadedChanges){
|
||||
file->state.dirty = DirtyState_UnsavedChanges;
|
||||
}
|
||||
}
|
||||
|
||||
inline void
|
||||
file_mark_behind_os(Editing_File *file){
|
||||
file->state.sync = SYNC_BEHIND_OS;
|
||||
file->state.dirty = DirtyState_UnloadedChanges;
|
||||
}
|
||||
|
||||
inline File_Sync_State
|
||||
inline Dirty_State
|
||||
file_get_sync(Editing_File *file){
|
||||
return (file->state.sync);
|
||||
return (file->state.dirty);
|
||||
}
|
||||
|
||||
internal void
|
||||
|
|
|
@ -782,7 +782,7 @@ starts_new_line(u8 character){
|
|||
|
||||
inline void
|
||||
file_synchronize_times(System_Functions *system, Editing_File *file){
|
||||
file->state.sync = SYNC_GOOD;
|
||||
file->state.dirty = DirtyState_UpToDate;
|
||||
}
|
||||
|
||||
internal b32
|
||||
|
@ -3217,9 +3217,9 @@ get_exhaustive_info(System_Functions *system, Working_Set *working_set, Exhausti
|
|||
result.message = null_string;
|
||||
if (result.is_loaded){
|
||||
switch (file_get_sync(file)){
|
||||
case SYNC_GOOD: result.message = message_loaded; break;
|
||||
case SYNC_BEHIND_OS: result.message = message_unsynced; break;
|
||||
case SYNC_UNSAVED: result.message = message_unsaved; break;
|
||||
case DirtyState_UpToDate: result.message = message_loaded; break;
|
||||
case DirtyState_UnsavedChanges: result.message = message_unsaved; break;
|
||||
case DirtyState_UnloadedChanges: result.message = message_unsynced; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4037,8 +4037,8 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
|
|||
message = null_string;
|
||||
if (!file->settings.unimportant){
|
||||
switch (file_get_sync(file)){
|
||||
case SYNC_BEHIND_OS: message = message_unsynced; break;
|
||||
case SYNC_UNSAVED: message = message_unsaved; break;
|
||||
case DirtyState_UnloadedChanges: message = message_unsynced; break;
|
||||
case DirtyState_UnsavedChanges: message = message_unsaved; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4058,8 +4058,8 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
|
|||
message = null_string;
|
||||
if (!file->settings.unimportant){
|
||||
switch (file_get_sync(file)){
|
||||
case SYNC_BEHIND_OS: message = message_unsynced; break;
|
||||
case SYNC_UNSAVED: message = message_unsaved; break;
|
||||
case DirtyState_UnloadedChanges: message = message_unsynced; break;
|
||||
case DirtyState_UnsavedChanges: message = message_unsaved; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5132,13 +5132,13 @@ draw_file_bar(Render_Target *target, View *view, Editing_File *file, i32_Rect re
|
|||
|
||||
if (!file->settings.unimportant){
|
||||
switch (file_get_sync(file)){
|
||||
case SYNC_BEHIND_OS:
|
||||
case DirtyState_UnloadedChanges:
|
||||
{
|
||||
persist String out_of_sync = make_lit_string(" !");
|
||||
intbar_draw_string(target, &bar, out_of_sync, pop2_color);
|
||||
}break;
|
||||
|
||||
case SYNC_UNSAVED:
|
||||
case DirtyState_UnsavedChanges:
|
||||
{
|
||||
persist String out_of_sync = make_lit_string(" *");
|
||||
intbar_draw_string(target, &bar, out_of_sync, pop2_color);
|
||||
|
|
8
TODO.txt
8
TODO.txt
|
@ -41,7 +41,7 @@
|
|||
; [X] switch to file "4ed.cpp" with "win32_4ed.cpp" open
|
||||
; [X] inserting new line at top of file ~ scrolling jump when window is unaligned
|
||||
; [X] saving/killing *compilation* doesn't work
|
||||
; [X] line wrapping also doesn't work
|
||||
; [X] line wrapping also doesn't work
|
||||
; [X] save as corruptitates the filename
|
||||
; [X] crash when leaving maximized mode and view get's weird
|
||||
; [X] decrease scroll speed on short windows
|
||||
|
@ -87,7 +87,6 @@
|
|||
|
||||
; BEFORE I SHIP
|
||||
;
|
||||
; [X] why are command line files not loading any more?
|
||||
; [X] tokens in the custom API
|
||||
; [X] token seeking on custom side
|
||||
; [X] auto indent on the custom side
|
||||
|
@ -95,10 +94,7 @@
|
|||
; [] inserting lines at end of block comment
|
||||
; [] clean up and comment the auto indent code to allow for customizations
|
||||
; [] more built in options for auto indenting
|
||||
; [] expose dirty flags
|
||||
; [] occasionally missing the (!) mark on files on windows
|
||||
; [] scroll down on compilation buffer durring compilation
|
||||
;
|
||||
;
|
||||
|
||||
; TODOS
|
||||
|
@ -143,6 +139,8 @@
|
|||
; [X] file out of sync
|
||||
; [X] mouse down/up distinction
|
||||
; [X] case insensitive interactive switch buffer
|
||||
; [X] expose dirty flags
|
||||
; [X] why are command line files not loading any more?
|
||||
|
||||
;
|
||||
; [] binary buffers
|
||||
|
|
|
@ -904,7 +904,7 @@ win32_init_drive_strings(Drive_Strings *dstrings){
|
|||
// for the ability to handle them very quickly when nothing strange is
|
||||
// going on.
|
||||
internal int32_t
|
||||
win32_canonical_ansi_name(Drive_Strings *dstrings, char *src, i32 len, char *dst, i32 max){
|
||||
win32_canonical_ascii_name(Drive_Strings *dstrings, char *src, i32 len, char *dst, i32 max){
|
||||
char *wrt = dst;
|
||||
char *wrt_stop = dst + max;
|
||||
char *src_stop = src + len;
|
||||
|
@ -978,7 +978,7 @@ win32_canonical_ansi_name(Drive_Strings *dstrings, char *src, i32 len, char *dst
|
|||
|
||||
internal
|
||||
Sys_Get_Canonical_Sig(system_get_canonical){
|
||||
i32 result = win32_canonical_ansi_name(&win32vars.dstrings, filename, len, buffer, max);
|
||||
i32 result = win32_canonical_ascii_name(&win32vars.dstrings, filename, len, buffer, max);
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue