노무현 대통령 배너
BLOG main image
왕미친놈의 왕미친세상입니다. 미친 소리는 써도 되지만, 근거 없는 소리는 쓰면 안 됩니다.

'세계 최악의 스크립트 언어'에 해당되는 글 1건

  1. 2010.04.12 번역 - VirtualDub scripting language reference, v0.7 - 1. VirtualDub 스크립트


VirtualDub 스크립트 언어 레퍼런스, v0.7

들어가기에 앞서

이 글은 VirtualDub scripting language reference, v0.7(http://www.virtualdub.org/docs/vdscript.txt) 문서를 한국어로 번역한 글입니다. 당연한 말이겠지만, 번역의 신뢰도는 그다지 높지 않습니다. 그러므로 이 글로 원문을 대체하여 사용하는 일이 없기를 바라며, 어디까지나 원문의 이해를 돕는 데만 사용해야 합니다. 이 번역문을 믿음으로써 발생하는 모든 사고와 피해에 대해서는 아무런 책임을 지지 않습니다.

이 문서는 VirtualDub's scripts 부분을 번역하였습니다.

머리말

이것은 VirtualDub의 대단한 스크립트 인터페이스를 기술한 문서입니다. 나는 이것을 VirtualDub의 라이선스와 같은, GNU General Public License (GPL)로 발표합니다. 이 참조는 VirtualDub 1.6.7 (WIP) 때부터 통용되며, 그리고 아마도 그 이전 버전에는 적용되지 않을 터입니다. 나는 이 레퍼런스를 자주 다시 업데이트할는지도 모르니, http://www.virtualdub.org/ 페이지를 자주 확인하기 바랍니다.

나는 스크립트 인터페이스를 중요한 일반적인 인터페이스가 되는 것을 고려하지 않았음을, 따라서 나는 이것을 언제든지 없애버리는 것에 대해 아무렇지도 않게 생각하고 있음을 기억하십시오. 나는 작업 스크립트를 망치지 않으려고 호환성을 유지하려고 노력합니다.

그러나 나는 바보짓을 한 적 있습니다(V1.4b). 당신들에게 경고했습니다.

-- Avery Lee <phaeron@virtualdub.org>
   2005년 6월 9일

VirtualDub 스크립트

VirtualDub 일괄처리 시스템은 스트립트 언어에 바탕을 두고 있으며, 그 스크립트는 프로그램 디렉터리에 있는 VirtualDub.jobs으로 불리는 파일로 저장됩니다. 저장 대화상자에서 나중에 작업 단추(Defer button)[각주:1]를 클릭하면, 작업 처리를 시작할 정보가 이 파일에 기록됩니다. 이것은 텍스트 파일이며, 그래서 그것은 손수 편집할 수 있으며 외부 프로그램으로 만들 수도 있습니다. 당신은 어떻게 이 작업이 이루어지 익숙해질 때까지 몇 개를 만들어보기를 원할 것입니다.

도움말 파일에 기록된 명령행 옵션은 당신이 배치 파일 또는 다른 프로그램으로부터 VirtualDub을 스크립트와 함께 실행하는 것을 허용합니다. 당신이 이런 작업을 한다면 다음과 같은 사항을 주의해야 합니다.

1) VirtualDub.exe 파일을 고객의 응용 프로그램과 함께 압축 파일로 묶지 마십시오. GPL은 소스 코드 없이 바이너리만 배포하는 것을 금지합니다. (GPL을 자세히 읽고 소스코드를 다운로드하겠다고 요청하지 않은 최종 사용자에게 당신이 액세스를 허용했을 때부터, 이것은 전적으로 진실이지는 않다.) 더구나 나는 문서 및 도움말 파일이 제거된 VirtualDub 프로그램을 보는 것을 좋아하지 않는다. 그런 일을 하지 말아 주십시오.

