창을 열자 툴북의 구조와 특성, 그리고 오픈 스크립트
강재철
지난호에서는 툴북의 기본적인 개념에 대해 알아보았다. 이번호에서는 구조와 특성, 그리고 툴북을 기술하는 오픈 스크립트에 대해 알아보기로 하자.
툴북의 구조는 네 단계로 이루어져 있다.
툴북은 4단계의 독특한 구조로 이루어졌다. 각각에 대해 알아보자.
1) 시스템System : 툴북의 기본환경을 말한다. 툴북의 기본환경은 저자Publisher와 독자Subscriber라는 두 레벨로 나뉘어진다. 저자레벨이 바로 진정한 의미의 시스템 환경이며 이 레벨에서 프로그램들을 만들 수 있다.
2) 책Book : 모든 자원들을 모은 것이다. 이 책의 속성을 지정하는 것이 Book Properties인데, 여기서는 책의 초기상태 즉, 책의 크기, 사용할 활자의 모양과 크기, 책의 바탕이 되는 모양, 구현할 수 있는 기능 등을 대화 상자나 오픈 스크립트를 이용하여 지정한다. 대화 상자에서는 책의 크기를 수치나 마우스를 이용하여 지정하고, 툴북만이 가진 특징인 보안기능Password을 넣을 수 있다. 암호는 책 자체에 접근 못하도록 할 수도 있고, 저자 레벨로 가서 편집하는 것을 막을 수도 있다. 오픈 스크립트(앞으로 ‘명령어’라고 하겠다)를 이용하면 더욱 많은 속성을 지정할 수 있는데, 다음은 책의 속성을 지정하는 명령어의 예이다.
to handle enterBook
send reader
set sysCursor to default
end
툴북 런타임 모듈Run-Time Module을 가지고 있을 때는 물론 독자 수준으로만 책을 열게 되지만, 프로그램에서는 바로 저자수준으로 가는데, 이를 막을 수 있도록 한다. 이 외에도 메뉴바의 내용을 지정하거나, 페이지의 크기, 글자의 속성 등을 지정한다. 또한 커서 모양을 38개까지 지정할 수 있다. 커서의 모양과 번호를 알려면 커맨드 윈도우(<Shift + F3>)에서 set sysCursor to ?를 1부터 38까지 차례로 지정해 보면 알 수 있다. 커맨드 윈도우는 매우 유용한 도구인데, 윈도우 안에서 명령어를 입력한 후 <Enter> 키를 누르면 그 명령어의 실제 실행이 어떻게 되는지 알 수 있다. 이때는 to handle XXXXXX —— end 구문이 필요하지 않다.
3) 배경Background : 책의 바탕그림과 같다. 워드 프로세서의 페이지 레이아웃과 비슷한데, 중간중간에 필요한 바탕그림을 계속 바꿀 수 있다. 먼저 배경에서는 밑그림용으로 바탕그림의 색과 패턴(즉 무늬)을 지정하고, 오브젝트들을 넣으면 된다. 예를 들어 페이지를 넘기는 기능을 위해 버튼을 하나 그리고 버튼 명령어에
to handle buttonUp
go to next page
end
라고 넣는다. 세이브하고 돌아와 그 버튼을 복사하고 전경Foreground으로 가서 붙여보자Paste. 전경에서 그 버튼을 마우스로 잡아 다른 장소로 이동하면 바로 뒤에 배경의 버튼이 나온다. 이제 두개의 버튼은 적어도 그 페이지 안에서는 같은 기능을 한다. 그러나 새 페이지를 만들어 보라. 배경에 있던 버튼은 그대로 있지만, 새 페이지는 전 페이지의 전경에 있던 버튼은 가지고 오지 않는다. 바로 이것이 배경과 전경의 차이이다. 한 책에서 여러개의 배경을 사용하는 경우가 많을 것이다. 예를 들어 배경을 하나 만들고 새페이지를 서너개 만든다. 그리고 새로운 배경을 만든다. 또 몇개의 새 페이지를 만들어 보라. 이제 먼저 만든 배경이 있는 페이지로 와서 새 페이지를 만들면, 그 배경이 있는 새 페이지를 만든다. 두번째 배경이 있는 페이지로 와서 다시 새 페이지를 만들어 보라. 그 배경을 가진 새 페이지가 생긴다. 이렇게 되면 일반적인 책에서는 배경이 뒤섞인 페이지들이 나열되게 되는데, 이것은 모든 페이지를 만든 후 정렬Sort 기능을 이용하여 순서를 바꿀 수도 있으니까 염려할 필요는 없다. 이 부분에 대해서는 추후에 다시 한번 이야기하겠다. 배경과 전경의 차이점으로서 가장 중요한 것은 전경과 달리 배경에는 레코드필드recordField를 만들 수 있다는 점이다. 레코드필드recordField 에 대해서도 조금 후에 다시 설명하겠다.
[그림 2] 배경과 전경이 겹쳐져서 한 페이지를 이룬다.
[그림 3] 툴 팔레트의 구성 선택화살표를 먼저 선택한 후 객체를 선택한다.
4) 전경Foreground 또는 페이지Page: 엄밀하게 말해서 전경과 페이지는 조금 다른 것이다. 즉 배경과 전경이 한 눈에 나타난 것을 페이지라고 할 수 있기 때문이다. 전경에서는 레코드 필드를 제외한 모든 자원들을 사용할 수 있다. 전경에 배치된 자원들은 그 페이지에 한해서 사용된다는 점이 다를 뿐이다. 툴북이 제공하는 사용자 인터페이스는 어느 프로그램 못지 않게 강력한데, 페이지와 관련된 인터페이스로는 페이지 아이디어Page Ideas가 있다. 북셸프BookShelf의 애플리케이션 페이지에서 페이지 아이디어Page Ideas를 선택하면 12개의 페이지 디자인이 준비되어 있다. 그중 하나를 선택하여 <Shift – 마우스 클릭>하면 그 페이지를 기본 모양으로 하는 새로운 책을 만들어 준다. 초보자의 경우 자신에게 필요한 페이지를 선택하여 사용하는 것도 좋은 방법이다. 그러면서 페이지들어 어떤 구조로 만들어져 있는지 파악하는 것도 한 방법이 되겠다.
툴북의 자원들
이제 툴북의 자원들을 살펴 보자. 툴북의 자원이란 툴북을 실행시켰을 때, 왼쪽 위쪽에 나오는 툴바의 자원들을 말하는데, 가장 위쪽의 그림은 현재 어떤 자원을 사용하고 있는지를 알려 주고, 밑의 확대경은 그림 자원을 확대해서 보여주는 역할을 한다. 확대경 옆의 화살표는 어떤 자원을 이동, 크기조절, 텍스트 편집, 속성변경 등을 하기 위해 선택할 때 이용한다. 먼저 각각의 자원들이 가진 성격을 알아 보고 이들 상호간의 관계에 대해 알아보기로 하자.
1) 버튼Button : 버튼은 스크립트 명령어를 실행하게 하는 가장 기초적인 단위이다. 버튼은 일반적으로 페이지를 넘기거나, 지정된 객체에 어떤 효과를 주거나 할 때 사용된다. 즉 스크립트에서 to handle buttonUp(이때 버튼은 마우스의 버튼을 말한다) go to next page 하면 그 버튼을 마우스로 누르면 다음 페이지로 간다는 것이다. 이 버튼의 속성에는 Link to, Link with 라는 특별한 속성이 있다. 즉 Link to 를 선택하면 그 버튼을 눌렀을 때, 스크립트에서 일일이 페이지를 지정하지 않아도 바로 그 페이지로 가도록 한다. 또한 Link with의 경우에는 어떤 페이지로 가면 다시 원래의 페이지로 돌아오도록 페이지가 자동으로 지정된 버튼이 하나 생기게 한다. 이것은 저자가 일일이 스크립트를 작성하지 않아도 되도록 배려한 것이다. 페이지를 옮기는 것 뿐만 아니라 다른 기능 즉, 다른 객체들에 대한 스크립트를 지정하는 것도 대단히 중요한 기능이다. 예를 들어 버튼의 스크립트에는
to handle buttonUp
put third word of field text01 \
into recordField Megazine of this page
end
라고 입력하면 텍스트 필드에 있는 세번째 낱말을 지금 페이지의 레코드 필드에 써넣을 수 있다.
2) 필드Field : 필드에는 텍스트를 입력할 수 있다. 이 텍스트 필드를 그리고 화살표로 선택한 다음 마우스를 더블 클릭하면 바로 문자를 넣을 수 있다. 이때, 메뉴바의 Text – Character(<F6>키를 눌러도 같은 작용)에서는 글자의 모양과 크기, 그리고 네가지 속성을 지정한다. Text – Paragraph( <F7>키를 누를대와 같다 )에서는 정렬방식, 줄간격, 좌우여백 등을 지정한다. 메뉴바의 Object – Field Properties(<Shift – F6>키)에서는 필드의 이름과 형식, 외곽선 모양을 지정하고, 이 필드에 해당하는 스크립트를 입력할 수 있다. 즉 이 필드 안에 마우스가 들어 가면 다른 필드가 보여지거나 사라진다던가, 마우스를 클릭하면 소리를 낸다던가 등의 효과를 넣으면 된다. 필드에 문자를 써 넣을 때 독특한 효과를 선택할 수 있는데, 바로 HotWord가 그것이다. 즉 어떤 단어나 글자에 대한 보충설명이나 어떤 효과가 필요할 때 쓸 수 있다. HotWord를 만드는 방법에 대해 예를 들어 보자. 텍스트 중에 툴북이라는 글에 대한 부연설명이 필요하다고 하자. 그러면 마우스로 툴북을 잡아서 블럭을 만든다. 그리고 Text – Create Hotword(<Ctrl – W>키)를 선택한다. Object – Hotword Properties를 선택하면 핫워드의 이름을 지정하게 되는데, 이 이름은 입력하지 않아도 된다. 이름을 만들면 다른 페이지에서도 이 핫워드에 해당하는 스크립트를 그대로 쓸 수 있다는 장점이 있다. 굳이 그럴 필요가 없을 때는 이름을 지정하지 않아도 된다. 이제 스크립트로 가서 다음과 같은 명령어를 써 보자.
to handle buttonUp
request Asymetrix Cooperation Company; ToolBook 1.51
end
명령어를 저장하고 페이지로 돌아와 독자 모드로 전환해 보라. 이 때 주의할 점은 핫워드가 포함된 필드는 Field Properties에서 Activate Script를 체크해야 한다는 점이다. 이럴 경우 독자 모드에서는 필드에 글을 써 넣거나 수정하는 것이 허용되지 않는다는 점도 기억해야 한다. 이제 독자 모드에서 마우스를 툴북이라는 글자 위로 옮겨보라. 마우스가 사각형으로 바뀌고, 마우스를 클릭하면 request문의 내용이 다른 윈도우 안에 나타난다. 핫워드 윈도우의 OK를 누르면 이 윈도우가 사라지는데, 이 때 버튼의 내용을 바꿀 수도 있다. 핫워드 속성의 스크립트를 다음과 같이 바꾸어 보자.
to handle buttonUp
–This is a sample script showing syntax ‘request – with’.
request Do you want to chage the color of this field? \
with RED or BLUE
if It is RED
set the fillcolor of field text to red
else
set the fillcolor of field text to blue
end if
end buttonUp
스크립트 안의 \과 —은 스크립트에 어떤 영향을 주지 않는다. \는 다만 줄을 바꾸지만 사실은 계속되는 명령어라는 기호이고, —은 저자가 기억하기 위해서나, 스크립트를 배우는 사람들을 위한 설명 등을 쓸 때 필요한 기호이다. if / else 의 구문은 OK 대신에 RED와 BLUE 중에서 선택하게 하고, 그 선택에 대한 반응을 기술한 것이다. 독자 모드에서 <F9> 키는 핫워드가 어떤 것인지 알 수 있도록 핫워드에 사각형을 그려주는 도구이다. 사각형이 나타나 있을 때, <F9>을 누르면 사각형이 사라진다. 또 필드의 컬러나 외곽선과 문자의 컬러를 바꿀 수도 있는데, 이때는 메뉴바에서 차례대로 Window – Palette – Color Tray를 선택한다. 컬러는 16색을 기본으로 64색을 표현할 수 있는데, 색상 사각형의 맨 위에 있는 세개의 사각형에서 선택된 색상을 보여준다. 두개의 사각형 왼쪽은 채움색, 중앙은 외곽선과 문자의 컬러, 오른쪽은 선택된 결과의 예시를 가리킨다. Window – Spectrum Palette도 같은 기능을 하는데, 선택하는 방법이 다를 뿐이다. Color Tray와 Spectrum Palette를 동시에 열어 놓고 한 쪽의 컬러를 바꾸면 다른쪽의 컬러도 같이 바뀌는 것을 볼 수 있다. Window의 Grid와 Rulers 도 매우 유용한 도구인데, 특히 Grid에서 Snap to grid 와 Show grid 를 선택할 경우 필드나 레코드 필드의 크기를 정확하게 지정할 수 있다. 일정한 간격으로 자원들을 배열하는 데에 매우 필요한 기능이다.
3) 레코드필드RecordField : 레코드 필드는 그 이름대로 데이터베이스의 관리가 가능한 자원이다. 즉 레코드 필드를 배경Background에 그려 넣으면, 페이지 마다에 각각 다른 데이터를 저장할 수 있다. 뿐만 아니라 일반 데이터베이스용 프로그램에서 처럼 정렬, 인덱스, 찾기 등의 기능을 이용할 수 있다. 데이터베이스의 관리에 대해서는 별도의 항목에서 설명하겠다. 북셸프의 ToolBook/dBase Exchange 를 이용하면 일반 데이터베이스 파일(확장자가 .DBF인 파일)을 직접 불러와 자신의 책 속에 넣을 수도 있고, 툴북의 레코드 필드를 이용해 만든 데이터를 바로 .DBF 파일로 변환하는 것도 가능하다. 특히 툴북의 레코드 관리 능력의 특이한 점은 일반 데이터베이스 프로그램에서는 한 레코드의 크기가 256자 정도로 제한되는 것이 보통인데, 툴북의 레코드 필드에서는 거의 무한대로 한 레코드의 크기에 제한이 없다. 이것은 인문사회과학 분야의 연구자들을에게는 큰 희소식이라고 할 수 있다. 필자는 일반 데이터베이스 프로그램의 한계 때문에 도스용인 ASK SAM이라는 프로그램을 사용해 왔는데, 이제는 그럴 필요가 없어졌다. 레코드 필드의 일반적인 속성은 필드와 거의 같다. 레코드 필드의 형식이나 외곽선 모양을 RecordField Properties에서 지정할 수 있다. 간단한 예를 들어보자. 배경에서 두개의 레코드 필드를 만든다. 하나는 한 줄 정도로 작게, 다른 하나는 아주 크게 만들자. 큰 레코드 필드의 외곽선 모양으로는 Scroll Bar를 선택한다. 그리고 각각의 이름을 subject, content라고 하자. 배경에서 작은 버튼을 하나 만든다. 이름을 New라고 하고 버튼 스크립트에는 send newpage 를 입력한다. 물론 to handle buttonUp—end 구문을 이용한다. 이제 전경의 페이지로 가서 각각의 레코드에 글을 써 넣는다. subject에는 키워드가 될만한 것을 입력하고, content에는 어떤 내용을 써 넣는다. New버튼을 이용하여 서너 페이지의 데이터를 입력한다. 이때 각 레코드 필드 간의 이동은 <TAB>키를 이용한다. 이때 커서는 두개의 레코드 필와 버튼 사이를 오가는데, 버튼에는 입력을 할 필요가 없으므로 다시 배경으로 가서 버튼 프로퍼티에서 Exclude from Tab Order에 체크한다. 이제 데이터가 어느 정도 만들어 졌으면, 메뉴바의 File – Print Report 로 간다. 보려고 하는 레코드 필드의 이름을 선택하고 Preview를 보자. 어떤 모양으로 프린트 되는지 볼 수 있다. 프린트 미리보기에서 Setting – Zoom을 선택하면 그 내용을 읽을 수 있을 만큼 확대된다. 이외에도 인덱스를 만드는 것이 필요한데, 이것은 데이터베이스 항목에서 설명하도록 하겠다. 인덱스의 예는 툴북에서 기본으로 제공하는 ADDRESS BOOK을 사용해 보면 된다.
[그림 8] 레코드필드에서 속성을 지정한다.
4) Graphic Properties : 툴북에서 그림을 관리하는 방법은 크게 Import Graphic와 Draw Direct 의 두 가지가 있다. 외부에서 그림을 불러오는 방법인 Import Graphic에는 또 그림Paint Object과 사진Picture Object을 불러오는 방법이 있다. 그림이란 이미 그 크기가 결정된 .BMP 파일이나 .DIB 파일을 말하고, 사진이란 툴북 안에서도 크기의 조절이 마음대로 가능한 윈도우 메타파일(.WMP)을 말한다. 또 윈도우 메타파일의 경우 페인트 브러시 프로그램에서 아직 비트맵 파일로 저장하기 전 상태에서 구역을 지정하여 복사한 그림은 Import Graphic기능을 사용하지 않고도 바로 잘라붙이기Paste로 그림을 불러 올 수도 있다. 이 경우에도 그림의 크기조절이 가능하다. 다른 방식인 Draw Direct에서는 10개의 툴을 제공하는데, 툴바에서 보는대로 사각형Rectangle, 둥근 사각형Rounded-Rectangle, 타원Ellipse, 다각형Polygon, 부채꼴Pie, 직선Line, 곡선Curve, 원호Arc, 경사진 직선Angled Line, 불규칙 다각형Irregular-Polygon 등이 그것이다. 여기에서 선의 굵기나 컬러 등을 지정하는 방법은 필드나 레코드 필드를 그리는 것과 동일하다.
지금까지 객체들Objects의 종류와 속성에 대해 살펴 보았는데, 이들 네 종류의 객체들은 그룹의 지정을 통해 마치 하나의 객체Object인 것 처럼 취급할 수 있는데, 이것을 가능하게 해 주는 것이 바로 묶음Group이다. 여러 객체들을 하나의 객체로 생각하게 함으로써 그 객체에 대한 스크립트를 만드는 것이 가능하게 한다. 즉, 사각형과 선과 원 등으로 어떤 얼굴 모양을 만들었다고 하자. 이때 이 그림의 위치를 다른 곳으로 옮겨 놓으려면 각각의 사각형, 원, 선 등을 일일이 하나씩 옮기고, 새롭게 위치를 정한다면 얼마나 불편하겠는가? 이럴 때 각각의 그림들을 한 묶음으로 만들면 이동과 확대, 축소가 가능해진다. 묶음을 만드는 방법은 먼저 어떤 객체 하나를 마우스로 지정한 다음 묶음을 만들 객체들을 순서대로 <Shift – 마우스 클릭>한다. 필요한 객체를 다 잡았으면 <Ctrl – G>키를 누르면 묶음이 생긴다. 경우에 따라 그룹을 해체시킬 필요가 생기면 그 묶음을 마우스로 잡은 상태에서 <Ctrl – U>하면 낱조각으로 다시 해체된다. 묶음에서 제외할 객체에 대해서는 <Shift – 마우스 클릭>하면 된다. 이러한 기능을 이용하여 어떤 그림을 만들거나, 버튼에 예쁜 그림을 그려주거나 하는 것이 가능해 진다. 또한 객체들이 투명Transparent 상태라면 몰라도 몇개의 객체들이 겹치다 보면, 필요한 부분이 가려지는 현상이 생긴다. 즉 도화지 위에 색종이 조각을 붙이다 보면 위에 붙인 조각때문에 밑에 있는 조각의 일부가 가려지는 현상을 말한다. 툴북에서는 객체가 먼저 만들어진 순서대로 놓여지게 되는데, 이들 객체들의 순서를 바꾸어 놓을 수도 있다. 객체들이 배열된 상태에서 메뉴바의 Object를 보면 Bring to Front, Send To Back, Bring Closer, Send Farther라는 메뉴가 있는데, 이것이 바로 객체들의 배열순서를 바꾸는 명령이다. 여러 객체들이 겹쳐있는 상태에서 맨 앞으로(Bring to Front: <Ctrl – F>키), 맨 뒤로 (Send To Back : <Ctrl – A>키), 한칸 앞으로 (Bring Closer: <Ctrl – +>키), 한칸 뒤로 (Send Farther: <Ctrl – ->키)를 실행한다.
오픈 스크립트
오픈 스크립트는 일종의 프로그래밍 언어로 이해하는 것이 좋다. 단지 다른 프로그래밍 언어들이 상당히 축약된 형태로 표현되기 때문에 일반인들이 접근하기가 매우 어려운 반면, 툴북의 언어는 가시적으로 일반인의 접근이 쉽다는 장점을 갖는다. 즉 기초적인 수준의 영어를 아는 사람이라면 누구나 스크립트를 익히기가 쉽다는 것이다. 예를 들어 보자.
to handle mouseEnter
show field fld01
pause 2 second2
hide field fld01
end
이런 정도의 영어를 익히는 것이 어렵다고는 할 수 없다. 그리고 그 스크립트를 보면 바로 어떤 효과가 나오는지를 쉽게 알 수 있다. 이런 언어를 구조화된 영어Structured English라고 한다. 오픈 스크립트는 크게 핸들러Handler와 명령어Command로 나뉜다. 핸들러와 명령어를 쉽게 설명하면, 이런 경우에(핸들러) 이렇게 하라(명령어)는 것이다. 바로 위의 스크립트에서 to handle mouseEnter 와 end mouseEnter는 핸들러에 속하고, show, pause, hide 등은 명령어에 속한다. 또한 명령어에는 제어구조Control Structures라는 것이 있는데, 이것은 if/then/else, conditionswhen/else, do/until, while, 그리고 step/by라는 일종의 문법이 사용될 수 있다. 먼저 핸들러에 대해 알아보기로 하자. 핸들러에는 세가지가 있다. Message 핸들러와 to set 핸들러, to get 핸들러가 그것이다. 지금까지 예를 들어본 많은 스크립트의 핸들러가 거의 Message 핸들러이다. 즉 약속된 메세지를 취급(핸들)하도록 하는 것이다. 여기에서 약속된 메세지에는 마우스의 클릭, 마우스 포인터의 움직임, 키보드 조작, 그리고 book, page, background 출입 메시지가 있다. to set, To get 핸들러는 어떤 객체에 대해 사용자가 정의하는 핸들러이다. 즉 위에서 마우스나 키보드, 책 등에 대한 어떤 사건이 일어났을 때, 이렇게 하라는 식의 명령을 줄 수 있다면, 사용자가 어떤 행동에 대한 나름대로의 정의를 할 수 있다는 것이다. to set 핸들러는 어떤 객체에 대한 사용자 정의 속성User-defined propertiy을 만드는 데 사용된다. 다음 예를 보자.
to set buttonStyle to effect
conditions
when button is not in target
set sysError to buttonStyle target must be a button
when zoom is in effect
set script of target to text of field \
zoom of page scripts
when dissolve is in effect
set script of target to text of field \
dissolve of page scripts
else
set sysError to Invalid buttonStyle
end conditions
end buttonStyle
to set 과 to get 핸들러는 사실 초보자가 다루기는 좀 어려운 부분에 속한다. 따라서 간단한 예를 제시하는 정도에 그치려고 한다. 위의 예에서 사용자는 프로그램의 버튼 스타일에 변화를 주게 된다. to get 핸들러의 예를 하나만 들어보자. 이 핸들러는 사용자 정의 기능을 만들거나 사용자 정의 속성의 값을 받아들이는데 사용된다.
to get buttonStyle
if button is in target
return the buttonStyleType of the target
else
set sysError to buttonStyle target must be a button
return null
end if
end buttonStyle
to get 핸들러에서는 항상 return 명령문을 포함해야 한다는 점을 기억하자. 실제로 프로그래밍에서는 고급 사용자가 아니면 to get이나 to set 핸들러를 사용할 필요가 거의 없다. 그만큼 많은 사용자 도구를 프로그램 자체에서 제공하고 있기 때문이다. 이제 제어구조Control structures에 대해 알아보자. 핸들러가 정의된 다음 그 핸들러에 대한 행동을 지정해 주는 명령어Command를 쓰게 되는데, 명령어에 일정한 조건을 붙이는 조건문이 제어구조라고 할 수 있다. 이들 조건문은 BASIC 언어의 조건문과 거의 동일한데, 다음과 같은 것들이 있다.
IF/THEN/ELSE – 보통 2개의 조건을 제어하는 데에 쓰인다. 예를 들면
if text of field fld01 is null
go to page 3
else
go to page 5
end
CONDITIONS/WHEN – 2개 이상의 조건을 제어하는 데 쓰인다.
conditions
when pageNumber of this page > 10
hide rectangle rec01
when pageNumber of this page = 10
show rectangle rec01
when pageNumber of this page < 10
pop third word of field fld01
else
clear
DO/UNTIL – 일정한 조건이 갖추어질 때까지 계속해서 반복된 행동을 하라는 조건문이다.
do
pop objectList
show it
until objectList is null
WHILE – do/until과 같은 기능을 한다.
while objectList is null
pop objectList
end while
STEP/BY – 순차적으로 어떤 작업을 하라는 조건문이다.
move ellipse dot to 7750, 100
step yPos from 100 to 5000 by 100
move ellipse dot to 7750, yPos
end step
step yPos from 5000 to 100 by -100
move ellipse dot to 7750, yPos
end step
여기에서는 한개의 타원이 7750, 100이라는 위치에서 7750, 5000의 위치로 100도트 단위로 내려 갔다가 다시 원위치로 돌아오는 것을 볼 수 있다.
[그림 13] 오픈 스크립트의 전체 구조
자주 사용되는 명령어
이제 명령어로 들어가 보자. 명령어는 상당히 많은 편인데, 이중에서 자주 사용되는 것은 그리 많지 않다. 명령어 일람에서 보듯이 별도의 명령어 설명이 필요없을 정도로 간단한 명령어로 툴북 프로그래밍의 제어가 가능하다. 여기에서는 자주 사용되는 명령어에 대한 설명과 예를 제시하도록 하겠다.
set : to set 핸들러와 흡사한 기능을 한다. 즉 지정된 객체의 속성을 사용자 정의로 결정하는데 쓰인다.
to handle enterPage
set charSize of field fld01 to 12
end
이렇게 함으로써 일정한 필드의 문자크기를 결정하게 된다. 일반적으로 각 객체에 대한 속성 지정에서 쓰이는 문법이 그대로 사용된다.
get : to get 핸들러와 흡사한 기능을 하는데, 사용자 정의로 일정한 객체를 불러오거나 어떤 기능을 주려고 할 때, 사용된다. 즉 다음의 예를 자세히 살펴보면, set과 get 명령어가 어떻게 사용되는지 알게 된다.
to handle sortLines
get my text
set N to textLineCount(it)
clear my text
step i from N to 2 by -1
step j from 1 to i-1
if textLine i of it < textLine j of it as text set temp to
textLine i of it
set textLine i of it to textLine j of itset textLine j
of it to temp
end if
end step
end step
set my text to it
end
put : 어떤 텍스트 필드나 레코드필드에 단어나 문장을 넣거나 수정할 때 사용된다. 항상 into와 함께 쓰인다.
put KKK into text of recordField rfld01
push : 어떤 텍스트 필드나 레코드필드에 단어나 문장을 넣거나 수정할 때 사용된다. 항상 onto와 함께 쓰인다. 다만 put과 다른 점은 기존의 텍스트에 어떤 문장이나 단어가 있을 경우 계속 지정된 문장이나 단어를 넣어준다는 점이다. 이것은 마치 워드프로세서에서 수정모드put와 삽입모드push의 차이같은 것이다.
push KKK onto text of recordField rfld01
pop : 어떤 텍스트 안에 있는 문자나 단어를 제거시키는 기능을 한다.
pop text of field sam01
페이지를 넘기는 일반적인 방법으로는 go 명령어가 쓰이는데, fx를 이용하여 특수효과를 줄 수 있다. 즉 fxDissolve to page 3를 쓰면 현재 페이지와 가려고 하는 페이지가 깜박이면서 서로 교차되어 바뀌고, fxZoom to page 3을 쓰면 페이지가 가운데서 밖으로 열리는 기분을 맛볼 수 있다. 또한 fxWipe left to page 3 또는 fxWipe right to page 3를 쓰면 페이지가 좌우로 열리는 것을 표현할 수 있다. 이때 slow, fast 옵션을 써서 속도를 조절할 수도 있다. 이 외에도 hide, show, send, clear, pause move 등의 명령어가 아주 많이 사용되는데, 이미 여러가지 예제를 통해 기능들을 선보였기 때문에 자세한 설명은 줄이려고 한다. 간단한 영어를 구사할 수 있는 사람이라면 누구나 그 명령어의 의미가 무엇인지 알 수 있다고 믿기 때문이다. 다음 호에서는 멀티미디어를 구현하는 방법과 linkDLL, 즉 특수한 효과를 사용하는 방법에 대해 쓰려고 한다. 또한 이제까지의 강좌를 바탕으로 두세개의 애플리케이션을 만드는 과정을 직접 여러분과 함께 해 보려고 한다.