Школа редактирования скриптов. - Страница 2 - Форум
Пользовательского поиска
Суббота, 25.03.2017, 12:35
Приветствую Вас Гость | RSS
Главная | Школа редактирования скриптов. - Страница 2 - Форум | Регистрация | Вход
Меню Проекта
Форма входа
Логин:
Пароль:
Мы Рекомендуем:
Мнение Общественности
Что для вас предпочтительней?
1. Настроить Мультизагрузку по инструкциям.
2. Скачать готовый проект по частям.
Всего ответов: 3741
Статистика
GreenFlash
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 3«123»
Модератор форума: Sh1td0wn 
Форум » Мультизагрузочная флешка » Общий » Школа редактирования скриптов. (Тут учат создавать и редактировать свои скрипты inc.)
Школа редактирования скриптов.
BEGFRAETДата: Среда, 26.01.2011, 17:23 | Сообщение # 1
Неизвестный
Группа: Проверенные
Сообщений: 13
Репутация: 4
Статус: Отсутствует
Школа редактирования скриптов

Приветствую всех в этой теме.Я хочу вас научить редактировать и создавать свои скрипты для gfxboot формата inc.

Вам известно, что inc скрипты отвечают за многие вещи в вашей теме, так давайте разберём некоторые из них.

Quote (BEGFRAET)
Правила этой темы включают:

Описание языка,
используемого в скриптах для gfxboot

ПОСМОТРЕТЬ
справочный файл
gfxboot.html

Тема будет продвигаться за счет коллектива: http://rasprus.at.ua/ и всех других пользователей, которые захотели поделиться своими знаниями.

Сообщение отредактировал BEGFRAET - Пятница, 28.01.2011, 17:14
 
ded2007Дата: Среда, 16.02.2011, 16:58 | Сообщение # 16
Профессионал
Группа: Проверенные
Сообщений: 595
Репутация: 80
Статус: Отсутствует
hosco, Ваша версия сильно отличается от тех, которые есть у меня. Поэтому я не могу провести эксперимент, чтобы убедиться, что ничего не упустил. А на Вашей задаче я бы хотел построить "урок". Давайте сделаем так:
Сначала я выложу свои соображения без пространных объяснений, потом Вы проверите и если все получится, то приступим к написанию урока.
Итак, мои предложения:
1. Файл main.inc
- строка 80
currentfont exch font.large setfont show setfont
- нас интересует команда show
Это команда языка. Для отображения текста с выравниваем по правому краю или по центру необходимы свои скрипты, но чаще всего, они уже есть готовые в system.inc и называются /showright и /showcenter Проверяем. В вашем system.inc есть только первый из них.
2. Ладно, дописываем в system.inc следующий скрипт:
Code

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Show string centered.
%
% ( string ) ==> ( )
%
/showcenter {
     dup strsize pop 2 div neg 0 rmoveto show
} def

3. Возвращаемся к 80 строке main.inc и меняем ее на следующую
currentfont exch font.large setfont menu.bar.width 1 shr 0 rmoveto showcenter setfont
4. Теперь 133 строка main.inc такая же как 80-я
currentfont exch font.large setfont show setfont
ее меняем ее на такую же
currentfont exch font.large setfont menu.bar.width 1 shr 0 rmoveto showcenter setfont
5. Компилируем и проверяем. Если что-то не так, то заархивируйте всю папку со скриптами и выкладывайте сюда. Будем искать wink


@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ

Сообщение отредактировал ded2007 - Среда, 16.02.2011, 20:03
 
hoscoДата: Среда, 16.02.2011, 17:30 | Сообщение # 17
Неизвестный
Группа: Пользователи
Сообщений: 6
Репутация: 0
Статус: Отсутствует
Всё заработало (см. скриншот), теперь нужно чтобы курсор тоже отцентровался, а то как-то не эстетично smile
Прикрепления: 0201372.png(498Kb)
 
ded2007Дата: Среда, 16.02.2011, 18:41 | Сообщение # 18
Профессионал
Группа: Проверенные
Сообщений: 595
Репутация: 80
Статус: Отсутствует
Quote (hosco)
Всё заработало (см. скриншот), теперь нужно чтобы курсор тоже отцентровался, а то как-то не эстетично smile
В вашем common.inc в 409 строке указано смещение от края полоски бара
/menu.text.xofs 10 def
Попробуйте указать 0 wink

Там еще в алгоритме изменения (?) длины полоски бара. У Вас постоянная длина или на длинных/коротких текстах меняется?


