procmsg - メッセージの操作

------------------------------------------------------------------------------
DataOpenMode

typedef enum
{
	DATA_READ,
	DATA_WRITE,
	DATA_APPEND
} DataOpenMode;

procmsg_open_data_file() 等でファイルを開く際に指定するモードです。

DATA_READ: 読み込みモード
DATA_WRITE: 書き込み(上書き)モード
DATA_APPEND: 追加書き込みモード

------------------------------------------------------------------------------
#define MSG_NEW			(1U << 0)
#define MSG_UNREAD		(1U << 1)
#define MSG_MARKED		(1U << 2)
#define MSG_DELETED		(1U << 3)
#define MSG_REPLIED		(1U << 4)
#define MSG_FORWARDED		(1U << 5)

#define MSG_CLABEL_SBIT	(7)		/* start bit of color label */
#define MAKE_MSG_CLABEL(h, m, l)	(((h) << (MSG_CLABEL_SBIT + 2)) | \
					 ((m) << (MSG_CLABEL_SBIT + 1)) | \
					 ((l) << (MSG_CLABEL_SBIT + 0)))

#define MSG_CLABEL_NONE		MAKE_MSG_CLABEL(0U, 0U, 0U)
#define MSG_CLABEL_1		MAKE_MSG_CLABEL(0U, 0U, 1U)
#define MSG_CLABEL_2		MAKE_MSG_CLABEL(0U, 1U, 0U)
#define MSG_CLABEL_3		MAKE_MSG_CLABEL(0U, 1U, 1U)
#define MSG_CLABEL_4		MAKE_MSG_CLABEL(1U, 0U, 0U)
#define MSG_CLABEL_5		MAKE_MSG_CLABEL(1U, 0U, 1U)
#define MSG_CLABEL_6		MAKE_MSG_CLABEL(1U, 1U, 0U)
#define MSG_CLABEL_7		MAKE_MSG_CLABEL(1U, 1U, 1U)

#define MSG_CLABEL_ORANGE	MSG_CLABEL_1
#define MSG_CLABEL_RED		MSG_CLABEL_2
#define MSG_CLABEL_PINK		MSG_CLABEL_3
#define MSG_CLABEL_SKYBLUE	MSG_CLABEL_4
#define MSG_CLABEL_BLUE		MSG_CLABEL_5
#define MSG_CLABEL_GREEN	MSG_CLABEL_6
#define MSG_CLABEL_BROWN	MSG_CLABEL_7

/* RESERVED */
#define	MSG_RESERVED		(1U << 31)

#define MSG_CLABEL_FLAG_MASK	(MSG_CLABEL_7)

typedef guint32 MsgPermFlags;

#define MSG_MOVE		(1U << 0)
#define MSG_COPY		(1U << 1)
#define MSG_QUEUED		(1U << 16)
#define MSG_DRAFT		(1U << 17)
#define MSG_ENCRYPTED		(1U << 18)
#define MSG_IMAP		(1U << 19)
#define MSG_NEWS		(1U << 20)
#define MSG_SIGNED		(1U << 21)
#define MSG_FLAG_CHANGED	(1U << 27)
#define MSG_CACHED		(1U << 28)
#define MSG_MIME		(1U << 29)
#define MSG_INVALID		(1U << 30)
#define MSG_RECEIVED		(1U << 31)

#define MSG_CACHED_FLAG_MASK	(MSG_MIME)

typedef guint32 MsgTmpFlags;

#define MSG_SET_FLAGS(msg, flags)	{ (msg) |= (flags); }
#define MSG_UNSET_FLAGS(msg, flags)	{ (msg) &= ~(flags); }
#define MSG_SET_PERM_FLAGS(msg, flags) \
	MSG_SET_FLAGS((msg).perm_flags, flags)
#define MSG_SET_TMP_FLAGS(msg, flags) \
	MSG_SET_FLAGS((msg).tmp_flags, flags)
#define MSG_UNSET_PERM_FLAGS(msg, flags) \
	MSG_UNSET_FLAGS((msg).perm_flags, flags)
