Jump to content

    
Sign in to follow this  
Kluwer

Редактор tcl

Recommended Posts

Коллеги,

никто не порекомендует какой-нибудь редактор tcl-кода с возможностью объединения файлов в проект?

Я поясню. Есть большой tcl-скрипт, в к-ром надо разобраться, он разбит на кучу подскриптов, функций и постоянных. Вот хотелось бы не просто видеть текст в текущем файле а и при нажатии или наведении на, скажем, функцию или постоянную, видеть в выпадающем окне её значение, или, хотя бы, отсыл в файл где она определена. Ну, в общем, как в большинстве типовых сред программирования.

Share this post


Link to post
Share on other sites

Sublime text editor позволяет видеть структуру папок и значения переменных, добавленных в проект. Конкретно с TCL я много дела не имел, но вполне устраивает. Единственная проблема самого языка - запуск скриптов может осуществлятся с папки проекта, в то время, когда сами скрипты находятся в других папках: отсюда сложность задания путей, они будут ревалентны к проекту, а не к файлу скрапта. В любом случае попробуйте с обязательным добавлением HDLproject пакета. Возможно и подойдёт. Хотя мне интересно может ли тот же Visual Studio делать такие же фокусы

Share this post


Link to post
Share on other sites
3 часа назад, Nick_K сказал:

Единственная проблема самого языка - запуск скриптов может осуществлятся с папки проекта, в то время, когда сами скрипты находятся в других папках: отсюда сложность задания путей, они будут ревалентны к проекту, а не к файлу скрапта.

Путь можно определять в самом скрипте, запуская поиск и запоминая путь в переменной.

Либо определять папку в которой находится главный скрипт и лазить по соседним, если другие скрипты лежат в соседних папках.

Или я чего-то недопонял?

 

Share this post


Link to post
Share on other sites
2 minutes ago, wolfman said:

Путь можно определять в самом скрипте, запуская поиск и запоминая путь в переменной.

Либо определять папку в которой находится главный скрипт и лазить по соседним, если другие скрипты лежат в соседних папках.

Или я чего-то недопонял?

 

Всё верно. Но тут то и подвох - почти все известные мне редакторы при работе со ссылками на другие файлы (ссылки имеются ввиду относительные, а не абсолютные пути) отталкиваются от текущего файла. Но при этом процесс, который запускает данный скрипт находится в другой папке и соответственно все относительные ссылки для него будут недействительными.

Простой пример:

Древо файлов выглядит так:

my_project
	\-> project
		\-> work_files
			\-> device.xpr
	\-> tcl
		\-> main.tcl
		\-> package.tcl

Основной скрипт main.tcl для работы использует некоторые переменные в файле package.tcl. Но так как запускается основной проект device.xpr и можно получить доступ именно к папке проекта, все относительные пути в файле main.tcl будут иметь следующий синтаксис:

../../tcl/package.tcl

Но если начать редактировать в привычном редакторе файл main.tcl скрипты будут опускаться не в папку my_project, а ниже и пытаться там найти папку tcl которой там нет. Соответственно относительные пути будут вести вникуда и не будет возможности работать со ссылками, именами переменных (точнее определять где они инициализированы) и т.д.

Share this post


Link to post
Share on other sites

Приветствую!

9 minutes ago, Nick_K said:

все относительные пути в файле main.tcl будут иметь следующий синтаксис:

../../tcl/package.tcl

Ну так сделайте в начале main.tcl   

set DSN_ROOT [file normalize [file join [file dirname [info script]] ".."]]
...

И пляшите в путях от печки $::DSN_ROOT  -  $::DSN_ROOT/tcl/package.tcl

Удачи! Rob.

Share this post


Link to post
Share on other sites
4 minutes ago, RobFPGA said:

Ну так сделайте в начале main.tcl 

Так а мне то что? Я свои скрипты могу и с закрытыми глазами пропихнуть куда нужно :wink:

А вот редактор, который обращается по ссылкам может так и не сделать) Опять же мне не нужно ещё такого)

Share this post


Link to post
Share on other sites
On 11/22/2019 at 4:37 PM, RobFPGA said:

И пляшите в путях от печки $::DSN_ROOT  -  $::DSN_ROOT/tcl/package.tcl