@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ

Сообщение отредактировал ded2007 - Среда, 16.02.2011, 18:45
 
hoscoДата: Четверг, 17.02.2011, 11:43 | Сообщение # 19
Неизвестный
Группа: Пользователи
Сообщений: 6
Репутация: 0
Статус: Отсутствует
Quote (ded2007)
Там еще в алгоритме изменения (?) длины полоски бара. У Вас постоянная длина или на длинных/коротких текстах меняется?

Ну по скриншоту видно, что постоянная, а где алгоритм я не в курсе. Что касается 409 строки - всё работает, курсор отцентрованый и постоянной длины (длины самой длинной строки).
 
ded2007Дата: Воскресенье, 20.02.2011, 12:33 | Сообщение # 20
Профессионал
Группа: Проверенные
Сообщений: 595
Репутация: 80
Статус: Отсутствует
Ура, нашей теме придали статус "ЗАКРЕПЛЕННАЯ"
loony vinsent loony

Может быть это поднимет "посещаемость" занятий rtfm , а то "преподы" грустят umnik

Примечание: В связи ограничениями движка форума, не всегда есть возможность редактировать и удалять устаревшие сообщения, поэтому при чтении делайте поправки на "лирические отступления", т.е. вклинивающиеся диалоги посетителей форума. wink



Оператор IF


Вспомним, что наш скриптовый язык, ориентирован на работу со стеком и рассмотрим

Операторы сравнения eq, ne, gt, ge, lt, le


[-] Часть 3. Формат команды if (ifelse)
Полный формат записи команды IF в нашем языке таков:
Code
условие {
           % действия при ИСТИННОСТИ условия
} {
           % действия при ЛОЖНОСТИ условия
} ifelse
% продолжение скрипта

или короткая форма, если не требуется специальных действий по ветке ELSE
Code
условие {
            % действия при ИСТИННОСТИ условия
} if
% продолжение скрипта

Еще раз напомню, что
- фигурные скобки выделяют целый блок команд, которые необходимо выполнить единовременно;
- фигурные скобки в обязательном порядке должны быть парными (Очень удобно если Ваш текстовый редактор подсвечивает парную скобку. Тогда видно и начало, и конец блока команд.)
- скобки обязательно с двух сторон обрамлять пробелами или "Enter"-ами. Вообще, в нашем языке, как правило, "лишние" пробелы могут быть только внутри кавычек. smile



@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ

Сообщение отредактировал ded2007 - Воскресенье, 20.02.2011, 13:24
 
ded2007Дата: Воскресенье, 20.02.2011, 13:45 | Сообщение # 21
Профессионал
Группа: Проверенные
Сообщений: 595
Репутация: 80
Статус: Отсутствует
О выводе на экран значений ЧИСЛОВЫХ переменных.

Мы уже сталкивались с выводом на экран ТЕСТОВЫХ строк (т.е. констант) или текстовых переменных.
Для этого служит команда show. А блок для вывода обычно выглядит так:

Code
x y moveto                    % преходим в нужную точку экрана
0x00ff00 setcolor                      % включаем нужный цвет
текст_или_переменная show   % выводим на экран

или короче, в одну строку
Code
x y moveto   0x00ff00 setcolor    текст_или_переменная show


Однако, если вы попробуете вывести на экран значение ЧИСЛОВОЙ константы или переменной, то, скорей всего, получите что-то типа ...
а после нажатия любой клавиши выйдите из gfxboot в текстовый режим grub4dos surprised
Чтобы не отвлекаться от простых тем, просто сформулируем для себя, что команда show работает только с текстом, а для вывода на экран числовой переменной, ее нужно предварительно перевести в текст = "Подготовить форматированный вывод".
В принципе, язык содержит необходимую для форматированного вывода команду. Это команда snprintf. Но.
Во-первых, эта команда форматирует любое количество переменных и любого типа, что явно осложнит ее детальный разбор.
Во-вторых, для ее работы необходим буфер, куда будет помещаться текст. Т.е. мы должны уметь выделять память нужного объема под еще не созданный текст
В-третьих, нужно задать "формат", т.е. указать выводить ли результат в десятичном или 16-тиричном виде, с разделителями или без и т.д.
Все это вызывает осложнения на стартовом уровне.
Поэтому:
- во-первых, воспользуемся модифицированной командой sprintf, которая приведена в описании snprintf и наличествует в system.inc
- во вторых, просто будем действовать по образцу, без особых подробностей "почему" и "как".

