WonderWitch 技術情報 2001/02/07
2001年2月7日公開の技術情報です。
標準ライブラリ関数 fsetpos()、fseek() で、unsigned int の正の整数の範囲を越える位置を扱う場合に正しく動作しませんでした。この問題を修正したライブラリを準備し、ダウンロードページで提供しました。
→ダウンロードページ
標準ライブラリ関数 fprintf()、vfprintf() を用いると、ユーザデータ領域を破壊する問題がありました。
このため、プログラムの初期化済みデータが破壊されプログラムが正しく動作しない場合がありました。
この問題を修正したライブラリを準備し、ダウンロードページで提供しました。
→ダウンロードページ
標準ライブラリ関数 exit() がドキュメントにはあるものの、実体が提供されていませんでした。
この関数を含むライブラリを準備し、ダウンロードページで提供しました。
→ダウンロードページ
ユーザプログラム終了時にオープン中のファイルを自動的にクローズする機能が正しく動作していませんでした。
この問題を修正した FreyaOS を準備し、ダウンロードページで提供しました。
→ダウンロードページ
ユーザプログラムが不当なファイルディスクリプタを指定して、read()、write()、seek()などのファイル操作を行なうと、ハングアップする場合がありました。これは、ファイルディスクリプタを引数として受け取る関数群が与えられたファイルディスクリプタの値をチェックしないために起こる問題だったため、この問題を修正した FreyaOS を準備し、ダウンロードページで提供しました。
→ダウンロードページ
システム制御BIOSの機能、SYS_GET_OWNERINFO (C言語呼出形式: sys_get_ownerinfo())は、WonderSwan Color でグレースケールモード以外のカラーモードで実行した場合、正しく動作しません。WonderSwan Color でこの機能を利用する場合は、以下のいずれかの方法で問題を回避して下さい。
- カラーモードをグレースケールモードにして SYS_GET_OWNERINFO を実行
- WonderSwan Color に対応したライブラリ関数 wwc_sys_get_ownerinfo() を使用
wwc_sys_get_ownerinfo() 関数を含むカラー対応ライブラリ libwwc.lib、この関数のプロトタイプ宣言を含むヘッダーファイル sys/libwwc.h、および、この関数の説明を含むドキュメントを準備し、ダウンロードページで提供しました。
→wwc_sys_get_ownerinfo()の説明
→ダウンロードページ
ライブラリ関数 sys_get_ownerinfo() の戻り値型は void となっていましたが、システム制御BIOSの機能 SYS_GET_OWNERINFO はエラー時にエラーコードを返すため、正しくは int とするべきでした。
この問題を修正したライブラリとヘッダーファイルを準備し、ダウンロードページで提供しました。
→ダウンロードページ
ライブラリ関数 text_store_numeric() は、書式指定に NUM_STORE が指定されていない場合に正しく動作しませんでした。書式指定に NUM_STORE を指定しなくても正しく動作するよう text_store_numeric() 関数を修正しました。修正版の関数を含むライブラリを準備し、ダウンロードページで提供しました。
→ダウンロードページ
演奏データ変換ツール sndcnv に以下の問題がありました。
- パンポットの指定は、指定後にボリュームを変更しないと反映されない
- 3レベル以上ネストしたループが正常に機能しない
この問題を修正した sndcnv を準備し、ダウンロードページで提供しました。
→ダウンロードページ
プログラムの異常動作などで FreyaOS のワークエリアが部分的に破壊されると、その後、FreyaOS の再転送などをおこなっても正常に動作しない問題がありました。この問題に対応するため、FreyaOS のワークエリアを強制的に消去するツールとそのドキュメントを提供しました。
→FreyaOS ワークエリアクリーナー「clean」の説明
→ダウンロードページ
シリアル通信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.