2) 당신의 응용프로그램과 VirtualDub 프로그램 사이에 매우 확실한 차별을 두십시오. 당신이 외부 응용프로그램을 실행하고 있음을 사용자가 알게 하십시오. 그리고 무슨 일이 잘못되었는지를 알게 하십시오. 나는 단지 한 사건을 겪었습니다. 그러나 나는 외부 응용프로그램이 바보짓을 할 때 내 프로그램이 결점이 있다고 생각하는 사람들로부터 지원해 달라는 이메일을 받고 싶지는 않습니다. 나는 이미 충분히 많은 이메일을 받습니다.

3) 당신의 스크립트를 VirtualDub.jobs 파일에 저장하십시오. 그러나 그것이 이미 존재하는 이전 파일을 덮어썼다면 나중에 복원하십시오. 이것은 이미 존재하는 사용자 스크립트를 보호하며, 작업 파일(job file)에서 사용자에게 오류를 보여주는 대신 VirtualDub 프로그램이 오류를 기록하게 하고, 작업을 중단합니다.

4) VirtualDub 프로그램에 내장되지 않은 필터를 당신이 사용하려면, 그것을 *반드시* VirtualDub 플러그인 디렉터리에 설치해야 합니다. 그렇게 설치된 플러그인은 VirtualDub 프로그램이 시작할 때 자동으로 읽어옵니다. VirtualDub 프로그램은 현재 외부 필터를 스크립트에서 읽어오는 일을 허용하지 않습니다.

5) 당신이 배치 파일에서 VirtualDub 프로그램을 실행하려면, 당신은 "start /wait" [각주:2]를 사용하여 실행할 필요가 있습니다. 그게 아니라면 VirtualDub 프로그램을 읽어온 뒤에도 배치 파일이 계속 실행될 것입니다. 프로그램에서 이용하려면, CreateProcess()를 이용하여 VirtualDub을 실행하고, VirtualDub 프로그램이 작업을 완료할 때까지 기다리려면 WaitForSingleObject()를 이용하십시오.

VirtualDub 스크립트 시스템은 대개 사용자 인터페이스를 통하여 같은 조작법을 제공합니다. 거기에는 어떤 숨겨진 기능도 없습니다. 그리고 몇몇 옵션은 스크립트에서 설정할 수 없습니다. 스크립트에서 캡처 모드 사용은 완전히 불가능합니다. 그러므로 캡처 기능을 위해 윈도 VCR을 설정하려고 시도하지는 마십시오.

Sylia: 세계 최악의 스크립트 언어

내가 이 스크립트 언어를 만들었을 때 내가 생각한 것을 나는 모릅니다. 그것은 매우 느슨하게 C 언어에 바탕을 두고 있습니다. 나는 이것을 만들기 전에 버블검 크라이시스(Bubblegum Crisis)[각주:3]를 보았습니다. 단지 세 가지 형의 변수(void, int, string)가 있고, 세 가지 키워드가 정의되어 있었습니다.

[code php]declare    var;    전역 변수를 지정된 형 없이 선언.
true        1
false        0[/code]

모든 문장 또는 식이 선언되지는 않으며, 모든 문장은 세미콜론( ; )으로 끝나야 한다. 어떤 흐름 제어도 없습니다. 함수도 없고, 프로시저도 없습니다. if / while / for / switch / goto 명령도 없습니다. Sylia는 클래스 객체와 배열을 지원합니다. 그러나 스크립트에서 그것들은 정의될 수 없거나 또는 사례를 들어 증명할 수는 없습니다. 객체는 변수에 할당될 수 있으며, 다음과 같은 경우에 유효합니다.

[code php]declare foo;
foo = VirtualDub.video.filters;
foo.Add("bar");[/code]

배열과 멤버 함수의 이름은 또한 변수에 할당될 수 있습니다. 후자의 경우, 변수가 역참조될 때까지 기다리는 것이 오버로드 해결책입니다.

상수는 아마도 정수 또는 문자열(string)입니다. 정수는 32비트이며 부호가 있습니다. 그리고 십진수/8진수(앞에 0을 붙임)/16진수(앞에 0x를 붙임)로 지정할 수 있습니다. -1L과 같은 형 접미사는 허용되지 않습니다. 문자열은 큰따옴표( " " )로 감싸야 하지만, 다음과 같은 C 언어 이스케이프 문자를 포함할 수 있습니다.

