double distance_loss_factor_per_league;
int max_dist= -1;
+FILE *debug_file;
+FILE *output;
+
+
#define CTR(x) int ctr_##x;
COUNTER_LIST
#undef CTR
static PotentialResult ****results;
/* results[start_isle_ix][finalisle][midisle]-> */
+static pid_t debugoutpid;
+
int main(int argc, const char **argv) {
const char *arg;
#ifndef debug_flags
debug_flags= ~( dbg_sql2 );
#endif
- sysassert( !setvbuf(debug,0,_IOLBF,0) );
for (;;) {
arg= *++argv;
}
}
+ if (debug_flags) {
+ /* glpk insists on writing stuff to stdout, and it does buffering,
+ * so we route all our debug through it this too */
+ int realstdout;
+ sysassert( (realstdout= dup(1)) > 2 );
+ sysassert( output= fdopen(realstdout,"w") );
+
+ int pfd[2];
+ sysassert(! pipe(pfd) );
+ sysassert( (debugoutpid= fork()) >=0 );
+ if (!debugoutpid) {
+ sysassert( dup2(pfd[0],0)==0 );
+ sysassert( dup2(2,1)==1 );
+ sysassert(! close(pfd[0]) );
+ sysassert(! close(pfd[1]) );
+ sysassert(! execlp("cat","cat",(char*)0) );
+ }
+ sysassert( dup2(pfd[1],1)==1 );
+ sysassert(! close(pfd[0]) );
+ sysassert(! close(pfd[1]) );
+
+ debug_file= stdout;
+ } else {
+ output= stdout;
+ debug_file= stderr;
+ }
+
+ sysassert( !setvbuf(debug,0,_IOLBF,0) );
+
max_mass= atof(*argv++);
max_volu= atof(*argv++);
max_capi= atof(*argv++);
ia[ni++]= atoi(arg);
double val= value_route(ni, ia, 0);
- printf("route value is %g\n", val);
+ fprintf(output, "route value is %g\n", val);
} else if (!strcmp(arg,"search")) {
MCALLOC(results, argc);
int pos;
#define OUT(absperl) \
- fprintf(stderr,"\n================== " #absperl " ==================\n"); \
+ fprintf(output,"\n================== " #absperl " ==================\n"); \
for (pos=0; pos<nhighscores_##absperl; pos++) { \
HighScoreEntry *hs= &highscores_##absperl[pos]; \
PotentialResult *pr= hs->pr; \
for (nports=0; nports<MAX_ROUTELEN && ports[nports]>=0; nports++); \
int finisle= ports[nports-1]; int finarch= isle2arch(finisle); \
int midarch= route2midarch(ports,nports); \
- fprintf(stderr, \
+ fprintf(output, \
" @%2d #%2d | start%3d mid%d f%d:%3d | %5d %5d %4d |", \
pos, nhighscores_##absperl - 1 - pos, \
ports[0], midarch, finarch,finisle, \
(int)hs->value, (int)pr->absolute, (int)pr->perleague); \
- for (i=0; i<nports; i++) fprintf(stderr," %d",ports[i]); \
- fprintf(stderr,"\n"); \
+ for (i=0; i<nports; i++) fprintf(output," %d",ports[i]); \
+ fprintf(output,"\n"); \
}
OUT(absolute)
OUT(perleague)
+ fprintf(output,"\n");
} else {
abort();
}
-#define CTR(x) fprintf(stderr," %-30s %10d\n",#x,ctr_##x);
+#define CTR(x) fprintf(output," %-30s %10d\n",#x,ctr_##x);
COUNTER_LIST
#undef CTR
+ if (debug_flags) {
+ sysassert(! fclose(debug) );
+ waitpid_check_exitstatus(debugoutpid,"debug cat",1);
+ }
+ sysassert(! fclose(output) );
+
return 0;
}