DC-SWAT Forum

Полная версия: Вопроссы по Lua и SDL
Вы просматриваете yпpощеннyю веpсию форума. Пеpейти к полной веpсии.
Вобщем такой вопрос:
У меня есть прога написанная на Луа под консоль. Нельзя ли как нибудь сделать такую фишку, чтоб дримшелл не ждала окончания ввода? Т.е. под окончанием ввода я имею ввиду его подтверждение клавишей ентер. Мне надо на определенную группу клавишь назначить управление...
Ну а в чем проблема то? При выполнении какой либо задачи, консоли пофиг на что ты жмешь в это время...
Или я что то не до конца понял?
вот например тут:

Код:
while exit do

  ibuff[bc] = DS.getchar();

if ibuff[bc] == 102 then break end

elseif bc == bufsizt then
fout=assert(io.open(argv[2],"w"))
fout:write(argv[3])
io.close(fout)
print("Saved\n")
end

else bc = bc + 1 end

После того как я что-то напишу в консоле, то требуется нажатие ентер. Т.к. по другому я не могу подтвердить ввод... Например как у казано в примере то после нажатия 102 кода клавиши (вроде консоль, тильда) скрипт выполнится послетого как я подтвержу ентером. А мне надо чтоб я нажал сразу на клавишу и он выполнился..

ПС мудренно получилось... Если не совсем понял, то в аське тебя выловлю и наживую поговорим)) Верней попытаюсь обьяснить...
Ээм... ты хочеш назначить выполнение скрипта на отдельную клавишу?
То есть стоит се консоль стоит, ты ниче там не пишеш, нашимаеш кнопку и бах, выполился какой то скрипт?
Или я опять не понял?:))))
Я хочу чтоб привыполнении скпипта, когда нажмешь клавишу "2" то писалось, например, в консоле "Вы нажали клавишу 2", но чтоб оно сразу так происходило. А то приходится после нажатия на клавишу "2" еше жать и ентер.
А ну теперь понял:)
Вот накидал тебе пример, попробуй.


Код:
-- Урок управления событиями клавиатуры с помощью SDL.


-- Простая функция обработки событий клавиатуры.
function handle_event(event)

if event.type == SDL.SDL_KEYDOWN then

local sym = event.key.keysym.sym

if sym == SDL.SDLK_q or sym == SDL.SDLK_ESCAPE then
print("Exit");

elseif sym == SDL.SDLK_s then
print("Pressed - s");
end

elseif event.type == SDL.SDL_QUIT then
print("SDL quit");
end
end




function App_Loop_Iteration()



event_buffer = SDL.SDL_Event_new();


while SDL.SDL_PollEvent(event_buffer) ~= 0 do
handle_event(event_buffer)
end


-- Тут будет что то делать твой скрипт.

end




local action = 1

-- Главный цикл всего скрипта
function AppRun()

while action == 1 do
App_Loop_Iteration()
end
end

AppRun()
Кстати я это практически просто тупо взял и выдернул из исходников простой игрушки на lua и SDL, исходники которой я выкладывал уже давно в теме по исходникам:)
Цитата:которой я выкладывал уже давно в теме по исходникам
Епт! Как же я пропустил? Мля... Я себе все нервы измотал...

ПС прикольно что на сдл)))
ПСС респ)

еще не проверял. Т.к. пришел с Дня встречи выпускников. Ик ...
Люди нужна помощь! Как писать lua скрипты в dreamshelle? например я делаю так когда загрузится dreamshell нажимаю f1 потом пишу скрипт и сохраняю в ram клавишей print screen. в ram появятся ds_shot.txt как его переконвертировать чтобы он был ds_shot.lua. у меня dreamshell NG v3.0.0.500 beta. если я делаю чтото неправильно то объясните как делать правильно.заранее благодарен.
Я в шоке просто, прогресс!:)))
Я сделал так чтобы можно было сохранять скрин экрана в текстовом виде, а Genrih умудряется таким способом использовать экран DreamShell как текстовый редактор:))))

Скачай себе последнюю версию, она лучше твоей.

