DC-SWAT Forum
Разработка блокнота для DreamShell - Версия для печати

+- DC-SWAT Forum (http://www.dc-swat.ru/forum)
+-- Форум: DreamShell (/forum-3.html)
+--- Форум: Programming (/forum-28.html)
+--- Тема: Разработка блокнота для DreamShell (/thread-923.html)

Страниц: 1 2


Разработка блокнота для DreamShell - zaero - 08.10.2005 21:24

Сват, помоги!
Как сделать так чтоб после запуска команды notepad курсор переходил на следующую строку и ждал ввода с клавиатуры.
И как работать с кнопками?


Разработка блокнота для DreamShell - SWAT - 08.10.2005 21:55

Мдяяя, это самая сложная сторона из разработки блокнота который будет работать прямо в консоли DS, чесно говоря этот вариант не подойдет для больших объемов, так как буфер DS для ввода и вывода данных составляет 2кб:)
Хотя можно сделать и чтобы данные записывались в файл, когда превышается лимит буфера... и прокрутку таким образом тоже в принципе можно было бы замутить, но это уже потом...

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


Разработка блокнота для DreamShell - zaero - 08.10.2005 22:01

Хм... Спасибо...
Будем думать...


Разработка блокнота для DreamShell - zaero - 09.10.2005 00:16

Сват допиши сам блокнот! Я не могу... =(


Разработка блокнота для DreamShell - SWAT - 09.10.2005 11:41

Ну что именно у тебя не получается ты лучше скажи, а не сразу сдавайся:)


Разработка блокнота для DreamShell - zaero - 09.10.2005 13:05

Я не понимаю в луа принцип создания и работы функций. Да к томуже
нужны примеры разные чтоб мог смотреть и понимать синтаксис луа.
Мануала нормального нет под рукой!


Разработка блокнота для DreamShell - SWAT - 09.10.2005 13:37

Ты незнаеш как в луа сделать функцию и использовать ее?
Да так же как в 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 написаны...

Что то еще тебе не понятно?


Разработка блокнота для DreamShell - SWAT - 09.10.2005 16:47

Вот смотри пример, конечно это только основа...

Код:
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
А лучше уже строками хранить нормальные данные... ну вообще думай как тебе удобней будет...


Разработка блокнота для DreamShell - zaero - 11.10.2005 17:52

Пишет ошибка и ссылается на это
while exit do


Разработка блокнота для DreamShell - SWAT - 11.10.2005 20:06

Это где в DS или DSS?
Ты может одну из end не захватил:)


Разработка блокнота для DreamShell - zaero - 11.10.2005 21:48

в DSS скрипт не менял просто скопировал


Разработка блокнота для DreamShell - zaero - 11.10.2005 22:00

Все работает!
Извини


Разработка блокнота для DreamShell - zaero - 01.11.2005 19:14

Сдам сессию и займусь блокнотом =)



Разработка блокнота для DreamShell - zaero - 23.11.2005 02:55

Как реализовать прокрутку текста в дримшелл?


Разработка блокнота для DreamShell - SWAT - 23.11.2005 19:36

Гмм... Это сложно но можно:)))
Как видиш я в консоли то не сделал такого:)
Тебе вообщем нужно на какие то кнопки, назначить эту прокрутку и когда на них нажимают, в твоем буфере будут смещаться данные и выводится на экран заново...
Для этого тебе придется сделать буфер основной и тот который будет выводится на экран(не большой, столько, сколько можно на экране показать).
Сделаей пару переменных или структуру которая будет хранить координаты скролла, и когда юзер жмет на то чтобы прокрутить вверх например, то в буфер экрана передаются те данные, которые находятся выше точки скролла, причем столько, сколько влезит на экран(больше нет сысла делать) и потом выводить все данные буфера экрана в саму консоль DS.
Но это только мысль о прокрутке и то не до конца:)
А ведь еще неплохо было бы сделать чтобы можно было перемещать курсор по буферу, чтобы можно было менять какие то строки если захочеш, для этого в принципе таже мысль, но только тебе нужно запоминать координаты курсора и сделать более продвинутую систему обновления данных в главном буфере...
Вообщем голову свою ты нагрееш хорошенько;)


Разработка блокнота для DreamShell - zaero - 24.11.2005 19:14

Большое спасибо.
Я так себе и представлял =)
На днях сяду писать...


Разработка блокнота для DreamShell - zaero - 24.11.2005 19:36

Кстати может у кого прога есть такая:
Нажал на клавишу и перед тобой ее ASCII код?


Разработка блокнота для DreamShell - zaero - 04.01.2006 03:33

Сват, нужна помощь!!!!
Не получается сделать сделать прокрутку.


Разработка блокнота для DreamShell - SWAT - 06.01.2006 16:35

Это тяжко для меня после праздников:)
Я вроде давал тебе какие то намеки по этому поводу...
Ты скажи что именно... а то так... это надо мне всю идею придумать и расписать:)


Разработка блокнота для DreamShell - honey_rock - 08.01.2006 05:51

...