Copyright: ComWin Ver. 3.51J by M.Maedera


目次

＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊

   ＣｏｍＷｉｎ Ｖｅｒ． ３．５１Ｊ

   << Command Manager for Window System >>

＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊

この度は ComWin Ver. 3.51J をご利用いただきまして、

誠にありがとうごさいます。

目次

 1.概要

 2.同封ファイル一覧

 3.動作モード

 4.一般的な使用方法

 5.高度な使用方法

 6.技術詳細、制限事項

 7.改訂履歴

 8.仕様変更点

 9.著作権、送金方法

10.同封ファイルの詳細

11.コマンドリファレンス

12.メニューリファレンス

13.スクリプトリファレンス

14.EXPORT関数の説明

15.謝辞

-----------------------------------------------------------------------


概要

1.概要

    ComWin は Windows 環境に欠けていると思われる

    キャラクタ指向のシェルプログラムです。

    マウス操作にくらべて、キーボード操作は取り付きにくいものですが、

    効率的にカスタマイズされた環境では、

    キーボードは最速のオペレーションを提供します。

    ComWin は、見た目は DOS プロンプトに似ていますが、

    制約の多い DOS プロンプトと違い、Windows プログラムであり、

    Windows の様々なサービスを利用して、

    環境の向上のために次のような機能を提供します。

    ( 1) DOS、UNIXライクな内部コマンドの使用

    ( 2) Windows プログラムのローダーとして使用

    ( 3) アプリケーションとの関連付起動、エイリアス機能で起動操作を短縮

    ( 4) マルチステートメント、バッチファイルによる起動処理のバッチ化

    ( 5) ラインエディット、ヒストリ機能、ファイル名補完機能

    ( 6) ファイラープロンプト機能で快適なファイル操作

    ( 7) ドラッグ＆ドロップサーバー機能、選択文字列起動機能

    ( 8) ファンクションキーランチャー機能

    ( 9) フォント、背景色を設定、3-Dダイアログ、ツールバーの使用

    (10) キー割り当ての変更が可能

    (11) 過去の出力を参照できる

    (12) Windowsのshellとして使う

    (13) スタートアップ機能、起動時オプションで環境整備

    (14) リダイレクト、パイプ機能で柔軟なテキスト処理

    (15) 通信ポートに対応し、マルチユーザー、リモートアクセスが可能

    (16) 環境変数サーバー機能

    (17) ウイルスの自己診断機能

    その他高度な機能として次のようなものがあります。

    (1) ComWin の API を使用してキャラクタ系コマンドを拡張できる

    (2) コマンド実行部分を拡張改良できる

    (3) ユーザーインターフェースの置換が可能

    (4) DOSコマンドをComWin窓で実行可能

    (5) ANSIエスケープシーケンスが使用可能

    (6) cshライクな構造化スクリプト

    (7) Unicode対応コンソール

-----------------------------------------------------------------------


同封ファイル一覧

2.同封ファイル一覧

    ComWinを使用するためには、

    comwinx.exe,  comwld.exe, comwld.pif,  vcomwd.386,

    comwin.dll,   comwin.hlp, comwins.dll, comwint.dll,

    comwreg.exe

    を各自のWindowsディレクトリか、Windowsのシステムディレクトリか、

    パスで設定されたディレクトリのいずれかにコピーしてください。

    comwinx.exe (ComWin 端末モジュール(必須))

    comwld.exe (DOSコマンド用ローダー(必須))

    comwld.pif (DOSコマンド用PIFファイル(必須))

    vcomwd.386 (DOSコマンド用仮想デバイスドライバ(必須))

    comwinx.pif (DOSコマンド用PIFファイル(Ver. 2.40 互換))

    comwin.dll (ComWin 中枢DLL(必須))

    comwin.hlp (オンラインヘルプファイル(必須))

    comwins.dll (標準コマンドを提供するDLL(必須))

    comwint.dll (通信機能を提供するDLL(必須))

    comwreg.exe (ユーザー登録用モジュール(必須))

    comwin32.dll (ComWin32用アダプタ)

    bhole.exe (32bitゴミ箱ブラックホール)

    comwin.ini (作者の環境でのiniファイル)

    comwin.h (ComWinアプリ用ヘッダー例)

    comwin.lib (comwin.dll用インポートライブラリ、(非同封))

    comwin32.lib (comwin32.dll用インポートライブラリ)

    readme.txt (ドキュメントファイル)

    install.bat (簡単なインストーラ)

    hello.c (K&Rに敬意を表す最初のプログラム)

    hello.def (hello.cの定義ファイル)

    hello.exe (hello.cの実行モジュール(ComWin必要))

    hellocpp.cpp (MFC用の hello)

    sample1.c (MakeArgument,Gets,Fputsの使用例)

    sample1.def (sample1.cの定義ファイル)

    sample1.exe (sample1.cの実行モジュール(ComWin必要))

    sample2.c (Windowsプログラムからのメッセージ出力例)

    sample2.def (sample2.cの定義ファイル)

    sample2.exe (sample2.cの実行モジュール(ComWin必要))

    sample3.c (拡張コマンドを提供するDLL例)

    sample3.def (sample3.cの定義ファイル)

    sample3.dll (sample3.cのDLL(ComWin必要))

    sample4a.bat (ComWin用バッチファイルのサンプル)

    sample4b.cws (ComWin用バッチファイルのサンプル)

    sample5.c (端末ソフトの作成例)

    sampel5.def (sample5.c の定義ファイル)

    sample5.exe (sample5.c の実行モジュール(ComWin必要))

    makefile (サンプルをメークするためのmakefile例)

-----------------------------------------------------------------------


動作モード

3.動作モード

    ComWinは２つの動作モードを備えています。

    (1) コマンドラインモード

        DOS プロンプトと同様にコマンドを一行入力することで、

        Windowsプログラム、DOSプログラム、Win32sプログラム、

        ComWinの提供する内部コマンド、バッチファイルを実行します。

        ラインエディット、ヒストリー、ファイル名補完機能があります。

        エスケープシーケンスを解釈するので

        色の変更、カーソル位置変更も行えます。

    (2) ビューワーモード

        過去の出力結果をスクロールバーを用いて参照することができます。

        過去の出力結果を500行まで記憶し、

        ファイル保存やクリップボード転送ができます。

　　　　選択した文字列を実行したり、ドロップファイル化できます。

        このモードではメニューバーが出現し、フォント、色などを

        各自の好みのものに変更する機能を提供します。

    モード切り替えは[ESC]キーを押すか、システムメニューの

    [menu Bar]によって切り替えることができます。

    参照

        コマンドリファレンス

        メニューリファレンス

-----------------------------------------------------------------------


一般的な使用方法

4.一般的な使用方法

    ComWinを起動するとDOS プロンプトに似た画面があらわれます。

    とりあえず、dir と入力してください。つぎに、winmineと入力してください。

    また、ESCキーを2､3回押してみてください。

    一般的な使用方法のイメージがつかめると思います。

    ( 1) DOS、UNIXライクな内部コマンドの使用

    ( 2) Windows プログラムのローダーとして使用

    ( 3) アプリケーションとの関連付起動、エイリアス機能で起動操作を短縮

    ( 4) マルチステートメント、バッチファイルによる起動処理のバッチ化

    ( 5) ラインエディット、ヒストリ機能、ファイル名補完機能

    ( 6) ファイラープロンプト機能で快適なファイル操作

    ( 7) ドラッグ＆ドロップサーバー機能、選択文字列起動機能

    ( 8) ファンクションキーランチャー機能

    ( 9) フォント、背景色を設定、3-Dダイアログ、ツールバーの使用

    (10) キー割り当ての変更が可能

    (11) 過去の出力を参照できる

    (12) Windowsのshellとして使う

    (13) スタートアップ機能、起動時オプションで環境整備

    (14) リダイレクト、パイプ機能で柔軟なテキスト処理

    (15) 通信ポートに対応し、マルチユーザー、リモートアクセスが可能

    (16) 環境変数サーバー機能

    (17) ウイルスの自己診断機能

-----------------------------------------------------------------------

   ( 1) DOS、UNIXライクな内部コマンドの使用

        DOSライクな内部コマンド

            サポート

                cls, cd, exit, for, md,

                rd, rem, set, type, ver,

                a:(ドライブ変更)

            機能に制限があるがサポート

                copy, ctty, date, del, dir,

                mode, path, pause, prompt, ren,

                time, vol

        UNIXライクな内部コマンド

            機能に制限があるがサポート

                alias, dirs, echo, fg, kill,

                history, popd, ps, pushd, pwd,

                test, unalias

        Win95ライクな内部コマンド

            機能に制限があるがサポート

                start

        独自サポートのコマンド

            clip, paste

        スクリプト系のコマンド

            break, breaksw, call, continue, else,

            end, endif, goto, if, return,

            shift, switch, then, until, while

        特別に設けているコマンド

            help サポートコマンドのリストを表示する。

            let   ローカル環境変数を操作する。

            printf 書式付き出力コマンド

            term 通信端末機能を提供する。

        Windows API 系のコマンド

            KeyboardLayout Keyboard Layout, IME を変更する。

            PostMessage 直接 PostMessage API を呼ぶ。

            SendMessage  直接 SendMessage API を呼ぶ。

            SetWindowPos 直接 SetWindowPos API を呼ぶ。

            SetWindowText  直接 SetWindowText API を呼ぶ。

            ShellExecute 直接 ShellExecute API を呼ぶ。

            win  直接 WinExec, LoadModule API を呼ぶ。

            reboot, restart MS-DOS, Windows を再起動する。

            shutdown Windows を終了させる。

            logoff Windows 95,NT からログオフする。(32ビット版のみ)

        各コマンドのパラメーターに /? を指定すると

        簡単なヘルプが表示されます。

-----------------------------------------------------------------------

   ( 2) Windowsプログラムのローダとして利用

        例

            >progman

            >taskman

            >notepad setup.txt

        DOSプログラムも comwld.exe,comwld.pif,vcomwd.386

        の機能を利用してDOSボックス内で起動します。

        Win32sプログラムも自動判別して起動します。

        32bit版

          空白を含むファイル名も引用符(")で括ることで実行可能です。

          ただし、外部コマンドに限ります。

        注意

        comwld.pifは各自の環境にあわせて最適化を試みてください。

        (comwld.pif は 386SX クラス用のタイムスライス値を指定していますので、

         動作に支障がある場合は dosprmpt.pif 程度のタイムスライス値を

         指定してください。DOS/Vユーザーの方は、

         フォント、言語モードも最適化してください。)

        DOSの内部コマンドを使用する場合は、

            c:\>command /c type autoexec.bat

            c:\>command.com /c type autoexec.bat

        のように使用してください。

        参照

            コマンドの優先順位

-----------------------------------------------------------------------

   ( 3) アプリケーションとの関連付起動、エイリアス機能で起動操作を短縮

    アプリケーションとの関連付起動

        ファイルマネージャの「アプリケーションとの関連付け機能」や

        登録データベース reg.dat で関連付けられた拡張子をもつファイルは、

        ファイル名を入力するだけでアプリケーションを起動します。

        例

            c:\windows>readme.wri

        ライトを起動し、readme.wri を開きます。

       (注意) アプリケーションの関連付けは win.ini [Extensions] で

       指定されているものが、reg.dat で関連付けされているものに優先します。

    エイリアス機能で起動操作を短縮

        エイリアス機能を使用することでアプリケーションの起動操作を

        大幅に短縮できます。alias, unalias コマンドを利用してください。

        例

            c:\>alias word c:\word5\winword

              word という文字列で winword を起動できます。

            c:\>alias man "write c:\windows\readme.wri"

              man と入力するだけで readme.wri を表示できます。

            c:\>alias ls "dir %1 /w"

              ls *.c が dir *.c /w と展開されます。

    フォルダー起動

        コマンドラインにディレクトリ名を入力するだけで、

        そのディレクトリがフォルダーとして起動します。

    ディレクトリ変更

        コマンドラインにディレクトリ名を入力するだけで、

        そのディレクトリに移動できます。

    シェルラッパー

        csh でお馴染みの「#!」が使用可能です。

        例えば、以下のsed のスクリプトファイルの先頭に

            #! sed -f

        という一行があれば、「sed -f tolower.sed」と展開されます。

        したがって、「sed -f tolower.sed foo.txt」は

        「tolower.sed foo.txt」で代用できます。

        c:\>type tolower.sed

        #! sed -f

        y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/

        c:\>tolower.sed tolower.sed

        #! sed -f

        y/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/

-----------------------------------------------------------------------

   ( 4) マルチステートメント、バッチファイルによる起動処理のバッチ化

    マルチステートメント

         コマンドラインにマルチステートメントの記述ができます。

         各コマンドを「 ;」で区切ってください。

         (';'の前に空白が必要です。)

         例

            c:\>cd c:\bmpdata ;pbrush

             ペイントブラシの作業ディレクトリが c:\bmpdata になります。

         また alias コマンドと併用すると便利です。

         例

            c:\>alias jxw "cd c:\jslib ;c:\tarowin\jxw"

              c:\>jxw

              JXW 関連のディレクトリにPATHが設定されていなくても起動できます。

            c:\>alias gv "pushd c:\bmpdata ;c:\gv\gv ;popd"

            c:\>gv

              ComWin 画面のカレントディレクトリを変更せずに、

              gv を適切な作業ディレクトリで起動できます。

    バッチファイル(.bat .cws)

        ComWin は、通常のバッチファイルの一行目に "REM BAT FOR COMWIN" と

        記述されているバッチファイルを ComWin 用のバッチファイルとして

        処理します。制御コード('#', '^') の扱いを別にすれば、

        MS-DOS 5.XX 完全上位互換の文法をもちます。

        (バッチ処理は Break(Ctrl+Pause)、STOP で停止します。)

        エイリアス機能で指定できないような長さを持つバッチ処理は

        バッチファイルで記述すると便利です。

          %0,%1,%2, ... %9 等の引数を使用できます。

          %PATH% のように環境変数を%で括ると環境変数が参照できます。

          call, goto, if, shift, が使用可能です。

          行頭の '@' 文字は無視されます。

        if の使用法

          if [not] exist filename command

          if [not] "string1" == "string2" command

        例

        c:\>type word.bat

        REM BAT FOR COMWIN  <---- これを一行目に記述するだけです。

        rem WORD の起動例

        echo WORD を起動します。

        pushd c:\word5\sample

        c:\word5\winword %1

        popd

        c:\>word readme.doc

        起動時オプションとバッチファイルを組み合わせることにより

        ComWin をスクリプトエンジンとして利用することが可能になります。

        例

        c:\>type script.bat

        REM BAT FOR COMWIN

        echo off

        notepad test.c ;fg

        cl test.c ;fg

        test

        exit /p

        c:\>comwinx /c script.bat

        参照 スクリプトリファレンス

    ショートカットファイル(.lnk)

        Windows95 で起動情報を集めた .lnk 拡張子をもつファイルを

        ショートカットファイルといいます。

        コマンドラインから直接、ショートカットファイル名を

        入力するだけで該当するプログラムが起動します。

-----------------------------------------------------------------------

   ( 5) ラインエディット、ヒストリ機能、ファイル名補完機能

        ラインエディット、ヒストリ機能

            カーソルキーを操作することで打鍵数を減らせます。

            (ヒストリ行は20行まで)

            環境設定ダイアログのヒストリ補完機能を有効にすることで、

            現在のヒストリと一致する文字列を過去の履歴から補完して

            表示します。

        ファイル名補完機能

            ファイル名を途中まで入力し、特定のキーコンピネーションを

            行うことでカーソル位置までの入力文字列から一致するファイル名を

            探し補完します。ワイルドカードも使用できます。

            ファイル名補完時に空白を含むファイルを指定する場合、

            ファイル名の最初に「"」をつけてください。

               cd "\Program files

        コマンド名補完機能

            コマンド行の最初の文字列を補完する場合、

            パスディレクトリを検索してコマンド名を補完する機能もあります。

            (.com .exe .bat .pif .cws .lnk 拡張子ファイルを対象)

        カット、コピー、ペースト機能

             クリップボードとのデータのやり取りを行えます。

             それぞれ Ctrl + X, Ctrl + C, Ctrl + V で実行できます。

             ただし、文字列が選択されていない場合は Ctrl + X, Ctrl + C は、

             一般文字として扱われます。

             (Windows 3.0 との互換のため Shift+Del, Ctrl+Ins, Shift+Ins も

              使用可能です。)

         環境変数参照機能

             echo %path% とすれば、path環境変数に該当する文字列に

             変換されます。

        カーソル位置右移動    →、Ctrl+L

        カーソル位置左移動    ←

        カーソル位置行頭      Ctrl+HOME

        カーソル位置行末      Ctrl+END

        カーソル位置直前削除  BS、Ctrl+H

        カーソル位置削除      DEL

        行頭まで削除          Ctrl+BS

        行末まで削除          Ctrl+DEL

        ヒストリ前候補        ↑、Ctrl+P

        ヒストリ次候補        ↓、Ctrl+N

        ファイル名補完前候補  Ctrl+↑、Ctrl+K

        ファイル名補完次候補  Ctrl+↓、Ctrl+J

        文字列選択            SHIFT + → or ←

        カット                Ctrl + X

        コピー                Ctrl + C

        ペースト              Ctrl + P

    ComWin のコマンドラインは次の文字を特殊文字として扱います。

        >, <  リダイレクト文字

        |     パイプ文字

        ;     コマンドセパレータ(直前に空白文字が必要)

        "     引用符

        %     環境変数引用符

        ^     直後の特殊文字の機能を消す

    参照  動作モード

-----------------------------------------------------------------------

   ( 6) ファイラープロンプト機能で快適なファイル操作

        ComWin は快適なコマンド編集を支援するために

        ファイラープロンプト機能を提供します。

        ファイラープロンプトはファイル一覧部分と、コマンド入力部分から

        構成されます。コマンド入力部分は通常のコマンドラインと同様の

        キー操作で、ヒストリ機能やファイル名補完機能をもちます。

        各キー機能の説明

        ←       ファイル一覧表示の大きさを切り替えます。

                 (全画面表示、部分表示)

                 (コマンドラインからファイル一覧にフォーカスを移します。)

        →       コマンドラインにフォーカスを移します。

        ↑       カーソルを上に移動します。

        ↓       カーソルを下に移動します。

        PageUp   カーソルを一頁分、上に移動します。

        PageDown カーソルを一頁分、上に移動します。

        Home     カーソルをファイルリストの最上部に移動します。

        End      カーソルをファイルリストの最下部に移動します。

        Space    現在のカーソル位置の項目を選択状態を変更します。

        Enter    現在のカーソル位置のファイル名をコマンドラインに

                 コピーします。

                 (選択状態が設定されているときは %* をコピー)

        コマンドラインの特殊文字

        ファイル一覧で、ファイルが選択されている場合

        (最左桁に '*' 印がある場合)

        %* は特殊文字として扱われます。

        コマンドラインで %* がある文字列を実行する場合、

        各選択ファイル名に置き換えられて実行されます。

        例

        *foo.txt

        *bar.txt

        -------------

        *>del %*

        ---> 実行時には

        del foo.txt ; del bar.txt

        となる。

-----------------------------------------------------------------------

   ( 7) ドラッグ＆ドロップサーバー機能、選択文字列起動機能

        ビューワーモードで選択した文字列をマウスでドラッグすることで、

        ドロップファイル化することができます。

        また選択文字列をダブルクリックすることで、

        プログラムを起動できます。

        (誤操作によるトラブルを避けるため、選択範囲が複数の文字列に

         わたっている場合は選択範囲中で一番左上の文字列のみを

         対象にしています。

         選択した文字列はカレントディレクトリのファイルとして

         ドラック＆ドロップ処理しますので、意図した結果と違う

         場合もあります。)

-----------------------------------------------------------------------

   ( 8) ファンクションキーランチャー機能

        ファンクションキーにコマンド文字列を指定することで

        合計48個のコマンドをボタン押下、マウスクリックで

        起動することが可能になります。

        登録方法は

       「メニューバー」→「オプション] →「ランチャー」

        で行います。

        また、

        「メニューバー」→「オプション」→「環境」→「ファンクションキー」

        でファンクションキーを表示できます。

        登録するコマンドは ComWin が解釈できるコマンドならなんでも可能です。

        例えば F1 に notepad を登録すると

        F1を押下したり、マウスクリックすることで notepad を実行します。

        このときに、コマンドラインや選択文字列に readme.txt という文字列が

        存在していれば、notepad readme.txt と結合して実行します。

        また、ファンクションキーバーの各ボタンは

        ドラッグ＆ドロップクライアントになっており、

        ComWin やファイルマネージャからファイル名をドロップすることで、

        それらを引数として、登録コマンドを実行します。

        Shift キー等を押下した状態で起動すると表示が乱れる場合がありますが、

        環境に悪影響を及ぼすことはありません。

        参照  Launcher メニュー

-----------------------------------------------------------------------

   ( 9) フォント、背景色を設定、3-Dダイアログ、ツールバーの使用

        ESCキーを押すことでメニューバーが出現します。

        フォント、背景色、起動時サイズを好みのものに変えることができます。

        File->Save Setting で現在の設定を保存できます。

        またダイアログを3-D化するDLLに対応しています。

        ctl3d.dll, ctl3dv2.dll をお持ちの方は ComWin でもご使用ください。

        ComWin の各ダイアログが 3-D 化します。

        カット＆ペースト、モード変更、ヘルプボタンのついた

        Windows 95 ライクなツールバーの使用が可能です。

        キャプションバーを消したり、左マージンをとることが可能です。

    参照  メニューリファレンス

-----------------------------------------------------------------------

   (10) キー割り当ての変更が可能

        メニューバーから「キー割り当て」を選択すると

        各操作に対してユーザーが独自のキーを

        割り当てることが可能になります。

        各操作に対して、優先キー、固定キー、補助キーの

        3つのキーを割り当てることが可能です。

        同種のキー割り当てが行われた場合、

        優先、固定、補助の順番に優先されます。

    参照  メニューリファレンス

-----------------------------------------------------------------------

   (11) 過去の出力を参照できる

        ESCキーを押すことで過去の出力を参照できます。

        またFile->Save Log で過去の出力をファイルにすることができます。

        Edit->Copyで選択範囲をクリップボードに転送できます。

        (過去の出力は500行まで)

    参照  動作モード

-----------------------------------------------------------------------

   (12) Windowsのshellとして使う

        (この機能は16bit版でのみ使用可能です。)

        menu Bar --> Option --> environment のダイアログで

        「Use as the shell」のチェックボックスを選択状態にすると

        シェルとして system.ini に登録されます。

        また、チェックボックスを非選択状態にすると

        直前に使用されていたシェルに戻します。

        注意  手書きや他のソフトで system.ini, comwin.ini を書き換えた場合

              直前のシェルが反映されない場合があります。

          (手書き変更の場合)

        system.iniの[boot] shell=progman.exeの

        記述をshell=comwinx.exeと変更すればWindowsのシェルとして利用できます。

        シェルとして使用する場合

        comwinx.exe comwld.exe comwld.pif vcomwd.386 comwin.dll

        comwin.hlp comwins.dll comwreg.exe comwtbar.dll を

        必ず以下のディレクトリのどれかに置いてください。

            windowsディレクトリ

            windowsシステムディレクトリ

            環境変数 PATH で指定されたディレクトリ

        (注意)なんらかのトラブルが発生して Windows が起動できなくなったときは、

              system.ini の [boot] shell= の記述を、shell=progman.exe とすれば、

              最悪の事態はさけられます。

        Windows 3.1 と完全に互換性のない環境でシェル登録していないのに、

        シェルと誤認識する場合があります。その場合、comwin.ini の

        [etc] に shell=0 と記述してください。

