
--PSP Explorer v2!!
--Realizado totalmente por Jorge_97
--Agradecimientos a psp.scenebeta.com
--Todos los derechos reservados


os.cpu(333)

saveclose={x=404,y=3,w=29,h=18}
close={x=446,y=3,w=29,h=18}


function col(obj1, obj2)
	if obj1.x+obj1.w>obj2.x 
	and obj1.x<obj2.x+obj2.w 
	and obj1.y+obj1.h>obj2.y 
	and obj1.y<obj2.y+obj2.h then 
		return true 
	end
return false 
end



dofile("OTHER/bateria/script.lua")
dofile("OTHER/liberador.lua")
dofile("OTHER/teclado.lua")
dofile("OTHER/other.lua")
dofile("SYSTEM/BiosROM/script.lua")
dofile("SYSTEM/administrador/script.lua")
dofile("APP/explorador/escritorio.lua")
dofile("FX/presentacion/script.lua")
dofile("OTHER/funciones.lua")


if not files.exists("ms0:/BASE") then files.mkdir("ms0:/BASE") end
if not files.exists("ms0:/PICTURE") then files.mkdir("ms0:/PICTURE") end
if not files.exists("ms0:/MUSIC") then files.mkdir("ms0:/MUSIC") end

pos_barra=1

song_a=1


cursor0=image.load("FX/c0.png")


pspfont=font.load("OTHER/pspexplorer.pgf")

--Colores
celeste=color.new(0,255,255)
oro=color.new(255,215,0)
negro=color.new(0,0,0)
azul=color.new(0,0,255)
rojo=color.new(255,0,0)
verde=color.new(0,255,0)
sky=color.new(135,206,235)
sky2=color.new(30,144,255)
sky3=color.new(0,191,255,120)
blanco=color.new(255,255,255)
amarillo=color.new(255,255,0)
azul_claro=color.new(30,30,200)
gris=color.new(192,192,192)
naranja=color.new(255,158,0)
plateado=color.new(192,192,192)
gris_o=color.new(105,105,105)
gris_d=color.new(211,211,211)
azul_d=color.new(70,130,180)
oliva=color.new(107,142,35)
blanco_d=color.new(255,255,255,100)
colortrasero=color.new(80,80,80)
blanco_t=color.new(255,255,255,200)
gris_t=color.new(160,160,160,124)
selec_c=color.new(209,222,242,120)
explorer_back=color.new(240,240,240)

modo=1

p={x=240,y=135,w=1,h=1}

prog_img=image.create(200,242,blanco)

sound_apagando=sound.load("FX/presentacion/apagado.mp3")
sound_encendie=sound.load("FX/presentacion/start.mp3")

cuadrado_ini={x=0,y=242,w=100,h=30,e=0,actual=1}
opciones={}

opciones[1]={x=4,y=55,w=145,h=20}
opciones[2]={x=4,y=80,w=145,h=20}
opciones[3]={x=4,y=105,w=145,h=20}
opciones[4]={x=4,y=130,w=145,h=20}
opciones[5]={x=4,y=160,w=145,h=20}
opciones[6]={x=4,y=185,w=145,h=20}
opciones[7]={x=4,y=220,w=145,h=20}

apagando=false
programas=false

stnd_e=false
sus_e=false

program_a=1

apagado=false

recuadro={}
recuadro[1]={x=184,y=119,w=22,h=21}
recuadro[2]={x=230,y=117,w=22,h=22}
recuadro[3]={x=271,y=117,w=24,h=24}
recuadro[4]={x=207,y=151,w=75,h=20}

variacion=1

moment=""
splash_close=false

app={}

