Zer0Galaxy
-
Публикации
1 220 -
Зарегистрирован
-
Посещение
-
Победитель дней
189
Сообщения, опубликованные пользователем Zer0Galaxy
-
-
Тебе нужны id мониторов? Используй component.list("screen")
-
Верно. Когда то Алекс и такую функцию выкладывал, но для этого интернет-карта нужна.
-
— Вы имеете право хранить молчание. Все что вы скажете, может быть использовано против вас.
— Арифмометр.
— Что арифмометр?
— Используйте против меня арифмометр.
(старый анекдот)
Что же это за штука такая, арифмометр? Немногие помнят, что до появления персональных компьютеров и даже до электронных калькуляторов, отечественной промышленностью выпускались механические вычислители – арифмометры. Наиболее массовыми представителями этих механизмов были арифмометр «Феликс» и его последующая модификация «Феликс-М», именуемые в народе «Железный Феликс».
Позволяет эта машинка складывать, вычитать, умножать и делить, а при должной сноровке – извлекать квадратные корни.
И хотя удовольствие от работы с реальным арифмометром не идет ни в какое сравнение с его виртуальной копией, представляю Вашему вниманию эмулятор данного устройства.

Как работать на таком арифмометре, расписывать не буду. Желающие найдут в Интернете массу информацию на эту тему.
Скачать эмулятор можно по ссылке: pastebin get HFbiHejB felix_m.lua
Для эмулятора Вам потребуется монитор третьего уровня и библиотека forms.
-
9
-
-
-
А функция time разве не работает точно?
Функция os.time() возвращает внутриигровое время.
-
Предлагаю хранить байты не в строке, а в таблице чисел. По восемь байт на число (или сколько там?). При этом чтобы вставить/извлечь байт перелопачивать придется не всю длиннющую строку, а один number.Может как-нибудь доработаю эту библиотеку-
2
-
-
На мой взгляд, разрешение ОС-монитора не такое большое, чтобы делить его на окна.
Если бы я стал писать многозадачную операционку, разделение экрана я бы реализовал не как в Windows, а как в Androidе. Т.е. из всех запущенных приложение только одно захватывает экран, оно же обрабатывает события мыши и клавы. Остальные приложения крутятся в фоне и если что-то пишут, то на свой виртуальный экран.
Но, это лишь мое скромное мнение.
-
6
-
-
У дебаги есть функция:
- setBlocks(x0: number, y0:number, z0:number, x1: number, y1:number, z1:number, id:number, meta:number)
Изменяет все блоки в области, определенной двумя угловыми точками: (x0, y0, z0) и (x1, y1, z1).
Если пол из одинаковой шерсти, то можно сетнуть быстро. Если вся шерсть рандомная, то нельзя.
Есть еще командный блок. С его помощью можно копировать блоки из одного места в другое. Сперва делаем заготовку пола в каком либо скрытом от глаз подвале, а потом одной командой копируем.
-
1
-
Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту ) Функции должны распределять компоненты одинакового типа между окнами. Например если есть 2 редстоун-адаптера и 2 окна потребовали компонент "redstone", то каждое окно должно получить свой редстоун-адаптерlocal components={} -- тут будем хранить занятые компоненты local getComponent = function(window, componentType, componentAddress) --[[ window - это окно, которое потребовало компоненту componentType - тип компоненты ( игнорировать GPU ) componentAddress - адрес требуемой компоненты (этот параметр, на мой взгляд, не нужен) ]] for address in component.list(componentType) do -- здесь и далее вызываем родные функции component, а не подмену if components[address]==nil then -- если компонент не занят, занимаем его components[address]=window end if components[address]==window then -- если компонент занят этим окном, return component.proxy(address) -- возвращаем его прокси end end -- вернем nil, если свободных компонент не найдено end local freeComponent = function(componentAddress) -- пометить компонент <componentAddress> как незанятый components[componentAddress]=nil endкак то так?
-
А что помешает приложению вызвать component.proxy() для доступа к компоненту в обход системы?
-
1) Используй io.open(filename), чтобы открыть файл. Например:
file=io.open("MyFile")Функция вернет хедер файла, если он существует или nil если нет.
2) Если файл существует, используй функцию file:read("*a"), чтобы прочитать содержимое файла
text=file:read("*a")Функция вернет данные из файла в виде строки или пустую строку, если файл пустой.
Не забудь закрыть открытый файл file:close(), даже если он пустой. Это правило хорошего тона.
3) Если файл не существует или файл пустой, используй io.open(filename,"w"), чтобы открыть файл на запись
file=io.open("MyFile","w")Функция вернет хедер файла или nil если файл по каким то причинам не может быть создан.
4) Используй функцию file:write(data), чтобы записать данные в файл
file:write("NewData")Не забудь закрыть файл после окончания записи. Это уже не просто правило хорошего тона, а суровая необходимость.
-
5
-
-
Эти функции будут вызываться приложением или системой?Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту ) -
-
Круто.
Я бы пиксель сделал квадратным.
А еще за пикселем можно гаснущий след рисовать.
-
1
-
-
У меня предложение. Выделить отдельный раздел форума под темы "Пишу офигенную операционку" и все подобные темы складывать туда. Просто, чтоб каждый операционнописатель знал, что он не одинок.
-
9
-
-
А если сгенерировать обычный мир, а потом произвести замену всех известных руд на коблу?
-
а хотя я передумал) спасибо за сылку
Так погибают замыслы с размахом,
В начале обещавшие успех,
От долгих отлагательств.
-
* Кооперативная многозадачность потребует обязательной доработки запускаемых программ. А в случае подвисания одной из программ подвиснет вся система.
Программы, запускаемые многозадачно, вовсе не обязаны быть ориентированными на многозадачность. Здесь я показывал вариант как можно реализовать такую многозадачность. Вот с подвисанием согласен.
* Для совместного использования оборудования запускаемые программы тоже потребуют доработки, а в отдельных случаях такая доработка невозможна.
Оборудование доступно программам через объект component. Если система подменит этот объект своим, то она сможет разруливать аппаратные коллизии. Например, если одна программа использует редстоун-карту, то другой программе можно не давать к ней доступ.
-
1
-
-
Похоже проект настолько секретный, что тему проекта оглашать нельзя, а исполнители не будут знать чем они будут заниматься.
Я, пожалуй, откажусь. Вдруг по завершении проекта исполнителей ликвидируют.
-
5
-
-
Можно разделить функцию на две:
local function kek1() print('Привет') -- print надо выполнить один раз end local function kek2() if rs.getBundledInput(1,1) > 0 then rs.setBundledOutput(1,5,255) else rs.setBundledOutput(1,5,0) end end kek1() while true do kek2() os.sleep(0.5) endА можно воспользоваться флагом
local flag=true local function kek() if flag then print('Привет') -- print надо выполнить один раз flag=false end if rs.getBundledInput(1,1) > 0 then rs.setBundledOutput(1,5,255) else rs.setBundledOutput(1,5,0) end end while true do kek() os.sleep(0.5) end-
1
-
-
Так я все таки не понял. Функция должна выполняться один раз или в цикле? Если один раз, то зачем ее в цикл ставить?
-
Почему же? Сколько раз выполнится функция в цикле, столько же раз выполнится и print
-
А чего сам не разрабатываешь, если одного человека достаточно? Или это одного не хватает?
-
1
-
-
А как load задать окружение, и как ей пользоваться?
1) Создаешь каким либо образом строку, содержащую луа-код
script="a=1 b=2 print(a+b+с)"
2) создаешь окружение выполнения этого кода. Окружение это просто таблица с функциями и переменными, которые могут быть использованы твоим луа-кодом. В примере строчкой выше неопределенными являются функция print и переменная c. Определим их в окружении.
env={} env.c=3 env.print=printЕсли окружение оставить пустым (равняется nil), будет использовано глобальное окружение. Т.е. твоему коду будут доступны все определенные на данный момент глобальные функции и переменные.
3) вызываешь функцию load
code, reason = load(script, "", "", env)
Первым параметром передаешь сам код, последним - окружение. Второй параметр используется для формирования сообщения об ошибке, если такая будет. Третий, даже не знаю. Я оставляю его пустым.
Первое возвращаемое значение - функция, исполняющая код. Если оно равно nil, значит на этапе компиляции возникла ошибка. Сообщение об ошибке содержится во втором возвращаемом значении.
4) проверяешь результат компиляции и выполняешь скомпилированный код
if code then result=code() else print(reason) end
-
2
-


Разработка новой операционной системы. WinOS.
в Операционные системы
Опубликовано:
т.е. ты хочешь сказать, что когда рабочий стол не активен он полностью замораживается? А если с момента переключения на нем что то изменилось? Или приложения, открытые на неактивном столе, тоже приостанавливаются?