More about the input stream

위의 프로그램이 실행되고 나면 Working Directory에 macro_shape.mac 이라는 파일이 자동적으로 생성된다. ASAP Workspace의 MAC Input 메뉴에서 오른쪽 마우스를 클릭하고 Open…메뉴를 선택하여 macro_shape.mac 파일을 열어보자.

mac_open
그림 8.33 MAC 파일 열기

Open Files 윈도우에 보면 macro_shape.mac 파일이 생성되어 있는 것을 확인 할 수 있다.

Stream_01
그림 8.34 생성된 .mac 파일

그러면 위에서 작성한 프로그램 중 MACRO_SHAPE { 5 다음 줄부터 주석 마지막 부분까지가 그대로 있다. 이게 무슨 일인가? 파일을 만들지도 않았는데 파일이 만들어졌고 내용까지 들어가 있다.

mac_shape
그림 8.35 macro_shape.mac 파일 내용

그럼, 여기서 원래 프로그램을 조금 수정해 보자. MACRO_SHAPE { 5 … } … 주석문 까지를 모두 주석처리하거나 지우고 프로그램을 실행시켜 보자.

SYSTEM NEW
RESET


$MACRO_SHAPE  RECTANGLE  0  10  10  REC

WINDOW Y X
PLOT FACETS
RETURN

프로그램에서 MACRO_SHAPE { 5 … } 매크로를 지웠지만 프로그램은 아무런 문제없이 결과를 계산해 낸다.

한번 생각해 보자.

처음에 매크로가 포함된 프로그램을 한번 실행하고 나면 ASAP은 프로그램 내에 있는 매크로를 이용해서 .mac 파일을 생성하고 내용을 저장한다. 그리고 그 다음부터는 .mac에 있는 내용을 사용할 수 있게 된다. 물론, 우선순위는 있다.

1) .inr 파일에 있는 매크로를 사용한다.
2) .inr 파일에 매크로가 없으면 Working directory에서 호출된 매크로이름.mac 파일을 찾는다.
3) 마지막으로 .lib 파일을 찾는다.

이런 이유로 프로그램이 한번 실행되고 .mac 파일이 생성되면 원래 파일에서 매크로 부분을 지워버려도 프로그램은 실행된다. 이유는 .mac 파일이 생성되어 있기 때문이다.

이번에는 생성된 macro_shape.mac 파일을 자세히 들여다보자. 매크로의 첫줄에 있던 MACRO_SHAPE { 5 구문이 없는 것을 볼 수 있다. macro_shape.mac 파일의 첫줄에 MACRO_SHAPE { 5 를 추가하고 저장하자.

macro_shape.mac
MACRO_SHAPE  {  5                                  !! 추가된 항목
SURFACE
  OPTICAL  Z
 #2  #1  #3  #4
OBJECT  ‘SHAPE_#5’
}
Optical shape:
Z height:
Radius of X:
Radius of Y:
Object name:

그리고 원래의 프로그램을 실행시켜 보자.

Input 1.inr
SYSTEM NEW
RESET


$MACRO_SHAPE  RECTANGLE  0  10  10  REC

WINDOW Y X
PLOT FACETS
RETURN

그러고나면 아래와 같은 에러가 뜬다.

— $MACRO_SHAPE  RECTANGLE  0  10  10  REC
***  ^WARNING
Unmatched braces {} in definition of macro MACRO_SHAPE

-1- MACRO_SHAPE  {  5
A serious error has occurred.
This may be the result of macro DEFINITIONS illegally nested or appearing in a $DO loop.
The ASAP Kernel must be restarted to clear this error condition.
ERROR in MACROX *** Macro length = 0
ERROR in MACROX *** Macro length = 0
Fatal error occured. Restarting ASAP kernel compone

어디가 잘못된 것일까? Input 1.inr 파일에서 $MACRO_SHAPE RECTANGLE 0 10 10 REC로 매크로를 호출하면 우선 .inr 파일을 훑어본다. .inr 파일 내에 매크로가 없으면 매크로의 이름인 macro_shape.mac 파일이 있는지를 찾아본다. 이때, $MACRO_SHAPE RECTANGLE 0 10 10 REC 명령어에서 macro_shpae라는 매크로 이름과 RECTANGLE 0 10 10 REC라는 5개의 변수가 사용됨을 이미 알고 있다. 그래서 .mac 파일을 이용하게 되면 MACRO_SHAPE  {  5 가 다시 나올 필요는 없게 된다. .mac 파일에 매크로 이름과 변수의 개수를 추가하는게 오히려 사족이 되어버린 것이다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: