home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2000 July / VPR0007A.BIN / OLS / DEN8_2B6 / den8_2b6.lzh / den8api.txt < prev    next >
Text File  |  1998-08-01  |  13KB  |  406 lines

  1. 電信八号 API
  2.  
  3. Copyright (C) 1996-1998 ISHIOKA, Takamitsu
  4. All Rights Reseved
  5.  
  6. Version 1.0     1996/04/27
  7. Version 1.1     1996/05/27
  8. Version 1.2     1996/07/20
  9. Version 1.3     1996/08/17
  10. Version 1.4     1997/03/09
  11. Version 1.5     1997/05/31
  12. Version 1.6     1997/11/26
  13. Version 1.7     1998/02/08
  14. Version 1.8     1998/04/06
  15. Version 1.9     1998/07/31
  16.  
  17. ■はじめに
  18.  
  19. デンパチを他のアプリケーションから制御するために、DDE 等によるデンパチサー
  20. バ API を決めました。
  21.  
  22. また、デンパチの機能の一部を他のアプリケーションに代替させることができる
  23. ように、デンパチクライアント API も決める予定です。
  24.  
  25. これらの API を利用して、デンパチを利用する、あるいは、デンパチの使い勝
  26. 手を向上させるアプリケーションを自由に作ってください。
  27.  
  28. API は必要に応じて逐次追加して行きますので、アイデアをお持ちの方はご連絡
  29. ください。
  30.  
  31. デンパチの配布アーカイブファイルに入っている mainfrm.cpp というファイル
  32. は、クライアント(デンパチにコマンドを送るアプリ)のサンプルで、私が実験
  33. のために作成したプログラムのソースの一部です。
  34.  
  35.  
  36. ■サーバ API
  37.  
  38. 他のアプリケーションからデンパチを制御したり、デンパチの機能を利用してデー
  39. タを取得したりするための API です。
  40.  
  41. ● WM_DDE_EXECUTE
  42.  
  43. ------------------------------------------------------------------------
  44. サービス名    Den8
  45. トピック名    Command
  46. ------------------------------------------------------------------------
  47.  
  48. 注:以下の説明の中で「フォルダ」というのは、Windows のフォルダのことでな
  49.     く、デンパチのフォルダ (*.fld, *.can) を意味します。
  50.     アプリケーション定義返却値は、0が成功をあらわします。
  51.  
  52. Version 1.0
  53. ------------------------------------------------------------------------
  54. コマンド名    Update
  55. 引数1        フォルダのフルパス。
  56. 引数2~n    メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
  57.             複数個指定する場合は、昇順に並べなければならない。
  58. 動作        指定したフォルダの指定したメールを読み込み、表示を更新する。
  59.             引数が一個なら、そのフォルダに対して「最新の情報に更新」を行
  60.             ない、かつアクティブにする。
  61. 例            [Update("c:\Share\Den8\In.fld",0147,0258,0369)]
  62. ------------------------------------------------------------------------
  63.  
  64. Version 1.1
  65. ------------------------------------------------------------------------
  66. コマンド名    Select
  67. 引数1        フォルダのフルパス。
  68. 引数2~n    メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
  69.             複数個指定する場合は、昇順に並べなければならない。
  70. 動作        指定したフォルダをアクティブにし、アイコン化されていれば復元
  71.             する。更に、そのフォルダのメールの選択状態をいったんクリアし、
  72.             引数2以降があれば、それらのメールを選択する。
  73. 例            [Select("c:\Share\Den8\OUT.FLD",0147,0258,0369)]
  74. ------------------------------------------------------------------------
  75.  
  76. Version 1.1
  77. ------------------------------------------------------------------------
  78. コマンド名    Move
  79. 引数1        移動先フォルダのフルパス。
  80. 引数2        移動元フォルダのフルパス。
  81. 引数3~n    メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
  82. 動作        引数2のフォルダにある3~nのメールを、引数1のフォルダに移
  83.             動する。
  84. 例            [Move("c:\Den8\TRASH.CAN","c:\Den8\IN.FLD",0012,0013)]
  85. ------------------------------------------------------------------------
  86.  
  87. Version 1.1(Version 1.8 で引数3をオプショナルにした)
  88. ------------------------------------------------------------------------
  89. コマンド名    Reply
  90. 引数1        返信対象メールを含むフォルダのフルパス。
  91. 引数2        返信対象メールファイル名の拡張子を取り除いたもの、つまり、4
  92.             桁の数字。
  93. 引数3        返信用原稿の出力ファイルのフルパス(オプショナル)。
  94. 動作        引数1、2によってあらわされるメールに対する返信の原稿を作成
  95.             し、引数3で指定されるファイルに書き込む。
  96.             引数3が省略されていたら、メール編集用プログラムを呼び出し、
  97.             エディタ終了後に送信動作を起こす。
  98. 例            [Reply("c:\Den8\IN.FLD","8823","c:\Windows\Temp\foo.tmp")]
  99. ------------------------------------------------------------------------
  100.  
  101. Version 1.1
  102. ------------------------------------------------------------------------
  103. コマンド名    Send
  104. 引数1        送信したいメールファイルのフルパス。このファイルの内容は、デ
  105.             ンパチのメールの形式でなければならない。場所はどこでもよく、
  106.             デンパチのフォルダに入っている必要はない。
  107. 動作        メールを解析し、送信先アドレスを抽出して送信の確認を求める。
  108.             その先はデンパチで新規メールを送信する時と同じ。
  109. 例            [Send("c:\Windows\Temp\foo.tmp")]
  110. ------------------------------------------------------------------------
  111.  
  112. Version 1.1
  113. ------------------------------------------------------------------------
  114. コマンド名    Receive
  115. 引数なし
  116. 動作        受信を行なう。
  117. 例            [Receive]
  118. ------------------------------------------------------------------------
  119.  
  120. Version 1.2
  121. ------------------------------------------------------------------------
  122. コマンド名    Focus
  123. 引数1        フォルダのフルパス
  124. 引数2        メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
  125. 動作        指定したフォルダをアクティブにし、アイコン化されていれば復元
  126.             する。更に、そのフォルダのメールの選択状態をいったんクリアし、
  127.             引数2があれば、そのメールにキャレットを移動し、かつ選択する。
  128.             そのメールをリスト表示するために、必要ならばスクロールする。
  129. 例            [Focus("c:\Share\Den8\IN.FLD",0147)]
  130. ------------------------------------------------------------------------
  131.  
  132. Version 1.6
  133. ------------------------------------------------------------------------
  134. コマンド名    Realize
  135. 引数1        フォルダのフルパス
  136. 引数2        メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。
  137. 引数3        出力先ディレクトリのフルパス。
  138. 動作        指定されたフォルダの指定されたメールがマルチパートメッセージ
  139.             ならば、指定されたディレクトリ下にパーツの階層構造を作成する。
  140.             その形式は電信八号がマルチパートメッセージを表示するときに作
  141.             業用に作成しているものと同じ。
  142. 例            [Realize("c:\Share\Den8\IN.FLD",0147,"c:\foo")]
  143. ------------------------------------------------------------------------
  144.  
  145. Version 1.8
  146. ------------------------------------------------------------------------
  147. コマンド名    Attach
  148. 引数1        電八形式のメールファイルのフルパス
  149. 引数2~n    添付したいファイルのフルパス
  150. 動作        引数1で指定されたメールファイルに2~nで指定されたファイル
  151.             を Base64 エンコードして添付する
  152. 例            [Attach("c:\Temp\_den0000.tmp","c:\foo\bar.zip")]
  153. ------------------------------------------------------------------------
  154.  
  155. Version 1.8
  156. ------------------------------------------------------------------------
  157. コマンド    View
  158. 引数1        次の文字列のうちどれか一つ
  159.                 Prev
  160.                 Next
  161.                 PrevRecv
  162.                 NextRecv
  163. 動作        現在アクティブなフォルダでフォーカスされているメールの、
  164.                 一つ前のメール (Prev)
  165.                 一つ後のメール (Next)
  166.                 一つ前の未読メール (PrevRecv)
  167.                 一つ後の未読メール (NextRecv)
  168.             を表示する。
  169. 例            [View("NextRecv")]
  170. 注            「表示」はデンパチ側でダブルクリックする場合と同じ処理を行う。
  171.             従って、同じビューワーを複数個起動されたくない場合は、ビュー
  172.             ワ側が、system トピックの open コマンドなどのサーバー機能を
  173.             持つ必要がある。詳細は後述の「クライアント API」を参照。
  174. ------------------------------------------------------------------------
  175.  
  176. Version 1.8
  177. ------------------------------------------------------------------------
  178. コマンド名    Forward
  179. 引数1        転送対象メールを含むフォルダのフルパス。
  180. 引数2        転送対象メールファイル名の拡張子を取り除いたもの、つまり、4
  181.             桁の数字。
  182. 動作        引数1、2によってあらわされるメールに対する転送の原稿を作成
  183.             し、メール編集用プログラムを呼び出し、エディタ終了後に送信動
  184.             作を起こす。
  185. 例            [Forward("c:\Den8\IN.FLD","8823")]
  186. ------------------------------------------------------------------------
  187.  
  188.  
  189. ------------------------------------------------------------------------
  190. サービス名    Alias    (サーバーは Alias.exe)
  191. トピック名    system
  192. ------------------------------------------------------------------------
  193.  
  194. Version 1.7
  195. ------------------------------------------------------------------------
  196. コマンド名    Append
  197. 引数1~n    メールアドレス
  198. 動作        RootAlias の直下に、指定されたメールアドレスを登録する。
  199. 例            [Append("ishioka@tky.3web.ne.jp")]
  200. 備考        サーバーを起動するには、Alias.exe の場所および住所録ファイル
  201.             の名前を知る必要があります。これらの情報は、denshin8.ini の
  202.             [Global Parameters]セクションの AliasEditor エントリーおよび
  203.             AliasFile エントリーから取得できます。
  204.             denshin8.ini の場所は、常に denshin8.exe の場所と同じです。
  205. ------------------------------------------------------------------------
  206.  
  207. ● WM_DDE_POKE
  208.  
  209. ------------------------------------------------------------------------
  210. サービス名    Den8
  211. トピック名    Command
  212. ------------------------------------------------------------------------
  213.  
  214. Version 1.3
  215. ------------------------------------------------------------------------
  216. アイテム名    Headers
  217. データ形式    CF_TEXT
  218.  
  219.             Toの値 \0 Ccの値 \0 Bccの値 \0 Subjectの値 \0 転送メール \0
  220.  
  221.             ToやCcの値を複数ならべる場合はカンマで連結
  222.  
  223.             <転送メール>というのは、そのアドレスへ転送したいメールのパス。
  224.             新規作成の場合は "New"
  225. ------------------------------------------------------------------------
  226.  
  227.  
  228. 上記以外に、システムトピックで、open コマンドを受け付けます。
  229. open の引数には、起動時のコマンドライン引数と同じものを指定可能です。
  230.  
  231. ------------------------------------------------------------------------
  232. サービス名    DENSHIN8
  233. トピック名    system
  234. ------------------------------------------------------------------------
  235.  
  236. ------------------------------------------------------------------------
  237. コマンド名    open
  238. 引数        コマンドライン引数と同じ
  239. 動作        コマンドライン引数と同じ
  240. 例            [open(-receive)]
  241. 例            [open("c:\boo\foo.fld")]
  242. ------------------------------------------------------------------------
  243.  
  244.  
  245. ■クライアント API
  246.  
  247. 電信八号がクライアント側になる DDE 通信の仕様です。
  248.  
  249. ●WM_DDE_EXECUTE
  250.  
  251. ------------------------------------------------------------------------
  252. サービス名    [サーバに依存しない設定]の[メール表示用プログラム]に書かれた
  253.             コマンドラインの実行モジュール名。たとえば RE8
  254. トピック名    system
  255. ------------------------------------------------------------------------
  256.  
  257. Version 1.1(昔からあるのですがドキュメント化を忘れていました)
  258. ------------------------------------------------------------------------
  259. コマンド名    [サーバに依存しない設定]の[メール表示用プログラム]の[DDE]の
  260.             ところに描かれた文字列。例えば open。
  261. 引数1        メールファイルのフルパス
  262. 動作        そのファイルを表示する
  263. 例            [open("C:\Den8\IN.FLD\0000.txt")]
  264. ------------------------------------------------------------------------
  265.  
  266.  
  267. ■コマンドラインオプション
  268.  
  269. 「組み合わせ不能」と明示されているもの以外は、任意のオプションを組み合わ
  270. せることができます。
  271.  
  272. Version 1.1
  273.  
  274. ・宛先を指定しての起動
  275.  
  276.     denshin8.exe -mailto <address>
  277.  
  278.     例)denshin8.exe -mailto ishioka@tky.3web.ne.jp
  279.  
  280.     起動し、<address> を To: に埋め込んでエディタを立ち上げる。
  281.  
  282.     -receive とは組み合わせ不能
  283.  
  284.  
  285. ・フォルダ状態の復元を行なわない
  286.  
  287.     denshin8.exe -norestore
  288.  
  289.     2つ目以降のインスタンスでは無効
  290.  
  291.  
  292. ・起動後自動的に受信する
  293.  
  294.     denshin8.exe -receive
  295.  
  296.  
  297. ・アイドル状態になると自動的に終了する
  298.  
  299.     denshin8.exe -quitonidle
  300.  
  301.     -mailto とは組み合わせ不能
  302.  
  303.     2つ目以降のインスタンスでは無効
  304.  
  305.  
  306. Version 1.5
  307.  
  308. ・起動後新規作成(後、送信)動作を起こす
  309.  
  310.     denshin8.exe -new [<file> ...]
  311.  
  312.     例)denshin8.exe -new attachment="c:\temp\boo.gif" attachment="c:\temp\foo.dcr" inline="c:\temp\woo.html"
  313.  
  314.     <file> は再生方法の指定と添付ファイルのパスを = で結合したもの。
  315.  
  316.     再生方法の指定は、attachment または inline 。
  317.  
  318.     attachment はファイルにセーブする指定(ただし、実際にどのような動作
  319.     になるかは相手側メールソフトの種類と設定に依存するかも)。
  320.  
  321.     inline はその場で実行(表示)する指定(ただし、以下同文)。
  322.  
  323.     添付は引数で与えられた順序で行われる。
  324.  
  325.     他のコマンドラインオプションとは組み合わせ不能。
  326.  
  327. Version 1.9
  328.  
  329. ・起動後自動的にすべての未送信メールを送信する
  330.  
  331.     denshin8.exe -send
  332.  
  333.     巡回先に指定された最初のサーバーへ送信する。巡回先の指定がなければ、
  334.     現在のサーバーを使う。
  335.  
  336.  
  337. ■他のアプリとの連携に関するその他の情報
  338.  
  339. Version 1.1
  340.  
  341. ・メインウィンドウハンドルの取得
  342.  
  343.     クラス名    "DeN8:MaIn"
  344.  
  345.  
  346. Version 1.4
  347.  
  348. ・キャッシュ (*.fld) の形式
  349.  
  350. 先頭がキャッシュヘッダ(フォルダに関する情報を格納する部分)で、その後ろ
  351. にそのフォルダの最大のメール番号 + 1 個のレコードが続きます。
  352.  
  353. つまり、n 番のメールのキャッシュレコードの位置は、次の式で与えられます。
  354.  
  355. sizeof(CACHE_HEADER) + sizeof(CACHE_RECORD) * n
  356.  
  357. 欠けた番号(メールが存在しない番号)のレコードは、status の値が NONE と
  358. なっていることにより識別します。
  359.  
  360. // キャッシュヘッダ
  361. typedef struct {
  362.     char    cIdentifier[64];    // "Den8 Cache Format 3.01"
  363.     BOOL    bDirty;             // 正常にセーブされていない印
  364.     BOOL    bOutFolder;
  365.     BYTE    bSortByDate;
  366.     BYTE    bSortByFrom;
  367.     BYTE    bSortBySubject;
  368.     BYTE    bReverseOrder;
  369.     int     nUnreadCount;
  370.     int     nCaretIndex;
  371.     int     nTopIndex;
  372.     char    cPadding[40];
  373. }    CACHE_HEADER;
  374.  
  375. BOOL           4 バイト
  376. BYTE           1 バイト
  377. int            4 バイト
  378. ヘッダの合計 128 バイト
  379.  
  380. // キャッシュレコード
  381. typedef struct {
  382.     STATUS    status;         // X-Status
  383.     time_t    timeDate;        // 日付時刻
  384.     int     nSize;            // メールサイズ
  385.     char    cHeader [500];    // 文字列情報
  386. }    CACHE_RECORD;
  387.  
  388. // cHeader の中身
  389. // <FROM/TO>\0<MESSAGE-ID>\0<IN-REPLY-TO>\0<SUBJECT>\0<body-head>\0
  390.  
  391. // ステータス
  392. typedef enum {
  393.     NONE = 0,
  394.     RECV = 1,
  395.     READ = 2,
  396.     RPLY = 3,
  397.     RPLD = 4,
  398.     WRIT = 5,
  399.     SENT = 6,
  400.     ERRR = 7
  401. }    STATUS;
  402.  
  403. STATUS                       4 バイト
  404. time_t                       4 バイト
  405. キャッシュレコードの合計 512 バイト
  406.