--Funciones teclado
function puntero_parpadeante()
if parpadeo_h:time()<500 then
	screen.print(60+screen.textwidth(string.sub(texto[actual],1,posicion_puntero),tam_txt_nc),30,"|",1,negro,0)
end
if parpadeo_h:time()>1000 then parpadeo_h:reset() end

end

words={
"if","for","while","end","function","then","do","local","else","==",
"+","/","and","break","elseif","false","true","#","nil","not","or",
"repeat","return","until","break"
}


function explode(txt,patron)

tabla={}
txt=txt.." "

while txt:find(patron)!=nil do
	a,b=txt:find(patron)
	tabla[#tabla+1]=txt:sub(1,a-1)
	txt=txt:sub(b+1,#txt)
end


return tabla
end


function find(txt)
	for i=1,#txt do
		if string.byte(txt:sub(i,i))==40 then return i end
	end
end

function sintax(x,y,i,tam)
	for w=1,#words do
		if words[w]==tabla[i] then 
			screen.print(x,y,tabla[i],tam,azul,0)
			return true
		end
	end
end

function sintax_s(txt)
	for w=1,#words do
		if txt:find(words[w])!=nil then 
			return true
		end
	end
	return false
end

function tintado(x,y,txt,tam,color1,color2)
	txt=txt:gsub("\r"," \r")
	
	if txt:sub(1,2)=="--" then
		screen.print(x,y,txt,tam,verde,0)
	else
	
	skip=sintax_s(txt)
	if txt:find('"')==nil and txt:find(')')==nil and skip==false then
		screen.print(x,y,txt,tam,negro,0)
	else
			
		tabla = explode(txt," ")
		limite=#tabla
		i=0
		while i<limite do
		i=i+1
		
			if skip then
				finded=sintax(x,y,i,tam)
			end
			
			if not finded then
				if tonumber(tabla[i])!=nil then 
					screen.print(x,y,tabla[i],tam,naranja,0)
					finded=true
				end
			end
			if not finded then
				a=tabla[i]:find('"')
				if a!=nil then
					b=tabla[i]:find('"',a+1)
					if b!=nil then
						part1=tabla[i]:sub(1,a-1)
						part2=tabla[i]:sub(a,b)
						part3=tabla[i]:sub(b+1,#tabla[i])

						tx=x
						screen.print(x,y,part1,tam,negro,0)
						tx=x+screen.textwidth(part1,tam)
						screen.print(tx,y,part2,tam,gris_o,0)
						tx=tx+screen.textwidth(part2,tam)
						screen.print(tx,y,part3,tam,negro,0)
						
						finded=true
					end
				end
			end
			if not finded then
				b=tabla[i]:find(")")
				if b!=nil then
					a=find(tabla[i])
					if a!=nil then
						tx=x
						screen.print(tx,y,tabla[i]:sub(1,a-1),tam,negro,0)
						
						tx=tx+screen.textwidth(tabla[i]:sub(1,a-1),tam)
						screen.print(tx,y,tabla[i]:sub(a,a),tam,azul,0)
						
						tx=tx+screen.textwidth(tabla[i]:sub(a,a),tam)
						screen.print(tx,y,tabla[i]:sub(a+1,b-1),tam,negro,0)
						
						tx=tx+screen.textwidth(tabla[i]:sub(a+1,b-1),tam)
						screen.print(tx,y,tabla[i]:sub(b,b),tam,azul,0)
						
						tx=tx+screen.textwidth(tabla[i]:sub(b,b),tam)
						screen.print(tx,y,tabla[i]:sub(b+1,#tabla[i]),tam,negro,0)
						finded=true
					end
				end
			end
			if not finded then
				screen.print(x,y,tabla[i],tam,negro,0)
			end
			
			x=x+screen.textwidth(tabla[i].." ",tam)
		end
	end
	end
end

function herramientas()


draw.fillrect(herra_c[1].x,herra_c[1].y-10,155,135,blanco)

for i=1,8 do
	if col(p,herra_c[i]) then
		draw.fillrect(herra_c[i].x,herra_c[i].y,153,10,sky)
		if controls.press("cross") then elegida=i end
	end
	screen.print(herra_c[i].x+10,herra_c[i].y,herra_c[i].t,0.6,negro,0)
end

if controls.press("cross") then
	if elegida==1 then
		portapapeles=texto[actual]
	elseif elegida==2 then
		portapapeles=texto[actual]
		texto[actual]=""
	elseif elegida==3 then
		texto[actual]=texto[actual]..portapapeles
	elseif elegida==4 then 
		texto[#texto+1]=""
			for i=0,#texto-actual do
				texto[#texto-i]=texto[#texto-i-1]
			end
		texto[actual]=""	
	elseif elegida==5 then 
		busqueda_nc()
	elseif elegida==6 then
		texto[actual]=""
	elseif elegida==7 then
		texto[actual]=string.lower(texto[actual]) 
	elseif elegida==8 then
		texto[actual]=string.upper(texto[actual])
	end 
end

draw.rect(herra_c[1].x,herra_c[1].y-10,155,135,negro)
end


function guardar_nc(nombre)
	if copia_seguridad then
		files.copy(workDir[pos_tarea].name,"ms0:/BASE/"..files.nopath(workDir[pos_tarea].name)..".BAK")
	end
	local tabla=""
	for i=1, #texto do
		tabla=tabla.."\n"..texto[i]:gsub("       ","	")
	end
	local trabajo=io.open(workDir[pos_tarea].name,"w+")
	trabajo:write(tabla)
	trabajo:close()
	files.rename(workDir[pos_tarea].name,nombre)
end


function compilar(archivo)
	if not files.exists(raiz.."Archivos Compilados") then files.mkdir(raiz.."Archivos Compilados") end
	acompilar = io.open(archivo, "r")
	textoacompilar = acompilar:read("*a")
	acompilar:close()
	acompilar = nil
	compilacion = io.open(raiz.."Archivos Compilados/compilacion.lua", "w+")
	compilacion:write("function compilacion()\n"..textoacompilar.."\nend\n\ncompilado = io.open(\""..raiz.."Archivos Compilados/"..files.nopath(archivo).."\", \"w+\")\ncompilado:write(string.dump(compilacion))\ncompilado:close()\ncompilado = nil")
	compilacion:close()
	compilacion = nil
	sinerror, mensaje = pcall(dofile, raiz.."Archivos Compilados/compilacion.lua")
	if not sinerror then
		mensaje = string.explode(mensaje, ":")
		table.remove(mensaje, 1); table.remove(mensaje, 1)
		if mensaje[2]:sub(2) == 'unexpected symbol near char(27)' then system.message("Error al compilar "..files.nopath(archivo).."\nEl script esta compilado.")
		else system.message("Error al compilar "..files.nopath(archivo).."\nLine "..(tonumber(mensaje[1])-1)..", "..mensaje[2]) end
	else estado = "Hecho ("..raiz.."Archivos Compilados/"..files.nopath(archivo)..")" end
	files.remove(raiz.."Archivos Compilados/compilacion.lua")
end


function ejecutar()

	guardar_nc(files.nopath(workDir[pos_tarea].name))
	fail,errormsg=pcall(dofile,workDir[pos_tarea].name)
	if fail then
		os.message("No se han encontrado errores de Sintaxis")
	else
		errormsg=string.explode(errormsg, ":")
		table.remove(errormsg,1)
		table.remove(errormsg,1)
		if os.message("Error al ejecutar "..workDir[pos_tarea].name.."\nLínea "..(tonumber(errormsg[1])-1)..": "..errormsg[2].."\n¿Deseas ir a la línea del error?",1)==1 then
			linea_actual=tonumber(errormsg[1])-1
		end
	end
end


function busqueda_nc()
if keyboard==1 then search=teclado(1,"Escribe tu Búsqueda",30,"") else search=os.osk("Escribe tu search","",30,1,0) end

	for i=actual,#texto do
		if string.find(texto[i],search)!=nil and actual!=i then actual=i linea_actual=i break end
	end
	p.x=210
	p.y=130
	barra_actual=0
end

function barras_principales()

for i=1,7 do
	if col(p,barra_inicial[i]) then
		draw.rect(barra_inicial[i].x,barra_inicial[i].y,barra_inicial[i].w,barra_inicial[i].h,negro) 
		if controls.press("cross") then
			if i!=3 and i!=7 then 
				barra_actual=i
			else
				orden_nc(i)
			end
		end
	end
end

if barra_actual!=0 then
	
	draw.fillrect(barra_nc[barra_actual][1].x,barra_nc[barra_actual][1].y,barra_nc[barra_actual][1].w,barra_nc[barra_actual][1].h,blanco)
	for i=2,#barra_nc[barra_actual] do
		if col(p,barra_nc[barra_actual][i]) then
			draw.fillrect(barra_nc[barra_actual][1].x,barra_nc[barra_actual][i].y,barra_nc[barra_actual][1].w,barra_nc[barra_actual][i].h,azul)
			if controls.press("cross") then
				orden_nc(barra_actual,i)
			end
		end
		screen.print(barra_nc[barra_actual][i].x,barra_nc[barra_actual][i].y,barra_nc[barra_actual][i].t,0.6,negro,0)
	end
	draw.rect(barra_nc[barra_actual][1].x,barra_nc[barra_actual][1].y,barra_nc[barra_actual][1].w,barra_nc[barra_actual][1].h,negro)
	if controls.press("circle") then barra_actual=0 end
end
end

function controles_teclado()

	if controls.press("select") then
		tipo_teclado=tipo_teclado+1
		tabla_teclas()
	end

	if barra_actual==0 then
		if controls.press("down") then letra_y=letra_y+1 elseif controls.press("up") then letra_y=letra_y-1 end
		if controls.press("left") then letra_x=letra_x-1 elseif controls.press("right") then letra_x=letra_x+1 end
		
		if letra_y>4 then letra_y=1 end
		if letra_y<1 then letra_y=4 end

		if letra_x>12 then letra_x=1 end
		if letra_x<1 then letra_x=12 end
	
		if posicion_puntero<0 then posicion_puntero=0 end
		if posicion_puntero>texto[actual]:len() then posicion_puntero=texto[actual]:len() end
	
		if controls.press("cross") and boton_x_pulsado<2 then 
			local parte=string.sub(texto[actual],posicion_puntero+1,texto[actual]:len())
			texto[actual] = string.sub(texto[actual],1,posicion_puntero)
			texto[actual]=texto[actual]..letras[letra_y][letra_x]..parte 
			posicion_puntero=posicion_puntero+1
		end
		
		if controls.cross() then
			boton_x_pulsado=boton_x_pulsado+1
			if boton_x_pulsado>30 then
				local parte=string.sub(texto[actual],posicion_puntero+1,texto[actual]:len())
				texto[actual] = string.sub(texto[actual],1,posicion_puntero)
				texto[actual]=texto[actual]..letras[letra_y][letra_x]..parte 
				posicion_puntero=posicion_puntero+1
			end
		else
			boton_x_pulsado=0
		end
end

end

function tabla_teclas()

if tipo_teclado>3 then tipo_teclado=1 end

if tipo_teclado==1 then 

letras ={
		{"1","2","3","4","5","6","7","8","9","0","[","]"},
		{"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",",",".","<",">",":"},
	}	
end

if tipo_teclado==2 then
	letras ={
		{"1","2","3","4","5","6","7","8","9","0","[","]"},
		{"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",",",".","<",">",":"},
	}	
end

if tipo_teclado==3 then
	letras ={
		{"1","2","3","4","5","6","7","8","9","0","[","]"},
		{"@","#","~","$","!","ç","&","'","|","(",")","|"},
		{" ","=","+","-","*","/","%","¿","?",'"',"_"," "},
		{" ","{","}",":",";","^",",",".","<",">",":"," "},
	}
end
end
