/** @license 2023 Neil Edelman, distributed under the terms of the [MIT License](https://opensource.org/licenses/MIT). Date _vs_ hours flown. */ #include "journal.h" #include "flights.h" #include "source.h" #include #include #include #include #include int main(void) { int success = EXIT_SUCCESS; errno = 0; struct journal j = journal(); struct sources s = sources(&j); struct flights f = flights(&j); if(errno) goto catch; fprintf(stderr, "Journal: %s.\n" "Flights: %s.\n", journal_to_string(&j), flights_to_string(&f)); printf("set terminal cairolatex standalone pdf size 16cm,10.5cm" " dashed transparent\n" "set output \"flight.tex\"\n"); /*printf("set term postscript eps enhanced\n" "set output \"flighthours.eps\"\n");*/ printf("$Data <name.a) { errno = EDOM; goto catch; } printf("%s\t%.*s\t", datestr, (int)(src->name.b - src->name.a), src->name.a); assert(flight); switch(flight->type) { case GLIDER: total += flight->glider.dual_min + flight->glider.pilot_min + flight->glider.instr_min; printf("%.*s\t%" PRIu32 "\t%" PRIu32 "\t%" PRIu32 "\n", (int)(flight->glider.reg.b - flight->glider.reg.a), flight->glider.reg.a, flight->glider.dual_min, flight->glider.pilot_min + flight->glider.instr_min, total); break; case POWER: total += flight->power.dual_min + flight->power.pilot_min; printf("%.*s\t%" PRIu32 "\t%" PRIu32 "\t%" PRIu32 "\n", (int)(flight->power.reg.b - flight->power.reg.a), flight->power.reg.a, flight->power.dual_min, flight->power.pilot_min, total); break; } } printf("EOD\n" "# theozh https://stackoverflow.com/a/75466214/2472827\n" "# get a unique list from datablock\n" "addToList(list,col) = list.( strstrt(list,'\"'.strcol(col).'\"') > 0 " "? \\\n" " '' : ' \"'.strcol(col).'\"')\n" "Uniqs = ''\n" "stats $Data u (Uniqs=addToList(Uniqs,3)) nooutput\n" "Uniq(i) = word(Uniqs,i)\n" "getIndex(s) = sum [_i=1:words(Uniqs)] s eq word(Uniqs,_i) ? _i : 0\n" "myTimeFmt = \"%%Y-%%m-%%d\"\n" "set format x myTimeFmt timedate\n" "set xtics format myTimeFmt rotate by -30\n" "set format y \"%%tH:%%tM\" timedate\n" "set grid\n" "set key out reverse Left noautotitle\n" "set style fill solid 0.5\n" "unset border\n" "plot total=0 $Data u" " (timecolumn(1,myTimeFmt)):(dy=($4+$5)*60,total=total+dy)" " w steps lc \"black\" dt 3, \\\n" " total=0 '' u (timecolumn(1,myTimeFmt)):" "(dy=($4+$5)*60,total=total+dy,total-dy/2.): \\\n" " (43200):(dy/2.):(getIndex(strcol(3))) w boxxy lc var, \\\n" " for [i=1:words(Uniqs)] keyentry w boxxy lc i ti Uniq(i)\n" /*"set xrange [*:'2001-09-11']\n"*/ /*"#set style fill solid 0.1 #pattern 5 (better, but restarts)\n" "plot $Data using 1:($6/60) with fillsteps lw 2\n"*/); goto finally; catch: success = EXIT_FAILURE; perror("flights"); finally: flights_(&f); sources_(&s); journal_(&j); return success; }