linux updates + fixes, but general_memory_check assert fails
							parent
							
								
									939967bc94
								
							
						
					
					
						commit
						be7bb1a51b
					
				
							
								
								
									
										7
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										7
									
								
								Makefile
								
								
								
								
							|  | @ -2,9 +2,10 @@ CPP_FILES := $(wildcard *.cpp) $(wildcard **/*.cpp) | ||||||
| H_FILES := $(wildcard *.h) $(wildcard **/*.h) | H_FILES := $(wildcard *.h) $(wildcard **/*.h) | ||||||
| WARNINGS := -Wno-write-strings  | WARNINGS := -Wno-write-strings  | ||||||
| PLAT_LINKS := -L/usr/local/lib -lX11 -lpthread -lm -lrt -lGL -ldl -lXfixes | PLAT_LINKS := -L/usr/local/lib -lX11 -lpthread -lm -lrt -lGL -ldl -lXfixes | ||||||
| FLAGS := -fPIC -fno-threadsafe-statics -pthread -I../foreign -g -O0 | FLAGS := -fPIC -fno-threadsafe-statics -pthread -I../foreign | ||||||
| 
 | 
 | ||||||
| all: ../4ed_app.so ../4ed | debug: FLAGS += -DFRED_KEEP_ASSERT=1 -DFRED_INTERNAL=0 -DFRED_SUPER -g -O0 | ||||||
|  | debug: ../4ed_app.so ../4ed | ||||||
| 
 | 
 | ||||||
| ../4ed_app.so: $(CPP_FILES) $(H_FILES) | ../4ed_app.so: $(CPP_FILES) $(H_FILES) | ||||||
| 	g++ $(WARNINGS) $(FLAGS) -shared 4ed_app_target.cpp -iquoteforeign -o $@ | 	g++ $(WARNINGS) $(FLAGS) -shared 4ed_app_target.cpp -iquoteforeign -o $@ | ||||||
|  | @ -29,6 +30,6 @@ release_super: release | ||||||
| release32_super: FLAGS += -D FRED_SUPER  | release32_super: FLAGS += -D FRED_SUPER  | ||||||
| release32_super: release32 | release32_super: release32 | ||||||
| 
 | 
 | ||||||
| .PHONY: clean release release32 release_super release32_super | .PHONY: debug clean release release32 release_super release32_super | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										165
									
								
								linux_4ed.cpp
								
								
								
								
							
							
						
						
									
										165
									
								
								linux_4ed.cpp
								
								
								
								
							|  | @ -9,8 +9,11 @@ | ||||||
| 
 | 
 | ||||||
| // TOP
 | // TOP
 | ||||||
| 
 | 
 | ||||||
| #include "4ed_config.h" | #include "4coder_default_bindings.cpp" | ||||||
| 
 | 
 | ||||||
|  | #undef exec_command | ||||||
|  | #undef exec_command_keep_stack | ||||||
|  | #undef clear_parameters | ||||||
| 
 | 
 | ||||||
| #include "4ed_meta.h" | #include "4ed_meta.h" | ||||||
| 
 | 
 | ||||||
|  | @ -27,61 +30,60 @@ | ||||||
| #include "4ed_mem.cpp" | #include "4ed_mem.cpp" | ||||||
| #include "4ed_math.cpp" | #include "4ed_math.cpp" | ||||||
| 
 | 
 | ||||||
| #include "4coder_default_bindings.cpp" |  | ||||||
| 
 |  | ||||||
| #undef exec_command |  | ||||||
| #undef exec_command_keep_stack |  | ||||||
| #undef clear_parameters |  | ||||||
| 
 |  | ||||||
| #include "4ed_system.h" | #include "4ed_system.h" | ||||||
| #include "4ed_rendering.h" | #include "4ed_rendering.h" | ||||||
| #include "4ed.h" | #include "4ed.h" | ||||||
| 
 | 
 | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <memory.h> |  | ||||||
| #include <math.h> | #include <math.h> | ||||||
|  | #include <time.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <locale.h> | ||||||
|  | #include <memory.h> | ||||||
|  | #include <dirent.h> | ||||||
|  | #include <dlfcn.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | #include <xmmintrin.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <errno.h> | ||||||
|  | #include <pthread.h> | ||||||
|  | #include <semaphore.h> | ||||||
|  | #include <signal.h> | ||||||
|  | #include <ucontext.h> | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
| #include <sys/ioctl.h> | #include <sys/ioctl.h> | ||||||
| #include <sys/time.h> | #include <sys/time.h> | ||||||
| #include <sys/types.h> | #include <sys/wait.h> | ||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
| #include <sys/mman.h> | #include <sys/mman.h> | ||||||
| #include <sys/timerfd.h> | #include <sys/timerfd.h> | ||||||
| #include <sys/eventfd.h> | #include <sys/eventfd.h> | ||||||
| #include <sys/epoll.h> | #include <sys/epoll.h> | ||||||
| #include <sys/inotify.h> | #include <sys/inotify.h> | ||||||
| #include <dirent.h> | 
 | ||||||
| #include <stdio.h> |  | ||||||
| #include <X11/Xlib.h> | #include <X11/Xlib.h> | ||||||
| #include <X11/cursorfont.h> | #include <X11/cursorfont.h> | ||||||
| #include <X11/Xatom.h> | #include <X11/Xatom.h> | ||||||
| #include <X11/extensions/Xfixes.h> | #include <X11/extensions/Xfixes.h> | ||||||
|  | 
 | ||||||
| #include <GL/glx.h> | #include <GL/glx.h> | ||||||
| #include <GL/gl.h> | #include <GL/gl.h> | ||||||
| #include <GL/glext.h> | #include <GL/glext.h> | ||||||
| #include <xmmintrin.h> |  | ||||||
| #include <linux/fs.h> |  | ||||||
| //#include <X11/extensions/XInput2.h>
 |  | ||||||
| #include <linux/input.h> |  | ||||||
| #include <time.h> |  | ||||||
| #include <dlfcn.h> |  | ||||||
| #include <unistd.h> |  | ||||||
| 
 | 
 | ||||||
| #include "4ed_internal.h" | #include <linux/fs.h> | ||||||
|  | #include <linux/input.h> | ||||||
|  | 
 | ||||||
| #include "system_shared.h" | #include "system_shared.h" | ||||||
| 
 | 
 | ||||||
| #include <stdlib.h> | #if FRED_INTERNAL | ||||||
| #include <locale.h> |  | ||||||
| #include <sys/stat.h> |  | ||||||
| #include <fcntl.h> |  | ||||||
| #include <errno.h> |  | ||||||
| #include <pthread.h> |  | ||||||
| #include <semaphore.h> |  | ||||||
| #include <signal.h> |  | ||||||
| #include <sys/types.h> |  | ||||||
| #include <sys/wait.h> |  | ||||||
| #include <ucontext.h> |  | ||||||
| 
 | 
 | ||||||
| //#define FRED_USE_FONTCONFIG 1
 | struct Sys_Bubble : public Bubble{ | ||||||
|  |     i32 line_number; | ||||||
|  |     char *file_name; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| #if FRED_USE_FONTCONFIG | #if FRED_USE_FONTCONFIG | ||||||
| #include <fontconfig/fontconfig.h> | #include <fontconfig/fontconfig.h> | ||||||
|  | @ -179,6 +181,7 @@ struct Linux_Vars{ | ||||||
| 
 | 
 | ||||||
| #if FRED_INTERNAL | #if FRED_INTERNAL | ||||||
|     Sys_Bubble internal_bubble; |     Sys_Bubble internal_bubble; | ||||||
|  |     pthread_mutex_t DEBUG_sysmem_lock; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     Font_Load_System fnt; |     Font_Load_System fnt; | ||||||
|  | @ -214,19 +217,21 @@ LinuxGetMemory_(i32 size, i32 line_number, char *file_name){ | ||||||
|     Assert(size != 0); |     Assert(size != 0); | ||||||
|      |      | ||||||
| #if FRED_INTERNAL | #if FRED_INTERNAL | ||||||
|     Sys_Bubble *bubble; |     result = mmap(0, size + sizeof(Sys_Bubble), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | ||||||
|      |      | ||||||
|     result = malloc(size + sizeof(Sys_Bubble)); |     Sys_Bubble* bubble = (Sys_Bubble*)result; | ||||||
|     bubble = (Sys_Bubble*)result; |  | ||||||
|     bubble->flags = MEM_BUBBLE_SYS_DEBUG; |     bubble->flags = MEM_BUBBLE_SYS_DEBUG; | ||||||
|     bubble->line_number = line_number; |     bubble->line_number = line_number; | ||||||
|     bubble->file_name = file_name; |     bubble->file_name = file_name; | ||||||
|     bubble->size = size; |     bubble->size = size; | ||||||
| 
 | 
 | ||||||
|     // TODO(allen): make Sys_Bubble list thread safe
 |     pthread_mutex_lock(&linuxvars.DEBUG_sysmem_lock); | ||||||
|     insert_bubble(&linuxvars.internal_bubble, bubble); |     insert_bubble(&linuxvars.internal_bubble, bubble); | ||||||
|  |     pthread_mutex_unlock(&linuxvars.DEBUG_sysmem_lock); | ||||||
|  | 
 | ||||||
|     result = bubble + 1; |     result = bubble + 1; | ||||||
|      |      | ||||||
|  |     printf("new bubble: %p\n", result); | ||||||
| #else | #else | ||||||
|     size_t real_size = size + sizeof(size_t); |     size_t real_size = size + sizeof(size_t); | ||||||
|     result = mmap(0, real_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); |     result = mmap(0, real_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | ||||||
|  | @ -246,20 +251,20 @@ internal void | ||||||
| LinuxFreeMemory(void *block){ | LinuxFreeMemory(void *block){ | ||||||
|     if (block){ |     if (block){ | ||||||
| #if FRED_INTERNAL | #if FRED_INTERNAL | ||||||
|         Sys_Bubble *bubble; |         Sys_Bubble *bubble = ((Sys_Bubble*)block) - 1; | ||||||
|          |  | ||||||
|         bubble = (Sys_Bubble*)block; |  | ||||||
|         --bubble; |  | ||||||
|         Assert((bubble->flags & MEM_BUBBLE_DEBUG_MASK) == MEM_BUBBLE_SYS_DEBUG); |         Assert((bubble->flags & MEM_BUBBLE_DEBUG_MASK) == MEM_BUBBLE_SYS_DEBUG); | ||||||
| 
 | 
 | ||||||
|         // TODO(allen): make Sys_Bubble list thread safe
 |         size_t size = bubble->size + sizeof(Sys_Bubble); | ||||||
|         remove_bubble(bubble); |  | ||||||
| 
 | 
 | ||||||
|         free(bubble); |         pthread_mutex_lock(&linuxvars.DEBUG_sysmem_lock); | ||||||
|  |         remove_bubble(bubble); | ||||||
|  |         pthread_mutex_unlock(&linuxvars.DEBUG_sysmem_lock); | ||||||
|  |          | ||||||
|  |         munmap(bubble, size); | ||||||
| #else | #else | ||||||
|         block = (char*)block - sizeof(size_t); |         block = (char*)block - sizeof(size_t); | ||||||
|         size_t len = *(size_t*)block; |         size_t size = *(size_t*)block; | ||||||
|         munmap(block, len); |         munmap(block, size); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -269,7 +274,7 @@ LinuxScratchPartition(i32 size){ | ||||||
|     Partition part; |     Partition part; | ||||||
|     void *data; |     void *data; | ||||||
|     data = LinuxGetMemory(size); |     data = LinuxGetMemory(size); | ||||||
|     part = partition_open(data, size); |     part = make_part(data, size); | ||||||
|     return(part); |     return(part); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -280,7 +285,7 @@ LinuxScratchPartitionGrow(Partition *part, i32 new_size){ | ||||||
|         data = LinuxGetMemory(new_size); |         data = LinuxGetMemory(new_size); | ||||||
|         memcpy(data, part->base, part->pos); |         memcpy(data, part->base, part->pos); | ||||||
|         LinuxFreeMemory(part->base); |         LinuxFreeMemory(part->base); | ||||||
|         part->base = (u8*)data; |         part->base = (char*)data; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -336,7 +341,7 @@ Sys_File_Time_Stamp_Sig(system_file_time_stamp){ | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     LINUX_FN_DEBUG("%s = %" PRIu64, filename, microsecond_timestamp); |     //LINUX_FN_DEBUG("%s = %" PRIu64, filename, microsecond_timestamp);
 | ||||||
| 
 | 
 | ||||||
|     return(microsecond_timestamp); |     return(microsecond_timestamp); | ||||||
| } | } | ||||||
|  | @ -864,6 +869,9 @@ INTERNAL_Sys_Sentinel_Sig(internal_sentinel){ | ||||||
| #else | #else | ||||||
|     result = 0; |     result = 0; | ||||||
| #endif | #endif | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | 
 | ||||||
|     return(result); |     return(result); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1198,7 +1206,7 @@ Sys_To_Binary_Path(system_to_binary_path){ | ||||||
|     i32 max = out_filename->memory_size; |     i32 max = out_filename->memory_size; | ||||||
|     i32 size = readlink("/proc/self/exe", out_filename->str, max); |     i32 size = readlink("/proc/self/exe", out_filename->str, max); | ||||||
| 
 | 
 | ||||||
|     LINUX_FN_DEBUG("%d, %d", max, size); |     LINUX_FN_DEBUG("max: %d, size: %d", max, size); | ||||||
| 
 | 
 | ||||||
|     if (size > 0 && size < max-1){ |     if (size > 0 && size < max-1){ | ||||||
|         out_filename->size = size; |         out_filename->size = size; | ||||||
|  | @ -1374,20 +1382,13 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, | ||||||
|             None |             None | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         fprintf(stderr, "Attribs: %d %d %d %d %d\n", |         fprintf(stderr,  "Creating GL 4.3 context...\n"); | ||||||
|                 context_attribs[0], |  | ||||||
|                 context_attribs[1], |  | ||||||
|                 context_attribs[2], |  | ||||||
|                 context_attribs[3], |  | ||||||
|                 context_attribs[4]); |  | ||||||
|   |  | ||||||
|         fprintf(stderr,  "Creating context\n"); |  | ||||||
|         ctx = glXCreateContextAttribsARB(XDisplay, bestFbc, 0, True, context_attribs); |         ctx = glXCreateContextAttribsARB(XDisplay, bestFbc, 0, True, context_attribs); | ||||||
|   |   | ||||||
|         XSync( XDisplay, False ); |         XSync( XDisplay, False ); | ||||||
|         if (!ctxErrorOccurred && ctx) |         if (!ctxErrorOccurred && ctx) | ||||||
|         { |         { | ||||||
|             fprintf(stderr,  "Created GL 4.3 context\n" ); |             fprintf(stderr,  "Created GL 4.3 context.\n" ); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|  | @ -1396,14 +1397,14 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, | ||||||
|             context_attribs[1] = 3; |             context_attribs[1] = 3; | ||||||
|             context_attribs[3] = 2; |             context_attribs[3] = 2; | ||||||
|   |   | ||||||
|             fprintf(stderr,  "Creating context\n" ); |             fprintf(stderr,  "GL 4.3 unavailable, creating GL 3.2 context...\n" ); | ||||||
|             ctx = glXCreateContextAttribsARB( XDisplay, bestFbc, 0, True, context_attribs ); |             ctx = glXCreateContextAttribsARB( XDisplay, bestFbc, 0, True, context_attribs ); | ||||||
|   |   | ||||||
|             XSync(XDisplay, False); |             XSync(XDisplay, False); | ||||||
| 
 | 
 | ||||||
|             if (!ctxErrorOccurred && ctx) |             if (!ctxErrorOccurred && ctx) | ||||||
|             { |             { | ||||||
|                 fprintf(stderr,  "Created GL 3.2 context\n" ); |                 fprintf(stderr,  "Created GL 3.2 context.\n" ); | ||||||
|             } |             } | ||||||
|             else |             else | ||||||
|             { |             { | ||||||
|  | @ -1508,7 +1509,7 @@ InitializeOpenGLContext(Display *XDisplay, Window XWindow, GLXFBConfig &bestFbc, | ||||||
|     GLXLOAD(glDebugMessageCallback); |     GLXLOAD(glDebugMessageCallback); | ||||||
| 
 | 
 | ||||||
|     if(glDebugMessageCallback){ |     if(glDebugMessageCallback){ | ||||||
|         fputs("enabling gl debug\n", stderr); |         fputs("Enabling GL Debug Callback\n", stderr); | ||||||
|         glDebugMessageCallback(&gl_log, 0); |         glDebugMessageCallback(&gl_log, 0); | ||||||
|         glEnable(GL_DEBUG_OUTPUT); |         glEnable(GL_DEBUG_OUTPUT); | ||||||
|     } |     } | ||||||
|  | @ -1574,16 +1575,28 @@ ChooseGLXConfig(Display *XDisplay, int XScreenIndex) | ||||||
| 		None | 		None | ||||||
| 	};     | 	};     | ||||||
| 
 | 
 | ||||||
| 	int ConfigCount; | 	int ConfigCount = 0; | ||||||
| 	GLXFBConfig *Configs = glXChooseFBConfig(XDisplay, | 	GLXFBConfig *Configs = glXChooseFBConfig(XDisplay, | ||||||
| 											 XScreenIndex, | 											 XScreenIndex, | ||||||
| 											 DesiredAttributes, | 											 DesiredAttributes, | ||||||
| 											 &ConfigCount); | 											 &ConfigCount); | ||||||
| 	if(ConfigCount > 0) | 	if(Configs && ConfigCount > 0) | ||||||
|  | 	{ | ||||||
|  |         XVisualInfo* VI = glXGetVisualFromFBConfig(XDisplay, Configs[0]); | ||||||
|  |         if(VI) | ||||||
|         { |         { | ||||||
|             Result.Found = true; |             Result.Found = true; | ||||||
| 		Result.BestConfig = *Configs; |             Result.BestConfig = Configs[0]; | ||||||
| 		Result.BestInfo = *glXGetVisualFromFBConfig(XDisplay, *Configs); | 		    Result.BestInfo = *VI; | ||||||
|  | 
 | ||||||
|  |             int id = 0; | ||||||
|  |             glXGetFBConfigAttrib(XDisplay, Result.BestConfig, GLX_FBCONFIG_ID, &id); | ||||||
|  |             fprintf(stderr, "Using FBConfig: %d (0x%x)\n", id, id); | ||||||
|  | 
 | ||||||
|  |             XFree(VI); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         XFree(Configs); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return(Result); |     return(Result); | ||||||
|  | @ -1594,6 +1607,7 @@ struct Init_Input_Result{ | ||||||
|     XIMStyle best_style; |     XIMStyle best_style; | ||||||
|     XIC xic; |     XIC xic; | ||||||
| }; | }; | ||||||
|  | 
 | ||||||
| inline Init_Input_Result | inline Init_Input_Result | ||||||
| init_input_result_zero(){ | init_input_result_zero(){ | ||||||
|     Init_Input_Result result={0}; |     Init_Input_Result result={0}; | ||||||
|  | @ -2172,6 +2186,8 @@ main(int argc, char **argv) | ||||||
|     linuxvars.internal_bubble.next = &linuxvars.internal_bubble; |     linuxvars.internal_bubble.next = &linuxvars.internal_bubble; | ||||||
|     linuxvars.internal_bubble.prev = &linuxvars.internal_bubble; |     linuxvars.internal_bubble.prev = &linuxvars.internal_bubble; | ||||||
|     linuxvars.internal_bubble.flags = MEM_BUBBLE_SYS_DEBUG; |     linuxvars.internal_bubble.flags = MEM_BUBBLE_SYS_DEBUG; | ||||||
|  | 
 | ||||||
|  |     pthread_mutex_init(&linuxvars.DEBUG_sysmem_lock, 0); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     linuxvars.first = 1; |     linuxvars.first = 1; | ||||||
|  | @ -2207,6 +2223,15 @@ main(int argc, char **argv) | ||||||
|     memory_vars.user_memory_size = Mbytes(2); |     memory_vars.user_memory_size = Mbytes(2); | ||||||
|     memory_vars.user_memory = system_get_memory(memory_vars.user_memory_size); |     memory_vars.user_memory = system_get_memory(memory_vars.user_memory_size); | ||||||
| 
 | 
 | ||||||
|  | #if 0 | ||||||
|  |     memory_vars.vars_memory_size = Mbytes(2); | ||||||
|  |     memory_vars.vars_memory = mmap(0, memory_vars.vars_memory_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | ||||||
|  |     memory_vars.target_memory_size = Mbytes(512); | ||||||
|  |     memory_vars.target_memory = mmap(0, memory_vars.target_memory_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | ||||||
|  |     memory_vars.user_memory_size = Mbytes(2); | ||||||
|  |     memory_vars.user_memory = mmap(0, memory_vars.user_memory_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|     String current_directory; |     String current_directory; | ||||||
|     i32 curdir_req, curdir_size; |     i32 curdir_req, curdir_size; | ||||||
|     char *curdir_mem; |     char *curdir_mem; | ||||||
|  | @ -2286,17 +2311,19 @@ main(int argc, char **argv) | ||||||
| 
 | 
 | ||||||
|         if (linuxvars.custom_api.get_alpha_4coder_version == 0 || |         if (linuxvars.custom_api.get_alpha_4coder_version == 0 || | ||||||
|             linuxvars.custom_api.get_alpha_4coder_version(MAJOR, MINOR, PATCH) == 0){ |             linuxvars.custom_api.get_alpha_4coder_version(MAJOR, MINOR, PATCH) == 0){ | ||||||
|             fprintf(stderr, "failed to use 4coder_custom.so: version mismatch\n"); |             fprintf(stderr, "*** Failed to use 4coder_custom.so: version mismatch ***\n"); | ||||||
|         } |         } | ||||||
|         else{ |         else{ | ||||||
|             linuxvars.custom_api.get_bindings = (Get_Binding_Data_Function*) |             linuxvars.custom_api.get_bindings = (Get_Binding_Data_Function*) | ||||||
|                 dlsym(linuxvars.custom, "get_bindings"); |                 dlsym(linuxvars.custom, "get_bindings"); | ||||||
|  |             linuxvars.custom_api.view_routine = (View_Routine_Function*) | ||||||
|  |                 dlsym(linuxvars.custom, "view_routine"); | ||||||
| 
 | 
 | ||||||
|             if (linuxvars.custom_api.get_bindings == 0){ |             if (linuxvars.custom_api.get_bindings == 0){ | ||||||
|                 fprintf(stderr, "failed to use 4coder_custom.so: get_bindings not exported\n"); |                 fprintf(stderr, "*** Failed to use 4coder_custom.so: get_bindings not exported ***\n"); | ||||||
|             } |             } | ||||||
|             else{ |             else{ | ||||||
|                 fprintf(stderr, "successfully loaded 4coder_custom.so\n"); |                 fprintf(stderr, "Successfully loaded 4coder_custom.so\n"); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -2372,6 +2399,8 @@ main(int argc, char **argv) | ||||||
|         exit(1); |         exit(1); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     // TODO(inso): maybe should try the default screen first? or only the default without iterating.
 | ||||||
|  | 
 | ||||||
|     for(int XScreenIndex = 0; |     for(int XScreenIndex = 0; | ||||||
|         XScreenIndex < XScreenCount; |         XScreenIndex < XScreenCount; | ||||||
|         ++XScreenIndex) |         ++XScreenIndex) | ||||||
|  | @ -2486,6 +2515,8 @@ main(int argc, char **argv) | ||||||
|     XFree(wm_hints); |     XFree(wm_hints); | ||||||
|     XFree(cl_hints); |     XFree(cl_hints); | ||||||
| 
 | 
 | ||||||
|  |     XFree(win_name.value); | ||||||
|  | 
 | ||||||
|     LinuxSetIcon(linuxvars.XDisplay, linuxvars.XWindow); |     LinuxSetIcon(linuxvars.XDisplay, linuxvars.XWindow); | ||||||
| 
 | 
 | ||||||
|     //NOTE(inso): make the window visible
 |     //NOTE(inso): make the window visible
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 insofaras
						insofaras