　ＭＭマクロ マニュアル

　ＭＭマクロについて

　言語体系

　プログラミングの注意点

　システム変数

　システム関数

　コマンドキーの実行

　仮想キーコード一覧

　エラーメッセージ


　ＭＭマクロについて

ＭＭマクロは ソースコードデバッガ付属 の高機能なマクロ言語です。

言語体系は Ｃ言語のサブセット となっています。

Ｃ言語に不慣れな人でもシステム関数だけを使ってかなり便利なマクロが

組めますのでがんばってプログラミングしてください。

慣れればそんなに難しいものではありませんし、またＣ言語の勉強にもなります。

  Ｃ言語はＢＡＳＩＣ言語に比べはるかに強力な演算子をもち高速に動作します。

最近インターネット上の言語として注目されている ＪＡＶＡ言語 とも基本的な演算子等は同じですので相通じるものがあります。

ＭＭマクロには以下の特徴があります。

・作成したマクロのデバッグが、ソースコードデバッガでできます。

・インタプリタ方式なので、作成したマクロが即実行できます。

・外部のマクロファイルをマクロプログラム中から呼び出す事ができます。

・関数内のみで有効な自動変数が使用できます。

・各マクロファイル間で共通に使える大域変数がありますので、マクロファイル間で連携したプログラムを組むことができます。

・すべてのキーコマンドをマクロプログラムより呼び出す事ができます。

・戻り値のあるシステム関数の値はシステム変数 Result へもセットされますのでResult の値でも戻り値が参照できます。


　言語体系

言語体系は Ｃ言語のサブセット となっています。概略は次の通りです。

Ｃ言語自体の文法や構文については、市販のＣ言語の教科書等をご覧ください。

・各マクロファイル間で共通に使えるＭＭ大域変数が５個あります。

　この変数はＭＭエディタ98 の起動時に０に初期化されます。

・ＭＭエディタ98 の状態を知るための４４個の システム変数 があります。

　システム変数の値を直接変更することはできません。

・プログラム作成のための１７６個の システム関数 があります。

・変数の型の種類は１バイト(8ビット)系のｃｈａｒ型、４バイト(32ビット)系のｉｎｔ型、ポインタ型と配列型が使用できます。

　ポインタの配列や多次元配列も使用出来ます。

・ｉｎｔ型は４バイト(32ビット)の値を持ちますので

　　-2,147,483,648 から 2,147,483,647 までの範囲の値を持つことができます。

・変数および関数の名前は半角で２４文字まで有効です。

・変数の型の定義、関数のプロトタイプ宣言はありません。

・変数はグローバル変数とローカル変数（自動変数）の２種類が使えます。

　ｅｘｔｅｒｎ、ｓｔａｔｉｃ宣言はありません。

・コンマ演算子、型変換、ｓｉｚｅｏｆ演算子は使えません。

・ｓｗｉｔｃｈ文、ｄｏ文、ｆｏｒ文、ｃｏｎｔｉｎｕｅ文、ｇｏｔｏ文は

　使えません。


　プログラミングの注意点

ＭＭマクロ言語はマクロ言語ではありますが、 れっきとしたＣ言語 です。

Ｃ言語はＢＡＳＩＣ言語に比べはるかに強力な演算子をもち高速に動作しますが、その分使い方を誤ると簡単に誤動作したりしますので以下のことに留意してプログラミングをして下さい。

これは、ＭＭマクロ言語だけではなく普通のＣ言語のプログラミングにも当てはまります。

・配列の宣言

　配列を使う前には宣言が必要ですが、必ず使用するだけの配列エリアを確保して下さい。宣言した以上のエリアにデータを書き込んでも警告は出ませんがこれが誤動作の元になります。

　例えば、char str[10]; として１０バイトの配列のエリアを確保しておいて

　　　　　Strcpy(str, "123456789012345"); とすると str へ１６バイト(15バイト+1バイト(ヌル文字))がコピーされます。

　str のエリアは１０バイトしかないので、後の６バイトは別のエリアに書き込まれてこれが誤動作の原因となります。

　この場合なら str のエリアは最低１６バイト確保しておく必要があります。

・ポインタは必ず値を与えてから使う

　宣言しただけのポインタをいきなり使うと誤動作の元です。

　例えば、char *pt; として宣言しておいて

　　　　　Strcpy(pt, "12345"); とすると アドレスの定かでないエリアへデータが書き込まれてしまいこれが誤動作の原因となります。

　ポインタは使う前に pt = dest; pt = &dest[0]; 等と必ず値を与えてから使って下さい。

・繰り返しの処理では抜ける手段を設ける

　マクロでは、繰り返しの処理をよく行います。

　例えばテキストの先頭行から最終行までで条件にマッチした行に対して何かをおこなうとかです。

　こういう場合すべてが上手く行けば問題無いですが、場合によってはマクロが正常に終わらないということがあります。もちろんプログラミングに何らかの不具合があるのですが、それで終了出来ないというのではまずいので必ず何らかの方法で終了出来るようにしておきます。

　例えば以下の場合は、[ESC]キーが押されると繰り返し処理を中止します。

while(1) // 繰り返し何らかの処理をおこなう

{

KbHit();            // キーが押されたかをチェック

if(Result == 0x1b)  // [ESC]が押されたら中断

break;

・・・・・・・・・

・・・・・・・・・  // 何らかの処理

}

・簡単なサンプルマクロ

このマクロは検索を行ないます。

文字列が範囲指定されていない場合は 最後に検索した検索文字列で、

文字列が範囲指定されている場合は その文字列を検索文字列としてセットしてから検索を開始します。

main()

{

char fstr[260], line[260];

int len, spos, epos; // spos = 選択開始位置. epos = 終了位置

if(Block) // 選択モードなら

{ // 範囲指定されている文字列を検索文字列として得る

  if(Col > Selcolm)

  { // 順方向の範囲選択

    spos = Selcolm - 1;

    epos = Col - 2;

  }

  else

  { // 逆方向の範囲選択

    spos = Col - 1;

    epos = Selcolm - 2;

  }

  Getline2(line); // 現在行の内容を画面のイメージで line[] へ取得する

    // 検索文字列を fstr[] へセット

  len = epos - spos + 1; // 文字列の長さ

  if(len > 0 && len < 250) // 一応長さをチェックする

  {

    Strncpy(fstr, &line[spos], len);

    SetFindS(fstr); // 検索文字列のセット

    Select(0); // 必要であれば、選択モード 解除

  }

}

SetFind(0x0); // 必要であれば、検索フラグのセット

Find(); // いよいよ 検索開始 !!

}


　システム変数

各マクロファイル間で共通に使えるＭＭ大域変数（ｉｎｔ型）が５個あります。

このＭＭ大域変数はＭＭエディタ98 起動時に０に初期化されます。

以下が、５個のＭＭ大域変数（ｉｎｔ型）です。

・Global1

・Global2

・Global3

・Global4

・Global5

ＭＭ大域変数 は

［矩形ブロックの切り取り］［矩形ブロックのコピー］［矩形ブロックの挿入］の

各マクロの中で使用しています。参考にしてください。

他に参照できる以下の、４８個の システム変数 （ｉｎｔ型）があります。

変数は現在の値を常に保持していますのでいつでも参照できます。

変数の値を直接変更することはできません。

・Xmax	カラム方向へのカーソルが移動できる最大位置

ウインドウの大きさが変わると変わります

・Ymax	行方向へのカーソルが移動できる最大位置

ウインドウの大きさが変わると変わります

・Xpos	表示開始カラム位置（先頭は０）

・Xcsr	カーソルカラム位置（先頭は０）

・DXcsr	表示カーソルカラム位置（先頭は０）－疑似カーソル位置

・Ycsr	カーソル行位置（先頭は０）

・Col	表示行先頭からのカラム位置（先頭は１）

・Col2	論理行先頭からのカラム位置（先頭は１）

・DCol	表示論理カラム位置（先頭は１）－疑似カラム位置

・Cecp	テキスト先頭よりの現在位置（先頭は０）

・Line	現在の行位置（先頭行は１）

・Totalline	テキスト全体の行数

・Linelen	現在の表示行１行の長さ（改行は含みません）

・Linelen1	現在の論理行１行の長さ（改行は含みません）

・Margin	折り返し文字数（１０ー２５０）

・Tab	タブの文字数（２・４・６・８）

・Tln	画面トップ行に表示されている行Ｎｏ。

・Ins	インサートモード　１＝ＯＮ、０＝ＯＦＦ

・Indent	インデントモード　１＝ＯＮ、０＝ＯＦＦ

・CurPsPos	貼り付け後のカーソル位置 ０＝先頭のまま、１＝最後へ移動

・Code	カーソル位置の文字コード

・Kcode	カーソル位置の文字種　１＝全角、０＝半角

・Tcode	カーソル位置の文字タイプ

０＝ＥＯＦ（テキストの終わり）

１＝改行

２＝00H - 20H、全角スペース(8140H)

３＝半角記号、全角記号(8141H - 8151H,815CH - 824EH)

４＝全角ひらがな(829FH - 82F1H)

５＝上記以外の全角文字

６＝上記以外の半角文字

・Block	現在の選択モード

０＝非ブロック、　１＝行ブロック

２＝文字ブロック、３＝矩形ブロック

・Result	マクロ関数の戻り値

・Linestat	現在行の評価値

０＝改行で終了している

１＝改行で終了していない

－１＝ＥＯＦ行

－２＝ＥＯＦ行より下の行

・Selcolm	選択開始カラム位置

・IMEStatus	ＩＭＥの状態

０＝ＯＦＦの状態

１＝ＯＮ　の状態

・OpenFType	ファイルを開くで使用するダイアログのタイプ

０＝ビュアー付きダイアログ

１＝９５標準のダイアログの状態

・Sakuzu	罫線作図モード

１＝ＯＮ、０＝ＯＦＦ

・SakuzuPen	罫線作図での罫線の太さ

１＝太線、０＝細線

・KeiHogo	罫線保護モード

１＝ＯＮ、０＝ＯＦＦ

・RealForm	リアルタイム整形

１＝ＯＮ、０＝ＯＦＦ

・RealKajou	リアルタイム整形は箇条書きで行う

１＝ＯＮ、０＝ＯＦＦ

・OPenFileNum 開いているテキストウインドウの数

・Touch	テキストが変更されているか

１＝変更あり、０＝変更なし

・WinSize	テキストウインドウの大きさの状態

０＝標準、１＝最大化、２＝アイコン化

・CascadSize	カスケード時の大きさ

１＝最大化、０＝標準

・WinStyle	ウインドウの表示形式

１＝タイル、０＝カスケード

・TileIsV	タイル表時の時のタイルの形

１＝横長、０＝縦長

・SelLn	選択開始行

・LineMode	現在の行の数え方

１＝表示行、０＝論理行

・TileNum	タイル表示での同時に開く窓の数

・StatusbarOn	ステータスバーは表示されているか

１＝表示、０＝非表示

・PageMode	行No.へページ内行No.を表示するか

１＝表示、０＝非表示

・PageLn	１ページ当たりの行数

・ProtectWindow 書き込み禁止モードか

１＝禁止、０＝禁止ではない

・JumpMode	指定行へのジャンプのモード

０＝中央行、１＝現在行、２＝先頭行、３＝最下位行


　システム関数

以下、１７６個の システム関数 があります。

戻り値のある関数の値はシステム変数 Result へもセットされますので Result の値でも参照できます。

・検索系

　Find();	　検索

　FindNext();	　次(↓)を検索

　FindPrev();	　前(↑)を検索

　Replace();	　置換

　Top();	　テキストの先頭へ

　GoLine();	　テキストの指定行へ

　GoCp();	　テキストの指定の位置へ

