#include <sys/resource.h>
#ifdef LEAKER
-#define STRC(v) printf("==new %p from %p sz %jd\n", v, __builtin_return_address(0), n)
+#if 0 // track allocators
+#include <execinfo.h>
+#define BT_BUF_SIZE 100
+static void leaker()
+{
+ void *buffer[BT_BUF_SIZE];
+ int nptrs = backtrace(buffer, BT_BUF_SIZE);
+ char **trace = backtrace_symbols(buffer, nptrs);
+ if( !trace ) return;
+ for( int i=0; i<nptrs; ) printf("%s ", trace[i++]);
+ printf("\n");
+ free(trace);
+}
+#define STRB ;leaker()
+#else
+#define STRB
+#endif
+#define STRC(v) printf("==new %p from %p sz %jd\n", v, __builtin_return_address(0), n)STRB
#define STRD(v) printf("==del %p from %p\n", v, __builtin_return_address(0))
void *operator new(size_t n) { void *vp = malloc(n); STRC(vp); bzero(vp,n); return vp; }
void operator delete(void *t) { STRD(t); free(t); }
long cin_timezone;
+static float get_layout_scale()
+{
+ char config_path[BCTEXTLEN];
+ sprintf(config_path,"%s/%s", File::get_config_path(), CONFIG_FILE);
+ FILE *fp = fopen(config_path,"r");
+ if( !fp ) return 0;
+ float scale = 0;
+ char line[BCTEXTLEN];
+ line[BCTEXTLEN-1] = 0;
+ while( fgets(line, BCTEXTLEN-1, fp) ) {
+ if( !strncmp(line, "LAYOUT_SCALE ",12+1) ) {
+ scale = atof(line+12);
+ break;
+ }
+ }
+ fclose(fp);
+ return scale;
+}
+
int main(int argc, char *argv[])
{
// handle command line arguments first
}
}
-
+ float scale = operation == DO_GUI ?
+ get_layout_scale() : 1;
+ // runs XInitThreads
+ BC_WindowBase::init_resources(scale);
if( operation == DO_GUI ||
operation == DO_DEAMON || operation == DO_DEAMON_FG ||
break; }
case DO_BATCHRENDER: {
- BatchRenderThread *thread = new BatchRenderThread;
+ BatchRenderThread *thread = new BatchRenderThread(0);
thread->start_rendering(config_path,
batch_path);
break; }
filenames.remove_all_objects();
Units::finit();
+ BC_WindowBase::finit_resources();
time_t et; time(&et);
long dt = et - st;