From 357c896b6fba688ace87d630e0a538cd517fd858 Mon Sep 17 00:00:00 2001 From: Michael Nolan Date: Sun, 17 Apr 2022 06:39:48 -0500 Subject: [PATCH] 12-26-2019 (wasnt in git) --- Makefile | 160 +++++ data/FreeMonoBold.ttf | Bin 0 -> 164212 bytes source/colors.c | 113 ++++ source/colors.h | 22 + source/main.c | 1392 +++++++++++++++++++++++++++++++++++++++++ source/settings.c | 101 +++ source/settings.h | 35 ++ 7 files changed, 1823 insertions(+) create mode 100644 Makefile create mode 100644 data/FreeMonoBold.ttf create mode 100644 source/colors.c create mode 100644 source/colors.h create mode 100644 source/main.c create mode 100644 source/settings.c create mode 100644 source/settings.h diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5d5dfa5 --- /dev/null +++ b/Makefile @@ -0,0 +1,160 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/wii_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +# the order can-be/is critical +#--------------------------------------------------------------------------------- +LIBS := -lgrrlib -lcurl -lmbedtls -lmbedx509 -lmbedcrypto -lwiisocket +LIBS += -lfreetype -lbz2 +LIBS += -lpngu -lpng -ljpeg -lz -lntfs -lfat +LIBS += -lwiiuse +#LIBS += -lmodplay -laesnd +LIBS += -lbte -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(PORTLIBS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := -L$(LIBOGC_LIB) $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .png extension +#--------------------------------------------------------------------------------- +%.png.o : %.png +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .ttf extension +#--------------------------------------------------------------------------------- +%.ttf.o : %.ttf +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/data/FreeMonoBold.ttf b/data/FreeMonoBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9332a5a8ce21b2529118e5340c7f0518e644af0a GIT binary patch literal 164212 zcmd?Sd3;nw_6K_J?Q{~dcBi+b(|e~o`_|c4LT4e6g^;iW2q6g_mH+`EARq)p1VjWx zKtx1E1`!ZLSOjDkM06Ns7za@iku@S9G7JJTEZy&WZg+eQ*T)v0qM!!isLgkK(vuBfPAS=l=+gBkAGYSgNF78DjGjmhlKaILsyM)a)cQ#I^- zp9KszJB(r2&^~-h zi%z)EV;#d7cH?=_hzTRdS$dCH#V~qm|L2kQlO`};_~B;W#J%6hvC~Ej2pf5nVG=ho z>@QICooTrS!#Km%QK{kXDsE@uj{k@E z1Ug4LGnlJ>u>Qe8?grnJ`zcD{NUHG~$6RN!nP(XxCO~6#!*HMr?mZZmtLFCMis2S= zA2IRFA}Sq2*)vQci|KM+p4~W3$a#3IXM7xa%(Q!WUk6}%miO1;O6PdM;{Z&U!*vYv zr!$}v`X9^a`LYasRP%5O z9PPTMXH5WV?|zs1Ne7GqlycRMpHcb)^sbVw-S-MyyZd+5Iex)AcTg{LwR4w*KlSb7 z?9*}EdCj-$h3mTj>T9N}r1`%Cz&m_@GzY?gfac-Ghx#QN&^@kce1`CHzen}-E{#Dr z61ZtgxDoURybB;4sH8rr4bh%(qCV(-YD;ax09X^pzfevA&~us_jY)Mh2Lh^F0eAyI z@6p(afa`!AfDM4@0KD%w?Sijyk1>hv{}!!Qay}H}38dIr+V}wo*U11kKFPSIv8a#VE9pHv=V^j* zA1`T+?mB*biRQG1T}lV|#c>ODG%n%rcuC_EZ~tCNebGCQmp-og|FPudoz{f#a|4ar zAMkhy`KEa}_B-41bEJ1zfO~ytE;Rp*&Nh6#8^;jT5#3%xnE{}8h<-n!91Wl~Bi-qy zJNoAJ)?C!l`nvI>{see-2Jk+B^cp>P(~9sWT?zU)9ym*$PHvi{pe_i{4xywz-SdpW zH9--eJAmer=DHt;lITSGVl_YsAU#BN1i**k05nHDbNqzT3qW|1t|pw_JV|5Hy&IqZ zR)QYxJ~~U{pI^}j@qnB5RJ!loW4KHAye6YfSDfAN68(U$o0dn zvHv261&<3D3G_P6! z;nx6o3UCBK&%OX0bKbKOl)C_AmkG#bt^>U90=KPo;GV9@w!Q;!-=D+vM}WUOp|d~g zqbs=I{Tu4<0ww{dZZY7GfC+$?0Lxt0gbT^w<3Kd-0ibs^fUy8Ku7vv=02+hvqHDs9 z#-jT#y8z)o%mw}oV=n=$1H=PD0ValdaK>5MSD{P*v;dxV)#15)3!nyIcGVeC!q>Jh z0}KW%0`vjEpSG_Bz;Cx_qu(D;(pc1Q3SbuCbpZ86_3r_?17ZM?fFuBop#czH>j4{a z9RUc(^=GbYdS|KY*;BZtHW>gKhj63kgf|>wdm>;8AP&$3pmy+zAAF5+JLp2Z@(SQ5 zSNSKD;2lRhO3>1QwRJ29oCll%ybAayo zqw5*9aknRVqxK#EAG9UjQv>LIs@DVD{bF2R4^thzPyNvQ^t{G(Pw!DX@(t*HYDe-o z89;60Fvca6Br9}Ja!KP7zXAux6_gS{y|bQggXer*CCZ)vjO+N&Ro-_!OGB9l2m%BE zsBap7C4g`skOGKa1^~$};Yt7<;yC64qLU|p-lg^^d0Nvw^+E3oo!9(4s2_SpK<}Xq z(YtdU-0u<12q)^(MQgsj8SOD=M+e|v0IU~34sdi_20U=RNA&CmXaLYUqCdVZ(O&BU zY9mHHtzi;?#v^*uoJgO#aCML^CcNmqL_ELc1b(i+p^nCZ4RqW@NqrLT1T=pdAJ6zT zr~U{gqwNJJ@NMWF>YK&@y$BzEU1i{Vl6{iJ1+M4R&JRFi674_(p2jo|J?jGq2H>9P z&Ci*}qm31!`kpT(b^DhRJ!`&Wt7&9-X$IYPMzgdT>pwX z>Vt45ech$(9Lr4?TAv~S&B476?vmz8^<7H??&%$=>)GR_d%jppejR|HgZRWfo_lW8 zFYxO0lli$LA`pmpz-ummo@706ecT0z#n3gP5_}ta#?pF2hcib}-o^bta2<~8b11=Q zOtuT2>2ghS?!KqFEba1)+Ji56x^->m?#EqH8;k2bS{oH03_!FZ_$S~+z!bnVKr^5e zFd5JS7~q1ZQBDHTGio~lPywJe<6PJDK0PNW0X*fpcK73cPVd(Nh63oC)|H--pYj}l zaA*Zk8@e9ykZ*W-BH73K@H)UAhbj!tmD~YG5 zkKZeOT+jbY$?FN|ozC($-lO~fQo8k9XG!xWAl=&k-;{(a`sKk*Bdm9)p86TjFqf|P zylwe6^^dpvPxqbtN#oO6KVG_Vdc59!@8&Ca>Bjx>lKNo*kJtZS@Bhns@$@F#9&bnE z{3meF^M5L#DhKP#E{m@~{oCIpe=C;xGH zql%HZelKG5tQVtYhB5HinF{=@b3DytFf!&2^Db&U9QT+KCXum1n^!R};&~O*mzjhz zim7${%y&E78zVr}TY#S&Ce3k!31wiP9A_9cer7ZNz{?DLvzcd@Y{xdok4&lK zwBslbUpvmAJO%jLafa05O2-G6B7 z`p5Y*mM4Bb01c^@@C(6@5kDL8(+@v?#?Q1TYHHCPwbC=ifX9D~EcSNz=N@TG=aq$j z%h-AEeiI%ZdU3aRm(HiTi~(mt9^e}TQvhz5fS&~X3<6(7^8D%zPKrWJ5);k?@u`bf zQLY5f#-N3>E`&Ik|4G1j*=Vmq3ujF>u)`6O3sg?`OK=l4Eb3H@hu{Rt8;}Q2$WJS$ z<&wBGt{*putKsUoG2A$AGWR_90=Jl3Cr}7ff+#_nAWKjnC>E3o1_~w%rVCmH3k8b= zZwrnJz7d=f{8MntW0=Q8k9i*d5=w+x;U3{3;T7Rc(Jj%xME5kWYyPFP>7LRp)-Bhq z*KN{m(e2c;dV$_k-%TH+m+OP|D!oA;u8-DR^y&I6eTjaAezbmqzC}MxKTH3LfiVaS z-3)#Pi9u#i8nlLFL%pHVFyHV8qsSN)W;CrZy=~fS`m^Z^(_c;BnXZ|BGj}tmnX}9z z&ExNJ_tf`v_fqd=-^;z%<6gnNK8^nCr}=?=hIO_FmMz zbj&&LUjDrznzQ4AcSo7n6AN&5;=g0CN^M1_wG4n@D$EA*+Ixco}bo|h9vg5msZ#s^3{H^0?$Kj68 zIzH{#)$u{c`yHD*Hg>G+vv<#abM|Y$LceIgC_lZQ&QI&7@l*S$yv93u z9xMI-r+=QD4^0 z_y|&1Kslpef}v-Xu(B%HR}H)c9rT|8`X`Jr!P17q;zdHIMMHDNGI2PEPJqW?fwoF! zQeZ#Rm~?m)nM@WmR}M5|cP5YN0goad8nTcng1#(fdNIA>XOuE!OgYmB-bG)g5?Zz& z)1Mi@3}mXIKL^9VsbPk~zZu5VG4+_#JZ3)g0(_EJ;Qg$HPq7YO#s=mO@G;(FHZz-; zEzJ9{6L1Gfg-_*dmJFWRu>uv>0{djF{6WZZFv>d`nEhg@ra==^+x^l>K{V?Iw%zF zsvm^@GAPujZxcpWw-rqp#6K7`2;&H2{A&iswt2>EGq4MQm2N>zO=uf~ZoFc)h4EE+ zomJj3L1JA-d@Qq@bv)0Mw0T!lZ)4fTgSHjXfNdhoLRyK7*@M(Tp$0*F4_#rKAiAJU zs4HyuDB+^%hHdk7)(!%}*qvNYZamg>C_v9mLlya^&L8Z)nPY4wyOKT2-r(e1CO4g1 z!?kgTxRcy{K?H2T48cJ`hlkFi)}z&9x5rJPN|-CG6V4W{6Q1;p@vQS)?Rmn>(<{@f z$*axls<+hJ>OI4Iz4z&EqHdYpn!D}pcGIWWXM)dqpQFBvZ?12%?^555zMuP^_w(=z z@{99p@_WnggukDErhl{lM*q_RTtHMnL%^JX0|D0qrGe#va|3q--WOR!Hqj!{KG7X< zoVZ-PSiDYrHpnkX8l(xT4ca8}kPMKtNIsWbk>*JkO7}~TOHav?Wd*VkvSqUUa!#(1 zm&zB(-;y7ccPONa-io&r_TVYOvx64}uL@ot+!nkq_;83kWMW8b$ik47A?rf6hU^Xb zEaaF{q*N&*l*!6GWvQ}Sxlnmrc~*HSpzH^*r@5^*#-!3D77tW{pLYtC_Bur&*?1tJ$R4 zrS;I(Xh&&Vw6nE~w5zo1wQbsc+QZu8x*%P-Zm@2IZlbPLw@|lIcOG`rqR-X$)(_A( z=$rM^_4D-0^l$06=y$_zW*UkNm4;eFlVJ+%wJZx~-h_H!atziel?wUMJK_-nU%9Ludn#xT}O-D>8OdY1{ru$}Zv(((ryvDrI zyu*CJe8hah++n_Mz8~%#E)Aa(em?wK_}z%ih=ma=Bi2Qnj5I{XMP^18MOH@EMm9xG ziJTL;IC6F5)u{BSf~bn9ny67xEm5`^Q#RuxASHx*AQo>RQIxUG0^@s;A6y;6HM_iF2P zwYRc&SnuZEQ+jXceYM0~l2FoIvb*GJsi-u)bb9I9(v78;%96{P%QlsrEIVIzwd{7e zrM#hhRr!JPOMN2xSo$pJv#Zbb3Qa{sMP0?(ij5WR75gf#^^NP>+V^y2KxJNK@5*_V z`zr5NS*zAmo$aUV7uBz_-|~J(`g`^-@4vSH;Q^il@&?QuaCD&Oz|w&Y1Dgj<8Q3~- z<-qoVN2|H&^y&fCb=9ra3#vC&AF1xBzFK{=`u-r#L83v*L1BX`1~m<88Pqyx^`P~G zz8rLMu;*aq;OxP*gXa$3HTd)p%aE}{mJR8svD8egSyZ#5=0we%p+Q5VhL#Q;Ftl~( zyrD~nt{%F6=+>dThaMdI<y0vv1>)Pw~)qPg?W!=fTj=F1g_v=0DMfJ-1^!k4FBkCvAPp_X_zqo#7 z{af{$>UY;4sy|kLs{Ts-&3b!-cZ0k^*AUTQX{czZZfI%P*s!DFNW+PSj)v)!&`>$AO6|!qr>mpJZyfp8k^0w+_uKH-nPZI!?w?MsL`{r zxUpYjUE|ossf}|Rmo~0xT;F(Qgl>dw#MTj)M#@JPj4U15Z{)m@pN%{^DtT1)sDe>b zM;#k=e{{s?>e0(bpKek$wKUCcTGX_vX?;^$)73GVV@8ZwGiKwMOJkGAHjiC1_V&1@ zacjqI7I!f zdUooiY4U01(-uwpaymD?_w=dLcTB(eOu{qS&lEqi>Y4S=oPXxZGdG^G&+wd4Fk|tI z<1^0AxH{v`%;cHbGYe)`&Kx|mVP@0J&svqO)vXI#kIjmjHDK11S?#krW+%*^IQ#Ik z>CbMM<1?pp&YU?Xp3^8s$=#)%OM{kbmPRd2U20uAap~Hno0jfcdT{B{r6-qOTzX@v{biq*De&uJca<8gh&3<+ItNUL4W)-(8 zca?3`vQ@bS%#?@?+9_+>-}HPl@6FaXcfWc2E$drL-#YlV?(LShkE|1|t6R5r-IaHu z-kJE$>UU1BFIYce{rNv+{$c$ePHj+aXxgxK!|n|SHyqt?a>K<9H#XSc^?6tRuHoId zcQfBDdbjf3+IO4Yo$~IScaLmTZZvPSY+Su@!+QbmDc>`{XL&F8z25H)c(38T=J%$* zH}Ab=@2!1r(|fz#JNVww_fBp~*wngd;ii?F)@|Cl*>iKyX3gfP&8eHMo69#3-aKOS z#Lcan7j9m;dEMr%oA+-1Z1b_rr#D~Oe0vMGC18tki+PJ>OYWB5TLx@t*m7XYk@w@? z&wPLG`%B+H`ToWCZ@h2c>a$h8)vz^gYv$IXt(9AAw>E8^vUSeZ#amZz-SC0#gP0FC zeX#3;gC89I;N%AvKe+LMz0Idh-ezcvYs+jaYO8FkZEI?q(srut(ze`fy|)e6*08O4 z+w^Vowk_MXcH5?HyS5$Nc68gxZ5OxQ*k*6{X_vPf+T+?Y+l$&O+iTmK+NZS7X{qA<3?egvB?UwD(s7GyKa8SeCYRK@P}a^ zCVZIvVeyCkKCJt2!iO_HT=e0p4>x|eV|VcGu-yr}vv(Ko?zg*c_t@Q2chB9uboZLw z8+Y&6ePH*I-6wW;?7qJH{vPi=(mlF8F?-VY6zr+kQ?qB(o|Zkc_bl48YR~#TZF~0p z*Plasj_f(U=h9wgulHWf-l)CFdrS8Y*xS5!`rf&F7w_G@_tZzCkIWw>f0X@E@kcX0 zn)}4h?R``CE#9|!-==*B_8r-GYTx}oD*u@N$Mt_~`{UjH9{Z#Am+zmxf8qYqe`5ZW z`={1F-9O-cKzhJ(pyj}t0~-#s9r)(J`2*KKWA2Mq^{56(Ea@ZrNJ z|6=~jh`+q`7yIXxpCA1q^NWRFEc@d47pK3t_{Fs^?i^u`cpniR2|i*z(spF;Ulab? zb~O0tg1?FWHvMlGzqEaM^zVcJ{>`!MV^fZ`9@}#4)K@-V1$~wG)%36Ce6{eaWnZoS zYTZ|xzH0w!?^g%E`uwY7U!6S89FI9(dA#*_+wqHE2Y=o4b?ev5zdrPh=9}_wHhy#Q zo4en7eCzkE`P-&%w|;y0+xsUhC+bctKC$=2#qWZ?tNm`nckSQp|L)80E`4|7r1Yfa zWZud0lQk!sPR=>G`eggb&re?bp8H<+eeU<=-`9TM{C(^9i@#s{{nqdIe}DA*)8AkF z-hL|Jl;%|2soYZ)ry5R8IkoWAnp1734xReu)TL8*e+c-&@I&$s#Xr>i(EP*fAC~{H z@rS)X9Qonw4>wPHo(?`8b2{&ICaD}J$?I(-x;x^U&foer+U4>6yF4r@ohj)sorj_Dl>I#wbo)ZTFb(V|lwS32(e==o#NkD4E& zeoX)I%1?RtDgUYFr>37~|Fq_({Xd<(q`8!PsrJ&cOKUH+UD|)?*rl_VZeHdt2VXW{ z&b(Z7x%%>m%hNB;KzDp@RdbZ)?Yb%2@nV*VkV^ z|Idhj_WS4Jf8Mwed?WeBh8qWO-2PSdYwurMe_i$K=QmY1t8Xs6x$@?^n@4V*xY=>@ z#x3TS->u+VVYd=)W#1~k)$dl_t+BVJ-kN)B>8&-lHs0EC>%grew@%#ZxOM&3{oCHR zrMGprV{WJ4F1THBd-m;Ji1X;N=Z)f4BkJqL#BF1l`0REs53gS=+dPG*vfBk5E}3lt zsuogpyO*c;{p@y@>XXEJad?v0sAs!f`tzT;)elC{!5sQL<@hH%lWRpB2pL|iz|&|j zhYQRp$*C5(Oe(-#a%vW9kxM<k6O{@!GPs*D zHqPMn;Pdd*aC16Rvp8k}o6dg84FsZezxpxpdDg<8A0M08ZEj7s^SF>J87HKs7mQg_nr=+GBy`*%JoSKqmG@!_0 zJ4<>?V)RO4b*w-r=;_BLO0@nVR;$iil5Y+56~;?6{>6S4xr+5wS`9kAmn7e)Q=*wn zo!ryAn0v}gp(%;m*j*(Sd}wR3ByQ}kmh58jTfzBxylqj*nk*XW#_k&XS51i0RXLu= zM;KcW-C|ganw4u=xdIrdSt&3Lj{^lfWl}Ax@sLS9y#T;Ehc$4SEevGc%k|wVIe{Zggc< zdL>o$pw8bJ#j?j3iD8h&FF)kO! zC4l=F2CFEOLQY%~o&tG+K1kx?@?WwohUhM~sAVs)y>08Q*7dktkE-?5$19Eob{Hba z_?jv$iC1ypgYW0QN!(`|@M`$i=a}_^+;{M!g|9NpF#JaaQ|mtCgLt z*Ru+XO@?;opfjIlCPO9|At>3YAya}v!^1;^pcMmMN|5xy6438MoMkiJSf210n{_QL z`!D+eUqz5q!m80Yu9t;YRs3ifx+y*LG>wmK>`A}k@|yDSAJ@8W^01O;`Z|Bxua7IQtu3ct&b4LuesLzAMw1Zp+B7+} zJ1d5c1p%rIy2gQuZjw-i=6IvkYCmQLS=rYVo|+h$ciMxCHs>0pqO<$JPlpnic_o1f z)T};**bd?qKxPC|XOXkNnVMJp#UsvQ&+PYlvo+C_C=CpjNHsHeO=tJT^cXWc)mlBe zsCBZ&oE&U01gj;P&2;W##r(zSA347!3%cZ48CHq3B)aFE-8%)^iIUQgv&^kV#RAPX(ur=~eTTTIM5@X7+E0N%s&$%T@6@W28g@u8l6R z^^VL@r`3h!<%GqXWolo4U(zf5T$^!X0;*Y(v)B}UiX=%4-Qgu8yOfsV^{drvzy8nX za&mI==bBgA%vJ2m_Su#M&TPAO;|9^)IUio8SmJ4?E^?EJjDS<2LNn1s#Na~qC+p|w z(L<*C>Qjd144$r$`YU8vvE{vUEs-`an65aTfy=f`61Uc=QgdQ78BtPoU{GL2R$4)n zE|^tO)&s|k1|3zPqlTnPXowSl6~q)VcpGr#*h8GZ+c>UYI>xuATT_;vOIEb{fscROymD_jafIf|B$E7_Q*<4jLyMf z3JZPg0FN}297rI-dYQm23=*T~Obfg1O&^6ss`XmgA!LtRtB2c7p>oK9l-&dFg2&^Q zfgt!P$k%3_>JV&|2KnQc9{f*|kdo}h+aybBvYB09KdruQYJK&zfdi($RhOMpn=>|{ z&^p3ez;@3WT4A$Q49&?}-PBal=dHxj!~}Er`4p4cl31ETe9bXUpqCo-QsK-C)*QB3 z>hw4G5wS*T{QAHOy6n0fb!=8%ZM^IeYFUf=Oz1)^t~I^3KII{?iXNpE=hQFkPUx55 zM>UK~kX#PgLv^EiT=B5o!$aYrksF42@cIw^b;BuN7Y!K1TR;*`w=S$Hh>R?VbZbN| zEKI8jGii7`5QPjn9eaz`5AGlc;qO|4@K`pLy)6#W+3&GJU5Ge9WUpkm2C=uaflBf7 z3&hGmZMW}^L-lgtx`oiM8=QDZKtw&SWn`UKQ3f3gT?>8NdBL`*Wwv<$@K8FFg7P+#$0d|v1|8vMj8pS@~#zJ=?LzZL?nwsZVF^Cw=rnoo=ZXO9BG&>1@E`S(Zk`e%m z2d-k{k}DH*ezO|-j#8w>D}3^5M)%8#>)tOwn;UINl*)X>iqU#Yc0!ons;IpFW#;#u z-8i<&{*zBgq(D%UTQtm5XUUyix5ivj8W$)D3>F)c*rd0Gi6$*RrQj&D3)vDqan=i` z&qT8hhrdkPj9lp?kOD;(E8%M-;a+U5L8nk$Qz)#~=dDKF>)qinpZIfu^+jt)c^_Da z%uE|xVs;jO+0{0dJ8*#HNr3ZahReb@a*Tv;G)Q}jU48Q`#mlr_;#7XoEKC}dW0J++ z8W?CbY9I6;-@R$V1y0hsAaW1^Ab~PimTZH(FTpd{$WJI zVj7c0KGzK{nd^`9YS<1pU9q;#Wze#;7NEM(5C``KmV}l-&i0PaSE>D_nip)d-d)pD zRO}-TQOhhr3ZcL=Cs|%<8#6!wn<$O0STWH$b)CT@*r4lYm5N0glh4RLc_o8sY>uC= z8S|B3zDyENORW+_F@$$3{LrR**TMG65mS81M#kZ!! zPkxC_DrvMot4X%-@<_C#zCp(@GPZ_JVkYUGPLeE%93*~jaG7NK6!xIa9%&_FLb^V- zUFn}_NwoB5neX#gIf=M3Ki~3_SAPCeR;$+%xXnaA_c+kGCUU*79>f=qkEZV&jqPRW zZ?jszbr1Bd&B64yB)*sLwZ!He=2fdT=_N0#^{IT<`cz}@wO9}6#V+Ifs zS{~Xw;V#LNmcp}566cSTr`pVdv3XIVH)rhlh7jTEE5vh3Ph$Yp})a zH`f@dPwrU|)^qYZI-Oo$t}{r2eU#eaee>Q8DFg%2T;XGKg`g=6mX0jDd$K(Di^+w7 z<|TujyymA*vb~nH-8N=nK+;$jw_r@fJ$SuA5ekx=N66z` z5;2&a>!z03BY=NK27Y~GwPt+F3Jm%KZt~dd&(`Fl3uJgQ$PFt-9*a}kiM@>BSVf-7 zaQgX`#%)q4wqLZsJjb)64LalaAybTcz4h7roMe?jTqapKzuB6cgM&~SLx1m{{S4Ls zTrP~0YFPWXY@~aQ9d|Hh1?WaG98gPaB)RV#(WM1l>M)55u;vW6KQLl}F%)spB$hLx zpmkBR3+*SJ!(deVR2K5@^zUR?_k74w0IVBE(O_%fGA~`X>1>QVyDC5a4-;G7SwE>) z)9Bs+uD^d&-sIlTv~Qo)y4^OdU;k-Ss|HL5%KUnZdEN{|pV9yUuad!44^;qGKyJd4 z^X@n&_A?~)Piq)%wPFQ$U2}QZbo;g`$yr&+?7~n>N_Ys4^?0S-o2bV>+;b}%bHm8^zCf0P^weQv`H$ZRwj{T2Lz?0)ugm; zZ!e$Lzu)w!RRejPh}XyPYX*OrVhG@Ew@&C(fHZqB3Ao?nHeB2oYai1jU0oOcK2!h9 z*d96l_SZ_gSLG&5u-S@V^quY^!|*;eSsC@G6HU(81&i3%4aC0slgGgGJ6R_#C61-p zYB&XgaR?;=oHk6uDqP-r90wfbIgpPWhvewuD?N7o$n`-cxg;AI)lkq9TLB$E|Ky!(9JI&r_UJ1%DDtJ2xhULi_6Q4W3>l3Gfc3aEMd48wEyz+d|*8 zN|r7S))@@Cxz>We4*$HspnD#>ESbgrK3gTrl#wJ}pgswA$8GRR18|4V<*kCi=*t@U zK&n$gNz#%OPDd(<(^=!Qn}-e=pBtywKbN1M5LP;>)R@AHw&SZH*JIJA8VypBUQc9s3_=RtORCL6b%9b(;7 zZ*MK8)!71NQpEGmUB_7Vdu|fxEZSE)4Kt}(_M|m4%W8ddtzOUdusrzKCh#I#)+IJ0 zac?NYU0VwIZnlRX;!$!x`vH_;RuLj^7P>|w8{=(l=|1qOc?+5=dbU7l zL?WGmEh*?*W$jT_$>mzkSe`#TH_-^0VK>SSmZWEulw_t;I39k{bq-!I`OGel-#Lqi z8!mD^oeC5LkZ~$YsLU@QvPaMUZ7D?|A%0TL^W$>sGtB`@o*IzZO`X6dSv4^}A${_m zp`1Ngbgn8kJ4-uefktB`n$q5*5pxSBsUZ!?)6Pj--jG3R#7W`&&X2ca@Wxt-`%IWW z|EYo9F)M?vMbuJRkl(jzZk5euOq}=G^OhMhwMzEj=H%?&Woa3uC0KJB=Q?M`yyS>f zKy$hRD`YnzJ#wc7HR;KIaORfAu$JX3#!Yy|KFTmBWsbj8Wgo+u{VJOK=IbJT=8PCV zf5FJ`YQ1_(WFjy37y;`uo~Ie49XcH}bFl)sd2V0T?Gb}|?1Jr~QsHn@KREiYzKHGo zw^*gjcliz87MBFrviGd9JCEa&vCU-5Sj$*8bL(?6Qh_xbze9^F56z z#)N3k{QL=4t0xu=-1l?Nkdoat+h%j5GV((h_>Cm?SR;I41e-n{a*tg`*b`(ECkbT6 z6i#WiZv?TXm&5OFpT1xUZz+jN_76DU(WBANWJfyA2gXAmhjh}Z)0=mahec15joR@s zme0`_8#k_UqLs~fnkNU_2(sJL%0~#&&>ds~{wObh@P%DA95$n?*SW2~C;mL51u#X|ztI|UG1k`KB|5Nc9c>R!TlPC85={f7t; z@&7{}f}oE!=-a1*Wn5I?a@AmV-d)(pubI<#2d~GI4NOi-;SC_^4A)+fRFs%v;Rwe% z-3Agbip?4m^0Tw^hsK3x#KvZ&mtxuZVOz_lKk-;R*ARU+36-07(s}o_t~$Eht78&nT>(Ir+6=*^%Y8 z9P6O`oWaI4BQXv?Qi370x?-2j)?TbJ@1j7uQwPVPe;?%HljjF<66|TthpYPMyjNZ#ZO@CyUE{ zH+#6XPm%?CwV?m#7Z;AI?3IbN+zM$T)q1AVnqLX!%06d_&3v}LW_tPte)q9cwqsO5 zK~hQqkGmdYHUjrhimQ2$^mNLuT;UR4UW7SU*dEpc>NB%f)u@Fpj*c%fk?_KHY<**H zRaJhEs>8Mo>CJ2^1$Knf;?H6AD{L z*R~AqmF_ExXNTwv@({T!Kq{6>gR+e|6>2}LK0hX0DGvAd&CALzQz~IbfR8`$5p#V= zPo+^b&=tnw_52g3Vb10K#*iG|L$CLhs``(N>Te^*m@MK>ILbR;(kcVQ0UDVqR@OW3 zThvzLX*IdV{8+z&wmZpUvBZ3kP~Pfy4o3PIm59QmA`HWh(|24E)1i65Pq}QXw@89MxkSC*p9xU3aXv zRXA>p4^|3Di{2geZh+M~7yS5~<=by5>S6zY?Q4T}eb^uQ-tgX?ZmGZ+?qw9v!nj;h z1w8OHc8}FM)SBF{re{HIf2GO_$22cIyE-R=txU97;so}sJ9n~`T!{Srez`$tuSCKY^BW$#Aszl-zcZLmw&6OxR0 zX;=!Rx&?;9tvI$zM(D}8X(g$}!7*FoCl2xrl*vOiAt_~k(!@lGe_3*fHdHPPWPf}^ zXOziJ;crL-IaV!GgqEkgFAL;62MalobbU&Bs6wV@SrM@l%iP8IwK!iQWGphV)Q}>E zClZ4LTO2h%m}#|g&mpDZ5j^4Grl!RaLT0xBW4=IIE(L1Nup@ChkiP%>Xa@eTSd#7A z&MDbv$xGusY}&Rz3`tXXlb5pGVd>`LS2_ES+H{&LMAcGm%-PnF|1`zyBsUu+@9NGnSV z!0*&~-G%c9ezo1nDxFGC&Zfpz`ARjFR$JMS+TL(QVpV?Lz(Vd3X3i?_^=X1us!j1N zvs(K~o+|4#F{li#OTL%b!y08(hpF=|@lG8^eukMFfbYZjxFLq;kBNEhP4T>3q!vJt zx?FxDyAwwsLSbJdKqRp<^J7`X7oO1yReG}hPgZlHw}dT(?urrDmu3xDOC?I9MjI(D zUhMr3@_Zr&6EYpOB8kLHkL^2Nh&OGcpy`byinMm9T z3>aLI#-~6bLxga3Z_wgdPeb^_j0fPE#_vpcqxM{2v_>Wk)g>gxTeQk3O*gSNM5#xF z$zLQk#MdS0#bSS%MyU%q7@n41nx4we^-GM4tP8bO_kOh|9w)DSDo+Zh7>g(>lr=p~MY|t4vP43op?rn_pP1U)UE~sc_~T zaZH$F0M2ZBf>*I74Bq1z07+B4W}yjVD}{3qh!1!s9$`5;2IlRO%q!d+ZlDY+1mx&2 zkMpWts*W5}GcYG5Q8=LRr|OqOBStrsWHky07oS@`+#HoXU}O)OSQ5g%oMzI>O*u)4 z*7&$wUzs?k@2s@6aGfkXDDE~g{|Oxb!g*vZm7c;S!!0sis;b=-g+VTCmkiA}%U+&ECGVbym}Y`nrV+8tNAi zuK1#E7kinj!X7OW-+Ge&&g%@G)l!_UYL~EqBE{^E5h(OdUem*RzB(v5zn5o{rGHve zNqw0zEK^(LDUyF-QtRS_B^l2+7`;TMWgN+zS{;&RnO*KHPmiz^2)#o^ikCvYlwu#h zO(G=5n6Zf``PJjEAZ4*{;;%D6!=yQ5qw(%EB`>f6IdBgvK6q6m_4gIuxg+-Tmx#(A zxjXq%U~rKCp56XIe!ikbU2h9$HqH38;65w?v>_K?a29~ z2ng#R6;lu!9UVI~y{BHK3JHse=$0r83{hy+AtBmUew}yBa;@|2L}OT(aX)7;X2z-F z{X=2|y0Ea`K1FhIK+sqGI^W;X>xBbY=DHV%rY!!BpaF5TiHsNK%KI2nV|z-<&6E_* zP*DMz&t!hZ^M1~Ad}kH`criJZw&gs67nY3}*}Lb6)3y2eaS8cczmdIqj~ulus-U*8 zAORaUS~q9xcmjMY9A|dP>>>^2G)4HL*qI>U%I~uB>0S2jNX4QQ0d}hm$BZ@`9FKzp?LgGs(tcot$*-%twNycjXJcT{fX4d%`%O%3#0rVv$J|s`VBJ21q%X zv9KW7+_P2}onA1hFiI^~$|=yt;>+A?>|XSX(+cR^B%~oBB<~DU@Nt4ivXGFiN{WCN z(A51NF|jq~c(XJhM5;BY6&hcWufMd+l2+^=DC6>q`)3tO*dkf7DpVkr1V}=~5`~|? zpEN)fl@lMN2@rGo?6{ulkO1rnfyZ6M_cn9ODZb}Qe#LPJ$sx8=%liif1j-ftrG6qA zS6V8P2Z*I5A{qPu+Cz-w{d!1=I}#NR^Y02BkVB72(YY!XK+I)XhxI8}X>1}8w?$*j z8DxYTZnMeF-71g@w-L6~{=H6>`e&Q{1L%cBM->s?8DVQk)v{ro%9dqz zI5OB*(H?wxN8AwTzJzT4Az0wt7Dc$^wO0wfkRkB7^h=J?nCn||fHK+q%*jRjX z{u|rQwbGt|Viztk2GhE7=hE2njOgf{F)xn&w+IOTdD|Mp}aH~uPTV>Ui6DsgXET^q$yIo<~>S0_FMb?K+5%HJwzzR znoOpcKGD&Vcb19!JVw}3dyZ1-?;~PAQA+)~ZMev3b)1OPg7TuY8yBB_7Phu4uJB6# zH%tZpL5uunY@hiZ9rGwdJc_sd{=Zc~9*(a;=PA7Y>4CqJfaF-g|4j>-{>KII`Cqiv z4g0-7TdL8QLb1}@K$Li&%FLhjJo_(~QJ0UV~4L2&BwGaE@u80gw z(}SAF>jgTrulv_C?s~-8u3}9_K<}mFuU#;tI9&&PIQt~0RYrD)c9gIKbZ+djYffK? zIG&6IX+$rn)oW4!R4x0VtyMysY>Pt4N?su~`;JnhmU#~qM`jHBAs?1E!$P`v^{5ZrCdWzz4l=oD~p9l!L*dyRX=8IHcoQHEa-Zc%1 z3n#aYRJ3bz$|d`16Z)l;WXFbA$pSnx6k!%`aqiH#P|t^%QNc2SToIjGHhj#Wgo032 zfK)TKTZmpI7X+3@rRg;RGE$^@{%ILKqofZLrWD!;zhFLJin6JIHrAbD@@CMQ*0_n8 z2Wlhg^+^4EE|p(nSG~i5_EM}(>Frs3YsbU(++|uzk0H)p`1&gJFLd=kiSIw=vHJPk z5WfGe^$MPc?93eW)TN%gMEx^^owb+%N5tpzvO=8^YTC!bsPdjdinHKZ!qW)(rPaqq zEtjJZ1TOnnb!u;Hy1d+pU}4yW_2x6dkP(JtuqD`MEdn_6!3JXEwS@A);z}A9ksLU4 zOui<*zEcLAD6@iS$LEDSGG~PP9;u(tYwTRME%b^Erz=5 z!GkuYg1yO}#eRV?dGY%Lii|;@YT=;co1)II2*TNzk)hZLj~uDgM1+p)yq3z8e@B%} ziYHy4D-n#v;XT>XZjQY;6K{q0A4&5~dt`48`BNZz!+S^kJ{~TaL;%Ky6D^bwpUb3g zrUnKDNY%28{Pitm#c=`9Ybt4S&iYBc&;MkK>eXc5^K(p0uO?N2#8)K|DSK5w}5MFsJ80!7lYq z9%hJ#QR`d>@L0Zp^xAwbkLO8bih%b5@XHtaNJ}!q;Iom(a&^d~aI&0+6*_kk(Jbd1 z6jxvPFkgq#c7`_;*2mdDN5DVU@*JC&o{*r5pkx)BEkczrD>zgYjQ-tm>G8A|s!~;5?T0MUt3c=g+XY)x7S& zb^!Y?oK1ArFX!on0Lo+a&y()Bc^&jc>n`ob@pAOz6ZN&k=Xbt*qW)#Hue){CT@Qcb zSH$gYI7dihtoXY}bfTkXjeM>S&ylocpfnx=o;v*InYi-deX28=om_LX36H$k?Y&3b z^EYXg1O24RsBBA6N_>Dq7MPS(UTf)8D{HCW?R*bzE2 z&*SX~hq!L%#^w=2LW<6P1_y(OOevZOeMiMdIJuP6zTHE@!<h2#=N%ay*=a$txNe%5%9ODS_0Rm%S=*)kFkWB&-Ca+6V(?2GH_sIbLav>20|`1S%;Eh0 z0#ruw8{z|e=#JN;F6E|SyGDYzxUjV1JnfiQmo%EQ;=A{*k@@nfRuV(P&jKQf!|L1G#7D!ZmqAh+hk&jO|wTCY!>?RM8YyBg; zNdmb8KHd|4cRvl)_WM6ZZe4h%~m>l*RA{8dey<%M&&b=hv-CrTNjGD{7 zq&WqE3yVr#Io6t+u9QesAqlA~#*}0wC?i5&_+v4v6Hz03GdIY4iJ{AKYh7hT8l^sDCSpxFW|BP z#e6;flDu2jyY>hy_^9^tr<|=j`74W?PW5-Lpq{q@nD5Wfd-P323RzvD`^3a4knT^5 zf9ER+_;vKfrT`yG+zpKP6)E~e#8?cm1@P3L{AxmPj82IjQ{HDruw10kB}9hBYT))i z@&$!VEiox$L#1ph{~-nGiFB?2Iyse20G`0@;lcaA%iwY&_b@oi9`Ax=CZ%pYp3$W< zM8rp=xzf325~AAp$gnsKGP%+pP41GZrQxA5AyU@Eo#ExwzxW1&_lM@gr>FfHas;rp zd_ETEuDeP$nNHpRY735-X&dok+_VoWbJFvz>A97(mQETS;N`A{ zDF>CD`!lEQE$8d|I8LG7X_KA%JPtIi^_b{v?OGe;vT+ls{#JfCO>~wc$9*|xBU8~^SOEvbQ1e0X6~;Ev0e}J_7Ek57bW1c_t@E; zlA0-%PkA(rFKYR>&OAOhHmT9vvm@QQe#~6xRoDT(9(jA*vuI!HcNMk0X_}qwd3_r|`WCIbw0{ciYq@i% zf22M4FVqiX#yruUUtb5U@5A;P7`MMDoZG++aolmf(TUG;Q9Nhm`g_bhz=%9M-yvV6 zkeB;Xti)_!i)c08A>JzF^;0SGmtI7D36OpGJy0fYq+JsKAN?>W#g&HU3U)vGaS)Qw zxV(HMeN6-FbbcSyqsL=k2P>m#A-w&+K`5{l+|2Ru!9LbefspnOGsF9)w1 z+`=Eh@u$1I<$WS&u>)CW|1oXRHviw{ErK?DyoCD&>(an9g31`1r%SG>IA{|e-M1N}JL_jcAhPB`Ci_b=f2gdsk8wEywMC(Idl|5y{m1^I8KaE$b* z^rX72vis8}XM6?GXqU-jmv>5!KJGG%ahI>C8g+)~q-eL~gvHUvPW&e-r17350~{Kw z#46C=B}vCO)Z?Llfa&8HP$Gl#pq(%INI35bAS09A(mA{#)_w)!yRtm3QI@EJDV<~U z_TQQEX>r!{kq}>Ce2m*Q!E`j`l0M9-WS^sSQa*HSj#eZ&W+ahltsnACgh#fOC4TxRyo!i`Cax>W{#bL>p>~ zqLhp_d_ve*QB>laJRNtwzBFCu#}m(bOh$%Coy0FAjsK<$ADRtmj?;A#92VIRG)@PN zDOWa@qB_5qFU!vs!5sHTArJFk*;Q7Y#u{{$nHX$sW!;oQJ|VUSRR>)8u#e@|-oHob z!jI<1g690UbS__HEboiN@@qkPxYxM3A~Sn~A_`n-&_DQke@7O5AIIyZ498up67)R! z(K|9I&z7$@@%pM90>jeRPFxt)4n9j~{;kZNsDWJ`?Dylzw_ycHzAfkTB@rKNsSsHw zpj0hbpyN|-%hua|0o$&mtXq`Lvz+5&oGh0Q=EeJ9kRag2^Ny>&k+1L51z+bp`tbO= z+GB10ALhP1PR^oQyX)=g?wQ{Aeec=#>7Je?v-c#K$s{vbCd*{sItfV#NgyPEkU)SC zwt!+nFKV1 zyXsWcsZ*y;o%0;O+>h=&X-V?)sJ~B|LjN+V$MR1>h8FAZ|uw}}tuXs|1>+4ID%Hs)i2YM=23zjUb`b?^`6yDp7t*xwC>_|3p_=g=EXOzj>U(+1D4ztwM3jY zm#OzIM4oUugdE#LIw0ph7YSgQ4tfLsQ_Pv7Wet$K&Dn|Q13gwJ0v?uO4Ulhh=As^p zBW&|b&L5Wg!_L<$BQC4Q*!Cz$%ia)2i*8fPU1(0R>8i>8e3i78+XgWLm^X3m7U#50 z{G5i9H$4wNL!2S!vpzm=^7EKC_%8GEVLos2^BC7fLbv^ZbXz=KQvWrOzvCZ$gmOI1 z%kheN_%zLP9-NKcmA+xz=a}LfTS+R?3Am4uFu{mGTp*@WmKDW-Z^S?r^??gSD`{<<3pO^2YvY3km zt*NThub;47W?WIZYRm`~4Xab^jig&#JUMf>Uv%4T7qN-#A&0s-FDO@0Cs}QOPuQDmul2$1`JZ$K!8}BuUx89#_oPvm_u_)d69t}vg_9gx zJSiAW;1>Gzv8^9D2SbbX&QRk}(mL7RF|lCB_66fz>2Ji_+Tw|}wp*{ax4R-HSTwgc zt%!x)-h@RrHg@Iu>@|xPZJFro;9(wX)zJ`|Z zaue1N;y(FWspo4*em*~hHS{DehqVDCE2>c5WGkSiyi=H)!TQ>JG* zrw5dP9`1LJwMA=vIjPI*d(3zE9#r}~x9#M}wu7hfAH|Q7j9y0kz~h`m>?jW% zg`}EcpU13-t3U;U3{!#-Q?d8M#YJ(9ML;P{o}>ZFSh-f4S(h1}+7<3OXT$uymP%X; z>bl*PX}z(d(+Q0?Xm%K+vhpQuUE^|u>6!^dm|DUP_Dw*I*(t(wu-X{*woHtz(OG2g z3c4cf*M)e%sm`r2pB8Z%kD_n$&^PkUCwn?y(z2Zy&iN#U|NG8?-Oyn$TA^F$u5j3Q zn(O+x!~WbID~0oi(kEaGSX0RwW7Fc+Ifu@I_x@;?QF!lLy&;#`VRt%f=XEX6S;mBy z2=${!>r#CAYmG%;{=!_+Icgkyc`atGbS^I>Ua5GyWG>0pL%uawMA>T&#gRvt^`*gJg+_v3?nRwn?=R;|03p z@glo2x3hmpc6P-cES@jj+wcq2Bkaw>uCs*Ob?^(Nel@r2sK~A}v;LdW?z#_kr`8Wy zh`Td>rkVNt7pOc(H#Vrfq<*s9ZN^-aZ4kdG&~p;cZ*DJBp2vLav3@9K8vJ|eX$@-x zK79XEj5+i{Y>w;`bb517RyHC;%wzEmFX=i%+<9dxRjC~0BGr*HN5i_o(lGR)p+XpX z?ya_oR8wb^;(5tdMKL$%$*D9Z;4UY)Lnl@=dFnxgDV}=p5TiH>5co{V@zT$uajb?i zS0Nq;{(F5Ecl|7dJlL6eXwD;utbm&dkIjKMU()6@dV0uM1zqy*D#WzQHXjw&J75XH zSmQrwN;-_OUZ8phW4%hA8yCulg)av88=zZhdS2M@`8}(O?pf(ZftSthDFl=sq^3F{ThMaq?Ppc(}0&Kj1P)CNGfb7f+n%c#=biPh$+_r z<7iVT;_|gG?JIyal>jo42SG(y*y#=p)Xz#Oh)u*Fpaa+fR!L2oQ!ys|3}ZrwjC9EQ zpT~sVjzP)&?Eh|52!|vu^-J5Z-@|iRS6=*R<18uF z?(q2ZeuqY{H)v;N6Wx8$v9p49wccbXhj*zVY}J`8y4u{=tGXYC(E#IwQ`dXQYqJfp zD+6buRgf+7O@Ul|u1*uR4u#Wj5L!Y6t7{d4R}8J%cI|arS7t6y2zFToz3J6cLj$W; zWQL|du+tM%2<{v1yKL*WYxTNLz9#JnT2HTz+B6CTvmgsT3RNJJVARh zmEA0TiF6#`esFQey$OmpjMWr#PHqKf@JlGiR7t1HnmH|2LlLQPvT?r@!{#QjX*102I`BF@0Pu~U2)_##m70cOy~kpi41 zffOLSFBFgh=69;Q3Y2{uVt}V*RFFkuM3W0_FW5dlMQ`(Wi_h>Et^;L7%&;ncprs{= z!I8~!bkY_JmVH-&5zD1~?W;T9CTOuA0cOmGMOp+CJA0tMyPZ3fakMe9KsgD@xESzsKIi7p?+HZ`;LqC!hE zN;?R9Uti-5H*`l6!`&tAcf&&4y>+x}Fen+#t?_ms_Pkr5;a%*NonzahA$J7L%d+C6 z^aautV1L7bZpK2Sb-uO<@VgZog!Hudbt65g4a~#ywC(mScVA ze?HLIFV^R2z;Pwma$qmmpx%P6umDzHqEOMv?slJj`!<(9;6JCm-EfQ60-n&#>F%0qar^WgMk_jFv%}y0FJY@a(BueQ zb4|d3H_b2WobEs%Y8_d!A`@tfMJpCs9WD#NoBT#Ec3SYw@8Ls2YY*E<0UZEim82;X z6hi5hAZ*Dm6_>;!n2<+?;DJD9pTA{d@?sI}9Z4sT4FL&djA7mVGAyS z6nMS2vd6*ukXpy_?+E_k(-F>pK}s=hyoxA!RfZ%BS~4+@h{Se%;H{Y?u- zS{;7B!(_IY0n+PfT(d}1YY*C1XKSsU`{}K+7ay13P}$x0l)3Fps?W5i=K8AxR)f(l z))kny2kRPpAIEn>^t4#DAQB1!kiYq5gcwsmfRJRyPztb+7*Kfl3U=}pUIGR(tN?{z z0NFONkg>?WTz~|T!9q91aL?eI<-Urzr4p5=HSg?2LgK5-!iK*ZTBuS8E~~V#j=?| zNWZZ^yu@I{=gIH2XVwf4UT|(tGMQ}DvIR{Vz#p5NrKCODRj;M@jkzP5reyZlzb0+% z9jv?E;CGUpxS=Z|z>2-Z##b0^f}J*6hji3)Lx7^h+ zoC!0-J?$>sE6>BgpFSl3uB7{7C;g9 zkR^c#rwhF|>mI_VSf#V?BqdSAu z66I*+2ppt%5b#T}HR22~YO%3qfdzBBuYInMuwiyjX0+7QIvEn?9<&r{Nei5qMx`Zc zOO4p$Yo&eY8=d}mOC<5*S{3mgCPhc8j%(jvDfX$grX!G=v+m&To=LYBR?BH1R^y=%{I4^e#m{LNP_V=V~*&jd$Y@rSS z$itWmJb-4V5!Iz#wk%GOG`iqL- znCy2P{E`5Y3#a1l_8pTlLMFA%aeN??4g40Rg!gJ>nOqRjHHwp$7#+Es4UdlkxMyZy5gym~Y)VoNp>B6~q1bhh#t2_=+veYC`iCbjL zM9H2DTfEpNn$;XN)BW6%foe@ST$ecns2@A*rx#XBvg>$;xYaQ9^+?c4&Q!dI3`7%yiL3?yk~ehCTeWZ9_Jea;mo%8FQz@IJZ^g!gRk6esQ+?GUNI zJwf=2Cr`5PXJ0>Y^KaiJaK$H|+;~qWGxyt1jz;lwRagERWS3tDUufKbYry$7MUBA% z<-^W5QJq)6)DN>6o#!)rA*2R{lsonhzxZS&ZM#Ow{jJLczZ zu1%Q&c86JSQcIUPjV34lVGPMWN_P<4K1wqyfZ<9`7-%!ZgjNMTfyhwio~R>{?B#d5 zbNWiKkZkTi=HY@(y>QL!C`Cm=D4ufjutvFO&QD_?=uQTAfI?TADGBJng=RsXEV1^} z<%8e16B7Fh-(UrWfIDYZ_l9D;*LtAnMMRz16 zx;lq@Ww;#4tuLzUpDVo^p}U3Kq<Os5nHUZ$k)CkS$+oi zSB$gtuLJcRow>I@4h6Po;~?Jpn{Dgrt9P2O|BY1P4yR+YCs+5@_Cze|*RO3?GrzlemTS+_ z?$zyaquP{cTb^znYfjh%t@ivoQU>RrIBX7JZ_>+U1rjqPPn$fGScUAwfpj{sdE`->oh39{%n92|>#PKP)*S@;EKCfae7BS* z=)U3(!4ue52>nMuZOxc`Y{4?@mLzzCV{@gxCL?d{5G=4HsV>WAtbH>L>KKF7zdKoI1ACeAxUS1Ov1^D5}aYf?Nsh2f%oGE!t$=|0vvZo z9KibLKLohk1Bj7g!Q>GRVSI7+NcOlJjz=3$avMMa?+fd?ir0^gNK`K%(~9-G+4nM2 zoig^e0{ZE>vNdu8zvfOFRrdT=n92g=Rd@*CHi;H zo3o*2ZY$!MobE_vB%P|O3Dt*=y9IwLZR4JoBM0Hqnwv(&cFT7KOei-4k>L)hF0cc# zeD(!^^1FUE#5e$JHSq&Y4>q7Q&X2pqtQx4LbcAV*)V6` z&XXH2qCU^f&tuQB$Kam>Tb$gO3`2vYVq$4@;;bnQ0^%A2^3DUsCDw%k&@8dCM0;;d zw7JSsUTz6#D^@O_+%eL>LhFoSwE_^$<_d*!w@tk$T#E?@cb z8#m6o(6+?q;x`69m(zEcRWPI8?sozMoXeR3_(u_q@R1kUe`q+kJ`0_Q)7Y9ue3>9N z6$3P388}al_#^y7u2kWbPbR)ec31o2vw9PmhFEhHfwKXpS27;G#uW^@m@Q2*1_9$s z`{u0Ou~FZZuI2SdA^lNI%kZ4J_P}e&r zv!UK-v4o8#m)}u23x_)zXPgiuBfMiUzt|V~>I5|naMmxRoe~Q~^oz&PjUm63$&+bJ zTxEZOl26rty*rcnW=%2w6#EJiO-;6h&7ovqor#iAU6xHCQkf^A676=vu4jbYqZ5j_ zttVl}=aI+R((>W+D6&&Q(Nj2_9GZ06yD<-ZTt*ymi3L2bbfl-wy>!dc3oT`SN4Z|t z+Fw63e=r?ytSvXPXux@A!0z(708{VU;Ml+Jtb_BS$j!EPKkPkvj9vXoNvN51(CC&;vo_F|~NBUxG z7E99PaxDwNx~Q=^Dt!%&b+Zz+ew{{Rcm4JG1iik1FW6QSPFHH@ zxxDsZAHBGIWg3l9S6%Vw#0M z&<~YU(Mw$7w1MH)Y3}>;V60}_tl@b?;gdnH+V2U4+C8BQ3{|U=)su@m>vF%S`FdNw z&EM3XJ4Ez^t>qRs`+l=I(o_)&m(8D*+8lX<-^0w*cqx+Y;d%!rL3S z6Ef0aqVSGg2VAw!&%`|}0wD5v@#lBqEO)+Y7&W+|O>l03@lw2lLJ#psH*KVJ(OqFD z#3Y|4`E3V~)l!s*AjBlS)#CC7zxFlphcUI=uC?0L($|7siP@~Wimw&l6~ARS()-FF zWCZ=meTbin$C)-LDoD$Jsb;w*y04M*m0~=w0PvXxWr?`U-+!J}%O0Wx%@N@)>_D8i+?X!|*_eiMFbMQ}4imcY8*{Q8xF=`lKsiPC6p& zP#DMqu-t9K9mw*C-;{QWJS%G4O9>zN05qXAC@gJRwqYwR1EGd%iOOf_W8hChfo2UE z-!_~wa!;Ufn+-3=D&Ys;klKp3&&Yo8+;q4Grqn{Bl<7ps)m+0i&@X!z?hsJXh^_U5 zrdr$^1mM{TTP-#Uk}AXnuE z)^gxrf7Imi8pFR4-}W~r=({Lethe|=W*t$4cR`D;xkfs;eLI_ezXExGtUB>EyIXJe z<1vtze-nE3UdSKZ4^$=8+(bgMI!-ou)(J|8xq;fkc^h|oWpt+U&|s1%$5fM=AP`dc zRT8ZS0!{?mOs&1Z?ubdu@7dap4a;UCcK3VEzQ9(HLg(AUWfgVjlMFzX(V=aAYm?Pv zsIMrmuaFqayy^0)UG8d&#h}%)<3YQ|>CAomO_xto#s!nj9wot$yKQRDdB=m^_QMSs zwmA{aJ$WDTt6HVQT#QJ&@yqTz}@;KC12j@Lsu_Iv)k@WbQve@M?yQ8{EIe_kC$ z#CkIyDj0}j*7K)_rHG(qaK=)><3N4xi*=b;bqOFBazM*iRX&?#%+3R2$3 z<&Bxqm#*2K3ZUuDCN#Z|?~!UokG8e|bkAjN2I!sxT~PW)@k2n*ELR!&!5@>?C1{kWo$-Y6!!>zn8!xJJvz>8 zWD$@^)B{Rv|J#jrH}tnTTAk^OyB=;lk)c& z-6--MaI{pz`FB-E1mA%lc|11afDEcpX@oua1df6Vewr$ZJEunU8UB!G%mOK7hl6h< zxcC()v}ckPrzMDtRF-6j9N;|@n7Ci!0;Aq%Z);mt@3*nJHlNR)+p_G{&wrkMcSfg{ zLs-c2u}Atd$%_BH2)+6uO&M?q--aHz3-V6%0iF&2n;sOvKolYO-xHqVg!lh9B!6F! zyrh&?F4sPQTw}i{Qn9!E8MJPdeoTEBTa7*(mCHF^kTi?RT~DJNeqZ>HY?ObMCZ%P3 zUbwE#%@=YeQGTHS^#sQ}obs9>&CL=%(m9Wugt@qf>LVeSb7c0ij=^kijpg=B=9c72 z)Xi?_n5eaR5^eRKZk{pm=}6{tA=f~qKan2I#Al>T^hGOYb%zG)`V(%Qk1p7=L?iig ziTo}6yo7sFZnOnbEkBx*&Lx!8Go*BZGR-U^V++$|Dm|;a_h4h+)sQMp>jGc`wq8!& zlG~kZ?m)}UHOWG9mj~dt$$iQe@mRTW+y`Hc5rmb1ms5=TKH8h#`vXcLp@eJ(;j5%P zFW-xD#IuR#QQjlhW8?LZ^CH~^1CJl`P)&RFsh--hpySuiIx~EGkfny-M9|R@s${DS z1QKoBblDfq<9E?lWo<#1MPHVZuZtDm?09X^dC%^H5AmFQ=X}|2bXd$LQ@K;xrQ9A9 zp>$V_*bv;U$H>z5G4#-$z;DC^IXsC-k(fy1%6%tx?>K(ZT3@9{pB6XC1v08a)gsONf?f4rojH90OVXyiS*eptn?RXd~2mPj(1=4)niy~^dQ{d+zM+a=94ziwC z*Wh$!1<%pp1VFU13r^AlOP`wTsC0%u>Wjr}T4zgwJ(YXotHYXFe}(j&H9>Ea*Tr3Q z*IZx4q_3_G+U&tK#`yeMozb@LXwJHdomiVLGX}z;+#f^sx-#}@DQM*ux6gcLDz|-K z(Ca1J2WW&J@lu>UbabNZ6bafB8l`=*<8oT#0O6(M5l$jyGiW_J(9|@*9>0AuXm85B za$6f5bd4L=fk4JI<#u>-2`aCtUfs8L$@=-7!?`yiI3`>)%!1+e3hxcOgZ47LQD4s3 z35CK>5nXitorAM~8~0C>PxaWBk>wYZ;79~7PnpUv*@A6 z?QYszJ^)c-+=lZxzVG8E1#5}MhvIhQs^RxO#JDY{RaCO~TVUr(VuyjYqaXz<+A=>^ zehk(T#Csg7fJ4?jvABu|#%y^B9<}96;74-G=*2Z1oeMfUlU}>sYnNUr0j{2&<+e68 zEvWWbSXGVNnme}OdpF(0zLl=2Oal)u-ET7(ZTP3sKo{fX0&!MRCQ~SXa zZ=VSh37tq2>z8D;0E;$t?DRWBRJKKz2yOZ!(L*8<{2F?-M$P%iX^W3(3HG^bo&z+7`oO!@f= z{`@V12MEVZx|N>SA>pU$F=7GKBXp+_&Z5WJA9>^sPP<%=(^>a!Dwn2Idi(;XUFCV{ z?!+!$h@Fn8U&*tS6cMU%el&_G>1CVD-wIctbo&ZL1V|fsS8u{5AOV8 znZxgLe7r`8jX zx;-(euEGx*H|Nho{-meLrVdM@TDdWpNha=J#L<=rHJ4drOm0w$yGR-0@jfPL^yQB^ zGBveBYPClpmoc{?H9EOB-f46NqY3M$%gy$n=ca)wZ~PLI&FehQDs*~%*;b>$6Y%?; zK2G+WwAvIN?`ug^k9zAOL6^H?8SV~)rsb6}zr$miT^{B0O?$%}5x*{N$E-q|6#P*v zS5x_XDo0;=3^w*!9G4ZW2cD!=1j{nzs+y}4*b$gpz&m^viCYV4T)8{xazq&z;Ndkl zQ%vXjsPH7Ec9vmprJPi_1Fs@4DU#7beZwsh^prF*Qz>nBu%9JMTvT%pB1@H=wCa}3 z=7M*s0qLsfqM9!*@VbzF(tqL%u>ON>=p!T<@4K+`ZQ|uWMLA>){u91P6mtPtQ4$X= z(k5{2q6n=(_XMDtdjcU%D?y4OpOw(E(2YOI0ntAIG8B)&cryFevbJPfav6}5pDqp1 z7CvyNfr=Hww4sO4`KuadfhNjYS3;S5EP+O>WC8`}&46(g*kVfNgRO^VBnNF88^XTG z!?L>sycmzp?$IAySAZ6CMeOBLMS~oZ&2|WkG3?2%{QHOpjY0?ZVqBX@Iw<)>bjf1) zLq|z=@@8RsFEuJW%+K4GSZX@b=~~~6wB(FIx07jn!M1o@m~F^U1S!o?Nzd zbadOcx%0NYKf{nvoZn{Yb?k+ExxMxqe16MhnjKNHkc*MiAMcKPPJ`7=G{DegrQ5#aljHpP5T5`uF(?YoqzX#jcY~YtX`~*ngHia$hMVvLG zWK*if42x4esk}I3D7qt^Dn0EYPHoqiU}sa-zIcTX^_ka)U(qfGiXa8*+}8RB~igMV={_yu&fXl zoO=<6nPN~zr-%^7aAG`5awR)T{8o#Y#N^%plHepx&a?|#Llr&C_TFHwp0%-m*Og(X z(dV0+{_3)kp*pkC6-ctwcqSY^x--(#+Z60?034yy{)xebK7C`D+7t5Y72GWv$O==;5>z|=Og zDjv%a3p!1Q(}&}^vu@h6>-eYlRc_hGjvE%Av&cB?3dN>swjI4{^VY-qy4P!yZFQWd zPq+6LeUhQoRUw#K0U!scfY@G1N#Pq8?A?Ojdn9i36|CQhuO*A@i5&4II)d5B_6I1LO1hhi_KODwXVD62d3j9B6NSS+KbyFtFpE!lUl9&-=i3d*u@ zM}gm-z+6|5lq}jS{-chEc