　Bottom();	　テキストの最後へ

　Mark();	　カーソル位置をマーク

　MarkJump();	　最後にマークしたカーソル位置へ

　MarkNext();	　次(↓)のマーク位置へ

　MarkPrev();	　前(↑)のマーク位置へ

　PrevCur();	　直前のカーソル位置へ

　Parent();	　対応する ()、[]、、<> へ

　TagJamp();	　タグジャンプ

・検索モード系

　SetFind();	　検索フラグのセット

　SetFindS();	　検索文字列のセット

　SetRep();	　置換フラグのセット

　SetRepS();	　置換文字列セット

・カーソル系

　Up();	　カーソル移動（↑）

　Down();	　カーソル移動（↓）

　Left();	　カーソル移動（←）

　Right();	　カーソル移動（→）

　Backward();	　１語左へ

　Forward();	　１語右へ

　LDEdge();	　表示行頭へ

　RDEdge();	　表示行末へ

　LEdge();	　論理行頭へ

　REdge();	　論理行末へ

　RollUp();	　スクロールアップ

　RollDown();	　スクロールダウン

　PageUp();	　ページアップ

　PageDown();	　ページダウン

　TopScr();	　画面の上端へ

　BotomScr();	　画面の下端へ

　GoBlok();	　選択ブロックの先頭、最後へ

・編集系

　InsMode();	　挿入モードの切り替え

　Ret();	　リターンキー

　Bs();	　ＢＳキー

　Del();	　ＤＥＬキー

　DelBWord();	　語の先頭まで削除

　DelWord();	　語の終わりまで削除

　DelLine();	　１行削除

　DelBefor();	　行頭まで削除

　DelAfter();	　行末まで削除

　InsLine();	　１行挿入

　PopChr();	　削除文字の復活

　PopLn();	　削除行の復活

　Tabs();	　タブキー

　ConvWord();	　１語、大／小文字変換

　Select1();	　行選択モード

　Select2();	　矩形選択モード

　BlokCut();	　ブロック切り取り

　BlokCopy();	　ブロックコピー

　BlokPast();	　プロック貼り付け

　BlokIns();	　ブロック挿入

　StackDel();	　ブロックスタックのテキスト削除

　GetFindS();	　カーソル位置の文字列を検索文字列として取得

　GetSelText();	　選択されている文字列を取得します

　GetCurText();	　カーソル位置の文字列を取得します

　Select();	　選択モードのセット

　AIndent();	　オートインデントの切り替え

　SetCurPsPos();	　貼り付け後のカーソル位置 ０＝先頭のまま、１＝最後へ移動

　DispOff();	　画面非表示モード

　DispOff2();	　画面非表示モード(ステータスバー、ルーラーへも禁止)

　DispOn();	　画面再表示モード

　GotoX();	　カーソルをｘカラム位置へ(表示行の範囲で)

　GotoX2();	　カーソルをｘカラム位置へ(論理行の範囲で)

　GotoY();	　カーソルを画面のｙ行目へ

　SetSakuzu();	　罫線作図モードの切替え

　SetSakuzuPen();	　罫線作図での罫線の太さの切替え

　SetKeiHogo();	　罫線保護のON.OFF

　SetRealForm();	　リアルタイム整形のON.OFF

　SetRealKajou();	　リアルタイム整形は箇条書きで行うのON.OFF

　SetLineMode();	　論理行／表示行の変更

　SetTab();	　タブの文字数の変更

・クリップボード系

　ClipCut();	　クリップボード切り取り

　ClipCopy();	　クリップボードコピー

　ClipPast();	　クリップボード貼り付け

　Delete();	　テキストの削除

　GetClipTextLen();	　クリップボードのテキスト長を得る

　GetClipText();	　クリップボードのテキストを読み込む

・文字列操作系

　PutSpace();	　カーソル位置からｘカラム目までをタブ、スペースで埋める

　PutStr();	　文字列の出力

　GetStr();	　ダイアログを表示して文字列を入力

　GetStr2();	　デフォルト入力文字列でダイアログを表示して文字列を入力

　PutChr();	　文字の出力、コマンドキーの実行

　StrChr();	　文字を文字列より検索

　InKeyCmd();	　文字、又はキーコマンドの入力

　InKeyChar();	　制御文字を含む文字の入力

・矩形ブロック系

　KBCut();	　矩形ブロック切り取り

　KBCopy();	　矩形ブロックコピー

　KBIns();	　矩形ブロック挿入

・ユーティリティー系

　MacroEx();	　外部マクロの実行

　Beep();	　ビープ音の出力

　FPrint();	　書式付き文字列出力

　GetDate();	　日付の取得

　GetWeek();	　曜日の取得

　GetTime();	　時刻の取得

　KbHit();	　キーが押されたか

　Getline();	　現在行の内容の取得

　Getline2();	　画面のイメージで現在行の内容の取得

　GetFileName();	　編集中ファイル名の取得

　GetCurDirectory();	　カレントディレクトリの取得

　LoadSdFile();	　表示設定書式ファイルの読込み

　GetSdFile();	　表示設定ファイル名を取得する

　LoadPrFile();	　印刷書式ファイルの読込み

　SetCurDirectory();	　カレントディレクトリの変更

　SetIMEStatus();	　ＩＭＥの状態の取得

　SetOpenFType();	　ファイルを開くのダイアログのセット

　WinExec();	　外部のプログラムを起動する

　Message();	　メッセージを表示する

　MessageBox();	　メッセージを表示して結果を得ます

　Sleep();	　マクロの実行を指定時間停止します

　Menu();	　メニューを表示する

　GetKeyState();	　特定のキーが押されているか調べる

　ChangeMruNo();	　ファイル履歴Ｎｏ．を変更する

　GetVersion();	　ＭＭのバージョンの取得

　SetToolbar();	　ツールバーの表示のON.OFF

　SetStatusbar();	　ステータスバーの表示のON.OFF

　GetMmPath();	　ＭＭの起動フォルダを得る

　SetMargin();	　１行の折り返し文字数をセット

　SetPageMode();	　行No.へページ内行No.を表示するか

　SetPageLn();	　１ページ当たりの行数をセット

　SPrint();	　指定エリアへの書式付き文字列出力

　SetJumpMode();	　指定行へのジャンプでのモード変更

　GetEvent();	　イベントマクロでのイベントNo.を得る

　SetTimer();	　イベントタイマーを起動する

　KillTimer();	　イベントタイマーを停止する

・ファイル系

　Open();	　ファイルを開く

　Save();	　ファイルを保存

　Close();	　確認なしでファイルを閉じる

　CloseAs();	　確認ありでファイルを閉じる

・Ｃライブラリ文字列操作系

　Strcpy();	　文字列をコピーします

　Strncpy();	　文字列を指定バイト数コピーします

　Strcat();	　文字列を連結します

　Strcmp();	　文字列を比較します

　Strcmpi();	　文字列を比較します

　Strlen();	　文字列の長さを調べる

　Atoi();	　文字列を数字へ変換する

　Itoa();	　数字を文字列へ変換する

　Memset();	　メモリを指定の文字で埋める

　Strstr();	　文字列の中を指定の文字列で検索

　Strstri();	　文字列の中を指定の文字列で検索

　Strstrp();	　文字列の中を指定の文字列で検索

　Strchr();	　文字列の中を指定の文字で検索

　Strrchr();	　文字列の中を指定の文字で最後尾より検索

　Memcpy();	　メモリ間のデータのコピー

・ウインドウズ系

　SetWindowCascade();　ウインドウのカスケード表示

　SetWindowVTile();	　ウインドウの縦タイル表示

　SetWindowHTile();	　ウインドウの横タイル表示

　SetWindowStyle();	　ウインドウの表示形式の変更

　SetTileMode();	　ウインドウのタイルの形の変更

　NextWindow();	　次のウインドウへ移動する

　LoadLibrary();	　ＤＬＬのロード

　FreeLibrary();	　ＤＬＬの開放

　SetWindowText();	　キャプションへ文字列を表示

　GetWindowText();	　キャプションに表示されている文字列の取得

　MaxWindow();	　ウインドウを最大化します

　MinWindow();	　ウインドウを最小化します

　RestWindow();	　ウインドウを元の大きさへ戻します

　SetTileNum();	　タイル表示するウインドウの数の変更

　SetCascadSize();	　カスケード表示時のウインドウの大きさの変更

　SetProtectWindow();　ウインドウの書き込み禁止モードの変更

・ダイレクトファイルＩ／Ｏ系

　LOpen();	　ファイルをオープンします

　LCreat();	　ファイルを作成します

　LSeek();	　ファイル読み込み位置の設定

　LClose();	　ファイルを閉じます

　LRead();	　ファイルより読み込み

　LWrite();	　ファイルへ書き込み

　DeleteFile();	　ファイルを削除します

・レジストリ系

　GetRegiStr();	　レジストリ文字列データの読み込み

　GetRegiInt();	　レジストリ整数値データの読み込み

　GetIniStr();	　ＩＮＩファイルより文字列を得る

　GetIniInt();	　ＩＮＩファイルより整数値を得る

　SetIniStr();	　ＩＮＩファイルへ文字列を保存


　コマンドキーの実行

 マクロよりコマンドキーを実行するには PutChr(int ch); を使用します。

 キーボードで実行できる全てのコマンドキーを呼び出すことができます。

 パラメータの上位バイトにコマンドキーＮｏ．下位バイトに０をセットして呼び出します。

 詳しくは、PutChr(); の説明をご覧ください。

 具体的なコマンドキーＮｏ．に付いては、ＭＭヘルプの [キーコマンド一覧] をご覧ください。


　仮想キーコード一覧

以下は、仮想キーコードの一覧です。

すべて値は16進数で表記されています。

マウスまたはキーボードで対応するもの	値(16進数)

 マウスの左ボタン	01

 マウスの右ボタン	02

 BackSpaceキー	08

 Tabキー	09

 Clearキー	0C

 Enterキー	0D

 Shiftキー	10

 Ctrlキー	11

 Altキー	12

 Pauseキー	13

 CapsLockキー	14

 Escキー	1B

 Spaceキー	20

 PageUpキー	21

 PageDownキー	22

 Endキー	23

 Homeキー	24

 ←キー	25

 ↑キー	26

 →キー	27

 ↓キー	28

 Selectキー	29

 Executeキー	2B

 PrintScreenキー	2C

 Insキー	2D

 Delキー	2E

 Helpキー	2F

 0-9キー	30-39

 A-Zキー	41-5A

 テンキーパッドの0キー	60

 テンキーパッドの1キー	61

 テンキーパッドの2キー	62

 テンキーパッドの3キー	63

 テンキーパッドの4キー	64

 テンキーパッドの5キー	65

 テンキーパッドの6キー	66

 テンキーパッドの7キー	67

 テンキーパッドの8キー	68

 テンキーパッドの9キー	69

 乗算キー	6A

 +(プラス)キー	6B

 セパレートキー	6C

 引き算キー	6D

 小数点キー	6E

 割り算キー	6F

 F1-F24キー	70-87

 NumLockキー	90

 ScrollLockキー	91


　エラーメッセージ

　エラーメッセージについて

　字区解析エラーメッセージ

　コード展開エラーメッセージ

　コード実行エラーメッセージ


　エラーメッセージについて

読み込まれたマクロプログラムは、まず字区解析されコード展開されます。

この間にエラーが生じるとエラーＮｏ．とエラーメッセージを表示して終了します。

エラーがなくコード展開が正常に終わるとコードを実行します。


　字区解析エラーメッセージ

以下の 字区解析エラーメッセージ があります。左端の数字はエラーＮｏ．です。

　１　マクロエラーが発生しました

　２　サポートされていないキーワードです

　３　8 or 9 は８進数ではありません

