=====================================================================
【タイトル】 C言語コンパイラ for Cassiopeia ver 0.2
【ファイル】 cc02.zip
【作成月日】 2012/09/02
【動作環境】 カシオペアシリーズPDA(CFカードが必要です)
【配布形態】 フリーウェア
【転  載】 自由
【著 作 者】 清水 良夫
=====================================================================


■概要
ダウンロードしていただき、有難うございます。
 本ソフトはカシオペアPDA用のC言語のセルフコンパイラで、コンパイルには母艦を必要としません。
非常に制限の多い、実用的なプログラムも作れないような代物ですが
使っていただけると幸いです。

 一応Windows CE実行形式のファイルを生成しますが、
 ライブラリの都合上、Console※対応アプリケーションしか作れないようにしてあります。

 本ソフトには以下のファイルが含まれています
  1. readme.html                  ...このファイル
  2. sh3(フォルダ)                ...SH3系CPU用のファイルが格納されている
     2-1. sh3cpp.exe                 ...プリプロセッサ
     2-2. sh3cps.exe                    ...パーサ
     2-3. sh3ccg.exe                   ...コードジェネレータ
     2-4. sh3asm.exe                  ...アセンブラ
     2-5. libasm.s                     ...アセンブラ用スタートアップライブラリ
     2-6. cc                            ...コンパイル用バッチファイル
  3. mips(フォルダ)               ...MIPS系CPU用のファイルが格納されている
     3-1. mipscpp.exe                ...プリプロセッサ
     3-2. mipscps.exe                  ...パーサ
     3-3. mipsccg.exe                 ...コードジェネレータ
     3-4. mipsasm.exe                ...アセンブラ
     3-5. libasm.s                     ...アセンブラ用スタートアップライブラリ
     3-6. cc                            ...コンパイル用バッチファイル
  4. include(フォルダ)            ...インクルード用ヘッダファイルが収納されている
  5. samples(フォルダ)           ...テスト用サンプルプログラムが収納されている

■インストール
 ダウンロードしたファイルを解凍してできたファイルを
 CFカード直下のフォルダにコピーしてください。
 includeフォルダはフォルダの中身ごと移動して下さい。

 また本ソフトを動作させるためには以下のソフトが必要になります。
  1.Console※            (作者:伊藤 栄一郎 様)
  2.KCTRL for WindowsCE  (作者:伊藤 栄一郎 様)


■アンインストール
解凍したファイルを削除してください。


■コンパイル方法
 CESHELL上で以下のようにタイプします。

 -cc  ソースファイル名

ソースファイル名の拡張子(.c)はタイプしないで下さい
コンパイルが成功すると、実行ファイル"ソースファイル名.exe"が作成されます。
なおコンパイルはストレージカード直下のフォルダで行ってください。


■制約事項、既知の不具合など
(1)  本ソフトはカシオペアPDA(SH3/MIPS系CPU)専用です
(2)  あまり大きなプログラムはコンパイルできません、数十KB位が限度です
(3)  コンパイル速度はきわめて遅いです
(4)  最適化はしていません
(5)  プリプロセッサは#include,#define文のみ使用できます
(6)  enum が使用できません。
(7)  構造体の初期化ができません
(8)  関数の引数や戻り値に構造体が使えません(構造体のポインタは可能です)
(9)  浮動小数点数が使えません。
(10) プロトタイプ宣言など、エラーチェックが厳密ではありません
(11) バグが多数潜んでいる可能性があります

以下のキーワードは予約語として存在していますが、使用しても無視します。
const, volatile, register


■ライブラリ関数について
 ヘッダファイル"test.h"をインクルードすると、以下の関数を使用することができるようになります。

// プログラムの一時停止(単位はミリ秒)
int sleep( int t );  

// コンソールに1文字出力する
int putch( char c );

// ワイド文字列に変換する
TCHAR* _WIDE( char* s );

// 読み込みモードでファイルを開く
FILE _ropen( TCHAR* t );

// 書きこみモードでファイルを開く
FILE _wopen( TCHAR* t );

// ファイルから読み込む
int _read( FILE fp, char* buf, int size ); 

// ファイルに書きこむ
int _write( FILE fp, char* buf, int size );

// ファイルを閉じる
int _close( FILE fp );

// 文字列の比較
int strcmp( unsigned char *s, unsigned char *t );

// 文字列のコピー
char* strcpy( char *s, char *t );

// 文字列の連結
char *strcat( char *s, char *t );

// 文字列の検索
char *strstr( char *s, char *t );

