計算機序論2【課題B】分割コンパイル

計算機序論2(2008) 2008/09/29
2008/09/02: 公開

課題B

〆切日2008/10/15, 13:45(JST)
提出先WebCT
提出内容下記のB-1,B-2の課題全て(余裕のある者は発展課題B-21,22,23に挑戦してよい)

-----------
課題B-1(必修)

目標:課題A-1で作成したプログラムを、分割コンパイルできる形にする。

課題A-1において、 各人は ベースプログラム(rd-animator-allinone.c) をもとにスクリプト読込プログラムを完成させているはずである。
これを、 ヘッダファイル、 大域変数のファイル、 および関数を種別にわけた3つのファイル、 の合計5つのソースファイルに分割し、分割コンパイルできるようにせよ。

ただし、ヘッダファイルは、 「型の定義(構造体の定義)」、 「大域変数の外部参照の宣言」、 「関数プロトタイプ」の3つのパートから構成されるようにすること。
残りの4ファイルについては、今回作成するヘッダファイルをincludeすること。

[コンパイル例]
$ gcc -Wall -c rd-animator-global.c
$ gcc -Wall -c rd-animator-data.c
$ gcc -Wall -c rd-animator-script.c
$ gcc -Wall -c rd-animator-main.c
$ gcc -o rd-animator-run rd-animator-global.o rd-animator-data.o rd-animator-script.o rd-animator-main.o

提出物:
提出先ファイル名注意点
B-1-1rd-animator-common.hヘッダファイル
B-1-2rd-animator-global.c大域変数ファイル
B-1-3rd-animator-data.c データ構造体の操作関連の関数
B-1-4rd-animator-script.cスクリプトファイルからの読み込み関連の関数
B-1-5rd-animator-main.c メイン関数
B-1-6034k-result.txtサンプルスクリプト034kを読み込んだ結果を保存したテキストファイル)

-----------
課題B-2(必修)

目標:課題B-1で作成した分割プログラムソースを、他の分割ソースと組み合わせることでCG表示を行う。

  1. 【演習課題用全ファイル】のページから、 「実行用完全プログラム・オブジェクト」(fl-で始まるファイル11個)と st-animator-ic2.hをダウンロードせよ。
  2. 課題B-1で作成したヘッダファイルrd-animator-common.hが、 st-animator-ic2.h のサブセットになっていることを確認せよ。
  3. 続いて、課題B-1で作成したファイルrd-animator-global.cが、 st-animator-global.c のサブセットになっていることも確認せよ。
  4. 次に、課題B-1で作成したrd-animator-data.c、rd-animator-script.cについて、 includeするヘッダファイルをrd-animator-common.hから st-animator-ic2.hに変更し、 それぞれオブジェクトファイルを生成せよ。
  5. 以下の11個のオブジェクトをリンクし、実行ファイルを生成し、実行してみよ。
    fl-animator-global.o
    rd-animator-data.o
    rd-animator-script.o
    fl-animator-geomextra.o
    fl-animator-geom.o
    fl-animator-drawprimitive.o
    fl-animator-drawextra.o
    fl-animator-drawcore.o
    fl-animator-callback.o
    fl-animator-initgl.o
    fl-animator-main.o

[コンパイル例]
$ gcc -Wall -c rd-animator-data.c
$ gcc -Wall -c rd-animator-script.c
$ gcc -o Animator-runB2 fl-animator-global.o rd-animator-data.o rd-animator-script.o fl-animator-geomextra.o fl-animator-geom.o fl-animator-drawprimitive.o fl-animator-drawextra.o fl-animator-drawcore.o fl-animator-callback.o fl-animator-initgl.o fl-animator-main.o -L/usr/X11R6/lib -lX11 -lXmu -lXi -lGL -lGLU -lglut -lm

提出物:
提出先ファイル名注意点
B-2-1rd-animator-data.c B-2の変更を行ったもの
B-2-2rd-animator-script.cB-2の変更を行ったもの
B-2-3Animator-runB2 生成した実行バイナリファイル

-----------
課題B-21(発展)

目標:物体の線分数と面数の数え上げ

課題A-1において利用した ベースプログラム(rd-animator-allinone.c) に基づいてスクリプトを読み込んだとき、 各物体における線分の数とパッチ面の数を表示できるようにせよ。 表示は標準出力でよい。

提出物:
提出先ファイル名注意点
B-21-1数え上げをできるようにしたプログラムソース単一ファイルソースで提出。
B-21-2025-result.txtサンプルスクリプト025を読み込んだ結果を保存したテキストファイル

-----------
課題B-22(発展)

目標:課題A-1で作成したプログラムにおける、外部仕様の拡張

課題A-1において利用した ベースプログラム(rd-animator-allinone.c) に基づいてスクリプト読込プログラムを行うと、 外部仕様における "C: [animation Contnued]"において、ObjectIDが0の場合にはどのようなことが起こるか。 該当するプログラムソース部分を示して説明せよ。(B-22-1) 外部仕様における "C: [animation Contnued]"において、ObjectIDが0の場合は 「その直前のanimation(AないしC)のObjectIDを引き続き利用するものとする」という 仕様に変更することを考える。
この仕様に沿ったプログラム変更を実施し、 shortscript025b.txtを用いてその変更を確認せよ。

提出物:
提出先ファイル名注意点
B-22-1(テキストファイル)該当するソース(一部抜粋でよい)と説明
B-22-2仕様を変更したスクリプト読込プログラムソース単一ソースファイルで提出。

-----------
課題B-23(発展)

目標:Callback関数の設定を自分で行う

st-animator-callback.c, st-animator-main.c の2つのプログラムソースはCallback関数が設定されていないため、そのままでは健全に動かない。
そこで、これらにCallback関数を正しく設定し、 この2ファイルについてもオブジェクトファイルを自分のものと置き換えて実行ファイルを生成せよ。

[コンパイル例]
$ gcc -Wall -c st-animator-callback.c
$ gcc -Wall -c st-animator-main.c
$ gcc -o Animator-runB23 fl-animator-global.o rd-animator-data.o rd-animator-script.o fl-animator-geomextra.o fl-animator-geom.o fl-animator-drawprimitive.o fl-animator-drawextra.o fl-animator-drawcore.o st-animator-callback.o fl-animator-initgl.o st-animator-main.o -L/usr/X11R6/lib -lX11 -lXmu -lXi -lGL -lGLU -lglut -lm

提出物:
提出先ファイル名注意点
B-23-1st-animator-callback.c B-23の変更を行ったもの
B-23-2st-animator-main.c B-23の変更を行ったもの
B-23-3Animator-runB23 生成した実行バイナリファイル


kameda[at]iit.tsukuba.ac.jp