                      ConsLIB V0.28 -- Console Library

                   Copyright (C) 1997-1999, Eiichiro Ito
                           (GHC02331@nifty.ne.jp)

* Introduction

     これは、CEコンソールアプリを作成するのに必要なライブラリに関する
     説明です。このライブラリを用いることで、比較的容易にCEのコンソー
     ルアプリケーションを作成することができます。ただし、実際に動作さ
     せるにはConsoleが必要となります。

     このプログラムの最新版と動作に必要なファイルは

          http://www.oohito.com/

     から入手することが可能です。

* How to make CE Console Application

     CEコンソールアプリを作成するには以下のようにします。

       1. AppNameを定義しアプリケーション名を設定します。
       2. Main関数を作成し、プログラムのエントリポイントとします。
       3. プラットフォームに対応したConsLIB.LIBをリンクします。

     たとえば、

          TCHAR   AppName[] = TEXT("Hello") ;

          int Main( DWORD argc, LPTSTR argv[] )
          {
              Cputs( TEXT("Hello World") ) ;
              return 0 ;
          }

     のようなプログラムをコンパイルしConsLIBとリンクすれば、いわゆる
     Hello Worldを出力するプログラムを作成できます。なお、CE上のアプリ
     ケーションは基本的にUnicodeを用いますので文字列の宣言等には特に注
     意してください。

     ※ AppNameは必ず定義してください

* Brief description of ConsLIB Functions

     ConsLIBでは、CEコンソールアプリを作成するのに必要な最低限の機能を
     提供しています。これらの機能は大きく分けて、

        * 画面表示
        * キーボード入力
        * 環境変数操作
        * ディレクトリ
        * その他

     などがあります。これらの機能毎に関数の説明をします。

   * 画面表示

     Putch      1文字画面に表示する
                void Putch( TCHAR c ) ;
                c : 出力する文字コード(Unicode)

     Cputs      文字列を画面に表示する
                void Cputs( LPCTSTR buf ) ;
                buf : 出力する文字列(Unicode)

     CputsVT    VT100モードで文字列を画面に表示する
                void Cputs( LPCTSTR buf ) ;
                buf : 出力する文字列(Unicode)

     Cls        画面をクリアする
                void Cls( void ) ;
                なし

     ClearEol   カーソル位置から行末までクリアする
                void ClearEol( void ) ;
                なし

     ScrollUp   画面を上にスクロールさせる
                void ScrollUp( DWORD from, DWORD to ) ;
                from : 開始行
                to : 終了行

     ScrollDown 画面を下にスクロールさせる
                void ScrollDown( DWORD from, DWORD to ) ;
                from : 開始行
                to : 終了行

     GetWH      画面に表示できる横文字数と縦行数を求める
                void GetWH( LPDWORD w, LPDWORD h ) ;
                w : 横文字数へのポインタ
                h : 縦行数へのポインタ

     GetCurPos  現在のカーソル位置を取得する
                void GetCurPos( LPDWORD col, LPDWORD line ) ;
                col : 桁位置へのポインタ
                line : 行位置へのポインタ

     SetCurPos  カーソル位置を設定する
                void SetCurPos( DWORD col, DWORD line ) ;
                col : 桁位置
                line : 行位置

   * キーボード入力

     Getch          1文字入力を待つ
                    TCHAR Getch( void ) ;
                     戻り値 : 文字コード(Unicode)

     Kbhit          キー入力があるかチェックする
                    BOOL Kbhit( void ) ;
                     戻り値 : キー入力がある場合TRUE

     Cgets          1行文字列入力を行う
                    LPTSTR Cgets( LPTSTR buf ) ;
                     buf : 入力文字列を格納する領域
                     戻り値 : bufと同じ

     CgetsVT        VT100モードで1行文字列入力を行う
                    int CgetsVT( char *buf, int len ) ;
                     buf : 入力文字列を格納する領域
                     len : 格納領域のサイズ
                     戻り値 : 入力文字列長

     ResetBreak     Break入力をキャンセルする
                    void ResetBreak( void ) ;
                     なし

     SleepWithBreak Break入力があるまでスリープする
                    BOOL SleepWithBreak( DWORD msec ) ;
                     msec : スリープする秒数
                     戻り値 : Breakの場合にTRUE

     SendBreak      プログラム内からBreak入力を行う
                    void SendBreak( void ) ;
                     なし

   * 環境変数操作

     SetEnvVar        環境変数を設定する
                      BOOL SetEnvVar( LPCTSTR name, LPCTSTR value ) ;
                        name : 環境変数名
                        value : 設定内容

     GetEnvVar        環境変数の内容を取得する
                      DWORD GetEnvVar( LPCTSTR name, LPTSTR value, DWORD
                      size ) ;
                        name : 環境変数名
                        value : 取得内容を格納する領域
                        size : 領域の大きさ(文字数)

     ExpandEnvVar     文字列内の環境変数参照を内容で置き換える
                      void ExpandEnvVar( LPTSTR buf ) ;
                        buf : 文字列

     ExpandVar        文字列内の部分文字列を別の文字列で置き換える
                      void ExpandVar( LPTSTR ptr, LPCTSTR var, LPCTSTR arg
                      ) ;
                        ptr : 文字列
                        var : 部分文字列
                        arg : 置換文字列

     PrintEnvVar      環境変数の内容を表示する
                      void PrintEnvVar( LPCTSTR name ) ;
                        name : 表示する環境変数名
                        (NULLの場合は全て)

     ClearUndefEnvVar 環境変数参照を全てクリアする
                      void ClearUndefEnvVar( LPTSTR src ) ;
                        src : 文字列

   * ディレクトリ

     SetCurDir  カレントディレクトリを設定する
                BOOL SetCurDir( LPCTSTR dir ) ;
                  dir : ディレクトリ

     GetCurDir  カレントディレクトリを取得する
                DWORD GetCurDir( DWORD size, LPTSTR buf ) ;
                  size : 取得領域の文字数
                  buf : 取得領域

     catdir     パス名の結合
                void catdir( LPTSTR body, LPCTSTR adddir ) ;
                  body : ディレクトリ名
                  adddir : 相対ディレクトリ

     rel2absdir 相対パス名を絶対パス名に変換する
                void rel2absdir( LPTSTR dst, DWORD chDst, LPCTSTR src ) ;
                  dst : 絶対パス名
                  chDst : 絶対パス名の文字数
                  src : 相対パス名

     is_dir     ディレクトリかどうかの判定
                BOOL is_dir( LPCTSTR path ) ;
                  path : 絶対パス名
                  戻り値 : ディレクトリならTRUE

     is_file    ファイルかどうかの判定
                BOOL is_file( LPCTSTR path ) ;
                  path : 絶対パス名
                  戻り値 : ファイルならTRUE

     UpDir      親ディレクトリの取得
                BOOL UpDir( LPTSTR dir ) ;
                  dir : 絶対ディレクトリ名
                  戻り値 : 成功したらTRUE

   * その他

     GetIndex       Console内でのクライアント番号を得る
                    DWORD GetIndex( HWND hWnd ) ;
                      hWnd : ウィンドウハンドル
                      戻り値 : クライアント番号

     SwitchClient   指定されたクライアント番号に制御を移す
                    BOOL SwitchClient( DWORD index ) ;
                      index : クライアント番号
                      戻り値 : 成功したらTRUE

     ExecuteProcess プロセスを実行する
                    BOOL ExecuteProcess( LPCTSTR cmd, LPTSTR arg ) ;
                      cmd : プログラム名
                      arg : 引数
                      戻り値 : 成功したらTRUE

     Exit           CEコンソールアプリを終了させる
                    void Exit( int code ) ;
                      code : プロセス終了値

     cmdline2args   文字列を分解してパラメータのリストにする
                    void cmdline2args( LPTSTR cmdline, LPDWORD argc,
                    LPTSTR *argv, LPBOOL quote, LPTSTR args ) ;
                      cmdline : 文字列
                      argc : パラメータ数へのポインタ
                      argv : パラメータ配列へのポインタ
                      quote : クオートフラグ配列へのポインタ
                      args : 2番目のパラメータ以降

     chop_quote     文字列の前後の二重引用符を削除する
                    void chop_quote( LPTSTR dst ) ;
                      dst : 文字列

     _wcsistr       文字列から別の文字列を探す
                    LPTSTR _wcsistr( LPCTSTR org, LPCTSTR find ) ;
                      org : 文字列
                      find : 検索文字列

     GetConsoleVer  Consoleのバージョン番号を取得する
                    DWORD GetConsoleVer( void ) ;
                      戻り値 : バージョン番号

     ResetTerminal  VT100モードから通常のConsoleモードに戻す
                    void ResetTerminal( void ) ;
                      戻り値 : なし

     この他、プログラムから利用できる変数は以下のとおり

          TCHAR       AppName[]
               CEコンソールアプリのアプリケーション名

          HINSTANCE   hInst
               CEコンソールアプリのインスタンスハンドル

          HWND        hMainWnd
               CEコンソールアプリのウィンドウハンドル

          HWND        hServer
               Console.EXE のウィンドウハンドル

          DWORD       Argc
               CEコンソールアプリに渡された引数の個数(Mainのargcと同じ)

          LPTSTR      Argv[]
               CEコンソールアプリに渡された引数(Mainのargvと同じ)

          LPTSTR      CmdLine
               CEコンソールアプリに渡された元々の引数文字列