#define MSG_UNSET_TMP_FLAGS(msg, flags) \
	MSG_UNSET_FLAGS((msg).tmp_flags, flags)

#define MSG_IS_NEW(msg)			(((msg).perm_flags & MSG_NEW) != 0)
#define MSG_IS_UNREAD(msg)		(((msg).perm_flags & MSG_UNREAD) != 0)
#define MSG_IS_MARKED(msg)		(((msg).perm_flags & MSG_MARKED) != 0)
#define MSG_IS_DELETED(msg)		(((msg).perm_flags & MSG_DELETED) != 0)
#define MSG_IS_REPLIED(msg)		(((msg).perm_flags & MSG_REPLIED) != 0)
#define MSG_IS_FORWARDED(msg)		(((msg).perm_flags & MSG_FORWARDED) != 0)

#define MSG_GET_COLORLABEL(msg)		(((msg).perm_flags & MSG_CLABEL_FLAG_MASK))
#define MSG_GET_COLORLABEL_VALUE(msg)	(MSG_GET_COLORLABEL(msg) >> MSG_CLABEL_SBIT)
#define MSG_SET_COLORLABEL_VALUE(msg, val) \
	MSG_SET_PERM_FLAGS(msg, ((((guint)(val)) & 7) << MSG_CLABEL_SBIT))

#define MSG_IS_MOVE(msg)		(((msg).tmp_flags & MSG_MOVE) != 0)
#define MSG_IS_COPY(msg)		(((msg).tmp_flags & MSG_COPY) != 0)

#define MSG_IS_QUEUED(msg)		(((msg).tmp_flags & MSG_QUEUED) != 0)
#define MSG_IS_DRAFT(msg)		(((msg).tmp_flags & MSG_DRAFT) != 0)
#define MSG_IS_ENCRYPTED(msg)		(((msg).tmp_flags & MSG_ENCRYPTED) != 0)
#define MSG_IS_IMAP(msg)		(((msg).tmp_flags & MSG_IMAP) != 0)
#define MSG_IS_NEWS(msg)		(((msg).tmp_flags & MSG_NEWS) != 0)
#define MSG_IS_SIGNED(msg)		(((msg).tmp_flags & MSG_SIGNED) != 0)
#define MSG_IS_FLAG_CHANGED(msg)	(((msg).tmp_flags & MSG_FLAG_CHANGED) != 0)
#define MSG_IS_CACHED(msg)		(((msg).tmp_flags & MSG_CACHED) != 0)
#define MSG_IS_MIME(msg)		(((msg).tmp_flags & MSG_MIME) != 0)
#define MSG_IS_INVALID(msg)		(((msg).tmp_flags & MSG_INVALID) != 0)
#define MSG_IS_RECEIVED(msg)		(((msg).tmp_flags & MSG_RECEIVED) != 0)

#define WRITE_CACHE_DATA_INT(n, fp)
#define WRITE_CACHE_DATA(data, fp)

------------------------------------------------------------------------------
MsgFlags

struct _MsgFlags
{
	MsgPermFlags perm_flags;
	MsgTmpFlags  tmp_flags;
};

MsgFlags は各メッセージに対して付加されるフラグを表します。

------------------------------------------------------------------------------
MsgInfo

struct _MsgInfo
{
	guint  msgnum;
	gsize  size;
	time_t mtime;
	time_t date_t;

	MsgFlags flags;

	gchar *fromname;

	gchar *date;
	gchar *from;
	gchar *to;
	gchar *cc;
	gchar *newsgroups;
	gchar *subject;
	gchar *msgid;
	gchar *inreplyto;

	GSList *references;

	FolderItem *folder;
	FolderItem *to_folder;

	gchar *xface;

	/* used only for temporary messages */
	gchar *file_path;

	/* used only for encrypted (and signed) messages */
	MsgEncryptInfo *encinfo;
};

MsgInfo 構造体は各メッセージの情報を表します。

------------------------------------------------------------------------------
MsgFileInfo