y!<`i z{cj;xM|KiEA%ykTk)?LzI7sk1#{W!lki__>#X)iu#}5i}>uc4hI|{?TbZ#j_?i130m!>g0{B{pXOg&~Epciy2iA){tLY!VuU&v^x{Uoi;fAh$BP0Lr%t-@_yp52tj zrVBBmdp>S#$R&evhL;F^#E4SX@S=>DJkaysq1Ze2F!+6uw1)5P6psg#NsQN-XM_|14@AN6r+LcoX@~5UJ!RNyaE!UX#4+YRIL5Gt$qD8G zroEG#VBXxx@(Lxq(ys-QY3 zTZOWriN3&zeOAfdC6dI0;Cl<2+TA3mXVeE&ML<+gm9!ldW`ctuus4AHGdz54L)crR zcLoQ$Mz_w2#*yy!?s%&?;toZ(kKGII;Pw=5-$;<2PthloCQK}EuHz`|hayU-?Mc;O zrV$K+G>VcgGvOX<@&+>tGl6IXURu{t9Gxw!HNI*atU{PwI-A`eOChKy=?rtOT+z44 zuSo@NHV4eesz!VVdk(b^zVko_p!1Gw+rgM&T?m6q5noUC#>I`*jO7RiIr8)4q@9MV z=WrWjT)kM;!Hwe`C9{~SHZ?41opW$IAob>T83d%B6aJ89#H=~(y@|d>Zd+kycMmt# z_-!?&BA8wgiy|UhJP6gZC?+s3MG?B43#XD<=3=RWP%f@6OmprcMIbR%0DQU#`UuwF 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 W|Iv><{Qkdx_Fo?U;9Gz4yZ;LlYVa2T literal 0 HcmV?d00001 diff --git a/source/colors.c b/source/colors.c new file mode 100644 index 0000000..5b7dccc --- /dev/null +++ b/source/colors.c @@ -0,0 +1,113 @@ +#include "colors.h" +u32 colors[TOTALCOLORS]; +int s=5; +void Green(){ + SetColor(RGBA(0,128,0,255),DOWNLOAD_BACKGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_TEXTBOX_BACKGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_FOREGROUND_NO_SELECTOR); +SetColor(RGBA(0,0,255,255),DOWNLOAD_FOREGROUND_SELECTOR); +SetColor(RGBA(0,0,255,255),DOWNLOAD_KEYBOARD_UNSELECT); + +SetColor(RGBA(0,0,0,255),DOWNLOAD_TEXTBOX_FOREGROUND); +SetColor(RGBA(255,12,255,255),DOWNLOAD_CURSOR); +SetColor(RGBA(127,0,127,255),DOWNLOAD_PROGRESSBAR_FOREGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_PROGRESSBAR_BACKGROUND); +SetColor(RGBA(0,0,255,255),DOWNLOAD_PROGRESSVAL); +SetColor(RGBA(255,0,0,255),DOWNLOAD_SELECTOR); +SetColor(RGBA(128,0,128,255),DOWNLOAD_KEYBOARD_OUTLINE); +} +void DefaultColors(){ + SetColor(RGBA(255,0,0,255),DOWNLOAD_BACKGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_TEXTBOX_BACKGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_FOREGROUND_NO_SELECTOR); +SetColor(RGBA(0,0,255,255),DOWNLOAD_FOREGROUND_SELECTOR); +SetColor(RGBA(0,0,255,255),DOWNLOAD_KEYBOARD_UNSELECT); + +SetColor(RGBA(0,0,0,255),DOWNLOAD_TEXTBOX_FOREGROUND); +SetColor(RGBA(255,12,255,255),DOWNLOAD_CURSOR); +SetColor(RGBA(127,0,127,255),DOWNLOAD_PROGRESSBAR_FOREGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_PROGRESSBAR_BACKGROUND); +SetColor(RGBA(0,0,255,255),DOWNLOAD_PROGRESSVAL); +SetColor(RGBA(0,255,0,255),DOWNLOAD_SELECTOR); +SetColor(RGBA(128,0,128,255),DOWNLOAD_KEYBOARD_OUTLINE); +} +void Yellow(){ + SetColor(RGBA(128,128,0,255),DOWNLOAD_BACKGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_TEXTBOX_BACKGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_FOREGROUND_NO_SELECTOR); +SetColor(RGBA(0,0,255,255),DOWNLOAD_FOREGROUND_SELECTOR); +SetColor(RGBA(0,0,255,255),DOWNLOAD_KEYBOARD_UNSELECT); + +SetColor(RGBA(0,0,0,255),DOWNLOAD_TEXTBOX_FOREGROUND); +SetColor(RGBA(255,12,255,255),DOWNLOAD_CURSOR); +SetColor(RGBA(127,0,127,255),DOWNLOAD_PROGRESSBAR_FOREGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_PROGRESSBAR_BACKGROUND); +SetColor(RGBA(0,0,255,255),DOWNLOAD_PROGRESSVAL); +SetColor(RGBA(255,0,0,255),DOWNLOAD_SELECTOR); +SetColor(RGBA(128,0,128,255),DOWNLOAD_KEYBOARD_OUTLINE); +} + +void ShiftL1(){ + SetColor(RGBA(0,0,255,255),DOWNLOAD_BACKGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_TEXTBOX_BACKGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_FOREGROUND_NO_SELECTOR); +SetColor(RGBA(0,255,0,255),DOWNLOAD_FOREGROUND_SELECTOR); +SetColor(RGBA(0,255,0,255),DOWNLOAD_KEYBOARD_UNSELECT); + +SetColor(RGBA(0,0,0,255),DOWNLOAD_TEXTBOX_FOREGROUND); +SetColor(RGBA(12,255,255,255),DOWNLOAD_CURSOR); +SetColor(RGBA(0,127,127,255),DOWNLOAD_PROGRESSBAR_FOREGROUND); + SetColor(RGBA(255,255,255,255),DOWNLOAD_PROGRESSBAR_BACKGROUND); +SetColor(RGBA(0,255,0,255),DOWNLOAD_PROGRESSVAL); +SetColor(RGBA(255,0,0,255),DOWNLOAD_SELECTOR); +SetColor(RGBA(0,128,128,255),DOWNLOAD_KEYBOARD_OUTLINE); +} +void InvertedColors(){ + SetColor(RGBA(0,255,255,255),DOWNLOAD_BACKGROUND); + SetColor(RGBA(0,0,0,255),DOWNLOAD_TEXTBOX_BACKGROUND); + SetColor(RGBA(0,0,0,255),DOWNLOAD_FOREGROUND_NO_SELECTOR); +SetColor(RGBA(255,255,0,255),DOWNLOAD_FOREGROUND_SELECTOR); +SetColor(RGBA(255,255,255,255),DOWNLOAD_KEYBOARD_UNSELECT); + +SetColor(RGBA(255,255,255,255),DOWNLOAD_TEXTBOX_FOREGROUND); +SetColor(RGBA(0,243,0,255),DOWNLOAD_CURSOR); +SetColor(RGBA(128,255,128,255),DOWNLOAD_PROGRESSBAR_FOREGROUND); + SetColor(RGBA(0,0,0,255),DOWNLOAD_PROGRESSBAR_BACKGROUND); +SetColor(RGBA(255,255,0,255),DOWNLOAD_PROGRESSVAL); +SetColor(RGBA(255,0,255,255),DOWNLOAD_SELECTOR); +SetColor(RGBA(127,255,127,255),DOWNLOAD_KEYBOARD_OUTLINE); +} +u32 GetColor(int component){ + return colors[component]; +} +void SetColor(u32 color,int component){ + colors[component] = color; +} + +void InitColor(int scheme){ + //Type Colors + switch(scheme){ + case 0: + DefaultColors(); + break; + + case 1: + InvertedColors(); + break; +case 2: + Green(); + break; +case 3: + Yellow(); + break; + default: + ShiftL1(); + break; + } +} +int AddScheme(int val){ + if (val<(s-1)){ + return val+1; + } + return 0; +} diff --git a/source/colors.h b/source/colors.h new file mode 100644 index 0000000..0d03cbe --- /dev/null +++ b/source/colors.h @@ -0,0 +1,22 @@ +#ifndef COLORS_H +#define COLORS_H +#include "settings.h" +u32 GetColor(int component); +static const int DOWNLOAD_BACKGROUND=0; // Originaly Red +static const int DOWNLOAD_TEXTBOX_BACKGROUND=1; //Originaly White +static const int DOWNLOAD_FOREGROUND_NO_SELECTOR=2; // Originaly White +static const int DOWNLOAD_FOREGROUND_SELECTOR=3; // Originaly Blue +static const int DOWNLOAD_KEYBOARD_UNSELECT=4; // Originaly Blue +static const int DOWNLOAD_KEYBOARD_SELECT=5; // Originaly Yellow +static const int DOWNLOAD_TEXTBOX_FOREGROUND=6; // Originaly Black +static const int DOWNLOAD_CURSOR = 7; // Originaly Violet +static const int DOWNLOAD_PROGRESSBAR_FOREGROUND=8; //Originaly Violet +static const int DOWNLOAD_PROGRESSBAR_BACKGROUND=9; //Originaly White +static const int DOWNLOAD_PROGRESSVAL=10; //Originaly Blue +static const int DOWNLOAD_SELECTOR=11; //Originaly Green +static const int DOWNLOAD_KEYBOARD_OUTLINE=12; //Originaly Violet +#define TOTALCOLORS 13 +void SetColor(u32 color,int component); +void InitColor(int scheme); +int AddScheme(int val); +#endif diff --git a/source/main.c b/source/main.c new file mode 100644 index 0000000..44cc60d --- /dev/null +++ b/source/main.c @@ -0,0 +1,1392 @@ + +#include "colors.h" +void ChannelNew(char* channel,int isuser,int download,char* date); +void Channel(char* channel,int isuser,int download); +int pos = 0; +int daycap=31; +int monthcap=12; +int channelsetting=-1;//-1 not enabled 0 for channel new 1 for user new 2 for channel 3 for user +int monthnew=11;int daynew=15;int yearnew=2019; +int downloadnotlist=1; //1 download 0 list +int coldate=0;//0 is month 1 is day 2 is year +GRRLIB_ttfFont* myFont; + +int willtry=0; +int videos=-1; +ir_t ir; +char videoitems[500][1001]; +int keyboard = 0; +int Download(char*, char*); +char history[2000][40]; +int historyobjs = 0; +int historyobj = -1; +int mustadd=0; +void AddHistory(); +void LoadHistory(); +char url[40]; +void PlaylistEx(char*,char*); +void Playlist(char* pl){ + PlaylistEx(pl,"Playlist"); +} +void Search(char*); +void PLSearch(char*); + +void LoadHistory(){ + FILE *f =HistoryRead(); + char download[40]; + if (!f)return; + while(fgets(download,40,f)!=NULL && historyobjs<2000){ + for(int i = 0;i<41;i++){ + if(download[i]=='\n'){ + download[i]='\0'; + break; + } + } + sprintf(history[historyobjs],"%s",download); + historyobjs++; + + + + } + fclose(f); +} +void AddHistory(){ + +if(historyobjs<2000){ +sprintf( history[historyobjs],"%s",url); +char urls[42]; +sprintf(urls,"%s\n",url); +FILE *f =HistoryAppend(); +fputs(urls,f); +fclose(f); +historyobjs++; +} +} +#define KEYBOARD_MOVELEFT 180 +#define KEYBOARD_MOVERIGHT 0 +#define KEYBOARD_MOVEUP 90 +#define KEYBOARD_MOVEDOWN 270 +char keys[4][11] = { {'0','1','2','3','4','5','6','7','8','9','<'},{'q','w','e','r','t','y','u','i','o','p','+'},{'a','s','d','f','g','h','j','k','l','(',')'},{'z','x','c','v','b','n','m','_','-',':',' '} }; +char capkey[4][11] = { {'0','1','2','3','4','5','6','7','8','9','<'},{'Q','W','E','R','T','Y','U','I','O','P',','},{'A','S','D','F','G','H','J','K','L','[',']'},{'Z','X','C','V','B','N','M','_','-',';',' '} }; +int charx; +int chary; +int caps; + +//draw function + +char* ConvertString(char*src) +{ + char* code=malloc((strlen(src)*3)+1); + code[0]='\0'; + for(int i = 0;i<(int)strlen(src);i++){ + if(src[i]=='+'){ + sprintf(code,"%s%%2B",code); + }else if(src[i]==','){ + sprintf(code,"%s%%2C",code); + }else if(src[i]=='('){ + sprintf(code,"%s%%28",code); + }else if(src[i]==')'){ + sprintf(code,"%s%%29",code); + }else if(src[i]=='['){ + sprintf(code,"%s%%5B",code); + }else if(src[i]==']'){ + sprintf(code,"%s%%5D",code); + }else if(src[i]==';'){ + sprintf(code,"%s%%3B",code); + }else if(src[i]==' '){ + sprintf(code,"%s%%20",code); + }else{ + sprintf(code,"%s%c",code,src[i]); + + } + } +return code; +} +void PatchString(char*src) +{ + for(int i = 0;i<(int)strlen(src);i++){ + if(src[i]=='\n')src[i]=' '; + if(src[i]=='\r')src[i]=' '; + + if(src[i]=='*')src[i]=' '; + if(src[i]>=128)src[i]='_'; + } +} +static int older_progress(void* p, + double dltotal, double dlnow, + double ultotal, double ulnow) +{ + char what2[256]; + double percent = (dlnow / dltotal) * 100; + int realp = (int)percent; + if(realp>100||realp <0){ + realp=0; + } + + + sprintf(what2,"%i%%",realp); + GRRLIB_FillScreen(GetColor(DOWNLOAD_BACKGROUND)); + int x = 320-(((int)GRRLIB_WidthTTF (myFont, what2,72)) / 2); + GRRLIB_PrintfTTF(x, 192, myFont, what2, 72, GetColor(DOWNLOAD_PROGRESSVAL)); + + GRRLIB_Rectangle(268,192+120,104,32, GetColor(DOWNLOAD_PROGRESSBAR_BACKGROUND),1); + GRRLIB_Rectangle(270,192+125,realp,22, GetColor(DOWNLOAD_PROGRESSBAR_FOREGROUND),1); + + GRRLIB_Render(); + return 0; +} +void DrawKeyBoard(int posx, int posy) { + + for (int y = 0; y < 4; y++) { + + for (int x = 0; x < 11; x++) { + + if (chary == y && charx == x) { + char sw[3]; + if (caps == 1) { sprintf(sw, "%c", capkey[y][x]); } + else { sprintf(sw, "%c", keys[y][x]); } + + //normal highlight + GRRLIB_PrintfTTF(posx + (x * 20), posy + (y * 20), myFont, sw, 16, GetColor(DOWNLOAD_KEYBOARD_SELECT)); + + + }else { + char sw[3]; + if (caps == 1) { sprintf(sw, "%c", capkey[y][x]); } + else { sprintf(sw, "%c", keys[y][x]); } + + //normal highlight + GRRLIB_PrintfTTF(posx + (x * 20), posy + (y * 20), myFont, sw, 16, GetColor(DOWNLOAD_KEYBOARD_UNSELECT)); + + + } + if(UsingIRFeatures()){ + GRRLIB_Rectangle(posx + (x*20),posy + (y * 20),20,20,GetColor(DOWNLOAD_KEYBOARD_OUTLINE),0); + } + } + } +} +void SetKeyFromCord(ir_t irs,int posx,int posy){ + for (int y = 0; y < 4; y++) { + + for (int x = 0; x < 11; x++) { + if(GRRLIB_PtInRect(posx + (x*20),posy + (y * 20),20,20,irs.x,irs.y)){ + charx=x; + chary=y; + } + +} + +} +} + + +//control +char Place() { + + if (caps == 1) { + //capital + char ks = capkey[chary][charx]; + return ks; + } + char ks = keys[chary][charx]; + return ks; + + + } + int GoingBack() { + if (charx == 10 && chary == 0) { + return 1; + } + return 0; + } + + void Caps() { + //caps Lock + caps = !caps; + } + + void KeyMove(int Direction) + { + + switch (Direction) { + case KEYBOARD_MOVELEFT: + if (charx > 0)charx--; + break; + case KEYBOARD_MOVERIGHT: + if (charx < 10)charx++; + break; + case KEYBOARD_MOVEUP: + if (chary > 0)chary--; + break; + case KEYBOARD_MOVEDOWN: + if (chary < 3)chary++; + break; + } + } + +void DrawList() { + int movover=0; + if(willtry) movover=98; + for (int i = 0; i < 5; i++) { + if (((pos + i)-2) >= 0 && ((pos + i)-2) < videos) { + char id[13]; + char title[500]; + char author[500]; + char author2[46]; + char title2[46]; + char thumbsUP[20]; + char thumbsDown[20]; + char views[20]; + char uploadDate[20]; + char length[20]; + + sscanf(videoitems[(pos + i)-2], "%13s %500s %500s %20s %20s %20s %20s %20s", id, title, author, thumbsUP, thumbsDown, views, uploadDate, length); + snprintf(title2,sizeof(title2),"%s",title); + snprintf(author2,sizeof(author2),"%s",author); + PatchString(title2); + PatchString(author2); + int o=(i == 2); + if(UsingIRFeatures()){ + o=GRRLIB_PtInRect(32+movover,32+(90*i) , 576, 90,ir.x,ir.y); + } + GRRLIB_Rectangle(32,32+(90*i) , 576, 90, GetColor(DOWNLOAD_SELECTOR), o); + GRRLIB_PrintfTTF(32+movover,32+(90*i), myFont, title2, 16, GetColor(DOWNLOAD_FOREGROUND_SELECTOR)); + GRRLIB_PrintfTTF(32+movover, 32 + (90 * i)+18, myFont, author2, 16 ,GetColor(DOWNLOAD_FOREGROUND_SELECTOR)); + GRRLIB_PrintfTTF(32+movover, 32 + (90 * i)+36, myFont, uploadDate, 16, GetColor(DOWNLOAD_FOREGROUND_SELECTOR)); + GRRLIB_PrintfTTF(32+movover, 32 + (90 * i)+54, myFont, length, 16, GetColor(DOWNLOAD_FOREGROUND_SELECTOR)); + char VLD[30]; + snprintf(VLD,30,"V: %s L: %s D: %s",views,thumbsUP,thumbsDown); + GRRLIB_PrintfTTF(32+movover, 32 + (90 * i) + 72, myFont, VLD, 16, GetColor(DOWNLOAD_FOREGROUND_SELECTOR)); + if(willtry){ + if(!ThumbnailExists(id)){ + if(!Download(ThumbnailURL(id),ThumbnailFileName(id))){ + unlink(ThumbnailFileName(id)); + } + } + if(ThumbnailExists(id)){ + GRRLIB_texImg *tex = GRRLIB_LoadTextureFromFile (ThumbnailFileName(id)); + + GRRLIB_DrawImg (32, 32 + (90 * i) + 9, tex, 0, 0.2, 0.2, RGBA(255,255,255,255)); + GRRLIB_FreeTexture(tex); +}} + } + } + + /* + ------------------------------------------------------------------------ + TITLE UPLOAD DATE + UPLOADER LENGTH + VIEWS L D + ------------------------------------------------------------------------- + */ + + } + + + + +int files=0; +int iswad=0; + +void WPAD_ONMENU(u32 key){ + + if (key & WPAD_BUTTON_2) { + SwitchIR(); + } + if (key & WPAD_BUTTON_UP) { + if(pos>-2)pos--; + } + if (key & WPAD_BUTTON_LEFT) { + if(pos==-1){ + if(historyobj>0){ + historyobj--; + sprintf(url,"%s",history[historyobj]); + }else{ + if(historyobjs>0){ + historyobj=0; + sprintf(url,"%s",history[historyobj]); + } + } + + + } + + } + if (key & WPAD_BUTTON_RIGHT) { + if(pos==-1){ + if(historyobj0){ + pos=0; + }else{ + pos=-1; + } + + } + if (key & WPAD_BUTTON_DOWN) { + if(pos-1){ + if(GRRLIB_PtInRect(0,0,31,480,ir.x,ir.y)){ + GRRLIB_Rectangle(0,0,31,480,GetColor(DOWNLOAD_SELECTOR),1); + + + } + if(GRRLIB_PtInRect(609,0,31,480,ir.x,ir.y)){ + GRRLIB_Rectangle(609,0,31,480,GetColor(DOWNLOAD_SELECTOR),1); + + } + }else if(GRRLIB_PtInRect(0,416,640,64,ir.x,ir.y)){ + GRRLIB_Rectangle(0,416,640,64,GetColor(DOWNLOAD_SELECTOR),1); + + + + } + } + if (UsingIRFeatures() && (key & WPAD_BUTTON_A)){ + if(pos>-1){ + + int clickid=0; + int clickedtype=-1;//-1 no click 0 item 1 page up 2 page down + //check if selected is -2 + //x is always at least 32 and no more then 576+32 + //y is always at least 32 and no more than 32+90 + if(GRRLIB_PtInRect(0,0,31,480,ir.x,ir.y)){ + + clickedtype=1; + + } + if(GRRLIB_PtInRect(609,0,31,480,ir.x,ir.y)){ + + clickedtype=2; + + } + if(GRRLIB_PtInRect(32,32,576,90,ir.x,ir.y)){ + clickid=-2; + clickedtype=0; + + } + if(GRRLIB_PtInRect(32,32+90,576,90,ir.x,ir.y)){ + clickid=-1; + clickedtype=0; + + } + if(GRRLIB_PtInRect(32,32+(90*2),576,90,ir.x,ir.y)){ + clickid=0; + clickedtype=0; + + } + if(GRRLIB_PtInRect(32,32+(90*3),576,90,ir.x,ir.y)){ + clickid=1; + clickedtype=0; + + } + if(GRRLIB_PtInRect(32,32+(90*4),576,90,ir.x,ir.y)){ + clickid=2; + clickedtype=0; + + } + if(clickedtype==0){ + + if ((pos + clickid) >= 0 && (pos + clickid) < videos) { + char id[13]; + char title[500]; + sscanf(videoitems[pos + clickid], "%13s %500s", id, title); + PatchString(title); + char filename[530]; + char timein[20]; + time_t now = time(0); + strftime(timein, sizeof(timein), "%Y%m%d_%H%M%S", localtime(&now)); + + sprintf(filename,"%s(%s)",title,timein); + char idTool[500]; + sprintf(idTool,"https://stark-shelf-08981.herokuapp.com/Grabber/Video/%s",id); + Download(idTool,OpenVideoFile(filename)); +} + + }else if(clickedtype==1){ + if(pos-5>=0){ + pos-=5; + + }else{ + pos=0; + } + }else if(clickedtype==2){ + if(pos+5-1){ + //download + char id[13]; + char title[500]; + sscanf(videoitems[pos], "%13s %500s", id, title); + PatchString(title); + char filename[530]; + char timein[20]; + time_t now = time(0); + strftime(timein, sizeof(timein), "%Y%m%d_%H%M%S", localtime(&now)); + + sprintf(filename,"%s(%s)",title,timein); + char idTool[500]; + sprintf(idTool,"https://stark-shelf-08981.herokuapp.com/Grabber/Video/%s",id); + Download(idTool,OpenVideoFile(filename)); + + }else if(pos==-1){ + keyboard=1; + } +} +} +if(UsingIRFeatures() && (key & WPAD_BUTTON_1)){ + int clickid=0; + int clickedtype=0; + if(pos>-1){ + + //-1 no click 0 item 1 page up 2 page down + //check if selected is -2 + //x is always at least 32 and no more then 576+32 + //y is always at least 32 and no more than 32+90 + + if(GRRLIB_PtInRect(32,32,576,90,ir.x,ir.y)){ + clickid=-2; + clickedtype=1; + + } + if(GRRLIB_PtInRect(32,32+90,576,90,ir.x,ir.y)){ + clickid=-1; + clickedtype=1; + + } + if(GRRLIB_PtInRect(32,32+(90*2),576,90,ir.x,ir.y)){ + clickid=0; + clickedtype=1; + + } + if(GRRLIB_PtInRect(32,32+(90*3),576,90,ir.x,ir.y)){ + clickid=1; + clickedtype=1; + + } + if(GRRLIB_PtInRect(32,32+(90*4),576,90,ir.x,ir.y)){ + clickid=2; + clickedtype=1; + + } + }else{ + if(GRRLIB_PtInRect(150,224,340,32,ir.x,ir.y)&&pos==-1){ + clickedtype=2; //not 1 + } + } + if(clickedtype!=0){ + char id[13]; + + if (((pos + clickid) >= 0 && (pos + clickid) < videos) && clickedtype==1) { + + sscanf(videoitems[pos + clickid], "%13s", id); + }else{ + sprintf(id,"%s",url); + } + + char* idTool = ThumbnailURL(id); + char* filename1= ThumbnailFileName(id); + if(!ThumbnailExists(id)){ + if(!Download(idTool,filename1)){ + unlink(filename1); + } + } + if(ThumbnailExists(id)){ + GRRLIB_texImg *tex = GRRLIB_LoadTextureFromFile (filename1); + while(1){ + WPAD_ScanPads(); // Scan the Wii Remotes + u32 ke=WPAD_ButtonsDown(0); + if(ke & WPAD_BUTTON_B) break; + GRRLIB_FillScreen(GetColor(DOWNLOAD_BACKGROUND)); + GRRLIB_DrawImg (32, 24, tex, 0, 1.2, 1.2, RGBA(255,255,255,255)); + GRRLIB_Render(); + } + GRRLIB_FreeTexture (tex); +} + } + + +}else{ + if(key & WPAD_BUTTON_1){ + char id[13]; + + if (pos >= 0 && pos < videos) { + + sscanf(videoitems[pos], "%13s", id); + }else{ + sprintf(id,"%s",url); + } + char* idTool = ThumbnailURL(id); + char* filename1= ThumbnailFileName(id); + if(!ThumbnailExists(id)){ + if(!Download(idTool,filename1)){ + unlink(filename1); + } + } + if(ThumbnailExists(id)){ + GRRLIB_texImg *tex = GRRLIB_LoadTextureFromFile (filename1); + while(1){ + WPAD_ScanPads(); // Scan the Wii Remotes + u32 ke=WPAD_ButtonsDown(0); + if(ke & WPAD_BUTTON_B) break; + GRRLIB_FillScreen(GetColor(DOWNLOAD_BACKGROUND)); + GRRLIB_DrawImg (32, 24, tex, 0, 1.2, 1.2, RGBA(255,255,255,255)); + GRRLIB_Render(); + } + GRRLIB_FreeTexture (tex); +}} + } +} + + +//BROKEN BUT MAY GET FIXED use +//fixed +void LoadQuery(char *file){ + + FILE *f = PlaylistTXT(file); + if(f){ + while(1){ + char type[3]; + char url2[500]; + char data[256]; + + if(fscanf(f," %3s %500s %256s",type,url2,data)==EOF)break; + PatchString(data); + if (strcmp("tn",type)==0){ + //video on url2 + + char* idTool = ThumbnailURL(url2); + char* filename1= ThumbnailFileName(url2); + if(!ThumbnailExists(url2)){ + if(!Download(idTool,filename1)){ + unlink(filename1); + } + } + }else if (strcmp("vi",type)==0){ + //video on url2 + + + char filenamez[530]; + char timein[20]; + time_t now = time(0); + strftime(timein, sizeof(timein), "%Y%m%d_%H%M%S", localtime(&now)); + + + + + sprintf(filenamez,"%s(%s)",data,timein); + + char idTool[500]; + sprintf(idTool,"https://stark-shelf-08981.herokuapp.com/Grabber/Video/%s",url2); + + Download(idTool,OpenVideoFile(filenamez)); + }else if(strcmp("pl",type)==0){ + //playlist on url2 + PlaylistEx(url2,data); + }else if(strcmp("dl",type)==0){ + //playlist on url2 + + Download(url2,OpenFile(data)); + } + } + + } + fclose(f); +} +void WPAD_KEYBOARD(u32 key) { + +if (key & WPAD_BUTTON_2) { + SwitchIR(); + } + + if ((key & WPAD_BUTTON_B )&& channelsetting==-1) { + Caps(); + } + if(channelsetting==-1){ + + + if (key & WPAD_BUTTON_1) { + //change keyboard if keyboard<4 instead of 3 LoadQuery Enabled + if(keyboard<6){ + keyboard++; + }else{ + keyboard=1; + } + } +}else{ + if (key & WPAD_BUTTON_1) { + + if(channelsetting<3){ + channelsetting++; + }else{ + channelsetting=0; + } + } +} +if(channelsetting==-1){ + if (key & WPAD_BUTTON_PLUS) { + //apply + if(mustadd==1){ + AddHistory(); + mustadd=0; + keyboard=0; + } + if(keyboard==1){ + Search(url); + keyboard=0; + } + if(keyboard==3){ + Playlist(url); + keyboard=0; + } + if(keyboard==2){ + + char filenamez[530]; + char timein[20]; + time_t now = time(0); + strftime(timein, sizeof(timein), "%Y%m%d_%H%M%S", localtime(&now)); + char title[300]; + + char idTool2[500]; + sprintf(idTool2,"https://stark-shelf-08981.herokuapp.com/Grabber/info/%s",url); + if(Download(idTool2,Temp())){ + FILE *f = fopen(Temp(),"r"); + fgets(title,300,f); + fclose(f); + DeleteTemp(); + PatchString(title); + }else{ + sprintf(title,"NOTITLE"); + } + + sprintf(filenamez,"%s(%s)",title,timein); + + char idTool[500]; + sprintf(idTool,"https://stark-shelf-08981.herokuapp.com/Grabber/Video/%s",url); + + Download(idTool,OpenVideoFile(filenamez)); +keyboard=0; + } + if(keyboard==4){ + LoadQuery(url); + keyboard=0; + } + if(keyboard==6){ + channelsetting=0; + + return; + } + if(keyboard==5){ + PLSearch(url); + keyboard=0; + } + } +}else{ + if (key & WPAD_BUTTON_PLUS) { + if(channelsetting==0){ + //-1 not enabled 0 for channel new 1 for user new 2 for channel 3 for user + char dates[12]; + sprintf(dates,"%i-%i-%i",yearnew,monthnew,daynew); + ChannelNew(url,0,downloadnotlist,dates); + }else if(channelsetting==1){ + char dates[12]; + sprintf(dates,"%i-%i-%i",yearnew,monthnew,daynew); + ChannelNew(url,1,downloadnotlist,dates); + }else if(channelsetting==2){ + //-1 not enabled 0 for channel new 1 for user new 2 for channel 3 for user + + Channel(url,0,downloadnotlist); + }else if(channelsetting==3){ + Channel(url,1,downloadnotlist); + } + keyboard =0; + channelsetting=-1; + } + +} + if (key & WPAD_BUTTON_MINUS) { + //cancel + keyboard=0; + channelsetting=-1; + } + if(channelsetting==-1){ + if (key & WPAD_BUTTON_LEFT) { + KeyMove(KEYBOARD_MOVELEFT); + } + if (key & WPAD_BUTTON_RIGHT) { + KeyMove(KEYBOARD_MOVERIGHT); + } + + if (key & WPAD_BUTTON_UP) { + KeyMove(KEYBOARD_MOVEUP); + } + if (key & WPAD_BUTTON_DOWN) { + KeyMove(KEYBOARD_MOVEDOWN); + }}else if(channelsetting==0 || channelsetting==1){ + if (key & WPAD_BUTTON_LEFT) { + if(coldate>0){ + coldate--; + + }else{ + coldate=2; + } + } + if (key & WPAD_BUTTON_RIGHT) { + if(coldate<2){ + coldate++; + + }else{ + coldate=0; + } + } + if (key & WPAD_BUTTON_UP) { + + if(coldate==0){ + //month + if(monthnew < monthcap){ + monthnew++; + }else{ + monthnew=1; + } + } + if(coldate==1){ + //day + if(daynew < daycap){ + daynew++; + }else{ + daynew=1; + } + } + if(coldate==2){ + yearnew++; + } + } + if (key & WPAD_BUTTON_DOWN) { + + if(coldate==0){ + //month + if(monthnew > 1){ + monthnew--; + }else{ + monthnew=monthcap; + } + } + if(coldate==1){ + //day + if(daynew > 1){ + daynew--; + }else{ + daynew=daycap; + } + } + if(coldate==2){ + yearnew--; + } + } + } + if(channelsetting==-1){ + + + if(UsingIRFeatures()){ + SetKeyFromCord(ir,230,224+126); + if(key & WPAD_BUTTON_A){ + if(GRRLIB_PtInRect(150+50,224+35,340-100,32,ir.x,ir.y)){ + if(mustadd==1){ + AddHistory(); + mustadd=0; + } + if(keyboard==1){ + Search(url); + } + if(keyboard==3){ + Playlist(url); + } + if(keyboard==2){ + + + + char filenamez[530]; + char timein[20]; + time_t now = time(0); + strftime(timein, sizeof(timein), "%Y%m%d_%H%M%S", localtime(&now)); + char title[300]; + + char idTool2[500]; + sprintf(idTool2,"https://stark-shelf-08981.herokuapp.com/Grabber/info/%s",url); + if(Download(idTool2,Temp())){ + FILE *f = fopen(Temp(),"r"); + fgets(title,300,f); + fclose(f); + DeleteTemp(); + PatchString(title); + }else{ + sprintf(title,"NOTITLE"); + } + + sprintf(filenamez,"%s(%s)",title,timein); + + char idTool[500]; + sprintf(idTool,"https://stark-shelf-08981.herokuapp.com/Grabber/Video/%s",url); + + Download(idTool,OpenVideoFile(filenamez)); + } + if(keyboard==4){ + LoadQuery(url); + } + keyboard=0; + }else{ + + if (GoingBack() == 0) { + snprintf(url, 40, "%s%c", url, Place()); + + } + else { + if (strlen(url) > 0) { + url[strlen(url) - 1] = '\0'; + } + } + mustadd=1; + }} + }else{ + if (key & WPAD_BUTTON_A) { + + if (GoingBack() == 0) { + snprintf(url, 40, "%s%c", url, Place()); + + } + else { + if (strlen(url) > 0) { + url[strlen(url) - 1] = '\0'; + } + } + mustadd=1; + + } +} +}else{ + if(key & WPAD_BUTTON_A){ + if(downloadnotlist==0){ + downloadnotlist=1; + }else{ + downloadnotlist=0; + } +} +} + +} +int netclose_callback (void *clientp, curl_socket_t item) { + return net_close(item); +} +int Download(char* url, char* file) { + CURL* curl; + curl = curl_easy_init(); +int ret=1; + FILE *f = fopen(file,"wb"); + + +curl_easy_setopt(curl,CURLOPT_URL,url); + curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, netclose_callback); + /* disable progress meter, set to 0L to enable and disable debug output */ + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L); + curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, older_progress); +curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); +curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); +curl_easy_setopt(curl, CURLOPT_WRITEDATA,f); +curl_easy_setopt(curl,CURLOPT_FAILONERROR,1L); +curl_easy_perform(curl); +long int bytes =ftell(f); +fclose(f); +if(bytes==0){ + unlink(file); + ret=0; +} + + +curl_easy_cleanup(curl); +return ret; +} +void Search(char* search) { + char output2[600]; + + char* output = ConvertString(search); + if (output) { + sprintf(output2,"https://stark-shelf-08981.herokuapp.com/Grabber/searchinfo/%s",output); + + if(Download(output2,Temp())){ + FILE *f = fopen(Temp(),"r"); + char download[1001]; + videos=-1; + while(fgets(download,1001,f)!=NULL && videos<499){ + + videos++; + sprintf(videoitems[videos],"%s",download); + + + } + fclose(f); + DeleteTemp(); + + + } + +} +} +void PLSearch(char* search) { + char output2[600]; + + char* output = ConvertString(search); + if (output) { + sprintf(output2,"https://stark-shelf-08981.herokuapp.com/Grabber/playlistinfo/%s",output); + + if(Download(output2,Temp())){ + FILE *f = fopen(Temp(),"r"); + char download[1001]; + videos=-1; + while(fgets(download,1001,f)!=NULL && videos<499){ + + videos++; + sprintf(videoitems[videos],"%s",download); + + + } + fclose(f); + DeleteTemp(); + + + } + } + + +} +void PlaylistEx(char* search,char* nm) { +char output2[600]; +char timeins[20]; + time_t nows = time(0); + strftime(timeins, sizeof(timeins), "%Y%m%d_%H%M%S", localtime(&nows)); + char* ssname[300]; + sprintf(ssname,"%s(%s)",nm,timeins); + OpenPlaylistFile(ssname); + char* output = ConvertString(search); + if (output) { + sprintf(output2,"https://stark-shelf-08981.herokuapp.com/Grabber/playlistinfo/%s",output); + free(output); + if(Download(output2,Temp())){ + FILE *f = fopen(Temp(),"r"); + char download[1001]; + + while(fgets(download,1001,f)!=NULL ){ + + char id[13]; + char title[500]; + sscanf(download, " %13s %500s", id, title); + char filename[530]; + char timein[20]; + time_t now = time(0); + strftime(timein, sizeof(timein), "%Y%m%d_%H%M%S", localtime(&now)); + PatchString(title); + sprintf(filename,"%s(%s)",title,timein); + + char idTool[500]; + sprintf(idTool,"https://stark-shelf-08981.herokuapp.com/Grabber/Video/%s",id); + Download(idTool,OpenPlaylistVideoFile(ssname,filename)); + + + } + DeleteTemp(); + } + } + + +} +int running = 1; +void PressKey(u32 key){ + + if (keyboard>0) + { + WPAD_KEYBOARD(key); + }else{ + WPAD_ONMENU(key); + } +}/* +void keyPress_cb( char sym) { + + if (keyboard>0 && ((sym >= 'a' && sym <= 'z') || (sym>='A' && sym <='Z' ) || (sym>='0' && sym<='9') || sym=='_' || sym==' ' || sym=='+' || sym=='(' || sym==')' || sym=='[' || sym==']'||sym==','||sym=='-'||sym==':'||sym==';')) snprintf(url, 40, "%s%c", url, sym); + + if (sym == 13) {if(keyboard==0){PressKey(WPAD_BUTTON_A);}else{PressKey(WPAD_BUTTON_PLUS);}} + if (sym & KS_Up){ + if(keyboard==0){ + PressKey(WPAD_BUTTON_UP); + } + } + if (sym & KS_Down){ + if(keyboard==0){ + PressKey(WPAD_BUTTON_DOWN); + } + + } + if (sym & KS_F1 || sym & KS_f1){ + if(keyboard==0){ + if(pos>-2){ + pos=-2; + }else{ + pos=-3; + } + + } + + } + if (sym & KS_F2 || sym & KS_f2){ + if(keyboard>0){ + PressKey(WPAD_BUTTON_1); + } + + } + if (sym & KS_F3 || sym & KS_f3){ + if(keyboard==0){ + PressKey(WPAD_BUTTON_B); + }else{ + PressKey(WPAD_BUTTON_MINUS); + } + + } + if ( sym & 0x1b) running=0; +}*/ +int main() { + + char options[6][50]={"Input Search Term","Input Youtube URL","Input Playlist URL","Input Playlist Text File","Playlist As Search","Channel"}; + char optionsforChannel[4][50]={"Channel New Videos","ChannelUser New Videos","Channel Videos","ChannelUser Videos"}; + char listingmode[2][9]={"List","Download"}; + WPAD_Init(); + GRRLIB_Init(); + myFont = GRRLIB_LoadTTF(FreeMonoBold_ttf, FreeMonoBold_ttf_size); +WPAD_SetVRes(0,640,480); +WPAD_SetDataFormat(WPAD_CHAN_0,WPAD_FMT_BTNS_ACC_IR); + InitColor(0); + int csch=0; + while(1){ + WPAD_ScanPads(); // Scan the Wii Remotes + + GRRLIB_FillScreen(GetColor(DOWNLOAD_BACKGROUND)); + + if(UsingIRFeatures()){ + WPAD_IR(0,&ir); + + + GRRLIB_Rectangle(ir.x,ir.y,4,4,GetColor(DOWNLOAD_CURSOR),1); +} + u32 ke=WPAD_ButtonsDown(0); + if (ke & WPAD_BUTTON_A) { + break; + } + if (ke & WPAD_BUTTON_1) { + csch = AddScheme(csch); + InitColor(csch); + } + if (ke & WPAD_BUTTON_2) { + SwitchIR(); + } + if(ke & WPAD_BUTTON_B){ + if(willtry){ + willtry=0; + }else{ + willtry=1; + } + } + GRRLIB_PrintfTTF(50, 50, myFont,"Press (A) To Enter TYTD", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); + char listimages[40]; + if(willtry){ + sprintf(listimages,"Download thumbnails is on Press (B) to change"); + }else{ + sprintf(listimages,"Download thumbnails is off press (B) to change"); + } + GRRLIB_PrintfTTF(50, 50+30, myFont,listimages , 18, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); + char sensor[40]; + if(UsingIRFeatures()){ + sprintf(sensor,"IR is on press (2) to change anytime"); + + }else{ + sprintf(sensor,"IR is off press (2) to change anytime"); + + } + GRRLIB_PrintfTTF(50, 50+60, myFont,sensor, 18, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); + char scl[40]; + sprintf(scl,"press (1) for colorscheme, colorscheme=%i",csch); + + + GRRLIB_PrintfTTF(50, 50+90, myFont,scl, 18, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); + + + GRRLIB_Render(); + } +FileSystemDrivers(); +CreateFolders(); + net_init(); + + + + // Initialise the video system + +// This function initialises the attached controllers + + +LoadHistory(); + //printf("\n\n\n\nwhats on your mind\n\n(-) Playlist URL (+) URL (2) Search"); +//url[0]='\0'; + +//early testing +//sprintf(url,"Demi Lovato"); +pos=-1; +//keyboard=1; + while (running) { + + WPAD_ScanPads(); // Scan the Wii Remotes + GRRLIB_FillScreen(GetColor(DOWNLOAD_BACKGROUND)); + u32 ke=WPAD_ButtonsDown(0); + + if (ke & WPAD_BUTTON_HOME) { + break; + } + + if(pos>-1){ + WPAD_ONMENU(ke); + DrawList(); + + }else if(pos==-2){ + WPAD_ONMENU(ke); + GRRLIB_PrintfTTF(32, 32, myFont,"Controls", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 64, myFont," (DPAD) MOVE (A) Place Letter", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 64+32, myFont,"if Letter is '<' then backspace", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 128, myFont,"(-) Cancel (+) Accept", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 128+32, myFont,"(B) Caps (1) Change Method", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + + GRRLIB_PrintfTTF(32, 256, myFont,"