-----------------------------------------------------------------------

   (13) スタートアップ機能、起動時オプションで環境整備

    起動時オプション

        comwinx /t キャプション名

        と指定することで、comwinx.exe のキャプション名を

        変更することが可能です。

        複数の ComWin を区別したいときに指定してください。

        comwinx /e:数字

        と指定することで、ComWin 内で使用する環境変数のための領域を

        確保します。既定値は 1024 です。

        comwinx /c コマンド名 [オプション]

        と指定することで ComWin の起動時にコマンドを実行します。

        ComWin の解釈できるコマンドであればどのような文字列でも可能です。

        (/c オプションは必ず各オプションの最後に指定してください。)

        Windows のシェルとして利用する場合、

            shell=comwinx.exe /c cwstart.bat ; <--- 誤り

        上記のようにオプションを指定できません。

        この場合メニューから Option --> Arguments を選択してください。

        テキストボックスに [/e:2048 /c cwstart.bat] のように入力すれば、

        ComWin は起動時のコマンドとして解釈します。

        comwin.ini は次のように更新されます。

            例

            [StartUp]

            Arguments=/e:2048 /c cwstart.bat

        上記の指定はシェルとして使用する場合のみ有効です。

    スタートアップ機能

        シェルとして使用した場合スタートアップ機能が利用できます。

        comwin.iniに次のように記述してください。

        [StartUp]

        <起動するモジュール名（オプション指定可) = 起動状態>

        例)

            [StarUp]

            winclock=1

            winfile=6

        の形式で入力してください。

        起動状態は次の数値を指定できます。

          0 (SW_HIDE ウィンドウの非表示)

          1 (SW_SHOWNORMAL ウィンドウをアクティブ化し元の状態で復元表示)

          2 (SW_SHOWMINIMIZED ウィンドウをアクティブ化しアイコン表示)

          3 (SW_SHOWMAXIMIZED ウィンドウをアクティブ化し最大化ウィンドウ表示)

          4 (SW_SHOWNOACTIVATE ウィンドウを前の表示状態で表示)

          5 (SW_SHOW ウィンドウをアクティブ化し現在の位置・サイズで表示)

          6 (SW_MINIMIZE ウィンドウのアイコン表示)

          7 (SW_SHOWMINNOACTIVATE ウィンドウをアイコンで表示)

          8 (SW_SHOWNA ウィンドウの現在状態で

          9 (SW_RESTORE SW_SHOWNORMALと同じ)

      数字が多くて不便を強いると思いますが、

      この数字は WinExec API に渡す第2引き数そのものです。

      通常は次の3つしか必要ないと思います。

          標準起動       winfile=1

          最大化起動     winfile=3

          アイコン化起動 winfile=6

      スタートアップ機能は過去との互換性のために用意してあります。

      バッチスクリプトの使用できる起動時オプションをご使用ください。

    参照  Windowsのshellとして使う

-----------------------------------------------------------------------

   (14) リダイレクト、パイプ機能で柔軟なテキスト処理

        リダイレクト、パイプという用語は標準入出力機能の具体例として

      使用される用語です。Windows には DOS や UNIX で重要な機能となっている

      標準入出力をサポートする機能を持ったシェルは存在しません。

      標準入出力機能の素晴らしさは多くの文献で述べられおり、

      あらためて説明する必要はないと思いますが、

      この場で、私が強調したいことは次の点です。

      「標準入出力はデーターの入出装置を抽象化することで、

        プログラマー、ユーザーを問わず、データーそのものに、

        意識を集中させる。」ということです。

      プログラマーは余分なことを考えず、純粋にデーター加工のアルゴリズムを

      追求できますし、ユーザーは余分な操作をせずに純粋に必要なデーターを

      取得することができます。

      そこで、ComWin は Windows 上に標準入出力機能を実現しました。

      使用法は簡単で、DOS や UNIX でお馴染みの ">", ">>", "<", "|" を

      用いるだけです。

      また対応ソフトの作り方も簡単で、ComWin の提供している API

      Puts, Gets, Fputs, Fgets を DOS ソフトを作る感覚で使用すれば、

      その時点で標準入出力サポートソフト (フィルター) ができあがります。

      もちろん、ComWin の API を用いて作られた Ver. 2.01 公開前のソフトも

      ComWin Ver. 2.01 以上を用いることで標準入出力対応になります。

      注意

        a)標準入出力はテキストファイルのみを対象にしています。

        b)DOSコマンドと併用できないため、機能の設定解除がおこなえます。

        使用するためには、「メニューバー」 ---> 「オプション」 --->

        「環境」 ---> 「フィルタを使用」 のチェックを ON にしてください。

        この場合、DOSコマンドに対してリダイレクト等は

        「find "abc" *.txt ^> find.lst」等で行えます。

        c)"CON", "PRN", "AUX" といったスペシャルファイルは使用できません。

        誤って使用すると、システムハングを引き起こしますので注意してください。

        d)"NUL" ファイルは利用できますので、バッチファイルのなかで

        余分なメッセージを出力したくない場合等、利用してください。

-----------------------------------------------------------------------

   (15) 通信ポートに対応し、マルチユーザー、リモートアクセスが可能

      ComWin は term コマンドを実行することで簡易通信ソフトになります。

      テキストだけの送受信を行う場合は手軽に利用できます。

      設定ダイアログに必要項目を入力して実行するだけです。

      ComWin は ctty コマンドを使用することにより、

      入出力デバイスを通信ポートに切り替えることができます。

      コンピューターを複数使用の方は、

      リモートから RS-232C インターフェースを経由して、

      ComWin の起動しているホストマシンの

      ハードウェアリソース(CPU、メモリ、ディスク等)を利用できます。

      利用するためにはリモート側で通信ソフトを準備してください。

      通信ポートの設定は mode コマンドで設定したものにあわせ,

      ローカルエコー ON の状態で使用してください。

      この機能を利用することで Windows の GUI 部分以外のサービスは

      リモート側で利用可能になります。

      例えば、286マシンを使用の方が Windows マシンにアクセスすることで

      Windows の メモリ管理等のサービスを利用できます。

      またリモートからホストマシンを制御することで Windows システムで

      マルチユーザー環境を実現できます。(他人が使用中のホストマシンを

      リモートシャットダウンするという痛快な離れ業も実現できます。)

      通信端末機能と通信サーバー機能を組み合わせることにより、

      適当なケーブルを用意すればリモートデバッグに使用する

      こともできます。

     参照 ctty, mode, term

-----------------------------------------------------------------------

   (16) 環境変数サーバー機能

      ここでの「環境変数サーバー」とは「子プロセスに環境変数を

      継承できるプログラムローダー」という意味です。

      DOS での command.com に相当する機能と考えてください。

      DOS や UNIX の世界ではごく普通の機能なのですが、

      Windows の世界にこの機能をサポートしているプログラムの存在を

      私は知りません。

      環境変数サーバー機能を使用することで目的のプログラムにあった

      環境変数を Windows を再起動せずに設定することが可能になります。

      例えば、Windows と DOS で、同名で別個のコマンド使用する場合に

      PATH を切り替えることが可能ですし、通常128文字までしか設定できない

      PATH 環境変数を各アプリ毎に必要な部分だけ設定することで、

      文字数の不足を補えます。

      環境変数サーバー機能を利用するためには、environment メニューで

      「子プロセスへ環境継承」をチェックするか、win コマンドに

      /e オプションを付けて起動してください。

      注意

        環境変数サーバーは Windows プログラムにしか利用できません。

        DOSプログラム、Win32sプログラムでは利用不可です。

        (LoadModule API の仕様)

        環境変数サーバーを使用している場合、親プロセスは子プロセスへ

        環境変数領域を提供するのと引き替えに、子プロセス本来の

        環境変数領域を引き受ける構造になっているようです。

        (LoadModule API の不可解な仕様)

        この仕様により親プロセスは子プロセスを起動する度に

        少しずつ使用メモリ領域を拡大していきます。

        当然、親プロセスを終了させればその領域も解放されますので、

        問題はないのですが、唯一 ComWin がシェル状態の場合は

        Windows を起動している間、少しずづメモリを圧迫していきますので、

        留意しておいてください。

        (シェル状態以外では ComWin を終了するとメモリは解放されます。)

-----------------------------------------------------------------------

   (17) ウイルスの自己診断機能

        たいした機能ではないのですが、起動時と終了時に

        自分のファイルサイズをチェックする機能を持っています。

        したがってウイスルに感染した場合には、ダイアログが表示されます。

        ただし、自分以外のファイルをチェックするわけではないので

        過度の期待は持たないでください。ワクチン機能はありません。

        （あくまでも自分が感染したかどうかしかわかりませんし、

        すべてのウイルスに対して有効なわけではありません。）

-----------------------------------------------------------------------


高度な使用方法

5.高度な使用方法

    (1) ComWin の API を使用してキャラクタ系コマンドを拡張できる

    (2) コマンド実行部分を拡張改良できる

    (3) ユーザーインターフェースの置換が可能

    (4) DOSコマンドをComWin窓で実行可能

    (5) ANSIエスケープシーケンスが使用可能

    (6) cshライクな構造化スクリプト

    (7) Unicode対応コンソール

    参照

        EXPORT関数の説明

-----------------------------------------------------------------------

 (1) ComWin の API を使用してキャラクタ系コマンドを拡張できる

    Windows のプログラムを作成する場合最初に問題になるのは、

    必要もないウィンドウを作成するのに無駄な時間を費やすことです。

    最近は各処理系も工夫して DOS 感覚でプログラミングできるような

    クラスライブラリを提供していますが、

    生成されたプログラムは実用性があるとは思えません。

    そこで ComWin はキャラクタ系のコマンドを作成する必要のある

    ユーザーのために入出力系の API を提供しています。

    各API は基本的にANSI C の仕様に準じており

    新しく学習する項目は少なくするように努めています。

    また ComWin の API はデバイス非依存を目指しており、

    ComWin 対応ソフトの入出力はディスプレイ、キーボードという

    概念を超越し、専門特化された ComWin 用端末を用意することで、

    ネットワーク、DDE、OLE 等にも対応できると思います。

    次の ANSI準拠 API を提供しています。

    LONG  FAR PASCAL Puts(LPSTR);

    LPSTR FAR PASCAL Gets(LPSTR);

    LONG  FAR PASCAL Fputs(LPSTR, LPVOID);

    LPSTR FAR PASCAL Fgets(LPSTR, LONG, LPVOID);

    LONG  FAR PASCAL System(LPSTR);

    LONG  FAR PASCAL Fwrite(LPVOID, LONG, LONG, LPVOID);

    LONG  FAR PASCAL Fread(LPVOID, LONG, LONG, LPVOID);

    LONG  FAR PASCAL cwFputsW(LPWSTR, LPVOID);

    また次のサービス API も提供します。

    LONG  FAR PASCAL Getch(void);

    LONG  FAR PASCAL Inkey(void);

    DWORD FAR PASCAL GetComWinLong(DWORD, DWORD);

    int   FAR PASCAL MakeArgument(HINSTANCE,LPSTR,LPSTR,LPINT,LPSTR,int);

    LONG  FAR PASCAL cwPutevn(LPSTR);

    LPSTR FAR PASCAL cwGetenv(LPSTR);

    LONG  FAR CDECL  cwFprintf(LPSTR, LPSTR, ...);

    上記関数と同機能別名の次の関数群もあります。

    cwPuts(=Puts), cwGet(=Gets), cwFputs(=Fputs), cwFgets(=Fgets),

    cwSystem(=System), cwGetch(=Getch), cwInkey(=Inkey)

    cwFwrite(=Fwrite), cwFread(=Fread)

    参照  Puts, Gets, Fputs, Fgets, System,

          Getch, Inkey, Fwrite, Fread,

          GetComWinLong, MakeArgument,

          cwPutenv, cwGetenv,

          cwFprintf, cwFputsW,

          hello.c, sample1.c, sample2.c

-----------------------------------------------------------------------

 (2) コマンド実行部分を拡張改良できる

    DOS の世界には command.com、UNIX の世界には csh 等

    その他多くの優れたキャラクタシェルが存在しますが、

    共通している短所は、実行形式が一つのファイルになっており、

    ユーザーの拡張が非常に困難であるということです。

    そのためユーザーが新しくキャラクタシェルを作成するためには

    すべての処理を自前で作らなければならず、大変な困難を伴います。

    ComWin はユーザーが使いやすいキャラクタシェルを

    比較的容易に作成できるように次の3つの処理を

    DLL として独立させました。

    BOOL FAR PASCAL CallInterpreter(FARPROC FAR *, LPSTR, LPLONG);

    BOOL FAR PASCAL CallCommand(FARPROC FAR *, LPSTR, LPLONG);

    BOOL FAR PASCAL CallScript(FARPROC FAR *, LPSTR, LPLONG);

    (引き数、戻り値さえ一致していれば関数名は任意です。)

    CallInterpreter(仮称) (コマンド文字列解釈関数)

      コマンド文字列を専門的に解釈する関数です。

      command.com は複雑な解釈を行いませんが、

      csh はかなり複雑な構文を処理します。

      それらの構文も整理することで

      個々の単純なコマンド群に分解することが可能です。

      その処理を専門的に行います。

    CallCommand(仮称) (コマンド実行関数)

      個々のコマンドは外部コマンドとして作成することが可能ですが

      小さなファイルがたくさんある状態は管理上不便です。

      小さなコマンドはCallCommand 関数のなかに

      コンパクトにまとめることで使用効率が高まります。

      また、外部コマンドと違い、内部コマンドは端末部と

      同じタスクで実行されるので環境変数の設定コマンド、

      ディレクトリ変更コマンドに有利です。

    CallScript(仮称) (スクリプト解釈実行部)

      各シェルは独自のスクリプト言語をサポートしています。

      しかし残念なことにほとんどのシェルが単一のスクリプト言語しか

      サポートしていません。ComWin は CallScript 関数機能を持った DLL を

      取り込むことで複数のスクリプト言語を扱うことが可能です。

      （各スクリプトファイルの区別は拡張子で行います。)

    参照  CallInterpreter(仮称), CallCommand(仮称),

          CallScript(仮称), sample3.c

-----------------------------------------------------------------------

 (3) ユーザーインターフェースの置換が可能

    端末という用語は様々な意味で使われていますが、

    このでは単に外部とのインタフェース部という意味で使います。

    コマンドラインモードも、ビューワーモードも、

    リモートアクセス機能もそれぞれ不十分な点はあっても

    一つの独立した端末です。

    ComWin は 入力、反応、出力の3つを定義したモジュールを作成することで

    さまざまな端末に対応できます。

    例えば、ネットワーク用の端末を作成することでリモートアクセスが

    可能になりますし、OLE も突き詰めれば、独自の入力、出力、反応を

    持った一つの端末にパッケージ化できるものと信じています。

    端末ソフトは次の手続きを踏むことで作成できます。

        以下の10の関数を端末側で定義します。

    LONG  FAR PASCAL LocalPuts(LPSTR);

    LPSTR FAR PASCAL LocalGets(LPSTR);

    LONG  FAR PASCAL LocalFputs(LPSTR, LPSTR);

    LPSTR FAR PASCAL LocalFgets(LPSTR, LONG, LPSTR);

    LONG  FAR PASCAL LocalSystem(LPSTR);

    LONG  FAR PASCAL LocalCallCommand(FARPROC FAR *, LPSTR, LPLONG);

    LONG  FAR PASCAL LocalGetch(void);

    LONG  FAR PASCAL LocalInkey(void);

    LONG  FAR PASCAL LocalFwrite(LPVOID, LONG, LONG, LPSTR);

    LONG  FAR PASCAL LocalFread(LPVOID, LONG, LONG, LPSTR);

    (関数名は任意)

    FARPROC lpfnIO[10] のように関数へのポインタの配列を定義します。

    lpfnIO[0] = MakeProcInstance(hInstance, LocalPuts);

    lpfnIO[1] = MakeProcInstance(hInstance, LocalGets);

    lpfnIO[2] = MakeProcInstance(hInstance, LocalFputs);

    lpfnIO[3] = MakeProcInstance(hInstance, LocalFgets);

    lpfnIO[4] = MakeProcInstance(hInstance, LocalSystem);

    lpfnIO[5] = MakeProcInstance(hInstance, LocalCallCommand);

    lpfnIO[6] = MakeProcInstance(hInstance, LocalGetch);

    lpfnIO[7] = MakeProcInstance(hInstance, LocalInkey);

    lpfnIO[8] = MakeProcInstance(hInstance, LocalFwrite);

    lpfnIO[9] = MakeProcInstance(hInstance, LocalFread);

    と初期化し

    comwin.dll の CallCommand を呼び出します。

 参照  CallCommand, sample5.c

-----------------------------------------------------------------------

 (4) DOSコマンドをComWin窓で実行可能

    環境設定ダイアログの「拡張コンソールの設定」を変更することで

    DOS コマンドを ComWin 上で実行することが可能です。

    全機能を使うためには、Windowsディレクトリ、Windowsシステムディレクトリ、

    パスの通ったディレクトリのいずれかに

    comwld.exe, comwld.pif, vcomwd.386 をコピーし、

    環境設定ダイアログの「標準PIF」を comwld.pif にしてください。

    また、system.ini の [386Enh] セクションに

    device=vcomwd.386 の記述を加える必要があります。

    1.DOS ウィンドウ

        DOS コマンドを別ウィンドウで実行します。

        標準の設定です。

    2.DOS 出力取り込み

        DOS の出力をファイルに落とし、そのファイルを

        ComWin 窓に出力することで ComWin 窓で実行しているように

        見せかけるモードです。

        動作は比較的安定していますが、入力を求める DOSコマンドを

        実行した場合は勘と経験でリカバリしなければなりません。

    3.DOS 入出力同期 (VxD)

        DOS コマンドと入出力の同期を取るモードです。

        このモードでは vcomwd.386 を通して DOS のデータを取り込ます。

        また、ComWin から DOS へはクリップボードを通して

        データを送ります。

        command.com が動くことを確認していますが、

        全てのケースで安定動作することは保証出来ません。

    4.DOS 入出力同期 (File) (Windows95, WindowsNT のみ)

        DOS コマンドと入出力の同期を取るモードです。

        このモードでは Win32API のファイルハンドルを介して、

        親プロセスと子プロセスがデータのやり取りを行います。

        また、98系Windows95 DOS窓上で Win32コンソールアプリが

        一般保護違反するという問題を避けることができます。

        Windows95 上でDOSコマンドに対して入力を行う場合、

        comwin.ini (or comwin32.ini) [etc] に DOSPasteCommand = 0xE001 と

        記述してください。