struct _MsgFileInfo
{
	gchar *file;
	MsgFlags *flags;
};

MsgFileInfo 構造体はメッセージファイルとそのフラグ情報をひとまとめにして
扱うためのものです。 folder_item_add_msgs() 等で使用されます。

------------------------------------------------------------------------------
MsgEncryptInfo

struct _MsgEncryptInfo
{
	gchar *plaintext_file;
	gchar *sigstatus;
	gchar *sigstatus_full;
	gboolean decryption_failed;
};

MsgEncryptInfo 構造体は電子署名・暗号化の情報を格納するためのものです。

------------------------------------------------------------------------------
typedef FILE * (*DecryptMessageFunc)		(MsgInfo	*msginfo,
						 MimeInfo      **mimeinfo);

暗号化されたメッセージを復号化する際に呼び出すコールバック関数の型です。
procmsg_set_decrypt_message_func() で指定します。

------------------------------------------------------------------------------
GHashTable *procmsg_msg_hash_table_create	(GSList		*mlist);

MsgInfo のリストから、メッセージ番号をキーにしたハッシュテーブルを作成します。

返ったハッシュテーブルは g_hash_table_destroy() で解放する必要があります。

mlist: MsgInfo 構造体へのポインタのリスト
戻り値: メッセージ番号をキーにしたハッシュテーブル

------------------------------------------------------------------------------
void procmsg_msg_hash_table_append		(GHashTable	*msg_table,
						 GSList		*mlist);

既存の MsgInfo のハッシュテーブルに新たな MsgInfo を追加します。

mlist: MsgInfo 構造体へのポインタのリスト

------------------------------------------------------------------------------
GHashTable *procmsg_to_folder_hash_table_create	(GSList		*mlist);

(省略)

------------------------------------------------------------------------------
gint procmsg_read_cache_data_str	(FILE		*fp,
					 gchar	       **str);

キャッシュファイルから文字列を1個読み込み、新たに文字列用のメモリを確保して
str に返します。

fp: キャッシュファイルの FILE ポインタ
str: 返す文字列を格納する変数へのポインタ
戻り値:  0: 成功
        -1: エラー(ファイルが読み込めない、または壊れている)

------------------------------------------------------------------------------
GSList *procmsg_read_cache		(FolderItem	*item,
					 gboolean	 scan_file);

フォルダ item に対応するキャッシュファイルを読み込み、 MsgInfo のリストを
生成して返します。 scan_file が TRUE の場合はキャッシュデータに対応する
メッセージファイルが変更されているかどうかを厳密にチェックします
(パフォーマンスはその分低下します)。

返ったメッセージリストは procmsg_msg_list_free() で解放する必要があります。

item: FolderItem オブジェクト
scan_file: TRUE の場合メッセージデータの変更をチェックする
戻り値: MsgInfo 構造体へのポインタのリスト

------------------------------------------------------------------------------
void	procmsg_set_flags		(GSList		*mlist,
					 FolderItem	*item);

フォルダ item に対応するフラグ(マーク)ファイルを読み込み、 item と mlist
に反映させます。

item: FolderItem オブジェクト
mlist: MsgInfo 構造体へのポインタのリスト

------------------------------------------------------------------------------
void	procmsg_mark_all_read		(FolderItem	*item);

フォルダ item 内のすべてのメッセージを既読にし、マークファイルを更新します。

item: FolderItem オブジェクト

------------------------------------------------------------------------------
GSList *procmsg_sort_msg_list		(GSList		*mlist,
					 FolderSortKey	 sort_key,
					 FolderSortType	 sort_type);

MsgInfo のリスト mlist を sort_key と sort_type に従ってソートします。
mlist 自体を変更するため、元のリストは使用できなくなります。

mlist: MsgInfo 構造体へのポインタのリスト
sort_key: ソートの対象となるキー
sort_type: 昇順または降順
戻り値: ソートしたメッセージリスト

------------------------------------------------------------------------------
gint	procmsg_get_last_num_in_msg_list(GSList		*mlist);