　４　ヌル１文字定数があります

　５　１文字定数フォーマットエラー

　６　文字列定数フォーマットエラー

　７　コメントで終了マークがありません

　８　無効な文字です

　９　コントロール文字です

１０　文字列登録オーバーフロー

１１　固定変数登録オーバーフロー


　コード展開エラーメッセージ

以下の コード展開エラーメッセージ があります。左端の数字はエラーＮｏ．です。

２１　変数の二重登録です

２２　登録変数のサイズが０です

２３　変数名は登録されていません

２４　関数の二重登録です

２５　関数名はすでに登録されています

２６　関数が登録されていません

２７　識別子.変数  展開データエラー

２８　展開データエラー

２９　代入文　る展開データエラー

３０　関数の呼び出し　展開データエラー

３１　変数のサイズが０です

３２　ADD 右の変数エラー

３３　SUB 右の変数エラー

３４　配列 左の変数エラー

３５　数字.定数  左の変数エラー

３６　代入文  左の変数エラー

３７　関数の呼び出し  左の変数エラー

３８　代入文で左項目(固定変数)エラー

３９　ポインタ アドレス処理エラー

４０　変数の型エラー

４１　BREAK がループの外です

４２　プログラムのネステングエラー

５１　認識できない文法があります

５２　関数の引き数　文法エラー

５３　変数の形宣言がありません

５４　次の関数、変数、定数がありません

５５　が必要な位置で見つかりません

５６　変数  登録オーバーフロー

５７　変数名参照ができません

５８　関数  登録オーバーフロー

５９　関数名、変数名 登録オーバーフロー

６０　展開データ  登録オーバフロー

６１　展開データが参照できません

６２　変数(ポインタ,配列)の形 登録オーバフロー

６３　変数入替ができません

６４　右の変数処理ができません

６５　左の変数処理ができません

６６　アドレス処理ができません

６７　プログラムのネスティング オーバフロー

６８　プログラムのネスティング オーバフロー

６９　プログラムのネスティング アンダフロー

７０　コードデータ登録 オーバフロー


　コード実行エラーメッセージ

以下の コード実行エラーメッセージ があります。左端の数字はエラーＮｏ．です。

９１　疑似スタックオーバーフロー

９２　終了時で　疑似スタックエラー

　　　コード実行は正常に終了しましたが関数呼び出しの引数のPUSHとPOPの数が全体で合っていません。このエラーは引数の数を誤ってセットして関数を呼び出したときに発生します。

９３　代人で　スタックエラー

９４　実行コードエラー

９５　関数の引き数の数があっていません

９６　存在しない関数が呼ばれています

９７　POPUP 疑似スタック オーバーフロー

９８　PUSH 疑似スタック オーバーフロー

９９　POP 疑似スタック アンダーフロー


　Find();

現在の検索条件により文字列の検索をします。

戻り値：検索文字列が見つかった場合は０を、

　　　　見つからなかった場合は－１を返します。

備考：検索条件のセットは SetFind();

　　　検索文字列のセットは SetFindS(); で行います。


　FindNext();

次(↓)を検索

現在の検索条件により次(↓)の文字列の検索をします。

戻り値：検索文字列が見つかった場合は０を、

　　　　見つからなかった場合は－１を返します。

備考：Find(); での検索成功後、次(↓)の検索の実行に使用します。


　FindPrev();

現在の検索条件により前(↑)の文字列の検索をします。

戻り値：検索文字列が見つかった場合は０を、

　　　　見つからなかった場合は－１を返します。

備考：Find();での検索成功後、前(↑)の検索の実行に使用します。


　Replace();

現在の置換条件により文字列の置換をします。

戻り値：置換した文字列の数を返します。

備考：置換条件のセットは SetRep();

　　　置換文字列のセットは SetRepS();で行います。


　Top();

テキストの先頭行へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　GoLine(int line);

テキストの指定行へ移動します。

対象となるテキストが論理行モードであれば論理行で、表示行モードであれば表示行で移動します。

パラメータ：int line ＝移動する行Ｎｏ。を指定します。

戻り値：この関数に戻り値はありません。

備考：最終行より大きい行Ｎｏ。を指定すると最終行へ移動します。


　GoCp(int cp);

テキストの指定の位置へ移動します。

パラメータ：int cp ＝テキスト先頭を０とした、移動するテキスト位置(先頭を０としたバイト位置)を指定します。

戻り値：この関数に戻り値はありません。

備考：最終位置より大きい値を指定すると最終位置へ移動します。


　Bottom();

テキストの最後行へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　Mark();

現在のカーソル位置をマークします。

戻り値：この関数に戻り値はありません。

備考：最後にマークしたカーソル位置へは MarkJump();で移動します。


　MarkJump();

最後にマークしたカーソル位置へ移動します。

戻り値：この関数に戻り値はありません。

備考：マークしたカーソル位置は最大１０個まで保存されます。


　MarkNext();

現カーソル位置より最も近い、次(↓)のカーソルマーク位置へ移動します。

次(↓)のカーソルマーク位置が見つからない場合はカーソル位置は元のままです。

戻り値：(↓)方向にマーク位置が見つかった場合は０を、

　　　　見つからなかった場合は－１を返します。

備考：


　MarkPrev();

現カーソル位置より最も近い、前(↑)のカーソルマーク位置へ移動します。

前(↑)のカーソルマーク位置が見つからない場合はカーソル位置は元のままです。

戻り値：(↑)方向にマーク位置が見つかった場合は０を、

　　　　見つからなかった場合は－１を返します。

備考：


　PrevCur();

直前のカーソル位置へ移動します。

戻り値：この関数に戻り値はありません。

備考：次のコマンドを実行するときそのカーソル位置が

　　　［直前のカーソル位置］として記憶されます。

　　　・テキストの先頭へ

　　　・テキストの最後へ

　　　・直前のカーソル位置へ

　　　・カーソル位置マーク

　　　・テキストの指定行へ

　　　・マーク位置へジャンプ


　Parent();

対応する ()、[]、、<> へ移動します。

戻り値：この関数に戻り値はありません。

備考：現カーソル位置が該当するかっこ上になければ何もしません。


　TagJamp();

タグジャンプを実行します。

現カーソル行よりテキストの最後までタグ行として認識できる文字列を探します。

タグ書式が見つかるとそのファイルをオーブンしタグ行へ移動します。

戻り値：この関数に戻り値はありません。

備考：タグ行として認識できる書式は次の通りです。

　　　　<ヘッダー>　: .\を含まない任意の文字列

　　　　<パス名>　　: .\を含む文字列（ファイル名）

　　　　<行番号>　　: １０進数


　Up();

カーソルを上（↑）へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　Down();

カーソルを下（↓）へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　Left();

カーソルを左（←）へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　Right();

カーソルを右（→）へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　Backward();

カーソルを１語左へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　Forward();

カーソルを１語右へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　LDEdge();

カーソルを表示行頭へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　RDEdge();

カーソルを表示行末へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　LEdge();

カーソルを論理行頭へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　REdge();

カーソルを論理行末へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　RollUp();

１行スクロールアップします。

戻り値：この関数に戻り値はありません。

備考：


　RollDown();

１行スクロールダウンします。

戻り値：この関数に戻り値はありません。

備考：


　PageUp();

１行ページアップします。

戻り値：この関数に戻り値はありません。

備考：


　PageDown();

１行ページダウンします。

戻り値：この関数に戻り値はありません。

備考：


　TopScr();

画面の上端へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　BotomScr();

画面の下端へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　GoBlok();

選択ブロックの先頭、最後へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　InsMode(int mode);

挿入モードを切り替えます。

パラメータ：int mode　－１＝トグル、０＝ＯＦＦ、１＝ＯＮ

戻り値：この関数に戻り値はありません。

備考：


　Ret();

リターンキーを入力します。

戻り値：この関数に戻り値はありません。

備考：


　Bs();

ＢＳキーを入力します。

戻り値：この関数に戻り値はありません。

備考：


　Del();

ＤＥＬキーを入力します。

戻り値：この関数に戻り値はありません。

備考：


　DelBWord();

現カーソル位置の１つ前の文字より語の先頭までを削除します。

戻り値：この関数に戻り値はありません。

備考：


　DelWord();

現カーソル位置の文字より語の終わりまでを削除します。

戻り値：この関数に戻り値はありません。

備考：


　DelLine();

現カーソル行を１行削除します。

戻り値：この関数に戻り値はありません。

備考：


　DelBefor();

現カーソル位置の１つ前の文字より行頭までを削除します。

戻り値：この関数に戻り値はありません。

備考：


　DelAfter();

現カーソル位置の文字より行末までを削除します。

戻り値：この関数に戻り値はありません。

備考：


　InsLine();

現カーソル行へ空行を１行挿入します。

戻り値：この関数に戻り値はありません。

備考：


　PopChr();

最後に削除した文字を復活します。

戻り値：この関数に戻り値はありません。

備考：


　PopLn();

最後に削除した行を復活します。

戻り値：この関数に戻り値はありません。

備考：


　Tabs();

タブキーを入力します。

戻り値：この関数に戻り値はありません。

備考：


　ConvWord();

半角アルファベット文字を１語、大／小文字変換します。

戻り値：この関数に戻り値はありません。

備考：現カーソル位置が、半角アルファベット文字上になければ何もしません。


　Select1();

選択モードを行選択モードに設定します。

戻り値：この関数に戻り値はありません。

備考：


　Select2();

選択モードを矩形選択モードに設定します。

戻り値：この関数に戻り値はありません。

備考：


　BlokCut();

選択範囲のテキストを削除し、ブロックスタックへコピーします。

選択範囲のテキストの内容は失われます。

戻り値：この関数に戻り値はありません。

備考：


　BlokCopy();

選択範囲のテキストをブロックスタックへコピーします。

選択範囲のテキストの内容は失われません。

戻り値：この関数に戻り値はありません。

備考：


　BlokPast();

ブロックスタックよりテキストを貼り付けます。

貼り付けられるのは最後にブロックスタックへコピーされたテキストです。

ブロックスタックの内容は変わりません。

戻り値：貼り付けたバイト数を返します。

備考：


　BlokIns();

ブロックスタックよりテキストを挿入します。

挿入されるのは最後にブロックスタックへコピーされたテキストです。

挿入したブロックスタックのテキストは失われます。

戻り値：この関数に戻り値はありません。

備考：


　StackDel();

ブロックスタック内のすべてのテキストを削除します。

戻り値：この関数に戻り値はありません。

備考：


　GetFindS();

カーソル位置の文字列を検索文字列として取得します。

戻り値：この関数に戻り値はありません。

備考：


　GetSelText(char *buf, int maxlen);

現在、選択されている文字列を buf へ 最大 maxlen バイト取得します。

文字列の最後にヌル文字('\0')を付加します。

戻り値：成功した場合は０が、失敗した場合は－１が返されます。

備考：


　GetCurText(char *buf, int maxlen);

カーソル位置を含む文字列 (単語) を カーソル位置を前にさかのぼって buf へ 最大 maxlen バイト取得します。

文字列の最後にヌル文字('')を付加します。

戻り値：この関数に戻り値はありません。

備考：


　Select(int mode);

選択モードをセットします。

パラメータ：int mode　０＝非ブロック、１＝行ブロック、２＝文字ブロック、３＝矩形ブロック

戻り値：この関数に戻り値はありません。

備考：


　AIndent(int mode);

オートインデントモードを切り替えます。

パラメータ：int mode　－１＝トグル、０＝ＯＦＦ、１＝ＯＮ

戻り値：この関数に戻り値はありません。

備考：


　SetCurPsPos(int mode);

貼り付け後のカーソル位置のモードを切り替えます。

