WonderWitch 技術情報 2001/02/07

2001年2月7日公開の技術情報です。

fsetpos()、fseek()が正しく動作しませんでした

標準ライブラリ関数 fsetpos()、fseek() で、unsigned int の正の整数の範囲を越える位置を扱う場合に正しく動作しませんでした。この問題を修正したライブラリを準備し、ダウンロードページで提供しました。

ダウンロードページ


fprintf()、vfprintf()がデータ領域を破壊していました

標準ライブラリ関数 fprintf()、vfprintf() を用いると、ユーザデータ領域を破壊する問題がありました。 このため、プログラムの初期化済みデータが破壊されプログラムが正しく動作しない場合がありました。 この問題を修正したライブラリを準備し、ダウンロードページで提供しました。

ダウンロードページ


exit()関数を提供しました

標準ライブラリ関数 exit() がドキュメントにはあるものの、実体が提供されていませんでした。 この関数を含むライブラリを準備し、ダウンロードページで提供しました。

ダウンロードページ


プログラム終了時のファイル自動クローズが正しく動作しませんでした

ユーザプログラム終了時にオープン中のファイルを自動的にクローズする機能が正しく動作していませんでした。 この問題を修正した FreyaOS を準備し、ダウンロードページで提供しました。

ダウンロードページ


不当なファイルディスクリプタを指定すると問題が起こっていました

ユーザプログラムが不当なファイルディスクリプタを指定して、read()、write()、seek()などのファイル操作を行なうと、ハングアップする場合がありました。これは、ファイルディスクリプタを引数として受け取る関数群が与えられたファイルディスクリプタの値をチェックしないために起こる問題だったため、この問題を修正した FreyaOS を準備し、ダウンロードページで提供しました。

ダウンロードページ


sys_get_ownerinfo()はWonderSwan Colorでは正しく動作しません

システム制御BIOSの機能、SYS_GET_OWNERINFO (C言語呼出形式: sys_get_ownerinfo())は、WonderSwan Color でグレースケールモード以外のカラーモードで実行した場合、正しく動作しません。WonderSwan Color でこの機能を利用する場合は、以下のいずれかの方法で問題を回避して下さい。

wwc_sys_get_ownerinfo() 関数を含むカラー対応ライブラリ libwwc.lib、この関数のプロトタイプ宣言を含むヘッダーファイル sys/libwwc.h、および、この関数の説明を含むドキュメントを準備し、ダウンロードページで提供しました。

wwc_sys_get_ownerinfo()の説明
ダウンロードページ


sys_get_ownerinfo()がvoidからintに変更されました

ライブラリ関数 sys_get_ownerinfo() の戻り値型は void となっていましたが、システム制御BIOSの機能 SYS_GET_OWNERINFO はエラー時にエラーコードを返すため、正しくは int とするべきでした。 この問題を修正したライブラリとヘッダーファイルを準備し、ダウンロードページで提供しました。

ダウンロードページ


text_store_numeric()関数の書式指定に NUM_STORE が必要でした

ライブラリ関数 text_store_numeric() は、書式指定に NUM_STORE が指定されていない場合に正しく動作しませんでした。書式指定に NUM_STORE を指定しなくても正しく動作するよう text_store_numeric() 関数を修正しました。修正版の関数を含むライブラリを準備し、ダウンロードページで提供しました。

ダウンロードページ


sndcnvにバグがありました

演奏データ変換ツール sndcnv に以下の問題がありました。

この問題を修正した sndcnv を準備し、ダウンロードページで提供しました。

ダウンロードページ


FreyaOSのワークエリアをクリアするプログラムを提供しました

プログラムの異常動作などで FreyaOS のワークエリアが部分的に破壊されると、その後、FreyaOS の再転送などをおこなっても正常に動作しない問題がありました。この問題に対応するため、FreyaOS のワークエリアを強制的に消去するツールとそのドキュメントを提供しました。

FreyaOS ワークエリアクリーナー「clean」の説明
ダウンロードページ


comm_receive_block()の仕様と実装に問題がありました

シリアル通信BIOSの機能 COMM_RECEIVE_BLOCK は、正常受信やタイムアウトなどのエラーコードを AX に、実際に受信したバイト数を DX にそれぞれ返します。 しかし、この機能を用いるライブラリ関数 comm_receive_block() では、DX に返る実際の受信バイト数を返していませんでした。 この問題に対応するため、comm_receive_block()関数の呼出形式を以下のように変更しました。

C言語呼び出し形式
int near comm_receive_block(void far *buffer, int size, int far *bytes);
引数:
buffer 受信バッファポインタ
size 受信バッファサイズ
bytes 実際に受信したバイト数を格納するint変数へのfarポインタ
戻り値:
エラーコード

機能詳細:
buffer から確保されているデータバッファに、size で指定するバイト数シリアル通信回線から受信し、実際に受信されたバイト数を *bytes に格納します。
comm_set_timeout() によるデフォルトのタイムアウト設定に従い、 各バイト毎にタイムアウト判定を行います。
タイムアウトが発生した場合は ERR_SIO_TIMEOUT が返ります。
受信完了前にキャンセルされた場合は、ERR_SIO_CANCEL が返ります。
正常に受信を完了した場合には、ERR_SIO_OK が返ります。

この変更を反映したヘッダーファイル、ライブラリ、および、オンラインドキュメントをダウンロードページで提供しました。

ダウンロードページ


Copyright (C) 2001 Qute Corporation. All rights reserved.