ZAURUS/SHARP POCKET COMPUTER 用 C言語 標準ライブラリ Copyright 1996 小笠原博之 (COR.) ●ライブラリの種類 stdio_sc ストリーム入出力 stdlib_sc 文字数値変換、メモリ管理、数値演算補助 string_sc 文字列操作 ctype_sc 文字判定 setjmp_sc ロングジャンプ time_sc 時間 kanji_sc 漢字判定 fcs_sc FCS呼び出し iocs_sc IOCS呼び出し crc_sc CRC計算 graph_sc LCDドライバによるグラフィックライブラリ sound_sc ブザーコントロール lcd_sc LCDCの直接コントロールによる描画 ●スタートアップ int main( argc, argv ); ------------------------------------------------------------------------------ int argc; 引数の個数 char **argv; 引数ポインタの配列へのポインタ 1番最初に呼び出される関数。内容はユーザーが定義する。argc は引数の 個数(そのプログラム名を含む)、argv がそのデータへのポインタ配列であ る。戻り値はプロセス終了コードになる。envp は存在しないので envp を 引数列中に記述することはできない。 ------------------------------------------------------------------------------ int _main(); ------------------------------------------------------------------------------ スタートアップシステムから呼び出されるルーチン。引数文字列を解析した のちC言語のポインタ形式に変換し、必要なら stdio/stdout の入出力スト リームを用意し、ヒープ領域を初期化したのち main() を呼び出す。 ------------------------------------------------------------------------------ ●ストリーム入出力 stdio_sc.h ・標準I/Oライブラリ(fileio_sc.inc) FILE *fopen( name, mode ); ------------------------------------------------------------------------------ char *name; ファイル名 char *mode; オープンモード ファイルをオープンし、オープンできればその FILE* を返す。できなけれ ば NULL を返す。モードは次の通り "r" 読み込み "w" 新たに作成して書き込み "a" すでに存在するファイルに追加書き込み モードに + をつけると読み書き両用、b をつけるとバイナリモード *バグ w+ が実装されていない。a+ で新たにファイルを作った時 + が無効になって いる。テキストモードで改行コードが変換されていない。 ------------------------------------------------------------------------------ int fclose( fp ); ------------------------------------------------------------------------------ FILE *fp; ファイルをクローズする。バッファはフラッシュされ、fp も開放する。 *バグ 戻り値が不定 ------------------------------------------------------------------------------ int fflush( fp ); ------------------------------------------------------------------------------ FILE *fp; ファイルのバッファをフラッシュする。出力ならバッファ内容を書きだす。 入力ならバッファの内容をクリアする。 *バグ 戻り値が不定 ------------------------------------------------------------------------------ int fgetc( fp ); ------------------------------------------------------------------------------ FILE *fp; ファイルから1文字読み込む。ファイルの終端に達すると EOF を返す。 ------------------------------------------------------------------------------ int fputc( ch, fp ); ------------------------------------------------------------------------------ int ch; 書き込む文字 FILE *fp; ファイルへ1文字出力する。 *バグ 戻り値が不定,stdout に '\n' を書き出してもフラッシュされない ------------------------------------------------------------------------------ int getc( fp ); ------------------------------------------------------------------------------ FILE *fp; fgetc() と同じ ------------------------------------------------------------------------------ int putc( ch, fp ); ------------------------------------------------------------------------------ int ch; FILE *fp; fputc() と同じ ------------------------------------------------------------------------------ int putchar( ch ); ------------------------------------------------------------------------------ int ch; putc( ch, stdout ) と同じ ------------------------------------------------------------------------------ int getchar(); ------------------------------------------------------------------------------ getc( stdin ) と同じ ------------------------------------------------------------------------------ char *fgets( buf, max, fp ); ------------------------------------------------------------------------------ char *buf; バッファ int max; 最大読み込み数 FILE *fp; ファイルから改行までの1行を最大 max まで読み込む。EOF に達した場合は NULL を返す。改行文字もデータに含まれる。 *バグ maxに達しても+1に'\0'を書き込んでしまう。戻り値が buf ではなく、bufの '\0' の位置のアドレスである。 ------------------------------------------------------------------------------ char *fgetcrs( buf, max, fp ); ------------------------------------------------------------------------------ char *buf; バッファ int max; 最大読み込み数 FILE *fp; ファイルから改行までの1行を最大 max まで読み込む。EOF に達した場合は NULL を返す。改行文字もデータに含まれる。fgets() と違うのは CR (0x0d) も改行とみなすことであり、CR+LF の改行の場合、それだけで 2行に扱われ てしまうので注意。 ------------------------------------------------------------------------------ int fputs( buf, fp ); ------------------------------------------------------------------------------ char *buf; データ FILE *fp; 文字列をファイルに書き込む。 *バグ stdout に出力する場合、'\n' があっても flush しない。戻り値が不定であ る。 ------------------------------------------------------------------------------ int gets( buf ); ------------------------------------------------------------------------------ char *buf; バッファ 1行入力をする。現在これは単なる cgets() へのマクロである。よって入力 ストリームとは非連動になることに注意。 *バグ 戻り値が異なる ------------------------------------------------------------------------------ int puts( buf ); ------------------------------------------------------------------------------ char *buf; バッファ 1行出力をする。基本的には fputs( buf, stdout ) と同じだが、常に最後に 改行が付加され、また出力は実行のたびにフラッシュされる。 ------------------------------------------------------------------------------ int fseek( fp, offset, mode ); ------------------------------------------------------------------------------ FILE *fp; long offset; 位置 int mode; 位置を決定するモード ファイルのカレント位置を変更する。mode は SEEK_SET(0)=先頭から、 SEEK_CUR(1)=現在位置から、SEEK_END(2)終わりから、の3種類。成功すると 0を返す。 *バグ 常に 0 を返す ------------------------------------------------------------------------------ long ftell( fp ); ------------------------------------------------------------------------------ FILE *fp; ファイルの先頭からのカレント位置を返す。 *バグ テキストモードが考慮されていない ------------------------------------------------------------------------------ int rewind( fp ); ------------------------------------------------------------------------------ FILE *fp; ファイルの位置を先頭に戻す。fseek( fp, 0L, SEEK_SET ) と同じ。 ------------------------------------------------------------------------------ int fread( buf, size, n, fp ); ------------------------------------------------------------------------------ char *buf; データ int size; データサイズ int n; データ個数 FILE *fp; データを読み込む。実際に読み込んだデータの個数を返す。 ------------------------------------------------------------------------------ int fwrite( buf, size, n, fp ); ------------------------------------------------------------------------------ char *buf; データ int size; データサイズ int n; データ個数 FILE *fp; データを書き込む。実際に書き込んだデータの個数を返す。 *バグ エラー判定がない。そのため書き込んだ個数は常に n になる。 ------------------------------------------------------------------------------ int feof( fp ); ------------------------------------------------------------------------------ FILE *fp; ファイルが EOF まで達したかどうかを返す。EOF でなければ 0。 ------------------------------------------------------------------------------ void clearerr( fp ); ------------------------------------------------------------------------------ FILE *fp; エラーフラグ、EOFフラグをクリアする。 ------------------------------------------------------------------------------ int _filename( buf, name ); ------------------------------------------------------------------------------ char *buf; 変換結果を格納するバッファ char *name; ファイル名 通常のファイル名をスペースを補って fcs 形式に変換する。ワイルドカー ドの展開は行わない。 ------------------------------------------------------------------------------ int _filenamew( buf, name ); ------------------------------------------------------------------------------ char *buf; 変換結果を格納するバッファ char *name; ファイル名 通常のファイル名を fcs 形式に変換する。デバイス名がない場合はデフォル トデバイスをつける。ワイルドカード '*' が使われている場合は、それを '?' に展開する。短いファイル名の場合スペースを補うので、ファイル名長 は必ず固定になる。 ------------------------------------------------------------------------------ int _filbuf( fp ); ------------------------------------------------------------------------------ FILE *fp; 読み込みバッファを補充する。読み込んだ先頭の1byte、または EOF を返す。 text モードの時は 0x1a も EOF と判断される。 ------------------------------------------------------------------------------ int _flsbuf( fp ); ------------------------------------------------------------------------------ FILE *fp; 書き込みバッファの内容をフラッシュする。ライトバッファリングフラグも クリアする。 ------------------------------------------------------------------------------ int _init_iob(); ------------------------------------------------------------------------------ 標準入出力にストリームバッファを割り当てる。システムが呼び出す。ユー ザーは呼び出さないこと。 ------------------------------------------------------------------------------ ・フォーマット出力ライブラリ(format_sc.inc) *バグ 戻り値が不定, sprintf以外は最大文字列長制限がある(512byte) int printf( format, ... args ); ------------------------------------------------------------------------------ char *format; フォーマット文字列 フォーマットに従って文字列を stdout へ出力する。使用可能なフォーマッ トは次のとおり。は10進定数。 %d 数値出力 %u 符号無し数値出力 %x 16進数出力 %ld long数値出力 %lu 符号無しlong数値出力 %lx 16進数long出力 %s 文字列出力 %c 1文字出力 %d 数値出力 右詰めで n 桁 %u 符号無し数値出力 右詰めで n 桁 %ld 数値出力 右詰めで n 桁 (現在はまだ符号なし扱い) %lu 符号無しlong数値出力 右詰めで n 桁 %x 16進数出力 右詰めで n 桁 %s 文字列出力 右詰めで n 文字 %-s 文字列出力 左詰めで n 文字 %% 文字'%'の出力 ------------------------------------------------------------------------------ int sprintf( buf, format, ... args ); ------------------------------------------------------------------------------ char *buf; 結果格納バッファ char *format; フォーマット文字列 フォーマットに従って文字列を変換し、バッファへ格納する。 ------------------------------------------------------------------------------ int cprintf( format, ... args ); ------------------------------------------------------------------------------ char *format; フォーマット文字列 フォーマットに従って文字列を変換し、直接文字出力を行う。 ------------------------------------------------------------------------------ int fprintf( fp, format, ... args ); ------------------------------------------------------------------------------ FILE *fp; char *format; フォーマット文字列 フォーマットに従って文字列を変換し、ファイルへ文字出力を行う。 ------------------------------------------------------------------------------ ・標準ファイル操作ライブラリ(file_sc.inc) int remove( name ); ------------------------------------------------------------------------------ char *name; 削除するファイル名 ファイルを削除する。削除に失敗すると 0 でない数を返す。 ------------------------------------------------------------------------------ int rename( old, new ); ------------------------------------------------------------------------------ char *old; リネームの対象ファイル char *new; 新しい名前 ファイル名を変更する。失敗すると 0 でない数を返す。ムーブはできない。 よって新しい名前にデバイス名を含んではいけない。 ------------------------------------------------------------------------------ ・コンソール直接入出力ライブラリ(console_sc.inc) int putch( ch ); ------------------------------------------------------------------------------ int ch; 出力文字 バッファリングなしで1文字を画面に直接出力する。戻り値不定 ------------------------------------------------------------------------------ void cputs( buf ); /* print */ ------------------------------------------------------------------------------ char *buf; バッファリングなしで1行を画面に直接出力する。行末に改行はつかない。 ------------------------------------------------------------------------------ void cprint( buf ); /* printcr */ ------------------------------------------------------------------------------ char *buf; バッファリングなしで1行を画面に直接出力する。行の最後に改行がつく。 ------------------------------------------------------------------------------ int getch(); ------------------------------------------------------------------------------ 1文字を直接入力する。キーボード ON/OFF 制御あり。 ------------------------------------------------------------------------------ int cgets( buf ); /* getline */ ------------------------------------------------------------------------------ char *buf; 1行入力をする。カーソル制御、キーボード制御、特殊入力制御を行う。バッ ファに改行コードは含まれない。戻り値は入力した文字数。エラーやEOFなら -1 を返す。 ------------------------------------------------------------------------------ void clocate( x, y ); ------------------------------------------------------------------------------ int x; int y; FCSの表示カーソル位置指定。 ------------------------------------------------------------------------------ ●数値変換、メモリ管理 stdlib_sc.h ・数値変換や演算を行う int atoi( ptr ); ------------------------------------------------------------------------------ char *ptr; 文字列 文字列を数値(符号付き)に変換する。先頭の空白は飛ばし、変換出来ない文 字が出るまで読み込む。そのため ptr は必ずしも '\0' で終わっている必 要はない。最初から変換できない文字の場合は 0 を返す。 ------------------------------------------------------------------------------ long atol( ptr ); ------------------------------------------------------------------------------ char *ptr; 文字列 long で返す以外は atoi と同じ。より大きな数値を扱える。 ------------------------------------------------------------------------------ int htoi( ptr ); ------------------------------------------------------------------------------ char *ptr; 文字列 16進数文字列を数値に変換する。16bit で処理する。 ------------------------------------------------------------------------------ long htol( ptr ); ------------------------------------------------------------------------------ char *ptr; 文字列 16進数文字列を数値に変換する。20bit で処理する。 ------------------------------------------------------------------------------ char *utoa( ptr, num ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ unsigned int num; 変換数値 符号なし数値を文字列に変換する。必要な最小桁文字列である。戻り値は展 開後の ptr の '\0' のアドレス。 ------------------------------------------------------------------------------ char *ultoa( ptr, num ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ unsigned long num; 変換数値 符号なしlong数値を文字列に変換する。必要な最小桁文字列である。戻り値 は展開後の ptr の '\0' のアドレス。 ------------------------------------------------------------------------------ char *itoa( ptr, num ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ int num; 変換数値 符号付き数値を文字列に変換する。必要な最小桁文字列である。戻り値は展 開後の ptr の '\0' のアドレス。 ------------------------------------------------------------------------------ char *ltoa( ptr, num ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ long num; 変換数値 符号付きlong数値を文字列に変換する。必要な最小桁文字列である。戻り値 は展開後の ptr の '\0' のアドレス。 ------------------------------------------------------------------------------ char *itoaf( ptr, num, len ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ unsigned int num; 変換数値 int len; 展開桁数 数値を文字列に変換する。数値は右詰めで len 桁分展開し、空きにはスペー スをつめる。戻り値は ptr の先頭アドレス。 ------------------------------------------------------------------------------ char *utoaf( ptr, num, len ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ unsigned int num; 変換数値 int len; 展開桁数 符号なし数値を文字列に変換する。数値は右詰めで len 桁分展開し、空きに はスペースをつめる。戻り値は ptr の先頭アドレス。 ------------------------------------------------------------------------------ char *utoafz( ptr, num, len ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ unsigned int num; 変換数値 int len; 展開桁数 符号なし数値を文字列に変換する。数値は右詰めで len 桁分展開し、空きに は '0' をつめる。戻り値は ptr の先頭アドレス。 ------------------------------------------------------------------------------ char *ultoaf( ptr, num, len ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ unsigned long num; 変換数値 int len; 桁幅 符号なしlong数値を文字列に変換する。戻り値は展開後の ptr のアドレス。 ------------------------------------------------------------------------------ char *itoh( ptr, num ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ int num; 変換数値 数値を16進数の文字列に変換する。必要最小桁。戻り値は展開後の ptr の '\0' のアドレス。 ------------------------------------------------------------------------------ char *ltoh( ptr, num ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ long num; 変換数値 数値を16進数の文字列に変換する。必要最小桁。戻り値は展開後の ptr の '\0' のアドレス。 ------------------------------------------------------------------------------ char *itohf( ptr, num, len ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ int num; 変換数値 int len; 展開桁数 数値を16進数の文字列に変換する。戻り値は ptr のアドレス。 ------------------------------------------------------------------------------ char *xitoh( ptr, num ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ int num; 変換数値 数値を16進数の文字列4桁(固定)に変換する。戻り値は展開後の ptr の '\0' のアドレス。 ------------------------------------------------------------------------------ char *xltoh( ptr, num ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ long num; 変換数値 long 数値を16進数の文字列5桁(固定)に変換する。戻り値は展開後の ptr の '\0' のアドレス。 ------------------------------------------------------------------------------ char *xctoh( ptr, num ); ------------------------------------------------------------------------------ char *ptr; 結果格納バッファ int num; 変換数値 数値を16進数の文字列2桁(固定)に変換する。戻り値は展開後の ptr の '\0' のアドレス。 ------------------------------------------------------------------------------ int abs( num ); ------------------------------------------------------------------------------ int num; 数値 絶対値を返す。 ------------------------------------------------------------------------------ long labs( num ); ------------------------------------------------------------------------------ long num; 数値 long で絶対値を返す。 ------------------------------------------------------------------------------ int div( num1, num2 ); ------------------------------------------------------------------------------ int num1; 数値 int num2; num1を割る数 割り算を実行する。結果は商を返す。実行直後余りは I レジスタに入るため、 結果は asm() 文で受け取る必要がある。 div( num1, num2 ); asm( " mv [_v1],ba" ); asm( " mv [_v2],i" ); ------------------------------------------------------------------------------ long ldiv( num1, num2 ); ------------------------------------------------------------------------------ long num1; 数値 long num2; num1を割る数 割り算を実行する。結果は商を返す。実行直後余りは Y レジスタに入るため、 結果は asm() 文で受け取る必要がある。 ldiv( num1, num2 ); asm( " mv [_v1],x" ); asm( " mv [_v2],y" ); ------------------------------------------------------------------------------ int rand(); ------------------------------------------------------------------------------ 整数で乱数を返す。 *バグ 範囲は15bitではなく16bitである。乱数の生成は適当。 ------------------------------------------------------------------------------ void srand( seed ); ------------------------------------------------------------------------------ int seed; シード 乱数のシードを設定する。 *バグ 乱数には時間も加えてあるためこの関数はあまり意味がない ------------------------------------------------------------------------------ ・メモリ管理 void *malloc( size ); ------------------------------------------------------------------------------ int size; 確保サイズ ヒープから指定量だけメモリを確保する。確保できればそのアドレスを、で きなければ NULL を返す。 ------------------------------------------------------------------------------ void *realloc( ptr, size ); ------------------------------------------------------------------------------ void *ptr; 変更するメモリブロック int size; 新しいサイズ メモリブロックの大きさを変更する。変更した新しいメモリブロックのポイ ンタを返す。変更に失敗すると NULL を返す。 ------------------------------------------------------------------------------ void free( ptr ); ------------------------------------------------------------------------------ void *ptr; メモリのポインタ 確保したメモリを開放する。 ------------------------------------------------------------------------------ void _heapinit( ptr, size ); ------------------------------------------------------------------------------ void *ptr; ヒープメモリの先頭 int size; ヒープサイズ ヒープメモリを設定する。システム専用。アプリケーションでの呼び出し不可 ------------------------------------------------------------------------------ ・その他 プログラムの終了 void exit( code ); ------------------------------------------------------------------------------ int code; 終了コード プログラムを終了する。code は終了コード。この関数は戻って来ない。 *バグ オープンしたストリームをクローズすることはない、各プログラムが責任を 持ってクローズしておく必要がある。 ------------------------------------------------------------------------------ void abort(); ------------------------------------------------------------------------------ プログラムを強制終了させる。この関数は戻って来ない。 ------------------------------------------------------------------------------ ●文字列操作 string_sc.h char *strcpy( str, ptr ); ------------------------------------------------------------------------------ char *str; 転送先 char *ptr; 転送元 文字列をコピーする。src <= ptr。戻り値は str ではなく、転送後の str 内の '\0' を指すことに注意。 ------------------------------------------------------------------------------ char *strncpy( str, ptr, len ); ------------------------------------------------------------------------------ char *str; 転送先 char *ptr; 転送元 int len; 最大転送長 文字列を最大 len 文字までコピー。戻り値は str ではなく、転送後の str の最後のアドレスを指すことに注意。 ------------------------------------------------------------------------------ char *strcat( str, ptr ); ------------------------------------------------------------------------------ char *str; 転送先 char *ptr; 転送後 str の後ろに ptr を連結。戻り値は str ではなく、転送後の str 内の '\0' を指すことに注意。 ------------------------------------------------------------------------------ char *strncat( str, ptr, len ); ------------------------------------------------------------------------------ char *str; 転送先 char *ptr; 転送後 int len; 最大転送長 str の後ろに ptr を最大 len 文字転送し連結。戻り値は str ではなく、転 送後の str 内の '\0' を指すことに注意。 ------------------------------------------------------------------------------ int strcmp( str, ptr ); ------------------------------------------------------------------------------ char *str; 比較文字列 char *ptr; 比較文字列 文字列比較。等しければ 0 を、strptrなら正の数を 返す。 ------------------------------------------------------------------------------ int strncmp( str, ptr, len ); ------------------------------------------------------------------------------ char *str; 比較文字列 char *ptr; 比較文字列 int len; 最大比較文字数 最大 len 文字までの文字列比較。等しければ 0 を、strptr なら正の数を返す。 ------------------------------------------------------------------------------ char *strchr( str, ch ); ------------------------------------------------------------------------------ char *str; 比較文字列 int ch; 検索文字 文字列中に ch が現れる最初の位置を返す。みつからなければ NULL。 ------------------------------------------------------------------------------ char *strstr( str, ptr ); ------------------------------------------------------------------------------ char *str; 比較文字列 char *ptr; 検索文字列 文字列中に ptr が現れる最初の位置を返す。みつからなければ NULL。 *バグ この関数はあまり速い実装ではない(手抜き) ------------------------------------------------------------------------------ char *strrchr( str, ch ); ------------------------------------------------------------------------------ char *str; 比較文字列 int ch; 検索文字 文字列中に ch が現れる最後の位置を返す。みつからなければ NULL。 ------------------------------------------------------------------------------ int strlen( str ); ------------------------------------------------------------------------------ char *str; 文字列 文字列の文字数を数える。結果はバイト数であって文字幅ではない。文字列 最後の '\0' は数に含まれない。 ------------------------------------------------------------------------------ char *strupr( str ); ------------------------------------------------------------------------------ char *str; 文字列 文字列中の小文字を大文字に変換する。戻り値は str '\0' 位置のポインタ。 ------------------------------------------------------------------------------ char *strlwr( str ); ------------------------------------------------------------------------------ char *str; 文字列 文字列中の大文字を小文字に変換する。戻り値は str '\0' 位置のポインタ。 ------------------------------------------------------------------------------ int fstrcmp( str, ptr ); ------------------------------------------------------------------------------ char *str; 比較文字列 char *ptr; 比較文字列 str と ptr を比較する。ptr は文字列の途中であっても比較成功と見なす。 等しければ 0 を、等しくなければ 0 以外を返す。大小判定の不要な文字列 比較に用いる。strcmp より効率がよい。strncmp( str, ptr, strlen(str) ) にほぼ等しい。 ------------------------------------------------------------------------------ char *strinsch( str ); ------------------------------------------------------------------------------ char *str; 挿入位置 str の位置に1文字(スペース)を挿入し文字列を1文字長くする。戻り値は '\0' の次のアドレス。 ------------------------------------------------------------------------------ char *strdelch( str ); ------------------------------------------------------------------------------ char *str; 削除位置 str の位置にある1文字を削除し文字列を1文字短くする。戻り値不明 ------------------------------------------------------------------------------ char *strtail( str ); ------------------------------------------------------------------------------ char *str; 文字列 文字列の最後の '\0' 位置のアドレスを得る。 ------------------------------------------------------------------------------ char *strcpyfl( str, ptr, len ); ------------------------------------------------------------------------------ char *str; 転送先 char *ptr; 転送元 int len; 文字数 文字列をコピーする。文字数が len より少ない場合スペースを補う。左詰め 文字列が len より長い場合は、len 文字だけ転送して終わる。'\0' 位置の アドレスを返す。 ------------------------------------------------------------------------------ char *strcpyfr( str, ptr, len ); ------------------------------------------------------------------------------ char *str; 転送先 char *ptr; 転送元 int len; 文字数 文字列をコピーする。文字数が len より少ない場合スペースを補う。右詰め 戻り値は str のアドレス。 ------------------------------------------------------------------------------ char *strchrp( str, ch ); ------------------------------------------------------------------------------ char *str; 比較文字列 int ch; 検索文字 文字列中に ch が現れる最初の位置を返す。みつからなければ '\0' のアド レスを返す。 ------------------------------------------------------------------------------ char *strchrpp( str, ch ); ------------------------------------------------------------------------------ char *str; 比較文字列 int ch; 検索文字 文字列中に ch が現れる最初の位置の次のアドレスを返す。みつからなけれ ば '\0' のアドレスを返す。 ------------------------------------------------------------------------------ void *memcpy( str, ptr, len ); ------------------------------------------------------------------------------ void *str; 転送先 void *ptr; 転送元 int len; 転送長 str に ptr を len byte 転送する。転送領域のオーバーラップ不可。戻り値 が str の最後に転送した次のアドレスであることに注意。 ------------------------------------------------------------------------------ void *memset( str, ch, len ); ------------------------------------------------------------------------------ void *str; 転送先 int ch; 転送文字 int len; 転送長 str から len byte に c を転送して埋める。例えば str から 32 byte を 0 にしたければ memset( str, 0, 32 );。戻り値は転送後の次のアドレスであ ることに注意。 ------------------------------------------------------------------------------ int memcmp( str, ptr, len ); ------------------------------------------------------------------------------ void *str; 比較データ void *ptr; 比較データ int len; 比較長 str と ptr を長さ len だけバイト比較する。等しければ 0 を、str < ptr なら負の数を、逆なら正の数を返す。 ------------------------------------------------------------------------------ void *memchr( str, ch, len ); ------------------------------------------------------------------------------ void *str; 検索エリア int ch; 検索するデータ int len; 検索長 str から len byte の範囲で、ch が最初に現れる場所を返す。 ------------------------------------------------------------------------------ char *wordcpy( str, ptr ); ------------------------------------------------------------------------------ char *str; 転送先 char *ptr; 転送元 文字列をコピーする。この時 ' ', '\r', '\t', '\n' などのコードがあると そこで転送を中止する。戻り値は str の '\0' のアドレス。 ------------------------------------------------------------------------------ char *strlinecpy( str, ptr ); ------------------------------------------------------------------------------ char *str; 転送先 char *ptr; 転送元 文字列をコピーする。この時 '\r' のコードがあるとそこで転送を中止す る。戻り値は str の '\0' のアドレス。 ------------------------------------------------------------------------------ char *strlinecpy2( str, ptr ); ------------------------------------------------------------------------------ char *str; 転送先 char *ptr; 転送元 文字列をコピーする。この時 '\r' や '\n' のコードがあるとそこで転送を 中止する。'\r' の次が '\n' の場合はそれをスキップする。戻り値は ptr の次に読み出すべきアドレス。 ------------------------------------------------------------------------------ char *skipspc( ptr ); ------------------------------------------------------------------------------ char *ptr; 文字列 空白を読み飛ばし、空白以外の文字があらわれたアドレスを返す。空白と見 なすのは '\t' か ' ' のみ。 ------------------------------------------------------------------------------ char *skipspcnl( ptr ); ------------------------------------------------------------------------------ char *ptr; 文字列 空白を読み飛ばし、空白以外の文字があらわれたアドレスを返す。空白と見 なすのは '\0' 以外で ' ' 以下の文字すべて。 ------------------------------------------------------------------------------ char *skipword( ptr ); ------------------------------------------------------------------------------ char *ptr; 文字列 アルファベットまたは数値の文字列を読み飛ばします。 ------------------------------------------------------------------------------ char *wordget( str, ptr ); ------------------------------------------------------------------------------ char *str; バッファ char *ptr; 文字列 ワードを取り出す。区切りは '\t', ' ', ',' とみなす。次に読むべき ptr を返す。 ------------------------------------------------------------------------------ ●文字判定 ctype_sc.h int isalpha( ch ); ------------------------------------------------------------------------------ int ch; 文字 その文字がアルファベットなら非0 ------------------------------------------------------------------------------ int isdigit( ch ); ------------------------------------------------------------------------------ int ch; 文字 その文字が数値非0 ------------------------------------------------------------------------------ int islower( ch ); ------------------------------------------------------------------------------ int ch; 文字 その文字が小文字なら0以外 ------------------------------------------------------------------------------ int isupper( ch ); ------------------------------------------------------------------------------ int ch; 文字 その文字が大文字なら0以外 ------------------------------------------------------------------------------ int isalnum( ch ); ------------------------------------------------------------------------------ int ch; 文字 その文字がアルファベットまたは数値なら0以外 ------------------------------------------------------------------------------ int isxdigit( ch ); ------------------------------------------------------------------------------ int ch; 文字 その文字が16進数文字なら0以外 ------------------------------------------------------------------------------ int isspace( ch ); ------------------------------------------------------------------------------ int ch; 文字 その文字が空白文字なら0以外 ------------------------------------------------------------------------------ int iskanji( ch ); ------------------------------------------------------------------------------ int ch; 文字 その文字が漢字の1byte目なら0以外 ------------------------------------------------------------------------------ int tolower( ch ); ------------------------------------------------------------------------------ int ch; 文字 もしその文字がアルファベット大文字なら小文字を返す。それ以外の文字は そのまま返す。 ------------------------------------------------------------------------------ int toupper( ch ); ------------------------------------------------------------------------------ int ch; 文字 もしその文字がアルファベット小文字なら大文字を返す。それ以外の文字は そのまま返す。 ------------------------------------------------------------------------------ ●ロングジャンプ setjmp_sc.h int setjmp( buf ); ------------------------------------------------------------------------------ jmp_buf *buf; ロングジャンプの設定を行う。この関数は 0 を返す。longjmp() から呼び 出された時は 0 以外を返す。jmp_buf は必ず JMP_SIZE 以上の配列でなけ ればならない。この点において他のC言語処理系と互換性がないので注意。 *バグ jmp_buf の定義方法が独自の形式になっている ------------------------------------------------------------------------------ void longjmp( buf, num ); ------------------------------------------------------------------------------ jmp_buf *buf; int num; buf に設定した setjmp() へ飛ぶ。num はその時の setjmp() の戻り値とし て使われる。この関数は次の命令へは戻って来ない。setjmp() を実行した 関数は決して終了していてはいけない。つまり戻れるのはトップレベルに対 してのみである。これは他の処理系の C言語でも同じであるが、意外に説明 されることがないので、ここで付け加えておく。 ------------------------------------------------------------------------------ ●時間 time_sc.h void zautime( buf ); ------------------------------------------------------------------------------ char *buf; 結果格納バッファ 6byte ZAURUS 本体内の時計を読み出す。おそらく UTC+12。-3時間で日本時間。 buf[0] 年(0〜255 +1900) buf[1] 月(1〜12) buf[2] 日(1〜31) buf[3] 時(0〜23) buf[4] 分(0〜59) buf[5] 秒(0〜59) ------------------------------------------------------------------------------ void zalmtime( buf ); ------------------------------------------------------------------------------ char *buf; 結果格納バッファ 3byte ZAURUS 内のアラーム設定時間を読み出す。スケジュール、デイリー共通。 zautime() と同じで日本時間への補正がかかっていない。 buf[0] 時(0〜23) buf[1] 分(0〜59) buf[2] 秒(0〜59) ------------------------------------------------------------------------------ void zaulocal( buf ); ------------------------------------------------------------------------------ char *buf; zautime()で得た時間、結果もここに入る (6byte) zautime() 形式を日本時間に補正する。 ------------------------------------------------------------------------------ ●漢字コード処理 kanji_sc.h int kanjipos( str, pos ); ------------------------------------------------------------------------------ char *str; 文字列 int pos; 位置 文字列の pos 位置の文字が漢字であるかどうか調べる。位置は1から数える 戻り値= 0 その位置は漢字ではない 1 その位置は漢字1byte目 2 その位置は漢字2byte目 ------------------------------------------------------------------------------ int kanjiptr( str, ptr ); ------------------------------------------------------------------------------ char *str; 文字列 char *ptr; 位置 文字列の ptr 位置の文字が漢字であるかどうか調べる。結果は kanjipos() と同じ。位置をポインタで指定する。 ------------------------------------------------------------------------------ int kanjichk( ch ); ------------------------------------------------------------------------------ char ch; 文字 そのコードが漢字1byte目かどうかチェックする。iskanji()と基本的に同じ。 ------------------------------------------------------------------------------ ● FCS呼び出し fcs_sc.h ・低レベル入出力ライブラリ int creat( name, attr ); ------------------------------------------------------------------------------ char *name; ファイル名 int attr; アトリビュート ファイルを作成する。ファイル名は fcs 内部形式に変換されていなくてはな らない。オープンしたファイルハンドルを返す。エラーの場合は -1 を返す。 アトリビュート bit0 ライトプロテクト bit1 不可視属性 ------------------------------------------------------------------------------ int open( name, mode ); ------------------------------------------------------------------------------ char *name; ファイル名 int mode; アトリビュート ファイルをオープンする。ファイル名は fcs 内部形式に変換されていなくて はならない。オープンしたファイルハンドルを返す。エラーの場合は -1 を 返す。モードは次の通り 1 読み出し 2 書き込み 3 読み書き両用 ------------------------------------------------------------------------------ void close( fd ); ------------------------------------------------------------------------------ int fd; ファイルハンドル ファイルをクローズする ------------------------------------------------------------------------------ int read( fd, buf, size ); ------------------------------------------------------------------------------ int fd; ファイルハンドル char *buf; 読み込むバッファ int size; 読み込むサイズ ファイルから指定サイズ分読み込む。読み込んだバイト数を返す。EOF なら 与えたサイズより読み込んだサイズの方が小さくなる。この関数は int 分の サイズしか読み出すことができない。long を使う場合は readl() ------------------------------------------------------------------------------ int read2( fd, buf, size, flag ); ------------------------------------------------------------------------------ int fd; ファイルハンドル char *buf; 読み込むバッファ int size; 読み込むサイズ int flag; フラグ 1 ならbinary, 0 なら text read() とほぼ同じ。read() が常に binary モードで読み出すのに対して、 read2() は binary と text の指定ができる。text モードの場合、0x1a の コードを EOF とみなす。 ------------------------------------------------------------------------------ int write( fd, buf, size ); ------------------------------------------------------------------------------ int fd; ファイルハンドル char *buf; 書き込むバッファ int size; 書き込むサイズ ファイルへ指定サイズ分書き出す。書き込んだバイト数を返す。 ------------------------------------------------------------------------------ long lseek( fd, offset, mode ); ------------------------------------------------------------------------------ int fd; ファイルハンドル long offset; オフセット int mode; モード ファイルの位置を設定する。offset はバイト数、mode はバイト数をどこか ら数えるか指定する。mode= 0 先頭から, 1 現在位置から, 2 最後から。現 在のファイル位置を返す。 ------------------------------------------------------------------------------ int files( buf, name, pos ); ------------------------------------------------------------------------------ char *buf; 読み込むバッファ char *name; ファイル名 int pos; 検索開始位置 ディレクトリ内からファイルを探す。探したファイル名をバッファに返す。 ファイル名は fcs 形式であり、ワイルドカード '?' も使えるため、ワイル ドカード展開の役割も果たす。検索は pos 位置から始め、見つかった位置の pos を返す。再び pos+1 を与えることにより、次検索が可能。見つからなけ れば -1 を返す。 ------------------------------------------------------------------------------ int filesa( buf, name, pos, mode ); ------------------------------------------------------------------------------ char *buf; ファイル名を読み込むバッファ char *name; ファイル名 int pos; 検索開始位置 int mode; 検索モード files() より強力なファイル検索が行える。mode は次の通り bit0 = 0 後方検索, 1 前方(逆)検索 bit7 = 1なら不可視属性でも検索を行う ------------------------------------------------------------------------------ int fcs_stat( name, buf ); ------------------------------------------------------------------------------ char *name; ファイル名 char *buf; 情報を読み込むバッファ 指定ファイルの情報をバッファに読み出す。ファイル名は fcs 形式であるこ と。バッファの内訳は以下の通り buf[0] = ファイル属性 buf[1〜2]= タイムスタンプ 時間 buf[3〜4]= タイムスタンプ 日付 buf[5〜7]= ファイルサイズ 戻り値はファイルサイズの下位16bitで、エラーなら -1 を返す。 ------------------------------------------------------------------------------ long fcs_fsize( name ); ------------------------------------------------------------------------------ char *name; ファイル名 ファイル名からファイルサイズを得る。エラーなら -1 を返す。 ------------------------------------------------------------------------------ long fcs_fstat( fn, buf, mode ); ------------------------------------------------------------------------------ int fn; ファイルハンドル char *buf; 情報を読み込むバッファ int mode; 情報の種類 指定ファイルの情報を読み出す。mode= 0 の場合、返り値はファイルのサイ ズ、mode= 1 の場合、buf にファイル名と属性を返す。 ------------------------------------------------------------------------------ int unlink( name ); ------------------------------------------------------------------------------ char *name; ファイル名 ファイルを削除する。ファイル名は fcs 形式であること。エラーなら0以外 の値を返す。 ------------------------------------------------------------------------------ int fcs_readbyte( fd ); ------------------------------------------------------------------------------ int fd; ファイルハンドル FCSを使って直接1byte入力します。無条件で下位バイトのみ取り出します。 この関数はファイルからの読み込みに使用して下さい。無入力の可能性があ るデバイスからの読み込みの場合は fcs_readbyteK() を使用して下さい。 ------------------------------------------------------------------------------ int fcs_readbyteK( fd ); ------------------------------------------------------------------------------ int fd; ファイルハンドル FCSを使って直接1byte入力します。上位1byteは実際にデータを読み込んだ 数です。(通常1) もし上位バイトが0ならその入力は無効になります。 ------------------------------------------------------------------------------ int fcs_writebyte( fd, data ); ------------------------------------------------------------------------------ int fd; ファイルハンドル int data; 出力データ FCSを使って直接1byte出力します。戻り値は FCS の返り値です。 ------------------------------------------------------------------------------ int fcs_readsns( fd ); ------------------------------------------------------------------------------ int fd; ファイルハンドル FCSの非破壊読み込みを行います。上位byteが入力データのバイト数、下位 1byteが実際のデータです。上位1byteが0なら入力値は無効です。 ------------------------------------------------------------------------------ int fcs_readsnsb( fd ); ------------------------------------------------------------------------------ int fd; ファイルハンドル そのファイルハンドルから次のデータが読み込めるかどうかだけを返します。 実際は fcs_readsns() の上位バイトだけを返しています。0なら読み込めな い(受信データはない)0でなければデータありです。 ------------------------------------------------------------------------------ void chgdev( drv ); ------------------------------------------------------------------------------ char *drv; ドライブ名 カレントドライブ(デバイス名)を設定する。drv は ':' を含めて 6文字以下 でなければならない。設定すると、ファイルオープン時のデフォルトデバイ ス名として、ファイル名の最初に付加されるようになる。基本的に ZAURUS では 'SX:' 以外のデバイスをカレントドライブにすることはできない。 ------------------------------------------------------------------------------ char *curdev( drv ); ------------------------------------------------------------------------------ char *drv; ドライブ名 現在のカレントドライブ(デバイス名)を drv に得る。ZAURUS では通常は "SX:" が返って来ることになっているが、カレントドライブを変更した場合 はこの限りではない。バッファのドライブ名の最後には '\0' が入り、その '\0' 位置のアドレスを返す。 ------------------------------------------------------------------------------ void chgdev( drv ); ------------------------------------------------------------------------------ char *drv; ドライブ名 カレントドライブ(デバイス名)を設定する。drv は ':' を含めて 6文字以下 でなければならない。設定すると、ファイルオープン時のデフォルトデバイ ス名として、ファイル名の最初に付加されるようになる。基本的に ZAURUS では 'SX:' 以外のデバイスをカレントドライブにすることはできない。 ------------------------------------------------------------------------------ ● IOCS呼び出し iocs_sc.h ・IOCSコールライブラリ int keyin(); ------------------------------------------------------------------------------ キーボードから1文字入力を行う。入力したコードを返す。 ------------------------------------------------------------------------------ int keyclr(); ------------------------------------------------------------------------------ キーボードの入力バッファをクリアする。 ------------------------------------------------------------------------------ int iocs_keyscan(); ------------------------------------------------------------------------------ キーボードからリアルタイム1文字入力を行う。入力がなければ 255 を返す。 ------------------------------------------------------------------------------ void cursor( type ); ------------------------------------------------------------------------------ int type; カーソルタイプ カーソルの形状指定、ブリンク指定、ON/OFF 制御、を行う。 type = bit0〜2 = カーソル形状 bit3 = 点滅指定 bit5 = カーソルON 全部 0 ならカーソル OFF ------------------------------------------------------------------------------ void curlocate( x, y ); ------------------------------------------------------------------------------ int x; カーソル位置X int y; カーソル位置Y カーソルの位置を設定する。ここでいうカーソルとは画面上の出力位置とは 異なり、点滅するカーソルそのものの位置である。このカーソル位置は文字 出力によって勝手に移動することはない。locatexy() + cursor_flush() と 等しい。 ------------------------------------------------------------------------------ void cursor_flush(); ------------------------------------------------------------------------------ カーソルの位置をフラッシュ設定する。カーソル位置は文字出力によって勝 手に移動することはない。ただし、文字出力直後にこのコマンドを実行する ことによって、システム上の文字出力位置を、点滅カーソルの位置にセット することができる。 ------------------------------------------------------------------------------ void locatexy( x, y ); ------------------------------------------------------------------------------ int x; カーソル位置X int y; カーソル位置Y カーソルの位置を定義する。このカーソルは文字出力位置の指定。次の cursor_flush() か iocs_print() の表示位置を決定する。 ------------------------------------------------------------------------------ void iocs_print( ptr ); ------------------------------------------------------------------------------ char *ptr; 表示文字列 locatexy() で設定した位置に文字列を表示する。文字列は pascal 形式であ る点に注意。1byte 目は表示する文字数で、データは 2byte 目以降に書き込 まれていること。 ------------------------------------------------------------------------------ void iocs_printlen( len, ptr ); ------------------------------------------------------------------------------ int len; 文字数 char *ptr; 表示文字列 指定文字数文字列を表示する。座標指定は locatexy() で行う。 ------------------------------------------------------------------------------ void iocs_regionclr( len ); ------------------------------------------------------------------------------ int len; 文字数 locatexy() で設定した位置から len 文字だけ消去する。 ------------------------------------------------------------------------------ void iocs_lineclr( line ); ------------------------------------------------------------------------------ int line; 行 指定行をクリアする。 ------------------------------------------------------------------------------ void iocs_scollup( line ); ------------------------------------------------------------------------------ int line; 行数 line行スクロールアップする。 ------------------------------------------------------------------------------ void iocs_scolldw( line ); ------------------------------------------------------------------------------ int line; 行数 line行スクロールダウンする。 ------------------------------------------------------------------------------ void iocs_insline( line, lines ); ------------------------------------------------------------------------------ int line; 行位置 int lines; 行数 line行にlines行挿入する。 ------------------------------------------------------------------------------ void iocs_cls(); ------------------------------------------------------------------------------ 画面を消去する。 ------------------------------------------------------------------------------ void keyboard( mode ); ------------------------------------------------------------------------------ int mode; 入力ボードの ON/OFF を行う。mode= 'N' なら OFF、mode= 'P' なら ON。 *バグ BASIC の WIDTH を実行しているだけ ------------------------------------------------------------------------------ void iocs_width( mode, key ); ------------------------------------------------------------------------------ int mode; WIDTH パラメータ int key; キーボードモード mode= 'K' 16x16 dot漢字 29桁× 8行 行間 20dot mode= 'S' 12x12 dot漢字 39桁×10行 行間 16dot mode= 'M' 12x12 dot漢字 39桁×11行 行間 15dot mode= 'A' 12x8 dot漢字 39桁×16行 行間 10dot key= 'N' キーボードなし key= 'P' キーボードあり key= 'C' カーソルパッドつき *バグ BASIC の WIDTH を実行しているだけ ------------------------------------------------------------------------------ int basic( command ); ------------------------------------------------------------------------------ char *command; コマンド列 中間コード列を与えて、BASIC コマンドを実行する。 ------------------------------------------------------------------------------ int iocs_penpos(); ------------------------------------------------------------------------------ ペンのタッチ座標を読み出す。値が有効なら 1、そうでなければ 0 を返す。 座標は _x_pos, _y_pos に代入される。キー入力のあとにそれが画面タッチ である場合に呼び出すルーチン。 ------------------------------------------------------------------------------ int iocs_pencheck(); ------------------------------------------------------------------------------ ペンのタッチ座標を読み出す。値が有効なら 1、そうでなければ 0 を返す。 座標は _x_pos, _y_pos に代入される。iocs_penpos() とは異なり、キー入 力と併用する必要はない。独立してペンタッチのみ検出する場合に使用する。 ------------------------------------------------------------------------------ int iocs_pencheck2(); ------------------------------------------------------------------------------ _x_pos, _y_pos に 1/4 した値を入れる以外は iocs_pencheck() と同じ。 ------------------------------------------------------------------------------ int iocs_posdecA(); ------------------------------------------------------------------------------ ペンのタッチ座標を読み出す。読み出した値は WIDTH,A にあわせて計算され _x_pos, _y_pos に文字座標として格納される。 ------------------------------------------------------------------------------ int iocs_posdecM(); ------------------------------------------------------------------------------ ペンのタッチ座標を読み出す。読み出した値は WIDTH,M にあわせて計算され _x_pos, _y_pos に文字座標として格納される。 ------------------------------------------------------------------------------ long rtc_clock(); ------------------------------------------------------------------------------ rtcの値を読み出す(0x8000 からの 3byte を取り出すだけ) ------------------------------------------------------------------------------ void rtc_to_set( time ); ------------------------------------------------------------------------------ int time; タイムアウト時間(秒) rtc_to_check() のための時間を設定する。 ------------------------------------------------------------------------------ int rtc_to_check(); ------------------------------------------------------------------------------ rtc を使ったタイムアウト判定を行う。rtc_to_set() 実行後、指定した時 間が経過すると 1 を、そうでなければ 0 を返す。この関数は、最低1秒に 1回以上呼び出しをしていないと返り値は無効である。 ------------------------------------------------------------------------------ ●CRCやチェックサム計算 crc_sc.h ・CRC計算 int _getcrc( data, len, crc ); ------------------------------------------------------------------------------ char *data; CRC計算を行うデータ int len; データ長 int crc; 初期CRC値 data の指定長分 CRC-16 を計算して結果を返す。 ------------------------------------------------------------------------------ int _getsum( data, len ); ------------------------------------------------------------------------------ char *data; CheckSum計算を行うデータ int len; データ長 データの指定長分チェックサムを計算して結果を返す。結果は 16bit。 ------------------------------------------------------------------------------ ●グラフィックライブラリ graph_sc.h ・LCDドライバによるグラフィックライブラリ void gra_disp( mode ); ------------------------------------------------------------------------------ int mode; 表示モード 表示の ON/OFF を行う。mode=1 で表示、mode=0 で消灯 ------------------------------------------------------------------------------ void gra_cls(); ------------------------------------------------------------------------------ 画面消去 ------------------------------------------------------------------------------ void gra_pset( x, y, mode ); ------------------------------------------------------------------------------ int x; X座標 int y; X座標 int mode; モード 0=点灯,1=消灯,2=反転 指定座標に点を打つ ------------------------------------------------------------------------------ int gra_point( x, y ); ------------------------------------------------------------------------------ int x; X座標 int y; X座標 画面上の点を読み出す。戻り値 0=消灯, 1=点灯 ------------------------------------------------------------------------------ void gra_line( x1, y1, x2, y2, mode ); ------------------------------------------------------------------------------ int x1,y1; 始点 int x2,y2; 終点 int mode; モード 0=点灯,1=消灯,2=反転 線を引く *バグ ラインスタイルの設定方法が不明 ------------------------------------------------------------------------------ void gra_fill( x1, y1, x2, y2, mode ); ------------------------------------------------------------------------------ int x1,y1; 始点 int x2,y2; 終点 int mode; モード 0=点灯,1=消灯,2=反転 塗り潰した箱を描く ------------------------------------------------------------------------------ void gra_spattern( x, y, data, mode ); ------------------------------------------------------------------------------ int x; X座標 int y; X座標 int data; 表示データ int mode; モード 0=点灯,1=消灯,2=反転 1byteのデータを画面上の任意の位置に表示する。 ------------------------------------------------------------------------------ int gra_gpattern( x, y ); ------------------------------------------------------------------------------ int x; X座標 int y; X座標 1byteのデータを画面上の任意の位置から読み出す。 ------------------------------------------------------------------------------ void gra_simage( data, line ); ------------------------------------------------------------------------------ char *data; パターンデータ int line; 展開行 *バグ この関数(IOCS CALL)はうまく動かない。なぜ? ------------------------------------------------------------------------------ void gra_gimage( data, line ); ------------------------------------------------------------------------------ char *data; パターンデータ格納エリア int line; 展開行 *バグ この関数(IOCS CALL)はうまく動かない。なぜ? ------------------------------------------------------------------------------ ●サウンドライブラリ sound_sc.h ・ブザーコントロール void sound_ctrl( mode ); ------------------------------------------------------------------------------ int mode; ブザーモード mode= 0 音の停止/ブザーOFF 0x10 ブザーON 0x20 2KHz の BEEP 0x30 4KHz の BEEP ------------------------------------------------------------------------------ void sound_beep( wait, length ); ------------------------------------------------------------------------------ int wait; 音程調整パラメータ int length; 音長調整パラメータ 任意の高さの音を出す。鳴らしている間別の処理はできない。音長は音程に よって変化する(一定ではない)。 ------------------------------------------------------------------------------ void sound_beep2( wait, length ); ------------------------------------------------------------------------------ int wait; 音程調整パラメータ int length; 音長調整パラメータ 任意の高さの音を出す。鳴らしている間別の処理はできない。音長は音程が 変わっても、常にほぼ一定の長さになる。あまり短い音は出せないので、効 果音作成用には向かない。 ------------------------------------------------------------------------------ ●LCDC直接描画ライブラリ lcd_sc.h このライブラリは加古さんの解析情報をもとに作られました。 ・通常レベル void lcd_init(); ------------------------------------------------------------------------------ LCDライブラリの初期化を行う。ハードの違いの差を埋めるための情報を集 める。このライブラリを使う時は必ず最初に呼び出しておく必要あり。 ------------------------------------------------------------------------------ void lcd_setview( x1, y1, x2, y2 ); ------------------------------------------------------------------------------ int x1; 開始座標X int y1; 開始座標Y int x2; 終了座標X int y2; 終了座標Y ウィンドウのビューポート範囲を設定する。初期設定は画面全範囲。 ------------------------------------------------------------------------------ void lcd_vwrite( x, y, attr, data, len ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート char *data; 書き込むデータ int len; 転送バイト数 画面上の任意の位置にパターンを転送する。データは1byteを垂直にし、横 方向に並べたものである。GPRINT や従来のポケコンの V-RAM 構造と同じ。 データ アトリビュート 0 1 2 → bit0〜1 mode (x,y)→MSB□ □ □ 0 PSET □ □ □ 1 XOR □ □ □ 2 AND □ □ □ → 3 OR □ □ □ bit2 反転 □ □ □ □ □ □ LSB□ □ □ ------------------------------------------------------------------------------ void lcd_hwrite( x, y, attr, data, len ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート (lcd_vwriteと同じ) char *data; 書き込むデータ int len; 転送バイト数 画面上の任意の位置にパターンを転送する。データは1byteを水平にし、横 方向に並べたものである。パソコンのビットマップ画面の V-RAM 構造と同じ データ 0 1 2 → MSB LSB (x,y)→□□□□□□□□ □□□□□□□□ □□□□□□□□ → ------------------------------------------------------------------------------ void lcd_hvwrite( x, y, attr, data, len ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート (lcd_vwriteと同じ) char *data; 書き込むデータ int len; 転送バイト数 画面上の任意の位置にパターンを転送する。データは1byteを水平にし、縦方 向に並べたものである。 データ MSB LSB (x,y)→□□□□□□□□ 0 □□□□□□□□ 1 □□□□□□□□ 2 ↓ ------------------------------------------------------------------------------ void lcd_hvwrite2( x, y, attr, data ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート (lcd_vwriteと同じ) char *data; 書き込むデータ データの1byte目がデータ長になる。それ以外は lcd_hvwrite() と同じ。 ------------------------------------------------------------------------------ void lcd_vwrite2( x, y, attr, data ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート (lcd_vwriteと同じ) char *data; 書き込むデータ データの1byte目がデータ長になる。それ以外は lcd_vwrite() と同じ。 ------------------------------------------------------------------------------ ・低レベル(内部処理用) void lcd_wakeup(); ------------------------------------------------------------------------------ LCDCのアクセス開始を宣言する。割り込み禁止状態で呼び出すこと。 ------------------------------------------------------------------------------ void lcd_sleep(); ------------------------------------------------------------------------------ LCDCのアクセス開始状態をもとに戻す。割り込み禁止状態で呼び出すこと。 ------------------------------------------------------------------------------ void lcd_wait(); ------------------------------------------------------------------------------ BUSY からデバイスがアクセス可能状態になるのを待つ。wakeup 状態でなけ れば無効。 ------------------------------------------------------------------------------ void lcd_winall(); ------------------------------------------------------------------------------ 描画ウィンドウ領域を設定する。wakeup 状態でなければ無効。範囲自体は lcd_setview() で定義する。 ------------------------------------------------------------------------------ void lcd_winres(); ------------------------------------------------------------------------------ 描画ウィンドウ領域を元に戻す。wakeup 状態でなければ無効。 ------------------------------------------------------------------------------ void lcd_vpattern( x, y, attr, buf, len ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート char *data; 書き込むデータ int len; 転送バイト数 垂直モードでパターンを転送する。(__WC)=アトリビュート ------------------------------------------------------------------------------ void lcd_vpattern2( x, y, attr, buf ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート char *data; 書き込むデータ パターンを転送する。(__WC)=アトリビュート。データの1byte目が転送デー タ数になる。それ以外は lcd_vpattern()と同じ。 ------------------------------------------------------------------------------ void lcd_hpattern( x, y, attr, buf, len ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート char *data; 書き込むデータ int len; 転送バイト数 水平モードでパターンを転送する。(__WC)=アトリビュート ------------------------------------------------------------------------------ void lcd_hvpattern( x, y, attr, buf, len ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート char *data; 書き込むデータ int len; 転送バイト数 水平で縦にパターンを転送する。(__WC)=アトリビュート ------------------------------------------------------------------------------ void lcd_hvpattern2( x, y, attr, buf ); ------------------------------------------------------------------------------ int x; X座標 int y; Y座標 int attr; アトリビュート char *data; 書き込むデータ 水平で縦にパターンを転送する。(__WC)=アトリビュート。データの1byte目 が転送データ数になる。それ以外は lcd_hvpattern()と同じ。 ------------------------------------------------------------------------------ ●注意 まだまだバグ多数あり、十分注意する必要がある。利用条件は必ず readme.doc を 参照し、それに従うこと。 -- 小笠原博之 oga@art.udn.ne.jp http://www.vector.co.jp/authors/VA004474/