エラーコード等各種単純定義

エラーコード等各種単純定義


ヘッダファイル「ImageFuncDef.h」で【#define】定義し
た。コノ画像処理ライブラリ用の数学的定数値とか、
メッソド(メンバー関数)の返すエラーコード等について
解説します!
先ず、以下に「ImageFuncDef.h」の内容を紹介します!

#if !defined(IMAGE_FUNCDEF__INCLUDED_)
#define IMAGE_FUNCDEF__INCLUDED_


#include    <stdio.h>                       // 標準入出力ヘッダー
#include    <stdlib.h>                      // 標準ライブラリヘッダー
#include    <math.h>                        // 算術関数ライブラリヘッダー
#include    <float.h>                       // 算術上下限ライブラリヘッダー
#include    <time.h>


/***********************************************************************/
/*****      画像ライブラリ用:単純定義                              ****/
/***********************************************************************/


#undef      TRUE
#undef      FALSE
#undef      PAI

#define     TRUE    1                       // 真
#define     FALSE   0                       // 偽

#define     PAI     3.1415926535897931      // 定数 π
#define     PAI_00  0.0                     // 定数 0.0π
#define     PAI_025 (PAI*0.25)              // 定数 0.25π
#define     PAI_05  (PAI*0.5)               // 定数 0.5π
#define     PAI_075 (PAI*0.75)              // 定数 0.75π
#define     PAI_08  (PAI*0.8)               // 定数 0.8π
#define     PAI_10  (PAI)                   // 定数 1.0π
#define     PAI_15  (PAI*1.5)               // 定数 1.5π
#define     PAI_20  (PAI*2.0)               // 定数 2.0π
#define     PAI_25  (PAI*2.5)               // 定数 2.5π
#define     PAI_30  (PAI*3.0)               // 定数 3.0π
#define     PAI_35  (PAI*3.5)               // 定数 3.5π
#define     PAI_40  (PAI*4.0)               // 定数 4.0π
#define     PAI_80  (PAI*8.0)               // 定数 8.0π

#undef      MAX_BYTE
#undef      MAX_SHORT
#undef      MAX_INT
#undef      MAX_REAL

#define     MAX_BYTE    0x0ff           // BYTE型の最大値
#define     MAX_SHORT   0x07fff         // short型の最大値
#define     MAX_INT     0x07fffffff     // int型の最大値
#define     MAX_REAL    FLT_MAX         // 実数の最大値



/***********************************************************************/
/*****          ステータス情報:画像処理関数のエラーリターンコード  ****/
/*****          STI_ARY_?は、ここで定義した値に                     ****/
/*****          STI_ARY_? - n × 10     n は、出現順(1..9)        ****/
/***********************************************************************/

#define     END_STI     0               // 正常終了
#define     STI_ARY_0   -1000           // 配列情報: Ptr の値が不正
#define     STI_ARY_1   -1001           // 配列情報: adr の値が不正
#define     STI_ARY_2   -1002           // 配列情報: h   の値が不正
#define     STI_ARY_3   -1003           // 配列情報: v   の値が不正
#define     STI_ARY_4   -1004           // 配列情報: inc の値が不正
#define     STI_ARY_5   -1005           // 配列情報: w   の値が不正
#define     STI_FLG     -3000           // 単純な型の引数が不正
#define     STI_ICS     -4000           // 設定値と矛盾 InConSistency
#define     STI_MEM     -5000           // メモリ不足
#define     STI_RUN     -6000           // 実行エラー STI_RUN - 任意
#define     STI_NOT     -9000           // 未実装機能 STI_NOT - 任意




/***********************************************************************/
/*****      GUI情報:画面操作関連コード                          ****/
/***********************************************************************/

#define     KEYBOARD_LEFT   1           // 「←」キー
#define     KEYBOARD_RIGHT  2           // 「→」キー
#define     KEYBOARD_UP     3           // 「↑」キー
#define     KEYBOARD_DOWN   4           // 「↓」キー




//page
/***********************************************************************/
/*****          単純な型定義                                        ****/
/***********************************************************************/

#undef  VREGISTER
#undef  VSTATIC
#undef  VEXTERN

#define VREGISTER       volatile register
#define VSTATIC         volatile static
#define VEXTERN         volatile extern


#undef  INT1
#undef  INT2
#undef  INT4
#undef  BYTE
#undef  UWORD
#undef  DWORD
#undef  LONG