app[1]={x=170,y=16,w=200,h=13,t="Calculadora"}
app[2]={x=170,y=32,w=200,h=13,t="GoCam"}
app[3]={x=170,y=48,w=200,h=13,t="Calendario"}
app[4]={x=170,y=64,w=200,h=13,t="Explorador"}
app[5]={x=170,y=80,w=200,h=13,t="Arkanoid"}
app[6]={x=170,y=96,w=200,h=13,t="Donkey Kong"}
app[7]={x=170,y=112,w=200,h=13,t="Space Invaders"}
app[8]={x=170,y=128,w=200,h=13,t="Sudoku"}
app[9]={x=170,y=144,w=200,h=13,t="BattleshipZero"}
app[10]={x=170,y=160,w=200,h=13,t="Snake"}
app[11]={x=170,y=176,w=200,h=13,t="Diccionario"}
app[12]={x=170,y=192,w=200,h=13,t="Agenda"}
app[13]={x=170,y=208,w=200,h=13,t="Power Point"}
app[14]={x=170,y=224,w=200,h=13,t="Más programas"}

app[15]={x=170,y=16,w=200,h=13,t="PlutuX"}
app[16]={x=170,y=32,w=200,h=13,t="WiFi Utilities"}
app[17]={x=170,y=48,w=200,h=13,t="MS Transfer"}
app[18]={x=170,y=64,w=200,h=13,t="UMD Launcher"}
app[19]={x=170,y=80,w=200,h=13,t="Actualizar"}
app[20]={x=170,y=224,w=200,h=13,t="Menos programas"}


masp=0

function runapp(i)
	if i==1 then new_corutina("CalculaPSP") calculapsp()
	elseif i==2 then new_corutina("GoCam") GOCAM()
	elseif i==3 then new_corutina("Calendario") calendario()
	elseif i==4 then explorador()
	elseif i==5 then nivel_actual=1 arka()
	elseif i==6 then nivel_actual=1 DKGAME()
	elseif i==7 then SpaceInvaders()
	elseif i==8 then main_sudoku()
	elseif i==9 then main()
	elseif i==10 then snkinicio()
	elseif i==11 then new_corutina("Diccionario") diccionario_off()
	elseif i==12 then new_corutina("Agenda") agenda()
	elseif i==13 then new_corutina("Power Point") powerpoint()
	elseif i==15 then mini_explorador("PlutuX")
	elseif i==16 then new_corutina("WiFi Utilities") WiFi()
	elseif i==17 then new_corutina("MS Transfer") exploradorms("ms0:/")
	elseif i==18 then
		if umd.present() then
			if os.message("¿Deseas iniciar el UMD?",1)==1 then
				os.runeboot("ms0:/PSP/GAME/PSPEXPLORER v2/APP/UMD/EBOOT.PBP")
			end
		else
			os.message("Debes introducir un UMD")
		end
	elseif i==19 then
		new_corutina("Actualizar")
		actualizar()
	end
end


function new_corutina(programa)

localizado=false

if rutinas[1].p!=programa and rutinas[2].p!=programa and rutinas[3].p!=programa then
for i=1,3 do
if rutinas[i].p=="" then rutinas[i].p=programa rutinas[i].e=true localizado=true break end
end
if not localizado then rutinas[3].p=programa rutinas[3].e=true end

end
end

function colisiones_puntero3()

if controls.press("circle") then cuadrado_ini.e=0 end


