SCL についてのQ&A


Q SCL.rsrcをProjectに組み込めない
Q リンクエラー
undefined: PrJobDialog
undefined: PrStlDialog
undefined: PrOpen
undefined: PrintDefault
がでる.

Q リンクエラー: exit.c: 'RemoveConsole' が定義されていません。( '_exit' から参照) がでる.
Q 「'project'にビルドエラー」というウインドウが出て、続いて「ディスクがいっぱいですので前のコマンドを実行できませんでした。 結果コード=-34 OK」が出る.
Q エラー「'HugeArray.c'ファイル;行21'scl.c'をコンパイル中 警告;代入が誤っている可能性がある...」が出る.
Q StartTextOnly, StartDrawingOnly で syntax error がでる.
Q プログラムを実行すると,「コ・プロセッサがありません」,「不当な F ライン命令です」と出て暴走する.
Q 日本語が出力できない.
Q Think C 5.0 で data segment too big の Link error が出て動かない.
Q 「Macintosh ではじめる C」の void plotFunc(double (*p)(double)) の引数の型がわからない.
Q ウィンドウのサイズを指定するには?
Q <file ヤSCL.c ユnot found>が出て止まってしまう.
Q カラーを使うには?
Q テキストのスクロールが急に遅くなる.
Q 絵が印刷,保存できない.
Q CodeWarrior での初回のコンパイルが非常に遅い.
Q %lf で double 型の変数が出力できない.
Q CodeWarrior で "New and invalid access paths for メprojectモ" の警告が出る.
Q Symantec C++ で ParametersDialog を使ったときに変数の値が変更されない.
Q プログラムを動かすと「”project.pef”存在しないシステム・トラップです」というメッセージでシステムエラーとなる.
Q PlotFrame2D で文字化けする.
Q ファイル "s_Common.c"; ライン 275;
エラー: 'GetIndPattern'関数の第一引数がプロトタイプと不対応
というエラーが出る.

Q コードセグメントのオーバーフローのエラーが出る.
Q Symantec C++ 8.4 で SCL のプロジェクトサンプルが動かない.
Q CodeWarrior Pro 4 で「undefined identifier 's_ss'」のエラーが出る.


Q SCL.rsrcをProjectに組み込めない

A(原因)THINK C ver.5 ではリソースファイルのプロジェクトへの組み込みに対応していない.
(対策)SCL.rsrc をプロジェクトと同じフォルダにコピーして,「プロジェクト名」.rsrc の名前にする.


Q リンクエラー
undefined: PrJobDialog
undefined: PrStlDialog
undefined: PrOpen
undefined: PrintDefault
がでる.


A(原因)Think C ver.5 では Printing.h ではなく,PrintTraps.h にこれらのシステムトラップが記載されているため.(SCL ver. 1.1 で修正済み)
(対策)1 (SE 以前?の)古い機種ではプロジェクトに Mac Libraries から PrGlue を付け加える.
2 それ以外の機種では SCL の Libraries の中の Print.h の13行目
#include <Printing.h>

#include <PrintTraps.h>
とする.
SCL ver. 1.1 では Think C ver.5 で PrintTraps.h をインクルードするように変更した.


Q リンクエラー: exit.c: 'RemoveConsole' が定義されていません。( '_exit' から参照)がでる.

A (原因)CodeWariior 8 では SIOUX ライブラリが必須になるが,SCL 1.0, 1.0.1 のサンプルでは SIOUX ライブラリが組み込まれていない.また,CodeWariior 7 以前でも fopen 等には SIOUX ライブラリが必要になる.(SCL 1.0.2 で修正済み)
(対策)1 Project メニューの Add Files... を選ぶ.
2 Metrowerks CodeWarriot のフォルダから以下の順にフォルダを開いていく.
MacOS Support
Libraries
SIOUX
3 使っている Macintosh の機種に応じて
SIOUX.68k.Lib
または
SIOUX.PPC.Lib
のいずれかを選び Add ボタンを押す.
4 Done ボタンを押す.


Q 「'project'にビルドエラー」というウインドウが出て、続いて「ディスクがいっぱいですので前のコマンドを実行できませんでした。 結果コード=-34 OK」が出る.

A (原因)Symantec C 8 ではプロジェクトが大きくなり,フロッピーディスクに収まらない.
(対策)フロッピーではなく,ハードディスクに Symantec C 8.0(PPC) project のフォルダをいれて,ハードディスクで実行する.


Q エラー「'HugeArray.c'ファイル;行21'scl.c'をコンパイル中 警告;代入が誤っている可能性がある...」が出る.

A (原因)多くの人が if ( a == b ) のつもりで if ( a = b ) と書き間違えるので,コンパイラによっては「警告;代入が誤っている可能性がある」というのが出る.
(対策)気にしない.