パラメータ：int mode　０＝先頭のまま、１＝最後へ移動

戻り値：この関数に戻り値はありません。

備考：


　DispOff();

画面を非表示モードにします。

ステータスバー、ルーラーカーソルへの表示はします。

戻り値：この関数に戻り値はありません。

備考：


　DispOff2();

画面を非表示モードにします。

ステータスバー、ルーラーカーソルへの表示も禁止します。

戻り値：この関数に戻り値はありません。

備考：


　DispOn();

画面を表示モードにし再表示します。

戻り値：この関数に戻り値はありません。

備考：


　GotoX(int x);

表示行の範囲でカーソルをｘカラム位置へ移動します。

行が折り返している場合でも、現カーソル行の表示行末以降(次行)へは移動しません。

パラメータ：int x　移動するカラム位置を指定します。（左端は１）

戻り値：この関数に戻り値はありません。

備考：


　GotoX2(int x);

論理行の範囲でカーソルをｘカラム位置へ移動します。

行が折り返している場合は、現カーソル行の論理行末までの範囲で次行以降へ移動します。

パラメータ：int x　移動するカラム位置を指定します。（左端は１）

戻り値：この関数に戻り値はありません。

備考：


　GotoY(int y);

カーソルを画面のｙ行目へ移動します。

パラメータ：int y　移動する行位置を指定します。（上端は１）

戻り値：この関数に戻り値はありません。

備考：


　SetSakuzu(int mode);

罫線作図モードの切り替えます。

パラメータ：int mode　－１＝トグル、０＝ＯＦＦ、１＝ＯＮ

トグルとは、現在の状態を反転(OFF -> ON, ON -> OFF)させることを言います。

戻り値：この関数に戻り値はありません。

備考：


　SetSakuzuPen(int mode);

罫線作図での罫線の太さを切り替えます。

パラメータ：int mode　－１＝トグル、０＝細線、１＝太線

トグルとは、現在の状態を反転(細線 -> 太線 , 太線 -> 細線)させることを言います。

戻り値：この関数に戻り値はありません。

備考：


　SetKeiHogo(int mode);

罫線作図での罫線保護のON.OFFを切り替えます。

パラメータ：int mode　－１＝トグル、０＝OFF、１＝ON

トグルとは、現在の状態を反転(OFF -> ON , ON -> OFF)させることを言います。

戻り値：この関数に戻り値はありません。

備考：


　SetRealForm(int mode);

リアルタイム整形のON.OFFを切り替えます。

パラメータ：int mode　－１＝トグル、０＝OFF、１＝ON

トグルとは、現在の状態を反転(OFF -> ON , ON -> OFF)させることを言います。

戻り値：この関数に戻り値はありません。

備考：


　SetRealKajou(int mode);

リアルタイム整形は箇条書きで行うのON.OFFを切り替えます。

パラメータ：int mode　－１＝トグル、０＝OFF、１＝ON

トグルとは、現在の状態を反転(OFF -> ON , ON -> OFF)させることを言います。

戻り値：この関数に戻り値はありません。

備考：


　SetLineMode(int mode);

１行の数え方の論理行／表示行を変更します。

パラメータ：int mode　０＝論理行、１＝表示行

戻り値：この関数に戻り値はありません。

備考：


　SetTab(int num);

タブの文字数を変更します。

パラメータ：int num　セットするタブの文字数

　　　　　　２、４、６、８のいづれかの値を指定して下さい。

戻り値：この関数に戻り値はありません。

備考：


　SetFind(int mode);

検索条件をセットします。

パラメータ：ｍｏｄｅ　各検索条件は最下位から１ビットづつに割り当てられています。

　　　　　（ｉｎｔ）　０ビット＝検索方向　　　　　　　０＝（↓）、１＝（↑）

　　　　　　　　　　　１ビット＝大文字、小文字の区別　０＝あり、　１＝なし

　　　　　　　　　　　２ビット＝単語単位での検索　　　０＝Ｎｏ、　１＝Ｙｅｓ

　　　　　　　　　　　３ビット＝正規表現での検索　　　０＝Ｎｏ、　１＝Ｙｅｓ

　　　　　　　　　　　４ビット＝高度なあいまい検索での検索　０＝Ｎｏ、　１＝Ｙｅｓ

　　　　　　　　　　　５ビット＝\nをエスケープ文字としての検索 ０＝Ｎｏ、　１＝Ｙｅｓ

　　　　　　　　　　　６ビット＝検索失敗時ﾋﾞｰﾌﾟ音を鳴らす ０＝Ｎｏ、　１＝Ｙｅｓ

　　　　　　　　　　　７ビット＝高度なあいまい検索２での検索　０＝Ｎｏ、　１＝Ｙｅｓ

　　　　　　　　　　　６ビット＝検索失敗時メッセージを表示する ０＝Ｎｏ、　１＝Ｙｅｓ

戻り値：この関数に戻り値はありません。

備考：この関数は検索実行時の検索条件を変更します。

例題：検索方向（↓）、大文字、小文字の区別＝なし、

　　　単語単位での検索＝Ｙｅｓ、正規表現での検索＝Ｎｏの条件で

　　　高度なあいまい検索での検索＝Ｎｏの条件で

　　　文字列 PoPUp の検索を実行します

main()

{

SetFind(0x7);

SetFindS("PoPUp");

Find();

}


　SetFindS(char *str);

検索文字列をセットします。

パラメータ：char *str　検索文字列のポインタをセットします。

戻り値：この関数に戻り値はありません。

備考：この関数は検索実行時の検索文字列を変更します。

例題：文字列 PoPUp の検索を実行します

main()

{

char *str;

str = "PoPUp";

SetFindS(str);

Find();

}


　SetRep(int mode);

置換条件をセットします。

パラメータ：int mode

　　　　　　各検索条件は最下位ビットより１ビットづつ（置換範囲は２ビット）に

　　　　　　割り当てられています。

　　　　　　０ビット＝大文字、小文字の区別　　　０＝あり、１＝なし

　　　　　　１ビット＝単語単位での検索　　　　　０＝Ｎｏ、１＝Ｙｅｓ

　　　　　　２ビット＝一括置換か　　　　　　　　０＝個別、１＝一括

　　　　　　３,４ビット＝置換範囲

　　　　　　　　　　　０＝ＡＬＬ、１＝カーソル以降、２＝カーソル以前

　　　　　　５ビット＝置換終了後開始位置へ戻る　０＝Ｎｏ、１＝Ｙｅｓ

　　　　　　６ビット＝一括置換、高速変換モード　０＝Ｎｏ、１＝Ｙｅｓ

　　　　　　７ビット＝途中の置換件数表示　　　　０＝Ｎｏ、１＝Ｙｅｓ

　　　　　　８ビット＝\nをエスケープ文字として検索、置換　 ０＝Ｎｏ、１＝Ｙｅｓ

　　　　　　９ビット＝置換失敗時ﾋﾞｰﾌﾟ音を鳴らす ０＝Ｎｏ、　１＝Ｙｅｓ

　　　　　　１０ビット＝正規表現での検索　　　０＝Ｎｏ、　１＝Ｙｅｓ

　　　　　　１１ビット＝高度なあいまい検索での検索　０＝Ｎｏ、　１＝Ｙｅｓ

　　　　　　１２ビット＝高度なあいまい検索２での検索　０＝Ｎｏ、　１＝Ｙｅｓ

戻り値：この関数に戻り値はありません。

備考：この関数は置換実行時の置換条件を変更します。

例題：大文字、小文字の区別＝あり、単語単位での検索＝Ｙｅｓ、一括置換か＝一括

　　　置換範囲＝ＡＬＬ、置換終了後開始位置へ戻る＝Ｎｏ、一括置換、高速変換モード＝Ｙｅｓの条件で

　　　文字列 PoPUp を Menu への置換を実行します

main()

{

SetRep(0x46);

SetFindS("PoPUp");

SetRepS("Menu");

Replace();

}


　SetRepS(char *str);

置換文字列をセットします。

パラメータ：char *str　置換文字列のポインタをセットします。

戻り値：この関数に戻り値はありません。

備考：この関数は置換実行時の置換文字列を変更します。

例題：現在の置換条件で、文字列 PoPUp を Menu への置換を実行します

main()

{

SetFindS("PoPUp");

SetRepS("Menu");

Replace();

}


　ClipCut();

選択範囲のテキストを削除し、クリップボードへコピーします。

選択範囲のテキストの内容は失われます。

戻り値：この関数に戻り値はありません。

備考：


　ClipCopy();

選択範囲のテキストをクリップボードへコピーします。

選択範囲のテキストの内容は失われません。

戻り値：この関数に戻り値はありません。

備考：


　ClipPast();

クリップボードよりテキストを貼り付けます。

貼り付けられるのは最後にクリップボードへコピーされたテキストです。

クリップボードの内容は変わりません。

戻り値：貼り付けたバイト数を返します。

備考：


　Delete();

選択範囲のテキストを削除します。

戻り値：この関数に戻り値はありません。

備考：


　GetClipTextLen(int *nbytes, int *lines);

クリップボードの中のテキストの長さと論理行数を調べます。

 nbytes へはクリップボードの中のテキストの長さがバイト数でセットされます。

 lines へはクリップボードの中のテキストの論理行数がセットされます。

戻り値：取得に成功した場合は０を、失敗した場合は－１を返します。

備考：

例題：クリップボードの中のテキストのバイト数を調べて、

　　　２０００バイト未満であれば buf へ読み込んで現カーソル位置へ表示します。

main()

{

int nbytes, lines;

char buf[2000];

GetClipTextLen(&nbytes, &lines);

if(nbytes > 0 && nbytes < 2000)

{

  GetClipText(buf, 0, nbytes);

  buf[nbytes] = 0;

  PutStr(buf);

}

}


　GetClipText(char *buf, int pos, int maxlen);

クリップボードの中のテキスト先頭より pos バイト目より buf へ、最大 maxlen 読み込みます。

クリップボードの中のテキストの大きさが maxlen より小さい場合は読み込むバイト数は maxlen より小さくなります。(テキストの大きさのバイト数が読み込まれます)

クリップボードの中のテキストの先頭より読み込みたい場合 pos は０となります。

戻り値：読み込みに成功した場合は０を、失敗した場合は－１を返します。

備考：

例題：GetClipTextLen(); の例を参考にして下さい。


　PutSpace(int x int ,mode);

カーソル位置からｘカラム目までをタブ、スペースで埋めます。

パラメータ：int x　カラム位置を指定します。

　　　　　　int mode　０＝タブ，スペース、１＝スペースのみ

戻り値：この関数に戻り値はありません。

備考：この関数は置換実行時の置換条件を変更します。

例題：カーソル位置を１カラム目へ移動し、

　　　そこから１０カラム目までをスペースのみで埋めます。

main()

{

GotoX(1);

PutSpace(10, 1);

// PutSpace(10, 0);	// タブ、スペースで埋めるならこちら

}


　PutStr(char *str);

カーソル位置へ文字列 str を出力します。

パラメータ：char *str　出力する文字列のポインタを指定します。

戻り値：この関数に戻り値はありません。

備考：

例題：カーソル位置へ文字列 PoPUp を出力します。

main()

{

PutStr("PoPUp");

}


　GetStr(char *title);

title のダイアログを表示して文字列を入力します。

入力した文字列は、配列 Strings[256] へセットされます。

パラメータ：char *title　ダイアログのタイトル文字列のポインタを指定します。

戻り値：　０＝文字列が入力された。

　　　　ー１＝ＥＳＣが入力された。

　　　　ー２＝改行が入力された。

　　　　以外＝入力した文字列が表す数値。

備考：

例題：１－４のいずれかが選択されればそれぞれの処理を行います。