メッセージリスト mlist 中における最大のメッセージ番号を返します。

mlist: MsgInfo 構造体へのポインタのリスト
戻り値: 最大のメッセージ番号

------------------------------------------------------------------------------
void	procmsg_msg_list_free		(GSList		*mlist);

MsgInfo のリストを MsgInfo 構造体自身も含めて解放します。

mlist: MsgInfo 構造体へのポインタのリスト

------------------------------------------------------------------------------
void	procmsg_write_cache		(MsgInfo	*msginfo,
					 FILE		*fp);

メッセージ情報 msginfo をキャッシュファイル fp に追加で書き込みます。

msginfo: MsgInfo 構造体へのポインタ
fp: キャッシュファイルの FILE ポインタ

------------------------------------------------------------------------------
void	procmsg_write_flags		(MsgInfo	*msginfo,
					 FILE		*fp);

メッセージ情報 msginfo のフラグ情報をフラグ(マーク)ファイル fp に追加で
書き込みます。

msginfo: MsgInfo 構造体へのポインタ
fp: マークファイルの FILE ポインタ

------------------------------------------------------------------------------
void	procmsg_write_cache_list	(FolderItem	*item,
					 GSList		*mlist);

フォルダ item に対応するキャッシュファイルにメッセージリスト mlist の
各メッセージ情報を書き出します(以前のキャッシュファイルは上書きされます)。
FolderItem::cache_dirty フラグはリセットされます。

item: FolderItem オブジェクト
mlist: MsgInfo 構造体へのポインタのリスト

------------------------------------------------------------------------------
void	procmsg_write_flags_list	(FolderItem	*item,
					 GSList		*mlist);

フォルダ item に対応するフラグ(マーク)ファイルにメッセージリスト mlist の
各フラグ情報を書き出します(以前のマークファイルは上書きされます)。
item にマークがキューイングされている場合はそれも書き出します。
FolderItem::mark_dirty フラグはリセットされます。

item: FolderItem オブジェクト
mlist: MsgInfo 構造体へのポインタのリスト

------------------------------------------------------------------------------
void	procmsg_write_flags_for_multiple_folders
					(GSList		*mlist);

mlist が複数のフォルダのメッセージから構成される場合に各フォルダに
各メッセージのフラグ情報を書き出します。フラグ情報は追加で書き込まれるため、
以前のフラグ情報と重複する場合があります。その場合は最後に書き込んだ方が
優先されます。

mlist: MsgInfo 構造体へのポインタのリスト

------------------------------------------------------------------------------
void	procmsg_flush_mark_queue	(FolderItem	*item,
					 FILE		*fp);

フォルダ item にマークがキューイングされている場合、それをマークファイル fp
に追加で書き出し、マークキューをクリアします。

item: FolderItem オブジェクト
fp: マークファイルの FILE ポインタ

------------------------------------------------------------------------------
void	procmsg_add_mark_queue		(FolderItem	*item,
					 gint		 num,
					 MsgFlags	 flags);

フォルダ item にメッセージ番号 num に対するフラグ情報 flags を
キューイングします。キューイングしたフラグ情報は procmsg_write_flags_list()
または procmsg_flush_mark_queue() で書き出せます。

item: FolderItem オブジェクト
num: メッセージ番号
flags: num に対応するフラグ情報

------------------------------------------------------------------------------
void	procmsg_add_flags		(FolderItem	*item,
					 gint		 num,
					 MsgFlags	 flags);

フォルダ item に対応するフラグ(マーク)ファイルにフラグ情報 flags を追加で
書き込みます。

item: FolderItem オブジェクト
num: メッセージ番号
flags: num に対応するフラグ情報

------------------------------------------------------------------------------
void	procmsg_get_mark_sum		(FolderItem	*item,
					 gint		*new,
					 gint		*unread,
					 gint		*total,
					 gint		*min,
					 gint		*max,
					 gint		 first);

フォルダ item に対応するフラグ(マーク)ファイルのフラグ情報を読み込み、
集計してその結果を返します。 first が1以上の場合はメッセージ番号が first
以上のもののみ集計します。

