From 9f4aebef6483866305174da514240f4fac312bc3 Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Thu, 4 Apr 2019 16:16:28 +0200 Subject: [PATCH] resize & signal handler --- driver/Makefile | 2 +- driver/cli | Bin 73640 -> 78536 bytes driver/cli.cpp | 77 ++++++++++++++++++++++++++++------------ driver/main | Bin 0 -> 61936 bytes driver/ui/view.cpp | 24 +++++++++++-- driver/ui/view.h | 4 +++ driver/ui/view_info.cpp | 30 ++++++++++++++-- driver/ui/view_info.h | 6 ++++ driver/ui/view_main.h | 4 +-- 9 files changed, 117 insertions(+), 30 deletions(-) create mode 100755 driver/main diff --git a/driver/Makefile b/driver/Makefile index df21db9..14a27cd 100644 --- a/driver/Makefile +++ b/driver/Makefile @@ -34,7 +34,7 @@ help: clean: @echo "Cleaning..." - rm -f $(OBJECTS_DRV) $(OBJECTS_UI) $(OUT_CLI) $(OUT_MAIN) + rm -f $(OBJECTS_DRV) $(OBJECTS_UI) $(OBJ_CLI) $(OUT_CLI) $(OBJ_MAIN) $(OUT_MAIN) .cpp.o: $(COMPILE) -c $< -o $@ diff --git a/driver/cli b/driver/cli index 86ca5506fe779c5d41237d26f295182ea04840a7..8d652a763a49dc9bbe74649e19b4c0eac8b89b6d 100755 GIT binary patch literal 78536 zcmcG13w%_?_5Ted5D~ml0ppXat~QZ}2@oV`bVCxj3mZ&HP~>3<$%X_%k|w((fRA7{ z%DQfwTI!?PN-eckZA)7PM1}B5!2Z;Ls0d1;qTF>sq98=9?Em|ndv9_R+1B>+@3v&_ zIdf*_%$YN1&YYQhy*JA_sZUgtWd8a}H%kJ#LC4sQjM(AbG*quP^?w-1t6(zMo#Eqa`ynTW1<$9ze~rOsU#@^!E)qPeOG`; z74cxEt>@_Y)#vJ|S&rQIi z*B@W_qi0f?=fOX7+%N*^QFXTtBCZzymgC>rqeXdx@A=KUfB#_2J5{gto3L;ALzjJf z^SST+=CaBS)1B^jsv4Y^4tZ=~21q0RUI$YboF(@L=)u|W+dz9Z{24HMHvA_8&W;}d zxt@)_BLe+J5%`%5g*#h4S_D34Ve*`f-W7rVtqARY6oLLn5#;bU4CvX~eJMhJInHOJ ze**kmg}mOst0VAPf%$T_dSWBsw@2VJI|852fswP-pVR;B_}e4!`CJ724H4@3MFf5( zLjLFX77pOcBk0@b5%BR5_$iCf-+~DAEfMs=9fAJQ2=!kVf&Tso^Y@hq^CBujJ-0<@ z_xT9=@NoqBKNO+ek_hcyA7MVuh%hd%M!+A7z<<98?fyIh{{9H{Tp3}$To*w;cSWe@ zA}ms8n=hv$$TJY3p3xEbUkrJkP5;9YV^n%@I`3%jtF}4V1)YTMBwxJ2>72w zsDE<=J}-~J=Q|PX?O!9bdtL;4SRP?szZ9X}(-HLHClT!7)Cl^yC&D=XGJ+g_8)2S) z9YLO)Lkj-&{_ToTPdI`cv5dN$N!Y`O+nl(yn7rt@tGw?XK=sPo{xS>c!74qusT=>Yo68 zxJo)ts=HIK7i@@M2K0gL+KqPO(0}p6zNEa+Q&sJ%=4K>C%6H^t=NGxETnkF8-L9&< z?2NLCa#vo#{4$r6pTA&nMR|U;yP(RQpRbdim2mNrn$mJX8y+4awODhYCq{8`Cu7X7pdzxSE za-&cY%Yqh9g~NxFc$}0!Yg%qaYJPTpX?eA)%Izr1%9@^Ak%z7#!<{^)%2VzxUF^zt zRaI3~Wh7_iOf5uK-fh#8lk)QmYikSUmo7<8z5&l=1=ZF0?xmG3R8?G&rB^V%w4yqH zenGWstOLAfCTA_t@hnhVo1C0H8kwbq5HQ5Dz)^@MlM71DTc2%SIJ}aR*Or^T=PA}XKOYq zrLe4`+ND?RAX`-h1U~#01s6(~2`IWA!>WcD$vQqcb{3S`c6n+RF zV=F3M$WUsGD-D#r+yy3L_X)tkgXN0K9yI19Xu7Tlu;97dh_l$xqi3@Lh71~C=Z7UWlY zs$BU?N~_$S0-$CUmE}NVM9zH7&+`1j0?woSS-EaN$#Tz)oUVdIuepc?d{G6$| zWAfRDT=!Va_Oi1|=U-KTqL_l?$X}VuoH`hg|8(w*EiNrD%Hos}as)43Qe^#wkYRbn znEcyDCy$2xD=1nDO{gebG^V_wMvO7Xfb$I^A8U%d!sE`bD9+dCMDb!b#J)`Dw`;~{ zjy~JGOis`S$d4w(K=MQ{V`sjF%UjECq4M^{&!`2`e4 zwfny`OXD#kTvae{uu8qUFAN?!VbuIXW~MR5c{DdY4X<8zw-ij-=7DmoKL09;b#*4R=I>q>O&1<$z>BOBiASx-)_cx%n}_f z%A2M0Zu<|EBG=tDUo-Uiio%$phGDH(01m{`uiI5BQP+AfzNkW94#e_S^8oiD zV)&`ma22btrkX3H+f`eNo>C9WEAqv1$z{@A2(Oa*0s2>a;b#I z;Ru&j6uQf#>ZMp&7E6`Fr;s(y1 zglw~$hCjZT-4h;!G&v(9f6S;PX|mHXF(ZHUsL}B2r)A8To|~1MpXZo1>DK&|QAwkc zQ&UrulSYr}%IbkM%Z}};CE0kKITMwS9W~mh-vE4<6jJ*7(sWAf$0w@S{eX| zDd~FFc&@>d9Xg@5`l3eT@#@5b{X1^;rcU5XuTob(R<^2hw=E%}~H zO0ffsl|HoOzYRLG{DnK7LDl`Fpe3JMK{Nk%Bd^2GGFplr$l6(dUumCFza8-4($YZ^ z1qSk+wW^>KUNBZjcjIVQ z{Bn%*O%rcV(eX2T;oA-Tyk7XYaXNiTFTCBrSN6hJ8u;2?_|*o!t{1-5z_09uZ@NKm z_px61*!LBYvAP$2tq~V^wiiApU$19vFMOjx-_#4Q81?V$g>N_LTYKT-jQaQW!ml>y zwO;t~M*SVV@NqoI#ILg#-frNf_Y{$Dj-xpE1g71HtC;xxzZYauM=yMvftQT-P5ONX zU0g5x>Sy(O5_;jA47|M;e%^CB{k&fI&gXS}WiR|p1Fr3b@A#!oU)KxY_^^&&-3y=e zf{uT-7v8LYLofVe2HeyOZ??O$7v5~QwHIFcwchT&Uih^JUh9Ro8+>;3!kc_b`xQ~4 zIWFxcT`#=JXIwA5$!C0T{BLzWm0tL@t95)rFMOkcPwItVZQx_u6;aUS(}Z&jera=; z;9tC;k|a~Vh`$5>Ona#rdPn>%7JRIwo{1K`5&=Ix0^S^F)^DxHlxuH%yrrIUlreuv z5%6jRyg8n%e;EFm{atCH|A|>S(#8n*XWJA(g+)lZP(0~>)>`nFSnwMx_)9JLCJX*L z3x1~sKiYzCwcuSA{5}hQu?635!B<%Dngw5F!FO2jZVNuHT@euFW|&j~n{nnCK(zv+ z|1smn#4oqt&A2h~JbN^Mt%m(1-eV$>nsIO9ski3Oj8_xC%tRtJ!U^;>Pho3U?ZK5N0_D5&eV)`Dl-=5K=qPu((q zO%^iV@?@P>;f@-z$HaAgF(!-9un*7fVO;Lq#A z;^9L@K;&H(Px_x&3*MZI%!#w$t>-uK7QFSGMzP>|XUY5}SnxwkB+?`cey9aM-h#i# zg11}n@fN&l!C!2_=UDKUS@1J0_{%N$c^3Q?7JP{XuUPPv7W|bKe60n4l?7jC!C!5` zue9K87JQ=xe~ktIm<4~W1;5&Y|B(g%tOcK7!LPO86D{}+7W{AvzR7|gVZraT;CZHJ z{#q^gQ6>`UJ`4VO3%=cgPqN@O3qIL`@37#~4@RKa~ItzZX1;5gQS1tHP3*KSDKW4#CvEWx*@KY`L zXDxWA1;5sU&$i$1#h?D3oLlmf}d}}=UDKC7W_;LzQ}@~XTcX+@Ff=f0t>#9B zKEiaZf{g-RMwl*Duui~LgsG0fN&zn<97}kffaepY>lDlp@GQb~nSyo!PbW-QDVQYS zDTD_SRs=keFkPcyoPZ|~rb`r*1U#BBU7=vd86d8?j&K~|b^%{Sn66K-Rlt`Jrpps- z67U6tx%CLH74QJUbbW%W1>A=)U7ld0fKR^wn66H+PQYIgri&A-6!7PS>DmP63HW2e zbZLS)0^U!UTbiIU7KL5fPY1pE={mWzz-9qD-&ER;0FoQg$b?}@O^~ox&#{qyo@kimSCNL zs|f#yaHW735>6mIPr&mDClbyP@GQdD5w;6>I$^pf!6X4sAv}VxBH)RHM-q+`@C3qi zMS_xmM-!$C672Y=7=OY^gxdvt6=Av@!BzoZLU=UcCIMeSn65`~t$+s*rppmrE#N+c z>1qTU1$_E>z;rQ!bprm1FkOparGP&tOqU`!Prx4&rYjN55%7M(bRmLv0q-G9*CCiB z;MWP$We6$)-b$FRLNHFi8wuY`SQ7Bx2;V}u<6ANQgzbde1^hH&x(LBm0so5dM8Zu1 zewZ*_h2UBNKS-D^LU6T!?;}jtAlNA2WrXPx1nUG`MR+pdN&znhC*1Lk7=Oa^2)7IPX~JA;gRKJo6=5#1!6pGe47j)vu=sJE(GFudNDgZqu;SWq zJ~xTQhU<$ONLz{tA;@T-RDaszs6Y)2c}^rLvyrPkgOO1KF}IM?pEh16@G)tLxdKT3 znq!9XNextXsJ@tJ7OOz9V)&W3)-VGrVDLtk86^+% zikwCe?-yCzAv`?VlrPJ>hNy-x@{T@hL&~t+5 z{nzOq*Xf_r>B~&|r%n1&lfDD<74?_u^viVmsV04uNlyhA^*8DCsXF}>o&GYDexgZ# zu1Vjh)1RZ$U!v0=Ww$A)3j}@gQHO8$ovQC+wf;~?PM$Lmv#?x(cm^F`%p~ofw5db> z{H!9KkcYtv0QC`o85qs?k*cYks_#?x#c)OLBM4Vy(A;o)_W;b@MlI=vQU13i45a)@ zRFilH<<%```l`MTb&Gb38r7`sKI4u@g$|>_fvnIR(BAdcrTNe=$#cD0pZ4A#@HB(` z41`#(Lvd{+*w<8ap*f}ibWto`N6k3C4OOB)B%d2B289lz-8(3#)RFisjOdqgRq=z-Bsd+RsFO%E2;;qL&PMH_b8M#2$6{-H{YZ6G~%e2+P zptNM#6oBA#jxEUfihc8=mKM0>hD6n+%Om&*DiuNWG}7-T6K(}Iw!SkgH%x$3 zFerV&s2Z5qsoogV@eCe)F<&Ba4^aKfI-pbG9Q1}fVJ69H;4WL7QQH~4h1w!@j4n9O zWQVqWEC9M*x zoa)Co3T$eNJ4Sm0N~Zd=KCYH$G{XwPI~Z<`?jxm# z_x9rMdXu}CXDhQjRUTKN=*uzHpOc{XOy~yswqcQi9%o!Kx7e2vFGO&zE`l4S@E*O^ z`fYJ)Y8(3e{t2Vc&>D{RN@n3_9;DTl&# z4Zl7WFqLws0_k(p?-Z8D;rq}zeB>i2<@9Olmd?IVB-#6C$}=!la;A33_x}}uqoo-F z4Lg0Ow1r^D;oF`a^{G4B;aiLm8hJa4qasJ*Q8o2L_jyj==TLH|@33}|WABf-1^H70 z&JnQ=-wsFOhid9R_xY;tEkSosds!&R7Dv<@YQs@CI&n<<>^R%PoX(Cqaa_I!Q^M&h zv&G6o#nUyXeut@@7}JgojwvGdm{x_{PYB?P8t$6lf-5cL^BvKn`no%gY|h7jwVUjQa0yTjs3`g=Fr|%@k zga+wy%7@%&v&HPCA$qyA+@&~h*H>h4aN1m?!gA0iOp@wT<1jic_V}veg2HC|Wv;VW z9c>o&61`Yh-$51z;i?YxCy1_@wGOlaKNG7lW)V6C!J*xqs=u#16j^@IVJVXn2inB4 zr7sy=&)kE0tyR#t6p1#~*M=Gf>t)@vhF{2uklw#6iggW!E0A{mYML1cX^t&kdm3!Q zQe7$xH5OirrP@O2)o-sgEme9xY?T*CS|wrlVO&s=b_O~ptUQ&<0ka+lo8t7rM{Loq zI!1kjVmUCJ!S!(LI8#M=)qj&s443v=cLf+M){xX)L;Dw9H6Sy1097<*Hyo9{3-J{C zrSJyHvYG ze!CL-NZWxCW!cc1D(sH0Z4*t3CZk50$5T`}eWgCzV8N8U(~Bb1V>m+}aE|(y&r}=2 zSYT?&n9%huJ$D%>n7$p*^JAcz4wMtVcOa(n5e%b$5hh;Yc-W%s)KA@)JNz^$U5exM zeTE?lw~Fo@L{sDSrUr?6m&ao@OhBh)FJpAtDM%zZlxEqtBlH_%`9r(tV(Ky3D~$Bp zq`49_U|o9z;tAdepb;*R|7MH7Uw=BveRb9O^{4xI`oXJHef^W0=vF zhdO)*ox^W%_)e(4@0{GS7%S`=jHenHjD@v@3#*#iD&N1F`t1vAv0w!&Wp>mT?*3F> zhp(U0@4^auFgx)xN9qS$VZRa*KBnD8mGEc9VtGx$^4jc3JlMUweg*eKn!hVYlUV83X;*(a?XI&OFR0tUDLM4~Vv{%(M;FwtlYD zzJdz;Hzvc%e6DRW%I^@kO{hiEeg)|^GITYCaM(TjZ<6vbZeE_N%5g^-A8u~)htBE`GCI)mjv0l_Yq!m$l4Cj?b6F=^5;u#i!wC(|_r@u%2{#L}C>W{?x zC+FdD&sTEXpuG^$SE_tnlYer~SMvEzTP&g0ujD(nd?nwxm8sTvSoC!~8409){3y2L zbO}KoZPV(}D}QwkGIk+DJE7BF3fhhRK_rHChc;KI8eW}8_TJKo&LFzCk&c-`G+q!1 zia+TTsjLR;uc;kFK>@D8CG;2%(Kax-MGNbSzY+C8>&*h1Mrru_BAlVA{ulaoupW5s zx7OV~UUFX{Z}MbtHvH{VP}Oh82CQZF++ZdersT-x22nnXGiW3ZMm7y#1%5kRtX4M` zJM4|+O&y_Ev<}eG_HN|7rJ%pVu*Umu;ckDReI+)pFoN2E&%)vQ&M4XY3sw_Ik;!c! z?H7+goR<@Y`8tj*2GZ^Y4i@n-y<5>nw{)Tw?fmX;IgM_K)&3b&k}mo-G2QIkJBLsq z*7C(@eDmu2qa^KZl=j~(30}!oHM$SBgei&Fmj$jvPWB(NaEMLpkdZhj>e2tFL7?~l zF?}jOPca5k_Ua)FcIF(&45GUVMUhecQw3dY(|(5`)HZQ=^$C8Q<=OY1{L!|fL-n0~#8d&h#(W>8H(t}-_(P)AA-}&+G=4ImH-0S|G1^^jw3{p1 zZRGmt@SWi>X8Cr^$d%V)Z+JXYUiT5l65i)P%>kyfpg%>3s0>u2K6Ln68u8-BYBt4F>%oIduyVD#N3L(-wYj5~dy{rD3yn(o`-*-B0`eOeDz_4U_3IT~I{_xQ={ zCJ)?ZfqgYS^X)5ZdgNRD7fhcOM|MJ)vHC_EtFPC#0SN3#w`17q?j9(~-g+S5eK1Zl z%<<}hvFqNu@8G2wp^-*Ep8%mVQA0N!r;f<$vIZI>als<2>WQz*>-VH?y?dfL6X<}v zj}i?{_v}#pFN)US=#Lf6%j+_2!{i3Krs|6Apa-Ac0#i zvA;YCn}z*lzm*yB46OJT#c>0x)-R8fGJVSv+==vZli(i5Ia3eAyFMZMIOOg)R1ip6 z_n;ys^_vtndY*%@>;x`Lfk9<=NK%%sb0Y{bZVbqLgO~s^ZbL@;2F3@H_avWWMl0sD z6XCr|N8oli(|NW^)sJmh4jlU3vX@`J;Pwwl6}b=D>QEHV*yG2Ej9S%)=!2d9pQLW! zWWeuUH5Kt!*}D(@1EZ^FVj-bL1Q$$n)F=_ zKV*B1Fxn1e$Ekj!3X>0iMl2mq?}wmqq(Y}2vgyTN6vbrk-E05>SwA)zzFZ7hHTaks zFMBIR%U-=@->Z7D7OyCV%A{tL<7UVIs!k#{J##;zLQ#bEEf^{8mZlh}97laKP^V;X zG6JXC7@&hcVh9yGLZ2pkV?{U>yHVJT7Ht(}19eJJ(SzU-><_8Yh>t9fP2Qu8<8lHu zOhB{&Ea%3DF#ne0=?m>2ZOqcy4mvRcUF^W%>Kttlb>C$(IRcZv7pUd2j@0h}Jxa*e zMs3r+h1C(dr|aEadX~1G&0x8BlG%Z@OK-<)vIBQquCOC~?G@q*-X{9ABlI`49eRp? zwrS6?2CTPvC{ZqI>6W@G!c+$HKSSZJ>gpiz;7=(A-;UrdVXjfa-kZyOtTqv+AK*w{ zw@W@HzV{OII_46!N4gndMxGxa~@ol5Y$_&`*CIxKm z+MD2ga=^BxIDN~JbF;jMWbc>YD@$H?0*eshg-(Rw28ZleH{^BOZp^d|mLEC*0__o$ zGZ!V(LUu1o7r+h{r>DM~?%ONh|2*hn4LMam-*hR3v=oK0QT`LA&o0Jt0%?b_j0)Ee zi;MOkWawwyCao1{-q@g4|dAWruuw3jKb zFSDH|uWL#^;OslXmK`XHiGp0vo}+$8l(q^71IgRcS7wEM`|3M>esWusoV8D0cVPFo zU2rC3-?Y2ax3&JOpFfN2t^WnMt^T+u%c^|ac7Mxuyj(eUhw6{3h(yQ@+yzkzeFR5c zt^Y5$iPRJSj9Ae(1|ufbpDwzme@m7yqu5Z5+Z5*Lfx#;gw%q_BOTjxZGmLY_EuDSP z3#e(s(?ABtpfh4#Y&v6<3L&1D+!VZ46tU9={{oi}pe;}Pp+qvMG!^5HsQb@>fS>pv z6J2robSch*prhirZx>1vNGk%B7Jgq>oJS9cHnxiC*`~#c`mhQPxd)qgtGg=Ob*CiN=k4j^AIQ->aE{m_C|0CK}${Hn_zGh7xGo~r75H+hd` zR-3-d2Kz)=TIsY+l-Hj;RTG_FKRGAL8TBrr0~wIB+cuN_zj&w zi0oo9&rFy9(u_1NeNl4}(!n5<*X_dO;ZmRA2uwbY4>^JKsQN8^)W--UsfAmZjt@)@ zW0c{L^ob%IFUG0vF55&*$A|i1OkmJ)0H)iu(S3Yd>c14aixxNy{zss1%kFPZZo#Y= zjd||dsn&0e+O5@hsOpV~LCXzpD%3hKnZEMgL0ktC>cg>ey(>nN>?d2I<%Z?pya5wP zoT=Ysn_2%^AB4$CnX~dDJ)0IKDSc(;4X6Ne5F76F=FI+s>fqdJ6EKX7*?fbF03*nf zU|?dfaiz~UF*~qeP+(?X?N;a+gcJu?F2wNBTyT+z5yR{`fLK;&cyXgP95l|vj(_1+ zr=kYoSF67L+sNWp&zH`@`WVw6q;+ zaFF)&3QR{Hy_7p%Gxr*yYsI)~zXPo^v0eDRM=iUL)VJmP4`Vi=Zs7=V%{~lT?)_db zZiGIRhuuq&WJsPE=w@CNrffSU)Ql}?nTqQZN|3@kVqj}3`NWP}(!PXvftUaUlsZ@E zbEd)P08p^S|09vFEfZRhObXxD?sdD{{62#b)W`Azl+)Mk_q4jbI@j^w8uM+ib}u@u zU57u#xXoavJUrKg(sX^ikOE2Er|-io`Ut;c$tC6>P#I@|kjnUmxL=u$#X5b(cU*(y zhN)OYHph|kz#LnpW~bErDZ9N25QF+=b04@pE4fMRHP9*ePyy;rmy4g`0u5#zSF^YK z@ll-m?n8^gqmZKT58Al%P_%7SQZ5E*{8q8Ch#*4`{B+9R(_lud3St9?2vATXCXlkn z$u`rrf~}1M!K_vys*3rm;B&}xOnOh2EGUCm-|~%#;sup9>}@vDqOFIZgBPQA#Q$|u zuV`0`O1T{jr12GXgG1~GrXw(QTK2BtZ1S~)_mH(m0f=z`$C@VO#;)DjU6A3dPIrUo z5lhsHl^mSTu^|R7wsaS&fqQUjaJWYl6e$8?y@74{tf@EH1`+-qRMI^xqP5PwSBeGp+_ z(D_rvh^PBB%ZNXL(Xx#AIM5g){t@PlG2)*I;TanzZlc8INufS-^CZsC#a)I$0yX3w z(O^o&a%{A59&s4OO}_!6fqbyq_=ox~;+Dwo9Qse6^P+zS8{p81JrYUe_0FMZgdB?@ ztTVw9WWq^iZQtzS<1uYFnWEop;h;_PqsyUvUAsIm%V3A#w-Q-S-_g(;p`D?>hd$6+ z0c(rEu^x%LlJy2sra0JbaSU*;uoOcK!xmhoAfrvY813pMj_npDR;yhlvQZ-Re|qk2 zJ@>ip-0PY9XY!0{MjPE2fa(~b*Zl}zM~?$4=+op_3#RdVFwTQ(6p2x4oPDYOdl3M@ zjT3QlT_;*-n;kq1RWjuti1{cIeU3@Lz6bqZBhf25y|$8?iZje4Oy1eSDZqBevk-1^ zL@M7-0YMU~Q9ePGAJC(`aXP04D&j>S>yKc&UlD6@6R|L16BLN~cnOAw0lfaQ_gARN z8K}Vq`xK7mv>&yiq54jlnt&}>%>)2Zo-)L52HRHV#$!_+*PI!HL4>=5s?7^k)3GOw zGq+L3{Xo_C8KYCDv_fh+>%)fL&#)k*?mH$9mp{|)XM@E07sZBFi?}#;gpYgtf7Zq>^U29Fyo!R zz)U3WYvsg-d3cZ$1C=6~Q70$PZIlyTtL4PSYvn{wlbm>Wt3`MX3816+CS9Qh0&xJ; z`u2{N20kfhqNQOlo;a{-;&v6geeReM4Qq%eX`mqqiKG5gxNi*#9ueG5$Ni?leIksf z)_)7qU&oS$V$T2~%5yiwK0^{WKUDu~Y#$Q8NdycXxHu5o932m%(e9a}23*=~US*nV znE-0wCDtb*gjyRF(Em%b0dYY!8QQPyMJ8cf;&J%) zLbbjYGw77|?HjCJ^#zkpI(!iDVXagQSuXVM!tVH*dz9)sSC6bs#TueQ)u!TKS3pe< zvLTouuH)GyJuq^9MqFr5kMR}y{Tghr&dEP<8S;pt`fs17`fFxl#d+aw#Tw7mBOR03 zvp~wsNwhoLHjd@+puLyWS)aY` zXp~0?P(#cKH$irTCvbThiS`nx9v2%6RKMl(_`rxbyS(mb;yYRhAyGVj&1Tye9z}W) z&Ki)W`Ikm80Dwftd2rWVu84U=NEX+xX2fsAr=f6VN2zgD73uc~ zdBrBi3ku#L)Mxn&G?0Y|FvH73b`6CPPv}GRW6X1m;%8V0#kq|35PFY|z&k*I^i3u` zeH(X`@N3cxzvcx{Xp>)Ok6N@gNR8=xOkt}S_K6lV$8!U0mC|LaIIyEdOWd75i?!40 zKe+#ZeEksW*V;cIEv=Zeyl%EldqpVGG3^(ktu}2DU~4=sZ-&qkVTP!xzE3RXL|4z5 zh;^I#q3h33p;8qwqaY3*=v(w>`L3S&^9tdf`tz)a$oA;&Ic9gaX#>!K?kR=&jB~_X zsM~yW0J8EU(I%nN$I(Hdaa6a<;;;oxd|SI4swuBKjx4Q;kx``2@r(g>4A)Se!ee^f zKg05>t>gE}tD0tC*~U!paM``RGck zrA<-uq{Sm`9K9>qA%ShU8d;xA?u zW^4NWj&F_fic!8F%V${1-(Zxl_aj&NR4rKCr(LK#zkLM*qLPqy!|E=ZiM)`ADzOcKz zIG=);8vjjs$tW*2F;}BJWJ?ii7x5Vb2pC7@-)P|5oF9yD`*v|*cLr`cr<)tqiKCmi zOdNmIftwyv4EJle<-&ntrY$2NJ&EVytOi8V`_MUtzaF1n ze%Hpj=wC3tQ+p?C66t z8AL?CkiCC1Slo~EU9?o3?#q(2Hvkmlp*VfT-BP%3O~2x_aNi{@sy`PCWHlE^KiocT z9A{e~<+EGF21mRs!8V2g%?nmEvDyAtqdU-qxS0AB9@6XXMOdMsFwC_jto0SN{jp72 zdZLH9+$noAbs9aOc>{oMdqbJjLceYbdv52taF-oY!ERgOdjU#lfcC`pp7!kkVcItl zTkAI9gP|a*X~1zIQriOoX(RDRU)AaV}1Eo{H38y(K=Rg3?SP6 zL~nj@_jqW-d$qsl-?aY^2+6v>;Wi*{v>D5YGXOs+ka7owzT!wD+QfZ2T#VME{Sc$> zx2ia9E;*is(%0?a?ybm;WKB> zoZ5Zm&TH!Ma|eA}wglt;SXYM?Gjod?n9|4Btjd|Y?NT!joa^`ZRfof8N!+idZmpRn zoVjD#Z?;mIKi-5wLK)6LxM0KcIA`9K1aSIEPP<%g)u(yfh!(PMruJ>av^qTjHgFhv zfs$0VL)0alb2(Da;K1=(C^4078r2i}CuxV!G9=}{i4C`)-&z$h{vp*>3bZt(XptTY z_<&6KwuSz#O-CI@RwEH@5oapUlJj4NYaAAtD_s9|ptP7ts&oGP~T2>J8aeICP_7+^+)@Pr6ItJ0oD z5$>%R#KF~rnQQ{#&UsRxB<#5=R7O5CSB{A149=-P8fC|egnXM}W^-nIl;n1@jv~~7 zs~>_y#Dv7r4c@nK1`4CxF*Ka>9I1PktY`QlE?t}xCGX;zkHeB`3 z#I@9!akBSQu)?dUcdFt=n!Zkd5ibvv*=F+Yynbx~w)ty_&b+pu$Pcuz6s|2GJ|{Pv z2B7bJ;k@!K1O)AH_d#4==xVHf8zh288K}V-xO=8H2E$obX6qlt2!DSpqYb;y=n`J~ zAO&uI7iZ()w!x8Sgz_L}#*2Lcspg&MMd zvD!*3*wp4aRH(gzvclqu3o6>cCRUa5>k0*0Jm{?(NVx;&8QVk%4f>0q>C6t$1O`2o z3c+r;9DUR;XdKqA=lsEjImaPxOXP8=x-V!PrBJZS1IY^-PN*aIkz%*vM3Ai4W-<_y zQ;a#JhZY%R#ImSjALI0WDRwVW?;Cekj<8;_^`2u(z$Ox#ZufF1ji;E(l%V4D5(_U{ zG4P5_|OXDasXyh@B)m0A%DvynYTdC>MuenzK%d|8Fzxft#-9&MyTU4 zcZ;@$RW~6MH|PUtC&$19?cPMD(mv<&4n7MNV(-{e{Z>RR-;=%PK*h9THW2;}mY?<} zc@NDEeJ|diVziHAKTljcx|qVmdTzI@nO@!4^JtJSB)~qRONJF`CJ?J-3FAlIeEE8} zd+ChaiPs4#x(KD?X|bTFZTg)Z{jHE@d;E_$J_^~MN8%FhC$&Wke4-Qc^pFYydsk_H zK<`4A>hWn5QH_JCHoPkx)@Gq^$$K^_WE@KUJV1oI!k%}4)K4+mv`0*26Oi<(Nx8yA zKCj|9LdB8GUhEX0F3?L4T`gs?B5D5+QcgKMPLeiWAWFj8@6cW}1g>&|+Ib7|X<%^3 zXB>}Y`(NnS0djHUavF9J;>M-yeFu9OaqE&XwftAWE9UR1SJ~&TcAqUnySaM1Po|*V zYr5OL323&q9Yr=tTcgmEV_M5TAjyY5La+p?kUlQxJG-uSy@8f3FDKojgNP(7go7h= zHj_82#1NO+N-$#j%R{KYKO;h7Ob{T{@7WB->W&Fg0QRVlSnc%v{*%P}V?O2b7f3mX zM0ZBl7}9{T{+J@bxgHO>l0@5^+_ntVvKG|Z)QzYBGWmqE>6XbV=G~$bsjWqk^w+qGVmq7*0il|^kZ3ocPCfbpX<<8z`!aCe*Bwev+$-YY=sleMV_Lou zm3&kjdSOf4qCJGi^g5X0hALE?Ilf(PD8&OB_zJCo;8Hg5?#tkyu>End`OPjp6ovgR zDs*i5=SZ}XReFd!-ps^yZn94!Sdy>Ky zS1Q_4o%Vh7Xd}1QMz!;M(qdv&Vi%*+o|6n(crqsKI6;f`02>{re~q|6gttLtFGt_( zc|Q~|dXBL@z8+j-y!;$0coEJv7PqS;sn4Th)E`UfB8=sj#SdpY8&V$VYGl@dExB|i2VJX!O-qoT$ z#E+4y-A}+Yh?o-~k-f_?a@s%9i16LCK44LAc*8o;@Hf|YHQY~c_-E9RK+4*Dz2UVO zBJCeW)tHq#G`>(8yc+d_FT!7-rr?EaXAQ`3hSr##r(b2Q!y18)QdE>+RqwxH(pngK?~fKfDtSHz>x_V-z?rqB`m6YW0( zfc*ayW75sLKJR;-H{!bJq_TpQ1c+jG@DkM0 z&BG5r@0*BbBAoZ#@FE)c|9sx3&z}hAeUGp~|Jly_%Gl>X+KfbudJ?Jh(98^KHLUO; zq}`pz{s#Jk1HN3Eu{P;#+Fs zPDHL_5Ll4Cmto2}10(Py0ZqRDXPBOjmL2V4g2HppgC~5c5DlK-3uZ^1a&q79b~yqy z*nReK_-=6emtktVx!DuGbG$R^jQbo>_fxE{K8)AL??OE7fsfD>KzL}k(_Fy#VF!-d z%Nt;53My1Pk>c6jfot-eoW0GchcBqtZ-r2s-J|hRr27lh4CYZx?NC#9 zdS1ge2S-B_<3g`-JYNIXl4HxKF~K0#kw)Azk8*4|90O5+J#55U6v1LWsRB-{!1OqA z!C3XZHznY{3LKtR$>CTGX(pQQ#a~a}$gYLItG>_QmR|g+fyoF9%#FocoiUE67V#b` z-at(-<n)_ zTJ#Z7zwy*TexL#&0LWuI*7*-SkB0tg=s6uQtb_`-mSLeg2rwGk{C=wMHjE3FNlFFI z%N2jcBoG4+MNqiaz`iL?eCW=!N5aHHA^YQP0{MYEu`+WD(y$PNk(GQhSPBH~UbgR4 za1n4KJiHc2p+=#HwddIcn)>@+n0eBj$c@UiKx$EcM@}GZ8O*mfV=bw+X&({?X`~3w zp^*p(sy8CS<8IZy1WjmH_uMo3dpklqx5v4!;8+dx_w)6U*H4Nr_Dzh2mZ8J9$Ktgz zyAc<>#N%e=~3j2S@#FZd`G|;~ajA)7Po)?o{Q!Y!Nev@6~qA&P2|i7JfMd zw*Q!RA6cdfih1e2ARYEA-Pa$1ejEuP`aU_D@jf;6TiJUNN`sOq zc5BeqN&UpS(XdPQ%Am`{OWE~X@UOXFrZ4?8F62%+Q;erGoEz_}sc$<2^ZL1q)WB3! zhr3U&cXj7Fb@%7se0SF?$oHyOzODuaPIm?}RlExLQCB-ZgCcb|gH}W%Xv3Mh#q%L{ z;?w(P2W*-8E9uKPaHe9qU?RTvGPIEIYjnMXpFjolaoJ$V_&T9C+jVsjyI1;y*^7?$ z3$DWhwv@piL89!hqrS5rUQhw_vZ(A11CON$_^2-Y`=SxuAF#ZA4$aneK?JqkBdHKF zm76Mo&-qw&0@JAbW(xUt_}+02zrIVB&pCK!onJ5w!st;P7?QrV53CHe?5!nf(kq#kZ%1fifMF zQpl#MpKsD>XqWv=v2W5DN9vcJ1Nd}HcA&JMdyykBiPbsrt&GI2>IOr<4TWg6yqt99 zRy7bk9a@(@(9+IR7`jY<6x*ThWuhVIT{`t{67;SadZ+6|8GLc^Nd(uQFmzF$I(=8` z?|m)e3-a9(?VhB%T5vyLwAZB?#p%X-1( zz2HhKtk$>G22VZ5GZlRvt!UwfFL($jF@IOIY#_Y18{S8FdpFFLHuz#UjF`Fr7;2&@g{*8klnA5l(-jBFr1~0?c-{~)|RsFxI1DCK# zsvdU5R(k~ydf4?cTg`ZJ)oCFDDY#*VH|6N3Sk7GLid#-RdzoeGopHa6Cjg&uRQihf zC~l@;;P|o~FTZmoN`xp>I(>M>IP`mSor4GXcxXS?qtCCvdbHz@SfDyU_(S^h3`YoE zTHU)#_gK4>BD%ET-*@Tut}em<>FUoI%s5rQY16AecYxQf{yb~x&y%7*m#{xyKa2h- zKeRv8F!ZPCf7zeH7b5k?2VVb0f2LfH{#?WUd>hl)SphhKl~4V^q4~bKlN>!m?dYMKf!1IWq+Q#6#Z!cjkXq@`a%7n zg@V2*|I7Xy7qjGS{kiyG_hqGYkWvFMr2>$59?~g6m!&|zm%uG+gVz=h1daiJi)Gsp(BD%Q;dlnA0&{F}+5<)o z^?4`;;a&nvG+FS$48PY|m8c3>H7v&fr)xawx)M}oldvdJF=}$Q^MUk4lHoh_d z*~T0N$SZiS+G44rcpbW(IrzzmURwvAK^!EC$KB#ZU%g8)Tu2LqOZoLO=o5y3;1zM0@NFmP_wpE3^G}LOZFw z3Y~N?@M)f5X#-H+!Sh51HhKyNtrIN}qY`5$<}+eYYM$}Uk~VFxftlZh*$RvZcNeil z^l$YNC0*@2ZIoEpRie?rlyzb5F)-y_m@)%X*@c-!3|?ceLs!XQEt|_SkgEk!*9qcB z8u%syPmLgch=Ff6@Kg%ozk}#lIZdU*|Duhy5FXK0ja2IVN`k#;z)Sw7iR#m&eWssCFcI0GepIai@a_-9(i6f z3s7Ke1Imz-^m9%?$S1TlqQ+y|Wu)EI!ODMbpe`0DaeM3@1J$paY7tTOJNm&!cpj$C zXg*@7B28=}5c7?y;QI7EF@JR^h6?JMhpbV^;+9|ka-{eat2Twj1IsJ5C|z?GP8P-N zq>I;%V5&I$lQh*oXt&4^N-LBfNAS@&&ef-iR?TYs`sD74V|bi6z~KBhZ6!h&x?KG= zO8uMB+EIu)I6}k}^!=R(BjEeM)O&+w7inx^801?iepn-Y=5#gP`5U5-X&oTc=iCl$ zFrFR$+rW3s#o*guICF4Z2%B+4CEK+7&@-0W$WnN7f48_#quVcr^Ke-Tms#}CGUl+= zgz3ROaigS7^)ZY&3DddqJnhe{(~O|ps}4tbY+?p2!QK3n{WuyIFSWDrYsfN!31Z>{ z9wOkIY}%7Tj5pzXi`(MBXDUBkQ3P){gh89QBh$3Q7rTvo**G@EeeJH z)@}Q_KGl75OR?{UV&Cn3R^A$2)8}}PO;(t722$d>Te+M9@(;ORZzbPo<&-h5XwXT< zz^@I2tY2Q=zsG(K`;R_7_Al%BL71*j)bV>)7v`~3--=7dxIowSZ5Ip%Z-RcT#X=02 zFDqAK(sR4s2W!Eu;Tf^`&{Nt7@QTTEc_vc8DK@0Vazf}U`MRB7$#=Yk=a2Ajcd?xJ zNwGZYg#5q&Q42pLd8}!8#=x)S5%}QMbxpWn1Ns)w?!>=V(EkJUU&;^s3i1b02R^a= z=rp|ISv^=g1vzQc!4+`zz-cF+6wfty=G_?WehR2CH`eLLTQh+{-(G|s4$oCUo(B?f zOB-F={ke9x&;eZU!51duv|EHSr6sY-F|2|?imu5iH@r-PQNKMNN@UtEe3feiUeP|b z3!T5_`gnGJ#(sXPi@o^rD|u@N0u~9)=+5@9<-t zQ9j7>?I1;wty@q&Z!3VkC=apR_D*oq8B;Cad;&}cQUoxi}>KlGk_Swd=u^Ul#l95J0ER!jX&&VR1dhmB|dmNdS%2XbU!%X zj;}td?uj@@afnYjy03!`#LGMxv@Q@*lY5A{;D=j}r}MMm_`VR%WBhaN;)umJ*Dj7$ zj8{7ATSSyQ_-ib598>tRti=54D&M@p7gf=Nf#`wteFFXdqloi@6MRkY074OnHz2TY zT!6&+fL;G)5RXz|560>@?cl$aaCN7D2AU)cxG?re^-gg8V-A)A*j;0v?eO0qA`9?G zseZU91a@WbQS{n@n|uiEYkUhi^&j#B$yoQY;UuVu?{oRFJEHKV=Pjx{2`kVxMjE5` z@dg?qVN*bEilA%Ku2;fszr{9Gnp_)_`8mvQ5$fo=tZC3c7Z zRyZO!q?t2F!i}ew9tU%&AFA@ikmE-9DAiYzAb2xosS#%~GVw)#Sowi#f#*3v35HX3A4> zMtxx%Th*Wq^J39>`2pT*=QoMP<;xF6|KQik>xQn3V+A;8!)|Di{sH9fR*egoK}H3s z;o{VTlEHU~wZmdE7+V2b{`dApBm=2D|I=#75Q5`tB59f7f^Uq6b8X!IhO0?~=_AAyI^K0W>y zNKtT242EJp6W@Mplr#<|Ck2KCUv-Dm5YMlkCLq9Uo^i%#+fXxSR_GAQ4jqU!{>w*T zBrg-aLqQ&_h*0jYNQjxV6_XmIp>sjn4AQRae-O|Pg^B%PmAKoAtQjW zdCn-Di{jCJox_iCqB%EV8!i?G1|K)(rE5JW^x?Q;NUsQ-ZnOZiH5^3`o}p` z<`%m?yLlvuqdy!zs_pnQv0XlYN;~chb>J;Eq*E~0s<1}mzlGq#Ii-IJ(kec8;z-7` zmfI`1b}b685a4Tk_3iCy>i+D&T`_id5$-bsEl$S16Z)%yrJ8ur9GH}OhzUMAkcV@K zTT#2($-AEI_zGL6e7@QaWM?{hf;wA0>xI2c+^^5L`j6Z33A2k7af+Q9a>MhfV?Bn& zl)cXr5U(n-ocPQ!1e6-`e8>$;*B9ki{Svz8!wx3u>ufPLP_FK`4fySE96%cWf%Vf! z>0+I8Z22rE_+w~(qkgpew(R{J&;|vKiy73VFYGiw=Ib4Y!A;*R2ts1Y82-LEZx6{0 zHzGgC6ClGrnO-!`A)Dm~4t~d}a?*1@zOoV20GRqH1|mCfHzpVi-rI7+eW+ZVAZS;j zi$XJCZlQ@{K^Y(ffuAy5s2g*QUlW1RlzKKOhDv>o5a zL~Cm5+#EOD`WZ73o1Ta9ic*a!lDe%ri@EUds^GkMHsIc=Bt=V_6C49M7f6<4kf;vT z0Z4NIXOjIMwTGU8T@s6|^?eP@-|pMHV&;~Zv#Q7RotfO^?~}%tmSpb&{KZ?p@=r(M zA+4{#y^TiG9_M4jr);19*$nL-h#WJmftlhA`sCJuIOqX{1>NbNjebs@=PblW#GHk= zt(6&2`}i{kI}_i>2RmZ23wLD(?D!8Z;Cn+mvkNg{A40+G)F9p^kR`kPNOS$iu^WLx zlfOa3p*Y%Iew>A$@B1Avj=)X0UizM0Ue#h(PPspE_}=5)fm{9V8}VOGcr!co>*}}E z)Z82d^l)nrci{1qc`9=yfY3Ta@BEW;)Oro8&(wM9@ToIl(!rW~3U|hHF&esO4duWm z7rNIQ>KH>3A~-Dj(*tgt`A^ z`%O{7hgwz(?Nc*ZA?p zKwMjgcEzi>X^z{}baW_S{6}42a|Q<}hnL=q(JaR@sY~s52V(>)I)C32 z=@(1z(aGE#`^vj)a@Tmg?!KtkSR4-R5bGQ6?aCOxlboeI_oJ4m!CbVU{p9BWIaSfq zZs!kYoT69gLl2h_Yd8AJN&F3`1TMCJDAxV@mYm=pe%9r$!bVpHAMJ)keEJ=+2jJVd z#(L62^RaOG`(WJM%Y}Y>MyS5S@GZ69K1}8ITz(Rg9q1mKj$p?s3_yBcd?yRv!i(k2 zBMgsI*wKN8ley1xGqgex(~$hJRHIQUPQ@gM##gjbw^p?{P)#kKs&NY@6SwcOB*-Kj z`inNJk=^?jF7Y?utLr?H{xHm&xc5-soP%%%++pg7U0;GRv`UZOmLxYh_?-gyCr~jJ zS}b(JzJWpAVrWN>_SgxI6P--sf@_R60}|yeScR8c6L|5|OJ7wGpo~4+Ki1}eQ-$jT z_&TWYb8)`?A}fbS9q)ih(l^7`M_c%BSI}QGUckVA_Tslh3-|XuJi-0#NAFixi!T2+ zFz6(_b*Io3f7-NL6#f2qrtb_KrW$b9i{Ujt1;h9pp7#mVNj3!wxLm{u0CwHBcJiy~ z{L0=k2%ldx74JL3P1+8ltvwasoUB6)80WF#Kbe4dIMtR@PSn)xTw-g{qWuXa=v>AN z_JcQ}R>RI<=L9ZrJAkA7CXnX*$4e;sjbW_r*EEVdCA!#gX_gK1Zt=UU7Pr(s>Up<# zv(XytQ`(I;cdZ6$A-=gWJfjvj4t(`gK0kJ>(YAW6kFTB@tetuYUy}KS$oV@F*sVT> z8=Z(YRHCLY(@;~Bb`>ND=o3Q5Vswi@Wr}S>v`~1@tN&hb{ekj%uiVjay{A#}2S2W%WJ+46;)O(GZZ z?k)uoxwv0@%>6TMHF85Mscqfy0a^m>y5HmhSfq$s~mtLAP=JB}}(vX_#>zL4; z4`j?!TZ9aCOh%3x5V@)^qjEMPRhIoI{DNzf72c{Hc_-4`bl-Ol-$`fUr@VWlZuzdS zR^vmvxEQV^A27!s7q#$()J%RCWbg;VBfv0!4x!?0_U>C?-TWWl2F6$)DDa55cONO& zG1)OKPZ_DC&!1oADa3!=Gi&SM#bXA1?5GGbCRp1%vGh#ca<(ywmni@ z%vy_F)yia7)wVTmSGC!$mCos^7F1OxRb@d{!D5%&RV7JQx?GognL#+Qz*AIJ;C4mI zH=66N$Xbun<*G8+O7~PRC@5c0UFj(!jiI5*S4q5)>UhLx%`h7 zl}}J=s!H9iiA&wCgv1{0^~lG6NC(;T%PI;NRV(facR?9OTTzsXMS5CXP+I0H!t*tW z((UQfr_GoKb@+a3N`jQwqs0+QO{uHMRaH_^<{C9>lypszlvldgRpD_fRjz`<5?2w5 z^wg??%1Ur9mFI(?XsJ?IQRJfLku}Awmjzs003MYD3}q2olrTJ{<%-UwV9-GZS%c!L zs;a0WVxH{2)k_(C^MFY71SJRLh>Zl9W8o=uHHQXrsVd z5gU@E+gw%iOUsKqm+#k39v@(sH*n%cCr)s;I68E>~F6QPQaE zE6XbI=AtrkB-FUaG)?yuS9yw+B^VW*hV4xCR4s9pLz7&!%3@D-H3w`W%nU@S%uX7i zj2kmofsw%2N_mc3GbZ2en3g+Bp9#`6)x9QMwP!wTIIERzD|OXOm{0>AXvs^Dse;r7w__$@xHzkj?uD0^iFPxw z>wgIJc}Q0y^&)){=^CW%pgV+kTN8YzRfw*2AU%Opf$hjcP%sDScBFMkZHOMffYkk) zaQFz)Lr5>fo2A~T!r>C6Hk<~nMLHJgcBGj|_aV(gdIV_^(ge8ZgK=nEi!>AIYQld+ zJ&?;-TrdAW@{6<`X&%xONQ;ohl0T$2q}!3&kw*VL9G-(T6KO5e7x9S;)VJm(w1?ET z4*ft>aWCRB{IAKoUk-<#M0yD6PNaDo(O;xqqyq<`UZi7@M!$l3k=l^fBF#j)3TYA2 zwMf?>-G}rLQVCHM+pFjo(p8%#yZyiCvWM_P&W z#WyiN)C;7mk)A;MD&_GO+F{xX{#YJqCQ{p8$O+|a?}o$i_>To-?t{J|%|p5p>5E8T zK)M}i6Vkm%_aZ%nR6}|K=|7Q1zaI|AA!0iisST+O>3F34&Z-k>CenFG^N_lc79m}U z)Q$8>q+X8nV$e+c;_U3C!c zV;;QNhVR57^&Uc4j_{}9aP$!H_Zj4il<(Kwgmf&@9Hf~@i;(7NkS|hq5bY!NB0Yk1 z6;cWFY7NpNq+>r1hu0838V(Oe`eFxC%(tR1p-)INv1fb%X&%xh;*stp{%gn|^U>W2 zc_7`6bQRLE--N>-AO)-97qx7<6jd7+b?LzVv5isv*BL1G89{n@u zlkNdO(0l2;xJl>5Pm#~9iLH}vx#Y&{#@Mc61uUP5f2tSrf(YXWm5}D(-`a=qDue}B ziRTx98)d7Z3gR=*i<<#F+uDhL zV}ZZhz!UcY{;dX%&!lC&9r*VoaJLz_KH2BRQZD>OEz5BVsr7$i=_p0IRF@rWF7hak z?I`yccIp4Gy>AbXqqy>|d9*BBW-JphP6ElmVq+4R%*e7V^T_HovgD_*q%+f?*XNj_<+}g~edN$r=J&l7$P z7cSc0sX8^&-O~-&n|uGbpX>W(PWP`*oqC-*b*j3%I(Q=#r7l#y-CrA;xiwH53U3KE zghqUUCf}4$7+7tnye?GQfbJri@LPx9oEs)4{1_vH-74q#-oq3)~GUQDBe@9;5?Vags%H_9Fc!U`sy@N_qHOl5=yQE)>2gSQnbJo#bpS zsSQ<7y^D7@Y``L7Kh6H*W&^Lwb`Axw(h}+2~?X5 zgzW`(6)YsOjN{-WRcGABsCsVWIJNP@P>sK@xP=#%iHi_-JLH^=_Wd^L*-u~? zp-Wpy&$a}Xhcf;Lrbz9o4VBg^{wKhHC;HCSlr9<80)Im&yxhtz<-Z30=fQ6h|06d3 zMmK(XzUm$Dw-f)cjlbE+KLRYSO= zACf)~K~4|kAZs!ZM*dP4FsqL5#z}{R?+IY*EPUr9?kKR!9)Qn~um2^dmBeofY!7ZR z{C}Q;(O_}e67ao&1S=8ue$XH}0);;AW=j@@hW!4&bM4}_Wt46c#t8D+X5rY9fBL8fUq4!&Y{V0FW9?4xp7AY=LBw0IBd|ICgf@XxpZmaf75KE?ZSf~%3y@A8!L%g_$F4riJL%6mF*T^2) z%h_kk<8JUh{Q>w!!FL3F^NZxQYvU`&_%~2DZ-9@+<>1IvYhOfr@EDKrihYS@a!lUz z>WoM$jNcN>bISMfSdKQ^;)f#nZpJ==kEK#aSA_QY{72k$v=VZTAgwUwJ1I)bVIMZ-&BL;?D`ZW>Qh<$YV>#lj zLA=kxMg_kQ52j!n-R#7oP$qCCI*N;(sw*SAvkvlhJ_KD3Lf+RsNpsw*)ML%M`Q-QDC&E zqE%i4u*1Nh-uX1v0Q+CStmWtdHtN8JfIaWPZUaX3X^p!Z7}cl7NMD}-wh!1SrRwP4 zWO=T!jzRFRDb6v(xe9ge6{pu42fiM~IUlaV@e_=*261jXaAN6fN1W(0Cl+TP;yix> zaj4Hy9dtcAF)@Se>lh43!I!}JZJm#z_d2GbEr=gQnoZA5Ogu;S>^mwx&qE9ILo@*Q z&6T0CU_b<2Z4X)n<0^jFLFUs~V>*xW^fkyVjQI=UKi{V;hnn}0-FUnld;`UHBaCaK zkhOahJ}{1h-H^4SxbGcD{8zwZ)!C_-LW}{^ItCUI26n`PQC_3Ca2S}M#?G^Bd0mEi z&MeppS^|*soEq@21OMYMVts?k_BI?aS>Mex|98v{{fVLqM|{f1Zsg;(pB2_v2zvt9 zumc+fwjG$Z0ZYI)2Ig&tCMH5Op53U@=k_Yt(n5PJg5UkG?zXg6&fB6$qZ(;k2iZYW z$+ND7_?s+tesTUdKXzphe;eYjr~Isb-~2R&u)c7GdxoU`kUkv1l>7W_u|CYfwO4R$ zC)NRX;n-p);O}Bg+ff+&TX16Qs4ek8Xw#P12(?lWuacDZEl*WuDVj&+_8q38ZbzFY#zaZsX{Kmt6vD<%+ zq?rDiv=BjBidBzYiKOP7=E&884QKf22hJ zsg!`%@n1>_ulPamHgwm!%8ai}7mt@2*H0HeEHi#vE)JLdI~rwpn(;)rcwn0G({l0X zG~L6Mak_YCy0PSbr&rRV;Jbd~tA;of z_z466EKkr!OTHI0uz}|&9^fbJyhh^{zj)Gj=GXjGllcFZA0nUe8-MVNm;7`QZ9B{N z(RD!YG>ly(zVD&cO2qyWIzCten45~kUD{Oh`=I!dulBi8@o>Pv@vXtLar`!E!FLSf z+oj@p!}z_dAY6QC(#^h`O9k2o;@?hyN ze7mNJ{bd*6;qdv4Eq?K?PeGAOvS=^A z@uyPpkl)xpSv=*Ri)q*21hxjhGgz7d;Ie z9-@?v`;6Ps->BLtOA(`4G#~|eR{n^uTZo?qj6Vj%Zvsjkr}R}mNuEw)kjn@ou9dxlo9PxkTJ_C(< zQ0t7!;i>;qHE^m1PSwDv8aP!0r)uC-4V5k-fYjxg105Kj6t#a>v~a-2Vi zTagrWynk|>ALjF^icLHoQ3tqXD8qH!ejn!Zrh{R5^ie*qVTw%vW!T2o&*pP170dAE zyXw)7oxGT9Fg}WVQxvewD8s9KowFtH3DX6-Z$x3HBH~P@n$Wr~g-u7olCl^<&uLJg zrD_Vedn3bHOf$38fyVcpqt11{_woh3X0Ox#7{}LqZ}X!osAmbi%jX%chzUN|CQ<^ev_(Tmdtf&SqN0w2|p5rkzX&nQmpegXz6YA7i?o=|QGPnZCu8zE(nE z2GiM0tC%)2UB$GM=^)dsOm{H7m+50n_cJ}n^eEG}n3hy<`b=jttzz29bQRN1rh`nk zGTp)SUZ#&R-OuzO)1yq^Vp=kn(`P!HX%*8(rmL8CG96^PmFW(q_cDEq>3*gMnI2{O z7SobSPM_&)rd3QEnXY2m$#jtER;D|c-plkcru&&5WO|h8TTDyXk5ak#zxQ7{7Pbjr zSYLlhc+Sdpyd*aeo*$VTiC$bWe?Xqbz8I^HL@O^;uq~GRNdVTqS{pzMOF;NVn=2j= zIafR=w7s^75dmQcZKv&ciO}}kj!zQW&e`!&q3xp`pDeT;w&PQTw%2yNEI)49@u^~z z?V24wO_aN|a{w>YgkAAzLXU%XIpt!Q$45IpT`b}8-;SRyTJ~BIbsP{M5;gzqhMyty zcx$~H!04yPSvx*M4Dqu}?Dd*&wR zUf?80&zqcbM#sb8D9Aa0V>da6fXj06{K_fkh4C;r3UX*u7&kdnfs-6PZ*$5S8xND1 zygx@DOK_7jpXKOzpHt5Gc$mcGd+YdYys0jW8uYCuSjk z!*W`#SD>D+(0c{4TniP>%Ms#r;OF86yz)a~c|rXP5yk^x#J_K|;_p{PTnwD@qt_{P zej1s7tWhyu&HN_gLyr7BBync4kYmh0@)ZT@`uUJS&wG7X%p40_xP|x#aLVV%Z3?Dm z$tYaFcsZwwQyFR*&orxZddG$Wy@To2zN?vkbXf7xb9fZ)m$*8%{y*b^<1rhV&oORy zdd85#r%K$@tpiT&qUY0kKGovEzsmzZAaOi;F(Q)_WPd5#iJ>cu`gD$8*q>xlrOe=@OMfa`po6h_4!o~{`-KRXHAfgf9S!FXPRXGM;0o^cIKyDkEmY{eO>{7 zX8Z-XEL2|Y@9Fi5>2Ofo+IOu7{zZvH{thLWo^hn`9OGl$E;yCp^eHOcXs0?)GyVzS zluy0>dLiR=lAlj3q?h^i`m45AU-97or3d~Wz^D5^ES&R^Nmy_>7y7T);XcG^e+)R) zTZSAn1bRP~!W_njN93u{P@s4BNlx@oSe_5be{-F&D7-0M{ z;zxa!kA)=y^^@U6$Z$Iws|wtC2+y$9Unzaa6Dh&t@mo4{qiyH+KU;*_2{pX3zJr=lKqxE@VH z`QOX+A7(kU*MVDp?f~xAk3Nd}Bzt&xTuIRF@*OD$e~$eBnDLhNDnV_xk1}5KIfXy0 zhv~>fzPHVTr1LJW9uM z#vJ+oF5^x=XTOL1aS!}W;8dUbzKy|oIvpK~@;~YrcP;`h+nw(Ru{jhAnSbvRC4k;T zrErzR)v@*eTIL^Oex2@Z9{k@1PW4mG37zZ8t`~u@cJT82J^Z6U# zq;I3#zi=vpfdPxkweA*m&gv%4WL)2`q38Z7L>M1&=v$-26_53Q18^E2_5CibpE;Hz zINhr_QX|`QK?@NGyA%;$_K<&<2mWv8P`QfNyB_6q_bpO_ds+Uoz)27F{axKJUhrAbBUvWal2!fli`9hRXZMIJA4`A zH4^6&3%SJuznA5dvz*I0&OQ(RG3M9z<>;LX3U4r;af}P6&0ssv;~l+AO5siqJ99Vq z(Itz*LExmf&T;>@EMMP`*ZLMXOZDr_cv#BP?Ry$LEy{OWjE z0sQ|c_~p3i@RuINb+X$B#>0|R+wA~uxDvm94nxlu&H+yOKhF8Ak+FpMByiHJAvO&3 zZZd_%jF(@k&S}pY3Tq{CbPa9Q3=Dijnrt zps)fz(w}Hto(kHph625IM7Y?h&h>aPOX3Q%{?pef-TM1Kc;LT6$8qET0jC>ffBQC0 zWQ_6hT?$AsehfI(L(Ac?L|PcX5ED!{`5hkkBfzQNM%dqou$(h7L2#2Z2RPY1{alH* z169CD&awZl1cbQX?Pgp*H>LaaQ^4KEi?@Kgr8^@`IMz2<&kfG!rHl_>rvR;Q8zjz5 z7ILcx{wIk;Z?90ya(@>bPCnN?KOghJFOfLv;dUj5vn8(f;6DmBDpzJm@yopeaQH>= zQ$6eFe@fJ4u}$JL#0a-Lh65Sy2QKSBq0Y06|2uG!zt`b!l%L1xvR$HmG$>R_Tpe5g zzXY7*53f_G+@A-B$36JV|H{4I7I@$-9{AnBsUGxmSGpedFs`4s(z^7N#AgWoT#~Mz zpE9nW_tW@M;9*rH+rR&OE^obpC-K!9;BNZ4#sl9YakOu{5*A@0`m?5Re2bEQ6&K=G;93V5lH?)g&p5`TXBjWAR@`+Q=~uwR zd~7AJOMWY&jwfB#y`t=IHiCcj6dt) z4_wFT?sM3O`&f>=0Sy`DEaze1)b9FuSDo&tfNaRST-znaobKmzn7APi!_*eb{bWbkgqX zX2(Ep?`A}?oSD?JHr9?bx3Sr{qIPNAj4x|2O+;F_Y^51*Vz8-Ug)ke|E~{PIT#suu zAsu!A&DEdF>)P_h#@2Y7*;ZS(Bo3)pE?aDErC4lzDz_3jYQc8!tc9p4u(hV=W(IQc zWKGS&CCzp9Yu1=^Bb9VPDc*eAWgPpb6SIlU#{1GH_9~Zq+;a@GB2p2V=bmB%cHu5c z(U!4llER+a2YCHkBDP*HVqb9-5JZL3;y3sm>(PNS<8_q}*grOK`*m6Y=8+`n5E zvyf~I`kGB~rkcDN=D;#xvL|9ebR|SDcJN?ou1dJ5y+D&Ko}}_=#Kk1^8}-`p7`MWpT3C zRfP+Rk|#^pubD8Kc1^@h}Dlrx)+ujodG7G%598>Q){Gh{Dciw#A! zXf`j$$22;+`^z2H(!V{@UCtGoLkns$Sax6C&&ZlN%$ z%*YWQ-NeTl$RMWsq1349qKeKdb8KD)Ulhr;=3q6mx$b0^@`>R)VYXvz>N8P&1Nh@cC2lc+C;uTjqe5&)r+l&v3V$C<3OLRg0{_>6vS@?L^9p2q)ZzlncV!| zE*x9s_oVvlSfL>Er5#*8kh2@YVnc>5g(^WgT62~7+(D14QCU&2J!zzyO7u2k{EC|K z)+*Chn_OFo9y#)$*7XM~9F?YQ%mT4s069ssfo~wJ z??bJ%R@xhY?8Zjf_MR%$kxiRj_-aj0inO=2IBS6Cb<+qc4M*O-ko9k)K6WxK1(}uP zA*r#^@imjY4oa=<8^}nm6R(*DG>lChsWt|)eX>(`I=f0+v-~O$wT?4C(o9ghNtLKf zZAv9iw$$W$#OCE)e{>zMk=vH@eB#v|sUEnn16d5Z4XY#lsm_RLuHUrD%;3X4X)+AC z&E{ZKBsGk-gleE*t zT}Tn|$w<$|Z^V5oG0wdfYzEjnj>glA9<}AgxlaQa@RBtk~xzG<|G<#`lR$u2rX6=I| zIRw;%__z*S2l~*ArAXR6g^tpvhcZqb&2Gj_QoB^vd5_bPuiV&`kW(i1dt-Bvti_>_ zwY9i4H!n#_j0t)*W~3Xt@r9r`jha07swT&WzHLRNOv8!lO=K;eo6UjBM~X#}l>TlL z(vdojTHDl}E7Xyiu(dT8%|Hq>ZPj2OWO7hROA|ES(|B$+!>e8npck#&cT##!ExF$7{jaM%jFKTJ!DUr6>3)njdr_HlJbo8`1EKn9XE4Fji z?8qsX{?ZXxUzInBDCQg{Ty{Bnn4XvH!(rVFChf*u&_$}bbzL!GT4UJycu+D|ewx#uY)d!w&tjaXg%E0S!)6LGmmz&(O zxOJ|nOR3aL>5bL4pi?eY#zihCIg}uRCJ2`)Vb5RSi6BGiAW6MkqvQk4@QKdVu=R6nNi@m_mBBR7rw*@Uj2g27e;+gu*lIQ=fcV`wLwI1}K+AM|bO!m^UWz8AYeLa^#+-O4;uBa|f59Go0vpc_pUD9dVcC6VlQ2 zJZUOu$kV!&UpB?m$LS0xy{<}PPS=;7Yp$w@RltqF*B@y;I=NwPUm8o?wvu8+lOj3$ zoLpNw={{$-^i?p1c2`!KYB`o-%{PO^d3Io|xsU^(UerD5oV@R{shrfsTcAKLa~yb# zw#q_HVdmhNY)LRb?qFP?Wk?zvXvG}!(|kXsdj8AwQyQ5`TJa=Cd-khrsj_#Cc936^ zr0!)|H|3Q!n%;Da?sPJzHLYO9kZoEJ=}8s)1Ox7?mvUgHk;&=!#-hp;laG%fI3t&P zi^jEYtzr?h5b^`KPKexSKjaShUq zEV<4J-D$^UQ>%{lS!nTHe>gWTXE*kKA}vH)n(mODT%pN+R#fU~ENr2f?lhI}+}WFh z>G_GOzqRO*HDya;x{MM<=fu2x6HSnce zxs)vz(&+YeYXz+lcz8i{?E`p06(-g+3tmw1iZxqr7Y9S<$7{U_3#0wHbSe!4?d3Jv zOara4I94E}>uY102PWMla!o&0VLg?m&AQ;$@g56q&M73i+sQ4A+YAJ`*JwJ`T^3Mp z$=d;1lIcwkI_J33PGb_~dc#Al-OtCv1oiNA<3)M^GhDnr>9F=~t!gQN76qV<)|CcZ z){*blT*mdLgnC-Sdm18dP_)sa6{cSE%;l}sg%zrpbv_eS^BFbBSE|ufeO4MzSah}I zuIXxxn%Cet1=*DEcOMz|UvUE(wGyk43oKY?#&ZLNA?5T3e=)2MF0k~4da9%? z(JpU&Ky_fMbYIoWCeoI*pvB{Ak$f<{Aw~CDEH-pGmR45wVgA%%u1IAEqx*lJ{B|;OIdYI27{B^V}*{&+}w*(>p*q>oqc? zv0bL+QFZ@cUQx3G>0_hf@;3p=yDrk3f=lmMqRLOr(UWMb!_5JD@BvG(u4Ans;J;X_A33Xma|XUd`iBh&$peVX3X#C&L$K69kQ9E?YA$Q zI!j$e+MVr^ie+`kw$ zlh3eb6KNml?&-L=yF*0itSgc25|NJ0eUPVUu3udl#7#MJr6e1ln7G!Dn|Ks~k1{G(N5&=ij!+k!KG1FpV>J^yt4oqV7vKYojy zwp7sXk!YdIa8QPyj<5IQ%2T?CP=X(oUB}nYajyavz)#25`*vwc-{P|dXZ_LZy|kyH zj<5Ik()3-9tn;t=G~Iyfv`3;o*ZY8J+QJD^{^_Ul&tk>ra6omchyJd zUH0Z6vr9=W?+;>${Pi}Z>FYr4bB#v?SBKVTI1_|$~3Lff?0}w z{#a9b-^ChV?`Ni|&acjdKG*c`9r5)(7@D?cbWBBcx*GilM|{0Mnx^_WcFpfB|NR_a zx1Zi;MbqzjlwZqx$Pr)fx29>(k)Y#LeBTjY@5`p?u`_f^it2jP=rfM^djB>}H#!n@ zoQi)%d_0ve`yk2G`#3cnq%$FEkb4~w@3#30} z11RYC9fvtSK22o{&i1Fs)I^$1?=M&V3l*(~8&)@?PFKs>2{vo`dLOz?M^yYFEm)oA z`=6FG8Ii5=^Y34dsR+8CbM$-e8= z;98uOYTdW8HjSyX-RCNb*VaTGe!AScT-3jG-W8|%Kju>@yovV_tU;%%F?#pIE&gw4 OLpg+V91$F+;y(fDb%t92 delta 29832 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 E0Ds2Z+W-In diff --git a/driver/cli.cpp b/driver/cli.cpp index 51083aa..86040bc 100644 --- a/driver/cli.cpp +++ b/driver/cli.cpp @@ -3,28 +3,18 @@ #include #include #include +#include #include #include +#include #include "ui/view_main.h" #include "ui/view_info.h" +#include "drv/b15f.h" +// global error message +std::string ERR_MSG; std::vector win_stack; -ViewMain* view_main = nullptr; -ViewInfo* view_info = nullptr; - -void init() -{ - initscr(); - start_color(); - curs_set(0); // 0: invisible, 1: normal, 2: very visible - clear(); - noecho(); - cbreak(); // Line buffering disabled. pass on everything - mousemask(ALL_MOUSE_EVENTS, NULL); - - View::setWinContext(newwin(32, 128, 0, 0)); -} void cleanup() { @@ -33,13 +23,55 @@ void cleanup() endwin(); } -void finish(int key) +void signal_handler(int signal) +{ + if(signal == SIGWINCH) + { + if(win_stack.size()) + { + usleep(1000); + win_stack.back()->repaint(); + } + } + else if(signal == SIGINT) + { + cleanup(); + std::cout << "SIGINT - Abbruch." << std::endl; + if(ERR_MSG.length()) + std::cout << "ERR_MSG: " << ERR_MSG << std::endl; + exit(EXIT_FAILURE); + } +} + +void init() +{ + // init b15 driver + B15F::getInstance(); + + // init all ncurses stuff + initscr(); + start_color(); + curs_set(0); // 0: invisible, 1: normal, 2: very visible + clear(); + noecho(); + cbreak(); // Line buffering disabled. pass on everything + mousemask(ALL_MOUSE_EVENTS, NULL); + + // connect signals to handler + signal(SIGWINCH, signal_handler); + signal(SIGINT, signal_handler); + + // set view context + View::setWinContext(newwin(32, 128, 0, 0)); +} + +void finish(int) { cleanup(); exit(EXIT_SUCCESS); } -void input(int prev_key) +void input(int) { std::function nextCall; int key; @@ -62,19 +94,21 @@ void input(int prev_key) while(!false); } -void show_info(int key) +void show_info(int) { - View* view = new ViewInfo(); + ViewInfo* view = new ViewInfo(); view->setTitle("Info"); + view->setText("Informationen zu Board 15 Famulus Edition\nEs war einmal"); + view->setLabelClose("[ Zurueck ]"); view->repaint(); win_stack.push_back(view); input(0); } -void show_main(int key) +void show_main(int) { - View* view = new ViewMain(); + ViewMain* view = new ViewMain(); view->setTitle("B15F - Command Line Interface"); view->addCall(&show_info); view->addCall(&finish); @@ -86,7 +120,6 @@ void show_main(int key) int main() { - init(); show_main(0); diff --git a/driver/main b/driver/main new file mode 100755 index 0000000000000000000000000000000000000000..0cb40b6626a65986221f2720800b34206ad5117c GIT binary patch literal 61936 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 literal 0 HcmV?d00001 diff --git a/driver/ui/view.cpp b/driver/ui/view.cpp index 9ec8dda..b1ea7cd 100644 --- a/driver/ui/view.cpp +++ b/driver/ui/view.cpp @@ -5,7 +5,10 @@ WINDOW* View::win = nullptr; View::View() { if(!win) - throw std::runtime_error("View::win not initialized, missing context!"); + { + ERR_MSG = "View::win not initialized, missing context!"; + raise(SIGINT); + } getmaxyx(win, height, width); // init width and height keypad(win, TRUE); } @@ -42,7 +45,7 @@ void View::repaint() start_y = floor((size.ws_row - height) / 2.); mvwin(win, start_y, start_x); - + clear(); wclear(win); // generic draw @@ -56,3 +59,20 @@ void View::repaint() refresh(); wrefresh(win); } + +// from: https://stackoverflow.com/a/37454181 +std::vector View::str_split(const std::string& str, const std::string delim) +{ + std::vector tokens; + size_t prev = 0, pos = 0; + do + { + pos = str.find(delim, prev); + if (pos == std::string::npos) pos = str.length(); + std::string token = str.substr(prev, pos-prev); + if (!token.empty()) tokens.push_back(token); + prev = pos + delim.length(); + } + while (pos < str.length() && prev < str.length()); + return tokens; +} diff --git a/driver/ui/view.h b/driver/ui/view.h index 8cb620e..94dda53 100644 --- a/driver/ui/view.h +++ b/driver/ui/view.h @@ -8,6 +8,9 @@ #include // sudo apt-get install libncurses5-dev #include #include +#include + +extern std::string ERR_MSG; class View { @@ -23,6 +26,7 @@ public: void setTitle(std::string title); virtual void repaint(void); + static std::vector str_split(const std::string& str, const std::string delim); virtual void draw(void) = 0; virtual std::function keypress(int& key) = 0; diff --git a/driver/ui/view_info.cpp b/driver/ui/view_info.cpp index 74fa330..f75c64e 100644 --- a/driver/ui/view_info.cpp +++ b/driver/ui/view_info.cpp @@ -4,9 +4,28 @@ ViewInfo::ViewInfo() { } +void ViewInfo::setText(std::string text) +{ + this->text = text; +} + +void ViewInfo::setLabelClose(std::string label) +{ + this->label_close = label; +} + void ViewInfo::draw() { - mvwprintw(win, text_offset_y, text_offset_x, "%s", "hello"); + int li = 0; + for(std::string line : str_split(text, "\n")) + mvwprintw(win, text_offset_y + li++, text_offset_x, "%s", line.c_str()); + + close_offset_x = (width - label_close.length()) / 2; + close_offset_y = height - 2; + + wattron(win, A_REVERSE); + mvwprintw(win, close_offset_y, close_offset_x, "%s", label_close.c_str()); + wattroff(win, A_REVERSE); } std::function ViewInfo::keypress(int& key) @@ -19,8 +38,13 @@ std::function ViewInfo::keypress(int& key) { // http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10b.shtml MEVENT event; - if(getmouse(&event) == OK && event.bstate & BUTTON1_CLICKED) - key = -1; // do return from view + if(getmouse(&event) == OK && event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED)) + { + size_t column = start_x + close_offset_x; + size_t row = start_y + close_offset_y; + if(event.y == row && event.x >= column && event.x < column + label_close.length()) + key = -1; // do return from view + } break; } case KEY_ENT: diff --git a/driver/ui/view_info.h b/driver/ui/view_info.h index 22d4f27..da811d3 100644 --- a/driver/ui/view_info.h +++ b/driver/ui/view_info.h @@ -7,10 +7,16 @@ class ViewInfo : public View { public: ViewInfo(void); + virtual void setText(std::string text); + virtual void setLabelClose(std::string label); virtual void draw(void) override; virtual std::function keypress(int& key) override; private: + std::string text; + std::string label_close; + int close_offset_x = 0; + int close_offset_y = 0; constexpr static int text_offset_x = 2; constexpr static int text_offset_y = 3; }; diff --git a/driver/ui/view_main.h b/driver/ui/view_main.h index 7792575..4c7935d 100644 --- a/driver/ui/view_main.h +++ b/driver/ui/view_main.h @@ -16,8 +16,8 @@ private: constexpr static int choice_offset_y = 3; size_t selection = 0; const std::vector choices = { - "Beobachten", - "Exit" + "[ Informationen ]", + "[ Beenden ]" }; };