diff --git a/4coder_project_commands.cpp b/4coder_project_commands.cpp index e4dddabb..534f3946 100644 --- a/4coder_project_commands.cpp +++ b/4coder_project_commands.cpp @@ -105,7 +105,7 @@ open_all_files_with_extension_internal(Application_Links *app, String dir, char for (uint32_t i = 0; i < list.count; ++i){ File_Info *info = list.infos + i; if (info->folder){ - if (recursive){ + if (recursive && info->filename[0] != '.'){ dir.size = dir_size; append(&dir, info->filename); append(&dir, "/"); diff --git a/platform_linux/linux_4ed.cpp b/platform_linux/linux_4ed.cpp index 4e6af221..1d6febc6 100644 --- a/platform_linux/linux_4ed.cpp +++ b/platform_linux/linux_4ed.cpp @@ -285,7 +285,7 @@ internal Linux_Coroutine* LinuxAllocCoroutine(){ Linux_Coroutine *result = linuxvars.coroutine_free; Assert(result != 0); - if(getcontext(&result->ctx) == -1){ + if (getcontext(&result->ctx) == -1){ perror("getcontext"); } result->ctx.uc_stack = result->stack; @@ -396,14 +396,14 @@ Sys_CLI_Call_Sig(system_cli_call){ dup2(pipe_fds[PIPE_FD_WRITE], STDOUT_FILENO); dup2(pipe_fds[PIPE_FD_WRITE], STDERR_FILENO); - if(chdir(path) == -1){ + if (chdir(path) == -1){ perror("system_cli_call: chdir"); exit(1); - }; + } char* argv[] = { "sh", "-c", script_name, NULL }; - if(execv("/bin/sh", argv) == -1){ + if (execv("/bin/sh", argv) == -1){ perror("system_cli_call: execv"); } exit(1); @@ -444,9 +444,9 @@ Sys_CLI_Update_Step_Sig(system_cli_update_step){ while(space_left > 0 && select(pipe_read_fd + 1, &fds, NULL, NULL, &tv) == 1){ ssize_t num = read(pipe_read_fd, ptr, space_left); - if(num == -1){ + if (num == -1){ perror("system_cli_update_step: read"); - } else if(num == 0){ + } else if (num == 0){ // NOTE(inso): EOF break; } else { @@ -465,7 +465,7 @@ Sys_CLI_End_Update_Sig(system_cli_end_update){ b32 close_me = false; int status; - if(pid && waitpid(pid, &status, WNOHANG) > 0){ + if (pid && waitpid(pid, &status, WNOHANG) > 0){ close_me = true; cli->exit = WEXITSTATUS(status); @@ -843,7 +843,7 @@ LinuxLoadAppCode(String* base_dir){ b32 result = 0; App_Get_Functions *get_funcs = 0; - if(!sysshared_to_binary_path(base_dir, "4ed_app.so")){ + if (!sysshared_to_binary_path(base_dir, "4ed_app.so")){ return 0; } @@ -852,7 +852,7 @@ LinuxLoadAppCode(String* base_dir){ get_funcs = (App_Get_Functions*) dlsym(linuxvars.app_code, "app_get_functions"); } else { - fprintf(stderr, "dlopen failed: %s\n", dlerror()); + LOGF("dlopen failed: %s\n", dlerror()); } if (get_funcs){ @@ -979,7 +979,7 @@ GLsizei length, const GLchar* message, const void* userParam ){ - fprintf(stderr, "GL DEBUG: %s\n", message); + LOGF("GL DEBUG: %s\n", message); } #endif @@ -1008,7 +1008,7 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, if (!glXCreateContextAttribsARB) { - fprintf(stderr, "glXCreateContextAttribsARB() not found, using old-style GLX context\n" ); + LOG("glXCreateContextAttribsARB() not found, using old-style GLX context\n" ); ctx = glXCreateNewContext( XDisplay, bestFbc, GLX_RGBA_TYPE, 0, True ); } else @@ -1024,13 +1024,13 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, None }; - fprintf(stderr, "Creating GL 4.3 context...\n"); + LOG("Creating GL 4.3 context...\n"); ctx = glXCreateContextAttribsARB(XDisplay, bestFbc, 0, True, context_attribs); XSync( XDisplay, False ); if (!ctxErrorOccurred && ctx) { - fprintf(stderr, "Created GL 4.3 context.\n" ); + LOG("Created GL 4.3 context.\n" ); } else { @@ -1039,14 +1039,14 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, context_attribs[1] = 3; context_attribs[3] = 2; - fprintf(stderr, "GL 4.3 unavailable, creating GL 3.2 context...\n" ); + LOG("GL 4.3 unavailable, creating GL 3.2 context...\n" ); ctx = glXCreateContextAttribsARB( XDisplay, bestFbc, 0, True, context_attribs ); XSync(XDisplay, False); if (!ctxErrorOccurred && ctx) { - fprintf(stderr, "Created GL 3.2 context.\n" ); + LOG("Created GL 3.2 context.\n" ); } else { @@ -1055,7 +1055,7 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, ctxErrorOccurred = false; - fprintf(stderr, "Failed to create GL 3.2 context, using old-style GLX context\n"); + LOG("Failed to create GL 3.2 context, using old-style GLX context\n"); ctx = glXCreateContextAttribsARB(XDisplay, bestFbc, 0, True, context_attribs); IsLegacy = true; @@ -1066,25 +1066,23 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, XSync(XDisplay, False); XSetErrorHandler(oldHandler); - if (ctxErrorOccurred || !ctx) - { - fprintf(stderr, "Failed to create an OpenGL context\n"); + if (ctxErrorOccurred || !ctx){ + LOG("Failed to create an OpenGL context\n"); exit(1); } b32 Direct; if (!glXIsDirect(XDisplay, ctx)) { - fprintf(stderr, "Indirect GLX rendering context obtained\n"); - Direct = 0; + LOG("Indirect GLX rendering context obtained\n"); + Direct = false; } - else - { - fprintf(stderr, "Direct GLX rendering context obtained\n"); - Direct = 1; + else{ + LOG("Direct GLX rendering context obtained\n"); + Direct = true; } - fprintf(stderr, "Making context current\n"); + LOG("Making context current\n"); glXMakeCurrent( XDisplay, XWindow, ctx ); char *Vendor = (char *)glGetString(GL_VENDOR); @@ -1094,58 +1092,59 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, //TODO(inso): glGetStringi is required in core profile if the GL version is >= 3.0 char *Extensions = (char *)glGetString(GL_EXTENSIONS); - fprintf(stderr, "GL_VENDOR: %s\n", Vendor); - fprintf(stderr, "GL_RENDERER: %s\n", Renderer); - fprintf(stderr, "GL_VERSION: %s\n", Version); - // fprintf(stderr, "GL_EXTENSIONS: %s\n", Extensions); + LOGF("GL_VENDOR: %s\n", Vendor); + LOGF("GL_RENDERER: %s\n", Renderer); + LOGF("GL_VERSION: %s\n", Version); //NOTE(inso): enable vsync if available. this should probably be optional - if(Direct && strstr(glxExts, "GLX_EXT_swap_control ")){ - + if (Direct && strstr(glxExts, "GLX_EXT_swap_control ")){ GLXLOAD(glXSwapIntervalEXT); - if(glXSwapIntervalEXT){ + if (glXSwapIntervalEXT){ glXSwapIntervalEXT(XDisplay, XWindow, 1); unsigned int swap_val = 0; glXQueryDrawable(XDisplay, XWindow, GLX_SWAP_INTERVAL_EXT, &swap_val); linuxvars.vsync = swap_val == 1; - fprintf(stderr, "VSync enabled? %s.\n", linuxvars.vsync ? "Yes" : "No"); + LOGF("VSync enabled? %s.\n", linuxvars.vsync ? "Yes" : "No"); } - } else if(Direct && strstr(glxExts, "GLX_MESA_swap_control ")){ + } + else if (Direct && strstr(glxExts, "GLX_MESA_swap_control ")){ GLXLOAD(glXSwapIntervalMESA); GLXLOAD(glXGetSwapIntervalMESA); - if(glXSwapIntervalMESA){ + if (glXSwapIntervalMESA){ glXSwapIntervalMESA(1); - if(glXGetSwapIntervalMESA){ + if (glXGetSwapIntervalMESA){ linuxvars.vsync = glXGetSwapIntervalMESA(); - fprintf(stderr, "VSync enabled? %s (MESA)\n", linuxvars.vsync ? "Yes" : "No"); + LOGF("VSync enabled? %s (MESA)\n", linuxvars.vsync ? "Yes" : "No"); } else { // NOTE(inso): assume it worked? linuxvars.vsync = 1; - fputs("VSync enabled? possibly (MESA)\n", stderr); + LOG("VSync enabled? possibly (MESA)\n"); } } - } else if(Direct && strstr(glxExts, "GLX_SGI_swap_control ")){ + } + else if (Direct && strstr(glxExts, "GLX_SGI_swap_control ")){ GLXLOAD(glXSwapIntervalSGI); - if(glXSwapIntervalSGI){ + if (glXSwapIntervalSGI){ glXSwapIntervalSGI(1); //NOTE(inso): The SGI one doesn't seem to have a way to confirm we got it... linuxvars.vsync = 1; - fputs("VSync enabled? hopefully (SGI)\n", stderr); + LOG("VSync enabled? hopefully (SGI)\n"); } - } else { - fputs("VSync enabled? nope, no suitable extension\n", stderr); + } + else{ + LOG("VSync enabled? nope, no suitable extension\n"); } #if FRED_INTERNAL @@ -1153,8 +1152,8 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, GLXLOAD(glDebugMessageCallback); - if(glDebugMessageCallback){ - fputs("Enabling GL Debug Callback\n", stderr); + if (glDebugMessageCallback){ + LOG("Enabling GL Debug Callback\n"); glDebugMessageCallback(&LinuxGLDebugCallback, 0); glEnable(GL_DEBUG_OUTPUT); } @@ -1178,11 +1177,11 @@ GLXCanUseFBConfig(Display *XDisplay) int GLXMajor, GLXMinor; char *XVendor = ServerVendor(XDisplay); - fprintf(stderr, "XWindows vendor: %s\n", XVendor); - if(glXQueryVersion(XDisplay, &GLXMajor, &GLXMinor)) + LOGF("XWindows vendor: %s\n", XVendor); + if (glXQueryVersion(XDisplay, &GLXMajor, &GLXMinor)) { - fprintf(stderr, "GLX version %d.%d\n", GLXMajor, GLXMinor); - if(((GLXMajor == 1 ) && (GLXMinor >= 3)) || (GLXMajor > 1)) + LOGF("GLX version %d.%d\n", GLXMajor, GLXMinor); + if (((GLXMajor == 1 ) && (GLXMinor >= 3)) || (GLXMajor > 1)) { Result = true; } @@ -1225,10 +1224,10 @@ ChooseGLXConfig(Display *XDisplay, int XScreenIndex) XScreenIndex, DesiredAttributes, &ConfigCount); - if(Configs && ConfigCount > 0) + if (Configs && ConfigCount > 0) { XVisualInfo* VI = glXGetVisualFromFBConfig(XDisplay, Configs[0]); - if(VI) + if (VI) { Result.Found = true; Result.BestConfig = Configs[0]; @@ -1236,7 +1235,7 @@ ChooseGLXConfig(Display *XDisplay, int XScreenIndex) int id = 0; glXGetFBConfigAttrib(XDisplay, Result.BestConfig, GLX_FBCONFIG_ID, &id); - fprintf(stderr, "Using FBConfig: %d (0x%x)\n", id, id); + LOGF("Using FBConfig: %d (0x%x)\n", id, id); XFree(VI); } @@ -1268,12 +1267,12 @@ LinuxInputInit(Display *dpy, Window XWindow){ setlocale(LC_ALL, ""); XSetLocaleModifiers(""); b32 locale_supported = XSupportsLocale(); - fprintf(stderr, "Supported locale?: %s.\n", locale_supported ? "Yes" : "No"); + LOGF("Supported locale?: %s.\n", locale_supported ? "Yes" : "No"); if (!locale_supported){ - fprintf(stderr, "Reverting to 'C' ... "); + LOG("Reverting to 'C' ... "); setlocale(LC_ALL, "C"); locale_supported = XSupportsLocale(); - fprintf(stderr, "C is supported? %s.\n", locale_supported ? "Yes" : "No"); + LOGF("C is supported? %s.\n", locale_supported ? "Yes" : "No"); } result.input_method = XOpenIM(dpy, 0, 0, 0); @@ -1307,13 +1306,13 @@ LinuxInputInit(Display *dpy, Window XWindow){ } else{ result = null_init_input_result; - fputs("Could not get minimum required input style.\n", stderr); + LOG("Could not get minimum required input style.\n"); exit(1); } } else{ result = null_init_input_result; - fprintf(stderr, "Could not open X Input Method.\n"); + LOG("Could not open X Input Method.\n"); exit(1); } @@ -1391,12 +1390,12 @@ LinuxKeycodeInit(Display* dpy){ &syms_per_code ); - if(!syms) return; + if (!syms) return; int key = key_min; for(int i = 0; i < key_count * syms_per_code; ++i){ for(int j = 0; j < table_size; ++j){ - if(sym_table[j].sym == syms[i]){ + if (sym_table[j].sym == syms[i]){ keycode_lookup_table[key + (i/syms_per_code)] = sym_table[j].code; break; } @@ -1413,7 +1412,7 @@ LinuxPushKey(Key_Code code, Key_Code chr, Key_Code chr_nocaps, b8 (*mods)[MDFR_I i32 *count = &linuxvars.input.keys.count; Key_Event_Data *data = linuxvars.input.keys.keys; - if(*count < KEY_INPUT_BUFFER_SIZE){ + if (*count < KEY_INPUT_BUFFER_SIZE){ data[*count].keycode = code; data[*count].character = chr; data[*count].character_no_caps_lock = chr_nocaps; @@ -1543,10 +1542,10 @@ LinuxX11ConnectionWatch(Display* dpy, XPointer cdata, int fd, Bool opening, XPoi internal void LinuxFatalErrorMsg(const char* msg) { - fprintf(stderr, "Fatal Error: %s\n", msg); + LOGF("Fatal Error: %s\n", msg); Display *dpy = XOpenDisplay(0); - if(!dpy){ + if (!dpy){ exit(1); } @@ -1557,8 +1556,8 @@ LinuxFatalErrorMsg(const char* msg) { const char *start_p = msg, *space_p = NULL; for(const char* p = msg; *p; ++p){ - if(*p == ' ') space_p = p; - if(*p == '\n' || p - start_p > num_cols){ + if (*p == ' ') space_p = p; + if (*p == '\n' || p - start_p > num_cols){ win_h += 18; start_p = space_p ? space_p + 1 : p; space_p = NULL; @@ -1596,7 +1595,7 @@ LinuxFatalErrorMsg(const char* msg) XSelectInput(dpy, w, ExposureMask | StructureNotifyMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | KeyPressMask); XFontStruct* font = XLoadQueryFont(dpy, "-*-fixed-bold-*-*-*-*-140-*-*-*-*-iso8859-1"); - if(!font){ + if (!font){ exit(1); } @@ -1618,9 +1617,9 @@ LinuxFatalErrorMsg(const char* msg) int redraw = 0; - if(ev.type == Expose) redraw = 1; + if (ev.type == Expose) redraw = 1; - if(ev.type == ConfigureNotify){ + if (ev.type == ConfigureNotify){ redraw = 1; win_w = ev.xconfigure.width; win_h = ev.xconfigure.height; @@ -1628,33 +1627,33 @@ LinuxFatalErrorMsg(const char* msg) XRectangle button_rect = { win_w/2-40, win_h*0.8f, 80, 20 }; - if(ev.type == MotionNotify){ + if (ev.type == MotionNotify){ int new_hi = (ev.xmotion.x > button_rect.x && ev.xmotion.y > button_rect.y && ev.xmotion.x < button_rect.x + button_rect.width && ev.xmotion.y < button_rect.y + button_rect.height); - if(new_hi != button_hi){ + if (new_hi != button_hi){ button_hi = new_hi; redraw = 1; } } - if(ev.type == KeyPress){ + if (ev.type == KeyPress){ KeySym sym = XLookupKeysym(&ev.xkey, 0); - if(sym == XK_Escape || sym == XK_Return){ + if (sym == XK_Escape || sym == XK_Return){ exit(1); } } - if(ev.type == ButtonPress && ev.xbutton.button == Button1){ - if(button_hi) button_trigger = 1; + if (ev.type == ButtonPress && ev.xbutton.button == Button1){ + if (button_hi) button_trigger = 1; redraw = 1; } - if(ev.type == ButtonRelease && ev.xbutton.button == Button1){ - if(button_trigger){ - if(button_hi){ + if (ev.type == ButtonRelease && ev.xbutton.button == Button1){ + if (button_trigger){ + if (button_hi){ exit(1); } else { button_trigger = 0; @@ -1663,7 +1662,7 @@ LinuxFatalErrorMsg(const char* msg) redraw = 1; } - if(ev.type == ClientMessage && ev.xclient.window == w && (Atom)ev.xclient.data.l[0] == WM_DELETE_WINDOW){ + if (ev.type == ClientMessage && ev.xclient.window == w && (Atom)ev.xclient.data.l[0] == WM_DELETE_WINDOW){ exit(1); } @@ -1671,7 +1670,7 @@ LinuxFatalErrorMsg(const char* msg) XDrawString(dpy, w, gc2, (x)+1, (y)+1, (str), (len)); \ XDrawString(dpy, w, gc1, (x) , (y) , (str), (len)) - if(redraw){ + if (redraw){ XClearWindow(dpy, w); const char* line_start = msg; @@ -1690,11 +1689,11 @@ LinuxFatalErrorMsg(const char* msg) int x = (win_w/2) - (width/2); for(const char* p = line_start; *p; ++p){ - if(*p == ' ') last_space = p; - if(p - line_start > num_cols || *p == '\n' || !p[1]){ + if (*p == ' ') last_space = p; + if (p - line_start > num_cols || *p == '\n' || !p[1]){ const char* new_line_start = last_space + 1; - if(!last_space || *p == '\n' || !p[1]){ + if (!last_space || *p == '\n' || !p[1]){ new_line_start = last_space = (p + !p[1]); } @@ -1707,7 +1706,7 @@ LinuxFatalErrorMsg(const char* msg) } XDrawRectangles(dpy, w, gc1, &button_rect, 1); - if(button_hi || button_trigger){ + if (button_hi || button_trigger){ XDrawRectangle(dpy, w, gc2, button_rect.x+1, button_rect.y+1, button_rect.width-2, button_rect.height-2); } @@ -1747,13 +1746,13 @@ LinuxGetXSettingsDPI(Display* dpy, int screen) Atom XSET_SEL = XInternAtom(dpy, sel_buffer, True); Atom XSET_SET = XInternAtom(dpy, "_XSETTINGS_SETTINGS", True); - if(XSET_SEL == None || XSET_SET == None){ - fputs("XSETTINGS unavailable.\n", stderr); - return dpi; + if (XSET_SEL == None || XSET_SET == None){ + LOG("XSETTINGS unavailable.\n"); + return(dpi); } Window xset_win = XGetSelectionOwner(dpy, XSET_SEL); - if(xset_win == None){ + if (xset_win == None){ // TODO(inso): listen for the ClientMessage about it becoming available? // there's not much point atm if DPI scaling is only done at startup goto out; @@ -1764,13 +1763,13 @@ LinuxGetXSettingsDPI(Display* dpy, int screen) int fmt; unsigned long pad, num; - if(XGetWindowProperty(dpy, xset_win, XSET_SET, 0, 1024, False, XSET_SET, &type, &fmt, &num, &pad, &prop) != Success){ - fputs("XSETTINGS: GetWindowProperty failed.\n", stderr); + if (XGetWindowProperty(dpy, xset_win, XSET_SET, 0, 1024, False, XSET_SET, &type, &fmt, &num, &pad, &prop) != Success){ + LOG("XSETTINGS: GetWindowProperty failed.\n"); goto out; } - if(fmt != 8){ - fputs("XSETTINGS: Wrong format.\n", stderr); + if (fmt != 8){ + LOG("XSETTINGS: Wrong format.\n"); goto out; } } @@ -1778,27 +1777,24 @@ LinuxGetXSettingsDPI(Display* dpy, int screen) xs = (struct XSettings*)prop; p = (char*)(xs + 1); - if(xs->byte_order != 0){ - fputs("FIXME: XSETTINGS not host byte order?\n", stderr); + if (xs->byte_order != 0){ + LOG("FIXME: XSETTINGS not host byte order?\n"); goto out; } - for(int i = 0; i < xs->num_settings; ++i){ + for (int i = 0; i < xs->num_settings; ++i){ struct XSettingHeader* h = (struct XSettingHeader*)p; - // const char* strs[] = { "Int", "String", "Color" }; - // printf("%s:\t\"%.*s\"\n", strs[h->type], h->name_len, h->name); - p += sizeof(struct XSettingHeader); p += h->name_len; p += ((4 - (h->name_len & 3)) & 3); p += 4; // serial - switch(h->type){ + switch (h->type){ case XSettingsTypeInt: { - if(strncmp(h->name, "Xft/DPI", h->name_len) == 0){ + if (strncmp(h->name, "Xft/DPI", h->name_len) == 0){ dpi = *(i32*)p; - if(dpi != -1) dpi /= 1024; + if (dpi != -1) dpi /= 1024; } p += 4; } break; @@ -1815,14 +1811,14 @@ LinuxGetXSettingsDPI(Display* dpy, int screen) } break; default: { - fputs("XSETTINGS: Got invalid type...\n", stderr); + LOG("XSETTINGS: Got invalid type...\n"); goto out; } break; } } out: - if(prop){ + if (prop){ XFree(prop); } @@ -1954,7 +1950,7 @@ LinuxX11WindowInit(int argc, char** argv, int* window_width, int* window_height) if (linuxvars.settings.maximize_window){ LinuxMaximizeWindow(linuxvars.XDisplay, linuxvars.XWindow, 1); } - else if(linuxvars.settings.fullscreen_window){ + else if (linuxvars.settings.fullscreen_window){ LinuxToggleFullscreen(linuxvars.XDisplay, linuxvars.XWindow); } @@ -2003,10 +1999,10 @@ LinuxHandleX11Events(void) b8 mods[MDFR_INDEX_COUNT] = {}; mods[MDFR_HOLD_INDEX] = is_hold; - if(Event.xkey.state & ShiftMask) mods[MDFR_SHIFT_INDEX] = 1; - if(Event.xkey.state & ControlMask) mods[MDFR_CONTROL_INDEX] = 1; - if(Event.xkey.state & LockMask) mods[MDFR_CAPS_INDEX] = 1; - if(Event.xkey.state & Mod1Mask) mods[MDFR_ALT_INDEX] = 1; + if (Event.xkey.state & ShiftMask) mods[MDFR_SHIFT_INDEX] = 1; + if (Event.xkey.state & ControlMask) mods[MDFR_CONTROL_INDEX] = 1; + if (Event.xkey.state & LockMask) mods[MDFR_CAPS_INDEX] = 1; + if (Event.xkey.state & Mod1Mask) mods[MDFR_ALT_INDEX] = 1; Event.xkey.state &= ~(ControlMask); @@ -2016,45 +2012,45 @@ LinuxHandleX11Events(void) Xutf8LookupString(linuxvars.input_context, &Event.xkey, (char*)buff, sizeof(buff) - 1, &keysym, &status); - if(status == XBufferOverflow){ + if (status == XBufferOverflow){ //TODO(inso): handle properly Xutf8ResetIC(linuxvars.input_context); XSetICFocus(linuxvars.input_context); - fputs("FIXME: XBufferOverflow from LookupString.\n", stderr); + LOG("FIXME: XBufferOverflow from LookupString.\n"); } u32 key = utf8_to_u32_unchecked(buff); u32 key_no_caps = key; - if(mods[MDFR_CAPS_INDEX] && status == XLookupBoth && Event.xkey.keycode){ + if (mods[MDFR_CAPS_INDEX] && status == XLookupBoth && Event.xkey.keycode){ u8 buff_no_caps[32] = {0}; Event.xkey.state &= ~(LockMask); XLookupString(&Event.xkey, (char*)buff_no_caps, sizeof(buff_no_caps) - 1, NULL, NULL); - if(*buff_no_caps){ + if (*buff_no_caps){ key_no_caps = utf8_to_u32_unchecked(buff_no_caps); } } - if(key == '\r') key = '\n'; - if(key_no_caps == '\r') key_no_caps = '\n'; + if (key == '\r') key = '\n'; + if (key_no_caps == '\r') key_no_caps = '\n'; // don't push modifiers - if(keysym >= XK_Shift_L && keysym <= XK_Hyper_R){ + if (keysym >= XK_Shift_L && keysym <= XK_Hyper_R){ break; } - if(keysym == XK_ISO_Left_Tab){ + if (keysym == XK_ISO_Left_Tab){ key = key_no_caps = '\t'; mods[MDFR_SHIFT_INDEX] = 1; } Key_Code special_key = keycode_lookup_table[(u8)Event.xkey.keycode]; - if(special_key){ + if (special_key){ LinuxPushKey(special_key, 0, 0, &mods); - } else if(key < 256){ + } else if (key < 256){ LinuxPushKey(key, key, key_no_caps, &mods); } else { LinuxPushKey(0, 0, 0, &mods); @@ -2131,13 +2127,13 @@ LinuxHandleX11Events(void) i32 w = Event.xconfigure.width; i32 h = Event.xconfigure.height; - if(w != linuxvars.target.width || h != linuxvars.target.height){ + if (w != linuxvars.target.width || h != linuxvars.target.height){ LinuxResizeTarget(w, h); } }break; case MappingNotify: { - if(Event.xmapping.request == MappingModifier || Event.xmapping.request == MappingKeyboard){ + if (Event.xmapping.request == MappingModifier || Event.xmapping.request == MappingKeyboard){ XRefreshKeyboardMapping(&Event.xmapping); LinuxKeycodeInit(linuxvars.XDisplay); } @@ -2184,7 +2180,7 @@ LinuxHandleX11Events(void) linuxvars.atom_UTF8_STRING }; - if(request.target == linuxvars.atom_TARGETS){ + if (request.target == linuxvars.atom_TARGETS){ XChangeProperty( request.display, @@ -2202,13 +2198,13 @@ LinuxHandleX11Events(void) } else { b32 found = false; for(int i = 0; i < ArrayCount(atoms); ++i){ - if(request.target == atoms[i]){ + if (request.target == atoms[i]){ found = true; break; } } - if(found){ + if (found){ XChangeProperty( request.display, request.requestor, @@ -2231,7 +2227,7 @@ LinuxHandleX11Events(void) // NOTE(inso): Another program is now the clipboard owner. case SelectionClear: { - if(Event.xselectionclear.selection == linuxvars.atom_CLIPBOARD){ + if (Event.xselectionclear.selection == linuxvars.atom_CLIPBOARD){ linuxvars.clipboard_outgoing.size = 0; } }break; @@ -2239,7 +2235,7 @@ LinuxHandleX11Events(void) // NOTE(inso): A program is giving us the clipboard data we asked for. case SelectionNotify: { XSelectionEvent* e = (XSelectionEvent*)&Event; - if(e->selection == linuxvars.atom_CLIPBOARD && e->target == linuxvars.atom_UTF8_STRING && e->property != None){ + if (e->selection == linuxvars.atom_CLIPBOARD && e->target == linuxvars.atom_UTF8_STRING && e->property != None){ Atom type; int fmt; unsigned long nitems, bytes_left; @@ -2247,7 +2243,7 @@ LinuxHandleX11Events(void) int result = XGetWindowProperty(linuxvars.XDisplay, linuxvars.XWindow, linuxvars.atom_CLIPBOARD, 0L, LINUX_MAX_PASTE_CHARS/4L, False, linuxvars.atom_UTF8_STRING, &type, &fmt, &nitems, &bytes_left, &data); - if(result == Success && fmt == 8){ + if (result == Success && fmt == 8){ LinuxStringDup(&linuxvars.clipboard_contents, data, nitems); should_step = 1; linuxvars.new_clipboard = 1; @@ -2263,9 +2259,9 @@ LinuxHandleX11Events(void) }break; default: { - if(Event.type == linuxvars.xfixes_selection_event){ + if (Event.type == linuxvars.xfixes_selection_event){ XFixesSelectionNotifyEvent* sne = (XFixesSelectionNotifyEvent*)&Event; - if(sne->subtype == XFixesSelectionNotify && sne->owner != linuxvars.XWindow){ + if (sne->subtype == XFixesSelectionNotify && sne->owner != linuxvars.XWindow){ XConvertSelection(linuxvars.XDisplay, linuxvars.atom_CLIPBOARD, linuxvars.atom_UTF8_STRING, linuxvars.atom_CLIPBOARD, linuxvars.XWindow, CurrentTime); } } @@ -2275,7 +2271,7 @@ LinuxHandleX11Events(void) PrevEvent = Event; } - if(should_step){ + if (should_step){ LinuxScheduleStep(); } } @@ -2311,7 +2307,7 @@ main(int argc, char **argv){ linuxvars.target.max = MB(1); linuxvars.target.push_buffer = (char*)system_memory_allocate(linuxvars.target.max); - if(memory_vars.vars_memory == NULL || memory_vars.target_memory == NULL || memory_vars.user_memory == NULL || linuxvars.target.push_buffer == NULL){ + if (memory_vars.vars_memory == NULL || memory_vars.target_memory == NULL || memory_vars.user_memory == NULL || linuxvars.target.push_buffer == NULL){ LinuxFatalErrorMsg("Could not allocate sufficient memory. Please make sure you have atleast 512Mb of RAM free. (This requirement will be relaxed in the future)."); exit(1); } @@ -2323,7 +2319,7 @@ main(int argc, char **argv){ // char* cwd = get_current_dir_name(); - if(!cwd){ + if (!cwd){ char buf[1024]; snprintf(buf, sizeof(buf), "Call to get_current_dir_name failed: %s", strerror(errno)); LinuxFatalErrorMsg(buf); @@ -2343,8 +2339,7 @@ main(int argc, char **argv){ output_size = linuxvars.app.read_command_line(&linuxvars.system, &memory_vars, current_directory, &linuxvars.settings, &files, &file_count, clparams); if (output_size > 0){ - // TODO(allen): crt free version - fprintf(stdout, "%.*s", output_size, (char*)memory_vars.target_memory); + LOGF("%.*s", output_size, (char*)memory_vars.target_memory); } if (output_size != 0){ LinuxFatalErrorMsg("Error reading command-line arguments."); @@ -2399,7 +2394,7 @@ main(int argc, char **argv){ exit(1); } else{ - fprintf(stderr, "Successfully loaded custom_4coder.so\n"); + LOG("Successfully loaded custom_4coder.so\n"); } } } else { @@ -2470,10 +2465,10 @@ main(int argc, char **argv){ // linuxvars.XDisplay = XOpenDisplay(0); - if(!linuxvars.XDisplay){ + if (!linuxvars.XDisplay){ // NOTE(inso): probably not worth trying the popup in this case... - fprintf(stderr, "Can't open display!\n"); - return 1; + LOG("Can't open display!\n"); + return(1); } #define LOAD_ATOM(x) linuxvars.atom_##x = XInternAtom(linuxvars.XDisplay, #x, False); @@ -2496,7 +2491,7 @@ main(int argc, char **argv){ linuxvars.dpi_x = linuxvars.dpi_y = LinuxGetXSettingsDPI(linuxvars.XDisplay, DefaultScreen(linuxvars.XDisplay)); // fallback - if(linuxvars.dpi_x == -1){ + if (linuxvars.dpi_x == -1){ int scr = DefaultScreen(linuxvars.XDisplay); int dw = DisplayWidth(linuxvars.XDisplay, scr); @@ -2508,10 +2503,10 @@ main(int argc, char **argv){ linuxvars.dpi_x = dw_mm ? dw / (dw_mm / 25.4) : 96; linuxvars.dpi_y = dh_mm ? dh / (dh_mm / 25.4) : 96; - fprintf(stderr, "%dx%d - %dmmx%dmm DPI: %dx%d\n", dw, dh, dw_mm, dh_mm, linuxvars.dpi_x, linuxvars.dpi_y); + LOGF("%dx%d - %dmmx%dmm DPI: %dx%d\n", dw, dh, dw_mm, dh_mm, linuxvars.dpi_x, linuxvars.dpi_y); } else{ - fprintf(stderr, "DPI from XSETTINGS: %d\n", linuxvars.dpi_x); + LOGF("DPI from XSETTINGS: %d\n", linuxvars.dpi_x); } int window_width, window_height; @@ -2527,7 +2522,7 @@ main(int argc, char **argv){ XFixesSelectSelectionInput(linuxvars.XDisplay, linuxvars.XWindow, linuxvars.atom_CLIPBOARD, XFixesSetSelectionOwnerNotifyMask); } else{ - fprintf(stderr, "Your X server doesn't support XFIXES, mention this fact if you report any clipboard-related issues.\n"); + LOG("Your X server doesn't support XFIXES, mention this fact if you report any clipboard-related issues.\n"); } Init_Input_Result input_result = LinuxInputInit(linuxvars.XDisplay, linuxvars.XWindow); @@ -2624,7 +2619,7 @@ main(int argc, char **argv){ if (num_events == -1){ if (errno != EINTR){ - fprintf(stderr, "epoll_wait\n"); + LOG("epoll_wait\n"); } continue; } @@ -2668,10 +2663,10 @@ main(int argc, char **argv){ } } - if(do_step){ + if (do_step){ linuxvars.last_step = system_now_time(); - if(linuxvars.input.first_step || !linuxvars.has_xfixes){ + if (linuxvars.input.first_step || !linuxvars.has_xfixes){ XConvertSelection( linuxvars.XDisplay, linuxvars.atom_CLIPBOARD, @@ -2686,7 +2681,7 @@ main(int argc, char **argv){ result.mouse_cursor_type = APP_MOUSE_CURSOR_DEFAULT; result.trying_to_kill = !linuxvars.keep_running; - if(linuxvars.new_clipboard){ + if (linuxvars.new_clipboard){ linuxvars.input.clipboard = linuxvars.clipboard_contents; linuxvars.new_clipboard = 0; } else { @@ -2704,21 +2699,21 @@ main(int argc, char **argv){ clparams ); - if(result.perform_kill){ + if (result.perform_kill){ break; - } else if(!keep_running && !linuxvars.keep_running){ + } else if (!keep_running && !linuxvars.keep_running){ linuxvars.keep_running = 1; } - if(result.animating){ + if (result.animating){ LinuxScheduleStep(); } LinuxRedrawTarget(); - if(result.mouse_cursor_type != linuxvars.cursor && !linuxvars.input.mouse.l){ + if (result.mouse_cursor_type != linuxvars.cursor && !linuxvars.input.mouse.l){ Cursor c = xcursors[result.mouse_cursor_type]; - if(!linuxvars.hide_cursor){ + if (!linuxvars.hide_cursor){ XDefineCursor(linuxvars.XDisplay, linuxvars.XWindow, c); } linuxvars.cursor = result.mouse_cursor_type; @@ -2736,8 +2731,10 @@ main(int argc, char **argv){ } } - if(linuxvars.XDisplay){ - if(linuxvars.XWindow) XDestroyWindow(linuxvars.XDisplay, linuxvars.XWindow); + if (linuxvars.XDisplay){ + if (linuxvars.XWindow){ + XDestroyWindow(linuxvars.XDisplay, linuxvars.XWindow); + } XCloseDisplay(linuxvars.XDisplay); }