[code php]\a, \b, \f, \n, \r, \t, \v, \xhh, \\, \"[/code]

문자열은 아마도 널(null)을 포함하지 않습니다.

다음과 같은 C 언어의 연산자를 수식에서 지원합니다.

[code php]=    할당
+    정수 더하기, 문자열 연결 또는 양수 부호(단항 연산자)
-    정수 빼기 또는 음수 부호(단항 연산자)
*    정수 곱셈
/    정수 나눗셈
%    나머지 연산
[]    배열 색인 연산자
()    집합 표시 또는 함수 역참조 연산자
.    객체 역참조 연산자
~    비트 부정 연산잔 (bitwise not)
&    비트곱 연산자 (bitwise and)
|    비트합 연산자 (bitwise or)
^    비트 배타합 연산자 (bitwise xor)
!    논리 부정 연산자 (logical not)
==    정수 비교 (같은)
!=    정수 비교 (다른)
<    정수 비교 (작은)
<=    정수 비교 (작거나 같은)
>    정수 비교 (큰)
>=    정수 비교 (크거나 같은)
&&    논리곱 (logical and)
||    논리합 (logical or)[/code]

우선 순위는 C 언어와 같습니다. 0으로 나누기와 나머지 연산은 약간의 매스꺼움을 야기하거나, 불안정을 유발하거나, 또는 스크립트 에러를 발생시킵니다.

UTF-8 문자열 인코딩 (VirtualDub 1.5.5 이상)

VirtualDub 1.5.5 버전부터, Windows NT/2000/XP 하에서는 응용프로그램의 일부가 유니코드로 실행됩니다. 이는 8비트(ANSI)로 나타낼 수 없는 문자를 가지는 파일명이 존재함을 뜻합니다. 스크립트 명령어는 내부 필터의 예외에 따라 파일명을 받아들입니다. 지금은 ANSI보다는 UTF-8을 받아들입니다. UTF-8은, 멀티바이트 시퀀스를 사용하여 인코딩된 U+007F 위의 코드 포인트를 제외하면, Win32에서 사용하는 유니코드 인코딩인 UTF-16과 비슷합니다.

VirtualDub은 스크립트를 저장할 때 C 언어 형식의 \x 이스케이프 문자열을 사용하는  UTF-8 시퀀스를 이스케이프합니다. 그래서 심지어 파일명을 나타내는 때에도 스크립트 파일에서 상위 비트 문자는 전혀 볼 수 없습니다. 이것은 1.5.5 버전에서 스크립트가 ANSI 파일로서 읽어올 수 있음을 뜻합니다.

UTF-8 인코딩 또는 유니코드 표준에 대한 더 많은 정보는 유니코드 웹사이트 http://unicode.org/ 를 살펴보기 바랍니다.

추가적인 데이터 형 (VirtualDub 1.6.0 이상)

VirtualDub 1.6.0 버전부터, Sylia 스크립트는 64비트 긴 정수(long integer) (l) 및 배정도 실수 (d) 형, 변수, 상수를 지원합니다. 해석기(interpreter)는 메소드 원형에 어울리는 데에 필요하다면 자동으로 형 변환을 합니다. 다중 오버로드가 가능하다면, 먼저 목록에서 하나가 사용됩니다.

꾸미지 않은 문자열(VirtualDub 1.6.1 이상)

  • 옮긴이 주 : “Undecorated strings”을 “꾸미지 않은 문자열”로 옮긴 까닭은 UTF-8 문자열로 인코딩하지 않은 상태 또는 C 언어 이스케이프 문자를 쓰지 않은 상태를 가리키기 때문입니다.

이스케이프된 역슬래시를 포함하는 문자열 경로는 배치 파일에서 만들어지기 어렵고, 몇몇 언어는 UTF-8 변환을 지원하지 않습니다. Sylia 스크립트는 문자열을 위한 대체할 수 있는 구문을 지원합니다. 앞에 u 또는 U 문자가 붙은 문자열은 꾸며지지 않은, ANSI 인코딩된 문자열처럼 다루어집니다. 예컨대:

[code php]VirtualDub.Open(U"e:\test\test.avi");[/code]

