`

Tcl相关(包含软件)

阅读更多
参考资料:http://noyesno.net/page/82


1. 什么是Tcl/Tk/Tix
Tcl是"Tool Command Language"的缩写,是一种解释型的脚本语言。Tcl的特殊之处在于Tcl解释器可以嵌入到C/C++程序中。Tcl有一个解释器的C语言函数库,可以通过调用这些函数在应用程序中实现Tcl的特性。正是因为有这个解释器的接口,Tcl可以与C混合编程,可以用C语言扩展Tcl的命令,而且C中的变量和Tcl中的变量可以互相访问。在第5部分将演示这一功能。因此,在EDA工具中,一般都集成了Tcl环境。

Tk是建立在Tcl语言基础上的窗口系统的程序包,Tk扩展了Tcl的指令,可以很容易的建立图形界面。Tk包括了实现图形界面的最基本单元如按钮、滚动条等。同样,Tk也可以集成到C语言中,也可以通过C来扩展Tk的功能。

Tix是Tk的扩展,是建立在Tk上的更高层的程序包,可以实现如文件选择对话框之类的操作。Tix也可以与C语言集成。

在Red Hat Linux中包含了Tcl, Tk, Tix套件。这些包的位置在:
/usr/share/tcl**
/usr/share/tk**
/usr/share/tixwish**

在命令行下,可以通过tclsh, wish, tixwish***来启动tcl, tk, tix解释器。


2. Tcl语法介绍
这里只对语法做简单介绍,其他可以参考[1]
  Tcl实际上是面向字符串的语言,因此Tcl中的所有变量可以认为是字符串变量。为变量赋值:
  % set a 4
  4
  % set b 5
  5
  在变量前加上$符号是引用这一变量。
  因为所有变量都是字符串变量,所以以下语句是错误的、
  % c = $a + $b
  ambiguous command name "c": case catch cd clock close concat continue
  正确的方式应该是:
  % set c [expr $a+$b]
  这里expr是求解$a+$b这一表达式的值。[]表示将expr的结果作为一个变量赋给c。


3. 用Tk构建图形界面
键入命令wish, 启动Tk解释器,会出现一个窗口,并出现%命令提示符。
以下给出几个例子并给出简单说明:
#!/usr/bin/wish -f
proc ad {a b} {
    set res [expr  $a + $b] 
  return $res
}

entry .a -width 6 -relief sunken -textvariable a
label .l1 -text "add"
entry .b -width 6 -relief sunken -textvariable b
label .l2 -text "is"
label .resul -textvariable result
button .bu1 -text compute
pack .a .l1 .b .l2 .resul .bu1 -side left -padx 1m -pady 2m
bind .bu1 <1> {set result [ad $a $b]}

这里proc定义了一个Tcl语言过程ad,输入参数为a, b,返回res。
这里entry定义了一个输入框,Tk的图形界面实际上是一个层次化的结构,这个层次化结构的根节点是.,因此.a表示的是跟下面的一个entry。同样.menubar.menu1表示的是菜单条中的一个菜单。-width指定了这个框的宽度为6,-relief指定了框的外观为sunken, -textvariable a指定这一个框对应一个字符串类型的变量a。label定义的是一个显示在图形界面中的字符串。这个字符串是"add"。button定义了一个按钮,这个按钮上的字符显示为"compute"。最后pack将这些对象显示到窗口中。-side left表示左对齐,-padx 1m -pady 2m表示x,y两个方向图形对象与边界的间距是1毫米和2毫米。
最后一句bind是表示事件的链接,这里意思是将.bu1的<l>事件对应到执行{set result [ad $a $b]}命令。<l>表示的是鼠标左键单击事件。这里在.bu1上单击左键,会更新result的值。ad $a $b是对ad过程的调用。
将上面的例子写入一个文件ex1.tcl,并chmod +x ex1.tcl,可以直接在命令行执行
$./ex1.tcl

4. 用Tix构建图形界面
在工作站上可以通过tixwish8.1.8.3来启动tix,会出现与tk同样的界面和提示符
下面是一个简单的例子:
#!/usr/bin/tixwish8.1.8.3

tixControl .tt -label Number: -max 100 -min 0
.tt config -integer true -step 1
pack .tt

同样可以在命令行执行这一脚本。这里不再多作解释,可以参考/usr/share/doc/tix-8.1.4/docs/tix-book/tix.book.html

5. Tcl/Tk/Tix与C/C++混合编程
a. 需包含的include文件:
  #include <tcl.h>
  #include <tk.h>
  #include <tix.h>
b. link选项:
  -ltcl -ltk -ltix
c. 常用函数:
    Tcl_Interp * Tcl_CreateInterp(): 创建一个Tcl解释器对象。Tcl_Interp是解释器对象。
    Tcl_DeleteInterp(Tcl_Interp *interp): 删除Tcl解释器对象。
    Tcl_Init(): 初始化Tcl。
    Tk_Init(): 初始化Tk。
    Tix_Init(): 初始化Tix。
    Tcl_CreateCommand(): 通过C语言函数实现Tcl的一个命令。
    Tcl_SetVar(): 设定Tcl中的变量值。
    Tcl_GetVar(): 获得Tcl中的变量值。
    Tcl_LinkVar(): 共享C与Tcl中的变量。
    Tk_Main(): 在C语言中调用Tcl脚本的主函数。
    Tcl_Eval(): 执行一个Tcl语句。
    具体的参数及调用方法参考man <函数名>
d. 一个例子:
// test.c
#include <tcl.h>
#include <tk.h>
#include <stdlib.h>
#include <stdio.h>


int ad_proc(ClientData d, Tcl_Interp *interp, int argc, const char * argv[])
{
  int a,b,c;
  char res[20];
  if(argc != 3)
    {
      abort();
      return TCL_OK;
    }
  else
    {
      sscanf(argv[1],"%d",&a);
      sscanf(argv[2],"%d",&b);
      c = a+b;
      sprintf(res, "%d", c);
      strcpy(interp->result,res);
      return TCL_OK;
    }
}


int InitProc( Tcl_Interp *interp
{
  int iRet;
  // Initialize tk first
  iRet = Tcl_Init( interp ;
  if( iRet == TCL_ERROR)
    {
      fprintf( stderr, "Unable to Initialize Tcl: %s\n",interp->result);
      return( iRet ;
    } // end if

  iRet = Tk_Init(interp);
  if(iRet == TCL_ERROR)
    {
      fprintf(stderr,"Unable to Initialize TK: %s\n",interp->result);
    }

  //  iRet = Tix_Init(interp);
  //  if(iRet == TCL_ERROR)
  //    {
  //      fprintf(stderr,"Unable to Initialize Tix: %s\n", interp->result);
  // }

  Tcl_CreateCommand(interp,"ad",ad_proc,(ClientData)0,0);


  return( TCL_OK ;
} // end InitProc


int main()
{
  // declare an array for two strings
char *ppszArg[2];
// allocate strings and set their contents
ppszArg[0] = (char *)malloc( sizeof( char  * 20 ;
ppszArg[1] = (char *)malloc( sizeof( char  * 20 ;
strcpy( ppszArg[0], "test" ;
strcpy( ppszArg[1], "./ex1.tcl";
// the following call does not return
Tk_Main( 2, ppszArg, InitProc ;
free(ppszArg);

}

这个程序调用了上一节的Tcl脚本ex1.tcl,但是通过C语言来实现其中的ad过程。因此需要在ex1.tcl将以下部分注释:
#proc ad {a b} {
#    set res [expr  $a + $b] 
#  return $res
#}
这一程序中,main函数中的Tk_Main是调用Tcl脚本的主函数。这一函数的第一个参数表示ppszArg中变量的个数,这里的ppszArg第一个元素表示调用这一程序编译后执行程序的名称,第二个元素表示要执行的tcl脚本。第三个参数是一个初始化函数的指针。Tk_Main会首先调用这一个初始化函数。这一初始化函数,通过Tcl_Init()和Tk_Init()来初始化Tcl和Tk。Tcl_Init和Tk_Init执行成功会返回TCL_OK,否则返回TCL_ERROR,错误信息在Tcl_Interp结构的result参数中。在这一初始化函数中,调用了Tcl_CreateCommand函数将ex1.tcl中的一个过程用C语言的ad_proc函数来实现。这一函数的第一个参数是Tcl解释器指针,"ad"表示Tcl中调用这一过程的调用名称,ad_proc是指向实现这一过程的C语言函数的指针,后两个参数这里为默认值(ClientData) 0和0。在ad_proc C语言函数中,其标准形式为int ad_proc(ClientData d, Tcl_Interp *interp, int argc, const char * argv[])。这里argc, argv是Tcl中调用时传过来的参数。运算结果通过Tcl_Interp *interp解释指针的result参数传回。

通过gcc -o test -ltcl -ltk -ltix test.c来编译这一程序。

e. 一个简单的Tcl/Tk解释器:
以下程序实现了一个简单的Tcl/Tk解释器:
#include <tcl.h>
#include <tk.h>
#include <stdio.h>
#include <stdlib.h>


int InitProc( Tcl_Interp *interp
{
  int iRet;
  // Initialize tk first
  iRet = Tcl_Init( interp ;
  if( iRet == TCL_ERROR)
    {
      fprintf( stderr, "Unable to Initialize Tcl: %s\n",interp->result);
      return( iRet ;
    } // end if

  iRet = Tk_Init(interp);
  if(iRet == TCL_ERROR)
    {
      fprintf(stderr,"Unable to Initialize TK: %s\n",interp->result);
    }

  Tcl_StaticPackage(interp, "Tk", Tk_Init, Tk_SafeInit);

  return( TCL_OK ;
} // end InitProc


int main(int argc, char * argv[])
{

Tk_Main(argc, argv,  InitProc ;

}

这里通过Tcl_CreateInterp函数创建一个解释器对象,并通过Tcl_Eval执行Tcl语句。Tcl_Init()和Tk_Init()函数用于初始化Tcl/Tk环境。

     

分享到:
评论

相关推荐

    Tcl/tk软件安装包

    这个“Tcl/tk软件安装包”包含了在Windows平台上运行Tcl/tk所需的所有组件。 ActiveTcl是Tcl/tk的一个流行发行版,由ActiveState公司维护。文件"ActiveTcl8.6.0.0b7.295590-win32-ix86-threaded.exe"就是ActiveTcl...

    三个万能对讲机写频软件,包含TCL-HT9 对讲机写频软件和驱动

    本文将详细介绍三个万能对讲机写频软件及其与TCL-HT9对讲机写频软件的关系,以及如何进行有效操作。 首先,对讲机写频软件是用于设置对讲机频道、频率、扫描列表、功率等级等参数的工具。这些参数的正确设定直接...

    TCL程控电话交换机BK系列说明书和管理软件.rar

    本文将深入解析TCL程控电话交换机BK系列的使用手册及管理软件,旨在帮助用户更好地理解和操作这一系列设备。 首先,"TCL程控电话交换机BK系列操作说明书增强版V2014"是一份详尽的指南,涵盖了从基本功能到高级设置...

    TCL拼接控制软件V2.1 20130909.rar

    《TCL拼接控制软件V2.1 20130909:电视墙维护与设置详解》 在当今的多媒体展示领域,电视墙因其震撼的视觉效果和灵活的布局方式,被广泛应用于监控中心、展览展示、广告宣传等场景。TCL作为知名的电子设备制造商,...

    TCL-AF848软件调试说明

    TCL-AF848 软件支持话费查询功能,用户可以查询话费的详细信息,包括话费的金额、时间、次数等。 六、系统设置 TCL-AF848 软件支持多种系统设置,例如,用户可以设置呼叫转移的时间和方式、账号跟随的时间和方式、...

    tcl文档生成软件(包括教程)

    6. **资源管理**:软件可能还包括资源管理功能,如版本控制、代码片段存储等,帮助用户更好地组织和管理他们的TCL脚本库。 在压缩包中的“tcl生成工具”很可能是该软件的安装程序或可执行文件,用户可以下载并安装...

    tcl e777 cab 软件

    在TCL E777这款智能手机上,CAB文件可能包含了针对该设备的特定驱动程序、系统更新、应用程序或者其他必要的软件组件。本文将深入探讨CAB文件的用途、结构以及如何在TCL E777上安装和管理这类文件。 1. CAB文件的...

    TCL智能电视安装软件工具包V3

    【TCL智能电视安装软件工具包V3】是一款专为TCL品牌的智能电视设计的软件管理工具,旨在帮助用户更加方便、快捷地在电视上安装和管理各种应用程序。这款工具包集成了多种实用功能,包括但不限于应用下载、更新、卸载...

    TCL-HT9.rar

    【TCL-HT9对讲机写频软件】是一款专为TCL-HT9型号对讲机设计的配置工具,主要用于设置和管理对讲机的各种通信参数。这款软件的重要性在于,它能够帮助用户根据实际需求定制对讲机的工作模式,提高通信效率和准确性。...

    传屏软件TCL

    【传屏软件TCL】是一款专为TCL智能云电视设计的应用程序,它允许用户将手机或电脑上的屏幕内容无线传输到电视上,提供大屏观看体验,适用于演示、游戏、视频播放等多种场景。这款软件的使用提升了家庭娱乐和办公效率...

    TCL-S1916管理软件V2.14

    【TCL-S1916管理软件V2.14】是TCL公司为S1916网管交换机推出的版本号为2.14的管理程序,它专为这款设备提供了详尽的网络管理和配置功能。TCL S1916是一款具有16个局域网(LAN)接口的网管交换机,适用于中小型企业或...

    TCL 拼接屏控制软件 矩阵

    【TCL 拼接屏控制软件 矩阵】是一种专为TCL品牌拼接屏设计的专业控制系统,主要用于管理和操控多块屏幕组成的拼接显示系统。TCL灵控系统,全称为“TCL Intelligent Control System”,是这个系统的核心组成部分,它...

    TCL-HT6.zip

    《TCL-HT6对讲机写频软件详解与使用指南》 在无线电通讯领域,对讲机作为一种便捷的通信工具,被广泛应用。其中,TCL-HT6对讲机以其优良的性能和性价比受到了广大HAM(业余无线电爱好者)的青睐。然而,对于这类...

    TCL S4108S-R3-V2交换机配置软件

    TCL S4108S-R3-V2配置软件包含以下几个关键方面: 1. **配置界面**:通常,这款交换机提供命令行接口(CLI)和图形用户界面(GUI)两种配置方式。CLI适合经验丰富的网络管理员,而GUI则对新手更友好,通过直观的...

    TCL AF848,AF10PC编程软件

    而“AF88 AF100软件”可能是与TCL AF848和AF10PC相关的编程或配置工具,帮助用户安装、更新和定制交换机的系统设置,如添加新的功能、调整分机配置、设定通话规则等。 使用这类编程软件通常涉及以下几个步骤: 1. *...

    Tcl/tk软件包

    Tcl/Tk软件包是一个强大的脚本语言工具集,它主要由Tcl(Tool Command Language)和Tk(Toolkit)两部分...对于BEAMnrc等相关核物理计算软件,Tcl/Tk提供了直观的用户界面,提升了用户体验,也简化了程序的使用流程。

    TCL安装第三方软件工具包2.zip

    "TCL安装第三方软件工具包2.zip"是专为TCL智能电视设计的一个实用工具,它包含了用于安装非官方应用的必要组件和指南。这个工具包适用于所有TCL电视的不同版本,无论是较早的系统还是最新的更新,都能通过此工具实现...

    TCL交换机S4108管理软件

    总的来说,TCL交换机S4108的管理软件提供了一套全面的网络管理解决方案,包括配置、监控、安全和故障处理等多个方面,旨在满足企业级网络的需求,确保网络的高效稳定运行。无论是初级还是高级网络管理员,都能通过这...

Global site tag (gtag.js) - Google Analytics