/* 4coder_project_commands.h - type header paired with 4coder_project_commands.cpp */ // TOP #if !defined(FCODER_PROJECT_COMMANDS_H) #define FCODER_PROJECT_COMMANDS_H //////////////////////////////// // NOTE(allen): Match Pattern Types struct Prj_Pattern{ String8List absolutes; }; struct Prj_Pattern_Node{ Prj_Pattern_Node *next; Prj_Pattern pattern; }; struct Prj_Pattern_List{ Prj_Pattern_Node *first; Prj_Pattern_Node *last; i32 count; }; typedef u32 Prj_Open_File_Flags; enum{ PrjOpenFileFlag_Recursive = 1, }; /////////////////////////////// // NOTE(allen): Project Files struct Prj_Setup_Status{ b32 bat_exists; b32 sh_exists; b32 project_exists; b32 everything_exists; }; struct Prj_Key_Strings{ b32 success; String8 script_file; String8 code_file; String8 output_dir; String8 binary_file; }; typedef u32 Prj_Setup_Script_Flags; enum{ PrjSetupScriptFlag_Project = 0x1, PrjSetupScriptFlag_Bat = 0x2, PrjSetupScriptFlag_Sh = 0x4, }; //////////////////////////////// // NOTE(allen): File Pattern Operators function Prj_Pattern_List prj_pattern_list_from_extension_array(Arena *arena, String8Array list); function Prj_Pattern_List prj_pattern_list_from_var(Arena *arena, Variable_Handle var); function Prj_Pattern_List prj_get_standard_blacklist(Arena *arena); function b32 prj_match_in_pattern_list(String8 string, Prj_Pattern_List list); function void prj_close_files_with_ext(Application_Links *app, String8Array extension_array); function void prj_open_files_pattern_filter(Application_Links *app, String8 dir, Prj_Pattern_List whitelist, Prj_Pattern_List blacklist, Prj_Open_File_Flags flags); function void prj_open_all_files_with_ext_in_hot(Application_Links *app, String8Array array, Prj_Open_File_Flags flags); //////////////////////////////// // NOTE(allen): Project Files function void prj_stringize_project(Application_Links *app, Arena *arena, Variable_Handle project, String8List *out); function Prj_Setup_Status prj_file_is_setup(Application_Links *app, String8 script_path, String8 script_file); function b32 prj_generate_bat(Arena *scratch, String8 opts, String8 compiler, String8 script_path, String8 script_file, String8 code_file, String8 output_dir, String8 binary_file); function b32 prj_generate_sh(Arena *scratch, String8 opts, String8 compiler, String8 script_path, String8 script_file, String8 code_file, String8 output_dir, String8 binary_file); function b32 prj_generate_project(Arena *scratch, String8 script_path, String8 script_file, String8 output_dir, String8 binary_file); function void prj_setup_scripts(Application_Links *app, Prj_Setup_Script_Flags flags); //////////////////////////////// // NOTE(allen): Project Operations function void prj_exec_command(Application_Links *app, Variable_Handle cmd_var); function Variable_Handle prj_command_from_name(Application_Links *app, String8 cmd_name); function void prj_exec_command_name(Application_Links *app, String8 cmd_name); function void prj_exec_command_fkey_index(Application_Links *app, i32 fkey_index); function String8 prj_full_file_path_from_project(Arena *arena, Variable_Handle project); function String8 prj_path_from_project(Arena *arena, Variable_Handle project); function Variable_Handle prj_cmd_from_user(Application_Links *app, Variable_Handle prj_var, String8 query); #endif // BOTTOM