item: FolderItem オブジェクト
new: 新着メッセージ数
unread: 未読メッセージ数
total: 総数
min: 最小のメッセージ番号
max: 最大のメッセージ番号
first: 集計対象とする最小のメッセージ番号

------------------------------------------------------------------------------
FILE   *procmsg_open_data_file		(const gchar	*file,
					 guint		 version,
					 DataOpenMode	 mode,
					 gchar		*buf,
					 size_t		 buf_size);

データファイル file をオープンし、 FILE ポインタを返します。
mode を DATA_READ モードに指定した場合は、指定したバージョン番号
version のチェックを行い、バージョンが異なった場合は NULL が返ります。
DATA_WRITE モードでオープンした場合は version を先頭に書き込んで FILE
ポインタを返します。
DATA_APPEND モードでオープンした場合は、バージョンが一致した場合は
追加書き込みモードで FILE ポインタを返します。バージョンが異なった場合は
DATA_WRITE モードでオープンして FILE ポインタを返します。

file: データファイルのパス
version: データファイルのバージョン
mode: ファイルをオープンするモード
buf: DATA_READ 時に使用するバッファ領域を指定します。 NULL の場合は
     デフォルトの動作になります。
buf_size: buf のサイズ
戻り値: FILE ポインタ

------------------------------------------------------------------------------
FILE   *procmsg_open_cache_file		(FolderItem	*item,
					 DataOpenMode	 mode);

フォルダ item に対応するキャッシュファイルをモード mode で開きます。

item: FolderItem オブジェクト
mode: ファイルをオープンするモード
戻り値: FILE ポインタ

------------------------------------------------------------------------------
FILE   *procmsg_open_mark_file		(FolderItem	*item,
					 DataOpenMode	 mode);

フォルダ item に対応するマーク(フラグ)ファイルをモード mode で開きます。

item: FolderItem オブジェクト
mode: ファイルをオープンするモード
戻り値: FILE ポインタ

------------------------------------------------------------------------------
void	procmsg_clear_cache		(FolderItem	*item);

フォルダ item に対応するキャッシュファイルを空にします。

item: FolderItem オブジェクト

------------------------------------------------------------------------------
void	procmsg_clear_mark		(FolderItem	*item);

フォルダ item に対応するマーク(フラグ)ファイルを空にします。

item: FolderItem オブジェクト

------------------------------------------------------------------------------
GNode  *procmsg_get_thread_tree		(GSList		*mlist);

MsgInfo のリストからスレッドツリーを構築して返します。

注意: 返るツリーのトップのノード(root の直接の子ノード)は逆順になります。

戻り値は g_node_destroy() で解放する必要があります。
MsgInfo 自体はコピーされません。

mlist: MsgInfo 構造体へのポインタのリスト
戻り値: 逆順のスレッドツリー

------------------------------------------------------------------------------
guint	procmsg_get_thread_date		(GNode		*node);

スレッドの中で最新の日付を time_t 型の秒数で返します。
エラー等で日付が得られなかった場合は0が返ります。

node: スレッドツリーのトップのノード(root の直接の子ノード)
戻り値: スレッドの中での最新の日付
        エラーの場合は0

------------------------------------------------------------------------------
gint	procmsg_move_messages		(GSList		*mlist);

メッセージリスト mlist で指定されたメッセージを各メッセージにあらかじめ
指定された移動先フォルダ(MsgInfo::to_folder)に移動します。

mlist: MsgInfo 構造体へのポインタのリスト
戻り値: 成功した場合 0
        エラーの場合 -1

------------------------------------------------------------------------------
gint	procmsg_copy_messages		(GSList		*mlist);

メッセージリスト mlist で指定されたメッセージを各メッセージにあらかじめ
指定されたコピー先フォルダ(MsgInfo::to_folder)にコピーします。

mlist: MsgInfo 構造体へのポインタのリスト
戻り値: 成功した場合 0
        エラーの場合 -1