(DPAD UP/DOWN) MOVE", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 256+32, myFont,"(A) Enable KB/Download", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 256+64, myFont,"UP ON LIST BRINGS YOU TO ", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 256+64+32, myFont,"SEARCH SCREEN (B) Advance To Top ", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 256+64+64, myFont,"THIS SCREEN/FIRST ELEMENT (B) Search Screen", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + }else if(pos==-3){ + WPAD_ONMENU(ke); + GRRLIB_PrintfTTF(32, 32, myFont,"Controls", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + + GRRLIB_PrintfTTF(32, 256, myFont,"
UP/DOWN MOVE", 24,GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 256+32, myFont,"ENTER Enable KB/Download", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 256+64, myFont,"UP ON LIST BRINGS YOU TO ", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 256+64+32, myFont,"SEARCH SCREEN Advance To Top ", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + GRRLIB_PrintfTTF(32, 256+64+64, myFont,"THIS SCREEN/FIRST ELEMENT Search Screen", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //white text + + + }else{ + + //draw white rectangle + if(channelsetting<0){ + GRRLIB_Rectangle(150,224,340,32, GetColor(DOWNLOAD_TEXTBOX_BACKGROUND),1); + } + + //draw keyboard + if(keyboard>0){ + WPAD_KEYBOARD(ke); + + if(channelsetting>-1){ + + GRRLIB_PrintfTTF(128+90+90, 227+30, myFont,listingmode[downloadnotlist], 24,GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); + int offsetforstring2=(int)(GRRLIB_WidthTTF (myFont, optionsforChannel[channelsetting], 24))/2; + int startx2=320-offsetforstring2; + GRRLIB_PrintfTTF(startx2, 96, myFont,optionsforChannel[channelsetting], 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //black text + + if(channelsetting<2){ + //draw date + char mon[4]; + char dat[4]; + char yer[5]; + sprintf(mon,"%i-",monthnew); + sprintf(dat,"%i-",daynew); + snprintf(yer,5,"%i",yearnew); + if(coldate==0){ + GRRLIB_PrintfTTF(128, 227, myFont,mon, 24,GetColor(DOWNLOAD_TEXTBOX_BACKGROUND)); + + }else{ + GRRLIB_PrintfTTF(128, 227, myFont,mon, 24,GetColor(DOWNLOAD_TEXTBOX_FOREGROUND)); + + } + if(coldate==1){ + GRRLIB_PrintfTTF(128+90, 227, myFont,dat, 24,GetColor(DOWNLOAD_TEXTBOX_BACKGROUND)); + + }else{ + GRRLIB_PrintfTTF(128+90, 227, myFont,dat, 24,GetColor(DOWNLOAD_TEXTBOX_FOREGROUND)); + + } + if(coldate==2){ + GRRLIB_PrintfTTF(128+90+90, 227, myFont,yer, 24,GetColor(DOWNLOAD_TEXTBOX_BACKGROUND)); + + }else{ + GRRLIB_PrintfTTF(128+90+90, 227, myFont,yer, 24,GetColor(DOWNLOAD_TEXTBOX_FOREGROUND)); + + } + } + }else{ + + DrawKeyBoard(230,224+126); + if(UsingIRFeatures()){ + GRRLIB_Rectangle(150+50,224+35,340-100,32, GetColor(DOWNLOAD_SELECTOR),1); + int offsetforstring=(int)(GRRLIB_WidthTTF (myFont, "Submit", 24))/2; + int startx=320-offsetforstring; + + GRRLIB_PrintfTTF(startx, 227+35, myFont,"Submit", 24, GetColor(DOWNLOAD_FOREGROUND_SELECTOR)); //blue text + } + }}else{ + GRRLIB_PrintfTTF(32, 400, myFont,"to access help Press Up", 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //black text + + WPAD_ONMENU(ke); + } + if(channelsetting<0){ + //center text in white rectangle AKA textbox + int offsetforstring=(int)(GRRLIB_WidthTTF (myFont, url, 24))/2; + int startx=320-offsetforstring; + + GRRLIB_PrintfTTF(startx, 227, myFont,url, 24,GetColor(DOWNLOAD_TEXTBOX_FOREGROUND)); //black text + //draw Option + if(keyboard>0){ + int offsetforstring2=(int)(GRRLIB_WidthTTF (myFont, options[keyboard-1], 24))/2; + int startx2=320-offsetforstring2; + GRRLIB_PrintfTTF(startx2, 96, myFont,options[keyboard-1], 24, GetColor(DOWNLOAD_FOREGROUND_NO_SELECTOR)); //black text + + } + }} + if(UsingIRFeatures()){ + WPAD_IR(0,&ir); + + + GRRLIB_Rectangle(ir.x,ir.y,4,4,GetColor(DOWNLOAD_CURSOR),1); +} + + GRRLIB_Render(); + } + + GRRLIB_FreeTTF(myFont); + GRRLIB_Exit(); + exit(0); + return 0; +} + + + + + +void Channel(char* channel,int isuser,int downlo){ + +char output2[600]; + + if(isuser){ + sprintf(output2,"https://stark-shelf-08981.herokuapp.com/Grabber/User/%s",channel); + }else{ + sprintf(output2,"https://stark-shelf-08981.herokuapp.com/Grabber/Channel/%s",channel); + + } + + + if(Download(output2,Temp())){ + FILE *f = fopen(Temp(),"r"); + char downloa[1001]; + if(!downlo) videos=-1; + while(fgets(downloa,1001,f)!=NULL && (videos<499 || downlo==1)){ +if(downlo){ + char id[13]; + char title[500]; + sscanf(downloa, " %13s %500s", id, title); + char filename[530]; + char timein[20]; + time_t now = time(0); + strftime(timein, sizeof(timein), "%Y%m%d_%H%M%S", localtime(&now)); + PatchString(title); + sprintf(filename,"%s(%s)",title,timein); + + char idTool[500]; + sprintf(idTool,"https://stark-shelf-08981.herokuapp.com/Grabber/Video/%s",id); + Download(idTool,OpenVideoFile(filename)); + + }else{ + videos++; + sprintf(videoitems[videos],"%s",downloa); + + } + } + DeleteTemp(); + + + } + } + + + + + +void ChannelNew(char* channel,int isuser,int downlo,char* date){ + char output2[600]; + + if(isuser){ + sprintf(output2,"https://stark-shelf-08981.herokuapp.com/Grabber/UserNew/%s/%s",date,channel); + }else{ + sprintf(output2,"https://stark-shelf-08981.herokuapp.com/Grabber/ChannelNew/%s/%s",date,channel); + + } + + + if(Download(output2,Temp())){ + FILE *f = fopen(Temp(),"r"); + char downloa[1001]; + if(!downlo) videos=-1; + + while(fgets(downloa,1001,f)!=NULL && (videos<499 || downlo==1)){ +if(downlo){ + char id[13]; + char title[500]; + sscanf(downloa, " %13s %500s", id, title); + char filename[530]; + char timein[20]; + time_t now = time(0); + strftime(timein, sizeof(timein), "%Y%m%d_%H%M%S", localtime(&now)); + PatchString(title); + sprintf(filename,"%s(%s)",title,timein); + + char idTool[500]; + sprintf(idTool,"https://stark-shelf-08981.herokuapp.com/Grabber/Video/%s",id); + Download(idTool,OpenVideoFile(filename)); + + }else{ + videos++; + sprintf(videoitems[videos],"%s",downloa); + + } + } + DeleteTemp(); + + } + +} + diff --git a/source/settings.c b/source/settings.c new file mode 100644 index 0000000..0c3feec --- /dev/null +++ b/source/settings.c @@ -0,0 +1,101 @@ +#include "settings.h" + +int irmode=0; +int UsingIRFeatures(){ + return irmode; +} +void SwitchIR(){ + if(irmode==0){irmode=1;}else{irmode=0;} +} + + +FILE* HistoryRead(){ + return fopen("/TYTD/history.txt","r"); +} +FILE* HistoryAppend(){ + return fopen("/TYTD/history.txt","aw"); +} + +FILE* PlaylistTXT(char* fil){ + char file2[500]; + sprintf(file2,"/TYTD/PLTXT/%s.txt",fil); + return fopen(file2,"r"); +} +int FileSystemDrivers(){ + fatInitDefault(); + USBStorage_Initialize(); + return 0; +} +char* OpenVideoFile(char* filename){ + + char *yt = malloc(sizeof(char)*530); +snprintf(yt,530,"/TYTD/Videos/%s.mp4",filename); + + return yt; +} +void OpenPlaylistFile(char* playlist){ + + char yt[820]; +snprintf(yt,820,"/TYTD/Videos/%s",playlist); +mkdir(yt,0777); + +} +char* OpenFile(char* fname2){ + char filename[720]; + char *yt = malloc(sizeof(char)*820); + char timein[20]; + time_t now = time(0); + strftime(timein, sizeof(timein), "%Y%m%d_%H%M%S", localtime(&now)); + snprintf(filename,720, fname2,timein); +snprintf(yt,820,"/TYTD/Downloads/%s",filename); + + return yt; +} +char* OpenPlaylistVideoFile(char* playlist,char* video){ + + char *yt = malloc(sizeof(char)*820); +snprintf(yt,820,"/TYTD/Videos/%s/%s.mp4",playlist,video); + + return yt; +} +char* ThumbnailFileName(char* filename){ + + char *yt = malloc(sizeof(char) *530); +snprintf(yt,530,"/TYTD/Thumbnails/%s.jpg",filename); + + return yt; +} + + +int ThumbnailExists(char* filename){ + char yt[530]; +snprintf(yt,530,"/TYTD/Thumbnails/%s.jpg",filename); +struct stat buffer; +return (stat(yt,&buffer)==0); +} +char* ThumbnailURL(char* id){ + char *yt = malloc(sizeof(char) *530); +sprintf(yt,"https://img.youtube.com/vi/%s/hqdefault.jpg",id); +return yt; +} +int CreateFolders(){ + mkdir("/TYTD",0777); //Downloader + mkdir("/TYTD/Thumbnails",0777); //Thumbnails + mkdir("/TYTD/Downloads",0777); //Downloads + mkdir("/TYTD/Videos",0777); //Videos + mkdir("/TYTD/PLTXT",0777); //create dir for playlist text files + + return 0; +} + +char* Temp(){ + char *yt = malloc(sizeof(char)*530); +snprintf(yt,530,"/TYTD/~TMP"); + + return yt; + +} + +void DeleteTemp(){ + unlink("/TYTD/~TMP"); +} diff --git a/source/settings.h b/source/settings.h new file mode 100644 index 0000000..155b84d --- /dev/null +++ b/source/settings.h @@ -0,0 +1,35 @@ +#ifndef SETTINGS_H +#define SETTINGS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "FreeMonoBold_ttf.h" +void OpenPlaylistFile(char* playlist); + char* OpenFile(char* fname); + char* OpenPlaylistVideoFile(char* playlist,char* video); + +FILE* HistoryRead(); +FILE* HistoryAppend(); +int UsingIRFeatures(); +int FileSystemDrivers(); +char* OpenVideoFile(char* filename); +char* ThumbnailFileName(char* filename); +int ThumbnailExists(char* id); +int CreateFolders(); +char* ThumbnailURL(char* id); +FILE* PlaylistTXT(char* fil); +char* Temp(); + +void DeleteTemp(); +void SwitchIR(); +#endif