if cuadrado_ini.e==1 then 
	inicio:blit(0,0)

	if apagado==false then
		if controls.press("cross") and program_a==0 then
			local out=true
			for i=1,7 do
				if col(p,opciones[i]) then out=false end
			end
			if out then cuadrado_ini.e=0 end
		end
		for i=1,6 do
			if col(p,opciones[i]) then draw.fillrect(opciones[i].x,opciones[i].y,opciones[i].w,opciones[i].h,azul) end
			if controls.press("cross") and not controls.triangle() and col(p,opciones[i]) then 
				if i==1 then moment="ms0:/Base" end
				if i==2 then moment="ms0:/Picture" end
				if i==3 then moment="ms0:/Music" end
				if i==4 then moment="ms0:/PSP" end
				if i<5 then
					if not files.exists(moment) then
						files.mkdir(moment)
					end
					if #files.list(moment)==0 then
						vac(false,moment)
					else
						workDir=files.list(moment)
						explorador()
					end
				end

				if i==5 then panel_control() end
				if i==6 then 
					if keyboard==1 then 
						code=teclado(1,"Consola PSP Explorer",30,"") 
					else 
						code=os.osk("Consola PSP Explorer","",30,1,0) 
					end 
					consola_ejecutar() 
				end
			end
		end
		if col(p,opciones[7]) then
			draw.fillrect(opciones[7].x,opciones[7].y,opciones[7].w,opciones[7].h,azul)
			if controls.release("cross") then 
				programas=true 
			end
		end
		if col(p,cuadrado_ini) and controls.press("cross") then
			apagado=true
		end
	end

	inicio1:blit(7,45)
	if tema<3 then
		if username:len()>15 then
			screen.print(10,15,username:sub(1,15).." ...",0.7,negro,0)
		else
			screen.print(10,15,username,0.7,negro,0)
		end
	end
else
	if p.x>430 and p.y>242 and p.x<480 and p.y<272 then
		draw.clock(424,166,35,gris_d,gris_o,negro)
	end
end

if cuadrado_ini.e>1 then cuadrado_ini.e=0 end

if col(p,cuadrado_ini) and controls.press("cross") and not apagado then
	cuadrado_ini.e=cuadrado_ini.e+1 
end

end

function Programas()

if controls.press("circle") then programas=false end

prog_img:blend(153,0,200)

program_a=0
--Lista grande
if masp==0 then
	for i=1,14 do
		if col(p,app[i]) then program_a=i draw.fillrect(153,app[program_a].y-1,200,13,sky3) end
		screen.print(app[i].x,app[i].y,app[i].t,0.6,negro,0)
	end
else
	for i=15,20 do
		if col(p,app[i]) then program_a=i draw.fillrect(153,app[program_a].y-1,200,13,sky3) end
		screen.print(app[i].x,app[i].y,app[i].t,0.6,negro,0)
	end
end


draw.rect(153,0,200,242,negro)


if controls.press("cross") then
	if program_a==14 then
		masp=1
	elseif program_a==20 then
		masp=0
	else
		runapp(program_a)
	end
end
if controls.press("triangle") then
	if program_a!=14 and program_a!=20 and program_a!=0 then
		a=io.open("ms0:/"..app[program_a].t..".app","w+")
		a:write("app="..(program_a+5)*8)
		a:close()
		a=nil
		sistema()
	end
end

end



function puntero(desactivado)

if p.x<0 then p.x=0 end
if p.x>477 then p.x=477 end
if p.y<0 then p.y=0 end
if p.y>269 then p.y=269 end


if controls.l() and controls.start() then admin_tareas() end

if desactivado!=true then 
if controls.press("select") and captura then
	screenshot=screen.toimage()
	if keyboard==1 then 
		nombre=teclado(1,"Nombre para la captura",30,"") 
	else 
		nombre=os.osk("Nombre para la captura","",30,1,0)
	end 
	if nombre!="" then image.save(screenshot,"ms0:/Base/"..nombre..".png") end
	screenshot:free()
	screenshot=nil
end
end

if velocidad_puntero>4 then velocidad_puntero=1 end

 if stick then
	if controls.analogx()>80 then p.x=p.x+velocidad_puntero end
	if controls.analogy()>80 then p.y=p.y+velocidad_puntero end
	if controls.analogx()<-80 then p.x=p.x-velocidad_puntero end
	if controls.analogy()<-80 then p.y=p.y-velocidad_puntero end
else
	if controls.up() then p.y=p.y-velocidad_puntero end
	if controls.down() then p.y=p.y+velocidad_puntero end
	if controls.right() then p.x=p.x+velocidad_puntero end
	if controls.left() then p.x=p.x-velocidad_puntero end
