From ac17ed2067ded142c8bc4a2da088690364029b1f Mon Sep 17 00:00:00 2001 From: Maxwell Jeffress Date: Fri, 11 Apr 2025 16:46:03 +1000 Subject: [PATCH] Initial commit --- Bobfile | 4 ++ bob | Bin 0 -> 78816 bytes src/main.cpp | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 Bobfile create mode 100755 bob create mode 100644 src/main.cpp diff --git a/Bobfile b/Bobfile new file mode 100644 index 0000000..c219094 --- /dev/null +++ b/Bobfile @@ -0,0 +1,4 @@ +compiler "g++"; +binary "bob"; +source "src/main.cpp"; +compile; diff --git a/bob b/bob new file mode 100755 index 0000000000000000000000000000000000000000..5b6503b796afbb7aabda3199b9f6997afbba2c70 GIT binary patch literal 78816 zcmeIb3w%_?^#^_vSU?05Em(Z7D1rhpZvwu;V`0O~lmw+JUN)PBMDud934v;x7O=z+ zO|4pNwN0&6e%2~gq}1mkNYMI7tv^MJn)>snyMmfpYNPdM{@-(E=I-6Q_Xb%~`~Up^ zTqWnuIcLtyoH=vm%*?%azvr1hJ2fRmQ`aEvLXA>AIRaBC3EdN8JcU|;c8pf2xwX@@ zA)pV&KgDN->4QMTrQk4;)Cf)awn(}ao-FwkRHYN7d`?&7bU{&2OBZR%=c3z8k+#Bd z3j|(4b3QJwS?04quPjeNb3W3|`rnFt>z{~+6|xawt`umpo~gK{d>t}hhs>v7Ix*l< zQ0bGz(Z6D;Pb(}0jjlret7+DJ?J}Pgo+SR^$|Vz{ z>daZVSW9iz!h}=w6fGq#ooY!F?&B*3_vt)VH?(|~|P_`R)nnw89`1gG7yq?j2 zdhw*(n=e>9dgF+hM02_(9i?f<*$`KwW9;xxqEI`0)IrYpq4xawP@tWhA3Mn3?!f^F15(m9K?tphY$iD;w$gaJgIPhbFvgM!dpwCMj^mC&F{?`t2 zsvPvc*}*>7I@JF%hkn`QFplnbu!p}o$j@`=-@Oic{-;BIUUwM3V;tn%>A?S62Ynvr zQ0@(IkaqTPwS)YR9r$NE=q=qrZ|fc8f9PP(S2^?-%`4HC9YW2va&!lK zo8-X%4+p#b$U)9e9Qt>tLqED5`f&~Ha4ZJv(Tjy9-jxa&i~b_~{-pvjml}#|75Iokx5DcuStPcf(r3+?O)z$<`ePvYvL9?e^ zwy-3Wm0RYkuk`Dc%j-kIfUmm94_ubN!WYy-L0@I4zR2(K%*^sEng`}7y6$gk%F4>h z7MYNxvStOcWa%Y7V)P($j$Tw-uU}jjsHv_kNBLBWW5$HCgd7Md(fze`t8}VKy{Fh; zJkMV;1uea-B$S=0>!FHZ?Ml5WP_rUbp$CG&+8`K`D=W`m74QW;jmhPnqC@k(kPlT% zPC!-`B=~)GK7VCsm8Y77%qs~^mAz66{o8bizp*UY3RgC9Atj+IThT)Qi>Mz(6>6nj zlLq!4X_oHspdsZ|#f{vcLpK0e9Cb)ZC^t}3US+ET=Q`$-og`y* z+0+%aHE3~zKU4&Z@^~6c^^yXejBa^taHTI;u2*7&`9ifAAHEeymNNy`9je9frQxGD zRt8qmz?otmRE$NtvvtyB5{;P>4AcjLjR9d&N%g?R=uRpe_IRiRIKRH349)XYD}z2% z0a-aK0wLX3RaNUJWhZOx`Mx?hqH>Sn9kMc)S5^h;SHVwKt2*V@`9c+W`g}M~X?IEJ z8#xz3Us>6@Uf-y%3{t^CxXqFrVU4v_aAUIUb-LD#s z3W!cT^gfJl3fkAdjS^Kk<}zQo=sOHzOc_4C3{z7L++4_C0gFOi(7RaA1?)z4f(t^w z@YED@LC*aX?}5m4&1#O*tmtu?ud3^+Fnv}9FtYtsp5lcVb$N^>q7Nn+$Ynj0J5)2)@`6W z4rAb8s2JluiK-hRg;e)f3ejeX3DbFC*n|;cpo!YDli;8LBgPv4*-W+mQUn8ey6~$t zE0dh&>*jls44bCXR1L2X3V0ULB*R`N7~r@txgn@Dm_(2H8~bsM$=V%GnUvi*txrJP#Ix$`vFVW#raZ zuI6fS?_-`fW*Fz<9mfIdo5Bsu1r*TJ=tH+oRSvPLb_Lc+hquEL*@R76KU@>pOV$a-3mVhP%4Y?eu1AebEck?k*Up@ zUo>N;o}H0v+~ve>vorDpddU(n=Vs(&YcrQDnLeXP&&tTjm>NgRo@%1SQ}WG8^L<8k z7Oj0#`M*KfaUP6a-@!-?#;$WJP7mnc5a0$e2k{NkhGNH`cm$0wgS4ZVLiq?koc{`` z^w$Oa(TsDkT>zYDSFruH?8&sv2Q{|Ie4aC8yR6_Q?v^r*^8 z>~sv*Y9wyUk8Z=x>rkyprW;PI#LmeOZHgS1y<`WmLEYTZcFrOt1_#8-E& zfbH^pM&Y9i1%9Ii-!A#Pw+p)BSLw}92|SdbK{3X)&4fSJz-n69gr8-??>6DbnDAXD z{4^7Oj|qQ)3EyqPUu42ZWc_K|Wr_)}_G6%AZH^fq771*d!3JX2u&}r%JUY_2(!=7G z@Yn(}t}$V8OL%Nm8J9aOZV69it7}47+!3C1s;AXo@?O}08_|XapxG^jegg;)~^52fIND%&;;+Fqz3X25c zPY}2KcXL=I2!Eou<-gm)B0+fU?ip7&EN%&}&VmWEJ4}B?znmg&`EOTPB#8f1am#=A zghhhzr-@ts+Z`4O!n?&S|BZx2g7Bw{TmIV<774r%Y+|e!jCuM-6s456MljTf3^vqX~Lgl!WWqE6HWL+6Q1^t)#WweCo3di zu?e4H!Y?u5&o$wfnecROs;&wXo~JuWs59ZS6*FLy2`^nOQ=3irJQM$V6F%RBZ#Ur! zO!$o^{8SUZ!-PN2gx_SspKro%HsLQc;kTLag(iI1gr9E0?>6CQnDAXD{7e)6$n6mg z9MQlL4II(H5e*#Cz!41`(ZCT69MQlL4II(H|Gzcx_q0<#_paGL%-iaE_9jj9t_z1! z`?|bqb`IOYis{RH4(Psd&*N{}X@$6>bOq6(-F>*mJx%EpN_TPkQA*R6UNp?3 zdC|?BzK_zhg%|DM^j(yut-EMDr+-T6A(U?B^v#r}ZIx&pr*EJ%ZP7)Sary_8rmeYX zF{f8knzrPkg`5sjnzrJinVi0g(zFE^b#uCm(zN9oP3QDwls<;i8mAXgI*rmjUji|1 zE~RPfE!xfL8I-22*=QH1r%{@=;G$tpXH%NC-lCg1eGa8*%Prc$>9Lfit+r@8r%$Bx z@sw`n^l_A?t+i+!r-xITwsxb-IGsvq+G2|qbNcfek*2M+Xd$ORp)_r&MKd}50i|gx zE$Zg7AGQBEO1mlD&FQBpeLAJPIQ=N4X=^MR z=JZ39rY*7PW=`KnY1#^lc5wPGO4Altw4KvGr8I4QMVmQ&Go@+ED_Y0t8z@a%UD0Kn z{sED82`t*vMwr-PKHEv;xKr>~+kZDmE>oGzm@ZDB>zIei(WGbpWbdJ(11 zrF731-2arOt*U4@r)N-_wy2_AoSsH$+M0@nIh{>udYdM?nbYS`nzpE-9h@FZY1*2K zwsZPKO4F89w3*Y#QJS{eqjj7fPHEbjiZ0`HDy3;lDq76x&)bluE&gaBr{8GRwB_wc z^F`x5>%*d!KV9i$jv;Gcy+Z=36B z0#kcKqv0xU0~5K5qx!njPHQH{9TI~7cIMB!nZVg!dRuzD+dsOFBX3|W^-Sr;Y9Iz`C(sKuz_*>)Z}a68bIvuw%*FQ+ZHr?TbObooCGMyx}d|` zHu`TxB#S9mGi4q5XJn(&z!R3lp(-1MUx^XM!g0Sy+(UY2WVX16=v!Gx+sKVE>7^zC z&%#A<9gyi*&Lm1jGWBzi0N(&?+0pK8GbjGHM?qs}1awsjq(Y0=d|%ru6S&PWj)IjNdC+D3mq z2UIb1egHedAUO|)y@@TK#@=^Zh~62wKi3njGxByXSED1wI#RHH*I<2K zvThNq4Kdbt2-D_jHCTTsSz83_+!*Wc1?zf)wNbKODOgX7v2GBo)duT4$(kcr53Dnq zylo>to=u|IJB<=1E2Omvw$ZQ0=)XlUWfHlAO~5GO zH>?jK9R=QjL8MG*7X$sW#=s>RcFK=d}1b|C2k$sN}wJ7|OCf!bfngoPI#Li4^KNsunY$ zm0KZT&A(F8)@>Py`UxK*e8qX|$OWZsc!=CYo8fZ)@hSQNjVE=;dW%-Kjr@tnX#92Y zjh~E$S{r{CB4;$d5<;Y>>S0e6b4J~wgXhJ>z6B-9LdkkkMUOEbk{_UIhP2MePu%cW z!fKcLG|=2=oZ!xxfB~{)!Pq^O(@|2?(v}-ZdYL@wOgE&Ku2s7~E^a z4UeFjVL39`nUB1Ro5>^Nb1XX)9a%<;VaM!9{!Y}aP}WRC&zSVMKqR{*^%gd!9q21! z+D_KdvaVNk9j8@AMt(k%6wNg_114aq!H-2>sT!OsY9OR_M)o2QX!mxm>!MO{MeoAE zLcl?32r;SZJ=7*`t9Jg_v|GYtmd}y;jcRGAb310OTjQ%$6RXw+(KuC)FJvE)9-)|x z+!3;ooe>XJtN9UXdkS0uL3Rb9Q&6PR&ntgd*rD5Ku7OP5wKm)a3JIlR1nwnmo+D$v>O{X`&}?#}d}m6Gz22`PYzcC=jt5 zCSg+GGOAkJxU@!`vs>2rr(iT|Fl{Y|vqme@?OXBU zbfXo2#=_jxikYIPR6o8=14T*ejBG&Vs1=Etzel=PZWnyU-!LdMZJTf{L_+OpPj*2t z2@=uIe}9aU*080ffY2cYy+!D$j840mEOXrjVr(W>;S8>VjfTGj0gI6O?+fc$z}BNi z+!%WeJy~dI=y%x4Flp#?(XmQHPoSkH4PAxaq!G7AjkqVND?8V9%k;jbPzn)|r;yvo zM(`_|aa*voVn(^T+RI3a)SA9Wy=HMfuv+xn*** zNEXWEFGX^hOx}!S=epe}13J>8+guu=Zwlu*NjqMxO!fN7R7~1xplY-{-O9{}#f2U? zDk0@a_dW8|i-?WA=8SkNUn)8+EGzOEDzfGYE;(&o2qNn2A%Tz3yIF1 z@(2nfS9K?Kf7`9B5Lq!{@3-zJP2I|>QDFp|!nJ~+QQZ(Oa21*07lbeqRJ0`M+{THb zQ3BH$Ia4URL$-0WNOEpi(hwx07h!?p(A48>n>truQLkmOdL6xwYs!-0;JA7tx3GP3 zy>_LM3XFL0ukjVR?juyBL9AUw-qAO4UT$*@#vZBhzgUfG%)0Hz?6O#y|0m)Ut`k~Y z9be{AC=)eOv*cF9CRo^!AtspGaEe6H@D<& zXd$sB6YN{^0Ow=v<;1t-SEA~wVHbTE*OL7RPn=p(NTEwYOPT~0Rd&Z(GBt{p{8hNg zW!#^m_nv38&cT~u8q8`!#yJ{e0bu^l*9pmMeY zXQm)%Tw(LTIY$tMs@3B7!?z@nE6 zStMIz$@}nn>_StdC-v`f7zKkle`n+@f>U=$-+v`GUDoihfdDaj_D~UMElpOxq>#{H z9t&o%h)}}=EX^1)My0TmCX#O1>@tzmWU@pgyQTP9BDqW^UlOylD*PkqbR_kgg1JK` zhe=UV@~Zc^8qJdW0qkW~OSdJM&Bgx9%aM(JLaX2HpI()6Qd-0k%4ZOn%D)jYO?B%hfFx7v7b|RdagfS z>JJGWB_|Qrh&q!5rN}W{u_qFEXW8)X#~^5r{wRTWj16y?c=uI^3aDm%jFDh%)?Z9G z)vQj!O^UDl!zMme`OCQwY4XdY?rs31Y1Ds5B;Ar)C6byztD7au|Nbv|vG_f3>|58oOK9xJf*kQt;`=*k zqxtgbS1jdIj}jcAOi0*i_PmWlgl<|w(;Wry-^PI!#fojN$3k?6oni7VOz(`G0rv%F zmtIda;=h%-cHv}b;x&Rl=YOy$_qKXyk6s*9g!1>D%Y8zHbVlC7MBQ%FhWn6_=r^PK zkvl12?3_oYBAyow;bWkdh8~pA6OU<+PlBNr3p&&ioVY1?8uNo>S+hSAaw6WAhHh`m z;yvCq*X_|7hSM5Vi{6eue20zBCU2*wm$0-xS`62VBc>DxTo4hryJZx$7S#j$&~1Qy z`z|9F9pjbR6z>wni_xd;%kZx8^kRJk!RLAQ1aIe(_hI`7wQ5~JSy4-#i%WPs%RO$C|JLPY>B#o9AP>hPxJyg!iQyUPZGo5El0u$6;^=>vzkhO=chTIm87Lmq3J}o|5(OzTP4kkfk?@$sfw6=UZ^2VENGZ8QC9ixEQ z@P&Bp9bqz5VgZ-f($IzBw;PN`>Ce1HR(s)*uq;F4DdYtD)%e@wf^0PY8}8fA$dA$Gk)Mmk#cQ0*Y7A5!;dzU_UT37#s4R@2 zGx8=KAWhxTa2|C!A#x2mC)aT)G`_$NgTcssDH6d!%ertwoRc<>2lU+Eye;8JX;^z( zo`ZLw9;YGQgI@1lD&`TY-V#)A8>+XtrE9(CeyiEHF5L#p>_qZ6hR2e?~Ht#b0-E;<5*odk7PZOvoPe-$*~CF2uU)S2d>NXJOUi>J1CpT&p}k= zzbRqFG0;#Zc|NmZ$o11~-$p&c17zL5xFMMQ*^7~PAHfehK=?Yylioc^eTP`RCVh`# zM`)|>rLbnD@9|i^#p(O=*JAqqa?e5Z9Yqw`Ze#V2P^Upzce2vr^gRowSaJG}GEaiO zgHpt0AV&gh1oXs(if!CHVt6!=xsvI6dc_c>f)6-F1g*vC;D(XoVW_9Q+dm)V-S(UN z#N|zU5L1)zX?VPXT^mm_e}yoSgms|$u_%PQ9i%-}<}gw#M|g{ndjVQ>l(z*jWed$C zaz5b-vpGD(LAT7h7`+#hdXTm~@YULek+;3qW!s>8ObvP$XL_diCay)#GatpQU!_Gu z%q`MmEt-DG^u@xF7oyWP!H;x6Wt+UM#iV4w!gTM{r_hi#J1Y+koo; z3nS(nMDE4G37r4*Cn-V&M;GP1fpWI&n&0w% zWX*r0*<|=sKAxp1cJn>v`+ZqOEzfw?ei}L&!icp7qUN_mNWcp`I2LyZUhc=))Ek&W z3o(UGUpoCt5e*G=n=e3w+FzT;P@5mdVOK(%2T@MZ=2mQ|#kF~iW1Ck)lx*|suaZNE zYx8;zFRX2b8%#$B_d+QCiD4#OpBoXSVPggdcRx7oN1|Mas8EDul3Dc7l#&vrkZ^l9 zo?+ZA=c!o9adO2dF!P9rkIN-#+uw0PR$^&sTd4(diFpf_n8Nd*K3I_&_Z%j1-Kb*e zYOxxp2@bZ?gjUcMosoNAF-ALi`wC-Jv@G6eooDy{&nD!k-Ss}0+#bF%M zLxrLvT{O!u4bLA?W{T+-Zv?7?=kk{#zaea=Ck%TO2Fu($QtDm?iDh+0UZvS7ZX(aa zq8ZVdq;KWfYY&9eTrVC9#5}o_%fz`gG#Dx7+N;O#;;au!J{9qsv7(IGB`6pWiXv@M z_P)8-!1pPvTu7i^YBKi{{CfNR7SHbNde zaXW@&+hXvN%2`pDQo|@aD)B=^$kYp@z?14IPe}#6-ISoYXW5q2ykaD>5TivhpyU zWQ4FnxTDTOOwPtVS%9X-s(D1O*&kPDUY&+AApy&N+>b3CB6g8^{zKr!oTF0Cy@4Int@^P8mzoZ=aa6Eoa zs}tN8f}LW9<3tctlx~TFP(Yl{?x)#7Mn7ua{Qmw9Qc}wkUh+6Cj}!u!Eocw9#&t|= z8|`yznwaNds9UfE@V1EOdDlF#4EdmI!HHV7tgB!bCK0G=%R2E~g1|t)Qxx=YxM84{ zF=`#{@nNWjy=~%FjMmo#vB@k~JSHvZp9y)*P);-CuJ^XKalKmwQ)@#rOg>Cw>}qz3 z>!_`i+>6kh7p&`8_V#WW%r(nL$f6`zKF{5#M`C*KjfAX-4bv1OjQH(_UQImF%QFB4EqvjiG)ZEIWCN5ZPp~amV zK4fB@j<~1es4HRk{D^Xji2DTYB*RQ$SD%r6ISii;p+g=%W00xe;e%tY zr>$$(*m!C`_;`{&${b89{T$N3x){e>rh#?5{lNOwvtnSiK8JyI8zn3QOP*O|8Zm>K zOAy?Og)DYb)?C-Eg=W!Er$IWIlo?xacUk6{9`Ip!a!7R*#xT1G@Pp6T)wM>A7sGmt z_$6J<;8d6mg;x@oD`{32#cV?M*g9V1PvqKX;);tvDbDnw(A@}{!tmSM%u}9N4S)nI zQZ`O;NN42#K7k(2-a$Km6l7v8O%E@I;DOEIo-1Ng|kx+t)ESTf~YHtkAJar)?gtOeR-`Lb3Q`lJgK^acwEfdBAiUHwlnA{kpyddjF{uBjop2m zwWT;(+i6^*gk8i03qc>pTU(cdmAr^%9g4NBcaU?vA&2@T!P;s$n_+FsIEh^o9`T7= zm~41)y7*AJng!VU$86ms5( z9||-C5@&wpJnntk)NP_(7(;liLynlc$@Va;?<0tVe9}A}N z7apXba`|k;6|x|Ad_k%Y<5ag>R&FMsX;||tLym+Lg|VNgC?U;8sl06!qoS=st76ZV z6f1lm9o)1m=z@GeEVNJo#6C!NQ}WkbFPcQyL*6E;iDVbzo%wjVx#g|MO@v&t)6J)i zT%y_;UV>6K!c5!EgOL|`OE*GBJC*PvKeC10hc?f>aB`dA^frqH4e$Sk!M6?R-GE`h zE^Mr{tGsW}Lyf$-a4*G8v?cO(cI6?t zHlrex+=C{^aeqs4PX%{m7A4l~T*B)VwLfXu&l*ehgZMj9@dV515th>{HZc#~8fHSc z$r^IGEW;YciK3yDu9!8PN=Ri536HFxqBUT!_Y!3>igiv*=Q&Z11uc!chH#HtEB=bBs7yEd7(7=^+{-~n{x@&_kdCldT{ZRXCCx6$J{m1>koAC7R&RW;Mu8e{g#phyo+BX0 zDBRvA7mEvfLH*gJ;x`+c@(;XF1rUD#hL=<+18;X_LQv6gGMP zAE;>bZ2aup85#80;Tb2rhAN^;wvNAY(qf$dgR?*~&M{=1wyLl_D0U5Y%O1jr!tOea3q02Y`X1oPvN39COwicc zCC)7WPA6>~8ACsvkqn;i_z8*8P+M#=oBS7}unq{>1R|78{lRVa1-g2vZ-+= zdlDsLoO8)s6V#Avf>L=&5&;xv>EP^)T!@`B_zf{9s5vEZRZH(bqKUo6<5TG<0x7k7 zOzoG)ZQ_ib_L2`W51BRvP${gxpuSz6FST7B+SP?B;~%Enj#a*p=-5$z1PgMmcj~Bm zvXOo|ino2{@<|%aZm3abL_Dy~9YtSWigncGVuOMTqmFUxsOIj(j&iddsEc|) zsYY85X0QcdKu1c~uH5<*_(EXeJ*mZPbx?6226RVI+^JBKvYE*HK&94#>23OMku}?-4~#$3%&8BHw1nMSquWW7Zir)L^UWh6>1# z_*8<+JerhjxJf6j-(%*MTx1PnAPfzRt>Mq0)^T*loj8h<{0_;jVe@PvYef!IJSEU8 z4@WHLI<1-vn~ldEsAgy!izbvZ_7wtD)1}xSv{0n7ry)fwG1bCd`!TqMGHk z3gOn=lWX1D%-ZU@O8j))3iry&P=(uHTV3s|DR*m=CpY4E;3{ita90tis?*A9%ar)k$gSwm$Ne)z||JXl*3!tWKi@uQONnQjs=6FE{ZWVRwPN%;00~+Y<+??g4*0Zsi8@3bkNEme)H4R8h?z$;$t>$?N6 z8IXQM{$0Rsq66aRpR}9t2+st-4nQy9%YapYf9OJafEu3K*#bBR@D;#`h;zOGybI8c zC%B#iECl=zK@)vNbQ&J~S`T<7BJj2t2si z45%Txy&v!Z;2yveU+?Sd1@r=r!E-3|)NujeZGcMvw*oc+?g88g_%7f!z%K#!08YTV z?+d^nmSkt*DVq&|vjFb_EC<{IxEAn5z`Fq>d!cW@)Hl&zfY$vV_ zU~H~b0Uigq0k9D8e!%&F&jbDxa6jNCz!7-v_8q`UfCXX621$#32+#qucrYg0PY3!0;b|Hw*qhi;CjG(z)b|Pk@h^`4*==C&*uO~;9b!X z*qfXLxEOFgpdYXb@K(SLfOiAlPY`R!F2EkZ9>4-Tcan~mYp(~)1$+sx6!1;J5MbIq z*azU*fLj1(0=@!R19$-NUcga!8M+%V7chN4@&nEV3;|XF-U7H0a0}p8z*hiw0v-UI z@FDsekHfD02>k_k4`4aqPQbN*F9Y5Un1=(W-GCPZMgS`ThvAL*m4Fif>8m1Mz~2JW zS7Xn?*6w=10>DjxzX04#bifGUsegms@U?+!0doO&0+s@%e}Z}gP6xaN@JYZefX@TI z0(d?a*9QRS0*=D>ARYrO0DKm33E*phO@Ox@z<31Q1Nb;##y|S{_5#iW`~t8U@MNrE zFZvYY3a|=r8Q^NbX2A7;9e}z2M7;rL07d{S0EgkzBR2w00DKP63-|#beeL#Nfa?M4 zdQoq{7XkMG?gi`x`~Ywa{1;TnSIX)|T1r!T%1I-J4r|BCi|{AoU(bDgePx34ce2sg*1&pu|%+_a-t4r|sfI`O=7a?TtJEa$%humkzwevFG`hVbu> zXZreJHc;>}>DQ;u964kG3PzIXx8UE6pkr9X=yPNAEkIuf`Wa^Wl`;A&z&C>)Hq%od zV+N9c0RP-LPtG>et7G|T<(UooNoM*bF?ufO8K6%z)0fBSrJzp(9m6VC|M@X`2=s}d zb10?S-w>nU0=fruR-~dYjnTJ&J_q#E%x%Yic!wBDCg(s zC*n7F^jJIY0R1k|o%-Q%ncs=N7xbU@Bmawo?|X>Mm~xuFNz`QGMGPdD<=@#o{9mz(o@)(lED^*NnF zegPg#L9u!i30+cM>BZm=K<~i);NwkwLUL}4={$WfVlmj3og6pv(sHO6bQ(K@_nO)) z#}ActCU~v{&-=vlxQS;D=_U0qR2u2!T9kE4XJ6kO+#9+}onh$Z4$x;g(5ajaDCcU> z-^KmlvV?N>kRUf`??TS_-FX459?2<0Kivm9%Xt+ZLfMQ(&PK?&=efSV$>#c0i2AsJTMs!~ zKwpCU!JABSQcIYLcR%1yKzw4;0>-dLsH)*fy7%5-ucf<-hG&Ml#VRC zRR1vQKMJw$INTe2%eZQ6W8Ks~&@;^R${3w~wZ2=F-m`k?%fQg4}t}tf1BQOEae$l=x()A?J3;UtZ2YnjocD{r1SAjmk zAwSjg3iQ=jqEkIju+%d>R?jVvGwLPhdcFesF`%!8OhX^3VuGc5900unbSIk_h4oG& z=uUl-3wjyo3*+PqXG`)+L2n1$Ne>~=zuQmww}8H(pYpeW-qcU|uYi6}Kjj|){T9%j z;*U{Sw>jBVrQ&|&i%X);$a-%F-_tHsF5ch-AO}x_4Q+;|+-bV1)jVGd~qtkEhhn@*K zt#Qu+uhDLw7;BWjSmt-4*MUyu+u4R2`P)Ii9(4W+qS7nPRsV>Uu?0M3uiDQsREJkU zzY%mV?u|O8&SU{ZKL9$d!)KW3D5D7+L?4Cq^B&NP%=FY*M*dvTQ(m)g1LZFT{bS_M zHs?3ZwV{6UyOHM>(0h=-KONAT|9RA5zPSujj7xg~y`bCafXe6v-MvT5Yle|E>9?l279(23DBt2XKx({?GJzOjEJK5qLpjRWm6a8_}SAagztOL_JWH0DJ z(5IT|p_mNp}E~hz%Hp&+UJ=Dx>J3tKraB@slFRPKMQoH`jSm;22TJyPBzg6 zy50}H2lQ_{)PdxuBixz;y4{+G=$W9;=!Z^U1-bzA>%eR1GL<}wSlicu{?mTSZwGxn z=quv#i$I*)5Bf_E`Q6CV1^N@9Ut`Ws<9da#8;UdNef8nk|67Xt!6^u^RG$-{2%p9H zN0?d&K06;mbvYmO3ecT=&=sKH0(zFYE>$u6y%zLegYKlOJ3vpx{-m9~Q2CF8-h=#g zX8EaNfD(N#=!FjX-JpK~dIsp%nDd)-MKau2>U_sR2GI*auXLchL0<;?rJz5B`#3#6 z64S$4@O%QE>1Lj5WAwX0ABBBbyBLA$uoLvTpgWDbcR`;6dY)N+osjPaZZMX^SAgDM z9VdY2pWvBnmLb<;R0l8Uv`6gJSM&>4pCG>-oosRm`l1{3`>8(P862;xyJEW73_0cf zl+y+JBG8@Uj~>vM^g~Y{g?J70^UUppOaiu(FJ8!b0(=OqVs(}4I6~n|+7rE4hn2ao zD|M~wkEz=2DK7lv!y75CpAFL9OL5&WNNY)@`*nlnF#E@;?J2Hz&eZ;pvVHJdoKlZCu*M_8_W@YrW~NC&z1>k0s25$GN^7 zuRVF3>x1#yr^o#=1*kuba@{upec-xng0^>b4KTNkaosvmyL*i5=?U8PC!B@*@CmN( zpRK)qg6qQx+Gi)YUZ0@-?Zk1wcbw$fc((S!NyNYIWY>q&uv$Y+k66W^PTt7QU+jN@ihv#VBr%|rYPIK)!N4weW+If!lklVHS9PR(y zgn#68SMx+|=jpEf=V<>mmN4&4Lf4>+hR@4sPSI|qH&&2hOyTT%QnW6K8GhxsU!`a- z$kg%6U7)Q=aea`Y-IU_`Z{ovTft=11C0D_tH>S8ANzqVKZHGHF_Nx_rou6 ztxeG$AP$TT{KM4CymJ;VCKTfcf8;u%fg>6?qJbkCIHG|g8aSeXBN{lOfg>6?qJcxv zKzFX-jxH3iU8dFAB#$=$Vr!LImh?hP`U;uG_OG}y1;Ca#Ut@SvPSfzH6kqF~5Rmsp zaZ76*x_BQJaHFKto&#OO1knERWnV4bc46y)E?z7F?#4M3T{!aOYnWUpNwoH{tRL?u zfCI}zzOc;@cS*5Ygg3AF@eHP~mjz+_gD>oI@`Xpv_*y0_s_+wJ!&JQsq+)SY$d@Yr zUwxuIKr-u>GVPU$z^M(lSJexT*>QTCRODwe{r|RgVTbHL*<1tUOS_mY;Uy9-m#|U7 z>m|HR!h0m#D&Z~(UzPAZ2|tx^NR}w_cnQyvFkiyi5?&(VatRwHyk5fFB)mt$trG5% z@Kp)llkigshh)q0B|J;QdGpuEO&Nhc3x(7=9G9oYl?=;VC`>wWND_+cuv)h(IzewSlUOVi_YXy;6)x?!%1V0 zrAp!-v*3Rr@sC^ZFH8Ir7JMoyMDm}s;Ln!$r!08C#D^_-`q^lzzw*1vA5pFC+Dp$S zYTB{dPAP{{bak@)Z)(zEU8S|J^F_lfEPH zy#I~cp@Rhf&dUYv8 z_Y&W6tw2b3u6f{>?b>x4@FaiJw*^0+b>Q}6iN9m1z$^Wa#Kb}TUsMbH0s*w&O8hJA zb%mV~i9YXUSMCpiCplZB9PD56^{&KU)+Ex?C4L^fKJgbe2!!JQxx|nCmcYyDL~~&R zA^x4E0zXH}DUtZ^TKG3f{Hs2}m?8PoF_1`3?`nZi`fQQ-6KLSzQusZOKJP`Dkw0eGstcXO!r=S>pH0aYWC;(e=5+udWkmWk0p3j9q;;07>$_LBT&( z0PRBu{`0;e_?vXWsQT*{5^wFV6A-YG{7j3Tw@dsG>6es$qjw;PKYO{5PtQrwwG4sc zalmiL6Y2Q^Xg>p9)mfq#Y-N5kM%)iN-d+#KJK)a-p6Zh;?N+K=yGi2r287&8WKp9L zkP`ow#R8%1bJ{)r}plV?WJeW>AF|qAC&VqJ*!RE{frm)=D&ZJ z@~!j8EX1!=?yhBmTXv6jx5VEi+cixJ%SJ~N|83Gv)Vy%7#CKgL7!OGP6bu~V&$rkK z{XR6|zr0j1D*x~^;9+tJ*E5p8ZKWV7dv+tPdf`5}N7v0L&O~9WHeMYv6G^Rzqek1uSszq9j z#~~PuRBlz7z)urEYmxZ%vcDAn8xH(S5s=vF?O_Kzy`(|qu95wy%AE+jot#q1zgpU@ z8ozfDe`=bh*2}W`+9t_A)-n&CGES8H%NoI%Ei>RGo9nY$>J#eX3#ZzQx6Xs7!vWgW z^FrXMT|;X{{)tjfsl;3R>jjDbT>6T0kqLjAn|J!f6^%NpH~P*nN7nHKl9%x>+hCwyp!zfzY%znZ;b;#bl}$} z3;tcpgy7Xu{xXR_M%MEhiGK}vJN@@K;Qbjw{?UttfOn;wha}z_m!5d8;QypaFe<&Z zOZ?5spQi}=iJ5|be3eLNOZm+b?_MMj7(RUMmiS3>+%1s!Q{cc!Z`OEwt;D}|gcB-|K-tPV$(+bCTa`xAWle?f91h&w8`? zrI#J}- zZs4h1*|MI<&ev!-Si)QV>b1bz$$wq)Untvkl9ZEuzCHf}!l$D5lwu@*3GfvESl5X< z@Km2K>ILHp$^WRtcU>(IMG}AF1%m(nWdfn>`C*CwEEtbJ;X=W09e1}#{Ey|hQ2p`` ziMOsRmt17u-roSv`jmE}>T`6Vz+2RV-zMe1FXh|{ydD2LlHY14=gqX| zUk^Ohf9oP4xI@Z+QR3g0e(5xc*JcTRYy5ws#AntCM&-xumiP{-Pvs|5Job9a1KzG( z&658^*)=N1l*)>;BkZB;LBOG8=|%SAX3B|7YMy zZ&zFV)ttEk|7|&st9Cst@z<4#cA=SkrOy-m7p@j*#lKSG3oaJ;umIYfz^9wWg+y!r zCHbxM(TMr>?J97<{}6a;*MWsXveL;-5`T^Kd)LW=_e=cmE)@tQ`8pQ?3CZ!xc~G_M zyAr?4V&~6Fyft3B2=!2PkfIrE0iNV9zeHfiOJX|oWye3!0Y49Tk~8~iApqvV*PRk? zwZo4j{v)Xe)vil1{_V>BHSi>VwNJ=JwfQ;)c1-xsuM%mcw`z%hLi&@jlAr9J_=6IE zti*4Zc&lF;x=8R}BlUlcj?F{dN0&5r?M=ylndEmf72k0H1Ie-Ocl}7>Z@yMAD*G9_ zMDSbV+jAuTXDbE&Q&N7r#P`A;>B<&B`yKFZd2a?`;O+G9{A`sL=wYt9oU*FOz>-C13`pOkGf%2lOJf1_% zQhn%IR&kb+P*ygoQ?Cc9_IhJcNhptRi{@8ldGIe&U7oMTFWAuDtW5eKTK%f}P@sB> zuKSysva$>vWaV+8^aZoZ6%Dlw^+m<={0A>U)g_Z^#wE>}fANgz^U)U#WqOgWUp7U4 z%WXy;7pUnv&S`azSD(FT`T~#c#h$P}>)Q*bFDRO+=`!=hvuBrhO7+s|Gv<4Ap?Ou| ztZef~$BO)DRu*-b9t!#@L-j>|Pl*qIJiZdoqIo5`df}Y;MKfkDS)%7;;AA)p!b(Cp z_)J>S{OT;v++qi{N-|8z`QmT8__5n0KhcakWW`Uw_Ls+UaFOA7QwrCFkg-0IrKKoQ$dwtfkJ6%X33 z4ier^Xs{iCbD9O@`sPB-RN=5`v zpl8__D%=$YdRAU}<#MTKT@3koC3EzWxl+&Qp;?p;j?NHAXBKV`)lh~ z6)lW8Upx1B*z@=lcEJ>ycs#`vqKH`)zIFD%TW!o%X(E-jMFYbogf_)H#F(hA{_@St zPRdX)DIxfrSE?_>T|O+n+82^blvvgOEyFAuA!mV7c$Qwup)V;(1l0YtRm9U4V?%FF z!N-6r0={xY#|{o?V1}~tnlMjOlw|fE2eaX%9EstE%%P~5cZ{$)A*LCa7JCY0loaq( z7te!#EV>wLM?c@#;Hh$N3bQTAwNg1Q}KM&b!QeWE@Q!|)gRCTGzlxBxuw2Q zUm2vZI|$>Uwu|`yvjIN-tv6N%Rw4$-*6rGH_}0Xc6Aje(uXY#BMf5~8PvfjQ%#=yD zZUH6{`SozI@jxMMfnE~I&Xn`Hu_V+(z7^a#2bpk^P&3r3Vg~bIrJ0wPj##AnbPh~) zzc1vkD8$CX^ch8ZRz{9A7bE+?EPD#7eNB3OppQwmspNhlXT1!KEXN9b#8 z%GApBo!pekkK4i)gGZTIQgxChjJ<=HZ#mQ`XJ!_{MaKxFQLIf68stz!@E;x&@Eo*W ztX?G6Ej%N|?d}fH;1GL+v@Ii6rZaVH_Ae6qz38Zc=(G4ud1J9Oz_WNhCI$oq#@?GL zd{%bC5i{1V(+hOJ(^`~bHx-`4MXv}|=mGjECTtm-*T}-65jl9V1Qc7~bTk8v9b~a> zT}aL^!vU0aEs07XbQb#*d?Xks=j{sY>K|;ecen=+)(s2Gp2Z@}CA9a3nX>`uHcNTH8^;C>!T9lU7nb)P#F&}C((7%VcRdjxdr?qH&<^v?em`a2VFijn1R6Vn9!i{2RTAv{M{1pHUiFr=-2KS_@TN_afru+QU6 z&((O!csreT@t%1k6;O!`3bzsDllhYb?T%FPlv^o|`ir zJOqQjRs2wj@OqZ0U@9pe7Vi{|XXTR5tiw#HW8Vti%aWgtA}G6#9|6VQ0DfRIsWU^h zRZr^!+N{r%U2>>l57u1^bb2K4K%wU@o#!A3GoP)TGNGn!n^7?naA_2Jl70Bk^C$K&Sba%C}=?ZR30n|&-vBk zA-j-H!5l>&G+GX#!NXmen|xPYoti2SbsW%E13jkUDYl8gX}k~I49D}icyQO4z>?od z&pw2`J2WHL{4AuNH4x9$vD5Bnzl_fgd?5sLAxnEpLREOi7qzm47uZa}L%+_usCcxk zAEUwa3&V4Gw(anruHq-FFgT6pCI-$j>|!4o{C$06NVpzu9h*I!IMR78&PbD*sqpAG zg(vxXRwjNm8c!SZgOr4rO6vfTq-Qb_cnZE;<7rSq6f^FC_$W)no5#n}c#u~v`;u59 zW$V-Vhp#K}8|1-%%O>2{bPj}m=VgXzwjZF0S+4h}8xQt;_~B1QbmD1!%GWsZk2}3c zCNMCL3?0r}?e-R8Mlld3oae{S-iz&g96=e+ogeCa_f;MzR~~L4sx7<-RRw?WU?2}j}>y32vavl2;) ze-p)SKJwGsA$jm`aY4gZh@#Sy%vj*_!M1ulk%$K z#%j}pH5qF8^zV8`&e2&O&S-~TtBsS7BsRSA@%j{IQBQSTpQs(?+Nyd_@$5wa1)UzV?|;XRpX0F(3P$W_yuVaib`@SP!hz=i4PHEz z2U&E^O*;w2YjzObh$m2*mcQRb;6U_Hl37=Tw}Ck zVK>6?R>}x$b{u0b{G#sycva0Gs-%|#eKjlkd1uVwd1LGc<>2i&3ZVO4UQeO-%gpgq zT*yVi++n|oYkKg5Lq^iCGN8j!?4gA1!b$PyGrtOS_%-3(H+WlP`^_@G537ZStB}t! z%A=!09^3rzZ)JU5Ej=u4JE8~h>Ab8gS`JvBHMTK$)9X1gzhzP1z;uwB7O|kPj78I1 zY5k28$9*jxv*yS*EYzFK=C4fa&a!6l|Wo;_Xy76Z}CB}=?%&xqLf_TO12+1%8w1yL?~ma zL*KemI|;Uf`%wJ_Jwuv1dzq+P&WsU8jzS+$Wkb1DCdawuM zV-JDQ*{%86(j2_7VLeYazhpH~Co%MTj5><34{mM7Emn5oB>2#K9-q@d-o$yc?5e+Ku@ScX;B?+yGgf5X=Wk;&BDM1YAR}=q2G&Dbh{sDhN`JBng?u zGg2`PSf1HElpQ(#?tv*}6OT~Am`4qrNl>-~gmGfW}d;m02Iq!Y&<=rB`5k};6};!HFu7H49pTDHIVJsDpx zK=TBiqrwtYFRQOtzKljsqOA{*rlm{5v;J9#dijwDdhRRe3$EfteY`Ww$xhC&r{J>= zfnXzErB3v%*gG$l%cgXnkkL@E=|^6uVos$EvKo9eE#&x^M#9*GE1Tt`4rWh|xWVT2WSfVw6MX$Z z*skUCHv=@G$4;6pOZQ~#*Vr_3+(J)g3pg);hxb-FL|&F!4~*k8HXIUG&c;6QK=i2b zNV>&v)x*{_GA!RxAP-9iASN@WDj5*|}Z$};-8j*>Bh% zr9nNaa|UP$0UN^`9Q{1@OCLo`q7m?EMompm&L#07G>>jP2u$w=+PnqC3j=u2ul3VH z=C8XI^H<(zyILw1f8R#w8@E(+8)RKwNJ zoQdyD%9mX%Lp~|RtJlqGspQ9}H$wD6Lv7Hv0#S&FVpPu@j(99dk{pWUKt;Vgi|mi8 zttU~3Q%}><)7Z1-Hq%_ALSqi8jMahtsd!ShgQo!H(6l)Nw=9g}o(s@d zRM*ysMUgsSRFyr17fBal7aM(P`XmtTY+Ik$$cKlZr)f$M7?KaO_h89vFqyvonYb3p zyK_X*EIOd}cwHgRACtGL!0E=_z9#hId#Z~kOuz58upL7mf zX5GtFccK9LfzHWh5{M*K5|A~uoh1~hE{1A2CA%~ zvZ{P?Wx19?UoQ{VY0OyRtFO>9%2(AusDPoMpvW(A$0c;o@TicFGRV8Sst`%U!w?y` z%~(;38$64Tzx*;|MzEH@PMHy?(3b~&)d9Vt970qI(*1a~vdJH)3*l2;6eWoo<3m}K z>C;^-TKCaAQ$nJ;M-6<{m3|1Q4N=LcJbeW-1KUVi2EM{VU)L7je?Q#6^t(et@h?>h zDjp}cg2cCX&UgcN6Gp}H~%;%C&@hMmbJpG2fN~_toeTo92Fte9Q%E%OdxT| z>WBpXTJ7gX;LQ2mGM|EBX%9+3y1Y^Fc1!;59KoQVs;|ng(hA;X$*+DtPQkOtKuwn_ zSD`lH#$12(JCq8JRE!c@+y8*fuli4GmW&e8?}3{yRd0pciW@3l<=?qRP!v2_b-c`A zEq|vafA@O9s9?otnNb33`7c`Xdw(t%6?{uoOy;+i-wnLk|4jI$U{ug8lEzPYk#TwEBHCs=(k8z{*5yKMwwsn328C=SNI`Nz8agvqkdn$LzOSv zuf~VUr|NYl@=*V&@;A#LUfKL0Nz=3f0gS&Yzk+GVY|bB%`6Dua4-rk5%BSEMOMdk` zTzh^eGATcyM5uf!eJb)3PSs!ij#`h*@3oX)s4_}Ozb8yAnHIdtZ}lHaoEch7j3uQ% zBn0k}0!~Ge`dQUqwd*M0jJk^~{5SG~NOa=&TFjR!SK*Guja~i+&k>xHEEz0G?f(Hr CtK?+> literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..4d2a54f --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,153 @@ +#include +#include +#include +#include +#include + +using namespace std; + +string version = "0.0.1"; + +bool isDebug = false; + +void error(string input) { + cout << "\033[31mError: \033[39m" << input << endl; +} + +void debug(string input) { + if (isDebug) cout << "\033[35mDebug: \033[39m" << input << endl; +} + +void log(string input) { + cout << "\033[37mInfo: \033[39m" << input << endl; +} + +int compile(string compiler, string source, string binary) { + string cmd = compiler + " " + source + " -o " + binary; + log("Compiling with command " + cmd); + return system(cmd.c_str()); +} + +int main(int argc, char* argv[]) { + string bobfile; + bool bobfileLock = false; + for (int i = 1; i < argc; i++) { + string currentArg = argv[i]; + if (currentArg == "--version") { + cout << version << endl; + return 0; + } else if (currentArg == "--help") { + cout << "bob" << endl; + cout << "Bob is a builder frontend for C and C++." << endl; + cout << "Create a Bobfile and follow the documentation online." << endl; + cout << "Then, run 'bob' and build your project!" << endl; + cout << "Arguments:" << endl; + cout << " (filename) Specify a custom bobfile location" << endl; + cout << " --help Print out this message" << endl; + cout << " --debug Get debug info for bug hunting" << endl; + cout << " --version Get Bob's version number" << endl; + return 0; + } else if (currentArg == "--debug") { + isDebug = true; + } else if (currentArg.substr(0,2) == "--") { + error("Argument " + currentArg + " not understood"); + return 1; + } else { + if (!bobfileLock) { + if (!filesystem::exists(currentArg)) { + error("Couldn't find the file " + currentArg); + return 1; + } + bobfile = currentArg; + bobfileLock = true; + } + } + } + + if (bobfile.empty()) { + if (!filesystem::exists("Bobfile")) { + error("Please provide an argument, or write a Bobfile in the current directory."); + return 0; + } else { + bobfile = "Bobfile"; + } + } + log("Using bobfile " + bobfile); + ifstream file(bobfile); + string content; + string line; + while (getline(file, line)) { + content += line; + } + debug("Bobfile content: " + content); + + vector> parsed; + vector buffera; + string bufferb; + bool isString = false; + debug("Parsing..."); + for (long unsigned int i = 0; i < content.size(); i++) { + if (content[i] == '"') { + debug("String time"); + isString = !isString; + if (!isString && !bufferb.empty()) { + buffera.push_back(bufferb); + bufferb.clear(); + } + } else if (content[i] == ';') { + debug("Next term..."); + parsed.push_back(buffera); + buffera.clear(); + } else if (content[i] == ' ') { + if (!isString) { + debug("Next thing..."); + buffera.push_back(bufferb); + bufferb.clear(); + } + } else { + bufferb += content[i]; + } + } + buffera.push_back(bufferb); + parsed.push_back(buffera); + if (isDebug) { + debug("Finished parsing bobfile. Contents:"); + for (long unsigned int i = 0; i < parsed.size(); i++) { + for (long unsigned int j = 0; j < parsed[i].size(); j++) { + cout << parsed[i][j] << " "; + } + cout << endl; + } + } + string compiler; + string binary; + string source; + + string editingTarget; + + for (int i = 0; i < parsed.size(); i++) { + for (int j = 0; j < parsed[i].size(); j++) { + debug("Token is " + parsed[i][j]); + if (j == 0) { + if (parsed[i][j] == "compile") { + compile(compiler, source, binary); + break; + } + editingTarget = parsed[i][j]; + debug("Editing target set to " + editingTarget); + } else { + if (editingTarget == "compiler") { + debug("Setting compiler"); + compiler = parsed[i][j]; + } else if (editingTarget == "binary") { + debug("Setting binary"); + binary = parsed[i][j]; + } else if (editingTarget == "source") { + debug("Setting source"); + source = parsed[i][j]; + } + } + } + } + return 0; +}