From 41b7075457da32e7601a32fd5d36c1221441c580 Mon Sep 17 00:00:00 2001 From: xamidev Date: Fri, 7 Nov 2025 17:35:30 +0100 Subject: [PATCH] Parsing datapoints --- .gitignore | 3 +++ .igc.c.swp | Bin 12288 -> 0 bytes a.out | Bin 16352 -> 16344 bytes igc.c | 75 ++++++++++++++++++++++++++++++----------------------- 4 files changed, 46 insertions(+), 32 deletions(-) create mode 100644 .gitignore delete mode 100644 .igc.c.swp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0b40c67 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.out +*.swp + diff --git a/.igc.c.swp b/.igc.c.swp deleted file mode 100644 index 5c11ac86a9806303cd8a7e095513dded4a80835c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2UuYaf9LJ}E=-EFO1uN>q^h(-GdbvNjifR5eA&F@)O@q0#l{B1lyK{F#_jcFa zximJ7iqI!T1$|ZVFZd#g4?YM!_$mmBA_(@e&lnAc9g#5g3k9cq8Z}P<5ggnC?=BW0YTy-W{z{NRslYY8W7r!gA^i~_f$Ku0!u`*)K{Us)gZ1KIub{`(egX-MO2 z6fg=H1&jhl0i%FXz$jo8FbdpW3P^tkc^)C(5r_R$eBZI@9#_rHC}0#Y3K#{90!9I& zfKk9GU=%P47zK<1MuFQ<0cI2O$DM?PcOiKE|3CTr|N6az{0c6C7eO9;xrdN1!0X^5 zSOMpO4d%cw=mrmhec-R%7#myx-+^zzN8m&726zpu0Sf-yMab9SE$}9I0odR;=mERH zFFOhO27C-&1+Rb*oCbs75pew;LN0^%!6ncDQ(!OH39e-bc^Etdb^`)_$F~kw!Da9h z_!0a7z6YOyPrdhqkvK1wo_n@WCAWbflDXPOjm333*+OH^Yepvt@tbmc?}=8)f&R#xrX1ZTG4;) zfA}Pm^iEFCo*J7OB$SJq*zO@oJ)gT&%|*Myvu-x8%PwnkOq^LI8PTA* z{Rjh5JU%@$*+UyX9i|QCmQ!x3Yo2CG;Ko#oiERl(ua?&0CI3tK3n6Rr0fbD4R1hONay?aPDHS+cEILH{y2&cRx@nsU zH>V29kf$n$9#vjmT*3mC%8*Er$K z#TFfuDB#GbJ#~UnV%UpEkbP9Cy;zA$A=;p!PBrShMx9l7Q5Tfr&T75ebyldIK}9b+t$|IW{%@oxlml-USr!n-SKu=EaY@ztU5M# za(cF^Qqw93&kJd_a{AOE59<7VzNK<|uF0ip&K*?0^YkDRH&VUdo!LK3k&*ETMafW^ z5#a2?jCx(DNNSRzGuldn$fC=hu<53kRPtWHCa zZ9E8EZ(~y^ZAa9%v1Fxmr^C;Xtvt;`fFg)1fwnY<21d;i-?!_4~Ni@PamzQ9Y=IKDR_e zSWF5$UJ$=kV@`jquhduR?dvVqN(J9;sM*Fs>hpkxlDRfg@c{krv+0R3bg944l5Hnm z#%Mhdyb*1PdeZbOHBYhI6wea1Z@hnSXf3bptE|G7d4RVkg;L^z=St=j(IT-7hhjw> aM^xu|Dm^-1oj^)dOHhOBeGf>nhx`Mcw&p1S diff --git a/a.out b/a.out index 92bfae385f030b4eea42a28cb737f0e97c83bb42..73c46c56734ba83159884fedf775bcc272813513 100755 GIT binary patch delta 2411 zcmZWr4Qx|Y6u!5ATcOYvw{^wA-e4dT?Asq~>o(fXH9SHj9sdY8nhX?;vcM)thTT#z z)LPv*MuCKcD9BG1M7tnc$Yc&!76~8(EKy^Z%uoenM54nVp69-ITToxp_uccI@0@f0 z-o1?nVuAK->v0QF9=8f4yQAQcac7!p?d-TN8gCm^<2G2SXzZk_)d};_+Nx2lR%oNY z=d}o`^FjhO>K(Dth|pX{@FnF0!-JRf+2n8 za!RyH4J}!O$VX1z>v$ha>d0!&HBa1NB&d9z+g*xZLpGz$o=ep#rmH~Oq0V5l`>d+z zcK_S!hBm`0Iu^b+*x);ZX;<3eXlK^e^j($@sS~1>{3TgBLgdUl4npp&cbIeEP{Pf* zZX!jh{USloKg*zEv?)^x>o1^C+HtzcD96pYtxVj{5%ooie)f|v)0#u~fn=Rra2xfc zdFE0nSiOxkrO=N}CMjIa@+1mmSxz+I>zw{9ylc(PS>{>lS+ZCP-ttMI?YqAy#el@o z2eK@MyfOI2njIMM9z%|-AMk#Lxx(JvQt&i2e@@niyjQuYRn5!X)T`!2Zl=-ws4vWX5gZbB;S)u-G#1hzb6E-n1`_*{RE-X~i%j)aib_Z7 zJfpUxC<{`9jA}?xtgB}kRhOc&`J9Y5pCDBWo6~w0VrOsadls`khrO|#J`)D@1z1#0 zDoQ}Emr=$Pm5)>pqkj8~%@lUMW(Ln~W4XPU+pFeYp30qrL0v4UFBLQksbh>fmZA!! zaKIa@4X?$9Hx^zoi-GxsJEzv%8)NO-u#eS3l=4+{3tVF|_l~k=xRH$%6^$7xzF<*k zDO~}dP62`&(X-gI$W!O>Ennsh-SvhNp>y~(1dfhn+hgD)cAX@y{)s~jo^i7nDY7oU z%Cp+D#`D~o{-wCnaU&PvMvh4X-VvroOfbAT1?35x3Ulx2;Al{e=}jmph^?d^jA8O7r(9_`Dd=#`8Hy7usWwt04pu&o=({0a{f zDRhlxzsMYzT?%d=CC$^48f8=;D>6Q)S5bKKXZ$X2TCr!NEcPQ@U1h|B{n6c7ImTT= zI?NCXGldqR#=mK!Q<&E9vM|rLSZTltL3Gl`wUy;KSazNsxFgH#WXT_q#3hK6 z?#l8RMBP1EzJ<6B(L|wFm_lPPB#8QK3~YtWys7?1Y$cC8RFZuBu_Ln%Q{7kr zP0iEe3=7`TMs#oMg9hz48dF+&4!T%r%dfKRM@;E7tIsRWwN*Pb2NFL z^81D?f}ftsrNdx!)KdZ*9J#a~LJk)_41WAAQZEteN^Sc2=$!(eY96Bv(YDgP)ZFObw0T{9gTKk&xN*ZPO)zmzNA%R312kG+ z?x#2jeHEgWurrrE9Q%PfMe7-EC2=BnoZ^@`XL04WIp-J!zN`XtJIhjwoLua~Kq~_j z|9e!5#{K*@-w)lDWpKRGqA4|irpjR)&QgmHLq*j*x((W@MCp6kMWav$G~P~mbJ+e_6XFG8EEO!LPa=y6T|2lQ<8 A`2YX_ delta 2352 zcmZ8jeN0nV6u-A0&|;puB0=9KDKDL+?KQX!}8!&Z7QDK99q>zq{ z2AdR*n`|yqx5c@COh^|eBw`H{Br~EeDkdgkHnTdH4KtU4+w9JLA06X1@BZ%jo!>q8 zynFAvx8uGEUnrf6Scp_yG7!Ee|4U;eQMMvIw*=$y1lc$a92JZqDqA6_Myp*TTV2pW z|Fm`SiZu(1WttSjN1CzJuIjqBs%Y^0w>}*cZcNqu4xI})cw3v7mW(nMT^_GP>XZ!q z+NWtA+|>%y51h_QtFdjRN2Rt`YTKlGE~}wQmrhe*uTG$+m_qNsC<~!alWN-Eyl?j_ zO>Ly1bw@K8^k?^Ih!%%qj}B|~#~4-^ZbVe3haBqp5cATJI)!V=++ifB*`?TDOMVS$ zMVpl?l`a*4q86r z4hn>9XVm?s7?#D)z~`3Sb^VxfEbWe+kVlPnbI!X`Y;%r_h{4KD*h38J*DxrXYEBco z^@AuBJ0s1;*n~N!or#AOM18)bU$zjkxNI7PQf@*1J=BwyXV;7V%AKq!2JSVR#O}&r zG@|*KMzkKQVf|U~aXG$qYeoMrUNP{_NpZw8fpUU4&hY*b+%00aXWV?6mNsg>r= z_mMis_DA&fC$X3q@I)I&JY$3md#;iZ&jr?P#52Hvbrk&(YW{{a20YglQ!AU-6jN{Z zN$xSlPL$o36w@f1qmmgE=ZHbig#otSV&JkE7>WMy59Ywe35sU)ouBC&QGNbMiX3K8 zk*1<_K$ZGfoKKiGh)H5QBK2Dz4QPoD7^9BFDFafM7}XW0EJ%$qswGab zAullM)ye3qfXNo0p1&`DqqcY=EE>Z)GN{mx^a-4`2SE<6&k~rYO z`FWrpU>^gzFmyJ9ZWkXI#*MYX#Aa{g40=hl<8NvHeB+|ztC{I*lzmb2X;*fYd2pNs zsp|H!;Sj}K8C^U>)R@eJQ>@wD#9j;)+fpU7)*^vukie^xfVkJX*SKrk-i;ePfxGTC zfpKa4+jC~*_S0XOoB!K_b5f>dm`zCRUVl;yuAab2z>K9Gz_Bd-Q!#UA70yT~BnBHM zH@mmI1QV%6b9-jS+ZpE5>S@*=(`>0bC)w@|rY%ZhBi>*$n*A7#&d*%-1W$?h{0yP^ z%+L6-Jm4_zDJILnw4})!9U}PQ7%)Y{P`J;w)p(FMWbN9s+g{)Bs)Ju#{~RwF4nB!2 z-jDA9T7DU<=7l0cv$W;x6Vl_;`&%s5j+i$Yi=9L)Mf4)t9>!u3MAM^K>_@oEKLwZh zBsu}NctLN$J|Rf9EvjtAmU>{JnDF>)!DkajdBBc(_gu?+n&*=fRvpm#b=o@`Q=%ao z>2`ehaF5Mtf>2_1#xdoTQ%^f~sI#&W?k~xqy6<|@`A(4}c`x+sNy z0PdyMj4zl5$NfrqeQCz9dl>qPtj1yVT5#N2=viuYtJm&AWti_2@9c4JDlreG%0ew$ z1uVB&O!})-$5^eOhn^I?>E=C^i!Dx*L1xD)K%Qp``U2DyTWLeMt@vXKi{1M$ zSl&m&wWZrA^+JD{z@@Vdg+;}SFkL3Vc87&#LzzQJQZ8z|uwkELxzVNkPjEq>qa?nX z>Z(Ry+Tk;VDSYCrR QXGxN_M7A<1yji;7Ukb0me*gdg diff --git a/igc.c b/igc.c index 6077f05..1ddae71 100644 --- a/igc.c +++ b/igc.c @@ -15,6 +15,46 @@ #include #include "igc.h" +struct IGC_DataPoint* parse_datapoint(char* line) +{ + // There probably exists a better and/or prettier way + struct IGC_DataPoint* dp = (struct IGC_DataPoint*)malloc(sizeof(struct IGC_DataPoint)); + char hour[3], min[3], sec[3] = {0}; + char lat_d[3], lat_m[3], lat_s[4] = {0}; + char lon_d[4], lon_m[3], lon_s[4] = {0}; + char baro_alt[6], gps_alt[6] = {0}; + + memcpy(hour, line+1, 2); + memcpy(min, line+3, 2); + memcpy(sec, line+5, 2); + memcpy(lat_d, line+7, 2); + memcpy(lat_m, line+9, 2); + memcpy(lat_s, line+11, 3); + memcpy(lon_d, line+15, 3); + memcpy(lon_m, line+18, 2); + memcpy(lon_s, line+20, 3); + memcpy(baro_alt, line+25, 5); + memcpy(gps_alt, line+30, 5); + + dp->hour = atoi(hour); + dp->minute = atoi(min); + dp->second = atoi(sec); + dp->lat.deg = atoi(lat_d); + dp->lat.min = atoi(lat_m); + dp->lat.sec = atoi(lat_s); + dp->lat.cardinal = line[14] == NORTH ? NORTH : SOUTH; + dp->lon.deg = atoi(lon_d); + dp->lon.min = atoi(lon_m); + dp->lon.sec = atoi(lon_s); + dp->lon.cardinal = line[23] == EAST ? EAST : WEST; + dp->baro_alt = atoi(baro_alt); + dp->gps_alt = atoi(gps_alt); + + printf("Data point: %d:%d:%d | %d°%d'%d\"%c %d°%d'%d\"%c | Baro: %dm GPS: %dm\n", dp->hour, dp->minute, dp->second, dp->lat.deg, dp->lat.min, dp->lat.sec, dp->lat.cardinal, dp->lon.deg, dp->lon.min, dp->lon.sec, dp->lon.cardinal, dp->baro_alt, dp->gps_alt); + + return dp; +} + void parse_igc_file(FILE* fp) { size_t len = 0; @@ -25,38 +65,9 @@ void parse_igc_file(FILE* fp) switch(line[0]) { case DATAPOINT: - struct IGC_DataPoint* dp = (struct IGC_DataPoint*)malloc(sizeof(struct IGC_DataPoint)); - char hour[3], min[3], sec[3] = {0}; - char lat_d[3], lat_m[3], lat_s[4] = {0}; - char lon_d[4], lon_m[3], lon_s[4] = {0}; - - memcpy(hour, line+1, 2); - memcpy(min, line+3, 2); - memcpy(sec, line+5, 2); - memcpy(lat_d, line+7, 2); - memcpy(lat_m, line+9, 2); - memcpy(lat_s, line+11, 3); - memcpy(lon_d, line+15, 3); - memcpy(lon_m, line+18, 2); - memcpy(lon_s, line+20, 3); - - dp->hour = atoi(hour); - dp->minute = atoi(min); - dp->second = atoi(sec); - dp->lat.deg = atoi(lat_d); - dp->lat.min = atoi(lat_m); - dp->lat.sec = atoi(lat_s); - dp->lat.cardinal = line[14] == NORTH ? NORTH : SOUTH; - dp->lon.deg = atoi(lon_d); - dp->lon.min = atoi(lon_m); - dp->lon.sec = atoi(lon_s); - dp->lon.cardinal = line[23] == EAST ? EAST : WEST; - - printf("%s", line); - printf("Data point: %d:%d:%d | %d°%d'%d\"%c %d°%d'%d\"%c\n", dp->hour, dp->minute, dp->second, dp->lat.deg, dp->lat.min, dp->lat.sec, dp->lat.cardinal, dp->lon.deg, dp->lon.min, dp->lon.sec, dp->lon.cardinal); - - // Debug - exit(0); + struct IGC_DataPoint* dp = parse_datapoint(line); + // Doubly linked list of points (so theyre joined in chronological order; opens possibilities for analysis later) + // append_datapoint(dp); break; default: break;