Q StartTextOnly, StartDrawingOnly で syntax error がでる.

A (原因) StartTextOnly, StartDrawingOnly に古いコードが残っていて,他の部分と合わなくなった.(SCL 1.1.3 で修正済み)
(対策)SCL 1.1.3 以上にバージョンアップする.


Q プログラムを実行すると,「コ・プロセッサがありません」,「不当な F ライン命令です」と出て暴走する.

A (原因)Symantec C++ & Think C 6 用のプロジェクトのサンプルでは(誤って)数値演算プロセッサを使う設定になっているが,Performa, PowerBook, Power Mac 等では数値演算プロセッサを使えないのでエラーとなる.
(対策)Edit メニューの Options で Think C ノ を選び,ダイアログの左上の Language Settings を押してCompiler Settings を選ぶ.Generate 68881 instructions のチェックを外す.


Q 日本語が出力できない.

A (原因)フォントが日本語になっていない.
(対策)Start(); の前に
SetFontName("Osaka");
を入れると日本語が表示できるようになる.printf が日本語対応になっていないときは,文字によってうまく出力されないことがある.これは,文字によって '\' や '%' が入っていることがあるためである.このときは,うまく出力されない文字の直後に '\' や '%' を入れると出力できる.


Q Think C 5.0 で data segment too big の Link error が出て動かない.

A (原因)大域変数の使うメモリの量が Think C 5.0 で扱えるものを超えている.(SCL 1.3 で修正済み)
(対策1)SCL 1.3 以上の版をダウンロードして使う.
(対策2)SCL.c ので #include #include の2行を削る.


Q 「Macintosh ではじめる C」の void plotFunc(double (*p)(double)) の引数の型がわからない.

A p がポインタで,(*p) は g と同じ型の関数なので,double (*p)(double) となる.


Q ウィンドウのサイズを指定するには?

A manual.note 参照.
void SetDrawingBounds(int x1, int y1, int x2, int y2) Start(); の前に使う.グラフィックウィンドウの位置を左上が (x1, y1) 右下が (x2, y2) とする.


Q <file ヤSCL.c ユnot found>が出て止まってしまう.

A(原因)同じコンパイラがハードディスクに2つ入っている. (対策)使っていないコンパイラをハードディスクから消す.


Q カラーを使うには?

A QuickDraw の ForeColor(color) 命令でredColor, blueColor, greenColor, cyanColor, magentaColor, yeallowColor, whiteColor, blackColor の8色が指定できる.もっと多くの色を出すには,SCL 1.1 以上で Start() の代わりに StartColor() を使う.色は void SetRGBColor(double r,double g,double b) で赤 r %,緑 g %,青 b %に設定する.このあと,図形を PaintRect などで描くと設定された色で描かれる.
[例]SetRGBColor(80, 100, 80);  明るい緑色にする.


Q テキストのスクロールが急に遅くなる.

A(原因)Macintosh の TextEdit というルーチンを使っていると,テキストの量が 32kb に近くなると,スクロールなどが急激に遅くなる.
(対策)SCL 1.3.2 以降で SetTextCharNum でテキストの文字数を少なめに設定する.


Q 絵が印刷,保存できない.

A(原因)点を数万個打つなど,非常に複雑な図形は,BeginPrinting(), EndPrinting() での印刷,および BeginSaving(), EndSaving() での保存がメモリ不足でできないことがある.
(対策)複雑な図形の印刷には BeginBitMapPrinting(), EndBitMapPrinting() を,保存には BeginBitMapSaving(), EndBitMapSaving() を使う.


Q CodeWarrior での初回のコンパイルが非常に遅い.

A(原因)Access Path の順番が非効率的.
(対策)Edit メニューの Preferences... または Project Settings... の Access Paths の System で {Compiler f}:SCL Folder:Libraries を一番上に移動する.


Q %lf で double 型の変数が出力できない.

A(原因)本来は printf での double 型の出力には %f を使う.CodeWarrior 11 では,%lf を %f と解釈しなくなった.
(対策1)double 型の出力には %lf ではなく %f を使う.
(対策2)SCL 1.3.6 以降を使う.


Q CodeWarrior で "New and invalid access paths for メprojectモ" の警告が出る.

A(原因)CodeWariior 11 (PPC) 用のプロジェクトのパスの設定の誤り.
(対策1)Edit メニューから Project Settingsノ を選び,ダイアログの左側で Project の Access Paths を選ぶ.右下の System: のパスで 「CW11:Metrowerks:Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:」を選び,Change ボタンを押す.CodeWarrior の入っているところから,MacOS Support,Libraries,MacOS Common のフォルダを順番に選び,右下のラジオボタンで Compiler relative を選び,下の Select メMacOS Commonモ ボタンを押す. 「CW11:Metrowerks:Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:」についても同様.
(対策2)最新の SCL をダウンロードし,その中のサンプルプロジェクトを使う.