　　　１－４、ＥＳＣのいずれが入力されるまで処理を続行します。

      システム変数 Result はマクロ実行開始時に０に初期化されます。

main()

{

char *title;

while(Result < 1 || Result > 4)

{

  title = "Menu: 1.SetUp 2.Input 3.Draw 4.Print";

  GetStr(title);

  if(Result == 1)

    SetUp();

  else if(Result == 2)

    Input();

  else if(Result == 3)

    Draw();

  else if(Result == 4)

    Print();

  else if(Result == -1)

    break

  else

    Beep();

}

}

SetUp()

{

}

Input()

{

}

Draw()

{

}

Print()

{

}


　GetStr2(char *title, char *defstr);

動作は GetStr(); と同じですがデフォルトの入力文字列として defstr を渡すことが異なります。この関数を実行するとダイアログの文字列入力位置で defstr にセットした文字列がデフォルトの入力文字列として反転表示します。

パラメータ：char *title　ダイアログのタイトル文字列のポインタを指定します。

　　　　　　char *defstr　デフォルト入力文字列のポインタを指定します。

戻り値：　０＝文字列が入力された。

　　　　ー１＝ＥＳＣが入力された。

　　　　ー２＝改行が入力された。

　　　　以外＝入力した文字列が表す数値。

備考：

例題：GetStr(); の例をご覧ください。


　PutChr(int ch);

カーソル位置への文字の出力、又はコマンドキーの実行を行います。

パラメータ：int ch

　　　　　　・文字の出力の場合

　　　　　　　半角文字＝上位バイトは０、下位バイトへ文字コード

　　　　　　　全角文字＝シフトＪＩＳコードをセット

　　　　　　・コマンドキーの実行の場合

　　　　　　　上位バイトにコマンドキーＮｏ．下位バイトは０

戻り値：この関数に戻り値はありません。

備考：コマンドキーの実行では［キーコマンド設定］メニューで登録できる

　　　２３１のコマンドが実行できます。

　　　コマンドキーＮｏ．は先頭（ファイル：新しく作成）が０、

　　　最後（全てを保存して終了）が２３０の２３１種類です。

例題：

main()

{

int c:

// カーソル位置へ文字Ａを出力します。

PutChr('A');

// コマンドキー３０（検索：ＧＲＥＰの実行）を実行します。

PutChr(30 << 8);

// 同上

c = 30;

PutChr(c << 8);

}


StrChr(int code, char *str);

　StrChr(int code､ char *str);

文字 code を文字列 str より検索します。

パラメータ：int code　　検索する文字

　　　　　　char *str　検索される文字列

戻り値：０以上＝見つかった位置（先頭は０）

　　　　　－１＝見つからなかった

備考：

例題：カーソル位置の文字を文字列 str より検索します。

      見つかった場合 システム変数 Result には見つかった位置が、

      見つからなかった場合には－１がはいります。

      Code はシステム変数でカーソル位置の文字コードを保持します。

main()

{

char *str;

str = "０１２３４５６７８９";

StrChr(Code, str);

}


　InKeyCmd();

文字、又はキーコマンドの入力を、入力があるまで待って受け取ります。

制御文字(20H以下の文字)は入力しません。

ＭＭエディタ98 のすべてのウインドウのキーコマンド入力が対象です。

戻り値：・半角文字入力の場合

　　　　　上位バイトは０、下位バイトへ文字コード

　　　　・全角文字入力の場合

　　　　　シフトＪＩＳコード

　　　　・コマンドキー入力の場合

　　　　　上位バイトにコマンドキーＮｏ．下位バイトは０

備考：この関数はキーボード待ちの状態をつくりＭＭエディタ98 へのキーボード入力を

　　　フック（横取り）して文字、又はキーコマンドの入力をします。

　　　この関数でキーボード待ちの状態にあるときは、他のテキストウインドウを

　　　アクティブにしてそこでキーボード入力をしてもこの関数がキーボード入力

　　　を横取りしますのでご注意下さい。

例題：これは作表マクロの一部です。

　　　終了キー（コマンドキー 10）が押されるまでＭＭエディタ98 の

　　　すべてのキーを横取りしてそれぞれの処理をします。

main()

{

while(1)

{

  InKeyCmd();

  if(Result & 0xff)	// 文字の入力

    InMoji();

  else

  {

    c = Result >> 8;

    if(c == 10)	// ＭＭの終了キー（メニューへ戻る）

      return;

    else if(c == 49)	// リターンキー（罫線の描画、消去）

      DrawKei();

    else if(c == 35 || c == 36)	// １語右へ、左へキー（サイズ変更）

      HSize();

    else if(c == 43 || c == 44)	// ページアップ、ダウンキー（サイズ変更）

      VSize();

    else if(c >= 50 && c <= 60)	// 行編集キー、ＢＳキーからＴＡＢキーまで

      InMoji();

    else if(c == 66 || c == 67)	// ブロックのペースト（張り付け、挿入）

      InMoji();

    else

      PutChr(Result);

  }

}

}


　KBCut();

矩形ブロックを削除します。

戻り値：この関数に戻り値はありません。

備考：この関数はマクロプログラム blokcut.mac を

　　　呼び出すことにより実現されています。


　KBCopy();

矩形ブロックをコピーします。

戻り値：この関数に戻り値はありません。

備考：この関数はマクロプログラム blokcopy.mac を

　　　呼び出すことにより実現されています。


　KBIns();

矩形ブロックを挿入します。

戻り値：この関数に戻り値はありません。

備考：この関数はマクロプログラム blokins.mac を

　　　呼び出すことにより実現されています。


　MacroEx(char *macro);

外部マクロプログラムを実行します。

パラメータ：char *macro　実行する外部マクロプログラム名のポインタ

戻り値：この関数に戻り値はありません。

備考：実行するマクロプログラムは［環境 設定］メニューの［日本語ＩＭＥとＤＬＬ、起動マクロの制御］の［ 実行するマクロを置くフォルダを指定して下さい ］で指定されたフォルダへ、されてなければＭＭエディタ98 の起動フォルダになければなりません。

例題：マクロプログラム zenhan.mac を実行します。

main()

{

MacroEx("zenhan.mac");

}


　Beep();

ビープ音を出力します。

戻り値：この関数に戻り値はありません。

備考：


　FPrint(char *fmt, arg1, ･･･);

Ｃ言語の標準関数 printf(); のように fmt のあとに可変個の引数を持つことができ fmt の制御のもとにその引数を変換しカーソル位置へその文字列を出力します。

文字列 fmt の中では % とその続きの文字列により変換書式を指定します。

文字列 fmt の中の % と対応する引数の数は合っている必要があります。

・文字列 fmt の中で使用できる書式指定の使用例

　%d	　－－　１０進数へ変換します。

　%4d	　－－　４文字幅の１０進数へ変換します。

　　　　変換文字が４文字に未たない場合はスペースが付加されます。

　%04d	　－－　４文字幅の１０進数へ変換します。

　　　　変換文字が４文字に未たない場合は０が付加されます。

　%s	　－－　対応する変数より文字列を入力します。

　%4s	　－－　対応する変数より文字列を４文字入力します。

パラメータ：char *fmt　書式指定を含む出力文字列

　　　　　　arg1,･･･　　書式に対応した可変個の引数

戻り値：この関数に戻り値はありません。

備考：

例題：現在の日付をカーソル位置へ出力します。

main()

{

int y, m, d;

GetDate(&y, &m, &d); // 日付を得る

y = y - 1900;

FPrint("%02d/%02d/%02d",y, m, d); // 例：98/05/31

}


　GetDate(int *y, int *m, int *d);

現在の日付を取得します。

パラメータ：int *y　年を得る変数のアドレス

　　　　　　int *m　月を得る変数のアドレス

　　　　　　int *d　日を得る変数のアドレス

戻り値：この関数に戻り値はありません。

備考：


　GetWeek(int *week);

現在の曜日を取得します。

値は、０（日）－　６（土）でセットされます。

パラメータ：int *week　曜日を得る変数のアドレス

戻り値：この関数に戻り値はありません。

備考：


　GetTime(int *h, int *m, int *s);

現在の時刻を取得します。

パラメータ：int *h　時を得る変数のアドレス

　　　　　　int *m　分を得る変数のアドレス

　　　　　　int *s　秒を得る変数のアドレス

戻り値：この関数に戻り値はありません。

備考：


　KbHit();

いずれかのキーが押されたかを調べます。

戻り値：キーが押されていない場合は０を、押された場合はキーのコード(仮想キーコード)を返します。

仮想キーコードについては仮想キーコード一覧 をご覧ください。

備考：


　Open(char *fname);

新しいウインドウを開いて、ファイル fname をオープンして読み込みます。

fname が存在しない場合は新しく作成してオープンします。

fname を指定しないと何もオープンできません。

パラメータ：char *fname　オープンするファイル名文字列

戻り値：fname が指定されていない場合は－１を、指定された場合は０を返します。

備考：

例題：新しいウインドウを開いて、ファイル READ.TXT をオープンします。

main()

{

Open("READ.TXT");

}


　Save();

現在のファイル内容に変更が有れば、上書き保存します。

戻り値：この関数に戻り値はありません。

備考：


　Close();

テキストウインドウを閉じます。テキストの内容に変更があっても保存しないで閉じますので、 Close(); 実行前に保存が必要な場合は閉じる前に保存（Save();）を行って下さい。

戻り値：この関数に戻り値はありません。

備考：


　CloseAs();

テキストウインドウを閉じます。テキストの内容に変更があれば閉じる前に保存するかのメッセージを表示して確認を行います。

戻り値：この関数に戻り値はありません。

備考：


　Getline(char *line);

現在行（表示行）の内容を line へ取得します。

改行で終わっている行も改行は含まれません。

文字列 line の最後へはヌル文字('\0')が付加されます。

line は現在の表示行1行の長さより大きい配列エリアを確保して下さい。

1行の表示文字数の最大は250文字ですので禁則文字等も考慮して260文字確保しておけば万全です。

パラメータ：char *line　現在行の内容を受取るバッファ

戻り値：この関数に戻り値はありません。

備考：

例題：現在行（表示行）の内容を line へ取得します。

main()

{

char line[260];

Getline(line);

}


　Getline2(char *line);

現在行（表示行）の内容を画面のイメージで line へ取得します。

つまりタブ文字が画面で占めている文字分のエリアに展開されて line へ取得されます。

したがってタブ文字がある場合も、カラム位置の文字を正確に得ることができます。

line[30-1] でその前にタブ文字があっても３０カラム位置の文字を得ることができます。

改行で終わっている行も改行は含まれません。

文字列 line の最後へはヌル文字('\0')が付加されます。

line は現在の表示行1行の長さより大きい配列エリアを確保して下さい。

1行の表示文字数の最大は250文字ですので禁則文字等も考慮して260文字確保しておけば万全です。

パラメータ：char *line　現在行の内容を受取るバッファ

戻り値：この関数に戻り値はありません。

備考：

例題：現在行（表示行）の内容を line へ取得します。

main()

{

char line[260];

Getline2(line);

}


　GetFileName(char *fname);

現在編集中のファイル名をドライブ名、フォルダ名を含むフルパスで fname へ取得します。

ファイル名は最大256文字(最後のヌル文字まで含んで)になりますので fname のエリアは256文字は確保されておいて下さい。

パラメータ：char *fname　ファイル名を受取るバッファ

戻り値：この関数に戻り値はありません。

備考：

例題：現在編集中のファイル名を fname へ取得します。

main()

{

char fname[256];

GetFileName(fname);

}


　WinExec(char *fname);

外部のアプリケーションソフトを起動します。

パラメーターを渡す場合は起動するファイル名の後に半角スペースで区切って書いて下さい。

パラメータ：char *fname　起動するファイル名

