# CalcApp - .NET 電卓コマンド

calc コマンドライン電卓の .NET 版です。このアプリケーションは、CalcLib ライブラリラッパーを使用して基本的な整数演算を実行します。

# 1 概要

`CalcApp` は、2つの整数と演算子を受け取り、CalcLib ラッパーを介してネイティブ calc ライブラリを使用して計算を実行し、結果を出力するコマンドライン電卓です。

# 2 機能

- シンプルなコマンドラインインターフェース - 使いやすい電卓
- 4つの基本演算 - 加算、減算、乗算、除算
- ネイティブライブラリ統合 - ネイティブ calc ライブラリへの P/Invoke に CalcLib ラッパーを使用
- クロスプラットフォーム - Windows と Linux の両方で動作
- エラー処理 - 無効な入力と操作に対する適切なエラーメッセージ

# 3 要件

## 3.1 ビルド要件

- .NET SDK 9.0 以降
- CalcLib ライブラリ (自動的に参照される)
- ネイティブ calc ライブラリ (Linux では libcalc.so、Windows では libcalc.dll)

## 3.2 ランタイム要件

- .NET 9.0 ランタイム
- ネイティブ calc ライブラリが同じディレクトリまたはシステムライブラリパスに配置されていること

# 4 ビルド

    cd prod/calc.net/src/CalcApp
    make build

    make clean

    make restore

# 5 使用方法

    CalcApp <num1> <operator> <num2>

## 5.1 演算子

- `+` - 加算
- `-` - 減算
- `x` - 乗算
- `/` - 除算

## 5.2 例

    ./CalcApp 10 + 20

    ./CalcApp 15 - 5

    ./CalcApp 6 x 7

    ./CalcApp 20 / 4

    ./CalcApp 10 / 3

    ./CalcApp 10 / 0

# 6 コマンドライン引数

プログラムは正確に 3 つの引数を必要とします。

1. num1 - 第 1 整数オペランド
2. operator - 単一文字の演算子 (+, -, x, /)
3. num2 - 第 2 整数オペランド

## 6.1 引数の検証

- 3 つすべての引数を提供する必要がある
- 演算子は正確に 1 文字である必要がある
- 第 1 引数と第 3 引数は有効な整数である必要がある
- 演算子は +, -, x, / のいずれかである必要がある

# 7 エラー処理

プログラムは成功または失敗に基づいて異なる終了コードを返します。

- 終了コード 0 - 成功
- 終了コード 1 - エラー (無効な引数、計算失敗など)

# 8 実装の詳細

## 8.1 アーキテクチャ

    CalcApp (コンソールアプリ)
        ↓
    CalcLib (ラッパーライブラリ)
        ↓
    libcalc.so / libcalc.dll (ネイティブライブラリ)

## 8.2 プログラムフロー

1. コマンドライン引数を解析
2. 引数の数と形式を検証
3. 文字列を整数に変換
4. 演算子を CalcKind 列挙型にマッピング
5. CalcLibrary.Calculate() を呼び出し
6. 結果をチェックして値またはエラーを出力
7. 適切な終了コードを返す

## 8.3 C 版との比較

.NET 版 (`CalcApp`) は、C 版 (`calc`) と同じ機能を提供します。

機能 | C 版 | .NET 版
--- | --- | ---
コマンドラインインターフェース | ✓ | ✓
4 つの基本演算 | ✓ | ✓
エラー処理 | ✓ | ✓
終了コード | ✓ | ✓
ネイティブライブラリ | 直接呼び出し | P/Invoke ラッパー
プラットフォームサポート | Windows/Linux | Windows/Linux
整数解析 | atoi() | int.TryParse()
エラーメッセージ | fprintf(stderr) | Console.Error

# 9 ビルドシステムとの統合

アプリケーションは既存の makefile ビルドシステムに統合されています。

    cd prod/calc.net/src
    make  # CalcApp を含むすべてのアプリケーションをビルド

    cd prod/calc.net/src/CalcApp
    make build

# 10 トラブルシューティング

## 10.1 ネイティブライブラリが見つからない

エラー:

    Error loading native library

解決方法:

1. ネイティブライブラリがビルドされていることを確認:

       cd prod/calc/libsrc/calc
       make build

2. ライブラリが `prod/calc/lib/` に存在することを確認

3. Linux では `LD_LIBRARY_PATH` を設定:

       export LD_LIBRARY_PATH=/path/to/c-modernization-kit/prod/calc/lib:$LD_LIBRARY_PATH

## 10.2 アプリケーションのビルドが失敗する

エラー:

    Project reference not found

解決方法:

1. 最初に CalcLib ライブラリをビルド:

       cd prod/calc.net/libsrc/CalcLib
       make build

2. 次に CalcApp をビルド:

       cd prod/calc.net/src/CalcApp
       make build

# 11 ファイル

- `Program.cs` - メインアプリケーションロジック
- `CalcApp.csproj` - プロジェクト設定
- `makefile` - ビルド統合
- `README.md` - このドキュメント