Встаю на тропу познания себя волшебства скриптования. Хотел спросить, а что означает два двоеточия перед DSN_ROOT? Не встречал такой синтаксис. Остальное пытаюсь найти в help Vivado

UPD Ещё покопавшись нашёл, что это просто обозначение "здесь и сейчас". Но с какой целью оно применяется в скрипте непонятно. И кто такой инфо скрипт тоже

Share this post


Link to post
Share on other sites

Приветствую!

Это namespace  - $:: ... говорить что эта переменная определена в топе скрипта (global namespace). Удобно  когда  надо из внутри proc дергать глобальные переменные. 

info script возвращает  путь и имя выполняемого в данный момент скрипта

Удачи! Rob.

Share this post


Link to post
Share on other sites
53 minutes ago, RobFPGA said:

Приветствую!

Это namespace  - $:: ... говорить что эта переменная определена в топе скрипта (global namespace). Удобно  когда  надо из внутри proc дергать глобальные переменные. 

info script возвращает  путь и имя выполняемого в данный момент скрипта

Удачи! Rob.

То есть вначале выполнить некий main.tcl, а далее барахтаться в проекте?

Такой нюанс, если работать из-под IDE, как быть тогда? Придётся иметь некий namespaces_declaration.tcl, добавленный в сорсы и постоянно исполняемый с данными переменными

Share this post


Link to post
Share on other sites

Приветствую

49 minutes ago, Nick_K said:

То есть вначале выполнить некий main.tcl, а далее барахтаться в проекте?

Не понял что вы имели ввиду.   

50 minutes ago, Nick_K said:

Такой нюанс, если работать из-под IDE, как быть тогда? Придётся иметь некий namespaces_declaration.tcl, добавленный в сорсы и постоянно исполняемый с данными переменными

Вообще для TCL есть стандартная технология  package  которая позволяет управлять иерархией  проекта на tcl.  

Удачи! Rob.

 

Share this post


Link to post
Share on other sites
55 minutes ago, RobFPGA said:

Не понял что вы имели ввиду. 

К примеру я хочу задать в запускаемом скрипте (из-под IDE) переменную, которая содержит абсолютный путь к данному скрипту.

При выполнении Вашего присвоения, Vivado ругается на normilize в любых вариантах расположения и конфигурации.

Раньше я пользовался конструкцией get_property DIRECTORY [current_project] - оно спасало когда работать с одним проектом. Но когда начинаешь править IP коры или вызывать какие-то скрипты из другого проекта, то начинается белиберда.

Share this post


Link to post
Share on other sites

Приветствую!

48 minutes ago, Nick_K said:

При выполнении Вашего присвоения, Vivado ругается на normilize в любых вариантах расположения и конфигурации.

Правильно ругается  -  normilize   это что ? :unknw:

set DSN_ROOT [file normalize [file join [file dirname [info script]] ".."]]

Удачи! Rob.

Share this post


Link to post
Share on other sites
25 minutes ago, RobFPGA said:

Правильно ругается  -  normilize   это что ? 

Опечатался. У меня в коде всё правильно. Ругается вот так:

Quote

source dump.tcl
bad option "normalize ": must be atime, attributes, channels, copy, delete, dirname, executable, exists, extension, isdirectory, isfile, join, link, lstat, mtime, mkdir, nativename, normalize, owned, pathtype, readable, readlink, rename, rootname, separator, size, split, stat, system, tail, type, volumes, or writable
    while executing
"file normalize [file join [file dirname [info script]] ".."]"
    invoked from within
"set tcl_loc [file normalize [file join [file dirname [info script]] ".."]]"
    (file "dump.tcl" line 1)

Команда pwd указывает на локацию файла dump.tcl. И запускаю из консоли в Vivado IDE.

Share this post


Link to post
Share on other sites

Приветствую!

Чудеса -   "... bad option "normalize ": must be atime, attributes, channels, copy, delete, dirname, executable, exists, extension, isdirectory, isfile, join, link, lstat, mtime, mkdir, nativename, normalize, owned, ..."

У вас там какой то матерный непечатный  символ затесался возле normalize :this:

Удачи! Rob.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this