Q Symantec C++ で ParametersDialog を使ったときに変数の値が変更されない.

A(原因)未調査.(SCL 1.3.1 では正常に動く)
(対策)最新の SCL をダウンロードして使う.


Q プログラムを動かすと「”project.pef”存在しないシステム・トラップです」というメッセージでシステムエラーとなる.

A(原因)Symantec C++ のプロジェクトファイルが壊れている.
(対策)もう一度 SCL の project samples のフォルダから Symantec C8.0(PPC) project のフォルダをコピーしてハードディスク上で動かす.


Q PlotFrame2D で文字化けする.

A(原因)PlotFrame2D の中の sprintf で %.*lf を使っている.
(対策1)ファイル Plot.c の PlotFrame2D の中の sprintf で使われている %.*lf を %.*f に修正する.
(対策2)SCL 1.5 以降を使う.


Q ファイル "s_Common.c"; ライン 275;
エラー: 'GetIndPattern'関数の第一引数がプロトタイプと不対応
というエラーが出る.


A (原因)Think C 7.0 の Pattern のタイプに合わせていなかった.1.5.1 で修正.
(対策1)SCL を 1.5.1 以降にバージョンアップする.
(対策2)s_Common.c の中の関数 SetPattern の,
GetIndPattern(pat,0,pnumber);
の行を
GetIndPattern(&pat,0,pnumber);
に変更する.


Q コードセグメントのオーバーフローのエラーが出る.

A (原因)SCL がバージョンアップで大きくなり,Think C 5.0 ~ Symantec C++ 8.0 の 68k 用までで1つのセグメントにコードが収まらなくなった.1.5.1 で修正.
(対策1)SCL 1.5.1 以降の project sample を使う.
(対策2)プロジェクトの中の SCL.c(SCL6.c, SCL7.c) を Source メニューの Remove でプロジェクトから 外し,以下のようなファイルを作って Source メニューの Add Files... でプロジェクトに入れ,ドラッグして引き下げセグメントを分ける(ファイル名の間に点線が入る状態にする).
Think C 5.0, Symantec C++ 8.0 68k用の場合:
SCL フォルダの Libraries の中の SCLPart1.c, SCLPart2.c, SCLPart3.c をプロジェクトに加える.
Think C 6.0 の場合:
以下の3つのファイルを作ってプロジェクトに入れる. -------------------------- SCL6Part1.c -------------------------
#undef THINK_C
#define THINK_C 6
#include <SCLPart1.c>
-------------------------- SCL6Part2.c -------------------------
#undef THINK_C
#define THINK_C 6
#include <SCLPart2.c>
-------------------------- SCL6Part3.c -------------------------
#undef THINK_C
#define THINK_C 6
#include <SCLPart3.c>
----------------------------------------------------------------
Think C 7.0,Symantec C ++ 7.0 の場合:
以下の3つのファイルを作ってプロジェクトに入れる. -------------------------- SCL7Part1.c -------------------------
#undef THINK_C
#define THINK_C 7
#include <SCLPart1.c>
-------------------------- SCL7Part2.c -------------------------
#undef THINK_C
#define THINK_C 7
#include <SCLPart2.c>
-------------------------- SCL7Part3.c -------------------------
#undef THINK_C
#define THINK_C 7
#include <SCLPart3.c>
----------------------------------------------------------------


Q Symantec C++ 8.4 で SCL のプロジェクトサンプルが動かない.

A (原因)Symantec C++ 8.4 の Power Mac Development フォルダには必要なファイルがたくさん抜けている.
(対策)Power Mac & 68K Development フォルダを CD Rom からハードディスクにコピーして使う.


Q CodeWarrior Pro 4 で「undefined identifier 's_ss'」のエラーが出る.

A (原因)SCL のファイル StartSCL.h で変数の宣言をしていない.
(対策1)SCL 1.7.2 以降を使う.
(対策2)CodeWarrior Pro 3 のプロジェクトを CodeWarrior Pro4 で開くと Pro 4 用のプロジェクトに変換されるので,それを使う.
(対策3)SCL フォルダの中の Libraries フォルダの中の StartSCL.h の最初の方に
typedef struct s_ssType
{
        int startFlag;
}       s_ssType;
があるが,その下に1行
extern s_ssType s_ss;
を追加する.



Cのページに戻る

さっちゃんのページに戻る

高橋研究室ホームページに戻る