-----------------------------------------------------------------------

 (5) ANSIエスケープシーケンスが使用可能

    次の文字列を ComWin窓に入力することで画面制御ができます。

    ESC文字は ComWin のコマンドラインからは「Ctrl+[」で入力できます。

    他のエディター等ではそちらのマニュアルにしたがってください。

    echo コマンドや、Fputs API 等を使用して次の文字列を ComWin に

    出力すると様々な画面制御ができます。

      ESC [pl;pcH    カーソルを(pc,pl)位置に移動

      ESC [pl;pcf    カーソルを(pc,pl)位置に移動

      ESC [pnA       カーソルをpn行アップ

      ESC [pnB       カーソルをpn行ダウン

      ESC [pnC       カーソルをpn文字右に移動

      ESC [pnD       カーソルをpn文字左に移動

      ESC D          カーソルを一行下に移動

      ESC E          改行

      ESC M          カーソルを一行上に移動

      ESC[0J         カーソル位置から最終行の右端までをクリア

      ESC[1J         先頭行の左端からカーソル位置までをクリア

      ESC[2J         クリア・スクリーン

      ESC[0K         カーソル位置から行の右端までをクリア

      ESC[1K         行の左端からカーソル位置までをクリア

      ESC[2K         カーソル行の文字を全てクリア

      ESC*           クリア・スクリーン

      ESC[ps;...;psm 表示文字の属性を指示、psの意味は次のとおり

                    0 ..... 規定値

                    7 ..... リバース

                    8 ..... シークレット

                   30 ..... 黒, 40 ..... 黒反転

                   31 ..... 赤, 41 ..... 赤反転

                   32 ..... 緑, 42 ..... 緑反転

                   33 ..... 黄, 43 ..... 黄反転

                   34 ..... 青, 44 ..... 青反転

                   35 ..... 紫, 45 ..... 紫反転

                   36 ..... 水, 46 ..... 水反転

                   37 ..... 白, 47 ..... 白反転

      カーソル位置の変更をともなうエスケープコードを使用する場合、

      以下の点に留意してください。

        echo コマンドや Puts API を使用する場合終端に必ず '\n' が付加するので

      カーソル位置が次の行の先頭になります。

        カーソル位置を変更するコードを複数、一つの文字列として送る場合

      画面描画が正しくおこなわれませんので、複数回に分けて送ってください。

         ("^[" = "ESC" = '\x1b' とする)

        誤) echo ^[[1;1Habc^[[2;2Hdef

        正) echo ^[[1;1Habc ; echo ^[[2;2Habc

-----------------------------------------------------------------------

   (6) cshライクな構造化スクリプト

    ComWin は構造化プログラミングも可能なスクリプト言語を

    サポートしており、次の特徴を有しています。

    1. MS-DOS Ver. 5.XX 完全上位互換なので習得時間を短縮できる。

    2. csh に存在する制御文に相当するものがほぼそろっている。

    3. 外部変数、内部変数の区別がありプロシジャーのモジュール化が可能。

    4. C言語に存在する演算子がほとんど使用でき、浮動小数点も扱える。

    5. リダイレクトをサポートし、スクリプトだけで簡単なフィルターが作れる。

    参照  スクリプトリファレンス

-----------------------------------------------------------------------

   (7) Unicode対応コンソール(32bit版)

      ComWin32 では Uniocde に対応したフィルター機能を提供します。

      EXPORTS 関数 cwFputsW と cwFgetsW を利用することで

      Unicode テキストファイルを扱うことができます。

      (注意)

      UI の制約から、入力時と出力時は各ローカル環境の文字列に

      変換されますが、内部データは Unicode なので、

      リダイレクト、パイプ時に Unicode 情報が欠落することはありません。

      (例) 行番号をつけるフィルター

      INT FAR PASCAL WinMain(HINSTANCE hInstance,

                             HINSTANCE hPrevInstance,

                             LPSTR lpszCmdParam,

                             INT nCmdShow)

      {

          wchar_t wszIn[0x100];

          wchar_t wszOut[0x110];

          INT nI;

          nI = 0;

          while (cwFgetsW(wszIn, 0x100, NULL) != NULL) {

              nI++;

              swprintf(wszOut, "%8d:%s", nI, wszIn);

              cwFputsW(wszOut);

          }

          return 0;

      }


制限事項

6.技術詳細、制限事項

    ( 1) 開発方針

    ( 2) 動作環境

    ( 3) OS/2、NT 環境で使用時の注意

    ( 4) 必要なファイル構成

    ( 5) コマンドの優先順位、EXCEL4が不調の時

    ( 6) スクロール時の表示乱れ

    ( 7) 日本語処理

    ( 8) ComWin の複数起動

    ( 9) フォアグラウンド起動とバックグラウンド起動

    (10) ディレクトリセパレータ「\」「/」

    (11) NetWare 上でのパス管理

    (12) 今後の目標

-----------------------------------------------------------------------

   ( 1) 開発方針

      ComWin は次の方針に基づいて開発されています。

      (a) MS-Windows 3.1 以上が動作するもっとも非力なマシンでも、

          そこそこ使える。

        これは作者の開発環境が "Cx486SLC 16MHz + Cバス用増設メモリ 6M"

        という点からも自信をもっていえます。

      (b) ComWin 環境を使用するために独自のルールを押し付けない。

        ComWin 環境を使用するためには、

        できるだけ DOS, UNIX, (場合によって NT,OS/2) のコマンドだけで

        運用できるようにします。

      (c) 過去の ComWin システムとの互換性を重視する。

        新機能を付け加えるたびに、頭を悩ませています。

        慎重に仕様を決めていますが、たまに失敗もありますので、

        ご了承ください。

-----------------------------------------------------------------------

   ( 2) 動作環境

        ComWin は MS-Windows 3.1 以上 エンハンストモードで動作します。

        以下の環境では次の制限があります。

        MS-Windows 3.1 スタンダードモード

            DOS コマンドが使用できません。

        MS-Windows 3.0

            commdlg.dll が必要です。

            通信機能は使用できません。

-----------------------------------------------------------------------

   ( 3) OS/2、NT 環境で使用時の注意

        ComWin は Windows の標準API、DOSの標準システムコールしか

        使用していませんので、OS/2 や NT 上でも動きます。

        ただし以下の点に注意してください。

        DOSコマンドはシステムコールの解釈が OS/2 や NT と DOS で

        異なっており、comwld.pif で起動しない場合があります。

        この場合、command.com と入力してください。(16bit,32bit版)

        FATファイルシステム以外では動作は保証されません。(16bit版)

        OS/2 Warp 上の Win32s でシェルを誤認識する場合は

        comwin.ini(or comwin32.ini) の [etc] 以下に

            shell=0

        と記述してください。(16bit,32bit版)

        NT3.51 上で環境変数継承機能を使用可能にしている場合、

        PIF エディターによる DOS コマンドの実行に失敗する場合が

        あります。(32bit版)

        ComWin は Ver 1.80J より OS/2 、NTでも動作するように

        開発していく予定なので、動作確認情報があればメールして

        くださると幸いです。

        参照  コマンドの優先順位 (command と command.com の違い)

-----------------------------------------------------------------------

   ( 4) 必要なファイル構成

        comwinx.exe, comwld.exe, comwld.pif,

        vcomwd.386, comwin.dll, comwin.hlp,

        comwins.dll, comwreg.exe

        を各自の

            Windows ディレクトリ

            Windows システムディレクトリ

            環境変数の PATH で指定されたディレクトリ

        にセットで置いてください。

        それ以外の場合は正常に動かない場合もあります。

        (comwld.pif の代わりに comwinx.pif を使用して

         同一ディレクトリに置けばパスがなくても正常に運用できますが、

         shellとして利用する場合はパスが必要です。)

        comwreg.exe はユーザー登録用のモジュールです。

        登録が完了すれば不要です。

        以下のファイルがなくても動きますが大幅に機能ダウンします。

        comwld.pif --- DOSコマンドが使えません。(command.com だけは使用可)

        comwin.hlp --- オンラインヘルプが使えません。

        comwins.dll --- 内部コマンドが使えません。(exit, cls, help 等は使用可)

        comwreg.exe --- 登録ユーザーには不要です。

        comwinx.exe と comwin.dll の2つのファイルでも

        エラーメッセージを無視して起動し、運用することができます。

        これが ComWin システムの最少構成です。

-----------------------------------------------------------------------

   ( 5) コマンドの優先順位、EXCEL4が不調の時

        ComWin はキャラクタ指向コマンドシェルという性格上、

        文字列をプログラム起動に結び付けるために、

        さまざまな処理をしています。

        処理概要

          1.文字列を comwin.ini [Alias] と比較しエイリアスの展開。

          2.マルチステートメントの解釈。

          3.アプリケーションとの関連付け起動展開。

          4.コマンドDLL の処理。(comwins.dll 等 comwin.ini [CommandDll])

          5.内部コマンドの処理。(comwinx.exe の埋めこみコマンド)

          6.外部コマンドの処理。(DOS の規約にしたがう）

              Windows プログラムを起動。

              DOS プログラムを起動。

              ComWin 用バッチファイルの処理。

        ComWin は、DOS, Win, Win32s, ComWin用バッチファイル の各プログラムを

        自動判別し適切な環境で起動するようにしていますが、

        予測外の環境で起動に失敗する場合を考慮して、

        "command.com", "win" という文字列を特別扱いにしています。

    (a) 強制的にDOSプログラムを起動する方法 (command と command.com の違い)

        command と入力した場合。

            通常のDOSプログラムと判定し、comwld.pif を用いて、

            comwld.exe の子プロセスとして起動されます。

            したがって、終了時に"Press any key"という文字列が

            表示され一時停止します。

        command.com と入力した場合。

            プログラム判別ルーチンを通らず直接 command.com を起動します。

            command で起動するよりもメモリを多く使用できます。

            ただし、終了時の一時停止機能はありません。

    (b) 強制的にWindowsプログラムを起動する方法 (win)

        win コマンドを使用すれば、外部コマンド判別をおこなわずに、

        文字列をそのまま、WinExec, LoadModule API にわたします。

        EXCEL4をご利用の方は win コマンドを使用してください。

        例 c:\>win excel

-----------------------------------------------------------------------

   ( 6) スクロール時の表示乱れ

        ComWin ではスクロールを高速化するために

        再描画処理を簡潔にしています。

        そのためダイアログ等の背後でスクロールが行われた場合、

        表示が乱れる場合があります。

        これは単に表示が乱れているだげで

        内部のデータ破壊等システムクラッシュの原因にはなりません。

        表示の乱れを解消するためには、

        再描画処理を意図的におこなってください。

        例

            [ESC] を 2回押す。

            アイコン化し復元しなおす。

            他のウィンドウで隠した後、出現させる。

        また、処理スピードを犠牲にすることで

        どのような場所でスクロールが行われても

        表示が乱れないモードも備えております。

        (environment メニューの "complete redraw")

        VGA or EGC + 386CPU 程度では表示がもたつきますが、

        高速GA + Peintium 使用のユーザーは

        このモードを標準にして運用しても快適さはそこなわれません。

-----------------------------------------------------------------------

   ( 7) 日本語処理

        ComWin は2バイトコード圏に共通するロジックで

        処理を行っていますので、日本語は扱えます。

-----------------------------------------------------------------------

   ( 8) ComWin の複数起動

        ComWinを複数起動しても正常に動作するように設計されていますが、

        以下の制限事項があります。

        ComWin 用の外部コマンドを実行した場合、最初にPuts, Gets 等の

        ComWin の EXPORT 関数が呼ばれた時点で一番アクティブ状態に

        近い ComWin のクライアント領域に出力されようになっています。

        まれに意図していないクライアント領域に出力される可能性があります。

        ただ、通常の使用状況では発生することはありません。

        システムクラッシュの原因とは無縁です。

        またバックグラウンドで ComWin 用の外部コマンドが実行されて

        いる場合マウスイベントが正常に認識できない場合がありますので、

        キーボードでイベントを発生させてみてください。

        内部コマンドに関しては以上のような制限はなく

        正常にマルチタスクで動作します。

        （試しに複数の ComWin を起動し

          同時に dir コマンドを実行しても正常に動作します。

          意外なことに Windows のシステムコールエミュレーションは

          再入処理中も正しく動作していることがわかります。）

-----------------------------------------------------------------------

  ( 9) フォアグラウンド起動とバックグラウンド起動

    マルチタスクシステムでは、フォアグラウンド処理と

    バックグランド処理の区別が重要になってきます。

    (少し語弊がありますが、

     フォアグラウンド処理 = 直列処理

     バックグラウンド処理 = 並列処理

     と考えてください。

     例えば、DOS ではフォアグランド処理が主体ですし、

     Windows ではバックグラウンド処理が主体です。)

    ComWin と他のシステムの起動の区別を列挙します。

    UNIX

        $ cc hello.c <--- フォアグラウンド起動

        $ cc hello.c &  <--- バックグラウンド起動

    OS/2 or NT

        [c:\]notepad readme.txt        <--- フォアグラウンド起動

        [c:\]start notepad readme.txt  <--- バックグラウンド起動

    ComWin

        c:\>notepad readme.txt ;fg  <--- フォアグラウンド起動

        c:\>notepad readme.txt         <--- バックグラウンド起動

    (参考)

    Windows95 or ComWin

        c:\>start /wait notepad readme.txt <--- フォアグラウンド起動

        c:\>notepad readme.txt             <--- バックグラウンド起動

    UNIX, OS/2, NT ではフォアグランド起動がデフォルトになっていますが、

    ComWin ではバックグラウンド起動をデフォルトにしています。

      理由

        (a) Window環境では

            子プロセスとして起動したタスクを管理するために

            監視ルーチンを必要とするので、フォアグラウンド起動状態では

            システムのパフォーマンスが低下する。

        (b) フォアグラウンド起動が必要になってくるのは、

            バッチ処理、フィルタ処理等に限られる。

        (c) ComWin ver 1.40 までのシステムとの互換性をとる。

        (d) Windows95 もバックグラウンドがデフォルトである。

    よってバックグラウンド起動をデフォルトにした方が、

    ユーザビリティに優れ、互換性も取れると判断しました。

    （この扱いには異論のあるかたも多いと思いますが、ユーザビリティの点、

      過去との互換性の点でこの方法にしました。ご了承ください。

      もちろん、反論メールもＯＫです。)

    バックグラウンド起動をデフォルトにする場合、

    誤操作で同じファイルに同時アクセスする危険性が

    フォアグラウンド起動をデフォルトにしているシステムより増します。

    バッチ処理、フィルタ処理を多用するかたは、

    あらかじめ DOS 上で SHARE.EXE を常駐させることをお勧めします。

-----------------------------------------------------------------------

   (10) ディレクトリセパレータ「\」「/」

        ComWin はディレクトリセパレータ「/」に制限つきながら対応しました。

        ファイル名補完機能と内部コマンドが対応部分です。

        ただし、他の Windowsアプリや DOS コマンドには対応していません。

        ComWin は DOS 上に構築された Windows 上のソフトなので、

        DOS文化から 「/」オプションを追放しない限り

        ComWin だけで解決することは不可能だということも考慮ください。

-----------------------------------------------------------------------

   (11) NetWare 上でのパス管理

        NetWare を使用している環境で

        ディレクトリセパレータを「/」にした状態で誤操作を行うと

        異常に処理時間がかかる場合があります。

        原因は不明ですが、NetWare のシステムコール内で、

        ネットワークマシン名を検索するためだと考えられます。

-----------------------------------------------------------------------

   (12) 今後の目標

        次の3点について拡張する(努力すべき)予定です。

        (a) ユーザーインターフェース

           コンソールの行数、桁数を自由に変更したり、

           ヒストリーの記憶数を変更できるようにしたいですね。

           またコマンドラインモードでの範囲選択も課題です。

        (b) ウィンドウ制御コマンド

           csh に相当するスクリプトも完成したので、

           SendKey 等のウィンドウを制御するコマンドを整備すれば、

           ウィンドウ操作が自動化できると思います。

        (c) ネットワーク

           ユーザーインターフェースを提供するソフトとして

           今後はネットワークを迅速に利用できることを

           目標に開発したいと思います。

        ComWin システムは柔軟性を第一としています。

        ユーザー自身もどんどん機能を拡張してください。

-----------------------------------------------------------------------


前回からのバージョンアップ

7.改訂履歴

    ComWin Ver. 3.51 97/03/15

        ファイラープロンプト機能

        アプリメニュー機能

    ComWin Ver. 3.50 97/03/01

        簡易ファイラーウィンドウ

        KeyboardLayout, clip, paste コマンド標準装備

        term コマンドが TELNET に対応

        コマンドラインモードでもメニュー使用可

    ComWin Ver. 3.40 96/12/05

        Unicode フィルター機能 (cwFputsW, cwFgetsW) (32bit)

        含空白ファイル名対応 (32bit)

        バグフィックス

          ヒストリの不具合

    ComWin Ver. 3.32 96/10/10

        スクリプトデバッグ機能強化

        ヒストリ補完機能

        DOSコマンドの起動モード指定

        各コマンドに /? オプション追加

        カーソル移動が2バイトコードに対応

        pushd コマンドに UNIX 互換機能

    ComWin Ver. 3.30 96/09/05

        通信機能に XMODEMプロトコルを追加

        英語環境での表示崩れを最小限に修正

        install.bat の不具合解消(32bit)

    ComWin Ver. 3.22 96/08/20

        Unicode用API cwFputsW(32bit)

        通信サーバー機能(32bit)

        端末機能でEUCを選択可

        バグフィックス

          システム環境変数が正しく参照できない

    ComWin Ver. 3.20 96/07/20

        通信機能サポート

        ドラッグ＆ドロップでファイル名入力可

    ComWin Ver. 3.10 96/06/01

        コマンドDLLを動的ロード可能

        ファンクションキー8個表示可能

        printfコマンドの書式に不動小数点

        バグフィックス

          登録プログラムのバグ

          ファイル名補完のソート

    ComWin Ver. 3.04 96/05/01

        printf コマンドを内部コマンド化

        空白を含むファイル名も補完可能

        バグフィックス

          for 制御コマンド

          フォルダー起動

    ComWin Ver. 3.02 96/04/05

        cwsh に行桁変更機能 (Win95, NT)

        printf コマンド追加

        for, gosub 制御コマンド追加

        「&」「$」「:」演算子サポート

        バグフィックス

          switch 制御コマンド

    ComWin Ver. 3.01 96/03/20

        32bit常駐シェル「cwsh」登場 (Win95, NT)

        スクリプト演算子に「*」(ポインタ)を追加

        スクリプト内で16進数使用可能

        foreach コマンドサポート

    ComWin Ver. 3.00 96/03/01

        BAT完全上位互換、csh相当のスクリプト装備

        ヒストリバッファ、コンソール桁数を変更可能

        BAT用コマンド for, let, test サポート

        バッグフィックス

            fg コマンド (WinNT3.51)

            拡張コンソール (Win95)

    ComWin Ver. 2.90 96/02/10

        ショートカットファイル(.lnk)対応 (Win95)

        ディレクトリ名入力でフォルダー起動 (Win95)

        シェルラッパー(#!)対応

        関連付けの本命 ShellExecute コマンドサポート

        コマンド名補完の拡充(.exe .com .bat .pif .cws .lnk 検索)

        漢字のインライン入力可能

        背景色がフルカラーに対応

        バッチファイル内で「@」が使用可能

        バグフィックス

            vol コマンド (Win95)

    ComWin Ver. 2.80 96/01/25

        日英２ヶ国語モードサポート

        コマンド名補完機能

        拡張コンソール DOS 入出力同期に2つのモード

        start コマンドにウェイト機能

        バグフィックス

            NetWare 上のハングアップ

            環境変数サーバー

            Getch(),Inkey() API の戻り値

    ComWin Ver. 2.71 96/01/16 (16bit版 非公開)

        98系の Windows95 で Win32コンソールアプリの動作可能モード

        Win32上で環境変数を子プロセスに継承可能

        シェルを無効にする設定を追加

        バグフィックス

          Getch() API

    ComWin Ver. 2.70 95/12/01

        拡張コンソールが Windows 95 に対応

        NT 上で拡張コンソールのミラーリングが可能

        コンボボックスのディレクトリ表示にも'/'を採用

        ps コマンドの出力に実行ファイル名を追加

        バグフィックス

          cd コマンドの不正メッセージ

          NT 3.51 でのツールバーの不具合

          バッチファイル内の goto コマンドの不具合

          98系の Windows で終了時の不具合(vcomwd.386)

    ComWin Ver. 2.60 95/10/10

        ファイル名補完機能でワイルドカードの指定が可能

        ランチャーの設定に参照機能追加

        mode コマンドに拡張コンソールを制御するオプション追加

           画面制御コードの充実

           環境変数のオーバーフロー問題の軽減

           バイナリ入出力の手順を規定 Fwrite(), Fread() API

           バグフィックス

                80文字以上入力した場合の一般保護違反

    ComWin Ver. 2.52 95/09/05

        printf 準拠API cwFprintf サポート

        dir コマンドにソート機能追加

        ツールバーのディレクトリ表示を同期

        バグフィックス

            80桁目の文字落ち

            PATH 環境変数がないときの一般保護違反

            ディレクトリセパレータの切り替え不具合

    ComWin Ver. 2.51 95/08/18

        バグフィックス

            コマンドセパレータの仕様でPATHの設定に支障があるのを修正

            Fputs, Fgets のリダイレクトがすべて標準エラーになるのを修正

    ComWin Ver. 2.50 95/08/10

        VxD のサポートで DOS アプリとの連携が可能

        DOS アプリ動作状態の選択枝を拡充

        エスケープコードの整理でコマンドラインの自由度が増大

        copyコマンドの確認メッセージをスキップする機能を追加

        バグフィックス

            DOS の環境変数がオーバーフローしたときの一般保護違反

            日本語のファイル名を指定したときの不具合

    ComWin Ver. 2.40 95/07/10

        ディレクトリセパレータ「/」採用

        copyコマンドに確認メッセージ

        renコマンドでディレクトリ名変更

        ディレクトリ名を指定するだけでディレクトリ変更

        cwPutenv, cwGetenv API で環境変数の操作が可能

        GetComWinLong API の機能拡張

        行末、行頭までの一括削除が可能

        バグフィックス

            129文字以上の文字列を扱う場合の一般保護違反

    ComWin Ver. 2.30 95/06/25

        ANSIエスケープシーケンスサブセットのサポート

        表示メニューによりキャプションバーを消せる

        ファンクションキー10個表示が可能

        標準エラー入出力モードをサポート

        Getch(), Inkey() API をサポート

        SetWindowPos コマンドを新設

        Ctrl+Ins,Shift+Ins,Shift+Del でカット＆ペースト可能

        fgコマンド、バッチファイル時に Ctrl+C,Break,STOPが有効

        ツールバーにディレクトリ変更処理、時計表示を付加

        不具合の修正

            クリップボード関係

            copy,time,date コマンド

    ComWin Ver. 2.20 95/05/20

        ファンクションキーランチャー機能

        コマンドラインで環境変数 %env% 等の指定可能

        alias コマンドで引数 %1 等の指定可能

        mode コマンドでフォントの変更可能

        ラインエディット時に行頭、行末のキー操作可能

        不具合の修正

            copy, ren コマンド

            ファイル名補完時の昇順、降順の乱れ

            バッチファイル内の空行終了問題

            Cut 時のゴミ表示

    ComWin Ver. 2.14 95/04/15

        32bit化アダプタを標準添付

        start コマンドの新設

        不具合の修正

          80桁の文字列を出力する場合の表示の乱れ

    ComWin Ver. 2.11 95/03/01

        不具合の修正

          アプリケーションの関連付け起動

          ドラッグ＆ドロップサーバー機能

          ツールバーの表示フォント

          バッチファイル内の exit コマンド

    ComWin Ver. 2.10 95/02/25

        Windows 95 ライクなツールバー装備

        コマンドラインでカット&ペーストが可能

        UNIXライクな history コマンド

        コンソール記憶行数を500行に拡大

        DOSコマンドをComWin窓で実行

        不具合の修正(Ctrl+TABの問題、OLE関連付けの問題等)

    ComWin Ver. 2.01 95/01/25

        リダイレクト、パイプ機能のサポート

        その他、不具合の修正

    ComWin Ver. 2.00 95/01/10

        英語版 ComWin 登場

        MS-DOS 3.XX 準拠バッチスクリプト

        環境変数サーバー機能

        プロンプトの変更可能

        キャプション名変更機能の追加

        キャプション名指定でウィンドウ操作可能

        キー割り当ての変更可能

        スクロール機能の見直し

        ファイル名補完時に小文字表示、ソートの高速化

        ComWin のシェル登録がマウスで可能

        DOSの内部コマンドフルサポート

        その他、不具合の修正

    ComWin ver 1.80J 94/11/15

        ComWin システムの完全マルチタスク化

        スクリプトDLL、インタプリタDLL、System コマンドの新設

        del ..\*.* 等の不具合の修正

        IME がない場合の SHELL起動時の不具合の修正

        マルチステートメントの解釈の不具合の修正

        バッチファイル引数の不具合の修正

    ComWin ver 1.70 94/10/15

        通信ポートに対応、マルチユーザー環境を提供

        ファイル名補完機能

        ctl3d.dll ctl3dv2.dll (3-Dダイアログ) 対応

        ctty, speed, kill, ps, SendMessage コマンドのサポート

        Fputs のマルチライン化

    ComWin ver 1.60 94/09/23

        comwin.dll(入出力用DLL)の機能強化

        外部プロセスから Gets,Fputs,Fgetsが利用可

        Puts で改行、TABの処理がおこなえるようになった

        exit に /p オプション追加

        環境変数 PATH が 80文字を超えると落ちるバグの修正

        fg, pause の改良

    ComWin ver 1.50 94/09/01

        ビューワーモードの大幅強化

        範囲選択コピー、選択文字列起動、

        ドラッグ＆ドロップサーバー機能追加

        起動時のコマンド指定オプション新設

        ComWin 用バッチファイルに %1 等の引数使用可能

    ComWin ver 1.41 94/08/16

        pause コマンドのサポート

        フォアグラウンド処理のサポート

        フォアグラウンド起動とバックグラウンド起動の区別が可能

    ComWin ver 1.40 94/08/14

        マルチステートメント、バッチファイルのサポート

        アプリケーションとの関連付け起動のサポート

        システムのマルチタスク化

        (処理中の STOP キー、フォーカスの切り替えが可能)

        日本語入力の正常化 (一部制限あり)

        内部コマンドの拡充 (pushd, popd, dirs, ren, shutdown 等)

        ヒストリーの終了時保存

        インストーラの追加 (単なる DOS のバッチファイルです。)

    ComWin ver 1.30 94/08/01

        alias, unalias コマンドのサポート

        reboot, restart コマンドのサポート

        ヒストリ機能の安定化

        オンラインヘルプの強化

        メモリ常駐量30%削減

        Win32s アプリのサポート

    ComWin ver 1.20 94/07/17

        DOSコマンドのサポート

        クリップボード処理の追加

        スタートアップ機能の追加

        オンラインヘルプの追加

    ComWin ver 1.10 94/06/20

        copy コマンドのサポート

        コマンド部を ComWin から切り離し comwins.dll を新設

        Putsの処理を高速安定化

        ウィンドウのサイズ保存機能の追加

    ComWin ver 1.00 94/06/07

        初版

-----------------------------------------------------------------------


仕様変更点

8.仕様変更点

    ComWin Ver. 3.40 から ComWin Ver. 3.50 の仕様変更点。

        コマンドラインモードでもメニューが使用可能です。

    ComWin Ver. 3.32 から ComWin Ver. 3.40 の仕様変更点。

        特にありません。

    ComWin Ver. 3.30 から ComWin Ver. 3.32 の仕様変更点。

        comwinx.exe と comwtbar.dll を統合

        comwpad.exe と comwctl.dll を統合(32bit版)

    ComWin Ver. 3.04 から ComWin Ver. 3.30 の仕様変更点。

        特にありません。

    ComWin Ver. 3.02 から ComWin Ver. 3.04 の仕様変更点。

        printf の引き数の意味が変更になりました。

    ComWin Ver. 3.01 から ComWin Ver. 3.02 の仕様変更点。

        特にありません。

    ComWin Ver. 3.00 から ComWin Ver. 3.01 の仕様変更点。

        Getch(),Inkey()の戻り値を 2.80以上互換限定。

    ComWin Ver. 2.90 から ComWin Ver. 3.00 の仕様変更点。

        表示ダイアログと環境ダイアログの項目変更。

        スクリプト関係のコマンドが大幅にリニューアル。

        詳細はスクリプト関係の項目を参照してください。

    ComWin Ver. 2.80 から ComWin Ver. 2.90 の仕様変更点。

        ファイル名補完のメニューが「大文字で補完」から「小文字で補完」に、

        ３Ｄダイアログの設定が「環境」から「表示」に変更。

    ComWin Ver. 2.71 から ComWin Ver. 2.80 の仕様変更点。

        Getch(),Inkey() API の戻り値が変更されています。

        cwmore コマンドに影響がありますので、Getch() の項を

        参照してください。

        拡張コンソールのメニューが変更になりました。

        ただし、分類方法を変えただけなので、いままでの機能は使用可能です。

        「設定の保存」メニューの場所を「ファイル」から「オプション」に変更。

        日英２ヶ国語モードをサポートしたことにより、

        english.lzh は廃止されました。

    ComWin Ver. 2.70 から ComWin Ver. 2.71 の仕様変更点。

        特にありません。

    ComWin Ver. 2.60 から ComWin Ver. 2.70 の仕様変更点。

        拡張コンソールに若干の変更がありますが、

        特に意識する必要はありません。

    ComWin Ver. 2.52 から ComWin Ver. 2.60 の仕様変更点。

        ユーザーインタフェースの変更はありませんが、

        ComWin 対応ソフトの作成法に若干の変更があります。

    ComWin Ver. 2.51 から ComWin Ver. 2.52 の仕様変更点。

        特にありません。

    ComWin Ver. 2.40 から ComWin Ver. 2.51 の仕様変更点。

        エスケープコードの整理により

          「$」変換コードを廃止。

        DOS アプリ動作状態の選択枝を拡充により

          標準 PIF を comwinx.pif から comwld.pif に変更。

          従来の comwxold.pif の機能は comwld.pif に継承。

    ComWin Ver. 2.30 から ComWin Ver. 2.40 の仕様変更点。

        dir コマンドの出力ファイル名を小文字表示に変更。

        ディレクトリセパレータ「/」を採用したことで

        ファイル名補完機能に若干の仕様変更。

    ComWin Ver. 2.20 から ComWin Ver. 2.30 の仕様変更点。

        ツールバーコンボボックス内の機能を「トップービュー」から

        「ディレクトリ変更」に変更。

        トップビュー機能は「comwins」サービスコマンドに移動。

        logout コマンドの名称を logoff に変更。

          (logout を使用したい場合は alias で対応してください)

        表示設定ダイアログを新設したことで

        環境設定ダイアログに若干の変更あり。

    ComWin Ver. 2.14 から ComWin Ver. 2.20 の仕様変更点。

        バッチファイル内で使用する rem コマンドが行全体に有効

        ツールバー内のボタンの配置替え

        speed コマンドを廃止し、mode コマンドに吸収

        デフォルトの設定でツールバーとファンクションキーを表示

    ComWin Ver. 2.11 から ComWin Ver. 2.14 の仕様変更点。

      特にありません。

    ComWin Ver. 2.10 から ComWin Ver. 2.11 の仕様変更点。

      ファイル名補完時にディレクトリの場合 '\' を付加

    ComWin Ver. 2.01 から ComWin Ver. 2.10 の仕様変更点。

      以前から批判の多かったファイル名補完時のカーソル位置を

      補完ワードの終端に移動しました。

    ComWin Ver. 2.00 から ComWin Ver. 2.01 の仕様変更点。

        プロンプトの保存方法を変更しました。

        従来は prompt コマンドを実行するたびに、

        prompt 文字列が保存されていたのですが、

        今バージョンからは明示的に保存する必要があります。

    ComWin ver 1.80J から ComWin Ver. 2.00 の仕様変更点。

        ファイル名補完機能の標準のキー割り当てを

        Shift + UP, Shift + DOWN から

        Ctrl + UP, Ctrl + DOWN に変更しました。

        だたし、キー割り当ての変更機能を

        サポートしましたので、特に問題はないと思います。

        また、ファイル名補完時の表示文字が小文字になりました。

        (オプションで大文字表示可)

    ComWin ver 1.70 から ComWin ver 1.80J の仕様変更点は特にありません。

    ComWin が提供している API の引数にわずかな変更がありましたが、

    今までの ComWin 用の実行ファイルはそのまま使えます。

    変更点

        ver 1.70

            int FAR PASCAL Puts(LPSTR);

            int FAR PASCAL Fputs(LPSTR, LPSTR);

            BOOL FAR PASCAL CallCommand(FARPROC FAR *, LPSTR, LPWORD);

        ver 1.80J

            LONG FAR PASCAL Puts(LPSTR);

            LONG FAR PASCAL Fputs(LPSTR, LPSTR);

            BOOL FAR PASCAL CallCommand(FARPROC FAR *, LPSTR, LPLONG);

    引数等をなるべく32ビット値で統一する方向で変更しました。

    ComWin ver 1.70 より

    DOSコマンドの終了方法が変わります。

    以前は "Press any key" というメッセージを出力して

    一時停止していましたが、

    ver 1.70 からはキャプションに休止中というメッセージを

    出力して休止状態になります。

    ホームポジションのままでこの状態からDOS窓を閉じるには、

    Alt(or GRPH)+Space ---> 'C' のキー操作を行ってください。

    また comwinx.pif は comwinx.exe と同じディレクトリに置いてください。

    ver 1.60 以前の操作性が好みのかたは同封の comwxold.pif を

    comwinx.pif にリネームしてお使いください。

    PIFエディタで中身をみて編集しても可能です。

    DOS/V ユーザーの方には申し訳ございませんが、デフォルトでは

    英語モードでDOSボックスが起動します。

    これは作者のメイン開発環境が98系なのでご了承ください。

-----------------------------------------------------------------------


著作権

9.著作権、送金方法

    注意

        ComWin と ComWin32 は別ソフトなので、

        ComWin と ComWin32 の料金は別払いです。

        お間違えのないようにお願いいたします。

    ComWin32 の著作権は前寺正彦が保有します。

    ComWin32 はシェアウェアです。

    ComWin32 本体を使っての利益行為を著作者に了解なしに

             行うことを一切禁じます。

             (ComWin32 対応のソフトについては関与しません。)

    ComWin32 内のファイルに改変を加えたもの、

             またはファイルの一部を配布することを禁じます。

             (Cのソースコードを改良した成果物単体の配布は例外です。)

    ComWin32 を使用することによって発生したいかなる損害等にも、

             著作者は一切責任を負いません。

    ComWin32 の機能アップを行う義務、バグ対応を無料で行う義務を

             著作者は負わないものとします。

    ComWin32 の他のネットワークへの転載、雑誌へのバイナリ添付は

             著作者の了承が必要です。

    ComWin32 の雑誌記事紹介は客観的な基準で書かれたものであれば、

             自由に行ってかまいません。

+----------------------------------------------------------------------------

|    シェアウェアとしての使用条件

|      登録料 2000円

|      試用期間 2週間

|      試用期間中の機能制限 なし

|

|    送金方法

|      可能な限り、NIFTY-Serve の送金代行システムをご利用ください。

|      GO SWSOKIN で送金代行サービスに入り、メニューに従って

|      送金を行ってください。SW番号は 1323 番です。

|      送金が確認され次第、登録キーワードを電子メールにて

|      お知らせします。

|

|      また送金代行サービスをご利用できない場合は、

|      以下の銀行口座に振込(手数料別払)を行ってください。

|

|      銀行      第一勧業銀行徳島支店

|      店番号    645

|      口座番号  1470432 (普通)

|      氏名      前寺正彦 (ﾏｴﾃﾞﾗﾏｻﾋｺ)

|

|      お手数ですが、入金後に以下の事項を明記のうえ

|      電子メール(推奨)、もしくは葉書にてお知らせください。

|      (お知らせのない場合、対応ができません。)

|

|      (1)住所・郵便番号、(2)氏名、(3)振込日時、(4)ソフトウェア名、(5)感想

|

|      送付先

|      電子メール SGQ00310@niftyserve.or.jp

|      郵送 770 徳島市沖浜町西畑436桑村住宅2号  前寺正彦

|

|      送金が確認でき次第、登録キーワードを「封書」にてお知らせします。

|      (住所は変更になる可能性もありますので、知人のIDをご利用できる場合は

|       なくべく、知人の電子メールをご利用ください。

|       なお、電子メールが本人の ID だと確認できる場合は

|       電子メールでお知らせする場合もあります。)

|      また、オンラインでの送金と違い、銀行振込では

|      迅速な対応ができませんので、あらかじめご了承ください。

|

|    複製条件

|      1つのライセンスにつきインストールマシンは1台に限ります。

|      ただし、正規ユーザーはすべてのマシンで他者に使用させないことを

|      条件に複数のマシンにインストール可能です。

|

|      例えば、サイト利用の場合ライセンス数は次のようになります。

|          (ライセンス数) = min((サイト内マシン数), (サイト内人数))

|

|    フリー制度

|      ComWin32 対応のソフトをネットワーク上に公開された作者は

|      私宛にメールをくだされば、無料で正規ユーザー登録の手続きを行います。

|

|    サポート

|      特に指定のない場合バージョンアップ料は無料です。

|      登録キーワードは以前のものが使えますが、

|      セキュリティの関係で変更する場合もあります。

|      この場合、正規ユーザーの方には事前にお知らせします。

|      正式なリリース場所は NIFTY FWINAL LIB 5 のみとします。

|      ComWin32 に対しての感想、要望は、個人的なものでない限り、

|      NIFTY FWINAL MES 5 でお願い致します。

|      (個人のメールボックス容量には限りがありますので。)

+----------------------------------------------------------------------------

    今後とも機能アップしていく予定なので

    なにとぞ、よろしくお願いいたします。

    前寺正彦 <SGQ00310@niftyserve.or.jp>

    <http://www.justnet.or.jp/ebf/uhdsppag/mnishijima/MNISHI.HTM>

-----------------------------------------------------------------------


同封ファイルの説明

10.同封ファイルの詳細

    ( 1) comwinx.exe, comwinx.pif

    ( 2) comwld.exe, comwld.pif, vcomwd.386

    ( 3) comwin.dll, comwin.lib (非同封), comwin.h

    ( 4) comwins.dll

    ( 5) comwint.dll

    ( 6) comwin.hlp, readme.txt

    ( 7) comwreg.exe

    ( 8) comwin32.dll, comwin32.lib

    ( 9) bhole.exe

    (10) comwin.ini

    (11) install.bat

    (12) hello.c, hello.def, hello.exe, hellocpp.cpp

    (13) sample1.c, sample1.def, sample1.exe

    (14) sample2.c, sample2.def, sample2.exe

    (15) sample3.c, sample3.def, sample3.dll

    (16) sample4a.bat, sample4b.cws

    (17) sample5.c, sample5.def, sample5.exe

-----------------------------------------------------------------------

 ( 1) comwinx.exe, comwinx.pif

    * comwinx.exe

        ComWin の端末モジュールです。

        ユーザーからのコマンドを受け付けプログラムを起動します。

        ComWinに対応したプログラムの出力を表示します。

        また、表示結果を保存する機能を持っています。

        フォント、色等の画面回りを管理します。

    * comwinx.pif

        窓状態で起動し終了時に休止状態になる設定のPIFファイルです。

        プログラムは command.com を使用しています。

        (ホームポジションから手を離さずにウィンドウを閉じるには、

         Alt(Grph)+Space --> C と処理してください。)

    comwinx.pif の内容は PIFエディタによって編集できます。

    各自の環境で最適化して下さい。

    参照  Windows プログラムのローダーとして使用

-----------------------------------------------------------------------

 ( 2) comwld.exe, comwld.pif, vcomwd.386

    * comwld.exe

        DOS コマンドの入出力をフックし、vcomwd.386 に渡すローダーです。

        また、動作モードによっては、DOSコマンドを終了時に一時停止させます。

    * comwld.pif

        comwld.exe 用に最適化されたPIFファイルです。

        各自の環境にあわせて最適化してください。

    * vcomwd.386

        DOS のコンソール出力を Windows に渡す仮想デバイスドライバです。

        利用するためには、Windowsディレクトリ、Windowsシステムディレクトリ、

        パスの通ったディレクトリのいずれかに置き

        system.ini の [386Enh] セクションに device=vcomwd.386 の

        記述を加えてください。

-----------------------------------------------------------------------

 ( 3) comwin.dll, comwin.lib (非同封), comwin.h

    * comwin.dll

        複数のComWinクライアント(端末）と各コマンドDLL、外部コマンドの

        入出力をスケジューリングする ComWin システムの核となるDLLです。

        他のプロセスからComWinに文字列を入出力するために、

        Export関数 Puts, Gets 等を提供しています。

        また、コマンドラインの文字列を解釈するためのサービスとして、

        Export関数 MakeArgument を提供しています。

    * comwin.lib (非同封)

        comwin.dllを利用するためのインポートライブラリです。

        開発者以外は必要ありません。

        インポートライブラリを使用するよりも、

        モジュール定義ファイルで IMPORTS 文を使用したほうが、

        保守上好ましいと判断し、同封しないことにしました。

        comwin.dll を利用するためには、

        モジュール定義ファイルに

          imports comwin.Puts

        と記述して利用してください。

    * comwin.h

        ComWin 用ソフトを開発するためのヘッダーです。

        参考にしてください。

-----------------------------------------------------------------------

 ( 4) comwins.dll

    標準コマンドDLLです。

    各種の内部コマンドを提供するためのDLLで、

    ComWin に内部コマンドを提供するためのインターフェースに

    準じて作成されいます。

    語句解釈、スクリプト解釈も行っています。

    Export関数 CallCommand(仮称)、

               CallInterpreter(仮称)、

               CallScript(仮称)、

    で comwin.dll とデータの受け渡しをおこなっています。

    通常のファイル、ディレクトリ操作系コマンドは

    すべて comwins.dll が担当しています。

    (break, cls, exit 等の端末依存コマンドは

     comwinx.exeの埋めこみコマンドです。)

-----------------------------------------------------------------------

 ( 5) comwint.dll

    通信用のコマンドDLLです。

    term コマンドを提供し、簡易端末機能を提供します。

    参照 term

-----------------------------------------------------------------------

 ( 6) comwin.hlp, readme.txt

    comwin.hlp は オンラインヘルプファイルです。

    readme.txt は 簡単な紹介文です。

-----------------------------------------------------------------------

  ( 7) comwreg.exe

    試用期間の表示をし、正規ユーザーの登録をするコマンドです。

    単体では起動できません。

    正規ユーザーの登録が済みしだい削除してください。

    (参照、動作環境)

-----------------------------------------------------------------------

  ( 8) comwin32.dll comwin32.lib

    ComWin32用のソフトから ComWin を呼び出せるようにするアダプタです。

    ユニバーサルサンクと呼ばれます。

    このモジュールを利用するためには Win32s がシステムにインストール

    され、Windows がエンハンストモードで動作している必要があります。

    またファイル名は Windows 3.1 と Windows 95, NT で同一ソフトを

    動かす都合上 ComWin32 の中枢DLL comwin32.dll と同名になっています。

    上書きしないようにご注意ください。

    動作概要

      ComWin16AP --> comwin.dll   --> comwinx.exe (Win3.1)

      ComWin32AP --> comwin32.dll --> comwin.dll   --> comwinx.exe (Win32s)

      ComWin32AP --> comwin32.dll --> comwpad.exe (Win95,NT)

      ComWin16AP --> comwin.dll   --> comwin32.dll --> comwpad.exe (Win95,NT)

    複数のプラットフォームで同一バイナリを動かすことが可能になります。

    comwin32.lib は ComWin32用のソフトを開発するときに必要になります。

    (MS-VC++2.0 ではモジュール定義ファイルの IMPORTS 文が使えないのですが、

     インポートライブラリに頼らなくで済む方法をご存じの方がいらっしゃれば、

     ご一報ください。不必要にバイナリファイルに頼るのは、

     保守上、好ましくありませんから。)

-----------------------------------------------------------------------

 ( 9) bhole.exe

    ComWinとはまったく無関係の 32bitゴミ箱「ブラックホール」です。

    Windows 3.1 + Win32s, Windows 95, NT で動作します。

    ファイルマネージャや ComWin の選択文字列をドラッグし、

    「ブラックホール」のアイコンにドロップすることで

    該当ファイルを削除します。

    ComWin32用のソフトを快適に運用するためには、

    メモリ上(ディスク上ではない)に Win32s が存在している必要があります。

    しかし、Win32s は常にメモリ上にあるわけではなく、Win32用のソフトが

    開始すると同時にメモリに読み込まれ、終了すると同時にメモリから

    破棄されます。Win32s 関連ファイルは合計で1Mbyte を超えるサイズを

    もっていますから、このオーバーヘッドはかなりのものです。

    解決策は簡単で Win32用のプログラムを実行したままにすれば、

    Win32s はメモリに常駐します。しかし、もっともポピュラーな

    Win32用のソフト「フリーセル」はゲームソフトであり、職場等での

    使用が困難なユーザーも多いと思われます。そこで手軽なソフトとして

    32bitゴミ箱を同梱しました。

    「ブラックホール」は フリーソフトであり、

     ComWin とはまったく無関係のソフトなので、

     ご自由にお使いください。

-----------------------------------------------------------------------

 (10) comwin.ini

    ComWin の環境プロファイルです。必ずWindowsディレクトリに作られます。

    初期状態でこのファイルがなくても、自動的に作られます。

    次のセクションが定義されます。

    * [CommandDll]

        ユーザーが独自に作成した内部コマンドを提供するDLLを

        このセクションに登録することにより内部コマンドを拡張できます。

        エディタ等で書き換えます。

    * [InterpreterDll]

        ユーザーが独自に作成した語句解釈用を提供するDLLを

        このセクションに登録することによりコマンドラインに

        好みの構文を定義することができます。

        エディタ等で書き換えます。

    * [ScriptDll]

        ユーザーが独自に作成したスクリプト解釈用のDLLを

        このセクションに登録することによりバッチ処理を

        強力にすることができます。

        エディタ等で書き換えます。

    * [Color]

        デフォルトのフォント色を保存します。

        設定の保存ダイアログで自動生成されます。

    * [Font]

        デフォルトのフォント属性を保存します。

        設定の保存ダイアログで自動生成されます。

    * [Window]

        起動時のウィンドウサイズを存します。

        設定の保存ダイアログで自動生成されます。

    * [StartUp]

        起動時に自動的にロードするプログラムを登録します。

        エディタで編集します。

        起動時引数入力ダイアログで更新されます。

    * [Alias]

        エイリアスを登録します。

        alias, unalias コマンドでComWin内から更新します。

    * [Console]

        クライアント領域の入出力に関する諸設定を登録します。

    * [Auxiliary]

        通信ポートとの入出力に関する諸設定を登録します。

    * [Accessory]

        ウィンドウ、ダイアログに関する諸設定を登録します。

    * [Keyboard]

        キー割り当てを登録します。

    * [History]

        過去のコマンドの履歴を保存します。

        ComWin 内で操作することはありまんせん。

        comwinx.exe の起動時に自動的に読み込まれ、

        終了時に自動的に書き込まれます。

    * [ExecEx]

        拡張起動の設定を保存します。

    * [ExecDOS]

        DOSコマンドの起動モードを指定します。

    * [etc]

        管理用、デバッグ用のセクションです。

        特に指定のない場合書き換えないでください。

-----------------------------------------------------------------------

 (11) install.bat

    単なる DOS のバッチファイルですが、

    ないよりはあったほうが便利なので同封します。

    Uninstall のしかたも説明しています。

    (ComWin システムの場合 del comw*.* で十分です。)

-----------------------------------------------------------------------

 (12) hello.c, hello.def, hello.exe hellocpp.cpp

    Exports 関数 Puts の簡単な使用例です。

    ComWinクライアントに "hello world" を出力します。

    hello.c は C言語、hellocpp.cpp は C++言語で書かれています。

    最近は各処理系もDOSから簡単に移行できるインタフェースを

    用意していますが、以前はありませんでした。

    とにかくWindowsプログラムが誰でも手軽に作れるようになればいいですね。

-----------------------------------------------------------------------

 (13) sample1.c, sample1.def, sample1.exe

    Exports 関数 MakeArgument の使用例です。

    WinMain のコマンドライン引き数を main の

    argc, argv 形式に変換して、ComWinクライアントに

    2通りの方法を使って出力します。

    nearポインタ, farポインタの入り交じったアドレスの

    受け渡しは大変な苦労を伴うものですね。

    Fputs, Fgets を使用した入出力例、

    System コマンドの使用例、

    コンソールの諸情報の取得例、

    環境変数の操作例、

    エスケープシーケンスの使用例、

    簡単なお絵かき方法の例もあります。

-----------------------------------------------------------------------

 (14) sample2.c, sample2.def, sample2.exe

    デバッグメッセージの出力例です。

    Windowsプログラムから ComWin クライアントに

    メッセージの種類、ワードパラメータ、ロングパラメータを出力します。

    似たような機能を持つものとして DBWIN というツールが

    SDK (開発キッド) にありますが、あくまでもデバッグツールにすぎません。

    特にハイレゾ環境では文字が小さすぎて目によくありません。

    デバッグ文を TRUETYPEフォント で格好良く出力するのも、

    たまには気分転換になりませんか。

-----------------------------------------------------------------------

 (15) sample3.c, sample3.def, sample3.dll

    拡張コマンドDLLの作成例です。

    [CommandDll]

    に登録することで、コマンドが利用できます。

    UNIX ライクなコマンドを Windows 上で格好良く

    バリバリ使いたいと思いませんか。

    (Windows にも本格的なキャラクタウィンドウが欲しいですね。)

    (DOS BOX はあくまでも仮想DOSマシンにすぎません。)

    [InterpreterDll] 関係

    InterpreterDll では、

    UNIX のようにフォアグラウンドをデフォルトとし、

    & でバックグラウンド起動させるコマンド解釈の例を示します。

    [ScriptDLL] 関係

    ScriptDll では、DOC という拡張子を持ったファイルを

    指定すると notepad が起動するという定義を示しています。

    ファイルの管理上、InterpreterDll, CommandDll, ScriptDll を同じ

    DLL にまとめましたが、元来は別個に作成できるものです。

-----------------------------------------------------------------------

 (16) sample4a.bat, sample4b.cws

    ComWin用バッチファイルのサンプルです。

    ComWin用バッチファイルの作り方は簡単で

    通常のDOSのバッチファイルの一行目に "REM BAT FOR COMWIN" と

    入力するだけで十分です。あとのフォーマットは

    DOS のバッチファイルに準じます。

    また ComWin 用のバッチファイルを別個に管理する人のために、

    sampel4.cws とリネームして使用することも可能です。

    CWS という拡張子は ComWin 用のバッチファイルとして

    認識されます。文法は bat 拡張子と同じです。

    (CWS の場合 "REM BAT FOR COMWIN" は不要です。)

    参照 スクリプトリファレンス

         フォアグラウンド起動とバックグランド起動

-----------------------------------------------------------------------

 (17) sample5.c, sample5.def, sample5.exe

    ComWin 用の端末の作成例です。

    お粗末ですが簡易ランチャーになっています。

    comwin.dll を利用していますので、

    エイリアス、アプリケーションの関連付け起動等の

    サービスは利用可能です。

-----------------------------------------------------------------------


コマンドリファレンス

11.コマンドリファレンス

    ( 1) alias  (別名定義設定)

    ( 2) cd, chdir (ディレクトリ変更)

    ( 3) clip (クリップボード送信)

    ( 4) cls (画面消去)

    ( 5) comwin (システム情報コマンド)

    ( 6) comwins (サービスコマンド)

    ( 7) copy (ファイル複写)

    ( 8) ctty (入出力デバイスの変更)

    ( 9) date (日付参照変更)

    (10) debug (デバッグレベルの設定)

    (11) del (ファイル削除)

    (12) dir (ファイル一覧)

    (13) dirs (ディレクトリスタックの出力)

    (14) echo (メッセージの表示)

    (15) exit (終了)

    (16) fg (フォアグラウンド実行)

    (17) for (繰り返し実行)

    (18) help (ヘルプ)

    (19) history (コマンド履歴表示)

    (20) KeyboardLayout (キーマップ、IME変更)

    (21) kill (プロセスの強制終了)

    (22) let (ローカル環境変数操作)

    (23) logoff (ログオフ)

    (24) md, mkdir (ディレクトリ作成)

    (25) mode (画面モード、通信ポートの設定)

    (26) paste (クリップボード受信)

    (27) path (パス参照変更)

    (28) pause (一時停止)

    (29) popd (作業ディレクトリの復元)

    (30) PostMessage (メッセージポスト)

    (31) printf (書式付き出力コマンド)

    (32) prompt (プロンプト変更)

    (33) ps (プロセス一覧)

    (34) pushd (作業ディレクトリを保存)

    (35) pwd (カレントディレクトリの表示)

    (36) rd, rmdir (ディレクトリ削除)

    (37) reboot (システム(OS)再起動)

    (38) rem (コメント行の指定)

    (39) ren (名前の変更)

    (40) restart (Windows再起動)

    (41) SendMessage (メッセージ送出)

    (42) set (システム環境変数操作)

    (43) SetWindowPos (ウィンドウ位置設定)

    (44) SetWindowText (キャプション名設定)

    (45) ShellExecute (関連付け起動)

    (46) shutdown (Windowsの終了)

    (47) start (プログラム起動)

    (48) term (通信機能)

    (49) test (計算式評価)

    (50) time (時刻参照変更)

    (51) type (ファイル内容表示)

    (52) unalias (別名定義削除)

    (53) ver (バージョン表示)

    (54) vol (ボリュームラベル参照)

    (55) win (WinExec, LoadModule API の実行)

-----------------------------------------------------------------------

 ( 1) alias (別名定義設定)

    alias [name [wordlist]]

    別名を定義し登録します。

    name ; コマンドに対する別名

    wordlist ; コマンドリスト

    alias ; 別名の一覧を表示します

    alias name ; 別名 name の登録状況を表示します。

    alias name wordlist ; 文字列 wordlist を 別名 name として登録します。

    第２引き数に空白文字を使う場合、引用符(")で括ってください。

    例

        >alias fd winfile

        >alias custom "notepad \config.sys"

        >alias ls "dir %1 /w"

    alias と unalias を別名にすることはできません。

    別名定義を削除する場合は unalias を利用してください。

    comwin.ini の [Alias] セクションが更新されます。

-----------------------------------------------------------------------

 ( 2) cd, chdir (ディレクトリ変更)

    cd [dir]

    カレントディレクトリを変更します。

-----------------------------------------------------------------------

 ( 3) clip (クリップボード送信)

    clip

    クリップボードに文字列を転送します。

    標準入出力用のコマンドなので、

    リダイレクトと組み合わせると便利です。

    例 1

      >clip

      hello world

      ^Z

    クリップボードにキーボード入力文字列を転送

    例 2

     >clip < foo.txt

    クリップボードに foo.txt の内容を転送

    例 3

    >dir | clip

    クリップボードに dir コマンドの出力を転送

-----------------------------------------------------------------------

 ( 4) cls (画面消去)

    cls

    ComWinのクライアント画面を消去します。

    過去の出力履歴も同時に消す機能もありますの注意してください。

-----------------------------------------------------------------------

 ( 5) comwin (システム情報コマンド)

    comwin [ver [-&env]|hwnd [-&env]|dll [args...]]

    システム情報を表示します。

    comwin [ver [-&env]]

        ver バージョン情報を表示します。

        -&env 環境変数 env に代入します。

    comwin [hwnd [-&env]]

        hwnd コンソールのウィンドウハンドルを返します。

        -&env 環境変数 env に代入します。

    comwin [dll [args...]]

        ComWin対応コマンドDLLを直接実行する。

        >comwin dll comwins.dll dir *.*

        >comwin dll cwtools.dll date

-----------------------------------------------------------------------

 ( 6) comwins (サービスコマンド)

    comwins が提供しているサービスコマンドです。

    ComWin の本来の趣旨から外れていますが、

    私が個人的に使用しているコマンドを集めています。

    これらのコマンド群は ComWin の過去互換性の対象外です。

-----------------------------------------------------------------------

 ( 7) copy (ファイル複写)

    copy [dir1|file1] [dir2|file2]

    ファイルを複写します。

    ワイルドカードが使えます。

    上書き防止の確認メッセージがでます。

    確認メッセージをスキップする場合は

    環境変数 COPYCMD=/y を指定してください。

-----------------------------------------------------------------------

 ( 8) ctty (入出力デバイスの切り替え)

    ctty [con|aux]

    ctty con 入出力デバイスをComWin のクライアント領域に設定します。

    ctty aux 入出力デバイスを通信ポートに設定します。

    mode コマンドで通信パラメーターを設定してください。

    注意

      通信ポートが使用できない状態のときに

      ctty aux を実行するとハングアップするときがあります。

-----------------------------------------------------------------------

 ( 9) date (日付参照変更)

    date 日付の参照、または変更を行います。

-----------------------------------------------------------------------

 (10) debug (デバッグレベルの設定)

    debug [0|1]

    スクリプトデバッグ時のメッセージ情報のレベルを設定します。

-----------------------------------------------------------------------

 (11) del (ファイル削除)

    del file

    指定したファイルを削除します。

    ワイルドカードが使えます。

-----------------------------------------------------------------------

 (12) dir (ファイル一覧)

    dir [d:|dir|file] [/W]

    指定したパスと一致したファイルの一覧を表示します。

    ワイルドカードが使えます。

    /W ワイド表示モードです。

    オプションは /W しかありません。

    大文字で表示したい場合は環境変数 DIRCMD に "/-l" を設定してください。

    DIRCMD に "/o" が含まれている場合は整列表示します。

-----------------------------------------------------------------------

 (13) dirs (ディレクトリスタックの出力)

    dirs

    pushdで保存されたディレクトリスタックの内容を出力します。

    参照 popd, pushd

-----------------------------------------------------------------------

 (14) echo (メッセージの表示)

    echo [on|off|args]

    on   エコーをオンにします。

    off  エコーをオフにします。

    args 引数に指定された文字列を出力します。

    エコーオン/オフはコマンドライン上でのみ可能です。

    バッチファイルで echo on 状態にしたい場合は、

    [ESC](ビューワーモード) ---> Option ---> Environment で

    指定できます。

    また "on" "off" を出力する場合は "^^on", "^^off" としてください。

    次の文字列を指定すると特殊文字が出力されます。

        ^^a     ベル

        ^^b     バックスペース

        ^^c, ^^ 行末で改行しない。

        ^^e     0x1B

        ^^n     改行

        ^^r     復帰

        ^^t     タブ

        ^^xNN   "NN" を16進数にする

        ^^^^    '^'文字

    (エスケープ文字は本来'^' だけですが、コマンドラインでの

     エスケープ文字と重複するので "^^" と二つ続ける必要があります。)

-----------------------------------------------------------------------

 (15) exit (終了)

    exit [/p]

    ComWin を終了します。

    ComWin がシェルとして登録されている場合は Windows を終了します。

    ( system.ini の [boot] に shell=comwinx.exe の記述がある場合)

    /p 終了時の確認メッセージを出力しません。

    "exit /p" をエイリアスやファンクションキーランチャーに

    登録することで無確認終了が可能になりますが、

    Alt+F4 や Ctrl+SP--->C 等の標準インターフェースで終了する場合には

    利用できません。この場合でも無確認終了を行う必要のある場合は、

    comwin.ini の [etc] 以下の行に exit=/p を挿入してください。

-----------------------------------------------------------------------

 (16) fg (フォアグラウンド実行)

    fg 直前の外部コマンドが終了するまで、ComWin の実行を停止します。

    例

    c:\>notepad ;fg

    メモ帳が終了するまで ComWin を待機状態にします。

    バッチ処理に利用すると便利です。

    (Ctrl+C でフォアグラウンド処理を解除します。)

    参照 フォアグラウンド起動とバックグランド起動

-----------------------------------------------------------------------

 (17) for (繰り返し実行)

   FOR %variable IN (set) DO command [command-parameters]

   set に指定されている文字列を %variable に代入し、

   DO 以下のコマンド文字列を置き換え set に指定されている

   文字列がなくまるまで、繰り返し実行します。

   例

     >for %ext in (c h rc def) do dir *.%ext

    dir *.c ; dir *.h ; dir *.rc ; dir *.def を実行する。

-----------------------------------------------------------------------

 (18) help (ヘルプ)

    help

    ComWin 内部でサポートされているコマンドの一覧を表示します。

    内部コマンドはコマンドDLLを作成することで拡張できます。

    関連項目

        CallCommand sample3.c

-----------------------------------------------------------------------

 (19) history (コマンド履歴表示)

    history [n]

    コマンド履歴を表示します。

    n コマンド履歴行数を指定します。(無効な数値のときは 10行)

    hisotry コマンドを使用するためには、環境設定ダイアログで、

    ヒストリーコマンド機能を ON にする必要があります。

    ヒストリーコマンドが有効な場合、!10, !c, !! 等で過去のコマンドを

    実行できます。

    注意 history コマンドとカーソルによるヒストリー機能は別ものです。

         history コマンド(オプション)は comwins.dll が提供し、

         ヒストリー機能(標準)は comwinx.exe が提供しています。

-----------------------------------------------------------------------

 (20) KeyboardLayout (キーマップ、IMEの変更)

    KeyboardLayout [IME Name|Keyboard Layout Name]

    IME の一覧を表示します。

    IME を切り替えます。

    キーボードレイアウトの一覧を表示します。

    キーバードレイアウトを切り替えます。

-----------------------------------------------------------------------

 (21) kill (プロセスの強制終了)

    kill hwnd [[hwnd2] ...]

    hwnd ウィンドのハンドル

    プロセスを強制的に終了します。

    ウィンドウハンドルは ps コマンドで取得するか、

    キャプション名での代替指定が使用可能です。

-----------------------------------------------------------------------

 (22) let (ローカル環境変数操作)

    スクリプトファイル内で使用した場合、

    ローカル環境変数領域を操作する点をのぞき、

    使用方法は set コマンドと同様です。

-----------------------------------------------------------------------

 (23) logout (ログオフ)

    logoff

    端末からログオフします。

    ComWin32専用のコマンドです。

-----------------------------------------------------------------------

 (24) md, mkdir (ディレクトリ作成)

    md dir

    新しくサブディレクトリを作成します。

-----------------------------------------------------------------------

 (25) mode (画面モード、通信ポートの設定)

    (a) mode BREAK [on|off]

    mode BREAK on  割り込みの許可

    mode BREAK off 割り込みの禁止

    mode BREAK     現在の割り込み状態

    BREAK オプションは ComWin システムではかなり重要な役割をはたします。

    BREAK off 状態では処理中に CPU を独占するので少し高速になります。

    BREAK on  状態では出力処理中に他のプロセスに CPU を開放するので、

    マルチタスク(Windows の制約で擬似マルチタスク)動作が可能です。

    デフォルトは mode BREAK on です。

    (b) mode CONx string

    string 通信(COM)ボートの設定パラメーター

    例

    C:\>mode COM1 9600,n,8,1

        COM1 ... ポート

        9600 ... ボーレート

        n    ... パリティ(e|m|n|o)

        8    ... キャラクタ長

        1    ... ストップビット

    ctty で参照します。

    comwin.ini の [Auxiliary] セクションが書き換えられます。

    (c) mode CON FONT facename

    facename フォントの書体名

    (d) mode DOS [0|1|2|3]

    0 ... 拡張コンソールを別ウィンドウで実行します。

    1 ... 拡張コンソールの出力を取り込みます。

    2 ... 拡張コンソールと VxD を介して入出力を同期させます。

    3 ... 拡張コンソールとファイルハンドルを介して入出力を同期させます。

-----------------------------------------------------------------------

 (26) paste (クリップボード受信)

  paste

  クリップボードからの文字列を受け取り出力します。

-----------------------------------------------------------------------

 (27) path (パス参照変更)

    path [[dir1[;dir2]...]]

    コマンドのサーチパスの設定(dir1[;dir2]...)

    または表示を行います。

    例

      c:>path

      c:\;c:\dos;c:\windows

      c:>path c:\bin;c:\usr\bin;c:\local\bin

-----------------------------------------------------------------------

 (28) pause (一時停止)

    pause

    次のコマンドを実行する前に一時停止します。

    ただし直前のコマンドはバックグラウンドで実行されています。

    pause コマンドのプロンプト以降に Ctrl+'C' コードが

    含まれている場合、バッチファイル内で実行中止処理ができます。

    例

    c:\>winmine

    c:\>pause

    c:\>sol ;pause

    バッチファイル内やフィルタ処理時に利用すると便利です。

    (注意...pause コマンドは ComWin ver 1.50 から機能を縮小し、

     フォアグラウンド処理を行わなくなりました。

     フォアグラウンド処理が必要な場合は fg コマンドを利用してください。)

    参照 フォアグラウンド起動とバックグランド起動

-----------------------------------------------------------------------

 (29) popd (作業ディレクトリの復元)

    popd

    ディレクトリスタックの先頭を削除し、

    作業ディレクトリを２番目のエントリに変更します。

    参照 dirs, pushd

-----------------------------------------------------------------------

 (30) PostMessage (メッセージポスト)

    (a) PostMessage hwnd message wParam lParam

        又は

    (b) PostMessage -w message wParam lParam hwnd

    hwnd ウィンドウハンドル

    message メッセージ番号

    wParam 各メッセージに対応した２バイト整数

    lParam 各メッセージに対応して４バイト整数

    PostMessage API を直接呼び出しメッセージを各ウィンドウに送出します。

    このコマンドを使用することで汎用的にウィンドウ操作が行えます。

    ウィンドウハンドルは ps コマンドで取得するか、

    キャプション名での代替指定が使用可能です。

    (a) は Windows の PostMessage API と同じ呼び出し順序です。

    (b) は alias 登録するのに便利な呼び出し順序です。

    例

    C:\>alias maximized "PostMessage %1 112 F030 0"

    C:\>alias minimized "PostMessage %1 112 F020 0"

    C:\>alias restore   "PostMessage %1 112 F120 0"

    C:\>ps

    HWND TASK INST TITLE

    194C 1497 1446 プログラム マネージャ

    C:\>maximized 194C  <--- プログラムマネージャを最大化

    C:\>minimized 194C  <--- プログラムマネージャをアイコン化

    C:\>restore   194C  <--- プログラムマネージャを復元

    C:\>maximized "[ファイル マネージャ]"

    C:\>minimized "[ファイル マネージャ]"

    C:\>restore   "[ファイル マネージャ]"

    PostMessage のパラメータは SDK を参考にしてください。

-----------------------------------------------------------------------

 (31) printf(書式付き出力コマンド)

    printf format [env1 env2 ...]

    format   printf の書式指定の部分です。(C言語のprintfに準じます。)

    env1 ... 書式で利用する変数部分です。(システム環境変数で指定します。)

    例

      set value=65

      printf "^%c ^%d ^%X ^%s" value value value value

      ---> A 65 41 65

      ('%' は環境変数引用符なので '^' でエスケープする必要があります。)

-----------------------------------------------------------------------

 (32) prompt (プロンプト変更)

    prompt [text]

    コマンドプロンプトの文字列を text に変更します。

    次の特殊文字が使用できます。

    $Q ... '='

    $$ ... '$'

    $P ... カレントドライブ、パス

    $N ... カレントドライブ

    $G ... '>'

    $L ... '<'

    $B ... '|'

    $H ... バックスペース

    $_ ... 改行

    $E ... ESCコード

    既定値は $P$G です

    prompt コマンドは作業領域や保存領域として INI ファイルに

    プロンプト文字列を書き込みます。INI ファイル内で特殊文字として

    扱われている文字を利用する場合は注意が必要です。

    逆にそれを積極的に利用する方法もあります。

    prompt $p$g % と指定すれば、出力結果は c:\windows> command と

    なり、末尾に空白が追加されます。

    prompt %% と指定すれば、「%」がプロンプトになります。

    注意  現バージョンでは環境変数 PROMPT は参照しません。

-----------------------------------------------------------------------

 (33) ps (プロセス一覧)

    ps

    現在実行中のプロセスの一覧を表示します。

    例

        C:\WIN\COMWIN>ps

        HWND TASK INST COMMAND  TITLE

        12D8 1F37 1ED6 msime    MSIMEServer

        26A0 19C7 198E comwinx  ComWin Ver. 3.51J

        2D18 1A77 2D6E winword  Microsoft Word - README.DOC

        2410 1A77 2CA6 olesvr   Srvr

        194C 14E7 1496 progman  プログラム マネージャ

        1F90 1D67 1D3E drwatson ワトソン博士

        20F0 1CD7 1C46 winoa386 MS-DOS プロンプト

        3768 276F 2416 winhelp  Windows 3.1 SDKヘルプ

    HWND ウィンドウのハンドル

    TASK タスクのハンドル

    INST インスタンスのハンドル

    ウィンドウのハンドルは kill や SendMessage で使用してください。

-----------------------------------------------------------------------

 (34) pushd (作業ディレクトリを保存)

    pushd [directory]

    現在の作業ディレクトリをディレクトリスタックに保存し、

    新しく作業ディレクトリを directory に変更します。

    環境変数に pushdcmd=unix と指定すると

    パラメーター無指定時にディレクトリスタックの

    1番目と2番目のディレクトリを交換します。

    参照 dirs, popd

-----------------------------------------------------------------------

 (35) pwd (カレントディレクトリ表示)

    pwd

    カレントディレクトリを表示します。

-----------------------------------------------------------------------

 (36) rd, rmdir (ディレクトリ削除)

    rd dir

    指定した空きディレクトリを削除します。

-----------------------------------------------------------------------

 (37) reboot (システム(OS)再起動)

    reboot [/p]

    Windows を終了しシステムをリセットします。

    /p 確認メッセージを出力しません。

-----------------------------------------------------------------------

 (38) rem (コメント行の指定)

    rem [comment]

    コメント行を指定します。

-----------------------------------------------------------------------

 (39) ren (名前の変更)

    ren file1 file2

    file1 の名前を file2 に変更します。

    ファイル内容、ファイルのタイムスタンプは変更しません。

    (プログラム作成の難易度、実用性から考えて、

     ファイル名にディレクトリ名を含めることは

     機能からはずしました。)

-----------------------------------------------------------------------

 (40) restart (Windows再起動)

    restart [/p]

    Windows を終了し再起動します。

    /p 確認メッセージを出力しません。

-----------------------------------------------------------------------

 (41) SendMessage (メッセージ送出)

    (a) SendMessage hwnd message wParam lParam

        又は

    (b) SendMessage -w message wParam lParam hwnd

    hwnd ウィンドウハンドル

    message メッセージ番号

    wParam 各メッセージに対応した２バイト整数

    lParam 各メッセージに対応して４バイト整数

    SendMessage API を直接呼び出しメッセージを各ウィンドウに送出する。

    このコマンドを使用することで汎用的にウィンドウ操作が行えます。

    ウィンドウハンドルは ps コマンドで取得するか、

    キャプション名での代替指定が使用可能です。

    (a) は Windows の SendMessage API と同じ呼び出し順序です。

    (b) は alias 登録するのに便利な呼び出し順序です。

    例

    C:\>alias maximized "SendMessage %1 112 F030 0"

    C:\>alias minimized "SendMessage %1 112 F020 0"

    C:\>alias restore   "SendMessage %1 112 F120 0"

    C:\>ps

    HWND TASK INST TITLE

    194C 1497 1446 プログラム マネージャ

    C:\>maximized 194C  <--- プログラムマネージャを最大化

    C:\>minimized 194C  <--- プログラムマネージャをアイコン化

    C:\>restore   194C  <--- プログラムマネージャを復元

    SendMessage のパラメータは SDK を参考にしてください。

    PostMessage と SendMessage の違い

        PostMessage = 手紙伝言

        SendMessage = 電話伝言

    と考えてください。

    電話の方が処理は早いのですが、相手の都合が悪い場合もあります。

    ComWin が SendMessage を使用すると相手(別プロセス)の都合が悪い場合、

    最悪の状態でシステムフリーズという現象がおきます。(特にOLE対応ソフト)

    通常は SendMessage は使用せず、PostMessage を使用することを勧めます。

-----------------------------------------------------------------------

 (42) set (システム環境変数操作)

    set [name=[string]]

    set @ expression

    環境変数の設定(name=string)、

    削除(name=)、一覧を表示します。

    プロンプト(name)、標準入力からの入力を求めます。

    計算式(@ exression)、計算式を評価し環境変数に代入します。

    注意

      DOS の場合 name は大文字に変換されるのですが、

      ComWin の場合、大文字、小文字を区別します。

      サーチパスを変更するときは次のようにしてください。

        c:>set PATH=c:\dos <--- 正

        c:>set path=c:\dos <--- 誤

    参照  スクリプトリファレンス

-----------------------------------------------------------------------

 (43) SetWindowPos (ウィンドウ位置設定)

    SetWindowPos hwnd hwndInsertAfter x y cx cy fuFlags

    hwnd            ウィンドウハンドル

    hwndInsertAfter 位置ハンドル

    x               水平位置

    y               垂直位置

    cx              幅

    cy              高さ

    fuFlags         フラグ

    hwndInsertAfter は次の値を設定してください。

      最下位位置 1、最上位位置 0、

      常に手前表示設定 -1、常に手前表示解除 -2

    fuFlags は次の値を OR で組み合わせてください。

      0001 サイズを変更しない

      0002 移動しない

      0004 Z-オーダーを変えない

      0008 再描画しない

      0010 アクティブにしない

      0020 枠を描画する

      0040 ウィンドウを表示する

      0080 ウィンドウを非表示にする。

    ウィンドウハンドルは ps コマンドで取得するか、

    キャプション名での代替指定が使用可能です。

    例

      >SetWindowPos "[時計]" -1 0 0 0 0 3

      時計を常に手前状態にする。

      >SetWindowPos "[プログラム マネージャ]" 0 0 0 640 480 0

      プログラムマネージャの位置を(0,0)にし、大きさを(640,480)にする。

-----------------------------------------------------------------------

 (44) SetWindowText (キャプション名設定)

    SetWindowText hwnd string

    hwnd   ウィンドウハンドル

    string 設定する文字列

    キャプション名を設定します。

    ウィンドウハンドルは ps コマンドで取得するか、

    キャプション名での代替指定が使用可能です。

    各アプリケーションのキャプション名を

    ユーザーの扱いやすいキャプション名に変更できます。

    例

      c:\>SetWindowText "[プログラム マネージャ]" "Program Manager"

    注意 キャプション名に著作権表示のあるアプリ等は不用意に変更すると

         著作権に触れる場合があります。各アプリのマニュアルに従ってください。

-----------------------------------------------------------------------

 (45) ShellExecute (関連付け起動)

    ShellExecute hwnd Op File Params Dir ShowCmd

    アプリケーションの詳細な関連付け起動を行います。

        hwnd    : ウィンドウハンドル、通常は 0 を指定してください。

        Op      : 起動操作、通常は 0 を指定してください。

        File    : 起動ファイル名

        Params  : 起動ファイル名に渡す引数

        Dir     : 起動時のディレクトリ

        ShowCmd : 起動状態。

    [Op] 起動操作の例

        "open" or "print" or "0"

    [ShowCmd] 起動状態の例

        SW_SHOWNORMAL     : 1

        SW_SHOWMINIMIZED  : 2

        SW_SHOWMAXIMIZED  : 3

    例えば、alias で次のように指定すれば、

    >alias sh "ShellExecute 0 0 %1 ^"%3 %4^" ^" %2^" 1"

    >sh exefile [directory [argument]]

    という起動ディレクトリ指定つきのランチャーコマンドが実現できます。

-----------------------------------------------------------------------

 (46) shutdown (Windowsの終了)

    shutdown [/p]

    Windows システムをシャットダウンします。

    Windows を終了させます。

    /p 確認メッセージを出力しません。

-----------------------------------------------------------------------

 (47) start (プログラム起動)

    start [/wait] exefile [arg0 [...]]

    exefile で指定されたプログラムを起動します。

    /wait ... プログラムをファアグラウンドで起動します。

-----------------------------------------------------------------------

 (48) term (通信機能)

    term [filename]

    filename 定義ファイル名を指定します。

    term コマンドを実行すると専用コマンド入力モードに入ります。

    以下のサブコマンドが利用できます。

      ! [command] ; ComWin のコマンド実行する

      !![string] ; 文字列をデーターとして扱う

      !close ; 通信ポートを閉じる

      !code {SJIS|EUC} ; 文字コードを設定する

      !download filename ; 指定ファイルをXMODEM(128/SUM)で受信する

      !exit ; 通信コマンドを終了する

      !help ; コマンド一覧を表示する

      !load filename; テキストファイルをロードする

      !log filehead ; 通信ログ名を指定する

      !open [COMn] ; 指定された通信ポートを開く

      !password ; パスワード用の入力ボックスを開く

      !set ; 設定ダイアログを開く

      !speed COMm ; 通信パラメーターを設定する(m=1,2,3,4)

      !speed COMm [baud=b] ; 速度(b=100-19200)

      !speed COMm [parity=p] ; パリティ(p=n,e,o,m,s)

      !speed COMm [data=d] ; データ長(d=5,6,7,8)

      !speed COMm [stop=s] ; ストップビット(1,1.5,2)

      !speed TELNET [host=hostname] ; ホスト名を指定する

      !speed TELNET [port=12] ; ホストのポートを指定する

      !tel number; 電話する

      !time ; 通信経過時間を表示する

      !upload filename ; 指定ファイルをXMODEM(128/SUM)で送信する

      !wait string ; string で指定した文字列を受信するまで待つ

    コマンドの詳細

    ! [command] ; ComWin のコマンド実行する

      通信モードのなかから ComWin のコマンドが実行できます。

      ! の次に ' '(空白) が必要です。

    !![string] ; 文字列をデーターとして扱う

      !! あとに続いた文字列は通常のデーターとして扱います。

      '!' をデーターとして渡したい場合 "!!!" とすることで可能です。

    !load filename; テキストファイルをロードする。

      電子メール等を送信するとき等に

      ディスク上のテキストファイルを指定します。

    !log filehead ; 通信ログ名を指定する

      ログとして保存するファイル名の先頭文字を指定します。

      実際のファイル名には通信時の日付が追加されます。

      (例)

         NF           ---> NF960720.LOG

         NIFTY        ---> NIFTY720.LOG

         C:\COMWIN\NF ---> C:\COMWIN\NF960720.LOG

    !password ; パスワード用の入力ボックスを開く

      通常の通信ソフトは入力文字をそのままホストに送りますが、

      ComWin の場合はラインバッファに一時的に蓄えられます。

      したがってパスワード等のエコーバックしたくない文字列を

      入力するときに使用します。省略系は !p です。

    !tel number; 電話する

      指定した電話番号で電話します。ただしトーン回線のみです。

      パルス回線を使用するときには

      ATDP 等の AT コマンドを使用してください。

    !time ; 通信経過時間を表示する

      通信回線を開いてからの経過時間を表示する。

    (注意事項)

    バージョンアップユーザーの場合デフォルトでは利用できません。

    「拡張コマンドDLL」の設定で comwint.dll を登録してください。

    (32bit 版は comwtrm.dll)

    また、comwin.ini の [CommandDll] に comwint.dll=CallCommandを

    書き込むことでも使用可能になります。

    (32bit 版は comwin32.ini [CommandDll] comwtrm.dll=CallCommand)

    term コマンドを実行した状態のままで ComWin を終了させないでください。

    また、複数の ComWin から同時に term コマンドを使用しないでください。

    システムが不安定になります。

-----------------------------------------------------------------------

 (49) test (計算式評価)

    test expression

    expression を評価し、環境変数 status に

    真であれば 0 を 偽であれば、1 を代入する。

    参照  スクリプトリファレンス

-----------------------------------------------------------------------

 (50) time (時刻参照変更)

    time

    時刻の参照、または変更を行います。

-----------------------------------------------------------------------

 (51) type (ファイル内容表示)

    type file

    ファイル file の内容を表示します。

    (32bit版) Unicode テキストファイルも表示します。

-----------------------------------------------------------------------

 (52) unalias (別名定義削除)

    unalias strings

    指定した別名 strings を無効にします。

    unalias *

    すべての別名を無効にします。

    comwin.ini の [Alias] セクションが更新されます。

-----------------------------------------------------------------------

 (53) ver (バージョン表示）

    ver

    comwin.dll の バージョン番号を表示します。

    (comwinx.exe の バージョンはキャプションに表示されます。)

-----------------------------------------------------------------------

 (54) vol (ボリュームラベル参照)

    vol [drive]

    drive で指定したドライブの

    ボリュームラベルを参照します。

-----------------------------------------------------------------------

 (55) win (WinExec, LoadModule API の実行)

    win [/e] [/Sn] exefile [option]

    exefile を n の状態で WinExec API を使い起動します。

    (/e を指定した場合は LoadModule API を呼び出します。

    この場合、環境変数が子プロセスに継承されます。)

    n の状態値はスタートアップ機能で説明しているのと同じ値です。

    例

      win sol      ソリティアを通常の状態で起動する。

      win /s1 sol  同上

      win /s3 sol  ソリティアを最大化で起動する。

      win /s6 sol  ソリティアをアイコン化で起動する。

    ComWin ver 1.40 から新設されたコマンドです。

    ComWin は DOSプログラム、ComWin用バッチファイルを管理する必要が

    あるので、起動前に実行ファイルの形式(DOS, WIN, WIN32S等)を

    常にチェックしています。

    しかし、作者の財力から得られる情報では

    非公開のヘッダーを持った実行ファイルすべてに対応するのは不可能で、

    実行ファイルの種別を誤認識する場合が考えられます。

    非常用のコマンドとしても利用してください。

    (現在、作者の知りうるものでは、EXCEL4 だけが該当します。

     EXCEL5 は正常に認識しますので、EXCEL4 の特殊性が原因だと思います。

     ComWin ver 1.30 用に用意された comwine.dll を使用している方は

     comwine.dll を削除して、comwin.ini から

     comwine.dll=CallCommand の行を削除してください。)

    参照 スタートアップ機能

         環境変数サーバー機能

-----------------------------------------------------------------------

   (コマンド補足)キャプション名での代替指定について

    Windows は ウィンドウハンドルを用いてウィンドウ操作を行うのですが、

    ウィンドウバンドルは 16bit の数字であり

    しかも、起動した環境によって変化するものなので、

    コマンドラインから扱うのは非常に不便です。

    そこで ComWin ではキャプション名を指定することで

    ウィンドウハンドルの代替指定を可能にしました。

    「"[キャプション名]"」 とすることで最初に該当するウィンドウを指定。

    「"{キャプション名}"」 とすることで該当する全てのウィンドウを指定。

-----------------------------------------------------------------------


メニューリファレンス

12.メニューリファレンス

    ( 1) Save Log (表示結果の保存)

    ( 2) Command DLL (コマンドDLLの設定)

    ( 3) Apps (アプリケーションの起動)

    ( 4) Exit (終了)

    ( 5) Cut (クリップボードへの移動)

    ( 6) Copy (クリップボードへのコピー)

    ( 7) Paste (クリップボードからのコピー)

    ( 8) View (表示設定)

    ( 9) Environment (各種環境設定)

    (10) DOS Command (DOSコマンドの設定)

    (11) Launcher (ファンクションキーランチャーの設定)

    (12) Font (フォントの設定)

    (13) Color (色の設定)

    (14) Key assign (キー割り当ての設定)

    (15) Arguments (シェル起動時引数の設定)

    (16) Save Setting (各種設定の保存)

    (17) Contents (オンラインヘルプ)

    (18) About (ComWinについて)

-----------------------------------------------------------------------

 ( 1) Save Log (表示結果の保存)

    ComWin に出力された過去の表示結果をファイルに保存します。

    過去の履歴は500行まで保存できます。

-----------------------------------------------------------------------

 ( 2) Command DLL (コマンドDLLの設定)

    Command DLL の設定を行います。

    動的ロード、順序の変更、保存等が可能です。

-----------------------------------------------------------------------

 ( 3) Apps (アプリケーションの起動)

    プログラムマネージャやタスクバーに登録されているプログラムを

    メニュー項目の中から起動します。

-----------------------------------------------------------------------

 ( 4) Exit (終了)

    ComWin を終了します。

    ComWin がシェルとして登録されている場合はWindows を終了します。

    ( system.ini の [boot] に shell=comwinx.exe の記述がある場合)

-----------------------------------------------------------------------

 ( 5) Cut (クリップボードへの移動)

    コマンドラインの選択文字列をクリップボードに移動します。

-----------------------------------------------------------------------

 ( 6) Copy (クリップボードへのコピー)

    コマンドラインの選択文字列や

    過去の表示結果をクリップボードにコピーします。

    過去の履歴は500行まで保存できます。

-----------------------------------------------------------------------

 ( 7) Paste (クリップボードからのコピー)

    コマンドラインにクリップボードの文字列をコピーします。

-----------------------------------------------------------------------

 ( 8) View (表示設定)

    * 3-D (立体化)ダイアログに使用する DLL を指定します。

        使用せず、ctl3d.dll、ctl3dv2.dll の３つから選びます。

        comwin.ini [Accessory] が更新されます。

    * コンソール桁数の設定

        最大折り返し桁数と最小折り返し桁数を指定することで、

        画面サイズに応じて折り返し桁数が変化します。

    * TAB カラム数を指定します。

        0 の場合は TAB を特別扱いしないので若干表示が高速になります。

        comwin.ini [Console] が更新されます。

    * キャプションバー

       キャプションバーの表示、非表示を指定します。

    * 起動時メニューバー

       起動時のメニューバーの表示・非表示を指定します。

    * ツールバー

        ツールバーの表示、非表示を指定します。

    * 左マージン

        左側にマージンを取ります。

    * ファイラープロンプト

       ファイル一覧のプロンプトを表示します。

    * ファンクションキー

       ファンクションキーバーの表示、非表示を指定します。

       8個表示、10個表示、12個表示を選べます。

    * 拡張コンソール

        拡張コンソール(DOS)の表示、非表示を指定します。

-----------------------------------------------------------------------

 ( 9) Environment (各種環境設定)

    * 拡張コンソールの設定

        DOS コマンドの実行状態を制御します。

    * 標準PIF

        ComWin が DOS コマンドを実行するためのローダ用PIFを設定します。

    * ヒストリ行数

        コマンド履歴の保存行数を設定します。

    * 拡張起動

        実行ファイル以外のファイルの起動方法を指定します。

    * ファイル名補完:大文字で表示

        補完時に大文字で補完されます。

        大文字でコマンドを入力している場合便利です。

    * ファイル名補完:ディレクトリセパレータ「/」

        補完時に「/」で補完されます。

    * ファイル名補完:ディレクトリセパレータ付加

        ディレクトリ名を補完した場合最後に「\」,「/」を付加します。

    * ファイル名補完:コマンド名も補完

        補完時にコマンド名も補完されます。

    * ヒストリ補完機能

        現在のコマンドラインと一致する文字列を過去の履歴から

        検索し補完します。

    * フィルター機能

        ">", ">>", "<", "|" 等のフィルタ機能実現に必要な特殊文字を

        解釈し、リダイレクト、パイプを実現します。

    * エスケープシーケンス

        エスケープシーケンスの有効、無効をしてします。

    * バッチファイル使用時にコマンドのエコー有無を指定します。

        バッチファイルデバッグ時にコマンドをエコーしたい場合に便利です。

        comwin.ini [Console] が更新されます。

    * ヒストリーコマンド

        UNIXライクなヒストリー機能を有効にします。

        !!, !3, !c 等のコマンド指定が可能になります。

    * 子プロセスへ環境継承

        このボックスをチェックすることで、

        現在の ComWin の環境を子プロセスに継承することができます。

        (注意。シェルとして使用する場合はチェックしない方が望ましいです。

        詳しくは環境変数サーバー機能を参照)

    * スクロールを2行毎におこなうかどうか指定します。

        2行毎に設定することでスクロールが高速になります。

        ただし、範囲指定など微調整が必要な場合は、2行毎の設定を

        オフにしたほうが便利かもしれません。

    * 完全再描画モード

        完全再描画モードでは、ComWin の画面が他のウィンドウの後に

        ある状態でも、表示を乱さずにスクロールします。

        この場合、常にクリップ領域をチェックしていますので、

        スクロールのスピードは若干遅くなります。

    * シェルとして使用

        このボックスをチェックすることでシェルとして使用できます。

        ボックスのチェック状態が変更されると

        Windows が再起動されるので注意してください。

        また、シェルとして使用する場合、ComWin の必要ファイルは

        次のディレクトリのいずれかにある必要があります。

            Windows ディレクトリ

            Windows システムディレクトリ

            環境変数 PATH で指定されたディレクトリ

        (注意)

          Windows 3.1 以外の環境で ComWin(16bit)を使用する場合、

        このメニューは選択しないでください。

    参照 DOSコマンドをComWin窓で実行可能、

         historyコマンド

-----------------------------------------------------------------------

 (10) DOS Command (DOSコマンドの設定)

    特定の DOS コマンドの起動モードを設定します。

    通常はデフォルトの起動モードを使用しますが、

    特定のコマンドだけ別の起動モードを使用したいときに設定します。

    コマンド名はフルパス名で指定するようにお願いします。

-----------------------------------------------------------------------

 (11) Launcher (ファンクションキーランチャーの設定)

    ファンクションキーランチャーを設定します。

    Fx, Shift+Fx, Ctrl+Fx, Shift+Ctrl+Fx (x = 1 ～ 12)

    の組み合わせにより 48種類のコマンドを登録することができます。

    タイトル入力欄 ... ファンクションキーバーに表示されるタイトル

    コマンド入力欄 ... ファンクションキー押下時のコマンド文字列

    同期表示 ... Shift, Ctrl キー押下時にファンクションキーバーの

                 表示を同期します。

-----------------------------------------------------------------------

 (12) Font (フォントの設定)

    ComWin に出力される文字のフォント属性を設定します。

    固定ピッチのフォントのみ利用できます。

-----------------------------------------------------------------------

 (13) Color (色の設定)

    ComWin に出力される文字の背景色を設定します。

    Windows の仕様により、文字の背景色は純色しか指定できないので、

    実際に指定したものと異なった色が出力されることがあります。

-----------------------------------------------------------------------

 (14) Key assign (キー割り当ての設定)

    ComWin に各操作に割り当てられるキーを設定変更します。

    置換候補から候補を選び、置換ボタンを押すと、

    リストボックスでハイライトされている項目のセットされます。

    優先キー、補助キーの区別はラジオボタンで行ってください。

    保存ボタンを押すことで次回起動時に反映されます。

    初期値でデフォルトの状態に戻します。

-----------------------------------------------------------------------

 (15) Arguments (シェル起動時引数の設定)

    comwinx.exe は /c オプション以降に指定された文字列を

    コマンドとして解釈し起動時に自動実行します。

    しかし、ComWin をシェルとして利用する場合、

    shell=comwinx.exe /c cwstart.bat ; <--- NG

    shell=comwinx.exe                 <--- OK

    となり、起動時のオプションが指定できません。

    そこで、シェル起動時のオプションを

    Arguments ダイアログに指定します。

    この機能はシェルとして利用するときのみ有効です。

-----------------------------------------------------------------------

 (16) Save Setting (各種設定の保存)

    フォントの属性、背景色、ウィンドウのサイズ、

    プロンプト文字列、言語モードを保存します。

    次回起動時にはこの設定がデフォルトになります。

    システムメニューの「English」で日本語と英語を切り替えることで

    言語モードの変更が可能です。

    comwin.ini の [Font], [Color], [Window], [Console], [Accessory] の

    各セクションが更新されます。

-----------------------------------------------------------------------

 (17) Contents (オンラインヘルプ)

    ComWin のオンラインヘルプを表示します。

-----------------------------------------------------------------------

　(18) About (ComWinについて)

    ComWin についての情報を表示します。

    またシステムに関する諸情報も同時に表示します。

-----------------------------------------------------------------------


スクリプトリファレンス

13.スクリプトリファレンス

  ( 1) コメント

  ( 2) 予約語

  ( 3) 定数

  ( 4) 変数

  ( 5) 予約変数

  ( 6) 演算子

  ( 7) 引用符

  ( 8) プロシジャー

  ( 9) コマンド行

  (10) 制御コマンド一覧

-----------------------------------------------------------------------

 ( 1) コメント

    '#' ではじまり、改行までの文字列をコメントとして処理します。

    例

        dir # ディレクトリ内のファイル一覧を表示します。

-----------------------------------------------------------------------

 ( 2) 予約語

    以下の文字列はスクリプト内で予約されています。

      break, breaksw, call, case, continue,

      default, else, end, endif, endsw,

      for, foreach, gosub, goto, if,

      proc, return, shift, switch, then, until,

      while

-----------------------------------------------------------------------

 ( 3) 定数

    定数は基本的に文字列として定義されますが、

    文字列の並びにより次の種類に分類されます。

        10進整数系( 0-9 の文字ではじまるもの)、

        16進整数系( 0x の2文字ではじまるもの)、

        浮動小数点系( . 文字が含まれているもの)、

        アドレス系(& 文字ではじまるもの)、

        文字列系(その他)

    例

        123456 (10進整数系)

        0x123456 (16進整数系)

        123.456 (浮動小数点系)

        &a123456 (アドレス系)

        "123456" (文字列系)

-----------------------------------------------------------------------

 ( 4) 変数

    * 識別子

      英字もしくは「_」ではじまる文字列です。

      途中に数字、「.」、「[」、「]」を含めることが可能です。

      2バイトコード(漢字等)も使用可能です。

      変数名を工夫することで擬似配列や、擬似構造体も定義できます。

      array[0], array[1], arrary[100]

      struct.member1, struct.member2,

      struct.mem_ary[10], struct.mem_ary[25]

    * 宣言

      set, let の代入式に指定するか、

      test, for (...;...;...), if (...), while (...), until (...) の

      計算式に指定することで、自動的に領域を確保します。

      基本的に文字列型として宣言されます。

    * 代入

      set foo=abc

      set @ foo = 2 + 3

      set @ foo += 3

      等の構文で代入可能です。詳しくは set を参照してください。

    * 参照

      %foo% のように環境変数を '%' で括ることで参照できます。

    * 記憶クラス

      変数の記憶クラスは次の２つに別れます。

      外部変数(システム環境変数)

        すべてのプロシジャー(関数)、プロセスで使用可能な変数です。

        set コマンドで宣言、代入します。

      内部変数(ローカル環境変数)

        カレントプロシジャー(関数)でのみ有効な変数です。

        let コマンドで宣言、代入します。

      変数領域はそれぞれ 4096 文字まで有効です。

    * 変換規則

      各変数に作用する演算子により

      文字列、アドレス、10進整数、16進整数、浮動小数点数に

      変換されます。詳しくは演算子を参照してください。

-----------------------------------------------------------------------

 ( 5) 予約変数

    次の変数はあらかじめシステムで予約されています。

    status

      直前のコマンドの戻り値を格納する。

    status_window

      直前のコマンドのウィンドウハンドルを格納する。

    status_console

      直前の拡張コンソール(=DOS窓)のウィンドウハンドルを格納する。

-----------------------------------------------------------------------

 ( 6) 演算子

    (演算子)(意味)(優先順位・方向)(変換形式)

    ()  値構築演算子　　　　 1左  文字列

    ++  後置増分演算子　　　 2右  10進整数、浮動小数点数

    --  後置減分演算子　　　 2右  10進整数、浮動小数点数

    ++  前置増分演算子　　　 2右  10進整数、浮動小数点数

    --  前置減分演算子　　　 2右  10進整数、浮動小数点数

    ~   補数演算子　　　　　 2右  10進整数

    !   論理否定演算子　　　 2右  10進整数

    -   単項- 演算子　　　　 2右  10進整数、浮動小数点数

    +   単項+ 演算子　　　　 2右  10進整数、浮動小数点数

    &   アドレス演算子　　　 2右  アドレス

    *   間接演算子　　　　　 2右  文字列

    $   間接演算子　　　　　 2右  文字列

    :   文字化演算子　　　　 2右  文字列

    :   数値化演算子　　　　 3左  10進整数

    *   2項*演算子　　　　　 4左  10進整数、浮動小数点数

    /   2項/演算子　　　　　 4左  10進整数、浮動小数点数

    %   2項%演算子　　　　　 4左  10進整数

    +   2項+演算子　　　　　 5左  10進整数、浮動小数点数

    -   2項-演算子　　　　　 5左  10進整数、浮動小数点数

    <<  左シフト演算子　　　 6左  16進整数

    >>  右シフト演算子　　　 6左  16進整数

    <   < 演算子　　　　　　 7左  10進整数

    <=  <=演算子　　　　　　 7左  10進整数

    >   > 演算子　　　　　　 7左  10進整数

    >=  >=演算子　　　　　　 7左  10進整数

    ==  ==演算子　　　　　　 8左  10進整数

    !=  !=演算子　　　　　　 8左  10進整数

    &   ビット積演算子　　　 9左  16進整数

    ^   ビット差演算子　　　10左  16進整数

    |   ビット和演算子　　　11左  16進整数

    &&  論理積演算子　　　　12左  10進整数

    ||  論理和演算子　　　　13左  10進整数

    =   単純代入演算子　　　14右  文字列

    *=  *=演算子　　　　　　14右  10進整数、浮動小数点数

    /=  /=演算子　　　　　　14右  10進整数、浮動小数点数

    %=  %=演算子　　　　　　14右  10進整数

    +=  +=演算子　　　　　　14右  10進整数、浮動小数点数

    -=  -=演算子　　　　　　14右  10進整数、浮動小数点数

    <<= <<= 演算子　　　　　14右  10進整数

    >>= >>= 演算子　　　　　14右  10進整数

    &=  &=演算子　　　　　　14右  16進整数

    |=  |=演算子　　　　　　14右  16進整数

    ^=  ^=演算子　　　　　　14右  16進整数

    ,   カンマ演算子　　　　15左  文字列

    代入演算子の左辺値には変数文字列をそのまま指定してください。

    参照するためには環境変数引用符 %...% が必要です。

    set @ a = 1

    set @ b = 2

    set @ c = %a% + %b%

    echo %a% + %b% = %c% # ---> 1 + 2 = 3

    備考

      *間接演算子「*」「$」について

        任意の文字列に「*」「$」を作用させることで、

        文字列の指す環境変数が参照できます。

        該当する環境変数が存在しない場合は空文字を返します。

        C言語のポインタに相当する機能です。

          set @ a = 1

          set @ b = a

          set @ c = $(%b%)

          set @ d = $$b

          echo "%c%" "%d%" # ---> "1" "1"

        「*」と「$」の違い

        「$」はローカル環境変数(let で宣言したもの)しか

        参照しませんが、「*」はシステム環境変数(set で宣言したもの)

        も参照します。

          set path=c:\windows;c:\windows\system;c:dos

          let path1=%path%     # 代入

          let @ path2 = *path  # 代入

          let @ path3 = $path  # 未代入

          echo %path1% # ---> c:\windows;...

          echo %path2% # ---> c:\windows;...

          echo %path3% # ---> (なし)

        逆のケースもあります。

          let str=abc

          set str1=%str%       # 代入

          set @ str2 = *str    # 代入

          set @ str3 = $str    # 未代入

          echo %str1% # ---> abc

          echo %str2% # ---> abc

          echo %str3% # ---> (なし)

        通常はモジュールの独立性を保つために「$」を使用すべきです。

      *文字化演算子「:」、数値化演算子「:」について

        [単項演算子として使用]

          let @ c = :0x41   # ASCIIコードを文字にする。

          let @ w = :0x82A0

          echo "%c%" "%w%" # ---> "A" "あ"

        [２項演算子として使用]

          let @ c = abc:0 # 左項の文字列の 0 番目を コード化する。(0から開始)

          let @ w1 = あいう:0 ;let @ w2 = あいう:1

          let @ c ^|= 0, w = ($w1*0x100+$w2)^|0 # 10進表示から16進表示に変更

          echo "%c%" "%w%" # ---> "0x00000041" "0x000082A0"

          let s=123

          let @ i = 0

          let @ c[%i%] = :($s:$i), i++

          let @ c[%i%] = :($s:$i), i++

          let @ c[%i%] = :($s:$i), i++

          echo %c[0]%%c[1]%%c[2] # ---> 123

      *任意の文字列を10進整数にキャストする例

          set @ b = ~~a

      *任意の文字列を16進整数にキャストする例

          set @ b = a ^| 0

      *任意の文字列を浮動小数点数にキャストする例

          set @ b = a + 0.0

-----------------------------------------------------------------------

 ( 7) 引用符

    次の 3種類の引用符が定義されています。

    「"」(ダブルクォート) 通常引用符

       引用符で囲まれた文字列を特殊文字も含め一つの文字列にします。

       演算式内でのみ有効です。

       引用符内の特殊文字はそれを利用するコマンドに依存します。

       let @ str1 = "I am a boy."

    「`」(バッククォード) リダイレクト引用符

       引用符で囲まれた文字列をコマンドとみなし、

       その出力結果と置き換えます。演算式内でのみ有効です。

       引用符内の特殊文字はそれを利用するコマンドに依存します。

       let @ str1 = `echo I am a boy.`

    「%」(パーセント) 環境変数引用符

       引用符で囲まれた文字列を環境変数とみなし、

       それが指し示す文字列と置き換えます。

       すべてのコマンドラインで評価されます。

       引用符内の特殊文字はそれを利用するコマンドに依存します。

       let @ str1 = %str0%

    備考

      * 演算式

        test expr, set @ expr, let @ expr,

        for (expr;expr;expr), if (expr) then, untile (expr), while (expr)

        の expr に該当する部分です。

      * 「%」と「*」,「$」の違いについて

        以下の式はすべて等価ですが、

        使用法により大きく異なる場合もあります。

          let @ a = %b% + %c%

          let @ a = $b + $c

          let @ a = *b + *c

        %...% はすべてのコマンドラインで文字列として展開されるのに対し、

        「*」,「$」は 演算式内の演算子です。したがって副作用はありません。

        %...% は演算子の評価前に展開されるので、副作用もありますが、

        条件式をそのまま指定することもできます。

          let a=^" # 副作用の例

          if ("%a%" == "") then # エラー """ となり引用符のネストが崩れる。

          let condition=$a+$b

          if (%condition%) then # 条件式そのものも指定できる。

-----------------------------------------------------------------------

 ( 8) プロシジャー

    プロシジャーという通訳単位でスクリプトは管理されています。

    各プロシジャーは proc func (名前) で区切られています。

    BOF(Begin Of File)

    ...                メインプロシジャー

    proc abc

    ...                abc プロシジャー

    proc def

    ...                def プロシジャー

    proc ghi

    ...                ghi プロシジャー

    EOF(End Of File)

    各プロシジャーは独立した、内部変数、ラベルを持ちます。

    スクリプトを実行した場合、最初にメインプロシジャーが実行されます。

    その他のプロシジャーは call コマンドで呼び出します。

      call @ abc 1 2 3

    各プロシジャーの引き数は %1 %2 %3 ... %9 で参照することができます。

    %0 はスクリプトファイル名です。

    [プロシジャー間のデーターの引き渡し]

    各プロシジャーはそれぞれ独立した内部変数、ラベルを所有しますが、

    これは各プロシジャーのモジュール化には有効ですが、データー操作を

    行うには不便です。そこで次の方法が用意されています。

    1. gosub を使用する。gosub によって呼ばれる処理は、

       内部変数を共有できます。ただし、モジュール化には不適当です。

    2. set を利用する。set による外部変数でデーターを共有します。

       ただし、大量のデーターを受け渡すには不適当です。

    3. & を利用する。「&」演算子でデーターの変更を許可することができます。

       各プロシージャをモジュール化するには最も有効な方法です。

    例

    let @ a = 1

    let @ b = 2

    call @ swap &a &b

    return

    proc swap

    let pa=%1

    let pb=%2

    let @ tmp = $%pa%

    let @ %pa% = $%pb%

    let @ %pb% = $tmp

    return

    「&」文字を変数名の先頭につけることで呼び出された子プロシジャーは

    「&」文字以下の文字列と一致するヘッダーをもった親プロシジャーの変数を

     変更することができます。擬似配列を扱うこともできます。

    例)

    let @ a[0] = 1

    let @ a[1] = 2

    call @ swap &a

    return

    proc swap

    let pa=%1

    let @ tmp = $%pa%[0]

    let @ %pa%[0] = $%pa%[1]

    let @ %pa%[1] = $tmp

    return

-----------------------------------------------------------------------

 ( 9) コマンド行

    制御コマンド行

      次の文字列で始まる行は制御コマンド行として処理されます。

      break, breaksw, call, continue, else,

      end, endif, for, foreach, goto,

      if, return, shift, switch, until, while

    ラベル行

      次の文字列もしくは「:」で始まる行はラベル行として処理されます。

      case, default, endsw

    通常コマンド行

      制御コマンド行でもラベル行でもない行は通常コマンド行として

      解釈されます。ComWin のコマンドライン解釈に準じます。

    備考

      @ で始まる行はエコーオン状態でも表示されません。

      DOS との互換性のためにあります。

      「@echo off」、「@REM BAT FOR COMWIN」以外では

      積極的に使用する必要はありません。

-----------------------------------------------------------------------

 (10) 制御コマンド一覧

    ( 1) break

    ( 2) breaksw

    ( 3) call

    ( 4) continue

    ( 5) else

    ( 6) end

    ( 7) endif

    ( 8) for

    ( 9) foreach

    (10) gosub

    (11) goto

    (12) if

    (13) return

    (14) shift

    (15) switch

    (16) then

    (17) until

    (18) while

-----------------------------------------------------------------------

   ( 1) break

      for ループ、while ループ、until ループ、

      foreach ループから脱出します。

      同一ネストの end コマンドの次の行に実行位置が移ります。

      例

      let @ i = 1

      while (1)

          if ($i >= 10) break

          let @ i += 1

      end

      (注) DOS 互換の break コマンドは mode コマンドに吸収されました。

-----------------------------------------------------------------------

   ( 2) breaksw

      switch ブロックから脱出します。

      同一ネストの endsw ラベルの次の行に実行位置が移ります。

      例

      let @ i = 1

      switch (%i%)

          case 0 :

              breaksw

          case 1 :

              breaksw

          default :

              breaksw

      endsw

-----------------------------------------------------------------------

   ( 3) call

      コマンド、プロシジャーを実行します。

      call command [args]

      コマンド実行処理は DOS との互換性のためにあります。

      通常はバッチファイルも含めコマンド名の指定だけで実行可能です。

      call @ proc [args]

      バッチファイル内で定義されたプロシジャーを呼び出します。

      引き数の指定も可能です。

      call コマンドの最大ネストは 5 です。

      (内部で System() API を呼ぶコマンドを利用する場合、

       それ以下でもネストエラーが発生する場合があります。)

      call @ proc は次のように展開されます。

      call @ proc ---> %0 -@:proc

      この規則を応用することで他のファイルの

      プロシジャーを呼び出すことも可能です。

      また、ComWinスクリプトでは -@ オプションは予約されています。

      例

          #----------#

          # main.cws #

          #----------#

          let str1=abc

          let str2=def

          string.cws -@:strcat &str1 &str2

          return

          #------------#

          # string.cws #

          #------------#

          proc strcat

          let pdst=%1

          let psrc=%2

          let @ tmp1 = $%pdst%

          let @ tmp2 = $%psrc%

          let @ %pdst% = %tmp1%%tmp2%

          return

-----------------------------------------------------------------------

   ( 4) continue

      for ループ、while ループ、until ループ、

      foreach ループでループ条件文まで継続します。

      同一ネストの end コマンドの行に実行位置が移ります。

      例

      let @ i = 1

      while ($i <= 100)

          let @ i += 1

          if ($i <= 10) continue

          let @ i += 1

      end

-----------------------------------------------------------------------

   ( 5) else

      if (...) then ... else ... endif ブロックで

      ifの条件文が偽のときに実行されます。

      else if (...) then のように if コマンドを続けることも可能です。

      例

      let @ i = 1

      if ($i == 0) then

          # $i == 0 のとき

      else if ($i == 1) then

          # $i == 1 のとき

      else

          # それ以外のとき

      endif

-----------------------------------------------------------------------

   ( 6) end

      for ループ、while ループ、until ループ、

      foreach ループを終了します。

      ループ条件文が真のときループを継続し、

      偽のとき end コマンドの次の行に実行位置が移ります。

      例

      let @ i = 1

      while ($i <= 10)

          let @ i += 1

      end

-----------------------------------------------------------------------

   ( 7) endif

      if (...) then ... else ... endif ブロックを終了します。

      例

      if not exist \autoexec.bat then

          # \autoexec.bat がなかったら

      endif

-----------------------------------------------------------------------

   ( 8) for

      for (expr1 ; expr2 ; expr3)

          expr1 で初期化を行い、expr2 が真の間 expr3 を繰り返します。

          expr2 が偽の場合、同一ネストの end の次の行に実行位置を移します。

      例

      # SJIS 2バイトコードを列挙します。

      for (i = 0x81; $i <= 0x9F; i++)

          for (j = 0x40; $j <= 0xFC; j++)

              if ($j == 0x7F) continue

              let @ c = :($i * 0x100 + $j)

              echo %c%^^c

          end

      end

      for (i = 0xE0; $i <= 0xFC; i++)

          for (j = 0x40; $j <= 0xFC; j++)

              if ($j == 0x7F) continue

              let @ c = :($i * 0x100 + $j)

              echo %c%^^c

          end

      end

      echo

      return

-----------------------------------------------------------------------

   ( 9) foreach

       foreach env (args1 args2 ...)

           (args1 args2 ...) に該当する文字列を

           ローカル環境変数 env に代入し、

           該当する文字列がなくまるまで繰り返し実行します。

           ワイルドカードも使えます。

       例

       foreach file (*.c *.h)

           echo %file%

       end

-----------------------------------------------------------------------

   (10) gosub

      gosub label

      :label で指定されたラベル行に実行位置を移し、

      return 行で現在の次の行に戻ります。

      ラベル行のフォーマットは ':' + 文字列です。

      例

        # コマンドライン引数を一つずつ表示

        gosub setargs

        let @ i = 0

        while (%i% < %argc%)

            let @ argv = $argv[%i%]

            echo %argv%

            let @ i += 1

        end

        return

        :setargs

        let @ argc = 0

        while ("%0" != "")

            # let @ と使用すると':'等が演算子と解釈されるので不適当

            let argv[%argc%]=%0

            let @ argc += 1

            shift

        end

        return

-----------------------------------------------------------------------

   (11) goto

      goto label

      :label で指定されたラベル行に実行位置を移します。

      ラベル行のフォーマットは ':' + 文字列です。

-----------------------------------------------------------------------

   (12) if

      if condition command

      条件文が真ならばコマンドを実行します。

      条件文に次の書式が使用出来ます。

      if [not] errorlevel [==] <0-255> command

        エラーレベルの判定

      if [not] exist <file> command

        ファイル<file>の存在のチェック

      if [not] string1 == string2 command

        文字列<string1><string2>の比較

      if (expression) command

        計算式<expression>の判定

      また条件式が偽であっても if 行のコマンド部分が then ならば

      then コマンドを実行し if (...) then ... else ... endifブロックに

      入ります。

      (注) エラーレベルは %status% と同じ値をもちます。

      status は直前のコマンドの戻り値です。

      例

      let @ a = 1

      let @ b = 2

      test $a == $b

      if errorlevel 1 echo エラーがあります。

      let file=\config.sys

      if not exist %file% echo %file% が存在しません。

      let str1=ABC

      let str2=DEF

      if "%str1%" == "%str2%" then

          echo %str1% と %str2% は一致します。

      else

          echo %str1% と %str2% は一致しません。

      endif

      let @ i = 1

      if ($i == 1) echo %i% は 1 です。

-----------------------------------------------------------------------

   (13) return

      return number

      number で指定された数値を戻り値としてシステムに返します。

-----------------------------------------------------------------------

   (14) shift

      shift

      引数を左にシフトします。

      shift を実行すると %1 が %0, %2 が %1 となります。

-----------------------------------------------------------------------

   (15) switch

       switch (string)

       string と一致する文字列をもった case ラベルまでジャンプします。

       どの case ラベルにも該当しない場合は、default ラベルがあれば

       そこにジャンプし、ない場合は endsw までジャンプします。

       let string=str0

       switch (%string%)

           case str0 :

               breaksw

           case str1 :

               breaksw

           case str2 :

               breaksw

           default :

               breaksw

        endsw

      「case x :」「default :」の「:」の前にはスペースが必要です。

      スペースを入れない場合は直前の文字列と結合します。

      case a : <--- 正

      case a:  <--- 誤 「a:」と判定します。

-----------------------------------------------------------------------

   (16) then

      if 条件文が真の場合、次の行を実行します。

      偽の場合、同一ネストの else コマンドまでジャンプします。

      then 単独の指定はできません。

      例

      let @ i = 10

      if ($i == 10) then

          echo %i% は 10 です。

      else

          echo %i% は 10 ではありません。

      endif

-----------------------------------------------------------------------

   (17) until

      until (expression)

      expression が真の間ループを実行します。

      最初の1回目だけは expression を実行せずループに入ります。

      例

      let @ i = 10

      until ($i <=10)

          echo %i%

          let @ i += 1

      end

-----------------------------------------------------------------------

   (18) while

      while (expression)

      expression が真の間ループを実行します。

      例

      let @ i = 1

      while ($i <= 10)

          echo %i%

          let @ i += 1

      end

-----------------------------------------------------------------------


EXPORT関数の説明

14.EXPORT関数の説明

    ( 1) Puts, cwPuts (出力関数)

    ( 2) Gets, cwGets (入力関数)

    ( 3) Fputs, cwFputs (ファイル出力関数)

    ( 4) Fgets, cwFgets (ファイル入力関数)

    ( 5) System, cwSystem (実行関数)

    ( 6) Getch, cwGetch (直接入力関数)

    ( 7) Inkey, cwInkey (直接入力関数)

    ( 8) Fwrite, cwFwrite (バイナリ出力関数)

    ( 9) Fread, cwFread (バイナリ入力関数)

    (10) GetComWinLong (情報関数)

    (11) MakeArgument (引き数作成関数)

    (12) cwPutenv (環境変数設定関数)

    (13) cwGetenv (環境変数取得関数)

    (14) cwFprintf (書式付出力関数)

    (15) cwFputsW (Unicode出力関数)

    (16) cwFgetsW (Unicode入力関数)

    (17) CallCommand(仮称) (内部コマンド提供関数)

    (18) CallInterpreter(仮称) (コマンド解釈提供関数)

    (19) CallScript(仮称) (スクリプト提供関数)

    (20) CallCommand (端末用コマンド処理関数)

-----------------------------------------------------------------------

 ( 1) Puts, cwPuts (出力関数)

    関数名 Puts, cwPuts

        LONG FAR PASCAL Puts(LPSTR lpStr); // プロトタイプ

        LONG FAR PASCAL cwPuts(LPSTR lpStr); // プロトタイプ

    機能   ASCIIZ文字列 lpStr をComWinのクライアント領域に出力します。

    引数 lpStr 出力する文字列

    戻り値 正常、出力した文字数

           エラー、-1

    詳細は hello.c sample1.c を参照してください。

-----------------------------------------------------------------------

 ( 2) Gets, cwGets (入力関数)

    関数名 Gets, cwGets

        LPSTR FAR PASCAL Gets(LPSTR lpStr); // プロトタイプ

        LPSTR FAR PASCAL cwGet(LPSTR lpStr); // プロトタイプ

    機能  ComWin のクライアント領域に入力された文字列を取得します。

    引数  lpStr 入力する文字列のためのバッファ

    戻り値 正常、lpStr

           エラー、NULL

    注意

        Gets は ANSI C の正式な関数 gets に準拠しているのですが、

        呼ばれた側がバッファー長を管理できないという致命的な

        仕様ミスがありますので、不特定多数にリリースするソフトには

        使わないほうが無難だと思われます。Fgets で代用してください。

    詳細は sample1.c を参照してください。

-----------------------------------------------------------------------

 ( 3) Fputs, cwFputs (ファイル出力関数)

    関数名 Fputs, cwFputs

        LONG FAR PASCAL Fputs(LPSTR lpStr, LPVOID lpInfo);

        LONG FAR PASCAL cwFputs(LPSTR lpStr, LPVOID lpInfo);

    機能 ファイルに文字列を出力します。

    引数 lpStr 出力する文字列

         lpInfo ファイル情報

    戻り値 正常、出力した文字数

           エラー、-1

    lpInfo = NULL       の時、標準出力

    lpInfo = (LPVOID)-1 の時、標準エラー出力

    cwFputsW は Unicode 用のAPIです。

    詳細は sample1.c を参照してください。

-----------------------------------------------------------------------

 ( 4) Fgets, cwFgets (ファイル入力関数)

    関数名 Fgets, cwFgets

        LPSTR FAR PASCAL Fgets(LPSTR lpStr, LONG lSize, LPVOID lsInfo);

        LPSTR FAR PASCAL cwFgets(LPSTR lpStr, LONG lSize, LPVOID lpInfo);

    機能 ファイルから文字列を入力します。

    引数 lpStr  入力する文字列のためのバッファ

         lSize  バッファサイズ

         lpInfo ファイル情報

    戻り値 正常、lpszS

           エラー、NULL

    lpInfo = NULL       の時、標準入力

    lpInfo = (LPVOID)-1 の時、標準エラー入力

-----------------------------------------------------------------------

 ( 5) System, cwSystem (実行関数)

    関数名 System, cwSystem

        LONG FAR PASCAL System(LPSTR lpszCommand);

        LONG FAR PASCAL cwSystem(LPSTR lpszCommand);

    機能 ComWin のサービスを用いてコマンドを実行します。

    引数 lpszCommand コマンド文字列

    戻り値 各コマンドの戻り値に依存。

-----------------------------------------------------------------------

 ( 6)  Getch, cwGetch (直接入力関数)

    関数名 Getch, cwGetch

        LONG FAR PASCAL Getch(void);

        LONG FAR PASCAL cwGetch(void);

    機能 端末から直接入力を待ちます。(エコーバックなし)

    引数 なし

    戻り値 正常、仮想キーコード

           エラー、0

    仮想キーコードは次のような構造になっています。

    上位16ビット、0x0100(=WM_KEYDOWN) または 0x0102(=WM_CHAR)

    下位16ビット、上位16ビットのメッセージに対応したキーコード

    詳しくは SDK windows.h を参照してください。

    Getch コマンドのバグをフィックスした結果、

    キーコードの値が Version 2.80 より変わりました。

    以前の Version に依存したプログラムを利用する場合は

    comwin.ini [etc] に Getch=230 と記述してください。

       cwmore コマンド等が該当します。

    バージョンにより、Getch=230,Getch=271,Getch=280(デフォルト)が選べます。

    また、このオプションは 96/04/01 以降は無効になる可能性もあります。

-----------------------------------------------------------------------

 ( 7)  Inkey, cwInkey (直接入力関数)

    関数名 Inkey, cwInkey

        LONG FAR PASCAL Inkey(void);

        LONG FAR PASCAL cwInkey(void);

    機能 端末から直接入力をチェックしあれば

         仮想キーコードを返します。(エコーバックなし)

    引数 なし

    戻り値 仮想キーコードまたは 0

    仮想キーコードは次のような構造になっています。

    上位16ビット、0x0100(=WM_KEYDOWN) または 0x0102(=WM_CHAR)

    下位16ビット、上位16ビットのメッセージに対応したキーコード

    詳しくは SDK windows.h を参照してください。

-----------------------------------------------------------------------

 ( 8)  Fwrite, cwFwrite (バイナリ出力関数)

    関数名 Fwrite, cwFwrite

        LONG FAR PASCAL Fwrite(LPVOID lpObject, LONG lSize,

                               LONG lCount, LPVOID lpInfo);

        LONG FAR PASCAL cwFwrite(LPVOID lpObject, LONG lSize,

                               LONG lCount, LPVOID lpInfo);

    機能 バイナリデータを端末に送る。

    引数 lpObject 送出するデータへのポインタ

         lSize    オブジェクトのサイズ

         lCount   オブジェクトの数

         lpInfo   ファイル構造体へのポインタ

                  NULL       の時、標準出力

                  (LPVOID)-1 の時、標準エラー出力

    戻り値 出力したオブジェクトの数

    注意 comwinx.exe はバイナリ入出力を正式にサポートしていないので

         正常に動作しません。

-----------------------------------------------------------------------

 ( 9)  Fread, cwFread (バイナリ入力関数)

    関数名 Fread, cwFread

        LONG FAR PASCAL Fread(LPVOID lpObject, LONG lSize,

                              LONG lCount, LPVOID lpInfo);

        LONG FAR PASCAL cwFread(LPVOID lpObject, LONG lSize,

                              LONG lCount, LPVOID lpInfo);

    機能 バイナリデータを端末から取得する。

    引数 lpObject 取得するデータへのポインタ

         lSize    オブジェクトのサイズ

         lCount   オブジェクトの数

         lpInfo   ファイル構造体へのポインタ

                  NULL       の時、標準入力

                  (LPVOID)-1 の時、標準エラー入力

    戻り値 取得したオブジェクトの数

    注意 comwinx.exe はバイナリ入出力を正式にサポートしていないので

         正常に動作しません。

-----------------------------------------------------------------------

 (10)  GetComWinLong (情報関数)

    関数名 GetComWinLong

        DWORD FAR PASCAL GetComWinLong(DWORD dwID, DWORD dwData);

    機能 ComWin システムについての諸情報を取得します。

    引数 dwID   情報番号

         dwData 情報番号に対応する32bit値

    戻り値 情報

    情報番号 0 ... comwin.dll のバージョン番号を取得する。

    例

        lVer = GetComWinLong(0, 0);

        HIWORD(lVer) : バージョン番号

    情報番号 1 ... 端末の環境変数データを取得する。

    例

        lpEnv = (LPSTR)GetComWinLong(1, 0);

    環境変数領域には "env1=value1\0env2=value2\0...envz=valuez\0\0"

    の形式で環境変数が格納されています。

    端末の環境変数領域が破壊されるとシステムに重大な障害を及ぼしますので、

    環境変数を書き込む場合には cwPutenv を使用してください。

    情報番号 2 ... 端末のウィンドウハンドルを取得する。

    例

        hwnd = (HWND)GetComWinLong(2, 0);

    情報番号 3 ... メッセージパケットの入出力を行う。

    例

        CW_S_CONSOLE_INFO ci;

        memset(&ci, 0, sizeof(ci));f

        ci.lMessage = CW_M_CONSOLE_INFO;

        ci.lSize = sizeof(ci);

        ci.lMode = CW_MODE_GET;

        GetComWinLong(3, (LONG)(LPLONG)&ci);

    詳細は sample1.c を参照してください。

-----------------------------------------------------------------------

 (11) MakeArgument (引き数作成関数)

    関数名 MakeArgument

        int FAR PASCAL MakeArgument(HANDLE hInstance,

                                    LPSTR lpszAppName,

                                    LPSTR lpszCmdParam,

                                    LPINT lpnArgv,

                                    LPSTR lpszBuffer,

                                    int cbBufSize);       // プロトタイプ

    機能 WinMain関数の第３引数(lpszCmdParam)から

         main関数の argc, argv を作成。

    引数 hInstance    モジュールのインスタンス(WinMainの第１引数)

         lpszAppName  モジュール名

         lpszCmdParam コマンドパラメータ(WinMainの第３引数)

         lpnArgv      下述のlpszBufferに格納される各引数の位置

         lpszBuffer   コマンドパラメータを格納する作業バッファ

                      ("param1\0param2\0param3\0....\paramx\0\0"

                      の形式をとる)

         cbBufSize    作業バッファのサイズ

    戻り値 コマンドパラメーターの数

    注意

      コマンドパラメータにはモジュール名は含みません。

      モジュール名が含まれている場合は hInstance = NULL として

      呼び出してください。

    備考

      自分で作っていうのもなんですが、ややこしい仕様の関数です。

      でも、FARポインタNEARポインタを駆使して将来的にも仕様変更を

      せずにすむ仕様といえばこうなってしまいました。

      逆に考えれば、WinMainのコマンドパラメーターの形式が,

      引数の数(argc)、引数の配列(argv)の形式を取らずに、

      単純な文字列形式を取っているのは、この辺の事情があるのかもしれません。

    詳細は sample1.c を参照してください。

-----------------------------------------------------------------------

 (12) cwPutenv (環境変数設定関数)

    関数名 cwPutenv

        LONG FAR PASCAL cwPutenv(LPSTR lpEnv);

    機能 端末タスクの環境変数を設定します。

    引数 lpEnv 設定する環境変数文字列

               環境変数文字列は次の書式を取ります。

               env=value

    戻り値 正常 0、エラー 1

    注) 変更されるのは端末タスクの環境変数です。

        自タスクの環境変数を変更したい場合は

        putenv 等の標準ライブラリ関数を利用してください。

-----------------------------------------------------------------------

 (13) cwGetenv (環境変数取得関数)

    関数名 cwGetenv

        LPSTR FAR PASCAL cwGetenv(LPSTR lpEnv);

    機能 端末タスクの環境変数を取得します。

    引数 lpEnv 取得する環境変数

    戻り値 正常 環境変数のアドレス、エラー NULL

    注) 参照されるのは端末タスクの環境変数です。

        自タスクの環境変数を参照したい場合は

        getenv 等の標準ライブラリ関数を利用してください。

-----------------------------------------------------------------------

 (14) cwFprintf (書式付出力関数)

    関数名 cwFprintf

        LONG FAR CDECL cwFprintf(LPVOID lpInfo, LPSTR lpStr, ...);

    機能 書式付きで文字列を出力する。

    引数 lpInfo  ファイル情報

                 NULL のとき標準出力、(LPVOID)-1 のときエラー出力。

                 その他のアドレスは予約

         lpStr   出力する書式付きの文字列

    戻値 出力した文字数、エラー時は -1

    例

        cwFprintf(NULL, "(x, y) = (%d, %d)\n", x, y);

    注意事項

        出力できる文字数は 1024 文字までです。

        cwFprintf を利用する場合、モジュール定義ファイルに

        IMPORTS comwin._cwFprintf と記述してください。

        呼び出し順序が CDECL 形式なので

        関数名の前に '_' (アンダースコア)が必要です。

        cwFprintf はデバッグサービスAPIとして提供しています。

        正式リリース用のモジュール内で使用することはお薦めできません。

-----------------------------------------------------------------------

 (15) cwFputsW (Unicode出力関数)

    関数名 cwFputsW

        LONG FAR PASCAL cwFputsW(LPWSTR lpStr, LPVOID lpInfo);

    機能 ファイルに Unicode文字列を出力します。

    引数 lpStr 出力する文字列

         lpInfo ファイル情報

    戻り値 正常、出力した文字数

           エラー、-1

    lpInfo = NULL       の時、標準出力

    lpInfo = (LPVOID)-1 の時、標準エラー出力

-----------------------------------------------------------------------

 (16) cwFgetsW (Unicode入力関数)

    関数名 cwFgetsW

        LPWSTR FAR PASCAL cwFgets(LPWSTR lpStr, LONG lSize, LPVOID lpInfo);

    機能 ファイルから Unicode文字列を入力します。

    引数 lpStr  入力する文字列のためのバッファ

         lSize  バッファサイズ

         lpInfo ファイル情報

    戻り値 正常、lpszS

           エラー、NULL

    lpInfo = NULL       の時、標準入力

    lpInfo = (LPVOID)-1 の時、標準エラー入力

-----------------------------------------------------------------------

 (17) CallCommand(仮称) (内部コマンド提供関数)

    関数名 CallCommand(戻り値、引数の型が一致していれば、関数名は任意)

        BOOL FAR PASCAL CallCommand(FARPROC FAR *lpfnProc,

                                    LPSTR lpszCmdParam,

                                    LPLONG lpReturn);   // プロトタイプ

    機能 ComWinから呼び出される内部コマンドを提供し、

         出力結果をComWinに表示します。

    引数 lpfnProc     ComWinから受け取る入出力関数へのアドレスの配列

                      現在次の10の関数が定義されています。

                      Puts        = lpfnProc[0]; /* 以下 Ver 1.80 以降 */

                      Gets        = lpfnPorc[1];

                      Fputs       = lpfnProc[2];

                      Fgets       = lpfnProc[3];

                      System      = lpfnProc[4];

                      CallConsole = lpfnProc[5];

                      Getch       = lpfnProc[6]; /* 以下 Ver 2.30 以降 */

                      Inkey       = lpfnProc[7];

                      Fwrite      = lpfnProc[8]; /* 以下 Ver 2.60 以降 */

                      Fread       = lpfnPorc[9];

         lpszCmdParam コマンドパラメータ

                      (WinMainの第３引数と同じですが、

                       コマンド名もはいります。)

         lpReturn[0]  各コマンドのエラー値

    戻り値 TRUE コマンドをDLL内部で処理した。

           FALSE コマンドをDLL内部で処理せずに次のDLLへスルーする。

    備考 この関数をEXPORTしたDLLはcomwins.dllなどの他のDLLと併用できます。

         将来的には各DLLがサポートしているコマンドを管理する必要がでてくると

         思われるので、次の機能ももたせてください。

         面倒な場合は無視しても特に問題はありません。

         (comwins.dllはこの機能を持っています。)

         lpReturn[0] == 0, lpszCmdParan[0] == 0 の場合は

         サポートしているコマンド名を1つだけ

         lpszCmdParamにコピーしてTRUEを返してください。

         TRUEを返している間はComWinは次のコマンド名を要求してきます。

         コマンド名をすべて返し終わったら FALSE を返してください。

         (この機能は現在 help コマンドで使われています。)

         将来の拡張性のため以下の処理をしてください。

         switch (lpReturn[0]) {

             case -1:

                 /* メイン処理 */

                 break;

             case 0:

                 /* ヘルプ処理 */

                 break;

             default:

                 /* 予約 */

                 break;

          }

    呼び出し例

        unix.dll で command をEXPORTしている場合。

        comwin.ini の [CommandDll]に次の記述を加える。

        [CommandDll]

        a.dll=b                ;他のcommand.dll

        unix.dll=command

        c.dll=d                ;他のcommand.dll

        先に書かれたcommand.dllのコマンドが優先されます。

    詳細は sample3.c を参照してください。

-----------------------------------------------------------------------

 (18) CallInterpreter(仮称) (コマンド解釈提供関数)

    関数名 CallInterpreter(戻り値、引数の型が一致していれば、関数名は任意)

        BOOL FAR PASCAL CallInterpreter(FARPROC FAR *lpfnProc,

                                        LPSTR lpszCmdParam,

                                        LPLONG lpReturn);   // プロトタイプ

    機能 ComWinから渡された文字列を

         個々のコマンドに分解した文字列にして返します。

    引数 lpfnProc     ComWinから受け取る入出力関数へのアドレスの配列

                      現在次の7つの関数が定義されています。

                      Puts   = lpfnProc[0];

                      Gets   = lpfnPorc[1];

                      Fputs  = lpfnProc[2];

                      Fgets  = lpfnProc[3];

                      System = lpfnProc[4];

                      (未定義) lpfnProc[5];

                      Getch  = lpfnProc[6];

                      Inkey  = lpfnProc[7];

                      (CallInterpreter 内ではデバッグ時以外は不要です。)

         lpszCmdParam コマンド文字列

                      (WinMainの第３引数と同じですが、

                       コマンド名もはいります。)

         lpReturn[0]  分解したコマンド群へのポインター

                      コマンド群は次の形式で返してください。

                      "cmd0\0cmd1\0cmd2\0...cmdx\0\0"

    戻り値 TRUE  成功

           FALSE  エラー発生

    備考 この関数をEXPORTしたDLLはコマンド解釈の性格上

         一つしか使用できません。

         lpReturn[0] == 0 && lpszCmdParan[0] == 0 の場合

         コマンド群の領域が GlobalAlloc 等で確保されていれば、

         開放してください。

         将来の拡張性のため以下の処理をしてください。

         switch (lpReturn[0]) {

             case -1:

                 /* メイン処理 */

                 break;

             case 0:

                 /* 解放処理 */

                 break;

             default:

                 /* 予約 */

                 break;

          }

    呼び出し例

        unix.dll で intepreter をEXPORTしている場合。

        comwin.ini の [InterpreterDll]に次の記述を加える。

        [InterpreterDll]

        unix.dll=interpreter

        一番最初に書かれたinterpreter.dllの関数が優先されます。

      詳細は sample3.c を参照してください。

-----------------------------------------------------------------------

 (19) CallScript(仮称) (スクリプト提供関数)

    関数名 CallScript(戻り値、引数の型が一致していれば、関数名は任意)

        BOOL FAR PASCAL CallScript(FARPROC FAR *lpfnProc,

                                   LPSTR lpszCmdParam,

                                   LPLONG lpReturn);   // プロトタイプ

    機能 ComWinから提供されたファイルをスクリプト解釈し、実行します。

    引数 lpfnProc     ComWinから受け取る入出力関数へのアドレスの配列

                      現在次の５つの関数が定義されています。

                      Puts   = lpfnProc[0];

                      Gets   = lpfnPorc[1];

                      Fputs  = lpfnProc[2];

                      Fgets  = lpfnProc[3];

                      System = lpfnProc[4];

                      (未定義) lpfnProc[5];

                      Getch  = lpfnProc[6];

                      Inkey  = lpfnProc[7];

         lpszCmdParam スクリプトファイル+パラメータ

                      (フルパスでスクリプトファイルが送られます。)

         lpReturn[0]      各コマンドのエラー値

    戻り値 TRUE コマンドをDLL内部で処理した。

           FALSE コマンドをDLL内部で処理せずに次のDLLへスルーする。

    備考 この関数をEXPORTしたDLLはcomwins.dllなどの他のDLLと併用できます。

         各スクリプトDLLは拡張子によって自分の処理するファイルを管理します。

         (拡張子によるファイルの分類は NT 等のロングファイルネームでも

          行われるので一番妥当な方法です。)

         lpReturn[0] == 0 && lpszCmdParan[0] == 0 の場合は

         サポートしている拡張子群のポインタを lpReturn[0] に

         いれて返してください。

         拡張子群の形式は "ex0\0ex1\0...ex9\0\0" という形式です。

         将来の拡張性のため以下の処理をしてください。

         switch (lpReturn[0]) {

             case -1:

                 /* メイン処理 */

                 break;

             case 0:

                 /* ヘルプ処理 */

                 break;

             default:

                 /* 予約 */

                 break;

          }

    呼び出し例

        macro.dll で macro をEXPORTしている場合。

        comwin.ini の [ScriptDll]に次の記述を加える。

        [ScriptDll]

        a.dll=b                ;他のscript.dll

        macro.dll=macro

        c.dll=d                ;他のscript.dll

        先に書かれたscript.dllのコマンドが優先されます。

    詳細は sample3.c を参照してください。

-----------------------------------------------------------------------

 (20) CallCommand (端末用コマンド処理関数)

    関数名 CallCommand

        BOOL FAR PASCAL CallCommand(FARPROC FAR *lpfnProc,

                                    LPSTR lpszCmdParam,

                                    LPLONG lpReturn);   // プロトタイプ

    機能 端末側に入力された文字列を comwin.dll を渡す。

    引数 lpfnProc     comwin.dllに提供する入出力関数へのアドレスの配列

                      現在次の10つの関数が定義されています。

                      lpfnProc[0] = LocalPuts;

                      lpfnPorc[1] = LocalGets;

                      lpfnProc[2] = LocalFputs;

                      lpfnProc[3] = LocalFgets;

                      lpfnProc[4] = LocalSystem;

                      lpfnProc[5] = LocalCallCommand;

                      lpfnProc[6] = LocalGetch;

                      lpfnProc[7] = LocalInkey;

                      lpfnProc[8] = LocalFwrite;

                      lpfnProc[9] = LocalFread;

         lpszCmdParam コマンド文字列

         lpReturn[0]  各コマンドのエラー値

    戻り値 TRUE コマンドを正常に処理した。

           FALSE コマンドの処理中に異常が発生した。

    備考

           comwin.dll は内部で複雑なスケジューリング、プロセス管理を

           行っている都合上に明示的な登録、開放処理を行わないと

           メモリから開放されない部分が出てきます。

           [明示的な登録]

           CW_S_CONSOLE_INFO ci; /* メッセージパケット */

           memset(&ci, 0, sizeof(ci));

           ci.lMessage = CW_M_CONSOLE_INFO;

           ci.lSize = sizeof(ci);

           ci.lMode = CW_MODE_INIT; /* 初期化 */

           lpszCmdParam[0] = 0;

           CallCommand(lpfnProc, lpszCmdParam, (LPLONG)&ci);

           [明示的な開放]

           CW_S_CONSOLE_INFO ci; /* メッセージパケット */

           memset(&ci, 0, sizeof(ci));

           ci.lMessage = CW_M_CONSOLE_INFO;

           ci.lSize = sizeof(ci);

           ci.lMode = CW_MODE_CLEAR; /* 解放 */

           lpszCmdParam[0] = 0;

           CallCommand(lpfnProc, lpszCmdParam, (LPLONG)&ci);

           通常の呼び出し

           lpReturn[0] = -1;

           CallCommand(lpfnProc, lpszCmdParam, lpReturn);

    詳細は sample5.c を参照してください。

-----------------------------------------------------------------------

   (関数補足) メッセージパケットについて

    メッセージパケットとは端末側とコマンド側で情報のやりとりを

    行うために考案されたデーターの受け渡し方法です。

    過去との互換性を重視し、将来への拡張が可能な構造になっています。

    メッセージパケットは次の形式をとります。

    struct PACKET {

        LONG lMessage; /* 必須 メッセージ番号を設定する */

        LONG lSize /* 必須 パケットのサイズを設定する */

        ... /* 各メッセージに対応して自由に設定する */

    }

    CallCommand の第３引数、GetComWinLong の第２引数に使われます。

    現在、comwin.h で次のように宣言されています。

        /* Message */

        #define CW_M_EXEC          0xFFFFFFFF

        #define CW_M_HELP          0x00000000

        #define CW_M_CONSOLE_INFO  0x00010001

        #define CW_M_ISATTY        0x00010002

        #define CW_M_UNICODE_ENTRY 0x00010003

        #define CW_M_USER_FIRST    0x10000000

        #define CW_M_USER_LAST     0x7FFFFFFF

        /*

            0x00000001 - 0x0000FFFF reserved

            0x00010002 - 0x0FFFFFFF system reserved

            0x10000000 - 0x7FFFFFFF user area

            0x80000000 - 0xFFFFFFFE reserved

         */

         /* Mode */

         #define CW_MODE_CLEAR 0

         #define CW_MODE_INIT  1

         #define CW_MODE_SET   2

         #define CW_MODE_GET   3

         /* Message Structure */

         typedef struct CW_S_CONSOLE_INFO

                        CW_S_CONSOLE_INFO,

                FAR *LP_CW_S_CONSOLE_INFO;

         struct CW_S_CONSOLE_INFO {

             LONG  lMessage;    // Message Number (= CW_M_CONSOLE_INFO)

             LONG  lSize;       // Structure size (= sizeof(CW_S_CONSOLE_INFO))

             LONG  lMode;       // Calling mode (= CW_MODE_XXXX)

             LONG  lFuncMax;    // Max Function Count ( >= 6)

             LONG  lBufMax;     // Max Buffer Size ( for Gets API etc)

             DWORD hwnd;        // Window Handle of Console

             LONG  lColumns;    // Columns of Console

             LONG  lLines;      // Lines of Console

             LONG  lWidth;      // Width of Console

             LONG  lHeight;     // Height of Console

        };

        typedef struct CW_S_ISATTY

                       CW_S_ISATTY,

               FAR *LP_CW_S_ISATTY;

        struct CW_S_ISATTY {

            LONG  lMessage;    // Message Number (= CW_M_ISATTY)

            LONG  lSize;       // Structure Size (= sizeof(CW_S_ISATTY))

            LONG  lMode;       // Calling Mode (= CW_MODE_GET)

            LONG  lStdIn;      // TRUE, if StdIn is atty.

            LONG  lStdOut;     // TRUE, if StdOut is atty.

            LONG  lStdErrIn;   // TRUE, if StdErrIn is atty.

            LONG  lStdErrOut;  // TRUE, if StdErrOut is atty.

        };

        /* Message Structure */

        typedef struct CW_S_UNICODE_ENTRY

                       CW_S_UNICODE_ENTRY,

               FAR *LP_CW_S_UNICODE_ENTRY;

        struct CW_S_UNICODE_ENTRY {

            LONG  lMessage;    // Message Number (= CW_M_UNICODE_ENTRY)

            LONG  lSize;       // Structure size

            LONG  lMode;       // Calling mode (= CW_MODE_XXXX)

            LONG  lFuncMax;    // Max Function Count ( >= 6)

            LONG  lBufMax;     // Max Buffer Size ( Not used)

        };

-----------------------------------------------------------------------


謝辞

15.謝辞

    ComWin [かむゐん] Ver. 3.51 の制作にあたって次の方に感謝します。

        正規ユーザー登録してくださった皆さん、

        貴重な意見をくださった皆さん、

        家族。

    特に IRUKA氏、魔人ぶう氏、保坂氏、y.ohm氏、

         けろっぴ氏、おと氏、こば氏、O.Kimura氏、

         久下氏、H.Kurokawa氏、柳井氏、shun氏、

         THo氏、山本氏、河童の三郎氏、石井氏には

    ComWin 用の便利なツール群を提供していただきまして、

    誠に感謝しております。

    ツール群は Nifty FWINAL, FWINNT, FGALTS に公開されております。

    [資料 ComWin ツール群] (96/12/05 現在)

    NIFTY-Serve FILEFIND (COMWIN or COMWIN32 or TOOLMAN) で検索しました。

    1 SGQ00310 96/12/02  280488 B TMEDT137.LZH Unicodeエディタ ToolMan

    2 SGQ00310 96/12/02  280645 B TMEDT136.LZH Unicodeエディタ ToolMan

    3 SGQ00310 96/10/28  272412 B TMEDT135.LZH Unicode 編集,印刷,ToolMan

    4 SGQ00310 96/10/19  268294 B TMEDT134.LZH 多国語,Unicode編集可ToolMan

    5 SGQ00310 96/10/13  386135 B COMWP332.LZH スーパーコンソールComWin32

    6 SGQ00310 96/10/13  288763 B COMW0332.LZH コマンドマネージャComWin16

    7 SGQ00310 96/10/05  262566 B TMEDT131.LZH Win95で動くUnicodeエディタ

    8 SGQ00310 96/08/20  384407 B COMWP322.LZH ｽｰﾊﾟｰｺﾝｿｰﾙComWin32

    9 SGQ00310 96/06/06  289216 B CWUTL110.LZH ﾂｰﾙﾏﾝ UNIX Like ツール集

   10 SGQ00310 96/06/06  273999 B CWADD110.LZH ﾂｰﾙﾏﾝ アドオンツール集

   11 SGQ00310 96/06/05   23877 B CWWB0110.LZH WinBatchEhでComWinを動かす

   12 QGB01167 96/05/02   10408 B CLHA    .LZH CHA for ComWin32

   13 QZE03533 96/03/27   21090 B CWMR3223.LZH More for ComWin32 V2.3

   14 QZE03533 96/01/22   19092 B CWMR3210.LZH More command for ComWin32

   15 SGQ00310 95/12/01  176054 B COMWS270.LZH ComWin 2.70 最小パック

   16 SGQ00310 95/11/20  308811 B TMEDT090.LZH Win95用 UNIX tools エディタ

   17 SGR00045 95/11/15   27708 B CCAL01  .LZH 計算UTY for ComWin / Delphi

   18 SGQ00310 95/10/05    9175 B TULCW100.LZH UNIX tools ComWinアダプタ

   19 SGQ00310 95/10/04  252331 B TOOLD100.LZH UNIX tools V1.00 ツールマン

   20 SGQ00310 95/10/04   17280 B TULNT100.LZH UNIX tools ｺﾝｿｰﾙｱﾀﾞﾌﾟﾀ

   21 SGQ00310 95/10/04    9175 B TULCW100.LZH UNIX tools ComWin アダプタ

   22 KHB16456 95/09/15   13421 B DINFW101.LZH 週間ｲﾍﾞﾝﾄｶﾚﾝﾀﾞｰ for ComWin

   23 QZE03533 95/09/10    7743 B CWMOR121.LZH MORE for ComWin V1.21

   24 PXG02372 95/09/08   27688 B XCD_140 .LZH ComWin拡張DLL XCD + MV V1.4

   25 SGQ00310 95/09/04    9110 B GRLD_100.LZH 汎用画像ローダＧＬ/ComWin

   26 SGQ00310 95/08/29   67665 B CLIPF100.LZH ｸﾘｯﾌﾟﾎﾞｰﾄﾞ･ﾌｨﾙﾀｰ･ﾂｰﾙ

   27 SGQ00310 95/08/29   49880 B CWGREP13.LZH 文字列検索ﾂｰﾙ CW-Grep

   28 SGQ00310 95/08/29   48107 B WNDST103.LZH ｳｨﾝﾄﾞｳ情報表示ﾂｰﾙ

   29 SGQ00310 95/08/24   66784 B MSQ_107D.LZH モジュール構造作図ﾂｰﾙ1.07

   30 PXG02372 95/08/14    8767 B TREE110 .LZH TREE for ComWin Ver1.10

   31 PXG02372 95/08/14   13019 B TR32_110.LZH TREE for ComWin32 1.10

   32 SGQ00310 95/08/04  111415 B XTR150EC.LZH ﾃｷｽﾄﾂｰﾙ XTR/ComWin

   33 PXI05647 95/07/31    4310 B PR101   .LZH PR.EXE Ver.1.01

   34 SGR01060 95/06/30   29501 B DFRUN100.LZH dfrun for ComWin 2.30

   35 SGQ00310 95/06/18  146627 B COMWB230.LZH ComWin Ver. 2.30β

   36 SGQ00310 95/04/16  169472 B CSED_118.LZH GNU sed 1.18 / Win

   37 SGQ00310 95/04/16  672384 B CGAWK215.LZH GNU awk 2.15 / Win

   38 SGQ00310 95/04/16  130176 B CPATC210.LZH GNU patch 2.1 / Win

   39 SGQ00310 95/04/16  220800 B CGREP200.LZH GNU grep 2.0 / Win

   40 SGQ00310 95/04/07   17664 B COMW32UT.LZH ComWin32UT+32bitゴミ箱

   41 PXI05647 95/04/06    5279 B FINDF100.LZH ComWin用ﾌｧｲﾙ検索ﾌﾟﾛｸﾞﾗﾑ

   42 GHC01120 95/03/21   15307 B CWARC100.LZH ComWin用ｱｰｶｲﾌﾞ処理 DLL

   43 PXU04517 95/03/16    7506 B FILECHK .EXE ﾌｧｲﾙ詳細表示 for ComWin

   44 SGQ00310 95/03/08  604544 B TOOLW001.LZH UNIX tools (暫定版)

   45 KFB02700 95/02/25    5417 B CLIPASTE.LZH ComWinのI/Oをｸﾘｯﾌﾟﾎﾞｰﾄﾞに

   46 MHA03413 95/02/12   12289 B CWWAV110.LZH ComWinでWave&Beepを再生

   47 MHA03413 95/02/12   12289 B CWWAV110.LZH ComWinでWave&Beepを再生 Ver

   48 GHC01120 95/02/03   10068 B CWSX010 .LZH ComWin用スクリプト拡張DLL

   49 HBB01117 95/01/28   27310 B SPLIT100.LZH split/merge for COMWIN

   50 SGQ00310 95/01/25    9216 B CWGREP12.LZH パイプ機能付き GREP要ComWin

   51 SGQ00310 95/01/25    9088 B CWGREP11.LZH パイプが使えるGREP要ComWin

   52 PXG02372 95/01/21    7876 B TSC100  .LZH タイムスタンプ変更 FOR COMW

   53 PXG02372 95/01/21    7841 B ATTRB110.LZH ATTRIB FOR COMWIN

   54 PXI01263 95/01/12    6349 B AL100   .LZH ﾏｸﾛ展開ﾗﾝﾁｬ for ComWin V1

   55 SGQ00310 94/12/27    4864 B WNDST100.LZH ウィンドウ情報をツリー表示

   56 MAG00562 94/12/12   92762 B WLS     .LZH ls.exe for Windows(comwin)

   57 SGQ00310 94/12/08    5632 B DBCWIN09.LZH 秀のデバッグ文をCOMWINに

   58 MAG00562 94/12/05   22485 B GDF     .LZH ﾃﾞｨｽｸ容量表示 for COMWIN

   59 MAG00562 94/12/05   25950 B WHERE   .LZH ﾌｧｲﾙ検索 for Windows(comwin

   60 MAG00562 94/12/05   24970 B DUMP    .LZH dump for Windows(comwin)

   61 MAG00562 94/12/05   19657 B WINLHA  .LZH LHA for Windows(comwin)

   62 MAG00562 94/11/20   32174 B WUNZIP  .LZH UNZIP for Windows(COMWIN)

   63 MAG00562 94/11/20   52271 B COMW32AD.LZH COMWIN用 32bit化アダプター

   64 SGQ00310 94/08/05    2688 B COMWE130.LZH ComWin用拡張ｺﾏﾝﾄﾞDLL

    1 SGQ00310 96/12/02  280645 B TMEDT136.LZH Unicodeエディタ ToolMan

    2 SGQ00310 96/12/02  280488 B TMEDT137.LZH Unicodeエディタ ToolMan

    3 SGQ00310 96/10/21  268294 B TMEDT134.LZH Win95で動くUnicodeエディタ

    4 SGQ00310 96/10/13  386135 B COMWP332.LZH スーパーコンソールComWin32

    5 SGQ00310 96/10/05  262566 B TMEDT131.LZH Win95で動くUnicodeエディタ

    6 SGQ00310 96/08/21  249975 B TMEDT122.LZH マルチコード変身エディタ

    7 KFB02700 96/08/10  126813 B WBCMD110.LZH ComWin32用WinBatchEh風ｺﾏﾝﾄﾞ

    8 SDI00862 96/08/09  161802 B TMEDT104.LZH ｺﾝｿｰﾙｴﾃﾞｨﾀ[ツールマン]V1.04

    9 SGQ00310 96/08/04  234149 B TMEDT121.LZH マルティコードエディタV1.21

   10 SGQ00310 96/07/21  229069 B TMEDT120.LZH 通信+HTML+エディターV1.20

   11 KFB02700 96/07/14  102149 B WBCMD060.LZH ComWin32用WinBatchEh風ｺﾏﾝﾄﾞ

   12 SGQ00310 96/07/05  213841 B TMEDT114.LZH ツールマンV1.14 HTML支援

   13 SGQ00310 96/06/22  203142 B TMEDT112.LZH ツールマンエディター V1.12

   14 SGQ00310 96/05/24  187790 B TMEDT106.LZH ツールマンエディターV1.06

   15 SGQ00310 96/05/14  182224 B TMEDT105.LZH ツールマンエディターV1.05

   16 SGQ00310 96/05/06  161802 B TMEDT104.LZH ツールマンエディターV1.04

   17 SGQ00310 96/04/16   22389 B CWWB0103.LZH WinBatchEhでComWinを動かす

   18 SGQ00310 96/04/08  363362 B COMWP302.LZH ComWin32でｼｪﾙﾌﾟﾛｸﾞﾗﾐﾝｸﾞ

   19 SGQ00310 96/03/04  297742 B COMW0300.LZH csh相当ｽｸﾘﾌﾟﾄ環境ComWin

   20 SGQ00310 95/11/20  308811 B TMEDT090.LZH ツールマンエディター

   21 SGQ00310 95/09/07  288296 B COMW0252.LZH Winで「printf」ComWin

   22 SGQ00310 95/08/18  280847 B COMW0251.LZH DOSソフトも動く!!ComWin

   23 KFB02700 95/07/26    7072 B CWSPACK1.LZH ComWin用バッチ集(要gawk)

   24 SGQ00310 95/07/10  276631 B COMW0240.LZH 多機能ｺﾏﾝﾄﾞﾏﾈｰｼﾞｬComWin

   25 SGQ00310 95/06/25  270564 B COMW0230.LZH 汎用(AP,WIN,FILE)ｼｪﾙComWin

   26 SGQ00310 95/06/18  146627 B COMWB230.LZH ｺﾝｿｰﾙｴﾐｭﾚｰﾀ ComWin β

    今後とも、不備な点をどんどん改良していきたいと思いますので、

    皆さん、よろしくお願いします。

        前寺正彦 <SGQ00310@niftyserve.or.jp>

-----------------------------------------------------------

アイコンの由来

    ComWin のアイコンは、職場の倉庫に埃をかぶって埋もれていた

    "本物"の VT-100 端末をイメージしてデザインしました。

    私が目の当たりでVT-100 端末を見たのはこれが最初で最後でしたので,

    (いまその倉庫に行ったところで実物が残っているかどうかわかりません。）

    実物と詳細部分は違うと思いますが、イメージだけは強烈に残っています。

    1990年代も半ばをすぎたいま、強力な GUI を装備した OS が

    数多く選択できるようになりました。

    しかし、どの GUI も偉大な先人達がキャラクタ端末を操作しながら

    様々な想像を巡らした結果、生み出されたことに間違いはありません。

    ComWin はユーザーに対して無愛想なプロンプトしか提供しませんが、

    この無愛想さはユーザーの自由な発想をまったく束縛しません。

    ComWin を使用することが次世代コンピューティングの新たなる発想の

    一部となることを心から願っております。