home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2001 December (DVD)
/
VPR0112A.ISO
/
OLS
/
DEN8_131
/
Den8_32.1.3.1_Red_L.lzh
/
den8api.txt
< prev
next >
Wrap
Text File
|
2000-09-10
|
15KB
|
447 lines
電信八号 API
Copyright (C) 1996-1998 ISHIOKA, Takamitsu
Copyright (C) 1999-2000 Den8club (Denpachi Club); KAWASE, Yutaka
All Rights Reseved
Version 1.0 1996/04/27
Version 1.1 1996/05/27
Version 1.2 1996/07/20
Version 1.3 1996/08/17
Version 1.4 1997/03/09
Version 1.5 1997/05/31
Version 1.6 1997/11/26
Version 1.7 1998/02/08
Version 1.8 1998/04/06
Version 1.9 1998/07/31
Version 2.0 2000/07/10, 9/10
■はじめに
デンパチを他のアプリケーションから制御するために、DDE 等によるデンパチサー
バ API を決めました。
また、デンパチの機能の一部を他のアプリケーションに代替させることができる
ように、デンパチクライアント API も決める予定です。
これらの API を利用して、デンパチを利用する、あるいは、デンパチの使い勝
手を向上させるアプリケーションを自由に作ってください。
API は必要に応じて逐次追加して行きますので、アイデアをお持ちの方はご連絡
ください。
デンパチの配布アーカイブファイルに入っている MainFrm.cpp というファイル
は、クライアント(デンパチにコマンドを送るアプリ)のサンプルで、原作者が
実験のために作成したプログラムのソースの一部です。
■サーバ API
他のアプリケーションからデンパチを制御したり、デンパチの機能を利用してデー
タを取得したりするための API です。
● WM_DDE_EXECUTE
------------------------------------------------------------------------
サービス名 Den8
トピック名 Command
------------------------------------------------------------------------
注:以下の説明の中で「フォルダ」というのは、Windows のフォルダのことでな
く、デンパチのフォルダ (*.fld, *.can) を意味します。
アプリケーション定義返却値は、0が成功をあらわします。
Version 1.0
------------------------------------------------------------------------
コマンド名 Update
引数1 フォルダのフルパス。
引数2~n メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
複数個指定する場合は、昇順に並べなければならない。
動作 指定したフォルダの指定したメールを読み込み、表示を更新する。
引数が一個なら、そのフォルダに対して「最新の情報に更新」を行
ない、かつアクティブにする。
例 [Update("c:\Share\Den8\In.fld",0147,0258,0369)]
------------------------------------------------------------------------
Version 1.1
------------------------------------------------------------------------
コマンド名 Select
引数1 フォルダのフルパス。
引数2~n メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
複数個指定する場合は、昇順に並べなければならない。
動作 指定したフォルダをアクティブにし、アイコン化されていれば復元
する。更に、そのフォルダのメールの選択状態をいったんクリアし、
引数2以降があれば、それらのメールを選択する。
例 [Select("c:\Share\Den8\OUT.FLD",0147,0258,0369)]
------------------------------------------------------------------------
Version 1.1
------------------------------------------------------------------------
コマンド名 Move
引数1 移動先フォルダのフルパス。
引数2 移動元フォルダのフルパス。
引数3~n メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
動作 引数2のフォルダにある3~nのメールを、引数1のフォルダに移
動する。
例 [Move("c:\Den8\TRASH.CAN","c:\Den8\IN.FLD",0012,0013)]
------------------------------------------------------------------------
Version 1.1(Version 1.8 で引数3をオプショナルにした)
------------------------------------------------------------------------
コマンド名 Reply
引数1 返信対象メールを含むフォルダのフルパス。
引数2 返信対象メールファイル名の拡張子を取り除いたもの、つまり、4
桁の数字。
引数3 返信用原稿の出力ファイルのフルパス(オプショナル)。
動作 引数1、2によってあらわされるメールに対する返信の原稿を作成
し、引数3で指定されるファイルに書き込む。
引数3が省略されていたら、メール編集用プログラムを呼び出し、
エディタ終了後に送信動作を起こす。
例 [Reply("c:\Den8\IN.FLD","8823","c:\Windows\Temp\foo.tmp")]
------------------------------------------------------------------------
Version 1.1
------------------------------------------------------------------------
コマンド名 Send
引数1 送信したいメールファイルのフルパス。このファイルの内容は、デ
ンパチのメールの形式でなければならない。場所はどこでもよく、
デンパチのフォルダに入っている必要はない。
動作 メールを解析し、送信先アドレスを抽出して送信の確認を求める。
その先はデンパチで新規メールを送信する時と同じ。
例 [Send("c:\Windows\Temp\foo.tmp")]
------------------------------------------------------------------------
Version 1.1
------------------------------------------------------------------------
コマンド名 Receive
引数なし
動作 受信を行なう。
例 [Receive]
------------------------------------------------------------------------
Version 1.2
------------------------------------------------------------------------
コマンド名 Focus
引数1 フォルダのフルパス
引数2 メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
動作 指定したフォルダをアクティブにし、アイコン化されていれば復元
する。更に、そのフォルダのメールの選択状態をいったんクリアし、
引数2があれば、そのメールにキャレットを移動し、かつ選択する。
そのメールをリスト表示するために、必要ならばスクロールする。
例 [Focus("c:\Share\Den8\IN.FLD",0147)]
------------------------------------------------------------------------
Version 1.6
------------------------------------------------------------------------
コマンド名 Realize
引数1 フォルダのフルパス
引数2 メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
引数3 出力先ディレクトリのフルパス。
動作 指定されたフォルダの指定されたメールがマルチパートメッセージ
ならば、指定されたディレクトリ下にパーツの階層構造を作成する。
その形式は電信八号がマルチパートメッセージを表示するときに作
業用に作成しているものと同じ。
例 [Realize("c:\Share\Den8\IN.FLD",0147,"c:\foo")]
------------------------------------------------------------------------
Version 1.8
------------------------------------------------------------------------
コマンド名 Attach
引数1 電八形式のメールファイルのフルパス
引数2~n 添付したいファイルのフルパス
動作 引数1で指定されたメールファイルに2~nで指定されたファイル
を Base64 エンコードして添付する
例 [Attach("c:\Temp\_den0000.tmp","c:\foo\bar.zip")]
------------------------------------------------------------------------
Version 1.8(Version 2.0 で First, Last, 4桁の数字を使えるようにした)
------------------------------------------------------------------------
コマンド View (形式1)
引数1 次の文字列のうちどれか一つ
Prev
Next
PrevRecv
NextRecv
First
Last
メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
動作 現在アクティブなフォルダでフォーカスされているメールの、
一つ前のメール (Prev)
一つ後のメール (Next)
一つ前の未読メール (PrevRecv)
一つ後の未読メール (NextRecv)
フォルダ内の最初のメール (First)
フォルダ内の最後のメール (Last)
そのメール (4桁の数字)
を表示する。
例 [View("NextRecv")]
注 「表示」はデンパチ側でダブルクリックする場合と同じ処理を行う。
従って、同じビューワーを複数個起動されたくない場合は、ビュー
ワ側が、system トピックの open コマンドなどのサーバー機能を
持つ必要がある。詳細は後述の「クライアント API」を参照。
------------------------------------------------------------------------
Version 2.0
------------------------------------------------------------------------
コマンド View (形式2)
引数1 フォルダのフルパス
引数2 View コマンド (形式1) の引数1と同じ
動作 引数1で指定したフォルダをアクティブにし、アイコン化されて
いれば復元し、引数2で指定したメールを表示する。
例 [View("c:\Den8\IN.FLD","Last")]
------------------------------------------------------------------------
Version 1.8
------------------------------------------------------------------------
コマンド名 Forward
引数1 転送対象メールを含むフォルダのフルパス。
引数2 転送対象メールファイル名の拡張子を取り除いたもの、つまり、4
桁の数字。
動作 引数1、2によってあらわされるメールに対する転送の原稿を作成
し、メール編集用プログラムを呼び出し、エディタ終了後に送信動
作を起こす。
例 [Forward("c:\Den8\IN.FLD","8823")]
------------------------------------------------------------------------
------------------------------------------------------------------------
サービス名 Alias (サーバーは Alias.exe)
トピック名 system
------------------------------------------------------------------------
Version 1.7
------------------------------------------------------------------------
コマンド名 Append
引数1~n メールアドレス
動作 RootAlias の直下に、指定されたメールアドレスを登録する。
例 [Append("ishioka@tky.3web.ne.jp")]
備考 サーバーを起動するには、Alias.exe の場所および住所録ファイル
の名前を知る必要があります。これらの情報は、denshin8.ini の
[Global Parameters]セクションの AliasEditor エントリーおよび
AliasFile エントリーから取得できます。
denshin8.ini の場所は、常に denshin8.exe の場所と同じです。
------------------------------------------------------------------------
● WM_DDE_POKE
------------------------------------------------------------------------
サービス名 Den8
トピック名 Command
------------------------------------------------------------------------
Version 1.3
------------------------------------------------------------------------
アイテム名 Headers
データ形式 CF_TEXT
Toの値 \0 Ccの値 \0 Bccの値 \0 Subjectの値 \0 転送メール \0
ToやCcの値を複数ならべる場合はカンマで連結
<転送メール>というのは、そのアドレスへ転送したいメールのパス。
新規作成の場合は "New"
------------------------------------------------------------------------
上記以外に、システムトピックで、open コマンドを受け付けます。
open の引数には、起動時のコマンドライン引数と同じものを指定可能です。
------------------------------------------------------------------------
サービス名 DENSHIN8
トピック名 system
------------------------------------------------------------------------
------------------------------------------------------------------------
コマンド名 open
引数 コマンドライン引数と同じ
動作 コマンドライン引数と同じ
例 [open(-receive)]
例 [open("c:\boo\foo.fld")]
------------------------------------------------------------------------
■クライアント API
電信八号がクライアント側になる DDE 通信の仕様です。
●WM_DDE_EXECUTE
------------------------------------------------------------------------
サービス名 [サーバに依存しない設定]の[メール表示用プログラム]に書かれた
コマンドラインの実行モジュール名。たとえば RE8
トピック名 system
------------------------------------------------------------------------
Version 1.1(昔からあるのですがドキュメント化を忘れていました)
------------------------------------------------------------------------
コマンド名 [サーバに依存しない設定]の[メール表示用プログラム]の[DDE]の
ところに描かれた文字列。例えば open。
引数1 メールファイルのフルパス
動作 そのファイルを表示する
例 [open("C:\Den8\IN.FLD\0000.txt")]
------------------------------------------------------------------------
■コマンドラインオプション
「組み合わせ不能」と明示されているもの以外は、任意のオプションを組み合わ
せることができます。
Version 1.1
・宛先を指定しての起動
denshin8.exe -mailto <address>
例)denshin8.exe -mailto ishioka@tky.3web.ne.jp
起動し、<address> を To: に埋め込んでエディタを立ち上げる。
-receive とは組み合わせ不能
・フォルダ状態の復元を行なわない
denshin8.exe -norestore
2つ目以降のインスタンスでは無効
・起動後自動的に受信する
denshin8.exe -receive
・アイドル状態になると自動的に終了する
denshin8.exe -quitonidle
-mailto とは組み合わせ不能
2つ目以降のインスタンスでは無効
Version 1.5
・起動後新規作成(後、送信)動作を起こす
denshin8.exe -new [<file> ...]
例)denshin8.exe -new attachment="c:\temp\boo.gif" attachment="c:\temp\foo.dcr" inline="c:\temp\woo.html"
<file> は再生方法の指定と添付ファイルのパスを = で結合したもの。
再生方法の指定は、attachment または inline 。
attachment はファイルにセーブする指定(ただし、実際にどのような動作
になるかは相手側メールソフトの種類と設定に依存するかも)。
inline はその場で実行(表示)する指定(ただし、以下同文)。
添付は引数で与えられた順序で行われる。
他のコマンドラインオプションとは組み合わせ不能。
Version 1.9 (本体 V321.2b6)
・起動後自動的にすべての未送信メールを送信する
denshin8.exe -send
巡回先に指定された最初のサーバーへ送信する。巡回先の指定がなければ、
現在のサーバーを使う。
Version 2.0 (本体 V32.1.3.0)
・マルチユーザレベルを指定する
denshin8.exe (-|/)mu[ltiuser]:<level> (mu まで部分記述すれば有効となる)
den8_mu<level>.exe (denshin8.exe をリネームして mu<数字> を含める)
例)denshin8.exe -mu:2 または den8_mu2.exe
<level> は、0, 1 または 2 。 3 以上は現在 2 と同じ。
0 は、従来と同じ。(1台のパソコンに人数分インストールする)
1 は、電八の実行ファイル名の .exe を .ini に置き換えた設定ファイルを
環境変数 DEN8HOME または HOME に書かれたディレクトリにあるとみ
なす。該当環境変数がないか、値が . (ピリオド)なら従来と同じ。
2 は、その他のファイル/フォルダの基準ディレクトリも環境変数 DEN8HOME
または HOME に書かれたディレクトリであるとみなす。以下同上。
DEN8HOME と HOME 両方設定されている場合は、DEN8HOME が優先される。
■他のアプリとの連携に関するその他の情報
Version 1.1
・メインウィンドウハンドルの取得
クラス名 "DeN8:MaIn"
Version 1.4
・キャッシュ (*.fld) の形式
先頭がキャッシュヘッダ(フォルダに関する情報を格納する部分)で、その後ろ
にそのフォルダの最大のメール番号 + 1 個のレコードが続きます。
つまり、n 番のメールのキャッシュレコードの位置は、次の式で与えられます。
sizeof(CACHE_HEADER) + sizeof(CACHE_RECORD) * n
欠けた番号(メールが存在しない番号)のレコードは、status の値が NONE と
なっていることにより識別します。
// キャッシュヘッダ
typedef struct {
char cIdentifier[64]; // "Den8 Cache Format 3.01"
BOOL bDirty; // 正常にセーブされていない印
BOOL bOutFolder;
BYTE bSortByDate;
BYTE bSortByFrom;
BYTE bSortBySubject;
BYTE bReverseOrder;
int nUnreadCount;
int nCaretIndex;
int nTopIndex;
char cPadding[40];
} CACHE_HEADER;
BOOL 4 バイト
BYTE 1 バイト
int 4 バイト
ヘッダの合計 128 バイト
// キャッシュレコード
typedef struct {
STATUS status; // X-Status
time_t timeDate; // 日付時刻
int nSize; // メールサイズ
char cHeader [500]; // 文字列情報
} CACHE_RECORD;
// cHeader の中身
// <FROM/TO>\0<MESSAGE-ID>\0<IN-REPLY-TO>\0<SUBJECT>\0<body-head>\0
// ステータス
typedef enum {
NONE = 0,
RECV = 1,
READ = 2,
RPLY = 3,
RPLD = 4,
WRIT = 5,
SENT = 6,
ERRR = 7
} STATUS;
STATUS 4 バイト
time_t 4 バイト
キャッシュレコードの合計 512 バイト
※ STATUS は現在も 4 バイト(リトルエンディアン)だが、将来の拡張を見越して
最初(下位)の 1 バイト以外はマスクして判定することを推奨する。