Итак:
1. Форматирование Числового значения к десятичному виду:
значение "%d" buf sprintf


Вывод цветов удобно осуществлять в 16-тиричном формате.
цвет "0x%06x" buf sprintf buf show
В этом примере показано, что в строку формата можно включать и простой текст (это приставка "0x" к числу. Кроме того, в этой же строке, значение из буфера тут же выводится на экран командой show.

При пользовании временным буфером команда длиннее.
/buf 8 string def цвет "0x%06x" buf sprintf buf show buf free

Прикрепления: 9222811.jpg(26Kb)


@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ

Сообщение отредактировал ded2007 - Воскресенье, 20.02.2011, 15:40
 
r-milvusДата: Воскресенье, 13.03.2011, 02:24 | Сообщение # 22
Неизвестный
Группа: Пользователи
Сообщений: 10
Репутация: 2
Статус: Отсутствует
Добавил в файл boot.config строку %% include ...
вроде скомпилировало
( пользовался @DED-LEGO@ довольно удобно!!!
За, что отдельное Спасибо!!
при компиляции писало including "мой скрипт")
Но почему то отдельно не запускается он совершенно...
Дело в том, что пробовал это всё дело в готовом скрипте от DED
там всё работало, потом повытаскивал в отдельный не хочет...
конечно, если нужно то выложу всё это...
просто тема действительно не очень активна)))
 
ded2007Дата: Воскресенье, 13.03.2011, 10:25 | Сообщение # 23
Профессионал
Группа: Проверенные
Сообщений: 595
Репутация: 80
Статус: Отсутствует
r-milvus, как Вы правильно определили команда
%% include имя_inc-файла_со_скриптами
используется для подключения целых модулей скриптов в процессе компиляции.
Ее не обязательно использовать в файле "boot.config", она может быть включена также в обычные inc-модули. Только следите за тем, чтобы команды %% include не попадали внутрь отдельных скриптов, а размещались в начале inc-модуля, между скриптами, или в конце


@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
 
r-milvusДата: Понедельник, 14.03.2011, 20:06 | Сообщение # 24
Неизвестный
Группа: Пользователи
Сообщений: 10
Репутация: 2
Статус: Отсутствует
ded2007, подскажите, что я упустил... smile
как и писал ранее мой скрипт, внутри вашего работает...
отдельно скомпилировал вроде в ядро, но не знаю, что не доработал...
сам он не работает!
и ещё, в определённый момент, ваша анимация продолжает работать, а логотипы уже нет... и моя анимация так-же cry
прикрепляю файлы, в rmb0008_1.inc вставленны внутри ваших мои, rmb это собранные в отдельный файл мои, ну и сама тема)))
да, хочу сказать, что в программировании, я мягко говоря 0)))
просто, есть непреодолимое любопытство!!)
всё, что написанно, изучалось по ходу, а в основном- методом проб и множества))) ошибок!)
Прикрепления: rmb.gz(122Kb) · My_scripts.7z(8Kb)
 
ded2007Дата: Вторник, 15.03.2011, 00:58 | Сообщение # 25
Профессионал
Группа: Проверенные
Сообщений: 595
Репутация: 80
Статус: Отсутствует
А где Ваши скрипты вызываются? По какому событию?
Если Вы хотите, чтобы скрипт отрабатывал в случае нажатия клавиши, то "ниточка" должна тянуться от скрипта с предопределенным именем KeyEvent
Если нужен периодический вызов до первого нажатия клавиш, по аналогии с таймером, то "ниточка" тянется от Timeout
Если же нужна периодическая отработка скрипта, но уже без таймаута, то "ниточка" тянется от Timerwink


@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
 
r-milvusДата: Вторник, 15.03.2011, 03:26 | Сообщение # 26
Неизвестный
Группа: Пользователи
Сообщений: 10
Репутация: 2
Статус: Отсутствует
Значительно проясняет ситуацию........
 
r-milvusДата: Вторник, 15.03.2011, 06:06 | Сообщение # 27
Неизвестный
Группа: Пользователи
Сообщений: 10
Репутация: 2
Статус: Отсутствует
вроде собрал раму, вот теперь не пойму, где сбиваю толи шрифт, толи прозрачность, а может и то и другое... в меню накладывается друг на друга (если перелистывается страничка, т.е. когда пунктов больше)
и всё равно, в определённый момент останавливается, сама по себе...???