end



p.i:blit(p.x,p.y)


input_playlist()
if rutinas[1].p!="Reproductor" and rutinas[2].p!="Reproductor" and rutinas[3].p!="Reproductor" then
	if type(o)=="userdata" then o:free() o=nil end
end


controls.homepopup(home)
end

function apagar_equipo()

	if apagado then
		if variacion<180 then
			variacion=variacion+1
		end
		draw.fillrect(0,0,480,272,color.new(0,0,0,variacion))
		img_apagado:blit(166,85)
		if controls.press("cross") then 
			if col(p,recuadro[1]) then sus_e=true if estado_sonido then sound_apagando:play(2) end end
			if col(p,recuadro[2]) then stnd_e=true if estado_sonido then sound_apagando:play(2) end end
			if col(p,recuadro[3]) then apagado=false usuarios() end
			if col(p,recuadro[4]) then apagado=false end
		end
	else 
		variacion=1
	end
	
	if not sound_apagando:playing() then
		if stnd_e then stnd_e=false apagado=false power.standby() end
		if sus_e then sus_e=false apagado=false power.suspend() end
	end
end



function enter_app()

sistema()

end


function sistema(app,kill)

liberar(1)

if app!=nil then
	if kill then
		for i=1,3 do
			if rutinas[i].p==app then
				if type(rutinas[i].i)=="userdata" then
					rutinas[i].i:free()
					rutinas[i].i=nil
				end
				rutinas[i].p=""
			end
		end
	else
		for i=1,3 do
			if rutinas[i].p==app then
				rutinas[i].i=screen.toimage()
				rutinas[i].i:resize(150,85)
			end
		end
	end
spl_ventana=screen.toimage()
spl_x=0
spl_y=0
spl_scale=100
splash_close=true

end

cuadrado_ini.e=0
programas=false

opndcon=false
tareas_e=false
nuevo=false
propi=false

actualizar_e()

while true do
controls.read()

img_escritorio[fondo_escritorio]:blit(0,0)

barrainf:blit(0,242)
screen.print(445,245,os.date("%H:%M"),0.5,blanco,0)
screen.print(445,255,batt.percent().."%",0.5,blanco,0)

escritorio()

for i=1,3 do
if rutinas[i].p!="" then 
	if controls.press("cross") and col(p,rutinas[i]) then
		if rutinas[i].p=="Visor de imágenes" then visor(true) 
		elseif rutinas[i].p=="Reproductor" then reproductor(true)
		elseif rutinas[i].p=="PlutuX" then plutuX()
		elseif rutinas[i].p=="NotepadCode" then editor(true)
		elseif rutinas[i].p=="CalculaPSP" then calculapsp()
		elseif rutinas[i].p=="GoCam" then GOCAM()
		elseif rutinas[i].p=="Agenda" then agenda()
		elseif rutinas[i].p=="Power Point" then powerpoint(true)
		elseif rutinas[i].p=="Actualizar" then actualizar()
		elseif rutinas[i].p=="WiFi Utilities" then WiFi()
		elseif rutinas[i].p=="Calendario" then calendario(true)
		elseif rutinas[i].p=="PlayList" then playlist_f()
		elseif rutinas[i].p=="MS Transfer" then exploradorms("ms0:/")
		elseif rutinas[i].p=="Diccionario" then diccionario_off() end
	end
	if tema==1 or tema==3 then
		if col(p,rutinas[i]) then
			draw.fillrect(rutinas[i].x,rutinas[i].y,rutinas[i].w,rutinas[i].h,sky)
			draw.rect(rutinas[i].x,rutinas[i].y,rutinas[i].w,rutinas[i].h,azul)
			if rutinas[i].i!=nil then
				rutinas[i].i:blit(rutinas[i].x-20,rutinas[i].y-85)
			end
		else
			if tema==1 then
				draw.fillrect(rutinas[i].x,rutinas[i].y,rutinas[i].w,rutinas[i].h,sky2)
			end
		end
	else
		if col(p,rutinas[i]) then
			draw.fillrect(rutinas[i].x,rutinas[i].y,rutinas[i].w,rutinas[i].h,gris_t)
			draw.rect(rutinas[i].x,rutinas[i].y,rutinas[i].w,rutinas[i].h,negro)
			if rutinas[i].i!=nil then
				rutinas[i].i:blit(rutinas[i].x-20,rutinas[i].y-85)
			end
		end
	end
	for i=1,3 do
	if screen.textwidth(rutinas[i].p,0.6)>100 then 
		trozo1=string.sub(rutinas[i].p,1,9)
		trozo2=string.sub(rutinas[i].p,10)
		screen.print(rutinas[i].x+10,rutinas[i].y,trozo1.."\n"..trozo2,0.6,blanco,0)
	else
		screen.print(rutinas[i].x+10,rutinas[i].y+10,rutinas[i].p,0.6,blanco,0)
	end
