Вверх ↑
Этот топик читают: Гость
Ответов: 4621
Рейтинг: 746
#121: 2013-08-06 15:19:48 ЛС | профиль | цитата

#hws
if (isset(my_test_var))
// Если компонент существует
.....
else
// Компонента не существует
gvar(my_test_var)
//my_test_var = 1 // возможно, нужно присвоить значение переменной
......
end
карма: 26

1
Голосовали:LastLeader
Ответов: 463
Рейтинг: 9
#122: 2015-12-13 23:08:40 ЛС | профиль | цитата
приветствую !
тема еще актуальна?
Подскажите советом, хочу прикрутить TCL/TK, компонентов уйму можно слямзить в VTCL, компилитор будет edit? А примеры откуда лучше брать из пакета WEB или Питона(поскольку он тоже скриптовый)?

карма: 0

0
Ответов: 4621
Рейтинг: 746
#123: 2015-12-14 11:28:10 ЛС | профиль | цитата
Не знаком с TCL. Пробуй как в туториале создать заготовку пакета, а дальше будешь видеть, что нужно сделать ещё. Что такое "компилитор edit" не знаю. Но компилятор Copy тебе будет нужен, чтобы видеть, какой код у тебя получается на выходе.
Можешь глянуть также на пакет AVISynth как менее объемный, чем WEB и Питон. Структуру своего пакета тебе придется придумывать самому, а в другие пакеты заглядывать в поисках какого-либо решения.

Редактировалось 1 раз(а), последний 2018-01-22 12:30:59
карма: 26

1
Голосовали:ajaxii
Ответов: 463
Рейтинг: 9
#124: 2015-12-14 15:05:49 ЛС | профиль | цитата
Netspirit, спасибо!
TCL/Tk - https://ru.wikipedia.org/wiki/Tcl
copy конечно, просто вечно эти слова путаю.
спасибо за направление
Это мультиплатформенное решение, на мой взгляд, ибо тикль даже в ОС андроиде уже есть.
карма: 0

0
Ответов: 258
Рейтинг: -27
#125: 2015-12-28 10:26:45 ЛС | профиль | цитата
Netspirit спс
карма: 0

0
Ответов: 4621
Рейтинг: 746
#126: 2015-12-28 13:02:10 ЛС | профиль | цитата


#hws
//================
// В главном компоненте
//================

func doStart()
gvar(BLK_GLOBALS, BLK_FUNC, BLK_MAIN, BLK_LOCALS) // Глобальные переменные


BLK_GLOBALS = block.reggen() // Блок глоб. переменных целевого языка
BLK_FUNC = block.reggen() // Блок функций целевого языка
BLK_MAIN = block.reggen() // Блок для точки входа


//--------------------------
fvar(tmp_locals, tmp_func)

tmp_func = block.reggen() // Создали временный блок для тела точки входа
tmp_locals = block.reggen() // Создали временный блок для локальных переменных

BLK_LOCALS = tmp_locals // В глобальную переменную BLK_LOCALS занесли имя текущего блока локальных переменных
// Теперь любой компонент, вызвавший block.select(BLK_LOCALS) сможет писать в этот блок локальных переменных

block.select(tmp_func) // Установили текущим временный блок. Все компоненты после события onStart пишут код сюда
event(onStart)

// Выводим содержимое временного блока в блок точки входа
block.select(BLK_MAIN)
block.copyhere(tmp_locals) // Выводим содержимое локальных переменных
block.delete(tmp_locals) // Удаляем блок - мы его вывели куда нужно, больше он не понадобится (без удаления будет выведен в конец файла)
block.copyhere(tmp_func) // Выводим содержимое тела функции
block.delete(tmp_func) // Удаляем
//--------------------------
end


//================
// В других компонентах
//================

func doMyMethod(_data)
fvar(old, tmp_func, tmp_locals)


//--------------------------
tmp_func = block.reggen() // Создали временный блок для тела функции
tmp_locals = block.reggen() // Создали временный блок для локальных переменных


BLK_LOCALS = tmp_locals // В глобальную переменную BLK_LOCALS занесли имя текущего блока локальных переменных
// Теперь любой компонент, вызвавший block.select(BLK_LOCALS) сможет писать в этот блок локальных переменных

old = block.select(tmp_func) // Установили текущим временный блок функции. Все компоненты после события onMyEvent пишут код сюда
event(onMyEvent) // Вызвали событие. Компоненты отработали.

// Выводим содержимое созданной функции в блок функций BLK_FUNC
block.select(BLK_FUNC)
println('function MyFunc takes nothing returns nothing')
block.copyhere(tmp_locals) // Выводим содержимое локальных переменных
block.delete(tmp_locals) // Удаляем блок - мы его вывели куда нужно, больше он не понадобится (без удаления будет выведен в конец файла)
block.copyhere(tmp_func) // Выводим содержимое тела функции
block.delete(tmp_func) // Удаляем
println('endfunction')

