DC-SWAT Forum

Полная версия: Разработка блокнота для DreamShell
Вы просматриваете yпpощеннyю веpсию форума. Пеpейти к полной веpсии.
Страниц: 1 2
Сват, помоги!
Как сделать так чтоб после запуска команды notepad курсор переходил на следующую строку и ждал ввода с клавиатуры.
И как работать с кнопками?
Мдяяя, это самая сложная сторона из разработки блокнота который будет работать прямо в консоли DS, чесно говоря этот вариант не подойдет для больших объемов, так как буфер DS для ввода и вывода данных составляет 2кб:)
Хотя можно сделать и чтобы данные записывались в файл, когда превышается лимит буфера... и прокрутку таким образом тоже в принципе можно было бы замутить, но это уже потом...

Что для этого нужно, во первых, если ты будеш вводить что то в консоль, то в любом случае это будет использоваться как команда, но... сработает она когда реально произойдет выход из функции, то есть из запущенного скрипта, который в свою очередь управлялся функцией в DS...
Для этого можно удолить все написаное из буфера(записав все это в файл предварительно) функцией:
Код:
DS.conio_clear()
Таким образом очистятся буферы экрана и командной строки.
Но это уже после выхода из блокнота делать будет, для того чтобы все написаные строки не засчитались как команды:)
Думаем что делать с ожиданием ввода...
Вот например есть функция которая ждет нажатие любой кнопки клавиатуры:
Код:
DS.conio_getch()
Она возвращает число, которое в свою очередь означает нажатую клавишу...
Если нажата клавиша, то возвращается ascii кодировка нажатого символа...
С помощью функции:
Код:
DS.input_insertbuff(ascii сюда)
нажатая клавиша(буква, пробел, энтер) добавится в буфер...
Но зачем в принципе так заморачиваться, ведь все равно каждое нажатие добовляется в буфер и как ты спрашивал что бы типа поставить курсор на следущую строку и ждать ввода делается довольно просто... просто в цикл поставь фнкцию DS.conio_getch()
Вот только проблема есть с тем, что из буфера ты этого ничего не возьмеш потом:)Это я просто немного принципа объяснил:)
Тебе нужно это сохранять куда то постоянно, ведь такая фишка как ты делал в предыдущий раз с аргументами не проканает, думаю сам понимаеш почему:)
Тебе нужно сделать свой буфер и функцию которая запихнет нажатый символ в него, что то типа DS.input_insertbuff(ch)
но свое...
Ну это я тебе пока писать не буду, попробуй сам, если будут проблемы то пиши конечно помогу...
Хм... Спасибо...
Будем думать...
Сват допиши сам блокнот! Я не могу... =(
Ну что именно у тебя не получается ты лучше скажи, а не сразу сдавайся:)
Я не понимаю в луа принцип создания и работы функций. Да к томуже
нужны примеры разные чтоб мог смотреть и понимать синтаксис луа.
Мануала нормального нет под рукой!
Ты незнаеш как в луа сделать функцию и использовать ее?
Да так же как в JS, только в JS граници функции обозначаются фигурными скобками, а в lua словом end
Вот например:

Код:
-- Объявляем функцию.

function test(param1, param2)

-- Я создал функцию в которую можно задавать 2 параметра,
-- то есть переменные.
-- Здесь с ними мы издеваемся.

local param3 = param1+param2

-- Возвращаем функции третий параметр.
return param3

-- Конец функции
end


-- Используем ее.

local p1 = 1
local p2 = 2

local tst = test(p1, p2)

print(tst)

-- На экране появится цифра 3

Параметров можно делать сколько хочеш, можно вообще не делать, если не требуется функции что то давать...

Вот я изучал синтаксис луа по тому учебнику который я выложил на страничке DS:)
Еще смотрел на скрипты в DC Playa, для утверждения:)они ведь тоже на lua написаны...

Что то еще тебе не понятно?
Вот смотри пример, конечно это только основа...

Код:
local ibuff = {}
local bc = 0
local exit = 1
local bufsiz = 10

while exit do

ibuff[bc] = DS.getchar();

-- Если нажата кнопка f обрываем цикл
if ibuff[bc] == 102 then break end

-- Если превышаем размер буфера, обрываем цикл
-- Хотя тут то и нужно осуществлять запись в файл...
if bc == bufsiz then break end

-- Если все ок :) продолжаем :)
bc = bc + 1

end


for bcp = 0, bufsiz do
print(ibuff[bcp])
end

Я использовал функцию DS.getchar() так как она есть в DSS, чтобы проще проверять было мне:)в принципе я думаю в DS она тоже будет нормально работать...

Вот тебе еще придется делать какой то конвертор из символов указателей на клавишу в букву...
Так как в бувере сохранается этот указатель...
После каждого нажатия на какую либо клавишу, ее символ сохраняется в ячейку списка ibuff
Ну саму системы ты передаеш как надо, это просто пример...
И сделеш конвертор буфера, что то вроде:
Код:
if ibuff[bc] == 102 then
buf[bc]="f"
end
А лучше уже строками хранить нормальные данные... ну вообще думай как тебе удобней будет...
Пишет ошибка и ссылается на это
while exit do
Это где в DS или DSS?
Ты может одну из end не захватил:)
в DSS скрипт не менял просто скопировал
Все работает!
Извини
Сдам сессию и займусь блокнотом =)
Как реализовать прокрутку текста в дримшелл?
Гмм... Это сложно но можно:)))
Как видиш я в консоли то не сделал такого:)
Тебе вообщем нужно на какие то кнопки, назначить эту прокрутку и когда на них нажимают, в твоем буфере будут смещаться данные и выводится на экран заново...
Для этого тебе придется сделать буфер основной и тот который будет выводится на экран(не большой, столько, сколько можно на экране показать).
Сделаей пару переменных или структуру которая будет хранить координаты скролла, и когда юзер жмет на то чтобы прокрутить вверх например, то в буфер экрана передаются те данные, которые находятся выше точки скролла, причем столько, сколько влезит на экран(больше нет сысла делать) и потом выводить все данные буфера экрана в саму консоль DS.
Но это только мысль о прокрутке и то не до конца:)
А ведь еще неплохо было бы сделать чтобы можно было перемещать курсор по буферу, чтобы можно было менять какие то строки если захочеш, для этого в принципе таже мысль, но только тебе нужно запоминать координаты курсора и сделать более продвинутую систему обновления данных в главном буфере...
Вообщем голову свою ты нагрееш хорошенько;)
Большое спасибо.
Я так себе и представлял =)
На днях сяду писать...
Кстати может у кого прога есть такая:
Нажал на клавишу и перед тобой ее ASCII код?
Сват, нужна помощь!!!!
Не получается сделать сделать прокрутку.
Это тяжко для меня после праздников:)
Я вроде давал тебе какие то намеки по этому поводу...
Ты скажи что именно... а то так... это надо мне всю идею придумать и расписать:)
...
Страниц: 1 2
URL ссылки