戻り値：起動に成功した場合は０以外の値を返します。

備考：

例題：MmSetup.exe をパラメータとして現在編集中のファイル名を渡して起動します

main()

{

char s[500], fname[256];

GetFileName(fname);

Strcpy(s, "MmSetup.exe ");

Strcat(s, fname);

WinExec(s);

}


　Message(char *message);

メッセージを表示します。

パラメータ：char *message　表示するメッセージ文字列

戻り値：この関数に戻り値はありません。

備考：

例題：メッセージを表示します。

main()

{

Message("MmSetup.exe を起動します。");

}


　MessageBox(int mode, char *message);

メッセージとボタンを表示して押されたボタンの結果を得ます。

パラメータ：int mode　０＝「ＯＫ」、１＝「はい」と「いいえ」、

　　　　　　２＝「はい」と「いいえ」と「キャンセル」のボタンを表示します。

　　　　　　char *message　表示するメッセージ文字列

戻り値：押されたボタンの結果によってそれぞれ

　　　　「はい」＝１、「いいえ」＝０、「キャンセル」＝－１ が返されます。

備考：

例題：メッセージと「はい」と「いいえ」のボタンを表示し「はい」が押されたら MmSetup.exe を起動します。

main()

{

MessageBox(1, "MmSetup.exe を起動しますか。");

if(Result == 1)

WinExec("MmSetup.exe");

}


　Sleep(int time);

マクロの実行を指定した時間停止します

パラメータ：int time　実行を停止する時間をミリ秒(ms)単位で指定して下さい。

戻り値：この関数に戻り値はありません。

備考：

例題：ブザーを鳴らし５秒後に MmSetup.exe を起動します。(1000ms = １秒)

main()

{

Beep();

Sleep(5000);

WinExec("MmSetup.exe");

}


　Menu(char **tbl, int count);

tbl に設定されたメニュー項目を、count 個としてメニューを表示します。

count 個分 tbl へはメニュー項目が設定されていなければなりません。

メニューの途中にセパレータを入れたい場合は、その項目へは文字の全くない文字列（NULL文字列）を設定して下さい。

パラメータ：char **tbl　メニュー項目をセットしたテーブルのアドレス

　　　　　　int count　　メニュー項目の数

戻り値：先頭の項目を０とした選択された項目の位置が返ります。

　　　　セパレータは項目ではないので位置はありません。

　　　　[ESC]キーが押された場合は－１が返ります。

備考：

例題：メニューを表示して対応する外部のマクロを起動します。

　　　この例では s[2] はセパレータです。

main()

{

char *s[4];

s[0] = "外部マクロ Test1.mac を起動します";

s[1] = "外部マクロ Test2.mac を起動します";

s[2] = "";

s[3] = "外部マクロ Test3.mac を起動します";

Menu(s, 4);

if(Result == 0)

  MacroExec("Test1.mac");

else if(Result == 1)

  MacroExec("Test2.mac");

if(Result == 2)

  MacroExec("Test3.mac");

}


　GetKeyState(int key);

指定したキーボードのキー key が押されているかどうかを調べます。

SHIFTキーの場合は 0x10 CRTLキーの場合は 0x11 CAPSLOCKキーの場合は 0x14 を指定して下さい。

その他のキーについては仮想キーコード一覧 をご覧ください。

 Windows API GetKeyState(); と仮想キーコードの仕様は同じです。

パラメータ：int key　押されているかどうか調べるキー

戻り値：キーが押されている場合は１、押されていない場合は０が返ります。

備考：

例題：SHIFTキーが押されているか調べています。

main()

{

GetKeyState(0x10);

}


　Strcpy(char *dest, char *src);

文字列 src を dest へコピーします。

文字列 src は dest をコピーできるだけのエリアを確保しておいて下さい。

パラメータ：char *dest　コピー先の文字列

　　　　　　char *src　　コピー元の文字列

戻り値：この関数に戻り値はありません。

備考：

例題：MmSetup.exe をパラメータとして現在編集中のファイル名を渡して起動します

{

char s[500], fname[256];

GetFileName(fname);

Strcpy(s, "MmSetup.exe ");

Strcat(s, fname);

WinExec(s);

}


　Strcat(char *dest, char *src);

src を dest の最後へ追加します。

dest は src を追加してできあがる文字列を格納出来るだけ十分なエリアが必要です。

パラメータ：char *dest　追加先の文字列

　　　　　　char *src　　追加元の文字列

戻り値：この関数に戻り値はありません。

備考：

例題：MmSetup.exe をパラメータとして現在編集中のファイル名を渡して起動します

{

char s[500], fname[256];

GetFileName(fname);

Strcpy(s, "MmSetup.exe ");

Strcat(s, fname);

WinExec(s);

}


　Strcmp(char *s1, char *s2);

文字列 s1 と s2 の中の各文字を大文字と小文字を区別して比較します。比較は各文字列の最初の文字から始めて、対応する文字に異なるものが見つかるか、または文字列の最後に達するまで続けます。

パラメータ：char *s1, char *s2

戻り値：文字列が同じ場合は０、s1 が s2 より小さい場合は負の値、s1 が s2 より大きい場合は正の値

備考：

例題：編集中のテキストが合致なら MmSetup.exe を起動します。

main()

{

char fname[256];

GetFileName(fname);

Strcmp(fname, "d:.doc");

if(Result == 0)

  WinExec("MmSetup.exe");

}


　Strcmpi(char *s1, char *s2);

Strcmpi は Strcmp と同じ動作をしますが比較するときに大文字と小文字の区別をしません。

パラメータ：char *s1, char *s2

戻り値：文字列が同じ場合は０、s1 が s2 より小さい場合は負の値、s1 が s2 より大きい場合は正の値

備考：

例題：編集中のテキストが合致(大文字と小文字の区別をしない)なら MmSetup.exe を起動します。

main()

{

char fname[256];

GetFileName(fname);

Strcmpi(fname, "d:.doc");

if(Result == 0)

  WinExec("MmSetup.exe");

}


　Strlen(char *str);

文字列 src の長さを調べます。

長さは文字列の終わりのヌル文字を除いた長さです。

パラメータ：char *str　長さを調べる文字列

戻り値：文字列 src の長さを返します。

備考：

例題：編集中のファイル名の長さを調べます。

main()

{

char fname[256];

GetFileName(fname);

Strlen(fname);

}


　Atoi(char *str);

文字列 str を整数に変換します。

パラメータ：char *str　変換する文字列

戻り値：文字列 str の整数値を返します。

備考：

例題：文字列 "250" を整数値へ変換します。結果は システム変数 Result へ 250 が返ります。

main()

{

char s[20];

Strcpy(s, "250");

Atoi(s);

}


　Itoa(int value, char *str);

整数 value をヌル文字で終了する文字列に変換して、結果を ｓｔｒ へ格納します。

パラメータ：int value, char *str

戻り値：この関数に戻り値はありません。

備考：

例題：整数値 250 を文字列へ変換します。結果は s[] へ "250" がセットされます。

main()

{

char s[20];

Itoa(250, s);

}


　Memset(char *s, int c, int n);

s が指す配列の先頭から n バイトに文字 c をセットします。

パラメータ：char *s,int c,int n

戻り値：この関数に戻り値はありません。

備考：

例題：s が指す配列の先頭から 20バイトを ０ で埋めます。

main()

{

char s[20];

Memset(s, 0, 20);

}


　Strstr(char *s1, char *s2);

文字列 s1 内に文字列 s2 が最初に現れる位置を返します。

パラメータ：char *s1, char *s2

戻り値：s1 の先頭位置を０とした値で見つかった位置を返します。

　　　　見つからない場合は －１ を返します。

備考：

例題：s 内に "９５" の現れる位置を探します。結果は システム変数 Result へ 12 が返ります。

main()

{

char *s;

s = "ＭＭエディタ９５";

Strstr(s, "９５");

}


　Strstri(char *s1, char *s2);

半角英数字の大文字と小文字を区別せずに

文字列 s1 内に文字列 s2 が最初に現れる位置を返します。

パラメータ：char *s1, char *s2

戻り値：s1 の先頭位置を０とした値で見つかった位置を返します。

　　　　見つからない場合は －１ を返します。

備考：

例題：s 内に "editor" の現れる位置を探します。結果は システム変数 Result へ 2 が返ります。

main()

{

char *s;

s = "MMEditor 98";

Strstri(s, "editor");

}


　Strstrp(char *s1, char *s2);

文字列 s1 内に文字列 s2 が最初に現れるアドレスを返します。

パラメータ：char *s1, char *s2

戻り値：s1 上の見つかったアドレスを返します。

　　　　見つからない場合は ＮＵＬＬ (数字の０) を返します。

備考：

例題：s 内に "９５" が最初に現れるアドレスを探します。結果は p へそのアドレスが返ります。

main()

{

char *s, *p;

s = "ＭＭエディタ９５";

p = Strstrp(s, "９５");

}


　Strchr(char *s1, int c);

文字列 s1 内に文字 c が最初に現れるアドレスを返します。

パラメータ：char *s1, int c

戻り値：s1 上の見つかったアドレスを返します。

　　　　見つからない場合は ＮＵＬＬ (数字の０) を返します。

備考：

例題：s 内に 文字'９' が最初に現れるアドレスを探します。結果は p へそのアドレスが返ります。

main()

{

char *s, *p;

s = "ＭＭエディタ９５";

p = Strchr(s, '９');

}


　Strrchr(char *s1, int c);

文字列 s1 内に文字 c が最初に現れるアドレスを文字列 s1 の最後の文字より探して返します。

パラメータ：char *s1, int c

戻り値：s1 上の見つかったアドレスを返します。

　　　　見つからない場合は ＮＵＬＬ (数字の０) を返します。

備考：

例題：s 内に 文字'９' が最初に現れるアドレスを s1 の最後の文字より探します。結果は p へそのアドレスが返ります。

main()

{

char *s, *p;

s = "ＭＭ９５エディタ９５";

p = Strrchr(s, '９');

}


　Memcpy(char *dest, char *src, int nbyte);

nbyte のブロックを src から dest へコピーします。

src は nbyte をコピーできるだけのエリアを確保しておいて下さい。

src と dest が重複する場合の動作は未定義です。

パラメータ：char *dest　コピー先のエリア

　　　　　　char *src　 コピー元のエリア

　　　　　　int  nbyte　コピーするバイト数

戻り値：この関数に戻り値はありません。

備考：


　GetCurDirectory(char *dir);

カレントディレクトリを文字列 dir へ取得します。

パラメータ：char *dir

戻り値：dir へ取得した文字数。

備考：

dir のエリアは２５６文字以上確保して下さい。

例題：カレントディレクトリを配列 dir[] へ取得します。

main()

{

char dir[256];

GetCurDirectory(dir);

}


　LoadLibrary(char *fname);

ｆｎａｍｅ で指定したＤＬＬをロードします。

パラメータ：char *fname

戻り値：ロード成功の場合ハンドル番号が返ります。失敗の場合は －１ が返ります。

備考：

例題：ＤＬＬ Menubar.DLL をロードします。

main()

{

LoadLibrary("Menubar.DLL");

}


　FreeLibrary(int handle);

ｈａｎｄｌｅ で指定したＤＬＬをメモリから開放します。

パラメータ：int handle　開放するＤＬＬのハンドル番号

戻り値：この関数に戻り値はありません。

備考：

例題：ハンドル番号 handle のＤＬＬを開放します。

main()

{

int handle;

LoadLibrary("Menubar.DLL");

handle = Result

...........................

...........................

LoadLibrary(handle);

}


　SetWindowText(char *text);

文字列 text をウインドウのキャプションへ表示します。

パラメータ：char *text

戻り値：この関数に戻り値はありません。

備考：

