Перейти к содержимому

Asummonster

Пользователи
  • Публикации

    420
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Сообщения, опубликованные пользователем Asummonster


  1. Привет всем! Мы с Лёхой решили написать мост между всеми устройствами по интернету. Но тут мы столкнулись с такой проблемой: если вы в браузере напишете запрос юникодом, то браузер сам его переведёт в url. А вот при request в OC он не хочет обращаться к скрипту. Так вот, запихнул буквы русского языка в таблицу и написал простенькую заменялку. Она не сильно требовательная к производительности(тестировалось на процессоре Т2, перевело 1828 символов init'а за ~1,5 секунды. Памяти он тоже особо не съел. Решил выложить(мало-ли, вдруг кто-то будет делать портирование гугл-переводчика на OC :) ) Вот код:

    tableLIT={'Ѐ','Ё','Ђ','Ѓ','Є','Ѕ','І','Ї','А','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я',' ','а','б','в','г','д','е','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','ё'}tableURL={'%d0%80','%d0%81','%d0%82','%d0%83','%d0%84','%d0%85','%d0%86','%d0%87','%d0%90','%d0%91','%d0%92','%d0%93','%d0%94','%d0%95','%d0%96','%d0%97','%d0%98','%d0%99','%d0%9a','%d0%9b','%d0%9c','%d0%9d','%d0%9e','%d0%9f','%d0%a0','%d0%a1','%d0%a2','%d0%a3','%d0%a4','%d0%a5','%d0%a6','%d0%a7','%d0%a8','%d0%a9','%d0%aa','%d0%ab','%d0%ac','%d0%ad','%d0%ae','%d0%af','%20','%d0%b0','%d0%b1','%d0%b2','%d0%b3','%d0%b4','%d0%b5','%d0%b6','%d0%b7','%d0%b8','%d0%b9','%d0%ba','%d0%bb','%d0%bc','%d0%bd','%d0%be','%d0%bf','%d1%80','%d1%81','%d1%82','%d1%83','%d1%84','%d1%85','%d1%86','%d1%87','%d1%88','%d1%89','%d1%8a','%d1%8b','%d1%8c','%d1%8d','%d1%8e','%d1%8f','%d1%91'}
    unicode=require("unicode")
    function translate(data)
    	text=""
    	for i=1, #data do
    		local thisChar=unicode.sub(data, i, i)
    		for a=1, #tableLIT do
    			if thisChar==tableLIT[a] then
    				thisChar=a
    				break
    			end
    		end
    		if type(thisChar)=="number" then
    			text=text..tableURL[thisChar]
    		else
    			text=text..thisChar
    		end
    	end
    	return text
    end
    

  2. Что значит "тяжеловат"? Много файлов? Большой вес файлов? Большое потребление оперативки и процессора? Сложная имплементация?

    Лично я ничего не понял:) Нужны какие-то стили, даже вникать не хотелось. Куда проще просто написать createButton(x, y, weight, height, hotKey, function, data)


  3. А я уже писал как-то свой read():D Сделал даже интерпретатор для биуса:D 

    keys={noconvert=123,numpadenter=156,delete=211,[73]="numpad9",[146]="colon",numpadadd=78,up=200,[18]="e",[36]="j",numpadequals=141,[144]="circumflex",[54]="rshift",kanji=148,[179]="numpadcomma",[71]="numpad7",equals=13,apostrophe=40,ax=150,[35]="h",[70]="scroll",right=205,[53]="slash",pageDown=209,period=52,[69]="numlock",f7=65,pause=197,[210]="insert",[17]="w",numpaddecimal=83,[68]="f10",[26]="lbracket",[52]="period",[104]="f17",[208]="down",f6=64,[103]="f16",[33]="f",[66]="f8",numpad4=75,[102]="f15",f10=68,[65]="f7",[145]="at",[101]="f14",grave=41,f8=66,[16]="q",f19=113,[25]="p",[50]="m",[100]="f13",pageUp=201,[77]="numpad6",convert=121,f1=59,[14]="back",[157]="rcontrol",f14=101,["end"]=207,[42]="lshift",[200]="up",[13]="equals",home=199,[49]="n",[7]="6",[31]="s",[88]="f12",["6"]=7,["5"]=6,["4"]=5,["3"]=4,["2"]=3,["1"]=2,colon=146,[6]="5",[12]="minus",f9=67,[48]="b",numpadsub=74,[64]="f6",[181]="numpaddiv",[62]="f4",[209]="pageDown",[40]="apostrophe",e=18,[45]="x",[55]="numpadmul",slash=53,[44]="z",f15=102,[56]="lmenu",[47]="v",circumflex=144,[67]="f9",[201]="pageUp",[11]="0",[2]="1",[3]="2",[4]="3",minus=12,[22]="u",rcontrol=157,[149]="stop",numpad6=77,[23]="i",[46]="c",insert=210,[184]="rmenu",numpadcomma=179,[147]="underline",[105]="f18",[43]="backslash",numpad5=76,numpaddiv=181,f13=100,f=33,f12=88,d=32,c=46,f3=61,a=30,[59]="f1",[63]="f5",f11=87,stop=149,l=38,k=37,enter=28,i=23,h=35,g=34,v=47,u=22,t=20,s=31,r=19,q=16,lshift=42,numpadmul=55,["0"]=11,[211]="delete",[87]="f11",[27]="rbracket",[123]="noconvert",["9"]=10,at=145,["7"]=8,yen=125,["8"]=9,f2=60,[61]="f3",numpad2=80,[34]="g",numpad3=81,[207]="end",lcontrol=29,[76]="numpad5",[51]="comma",[121]="convert",scroll=70,[21]="y",[205]="right",[15]="tab",[30]="a",[60]="f2",[78]="numpadadd",f16=103,numlock=69,[203]="left",[83]="numpaddecimal",[141]="numpadequals",backslash=43,[125]="yen",[8]="7",[9]="8",[41]="grave",[82]="numpad0",numpad8=72,rbracket=27,[72]="numpad8",[24]="o",[19]="r",[199]="home",[81]="numpad3",lbracket=26,f5=63,[5]="4",[10]="9",[20]="t",[197]="pause",[80]="numpad2",numpad0=82,o=24,f17=104,back=14,[32]="d",semicolon=39,[79]="numpad1",b=48,n=49,m=50,j=36,p=25,[39]="semicolon",lmenu=56,[156]="numpadenter",[57]="space",z=44,y=21,x=45,w=17,numpad1=79,down=208,space=57,[113]="f19",[29]="lcontrol",f4=62,[38]="l",left=203,[28]="enter",underline=147,[112]="kana",numpad9=73,numpad7=71,comma=51,[75]="numpad4",[150]="ax",tab=15,kana=112,f18=105,rmenu=184,[37]="k",[74]="numpadsub",[148]="kanji",rshift=54}
    if require then
    	component=require("component")
    end
    _G.History={}
    function read(x, y, maxlen)
    	if require then
    		gpu=require("component").gpu
    		unicode=require("unicode")
    	else
    		gpu=component.proxy(component.list("gpu")())
    	end
    	_G.inHistory=(#_G.History)+1
    	W, H = gpu.getResolution()
    	if maxlen==nil then
    		maxlen=W-x
    	end
    	canRead=true
    	text=""
    	gpu.fill(x, y, x+maxlen, y, " ")
    	isBig=false
    	while canRead do
    		local evName, _, DATA, key = computer.pullSignal()
    		if evName=="key_down" and key==201 then --
    		else
    		if evName=="key_down" then
    		local	key=keys[key]
    			if key=="back" then
    				if #text>0 then
    					text=string.sub(text, 0, #text-1)
    				end
    			elseif key=="enter" then
    				canRead=false
    			elseif key=="space" then
    				text=text.." "
    			elseif key=="lshift" then 
    				isBig=true
    			elseif key=="lcontrol" then
    				canRead=false
    				text="interrupted"
    			elseif key=="rcontrol" then
    				--
    			elseif key=="rshift" then
    				--
    			elseif key=="9" and isBig==true then
    				text=text.."("
    				isBig=false
    			elseif key=="0" and isBig==true then
    				text=text..")"
    				isBig=false
    			elseif key=="APOSTROPHE" then
    				text=text..'"'
    			elseif key=="apostrophe" then
    				text=text.."'"
    			elseif key=="slash" then 
    				if isBig==false then
    					text=text.."/"
    				else
    					text=text.."?"
    				end
    				isBig=false
    			elseif key=="1" and isBig==true then
    				text=text.."!"
    				isBig=false
    			elseif key=="2" and isBig==true then
    				text=text.."@"
    				isBig=false
    			elseif key=="3" and isBig==true then
    				text=text.."#"
    				isBig=false
    			elseif key=="4" and isBig==true then
    				text=text.."$"
    				isBig=false
    			elseif key=="5" and isBig==true then
    				text=text.."%"
    				isBig=false
    			elseif key=="6" and isBig==true then
    				text=text.."&"
    				isBig=false
    			elseif key=="8" and isBig==true then
    				text=text.."*"
    				isBig=false
    			elseif key=="minus" then
    				if isBig==true then 
    					text=text.."_"
    				else
    					text=text.."-"
    				end
    				isBig=false
    			elseif key=="period" then
    				text=text.."."
    			elseif key=="comma" then
    				text=text..","
    			elseif key=="lbracket" then
    				if isBig==true then
    					text=text.."{"
    					isBig=false
    				else
    					text=text.."["
    				end
    			elseif key=="rbracket" then
    				if isBig==true then
    					text=text.."}"
    					isBig=false
    				else
    					text=text.."]"
    				end
    			elseif key=="equals" then
    				text=text.."="
    			elseif key=="up" then
    				if inHistory>=1 and inHistory>=2 then
    					table.insert(_G.History, text)
    					_G.inHistory=inHistory-1
    					text=History[inHistory]
    				end
    			elseif key=="down" then
    				if inHistory<#History then
    					_G.inHistory=inHistory+1
    					text=History[inHistory]
    				end
    			elseif key=="insert" then
    				--
    			elseif string.find(key, "numpad") then
    				if	#text+1<=maxlen then
    					key=string.sub(key, #key, #key)
    					if	key=="l" then
    						text=text.."."
    					elseif key=="d" then
    						text=text.."+"
    					elseif key=="b" then
    						text=text.."-"
    					else
    						text=text..key
    					end
    				end
    			else 
    				if	#text+1<=maxlen then
    					if isBig==true then
    						text=text..unicode.upper(key)
    						isBig=false
    					else
    						text=text..key
    					end
    				end
    			end
    		elseif evName=="clipboard" then
    			text=text..DATA
    		end
    		gpu.fill(x, y, x+maxlen, y, " ")
    		gpu.set(x, y, text)
    	end 
    	end
    	table.insert(_G.History, text)
    	return text
    end
    function bindComponents()
    	local coms=component.list()
    	for address in coms do
    		com=coms[address]
    		if com~="computer" then
    			_G[com]=component.proxy(com)
    		end
    	end
    end
    function _G.print(data)
    	W, H = gpu.getResolution()
    	if type(data)=="string" then
    		gpu.fill(1, H, W, H, " ")
    		gpu.set(1, H, data)
    	elseif type(data)=="table" then
    		gpu.fill(1, 5, W, H-1, " ")
    		i=5
    		for func in pairs(data) do
    			gpu.set(1, i, func)
    			i=i+1
    		end
    	end
    end
    function get(url)
     local inet = component.proxy(component.list("internet")())
    local request, reason = inet.request(url)
    if not request then return '' end
    local text = ''
    while true do
    local data, reason = request.read()
    if not data then 
    request.close()
    break
    elseif #data > 0 then
    text = text..data
    end
    end
    return text
    end
    function runWeb(url)
    pcall(load(get(url)))
    end
    function _G.clear()
    	gpu.fill(1, 1, W, H, " ")
    end
    bindComponents()
    while true do
    	command=read(1, 1)
    	local happened, result=pcall(load(command))
    	W, H = gpu.getResolution()
    	gpu.fill(1, 2, W, 3, " ")
    	gpu.set(1, 2, tostring(happened))
    	if result~=nil then
    		gpu.set(1, 3, result)
    	end
    end
    

  4. Да буду благодарен за гайд по Internet API.У меня почему то не хочет стучаться до сайта.Вот какой код:

    local com = require('component')
    local internet = com.internet
    local connect = internet.connect("site.ru", 80)
    local file = connect.read()
    print(file)
    connect.close()
    И при выводе пустота. Не знаю почему не выводит.Через internet.open мне говорит что: address could not be parsed or no valid port given

    Потому что нужен request.http://pastebin.com/sVAys5ac

    • Нравится 1

  5. Ого и я тута уже побывал 0_0 прикольно.

    Так ты же в чат написал, что можно -xp. Троян уже свой плагин начал писать:D

    OpenCloud, он заморожен, я сейчас занят, да и передохнуть хочу, переключиться на другие языки.

    Нео, предлагаю мир:)

×
×
  • Создать...