Добавлено (15.03.2011, 06:06)
---------------------------------------------
Похоже, я тут один ученик happy biggrin biggrin

Прикрепления: My_scripts2.7z(17Kb)
 
ded2007Дата: Вторник, 15.03.2011, 11:24 | Сообщение # 28
Профессионал
Группа: Проверенные
Сообщений: 595
Репутация: 80
Статус: Отсутствует
Отслеживать позицию курсора, текущий цвет, текущую прозрачность, текущий шрифт и т.п. двольно муторно, особенно, когда вклиниваешься в чужой код. НО!
В этом нет необходимости! Сам язык предоставляет достаточно возможностей для запоминания в стеке часто используемых параметров на входе в какой-либо скрипт и последующего восстановления их по окончании работы скрипта.
Речь, в частности, идет о командах:
currentpoint, currenttransparency, currentcolor, currentfont и им подобных.

currentpoint - помещает в стек текущие координаты курсора (два числа!) X и Y. Для восстановления позиции курсора достаточно задействовать команду moveto (при условии, что уровень стека правильный),

currenttransparency - в стек помещается одно число - текущее значение прозрачности. Для восстановления достаточно задействовать settransparency,

currentcolor - запоминает в стеке текущий рабочий цвет. Восстанавливается командой setcolor,

currentfont - запоминаем текущий шрифт. Восстанавливаем командой setfont.


Мы уже отмечали для себя, общий вид простого скрипта
Code
/script_name {
        %...
        % код скрипта
        %...
} def

Теперь можем отметить "хитрости" для более сложных скриптов. Речь о скриптах, которые в своем теле могут изменить координаты курсора, цвет, прозрачность или шрифт.

Code
/script_name {
      % запомним в стеке ряд параметров
      currentpoint   currenttransparency  currentcolor currentfont

        %...
        % код скрипта
        %...

      % восстановим из стека запомненные параметры
      setfont   setcolor   settransparency   moveto
} def

Примечания:
1. Вы должны быть уверены, что по окончании скрипта уровень стека правильный. Т.е. сколько вы клали в стек, столько и должны были забрать. cool
2. Поскольку стековые операции работают по правилу "положил позже - лежит сверху (возьмешь раньше)", то порядок восстановления ОБРАТНЫЙ порядку помещения в стек. cry
3. В случае передачи через стек в скрипт параметров необходимо сначала их извлечь, а уже потом запоминать "текущее состояние". Аналогично, если Ваш скрипт возвращает результат через стек, то сначал нужно "восстановить исходное состояние", а уже потом помещать результат в стек. wacko
4. Не нужно просто копировать предложенный блок из скрипта в скрипт. Это только схема. Ведь если Ваш скрипт не меняет текущий цвет или шрифт, то и нет необходимости их запоминать и восстанавливать, т.е. некоторые команды можно поубирать. Угадайте какие wink


@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ

Сообщение отредактировал ded2007 - Вторник, 15.03.2011, 17:25
 
r-milvusДата: Вторник, 15.03.2011, 12:41 | Сообщение # 29
Неизвестный
Группа: Пользователи
Сообщений: 10
Репутация: 2
Статус: Отсутствует
Да, но вот запутался может, использовал я этот принцып... где-то не попал...
посмотрите пожалуйста, там пытался я это всё дело провернуть... мож в чём то другом проблема...
 
ded2007Дата: Вторник, 15.03.2011, 17:32 | Сообщение # 30
Профессионал
Группа: Проверенные
Сообщений: 595
Репутация: 80
Статус: Отсутствует
Вот начало Вашего скрипта
Code
/r.rmb.anim.osn {   
    r.rmb.anim.work 0 le { r.rmb.anim.prm } if   
    % запоминаем
    currenttransparency   currentpoint   currentcolor   currentimage

значит в конце скрипта должно быть в обратном порядке

Code

    % восстанавливаем
    setimage   setcolor   moveto   settransparency } def

а у Вас
setimage settransparency moveto setcolor } def

PS Аналогичная помарка (даже две) в r.rmb.anim.prm


@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ

Сообщение отредактировал ded2007 - Вторник, 15.03.2011, 17:45
 
Форум » Мультизагрузочная флешка » Общий » Школа редактирования скриптов. (Тут учат создавать и редактировать свои скрипты inc.)
Страница 2 из 3«123»
Поиск:
Чат

Copyright GreenFlash © 2017
Рейтинг@Mail.ru