例題：編集中のファイル名を取得してキャプションへ表示します。

main()

{

char fname[256];

GetFileName(fname);

SetWindowText(fname);

}


　GetWindowText(char *text);

ウインドウのキャプションへ表示されている内容を文字列 text へ取得します。

パラメータ：char *text

戻り値：text へ取得した文字数。

備考：

ｔｅｘｔ のエリアは２５６文字以上確保して下さい。

例題：キャプションに表示されている内容を取得してカーソル位置へ書き込みます。

main()

{

char fname[256];

GetWindowText(fname);

PutStr(fname);

}


　LOpen(char *fname, int mode);

データの読み書きのためにファイル fname をオープンします。

ファイル内のデータを読み書きするために LRead(); や LWrite(); を使う前に呼び出します。

パラメータ：char *fname　オープンするファイル名文字列

　　　　　　int  mode　　ファイルへのアクセス方法

　　　　　　　　　　　　０　　読み出し専用にファイルをオープン

　　　　　　　　　　　　１　　書き込み専用にファイルをオープン

　　　　　　　　　　　　２　　読み書き用にファイルをオープン

戻り値：オープン出来た場合はファイルハンドル番号、失敗の場合は －１ を返します。

備考：

例題：ファイル test.txt をオープンしてファイルの内容を読み込みすべて表示します。

main()

{

int handle;

char buf[300];

int sIns, sInd;

sIns = Ins;

sInd = Indent;

InsMode(1);

AIndent(0);

LOpen("test.txt", 0);  // ファイルをオープンする

if(Result == -1)

return;

handle = Result;

while(1)

{

KbHit();

if(Result == 0x1b)  // [ESC]が押されたら中断

break;

Memset(buf, 0, 256);  // 読み込みバッファクリアー

LRead(handle, buf, 255); // 最大255バイト読み込み

if(Result == -1)

break;

PutStr(buf);  // データを画面へ表示

if(Result < 255)  // 255バイト以下の読み込みなら最後のデータ

break;

}

LClose(handle);  // ファイルを閉じる

InsMode(sIns);

AIndent(sInd);

}


　LCreat(char *fname);

読み出し書き込み可能な通常のディスクファイルを新たに作成します。

指定されたファイル fname が存在しない場合は新たにファイルを作成し、すでに存在する場合はそのファイルをオープンしてサイズを０バイトにします。

パラメータ：char *fname　オープンするファイル名文字列

戻り値：作成出来た場合はファイルハンドル番号、失敗の場合は －１ を返します。

備考：

例題：概存のファイル test.txt をオープンして 新しく作成した newtext.txt ファイルへ

　　　ファイルの内容をすべてコピーしています。

main()

{

int handle, nhandle;

char buf[300];

LOpen("test.txt", 0);  // コピー元のファイルをオープン

if(Result == -1)

return;

handle = Result;

LCreat("newtext.txt");  // コピー先のファイルを新しく作成

if(Result == -1)

{

LClose(handle);

return;

}

nhandle = Result;

while(1)

{

KbHit();

if(Result == 0x1b)  // [ESC]が押されたら中断

break;

LRead(handle, buf, 256); // 最大256バイト読み込み

if(Result <= 0)  // データエンドかエラー

break;

LWrite(nhandle, buf, Result); // 読み込んだバイトを書き込み

if(Result < 256)  // 256バイト以下の読み込みなら最後のデータ

break;

}

LClose(handle);  // ファイルを閉じる

LClose(nhandle);  // ファイルを閉じる

}


　LSeek(int handle, int offset, int org);

ディスクファイル内の別の位置へファイルポインタを移動します。

あらかじめ LCreat();、LOpen();のいづれかでオープンしておいたファイルポインタの位置を変更します。

ファイルポインタは LRead(); や LWrite(); で処理を開始する位置を示します。

パラメータ：int handle　対象とするファイルのハンドル番号

　　　　　　int offset　ポインタの移動バイト数

　　　　　　int org　　ポインタの移動方向

　　　　　　０　　　　　ファイルポインタをファイルの先頭から ｏｆｆｓｅｔ バイト移動する

　　　　　　　　　　　　ｏｆｆｓｅｔ と ｏｒｇ の両方を０にすると、ポインタはファイルの先頭へ移動する

　　　　　　１　　　　　ファイルポインタをファイルの現在位置から ｏｆｆｓｅｔ バイト移動する

　　　　　　２　　　　　ファイルポインタをファイルの終わりから ｏｆｆｓｅｔ バイト移動する

戻り値：ファイルの先頭からファイルポインタまでのオフセット。

備考：

例題：

main()

{

LSeek(handle, 0, 0); // ファイルポインタをファイルの先頭へ移動します。

LSeek(handle, 10, 1); // ファイルポインタを現在位置から10バイト後ろへ移動します。

LSeek(handle, 0, 2); // ファイルポインタをファイルの終端へ移動します。

}


　LClose(int handle);

ディスクファイルをクローズします。

LCreat();、LOpen();のいづれかでオープンしたディスクファイルをクローズします。

クローズするとすぐにファイルハンドル番号は無効となります。

クローズされたファイルは再オープンされるまで読み書き出来ません。

パラメータ：int handle クローズするファイルのハンドル番号

戻り値：ファイルがクローズされた場合は ０、エラーの場合は -１ を返します。

備考：

ファイルを作成したりオープンした後は、必ずクローズしなければなりません。

ファイルをオープンしたまま終了した場合、そのファイルでのデータの書き込みが反映されていなかったり最悪の場合ファイルの内容が壊れることもあります。

例題：LOpen();, LCreat(); の例をご覧ください。


　LRead(int handle, char *buf, int bytes);

ファイルポインタの現在位置から開始して、ディスクファイルからデータを読み出します。

最初にファイルをオープンしたときは、ファイルポインタはファイルの先頭に設定されています。

LRead(); を使いデータを読み出すに従いポインタは読み取ったバイト数だけ移動します。

ポインタのファイル内の位置は、LSeek(); で変更出来ます。

パラメータ：int  handle　対象とするファイルのハンドル番号

　　　　　　char *buf　　　データを読み込むバッファ

　　　　　　　　　　　　　バッファのサイズは少なくとも ｂｙｔｅｓ 必要です

　　　　　　int  bytes　　読み出すバイト数

戻り値：ファイルから実際に読み取ったバイト数。エラーの場合は －１ を返します。

備考：

例題：LOpen();，LCreat(); の例をご覧ください。


　LWrite(int handle, char *buf, int bytes);

ファイルポインタの現在位置から開始して、ディスクファイルへデータを書き込みます。

最初にファイルをオープンしたときは、ファイルポインタはファイルの先頭に設定されています。

LWrite(); を使いデータを書き込むに従いポインタは書き込んだバイト数だけファイルの終わりへ移動します。

ポインタのファイル内の位置は、LSeek(); で変更出来ます。

パラメータ：int  handle　対象とするファイルのハンドル番号

　　　　　　char *buf　　　データを書き込むバッファ

　　　　　　　　　　　　　バッファのサイズは少なくとも ｂｙｔｅｓ 必要です

　　　　　　int  bytes　　書き込むバイト数

戻り値：ファイルへ実際に書き込んだバイト数。エラーの場合は －１ を返します。

備考：

例題：LCreat(); の例をご覧ください。


　DeleteFile(char *fname);

指定したファイル fname を削除します。

パラメータ：char *fname　削除するファイル名文字列

戻り値：削除出来た場合は ０ 以外の値、失敗の場合は ０ を返します。

備考：

例題：カレントディレクトリに存在するファイル test.txt を削除します。

main()

{

DeleteFile("test.txt");  // ファイル test.txt を削除

}


　GetRegiStr(char *entry, char *keyname, char *str, int size);

レジストリよりＭＭ98 関連の文字列のデータを読み込みます。

entry, keyname に読み出したいエントリー名、キー名を指定して str へ最大 size バイトのデータを読み込みます。

該当するキー名が存在しない場合には str へはヌル文字列がセットされます。

プログラミングに必要と思われるＭＭ98 の状態は各システム変数で参照出来ますので、この関数を使う必要はほとんどないと思います。

パラメータ：char *entry, char *keyname, char *str, int size

戻り値：この関数に戻り値はありません。

備考：

データを読み込む str は size バイトのエリアを確保しておく必要があります。

例題：エントリー名 Kankyou、キー名 BackupDir の文字列データを取得してその内容を現カーソル位置へ表示します。

main()

{

char buf[300];

GetRegiStr("Kankyou", "BackupDir", buf, 256);

PutStr(buf);

}


　GetRegiInt(char *entry, char *keyname, int def);

レジストリよりＭＭ98 関連の整数値のデータを読み込みます

entry, keyname に読み出したいエントリー名、キー名を指定してください。

ｄｅｆ には一致するキー名が見つからなかったときに返される値を指定してください。

プログラミングに必要と思われるＭＭの状態は各システム変数で参照出来ますので、この関数を使う必要はほとんどないと思います。

パラメータ：char *entry, char *keyname, int def

戻り値：該当するキー名の整数値、該当するキー名が存在しない場合には def にセットした値が返ります。

備考：

例題：エントリー名 Show、キー名 AIndent の整数値を num へ取得します。

main()

{

int num;

num = GetRegiInt("Show", "AIndent", 0);

}


　GetIniStr(char *entry, char *keyname, char* str, int size, char *inifname);

指定のＩＮＩファイルより文字列データを読み込みます。

ＩＮＩファイル名はフルパスで指定して下さい。パス名が省略された場合はＩＮＩファイルは Windows のフォルダにあるものと仮定されます。

entry, keyname へ読み出したいエントリー名、キー名を指定してください。

str へＩＮＩファイルより文字列データを読みこみます。

size へ読み込むデータの最大バイト数を指定して下さい。この値は通常は str のサイズを指定します。

inifname へは対象となるＩＮＩファイル名を指定します。

パラメータ：char *entry, char *keyname, char* str, int size, char *inifname

戻り値：この関数に戻り値はありません。

備考：

例題：ＭＭの起動ディレクトリにあるＩＮＩファイル mm.ini の エントリー名 Kankyou、キー名 BackupDir にセットされている文字列を buf へ読み込みます。

main()

{

char fname[300], buf[300];

GetMmPath(fname);

Strcat(fname, "\mm.ini");

GetIniStr("Kankyou", "BackupDir", buf, 300, fname);

}


GetIniInt(char *entry, char *keyname, int def, char *inifname);
int TMmChildGetIniInt(char* entry, char* keyname, int def, char *inifname)K

　GetIniInt(char *entry, char *keyname, int def, char *inifname);

指定のＩＮＩファイルより整数値データを読み込みます。

ＩＮＩファイル名はフルパスで指定して下さい。パス名が省略された場合はＩＮＩファイルは Windows のフォルダにあるものと仮定されます。

entry, keyname へ読み出したいエントリー名、キー名を指定してください。

ｄｅｆ には一致するキー名が見つからなかったときに返される値を指定してください。

inifname へは対象となるＩＮＩファイル名を指定します。

パラメータ：char *entry, char *keyname, int def, char *inifname

戻り値：該当するキー名の整数値、該当するキー名が存在しない場合には def にセットした値が返ります。

備考：

例題：ＭＭの起動ディレクトリにあるＩＮＩファイル mm.ini の エントリー名 Show、キー名 AIndent にセットされている整数値を num へ読み込みます。

main()

{

int num;

char fname[300];

GetMmPath(fname);

Strcat(fname, "\mm.ini");

num = GetIniInt("Show", "AIndent", 0, fname);

}


　SetIniStr(char *entry, char *keyname, char* str, char *inifname);

指定のＩＮＩファイルへ文字列データを書き込みます。