* About VT100 mode

     Consoleクライアントが CputsVT() を呼ぶとモードが TTY_VT100 に な
     ります。モードが TTY_VT100 になると CgetsVT() を使って ESCシーケ
     ンスの応答や, カーソルキーコードが取得できます。通常のConsoleのモ
     ードに戻すにはResetTerminal() を呼び出して下さい。

* Support

     このプログラムのサポートは，

        * windowsce_users_jp メーリングリスト
          (問い合わせ：http://www.tt.rim.or.jp/~hiraide/index.html)
        * Niftyserve FWINCEUの6番会議室
        * GHC02331@niftyserve.or.jp へのメール

     で行います。

* Copyright

     This program is a copyrighted freeware. Its copyright is owned by
     its author. You may use it freely, but you are not permitted to
     use it for any commercial purpose. If you want to post this
     program to other BBS, ftp site or network, or if you want to
     bundle it to other program or publication, you should receive
     prior permission from its author. The author is in no way liable
     to any damage, which may be caused by the use of or inability to
     use this software.

     このプログラムはフリーソフトウェアです。著作権は伊藤　栄一郎が保
     持しています。このプログラムをBBSやftpサイトなどで配布する場合は
     あらかじめ著作権者まで許可を取ってください。

     また，このプログラムは無保証です。このプログラムを利用して被った
     被害等に関して著作権者は責任を負わないものとします。全て利用者の
     自己責任においてこのプログラムを利用してください。

* History

     Consoleのドキュメントを参照してください。

ConsLIB -- Copyright (C) 1997-1999, Eiichiro Ito