문자열은 명령어 시스템에서 다루어지기 전에 스크립트 시스템 안에서 시스템 ANSI 코드페이지에서 UTF-8로 자동으로 바뀝니다. 이것은 이스케이프 또는 텍스트 변환이 필요 없이 스크립트 안에 파일 경로를 직접 삽입하는 것을 허용합니다.

참고로 위의 예제를 ANSI 문자로 나타내면 다음과 같습니다.

[code php]VirtualDub.Open("e:\\test\\test.avi");[/code]

스크립트 인수 (VirtualDub 1.6.4 이상)

불러오기 (/i) 스위치는 명령행으로부터 스크립트에 다다르는 매개변수를 허용하도록 추가되었습니다.

[code php]virtualdub /i foo.script in.avi out.avi[/code]

/i 스위치 뒤에 곧바로 나타나는 스위치가 없는 매개변수는 VirtualDub.params[] 배열에 자리 잡습니다. 위의 예제에서 VirtualDub.params[0]은 이렇게 문자열 "in.avi"를 반환합니다.

명령행 인터페이스 (VirtualDub 1.6.5 이상)

VirtualDub 1.6.5 버전부터, 명령행 모드에서 VirtualDub 프로그램의 실행이 가능합니다. 명령행 모드는 몇 종류의 배치 작업을 더 쉽게 만듭니다. 그럼으로써 vdub.exe (32비트) 또는 vdub64.exe (64비트)를 실행하십시오. 이것은 그때 프로그램의 출력 방향을 표준 출력으로 바꿉니다. 또한 이것은 오류가 발생하면 0 이 아닌 오류 코드를 반환합니다.

프 로그램을 /? 옵션과 함께 실행하면 명령행 도움말을 보여줍니다.

버전 조회 (VirtualDub 1.6.5 이상)

실행할 수 있는 빌드 번호를 VirtualDub을 종료할 때 나타내도록 하는 /queryVersion 플래그가 추가되었습니다. 이것은 프로그램의 다른 버전을 위해 더 쉽게 검출하고 조정하도록 만들어 줍니다. NT CMD 배치 파일를 실행하면 %ERRORLEVEL% 환경 변수에서 빌드 번호를 찾게 됩니다.

캐스팅 (VirtualDub 1.6.7 이상)

1.6.7 버전에서는, 수치형 자료 사이에서 C 언어 형식의 캐스트를 강제로 사용하는 것이 가능합니다.

[code php]Foo(1 + (int)4.0);[/code]

배정밀도 실수(double)로부터 롱(long) 또는 인트(int)로의 캐스팅은 0을 잘라내게 됩니다. 배정밀도 실수의 값이 대상 형식으로 표현할 수 없으면, 결과 값은 확정되지 않습니다. 롱(long)으로부터 인트(int) 결과 값으로의 캐스팅은 하위 비트를 보존합니다. 그리고 인트(int)으로부터 롱(long) 결과 값으로의 캐스팅은 부호를 확장합니다.

수치 값으로부터 문자열로, 문자열로부터 수치 값으로 캐스팅될 수 없습니다. Atoi() 및 Atol(), Atod(), ToString() 함수를 이용하십시오.

이 글은 스프링노트에서 작성되었습니다.

  1. 나중에 작업 단추(Defer button)는 VirtualDub 1.6.7 (WIP) 이후에 파일 저장 대화상자의 왼쪽 아래에 나타나는 체크 박스 및 메시지를 가리킨다고 여겨집니다. 나중에 이름이 바뀌었고, 결국 V1.9.x에서는 사라졌습니다. [본문으로]
  2. "start /wait"에 대한 자세한 사항은 명령 프롬프트에서 "start /?"를 입력하기 바랍니다. [본문으로]
  3. 버블검 크라이시스(Bubblegum Crisis)는 1987년작 일본의 애니메이션입니다. [본문으로]
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

카테고리

분류 전체보기 (1005)
스크립트 (22)
벌레와 팁 (126)
소프트웨어 (240)
하드웨어 (6)
이야기 (24)
말의 나무 (506)
미쳐보자 (22)
일기 (48)
아이폰 (10)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

글 보관함