ＩＮＩファイル名はフルパスで指定して下さい。パス名が省略された場合はＩＮＩファイルは Windows のフォルダにあるものと仮定されます。

entry, keyname へ読み出したいエントリー名、キー名を指定してください。

str にある文字列データをＩＮＩファイルへ書き込みます。

inifname へは対象となるＩＮＩファイル名を指定します。

パラメータ：char *entry, char *keyname, char* str, char *inifname

戻り値：この関数に戻り値はありません。

備考：

例題：ＭＭの起動ディレクトリにあるＩＮＩファイル mm.ini の エントリー名 Kankyou、キー名 BackupDir に buf にセットされた文字列を書き込みます。

main()

{

char buf[300], fname[300];

Strcpy(buf, "c:\mm98\trash");

GetMmPath(fname);

Strcat(fname, "\mm.ini");

SetIniStr("Kankyou", "BackupDir", buf, fname);

}


　SetWindowCascade();

ウインドウをカスケード形式で表示します。

戻り値：この関数に戻り値はありません。

備考：


　SetWindowVTile();

ウインドウを縦タイル形式で表示します。

戻り値：この関数に戻り値はありません。

備考：


　SetWindowHTile();

ウインドウを横タイル形式で表示します。

戻り値：この関数に戻り値はありません。

備考：


　SetWindowStyle(int mode);

ウインドウの表示形式をカスケードかタイルへ変更します。

なおこの関数は表示形式の内部状態を変更するだけで、実際に編集中のウインドウの表示状態は変更しません。

パラメータ：int mode　　０＝カスケード、１＝タイル

戻り値：この関数に戻り値はありません。

備考：


　SetTileMode(int mode);

タイル表示時のタイルの形(縦長か横長)の設定をします。

なおこの関数は表示形式の内部状態を変更するだけで、実際に編集中のウインドウの表示状態は変更しません。

パラメータ：int mode　　０＝縦長、１＝横長

戻り値：この関数に戻り値はありません。

備考：


　NextWindow();

アクティブなウインドウを次のウインドウへ移動します。

次のウインドウとは現在アクティブなウインドウの一つ下のウインドウです。

現在アクティブなウインドウは一番下へ移動します。

戻り値：この関数に戻り値はありません。

備考：


　Strncpy(char *dest, char *src, int maxlen);

最大 maxlen 個の文字を src から dest へコピーします。

長すぎれば切り捨て、短すぎれば dest にヌル文字を付け加えます。

src の長さが maxlen と同じかそれ以上の場合には dest の終わりにはヌル文字はつけられません。

パラメータ：char *dest　　コピー先の文字列

　　　　　　char *src　　　コピー元の文字列

　　　　　　int  maxlen　コピーする最大文字数

戻り値：この関数に戻り値はありません。

備考：

dest は maxlen のエリアを確保しておいて下さい。

例題：

例題：キャプションに表示されている文字列を最大２０バイト取得してカーソル位置へ表示します。

main()

{

char s[21], fname[256];

GetWindowText(fname);

Strncpy(s, fname, 20);

s[20] = 0;

PutStr(s);

}


　ChangeMruNo(int no);

使用するファイル履歴No.(1 - 5)を変更します。

変更したいファイル履歴No.(1 - 5)をセットして下さい。

５種類あるファイル履歴No.の先頭から最後までを 1 から 5 の数字で指定して下さい。

パラメータ：int no　使用するファイル履歴No.を 1 - 5 の範囲で指定して下さい

戻り値：この関数に戻り値はありません。

備考：

例題：３番目のファイル履歴No.を使用するように変更します。

main()

{

ChangeMruNo(3);

}


　GetVersion();

ＭＭエディタのバージョンＮｏ．を取得します。

バージョン ２．００の場合は２００、２．３０の場合は２３０、２．４５の場合は２４５ 等と３桁の整数値を 返します。

戻り値：バージョンＮｏ．が３桁の整数値として返ります。

備考：


　SetToolbar(int type, int mode);

ツールバーの表示のON.OFFを変更します。

type : ０ = ツールバー１、１ = ツールバー２、２ = ツールバー１、２の両方の制御を行います。

パラメータ：int type, int mode　１＝表示、０＝非表示

戻り値：この関数に戻り値はありません。

備考：


　SetStatusbar(int mode);

ステータスバーの表示のON.OFFを変更します。

パラメータ：int mode　１＝表示、０＝非表示

戻り値：この関数に戻り値はありません。

備考：


GetMmPath(char *path);

　GetMmPath(int *path);

path の指すエリアへＭＭの起動フォルダを得ます。

path にはフォルダ名がはいるだけのエリアが必要です。

パラメータ：char *path

戻り値：この関数に戻り値はありません。

備考：


　SetMargin(int num);

１行の折り返し文字数をセットします。

パラメータ：int num　１０－２５０の範囲で指定して下さい。

戻り値：この関数に戻り値はありません。

備考：


　SetPageMode(int mode);

１行の数え方が表示行モード時に、行No.へページ内行No.を表示するかを指定します。

パラメータ：int mode　１＝ページ内行No.表示、０＝ページ内行No.非表示

戻り値：この関数に戻り値はありません。

備考：


　SetPageLn(int num);

１行の数え方が表示行モードで行No.へページ内行No.を表示モード時の１ページ当たりの行数をセットします。

パラメータ：int num 　２－３２０００の範囲で指定して下さい。

戻り値：この関数に戻り値はありません。

備考：


　SPrint(char * buf, char *fmt, arg1, ･･･);

Ｃ言語の標準関数 sprintf(); のように fmt のあとに可変個の引数を持つことができ fmt の制御のもとにその引数を変換し buf へその文字列を出力します。

FPrint(); の sprintf()版です。

戻り値：この関数に戻り値はありません。

備考：

例題：現在の日付をカーソル位置へ出力します。

main()

{

int y, m, d;

char buf[300];

GetDate(&y, &m, &d); // 日付を得る

y = y - 1900;

SPrint(buf, "%02d/%02d/%02d",y, m, d); // 例：98/07/31

PutStr(buf);

}


　SetJumpMode(int mode);

指定行へのジャンプでのジャンプするモードを変更します。

パラメータ：int mode　０＝中央行、１＝現在行、２＝先頭行、３＝最下位行

戻り値：この関数に戻り値はありません。

備考：


　GetEvent();

イベントマクロでのイベントNo.を取得します。

戻り値：この関数に戻り値はありません。

備考：


　SetTimer(int second);

second にタイマーイベントの発生する時間間隔(秒)を指定してタイマーを起動します。

これ以降、指定した間隔毎にタイマーイベントが発生し イベントNo. 9 を渡してイベントマクロ MmEvent.macを起動します。

指定した間隔毎に実行したい処理を、このマクロに書いておけば実行されます。

イベントマクロ(MmEvent.mac)では、発生したイベントNo.を取得してそこへ実行したいマクロの動作を書いて下さい。

パラメータ：int second

戻り値：この関数に戻り値はありません。

備考：

例題：５秒毎にタイマーイベントが発生するように値をセットしてタイマーを起動します。

これ以降、５秒間隔毎にタイマーイベントが発生しイベントマクロ MmEvent.macを起動します。

main()

{

SetTimer(5);

}


　KillTimer();

起動中のタイマーを停止します。

これ以降、タイマーイベントは発生しなくなります。

戻り値：この関数に戻り値はありません。

備考：


　InKeyChar();

制御文字(20H以下の文字)を含む文字の入力を、入力があるまで待って受け取ります。

ＭＭエディタ98 のすべてのウインドウのキーコマンド入力が対象です。

戻り値：・半角文字入力の場合

　　　　　上位バイトは０、下位バイトへ文字コード

　　　　・全角文字入力の場合

　　　　　シフトＪＩＳコード

備考：この関数はキーボード待ちの状態をつくりＭＭエディタ98 へのキーボード入力を

　　　フック（横取り）して文字、又はキーコマンドの入力をします。

　　　この関数でキーボード待ちの状態にあるときは、他のテキストウインドウを

　　　アクティブにしてそこでキーボード入力をしてもこの関数がキーボード入力

　　　を横取りしますのでご注意下さい。

例題：[ESC]キーが押されるまでキーを入力し続けて何らかの処理を行います。

main()

{

while(1)

{

  InKeyChar();

  if(Result == 0x1b)	// [ESC]の入力

    return;

  else

    InMoji();	// この関数で何らかの処理を行います。

}

}


　SetCurDirectory(char *dir);

カレントディレクトリを文字列 dir へ変更します。

文字列にドライブ名を含めることはできません。

パラメータ：char *dir

戻り値：成功した場合は RESULT へ０が、失敗の場合はそれ以外の数値が返ります。

備考：

例題：カレントディレクトリを \MYDIR\WORD へ変更します。

main()

{

SetCurDirectory("\\MYDIR\\WORD");

}


　SetIMEStatus(int sw);

ＩＭＥのＯＮ、ＯＦＦの状態をセットします。

sw が１であればＩＭＥをＯＮ、sw が０であればＩＭＥをＯＦＦにします。

パラメータ：int sw

戻り値：この関数に戻り値はありません。

備考：


　SetOpenFType(int sw);

ファイルを開くで使用するダイアログのタイプをセットします。

sw が０であればビュアー付きのダイアログを

１であれば９５標準のダイアログをセットします。

パラメータ：int sw

戻り値：この関数に戻り値はありません。

備考：


　LoadSdFile(char *fname);

表示設定書式ファイル fname を読込みます。

読込みに成功すると表示設定の内容は読み込んだ書式の内容に変更され画面も新しい設定内容で更新されます。

パラメータ：char *fname

戻り値：読込みに成功した場合は RESULT へ０以外の値を返します。

備考：

例題：カレントディレクトリの表示設定書式ファイル MMDOS.DS1 を読込みます。

main()

{

LoadSdFile("MMDOS.DS1");

}


　GetSdFile(char *fname);

アクティブウインドウで使用されている表示設定ファイル名を取得します。

ただしテキストウインドウが開かれてから一度も表示設定書式ファイルが読み込まれていない場合は、表示設定書式ファイルが未使用と言うことで fname へはヌル文字列 (fname[0] へ '') がセットされます。

パラメータ：char *fname

戻り値：この関数に戻り値はありません。

備考：


　LoadPrFile(vhar *fname);

表示設定書式ファイル fname を読込みます。

読込みに成功すると現在の印刷書式を読み込んだ書式へ変更します。

パラメータ：char *fname

戻り値：読込みに成功した場合は RESULT へ０以外の値を返します。

備考：

例題：カレントディレクトリの印刷書式ファイル A4TXT.PR1 を読込みます。

main()

{

LoadPrfile("A4TXT.PR1");

}


　MaxWindow();

テキストウインドウを最大化して表示します。

戻り値：この関数に戻り値はありません。

備考：


　MinWindow();

テキストウインドウを最小化して表示します。

戻り値：この関数に戻り値はありません。

備考：


　RestWindow();

テキストウインドウが、最大化または最小化して表示されている場合、元の大きさへ戻します。

戻り値：この関数に戻り値はありません。

備考：


　SetTileNum(int num);

タイル表示の場合に同時に表示するウインドウの数を変更します。

パラメータ：int num　同時に表示するウインドウの数を指定します

　　　　　　２－２０の範囲で指定して下さい。

戻り値：この関数に戻り値はありません。

備考：


　SetCascadSize(int mode);

カスケード表示時のウインドウの大きさの変更します。

パラメータ：int mode　０＝標準、１＝最大

戻り値：この関数に戻り値はありません。

備考：


　SetProtectWindow(int mode);

ウインドウを書き込み禁止（リードオンリーモード）にするかのモードの変更を行います。

パラメータ：int mode　０＝書き込みできる、１＝書き込み禁止

戻り値：この関数に戻り値はありません。

備考：