Теперь по вопросу.
Как я поял ты хочеш писать скрипты(еще что то) через консоль DS?:)
Это можно сделать.
Но есть тут небольшая проблемка, неполучится полностью очистить экран чтобы небыло лишних символов, которые бы помешали синтаксису скрипта и он вывалился в ошибку. Конвертировать то ничего ненада, этот файл(ds_shot.txt) по идее можно было так и запускать, но, лишние символы все косячат(типа перед каждой строкой D$ будет).
По идее это можно осуществить небольшим модулем, но тебе тогда точно придется новую версию качать.
Хотя это было и в lua предусмотрено, но там я заметил косячек, а вот в модулях вроде все ок.
Основная мысль в том, что нужно добраться до главного массива с настройками DreamShell, чтобы можно было работать с переменной хранящей данные экрана. Можно было бы и полностью очистить или взять все что нужно из нее самим и что самое главное потом с этим работать программно. Ну и написать немного управления данными.
Чтобы выкидывались лишние символы и сохранялось все в один файл, постепенно, даже после нескольких нажатий на какую нибудь кнопку для сохранения текста, не отрываясь от своей писанины, чтобы не сохранять каждый скрин экрана по отдельности и соединять их потом.
Скачай новую версию, я накатаю тебе такой модуль и дам исходники всем, для примера работы. Ну а дальше по желанию и до текстового редактора не далеко:)
Дальше можно было бы сделать скроллинг свой, было бы удобней работать, ну это оставлю просто идеей для кого то.


А вообще еще можно сделать просто модуль - обновление, в котором исправить косяк в lua функции DS.GetDSet(); и потом все это можно будет осуществить на lua самому. Просто если редактор будет написан как модуль, то будет больше возможностей для дальнейшей разработки, ведь не на скрипте пишеш... Хотя и так возможностей хоть *опой жуй, толку то:))) интересно когда нибудь кто то воспользуется ее возможностями хотябы на 50%.
Пасибо SWAT буду качать новою версию!
и еще такой вопрос, SWAT у меня записан dscript в ram как его можно сохранять на vmu? и все это в dreamshelle. а еще про lua script при его запуске появятся ds_error: lua: error at management chunk! и точно также при запуске блокнота на ds 500.beta из-за чего это может быть ? Новую версию скачаю не раньше четверга.А и еще в каком 7z или gz aрхиве лежит dreamshell образ для nero eсли этот образ есть там?
Любой файл можно сохранить на VMU просто тупо скопировав его туда командой cp:)
Но если этот файл не специализированный VMU файл, то во всяческих КП меню ты будеш видеть типа что этот файл косяченный(хотя на самом деле он просто обычный) и ничего кроме удаления через эти меню ты не сделаеш.
Для того чтобы небыло таких недопониманий, существует команда vmcp
Набери ее в консоли без флагов и увидиш как ей пользоваться, там все просто, думаю разберешся сам.
Если не понятно будет, я тебе дам примеры как все это сделать.

Скрипты вываливающиеся в ошибку, просто небыли переделаны под более новую версию, они остались со старой, поэтому могут не запускаться.

Последняя версия DreamShell лежит в 2х видах архивов. Это 7zip и bzip2.
Качай любой, они одинаковы по содержанию, просто сначало выложил в 7zip, а потом попросили люди с dcemulation чтобы я сделал архив который можно распаковать из под linux/unix
Вот только образа там нет, тебе придется самому диск бутить, там лежат файлы для диска, в принципе сделать selfboot диск с DreamShell просто, ненужно никаких хаков и т.п. любой прогой мона сделать. В этом даже есть свой плюс, можеш накидать на диск еще то что тебе нужно:)
2swat
видел в твоих исходниках файл notepad.c (блокнот)
он работает???
А ты смотрел что в нем?:))) У него размер 586 байт:))) это только задумка:)там практически ничего нет, просто пустая страничка GUI.
Да в GUI оболочке вообще в принципе все только задумка и работает кое что как небольшой пример, функциональности там никакой, некогда делать было это все.
Я на то и выложил исходники модуля GUI оболочки, чтобы кто то его поковырял хоть:)
Блокнот я щас пытаюсь сделать отдельным модулем:)не в GUI а под консоль.
Цитата:А ты смотрел что в нем?
видел
там как я понял только форма, самого блокнота там нет.
вопрос то в чем запускается-ли она в GUI МОДУЛЕ ДРИМШЕЛЛ и как её запустить (на что жать надо:))
Ну на иконку блокнота кликаеш и переходиш на эту страничку:)))
Кстати сделал альфа версию текстового редактора. Сделал конечно на скорую руку, по идее нада все нафиг переделывать, просто щас немогу тестить на дриме, только в чанке, а в чанке смог проверить только открытие файлов в нем и сохранение, это прошло успешно, правда нада бы кое что поправить с невидимыми символами:)
Всю навигацию и принцип редактирования проверить не смог:(т.к. клаву не поддерживает чанка, а на вируальной хоть и можно визуально потыкать, а в буфере ничего не будет, только на экране.
Выложил на скачку на страничке DreamShell вместе с исходниками(и настроеный make), мож кто возьмется на доработку.
URL ссылки