end
end
end


if not apagado and not propi then
	colisiones_puntero3()
end

apagar_equipo()

if programas then Programas() end

if controls.press("square") then
	if col(p,rutinas[3]) then
		rutinas[3].p=""
		if type(rutinas[3].i)=="userdata" then
			rutinas[3].i:free()
			rutinas[3].i=nil
		end
	end
	if col(p,rutinas[2]) then
		if type(rutinas[2].i)=="userdata" then
			rutinas[2].i:free()
			rutinas[2].i=nil
		end
		table.remove(rutinas,2)
	end
	if col(p,rutinas[1]) then
		if type(rutinas[1].i)=="userdata" then
			rutinas[1].i:free()
			rutinas[1].i=nil
		end
		table.remove(rutinas,1)
	end
	
	if tema==1 then
		for i=1,3 do
			if type(rutinas[i])!="table" then rutinas[i]={x=0,y=0,w=107,h=26,p="",i=nil} end
			rutinas[i].x=107+107*i-107
			rutinas[i].y=245		
		end
	elseif tema==2 then
		for i=1,3 do
			if type(rutinas[i])!="table" then rutinas[i]={x=0,y=0,w=106,h=31,p="",i=nil} end
			rutinas[i].x=111+106*i-107
			rutinas[i].y=242		
		end
	else
		for i=1,3 do
			if type(rutinas[i])!="table" then rutinas[i]={x=0,y=0,w=100,h=27,p="",i=nil} end
			rutinas[i].x=114+101*i-100
			rutinas[i].y=245		
		end
	end
end



if splash_close then spl_close() end

if not propi then
	puntero()
end

screen.flip()
end
end



puntos="..."
ptime=timer.new()
ptime:start()

function loadcallback()
	if ptime:time()>500 then puntos="." end
	if ptime:time()>1000 then puntos=".." end
	if ptime:time()>1500 then puntos="..." ptime:reset() end
	splash1:blit(0,0)
	screen.print(pspfont,240,200,"Cargando",1.4,blanco,0,"center")
	screen.print(pspfont,240,240,puntos,1.1,blanco,0,"center")
    screen.flip()
end

user=tonumber(ini.read("SYSTEM/salida.ini","user",0))
if user>0 then
	
	ini.write("SYSTEM/salida.ini","user",0)
	carga_rapida()
	username=ini.read("SYSTEM/CONFIG.INI","U"..user,"name","User"..user)
	info()
	sound_encendie:play(1)
	splash1:free()
	splash1=nil
	loadcallback=nil
	enter_app()

else
	loadcallback=nil
	splash=image.load("FX/imagenes/splash.png")

	trans=-100
	while trans<300 do
		controls.read()
		screen.clear(negro)
		trans=trans+1.5
		splash:blend(0,0,trans)
		if controls.press("start") then bios() end
		screen.flip()
	end
	splash:free()
	splash=nil

	presentacion()

end
