Merged in chr-fix-linux (pull request #3)
4coder build scripts working on Linux x64 Approved-by: Allen Webster <editor@4coder.net>master
commit
0e9fcaee05
|
@ -373,8 +373,8 @@ buffer_chunks_clamp(List_String_Const_u8 *chunks, Interval_i64 range){
|
|||
next = node->next;
|
||||
Interval_i64 node_range = Ii64(p, p + node->string.size);
|
||||
if (range_overlap(range, node_range)){
|
||||
i64 first = max(node_range.first, range.first) - node_range.first;
|
||||
i64 one_past_last = min(node_range.one_past_last, range.one_past_last) - node_range.first;
|
||||
i64 first = Max(node_range.first, range.first) - node_range.first;
|
||||
i64 one_past_last = Min(node_range.one_past_last, range.one_past_last) - node_range.first;
|
||||
String_Const_u8 s = string_prefix(node->string, one_past_last);
|
||||
node->string = string_skip(s, first);
|
||||
sll_queue_push(list.first, list.last, node);
|
||||
|
|
|
@ -453,15 +453,15 @@ edit_batch(Thread_Context *tctx, Models *models, Editing_File *file,
|
|||
String_Const_u8 insert_string = edit->edit.text;
|
||||
|
||||
Range_i64 edit_range = edit->edit.range;
|
||||
old_range.min = min(old_range.min, edit_range.min);
|
||||
old_range.max = max(old_range.max, edit_range.max);
|
||||
old_range.min = Min(old_range.min, edit_range.min);
|
||||
old_range.max = Max(old_range.max, edit_range.max);
|
||||
|
||||
edit_range.first += shift;
|
||||
edit_range.one_past_last += shift;
|
||||
|
||||
new_range.min = min(new_range.min, edit_range.min);
|
||||
new_range.min = Min(new_range.min, edit_range.min);
|
||||
i64 new_max = (i64)(edit_range.min + insert_string.size);
|
||||
new_range.max = max(new_range.max, new_max);
|
||||
new_range.max = Max(new_range.max, new_max);
|
||||
|
||||
i64 size = buffer_size(buffer);
|
||||
if (0 <= edit_range.first &&
|
||||
|
|
|
@ -331,7 +331,7 @@ ft__font_make_face(Arena *arena, Face_Description *description, f32 scale_factor
|
|||
met->hex_digit_advance =
|
||||
font_get_max_glyph_advance_range(advance_map, met, 'A', 'F');
|
||||
met->hex_digit_advance =
|
||||
max(met->hex_digit_advance, met->decimal_digit_advance);
|
||||
Max(met->hex_digit_advance, met->decimal_digit_advance);
|
||||
met->byte_sub_advances[0] =
|
||||
font_get_glyph_advance(advance_map, met, '\\');
|
||||
met->byte_sub_advances[1] = met->hex_digit_advance;
|
||||
|
|
|
@ -158,7 +158,7 @@ draw_rectangle_outline(Render_Target *target, Rect_f32 rect, f32 roundness, f32
|
|||
internal void
|
||||
draw_rectangle(Render_Target *target, Rect_f32 rect, f32 roundness, u32 color){
|
||||
Vec2_f32 dim = rect_dim(rect);
|
||||
draw_rectangle_outline(target, rect, roundness, max(dim.x, dim.y), color);
|
||||
draw_rectangle_outline(target, rect, roundness, Max(dim.x, dim.y), color);
|
||||
}
|
||||
|
||||
internal void
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
function void
|
||||
search_list_add_path__inner(Arena *arena, Path_Search_List *list, String_Const_u8 path){
|
||||
string_list_push(arena, &list->list, path);
|
||||
list->max_member_length = max(list->max_member_length, path.size);
|
||||
list->max_member_length = Max(list->max_member_length, path.size);
|
||||
}
|
||||
|
||||
function void
|
||||
|
|
|
@ -84,6 +84,11 @@ find_all_matches_forward(Arena *arena, i32 maximum_output_count,
|
|||
|
||||
i32 jump_back_code = 0;
|
||||
|
||||
u8 c = 0;
|
||||
u64 n = 0;
|
||||
u8 needle_c = 0;
|
||||
u64 jump = 0;
|
||||
|
||||
if (false){
|
||||
iterate_forward:
|
||||
i += 1;
|
||||
|
@ -107,9 +112,9 @@ find_all_matches_forward(Arena *arena, i32 maximum_output_count,
|
|||
}
|
||||
|
||||
for (;node != 0;){
|
||||
u8 c = node->string.str[chunk_pos];
|
||||
u64 n = i - j;
|
||||
u8 needle_c = needle.str[n];
|
||||
c = node->string.str[chunk_pos];
|
||||
n = i - j;
|
||||
needle_c = needle.str[n];
|
||||
if (character_to_upper(c) == character_to_upper(needle_c)){
|
||||
if (c != needle_c){
|
||||
last_insensitive = i;
|
||||
|
@ -145,14 +150,14 @@ find_all_matches_forward(Arena *arena, i32 maximum_output_count,
|
|||
if (list.count >= maximum_output_count){
|
||||
break;
|
||||
}
|
||||
u64 jump = jump_table.vals[n + 1];
|
||||
jump = jump_table.vals[n + 1];
|
||||
current_l = character_predicate_check_character(*predicate, needle.str[jump - 1]);
|
||||
j += jump;
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
u64 jump = jump_table.vals[n];
|
||||
jump = jump_table.vals[n];
|
||||
if (jump == 0){
|
||||
current_l = character_predicate_check_character(*predicate, c);
|
||||
|
||||
|
@ -197,6 +202,11 @@ find_all_matches_backward(Arena *arena, i32 maximum_output_count,
|
|||
|
||||
i32 jump_back_code = 0;
|
||||
|
||||
u8 c = 0;
|
||||
u64 n = 0;
|
||||
u8 needle_c = 0;
|
||||
u64 jump = 0;
|
||||
|
||||
if (false){
|
||||
iterate_backward:
|
||||
i -= 1;
|
||||
|
@ -222,9 +232,9 @@ find_all_matches_backward(Arena *arena, i32 maximum_output_count,
|
|||
}
|
||||
|
||||
for (;node != 0;){
|
||||
u8 c = node->string.str[chunk_pos];
|
||||
u64 n = j - i;
|
||||
u8 needle_c = needle.str[needle.size - 1 - n];
|
||||
c = node->string.str[chunk_pos];
|
||||
n = j - i;
|
||||
needle_c = needle.str[needle.size - 1 - n];
|
||||
if (character_to_upper(c) == character_to_upper(needle_c)){
|
||||
if (c != needle_c){
|
||||
last_insensitive = i;
|
||||
|
@ -260,7 +270,7 @@ find_all_matches_backward(Arena *arena, i32 maximum_output_count,
|
|||
if (list.count >= maximum_output_count){
|
||||
break;
|
||||
}
|
||||
u64 jump = jump_table.vals[n + 1];
|
||||
jump = jump_table.vals[n + 1];
|
||||
u64 m = needle.size - jump;
|
||||
u8 needle_m = needle.str[m];
|
||||
current_r = character_predicate_check_character(*predicate, needle_m);
|
||||
|
@ -269,7 +279,7 @@ find_all_matches_backward(Arena *arena, i32 maximum_output_count,
|
|||
|
||||
}
|
||||
else{
|
||||
u64 jump = jump_table.vals[n];
|
||||
jump = jump_table.vals[n];
|
||||
if (jump == 0){
|
||||
current_r = character_predicate_check_character(*predicate, c);
|
||||
|
||||
|
|
|
@ -321,7 +321,7 @@ FOREIGN "/x86/libfreetype-mac.a"
|
|||
#endif
|
||||
|
||||
internal void
|
||||
build(Partition *part, u32 flags, u32 arch, char *code_path, char **code_files, char *out_path, char *out_file, char **defines, char **exports, char **inc_folders){
|
||||
build(Arena *arena, u32 flags, u32 arch, char *code_path, char **code_files, char *out_path, char *out_file, char **defines, char **exports, char **inc_folders){
|
||||
Build_Line line;
|
||||
fm_init_build_line(&line);
|
||||
|
||||
|
@ -334,7 +334,7 @@ build(Partition *part, u32 flags, u32 arch, char *code_path, char **code_files,
|
|||
fm_add_to_line(line, "-m32");
|
||||
fm_add_to_line(line, "-DFTECH_32_BIT"); break;
|
||||
|
||||
default: InvalidCodePath;
|
||||
default: InvalidPath;
|
||||
}
|
||||
|
||||
if (flags & OPTS){
|
||||
|
@ -344,7 +344,7 @@ build(Partition *part, u32 flags, u32 arch, char *code_path, char **code_files,
|
|||
fm_add_to_line(line, "-I%s", code_path);
|
||||
if (inc_folders != 0){
|
||||
for (u32 i = 0; inc_folders[i] != 0; ++i){
|
||||
char *str = fm_str(part, code_path, "/", inc_folders[i]);
|
||||
char *str = fm_str(arena, code_path, "/", inc_folders[i]);
|
||||
fm_add_to_line(line, "-I%s", str);
|
||||
}
|
||||
}
|
||||
|
@ -363,7 +363,7 @@ build(Partition *part, u32 flags, u32 arch, char *code_path, char **code_files,
|
|||
|
||||
if (defines != 0){
|
||||
for (u32 i = 0; defines[i]; ++i){
|
||||
char *define_flag = fm_str(part, "-D", defines[i]);
|
||||
char *define_flag = fm_str(arena, "-D", defines[i]);
|
||||
fm_add_to_line(line, "%s", define_flag);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,24 +1,20 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Store the real CWD
|
||||
REAL_PWD="$PWD"
|
||||
# If any command errors, stop the script
|
||||
set -e
|
||||
|
||||
# Find the code home folder
|
||||
TARGET_FILE="$0"
|
||||
cd `dirname $TARGET_FILE`
|
||||
TARGET_FILE=`basename $TARGET_FILE`
|
||||
while [ -L "$TARGET_FILE" ]
|
||||
do
|
||||
TARGET_FILE=`readlink $TARGET_FILE`
|
||||
cd `dirname $TARGET_FILE`
|
||||
TARGET_FILE=`basename $TARGET_FILE`
|
||||
done
|
||||
PHYS_DIR=`pwd -P`
|
||||
SCRIPT_FILE=$PHYS_DIR/$TARGET_FILE
|
||||
CODE_HOME=$(dirname "$SCRIPT_FILE")
|
||||
|
||||
# Restore the PWD
|
||||
cd "$REAL_PWD"
|
||||
# Set up directories (mirrors build.bat)
|
||||
ME="$(readlink -f "$0")"
|
||||
LOCATION="$(dirname "$ME")"
|
||||
SRC_ROOT="$(dirname "$LOCATION")"
|
||||
PROJECT_ROOT="$(dirname "$SRC_ROOT")"
|
||||
if [ ! -d "$PROJECT_ROOT/build" ]; then
|
||||
mkdir "$PROJECT_ROOT/build"
|
||||
fi
|
||||
BUILD_ROOT="$PROJECT_ROOT/build"
|
||||
BIN_ROOT="$SRC_ROOT/bin"
|
||||
CUSTOM_ROOT="$SRC_ROOT/custom"
|
||||
CUSTOM_BIN="$CUSTOM_ROOT/bin"
|
||||
|
||||
# Get the build mode
|
||||
BUILD_MODE="$1"
|
||||
|
@ -27,20 +23,20 @@ if [ -z "$BUILD_MODE" ]; then
|
|||
fi
|
||||
|
||||
# Get the OS specific flags
|
||||
chmod 777 detect_os.sh
|
||||
os=$("./detect_os.sh")
|
||||
chmod +rx "$BIN_ROOT/detect_os.sh"
|
||||
os=$("$BIN_ROOT/detect_os.sh")
|
||||
|
||||
if [[ "$os" == "linux" ]]; then
|
||||
WARNINGS="-Wno-write-strings -Wno-comment "
|
||||
WARNINGS="-Wno-write-strings -Wno-comment"
|
||||
elif [[ "$os" == "mac" ]]; then
|
||||
WARNINGS="-Wno-write-strings -Wno-comment -Wno-logical-op-parentheses -Wno-null-dereference -Wno-switch"
|
||||
fi
|
||||
|
||||
FLAGS="-D_GNU_SOURCE -fPIC -fpermissive $BUILD_MODE"
|
||||
INCLUDES="-I$SRC_ROOT -I$CUSTOM_ROOT"
|
||||
|
||||
# Execute
|
||||
g++ $WARNINGS $FLAGS $CODE_HOME/meta/4ed_build.cpp -g -o ../build/build
|
||||
../build/build
|
||||
|
||||
|
||||
|
||||
g++ $WARNINGS $FLAGS $INCLUDES "$BIN_ROOT/4ed_build.cpp" -g -o "$BUILD_ROOT/build"
|
||||
pushd "$SRC_ROOT"
|
||||
"$BUILD_ROOT/build"
|
||||
popd
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
os="unknown"
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
echo "mac"
|
||||
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
|
||||
echo "linux"
|
||||
fi
|
||||
|
|
@ -208,7 +208,7 @@ block_fill_ones(Data data){
|
|||
block_fill_ones(data.data, data.size);
|
||||
}
|
||||
internal void
|
||||
block_copy(void *dst, void *src, umem size){
|
||||
block_copy(void *dst, const void *src, umem size){
|
||||
u8 *d = (u8*)dst;
|
||||
u8 *s = (u8*)src;
|
||||
if (d < s){
|
||||
|
@ -1941,7 +1941,7 @@ internal Interval_i32
|
|||
range_intersect(Interval_i32 a, Interval_i32 b){
|
||||
Interval_i32 result = {};
|
||||
if (range_overlap(a, b)){
|
||||
result = Ii32(max(a.min, b.min), min(a.max, b.max));
|
||||
result = Ii32(Max(a.min, b.min), Min(a.max, b.max));
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -1949,7 +1949,7 @@ internal Interval_i64
|
|||
range_intersect(Interval_i64 a, Interval_i64 b){
|
||||
Interval_i64 result = {};
|
||||
if (range_overlap(a, b)){
|
||||
result = Ii64(max(a.min, b.min), min(a.max, b.max));
|
||||
result = Ii64(Max(a.min, b.min), Min(a.max, b.max));
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -1957,7 +1957,7 @@ internal Interval_u64
|
|||
range_intersect(Interval_u64 a, Interval_u64 b){
|
||||
Interval_u64 result = {};
|
||||
if (range_overlap(a, b)){
|
||||
result = Iu64(max(a.min, b.min), min(a.max, b.max));
|
||||
result = Iu64(Max(a.min, b.min), Min(a.max, b.max));
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -1965,26 +1965,26 @@ internal Interval_f32
|
|||
range_intersect(Interval_f32 a, Interval_f32 b){
|
||||
Interval_f32 result = {};
|
||||
if (range_overlap(a, b)){
|
||||
result = If32(max(a.min, b.min), min(a.max, b.max));
|
||||
result = If32(Max(a.min, b.min), Min(a.max, b.max));
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal Interval_i32
|
||||
range_union(Interval_i32 a, Interval_i32 b){
|
||||
return(Ii32(min(a.min, b.min), max(a.max, b.max)));
|
||||
return(Ii32(Min(a.min, b.min), Max(a.max, b.max)));
|
||||
}
|
||||
internal Interval_i64
|
||||
range_union(Interval_i64 a, Interval_i64 b){
|
||||
return(Ii64(min(a.min, b.min), max(a.max, b.max)));
|
||||
return(Ii64(Min(a.min, b.min), Max(a.max, b.max)));
|
||||
}
|
||||
internal Interval_u64
|
||||
range_union(Interval_u64 a, Interval_u64 b){
|
||||
return(Iu64(min(a.min, b.min), max(a.max, b.max)));
|
||||
return(Iu64(Min(a.min, b.min), Max(a.max, b.max)));
|
||||
}
|
||||
internal Interval_f32
|
||||
range_union(Interval_f32 a, Interval_f32 b){
|
||||
return(If32(min(a.min, b.min), max(a.max, b.max)));
|
||||
return(If32(Min(a.min, b.min), Max(a.max, b.max)));
|
||||
}
|
||||
|
||||
internal b32
|
||||
|
@ -2942,7 +2942,7 @@ SCany(String_Const_u32 str){
|
|||
#define string_expand(s) (i32)(s).size, (char*)(s).str
|
||||
|
||||
internal String_Const_char string_empty = {"", 0};
|
||||
internal String_Const_u8 string_u8_empty = {"", 0};
|
||||
internal String_Const_u8 string_u8_empty = {(u8*)"", 0};
|
||||
|
||||
#define file_name_line_number_lit_u8 string_u8_litexpr(file_name_line_number)
|
||||
|
||||
|
@ -5705,7 +5705,7 @@ string_split(Arena *arena, String_Const_char string, char *split_characters, i32
|
|||
for (i32 j = 0; j < split_character_count; j += 1){
|
||||
umem pos = string_find_first(prefix, split_characters[j]);
|
||||
prefix = string_prefix(prefix, pos);
|
||||
i = min(i, pos);
|
||||
i = Min(i, pos);
|
||||
}
|
||||
if (prefix.size > 0){
|
||||
string_list_push(arena, &list, prefix);
|
||||
|
@ -5726,7 +5726,7 @@ string_split(Arena *arena, String_Const_u8 string, u8 *split_characters, i32 spl
|
|||
for (i32 j = 0; j < split_character_count; j += 1){
|
||||
umem pos = string_find_first(prefix, split_characters[j]);
|
||||
prefix = string_prefix(prefix, pos);
|
||||
i = min(i, pos);
|
||||
i = Min(i, pos);
|
||||
}
|
||||
if (prefix.size > 0){
|
||||
string_list_push(arena, &list, prefix);
|
||||
|
@ -5747,7 +5747,7 @@ string_split(Arena *arena, String_Const_u16 string, u16 *split_characters, i32 s
|
|||
for (i32 j = 0; j < split_character_count; j += 1){
|
||||
umem pos = string_find_first(prefix, split_characters[j]);
|
||||
prefix = string_prefix(prefix, pos);
|
||||
i = min(i, pos);
|
||||
i = Min(i, pos);
|
||||
}
|
||||
if (prefix.size > 0){
|
||||
string_list_push(arena, &list, prefix);
|
||||
|
@ -5768,7 +5768,7 @@ string_split(Arena *arena, String_Const_u32 string, u32 *split_characters, i32 s
|
|||
for (i32 j = 0; j < split_character_count; j += 1){
|
||||
umem pos = string_find_first(prefix, split_characters[j]);
|
||||
prefix = string_prefix(prefix, pos);
|
||||
i = min(i, pos);
|
||||
i = Min(i, pos);
|
||||
}
|
||||
if (prefix.size > 0){
|
||||
string_list_push(arena, &list, prefix);
|
||||
|
|
|
@ -179,6 +179,10 @@ enum{
|
|||
#define stringify_(a) #a
|
||||
#define stringify(a) stringify_(a)
|
||||
|
||||
#if COMPILER_CL
|
||||
#define __VA_OPT__(x)
|
||||
#endif
|
||||
|
||||
#define function static
|
||||
#define api(x)
|
||||
|
||||
|
|
|
@ -696,6 +696,7 @@ map_set_binding_l(Mapping *mapping, Command_Map *map,
|
|||
#define ParentMap(ID) map_set_parent(m, map, (ID))
|
||||
#define BindTextInput(F) map_set_binding_text_input(map, (F))
|
||||
// TODO(allen): detect compiler and apply va args extensions correctly
|
||||
#if COMPILER_CL
|
||||
#define Bind(F, K, ...) \
|
||||
map_set_binding_l(m, map, (F), InputEventKind_KeyStroke, (K), __VA_ARGS__, 0)
|
||||
#define BindRelease(F, K, ...) \
|
||||
|
@ -710,6 +711,24 @@ map_set_binding_l(m, map, (F), InputEventKind_MouseWheel, 0, __VA_ARGS__, 0)
|
|||
map_set_binding_l(m, map, (F), InputEventKind_MouseMove, 0, __VA_ARGS__, 0)
|
||||
#define BindCore(F, K, ...) \
|
||||
map_set_binding_l(m, map, (F), InputEventKind_Core, (K), __VA_ARGS__, 0)
|
||||
#elif COMPILER_GCC
|
||||
#define Bind(F, K, ...) \
|
||||
map_set_binding_l(m, map, (F), InputEventKind_KeyStroke, (K), ##__VA_ARGS__, 0)
|
||||
#define BindRelease(F, K, ...) \
|
||||
map_set_binding_l(m, map, (F), InputEventKind_KeyRelease, (K), ##__VA_ARGS__, 0)
|
||||
#define BindMouse(F, K, ...) \
|
||||
map_set_binding_l(m, map, (F), InputEventKind_MouseButton, (K), ##__VA_ARGS__, 0)
|
||||
#define BindMouseRelease(F, K, ...) \
|
||||
map_set_binding_l(m, map, (F), InputEventKind_MouseButtonRelease, (K), ##__VA_ARGS__, 0)
|
||||
#define BindMouseWheel(F, ...) \
|
||||
map_set_binding_l(m, map, (F), InputEventKind_MouseWheel, 0, ##__VA_ARGS__, 0)
|
||||
#define BindMouseMove(F, ...) \
|
||||
map_set_binding_l(m, map, (F), InputEventKind_MouseMove, 0, ##__VA_ARGS__, 0)
|
||||
#define BindCore(F, K, ...) \
|
||||
map_set_binding_l(m, map, (F), InputEventKind_Core, (K), ##__VA_ARGS__, 0)
|
||||
#else
|
||||
#error "Unsupported compiler"
|
||||
#endif
|
||||
|
||||
// BOTTOM
|
||||
|
||||
|
|
|
@ -1484,7 +1484,7 @@ load_config_and_apply(Application_Links *app, Arena *out_arena, Config_Data *con
|
|||
print_message(app, string_u8_litexpr("Using default config:\n"));
|
||||
Face_Description description = get_face_description(app, 0);
|
||||
if (description.font.file_name.str != 0){
|
||||
umem size = min(description.font.file_name.size, sizeof(config->default_font_name_space));
|
||||
umem size = Min(description.font.file_name.size, sizeof(config->default_font_name_space));
|
||||
block_copy(config->default_font_name_space, description.font.file_name.str, size);
|
||||
config->default_font_name.size = size;
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ setup_default_mapping(Mapping *mapping){
|
|||
SelectMapping(mapping);
|
||||
|
||||
SelectMap(mapid_global);
|
||||
BindCore(default_startup , CoreCode_Startup);
|
||||
BindCore(default_startup, CoreCode_Startup);
|
||||
BindCore(default_try_exit, CoreCode_TryExit);
|
||||
Bind(keyboard_macro_start_recording , KeyCode_U, KeyCode_Control);
|
||||
Bind(keyboard_macro_finish_recording, KeyCode_U, KeyCode_Control, KeyCode_Shift);
|
||||
|
|
|
@ -567,7 +567,7 @@ get_fancy_string_height__inner(Application_Links *app, Face_ID face, Fancy_Strin
|
|||
if (string->face != 0){
|
||||
Face_ID use_face = string->face;
|
||||
Face_Metrics metrics = get_face_metrics(app, use_face);
|
||||
result = max(result, metrics.line_height);
|
||||
result = Max(result, metrics.line_height);
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
|
@ -585,7 +585,7 @@ get_fancy_string_text_height__inner(Application_Links *app, Face_ID face, Fancy_
|
|||
if (string->face != 0){
|
||||
Face_ID use_face = string->face;
|
||||
Face_Metrics metrics = get_face_metrics(app, use_face);
|
||||
result = max(result, metrics.text_height);
|
||||
result = Max(result, metrics.text_height);
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
|
@ -603,7 +603,7 @@ draw_fancy_string__inner(Application_Links *app, Face_ID face, FColor fore, Fanc
|
|||
}
|
||||
if (use_face != 0){
|
||||
Face_Metrics metrics = get_face_metrics(app, use_face);
|
||||
base_line = max(base_line, metrics.ascent);
|
||||
base_line = Max(base_line, metrics.ascent);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -767,7 +767,7 @@ get_fancy_block_width(Application_Links *app, Face_ID face, Fancy_Block *block){
|
|||
node != 0;
|
||||
node = node->next){
|
||||
f32 w = get_fancy_line_width(app, face, node);
|
||||
width = max(width, w);
|
||||
width = Max(width, w);
|
||||
}
|
||||
return(width);
|
||||
}
|
||||
|
|
|
@ -25,7 +25,10 @@ typedef TCHAR Filename_Character;
|
|||
//// WINDOWS END ////
|
||||
|
||||
#else
|
||||
# error 4coder file not defined
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
#define SLASH '/'
|
||||
typedef char Filename_Character;
|
||||
#endif
|
||||
|
||||
struct Cross_Platform_File_Info{
|
||||
|
@ -293,10 +296,12 @@ static b32
|
|||
match_pattern(Filename_Character *name, Filename_Character *pattern){
|
||||
b32 match = false;
|
||||
if (sizeof(*name) == 1){
|
||||
Absolutes absolutes = {};
|
||||
String pattern_str = make_string_slowly(pattern);
|
||||
get_absolutes(pattern_str, &absolutes, false, false);
|
||||
match = wildcard_match_c(&absolutes, name, false);
|
||||
String_Const_u8 name_str = SCu8(name);
|
||||
String_Const_u8 pattern_str = SCu8(pattern);
|
||||
List_String_Const_u8 list = {};
|
||||
Node_String_Const_u8 node = { NULL, name_str };
|
||||
string_list_push(&list, &node);
|
||||
match = string_wildcard_match(list, pattern_str, StringMatch_Exact);
|
||||
}
|
||||
else{
|
||||
fprintf(stdout, "fatal error: wide characters not supported!\n");
|
||||
|
@ -306,9 +311,9 @@ match_pattern(Filename_Character *name, Filename_Character *pattern){
|
|||
}
|
||||
|
||||
static Cross_Platform_File_List
|
||||
get_file_list(Partition *part, Filename_Character *pattern, File_Filter *filter){
|
||||
if (part == 0){
|
||||
fprintf(stdout, "fatal error: NULL part passed to %s\n", __FUNCTION__);
|
||||
get_file_list(Arena *arena, Filename_Character *pattern, File_Filter *filter){
|
||||
if (arena == 0){
|
||||
fprintf(stdout, "fatal error: NULL arena passed to %s\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
if (pattern == 0){
|
||||
|
@ -340,7 +345,7 @@ get_file_list(Partition *part, Filename_Character *pattern, File_Filter *filter)
|
|||
}
|
||||
|
||||
Filename_Character path_name[4096];
|
||||
int32_t path_length = str_size(pattern);
|
||||
int32_t path_length = cstring_length(pattern);
|
||||
if (path_length + 1 > sizeof(path_name)){
|
||||
fprintf(stdout, "fatal error: path name too long for local buffer\n");
|
||||
exit(1);
|
||||
|
@ -380,11 +385,11 @@ get_file_list(Partition *part, Filename_Character *pattern, File_Filter *filter)
|
|||
}
|
||||
|
||||
Cross_Platform_File_List list = {};
|
||||
Temp_Memory part_reset = begin_temp_memory(part);
|
||||
Temp_Memory part_reset = begin_temp(arena);
|
||||
|
||||
int32_t rounded_char_size = (character_count*sizeof(Filename_Character) + 7)&(~7);
|
||||
int32_t memsize = rounded_char_size + file_count*sizeof(Cross_Platform_File_Info);
|
||||
void *mem = push_array(part, uint8_t, memsize);
|
||||
void *mem = push_array(arena, uint8_t, memsize);
|
||||
if (mem == 0){
|
||||
fprintf(stdout, "fatal error: not enough memory on the partition for a file list.\n");
|
||||
exit(1);
|
||||
|
@ -426,7 +431,7 @@ get_file_list(Partition *part, Filename_Character *pattern, File_Filter *filter)
|
|||
if (name[0] != '.' && (is_folder || filter(name, size))){
|
||||
if (info_ptr + 1 > info_ptr_end || char_ptr + size + 1 > char_ptr_end){
|
||||
memset(&list, 0, sizeof(list));
|
||||
end_temp_memory(part_reset);
|
||||
end_temp(part_reset);
|
||||
closedir(dir_handle);
|
||||
return(list);
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ internal void fm__swap_ptr(char **A, char **B);
|
|||
#elif COMPILER_GCC
|
||||
|
||||
#define fm_add_to_line(line, str, ...) do{ \
|
||||
snprintf(line.build_options, line.build_max, "%s "str, \
|
||||
snprintf(line.build_options, line.build_max, "%s " str, \
|
||||
line.build_options_prev, ##__VA_ARGS__); \
|
||||
fm__swap_ptr(&line.build_options, &line.build_options_prev); \
|
||||
}while(0)
|
||||
|
@ -434,7 +434,7 @@ fm_popdir(Temp_Dir temp){
|
|||
chdir(temp.dir);
|
||||
}
|
||||
|
||||
internal Partition
|
||||
internal Arena
|
||||
fm_init_system(){
|
||||
return(fm__init_memory());
|
||||
}
|
||||
|
@ -486,7 +486,7 @@ internal void
|
|||
fm_slash_fix(char *path){}
|
||||
|
||||
internal void
|
||||
fm_make_folder_if_missing(Partition *part, char *dir){
|
||||
fm_make_folder_if_missing(Arena *arena, char *dir){
|
||||
systemf("mkdir -p %s", dir);
|
||||
}
|
||||
|
||||
|
@ -508,15 +508,9 @@ fm_copy_file(char *file, char *newname){
|
|||
}
|
||||
|
||||
internal void
|
||||
fm_copy_all(char *source, char *tag, char *folder){
|
||||
if (source){
|
||||
fprintf(stdout, "copy %s/%s to %s\n", source, tag, folder);
|
||||
systemf("cp -f %s/%s %s > /dev/null", source, tag, folder);
|
||||
}
|
||||
else{
|
||||
fprintf(stdout, "copy %s to %s\n", tag, folder);
|
||||
systemf("cp -f %s %s > /dev/null", tag, folder);
|
||||
}
|
||||
fm_copy_all(char *source, char *folder){
|
||||
fprintf(stdout, "copy %s to %s\n", source, folder);
|
||||
systemf("cp -rf %s %s > /dev/null", source, folder);
|
||||
}
|
||||
|
||||
internal void
|
||||
|
|
|
@ -42,7 +42,7 @@ layout_nearest_pos_to_xy(Layout_Item_List list, Vec2_f32 p){
|
|||
// NOTE(allen): One of dist0 and dist1 are negative, but certainly not both.
|
||||
// 1. Take the negative one.
|
||||
// 2. If the negative distance is larger than closest_x, then this is closer.
|
||||
f32 neg_dist = min(dist0, dist1);
|
||||
f32 neg_dist = Min(dist0, dist1);
|
||||
if (closest_x < neg_dist){
|
||||
closest_x = neg_dist;
|
||||
closest_match = item->index;
|
||||
|
|
|
@ -80,8 +80,8 @@ layout_write(Arena *arena, Layout_Item_List *list, i64 index, u32 codepoint, Lay
|
|||
}
|
||||
|
||||
list->item_count += 1;
|
||||
list->manifested_index_range.min = min(list->manifested_index_range.min, index);
|
||||
list->manifested_index_range.max = max(list->manifested_index_range.max, index);
|
||||
list->manifested_index_range.min = Min(list->manifested_index_range.min, index);
|
||||
list->manifested_index_range.max = Max(list->manifested_index_range.max, index);
|
||||
|
||||
if (!HasFlag(flags, LayoutItemFlag_Ghost_Character)){
|
||||
block->character_count += 1;
|
||||
|
@ -92,7 +92,7 @@ layout_write(Arena *arena, Layout_Item_List *list, i64 index, u32 codepoint, Lay
|
|||
item->codepoint = codepoint;
|
||||
item->flags = flags;
|
||||
item->rect = rect;
|
||||
list->height = max(list->height, rect.y1);
|
||||
list->height = Max(list->height, rect.y1);
|
||||
}
|
||||
|
||||
////
|
||||
|
|
|
@ -90,8 +90,8 @@ profile_parse_record(Arena *arena, Profile_Inspection *insp,
|
|||
slot = profile_parse_get_slot(arena, insp, location, name);
|
||||
node->time.max = record->time;
|
||||
node->closed = true;
|
||||
total_time_range->min = min(total_time_range->min, node->time.min);
|
||||
total_time_range->max = max(total_time_range->max, node->time.max);
|
||||
total_time_range->min = Min(total_time_range->min, node->time.min);
|
||||
total_time_range->max = Max(total_time_range->max, node->time.max);
|
||||
record = record->next;
|
||||
}
|
||||
else{
|
||||
|
@ -304,7 +304,7 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
|
|||
Vec2_f32 p = V2f32(x_pos, y.min + 1.f);
|
||||
draw_fancy_string(app, face_id, fcolor_zero(), fstr, p);
|
||||
f32 w = get_fancy_string_width(app, face_id, fstr);
|
||||
nav_bar_w = max(nav_bar_w, w);
|
||||
nav_bar_w = Max(nav_bar_w, w);
|
||||
}
|
||||
y.min += line_height + 2.f;
|
||||
|
||||
|
@ -315,7 +315,7 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
|
|||
Vec2_f32 p = V2f32(x_pos, y.min + 1.f);
|
||||
draw_fancy_string(app, face_id, fcolor_zero(), fstr, p);
|
||||
f32 w = get_fancy_string_width(app, face_id, fstr);
|
||||
nav_bar_w = max(nav_bar_w, w);
|
||||
nav_bar_w = Max(nav_bar_w, w);
|
||||
}
|
||||
y.min += line_height + 2.f;
|
||||
|
||||
|
|
|
@ -12,9 +12,11 @@
|
|||
|
||||
static String_Const_char
|
||||
push_stringfv(Arena *arena, char *format, va_list args){
|
||||
va_list args2;
|
||||
va_copy(args2, args);
|
||||
i32 size = vsnprintf(0, 0, format, args);
|
||||
String_Const_char result = string_const_char_push(arena, size + 1);
|
||||
vsnprintf(result.str, result.size, format, args);
|
||||
vsnprintf(result.str, result.size, format, args2);
|
||||
result.size -= 1;
|
||||
result.str[result.size] = 0;
|
||||
return(result);
|
||||
|
|
|
@ -114,7 +114,7 @@ tutorial_render(Application_Links *app, Frame_Info frame_info, View_ID view_id){
|
|||
|
||||
f32 h0 = get_fancy_line_height(app, 0, &slide.short_details);
|
||||
f32 h1 = get_fancy_line_height(app, 0, slide.long_details.first);
|
||||
f32 title_height = max(h0, h1);
|
||||
f32 title_height = Max(h0, h1);
|
||||
|
||||
////////
|
||||
|
||||
|
|
|
@ -1,51 +1,29 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Store the real CWD
|
||||
REAL_PWD="$PWD"
|
||||
# If any command errors, stop the script
|
||||
set -e
|
||||
|
||||
# Find the code home folder
|
||||
TARGET_FILE="$0"
|
||||
cd `dirname $TARGET_FILE`
|
||||
TARGET_FILE=`basename $TARGET_FILE`
|
||||
while [ -L "$TARGET_FILE" ]
|
||||
do
|
||||
TARGET_FILE=`readlink $TARGET_FILE`
|
||||
cd `dirname $TARGET_FILE`
|
||||
TARGET_FILE=`basename $TARGET_FILE`
|
||||
done
|
||||
PHYS_DIR=`pwd -P`
|
||||
SCRIPT_FILE=$PHYS_DIR/$TARGET_FILE
|
||||
code_home=$(dirname "$SCRIPT_FILE")
|
||||
# Store the real CWD
|
||||
ME="$(readlink -f "$0")"
|
||||
LOCATION="$(dirname "$ME")"
|
||||
CODE_HOME="$(dirname "$LOCATION")"
|
||||
|
||||
# Find the most reasonable candidate build file
|
||||
SOURCE="$1"
|
||||
if [ -z "$SOURCE" ]; then
|
||||
SOURCE="$code_home/4coder_default_bindings.cpp"
|
||||
SOURCE="$(readlink -f "$CODE_HOME/4coder_default_bindings.cpp")"
|
||||
fi
|
||||
|
||||
TARGET_FILE="$SOURCE"
|
||||
cd `dirname $TARGET_FILE`
|
||||
TARGET_FILE=`basename $TARGET_FILE`
|
||||
while [ -L "$TARGET_FILE" ]
|
||||
do
|
||||
TARGET_FILE=`readlink $TARGET_FILE`
|
||||
cd `dirname $TARGET_FILE`
|
||||
TARGET_FILE=`basename $TARGET_FILE`
|
||||
done
|
||||
PHYS_DIR=`pwd -P`
|
||||
SOURCE=$PHYS_DIR/$TARGET_FILE
|
||||
|
||||
opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-writable-strings -g"
|
||||
arch=-m64
|
||||
|
||||
cd "$REAL_PWD"
|
||||
preproc_file=4coder_command_metadata.i
|
||||
meta_macros="-DMETA_PASS"
|
||||
g++ -I"$code_home" $meta_macros $arch $opts $debug -std=gnu++0x "$SOURCE" -E -o $preproc_file
|
||||
g++ -I"$code_home" $opts $debug -std=gnu++0x "$code_home/4coder_metadata_generator.cpp" -o metadata_generator
|
||||
./metadata_generator -R "$code_home" "$PWD/$preproc_file"
|
||||
g++ -I"$CODE_HOME" $meta_macros $arch $opts $debug -std=gnu++0x "$SOURCE" -E -o $preproc_file
|
||||
g++ -I"$CODE_HOME" $opts $debug -std=gnu++0x "$CODE_HOME/4coder_metadata_generator.cpp" -o "$CODE_HOME/metadata_generator"
|
||||
"$CODE_HOME/metadata_generator" -R "$CODE_HOME" "$PWD/$preproc_file"
|
||||
|
||||
g++ -I"$code_home" $arch $opts $debug -std=gnu++0x "$SOURCE" -shared -o custom_4coder.so -fPIC
|
||||
g++ -I"$CODE_HOME" $arch $opts $debug -std=gnu++0x "$SOURCE" -shared -o custom_4coder.so -fPIC
|
||||
|
||||
rm metadata_generator
|
||||
rm "$CODE_HOME/metadata_generator"
|
||||
rm $preproc_file
|
||||
|
|
|
@ -112,7 +112,7 @@ out vec4 out_color;
|
|||
|
||||
float rectangle_sd(vec2 p, vec2 b){
|
||||
vec2 d = abs(p) - b;
|
||||
return(length(max(d, vec2(0.0, 0.0))) + min(max(d.x, d.y), 0.0));
|
||||
return(length(Max(d, vec2(0.0, 0.0))) + Min(max(d.x, d.y), 0.0));
|
||||
}
|
||||
|
||||
void main(void)
|
||||
|
|
Loading…
Reference in New Issue