//--------------------------


block.select(old)
end
[offtop]И веди себя по-приличнее. Желания помогать нет никакого. Рейтинг свой не зря заработал.[/offtop]
карма: 26

1
Голосовали:Hart
Ответов: 178
Рейтинг: 9
#127: 2015-12-28 13:15:57 ЛС | профиль | цитата
Походу не просто так игнорят просьбы, хотя все ссылки по интересующему вопросу я выложил.
------------ Дoбавленo в 12.40:
Хотя файл с коментами выложили.
карма: 0

0
Ответов: 258
Рейтинг: -27
#128: 2015-12-28 14:06:43 ЛС | профиль | цитата
Netspirit спс, теперь думаю практически все понял. Но как-то получаются локальные переменные с одинаковыми именами.
Что, не могли сразу так туториал оформить? С первого раза ясно все.

Последний вопрос. Как генерировать имя переменной так, что бы не было такой же?
Думаю можно создать int переменную и постоянно увеличивать что бы не было повторяющихся названий ? Или может есть какая-нибудь функция-генератор имен?
карма: 0

0
Ответов: 4621
Рейтинг: 746
#129: 2015-12-28 14:27:29 ЛС | профиль | цитата
println(myvar, ' = 125;')
Выведет в код
myvarX = 125;
где X - это идентификатор текущего компонента. В туториале есть про это.

А почему в туториал не добавил - потому, что у каждого целевого языка свои особенности. И давать конкретный выше приведенный код смысла не имеет (точнее, имел бы, но только для тебя, но не для остальных). Всем не угодишь.
карма: 26

0
Ответов: 258
Рейтинг: -27
#130: 2015-12-28 14:30:30 ЛС | профиль | цитата
Не, я имел ввиду что имя локальной переменной одинаковое будет если подряд вызвать 2 компонента который выводит новую локалку и вызывает функцию.

Так может есть функция генерирующая постоянно новое имя?

Можно для этого reggen использовать? Или лучше глобальную переменную типа INT а потом name+ID выводить если нужно.
карма: 0

0
Ответов: 4621
Рейтинг: 746
#131: 2015-12-28 14:34:50 ЛС | профиль | цитата
Локальная переменная (fvar) потому и называется локальная, что видна только внутри данной функции данного экземпляра компонента. Не нужны там уникальные имена.
Переменные, объявленные по var, видны во всех функциях данного экземпляра компонента. gvar видны всюду.
карма: 26

0
Ответов: 258
Рейтинг: -27
#132: 2015-12-28 14:37:59 ЛС | профиль | цитата
Я имею ввиду вывод в скрипт локальной переменной по правилам языка, а не локальные переменные FCTG.

Я по этому до этого и не мог никак разобраться в FTCG т.к не понимал как блоки делать временные для каждой функции. Теперь все ясно.


Например компонент создает локальную переменную "local string name = "Hiasm""

Если вызывать еще один такой компонент то будет уже 2 локальных переменных на выходе с таким же именем "name" а мне нужно что бы было:

local string name1 = "Скрипт сгенерирован с помощью "
local string name2 = " с "
local string name3 = " помощью "
local string name4 = " HiAsm! "
карма: 0

0
Ответов: 4621
Рейтинг: 746
#133: 2015-12-28 14:53:58 ЛС | профиль | цитата
Ну, а о чем я выше сказал???
println('local string ', name, ' = ', "Скрипт сгенерирован с помощью ")
Ты б хоть пробовал, что пишут. Это также говорит о том, что недостаточный туториал - не главная твоя проблема.
карма: 26

0
Ответов: 258
Рейтинг: -27
#134: 2015-12-28 14:57:45 ЛС | профиль | цитата
ну вот это выведет в текст

local string name = "Скрипт сгенерирован с помощью "

А если такой компонент 2 раза подряд вызвать получится две строки

local string name = "Скрипт сгенерирован с помощью "
local string name = "Скрипт сгенерирован с помощью "

(Имя name с таким же названием)

Я понял, можно через глобальную переменную INT добавлять к названию ID.
Но может есть готовая функция кодогенератора которая выведет имя которое точно не будет повторяться несколько раз? reggen для такого не подходит?


Ну ладно это не проблема, спасибо за помощь. Вопросов больше нет.
карма: 0

0
Ответов: 4621
Рейтинг: 746
#135: 2015-12-28 15:02:13 ЛС | профиль | цитата
Объяви переменную
var(cntr)
cntr = 1

И при каждом вызове делай:
println('local string name', cntr, ' = ', "Скрипт сгенерирован с помощью ")
cntr = cntr + 1

карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)