typedef unsigned char   INT1;       // 1バイト、符号無しデータ
typedef short           INT2;       // 2バイト、符号付きデータ
typedef int             INT4;       // 4バイト、符号付きデータ
typedef unsigned char   BYTE;       // 1バイト、符号無しデータ
typedef unsigned short  UWORD;      // 2バイト、符号無しデータ
typedef unsigned long   DWORD;      // 4バイト、符号無しデータ
typedef long            LONG;       // 4バイト、符号付きデータ


#endif // !defined(IMAGE_FUNCDEF__INCLUDED_)

1.真偽π

#undef      TRUE
#undef      FALSE
#undef      PAI

#define     TRUE    1                       // 真
#define     FALSE   0                       // 偽

#define     PAI     3.1415926535897931      // 定数 π
#define     PAI_00  0.0                     // 定数 0.0π
#define     PAI_025 (PAI*0.25)              // 定数 0.25π
#define     PAI_05  (PAI*0.5)               // 定数 0.5π
#define     PAI_075 (PAI*0.75)              // 定数 0.75π
#define     PAI_08  (PAI*0.8)               // 定数 0.8π
#define     PAI_10  (PAI)                   // 定数 1.0π
#define     PAI_15  (PAI*1.5)               // 定数 1.5π
#define     PAI_20  (PAI*2.0)               // 定数 2.0π
#define     PAI_25  (PAI*2.5)               // 定数 2.5π
#define     PAI_30  (PAI*3.0)               // 定数 3.0π
#define     PAI_35  (PAI*3.5)               // 定数 3.5π
#define     PAI_40  (PAI*4.0)               // 定数 4.0π
#define     PAI_80  (PAI*8.0)               // 定数 8.0π

このライブラリは、昭和の時代にベンチャー企業ADS社の
画像処理装置用制御プログラムをC言語で記載したのが元で
す!
その為【C++】の「bool」型と定数「true/false」が
存在しなかった時に記述されたソースコードが元に成って
居ます!
注意して欲しいのは、「#undef TRUE」と一旦、定義を削除
してから新たに
「#define TRUE 1」定義し直して居る事です!
このヘッダファイルは、
「#include <stdio.h>」とかと他の標準的なシステム定義を
記載して有るシステムが用意したヘッダファイルを
インクルードしている為に、念の為、重複定義を防ぐとして
コノようにしています!
次にπ(円周率を)英大文字「PAI」に定義して使用して居
ます?!
これも使用するコンパイラシステムでは既に同名で定義され
ている可能性が有るので「#undef」から始めています!
そして私のライブラリで使用する定数としては、やや
オーバースペック精度「3.1415926535897931」の値にして
います?!
更に「PAI_00」から「PAI_80」もπに乗数を付けた物「
何かは、定義の右側のコメントで確認して下さい」を
画像処理ライブラリの内部で使用≪主にグラフィック系や
画像の回転処理に活用≫しています

2.単純なデータ型の最大値

#undef      MAX_BYTE
#undef      MAX_SHORT
#undef      MAX_INT
#undef      MAX_REAL

#define     MAX_BYTE    0x0ff           // BYTE型の最大値
#define     MAX_SHORT   0x07fff         // short型の最大値
#define     MAX_INT     0x07fffffff     // int型の最大値
#define     MAX_REAL    FLT_MAX         // 実数の最大値

これも使用するコンパイラシステムでは既に同名で定義され
ている可能性が有るので「#undef」から始めています!
そして私のライブラリで使用する定数としては、
右側のコメントで確認して下さい!
※FLT_MAXに関しては、「#include <float.h>」を
インクルードした場合に使える筈ですが、読者様が使用を
考えているコンパイラ処理系に存在しない場合も考えられ
るので確認し、代替を考えて下さい!
特異な処理系を使用される方には造作も無い事でしょう※

3.ステータス情報

「画像処理関数のエラーリターンコード」として
「リターンコード」を
「END_STI」を返したら、正常に関数が実行した事を示し、
「STI_???」と「???」の色々な関数を使用した時の不具合≪
関数への実引数の記述間違い、及び、関数を実行させた時の
実行エラー≫が何で遭ったかを関数を呼び出した側へ答え
として返す機構です!
※ここ「#define」ブロックの前にブロック説明用の
コメントが有ります※

/***********************************************************************/
/*****          ステータス情報:画像処理関数のエラーリターンコード  ****/
/*****          STI_ARY_?は、ここで定義した値に                     ****/
/*****          STI_ARY_? - n × 10     n は、出現順(1..9)        ****/
/***********************************************************************/

