KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
Be careful how you get yourself involved with persons or situations that can't bear inspection.
FrontPage › CWEB

목차

1 CWEB 시스템
2 CWEB 설명서
3 한글(UTF-8) CWEB 설치 방법
4 한글 CWEB 프로그램 작성 방법
5 CWEB 사용법
6 CWEB 예제
7 Microsoft Visual C++에서 CWEB 프로그래밍 하기

1 CWEB 시스템

$$\hbox{\tt CWEB}=\hbox{C programming language}+\hbox{\TeX}$$

문학적 프로그래밍 시스템으로 가장 많이 사용되는 것이 아마 CWEB일 것이다. 문학적 프로그래밍 시스템은 기본적으로 조판언어와 컴퓨터프로그래밍 언어로 구성되는데, CWEB은 가장 많이 사용되는 조판언어인 TeX과 가장 많이 사용되는 C언어의 조합으로 구성된 시스템이다.

2 CWEB 설명서

CWEB 시스템의 개념과 사용방법은 메뉴얼을 참고 한다: [http]한글CWEB설명서

3 한글(UTF-8) CWEB 설치 방법

본래의 CWEB 시스템은 한 글자를 1바이트 즉 8비트를 사용하는 영어권에 맞추어져 있기때문에, CWEB 시스템을 수정하지 않고는 UTF-8 인코딩된 한글 프로그래밍이 불가능하다. 이는 CWEB 시스템이 내부적으로 사용하는 버퍼의 크기가 너무 작기 때문이다. 본래의 시스템으로 한글 cweb 파일을 이용하면, 다음과 같은 에러 메시지를 만나게된다.
 ! Input line too long. (l. 387)
이 문제점을 해결하자.

  1. CWEB 시스템 소스를 [ftp]cweb.tar.gz 에서 받아서, 적당한 곳에 압축을 푼다.
  2. make 명령으로 현재 디렉토리에 ctangle 실행파일을 만든다.
    make
    
  3. comm-utf8.ch 라는 이름으로 파일을 하나 만든다. 그 내용은 다음과 같다.
    @x
    char *buffer_end=buffer+buf_size-2; /* end of |buffer| */
    @y
    char *buffer_end=buffer+long_buf_size-2; /* end of |buffer| */
    @z
    
  4. Makefile을 열어서 44번째 줄을 다음과 같이 수정하여, 방금 전에 만든 comm-utf8.ch 파일을 적용한다.
    CCHANGES= comm-utf8.ch
    
  5. make cautiously 란 명령으로 comm-utf8.ch 가 적용된 ctangle을 만든다.
    make cautiously
    
    그러면, 현재 작업하고 있는 디렉토리에 ctangle 이라는 실행 파일이 생겼을 것이다.
  6. 이제 새로운 CWEB 시스템을 만들 모든 준비가 되었다. 다음과 같은 순서로 컴파일하고 인스톨한다.
    make all
    make install
    
  7. 사용설명서를 얻고자 한다면, 다음과 같이 한다.
    make manual
    또는,
    make fullmanual
    


4 한글 CWEB 프로그램 작성 방법

CWEB의 한글화는 DohyunKim님이 작성하신 kotexplain.tex, hangulcweb.tex을 이용해서 가능하다. CWEB 시스템에서 TeX은 기본적으로 Plain TeX을 이용하는데, kotexplain.tex이 Plain TeX에서 한글을 사용할 수 있도록 해주는 매크로이다. hangulcweb.tex 파일은 CWEB의 여러가지 영문 메시지를 한글로 바꾼 것이고, 더욱이 pdf를 이용할 때, 한글 북마크를 가능하게 해준다.

위 두 파일은 모두 http://cvs.ktug.or.kr/viewcvs/ko.TeX/macro/plain 에서 최신 파일을 받을 수 있다.

한글 CWEB 프로그래밍을 할 때는, 작성하는 소스 파일(.w)의 처음을 다음과 같이 시작하면 된다.
\input hangulcweb

5 CWEB 사용법

$$\hbox{cweb}=\hbox{ctangle}+\hbox{cweave}$$
  • 확장자가 .w인 텍스트 파일, 예를들어 foo.w 이란 파일을 만든다. foo.w는 web 혹은 cweb 파일인데, 프로그래밍 소스와 그에 해당하는 도큐먼트를 동시에 가지고 있는 파일이다. cweb 프로그래밍을 할때는, 이처럼 프로그래밍과 도큐먼트를 동시에 생각해야 한다.
  • 아래와 같은 명령어로 cweb 파일 foo.w로부터 프로그래밍 소스 파일 foo.c(혹은 foo.cpp)을 만들어낸다.
    % ctangle foo
    
  • ctangle로 부터 생성된 foo.c를 gcc같은 C 컴파일러를 이용해서 실행 파일을 만들어 냅니다.
  • 다음의 명령어로는 foo.w로 부터 TeX 파일인 foo.tex을 얻습니다.
    % cweave foo
    
  • cweave로 부터 나온 foo.tex은 TeX을 이용하여 foo.dvi를 만든다.
    % tex foo
    
    또는, pdf의 기능을 십분 발휘하고 싶으시다면, 다음과 같이 하면 된다.
    % pdftex foo
    또는
    % etex "\let\pdf+ \input foo"
    % dvipdfmx foo
    
위 과정을 그림으로 나타내면 다음과 같다.

cweave.jpg


6 CWEB 예제

Knuth는 종종 그의 집 연구실에서 나올 때 이렇게 말한다네요. "CWEB programming is such fun!"
  • UNIX의 Word count(wc): @cbe.pdf (769.99 KB)
    • Karnes님이 제공해주신 TeX by Example 책의 소스 코드를 이용해서 작성한 것입니다.
  • Vector rotation CWEB 예제
  • Jeff Somers의 N개의 여왕문제
    • cweb 소스: @nq.w.gz (8.72 KB)
    • chess 매크로: @chess.zip (116 KB) (체스판을 그리기 위한 chess 매크로)
  • Knuth-Morris-Pratt 문자열 검색 알고리듬 구현
  • 단어 횟수 출력: @wordtree.pdf (114.4 KB)
  • 비트맵 정렬: @bitmap.pdf (81.97 KB)

7 Microsoft Visual C++에서 CWEB 프로그래밍 하기

CWEB 프로그래밍 작업은 전통적(?)으로 명령행에서 이루어져 왔습니다 (믿거나 말거나). 하지만 시간이 흐름에 따라 더이상은 고리타분하게 보일 수도 있는 명령행에서의 작업을 고집할 수 없는 상황이 되었나봅니다. 개발 환경은 IDE라는 수려하고 편리한 통합 개발 환경으로 대체된지 이미 오래입니다. 이에 cweb 프로그래밍 작업 역시 변화의 흐름에 발 맞추어서 IDE의 대표격이라고 할 수 있는 Microsoft Visual C++와 손을 잡았습니다.


위 문서는 Visual C++에서 cweb 프로그래밍을 하기 위한 세팅 방법과 사용 방법, 여러가지 cweb 팁이 들어있는 유용한 문서라고 생각됩니다.

^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-17 09:15:19
Processing time 0.0448 sec