// 文字列の長さを求める
int strlen( char *s);

// 文字列を整数に変換する(基数指定あり)
int _atoi( char *s, int radix);

// 文字列を整数に変換する
int atoi( char *s);

// 整数を文字列に変換する(基数指定あり)
char* itoa(int val, char *buf, unsigned int radix);

// 書式にしたがってバッファからデータを読み込む
int vsscanf( char *buf, char *format, void* arg_p );

// 書式にしたがってバッファへデータを出力する
int vsprintf( char* buf, char* format, void* arg_p );

// 書式にしたがってバッファからデータを読み込む
int sscanf( char *buf, char *format, ...);

// 書式にしたがってバッファへデータを出力する
int sprintf(char *buf, char *format, ...);

// キーボードのキーが押されているかどうかを返す
int kbhit();

// コンソールから1文字入力(エコーバックなし)
int getch();

// ファイルを開く
FILE fopen( char *fname, char *mode);

// ファイルを閉じる
int fclose(FILE fp);

// 1文字入力する
int getc(FILE fp);

// 1文字出力する
int putc(char c, FILE fp);

// 文字列を入力する
char* fgets(char* buf, FILE fp);

// 文字列を出力する
int fputs( char *s, FILE fp);

// 書式にしたがってデータを読み込む
int fscanf(FILE fp, char *format, ...);

// 書式にしたがってデータを出力する
int fprintf(FILE fp, char *format, ...);

// 標準入力から1文字入力する
int getchar();

// 標準出力に1文字出力する
int putchar(char c);

// 標準入力から文字列を入力する
char* gets(char *s);

// 標準出力に文字列を出力する
int puts( char *s);

// 書式にしたがって標準入力からデータを読み込む
int scanf( char *format, ...);

// 書式にしたがって標準出力にデータを出力する
int printf( char *format, ...);


■サンプルプログラム
フォルダ"samples"にはいくつかサンプルプログラムが格納されています

(1) "hello.c"
#include <test.h>
void main(){
  printf("ハローワールド\n");
}


(2) "test1.c" ファイル入出力テストプログラム
#include <test.h>
#define WORK_FILE "\\test.txt"

void main(){
  FILE fp;
  int i, c;
  char buf[64];

  fp = fopen( WORK_FILE, "w" );
  printf( "INPUT TITLE? " ); scanf( "%s", buf );
  fprintf( fp, "TITLE : %s\n", buf );
  for( i = 1; i <= 10; i++ ){
    fprintf( fp, "i = %x\n", i );
  }
  fclose(fp);

  fp = fopen( WORK_FILE, "r" );
  while( ( c = getc( fp ) ) != -1 ){
    putchar( c );
  }
  fclose(fp);
}

※FILEはWindows APIで使用するファイルハンドルです
 一般のC言語の標準ライブラリのFILEと使用方法が異なりますので注意して下さい
(1) 一般的なFILEの使用方法
FILE *fp;  //ポインタ修飾子"*"が付いている

(2) "test.h"をインクルードしたときの使用方法
FILE fp;  //ポインタ修飾子"*"は付けない


※コンパイルしたプログラムの実行について
これはコンパイラよりもWindows CE OSに起因する問題だと思うのですが
プログラムのミス等で、ヌルポインタ等の存在しないアドレスを参照するとプログラムがフリーズします。
その場合、ウィンドウを閉じてもフリーズしたプログラムは終了しません。
そのまま放置するとコンパイラが正常に動作しなくなりますので
上記のような場合には速やかにリセットして下さい。


■注意事項
1.本ソフトはフリーソフトです。
2.著作権は清水 良夫にあります。
3.本ソフトを使用して被るいかなる損害も著作者には免責とさせていただきます
4.本ソフトはテスト版です、内容は予告なく変更される場合があります
4.以上の項目に同意できる方のみ使用を許可いたします
5.その場合、付属のサンプルコードやライブラリはご自由に利用(改変・配布)していただいてかまいません
 著作者への連絡は不要です


■謝辞
すばらしいソフトを公開されている伊藤 栄一郎 様に感謝します。
ありがとうございました。


■著作者連絡先
rscqr931@yahoo.co.jp


■更新履歴
2011/10/14 ver 0.1公開、コンソール、ファイル入出力のごく一部のみサポート
2012/07/10 ver 0.1.1       Windows CE 2.0 ( CASSIOPEIA A-55/60 ) に対応
2012/09/02 ver 0.2         不正なコードを出力する不具合を修正、またMIPS系CPUに対応