#define     END_STI     0               // 正常終了
#define     STI_ARY_0   -1000           // 配列情報: Ptr の値が不正
#define     STI_ARY_1   -1001           // 配列情報: adr の値が不正
#define     STI_ARY_2   -1002           // 配列情報: h   の値が不正
#define     STI_ARY_3   -1003           // 配列情報: v   の値が不正
#define     STI_ARY_4   -1004           // 配列情報: inc の値が不正
#define     STI_ARY_5   -1005           // 配列情報: w   の値が不正
#define     STI_FLG     -3000           // 単純な型の引数が不正
#define     STI_ICS     -4000           // 設定値と矛盾 InConSistency
#define     STI_MEM     -5000           // メモリ不足
#define     STI_RUN     -6000           // 実行エラー STI_RUN - 任意
#define     STI_NOT     -9000           // 未実装機能 STI_NOT - 任意

更に捕捉すると「STI_ARY_?」とは、「STI_ARY_0」、
「STI_ARY_1」、「STI_ARY_2」、「STI_ARY_3」、
「STI_ARY_4」、「STI_ARY_5」の意味です!
コレの意味は、個別の右側コメントを確認して下さい!
そして「STI_ARY_? - n × 10 n は、出現順(1..9)」の
「n」は、配列情報=「TypeArray」をココでは意味します
≪元々ADS社の画像処理装置では、ハードウェア画像処理
機構を駆動させる情報管理構造体「TypeImage」が有ったの
でソフトウェア処理用の構造体「TypeArray」を区別して
【配列情報】と言う名称にしていた名残です!
申し訳御座いません!ナニブンニモ昭和から記述されている
ソースコードですのでと言い訳≫
ここで「n」に関して具体例で説明します!

TypeArray	a;	// 配列情報(画像を示すデータ型)で定義した変数「a」
TypeArray	b;	// 配列情報(画像を示すデータ型)で定義した変数「b」

int	sti;		// ステータス・インフォメーションを格納する変数

sti = Copy( &a, &b );	// 画像a から、画像b へ画像データをコピー

字面通り、このプログラムを実行させると変数「sti」には
「-1010」の値が格納され「Copy(a,b);」がエラーを発生し
実行出来無かった事が分かります!
「-1010」は、【n=1】で有り、「STI_ARY_0」に
【STI_ARY_0-n10】⇒【-1000-110】⇒【-1000-10】⇒
【-1010】と成ります!
この意味する所は、「TypeArray」で定義された実引数が
エラーの元で
「Ptr の値が不正」詰り、画像メモリ実体を表すポインタが
不正(ここでは空ポインタ)を意味し、更に「n=1」と
「TypeArray」を要求する実引数の1番目が問題で遭った
事を示します!とエラーの意味と場所が分かります!
「TypeArray」に関しては、解説クラスTypeArray
を参考にして下さい!
このクラスが、この画像処理ライブラリで一番重要な
クラスです!

4.単純な型定義

/***********************************************************************/
/*****          単純な型定義                                        ****/
/***********************************************************************/

#undef  VREGISTER
#undef  VSTATIC
#undef  VEXTERN

#define VREGISTER       volatile register
#define VSTATIC         volatile static
#define VEXTERN         volatile extern


#undef  INT1
#undef  INT2
#undef  INT4
#undef  BYTE
#undef  UWORD
#undef  DWORD
#undef  LONG

typedef unsigned char   INT1;       // 1バイト、符号無しデータ
typedef short           INT2;       // 2バイト、符号付きデータ
typedef int             INT4;       // 4バイト、符号付きデータ
typedef unsigned char   BYTE;       // 1バイト、符号無しデータ
typedef unsigned short  UWORD;      // 2バイト、符号無しデータ
typedef unsigned long   DWORD;      // 4バイト、符号無しデータ
typedef long            LONG;       // 4バイト、符号付きデータ

上記の様に「#undef」で一旦、全て定義を殺し、
「#define」で再定義しています!
ヒョットシテ、システムに依っては既にココで記載した
定義名と同じ物が「#include <stdio.h>」・
「#include <stdlib.h>」で定義され齟齬が生じる可能性も
捨て切れ無いからです!
次に「typedef unsigned char INT1;」から
「typedef long LONG;」と有るのは、「#define」で定義
されているシステムが有る場合に「typedef」とC言語本体
のキーワードでこのライブラリで定義されている整数型の
データサイズ(バイト数)を定義してサイズに依る齟齬を
排除した心算です!

文末

いいなと思ったら応援しよう!