------------------------------------------------------------------------------
gchar  *procmsg_get_message_file_path	(MsgInfo	*msginfo);

メッセージ msginfo のファイルの絶対パスを取得します。
リモートメールボックスの場合はファイルのパスを返すだけで、
実際の取得は行いません。

返った文字列は g_free() で解放する必要があります。

msginfo: MsgInfo 構造体へのポインタ
戻り値: メッセージファイルの絶対パス

------------------------------------------------------------------------------
gchar  *procmsg_get_message_file	(MsgInfo	*msginfo);

メッセージ msginfo のファイルの絶対パスを取得します。
リモートメールボックスの場合はファイルの取得も行います。

返った文字列は g_free() で解放する必要があります。

msginfo: MsgInfo 構造体へのポインタ
戻り値: メッセージファイルの絶対パス

------------------------------------------------------------------------------
GSList *procmsg_get_message_file_list	(GSList		*mlist);

メッセージリスト mlist の各メッセージに対して procmsg_get_message_file()
を呼び出し、ファイルのパスを取得します。取得したパスとフラグ情報から
MsgFileInfo 構造体のリストを生成して返します。

返ったリストは procmsg_message_file_list_free() で解放する必要があります。

mlist: MsgInfo 構造体へのポインタのリスト
戻り値: MsgFIleInfo 構造体へのポインタのリスト

------------------------------------------------------------------------------
void	procmsg_message_file_list_free	(GSList		*file_list);

MsgFileInfo 構造体のリストを解放します。

file_list: MsgFIleInfo 構造体へのポインタのリスト

------------------------------------------------------------------------------
FILE   *procmsg_open_message		(MsgInfo	*msginfo);

メッセージ msginfo に対応するメッセージファイルを取得して開きます。
msginfo が送信待ちメッセージの場合は、送信待ち用ヘッダを読み飛ばし、
メッセージ本体のヘッダの先頭にシーク位置を移動して返します。

msginfo: MsgInfo 構造体へのポインタ
戻り値: メッセージファイルの FILE ポインタ
        エラーの場合は NULL

------------------------------------------------------------------------------
void procmsg_set_decrypt_message_func	(DecryptMessageFunc	 func);

メッセージが暗号化されていた場合に復号するためのコールバック関数を
指定します。

func: DecryptMessageFunc 型の関数ポインタ

------------------------------------------------------------------------------
FILE   *procmsg_open_message_decrypted	(MsgInfo	*msginfo,
					 MimeInfo      **mimeinfo);

procmsg_set_decrypt_message_func() でコールバック関数が指定されている場合は
それを使用してファイルを復号し、開きます。また、 MIME 情報を取得して
mimeinfo にセットします。
コールバック関数が指定されていない場合は、 procmsg_open_message() で
メッセージを開き、 MIME 情報を取得して mimeinfo にセットして返ります。

msginfo: MsgInfo 構造体へのポインタ
mimeinfo: メッセージの MIME 情報を返すためのポインタ
戻り値: 復号したメッセージファイルの FILE ポインタ
        エラーの場合は NULL

------------------------------------------------------------------------------
gboolean procmsg_msg_exist		(MsgInfo	*msginfo);

メッセージ msginfo に対応するファイルが存在し、かつ変更されていない場合
TRUE を返します。

msginfo: MsgInfo 構造体へのポインタ
戻り値: ファイルが存在し、かつ変更されていない場合 TRUE
        ファイルが存在しないか、変更されている場合 FALSE

------------------------------------------------------------------------------
gboolean procmsg_trash_messages_exist	(void);

すべてのごみ箱フォルダを調べ、いずれかのごみ箱フォルダにメッセージが1通以上
含まれている場合 TRUE を返します。

戻り値: メッセージが1通以上含まれるごみ箱フォルダが存在する場合 TRUE
        すべてのごみ箱が空の場合 FALSE

------------------------------------------------------------------------------
void	procmsg_empty_trash		(FolderItem	*trash);

