Tcl + Js

Господа гуру Tcl подскажите возможна ли в тикле обработка кода Java Script?

Сколько я ни гуглил ничего по этому поводу не нашел, даже тиклевский браузер hv3 ничего из js у меня не обработал. Подскажите плз. пакет если такой имеется или я слишком много от тикля ожидаю?

expect and threads

Есть такой код
#! /usr/bin/tclsh
# /usr/bin/expect
package require Expect
package require Thread


set ip {10.10.0.1 \
    10.10.0.2 \
    10.10.0.3 \
    10.10.0.4 \
    10.10.0.5}

exp_internal 1
log_user 0

foreach sip $ip {
    tsv::set application sip $sip
    set id [thread::create -joinable {
        spawn telnet [tsv::get application sip]
    }]
    lappend ti $id
}

foreach id $ti {
    thread::join $id
}

При его выполнении получаю

Error from thread tid0x7f81d9032700
invalid command name "spawn"
    while executing
"spawn telnet [tsv::get application sip]"
Error from thread tid0x7f81d8831700
invalid command name "spawn"
    while executing
"spawn telnet [tsv::get application sip]"
Error from thread tid0x7f81d3fff700
invalid command name "spawn"
    while executing
"spawn telnet [tsv::get application sip]"
Error from thread tid0x7f81d35e7700
invalid command name "spawn"
    while executing
"spawn telnet [tsv::get application sip]"
Error from thread tid0x7f81d2de6700
invalid command name "spawn"
    while executing
"spawn telnet [tsv::get application sip]"


tcl и Expect собраны с threads. Куда копать?


Не могу получить return code команды shell.

Приветствую!
Сама команда в bash shell выдает
$ ./command.sh ; echo $?
abc
2
Собственно, return code 2.

Затем делаю
set return_code [ catch { exec command.sh } message ]
puts $return_code

и получаю в выводе 1. Судя по всему 1 - это return код самой shell, а вот как получить return код command.sh?

Чтение файла по строкам. Непонятность.

Файл base.url содержит 2 строки. Читаю построчно

set i 0
set fd [ open base.url r+ ]
while { ![eof $fd] } {
          incr i
          puts $i
          puts [ gets $fd ]
}

Вывод:
1
http://ya.ru
2
http://mall.ru
3

Вопрос в том, откуда берется третья итерация? Ведь на 3й итерации имеется EOF и ее быть по идее не может.
  • rejjin

Пример создания виджета "Часы".

 Пример создания виджета "Часы".

Недавно взялся за написание виджета, сначало, конечно, получалось всё ужасно, поэтому пришлось изучать чужие примеры. Положение, думаю, немного поправилось, но тем не менее судить вам. Опишу на примере небольшого виджета - clock, тоесть часы. Их можно будет создавать в любом количистве, устанавливать формат вывода времени, позицию на экране, стиль оформления и т.д. Для упрощения процесса написания/понимания статьи оформил в виде кода+подробные комментарии. Итак, начнём.
Collapse )
  • rejjin

XML-хранение данных.

Помнится мне, что было расширение, которое позволяет хранить информацию в XML-файле, с удобным извлечением/заменой/удалением содержимого тегов.
Примерно так:
::xmlDisk::get Main Images button1
Возвращает значение <Main><Images></Images></Main> тегов.

Требуется для удобного хранения набора иконок для приложения. Формат хранения в базе - base64.

P.s. Возможно есть какие-либо более удобные варианты хранения?

Внезапно - экранирование в выдаче read

Пытаюсь прочитать файл (UTF-8) но read заботливо экранирует специальные символы типа { или \ и коверкает русский на подобе какого-нибудь Sunbird.

Вот такая последовательность:
{title} {Свопинг} \
{srcfile}

Считывается так:
\\\{title\\\}\\ \\\{!2>?8=3\\\}\\ \\\\\\n\\\{srcfile\\\}\\ \\\{/proc/sys/vm/swappiness\\\}\\ \\\\\\n\\\{typval\\\}

Весьма неожиданно... Что с этим делать?

Проверка значений entry

Не пойму как это работает.

Вот пример:

proc vldentr {val env entr} {
    # Проверяет вводимое значение
     switch $env \
         "focusout" {
               #массив описания типов
               global typval
               set item [ string range $entr 7 [ string length $entr ] ]
               # получили индентификатор пункта, теперь определим его тип
               if { $typval($item) == "integer" && [string is integer $val] && $val != "" } {
                      # это целое - массивы правил для целых, слева направо: максимум, минимум, квант
                      global maxval minval defval qntval
                      # правило весьма простое - значение должно быть внутри диапазона \
                      и разность с дефолтом должна делится на квант
                      if { $val > $maxval($item) | \
                      $val < $minval($item) | \
                      [ expr ( $defval($item) - $val ) % $qntval($item) ] != 0 } {
                                    puts "Invalid value for '$item' (must be: $maxval($item) >= val >= $minval($item) & ($defval($item) - val) mod $qntval($item) = 0"
                                    return 0
                      } else {
                                    return 1
                      }
                   } else {
                       puts "Invalid value for '$item' (val must be $typval($item))"
                        return 0
                   }
       } "default" {
             return 1
       }
}

entry .entry_$item -width 8 -validate all -vcmd {vldentr %P %V %W}

Процедура проверки вроде бы выполняется, но значение введенное в поле принимается, даже если процедура возвращает false...

Чё за фигня?

Редактор для Tcl

А какой редактор вы используете для Tcl?
Я пользуюсь Komodo Edit и пока это лучшее что нашёл. Раздражает невозможность выполнить файл по кнопке на панели - приходится открывать панель toolbox'а и буржуйский интерфейс.
Пробовал ещё visualtcl для создания интерфейса, но на то, что оно мне насоздавало было страшно смотреть...