Programming/TclTk18 Tcl 특정 경로, 파일을 제외하고 다운로드 Linux Version set downloadSh [open "download.sh" w] puts $downloadSh "\#!/bin/bash" puts $downloadSh "rsync -a $ORIGIN_PATH/* $DESTINATION_PATH --exclude /EXCEPT_DIR --exclude /except_file.txt --exclude /data" close $downloadSh exec sh [pwd]/download.sh & 코드 설명 # downloadSh에 download.sh라는 파일을 쓰기형태로 open한다 set downloadSh [open "download.sh" w] # download.sh 파일에 내용을 작성한다 puts $downloadSh "\#!/bin/.. 2023. 4. 27. TCL 동적 변수 사용 namespace eval NAMESPACE_NAME { variable var_1 "VALUE1" variable var_2 "VALUE2" variable var_3 "VALUE3" } # dynamic return way for {set i 1} {$i > VALUE1 # >> VALUE2 # >> VALUE3 # set 명령어는 "set Variable Value" 형태로 쓰면 Variable에 Value를 저장하지만 # "set Variable" 형태로 쓰면 Variable 값을 반환한다 2023. 1. 19. Tcl 동적바인딩, 여러 값 출력 namespace eval NS1 { } proc NS1::PRINT { str } { puts str } namespace eval NS2 { } proc NS2::PRINT { str } { puts str } 위와 같은 namespace와 procedure이 존재할때 main에서 각각의 값을 호출하기 위해서는 아래와 같이 호출해야 한다. $NS1::PRINT $NS2::PRINT 위의 경우 두개의 네임스페이스가 존재하지만 만약에 네임스페이스가 많아지고, 동일한 작업들을 반복한다면 번거로워 질것이다. namespace eval NS1 { } proc NS1::PRINT {} { puts "printing NS1" } namespace eval NS2 { } proc NS2::PRINT {} { put.. 2022. 10. 20. Tcl namespace eval command namespace eval command namespace가 존재하지 않으면 생성 해당 namespace내에서 제공된 코드를 실행 namespace안에서 정의된 프로시저들 (default namespace가 :: 이기 때문에 모든 프로시저들임) 만약 절대 namespace앞에 있는 경우 지정한 namespace안에서 명령을 정의 만약 상대 namespace앞에 있는 경우 현재 namespace를 기준으로 해당 명령을 정의 namespace eval bob { namespace eval joe { proc proc1 {} {} } proc proc2 {} {} proc ::proc3 {} {} proc joe::proc4 {} {} } proc proc5 {} {} proc bob::joe::proc6 {.. 2022. 9. 16. TK X 이벤트와 Tcl 명령의 연결 X 이벤트와 Tcl 명령의 연결 바인딩은 Tcl 명령을 X 윈도우 시스템의 이벤트와 연결시키는 작업 이벤트는 다음과 같은 경우에 발생 키가 눌려진 경우 키에서 손을 뗀 경우 마우스 버튼이 눌려진 경우 마우스 버튼을 놓은 경우 윈도우 안으로 마우스 포인터가 들어가는 경우 마우스 포인터가 윈도우 밖으로 빠져 나가는 경우 윈도우의 크기가 변경되는 경우 윈도우가 열리는 경우 윈도우가 닫히는 경우 입력 포커스를 얻은 경우 widget이 없어지는 경우 바인딩은 binding tag들로 정의되며 각 widget은 binding tage들의 집합과 연결 바인딩과 widget이 분리됨으로써 유연하고 강력한 시스템을 구성할 수 있음 bind 명령 bind 명령은 현재 바인딩에 대한 정보를 돌려 주고 새로운 바인딩을 정의하.. 2022. 9. 13. TK Pack 형상 관리자 Pack 형상 관리자 형상 관리자는 화면에 widget을 배치 각 widget마다 다른 종류의 형상 관리자를 사용 형상 관리자는 부모 widget을 하나 사용하며 그 안에 여러 개의 자식 widget을 배치 부모 widget은 보통 프레임 하나의 widget은 한번에 하나의 형상 관리자에 의해서만 관리 widget이 형상 관리자와 연결되지 않으면 화면에 나타나지 않음 packer는 강력한 형상 관리자 각 윈도우의 정확한 위치 대신, 어떤 방식으로 배치하는지 알려주면 packer가 알아서 배치 본 글에서는 예제를 통해 packer 형상 관리자를 이용 모서리쪽에 붙이기 두개의 프레임을 생성한 후 각각을 메인 윈도우의 위쪽에 붙임 더 위쪽에 배치될 윈도우가 .one이며 그 아래에 .two 윈도우가 배치 모서리.. 2022. 9. 13. TK 예제로 배우는 Tk 예제로 배우는 Tk Tk를 이용하여 쉽게 UI를 만들 수 있음 ExecLog UNIX 프로그램을 수행할 수 있는 간단한 사용자 인터페이스를 제공 UI는 ‘Run it’과 ‘Quit’의 두 버튼, 명령을 입력 받는 entry widget, 수행된 로그를 기록하는 텍스트 widget으로 구성 프로그램을 파이프라인으로 수행하며 출력을 기다리기 위해 fileevent 명령을 사용 이 구조는 프로그램이 수행중인 경우라도 UI가 동작하도록 함 ExecLog 프로그램의 실행 예와 소스 코드 # Set window title wm title . ExecLog # Create a frame for buttons and entry frame .top -borderwidth 10 pack .top -side top -fil.. 2022. 9. 8. TK 기초 TK Tk는 윈도우 프로그래밍을 위한 툴킷이지만 매킨토시에도 사용 가능 Tk는 widget을 생성하고 관리할 수 있는 TCL 명령들을 제공 widget은 gUI에서 어떤 특정한 모양과 동작을 가지는 윈도우를 지칭 widget과 window라는 용어는 자주 혼용되어 사용 widget 형태에는 버튼, 스크롤바, 메뉴, 텍스트 윈도우 등이 포함 Tk는 또한 일반적으로 그림을 그리는 데 사용되는 캔버스라는 widget을 제공 X 윈도우 시스템은 윈도우의 계층적인 구성을 지원하는데, Tk도 이런 특성을 따름 윈도우 계층 구조라는 것은 하나의 메인 윈도우가 있으며 그 안에 여러 개의 자식 윈도우가 포함 자식 윈도우 또한 그 안에 여러 윈도우를 포함할 수 있음 widget은 형상 관리자(geometry manager.. 2022. 9. 7. TCL 스크립트 라이브러리 스크립트 라이브러리 라이브러리는 유용한 프로시져들을 묶어서 다른 응용 프로그램에서 사용할 수 있게 함 큰 프로그램을 만들때에는 간단한 메인을 작성하고 기타 함수는 라이브러리로 생성 작은 단위로 쪼개면 필요할 때만 메모리에 탐재되기에 수행 효율 향상 가능 TCL프로그램을 작성할 때에는 코드 변환에 주의해야 함 TCL은 형식화된 모듈 시스템이 없기에 다른 패키지에서 프로시져와 전역 변수 충돌을 막기 위한 코드 변환이 필요 unknown 명령 TCL 라이브러리 기능은 unknown 명령에 의해 사용가능 TCL 해석기가 해석할 수 없는 명령을 만나는 경우 그 명령을 인자로 하여 unknown 명령을 호출 unknown 명령은 TCL로 구현되어 있기에 해석 불가능한 명령을 해석하는 새로운 unknown 명령을 생.. 2022. 9. 6. 이전 1 2 다음 728x90 728x90