ごみ箱フォルダ trash 内のすべてのメッセージを空にします。
trash の特別フォルダタイプは F_TRASH でなければなりません。

trash: ごみ箱フォルダを指す FolderItem オブジェクト

------------------------------------------------------------------------------
void	procmsg_empty_all_trash		(void);

すべてのごみ箱フォルダを空にします。

------------------------------------------------------------------------------
void	procmsg_remove_all_cached_messages
					(Folder		*folder);

リモートメールボックス folder のすべてのメッセージのキャッシュファイルを
削除します。

folder: リモートメールボックスを指す Folder オブジェクト

------------------------------------------------------------------------------
gint	procmsg_save_to_outbox		(FolderItem	*outbox,
					 const gchar	*file);

メッセージファイル file を送信控 outbox に保存します。
outbox が NULL の場合はデフォルトの送信控に保存します。

outbox: 送信控を指す FolderItem オブジェクト
        NULL の場合はデフォルトの送信控を指定
file: メッセージファイルの絶対パス(ファイル名エンコーディング)
戻り値: 成功した場合 0
        エラーの場合 -1

------------------------------------------------------------------------------
void	procmsg_print_message		(MsgInfo	*msginfo,
					 const gchar	*cmdline,
					 gboolean	 all_headers);

メッセージのテキストを印刷します。
コマンドライン cmdline が指定されている場合は、そのコマンドを実行します。
cmdline に NULL を指定した場合、プラットフォームのデフォルトの印刷コマンドを
使用します。
all_headers が TRUE の場合はすべてのヘッダを印刷します。 FALSE の場合は
現在表示するように指定されているヘッダのみを印刷します。

msginfo: MsgInfo 構造体へのポインタ
cmdline: 印刷コマンド( %s が実際のファイルのパスに置換されます)
all_headers: TRUE : すべてのヘッダを印刷
             FALSE: 表示ヘッダのみ印刷

------------------------------------------------------------------------------
MsgInfo *procmsg_msginfo_copy		(MsgInfo	*msginfo);

MsgInfo 構造体をコピーします。 MsgInfo 構造体の各メンバ毎に新たなメモリの
確保とコピーが行われます(ディープコピー)。

返った MsgInfo 構造体は procmsg_msginfo_free() で解放する必要があります。

msginfo: MsgInfo 構造体へのポインタ
戻り値: コピーした MsgInfo 構造体へのポインタ

------------------------------------------------------------------------------
MsgInfo *procmsg_msginfo_get_full_info	(MsgInfo	*msginfo);

メッセージ msginfo に対応するメッセージファイルをパースし、完全な情報を
取得し、新たな MsgInfo 構造体を作成して返します。

返った MsgInfo 構造体は procmsg_msginfo_free() で解放する必要があります。

msginfo: MsgInfo 構造体へのポインタ
戻り値: 新たに作成された MsgInfo 構造体へのポインタ

------------------------------------------------------------------------------
gboolean procmsg_msginfo_equal		(MsgInfo	*msginfo_a,
					 MsgInfo	*msginfo_b);

msginfo_a と msginfo_b が同一のメッセージを指しているかどうかを返します。

msginfo_a: MsgInfo 構造体へのポインタ
msginfo_b: MsgInfo 構造体へのポインタ
戻り値: TRUE : 同一のメッセージを指している
        FALSE: 異なるメッセージを指している

------------------------------------------------------------------------------
void	 procmsg_msginfo_free		(MsgInfo	*msginfo);

MsgInfo 構造体を解放します。

msginfo: MsgInfo 構造体へのポインタ

------------------------------------------------------------------------------
gint procmsg_cmp_msgnum_for_sort	(gconstpointer	 a,
					 gconstpointer	 b);

メッセージ番号によるソート用の比較関数です。

a: MsgInfo 構造体へのポインタ
b: MsgInfo 構造体へのポインタ
戻り値: 負の値: a のメッセージ番号 < b のメッセージ番号
        0: a のメッセージ番号 == b のメッセージ番号
        正の値: a のメッセージ番号 > b のメッセージ番号
